Files
reporting-governance-plugin/plugins/reporting-governance/scripts/package-smoke.mjs

112 lines
3.9 KiB
JavaScript

#!/usr/bin/env node
import fs from 'node:fs';
import os from 'node:os';
import path from 'node:path';
import process from 'node:process';
import { generateDeploymentProfileArtifactFromFile } from '../src/storage/profile-generator.mjs';
import { runOrchestratorAdapter } from '../src/adapters/orchestrator.mjs';
const packageRoot = path.resolve(import.meta.dirname, '..');
function parseArgs(argv) {
const args = {
workspace: null,
now: '2026-05-07T08:20:00.000Z',
compact: false,
};
for (let i = 0; i < argv.length; i += 1) {
const token = argv[i];
if (token === '--compact') { args.compact = true; continue; }
if (token === '--workspace') { args.workspace = argv[i + 1] ?? null; i += 1; continue; }
if (token.startsWith('--workspace=')) { args.workspace = token.slice('--workspace='.length) || null; continue; }
if (token === '--now') { args.now = argv[i + 1] ?? args.now; i += 1; continue; }
if (token.startsWith('--now=')) { args.now = token.slice('--now='.length) || args.now; continue; }
}
return args;
}
function mkdirs(root, names) {
for (const name of names) {
fs.mkdirSync(path.join(root, name), { recursive: true });
}
}
function writeState(root) {
const statePath = path.join(root, 'watchdog-state.json');
fs.writeFileSync(statePath, `${JSON.stringify({
version: 1,
watchdogs: [
{
id: 'reporting-governance-plugin-watchdog',
task: 'reporting-governance plugin package smoke',
status: 'active',
ownerSessionKey: 'agent:coder:main',
reportChannel: 'telegram',
reportTarget: '864811879',
intervalMinutes: 10,
lastMilestoneAt: '2026-05-07T08:00:00.000Z',
lastAlertAt: null,
}
]
}, null, 2)}\n`, 'utf8');
return statePath;
}
function main() {
const args = parseArgs(process.argv.slice(2));
const workspace = path.resolve(args.workspace ?? fs.mkdtempSync(path.join(os.tmpdir(), 'reporting-governance-package-smoke-')));
mkdirs(workspace, ['evidence', 'events', 'queue', 'spool', 'receipts']);
const state = writeState(workspace);
const profileSourcePath = path.join(packageRoot, 'profiles-src', 'strict-manager-mode.yaml');
const artifact = generateDeploymentProfileArtifactFromFile(profileSourcePath);
const artifactPath = path.join(workspace, 'strict-manager-mode.profile.json');
fs.writeFileSync(artifactPath, `${JSON.stringify(artifact, null, 2)}\n`, 'utf8');
const result = runOrchestratorAdapter({
runtimeBinding: {
cwd: process.cwd(),
scripts: {
orchestrator: path.join(packageRoot, 'scripts', 'watchdog_auto_notify_orchestrator.mjs'),
watchdog: path.join(packageRoot, 'scripts', 'long_task_watchdog.mjs'),
dispatcher: path.join(packageRoot, 'scripts', 'operator_notify_dispatcher.mjs'),
bridgeSupervisor: path.join(packageRoot, 'scripts', 'operator_notify_bridge_supervisor.mjs'),
senderBinding: path.join(packageRoot, 'scripts', 'operator_notify_sender_binding.mjs'),
},
},
state,
evidenceDir: path.join(workspace, 'evidence'),
eventDir: path.join(workspace, 'events'),
queueDir: path.join(workspace, 'queue'),
spoolDir: path.join(workspace, 'spool'),
receiptDir: path.join(workspace, 'receipts'),
writeState: true,
dryRun: true,
now: args.now,
});
const payload = {
ok: true,
tool: 'reporting-governance-package-smoke',
packageRoot,
workspace,
artifactPath,
generatedProfileSource: profileSourcePath,
orchestrator: {
ok: result?.ok === true,
dispatchedCount: result?.result?.dispatcher?.dispatchedCount ?? null,
pendingCount: result?.result?.supervisor?.pendingCount ?? null,
notificationCount: result?.result?.watchdog?.notificationCount ?? null,
executionOrder: result?.executionOrder ?? null,
},
};
process.stdout.write(`${JSON.stringify(payload, null, args.compact ? 0 : 2)}\n`);
}
main();