delqhi/sin-github-issues
0
1#!/usr/bin/env node2 3import { execFile } from 'node:child_process';4import { promisify } from 'node:util';5 6const execFileAsync = promisify(execFile);7 8function parseArgs(argv) {9 const out = {};10 for (let i = 0; i < argv.length; i += 1) {11 const token = argv[i];12 if (!token.startsWith('--')) continue;13 const key = token.slice(2);14 const next = argv[i + 1];15 if (!next || next.startsWith('--')) {16 out[key] = 'true';17 continue;18 }19 out[key] = next;20 i += 1;21 }22 return out;23}24 25function required(args, key) {26 const value = args[key];27 if (!value || !String(value).trim()) {28 throw new Error(`missing_required_arg: --${key}`);29 }30 return String(value).trim();31}32 33async function main() {34 const args = parseArgs(process.argv.slice(2));35 const action = {36 action: 'sin.github.issue.comment.as_app',37 agentSlug: required(args, 'agent'),38 repo: required(args, 'repo'),39 issueNumber: Number(required(args, 'issue-number')),40 installationId: Number(required(args, 'installation-id')),41 body: required(args, 'body'),42 };43 44 if (!Number.isFinite(action.issueNumber) || !Number.isFinite(action.installationId)) {45 throw new Error('invalid_numeric_args: --issue-number and --installation-id must be numbers');46 }47 48 const { stdout } = await execFileAsync('node', ['dist/src/cli.js', 'run-action', JSON.stringify(action)], {49 cwd: process.cwd(),50 });51 process.stdout.write(stdout);52}53 54main().catch((error) => {55 console.error(error instanceof Error ? error.message : String(error));56 process.exit(1);57});58 