@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.
Files changed (244) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +207 -0
  3. package/bin/generacy.js +11 -0
  4. package/dist/agency/index.d.ts +68 -0
  5. package/dist/agency/index.d.ts.map +1 -0
  6. package/dist/agency/index.js +28 -0
  7. package/dist/agency/index.js.map +1 -0
  8. package/dist/agency/network.d.ts +41 -0
  9. package/dist/agency/network.d.ts.map +1 -0
  10. package/dist/agency/network.js +133 -0
  11. package/dist/agency/network.js.map +1 -0
  12. package/dist/agency/subprocess.d.ts +58 -0
  13. package/dist/agency/subprocess.d.ts.map +1 -0
  14. package/dist/agency/subprocess.js +216 -0
  15. package/dist/agency/subprocess.js.map +1 -0
  16. package/dist/cli/commands/agent.d.ts +10 -0
  17. package/dist/cli/commands/agent.d.ts.map +1 -0
  18. package/dist/cli/commands/agent.js +216 -0
  19. package/dist/cli/commands/agent.js.map +1 -0
  20. package/dist/cli/commands/doctor/checks/agency-mcp.d.ts +3 -0
  21. package/dist/cli/commands/doctor/checks/agency-mcp.d.ts.map +1 -0
  22. package/dist/cli/commands/doctor/checks/agency-mcp.js +51 -0
  23. package/dist/cli/commands/doctor/checks/agency-mcp.js.map +1 -0
  24. package/dist/cli/commands/doctor/checks/anthropic-key.d.ts +3 -0
  25. package/dist/cli/commands/doctor/checks/anthropic-key.d.ts.map +1 -0
  26. package/dist/cli/commands/doctor/checks/anthropic-key.js +68 -0
  27. package/dist/cli/commands/doctor/checks/anthropic-key.js.map +1 -0
  28. package/dist/cli/commands/doctor/checks/config.d.ts +3 -0
  29. package/dist/cli/commands/doctor/checks/config.d.ts.map +1 -0
  30. package/dist/cli/commands/doctor/checks/config.js +81 -0
  31. package/dist/cli/commands/doctor/checks/config.js.map +1 -0
  32. package/dist/cli/commands/doctor/checks/devcontainer.d.ts +3 -0
  33. package/dist/cli/commands/doctor/checks/devcontainer.d.ts.map +1 -0
  34. package/dist/cli/commands/doctor/checks/devcontainer.js +58 -0
  35. package/dist/cli/commands/doctor/checks/devcontainer.js.map +1 -0
  36. package/dist/cli/commands/doctor/checks/docker.d.ts +3 -0
  37. package/dist/cli/commands/doctor/checks/docker.d.ts.map +1 -0
  38. package/dist/cli/commands/doctor/checks/docker.js +71 -0
  39. package/dist/cli/commands/doctor/checks/docker.js.map +1 -0
  40. package/dist/cli/commands/doctor/checks/env-file.d.ts +3 -0
  41. package/dist/cli/commands/doctor/checks/env-file.d.ts.map +1 -0
  42. package/dist/cli/commands/doctor/checks/env-file.js +56 -0
  43. package/dist/cli/commands/doctor/checks/env-file.js.map +1 -0
  44. package/dist/cli/commands/doctor/checks/github-token.d.ts +3 -0
  45. package/dist/cli/commands/doctor/checks/github-token.d.ts.map +1 -0
  46. package/dist/cli/commands/doctor/checks/github-token.js +99 -0
  47. package/dist/cli/commands/doctor/checks/github-token.js.map +1 -0
  48. package/dist/cli/commands/doctor/checks/npm-packages.d.ts +3 -0
  49. package/dist/cli/commands/doctor/checks/npm-packages.d.ts.map +1 -0
  50. package/dist/cli/commands/doctor/checks/npm-packages.js +117 -0
  51. package/dist/cli/commands/doctor/checks/npm-packages.js.map +1 -0
  52. package/dist/cli/commands/doctor/formatter.d.ts +27 -0
  53. package/dist/cli/commands/doctor/formatter.d.ts.map +1 -0
  54. package/dist/cli/commands/doctor/formatter.js +162 -0
  55. package/dist/cli/commands/doctor/formatter.js.map +1 -0
  56. package/dist/cli/commands/doctor/index.d.ts +5 -0
  57. package/dist/cli/commands/doctor/index.d.ts.map +1 -0
  58. package/dist/cli/commands/doctor/index.js +8 -0
  59. package/dist/cli/commands/doctor/index.js.map +1 -0
  60. package/dist/cli/commands/doctor/registry.d.ts +48 -0
  61. package/dist/cli/commands/doctor/registry.d.ts.map +1 -0
  62. package/dist/cli/commands/doctor/registry.js +166 -0
  63. package/dist/cli/commands/doctor/registry.js.map +1 -0
  64. package/dist/cli/commands/doctor/runner.d.ts +14 -0
  65. package/dist/cli/commands/doctor/runner.d.ts.map +1 -0
  66. package/dist/cli/commands/doctor/runner.js +257 -0
  67. package/dist/cli/commands/doctor/runner.js.map +1 -0
  68. package/dist/cli/commands/doctor/types.d.ts +87 -0
  69. package/dist/cli/commands/doctor/types.d.ts.map +1 -0
  70. package/dist/cli/commands/doctor/types.js +2 -0
  71. package/dist/cli/commands/doctor/types.js.map +1 -0
  72. package/dist/cli/commands/doctor.d.ts +12 -0
  73. package/dist/cli/commands/doctor.d.ts.map +1 -0
  74. package/dist/cli/commands/doctor.js +97 -0
  75. package/dist/cli/commands/doctor.js.map +1 -0
  76. package/dist/cli/commands/init/conflicts.d.ts +36 -0
  77. package/dist/cli/commands/init/conflicts.d.ts.map +1 -0
  78. package/dist/cli/commands/init/conflicts.js +165 -0
  79. package/dist/cli/commands/init/conflicts.js.map +1 -0
  80. package/dist/cli/commands/init/github.d.ts +32 -0
  81. package/dist/cli/commands/init/github.d.ts.map +1 -0
  82. package/dist/cli/commands/init/github.js +161 -0
  83. package/dist/cli/commands/init/github.js.map +1 -0
  84. package/dist/cli/commands/init/index.d.ts +21 -0
  85. package/dist/cli/commands/init/index.d.ts.map +1 -0
  86. package/dist/cli/commands/init/index.js +175 -0
  87. package/dist/cli/commands/init/index.js.map +1 -0
  88. package/dist/cli/commands/init/prompts.d.ts +15 -0
  89. package/dist/cli/commands/init/prompts.d.ts.map +1 -0
  90. package/dist/cli/commands/init/prompts.js +281 -0
  91. package/dist/cli/commands/init/prompts.js.map +1 -0
  92. package/dist/cli/commands/init/repo-utils.d.ts +32 -0
  93. package/dist/cli/commands/init/repo-utils.d.ts.map +1 -0
  94. package/dist/cli/commands/init/repo-utils.js +112 -0
  95. package/dist/cli/commands/init/repo-utils.js.map +1 -0
  96. package/dist/cli/commands/init/resolver.d.ts +20 -0
  97. package/dist/cli/commands/init/resolver.d.ts.map +1 -0
  98. package/dist/cli/commands/init/resolver.js +273 -0
  99. package/dist/cli/commands/init/resolver.js.map +1 -0
  100. package/dist/cli/commands/init/summary.d.ts +21 -0
  101. package/dist/cli/commands/init/summary.d.ts.map +1 -0
  102. package/dist/cli/commands/init/summary.js +100 -0
  103. package/dist/cli/commands/init/summary.js.map +1 -0
  104. package/dist/cli/commands/init/types.d.ts +53 -0
  105. package/dist/cli/commands/init/types.d.ts.map +1 -0
  106. package/dist/cli/commands/init/types.js +2 -0
  107. package/dist/cli/commands/init/types.js.map +1 -0
  108. package/dist/cli/commands/init/writer.d.ts +22 -0
  109. package/dist/cli/commands/init/writer.d.ts.map +1 -0
  110. package/dist/cli/commands/init/writer.js +96 -0
  111. package/dist/cli/commands/init/writer.js.map +1 -0
  112. package/dist/cli/commands/orchestrator.d.ts +11 -0
  113. package/dist/cli/commands/orchestrator.d.ts.map +1 -0
  114. package/dist/cli/commands/orchestrator.js +291 -0
  115. package/dist/cli/commands/orchestrator.js.map +1 -0
  116. package/dist/cli/commands/run.d.ts +10 -0
  117. package/dist/cli/commands/run.d.ts.map +1 -0
  118. package/dist/cli/commands/run.js +167 -0
  119. package/dist/cli/commands/run.js.map +1 -0
  120. package/dist/cli/commands/setup/auth.d.ts +11 -0
  121. package/dist/cli/commands/setup/auth.d.ts.map +1 -0
  122. package/dist/cli/commands/setup/auth.js +108 -0
  123. package/dist/cli/commands/setup/auth.js.map +1 -0
  124. package/dist/cli/commands/setup/build.d.ts +11 -0
  125. package/dist/cli/commands/setup/build.d.ts.map +1 -0
  126. package/dist/cli/commands/setup/build.js +212 -0
  127. package/dist/cli/commands/setup/build.js.map +1 -0
  128. package/dist/cli/commands/setup/services.d.ts +11 -0
  129. package/dist/cli/commands/setup/services.d.ts.map +1 -0
  130. package/dist/cli/commands/setup/services.js +294 -0
  131. package/dist/cli/commands/setup/services.js.map +1 -0
  132. package/dist/cli/commands/setup/workspace.d.ts +11 -0
  133. package/dist/cli/commands/setup/workspace.d.ts.map +1 -0
  134. package/dist/cli/commands/setup/workspace.js +215 -0
  135. package/dist/cli/commands/setup/workspace.js.map +1 -0
  136. package/dist/cli/commands/setup.d.ts +7 -0
  137. package/dist/cli/commands/setup.d.ts.map +1 -0
  138. package/dist/cli/commands/setup.js +19 -0
  139. package/dist/cli/commands/setup.js.map +1 -0
  140. package/dist/cli/commands/validate.d.ts +10 -0
  141. package/dist/cli/commands/validate.d.ts.map +1 -0
  142. package/dist/cli/commands/validate.js +164 -0
  143. package/dist/cli/commands/validate.js.map +1 -0
  144. package/dist/cli/commands/worker.d.ts +10 -0
  145. package/dist/cli/commands/worker.d.ts.map +1 -0
  146. package/dist/cli/commands/worker.js +224 -0
  147. package/dist/cli/commands/worker.js.map +1 -0
  148. package/dist/cli/index.d.ts +14 -0
  149. package/dist/cli/index.d.ts.map +1 -0
  150. package/dist/cli/index.js +68 -0
  151. package/dist/cli/index.js.map +1 -0
  152. package/dist/cli/utils/config.d.ts +49 -0
  153. package/dist/cli/utils/config.d.ts.map +1 -0
  154. package/dist/cli/utils/config.js +110 -0
  155. package/dist/cli/utils/config.js.map +1 -0
  156. package/dist/cli/utils/exec.d.ts +39 -0
  157. package/dist/cli/utils/exec.d.ts.map +1 -0
  158. package/dist/cli/utils/exec.js +68 -0
  159. package/dist/cli/utils/exec.js.map +1 -0
  160. package/dist/cli/utils/logger.d.ts +47 -0
  161. package/dist/cli/utils/logger.d.ts.map +1 -0
  162. package/dist/cli/utils/logger.js +97 -0
  163. package/dist/cli/utils/logger.js.map +1 -0
  164. package/dist/config/index.d.ts +10 -0
  165. package/dist/config/index.d.ts.map +1 -0
  166. package/dist/config/index.js +13 -0
  167. package/dist/config/index.js.map +1 -0
  168. package/dist/config/loader.d.ts +104 -0
  169. package/dist/config/loader.d.ts.map +1 -0
  170. package/dist/config/loader.js +266 -0
  171. package/dist/config/loader.js.map +1 -0
  172. package/dist/config/schema.d.ts +304 -0
  173. package/dist/config/schema.d.ts.map +1 -0
  174. package/dist/config/schema.js +160 -0
  175. package/dist/config/schema.js.map +1 -0
  176. package/dist/config/validator.d.ts +60 -0
  177. package/dist/config/validator.d.ts.map +1 -0
  178. package/dist/config/validator.js +112 -0
  179. package/dist/config/validator.js.map +1 -0
  180. package/dist/health/server.d.ts +47 -0
  181. package/dist/health/server.d.ts.map +1 -0
  182. package/dist/health/server.js +92 -0
  183. package/dist/health/server.js.map +1 -0
  184. package/dist/index.d.ts +21 -0
  185. package/dist/index.d.ts.map +1 -0
  186. package/dist/index.js +22 -0
  187. package/dist/index.js.map +1 -0
  188. package/dist/orchestrator/async-event-queue.d.ts +28 -0
  189. package/dist/orchestrator/async-event-queue.d.ts.map +1 -0
  190. package/dist/orchestrator/async-event-queue.js +57 -0
  191. package/dist/orchestrator/async-event-queue.js.map +1 -0
  192. package/dist/orchestrator/client.d.ts +110 -0
  193. package/dist/orchestrator/client.d.ts.map +1 -0
  194. package/dist/orchestrator/client.js +288 -0
  195. package/dist/orchestrator/client.js.map +1 -0
  196. package/dist/orchestrator/event-bus.d.ts +195 -0
  197. package/dist/orchestrator/event-bus.d.ts.map +1 -0
  198. package/dist/orchestrator/event-bus.js +557 -0
  199. package/dist/orchestrator/event-bus.js.map +1 -0
  200. package/dist/orchestrator/heartbeat.d.ts +71 -0
  201. package/dist/orchestrator/heartbeat.d.ts.map +1 -0
  202. package/dist/orchestrator/heartbeat.js +116 -0
  203. package/dist/orchestrator/heartbeat.js.map +1 -0
  204. package/dist/orchestrator/index.d.ts +25 -0
  205. package/dist/orchestrator/index.d.ts.map +1 -0
  206. package/dist/orchestrator/index.js +15 -0
  207. package/dist/orchestrator/index.js.map +1 -0
  208. package/dist/orchestrator/job-handler.d.ts +109 -0
  209. package/dist/orchestrator/job-handler.d.ts.map +1 -0
  210. package/dist/orchestrator/job-handler.js +612 -0
  211. package/dist/orchestrator/job-handler.js.map +1 -0
  212. package/dist/orchestrator/job-queue.d.ts +81 -0
  213. package/dist/orchestrator/job-queue.d.ts.map +1 -0
  214. package/dist/orchestrator/job-queue.js +206 -0
  215. package/dist/orchestrator/job-queue.js.map +1 -0
  216. package/dist/orchestrator/label-monitor-bridge.d.ts +25 -0
  217. package/dist/orchestrator/label-monitor-bridge.d.ts.map +1 -0
  218. package/dist/orchestrator/label-monitor-bridge.js +57 -0
  219. package/dist/orchestrator/label-monitor-bridge.js.map +1 -0
  220. package/dist/orchestrator/log-buffer.d.ts +74 -0
  221. package/dist/orchestrator/log-buffer.d.ts.map +1 -0
  222. package/dist/orchestrator/log-buffer.js +104 -0
  223. package/dist/orchestrator/log-buffer.js.map +1 -0
  224. package/dist/orchestrator/redis-job-queue.d.ts +44 -0
  225. package/dist/orchestrator/redis-job-queue.d.ts.map +1 -0
  226. package/dist/orchestrator/redis-job-queue.js +300 -0
  227. package/dist/orchestrator/redis-job-queue.js.map +1 -0
  228. package/dist/orchestrator/router.d.ts +125 -0
  229. package/dist/orchestrator/router.d.ts.map +1 -0
  230. package/dist/orchestrator/router.js +143 -0
  231. package/dist/orchestrator/router.js.map +1 -0
  232. package/dist/orchestrator/server.d.ts +62 -0
  233. package/dist/orchestrator/server.d.ts.map +1 -0
  234. package/dist/orchestrator/server.js +711 -0
  235. package/dist/orchestrator/server.js.map +1 -0
  236. package/dist/orchestrator/types.d.ts +184 -0
  237. package/dist/orchestrator/types.d.ts.map +1 -0
  238. package/dist/orchestrator/types.js +6 -0
  239. package/dist/orchestrator/types.js.map +1 -0
  240. package/dist/orchestrator/worker-registry.d.ts +110 -0
  241. package/dist/orchestrator/worker-registry.d.ts.map +1 -0
  242. package/dist/orchestrator/worker-registry.js +191 -0
  243. package/dist/orchestrator/worker-registry.js.map +1 -0
  244. 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,7 @@
1
+ /**
2
+ * Parent setup command group.
3
+ * Composes dev container setup subcommands: auth, workspace, build, services.
4
+ */
5
+ import { Command } from 'commander';
6
+ export declare function setupCommand(): Command;
7
+ //# sourceMappingURL=setup.d.ts.map
@@ -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"}