@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.
- package/dashboard/dist/assets/{index-b38SaXk5.js → index-UsH9ixz1.js} +20 -20
- package/dashboard/dist/assets/index-UsH9ixz1.js.map +1 -0
- package/dashboard/dist/index.html +1 -1
- package/dist/agent-farm/cli.js +1 -1
- package/dist/agent-farm/cli.js.map +1 -1
- package/dist/agent-farm/commands/architect.d.ts +1 -1
- package/dist/agent-farm/commands/architect.js +3 -3
- package/dist/agent-farm/commands/architect.js.map +1 -1
- package/dist/agent-farm/commands/attach.js +1 -1
- package/dist/agent-farm/commands/attach.js.map +1 -1
- package/dist/agent-farm/commands/cleanup.js +6 -6
- package/dist/agent-farm/commands/cleanup.js.map +1 -1
- package/dist/agent-farm/commands/open.js +5 -5
- package/dist/agent-farm/commands/open.js.map +1 -1
- package/dist/agent-farm/commands/send.js +5 -5
- package/dist/agent-farm/commands/send.js.map +1 -1
- package/dist/agent-farm/commands/shell.js +5 -5
- package/dist/agent-farm/commands/shell.js.map +1 -1
- package/dist/agent-farm/commands/spawn-worktree.d.ts +1 -1
- package/dist/agent-farm/commands/spawn-worktree.d.ts.map +1 -1
- package/dist/agent-farm/commands/spawn-worktree.js +8 -8
- package/dist/agent-farm/commands/spawn-worktree.js.map +1 -1
- package/dist/agent-farm/commands/spawn.js +3 -3
- package/dist/agent-farm/commands/spawn.js.map +1 -1
- package/dist/agent-farm/commands/start.d.ts +4 -4
- package/dist/agent-farm/commands/start.js +16 -16
- package/dist/agent-farm/commands/start.js.map +1 -1
- package/dist/agent-farm/commands/status.d.ts +1 -1
- package/dist/agent-farm/commands/status.js +16 -16
- package/dist/agent-farm/commands/status.js.map +1 -1
- package/dist/agent-farm/commands/stop.d.ts +4 -4
- package/dist/agent-farm/commands/stop.js +9 -9
- package/dist/agent-farm/commands/stop.js.map +1 -1
- package/dist/agent-farm/db/index.d.ts.map +1 -1
- package/dist/agent-farm/db/index.js +82 -7
- package/dist/agent-farm/db/index.js.map +1 -1
- package/dist/agent-farm/db/schema.d.ts +2 -2
- package/dist/agent-farm/db/schema.d.ts.map +1 -1
- package/dist/agent-farm/db/schema.js +21 -4
- package/dist/agent-farm/db/schema.js.map +1 -1
- package/dist/agent-farm/lib/tower-client.d.ts +20 -20
- package/dist/agent-farm/lib/tower-client.d.ts.map +1 -1
- package/dist/agent-farm/lib/tower-client.js +25 -25
- package/dist/agent-farm/lib/tower-client.js.map +1 -1
- package/dist/agent-farm/lib/tunnel-client.d.ts +12 -2
- package/dist/agent-farm/lib/tunnel-client.d.ts.map +1 -1
- package/dist/agent-farm/lib/tunnel-client.js +59 -1
- package/dist/agent-farm/lib/tunnel-client.js.map +1 -1
- package/dist/agent-farm/servers/tower-instances.d.ts +18 -18
- package/dist/agent-farm/servers/tower-instances.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-instances.js +89 -89
- package/dist/agent-farm/servers/tower-instances.js.map +1 -1
- package/dist/agent-farm/servers/tower-routes.d.ts +1 -1
- package/dist/agent-farm/servers/tower-routes.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-routes.js +184 -162
- package/dist/agent-farm/servers/tower-routes.js.map +1 -1
- package/dist/agent-farm/servers/tower-server.js +23 -19
- package/dist/agent-farm/servers/tower-server.js.map +1 -1
- package/dist/agent-farm/servers/tower-terminals.d.ts +27 -29
- package/dist/agent-farm/servers/tower-terminals.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-terminals.js +95 -116
- package/dist/agent-farm/servers/tower-terminals.js.map +1 -1
- package/dist/agent-farm/servers/tower-tunnel.d.ts +2 -2
- package/dist/agent-farm/servers/tower-tunnel.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-tunnel.js +12 -12
- package/dist/agent-farm/servers/tower-tunnel.js.map +1 -1
- package/dist/agent-farm/servers/tower-types.d.ts +8 -10
- package/dist/agent-farm/servers/tower-types.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-utils.d.ts +9 -9
- package/dist/agent-farm/servers/tower-utils.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-utils.js +18 -18
- package/dist/agent-farm/servers/tower-utils.js.map +1 -1
- package/dist/agent-farm/servers/tower-websocket.d.ts +2 -2
- package/dist/agent-farm/servers/tower-websocket.js +14 -14
- package/dist/agent-farm/servers/tower-websocket.js.map +1 -1
- package/dist/agent-farm/types.d.ts +2 -2
- package/dist/agent-farm/types.d.ts.map +1 -1
- package/dist/agent-farm/utils/config.d.ts +1 -1
- package/dist/agent-farm/utils/config.d.ts.map +1 -1
- package/dist/agent-farm/utils/config.js +16 -16
- package/dist/agent-farm/utils/config.js.map +1 -1
- package/dist/agent-farm/utils/file-tabs.d.ts +3 -3
- package/dist/agent-farm/utils/file-tabs.d.ts.map +1 -1
- package/dist/agent-farm/utils/file-tabs.js +9 -9
- package/dist/agent-farm/utils/file-tabs.js.map +1 -1
- package/dist/agent-farm/utils/gate-status.d.ts +2 -2
- package/dist/agent-farm/utils/gate-status.d.ts.map +1 -1
- package/dist/agent-farm/utils/gate-status.js +3 -3
- package/dist/agent-farm/utils/gate-status.js.map +1 -1
- package/dist/agent-farm/utils/index.d.ts +0 -1
- package/dist/agent-farm/utils/index.d.ts.map +1 -1
- package/dist/agent-farm/utils/index.js +0 -1
- package/dist/agent-farm/utils/index.js.map +1 -1
- package/dist/agent-farm/utils/notifications.d.ts +4 -4
- package/dist/agent-farm/utils/notifications.d.ts.map +1 -1
- package/dist/agent-farm/utils/notifications.js +18 -18
- package/dist/agent-farm/utils/notifications.js.map +1 -1
- package/dist/commands/adopt.d.ts +2 -2
- package/dist/commands/adopt.d.ts.map +1 -1
- package/dist/commands/adopt.js +13 -3
- package/dist/commands/adopt.js.map +1 -1
- package/dist/commands/consult/index.d.ts +1 -1
- package/dist/commands/consult/index.d.ts.map +1 -1
- package/dist/commands/consult/index.js +52 -51
- package/dist/commands/consult/index.js.map +1 -1
- package/dist/commands/doctor.js +6 -6
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/import.js +4 -4
- package/dist/commands/import.js.map +1 -1
- package/dist/commands/init.d.ts +2 -2
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +13 -3
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/porch/index.d.ts +6 -6
- package/dist/commands/porch/index.d.ts.map +1 -1
- package/dist/commands/porch/index.js +37 -37
- package/dist/commands/porch/index.js.map +1 -1
- package/dist/commands/porch/next.d.ts +1 -1
- package/dist/commands/porch/next.d.ts.map +1 -1
- package/dist/commands/porch/next.js +43 -40
- package/dist/commands/porch/next.js.map +1 -1
- package/dist/commands/porch/notify.d.ts +11 -0
- package/dist/commands/porch/notify.d.ts.map +1 -0
- package/dist/commands/porch/notify.js +30 -0
- package/dist/commands/porch/notify.js.map +1 -0
- package/dist/commands/porch/plan.d.ts +1 -1
- package/dist/commands/porch/plan.d.ts.map +1 -1
- package/dist/commands/porch/plan.js +3 -3
- package/dist/commands/porch/plan.js.map +1 -1
- package/dist/commands/porch/prompts.d.ts +1 -1
- package/dist/commands/porch/prompts.d.ts.map +1 -1
- package/dist/commands/porch/prompts.js +13 -13
- package/dist/commands/porch/prompts.js.map +1 -1
- package/dist/commands/porch/protocol.d.ts +1 -1
- package/dist/commands/porch/protocol.d.ts.map +1 -1
- package/dist/commands/porch/protocol.js +6 -6
- package/dist/commands/porch/protocol.js.map +1 -1
- package/dist/commands/porch/state.d.ts +6 -6
- package/dist/commands/porch/state.d.ts.map +1 -1
- package/dist/commands/porch/state.js +11 -11
- package/dist/commands/porch/state.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +10 -1
- package/dist/commands/update.js.map +1 -1
- package/dist/lib/scaffold.d.ts +13 -0
- package/dist/lib/scaffold.d.ts.map +1 -1
- package/dist/lib/scaffold.js +34 -0
- package/dist/lib/scaffold.js.map +1 -1
- package/dist/lib/skeleton.d.ts +7 -7
- package/dist/lib/skeleton.d.ts.map +1 -1
- package/dist/lib/skeleton.js +10 -10
- package/dist/lib/skeleton.js.map +1 -1
- package/dist/terminal/pty-manager.d.ts +1 -1
- package/dist/terminal/pty-manager.d.ts.map +1 -1
- package/dist/terminal/pty-manager.js +3 -3
- package/dist/terminal/pty-manager.js.map +1 -1
- package/package.json +1 -1
- package/templates/open.html +13 -13
- package/templates/tower.html +63 -72
- package/templates/vendor/marked.min.js +6 -0
- package/templates/vendor/prism-bash.min.js +1 -0
- package/templates/vendor/prism-css.min.js +1 -0
- package/templates/vendor/prism-javascript.min.js +1 -0
- package/templates/vendor/prism-json.min.js +1 -0
- package/templates/vendor/prism-markdown.min.js +1 -0
- package/templates/vendor/prism-markup.min.js +1 -0
- package/templates/vendor/prism-python.min.js +1 -0
- package/templates/vendor/prism-tomorrow.min.css +1 -0
- package/templates/vendor/prism-typescript.min.js +1 -0
- package/templates/vendor/prism-yaml.min.js +1 -0
- package/templates/vendor/prism.min.js +1 -0
- package/templates/vendor/purify.min.js +3 -0
- package/dashboard/dist/assets/index-b38SaXk5.js.map +0 -1
- package/dist/agent-farm/hq-connector.d.ts +0 -19
- package/dist/agent-farm/hq-connector.d.ts.map +0 -1
- package/dist/agent-farm/hq-connector.js +0 -351
- package/dist/agent-farm/hq-connector.js.map +0 -1
- package/dist/agent-farm/utils/deps.d.ts +0 -51
- package/dist/agent-farm/utils/deps.d.ts.map +0 -1
- package/dist/agent-farm/utils/deps.js +0 -162
- package/dist/agent-farm/utils/deps.js.map +0 -1
- package/dist/agent-farm/utils/gate-watcher.d.ts +0 -38
- package/dist/agent-farm/utils/gate-watcher.d.ts.map +0 -1
- package/dist/agent-farm/utils/gate-watcher.js +0 -122
- package/dist/agent-farm/utils/gate-watcher.js.map +0 -1
- package/dist/agent-farm/utils/session.d.ts +0 -32
- package/dist/agent-farm/utils/session.d.ts.map +0 -1
- package/dist/agent-farm/utils/session.js +0 -57
- package/dist/agent-farm/utils/session.js.map +0 -1
- package/dist/lib/projectlist-parser.d.ts +0 -70
- package/dist/lib/projectlist-parser.d.ts.map +0 -1
- package/dist/lib/projectlist-parser.js +0 -200
- package/dist/lib/projectlist-parser.js.map +0 -1
- package/templates/dashboard/css/dialogs.css +0 -149
- package/templates/dashboard/css/files.css +0 -558
- package/templates/dashboard/css/layout.css +0 -133
- package/templates/dashboard/css/projects.css +0 -501
- package/templates/dashboard/css/statusbar.css +0 -23
- package/templates/dashboard/css/tabs.css +0 -314
- package/templates/dashboard/css/utilities.css +0 -50
- package/templates/dashboard/css/variables.css +0 -45
- package/templates/dashboard/index.html +0 -149
- package/templates/dashboard/js/dialogs.js +0 -368
- package/templates/dashboard/js/files.js +0 -448
- package/templates/dashboard/js/main.js +0 -476
- package/templates/dashboard/js/projects.js +0 -544
- package/templates/dashboard/js/state.js +0 -91
- package/templates/dashboard/js/tabs.js +0 -518
- 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"}
|