@cluesmith/codev 2.0.0-rc.61 → 2.0.0-rc.64
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-C7FtNK6Y.css +32 -0
- package/dashboard/dist/assets/index-DZuzzh0T.js +131 -0
- package/dashboard/dist/assets/index-DZuzzh0T.js.map +1 -0
- package/dashboard/dist/index.html +2 -2
- package/dist/agent-farm/cli.d.ts.map +1 -1
- package/dist/agent-farm/cli.js +75 -50
- package/dist/agent-farm/cli.js.map +1 -1
- package/dist/agent-farm/commands/architect.d.ts.map +1 -1
- package/dist/agent-farm/commands/architect.js +38 -48
- package/dist/agent-farm/commands/architect.js.map +1 -1
- package/dist/agent-farm/commands/attach.d.ts.map +1 -1
- package/dist/agent-farm/commands/attach.js +14 -35
- package/dist/agent-farm/commands/attach.js.map +1 -1
- package/dist/agent-farm/commands/cleanup.d.ts.map +1 -1
- package/dist/agent-farm/commands/cleanup.js +17 -18
- package/dist/agent-farm/commands/cleanup.js.map +1 -1
- package/dist/agent-farm/commands/consult.d.ts +3 -4
- package/dist/agent-farm/commands/consult.d.ts.map +1 -1
- package/dist/agent-farm/commands/consult.js +27 -37
- package/dist/agent-farm/commands/consult.js.map +1 -1
- package/dist/agent-farm/commands/open.d.ts.map +1 -1
- package/dist/agent-farm/commands/open.js +17 -31
- package/dist/agent-farm/commands/open.js.map +1 -1
- package/dist/agent-farm/commands/shell.d.ts.map +1 -1
- package/dist/agent-farm/commands/shell.js +27 -38
- package/dist/agent-farm/commands/shell.js.map +1 -1
- package/dist/agent-farm/commands/spawn.d.ts.map +1 -1
- package/dist/agent-farm/commands/spawn.js +113 -90
- package/dist/agent-farm/commands/spawn.js.map +1 -1
- package/dist/agent-farm/commands/start.d.ts +7 -20
- package/dist/agent-farm/commands/start.d.ts.map +1 -1
- package/dist/agent-farm/commands/start.js +3 -242
- package/dist/agent-farm/commands/start.js.map +1 -1
- package/dist/agent-farm/commands/status.d.ts.map +1 -1
- package/dist/agent-farm/commands/status.js +22 -29
- package/dist/agent-farm/commands/status.js.map +1 -1
- package/dist/agent-farm/commands/stop.d.ts.map +1 -1
- package/dist/agent-farm/commands/stop.js +43 -172
- package/dist/agent-farm/commands/stop.js.map +1 -1
- package/dist/agent-farm/commands/tower-cloud.d.ts +47 -0
- package/dist/agent-farm/commands/tower-cloud.d.ts.map +1 -0
- package/dist/agent-farm/commands/tower-cloud.js +316 -0
- package/dist/agent-farm/commands/tower-cloud.js.map +1 -0
- package/dist/agent-farm/db/index.d.ts +6 -2
- package/dist/agent-farm/db/index.d.ts.map +1 -1
- package/dist/agent-farm/db/index.js +56 -31
- package/dist/agent-farm/db/index.js.map +1 -1
- package/dist/agent-farm/db/migrate.d.ts +0 -4
- package/dist/agent-farm/db/migrate.d.ts.map +1 -1
- package/dist/agent-farm/db/migrate.js +0 -46
- package/dist/agent-farm/db/migrate.js.map +1 -1
- package/dist/agent-farm/db/schema.d.ts +3 -3
- package/dist/agent-farm/db/schema.d.ts.map +1 -1
- package/dist/agent-farm/db/schema.js +3 -17
- package/dist/agent-farm/db/schema.js.map +1 -1
- package/dist/agent-farm/db/types.d.ts +0 -10
- package/dist/agent-farm/db/types.d.ts.map +1 -1
- package/dist/agent-farm/db/types.js +0 -8
- package/dist/agent-farm/db/types.js.map +1 -1
- package/dist/agent-farm/hq-connector.d.ts +1 -1
- package/dist/agent-farm/hq-connector.js +1 -1
- package/dist/agent-farm/lib/cloud-config.d.ts +46 -0
- package/dist/agent-farm/lib/cloud-config.d.ts.map +1 -0
- package/dist/agent-farm/lib/cloud-config.js +106 -0
- package/dist/agent-farm/lib/cloud-config.js.map +1 -0
- package/dist/agent-farm/lib/tower-client.d.ts +7 -5
- package/dist/agent-farm/lib/tower-client.d.ts.map +1 -1
- package/dist/agent-farm/lib/tower-client.js.map +1 -1
- package/dist/agent-farm/lib/tunnel-client.d.ts +117 -0
- package/dist/agent-farm/lib/tunnel-client.d.ts.map +1 -0
- package/dist/agent-farm/lib/tunnel-client.js +502 -0
- package/dist/agent-farm/lib/tunnel-client.js.map +1 -0
- package/dist/agent-farm/servers/tower-server.js +559 -341
- package/dist/agent-farm/servers/tower-server.js.map +1 -1
- package/dist/agent-farm/state.d.ts +2 -2
- package/dist/agent-farm/state.d.ts.map +1 -1
- package/dist/agent-farm/state.js +6 -16
- package/dist/agent-farm/state.js.map +1 -1
- package/dist/agent-farm/types.d.ts +1 -18
- package/dist/agent-farm/types.d.ts.map +1 -1
- package/dist/agent-farm/utils/config.d.ts +0 -5
- package/dist/agent-farm/utils/config.d.ts.map +1 -1
- package/dist/agent-farm/utils/config.js +0 -31
- package/dist/agent-farm/utils/config.js.map +1 -1
- package/dist/agent-farm/utils/file-tabs.d.ts +27 -0
- package/dist/agent-farm/utils/file-tabs.d.ts.map +1 -0
- package/dist/agent-farm/utils/file-tabs.js +46 -0
- package/dist/agent-farm/utils/file-tabs.js.map +1 -0
- package/dist/agent-farm/utils/gate-status.d.ts +16 -0
- package/dist/agent-farm/utils/gate-status.d.ts.map +1 -0
- package/dist/agent-farm/utils/gate-status.js +79 -0
- package/dist/agent-farm/utils/gate-status.js.map +1 -0
- package/dist/agent-farm/utils/gate-watcher.d.ts +38 -0
- package/dist/agent-farm/utils/gate-watcher.d.ts.map +1 -0
- package/dist/agent-farm/utils/gate-watcher.js +122 -0
- package/dist/agent-farm/utils/gate-watcher.js.map +1 -0
- 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.js +1 -1
- package/dist/agent-farm/utils/notifications.js.map +1 -1
- package/dist/agent-farm/utils/server-utils.d.ts +1 -1
- package/dist/agent-farm/utils/server-utils.js +1 -1
- package/dist/agent-farm/utils/session.d.ts +10 -0
- package/dist/agent-farm/utils/session.d.ts.map +1 -0
- package/dist/agent-farm/utils/session.js +12 -0
- package/dist/agent-farm/utils/session.js.map +1 -0
- package/dist/commands/adopt.js +1 -1
- package/dist/commands/adopt.js.map +1 -1
- package/dist/commands/consult/index.d.ts.map +1 -1
- package/dist/commands/consult/index.js +23 -14
- package/dist/commands/consult/index.js.map +1 -1
- package/dist/commands/init.js +1 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/porch/index.d.ts.map +1 -1
- package/dist/commands/porch/index.js +35 -12
- package/dist/commands/porch/index.js.map +1 -1
- package/dist/commands/porch/next.js +11 -3
- package/dist/commands/porch/next.js.map +1 -1
- package/dist/commands/porch/verdict.d.ts +8 -0
- package/dist/commands/porch/verdict.d.ts.map +1 -1
- package/dist/commands/porch/verdict.js +13 -0
- package/dist/commands/porch/verdict.js.map +1 -1
- package/dist/terminal/pty-session.d.ts +2 -0
- package/dist/terminal/pty-session.d.ts.map +1 -1
- package/dist/terminal/pty-session.js +4 -0
- package/dist/terminal/pty-session.js.map +1 -1
- package/package.json +1 -1
- package/skeleton/.claude/skills/af/SKILL.md +15 -0
- package/skeleton/protocols/spir/prompts/review.md +15 -16
- package/skeleton/protocols/spir/protocol.json +4 -0
- package/skeleton/protocols/spir/templates/review.md +81 -199
- package/skeleton/resources/commands/agent-farm.md +38 -2
- package/templates/tower.html +7 -150
- package/dashboard/dist/assets/index-CXloFYpB.css +0 -32
- package/dashboard/dist/assets/index-Ca2fjOJf.js +0 -131
- package/dashboard/dist/assets/index-Ca2fjOJf.js.map +0 -1
- package/dist/agent-farm/utils/orphan-handler.d.ts +0 -27
- package/dist/agent-farm/utils/orphan-handler.d.ts.map +0 -1
- package/dist/agent-farm/utils/orphan-handler.js +0 -149
- package/dist/agent-farm/utils/orphan-handler.js.map +0 -1
- package/dist/agent-farm/utils/port-registry.d.ts +0 -57
- package/dist/agent-farm/utils/port-registry.d.ts.map +0 -1
- package/dist/agent-farm/utils/port-registry.js +0 -166
- package/dist/agent-farm/utils/port-registry.js.map +0 -1
- package/dist/agent-farm/utils/terminal-ports.d.ts +0 -18
- package/dist/agent-farm/utils/terminal-ports.d.ts.map +0 -1
- package/dist/agent-farm/utils/terminal-ports.js +0 -35
- package/dist/agent-farm/utils/terminal-ports.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/commands/start.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/commands/start.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAYhD;;;;;;;GAOG;AACH,wBAAsB,KAAK,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8CrE"}
|
|
@@ -1,236 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Start command -
|
|
2
|
+
* Start command - activates a project via Tower
|
|
3
3
|
*
|
|
4
4
|
* Phase 3 (Spec 0090): Uses tower API for project activation.
|
|
5
5
|
* Tower is the single daemon that manages all projects.
|
|
6
6
|
*/
|
|
7
|
-
import { basename } from 'node:path';
|
|
8
|
-
import { spawn, spawnSync } from 'node:child_process';
|
|
9
|
-
import * as net from 'node:net';
|
|
10
|
-
import { version as localVersion } from '../../version.js';
|
|
11
7
|
import { getConfig } from '../utils/index.js';
|
|
12
8
|
import { logger, fatal } from '../utils/logger.js';
|
|
13
9
|
import { openBrowser } from '../utils/shell.js';
|
|
14
|
-
import { getPortBlock, cleanupStaleEntries } from '../utils/port-registry.js';
|
|
15
10
|
import { TowerClient } from '../lib/tower-client.js';
|
|
16
11
|
import { towerStart } from './tower.js';
|
|
17
|
-
/**
|
|
18
|
-
* Check if a local port is available by attempting to bind to it.
|
|
19
|
-
* More reliable than fetch() which may miss some port conflicts.
|
|
20
|
-
*/
|
|
21
|
-
export function isPortAvailable(port) {
|
|
22
|
-
return new Promise((resolve) => {
|
|
23
|
-
const server = net.createServer();
|
|
24
|
-
server.once('error', () => {
|
|
25
|
-
resolve(false);
|
|
26
|
-
});
|
|
27
|
-
server.once('listening', () => {
|
|
28
|
-
server.close(() => {
|
|
29
|
-
resolve(true);
|
|
30
|
-
});
|
|
31
|
-
});
|
|
32
|
-
server.listen(port, '127.0.0.1');
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Parse remote target string: user@host or user@host:/path
|
|
37
|
-
*/
|
|
38
|
-
export function parseRemote(remote) {
|
|
39
|
-
// Match: user@host or user@host:/path
|
|
40
|
-
const match = remote.match(/^([^@]+)@([^:]+)(?::(.+))?$/);
|
|
41
|
-
if (!match) {
|
|
42
|
-
throw new Error(`Invalid remote format: ${remote}. Use user@host or user@host:/path`);
|
|
43
|
-
}
|
|
44
|
-
// Strip trailing slash to avoid duplicate port allocations (e.g., /path/ vs /path)
|
|
45
|
-
const remotePath = match[3]?.replace(/\/$/, '');
|
|
46
|
-
return { user: match[1], host: match[2], remotePath };
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Check if passwordless SSH is configured for a host
|
|
50
|
-
* Returns true if SSH works without password, false otherwise
|
|
51
|
-
*/
|
|
52
|
-
async function checkPasswordlessSSH(user, host) {
|
|
53
|
-
return new Promise((resolve) => {
|
|
54
|
-
const ssh = spawn('ssh', [
|
|
55
|
-
'-o', 'ConnectTimeout=10',
|
|
56
|
-
'-o', 'BatchMode=yes', // Fail immediately if password required
|
|
57
|
-
'-o', 'StrictHostKeyChecking=accept-new',
|
|
58
|
-
`${user}@${host}`,
|
|
59
|
-
'true', // Just run 'true' to test connection
|
|
60
|
-
], {
|
|
61
|
-
stdio: ['ignore', 'ignore', 'pipe'],
|
|
62
|
-
});
|
|
63
|
-
let stderr = '';
|
|
64
|
-
ssh.stderr?.on('data', (data) => {
|
|
65
|
-
stderr += data.toString();
|
|
66
|
-
});
|
|
67
|
-
ssh.on('error', (err) => resolve({ ok: false, error: err.message }));
|
|
68
|
-
ssh.on('exit', (code) => {
|
|
69
|
-
if (code === 0) {
|
|
70
|
-
resolve({ ok: true });
|
|
71
|
-
}
|
|
72
|
-
else {
|
|
73
|
-
resolve({ ok: false, error: stderr.trim() || `exit code ${code}` });
|
|
74
|
-
}
|
|
75
|
-
});
|
|
76
|
-
// Timeout after 15 seconds
|
|
77
|
-
setTimeout(() => {
|
|
78
|
-
ssh.kill();
|
|
79
|
-
resolve({ ok: false, error: 'connection timeout' });
|
|
80
|
-
}, 15000);
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Check remote CLI versions and warn about mismatches
|
|
85
|
-
*/
|
|
86
|
-
async function checkRemoteVersions(user, host) {
|
|
87
|
-
const commands = ['codev', 'af', 'consult', 'generate-image'];
|
|
88
|
-
const versionCmd = commands.map(cmd => `${cmd} --version 2>/dev/null || echo "${cmd}: not found"`).join(' && echo "---" && ');
|
|
89
|
-
// Wrap in bash -l to source login environment (gets PATH from .profile)
|
|
90
|
-
const wrappedCmd = `bash -l -c '${versionCmd.replace(/'/g, "'\\''")}'`;
|
|
91
|
-
return new Promise((resolve) => {
|
|
92
|
-
const ssh = spawn('ssh', [
|
|
93
|
-
'-o', 'ConnectTimeout=5',
|
|
94
|
-
'-o', 'BatchMode=yes',
|
|
95
|
-
`${user}@${host}`,
|
|
96
|
-
wrappedCmd,
|
|
97
|
-
], {
|
|
98
|
-
stdio: ['ignore', 'pipe', 'pipe'],
|
|
99
|
-
});
|
|
100
|
-
let stdout = '';
|
|
101
|
-
ssh.stdout?.on('data', (data) => {
|
|
102
|
-
stdout += data.toString();
|
|
103
|
-
});
|
|
104
|
-
ssh.on('error', () => {
|
|
105
|
-
// SSH failed, skip version check
|
|
106
|
-
resolve();
|
|
107
|
-
});
|
|
108
|
-
ssh.on('exit', (code) => {
|
|
109
|
-
if (code !== 0) {
|
|
110
|
-
// SSH failed or commands failed, skip version check
|
|
111
|
-
resolve();
|
|
112
|
-
return;
|
|
113
|
-
}
|
|
114
|
-
// Parse output: each command's version separated by "---"
|
|
115
|
-
const outputs = stdout.split('---').map(s => s.trim());
|
|
116
|
-
const mismatches = [];
|
|
117
|
-
for (let i = 0; i < commands.length && i < outputs.length; i++) {
|
|
118
|
-
const output = outputs[i];
|
|
119
|
-
const cmd = commands[i];
|
|
120
|
-
if (output.includes('not found')) {
|
|
121
|
-
mismatches.push(`${cmd}: not installed on remote`);
|
|
122
|
-
}
|
|
123
|
-
else {
|
|
124
|
-
// Extract version number (e.g., "1.5.3" from "@cluesmith/codev@1.5.3" or "1.5.3")
|
|
125
|
-
const versionMatch = output.match(/(\d+\.\d+\.\d+)/);
|
|
126
|
-
if (versionMatch) {
|
|
127
|
-
const remoteVer = versionMatch[1];
|
|
128
|
-
if (remoteVer !== localVersion) {
|
|
129
|
-
mismatches.push(`${cmd}: local ${localVersion}, remote ${remoteVer}`);
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
if (mismatches.length > 0) {
|
|
135
|
-
logger.blank();
|
|
136
|
-
logger.warn('Version mismatch detected:');
|
|
137
|
-
for (const m of mismatches) {
|
|
138
|
-
logger.warn(` ${m}`);
|
|
139
|
-
}
|
|
140
|
-
logger.info('Consider updating: npm install -g @cluesmith/codev');
|
|
141
|
-
logger.blank();
|
|
142
|
-
}
|
|
143
|
-
resolve();
|
|
144
|
-
});
|
|
145
|
-
// Timeout after 10 seconds
|
|
146
|
-
setTimeout(() => {
|
|
147
|
-
ssh.kill();
|
|
148
|
-
resolve();
|
|
149
|
-
}, 10000);
|
|
150
|
-
});
|
|
151
|
-
}
|
|
152
|
-
/**
|
|
153
|
-
* Start Agent Farm on a remote machine via SSH
|
|
154
|
-
*/
|
|
155
|
-
async function startRemote(options) {
|
|
156
|
-
const config = getConfig();
|
|
157
|
-
const { user, host, remotePath } = parseRemote(options.remote);
|
|
158
|
-
// Clean up stale port allocations (handles machine restarts, killed processes)
|
|
159
|
-
cleanupStaleEntries();
|
|
160
|
-
// Determine local port - use specified, or get from port registry
|
|
161
|
-
// Use a synthetic path for remote connections so they get their own port block
|
|
162
|
-
let localPort;
|
|
163
|
-
if (options.port) {
|
|
164
|
-
localPort = Number(options.port);
|
|
165
|
-
}
|
|
166
|
-
else {
|
|
167
|
-
// Register with a unique key for this remote target
|
|
168
|
-
const remoteKey = `remote:${user}@${host}:${remotePath || 'default'}`;
|
|
169
|
-
localPort = getPortBlock(remoteKey);
|
|
170
|
-
}
|
|
171
|
-
logger.header('Starting Remote Agent Farm');
|
|
172
|
-
logger.kv('Host', `${user}@${host}`);
|
|
173
|
-
if (remotePath)
|
|
174
|
-
logger.kv('Path', remotePath);
|
|
175
|
-
logger.kv('Local Port', localPort);
|
|
176
|
-
// Build the remote command
|
|
177
|
-
// If no path specified, use the current directory name to find project on remote
|
|
178
|
-
const projectName = basename(config.projectRoot);
|
|
179
|
-
const cdCommand = remotePath
|
|
180
|
-
? `cd ${remotePath}`
|
|
181
|
-
: `cd ${projectName} 2>/dev/null || cd ~/${projectName} 2>/dev/null`;
|
|
182
|
-
// Always pass --no-browser to remote since we open browser locally
|
|
183
|
-
// Wrap in bash -l to source login environment (gets PATH from .profile)
|
|
184
|
-
const innerCommand = `${cdCommand} && af dash start --port ${localPort} --no-browser`;
|
|
185
|
-
const remoteCommand = `bash -l -c '${innerCommand.replace(/'/g, "'\\''")}'`;
|
|
186
|
-
// Check passwordless SSH is configured
|
|
187
|
-
logger.info('Checking SSH connection...');
|
|
188
|
-
const sshResult = await checkPasswordlessSSH(user, host);
|
|
189
|
-
if (!sshResult.ok) {
|
|
190
|
-
logger.blank();
|
|
191
|
-
fatal(`Cannot connect to ${user}@${host}: ${sshResult.error}
|
|
192
|
-
|
|
193
|
-
Passwordless SSH is required for remote access. Set it up with:
|
|
194
|
-
ssh-copy-id ${user}@${host}
|
|
195
|
-
|
|
196
|
-
Then verify with:
|
|
197
|
-
ssh ${user}@${host} "echo connected"`);
|
|
198
|
-
}
|
|
199
|
-
// Check remote CLI versions (non-blocking warning)
|
|
200
|
-
logger.info('Checking remote versions...');
|
|
201
|
-
await checkRemoteVersions(user, host);
|
|
202
|
-
logger.info('Connecting via SSH...');
|
|
203
|
-
// Spawn SSH with port forwarding, -f backgrounds after auth
|
|
204
|
-
const sshArgs = [
|
|
205
|
-
'-f', // Background after authentication
|
|
206
|
-
'-L', `${localPort}:localhost:${localPort}`,
|
|
207
|
-
'-o', 'ServerAliveInterval=30',
|
|
208
|
-
'-o', 'ServerAliveCountMax=3',
|
|
209
|
-
'-o', 'ExitOnForwardFailure=yes',
|
|
210
|
-
`${user}@${host}`,
|
|
211
|
-
remoteCommand,
|
|
212
|
-
];
|
|
213
|
-
const result = spawnSync('ssh', sshArgs, {
|
|
214
|
-
stdio: 'inherit',
|
|
215
|
-
});
|
|
216
|
-
if (result.status !== 0) {
|
|
217
|
-
logger.error('SSH connection failed');
|
|
218
|
-
process.exit(1);
|
|
219
|
-
}
|
|
220
|
-
logger.blank();
|
|
221
|
-
logger.success('Remote Agent Farm connected!');
|
|
222
|
-
logger.kv('Dashboard', `http://localhost:${localPort}`);
|
|
223
|
-
logger.info('SSH tunnel running in background');
|
|
224
|
-
if (!options.noBrowser) {
|
|
225
|
-
await openBrowser(`http://localhost:${localPort}`);
|
|
226
|
-
}
|
|
227
|
-
// Find and report the SSH PID for cleanup
|
|
228
|
-
const pgrep = spawnSync('pgrep', ['-f', `ssh.*${localPort}:localhost:${localPort}.*${host}`]);
|
|
229
|
-
if (pgrep.status === 0) {
|
|
230
|
-
const pid = pgrep.stdout.toString().trim().split('\n')[0];
|
|
231
|
-
logger.info(`To disconnect: kill ${pid}`);
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
12
|
/**
|
|
235
13
|
* Default tower port
|
|
236
14
|
*/
|
|
@@ -238,12 +16,12 @@ const DEFAULT_TOWER_PORT = 4100;
|
|
|
238
16
|
/**
|
|
239
17
|
* Start via tower API (Phase 3 - Spec 0090)
|
|
240
18
|
*
|
|
241
|
-
* This is the
|
|
19
|
+
* This is the way to start projects:
|
|
242
20
|
* 1. Ensure tower is running
|
|
243
21
|
* 2. Call tower's activate API
|
|
244
22
|
* 3. Open browser to tower URL
|
|
245
23
|
*/
|
|
246
|
-
async function
|
|
24
|
+
export async function start(options = {}) {
|
|
247
25
|
const config = getConfig();
|
|
248
26
|
const projectPath = config.projectRoot;
|
|
249
27
|
logger.header('Starting Agent Farm');
|
|
@@ -279,22 +57,5 @@ async function startViaTower(options) {
|
|
|
279
57
|
else if (towerRunning) {
|
|
280
58
|
logger.info('Tower already running — project visible in your browser.');
|
|
281
59
|
}
|
|
282
|
-
// For remote mode, keep process alive
|
|
283
|
-
if (options.noBrowser) {
|
|
284
|
-
logger.info('Keeping connection alive for remote tunnel...');
|
|
285
|
-
// Block forever - SSH disconnect will kill us
|
|
286
|
-
await new Promise(() => { });
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
/**
|
|
290
|
-
* Start the architect dashboard
|
|
291
|
-
*/
|
|
292
|
-
export async function start(options = {}) {
|
|
293
|
-
// Handle remote mode
|
|
294
|
-
if (options.remote) {
|
|
295
|
-
return startRemote(options);
|
|
296
|
-
}
|
|
297
|
-
// Use tower API for local starts (Phase 3 - Spec 0090)
|
|
298
|
-
return startViaTower(options);
|
|
299
60
|
}
|
|
300
61
|
//# sourceMappingURL=start.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../../src/agent-farm/commands/start.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../../src/agent-farm/commands/start.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC;;GAEG;AACH,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAEhC;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,UAAwB,EAAE;IACpD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;IAEvC,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;IACrC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAElC,sBAAsB;IACtB,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,kBAAkB,CAAC,CAAC;IAEnD,4BAA4B;IAC5B,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;IAE9C,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QACxC,MAAM,UAAU,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAE3D,0CAA0C;QAC1C,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,iCAAiC;IACjC,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;IAEzD,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,KAAK,CAAC,+BAA+B,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,MAAM,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;IACjE,CAAC;IAED,6BAA6B;IAC7B,MAAM,UAAU,GAAG,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IAErD,MAAM,CAAC,KAAK,EAAE,CAAC;IACf,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACtC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IAEnC,+EAA+E;IAC/E,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,CAAC,YAAY,EAAE,CAAC;QACxC,MAAM,WAAW,CAAC,UAAU,CAAC,CAAC;IAChC,CAAC;SAAM,IAAI,YAAY,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/commands/status.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/commands/status.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAaH;;GAEG;AACH,wBAAsB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAkJ5C"}
|
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { loadState } from '../state.js';
|
|
7
7
|
import { logger } from '../utils/logger.js';
|
|
8
|
-
import { isProcessRunning } from '../utils/shell.js';
|
|
9
8
|
import { getConfig } from '../utils/config.js';
|
|
10
9
|
import { TowerClient } from '../lib/tower-client.js';
|
|
11
10
|
import chalk from 'chalk';
|
|
@@ -39,7 +38,6 @@ export async function status() {
|
|
|
39
38
|
const statusText = projectStatus.active ? chalk.green('active') : chalk.gray('inactive');
|
|
40
39
|
logger.kv('Project', projectStatus.name);
|
|
41
40
|
logger.kv(' Status', statusText);
|
|
42
|
-
logger.kv(' Port', projectStatus.basePort);
|
|
43
41
|
logger.kv(' Terminals', projectStatus.terminals.length);
|
|
44
42
|
if (projectStatus.terminals.length > 0) {
|
|
45
43
|
logger.blank();
|
|
@@ -50,14 +48,21 @@ export async function status() {
|
|
|
50
48
|
}
|
|
51
49
|
}
|
|
52
50
|
if (projectStatus.gateStatus?.hasGate) {
|
|
51
|
+
const gate = projectStatus.gateStatus;
|
|
52
|
+
let waitInfo = '';
|
|
53
|
+
if (gate.requestedAt) {
|
|
54
|
+
const elapsed = Date.now() - new Date(gate.requestedAt).getTime();
|
|
55
|
+
const mins = Math.floor(elapsed / 60_000);
|
|
56
|
+
waitInfo = mins > 0 ? ` (waiting ${mins}m)` : ' (waiting <1m)';
|
|
57
|
+
}
|
|
53
58
|
logger.blank();
|
|
54
|
-
logger.warn(`
|
|
59
|
+
logger.warn(` Builder ${gate.builderId} ${chalk.yellow('blocked')} ${gate.gateName}${waitInfo} → porch approve ${gate.builderId} ${gate.gateName}`);
|
|
55
60
|
}
|
|
56
61
|
return;
|
|
57
62
|
}
|
|
58
63
|
// Project not found in tower, show "not active"
|
|
59
64
|
logger.kv('Project', chalk.gray('not active in tower'));
|
|
60
|
-
logger.info(`Run 'af
|
|
65
|
+
logger.info(`Run 'af tower start' to activate this project`);
|
|
61
66
|
return;
|
|
62
67
|
}
|
|
63
68
|
// Tower not running - show message and fall back to local state
|
|
@@ -68,9 +73,7 @@ export async function status() {
|
|
|
68
73
|
const state = loadState();
|
|
69
74
|
// Architect status
|
|
70
75
|
if (state.architect) {
|
|
71
|
-
|
|
72
|
-
const statusText = running ? chalk.green('running') : chalk.red('stopped');
|
|
73
|
-
logger.kv('Architect', `${statusText} (PID: ${state.architect.pid}, port: ${state.architect.port})`);
|
|
76
|
+
logger.kv('Architect', chalk.green('registered'));
|
|
74
77
|
logger.kv(' Command', state.architect.cmd);
|
|
75
78
|
logger.kv(' Started', state.architect.startedAt);
|
|
76
79
|
}
|
|
@@ -81,14 +84,11 @@ export async function status() {
|
|
|
81
84
|
// Builders
|
|
82
85
|
if (state.builders.length > 0) {
|
|
83
86
|
logger.info('Builders:');
|
|
84
|
-
const widths = [12, 20, 10, 12, 10
|
|
85
|
-
logger.row(['ID', 'Name', 'Type', 'Status', 'Phase'
|
|
86
|
-
logger.row(['──', '────', '────', '──────', '─────'
|
|
87
|
+
const widths = [12, 20, 10, 12, 10];
|
|
88
|
+
logger.row(['ID', 'Name', 'Type', 'Status', 'Phase'], widths);
|
|
89
|
+
logger.row(['──', '────', '────', '──────', '─────'], widths);
|
|
87
90
|
for (const builder of state.builders) {
|
|
88
|
-
|
|
89
|
-
const running = builder.pid > 0
|
|
90
|
-
? await isProcessRunning(builder.pid)
|
|
91
|
-
: !!(builder.tmuxSession || builder.terminalId);
|
|
91
|
+
const running = !!(builder.tmuxSession || builder.terminalId);
|
|
92
92
|
const statusColor = getStatusColor(builder.status, running);
|
|
93
93
|
const typeColor = getTypeColor(builder.type || 'spec');
|
|
94
94
|
logger.row([
|
|
@@ -97,7 +97,6 @@ export async function status() {
|
|
|
97
97
|
typeColor(builder.type || 'spec'),
|
|
98
98
|
statusColor(builder.status),
|
|
99
99
|
builder.phase.substring(0, 8),
|
|
100
|
-
builder.port > 0 ? String(builder.port) : '-',
|
|
101
100
|
], widths);
|
|
102
101
|
}
|
|
103
102
|
}
|
|
@@ -108,16 +107,13 @@ export async function status() {
|
|
|
108
107
|
// Utils
|
|
109
108
|
if (state.utils.length > 0) {
|
|
110
109
|
logger.info('Utility Terminals:');
|
|
111
|
-
const widths = [8, 20
|
|
112
|
-
logger.row(['ID', 'Name'
|
|
113
|
-
logger.row(['──', '────'
|
|
110
|
+
const widths = [8, 20];
|
|
111
|
+
logger.row(['ID', 'Name'], widths);
|
|
112
|
+
logger.row(['──', '────'], widths);
|
|
114
113
|
for (const util of state.utils) {
|
|
115
|
-
const running = await isProcessRunning(util.pid);
|
|
116
|
-
const name = running ? util.name : chalk.gray(util.name + ' (stopped)');
|
|
117
114
|
logger.row([
|
|
118
115
|
util.id,
|
|
119
|
-
name.substring(0, 18),
|
|
120
|
-
String(util.port),
|
|
116
|
+
util.name.substring(0, 18),
|
|
121
117
|
], widths);
|
|
122
118
|
}
|
|
123
119
|
}
|
|
@@ -128,16 +124,13 @@ export async function status() {
|
|
|
128
124
|
// Annotations
|
|
129
125
|
if (state.annotations.length > 0) {
|
|
130
126
|
logger.info('Annotations:');
|
|
131
|
-
const widths = [8, 30
|
|
132
|
-
logger.row(['ID', 'File'
|
|
133
|
-
logger.row(['──', '────'
|
|
127
|
+
const widths = [8, 30];
|
|
128
|
+
logger.row(['ID', 'File'], widths);
|
|
129
|
+
logger.row(['──', '────'], widths);
|
|
134
130
|
for (const annotation of state.annotations) {
|
|
135
|
-
const running = await isProcessRunning(annotation.pid);
|
|
136
|
-
const file = running ? annotation.file : chalk.gray(annotation.file + ' (stopped)');
|
|
137
131
|
logger.row([
|
|
138
132
|
annotation.id,
|
|
139
|
-
file.substring(0, 28),
|
|
140
|
-
String(annotation.port),
|
|
133
|
+
annotation.file.substring(0, 28),
|
|
141
134
|
], widths);
|
|
142
135
|
}
|
|
143
136
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/agent-farm/commands/status.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/agent-farm/commands/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/commands/stop.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/commands/stop.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAqBH;;;;;GAKG;AACH,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAmG1C"}
|