112 lines
3.9 KiB
JavaScript
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();
|