| #!/usr/bin/env node |
|
|
| import process from 'node:process'; |
| import { restoreAuthSession, startKeepAlivePing, startAutoBackup } from './hf_sync.js'; |
| import { createTemplateAgentHttpServer } from './a2a-http.js'; |
| import { buildAgentCard, resolveTemplateAgentConfig } from './metadata.js'; |
| import { startMcpServer } from './mcp-server.js'; |
| import { startAutonomousIdleLoop } from './idle-monetization.js'; |
| import { triggerFleetSelfHealing } from './self-healing.js'; |
| import { executeTemplateAgentAction, type TemplateAgentAction } from './runtime.js'; |
|
|
| async function main(): Promise<void> { |
| const command = process.argv[2] || 'help'; |
| switch (command) { |
| case 'serve': |
| case 'serve-a2a': |
| await serveA2A(); |
| return; |
| case 'serve-mcp': |
| await startMcpServer(); |
| return; |
| case 'print-card': |
| printJson(buildAgentCard(resolveTemplateAgentConfig().publicBaseUrl)); |
| return; |
| case 'run-action': |
| await runAction(); |
| return; |
| default: |
| printUsage(); |
| } |
| } |
|
|
| async function serveA2A() { |
| const config = resolveTemplateAgentConfig(); |
| const handle = createTemplateAgentHttpServer(); |
| await handle.start(); |
| |
| |
| startAutonomousIdleLoop(); |
| printJson({ ok: true, command: 'serve-a2a', host: config.host, port: config.port, baseUrl: config.publicBaseUrl }); |
| } |
|
|
| async function runAction() { |
| const raw = process.argv[3]?.trim() || (await readStdin()).trim(); |
| if (!raw) throw new Error('missing_action_json'); |
| printJson(await executeTemplateAgentAction(JSON.parse(raw) as TemplateAgentAction)); |
| } |
|
|
| function printUsage() { |
| process.stderr.write( |
| ['Usage:', ' sin-frontend serve-a2a', ' sin-frontend serve-mcp', ' sin-frontend print-card', ` sin-frontend run-action '{"action":"agent.help"}'`].join('\n') + '\n', |
| ); |
| } |
|
|
| function printJson(payload: unknown) { |
| process.stdout.write(`${JSON.stringify(payload, null, 2)}\n`); |
| } |
|
|
| async function readStdin() { |
| const chunks: Buffer[] = []; |
| for await (const chunk of process.stdin) chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk)); |
| return Buffer.concat(chunks).toString('utf8'); |
| } |
|
|
| main().catch((error) => { |
| process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`); |
| process.exitCode = 1; |
| }); |
|
|
|
|