import test from "node:test"; import assert from "node:assert/strict"; import { readFile } from "node:fs/promises"; import path from "node:path"; import { fileURLToPath } from "node:url"; const repoRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), ".."); test("shipped local-agent configs include browser and desktop runtime smoke defaults", async () => { const exampleConfig = JSON.parse( await readFile(path.join(repoRoot, "local-agent", "config.example.json"), "utf8"), ); const cloudConfig = JSON.parse( await readFile(path.join(repoRoot, "local-agent", "config.cloud.json"), "utf8"), ); assert.equal(exampleConfig.browserControlEnabled, true); assert.equal(cloudConfig.browserControlEnabled, true); assert.equal(exampleConfig.browserControlCommand, "node"); assert.equal(cloudConfig.browserControlCommand, "node"); assert.deepEqual(exampleConfig.browserControlArgs, ["scripts/browser-control-smoke.mjs"]); assert.deepEqual(cloudConfig.browserControlArgs, ["scripts/browser-control-smoke.mjs"]); assert.equal(exampleConfig.browserAutomationConnected, true); assert.equal(cloudConfig.browserAutomationConnected, true); assert.equal(exampleConfig.computerUseEnabled, true); assert.equal(cloudConfig.computerUseEnabled, true); assert.equal(exampleConfig.computerUseCommand, "node"); assert.equal(cloudConfig.computerUseCommand, "node"); assert.deepEqual(exampleConfig.computerUseArgs, ["scripts/computer-use-smoke.mjs"]); assert.deepEqual(cloudConfig.computerUseArgs, ["scripts/computer-use-smoke.mjs"]); assert.equal(exampleConfig.computerUseConnected, true); assert.equal(cloudConfig.computerUseConnected, true); assert.equal(exampleConfig.dialogGuardEnabled, true); assert.equal(cloudConfig.dialogGuardEnabled, true); assert.equal(exampleConfig.dialogGuardConsentRequired, true); assert.equal(cloudConfig.dialogGuardConsentRequired, true); assert.deepEqual(exampleConfig.dialogGuardPlatformAdapters, ["darwin", "win32"]); assert.deepEqual(cloudConfig.dialogGuardPlatformAdapters, ["darwin", "win32"]); assert.equal(exampleConfig.dialogGuardMacActionCommand, ""); assert.equal(cloudConfig.dialogGuardMacActionCommand, ""); assert.deepEqual(exampleConfig.dialogGuardMacActionArgs, []); assert.deepEqual(cloudConfig.dialogGuardMacActionArgs, []); assert.equal(exampleConfig.dialogGuardWindowsActionCommand, ""); assert.equal(cloudConfig.dialogGuardWindowsActionCommand, ""); assert.deepEqual(exampleConfig.dialogGuardWindowsActionArgs, []); assert.deepEqual(cloudConfig.dialogGuardWindowsActionArgs, []); assert.equal(exampleConfig.codexDesktopRefreshEnabled, true); assert.equal(cloudConfig.codexDesktopRefreshEnabled, true); assert.equal(exampleConfig.codexDesktopRefreshCommand, "node"); assert.equal(cloudConfig.codexDesktopRefreshCommand, "node"); assert.deepEqual(exampleConfig.codexDesktopRefreshArgs, ["scripts/codex-desktop-refresh-hint.mjs"]); assert.deepEqual(cloudConfig.codexDesktopRefreshArgs, ["scripts/codex-desktop-refresh-hint.mjs"]); assert.equal(exampleConfig.codexDesktopRefreshEndpoint, "http://127.0.0.1:4318/api/v1/codex-desktop/refresh"); assert.equal(cloudConfig.codexDesktopRefreshEndpoint, "http://127.0.0.1:4318/api/v1/codex-desktop/refresh"); assert.equal(exampleConfig.codexDesktopRefreshAppName, "Codex"); assert.equal(cloudConfig.codexDesktopRefreshAppName, "Codex"); assert.equal(exampleConfig.codexDesktopRefreshMode, "deeplink-reload"); assert.equal(cloudConfig.codexDesktopRefreshMode, "deeplink-reload"); assert.equal(exampleConfig.codexDesktopRefreshRetryCount, 2); assert.equal(cloudConfig.codexDesktopRefreshRetryCount, 2); assert.equal(exampleConfig.codexDesktopRefreshRetryDelayMs, 120); assert.equal(cloudConfig.codexDesktopRefreshRetryDelayMs, 120); }); test("repo ships browser and desktop smoke runtime scripts", async () => { const browserSmoke = await readFile(path.join(repoRoot, "scripts", "browser-control-smoke.mjs"), "utf8"); const computerSmoke = await readFile(path.join(repoRoot, "scripts", "computer-use-smoke.mjs"), "utf8"); const codexDesktopRefreshHint = await readFile( path.join(repoRoot, "scripts", "codex-desktop-refresh-hint.mjs"), "utf8", ); const codexDesktopRefreshBridgeDaemon = await readFile( path.join(repoRoot, "scripts", "codex-desktop-refresh-bridge-daemon.mjs"), "utf8", ); const codexDesktopEventConsumer = await readFile( path.join(repoRoot, "scripts", "codex-desktop-event-consumer.mjs"), "utf8", ); const codexDesktopIntegrationProbe = await readFile( path.join(repoRoot, "scripts", "codex-desktop-integration-probe.mjs"), "utf8", ); const codexDesktopBridgeLaunchAgent = await readFile( path.join(repoRoot, "deployment", "launchd", "com.hyzq.boss.codex-desktop-bridge.plist"), "utf8", ); assert.match(browserSmoke, /status/); assert.match(browserSmoke, /replyBody/); assert.match(browserSmoke, /BOSS_BROWSER_AUTOMATION_MODE/); assert.match(computerSmoke, /status/); assert.match(computerSmoke, /replyBody/); assert.match(computerSmoke, /resolveOpenAppPrefixArgs/); assert.match(computerSmoke, /BOSS_COMPUTER_USE_MODE/); assert.match(computerSmoke, /osascript/); assert.match(codexDesktopRefreshHint, /codex_desktop_refresh_hint/); assert.match(codexDesktopRefreshHint, /osascript/); assert.match(codexDesktopRefreshHint, /activate/); assert.match(codexDesktopRefreshHint, /refreshMode/); assert.match(codexDesktopRefreshHint, /codex:\/\/threads\//); assert.match(codexDesktopRefreshHint, /BOSS_CODEX_DESKTOP_REFRESH_DRY_RUN/); assert.match(codexDesktopRefreshHint, /key code 15/); assert.match(codexDesktopRefreshBridgeDaemon, /api\/v1\/codex-desktop\/refresh/); assert.match(codexDesktopRefreshBridgeDaemon, /api\/v1\/codex-desktop\/events/); assert.match(codexDesktopRefreshBridgeDaemon, /text\/event-stream/); assert.match(codexDesktopRefreshBridgeDaemon, /127\.0\.0\.1/); assert.match(codexDesktopEventConsumer, /BOSS_CODEX_DESKTOP_EVENTS_URL/); assert.match(codexDesktopEventConsumer, /BOSS_CODEX_DESKTOP_EVENTS_ONCE/); assert.match(codexDesktopEventConsumer, /codex_desktop_refresh/); assert.match(codexDesktopIntegrationProbe, /BOSS_CODEX_DESKTOP_APP_PATH/); assert.match(codexDesktopIntegrationProbe, /codex:\/\/threads\/\{threadId\}/); assert.match(codexDesktopIntegrationProbe, /packagePatch/); assert.match(codexDesktopBridgeLaunchAgent, /codex-desktop-refresh-bridge-daemon\.mjs/); assert.match(codexDesktopBridgeLaunchAgent, /BOSS_CODEX_DESKTOP_BRIDGE_PORT/); });