@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 @@
|
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/setup/build.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyOpC;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAuC3C"}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Setup build subcommand.
|
|
3
|
+
* Cleans stale Claude plugin state, builds Agency and Generacy packages.
|
|
4
|
+
* Replaces .devcontainer/setup-plugins.sh
|
|
5
|
+
*/
|
|
6
|
+
import { Command } from 'commander';
|
|
7
|
+
import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync, } from 'node:fs';
|
|
8
|
+
import { homedir } from 'node:os';
|
|
9
|
+
import { join } from 'node:path';
|
|
10
|
+
import { getLogger } from '../../utils/logger.js';
|
|
11
|
+
import { exec } from '../../utils/exec.js';
|
|
12
|
+
/**
|
|
13
|
+
* Resolve build config with three-tier priority: defaults → env vars → CLI args.
|
|
14
|
+
*/
|
|
15
|
+
function resolveBuildConfig(cliArgs) {
|
|
16
|
+
return {
|
|
17
|
+
skipCleanup: cliArgs.skipCleanup ?? false,
|
|
18
|
+
skipAgency: cliArgs.skipAgency ?? false,
|
|
19
|
+
skipGeneracy: cliArgs.skipGeneracy ?? false,
|
|
20
|
+
agencyDir: cliArgs.agencyDir ?? '/workspaces/agency',
|
|
21
|
+
generacyDir: cliArgs.generacyDir ?? '/workspaces/generacy',
|
|
22
|
+
latencyDir: cliArgs.latencyDir ?? '/workspaces/latency',
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Phase 1: Clean stale Claude plugin state.
|
|
27
|
+
* Removes marketplace caches, resets installed plugins, and clears enabledPlugins from settings.
|
|
28
|
+
* All operations are non-fatal — errors are logged as warnings.
|
|
29
|
+
*/
|
|
30
|
+
function cleanPluginState() {
|
|
31
|
+
const logger = getLogger();
|
|
32
|
+
const home = homedir();
|
|
33
|
+
const claudeDir = join(home, '.claude');
|
|
34
|
+
const pluginsDir = join(claudeDir, 'plugins');
|
|
35
|
+
logger.info('Phase 1: Cleaning stale Claude plugin state');
|
|
36
|
+
// Remove marketplace cache directories
|
|
37
|
+
const dirsToRemove = [
|
|
38
|
+
join(pluginsDir, 'cache', 'painworth-marketplace'),
|
|
39
|
+
join(pluginsDir, 'marketplaces', 'painworth-marketplace'),
|
|
40
|
+
];
|
|
41
|
+
for (const dir of dirsToRemove) {
|
|
42
|
+
try {
|
|
43
|
+
rmSync(dir, { recursive: true, force: true });
|
|
44
|
+
logger.debug({ path: dir }, 'Removed directory');
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
logger.warn({ path: dir, error: String(error) }, 'Failed to remove directory');
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// Reset installed_plugins.json
|
|
51
|
+
try {
|
|
52
|
+
mkdirSync(pluginsDir, { recursive: true });
|
|
53
|
+
writeFileSync(join(pluginsDir, 'installed_plugins.json'), JSON.stringify({ version: 2, plugins: {} }));
|
|
54
|
+
logger.debug('Reset installed_plugins.json');
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
logger.warn({ error: String(error) }, 'Failed to reset installed_plugins.json');
|
|
58
|
+
}
|
|
59
|
+
// Remove known_marketplaces.json and install-counts-cache.json
|
|
60
|
+
const filesToRemove = [
|
|
61
|
+
join(pluginsDir, 'known_marketplaces.json'),
|
|
62
|
+
join(pluginsDir, 'install-counts-cache.json'),
|
|
63
|
+
];
|
|
64
|
+
for (const file of filesToRemove) {
|
|
65
|
+
try {
|
|
66
|
+
rmSync(file, { force: true });
|
|
67
|
+
logger.debug({ path: file }, 'Removed file');
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
logger.warn({ path: file, error: String(error) }, 'Failed to remove file');
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// Remove enabledPlugins from settings.json
|
|
74
|
+
const settingsPath = join(claudeDir, 'settings.json');
|
|
75
|
+
try {
|
|
76
|
+
if (existsSync(settingsPath)) {
|
|
77
|
+
const raw = readFileSync(settingsPath, 'utf-8');
|
|
78
|
+
const settings = JSON.parse(raw);
|
|
79
|
+
delete settings['enabledPlugins'];
|
|
80
|
+
writeFileSync(settingsPath, JSON.stringify(settings, null, 2));
|
|
81
|
+
logger.debug('Removed enabledPlugins from settings.json');
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
logger.warn({ error: String(error) }, 'Failed to update settings.json');
|
|
86
|
+
}
|
|
87
|
+
logger.info('Phase 1 complete: Plugin state cleaned');
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Phase 2: Build Agency packages.
|
|
91
|
+
* Builds latency first, then agency. Creates .agency/config.json and verifies artifacts.
|
|
92
|
+
*/
|
|
93
|
+
function buildAgency(config) {
|
|
94
|
+
const logger = getLogger();
|
|
95
|
+
logger.info('Phase 2: Building Agency packages');
|
|
96
|
+
if (!existsSync(config.agencyDir)) {
|
|
97
|
+
logger.warn({ dir: config.agencyDir }, 'Agency directory not found, skipping');
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
// Build latency first
|
|
101
|
+
if (existsSync(config.latencyDir)) {
|
|
102
|
+
logger.info('Building latency dependency');
|
|
103
|
+
exec('pnpm install --no-frozen-lockfile', { cwd: config.latencyDir });
|
|
104
|
+
exec('pnpm build', { cwd: config.latencyDir });
|
|
105
|
+
logger.info('Latency built successfully');
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
logger.warn({ dir: config.latencyDir }, 'Latency directory not found, skipping');
|
|
109
|
+
}
|
|
110
|
+
// Install and build agency
|
|
111
|
+
logger.info('Installing agency dependencies');
|
|
112
|
+
exec('pnpm install --no-frozen-lockfile', { cwd: config.agencyDir });
|
|
113
|
+
logger.info('Building agency');
|
|
114
|
+
exec('pnpm build', { cwd: config.agencyDir });
|
|
115
|
+
// Create .agency/config.json if it doesn't exist
|
|
116
|
+
const agencyConfigDir = join(config.agencyDir, '.agency');
|
|
117
|
+
const agencyConfigPath = join(agencyConfigDir, 'config.json');
|
|
118
|
+
if (!existsSync(agencyConfigPath)) {
|
|
119
|
+
logger.info('Creating .agency/config.json');
|
|
120
|
+
mkdirSync(agencyConfigDir, { recursive: true });
|
|
121
|
+
writeFileSync(agencyConfigPath, JSON.stringify({
|
|
122
|
+
name: 'agency',
|
|
123
|
+
pluginPaths: [join(config.agencyDir, 'packages')],
|
|
124
|
+
defaultMode: 'coding',
|
|
125
|
+
modes: { coding: ['*'], research: ['*'], default: ['*'] },
|
|
126
|
+
}, null, 2));
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
logger.debug('.agency/config.json already exists');
|
|
130
|
+
}
|
|
131
|
+
// Verify artifacts
|
|
132
|
+
const agencyCli = join(config.agencyDir, 'packages', 'agency', 'dist', 'cli.js');
|
|
133
|
+
const specKitPlugin = join(config.agencyDir, 'packages', 'agency-plugin-spec-kit', 'dist', 'index.js');
|
|
134
|
+
if (!existsSync(agencyCli)) {
|
|
135
|
+
logger.error({ path: agencyCli }, 'Agency CLI artifact missing after build');
|
|
136
|
+
process.exit(1);
|
|
137
|
+
}
|
|
138
|
+
if (!existsSync(specKitPlugin)) {
|
|
139
|
+
logger.error({ path: specKitPlugin }, 'Spec-kit plugin artifact missing after build');
|
|
140
|
+
process.exit(1);
|
|
141
|
+
}
|
|
142
|
+
logger.info('Phase 2 complete: Agency built and verified');
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Phase 3: Build Generacy packages.
|
|
146
|
+
* Installs deps (excluding claude-code plugin), builds, links globally, and verifies artifacts.
|
|
147
|
+
*/
|
|
148
|
+
function buildGeneracy(config) {
|
|
149
|
+
const logger = getLogger();
|
|
150
|
+
logger.info('Phase 3: Building Generacy packages');
|
|
151
|
+
if (!existsSync(config.generacyDir)) {
|
|
152
|
+
logger.warn({ dir: config.generacyDir }, 'Generacy directory not found, skipping');
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
// Install deps with filter exclusion for claude-code plugin
|
|
156
|
+
// Hardcoded workaround: this plugin has build issues in the dev container
|
|
157
|
+
logger.info('Installing generacy dependencies');
|
|
158
|
+
exec('pnpm install --filter "!@generacy-ai/generacy-plugin-claude-code"', { cwd: config.generacyDir });
|
|
159
|
+
// Build
|
|
160
|
+
logger.info('Building generacy');
|
|
161
|
+
exec('pnpm build', { cwd: config.generacyDir });
|
|
162
|
+
// Link globally
|
|
163
|
+
logger.info('Linking generacy CLI globally');
|
|
164
|
+
exec('npm link', { cwd: join(config.generacyDir, 'packages', 'generacy') });
|
|
165
|
+
// Verify artifact
|
|
166
|
+
const cliArtifact = join(config.generacyDir, 'packages', 'generacy', 'dist', 'cli', 'index.js');
|
|
167
|
+
if (!existsSync(cliArtifact)) {
|
|
168
|
+
logger.error({ path: cliArtifact }, 'Generacy CLI artifact missing after build');
|
|
169
|
+
process.exit(1);
|
|
170
|
+
}
|
|
171
|
+
logger.info('Phase 3 complete: Generacy built and verified');
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Create the `setup build` subcommand.
|
|
175
|
+
*/
|
|
176
|
+
export function setupBuildCommand() {
|
|
177
|
+
const command = new Command('build');
|
|
178
|
+
command
|
|
179
|
+
.description('Clean plugins, build Agency and Generacy packages')
|
|
180
|
+
.option('--skip-cleanup', 'Skip Phase 1: Claude plugin state cleanup')
|
|
181
|
+
.option('--skip-agency', 'Skip Phase 2: Agency package build')
|
|
182
|
+
.option('--skip-generacy', 'Skip Phase 3: Generacy package build')
|
|
183
|
+
.action(async (options) => {
|
|
184
|
+
const logger = getLogger();
|
|
185
|
+
const config = resolveBuildConfig(options);
|
|
186
|
+
logger.info('Starting build process');
|
|
187
|
+
// Phase 1: Clean stale Claude plugin state
|
|
188
|
+
if (!config.skipCleanup) {
|
|
189
|
+
cleanPluginState();
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
logger.info('Skipping Phase 1: Plugin cleanup (--skip-cleanup)');
|
|
193
|
+
}
|
|
194
|
+
// Phase 2: Build Agency packages
|
|
195
|
+
if (!config.skipAgency) {
|
|
196
|
+
buildAgency(config);
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
logger.info('Skipping Phase 2: Agency build (--skip-agency)');
|
|
200
|
+
}
|
|
201
|
+
// Phase 3: Build Generacy packages
|
|
202
|
+
if (!config.skipGeneracy) {
|
|
203
|
+
buildGeneracy(config);
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
logger.info('Skipping Phase 3: Generacy build (--skip-generacy)');
|
|
207
|
+
}
|
|
208
|
+
logger.info('Build process complete');
|
|
209
|
+
});
|
|
210
|
+
return command;
|
|
211
|
+
}
|
|
212
|
+
//# sourceMappingURL=build.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../../../src/cli/commands/setup/build.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,UAAU,EACV,SAAS,EACT,YAAY,EACZ,MAAM,EACN,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAc3C;;GAEG;AACH,SAAS,kBAAkB,CAAC,OAA6B;IACvD,OAAO;QACL,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,KAAK;QACzC,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,KAAK;QACvC,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,KAAK;QAC3C,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,oBAAoB;QACpD,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,sBAAsB;QAC1D,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,qBAAqB;KACxD,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,gBAAgB;IACvB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACxC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAE9C,MAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;IAE3D,uCAAuC;IACvC,MAAM,YAAY,GAAG;QACnB,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,uBAAuB,CAAC;QAClD,IAAI,CAAC,UAAU,EAAE,cAAc,EAAE,uBAAuB,CAAC;KAC1D,CAAC;IAEF,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9C,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,mBAAmB,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,4BAA4B,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;IAED,+BAA+B;IAC/B,IAAI,CAAC;QACH,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,aAAa,CACX,IAAI,CAAC,UAAU,EAAE,wBAAwB,CAAC,EAC1C,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAC5C,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,wCAAwC,CAAC,CAAC;IAClF,CAAC;IAED,+DAA+D;IAC/D,MAAM,aAAa,GAAG;QACpB,IAAI,CAAC,UAAU,EAAE,yBAAyB,CAAC;QAC3C,IAAI,CAAC,UAAU,EAAE,2BAA2B,CAAC;KAC9C,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,IAAI,CAAC;YACH,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9B,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,cAAc,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,uBAAuB,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;IAED,2CAA2C;IAC3C,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;IACtD,IAAI,CAAC;QACH,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAC7B,MAAM,GAAG,GAAG,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAC;YAC5D,OAAO,QAAQ,CAAC,gBAAgB,CAAC,CAAC;YAClC,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC/D,MAAM,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,gCAAgC,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;AACxD,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAAC,MAAmB;IACtC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAE3B,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;IAEjD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,SAAS,EAAE,EAAE,sCAAsC,CAAC,CAAC;QAC/E,OAAO;IACT,CAAC;IAED,sBAAsB;IACtB,IAAI,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC3C,IAAI,CAAC,mCAAmC,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QACtE,IAAI,CAAC,YAAY,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QAC/C,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IAC5C,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE,uCAAuC,CAAC,CAAC;IACnF,CAAC;IAED,2BAA2B;IAC3B,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;IAC9C,IAAI,CAAC,mCAAmC,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;IACrE,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC/B,IAAI,CAAC,YAAY,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;IAE9C,iDAAiD;IACjD,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAC1D,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;IAC9D,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAC5C,SAAS,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,aAAa,CACX,gBAAgB,EAChB,IAAI,CAAC,SAAS,CACZ;YACE,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YACjD,WAAW,EAAE,QAAQ;YACrB,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE;SAC1D,EACD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACrD,CAAC;IAED,mBAAmB;IACnB,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IACjF,MAAM,aAAa,GAAG,IAAI,CACxB,MAAM,CAAC,SAAS,EAChB,UAAU,EACV,wBAAwB,EACxB,MAAM,EACN,UAAU,CACX,CAAC;IAEF,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,yCAAyC,CAAC,CAAC;QAC7E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC/B,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,8CAA8C,CAAC,CAAC;QACtF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;AAC7D,CAAC;AAED;;;GAGG;AACH,SAAS,aAAa,CAAC,MAAmB;IACxC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAE3B,MAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;IAEnD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,WAAW,EAAE,EAAE,wCAAwC,CAAC,CAAC;QACnF,OAAO;IACT,CAAC;IAED,4DAA4D;IAC5D,0EAA0E;IAC1E,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;IAChD,IAAI,CACF,mEAAmE,EACnE,EAAE,GAAG,EAAE,MAAM,CAAC,WAAW,EAAE,CAC5B,CAAC;IAEF,QAAQ;IACR,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACjC,IAAI,CAAC,YAAY,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;IAEhD,gBAAgB;IAChB,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAC7C,IAAI,CAAC,UAAU,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC;IAE5E,kBAAkB;IAClB,MAAM,WAAW,GAAG,IAAI,CACtB,MAAM,CAAC,WAAW,EAClB,UAAU,EACV,UAAU,EACV,MAAM,EACN,KAAK,EACL,UAAU,CACX,CAAC;IACF,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,2CAA2C,CAAC,CAAC;QACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;AAC/D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAErC,OAAO;SACJ,WAAW,CAAC,mDAAmD,CAAC;SAChE,MAAM,CAAC,gBAAgB,EAAE,2CAA2C,CAAC;SACrE,MAAM,CAAC,eAAe,EAAE,oCAAoC,CAAC;SAC7D,MAAM,CAAC,iBAAiB,EAAE,sCAAsC,CAAC;SACjE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAE3C,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QAEtC,2CAA2C;QAC3C,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YACxB,gBAAgB,EAAE,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;QACnE,CAAC;QAED,iCAAiC;QACjC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YACvB,WAAW,CAAC,MAAM,CAAC,CAAC;QACtB,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;QAChE,CAAC;QAED,mCAAmC;QACnC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;YACzB,aAAa,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;QACpE,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEL,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Setup services subcommand.
|
|
3
|
+
* Starts Firebase emulators and API servers for local development.
|
|
4
|
+
* Replaces .devcontainer/setup-cloud-services.sh
|
|
5
|
+
*/
|
|
6
|
+
import { Command } from 'commander';
|
|
7
|
+
/**
|
|
8
|
+
* Create the `setup services` subcommand.
|
|
9
|
+
*/
|
|
10
|
+
export declare function setupServicesCommand(): Command;
|
|
11
|
+
//# sourceMappingURL=services.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/setup/services.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmRpC;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAqI9C"}
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Setup services subcommand.
|
|
3
|
+
* Starts Firebase emulators and API servers for local development.
|
|
4
|
+
* Replaces .devcontainer/setup-cloud-services.sh
|
|
5
|
+
*/
|
|
6
|
+
import { Command } from 'commander';
|
|
7
|
+
import { createWriteStream, existsSync, mkdirSync, readdirSync, writeFileSync, } from 'node:fs';
|
|
8
|
+
import net from 'node:net';
|
|
9
|
+
import { join } from 'node:path';
|
|
10
|
+
import { getLogger } from '../../utils/logger.js';
|
|
11
|
+
import { exec, spawnBackground } from '../../utils/exec.js';
|
|
12
|
+
/**
|
|
13
|
+
* Port allocations and directory paths per service.
|
|
14
|
+
*/
|
|
15
|
+
const SERVICES = {
|
|
16
|
+
generacy: {
|
|
17
|
+
name: 'generacy',
|
|
18
|
+
cloudDir: '/workspaces/generacy-cloud',
|
|
19
|
+
emulatorPorts: { firestore: 8080, auth: 9099, ui: 4000 },
|
|
20
|
+
api: { port: 3010, projectId: 'generacy-cloud' },
|
|
21
|
+
},
|
|
22
|
+
humancy: {
|
|
23
|
+
name: 'humancy',
|
|
24
|
+
cloudDir: '/workspaces/humancy-cloud',
|
|
25
|
+
emulatorPorts: { firestore: 8081, auth: 9199, ui: 4001 },
|
|
26
|
+
api: { port: 3002, projectId: 'humancy-cloud' },
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Resolve services config with three-tier priority: defaults → env vars → CLI args.
|
|
31
|
+
*/
|
|
32
|
+
function resolveServicesConfig(cliArgs) {
|
|
33
|
+
return {
|
|
34
|
+
only: cliArgs.only ?? 'all',
|
|
35
|
+
skipApi: cliArgs.skipApi ?? false,
|
|
36
|
+
timeout: cliArgs.timeout ?? 60,
|
|
37
|
+
logDir: cliArgs.logDir ?? '/tmp/cloud-services',
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Get the list of enabled services based on the --only filter.
|
|
42
|
+
*/
|
|
43
|
+
function getEnabledServices(only) {
|
|
44
|
+
if (only === 'all') {
|
|
45
|
+
return [SERVICES.generacy, SERVICES.humancy];
|
|
46
|
+
}
|
|
47
|
+
return [SERVICES[only]];
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Ensure dependencies are installed for a cloud repo.
|
|
51
|
+
* Checks that node_modules has a reasonable number of entries.
|
|
52
|
+
*/
|
|
53
|
+
function ensureDeps(service) {
|
|
54
|
+
const logger = getLogger();
|
|
55
|
+
if (!existsSync(service.cloudDir)) {
|
|
56
|
+
logger.warn({ dir: service.cloudDir }, `${service.name}-cloud directory not found, skipping`);
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
const nodeModulesDir = join(service.cloudDir, 'node_modules');
|
|
60
|
+
let modCount = 0;
|
|
61
|
+
try {
|
|
62
|
+
modCount = readdirSync(nodeModulesDir).length;
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
// node_modules doesn't exist
|
|
66
|
+
}
|
|
67
|
+
if (modCount < 10) {
|
|
68
|
+
logger.info({ service: service.name }, 'Installing dependencies');
|
|
69
|
+
exec('pnpm install', { cwd: service.cloudDir });
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Build a cloud repo if the API dist directory is missing.
|
|
74
|
+
*/
|
|
75
|
+
function buildIfNeeded(service) {
|
|
76
|
+
const logger = getLogger();
|
|
77
|
+
const apiDist = join(service.cloudDir, 'services', 'api', 'dist');
|
|
78
|
+
if (!existsSync(apiDist)) {
|
|
79
|
+
logger.info({ service: service.name }, 'Building');
|
|
80
|
+
exec('pnpm run build', { cwd: service.cloudDir });
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
logger.debug({ service: service.name }, 'Already built');
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Start Firebase emulators for a service.
|
|
88
|
+
* Returns the spawned child process.
|
|
89
|
+
*/
|
|
90
|
+
function startEmulators(service, logDir) {
|
|
91
|
+
const logger = getLogger();
|
|
92
|
+
const logFile = join(logDir, `${service.name}-emulators.log`);
|
|
93
|
+
const out = createWriteStream(logFile);
|
|
94
|
+
logger.info({
|
|
95
|
+
service: service.name,
|
|
96
|
+
firestore: service.emulatorPorts.firestore,
|
|
97
|
+
auth: service.emulatorPorts.auth,
|
|
98
|
+
ui: service.emulatorPorts.ui,
|
|
99
|
+
}, 'Starting Firebase emulators');
|
|
100
|
+
const child = spawnBackground('firebase', ['emulators:start'], {
|
|
101
|
+
cwd: service.cloudDir,
|
|
102
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
103
|
+
detached: true,
|
|
104
|
+
});
|
|
105
|
+
child.stdout?.pipe(out);
|
|
106
|
+
child.stderr?.pipe(out);
|
|
107
|
+
logger.info({ service: service.name, pid: child.pid, log: logFile }, 'Emulators started');
|
|
108
|
+
return child;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Start the API dev server for a service.
|
|
112
|
+
* Returns the spawned child process.
|
|
113
|
+
*/
|
|
114
|
+
function startApiServer(service, logDir) {
|
|
115
|
+
const logger = getLogger();
|
|
116
|
+
const logFile = join(logDir, `${service.name}-api.log`);
|
|
117
|
+
const out = createWriteStream(logFile);
|
|
118
|
+
const apiDir = join(service.cloudDir, 'services', 'api');
|
|
119
|
+
logger.info({ service: service.name, port: service.api.port }, 'Starting API server');
|
|
120
|
+
const child = spawnBackground('npx', ['tsx', 'watch', 'src/index.ts'], {
|
|
121
|
+
cwd: apiDir,
|
|
122
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
123
|
+
detached: true,
|
|
124
|
+
env: {
|
|
125
|
+
...process.env,
|
|
126
|
+
FIRESTORE_EMULATOR_HOST: `127.0.0.1:${service.emulatorPorts.firestore}`,
|
|
127
|
+
FIREBASE_AUTH_EMULATOR_HOST: `127.0.0.1:${service.emulatorPorts.auth}`,
|
|
128
|
+
FIREBASE_PROJECT_ID: service.api.projectId,
|
|
129
|
+
PORT: String(service.api.port),
|
|
130
|
+
STRIPE_API_KEY: process.env['STRIPE_API_KEY'] ?? 'sk_test_dev_placeholder',
|
|
131
|
+
STRIPE_SECRET_KEY: process.env['STRIPE_SECRET_KEY'] ?? 'sk_test_dev_placeholder',
|
|
132
|
+
STRIPE_WEBHOOK_SECRET: process.env['STRIPE_WEBHOOK_SECRET'] ?? 'whsec_test_dev_placeholder',
|
|
133
|
+
},
|
|
134
|
+
});
|
|
135
|
+
child.stdout?.pipe(out);
|
|
136
|
+
child.stderr?.pipe(out);
|
|
137
|
+
logger.info({ service: service.name, pid: child.pid, log: logFile }, 'API server started');
|
|
138
|
+
return child;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Wait for a TCP port to become available.
|
|
142
|
+
* Uses net.Socket for zero-dependency health checks.
|
|
143
|
+
*/
|
|
144
|
+
async function waitForPort(port, name, timeoutSec) {
|
|
145
|
+
const start = Date.now();
|
|
146
|
+
while (Date.now() - start < timeoutSec * 1000) {
|
|
147
|
+
try {
|
|
148
|
+
await new Promise((resolve, reject) => {
|
|
149
|
+
const socket = new net.Socket();
|
|
150
|
+
socket.setTimeout(1000);
|
|
151
|
+
socket.connect(port, '127.0.0.1', () => {
|
|
152
|
+
socket.destroy();
|
|
153
|
+
resolve();
|
|
154
|
+
});
|
|
155
|
+
socket.on('error', reject);
|
|
156
|
+
socket.on('timeout', () => {
|
|
157
|
+
socket.destroy();
|
|
158
|
+
reject(new Error('timeout'));
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
return true;
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
await new Promise((r) => setTimeout(r, 1000));
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return false;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Register graceful shutdown handler.
|
|
171
|
+
* Sends SIGTERM to all children, then SIGKILL after 5 seconds.
|
|
172
|
+
*/
|
|
173
|
+
function registerShutdownHandler(children) {
|
|
174
|
+
const logger = getLogger();
|
|
175
|
+
const shutdown = () => {
|
|
176
|
+
logger.info('Shutting down services');
|
|
177
|
+
for (const child of children) {
|
|
178
|
+
if (child.pid && !child.killed) {
|
|
179
|
+
try {
|
|
180
|
+
process.kill(-child.pid, 'SIGTERM');
|
|
181
|
+
}
|
|
182
|
+
catch {
|
|
183
|
+
// Process may already be dead
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
// Force kill after 5 seconds
|
|
188
|
+
setTimeout(() => {
|
|
189
|
+
for (const child of children) {
|
|
190
|
+
if (child.pid && !child.killed) {
|
|
191
|
+
try {
|
|
192
|
+
process.kill(-child.pid, 'SIGKILL');
|
|
193
|
+
}
|
|
194
|
+
catch {
|
|
195
|
+
// Process may already be dead
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}, 5000);
|
|
200
|
+
};
|
|
201
|
+
process.on('SIGTERM', shutdown);
|
|
202
|
+
process.on('SIGINT', shutdown);
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Create the `setup services` subcommand.
|
|
206
|
+
*/
|
|
207
|
+
export function setupServicesCommand() {
|
|
208
|
+
const command = new Command('services');
|
|
209
|
+
command
|
|
210
|
+
.description('Start Firebase emulators and API servers')
|
|
211
|
+
.option('--only <target>', 'Start only generacy or humancy services (default: all)', 'all')
|
|
212
|
+
.option('--skip-api', 'Start only emulators without API servers')
|
|
213
|
+
.option('--timeout <seconds>', 'Health check timeout in seconds', '60')
|
|
214
|
+
.action(async (options) => {
|
|
215
|
+
const logger = getLogger();
|
|
216
|
+
const config = resolveServicesConfig({
|
|
217
|
+
...options,
|
|
218
|
+
timeout: options.timeout ? Number(options.timeout) : undefined,
|
|
219
|
+
});
|
|
220
|
+
logger.info('Starting cloud backend services');
|
|
221
|
+
logger.info({ only: config.only, skipApi: config.skipApi, timeout: config.timeout }, 'Configuration');
|
|
222
|
+
// Step 1: Setup log directory and truncate existing logs
|
|
223
|
+
mkdirSync(config.logDir, { recursive: true });
|
|
224
|
+
const enabledServices = getEnabledServices(config.only);
|
|
225
|
+
for (const service of enabledServices) {
|
|
226
|
+
// Truncate existing log files
|
|
227
|
+
const emulatorLog = join(config.logDir, `${service.name}-emulators.log`);
|
|
228
|
+
const apiLog = join(config.logDir, `${service.name}-api.log`);
|
|
229
|
+
writeFileSync(emulatorLog, '');
|
|
230
|
+
if (!config.skipApi) {
|
|
231
|
+
writeFileSync(apiLog, '');
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
// Track all spawned children for shutdown handler
|
|
235
|
+
const children = [];
|
|
236
|
+
registerShutdownHandler(children);
|
|
237
|
+
// Step 2: Ensure deps & build per service
|
|
238
|
+
for (const service of enabledServices) {
|
|
239
|
+
if (!existsSync(service.cloudDir)) {
|
|
240
|
+
logger.warn({ service: service.name, dir: service.cloudDir }, 'Cloud directory not found, skipping');
|
|
241
|
+
continue;
|
|
242
|
+
}
|
|
243
|
+
ensureDeps(service);
|
|
244
|
+
buildIfNeeded(service);
|
|
245
|
+
}
|
|
246
|
+
// Step 3: Start emulators
|
|
247
|
+
for (const service of enabledServices) {
|
|
248
|
+
if (!existsSync(service.cloudDir)) {
|
|
249
|
+
continue;
|
|
250
|
+
}
|
|
251
|
+
const child = startEmulators(service, config.logDir);
|
|
252
|
+
children.push(child);
|
|
253
|
+
}
|
|
254
|
+
// Step 4: Start API servers (unless --skip-api)
|
|
255
|
+
if (!config.skipApi) {
|
|
256
|
+
for (const service of enabledServices) {
|
|
257
|
+
if (!existsSync(service.cloudDir)) {
|
|
258
|
+
continue;
|
|
259
|
+
}
|
|
260
|
+
const child = startApiServer(service, config.logDir);
|
|
261
|
+
children.push(child);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
// Step 5: Health checks
|
|
265
|
+
logger.info('Waiting for services to be ready');
|
|
266
|
+
for (const service of enabledServices) {
|
|
267
|
+
if (!existsSync(service.cloudDir)) {
|
|
268
|
+
continue;
|
|
269
|
+
}
|
|
270
|
+
// Wait for emulator ports
|
|
271
|
+
const firestoreReady = await waitForPort(service.emulatorPorts.firestore, `${service.name} Firestore`, config.timeout);
|
|
272
|
+
if (firestoreReady) {
|
|
273
|
+
logger.info({ service: service.name, port: service.emulatorPorts.firestore }, 'Firestore emulator ready');
|
|
274
|
+
}
|
|
275
|
+
else {
|
|
276
|
+
logger.warn({ service: service.name, port: service.emulatorPorts.firestore, timeout: config.timeout }, 'Firestore emulator not ready after timeout');
|
|
277
|
+
}
|
|
278
|
+
// Wait for API port (unless --skip-api)
|
|
279
|
+
if (!config.skipApi) {
|
|
280
|
+
const apiTimeout = Math.min(config.timeout, 30);
|
|
281
|
+
const apiReady = await waitForPort(service.api.port, `${service.name} API`, apiTimeout);
|
|
282
|
+
if (apiReady) {
|
|
283
|
+
logger.info({ service: service.name, port: service.api.port }, 'API server ready');
|
|
284
|
+
}
|
|
285
|
+
else {
|
|
286
|
+
logger.warn({ service: service.name, port: service.api.port, timeout: apiTimeout }, 'API server not ready after timeout');
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
logger.info({ logDir: config.logDir }, 'Cloud services started');
|
|
291
|
+
});
|
|
292
|
+
return command;
|
|
293
|
+
}
|
|
294
|
+
//# sourceMappingURL=services.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"services.js","sourceRoot":"","sources":["../../../../src/cli/commands/setup/services.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
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
|
+
/**
|
|
8
|
+
* Create the `setup workspace` subcommand.
|
|
9
|
+
*/
|
|
10
|
+
export declare function setupWorkspaceCommand(): Command;
|
|
11
|
+
//# sourceMappingURL=workspace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/setup/workspace.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6NpC;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CA2E/C"}
|