@cluesmith/codev 2.0.1 → 2.0.3

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 (209) hide show
  1. package/dashboard/dist/assets/{index-b38SaXk5.js → index-UsH9ixz1.js} +20 -20
  2. package/dashboard/dist/assets/index-UsH9ixz1.js.map +1 -0
  3. package/dashboard/dist/index.html +1 -1
  4. package/dist/agent-farm/cli.js +1 -1
  5. package/dist/agent-farm/cli.js.map +1 -1
  6. package/dist/agent-farm/commands/architect.d.ts +1 -1
  7. package/dist/agent-farm/commands/architect.js +3 -3
  8. package/dist/agent-farm/commands/architect.js.map +1 -1
  9. package/dist/agent-farm/commands/attach.js +1 -1
  10. package/dist/agent-farm/commands/attach.js.map +1 -1
  11. package/dist/agent-farm/commands/cleanup.js +6 -6
  12. package/dist/agent-farm/commands/cleanup.js.map +1 -1
  13. package/dist/agent-farm/commands/open.js +5 -5
  14. package/dist/agent-farm/commands/open.js.map +1 -1
  15. package/dist/agent-farm/commands/send.js +5 -5
  16. package/dist/agent-farm/commands/send.js.map +1 -1
  17. package/dist/agent-farm/commands/shell.js +5 -5
  18. package/dist/agent-farm/commands/shell.js.map +1 -1
  19. package/dist/agent-farm/commands/spawn-worktree.d.ts +1 -1
  20. package/dist/agent-farm/commands/spawn-worktree.d.ts.map +1 -1
  21. package/dist/agent-farm/commands/spawn-worktree.js +8 -8
  22. package/dist/agent-farm/commands/spawn-worktree.js.map +1 -1
  23. package/dist/agent-farm/commands/spawn.js +3 -3
  24. package/dist/agent-farm/commands/spawn.js.map +1 -1
  25. package/dist/agent-farm/commands/start.d.ts +4 -4
  26. package/dist/agent-farm/commands/start.js +16 -16
  27. package/dist/agent-farm/commands/start.js.map +1 -1
  28. package/dist/agent-farm/commands/status.d.ts +1 -1
  29. package/dist/agent-farm/commands/status.js +16 -16
  30. package/dist/agent-farm/commands/status.js.map +1 -1
  31. package/dist/agent-farm/commands/stop.d.ts +4 -4
  32. package/dist/agent-farm/commands/stop.js +9 -9
  33. package/dist/agent-farm/commands/stop.js.map +1 -1
  34. package/dist/agent-farm/db/index.d.ts.map +1 -1
  35. package/dist/agent-farm/db/index.js +82 -7
  36. package/dist/agent-farm/db/index.js.map +1 -1
  37. package/dist/agent-farm/db/schema.d.ts +2 -2
  38. package/dist/agent-farm/db/schema.d.ts.map +1 -1
  39. package/dist/agent-farm/db/schema.js +21 -4
  40. package/dist/agent-farm/db/schema.js.map +1 -1
  41. package/dist/agent-farm/lib/tower-client.d.ts +20 -20
  42. package/dist/agent-farm/lib/tower-client.d.ts.map +1 -1
  43. package/dist/agent-farm/lib/tower-client.js +25 -25
  44. package/dist/agent-farm/lib/tower-client.js.map +1 -1
  45. package/dist/agent-farm/lib/tunnel-client.d.ts +12 -2
  46. package/dist/agent-farm/lib/tunnel-client.d.ts.map +1 -1
  47. package/dist/agent-farm/lib/tunnel-client.js +59 -1
  48. package/dist/agent-farm/lib/tunnel-client.js.map +1 -1
  49. package/dist/agent-farm/servers/tower-instances.d.ts +18 -18
  50. package/dist/agent-farm/servers/tower-instances.d.ts.map +1 -1
  51. package/dist/agent-farm/servers/tower-instances.js +89 -89
  52. package/dist/agent-farm/servers/tower-instances.js.map +1 -1
  53. package/dist/agent-farm/servers/tower-routes.d.ts +1 -1
  54. package/dist/agent-farm/servers/tower-routes.d.ts.map +1 -1
  55. package/dist/agent-farm/servers/tower-routes.js +184 -162
  56. package/dist/agent-farm/servers/tower-routes.js.map +1 -1
  57. package/dist/agent-farm/servers/tower-server.js +23 -19
  58. package/dist/agent-farm/servers/tower-server.js.map +1 -1
  59. package/dist/agent-farm/servers/tower-terminals.d.ts +27 -29
  60. package/dist/agent-farm/servers/tower-terminals.d.ts.map +1 -1
  61. package/dist/agent-farm/servers/tower-terminals.js +95 -116
  62. package/dist/agent-farm/servers/tower-terminals.js.map +1 -1
  63. package/dist/agent-farm/servers/tower-tunnel.d.ts +2 -2
  64. package/dist/agent-farm/servers/tower-tunnel.d.ts.map +1 -1
  65. package/dist/agent-farm/servers/tower-tunnel.js +12 -12
  66. package/dist/agent-farm/servers/tower-tunnel.js.map +1 -1
  67. package/dist/agent-farm/servers/tower-types.d.ts +8 -10
  68. package/dist/agent-farm/servers/tower-types.d.ts.map +1 -1
  69. package/dist/agent-farm/servers/tower-utils.d.ts +9 -9
  70. package/dist/agent-farm/servers/tower-utils.d.ts.map +1 -1
  71. package/dist/agent-farm/servers/tower-utils.js +18 -18
  72. package/dist/agent-farm/servers/tower-utils.js.map +1 -1
  73. package/dist/agent-farm/servers/tower-websocket.d.ts +2 -2
  74. package/dist/agent-farm/servers/tower-websocket.js +14 -14
  75. package/dist/agent-farm/servers/tower-websocket.js.map +1 -1
  76. package/dist/agent-farm/types.d.ts +2 -2
  77. package/dist/agent-farm/types.d.ts.map +1 -1
  78. package/dist/agent-farm/utils/config.d.ts +1 -1
  79. package/dist/agent-farm/utils/config.d.ts.map +1 -1
  80. package/dist/agent-farm/utils/config.js +16 -16
  81. package/dist/agent-farm/utils/config.js.map +1 -1
  82. package/dist/agent-farm/utils/file-tabs.d.ts +3 -3
  83. package/dist/agent-farm/utils/file-tabs.d.ts.map +1 -1
  84. package/dist/agent-farm/utils/file-tabs.js +9 -9
  85. package/dist/agent-farm/utils/file-tabs.js.map +1 -1
  86. package/dist/agent-farm/utils/gate-status.d.ts +2 -2
  87. package/dist/agent-farm/utils/gate-status.d.ts.map +1 -1
  88. package/dist/agent-farm/utils/gate-status.js +3 -3
  89. package/dist/agent-farm/utils/gate-status.js.map +1 -1
  90. package/dist/agent-farm/utils/index.d.ts +0 -1
  91. package/dist/agent-farm/utils/index.d.ts.map +1 -1
  92. package/dist/agent-farm/utils/index.js +0 -1
  93. package/dist/agent-farm/utils/index.js.map +1 -1
  94. package/dist/agent-farm/utils/notifications.d.ts +4 -4
  95. package/dist/agent-farm/utils/notifications.d.ts.map +1 -1
  96. package/dist/agent-farm/utils/notifications.js +18 -18
  97. package/dist/agent-farm/utils/notifications.js.map +1 -1
  98. package/dist/commands/adopt.d.ts +2 -2
  99. package/dist/commands/adopt.d.ts.map +1 -1
  100. package/dist/commands/adopt.js +13 -3
  101. package/dist/commands/adopt.js.map +1 -1
  102. package/dist/commands/consult/index.d.ts +1 -1
  103. package/dist/commands/consult/index.d.ts.map +1 -1
  104. package/dist/commands/consult/index.js +52 -51
  105. package/dist/commands/consult/index.js.map +1 -1
  106. package/dist/commands/doctor.js +6 -6
  107. package/dist/commands/doctor.js.map +1 -1
  108. package/dist/commands/import.js +4 -4
  109. package/dist/commands/import.js.map +1 -1
  110. package/dist/commands/init.d.ts +2 -2
  111. package/dist/commands/init.d.ts.map +1 -1
  112. package/dist/commands/init.js +13 -3
  113. package/dist/commands/init.js.map +1 -1
  114. package/dist/commands/porch/index.d.ts +6 -6
  115. package/dist/commands/porch/index.d.ts.map +1 -1
  116. package/dist/commands/porch/index.js +37 -37
  117. package/dist/commands/porch/index.js.map +1 -1
  118. package/dist/commands/porch/next.d.ts +1 -1
  119. package/dist/commands/porch/next.d.ts.map +1 -1
  120. package/dist/commands/porch/next.js +43 -40
  121. package/dist/commands/porch/next.js.map +1 -1
  122. package/dist/commands/porch/notify.d.ts +11 -0
  123. package/dist/commands/porch/notify.d.ts.map +1 -0
  124. package/dist/commands/porch/notify.js +30 -0
  125. package/dist/commands/porch/notify.js.map +1 -0
  126. package/dist/commands/porch/plan.d.ts +1 -1
  127. package/dist/commands/porch/plan.d.ts.map +1 -1
  128. package/dist/commands/porch/plan.js +3 -3
  129. package/dist/commands/porch/plan.js.map +1 -1
  130. package/dist/commands/porch/prompts.d.ts +1 -1
  131. package/dist/commands/porch/prompts.d.ts.map +1 -1
  132. package/dist/commands/porch/prompts.js +13 -13
  133. package/dist/commands/porch/prompts.js.map +1 -1
  134. package/dist/commands/porch/protocol.d.ts +1 -1
  135. package/dist/commands/porch/protocol.d.ts.map +1 -1
  136. package/dist/commands/porch/protocol.js +6 -6
  137. package/dist/commands/porch/protocol.js.map +1 -1
  138. package/dist/commands/porch/state.d.ts +6 -6
  139. package/dist/commands/porch/state.d.ts.map +1 -1
  140. package/dist/commands/porch/state.js +11 -11
  141. package/dist/commands/porch/state.js.map +1 -1
  142. package/dist/commands/update.d.ts.map +1 -1
  143. package/dist/commands/update.js +10 -1
  144. package/dist/commands/update.js.map +1 -1
  145. package/dist/lib/scaffold.d.ts +13 -0
  146. package/dist/lib/scaffold.d.ts.map +1 -1
  147. package/dist/lib/scaffold.js +34 -0
  148. package/dist/lib/scaffold.js.map +1 -1
  149. package/dist/lib/skeleton.d.ts +7 -7
  150. package/dist/lib/skeleton.d.ts.map +1 -1
  151. package/dist/lib/skeleton.js +10 -10
  152. package/dist/lib/skeleton.js.map +1 -1
  153. package/dist/terminal/pty-manager.d.ts +1 -1
  154. package/dist/terminal/pty-manager.d.ts.map +1 -1
  155. package/dist/terminal/pty-manager.js +3 -3
  156. package/dist/terminal/pty-manager.js.map +1 -1
  157. package/package.json +1 -1
  158. package/templates/open.html +13 -13
  159. package/templates/tower.html +63 -72
  160. package/templates/vendor/marked.min.js +6 -0
  161. package/templates/vendor/prism-bash.min.js +1 -0
  162. package/templates/vendor/prism-css.min.js +1 -0
  163. package/templates/vendor/prism-javascript.min.js +1 -0
  164. package/templates/vendor/prism-json.min.js +1 -0
  165. package/templates/vendor/prism-markdown.min.js +1 -0
  166. package/templates/vendor/prism-markup.min.js +1 -0
  167. package/templates/vendor/prism-python.min.js +1 -0
  168. package/templates/vendor/prism-tomorrow.min.css +1 -0
  169. package/templates/vendor/prism-typescript.min.js +1 -0
  170. package/templates/vendor/prism-yaml.min.js +1 -0
  171. package/templates/vendor/prism.min.js +1 -0
  172. package/templates/vendor/purify.min.js +3 -0
  173. package/dashboard/dist/assets/index-b38SaXk5.js.map +0 -1
  174. package/dist/agent-farm/hq-connector.d.ts +0 -19
  175. package/dist/agent-farm/hq-connector.d.ts.map +0 -1
  176. package/dist/agent-farm/hq-connector.js +0 -351
  177. package/dist/agent-farm/hq-connector.js.map +0 -1
  178. package/dist/agent-farm/utils/deps.d.ts +0 -51
  179. package/dist/agent-farm/utils/deps.d.ts.map +0 -1
  180. package/dist/agent-farm/utils/deps.js +0 -162
  181. package/dist/agent-farm/utils/deps.js.map +0 -1
  182. package/dist/agent-farm/utils/gate-watcher.d.ts +0 -38
  183. package/dist/agent-farm/utils/gate-watcher.d.ts.map +0 -1
  184. package/dist/agent-farm/utils/gate-watcher.js +0 -122
  185. package/dist/agent-farm/utils/gate-watcher.js.map +0 -1
  186. package/dist/agent-farm/utils/session.d.ts +0 -32
  187. package/dist/agent-farm/utils/session.d.ts.map +0 -1
  188. package/dist/agent-farm/utils/session.js +0 -57
  189. package/dist/agent-farm/utils/session.js.map +0 -1
  190. package/dist/lib/projectlist-parser.d.ts +0 -70
  191. package/dist/lib/projectlist-parser.d.ts.map +0 -1
  192. package/dist/lib/projectlist-parser.js +0 -200
  193. package/dist/lib/projectlist-parser.js.map +0 -1
  194. package/templates/dashboard/css/dialogs.css +0 -149
  195. package/templates/dashboard/css/files.css +0 -558
  196. package/templates/dashboard/css/layout.css +0 -133
  197. package/templates/dashboard/css/projects.css +0 -501
  198. package/templates/dashboard/css/statusbar.css +0 -23
  199. package/templates/dashboard/css/tabs.css +0 -314
  200. package/templates/dashboard/css/utilities.css +0 -50
  201. package/templates/dashboard/css/variables.css +0 -45
  202. package/templates/dashboard/index.html +0 -149
  203. package/templates/dashboard/js/dialogs.js +0 -368
  204. package/templates/dashboard/js/files.js +0 -448
  205. package/templates/dashboard/js/main.js +0 -476
  206. package/templates/dashboard/js/projects.js +0 -544
  207. package/templates/dashboard/js/state.js +0 -91
  208. package/templates/dashboard/js/tabs.js +0 -518
  209. package/templates/dashboard/js/utils.js +0 -191
@@ -1,19 +0,0 @@
1
- /**
2
- * HQ Connector - Connects Agent Farm to CODEV_HQ
3
- *
4
- * When CODEV_HQ_URL is set, this module:
5
- * 1. Establishes WebSocket connection to HQ
6
- * 2. Registers with project info
7
- * 3. Watches status files and syncs changes
8
- * 4. Handles approval messages from HQ
9
- */
10
- /**
11
- * Connect to HQ and register this agent farm instance
12
- * Called during project activation when CODEV_HQ_URL is set
13
- */
14
- export declare function initHQConnector(root: string): void;
15
- /**
16
- * Check if HQ connector is enabled
17
- */
18
- export declare function isHQEnabled(): boolean;
19
- //# sourceMappingURL=hq-connector.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hq-connector.d.ts","sourceRoot":"","sources":["../../src/agent-farm/hq-connector.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA+YH;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAYlD;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,OAAO,CAErC"}
@@ -1,351 +0,0 @@
1
- /**
2
- * HQ Connector - Connects Agent Farm to CODEV_HQ
3
- *
4
- * When CODEV_HQ_URL is set, this module:
5
- * 1. Establishes WebSocket connection to HQ
6
- * 2. Registers with project info
7
- * 3. Watches status files and syncs changes
8
- * 4. Handles approval messages from HQ
9
- */
10
- import { WebSocket } from 'ws';
11
- import { watch, existsSync, readFileSync, writeFileSync } from 'node:fs';
12
- import { join, basename, dirname, relative } from 'node:path';
13
- import { randomUUID } from 'node:crypto';
14
- import { execSync } from 'node:child_process';
15
- import { logger } from './utils/logger.js';
16
- /**
17
- * HQ Connector state
18
- */
19
- let ws = null;
20
- let reconnectTimer = null;
21
- let pingInterval = null;
22
- let statusWatcher = null;
23
- let instanceId = null;
24
- let projectRoot = null;
25
- let reconnectAttempts = 0;
26
- const MAX_RECONNECT_DELAY = 60000;
27
- const BASE_RECONNECT_DELAY = 1000;
28
- /**
29
- * Generate a unique message ID
30
- */
31
- function generateId() {
32
- return `${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;
33
- }
34
- /**
35
- * Send a message to HQ
36
- */
37
- function sendMessage(message) {
38
- if (!ws || ws.readyState !== WebSocket.OPEN) {
39
- logger.debug('[HQ] Cannot send - WebSocket not open');
40
- return;
41
- }
42
- ws.send(JSON.stringify(message));
43
- }
44
- /**
45
- * Get git remote URL for a project
46
- */
47
- function getGitRemote(projectPath) {
48
- try {
49
- const remote = execSync('git remote get-url origin', {
50
- cwd: projectPath,
51
- encoding: 'utf-8',
52
- timeout: 5000,
53
- }).trim();
54
- return remote || undefined;
55
- }
56
- catch {
57
- return undefined;
58
- }
59
- }
60
- /**
61
- * Get current git SHA for a file
62
- */
63
- function getGitSha(filePath) {
64
- try {
65
- const sha = execSync(`git log -1 --format=%H -- "${filePath}"`, {
66
- cwd: dirname(filePath),
67
- encoding: 'utf-8',
68
- timeout: 5000,
69
- }).trim();
70
- return sha || undefined;
71
- }
72
- catch {
73
- return undefined;
74
- }
75
- }
76
- /**
77
- * Create git commit for approval
78
- */
79
- function commitApproval(filePath, gate, approvedBy) {
80
- try {
81
- const dir = dirname(filePath);
82
- const fileName = basename(filePath);
83
- execSync(`git add "${fileName}"`, { cwd: dir, timeout: 5000 });
84
- execSync(`git commit -m "[HQ] Gate approved: ${gate} by ${approvedBy}"`, {
85
- cwd: dir,
86
- timeout: 5000,
87
- });
88
- return true;
89
- }
90
- catch (error) {
91
- logger.debug(`[HQ] Failed to commit approval: ${error instanceof Error ? error.message : error}`);
92
- return false;
93
- }
94
- }
95
- /**
96
- * Handle incoming messages from HQ
97
- */
98
- function handleMessage(data) {
99
- let message;
100
- try {
101
- message = JSON.parse(data);
102
- }
103
- catch {
104
- logger.debug('[HQ] Invalid message received');
105
- return;
106
- }
107
- switch (message.type) {
108
- case 'welcome':
109
- logger.info('[HQ] Connected to CODEV_HQ');
110
- register();
111
- break;
112
- case 'pong':
113
- logger.debug('[HQ] Pong received');
114
- break;
115
- case 'response':
116
- const payload = message.payload;
117
- if (payload?.success === false) {
118
- logger.warn(`[HQ] Error response: ${payload.error}`);
119
- }
120
- break;
121
- case 'approval':
122
- handleApproval(message);
123
- break;
124
- case 'command':
125
- handleCommand(message);
126
- break;
127
- default:
128
- logger.debug(`[HQ] Unknown message type: ${message.type}`);
129
- }
130
- }
131
- /**
132
- * Handle approval message from HQ
133
- */
134
- function handleApproval(message) {
135
- const payload = message.payload;
136
- logger.info(`[HQ] Received approval for ${payload.gate} from ${payload.approved_by}`);
137
- // Find the status file for this project
138
- const statusDir = join(projectRoot, 'codev', 'status');
139
- const statusFile = join(statusDir, `${payload.project_id}-*.md`);
140
- // For spike simplicity, just look for any file starting with project_id
141
- try {
142
- const { globSync } = require('glob');
143
- const files = globSync(statusFile);
144
- if (files.length === 0) {
145
- logger.warn(`[HQ] Status file not found for project ${payload.project_id}`);
146
- return;
147
- }
148
- const filePath = files[0];
149
- let content = readFileSync(filePath, 'utf-8');
150
- // Parse YAML frontmatter and update gate status
151
- // Simple regex-based update for spike
152
- const gatePattern = new RegExp(`(${payload.gate.replace(/\./g, '\\.')}):\\s*\\{\\s*status:\\s*pending`, 'g');
153
- const newContent = content.replace(gatePattern, `$1: { status: passed, by: ${payload.approved_by}, at: ${payload.approved_at}`);
154
- if (newContent !== content) {
155
- writeFileSync(filePath, newContent, 'utf-8');
156
- logger.info(`[HQ] Updated ${basename(filePath)} with approval`);
157
- // Create git commit
158
- if (commitApproval(filePath, payload.gate, payload.approved_by)) {
159
- logger.info(`[HQ] Created git commit for approval`);
160
- }
161
- // Send status update back to HQ
162
- sendStatusUpdate(payload.project_path, filePath, newContent);
163
- }
164
- }
165
- catch (error) {
166
- logger.error(`[HQ] Failed to handle approval: ${error instanceof Error ? error.message : error}`);
167
- }
168
- }
169
- /**
170
- * Handle command from HQ
171
- */
172
- function handleCommand(message) {
173
- const payload = message.payload;
174
- logger.info(`[HQ] Received command: ${payload.command}`);
175
- // For spike, just log commands - full implementation would execute them
176
- logger.debug(`[HQ] Command args: ${JSON.stringify(payload.args)}`);
177
- // Acknowledge receipt
178
- sendMessage({
179
- type: 'command_ack',
180
- id: generateId(),
181
- ts: Date.now(),
182
- payload: { command_id: message.id, status: 'received' },
183
- });
184
- }
185
- /**
186
- * Register with HQ
187
- */
188
- function register() {
189
- if (!projectRoot)
190
- return;
191
- const projects = [{
192
- path: projectRoot,
193
- name: basename(projectRoot),
194
- git_remote: getGitRemote(projectRoot),
195
- }];
196
- sendMessage({
197
- type: 'register',
198
- id: generateId(),
199
- ts: Date.now(),
200
- payload: {
201
- instance_id: instanceId,
202
- instance_name: process.env.CODEV_HQ_INSTANCE_NAME || `${require('os').hostname()}-agent-farm`,
203
- version: require('../../package.json').version,
204
- projects,
205
- },
206
- });
207
- // Start status file watching after registration
208
- startStatusWatcher();
209
- // Reset reconnect counter on successful registration
210
- reconnectAttempts = 0;
211
- }
212
- /**
213
- * Send status file update to HQ
214
- */
215
- function sendStatusUpdate(projectPath, statusFile, content) {
216
- sendMessage({
217
- type: 'status_update',
218
- id: generateId(),
219
- ts: Date.now(),
220
- payload: {
221
- project_path: projectPath,
222
- status_file: relative(projectPath, statusFile),
223
- content,
224
- git_sha: getGitSha(statusFile),
225
- },
226
- });
227
- }
228
- /**
229
- * Watch status files for changes
230
- */
231
- function startStatusWatcher() {
232
- if (statusWatcher)
233
- return;
234
- if (!projectRoot)
235
- return;
236
- const statusDir = join(projectRoot, 'codev', 'status');
237
- // Create status directory if it doesn't exist
238
- if (!existsSync(statusDir)) {
239
- logger.debug('[HQ] Status directory does not exist, skipping watcher');
240
- return;
241
- }
242
- logger.info('[HQ] Watching status files...');
243
- statusWatcher = watch(statusDir, (eventType, filename) => {
244
- if (!filename || !filename.endsWith('.md'))
245
- return;
246
- const filePath = join(statusDir, filename);
247
- if (!existsSync(filePath))
248
- return;
249
- try {
250
- const content = readFileSync(filePath, 'utf-8');
251
- sendStatusUpdate(projectRoot, filePath, content);
252
- logger.debug(`[HQ] Synced ${filename}`);
253
- }
254
- catch (error) {
255
- logger.debug(`[HQ] Failed to read ${filename}: ${error instanceof Error ? error.message : error}`);
256
- }
257
- });
258
- }
259
- /**
260
- * Start ping interval to keep connection alive
261
- */
262
- function startPingInterval() {
263
- if (pingInterval)
264
- return;
265
- pingInterval = setInterval(() => {
266
- sendMessage({
267
- type: 'ping',
268
- id: generateId(),
269
- ts: Date.now(),
270
- payload: { ts: Date.now() },
271
- });
272
- }, 30000);
273
- }
274
- /**
275
- * Attempt to reconnect to HQ
276
- */
277
- function scheduleReconnect() {
278
- if (reconnectTimer)
279
- return;
280
- const delay = Math.min(BASE_RECONNECT_DELAY * Math.pow(2, reconnectAttempts), MAX_RECONNECT_DELAY);
281
- reconnectAttempts++;
282
- logger.info(`[HQ] Reconnecting in ${delay / 1000}s...`);
283
- reconnectTimer = setTimeout(() => {
284
- reconnectTimer = null;
285
- connect();
286
- }, delay);
287
- }
288
- /**
289
- * Connect to CODEV_HQ
290
- */
291
- function connect() {
292
- const hqUrl = process.env.CODEV_HQ_URL;
293
- if (!hqUrl)
294
- return;
295
- logger.info(`[HQ] Connecting to ${hqUrl}...`);
296
- const apiKey = process.env.CODEV_HQ_API_KEY || 'dev-key-spike';
297
- const wsUrl = new URL(hqUrl);
298
- wsUrl.searchParams.set('key', apiKey);
299
- ws = new WebSocket(wsUrl.toString());
300
- ws.on('open', () => {
301
- logger.info('[HQ] WebSocket connected');
302
- startPingInterval();
303
- });
304
- ws.on('message', (data) => {
305
- handleMessage(data.toString());
306
- });
307
- ws.on('close', (code, reason) => {
308
- logger.warn(`[HQ] Disconnected (code: ${code})`);
309
- cleanup();
310
- scheduleReconnect();
311
- });
312
- ws.on('error', (error) => {
313
- logger.error(`[HQ] WebSocket error: ${error.message}`);
314
- });
315
- }
316
- /**
317
- * Cleanup resources
318
- */
319
- function cleanup() {
320
- if (pingInterval) {
321
- clearInterval(pingInterval);
322
- pingInterval = null;
323
- }
324
- if (statusWatcher) {
325
- statusWatcher.close();
326
- statusWatcher = null;
327
- }
328
- ws = null;
329
- }
330
- /**
331
- * Connect to HQ and register this agent farm instance
332
- * Called during project activation when CODEV_HQ_URL is set
333
- */
334
- export function initHQConnector(root) {
335
- const hqUrl = process.env.CODEV_HQ_URL;
336
- if (!hqUrl) {
337
- logger.debug('[HQ] CODEV_HQ_URL not set, HQ connector disabled');
338
- return;
339
- }
340
- instanceId = randomUUID();
341
- projectRoot = root;
342
- logger.info('[HQ] HQ connector enabled');
343
- connect();
344
- }
345
- /**
346
- * Check if HQ connector is enabled
347
- */
348
- export function isHQEnabled() {
349
- return !!process.env.CODEV_HQ_URL;
350
- }
351
- //# sourceMappingURL=hq-connector.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hq-connector.js","sourceRoot":"","sources":["../../src/agent-farm/hq-connector.ts"],"names":[],"mappings":"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"}
@@ -1,51 +0,0 @@
1
- /**
2
- * Dependency checking utilities for Agent Farm
3
- *
4
- * Verifies that required system dependencies are installed with correct versions.
5
- */
6
- export interface Dependency {
7
- name: string;
8
- command: string;
9
- minVersion: string;
10
- versionCmd: string;
11
- versionParser: (output: string) => string | null;
12
- installHint: {
13
- macos: string;
14
- linux: string;
15
- };
16
- required: boolean;
17
- }
18
- /**
19
- * Core dependencies required for Agent Farm
20
- */
21
- export declare const CORE_DEPENDENCIES: Dependency[];
22
- /**
23
- * Compare semantic versions
24
- * Returns: -1 if a < b, 0 if a == b, 1 if a > b
25
- */
26
- export declare function compareVersions(a: string, b: string): number;
27
- export interface DependencyCheckResult {
28
- name: string;
29
- installed: boolean;
30
- version: string | null;
31
- minVersion: string;
32
- versionOk: boolean;
33
- versionUnknown: boolean;
34
- installHint: string;
35
- }
36
- /**
37
- * Check a single dependency
38
- */
39
- export declare function checkDependency(dep: Dependency): Promise<DependencyCheckResult>;
40
- /**
41
- * Check all core dependencies required for Agent Farm
42
- *
43
- * @param exitOnFailure - If true, calls fatal() on missing required deps (default: true)
44
- * @returns Array of check results
45
- */
46
- export declare function checkCoreDependencies(exitOnFailure?: boolean): Promise<DependencyCheckResult[]>;
47
- /**
48
- * Quick check for a single required dependency (for backwards compat)
49
- */
50
- export declare function requireDependency(name: string, installHint?: string): Promise<void>;
51
- //# sourceMappingURL=deps.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deps.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/utils/deps.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACjD,WAAW,EAAE;QACX,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,UAAU,EAiCzC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAW5D;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAiDrF;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CAAC,aAAa,UAAO,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAyClG;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKzF"}
@@ -1,162 +0,0 @@
1
- /**
2
- * Dependency checking utilities for Agent Farm
3
- *
4
- * Verifies that required system dependencies are installed with correct versions.
5
- */
6
- import { run, commandExists } from './shell.js';
7
- import { logger, fatal } from './logger.js';
8
- /**
9
- * Core dependencies required for Agent Farm
10
- */
11
- export const CORE_DEPENDENCIES = [
12
- {
13
- name: 'Node.js',
14
- command: 'node',
15
- minVersion: '18.0.0',
16
- versionCmd: 'node --version',
17
- versionParser: (output) => {
18
- // v18.17.0 -> 18.17.0
19
- const match = output.match(/v?(\d+\.\d+\.\d+)/);
20
- return match ? match[1] : null;
21
- },
22
- installHint: {
23
- macos: 'brew install node',
24
- linux: 'apt install nodejs npm',
25
- },
26
- required: true,
27
- },
28
- {
29
- name: 'git',
30
- command: 'git',
31
- minVersion: '2.5.0',
32
- versionCmd: 'git --version',
33
- versionParser: (output) => {
34
- // git version 2.39.2 (Apple Git-143)
35
- const match = output.match(/git version (\d+\.\d+\.\d+)/);
36
- return match ? match[1] : null;
37
- },
38
- installHint: {
39
- macos: '(pre-installed on macOS)',
40
- linux: 'apt install git',
41
- },
42
- required: true,
43
- },
44
- ];
45
- /**
46
- * Compare semantic versions
47
- * Returns: -1 if a < b, 0 if a == b, 1 if a > b
48
- */
49
- export function compareVersions(a, b) {
50
- const partsA = a.split('.').map(Number);
51
- const partsB = b.split('.').map(Number);
52
- for (let i = 0; i < Math.max(partsA.length, partsB.length); i++) {
53
- const numA = partsA[i] || 0;
54
- const numB = partsB[i] || 0;
55
- if (numA < numB)
56
- return -1;
57
- if (numA > numB)
58
- return 1;
59
- }
60
- return 0;
61
- }
62
- /**
63
- * Check a single dependency
64
- */
65
- export async function checkDependency(dep) {
66
- const platform = process.platform === 'darwin' ? 'macos' : 'linux';
67
- const installHint = dep.installHint[platform];
68
- // Check if command exists
69
- if (!(await commandExists(dep.command))) {
70
- return {
71
- name: dep.name,
72
- installed: false,
73
- version: null,
74
- minVersion: dep.minVersion,
75
- versionOk: false,
76
- versionUnknown: false,
77
- installHint,
78
- };
79
- }
80
- // Get version
81
- let version = null;
82
- let versionOk = false;
83
- let versionUnknown = false;
84
- try {
85
- const { stdout, stderr } = await run(dep.versionCmd);
86
- // Some tools output version to stderr
87
- const output = stdout || stderr;
88
- version = dep.versionParser(output);
89
- if (version) {
90
- versionOk = compareVersions(version, dep.minVersion) >= 0;
91
- }
92
- else {
93
- // Parser returned null - version unknown
94
- versionUnknown = true;
95
- }
96
- }
97
- catch {
98
- // Command exists but version check failed
99
- version = 'unknown';
100
- versionUnknown = true;
101
- }
102
- return {
103
- name: dep.name,
104
- installed: true,
105
- version,
106
- minVersion: dep.minVersion,
107
- versionOk,
108
- versionUnknown,
109
- installHint,
110
- };
111
- }
112
- /**
113
- * Check all core dependencies required for Agent Farm
114
- *
115
- * @param exitOnFailure - If true, calls fatal() on missing required deps (default: true)
116
- * @returns Array of check results
117
- */
118
- export async function checkCoreDependencies(exitOnFailure = true) {
119
- const results = [];
120
- const failures = [];
121
- const warnings = [];
122
- for (const dep of CORE_DEPENDENCIES) {
123
- const result = await checkDependency(dep);
124
- results.push(result);
125
- if (!result.installed) {
126
- failures.push(`${dep.name} not found. Install with: ${result.installHint}`);
127
- }
128
- else if (result.versionUnknown) {
129
- warnings.push(`${dep.name} version could not be determined (may be incompatible)`);
130
- }
131
- else if (!result.versionOk && result.version) {
132
- failures.push(`${dep.name} version ${result.version} is below minimum ${dep.minVersion}. ` +
133
- `Upgrade with: ${result.installHint}`);
134
- }
135
- }
136
- // Show warnings first (non-fatal)
137
- if (warnings.length > 0) {
138
- logger.warn('Dependency warnings:');
139
- for (const warning of warnings) {
140
- logger.warn(` • ${warning}`);
141
- }
142
- }
143
- // Then show failures and exit if requested
144
- if (failures.length > 0 && exitOnFailure) {
145
- logger.error('Missing or outdated dependencies:');
146
- for (const failure of failures) {
147
- logger.error(` • ${failure}`);
148
- }
149
- fatal('Please install missing dependencies and try again.');
150
- }
151
- return results;
152
- }
153
- /**
154
- * Quick check for a single required dependency (for backwards compat)
155
- */
156
- export async function requireDependency(name, installHint) {
157
- if (!(await commandExists(name))) {
158
- const hint = installHint || `Please install ${name}`;
159
- fatal(`${name} not found. ${hint}`);
160
- }
161
- }
162
- //# sourceMappingURL=deps.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deps.js","sourceRoot":"","sources":["../../../src/agent-farm/utils/deps.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"}