@cluesmith/codev 2.0.2 → 2.0.6

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 (312) hide show
  1. package/dashboard/dist/assets/index-B-s8BA2l.js +135 -0
  2. package/dashboard/dist/assets/index-B-s8BA2l.js.map +1 -0
  3. package/dashboard/dist/assets/index-DB2AxRP7.css +32 -0
  4. package/dashboard/dist/index.html +2 -2
  5. package/dist/agent-farm/cli.d.ts.map +1 -1
  6. package/dist/agent-farm/cli.js +32 -14
  7. package/dist/agent-farm/cli.js.map +1 -1
  8. package/dist/agent-farm/commands/architect.d.ts +1 -1
  9. package/dist/agent-farm/commands/architect.js +3 -3
  10. package/dist/agent-farm/commands/architect.js.map +1 -1
  11. package/dist/agent-farm/commands/attach.d.ts +19 -0
  12. package/dist/agent-farm/commands/attach.d.ts.map +1 -1
  13. package/dist/agent-farm/commands/attach.js +172 -12
  14. package/dist/agent-farm/commands/attach.js.map +1 -1
  15. package/dist/agent-farm/commands/cleanup.js +6 -6
  16. package/dist/agent-farm/commands/cleanup.js.map +1 -1
  17. package/dist/agent-farm/commands/open.js +5 -5
  18. package/dist/agent-farm/commands/open.js.map +1 -1
  19. package/dist/agent-farm/commands/send.d.ts +22 -2
  20. package/dist/agent-farm/commands/send.d.ts.map +1 -1
  21. package/dist/agent-farm/commands/send.js +100 -181
  22. package/dist/agent-farm/commands/send.js.map +1 -1
  23. package/dist/agent-farm/commands/shell.js +5 -5
  24. package/dist/agent-farm/commands/shell.js.map +1 -1
  25. package/dist/agent-farm/commands/spawn-roles.d.ts +3 -9
  26. package/dist/agent-farm/commands/spawn-roles.d.ts.map +1 -1
  27. package/dist/agent-farm/commands/spawn-roles.js +14 -53
  28. package/dist/agent-farm/commands/spawn-roles.js.map +1 -1
  29. package/dist/agent-farm/commands/spawn-worktree.d.ts +11 -17
  30. package/dist/agent-farm/commands/spawn-worktree.d.ts.map +1 -1
  31. package/dist/agent-farm/commands/spawn-worktree.js +32 -13
  32. package/dist/agent-farm/commands/spawn-worktree.js.map +1 -1
  33. package/dist/agent-farm/commands/spawn.d.ts +8 -6
  34. package/dist/agent-farm/commands/spawn.d.ts.map +1 -1
  35. package/dist/agent-farm/commands/spawn.js +183 -69
  36. package/dist/agent-farm/commands/spawn.js.map +1 -1
  37. package/dist/agent-farm/commands/start.d.ts +4 -4
  38. package/dist/agent-farm/commands/start.js +16 -16
  39. package/dist/agent-farm/commands/start.js.map +1 -1
  40. package/dist/agent-farm/commands/status.d.ts +1 -1
  41. package/dist/agent-farm/commands/status.d.ts.map +1 -1
  42. package/dist/agent-farm/commands/status.js +15 -26
  43. package/dist/agent-farm/commands/status.js.map +1 -1
  44. package/dist/agent-farm/commands/stop.d.ts +4 -4
  45. package/dist/agent-farm/commands/stop.js +9 -9
  46. package/dist/agent-farm/commands/stop.js.map +1 -1
  47. package/dist/agent-farm/db/index.d.ts.map +1 -1
  48. package/dist/agent-farm/db/index.js +82 -7
  49. package/dist/agent-farm/db/index.js.map +1 -1
  50. package/dist/agent-farm/db/schema.d.ts +2 -2
  51. package/dist/agent-farm/db/schema.d.ts.map +1 -1
  52. package/dist/agent-farm/db/schema.js +21 -4
  53. package/dist/agent-farm/db/schema.js.map +1 -1
  54. package/dist/agent-farm/lib/tower-client.d.ts +36 -26
  55. package/dist/agent-farm/lib/tower-client.d.ts.map +1 -1
  56. package/dist/agent-farm/lib/tower-client.js +50 -25
  57. package/dist/agent-farm/lib/tower-client.js.map +1 -1
  58. package/dist/agent-farm/lib/tunnel-client.d.ts +12 -2
  59. package/dist/agent-farm/lib/tunnel-client.d.ts.map +1 -1
  60. package/dist/agent-farm/lib/tunnel-client.js +59 -1
  61. package/dist/agent-farm/lib/tunnel-client.js.map +1 -1
  62. package/dist/agent-farm/servers/overview.d.ts +111 -0
  63. package/dist/agent-farm/servers/overview.d.ts.map +1 -0
  64. package/dist/agent-farm/servers/overview.js +385 -0
  65. package/dist/agent-farm/servers/overview.js.map +1 -0
  66. package/dist/agent-farm/servers/tower-instances.d.ts +18 -20
  67. package/dist/agent-farm/servers/tower-instances.d.ts.map +1 -1
  68. package/dist/agent-farm/servers/tower-instances.js +97 -100
  69. package/dist/agent-farm/servers/tower-instances.js.map +1 -1
  70. package/dist/agent-farm/servers/tower-messages.d.ts +87 -0
  71. package/dist/agent-farm/servers/tower-messages.d.ts.map +1 -0
  72. package/dist/agent-farm/servers/tower-messages.js +202 -0
  73. package/dist/agent-farm/servers/tower-messages.js.map +1 -0
  74. package/dist/agent-farm/servers/tower-routes.d.ts +1 -1
  75. package/dist/agent-farm/servers/tower-routes.d.ts.map +1 -1
  76. package/dist/agent-farm/servers/tower-routes.js +343 -174
  77. package/dist/agent-farm/servers/tower-routes.js.map +1 -1
  78. package/dist/agent-farm/servers/tower-server.js +50 -21
  79. package/dist/agent-farm/servers/tower-server.js.map +1 -1
  80. package/dist/agent-farm/servers/tower-terminals.d.ts +35 -31
  81. package/dist/agent-farm/servers/tower-terminals.d.ts.map +1 -1
  82. package/dist/agent-farm/servers/tower-terminals.js +208 -184
  83. package/dist/agent-farm/servers/tower-terminals.js.map +1 -1
  84. package/dist/agent-farm/servers/tower-tunnel.d.ts +2 -2
  85. package/dist/agent-farm/servers/tower-tunnel.d.ts.map +1 -1
  86. package/dist/agent-farm/servers/tower-tunnel.js +12 -12
  87. package/dist/agent-farm/servers/tower-tunnel.js.map +1 -1
  88. package/dist/agent-farm/servers/tower-types.d.ts +8 -12
  89. package/dist/agent-farm/servers/tower-types.d.ts.map +1 -1
  90. package/dist/agent-farm/servers/tower-utils.d.ts +9 -9
  91. package/dist/agent-farm/servers/tower-utils.d.ts.map +1 -1
  92. package/dist/agent-farm/servers/tower-utils.js +18 -18
  93. package/dist/agent-farm/servers/tower-utils.js.map +1 -1
  94. package/dist/agent-farm/servers/tower-websocket.d.ts +2 -2
  95. package/dist/agent-farm/servers/tower-websocket.d.ts.map +1 -1
  96. package/dist/agent-farm/servers/tower-websocket.js +39 -18
  97. package/dist/agent-farm/servers/tower-websocket.js.map +1 -1
  98. package/dist/agent-farm/types.d.ts +5 -6
  99. package/dist/agent-farm/types.d.ts.map +1 -1
  100. package/dist/agent-farm/utils/agent-names.d.ts +85 -0
  101. package/dist/agent-farm/utils/agent-names.d.ts.map +1 -0
  102. package/dist/agent-farm/utils/agent-names.js +140 -0
  103. package/dist/agent-farm/utils/agent-names.js.map +1 -0
  104. package/dist/agent-farm/utils/config.d.ts +1 -1
  105. package/dist/agent-farm/utils/config.d.ts.map +1 -1
  106. package/dist/agent-farm/utils/config.js +16 -16
  107. package/dist/agent-farm/utils/config.js.map +1 -1
  108. package/dist/agent-farm/utils/file-tabs.d.ts +3 -3
  109. package/dist/agent-farm/utils/file-tabs.d.ts.map +1 -1
  110. package/dist/agent-farm/utils/file-tabs.js +9 -9
  111. package/dist/agent-farm/utils/file-tabs.js.map +1 -1
  112. package/dist/agent-farm/utils/index.d.ts +0 -1
  113. package/dist/agent-farm/utils/index.d.ts.map +1 -1
  114. package/dist/agent-farm/utils/index.js +0 -1
  115. package/dist/agent-farm/utils/index.js.map +1 -1
  116. package/dist/agent-farm/utils/message-format.d.ts +17 -0
  117. package/dist/agent-farm/utils/message-format.d.ts.map +1 -0
  118. package/dist/agent-farm/utils/message-format.js +41 -0
  119. package/dist/agent-farm/utils/message-format.js.map +1 -0
  120. package/dist/agent-farm/utils/notifications.d.ts +4 -4
  121. package/dist/agent-farm/utils/notifications.d.ts.map +1 -1
  122. package/dist/agent-farm/utils/notifications.js +18 -18
  123. package/dist/agent-farm/utils/notifications.js.map +1 -1
  124. package/dist/cli.d.ts.map +1 -1
  125. package/dist/cli.js +26 -1
  126. package/dist/cli.js.map +1 -1
  127. package/dist/commands/adopt.d.ts +2 -2
  128. package/dist/commands/adopt.d.ts.map +1 -1
  129. package/dist/commands/adopt.js +13 -15
  130. package/dist/commands/adopt.js.map +1 -1
  131. package/dist/commands/consult/index.d.ts +26 -2
  132. package/dist/commands/consult/index.d.ts.map +1 -1
  133. package/dist/commands/consult/index.js +296 -83
  134. package/dist/commands/consult/index.js.map +1 -1
  135. package/dist/commands/consult/metrics.d.ts +90 -0
  136. package/dist/commands/consult/metrics.d.ts.map +1 -0
  137. package/dist/commands/consult/metrics.js +203 -0
  138. package/dist/commands/consult/metrics.js.map +1 -0
  139. package/dist/commands/consult/stats.d.ts +18 -0
  140. package/dist/commands/consult/stats.d.ts.map +1 -0
  141. package/dist/commands/consult/stats.js +150 -0
  142. package/dist/commands/consult/stats.js.map +1 -0
  143. package/dist/commands/consult/usage-extractor.d.ts +38 -0
  144. package/dist/commands/consult/usage-extractor.d.ts.map +1 -0
  145. package/dist/commands/consult/usage-extractor.js +99 -0
  146. package/dist/commands/consult/usage-extractor.js.map +1 -0
  147. package/dist/commands/doctor.d.ts.map +1 -1
  148. package/dist/commands/doctor.js +11 -9
  149. package/dist/commands/doctor.js.map +1 -1
  150. package/dist/commands/import.js +4 -4
  151. package/dist/commands/import.js.map +1 -1
  152. package/dist/commands/init.d.ts +2 -2
  153. package/dist/commands/init.d.ts.map +1 -1
  154. package/dist/commands/init.js +13 -15
  155. package/dist/commands/init.js.map +1 -1
  156. package/dist/commands/porch/index.d.ts +6 -6
  157. package/dist/commands/porch/index.d.ts.map +1 -1
  158. package/dist/commands/porch/index.js +37 -37
  159. package/dist/commands/porch/index.js.map +1 -1
  160. package/dist/commands/porch/next.d.ts +1 -1
  161. package/dist/commands/porch/next.d.ts.map +1 -1
  162. package/dist/commands/porch/next.js +86 -92
  163. package/dist/commands/porch/next.js.map +1 -1
  164. package/dist/commands/porch/notify.d.ts +11 -0
  165. package/dist/commands/porch/notify.d.ts.map +1 -0
  166. package/dist/commands/porch/notify.js +30 -0
  167. package/dist/commands/porch/notify.js.map +1 -0
  168. package/dist/commands/porch/plan.d.ts +1 -1
  169. package/dist/commands/porch/plan.d.ts.map +1 -1
  170. package/dist/commands/porch/plan.js +3 -3
  171. package/dist/commands/porch/plan.js.map +1 -1
  172. package/dist/commands/porch/prompts.d.ts +10 -1
  173. package/dist/commands/porch/prompts.d.ts.map +1 -1
  174. package/dist/commands/porch/prompts.js +59 -35
  175. package/dist/commands/porch/prompts.js.map +1 -1
  176. package/dist/commands/porch/protocol.d.ts +1 -1
  177. package/dist/commands/porch/protocol.d.ts.map +1 -1
  178. package/dist/commands/porch/protocol.js +8 -8
  179. package/dist/commands/porch/protocol.js.map +1 -1
  180. package/dist/commands/porch/state.d.ts +6 -6
  181. package/dist/commands/porch/state.d.ts.map +1 -1
  182. package/dist/commands/porch/state.js +14 -12
  183. package/dist/commands/porch/state.js.map +1 -1
  184. package/dist/commands/update.d.ts.map +1 -1
  185. package/dist/commands/update.js +10 -11
  186. package/dist/commands/update.js.map +1 -1
  187. package/dist/lib/github.d.ts +81 -0
  188. package/dist/lib/github.d.ts.map +1 -0
  189. package/dist/lib/github.js +141 -0
  190. package/dist/lib/github.js.map +1 -0
  191. package/dist/lib/scaffold.d.ts +13 -21
  192. package/dist/lib/scaffold.d.ts.map +1 -1
  193. package/dist/lib/scaffold.js +34 -57
  194. package/dist/lib/scaffold.js.map +1 -1
  195. package/dist/lib/skeleton.d.ts +7 -7
  196. package/dist/lib/skeleton.d.ts.map +1 -1
  197. package/dist/lib/skeleton.js +10 -10
  198. package/dist/lib/skeleton.js.map +1 -1
  199. package/dist/terminal/index.d.ts +14 -0
  200. package/dist/terminal/index.d.ts.map +1 -1
  201. package/dist/terminal/index.js +12 -0
  202. package/dist/terminal/index.js.map +1 -1
  203. package/dist/terminal/pty-manager.d.ts +1 -1
  204. package/dist/terminal/pty-manager.d.ts.map +1 -1
  205. package/dist/terminal/pty-manager.js +10 -7
  206. package/dist/terminal/pty-manager.js.map +1 -1
  207. package/dist/terminal/pty-session.js +3 -3
  208. package/dist/terminal/pty-session.js.map +1 -1
  209. package/dist/terminal/session-manager.d.ts +64 -0
  210. package/dist/terminal/session-manager.d.ts.map +1 -1
  211. package/dist/terminal/session-manager.js +299 -10
  212. package/dist/terminal/session-manager.js.map +1 -1
  213. package/dist/terminal/shellper-client.d.ts +2 -1
  214. package/dist/terminal/shellper-client.d.ts.map +1 -1
  215. package/dist/terminal/shellper-client.js +4 -2
  216. package/dist/terminal/shellper-client.js.map +1 -1
  217. package/dist/terminal/shellper-main.js +33 -4
  218. package/dist/terminal/shellper-main.js.map +1 -1
  219. package/dist/terminal/shellper-process.d.ts +24 -7
  220. package/dist/terminal/shellper-process.d.ts.map +1 -1
  221. package/dist/terminal/shellper-process.js +139 -36
  222. package/dist/terminal/shellper-process.js.map +1 -1
  223. package/dist/terminal/shellper-protocol.d.ts +1 -0
  224. package/dist/terminal/shellper-protocol.d.ts.map +1 -1
  225. package/dist/terminal/shellper-protocol.js.map +1 -1
  226. package/package.json +4 -1
  227. package/skeleton/.claude/skills/af/SKILL.md +7 -7
  228. package/skeleton/.claude/skills/consult/SKILL.md +1 -1
  229. package/skeleton/builders.md +2 -2
  230. package/skeleton/maintain/.gitkeep +1 -1
  231. package/skeleton/porch/prompts/specify.md +1 -1
  232. package/skeleton/protocols/bugfix/prompts/pr.md +15 -4
  233. package/skeleton/protocols/experiment/protocol.md +17 -17
  234. package/skeleton/protocols/maintain/prompts/audit.md +2 -2
  235. package/skeleton/protocols/maintain/prompts/sync.md +1 -1
  236. package/skeleton/protocols/maintain/prompts/verify.md +1 -1
  237. package/skeleton/protocols/maintain/protocol.md +8 -9
  238. package/skeleton/protocols/maintain/templates/maintenance-run.md +2 -2
  239. package/skeleton/protocols/spir/protocol.json +5 -5
  240. package/skeleton/protocols/spir/protocol.md +8 -8
  241. package/skeleton/protocols/tick/protocol.md +31 -31
  242. package/skeleton/resources/commands/agent-farm.md +14 -14
  243. package/skeleton/resources/commands/codev.md +0 -1
  244. package/skeleton/resources/commands/consult.md +3 -3
  245. package/skeleton/resources/spikes.md +3 -3
  246. package/skeleton/resources/workflow-reference.md +14 -14
  247. package/skeleton/roles/architect.md +25 -25
  248. package/skeleton/roles/builder.md +1 -1
  249. package/skeleton/roles/consultant.md +6 -0
  250. package/skeleton/templates/AGENTS.md +5 -5
  251. package/skeleton/templates/CLAUDE.md +5 -5
  252. package/skeleton/templates/lifecycle.md +9 -9
  253. package/templates/open.html +19 -16
  254. package/templates/tower.html +54 -94
  255. package/templates/vendor/marked.min.js +6 -0
  256. package/templates/vendor/prism-bash.min.js +1 -0
  257. package/templates/vendor/prism-css.min.js +1 -0
  258. package/templates/vendor/prism-javascript.min.js +1 -0
  259. package/templates/vendor/prism-json.min.js +1 -0
  260. package/templates/vendor/prism-markdown.min.js +1 -0
  261. package/templates/vendor/prism-markup.min.js +1 -0
  262. package/templates/vendor/prism-python.min.js +1 -0
  263. package/templates/vendor/prism-tomorrow.min.css +1 -0
  264. package/templates/vendor/prism-typescript.min.js +1 -0
  265. package/templates/vendor/prism-yaml.min.js +1 -0
  266. package/templates/vendor/prism.min.js +1 -0
  267. package/templates/vendor/purify.min.js +3 -0
  268. package/dashboard/dist/assets/index-4n9zpWLY.css +0 -32
  269. package/dashboard/dist/assets/index-b38SaXk5.js +0 -136
  270. package/dashboard/dist/assets/index-b38SaXk5.js.map +0 -1
  271. package/dist/agent-farm/hq-connector.d.ts +0 -19
  272. package/dist/agent-farm/hq-connector.d.ts.map +0 -1
  273. package/dist/agent-farm/hq-connector.js +0 -351
  274. package/dist/agent-farm/hq-connector.js.map +0 -1
  275. package/dist/agent-farm/utils/deps.d.ts +0 -51
  276. package/dist/agent-farm/utils/deps.d.ts.map +0 -1
  277. package/dist/agent-farm/utils/deps.js +0 -162
  278. package/dist/agent-farm/utils/deps.js.map +0 -1
  279. package/dist/agent-farm/utils/gate-status.d.ts +0 -16
  280. package/dist/agent-farm/utils/gate-status.d.ts.map +0 -1
  281. package/dist/agent-farm/utils/gate-status.js +0 -79
  282. package/dist/agent-farm/utils/gate-status.js.map +0 -1
  283. package/dist/agent-farm/utils/gate-watcher.d.ts +0 -38
  284. package/dist/agent-farm/utils/gate-watcher.d.ts.map +0 -1
  285. package/dist/agent-farm/utils/gate-watcher.js +0 -122
  286. package/dist/agent-farm/utils/gate-watcher.js.map +0 -1
  287. package/dist/agent-farm/utils/session.d.ts +0 -32
  288. package/dist/agent-farm/utils/session.d.ts.map +0 -1
  289. package/dist/agent-farm/utils/session.js +0 -57
  290. package/dist/agent-farm/utils/session.js.map +0 -1
  291. package/dist/lib/projectlist-parser.d.ts +0 -70
  292. package/dist/lib/projectlist-parser.d.ts.map +0 -1
  293. package/dist/lib/projectlist-parser.js +0 -200
  294. package/dist/lib/projectlist-parser.js.map +0 -1
  295. package/skeleton/templates/projectlist-archive.md +0 -21
  296. package/skeleton/templates/projectlist.md +0 -147
  297. package/templates/dashboard/css/dialogs.css +0 -149
  298. package/templates/dashboard/css/files.css +0 -558
  299. package/templates/dashboard/css/layout.css +0 -133
  300. package/templates/dashboard/css/projects.css +0 -501
  301. package/templates/dashboard/css/statusbar.css +0 -23
  302. package/templates/dashboard/css/tabs.css +0 -314
  303. package/templates/dashboard/css/utilities.css +0 -50
  304. package/templates/dashboard/css/variables.css +0 -45
  305. package/templates/dashboard/index.html +0 -149
  306. package/templates/dashboard/js/dialogs.js +0 -368
  307. package/templates/dashboard/js/files.js +0 -448
  308. package/templates/dashboard/js/main.js +0 -476
  309. package/templates/dashboard/js/projects.js +0 -544
  310. package/templates/dashboard/js/state.js +0 -91
  311. package/templates/dashboard/js/tabs.js +0 -518
  312. package/templates/dashboard/js/utils.js +0 -191
@@ -1,79 +0,0 @@
1
- /**
2
- * Gate status reader for porch YAML files.
3
- * Extracts pending gate information from codev/projects/<id>/status.yaml.
4
- */
5
- import fs from 'node:fs';
6
- import path from 'node:path';
7
- /**
8
- * Read gate status from porch YAML files for a project.
9
- * Scans codev/projects/<id>/status.yaml for gates with status: pending.
10
- */
11
- export function getGateStatusForProject(projectPath) {
12
- try {
13
- const projectsDir = path.join(projectPath, 'codev', 'projects');
14
- if (!fs.existsSync(projectsDir)) {
15
- return { hasGate: false };
16
- }
17
- const entries = fs.readdirSync(projectsDir, { withFileTypes: true });
18
- for (const entry of entries) {
19
- if (!entry.isDirectory())
20
- continue;
21
- const statusFile = path.join(projectsDir, entry.name, 'status.yaml');
22
- if (!fs.existsSync(statusFile))
23
- continue;
24
- const content = fs.readFileSync(statusFile, 'utf-8');
25
- // Simple YAML parsing: look for pending gates
26
- // Format:
27
- // gates:
28
- // spec-approval:
29
- // status: pending
30
- const gatesMatch = content.match(/^gates:\s*$/m);
31
- if (!gatesMatch)
32
- continue;
33
- const gatesSection = content.slice(gatesMatch.index + gatesMatch[0].length);
34
- const lines = gatesSection.split('\n');
35
- let currentGate = '';
36
- for (const line of lines) {
37
- // Stop at next top-level key
38
- if (/^\S/.test(line) && line.trim() !== '')
39
- break;
40
- const gateNameMatch = line.match(/^\s{2}(\S+):\s*$/);
41
- if (gateNameMatch) {
42
- currentGate = gateNameMatch[1];
43
- continue;
44
- }
45
- const statusMatch = line.match(/^\s{4}status:\s*(\S+)/);
46
- if (statusMatch && currentGate) {
47
- if (statusMatch[1] === 'pending') {
48
- // Extract builder ID from directory name (e.g., "0099-tower-hygiene" -> "0099")
49
- const builderId = entry.name.match(/^(\d+)/)?.[1] || entry.name;
50
- // Look ahead for requested_at in remaining lines under this gate
51
- let requestedAt;
52
- const remaining = lines.slice(lines.indexOf(line) + 1);
53
- for (const nextLine of remaining) {
54
- // Stop at next gate name or top-level key
55
- if (/^\s{2}\S/.test(nextLine) || /^\S/.test(nextLine))
56
- break;
57
- const reqMatch = nextLine.match(/^\s{4}requested_at:\s*'?([^'\n]+)'?/);
58
- if (reqMatch) {
59
- requestedAt = reqMatch[1].trim();
60
- break;
61
- }
62
- }
63
- return {
64
- hasGate: true,
65
- gateName: currentGate,
66
- builderId,
67
- requestedAt,
68
- };
69
- }
70
- }
71
- }
72
- }
73
- }
74
- catch {
75
- // Silently return no gate on errors (logged at call site if needed)
76
- }
77
- return { hasGate: false };
78
- }
79
- //# sourceMappingURL=gate-status.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gate-status.js","sourceRoot":"","sources":["../../../src/agent-farm/utils/gate-status.ts"],"names":[],"mappings":"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"}
@@ -1,38 +0,0 @@
1
- /**
2
- * Spec 0100: Gate watcher for detecting gate transitions and sending af send notifications.
3
- *
4
- * Tracks which gates have been notified (dedup) and sends `af send architect`
5
- * messages when new gates appear. Uses a dual-map design:
6
- * - notified: Map<key, timestamp> for dedup
7
- * - projectKeys: Map<projectPath, Set<key>> for clearing on gate resolution
8
- */
9
- import type { GateStatus } from './gate-status.js';
10
- export type LogFn = (level: 'INFO' | 'ERROR' | 'WARN', message: string) => void;
11
- export declare class GateWatcher {
12
- /** Dedup map: key -> ISO timestamp of first notification */
13
- private notified;
14
- /** Index: projectPath -> set of keys in `notified` */
15
- private projectKeys;
16
- /** Logger function */
17
- private log;
18
- /** Path to af binary */
19
- private afBinary;
20
- constructor(log: LogFn, afBinary?: string);
21
- /**
22
- * Check gate status for a project and send notification if it's a new gate.
23
- */
24
- checkAndNotify(gateStatus: GateStatus, projectPath: string): Promise<void>;
25
- /**
26
- * Clear all tracked keys for a project.
27
- */
28
- private clearProject;
29
- /**
30
- * Send a message to the architect via af send.
31
- */
32
- private sendToArchitect;
33
- /**
34
- * Reset all state (useful for testing).
35
- */
36
- reset(): void;
37
- }
38
- //# sourceMappingURL=gate-watcher.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gate-watcher.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/utils/gate-watcher.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAiCnD,MAAM,MAAM,KAAK,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;AAEhF,qBAAa,WAAW;IACtB,4DAA4D;IAC5D,OAAO,CAAC,QAAQ,CAA6B;IAC7C,sDAAsD;IACtD,OAAO,CAAC,WAAW,CAAkC;IACrD,sBAAsB;IACtB,OAAO,CAAC,GAAG,CAAQ;IACnB,wBAAwB;IACxB,OAAO,CAAC,QAAQ,CAAS;gBAEb,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE,MAAM;IAKzC;;OAEG;IACG,cAAc,CAAC,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAwChF;;OAEG;IACH,OAAO,CAAC,YAAY;IAUpB;;OAEG;IACH,OAAO,CAAC,eAAe;IAgBvB;;OAEG;IACH,KAAK,IAAI,IAAI;CAId"}
@@ -1,122 +0,0 @@
1
- /**
2
- * Spec 0100: Gate watcher for detecting gate transitions and sending af send notifications.
3
- *
4
- * Tracks which gates have been notified (dedup) and sends `af send architect`
5
- * messages when new gates appear. Uses a dual-map design:
6
- * - notified: Map<key, timestamp> for dedup
7
- * - projectKeys: Map<projectPath, Set<key>> for clearing on gate resolution
8
- */
9
- import { execFile } from 'node:child_process';
10
- import { resolve, dirname } from 'node:path';
11
- import { fileURLToPath } from 'node:url';
12
- // Strip ANSI escape sequences
13
- const ANSI_RE = /\x1B\[[0-9;]*[A-Za-z]/g;
14
- // Reject control characters that could be injected
15
- const CONTROL_CHAR_RE = /[;\n\r]/;
16
- /**
17
- * Sanitize a string for use in af send messages.
18
- * Returns null if the value contains unsafe control characters.
19
- */
20
- function sanitize(value) {
21
- const stripped = value.replace(ANSI_RE, '').trim();
22
- if (!stripped || CONTROL_CHAR_RE.test(stripped))
23
- return null;
24
- return stripped;
25
- }
26
- /**
27
- * Resolve the path to the `af` CLI binary.
28
- * Works from both source (src/) and compiled (dist/) contexts.
29
- */
30
- function resolveAfBinary() {
31
- // From dist/agent-farm/utils/gate-watcher.js → bin/af.js
32
- // From src/agent-farm/utils/gate-watcher.ts → bin/af.js
33
- const thisDir = typeof __dirname !== 'undefined'
34
- ? __dirname
35
- : dirname(fileURLToPath(import.meta.url));
36
- // thisDir = .../packages/codev/dist/agent-farm/utils or .../src/agent-farm/utils
37
- // Navigate up to packages/codev/bin/af.js
38
- return resolve(thisDir, '../../../bin/af.js');
39
- }
40
- export class GateWatcher {
41
- /** Dedup map: key -> ISO timestamp of first notification */
42
- notified = new Map();
43
- /** Index: projectPath -> set of keys in `notified` */
44
- projectKeys = new Map();
45
- /** Logger function */
46
- log;
47
- /** Path to af binary */
48
- afBinary;
49
- constructor(log, afBinary) {
50
- this.log = log;
51
- this.afBinary = afBinary ?? resolveAfBinary();
52
- }
53
- /**
54
- * Check gate status for a project and send notification if it's a new gate.
55
- */
56
- async checkAndNotify(gateStatus, projectPath) {
57
- if (!gateStatus.hasGate) {
58
- // Gate resolved — clear all entries for this project
59
- this.clearProject(projectPath);
60
- return;
61
- }
62
- const { builderId, gateName } = gateStatus;
63
- if (!builderId || !gateName)
64
- return;
65
- const key = `${projectPath}:${builderId}:${gateName}`;
66
- // Already notified for this exact gate
67
- if (this.notified.has(key))
68
- return;
69
- // Gate changed for this project — clear old entries, add new one
70
- this.clearProject(projectPath);
71
- this.notified.set(key, new Date().toISOString());
72
- const keys = new Set();
73
- keys.add(key);
74
- this.projectKeys.set(projectPath, keys);
75
- // Sanitize before sending
76
- const safeBuilderId = sanitize(builderId);
77
- const safeGateName = sanitize(gateName);
78
- if (!safeBuilderId || !safeGateName) {
79
- this.log('WARN', `Gate watcher: skipping af send — unsafe gateName or builderId for project ${projectPath}`);
80
- return;
81
- }
82
- const message = [
83
- `GATE: ${safeGateName} (Builder ${safeBuilderId})`,
84
- `Builder ${safeBuilderId} is waiting for approval.`,
85
- `Run: porch approve ${safeBuilderId} ${safeGateName}`,
86
- ].join('\n');
87
- await this.sendToArchitect(message, projectPath);
88
- }
89
- /**
90
- * Clear all tracked keys for a project.
91
- */
92
- clearProject(projectPath) {
93
- const keys = this.projectKeys.get(projectPath);
94
- if (keys) {
95
- for (const k of keys) {
96
- this.notified.delete(k);
97
- }
98
- this.projectKeys.delete(projectPath);
99
- }
100
- }
101
- /**
102
- * Send a message to the architect via af send.
103
- */
104
- sendToArchitect(message, projectPath) {
105
- return new Promise((resolve) => {
106
- execFile(process.execPath, [this.afBinary, 'send', 'architect', message, '--raw', '--no-enter'], { cwd: projectPath, timeout: 10_000 }, (error) => {
107
- if (error) {
108
- this.log('WARN', `Gate watcher: af send failed for ${projectPath}: ${error.message}`);
109
- }
110
- resolve();
111
- });
112
- });
113
- }
114
- /**
115
- * Reset all state (useful for testing).
116
- */
117
- reset() {
118
- this.notified.clear();
119
- this.projectKeys.clear();
120
- }
121
- }
122
- //# sourceMappingURL=gate-watcher.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gate-watcher.js","sourceRoot":"","sources":["../../../src/agent-farm/utils/gate-watcher.ts"],"names":[],"mappings":"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"}
@@ -1,32 +0,0 @@
1
- /**
2
- * Shared session-naming utilities for Agent Farm.
3
- * Centralizes session name generation to prevent drift between commands.
4
- */
5
- import type { Config } from '../types.js';
6
- /**
7
- * Get a namespaced session name for a builder: builder-{project}-{id}
8
- */
9
- export declare function getBuilderSessionName(config: Config, builderId: string): string;
10
- /**
11
- * Parsed metadata from a session name.
12
- * Our naming convention: architect-{basename}, builder-{basename}-{specId}, shell-{basename}-{shellId}
13
- */
14
- export interface ParsedSession {
15
- type: 'architect' | 'builder' | 'shell';
16
- projectBasename: string;
17
- roleId: string | null;
18
- }
19
- /**
20
- * Parse a codev session name to extract type, project, and role.
21
- * Returns null if the name doesn't match any known codev pattern.
22
- *
23
- * Examples:
24
- * "architect-codev-public" → { type: 'architect', projectBasename: 'codev-public', roleId: null }
25
- * "builder-codevos_ai-0001" → { type: 'builder', projectBasename: 'codevos_ai', roleId: '0001' }
26
- * "builder-codev-public-bugfix-242" → { type: 'builder', projectBasename: 'codev-public', roleId: 'bugfix-242' }
27
- * "builder-codev-public-task-AbCd" → { type: 'builder', projectBasename: 'codev-public', roleId: 'task-AbCd' }
28
- * "builder-codev-public-worktree-QwEr" → { type: 'builder', projectBasename: 'codev-public', roleId: 'worktree-QwEr' }
29
- * "shell-codev-public-shell-1" → { type: 'shell', projectBasename: 'codev-public', roleId: 'shell-1' }
30
- */
31
- export declare function parseSessionName(name: string): ParsedSession | null;
32
- //# sourceMappingURL=session.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/utils/session.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAE/E;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,WAAW,GAAG,SAAS,GAAG,OAAO,CAAC;IACxC,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAsCnE"}
@@ -1,57 +0,0 @@
1
- /**
2
- * Shared session-naming utilities for Agent Farm.
3
- * Centralizes session name generation to prevent drift between commands.
4
- */
5
- import { basename } from 'node:path';
6
- /**
7
- * Get a namespaced session name for a builder: builder-{project}-{id}
8
- */
9
- export function getBuilderSessionName(config, builderId) {
10
- return `builder-${basename(config.projectRoot)}-${builderId}`;
11
- }
12
- /**
13
- * Parse a codev session name to extract type, project, and role.
14
- * Returns null if the name doesn't match any known codev pattern.
15
- *
16
- * Examples:
17
- * "architect-codev-public" → { type: 'architect', projectBasename: 'codev-public', roleId: null }
18
- * "builder-codevos_ai-0001" → { type: 'builder', projectBasename: 'codevos_ai', roleId: '0001' }
19
- * "builder-codev-public-bugfix-242" → { type: 'builder', projectBasename: 'codev-public', roleId: 'bugfix-242' }
20
- * "builder-codev-public-task-AbCd" → { type: 'builder', projectBasename: 'codev-public', roleId: 'task-AbCd' }
21
- * "builder-codev-public-worktree-QwEr" → { type: 'builder', projectBasename: 'codev-public', roleId: 'worktree-QwEr' }
22
- * "shell-codev-public-shell-1" → { type: 'shell', projectBasename: 'codev-public', roleId: 'shell-1' }
23
- */
24
- export function parseSessionName(name) {
25
- // architect-{basename}
26
- const architectMatch = name.match(/^architect-(.+)$/);
27
- if (architectMatch) {
28
- return { type: 'architect', projectBasename: architectMatch[1], roleId: null };
29
- }
30
- // builder-{basename}-bugfix-{N} — bugfix builder (issue number)
31
- const bugfixMatch = name.match(/^builder-(.+)-(bugfix-\d+)$/);
32
- if (bugfixMatch) {
33
- return { type: 'builder', projectBasename: bugfixMatch[1], roleId: bugfixMatch[2] };
34
- }
35
- // builder-{basename}-task-{shortId} — ad-hoc task builder (shortId is URL-safe base64: a-zA-Z0-9_-)
36
- const taskMatch = name.match(/^builder-(.+)-(task-[a-zA-Z0-9_-]+)$/);
37
- if (taskMatch) {
38
- return { type: 'builder', projectBasename: taskMatch[1], roleId: taskMatch[2] };
39
- }
40
- // builder-{basename}-worktree-{shortId} — generic worktree builder (shortId is URL-safe base64)
41
- const worktreeMatch = name.match(/^builder-(.+)-(worktree-[a-zA-Z0-9_-]+)$/);
42
- if (worktreeMatch) {
43
- return { type: 'builder', projectBasename: worktreeMatch[1], roleId: worktreeMatch[2] };
44
- }
45
- // builder-{basename}-{specId} — SPIR builder (spec ID is digits, any length)
46
- const builderMatch = name.match(/^builder-(.+)-(\d+)$/);
47
- if (builderMatch) {
48
- return { type: 'builder', projectBasename: builderMatch[1], roleId: builderMatch[2] };
49
- }
50
- // shell-{basename}-{shellId} — shellId is "shell-N" (last two segments)
51
- const shellMatch = name.match(/^shell-(.+)-(shell-\d+)$/);
52
- if (shellMatch) {
53
- return { type: 'shell', projectBasename: shellMatch[1], roleId: shellMatch[2] };
54
- }
55
- return null;
56
- }
57
- //# sourceMappingURL=session.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/agent-farm/utils/session.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAGrC;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAc,EAAE,SAAiB;IACrE,OAAO,WAAW,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,SAAS,EAAE,CAAC;AAChE,CAAC;AAYD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,uBAAuB;IACvB,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACtD,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,eAAe,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACjF,CAAC;IAED,gEAAgE;IAChE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAC9D,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,eAAe,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IACtF,CAAC;IAED,oGAAoG;IACpG,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;IACrE,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;IAClF,CAAC;IAED,gGAAgG;IAChG,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC7E,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,eAAe,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1F,CAAC;IAED,6EAA6E;IAC7E,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACxD,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IACxF,CAAC;IAED,wEAAwE;IACxE,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC1D,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;IAClF,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1,70 +0,0 @@
1
- /**
2
- * Projectlist.md parser for the Projects Tab UI (Spec 0045)
3
- *
4
- * This module provides functions to parse the YAML project entries from
5
- * codev/projectlist.md. It's used by both the dashboard UI and for testing.
6
- */
7
- export interface ProjectFiles {
8
- spec?: string | null;
9
- plan?: string | null;
10
- review?: string | null;
11
- }
12
- export interface ProjectTimestamps {
13
- conceived_at?: string | null;
14
- specified_at?: string | null;
15
- planned_at?: string | null;
16
- implementing_at?: string | null;
17
- implemented_at?: string | null;
18
- committed_at?: string | null;
19
- integrated_at?: string | null;
20
- }
21
- export interface Project {
22
- id: string;
23
- title: string;
24
- summary?: string;
25
- status: string;
26
- priority?: string;
27
- release?: string;
28
- files?: ProjectFiles;
29
- dependencies?: string[];
30
- tags?: string[];
31
- ticks?: string[];
32
- timestamps?: ProjectTimestamps;
33
- notes?: string;
34
- }
35
- export declare const VALID_STATUSES: readonly ["conceived", "specified", "planned", "implementing", "implemented", "committed", "integrated", "abandoned", "on-hold"];
36
- export type ProjectStatus = (typeof VALID_STATUSES)[number];
37
- export declare const LIFECYCLE_STAGES: ProjectStatus[];
38
- /**
39
- * XSS-safe HTML escaping
40
- */
41
- export declare function escapeHtml(text: string | null | undefined): string;
42
- /**
43
- * Parse a single project entry from YAML-like text
44
- */
45
- export declare function parseProjectEntry(text: string): Partial<Project>;
46
- /**
47
- * Validate that a project entry is valid
48
- */
49
- export declare function isValidProject(project: Partial<Project>): project is Project;
50
- /**
51
- * Parse projectlist.md content into array of projects
52
- */
53
- export declare function parseProjectlist(content: string): Project[];
54
- /**
55
- * Get the index of a lifecycle stage
56
- */
57
- export declare function getStageIndex(status: string): number;
58
- /**
59
- * Filter projects to only active (non-terminal) ones
60
- */
61
- export declare function getActiveProjects(projects: Project[]): Project[];
62
- /**
63
- * Filter projects to only terminal (abandoned, on-hold) ones
64
- */
65
- export declare function getTerminalProjects(projects: Project[]): Project[];
66
- /**
67
- * Get projects grouped by status
68
- */
69
- export declare function groupByStatus(projects: Project[], statuses: string[]): Record<string, Project[]>;
70
- //# sourceMappingURL=projectlist-parser.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"projectlist-parser.d.ts","sourceRoot":"","sources":["../../src/lib/projectlist-parser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,cAAc,kIAUjB,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5D,eAAO,MAAM,gBAAgB,EAAE,aAAa,EAQ3C,CAAC;AAEF;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAQlE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA6EhE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,IAAI,OAAO,CA6B5E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,EAAE,CA8B3D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAIhE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAIlE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,OAAO,EAAE,EACnB,QAAQ,EAAE,MAAM,EAAE,GACjB,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAM3B"}
@@ -1,200 +0,0 @@
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, '&amp;')
35
- .replace(/</g, '&lt;')
36
- .replace(/>/g, '&gt;')
37
- .replace(/"/g, '&quot;')
38
- .replace(/'/g, '&#39;');
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"projectlist-parser.js","sourceRoot":"","sources":["../../src/lib/projectlist-parser.ts"],"names":[],"mappings":"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"}