@cluesmith/codev 1.1.0
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/bin/af.js +8 -0
- package/bin/codev.js +4 -0
- package/bin/consult.js +7 -0
- package/dist/agent-farm/cli.d.ts +11 -0
- package/dist/agent-farm/cli.d.ts.map +1 -0
- package/dist/agent-farm/cli.js +359 -0
- package/dist/agent-farm/cli.js.map +1 -0
- package/dist/agent-farm/commands/cleanup.d.ts +12 -0
- package/dist/agent-farm/commands/cleanup.d.ts.map +1 -0
- package/dist/agent-farm/commands/cleanup.js +154 -0
- package/dist/agent-farm/commands/cleanup.js.map +1 -0
- package/dist/agent-farm/commands/db.d.ts +38 -0
- package/dist/agent-farm/commands/db.d.ts.map +1 -0
- package/dist/agent-farm/commands/db.js +133 -0
- package/dist/agent-farm/commands/db.js.map +1 -0
- package/dist/agent-farm/commands/index.d.ts +11 -0
- package/dist/agent-farm/commands/index.d.ts.map +1 -0
- package/dist/agent-farm/commands/index.js +11 -0
- package/dist/agent-farm/commands/index.js.map +1 -0
- package/dist/agent-farm/commands/open.d.ts +15 -0
- package/dist/agent-farm/commands/open.d.ts.map +1 -0
- package/dist/agent-farm/commands/open.js +118 -0
- package/dist/agent-farm/commands/open.js.map +1 -0
- package/dist/agent-farm/commands/rename.d.ts +13 -0
- package/dist/agent-farm/commands/rename.d.ts.map +1 -0
- package/dist/agent-farm/commands/rename.js +33 -0
- package/dist/agent-farm/commands/rename.js.map +1 -0
- package/dist/agent-farm/commands/send.d.ts +9 -0
- package/dist/agent-farm/commands/send.d.ts.map +1 -0
- package/dist/agent-farm/commands/send.js +282 -0
- package/dist/agent-farm/commands/send.js.map +1 -0
- package/dist/agent-farm/commands/spawn.d.ts +15 -0
- package/dist/agent-farm/commands/spawn.d.ts.map +1 -0
- package/dist/agent-farm/commands/spawn.js +575 -0
- package/dist/agent-farm/commands/spawn.js.map +1 -0
- package/dist/agent-farm/commands/start.d.ts +9 -0
- package/dist/agent-farm/commands/start.d.ts.map +1 -0
- package/dist/agent-farm/commands/start.js +175 -0
- package/dist/agent-farm/commands/start.js.map +1 -0
- package/dist/agent-farm/commands/status.d.ts +8 -0
- package/dist/agent-farm/commands/status.d.ts.map +1 -0
- package/dist/agent-farm/commands/status.js +123 -0
- package/dist/agent-farm/commands/status.js.map +1 -0
- package/dist/agent-farm/commands/stop.d.ts +8 -0
- package/dist/agent-farm/commands/stop.d.ts.map +1 -0
- package/dist/agent-farm/commands/stop.js +76 -0
- package/dist/agent-farm/commands/stop.js.map +1 -0
- package/dist/agent-farm/commands/tower.d.ts +19 -0
- package/dist/agent-farm/commands/tower.d.ts.map +1 -0
- package/dist/agent-farm/commands/tower.js +125 -0
- package/dist/agent-farm/commands/tower.js.map +1 -0
- package/dist/agent-farm/commands/tutorial.d.ts +10 -0
- package/dist/agent-farm/commands/tutorial.d.ts.map +1 -0
- package/dist/agent-farm/commands/tutorial.js +49 -0
- package/dist/agent-farm/commands/tutorial.js.map +1 -0
- package/dist/agent-farm/commands/util.d.ts +15 -0
- package/dist/agent-farm/commands/util.d.ts.map +1 -0
- package/dist/agent-farm/commands/util.js +108 -0
- package/dist/agent-farm/commands/util.js.map +1 -0
- package/dist/agent-farm/db/errors.d.ts +17 -0
- package/dist/agent-farm/db/errors.d.ts.map +1 -0
- package/dist/agent-farm/db/errors.js +46 -0
- package/dist/agent-farm/db/errors.js.map +1 -0
- package/dist/agent-farm/db/index.d.ts +41 -0
- package/dist/agent-farm/db/index.d.ts.map +1 -0
- package/dist/agent-farm/db/index.js +168 -0
- package/dist/agent-farm/db/index.js.map +1 -0
- package/dist/agent-farm/db/migrate.d.ts +15 -0
- package/dist/agent-farm/db/migrate.d.ts.map +1 -0
- package/dist/agent-farm/db/migrate.js +137 -0
- package/dist/agent-farm/db/migrate.js.map +1 -0
- package/dist/agent-farm/db/schema.d.ts +16 -0
- package/dist/agent-farm/db/schema.d.ts.map +1 -0
- package/dist/agent-farm/db/schema.js +103 -0
- package/dist/agent-farm/db/schema.js.map +1 -0
- package/dist/agent-farm/db/types.d.ts +87 -0
- package/dist/agent-farm/db/types.d.ts.map +1 -0
- package/dist/agent-farm/db/types.js +65 -0
- package/dist/agent-farm/db/types.js.map +1 -0
- package/dist/agent-farm/index.d.ts +7 -0
- package/dist/agent-farm/index.d.ts.map +1 -0
- package/dist/agent-farm/index.js +373 -0
- package/dist/agent-farm/index.js.map +1 -0
- package/dist/agent-farm/servers/annotate-server.d.ts +9 -0
- package/dist/agent-farm/servers/annotate-server.d.ts.map +1 -0
- package/dist/agent-farm/servers/annotate-server.js +136 -0
- package/dist/agent-farm/servers/annotate-server.js.map +1 -0
- package/dist/agent-farm/servers/dashboard-server.d.ts +9 -0
- package/dist/agent-farm/servers/dashboard-server.d.ts.map +1 -0
- package/dist/agent-farm/servers/dashboard-server.js +939 -0
- package/dist/agent-farm/servers/dashboard-server.js.map +1 -0
- package/dist/agent-farm/servers/tower-server.d.ts +9 -0
- package/dist/agent-farm/servers/tower-server.d.ts.map +1 -0
- package/dist/agent-farm/servers/tower-server.js +463 -0
- package/dist/agent-farm/servers/tower-server.js.map +1 -0
- package/dist/agent-farm/state.d.ts +93 -0
- package/dist/agent-farm/state.d.ts.map +1 -0
- package/dist/agent-farm/state.js +253 -0
- package/dist/agent-farm/state.js.map +1 -0
- package/dist/agent-farm/tutorial/index.d.ts +8 -0
- package/dist/agent-farm/tutorial/index.d.ts.map +1 -0
- package/dist/agent-farm/tutorial/index.js +8 -0
- package/dist/agent-farm/tutorial/index.js.map +1 -0
- package/dist/agent-farm/tutorial/prompts.d.ts +57 -0
- package/dist/agent-farm/tutorial/prompts.d.ts.map +1 -0
- package/dist/agent-farm/tutorial/prompts.js +147 -0
- package/dist/agent-farm/tutorial/prompts.js.map +1 -0
- package/dist/agent-farm/tutorial/runner.d.ts +52 -0
- package/dist/agent-farm/tutorial/runner.d.ts.map +1 -0
- package/dist/agent-farm/tutorial/runner.js +204 -0
- package/dist/agent-farm/tutorial/runner.js.map +1 -0
- package/dist/agent-farm/tutorial/state.d.ts +26 -0
- package/dist/agent-farm/tutorial/state.d.ts.map +1 -0
- package/dist/agent-farm/tutorial/state.js +89 -0
- package/dist/agent-farm/tutorial/state.js.map +1 -0
- package/dist/agent-farm/tutorial/steps/first-spec.d.ts +7 -0
- package/dist/agent-farm/tutorial/steps/first-spec.d.ts.map +1 -0
- package/dist/agent-farm/tutorial/steps/first-spec.js +136 -0
- package/dist/agent-farm/tutorial/steps/first-spec.js.map +1 -0
- package/dist/agent-farm/tutorial/steps/implementation.d.ts +7 -0
- package/dist/agent-farm/tutorial/steps/implementation.d.ts.map +1 -0
- package/dist/agent-farm/tutorial/steps/implementation.js +76 -0
- package/dist/agent-farm/tutorial/steps/implementation.js.map +1 -0
- package/dist/agent-farm/tutorial/steps/index.d.ts +10 -0
- package/dist/agent-farm/tutorial/steps/index.d.ts.map +1 -0
- package/dist/agent-farm/tutorial/steps/index.js +10 -0
- package/dist/agent-farm/tutorial/steps/index.js.map +1 -0
- package/dist/agent-farm/tutorial/steps/planning.d.ts +7 -0
- package/dist/agent-farm/tutorial/steps/planning.d.ts.map +1 -0
- package/dist/agent-farm/tutorial/steps/planning.js +143 -0
- package/dist/agent-farm/tutorial/steps/planning.js.map +1 -0
- package/dist/agent-farm/tutorial/steps/review.d.ts +7 -0
- package/dist/agent-farm/tutorial/steps/review.d.ts.map +1 -0
- package/dist/agent-farm/tutorial/steps/review.js +78 -0
- package/dist/agent-farm/tutorial/steps/review.js.map +1 -0
- package/dist/agent-farm/tutorial/steps/setup.d.ts +7 -0
- package/dist/agent-farm/tutorial/steps/setup.d.ts.map +1 -0
- package/dist/agent-farm/tutorial/steps/setup.js +126 -0
- package/dist/agent-farm/tutorial/steps/setup.js.map +1 -0
- package/dist/agent-farm/tutorial/steps/welcome.d.ts +7 -0
- package/dist/agent-farm/tutorial/steps/welcome.d.ts.map +1 -0
- package/dist/agent-farm/tutorial/steps/welcome.js +50 -0
- package/dist/agent-farm/tutorial/steps/welcome.js.map +1 -0
- package/dist/agent-farm/types.d.ts +131 -0
- package/dist/agent-farm/types.d.ts.map +1 -0
- package/dist/agent-farm/types.js +5 -0
- package/dist/agent-farm/types.js.map +1 -0
- package/dist/agent-farm/utils/config.d.ts +27 -0
- package/dist/agent-farm/utils/config.d.ts.map +1 -0
- package/dist/agent-farm/utils/config.js +242 -0
- package/dist/agent-farm/utils/config.js.map +1 -0
- package/dist/agent-farm/utils/deps.d.ts +51 -0
- package/dist/agent-farm/utils/deps.d.ts.map +1 -0
- package/dist/agent-farm/utils/deps.js +194 -0
- package/dist/agent-farm/utils/deps.js.map +1 -0
- package/dist/agent-farm/utils/index.d.ts +6 -0
- package/dist/agent-farm/utils/index.d.ts.map +1 -0
- package/dist/agent-farm/utils/index.js +6 -0
- package/dist/agent-farm/utils/index.js.map +1 -0
- package/dist/agent-farm/utils/logger.d.ts +31 -0
- package/dist/agent-farm/utils/logger.d.ts.map +1 -0
- package/dist/agent-farm/utils/logger.js +58 -0
- package/dist/agent-farm/utils/logger.js.map +1 -0
- package/dist/agent-farm/utils/orphan-handler.d.ts +27 -0
- package/dist/agent-farm/utils/orphan-handler.d.ts.map +1 -0
- package/dist/agent-farm/utils/orphan-handler.js +127 -0
- package/dist/agent-farm/utils/orphan-handler.js.map +1 -0
- package/dist/agent-farm/utils/port-registry.d.ts +58 -0
- package/dist/agent-farm/utils/port-registry.d.ts.map +1 -0
- package/dist/agent-farm/utils/port-registry.js +149 -0
- package/dist/agent-farm/utils/port-registry.js.map +1 -0
- package/dist/agent-farm/utils/shell.d.ts +45 -0
- package/dist/agent-farm/utils/shell.d.ts.map +1 -0
- package/dist/agent-farm/utils/shell.js +120 -0
- package/dist/agent-farm/utils/shell.js.map +1 -0
- package/dist/cli.d.ts +10 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +160 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/adopt.d.ts +12 -0
- package/dist/commands/adopt.d.ts.map +1 -0
- package/dist/commands/adopt.js +178 -0
- package/dist/commands/adopt.js.map +1 -0
- package/dist/commands/consult/index.d.ts +17 -0
- package/dist/commands/consult/index.d.ts.map +1 -0
- package/dist/commands/consult/index.js +405 -0
- package/dist/commands/consult/index.js.map +1 -0
- package/dist/commands/doctor.d.ts +10 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +346 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/init.d.ts +12 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +167 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/tower.d.ts +16 -0
- package/dist/commands/tower.d.ts.map +1 -0
- package/dist/commands/tower.js +21 -0
- package/dist/commands/tower.js.map +1 -0
- package/dist/commands/update.d.ts +13 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +137 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/lib/templates.d.ts +57 -0
- package/dist/lib/templates.d.ts.map +1 -0
- package/dist/lib/templates.js +205 -0
- package/dist/lib/templates.js.map +1 -0
- package/package.json +55 -0
- package/templates/AGENTS.md +49 -0
- package/templates/CLAUDE.md +47 -0
- package/templates/DEPENDENCIES.md +344 -0
- package/templates/agents/architecture-documenter.md +189 -0
- package/templates/agents/codev-updater.md +276 -0
- package/templates/agents/spider-protocol-updater.md +118 -0
- package/templates/annotate.html +903 -0
- package/templates/bin/agent-farm +18 -0
- package/templates/bin/annotate-server.js +140 -0
- package/templates/bin/codev-doctor +335 -0
- package/templates/builders.md +30 -0
- package/templates/config.json +7 -0
- package/templates/dashboard-split.html +1679 -0
- package/templates/dashboard.html +149 -0
- package/templates/plans/.gitkeep +0 -0
- package/templates/protocols/experiment/protocol.md +229 -0
- package/templates/protocols/experiment/templates/notes.md +97 -0
- package/templates/protocols/maintain/protocol.md +235 -0
- package/templates/protocols/spider/protocol.md +639 -0
- package/templates/protocols/spider/templates/plan.md +169 -0
- package/templates/protocols/spider/templates/review.md +207 -0
- package/templates/protocols/spider/templates/spec.md +140 -0
- package/templates/protocols/spider-solo/protocol.md +619 -0
- package/templates/protocols/spider-solo/templates/plan.md +169 -0
- package/templates/protocols/spider-solo/templates/review.md +207 -0
- package/templates/protocols/spider-solo/templates/spec.md +140 -0
- package/templates/protocols/tick/protocol.md +250 -0
- package/templates/protocols/tick/templates/plan.md +67 -0
- package/templates/protocols/tick/templates/review.md +90 -0
- package/templates/protocols/tick/templates/spec.md +61 -0
- package/templates/reviews/.gitkeep +0 -0
- package/templates/roles/architect.md +230 -0
- package/templates/roles/builder.md +175 -0
- package/templates/roles/consultant.md +27 -0
- package/templates/specs/.gitkeep +0 -0
- package/templates/templates/projectlist.md +129 -0
- package/templates/tower.html +1032 -0
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration management for Agent Farm
|
|
3
|
+
*/
|
|
4
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
5
|
+
import { resolve, dirname } from 'node:path';
|
|
6
|
+
import { fileURLToPath } from 'node:url';
|
|
7
|
+
import { execSync } from 'node:child_process';
|
|
8
|
+
import { getProjectPorts } from './port-registry.js';
|
|
9
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
10
|
+
const __dirname = dirname(__filename);
|
|
11
|
+
// Default commands
|
|
12
|
+
const DEFAULT_COMMANDS = {
|
|
13
|
+
architect: 'claude',
|
|
14
|
+
builder: 'claude',
|
|
15
|
+
shell: 'bash',
|
|
16
|
+
};
|
|
17
|
+
// CLI overrides (set via setCliOverrides)
|
|
18
|
+
let cliOverrides = {};
|
|
19
|
+
/**
|
|
20
|
+
* Check if we're in a git worktree and return the main repo root if so
|
|
21
|
+
*/
|
|
22
|
+
function getMainRepoFromWorktree(dir) {
|
|
23
|
+
try {
|
|
24
|
+
// Get the common git directory (same for main repo and worktrees)
|
|
25
|
+
const gitCommonDir = execSync('git rev-parse --git-common-dir', {
|
|
26
|
+
cwd: dir,
|
|
27
|
+
encoding: 'utf-8',
|
|
28
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
29
|
+
}).trim();
|
|
30
|
+
// If it's just '.git', we're in the main repo
|
|
31
|
+
if (gitCommonDir === '.git') {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
// We're in a worktree - gitCommonDir points to main repo's .git directory
|
|
35
|
+
// e.g., /path/to/main/repo/.git or /path/to/main/repo/.git/worktrees/...
|
|
36
|
+
// The main repo is the parent of .git
|
|
37
|
+
const mainGitDir = resolve(dir, gitCommonDir);
|
|
38
|
+
const mainRepo = dirname(mainGitDir.replace(/\/worktrees\/[^/]+$/, ''));
|
|
39
|
+
return mainRepo;
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
// Not in a git repo
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Find the project root by looking for codev/ directory
|
|
48
|
+
* Handles git worktrees by finding the main repository
|
|
49
|
+
*/
|
|
50
|
+
function findProjectRoot(startDir = process.cwd()) {
|
|
51
|
+
// First check if we're in a git worktree
|
|
52
|
+
const mainRepo = getMainRepoFromWorktree(startDir);
|
|
53
|
+
if (mainRepo && existsSync(resolve(mainRepo, 'codev'))) {
|
|
54
|
+
return mainRepo;
|
|
55
|
+
}
|
|
56
|
+
let dir = startDir;
|
|
57
|
+
while (dir !== '/') {
|
|
58
|
+
// Check for codev/ directory (indicates project using codev)
|
|
59
|
+
if (existsSync(resolve(dir, 'codev'))) {
|
|
60
|
+
return dir;
|
|
61
|
+
}
|
|
62
|
+
// Check for .git as fallback
|
|
63
|
+
if (existsSync(resolve(dir, '.git'))) {
|
|
64
|
+
return dir;
|
|
65
|
+
}
|
|
66
|
+
dir = dirname(dir);
|
|
67
|
+
}
|
|
68
|
+
// Default to current directory
|
|
69
|
+
return startDir;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Get the agent-farm templates directory
|
|
73
|
+
* Templates are bundled with agent-farm, not in project codev/ directory
|
|
74
|
+
*/
|
|
75
|
+
function getTemplatesDir() {
|
|
76
|
+
// 1. Try relative to compiled output (dist/utils/ -> templates/)
|
|
77
|
+
const pkgPath = resolve(__dirname, '../templates');
|
|
78
|
+
if (existsSync(pkgPath)) {
|
|
79
|
+
return pkgPath;
|
|
80
|
+
}
|
|
81
|
+
// 2. Try relative to source (src/utils/ -> templates/)
|
|
82
|
+
const devPath = resolve(__dirname, '../../templates');
|
|
83
|
+
if (existsSync(devPath)) {
|
|
84
|
+
return devPath;
|
|
85
|
+
}
|
|
86
|
+
// Return the expected path even if not found (servers handle their own template lookup)
|
|
87
|
+
return devPath;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Get the servers directory (compiled TypeScript servers)
|
|
91
|
+
*/
|
|
92
|
+
function getServersDir() {
|
|
93
|
+
// Servers are compiled to dist/servers/
|
|
94
|
+
const devPath = resolve(__dirname, '../servers');
|
|
95
|
+
if (existsSync(devPath)) {
|
|
96
|
+
return devPath;
|
|
97
|
+
}
|
|
98
|
+
// In npm package, they're alongside other compiled files
|
|
99
|
+
return resolve(__dirname, './servers');
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Get the roles directory (from codev/roles/ or config override)
|
|
103
|
+
*/
|
|
104
|
+
function getRolesDir(projectRoot, userConfig) {
|
|
105
|
+
// Check config.json override
|
|
106
|
+
if (userConfig?.roles?.dir) {
|
|
107
|
+
const configPath = resolve(projectRoot, userConfig.roles.dir);
|
|
108
|
+
if (existsSync(configPath)) {
|
|
109
|
+
return configPath;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// Default: codev/roles/ (canonical location)
|
|
113
|
+
const rolesPath = resolve(projectRoot, 'codev/roles');
|
|
114
|
+
if (existsSync(rolesPath)) {
|
|
115
|
+
return rolesPath;
|
|
116
|
+
}
|
|
117
|
+
// Fail fast if roles not found
|
|
118
|
+
throw new Error(`Roles directory not found: ${rolesPath}`);
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Load user config.json from project root
|
|
122
|
+
*/
|
|
123
|
+
function loadUserConfig(projectRoot) {
|
|
124
|
+
const configPath = resolve(projectRoot, 'codev', 'config.json');
|
|
125
|
+
if (!existsSync(configPath)) {
|
|
126
|
+
return null;
|
|
127
|
+
}
|
|
128
|
+
try {
|
|
129
|
+
const content = readFileSync(configPath, 'utf-8');
|
|
130
|
+
return JSON.parse(content);
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
throw new Error(`Failed to parse config.json: ${error}`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Expand environment variables in a string
|
|
138
|
+
* Supports ${VAR} and $VAR syntax
|
|
139
|
+
*/
|
|
140
|
+
function expandEnvVars(str) {
|
|
141
|
+
return str.replace(/\$\{([^}]+)\}|\$([A-Za-z_][A-Za-z0-9_]*)/g, (match, braced, unbraced) => {
|
|
142
|
+
const varName = braced || unbraced;
|
|
143
|
+
return process.env[varName] || '';
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Convert command (string or array) to string with env var expansion
|
|
148
|
+
*/
|
|
149
|
+
function resolveCommand(cmd, defaultCmd) {
|
|
150
|
+
if (!cmd) {
|
|
151
|
+
return defaultCmd;
|
|
152
|
+
}
|
|
153
|
+
if (Array.isArray(cmd)) {
|
|
154
|
+
// Join array elements, handling escaping
|
|
155
|
+
return cmd.map(expandEnvVars).join(' ');
|
|
156
|
+
}
|
|
157
|
+
return expandEnvVars(cmd);
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Set CLI overrides for commands
|
|
161
|
+
* These take highest priority in the hierarchy
|
|
162
|
+
*/
|
|
163
|
+
export function setCliOverrides(overrides) {
|
|
164
|
+
cliOverrides = { ...overrides };
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Get resolved commands following hierarchy: CLI > config.json > defaults
|
|
168
|
+
*/
|
|
169
|
+
export function getResolvedCommands(projectRoot) {
|
|
170
|
+
const root = projectRoot || findProjectRoot();
|
|
171
|
+
const userConfig = loadUserConfig(root);
|
|
172
|
+
return {
|
|
173
|
+
architect: cliOverrides.architect ||
|
|
174
|
+
resolveCommand(userConfig?.shell?.architect, DEFAULT_COMMANDS.architect),
|
|
175
|
+
builder: cliOverrides.builder ||
|
|
176
|
+
resolveCommand(userConfig?.shell?.builder, DEFAULT_COMMANDS.builder),
|
|
177
|
+
shell: cliOverrides.shell ||
|
|
178
|
+
resolveCommand(userConfig?.shell?.shell, DEFAULT_COMMANDS.shell),
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
// Cached port allocation (set during initialization)
|
|
182
|
+
let cachedPorts = null;
|
|
183
|
+
/**
|
|
184
|
+
* Initialize port allocation (must be called once at startup)
|
|
185
|
+
*/
|
|
186
|
+
export function initializePorts() {
|
|
187
|
+
const projectRoot = findProjectRoot();
|
|
188
|
+
const ports = getProjectPorts(projectRoot);
|
|
189
|
+
cachedPorts = {
|
|
190
|
+
dashboardPort: ports.dashboardPort,
|
|
191
|
+
architectPort: ports.architectPort,
|
|
192
|
+
builderPortRange: ports.builderPortRange,
|
|
193
|
+
utilPortRange: ports.utilPortRange,
|
|
194
|
+
annotatePortRange: ports.annotatePortRange,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Build configuration for the current project
|
|
199
|
+
* Note: initializePorts() must be called before using this function
|
|
200
|
+
*/
|
|
201
|
+
export function getConfig() {
|
|
202
|
+
const projectRoot = findProjectRoot();
|
|
203
|
+
const codevDir = resolve(projectRoot, 'codev');
|
|
204
|
+
const userConfig = loadUserConfig(projectRoot);
|
|
205
|
+
// Use cached ports or fallback to defaults if not initialized
|
|
206
|
+
const ports = cachedPorts || {
|
|
207
|
+
dashboardPort: 4200,
|
|
208
|
+
architectPort: 4201,
|
|
209
|
+
builderPortRange: [4210, 4229],
|
|
210
|
+
utilPortRange: [4230, 4249],
|
|
211
|
+
annotatePortRange: [4250, 4269],
|
|
212
|
+
};
|
|
213
|
+
return {
|
|
214
|
+
projectRoot,
|
|
215
|
+
codevDir,
|
|
216
|
+
buildersDir: resolve(projectRoot, '.builders'),
|
|
217
|
+
stateDir: resolve(projectRoot, '.agent-farm'),
|
|
218
|
+
templatesDir: getTemplatesDir(),
|
|
219
|
+
serversDir: getServersDir(),
|
|
220
|
+
bundledRolesDir: getRolesDir(projectRoot, userConfig),
|
|
221
|
+
// Ports from global registry (prevents cross-project conflicts)
|
|
222
|
+
dashboardPort: ports.dashboardPort,
|
|
223
|
+
architectPort: ports.architectPort,
|
|
224
|
+
builderPortRange: ports.builderPortRange,
|
|
225
|
+
utilPortRange: ports.utilPortRange,
|
|
226
|
+
annotatePortRange: ports.annotatePortRange,
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Ensure required directories exist
|
|
231
|
+
*/
|
|
232
|
+
export async function ensureDirectories(config) {
|
|
233
|
+
const { mkdir } = await import('node:fs/promises');
|
|
234
|
+
const dirs = [
|
|
235
|
+
config.buildersDir,
|
|
236
|
+
config.stateDir,
|
|
237
|
+
];
|
|
238
|
+
for (const dir of dirs) {
|
|
239
|
+
await mkdir(dir, { recursive: true });
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/agent-farm/utils/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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,EAiEzC,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"}
|
|
@@ -0,0 +1,194 @@
|
|
|
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: 'tmux',
|
|
30
|
+
command: 'tmux',
|
|
31
|
+
minVersion: '3.0',
|
|
32
|
+
versionCmd: 'tmux -V',
|
|
33
|
+
versionParser: (output) => {
|
|
34
|
+
// tmux 3.3a -> 3.3
|
|
35
|
+
const match = output.match(/tmux\s+(\d+\.\d+)/);
|
|
36
|
+
return match ? match[1] : null;
|
|
37
|
+
},
|
|
38
|
+
installHint: {
|
|
39
|
+
macos: 'brew install tmux',
|
|
40
|
+
linux: 'apt install tmux',
|
|
41
|
+
},
|
|
42
|
+
required: true,
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: 'ttyd',
|
|
46
|
+
command: 'ttyd',
|
|
47
|
+
minVersion: '1.7.0',
|
|
48
|
+
versionCmd: 'ttyd --version',
|
|
49
|
+
versionParser: (output) => {
|
|
50
|
+
// ttyd version 1.7.4-... or just 1.7.4
|
|
51
|
+
const match = output.match(/(\d+\.\d+\.\d+)/);
|
|
52
|
+
return match ? match[1] : null;
|
|
53
|
+
},
|
|
54
|
+
installHint: {
|
|
55
|
+
macos: 'brew install ttyd',
|
|
56
|
+
linux: 'Build from source: https://github.com/tsl0922/ttyd',
|
|
57
|
+
},
|
|
58
|
+
required: true,
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
name: 'git',
|
|
62
|
+
command: 'git',
|
|
63
|
+
minVersion: '2.5.0',
|
|
64
|
+
versionCmd: 'git --version',
|
|
65
|
+
versionParser: (output) => {
|
|
66
|
+
// git version 2.39.2 (Apple Git-143)
|
|
67
|
+
const match = output.match(/git version (\d+\.\d+\.\d+)/);
|
|
68
|
+
return match ? match[1] : null;
|
|
69
|
+
},
|
|
70
|
+
installHint: {
|
|
71
|
+
macos: '(pre-installed on macOS)',
|
|
72
|
+
linux: 'apt install git',
|
|
73
|
+
},
|
|
74
|
+
required: true,
|
|
75
|
+
},
|
|
76
|
+
];
|
|
77
|
+
/**
|
|
78
|
+
* Compare semantic versions
|
|
79
|
+
* Returns: -1 if a < b, 0 if a == b, 1 if a > b
|
|
80
|
+
*/
|
|
81
|
+
export function compareVersions(a, b) {
|
|
82
|
+
const partsA = a.split('.').map(Number);
|
|
83
|
+
const partsB = b.split('.').map(Number);
|
|
84
|
+
for (let i = 0; i < Math.max(partsA.length, partsB.length); i++) {
|
|
85
|
+
const numA = partsA[i] || 0;
|
|
86
|
+
const numB = partsB[i] || 0;
|
|
87
|
+
if (numA < numB)
|
|
88
|
+
return -1;
|
|
89
|
+
if (numA > numB)
|
|
90
|
+
return 1;
|
|
91
|
+
}
|
|
92
|
+
return 0;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Check a single dependency
|
|
96
|
+
*/
|
|
97
|
+
export async function checkDependency(dep) {
|
|
98
|
+
const platform = process.platform === 'darwin' ? 'macos' : 'linux';
|
|
99
|
+
const installHint = dep.installHint[platform];
|
|
100
|
+
// Check if command exists
|
|
101
|
+
if (!(await commandExists(dep.command))) {
|
|
102
|
+
return {
|
|
103
|
+
name: dep.name,
|
|
104
|
+
installed: false,
|
|
105
|
+
version: null,
|
|
106
|
+
minVersion: dep.minVersion,
|
|
107
|
+
versionOk: false,
|
|
108
|
+
versionUnknown: false,
|
|
109
|
+
installHint,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
// Get version
|
|
113
|
+
let version = null;
|
|
114
|
+
let versionOk = false;
|
|
115
|
+
let versionUnknown = false;
|
|
116
|
+
try {
|
|
117
|
+
const { stdout, stderr } = await run(dep.versionCmd);
|
|
118
|
+
// Some tools output version to stderr
|
|
119
|
+
const output = stdout || stderr;
|
|
120
|
+
version = dep.versionParser(output);
|
|
121
|
+
if (version) {
|
|
122
|
+
versionOk = compareVersions(version, dep.minVersion) >= 0;
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
// Parser returned null - version unknown
|
|
126
|
+
versionUnknown = true;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
// Command exists but version check failed
|
|
131
|
+
version = 'unknown';
|
|
132
|
+
versionUnknown = true;
|
|
133
|
+
}
|
|
134
|
+
return {
|
|
135
|
+
name: dep.name,
|
|
136
|
+
installed: true,
|
|
137
|
+
version,
|
|
138
|
+
minVersion: dep.minVersion,
|
|
139
|
+
versionOk,
|
|
140
|
+
versionUnknown,
|
|
141
|
+
installHint,
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Check all core dependencies required for Agent Farm
|
|
146
|
+
*
|
|
147
|
+
* @param exitOnFailure - If true, calls fatal() on missing required deps (default: true)
|
|
148
|
+
* @returns Array of check results
|
|
149
|
+
*/
|
|
150
|
+
export async function checkCoreDependencies(exitOnFailure = true) {
|
|
151
|
+
const results = [];
|
|
152
|
+
const failures = [];
|
|
153
|
+
const warnings = [];
|
|
154
|
+
for (const dep of CORE_DEPENDENCIES) {
|
|
155
|
+
const result = await checkDependency(dep);
|
|
156
|
+
results.push(result);
|
|
157
|
+
if (!result.installed) {
|
|
158
|
+
failures.push(`${dep.name} not found. Install with: ${result.installHint}`);
|
|
159
|
+
}
|
|
160
|
+
else if (result.versionUnknown) {
|
|
161
|
+
warnings.push(`${dep.name} version could not be determined (may be incompatible)`);
|
|
162
|
+
}
|
|
163
|
+
else if (!result.versionOk && result.version) {
|
|
164
|
+
failures.push(`${dep.name} version ${result.version} is below minimum ${dep.minVersion}. ` +
|
|
165
|
+
`Upgrade with: ${result.installHint}`);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
// Show warnings first (non-fatal)
|
|
169
|
+
if (warnings.length > 0) {
|
|
170
|
+
logger.warn('Dependency warnings:');
|
|
171
|
+
for (const warning of warnings) {
|
|
172
|
+
logger.warn(` • ${warning}`);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
// Then show failures and exit if requested
|
|
176
|
+
if (failures.length > 0 && exitOnFailure) {
|
|
177
|
+
logger.error('Missing or outdated dependencies:');
|
|
178
|
+
for (const failure of failures) {
|
|
179
|
+
logger.error(` • ${failure}`);
|
|
180
|
+
}
|
|
181
|
+
fatal('Please install missing dependencies and try again.');
|
|
182
|
+
}
|
|
183
|
+
return results;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Quick check for a single required dependency (for backwards compat)
|
|
187
|
+
*/
|
|
188
|
+
export async function requireDependency(name, installHint) {
|
|
189
|
+
if (!(await commandExists(name))) {
|
|
190
|
+
const hint = installHint || `Please install ${name}`;
|
|
191
|
+
fatal(`${name} not found. ${hint}`);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=deps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deps.js","sourceRoot":"","sources":["../../../src/agent-farm/utils/deps.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/agent-farm/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logging utilities for Agent Farm
|
|
3
|
+
*/
|
|
4
|
+
export declare const logger: {
|
|
5
|
+
info(message: string): void;
|
|
6
|
+
success(message: string): void;
|
|
7
|
+
warn(message: string): void;
|
|
8
|
+
error(message: string): void;
|
|
9
|
+
debug(message: string): void;
|
|
10
|
+
/**
|
|
11
|
+
* Print a header/title
|
|
12
|
+
*/
|
|
13
|
+
header(title: string): void;
|
|
14
|
+
/**
|
|
15
|
+
* Print a key-value pair
|
|
16
|
+
*/
|
|
17
|
+
kv(key: string, value: string | number): void;
|
|
18
|
+
/**
|
|
19
|
+
* Print a blank line
|
|
20
|
+
*/
|
|
21
|
+
blank(): void;
|
|
22
|
+
/**
|
|
23
|
+
* Print a table row
|
|
24
|
+
*/
|
|
25
|
+
row(cols: string[], widths: number[]): void;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Fatal error - logs and exits
|
|
29
|
+
*/
|
|
30
|
+
export declare function fatal(message: string): never;
|
|
31
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/utils/logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,eAAO,MAAM,MAAM;kBACH,MAAM,GAAG,IAAI;qBAIV,MAAM,GAAG,IAAI;kBAIhB,MAAM,GAAG,IAAI;mBAIZ,MAAM,GAAG,IAAI;mBAIb,MAAM,GAAG,IAAI;IAM5B;;OAEG;kBACW,MAAM,GAAG,IAAI;IAM3B;;OAEG;YACK,MAAM,SAAS,MAAM,GAAG,MAAM,GAAG,IAAI;IAI7C;;OAEG;aACM,IAAI;IAIb;;OAEG;cACO,MAAM,EAAE,UAAU,MAAM,EAAE,GAAG,IAAI;CAI5C,CAAC;AAEF;;GAEG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAG5C"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logging utilities for Agent Farm
|
|
3
|
+
*/
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
export const logger = {
|
|
6
|
+
info(message) {
|
|
7
|
+
console.log(chalk.blue('[info]'), message);
|
|
8
|
+
},
|
|
9
|
+
success(message) {
|
|
10
|
+
console.log(chalk.green('[ok]'), message);
|
|
11
|
+
},
|
|
12
|
+
warn(message) {
|
|
13
|
+
console.log(chalk.yellow('[warn]'), message);
|
|
14
|
+
},
|
|
15
|
+
error(message) {
|
|
16
|
+
console.error(chalk.red('[error]'), message);
|
|
17
|
+
},
|
|
18
|
+
debug(message) {
|
|
19
|
+
if (process.env.DEBUG) {
|
|
20
|
+
console.log(chalk.gray('[debug]'), message);
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
/**
|
|
24
|
+
* Print a header/title
|
|
25
|
+
*/
|
|
26
|
+
header(title) {
|
|
27
|
+
console.log();
|
|
28
|
+
console.log(chalk.bold(title));
|
|
29
|
+
console.log(chalk.gray('─'.repeat(title.length)));
|
|
30
|
+
},
|
|
31
|
+
/**
|
|
32
|
+
* Print a key-value pair
|
|
33
|
+
*/
|
|
34
|
+
kv(key, value) {
|
|
35
|
+
console.log(` ${chalk.gray(key + ':')} ${value}`);
|
|
36
|
+
},
|
|
37
|
+
/**
|
|
38
|
+
* Print a blank line
|
|
39
|
+
*/
|
|
40
|
+
blank() {
|
|
41
|
+
console.log();
|
|
42
|
+
},
|
|
43
|
+
/**
|
|
44
|
+
* Print a table row
|
|
45
|
+
*/
|
|
46
|
+
row(cols, widths) {
|
|
47
|
+
const padded = cols.map((col, i) => col.padEnd(widths[i] || 10));
|
|
48
|
+
console.log(' ' + padded.join(' '));
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Fatal error - logs and exits
|
|
53
|
+
*/
|
|
54
|
+
export function fatal(message) {
|
|
55
|
+
logger.error(message);
|
|
56
|
+
process.exit(1);
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/agent-farm/utils/logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,IAAI,CAAC,OAAe;QAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,CAAC,OAAe;QACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,CAAC,OAAe;QAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,OAAe;QACnB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,OAAe;QACnB,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAa;QAClB,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,EAAE,CAAC,GAAW,EAAE,KAAsB;QACpC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,KAAK;QACH,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,IAAc,EAAE,MAAgB;QAClC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACjE,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACxC,CAAC;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,KAAK,CAAC,OAAe;IACnC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACtB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Orphan Handler
|
|
3
|
+
*
|
|
4
|
+
* Detects and handles orphaned tmux sessions from previous agent-farm runs.
|
|
5
|
+
* This prevents resource leaks and ensures clean startup.
|
|
6
|
+
*
|
|
7
|
+
* IMPORTANT: Only cleans up sessions for THIS project (based on port).
|
|
8
|
+
* Sessions from other projects are left alone.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Check for and handle orphaned sessions on startup
|
|
12
|
+
*
|
|
13
|
+
* Returns the number of sessions that were cleaned up.
|
|
14
|
+
*/
|
|
15
|
+
export declare function handleOrphanedSessions(options?: {
|
|
16
|
+
kill?: boolean;
|
|
17
|
+
silent?: boolean;
|
|
18
|
+
}): Promise<number>;
|
|
19
|
+
/**
|
|
20
|
+
* Check for stale artifacts from bash script era
|
|
21
|
+
*/
|
|
22
|
+
export declare function checkStaleArtifacts(codevDir: string): string[];
|
|
23
|
+
/**
|
|
24
|
+
* Warn about stale artifacts if found
|
|
25
|
+
*/
|
|
26
|
+
export declare function warnAboutStaleArtifacts(codevDir: string): void;
|
|
27
|
+
//# sourceMappingURL=orphan-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orphan-handler.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/utils/orphan-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA+DH;;;;GAIG;AACH,wBAAsB,sBAAsB,CAAC,OAAO,GAAE;IACpD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CACb,GAAG,OAAO,CAAC,MAAM,CAAC,CAiCvB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAgB9D;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAU9D"}
|