File size: 2,127 Bytes
d07c56c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#!/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 { 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();
  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-code-datascience serve-a2a', '  sin-code-datascience serve-mcp', '  sin-code-datascience print-card', `  sin-code-datascience 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;
});