@vm0/cli 9.111.3 → 9.111.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{chunk-JZJGXOGN.js → chunk-PQ25AQY6.js} +366 -227
- package/chunk-PQ25AQY6.js.map +1 -0
- package/index.js +10 -10
- package/package.json +1 -1
- package/zero.js +6 -6
- package/zero.js.map +1 -1
- package/chunk-JZJGXOGN.js.map +0 -1
package/zero.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/zero.ts","../src/commands/zero/org/index.ts","../src/commands/zero/org/status.ts","../src/commands/zero/org/set.ts","../src/commands/zero/org/list.ts","../src/commands/zero/org/use.ts","../src/commands/zero/org/members.ts","../src/commands/zero/org/invite.ts","../src/commands/zero/org/remove.ts","../src/commands/zero/org/leave.ts","../src/commands/zero/org/delete.ts","../src/commands/zero/org/secret/index.ts","../src/commands/zero/org/secret/list.ts","../src/commands/zero/org/secret/set.ts","../src/commands/zero/org/secret/remove.ts","../src/commands/zero/org/variable/index.ts","../src/commands/zero/org/variable/list.ts","../src/commands/zero/org/variable/set.ts","../src/commands/zero/org/variable/remove.ts","../src/commands/zero/org/model-provider/index.ts","../src/commands/zero/org/model-provider/list.ts","../src/commands/zero/org/model-provider/setup.ts","../src/lib/domain/model-provider/shared.ts","../src/commands/zero/org/model-provider/remove.ts","../src/commands/zero/org/model-provider/set-default.ts","../src/commands/zero/agent/index.ts","../src/commands/zero/agent/create.ts","../src/commands/zero/agent/edit.ts","../src/commands/zero/agent/view.ts","../src/lib/utils/format-utils.ts","../src/commands/zero/agent/list.ts","../src/commands/zero/agent/delete.ts","../src/commands/zero/connector/index.ts","../src/commands/zero/connector/connect.ts","../src/lib/computer/start-services.ts","../src/lib/computer/ngrok.ts","../src/commands/zero/connector/list.ts","../src/commands/zero/connector/status.ts","../src/lib/domain/schedule-utils.ts","../src/commands/zero/connector/disconnect.ts","../src/commands/zero/doctor/index.ts","../src/commands/zero/doctor/missing-token.ts","../src/commands/zero/doctor/platform-url.ts","../src/commands/zero/doctor/permission-deny.ts","../src/commands/zero/doctor/permission-change.ts","../src/commands/zero/doctor/resolve-role.ts","../src/commands/zero/preference/index.ts","../src/commands/zero/run/index.ts","../src/commands/zero/run/run.ts","../src/commands/zero/run/shared.ts","../src/commands/zero/run/continue.ts","../src/commands/zero/schedule/index.ts","../src/commands/zero/schedule/setup.ts","../src/commands/zero/schedule/list.ts","../src/commands/zero/schedule/status.ts","../src/commands/zero/schedule/delete.ts","../src/commands/zero/schedule/enable.ts","../src/commands/zero/schedule/disable.ts","../src/commands/zero/secret/index.ts","../src/commands/zero/secret/list.ts","../src/commands/zero/secret/set.ts","../src/commands/zero/secret/delete.ts","../src/commands/zero/slack/index.ts","../src/commands/zero/slack/message/index.ts","../src/commands/zero/slack/message/send.ts","../src/commands/zero/slack/upload-file.ts","../src/commands/zero/variable/index.ts","../src/commands/zero/variable/list.ts","../src/commands/zero/variable/set.ts","../src/commands/zero/variable/delete.ts","../src/commands/zero/whoami.ts","../src/commands/zero/skill/index.ts","../src/commands/zero/skill/create.ts","../src/lib/skill-directory.ts","../src/commands/zero/skill/edit.ts","../src/commands/zero/skill/view.ts","../src/commands/zero/skill/list.ts","../src/commands/zero/skill/delete.ts","../src/commands/zero/logs/index.ts","../src/commands/zero/logs/list.ts","../src/commands/zero/logs/search.ts","../src/commands/zero/developer-support.ts","../src/commands/zero/computer-use/index.ts","../src/commands/zero/computer-use/host.ts","../src/lib/computer-use/desktop-server.ts","../src/lib/computer-use/screencapture.ts","../src/lib/computer-use/cliclick.ts","../src/lib/computer-use/scroll.ts","../src/lib/computer-use/clipboard.ts","../src/lib/computer-use/application.ts","../src/lib/computer-use/ngrok.ts","../src/commands/zero/computer-use/client.ts","../src/lib/computer-use/client.ts","../src/commands/zero/phone/index.ts","../src/commands/zero/phone/call.ts","../src/commands/zero/phone/format.ts","../src/commands/zero/phone/record.ts","../src/commands/zero/voice-chat/index.ts","../src/commands/zero/voice-chat/context/index.ts","../src/commands/zero/voice-chat/context/get.ts","../src/commands/zero/voice-chat/context/append.ts"],"sourcesContent":["// Zero CLI entry point - standalone binary for zero platform commands\n// Sentry must be initialized before any other imports\nimport \"./instrument.js\";\nimport { Command } from \"commander\";\nimport { configureGlobalProxyFromEnv } from \"./lib/network/proxy.js\";\nimport { zeroOrgCommand } from \"./commands/zero/org\";\nimport { zeroAgentCommand } from \"./commands/zero/agent\";\nimport { zeroConnectorCommand } from \"./commands/zero/connector\";\nimport { zeroDoctorCommand } from \"./commands/zero/doctor\";\nimport { zeroPreferenceCommand } from \"./commands/zero/preference\";\nimport { zeroRunCommand } from \"./commands/zero/run\";\nimport { zeroScheduleCommand } from \"./commands/zero/schedule\";\nimport { zeroSecretCommand } from \"./commands/zero/secret\";\nimport { zeroSlackCommand } from \"./commands/zero/slack\";\nimport { zeroVariableCommand } from \"./commands/zero/variable\";\nimport { zeroWhoamiCommand } from \"./commands/zero/whoami\";\nimport { zeroSkillCommand } from \"./commands/zero/skill\";\nimport { zeroLogsCommand } from \"./commands/zero/logs\";\nimport { zeroDeveloperSupportCommand } from \"./commands/zero/developer-support\";\nimport { zeroComputerUseCommand } from \"./commands/zero/computer-use\";\nimport { zeroPhoneCommand } from \"./commands/zero/phone\";\nimport { zeroVoiceChatCommand } from \"./commands/zero/voice-chat\";\nimport {\n decodeZeroTokenPayload,\n type ZeroTokenPayload,\n} from \"./lib/api/zero-token.js\";\n\n/**\n * Map of command names to the capability required to see them.\n * Commands not in this map are hidden when ZERO_TOKEN is active.\n * Use `null` for commands that should always be visible in sandbox.\n */\nconst COMMAND_CAPABILITY_MAP: Record<string, string | null> = {\n agent: \"agent:read\",\n skill: \"agent:read\",\n connector: \"connector:read\",\n run: \"agent-run:write\",\n schedule: \"schedule:read\",\n doctor: null,\n logs: \"agent-run:read\",\n slack: \"slack:write\",\n whoami: null,\n \"developer-support\": null,\n \"computer-use\": \"computer-use:write\",\n phone: \"phone:write\",\n \"voice-chat\": \"voice-chat:write\",\n};\n\nconst DEFAULT_COMMANDS: Command[] = [\n zeroOrgCommand,\n zeroAgentCommand,\n zeroConnectorCommand,\n zeroDoctorCommand,\n zeroPreferenceCommand,\n zeroRunCommand,\n zeroScheduleCommand,\n zeroSecretCommand,\n zeroSlackCommand,\n zeroVariableCommand,\n zeroLogsCommand,\n zeroWhoamiCommand,\n zeroSkillCommand,\n zeroDeveloperSupportCommand,\n zeroComputerUseCommand,\n zeroPhoneCommand,\n zeroVoiceChatCommand,\n];\n\nfunction shouldHideCommand(\n name: string,\n payload: ZeroTokenPayload | undefined,\n): boolean {\n if (!payload) return false;\n const requiredCap = COMMAND_CAPABILITY_MAP[name];\n if (requiredCap === undefined) return true;\n return requiredCap !== null && !payload.capabilities.includes(requiredCap);\n}\n\n/**\n * Register commands with visibility based on ZERO_TOKEN capabilities.\n * Commands not granted by the token are registered as hidden via\n * Commander's public `addCommand(cmd, { hidden: true })` API.\n * When no ZERO_TOKEN is present, all commands remain visible.\n *\n * @param commands - override default commands (used in tests)\n */\nexport function registerZeroCommands(\n prog: Command,\n commands?: Command[],\n): void {\n const token = process.env.ZERO_TOKEN;\n const payload = token ? decodeZeroTokenPayload(token) : undefined;\n\n for (const cmd of commands ?? DEFAULT_COMMANDS) {\n const hidden = shouldHideCommand(cmd.name(), payload);\n prog.addCommand(cmd, hidden ? { hidden: true } : {});\n }\n}\n\nconst program = new Command();\n\ndeclare const __CLI_VERSION__: string;\n\nprogram\n .name(\"zero\")\n .description(\n \"Zero CLI — interact with the zero platform from inside the sandbox\",\n )\n .version(__CLI_VERSION__)\n .addHelpText(\n \"after\",\n `\nExamples:\n Missing a token? zero doctor missing-token <TOKEN_NAME>\n Delegate to teammate? zero run --help\n Send a Slack message? zero slack message send --help\n Set up a schedule? zero schedule setup --help\n Update yourself? zero agent --help\n Manage custom skills? zero skill --help\n Check your identity? zero whoami`,\n );\n\nexport { program };\n\nif (\n process.argv[1]?.endsWith(\"zero.js\") ||\n process.argv[1]?.endsWith(\"zero.ts\") ||\n process.argv[1]?.endsWith(\"zero\")\n) {\n configureGlobalProxyFromEnv();\n registerZeroCommands(program);\n program.parse();\n}\n","import { Command } from \"commander\";\nimport { statusCommand } from \"./status\";\nimport { setCommand } from \"./set\";\nimport { listCommand } from \"./list\";\nimport { useCommand } from \"./use\";\nimport { membersCommand } from \"./members\";\nimport { inviteCommand } from \"./invite\";\nimport { removeCommand } from \"./remove\";\nimport { leaveCommand } from \"./leave\";\nimport { deleteCommand } from \"./delete\";\nimport { zeroOrgSecretCommand } from \"./secret\";\nimport { zeroOrgVariableCommand } from \"./variable\";\nimport { zeroOrgModelProviderCommand } from \"./model-provider\";\n\nexport const zeroOrgCommand = new Command()\n .name(\"org\")\n .description(\"Manage organization settings, members, and providers\")\n .addCommand(statusCommand)\n .addCommand(setCommand)\n .addCommand(listCommand)\n .addCommand(useCommand)\n .addCommand(membersCommand)\n .addCommand(inviteCommand)\n .addCommand(removeCommand)\n .addCommand(leaveCommand)\n .addCommand(deleteCommand)\n .addCommand(zeroOrgSecretCommand)\n .addCommand(zeroOrgVariableCommand)\n .addCommand(zeroOrgModelProviderCommand);\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { getZeroOrg } from \"../../../lib/api\";\nimport { ApiRequestError } from \"../../../lib/api/core/client-factory\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const statusCommand = new Command()\n .name(\"status\")\n .description(\"View current organization status\")\n .action(\n withErrorHandler(async () => {\n try {\n const org = await getZeroOrg();\n\n console.log(chalk.bold(\"Organization Information:\"));\n console.log(` Slug: ${chalk.green(org.slug)}`);\n } catch (error) {\n if (error instanceof ApiRequestError && error.status === 404) {\n throw new Error(\"No organization configured\", {\n cause: new Error(\"Set your organization with: zero org set <slug>\"),\n });\n }\n throw error;\n }\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { getZeroOrg, updateZeroOrg, switchZeroOrg } from \"../../../lib/api\";\nimport { saveConfig } from \"../../../lib/api/config\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const setCommand = new Command()\n .name(\"set\")\n .description(\"Rename your organization slug\")\n .argument(\"<slug>\", \"The new organization slug\")\n .option(\n \"--force\",\n \"Force change existing organization (may break references)\",\n )\n .action(\n withErrorHandler(async (slug: string, options: { force?: boolean }) => {\n try {\n const existingOrg = await getZeroOrg();\n\n if (!options.force) {\n throw new Error(\n `You already have an organization: ${existingOrg.slug}`,\n {\n cause: new Error(`To change, use: zero org set ${slug} --force`),\n },\n );\n }\n\n const org = await updateZeroOrg({ slug, force: true });\n\n const result = await switchZeroOrg(org.slug);\n await saveConfig({\n token: result.access_token,\n });\n\n console.log(chalk.green(`✓ Organization updated to ${org.slug}`));\n console.log();\n console.log(\"Your agents will now be namespaced as:\");\n console.log(chalk.cyan(` ${org.slug}/<agent-name>`));\n } catch (error) {\n if (\n error instanceof Error &&\n error.message.includes(\"already exists\")\n ) {\n throw new Error(\n `Organization \"${slug}\" is already taken. Please choose a different slug.`,\n );\n }\n throw error;\n }\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { listZeroOrgs } from \"../../../lib/api\";\nimport { getActiveOrg } from \"../../../lib/api/config\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const listCommand = new Command()\n .name(\"list\")\n .description(\"List all accessible organizations\")\n .action(\n withErrorHandler(async () => {\n const result = await listZeroOrgs();\n const activeOrg = await getActiveOrg();\n\n console.log(chalk.bold(\"Available organizations:\"));\n for (const org of result.orgs) {\n const isCurrent = org.slug === activeOrg;\n const marker = isCurrent ? chalk.green(\"* \") : \" \";\n const roleLabel = org.role ? ` (${org.role})` : \"\";\n const currentLabel = isCurrent ? chalk.dim(\" ← current\") : \"\";\n console.log(`${marker}${org.slug}${roleLabel}${currentLabel}`);\n }\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { listZeroOrgs, switchZeroOrg } from \"../../../lib/api\";\nimport { saveConfig } from \"../../../lib/api/config\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const useCommand = new Command()\n .name(\"use\")\n .description(\"Switch to a different organization\")\n .argument(\"<slug>\", \"Organization slug to switch to\")\n .action(\n withErrorHandler(async (slug: string) => {\n const orgList = await listZeroOrgs();\n const target = orgList.orgs.find((s) => {\n return s.slug === slug;\n });\n if (!target) {\n throw new Error(`Organization '${slug}' not found or not accessible.`);\n }\n\n const result = await switchZeroOrg(slug);\n await saveConfig({\n token: result.access_token,\n });\n console.log(chalk.green(`✓ Switched to organization: ${slug}`));\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { getZeroOrgMembers } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const membersCommand = new Command()\n .name(\"members\")\n .description(\"View organization members\")\n .action(\n withErrorHandler(async () => {\n const status = await getZeroOrgMembers();\n\n console.log(chalk.bold(`Organization: ${status.slug}`));\n console.log(` Role: ${status.role}`);\n console.log(\n ` Created: ${new Date(status.createdAt).toLocaleDateString()}`,\n );\n console.log();\n console.log(chalk.bold(\"Members:\"));\n for (const member of status.members) {\n const roleTag =\n member.role === \"admin\"\n ? chalk.yellow(` (${member.role})`)\n : chalk.dim(` (${member.role})`);\n console.log(` ${member.email}${roleTag}`);\n }\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { inviteZeroOrgMember } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const inviteCommand = new Command()\n .name(\"invite\")\n .description(\"Invite a member to the current organization\")\n .requiredOption(\"--email <email>\", \"Email address of the member to invite\")\n .option(\n \"--role <role>\",\n \"Role for the invited member (member or admin)\",\n \"member\",\n )\n .action(\n withErrorHandler(async (options: { email: string; role: string }) => {\n if (options.role !== \"member\" && options.role !== \"admin\") {\n throw new Error(\n `Invalid role \"${options.role}\". Must be \"member\" or \"admin\".`,\n );\n }\n await inviteZeroOrgMember(options.email, options.role);\n console.log(\n chalk.green(`✓ Invitation sent to ${options.email} as ${options.role}`),\n );\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { removeZeroOrgMember } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const removeCommand = new Command()\n .name(\"remove\")\n .description(\"Remove a member from the current organization\")\n .argument(\"<email>\", \"Email address of the member to remove\")\n .action(\n withErrorHandler(async (email: string) => {\n await removeZeroOrgMember(email);\n console.log(chalk.green(`✓ Removed ${email} from organization`));\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { leaveZeroOrg, listZeroOrgs, switchZeroOrg } from \"../../../lib/api\";\nimport { saveConfig } from \"../../../lib/api/config\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const leaveCommand = new Command()\n .name(\"leave\")\n .description(\"Leave the current organization\")\n .action(\n withErrorHandler(async () => {\n await leaveZeroOrg();\n\n const { orgs } = await listZeroOrgs();\n if (orgs.length === 0) {\n await saveConfig({ token: undefined });\n console.log(chalk.green(\"✓ Left organization.\"));\n console.log(\n chalk.yellow(\"No remaining organizations. Run: vm0 auth login\"),\n );\n return;\n }\n\n const nextOrg = orgs[0]!.slug;\n const result = await switchZeroOrg(nextOrg);\n await saveConfig({\n token: result.access_token,\n });\n console.log(chalk.green(`✓ Left organization. Switched to: ${nextOrg}`));\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { deleteZeroOrg } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const deleteCommand = new Command()\n .name(\"delete\")\n .description(\"Delete the current organization (admin only)\")\n .argument(\"<slug>\", \"Organization slug to confirm deletion\")\n .action(\n withErrorHandler(async (slug: string) => {\n await deleteZeroOrg(slug);\n console.log(chalk.green(`✓ Organization '${slug}' has been deleted.`));\n }),\n );\n","import { Command } from \"commander\";\nimport { listCommand } from \"./list\";\nimport { setCommand } from \"./set\";\nimport { removeCommand } from \"./remove\";\n\nexport const zeroOrgSecretCommand = new Command()\n .name(\"secret\")\n .description(\"Manage org-level secrets (admin)\")\n .addCommand(listCommand)\n .addCommand(setCommand)\n .addCommand(removeCommand);\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { listZeroOrgSecrets } from \"../../../../lib/api\";\nimport { withErrorHandler } from \"../../../../lib/command\";\n\nexport const listCommand = new Command()\n .name(\"list\")\n .alias(\"ls\")\n .description(\"List all org-level secrets\")\n .action(\n withErrorHandler(async () => {\n const result = await listZeroOrgSecrets();\n\n if (result.secrets.length === 0) {\n console.log(chalk.dim(\"No org secrets found\"));\n console.log();\n console.log(\"To add an org secret:\");\n console.log(\n chalk.cyan(\" zero org secret set MY_API_KEY --body <value>\"),\n );\n return;\n }\n\n console.log(chalk.bold(\"Org Secrets:\"));\n console.log();\n\n for (const secret of result.secrets) {\n console.log(` ${chalk.cyan(secret.name)}`);\n if (secret.description) {\n console.log(` ${chalk.dim(secret.description)}`);\n }\n console.log(\n ` ${chalk.dim(`Updated: ${new Date(secret.updatedAt).toLocaleString()}`)}`,\n );\n console.log();\n }\n\n console.log(chalk.dim(`Total: ${result.secrets.length} secret(s)`));\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { setZeroOrgSecret } from \"../../../../lib/api\";\nimport {\n isInteractive,\n promptPassword,\n} from \"../../../../lib/utils/prompt-utils\";\nimport { withErrorHandler } from \"../../../../lib/command\";\n\nexport const setCommand = new Command()\n .name(\"set\")\n .description(\"Create or update an org-level secret (admin only)\")\n .argument(\"<name>\", \"Secret name (uppercase, e.g., MY_API_KEY)\")\n .option(\n \"-b, --body <value>\",\n \"Secret value (required in non-interactive mode)\",\n )\n .option(\"-d, --description <description>\", \"Optional description\")\n .action(\n withErrorHandler(\n async (\n name: string,\n options: { body?: string; description?: string },\n ) => {\n let value: string;\n\n if (options.body !== undefined) {\n value = options.body;\n } else if (isInteractive()) {\n const prompted = await promptPassword(\"Enter secret value:\");\n if (prompted === undefined) {\n console.log(chalk.dim(\"Cancelled\"));\n return;\n }\n value = prompted;\n } else {\n throw new Error(\"--body is required in non-interactive mode\", {\n cause: new Error(\n `Usage: zero org secret set ${name} --body \"your-secret-value\"`,\n ),\n });\n }\n\n let secret;\n try {\n secret = await setZeroOrgSecret({\n name,\n value,\n description: options.description,\n });\n } catch (error) {\n if (\n error instanceof Error &&\n error.message.includes(\"must contain only uppercase\")\n ) {\n throw new Error(error.message, {\n cause: new Error(\n \"Examples of valid secret names: MY_API_KEY, GITHUB_TOKEN, AWS_ACCESS_KEY_ID\",\n ),\n });\n }\n throw error;\n }\n\n console.log(chalk.green(`✓ Org secret \"${secret.name}\" saved`));\n },\n ),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { deleteZeroOrgSecret } from \"../../../../lib/api\";\nimport {\n isInteractive,\n promptConfirm,\n} from \"../../../../lib/utils/prompt-utils\";\nimport { withErrorHandler } from \"../../../../lib/command\";\n\nexport const removeCommand = new Command()\n .name(\"remove\")\n .description(\"Delete an org-level secret (admin only)\")\n .argument(\"<name>\", \"Secret name to delete\")\n .option(\"-y, --yes\", \"Skip confirmation prompt\")\n .action(\n withErrorHandler(async (name: string, options: { yes?: boolean }) => {\n if (!options.yes) {\n if (!isInteractive()) {\n throw new Error(\"--yes flag is required in non-interactive mode\");\n }\n\n const confirmed = await promptConfirm(\n `Are you sure you want to delete org secret \"${name}\"?`,\n false,\n );\n\n if (!confirmed) {\n console.log(chalk.dim(\"Cancelled\"));\n return;\n }\n }\n\n await deleteZeroOrgSecret(name);\n console.log(chalk.green(`✓ Org secret \"${name}\" deleted`));\n }),\n );\n","import { Command } from \"commander\";\nimport { listCommand } from \"./list\";\nimport { setCommand } from \"./set\";\nimport { removeCommand } from \"./remove\";\n\nexport const zeroOrgVariableCommand = new Command()\n .name(\"variable\")\n .description(\"Manage org-level variables (admin)\")\n .addCommand(listCommand)\n .addCommand(setCommand)\n .addCommand(removeCommand);\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { listZeroOrgVariables } from \"../../../../lib/api\";\nimport { withErrorHandler } from \"../../../../lib/command\";\n\n/**\n * Truncate value for display if too long\n */\nfunction truncateValue(value: string, maxLength: number = 60): string {\n if (value.length <= maxLength) {\n return value;\n }\n return value.slice(0, maxLength - 15) + \"... [truncated]\";\n}\n\nexport const listCommand = new Command()\n .name(\"list\")\n .alias(\"ls\")\n .description(\"List all org-level variables\")\n .action(\n withErrorHandler(async () => {\n const result = await listZeroOrgVariables();\n\n if (result.variables.length === 0) {\n console.log(chalk.dim(\"No org variables found\"));\n console.log();\n console.log(\"To add an org variable:\");\n console.log(chalk.cyan(\" zero org variable set MY_VAR <value>\"));\n return;\n }\n\n console.log(chalk.bold(\"Org Variables:\"));\n console.log();\n\n for (const variable of result.variables) {\n const displayValue = truncateValue(variable.value);\n console.log(` ${chalk.cyan(variable.name)} = ${displayValue}`);\n if (variable.description) {\n console.log(` ${chalk.dim(variable.description)}`);\n }\n console.log(\n ` ${chalk.dim(`Updated: ${new Date(variable.updatedAt).toLocaleString()}`)}`,\n );\n console.log();\n }\n\n console.log(chalk.dim(`Total: ${result.variables.length} variable(s)`));\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { setZeroOrgVariable } from \"../../../../lib/api\";\nimport { withErrorHandler } from \"../../../../lib/command\";\n\nexport const setCommand = new Command()\n .name(\"set\")\n .description(\"Create or update an org-level variable (admin only)\")\n .argument(\"<name>\", \"Variable name (uppercase, e.g., MY_VAR)\")\n .argument(\"<value>\", \"Variable value\")\n .option(\"-d, --description <description>\", \"Optional description\")\n .action(\n withErrorHandler(\n async (\n name: string,\n value: string,\n options: { description?: string },\n ) => {\n let variable;\n try {\n variable = await setZeroOrgVariable({\n name,\n value,\n description: options.description,\n });\n } catch (error) {\n if (\n error instanceof Error &&\n error.message.includes(\"must contain only uppercase\")\n ) {\n throw new Error(error.message, {\n cause: new Error(\n \"Examples of valid variable names: MY_VAR, API_URL, DEBUG_MODE\",\n ),\n });\n }\n throw error;\n }\n\n console.log(chalk.green(`✓ Org variable \"${variable.name}\" saved`));\n },\n ),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { deleteZeroOrgVariable } from \"../../../../lib/api\";\nimport {\n isInteractive,\n promptConfirm,\n} from \"../../../../lib/utils/prompt-utils\";\nimport { withErrorHandler } from \"../../../../lib/command\";\n\nexport const removeCommand = new Command()\n .name(\"remove\")\n .description(\"Delete an org-level variable (admin only)\")\n .argument(\"<name>\", \"Variable name to delete\")\n .option(\"-y, --yes\", \"Skip confirmation prompt\")\n .action(\n withErrorHandler(async (name: string, options: { yes?: boolean }) => {\n if (!options.yes) {\n if (!isInteractive()) {\n throw new Error(\"--yes flag is required in non-interactive mode\");\n }\n\n const confirmed = await promptConfirm(\n `Are you sure you want to delete org variable \"${name}\"?`,\n false,\n );\n\n if (!confirmed) {\n console.log(chalk.dim(\"Cancelled\"));\n return;\n }\n }\n\n await deleteZeroOrgVariable(name);\n console.log(chalk.green(`✓ Org variable \"${name}\" deleted`));\n }),\n );\n","import { Command } from \"commander\";\nimport { listCommand } from \"./list\";\nimport { setupCommand } from \"./setup\";\nimport { removeCommand } from \"./remove\";\nimport { setDefaultCommand } from \"./set-default\";\n\nexport const zeroOrgModelProviderCommand = new Command()\n .name(\"model-provider\")\n .description(\"Manage org-level model providers\")\n .addCommand(listCommand)\n .addCommand(setupCommand)\n .addCommand(removeCommand)\n .addCommand(setDefaultCommand);\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { listZeroOrgModelProviders } from \"../../../../lib/api\";\nimport { withErrorHandler } from \"../../../../lib/command\";\n\nexport const listCommand = new Command()\n .name(\"list\")\n .alias(\"ls\")\n .description(\"List all org-level model providers\")\n .action(\n withErrorHandler(async () => {\n const result = await listZeroOrgModelProviders();\n\n if (result.modelProviders.length === 0) {\n console.log(chalk.dim(\"No org-level model providers configured\"));\n console.log();\n console.log(\"To add an org-level model provider:\");\n console.log(chalk.cyan(\" zero org model-provider setup\"));\n return;\n }\n\n // Group by framework\n const byFramework = result.modelProviders.reduce(\n (acc, p) => {\n const fw = p.framework;\n if (!acc[fw]) {\n acc[fw] = [];\n }\n acc[fw].push(p);\n return acc;\n },\n {} as Record<string, typeof result.modelProviders>,\n );\n\n console.log(chalk.bold(\"Org Model Providers:\"));\n console.log();\n\n for (const [framework, providers] of Object.entries(byFramework)) {\n console.log(` ${chalk.cyan(framework)}:`);\n for (const provider of providers) {\n const defaultTag = provider.isDefault\n ? chalk.green(\" (default)\")\n : \"\";\n const modelTag = provider.selectedModel\n ? chalk.dim(` [${provider.selectedModel}]`)\n : \"\";\n console.log(` ${provider.type}${defaultTag}${modelTag}`);\n console.log(\n chalk.dim(\n ` Updated: ${new Date(provider.updatedAt).toLocaleString()}`,\n ),\n );\n }\n console.log();\n }\n\n console.log(\n chalk.dim(`Total: ${result.modelProviders.length} provider(s)`),\n );\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport prompts from \"prompts\";\nimport {\n listZeroOrgModelProviders,\n upsertZeroOrgModelProvider,\n updateZeroOrgModelProviderModel,\n setZeroOrgModelProviderDefault,\n} from \"../../../../lib/api\";\nimport {\n MODEL_PROVIDER_TYPES,\n hasModelSelection,\n hasAuthMethods,\n getSelectableProviderTypes,\n type ModelProviderType,\n} from \"@vm0/core\";\nimport { isInteractive } from \"../../../../lib/utils/prompt-utils\";\nimport { withErrorHandler } from \"../../../../lib/command\";\nimport {\n type SetupInput,\n handleNonInteractiveMode,\n promptForModelSelection,\n promptForAuthMethod,\n promptForSecrets,\n collectSecrets,\n} from \"../../../../lib/domain/model-provider/shared\";\n\nasync function handleInteractiveMode(): Promise<SetupInput | null> {\n if (!isInteractive()) {\n throw new Error(\"Interactive mode requires a TTY\", {\n cause: new Error(\n 'Use non-interactive mode: zero org model-provider setup --type <type> --secret \"<value>\"',\n ),\n });\n }\n\n let cancelled = false;\n const onCancel = () => {\n cancelled = true;\n return false;\n };\n\n // Fetch configured org providers to annotate choices\n const { modelProviders: configuredProviders } =\n await listZeroOrgModelProviders();\n const configuredTypes = new Set(\n configuredProviders.map((p) => {\n return p.type;\n }),\n );\n\n // Build provider choices with configuration status (only selectable providers)\n const annotatedChoices = getSelectableProviderTypes().map((type) => {\n const config = MODEL_PROVIDER_TYPES[type];\n const isConfigured = configuredTypes.has(type);\n const isExperimental = hasAuthMethods(type);\n let title: string = config.label;\n if (isConfigured) {\n title = `${title} ✓`;\n }\n if (isExperimental) {\n title = `${title} ${chalk.dim(\"(experimental)\")}`;\n }\n return {\n title,\n value: type,\n };\n });\n\n const typeResponse = await prompts(\n {\n type: \"select\",\n name: \"type\",\n message: \"Select provider type:\",\n choices: annotatedChoices,\n },\n { onCancel },\n );\n\n if (cancelled) {\n console.log(chalk.dim(\"Cancelled\"));\n return null;\n }\n\n const type = typeResponse.type as ModelProviderType;\n\n // Check if provider is already configured using the list we already fetched\n const existingProvider = configuredProviders.find((p) => {\n return p.type === type;\n });\n\n if (existingProvider) {\n console.log();\n console.log(`\"${type}\" is already configured`);\n console.log();\n\n const actionResponse = await prompts(\n {\n type: \"select\",\n name: \"action\",\n message: \"\",\n choices: [\n { title: \"Keep existing secret\", value: \"keep\" },\n { title: \"Update secret\", value: \"update\" },\n ],\n },\n { onCancel },\n );\n\n if (cancelled) {\n console.log(chalk.dim(\"Cancelled\"));\n return null;\n }\n\n if (actionResponse.action === \"keep\") {\n const selectedModel = await promptForModelSelection(type);\n return {\n type,\n keepExistingSecret: true,\n selectedModel,\n isInteractiveMode: true,\n };\n }\n // Fall through to secret prompt for \"update\"\n }\n\n const config = MODEL_PROVIDER_TYPES[type];\n\n console.log();\n if (\"helpText\" in config) {\n console.log(chalk.dim(config.helpText));\n }\n console.log();\n\n // Handle multi-auth providers\n if (hasAuthMethods(type)) {\n const authMethod = await promptForAuthMethod(type);\n const secrets = await promptForSecrets(type, authMethod);\n const selectedModel = await promptForModelSelection(type);\n\n return {\n type,\n authMethod,\n secrets,\n selectedModel,\n isInteractiveMode: true,\n };\n }\n\n // Single-secret provider (legacy)\n const secretLabel = \"secretLabel\" in config ? config.secretLabel : \"secret\";\n\n const secretResponse = await prompts(\n {\n type: \"password\",\n name: \"secret\",\n message: `Enter your ${secretLabel}:`,\n validate: (value: string) => {\n return value.length > 0 || `${secretLabel} is required`;\n },\n },\n { onCancel },\n );\n\n if (cancelled) {\n console.log(chalk.dim(\"Cancelled\"));\n return null;\n }\n\n const secret = secretResponse.secret as string;\n const selectedModel = await promptForModelSelection(type);\n\n return { type, secret, selectedModel, isInteractiveMode: true };\n}\n\nasync function promptSetAsDefault(\n type: ModelProviderType,\n framework: string,\n isDefault: boolean,\n): Promise<void> {\n if (isDefault) return;\n\n let cancelled = false;\n const response = await prompts(\n {\n type: \"confirm\",\n name: \"setDefault\",\n message: \"Set this provider as default?\",\n initial: false,\n },\n {\n onCancel: () => {\n cancelled = true;\n return false;\n },\n },\n );\n\n if (cancelled) {\n console.log(chalk.dim(\"Cancelled\"));\n return;\n }\n\n if (response.setDefault) {\n await setZeroOrgModelProviderDefault(type);\n console.log(chalk.green(`✓ Default for ${framework} set to \"${type}\"`));\n }\n}\n\nexport const setupCommand = new Command()\n .name(\"setup\")\n .description(\"Configure an org-level model provider\")\n .option(\"-t, --type <type>\", \"Provider type (for non-interactive mode)\")\n .option(\n \"-s, --secret <value>\",\n \"Secret value (can be used multiple times, supports VALUE or KEY=VALUE format)\",\n collectSecrets,\n [],\n )\n .option(\n \"-a, --auth-method <method>\",\n \"Auth method (required for multi-auth providers like aws-bedrock)\",\n )\n .option(\"-m, --model <model>\", \"Model selection (for non-interactive mode)\")\n .action(\n withErrorHandler(\n async (options: {\n type?: string;\n secret?: string[];\n authMethod?: string;\n model?: string;\n }) => {\n let input: SetupInput;\n const secretArgs = options.secret ?? [];\n\n if (options.type && secretArgs.length > 0) {\n input = handleNonInteractiveMode({\n type: options.type,\n secret: secretArgs,\n authMethod: options.authMethod,\n model: options.model,\n commandPrefix: \"zero org model-provider setup\",\n });\n } else if (options.type || secretArgs.length > 0) {\n throw new Error(\"Both --type and --secret are required\");\n } else {\n const result = await handleInteractiveMode();\n if (result === null) {\n return;\n }\n input = result;\n }\n\n // Handle \"keep existing secret\" flow\n if (input.keepExistingSecret) {\n const provider = await updateZeroOrgModelProviderModel(\n input.type,\n input.selectedModel,\n );\n\n const defaultNote = provider.isDefault\n ? ` (default for ${provider.framework})`\n : \"\";\n const modelNote = provider.selectedModel\n ? ` with model: ${provider.selectedModel}`\n : \"\";\n\n if (!hasModelSelection(input.type)) {\n console.log(\n chalk.green(`✓ Org model provider \"${input.type}\" unchanged`),\n );\n } else {\n console.log(\n chalk.green(\n `✓ Org model provider \"${input.type}\" updated${defaultNote}${modelNote}`,\n ),\n );\n }\n if (input.isInteractiveMode) {\n await promptSetAsDefault(\n input.type,\n provider.framework,\n provider.isDefault,\n );\n }\n return;\n }\n\n // Standard upsert flow with secret\n const { provider, created } = await upsertZeroOrgModelProvider({\n type: input.type,\n secret: input.secret,\n authMethod: input.authMethod,\n secrets: input.secrets,\n selectedModel: input.selectedModel,\n });\n\n const action = created ? \"created\" : \"updated\";\n const defaultNote = provider.isDefault\n ? ` (default for ${provider.framework})`\n : \"\";\n const modelNote = provider.selectedModel\n ? ` with model: ${provider.selectedModel}`\n : \"\";\n console.log(\n chalk.green(\n `✓ Org model provider \"${input.type}\" ${action}${defaultNote}${modelNote}`,\n ),\n );\n if (input.isInteractiveMode) {\n await promptSetAsDefault(\n input.type,\n provider.framework,\n provider.isDefault,\n );\n }\n },\n ),\n );\n","import chalk from \"chalk\";\nimport prompts from \"prompts\";\nimport {\n MODEL_PROVIDER_TYPES,\n getModels,\n getDefaultModel,\n hasModelSelection,\n allowsCustomModel,\n getCustomModelPlaceholder,\n hasAuthMethods,\n getAuthMethodsForType,\n getDefaultAuthMethod,\n getSecretsForAuthMethod,\n type ModelProviderType,\n} from \"@vm0/core\";\n\nexport interface SetupInput {\n type: ModelProviderType;\n secret?: string;\n // Multi-auth support\n authMethod?: string;\n secrets?: Record<string, string>;\n selectedModel?: string;\n keepExistingSecret?: boolean;\n isInteractiveMode?: boolean;\n}\n\nfunction validateProviderType(typeStr: string): ModelProviderType {\n if (!Object.keys(MODEL_PROVIDER_TYPES).includes(typeStr)) {\n const validTypes = Object.keys(MODEL_PROVIDER_TYPES).join(\", \");\n throw new Error(`Invalid type \"${typeStr}\"`, {\n cause: new Error(`Valid types: ${validTypes}`),\n });\n }\n return typeStr as ModelProviderType;\n}\n\nfunction validateModel(\n type: ModelProviderType,\n modelStr: string,\n): string | never {\n const models = getModels(type);\n\n // Allow any model if provider supports custom models\n if (allowsCustomModel(type)) {\n return modelStr;\n }\n\n if (models && !models.includes(modelStr)) {\n throw new Error(`Invalid model \"${modelStr}\"`, {\n cause: new Error(`Valid models: ${models.join(\", \")}`),\n });\n }\n return modelStr;\n}\n\nfunction validateAuthMethod(\n type: ModelProviderType,\n authMethodStr: string,\n): string | never {\n const authMethods = getAuthMethodsForType(type);\n if (!authMethods || !(authMethodStr in authMethods)) {\n const validMethods = authMethods\n ? Object.keys(authMethods).join(\", \")\n : \"none\";\n throw new Error(`Invalid auth method \"${authMethodStr}\"`, {\n cause: new Error(`Valid auth methods: ${validMethods}`),\n });\n }\n return authMethodStr;\n}\n\n/**\n * Parse secret arguments into a secrets object.\n * Supports two formats:\n * - Single value (e.g., \"sk-xxx\") - auto-mapped to the provider's secret name\n * - KEY=VALUE format (e.g., \"AWS_REGION=us-east-1\") - explicit mapping\n */\nfunction parseSecrets(\n type: ModelProviderType,\n authMethod: string,\n secretArgs: string[],\n): Record<string, string> {\n const secretsConfig = getSecretsForAuthMethod(type, authMethod);\n if (!secretsConfig) {\n throw new Error(`Invalid auth method \"${authMethod}\"`);\n }\n\n const secretNames = Object.keys(secretsConfig);\n\n // Single value without = sign: only allowed for single-secret auth methods\n const firstArg = secretArgs[0];\n if (secretArgs.length === 1 && firstArg && !firstArg.includes(\"=\")) {\n if (secretNames.length !== 1) {\n throw new Error(\n \"Must use KEY=VALUE format for multi-secret auth methods\",\n { cause: new Error(`Required secrets: ${secretNames.join(\", \")}`) },\n );\n }\n const firstSecretName = secretNames[0];\n if (!firstSecretName) {\n throw new Error(\"No secrets defined for this auth method\");\n }\n return { [firstSecretName]: firstArg };\n }\n\n // KEY=VALUE format\n const secrets: Record<string, string> = {};\n for (const arg of secretArgs) {\n const eqIndex = arg.indexOf(\"=\");\n if (eqIndex === -1) {\n throw new Error(`Invalid secret format \"${arg}\"`, {\n cause: new Error(\"Use KEY=VALUE format (e.g., AWS_REGION=us-east-1)\"),\n });\n }\n const key = arg.slice(0, eqIndex);\n const value = arg.slice(eqIndex + 1);\n secrets[key] = value;\n }\n return secrets;\n}\n\n/**\n * Validate secrets against the auth method config.\n */\nfunction validateSecrets(\n type: ModelProviderType,\n authMethod: string,\n secrets: Record<string, string>,\n): void {\n const secretsConfig = getSecretsForAuthMethod(type, authMethod);\n if (!secretsConfig) {\n throw new Error(`Invalid auth method \"${authMethod}\"`);\n }\n\n // Check required fields\n for (const [name, fieldConfig] of Object.entries(secretsConfig)) {\n if (fieldConfig.required && !secrets[name]) {\n const requiredNames = Object.entries(secretsConfig)\n .filter(([, fc]) => {\n return fc.required;\n })\n .map(([n]) => {\n return n;\n })\n .join(\", \");\n throw new Error(`Missing required secret: ${name}`, {\n cause: new Error(`Required secrets: ${requiredNames}`),\n });\n }\n }\n\n // Check for unknown fields\n for (const name of Object.keys(secrets)) {\n if (!(name in secretsConfig)) {\n const validNames = Object.keys(secretsConfig).join(\", \");\n throw new Error(`Unknown secret: ${name}`, {\n cause: new Error(`Valid secrets: ${validNames}`),\n });\n }\n }\n}\n\nexport function handleNonInteractiveMode(options: {\n type: string;\n secret: string[];\n authMethod?: string;\n model?: string;\n commandPrefix?: string;\n}): SetupInput {\n const type = validateProviderType(options.type);\n const cmdPrefix = options.commandPrefix ?? \"zero org model-provider setup\";\n\n let selectedModel: string | undefined;\n\n if (options.model) {\n selectedModel = validateModel(type, options.model);\n } else if (hasModelSelection(type)) {\n const defaultModel = getDefaultModel(type);\n // Empty defaultModel means \"auto\" mode - don't set selectedModel\n selectedModel = defaultModel || undefined;\n }\n\n // Handle multi-auth providers\n if (hasAuthMethods(type)) {\n // Determine auth method\n let authMethod: string;\n if (options.authMethod) {\n authMethod = validateAuthMethod(type, options.authMethod);\n } else {\n const defaultAuthMethod = getDefaultAuthMethod(type);\n const authMethods = getAuthMethodsForType(type);\n if (!defaultAuthMethod || !authMethods) {\n throw new Error(`Provider \"${type}\" requires --auth-method`);\n }\n // If there's only one auth method, use it; otherwise require explicit selection\n const authMethodNames = Object.keys(authMethods);\n if (authMethodNames.length === 1) {\n authMethod = authMethodNames[0]!;\n } else {\n const methods = authMethodNames.join(\", \");\n throw new Error(\n `--auth-method is required for \"${type}\" (multiple auth methods available)`,\n {\n cause: new Error(\n `Available: ${methods}. Example: ${cmdPrefix} --type ${type} --auth-method ${authMethodNames[0]} --secret KEY=VALUE`,\n ),\n },\n );\n }\n }\n\n // Parse and validate secrets\n const secrets = parseSecrets(type, authMethod, options.secret);\n validateSecrets(type, authMethod, secrets);\n\n return {\n type,\n authMethod,\n secrets,\n selectedModel,\n isInteractiveMode: false,\n };\n }\n\n // Single-secret provider (legacy)\n // Accept single value or KEY=VALUE format\n const secretArgs = options.secret;\n const firstArg = secretArgs[0];\n if (!firstArg) {\n throw new Error(\"Secret is required\");\n }\n\n // If KEY=VALUE format, extract the value\n let secret: string;\n if (firstArg.includes(\"=\")) {\n secret = firstArg.slice(firstArg.indexOf(\"=\") + 1);\n } else {\n secret = firstArg;\n }\n\n return {\n type,\n secret,\n selectedModel,\n isInteractiveMode: false,\n };\n}\n\nexport async function promptForModelSelection(\n type: ModelProviderType,\n): Promise<string | undefined> {\n if (!hasModelSelection(type)) {\n return undefined;\n }\n\n const models = getModels(type) ?? [];\n const defaultModel = getDefaultModel(type);\n const supportsCustomModel = allowsCustomModel(type);\n\n // Build choices\n const modelChoices: { title: string; value: string }[] = [];\n\n // Add auto option if defaultModel is empty string\n if (defaultModel === \"\") {\n modelChoices.push({ title: \"auto (Recommended)\", value: \"\" });\n }\n\n // Add predefined models\n for (const model of models) {\n modelChoices.push({\n title: model === defaultModel ? `${model} (Recommended)` : model,\n value: model,\n });\n }\n\n // Add custom model option if supported\n if (supportsCustomModel) {\n modelChoices.push({ title: \"Custom model ID\", value: \"__custom__\" });\n }\n\n const modelResponse = await prompts(\n {\n type: \"select\",\n name: \"model\",\n message: \"Select model:\",\n choices: modelChoices,\n },\n {\n onCancel: () => {\n return process.exit(0);\n },\n },\n );\n\n const selected = modelResponse.model as string;\n\n // Handle custom model input\n if (selected === \"__custom__\") {\n const placeholder = getCustomModelPlaceholder(type);\n if (placeholder) {\n console.log(chalk.dim(`Example: ${placeholder}`));\n }\n const customResponse = await prompts(\n {\n type: \"text\",\n name: \"customModel\",\n message: \"Enter model ID:\",\n validate: (value: string) => {\n return value.length > 0 || \"Model ID is required\";\n },\n },\n {\n onCancel: () => {\n return process.exit(0);\n },\n },\n );\n return customResponse.customModel as string;\n }\n\n // Return undefined for auto mode (empty string)\n return selected === \"\" ? undefined : selected;\n}\n\n/**\n * Prompt for auth method selection (only for multi-auth providers)\n */\nexport async function promptForAuthMethod(\n type: ModelProviderType,\n): Promise<string> {\n const authMethods = getAuthMethodsForType(type);\n const defaultAuthMethod = getDefaultAuthMethod(type);\n\n if (!authMethods) {\n return \"default\";\n }\n\n const choices = Object.entries(authMethods).map(([method, config]) => {\n return {\n title:\n method === defaultAuthMethod\n ? `${config.label} (Recommended)`\n : config.label,\n value: method,\n };\n });\n\n const response = await prompts(\n {\n type: \"select\",\n name: \"authMethod\",\n message: \"Select authentication method:\",\n choices,\n },\n {\n onCancel: () => {\n return process.exit(0);\n },\n },\n );\n\n return response.authMethod as string;\n}\n\n/**\n * Determine if a secret should be masked (password type)\n * Non-secret values like region should be visible\n */\nfunction isSensitiveSecret(name: string): boolean {\n const nonSecretPatterns = [\"REGION\", \"ENDPOINT\", \"URL\"];\n return !nonSecretPatterns.some((pattern) => {\n return name.toUpperCase().includes(pattern);\n });\n}\n\nexport async function promptForSecrets(\n type: ModelProviderType,\n authMethod: string,\n): Promise<Record<string, string>> {\n const secretsConfig = getSecretsForAuthMethod(type, authMethod);\n\n if (!secretsConfig) {\n throw new Error(`Invalid auth method \"${authMethod}\"`);\n }\n\n const secrets: Record<string, string> = {};\n\n for (const [name, fieldConfig] of Object.entries(secretsConfig)) {\n if (fieldConfig.helpText) {\n console.log(chalk.dim(fieldConfig.helpText));\n }\n\n const isSensitive = isSensitiveSecret(name);\n const placeholder =\n \"placeholder\" in fieldConfig ? (fieldConfig.placeholder as string) : \"\";\n\n if (fieldConfig.required) {\n const response = await prompts(\n {\n type: isSensitive ? \"password\" : \"text\",\n name: \"value\",\n message: `${fieldConfig.label}:`,\n initial: placeholder ? \"\" : undefined,\n validate: (value: string) => {\n return value.length > 0 || `${fieldConfig.label} is required`;\n },\n },\n {\n onCancel: () => {\n return process.exit(0);\n },\n },\n );\n secrets[name] = response.value as string;\n } else {\n // Optional field\n const response = await prompts(\n {\n type: isSensitive ? \"password\" : \"text\",\n name: \"value\",\n message: `${fieldConfig.label} (optional):`,\n },\n {\n onCancel: () => {\n return process.exit(0);\n },\n },\n );\n const value = response.value as string;\n if (value && value.trim()) {\n secrets[name] = value.trim();\n }\n }\n }\n\n return secrets;\n}\n\n/**\n * Collect secret values from repeatable --secret option\n */\nexport function collectSecrets(value: string, previous: string[]): string[] {\n return previous.concat([value]);\n}\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { deleteZeroOrgModelProvider } from \"../../../../lib/api\";\nimport { withErrorHandler } from \"../../../../lib/command\";\nimport { MODEL_PROVIDER_TYPES, type ModelProviderType } from \"@vm0/core\";\n\nexport const removeCommand = new Command()\n .name(\"remove\")\n .description(\"Remove an org-level model provider\")\n .argument(\"<type>\", \"Model provider type to remove\")\n .action(\n withErrorHandler(async (type: string) => {\n if (!Object.keys(MODEL_PROVIDER_TYPES).includes(type)) {\n const validTypes = Object.keys(MODEL_PROVIDER_TYPES).join(\", \");\n throw new Error(`Invalid type \"${type}\"`, {\n cause: new Error(`Valid types: ${validTypes}`),\n });\n }\n\n await deleteZeroOrgModelProvider(type as ModelProviderType);\n console.log(chalk.green(`✓ Org model provider \"${type}\" removed`));\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { setZeroOrgModelProviderDefault } from \"../../../../lib/api\";\nimport { withErrorHandler } from \"../../../../lib/command\";\nimport { MODEL_PROVIDER_TYPES, type ModelProviderType } from \"@vm0/core\";\n\nexport const setDefaultCommand = new Command()\n .name(\"set-default\")\n .description(\"Set an org-level model provider as default for its framework\")\n .argument(\"<type>\", \"Model provider type to set as default\")\n .action(\n withErrorHandler(async (type: string) => {\n if (!Object.keys(MODEL_PROVIDER_TYPES).includes(type)) {\n const validTypes = Object.keys(MODEL_PROVIDER_TYPES).join(\", \");\n throw new Error(`Invalid type \"${type}\"`, {\n cause: new Error(`Valid types: ${validTypes}`),\n });\n }\n\n const provider = await setZeroOrgModelProviderDefault(\n type as ModelProviderType,\n );\n console.log(\n chalk.green(\n `✓ Default for ${provider.framework} set to \"${provider.type}\"`,\n ),\n );\n }),\n );\n","import { Command } from \"commander\";\nimport { createCommand } from \"./create\";\nimport { editCommand } from \"./edit\";\nimport { viewCommand } from \"./view\";\nimport { listCommand } from \"./list\";\nimport { deleteCommand } from \"./delete\";\n\nexport const zeroAgentCommand = new Command(\"agent\")\n .description(\"View or manage zero agents\")\n .addCommand(createCommand)\n .addCommand(editCommand)\n .addCommand(viewCommand)\n .addCommand(listCommand)\n .addCommand(deleteCommand)\n .addHelpText(\n \"after\",\n `\nExamples:\n Your agent ID is in $ZERO_AGENT_ID (or run: zero whoami)\n View your config: zero agent view $ZERO_AGENT_ID --instructions\n Update description: zero agent edit $ZERO_AGENT_ID --description \"new role\"\n Update tone: zero agent edit $ZERO_AGENT_ID --sound friendly\n Update instructions: zero agent edit $ZERO_AGENT_ID --instructions-file <path>\n Add a custom skill: zero agent edit $ZERO_AGENT_ID --add-skill my-skill\n Remove a skill: zero agent edit $ZERO_AGENT_ID --remove-skill my-skill\n\nNotes:\n Manage custom skills with 'zero skill --help'`,\n );\n","import { Command } from \"commander\";\nimport { readFileSync } from \"node:fs\";\nimport chalk from \"chalk\";\nimport { zeroAgentCustomSkillNameSchema } from \"@vm0/core\";\nimport { createZeroAgent, updateZeroAgentInstructions } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const createCommand = new Command()\n .name(\"create\")\n .description(\"Create a new zero agent\")\n .option(\n \"--skills <items>\",\n \"Comma-separated custom skill names to attach (e.g. my-skill,other-skill)\",\n )\n .option(\"--display-name <name>\", \"Agent display name\")\n .option(\"--description <text>\", \"Agent description\")\n .option(\n \"--sound <tone>\",\n \"Agent tone: professional, friendly, direct, supportive\",\n )\n .option(\"--instructions-file <path>\", \"Path to instructions file\")\n .addHelpText(\n \"after\",\n `\nExamples:\n Minimal: zero agent create --display-name \"My Agent\"\n With skills: zero agent create --skills my-skill,other-skill --display-name \"My Agent\"\n With instructions: zero agent create --display-name \"My Agent\" --instructions-file ./instructions.md`,\n )\n .action(\n withErrorHandler(\n async (options: {\n skills?: string;\n displayName?: string;\n description?: string;\n sound?: string;\n instructionsFile?: string;\n }) => {\n const customSkills = options.skills\n ? options.skills.split(\",\").map((s) => {\n return s.trim();\n })\n : undefined;\n\n if (customSkills) {\n for (const name of customSkills) {\n const result = zeroAgentCustomSkillNameSchema.safeParse(name);\n if (!result.success) {\n throw new Error(\n `Invalid skill name \"${name}\": must be 2-64 characters, lowercase alphanumeric and hyphens only (e.g. my-skill)`,\n );\n }\n }\n }\n\n const agent = await createZeroAgent({\n displayName: options.displayName,\n description: options.description,\n sound: options.sound,\n customSkills,\n });\n\n if (options.instructionsFile) {\n const content = readFileSync(options.instructionsFile, \"utf-8\");\n await updateZeroAgentInstructions(agent.agentId, content);\n }\n\n console.log(chalk.green(`✓ Agent \"${agent.agentId}\" created`));\n console.log(` Agent ID: ${agent.agentId}`);\n if (customSkills?.length) {\n console.log(` Skills: ${customSkills.join(\", \")}`);\n }\n if (agent.displayName) {\n console.log(` Display Name: ${agent.displayName}`);\n }\n },\n ),\n );\n","import { Command } from \"commander\";\nimport { readFileSync } from \"node:fs\";\nimport chalk from \"chalk\";\nimport { zeroAgentCustomSkillNameSchema } from \"@vm0/core\";\nimport {\n getZeroAgent,\n updateZeroAgent,\n updateZeroAgentInstructions,\n} from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nfunction validateSkillName(name: string): void {\n const result = zeroAgentCustomSkillNameSchema.safeParse(name);\n if (!result.success) {\n throw new Error(\n `Invalid skill name \"${name}\": must be 2-64 characters, lowercase alphanumeric and hyphens only (e.g. my-skill)`,\n );\n }\n}\n\nfunction resolveCustomSkills(\n options: { skills?: string; addSkill?: string; removeSkill?: string },\n existing: string[],\n): string[] | undefined {\n if (options.skills && (options.addSkill || options.removeSkill)) {\n throw new Error(\"Cannot use --skills with --add-skill or --remove-skill\");\n }\n\n if (options.skills) {\n const names = options.skills.split(\",\").map((s) => {\n return s.trim();\n });\n for (const name of names) {\n validateSkillName(name);\n }\n return names;\n }\n\n if (options.addSkill) {\n validateSkillName(options.addSkill);\n if (existing.includes(options.addSkill)) {\n throw new Error(\n `Skill \"${options.addSkill}\" is already attached to this agent`,\n );\n }\n return [...existing, options.addSkill];\n }\n\n if (options.removeSkill) {\n if (!existing.includes(options.removeSkill)) {\n throw new Error(\n `Skill \"${options.removeSkill}\" is not attached to this agent`,\n );\n }\n return existing.filter((s) => {\n return s !== options.removeSkill;\n });\n }\n\n return undefined;\n}\n\nexport const editCommand = new Command()\n .name(\"edit\")\n .description(\"Edit a zero agent\")\n .argument(\"<agent-id>\", \"Agent ID\")\n .option(\"--display-name <name>\", \"New display name\")\n .option(\"--description <text>\", \"New description\")\n .option(\n \"--sound <tone>\",\n \"New tone: professional, friendly, direct, supportive\",\n )\n .option(\n \"--skills <items>\",\n \"Comma-separated custom skill names to attach (replaces existing)\",\n )\n .option(\"--add-skill <name>\", \"Add a custom skill to the agent\")\n .option(\"--remove-skill <name>\", \"Remove a custom skill from the agent\")\n .option(\"--instructions-file <path>\", \"Path to new instructions file\")\n .addHelpText(\n \"after\",\n `\nExamples:\n Update description: zero agent edit <agent-id> --description \"new role\"\n Update tone: zero agent edit <agent-id> --sound friendly\n Replace all skills: zero agent edit <agent-id> --skills my-skill,other-skill\n Add a skill: zero agent edit <agent-id> --add-skill my-skill\n Remove a skill: zero agent edit <agent-id> --remove-skill my-skill\n Update instructions: zero agent edit <agent-id> --instructions-file ./instructions.md\n Update yourself: zero agent edit $ZERO_AGENT_ID --description \"new role\"\n\nNotes:\n - At least one option is required\n - Unspecified fields are preserved (not cleared)\n - --skills replaces the entire skill list; --add-skill/--remove-skill modify incrementally\n - --skills cannot be combined with --add-skill or --remove-skill\n - To create or edit skill content, use: zero skill --help`,\n )\n .action(\n withErrorHandler(\n async (\n agentId: string,\n options: {\n displayName?: string;\n description?: string;\n sound?: string;\n skills?: string;\n addSkill?: string;\n removeSkill?: string;\n instructionsFile?: string;\n },\n ) => {\n const hasAgentUpdate =\n options.displayName !== undefined ||\n options.description !== undefined ||\n options.sound !== undefined ||\n options.skills !== undefined ||\n options.addSkill !== undefined ||\n options.removeSkill !== undefined;\n\n if (!hasAgentUpdate && !options.instructionsFile) {\n throw new Error(\n \"At least one option is required (--display-name, --description, --sound, --skills, --add-skill, --remove-skill, --instructions-file)\",\n );\n }\n\n if (hasAgentUpdate) {\n const current = await getZeroAgent(agentId);\n const customSkills = resolveCustomSkills(\n options,\n current.customSkills ?? [],\n );\n\n await updateZeroAgent(agentId, {\n displayName:\n options.displayName !== undefined\n ? options.displayName\n : (current.displayName ?? undefined),\n description:\n options.description !== undefined\n ? options.description\n : (current.description ?? undefined),\n sound:\n options.sound !== undefined\n ? options.sound\n : (current.sound ?? undefined),\n customSkills,\n });\n }\n\n if (options.instructionsFile) {\n const content = readFileSync(options.instructionsFile, \"utf-8\");\n await updateZeroAgentInstructions(agentId, content);\n }\n\n console.log(chalk.green(`✓ Agent \"${agentId}\" updated`));\n },\n ),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport {\n getZeroAgent,\n getZeroAgentInstructions,\n getZeroAgentUserConnectors,\n listZeroConnectors,\n} from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport {\n isFirewallConnectorType,\n getConnectorFirewall,\n resolveFirewallPolicies,\n type FirewallPolicies,\n type FirewallPolicyValue,\n type ConnectorResponse,\n} from \"@vm0/core\";\nimport { policyIcon } from \"../../../lib/utils/format-utils\";\n\ninterface ConnectorPermissionInfo {\n type: string;\n hasPermissions: boolean;\n permissions: Array<{ name: string; description?: string }>;\n policies: Record<string, FirewallPolicyValue> | null;\n unknownPolicy: FirewallPolicyValue;\n allowed: number;\n total: number;\n}\n\nfunction getConnectorPermissionInfo(\n type: string,\n resolvedPolicies: FirewallPolicies | null,\n): ConnectorPermissionInfo {\n if (!isFirewallConnectorType(type)) {\n return {\n type,\n hasPermissions: false,\n permissions: [],\n policies: null,\n unknownPolicy: \"allow\",\n allowed: 0,\n total: 0,\n };\n }\n\n const refPolicy = resolvedPolicies?.[type];\n const policies =\n refPolicy && Object.keys(refPolicy.policies).length > 0\n ? refPolicy.policies\n : null;\n const config = getConnectorFirewall(type);\n const permissions = config.apis.flatMap((a) => {\n return a.permissions ?? [];\n });\n const total = permissions.length;\n const allowed = policies\n ? permissions.filter((p) => {\n return policies[p.name] === \"allow\";\n }).length\n : 0;\n\n const unknownPolicy = refPolicy?.unknownPolicy ?? \"allow\";\n return {\n type,\n hasPermissions: true,\n permissions,\n policies,\n unknownPolicy,\n allowed,\n total,\n };\n}\n\nfunction printDetailedPermissions(info: ConnectorPermissionInfo): void {\n if (!info.policies) {\n const icon = policyIcon(info.unknownPolicy);\n console.log(` ${icon} unknown endpoints`);\n return;\n }\n\n const nameWidth = Math.max(\n \"unknown endpoints\".length,\n ...info.permissions.map((p) => {\n return p.name.length;\n }),\n );\n\n for (const perm of info.permissions) {\n const policy = info.policies[perm.name] ?? \"deny\";\n const desc = perm.description ?? \"\";\n console.log(\n ` ${policyIcon(policy)} ${perm.name.padEnd(nameWidth)} ${desc}`,\n );\n }\n\n const unknownIcon = policyIcon(info.unknownPolicy);\n console.log(\n ` ${unknownIcon} ${\"unknown endpoints\".padEnd(nameWidth)} Endpoints not matching any rule`,\n );\n}\n\nfunction formatConnectorIdentity(\n connector: ConnectorResponse | undefined,\n): string {\n if (!connector) return \"\";\n if (connector.externalUsername) return `@${connector.externalUsername}`;\n if (connector.externalEmail) return connector.externalEmail;\n return \"\";\n}\n\nfunction formatConnectorSummary(\n info: ConnectorPermissionInfo,\n identity?: ConnectorResponse,\n): string {\n const id = formatConnectorIdentity(identity);\n const idStr = id ? ` ${id}` : \"\";\n if (!info.hasPermissions) return `${info.type}${idStr}`;\n if (!info.policies) return `${info.type}${idStr} (full access)`;\n return `${info.type}${idStr} (${info.allowed}/${info.total} allowed)`;\n}\n\nfunction formatDetailIdentity(\n connector: ConnectorResponse | undefined,\n): string {\n if (!connector) return \"\";\n let identity = \"\";\n if (connector.externalUsername && connector.externalEmail) {\n identity = `@${connector.externalUsername} (${connector.externalEmail})`;\n } else if (connector.externalUsername) {\n identity = `@${connector.externalUsername}`;\n } else if (connector.externalEmail) {\n identity = connector.externalEmail;\n }\n if (!identity) return \"\";\n if (connector.needsReconnect) {\n identity += ` ${chalk.yellow(\"(needs reconnect)\")}`;\n }\n return identity;\n}\n\nexport const viewCommand = new Command()\n .name(\"view\")\n .description(\"View a zero agent\")\n .argument(\"<agent-id>\", \"Agent ID\")\n .option(\"--instructions\", \"Also show instructions content\")\n .option(\"--permissions\", \"Show full permission details for each connector\")\n .addHelpText(\n \"after\",\n `\nExamples:\n View basic info: zero agent view <agent-id>\n Include instructions: zero agent view <agent-id> --instructions\n Show permissions: zero agent view <agent-id> --permissions\n View yourself: zero agent view $ZERO_AGENT_ID --instructions`,\n )\n .action(\n withErrorHandler(\n async (\n agentId: string,\n options: { instructions?: boolean; permissions?: boolean },\n ) => {\n const [agent, connectorTypes, connectorIdentities] = await Promise.all([\n getZeroAgent(agentId),\n getZeroAgentUserConnectors(agentId),\n listZeroConnectors().catch(() => {\n return { connectors: [] as ConnectorResponse[] };\n }),\n ]);\n\n const identityMap = new Map<string, ConnectorResponse>(\n connectorIdentities.connectors.map((c) => {\n return [c.type, c];\n }),\n );\n\n console.log(chalk.bold(agent.agentId));\n if (agent.displayName) console.log(chalk.dim(agent.displayName));\n console.log();\n console.log(`Agent ID: ${agent.agentId}`);\n\n const resolvedPolicies = resolveFirewallPolicies(\n agent.permissionPolicies,\n connectorTypes,\n );\n\n const connectorInfos = connectorTypes.map((type) => {\n return getConnectorPermissionInfo(type, resolvedPolicies);\n });\n\n if (connectorInfos.length > 0) {\n const summaries = connectorInfos.map((info) => {\n return formatConnectorSummary(info, identityMap.get(info.type));\n });\n console.log(`Connectors: ${summaries.join(\", \")}`);\n }\n\n if (agent.customSkills?.length > 0) {\n console.log(`Skills: ${agent.customSkills.join(\", \")}`);\n }\n if (agent.description)\n console.log(`Description: ${agent.description}`);\n if (agent.sound) console.log(`Sound: ${agent.sound}`);\n\n if (options.permissions && connectorInfos.length > 0) {\n console.log();\n console.log(chalk.bold(\"Connectors:\"));\n for (const info of connectorInfos) {\n const identity = formatDetailIdentity(identityMap.get(info.type));\n console.log(` ${info.type.padEnd(14)}${identity}`);\n if (info.hasPermissions) {\n printDetailedPermissions(info);\n }\n }\n }\n\n if (options.instructions) {\n console.log();\n const result = await getZeroAgentInstructions(agentId);\n if (result.content) {\n console.log(chalk.dim(\"── Instructions ──\"));\n console.log(result.content);\n } else {\n console.log(chalk.dim(\"No instructions set\"));\n }\n }\n },\n ),\n );\n","import chalk from \"chalk\";\nimport type { FirewallPolicyValue } from \"@vm0/core\";\n\nexport function policyIcon(policy: FirewallPolicyValue): string {\n if (policy === \"allow\") return chalk.green(\"✓\");\n if (policy === \"ask\") return chalk.yellow(\"?\");\n return chalk.dim(\"✗\");\n}\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { listZeroAgents } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const listCommand = new Command()\n .name(\"list\")\n .alias(\"ls\")\n .description(\"List all zero agents\")\n .addHelpText(\n \"after\",\n `\nExamples:\n zero agent list\n\nNotes:\n - Use this to discover teammate agent IDs before delegating with \"zero run\"`,\n )\n .action(\n withErrorHandler(async () => {\n const agents = await listZeroAgents();\n\n if (agents.length === 0) {\n console.log(chalk.dim(\"No zero agents found\"));\n console.log(\n chalk.dim(\n ' Create one with: zero agent create --display-name \"My Agent\"',\n ),\n );\n return;\n }\n\n const idWidth = Math.max(\n 8,\n ...agents.map((a) => {\n return a.agentId.length;\n }),\n );\n const displayWidth = Math.max(\n 12,\n ...agents.map((a) => {\n return (a.displayName ?? \"\").length;\n }),\n );\n\n const header = [\n \"AGENT ID\".padEnd(idWidth),\n \"DISPLAY NAME\".padEnd(displayWidth),\n ].join(\" \");\n console.log(chalk.dim(header));\n\n for (const agent of agents) {\n const row = [\n agent.agentId.padEnd(idWidth),\n (agent.displayName ?? \"-\").padEnd(displayWidth),\n ].join(\" \");\n console.log(row);\n }\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { getZeroAgent, deleteZeroAgent } from \"../../../lib/api\";\nimport { isInteractive, promptConfirm } from \"../../../lib/utils/prompt-utils\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const deleteCommand = new Command()\n .name(\"delete\")\n .alias(\"rm\")\n .description(\"Delete a zero agent\")\n .argument(\"<agent-id>\", \"Agent ID\")\n .option(\"-y, --yes\", \"Skip confirmation prompt\")\n .addHelpText(\n \"after\",\n `\nExamples:\n zero agent delete <agent-id>\n zero agent delete <agent-id> -y\n\nNotes:\n - Use -y to skip confirmation in non-interactive mode`,\n )\n .action(\n withErrorHandler(async (agentId: string, options: { yes?: boolean }) => {\n await getZeroAgent(agentId);\n\n if (!options.yes) {\n if (!isInteractive()) {\n throw new Error(\"--yes flag is required in non-interactive mode\");\n }\n const confirmed = await promptConfirm(\n `Delete zero agent '${agentId}'?`,\n false,\n );\n if (!confirmed) {\n console.log(chalk.dim(\"Cancelled\"));\n return;\n }\n }\n\n await deleteZeroAgent(agentId);\n console.log(chalk.green(`✓ Agent \"${agentId}\" deleted`));\n }),\n );\n","import { Command } from \"commander\";\nimport { connectCommand } from \"./connect\";\nimport { listCommand } from \"./list\";\nimport { statusCommand } from \"./status\";\nimport { disconnectCommand } from \"./disconnect\";\n\nexport const zeroConnectorCommand = new Command()\n .name(\"connector\")\n .description(\"Check or connect third-party services (GitHub, Slack, etc.)\")\n .addCommand(listCommand)\n .addCommand(statusCommand)\n .addCommand(connectCommand)\n .addCommand(disconnectCommand);\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport {\n CONNECTOR_TYPES,\n connectorTypeSchema,\n isFeatureEnabled,\n type ConnectorType,\n} from \"@vm0/core\";\nimport {\n createZeroConnectorSession,\n getZeroConnectorSession,\n createZeroComputerConnector,\n deleteZeroComputerConnector,\n setZeroSecret,\n} from \"../../../lib/api\";\nimport { getBaseUrl } from \"../../../lib/api/core/client-factory\";\nimport { getActiveOrg } from \"../../../lib/api/config\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport {\n checkComputerDependencies,\n startComputerServices,\n} from \"../../../lib/computer/start-services\";\nimport { promptSelect, promptPassword } from \"../../../lib/utils/prompt-utils\";\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => {\n return setTimeout(resolve, ms);\n });\n}\n\n/**\n * Render markdown help text for terminal display\n */\nfunction renderHelpText(text: string): string {\n return text\n .replace(/\\[([^\\]]+)\\]\\(([^)]+)\\)/g, (_m, label: string, url: string) => {\n return `${label} (${chalk.cyan(url)})`;\n })\n .replace(/\\*\\*([^*]+)\\*\\*/g, (_m, content: string) => {\n return chalk.bold(content);\n })\n .replace(/^> (.+)$/gm, (_m, content: string) => {\n return chalk.yellow(` ${content}`);\n });\n}\n\n/**\n * Handle the API token connection flow\n */\nasync function connectViaApiToken(\n connectorType: ConnectorType,\n tokenValue?: string,\n): Promise<void> {\n const config = CONNECTOR_TYPES[connectorType];\n const apiTokenConfig = config.authMethods[\"api-token\"];\n if (!apiTokenConfig) {\n throw new Error(\n `${config.label} does not support API token authentication`,\n );\n }\n\n const secretEntries = Object.entries(apiTokenConfig.secrets);\n const inputSecrets: Record<string, string> = {};\n\n if (tokenValue && secretEntries.length === 1) {\n // Direct token via --token flag\n const [secretName] = secretEntries[0]!;\n inputSecrets[secretName] = tokenValue;\n } else {\n // Interactive: show instructions, then prompt for each secret\n if (apiTokenConfig.helpText) {\n console.log();\n console.log(renderHelpText(apiTokenConfig.helpText));\n console.log();\n }\n\n for (const [secretName, secretConfig] of secretEntries) {\n if (!secretConfig.required) continue;\n\n const value = await promptPassword(\n `${secretConfig.label}${secretConfig.placeholder ? chalk.dim(` (${secretConfig.placeholder})`) : \"\"}:`,\n );\n\n if (!value) {\n console.log(chalk.dim(\"Cancelled\"));\n return;\n }\n\n inputSecrets[secretName] = value;\n }\n }\n\n for (const [name, value] of Object.entries(inputSecrets)) {\n await setZeroSecret({\n name,\n value,\n description: `API token for ${config.label} connector`,\n });\n }\n console.log(chalk.green(`\\n✓ Connector \"${connectorType}\" connected`));\n}\n\n/**\n * Handle computer connector flow\n */\nasync function connectComputer(): Promise<void> {\n await checkComputerDependencies();\n console.log(chalk.cyan(\"Setting up computer connector...\"));\n\n const credentials = await createZeroComputerConnector();\n await startComputerServices(credentials);\n\n console.log(chalk.cyan(\"Disconnecting computer connector...\"));\n await deleteZeroComputerConnector();\n console.log(chalk.green(\"✓ Disconnected computer\"));\n}\n\n/**\n * Resolve which auth method to use for a connector\n */\nasync function resolveAuthMethod(\n connectorType: ConnectorType,\n tokenFlag?: string,\n): Promise<\"oauth\" | \"api-token\" | null> {\n const config = CONNECTOR_TYPES[connectorType];\n const oauthFlag = CONNECTOR_TYPES[connectorType].featureFlag;\n const orgId = await getActiveOrg();\n const oauthAvailable =\n \"oauth\" in config.authMethods &&\n (!oauthFlag || isFeatureEnabled(oauthFlag, { orgId }));\n const apiTokenAvailable = \"api-token\" in config.authMethods;\n\n if (tokenFlag) {\n if (!apiTokenAvailable) {\n throw new Error(\n `${config.label} does not support API token authentication`,\n );\n }\n return \"api-token\";\n }\n\n if (oauthAvailable && apiTokenAvailable) {\n const selected = await promptSelect<\"oauth\" | \"api-token\">(\n `How would you like to connect ${config.label}?`,\n [\n { title: \"OAuth (Sign in with browser)\", value: \"oauth\" },\n {\n title: `API Token (${config.authMethods[\"api-token\"]!.label})`,\n value: \"api-token\",\n },\n ],\n );\n if (!selected) {\n console.log(chalk.dim(\"Cancelled\"));\n return null;\n }\n return selected;\n }\n\n if (apiTokenAvailable) return \"api-token\";\n if (oauthAvailable) return \"oauth\";\n\n throw new Error(\n `${config.label} has no available auth methods. OAuth may not be enabled yet.`,\n );\n}\n\n/**\n * Handle OAuth device flow\n */\nasync function connectViaOAuth(connectorType: ConnectorType): Promise<void> {\n console.log(`Connecting ${chalk.cyan(connectorType)}...`);\n\n const session = await createZeroConnectorSession(connectorType);\n const apiUrl = await getBaseUrl();\n const verificationUrl = `${apiUrl}${session.verificationUrl}`;\n\n console.log(chalk.green(\"\\nSession created\"));\n console.log(chalk.cyan(`\\nTo connect, visit: ${verificationUrl}`));\n console.log(\n `\\nThe session expires in ${Math.floor(session.expiresIn / 60)} minutes.`,\n );\n console.log(\"\\nWaiting for authorization...\");\n\n const startTime = Date.now();\n const maxWaitTime = session.expiresIn * 1000;\n const pollInterval = (session.interval || 5) * 1000;\n let isFirstPoll = true;\n\n while (Date.now() - startTime < maxWaitTime) {\n if (!isFirstPoll) {\n await delay(pollInterval);\n }\n isFirstPoll = false;\n\n const status = await getZeroConnectorSession(connectorType, session.id);\n\n switch (status.status) {\n case \"complete\":\n console.log(\n chalk.green(`\\n\\n✓ Connector \"${connectorType}\" connected`),\n );\n return;\n case \"expired\":\n throw new Error(\"Session expired, please try again\");\n case \"error\":\n throw new Error(\n `Connection failed: ${status.errorMessage || \"Unknown error\"}`,\n );\n case \"pending\":\n process.stdout.write(chalk.dim(\".\"));\n break;\n }\n }\n\n throw new Error(\"Session timed out, please try again\");\n}\n\nexport const connectCommand = new Command()\n .name(\"connect\")\n .description(\"Connect a third-party service (e.g., GitHub)\")\n .argument(\"<type>\", \"Connector type (e.g., github)\")\n .option(\"--token <value>\", \"API token value (skip interactive prompt)\")\n .action(\n withErrorHandler(async (type: string, options: { token?: string }) => {\n const parseResult = connectorTypeSchema.safeParse(type);\n if (!parseResult.success) {\n const available = Object.keys(CONNECTOR_TYPES).join(\", \");\n throw new Error(`Unknown connector type: ${type}`, {\n cause: new Error(`Available connectors: ${available}`),\n });\n }\n\n const connectorType = parseResult.data;\n\n if (connectorType === \"computer\") {\n await connectComputer();\n return;\n }\n\n const authMethod = await resolveAuthMethod(connectorType, options.token);\n if (!authMethod) return;\n\n if (authMethod === \"api-token\") {\n await connectViaApiToken(connectorType, options.token);\n return;\n }\n\n await connectViaOAuth(connectorType);\n }),\n );\n","import { spawn } from \"child_process\";\nimport { access, constants } from \"fs/promises\";\nimport { createServer } from \"net\";\nimport type { AddressInfo } from \"net\";\nimport { homedir } from \"os\";\nimport { join } from \"path\";\nimport chalk from \"chalk\";\nimport { startNgrokTunnels, stopNgrokTunnels } from \"./ngrok\";\n\ninterface ComputerConnectorCredentials {\n ngrokToken: string;\n bridgeToken: string;\n endpointPrefix: string;\n domain: string;\n}\n\nconst CHROME_CANDIDATES = [\n // macOS absolute paths\n \"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome\",\n \"/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary\",\n \"/Applications/Chromium.app/Contents/MacOS/Chromium\",\n // Linux / PATH-based\n \"google-chrome\",\n \"google-chrome-stable\",\n \"chromium-browser\",\n \"chromium\",\n \"chrome\",\n];\n\nasync function getRandomPort(): Promise<number> {\n return new Promise((resolve, reject) => {\n const server = createServer();\n server.listen(0, \"127.0.0.1\", () => {\n const { port } = server.address() as AddressInfo;\n server.close(() => {\n return resolve(port);\n });\n });\n server.on(\"error\", reject);\n });\n}\n\nasync function findBinary(...candidates: string[]): Promise<string | null> {\n for (const candidate of candidates) {\n if (candidate.startsWith(\"/\")) {\n try {\n await access(candidate, constants.X_OK);\n return candidate;\n } catch {\n // not found, try next\n }\n } else {\n const found = await new Promise<boolean>((resolve) => {\n const child = spawn(\"which\", [candidate]);\n child.on(\"close\", (code) => {\n return resolve(code === 0);\n });\n });\n if (found) return candidate;\n }\n }\n return null;\n}\n\nexport async function checkComputerDependencies(): Promise<void> {\n const wsgidavBinary = await findBinary(\"wsgidav\");\n if (!wsgidavBinary) {\n throw new Error(\n \"wsgidav not found\\n\\nInstall with: pip install wsgidav[cheroot]\",\n );\n }\n\n const chromeBinary = await findBinary(...CHROME_CANDIDATES);\n if (!chromeBinary) {\n throw new Error(\"Chrome not found\\n\\nInstall Google Chrome or Chromium\");\n }\n}\n\nexport async function startComputerServices(\n credentials: ComputerConnectorCredentials,\n): Promise<void> {\n console.log(chalk.cyan(\"Starting computer connector services...\"));\n\n const wsgidavBinary = await findBinary(\"wsgidav\");\n if (!wsgidavBinary) {\n throw new Error(\n \"wsgidav not found\\n\\nInstall with: pip install wsgidav[cheroot]\",\n );\n }\n\n const chromeBinary = await findBinary(...CHROME_CANDIDATES);\n if (!chromeBinary) {\n throw new Error(\"Chrome not found\\n\\nInstall Google Chrome or Chromium\");\n }\n\n const webdavPort = await getRandomPort();\n const cdpPort = await getRandomPort();\n\n const downloadsPath = join(homedir(), \"Downloads\");\n const wsgidav = spawn(\n wsgidavBinary,\n [\n \"--host=127.0.0.1\",\n `--port=${webdavPort}`,\n `--root=${downloadsPath}`,\n \"--auth=anonymous\",\n \"--no-config\",\n ],\n { stdio: [\"ignore\", \"pipe\", \"pipe\"] },\n );\n wsgidav.stdout?.on(\"data\", (data: Buffer) => {\n return process.stdout.write(data);\n });\n wsgidav.stderr?.on(\"data\", (data: Buffer) => {\n return process.stderr.write(data);\n });\n console.log(chalk.green(\"✓ WebDAV server started\"));\n\n const chrome = spawn(\n chromeBinary,\n [\n `--remote-debugging-port=${cdpPort}`,\n \"--remote-debugging-address=127.0.0.1\",\n \"--headless=new\",\n \"--no-sandbox\",\n \"--disable-gpu\",\n ],\n { stdio: [\"ignore\", \"pipe\", \"pipe\"] },\n );\n chrome.stdout?.on(\"data\", (data: Buffer) => {\n return process.stdout.write(data);\n });\n chrome.stderr?.on(\"data\", (data: Buffer) => {\n return process.stderr.write(data);\n });\n console.log(chalk.green(\"✓ Chrome started\"));\n\n try {\n await startNgrokTunnels(\n credentials.ngrokToken,\n credentials.endpointPrefix,\n webdavPort,\n cdpPort,\n );\n console.log(\n chalk.green(\n `✓ ngrok tunnels: webdav.${credentials.domain}, chrome.${credentials.domain}`,\n ),\n );\n\n console.log();\n console.log(chalk.green(\"✓ Computer connector active\"));\n console.log(` WebDAV: ~/Downloads → webdav.${credentials.domain}`);\n console.log(\n ` Chrome CDP: port ${cdpPort} → chrome.${credentials.domain}`,\n );\n console.log();\n console.log(chalk.dim(\"Press ^C twice to disconnect\"));\n console.log();\n\n let sigintCount = 0;\n await new Promise<void>((resolve) => {\n const keepAlive = setInterval(() => {}, 60_000);\n const done = () => {\n clearInterval(keepAlive);\n process.removeListener(\"SIGINT\", onSigint);\n resolve();\n };\n const onSigint = () => {\n sigintCount++;\n if (sigintCount === 1) {\n console.log(chalk.dim(\"\\nPress ^C again to disconnect and exit...\"));\n } else {\n done();\n }\n };\n process.on(\"SIGINT\", onSigint);\n process.once(\"SIGTERM\", done);\n });\n } finally {\n console.log();\n console.log(chalk.cyan(\"Stopping services...\"));\n wsgidav.kill(\"SIGTERM\");\n chrome.kill(\"SIGTERM\");\n await stopNgrokTunnels();\n console.log(chalk.green(\"✓ Services stopped\"));\n }\n}\n","// Dynamic import is intentional: @ngrok/ngrok contains native binaries that\n// crash on systems with GLIBC version mismatches. Lazy-loading ensures the\n// crash only affects the command that needs ngrok, not the entire CLI.\n// See: https://github.com/vm0-ai/vm0/issues/6825\nasync function loadNgrok(): Promise<typeof import(\"@ngrok/ngrok\")> {\n try {\n const mod = await import(\"@ngrok/ngrok\");\n return mod.default;\n } catch (cause) {\n throw new Error(\n \"Failed to load ngrok tunnel module. \" +\n \"This may be caused by a system library (GLIBC) incompatibility. \" +\n \"See: https://github.com/vm0-ai/vm0/issues/6825\",\n { cause },\n );\n }\n}\n\nexport async function startNgrokTunnels(\n ngrokToken: string,\n endpointPrefix: string,\n webdavPort: number,\n cdpPort: number,\n): Promise<void> {\n const ngrok = await loadNgrok();\n\n await ngrok.forward({\n addr: `localhost:${webdavPort}`,\n authtoken: ngrokToken,\n domain: `webdav.${endpointPrefix}.internal`,\n });\n\n await ngrok.forward({\n addr: `localhost:${cdpPort}`,\n authtoken: ngrokToken,\n domain: `chrome.${endpointPrefix}.internal`,\n });\n}\n\nexport async function stopNgrokTunnels(): Promise<void> {\n const ngrok = await loadNgrok();\n await ngrok.kill();\n}\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport {\n CONNECTOR_TYPES,\n hasRequiredScopes,\n isFeatureEnabled,\n type ConnectorType,\n} from \"@vm0/core\";\nimport { listZeroConnectors } from \"../../../lib/api\";\nimport { getActiveOrg } from \"../../../lib/api/config\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const listCommand = new Command()\n .name(\"list\")\n .alias(\"ls\")\n .description(\"List all connectors and their status\")\n .action(\n withErrorHandler(async () => {\n const result = await listZeroConnectors();\n const connectedMap = new Map(\n result.connectors.map((c) => {\n return [c.type, c];\n }),\n );\n const orgId = await getActiveOrg();\n\n const allTypesRaw = Object.keys(CONNECTOR_TYPES) as ConnectorType[];\n const allTypes: ConnectorType[] = [];\n for (const type of allTypesRaw) {\n const flag = CONNECTOR_TYPES[type].featureFlag;\n const hasApiToken = \"api-token\" in CONNECTOR_TYPES[type].authMethods;\n if (flag && !isFeatureEnabled(flag, { orgId }) && !hasApiToken) {\n continue;\n }\n allTypes.push(type);\n }\n\n // Calculate column widths\n const typeWidth = Math.max(\n 4,\n ...allTypes.map((t) => {\n return t.length;\n }),\n );\n const statusText = \"STATUS\";\n const statusWidth = statusText.length;\n\n // Print header\n const header = [\n \"TYPE\".padEnd(typeWidth),\n statusText.padEnd(statusWidth),\n \"ACCOUNT\",\n ].join(\" \");\n console.log(chalk.dim(header));\n\n // Print rows\n for (const type of allTypes) {\n const connector = connectedMap.get(type);\n const scopeMismatch =\n connector !== undefined &&\n connector.authMethod === \"oauth\" &&\n !hasRequiredScopes(type, connector.oauthScopes);\n const status = connector\n ? connector.needsReconnect\n ? chalk.yellow(\"!\".padEnd(statusWidth))\n : scopeMismatch\n ? chalk.yellow(\"!\".padEnd(statusWidth))\n : chalk.green(\"✓\".padEnd(statusWidth))\n : chalk.dim(\"-\".padEnd(statusWidth));\n const account = connector?.needsReconnect\n ? chalk.yellow(\"(reconnect needed)\")\n : scopeMismatch\n ? chalk.yellow(\"(permissions update available)\")\n : connector?.externalUsername\n ? `@${connector.externalUsername}`\n : chalk.dim(\"-\");\n\n const row = [type.padEnd(typeWidth), status, account].join(\" \");\n console.log(row);\n }\n\n // Always show connect hint\n console.log();\n console.log(chalk.dim(\"To connect a service:\"));\n console.log(chalk.dim(\" zero connector connect <type>\"));\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport {\n CONNECTOR_TYPES,\n connectorTypeSchema,\n getScopeDiff,\n hasRequiredScopes,\n} from \"@vm0/core\";\nimport { getZeroConnector } from \"../../../lib/api\";\nimport { formatDateTime } from \"../../../lib/domain/schedule-utils\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nconst LABEL_WIDTH = 16;\n\nexport const statusCommand = new Command()\n .name(\"status\")\n .description(\"Show detailed status of a connector\")\n .argument(\"<type>\", \"Connector type (e.g., github)\")\n .action(\n withErrorHandler(async (type: string) => {\n const parseResult = connectorTypeSchema.safeParse(type);\n if (!parseResult.success) {\n const available = Object.keys(CONNECTOR_TYPES).join(\", \");\n throw new Error(`Unknown connector type: ${type}`, {\n cause: new Error(`Available connectors: ${available}`),\n });\n }\n\n const connector = await getZeroConnector(parseResult.data);\n\n console.log(`Connector: ${chalk.cyan(type)}`);\n console.log();\n\n if (connector) {\n console.log(\n `${\"Status:\".padEnd(LABEL_WIDTH)}${chalk.green(\"connected\")}`,\n );\n console.log(\n `${\"Account:\".padEnd(LABEL_WIDTH)}@${connector.externalUsername}`,\n );\n console.log(\n `${\"Auth Method:\".padEnd(LABEL_WIDTH)}${connector.authMethod}`,\n );\n\n if (connector.oauthScopes && connector.oauthScopes.length > 0) {\n console.log(\n `${\"OAuth Scopes:\".padEnd(LABEL_WIDTH)}${connector.oauthScopes.join(\", \")}`,\n );\n }\n\n if (\n connector.authMethod === \"oauth\" &&\n !hasRequiredScopes(parseResult.data, connector.oauthScopes)\n ) {\n const diff = getScopeDiff(parseResult.data, connector.oauthScopes);\n console.log(\n `${\"Permissions:\".padEnd(LABEL_WIDTH)}${chalk.yellow(\"update available\")}`,\n );\n if (diff.addedScopes.length > 0) {\n console.log(\n `${\" Added:\".padEnd(LABEL_WIDTH)}${diff.addedScopes.join(\", \")}`,\n );\n }\n if (diff.removedScopes.length > 0) {\n console.log(\n `${\" Removed:\".padEnd(LABEL_WIDTH)}${diff.removedScopes.join(\", \")}`,\n );\n }\n }\n\n console.log(\n `${\"Connected:\".padEnd(LABEL_WIDTH)}${formatDateTime(connector.createdAt)}`,\n );\n\n if (connector.updatedAt !== connector.createdAt) {\n console.log(\n `${\"Last Updated:\".padEnd(LABEL_WIDTH)}${formatDateTime(connector.updatedAt)}`,\n );\n }\n\n console.log();\n console.log(chalk.dim(\"To disconnect:\"));\n console.log(chalk.dim(` zero connector disconnect ${type}`));\n } else {\n console.log(\n `${\"Status:\".padEnd(LABEL_WIDTH)}${chalk.dim(\"not connected\")}`,\n );\n console.log();\n console.log(chalk.dim(\"To connect:\"));\n console.log(chalk.dim(` zero connector connect ${type}`));\n }\n }),\n );\n","/**\n * Format a date string as relative time (e.g., \"in 2h\", \"3d ago\")\n */\nexport function formatRelativeTime(dateStr: string | null): string {\n if (!dateStr) return \"-\";\n\n const date = new Date(dateStr);\n const now = new Date();\n const diffMs = date.getTime() - now.getTime();\n const diffAbs = Math.abs(diffMs);\n\n const minutes = Math.floor(diffAbs / (1000 * 60));\n const hours = Math.floor(diffAbs / (1000 * 60 * 60));\n const days = Math.floor(diffAbs / (1000 * 60 * 60 * 24));\n\n const isPast = diffMs < 0;\n\n if (days > 0) {\n return isPast ? `${days}d ago` : `in ${days}d`;\n } else if (hours > 0) {\n return isPast ? `${hours}h ago` : `in ${hours}h`;\n } else if (minutes > 0) {\n return isPast ? `${minutes}m ago` : `in ${minutes}m`;\n } else {\n return isPast ? \"just now\" : \"soon\";\n }\n}\n\n/**\n * Format a date string with both absolute and relative time\n * e.g., \"2025-01-14 09:00 (in 2h)\"\n * Uses local timezone, but doesn't include timezone in output (shown separately)\n */\nexport function formatDateTime(dateStr: string | null): string {\n if (!dateStr) return \"-\";\n\n const date = new Date(dateStr);\n\n // Format: YYYY-MM-DD HH:MM (no seconds, no timezone - shown separately)\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\n const day = String(date.getDate()).padStart(2, \"0\");\n const hours = String(date.getHours()).padStart(2, \"0\");\n const minutes = String(date.getMinutes()).padStart(2, \"0\");\n\n const formatted = `${year}-${month}-${day} ${hours}:${minutes}`;\n const relative = formatRelativeTime(dateStr);\n\n return `${formatted} (${relative})`;\n}\n\n/**\n * Frequency type for schedule wizard\n */\nexport type ScheduleFrequency =\n | \"daily\"\n | \"weekly\"\n | \"monthly\"\n | \"once\"\n | \"loop\";\n\n/**\n * Generate cron expression from user-friendly inputs\n * @param frequency - Schedule frequency type\n * @param time - Time in HH:MM format (24-hour)\n * @param day - Day of week (0-6, Sun=0) for weekly, or day of month (1-31) for monthly\n * @returns Cron expression string\n */\nexport function generateCronExpression(\n frequency: Exclude<ScheduleFrequency, \"once\" | \"loop\">,\n time: string,\n day?: number,\n): string {\n const [hourStr, minuteStr] = time.split(\":\");\n const hour = parseInt(hourStr ?? \"0\", 10);\n const minute = parseInt(minuteStr ?? \"0\", 10);\n\n switch (frequency) {\n case \"daily\":\n return `${minute} ${hour} * * *`;\n case \"weekly\":\n return `${minute} ${hour} * * ${day ?? 1}`;\n case \"monthly\":\n return `${minute} ${hour} ${day ?? 1} * *`;\n }\n}\n\n/**\n * Detect system timezone using Intl API\n * @returns IANA timezone identifier (e.g., \"America/New_York\")\n */\nexport function detectTimezone(): string {\n return Intl.DateTimeFormat().resolvedOptions().timeZone;\n}\n\n/**\n * Validate time format (HH:MM, 24-hour)\n * @param time - Time string to validate\n * @returns true if valid, error message if invalid\n */\nexport function validateTimeFormat(time: string): boolean | string {\n const match = time.match(/^(\\d{1,2}):(\\d{2})$/);\n if (!match) {\n return \"Invalid format. Use HH:MM (e.g., 09:00)\";\n }\n\n const hour = parseInt(match[1]!, 10);\n const minute = parseInt(match[2]!, 10);\n\n if (hour < 0 || hour > 23) {\n return \"Hour must be 0-23\";\n }\n if (minute < 0 || minute > 59) {\n return \"Minute must be 0-59\";\n }\n if (minute % 5 !== 0) {\n return \"Minute must be a multiple of 5 (0, 5, 10, ..., 55)\";\n }\n\n return true;\n}\n\n/**\n * Validate date format (YYYY-MM-DD)\n * @param date - Date string to validate\n * @returns true if valid, error message if invalid\n */\nexport function validateDateFormat(date: string): boolean | string {\n const match = date.match(/^(\\d{4})-(\\d{2})-(\\d{2})$/);\n if (!match) {\n return \"Invalid format. Use YYYY-MM-DD (e.g., 2025-01-15)\";\n }\n\n const year = parseInt(match[1]!, 10);\n const month = parseInt(match[2]!, 10);\n const day = parseInt(match[3]!, 10);\n\n if (year < 2000 || year > 2100) {\n return \"Year must be between 2000 and 2100\";\n }\n if (month < 1 || month > 12) {\n return \"Month must be 1-12\";\n }\n if (day < 1 || day > 31) {\n return \"Day must be 1-31\";\n }\n\n // Validate the date is actually valid (e.g., not Feb 30)\n const testDate = new Date(year, month - 1, day);\n if (\n testDate.getFullYear() !== year ||\n testDate.getMonth() !== month - 1 ||\n testDate.getDate() !== day\n ) {\n return \"Invalid date\";\n }\n\n return true;\n}\n\n/**\n * Get tomorrow's date in local timezone as YYYY-MM-DD\n * @returns Date string in YYYY-MM-DD format\n */\nexport function getTomorrowDateLocal(): string {\n const tomorrow = new Date();\n tomorrow.setDate(tomorrow.getDate() + 1);\n const year = tomorrow.getFullYear();\n const month = String(tomorrow.getMonth() + 1).padStart(2, \"0\");\n const day = String(tomorrow.getDate()).padStart(2, \"0\");\n return `${year}-${month}-${day}`;\n}\n\n/**\n * Get current time in local timezone as HH:MM\n * @returns Time string in HH:MM format\n */\nexport function getCurrentTimeLocal(): string {\n const now = new Date();\n const hours = String(now.getHours()).padStart(2, \"0\");\n const minutes = String(now.getMinutes()).padStart(2, \"0\");\n return `${hours}:${minutes}`;\n}\n\n/**\n * Convert a human-readable datetime string to ISO format\n * Supports formats: \"YYYY-MM-DD HH:MM\" or full ISO string\n * @param dateTimeStr - DateTime string (e.g., \"2025-01-15 14:30\")\n * @returns ISO format string (e.g., \"2025-01-15T14:30:00.000Z\")\n */\nexport function toISODateTime(dateTimeStr: string): string {\n // If already in ISO format, return as-is\n if (dateTimeStr.includes(\"T\") && dateTimeStr.endsWith(\"Z\")) {\n return dateTimeStr;\n }\n\n // Convert \"YYYY-MM-DD HH:MM\" to ISO\n const isoStr = dateTimeStr.replace(\" \", \"T\") + \":00\";\n const date = new Date(isoStr);\n return date.toISOString();\n}\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { CONNECTOR_TYPES, connectorTypeSchema } from \"@vm0/core\";\nimport { deleteZeroConnector } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const disconnectCommand = new Command()\n .name(\"disconnect\")\n .description(\"Disconnect a third-party service\")\n .argument(\"<type>\", \"Connector type to disconnect (e.g., github)\")\n .action(\n withErrorHandler(async (type: string) => {\n const parseResult = connectorTypeSchema.safeParse(type);\n if (!parseResult.success) {\n const available = Object.keys(CONNECTOR_TYPES).join(\", \");\n throw new Error(`Unknown connector type: ${type}`, {\n cause: new Error(`Available connectors: ${available}`),\n });\n }\n\n const connectorType = parseResult.data;\n await deleteZeroConnector(connectorType);\n console.log(chalk.green(`✓ Disconnected ${type}`));\n }),\n );\n","import { Command } from \"commander\";\nimport { missingTokenCommand } from \"./missing-token\";\nimport { permissionDenyCommand } from \"./permission-deny\";\nimport { permissionChangeCommand } from \"./permission-change\";\n\nexport const zeroDoctorCommand = new Command()\n .name(\"doctor\")\n .description(\"Diagnose runtime issues (missing tokens, permission denials)\")\n .addCommand(missingTokenCommand)\n .addCommand(permissionDenyCommand)\n .addCommand(permissionChangeCommand)\n .addHelpText(\n \"after\",\n `\nExamples:\n Missing an API key? zero doctor missing-token GITHUB_TOKEN\n Permission denied? zero doctor permission-deny github --method GET --path /repos/owner/repo\n Change a permission? zero doctor permission-change github --permission contents:read --enable\n\nNotes:\n - Use this when your task fails due to a missing environment variable or permission denial\n - The doctor will identify the issue and give the user a link to resolve it`,\n );\n","import { Command } from \"commander\";\nimport {\n getConnectorTypeForSecretName,\n CONNECTOR_TYPES,\n type ConnectorType,\n} from \"@vm0/core\";\nimport { getApiUrl } from \"../../../lib/api/config\";\nimport { getZeroConnector } from \"../../../lib/api/domains/zero-connectors\";\nimport { getZeroAgentUserConnectors } from \"../../../lib/api/domains/zero-agents\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { toPlatformUrl } from \"./platform-url\";\n\nexport const missingTokenCommand = new Command()\n .name(\"missing-token\")\n .description(\n \"Diagnose a missing token and find the connector that provides it\",\n )\n .argument(\"<token-name>\", \"The environment variable / token name to look up\")\n .addHelpText(\n \"after\",\n `\nExamples:\n zero doctor missing-token GITHUB_TOKEN\n zero doctor missing-token LINEAR_API_KEY\n zero doctor missing-token NOTION_TOKEN\n\nNotes:\n - Outputs which connector provides the token and a URL for the user to connect it\n - Use this to guide the user when a required token is not available in the sandbox`,\n )\n .action(\n withErrorHandler(async (tokenName: string) => {\n const connectorType = getConnectorTypeForSecretName(tokenName);\n if (!connectorType) {\n throw new Error(\n `Unknown token: ${tokenName} — not managed by any connector`,\n );\n }\n\n const { label } = CONNECTOR_TYPES[connectorType];\n const apiUrl = await getApiUrl();\n const platformUrl = toPlatformUrl(apiUrl);\n const agentId = process.env.ZERO_AGENT_ID;\n\n // Check whether the token actually exists in the sandbox environment.\n const tokenPresent = Boolean(process.env[tokenName]);\n console.log(\n `${tokenName} is provided by the ${label} connector. Sandbox env: ${tokenPresent ? \"present\" : \"not present\"}.`,\n );\n\n // Check whether the user has connected this connector and whether the\n // agent has permission to use it. Run both checks in parallel.\n const [connector, enabledTypes] = await Promise.all([\n getZeroConnector(connectorType as ConnectorType).catch(() => {\n return null;\n }),\n agentId\n ? getZeroAgentUserConnectors(agentId).catch(() => {\n return null;\n })\n : Promise.resolve(null),\n ]);\n\n const isConnected = connector !== null;\n const hasPermission =\n enabledTypes !== null && enabledTypes.includes(connectorType);\n\n const rediagnoseHint = `Important: if ${tokenName} is still missing after the user takes action, run \\`zero doctor missing-token ${tokenName}\\` again to re-diagnose instead of assuming the status.`;\n\n if (!isConnected) {\n // Connector not connected — direct to the directed connect page\n const connectUrl = agentId\n ? `${platformUrl.origin}/connectors/${connectorType}/connect?agentId=${agentId}`\n : `${platformUrl.origin}/connectors/${connectorType}/connect`;\n console.log(\n `The ${label} connector is not connected. Ask the user to connect it at: [Connect ${label}](${connectUrl})\\n${rediagnoseHint}`,\n );\n return;\n }\n\n const issues: string[] = [];\n\n if (connector.needsReconnect) {\n const url = `${platformUrl.origin}/connectors`;\n issues.push(\n `The ${label} connector has expired and needs to be reconnected. Ask the user to reconnect it at: [Reconnect ${label}](${url})`,\n );\n }\n\n if (!hasPermission) {\n const url = agentId\n ? `${platformUrl.origin}/connectors/${connectorType}/authorize?agentId=${agentId}`\n : `${platformUrl.origin}/connectors`;\n issues.push(\n `The ${label} connector is not authorized for this agent. Ask the user to enable it at: [Authorize ${label}](${url})`,\n );\n }\n\n if (issues.length > 0) {\n for (const issue of issues) {\n console.log(issue);\n }\n console.log(rediagnoseHint);\n } else {\n // Both connected and authorized — something else is wrong\n const url = `${platformUrl.origin}/connectors`;\n console.log(\n `The ${label} connector is connected and authorized, but the token is still missing. Ask VM0 developer to resolve this issue. Connector status: [Check ${label} status](${url})\\n${rediagnoseHint}`,\n );\n }\n }),\n );\n","import { getApiUrl } from \"../../../lib/api/config\";\n\n/**\n * Transform the API host to the platform (app) host.\n *\n * www.vm0.ai → app.vm0.ai\n * platform.vm0.ai → app.vm0.ai\n * tunnel-user-host-www.vm7.ai → tunnel-user-host-app.vm7.ai\n * custom.example.com → app.custom.example.com\n */\nexport function toPlatformUrl(apiUrl: string): URL {\n const parsed = new URL(apiUrl);\n const parts = parsed.hostname.split(\".\");\n if (parts[0]!.endsWith(\"-www\")) {\n parts[0] = parts[0]!.slice(0, -\"-www\".length) + \"-app\";\n } else if (parts[0] === \"www\" || parts[0] === \"platform\") {\n parts[0] = \"app\";\n } else if (parts[0] !== \"app\" && parts[0] !== \"localhost\") {\n parts.unshift(\"app\");\n }\n parsed.hostname = parts.join(\".\");\n return parsed;\n}\n\nexport async function getPlatformOrigin(): Promise<string> {\n const apiUrl = await getApiUrl();\n return toPlatformUrl(apiUrl).origin;\n}\n","import { Command, Option } from \"commander\";\nimport {\n isFirewallConnectorType,\n getConnectorFirewall,\n findMatchingPermissions,\n CONNECTOR_TYPES,\n} from \"@vm0/core\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const permissionDenyCommand = new Command()\n .name(\"permission-deny\")\n .description(\n \"Diagnose a permission denial and find the permission that covers it\",\n )\n .argument(\"<connector-ref>\", \"The connector type (e.g. github)\")\n .addOption(\n new Option(\n \"--method <method>\",\n \"The denied HTTP method\",\n ).makeOptionMandatory(),\n )\n .addOption(\n new Option(\"--path <path>\", \"The denied path\").makeOptionMandatory(),\n )\n .addHelpText(\n \"after\",\n `\nExamples:\n zero doctor permission-deny github --method GET --path /repos/owner/repo/pulls\n zero doctor permission-deny slack --method POST --path /chat.postMessage\n\nNotes:\n - Identifies which named permission covers a denied request\n - Use permission-change to request or enable the permission`,\n )\n .action(\n withErrorHandler(\n async (connectorRef: string, opts: { method: string; path: string }) => {\n if (!isFirewallConnectorType(connectorRef)) {\n throw new Error(`Unknown connector type: ${connectorRef}`);\n }\n\n const { label } = CONNECTOR_TYPES[connectorRef];\n const config = getConnectorFirewall(connectorRef);\n const permissions = findMatchingPermissions(\n opts.method,\n opts.path,\n config,\n );\n\n console.log(\n `The ${label} permission filtered ${opts.method} ${opts.path}.`,\n );\n\n if (permissions.length === 0) {\n console.log(\"No named permission was found covering this request.\");\n return;\n }\n\n // Count total rules per permission name across all APIs\n const ruleCount = new Map<string, number>();\n for (const api of config.apis) {\n if (!api.permissions) continue;\n for (const perm of api.permissions) {\n ruleCount.set(\n perm.name,\n (ruleCount.get(perm.name) ?? 0) + perm.rules.length,\n );\n }\n }\n\n // Pick the permission with the fewest rules (most specific)\n const permission = permissions.reduce((narrowest, current) => {\n return (ruleCount.get(current) ?? Infinity) <\n (ruleCount.get(narrowest) ?? Infinity)\n ? current\n : narrowest;\n });\n console.log(`This is covered by the \"${permission}\" permission.`);\n console.log(\n `To request this permission, run: zero doctor permission-change ${connectorRef} --permission ${permission} --enable --reason \"why this is needed\"`,\n );\n },\n ),\n );\n","import { Command, Option } from \"commander\";\nimport {\n isFirewallConnectorType,\n getConnectorFirewall,\n CONNECTOR_TYPES,\n} from \"@vm0/core\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { getPlatformOrigin } from \"./platform-url\";\nimport { resolveAgentRole } from \"./resolve-role\";\n\nfunction findPermissionInConfig(ref: string, permissionName: string): boolean {\n if (!isFirewallConnectorType(ref)) return false;\n const config = getConnectorFirewall(ref);\n for (const api of config.apis) {\n if (!api.permissions) continue;\n for (const p of api.permissions) {\n if (p.name === permissionName) return true;\n }\n }\n return false;\n}\n\n/**\n * Core logic for outputting a permission change message.\n * Shared by both `permission-change` and `permission-deny` commands.\n */\nconst REASON_MAX_LENGTH = 500;\n\nasync function outputPermissionChangeMessage(\n connectorRef: string,\n permission: string,\n action: \"enable\" | \"disable\",\n reason?: string,\n): Promise<void> {\n const { label } =\n CONNECTOR_TYPES[connectorRef as keyof typeof CONNECTOR_TYPES];\n\n const platformOrigin = await getPlatformOrigin();\n const agentId = process.env.ZERO_AGENT_ID;\n const role = agentId ? await resolveAgentRole(agentId) : \"unknown\";\n\n const urlParams = new URLSearchParams({\n ref: connectorRef,\n permission,\n action: action === \"enable\" ? \"allow\" : \"deny\",\n });\n\n // Only include reason for member role (admin/owner can change directly)\n if (role === \"member\" && reason) {\n const truncated =\n reason.length > REASON_MAX_LENGTH\n ? reason.slice(0, REASON_MAX_LENGTH)\n : reason;\n urlParams.set(\"reason\", truncated);\n }\n\n const pagePath = agentId ? `/agents/${agentId}/permissions` : \"/agents\";\n const url = `${platformOrigin}${pagePath}?${urlParams.toString()}`;\n\n // Slack chat:write: strongly recommend bot-based messaging over user identity\n if (\n connectorRef === \"slack\" &&\n permission === \"chat:write\" &&\n action === \"enable\"\n ) {\n console.log(\"\");\n console.log(\n \"IMPORTANT: Granting chat:write allows sending messages AS THE USER's identity, not as a bot.\",\n );\n console.log(\n \"Use `zero slack message send -c <channel> -t <text>` to send messages as the bot instead — this is the recommended approach for most use cases.\",\n );\n console.log(\n \"Only request user approval below if acting as the user is specifically required.\",\n );\n console.log(\"\");\n }\n\n // Gmail gmail.send: strongly recommend draft-based workflow over direct send\n if (\n connectorRef === \"gmail\" &&\n permission === \"gmail.send\" &&\n action === \"enable\"\n ) {\n console.log(\"\");\n console.log(\n \"IMPORTANT: Granting gmail.send allows the agent to send emails directly as the user.\",\n );\n console.log(\n \"Consider keeping gmail.send disabled and using gmail.compose instead — the agent can create drafts for the user to review and send manually.\",\n );\n console.log(\n \"Only request user approval below if direct sending is specifically required.\",\n );\n console.log(\"\");\n }\n\n if (role === \"admin\" || role === \"owner\") {\n console.log(\n `You can ${action} the \"${permission}\" permission directly: [Manage ${label} permissions](${url})`,\n );\n } else if (role === \"member\") {\n if (!reason) {\n console.log(\n `IMPORTANT: Re-run with \\`--reason \"one sentence why this is needed\"\\` so the admin can review your request faster.`,\n );\n } else if (action === \"enable\") {\n console.log(\n `Permission changes require admin approval. Request access at: [Request ${label} access](${url})`,\n );\n } else {\n console.log(\n `Permission changes require admin approval. Contact an org admin to disable this permission: [View ${label} permissions](${url})`,\n );\n }\n } else {\n console.log(\n `To ${action} the \"${permission}\" permission for ${label}: [Manage ${label} permissions](${url})`,\n );\n }\n}\n\nexport const permissionChangeCommand = new Command()\n .name(\"permission-change\")\n .description(\"Request a permission change (enable or disable)\")\n .argument(\"<connector-ref>\", \"The connector type (e.g. github)\")\n .addOption(\n new Option(\n \"--permission <name>\",\n \"The permission name to change\",\n ).makeOptionMandatory(),\n )\n .addOption(\n new Option(\"--enable\", \"Request to enable the permission\").conflicts(\n \"disable\",\n ),\n )\n .addOption(\n new Option(\"--disable\", \"Request to disable the permission\").conflicts(\n \"enable\",\n ),\n )\n .addOption(\n new Option(\n \"--reason <text>\",\n \"Brief reason why the permission is needed (max 500 chars)\",\n ),\n )\n .addHelpText(\n \"after\",\n `\nExamples:\n zero doctor permission-change github --permission contents:read --enable\n zero doctor permission-change slack --permission chat:write --disable\n\nNotes:\n - Outputs a platform URL for the user to adjust the permission\n - Admins can change permissions directly; members must request approval`,\n )\n .action(\n withErrorHandler(\n async (\n connectorRef: string,\n opts: {\n permission: string;\n enable?: boolean;\n disable?: boolean;\n reason?: string;\n },\n ) => {\n if (!opts.enable && !opts.disable) {\n throw new Error(\"Either --enable or --disable is required\");\n }\n\n if (!isFirewallConnectorType(connectorRef)) {\n throw new Error(`Unknown connector type: ${connectorRef}`);\n }\n\n if (!findPermissionInConfig(connectorRef, opts.permission)) {\n throw new Error(\n `Unknown permission \"${opts.permission}\" for ${connectorRef}`,\n );\n }\n\n const action = opts.enable ? \"enable\" : \"disable\";\n await outputPermissionChangeMessage(\n connectorRef,\n opts.permission,\n action,\n opts.reason,\n );\n },\n ),\n );\n","import { getZeroOrg } from \"../../../lib/api/domains/zero-orgs\";\nimport { getZeroAgent } from \"../../../lib/api/domains/zero-agents\";\nimport { decodeZeroTokenPayload } from \"../../../lib/api/zero-token\";\nimport { decodeCliTokenPayload } from \"../../../lib/api/cli-token\";\nimport { getToken } from \"../../../lib/api/config\";\n\ntype AgentRole = \"admin\" | \"owner\" | \"member\" | \"unknown\";\n\n/**\n * Resolve the current user's userId from the available token.\n * Tries ZERO_TOKEN (sandbox) first, then CLI token.\n */\nasync function resolveUserId(): Promise<string | undefined> {\n const zeroPayload = decodeZeroTokenPayload();\n if (zeroPayload?.userId) return zeroPayload.userId;\n\n const token = await getToken();\n const cliPayload = decodeCliTokenPayload(token);\n return cliPayload?.userId;\n}\n\n/**\n * Best-effort role detection that also considers agent ownership.\n *\n * Returns \"admin\" if the user is an org admin (can manage any agent).\n * Returns \"owner\" if the user is a non-admin but owns the specified agent.\n * Returns \"member\" if the user is a non-admin, non-owner member.\n * Returns \"unknown\" on any API failure.\n */\nexport async function resolveAgentRole(agentId: string): Promise<AgentRole> {\n try {\n const org = await getZeroOrg();\n if (org.role === \"admin\") return \"admin\";\n\n if (org.role === \"member\") {\n // Check if the member owns this agent\n const userId = await resolveUserId();\n if (userId) {\n const agent = await getZeroAgent(agentId);\n if (agent.ownerId === userId) return \"owner\";\n }\n return \"member\";\n }\n\n return \"unknown\";\n } catch (error: unknown) {\n console.debug(\"resolveAgentRole failed, falling back to unknown:\", error);\n return \"unknown\";\n }\n}\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport {\n getZeroUserPreferences,\n updateZeroUserPreferences,\n} from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { isInteractive, promptText } from \"../../../lib/utils/prompt-utils\";\n\n/**\n * Detect system timezone using Intl API\n */\nfunction detectTimezone(): string {\n return Intl.DateTimeFormat().resolvedOptions().timeZone;\n}\n\n/**\n * Validate timezone using Intl.DateTimeFormat\n */\nfunction isValidTimezone(timezone: string): boolean {\n try {\n Intl.DateTimeFormat(undefined, { timeZone: timezone });\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Display current preferences\n */\nfunction displayPreferences(prefs: { timezone: string | null }): void {\n console.log(chalk.bold(\"Current preferences:\"));\n console.log(\n ` Timezone: ${prefs.timezone ? chalk.cyan(prefs.timezone) : chalk.dim(\"not set\")}`,\n );\n}\n\ninterface PreferenceOpts {\n timezone?: string;\n}\n\n/**\n * Build updates from CLI flags, exiting on invalid input\n */\nfunction buildUpdates(opts: PreferenceOpts): { timezone?: string } | null {\n if (opts.timezone === undefined) return null;\n\n if (!isValidTimezone(opts.timezone)) {\n throw new Error(`Invalid timezone: ${opts.timezone}`, {\n cause: new Error(\n \"Use an IANA timezone identifier (e.g., America/New_York, Asia/Shanghai)\",\n ),\n });\n }\n\n return { timezone: opts.timezone };\n}\n\n/**\n * Print confirmation after a successful update\n */\nfunction printUpdateResult(\n updates: { timezone?: string },\n result: { timezone: string | null },\n): void {\n if (updates.timezone !== undefined) {\n console.log(\n chalk.green(\n `Timezone set to ${chalk.cyan(result.timezone ?? updates.timezone)}`,\n ),\n );\n }\n}\n\n/**\n * Interactive prompts when no flags provided\n */\nasync function interactiveSetup(prefs: {\n timezone: string | null;\n}): Promise<void> {\n if (!prefs.timezone) {\n const detectedTz = detectTimezone();\n console.log(chalk.dim(`\\nSystem timezone detected: ${detectedTz}`));\n const tz = await promptText(\n \"Set timezone? (enter timezone or leave empty to skip)\",\n detectedTz,\n );\n if (tz?.trim()) {\n if (!isValidTimezone(tz.trim())) {\n throw new Error(`Invalid timezone: ${tz.trim()}`);\n }\n await updateZeroUserPreferences({ timezone: tz.trim() });\n console.log(chalk.green(`Timezone set to ${chalk.cyan(tz.trim())}`));\n }\n }\n}\n\n/**\n * zero preference\n *\n * View or update user preferences (timezone).\n */\nexport const zeroPreferenceCommand = new Command()\n .name(\"preference\")\n .description(\"View or update user preferences (timezone, notifications)\")\n .option(\"--timezone <timezone>\", \"IANA timezone (e.g., America/New_York)\")\n .action(\n withErrorHandler(async (opts: PreferenceOpts) => {\n const updates = buildUpdates(opts);\n\n if (updates) {\n const result = await updateZeroUserPreferences(updates);\n printUpdateResult(updates, result);\n return;\n }\n\n // No flags: display current preferences\n const prefs = await getZeroUserPreferences();\n displayPreferences(prefs);\n\n if (isInteractive()) {\n await interactiveSetup(prefs);\n } else if (!prefs.timezone) {\n console.log();\n console.log(\n `To set timezone: ${chalk.cyan(\"zero preference --timezone <timezone>\")}`,\n );\n console.log(\n chalk.dim(\"Example: zero preference --timezone America/New_York\"),\n );\n }\n }),\n );\n","import { mainRunCommand } from \"./run\";\nimport { continueCommand } from \"./continue\";\n\nmainRunCommand.addCommand(continueCommand);\n\nmainRunCommand.addHelpText(\n \"after\",\n `\nExamples:\n Discover teammates: zero agent list\n Delegate a task: zero run <agent-id> \"your task\"\n Continue delegation: zero run continue <session-id> \"follow up\"`,\n);\n\nexport const zeroRunCommand = mainRunCommand;\n","import { Command } from \"commander\";\nimport { createZeroRun } from \"../../../lib/api\";\nimport { isUUID, renderRunCreated } from \"../../run/shared\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { pollZeroEvents, showZeroNextSteps } from \"./shared\";\n\nexport const mainRunCommand = new Command()\n .name(\"run\")\n .description(\"Delegate a task to a teammate agent\")\n .argument(\"<agent-id>\", \"Agent UUID (from `zero agent list`)\")\n .argument(\"<prompt>\", \"Task prompt for the agent\")\n .option(\n \"--model-provider <type>\",\n \"Override model provider (e.g., anthropic-api-key)\",\n )\n .option(\"--verbose\", \"Show full tool inputs and outputs\")\n .addHelpText(\n \"after\",\n `\nExamples:\n Delegate a task: zero run <agent-id> \"summarize the latest issues\"\n With verbose output: zero run <agent-id> \"fix the bug\" --verbose\n\nNotes:\n - Get agent IDs from \"zero agent list\"\n - The command streams events until the delegated run completes\n - On success, a session ID is printed for follow-up with \"zero run continue\"`,\n )\n .action(\n withErrorHandler(\n async (\n agentId: string,\n prompt: string,\n options: {\n modelProvider?: string;\n verbose?: boolean;\n },\n ) => {\n // 1. Validate agent-id is a UUID\n if (!isUUID(agentId)) {\n throw new Error(`Invalid agent ID format: ${agentId}`, {\n cause: new Error(\n \"Agent ID must be a valid UUID. Use `zero agent list` to find agent IDs.\",\n ),\n });\n }\n\n // 2. Create zero run\n const response = await createZeroRun({\n agentId,\n prompt,\n modelProvider: options.modelProvider,\n });\n\n // 3. Check for immediate failure\n if (response.status === \"failed\") {\n throw new Error(\n \"Run preparation failed\",\n response.error ? { cause: new Error(response.error) } : undefined,\n );\n }\n\n // 4. Display run started/queued info\n renderRunCreated(response);\n\n // 5. Poll for events\n const result = await pollZeroEvents(response.runId, {\n verbose: options.verbose,\n });\n if (!result.succeeded) {\n throw new Error(\"Run failed\");\n }\n\n // 6. Show next steps\n showZeroNextSteps(result);\n },\n ),\n );\n","import chalk from \"chalk\";\nimport { getZeroRunAgentEvents, getZeroRun } from \"../../../lib/api\";\nimport type { RunResult } from \"../../../lib/api\";\nimport { parseEvent } from \"../../../lib/events/event-parser-factory\";\nimport { EventRenderer } from \"../../../lib/events/event-renderer\";\nimport type { PollResult, EventRenderingOptions } from \"../../run/shared\";\n\n/**\n * Safely narrow GetRunResponse.result to RunResult.\n * GetRunResponse.result has all fields optional (due to .passthrough()),\n * but RunResult requires checkpointId, agentSessionId, conversationId.\n * Extra fields (artifact, volumes, memory) are preserved at runtime via passthrough.\n */\nfunction toRunResult(result: {\n output?: string;\n executionTimeMs?: number;\n agentSessionId?: string;\n checkpointId?: string;\n conversationId?: string;\n}): RunResult | undefined {\n const { checkpointId, agentSessionId, conversationId } = result;\n if (!checkpointId || !agentSessionId || !conversationId) {\n return undefined;\n }\n return { checkpointId, agentSessionId, conversationId };\n}\n\n/**\n * Poll for zero run events until run completes.\n * Uses dual-poll approach: telemetry endpoint for events, getById for status.\n */\nexport async function pollZeroEvents(\n runId: string,\n options?: EventRenderingOptions,\n): Promise<PollResult> {\n const renderer = new EventRenderer({ verbose: options?.verbose });\n\n let lastSequence = -1;\n let complete = false;\n let result: PollResult = { succeeded: true, runId };\n const pollIntervalMs = 1000;\n\n while (!complete) {\n // 1. Fetch events from telemetry endpoint\n const eventsResponse = await getZeroRunAgentEvents(runId, {\n since: lastSequence,\n limit: 100,\n order: \"asc\",\n });\n\n // 2. Parse and render each event\n for (const event of eventsResponse.events) {\n const eventData = event.eventData as Record<string, unknown>;\n const parsed = parseEvent(eventData);\n if (parsed) {\n renderer.render(parsed);\n }\n }\n\n // 3. Track last sequence number for pagination\n if (eventsResponse.events.length > 0) {\n lastSequence = Math.max(\n ...eventsResponse.events.map((e) => {\n return e.sequenceNumber;\n }),\n );\n }\n\n // 4. Fetch run status separately\n const runResponse = await getZeroRun(runId);\n const runStatus = runResponse.status;\n\n if (runStatus === \"completed\") {\n complete = true;\n EventRenderer.renderRunCompleted(\n runResponse.result ? toRunResult(runResponse.result) : undefined,\n );\n result = {\n succeeded: true,\n runId,\n sessionId: runResponse.result?.agentSessionId,\n checkpointId: runResponse.result?.checkpointId,\n };\n } else if (runStatus === \"failed\") {\n complete = true;\n EventRenderer.renderRunFailed(runResponse.error, runId);\n result = { succeeded: false, runId };\n } else if (runStatus === \"timeout\") {\n complete = true;\n console.error(chalk.red(\"\\n✗ Run timed out\"));\n result = { succeeded: false, runId };\n } else if (runStatus === \"cancelled\") {\n complete = true;\n console.error(chalk.yellow(\"\\n✗ Run cancelled\"));\n result = { succeeded: false, runId };\n }\n\n if (!complete) {\n await new Promise((resolve) => {\n return setTimeout(resolve, pollIntervalMs);\n });\n }\n }\n\n return result;\n}\n\n/**\n * Display next steps after successful zero run\n */\nexport function showZeroNextSteps(result: PollResult): void {\n const { sessionId } = result;\n\n console.log();\n\n if (sessionId) {\n console.log(\" Continue delegation:\");\n console.log(\n chalk.cyan(` zero run continue ${sessionId} \"your next prompt\"`),\n );\n }\n}\n","import { Command } from \"commander\";\nimport { createZeroRun } from \"../../../lib/api\";\nimport { isUUID, renderRunCreated } from \"../../run/shared\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { pollZeroEvents, showZeroNextSteps } from \"./shared\";\n\nexport const continueCommand = new Command()\n .name(\"continue\")\n .description(\"Continue a previous delegation from a session\")\n .argument(\"<session-id>\", \"Session ID from a previous run\")\n .argument(\"<prompt>\", \"Follow-up prompt for the agent\")\n .option(\n \"--model-provider <type>\",\n \"Override model provider (e.g., anthropic-api-key)\",\n )\n .option(\"--verbose\", \"Show full tool inputs and outputs\")\n .addHelpText(\n \"after\",\n `\nExamples:\n zero run continue <session-id> \"now deploy it\"\n zero run continue <session-id> \"add tests\" --verbose\n\nNotes:\n - The session ID is printed after a successful \"zero run\" delegation\n - Continues the same agent session with full prior context`,\n )\n .action(\n withErrorHandler(\n async (\n sessionId: string,\n prompt: string,\n options: {\n modelProvider?: string;\n verbose?: boolean;\n },\n ) => {\n // 1. Validate session-id is a UUID\n if (!isUUID(sessionId)) {\n throw new Error(`Invalid session ID format: ${sessionId}`, {\n cause: new Error(\"Session ID must be a valid UUID\"),\n });\n }\n\n // 2. Create zero run with sessionId (no agentId needed)\n const response = await createZeroRun({\n sessionId,\n prompt,\n modelProvider: options.modelProvider,\n });\n\n // 3. Check for immediate failure\n if (response.status === \"failed\") {\n throw new Error(\n \"Run preparation failed\",\n response.error ? { cause: new Error(response.error) } : undefined,\n );\n }\n\n // 4. Display run started/queued info\n renderRunCreated(response);\n\n // 5. Poll for events\n const result = await pollZeroEvents(response.runId, {\n verbose: options.verbose,\n });\n if (!result.succeeded) {\n throw new Error(\"Run failed\");\n }\n\n // 6. Show next steps\n showZeroNextSteps(result);\n },\n ),\n );\n","import { Command } from \"commander\";\nimport { setupCommand } from \"./setup\";\nimport { listCommand } from \"./list\";\nimport { statusCommand } from \"./status\";\nimport { deleteCommand } from \"./delete\";\nimport { enableCommand } from \"./enable\";\nimport { disableCommand } from \"./disable\";\n\nexport const zeroScheduleCommand = new Command()\n .name(\"schedule\")\n .description(\"Create or manage recurring scheduled tasks\")\n .addCommand(setupCommand)\n .addCommand(listCommand)\n .addCommand(statusCommand)\n .addCommand(deleteCommand)\n .addCommand(enableCommand)\n .addCommand(disableCommand)\n .addHelpText(\n \"after\",\n `\nExamples:\n Create a schedule: zero schedule setup --help\n Check all schedules: zero schedule list\n Check schedule status: zero schedule status <agent-id>\n Pause a schedule: zero schedule disable <agent-id>\n Resume a schedule: zero schedule enable <agent-id>\n Delete a schedule: zero schedule delete <agent-id>`,\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport {\n isInteractive,\n promptText,\n promptSelect,\n promptConfirm,\n} from \"../../../lib/utils/prompt-utils\";\nimport {\n generateCronExpression,\n detectTimezone,\n validateTimeFormat,\n validateDateFormat,\n getTomorrowDateLocal,\n getCurrentTimeLocal,\n toISODateTime,\n type ScheduleFrequency,\n} from \"../../../lib/domain/schedule-utils\";\nimport {\n resolveCompose,\n deployZeroSchedule,\n listZeroSchedules,\n enableZeroSchedule,\n getZeroUserPreferences,\n ApiRequestError,\n} from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nconst FREQUENCY_CHOICES = [\n { title: \"Daily\", value: \"daily\" as const, description: \"Run every day\" },\n {\n title: \"Weekly\",\n value: \"weekly\" as const,\n description: \"Run once per week\",\n },\n {\n title: \"Monthly\",\n value: \"monthly\" as const,\n description: \"Run once per month\",\n },\n {\n title: \"One-time\",\n value: \"once\" as const,\n description: \"Run once at specific time\",\n },\n {\n title: \"Loop\",\n value: \"loop\" as const,\n description: \"Run repeatedly at fixed intervals\",\n },\n];\n\nconst DAY_OF_WEEK_CHOICES = [\n { title: \"Monday\", value: 1 },\n { title: \"Tuesday\", value: 2 },\n { title: \"Wednesday\", value: 3 },\n { title: \"Thursday\", value: 4 },\n { title: \"Friday\", value: 5 },\n { title: \"Saturday\", value: 6 },\n { title: \"Sunday\", value: 0 },\n];\n\nfunction parseDayOption(\n day: string,\n frequency: ScheduleFrequency,\n): number | undefined {\n if (frequency === \"weekly\") {\n const dayMap: Record<string, number> = {\n sun: 0,\n mon: 1,\n tue: 2,\n wed: 3,\n thu: 4,\n fri: 5,\n sat: 6,\n };\n return dayMap[day.toLowerCase()];\n } else if (frequency === \"monthly\") {\n const num = parseInt(day, 10);\n if (num >= 1 && num <= 31) {\n return num;\n }\n }\n return undefined;\n}\n\nfunction formatInTimezone(isoDate: string, timezone: string): string {\n const date = new Date(isoDate);\n const parts = new Intl.DateTimeFormat(\"en-CA\", {\n timeZone: timezone,\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n hour12: false,\n }).formatToParts(date);\n\n const get = (type: string) => {\n return (\n parts.find((p) => {\n return p.type === type;\n })?.value ?? \"\"\n );\n };\n return `${get(\"year\")}-${get(\"month\")}-${get(\"day\")} ${get(\"hour\")}:${get(\"minute\")}`;\n}\n\nfunction parseFrequencyFromCron(\n cron: string,\n): { frequency: ScheduleFrequency; day?: number; time: string } | null {\n const parts = cron.split(\" \");\n if (parts.length !== 5) return null;\n\n const [minute, hour, dayOfMonth, , dayOfWeek] = parts;\n const time = `${hour!.padStart(2, \"0\")}:${minute!.padStart(2, \"0\")}`;\n\n if (dayOfMonth === \"*\" && dayOfWeek === \"*\") {\n return { frequency: \"daily\", time };\n } else if (dayOfMonth === \"*\" && dayOfWeek !== \"*\") {\n return { frequency: \"weekly\", day: parseInt(dayOfWeek!, 10), time };\n } else if (dayOfMonth !== \"*\" && dayOfWeek === \"*\") {\n return { frequency: \"monthly\", day: parseInt(dayOfMonth!, 10), time };\n }\n\n return null;\n}\n\ninterface SetupOptions {\n name?: string;\n frequency?: string;\n time?: string;\n day?: string;\n interval?: string;\n timezone?: string;\n prompt?: string;\n enable?: boolean;\n}\n\ninterface ExistingScheduleDefaults {\n frequency?: ScheduleFrequency;\n day?: number;\n time?: string;\n intervalSeconds?: number;\n}\n\ninterface ScheduleListItem {\n name: string;\n agentId: string;\n triggerType?: \"cron\" | \"once\" | \"loop\";\n cronExpression?: string | null;\n atTime?: string | null;\n intervalSeconds?: number | null;\n timezone: string;\n prompt: string;\n enabled?: boolean;\n}\n\nfunction getExistingDefaults(\n existingSchedule: ScheduleListItem | undefined,\n): ExistingScheduleDefaults {\n const defaults: ExistingScheduleDefaults = {};\n\n if (existingSchedule?.triggerType === \"loop\") {\n defaults.frequency = \"loop\";\n defaults.intervalSeconds = existingSchedule.intervalSeconds ?? undefined;\n } else if (existingSchedule?.cronExpression) {\n const parsed = parseFrequencyFromCron(existingSchedule.cronExpression);\n if (parsed) {\n defaults.frequency = parsed.frequency;\n defaults.day = parsed.day;\n defaults.time = parsed.time;\n }\n } else if (existingSchedule?.atTime) {\n defaults.frequency = \"once\";\n }\n\n return defaults;\n}\n\nasync function gatherFrequency(\n optionFrequency: string | undefined,\n existingFrequency: ScheduleFrequency | undefined,\n): Promise<ScheduleFrequency | null> {\n let frequency = optionFrequency as ScheduleFrequency | undefined;\n\n if (\n frequency &&\n [\"daily\", \"weekly\", \"monthly\", \"once\", \"loop\"].includes(frequency)\n ) {\n return frequency;\n }\n\n if (!isInteractive()) {\n throw new Error(\"--frequency is required (daily|weekly|monthly|once|loop)\");\n }\n\n const defaultIndex = existingFrequency\n ? FREQUENCY_CHOICES.findIndex((c) => {\n return c.value === existingFrequency;\n })\n : 0;\n\n frequency = await promptSelect<ScheduleFrequency>(\n \"Schedule frequency\",\n FREQUENCY_CHOICES,\n defaultIndex >= 0 ? defaultIndex : 0,\n );\n\n return frequency || null;\n}\n\nasync function gatherDay(\n frequency: ScheduleFrequency,\n optionDay: string | undefined,\n existingDay: number | undefined,\n): Promise<number | null> {\n if (frequency !== \"weekly\" && frequency !== \"monthly\") {\n return null;\n }\n\n if (optionDay) {\n const day = parseDayOption(optionDay, frequency);\n if (day === undefined) {\n throw new Error(\n `Invalid day: ${optionDay}. Use mon-sun for weekly or 1-31 for monthly.`,\n );\n }\n return day;\n }\n\n if (!isInteractive()) {\n throw new Error(\"--day is required for weekly/monthly\");\n }\n\n if (frequency === \"weekly\") {\n const defaultDayIndex =\n existingDay !== undefined\n ? DAY_OF_WEEK_CHOICES.findIndex((c) => {\n return c.value === existingDay;\n })\n : 0;\n const day = await promptSelect(\n \"Day of week\",\n DAY_OF_WEEK_CHOICES,\n defaultDayIndex >= 0 ? defaultDayIndex : 0,\n );\n return day ?? null;\n }\n\n const dayStr = await promptText(\n \"Day of month (1-31)\",\n existingDay?.toString() || \"1\",\n );\n if (!dayStr) return null;\n\n const day = parseInt(dayStr, 10);\n if (isNaN(day) || day < 1 || day > 31) {\n throw new Error(\"Day must be between 1 and 31\");\n }\n return day;\n}\n\nasync function gatherRecurringTime(\n optionTime: string | undefined,\n existingTime: string | undefined,\n): Promise<string | undefined> {\n if (optionTime) {\n const validation = validateTimeFormat(optionTime);\n if (validation !== true) {\n throw new Error(`Invalid time: ${validation}`);\n }\n return optionTime;\n }\n\n if (!isInteractive()) {\n throw new Error(\"--time is required (HH:MM format)\");\n }\n\n return await promptText(\n \"Time (HH:MM)\",\n existingTime || \"09:00\",\n validateTimeFormat,\n );\n}\n\nasync function gatherOneTimeSchedule(\n optionDay: string | undefined,\n optionTime: string | undefined,\n existingTime: string | undefined,\n): Promise<string | null> {\n if (optionDay && optionTime) {\n if (!validateDateFormat(optionDay)) {\n throw new Error(\n `Invalid date format: ${optionDay}. Use YYYY-MM-DD format.`,\n );\n }\n if (!validateTimeFormat(optionTime)) {\n throw new Error(`Invalid time format: ${optionTime}. Use HH:MM format.`);\n }\n return `${optionDay} ${optionTime}`;\n }\n\n if (!isInteractive()) {\n throw new Error(\"One-time schedules require interactive mode\", {\n cause: new Error(\n \"Or provide --day (YYYY-MM-DD) and --time (HH:MM) flags\",\n ),\n });\n }\n\n const tomorrowDate = getTomorrowDateLocal();\n const date = await promptText(\n \"Date (YYYY-MM-DD, default tomorrow)\",\n tomorrowDate,\n validateDateFormat,\n );\n if (!date) return null;\n\n const currentTime = getCurrentTimeLocal();\n const time = await promptText(\n \"Time (HH:MM)\",\n existingTime || currentTime,\n validateTimeFormat,\n );\n if (!time) return null;\n\n return `${date} ${time}`;\n}\n\nasync function gatherTimezone(\n optionTimezone: string | undefined,\n existingTimezone: string | undefined | null,\n): Promise<string | undefined> {\n if (optionTimezone) return optionTimezone;\n\n let userTimezone: string | null = null;\n try {\n const prefs = await getZeroUserPreferences();\n userTimezone = prefs.timezone;\n } catch {\n console.log(\n chalk.dim(\"Could not fetch timezone preference, using detected timezone\"),\n );\n }\n\n const defaultTimezone = userTimezone || detectTimezone();\n\n if (!isInteractive()) {\n return defaultTimezone;\n }\n\n return await promptText(\"Timezone\", existingTimezone || defaultTimezone);\n}\n\nasync function gatherPromptText(\n optionPrompt: string | undefined,\n existingPrompt: string | undefined | null,\n): Promise<string | undefined> {\n if (optionPrompt) return optionPrompt;\n\n if (!isInteractive()) {\n throw new Error(\"--prompt is required\");\n }\n\n return await promptText(\n \"Prompt to run\",\n existingPrompt || \"let's start working.\",\n );\n}\n\nasync function gatherInterval(\n optionInterval: string | undefined,\n existingInterval: number | undefined,\n): Promise<number | null> {\n if (optionInterval) {\n const val = parseInt(optionInterval, 10);\n if (isNaN(val) || val < 0) {\n throw new Error(\n \"Invalid interval. Must be a non-negative integer (seconds)\",\n );\n }\n return val;\n }\n\n if (!isInteractive()) {\n throw new Error(\"--interval is required for loop schedules (seconds)\");\n }\n\n const defaultVal =\n existingInterval !== undefined ? String(existingInterval) : \"300\";\n const result = await promptText(\n \"Interval in seconds (time between runs)\",\n defaultVal,\n (v: string) => {\n const n = parseInt(v, 10);\n if (isNaN(n) || n < 0) return \"Must be a non-negative integer\";\n return true;\n },\n );\n if (!result) return null;\n return parseInt(result, 10);\n}\n\nasync function gatherTiming(\n frequency: ScheduleFrequency,\n options: SetupOptions,\n defaults: ExistingScheduleDefaults,\n): Promise<{\n day: number | undefined;\n time: string | undefined;\n atTime: string | undefined;\n intervalSeconds: number | undefined;\n} | null> {\n if (frequency === \"loop\") {\n const intervalSeconds = await gatherInterval(\n options.interval,\n defaults.intervalSeconds,\n );\n if (intervalSeconds === null) return null;\n return {\n day: undefined,\n time: undefined,\n atTime: undefined,\n intervalSeconds,\n };\n }\n\n if (frequency === \"once\") {\n const result = await gatherOneTimeSchedule(\n options.day,\n options.time,\n defaults.time,\n );\n if (!result) return null;\n return {\n day: undefined,\n time: undefined,\n atTime: result,\n intervalSeconds: undefined,\n };\n }\n\n const day =\n (await gatherDay(frequency, options.day, defaults.day)) ?? undefined;\n if (day === null && (frequency === \"weekly\" || frequency === \"monthly\")) {\n return null;\n }\n\n const time = await gatherRecurringTime(options.time, defaults.time);\n if (!time) return null;\n\n return { day, time, atTime: undefined, intervalSeconds: undefined };\n}\n\nasync function findExistingSchedule(\n agentId: string,\n scheduleName: string,\n): Promise<ScheduleListItem | undefined> {\n const { schedules } = await listZeroSchedules();\n return schedules.find((s) => {\n return s.agentId === agentId && s.name === scheduleName;\n });\n}\n\ninterface DeployResult {\n created: boolean;\n schedule: {\n triggerType?: \"cron\" | \"once\" | \"loop\";\n timezone: string;\n cronExpression?: string | null;\n nextRunAt?: string | null;\n atTime?: string | null;\n intervalSeconds?: number | null;\n };\n}\n\nasync function buildAndDeploy(params: {\n scheduleName: string;\n agentId: string;\n agentName: string;\n frequency: ScheduleFrequency;\n time: string | undefined;\n day: number | undefined;\n atTime: string | undefined;\n intervalSeconds: number | undefined;\n timezone: string;\n prompt: string;\n}): Promise<DeployResult> {\n let cronExpression: string | undefined;\n let atTimeISO: string | undefined;\n\n if (params.frequency === \"loop\") {\n // Loop mode: intervalSeconds is passed directly\n } else if (params.atTime) {\n atTimeISO = toISODateTime(params.atTime);\n } else if (params.time && params.frequency !== \"once\") {\n cronExpression = generateCronExpression(\n params.frequency,\n params.time,\n params.day,\n );\n }\n\n console.log(\n `\\nDeploying schedule for agent ${chalk.cyan(params.agentName)}...`,\n );\n\n const deployResult = await deployZeroSchedule({\n name: params.scheduleName,\n agentId: params.agentId,\n cronExpression,\n atTime: atTimeISO,\n intervalSeconds: params.intervalSeconds,\n timezone: params.timezone,\n prompt: params.prompt,\n });\n\n return deployResult;\n}\n\nfunction displayDeployResult(\n scheduleName: string,\n deployResult: DeployResult,\n): void {\n if (deployResult.created) {\n console.log(chalk.green(`✓ Schedule \"${scheduleName}\" created`));\n } else {\n console.log(chalk.green(`✓ Schedule \"${scheduleName}\" updated`));\n }\n\n console.log(chalk.dim(` Timezone: ${deployResult.schedule.timezone}`));\n\n if (\n deployResult.schedule.triggerType === \"loop\" &&\n deployResult.schedule.intervalSeconds != null\n ) {\n console.log(\n chalk.dim(\n ` Mode: Loop (interval ${deployResult.schedule.intervalSeconds}s)`,\n ),\n );\n } else if (deployResult.schedule.cronExpression) {\n console.log(chalk.dim(` Cron: ${deployResult.schedule.cronExpression}`));\n if (deployResult.schedule.nextRunAt) {\n const nextRun = formatInTimezone(\n deployResult.schedule.nextRunAt,\n deployResult.schedule.timezone,\n );\n console.log(chalk.dim(` Next run: ${nextRun}`));\n }\n } else if (deployResult.schedule.atTime) {\n const atTimeFormatted = formatInTimezone(\n deployResult.schedule.atTime,\n deployResult.schedule.timezone,\n );\n console.log(chalk.dim(` At: ${atTimeFormatted}`));\n }\n}\n\nasync function tryEnableSchedule(\n scheduleName: string,\n agentId: string,\n agentName: string,\n): Promise<void> {\n try {\n await enableZeroSchedule({ name: scheduleName, agentId });\n console.log(chalk.green(`✓ Schedule \"${scheduleName}\" enabled`));\n } catch (error) {\n console.error(chalk.yellow(\"⚠ Failed to enable schedule\"));\n if (error instanceof ApiRequestError) {\n if (error.code === \"SCHEDULE_PAST\") {\n console.error(chalk.dim(\" Scheduled time has already passed\"));\n } else {\n console.error(chalk.dim(` ${error.message}`));\n }\n } else if (error instanceof Error) {\n console.error(chalk.dim(` ${error.message}`));\n }\n console.log(\n ` To enable manually: ${chalk.cyan(`zero schedule enable ${agentName}`)}`,\n );\n }\n}\n\nfunction showEnableHint(agentName: string): void {\n console.log();\n console.log(\n ` To enable: ${chalk.cyan(`zero schedule enable ${agentName}`)}`,\n );\n}\n\nasync function handleScheduleEnabling(params: {\n scheduleName: string;\n agentId: string;\n agentName: string;\n enableFlag: boolean;\n shouldPromptEnable: boolean;\n}): Promise<void> {\n const { scheduleName, agentId, agentName, enableFlag, shouldPromptEnable } =\n params;\n\n if (enableFlag) {\n await tryEnableSchedule(scheduleName, agentId, agentName);\n return;\n }\n\n if (shouldPromptEnable && isInteractive()) {\n const enableNow = await promptConfirm(\"Enable this schedule?\", true);\n if (enableNow) {\n await tryEnableSchedule(scheduleName, agentId, agentName);\n } else {\n showEnableHint(agentName);\n }\n return;\n }\n\n if (shouldPromptEnable) {\n showEnableHint(agentName);\n }\n}\n\nexport const setupCommand = new Command()\n .name(\"setup\")\n .description(\"Create or edit a schedule for a zero agent\")\n .argument(\"<agent-id>\", \"Agent ID\")\n .option(\"-n, --name <schedule-name>\", 'Schedule name (default: \"default\")')\n .option(\"-f, --frequency <type>\", \"Frequency: daily|weekly|monthly|once|loop\")\n .option(\"-t, --time <HH:MM>\", \"Time to run (24-hour format)\")\n .option(\"-d, --day <day>\", \"Day of week (mon-sun) or day of month (1-31)\")\n .option(\"-i, --interval <seconds>\", \"Interval in seconds for loop mode\")\n .option(\"-z, --timezone <tz>\", \"IANA timezone\")\n .option(\"-p, --prompt <text>\", \"Prompt to run\")\n .option(\"-e, --enable\", \"Enable schedule immediately after creation\")\n .addHelpText(\n \"after\",\n `\nExamples:\n Daily at 9am: zero schedule setup <agent-id> -f daily -t 09:00 -p \"run report\"\n Weekly on Monday: zero schedule setup <agent-id> -f weekly -d mon -t 10:00 -p \"weekly sync\"\n Monthly on the 1st: zero schedule setup <agent-id> -f monthly -d 1 -t 08:00 -p \"monthly review\"\n One-time: zero schedule setup <agent-id> -f once -d 2026-04-01 -t 14:00 -p \"one-off task\"\n Loop every 5 minutes: zero schedule setup <agent-id> -f loop -i 300 -p \"poll for updates\"\n Create and enable: zero schedule setup <agent-id> -f daily -t 09:00 -p \"run report\" --enable\n\nNotes:\n - Re-running setup with the same agent updates the existing \"default\" schedule\n - Use -n to manage multiple named schedules for the same agent\n - All flags are required in non-interactive mode; interactive mode prompts for missing values`,\n )\n .action(\n withErrorHandler(async (agentIdentifier: string, options: SetupOptions) => {\n // 1. Resolve agent identifier (UUID or name) to compose ID\n const compose = await resolveCompose(agentIdentifier);\n if (!compose) {\n throw new Error(`Agent not found: ${agentIdentifier}`);\n }\n const agentId = compose.id;\n const scheduleName = options.name || \"default\";\n\n // 2. Check for existing schedule\n const existingSchedule = await findExistingSchedule(\n agentId,\n scheduleName,\n );\n\n const agentName = compose.name;\n console.log(\n chalk.dim(\n existingSchedule\n ? `Editing existing schedule for agent ${agentName}`\n : `Creating new schedule for agent ${agentName}`,\n ),\n );\n\n const defaults = getExistingDefaults(existingSchedule);\n\n // 3. Gather frequency\n const frequency = await gatherFrequency(\n options.frequency,\n defaults.frequency,\n );\n if (!frequency) {\n console.log(chalk.dim(\"Cancelled\"));\n return;\n }\n\n // 4. Gather day and time\n const timing = await gatherTiming(frequency, options, defaults);\n if (!timing) {\n console.log(chalk.dim(\"Cancelled\"));\n return;\n }\n const { day, time, atTime, intervalSeconds } = timing;\n\n // 5. Gather timezone\n const timezone = await gatherTimezone(\n options.timezone,\n existingSchedule?.timezone,\n );\n if (!timezone) {\n console.log(chalk.dim(\"Cancelled\"));\n return;\n }\n\n // 6. Gather prompt\n const promptText_ = await gatherPromptText(\n options.prompt,\n existingSchedule?.prompt,\n );\n if (!promptText_) {\n console.log(chalk.dim(\"Cancelled\"));\n return;\n }\n\n // 7. Build trigger and deploy\n const deployResult = await buildAndDeploy({\n scheduleName,\n agentId,\n agentName,\n frequency,\n time,\n day,\n atTime,\n intervalSeconds,\n timezone,\n prompt: promptText_,\n });\n\n // 8. Display deployment result\n displayDeployResult(scheduleName, deployResult);\n\n // 9. Handle schedule enabling\n const shouldPromptEnable =\n deployResult.created ||\n (existingSchedule !== undefined && !existingSchedule.enabled);\n\n await handleScheduleEnabling({\n scheduleName,\n agentId,\n agentName,\n enableFlag: options.enable ?? false,\n shouldPromptEnable,\n });\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { listZeroSchedules } from \"../../../lib/api\";\nimport { formatRelativeTime } from \"../../../lib/domain/schedule-utils\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const listCommand = new Command()\n .name(\"list\")\n .alias(\"ls\")\n .description(\"List all zero schedules\")\n .addHelpText(\n \"after\",\n `\nExamples:\n zero schedule list`,\n )\n .action(\n withErrorHandler(async () => {\n const result = await listZeroSchedules();\n\n if (result.schedules.length === 0) {\n console.log(chalk.dim(\"No schedules found\"));\n console.log(\n chalk.dim(\" Create one with: zero schedule setup <agent-id>\"),\n );\n return;\n }\n\n const agentWidth = Math.max(\n 5,\n ...result.schedules.map((s) => {\n return s.agentId.length;\n }),\n );\n const scheduleWidth = Math.max(\n 8,\n ...result.schedules.map((s) => {\n return s.name.length;\n }),\n );\n const triggerWidth = Math.max(\n 7,\n ...result.schedules.map((s) => {\n return s.cronExpression\n ? s.cronExpression.length + s.timezone.length + 3\n : s.atTime?.length || 0;\n }),\n );\n\n const header = [\n \"AGENT\".padEnd(agentWidth),\n \"SCHEDULE\".padEnd(scheduleWidth),\n \"TRIGGER\".padEnd(triggerWidth),\n \"STATUS\".padEnd(8),\n \"NEXT RUN\",\n ].join(\" \");\n console.log(chalk.dim(header));\n\n for (const schedule of result.schedules) {\n const trigger = schedule.cronExpression\n ? `${schedule.cronExpression} (${schedule.timezone})`\n : schedule.atTime || \"-\";\n\n const status = schedule.enabled\n ? chalk.green(\"enabled\")\n : chalk.yellow(\"disabled\");\n\n const nextRun = schedule.enabled\n ? formatRelativeTime(schedule.nextRunAt)\n : \"-\";\n\n const row = [\n schedule.agentId.padEnd(agentWidth),\n schedule.name.padEnd(scheduleWidth),\n trigger.padEnd(triggerWidth),\n status.padEnd(8 + (schedule.enabled ? 0 : 2)),\n nextRun,\n ].join(\" \");\n console.log(row);\n }\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { resolveZeroScheduleByAgent } from \"../../../lib/api\";\nimport {\n formatDateTime,\n detectTimezone,\n} from \"../../../lib/domain/schedule-utils\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport type { ScheduleResponse } from \"@vm0/core\";\n\n/**\n * Format date with styled relative time (adds chalk formatting)\n */\nfunction formatDateTimeStyled(dateStr: string | null): string {\n if (!dateStr) return chalk.dim(\"-\");\n const formatted = formatDateTime(dateStr);\n return formatted.replace(/\\(([^)]+)\\)$/, chalk.dim(\"($1)\"));\n}\n\n/**\n * Format trigger (cron or at) - timezone shown separately\n */\nfunction formatTrigger(schedule: ScheduleResponse): string {\n if (schedule.triggerType === \"loop\" && schedule.intervalSeconds !== null) {\n return `interval ${schedule.intervalSeconds}s ${chalk.dim(\"(loop)\")}`;\n }\n if (schedule.cronExpression) {\n return schedule.cronExpression;\n }\n if (schedule.atTime) {\n return `${schedule.atTime} ${chalk.dim(\"(one-time)\")}`;\n }\n return chalk.dim(\"-\");\n}\n\n/**\n * Print run configuration section\n */\nfunction printRunConfiguration(schedule: ScheduleResponse): void {\n const statusText = schedule.enabled\n ? chalk.green(\"enabled\")\n : chalk.yellow(\"disabled\");\n console.log(`${\"Status:\".padEnd(16)}${statusText}`);\n\n console.log(`${\"Agent:\".padEnd(16)}${schedule.agentId}`);\n\n const promptPreview =\n schedule.prompt.length > 60\n ? schedule.prompt.slice(0, 57) + \"...\"\n : schedule.prompt;\n console.log(`${\"Prompt:\".padEnd(16)}${chalk.dim(promptPreview)}`);\n\n if (schedule.vars && Object.keys(schedule.vars).length > 0) {\n console.log(\n `${\"Variables:\".padEnd(16)}${Object.keys(schedule.vars).join(\", \")}`,\n );\n }\n\n if (schedule.secretNames && schedule.secretNames.length > 0) {\n console.log(`${\"Secrets:\".padEnd(16)}${schedule.secretNames.join(\", \")}`);\n }\n\n if (\n schedule.volumeVersions &&\n Object.keys(schedule.volumeVersions).length > 0\n ) {\n console.log(\n `${\"Volumes:\".padEnd(16)}${Object.keys(schedule.volumeVersions).join(\", \")}`,\n );\n }\n}\n\n/**\n * Print time schedule section\n */\nfunction printTimeSchedule(schedule: ScheduleResponse): void {\n console.log();\n console.log(`${\"Trigger:\".padEnd(16)}${formatTrigger(schedule)}`);\n console.log(`${\"Timezone:\".padEnd(16)}${detectTimezone()}`);\n\n if (schedule.enabled) {\n console.log(\n `${\"Next Run:\".padEnd(16)}${formatDateTimeStyled(schedule.nextRunAt)}`,\n );\n }\n\n if (schedule.triggerType === \"loop\" || schedule.triggerType === \"cron\") {\n const failureText =\n schedule.consecutiveFailures > 0\n ? chalk.yellow(`${schedule.consecutiveFailures}/3`)\n : chalk.dim(\"0/3\");\n console.log(`${\"Failures:\".padEnd(16)}${failureText}`);\n }\n}\n\nexport const statusCommand = new Command()\n .name(\"status\")\n .description(\"Show detailed status of a zero schedule\")\n .argument(\"<agent-id>\", \"Agent ID\")\n .option(\n \"-n, --name <schedule-name>\",\n \"Schedule name (required when agent has multiple schedules)\",\n )\n .addHelpText(\n \"after\",\n `\nExamples:\n zero schedule status <agent-id>\n zero schedule status <agent-id> -n my-schedule`,\n )\n .action(\n withErrorHandler(async (agentName: string, options: { name?: string }) => {\n const schedule = await resolveZeroScheduleByAgent(\n agentName,\n options.name,\n );\n\n console.log();\n console.log(`Schedule for agent: ${chalk.cyan(agentName)}`);\n console.log(chalk.dim(\"━\".repeat(50)));\n\n printRunConfiguration(schedule);\n printTimeSchedule(schedule);\n\n console.log();\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport {\n deleteZeroSchedule,\n resolveZeroScheduleByAgent,\n} from \"../../../lib/api\";\nimport { isInteractive, promptConfirm } from \"../../../lib/utils/prompt-utils\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const deleteCommand = new Command()\n .name(\"delete\")\n .alias(\"rm\")\n .description(\"Delete a zero schedule\")\n .argument(\"<agent-id>\", \"Agent ID\")\n .option(\n \"-n, --name <schedule-name>\",\n \"Schedule name (required when agent has multiple schedules)\",\n )\n .option(\"-y, --yes\", \"Skip confirmation prompt\")\n .addHelpText(\n \"after\",\n `\nExamples:\n zero schedule delete <agent-id>\n zero schedule delete <agent-id> -n my-schedule -y\n\nNotes:\n - Use -y to skip confirmation in non-interactive mode`,\n )\n .action(\n withErrorHandler(\n async (agentName: string, options: { name?: string; yes?: boolean }) => {\n const resolved = await resolveZeroScheduleByAgent(\n agentName,\n options.name,\n );\n\n if (!options.yes) {\n if (!isInteractive()) {\n throw new Error(\"--yes flag is required in non-interactive mode\");\n }\n const confirmed = await promptConfirm(\n `Delete schedule for agent ${chalk.cyan(agentName)}?`,\n false,\n );\n if (!confirmed) {\n console.log(chalk.dim(\"Cancelled\"));\n return;\n }\n }\n\n await deleteZeroSchedule({\n name: resolved.name,\n agentId: resolved.agentId,\n });\n\n console.log(chalk.green(`✓ Schedule \"${resolved.name}\" deleted`));\n },\n ),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport {\n enableZeroSchedule,\n resolveZeroScheduleByAgent,\n} from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const enableCommand = new Command()\n .name(\"enable\")\n .description(\"Enable a zero schedule\")\n .argument(\"<agent-id>\", \"Agent ID\")\n .option(\n \"-n, --name <schedule-name>\",\n \"Schedule name (required when agent has multiple schedules)\",\n )\n .addHelpText(\n \"after\",\n `\nExamples:\n zero schedule enable <agent-id>\n zero schedule enable <agent-id> -n my-schedule`,\n )\n .action(\n withErrorHandler(async (agentName: string, options: { name?: string }) => {\n const resolved = await resolveZeroScheduleByAgent(\n agentName,\n options.name,\n );\n\n await enableZeroSchedule({\n name: resolved.name,\n agentId: resolved.agentId,\n });\n\n console.log(chalk.green(`✓ Schedule \"${resolved.name}\" enabled`));\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport {\n disableZeroSchedule,\n resolveZeroScheduleByAgent,\n} from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const disableCommand = new Command()\n .name(\"disable\")\n .description(\"Disable a zero schedule\")\n .argument(\"<agent-id>\", \"Agent ID\")\n .option(\n \"-n, --name <schedule-name>\",\n \"Schedule name (required when agent has multiple schedules)\",\n )\n .addHelpText(\n \"after\",\n `\nExamples:\n zero schedule disable <agent-id>\n zero schedule disable <agent-id> -n my-schedule`,\n )\n .action(\n withErrorHandler(async (agentName: string, options: { name?: string }) => {\n const resolved = await resolveZeroScheduleByAgent(\n agentName,\n options.name,\n );\n\n await disableZeroSchedule({\n name: resolved.name,\n agentId: resolved.agentId,\n });\n\n console.log(chalk.green(`✓ Schedule \"${resolved.name}\" disabled`));\n }),\n );\n","import { Command } from \"commander\";\nimport { listCommand } from \"./list\";\nimport { setCommand } from \"./set\";\nimport { deleteCommand } from \"./delete\";\n\nexport const zeroSecretCommand = new Command()\n .name(\"secret\")\n .description(\"Read or write secrets (API keys, tokens)\")\n .addCommand(listCommand)\n .addCommand(setCommand)\n .addCommand(deleteCommand);\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { getConnectorDerivedNames } from \"@vm0/core\";\nimport { listZeroSecrets } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const listCommand = new Command()\n .name(\"list\")\n .alias(\"ls\")\n .description(\"List all secrets\")\n .action(\n withErrorHandler(async () => {\n const result = await listZeroSecrets();\n\n if (result.secrets.length === 0) {\n console.log(chalk.dim(\"No secrets found\"));\n console.log();\n console.log(\"To add a secret:\");\n console.log(chalk.cyan(\" zero secret set MY_API_KEY --body <value>\"));\n return;\n }\n\n console.log(chalk.bold(\"Secrets:\"));\n console.log();\n\n for (const secret of result.secrets) {\n let typeIndicator = \"\";\n let derivedLine: string | null = null;\n\n if (secret.type === \"model-provider\") {\n typeIndicator = chalk.dim(\" [model-provider]\");\n } else if (secret.type === \"connector\") {\n const derived = getConnectorDerivedNames(secret.name);\n if (derived) {\n typeIndicator = chalk.dim(` [${derived.connectorLabel} connector]`);\n derivedLine = chalk.dim(\n `Available as: ${derived.envVarNames.join(\", \")}`,\n );\n } else {\n typeIndicator = chalk.dim(\" [connector]\");\n }\n } else if (secret.type === \"user\") {\n const derived = getConnectorDerivedNames(secret.name);\n if (derived) {\n typeIndicator = chalk.dim(` [${derived.connectorLabel} connector]`);\n derivedLine = chalk.dim(\n `Available as: ${derived.envVarNames.join(\", \")}`,\n );\n }\n }\n\n console.log(` ${chalk.cyan(secret.name)}${typeIndicator}`);\n if (derivedLine) {\n console.log(` ${derivedLine}`);\n }\n if (secret.description) {\n console.log(` ${chalk.dim(secret.description)}`);\n }\n console.log(\n ` ${chalk.dim(`Updated: ${new Date(secret.updatedAt).toLocaleString()}`)}`,\n );\n console.log();\n }\n\n console.log(chalk.dim(`Total: ${result.secrets.length} secret(s)`));\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { setZeroSecret } from \"../../../lib/api\";\nimport { isInteractive, promptPassword } from \"../../../lib/utils/prompt-utils\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const setCommand = new Command()\n .name(\"set\")\n .description(\"Create or update a secret\")\n .argument(\"<name>\", \"Secret name (uppercase, e.g., MY_API_KEY)\")\n .option(\n \"-b, --body <value>\",\n \"Secret value (required in non-interactive mode)\",\n )\n .option(\"-d, --description <description>\", \"Optional description\")\n .action(\n withErrorHandler(\n async (\n name: string,\n options: { body?: string; description?: string },\n ) => {\n let value: string;\n\n if (options.body !== undefined) {\n value = options.body;\n } else if (isInteractive()) {\n const prompted = await promptPassword(\"Enter secret value:\");\n if (prompted === undefined) {\n console.log(chalk.dim(\"Cancelled\"));\n return;\n }\n value = prompted;\n } else {\n throw new Error(\"--body is required in non-interactive mode\", {\n cause: new Error(\n `Usage: zero secret set ${name} --body \"your-secret-value\"`,\n ),\n });\n }\n\n let secret;\n try {\n secret = await setZeroSecret({\n name,\n value,\n description: options.description,\n });\n } catch (error) {\n if (\n error instanceof Error &&\n error.message.includes(\"must contain only uppercase\")\n ) {\n throw new Error(error.message, {\n cause: new Error(\n \"Examples of valid secret names: MY_API_KEY, GITHUB_TOKEN, AWS_ACCESS_KEY_ID\",\n ),\n });\n }\n throw error;\n }\n\n console.log(chalk.green(`✓ Secret \"${secret.name}\" saved`));\n },\n ),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { deleteZeroSecret } from \"../../../lib/api\";\nimport { isInteractive, promptConfirm } from \"../../../lib/utils/prompt-utils\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const deleteCommand = new Command()\n .name(\"delete\")\n .description(\"Delete a secret\")\n .argument(\"<name>\", \"Secret name to delete\")\n .option(\"-y, --yes\", \"Skip confirmation prompt\")\n .action(\n withErrorHandler(async (name: string, options: { yes?: boolean }) => {\n if (!options.yes) {\n if (!isInteractive()) {\n throw new Error(\"--yes flag is required in non-interactive mode\");\n }\n\n const confirmed = await promptConfirm(\n `Are you sure you want to delete secret \"${name}\"?`,\n false,\n );\n\n if (!confirmed) {\n console.log(chalk.dim(\"Cancelled\"));\n return;\n }\n }\n\n await deleteZeroSecret(name);\n console.log(chalk.green(`✓ Secret \"${name}\" deleted`));\n }),\n );\n","import { Command } from \"commander\";\nimport { zeroSlackMessageCommand } from \"./message\";\nimport { uploadFileCommand } from \"./upload-file\";\n\nexport const zeroSlackCommand = new Command()\n .name(\"slack\")\n .description(\"Send messages and upload files to Slack channels as the bot\")\n .addCommand(zeroSlackMessageCommand)\n .addCommand(uploadFileCommand)\n .addHelpText(\n \"after\",\n `\nExamples:\n Send a message: zero slack message send -c <channel-id> -t \"Hello!\"\n Reply in a thread: zero slack message send -c <channel-id> --thread <ts> -t \"reply\"\n Upload a file: zero slack upload-file -f /tmp/report.pdf -c <channel-id>`,\n );\n","import { Command } from \"commander\";\nimport { sendCommand } from \"./send\";\n\nexport const zeroSlackMessageCommand = new Command()\n .name(\"message\")\n .description(\"Manage Slack messages\")\n .addCommand(sendCommand)\n .addHelpText(\n \"after\",\n `\nExamples:\n zero slack message send -c <channel-id> -t \"Hello!\"`,\n );\n","import { readFileSync } from \"fs\";\nimport { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { sendSlackMessage } from \"../../../../lib/api\";\nimport { withErrorHandler } from \"../../../../lib/command\";\n\nexport const sendCommand = new Command()\n .name(\"send\")\n .description(\"Send a message to a Slack channel or DM a user\")\n .option(\"-c, --channel <id>\", \"Channel ID\")\n .option(\"-u, --user <id>\", \"Slack user ID for DM\")\n .option(\"-t, --text <message>\", \"Message text\")\n .option(\"--thread <ts>\", \"Thread timestamp for replies\")\n .option(\"--blocks <json>\", \"Block Kit JSON string\")\n .addHelpText(\n \"after\",\n `\nExamples:\n Simple message: zero slack message send -c C01234 -t \"Hello!\"\n DM a user: zero slack message send -u U0A8V9X98QJ -t \"Hello!\"\n Reply in thread: zero slack message send -c C01234 --thread 1234567890.123456 -t \"reply\"\n Rich blocks: zero slack message send -c C01234 --blocks '[{\"type\":\"section\",\"text\":{\"type\":\"mrkdwn\",\"text\":\"*Bold*\"}}]'\n\nNotes:\n - Either --channel or --user is required; they are mutually exclusive\n - Either --text or --blocks is required; both can be used together`,\n )\n .action(\n withErrorHandler(\n async (options: {\n channel?: string;\n user?: string;\n text?: string;\n thread?: string;\n blocks?: string;\n }) => {\n let text = options.text;\n const { channel, user, thread, blocks: blocksStr } = options;\n\n // Validate mutual exclusion: exactly one of --channel or --user\n if (!channel && !user) {\n throw new Error(\"Either --channel or --user must be provided\", {\n cause: new Error(\n 'Usage: zero slack message send -c CHANNEL_ID -t \"your message\"\\n zero slack message send -u USER_ID -t \"your message\"',\n ),\n });\n }\n if (channel && user) {\n throw new Error(\"--channel and --user are mutually exclusive\", {\n cause: new Error(\n \"Provide either --channel to send to a channel or --user to DM a user, not both\",\n ),\n });\n }\n\n // Read from stdin if text not provided and stdin is explicitly piped\n // (isTTY is false when piped, undefined when no TTY context e.g. tests)\n if (!text && process.stdin.isTTY === false) {\n text = readFileSync(\"/dev/stdin\", \"utf8\").trim();\n }\n\n // Parse blocks JSON if provided\n let blocks: Array<{ type: string; [key: string]: unknown }> | undefined;\n if (blocksStr) {\n try {\n blocks = JSON.parse(blocksStr) as Array<{\n type: string;\n [key: string]: unknown;\n }>;\n } catch {\n throw new Error(\"Invalid JSON for --blocks flag\", {\n cause: new Error(\n \"Provide a valid JSON array of Block Kit blocks\",\n ),\n });\n }\n }\n\n // Validate at least one of text or blocks\n if (!text && !blocks) {\n throw new Error(\"Either --text or --blocks must be provided\", {\n cause: new Error(\n 'Usage: zero slack message send -c CHANNEL_ID -t \"your message\"',\n ),\n });\n }\n\n const result = await sendSlackMessage({\n channel: channel || undefined,\n user: user || undefined,\n text: text || undefined,\n threadTs: thread,\n blocks,\n });\n\n const tsInfo = result.ts ? ` (ts: ${result.ts})` : \"\";\n console.log(chalk.green(`✓ Message sent${tsInfo}`));\n },\n ),\n );\n","import { statSync, readFileSync } from \"fs\";\nimport { basename } from \"path\";\nimport { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { initSlackFileUpload, completeSlackFileUpload } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const uploadFileCommand = new Command()\n .name(\"upload-file\")\n .description(\"Upload a file to a Slack channel as the bot\")\n .requiredOption(\"-f, --file <path>\", \"Local file path to upload\")\n .requiredOption(\"-c, --channel <id>\", \"Slack channel ID\")\n .option(\"--thread <ts>\", \"Thread timestamp to post as a reply\")\n .option(\"--title <title>\", \"Display title for the file\")\n .option(\"--comment <text>\", \"Initial comment to accompany the file\")\n .addHelpText(\n \"after\",\n `\nExamples:\n Upload a file: zero slack upload-file -f /tmp/report.pdf -c C01234\n Upload to thread: zero slack upload-file -f /tmp/log.txt -c C01234 --thread 1234567890.123456\n With title and comment: zero slack upload-file -f /tmp/data.csv -c C01234 --title \"Daily Report\" --comment \"Here's the report\"\n\nNotes:\n - Uses the bot token (not user SLACK_TOKEN), so no files:write permission is needed\n - Returns file_id and permalink for reference`,\n )\n .action(\n withErrorHandler(\n async (options: {\n file: string;\n channel: string;\n thread?: string;\n title?: string;\n comment?: string;\n }) => {\n // Validate file exists and get size\n let fileSize: number;\n try {\n const stat = statSync(options.file);\n fileSize = stat.size;\n } catch {\n throw new Error(`File not found: ${options.file}`);\n }\n\n if (fileSize === 0) {\n throw new Error(\"File is empty\");\n }\n\n const filename = basename(options.file);\n\n // Step 1: Get pre-signed upload URL from server\n const { uploadUrl, fileId } = await initSlackFileUpload({\n filename,\n length: fileSize,\n });\n\n // Step 2: Upload file directly to Slack's pre-signed URL\n const fileContent = readFileSync(options.file);\n const uploadResponse = await fetch(uploadUrl, {\n method: \"POST\",\n body: fileContent,\n });\n\n if (!uploadResponse.ok) {\n throw new Error(\n `File upload failed: ${uploadResponse.status} ${uploadResponse.statusText}`,\n );\n }\n\n // Step 3: Complete the upload and share to channel/thread\n const result = await completeSlackFileUpload({\n fileId,\n channel: options.channel,\n threadTs: options.thread,\n title: options.title,\n initialComment: options.comment,\n });\n\n console.log(chalk.green(`✓ File uploaded (file_id: ${result.fileId})`));\n console.log(chalk.dim(` permalink: ${result.permalink}`));\n },\n ),\n );\n","import { Command } from \"commander\";\nimport { listCommand } from \"./list\";\nimport { setCommand } from \"./set\";\nimport { deleteCommand } from \"./delete\";\n\nexport const zeroVariableCommand = new Command()\n .name(\"variable\")\n .description(\"Read or write non-sensitive configuration values\")\n .addCommand(listCommand)\n .addCommand(setCommand)\n .addCommand(deleteCommand);\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { listZeroVariables } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\n/**\n * Truncate value for display if too long\n */\nfunction truncateValue(value: string, maxLength: number = 60): string {\n if (value.length <= maxLength) {\n return value;\n }\n return value.slice(0, maxLength - 15) + \"... [truncated]\";\n}\n\nexport const listCommand = new Command()\n .name(\"list\")\n .alias(\"ls\")\n .description(\"List all variables\")\n .action(\n withErrorHandler(async () => {\n const result = await listZeroVariables();\n\n if (result.variables.length === 0) {\n console.log(chalk.dim(\"No variables found\"));\n console.log();\n console.log(\"To add a variable:\");\n console.log(chalk.cyan(\" zero variable set MY_VAR <value>\"));\n return;\n }\n\n console.log(chalk.bold(\"Variables:\"));\n console.log();\n\n for (const variable of result.variables) {\n const displayValue = truncateValue(variable.value);\n console.log(` ${chalk.cyan(variable.name)} = ${displayValue}`);\n if (variable.description) {\n console.log(` ${chalk.dim(variable.description)}`);\n }\n console.log(\n ` ${chalk.dim(`Updated: ${new Date(variable.updatedAt).toLocaleString()}`)}`,\n );\n console.log();\n }\n\n console.log(chalk.dim(`Total: ${result.variables.length} variable(s)`));\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { setZeroVariable } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const setCommand = new Command()\n .name(\"set\")\n .description(\"Create or update a variable\")\n .argument(\"<name>\", \"Variable name (uppercase, e.g., MY_VAR)\")\n .argument(\"<value>\", \"Variable value\")\n .option(\"-d, --description <description>\", \"Optional description\")\n .action(\n withErrorHandler(\n async (\n name: string,\n value: string,\n options: { description?: string },\n ) => {\n let variable;\n try {\n variable = await setZeroVariable({\n name,\n value,\n description: options.description,\n });\n } catch (error) {\n if (\n error instanceof Error &&\n error.message.includes(\"must contain only uppercase\")\n ) {\n throw new Error(error.message, {\n cause: new Error(\n \"Examples of valid variable names: MY_VAR, API_URL, DEBUG_MODE\",\n ),\n });\n }\n throw error;\n }\n\n console.log(chalk.green(`✓ Variable \"${variable.name}\" saved`));\n },\n ),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { deleteZeroVariable } from \"../../../lib/api\";\nimport { isInteractive, promptConfirm } from \"../../../lib/utils/prompt-utils\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const deleteCommand = new Command()\n .name(\"delete\")\n .description(\"Delete a variable\")\n .argument(\"<name>\", \"Variable name to delete\")\n .option(\"-y, --yes\", \"Skip confirmation prompt\")\n .action(\n withErrorHandler(async (name: string, options: { yes?: boolean }) => {\n if (!options.yes) {\n if (!isInteractive()) {\n throw new Error(\"--yes flag is required in non-interactive mode\");\n }\n\n const confirmed = await promptConfirm(\n `Are you sure you want to delete variable \"${name}\"?`,\n false,\n );\n\n if (!confirmed) {\n console.log(chalk.dim(\"Cancelled\"));\n return;\n }\n }\n\n await deleteZeroVariable(name);\n console.log(chalk.green(`✓ Variable \"${name}\" deleted`));\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport {\n getApiUrl,\n getActiveOrg,\n getToken,\n decodeZeroTokenPayload,\n} from \"../../lib/api/config\";\nimport {\n listZeroConnectors,\n getZeroAgent,\n getZeroAgentUserConnectors,\n} from \"../../lib/api\";\nimport { withErrorHandler } from \"../../lib/command\";\nimport {\n isFirewallConnectorType,\n getConnectorFirewall,\n resolveFirewallPolicies,\n type FirewallPolicies,\n} from \"@vm0/core\";\nimport { policyIcon } from \"../../lib/utils/format-utils\";\n\n/**\n * Detect if running inside a zero sandbox (agent runtime).\n * Uses ZERO_AGENT_ID (not VM0_RUN_ID) because the zero CLI operates in the\n * zero agent context where ZERO_AGENT_ID is the canonical sandbox indicator.\n */\nfunction isInsideSandbox(): boolean {\n return !!process.env.ZERO_AGENT_ID;\n}\n\nfunction formatConnectorIdentity(connector: {\n externalUsername: string | null;\n externalEmail: string | null;\n needsReconnect: boolean;\n}): string {\n let identity = \"\";\n if (connector.externalUsername && connector.externalEmail) {\n identity = `@${connector.externalUsername} (${connector.externalEmail})`;\n } else if (connector.externalUsername) {\n identity = `@${connector.externalUsername}`;\n } else if (connector.externalEmail) {\n identity = connector.externalEmail;\n }\n if (connector.needsReconnect) {\n identity += ` ${chalk.yellow(\"(needs reconnect)\")}`;\n }\n return identity;\n}\n\nfunction printConnectorPermissions(\n type: string,\n resolvedPolicies: FirewallPolicies | null,\n): void {\n if (!isFirewallConnectorType(type)) return;\n\n const refPolicy = resolvedPolicies?.[type];\n if (!refPolicy) {\n console.log(chalk.dim(\" full access — no permission rules configured\"));\n return;\n }\n\n const config = getConnectorFirewall(type);\n const permissions = config.apis.flatMap((a) => {\n return a.permissions ?? [];\n });\n\n if (\n permissions.length === 0 &&\n Object.keys(refPolicy.policies).length === 0\n ) {\n const unknownIcon = policyIcon(refPolicy.unknownPolicy ?? \"allow\");\n console.log(` ${unknownIcon} unknown endpoints`);\n return;\n }\n\n const nameWidth = Math.max(\n \"unknown endpoints\".length,\n ...permissions.map((p) => {\n return p.name.length;\n }),\n );\n\n for (const perm of permissions) {\n const policy = refPolicy.policies[perm.name] ?? \"deny\";\n const icon = policyIcon(policy);\n const desc = perm.description ?? \"\";\n console.log(` ${icon} ${perm.name.padEnd(nameWidth)} ${desc}`);\n }\n\n const unknownIcon = policyIcon(refPolicy.unknownPolicy ?? \"allow\");\n console.log(\n ` ${unknownIcon} ${\"unknown endpoints\".padEnd(nameWidth)} Endpoints not matching any rule`,\n );\n}\n\nasync function showSandboxInfo(showPermissions: boolean): Promise<void> {\n const agentId = process.env.ZERO_AGENT_ID;\n const payload = decodeZeroTokenPayload();\n\n console.log(`Agent ID: ${agentId}`);\n console.log(`Run ID: ${payload?.runId ?? chalk.dim(\"unavailable\")}`);\n console.log(`Org ID: ${payload?.orgId ?? chalk.dim(\"unavailable\")}`);\n\n // Capabilities section\n if (payload?.capabilities?.length) {\n console.log();\n console.log(chalk.bold(\"Capabilities:\"));\n console.log(` ${payload.capabilities.join(\", \")}`);\n }\n\n // Connected Services section\n try {\n if (showPermissions) {\n // Full mode: fetch all 3 APIs for permission details\n const [connectorsResult, agentResult, enabledResult] =\n await Promise.allSettled([\n listZeroConnectors(),\n getZeroAgent(agentId!),\n getZeroAgentUserConnectors(agentId!),\n ]);\n\n if (connectorsResult.status === \"rejected\") return;\n\n const identities = connectorsResult.value.connectors.filter((c) => {\n return c.externalUsername !== null || c.externalEmail !== null;\n });\n\n if (identities.length === 0) return;\n\n let resolvedPolicies: FirewallPolicies | null = null;\n const permissionDataAvailable =\n agentResult.status === \"fulfilled\" &&\n enabledResult.status === \"fulfilled\";\n if (permissionDataAvailable) {\n resolvedPolicies = resolveFirewallPolicies(\n agentResult.value.permissionPolicies,\n enabledResult.value,\n );\n }\n\n console.log();\n console.log(chalk.bold(\"Connectors:\"));\n for (const connector of identities) {\n const identity = formatConnectorIdentity(connector);\n console.log(` ${connector.type.padEnd(14)}${identity}`);\n\n if (permissionDataAvailable) {\n printConnectorPermissions(connector.type, resolvedPolicies);\n }\n }\n } else {\n // Default mode: only fetch connector identities (1 API call)\n const connectors = await listZeroConnectors();\n const identities = connectors.connectors.filter((c) => {\n return c.externalUsername !== null || c.externalEmail !== null;\n });\n\n if (identities.length === 0) return;\n\n console.log();\n console.log(chalk.bold(\"Connectors:\"));\n for (const connector of identities) {\n const identity = formatConnectorIdentity(connector);\n console.log(` ${connector.type.padEnd(14)}${identity}`);\n }\n }\n } catch {\n // Silently skip — connector info is supplementary\n }\n}\n\nasync function showLocalInfo(): Promise<void> {\n const token = await getToken();\n const apiUrl = await getApiUrl();\n const activeOrg = await getActiveOrg();\n\n // Auth section\n console.log(chalk.bold(\"Auth:\"));\n if (token) {\n const tokenSource = process.env.ZERO_TOKEN\n ? \"ZERO_TOKEN env var\"\n : process.env.VM0_TOKEN\n ? \"VM0_TOKEN env var\"\n : \"config file\";\n console.log(\n ` Status: ${chalk.green(\"Authenticated\")} (via ${tokenSource})`,\n );\n } else {\n console.log(` Status: ${chalk.dim(\"Not authenticated\")}`);\n }\n console.log(` API: ${apiUrl}`);\n console.log();\n\n // Org section\n if (activeOrg) {\n console.log(chalk.bold(\"Org:\"));\n console.log(` Active: ${activeOrg}`);\n }\n}\n\nexport const zeroWhoamiCommand = new Command()\n .name(\"whoami\")\n .description(\"Show agent identity, run ID, and capabilities\")\n .option(\"--permissions\", \"Show full permission details for each connector\")\n .addHelpText(\n \"after\",\n `\nExamples:\n zero whoami\n zero whoami --permissions\n\nNotes:\n - Inside sandbox: shows agent ID, run ID, org ID, and granted capabilities\n - Use --permissions to see detailed permission breakdown per connector\n - Your agent ID is also available as $ZERO_AGENT_ID`,\n )\n .action(\n withErrorHandler(async (options: { permissions?: boolean }) => {\n if (isInsideSandbox()) {\n await showSandboxInfo(options.permissions ?? false);\n } else {\n await showLocalInfo();\n }\n }),\n );\n","import { Command } from \"commander\";\nimport { createCommand } from \"./create\";\nimport { editCommand } from \"./edit\";\nimport { viewCommand } from \"./view\";\nimport { listCommand } from \"./list\";\nimport { deleteCommand } from \"./delete\";\n\nexport const zeroSkillCommand = new Command(\"skill\")\n .description(\"Manage custom skills\")\n .addCommand(createCommand)\n .addCommand(editCommand)\n .addCommand(viewCommand)\n .addCommand(listCommand)\n .addCommand(deleteCommand)\n .addHelpText(\n \"after\",\n `\nExamples:\n Create from directory: zero skill create my-skill --dir ./skills/my-skill/\n List all skills: zero skill list\n View skill content: zero skill view my-skill\n Update skill content: zero skill edit my-skill --dir ./skills/my-skill/\n Delete a skill: zero skill delete my-skill -y\n\nSkill Binding:\n Bind to agent: zero agent edit <id> --add-skill my-skill\n Unbind from agent: zero agent edit <id> --remove-skill my-skill\n Replace all skills: zero agent edit <id> --skills a,b,c`,\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { createSkill } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { readSkillDirectory } from \"../../../lib/skill-directory\";\n\nexport const createCommand = new Command()\n .name(\"create\")\n .description(\"Create a custom skill in the organization\")\n .argument(\"<name>\", \"Skill name (lowercase alphanumeric with hyphens)\")\n .requiredOption(\"--dir <path>\", \"Path to directory containing SKILL.md\")\n .option(\"--display-name <name>\", \"Skill display name\")\n .option(\"--description <text>\", \"Skill description\")\n .addHelpText(\n \"after\",\n `\nExamples:\n zero skill create my-skill --dir ./skills/my-skill/\n zero skill create my-skill --dir ./skills/my-skill/ --display-name \"My Skill\" --description \"Does things\"\n\nNotes:\n - The directory must contain a SKILL.md file\n - All files in the directory are uploaded (hidden files and node_modules excluded)\n - The skill is created in the organization but not bound to any agent\n - Use 'zero agent edit <id> --add-skill <name>' to bind a skill to an agent`,\n )\n .action(\n withErrorHandler(\n async (\n name: string,\n options: {\n dir: string;\n displayName?: string;\n description?: string;\n },\n ) => {\n const files = readSkillDirectory(options.dir);\n\n const skill = await createSkill({\n name,\n files,\n displayName: options.displayName,\n description: options.description,\n });\n\n console.log(chalk.green(`✓ Skill \"${skill.name}\" created`));\n console.log(` Name: ${skill.name}`);\n console.log(` Files: ${files.length} file(s)`);\n if (skill.displayName) {\n console.log(` Display Name: ${skill.displayName}`);\n }\n if (skill.description) {\n console.log(` Description: ${skill.description}`);\n }\n },\n ),\n );\n","import { readFileSync, readdirSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\nconst IGNORED_NAMES = new Set([\"node_modules\", \".git\", \".DS_Store\"]);\n\n/**\n * Recursively read all files from a skill directory.\n *\n * Skips hidden files (starting with .), node_modules, and .git.\n * Throws if SKILL.md is not found at the root.\n */\nexport function readSkillDirectory(\n dirPath: string,\n): Array<{ path: string; content: string }> {\n const files: Array<{ path: string; content: string }> = [];\n\n function walk(dir: string, prefix: string) {\n const entries = readdirSync(dir, { withFileTypes: true });\n for (const entry of entries) {\n if (entry.name.startsWith(\".\") || IGNORED_NAMES.has(entry.name)) continue;\n\n const relPath = prefix ? `${prefix}/${entry.name}` : entry.name;\n if (entry.isDirectory()) {\n walk(join(dir, entry.name), relPath);\n } else {\n files.push({\n path: relPath,\n content: readFileSync(join(dir, entry.name), \"utf-8\"),\n });\n }\n }\n }\n\n walk(dirPath, \"\");\n\n if (\n !files.some((f) => {\n return f.path === \"SKILL.md\";\n })\n ) {\n throw new Error(`SKILL.md not found in ${dirPath}`);\n }\n\n return files;\n}\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { updateSkill } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { readSkillDirectory } from \"../../../lib/skill-directory\";\n\nexport const editCommand = new Command()\n .name(\"edit\")\n .description(\"Update a custom skill's content\")\n .argument(\"<name>\", \"Skill name\")\n .requiredOption(\n \"--dir <path>\",\n \"Path to directory containing updated skill files\",\n )\n .addHelpText(\n \"after\",\n `\nExamples:\n zero skill edit my-skill --dir ./skills/my-skill/`,\n )\n .action(\n withErrorHandler(async (name: string, options: { dir: string }) => {\n const files = readSkillDirectory(options.dir);\n await updateSkill(name, { files });\n\n console.log(\n chalk.green(`✓ Skill \"${name}\" updated (${files.length} file(s))`),\n );\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { getSkill } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const viewCommand = new Command()\n .name(\"view\")\n .description(\"View a custom skill\")\n .argument(\"<name>\", \"Skill name\")\n .addHelpText(\n \"after\",\n `\nExamples:\n zero skill view my-skill`,\n )\n .action(\n withErrorHandler(async (name: string) => {\n const skill = await getSkill(name);\n\n console.log(chalk.bold(skill.name));\n if (skill.displayName) console.log(chalk.dim(skill.displayName));\n console.log();\n console.log(`Name: ${skill.name}`);\n if (skill.displayName) console.log(`Display Name: ${skill.displayName}`);\n if (skill.description) console.log(`Description: ${skill.description}`);\n\n if (skill.files && skill.files.length > 0) {\n console.log();\n console.log(chalk.dim(\"── Files ──\"));\n for (const f of skill.files) {\n console.log(` ${f.path} (${f.size} bytes)`);\n }\n }\n\n console.log();\n if (skill.content) {\n console.log(chalk.dim(\"── SKILL.md ──\"));\n console.log(skill.content);\n } else {\n console.log(chalk.dim(\"No content\"));\n }\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { listSkills } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const listCommand = new Command()\n .name(\"list\")\n .alias(\"ls\")\n .description(\"List custom skills in the organization\")\n .addHelpText(\n \"after\",\n `\nExamples:\n zero skill list`,\n )\n .action(\n withErrorHandler(async () => {\n const skills = await listSkills();\n\n if (skills.length === 0) {\n console.log(chalk.dim(\"No custom skills found\"));\n console.log(\n chalk.dim(\" Create one with: zero skill create <name> --dir <path>\"),\n );\n return;\n }\n\n const nameWidth = Math.max(\n 4,\n ...skills.map((s) => {\n return s.name.length;\n }),\n );\n const displayWidth = Math.max(\n 12,\n ...skills.map((s) => {\n return (s.displayName ?? \"\").length;\n }),\n );\n\n const header = [\n \"NAME\".padEnd(nameWidth),\n \"DISPLAY NAME\".padEnd(displayWidth),\n \"DESCRIPTION\",\n ].join(\" \");\n console.log(chalk.dim(header));\n\n for (const skill of skills) {\n const row = [\n skill.name.padEnd(nameWidth),\n (skill.displayName ?? \"-\").padEnd(displayWidth),\n skill.description ?? \"-\",\n ].join(\" \");\n console.log(row);\n }\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { getSkill, deleteSkill } from \"../../../lib/api\";\nimport { isInteractive, promptConfirm } from \"../../../lib/utils/prompt-utils\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const deleteCommand = new Command()\n .name(\"delete\")\n .alias(\"rm\")\n .description(\"Delete a custom skill from the organization\")\n .argument(\"<name>\", \"Skill name\")\n .option(\"-y, --yes\", \"Skip confirmation prompt\")\n .addHelpText(\n \"after\",\n `\nExamples:\n zero skill delete my-skill\n zero skill delete my-skill -y\n\nNotes:\n - This removes the skill from the organization and unbinds it from all agents\n - Use -y to skip confirmation in non-interactive mode`,\n )\n .action(\n withErrorHandler(async (name: string, options: { yes?: boolean }) => {\n await getSkill(name);\n\n if (!options.yes) {\n if (!isInteractive()) {\n throw new Error(\"--yes flag is required in non-interactive mode\");\n }\n const confirmed = await promptConfirm(\n `Delete skill '${name}'? This will unbind it from all agents.`,\n false,\n );\n if (!confirmed) {\n console.log(chalk.dim(\"Cancelled\"));\n return;\n }\n }\n\n await deleteSkill(name);\n console.log(chalk.green(`✓ Skill \"${name}\" deleted`));\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { getZeroRunAgentEvents, type RunEvent } from \"../../../lib/api\";\nimport { parseTime } from \"../../../lib/utils/time-parser\";\nimport { ClaudeEventParser } from \"../../../lib/events/claude-event-parser\";\nimport { EventRenderer } from \"../../../lib/events/event-renderer\";\nimport { paginate } from \"../../../lib/utils/paginate\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { isUUID } from \"../../run/shared\";\nimport { listCommand } from \"./list\";\nimport { searchCommand } from \"./search\";\n\nconst PAGE_LIMIT = 100;\n\nfunction renderAgentEvent(event: RunEvent, renderer: EventRenderer): void {\n const eventData = event.eventData as Record<string, unknown>;\n const parsed = ClaudeEventParser.parse(eventData);\n if (parsed) {\n parsed.timestamp = new Date(event.createdAt);\n renderer.render(parsed);\n }\n}\n\nasync function showAgentEvents(\n runId: string,\n options: {\n since?: number;\n targetCount: number | \"all\";\n order: \"asc\" | \"desc\";\n },\n): Promise<void> {\n const firstResponse = await getZeroRunAgentEvents(runId, {\n since: options.since,\n limit: PAGE_LIMIT,\n order: options.order,\n });\n\n if (firstResponse.events.length === 0) {\n console.log(chalk.yellow(\"No agent events found for this run\"));\n return;\n }\n\n let allEvents: RunEvent[];\n\n if (\n !firstResponse.hasMore ||\n (options.targetCount !== \"all\" &&\n firstResponse.events.length >= options.targetCount)\n ) {\n allEvents =\n options.targetCount === \"all\"\n ? firstResponse.events\n : firstResponse.events.slice(0, options.targetCount);\n } else {\n const lastEvent = firstResponse.events[firstResponse.events.length - 1];\n const firstPageTimestamp = lastEvent\n ? new Date(lastEvent.createdAt).getTime()\n : undefined;\n\n const remainingEvents = await paginate<RunEvent>({\n fetchPage: async (since) => {\n const response = await getZeroRunAgentEvents(runId, {\n since,\n limit: PAGE_LIMIT,\n order: options.order,\n });\n return { items: response.events, hasMore: response.hasMore };\n },\n getTimestamp: (event) => {\n return new Date(event.createdAt).getTime();\n },\n targetCount:\n options.targetCount === \"all\"\n ? \"all\"\n : options.targetCount - firstResponse.events.length,\n initialSince: firstPageTimestamp,\n });\n\n allEvents = [...firstResponse.events, ...remainingEvents];\n\n if (\n options.targetCount !== \"all\" &&\n allEvents.length > options.targetCount\n ) {\n allEvents = allEvents.slice(0, options.targetCount);\n }\n }\n\n const events =\n options.order === \"desc\" ? [...allEvents].reverse() : allEvents;\n\n const renderer = new EventRenderer({\n showTimestamp: true,\n verbose: true,\n });\n\n for (const event of events) {\n renderAgentEvent(event, renderer);\n }\n}\n\nexport const zeroLogsCommand = new Command()\n .name(\"logs\")\n .description(\"View and search agent run logs\")\n .argument(\"[runId]\", \"Run ID to view agent events for\")\n .addCommand(listCommand)\n .addCommand(searchCommand)\n .option(\n \"--since <time>\",\n \"Show logs since timestamp (e.g., 5m, 2h, 1d, 2024-01-15T10:30:00Z)\",\n )\n .option(\"--tail <n>\", \"Show last N entries (default: 5)\")\n .option(\"--head <n>\", \"Show first N entries\")\n .option(\"--all\", \"Fetch all log entries\")\n .addHelpText(\n \"after\",\n `\nExamples:\n zero logs list\n zero logs <runId>\n zero logs <runId> --tail 10\n zero logs <runId> --all\n zero logs search \"error\"`,\n )\n .action(\n withErrorHandler(\n async (\n runId: string | undefined,\n options: {\n since?: string;\n tail?: string;\n head?: string;\n all?: boolean;\n },\n ) => {\n if (!runId) {\n zeroLogsCommand.help();\n return;\n }\n\n if (!isUUID(runId)) {\n console.error(\n chalk.red(`✗ Invalid run ID \"${runId}\" — expected a UUID`),\n );\n console.error(chalk.dim(\" Run: zero logs list to find run IDs\"));\n process.exit(1);\n }\n\n const countModes = [\n options.tail !== undefined,\n options.head !== undefined,\n options.all === true,\n ].filter(Boolean).length;\n if (countModes > 1) {\n throw new Error(\n \"Options --tail, --head, and --all are mutually exclusive\",\n );\n }\n\n let since: number | undefined;\n if (options.since) {\n since = parseTime(options.since);\n }\n\n const isAll = options.all === true;\n const isHead = options.head !== undefined;\n const isTail = options.tail !== undefined;\n\n let targetCount: number | \"all\";\n if (isAll) {\n targetCount = \"all\";\n } else if (isHead) {\n targetCount = Math.max(1, parseInt(options.head!, 10));\n } else if (isTail) {\n targetCount = Math.max(1, parseInt(options.tail!, 10));\n } else {\n targetCount = 5;\n }\n\n const order: \"asc\" | \"desc\" = isHead ? \"asc\" : \"desc\";\n\n await showAgentEvents(runId, { since, targetCount, order });\n },\n ),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { listZeroLogs } from \"../../../lib/api\";\nimport { parseTime } from \"../../../lib/utils/time-parser\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nfunction formatStatus(status: string): string {\n switch (status) {\n case \"completed\":\n return chalk.green(status);\n case \"failed\":\n case \"timeout\":\n return chalk.red(status);\n case \"running\":\n case \"pending\":\n case \"queued\":\n return chalk.yellow(status);\n case \"cancelled\":\n return chalk.dim(status);\n default:\n return status;\n }\n}\n\nfunction formatTime(iso: string): string {\n return new Date(iso).toISOString().replace(/\\.\\d{3}Z$/, \"Z\");\n}\n\nexport const listCommand = new Command()\n .name(\"list\")\n .alias(\"ls\")\n .description(\"List agent run logs\")\n .option(\"--agent <name>\", \"Filter by agent name\")\n .option(\n \"--status <status>\",\n \"Filter by status (queued|pending|running|completed|failed|timeout|cancelled)\",\n )\n .option(\n \"--since <time>\",\n \"Filter runs created since (e.g., 5m, 2h, 1d, 2024-01-15T10:30:00Z)\",\n )\n .option(\"--limit <n>\", \"Maximum number of results (default: 20)\")\n .addHelpText(\n \"after\",\n `\nExamples:\n zero logs list\n zero logs list --agent my-agent\n zero logs list --status completed --limit 10\n zero logs list --since 1h\n zero logs list --since 1d --status completed`,\n )\n .action(\n withErrorHandler(\n async (options: {\n agent?: string;\n status?: string;\n since?: string;\n limit?: string;\n }) => {\n const limit = options.limit ? parseInt(options.limit, 10) : undefined;\n const since = options.since ? parseTime(options.since) : undefined;\n\n const result = await listZeroLogs({\n agent: options.agent,\n status: options.status,\n since,\n limit,\n });\n\n if (result.data.length === 0) {\n console.log(chalk.dim(\"No logs found\"));\n return;\n }\n\n const nameCol = Math.max(\n 5,\n ...result.data.map((r) => {\n return (r.displayName || r.agentId || \"-\").length;\n }),\n );\n const statusCol = Math.max(\n 6,\n ...result.data.map((r) => {\n return r.status.length;\n }),\n );\n\n const header = [\n \"RUN ID\".padEnd(38),\n \"AGENT\".padEnd(nameCol),\n \"STATUS\".padEnd(statusCol),\n \"CREATED\",\n ].join(\" \");\n console.log(chalk.dim(header));\n\n for (const entry of result.data) {\n const runId = entry.id;\n const name = entry.displayName || entry.agentId || \"-\";\n const row = [\n runId.padEnd(38),\n name.padEnd(nameCol),\n formatStatus(entry.status).padEnd(statusCol),\n formatTime(entry.createdAt),\n ].join(\" \");\n console.log(row);\n }\n\n if (result.pagination.hasMore) {\n console.log();\n console.log(\n chalk.dim(\n ` Showing ${result.data.length} of more results. Use --limit to adjust.`,\n ),\n );\n }\n },\n ),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport {\n searchZeroLogs,\n type RunEvent,\n type LogsSearchResponse,\n} from \"../../../lib/api\";\nimport { parseTime } from \"../../../lib/utils/time-parser\";\nimport { ClaudeEventParser } from \"../../../lib/events/claude-event-parser\";\nimport { EventRenderer } from \"../../../lib/events/event-renderer\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { isUUID } from \"../../run/shared\";\n\nconst SEVEN_DAYS_MS = 7 * 24 * 60 * 60 * 1000;\n\ninterface SearchOptions {\n afterContext?: string;\n beforeContext?: string;\n context?: string;\n agent?: string;\n run?: string;\n since?: string;\n limit?: string;\n}\n\nfunction renderEvent(event: RunEvent, renderer: EventRenderer): void {\n const eventData = event.eventData as Record<string, unknown>;\n const parsed = ClaudeEventParser.parse(eventData);\n if (parsed) {\n parsed.timestamp = new Date(event.createdAt);\n renderer.render(parsed);\n }\n}\n\nfunction formatRunHeader(\n runId: string,\n agentName: string,\n timestamp: string,\n): string {\n const time = new Date(timestamp).toISOString().replace(/\\.\\d{3}Z$/, \"Z\");\n return `── Run ${runId} (${agentName}, ${time}) ──────────`;\n}\n\nfunction parseContextOptions(options: SearchOptions): {\n before: number;\n after: number;\n} {\n const contextN = options.context ? parseInt(options.context, 10) : 0;\n const before = options.beforeContext\n ? parseInt(options.beforeContext, 10)\n : contextN;\n const after = options.afterContext\n ? parseInt(options.afterContext, 10)\n : contextN;\n\n if (isNaN(before) || before < 0 || before > 10) {\n throw new Error(\"--before-context must be between 0 and 10\");\n }\n if (isNaN(after) || after < 0 || after > 10) {\n throw new Error(\"--after-context must be between 0 and 10\");\n }\n\n return { before, after };\n}\n\nfunction parseLimit(value: string | undefined): number | undefined {\n if (!value) return undefined;\n const limit = parseInt(value, 10);\n if (isNaN(limit) || limit < 1 || limit > 50) {\n throw new Error(\"--limit must be between 1 and 50\");\n }\n return limit;\n}\n\nfunction renderResults(response: LogsSearchResponse): void {\n const grouped = new Map<\n string,\n { agentName: string; results: LogsSearchResponse[\"results\"] }\n >();\n for (const result of response.results) {\n const existing = grouped.get(result.runId);\n if (existing) {\n existing.results.push(result);\n } else {\n grouped.set(result.runId, {\n agentName: result.agentName,\n results: [result],\n });\n }\n }\n\n let isFirstGroup = true;\n for (const [runId, group] of grouped) {\n if (!isFirstGroup) {\n console.log();\n }\n isFirstGroup = false;\n\n const firstTimestamp = group.results[0]!.matchedEvent.createdAt;\n console.log(\n chalk.bold(formatRunHeader(runId, group.agentName, firstTimestamp)),\n );\n\n for (const result of group.results) {\n const renderer = new EventRenderer({\n showTimestamp: true,\n verbose: false,\n buffered: false,\n });\n\n for (const event of result.contextBefore) {\n renderEvent(event, renderer);\n }\n renderEvent(result.matchedEvent, renderer);\n for (const event of result.contextAfter) {\n renderEvent(event, renderer);\n }\n }\n }\n\n if (response.hasMore) {\n console.log();\n console.log(\n chalk.dim(\n ` Showing first ${response.results.length} matches. Use --limit to see more.`,\n ),\n );\n }\n}\n\nexport const searchCommand = new Command()\n .name(\"search\")\n .description(\"Search agent events across runs\")\n .argument(\"<keyword>\", \"Search keyword\")\n .option(\"-A, --after-context <n>\", \"Show n events after each match\")\n .option(\"-B, --before-context <n>\", \"Show n events before each match\")\n .option(\"-C, --context <n>\", \"Show n events before and after each match\")\n .option(\"--agent <name>\", \"Filter by agent name\")\n .option(\"--run <id>\", \"Filter by specific run ID\")\n .option(\"--since <time>\", \"Search logs since (default: 7d)\")\n .option(\"--limit <n>\", \"Maximum number of matches (default: 20)\")\n .addHelpText(\n \"after\",\n `\nExamples:\n zero logs search \"error\"\n zero logs search \"timeout\" --agent my-agent -C 2\n zero logs search \"failed\" --since 30d --limit 50`,\n )\n .action(\n withErrorHandler(async (keyword: string, options: SearchOptions) => {\n const { before, after } = parseContextOptions(options);\n\n if (options.run && !isUUID(options.run)) {\n console.error(\n chalk.red(`✗ Invalid run ID \"${options.run}\" — expected a UUID`),\n );\n console.error(chalk.dim(\" Run: zero logs list to find run IDs\"));\n process.exit(1);\n }\n\n const since = options.since\n ? parseTime(options.since)\n : Date.now() - SEVEN_DAYS_MS;\n const limit = parseLimit(options.limit);\n\n const response = await searchZeroLogs({\n keyword,\n agent: options.agent,\n runId: options.run,\n since,\n limit,\n before,\n after,\n });\n\n if (response.results.length === 0) {\n console.log(chalk.dim(\"No matches found\"));\n console.log(\n chalk.dim(\n \" Try a broader search with --since 30d or a different keyword\",\n ),\n );\n return;\n }\n\n renderResults(response);\n }),\n );\n","import { Command } from \"commander\";\nimport { withErrorHandler } from \"../../lib/command\";\nimport {\n requestDeveloperSupportConsent,\n submitDeveloperSupport,\n} from \"../../lib/api\";\n\nexport const zeroDeveloperSupportCommand = new Command()\n .name(\"developer-support\")\n .description(\"Submit a diagnostic report to the dev team\")\n .requiredOption(\"--title <text>\", \"Issue title\")\n .requiredOption(\"--description <text>\", \"Diagnostic description\")\n .option(\"--consent-code <code>\", \"User-provided verification code\")\n .addHelpText(\n \"after\",\n `\nExamples:\n Step 1 — Get consent code:\n zero developer-support --title \"GitHub 403 error\" --description \"Connector connected but API returns 403\"\n\n Step 2 — Submit with code:\n zero developer-support --title \"GitHub 403 error\" --description \"Connector connected but API returns 403\" --consent-code A7X3\n\nNotes:\n - The consent code must be provided by the user to confirm sharing their conversation\n - The dev team will receive a diagnostic bundle with conversation, environment, and connector info`,\n )\n .action(\n withErrorHandler(\n async (options: {\n title: string;\n description: string;\n consentCode?: string;\n }) => {\n if (!options.consentCode) {\n const { consentCode } = await requestDeveloperSupportConsent({\n title: options.title,\n description: options.description,\n });\n console.log(\n \"Consent required to share chat history with developers.\",\n );\n console.log(`Code: ${consentCode}`);\n console.log(\"Ask the user to confirm by providing this code.\");\n } else {\n const { reference } = await submitDeveloperSupport({\n title: options.title,\n description: options.description,\n consentCode: options.consentCode,\n });\n console.log(\"Developer support request submitted successfully.\");\n console.log(`Reference: ${reference}`);\n }\n },\n ),\n );\n","import { Command } from \"commander\";\nimport { hostStartCommand, hostStopCommand } from \"./host\";\nimport {\n clientScreenshotCommand,\n clientZoomCommand,\n clientInfoCommand,\n clientLeftClickCommand,\n clientRightClickCommand,\n clientMiddleClickCommand,\n clientDoubleClickCommand,\n clientTripleClickCommand,\n clientLeftClickDragCommand,\n clientLeftMouseDownCommand,\n clientLeftMouseUpCommand,\n clientScrollCommand,\n clientReadClipboardCommand,\n clientWriteClipboardCommand,\n clientKeyCommand,\n clientHoldKeyCommand,\n clientTypeCommand,\n clientOpenAppCommand,\n clientMouseMoveCommand,\n clientCursorPositionCommand,\n} from \"./client\";\n\nconst hostCommand = new Command()\n .name(\"host\")\n .description(\"Manage computer-use host daemon\")\n .addCommand(hostStartCommand)\n .addCommand(hostStopCommand);\n\nconst clientCommand = new Command()\n .name(\"client\")\n .description(\"Interact with remote computer-use host\")\n .addCommand(clientScreenshotCommand)\n .addCommand(clientZoomCommand)\n .addCommand(clientInfoCommand)\n .addCommand(clientLeftClickCommand)\n .addCommand(clientRightClickCommand)\n .addCommand(clientMiddleClickCommand)\n .addCommand(clientDoubleClickCommand)\n .addCommand(clientTripleClickCommand)\n .addCommand(clientLeftClickDragCommand)\n .addCommand(clientLeftMouseDownCommand)\n .addCommand(clientLeftMouseUpCommand)\n .addCommand(clientScrollCommand)\n .addCommand(clientReadClipboardCommand)\n .addCommand(clientWriteClipboardCommand)\n .addCommand(clientKeyCommand)\n .addCommand(clientHoldKeyCommand)\n .addCommand(clientTypeCommand)\n .addCommand(clientOpenAppCommand)\n .addCommand(clientMouseMoveCommand)\n .addCommand(clientCursorPositionCommand);\n\nclientCommand.addHelpText(\n \"after\",\n `\nCoordinate System:\n All coordinates use macOS logical points, not physical pixels.\n On Retina displays, logical size = physical size / scaleFactor.\n Run \"info\" to check your screen's logical dimensions.\n\nExamples:\n zero computer-use client screenshot\n zero computer-use client zoom --x 0 --y 0 --width 500 --height 500\n zero computer-use client info\n zero computer-use client left-click 500 300\n zero computer-use client scroll 500 300 down 5\n zero computer-use client key \"cmd+c\"`,\n);\n\nexport const zeroComputerUseCommand = new Command()\n .name(\"computer-use\")\n .description(\"Remote desktop control for cloud agents\")\n .addCommand(hostCommand)\n .addCommand(clientCommand);\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { withErrorHandler } from \"../../../lib/command/with-error-handler\";\nimport {\n registerComputerUseHost,\n unregisterComputerUseHost,\n ApiRequestError,\n} from \"../../../lib/api\";\nimport {\n getRandomPort,\n startDesktopServer,\n} from \"../../../lib/computer-use/desktop-server\";\nimport { isCliclickInstalled } from \"../../../lib/computer-use/cliclick\";\nimport {\n startDesktopTunnel,\n stopDesktopTunnel,\n} from \"../../../lib/computer-use/ngrok\";\n\nexport const hostStartCommand = new Command()\n .name(\"start\")\n .description(\"Start the computer-use host daemon (macOS only)\")\n .action(\n withErrorHandler(async () => {\n if (process.platform !== \"darwin\") {\n throw new Error(\n \"Computer-use host requires macOS\\n\\n\" +\n \"The host daemon uses macOS-specific commands (screencapture, system_profiler).\",\n );\n }\n\n if (!(await isCliclickInstalled())) {\n console.log(\n chalk.yellow(\n \"⚠ cliclick not found. Mouse and keyboard operations will not be available.\\n\" +\n \" Install with: brew install cliclick\",\n ),\n );\n console.log();\n }\n\n console.log(chalk.cyan(\"Registering computer-use host...\"));\n const credentials = await registerComputerUseHost();\n\n const port = await getRandomPort();\n const server = await startDesktopServer(credentials.token, port);\n\n try {\n await startDesktopTunnel(\n credentials.ngrokToken,\n credentials.endpointPrefix,\n port,\n );\n\n console.log();\n console.log(chalk.green(\"✓ Computer-use host active\"));\n console.log(` Desktop: desktop.${credentials.domain}`);\n console.log();\n console.log(chalk.dim(\"Press ^C twice to disconnect\"));\n console.log();\n\n let sigintCount = 0;\n await new Promise<void>((resolve) => {\n const keepAlive = setInterval(() => {}, 60_000);\n const done = () => {\n clearInterval(keepAlive);\n process.removeListener(\"SIGINT\", onSigint);\n resolve();\n };\n const onSigint = () => {\n sigintCount++;\n if (sigintCount === 1) {\n console.log(\n chalk.dim(\"\\nPress ^C again to disconnect and exit...\"),\n );\n } else {\n done();\n }\n };\n process.on(\"SIGINT\", onSigint);\n process.once(\"SIGTERM\", done);\n });\n } finally {\n console.log();\n console.log(chalk.cyan(\"Stopping computer-use host...\"));\n server.close();\n await stopDesktopTunnel();\n await unregisterComputerUseHost().catch(() => {});\n console.log(chalk.green(\"✓ Host stopped\"));\n }\n }),\n );\n\nexport const hostStopCommand = new Command()\n .name(\"stop\")\n .description(\"Stop and unregister the computer-use host\")\n .action(\n withErrorHandler(async () => {\n console.log(chalk.cyan(\"Unregistering computer-use host...\"));\n try {\n await unregisterComputerUseHost();\n console.log(chalk.green(\"✓ Host unregistered\"));\n } catch (error) {\n if (error instanceof ApiRequestError && error.status === 404) {\n console.log(chalk.yellow(\"No active host registration found\"));\n return;\n }\n throw error;\n }\n }),\n );\n","import {\n createServer,\n type Server,\n type IncomingMessage,\n type ServerResponse,\n} from \"http\";\nimport { createServer as createNetServer } from \"net\";\nimport type { AddressInfo } from \"net\";\nimport {\n captureScreenshot,\n captureRegionScreenshot,\n getScreenInfo,\n} from \"./screencapture\";\nimport {\n leftClickDrag,\n leftMouseDown,\n leftMouseUp,\n executeMouseAction,\n getCursorPosition,\n VALID_ACTIONS,\n pressKey,\n holdKey,\n typeText,\n} from \"./cliclick\";\nimport type { MouseAction } from \"./cliclick\";\nimport { scroll, type ScrollDirection } from \"./scroll\";\nimport { readClipboard, writeClipboard } from \"./clipboard\";\nimport { openApplication } from \"./application\";\n\n/**\n * Read the full request body as a string.\n */\nfunction readBody(req: IncomingMessage): Promise<string> {\n return new Promise((resolve, reject) => {\n const chunks: Buffer[] = [];\n req.on(\"data\", (chunk: Buffer) => {\n chunks.push(chunk);\n });\n req.on(\"end\", () => {\n resolve(Buffer.concat(chunks).toString());\n });\n req.on(\"error\", reject);\n });\n}\n\ninterface MouseDragBody {\n action: \"left_click_drag\";\n startX: number;\n startY: number;\n endX: number;\n endY: number;\n}\n\ninterface MouseDownBody {\n action: \"left_mouse_down\";\n x: number;\n y: number;\n}\n\ninterface MouseUpBody {\n action: \"left_mouse_up\";\n x: number;\n y: number;\n}\n\ninterface MouseScrollBody {\n action: \"scroll\";\n x: number;\n y: number;\n direction: ScrollDirection;\n amount?: number;\n}\n\ntype MouseRequestBody =\n | MouseDragBody\n | MouseDownBody\n | MouseUpBody\n | MouseScrollBody;\n\nasync function handleZoom(\n searchParams: URLSearchParams,\n res: ServerResponse,\n): Promise<void> {\n const x = Number(searchParams.get(\"x\"));\n const y = Number(searchParams.get(\"y\"));\n const width = Number(searchParams.get(\"width\"));\n const height = Number(searchParams.get(\"height\"));\n\n if (\n [x, y, width, height].some((v) => {\n return !Number.isFinite(v);\n })\n ) {\n res.writeHead(400, { \"Content-Type\": \"text/plain\" });\n res.end(\n \"Missing or invalid query parameters: x, y, width, height are required numbers\",\n );\n return;\n }\n if (width <= 0 || height <= 0) {\n res.writeHead(400, { \"Content-Type\": \"text/plain\" });\n res.end(\"width and height must be positive\");\n return;\n }\n if (x < 0 || y < 0) {\n res.writeHead(400, { \"Content-Type\": \"text/plain\" });\n res.end(\"x and y must be non-negative\");\n return;\n }\n\n const info = await getScreenInfo();\n if (x + width > info.width || y + height > info.height) {\n res.writeHead(400, { \"Content-Type\": \"text/plain\" });\n res.end(`Region exceeds screen bounds (${info.width}x${info.height})`);\n return;\n }\n\n const result = await captureRegionScreenshot({ x, y, width, height });\n res.writeHead(200, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify(result));\n}\n\nfunction parseJsonBody(req: IncomingMessage): Promise<unknown> {\n return new Promise((resolve, reject) => {\n const chunks: Buffer[] = [];\n let size = 0;\n req.on(\"data\", (chunk: Buffer) => {\n size += chunk.length;\n if (size > 1024) {\n reject(new Error(\"Request body too large\"));\n req.destroy();\n return;\n }\n chunks.push(chunk);\n });\n req.on(\"end\", () => {\n try {\n resolve(JSON.parse(Buffer.concat(chunks).toString()));\n } catch {\n reject(new Error(\"Invalid JSON body\"));\n }\n });\n req.on(\"error\", reject);\n });\n}\n\nasync function handleMouseRequest(\n req: IncomingMessage,\n res: ServerResponse,\n): Promise<void> {\n const body = await parseJsonBody(req);\n if (typeof body !== \"object\" || body === null || !(\"action\" in body)) {\n res.writeHead(400, { \"Content-Type\": \"text/plain\" });\n res.end(\"Missing required fields: action, x, y\");\n return;\n }\n\n const { action } = body as { action: unknown };\n\n if (typeof action !== \"string\") {\n res.writeHead(400, { \"Content-Type\": \"text/plain\" });\n res.end(\"Invalid action\");\n return;\n }\n\n // Click actions with validation\n if (VALID_ACTIONS.has(action)) {\n if (!(\"x\" in body) || !(\"y\" in body)) {\n res.writeHead(400, { \"Content-Type\": \"text/plain\" });\n res.end(\"Missing required fields: action, x, y\");\n return;\n }\n\n const { x, y } = body as { x: unknown; y: unknown };\n\n if (\n typeof x !== \"number\" ||\n typeof y !== \"number\" ||\n !Number.isFinite(x) ||\n !Number.isFinite(y)\n ) {\n res.writeHead(400, { \"Content-Type\": \"text/plain\" });\n res.end(\"Coordinates x and y must be finite numbers\");\n return;\n }\n\n const info = await getScreenInfo();\n if (x < 0 || x >= info.width || y < 0 || y >= info.height) {\n res.writeHead(400, { \"Content-Type\": \"text/plain\" });\n res.end(\n `Coordinates out of bounds. Screen size: ${info.width}x${info.height} (points)`,\n );\n return;\n }\n\n await executeMouseAction(action as MouseAction, x, y);\n res.writeHead(200, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify({ ok: true }));\n return;\n }\n\n // Drag, mouse-down, mouse-up, scroll actions\n const typedBody = body as MouseRequestBody;\n switch (typedBody.action) {\n case \"left_click_drag\":\n await leftClickDrag(\n typedBody.startX,\n typedBody.startY,\n typedBody.endX,\n typedBody.endY,\n );\n break;\n case \"left_mouse_down\":\n await leftMouseDown(typedBody.x, typedBody.y);\n break;\n case \"left_mouse_up\":\n await leftMouseUp(typedBody.x, typedBody.y);\n break;\n case \"scroll\":\n await scroll(\n typedBody.x,\n typedBody.y,\n typedBody.direction,\n typedBody.amount,\n );\n break;\n default:\n res.writeHead(400, { \"Content-Type\": \"text/plain\" });\n res.end(\n `Unknown mouse action: ${(body as unknown as Record<string, unknown>).action}`,\n );\n return;\n }\n\n res.writeHead(200, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify({ ok: true }));\n}\n\ninterface KeyPressBody {\n action: \"key\";\n keys: string;\n}\n\ninterface HoldKeyBody {\n action: \"hold_key\";\n keys: string;\n durationMs: number;\n}\n\ninterface TypeTextBody {\n action: \"type\";\n text: string;\n}\n\ntype KeyboardRequestBody = KeyPressBody | HoldKeyBody | TypeTextBody;\n\nasync function handleKeyboard(\n req: IncomingMessage,\n res: ServerResponse,\n): Promise<void> {\n const raw = await readBody(req);\n const body = JSON.parse(raw) as KeyboardRequestBody;\n\n switch (body.action) {\n case \"key\":\n await pressKey(body.keys);\n break;\n case \"hold_key\":\n if (\n typeof body.durationMs !== \"number\" ||\n !Number.isFinite(body.durationMs) ||\n body.durationMs <= 0\n ) {\n res.writeHead(400, { \"Content-Type\": \"text/plain\" });\n res.end(\"durationMs must be a positive number\");\n return;\n }\n await holdKey(body.keys, body.durationMs);\n break;\n case \"type\":\n if (typeof body.text !== \"string\" || body.text.length === 0) {\n res.writeHead(400, { \"Content-Type\": \"text/plain\" });\n res.end(\"text must be a non-empty string\");\n return;\n }\n await typeText(body.text);\n break;\n default:\n res.writeHead(400, { \"Content-Type\": \"text/plain\" });\n res.end(\n `Unknown keyboard action: ${(body as Record<string, unknown>).action}`,\n );\n return;\n }\n\n res.writeHead(200, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify({ ok: true }));\n}\n\nasync function handleClipboard(\n req: IncomingMessage,\n res: ServerResponse,\n): Promise<void> {\n if (req.method === \"GET\") {\n const text = await readClipboard();\n res.writeHead(200, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify({ text }));\n } else if (req.method === \"POST\") {\n const raw = await readBody(req);\n const body = JSON.parse(raw) as { text: string };\n await writeClipboard(body.text);\n res.writeHead(200, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify({ ok: true }));\n } else {\n res.writeHead(404, { \"Content-Type\": \"text/plain\" });\n res.end(\"Not found\");\n }\n}\n\nasync function handleOpenApplication(\n req: IncomingMessage,\n res: ServerResponse,\n): Promise<void> {\n const raw = await readBody(req);\n const body = JSON.parse(raw) as { nameOrBundleId: unknown };\n\n if (\n typeof body.nameOrBundleId !== \"string\" ||\n body.nameOrBundleId.length === 0\n ) {\n res.writeHead(400, { \"Content-Type\": \"text/plain\" });\n res.end(\"nameOrBundleId must be a non-empty string\");\n return;\n }\n\n await openApplication(body.nameOrBundleId);\n res.writeHead(200, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify({ ok: true }));\n}\n\n/**\n * Allocate a random available port on localhost.\n */\nexport async function getRandomPort(): Promise<number> {\n return new Promise((resolve, reject) => {\n const server = createNetServer();\n server.listen(0, \"127.0.0.1\", () => {\n const { port } = server.address() as AddressInfo;\n server.close(() => {\n resolve(port);\n });\n });\n server.on(\"error\", reject);\n });\n}\n\nasync function handleCursorPosition(res: ServerResponse): Promise<void> {\n const position = await getCursorPosition();\n res.writeHead(200, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify(position));\n}\n\nfunction routeKey(method: string, pathname: string): string {\n return `${method} ${pathname}`;\n}\n\nasync function handleRequest(\n token: string,\n req: IncomingMessage,\n res: ServerResponse,\n): Promise<void> {\n if (req.headers[\"x-vm0-token\"] !== token) {\n res.writeHead(403, { \"Content-Type\": \"text/plain\" });\n res.end(\"Forbidden\");\n return;\n }\n\n const url = new URL(req.url ?? \"/\", \"http://localhost\");\n const { pathname, searchParams } = url;\n const key = routeKey(req.method ?? \"GET\", pathname);\n\n try {\n switch (key) {\n case \"GET /screenshot\": {\n const result = await captureScreenshot();\n res.writeHead(200, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify(result));\n break;\n }\n case \"GET /info\": {\n const info = await getScreenInfo();\n res.writeHead(200, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify(info));\n break;\n }\n case \"GET /zoom\":\n await handleZoom(searchParams, res);\n break;\n case \"POST /mouse\":\n await handleMouseRequest(req, res);\n break;\n case \"GET /clipboard\":\n case \"POST /clipboard\":\n await handleClipboard(req, res);\n break;\n case \"POST /keyboard\":\n await handleKeyboard(req, res);\n break;\n case \"POST /open-application\":\n await handleOpenApplication(req, res);\n break;\n case \"GET /cursor-position\":\n await handleCursorPosition(res);\n break;\n default:\n res.writeHead(404, { \"Content-Type\": \"text/plain\" });\n res.end(\"Not found\");\n }\n } catch (error) {\n const message =\n error instanceof Error ? error.message : \"Internal server error\";\n res.writeHead(500, { \"Content-Type\": \"text/plain\" });\n res.end(message);\n }\n}\n\n/**\n * Start the desktop HTTP server.\n * Validates x-vm0-token on every request and serves /screenshot and /info endpoints.\n */\nexport function startDesktopServer(\n token: string,\n port: number,\n): Promise<Server> {\n return new Promise((resolve, reject) => {\n const server = createServer((req, res) => {\n handleRequest(token, req, res).catch(() => {\n if (!res.headersSent) {\n res.writeHead(500, { \"Content-Type\": \"text/plain\" });\n res.end(\"Internal server error\");\n }\n });\n });\n\n server.on(\"error\", reject);\n server.listen(port, \"127.0.0.1\", () => {\n resolve(server);\n });\n });\n}\n","import { execFile } from \"child_process\";\nimport { readFile, unlink } from \"fs/promises\";\nimport { randomUUID } from \"crypto\";\nimport { join } from \"path\";\nimport { tmpdir } from \"os\";\nimport { promisify } from \"util\";\n\nconst execFileAsync = promisify(execFile);\n\ninterface ScreenInfo {\n width: number;\n height: number;\n scaleFactor: number;\n}\n\ninterface ScreenshotResult extends ScreenInfo {\n image: string;\n format: string;\n}\n\ninterface RegionParams {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\n/**\n * Capture a screenshot on macOS using the screencapture command.\n * Returns the image as a base64 string at logical resolution along with screen metadata.\n */\nexport async function captureScreenshot(): Promise<ScreenshotResult> {\n const tmpPath = join(tmpdir(), `vm0-screenshot-${randomUUID()}.jpg`);\n\n try {\n await execFileAsync(\"screencapture\", [\"-x\", \"-t\", \"jpg\", tmpPath]);\n const info = await getScreenInfo();\n\n if (info.scaleFactor > 1) {\n await execFileAsync(\"sips\", [\n \"-z\",\n String(info.height),\n String(info.width),\n \"-s\",\n \"formatOptions\",\n \"80\",\n tmpPath,\n ]);\n }\n\n const buffer = await readFile(tmpPath);\n\n return {\n image: buffer.toString(\"base64\"),\n width: info.width,\n height: info.height,\n scaleFactor: info.scaleFactor,\n format: \"jpg\",\n };\n } finally {\n await unlink(tmpPath).catch(() => {});\n }\n}\n\n/**\n * Capture a screenshot of a specific screen region on macOS.\n * Uses screencapture -R x,y,w,h to crop to the given rectangle (logical coordinates).\n * Returns the image at logical resolution to match the coordinate space.\n */\nexport async function captureRegionScreenshot(\n region: RegionParams,\n): Promise<ScreenshotResult> {\n const tmpPath = join(tmpdir(), `vm0-zoom-${randomUUID()}.jpg`);\n\n try {\n const regionArg = `${region.x},${region.y},${region.width},${region.height}`;\n await execFileAsync(\"screencapture\", [\n \"-x\",\n \"-t\",\n \"jpg\",\n \"-R\",\n regionArg,\n tmpPath,\n ]);\n\n const info = await getScreenInfo();\n\n if (info.scaleFactor > 1) {\n await execFileAsync(\"sips\", [\n \"-z\",\n String(region.height),\n String(region.width),\n \"-s\",\n \"formatOptions\",\n \"80\",\n tmpPath,\n ]);\n }\n\n const buffer = await readFile(tmpPath);\n\n return {\n image: buffer.toString(\"base64\"),\n width: region.width,\n height: region.height,\n scaleFactor: info.scaleFactor,\n format: \"jpg\",\n };\n } finally {\n await unlink(tmpPath).catch(() => {});\n }\n}\n\ninterface DisplayResolution {\n _spdisplays_pixels?: string;\n _spdisplays_resolution?: string;\n spdisplays_resolution?: string;\n}\n\ninterface DisplayData {\n spdisplays_ndrvs?: DisplayResolution[];\n}\n\n/**\n * Get screen logical resolution and scale factor on macOS using system_profiler.\n * Returns logical (point) dimensions that match the coordinate space used by all operations.\n */\nexport async function getScreenInfo(): Promise<ScreenInfo> {\n const { stdout } = await execFileAsync(\"system_profiler\", [\n \"SPDisplaysDataType\",\n \"-json\",\n ]);\n\n const data = JSON.parse(stdout) as { SPDisplaysDataType?: DisplayData[] };\n const displays = data.SPDisplaysDataType ?? [];\n\n for (const gpu of displays) {\n const screens = gpu.spdisplays_ndrvs ?? [];\n for (const screen of screens) {\n const pixelStr = screen._spdisplays_pixels;\n if (pixelStr) {\n const pixelMatch = pixelStr.match(/(\\d+)\\s*x\\s*(\\d+)/);\n if (pixelMatch?.[1] && pixelMatch[2]) {\n const physicalWidth = parseInt(pixelMatch[1], 10);\n const physicalHeight = parseInt(pixelMatch[2], 10);\n\n const resStr =\n screen._spdisplays_resolution ?? screen.spdisplays_resolution ?? \"\";\n const resMatch = resStr.match(/(\\d+)\\s*x\\s*(\\d+)/);\n\n let scaleFactor: number;\n let logicalWidth: number;\n let logicalHeight: number;\n\n if (resMatch?.[1] && resMatch[2]) {\n logicalWidth = parseInt(resMatch[1], 10);\n logicalHeight = parseInt(resMatch[2], 10);\n scaleFactor = Math.round(physicalWidth / logicalWidth);\n } else {\n const isRetina = /retina/i.test(resStr);\n scaleFactor = isRetina ? 2 : 1;\n logicalWidth = Math.floor(physicalWidth / scaleFactor);\n logicalHeight = Math.floor(physicalHeight / scaleFactor);\n }\n\n return {\n width: logicalWidth,\n height: logicalHeight,\n scaleFactor,\n };\n }\n }\n }\n }\n\n return { width: 1920, height: 1080, scaleFactor: 1 };\n}\n","import { execFile } from \"child_process\";\nimport { promisify } from \"util\";\nimport { setTimeout as sleep } from \"timers/promises\";\n\nconst execFileAsync = promisify(execFile);\n\n/**\n * Drag from (startX, startY) to (endX, endY) using cliclick.\n * Sends dd (drag down) at start, then du (drag up) at end.\n */\nexport async function leftClickDrag(\n startX: number,\n startY: number,\n endX: number,\n endY: number,\n): Promise<void> {\n await execFileAsync(\"cliclick\", [\n `dd:${startX},${startY}`,\n `du:${endX},${endY}`,\n ]);\n}\n\n/**\n * Press and hold the left mouse button at (x, y).\n */\nexport async function leftMouseDown(x: number, y: number): Promise<void> {\n await execFileAsync(\"cliclick\", [`dd:${x},${y}`]);\n}\n\n/**\n * Release the left mouse button at (x, y).\n */\nexport async function leftMouseUp(x: number, y: number): Promise<void> {\n await execFileAsync(\"cliclick\", [`du:${x},${y}`]);\n}\n\nexport type MouseAction =\n | \"left_click\"\n | \"right_click\"\n | \"middle_click\"\n | \"double_click\"\n | \"triple_click\"\n | \"move\";\n\nconst ACTION_COMMANDS: Record<MouseAction, string> = {\n left_click: \"c\",\n right_click: \"rc\",\n middle_click: \"mc\",\n double_click: \"dc\",\n triple_click: \"tc\",\n move: \"m\",\n};\n\nexport const VALID_ACTIONS = new Set<string>(Object.keys(ACTION_COMMANDS));\n\n/**\n * Check whether cliclick is available on the system.\n * Returns true if installed, false otherwise.\n */\nexport async function isCliclickInstalled(): Promise<boolean> {\n try {\n await execFileAsync(\"which\", [\"cliclick\"]);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Verify that cliclick is installed on the system.\n * Throws with install instructions if not found.\n */\nasync function checkCliclickInstalled(): Promise<void> {\n try {\n await execFileAsync(\"which\", [\"cliclick\"]);\n } catch {\n throw new Error(\"cliclick not found. Install with: brew install cliclick\");\n }\n}\n\n/**\n * Execute a mouse action at the given coordinates using cliclick.\n */\nexport async function executeMouseAction(\n action: MouseAction,\n x: number,\n y: number,\n): Promise<void> {\n await checkCliclickInstalled();\n const prefix = ACTION_COMMANDS[action];\n await execFileAsync(\"cliclick\", [`${prefix}:${x},${y}`]);\n}\n\n/**\n * Get the current cursor position using cliclick.\n * Returns coordinates in points.\n */\nexport async function getCursorPosition(): Promise<{\n x: number;\n y: number;\n}> {\n await checkCliclickInstalled();\n const { stdout } = await execFileAsync(\"cliclick\", [\"p\"]);\n const parts = stdout.trim().split(\",\");\n const xStr = parts[0];\n const yStr = parts[1];\n if (parts.length !== 2 || xStr === undefined || yStr === undefined) {\n throw new Error(`Unexpected cliclick output: ${stdout.trim()}`);\n }\n const x = parseInt(xStr, 10);\n const y = parseInt(yStr, 10);\n if (Number.isNaN(x) || Number.isNaN(y)) {\n throw new Error(`Failed to parse cursor position: ${stdout.trim()}`);\n }\n return { x, y };\n}\n\nconst VALID_SPECIAL_KEYS = new Set([\n \"cmd\",\n \"ctrl\",\n \"alt\",\n \"shift\",\n \"fn\",\n \"arrow-up\",\n \"arrow-down\",\n \"arrow-left\",\n \"arrow-right\",\n \"tab\",\n \"esc\",\n \"space\",\n \"delete\",\n \"return\",\n \"enter\",\n \"home\",\n \"end\",\n \"page-up\",\n \"page-down\",\n ...Array.from({ length: 19 }, (_, i) => {\n return `f${i + 1}`;\n }),\n]);\n\nfunction isValidKeyName(key: string): boolean {\n return VALID_SPECIAL_KEYS.has(key) || key.length === 1;\n}\n\nfunction parseKeyCombo(keys: string): {\n modifiers: string[];\n mainKey: string;\n} {\n const parts = keys.split(\"+\");\n if (\n parts.length === 0 ||\n parts.some((p) => {\n return p === \"\";\n })\n ) {\n throw new Error(`Invalid key combo: \"${keys}\"`);\n }\n\n const mainKey = parts[parts.length - 1]!;\n const modifiers = parts.slice(0, -1);\n\n for (const key of parts) {\n if (!isValidKeyName(key)) {\n throw new Error(\n `Unknown key: \"${key}\". Valid keys: single characters, or special keys like cmd, ctrl, alt, shift, tab, esc, return, arrow-up, f1-f19, etc.`,\n );\n }\n }\n\n return { modifiers, mainKey };\n}\n\n/**\n * Build the cliclick command to press or type a key.\n * Special keys (return, tab, arrow-up, etc.) use `kp:`, regular characters use `t:`.\n */\nfunction keyAction(key: string): string {\n return VALID_SPECIAL_KEYS.has(key) ? `kp:${key}` : `t:${key}`;\n}\n\n/**\n * Press a key combination using cliclick.\n * Accepts combo strings like \"cmd+c\", \"ctrl+shift+s\", or single keys like \"return\".\n */\nexport async function pressKey(keys: string): Promise<void> {\n const { modifiers, mainKey } = parseKeyCombo(keys);\n\n if (modifiers.length === 0) {\n await execFileAsync(\"cliclick\", [keyAction(mainKey)]);\n return;\n }\n\n const args: string[] = [];\n for (const mod of modifiers) {\n args.push(`kd:${mod}`);\n }\n args.push(keyAction(mainKey));\n for (let i = modifiers.length - 1; i >= 0; i--) {\n args.push(`ku:${modifiers[i]}`);\n }\n await execFileAsync(\"cliclick\", args);\n}\n\n/**\n * Hold key(s) down for a specified duration then release.\n * Accepts combo strings like \"shift\" or \"cmd+shift\".\n */\nexport async function holdKey(keys: string, durationMs: number): Promise<void> {\n const { modifiers, mainKey } = parseKeyCombo(keys);\n const allKeys = [...modifiers, mainKey];\n\n const downArgs = allKeys.map((k) => {\n return `kd:${k}`;\n });\n const upArgs = [...allKeys].reverse().map((k) => {\n return `ku:${k}`;\n });\n\n await execFileAsync(\"cliclick\", downArgs);\n await sleep(durationMs);\n await execFileAsync(\"cliclick\", upArgs);\n}\n\n/**\n * Type text at the current cursor position using cliclick.\n */\nexport async function typeText(text: string): Promise<void> {\n await execFileAsync(\"cliclick\", [`t:${text}`]);\n}\n","import { execFile } from \"child_process\";\nimport { promisify } from \"util\";\n\nconst execFileAsync = promisify(execFile);\n\nexport type ScrollDirection = \"up\" | \"down\" | \"left\" | \"right\";\n\nconst DEFAULT_SCROLL_AMOUNT = 3;\n\n/**\n * Scroll at the given screen position using cliclick (mouse move) + osascript (CGEvent scroll).\n *\n * cliclick handles cursor positioning; osascript with CoreGraphics CGEvent API\n * handles the scroll wheel event (cliclick has no native scroll support).\n */\nexport async function scroll(\n x: number,\n y: number,\n direction: ScrollDirection,\n amount: number = DEFAULT_SCROLL_AMOUNT,\n): Promise<void> {\n // Move cursor to target position\n await execFileAsync(\"cliclick\", [`m:${x},${y}`]);\n\n // CGEvent scroll: positive dy = scroll up, negative dy = scroll down\n // Second wheel axis: positive dx = scroll left, negative dx = scroll right\n let dy = 0;\n let dx = 0;\n switch (direction) {\n case \"up\":\n dy = amount;\n break;\n case \"down\":\n dy = -amount;\n break;\n case \"left\":\n dx = amount;\n break;\n case \"right\":\n dx = -amount;\n break;\n }\n\n const script = [\n \"ObjC.import('CoreGraphics');\",\n `var e = $.CGEventCreateScrollWheelEvent(null, 0, 2, ${dy}, ${dx});`,\n \"$.CGEventPost($.kCGHIDEventTap, e);\",\n ].join(\" \");\n\n await execFileAsync(\"osascript\", [\"-l\", \"JavaScript\", \"-e\", script]);\n}\n","import { execFile, spawn } from \"child_process\";\nimport { promisify } from \"util\";\n\nconst execFileAsync = promisify(execFile);\n\n/**\n * Read text content from the macOS clipboard using pbpaste.\n */\nexport async function readClipboard(): Promise<string> {\n const { stdout } = await execFileAsync(\"pbpaste\");\n return stdout;\n}\n\n/**\n * Write text content to the macOS clipboard using pbcopy.\n */\nexport async function writeClipboard(text: string): Promise<void> {\n return new Promise((resolve, reject) => {\n const proc = spawn(\"pbcopy\", { stdio: [\"pipe\", \"ignore\", \"ignore\"] });\n proc.on(\"error\", reject);\n proc.on(\"close\", (code) => {\n if (code === 0) {\n resolve();\n } else {\n reject(new Error(`pbcopy exited with code ${code}`));\n }\n });\n proc.stdin.end(text);\n });\n}\n","import { execFile } from \"child_process\";\nimport { promisify } from \"util\";\n\nconst execFileAsync = promisify(execFile);\n\n/**\n * Open or activate a macOS application by name or bundle ID.\n * Detects bundle IDs by the presence of dots (e.g., com.apple.Safari).\n */\nexport async function openApplication(nameOrBundleId: string): Promise<void> {\n const isBundleId = nameOrBundleId.includes(\".\");\n const flag = isBundleId ? \"-b\" : \"-a\";\n await execFileAsync(\"open\", [flag, nameOrBundleId]);\n}\n","// Dynamic import is intentional: @ngrok/ngrok contains native binaries that\n// crash on systems with GLIBC version mismatches. Lazy-loading ensures the\n// crash only affects the command that needs ngrok, not the entire CLI.\n// See: https://github.com/vm0-ai/vm0/issues/6825\nasync function loadNgrok(): Promise<typeof import(\"@ngrok/ngrok\")> {\n try {\n const mod = await import(\"@ngrok/ngrok\");\n return mod.default;\n } catch (cause) {\n throw new Error(\n \"Failed to load ngrok tunnel module. \" +\n \"This may be caused by a system library (GLIBC) incompatibility. \" +\n \"See: https://github.com/vm0-ai/vm0/issues/6825\",\n { cause },\n );\n }\n}\n\nexport async function startDesktopTunnel(\n ngrokToken: string,\n endpointPrefix: string,\n port: number,\n): Promise<void> {\n const ngrok = await loadNgrok();\n\n await ngrok.forward({\n addr: `localhost:${port}`,\n authtoken: ngrokToken,\n domain: `desktop.${endpointPrefix}.internal`,\n });\n}\n\nexport async function stopDesktopTunnel(): Promise<void> {\n const ngrok = await loadNgrok();\n await ngrok.kill();\n}\n","import { Command } from \"commander\";\nimport { writeFile, mkdir } from \"fs/promises\";\nimport { join } from \"path\";\nimport { withErrorHandler } from \"../../../lib/command/with-error-handler\";\nimport { callHost } from \"../../../lib/computer-use/client\";\n\nfunction mouseClickCommand(\n name: string,\n action: string,\n description: string,\n): Command {\n return new Command()\n .name(name)\n .description(description)\n .argument(\"<x>\", \"X coordinate (points)\")\n .argument(\"<y>\", \"Y coordinate (points)\")\n .action(\n withErrorHandler(async (xStr: string, yStr: string) => {\n const x = parseInt(xStr, 10);\n const y = parseInt(yStr, 10);\n if (Number.isNaN(x) || Number.isNaN(y)) {\n throw new Error(\"Coordinates must be integers\");\n }\n const response = await callHost(\"/mouse\", {\n method: \"POST\",\n body: { action, x, y },\n });\n const data = await response.json();\n process.stdout.write(JSON.stringify(data) + \"\\n\");\n }),\n );\n}\n\nexport const clientScreenshotCommand = new Command()\n .name(\"screenshot\")\n .description(\"Capture a screenshot from the remote host\")\n .action(\n withErrorHandler(async () => {\n const response = await callHost(\"/screenshot\");\n const data = (await response.json()) as {\n width: number;\n height: number;\n scaleFactor: number;\n format: string;\n image: string;\n };\n\n const dir = \"/tmp/computer-use\";\n await mkdir(dir, { recursive: true });\n\n const timestamp = Date.now();\n const filePath = join(dir, `screenshot-${timestamp}.${data.format}`);\n const buffer = Buffer.from(data.image, \"base64\");\n await writeFile(filePath, buffer);\n\n // Path to stdout for programmatic consumption\n process.stdout.write(`${filePath}\\n`);\n\n // Metadata to stderr for human/debug consumption\n process.stderr.write(\n JSON.stringify({\n width: data.width,\n height: data.height,\n scaleFactor: data.scaleFactor,\n }) + \"\\n\",\n );\n }),\n );\n\nexport const clientZoomCommand = new Command()\n .name(\"zoom\")\n .description(\"Capture a region screenshot from the remote host\")\n .requiredOption(\"--x <number>\", \"X coordinate of the region\")\n .requiredOption(\"--y <number>\", \"Y coordinate of the region\")\n .requiredOption(\"--width <number>\", \"Width of the region\")\n .requiredOption(\"--height <number>\", \"Height of the region\")\n .action(\n withErrorHandler(\n async (opts: { x: string; y: string; width: string; height: string }) => {\n const params = new URLSearchParams({\n x: opts.x,\n y: opts.y,\n width: opts.width,\n height: opts.height,\n });\n const response = await callHost(`/zoom?${params.toString()}`);\n const data = (await response.json()) as {\n width: number;\n height: number;\n scaleFactor: number;\n format: string;\n image: string;\n };\n\n const dir = \"/tmp/computer-use\";\n await mkdir(dir, { recursive: true });\n\n const timestamp = Date.now();\n const filePath = join(dir, `zoom-${timestamp}.${data.format}`);\n const buffer = Buffer.from(data.image, \"base64\");\n await writeFile(filePath, buffer);\n\n process.stdout.write(`${filePath}\\n`);\n\n process.stderr.write(\n JSON.stringify({\n width: data.width,\n height: data.height,\n scaleFactor: data.scaleFactor,\n }) + \"\\n\",\n );\n },\n ),\n );\n\nexport const clientInfoCommand = new Command()\n .name(\"info\")\n .description(\"Get screen info from the remote host\")\n .action(\n withErrorHandler(async () => {\n const response = await callHost(\"/info\");\n const data = (await response.json()) as {\n width: number;\n height: number;\n scaleFactor: number;\n };\n\n process.stdout.write(JSON.stringify(data) + \"\\n\");\n }),\n );\n\nexport const clientLeftClickCommand = mouseClickCommand(\n \"left-click\",\n \"left_click\",\n \"Perform a left click at coordinates\",\n);\n\nexport const clientRightClickCommand = mouseClickCommand(\n \"right-click\",\n \"right_click\",\n \"Perform a right click at coordinates\",\n);\n\nexport const clientMiddleClickCommand = mouseClickCommand(\n \"middle-click\",\n \"middle_click\",\n \"Perform a middle click at coordinates\",\n);\n\nexport const clientDoubleClickCommand = mouseClickCommand(\n \"double-click\",\n \"double_click\",\n \"Perform a double click at coordinates\",\n);\n\nexport const clientTripleClickCommand = mouseClickCommand(\n \"triple-click\",\n \"triple_click\",\n \"Perform a triple click at coordinates\",\n);\n\nexport const clientLeftClickDragCommand = new Command()\n .name(\"left-click-drag\")\n .description(\"Drag from (startX, startY) to (endX, endY)\")\n .argument(\"<startX>\", \"Start X coordinate\")\n .argument(\"<startY>\", \"Start Y coordinate\")\n .argument(\"<endX>\", \"End X coordinate\")\n .argument(\"<endY>\", \"End Y coordinate\")\n .action(\n withErrorHandler(\n async (startX: string, startY: string, endX: string, endY: string) => {\n await callHost(\"/mouse\", {\n method: \"POST\",\n body: {\n action: \"left_click_drag\",\n startX: Number(startX),\n startY: Number(startY),\n endX: Number(endX),\n endY: Number(endY),\n },\n });\n process.stdout.write(\"ok\\n\");\n },\n ),\n );\n\nexport const clientLeftMouseDownCommand = new Command()\n .name(\"left-mouse-down\")\n .description(\"Press and hold the left mouse button at (x, y)\")\n .argument(\"<x>\", \"X coordinate\")\n .argument(\"<y>\", \"Y coordinate\")\n .action(\n withErrorHandler(async (x: string, y: string) => {\n await callHost(\"/mouse\", {\n method: \"POST\",\n body: { action: \"left_mouse_down\", x: Number(x), y: Number(y) },\n });\n process.stdout.write(\"ok\\n\");\n }),\n );\n\nexport const clientLeftMouseUpCommand = new Command()\n .name(\"left-mouse-up\")\n .description(\"Release the left mouse button at (x, y)\")\n .argument(\"<x>\", \"X coordinate\")\n .argument(\"<y>\", \"Y coordinate\")\n .action(\n withErrorHandler(async (x: string, y: string) => {\n await callHost(\"/mouse\", {\n method: \"POST\",\n body: { action: \"left_mouse_up\", x: Number(x), y: Number(y) },\n });\n process.stdout.write(\"ok\\n\");\n }),\n );\n\nexport const clientScrollCommand = new Command()\n .name(\"scroll\")\n .description(\"Scroll at the given screen position\")\n .argument(\"<x>\", \"X coordinate\")\n .argument(\"<y>\", \"Y coordinate\")\n .argument(\"<direction>\", \"Scroll direction: up, down, left, right\")\n .argument(\"[amount]\", \"Scroll amount in lines (default 3)\")\n .action(\n withErrorHandler(\n async (x: string, y: string, direction: string, amount?: string) => {\n await callHost(\"/mouse\", {\n method: \"POST\",\n body: {\n action: \"scroll\",\n x: Number(x),\n y: Number(y),\n direction,\n ...(amount !== undefined && { amount: Number(amount) }),\n },\n });\n process.stdout.write(\"ok\\n\");\n },\n ),\n );\n\nexport const clientReadClipboardCommand = new Command()\n .name(\"read-clipboard\")\n .description(\"Read text content from the remote clipboard\")\n .action(\n withErrorHandler(async () => {\n const response = await callHost(\"/clipboard\");\n const data = (await response.json()) as { text: string };\n process.stdout.write(data.text);\n }),\n );\n\nexport const clientWriteClipboardCommand = new Command()\n .name(\"write-clipboard\")\n .description(\"Write text content to the remote clipboard\")\n .argument(\"<text>\", \"Text to write to clipboard\")\n .action(\n withErrorHandler(async (text: string) => {\n await callHost(\"/clipboard\", {\n method: \"POST\",\n body: { text },\n });\n process.stdout.write(\"ok\\n\");\n }),\n );\n\nexport const clientKeyCommand = new Command()\n .name(\"key\")\n .description(\"Press a key or key combination (e.g., cmd+c, return)\")\n .argument(\"<combo>\", \"Key combo string (e.g., cmd+c, ctrl+shift+s, return)\")\n .action(\n withErrorHandler(async (combo: string) => {\n await callHost(\"/keyboard\", {\n method: \"POST\",\n body: { action: \"key\", keys: combo },\n });\n process.stdout.write(\"ok\\n\");\n }),\n );\n\nexport const clientHoldKeyCommand = new Command()\n .name(\"hold-key\")\n .description(\"Hold a key or key combination for a duration\")\n .argument(\"<combo>\", \"Key combo string (e.g., shift, cmd+shift)\")\n .argument(\"<durationMs>\", \"Duration to hold in milliseconds\")\n .action(\n withErrorHandler(async (combo: string, durationStr: string) => {\n const durationMs = parseInt(durationStr, 10);\n if (Number.isNaN(durationMs) || durationMs <= 0) {\n throw new Error(\"durationMs must be a positive integer\");\n }\n await callHost(\"/keyboard\", {\n method: \"POST\",\n body: { action: \"hold_key\", keys: combo, durationMs },\n });\n process.stdout.write(\"ok\\n\");\n }),\n );\n\nexport const clientTypeCommand = new Command()\n .name(\"type\")\n .description(\"Type text at the current cursor position\")\n .argument(\"<text>\", \"Text to type\")\n .action(\n withErrorHandler(async (text: string) => {\n await callHost(\"/keyboard\", {\n method: \"POST\",\n body: { action: \"type\", text },\n });\n process.stdout.write(\"ok\\n\");\n }),\n );\n\nexport const clientOpenAppCommand = new Command()\n .name(\"open-app\")\n .description(\"Open or activate a macOS application by name or bundle ID\")\n .argument(\n \"<nameOrBundleId>\",\n \"App name (e.g., Safari) or bundle ID (e.g., com.apple.Safari)\",\n )\n .action(\n withErrorHandler(async (nameOrBundleId: string) => {\n await callHost(\"/open-application\", {\n method: \"POST\",\n body: { nameOrBundleId },\n });\n process.stdout.write(\"ok\\n\");\n }),\n );\n\nexport const clientMouseMoveCommand = mouseClickCommand(\n \"mouse-move\",\n \"move\",\n \"Move mouse pointer to coordinates\",\n);\n\nexport const clientCursorPositionCommand = new Command()\n .name(\"cursor-position\")\n .description(\"Get current cursor position from the remote host\")\n .action(\n withErrorHandler(async () => {\n const response = await callHost(\"/cursor-position\");\n const data = (await response.json()) as { x: number; y: number };\n process.stdout.write(JSON.stringify(data) + \"\\n\");\n }),\n );\n","import { getComputerUseHost } from \"../api\";\n\nlet cachedHost: { domain: string; token: string; cachedAt: number } | null =\n null;\nconst CACHE_TTL_MS = 30_000;\n\n/**\n * Discover the active computer-use host for the current org/user.\n * Results are cached for 30 seconds.\n */\nasync function discoverHost(): Promise<{\n domain: string;\n token: string;\n}> {\n if (cachedHost && Date.now() - cachedHost.cachedAt < CACHE_TTL_MS) {\n return { domain: cachedHost.domain, token: cachedHost.token };\n }\n\n const host = await getComputerUseHost();\n if (!host) {\n throw new Error(\n \"No active computer-use host found\\n\\n\" +\n \"Start a host with: zero computer-use host start\",\n );\n }\n\n cachedHost = { ...host, cachedAt: Date.now() };\n return host;\n}\n\n/**\n * Make an HTTP request to the computer-use host.\n */\nexport async function callHost(\n path: string,\n options?: { method?: string; body?: unknown },\n): Promise<Response> {\n const { domain, token } = await discoverHost();\n const url = `https://desktop.${domain}${path}`;\n\n const headers: Record<string, string> = { \"x-vm0-token\": token };\n const init: RequestInit = { headers };\n\n if (options?.method) {\n init.method = options.method;\n }\n if (options?.body !== undefined) {\n headers[\"content-type\"] = \"application/json\";\n init.body = JSON.stringify(options.body);\n }\n\n const response = await fetch(url, init);\n\n if (!response.ok) {\n const body = await response.text().catch(() => {\n return \"\";\n });\n throw new Error(\n `Host returned ${response.status}: ${body || response.statusText}`,\n );\n }\n\n return response;\n}\n","import { Command } from \"commander\";\nimport { callCommand } from \"./call\";\nimport { recordCommand } from \"./record\";\n\nexport const zeroPhoneCommand = new Command()\n .name(\"phone\")\n .description(\"Make and manage phone calls\")\n .addCommand(callCommand)\n .addCommand(recordCommand);\n","import * as fs from \"fs\";\nimport { Command, Option } from \"commander\";\nimport chalk from \"chalk\";\nimport { createPhoneCall, getPhoneCallDetail } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { printTranscript, printCallInfo } from \"./format\";\n\nconst POLL_INTERVAL_MS = 10_000;\nconst POLL_TIMEOUT_MS = 15 * 60 * 1000; // 15 minutes\n\nexport const delay = {\n ms: (ms: number): Promise<void> => {\n return new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n },\n};\n\nconst TERMINAL_STATUSES = new Set([\n \"completed\",\n \"ended\",\n \"failed\",\n \"no-answer\",\n \"busy\",\n \"cancelled\",\n]);\n\nfunction isErrnoException(err: unknown): err is NodeJS.ErrnoException {\n return err instanceof Error && \"code\" in err;\n}\n\nexport const callCommand = new Command()\n .name(\"call\")\n .description(\"Initiate an outbound phone call\")\n .argument(\n \"<to-number>\",\n \"Phone number to call (E.164 format, e.g. +14155551234)\",\n )\n .addOption(\n new Option(\n \"--mode <mode>\",\n \"onhold: wait for call to complete and return transcript. fire-and-forget: initiate and return immediately.\",\n )\n .choices([\"onhold\", \"fire-and-forget\"])\n .makeOptionMandatory(),\n )\n .option(\n \"--system-prompt-file <path>\",\n \"File that defines the agent's persona and task context for this call\",\n )\n .action(\n withErrorHandler(\n async (\n toNumber: string,\n options: {\n mode: \"onhold\" | \"fire-and-forget\";\n systemPromptFile?: string;\n },\n ) => {\n // Validate E.164 format\n if (!/^\\+[1-9]\\d{1,14}$/.test(toNumber)) {\n console.error(\n chalk.red(\n \"Invalid phone number format. Use E.164 (e.g. +14155551234)\",\n ),\n );\n process.exit(1);\n }\n\n let systemPrompt: string | undefined;\n if (options.systemPromptFile) {\n try {\n systemPrompt = fs.readFileSync(options.systemPromptFile, \"utf-8\");\n } catch (err) {\n if (isErrnoException(err) && err.code === \"ENOENT\") {\n console.error(\n chalk.red(`File not found: ${options.systemPromptFile}`),\n );\n process.exit(1);\n }\n throw err;\n }\n }\n\n const result = await createPhoneCall({\n toNumber,\n systemPrompt,\n });\n\n console.log(chalk.green(\"Call initiated\"));\n console.log(` ${\"Call ID:\".padEnd(12)}${chalk.cyan(result.callId)}`);\n console.log(` ${\"Status:\".padEnd(12)}${result.status}`);\n\n if (options.mode === \"fire-and-forget\") {\n return;\n }\n\n // onhold: poll until call completes\n console.log();\n console.log(\n chalk.dim(\"Waiting for call to complete (polling every 10s)...\"),\n );\n\n const startTime = Date.now();\n\n while (Date.now() - startTime < POLL_TIMEOUT_MS) {\n await delay.ms(POLL_INTERVAL_MS);\n\n const detail = await getPhoneCallDetail(result.callId);\n const status = detail.call.status;\n const elapsed = Math.round((Date.now() - startTime) / 1000);\n\n if (TERMINAL_STATUSES.has(status)) {\n console.log();\n console.log(chalk.bold(\"Call Detail\"));\n console.log();\n printCallInfo(detail.call, result.callId);\n console.log();\n console.log(chalk.bold(\"Transcript\"));\n console.log();\n printTranscript(detail.transcript);\n\n if (status === \"failed\") {\n process.exit(1);\n }\n return;\n }\n\n console.log(chalk.dim(` [${elapsed}s] status: ${status}`));\n }\n\n console.error(chalk.red(\"\\nCall timed out after 15 minutes\"));\n process.exit(1);\n },\n ),\n );\n","import chalk from \"chalk\";\nimport type { PhoneCall, TranscriptEntry } from \"../../../lib/api\";\n\nexport function printTranscript(transcript: TranscriptEntry[] | null): void {\n if (!transcript || transcript.length === 0) {\n console.log(\" (no transcript)\");\n return;\n }\n for (const entry of transcript) {\n console.log(` ${chalk.dim(`[${entry.role}]`)} ${entry.text}`);\n }\n}\n\nexport function printCallInfo(call: PhoneCall, callId: string): void {\n console.log(` ${\"Call ID:\".padEnd(16)}${chalk.cyan(call.id ?? callId)}`);\n console.log(` ${\"From:\".padEnd(16)}${call.fromNumber}`);\n console.log(` ${\"To:\".padEnd(16)}${call.toNumber}`);\n console.log(` ${\"Status:\".padEnd(16)}${call.status}`);\n console.log(\n ` ${\"Duration:\".padEnd(16)}${call.durationSeconds != null ? `${call.durationSeconds}s` : \"N/A\"}`,\n );\n console.log(` ${\"Started:\".padEnd(16)}${call.startedAt ?? \"\"}`);\n}\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { listPhoneCalls, getPhoneCallDetail } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { printTranscript, printCallInfo } from \"./format\";\n\nasync function showCallDetail(callId: string) {\n const result = await getPhoneCallDetail(callId);\n\n console.log(chalk.bold(\"Call Detail\"));\n console.log();\n printCallInfo(result.call, callId);\n console.log();\n console.log(chalk.bold(\"Transcript\"));\n console.log();\n printTranscript(result.transcript);\n}\n\nasync function showCallList(limit: number) {\n const result = await listPhoneCalls({ limit });\n\n if (result.data.length === 0) {\n console.log(chalk.dim(\"No phone calls found\"));\n return;\n }\n\n console.log(chalk.bold(\"Recent Calls\"));\n console.log();\n\n for (const call of result.data) {\n const id = call.id;\n const from = call.fromNumber;\n const to = call.toNumber;\n const status = call.status;\n const duration = call.durationSeconds;\n const snippet = call.lastTranscriptSnippet ?? \"\";\n\n console.log(` ${chalk.cyan(id)}`);\n console.log(\n ` ${from} → ${to} ${chalk.dim(status)}${duration != null ? ` ${duration}s` : \"\"}`,\n );\n if (snippet) {\n console.log(` ${chalk.dim(snippet.slice(0, 80))}`);\n }\n console.log();\n }\n\n console.log(\n chalk.dim(`Showing ${result.data.length} of ${result.total} call(s)`),\n );\n}\n\nexport const recordCommand = new Command()\n .name(\"record\")\n .description(\"View phone call history and transcripts\")\n .argument(\"[call-id]\", \"Call ID to view details (omit to list recent calls)\")\n .option(\"-n, --limit <number>\", \"Number of calls to show\", \"10\")\n .action(\n withErrorHandler(\n async (callId: string | undefined, options: { limit: string }) => {\n if (callId) {\n await showCallDetail(callId);\n } else {\n const limit = parseInt(options.limit, 10) || 10;\n await showCallList(limit);\n }\n },\n ),\n );\n","import { Command } from \"commander\";\nimport { voiceChatContextCommand } from \"./context\";\n\nexport const zeroVoiceChatCommand = new Command()\n .name(\"voice-chat\")\n .description(\"Read and write voice-chat shared context events\")\n .addCommand(voiceChatContextCommand)\n .addHelpText(\n \"after\",\n `\nExamples:\n Read all events: zero voice-chat context get <session-id>\n Read new events: zero voice-chat context get <session-id> --after 5\n Append an event: zero voice-chat context append <session-id> --source worker --type result --content \"Done\"`,\n );\n","import { Command } from \"commander\";\nimport { voiceChatContextGetCommand } from \"./get\";\nimport { voiceChatContextAppendCommand } from \"./append\";\n\nexport const voiceChatContextCommand = new Command()\n .name(\"context\")\n .description(\"Read and write voice-chat shared context\")\n .addCommand(voiceChatContextGetCommand)\n .addCommand(voiceChatContextAppendCommand);\n","import { Command } from \"commander\";\nimport { withErrorHandler } from \"../../../../lib/command\";\nimport { getVoiceChatContextEvents } from \"../../../../lib/api\";\n\nexport const voiceChatContextGetCommand = new Command()\n .name(\"get\")\n .description(\"Read shared context events for a voice-chat session\")\n .argument(\"<session-id>\", \"Voice-chat session ID\")\n .option(\n \"--after <seq>\",\n \"Only return events after this sequence number\",\n parseInt,\n )\n .action(\n withErrorHandler(async (sessionId: string, options: { after?: number }) => {\n const data = await getVoiceChatContextEvents(sessionId, options.after);\n console.log(JSON.stringify(data, null, 2));\n }),\n );\n","import { readFileSync } from \"fs\";\nimport { Command } from \"commander\";\nimport { withErrorHandler } from \"../../../../lib/command\";\nimport { appendVoiceChatContextEvent } from \"../../../../lib/api\";\n\nexport const voiceChatContextAppendCommand = new Command()\n .name(\"append\")\n .description(\"Append an event to voice-chat shared context\")\n .argument(\"<session-id>\", \"Voice-chat session ID\")\n .requiredOption(\n \"--source <source>\",\n \"Event source (system|user|talker|worker)\",\n )\n .requiredOption(\"--type <type>\", \"Event type\")\n .option(\n \"--content <content>\",\n \"Event content (reads from stdin if not provided)\",\n )\n .addHelpText(\n \"after\",\n `\nExamples:\n Append with content: zero voice-chat context append <session-id> --source worker --type result --content \"Done\"\n Pipe from stdin: echo \"Done\" | zero voice-chat context append <session-id> --source worker --type result`,\n )\n .action(\n withErrorHandler(\n async (\n sessionId: string,\n options: { source: string; type: string; content?: string },\n ) => {\n let content = options.content;\n\n // Read from stdin if content not provided and stdin is piped\n if (!content && process.stdin.isTTY === false) {\n content = readFileSync(\"/dev/stdin\", \"utf8\").trim();\n }\n\n const data = await appendVoiceChatContextEvent(sessionId, {\n source: options.source,\n type: options.type,\n content,\n });\n console.log(JSON.stringify(data, null, 2));\n },\n ),\n );\n"],"mappings":"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","names":["listCommand","setCommand","removeCommand","listCommand","setCommand","removeCommand","listCommand","setCommand","removeCommand","listCommand","setCommand","removeCommand","listCommand","import_prompts","prompts","type","config","prompts","selectedModel","provider","defaultNote","modelNote","removeCommand","listCommand","removeCommand","readFileSync","readFileSync","listCommand","deleteCommand","listCommand","deleteCommand","listCommand","statusCommand","listCommand","statusCommand","detectTimezone","day","setupCommand","listCommand","statusCommand","deleteCommand","setupCommand","listCommand","statusCommand","deleteCommand","listCommand","setCommand","deleteCommand","listCommand","setCommand","deleteCommand","readFileSync","readFileSync","readFileSync","readFileSync","truncateValue","listCommand","setCommand","deleteCommand","listCommand","setCommand","deleteCommand","formatConnectorIdentity","unknownIcon","readFileSync","join","createCommand","editCommand","viewCommand","listCommand","deleteCommand","createCommand","editCommand","viewCommand","listCommand","deleteCommand","listCommand","listCommand","createServer","join","execFile","promisify","execFileAsync","execFile","promisify","execFileAsync","execFile","spawn","promisify","execFileAsync","execFile","promisify","execFileAsync","getRandomPort","createServer","loadNgrok","getRandomPort","join","join","delay","readFileSync","readFileSync"]}
|
|
1
|
+
{"version":3,"sources":["../src/zero.ts","../src/commands/zero/org/index.ts","../src/commands/zero/org/status.ts","../src/commands/zero/org/set.ts","../src/commands/zero/org/list.ts","../src/commands/zero/org/use.ts","../src/commands/zero/org/members.ts","../src/commands/zero/org/invite.ts","../src/commands/zero/org/remove.ts","../src/commands/zero/org/leave.ts","../src/commands/zero/org/delete.ts","../src/commands/zero/org/secret/index.ts","../src/commands/zero/org/secret/list.ts","../src/commands/zero/org/secret/set.ts","../src/commands/zero/org/secret/remove.ts","../src/commands/zero/org/variable/index.ts","../src/commands/zero/org/variable/list.ts","../src/commands/zero/org/variable/set.ts","../src/commands/zero/org/variable/remove.ts","../src/commands/zero/org/model-provider/index.ts","../src/commands/zero/org/model-provider/list.ts","../src/commands/zero/org/model-provider/setup.ts","../src/lib/domain/model-provider/shared.ts","../src/commands/zero/org/model-provider/remove.ts","../src/commands/zero/org/model-provider/set-default.ts","../src/commands/zero/agent/index.ts","../src/commands/zero/agent/create.ts","../src/commands/zero/agent/edit.ts","../src/commands/zero/agent/view.ts","../src/lib/utils/format-utils.ts","../src/commands/zero/agent/list.ts","../src/commands/zero/agent/delete.ts","../src/commands/zero/connector/index.ts","../src/commands/zero/connector/connect.ts","../src/lib/computer/start-services.ts","../src/lib/computer/ngrok.ts","../src/commands/zero/connector/list.ts","../src/commands/zero/connector/status.ts","../src/lib/domain/schedule-utils.ts","../src/commands/zero/connector/disconnect.ts","../src/commands/zero/doctor/index.ts","../src/commands/zero/doctor/missing-token.ts","../src/commands/zero/doctor/platform-url.ts","../src/commands/zero/doctor/permission-deny.ts","../src/commands/zero/doctor/permission-change.ts","../src/commands/zero/doctor/resolve-role.ts","../src/commands/zero/preference/index.ts","../src/commands/zero/run/index.ts","../src/commands/zero/run/run.ts","../src/commands/zero/run/shared.ts","../src/commands/zero/run/continue.ts","../src/commands/zero/schedule/index.ts","../src/commands/zero/schedule/setup.ts","../src/commands/zero/schedule/list.ts","../src/commands/zero/schedule/status.ts","../src/commands/zero/schedule/delete.ts","../src/commands/zero/schedule/enable.ts","../src/commands/zero/schedule/disable.ts","../src/commands/zero/secret/index.ts","../src/commands/zero/secret/list.ts","../src/commands/zero/secret/set.ts","../src/commands/zero/secret/delete.ts","../src/commands/zero/slack/index.ts","../src/commands/zero/slack/message/index.ts","../src/commands/zero/slack/message/send.ts","../src/commands/zero/slack/upload-file.ts","../src/commands/zero/variable/index.ts","../src/commands/zero/variable/list.ts","../src/commands/zero/variable/set.ts","../src/commands/zero/variable/delete.ts","../src/commands/zero/whoami.ts","../src/commands/zero/skill/index.ts","../src/commands/zero/skill/create.ts","../src/lib/skill-directory.ts","../src/commands/zero/skill/edit.ts","../src/commands/zero/skill/view.ts","../src/commands/zero/skill/list.ts","../src/commands/zero/skill/delete.ts","../src/commands/zero/logs/index.ts","../src/commands/zero/logs/list.ts","../src/commands/zero/logs/search.ts","../src/commands/zero/developer-support.ts","../src/commands/zero/computer-use/index.ts","../src/commands/zero/computer-use/host.ts","../src/lib/computer-use/desktop-server.ts","../src/lib/computer-use/screencapture.ts","../src/lib/computer-use/cliclick.ts","../src/lib/computer-use/scroll.ts","../src/lib/computer-use/clipboard.ts","../src/lib/computer-use/application.ts","../src/lib/computer-use/ngrok.ts","../src/commands/zero/computer-use/client.ts","../src/lib/computer-use/client.ts","../src/commands/zero/phone/index.ts","../src/commands/zero/phone/call.ts","../src/commands/zero/phone/format.ts","../src/commands/zero/phone/record.ts","../src/commands/zero/voice-chat/index.ts","../src/commands/zero/voice-chat/context/index.ts","../src/commands/zero/voice-chat/context/get.ts","../src/commands/zero/voice-chat/context/append.ts"],"sourcesContent":["// Zero CLI entry point - standalone binary for zero platform commands\n// Sentry must be initialized before any other imports\nimport \"./instrument.js\";\nimport { Command } from \"commander\";\nimport { configureGlobalProxyFromEnv } from \"./lib/network/proxy.js\";\nimport { zeroOrgCommand } from \"./commands/zero/org\";\nimport { zeroAgentCommand } from \"./commands/zero/agent\";\nimport { zeroConnectorCommand } from \"./commands/zero/connector\";\nimport { zeroDoctorCommand } from \"./commands/zero/doctor\";\nimport { zeroPreferenceCommand } from \"./commands/zero/preference\";\nimport { zeroRunCommand } from \"./commands/zero/run\";\nimport { zeroScheduleCommand } from \"./commands/zero/schedule\";\nimport { zeroSecretCommand } from \"./commands/zero/secret\";\nimport { zeroSlackCommand } from \"./commands/zero/slack\";\nimport { zeroVariableCommand } from \"./commands/zero/variable\";\nimport { zeroWhoamiCommand } from \"./commands/zero/whoami\";\nimport { zeroSkillCommand } from \"./commands/zero/skill\";\nimport { zeroLogsCommand } from \"./commands/zero/logs\";\nimport { zeroDeveloperSupportCommand } from \"./commands/zero/developer-support\";\nimport { zeroComputerUseCommand } from \"./commands/zero/computer-use\";\nimport { zeroPhoneCommand } from \"./commands/zero/phone\";\nimport { zeroVoiceChatCommand } from \"./commands/zero/voice-chat\";\nimport {\n decodeZeroTokenPayload,\n type ZeroTokenPayload,\n} from \"./lib/api/zero-token.js\";\n\n/**\n * Map of command names to the capability required to see them.\n * Commands not in this map are hidden when ZERO_TOKEN is active.\n * Use `null` for commands that should always be visible in sandbox.\n */\nconst COMMAND_CAPABILITY_MAP: Record<string, string | null> = {\n agent: \"agent:read\",\n skill: \"agent:read\",\n connector: \"connector:read\",\n run: \"agent-run:write\",\n schedule: \"schedule:read\",\n doctor: null,\n logs: \"agent-run:read\",\n slack: \"slack:write\",\n whoami: null,\n \"developer-support\": null,\n \"computer-use\": \"computer-use:write\",\n phone: \"phone:write\",\n \"voice-chat\": \"voice-chat:write\",\n};\n\nconst DEFAULT_COMMANDS: Command[] = [\n zeroOrgCommand,\n zeroAgentCommand,\n zeroConnectorCommand,\n zeroDoctorCommand,\n zeroPreferenceCommand,\n zeroRunCommand,\n zeroScheduleCommand,\n zeroSecretCommand,\n zeroSlackCommand,\n zeroVariableCommand,\n zeroLogsCommand,\n zeroWhoamiCommand,\n zeroSkillCommand,\n zeroDeveloperSupportCommand,\n zeroComputerUseCommand,\n zeroPhoneCommand,\n zeroVoiceChatCommand,\n];\n\nfunction shouldHideCommand(\n name: string,\n payload: ZeroTokenPayload | undefined,\n): boolean {\n if (!payload) return false;\n const requiredCap = COMMAND_CAPABILITY_MAP[name];\n if (requiredCap === undefined) return true;\n return requiredCap !== null && !payload.capabilities.includes(requiredCap);\n}\n\n/**\n * Register commands with visibility based on ZERO_TOKEN capabilities.\n * Commands not granted by the token are registered as hidden via\n * Commander's public `addCommand(cmd, { hidden: true })` API.\n * When no ZERO_TOKEN is present, all commands remain visible.\n *\n * @param commands - override default commands (used in tests)\n */\nexport function registerZeroCommands(\n prog: Command,\n commands?: Command[],\n): void {\n const token = process.env.ZERO_TOKEN;\n const payload = token ? decodeZeroTokenPayload(token) : undefined;\n\n for (const cmd of commands ?? DEFAULT_COMMANDS) {\n const hidden = shouldHideCommand(cmd.name(), payload);\n prog.addCommand(cmd, hidden ? { hidden: true } : {});\n }\n}\n\nconst program = new Command();\n\ndeclare const __CLI_VERSION__: string;\n\nprogram\n .name(\"zero\")\n .description(\n \"Zero CLI — interact with the zero platform from inside the sandbox\",\n )\n .version(__CLI_VERSION__)\n .addHelpText(\n \"after\",\n `\nExamples:\n Missing a token? zero doctor missing-token <TOKEN_NAME>\n Delegate to teammate? zero run --help\n Send a Slack message? zero slack message send --help\n Set up a schedule? zero schedule setup --help\n Update yourself? zero agent --help\n Manage custom skills? zero skill --help\n Check your identity? zero whoami`,\n );\n\nexport { program };\n\nif (\n process.argv[1]?.endsWith(\"zero.js\") ||\n process.argv[1]?.endsWith(\"zero.ts\") ||\n process.argv[1]?.endsWith(\"zero\")\n) {\n configureGlobalProxyFromEnv();\n registerZeroCommands(program);\n program.parse();\n}\n","import { Command } from \"commander\";\nimport { statusCommand } from \"./status\";\nimport { setCommand } from \"./set\";\nimport { listCommand } from \"./list\";\nimport { useCommand } from \"./use\";\nimport { membersCommand } from \"./members\";\nimport { inviteCommand } from \"./invite\";\nimport { removeCommand } from \"./remove\";\nimport { leaveCommand } from \"./leave\";\nimport { deleteCommand } from \"./delete\";\nimport { zeroOrgSecretCommand } from \"./secret\";\nimport { zeroOrgVariableCommand } from \"./variable\";\nimport { zeroOrgModelProviderCommand } from \"./model-provider\";\n\nexport const zeroOrgCommand = new Command()\n .name(\"org\")\n .description(\"Manage organization settings, members, and providers\")\n .addCommand(statusCommand)\n .addCommand(setCommand)\n .addCommand(listCommand)\n .addCommand(useCommand)\n .addCommand(membersCommand)\n .addCommand(inviteCommand)\n .addCommand(removeCommand)\n .addCommand(leaveCommand)\n .addCommand(deleteCommand)\n .addCommand(zeroOrgSecretCommand)\n .addCommand(zeroOrgVariableCommand)\n .addCommand(zeroOrgModelProviderCommand);\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { getZeroOrg } from \"../../../lib/api\";\nimport { ApiRequestError } from \"../../../lib/api/core/client-factory\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const statusCommand = new Command()\n .name(\"status\")\n .description(\"View current organization status\")\n .action(\n withErrorHandler(async () => {\n try {\n const org = await getZeroOrg();\n\n console.log(chalk.bold(\"Organization Information:\"));\n console.log(` Slug: ${chalk.green(org.slug)}`);\n } catch (error) {\n if (error instanceof ApiRequestError && error.status === 404) {\n throw new Error(\"No organization configured\", {\n cause: new Error(\"Set your organization with: zero org set <slug>\"),\n });\n }\n throw error;\n }\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { getZeroOrg, updateZeroOrg, switchZeroOrg } from \"../../../lib/api\";\nimport { saveConfig } from \"../../../lib/api/config\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const setCommand = new Command()\n .name(\"set\")\n .description(\"Rename your organization slug\")\n .argument(\"<slug>\", \"The new organization slug\")\n .option(\n \"--force\",\n \"Force change existing organization (may break references)\",\n )\n .action(\n withErrorHandler(async (slug: string, options: { force?: boolean }) => {\n try {\n const existingOrg = await getZeroOrg();\n\n if (!options.force) {\n throw new Error(\n `You already have an organization: ${existingOrg.slug}`,\n {\n cause: new Error(`To change, use: zero org set ${slug} --force`),\n },\n );\n }\n\n const org = await updateZeroOrg({ slug, force: true });\n\n const result = await switchZeroOrg(org.slug);\n await saveConfig({\n token: result.access_token,\n });\n\n console.log(chalk.green(`✓ Organization updated to ${org.slug}`));\n console.log();\n console.log(\"Your agents will now be namespaced as:\");\n console.log(chalk.cyan(` ${org.slug}/<agent-name>`));\n } catch (error) {\n if (\n error instanceof Error &&\n error.message.includes(\"already exists\")\n ) {\n throw new Error(\n `Organization \"${slug}\" is already taken. Please choose a different slug.`,\n );\n }\n throw error;\n }\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { listZeroOrgs } from \"../../../lib/api\";\nimport { getActiveOrg } from \"../../../lib/api/config\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const listCommand = new Command()\n .name(\"list\")\n .description(\"List all accessible organizations\")\n .action(\n withErrorHandler(async () => {\n const result = await listZeroOrgs();\n const activeOrg = await getActiveOrg();\n\n console.log(chalk.bold(\"Available organizations:\"));\n for (const org of result.orgs) {\n const isCurrent = org.slug === activeOrg;\n const marker = isCurrent ? chalk.green(\"* \") : \" \";\n const roleLabel = org.role ? ` (${org.role})` : \"\";\n const currentLabel = isCurrent ? chalk.dim(\" ← current\") : \"\";\n console.log(`${marker}${org.slug}${roleLabel}${currentLabel}`);\n }\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { listZeroOrgs, switchZeroOrg } from \"../../../lib/api\";\nimport { saveConfig } from \"../../../lib/api/config\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const useCommand = new Command()\n .name(\"use\")\n .description(\"Switch to a different organization\")\n .argument(\"<slug>\", \"Organization slug to switch to\")\n .action(\n withErrorHandler(async (slug: string) => {\n const orgList = await listZeroOrgs();\n const target = orgList.orgs.find((s) => {\n return s.slug === slug;\n });\n if (!target) {\n throw new Error(`Organization '${slug}' not found or not accessible.`);\n }\n\n const result = await switchZeroOrg(slug);\n await saveConfig({\n token: result.access_token,\n });\n console.log(chalk.green(`✓ Switched to organization: ${slug}`));\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { getZeroOrgMembers } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const membersCommand = new Command()\n .name(\"members\")\n .description(\"View organization members\")\n .action(\n withErrorHandler(async () => {\n const status = await getZeroOrgMembers();\n\n console.log(chalk.bold(`Organization: ${status.slug}`));\n console.log(` Role: ${status.role}`);\n console.log(\n ` Created: ${new Date(status.createdAt).toLocaleDateString()}`,\n );\n console.log();\n console.log(chalk.bold(\"Members:\"));\n for (const member of status.members) {\n const roleTag =\n member.role === \"admin\"\n ? chalk.yellow(` (${member.role})`)\n : chalk.dim(` (${member.role})`);\n console.log(` ${member.email}${roleTag}`);\n }\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { inviteZeroOrgMember } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const inviteCommand = new Command()\n .name(\"invite\")\n .description(\"Invite a member to the current organization\")\n .requiredOption(\"--email <email>\", \"Email address of the member to invite\")\n .option(\n \"--role <role>\",\n \"Role for the invited member (member or admin)\",\n \"member\",\n )\n .action(\n withErrorHandler(async (options: { email: string; role: string }) => {\n if (options.role !== \"member\" && options.role !== \"admin\") {\n throw new Error(\n `Invalid role \"${options.role}\". Must be \"member\" or \"admin\".`,\n );\n }\n await inviteZeroOrgMember(options.email, options.role);\n console.log(\n chalk.green(`✓ Invitation sent to ${options.email} as ${options.role}`),\n );\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { removeZeroOrgMember } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const removeCommand = new Command()\n .name(\"remove\")\n .description(\"Remove a member from the current organization\")\n .argument(\"<email>\", \"Email address of the member to remove\")\n .action(\n withErrorHandler(async (email: string) => {\n await removeZeroOrgMember(email);\n console.log(chalk.green(`✓ Removed ${email} from organization`));\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { leaveZeroOrg, listZeroOrgs, switchZeroOrg } from \"../../../lib/api\";\nimport { saveConfig } from \"../../../lib/api/config\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const leaveCommand = new Command()\n .name(\"leave\")\n .description(\"Leave the current organization\")\n .action(\n withErrorHandler(async () => {\n await leaveZeroOrg();\n\n const { orgs } = await listZeroOrgs();\n if (orgs.length === 0) {\n await saveConfig({ token: undefined });\n console.log(chalk.green(\"✓ Left organization.\"));\n console.log(\n chalk.yellow(\"No remaining organizations. Run: vm0 auth login\"),\n );\n return;\n }\n\n const nextOrg = orgs[0]!.slug;\n const result = await switchZeroOrg(nextOrg);\n await saveConfig({\n token: result.access_token,\n });\n console.log(chalk.green(`✓ Left organization. Switched to: ${nextOrg}`));\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { deleteZeroOrg } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const deleteCommand = new Command()\n .name(\"delete\")\n .description(\"Delete the current organization (admin only)\")\n .argument(\"<slug>\", \"Organization slug to confirm deletion\")\n .action(\n withErrorHandler(async (slug: string) => {\n await deleteZeroOrg(slug);\n console.log(chalk.green(`✓ Organization '${slug}' has been deleted.`));\n }),\n );\n","import { Command } from \"commander\";\nimport { listCommand } from \"./list\";\nimport { setCommand } from \"./set\";\nimport { removeCommand } from \"./remove\";\n\nexport const zeroOrgSecretCommand = new Command()\n .name(\"secret\")\n .description(\"Manage org-level secrets (admin)\")\n .addCommand(listCommand)\n .addCommand(setCommand)\n .addCommand(removeCommand);\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { listZeroOrgSecrets } from \"../../../../lib/api\";\nimport { withErrorHandler } from \"../../../../lib/command\";\n\nexport const listCommand = new Command()\n .name(\"list\")\n .alias(\"ls\")\n .description(\"List all org-level secrets\")\n .action(\n withErrorHandler(async () => {\n const result = await listZeroOrgSecrets();\n\n if (result.secrets.length === 0) {\n console.log(chalk.dim(\"No org secrets found\"));\n console.log();\n console.log(\"To add an org secret:\");\n console.log(\n chalk.cyan(\" zero org secret set MY_API_KEY --body <value>\"),\n );\n return;\n }\n\n console.log(chalk.bold(\"Org Secrets:\"));\n console.log();\n\n for (const secret of result.secrets) {\n console.log(` ${chalk.cyan(secret.name)}`);\n if (secret.description) {\n console.log(` ${chalk.dim(secret.description)}`);\n }\n console.log(\n ` ${chalk.dim(`Updated: ${new Date(secret.updatedAt).toLocaleString()}`)}`,\n );\n console.log();\n }\n\n console.log(chalk.dim(`Total: ${result.secrets.length} secret(s)`));\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { setZeroOrgSecret } from \"../../../../lib/api\";\nimport {\n isInteractive,\n promptPassword,\n} from \"../../../../lib/utils/prompt-utils\";\nimport { withErrorHandler } from \"../../../../lib/command\";\n\nexport const setCommand = new Command()\n .name(\"set\")\n .description(\"Create or update an org-level secret (admin only)\")\n .argument(\"<name>\", \"Secret name (uppercase, e.g., MY_API_KEY)\")\n .option(\n \"-b, --body <value>\",\n \"Secret value (required in non-interactive mode)\",\n )\n .option(\"-d, --description <description>\", \"Optional description\")\n .action(\n withErrorHandler(\n async (\n name: string,\n options: { body?: string; description?: string },\n ) => {\n let value: string;\n\n if (options.body !== undefined) {\n value = options.body;\n } else if (isInteractive()) {\n const prompted = await promptPassword(\"Enter secret value:\");\n if (prompted === undefined) {\n console.log(chalk.dim(\"Cancelled\"));\n return;\n }\n value = prompted;\n } else {\n throw new Error(\"--body is required in non-interactive mode\", {\n cause: new Error(\n `Usage: zero org secret set ${name} --body \"your-secret-value\"`,\n ),\n });\n }\n\n let secret;\n try {\n secret = await setZeroOrgSecret({\n name,\n value,\n description: options.description,\n });\n } catch (error) {\n if (\n error instanceof Error &&\n error.message.includes(\"must contain only uppercase\")\n ) {\n throw new Error(error.message, {\n cause: new Error(\n \"Examples of valid secret names: MY_API_KEY, GITHUB_TOKEN, AWS_ACCESS_KEY_ID\",\n ),\n });\n }\n throw error;\n }\n\n console.log(chalk.green(`✓ Org secret \"${secret.name}\" saved`));\n },\n ),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { deleteZeroOrgSecret } from \"../../../../lib/api\";\nimport {\n isInteractive,\n promptConfirm,\n} from \"../../../../lib/utils/prompt-utils\";\nimport { withErrorHandler } from \"../../../../lib/command\";\n\nexport const removeCommand = new Command()\n .name(\"remove\")\n .description(\"Delete an org-level secret (admin only)\")\n .argument(\"<name>\", \"Secret name to delete\")\n .option(\"-y, --yes\", \"Skip confirmation prompt\")\n .action(\n withErrorHandler(async (name: string, options: { yes?: boolean }) => {\n if (!options.yes) {\n if (!isInteractive()) {\n throw new Error(\"--yes flag is required in non-interactive mode\");\n }\n\n const confirmed = await promptConfirm(\n `Are you sure you want to delete org secret \"${name}\"?`,\n false,\n );\n\n if (!confirmed) {\n console.log(chalk.dim(\"Cancelled\"));\n return;\n }\n }\n\n await deleteZeroOrgSecret(name);\n console.log(chalk.green(`✓ Org secret \"${name}\" deleted`));\n }),\n );\n","import { Command } from \"commander\";\nimport { listCommand } from \"./list\";\nimport { setCommand } from \"./set\";\nimport { removeCommand } from \"./remove\";\n\nexport const zeroOrgVariableCommand = new Command()\n .name(\"variable\")\n .description(\"Manage org-level variables (admin)\")\n .addCommand(listCommand)\n .addCommand(setCommand)\n .addCommand(removeCommand);\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { listZeroOrgVariables } from \"../../../../lib/api\";\nimport { withErrorHandler } from \"../../../../lib/command\";\n\n/**\n * Truncate value for display if too long\n */\nfunction truncateValue(value: string, maxLength: number = 60): string {\n if (value.length <= maxLength) {\n return value;\n }\n return value.slice(0, maxLength - 15) + \"... [truncated]\";\n}\n\nexport const listCommand = new Command()\n .name(\"list\")\n .alias(\"ls\")\n .description(\"List all org-level variables\")\n .action(\n withErrorHandler(async () => {\n const result = await listZeroOrgVariables();\n\n if (result.variables.length === 0) {\n console.log(chalk.dim(\"No org variables found\"));\n console.log();\n console.log(\"To add an org variable:\");\n console.log(chalk.cyan(\" zero org variable set MY_VAR <value>\"));\n return;\n }\n\n console.log(chalk.bold(\"Org Variables:\"));\n console.log();\n\n for (const variable of result.variables) {\n const displayValue = truncateValue(variable.value);\n console.log(` ${chalk.cyan(variable.name)} = ${displayValue}`);\n if (variable.description) {\n console.log(` ${chalk.dim(variable.description)}`);\n }\n console.log(\n ` ${chalk.dim(`Updated: ${new Date(variable.updatedAt).toLocaleString()}`)}`,\n );\n console.log();\n }\n\n console.log(chalk.dim(`Total: ${result.variables.length} variable(s)`));\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { setZeroOrgVariable } from \"../../../../lib/api\";\nimport { withErrorHandler } from \"../../../../lib/command\";\n\nexport const setCommand = new Command()\n .name(\"set\")\n .description(\"Create or update an org-level variable (admin only)\")\n .argument(\"<name>\", \"Variable name (uppercase, e.g., MY_VAR)\")\n .argument(\"<value>\", \"Variable value\")\n .option(\"-d, --description <description>\", \"Optional description\")\n .action(\n withErrorHandler(\n async (\n name: string,\n value: string,\n options: { description?: string },\n ) => {\n let variable;\n try {\n variable = await setZeroOrgVariable({\n name,\n value,\n description: options.description,\n });\n } catch (error) {\n if (\n error instanceof Error &&\n error.message.includes(\"must contain only uppercase\")\n ) {\n throw new Error(error.message, {\n cause: new Error(\n \"Examples of valid variable names: MY_VAR, API_URL, DEBUG_MODE\",\n ),\n });\n }\n throw error;\n }\n\n console.log(chalk.green(`✓ Org variable \"${variable.name}\" saved`));\n },\n ),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { deleteZeroOrgVariable } from \"../../../../lib/api\";\nimport {\n isInteractive,\n promptConfirm,\n} from \"../../../../lib/utils/prompt-utils\";\nimport { withErrorHandler } from \"../../../../lib/command\";\n\nexport const removeCommand = new Command()\n .name(\"remove\")\n .description(\"Delete an org-level variable (admin only)\")\n .argument(\"<name>\", \"Variable name to delete\")\n .option(\"-y, --yes\", \"Skip confirmation prompt\")\n .action(\n withErrorHandler(async (name: string, options: { yes?: boolean }) => {\n if (!options.yes) {\n if (!isInteractive()) {\n throw new Error(\"--yes flag is required in non-interactive mode\");\n }\n\n const confirmed = await promptConfirm(\n `Are you sure you want to delete org variable \"${name}\"?`,\n false,\n );\n\n if (!confirmed) {\n console.log(chalk.dim(\"Cancelled\"));\n return;\n }\n }\n\n await deleteZeroOrgVariable(name);\n console.log(chalk.green(`✓ Org variable \"${name}\" deleted`));\n }),\n );\n","import { Command } from \"commander\";\nimport { listCommand } from \"./list\";\nimport { setupCommand } from \"./setup\";\nimport { removeCommand } from \"./remove\";\nimport { setDefaultCommand } from \"./set-default\";\n\nexport const zeroOrgModelProviderCommand = new Command()\n .name(\"model-provider\")\n .description(\"Manage org-level model providers\")\n .addCommand(listCommand)\n .addCommand(setupCommand)\n .addCommand(removeCommand)\n .addCommand(setDefaultCommand);\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { listZeroOrgModelProviders } from \"../../../../lib/api\";\nimport { withErrorHandler } from \"../../../../lib/command\";\n\nexport const listCommand = new Command()\n .name(\"list\")\n .alias(\"ls\")\n .description(\"List all org-level model providers\")\n .action(\n withErrorHandler(async () => {\n const result = await listZeroOrgModelProviders();\n\n if (result.modelProviders.length === 0) {\n console.log(chalk.dim(\"No org-level model providers configured\"));\n console.log();\n console.log(\"To add an org-level model provider:\");\n console.log(chalk.cyan(\" zero org model-provider setup\"));\n return;\n }\n\n // Group by framework\n const byFramework = result.modelProviders.reduce(\n (acc, p) => {\n const fw = p.framework;\n if (!acc[fw]) {\n acc[fw] = [];\n }\n acc[fw].push(p);\n return acc;\n },\n {} as Record<string, typeof result.modelProviders>,\n );\n\n console.log(chalk.bold(\"Org Model Providers:\"));\n console.log();\n\n for (const [framework, providers] of Object.entries(byFramework)) {\n console.log(` ${chalk.cyan(framework)}:`);\n for (const provider of providers) {\n const defaultTag = provider.isDefault\n ? chalk.green(\" (default)\")\n : \"\";\n const modelTag = provider.selectedModel\n ? chalk.dim(` [${provider.selectedModel}]`)\n : \"\";\n console.log(` ${provider.type}${defaultTag}${modelTag}`);\n console.log(\n chalk.dim(\n ` Updated: ${new Date(provider.updatedAt).toLocaleString()}`,\n ),\n );\n }\n console.log();\n }\n\n console.log(\n chalk.dim(`Total: ${result.modelProviders.length} provider(s)`),\n );\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport prompts from \"prompts\";\nimport {\n listZeroOrgModelProviders,\n upsertZeroOrgModelProvider,\n updateZeroOrgModelProviderModel,\n setZeroOrgModelProviderDefault,\n} from \"../../../../lib/api\";\nimport {\n MODEL_PROVIDER_TYPES,\n hasModelSelection,\n hasAuthMethods,\n getSelectableProviderTypes,\n type ModelProviderType,\n} from \"@vm0/core\";\nimport { isInteractive } from \"../../../../lib/utils/prompt-utils\";\nimport { withErrorHandler } from \"../../../../lib/command\";\nimport {\n type SetupInput,\n handleNonInteractiveMode,\n promptForModelSelection,\n promptForAuthMethod,\n promptForSecrets,\n collectSecrets,\n} from \"../../../../lib/domain/model-provider/shared\";\n\nasync function handleInteractiveMode(): Promise<SetupInput | null> {\n if (!isInteractive()) {\n throw new Error(\"Interactive mode requires a TTY\", {\n cause: new Error(\n 'Use non-interactive mode: zero org model-provider setup --type <type> --secret \"<value>\"',\n ),\n });\n }\n\n let cancelled = false;\n const onCancel = () => {\n cancelled = true;\n return false;\n };\n\n // Fetch configured org providers to annotate choices\n const { modelProviders: configuredProviders } =\n await listZeroOrgModelProviders();\n const configuredTypes = new Set(\n configuredProviders.map((p) => {\n return p.type;\n }),\n );\n\n // Build provider choices with configuration status (only selectable providers)\n const annotatedChoices = getSelectableProviderTypes().map((type) => {\n const config = MODEL_PROVIDER_TYPES[type];\n const isConfigured = configuredTypes.has(type);\n const isExperimental = hasAuthMethods(type);\n let title: string = config.label;\n if (isConfigured) {\n title = `${title} ✓`;\n }\n if (isExperimental) {\n title = `${title} ${chalk.dim(\"(experimental)\")}`;\n }\n return {\n title,\n value: type,\n };\n });\n\n const typeResponse = await prompts(\n {\n type: \"select\",\n name: \"type\",\n message: \"Select provider type:\",\n choices: annotatedChoices,\n },\n { onCancel },\n );\n\n if (cancelled) {\n console.log(chalk.dim(\"Cancelled\"));\n return null;\n }\n\n const type = typeResponse.type as ModelProviderType;\n\n // Check if provider is already configured using the list we already fetched\n const existingProvider = configuredProviders.find((p) => {\n return p.type === type;\n });\n\n if (existingProvider) {\n console.log();\n console.log(`\"${type}\" is already configured`);\n console.log();\n\n const actionResponse = await prompts(\n {\n type: \"select\",\n name: \"action\",\n message: \"\",\n choices: [\n { title: \"Keep existing secret\", value: \"keep\" },\n { title: \"Update secret\", value: \"update\" },\n ],\n },\n { onCancel },\n );\n\n if (cancelled) {\n console.log(chalk.dim(\"Cancelled\"));\n return null;\n }\n\n if (actionResponse.action === \"keep\") {\n const selectedModel = await promptForModelSelection(type);\n return {\n type,\n keepExistingSecret: true,\n selectedModel,\n isInteractiveMode: true,\n };\n }\n // Fall through to secret prompt for \"update\"\n }\n\n const config = MODEL_PROVIDER_TYPES[type];\n\n console.log();\n if (\"helpText\" in config) {\n console.log(chalk.dim(config.helpText));\n }\n console.log();\n\n // Handle multi-auth providers\n if (hasAuthMethods(type)) {\n const authMethod = await promptForAuthMethod(type);\n const secrets = await promptForSecrets(type, authMethod);\n const selectedModel = await promptForModelSelection(type);\n\n return {\n type,\n authMethod,\n secrets,\n selectedModel,\n isInteractiveMode: true,\n };\n }\n\n // Single-secret provider (legacy)\n const secretLabel = \"secretLabel\" in config ? config.secretLabel : \"secret\";\n\n const secretResponse = await prompts(\n {\n type: \"password\",\n name: \"secret\",\n message: `Enter your ${secretLabel}:`,\n validate: (value: string) => {\n return value.length > 0 || `${secretLabel} is required`;\n },\n },\n { onCancel },\n );\n\n if (cancelled) {\n console.log(chalk.dim(\"Cancelled\"));\n return null;\n }\n\n const secret = secretResponse.secret as string;\n const selectedModel = await promptForModelSelection(type);\n\n return { type, secret, selectedModel, isInteractiveMode: true };\n}\n\nasync function promptSetAsDefault(\n type: ModelProviderType,\n framework: string,\n isDefault: boolean,\n): Promise<void> {\n if (isDefault) return;\n\n let cancelled = false;\n const response = await prompts(\n {\n type: \"confirm\",\n name: \"setDefault\",\n message: \"Set this provider as default?\",\n initial: false,\n },\n {\n onCancel: () => {\n cancelled = true;\n return false;\n },\n },\n );\n\n if (cancelled) {\n console.log(chalk.dim(\"Cancelled\"));\n return;\n }\n\n if (response.setDefault) {\n await setZeroOrgModelProviderDefault(type);\n console.log(chalk.green(`✓ Default for ${framework} set to \"${type}\"`));\n }\n}\n\nexport const setupCommand = new Command()\n .name(\"setup\")\n .description(\"Configure an org-level model provider\")\n .option(\"-t, --type <type>\", \"Provider type (for non-interactive mode)\")\n .option(\n \"-s, --secret <value>\",\n \"Secret value (can be used multiple times, supports VALUE or KEY=VALUE format)\",\n collectSecrets,\n [],\n )\n .option(\n \"-a, --auth-method <method>\",\n \"Auth method (required for multi-auth providers like aws-bedrock)\",\n )\n .option(\"-m, --model <model>\", \"Model selection (for non-interactive mode)\")\n .action(\n withErrorHandler(\n async (options: {\n type?: string;\n secret?: string[];\n authMethod?: string;\n model?: string;\n }) => {\n let input: SetupInput;\n const secretArgs = options.secret ?? [];\n\n if (options.type && secretArgs.length > 0) {\n input = handleNonInteractiveMode({\n type: options.type,\n secret: secretArgs,\n authMethod: options.authMethod,\n model: options.model,\n commandPrefix: \"zero org model-provider setup\",\n });\n } else if (options.type || secretArgs.length > 0) {\n throw new Error(\"Both --type and --secret are required\");\n } else {\n const result = await handleInteractiveMode();\n if (result === null) {\n return;\n }\n input = result;\n }\n\n // Handle \"keep existing secret\" flow\n if (input.keepExistingSecret) {\n const provider = await updateZeroOrgModelProviderModel(\n input.type,\n input.selectedModel,\n );\n\n const defaultNote = provider.isDefault\n ? ` (default for ${provider.framework})`\n : \"\";\n const modelNote = provider.selectedModel\n ? ` with model: ${provider.selectedModel}`\n : \"\";\n\n if (!hasModelSelection(input.type)) {\n console.log(\n chalk.green(`✓ Org model provider \"${input.type}\" unchanged`),\n );\n } else {\n console.log(\n chalk.green(\n `✓ Org model provider \"${input.type}\" updated${defaultNote}${modelNote}`,\n ),\n );\n }\n if (input.isInteractiveMode) {\n await promptSetAsDefault(\n input.type,\n provider.framework,\n provider.isDefault,\n );\n }\n return;\n }\n\n // Standard upsert flow with secret\n const { provider, created } = await upsertZeroOrgModelProvider({\n type: input.type,\n secret: input.secret,\n authMethod: input.authMethod,\n secrets: input.secrets,\n selectedModel: input.selectedModel,\n });\n\n const action = created ? \"created\" : \"updated\";\n const defaultNote = provider.isDefault\n ? ` (default for ${provider.framework})`\n : \"\";\n const modelNote = provider.selectedModel\n ? ` with model: ${provider.selectedModel}`\n : \"\";\n console.log(\n chalk.green(\n `✓ Org model provider \"${input.type}\" ${action}${defaultNote}${modelNote}`,\n ),\n );\n if (input.isInteractiveMode) {\n await promptSetAsDefault(\n input.type,\n provider.framework,\n provider.isDefault,\n );\n }\n },\n ),\n );\n","import chalk from \"chalk\";\nimport prompts from \"prompts\";\nimport {\n MODEL_PROVIDER_TYPES,\n getModels,\n getDefaultModel,\n hasModelSelection,\n allowsCustomModel,\n getCustomModelPlaceholder,\n hasAuthMethods,\n getAuthMethodsForType,\n getDefaultAuthMethod,\n getSecretsForAuthMethod,\n type ModelProviderType,\n} from \"@vm0/core\";\n\nexport interface SetupInput {\n type: ModelProviderType;\n secret?: string;\n // Multi-auth support\n authMethod?: string;\n secrets?: Record<string, string>;\n selectedModel?: string;\n keepExistingSecret?: boolean;\n isInteractiveMode?: boolean;\n}\n\nfunction validateProviderType(typeStr: string): ModelProviderType {\n if (!Object.keys(MODEL_PROVIDER_TYPES).includes(typeStr)) {\n const validTypes = Object.keys(MODEL_PROVIDER_TYPES).join(\", \");\n throw new Error(`Invalid type \"${typeStr}\"`, {\n cause: new Error(`Valid types: ${validTypes}`),\n });\n }\n return typeStr as ModelProviderType;\n}\n\nfunction validateModel(\n type: ModelProviderType,\n modelStr: string,\n): string | never {\n const models = getModels(type);\n\n // Allow any model if provider supports custom models\n if (allowsCustomModel(type)) {\n return modelStr;\n }\n\n if (models && !models.includes(modelStr)) {\n throw new Error(`Invalid model \"${modelStr}\"`, {\n cause: new Error(`Valid models: ${models.join(\", \")}`),\n });\n }\n return modelStr;\n}\n\nfunction validateAuthMethod(\n type: ModelProviderType,\n authMethodStr: string,\n): string | never {\n const authMethods = getAuthMethodsForType(type);\n if (!authMethods || !(authMethodStr in authMethods)) {\n const validMethods = authMethods\n ? Object.keys(authMethods).join(\", \")\n : \"none\";\n throw new Error(`Invalid auth method \"${authMethodStr}\"`, {\n cause: new Error(`Valid auth methods: ${validMethods}`),\n });\n }\n return authMethodStr;\n}\n\n/**\n * Parse secret arguments into a secrets object.\n * Supports two formats:\n * - Single value (e.g., \"sk-xxx\") - auto-mapped to the provider's secret name\n * - KEY=VALUE format (e.g., \"AWS_REGION=us-east-1\") - explicit mapping\n */\nfunction parseSecrets(\n type: ModelProviderType,\n authMethod: string,\n secretArgs: string[],\n): Record<string, string> {\n const secretsConfig = getSecretsForAuthMethod(type, authMethod);\n if (!secretsConfig) {\n throw new Error(`Invalid auth method \"${authMethod}\"`);\n }\n\n const secretNames = Object.keys(secretsConfig);\n\n // Single value without = sign: only allowed for single-secret auth methods\n const firstArg = secretArgs[0];\n if (secretArgs.length === 1 && firstArg && !firstArg.includes(\"=\")) {\n if (secretNames.length !== 1) {\n throw new Error(\n \"Must use KEY=VALUE format for multi-secret auth methods\",\n { cause: new Error(`Required secrets: ${secretNames.join(\", \")}`) },\n );\n }\n const firstSecretName = secretNames[0];\n if (!firstSecretName) {\n throw new Error(\"No secrets defined for this auth method\");\n }\n return { [firstSecretName]: firstArg };\n }\n\n // KEY=VALUE format\n const secrets: Record<string, string> = {};\n for (const arg of secretArgs) {\n const eqIndex = arg.indexOf(\"=\");\n if (eqIndex === -1) {\n throw new Error(`Invalid secret format \"${arg}\"`, {\n cause: new Error(\"Use KEY=VALUE format (e.g., AWS_REGION=us-east-1)\"),\n });\n }\n const key = arg.slice(0, eqIndex);\n const value = arg.slice(eqIndex + 1);\n secrets[key] = value;\n }\n return secrets;\n}\n\n/**\n * Validate secrets against the auth method config.\n */\nfunction validateSecrets(\n type: ModelProviderType,\n authMethod: string,\n secrets: Record<string, string>,\n): void {\n const secretsConfig = getSecretsForAuthMethod(type, authMethod);\n if (!secretsConfig) {\n throw new Error(`Invalid auth method \"${authMethod}\"`);\n }\n\n // Check required fields\n for (const [name, fieldConfig] of Object.entries(secretsConfig)) {\n if (fieldConfig.required && !secrets[name]) {\n const requiredNames = Object.entries(secretsConfig)\n .filter(([, fc]) => {\n return fc.required;\n })\n .map(([n]) => {\n return n;\n })\n .join(\", \");\n throw new Error(`Missing required secret: ${name}`, {\n cause: new Error(`Required secrets: ${requiredNames}`),\n });\n }\n }\n\n // Check for unknown fields\n for (const name of Object.keys(secrets)) {\n if (!(name in secretsConfig)) {\n const validNames = Object.keys(secretsConfig).join(\", \");\n throw new Error(`Unknown secret: ${name}`, {\n cause: new Error(`Valid secrets: ${validNames}`),\n });\n }\n }\n}\n\nexport function handleNonInteractiveMode(options: {\n type: string;\n secret: string[];\n authMethod?: string;\n model?: string;\n commandPrefix?: string;\n}): SetupInput {\n const type = validateProviderType(options.type);\n const cmdPrefix = options.commandPrefix ?? \"zero org model-provider setup\";\n\n let selectedModel: string | undefined;\n\n if (options.model) {\n selectedModel = validateModel(type, options.model);\n } else if (hasModelSelection(type)) {\n const defaultModel = getDefaultModel(type);\n // Empty defaultModel means \"auto\" mode - don't set selectedModel\n selectedModel = defaultModel || undefined;\n }\n\n // Handle multi-auth providers\n if (hasAuthMethods(type)) {\n // Determine auth method\n let authMethod: string;\n if (options.authMethod) {\n authMethod = validateAuthMethod(type, options.authMethod);\n } else {\n const defaultAuthMethod = getDefaultAuthMethod(type);\n const authMethods = getAuthMethodsForType(type);\n if (!defaultAuthMethod || !authMethods) {\n throw new Error(`Provider \"${type}\" requires --auth-method`);\n }\n // If there's only one auth method, use it; otherwise require explicit selection\n const authMethodNames = Object.keys(authMethods);\n if (authMethodNames.length === 1) {\n authMethod = authMethodNames[0]!;\n } else {\n const methods = authMethodNames.join(\", \");\n throw new Error(\n `--auth-method is required for \"${type}\" (multiple auth methods available)`,\n {\n cause: new Error(\n `Available: ${methods}. Example: ${cmdPrefix} --type ${type} --auth-method ${authMethodNames[0]} --secret KEY=VALUE`,\n ),\n },\n );\n }\n }\n\n // Parse and validate secrets\n const secrets = parseSecrets(type, authMethod, options.secret);\n validateSecrets(type, authMethod, secrets);\n\n return {\n type,\n authMethod,\n secrets,\n selectedModel,\n isInteractiveMode: false,\n };\n }\n\n // Single-secret provider (legacy)\n // Accept single value or KEY=VALUE format\n const secretArgs = options.secret;\n const firstArg = secretArgs[0];\n if (!firstArg) {\n throw new Error(\"Secret is required\");\n }\n\n // If KEY=VALUE format, extract the value\n let secret: string;\n if (firstArg.includes(\"=\")) {\n secret = firstArg.slice(firstArg.indexOf(\"=\") + 1);\n } else {\n secret = firstArg;\n }\n\n return {\n type,\n secret,\n selectedModel,\n isInteractiveMode: false,\n };\n}\n\nexport async function promptForModelSelection(\n type: ModelProviderType,\n): Promise<string | undefined> {\n if (!hasModelSelection(type)) {\n return undefined;\n }\n\n const models = getModels(type) ?? [];\n const defaultModel = getDefaultModel(type);\n const supportsCustomModel = allowsCustomModel(type);\n\n // Build choices\n const modelChoices: { title: string; value: string }[] = [];\n\n // Add auto option if defaultModel is empty string\n if (defaultModel === \"\") {\n modelChoices.push({ title: \"auto (Recommended)\", value: \"\" });\n }\n\n // Add predefined models\n for (const model of models) {\n modelChoices.push({\n title: model === defaultModel ? `${model} (Recommended)` : model,\n value: model,\n });\n }\n\n // Add custom model option if supported\n if (supportsCustomModel) {\n modelChoices.push({ title: \"Custom model ID\", value: \"__custom__\" });\n }\n\n const modelResponse = await prompts(\n {\n type: \"select\",\n name: \"model\",\n message: \"Select model:\",\n choices: modelChoices,\n },\n {\n onCancel: () => {\n return process.exit(0);\n },\n },\n );\n\n const selected = modelResponse.model as string;\n\n // Handle custom model input\n if (selected === \"__custom__\") {\n const placeholder = getCustomModelPlaceholder(type);\n if (placeholder) {\n console.log(chalk.dim(`Example: ${placeholder}`));\n }\n const customResponse = await prompts(\n {\n type: \"text\",\n name: \"customModel\",\n message: \"Enter model ID:\",\n validate: (value: string) => {\n return value.length > 0 || \"Model ID is required\";\n },\n },\n {\n onCancel: () => {\n return process.exit(0);\n },\n },\n );\n return customResponse.customModel as string;\n }\n\n // Return undefined for auto mode (empty string)\n return selected === \"\" ? undefined : selected;\n}\n\n/**\n * Prompt for auth method selection (only for multi-auth providers)\n */\nexport async function promptForAuthMethod(\n type: ModelProviderType,\n): Promise<string> {\n const authMethods = getAuthMethodsForType(type);\n const defaultAuthMethod = getDefaultAuthMethod(type);\n\n if (!authMethods) {\n return \"default\";\n }\n\n const choices = Object.entries(authMethods).map(([method, config]) => {\n return {\n title:\n method === defaultAuthMethod\n ? `${config.label} (Recommended)`\n : config.label,\n value: method,\n };\n });\n\n const response = await prompts(\n {\n type: \"select\",\n name: \"authMethod\",\n message: \"Select authentication method:\",\n choices,\n },\n {\n onCancel: () => {\n return process.exit(0);\n },\n },\n );\n\n return response.authMethod as string;\n}\n\n/**\n * Determine if a secret should be masked (password type)\n * Non-secret values like region should be visible\n */\nfunction isSensitiveSecret(name: string): boolean {\n const nonSecretPatterns = [\"REGION\", \"ENDPOINT\", \"URL\"];\n return !nonSecretPatterns.some((pattern) => {\n return name.toUpperCase().includes(pattern);\n });\n}\n\nexport async function promptForSecrets(\n type: ModelProviderType,\n authMethod: string,\n): Promise<Record<string, string>> {\n const secretsConfig = getSecretsForAuthMethod(type, authMethod);\n\n if (!secretsConfig) {\n throw new Error(`Invalid auth method \"${authMethod}\"`);\n }\n\n const secrets: Record<string, string> = {};\n\n for (const [name, fieldConfig] of Object.entries(secretsConfig)) {\n if (fieldConfig.helpText) {\n console.log(chalk.dim(fieldConfig.helpText));\n }\n\n const isSensitive = isSensitiveSecret(name);\n const placeholder =\n \"placeholder\" in fieldConfig ? (fieldConfig.placeholder as string) : \"\";\n\n if (fieldConfig.required) {\n const response = await prompts(\n {\n type: isSensitive ? \"password\" : \"text\",\n name: \"value\",\n message: `${fieldConfig.label}:`,\n initial: placeholder ? \"\" : undefined,\n validate: (value: string) => {\n return value.length > 0 || `${fieldConfig.label} is required`;\n },\n },\n {\n onCancel: () => {\n return process.exit(0);\n },\n },\n );\n secrets[name] = response.value as string;\n } else {\n // Optional field\n const response = await prompts(\n {\n type: isSensitive ? \"password\" : \"text\",\n name: \"value\",\n message: `${fieldConfig.label} (optional):`,\n },\n {\n onCancel: () => {\n return process.exit(0);\n },\n },\n );\n const value = response.value as string;\n if (value && value.trim()) {\n secrets[name] = value.trim();\n }\n }\n }\n\n return secrets;\n}\n\n/**\n * Collect secret values from repeatable --secret option\n */\nexport function collectSecrets(value: string, previous: string[]): string[] {\n return previous.concat([value]);\n}\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { deleteZeroOrgModelProvider } from \"../../../../lib/api\";\nimport { withErrorHandler } from \"../../../../lib/command\";\nimport { MODEL_PROVIDER_TYPES, type ModelProviderType } from \"@vm0/core\";\n\nexport const removeCommand = new Command()\n .name(\"remove\")\n .description(\"Remove an org-level model provider\")\n .argument(\"<type>\", \"Model provider type to remove\")\n .action(\n withErrorHandler(async (type: string) => {\n if (!Object.keys(MODEL_PROVIDER_TYPES).includes(type)) {\n const validTypes = Object.keys(MODEL_PROVIDER_TYPES).join(\", \");\n throw new Error(`Invalid type \"${type}\"`, {\n cause: new Error(`Valid types: ${validTypes}`),\n });\n }\n\n await deleteZeroOrgModelProvider(type as ModelProviderType);\n console.log(chalk.green(`✓ Org model provider \"${type}\" removed`));\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { setZeroOrgModelProviderDefault } from \"../../../../lib/api\";\nimport { withErrorHandler } from \"../../../../lib/command\";\nimport { MODEL_PROVIDER_TYPES, type ModelProviderType } from \"@vm0/core\";\n\nexport const setDefaultCommand = new Command()\n .name(\"set-default\")\n .description(\"Set an org-level model provider as default for its framework\")\n .argument(\"<type>\", \"Model provider type to set as default\")\n .action(\n withErrorHandler(async (type: string) => {\n if (!Object.keys(MODEL_PROVIDER_TYPES).includes(type)) {\n const validTypes = Object.keys(MODEL_PROVIDER_TYPES).join(\", \");\n throw new Error(`Invalid type \"${type}\"`, {\n cause: new Error(`Valid types: ${validTypes}`),\n });\n }\n\n const provider = await setZeroOrgModelProviderDefault(\n type as ModelProviderType,\n );\n console.log(\n chalk.green(\n `✓ Default for ${provider.framework} set to \"${provider.type}\"`,\n ),\n );\n }),\n );\n","import { Command } from \"commander\";\nimport { createCommand } from \"./create\";\nimport { editCommand } from \"./edit\";\nimport { viewCommand } from \"./view\";\nimport { listCommand } from \"./list\";\nimport { deleteCommand } from \"./delete\";\n\nexport const zeroAgentCommand = new Command(\"agent\")\n .description(\"View or manage zero agents\")\n .addCommand(createCommand)\n .addCommand(editCommand)\n .addCommand(viewCommand)\n .addCommand(listCommand)\n .addCommand(deleteCommand)\n .addHelpText(\n \"after\",\n `\nExamples:\n Your agent ID is in $ZERO_AGENT_ID (or run: zero whoami)\n View your config: zero agent view $ZERO_AGENT_ID --instructions\n Update description: zero agent edit $ZERO_AGENT_ID --description \"new role\"\n Update tone: zero agent edit $ZERO_AGENT_ID --sound friendly\n Update instructions: zero agent edit $ZERO_AGENT_ID --instructions-file <path>\n Add a custom skill: zero agent edit $ZERO_AGENT_ID --add-skill my-skill\n Remove a skill: zero agent edit $ZERO_AGENT_ID --remove-skill my-skill\n\nNotes:\n Manage custom skills with 'zero skill --help'`,\n );\n","import { Command } from \"commander\";\nimport { readFileSync } from \"node:fs\";\nimport chalk from \"chalk\";\nimport { zeroAgentCustomSkillNameSchema } from \"@vm0/core\";\nimport { createZeroAgent, updateZeroAgentInstructions } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const createCommand = new Command()\n .name(\"create\")\n .description(\"Create a new zero agent\")\n .option(\n \"--skills <items>\",\n \"Comma-separated custom skill names to attach (e.g. my-skill,other-skill)\",\n )\n .option(\"--display-name <name>\", \"Agent display name\")\n .option(\"--description <text>\", \"Agent description\")\n .option(\n \"--sound <tone>\",\n \"Agent tone: professional, friendly, direct, supportive\",\n )\n .option(\"--instructions-file <path>\", \"Path to instructions file\")\n .addHelpText(\n \"after\",\n `\nExamples:\n Minimal: zero agent create --display-name \"My Agent\"\n With skills: zero agent create --skills my-skill,other-skill --display-name \"My Agent\"\n With instructions: zero agent create --display-name \"My Agent\" --instructions-file ./instructions.md`,\n )\n .action(\n withErrorHandler(\n async (options: {\n skills?: string;\n displayName?: string;\n description?: string;\n sound?: string;\n instructionsFile?: string;\n }) => {\n const customSkills = options.skills\n ? options.skills.split(\",\").map((s) => {\n return s.trim();\n })\n : undefined;\n\n if (customSkills) {\n for (const name of customSkills) {\n const result = zeroAgentCustomSkillNameSchema.safeParse(name);\n if (!result.success) {\n throw new Error(\n `Invalid skill name \"${name}\": must be 2-64 characters, lowercase alphanumeric and hyphens only (e.g. my-skill)`,\n );\n }\n }\n }\n\n const agent = await createZeroAgent({\n displayName: options.displayName,\n description: options.description,\n sound: options.sound,\n customSkills,\n });\n\n if (options.instructionsFile) {\n const content = readFileSync(options.instructionsFile, \"utf-8\");\n await updateZeroAgentInstructions(agent.agentId, content);\n }\n\n console.log(chalk.green(`✓ Agent \"${agent.agentId}\" created`));\n console.log(` Agent ID: ${agent.agentId}`);\n if (customSkills?.length) {\n console.log(` Skills: ${customSkills.join(\", \")}`);\n }\n if (agent.displayName) {\n console.log(` Display Name: ${agent.displayName}`);\n }\n },\n ),\n );\n","import { Command } from \"commander\";\nimport { readFileSync } from \"node:fs\";\nimport chalk from \"chalk\";\nimport { zeroAgentCustomSkillNameSchema } from \"@vm0/core\";\nimport {\n getZeroAgent,\n updateZeroAgent,\n updateZeroAgentInstructions,\n} from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nfunction validateSkillName(name: string): void {\n const result = zeroAgentCustomSkillNameSchema.safeParse(name);\n if (!result.success) {\n throw new Error(\n `Invalid skill name \"${name}\": must be 2-64 characters, lowercase alphanumeric and hyphens only (e.g. my-skill)`,\n );\n }\n}\n\nfunction resolveCustomSkills(\n options: { skills?: string; addSkill?: string; removeSkill?: string },\n existing: string[],\n): string[] | undefined {\n if (options.skills && (options.addSkill || options.removeSkill)) {\n throw new Error(\"Cannot use --skills with --add-skill or --remove-skill\");\n }\n\n if (options.skills) {\n const names = options.skills.split(\",\").map((s) => {\n return s.trim();\n });\n for (const name of names) {\n validateSkillName(name);\n }\n return names;\n }\n\n if (options.addSkill) {\n validateSkillName(options.addSkill);\n if (existing.includes(options.addSkill)) {\n throw new Error(\n `Skill \"${options.addSkill}\" is already attached to this agent`,\n );\n }\n return [...existing, options.addSkill];\n }\n\n if (options.removeSkill) {\n if (!existing.includes(options.removeSkill)) {\n throw new Error(\n `Skill \"${options.removeSkill}\" is not attached to this agent`,\n );\n }\n return existing.filter((s) => {\n return s !== options.removeSkill;\n });\n }\n\n return undefined;\n}\n\nexport const editCommand = new Command()\n .name(\"edit\")\n .description(\"Edit a zero agent\")\n .argument(\"<agent-id>\", \"Agent ID\")\n .option(\"--display-name <name>\", \"New display name\")\n .option(\"--description <text>\", \"New description\")\n .option(\n \"--sound <tone>\",\n \"New tone: professional, friendly, direct, supportive\",\n )\n .option(\n \"--skills <items>\",\n \"Comma-separated custom skill names to attach (replaces existing)\",\n )\n .option(\"--add-skill <name>\", \"Add a custom skill to the agent\")\n .option(\"--remove-skill <name>\", \"Remove a custom skill from the agent\")\n .option(\"--instructions-file <path>\", \"Path to new instructions file\")\n .addHelpText(\n \"after\",\n `\nExamples:\n Update description: zero agent edit <agent-id> --description \"new role\"\n Update tone: zero agent edit <agent-id> --sound friendly\n Replace all skills: zero agent edit <agent-id> --skills my-skill,other-skill\n Add a skill: zero agent edit <agent-id> --add-skill my-skill\n Remove a skill: zero agent edit <agent-id> --remove-skill my-skill\n Update instructions: zero agent edit <agent-id> --instructions-file ./instructions.md\n Update yourself: zero agent edit $ZERO_AGENT_ID --description \"new role\"\n\nNotes:\n - At least one option is required\n - Unspecified fields are preserved (not cleared)\n - --skills replaces the entire skill list; --add-skill/--remove-skill modify incrementally\n - --skills cannot be combined with --add-skill or --remove-skill\n - To create or edit skill content, use: zero skill --help`,\n )\n .action(\n withErrorHandler(\n async (\n agentId: string,\n options: {\n displayName?: string;\n description?: string;\n sound?: string;\n skills?: string;\n addSkill?: string;\n removeSkill?: string;\n instructionsFile?: string;\n },\n ) => {\n const hasAgentUpdate =\n options.displayName !== undefined ||\n options.description !== undefined ||\n options.sound !== undefined ||\n options.skills !== undefined ||\n options.addSkill !== undefined ||\n options.removeSkill !== undefined;\n\n if (!hasAgentUpdate && !options.instructionsFile) {\n throw new Error(\n \"At least one option is required (--display-name, --description, --sound, --skills, --add-skill, --remove-skill, --instructions-file)\",\n );\n }\n\n if (hasAgentUpdate) {\n const current = await getZeroAgent(agentId);\n const customSkills = resolveCustomSkills(\n options,\n current.customSkills ?? [],\n );\n\n await updateZeroAgent(agentId, {\n displayName:\n options.displayName !== undefined\n ? options.displayName\n : (current.displayName ?? undefined),\n description:\n options.description !== undefined\n ? options.description\n : (current.description ?? undefined),\n sound:\n options.sound !== undefined\n ? options.sound\n : (current.sound ?? undefined),\n customSkills,\n });\n }\n\n if (options.instructionsFile) {\n const content = readFileSync(options.instructionsFile, \"utf-8\");\n await updateZeroAgentInstructions(agentId, content);\n }\n\n console.log(chalk.green(`✓ Agent \"${agentId}\" updated`));\n },\n ),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport {\n getZeroAgent,\n getZeroAgentInstructions,\n getZeroAgentUserConnectors,\n listZeroConnectors,\n} from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport {\n isFirewallConnectorType,\n getConnectorFirewall,\n resolveFirewallPolicies,\n type FirewallPolicies,\n type FirewallPolicyValue,\n type ConnectorResponse,\n} from \"@vm0/core\";\nimport { policyIcon } from \"../../../lib/utils/format-utils\";\n\ninterface ConnectorPermissionInfo {\n type: string;\n hasPermissions: boolean;\n permissions: Array<{ name: string; description?: string }>;\n policies: Record<string, FirewallPolicyValue> | null;\n unknownPolicy: FirewallPolicyValue;\n allowed: number;\n total: number;\n}\n\nfunction getConnectorPermissionInfo(\n type: string,\n resolvedPolicies: FirewallPolicies | null,\n): ConnectorPermissionInfo {\n if (!isFirewallConnectorType(type)) {\n return {\n type,\n hasPermissions: false,\n permissions: [],\n policies: null,\n unknownPolicy: \"allow\",\n allowed: 0,\n total: 0,\n };\n }\n\n const refPolicy = resolvedPolicies?.[type];\n const policies =\n refPolicy && Object.keys(refPolicy.policies).length > 0\n ? refPolicy.policies\n : null;\n const config = getConnectorFirewall(type);\n const permissions = config.apis.flatMap((a) => {\n return a.permissions ?? [];\n });\n const total = permissions.length;\n const allowed = policies\n ? permissions.filter((p) => {\n return policies[p.name] === \"allow\";\n }).length\n : 0;\n\n const unknownPolicy = refPolicy?.unknownPolicy ?? \"allow\";\n return {\n type,\n hasPermissions: true,\n permissions,\n policies,\n unknownPolicy,\n allowed,\n total,\n };\n}\n\nfunction printDetailedPermissions(info: ConnectorPermissionInfo): void {\n if (!info.policies) {\n const icon = policyIcon(info.unknownPolicy);\n console.log(` ${icon} unknown endpoints`);\n return;\n }\n\n const nameWidth = Math.max(\n \"unknown endpoints\".length,\n ...info.permissions.map((p) => {\n return p.name.length;\n }),\n );\n\n for (const perm of info.permissions) {\n const policy = info.policies[perm.name] ?? \"deny\";\n const desc = perm.description ?? \"\";\n console.log(\n ` ${policyIcon(policy)} ${perm.name.padEnd(nameWidth)} ${desc}`,\n );\n }\n\n const unknownIcon = policyIcon(info.unknownPolicy);\n console.log(\n ` ${unknownIcon} ${\"unknown endpoints\".padEnd(nameWidth)} Endpoints not matching any rule`,\n );\n}\n\nfunction formatConnectorIdentity(\n connector: ConnectorResponse | undefined,\n): string {\n if (!connector) return \"\";\n if (connector.externalUsername) return `@${connector.externalUsername}`;\n if (connector.externalEmail) return connector.externalEmail;\n return \"\";\n}\n\nfunction formatConnectorSummary(\n info: ConnectorPermissionInfo,\n identity?: ConnectorResponse,\n): string {\n const id = formatConnectorIdentity(identity);\n const idStr = id ? ` ${id}` : \"\";\n if (!info.hasPermissions) return `${info.type}${idStr}`;\n if (!info.policies) return `${info.type}${idStr} (full access)`;\n return `${info.type}${idStr} (${info.allowed}/${info.total} allowed)`;\n}\n\nfunction formatDetailIdentity(\n connector: ConnectorResponse | undefined,\n): string {\n if (!connector) return \"\";\n let identity = \"\";\n if (connector.externalUsername && connector.externalEmail) {\n identity = `@${connector.externalUsername} (${connector.externalEmail})`;\n } else if (connector.externalUsername) {\n identity = `@${connector.externalUsername}`;\n } else if (connector.externalEmail) {\n identity = connector.externalEmail;\n }\n if (!identity) return \"\";\n if (connector.needsReconnect) {\n identity += ` ${chalk.yellow(\"(needs reconnect)\")}`;\n }\n return identity;\n}\n\nexport const viewCommand = new Command()\n .name(\"view\")\n .description(\"View a zero agent\")\n .argument(\"<agent-id>\", \"Agent ID\")\n .option(\"--instructions\", \"Also show instructions content\")\n .option(\"--permissions\", \"Show full permission details for each connector\")\n .addHelpText(\n \"after\",\n `\nExamples:\n View basic info: zero agent view <agent-id>\n Include instructions: zero agent view <agent-id> --instructions\n Show permissions: zero agent view <agent-id> --permissions\n View yourself: zero agent view $ZERO_AGENT_ID --instructions`,\n )\n .action(\n withErrorHandler(\n async (\n agentId: string,\n options: { instructions?: boolean; permissions?: boolean },\n ) => {\n const [agent, connectorTypes, connectorIdentities] = await Promise.all([\n getZeroAgent(agentId),\n getZeroAgentUserConnectors(agentId),\n listZeroConnectors().catch(() => {\n return { connectors: [] as ConnectorResponse[] };\n }),\n ]);\n\n const identityMap = new Map<string, ConnectorResponse>(\n connectorIdentities.connectors.map((c) => {\n return [c.type, c];\n }),\n );\n\n console.log(chalk.bold(agent.agentId));\n if (agent.displayName) console.log(chalk.dim(agent.displayName));\n console.log();\n console.log(`Agent ID: ${agent.agentId}`);\n\n const resolvedPolicies = resolveFirewallPolicies(\n agent.permissionPolicies,\n connectorTypes,\n );\n\n const connectorInfos = connectorTypes.map((type) => {\n return getConnectorPermissionInfo(type, resolvedPolicies);\n });\n\n if (connectorInfos.length > 0) {\n const summaries = connectorInfos.map((info) => {\n return formatConnectorSummary(info, identityMap.get(info.type));\n });\n console.log(`Connectors: ${summaries.join(\", \")}`);\n }\n\n if (agent.customSkills?.length > 0) {\n console.log(`Skills: ${agent.customSkills.join(\", \")}`);\n }\n if (agent.description)\n console.log(`Description: ${agent.description}`);\n if (agent.sound) console.log(`Sound: ${agent.sound}`);\n\n if (options.permissions && connectorInfos.length > 0) {\n console.log();\n console.log(chalk.bold(\"Connectors:\"));\n for (const info of connectorInfos) {\n const identity = formatDetailIdentity(identityMap.get(info.type));\n console.log(` ${info.type.padEnd(14)}${identity}`);\n if (info.hasPermissions) {\n printDetailedPermissions(info);\n }\n }\n }\n\n if (options.instructions) {\n console.log();\n const result = await getZeroAgentInstructions(agentId);\n if (result.content) {\n console.log(chalk.dim(\"── Instructions ──\"));\n console.log(result.content);\n } else {\n console.log(chalk.dim(\"No instructions set\"));\n }\n }\n },\n ),\n );\n","import chalk from \"chalk\";\nimport type { FirewallPolicyValue } from \"@vm0/core\";\n\nexport function policyIcon(policy: FirewallPolicyValue): string {\n if (policy === \"allow\") return chalk.green(\"✓\");\n if (policy === \"ask\") return chalk.yellow(\"?\");\n return chalk.dim(\"✗\");\n}\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { listZeroAgents } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const listCommand = new Command()\n .name(\"list\")\n .alias(\"ls\")\n .description(\"List all zero agents\")\n .addHelpText(\n \"after\",\n `\nExamples:\n zero agent list\n\nNotes:\n - Use this to discover teammate agent IDs before delegating with \"zero run\"`,\n )\n .action(\n withErrorHandler(async () => {\n const agents = await listZeroAgents();\n\n if (agents.length === 0) {\n console.log(chalk.dim(\"No zero agents found\"));\n console.log(\n chalk.dim(\n ' Create one with: zero agent create --display-name \"My Agent\"',\n ),\n );\n return;\n }\n\n const idWidth = Math.max(\n 8,\n ...agents.map((a) => {\n return a.agentId.length;\n }),\n );\n const displayWidth = Math.max(\n 12,\n ...agents.map((a) => {\n return (a.displayName ?? \"\").length;\n }),\n );\n\n const header = [\n \"AGENT ID\".padEnd(idWidth),\n \"DISPLAY NAME\".padEnd(displayWidth),\n ].join(\" \");\n console.log(chalk.dim(header));\n\n for (const agent of agents) {\n const row = [\n agent.agentId.padEnd(idWidth),\n (agent.displayName ?? \"-\").padEnd(displayWidth),\n ].join(\" \");\n console.log(row);\n }\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { getZeroAgent, deleteZeroAgent } from \"../../../lib/api\";\nimport { isInteractive, promptConfirm } from \"../../../lib/utils/prompt-utils\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const deleteCommand = new Command()\n .name(\"delete\")\n .alias(\"rm\")\n .description(\"Delete a zero agent\")\n .argument(\"<agent-id>\", \"Agent ID\")\n .option(\"-y, --yes\", \"Skip confirmation prompt\")\n .addHelpText(\n \"after\",\n `\nExamples:\n zero agent delete <agent-id>\n zero agent delete <agent-id> -y\n\nNotes:\n - Use -y to skip confirmation in non-interactive mode`,\n )\n .action(\n withErrorHandler(async (agentId: string, options: { yes?: boolean }) => {\n await getZeroAgent(agentId);\n\n if (!options.yes) {\n if (!isInteractive()) {\n throw new Error(\"--yes flag is required in non-interactive mode\");\n }\n const confirmed = await promptConfirm(\n `Delete zero agent '${agentId}'?`,\n false,\n );\n if (!confirmed) {\n console.log(chalk.dim(\"Cancelled\"));\n return;\n }\n }\n\n await deleteZeroAgent(agentId);\n console.log(chalk.green(`✓ Agent \"${agentId}\" deleted`));\n }),\n );\n","import { Command } from \"commander\";\nimport { connectCommand } from \"./connect\";\nimport { listCommand } from \"./list\";\nimport { statusCommand } from \"./status\";\nimport { disconnectCommand } from \"./disconnect\";\n\nexport const zeroConnectorCommand = new Command()\n .name(\"connector\")\n .description(\"Check or connect third-party services (GitHub, Slack, etc.)\")\n .addCommand(listCommand)\n .addCommand(statusCommand)\n .addCommand(connectCommand)\n .addCommand(disconnectCommand);\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport {\n CONNECTOR_TYPES,\n connectorTypeSchema,\n isFeatureEnabled,\n type ConnectorType,\n} from \"@vm0/core\";\nimport {\n createZeroConnectorSession,\n getZeroConnectorSession,\n createZeroComputerConnector,\n deleteZeroComputerConnector,\n setZeroSecret,\n} from \"../../../lib/api\";\nimport { getBaseUrl } from \"../../../lib/api/core/client-factory\";\nimport { getActiveOrg } from \"../../../lib/api/config\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport {\n checkComputerDependencies,\n startComputerServices,\n} from \"../../../lib/computer/start-services\";\nimport { promptSelect, promptPassword } from \"../../../lib/utils/prompt-utils\";\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => {\n return setTimeout(resolve, ms);\n });\n}\n\n/**\n * Render markdown help text for terminal display\n */\nfunction renderHelpText(text: string): string {\n return text\n .replace(/\\[([^\\]]+)\\]\\(([^)]+)\\)/g, (_m, label: string, url: string) => {\n return `${label} (${chalk.cyan(url)})`;\n })\n .replace(/\\*\\*([^*]+)\\*\\*/g, (_m, content: string) => {\n return chalk.bold(content);\n })\n .replace(/^> (.+)$/gm, (_m, content: string) => {\n return chalk.yellow(` ${content}`);\n });\n}\n\n/**\n * Handle the API token connection flow\n */\nasync function connectViaApiToken(\n connectorType: ConnectorType,\n tokenValue?: string,\n): Promise<void> {\n const config = CONNECTOR_TYPES[connectorType];\n const apiTokenConfig = config.authMethods[\"api-token\"];\n if (!apiTokenConfig) {\n throw new Error(\n `${config.label} does not support API token authentication`,\n );\n }\n\n const secretEntries = Object.entries(apiTokenConfig.secrets);\n const inputSecrets: Record<string, string> = {};\n\n if (tokenValue && secretEntries.length === 1) {\n // Direct token via --token flag\n const [secretName] = secretEntries[0]!;\n inputSecrets[secretName] = tokenValue;\n } else {\n // Interactive: show instructions, then prompt for each secret\n if (apiTokenConfig.helpText) {\n console.log();\n console.log(renderHelpText(apiTokenConfig.helpText));\n console.log();\n }\n\n for (const [secretName, secretConfig] of secretEntries) {\n if (!secretConfig.required) continue;\n\n const value = await promptPassword(\n `${secretConfig.label}${secretConfig.placeholder ? chalk.dim(` (${secretConfig.placeholder})`) : \"\"}:`,\n );\n\n if (!value) {\n console.log(chalk.dim(\"Cancelled\"));\n return;\n }\n\n inputSecrets[secretName] = value;\n }\n }\n\n for (const [name, value] of Object.entries(inputSecrets)) {\n await setZeroSecret({\n name,\n value,\n description: `API token for ${config.label} connector`,\n });\n }\n console.log(chalk.green(`\\n✓ Connector \"${connectorType}\" connected`));\n}\n\n/**\n * Handle computer connector flow\n */\nasync function connectComputer(): Promise<void> {\n await checkComputerDependencies();\n console.log(chalk.cyan(\"Setting up computer connector...\"));\n\n const credentials = await createZeroComputerConnector();\n await startComputerServices(credentials);\n\n console.log(chalk.cyan(\"Disconnecting computer connector...\"));\n await deleteZeroComputerConnector();\n console.log(chalk.green(\"✓ Disconnected computer\"));\n}\n\n/**\n * Resolve which auth method to use for a connector\n */\nasync function resolveAuthMethod(\n connectorType: ConnectorType,\n tokenFlag?: string,\n): Promise<\"oauth\" | \"api-token\" | null> {\n const config = CONNECTOR_TYPES[connectorType];\n const oauthFlag = CONNECTOR_TYPES[connectorType].featureFlag;\n const orgId = await getActiveOrg();\n const oauthAvailable =\n \"oauth\" in config.authMethods &&\n (!oauthFlag || isFeatureEnabled(oauthFlag, { orgId }));\n const apiTokenAvailable = \"api-token\" in config.authMethods;\n\n if (tokenFlag) {\n if (!apiTokenAvailable) {\n throw new Error(\n `${config.label} does not support API token authentication`,\n );\n }\n return \"api-token\";\n }\n\n if (oauthAvailable && apiTokenAvailable) {\n const selected = await promptSelect<\"oauth\" | \"api-token\">(\n `How would you like to connect ${config.label}?`,\n [\n { title: \"OAuth (Sign in with browser)\", value: \"oauth\" },\n {\n title: `API Token (${config.authMethods[\"api-token\"]!.label})`,\n value: \"api-token\",\n },\n ],\n );\n if (!selected) {\n console.log(chalk.dim(\"Cancelled\"));\n return null;\n }\n return selected;\n }\n\n if (apiTokenAvailable) return \"api-token\";\n if (oauthAvailable) return \"oauth\";\n\n throw new Error(\n `${config.label} has no available auth methods. OAuth may not be enabled yet.`,\n );\n}\n\n/**\n * Handle OAuth device flow\n */\nasync function connectViaOAuth(connectorType: ConnectorType): Promise<void> {\n console.log(`Connecting ${chalk.cyan(connectorType)}...`);\n\n const session = await createZeroConnectorSession(connectorType);\n const apiUrl = await getBaseUrl();\n const verificationUrl = `${apiUrl}${session.verificationUrl}`;\n\n console.log(chalk.green(\"\\nSession created\"));\n console.log(chalk.cyan(`\\nTo connect, visit: ${verificationUrl}`));\n console.log(\n `\\nThe session expires in ${Math.floor(session.expiresIn / 60)} minutes.`,\n );\n console.log(\"\\nWaiting for authorization...\");\n\n const startTime = Date.now();\n const maxWaitTime = session.expiresIn * 1000;\n const pollInterval = (session.interval || 5) * 1000;\n let isFirstPoll = true;\n\n while (Date.now() - startTime < maxWaitTime) {\n if (!isFirstPoll) {\n await delay(pollInterval);\n }\n isFirstPoll = false;\n\n const status = await getZeroConnectorSession(connectorType, session.id);\n\n switch (status.status) {\n case \"complete\":\n console.log(\n chalk.green(`\\n\\n✓ Connector \"${connectorType}\" connected`),\n );\n return;\n case \"expired\":\n throw new Error(\"Session expired, please try again\");\n case \"error\":\n throw new Error(\n `Connection failed: ${status.errorMessage || \"Unknown error\"}`,\n );\n case \"pending\":\n process.stdout.write(chalk.dim(\".\"));\n break;\n }\n }\n\n throw new Error(\"Session timed out, please try again\");\n}\n\nexport const connectCommand = new Command()\n .name(\"connect\")\n .description(\"Connect a third-party service (e.g., GitHub)\")\n .argument(\"<type>\", \"Connector type (e.g., github)\")\n .option(\"--token <value>\", \"API token value (skip interactive prompt)\")\n .action(\n withErrorHandler(async (type: string, options: { token?: string }) => {\n const parseResult = connectorTypeSchema.safeParse(type);\n if (!parseResult.success) {\n const available = Object.keys(CONNECTOR_TYPES).join(\", \");\n throw new Error(`Unknown connector type: ${type}`, {\n cause: new Error(`Available connectors: ${available}`),\n });\n }\n\n const connectorType = parseResult.data;\n\n if (connectorType === \"computer\") {\n await connectComputer();\n return;\n }\n\n const authMethod = await resolveAuthMethod(connectorType, options.token);\n if (!authMethod) return;\n\n if (authMethod === \"api-token\") {\n await connectViaApiToken(connectorType, options.token);\n return;\n }\n\n await connectViaOAuth(connectorType);\n }),\n );\n","import { spawn } from \"child_process\";\nimport { access, constants } from \"fs/promises\";\nimport { createServer } from \"net\";\nimport type { AddressInfo } from \"net\";\nimport { homedir } from \"os\";\nimport { join } from \"path\";\nimport chalk from \"chalk\";\nimport { startNgrokTunnels, stopNgrokTunnels } from \"./ngrok\";\n\ninterface ComputerConnectorCredentials {\n ngrokToken: string;\n bridgeToken: string;\n endpointPrefix: string;\n domain: string;\n}\n\nconst CHROME_CANDIDATES = [\n // macOS absolute paths\n \"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome\",\n \"/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary\",\n \"/Applications/Chromium.app/Contents/MacOS/Chromium\",\n // Linux / PATH-based\n \"google-chrome\",\n \"google-chrome-stable\",\n \"chromium-browser\",\n \"chromium\",\n \"chrome\",\n];\n\nasync function getRandomPort(): Promise<number> {\n return new Promise((resolve, reject) => {\n const server = createServer();\n server.listen(0, \"127.0.0.1\", () => {\n const { port } = server.address() as AddressInfo;\n server.close(() => {\n return resolve(port);\n });\n });\n server.on(\"error\", reject);\n });\n}\n\nasync function findBinary(...candidates: string[]): Promise<string | null> {\n for (const candidate of candidates) {\n if (candidate.startsWith(\"/\")) {\n try {\n await access(candidate, constants.X_OK);\n return candidate;\n } catch {\n // not found, try next\n }\n } else {\n const found = await new Promise<boolean>((resolve) => {\n const child = spawn(\"which\", [candidate]);\n child.on(\"close\", (code) => {\n return resolve(code === 0);\n });\n });\n if (found) return candidate;\n }\n }\n return null;\n}\n\nexport async function checkComputerDependencies(): Promise<void> {\n const wsgidavBinary = await findBinary(\"wsgidav\");\n if (!wsgidavBinary) {\n throw new Error(\n \"wsgidav not found\\n\\nInstall with: pip install wsgidav[cheroot]\",\n );\n }\n\n const chromeBinary = await findBinary(...CHROME_CANDIDATES);\n if (!chromeBinary) {\n throw new Error(\"Chrome not found\\n\\nInstall Google Chrome or Chromium\");\n }\n}\n\nexport async function startComputerServices(\n credentials: ComputerConnectorCredentials,\n): Promise<void> {\n console.log(chalk.cyan(\"Starting computer connector services...\"));\n\n const wsgidavBinary = await findBinary(\"wsgidav\");\n if (!wsgidavBinary) {\n throw new Error(\n \"wsgidav not found\\n\\nInstall with: pip install wsgidav[cheroot]\",\n );\n }\n\n const chromeBinary = await findBinary(...CHROME_CANDIDATES);\n if (!chromeBinary) {\n throw new Error(\"Chrome not found\\n\\nInstall Google Chrome or Chromium\");\n }\n\n const webdavPort = await getRandomPort();\n const cdpPort = await getRandomPort();\n\n const downloadsPath = join(homedir(), \"Downloads\");\n const wsgidav = spawn(\n wsgidavBinary,\n [\n \"--host=127.0.0.1\",\n `--port=${webdavPort}`,\n `--root=${downloadsPath}`,\n \"--auth=anonymous\",\n \"--no-config\",\n ],\n { stdio: [\"ignore\", \"pipe\", \"pipe\"] },\n );\n wsgidav.stdout?.on(\"data\", (data: Buffer) => {\n return process.stdout.write(data);\n });\n wsgidav.stderr?.on(\"data\", (data: Buffer) => {\n return process.stderr.write(data);\n });\n console.log(chalk.green(\"✓ WebDAV server started\"));\n\n const chrome = spawn(\n chromeBinary,\n [\n `--remote-debugging-port=${cdpPort}`,\n \"--remote-debugging-address=127.0.0.1\",\n \"--headless=new\",\n \"--no-sandbox\",\n \"--disable-gpu\",\n ],\n { stdio: [\"ignore\", \"pipe\", \"pipe\"] },\n );\n chrome.stdout?.on(\"data\", (data: Buffer) => {\n return process.stdout.write(data);\n });\n chrome.stderr?.on(\"data\", (data: Buffer) => {\n return process.stderr.write(data);\n });\n console.log(chalk.green(\"✓ Chrome started\"));\n\n try {\n await startNgrokTunnels(\n credentials.ngrokToken,\n credentials.endpointPrefix,\n webdavPort,\n cdpPort,\n );\n console.log(\n chalk.green(\n `✓ ngrok tunnels: webdav.${credentials.domain}, chrome.${credentials.domain}`,\n ),\n );\n\n console.log();\n console.log(chalk.green(\"✓ Computer connector active\"));\n console.log(` WebDAV: ~/Downloads → webdav.${credentials.domain}`);\n console.log(\n ` Chrome CDP: port ${cdpPort} → chrome.${credentials.domain}`,\n );\n console.log();\n console.log(chalk.dim(\"Press ^C twice to disconnect\"));\n console.log();\n\n let sigintCount = 0;\n await new Promise<void>((resolve) => {\n const keepAlive = setInterval(() => {}, 60_000);\n const done = () => {\n clearInterval(keepAlive);\n process.removeListener(\"SIGINT\", onSigint);\n resolve();\n };\n const onSigint = () => {\n sigintCount++;\n if (sigintCount === 1) {\n console.log(chalk.dim(\"\\nPress ^C again to disconnect and exit...\"));\n } else {\n done();\n }\n };\n process.on(\"SIGINT\", onSigint);\n process.once(\"SIGTERM\", done);\n });\n } finally {\n console.log();\n console.log(chalk.cyan(\"Stopping services...\"));\n wsgidav.kill(\"SIGTERM\");\n chrome.kill(\"SIGTERM\");\n await stopNgrokTunnels();\n console.log(chalk.green(\"✓ Services stopped\"));\n }\n}\n","// Dynamic import is intentional: @ngrok/ngrok contains native binaries that\n// crash on systems with GLIBC version mismatches. Lazy-loading ensures the\n// crash only affects the command that needs ngrok, not the entire CLI.\n// See: https://github.com/vm0-ai/vm0/issues/6825\nasync function loadNgrok(): Promise<typeof import(\"@ngrok/ngrok\")> {\n try {\n const mod = await import(\"@ngrok/ngrok\");\n return mod.default;\n } catch (cause) {\n throw new Error(\n \"Failed to load ngrok tunnel module. \" +\n \"This may be caused by a system library (GLIBC) incompatibility. \" +\n \"See: https://github.com/vm0-ai/vm0/issues/6825\",\n { cause },\n );\n }\n}\n\nexport async function startNgrokTunnels(\n ngrokToken: string,\n endpointPrefix: string,\n webdavPort: number,\n cdpPort: number,\n): Promise<void> {\n const ngrok = await loadNgrok();\n\n await ngrok.forward({\n addr: `localhost:${webdavPort}`,\n authtoken: ngrokToken,\n domain: `webdav.${endpointPrefix}.internal`,\n });\n\n await ngrok.forward({\n addr: `localhost:${cdpPort}`,\n authtoken: ngrokToken,\n domain: `chrome.${endpointPrefix}.internal`,\n });\n}\n\nexport async function stopNgrokTunnels(): Promise<void> {\n const ngrok = await loadNgrok();\n await ngrok.kill();\n}\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport {\n CONNECTOR_TYPES,\n hasRequiredScopes,\n isFeatureEnabled,\n type ConnectorType,\n} from \"@vm0/core\";\nimport { listZeroConnectors } from \"../../../lib/api\";\nimport { getActiveOrg } from \"../../../lib/api/config\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const listCommand = new Command()\n .name(\"list\")\n .alias(\"ls\")\n .description(\"List all connectors and their status\")\n .action(\n withErrorHandler(async () => {\n const result = await listZeroConnectors();\n const connectedMap = new Map(\n result.connectors.map((c) => {\n return [c.type, c];\n }),\n );\n const orgId = await getActiveOrg();\n\n const allTypesRaw = Object.keys(CONNECTOR_TYPES) as ConnectorType[];\n const allTypes: ConnectorType[] = [];\n for (const type of allTypesRaw) {\n const flag = CONNECTOR_TYPES[type].featureFlag;\n const hasApiToken = \"api-token\" in CONNECTOR_TYPES[type].authMethods;\n if (flag && !isFeatureEnabled(flag, { orgId }) && !hasApiToken) {\n continue;\n }\n allTypes.push(type);\n }\n\n // Calculate column widths\n const typeWidth = Math.max(\n 4,\n ...allTypes.map((t) => {\n return t.length;\n }),\n );\n const statusText = \"STATUS\";\n const statusWidth = statusText.length;\n\n // Print header\n const header = [\n \"TYPE\".padEnd(typeWidth),\n statusText.padEnd(statusWidth),\n \"ACCOUNT\",\n ].join(\" \");\n console.log(chalk.dim(header));\n\n // Print rows\n for (const type of allTypes) {\n const connector = connectedMap.get(type);\n const scopeMismatch =\n connector !== undefined &&\n connector.authMethod === \"oauth\" &&\n !hasRequiredScopes(type, connector.oauthScopes);\n const status = connector\n ? connector.needsReconnect\n ? chalk.yellow(\"!\".padEnd(statusWidth))\n : scopeMismatch\n ? chalk.yellow(\"!\".padEnd(statusWidth))\n : chalk.green(\"✓\".padEnd(statusWidth))\n : chalk.dim(\"-\".padEnd(statusWidth));\n const account = connector?.needsReconnect\n ? chalk.yellow(\"(reconnect needed)\")\n : scopeMismatch\n ? chalk.yellow(\"(permissions update available)\")\n : connector?.externalUsername\n ? `@${connector.externalUsername}`\n : chalk.dim(\"-\");\n\n const row = [type.padEnd(typeWidth), status, account].join(\" \");\n console.log(row);\n }\n\n // Always show connect hint\n console.log();\n console.log(chalk.dim(\"To connect a service:\"));\n console.log(chalk.dim(\" zero connector connect <type>\"));\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport {\n CONNECTOR_TYPES,\n connectorTypeSchema,\n getScopeDiff,\n hasRequiredScopes,\n} from \"@vm0/core\";\nimport { getZeroConnector } from \"../../../lib/api\";\nimport { formatDateTime } from \"../../../lib/domain/schedule-utils\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nconst LABEL_WIDTH = 16;\n\nexport const statusCommand = new Command()\n .name(\"status\")\n .description(\"Show detailed status of a connector\")\n .argument(\"<type>\", \"Connector type (e.g., github)\")\n .action(\n withErrorHandler(async (type: string) => {\n const parseResult = connectorTypeSchema.safeParse(type);\n if (!parseResult.success) {\n const available = Object.keys(CONNECTOR_TYPES).join(\", \");\n throw new Error(`Unknown connector type: ${type}`, {\n cause: new Error(`Available connectors: ${available}`),\n });\n }\n\n const connector = await getZeroConnector(parseResult.data);\n\n console.log(`Connector: ${chalk.cyan(type)}`);\n console.log();\n\n if (connector) {\n console.log(\n `${\"Status:\".padEnd(LABEL_WIDTH)}${chalk.green(\"connected\")}`,\n );\n console.log(\n `${\"Account:\".padEnd(LABEL_WIDTH)}@${connector.externalUsername}`,\n );\n console.log(\n `${\"Auth Method:\".padEnd(LABEL_WIDTH)}${connector.authMethod}`,\n );\n\n if (connector.oauthScopes && connector.oauthScopes.length > 0) {\n console.log(\n `${\"OAuth Scopes:\".padEnd(LABEL_WIDTH)}${connector.oauthScopes.join(\", \")}`,\n );\n }\n\n if (\n connector.authMethod === \"oauth\" &&\n !hasRequiredScopes(parseResult.data, connector.oauthScopes)\n ) {\n const diff = getScopeDiff(parseResult.data, connector.oauthScopes);\n console.log(\n `${\"Permissions:\".padEnd(LABEL_WIDTH)}${chalk.yellow(\"update available\")}`,\n );\n if (diff.addedScopes.length > 0) {\n console.log(\n `${\" Added:\".padEnd(LABEL_WIDTH)}${diff.addedScopes.join(\", \")}`,\n );\n }\n if (diff.removedScopes.length > 0) {\n console.log(\n `${\" Removed:\".padEnd(LABEL_WIDTH)}${diff.removedScopes.join(\", \")}`,\n );\n }\n }\n\n console.log(\n `${\"Connected:\".padEnd(LABEL_WIDTH)}${formatDateTime(connector.createdAt)}`,\n );\n\n if (connector.updatedAt !== connector.createdAt) {\n console.log(\n `${\"Last Updated:\".padEnd(LABEL_WIDTH)}${formatDateTime(connector.updatedAt)}`,\n );\n }\n\n console.log();\n console.log(chalk.dim(\"To disconnect:\"));\n console.log(chalk.dim(` zero connector disconnect ${type}`));\n } else {\n console.log(\n `${\"Status:\".padEnd(LABEL_WIDTH)}${chalk.dim(\"not connected\")}`,\n );\n console.log();\n console.log(chalk.dim(\"To connect:\"));\n console.log(chalk.dim(` zero connector connect ${type}`));\n }\n }),\n );\n","/**\n * Format a date string as relative time (e.g., \"in 2h\", \"3d ago\")\n */\nexport function formatRelativeTime(dateStr: string | null): string {\n if (!dateStr) return \"-\";\n\n const date = new Date(dateStr);\n const now = new Date();\n const diffMs = date.getTime() - now.getTime();\n const diffAbs = Math.abs(diffMs);\n\n const minutes = Math.floor(diffAbs / (1000 * 60));\n const hours = Math.floor(diffAbs / (1000 * 60 * 60));\n const days = Math.floor(diffAbs / (1000 * 60 * 60 * 24));\n\n const isPast = diffMs < 0;\n\n if (days > 0) {\n return isPast ? `${days}d ago` : `in ${days}d`;\n } else if (hours > 0) {\n return isPast ? `${hours}h ago` : `in ${hours}h`;\n } else if (minutes > 0) {\n return isPast ? `${minutes}m ago` : `in ${minutes}m`;\n } else {\n return isPast ? \"just now\" : \"soon\";\n }\n}\n\n/**\n * Format a date string with both absolute and relative time\n * e.g., \"2025-01-14 09:00 (in 2h)\"\n * Uses local timezone, but doesn't include timezone in output (shown separately)\n */\nexport function formatDateTime(dateStr: string | null): string {\n if (!dateStr) return \"-\";\n\n const date = new Date(dateStr);\n\n // Format: YYYY-MM-DD HH:MM (no seconds, no timezone - shown separately)\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\n const day = String(date.getDate()).padStart(2, \"0\");\n const hours = String(date.getHours()).padStart(2, \"0\");\n const minutes = String(date.getMinutes()).padStart(2, \"0\");\n\n const formatted = `${year}-${month}-${day} ${hours}:${minutes}`;\n const relative = formatRelativeTime(dateStr);\n\n return `${formatted} (${relative})`;\n}\n\n/**\n * Frequency type for schedule wizard\n */\nexport type ScheduleFrequency =\n | \"daily\"\n | \"weekly\"\n | \"monthly\"\n | \"once\"\n | \"loop\";\n\n/**\n * Generate cron expression from user-friendly inputs\n * @param frequency - Schedule frequency type\n * @param time - Time in HH:MM format (24-hour)\n * @param day - Day of week (0-6, Sun=0) for weekly, or day of month (1-31) for monthly\n * @returns Cron expression string\n */\nexport function generateCronExpression(\n frequency: Exclude<ScheduleFrequency, \"once\" | \"loop\">,\n time: string,\n day?: number,\n): string {\n const [hourStr, minuteStr] = time.split(\":\");\n const hour = parseInt(hourStr ?? \"0\", 10);\n const minute = parseInt(minuteStr ?? \"0\", 10);\n\n switch (frequency) {\n case \"daily\":\n return `${minute} ${hour} * * *`;\n case \"weekly\":\n return `${minute} ${hour} * * ${day ?? 1}`;\n case \"monthly\":\n return `${minute} ${hour} ${day ?? 1} * *`;\n }\n}\n\n/**\n * Detect system timezone using Intl API\n * @returns IANA timezone identifier (e.g., \"America/New_York\")\n */\nexport function detectTimezone(): string {\n return Intl.DateTimeFormat().resolvedOptions().timeZone;\n}\n\n/**\n * Validate time format (HH:MM, 24-hour)\n * @param time - Time string to validate\n * @returns true if valid, error message if invalid\n */\nexport function validateTimeFormat(time: string): boolean | string {\n const match = time.match(/^(\\d{1,2}):(\\d{2})$/);\n if (!match) {\n return \"Invalid format. Use HH:MM (e.g., 09:00)\";\n }\n\n const hour = parseInt(match[1]!, 10);\n const minute = parseInt(match[2]!, 10);\n\n if (hour < 0 || hour > 23) {\n return \"Hour must be 0-23\";\n }\n if (minute < 0 || minute > 59) {\n return \"Minute must be 0-59\";\n }\n if (minute % 5 !== 0) {\n return \"Minute must be a multiple of 5 (0, 5, 10, ..., 55)\";\n }\n\n return true;\n}\n\n/**\n * Validate date format (YYYY-MM-DD)\n * @param date - Date string to validate\n * @returns true if valid, error message if invalid\n */\nexport function validateDateFormat(date: string): boolean | string {\n const match = date.match(/^(\\d{4})-(\\d{2})-(\\d{2})$/);\n if (!match) {\n return \"Invalid format. Use YYYY-MM-DD (e.g., 2025-01-15)\";\n }\n\n const year = parseInt(match[1]!, 10);\n const month = parseInt(match[2]!, 10);\n const day = parseInt(match[3]!, 10);\n\n if (year < 2000 || year > 2100) {\n return \"Year must be between 2000 and 2100\";\n }\n if (month < 1 || month > 12) {\n return \"Month must be 1-12\";\n }\n if (day < 1 || day > 31) {\n return \"Day must be 1-31\";\n }\n\n // Validate the date is actually valid (e.g., not Feb 30)\n const testDate = new Date(year, month - 1, day);\n if (\n testDate.getFullYear() !== year ||\n testDate.getMonth() !== month - 1 ||\n testDate.getDate() !== day\n ) {\n return \"Invalid date\";\n }\n\n return true;\n}\n\n/**\n * Get tomorrow's date in local timezone as YYYY-MM-DD\n * @returns Date string in YYYY-MM-DD format\n */\nexport function getTomorrowDateLocal(): string {\n const tomorrow = new Date();\n tomorrow.setDate(tomorrow.getDate() + 1);\n const year = tomorrow.getFullYear();\n const month = String(tomorrow.getMonth() + 1).padStart(2, \"0\");\n const day = String(tomorrow.getDate()).padStart(2, \"0\");\n return `${year}-${month}-${day}`;\n}\n\n/**\n * Get current time in local timezone as HH:MM\n * @returns Time string in HH:MM format\n */\nexport function getCurrentTimeLocal(): string {\n const now = new Date();\n const hours = String(now.getHours()).padStart(2, \"0\");\n const minutes = String(now.getMinutes()).padStart(2, \"0\");\n return `${hours}:${minutes}`;\n}\n\n/**\n * Convert a human-readable datetime string to ISO format\n * Supports formats: \"YYYY-MM-DD HH:MM\" or full ISO string\n * @param dateTimeStr - DateTime string (e.g., \"2025-01-15 14:30\")\n * @returns ISO format string (e.g., \"2025-01-15T14:30:00.000Z\")\n */\nexport function toISODateTime(dateTimeStr: string): string {\n // If already in ISO format, return as-is\n if (dateTimeStr.includes(\"T\") && dateTimeStr.endsWith(\"Z\")) {\n return dateTimeStr;\n }\n\n // Convert \"YYYY-MM-DD HH:MM\" to ISO\n const isoStr = dateTimeStr.replace(\" \", \"T\") + \":00\";\n const date = new Date(isoStr);\n return date.toISOString();\n}\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { CONNECTOR_TYPES, connectorTypeSchema } from \"@vm0/core\";\nimport { deleteZeroConnector } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const disconnectCommand = new Command()\n .name(\"disconnect\")\n .description(\"Disconnect a third-party service\")\n .argument(\"<type>\", \"Connector type to disconnect (e.g., github)\")\n .action(\n withErrorHandler(async (type: string) => {\n const parseResult = connectorTypeSchema.safeParse(type);\n if (!parseResult.success) {\n const available = Object.keys(CONNECTOR_TYPES).join(\", \");\n throw new Error(`Unknown connector type: ${type}`, {\n cause: new Error(`Available connectors: ${available}`),\n });\n }\n\n const connectorType = parseResult.data;\n await deleteZeroConnector(connectorType);\n console.log(chalk.green(`✓ Disconnected ${type}`));\n }),\n );\n","import { Command } from \"commander\";\nimport { missingTokenCommand } from \"./missing-token\";\nimport { permissionDenyCommand } from \"./permission-deny\";\nimport { permissionChangeCommand } from \"./permission-change\";\n\nexport const zeroDoctorCommand = new Command()\n .name(\"doctor\")\n .description(\"Diagnose runtime issues (missing tokens, permission denials)\")\n .addCommand(missingTokenCommand)\n .addCommand(permissionDenyCommand)\n .addCommand(permissionChangeCommand)\n .addHelpText(\n \"after\",\n `\nExamples:\n Missing an API key? zero doctor missing-token GITHUB_TOKEN\n Permission denied? zero doctor permission-deny github --method GET --path /repos/owner/repo\n Change a permission? zero doctor permission-change github --permission contents:read --enable\n\nNotes:\n - Use this when your task fails due to a missing environment variable or permission denial\n - The doctor will identify the issue and give the user a link to resolve it`,\n );\n","import { Command } from \"commander\";\nimport {\n getConnectorTypeForSecretName,\n CONNECTOR_TYPES,\n type ConnectorType,\n} from \"@vm0/core\";\nimport { getApiUrl } from \"../../../lib/api/config\";\nimport { getZeroConnector } from \"../../../lib/api/domains/zero-connectors\";\nimport { getZeroAgentUserConnectors } from \"../../../lib/api/domains/zero-agents\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { toPlatformUrl } from \"./platform-url\";\n\nexport const missingTokenCommand = new Command()\n .name(\"missing-token\")\n .description(\n \"Diagnose a missing token and find the connector that provides it\",\n )\n .argument(\"<token-name>\", \"The environment variable / token name to look up\")\n .addHelpText(\n \"after\",\n `\nExamples:\n zero doctor missing-token GITHUB_TOKEN\n zero doctor missing-token LINEAR_API_KEY\n zero doctor missing-token NOTION_TOKEN\n\nNotes:\n - Outputs which connector provides the token and a URL for the user to connect it\n - Use this to guide the user when a required token is not available in the sandbox`,\n )\n .action(\n withErrorHandler(async (tokenName: string) => {\n const connectorType = getConnectorTypeForSecretName(tokenName);\n if (!connectorType) {\n throw new Error(\n `Unknown token: ${tokenName} — not managed by any connector`,\n );\n }\n\n const { label } = CONNECTOR_TYPES[connectorType];\n const apiUrl = await getApiUrl();\n const platformUrl = toPlatformUrl(apiUrl);\n const agentId = process.env.ZERO_AGENT_ID;\n\n // Check whether the token actually exists in the sandbox environment.\n const tokenPresent = Boolean(process.env[tokenName]);\n console.log(\n `${tokenName} is provided by the ${label} connector. Sandbox env: ${tokenPresent ? \"present\" : \"not present\"}.`,\n );\n\n // Check whether the user has connected this connector and whether the\n // agent has permission to use it. Run both checks in parallel.\n const [connector, enabledTypes] = await Promise.all([\n getZeroConnector(connectorType as ConnectorType).catch(() => {\n return null;\n }),\n agentId\n ? getZeroAgentUserConnectors(agentId).catch(() => {\n return null;\n })\n : Promise.resolve(null),\n ]);\n\n const isConnected = connector !== null;\n const hasPermission =\n enabledTypes !== null && enabledTypes.includes(connectorType);\n\n const rediagnoseHint = `Important: if ${tokenName} is still missing after the user takes action, run \\`zero doctor missing-token ${tokenName}\\` again to re-diagnose instead of assuming the status.`;\n\n if (!isConnected) {\n // Connector not connected — direct to the directed connect page\n const connectUrl = agentId\n ? `${platformUrl.origin}/connectors/${connectorType}/connect?agentId=${agentId}`\n : `${platformUrl.origin}/connectors/${connectorType}/connect`;\n console.log(\n `The ${label} connector is not connected. Ask the user to connect it at: [Connect ${label}](${connectUrl})\\n${rediagnoseHint}`,\n );\n return;\n }\n\n const issues: string[] = [];\n\n if (connector.needsReconnect) {\n const url = `${platformUrl.origin}/connectors`;\n issues.push(\n `The ${label} connector has expired and needs to be reconnected. Ask the user to reconnect it at: [Reconnect ${label}](${url})`,\n );\n }\n\n if (!hasPermission) {\n const url = agentId\n ? `${platformUrl.origin}/connectors/${connectorType}/authorize?agentId=${agentId}`\n : `${platformUrl.origin}/connectors`;\n issues.push(\n `The ${label} connector is not authorized for this agent. Ask the user to enable it at: [Authorize ${label}](${url})`,\n );\n }\n\n if (issues.length > 0) {\n for (const issue of issues) {\n console.log(issue);\n }\n console.log(rediagnoseHint);\n } else {\n // Both connected and authorized — something else is wrong\n const url = `${platformUrl.origin}/connectors`;\n console.log(\n `The ${label} connector is connected and authorized, but the token is still missing. Ask VM0 developer to resolve this issue. Connector status: [Check ${label} status](${url})\\n${rediagnoseHint}`,\n );\n }\n }),\n );\n","import { getApiUrl } from \"../../../lib/api/config\";\n\n/**\n * Transform the API host to the platform (app) host.\n *\n * www.vm0.ai → app.vm0.ai\n * platform.vm0.ai → app.vm0.ai\n * tunnel-user-host-www.vm7.ai → tunnel-user-host-app.vm7.ai\n * custom.example.com → app.custom.example.com\n */\nexport function toPlatformUrl(apiUrl: string): URL {\n const parsed = new URL(apiUrl);\n const parts = parsed.hostname.split(\".\");\n if (parts[0]!.endsWith(\"-www\")) {\n parts[0] = parts[0]!.slice(0, -\"-www\".length) + \"-app\";\n } else if (parts[0] === \"www\" || parts[0] === \"platform\") {\n parts[0] = \"app\";\n } else if (parts[0] !== \"app\" && parts[0] !== \"localhost\") {\n parts.unshift(\"app\");\n }\n parsed.hostname = parts.join(\".\");\n return parsed;\n}\n\nexport async function getPlatformOrigin(): Promise<string> {\n const apiUrl = await getApiUrl();\n return toPlatformUrl(apiUrl).origin;\n}\n","import { Command, Option } from \"commander\";\nimport {\n isFirewallConnectorType,\n getConnectorFirewall,\n findMatchingPermissions,\n CONNECTOR_TYPES,\n} from \"@vm0/core\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const permissionDenyCommand = new Command()\n .name(\"permission-deny\")\n .description(\n \"Diagnose a permission denial and find the permission that covers it\",\n )\n .argument(\"<connector-ref>\", \"The connector type (e.g. github)\")\n .addOption(\n new Option(\n \"--method <method>\",\n \"The denied HTTP method\",\n ).makeOptionMandatory(),\n )\n .addOption(\n new Option(\"--path <path>\", \"The denied path\").makeOptionMandatory(),\n )\n .addHelpText(\n \"after\",\n `\nExamples:\n zero doctor permission-deny github --method GET --path /repos/owner/repo/pulls\n zero doctor permission-deny slack --method POST --path /chat.postMessage\n\nNotes:\n - Identifies which named permission covers a denied request\n - Use permission-change to request or enable the permission`,\n )\n .action(\n withErrorHandler(\n async (connectorRef: string, opts: { method: string; path: string }) => {\n if (!isFirewallConnectorType(connectorRef)) {\n throw new Error(`Unknown connector type: ${connectorRef}`);\n }\n\n const { label } = CONNECTOR_TYPES[connectorRef];\n const config = getConnectorFirewall(connectorRef);\n const permissions = findMatchingPermissions(\n opts.method,\n opts.path,\n config,\n );\n\n console.log(\n `The ${label} permission filtered ${opts.method} ${opts.path}.`,\n );\n\n if (permissions.length === 0) {\n console.log(\"No named permission was found covering this request.\");\n return;\n }\n\n // Count total rules per permission name across all APIs\n const ruleCount = new Map<string, number>();\n for (const api of config.apis) {\n if (!api.permissions) continue;\n for (const perm of api.permissions) {\n ruleCount.set(\n perm.name,\n (ruleCount.get(perm.name) ?? 0) + perm.rules.length,\n );\n }\n }\n\n // Pick the permission with the fewest rules (most specific)\n const permission = permissions.reduce((narrowest, current) => {\n return (ruleCount.get(current) ?? Infinity) <\n (ruleCount.get(narrowest) ?? Infinity)\n ? current\n : narrowest;\n });\n console.log(`This is covered by the \"${permission}\" permission.`);\n console.log(\n `To request this permission, run: zero doctor permission-change ${connectorRef} --permission ${permission} --enable --reason \"why this is needed\"`,\n );\n },\n ),\n );\n","import { Command, Option } from \"commander\";\nimport {\n isFirewallConnectorType,\n getConnectorFirewall,\n CONNECTOR_TYPES,\n} from \"@vm0/core\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { getPlatformOrigin } from \"./platform-url\";\nimport { resolveAgentRole } from \"./resolve-role\";\n\nfunction findPermissionInConfig(ref: string, permissionName: string): boolean {\n if (!isFirewallConnectorType(ref)) return false;\n const config = getConnectorFirewall(ref);\n for (const api of config.apis) {\n if (!api.permissions) continue;\n for (const p of api.permissions) {\n if (p.name === permissionName) return true;\n }\n }\n return false;\n}\n\n/**\n * Core logic for outputting a permission change message.\n * Shared by both `permission-change` and `permission-deny` commands.\n */\nconst REASON_MAX_LENGTH = 500;\n\nasync function outputPermissionChangeMessage(\n connectorRef: string,\n permission: string,\n action: \"enable\" | \"disable\",\n reason?: string,\n): Promise<void> {\n const { label } =\n CONNECTOR_TYPES[connectorRef as keyof typeof CONNECTOR_TYPES];\n\n const platformOrigin = await getPlatformOrigin();\n const agentId = process.env.ZERO_AGENT_ID;\n const role = agentId ? await resolveAgentRole(agentId) : \"unknown\";\n\n const urlParams = new URLSearchParams({\n ref: connectorRef,\n permission,\n action: action === \"enable\" ? \"allow\" : \"deny\",\n });\n\n // Only include reason for member role (admin/owner can change directly)\n if (role === \"member\" && reason) {\n const truncated =\n reason.length > REASON_MAX_LENGTH\n ? reason.slice(0, REASON_MAX_LENGTH)\n : reason;\n urlParams.set(\"reason\", truncated);\n }\n\n const pagePath = agentId ? `/agents/${agentId}/permissions` : \"/agents\";\n const url = `${platformOrigin}${pagePath}?${urlParams.toString()}`;\n\n // Slack chat:write: strongly recommend bot-based messaging over user identity\n if (\n connectorRef === \"slack\" &&\n permission === \"chat:write\" &&\n action === \"enable\"\n ) {\n console.log(\"\");\n console.log(\n \"IMPORTANT: Granting chat:write allows sending messages AS THE USER's identity, not as a bot.\",\n );\n console.log(\n \"Use `zero slack message send -c <channel> -t <text>` to send messages as the bot instead — this is the recommended approach for most use cases.\",\n );\n console.log(\n \"Only request user approval below if acting as the user is specifically required.\",\n );\n console.log(\"\");\n }\n\n // Gmail gmail.send: strongly recommend draft-based workflow over direct send\n if (\n connectorRef === \"gmail\" &&\n permission === \"gmail.send\" &&\n action === \"enable\"\n ) {\n console.log(\"\");\n console.log(\n \"IMPORTANT: Granting gmail.send allows the agent to send emails directly as the user.\",\n );\n console.log(\n \"Consider keeping gmail.send disabled and using gmail.compose instead — the agent can create drafts for the user to review and send manually.\",\n );\n console.log(\n \"Only request user approval below if direct sending is specifically required.\",\n );\n console.log(\"\");\n }\n\n if (role === \"admin\" || role === \"owner\") {\n console.log(\n `You can ${action} the \"${permission}\" permission directly: [Manage ${label} permissions](${url})`,\n );\n } else if (role === \"member\") {\n if (!reason) {\n console.log(\n `IMPORTANT: Re-run with \\`--reason \"one sentence why this is needed\"\\` so the admin can review your request faster.`,\n );\n } else if (action === \"enable\") {\n console.log(\n `Permission changes require admin approval. Request access at: [Request ${label} access](${url})`,\n );\n } else {\n console.log(\n `Permission changes require admin approval. Contact an org admin to disable this permission: [View ${label} permissions](${url})`,\n );\n }\n } else {\n console.log(\n `To ${action} the \"${permission}\" permission for ${label}: [Manage ${label} permissions](${url})`,\n );\n }\n}\n\nexport const permissionChangeCommand = new Command()\n .name(\"permission-change\")\n .description(\"Request a permission change (enable or disable)\")\n .argument(\"<connector-ref>\", \"The connector type (e.g. github)\")\n .addOption(\n new Option(\n \"--permission <name>\",\n \"The permission name to change\",\n ).makeOptionMandatory(),\n )\n .addOption(\n new Option(\"--enable\", \"Request to enable the permission\").conflicts(\n \"disable\",\n ),\n )\n .addOption(\n new Option(\"--disable\", \"Request to disable the permission\").conflicts(\n \"enable\",\n ),\n )\n .addOption(\n new Option(\n \"--reason <text>\",\n \"Brief reason why the permission is needed (max 500 chars)\",\n ),\n )\n .addHelpText(\n \"after\",\n `\nExamples:\n zero doctor permission-change github --permission contents:read --enable\n zero doctor permission-change slack --permission chat:write --disable\n\nNotes:\n - Outputs a platform URL for the user to adjust the permission\n - Admins can change permissions directly; members must request approval`,\n )\n .action(\n withErrorHandler(\n async (\n connectorRef: string,\n opts: {\n permission: string;\n enable?: boolean;\n disable?: boolean;\n reason?: string;\n },\n ) => {\n if (!opts.enable && !opts.disable) {\n throw new Error(\"Either --enable or --disable is required\");\n }\n\n if (!isFirewallConnectorType(connectorRef)) {\n throw new Error(`Unknown connector type: ${connectorRef}`);\n }\n\n if (!findPermissionInConfig(connectorRef, opts.permission)) {\n throw new Error(\n `Unknown permission \"${opts.permission}\" for ${connectorRef}`,\n );\n }\n\n const action = opts.enable ? \"enable\" : \"disable\";\n await outputPermissionChangeMessage(\n connectorRef,\n opts.permission,\n action,\n opts.reason,\n );\n },\n ),\n );\n","import { getZeroOrg } from \"../../../lib/api/domains/zero-orgs\";\nimport { getZeroAgent } from \"../../../lib/api/domains/zero-agents\";\nimport { decodeZeroTokenPayload } from \"../../../lib/api/zero-token\";\nimport { decodeCliTokenPayload } from \"../../../lib/api/cli-token\";\nimport { getToken } from \"../../../lib/api/config\";\n\ntype AgentRole = \"admin\" | \"owner\" | \"member\" | \"unknown\";\n\n/**\n * Resolve the current user's userId from the available token.\n * Tries ZERO_TOKEN (sandbox) first, then CLI token.\n */\nasync function resolveUserId(): Promise<string | undefined> {\n const zeroPayload = decodeZeroTokenPayload();\n if (zeroPayload?.userId) return zeroPayload.userId;\n\n const token = await getToken();\n const cliPayload = decodeCliTokenPayload(token);\n return cliPayload?.userId;\n}\n\n/**\n * Best-effort role detection that also considers agent ownership.\n *\n * Returns \"admin\" if the user is an org admin (can manage any agent).\n * Returns \"owner\" if the user is a non-admin but owns the specified agent.\n * Returns \"member\" if the user is a non-admin, non-owner member.\n * Returns \"unknown\" on any API failure.\n */\nexport async function resolveAgentRole(agentId: string): Promise<AgentRole> {\n try {\n const org = await getZeroOrg();\n if (org.role === \"admin\") return \"admin\";\n\n if (org.role === \"member\") {\n // Check if the member owns this agent\n const userId = await resolveUserId();\n if (userId) {\n const agent = await getZeroAgent(agentId);\n if (agent.ownerId === userId) return \"owner\";\n }\n return \"member\";\n }\n\n return \"unknown\";\n } catch (error: unknown) {\n console.debug(\"resolveAgentRole failed, falling back to unknown:\", error);\n return \"unknown\";\n }\n}\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport {\n getZeroUserPreferences,\n updateZeroUserPreferences,\n} from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { isInteractive, promptText } from \"../../../lib/utils/prompt-utils\";\n\n/**\n * Detect system timezone using Intl API\n */\nfunction detectTimezone(): string {\n return Intl.DateTimeFormat().resolvedOptions().timeZone;\n}\n\n/**\n * Validate timezone using Intl.DateTimeFormat\n */\nfunction isValidTimezone(timezone: string): boolean {\n try {\n Intl.DateTimeFormat(undefined, { timeZone: timezone });\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Display current preferences\n */\nfunction displayPreferences(prefs: { timezone: string | null }): void {\n console.log(chalk.bold(\"Current preferences:\"));\n console.log(\n ` Timezone: ${prefs.timezone ? chalk.cyan(prefs.timezone) : chalk.dim(\"not set\")}`,\n );\n}\n\ninterface PreferenceOpts {\n timezone?: string;\n}\n\n/**\n * Build updates from CLI flags, exiting on invalid input\n */\nfunction buildUpdates(opts: PreferenceOpts): { timezone?: string } | null {\n if (opts.timezone === undefined) return null;\n\n if (!isValidTimezone(opts.timezone)) {\n throw new Error(`Invalid timezone: ${opts.timezone}`, {\n cause: new Error(\n \"Use an IANA timezone identifier (e.g., America/New_York, Asia/Shanghai)\",\n ),\n });\n }\n\n return { timezone: opts.timezone };\n}\n\n/**\n * Print confirmation after a successful update\n */\nfunction printUpdateResult(\n updates: { timezone?: string },\n result: { timezone: string | null },\n): void {\n if (updates.timezone !== undefined) {\n console.log(\n chalk.green(\n `Timezone set to ${chalk.cyan(result.timezone ?? updates.timezone)}`,\n ),\n );\n }\n}\n\n/**\n * Interactive prompts when no flags provided\n */\nasync function interactiveSetup(prefs: {\n timezone: string | null;\n}): Promise<void> {\n if (!prefs.timezone) {\n const detectedTz = detectTimezone();\n console.log(chalk.dim(`\\nSystem timezone detected: ${detectedTz}`));\n const tz = await promptText(\n \"Set timezone? (enter timezone or leave empty to skip)\",\n detectedTz,\n );\n if (tz?.trim()) {\n if (!isValidTimezone(tz.trim())) {\n throw new Error(`Invalid timezone: ${tz.trim()}`);\n }\n await updateZeroUserPreferences({ timezone: tz.trim() });\n console.log(chalk.green(`Timezone set to ${chalk.cyan(tz.trim())}`));\n }\n }\n}\n\n/**\n * zero preference\n *\n * View or update user preferences (timezone).\n */\nexport const zeroPreferenceCommand = new Command()\n .name(\"preference\")\n .description(\"View or update user preferences (timezone, notifications)\")\n .option(\"--timezone <timezone>\", \"IANA timezone (e.g., America/New_York)\")\n .action(\n withErrorHandler(async (opts: PreferenceOpts) => {\n const updates = buildUpdates(opts);\n\n if (updates) {\n const result = await updateZeroUserPreferences(updates);\n printUpdateResult(updates, result);\n return;\n }\n\n // No flags: display current preferences\n const prefs = await getZeroUserPreferences();\n displayPreferences(prefs);\n\n if (isInteractive()) {\n await interactiveSetup(prefs);\n } else if (!prefs.timezone) {\n console.log();\n console.log(\n `To set timezone: ${chalk.cyan(\"zero preference --timezone <timezone>\")}`,\n );\n console.log(\n chalk.dim(\"Example: zero preference --timezone America/New_York\"),\n );\n }\n }),\n );\n","import { mainRunCommand } from \"./run\";\nimport { continueCommand } from \"./continue\";\n\nmainRunCommand.addCommand(continueCommand);\n\nmainRunCommand.addHelpText(\n \"after\",\n `\nExamples:\n Discover teammates: zero agent list\n Delegate a task: zero run <agent-id> \"your task\"\n Continue delegation: zero run continue <session-id> \"follow up\"`,\n);\n\nexport const zeroRunCommand = mainRunCommand;\n","import { Command } from \"commander\";\nimport { createZeroRun } from \"../../../lib/api\";\nimport { isUUID, renderRunCreated } from \"../../run/shared\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { pollZeroEvents, showZeroNextSteps } from \"./shared\";\n\nexport const mainRunCommand = new Command()\n .name(\"run\")\n .description(\"Delegate a task to a teammate agent\")\n .argument(\"<agent-id>\", \"Agent UUID (from `zero agent list`)\")\n .argument(\"<prompt>\", \"Task prompt for the agent\")\n .option(\n \"--model-provider <type>\",\n \"Override model provider (e.g., anthropic-api-key)\",\n )\n .option(\"--verbose\", \"Show full tool inputs and outputs\")\n .addHelpText(\n \"after\",\n `\nExamples:\n Delegate a task: zero run <agent-id> \"summarize the latest issues\"\n With verbose output: zero run <agent-id> \"fix the bug\" --verbose\n\nNotes:\n - Get agent IDs from \"zero agent list\"\n - The command streams events until the delegated run completes\n - On success, a session ID is printed for follow-up with \"zero run continue\"`,\n )\n .action(\n withErrorHandler(\n async (\n agentId: string,\n prompt: string,\n options: {\n modelProvider?: string;\n verbose?: boolean;\n },\n ) => {\n // 1. Validate agent-id is a UUID\n if (!isUUID(agentId)) {\n throw new Error(`Invalid agent ID format: ${agentId}`, {\n cause: new Error(\n \"Agent ID must be a valid UUID. Use `zero agent list` to find agent IDs.\",\n ),\n });\n }\n\n // 2. Create zero run\n const response = await createZeroRun({\n agentId,\n prompt,\n modelProvider: options.modelProvider,\n });\n\n // 3. Check for immediate failure\n if (response.status === \"failed\") {\n throw new Error(\n \"Run preparation failed\",\n response.error ? { cause: new Error(response.error) } : undefined,\n );\n }\n\n // 4. Display run started/queued info\n renderRunCreated(response);\n\n // 5. Poll for events\n const result = await pollZeroEvents(response.runId, {\n verbose: options.verbose,\n });\n if (!result.succeeded) {\n throw new Error(\"Run failed\");\n }\n\n // 6. Show next steps\n showZeroNextSteps(result);\n },\n ),\n );\n","import chalk from \"chalk\";\nimport { getZeroRunAgentEvents, getZeroRun } from \"../../../lib/api\";\nimport type { RunResult } from \"../../../lib/api\";\nimport { parseEvent } from \"../../../lib/events/event-parser-factory\";\nimport { EventRenderer } from \"../../../lib/events/event-renderer\";\nimport type { PollResult, EventRenderingOptions } from \"../../run/shared\";\n\n/**\n * Safely narrow GetRunResponse.result to RunResult.\n * GetRunResponse.result has all fields optional (due to .passthrough()),\n * but RunResult requires checkpointId, agentSessionId, conversationId.\n * Extra fields (artifact, volumes, memory) are preserved at runtime via passthrough.\n */\nfunction toRunResult(result: {\n output?: string;\n executionTimeMs?: number;\n agentSessionId?: string;\n checkpointId?: string;\n conversationId?: string;\n}): RunResult | undefined {\n const { checkpointId, agentSessionId, conversationId } = result;\n if (!checkpointId || !agentSessionId || !conversationId) {\n return undefined;\n }\n return { checkpointId, agentSessionId, conversationId };\n}\n\n/**\n * Poll for zero run events until run completes.\n * Uses dual-poll approach: telemetry endpoint for events, getById for status.\n */\nexport async function pollZeroEvents(\n runId: string,\n options?: EventRenderingOptions,\n): Promise<PollResult> {\n const renderer = new EventRenderer({ verbose: options?.verbose });\n\n let lastSequence = -1;\n let complete = false;\n let result: PollResult = { succeeded: true, runId };\n const pollIntervalMs = 1000;\n\n while (!complete) {\n // 1. Fetch events from telemetry endpoint\n const eventsResponse = await getZeroRunAgentEvents(runId, {\n since: lastSequence,\n limit: 100,\n order: \"asc\",\n });\n\n // 2. Parse and render each event\n for (const event of eventsResponse.events) {\n const eventData = event.eventData as Record<string, unknown>;\n const parsed = parseEvent(eventData);\n if (parsed) {\n renderer.render(parsed);\n }\n }\n\n // 3. Track last sequence number for pagination\n if (eventsResponse.events.length > 0) {\n lastSequence = Math.max(\n ...eventsResponse.events.map((e) => {\n return e.sequenceNumber;\n }),\n );\n }\n\n // 4. Fetch run status separately\n const runResponse = await getZeroRun(runId);\n const runStatus = runResponse.status;\n\n if (runStatus === \"completed\") {\n complete = true;\n EventRenderer.renderRunCompleted(\n runResponse.result ? toRunResult(runResponse.result) : undefined,\n );\n result = {\n succeeded: true,\n runId,\n sessionId: runResponse.result?.agentSessionId,\n checkpointId: runResponse.result?.checkpointId,\n };\n } else if (runStatus === \"failed\") {\n complete = true;\n EventRenderer.renderRunFailed(runResponse.error, runId);\n result = { succeeded: false, runId };\n } else if (runStatus === \"timeout\") {\n complete = true;\n console.error(chalk.red(\"\\n✗ Run timed out\"));\n result = { succeeded: false, runId };\n } else if (runStatus === \"cancelled\") {\n complete = true;\n console.error(chalk.yellow(\"\\n✗ Run cancelled\"));\n result = { succeeded: false, runId };\n }\n\n if (!complete) {\n await new Promise((resolve) => {\n return setTimeout(resolve, pollIntervalMs);\n });\n }\n }\n\n return result;\n}\n\n/**\n * Display next steps after successful zero run\n */\nexport function showZeroNextSteps(result: PollResult): void {\n const { sessionId } = result;\n\n console.log();\n\n if (sessionId) {\n console.log(\" Continue delegation:\");\n console.log(\n chalk.cyan(` zero run continue ${sessionId} \"your next prompt\"`),\n );\n }\n}\n","import { Command } from \"commander\";\nimport { createZeroRun } from \"../../../lib/api\";\nimport { isUUID, renderRunCreated } from \"../../run/shared\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { pollZeroEvents, showZeroNextSteps } from \"./shared\";\n\nexport const continueCommand = new Command()\n .name(\"continue\")\n .description(\"Continue a previous delegation from a session\")\n .argument(\"<session-id>\", \"Session ID from a previous run\")\n .argument(\"<prompt>\", \"Follow-up prompt for the agent\")\n .option(\n \"--model-provider <type>\",\n \"Override model provider (e.g., anthropic-api-key)\",\n )\n .option(\"--verbose\", \"Show full tool inputs and outputs\")\n .addHelpText(\n \"after\",\n `\nExamples:\n zero run continue <session-id> \"now deploy it\"\n zero run continue <session-id> \"add tests\" --verbose\n\nNotes:\n - The session ID is printed after a successful \"zero run\" delegation\n - Continues the same agent session with full prior context`,\n )\n .action(\n withErrorHandler(\n async (\n sessionId: string,\n prompt: string,\n options: {\n modelProvider?: string;\n verbose?: boolean;\n },\n ) => {\n // 1. Validate session-id is a UUID\n if (!isUUID(sessionId)) {\n throw new Error(`Invalid session ID format: ${sessionId}`, {\n cause: new Error(\"Session ID must be a valid UUID\"),\n });\n }\n\n // 2. Create zero run with sessionId (no agentId needed)\n const response = await createZeroRun({\n sessionId,\n prompt,\n modelProvider: options.modelProvider,\n });\n\n // 3. Check for immediate failure\n if (response.status === \"failed\") {\n throw new Error(\n \"Run preparation failed\",\n response.error ? { cause: new Error(response.error) } : undefined,\n );\n }\n\n // 4. Display run started/queued info\n renderRunCreated(response);\n\n // 5. Poll for events\n const result = await pollZeroEvents(response.runId, {\n verbose: options.verbose,\n });\n if (!result.succeeded) {\n throw new Error(\"Run failed\");\n }\n\n // 6. Show next steps\n showZeroNextSteps(result);\n },\n ),\n );\n","import { Command } from \"commander\";\nimport { setupCommand } from \"./setup\";\nimport { listCommand } from \"./list\";\nimport { statusCommand } from \"./status\";\nimport { deleteCommand } from \"./delete\";\nimport { enableCommand } from \"./enable\";\nimport { disableCommand } from \"./disable\";\n\nexport const zeroScheduleCommand = new Command()\n .name(\"schedule\")\n .description(\"Create or manage recurring scheduled tasks\")\n .addCommand(setupCommand)\n .addCommand(listCommand)\n .addCommand(statusCommand)\n .addCommand(deleteCommand)\n .addCommand(enableCommand)\n .addCommand(disableCommand)\n .addHelpText(\n \"after\",\n `\nExamples:\n Create a schedule: zero schedule setup --help\n Check all schedules: zero schedule list\n Check schedule status: zero schedule status <agent-id>\n Pause a schedule: zero schedule disable <agent-id>\n Resume a schedule: zero schedule enable <agent-id>\n Delete a schedule: zero schedule delete <agent-id>`,\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport {\n isInteractive,\n promptText,\n promptSelect,\n promptConfirm,\n} from \"../../../lib/utils/prompt-utils\";\nimport {\n generateCronExpression,\n detectTimezone,\n validateTimeFormat,\n validateDateFormat,\n getTomorrowDateLocal,\n getCurrentTimeLocal,\n toISODateTime,\n type ScheduleFrequency,\n} from \"../../../lib/domain/schedule-utils\";\nimport {\n resolveCompose,\n deployZeroSchedule,\n listZeroSchedules,\n enableZeroSchedule,\n getZeroUserPreferences,\n ApiRequestError,\n} from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nconst FREQUENCY_CHOICES = [\n { title: \"Daily\", value: \"daily\" as const, description: \"Run every day\" },\n {\n title: \"Weekly\",\n value: \"weekly\" as const,\n description: \"Run once per week\",\n },\n {\n title: \"Monthly\",\n value: \"monthly\" as const,\n description: \"Run once per month\",\n },\n {\n title: \"One-time\",\n value: \"once\" as const,\n description: \"Run once at specific time\",\n },\n {\n title: \"Loop\",\n value: \"loop\" as const,\n description: \"Run repeatedly at fixed intervals\",\n },\n];\n\nconst DAY_OF_WEEK_CHOICES = [\n { title: \"Monday\", value: 1 },\n { title: \"Tuesday\", value: 2 },\n { title: \"Wednesday\", value: 3 },\n { title: \"Thursday\", value: 4 },\n { title: \"Friday\", value: 5 },\n { title: \"Saturday\", value: 6 },\n { title: \"Sunday\", value: 0 },\n];\n\nfunction parseDayOption(\n day: string,\n frequency: ScheduleFrequency,\n): number | undefined {\n if (frequency === \"weekly\") {\n const dayMap: Record<string, number> = {\n sun: 0,\n mon: 1,\n tue: 2,\n wed: 3,\n thu: 4,\n fri: 5,\n sat: 6,\n };\n return dayMap[day.toLowerCase()];\n } else if (frequency === \"monthly\") {\n const num = parseInt(day, 10);\n if (num >= 1 && num <= 31) {\n return num;\n }\n }\n return undefined;\n}\n\nfunction formatInTimezone(isoDate: string, timezone: string): string {\n const date = new Date(isoDate);\n const parts = new Intl.DateTimeFormat(\"en-CA\", {\n timeZone: timezone,\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n hour12: false,\n }).formatToParts(date);\n\n const get = (type: string) => {\n return (\n parts.find((p) => {\n return p.type === type;\n })?.value ?? \"\"\n );\n };\n return `${get(\"year\")}-${get(\"month\")}-${get(\"day\")} ${get(\"hour\")}:${get(\"minute\")}`;\n}\n\nfunction parseFrequencyFromCron(\n cron: string,\n): { frequency: ScheduleFrequency; day?: number; time: string } | null {\n const parts = cron.split(\" \");\n if (parts.length !== 5) return null;\n\n const [minute, hour, dayOfMonth, , dayOfWeek] = parts;\n const time = `${hour!.padStart(2, \"0\")}:${minute!.padStart(2, \"0\")}`;\n\n if (dayOfMonth === \"*\" && dayOfWeek === \"*\") {\n return { frequency: \"daily\", time };\n } else if (dayOfMonth === \"*\" && dayOfWeek !== \"*\") {\n return { frequency: \"weekly\", day: parseInt(dayOfWeek!, 10), time };\n } else if (dayOfMonth !== \"*\" && dayOfWeek === \"*\") {\n return { frequency: \"monthly\", day: parseInt(dayOfMonth!, 10), time };\n }\n\n return null;\n}\n\ninterface SetupOptions {\n name?: string;\n frequency?: string;\n time?: string;\n day?: string;\n interval?: string;\n timezone?: string;\n prompt?: string;\n enable?: boolean;\n}\n\ninterface ExistingScheduleDefaults {\n frequency?: ScheduleFrequency;\n day?: number;\n time?: string;\n intervalSeconds?: number;\n}\n\ninterface ScheduleListItem {\n name: string;\n agentId: string;\n triggerType?: \"cron\" | \"once\" | \"loop\";\n cronExpression?: string | null;\n atTime?: string | null;\n intervalSeconds?: number | null;\n timezone: string;\n prompt: string;\n enabled?: boolean;\n}\n\nfunction getExistingDefaults(\n existingSchedule: ScheduleListItem | undefined,\n): ExistingScheduleDefaults {\n const defaults: ExistingScheduleDefaults = {};\n\n if (existingSchedule?.triggerType === \"loop\") {\n defaults.frequency = \"loop\";\n defaults.intervalSeconds = existingSchedule.intervalSeconds ?? undefined;\n } else if (existingSchedule?.cronExpression) {\n const parsed = parseFrequencyFromCron(existingSchedule.cronExpression);\n if (parsed) {\n defaults.frequency = parsed.frequency;\n defaults.day = parsed.day;\n defaults.time = parsed.time;\n }\n } else if (existingSchedule?.atTime) {\n defaults.frequency = \"once\";\n }\n\n return defaults;\n}\n\nasync function gatherFrequency(\n optionFrequency: string | undefined,\n existingFrequency: ScheduleFrequency | undefined,\n): Promise<ScheduleFrequency | null> {\n let frequency = optionFrequency as ScheduleFrequency | undefined;\n\n if (\n frequency &&\n [\"daily\", \"weekly\", \"monthly\", \"once\", \"loop\"].includes(frequency)\n ) {\n return frequency;\n }\n\n if (!isInteractive()) {\n throw new Error(\"--frequency is required (daily|weekly|monthly|once|loop)\");\n }\n\n const defaultIndex = existingFrequency\n ? FREQUENCY_CHOICES.findIndex((c) => {\n return c.value === existingFrequency;\n })\n : 0;\n\n frequency = await promptSelect<ScheduleFrequency>(\n \"Schedule frequency\",\n FREQUENCY_CHOICES,\n defaultIndex >= 0 ? defaultIndex : 0,\n );\n\n return frequency || null;\n}\n\nasync function gatherDay(\n frequency: ScheduleFrequency,\n optionDay: string | undefined,\n existingDay: number | undefined,\n): Promise<number | null> {\n if (frequency !== \"weekly\" && frequency !== \"monthly\") {\n return null;\n }\n\n if (optionDay) {\n const day = parseDayOption(optionDay, frequency);\n if (day === undefined) {\n throw new Error(\n `Invalid day: ${optionDay}. Use mon-sun for weekly or 1-31 for monthly.`,\n );\n }\n return day;\n }\n\n if (!isInteractive()) {\n throw new Error(\"--day is required for weekly/monthly\");\n }\n\n if (frequency === \"weekly\") {\n const defaultDayIndex =\n existingDay !== undefined\n ? DAY_OF_WEEK_CHOICES.findIndex((c) => {\n return c.value === existingDay;\n })\n : 0;\n const day = await promptSelect(\n \"Day of week\",\n DAY_OF_WEEK_CHOICES,\n defaultDayIndex >= 0 ? defaultDayIndex : 0,\n );\n return day ?? null;\n }\n\n const dayStr = await promptText(\n \"Day of month (1-31)\",\n existingDay?.toString() || \"1\",\n );\n if (!dayStr) return null;\n\n const day = parseInt(dayStr, 10);\n if (isNaN(day) || day < 1 || day > 31) {\n throw new Error(\"Day must be between 1 and 31\");\n }\n return day;\n}\n\nasync function gatherRecurringTime(\n optionTime: string | undefined,\n existingTime: string | undefined,\n): Promise<string | undefined> {\n if (optionTime) {\n const validation = validateTimeFormat(optionTime);\n if (validation !== true) {\n throw new Error(`Invalid time: ${validation}`);\n }\n return optionTime;\n }\n\n if (!isInteractive()) {\n throw new Error(\"--time is required (HH:MM format)\");\n }\n\n return await promptText(\n \"Time (HH:MM)\",\n existingTime || \"09:00\",\n validateTimeFormat,\n );\n}\n\nasync function gatherOneTimeSchedule(\n optionDay: string | undefined,\n optionTime: string | undefined,\n existingTime: string | undefined,\n): Promise<string | null> {\n if (optionDay && optionTime) {\n if (!validateDateFormat(optionDay)) {\n throw new Error(\n `Invalid date format: ${optionDay}. Use YYYY-MM-DD format.`,\n );\n }\n if (!validateTimeFormat(optionTime)) {\n throw new Error(`Invalid time format: ${optionTime}. Use HH:MM format.`);\n }\n return `${optionDay} ${optionTime}`;\n }\n\n if (!isInteractive()) {\n throw new Error(\"One-time schedules require interactive mode\", {\n cause: new Error(\n \"Or provide --day (YYYY-MM-DD) and --time (HH:MM) flags\",\n ),\n });\n }\n\n const tomorrowDate = getTomorrowDateLocal();\n const date = await promptText(\n \"Date (YYYY-MM-DD, default tomorrow)\",\n tomorrowDate,\n validateDateFormat,\n );\n if (!date) return null;\n\n const currentTime = getCurrentTimeLocal();\n const time = await promptText(\n \"Time (HH:MM)\",\n existingTime || currentTime,\n validateTimeFormat,\n );\n if (!time) return null;\n\n return `${date} ${time}`;\n}\n\nasync function gatherTimezone(\n optionTimezone: string | undefined,\n existingTimezone: string | undefined | null,\n): Promise<string | undefined> {\n if (optionTimezone) return optionTimezone;\n\n let userTimezone: string | null = null;\n try {\n const prefs = await getZeroUserPreferences();\n userTimezone = prefs.timezone;\n } catch {\n console.log(\n chalk.dim(\"Could not fetch timezone preference, using detected timezone\"),\n );\n }\n\n const defaultTimezone = userTimezone || detectTimezone();\n\n if (!isInteractive()) {\n return defaultTimezone;\n }\n\n return await promptText(\"Timezone\", existingTimezone || defaultTimezone);\n}\n\nasync function gatherPromptText(\n optionPrompt: string | undefined,\n existingPrompt: string | undefined | null,\n): Promise<string | undefined> {\n if (optionPrompt) return optionPrompt;\n\n if (!isInteractive()) {\n throw new Error(\"--prompt is required\");\n }\n\n return await promptText(\n \"Prompt to run\",\n existingPrompt || \"let's start working.\",\n );\n}\n\nasync function gatherInterval(\n optionInterval: string | undefined,\n existingInterval: number | undefined,\n): Promise<number | null> {\n if (optionInterval) {\n const val = parseInt(optionInterval, 10);\n if (isNaN(val) || val < 0) {\n throw new Error(\n \"Invalid interval. Must be a non-negative integer (seconds)\",\n );\n }\n return val;\n }\n\n if (!isInteractive()) {\n throw new Error(\"--interval is required for loop schedules (seconds)\");\n }\n\n const defaultVal =\n existingInterval !== undefined ? String(existingInterval) : \"300\";\n const result = await promptText(\n \"Interval in seconds (time between runs)\",\n defaultVal,\n (v: string) => {\n const n = parseInt(v, 10);\n if (isNaN(n) || n < 0) return \"Must be a non-negative integer\";\n return true;\n },\n );\n if (!result) return null;\n return parseInt(result, 10);\n}\n\nasync function gatherTiming(\n frequency: ScheduleFrequency,\n options: SetupOptions,\n defaults: ExistingScheduleDefaults,\n): Promise<{\n day: number | undefined;\n time: string | undefined;\n atTime: string | undefined;\n intervalSeconds: number | undefined;\n} | null> {\n if (frequency === \"loop\") {\n const intervalSeconds = await gatherInterval(\n options.interval,\n defaults.intervalSeconds,\n );\n if (intervalSeconds === null) return null;\n return {\n day: undefined,\n time: undefined,\n atTime: undefined,\n intervalSeconds,\n };\n }\n\n if (frequency === \"once\") {\n const result = await gatherOneTimeSchedule(\n options.day,\n options.time,\n defaults.time,\n );\n if (!result) return null;\n return {\n day: undefined,\n time: undefined,\n atTime: result,\n intervalSeconds: undefined,\n };\n }\n\n const day =\n (await gatherDay(frequency, options.day, defaults.day)) ?? undefined;\n if (day === null && (frequency === \"weekly\" || frequency === \"monthly\")) {\n return null;\n }\n\n const time = await gatherRecurringTime(options.time, defaults.time);\n if (!time) return null;\n\n return { day, time, atTime: undefined, intervalSeconds: undefined };\n}\n\nasync function findExistingSchedule(\n agentId: string,\n scheduleName: string,\n): Promise<ScheduleListItem | undefined> {\n const { schedules } = await listZeroSchedules();\n return schedules.find((s) => {\n return s.agentId === agentId && s.name === scheduleName;\n });\n}\n\ninterface DeployResult {\n created: boolean;\n schedule: {\n triggerType?: \"cron\" | \"once\" | \"loop\";\n timezone: string;\n cronExpression?: string | null;\n nextRunAt?: string | null;\n atTime?: string | null;\n intervalSeconds?: number | null;\n };\n}\n\nasync function buildAndDeploy(params: {\n scheduleName: string;\n agentId: string;\n agentName: string;\n frequency: ScheduleFrequency;\n time: string | undefined;\n day: number | undefined;\n atTime: string | undefined;\n intervalSeconds: number | undefined;\n timezone: string;\n prompt: string;\n}): Promise<DeployResult> {\n let cronExpression: string | undefined;\n let atTimeISO: string | undefined;\n\n if (params.frequency === \"loop\") {\n // Loop mode: intervalSeconds is passed directly\n } else if (params.atTime) {\n atTimeISO = toISODateTime(params.atTime);\n } else if (params.time && params.frequency !== \"once\") {\n cronExpression = generateCronExpression(\n params.frequency,\n params.time,\n params.day,\n );\n }\n\n console.log(\n `\\nDeploying schedule for agent ${chalk.cyan(params.agentName)}...`,\n );\n\n const deployResult = await deployZeroSchedule({\n name: params.scheduleName,\n agentId: params.agentId,\n cronExpression,\n atTime: atTimeISO,\n intervalSeconds: params.intervalSeconds,\n timezone: params.timezone,\n prompt: params.prompt,\n });\n\n return deployResult;\n}\n\nfunction displayDeployResult(\n scheduleName: string,\n deployResult: DeployResult,\n): void {\n if (deployResult.created) {\n console.log(chalk.green(`✓ Schedule \"${scheduleName}\" created`));\n } else {\n console.log(chalk.green(`✓ Schedule \"${scheduleName}\" updated`));\n }\n\n console.log(chalk.dim(` Timezone: ${deployResult.schedule.timezone}`));\n\n if (\n deployResult.schedule.triggerType === \"loop\" &&\n deployResult.schedule.intervalSeconds != null\n ) {\n console.log(\n chalk.dim(\n ` Mode: Loop (interval ${deployResult.schedule.intervalSeconds}s)`,\n ),\n );\n } else if (deployResult.schedule.cronExpression) {\n console.log(chalk.dim(` Cron: ${deployResult.schedule.cronExpression}`));\n if (deployResult.schedule.nextRunAt) {\n const nextRun = formatInTimezone(\n deployResult.schedule.nextRunAt,\n deployResult.schedule.timezone,\n );\n console.log(chalk.dim(` Next run: ${nextRun}`));\n }\n } else if (deployResult.schedule.atTime) {\n const atTimeFormatted = formatInTimezone(\n deployResult.schedule.atTime,\n deployResult.schedule.timezone,\n );\n console.log(chalk.dim(` At: ${atTimeFormatted}`));\n }\n}\n\nasync function tryEnableSchedule(\n scheduleName: string,\n agentId: string,\n agentName: string,\n): Promise<void> {\n try {\n await enableZeroSchedule({ name: scheduleName, agentId });\n console.log(chalk.green(`✓ Schedule \"${scheduleName}\" enabled`));\n } catch (error) {\n console.error(chalk.yellow(\"⚠ Failed to enable schedule\"));\n if (error instanceof ApiRequestError) {\n if (error.code === \"SCHEDULE_PAST\") {\n console.error(chalk.dim(\" Scheduled time has already passed\"));\n } else {\n console.error(chalk.dim(` ${error.message}`));\n }\n } else if (error instanceof Error) {\n console.error(chalk.dim(` ${error.message}`));\n }\n console.log(\n ` To enable manually: ${chalk.cyan(`zero schedule enable ${agentName}`)}`,\n );\n }\n}\n\nfunction showEnableHint(agentName: string): void {\n console.log();\n console.log(\n ` To enable: ${chalk.cyan(`zero schedule enable ${agentName}`)}`,\n );\n}\n\nasync function handleScheduleEnabling(params: {\n scheduleName: string;\n agentId: string;\n agentName: string;\n enableFlag: boolean;\n shouldPromptEnable: boolean;\n}): Promise<void> {\n const { scheduleName, agentId, agentName, enableFlag, shouldPromptEnable } =\n params;\n\n if (enableFlag) {\n await tryEnableSchedule(scheduleName, agentId, agentName);\n return;\n }\n\n if (shouldPromptEnable && isInteractive()) {\n const enableNow = await promptConfirm(\"Enable this schedule?\", true);\n if (enableNow) {\n await tryEnableSchedule(scheduleName, agentId, agentName);\n } else {\n showEnableHint(agentName);\n }\n return;\n }\n\n if (shouldPromptEnable) {\n showEnableHint(agentName);\n }\n}\n\nexport const setupCommand = new Command()\n .name(\"setup\")\n .description(\"Create or edit a schedule for a zero agent\")\n .argument(\"<agent-id>\", \"Agent ID\")\n .option(\"-n, --name <schedule-name>\", 'Schedule name (default: \"default\")')\n .option(\"-f, --frequency <type>\", \"Frequency: daily|weekly|monthly|once|loop\")\n .option(\"-t, --time <HH:MM>\", \"Time to run (24-hour format)\")\n .option(\"-d, --day <day>\", \"Day of week (mon-sun) or day of month (1-31)\")\n .option(\"-i, --interval <seconds>\", \"Interval in seconds for loop mode\")\n .option(\"-z, --timezone <tz>\", \"IANA timezone\")\n .option(\"-p, --prompt <text>\", \"Prompt to run\")\n .option(\"-e, --enable\", \"Enable schedule immediately after creation\")\n .addHelpText(\n \"after\",\n `\nExamples:\n Daily at 9am: zero schedule setup <agent-id> -f daily -t 09:00 -p \"run report\"\n Weekly on Monday: zero schedule setup <agent-id> -f weekly -d mon -t 10:00 -p \"weekly sync\"\n Monthly on the 1st: zero schedule setup <agent-id> -f monthly -d 1 -t 08:00 -p \"monthly review\"\n One-time: zero schedule setup <agent-id> -f once -d 2026-04-01 -t 14:00 -p \"one-off task\"\n Loop every 5 minutes: zero schedule setup <agent-id> -f loop -i 300 -p \"poll for updates\"\n Create and enable: zero schedule setup <agent-id> -f daily -t 09:00 -p \"run report\" --enable\n\nNotes:\n - Re-running setup with the same agent updates the existing \"default\" schedule\n - Use -n to manage multiple named schedules for the same agent\n - All flags are required in non-interactive mode; interactive mode prompts for missing values`,\n )\n .action(\n withErrorHandler(async (agentIdentifier: string, options: SetupOptions) => {\n // 1. Resolve agent identifier (UUID or name) to compose ID\n const compose = await resolveCompose(agentIdentifier);\n if (!compose) {\n throw new Error(`Agent not found: ${agentIdentifier}`);\n }\n const agentId = compose.id;\n const scheduleName = options.name || \"default\";\n\n // 2. Check for existing schedule\n const existingSchedule = await findExistingSchedule(\n agentId,\n scheduleName,\n );\n\n const agentName = compose.name;\n console.log(\n chalk.dim(\n existingSchedule\n ? `Editing existing schedule for agent ${agentName}`\n : `Creating new schedule for agent ${agentName}`,\n ),\n );\n\n const defaults = getExistingDefaults(existingSchedule);\n\n // 3. Gather frequency\n const frequency = await gatherFrequency(\n options.frequency,\n defaults.frequency,\n );\n if (!frequency) {\n console.log(chalk.dim(\"Cancelled\"));\n return;\n }\n\n // 4. Gather day and time\n const timing = await gatherTiming(frequency, options, defaults);\n if (!timing) {\n console.log(chalk.dim(\"Cancelled\"));\n return;\n }\n const { day, time, atTime, intervalSeconds } = timing;\n\n // 5. Gather timezone\n const timezone = await gatherTimezone(\n options.timezone,\n existingSchedule?.timezone,\n );\n if (!timezone) {\n console.log(chalk.dim(\"Cancelled\"));\n return;\n }\n\n // 6. Gather prompt\n const promptText_ = await gatherPromptText(\n options.prompt,\n existingSchedule?.prompt,\n );\n if (!promptText_) {\n console.log(chalk.dim(\"Cancelled\"));\n return;\n }\n\n // 7. Build trigger and deploy\n const deployResult = await buildAndDeploy({\n scheduleName,\n agentId,\n agentName,\n frequency,\n time,\n day,\n atTime,\n intervalSeconds,\n timezone,\n prompt: promptText_,\n });\n\n // 8. Display deployment result\n displayDeployResult(scheduleName, deployResult);\n\n // 9. Handle schedule enabling\n const shouldPromptEnable =\n deployResult.created ||\n (existingSchedule !== undefined && !existingSchedule.enabled);\n\n await handleScheduleEnabling({\n scheduleName,\n agentId,\n agentName,\n enableFlag: options.enable ?? false,\n shouldPromptEnable,\n });\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { listZeroSchedules } from \"../../../lib/api\";\nimport { formatRelativeTime } from \"../../../lib/domain/schedule-utils\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const listCommand = new Command()\n .name(\"list\")\n .alias(\"ls\")\n .description(\"List all zero schedules\")\n .addHelpText(\n \"after\",\n `\nExamples:\n zero schedule list`,\n )\n .action(\n withErrorHandler(async () => {\n const result = await listZeroSchedules();\n\n if (result.schedules.length === 0) {\n console.log(chalk.dim(\"No schedules found\"));\n console.log(\n chalk.dim(\" Create one with: zero schedule setup <agent-id>\"),\n );\n return;\n }\n\n const agentWidth = Math.max(\n 5,\n ...result.schedules.map((s) => {\n return s.agentId.length;\n }),\n );\n const scheduleWidth = Math.max(\n 8,\n ...result.schedules.map((s) => {\n return s.name.length;\n }),\n );\n const triggerWidth = Math.max(\n 7,\n ...result.schedules.map((s) => {\n return s.cronExpression\n ? s.cronExpression.length + s.timezone.length + 3\n : s.atTime?.length || 0;\n }),\n );\n\n const header = [\n \"AGENT\".padEnd(agentWidth),\n \"SCHEDULE\".padEnd(scheduleWidth),\n \"TRIGGER\".padEnd(triggerWidth),\n \"STATUS\".padEnd(8),\n \"NEXT RUN\",\n ].join(\" \");\n console.log(chalk.dim(header));\n\n for (const schedule of result.schedules) {\n const trigger = schedule.cronExpression\n ? `${schedule.cronExpression} (${schedule.timezone})`\n : schedule.atTime || \"-\";\n\n const status = schedule.enabled\n ? chalk.green(\"enabled\")\n : chalk.yellow(\"disabled\");\n\n const nextRun = schedule.enabled\n ? formatRelativeTime(schedule.nextRunAt)\n : \"-\";\n\n const row = [\n schedule.agentId.padEnd(agentWidth),\n schedule.name.padEnd(scheduleWidth),\n trigger.padEnd(triggerWidth),\n status.padEnd(8 + (schedule.enabled ? 0 : 2)),\n nextRun,\n ].join(\" \");\n console.log(row);\n }\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { resolveZeroScheduleByAgent } from \"../../../lib/api\";\nimport {\n formatDateTime,\n detectTimezone,\n} from \"../../../lib/domain/schedule-utils\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport type { ScheduleResponse } from \"@vm0/core\";\n\n/**\n * Format date with styled relative time (adds chalk formatting)\n */\nfunction formatDateTimeStyled(dateStr: string | null): string {\n if (!dateStr) return chalk.dim(\"-\");\n const formatted = formatDateTime(dateStr);\n return formatted.replace(/\\(([^)]+)\\)$/, chalk.dim(\"($1)\"));\n}\n\n/**\n * Format trigger (cron or at) - timezone shown separately\n */\nfunction formatTrigger(schedule: ScheduleResponse): string {\n if (schedule.triggerType === \"loop\" && schedule.intervalSeconds !== null) {\n return `interval ${schedule.intervalSeconds}s ${chalk.dim(\"(loop)\")}`;\n }\n if (schedule.cronExpression) {\n return schedule.cronExpression;\n }\n if (schedule.atTime) {\n return `${schedule.atTime} ${chalk.dim(\"(one-time)\")}`;\n }\n return chalk.dim(\"-\");\n}\n\n/**\n * Print run configuration section\n */\nfunction printRunConfiguration(schedule: ScheduleResponse): void {\n const statusText = schedule.enabled\n ? chalk.green(\"enabled\")\n : chalk.yellow(\"disabled\");\n console.log(`${\"Status:\".padEnd(16)}${statusText}`);\n\n console.log(`${\"Agent:\".padEnd(16)}${schedule.agentId}`);\n\n const promptPreview =\n schedule.prompt.length > 60\n ? schedule.prompt.slice(0, 57) + \"...\"\n : schedule.prompt;\n console.log(`${\"Prompt:\".padEnd(16)}${chalk.dim(promptPreview)}`);\n\n if (schedule.vars && Object.keys(schedule.vars).length > 0) {\n console.log(\n `${\"Variables:\".padEnd(16)}${Object.keys(schedule.vars).join(\", \")}`,\n );\n }\n\n if (schedule.secretNames && schedule.secretNames.length > 0) {\n console.log(`${\"Secrets:\".padEnd(16)}${schedule.secretNames.join(\", \")}`);\n }\n\n if (\n schedule.volumeVersions &&\n Object.keys(schedule.volumeVersions).length > 0\n ) {\n console.log(\n `${\"Volumes:\".padEnd(16)}${Object.keys(schedule.volumeVersions).join(\", \")}`,\n );\n }\n}\n\n/**\n * Print time schedule section\n */\nfunction printTimeSchedule(schedule: ScheduleResponse): void {\n console.log();\n console.log(`${\"Trigger:\".padEnd(16)}${formatTrigger(schedule)}`);\n console.log(`${\"Timezone:\".padEnd(16)}${detectTimezone()}`);\n\n if (schedule.enabled) {\n console.log(\n `${\"Next Run:\".padEnd(16)}${formatDateTimeStyled(schedule.nextRunAt)}`,\n );\n }\n\n if (schedule.triggerType === \"loop\" || schedule.triggerType === \"cron\") {\n const failureText =\n schedule.consecutiveFailures > 0\n ? chalk.yellow(`${schedule.consecutiveFailures}/3`)\n : chalk.dim(\"0/3\");\n console.log(`${\"Failures:\".padEnd(16)}${failureText}`);\n }\n}\n\nexport const statusCommand = new Command()\n .name(\"status\")\n .description(\"Show detailed status of a zero schedule\")\n .argument(\"<agent-id>\", \"Agent ID\")\n .option(\n \"-n, --name <schedule-name>\",\n \"Schedule name (required when agent has multiple schedules)\",\n )\n .addHelpText(\n \"after\",\n `\nExamples:\n zero schedule status <agent-id>\n zero schedule status <agent-id> -n my-schedule`,\n )\n .action(\n withErrorHandler(async (agentName: string, options: { name?: string }) => {\n const schedule = await resolveZeroScheduleByAgent(\n agentName,\n options.name,\n );\n\n console.log();\n console.log(`Schedule for agent: ${chalk.cyan(agentName)}`);\n console.log(chalk.dim(\"━\".repeat(50)));\n\n printRunConfiguration(schedule);\n printTimeSchedule(schedule);\n\n console.log();\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport {\n deleteZeroSchedule,\n resolveZeroScheduleByAgent,\n} from \"../../../lib/api\";\nimport { isInteractive, promptConfirm } from \"../../../lib/utils/prompt-utils\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const deleteCommand = new Command()\n .name(\"delete\")\n .alias(\"rm\")\n .description(\"Delete a zero schedule\")\n .argument(\"<agent-id>\", \"Agent ID\")\n .option(\n \"-n, --name <schedule-name>\",\n \"Schedule name (required when agent has multiple schedules)\",\n )\n .option(\"-y, --yes\", \"Skip confirmation prompt\")\n .addHelpText(\n \"after\",\n `\nExamples:\n zero schedule delete <agent-id>\n zero schedule delete <agent-id> -n my-schedule -y\n\nNotes:\n - Use -y to skip confirmation in non-interactive mode`,\n )\n .action(\n withErrorHandler(\n async (agentName: string, options: { name?: string; yes?: boolean }) => {\n const resolved = await resolveZeroScheduleByAgent(\n agentName,\n options.name,\n );\n\n if (!options.yes) {\n if (!isInteractive()) {\n throw new Error(\"--yes flag is required in non-interactive mode\");\n }\n const confirmed = await promptConfirm(\n `Delete schedule for agent ${chalk.cyan(agentName)}?`,\n false,\n );\n if (!confirmed) {\n console.log(chalk.dim(\"Cancelled\"));\n return;\n }\n }\n\n await deleteZeroSchedule({\n name: resolved.name,\n agentId: resolved.agentId,\n });\n\n console.log(chalk.green(`✓ Schedule \"${resolved.name}\" deleted`));\n },\n ),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport {\n enableZeroSchedule,\n resolveZeroScheduleByAgent,\n} from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const enableCommand = new Command()\n .name(\"enable\")\n .description(\"Enable a zero schedule\")\n .argument(\"<agent-id>\", \"Agent ID\")\n .option(\n \"-n, --name <schedule-name>\",\n \"Schedule name (required when agent has multiple schedules)\",\n )\n .addHelpText(\n \"after\",\n `\nExamples:\n zero schedule enable <agent-id>\n zero schedule enable <agent-id> -n my-schedule`,\n )\n .action(\n withErrorHandler(async (agentName: string, options: { name?: string }) => {\n const resolved = await resolveZeroScheduleByAgent(\n agentName,\n options.name,\n );\n\n await enableZeroSchedule({\n name: resolved.name,\n agentId: resolved.agentId,\n });\n\n console.log(chalk.green(`✓ Schedule \"${resolved.name}\" enabled`));\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport {\n disableZeroSchedule,\n resolveZeroScheduleByAgent,\n} from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const disableCommand = new Command()\n .name(\"disable\")\n .description(\"Disable a zero schedule\")\n .argument(\"<agent-id>\", \"Agent ID\")\n .option(\n \"-n, --name <schedule-name>\",\n \"Schedule name (required when agent has multiple schedules)\",\n )\n .addHelpText(\n \"after\",\n `\nExamples:\n zero schedule disable <agent-id>\n zero schedule disable <agent-id> -n my-schedule`,\n )\n .action(\n withErrorHandler(async (agentName: string, options: { name?: string }) => {\n const resolved = await resolveZeroScheduleByAgent(\n agentName,\n options.name,\n );\n\n await disableZeroSchedule({\n name: resolved.name,\n agentId: resolved.agentId,\n });\n\n console.log(chalk.green(`✓ Schedule \"${resolved.name}\" disabled`));\n }),\n );\n","import { Command } from \"commander\";\nimport { listCommand } from \"./list\";\nimport { setCommand } from \"./set\";\nimport { deleteCommand } from \"./delete\";\n\nexport const zeroSecretCommand = new Command()\n .name(\"secret\")\n .description(\"Read or write secrets (API keys, tokens)\")\n .addCommand(listCommand)\n .addCommand(setCommand)\n .addCommand(deleteCommand);\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { getConnectorDerivedNames } from \"@vm0/core\";\nimport { listZeroSecrets } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const listCommand = new Command()\n .name(\"list\")\n .alias(\"ls\")\n .description(\"List all secrets\")\n .action(\n withErrorHandler(async () => {\n const result = await listZeroSecrets();\n\n if (result.secrets.length === 0) {\n console.log(chalk.dim(\"No secrets found\"));\n console.log();\n console.log(\"To add a secret:\");\n console.log(chalk.cyan(\" zero secret set MY_API_KEY --body <value>\"));\n return;\n }\n\n console.log(chalk.bold(\"Secrets:\"));\n console.log();\n\n for (const secret of result.secrets) {\n let typeIndicator = \"\";\n let derivedLine: string | null = null;\n\n if (secret.type === \"model-provider\") {\n typeIndicator = chalk.dim(\" [model-provider]\");\n } else if (secret.type === \"connector\") {\n const derived = getConnectorDerivedNames(secret.name);\n if (derived) {\n typeIndicator = chalk.dim(` [${derived.connectorLabel} connector]`);\n derivedLine = chalk.dim(\n `Available as: ${derived.envVarNames.join(\", \")}`,\n );\n } else {\n typeIndicator = chalk.dim(\" [connector]\");\n }\n } else if (secret.type === \"user\") {\n const derived = getConnectorDerivedNames(secret.name);\n if (derived) {\n typeIndicator = chalk.dim(` [${derived.connectorLabel} connector]`);\n derivedLine = chalk.dim(\n `Available as: ${derived.envVarNames.join(\", \")}`,\n );\n }\n }\n\n console.log(` ${chalk.cyan(secret.name)}${typeIndicator}`);\n if (derivedLine) {\n console.log(` ${derivedLine}`);\n }\n if (secret.description) {\n console.log(` ${chalk.dim(secret.description)}`);\n }\n console.log(\n ` ${chalk.dim(`Updated: ${new Date(secret.updatedAt).toLocaleString()}`)}`,\n );\n console.log();\n }\n\n console.log(chalk.dim(`Total: ${result.secrets.length} secret(s)`));\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { setZeroSecret } from \"../../../lib/api\";\nimport { isInteractive, promptPassword } from \"../../../lib/utils/prompt-utils\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const setCommand = new Command()\n .name(\"set\")\n .description(\"Create or update a secret\")\n .argument(\"<name>\", \"Secret name (uppercase, e.g., MY_API_KEY)\")\n .option(\n \"-b, --body <value>\",\n \"Secret value (required in non-interactive mode)\",\n )\n .option(\"-d, --description <description>\", \"Optional description\")\n .action(\n withErrorHandler(\n async (\n name: string,\n options: { body?: string; description?: string },\n ) => {\n let value: string;\n\n if (options.body !== undefined) {\n value = options.body;\n } else if (isInteractive()) {\n const prompted = await promptPassword(\"Enter secret value:\");\n if (prompted === undefined) {\n console.log(chalk.dim(\"Cancelled\"));\n return;\n }\n value = prompted;\n } else {\n throw new Error(\"--body is required in non-interactive mode\", {\n cause: new Error(\n `Usage: zero secret set ${name} --body \"your-secret-value\"`,\n ),\n });\n }\n\n let secret;\n try {\n secret = await setZeroSecret({\n name,\n value,\n description: options.description,\n });\n } catch (error) {\n if (\n error instanceof Error &&\n error.message.includes(\"must contain only uppercase\")\n ) {\n throw new Error(error.message, {\n cause: new Error(\n \"Examples of valid secret names: MY_API_KEY, GITHUB_TOKEN, AWS_ACCESS_KEY_ID\",\n ),\n });\n }\n throw error;\n }\n\n console.log(chalk.green(`✓ Secret \"${secret.name}\" saved`));\n },\n ),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { deleteZeroSecret } from \"../../../lib/api\";\nimport { isInteractive, promptConfirm } from \"../../../lib/utils/prompt-utils\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const deleteCommand = new Command()\n .name(\"delete\")\n .description(\"Delete a secret\")\n .argument(\"<name>\", \"Secret name to delete\")\n .option(\"-y, --yes\", \"Skip confirmation prompt\")\n .action(\n withErrorHandler(async (name: string, options: { yes?: boolean }) => {\n if (!options.yes) {\n if (!isInteractive()) {\n throw new Error(\"--yes flag is required in non-interactive mode\");\n }\n\n const confirmed = await promptConfirm(\n `Are you sure you want to delete secret \"${name}\"?`,\n false,\n );\n\n if (!confirmed) {\n console.log(chalk.dim(\"Cancelled\"));\n return;\n }\n }\n\n await deleteZeroSecret(name);\n console.log(chalk.green(`✓ Secret \"${name}\" deleted`));\n }),\n );\n","import { Command } from \"commander\";\nimport { zeroSlackMessageCommand } from \"./message\";\nimport { uploadFileCommand } from \"./upload-file\";\n\nexport const zeroSlackCommand = new Command()\n .name(\"slack\")\n .description(\"Send messages and upload files to Slack channels as the bot\")\n .addCommand(zeroSlackMessageCommand)\n .addCommand(uploadFileCommand)\n .addHelpText(\n \"after\",\n `\nExamples:\n Send a message: zero slack message send -c <channel-id> -t \"Hello!\"\n Reply in a thread: zero slack message send -c <channel-id> --thread <ts> -t \"reply\"\n Upload a file: zero slack upload-file -f /tmp/report.pdf -c <channel-id>`,\n );\n","import { Command } from \"commander\";\nimport { sendCommand } from \"./send\";\n\nexport const zeroSlackMessageCommand = new Command()\n .name(\"message\")\n .description(\"Manage Slack messages\")\n .addCommand(sendCommand)\n .addHelpText(\n \"after\",\n `\nExamples:\n zero slack message send -c <channel-id> -t \"Hello!\"`,\n );\n","import { readFileSync } from \"fs\";\nimport { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { sendSlackMessage } from \"../../../../lib/api\";\nimport { withErrorHandler } from \"../../../../lib/command\";\n\nexport const sendCommand = new Command()\n .name(\"send\")\n .description(\"Send a message to a Slack channel or DM a user\")\n .option(\"-c, --channel <id>\", \"Channel ID\")\n .option(\"-u, --user <id>\", \"Slack user ID for DM\")\n .option(\"-t, --text <message>\", \"Message text\")\n .option(\"--thread <ts>\", \"Thread timestamp for replies\")\n .option(\"--blocks <json>\", \"Block Kit JSON string\")\n .addHelpText(\n \"after\",\n `\nExamples:\n Simple message: zero slack message send -c C01234 -t \"Hello!\"\n DM a user: zero slack message send -u U0A8V9X98QJ -t \"Hello!\"\n Reply in thread: zero slack message send -c C01234 --thread 1234567890.123456 -t \"reply\"\n Rich blocks: zero slack message send -c C01234 --blocks '[{\"type\":\"section\",\"text\":{\"type\":\"mrkdwn\",\"text\":\"*Bold*\"}}]'\n\nNotes:\n - Either --channel or --user is required; they are mutually exclusive\n - Either --text or --blocks is required; both can be used together`,\n )\n .action(\n withErrorHandler(\n async (options: {\n channel?: string;\n user?: string;\n text?: string;\n thread?: string;\n blocks?: string;\n }) => {\n let text = options.text;\n const { channel, user, thread, blocks: blocksStr } = options;\n\n // Validate mutual exclusion: exactly one of --channel or --user\n if (!channel && !user) {\n throw new Error(\"Either --channel or --user must be provided\", {\n cause: new Error(\n 'Usage: zero slack message send -c CHANNEL_ID -t \"your message\"\\n zero slack message send -u USER_ID -t \"your message\"',\n ),\n });\n }\n if (channel && user) {\n throw new Error(\"--channel and --user are mutually exclusive\", {\n cause: new Error(\n \"Provide either --channel to send to a channel or --user to DM a user, not both\",\n ),\n });\n }\n\n // Read from stdin if text not provided and stdin is explicitly piped\n // (isTTY is false when piped, undefined when no TTY context e.g. tests)\n if (!text && process.stdin.isTTY === false) {\n text = readFileSync(\"/dev/stdin\", \"utf8\").trim();\n }\n\n // Parse blocks JSON if provided\n let blocks: Array<{ type: string; [key: string]: unknown }> | undefined;\n if (blocksStr) {\n try {\n blocks = JSON.parse(blocksStr) as Array<{\n type: string;\n [key: string]: unknown;\n }>;\n } catch {\n throw new Error(\"Invalid JSON for --blocks flag\", {\n cause: new Error(\n \"Provide a valid JSON array of Block Kit blocks\",\n ),\n });\n }\n }\n\n // Validate at least one of text or blocks\n if (!text && !blocks) {\n throw new Error(\"Either --text or --blocks must be provided\", {\n cause: new Error(\n 'Usage: zero slack message send -c CHANNEL_ID -t \"your message\"',\n ),\n });\n }\n\n const result = await sendSlackMessage({\n channel: channel || undefined,\n user: user || undefined,\n text: text || undefined,\n threadTs: thread,\n blocks,\n });\n\n const tsInfo = result.ts ? ` (ts: ${result.ts})` : \"\";\n console.log(chalk.green(`✓ Message sent${tsInfo}`));\n },\n ),\n );\n","import { statSync, readFileSync } from \"fs\";\nimport { basename } from \"path\";\nimport { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { initSlackFileUpload, completeSlackFileUpload } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const uploadFileCommand = new Command()\n .name(\"upload-file\")\n .description(\"Upload a file to a Slack channel as the bot\")\n .requiredOption(\"-f, --file <path>\", \"Local file path to upload\")\n .requiredOption(\"-c, --channel <id>\", \"Slack channel ID\")\n .option(\"--thread <ts>\", \"Thread timestamp to post as a reply\")\n .option(\"--title <title>\", \"Display title for the file\")\n .option(\"--comment <text>\", \"Initial comment to accompany the file\")\n .addHelpText(\n \"after\",\n `\nExamples:\n Upload a file: zero slack upload-file -f /tmp/report.pdf -c C01234\n Upload to thread: zero slack upload-file -f /tmp/log.txt -c C01234 --thread 1234567890.123456\n With title and comment: zero slack upload-file -f /tmp/data.csv -c C01234 --title \"Daily Report\" --comment \"Here's the report\"\n\nNotes:\n - Uses the bot token (not user SLACK_TOKEN), so no files:write permission is needed\n - Returns file_id and permalink for reference`,\n )\n .action(\n withErrorHandler(\n async (options: {\n file: string;\n channel: string;\n thread?: string;\n title?: string;\n comment?: string;\n }) => {\n // Validate file exists and get size\n let fileSize: number;\n try {\n const stat = statSync(options.file);\n fileSize = stat.size;\n } catch {\n throw new Error(`File not found: ${options.file}`);\n }\n\n if (fileSize === 0) {\n throw new Error(\"File is empty\");\n }\n\n const filename = basename(options.file);\n\n // Step 1: Get pre-signed upload URL from server\n const { uploadUrl, fileId } = await initSlackFileUpload({\n filename,\n length: fileSize,\n });\n\n // Step 2: Upload file directly to Slack's pre-signed URL\n const fileContent = readFileSync(options.file);\n const uploadResponse = await fetch(uploadUrl, {\n method: \"POST\",\n body: fileContent,\n });\n\n if (!uploadResponse.ok) {\n throw new Error(\n `File upload failed: ${uploadResponse.status} ${uploadResponse.statusText}`,\n );\n }\n\n // Step 3: Complete the upload and share to channel/thread\n const result = await completeSlackFileUpload({\n fileId,\n channel: options.channel,\n threadTs: options.thread,\n title: options.title,\n initialComment: options.comment,\n });\n\n console.log(chalk.green(`✓ File uploaded (file_id: ${result.fileId})`));\n console.log(chalk.dim(` permalink: ${result.permalink}`));\n },\n ),\n );\n","import { Command } from \"commander\";\nimport { listCommand } from \"./list\";\nimport { setCommand } from \"./set\";\nimport { deleteCommand } from \"./delete\";\n\nexport const zeroVariableCommand = new Command()\n .name(\"variable\")\n .description(\"Read or write non-sensitive configuration values\")\n .addCommand(listCommand)\n .addCommand(setCommand)\n .addCommand(deleteCommand);\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { listZeroVariables } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\n/**\n * Truncate value for display if too long\n */\nfunction truncateValue(value: string, maxLength: number = 60): string {\n if (value.length <= maxLength) {\n return value;\n }\n return value.slice(0, maxLength - 15) + \"... [truncated]\";\n}\n\nexport const listCommand = new Command()\n .name(\"list\")\n .alias(\"ls\")\n .description(\"List all variables\")\n .action(\n withErrorHandler(async () => {\n const result = await listZeroVariables();\n\n if (result.variables.length === 0) {\n console.log(chalk.dim(\"No variables found\"));\n console.log();\n console.log(\"To add a variable:\");\n console.log(chalk.cyan(\" zero variable set MY_VAR <value>\"));\n return;\n }\n\n console.log(chalk.bold(\"Variables:\"));\n console.log();\n\n for (const variable of result.variables) {\n const displayValue = truncateValue(variable.value);\n console.log(` ${chalk.cyan(variable.name)} = ${displayValue}`);\n if (variable.description) {\n console.log(` ${chalk.dim(variable.description)}`);\n }\n console.log(\n ` ${chalk.dim(`Updated: ${new Date(variable.updatedAt).toLocaleString()}`)}`,\n );\n console.log();\n }\n\n console.log(chalk.dim(`Total: ${result.variables.length} variable(s)`));\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { setZeroVariable } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const setCommand = new Command()\n .name(\"set\")\n .description(\"Create or update a variable\")\n .argument(\"<name>\", \"Variable name (uppercase, e.g., MY_VAR)\")\n .argument(\"<value>\", \"Variable value\")\n .option(\"-d, --description <description>\", \"Optional description\")\n .action(\n withErrorHandler(\n async (\n name: string,\n value: string,\n options: { description?: string },\n ) => {\n let variable;\n try {\n variable = await setZeroVariable({\n name,\n value,\n description: options.description,\n });\n } catch (error) {\n if (\n error instanceof Error &&\n error.message.includes(\"must contain only uppercase\")\n ) {\n throw new Error(error.message, {\n cause: new Error(\n \"Examples of valid variable names: MY_VAR, API_URL, DEBUG_MODE\",\n ),\n });\n }\n throw error;\n }\n\n console.log(chalk.green(`✓ Variable \"${variable.name}\" saved`));\n },\n ),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { deleteZeroVariable } from \"../../../lib/api\";\nimport { isInteractive, promptConfirm } from \"../../../lib/utils/prompt-utils\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const deleteCommand = new Command()\n .name(\"delete\")\n .description(\"Delete a variable\")\n .argument(\"<name>\", \"Variable name to delete\")\n .option(\"-y, --yes\", \"Skip confirmation prompt\")\n .action(\n withErrorHandler(async (name: string, options: { yes?: boolean }) => {\n if (!options.yes) {\n if (!isInteractive()) {\n throw new Error(\"--yes flag is required in non-interactive mode\");\n }\n\n const confirmed = await promptConfirm(\n `Are you sure you want to delete variable \"${name}\"?`,\n false,\n );\n\n if (!confirmed) {\n console.log(chalk.dim(\"Cancelled\"));\n return;\n }\n }\n\n await deleteZeroVariable(name);\n console.log(chalk.green(`✓ Variable \"${name}\" deleted`));\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport {\n getApiUrl,\n getActiveOrg,\n getToken,\n decodeZeroTokenPayload,\n} from \"../../lib/api/config\";\nimport {\n listZeroConnectors,\n getZeroAgent,\n getZeroAgentUserConnectors,\n} from \"../../lib/api\";\nimport { withErrorHandler } from \"../../lib/command\";\nimport {\n isFirewallConnectorType,\n getConnectorFirewall,\n resolveFirewallPolicies,\n type FirewallPolicies,\n} from \"@vm0/core\";\nimport { policyIcon } from \"../../lib/utils/format-utils\";\n\n/**\n * Detect if running inside a zero sandbox (agent runtime).\n * Uses ZERO_AGENT_ID (not VM0_RUN_ID) because the zero CLI operates in the\n * zero agent context where ZERO_AGENT_ID is the canonical sandbox indicator.\n */\nfunction isInsideSandbox(): boolean {\n return !!process.env.ZERO_AGENT_ID;\n}\n\nfunction formatConnectorIdentity(connector: {\n externalUsername: string | null;\n externalEmail: string | null;\n needsReconnect: boolean;\n}): string {\n let identity = \"\";\n if (connector.externalUsername && connector.externalEmail) {\n identity = `@${connector.externalUsername} (${connector.externalEmail})`;\n } else if (connector.externalUsername) {\n identity = `@${connector.externalUsername}`;\n } else if (connector.externalEmail) {\n identity = connector.externalEmail;\n }\n if (connector.needsReconnect) {\n identity += ` ${chalk.yellow(\"(needs reconnect)\")}`;\n }\n return identity;\n}\n\nfunction printConnectorPermissions(\n type: string,\n resolvedPolicies: FirewallPolicies | null,\n): void {\n if (!isFirewallConnectorType(type)) return;\n\n const refPolicy = resolvedPolicies?.[type];\n if (!refPolicy) {\n console.log(chalk.dim(\" full access — no permission rules configured\"));\n return;\n }\n\n const config = getConnectorFirewall(type);\n const permissions = config.apis.flatMap((a) => {\n return a.permissions ?? [];\n });\n\n if (\n permissions.length === 0 &&\n Object.keys(refPolicy.policies).length === 0\n ) {\n const unknownIcon = policyIcon(refPolicy.unknownPolicy ?? \"allow\");\n console.log(` ${unknownIcon} unknown endpoints`);\n return;\n }\n\n const nameWidth = Math.max(\n \"unknown endpoints\".length,\n ...permissions.map((p) => {\n return p.name.length;\n }),\n );\n\n for (const perm of permissions) {\n const policy = refPolicy.policies[perm.name] ?? \"deny\";\n const icon = policyIcon(policy);\n const desc = perm.description ?? \"\";\n console.log(` ${icon} ${perm.name.padEnd(nameWidth)} ${desc}`);\n }\n\n const unknownIcon = policyIcon(refPolicy.unknownPolicy ?? \"allow\");\n console.log(\n ` ${unknownIcon} ${\"unknown endpoints\".padEnd(nameWidth)} Endpoints not matching any rule`,\n );\n}\n\nasync function showSandboxInfo(showPermissions: boolean): Promise<void> {\n const agentId = process.env.ZERO_AGENT_ID;\n const payload = decodeZeroTokenPayload();\n\n console.log(`Agent ID: ${agentId}`);\n console.log(`Run ID: ${payload?.runId ?? chalk.dim(\"unavailable\")}`);\n console.log(`Org ID: ${payload?.orgId ?? chalk.dim(\"unavailable\")}`);\n\n // Capabilities section\n if (payload?.capabilities?.length) {\n console.log();\n console.log(chalk.bold(\"Capabilities:\"));\n console.log(` ${payload.capabilities.join(\", \")}`);\n }\n\n // Connected Services section\n try {\n if (showPermissions) {\n // Full mode: fetch all 3 APIs for permission details\n const [connectorsResult, agentResult, enabledResult] =\n await Promise.allSettled([\n listZeroConnectors(),\n getZeroAgent(agentId!),\n getZeroAgentUserConnectors(agentId!),\n ]);\n\n if (connectorsResult.status === \"rejected\") return;\n\n const identities = connectorsResult.value.connectors.filter((c) => {\n return c.externalUsername !== null || c.externalEmail !== null;\n });\n\n if (identities.length === 0) return;\n\n let resolvedPolicies: FirewallPolicies | null = null;\n const permissionDataAvailable =\n agentResult.status === \"fulfilled\" &&\n enabledResult.status === \"fulfilled\";\n if (permissionDataAvailable) {\n resolvedPolicies = resolveFirewallPolicies(\n agentResult.value.permissionPolicies,\n enabledResult.value,\n );\n }\n\n console.log();\n console.log(chalk.bold(\"Connectors:\"));\n for (const connector of identities) {\n const identity = formatConnectorIdentity(connector);\n console.log(` ${connector.type.padEnd(14)}${identity}`);\n\n if (permissionDataAvailable) {\n printConnectorPermissions(connector.type, resolvedPolicies);\n }\n }\n } else {\n // Default mode: only fetch connector identities (1 API call)\n const connectors = await listZeroConnectors();\n const identities = connectors.connectors.filter((c) => {\n return c.externalUsername !== null || c.externalEmail !== null;\n });\n\n if (identities.length === 0) return;\n\n console.log();\n console.log(chalk.bold(\"Connectors:\"));\n for (const connector of identities) {\n const identity = formatConnectorIdentity(connector);\n console.log(` ${connector.type.padEnd(14)}${identity}`);\n }\n }\n } catch {\n // Silently skip — connector info is supplementary\n }\n}\n\nasync function showLocalInfo(): Promise<void> {\n const token = await getToken();\n const apiUrl = await getApiUrl();\n const activeOrg = await getActiveOrg();\n\n // Auth section\n console.log(chalk.bold(\"Auth:\"));\n if (token) {\n const tokenSource = process.env.ZERO_TOKEN\n ? \"ZERO_TOKEN env var\"\n : process.env.VM0_TOKEN\n ? \"VM0_TOKEN env var\"\n : \"config file\";\n console.log(\n ` Status: ${chalk.green(\"Authenticated\")} (via ${tokenSource})`,\n );\n } else {\n console.log(` Status: ${chalk.dim(\"Not authenticated\")}`);\n }\n console.log(` API: ${apiUrl}`);\n console.log();\n\n // Org section\n if (activeOrg) {\n console.log(chalk.bold(\"Org:\"));\n console.log(` Active: ${activeOrg}`);\n }\n}\n\nexport const zeroWhoamiCommand = new Command()\n .name(\"whoami\")\n .description(\"Show agent identity, run ID, and capabilities\")\n .option(\"--permissions\", \"Show full permission details for each connector\")\n .addHelpText(\n \"after\",\n `\nExamples:\n zero whoami\n zero whoami --permissions\n\nNotes:\n - Inside sandbox: shows agent ID, run ID, org ID, and granted capabilities\n - Use --permissions to see detailed permission breakdown per connector\n - Your agent ID is also available as $ZERO_AGENT_ID`,\n )\n .action(\n withErrorHandler(async (options: { permissions?: boolean }) => {\n if (isInsideSandbox()) {\n await showSandboxInfo(options.permissions ?? false);\n } else {\n await showLocalInfo();\n }\n }),\n );\n","import { Command } from \"commander\";\nimport { createCommand } from \"./create\";\nimport { editCommand } from \"./edit\";\nimport { viewCommand } from \"./view\";\nimport { listCommand } from \"./list\";\nimport { deleteCommand } from \"./delete\";\n\nexport const zeroSkillCommand = new Command(\"skill\")\n .description(\"Manage custom skills\")\n .addCommand(createCommand)\n .addCommand(editCommand)\n .addCommand(viewCommand)\n .addCommand(listCommand)\n .addCommand(deleteCommand)\n .addHelpText(\n \"after\",\n `\nExamples:\n Create from directory: zero skill create my-skill --dir ./skills/my-skill/\n List all skills: zero skill list\n View skill content: zero skill view my-skill\n Update skill content: zero skill edit my-skill --dir ./skills/my-skill/\n Delete a skill: zero skill delete my-skill -y\n\nSkill Binding:\n Bind to agent: zero agent edit <id> --add-skill my-skill\n Unbind from agent: zero agent edit <id> --remove-skill my-skill\n Replace all skills: zero agent edit <id> --skills a,b,c`,\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { createSkill } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { readSkillDirectory } from \"../../../lib/skill-directory\";\n\nexport const createCommand = new Command()\n .name(\"create\")\n .description(\"Create a custom skill in the organization\")\n .argument(\"<name>\", \"Skill name (lowercase alphanumeric with hyphens)\")\n .requiredOption(\"--dir <path>\", \"Path to directory containing SKILL.md\")\n .option(\"--display-name <name>\", \"Skill display name\")\n .option(\"--description <text>\", \"Skill description\")\n .addHelpText(\n \"after\",\n `\nExamples:\n zero skill create my-skill --dir ./skills/my-skill/\n zero skill create my-skill --dir ./skills/my-skill/ --display-name \"My Skill\" --description \"Does things\"\n\nNotes:\n - The directory must contain a SKILL.md file\n - All files in the directory are uploaded (hidden files and node_modules excluded)\n - The skill is created in the organization but not bound to any agent\n - Use 'zero agent edit <id> --add-skill <name>' to bind a skill to an agent`,\n )\n .action(\n withErrorHandler(\n async (\n name: string,\n options: {\n dir: string;\n displayName?: string;\n description?: string;\n },\n ) => {\n const files = readSkillDirectory(options.dir);\n\n const skill = await createSkill({\n name,\n files,\n displayName: options.displayName,\n description: options.description,\n });\n\n console.log(chalk.green(`✓ Skill \"${skill.name}\" created`));\n console.log(` Name: ${skill.name}`);\n console.log(` Files: ${files.length} file(s)`);\n if (skill.displayName) {\n console.log(` Display Name: ${skill.displayName}`);\n }\n if (skill.description) {\n console.log(` Description: ${skill.description}`);\n }\n },\n ),\n );\n","import { readFileSync, readdirSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\nconst IGNORED_NAMES = new Set([\"node_modules\", \".git\", \".DS_Store\"]);\n\n/**\n * Recursively read all files from a skill directory.\n *\n * Skips hidden files (starting with .), node_modules, and .git.\n * Throws if SKILL.md is not found at the root.\n */\nexport function readSkillDirectory(\n dirPath: string,\n): Array<{ path: string; content: string }> {\n const files: Array<{ path: string; content: string }> = [];\n\n function walk(dir: string, prefix: string) {\n const entries = readdirSync(dir, { withFileTypes: true });\n for (const entry of entries) {\n if (entry.name.startsWith(\".\") || IGNORED_NAMES.has(entry.name)) continue;\n\n const relPath = prefix ? `${prefix}/${entry.name}` : entry.name;\n if (entry.isDirectory()) {\n walk(join(dir, entry.name), relPath);\n } else {\n files.push({\n path: relPath,\n content: readFileSync(join(dir, entry.name), \"utf-8\"),\n });\n }\n }\n }\n\n walk(dirPath, \"\");\n\n if (\n !files.some((f) => {\n return f.path === \"SKILL.md\";\n })\n ) {\n throw new Error(`SKILL.md not found in ${dirPath}`);\n }\n\n return files;\n}\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { updateSkill } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { readSkillDirectory } from \"../../../lib/skill-directory\";\n\nexport const editCommand = new Command()\n .name(\"edit\")\n .description(\"Update a custom skill's content\")\n .argument(\"<name>\", \"Skill name\")\n .requiredOption(\n \"--dir <path>\",\n \"Path to directory containing updated skill files\",\n )\n .addHelpText(\n \"after\",\n `\nExamples:\n zero skill edit my-skill --dir ./skills/my-skill/`,\n )\n .action(\n withErrorHandler(async (name: string, options: { dir: string }) => {\n const files = readSkillDirectory(options.dir);\n await updateSkill(name, { files });\n\n console.log(\n chalk.green(`✓ Skill \"${name}\" updated (${files.length} file(s))`),\n );\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { getSkill } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const viewCommand = new Command()\n .name(\"view\")\n .description(\"View a custom skill\")\n .argument(\"<name>\", \"Skill name\")\n .addHelpText(\n \"after\",\n `\nExamples:\n zero skill view my-skill`,\n )\n .action(\n withErrorHandler(async (name: string) => {\n const skill = await getSkill(name);\n\n console.log(chalk.bold(skill.name));\n if (skill.displayName) console.log(chalk.dim(skill.displayName));\n console.log();\n console.log(`Name: ${skill.name}`);\n if (skill.displayName) console.log(`Display Name: ${skill.displayName}`);\n if (skill.description) console.log(`Description: ${skill.description}`);\n\n if (skill.files && skill.files.length > 0) {\n console.log();\n console.log(chalk.dim(\"── Files ──\"));\n for (const f of skill.files) {\n console.log(` ${f.path} (${f.size} bytes)`);\n }\n }\n\n console.log();\n if (skill.content) {\n console.log(chalk.dim(\"── SKILL.md ──\"));\n console.log(skill.content);\n } else {\n console.log(chalk.dim(\"No content\"));\n }\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { listSkills } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const listCommand = new Command()\n .name(\"list\")\n .alias(\"ls\")\n .description(\"List custom skills in the organization\")\n .addHelpText(\n \"after\",\n `\nExamples:\n zero skill list`,\n )\n .action(\n withErrorHandler(async () => {\n const skills = await listSkills();\n\n if (skills.length === 0) {\n console.log(chalk.dim(\"No custom skills found\"));\n console.log(\n chalk.dim(\" Create one with: zero skill create <name> --dir <path>\"),\n );\n return;\n }\n\n const nameWidth = Math.max(\n 4,\n ...skills.map((s) => {\n return s.name.length;\n }),\n );\n const displayWidth = Math.max(\n 12,\n ...skills.map((s) => {\n return (s.displayName ?? \"\").length;\n }),\n );\n\n const header = [\n \"NAME\".padEnd(nameWidth),\n \"DISPLAY NAME\".padEnd(displayWidth),\n \"DESCRIPTION\",\n ].join(\" \");\n console.log(chalk.dim(header));\n\n for (const skill of skills) {\n const row = [\n skill.name.padEnd(nameWidth),\n (skill.displayName ?? \"-\").padEnd(displayWidth),\n skill.description ?? \"-\",\n ].join(\" \");\n console.log(row);\n }\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { getSkill, deleteSkill } from \"../../../lib/api\";\nimport { isInteractive, promptConfirm } from \"../../../lib/utils/prompt-utils\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const deleteCommand = new Command()\n .name(\"delete\")\n .alias(\"rm\")\n .description(\"Delete a custom skill from the organization\")\n .argument(\"<name>\", \"Skill name\")\n .option(\"-y, --yes\", \"Skip confirmation prompt\")\n .addHelpText(\n \"after\",\n `\nExamples:\n zero skill delete my-skill\n zero skill delete my-skill -y\n\nNotes:\n - This removes the skill from the organization and unbinds it from all agents\n - Use -y to skip confirmation in non-interactive mode`,\n )\n .action(\n withErrorHandler(async (name: string, options: { yes?: boolean }) => {\n await getSkill(name);\n\n if (!options.yes) {\n if (!isInteractive()) {\n throw new Error(\"--yes flag is required in non-interactive mode\");\n }\n const confirmed = await promptConfirm(\n `Delete skill '${name}'? This will unbind it from all agents.`,\n false,\n );\n if (!confirmed) {\n console.log(chalk.dim(\"Cancelled\"));\n return;\n }\n }\n\n await deleteSkill(name);\n console.log(chalk.green(`✓ Skill \"${name}\" deleted`));\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { getZeroRunAgentEvents, type RunEvent } from \"../../../lib/api\";\nimport { parseTime } from \"../../../lib/utils/time-parser\";\nimport { ClaudeEventParser } from \"../../../lib/events/claude-event-parser\";\nimport { EventRenderer } from \"../../../lib/events/event-renderer\";\nimport { paginate } from \"../../../lib/utils/paginate\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { isUUID } from \"../../run/shared\";\nimport { listCommand } from \"./list\";\nimport { searchCommand } from \"./search\";\n\nconst PAGE_LIMIT = 100;\n\nfunction renderAgentEvent(event: RunEvent, renderer: EventRenderer): void {\n const eventData = event.eventData as Record<string, unknown>;\n const parsed = ClaudeEventParser.parse(eventData);\n if (parsed) {\n parsed.timestamp = new Date(event.createdAt);\n renderer.render(parsed);\n }\n}\n\nasync function showAgentEvents(\n runId: string,\n options: {\n since?: number;\n targetCount: number | \"all\";\n order: \"asc\" | \"desc\";\n },\n): Promise<void> {\n const firstResponse = await getZeroRunAgentEvents(runId, {\n since: options.since,\n limit: PAGE_LIMIT,\n order: options.order,\n });\n\n if (firstResponse.events.length === 0) {\n console.log(chalk.yellow(\"No agent events found for this run\"));\n return;\n }\n\n let allEvents: RunEvent[];\n\n if (\n !firstResponse.hasMore ||\n (options.targetCount !== \"all\" &&\n firstResponse.events.length >= options.targetCount)\n ) {\n allEvents =\n options.targetCount === \"all\"\n ? firstResponse.events\n : firstResponse.events.slice(0, options.targetCount);\n } else {\n const lastEvent = firstResponse.events[firstResponse.events.length - 1];\n const firstPageTimestamp = lastEvent\n ? new Date(lastEvent.createdAt).getTime()\n : undefined;\n\n const remainingEvents = await paginate<RunEvent>({\n fetchPage: async (since) => {\n const response = await getZeroRunAgentEvents(runId, {\n since,\n limit: PAGE_LIMIT,\n order: options.order,\n });\n return { items: response.events, hasMore: response.hasMore };\n },\n getTimestamp: (event) => {\n return new Date(event.createdAt).getTime();\n },\n targetCount:\n options.targetCount === \"all\"\n ? \"all\"\n : options.targetCount - firstResponse.events.length,\n initialSince: firstPageTimestamp,\n });\n\n allEvents = [...firstResponse.events, ...remainingEvents];\n\n if (\n options.targetCount !== \"all\" &&\n allEvents.length > options.targetCount\n ) {\n allEvents = allEvents.slice(0, options.targetCount);\n }\n }\n\n const events =\n options.order === \"desc\" ? [...allEvents].reverse() : allEvents;\n\n const renderer = new EventRenderer({\n showTimestamp: true,\n verbose: true,\n });\n\n for (const event of events) {\n renderAgentEvent(event, renderer);\n }\n}\n\nexport const zeroLogsCommand = new Command()\n .name(\"logs\")\n .description(\"View and search agent run logs\")\n .argument(\"[runId]\", \"Run ID to view agent events for\")\n .addCommand(listCommand)\n .addCommand(searchCommand)\n .option(\n \"--since <time>\",\n \"Show logs since timestamp (e.g., 5m, 2h, 1d, 2024-01-15T10:30:00Z)\",\n )\n .option(\"--tail <n>\", \"Show last N entries (default: 5)\")\n .option(\"--head <n>\", \"Show first N entries\")\n .option(\"--all\", \"Fetch all log entries\")\n .addHelpText(\n \"after\",\n `\nExamples:\n zero logs list\n zero logs <runId>\n zero logs <runId> --tail 10\n zero logs <runId> --all\n zero logs search \"error\"`,\n )\n .action(\n withErrorHandler(\n async (\n runId: string | undefined,\n options: {\n since?: string;\n tail?: string;\n head?: string;\n all?: boolean;\n },\n ) => {\n if (!runId) {\n zeroLogsCommand.help();\n return;\n }\n\n if (!isUUID(runId)) {\n console.error(\n chalk.red(`✗ Invalid run ID \"${runId}\" — expected a UUID`),\n );\n console.error(chalk.dim(\" Run: zero logs list to find run IDs\"));\n process.exit(1);\n }\n\n const countModes = [\n options.tail !== undefined,\n options.head !== undefined,\n options.all === true,\n ].filter(Boolean).length;\n if (countModes > 1) {\n throw new Error(\n \"Options --tail, --head, and --all are mutually exclusive\",\n );\n }\n\n let since: number | undefined;\n if (options.since) {\n since = parseTime(options.since);\n }\n\n const isAll = options.all === true;\n const isHead = options.head !== undefined;\n const isTail = options.tail !== undefined;\n\n let targetCount: number | \"all\";\n if (isAll) {\n targetCount = \"all\";\n } else if (isHead) {\n targetCount = Math.max(1, parseInt(options.head!, 10));\n } else if (isTail) {\n targetCount = Math.max(1, parseInt(options.tail!, 10));\n } else {\n targetCount = 5;\n }\n\n const order: \"asc\" | \"desc\" = isHead ? \"asc\" : \"desc\";\n\n await showAgentEvents(runId, { since, targetCount, order });\n },\n ),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { listZeroLogs } from \"../../../lib/api\";\nimport { parseTime } from \"../../../lib/utils/time-parser\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nfunction formatStatus(status: string): string {\n switch (status) {\n case \"completed\":\n return chalk.green(status);\n case \"failed\":\n case \"timeout\":\n return chalk.red(status);\n case \"running\":\n case \"pending\":\n case \"queued\":\n return chalk.yellow(status);\n case \"cancelled\":\n return chalk.dim(status);\n default:\n return status;\n }\n}\n\nfunction formatTime(iso: string): string {\n return new Date(iso).toISOString().replace(/\\.\\d{3}Z$/, \"Z\");\n}\n\nexport const listCommand = new Command()\n .name(\"list\")\n .alias(\"ls\")\n .description(\"List agent run logs\")\n .option(\"--agent <name>\", \"Filter by agent name\")\n .option(\n \"--status <status>\",\n \"Filter by status (queued|pending|running|completed|failed|timeout|cancelled)\",\n )\n .option(\n \"--since <time>\",\n \"Filter runs created since (e.g., 5m, 2h, 1d, 2024-01-15T10:30:00Z)\",\n )\n .option(\"--limit <n>\", \"Maximum number of results (default: 20)\")\n .addHelpText(\n \"after\",\n `\nExamples:\n zero logs list\n zero logs list --agent my-agent\n zero logs list --status completed --limit 10\n zero logs list --since 1h\n zero logs list --since 1d --status completed`,\n )\n .action(\n withErrorHandler(\n async (options: {\n agent?: string;\n status?: string;\n since?: string;\n limit?: string;\n }) => {\n const limit = options.limit ? parseInt(options.limit, 10) : undefined;\n const since = options.since ? parseTime(options.since) : undefined;\n\n const result = await listZeroLogs({\n agent: options.agent,\n status: options.status,\n since,\n limit,\n });\n\n if (result.data.length === 0) {\n console.log(chalk.dim(\"No logs found\"));\n return;\n }\n\n const nameCol = Math.max(\n 5,\n ...result.data.map((r) => {\n return (r.displayName || r.agentId || \"-\").length;\n }),\n );\n const statusCol = Math.max(\n 6,\n ...result.data.map((r) => {\n return r.status.length;\n }),\n );\n\n const header = [\n \"RUN ID\".padEnd(38),\n \"AGENT\".padEnd(nameCol),\n \"STATUS\".padEnd(statusCol),\n \"CREATED\",\n ].join(\" \");\n console.log(chalk.dim(header));\n\n for (const entry of result.data) {\n const runId = entry.id;\n const name = entry.displayName || entry.agentId || \"-\";\n const row = [\n runId.padEnd(38),\n name.padEnd(nameCol),\n formatStatus(entry.status).padEnd(statusCol),\n formatTime(entry.createdAt),\n ].join(\" \");\n console.log(row);\n }\n\n if (result.pagination.hasMore) {\n console.log();\n console.log(\n chalk.dim(\n ` Showing ${result.data.length} of more results. Use --limit to adjust.`,\n ),\n );\n }\n },\n ),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport {\n searchZeroLogs,\n type RunEvent,\n type LogsSearchResponse,\n} from \"../../../lib/api\";\nimport { parseTime } from \"../../../lib/utils/time-parser\";\nimport { ClaudeEventParser } from \"../../../lib/events/claude-event-parser\";\nimport { EventRenderer } from \"../../../lib/events/event-renderer\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { isUUID } from \"../../run/shared\";\n\nconst SEVEN_DAYS_MS = 7 * 24 * 60 * 60 * 1000;\n\ninterface SearchOptions {\n afterContext?: string;\n beforeContext?: string;\n context?: string;\n agent?: string;\n run?: string;\n since?: string;\n limit?: string;\n}\n\nfunction renderEvent(event: RunEvent, renderer: EventRenderer): void {\n const eventData = event.eventData as Record<string, unknown>;\n const parsed = ClaudeEventParser.parse(eventData);\n if (parsed) {\n parsed.timestamp = new Date(event.createdAt);\n renderer.render(parsed);\n }\n}\n\nfunction formatRunHeader(\n runId: string,\n agentName: string,\n timestamp: string,\n): string {\n const time = new Date(timestamp).toISOString().replace(/\\.\\d{3}Z$/, \"Z\");\n return `── Run ${runId} (${agentName}, ${time}) ──────────`;\n}\n\nfunction parseContextOptions(options: SearchOptions): {\n before: number;\n after: number;\n} {\n const contextN = options.context ? parseInt(options.context, 10) : 0;\n const before = options.beforeContext\n ? parseInt(options.beforeContext, 10)\n : contextN;\n const after = options.afterContext\n ? parseInt(options.afterContext, 10)\n : contextN;\n\n if (isNaN(before) || before < 0 || before > 10) {\n throw new Error(\"--before-context must be between 0 and 10\");\n }\n if (isNaN(after) || after < 0 || after > 10) {\n throw new Error(\"--after-context must be between 0 and 10\");\n }\n\n return { before, after };\n}\n\nfunction parseLimit(value: string | undefined): number | undefined {\n if (!value) return undefined;\n const limit = parseInt(value, 10);\n if (isNaN(limit) || limit < 1 || limit > 50) {\n throw new Error(\"--limit must be between 1 and 50\");\n }\n return limit;\n}\n\nfunction renderResults(response: LogsSearchResponse): void {\n const grouped = new Map<\n string,\n { agentName: string; results: LogsSearchResponse[\"results\"] }\n >();\n for (const result of response.results) {\n const existing = grouped.get(result.runId);\n if (existing) {\n existing.results.push(result);\n } else {\n grouped.set(result.runId, {\n agentName: result.agentName,\n results: [result],\n });\n }\n }\n\n let isFirstGroup = true;\n for (const [runId, group] of grouped) {\n if (!isFirstGroup) {\n console.log();\n }\n isFirstGroup = false;\n\n const firstTimestamp = group.results[0]!.matchedEvent.createdAt;\n console.log(\n chalk.bold(formatRunHeader(runId, group.agentName, firstTimestamp)),\n );\n\n for (const result of group.results) {\n const renderer = new EventRenderer({\n showTimestamp: true,\n verbose: false,\n buffered: false,\n });\n\n for (const event of result.contextBefore) {\n renderEvent(event, renderer);\n }\n renderEvent(result.matchedEvent, renderer);\n for (const event of result.contextAfter) {\n renderEvent(event, renderer);\n }\n }\n }\n\n if (response.hasMore) {\n console.log();\n console.log(\n chalk.dim(\n ` Showing first ${response.results.length} matches. Use --limit to see more.`,\n ),\n );\n }\n}\n\nexport const searchCommand = new Command()\n .name(\"search\")\n .description(\"Search agent events across runs\")\n .argument(\"<keyword>\", \"Search keyword\")\n .option(\"-A, --after-context <n>\", \"Show n events after each match\")\n .option(\"-B, --before-context <n>\", \"Show n events before each match\")\n .option(\"-C, --context <n>\", \"Show n events before and after each match\")\n .option(\"--agent <name>\", \"Filter by agent name\")\n .option(\"--run <id>\", \"Filter by specific run ID\")\n .option(\"--since <time>\", \"Search logs since (default: 7d)\")\n .option(\"--limit <n>\", \"Maximum number of matches (default: 20)\")\n .addHelpText(\n \"after\",\n `\nExamples:\n zero logs search \"error\"\n zero logs search \"timeout\" --agent my-agent -C 2\n zero logs search \"failed\" --since 30d --limit 50`,\n )\n .action(\n withErrorHandler(async (keyword: string, options: SearchOptions) => {\n const { before, after } = parseContextOptions(options);\n\n if (options.run && !isUUID(options.run)) {\n console.error(\n chalk.red(`✗ Invalid run ID \"${options.run}\" — expected a UUID`),\n );\n console.error(chalk.dim(\" Run: zero logs list to find run IDs\"));\n process.exit(1);\n }\n\n const since = options.since\n ? parseTime(options.since)\n : Date.now() - SEVEN_DAYS_MS;\n const limit = parseLimit(options.limit);\n\n const response = await searchZeroLogs({\n keyword,\n agent: options.agent,\n runId: options.run,\n since,\n limit,\n before,\n after,\n });\n\n if (response.results.length === 0) {\n console.log(chalk.dim(\"No matches found\"));\n console.log(\n chalk.dim(\n \" Try a broader search with --since 30d or a different keyword\",\n ),\n );\n return;\n }\n\n renderResults(response);\n }),\n );\n","import { Command } from \"commander\";\nimport { withErrorHandler } from \"../../lib/command\";\nimport {\n requestDeveloperSupportConsent,\n submitDeveloperSupport,\n} from \"../../lib/api\";\n\nexport const zeroDeveloperSupportCommand = new Command()\n .name(\"developer-support\")\n .description(\"Submit a diagnostic report to the dev team\")\n .requiredOption(\"--title <text>\", \"Issue title\")\n .requiredOption(\"--description <text>\", \"Diagnostic description\")\n .option(\"--consent-code <code>\", \"User-provided verification code\")\n .addHelpText(\n \"after\",\n `\nExamples:\n Step 1 — Get consent code:\n zero developer-support --title \"GitHub 403 error\" --description \"Connector connected but API returns 403\"\n\n Step 2 — Submit with code:\n zero developer-support --title \"GitHub 403 error\" --description \"Connector connected but API returns 403\" --consent-code A7X3\n\nNotes:\n - The consent code must be provided by the user to confirm sharing their conversation\n - The dev team will receive a diagnostic bundle with conversation, environment, and connector info`,\n )\n .action(\n withErrorHandler(\n async (options: {\n title: string;\n description: string;\n consentCode?: string;\n }) => {\n if (!options.consentCode) {\n const { consentCode } = await requestDeveloperSupportConsent({\n title: options.title,\n description: options.description,\n });\n console.log(\n \"Consent required to share chat history with developers.\",\n );\n console.log(`Code: ${consentCode}`);\n console.log(\"Ask the user to confirm by providing this code.\");\n } else {\n const { reference } = await submitDeveloperSupport({\n title: options.title,\n description: options.description,\n consentCode: options.consentCode,\n });\n console.log(\"Developer support request submitted successfully.\");\n console.log(`Reference: ${reference}`);\n }\n },\n ),\n );\n","import { Command } from \"commander\";\nimport { hostStartCommand, hostStopCommand } from \"./host\";\nimport {\n clientScreenshotCommand,\n clientZoomCommand,\n clientInfoCommand,\n clientLeftClickCommand,\n clientRightClickCommand,\n clientMiddleClickCommand,\n clientDoubleClickCommand,\n clientTripleClickCommand,\n clientLeftClickDragCommand,\n clientLeftMouseDownCommand,\n clientLeftMouseUpCommand,\n clientScrollCommand,\n clientReadClipboardCommand,\n clientWriteClipboardCommand,\n clientKeyCommand,\n clientHoldKeyCommand,\n clientTypeCommand,\n clientOpenAppCommand,\n clientMouseMoveCommand,\n clientCursorPositionCommand,\n} from \"./client\";\n\nconst hostCommand = new Command()\n .name(\"host\")\n .description(\"Manage computer-use host daemon\")\n .addCommand(hostStartCommand)\n .addCommand(hostStopCommand);\n\nconst clientCommand = new Command()\n .name(\"client\")\n .description(\"Interact with remote computer-use host\")\n .addCommand(clientScreenshotCommand)\n .addCommand(clientZoomCommand)\n .addCommand(clientInfoCommand)\n .addCommand(clientLeftClickCommand)\n .addCommand(clientRightClickCommand)\n .addCommand(clientMiddleClickCommand)\n .addCommand(clientDoubleClickCommand)\n .addCommand(clientTripleClickCommand)\n .addCommand(clientLeftClickDragCommand)\n .addCommand(clientLeftMouseDownCommand)\n .addCommand(clientLeftMouseUpCommand)\n .addCommand(clientScrollCommand)\n .addCommand(clientReadClipboardCommand)\n .addCommand(clientWriteClipboardCommand)\n .addCommand(clientKeyCommand)\n .addCommand(clientHoldKeyCommand)\n .addCommand(clientTypeCommand)\n .addCommand(clientOpenAppCommand)\n .addCommand(clientMouseMoveCommand)\n .addCommand(clientCursorPositionCommand);\n\nclientCommand.addHelpText(\n \"after\",\n `\nCoordinate System:\n All coordinates use macOS logical points, not physical pixels.\n On Retina displays, logical size = physical size / scaleFactor.\n Run \"info\" to check your screen's logical dimensions.\n\nExamples:\n zero computer-use client screenshot\n zero computer-use client zoom --x 0 --y 0 --width 500 --height 500\n zero computer-use client info\n zero computer-use client left-click 500 300\n zero computer-use client scroll 500 300 down 5\n zero computer-use client key \"cmd+c\"`,\n);\n\nexport const zeroComputerUseCommand = new Command()\n .name(\"computer-use\")\n .description(\"Remote desktop control for cloud agents\")\n .addCommand(hostCommand)\n .addCommand(clientCommand);\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { withErrorHandler } from \"../../../lib/command/with-error-handler\";\nimport {\n registerComputerUseHost,\n unregisterComputerUseHost,\n ApiRequestError,\n} from \"../../../lib/api\";\nimport {\n getRandomPort,\n startDesktopServer,\n} from \"../../../lib/computer-use/desktop-server\";\nimport { isCliclickInstalled } from \"../../../lib/computer-use/cliclick\";\nimport {\n startDesktopTunnel,\n stopDesktopTunnel,\n} from \"../../../lib/computer-use/ngrok\";\n\nexport const hostStartCommand = new Command()\n .name(\"start\")\n .description(\"Start the computer-use host daemon (macOS only)\")\n .action(\n withErrorHandler(async () => {\n if (process.platform !== \"darwin\") {\n throw new Error(\n \"Computer-use host requires macOS\\n\\n\" +\n \"The host daemon uses macOS-specific commands (screencapture, system_profiler).\",\n );\n }\n\n if (!(await isCliclickInstalled())) {\n console.log(\n chalk.yellow(\n \"⚠ cliclick not found. Mouse and keyboard operations will not be available.\\n\" +\n \" Install with: brew install cliclick\",\n ),\n );\n console.log();\n }\n\n console.log(chalk.cyan(\"Registering computer-use host...\"));\n const credentials = await registerComputerUseHost();\n\n const port = await getRandomPort();\n const server = await startDesktopServer(credentials.token, port);\n\n try {\n await startDesktopTunnel(\n credentials.ngrokToken,\n credentials.endpointPrefix,\n port,\n );\n\n console.log();\n console.log(chalk.green(\"✓ Computer-use host active\"));\n console.log(` Desktop: desktop.${credentials.domain}`);\n console.log();\n console.log(chalk.dim(\"Press ^C twice to disconnect\"));\n console.log();\n\n let sigintCount = 0;\n await new Promise<void>((resolve) => {\n const keepAlive = setInterval(() => {}, 60_000);\n const done = () => {\n clearInterval(keepAlive);\n process.removeListener(\"SIGINT\", onSigint);\n resolve();\n };\n const onSigint = () => {\n sigintCount++;\n if (sigintCount === 1) {\n console.log(\n chalk.dim(\"\\nPress ^C again to disconnect and exit...\"),\n );\n } else {\n done();\n }\n };\n process.on(\"SIGINT\", onSigint);\n process.once(\"SIGTERM\", done);\n });\n } finally {\n console.log();\n console.log(chalk.cyan(\"Stopping computer-use host...\"));\n server.close();\n await stopDesktopTunnel();\n await unregisterComputerUseHost().catch(() => {});\n console.log(chalk.green(\"✓ Host stopped\"));\n }\n }),\n );\n\nexport const hostStopCommand = new Command()\n .name(\"stop\")\n .description(\"Stop and unregister the computer-use host\")\n .action(\n withErrorHandler(async () => {\n console.log(chalk.cyan(\"Unregistering computer-use host...\"));\n try {\n await unregisterComputerUseHost();\n console.log(chalk.green(\"✓ Host unregistered\"));\n } catch (error) {\n if (error instanceof ApiRequestError && error.status === 404) {\n console.log(chalk.yellow(\"No active host registration found\"));\n return;\n }\n throw error;\n }\n }),\n );\n","import {\n createServer,\n type Server,\n type IncomingMessage,\n type ServerResponse,\n} from \"http\";\nimport { createServer as createNetServer } from \"net\";\nimport type { AddressInfo } from \"net\";\nimport {\n captureScreenshot,\n captureRegionScreenshot,\n getScreenInfo,\n} from \"./screencapture\";\nimport {\n leftClickDrag,\n leftMouseDown,\n leftMouseUp,\n executeMouseAction,\n getCursorPosition,\n VALID_ACTIONS,\n pressKey,\n holdKey,\n typeText,\n} from \"./cliclick\";\nimport type { MouseAction } from \"./cliclick\";\nimport { scroll, type ScrollDirection } from \"./scroll\";\nimport { readClipboard, writeClipboard } from \"./clipboard\";\nimport { openApplication } from \"./application\";\n\n/**\n * Read the full request body as a string.\n */\nfunction readBody(req: IncomingMessage): Promise<string> {\n return new Promise((resolve, reject) => {\n const chunks: Buffer[] = [];\n req.on(\"data\", (chunk: Buffer) => {\n chunks.push(chunk);\n });\n req.on(\"end\", () => {\n resolve(Buffer.concat(chunks).toString());\n });\n req.on(\"error\", reject);\n });\n}\n\ninterface MouseDragBody {\n action: \"left_click_drag\";\n startX: number;\n startY: number;\n endX: number;\n endY: number;\n}\n\ninterface MouseDownBody {\n action: \"left_mouse_down\";\n x: number;\n y: number;\n}\n\ninterface MouseUpBody {\n action: \"left_mouse_up\";\n x: number;\n y: number;\n}\n\ninterface MouseScrollBody {\n action: \"scroll\";\n x: number;\n y: number;\n direction: ScrollDirection;\n amount?: number;\n}\n\ntype MouseRequestBody =\n | MouseDragBody\n | MouseDownBody\n | MouseUpBody\n | MouseScrollBody;\n\nasync function handleZoom(\n searchParams: URLSearchParams,\n res: ServerResponse,\n): Promise<void> {\n const x = Number(searchParams.get(\"x\"));\n const y = Number(searchParams.get(\"y\"));\n const width = Number(searchParams.get(\"width\"));\n const height = Number(searchParams.get(\"height\"));\n\n if (\n [x, y, width, height].some((v) => {\n return !Number.isFinite(v);\n })\n ) {\n res.writeHead(400, { \"Content-Type\": \"text/plain\" });\n res.end(\n \"Missing or invalid query parameters: x, y, width, height are required numbers\",\n );\n return;\n }\n if (width <= 0 || height <= 0) {\n res.writeHead(400, { \"Content-Type\": \"text/plain\" });\n res.end(\"width and height must be positive\");\n return;\n }\n if (x < 0 || y < 0) {\n res.writeHead(400, { \"Content-Type\": \"text/plain\" });\n res.end(\"x and y must be non-negative\");\n return;\n }\n\n const info = await getScreenInfo();\n if (x + width > info.width || y + height > info.height) {\n res.writeHead(400, { \"Content-Type\": \"text/plain\" });\n res.end(`Region exceeds screen bounds (${info.width}x${info.height})`);\n return;\n }\n\n const result = await captureRegionScreenshot({ x, y, width, height });\n res.writeHead(200, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify(result));\n}\n\nfunction parseJsonBody(req: IncomingMessage): Promise<unknown> {\n return new Promise((resolve, reject) => {\n const chunks: Buffer[] = [];\n let size = 0;\n req.on(\"data\", (chunk: Buffer) => {\n size += chunk.length;\n if (size > 1024) {\n reject(new Error(\"Request body too large\"));\n req.destroy();\n return;\n }\n chunks.push(chunk);\n });\n req.on(\"end\", () => {\n try {\n resolve(JSON.parse(Buffer.concat(chunks).toString()));\n } catch {\n reject(new Error(\"Invalid JSON body\"));\n }\n });\n req.on(\"error\", reject);\n });\n}\n\nasync function handleMouseRequest(\n req: IncomingMessage,\n res: ServerResponse,\n): Promise<void> {\n const body = await parseJsonBody(req);\n if (typeof body !== \"object\" || body === null || !(\"action\" in body)) {\n res.writeHead(400, { \"Content-Type\": \"text/plain\" });\n res.end(\"Missing required fields: action, x, y\");\n return;\n }\n\n const { action } = body as { action: unknown };\n\n if (typeof action !== \"string\") {\n res.writeHead(400, { \"Content-Type\": \"text/plain\" });\n res.end(\"Invalid action\");\n return;\n }\n\n // Click actions with validation\n if (VALID_ACTIONS.has(action)) {\n if (!(\"x\" in body) || !(\"y\" in body)) {\n res.writeHead(400, { \"Content-Type\": \"text/plain\" });\n res.end(\"Missing required fields: action, x, y\");\n return;\n }\n\n const { x, y } = body as { x: unknown; y: unknown };\n\n if (\n typeof x !== \"number\" ||\n typeof y !== \"number\" ||\n !Number.isFinite(x) ||\n !Number.isFinite(y)\n ) {\n res.writeHead(400, { \"Content-Type\": \"text/plain\" });\n res.end(\"Coordinates x and y must be finite numbers\");\n return;\n }\n\n const info = await getScreenInfo();\n if (x < 0 || x >= info.width || y < 0 || y >= info.height) {\n res.writeHead(400, { \"Content-Type\": \"text/plain\" });\n res.end(\n `Coordinates out of bounds. Screen size: ${info.width}x${info.height} (points)`,\n );\n return;\n }\n\n await executeMouseAction(action as MouseAction, x, y);\n res.writeHead(200, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify({ ok: true }));\n return;\n }\n\n // Drag, mouse-down, mouse-up, scroll actions\n const typedBody = body as MouseRequestBody;\n switch (typedBody.action) {\n case \"left_click_drag\":\n await leftClickDrag(\n typedBody.startX,\n typedBody.startY,\n typedBody.endX,\n typedBody.endY,\n );\n break;\n case \"left_mouse_down\":\n await leftMouseDown(typedBody.x, typedBody.y);\n break;\n case \"left_mouse_up\":\n await leftMouseUp(typedBody.x, typedBody.y);\n break;\n case \"scroll\":\n await scroll(\n typedBody.x,\n typedBody.y,\n typedBody.direction,\n typedBody.amount,\n );\n break;\n default:\n res.writeHead(400, { \"Content-Type\": \"text/plain\" });\n res.end(\n `Unknown mouse action: ${(body as unknown as Record<string, unknown>).action}`,\n );\n return;\n }\n\n res.writeHead(200, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify({ ok: true }));\n}\n\ninterface KeyPressBody {\n action: \"key\";\n keys: string;\n}\n\ninterface HoldKeyBody {\n action: \"hold_key\";\n keys: string;\n durationMs: number;\n}\n\ninterface TypeTextBody {\n action: \"type\";\n text: string;\n}\n\ntype KeyboardRequestBody = KeyPressBody | HoldKeyBody | TypeTextBody;\n\nasync function handleKeyboard(\n req: IncomingMessage,\n res: ServerResponse,\n): Promise<void> {\n const raw = await readBody(req);\n const body = JSON.parse(raw) as KeyboardRequestBody;\n\n switch (body.action) {\n case \"key\":\n await pressKey(body.keys);\n break;\n case \"hold_key\":\n if (\n typeof body.durationMs !== \"number\" ||\n !Number.isFinite(body.durationMs) ||\n body.durationMs <= 0\n ) {\n res.writeHead(400, { \"Content-Type\": \"text/plain\" });\n res.end(\"durationMs must be a positive number\");\n return;\n }\n await holdKey(body.keys, body.durationMs);\n break;\n case \"type\":\n if (typeof body.text !== \"string\" || body.text.length === 0) {\n res.writeHead(400, { \"Content-Type\": \"text/plain\" });\n res.end(\"text must be a non-empty string\");\n return;\n }\n await typeText(body.text);\n break;\n default:\n res.writeHead(400, { \"Content-Type\": \"text/plain\" });\n res.end(\n `Unknown keyboard action: ${(body as Record<string, unknown>).action}`,\n );\n return;\n }\n\n res.writeHead(200, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify({ ok: true }));\n}\n\nasync function handleClipboard(\n req: IncomingMessage,\n res: ServerResponse,\n): Promise<void> {\n if (req.method === \"GET\") {\n const text = await readClipboard();\n res.writeHead(200, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify({ text }));\n } else if (req.method === \"POST\") {\n const raw = await readBody(req);\n const body = JSON.parse(raw) as { text: string };\n await writeClipboard(body.text);\n res.writeHead(200, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify({ ok: true }));\n } else {\n res.writeHead(404, { \"Content-Type\": \"text/plain\" });\n res.end(\"Not found\");\n }\n}\n\nasync function handleOpenApplication(\n req: IncomingMessage,\n res: ServerResponse,\n): Promise<void> {\n const raw = await readBody(req);\n const body = JSON.parse(raw) as { nameOrBundleId: unknown };\n\n if (\n typeof body.nameOrBundleId !== \"string\" ||\n body.nameOrBundleId.length === 0\n ) {\n res.writeHead(400, { \"Content-Type\": \"text/plain\" });\n res.end(\"nameOrBundleId must be a non-empty string\");\n return;\n }\n\n await openApplication(body.nameOrBundleId);\n res.writeHead(200, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify({ ok: true }));\n}\n\n/**\n * Allocate a random available port on localhost.\n */\nexport async function getRandomPort(): Promise<number> {\n return new Promise((resolve, reject) => {\n const server = createNetServer();\n server.listen(0, \"127.0.0.1\", () => {\n const { port } = server.address() as AddressInfo;\n server.close(() => {\n resolve(port);\n });\n });\n server.on(\"error\", reject);\n });\n}\n\nasync function handleCursorPosition(res: ServerResponse): Promise<void> {\n const position = await getCursorPosition();\n res.writeHead(200, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify(position));\n}\n\nfunction routeKey(method: string, pathname: string): string {\n return `${method} ${pathname}`;\n}\n\nasync function handleRequest(\n token: string,\n req: IncomingMessage,\n res: ServerResponse,\n): Promise<void> {\n if (req.headers[\"x-vm0-token\"] !== token) {\n res.writeHead(403, { \"Content-Type\": \"text/plain\" });\n res.end(\"Forbidden\");\n return;\n }\n\n const url = new URL(req.url ?? \"/\", \"http://localhost\");\n const { pathname, searchParams } = url;\n const key = routeKey(req.method ?? \"GET\", pathname);\n\n try {\n switch (key) {\n case \"GET /screenshot\": {\n const result = await captureScreenshot();\n res.writeHead(200, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify(result));\n break;\n }\n case \"GET /info\": {\n const info = await getScreenInfo();\n res.writeHead(200, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify(info));\n break;\n }\n case \"GET /zoom\":\n await handleZoom(searchParams, res);\n break;\n case \"POST /mouse\":\n await handleMouseRequest(req, res);\n break;\n case \"GET /clipboard\":\n case \"POST /clipboard\":\n await handleClipboard(req, res);\n break;\n case \"POST /keyboard\":\n await handleKeyboard(req, res);\n break;\n case \"POST /open-application\":\n await handleOpenApplication(req, res);\n break;\n case \"GET /cursor-position\":\n await handleCursorPosition(res);\n break;\n default:\n res.writeHead(404, { \"Content-Type\": \"text/plain\" });\n res.end(\"Not found\");\n }\n } catch (error) {\n const message =\n error instanceof Error ? error.message : \"Internal server error\";\n res.writeHead(500, { \"Content-Type\": \"text/plain\" });\n res.end(message);\n }\n}\n\n/**\n * Start the desktop HTTP server.\n * Validates x-vm0-token on every request and serves /screenshot and /info endpoints.\n */\nexport function startDesktopServer(\n token: string,\n port: number,\n): Promise<Server> {\n return new Promise((resolve, reject) => {\n const server = createServer((req, res) => {\n handleRequest(token, req, res).catch(() => {\n if (!res.headersSent) {\n res.writeHead(500, { \"Content-Type\": \"text/plain\" });\n res.end(\"Internal server error\");\n }\n });\n });\n\n server.on(\"error\", reject);\n server.listen(port, \"127.0.0.1\", () => {\n resolve(server);\n });\n });\n}\n","import { execFile } from \"child_process\";\nimport { readFile, unlink } from \"fs/promises\";\nimport { randomUUID } from \"crypto\";\nimport { join } from \"path\";\nimport { tmpdir } from \"os\";\nimport { promisify } from \"util\";\n\nconst execFileAsync = promisify(execFile);\n\ninterface ScreenInfo {\n width: number;\n height: number;\n scaleFactor: number;\n}\n\ninterface ScreenshotResult extends ScreenInfo {\n image: string;\n format: string;\n}\n\ninterface RegionParams {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\n/**\n * Capture a screenshot on macOS using the screencapture command.\n * Returns the image as a base64 string at logical resolution along with screen metadata.\n */\nexport async function captureScreenshot(): Promise<ScreenshotResult> {\n const tmpPath = join(tmpdir(), `vm0-screenshot-${randomUUID()}.jpg`);\n\n try {\n await execFileAsync(\"screencapture\", [\"-x\", \"-t\", \"jpg\", tmpPath]);\n const info = await getScreenInfo();\n\n if (info.scaleFactor > 1) {\n await execFileAsync(\"sips\", [\n \"-z\",\n String(info.height),\n String(info.width),\n \"-s\",\n \"formatOptions\",\n \"80\",\n tmpPath,\n ]);\n }\n\n const buffer = await readFile(tmpPath);\n\n return {\n image: buffer.toString(\"base64\"),\n width: info.width,\n height: info.height,\n scaleFactor: info.scaleFactor,\n format: \"jpg\",\n };\n } finally {\n await unlink(tmpPath).catch(() => {});\n }\n}\n\n/**\n * Capture a screenshot of a specific screen region on macOS.\n * Uses screencapture -R x,y,w,h to crop to the given rectangle (logical coordinates).\n * Returns the image at logical resolution to match the coordinate space.\n */\nexport async function captureRegionScreenshot(\n region: RegionParams,\n): Promise<ScreenshotResult> {\n const tmpPath = join(tmpdir(), `vm0-zoom-${randomUUID()}.jpg`);\n\n try {\n const regionArg = `${region.x},${region.y},${region.width},${region.height}`;\n await execFileAsync(\"screencapture\", [\n \"-x\",\n \"-t\",\n \"jpg\",\n \"-R\",\n regionArg,\n tmpPath,\n ]);\n\n const info = await getScreenInfo();\n\n if (info.scaleFactor > 1) {\n await execFileAsync(\"sips\", [\n \"-z\",\n String(region.height),\n String(region.width),\n \"-s\",\n \"formatOptions\",\n \"80\",\n tmpPath,\n ]);\n }\n\n const buffer = await readFile(tmpPath);\n\n return {\n image: buffer.toString(\"base64\"),\n width: region.width,\n height: region.height,\n scaleFactor: info.scaleFactor,\n format: \"jpg\",\n };\n } finally {\n await unlink(tmpPath).catch(() => {});\n }\n}\n\ninterface DisplayResolution {\n _spdisplays_pixels?: string;\n _spdisplays_resolution?: string;\n spdisplays_resolution?: string;\n}\n\ninterface DisplayData {\n spdisplays_ndrvs?: DisplayResolution[];\n}\n\n/**\n * Get screen logical resolution and scale factor on macOS using system_profiler.\n * Returns logical (point) dimensions that match the coordinate space used by all operations.\n */\nexport async function getScreenInfo(): Promise<ScreenInfo> {\n const { stdout } = await execFileAsync(\"system_profiler\", [\n \"SPDisplaysDataType\",\n \"-json\",\n ]);\n\n const data = JSON.parse(stdout) as { SPDisplaysDataType?: DisplayData[] };\n const displays = data.SPDisplaysDataType ?? [];\n\n for (const gpu of displays) {\n const screens = gpu.spdisplays_ndrvs ?? [];\n for (const screen of screens) {\n const pixelStr = screen._spdisplays_pixels;\n if (pixelStr) {\n const pixelMatch = pixelStr.match(/(\\d+)\\s*x\\s*(\\d+)/);\n if (pixelMatch?.[1] && pixelMatch[2]) {\n const physicalWidth = parseInt(pixelMatch[1], 10);\n const physicalHeight = parseInt(pixelMatch[2], 10);\n\n const resStr =\n screen._spdisplays_resolution ?? screen.spdisplays_resolution ?? \"\";\n const resMatch = resStr.match(/(\\d+)\\s*x\\s*(\\d+)/);\n\n let scaleFactor: number;\n let logicalWidth: number;\n let logicalHeight: number;\n\n if (resMatch?.[1] && resMatch[2]) {\n logicalWidth = parseInt(resMatch[1], 10);\n logicalHeight = parseInt(resMatch[2], 10);\n scaleFactor = Math.round(physicalWidth / logicalWidth);\n } else {\n const isRetina = /retina/i.test(resStr);\n scaleFactor = isRetina ? 2 : 1;\n logicalWidth = Math.floor(physicalWidth / scaleFactor);\n logicalHeight = Math.floor(physicalHeight / scaleFactor);\n }\n\n return {\n width: logicalWidth,\n height: logicalHeight,\n scaleFactor,\n };\n }\n }\n }\n }\n\n return { width: 1920, height: 1080, scaleFactor: 1 };\n}\n","import { execFile } from \"child_process\";\nimport { promisify } from \"util\";\nimport { setTimeout as sleep } from \"timers/promises\";\n\nconst execFileAsync = promisify(execFile);\n\n/**\n * Drag from (startX, startY) to (endX, endY) using cliclick.\n * Sends dd (drag down) at start, then du (drag up) at end.\n */\nexport async function leftClickDrag(\n startX: number,\n startY: number,\n endX: number,\n endY: number,\n): Promise<void> {\n await execFileAsync(\"cliclick\", [\n `dd:${startX},${startY}`,\n `du:${endX},${endY}`,\n ]);\n}\n\n/**\n * Press and hold the left mouse button at (x, y).\n */\nexport async function leftMouseDown(x: number, y: number): Promise<void> {\n await execFileAsync(\"cliclick\", [`dd:${x},${y}`]);\n}\n\n/**\n * Release the left mouse button at (x, y).\n */\nexport async function leftMouseUp(x: number, y: number): Promise<void> {\n await execFileAsync(\"cliclick\", [`du:${x},${y}`]);\n}\n\nexport type MouseAction =\n | \"left_click\"\n | \"right_click\"\n | \"middle_click\"\n | \"double_click\"\n | \"triple_click\"\n | \"move\";\n\nconst ACTION_COMMANDS: Record<MouseAction, string> = {\n left_click: \"c\",\n right_click: \"rc\",\n middle_click: \"mc\",\n double_click: \"dc\",\n triple_click: \"tc\",\n move: \"m\",\n};\n\nexport const VALID_ACTIONS = new Set<string>(Object.keys(ACTION_COMMANDS));\n\n/**\n * Check whether cliclick is available on the system.\n * Returns true if installed, false otherwise.\n */\nexport async function isCliclickInstalled(): Promise<boolean> {\n try {\n await execFileAsync(\"which\", [\"cliclick\"]);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Verify that cliclick is installed on the system.\n * Throws with install instructions if not found.\n */\nasync function checkCliclickInstalled(): Promise<void> {\n try {\n await execFileAsync(\"which\", [\"cliclick\"]);\n } catch {\n throw new Error(\"cliclick not found. Install with: brew install cliclick\");\n }\n}\n\n/**\n * Execute a mouse action at the given coordinates using cliclick.\n */\nexport async function executeMouseAction(\n action: MouseAction,\n x: number,\n y: number,\n): Promise<void> {\n await checkCliclickInstalled();\n const prefix = ACTION_COMMANDS[action];\n await execFileAsync(\"cliclick\", [`${prefix}:${x},${y}`]);\n}\n\n/**\n * Get the current cursor position using cliclick.\n * Returns coordinates in points.\n */\nexport async function getCursorPosition(): Promise<{\n x: number;\n y: number;\n}> {\n await checkCliclickInstalled();\n const { stdout } = await execFileAsync(\"cliclick\", [\"p\"]);\n const parts = stdout.trim().split(\",\");\n const xStr = parts[0];\n const yStr = parts[1];\n if (parts.length !== 2 || xStr === undefined || yStr === undefined) {\n throw new Error(`Unexpected cliclick output: ${stdout.trim()}`);\n }\n const x = parseInt(xStr, 10);\n const y = parseInt(yStr, 10);\n if (Number.isNaN(x) || Number.isNaN(y)) {\n throw new Error(`Failed to parse cursor position: ${stdout.trim()}`);\n }\n return { x, y };\n}\n\nconst VALID_SPECIAL_KEYS = new Set([\n \"cmd\",\n \"ctrl\",\n \"alt\",\n \"shift\",\n \"fn\",\n \"arrow-up\",\n \"arrow-down\",\n \"arrow-left\",\n \"arrow-right\",\n \"tab\",\n \"esc\",\n \"space\",\n \"delete\",\n \"return\",\n \"enter\",\n \"home\",\n \"end\",\n \"page-up\",\n \"page-down\",\n ...Array.from({ length: 19 }, (_, i) => {\n return `f${i + 1}`;\n }),\n]);\n\nfunction isValidKeyName(key: string): boolean {\n return VALID_SPECIAL_KEYS.has(key) || key.length === 1;\n}\n\nfunction parseKeyCombo(keys: string): {\n modifiers: string[];\n mainKey: string;\n} {\n const parts = keys.split(\"+\");\n if (\n parts.length === 0 ||\n parts.some((p) => {\n return p === \"\";\n })\n ) {\n throw new Error(`Invalid key combo: \"${keys}\"`);\n }\n\n const mainKey = parts[parts.length - 1]!;\n const modifiers = parts.slice(0, -1);\n\n for (const key of parts) {\n if (!isValidKeyName(key)) {\n throw new Error(\n `Unknown key: \"${key}\". Valid keys: single characters, or special keys like cmd, ctrl, alt, shift, tab, esc, return, arrow-up, f1-f19, etc.`,\n );\n }\n }\n\n return { modifiers, mainKey };\n}\n\n/**\n * Build the cliclick command to press or type a key.\n * Special keys (return, tab, arrow-up, etc.) use `kp:`, regular characters use `t:`.\n */\nfunction keyAction(key: string): string {\n return VALID_SPECIAL_KEYS.has(key) ? `kp:${key}` : `t:${key}`;\n}\n\n/**\n * Press a key combination using cliclick.\n * Accepts combo strings like \"cmd+c\", \"ctrl+shift+s\", or single keys like \"return\".\n */\nexport async function pressKey(keys: string): Promise<void> {\n const { modifiers, mainKey } = parseKeyCombo(keys);\n\n if (modifiers.length === 0) {\n await execFileAsync(\"cliclick\", [keyAction(mainKey)]);\n return;\n }\n\n const args: string[] = [];\n for (const mod of modifiers) {\n args.push(`kd:${mod}`);\n }\n args.push(keyAction(mainKey));\n for (let i = modifiers.length - 1; i >= 0; i--) {\n args.push(`ku:${modifiers[i]}`);\n }\n await execFileAsync(\"cliclick\", args);\n}\n\n/**\n * Hold key(s) down for a specified duration then release.\n * Accepts combo strings like \"shift\" or \"cmd+shift\".\n */\nexport async function holdKey(keys: string, durationMs: number): Promise<void> {\n const { modifiers, mainKey } = parseKeyCombo(keys);\n const allKeys = [...modifiers, mainKey];\n\n const downArgs = allKeys.map((k) => {\n return `kd:${k}`;\n });\n const upArgs = [...allKeys].reverse().map((k) => {\n return `ku:${k}`;\n });\n\n await execFileAsync(\"cliclick\", downArgs);\n await sleep(durationMs);\n await execFileAsync(\"cliclick\", upArgs);\n}\n\n/**\n * Type text at the current cursor position using cliclick.\n */\nexport async function typeText(text: string): Promise<void> {\n await execFileAsync(\"cliclick\", [`t:${text}`]);\n}\n","import { execFile } from \"child_process\";\nimport { promisify } from \"util\";\n\nconst execFileAsync = promisify(execFile);\n\nexport type ScrollDirection = \"up\" | \"down\" | \"left\" | \"right\";\n\nconst DEFAULT_SCROLL_AMOUNT = 3;\n\n/**\n * Scroll at the given screen position using cliclick (mouse move) + osascript (CGEvent scroll).\n *\n * cliclick handles cursor positioning; osascript with CoreGraphics CGEvent API\n * handles the scroll wheel event (cliclick has no native scroll support).\n */\nexport async function scroll(\n x: number,\n y: number,\n direction: ScrollDirection,\n amount: number = DEFAULT_SCROLL_AMOUNT,\n): Promise<void> {\n // Move cursor to target position\n await execFileAsync(\"cliclick\", [`m:${x},${y}`]);\n\n // CGEvent scroll: positive dy = scroll up, negative dy = scroll down\n // Second wheel axis: positive dx = scroll left, negative dx = scroll right\n let dy = 0;\n let dx = 0;\n switch (direction) {\n case \"up\":\n dy = amount;\n break;\n case \"down\":\n dy = -amount;\n break;\n case \"left\":\n dx = amount;\n break;\n case \"right\":\n dx = -amount;\n break;\n }\n\n const script = [\n \"ObjC.import('CoreGraphics');\",\n `var e = $.CGEventCreateScrollWheelEvent(null, 0, 2, ${dy}, ${dx});`,\n \"$.CGEventPost($.kCGHIDEventTap, e);\",\n ].join(\" \");\n\n await execFileAsync(\"osascript\", [\"-l\", \"JavaScript\", \"-e\", script]);\n}\n","import { execFile, spawn } from \"child_process\";\nimport { promisify } from \"util\";\n\nconst execFileAsync = promisify(execFile);\n\n/**\n * Read text content from the macOS clipboard using pbpaste.\n */\nexport async function readClipboard(): Promise<string> {\n const { stdout } = await execFileAsync(\"pbpaste\");\n return stdout;\n}\n\n/**\n * Write text content to the macOS clipboard using pbcopy.\n */\nexport async function writeClipboard(text: string): Promise<void> {\n return new Promise((resolve, reject) => {\n const proc = spawn(\"pbcopy\", { stdio: [\"pipe\", \"ignore\", \"ignore\"] });\n proc.on(\"error\", reject);\n proc.on(\"close\", (code) => {\n if (code === 0) {\n resolve();\n } else {\n reject(new Error(`pbcopy exited with code ${code}`));\n }\n });\n proc.stdin.end(text);\n });\n}\n","import { execFile } from \"child_process\";\nimport { promisify } from \"util\";\n\nconst execFileAsync = promisify(execFile);\n\n/**\n * Open or activate a macOS application by name or bundle ID.\n * Detects bundle IDs by the presence of dots (e.g., com.apple.Safari).\n */\nexport async function openApplication(nameOrBundleId: string): Promise<void> {\n const isBundleId = nameOrBundleId.includes(\".\");\n const flag = isBundleId ? \"-b\" : \"-a\";\n await execFileAsync(\"open\", [flag, nameOrBundleId]);\n}\n","// Dynamic import is intentional: @ngrok/ngrok contains native binaries that\n// crash on systems with GLIBC version mismatches. Lazy-loading ensures the\n// crash only affects the command that needs ngrok, not the entire CLI.\n// See: https://github.com/vm0-ai/vm0/issues/6825\nasync function loadNgrok(): Promise<typeof import(\"@ngrok/ngrok\")> {\n try {\n const mod = await import(\"@ngrok/ngrok\");\n return mod.default;\n } catch (cause) {\n throw new Error(\n \"Failed to load ngrok tunnel module. \" +\n \"This may be caused by a system library (GLIBC) incompatibility. \" +\n \"See: https://github.com/vm0-ai/vm0/issues/6825\",\n { cause },\n );\n }\n}\n\nexport async function startDesktopTunnel(\n ngrokToken: string,\n endpointPrefix: string,\n port: number,\n): Promise<void> {\n const ngrok = await loadNgrok();\n\n await ngrok.forward({\n addr: `localhost:${port}`,\n authtoken: ngrokToken,\n domain: `desktop.${endpointPrefix}.internal`,\n });\n}\n\nexport async function stopDesktopTunnel(): Promise<void> {\n const ngrok = await loadNgrok();\n await ngrok.kill();\n}\n","import { Command } from \"commander\";\nimport { writeFile, mkdir } from \"fs/promises\";\nimport { join } from \"path\";\nimport { withErrorHandler } from \"../../../lib/command/with-error-handler\";\nimport { callHost } from \"../../../lib/computer-use/client\";\n\nfunction mouseClickCommand(\n name: string,\n action: string,\n description: string,\n): Command {\n return new Command()\n .name(name)\n .description(description)\n .argument(\"<x>\", \"X coordinate (points)\")\n .argument(\"<y>\", \"Y coordinate (points)\")\n .action(\n withErrorHandler(async (xStr: string, yStr: string) => {\n const x = parseInt(xStr, 10);\n const y = parseInt(yStr, 10);\n if (Number.isNaN(x) || Number.isNaN(y)) {\n throw new Error(\"Coordinates must be integers\");\n }\n const response = await callHost(\"/mouse\", {\n method: \"POST\",\n body: { action, x, y },\n });\n const data = await response.json();\n process.stdout.write(JSON.stringify(data) + \"\\n\");\n }),\n );\n}\n\nexport const clientScreenshotCommand = new Command()\n .name(\"screenshot\")\n .description(\"Capture a screenshot from the remote host\")\n .action(\n withErrorHandler(async () => {\n const response = await callHost(\"/screenshot\");\n const data = (await response.json()) as {\n width: number;\n height: number;\n scaleFactor: number;\n format: string;\n image: string;\n };\n\n const dir = \"/tmp/computer-use\";\n await mkdir(dir, { recursive: true });\n\n const timestamp = Date.now();\n const filePath = join(dir, `screenshot-${timestamp}.${data.format}`);\n const buffer = Buffer.from(data.image, \"base64\");\n await writeFile(filePath, buffer);\n\n // Path to stdout for programmatic consumption\n process.stdout.write(`${filePath}\\n`);\n\n // Metadata to stderr for human/debug consumption\n process.stderr.write(\n JSON.stringify({\n width: data.width,\n height: data.height,\n scaleFactor: data.scaleFactor,\n }) + \"\\n\",\n );\n }),\n );\n\nexport const clientZoomCommand = new Command()\n .name(\"zoom\")\n .description(\"Capture a region screenshot from the remote host\")\n .requiredOption(\"--x <number>\", \"X coordinate of the region\")\n .requiredOption(\"--y <number>\", \"Y coordinate of the region\")\n .requiredOption(\"--width <number>\", \"Width of the region\")\n .requiredOption(\"--height <number>\", \"Height of the region\")\n .action(\n withErrorHandler(\n async (opts: { x: string; y: string; width: string; height: string }) => {\n const params = new URLSearchParams({\n x: opts.x,\n y: opts.y,\n width: opts.width,\n height: opts.height,\n });\n const response = await callHost(`/zoom?${params.toString()}`);\n const data = (await response.json()) as {\n width: number;\n height: number;\n scaleFactor: number;\n format: string;\n image: string;\n };\n\n const dir = \"/tmp/computer-use\";\n await mkdir(dir, { recursive: true });\n\n const timestamp = Date.now();\n const filePath = join(dir, `zoom-${timestamp}.${data.format}`);\n const buffer = Buffer.from(data.image, \"base64\");\n await writeFile(filePath, buffer);\n\n process.stdout.write(`${filePath}\\n`);\n\n process.stderr.write(\n JSON.stringify({\n width: data.width,\n height: data.height,\n scaleFactor: data.scaleFactor,\n }) + \"\\n\",\n );\n },\n ),\n );\n\nexport const clientInfoCommand = new Command()\n .name(\"info\")\n .description(\"Get screen info from the remote host\")\n .action(\n withErrorHandler(async () => {\n const response = await callHost(\"/info\");\n const data = (await response.json()) as {\n width: number;\n height: number;\n scaleFactor: number;\n };\n\n process.stdout.write(JSON.stringify(data) + \"\\n\");\n }),\n );\n\nexport const clientLeftClickCommand = mouseClickCommand(\n \"left-click\",\n \"left_click\",\n \"Perform a left click at coordinates\",\n);\n\nexport const clientRightClickCommand = mouseClickCommand(\n \"right-click\",\n \"right_click\",\n \"Perform a right click at coordinates\",\n);\n\nexport const clientMiddleClickCommand = mouseClickCommand(\n \"middle-click\",\n \"middle_click\",\n \"Perform a middle click at coordinates\",\n);\n\nexport const clientDoubleClickCommand = mouseClickCommand(\n \"double-click\",\n \"double_click\",\n \"Perform a double click at coordinates\",\n);\n\nexport const clientTripleClickCommand = mouseClickCommand(\n \"triple-click\",\n \"triple_click\",\n \"Perform a triple click at coordinates\",\n);\n\nexport const clientLeftClickDragCommand = new Command()\n .name(\"left-click-drag\")\n .description(\"Drag from (startX, startY) to (endX, endY)\")\n .argument(\"<startX>\", \"Start X coordinate\")\n .argument(\"<startY>\", \"Start Y coordinate\")\n .argument(\"<endX>\", \"End X coordinate\")\n .argument(\"<endY>\", \"End Y coordinate\")\n .action(\n withErrorHandler(\n async (startX: string, startY: string, endX: string, endY: string) => {\n await callHost(\"/mouse\", {\n method: \"POST\",\n body: {\n action: \"left_click_drag\",\n startX: Number(startX),\n startY: Number(startY),\n endX: Number(endX),\n endY: Number(endY),\n },\n });\n process.stdout.write(\"ok\\n\");\n },\n ),\n );\n\nexport const clientLeftMouseDownCommand = new Command()\n .name(\"left-mouse-down\")\n .description(\"Press and hold the left mouse button at (x, y)\")\n .argument(\"<x>\", \"X coordinate\")\n .argument(\"<y>\", \"Y coordinate\")\n .action(\n withErrorHandler(async (x: string, y: string) => {\n await callHost(\"/mouse\", {\n method: \"POST\",\n body: { action: \"left_mouse_down\", x: Number(x), y: Number(y) },\n });\n process.stdout.write(\"ok\\n\");\n }),\n );\n\nexport const clientLeftMouseUpCommand = new Command()\n .name(\"left-mouse-up\")\n .description(\"Release the left mouse button at (x, y)\")\n .argument(\"<x>\", \"X coordinate\")\n .argument(\"<y>\", \"Y coordinate\")\n .action(\n withErrorHandler(async (x: string, y: string) => {\n await callHost(\"/mouse\", {\n method: \"POST\",\n body: { action: \"left_mouse_up\", x: Number(x), y: Number(y) },\n });\n process.stdout.write(\"ok\\n\");\n }),\n );\n\nexport const clientScrollCommand = new Command()\n .name(\"scroll\")\n .description(\"Scroll at the given screen position\")\n .argument(\"<x>\", \"X coordinate\")\n .argument(\"<y>\", \"Y coordinate\")\n .argument(\"<direction>\", \"Scroll direction: up, down, left, right\")\n .argument(\"[amount]\", \"Scroll amount in lines (default 3)\")\n .action(\n withErrorHandler(\n async (x: string, y: string, direction: string, amount?: string) => {\n await callHost(\"/mouse\", {\n method: \"POST\",\n body: {\n action: \"scroll\",\n x: Number(x),\n y: Number(y),\n direction,\n ...(amount !== undefined && { amount: Number(amount) }),\n },\n });\n process.stdout.write(\"ok\\n\");\n },\n ),\n );\n\nexport const clientReadClipboardCommand = new Command()\n .name(\"read-clipboard\")\n .description(\"Read text content from the remote clipboard\")\n .action(\n withErrorHandler(async () => {\n const response = await callHost(\"/clipboard\");\n const data = (await response.json()) as { text: string };\n process.stdout.write(data.text);\n }),\n );\n\nexport const clientWriteClipboardCommand = new Command()\n .name(\"write-clipboard\")\n .description(\"Write text content to the remote clipboard\")\n .argument(\"<text>\", \"Text to write to clipboard\")\n .action(\n withErrorHandler(async (text: string) => {\n await callHost(\"/clipboard\", {\n method: \"POST\",\n body: { text },\n });\n process.stdout.write(\"ok\\n\");\n }),\n );\n\nexport const clientKeyCommand = new Command()\n .name(\"key\")\n .description(\"Press a key or key combination (e.g., cmd+c, return)\")\n .argument(\"<combo>\", \"Key combo string (e.g., cmd+c, ctrl+shift+s, return)\")\n .action(\n withErrorHandler(async (combo: string) => {\n await callHost(\"/keyboard\", {\n method: \"POST\",\n body: { action: \"key\", keys: combo },\n });\n process.stdout.write(\"ok\\n\");\n }),\n );\n\nexport const clientHoldKeyCommand = new Command()\n .name(\"hold-key\")\n .description(\"Hold a key or key combination for a duration\")\n .argument(\"<combo>\", \"Key combo string (e.g., shift, cmd+shift)\")\n .argument(\"<durationMs>\", \"Duration to hold in milliseconds\")\n .action(\n withErrorHandler(async (combo: string, durationStr: string) => {\n const durationMs = parseInt(durationStr, 10);\n if (Number.isNaN(durationMs) || durationMs <= 0) {\n throw new Error(\"durationMs must be a positive integer\");\n }\n await callHost(\"/keyboard\", {\n method: \"POST\",\n body: { action: \"hold_key\", keys: combo, durationMs },\n });\n process.stdout.write(\"ok\\n\");\n }),\n );\n\nexport const clientTypeCommand = new Command()\n .name(\"type\")\n .description(\"Type text at the current cursor position\")\n .argument(\"<text>\", \"Text to type\")\n .action(\n withErrorHandler(async (text: string) => {\n await callHost(\"/keyboard\", {\n method: \"POST\",\n body: { action: \"type\", text },\n });\n process.stdout.write(\"ok\\n\");\n }),\n );\n\nexport const clientOpenAppCommand = new Command()\n .name(\"open-app\")\n .description(\"Open or activate a macOS application by name or bundle ID\")\n .argument(\n \"<nameOrBundleId>\",\n \"App name (e.g., Safari) or bundle ID (e.g., com.apple.Safari)\",\n )\n .action(\n withErrorHandler(async (nameOrBundleId: string) => {\n await callHost(\"/open-application\", {\n method: \"POST\",\n body: { nameOrBundleId },\n });\n process.stdout.write(\"ok\\n\");\n }),\n );\n\nexport const clientMouseMoveCommand = mouseClickCommand(\n \"mouse-move\",\n \"move\",\n \"Move mouse pointer to coordinates\",\n);\n\nexport const clientCursorPositionCommand = new Command()\n .name(\"cursor-position\")\n .description(\"Get current cursor position from the remote host\")\n .action(\n withErrorHandler(async () => {\n const response = await callHost(\"/cursor-position\");\n const data = (await response.json()) as { x: number; y: number };\n process.stdout.write(JSON.stringify(data) + \"\\n\");\n }),\n );\n","import { getComputerUseHost } from \"../api\";\n\nlet cachedHost: { domain: string; token: string; cachedAt: number } | null =\n null;\nconst CACHE_TTL_MS = 30_000;\n\n/**\n * Discover the active computer-use host for the current org/user.\n * Results are cached for 30 seconds.\n */\nasync function discoverHost(): Promise<{\n domain: string;\n token: string;\n}> {\n if (cachedHost && Date.now() - cachedHost.cachedAt < CACHE_TTL_MS) {\n return { domain: cachedHost.domain, token: cachedHost.token };\n }\n\n const host = await getComputerUseHost();\n if (!host) {\n throw new Error(\n \"No active computer-use host found\\n\\n\" +\n \"Start a host with: zero computer-use host start\",\n );\n }\n\n cachedHost = { ...host, cachedAt: Date.now() };\n return host;\n}\n\n/**\n * Make an HTTP request to the computer-use host.\n */\nexport async function callHost(\n path: string,\n options?: { method?: string; body?: unknown },\n): Promise<Response> {\n const { domain, token } = await discoverHost();\n const url = `https://desktop.${domain}${path}`;\n\n const headers: Record<string, string> = { \"x-vm0-token\": token };\n const init: RequestInit = { headers };\n\n if (options?.method) {\n init.method = options.method;\n }\n if (options?.body !== undefined) {\n headers[\"content-type\"] = \"application/json\";\n init.body = JSON.stringify(options.body);\n }\n\n const response = await fetch(url, init);\n\n if (!response.ok) {\n const body = await response.text().catch(() => {\n return \"\";\n });\n throw new Error(\n `Host returned ${response.status}: ${body || response.statusText}`,\n );\n }\n\n return response;\n}\n","import { Command } from \"commander\";\nimport { callCommand } from \"./call\";\nimport { recordCommand } from \"./record\";\n\nexport const zeroPhoneCommand = new Command()\n .name(\"phone\")\n .description(\"Make and manage phone calls\")\n .addCommand(callCommand)\n .addCommand(recordCommand);\n","import * as fs from \"fs\";\nimport { Command, Option } from \"commander\";\nimport chalk from \"chalk\";\nimport { createPhoneCall, getPhoneCallDetail } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { printTranscript, printCallInfo } from \"./format\";\n\nconst POLL_INTERVAL_MS = 10_000;\nconst POLL_TIMEOUT_MS = 15 * 60 * 1000; // 15 minutes\n\nexport const delay = {\n ms: (ms: number): Promise<void> => {\n return new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n },\n};\n\nconst TERMINAL_STATUSES = new Set([\n \"completed\",\n \"ended\",\n \"failed\",\n \"no-answer\",\n \"busy\",\n \"cancelled\",\n]);\n\nfunction isErrnoException(err: unknown): err is NodeJS.ErrnoException {\n return err instanceof Error && \"code\" in err;\n}\n\nexport const callCommand = new Command()\n .name(\"call\")\n .description(\"Initiate an outbound phone call\")\n .argument(\n \"<to-number>\",\n \"Phone number to call (E.164 format, e.g. +14155551234)\",\n )\n .addOption(\n new Option(\n \"--mode <mode>\",\n \"onhold: wait for call to complete and return transcript. fire-and-forget: initiate and return immediately.\",\n )\n .choices([\"onhold\", \"fire-and-forget\"])\n .makeOptionMandatory(),\n )\n .option(\n \"--system-prompt-file <path>\",\n \"File that defines the agent's persona and task context for this call\",\n )\n .action(\n withErrorHandler(\n async (\n toNumber: string,\n options: {\n mode: \"onhold\" | \"fire-and-forget\";\n systemPromptFile?: string;\n },\n ) => {\n // Validate E.164 format\n if (!/^\\+[1-9]\\d{1,14}$/.test(toNumber)) {\n console.error(\n chalk.red(\n \"Invalid phone number format. Use E.164 (e.g. +14155551234)\",\n ),\n );\n process.exit(1);\n }\n\n let systemPrompt: string | undefined;\n if (options.systemPromptFile) {\n try {\n systemPrompt = fs.readFileSync(options.systemPromptFile, \"utf-8\");\n } catch (err) {\n if (isErrnoException(err) && err.code === \"ENOENT\") {\n console.error(\n chalk.red(`File not found: ${options.systemPromptFile}`),\n );\n process.exit(1);\n }\n throw err;\n }\n }\n\n const result = await createPhoneCall({\n toNumber,\n systemPrompt,\n });\n\n console.log(chalk.green(\"Call initiated\"));\n console.log(` ${\"Call ID:\".padEnd(12)}${chalk.cyan(result.callId)}`);\n console.log(` ${\"Status:\".padEnd(12)}${result.status}`);\n\n if (options.mode === \"fire-and-forget\") {\n return;\n }\n\n // onhold: poll until call completes\n console.log();\n console.log(\n chalk.dim(\"Waiting for call to complete (polling every 10s)...\"),\n );\n\n const startTime = Date.now();\n\n while (Date.now() - startTime < POLL_TIMEOUT_MS) {\n await delay.ms(POLL_INTERVAL_MS);\n\n const detail = await getPhoneCallDetail(result.callId);\n const status = detail.call.status;\n const elapsed = Math.round((Date.now() - startTime) / 1000);\n\n if (TERMINAL_STATUSES.has(status)) {\n console.log();\n console.log(chalk.bold(\"Call Detail\"));\n console.log();\n printCallInfo(detail.call, result.callId);\n console.log();\n console.log(chalk.bold(\"Transcript\"));\n console.log();\n printTranscript(detail.transcript);\n\n if (status === \"failed\") {\n process.exit(1);\n }\n return;\n }\n\n console.log(chalk.dim(` [${elapsed}s] status: ${status}`));\n }\n\n console.error(chalk.red(\"\\nCall timed out after 15 minutes\"));\n process.exit(1);\n },\n ),\n );\n","import chalk from \"chalk\";\nimport type { PhoneCall, TranscriptEntry } from \"../../../lib/api\";\n\nexport function printTranscript(transcript: TranscriptEntry[] | null): void {\n if (!transcript || transcript.length === 0) {\n console.log(\" (no transcript)\");\n return;\n }\n for (const entry of transcript) {\n console.log(` ${chalk.dim(`[${entry.role}]`)} ${entry.text}`);\n }\n}\n\nexport function printCallInfo(call: PhoneCall, callId: string): void {\n console.log(` ${\"Call ID:\".padEnd(16)}${chalk.cyan(call.id ?? callId)}`);\n console.log(` ${\"From:\".padEnd(16)}${call.fromNumber}`);\n console.log(` ${\"To:\".padEnd(16)}${call.toNumber}`);\n console.log(` ${\"Status:\".padEnd(16)}${call.status}`);\n console.log(\n ` ${\"Duration:\".padEnd(16)}${call.durationSeconds != null ? `${call.durationSeconds}s` : \"N/A\"}`,\n );\n console.log(` ${\"Started:\".padEnd(16)}${call.startedAt ?? \"\"}`);\n}\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { listPhoneCalls, getPhoneCallDetail } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { printTranscript, printCallInfo } from \"./format\";\n\nasync function showCallDetail(callId: string) {\n const result = await getPhoneCallDetail(callId);\n\n console.log(chalk.bold(\"Call Detail\"));\n console.log();\n printCallInfo(result.call, callId);\n console.log();\n console.log(chalk.bold(\"Transcript\"));\n console.log();\n printTranscript(result.transcript);\n}\n\nasync function showCallList(limit: number) {\n const result = await listPhoneCalls({ limit });\n\n if (result.data.length === 0) {\n console.log(chalk.dim(\"No phone calls found\"));\n return;\n }\n\n console.log(chalk.bold(\"Recent Calls\"));\n console.log();\n\n for (const call of result.data) {\n const id = call.id;\n const from = call.fromNumber;\n const to = call.toNumber;\n const status = call.status;\n const duration = call.durationSeconds;\n const snippet = call.lastTranscriptSnippet ?? \"\";\n\n console.log(` ${chalk.cyan(id)}`);\n console.log(\n ` ${from} → ${to} ${chalk.dim(status)}${duration != null ? ` ${duration}s` : \"\"}`,\n );\n if (snippet) {\n console.log(` ${chalk.dim(snippet.slice(0, 80))}`);\n }\n console.log();\n }\n\n console.log(\n chalk.dim(`Showing ${result.data.length} of ${result.total} call(s)`),\n );\n}\n\nexport const recordCommand = new Command()\n .name(\"record\")\n .description(\"View phone call history and transcripts\")\n .argument(\"[call-id]\", \"Call ID to view details (omit to list recent calls)\")\n .option(\"-n, --limit <number>\", \"Number of calls to show\", \"10\")\n .action(\n withErrorHandler(\n async (callId: string | undefined, options: { limit: string }) => {\n if (callId) {\n await showCallDetail(callId);\n } else {\n const limit = parseInt(options.limit, 10) || 10;\n await showCallList(limit);\n }\n },\n ),\n );\n","import { Command } from \"commander\";\nimport { voiceChatContextCommand } from \"./context\";\n\nexport const zeroVoiceChatCommand = new Command()\n .name(\"voice-chat\")\n .description(\"Read and write voice-chat shared context events\")\n .addCommand(voiceChatContextCommand)\n .addHelpText(\n \"after\",\n `\nExamples:\n Read all events: zero voice-chat context get <session-id>\n Read new events: zero voice-chat context get <session-id> --after 5\n Append an event: zero voice-chat context append <session-id> --source slow-brain --type directive --content \"Done\"`,\n );\n","import { Command } from \"commander\";\nimport { voiceChatContextGetCommand } from \"./get\";\nimport { voiceChatContextAppendCommand } from \"./append\";\n\nexport const voiceChatContextCommand = new Command()\n .name(\"context\")\n .description(\"Read and write voice-chat shared context\")\n .addCommand(voiceChatContextGetCommand)\n .addCommand(voiceChatContextAppendCommand);\n","import { Command } from \"commander\";\nimport { withErrorHandler } from \"../../../../lib/command\";\nimport { getVoiceChatContextEvents } from \"../../../../lib/api\";\n\nexport const voiceChatContextGetCommand = new Command()\n .name(\"get\")\n .description(\"Read shared context events for a voice-chat session\")\n .argument(\"<session-id>\", \"Voice-chat session ID\")\n .option(\n \"--after <seq>\",\n \"Only return events after this sequence number\",\n parseInt,\n )\n .action(\n withErrorHandler(async (sessionId: string, options: { after?: number }) => {\n const data = await getVoiceChatContextEvents(sessionId, options.after);\n console.log(JSON.stringify(data, null, 2));\n }),\n );\n","import { readFileSync } from \"fs\";\nimport { Command } from \"commander\";\nimport { withErrorHandler } from \"../../../../lib/command\";\nimport { appendVoiceChatContextEvent } from \"../../../../lib/api\";\n\nexport const voiceChatContextAppendCommand = new Command()\n .name(\"append\")\n .description(\"Append an event to voice-chat shared context\")\n .argument(\"<session-id>\", \"Voice-chat session ID\")\n .requiredOption(\n \"--source <source>\",\n \"Event source (system|user|fast-brain|slow-brain)\",\n )\n .requiredOption(\"--type <type>\", \"Event type\")\n .option(\n \"--content <content>\",\n \"Event content (reads from stdin if not provided)\",\n )\n .addHelpText(\n \"after\",\n `\nExamples:\n Append with content: zero voice-chat context append <session-id> --source slow-brain --type directive --content \"Done\"\n Pipe from stdin: echo \"Done\" | zero voice-chat context append <session-id> --source slow-brain --type directive`,\n )\n .action(\n withErrorHandler(\n async (\n sessionId: string,\n options: { source: string; type: string; content?: string },\n ) => {\n let content = options.content;\n\n // Read from stdin if content not provided and stdin is piped\n if (!content && process.stdin.isTTY === false) {\n content = readFileSync(\"/dev/stdin\", \"utf8\").trim();\n }\n\n const data = await appendVoiceChatContextEvent(sessionId, {\n source: options.source,\n type: options.type,\n content,\n });\n console.log(JSON.stringify(data, null, 2));\n },\n ),\n );\n"],"mappings":"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","names":["listCommand","setCommand","removeCommand","listCommand","setCommand","removeCommand","listCommand","setCommand","removeCommand","listCommand","setCommand","removeCommand","listCommand","import_prompts","prompts","type","config","prompts","selectedModel","provider","defaultNote","modelNote","removeCommand","listCommand","removeCommand","readFileSync","readFileSync","listCommand","deleteCommand","listCommand","deleteCommand","listCommand","statusCommand","listCommand","statusCommand","detectTimezone","day","setupCommand","listCommand","statusCommand","deleteCommand","setupCommand","listCommand","statusCommand","deleteCommand","listCommand","setCommand","deleteCommand","listCommand","setCommand","deleteCommand","readFileSync","readFileSync","readFileSync","readFileSync","truncateValue","listCommand","setCommand","deleteCommand","listCommand","setCommand","deleteCommand","formatConnectorIdentity","unknownIcon","readFileSync","join","createCommand","editCommand","viewCommand","listCommand","deleteCommand","createCommand","editCommand","viewCommand","listCommand","deleteCommand","listCommand","listCommand","createServer","join","execFile","promisify","execFileAsync","execFile","promisify","execFileAsync","execFile","spawn","promisify","execFileAsync","execFile","promisify","execFileAsync","getRandomPort","createServer","loadNgrok","getRandomPort","join","join","delay","readFileSync","readFileSync"]}
|