#!/usr/bin/env node const assert = require("assert"); const cp = require("child_process"); const path = require("path"); const repo = path.resolve(__dirname, ".."); const project = path.join(repo, "examples/launch-build-demo"); function disasmer(args, env = {}) { return cp.execFileSync( "cargo", ["run", "-q", "-p", "disasmer-cli", "--bin", "disasmer", "--", ...args], { cwd: repo, encoding: "utf8", env: { ...process.env, ...env, }, } ); } function json(args, env) { return JSON.parse(disasmer(args, env)); } function assertHuman(name, output, requiredPatterns) { assert( !output.trimStart().startsWith("{"), `${name} default output should be human-readable text, not JSON` ); for (const pattern of requiredPatterns) { assert.match(output, pattern, `${name} human output missing ${pattern}`); } } const helpHuman = disasmer(["help"]); assertHuman("help", helpHuman, [ /Primary workflow:/, /disasmer login --browser/, /disasmer project init/, /disasmer node attach --worker/, /Disasmer: Launch Virtual Process/, /Hosted account creation happens in the browser login flow/, /--json/, ]); const loginHuman = disasmer(["login", "--coordinator", "https://coord.example.test"]); assertHuman("login", loginHuman, [ /Disasmer login/, /flow: device/, /verify: https:\/\/coord\.example\.test\/auth\/device/, ]); const loginJson = json(["login", "--coordinator", "https://coord.example.test", "--json"]); assert.strictEqual(loginJson.coordinator, "https://coord.example.test"); assert(loginJson.human_flow.Device); const doctorHuman = disasmer(["doctor"]); assertHuman("doctor", doctorHuman, [ /Disasmer doctor/, /coordinator reachability: not_configured/, /dependencies:/, /auth:/, /node capabilities:/, ]); const doctorJson = json(["doctor", "--json"]); assert.strictEqual(doctorJson.coordinator_reachability.checked, false); assert.strictEqual(doctorJson.coordinator_reachability.status, "not_configured"); const authJson = json(["auth", "status", "--json"], { DISASMER_TOKEN: "token", DISASMER_TOKEN_EXPIRES_AT: "2026-07-04T00:00:00Z", }); assert.strictEqual(authJson.session.kind, "human"); assert.strictEqual(authJson.session.token_expiry_posture, "expires_at"); assert.strictEqual(authJson.session.expires_at, "2026-07-04T00:00:00Z"); const inspectHuman = disasmer(["bundle", "inspect", "--project", project]); assertHuman("bundle inspect", inspectHuman, [ /Disasmer bundle inspect/, /bundle: sha256:/, /environments:/, ]); const inspectJson = json(["bundle", "inspect", "--project", project, "--json"]); assert.strictEqual(inspectJson.project, project); assert.match(inspectJson.metadata.identity, /^sha256:/); console.log("CLI output mode smoke passed");