sin-github-issues / scripts /comment-as-github-app.mjs
OpenCode
Deploy latest SIN-GitHub-Issues runtime
cd455f6
Raw
History Blame Contribute Delete
1.57 kB
#!/usr/bin/env node
import { execFile } from 'node:child_process';
import { promisify } from 'node:util';
const execFileAsync = promisify(execFile);
function parseArgs(argv) {
const out = {};
for (let i = 0; i < argv.length; i += 1) {
const token = argv[i];
if (!token.startsWith('--')) continue;
const key = token.slice(2);
const next = argv[i + 1];
if (!next || next.startsWith('--')) {
out[key] = 'true';
continue;
}
out[key] = next;
i += 1;
}
return out;
}
function required(args, key) {
const value = args[key];
if (!value || !String(value).trim()) {
throw new Error(`missing_required_arg: --${key}`);
}
return String(value).trim();
}
async function main() {
const args = parseArgs(process.argv.slice(2));
const action = {
action: 'sin.github.issue.comment.as_app',
agentSlug: required(args, 'agent'),
repo: required(args, 'repo'),
issueNumber: Number(required(args, 'issue-number')),
installationId: Number(required(args, 'installation-id')),
body: required(args, 'body'),
};
if (!Number.isFinite(action.issueNumber) || !Number.isFinite(action.installationId)) {
throw new Error('invalid_numeric_args: --issue-number and --installation-id must be numbers');
}
const { stdout } = await execFileAsync('node', ['dist/src/cli.js', 'run-action', JSON.stringify(action)], {
cwd: process.cwd(),
});
process.stdout.write(stdout);
}
main().catch((error) => {
console.error(error instanceof Error ? error.message : String(error));
process.exit(1);
});