@cluesmith/codev 2.0.0-rc.47 → 2.0.0-rc.49

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 (34) hide show
  1. package/bin/af.js +2 -2
  2. package/bin/consult.js +1 -1
  3. package/dist/agent-farm/commands/start.d.ts +3 -0
  4. package/dist/agent-farm/commands/start.d.ts.map +1 -1
  5. package/dist/agent-farm/commands/start.js +65 -0
  6. package/dist/agent-farm/commands/start.js.map +1 -1
  7. package/dist/agent-farm/commands/status.d.ts +2 -0
  8. package/dist/agent-farm/commands/status.d.ts.map +1 -1
  9. package/dist/agent-farm/commands/status.js +56 -1
  10. package/dist/agent-farm/commands/status.js.map +1 -1
  11. package/dist/agent-farm/commands/stop.d.ts +6 -0
  12. package/dist/agent-farm/commands/stop.d.ts.map +1 -1
  13. package/dist/agent-farm/commands/stop.js +36 -1
  14. package/dist/agent-farm/commands/stop.js.map +1 -1
  15. package/dist/agent-farm/db/index.d.ts.map +1 -1
  16. package/dist/agent-farm/db/index.js +17 -0
  17. package/dist/agent-farm/db/index.js.map +1 -1
  18. package/dist/agent-farm/db/schema.d.ts +1 -1
  19. package/dist/agent-farm/db/schema.d.ts.map +1 -1
  20. package/dist/agent-farm/db/schema.js +2 -0
  21. package/dist/agent-farm/db/schema.js.map +1 -1
  22. package/dist/agent-farm/lib/tower-client.d.ts +157 -0
  23. package/dist/agent-farm/lib/tower-client.d.ts.map +1 -0
  24. package/dist/agent-farm/lib/tower-client.js +223 -0
  25. package/dist/agent-farm/lib/tower-client.js.map +1 -0
  26. package/dist/agent-farm/servers/tower-server.js +836 -224
  27. package/dist/agent-farm/servers/tower-server.js.map +1 -1
  28. package/dist/commands/adopt.js +1 -1
  29. package/package.json +1 -1
  30. package/templates/tower.html +2 -2
  31. package/dist/agent-farm/servers/dashboard-server.d.ts +0 -7
  32. package/dist/agent-farm/servers/dashboard-server.d.ts.map +0 -1
  33. package/dist/agent-farm/servers/dashboard-server.js +0 -2181
  34. package/dist/agent-farm/servers/dashboard-server.js.map +0 -1
@@ -0,0 +1,157 @@
1
+ /**
2
+ * Tower API Client (Spec 0090 Phase 3)
3
+ *
4
+ * Provides a client for CLI commands to interact with the tower daemon.
5
+ * Handles local-key authentication and common API operations.
6
+ */
7
+ /**
8
+ * Project info returned by tower API
9
+ */
10
+ export interface TowerProject {
11
+ path: string;
12
+ name: string;
13
+ basePort: number;
14
+ active: boolean;
15
+ proxyUrl: string;
16
+ terminals: number;
17
+ lastUsed?: string;
18
+ }
19
+ /**
20
+ * Project status with detailed info
21
+ */
22
+ export interface TowerProjectStatus {
23
+ path: string;
24
+ name: string;
25
+ active: boolean;
26
+ basePort: number;
27
+ terminals: Array<{
28
+ type: 'architect' | 'builder' | 'shell';
29
+ id: string;
30
+ label: string;
31
+ url: string;
32
+ active: boolean;
33
+ }>;
34
+ gateStatus?: {
35
+ hasGate: boolean;
36
+ gateName?: string;
37
+ builderId?: string;
38
+ timestamp?: number;
39
+ };
40
+ }
41
+ /**
42
+ * Health status from tower
43
+ */
44
+ export interface TowerHealth {
45
+ status: 'healthy' | 'degraded';
46
+ uptime: number;
47
+ activeProjects: number;
48
+ totalProjects: number;
49
+ memoryUsage: number;
50
+ timestamp: string;
51
+ }
52
+ /**
53
+ * Terminal info from tower
54
+ */
55
+ export interface TowerTerminal {
56
+ id: string;
57
+ pid: number;
58
+ cols: number;
59
+ rows: number;
60
+ label: string;
61
+ status: 'running' | 'exited';
62
+ createdAt: string;
63
+ wsPath: string;
64
+ }
65
+ /**
66
+ * Encode a project path for use in tower API URLs
67
+ */
68
+ export declare function encodeProjectPath(projectPath: string): string;
69
+ /**
70
+ * Decode a project path from tower API URL
71
+ */
72
+ export declare function decodeProjectPath(encoded: string): string;
73
+ /**
74
+ * Tower API client class
75
+ */
76
+ export declare class TowerClient {
77
+ private readonly baseUrl;
78
+ private readonly localKey;
79
+ constructor(port?: number);
80
+ /**
81
+ * Make a request to the tower API
82
+ */
83
+ private request;
84
+ /**
85
+ * Check if tower is running and healthy
86
+ */
87
+ isRunning(): Promise<boolean>;
88
+ /**
89
+ * Get tower health status
90
+ */
91
+ getHealth(): Promise<TowerHealth | null>;
92
+ /**
93
+ * List all projects known to tower
94
+ */
95
+ listProjects(): Promise<TowerProject[]>;
96
+ /**
97
+ * Activate a project (start its dashboard)
98
+ */
99
+ activateProject(projectPath: string): Promise<{
100
+ ok: boolean;
101
+ adopted?: boolean;
102
+ error?: string;
103
+ }>;
104
+ /**
105
+ * Deactivate a project (stop its dashboard)
106
+ */
107
+ deactivateProject(projectPath: string): Promise<{
108
+ ok: boolean;
109
+ stopped?: number[];
110
+ error?: string;
111
+ }>;
112
+ /**
113
+ * Get status of a specific project
114
+ */
115
+ getProjectStatus(projectPath: string): Promise<TowerProjectStatus | null>;
116
+ /**
117
+ * Create a terminal session
118
+ */
119
+ createTerminal(options: {
120
+ command?: string;
121
+ args?: string[];
122
+ cols?: number;
123
+ rows?: number;
124
+ cwd?: string;
125
+ label?: string;
126
+ env?: Record<string, string>;
127
+ }): Promise<TowerTerminal | null>;
128
+ /**
129
+ * List all terminal sessions
130
+ */
131
+ listTerminals(): Promise<TowerTerminal[]>;
132
+ /**
133
+ * Get terminal info
134
+ */
135
+ getTerminal(terminalId: string): Promise<TowerTerminal | null>;
136
+ /**
137
+ * Kill a terminal session
138
+ */
139
+ killTerminal(terminalId: string): Promise<boolean>;
140
+ /**
141
+ * Resize a terminal
142
+ */
143
+ resizeTerminal(terminalId: string, cols: number, rows: number): Promise<TowerTerminal | null>;
144
+ /**
145
+ * Get the tower dashboard URL for a project
146
+ */
147
+ getProjectUrl(projectPath: string): string;
148
+ /**
149
+ * Get the WebSocket URL for a terminal
150
+ */
151
+ getTerminalWsUrl(terminalId: string): string;
152
+ }
153
+ /**
154
+ * Get the default tower client
155
+ */
156
+ export declare function getTowerClient(port?: number): TowerClient;
157
+ //# sourceMappingURL=tower-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tower-client.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/lib/tower-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,223 @@
1
+ /**
2
+ * Tower API Client (Spec 0090 Phase 3)
3
+ *
4
+ * Provides a client for CLI commands to interact with the tower daemon.
5
+ * Handles local-key authentication and common API operations.
6
+ */
7
+ import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'node:fs';
8
+ import { resolve } from 'node:path';
9
+ import { homedir } from 'node:os';
10
+ import { randomBytes } from 'node:crypto';
11
+ // Tower configuration
12
+ const DEFAULT_TOWER_PORT = 4100;
13
+ const AGENT_FARM_DIR = resolve(homedir(), '.agent-farm');
14
+ const LOCAL_KEY_PATH = resolve(AGENT_FARM_DIR, 'local-key');
15
+ // Request timeout
16
+ const REQUEST_TIMEOUT_MS = 10000;
17
+ /**
18
+ * Get or create the local key for CLI authentication
19
+ */
20
+ function getLocalKey() {
21
+ if (!existsSync(AGENT_FARM_DIR)) {
22
+ mkdirSync(AGENT_FARM_DIR, { recursive: true, mode: 0o700 });
23
+ }
24
+ if (!existsSync(LOCAL_KEY_PATH)) {
25
+ const key = randomBytes(32).toString('hex');
26
+ writeFileSync(LOCAL_KEY_PATH, key, { mode: 0o600 });
27
+ return key;
28
+ }
29
+ return readFileSync(LOCAL_KEY_PATH, 'utf-8').trim();
30
+ }
31
+ /**
32
+ * Encode a project path for use in tower API URLs
33
+ */
34
+ export function encodeProjectPath(projectPath) {
35
+ return Buffer.from(projectPath).toString('base64url');
36
+ }
37
+ /**
38
+ * Decode a project path from tower API URL
39
+ */
40
+ export function decodeProjectPath(encoded) {
41
+ return Buffer.from(encoded, 'base64url').toString('utf-8');
42
+ }
43
+ /**
44
+ * Tower API client class
45
+ */
46
+ export class TowerClient {
47
+ baseUrl;
48
+ localKey;
49
+ constructor(port = DEFAULT_TOWER_PORT) {
50
+ this.baseUrl = `http://localhost:${port}`;
51
+ this.localKey = getLocalKey();
52
+ }
53
+ /**
54
+ * Make a request to the tower API
55
+ */
56
+ async request(path, options = {}) {
57
+ try {
58
+ const response = await fetch(`${this.baseUrl}${path}`, {
59
+ ...options,
60
+ headers: {
61
+ ...options.headers,
62
+ 'codev-web-key': this.localKey,
63
+ 'Content-Type': 'application/json',
64
+ },
65
+ signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS),
66
+ });
67
+ if (!response.ok) {
68
+ const text = await response.text();
69
+ let error;
70
+ try {
71
+ const json = JSON.parse(text);
72
+ error = json.error || json.message || text;
73
+ }
74
+ catch {
75
+ error = text;
76
+ }
77
+ return { ok: false, status: response.status, error };
78
+ }
79
+ if (response.status === 204) {
80
+ return { ok: true, status: 204 };
81
+ }
82
+ const data = (await response.json());
83
+ return { ok: true, status: response.status, data };
84
+ }
85
+ catch (err) {
86
+ const message = err instanceof Error ? err.message : String(err);
87
+ if (message.includes('ECONNREFUSED')) {
88
+ return { ok: false, status: 0, error: 'Tower not running' };
89
+ }
90
+ if (message.includes('timeout')) {
91
+ return { ok: false, status: 0, error: 'Request timeout' };
92
+ }
93
+ return { ok: false, status: 0, error: message };
94
+ }
95
+ }
96
+ /**
97
+ * Check if tower is running and healthy
98
+ */
99
+ async isRunning() {
100
+ const result = await this.request('/health');
101
+ return result.ok && result.data?.status === 'healthy';
102
+ }
103
+ /**
104
+ * Get tower health status
105
+ */
106
+ async getHealth() {
107
+ const result = await this.request('/health');
108
+ return result.ok ? result.data : null;
109
+ }
110
+ /**
111
+ * List all projects known to tower
112
+ */
113
+ async listProjects() {
114
+ const result = await this.request('/api/projects');
115
+ return result.ok ? result.data.projects : [];
116
+ }
117
+ /**
118
+ * Activate a project (start its dashboard)
119
+ */
120
+ async activateProject(projectPath) {
121
+ const encoded = encodeProjectPath(projectPath);
122
+ const result = await this.request(`/api/projects/${encoded}/activate`, { method: 'POST' });
123
+ if (!result.ok) {
124
+ return { ok: false, error: result.error };
125
+ }
126
+ return {
127
+ ok: result.data?.success ?? true,
128
+ adopted: result.data?.adopted,
129
+ error: result.data?.error,
130
+ };
131
+ }
132
+ /**
133
+ * Deactivate a project (stop its dashboard)
134
+ */
135
+ async deactivateProject(projectPath) {
136
+ const encoded = encodeProjectPath(projectPath);
137
+ const result = await this.request(`/api/projects/${encoded}/deactivate`, { method: 'POST' });
138
+ if (!result.ok) {
139
+ return { ok: false, error: result.error };
140
+ }
141
+ return {
142
+ ok: result.data?.success ?? true,
143
+ stopped: result.data?.stopped,
144
+ error: result.data?.error,
145
+ };
146
+ }
147
+ /**
148
+ * Get status of a specific project
149
+ */
150
+ async getProjectStatus(projectPath) {
151
+ const encoded = encodeProjectPath(projectPath);
152
+ const result = await this.request(`/api/projects/${encoded}/status`);
153
+ return result.ok ? result.data : null;
154
+ }
155
+ /**
156
+ * Create a terminal session
157
+ */
158
+ async createTerminal(options) {
159
+ const result = await this.request('/api/terminals', {
160
+ method: 'POST',
161
+ body: JSON.stringify(options),
162
+ });
163
+ return result.ok ? result.data : null;
164
+ }
165
+ /**
166
+ * List all terminal sessions
167
+ */
168
+ async listTerminals() {
169
+ const result = await this.request('/api/terminals');
170
+ return result.ok ? result.data.terminals : [];
171
+ }
172
+ /**
173
+ * Get terminal info
174
+ */
175
+ async getTerminal(terminalId) {
176
+ const result = await this.request(`/api/terminals/${terminalId}`);
177
+ return result.ok ? result.data : null;
178
+ }
179
+ /**
180
+ * Kill a terminal session
181
+ */
182
+ async killTerminal(terminalId) {
183
+ const result = await this.request(`/api/terminals/${terminalId}`, { method: 'DELETE' });
184
+ return result.ok;
185
+ }
186
+ /**
187
+ * Resize a terminal
188
+ */
189
+ async resizeTerminal(terminalId, cols, rows) {
190
+ const result = await this.request(`/api/terminals/${terminalId}/resize`, {
191
+ method: 'POST',
192
+ body: JSON.stringify({ cols, rows }),
193
+ });
194
+ return result.ok ? result.data : null;
195
+ }
196
+ /**
197
+ * Get the tower dashboard URL for a project
198
+ */
199
+ getProjectUrl(projectPath) {
200
+ const encoded = encodeProjectPath(projectPath);
201
+ return `${this.baseUrl}/project/${encoded}/`;
202
+ }
203
+ /**
204
+ * Get the WebSocket URL for a terminal
205
+ */
206
+ getTerminalWsUrl(terminalId) {
207
+ return `ws://localhost:${new URL(this.baseUrl).port}/ws/terminal/${terminalId}`;
208
+ }
209
+ }
210
+ /**
211
+ * Default tower client instance
212
+ */
213
+ let defaultClient = null;
214
+ /**
215
+ * Get the default tower client
216
+ */
217
+ export function getTowerClient(port) {
218
+ if (!defaultClient || (port && port !== DEFAULT_TOWER_PORT)) {
219
+ defaultClient = new TowerClient(port);
220
+ }
221
+ return defaultClient;
222
+ }
223
+ //# sourceMappingURL=tower-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tower-client.js","sourceRoot":"","sources":["../../../src/agent-farm/lib/tower-client.ts"],"names":[],"mappings":"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"}