@generacy-ai/generacy 0.0.0-preview-20260304013206
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/LICENSE +191 -0
- package/README.md +207 -0
- package/bin/generacy.js +11 -0
- package/dist/agency/index.d.ts +68 -0
- package/dist/agency/index.d.ts.map +1 -0
- package/dist/agency/index.js +28 -0
- package/dist/agency/index.js.map +1 -0
- package/dist/agency/network.d.ts +41 -0
- package/dist/agency/network.d.ts.map +1 -0
- package/dist/agency/network.js +133 -0
- package/dist/agency/network.js.map +1 -0
- package/dist/agency/subprocess.d.ts +58 -0
- package/dist/agency/subprocess.d.ts.map +1 -0
- package/dist/agency/subprocess.js +216 -0
- package/dist/agency/subprocess.js.map +1 -0
- package/dist/cli/commands/agent.d.ts +10 -0
- package/dist/cli/commands/agent.d.ts.map +1 -0
- package/dist/cli/commands/agent.js +216 -0
- package/dist/cli/commands/agent.js.map +1 -0
- package/dist/cli/commands/doctor/checks/agency-mcp.d.ts +3 -0
- package/dist/cli/commands/doctor/checks/agency-mcp.d.ts.map +1 -0
- package/dist/cli/commands/doctor/checks/agency-mcp.js +51 -0
- package/dist/cli/commands/doctor/checks/agency-mcp.js.map +1 -0
- package/dist/cli/commands/doctor/checks/anthropic-key.d.ts +3 -0
- package/dist/cli/commands/doctor/checks/anthropic-key.d.ts.map +1 -0
- package/dist/cli/commands/doctor/checks/anthropic-key.js +68 -0
- package/dist/cli/commands/doctor/checks/anthropic-key.js.map +1 -0
- package/dist/cli/commands/doctor/checks/config.d.ts +3 -0
- package/dist/cli/commands/doctor/checks/config.d.ts.map +1 -0
- package/dist/cli/commands/doctor/checks/config.js +81 -0
- package/dist/cli/commands/doctor/checks/config.js.map +1 -0
- package/dist/cli/commands/doctor/checks/devcontainer.d.ts +3 -0
- package/dist/cli/commands/doctor/checks/devcontainer.d.ts.map +1 -0
- package/dist/cli/commands/doctor/checks/devcontainer.js +58 -0
- package/dist/cli/commands/doctor/checks/devcontainer.js.map +1 -0
- package/dist/cli/commands/doctor/checks/docker.d.ts +3 -0
- package/dist/cli/commands/doctor/checks/docker.d.ts.map +1 -0
- package/dist/cli/commands/doctor/checks/docker.js +71 -0
- package/dist/cli/commands/doctor/checks/docker.js.map +1 -0
- package/dist/cli/commands/doctor/checks/env-file.d.ts +3 -0
- package/dist/cli/commands/doctor/checks/env-file.d.ts.map +1 -0
- package/dist/cli/commands/doctor/checks/env-file.js +56 -0
- package/dist/cli/commands/doctor/checks/env-file.js.map +1 -0
- package/dist/cli/commands/doctor/checks/github-token.d.ts +3 -0
- package/dist/cli/commands/doctor/checks/github-token.d.ts.map +1 -0
- package/dist/cli/commands/doctor/checks/github-token.js +99 -0
- package/dist/cli/commands/doctor/checks/github-token.js.map +1 -0
- package/dist/cli/commands/doctor/checks/npm-packages.d.ts +3 -0
- package/dist/cli/commands/doctor/checks/npm-packages.d.ts.map +1 -0
- package/dist/cli/commands/doctor/checks/npm-packages.js +117 -0
- package/dist/cli/commands/doctor/checks/npm-packages.js.map +1 -0
- package/dist/cli/commands/doctor/formatter.d.ts +27 -0
- package/dist/cli/commands/doctor/formatter.d.ts.map +1 -0
- package/dist/cli/commands/doctor/formatter.js +162 -0
- package/dist/cli/commands/doctor/formatter.js.map +1 -0
- package/dist/cli/commands/doctor/index.d.ts +5 -0
- package/dist/cli/commands/doctor/index.d.ts.map +1 -0
- package/dist/cli/commands/doctor/index.js +8 -0
- package/dist/cli/commands/doctor/index.js.map +1 -0
- package/dist/cli/commands/doctor/registry.d.ts +48 -0
- package/dist/cli/commands/doctor/registry.d.ts.map +1 -0
- package/dist/cli/commands/doctor/registry.js +166 -0
- package/dist/cli/commands/doctor/registry.js.map +1 -0
- package/dist/cli/commands/doctor/runner.d.ts +14 -0
- package/dist/cli/commands/doctor/runner.d.ts.map +1 -0
- package/dist/cli/commands/doctor/runner.js +257 -0
- package/dist/cli/commands/doctor/runner.js.map +1 -0
- package/dist/cli/commands/doctor/types.d.ts +87 -0
- package/dist/cli/commands/doctor/types.d.ts.map +1 -0
- package/dist/cli/commands/doctor/types.js +2 -0
- package/dist/cli/commands/doctor/types.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +12 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +97 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/init/conflicts.d.ts +36 -0
- package/dist/cli/commands/init/conflicts.d.ts.map +1 -0
- package/dist/cli/commands/init/conflicts.js +165 -0
- package/dist/cli/commands/init/conflicts.js.map +1 -0
- package/dist/cli/commands/init/github.d.ts +32 -0
- package/dist/cli/commands/init/github.d.ts.map +1 -0
- package/dist/cli/commands/init/github.js +161 -0
- package/dist/cli/commands/init/github.js.map +1 -0
- package/dist/cli/commands/init/index.d.ts +21 -0
- package/dist/cli/commands/init/index.d.ts.map +1 -0
- package/dist/cli/commands/init/index.js +175 -0
- package/dist/cli/commands/init/index.js.map +1 -0
- package/dist/cli/commands/init/prompts.d.ts +15 -0
- package/dist/cli/commands/init/prompts.d.ts.map +1 -0
- package/dist/cli/commands/init/prompts.js +281 -0
- package/dist/cli/commands/init/prompts.js.map +1 -0
- package/dist/cli/commands/init/repo-utils.d.ts +32 -0
- package/dist/cli/commands/init/repo-utils.d.ts.map +1 -0
- package/dist/cli/commands/init/repo-utils.js +112 -0
- package/dist/cli/commands/init/repo-utils.js.map +1 -0
- package/dist/cli/commands/init/resolver.d.ts +20 -0
- package/dist/cli/commands/init/resolver.d.ts.map +1 -0
- package/dist/cli/commands/init/resolver.js +273 -0
- package/dist/cli/commands/init/resolver.js.map +1 -0
- package/dist/cli/commands/init/summary.d.ts +21 -0
- package/dist/cli/commands/init/summary.d.ts.map +1 -0
- package/dist/cli/commands/init/summary.js +100 -0
- package/dist/cli/commands/init/summary.js.map +1 -0
- package/dist/cli/commands/init/types.d.ts +53 -0
- package/dist/cli/commands/init/types.d.ts.map +1 -0
- package/dist/cli/commands/init/types.js +2 -0
- package/dist/cli/commands/init/types.js.map +1 -0
- package/dist/cli/commands/init/writer.d.ts +22 -0
- package/dist/cli/commands/init/writer.d.ts.map +1 -0
- package/dist/cli/commands/init/writer.js +96 -0
- package/dist/cli/commands/init/writer.js.map +1 -0
- package/dist/cli/commands/orchestrator.d.ts +11 -0
- package/dist/cli/commands/orchestrator.d.ts.map +1 -0
- package/dist/cli/commands/orchestrator.js +291 -0
- package/dist/cli/commands/orchestrator.js.map +1 -0
- package/dist/cli/commands/run.d.ts +10 -0
- package/dist/cli/commands/run.d.ts.map +1 -0
- package/dist/cli/commands/run.js +167 -0
- package/dist/cli/commands/run.js.map +1 -0
- package/dist/cli/commands/setup/auth.d.ts +11 -0
- package/dist/cli/commands/setup/auth.d.ts.map +1 -0
- package/dist/cli/commands/setup/auth.js +108 -0
- package/dist/cli/commands/setup/auth.js.map +1 -0
- package/dist/cli/commands/setup/build.d.ts +11 -0
- package/dist/cli/commands/setup/build.d.ts.map +1 -0
- package/dist/cli/commands/setup/build.js +212 -0
- package/dist/cli/commands/setup/build.js.map +1 -0
- package/dist/cli/commands/setup/services.d.ts +11 -0
- package/dist/cli/commands/setup/services.d.ts.map +1 -0
- package/dist/cli/commands/setup/services.js +294 -0
- package/dist/cli/commands/setup/services.js.map +1 -0
- package/dist/cli/commands/setup/workspace.d.ts +11 -0
- package/dist/cli/commands/setup/workspace.d.ts.map +1 -0
- package/dist/cli/commands/setup/workspace.js +215 -0
- package/dist/cli/commands/setup/workspace.js.map +1 -0
- package/dist/cli/commands/setup.d.ts +7 -0
- package/dist/cli/commands/setup.d.ts.map +1 -0
- package/dist/cli/commands/setup.js +19 -0
- package/dist/cli/commands/setup.js.map +1 -0
- package/dist/cli/commands/validate.d.ts +10 -0
- package/dist/cli/commands/validate.d.ts.map +1 -0
- package/dist/cli/commands/validate.js +164 -0
- package/dist/cli/commands/validate.js.map +1 -0
- package/dist/cli/commands/worker.d.ts +10 -0
- package/dist/cli/commands/worker.d.ts.map +1 -0
- package/dist/cli/commands/worker.js +224 -0
- package/dist/cli/commands/worker.js.map +1 -0
- package/dist/cli/index.d.ts +14 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +68 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/utils/config.d.ts +49 -0
- package/dist/cli/utils/config.d.ts.map +1 -0
- package/dist/cli/utils/config.js +110 -0
- package/dist/cli/utils/config.js.map +1 -0
- package/dist/cli/utils/exec.d.ts +39 -0
- package/dist/cli/utils/exec.d.ts.map +1 -0
- package/dist/cli/utils/exec.js +68 -0
- package/dist/cli/utils/exec.js.map +1 -0
- package/dist/cli/utils/logger.d.ts +47 -0
- package/dist/cli/utils/logger.d.ts.map +1 -0
- package/dist/cli/utils/logger.js +97 -0
- package/dist/cli/utils/logger.js.map +1 -0
- package/dist/config/index.d.ts +10 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +13 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +104 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +266 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/schema.d.ts +304 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +160 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/config/validator.d.ts +60 -0
- package/dist/config/validator.d.ts.map +1 -0
- package/dist/config/validator.js +112 -0
- package/dist/config/validator.js.map +1 -0
- package/dist/health/server.d.ts +47 -0
- package/dist/health/server.d.ts.map +1 -0
- package/dist/health/server.js +92 -0
- package/dist/health/server.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/orchestrator/async-event-queue.d.ts +28 -0
- package/dist/orchestrator/async-event-queue.d.ts.map +1 -0
- package/dist/orchestrator/async-event-queue.js +57 -0
- package/dist/orchestrator/async-event-queue.js.map +1 -0
- package/dist/orchestrator/client.d.ts +110 -0
- package/dist/orchestrator/client.d.ts.map +1 -0
- package/dist/orchestrator/client.js +288 -0
- package/dist/orchestrator/client.js.map +1 -0
- package/dist/orchestrator/event-bus.d.ts +195 -0
- package/dist/orchestrator/event-bus.d.ts.map +1 -0
- package/dist/orchestrator/event-bus.js +557 -0
- package/dist/orchestrator/event-bus.js.map +1 -0
- package/dist/orchestrator/heartbeat.d.ts +71 -0
- package/dist/orchestrator/heartbeat.d.ts.map +1 -0
- package/dist/orchestrator/heartbeat.js +116 -0
- package/dist/orchestrator/heartbeat.js.map +1 -0
- package/dist/orchestrator/index.d.ts +25 -0
- package/dist/orchestrator/index.d.ts.map +1 -0
- package/dist/orchestrator/index.js +15 -0
- package/dist/orchestrator/index.js.map +1 -0
- package/dist/orchestrator/job-handler.d.ts +109 -0
- package/dist/orchestrator/job-handler.d.ts.map +1 -0
- package/dist/orchestrator/job-handler.js +612 -0
- package/dist/orchestrator/job-handler.js.map +1 -0
- package/dist/orchestrator/job-queue.d.ts +81 -0
- package/dist/orchestrator/job-queue.d.ts.map +1 -0
- package/dist/orchestrator/job-queue.js +206 -0
- package/dist/orchestrator/job-queue.js.map +1 -0
- package/dist/orchestrator/label-monitor-bridge.d.ts +25 -0
- package/dist/orchestrator/label-monitor-bridge.d.ts.map +1 -0
- package/dist/orchestrator/label-monitor-bridge.js +57 -0
- package/dist/orchestrator/label-monitor-bridge.js.map +1 -0
- package/dist/orchestrator/log-buffer.d.ts +74 -0
- package/dist/orchestrator/log-buffer.d.ts.map +1 -0
- package/dist/orchestrator/log-buffer.js +104 -0
- package/dist/orchestrator/log-buffer.js.map +1 -0
- package/dist/orchestrator/redis-job-queue.d.ts +44 -0
- package/dist/orchestrator/redis-job-queue.d.ts.map +1 -0
- package/dist/orchestrator/redis-job-queue.js +300 -0
- package/dist/orchestrator/redis-job-queue.js.map +1 -0
- package/dist/orchestrator/router.d.ts +125 -0
- package/dist/orchestrator/router.d.ts.map +1 -0
- package/dist/orchestrator/router.js +143 -0
- package/dist/orchestrator/router.js.map +1 -0
- package/dist/orchestrator/server.d.ts +62 -0
- package/dist/orchestrator/server.d.ts.map +1 -0
- package/dist/orchestrator/server.js +711 -0
- package/dist/orchestrator/server.js.map +1 -0
- package/dist/orchestrator/types.d.ts +184 -0
- package/dist/orchestrator/types.d.ts.map +1 -0
- package/dist/orchestrator/types.js +6 -0
- package/dist/orchestrator/types.js.map +1 -0
- package/dist/orchestrator/worker-registry.d.ts +110 -0
- package/dist/orchestrator/worker-registry.d.ts.map +1 -0
- package/dist/orchestrator/worker-registry.js +191 -0
- package/dist/orchestrator/worker-registry.js.map +1 -0
- package/package.json +80 -0
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Setup workspace subcommand.
|
|
3
|
+
* Clones all required repositories and installs their dependencies.
|
|
4
|
+
* Replaces .devcontainer/setup-repos.sh
|
|
5
|
+
*/
|
|
6
|
+
import { Command } from 'commander';
|
|
7
|
+
import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
|
|
8
|
+
import { join } from 'node:path';
|
|
9
|
+
import { homedir } from 'node:os';
|
|
10
|
+
import { getLogger } from '../../utils/logger.js';
|
|
11
|
+
import { exec, execSafe } from '../../utils/exec.js';
|
|
12
|
+
/**
|
|
13
|
+
* Default repositories to clone.
|
|
14
|
+
*/
|
|
15
|
+
const DEFAULT_REPOS = [
|
|
16
|
+
'tetrad-development',
|
|
17
|
+
'cluster-templates',
|
|
18
|
+
'latency',
|
|
19
|
+
'agency',
|
|
20
|
+
'generacy',
|
|
21
|
+
'humancy',
|
|
22
|
+
'generacy-cloud',
|
|
23
|
+
'humancy-cloud',
|
|
24
|
+
];
|
|
25
|
+
/**
|
|
26
|
+
* Resolve workspace config with three-tier priority: defaults → env vars → CLI args.
|
|
27
|
+
*/
|
|
28
|
+
function resolveWorkspaceConfig(cliArgs) {
|
|
29
|
+
const envRepos = process.env['REPOS'];
|
|
30
|
+
const cliRepos = cliArgs.repos;
|
|
31
|
+
let repos;
|
|
32
|
+
if (cliRepos) {
|
|
33
|
+
repos = cliRepos.split(',').map((r) => r.trim()).filter(Boolean);
|
|
34
|
+
}
|
|
35
|
+
else if (envRepos) {
|
|
36
|
+
repos = envRepos.split(',').map((r) => r.trim()).filter(Boolean);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
repos = [...DEFAULT_REPOS];
|
|
40
|
+
}
|
|
41
|
+
const branch = cliArgs.branch ??
|
|
42
|
+
process.env['REPO_BRANCH'] ??
|
|
43
|
+
process.env['DEFAULT_BRANCH'] ??
|
|
44
|
+
'develop';
|
|
45
|
+
const cleanEnv = process.env['CLEAN_REPOS'];
|
|
46
|
+
const clean = cliArgs.clean ?? (cleanEnv === 'true');
|
|
47
|
+
return {
|
|
48
|
+
repos,
|
|
49
|
+
branch,
|
|
50
|
+
workdir: cliArgs.workdir ?? '/workspaces',
|
|
51
|
+
clean,
|
|
52
|
+
githubOrg: process.env['GITHUB_ORG'] ?? 'generacy-ai',
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Detect the package manager for a repository.
|
|
57
|
+
* Returns 'pnpm' if pnpm-lock.yaml exists, otherwise 'npm'.
|
|
58
|
+
*/
|
|
59
|
+
function detectPackageManager(repoPath) {
|
|
60
|
+
return existsSync(join(repoPath, 'pnpm-lock.yaml')) ? 'pnpm' : 'npm';
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Ensure git credentials are configured.
|
|
64
|
+
* Checks for existing credentials or GH_TOKEN, sets up if needed.
|
|
65
|
+
*/
|
|
66
|
+
function ensureGitCredentials() {
|
|
67
|
+
const logger = getLogger();
|
|
68
|
+
const ghAuth = execSafe('gh auth status');
|
|
69
|
+
if (ghAuth.ok) {
|
|
70
|
+
logger.info('gh CLI is authenticated, configuring git to use gh credentials');
|
|
71
|
+
execSafe('gh auth setup-git');
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
const token = process.env['GH_TOKEN'];
|
|
75
|
+
if (token) {
|
|
76
|
+
logger.info('gh not authenticated, using GH_TOKEN directly');
|
|
77
|
+
exec('git config --global credential.helper store');
|
|
78
|
+
const username = process.env['GH_USERNAME'] ?? 'git';
|
|
79
|
+
const home = homedir();
|
|
80
|
+
mkdirSync(home, { recursive: true });
|
|
81
|
+
writeFileSync(join(home, '.git-credentials'), `https://${username}:${token}@github.com\n`, { mode: 0o600 });
|
|
82
|
+
logger.info('Git credentials configured from GH_TOKEN');
|
|
83
|
+
// Also configure gh CLI
|
|
84
|
+
execSafe(`echo "${token}" | gh auth login --with-token`);
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
// Check if .git-credentials exists
|
|
88
|
+
if (existsSync(join(homedir(), '.git-credentials'))) {
|
|
89
|
+
logger.debug('Git credentials file already exists');
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
logger.warn('No credentials available — relying on credential forwarding');
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Clone or update a single repository.
|
|
96
|
+
* Returns true on success, false on failure.
|
|
97
|
+
*/
|
|
98
|
+
function cloneOrUpdateRepo(repo, config) {
|
|
99
|
+
const logger = getLogger();
|
|
100
|
+
const target = join(config.workdir, repo);
|
|
101
|
+
if (existsSync(join(target, '.git'))) {
|
|
102
|
+
// Update existing repo
|
|
103
|
+
logger.info({ repo }, 'Repository exists, updating');
|
|
104
|
+
if (config.clean) {
|
|
105
|
+
logger.info({ repo }, 'Cleaning repository (--clean)');
|
|
106
|
+
execSafe('git reset --hard HEAD', { cwd: target });
|
|
107
|
+
execSafe('git clean -fd', { cwd: target });
|
|
108
|
+
}
|
|
109
|
+
execSafe('git fetch origin', { cwd: target });
|
|
110
|
+
// Check current branch and switch if needed
|
|
111
|
+
const currentBranch = execSafe('git branch --show-current', { cwd: target });
|
|
112
|
+
if (currentBranch.ok && currentBranch.stdout !== config.branch) {
|
|
113
|
+
logger.info({ repo, from: currentBranch.stdout, to: config.branch }, 'Switching branch');
|
|
114
|
+
const checkout = execSafe(`git checkout ${config.branch}`, { cwd: target });
|
|
115
|
+
if (!checkout.ok) {
|
|
116
|
+
execSafe(`git checkout -b ${config.branch} origin/${config.branch}`, { cwd: target });
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
execSafe(`git pull origin ${config.branch}`, { cwd: target });
|
|
120
|
+
return true;
|
|
121
|
+
}
|
|
122
|
+
// Clone new repo
|
|
123
|
+
logger.info({ repo, branch: config.branch }, 'Cloning repository');
|
|
124
|
+
const cloneUrl = `https://github.com/${config.githubOrg}/${repo}.git`;
|
|
125
|
+
// Try clone with specified branch
|
|
126
|
+
const clone = execSafe(`git clone --branch ${config.branch} ${cloneUrl} ${target}`);
|
|
127
|
+
if (clone.ok) {
|
|
128
|
+
logger.info({ repo }, 'Repository cloned successfully');
|
|
129
|
+
return true;
|
|
130
|
+
}
|
|
131
|
+
// Fallback: clone without branch (uses default branch)
|
|
132
|
+
logger.info({ repo }, 'Branch not found, cloning default branch');
|
|
133
|
+
const fallback = execSafe(`git clone ${cloneUrl} ${target}`);
|
|
134
|
+
if (fallback.ok) {
|
|
135
|
+
logger.info({ repo }, 'Repository cloned successfully (default branch)');
|
|
136
|
+
return true;
|
|
137
|
+
}
|
|
138
|
+
logger.error({ repo, stderr: fallback.stderr }, 'Failed to clone repository');
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Install dependencies for a repository.
|
|
143
|
+
*/
|
|
144
|
+
function installDeps(repo, workdir) {
|
|
145
|
+
const logger = getLogger();
|
|
146
|
+
const target = join(workdir, repo);
|
|
147
|
+
if (!existsSync(join(target, 'package.json'))) {
|
|
148
|
+
logger.debug({ repo }, 'No package.json, skipping dependency install');
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
const pm = detectPackageManager(target);
|
|
152
|
+
logger.info({ repo, packageManager: pm }, 'Installing dependencies');
|
|
153
|
+
const result = execSafe(`${pm} install`, { cwd: target });
|
|
154
|
+
if (result.ok) {
|
|
155
|
+
logger.info({ repo }, 'Dependencies installed');
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
logger.warn({ repo, stderr: result.stderr }, 'Dependency install failed — continuing');
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Create the `setup workspace` subcommand.
|
|
163
|
+
*/
|
|
164
|
+
export function setupWorkspaceCommand() {
|
|
165
|
+
const command = new Command('workspace');
|
|
166
|
+
command
|
|
167
|
+
.description('Clone repositories and install dependencies')
|
|
168
|
+
.option('--repos <repos>', 'Comma-separated list of repos to clone (or REPOS env)')
|
|
169
|
+
.option('--branch <branch>', 'Target branch (or REPO_BRANCH/DEFAULT_BRANCH env)')
|
|
170
|
+
.option('--workdir <dir>', 'Workspace root directory', '/workspaces')
|
|
171
|
+
.option('--clean', 'Hard reset repos before updating (or CLEAN_REPOS env)')
|
|
172
|
+
.action(async (options) => {
|
|
173
|
+
const logger = getLogger();
|
|
174
|
+
const config = resolveWorkspaceConfig(options);
|
|
175
|
+
logger.info('Setting up workspace');
|
|
176
|
+
logger.info({ org: config.githubOrg, branch: config.branch, repos: config.repos.length }, 'Configuration');
|
|
177
|
+
// Step 1: Setup
|
|
178
|
+
mkdirSync(config.workdir, { recursive: true });
|
|
179
|
+
exec("git config --global --add safe.directory '*'");
|
|
180
|
+
// Step 2: Ensure git credentials
|
|
181
|
+
ensureGitCredentials();
|
|
182
|
+
// Step 3: Clone/update repos
|
|
183
|
+
let successCount = 0;
|
|
184
|
+
let failureCount = 0;
|
|
185
|
+
const processedRepos = [];
|
|
186
|
+
// Process tetrad-development first if in the list
|
|
187
|
+
const orderedRepos = [...config.repos];
|
|
188
|
+
const tetradIndex = orderedRepos.indexOf('tetrad-development');
|
|
189
|
+
if (tetradIndex > 0) {
|
|
190
|
+
orderedRepos.splice(tetradIndex, 1);
|
|
191
|
+
orderedRepos.unshift('tetrad-development');
|
|
192
|
+
}
|
|
193
|
+
for (const repo of orderedRepos) {
|
|
194
|
+
if (cloneOrUpdateRepo(repo, config)) {
|
|
195
|
+
successCount++;
|
|
196
|
+
processedRepos.push(repo);
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
failureCount++;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
// Step 4: Install dependencies
|
|
203
|
+
for (const repo of processedRepos) {
|
|
204
|
+
installDeps(repo, config.workdir);
|
|
205
|
+
}
|
|
206
|
+
// Step 5: Report summary
|
|
207
|
+
logger.info({ success: successCount, failed: failureCount, total: orderedRepos.length }, 'Workspace setup complete');
|
|
208
|
+
if (failureCount > 0) {
|
|
209
|
+
logger.error({ failures: failureCount }, 'Some repos failed to clone — re-run `generacy setup workspace` to retry');
|
|
210
|
+
process.exit(1);
|
|
211
|
+
}
|
|
212
|
+
});
|
|
213
|
+
return command;
|
|
214
|
+
}
|
|
215
|
+
//# sourceMappingURL=workspace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../../../src/cli/commands/setup/workspace.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/setup.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,YAAY,IAAI,OAAO,CAQtC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parent setup command group.
|
|
3
|
+
* Composes dev container setup subcommands: auth, workspace, build, services.
|
|
4
|
+
*/
|
|
5
|
+
import { Command } from 'commander';
|
|
6
|
+
import { setupAuthCommand } from './setup/auth.js';
|
|
7
|
+
import { setupWorkspaceCommand } from './setup/workspace.js';
|
|
8
|
+
import { setupBuildCommand } from './setup/build.js';
|
|
9
|
+
import { setupServicesCommand } from './setup/services.js';
|
|
10
|
+
export function setupCommand() {
|
|
11
|
+
const command = new Command('setup');
|
|
12
|
+
command.description('Dev container setup commands');
|
|
13
|
+
command.addCommand(setupAuthCommand());
|
|
14
|
+
command.addCommand(setupWorkspaceCommand());
|
|
15
|
+
command.addCommand(setupBuildCommand());
|
|
16
|
+
command.addCommand(setupServicesCommand());
|
|
17
|
+
return command;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/cli/commands/setup.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3D,MAAM,UAAU,YAAY;IAC1B,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACrC,OAAO,CAAC,WAAW,CAAC,8BAA8B,CAAC,CAAC;IACpD,OAAO,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACvC,OAAO,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAC3C,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validate command implementation.
|
|
3
|
+
* Validates a .generacy/config.yaml file and reports errors.
|
|
4
|
+
*/
|
|
5
|
+
import { Command } from 'commander';
|
|
6
|
+
/**
|
|
7
|
+
* Create the validate command
|
|
8
|
+
*/
|
|
9
|
+
export declare function validateCommand(): Command;
|
|
10
|
+
//# sourceMappingURL=validate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/validate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqGpC;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CA2FzC"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validate command implementation.
|
|
3
|
+
* Validates a .generacy/config.yaml file and reports errors.
|
|
4
|
+
*/
|
|
5
|
+
import { Command } from 'commander';
|
|
6
|
+
import { resolve } from 'node:path';
|
|
7
|
+
import { existsSync } from 'node:fs';
|
|
8
|
+
import { loadConfig, findConfigFile, parseConfig, ConfigNotFoundError, ConfigParseError, ConfigSchemaError, ConfigValidationError, } from '../../config/index.js';
|
|
9
|
+
import { getLogger } from '../utils/logger.js';
|
|
10
|
+
import { readFileSync } from 'node:fs';
|
|
11
|
+
/**
|
|
12
|
+
* Format validation errors for display
|
|
13
|
+
*/
|
|
14
|
+
function formatValidationErrors(error) {
|
|
15
|
+
if (error instanceof ConfigNotFoundError) {
|
|
16
|
+
return `Config file not found. Searched in:\n${error.searchPath.map(p => ` - ${p}`).join('\n')}\n\nCreate a config file at: ${error.searchPath[0]}`;
|
|
17
|
+
}
|
|
18
|
+
if (error instanceof ConfigParseError) {
|
|
19
|
+
return `Failed to parse YAML: ${error.filePath}\n\n${error.cause.message}`;
|
|
20
|
+
}
|
|
21
|
+
if (error instanceof ConfigSchemaError) {
|
|
22
|
+
const errorMessages = error.errors.errors
|
|
23
|
+
.map(err => {
|
|
24
|
+
const path = err.path.length > 0 ? err.path.join('.') : 'root';
|
|
25
|
+
return ` - ${path}: ${err.message}`;
|
|
26
|
+
})
|
|
27
|
+
.join('\n');
|
|
28
|
+
return `Schema validation failed: ${error.filePath}\n\nValidation errors:\n${errorMessages}`;
|
|
29
|
+
}
|
|
30
|
+
if (error instanceof ConfigValidationError) {
|
|
31
|
+
return `Semantic validation failed:\n\n${error.message}`;
|
|
32
|
+
}
|
|
33
|
+
if (error instanceof Error) {
|
|
34
|
+
return error.message;
|
|
35
|
+
}
|
|
36
|
+
return String(error);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Display config summary
|
|
40
|
+
*/
|
|
41
|
+
function displayConfigSummary(config, configPath) {
|
|
42
|
+
const logger = getLogger();
|
|
43
|
+
logger.info('✓ Configuration is valid');
|
|
44
|
+
logger.info(`\nConfig file: ${configPath}\n`);
|
|
45
|
+
logger.info('Project:');
|
|
46
|
+
logger.info(` ID: ${config.project.id}`);
|
|
47
|
+
logger.info(` Name: ${config.project.name}`);
|
|
48
|
+
logger.info('\nRepositories:');
|
|
49
|
+
logger.info(` Primary: ${config.repos.primary}`);
|
|
50
|
+
if (config.repos.dev && config.repos.dev.length > 0) {
|
|
51
|
+
logger.info(` Dev (${config.repos.dev.length}):`);
|
|
52
|
+
config.repos.dev.forEach(repo => {
|
|
53
|
+
logger.info(` - ${repo}`);
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
if (config.repos.clone && config.repos.clone.length > 0) {
|
|
57
|
+
logger.info(` Clone (${config.repos.clone.length}):`);
|
|
58
|
+
config.repos.clone.forEach(repo => {
|
|
59
|
+
logger.info(` - ${repo}`);
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
if (config.defaults) {
|
|
63
|
+
logger.info('\nDefaults:');
|
|
64
|
+
if (config.defaults.agent) {
|
|
65
|
+
logger.info(` Agent: ${config.defaults.agent}`);
|
|
66
|
+
}
|
|
67
|
+
if (config.defaults.baseBranch) {
|
|
68
|
+
logger.info(` Base Branch: ${config.defaults.baseBranch}`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
if (config.orchestrator) {
|
|
72
|
+
logger.info('\nOrchestrator:');
|
|
73
|
+
if (config.orchestrator.pollIntervalMs !== undefined) {
|
|
74
|
+
logger.info(` Poll Interval: ${config.orchestrator.pollIntervalMs}ms`);
|
|
75
|
+
}
|
|
76
|
+
if (config.orchestrator.workerCount !== undefined) {
|
|
77
|
+
logger.info(` Worker Count: ${config.orchestrator.workerCount}`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Create the validate command
|
|
83
|
+
*/
|
|
84
|
+
export function validateCommand() {
|
|
85
|
+
const command = new Command('validate');
|
|
86
|
+
command
|
|
87
|
+
.description('Validate .generacy/config.yaml file')
|
|
88
|
+
.argument('[config]', 'Path to config file (optional, will auto-discover if not provided)')
|
|
89
|
+
.option('-q, --quiet', 'Only output errors (no success messages)')
|
|
90
|
+
.option('--json', 'Output results as JSON')
|
|
91
|
+
.action(async (configArg, options) => {
|
|
92
|
+
const logger = getLogger();
|
|
93
|
+
const quiet = options?.quiet ?? false;
|
|
94
|
+
const jsonOutput = options?.json ?? false;
|
|
95
|
+
try {
|
|
96
|
+
let config;
|
|
97
|
+
let configPath;
|
|
98
|
+
if (configArg) {
|
|
99
|
+
// Explicit path provided
|
|
100
|
+
configPath = resolve(configArg);
|
|
101
|
+
if (!existsSync(configPath)) {
|
|
102
|
+
throw new ConfigNotFoundError(process.cwd(), [configPath]);
|
|
103
|
+
}
|
|
104
|
+
// Read and parse the file
|
|
105
|
+
const content = readFileSync(configPath, 'utf-8');
|
|
106
|
+
config = parseConfig(content);
|
|
107
|
+
if (!quiet && !jsonOutput) {
|
|
108
|
+
logger.info({ path: configPath }, 'Validating config file');
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
// Auto-discover
|
|
113
|
+
if (!quiet && !jsonOutput) {
|
|
114
|
+
logger.info('Searching for config file...');
|
|
115
|
+
}
|
|
116
|
+
const discoveredPath = findConfigFile();
|
|
117
|
+
if (!discoveredPath) {
|
|
118
|
+
throw new ConfigNotFoundError(process.cwd(), []);
|
|
119
|
+
}
|
|
120
|
+
configPath = discoveredPath;
|
|
121
|
+
if (!quiet && !jsonOutput) {
|
|
122
|
+
logger.info({ path: configPath }, 'Found config file');
|
|
123
|
+
}
|
|
124
|
+
// Load and validate
|
|
125
|
+
config = loadConfig();
|
|
126
|
+
}
|
|
127
|
+
// Output results
|
|
128
|
+
if (jsonOutput) {
|
|
129
|
+
const result = {
|
|
130
|
+
valid: true,
|
|
131
|
+
configPath,
|
|
132
|
+
config,
|
|
133
|
+
};
|
|
134
|
+
console.log(JSON.stringify(result, null, 2));
|
|
135
|
+
}
|
|
136
|
+
else if (!quiet) {
|
|
137
|
+
displayConfigSummary(config, configPath);
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
// Quiet mode - just indicate success
|
|
141
|
+
console.log('✓ Valid');
|
|
142
|
+
}
|
|
143
|
+
process.exit(0);
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
// Handle validation errors
|
|
147
|
+
if (jsonOutput) {
|
|
148
|
+
const result = {
|
|
149
|
+
valid: false,
|
|
150
|
+
error: error instanceof Error ? error.message : String(error),
|
|
151
|
+
errorType: error instanceof Error ? error.constructor.name : 'Unknown',
|
|
152
|
+
};
|
|
153
|
+
console.log(JSON.stringify(result, null, 2));
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
logger.error('Validation failed:\n');
|
|
157
|
+
console.error(formatValidationErrors(error));
|
|
158
|
+
}
|
|
159
|
+
process.exit(1);
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
return command;
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/cli/commands/validate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Worker command implementation.
|
|
3
|
+
* Connects to orchestrator and processes jobs.
|
|
4
|
+
*/
|
|
5
|
+
import { Command } from 'commander';
|
|
6
|
+
/**
|
|
7
|
+
* Create the worker command
|
|
8
|
+
*/
|
|
9
|
+
export declare function workerCommand(): Command;
|
|
10
|
+
//# sourceMappingURL=worker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/worker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC;;GAEG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAsOvC"}
|