feat(backend): scaffold PodMan agent pipeline + token server
Express server with /health and a LiveKit token endpoint. Module skeletons for the full loop: vision (Gemini), GitHub fusion, collision detector (pure, testable), intervention engine, and continual-learning memory store. Approve native build scripts (esbuild/genai/protobufjs) at the workspace root. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
import 'dotenv/config';
|
||||
|
||||
/** Reads an env var, throwing if it is required but missing. */
|
||||
function read(name: string, required = false): string {
|
||||
const value = process.env[name] ?? '';
|
||||
if (required && !value) {
|
||||
throw new Error(`Missing required env var: ${name}`);
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
export const env = {
|
||||
port: Number(process.env.PORT ?? 8787),
|
||||
|
||||
livekit: {
|
||||
url: read('LIVEKIT_URL'),
|
||||
apiKey: read('LIVEKIT_API_KEY'),
|
||||
apiSecret: read('LIVEKIT_API_SECRET'),
|
||||
},
|
||||
|
||||
gemini: {
|
||||
apiKey: read('GEMINI_API_KEY'),
|
||||
visionModel: process.env.GEMINI_VISION_MODEL ?? 'gemini-3.5-flash',
|
||||
liveModel: process.env.GEMINI_LIVE_MODEL ?? '',
|
||||
},
|
||||
|
||||
github: {
|
||||
token: read('GITHUB_TOKEN'),
|
||||
repo: read('GITHUB_REPO'),
|
||||
},
|
||||
|
||||
mongo: {
|
||||
uri: read('MONGODB_URI'),
|
||||
},
|
||||
|
||||
voyage: {
|
||||
apiKey: read('VOYAGE_API_KEY'),
|
||||
},
|
||||
} as const;
|
||||
Reference in New Issue
Block a user