Files
pikasTech-HWLAB/cmd/hwlab-agent-worker/main.ts
T

119 lines
3.4 KiB
JavaScript

#!/usr/bin/env node
import { buildMetadataFromEnv } from "../../internal/build-metadata.mjs";
import { AGENT_WORKER_SERVICE_ID } from "../../internal/agent/index.mjs";
import {
assessSkillsInjection,
resolveAgentRuntimeStateDir,
runLocalWorkerDryRun
} from "../../internal/agent/runtime.mjs";
const command = process.argv[2] || "help";
const options = parseOptions(process.argv.slice(3));
try {
const result = await dispatch(command, options);
printJSON(result);
} catch (error) {
printJSON(
{
serviceId: AGENT_WORKER_SERVICE_ID,
ok: false,
error: {
message: error.message
}
},
{ stderr: true }
);
process.exit(1);
}
async function dispatch(name, opts) {
if (name === "help" || opts.help) {
return help();
}
if (name === "health") {
return {
serviceId: AGENT_WORKER_SERVICE_ID,
ok: true,
status: "ok",
environment: process.env.HWLAB_ENVIRONMENT || "dev",
...buildMetadataFromEnv(process.env, { serviceId: AGENT_WORKER_SERVICE_ID }),
runtimeMode: "local-dry-run",
skills: assessSkillsInjection({
skillCommitId: opts.skillCommitId,
skillVersion: opts.skillVersion,
role: "worker"
})
};
}
if (name === "dry-run" || name === "smoke") {
return {
ok: true,
...(await runLocalWorkerDryRun({
stateDir: opts.stateDir,
agentSessionId: requireOption(opts, "agentSessionId", "--agent-session-id"),
skillCommitId: opts.skillCommitId || null,
skillVersion: opts.skillVersion || null
}))
};
}
throw new Error(`unknown command ${JSON.stringify(name)}`);
}
function parseOptions(argv) {
const opts = {
stateDir: process.env.HWLAB_AGENT_RUNTIME_STATE_DIR || "",
agentSessionId: process.env.HWLAB_AGENT_SESSION_ID || "",
skillCommitId: process.env.HWLAB_SKILL_COMMIT_ID || "",
skillVersion: process.env.HWLAB_SKILL_VERSION || ""
};
for (let i = 0; i < argv.length; i += 1) {
const arg = argv[i];
if (arg === "--agent-session-id") opts.agentSessionId = argv[++i] || "";
else if (arg === "--skill-commit-id") opts.skillCommitId = argv[++i] || "";
else if (arg === "--skill-version") opts.skillVersion = argv[++i] || "";
else if (arg === "--state-dir") opts.stateDir = argv[++i] || "";
else if (arg === "--help" || arg === "-h") opts.help = true;
else throw new Error(`unknown option ${JSON.stringify(arg)}`);
}
if (opts.stateDir) {
opts.stateDir = resolveAgentRuntimeStateDir(opts.stateDir);
}
return opts;
}
function requireOption(opts, key, flag) {
if (!opts[key]) {
throw new Error(`${flag} is required`);
}
return opts[key];
}
function help() {
return {
serviceId: AGENT_WORKER_SERVICE_ID,
ok: true,
usage: [
"bun run cmd/hwlab-agent-worker/main.ts health [--skill-commit-id COMMIT --skill-version VERSION]",
"bun run cmd/hwlab-agent-worker/main.ts dry-run --agent-session-id ID [--skill-commit-id COMMIT --skill-version VERSION] [--state-dir DIR]"
],
contract: {
output: "json",
runtimeMode: "local-dry-run",
prodDisabled: true,
behavior: "claim queued local session, write trace and evidence, cleanup workspace, exit"
}
};
}
function printJSON(value, { stderr = false } = {}) {
const target = stderr ? process.stderr : process.stdout;
target.write(`${JSON.stringify(value, null, 2)}\n`);
}