#!/usr/bin/env node import fs from 'node:fs'; import path from 'node:path'; import process from 'node:process'; const ROOT_DIR = path.resolve(import.meta.dirname, '..'); const STATE_DIR = path.join(ROOT_DIR, 'state', 'subagent-delivery-watchdog'); function parseArgs(argv) { const args = { compact: false, input: null, help: false, }; for (let i = 0; i < argv.length; i += 1) { const token = argv[i]; if (token === '--compact') { args.compact = true; continue; } if (token === '--help' || token === '-h') { args.help = true; continue; } if (token === '--input') { args.input = argv[i + 1] ?? null; i += 1; continue; } if (token.startsWith('--input=')) { args.input = token.slice('--input='.length) || null; continue; } } return args; } function printHelp() { const lines = [ 'Usage: node scripts/subagent_delivery_watchdog.mjs [--compact] [--input ]', '', 'Minimal CLI skeleton for the subagent delivery watchdog.', ]; process.stdout.write(`${lines.join('\n')}\n`); } function tryReadInput(inputPath) { if (!inputPath) { return { path: null, exists: false, bytes: 0, preview: '', }; } try { const content = fs.readFileSync(inputPath, 'utf8'); return { path: inputPath, exists: true, bytes: Buffer.byteLength(content, 'utf8'), preview: content.slice(0, 200), content, }; } catch (error) { return { path: inputPath, exists: false, bytes: 0, preview: '', error: error instanceof Error ? error.message : String(error), }; } } function tryParseJson(content) { if (typeof content !== 'string' || content.length === 0) { return null; } try { return JSON.parse(content); } catch { return null; } } function writeDispatchReceiptState(payload) { if (!payload || typeof payload !== 'object') { return null; } const { runId, childSessionKey, dispatchAt, expectedBy } = payload; if (![runId, childSessionKey, dispatchAt, expectedBy].every((value) => typeof value === 'string' && value.length > 0)) { return null; } fs.mkdirSync(STATE_DIR, { recursive: true }); const statePath = path.join(STATE_DIR, `${runId}.json`); const dispatchRecord = { runId, childSessionKey, dispatchAt, expectedBy, }; fs.writeFileSync(statePath, `${JSON.stringify(dispatchRecord, null, 2)}\n`, 'utf8'); return { statePath, record: dispatchRecord, }; } function main() { const args = parseArgs(process.argv.slice(2)); if (args.help) { printHelp(); process.exit(0); } const input = tryReadInput(args.input); const inputPayload = input.exists ? tryParseJson(input.content) : null; const dispatchWrite = writeDispatchReceiptState(inputPayload); if ('content' in input) { delete input.content; } const response = { ok: true, tool: 'subagent_delivery_watchdog', version: 'skeleton-v2', mode: 'dispatch-receipt-write', args: { compact: args.compact, input: args.input, }, input, result: { status: 'not_implemented', message: 'Dispatch receipt write is implemented; status recompute remains pending.', records: dispatchWrite ? [dispatchWrite.record] : [], dispatchReceiptWrite: dispatchWrite, }, }; const spacing = args.compact ? 0 : 2; process.stdout.write(`${JSON.stringify(response, null, spacing)}\n`); } main();