@cluesmith/codev 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (245) hide show
  1. package/bin/af.js +8 -0
  2. package/bin/codev.js +4 -0
  3. package/bin/consult.js +7 -0
  4. package/dist/agent-farm/cli.d.ts +11 -0
  5. package/dist/agent-farm/cli.d.ts.map +1 -0
  6. package/dist/agent-farm/cli.js +359 -0
  7. package/dist/agent-farm/cli.js.map +1 -0
  8. package/dist/agent-farm/commands/cleanup.d.ts +12 -0
  9. package/dist/agent-farm/commands/cleanup.d.ts.map +1 -0
  10. package/dist/agent-farm/commands/cleanup.js +154 -0
  11. package/dist/agent-farm/commands/cleanup.js.map +1 -0
  12. package/dist/agent-farm/commands/db.d.ts +38 -0
  13. package/dist/agent-farm/commands/db.d.ts.map +1 -0
  14. package/dist/agent-farm/commands/db.js +133 -0
  15. package/dist/agent-farm/commands/db.js.map +1 -0
  16. package/dist/agent-farm/commands/index.d.ts +11 -0
  17. package/dist/agent-farm/commands/index.d.ts.map +1 -0
  18. package/dist/agent-farm/commands/index.js +11 -0
  19. package/dist/agent-farm/commands/index.js.map +1 -0
  20. package/dist/agent-farm/commands/open.d.ts +15 -0
  21. package/dist/agent-farm/commands/open.d.ts.map +1 -0
  22. package/dist/agent-farm/commands/open.js +118 -0
  23. package/dist/agent-farm/commands/open.js.map +1 -0
  24. package/dist/agent-farm/commands/rename.d.ts +13 -0
  25. package/dist/agent-farm/commands/rename.d.ts.map +1 -0
  26. package/dist/agent-farm/commands/rename.js +33 -0
  27. package/dist/agent-farm/commands/rename.js.map +1 -0
  28. package/dist/agent-farm/commands/send.d.ts +9 -0
  29. package/dist/agent-farm/commands/send.d.ts.map +1 -0
  30. package/dist/agent-farm/commands/send.js +282 -0
  31. package/dist/agent-farm/commands/send.js.map +1 -0
  32. package/dist/agent-farm/commands/spawn.d.ts +15 -0
  33. package/dist/agent-farm/commands/spawn.d.ts.map +1 -0
  34. package/dist/agent-farm/commands/spawn.js +575 -0
  35. package/dist/agent-farm/commands/spawn.js.map +1 -0
  36. package/dist/agent-farm/commands/start.d.ts +9 -0
  37. package/dist/agent-farm/commands/start.d.ts.map +1 -0
  38. package/dist/agent-farm/commands/start.js +175 -0
  39. package/dist/agent-farm/commands/start.js.map +1 -0
  40. package/dist/agent-farm/commands/status.d.ts +8 -0
  41. package/dist/agent-farm/commands/status.d.ts.map +1 -0
  42. package/dist/agent-farm/commands/status.js +123 -0
  43. package/dist/agent-farm/commands/status.js.map +1 -0
  44. package/dist/agent-farm/commands/stop.d.ts +8 -0
  45. package/dist/agent-farm/commands/stop.d.ts.map +1 -0
  46. package/dist/agent-farm/commands/stop.js +76 -0
  47. package/dist/agent-farm/commands/stop.js.map +1 -0
  48. package/dist/agent-farm/commands/tower.d.ts +19 -0
  49. package/dist/agent-farm/commands/tower.d.ts.map +1 -0
  50. package/dist/agent-farm/commands/tower.js +125 -0
  51. package/dist/agent-farm/commands/tower.js.map +1 -0
  52. package/dist/agent-farm/commands/tutorial.d.ts +10 -0
  53. package/dist/agent-farm/commands/tutorial.d.ts.map +1 -0
  54. package/dist/agent-farm/commands/tutorial.js +49 -0
  55. package/dist/agent-farm/commands/tutorial.js.map +1 -0
  56. package/dist/agent-farm/commands/util.d.ts +15 -0
  57. package/dist/agent-farm/commands/util.d.ts.map +1 -0
  58. package/dist/agent-farm/commands/util.js +108 -0
  59. package/dist/agent-farm/commands/util.js.map +1 -0
  60. package/dist/agent-farm/db/errors.d.ts +17 -0
  61. package/dist/agent-farm/db/errors.d.ts.map +1 -0
  62. package/dist/agent-farm/db/errors.js +46 -0
  63. package/dist/agent-farm/db/errors.js.map +1 -0
  64. package/dist/agent-farm/db/index.d.ts +41 -0
  65. package/dist/agent-farm/db/index.d.ts.map +1 -0
  66. package/dist/agent-farm/db/index.js +168 -0
  67. package/dist/agent-farm/db/index.js.map +1 -0
  68. package/dist/agent-farm/db/migrate.d.ts +15 -0
  69. package/dist/agent-farm/db/migrate.d.ts.map +1 -0
  70. package/dist/agent-farm/db/migrate.js +137 -0
  71. package/dist/agent-farm/db/migrate.js.map +1 -0
  72. package/dist/agent-farm/db/schema.d.ts +16 -0
  73. package/dist/agent-farm/db/schema.d.ts.map +1 -0
  74. package/dist/agent-farm/db/schema.js +103 -0
  75. package/dist/agent-farm/db/schema.js.map +1 -0
  76. package/dist/agent-farm/db/types.d.ts +87 -0
  77. package/dist/agent-farm/db/types.d.ts.map +1 -0
  78. package/dist/agent-farm/db/types.js +65 -0
  79. package/dist/agent-farm/db/types.js.map +1 -0
  80. package/dist/agent-farm/index.d.ts +7 -0
  81. package/dist/agent-farm/index.d.ts.map +1 -0
  82. package/dist/agent-farm/index.js +373 -0
  83. package/dist/agent-farm/index.js.map +1 -0
  84. package/dist/agent-farm/servers/annotate-server.d.ts +9 -0
  85. package/dist/agent-farm/servers/annotate-server.d.ts.map +1 -0
  86. package/dist/agent-farm/servers/annotate-server.js +136 -0
  87. package/dist/agent-farm/servers/annotate-server.js.map +1 -0
  88. package/dist/agent-farm/servers/dashboard-server.d.ts +9 -0
  89. package/dist/agent-farm/servers/dashboard-server.d.ts.map +1 -0
  90. package/dist/agent-farm/servers/dashboard-server.js +939 -0
  91. package/dist/agent-farm/servers/dashboard-server.js.map +1 -0
  92. package/dist/agent-farm/servers/tower-server.d.ts +9 -0
  93. package/dist/agent-farm/servers/tower-server.d.ts.map +1 -0
  94. package/dist/agent-farm/servers/tower-server.js +463 -0
  95. package/dist/agent-farm/servers/tower-server.js.map +1 -0
  96. package/dist/agent-farm/state.d.ts +93 -0
  97. package/dist/agent-farm/state.d.ts.map +1 -0
  98. package/dist/agent-farm/state.js +253 -0
  99. package/dist/agent-farm/state.js.map +1 -0
  100. package/dist/agent-farm/tutorial/index.d.ts +8 -0
  101. package/dist/agent-farm/tutorial/index.d.ts.map +1 -0
  102. package/dist/agent-farm/tutorial/index.js +8 -0
  103. package/dist/agent-farm/tutorial/index.js.map +1 -0
  104. package/dist/agent-farm/tutorial/prompts.d.ts +57 -0
  105. package/dist/agent-farm/tutorial/prompts.d.ts.map +1 -0
  106. package/dist/agent-farm/tutorial/prompts.js +147 -0
  107. package/dist/agent-farm/tutorial/prompts.js.map +1 -0
  108. package/dist/agent-farm/tutorial/runner.d.ts +52 -0
  109. package/dist/agent-farm/tutorial/runner.d.ts.map +1 -0
  110. package/dist/agent-farm/tutorial/runner.js +204 -0
  111. package/dist/agent-farm/tutorial/runner.js.map +1 -0
  112. package/dist/agent-farm/tutorial/state.d.ts +26 -0
  113. package/dist/agent-farm/tutorial/state.d.ts.map +1 -0
  114. package/dist/agent-farm/tutorial/state.js +89 -0
  115. package/dist/agent-farm/tutorial/state.js.map +1 -0
  116. package/dist/agent-farm/tutorial/steps/first-spec.d.ts +7 -0
  117. package/dist/agent-farm/tutorial/steps/first-spec.d.ts.map +1 -0
  118. package/dist/agent-farm/tutorial/steps/first-spec.js +136 -0
  119. package/dist/agent-farm/tutorial/steps/first-spec.js.map +1 -0
  120. package/dist/agent-farm/tutorial/steps/implementation.d.ts +7 -0
  121. package/dist/agent-farm/tutorial/steps/implementation.d.ts.map +1 -0
  122. package/dist/agent-farm/tutorial/steps/implementation.js +76 -0
  123. package/dist/agent-farm/tutorial/steps/implementation.js.map +1 -0
  124. package/dist/agent-farm/tutorial/steps/index.d.ts +10 -0
  125. package/dist/agent-farm/tutorial/steps/index.d.ts.map +1 -0
  126. package/dist/agent-farm/tutorial/steps/index.js +10 -0
  127. package/dist/agent-farm/tutorial/steps/index.js.map +1 -0
  128. package/dist/agent-farm/tutorial/steps/planning.d.ts +7 -0
  129. package/dist/agent-farm/tutorial/steps/planning.d.ts.map +1 -0
  130. package/dist/agent-farm/tutorial/steps/planning.js +143 -0
  131. package/dist/agent-farm/tutorial/steps/planning.js.map +1 -0
  132. package/dist/agent-farm/tutorial/steps/review.d.ts +7 -0
  133. package/dist/agent-farm/tutorial/steps/review.d.ts.map +1 -0
  134. package/dist/agent-farm/tutorial/steps/review.js +78 -0
  135. package/dist/agent-farm/tutorial/steps/review.js.map +1 -0
  136. package/dist/agent-farm/tutorial/steps/setup.d.ts +7 -0
  137. package/dist/agent-farm/tutorial/steps/setup.d.ts.map +1 -0
  138. package/dist/agent-farm/tutorial/steps/setup.js +126 -0
  139. package/dist/agent-farm/tutorial/steps/setup.js.map +1 -0
  140. package/dist/agent-farm/tutorial/steps/welcome.d.ts +7 -0
  141. package/dist/agent-farm/tutorial/steps/welcome.d.ts.map +1 -0
  142. package/dist/agent-farm/tutorial/steps/welcome.js +50 -0
  143. package/dist/agent-farm/tutorial/steps/welcome.js.map +1 -0
  144. package/dist/agent-farm/types.d.ts +131 -0
  145. package/dist/agent-farm/types.d.ts.map +1 -0
  146. package/dist/agent-farm/types.js +5 -0
  147. package/dist/agent-farm/types.js.map +1 -0
  148. package/dist/agent-farm/utils/config.d.ts +27 -0
  149. package/dist/agent-farm/utils/config.d.ts.map +1 -0
  150. package/dist/agent-farm/utils/config.js +242 -0
  151. package/dist/agent-farm/utils/config.js.map +1 -0
  152. package/dist/agent-farm/utils/deps.d.ts +51 -0
  153. package/dist/agent-farm/utils/deps.d.ts.map +1 -0
  154. package/dist/agent-farm/utils/deps.js +194 -0
  155. package/dist/agent-farm/utils/deps.js.map +1 -0
  156. package/dist/agent-farm/utils/index.d.ts +6 -0
  157. package/dist/agent-farm/utils/index.d.ts.map +1 -0
  158. package/dist/agent-farm/utils/index.js +6 -0
  159. package/dist/agent-farm/utils/index.js.map +1 -0
  160. package/dist/agent-farm/utils/logger.d.ts +31 -0
  161. package/dist/agent-farm/utils/logger.d.ts.map +1 -0
  162. package/dist/agent-farm/utils/logger.js +58 -0
  163. package/dist/agent-farm/utils/logger.js.map +1 -0
  164. package/dist/agent-farm/utils/orphan-handler.d.ts +27 -0
  165. package/dist/agent-farm/utils/orphan-handler.d.ts.map +1 -0
  166. package/dist/agent-farm/utils/orphan-handler.js +127 -0
  167. package/dist/agent-farm/utils/orphan-handler.js.map +1 -0
  168. package/dist/agent-farm/utils/port-registry.d.ts +58 -0
  169. package/dist/agent-farm/utils/port-registry.d.ts.map +1 -0
  170. package/dist/agent-farm/utils/port-registry.js +149 -0
  171. package/dist/agent-farm/utils/port-registry.js.map +1 -0
  172. package/dist/agent-farm/utils/shell.d.ts +45 -0
  173. package/dist/agent-farm/utils/shell.d.ts.map +1 -0
  174. package/dist/agent-farm/utils/shell.js +120 -0
  175. package/dist/agent-farm/utils/shell.js.map +1 -0
  176. package/dist/cli.d.ts +10 -0
  177. package/dist/cli.d.ts.map +1 -0
  178. package/dist/cli.js +160 -0
  179. package/dist/cli.js.map +1 -0
  180. package/dist/commands/adopt.d.ts +12 -0
  181. package/dist/commands/adopt.d.ts.map +1 -0
  182. package/dist/commands/adopt.js +178 -0
  183. package/dist/commands/adopt.js.map +1 -0
  184. package/dist/commands/consult/index.d.ts +17 -0
  185. package/dist/commands/consult/index.d.ts.map +1 -0
  186. package/dist/commands/consult/index.js +405 -0
  187. package/dist/commands/consult/index.js.map +1 -0
  188. package/dist/commands/doctor.d.ts +10 -0
  189. package/dist/commands/doctor.d.ts.map +1 -0
  190. package/dist/commands/doctor.js +346 -0
  191. package/dist/commands/doctor.js.map +1 -0
  192. package/dist/commands/init.d.ts +12 -0
  193. package/dist/commands/init.d.ts.map +1 -0
  194. package/dist/commands/init.js +167 -0
  195. package/dist/commands/init.js.map +1 -0
  196. package/dist/commands/tower.d.ts +16 -0
  197. package/dist/commands/tower.d.ts.map +1 -0
  198. package/dist/commands/tower.js +21 -0
  199. package/dist/commands/tower.js.map +1 -0
  200. package/dist/commands/update.d.ts +13 -0
  201. package/dist/commands/update.d.ts.map +1 -0
  202. package/dist/commands/update.js +137 -0
  203. package/dist/commands/update.js.map +1 -0
  204. package/dist/lib/templates.d.ts +57 -0
  205. package/dist/lib/templates.d.ts.map +1 -0
  206. package/dist/lib/templates.js +205 -0
  207. package/dist/lib/templates.js.map +1 -0
  208. package/package.json +55 -0
  209. package/templates/AGENTS.md +49 -0
  210. package/templates/CLAUDE.md +47 -0
  211. package/templates/DEPENDENCIES.md +344 -0
  212. package/templates/agents/architecture-documenter.md +189 -0
  213. package/templates/agents/codev-updater.md +276 -0
  214. package/templates/agents/spider-protocol-updater.md +118 -0
  215. package/templates/annotate.html +903 -0
  216. package/templates/bin/agent-farm +18 -0
  217. package/templates/bin/annotate-server.js +140 -0
  218. package/templates/bin/codev-doctor +335 -0
  219. package/templates/builders.md +30 -0
  220. package/templates/config.json +7 -0
  221. package/templates/dashboard-split.html +1679 -0
  222. package/templates/dashboard.html +149 -0
  223. package/templates/plans/.gitkeep +0 -0
  224. package/templates/protocols/experiment/protocol.md +229 -0
  225. package/templates/protocols/experiment/templates/notes.md +97 -0
  226. package/templates/protocols/maintain/protocol.md +235 -0
  227. package/templates/protocols/spider/protocol.md +639 -0
  228. package/templates/protocols/spider/templates/plan.md +169 -0
  229. package/templates/protocols/spider/templates/review.md +207 -0
  230. package/templates/protocols/spider/templates/spec.md +140 -0
  231. package/templates/protocols/spider-solo/protocol.md +619 -0
  232. package/templates/protocols/spider-solo/templates/plan.md +169 -0
  233. package/templates/protocols/spider-solo/templates/review.md +207 -0
  234. package/templates/protocols/spider-solo/templates/spec.md +140 -0
  235. package/templates/protocols/tick/protocol.md +250 -0
  236. package/templates/protocols/tick/templates/plan.md +67 -0
  237. package/templates/protocols/tick/templates/review.md +90 -0
  238. package/templates/protocols/tick/templates/spec.md +61 -0
  239. package/templates/reviews/.gitkeep +0 -0
  240. package/templates/roles/architect.md +230 -0
  241. package/templates/roles/builder.md +175 -0
  242. package/templates/roles/consultant.md +27 -0
  243. package/templates/specs/.gitkeep +0 -0
  244. package/templates/templates/projectlist.md +129 -0
  245. package/templates/tower.html +1032 -0
@@ -0,0 +1,137 @@
1
+ /**
2
+ * codev update - Update codev templates and protocols
3
+ */
4
+ import * as fs from 'node:fs';
5
+ import * as path from 'node:path';
6
+ import chalk from 'chalk';
7
+ import { getTemplatesDir, getTemplateFiles, hashFile, loadHashStore, saveHashStore, isUserDataPath, isUpdatableFile, } from '../lib/templates.js';
8
+ /**
9
+ * Update codev templates in current project
10
+ */
11
+ export async function update(options = {}) {
12
+ const { dryRun = false, force = false } = options;
13
+ const targetDir = process.cwd();
14
+ const codevDir = path.join(targetDir, 'codev');
15
+ // Check if codev exists
16
+ if (!fs.existsSync(codevDir)) {
17
+ throw new Error("No codev/ directory found. Use 'codev init' or 'codev adopt' first.");
18
+ }
19
+ console.log('');
20
+ console.log(chalk.bold('Updating codev templates'));
21
+ if (dryRun) {
22
+ console.log(chalk.yellow('(dry run - no files will be changed)'));
23
+ }
24
+ console.log('');
25
+ const templatesDir = getTemplatesDir();
26
+ const templateFiles = getTemplateFiles(templatesDir);
27
+ const currentHashes = loadHashStore(targetDir);
28
+ const newHashes = { ...currentHashes };
29
+ const result = {
30
+ updated: [],
31
+ skipped: [],
32
+ conflicts: [],
33
+ newFiles: [],
34
+ };
35
+ for (const relativePath of templateFiles) {
36
+ // Skip user data files
37
+ if (isUserDataPath(relativePath)) {
38
+ continue;
39
+ }
40
+ // Only update updatable files (protocols, roles, agents, etc.)
41
+ if (!isUpdatableFile(relativePath)) {
42
+ continue;
43
+ }
44
+ const srcPath = path.join(templatesDir, relativePath);
45
+ const destPath = path.join(codevDir, relativePath);
46
+ // New file - copy it
47
+ if (!fs.existsSync(destPath)) {
48
+ if (!dryRun) {
49
+ const destDir = path.dirname(destPath);
50
+ if (!fs.existsSync(destDir)) {
51
+ fs.mkdirSync(destDir, { recursive: true });
52
+ }
53
+ fs.copyFileSync(srcPath, destPath);
54
+ newHashes[relativePath] = hashFile(destPath);
55
+ }
56
+ result.newFiles.push(relativePath);
57
+ console.log(chalk.green(' + (new)'), `codev/${relativePath}`);
58
+ continue;
59
+ }
60
+ // File exists - check if it was modified by user
61
+ const currentHash = hashFile(destPath);
62
+ const storedHash = currentHashes[relativePath];
63
+ const newHash = hashFile(srcPath);
64
+ // If the template hasn't changed, skip
65
+ if (currentHash === newHash) {
66
+ result.skipped.push(relativePath);
67
+ continue;
68
+ }
69
+ // If force mode, overwrite everything
70
+ if (force) {
71
+ if (!dryRun) {
72
+ fs.copyFileSync(srcPath, destPath);
73
+ newHashes[relativePath] = hashFile(destPath);
74
+ }
75
+ result.updated.push(relativePath);
76
+ console.log(chalk.blue(' ~ (force)'), `codev/${relativePath}`);
77
+ continue;
78
+ }
79
+ // Check if user modified the file
80
+ const userModified = storedHash && currentHash !== storedHash;
81
+ if (userModified) {
82
+ // User modified the file - write as .codev-new and mark as conflict
83
+ if (!dryRun) {
84
+ fs.copyFileSync(srcPath, destPath + '.codev-new');
85
+ }
86
+ result.conflicts.push(relativePath);
87
+ console.log(chalk.yellow(' ! (conflict)'), `codev/${relativePath}`);
88
+ console.log(chalk.dim(' New version saved as:'), `codev/${relativePath}.codev-new`);
89
+ }
90
+ else {
91
+ // File unchanged by user - safe to overwrite
92
+ if (!dryRun) {
93
+ fs.copyFileSync(srcPath, destPath);
94
+ newHashes[relativePath] = hashFile(destPath);
95
+ }
96
+ result.updated.push(relativePath);
97
+ console.log(chalk.blue(' ~'), `codev/${relativePath}`);
98
+ }
99
+ }
100
+ // Save updated hash store
101
+ if (!dryRun) {
102
+ saveHashStore(targetDir, newHashes);
103
+ }
104
+ // Summary
105
+ console.log('');
106
+ console.log(chalk.bold('Summary:'));
107
+ if (result.newFiles.length > 0) {
108
+ console.log(chalk.green(` + ${result.newFiles.length} new files`));
109
+ }
110
+ if (result.updated.length > 0) {
111
+ console.log(chalk.blue(` ~ ${result.updated.length} updated`));
112
+ }
113
+ if (result.skipped.length > 0) {
114
+ console.log(chalk.dim(` - ${result.skipped.length} unchanged (skipped)`));
115
+ }
116
+ if (result.conflicts.length > 0) {
117
+ console.log(chalk.yellow(` ! ${result.conflicts.length} conflicts`));
118
+ console.log('');
119
+ console.log(chalk.yellow('Conflicts detected!'));
120
+ console.log('The following files were modified locally and have new versions available:');
121
+ console.log('');
122
+ for (const file of result.conflicts) {
123
+ console.log(chalk.dim(` codev/${file}`));
124
+ console.log(chalk.dim(` → New version: codev/${file}.codev-new`));
125
+ }
126
+ console.log('');
127
+ console.log('Please review and merge manually, then delete the .codev-new files.');
128
+ }
129
+ if (result.newFiles.length === 0 && result.updated.length === 0 && result.conflicts.length === 0) {
130
+ console.log(chalk.dim(' No updates available - already up to date!'));
131
+ }
132
+ if (dryRun) {
133
+ console.log('');
134
+ console.log(chalk.yellow('Dry run complete. Run without --dry-run to apply changes.'));
135
+ }
136
+ }
137
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Template handling utilities for codev init/adopt/update
3
+ */
4
+ /**
5
+ * Get the path to the embedded templates directory
6
+ */
7
+ export declare function getTemplatesDir(): string;
8
+ /**
9
+ * Get SHA256 hash of a file
10
+ */
11
+ export declare function hashFile(filePath: string): string;
12
+ /**
13
+ * Get the path to the hash store file
14
+ */
15
+ export declare function getHashStorePath(targetDir: string): string;
16
+ /**
17
+ * Load stored hashes for update tracking
18
+ */
19
+ export declare function loadHashStore(targetDir: string): Record<string, string>;
20
+ /**
21
+ * Save hash store
22
+ */
23
+ export declare function saveHashStore(targetDir: string, hashes: Record<string, string>): void;
24
+ /**
25
+ * List of files that should never be copied/updated (user data)
26
+ */
27
+ export declare const USER_DATA_PATTERNS: string[];
28
+ /**
29
+ * Check if a file path matches user data patterns
30
+ */
31
+ export declare function isUserDataPath(relativePath: string): boolean;
32
+ /**
33
+ * Validate that a relative path is safe (no directory traversal)
34
+ * Returns true if path is safe, false if it contains traversal attempts
35
+ */
36
+ export declare function isValidRelativePath(relativePath: string): boolean;
37
+ /**
38
+ * Recursively copy template files to target directory
39
+ */
40
+ export declare function copyTemplateDir(srcDir: string, targetDir: string, options?: {
41
+ skipExisting?: boolean;
42
+ hashes?: Record<string, string>;
43
+ onFile?: (relativePath: string, action: 'copy' | 'skip' | 'conflict') => void;
44
+ }): void;
45
+ /**
46
+ * Get list of all template files (relative paths)
47
+ */
48
+ export declare function getTemplateFiles(templatesDir: string): string[];
49
+ /**
50
+ * Files that should be updatable (protocols, roles, agents)
51
+ */
52
+ export declare const UPDATABLE_PREFIXES: string[];
53
+ /**
54
+ * Check if a file is updatable (not user data)
55
+ */
56
+ export declare function isUpdatableFile(relativePath: string): boolean;
57
+ //# sourceMappingURL=templates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/lib/templates.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH;;GAEG;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"}
@@ -0,0 +1,205 @@
1
+ /**
2
+ * Template handling utilities for codev init/adopt/update
3
+ */
4
+ import * as fs from 'node:fs';
5
+ import * as path from 'node:path';
6
+ import { createHash } from 'node:crypto';
7
+ import { fileURLToPath } from 'node:url';
8
+ const __filename = fileURLToPath(import.meta.url);
9
+ const __dirname = path.dirname(__filename);
10
+ /**
11
+ * Get the path to the embedded templates directory
12
+ */
13
+ export function getTemplatesDir() {
14
+ // In development: packages/codev/templates
15
+ // In installed: node_modules/@cluesmith/codev/templates
16
+ const templatesDir = path.resolve(__dirname, '../../templates');
17
+ if (fs.existsSync(templatesDir)) {
18
+ return templatesDir;
19
+ }
20
+ // Fallback: check dist location
21
+ const distTemplatesDir = path.resolve(__dirname, '../../../templates');
22
+ if (fs.existsSync(distTemplatesDir)) {
23
+ return distTemplatesDir;
24
+ }
25
+ throw new Error('Templates directory not found. Package may be corrupted.');
26
+ }
27
+ /**
28
+ * Get SHA256 hash of a file
29
+ */
30
+ export function hashFile(filePath) {
31
+ const content = fs.readFileSync(filePath);
32
+ return createHash('sha256').update(content).digest('hex');
33
+ }
34
+ /**
35
+ * Get the path to the hash store file
36
+ */
37
+ export function getHashStorePath(targetDir) {
38
+ return path.join(targetDir, 'codev', '.update-hashes.json');
39
+ }
40
+ /**
41
+ * Load stored hashes for update tracking
42
+ */
43
+ export function loadHashStore(targetDir) {
44
+ const hashStorePath = getHashStorePath(targetDir);
45
+ if (fs.existsSync(hashStorePath)) {
46
+ try {
47
+ return JSON.parse(fs.readFileSync(hashStorePath, 'utf-8'));
48
+ }
49
+ catch {
50
+ return {};
51
+ }
52
+ }
53
+ return {};
54
+ }
55
+ /**
56
+ * Save hash store
57
+ */
58
+ export function saveHashStore(targetDir, hashes) {
59
+ const hashStorePath = getHashStorePath(targetDir);
60
+ const dir = path.dirname(hashStorePath);
61
+ if (!fs.existsSync(dir)) {
62
+ fs.mkdirSync(dir, { recursive: true });
63
+ }
64
+ fs.writeFileSync(hashStorePath, JSON.stringify(hashes, null, 2));
65
+ }
66
+ /**
67
+ * List of files that should never be copied/updated (user data)
68
+ */
69
+ export const USER_DATA_PATTERNS = [
70
+ 'specs/',
71
+ 'plans/',
72
+ 'reviews/',
73
+ 'resources/',
74
+ '.update-hashes.json',
75
+ ];
76
+ /**
77
+ * Check if a file path matches user data patterns
78
+ */
79
+ export function isUserDataPath(relativePath) {
80
+ return USER_DATA_PATTERNS.some(pattern => relativePath.startsWith(pattern) || relativePath.includes(`/${pattern}`));
81
+ }
82
+ /**
83
+ * Validate that a relative path is safe (no directory traversal)
84
+ * Returns true if path is safe, false if it contains traversal attempts
85
+ */
86
+ export function isValidRelativePath(relativePath) {
87
+ // Normalize the path to resolve any . or .. components
88
+ const normalized = path.normalize(relativePath);
89
+ // Check for directory traversal patterns
90
+ if (normalized.startsWith('..') || normalized.includes('../') || normalized.includes('..\\')) {
91
+ return false;
92
+ }
93
+ // Check for absolute paths
94
+ if (path.isAbsolute(normalized)) {
95
+ return false;
96
+ }
97
+ // Ensure the normalized path doesn't escape the base directory
98
+ // by checking it doesn't start with a path separator after normalization
99
+ if (normalized.startsWith(path.sep) || normalized.startsWith('/')) {
100
+ return false;
101
+ }
102
+ return true;
103
+ }
104
+ /**
105
+ * Recursively copy template files to target directory
106
+ */
107
+ export function copyTemplateDir(srcDir, targetDir, options = {}) {
108
+ const { skipExisting = false, hashes = {}, onFile } = options;
109
+ function copyRecursive(src, dest, relativeBase) {
110
+ const stat = fs.statSync(src);
111
+ if (stat.isDirectory()) {
112
+ if (!fs.existsSync(dest)) {
113
+ fs.mkdirSync(dest, { recursive: true });
114
+ }
115
+ const entries = fs.readdirSync(src);
116
+ for (const entry of entries) {
117
+ const srcPath = path.join(src, entry);
118
+ const destPath = path.join(dest, entry);
119
+ const relativePath = path.join(relativeBase, entry);
120
+ // Validate relative path to prevent directory traversal
121
+ if (!isValidRelativePath(relativePath)) {
122
+ console.warn(`Skipping unsafe path: ${relativePath}`);
123
+ continue;
124
+ }
125
+ copyRecursive(srcPath, destPath, relativePath);
126
+ }
127
+ }
128
+ else {
129
+ const relativePath = relativeBase;
130
+ // Validate relative path to prevent directory traversal
131
+ if (!isValidRelativePath(relativePath)) {
132
+ console.warn(`Skipping unsafe path: ${relativePath}`);
133
+ return;
134
+ }
135
+ // Skip user data files
136
+ if (isUserDataPath(relativePath)) {
137
+ onFile?.(relativePath, 'skip');
138
+ return;
139
+ }
140
+ // Skip .gitkeep files (they just preserve empty dirs in git)
141
+ if (path.basename(src) === '.gitkeep') {
142
+ return;
143
+ }
144
+ if (fs.existsSync(dest)) {
145
+ if (skipExisting) {
146
+ onFile?.(relativePath, 'skip');
147
+ return;
148
+ }
149
+ // File exists - this is a potential conflict
150
+ onFile?.(relativePath, 'conflict');
151
+ return;
152
+ }
153
+ // Copy the file
154
+ fs.copyFileSync(src, dest);
155
+ // Store hash for future updates
156
+ if (hashes) {
157
+ hashes[relativePath] = hashFile(dest);
158
+ }
159
+ onFile?.(relativePath, 'copy');
160
+ }
161
+ }
162
+ copyRecursive(srcDir, targetDir, '');
163
+ }
164
+ /**
165
+ * Get list of all template files (relative paths)
166
+ */
167
+ export function getTemplateFiles(templatesDir) {
168
+ const files = [];
169
+ function walk(dir, relativeBase) {
170
+ const entries = fs.readdirSync(dir);
171
+ for (const entry of entries) {
172
+ const fullPath = path.join(dir, entry);
173
+ const relativePath = path.join(relativeBase, entry);
174
+ const stat = fs.statSync(fullPath);
175
+ if (stat.isDirectory()) {
176
+ walk(fullPath, relativePath);
177
+ }
178
+ else {
179
+ // Skip .gitkeep
180
+ if (entry !== '.gitkeep') {
181
+ files.push(relativePath);
182
+ }
183
+ }
184
+ }
185
+ }
186
+ walk(templatesDir, '');
187
+ return files;
188
+ }
189
+ /**
190
+ * Files that should be updatable (protocols, roles, agents)
191
+ */
192
+ export const UPDATABLE_PREFIXES = [
193
+ 'protocols/',
194
+ 'roles/',
195
+ 'agents/',
196
+ 'bin/',
197
+ 'templates/',
198
+ ];
199
+ /**
200
+ * Check if a file is updatable (not user data)
201
+ */
202
+ export function isUpdatableFile(relativePath) {
203
+ return UPDATABLE_PREFIXES.some(prefix => relativePath.startsWith(prefix));
204
+ }
205
+ //# sourceMappingURL=templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/lib/templates.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "@cluesmith/codev",
3
+ "version": "1.1.0",
4
+ "description": "Codev CLI - AI-assisted software development framework",
5
+ "type": "module",
6
+ "bin": {
7
+ "codev": "./bin/codev.js",
8
+ "af": "./bin/af.js",
9
+ "consult": "./bin/consult.js"
10
+ },
11
+ "files": [
12
+ "dist",
13
+ "bin",
14
+ "templates"
15
+ ],
16
+ "scripts": {
17
+ "build": "tsc",
18
+ "dev": "tsx src/cli.ts",
19
+ "start": "node dist/cli.js",
20
+ "test": "vitest",
21
+ "prepublishOnly": "npm run build"
22
+ },
23
+ "dependencies": {
24
+ "better-sqlite3": "^12.5.0",
25
+ "chalk": "^5.3.0",
26
+ "commander": "^12.1.0",
27
+ "open": "^10.1.0",
28
+ "tree-kill": "^1.2.2"
29
+ },
30
+ "devDependencies": {
31
+ "@types/better-sqlite3": "^7.6.13",
32
+ "@types/node": "^22.10.1",
33
+ "tsx": "^4.19.2",
34
+ "typescript": "^5.7.2",
35
+ "vitest": "^2.1.6"
36
+ },
37
+ "engines": {
38
+ "node": ">=18.0.0"
39
+ },
40
+ "keywords": [
41
+ "cli",
42
+ "codev",
43
+ "ai",
44
+ "development",
45
+ "orchestration",
46
+ "agent-farm",
47
+ "multi-agent"
48
+ ],
49
+ "author": "Cluesmith",
50
+ "license": "MIT",
51
+ "repository": {
52
+ "type": "git",
53
+ "url": "https://github.com/cluesmith/codev"
54
+ }
55
+ }
@@ -0,0 +1,49 @@
1
+ # {{PROJECT_NAME}} - AI Agent Instructions
2
+
3
+ > **Note**: This file follows the [AGENTS.md standard](https://agents.md/) for cross-tool compatibility with Cursor, GitHub Copilot, and other AI coding assistants. A Claude Code-specific version is maintained in `CLAUDE.md`.
4
+
5
+ ## Project Overview
6
+
7
+ This project uses **Codev** for AI-assisted development.
8
+
9
+ ## Available Protocols
10
+
11
+ - **SPIDER**: Multi-phase development with consultation (`codev/protocols/spider/protocol.md`)
12
+ - **TICK**: Fast autonomous implementation (`codev/protocols/tick/protocol.md`)
13
+ - **EXPERIMENT**: Disciplined experimentation (`codev/protocols/experiment/protocol.md`)
14
+ - **MAINTAIN**: Codebase maintenance (`codev/protocols/maintain/protocol.md`)
15
+
16
+ ## Key Locations
17
+
18
+ - **Specs**: `codev/specs/` - Feature specifications (WHAT to build)
19
+ - **Plans**: `codev/plans/` - Implementation plans (HOW to build)
20
+ - **Reviews**: `codev/reviews/` - Reviews and lessons learned
21
+ - **Protocols**: `codev/protocols/` - Development protocols
22
+
23
+ ## Quick Start
24
+
25
+ 1. For new features, start with the Specification phase
26
+ 2. Create exactly THREE documents per feature: spec, plan, and review
27
+ 3. Follow the protocol phases as defined in the protocol files
28
+ 4. Use multi-agent consultation when specified
29
+
30
+ ## File Naming Convention
31
+
32
+ Use sequential numbering with descriptive names:
33
+ - Specification: `codev/specs/0001-feature-name.md`
34
+ - Plan: `codev/plans/0001-feature-name.md`
35
+ - Review: `codev/reviews/0001-feature-name.md`
36
+
37
+ ## Git Workflow
38
+
39
+ **NEVER use `git add -A` or `git add .`** - Always add files explicitly.
40
+
41
+ Commit messages format:
42
+ ```
43
+ [Spec 0001] Description of change
44
+ [Spec 0001][Phase: implement] feat: Add feature
45
+ ```
46
+
47
+ ## For More Info
48
+
49
+ Read the full protocol documentation in `codev/protocols/`.
@@ -0,0 +1,47 @@
1
+ # {{PROJECT_NAME}} - Claude Code Instructions
2
+
3
+ ## Project Overview
4
+
5
+ This project uses **Codev** for AI-assisted development.
6
+
7
+ ## Available Protocols
8
+
9
+ - **SPIDER**: Multi-phase development with consultation (`codev/protocols/spider/protocol.md`)
10
+ - **TICK**: Fast autonomous implementation (`codev/protocols/tick/protocol.md`)
11
+ - **EXPERIMENT**: Disciplined experimentation (`codev/protocols/experiment/protocol.md`)
12
+ - **MAINTAIN**: Codebase maintenance (`codev/protocols/maintain/protocol.md`)
13
+
14
+ ## Key Locations
15
+
16
+ - **Specs**: `codev/specs/` - Feature specifications (WHAT to build)
17
+ - **Plans**: `codev/plans/` - Implementation plans (HOW to build)
18
+ - **Reviews**: `codev/reviews/` - Reviews and lessons learned
19
+ - **Protocols**: `codev/protocols/` - Development protocols
20
+
21
+ ## Quick Start
22
+
23
+ 1. For new features, start with the Specification phase
24
+ 2. Create exactly THREE documents per feature: spec, plan, and review
25
+ 3. Follow the protocol phases as defined in the protocol files
26
+ 4. Use multi-agent consultation when specified
27
+
28
+ ## File Naming Convention
29
+
30
+ Use sequential numbering with descriptive names:
31
+ - Specification: `codev/specs/0001-feature-name.md`
32
+ - Plan: `codev/plans/0001-feature-name.md`
33
+ - Review: `codev/reviews/0001-feature-name.md`
34
+
35
+ ## Git Workflow
36
+
37
+ **NEVER use `git add -A` or `git add .`** - Always add files explicitly.
38
+
39
+ Commit messages format:
40
+ ```
41
+ [Spec 0001] Description of change
42
+ [Spec 0001][Phase: implement] feat: Add feature
43
+ ```
44
+
45
+ ## For More Info
46
+
47
+ Read the full protocol documentation in `codev/protocols/`.