@integrity-labs/agt-cli 0.7.1 → 0.7.2

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/bin/agt.ts","../../src/lib/globals.ts","../../src/commands/whoami.ts","../../src/lib/output.ts","../../src/commands/team.ts","../../src/lib/auth-guard.ts","../../src/commands/init.ts","../../src/commands/lint.ts","../../src/commands/channels.ts","../../src/commands/channel-slack.ts","../../src/commands/channel-beam.ts","../../src/commands/deploy.ts","../../src/commands/provision.ts","../../src/commands/drift.ts","../../../../packages/core/src/drift/live-state-reader.ts","../../src/commands/host.ts","../../src/commands/manager.ts","../../src/lib/watchdog.ts","../../src/commands/agent.ts","../../src/commands/kanban-recurring.ts","../../src/commands/setup.ts","../../src/commands/kanban.ts","../../../../packages/core/src/acp/agent-registry.ts","../../../../packages/core/src/acp/client.ts","../../src/commands/acpx.ts","../../src/commands/update.ts"],"sourcesContent":["#!/usr/bin/env node\n\n// Register framework adapters (side-effect imports — must be before any provisioning code)\nimport '@augmented/core/provisioning/frameworks/openclaw/index.js';\nimport '@augmented/core/provisioning/frameworks/nemoclaw/index.js';\nimport '@augmented/core/provisioning/frameworks/claudecode/index.js';\n\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport { Command } from 'commander';\nimport { setJsonMode } from '../lib/globals.js';\nimport { whoamiCommand } from '../commands/whoami.js';\nimport {\n teamListCommand,\n teamCreateCommand,\n teamSwitchCommand,\n} from '../commands/team.js';\nimport { initCommand } from '../commands/init.js';\nimport { lintCommand } from '../commands/lint.js';\nimport { channelsListCommand, channelsCheckCommand } from '../commands/channels.js';\nimport { channelSlackSetupCommand, channelSlackStatusCommand, channelSlackRemoveCommand } from '../commands/channel-slack.js';\nimport { channelBeamSetupCommand, channelBeamStatusCommand, channelBeamRemoveCommand } from '../commands/channel-beam.js';\nimport { deployCommand } from '../commands/deploy.js';\nimport { provisionCommand } from '../commands/provision.js';\nimport { driftCheckCommand, driftWatchCommand } from '../commands/drift.js';\nimport {\n hostListCommand,\n hostAssignCommand,\n hostUnassignCommand,\n hostAgentsCommand,\n hostRotateKeyCommand,\n hostDecommissionCommand,\n} from '../commands/host.js';\nimport {\n managerStartCommand,\n managerStopCommand,\n managerStatusCommand,\n} from '../commands/manager.js';\nimport { agentShowCommand } from '../commands/agent.js';\nimport {\n kanbanRecurringAddCommand,\n kanbanRecurringListCommand,\n kanbanRecurringDisableCommand,\n} from '../commands/kanban-recurring.js';\nimport { setupCommand } from '../commands/setup.js';\nimport {\n kanbanListCommand,\n kanbanAddCommand,\n kanbanMoveCommand,\n kanbanUpdateCommand,\n kanbanDoneCommand,\n} from '../commands/kanban.js';\nimport {\n acpxSpawnCommand,\n acpxPromptCommand,\n acpxExecCommand,\n acpxListSessionsCommand,\n acpxCancelCommand,\n acpxCloseCommand,\n} from '../commands/acpx.js';\nimport { updateCommand, checkForUpdateOnStartup } from '../commands/update.js';\n\ndeclare const __CLI_VERSION__: string;\n\nconst cliVersion = typeof __CLI_VERSION__ !== 'undefined' ? __CLI_VERSION__ : 'dev';\n\nconst program = new Command();\n\nprogram\n .name('agt')\n .description('Augmented CLI — agent provisioning and management')\n .version(cliVersion)\n .option('--json', 'Emit machine-readable JSON output (suppress spinners and colors)')\n .option('--skip-update-check', 'Skip the automatic update check on startup');\n\n// ── Global pre-action hook ──────────────────────────────────────────────────\n\nprogram.hook('preAction', (thisCommand) => {\n const root = thisCommand.optsWithGlobals();\n if (root.json) {\n setJsonMode(true);\n }\n});\n\n// ── Auth commands ──────────────────────────────────────────────────────────\n\nprogram\n .command('whoami')\n .description('Show the authenticated host, team, and user from AGT_API_KEY')\n .action(whoamiCommand);\n\nprogram\n .command('setup <token>')\n .description('One-command host setup: exchange provisioning token, configure env vars, verify, and start manager')\n .action(setupCommand);\n\n// ── Team commands ─────────────────────────────────────────────────────\n\nconst team = program\n .command('team')\n .description('Manage teams');\n\nteam\n .command('list')\n .description('List teams you belong to')\n .action(teamListCommand);\n\nteam\n .command('create <name>')\n .description('Create a new team and set it as active')\n .action(teamCreateCommand);\n\nteam\n .command('switch <slug>')\n .description('Switch the active team')\n .action(teamSwitchCommand);\n\n// ── Agent commands ─────────────────────────────────────────────────────────\n\nprogram\n .command('init')\n .description('Create a new agent (interactive wizard, or non-interactive with --name)')\n .option('--name <display-name>', 'Agent display name (triggers non-interactive mode)')\n .option('--code-name <code-name>', 'Agent code name (kebab-case, derived from --name if omitted)')\n .option('--description <text>', 'Short agent description')\n .option('--env <environment>', 'Environment: dev | stage | prod', 'dev')\n .option('--risk-tier <tier>', 'Risk tier: Low | Medium | High', 'Low')\n .option('--budget-type <type>', 'Budget type: tokens | dollars | both', 'tokens')\n .option('--budget-tokens <number>', 'Token budget limit', '10000')\n .option('--budget-dollars <number>', 'Dollar budget limit', '10')\n .option('--budget-window <window>', 'Budget window: daily | weekly | monthly', 'daily')\n .option('--budget-enforcement <mode>', 'Budget enforcement: block | throttle | alert | degrade', 'block')\n .option('--channels <list>', 'Comma-separated channel IDs')\n .option('--logging <mode>', 'Logging mode: redacted | hash-only | full-local', 'redacted')\n .action(initCommand);\n\nprogram\n .command('lint')\n .argument('[path]', 'Path to agent directory (default: all agents in .augmented/)')\n .description('Lint CHARTER.md and TOOLS.md files')\n .action(lintCommand);\n\n// ── Channel commands ───────────────────────────────────────────────────────\n\nconst channels = program\n .command('channels')\n .description('Manage and inspect channel configuration');\n\nchannels\n .command('list')\n .description('Print the full channel registry with security metadata')\n .action(channelsListCommand);\n\nchannels\n .command('check <agent>')\n .description('Resolve the effective channel list for an agent')\n .action(channelsCheckCommand);\n\nconst slack = channels\n .command('slack')\n .description('Manage Slack channel configuration');\n\nslack\n .command('setup <agent-code-name>')\n .description('Configure Slack bot scopes, generate manifest, and store credentials')\n .option('--preset <preset>', 'Scope preset: minimal | standard | full')\n .option('--scopes <scopes>', 'Comma-separated list of Slack bot scopes')\n .option('--skip-create', 'Skip Slack CLI app creation step')\n .option('--bot-token <token>', 'Slack bot token (xoxb-…)')\n .option('--signing-secret <secret>', 'Slack signing secret')\n .option('--config-token <token>', 'Slack app configuration token (xoxe-…) for API-based app creation')\n .action(channelSlackSetupCommand);\n\nslack\n .command('status <agent-code-name>')\n .description('Show current Slack configuration for an agent')\n .action(channelSlackStatusCommand);\n\nslack\n .command('remove <agent-code-name>')\n .description('Remove Slack bot configuration for an agent')\n .action(channelSlackRemoveCommand);\n\nconst beam = channels\n .command('beam')\n .description('Manage Beam Protocol channel configuration');\n\nbeam\n .command('setup <agent-code-name>')\n .description('Generate Beam identity, register in directory, and configure channel')\n .option('--directory-url <url>', 'Beam directory URL (default: hosted)')\n .option('--skip-register', 'Skip directory registration')\n .option('--auto-publish', 'Auto-publish capabilities from TOOLS.md', true)\n .action(channelBeamSetupCommand);\n\nbeam\n .command('status <agent-code-name>')\n .description('Show Beam configuration and directory status')\n .action(channelBeamStatusCommand);\n\nbeam\n .command('remove <agent-code-name>')\n .description('Remove Beam identity for an agent')\n .action(channelBeamRemoveCommand);\n\n// ── Provision commands ─────────────────────────────────────────────────────\n\nprogram\n .command('provision <code-name>')\n .description('Provision an agent: build OpenClaw config, generate files, store snapshot')\n .option('--target <target>', 'Deployment target', 'local_docker')\n .option('--output <dir>', 'Output directory for generated files')\n .option('--dry-run', 'Print what would be generated without writing files')\n .action(provisionCommand);\n\n// ── Deploy commands ────────────────────────────────────────────────────────\n\nprogram\n .command('deploy')\n .description('Generate deployment config from a template')\n .option('--template <id>', 'Template ID (triggers non-interactive mode)')\n .option('--port <number>', 'Base port for gateway', '9000')\n .action(deployCommand);\n\n// ── Drift commands ────────────────────────────────────────────────────────\n\nconst drift = program\n .command('drift')\n .description('Detect configuration drift from provisioned state');\n\ndrift\n .command('check <code-name>')\n .description('Compare live state against provisioned snapshot')\n .option('--json', 'Output as JSON')\n .option('--audit', 'Run openclaw security audit')\n .option('--config <path>', 'Path to openclaw.json')\n .action(driftCheckCommand);\n\ndrift\n .command('watch <code-name>')\n .description('Continuously monitor for drift')\n .option('--interval <seconds>', 'Check interval in seconds', '60')\n .option('--webhook <url>', 'POST webhook URL on new findings')\n .option('--json', 'Output as JSON')\n .option('--config <path>', 'Path to openclaw.json')\n .action(driftWatchCommand);\n\n// ── Host commands ─────────────────────────────────────────────────────────\n\nconst host = program\n .command('host')\n .description('Manage hosts (OpenClaw servers/gateways) and their API keys');\n\nhost\n .command('list')\n .description('List hosts in the active team')\n .action(hostListCommand);\n\nhost\n .command('assign <host-name> <agent-code-names...>')\n .description('Assign agents to a host')\n .option('--force', 'Reassign agents already assigned to another host')\n .action(hostAssignCommand);\n\nhost\n .command('unassign <host-name> <agent-code-names...>')\n .description('Unassign agents from a host')\n .action(hostUnassignCommand);\n\nhost\n .command('agents [host-name]')\n .description('List agents assigned to a host (omit name to auto-resolve from AGT_API_KEY)')\n .action(hostAgentsCommand);\n\nhost\n .command('rotate-key <host-name>')\n .description('Rotate the API key for a host (revokes the old key)')\n .action(hostRotateKeyCommand);\n\nhost\n .command('decommission <host-name>')\n .description('Decommission a host (revokes key, marks inactive)')\n .action(hostDecommissionCommand);\n\n// ── Manager commands ──────────────────────────────────────────────────────\n\nconst manager = program\n .command('manager')\n .description('Host config sync daemon — keeps local agent files in sync with API');\n\nmanager\n .command('start')\n .description('Start the manager daemon (polls API for config changes and detects local drift)')\n .option('--interval <seconds>', 'Poll interval in seconds (min 5)', '10')\n .option('--config-dir <dir>', 'Config directory for agent files', join(homedir(), '.augmented'))\n .action(managerStartCommand);\n\nmanager\n .command('stop')\n .description('Stop the running manager daemon')\n .action(managerStopCommand);\n\nmanager\n .command('status')\n .description('Show the current manager daemon status and discovered agents')\n .action(managerStatusCommand);\n\n// ── Agent inspect commands ────────────────────────────────────────────────\n\nconst agent = program\n .command('agent')\n .description('Inspect and manage agents');\n\nagent\n .command('show <code-name>')\n .description(\"Display an agent's provisioned OpenClaw configuration\")\n .option('--config-dir <dir>', 'Config directory', join(homedir(), '.augmented'))\n .option('--all-channels', 'Show all channels (including disabled)')\n .action(agentShowCommand);\n\n// ── Kanban commands ──────────────────────────────────────────────────────\n\nconst kanban = program\n .command('kanban')\n .description('Manage agent kanban boards');\n\nkanban\n .command('list')\n .description('List kanban board items for an agent')\n .requiredOption('--agent <code-name>', 'Agent code name')\n .action(kanbanListCommand);\n\nkanban\n .command('add <title>')\n .description('Add a new item to an agent kanban board')\n .requiredOption('--agent <code-name>', 'Agent code name')\n .option('--priority <1|2|3>', 'Priority: 1=high, 2=medium, 3=low', '2')\n .option('--status <status>', 'Initial status: backlog | today | in_progress', 'today')\n .option('--description <text>', 'Item description')\n .option('--estimate <minutes>', 'Estimated time in minutes')\n .option('--deliverable <text>', 'Expected output/deliverable')\n .action(kanbanAddCommand);\n\nkanban\n .command('move <title-or-id> <status>')\n .description('Move a kanban item to a different status')\n .requiredOption('--agent <code-name>', 'Agent code name')\n .option('--notes <text>', 'Progress notes')\n .action(kanbanMoveCommand);\n\nkanban\n .command('update <title-or-id>')\n .description('Update notes or result on a kanban item')\n .requiredOption('--agent <code-name>', 'Agent code name')\n .option('--notes <text>', 'Progress notes')\n .option('--result <text>', 'Result/output produced')\n .action(kanbanUpdateCommand);\n\nkanban\n .command('done <title-or-id>')\n .description('Mark a kanban item as done')\n .requiredOption('--agent <code-name>', 'Agent code name')\n .option('--result <text>', 'What was produced/delivered')\n .option('--notes <text>', 'Completion notes')\n .action(kanbanDoneCommand);\n\nconst recurring = kanban\n .command('recurring')\n .description('Manage recurring kanban tasks');\n\nrecurring\n .command('add <title>')\n .description('Create a recurring kanban task')\n .requiredOption('--agent <code-name>', 'Agent code name')\n .requiredOption('--every <schedule>', 'Schedule: \"every Monday at 9am\", \"daily at 8:30am\", \"every 2 hours\", or cron')\n .option('--priority <1|2|3>', 'Priority: 1=high, 2=medium, 3=low', '2')\n .option('--description <text>', 'Task description')\n .option('--estimate <minutes>', 'Estimated time in minutes')\n .option('--deliverable <text>', 'Expected output/deliverable')\n .option('--timezone <tz>', 'Timezone (default: UTC)')\n .action(kanbanRecurringAddCommand);\n\nrecurring\n .command('list')\n .description('List recurring kanban templates for an agent')\n .requiredOption('--agent <code-name>', 'Agent code name')\n .action(kanbanRecurringListCommand);\n\nrecurring\n .command('disable <title-or-id>')\n .description('Disable a recurring kanban template')\n .requiredOption('--agent <code-name>', 'Agent code name')\n .action(kanbanRecurringDisableCommand);\n\n// ── ACPX commands ────────────────────────────────────────────────────────\n\nconst acpx = program\n .command('acpx')\n .description('Agent Client Protocol (ACP) session management via acpx')\n .option('--cwd <path>', 'Working directory for session routing')\n .option('-s, --name <name>', 'Named session for parallel workstreams')\n .option('--approve-all', 'Auto-approve all agent tool permissions')\n .option('--format <type>', 'Output format: text | json | json-strict | quiet', 'text')\n .option('--ttl <seconds>', 'Queue owner idle TTL in seconds (0 = indefinite)')\n .option('--timeout <seconds>', 'Prompt execution timeout')\n .option('--no-wait', 'Submit prompt without waiting for completion');\n\nacpx\n .command('spawn <agent>')\n .description('Spawn or ensure an ACP session for an agent (claude, codex, openclaw)')\n .action(acpxSpawnCommand);\n\nacpx\n .command('prompt <agent> <prompt>')\n .description('Send a prompt to an ACP session')\n .action(acpxPromptCommand);\n\nacpx\n .command('exec <agent> <prompt>')\n .description('One-shot execution (no session reuse)')\n .action(acpxExecCommand);\n\nacpx\n .command('list-sessions <agent>')\n .description('List active ACP sessions for an agent')\n .action(acpxListSessionsCommand);\n\nacpx\n .command('cancel <agent>')\n .description('Send cooperative cancel to the running ACP session')\n .action(acpxCancelCommand);\n\nacpx\n .command('close <agent>')\n .description('Soft-close an ACP session (preserves history)')\n .action(acpxCloseCommand);\n\n// ── Update command ───────────────────────────────────────────────────────\n\nprogram\n .command('update')\n .description('Check for and install CLI updates')\n .action(updateCommand);\n\n// ── Parse & run ────────────────────────────────────────────────────────────\n\n// Non-blocking startup update check (fire-and-forget, resolves after parse)\nconst skipUpdateCheck =\n process.argv.includes('--skip-update-check') ||\n process.argv.includes('--json') ||\n process.argv[2] === 'update';\n\nif (!skipUpdateCheck) {\n // Fire the check but don't await — it prints to stderr if an update is found\n checkForUpdateOnStartup().catch(() => {});\n}\n\nprogram.parse();\n","import chalk from 'chalk';\n\nlet _jsonMode = false;\n\nexport function setJsonMode(enabled: boolean): void {\n _jsonMode = enabled;\n if (enabled) {\n chalk.level = 0;\n }\n}\n\nexport function isJsonMode(): boolean {\n return _jsonMode;\n}\n\n/**\n * Emit a JSON object to stdout and exit cleanly.\n * In JSON mode, this is the only output function that should be used.\n */\nexport function jsonOutput(data: Record<string, unknown>): void {\n console.log(JSON.stringify(data, null, 2));\n}\n","import chalk from 'chalk';\nimport ora from 'ora';\nimport { getApiKey, AGT_HOST } from '../lib/config.js';\nimport { exchangeApiKey } from '../lib/api-client.js';\nimport { success, error, info } from '../lib/output.js';\nimport { isJsonMode, jsonOutput } from '../lib/globals.js';\n\nexport async function whoamiCommand(): Promise<void> {\n const json = isJsonMode();\n const apiKey = getApiKey();\n\n if (!apiKey) {\n if (json) {\n jsonOutput({ ok: false, error: 'AGT_API_KEY is not set' });\n } else {\n error('AGT_API_KEY is not set. Export it with your host API key (tlk_...)');\n }\n process.exitCode = 1;\n return;\n }\n\n const spinner = ora({ text: 'Exchanging API key\\u2026', isSilent: json });\n spinner.start();\n\n try {\n const exchange = await exchangeApiKey(apiKey);\n spinner.stop();\n\n if (json) {\n jsonOutput({\n ok: true,\n api_key_prefix: apiKey.slice(0, 8) + '****',\n host: AGT_HOST ?? null,\n host_id: exchange.hostId,\n team: exchange.teamSlug,\n team_id: exchange.teamId,\n email: exchange.userEmail,\n });\n return;\n }\n\n success('Authenticated via API key');\n info(`API Key: ${chalk.bold(apiKey.slice(0, 8) + '****')}`);\n info(`Host: ${chalk.bold(AGT_HOST ?? 'not set')}`);\n info(`Host ID: ${exchange.hostId}`);\n info(`Team: ${chalk.bold(exchange.teamSlug ?? exchange.teamId)}`);\n info(`User: ${chalk.bold(exchange.userEmail ?? 'unknown')}`);\n } catch (err) {\n spinner.fail('Failed to exchange API key.');\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n }\n}\n","import chalk from 'chalk';\nimport Table from 'cli-table3';\n\nexport function success(msg: string): void {\n console.log(chalk.green(`\\u2714 ${msg}`));\n}\n\nexport function error(msg: string): void {\n console.error(chalk.red(`\\u2718 ${msg}`));\n}\n\nexport function warn(msg: string): void {\n console.warn(chalk.yellow(`\\u26A0 ${msg}`));\n}\n\nexport function info(msg: string): void {\n console.log(chalk.cyan(`\\u2139 ${msg}`));\n}\n\n/**\n * Print a formatted table to stdout.\n *\n * @param headers - Column header labels\n * @param rows - Array of row arrays (one value per column)\n */\nexport function table(headers: string[], rows: string[][]): void {\n const t = new Table({\n head: headers.map((h) => chalk.bold.cyan(h)),\n style: { head: [], border: [] },\n });\n\n for (const row of rows) {\n t.push(row);\n }\n\n console.log(t.toString());\n}\n","import chalk from 'chalk';\nimport ora from 'ora';\nimport { setActiveTeam, getActiveTeam } from '../lib/config.js';\nimport { api } from '../lib/api-client.js';\nimport { requireAuth } from '../lib/auth-guard.js';\nimport { success, error, info, table } from '../lib/output.js';\nimport { isJsonMode, jsonOutput } from '../lib/globals.js';\n\n// ---------------------------------------------------------------------------\n// Subcommands\n// ---------------------------------------------------------------------------\n\n/**\n * `agt team list`\n * Fetch teams where the current user is a member and display as a table.\n */\nexport async function teamListCommand(): Promise<void> {\n if (!requireAuth()) return;\n\n const json = isJsonMode();\n const spinner = ora({ text: 'Fetching teams\\u2026', isSilent: json });\n spinner.start();\n\n try {\n const data = await api.get<{\n teams: Array<{\n id: string;\n name: string;\n slug: string;\n plan: string;\n role: string;\n created_at: string;\n }>;\n }>('/teams');\n\n spinner.stop();\n\n if (!data.teams || data.teams.length === 0) {\n if (json) {\n jsonOutput({ ok: true, teams: [] });\n } else {\n info('You are not a member of any teams. Create one with `agt team create <name>`.');\n }\n return;\n }\n\n const activeSlug = getActiveTeam();\n\n if (json) {\n const teams = data.teams.map((ws) => ({\n name: ws.name,\n slug: ws.slug,\n role: ws.role,\n active: ws.slug === activeSlug,\n }));\n jsonOutput({ ok: true, teams });\n return;\n }\n\n const rows = data.teams.map((ws) => {\n const active = ws.slug === activeSlug ? chalk.green('*') : '';\n return [active, ws.name, ws.slug, ws.role];\n });\n\n table(['', 'Name', 'Slug', 'Role'], rows);\n } catch (err) {\n spinner.fail('Failed to fetch teams.');\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n }\n}\n\n/**\n * `agt team create <name>`\n * Create a new team, add the creator as owner, and set it as active.\n */\nexport async function teamCreateCommand(name: string): Promise<void> {\n if (!requireAuth()) return;\n\n const json = isJsonMode();\n const slug = name\n .toLowerCase()\n .trim()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '');\n\n if (!slug) {\n if (json) {\n jsonOutput({ ok: false, error: 'Invalid team name' });\n } else {\n error('Invalid team name. It must contain at least one alphanumeric character.');\n }\n process.exitCode = 1;\n return;\n }\n\n const spinner = ora({ text: `Creating team \"${name}\" (${slug})\\u2026`, isSilent: json });\n spinner.start();\n\n try {\n const data = await api.post<{\n team: { id: string; name: string; slug: string; plan: string; role: string };\n }>('/teams', { name, slug });\n\n // Set as active\n setActiveTeam(data.team.slug);\n\n spinner.succeed(`Team \"${chalk.bold(name)}\" created.`);\n\n if (json) {\n jsonOutput({ ok: true, name, slug: data.team.slug, role: data.team.role });\n return;\n }\n\n info(`Slug: ${chalk.bold(data.team.slug)}`);\n success(`Active team set to ${chalk.bold(data.team.slug)}.`);\n } catch (err) {\n spinner.fail('Failed to create team.');\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n }\n}\n\n/**\n * `agt team switch <slug>`\n * Verify the user is a member of the team and set it as active.\n */\nexport async function teamSwitchCommand(slug: string): Promise<void> {\n if (!requireAuth()) return;\n\n const json = isJsonMode();\n const spinner = ora({ text: `Switching to team \"${slug}\"\\u2026`, isSilent: json });\n spinner.start();\n\n try {\n await api.get(`/teams/${encodeURIComponent(slug)}`);\n\n setActiveTeam(slug);\n spinner.succeed(`Active team set to ${chalk.bold(slug)}.`);\n\n if (json) {\n jsonOutput({ ok: true, team: slug });\n }\n } catch (err) {\n spinner.fail(`Could not switch to team \"${slug}\".`);\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n }\n}\n","import { getApiKey } from './config.js';\nimport { error } from './output.js';\n\n/**\n * Guard: checks that AGT_API_KEY is set.\n * Returns false (and prints an error) if not.\n */\nexport function requireAuth(): boolean {\n const key = getApiKey();\n if (!key) {\n error('AGT_API_KEY is not set. Export it with your host API key (tlk_...)');\n process.exitCode = 1;\n return false;\n }\n return true;\n}\n\n/**\n * Guard: checks that AGT_API_KEY is set.\n * Team auto-resolves from the API key exchange.\n * Returns a truthy string on success, or null on failure.\n */\nexport function requireTeam(): string | null {\n if (!requireAuth()) return null;\n return 'auto'; // team resolves from exchange\n}\n","import chalk from 'chalk';\nimport ora from 'ora';\nimport { input, select, checkbox, confirm } from '@inquirer/prompts';\nimport { randomUUID } from 'node:crypto';\nimport { mkdirSync, writeFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport {\n generateCharterMd,\n generateToolsMd,\n lintAll,\n getAllChannelIds,\n type CharterGenerationInput,\n type ToolsGenerationInput,\n type ChannelId,\n type LintDiagnostic,\n} from '@augmented/core';\nimport { requireTeam } from '../lib/auth-guard.js';\nimport { api } from '../lib/api-client.js';\nimport { success, error, warn, info } from '../lib/output.js';\nimport { isJsonMode, jsonOutput } from '../lib/globals.js';\n\nfunction toSlug(name: string): string {\n return name\n .toLowerCase()\n .trim()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '');\n}\n\nfunction printDiagnostics(diagnostics: LintDiagnostic[]): void {\n for (const d of diagnostics) {\n const prefix = d.severity === 'error' ? chalk.red('ERR') : chalk.yellow('WARN');\n const path = d.path ? chalk.dim(` (${d.path})`) : '';\n console.log(` ${prefix} [${d.code}] ${d.message}${path}`);\n }\n}\n\n/** Options passed from Commander flags. */\ninterface InitOptions {\n name?: string;\n codeName?: string;\n description?: string;\n env?: string;\n riskTier?: string;\n budgetType?: string;\n budgetTokens?: string;\n budgetDollars?: string;\n budgetWindow?: string;\n budgetEnforcement?: string;\n channels?: string;\n logging?: string;\n}\n\n/**\n * `agt init`\n * Interactive wizard to create a new agent, generate CHARTER.md + TOOLS.md,\n * register via the API, and write files to `.augmented/<code_name>/`.\n */\nexport async function initCommand(opts: InitOptions): Promise<void> {\n const teamSlug = requireTeam();\n if (!teamSlug) return;\n\n const nonInteractive = !!opts.name;\n const json = isJsonMode();\n\n let displayName: string;\n let codeName: string;\n let description: string;\n let environment: 'dev' | 'stage' | 'prod';\n let riskTier: 'Low' | 'Medium' | 'High';\n let budgetType: 'tokens' | 'dollars' | 'both';\n let budgetLimitTokens: number | undefined;\n let budgetLimitDollars: number | undefined;\n let budgetLimit: number;\n let budgetWindow: 'daily' | 'weekly' | 'monthly';\n let budgetEnforcement: 'alert' | 'throttle' | 'block' | 'degrade';\n let selectedChannels: ChannelId[];\n let loggingMode: 'hash-only' | 'redacted' | 'full-local';\n\n if (nonInteractive) {\n displayName = opts.name!;\n codeName = opts.codeName ?? toSlug(displayName);\n description = opts.description ?? `${displayName} agent`;\n environment = (opts.env ?? 'dev') as 'dev' | 'stage' | 'prod';\n riskTier = (opts.riskTier ?? 'Low') as 'Low' | 'Medium' | 'High';\n budgetType = (opts.budgetType ?? 'tokens') as 'tokens' | 'dollars' | 'both';\n budgetLimitTokens = (budgetType === 'tokens' || budgetType === 'both')\n ? Number(opts.budgetTokens ?? '10000')\n : undefined;\n budgetLimitDollars = (budgetType === 'dollars' || budgetType === 'both')\n ? Number(opts.budgetDollars ?? '10')\n : undefined;\n budgetLimit = budgetLimitTokens ?? budgetLimitDollars ?? 10000;\n budgetWindow = (opts.budgetWindow ?? 'daily') as 'daily' | 'weekly' | 'monthly';\n budgetEnforcement = (opts.budgetEnforcement ?? 'block') as 'alert' | 'throttle' | 'block' | 'degrade';\n selectedChannels = opts.channels\n ? opts.channels.split(',').map((c) => c.trim()) as ChannelId[]\n : [];\n loggingMode = (opts.logging ?? 'redacted') as 'hash-only' | 'redacted' | 'full-local';\n } else {\n console.log(chalk.bold('\\nAugmented — Agent Init Wizard\\n'));\n\n displayName = await input({\n message: 'Agent display name:',\n validate: (v) => v.trim().length > 0 || 'Name is required',\n });\n\n const suggestedSlug = toSlug(displayName);\n codeName = await input({\n message: 'Code name (kebab-case):',\n default: suggestedSlug,\n validate: (v) => /^[a-z0-9][a-z0-9-]*[a-z0-9]$|^[a-z0-9]$/.test(v) || 'Must be lowercase alphanumeric with hyphens',\n });\n\n description = await input({\n message: 'Short description:',\n default: `${displayName} agent`,\n });\n\n environment = await select({\n message: 'Environment:',\n choices: [\n { value: 'dev', name: 'dev' },\n { value: 'stage', name: 'stage' },\n { value: 'prod', name: 'prod' },\n ],\n }) as 'dev' | 'stage' | 'prod';\n\n riskTier = await select({\n message: 'Risk tier:',\n choices: [\n { value: 'Low', name: 'Low — read-only tools, no PII' },\n { value: 'Medium', name: 'Medium — write access, limited scope' },\n { value: 'High', name: 'High — broad access, PII, external comms' },\n ],\n }) as 'Low' | 'Medium' | 'High';\n\n budgetType = await select({\n message: 'Budget type:',\n choices: [\n { value: 'tokens', name: 'Tokens' },\n { value: 'dollars', name: 'Dollars' },\n { value: 'both', name: 'Both' },\n ],\n }) as 'tokens' | 'dollars' | 'both';\n\n budgetLimit = 10000;\n budgetLimitTokens = undefined;\n budgetLimitDollars = undefined;\n\n if (budgetType === 'tokens' || budgetType === 'both') {\n const val = await input({\n message: 'Token budget limit:',\n default: '10000',\n validate: (v) => !isNaN(Number(v)) && Number(v) > 0 || 'Must be a positive number',\n });\n budgetLimitTokens = Number(val);\n budgetLimit = budgetLimitTokens;\n }\n\n if (budgetType === 'dollars' || budgetType === 'both') {\n const val = await input({\n message: 'Dollar budget limit:',\n default: '10',\n validate: (v) => !isNaN(Number(v)) && Number(v) > 0 || 'Must be a positive number',\n });\n budgetLimitDollars = Number(val);\n if (budgetType === 'dollars') budgetLimit = budgetLimitDollars;\n }\n\n budgetWindow = await select({\n message: 'Budget window:',\n choices: [\n { value: 'daily', name: 'Daily' },\n { value: 'weekly', name: 'Weekly' },\n { value: 'monthly', name: 'Monthly' },\n ],\n }) as 'daily' | 'weekly' | 'monthly';\n\n budgetEnforcement = await select({\n message: 'Budget enforcement:',\n choices: [\n { value: 'block', name: 'Block — hard stop when limit reached' },\n { value: 'throttle', name: 'Throttle — slow down near limit' },\n { value: 'alert', name: 'Alert — warn but do not stop' },\n { value: 'degrade', name: 'Degrade — switch to cheaper model' },\n ],\n }) as 'alert' | 'throttle' | 'block' | 'degrade';\n\n const allChannels = getAllChannelIds();\n selectedChannels = await checkbox({\n message: 'Select allowed channels:',\n choices: allChannels.map((c) => ({ value: c, name: c })),\n }) as ChannelId[];\n\n loggingMode = await select({\n message: 'Logging mode:',\n choices: [\n { value: 'redacted', name: 'Redacted — PII stripped' },\n { value: 'hash-only', name: 'Hash-only — content is hashed' },\n { value: 'full-local', name: 'Full local — plain text (dev only)' },\n ],\n }) as 'hash-only' | 'redacted' | 'full-local';\n }\n\n // ── Resolve user info via API ─────────────────────────────────────────\n\n const spinner = ora({ text: 'Creating agent…', isSilent: json });\n spinner.start();\n\n let userEmail: string;\n let userId: string;\n try {\n const me = await api.get<{ id: string; email: string | null }>('/auth/me');\n userId = me.id;\n userEmail = me.email ?? me.id;\n } catch (err) {\n spinner.fail('Could not determine current user.');\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n return;\n }\n\n const agentId = randomUUID();\n\n // ── Generate CHARTER.md + TOOLS.md ─────────────────────────────────────\n\n const charterInput: CharterGenerationInput = {\n agent_id: agentId,\n code_name: codeName,\n display_name: displayName,\n environment,\n owner: {\n id: userId,\n name: userEmail,\n email: userEmail,\n },\n risk_tier: riskTier,\n logging_mode: loggingMode,\n description,\n };\n\n const toolsInput: ToolsGenerationInput = {\n agent_id: agentId,\n code_name: codeName,\n environment,\n owner: userEmail,\n display_name: displayName,\n logging_redaction: loggingMode,\n };\n\n const charterMd = generateCharterMd(charterInput);\n const toolsMd = generateToolsMd(toolsInput);\n\n // ── Lint ────────────────────────────────────────────────────────────────\n\n const lintResult = lintAll(charterMd, toolsMd);\n\n // ── Register via API ───────────────────────────────────────────────────\n\n try {\n await api.post('/agents', {\n code_name: codeName,\n display_name: displayName,\n description,\n environment,\n risk_tier: riskTier,\n channels: selectedChannels,\n charter_content: charterMd,\n charter_version: '0.1',\n tools_content: toolsMd,\n tools_version: '0.1',\n });\n } catch (err) {\n spinner.fail('Failed to register agent.');\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n return;\n }\n\n // ── Write files to .augmented/<code_name>/ ─────────────────────────────\n\n const agentDir = join(process.cwd(), '.augmented', codeName);\n mkdirSync(agentDir, { recursive: true });\n writeFileSync(join(agentDir, 'CHARTER.md'), charterMd);\n writeFileSync(join(agentDir, 'TOOLS.md'), toolsMd);\n\n spinner.succeed(`Agent \"${chalk.bold(displayName)}\" created.`);\n\n // ── Output ─────────────────────────────────────────────────────────────\n\n if (json) {\n jsonOutput({\n ok: true,\n agent_id: agentId,\n code_name: codeName,\n display_name: displayName,\n environment,\n risk_tier: riskTier,\n channels: selectedChannels,\n directory: agentDir,\n lint: {\n ok: lintResult.ok,\n errors: lintResult.errors.length,\n warnings: lintResult.warnings.length,\n diagnostics: [...lintResult.errors, ...lintResult.warnings],\n },\n });\n return;\n }\n\n console.log();\n info(`Agent ID: ${agentId}`);\n info(`Code Name: ${codeName}`);\n info(`Environment: ${environment}`);\n info(`Risk Tier: ${riskTier}`);\n info(`Channels: ${selectedChannels.length > 0 ? selectedChannels.join(', ') : 'none'}`);\n info(`Files: ${agentDir}/CHARTER.md, TOOLS.md`);\n console.log();\n\n if (lintResult.ok && lintResult.warnings.length === 0) {\n success('Lint passed — no errors or warnings.');\n } else {\n if (lintResult.errors.length > 0) {\n error(`Lint: ${lintResult.errors.length} error(s)`);\n printDiagnostics(lintResult.errors);\n }\n if (lintResult.warnings.length > 0) {\n warn(`Lint: ${lintResult.warnings.length} warning(s)`);\n printDiagnostics(lintResult.warnings);\n }\n }\n\n console.log();\n info(`Next steps:`);\n info(` 1. Edit ${chalk.bold('.augmented/' + codeName + '/CHARTER.md')} to refine the agent charter`);\n info(` 2. Edit ${chalk.bold('.augmented/' + codeName + '/TOOLS.md')} to add tools`);\n info(` 3. Run ${chalk.bold('agt lint')} to validate`);\n info(` 4. Run ${chalk.bold('agt deploy')} to generate deployment config`);\n}\n","import chalk from 'chalk';\nimport ora from 'ora';\nimport { readFileSync, existsSync } from 'node:fs';\nimport { join, resolve } from 'node:path';\nimport {\n lintCharter,\n lintTools,\n lintAll,\n type LintDiagnostic,\n type LintResult,\n type OrgChannelPolicy,\n type ChannelId,\n} from '@augmented/core';\nimport { requireTeam } from '../lib/auth-guard.js';\nimport { api } from '../lib/api-client.js';\nimport { success, error, warn, info } from '../lib/output.js';\nimport { isJsonMode, jsonOutput } from '../lib/globals.js';\n\nfunction printDiagnostics(diagnostics: LintDiagnostic[]): void {\n for (const d of diagnostics) {\n const prefix = d.severity === 'error' ? chalk.red('ERR') : chalk.yellow('WARN');\n const file = chalk.dim(`[${d.file}]`);\n const path = d.path ? chalk.dim(` (${d.path})`) : '';\n console.log(` ${prefix} ${file} ${d.code}: ${d.message}${path}`);\n }\n}\n\nfunction printResult(label: string, result: LintResult): void {\n if (result.ok && result.warnings.length === 0) {\n success(`${label}: passed`);\n return;\n }\n if (result.errors.length > 0) {\n error(`${label}: ${result.errors.length} error(s)`);\n printDiagnostics(result.errors);\n }\n if (result.warnings.length > 0) {\n warn(`${label}: ${result.warnings.length} warning(s)`);\n printDiagnostics(result.warnings);\n }\n}\n\n/**\n * `agt lint [path]`\n */\nexport async function lintCommand(path?: string): Promise<void> {\n const json = isJsonMode();\n\n const dirs: { name: string; dir: string }[] = [];\n\n if (path) {\n const resolved = resolve(path);\n if (!existsSync(resolved)) {\n if (json) {\n jsonOutput({ ok: false, error: `Path not found: ${resolved}` });\n } else {\n error(`Path not found: ${resolved}`);\n }\n process.exitCode = 1;\n return;\n }\n dirs.push({ name: path, dir: resolved });\n } else {\n const augmentedDir = join(process.cwd(), '.augmented');\n if (!existsSync(augmentedDir)) {\n if (json) {\n jsonOutput({ ok: false, error: 'No .augmented/ directory found' });\n } else {\n error('No .augmented/ directory found. Run `agt init` first.');\n }\n process.exitCode = 1;\n return;\n }\n\n const { readdirSync, statSync } = await import('node:fs');\n const entries = readdirSync(augmentedDir);\n for (const entry of entries) {\n const entryPath = join(augmentedDir, entry);\n if (statSync(entryPath).isDirectory()) {\n dirs.push({ name: entry, dir: entryPath });\n }\n }\n\n if (dirs.length === 0) {\n if (json) {\n jsonOutput({ ok: false, error: 'No agent directories found in .augmented/' });\n } else {\n error('No agent directories found in .augmented/. Run `agt init` first.');\n }\n process.exitCode = 1;\n return;\n }\n }\n\n // Optionally fetch team channel policy via API\n let orgPolicy: OrgChannelPolicy | undefined;\n const teamSlug = requireTeam();\n if (teamSlug) {\n const spinner = ora({ text: 'Fetching org channel policy…', isSilent: json });\n spinner.start();\n try {\n const data = await api.get<{\n channel_policy: {\n team_id: string;\n allowed_channels: string[];\n denied_channels: string[];\n require_elevated_for_pii: boolean;\n } | null;\n }>(`/teams/${encodeURIComponent(teamSlug)}/channel-policy`);\n\n if (data.channel_policy) {\n orgPolicy = {\n organization_id: data.channel_policy.team_id,\n allowed_channels: (data.channel_policy.allowed_channels ?? []) as ChannelId[],\n denied_channels: (data.channel_policy.denied_channels ?? []) as ChannelId[],\n require_elevated_for_pii: data.channel_policy.require_elevated_for_pii ?? false,\n };\n }\n spinner.stop();\n } catch {\n spinner.stop();\n // Non-fatal — lint without org policy\n }\n }\n\n let totalErrors = 0;\n let totalWarnings = 0;\n const jsonResults: Record<string, unknown>[] = [];\n\n for (const { name, dir } of dirs) {\n if (!json) console.log(chalk.bold(`\\nLinting ${name}:`));\n\n const charterPath = join(dir, 'CHARTER.md');\n const toolsPath = join(dir, 'TOOLS.md');\n const hasCharter = existsSync(charterPath);\n const hasTools = existsSync(toolsPath);\n\n if (!hasCharter && !hasTools) {\n if (!json) warn('No CHARTER.md or TOOLS.md found — skipping.');\n if (json) jsonResults.push({ agent: name, skipped: true });\n continue;\n }\n\n const charterContent = hasCharter ? readFileSync(charterPath, 'utf-8') : undefined;\n const toolsContent = hasTools ? readFileSync(toolsPath, 'utf-8') : undefined;\n\n let result: LintResult;\n if (charterContent && toolsContent) {\n result = lintAll(charterContent, toolsContent, { orgChannelPolicy: orgPolicy });\n if (!json) printResult('Full lint', result);\n } else if (charterContent) {\n result = lintCharter(charterContent, { orgChannelPolicy: orgPolicy });\n if (!json) printResult('CHARTER.md', result);\n } else {\n result = lintTools(toolsContent!);\n if (!json) printResult('TOOLS.md', result);\n }\n\n totalErrors += result.errors.length;\n totalWarnings += result.warnings.length;\n\n if (json) {\n jsonResults.push({\n agent: name,\n ok: result.ok,\n errors: result.errors.length,\n warnings: result.warnings.length,\n diagnostics: [...result.errors, ...result.warnings],\n });\n }\n }\n\n if (json) {\n jsonOutput({\n ok: totalErrors === 0,\n agents: jsonResults,\n total_errors: totalErrors,\n total_warnings: totalWarnings,\n });\n if (totalErrors > 0) process.exitCode = 1;\n return;\n }\n\n console.log();\n if (totalErrors === 0 && totalWarnings === 0) {\n success(`All ${dirs.length} agent(s) passed lint.`);\n } else {\n if (totalErrors > 0) {\n error(`Total: ${totalErrors} error(s) across ${dirs.length} agent(s)`);\n process.exitCode = 1;\n }\n if (totalWarnings > 0) {\n warn(`Total: ${totalWarnings} warning(s) across ${dirs.length} agent(s)`);\n }\n }\n}\n","import chalk from 'chalk';\nimport ora from 'ora';\nimport {\n CHANNEL_REGISTRY,\n getChannel,\n resolveChannels,\n type ChannelId,\n type ChannelPolicy,\n type OrgChannelPolicy,\n} from '@augmented/core';\nimport { requireTeam } from '../lib/auth-guard.js';\nimport { api } from '../lib/api-client.js';\nimport { success, error, info, table } from '../lib/output.js';\nimport { isJsonMode, jsonOutput } from '../lib/globals.js';\n\n/**\n * `agt channels list`\n */\nexport function channelsListCommand(): void {\n const json = isJsonMode();\n\n if (json) {\n const channels = CHANNEL_REGISTRY.map((ch) => ({\n id: ch.id,\n name: ch.name,\n security_tier: ch.securityTier,\n e2e_encrypted: ch.e2eEncrypted,\n audit_trail: ch.auditTrail,\n public_exposure_risk: ch.publicExposureRisk,\n }));\n jsonOutput({ ok: true, channels });\n return;\n }\n\n console.log(chalk.bold('\\nChannel Registry (18 channels)\\n'));\n\n const rows = CHANNEL_REGISTRY.map((ch) => [\n ch.id,\n ch.name,\n ch.securityTier === 'elevated'\n ? chalk.green(ch.securityTier)\n : ch.securityTier === 'limited'\n ? chalk.red(ch.securityTier)\n : chalk.cyan(ch.securityTier),\n typeof ch.e2eEncrypted === 'boolean'\n ? (ch.e2eEncrypted ? chalk.green('yes') : chalk.dim('no'))\n : chalk.yellow(ch.e2eEncrypted),\n typeof ch.auditTrail === 'boolean'\n ? (ch.auditTrail ? chalk.green('yes') : chalk.dim('no'))\n : chalk.yellow(ch.auditTrail),\n ch.publicExposureRisk === 'High'\n ? chalk.red(ch.publicExposureRisk)\n : ch.publicExposureRisk === 'Medium'\n ? chalk.yellow(ch.publicExposureRisk)\n : chalk.green(ch.publicExposureRisk),\n ]);\n\n table(['ID', 'Name', 'Security Tier', 'E2E Encrypted', 'Audit Trail', 'Public Risk'], rows);\n}\n\n/**\n * `agt channels check <agent>`\n */\nexport async function channelsCheckCommand(agentCodeName: string): Promise<void> {\n const teamSlug = requireTeam();\n if (!teamSlug) return;\n\n const json = isJsonMode();\n const spinner = ora({ text: `Resolving channels for \"${agentCodeName}\"…`, isSilent: json });\n spinner.start();\n\n try {\n const data = await api.get<{\n agent_channels: string[];\n channel_policy: {\n team_id: string;\n allowed_channels: string[];\n denied_channels: string[];\n require_elevated_for_pii: boolean;\n } | null;\n }>(`/agents/${encodeURIComponent(agentCodeName)}/channels`);\n\n const agentPolicy: ChannelPolicy = {\n policy: 'allowlist',\n allowed: (data.agent_channels ?? []) as ChannelId[],\n denied: [],\n require_approval_to_change: false,\n };\n\n const orgPolicy: OrgChannelPolicy | undefined = data.channel_policy\n ? {\n organization_id: data.channel_policy.team_id,\n allowed_channels: (data.channel_policy.allowed_channels ?? []) as ChannelId[],\n denied_channels: (data.channel_policy.denied_channels ?? []) as ChannelId[],\n require_elevated_for_pii: data.channel_policy.require_elevated_for_pii ?? false,\n }\n : undefined;\n\n const resolved = resolveChannels(agentPolicy, orgPolicy);\n\n spinner.stop();\n\n if (json) {\n jsonOutput({\n ok: true,\n agent: agentCodeName,\n agent_allowlist: agentPolicy.allowed,\n org_policy: orgPolicy\n ? {\n allowed: orgPolicy.allowed_channels,\n denied: orgPolicy.denied_channels,\n require_elevated_for_pii: orgPolicy.require_elevated_for_pii,\n }\n : null,\n resolved_channels: resolved,\n count: resolved.length,\n });\n return;\n }\n\n console.log(chalk.bold(`\\nChannel Resolution: ${agentCodeName}\\n`));\n\n info(`Agent allowlist: ${agentPolicy.allowed.length > 0 ? agentPolicy.allowed.join(', ') : 'none'}`);\n\n if (orgPolicy) {\n info(`Org allowed: ${orgPolicy.allowed_channels.length > 0 ? orgPolicy.allowed_channels.join(', ') : 'all (no restriction)'}`);\n info(`Org denied: ${orgPolicy.denied_channels.length > 0 ? orgPolicy.denied_channels.join(', ') : 'none'}`);\n if (orgPolicy.require_elevated_for_pii) {\n info('Org requires elevated tier for PII channels');\n }\n } else {\n info('No org channel policy configured.');\n }\n\n console.log();\n\n if (resolved.length === 0) {\n error('No channels available after resolution. The agent cannot communicate.');\n process.exitCode = 1;\n return;\n }\n\n const rows = resolved.map((chId) => {\n const ch = getChannel(chId);\n return [\n chId,\n ch?.name ?? 'Unknown',\n ch?.securityTier ?? '-',\n ch?.publicExposureRisk ?? '-',\n ];\n });\n\n success(`${resolved.length} channel(s) available:`);\n table(['ID', 'Name', 'Security Tier', 'Public Risk'], rows);\n } catch (err) {\n spinner.fail('Failed to resolve channels.');\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n }\n}\n","import chalk from 'chalk';\nimport ora from 'ora';\nimport { checkbox, confirm, input } from '@inquirer/prompts';\nimport {\n getDefaultSlackScopes,\n getScopesByCategory,\n SLACK_SCOPE_CATEGORY_LABELS,\n SLACK_SCOPE_PRESETS,\n generateSlackAppManifest,\n serializeManifestForSlackCli,\n createSlackApp,\n SlackApiError,\n type SlackScope,\n type SlackScopeCategory,\n} from '@augmented/core';\nimport { requireTeam } from '../lib/auth-guard.js';\nimport { api } from '../lib/api-client.js';\nimport { success, error, info, warn, table } from '../lib/output.js';\nimport { isJsonMode, jsonOutput } from '../lib/globals.js';\n\nimport { writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { tmpdir } from 'node:os';\n\n/**\n * `agt channels slack setup <agent-code-name>`\n */\nexport async function channelSlackSetupCommand(\n agentCodeName: string,\n options: {\n preset?: string;\n scopes?: string;\n skipCreate?: boolean;\n botToken?: string;\n signingSecret?: string;\n configToken?: string;\n },\n): Promise<void> {\n const teamSlug = requireTeam();\n if (!teamSlug) return;\n\n const json = isJsonMode();\n const spinner = ora({ text: `Looking up agent \"${agentCodeName}\"…`, isSilent: json });\n spinner.start();\n\n try {\n // Look up agent via API\n const agentData = await api.get<{\n agent: {\n agent_id: string;\n code_name: string;\n display_name: string;\n channels: string[];\n };\n }>(`/agents/${encodeURIComponent(agentCodeName)}`);\n\n const agent = agentData.agent;\n\n // Verify slack is in the agent's channel list\n const channels: string[] = agent.channels ?? [];\n if (!channels.includes('slack')) {\n spinner.fail(`Agent \"${agentCodeName}\" does not have Slack in its channel list.`);\n error('Enable Slack in the agent\\'s channels first (add \"slack\" to the channels array).');\n process.exitCode = 1;\n return;\n }\n\n spinner.succeed(`Found agent \"${agentCodeName}\"`);\n\n // ── Scope selection ─────────────────────────────────────────────────\n let selectedScopes: SlackScope[];\n\n if (options.scopes) {\n selectedScopes = options.scopes.split(',').map((s) => s.trim()) as SlackScope[];\n } else if (options.preset) {\n const preset = options.preset as keyof typeof SLACK_SCOPE_PRESETS;\n if (!(preset in SLACK_SCOPE_PRESETS)) {\n error(`Unknown preset \"${options.preset}\". Available: minimal, standard, full`);\n process.exitCode = 1;\n return;\n }\n selectedScopes = [...SLACK_SCOPE_PRESETS[preset]];\n info(`Using \"${preset}\" preset (${selectedScopes.length} scopes)`);\n } else if (json) {\n selectedScopes = [...SLACK_SCOPE_PRESETS.standard];\n } else {\n const scopesByCategory = getScopesByCategory();\n const defaults = getDefaultSlackScopes();\n\n type CheckboxChoice = { name: string; value: SlackScope; checked: boolean };\n type CheckboxSeparator = { type: 'separator'; separator: string };\n const choices: Array<CheckboxChoice | CheckboxSeparator> = [];\n for (const [category, defs] of scopesByCategory) {\n const label = SLACK_SCOPE_CATEGORY_LABELS[category as SlackScopeCategory];\n choices.push({ type: 'separator', separator: `── ${label} ──` });\n for (const def of defs) {\n const riskColor =\n def.risk === 'high' ? chalk.red : def.risk === 'medium' ? chalk.yellow : chalk.green;\n choices.push({\n name: `${def.scope} ${chalk.dim(`— ${def.description}`)} ${riskColor(`[${def.risk}]`)}`,\n value: def.scope,\n checked: defaults.includes(def.scope),\n });\n }\n }\n\n selectedScopes = await checkbox({\n message: 'Select Slack bot scopes:',\n choices,\n pageSize: 30,\n });\n }\n\n if (selectedScopes.length === 0) {\n error('No scopes selected. At least one scope is required.');\n process.exitCode = 1;\n return;\n }\n\n info(`Selected ${selectedScopes.length} scope(s): ${selectedScopes.join(', ')}`);\n\n // ── Generate manifest ───────────────────────────────────────────────\n const manifest = generateSlackAppManifest({\n agent_name: agent.display_name ?? agentCodeName,\n description: `Augmented-managed Slack bot for agent ${agentCodeName}`,\n scopes: selectedScopes,\n });\n\n const manifestObj = serializeManifestForSlackCli(manifest);\n\n const manifestJson = JSON.stringify(manifestObj, null, 2);\n const manifestPath = join(tmpdir(), `augmented-slack-manifest-${agentCodeName}.json`);\n await writeFile(manifestPath, manifestJson, 'utf-8');\n\n success(`Manifest written to ${manifestPath}`);\n console.log(chalk.dim(manifestJson));\n\n // ── Slack app creation via API ──────────────────────────────────────\n let appId: string | undefined;\n let botTokenRef: string | undefined = options.botToken;\n let signingSecretRef: string | undefined = options.signingSecret;\n\n if (!options.skipCreate) {\n let token = options.configToken;\n if (!token && !json) {\n token = (await input({\n message: 'Paste your Slack config token (xoxe-…) to create the app automatically, or leave empty to skip:',\n })).trim() || undefined;\n }\n\n if (token) {\n const createSpinner = ora({ text: 'Creating Slack app via API…', isSilent: json });\n createSpinner.start();\n\n try {\n const result = await createSlackApp(token, manifest);\n appId = result.app_id;\n signingSecretRef = `secret_ref://slack/${agentCodeName}/signing_secret`;\n createSpinner.succeed(`Slack app created: ${result.app_id}`);\n info(`OAuth URL: ${result.oauth_authorize_url}`);\n } catch (err) {\n createSpinner.fail('Failed to create Slack app via API.');\n if (err instanceof SlackApiError) {\n warn(`Slack API error: ${err.message}`);\n } else {\n warn((err as Error).message);\n }\n info(`Manifest saved at: ${manifestPath}`);\n info('Create the app manually via https://api.slack.com/apps and paste the manifest.');\n }\n } else {\n info(`Manifest saved at: ${manifestPath}`);\n info('Create the app manually via https://api.slack.com/apps and paste the manifest.');\n }\n }\n\n if (!signingSecretRef && !json) {\n const secret = await input({\n message: 'Paste your Slack Signing Secret, or leave empty to skip:',\n });\n if (secret.trim()) {\n signingSecretRef = `secret_ref://slack/${agentCodeName}/signing_secret`;\n }\n }\n\n if (!botTokenRef && !json) {\n const token = await input({\n message: 'Paste your Slack Bot Token (xoxb-…), or leave empty to skip:',\n });\n if (token.trim()) {\n botTokenRef = `secret_ref://slack/${agentCodeName}/bot_token`;\n }\n }\n\n // ── Store config via API ────────────────────────────────────────────\n const configSpinner = ora({ text: 'Saving channel config…', isSilent: json });\n configSpinner.start();\n\n const config = {\n channel_type: 'slack' as const,\n app_name: agent.display_name ?? agentCodeName,\n scopes: selectedScopes,\n ...(appId ? { app_id: appId } : {}),\n ...(botTokenRef ? { bot_token_ref: botTokenRef } : {}),\n ...(signingSecretRef ? { signing_secret_ref: signingSecretRef } : {}),\n manifest,\n };\n\n try {\n await api.put(\n `/agents/${encodeURIComponent(agentCodeName)}/channel-configs/slack`,\n {\n config,\n status: botTokenRef ? 'configured' : 'pending',\n },\n );\n } catch (err) {\n configSpinner.fail('Failed to save channel config.');\n error((err as Error).message);\n process.exitCode = 1;\n return;\n }\n\n configSpinner.succeed('Slack channel config saved.');\n\n if (json) {\n jsonOutput({\n ok: true,\n agent: agentCodeName,\n channel: 'slack',\n scopes: selectedScopes,\n status: botTokenRef ? 'configured' : 'pending',\n manifest_path: manifestPath,\n });\n } else {\n console.log();\n success(`Slack setup complete for \"${agentCodeName}\"`);\n info(`Status: ${botTokenRef ? 'configured' : 'pending (add credentials to activate)'}`);\n }\n } catch (err) {\n spinner.fail('Slack setup failed.');\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n }\n}\n\n/**\n * `agt channels slack status <agent-code-name>`\n */\nexport async function channelSlackStatusCommand(agentCodeName: string): Promise<void> {\n const teamSlug = requireTeam();\n if (!teamSlug) return;\n\n const json = isJsonMode();\n const spinner = ora({ text: `Fetching Slack config for \"${agentCodeName}\"…`, isSilent: json });\n spinner.start();\n\n try {\n const data = await api.get<{\n config: {\n channel_type: string;\n app_name?: string;\n scopes?: string[];\n bot_token_ref?: string;\n signing_secret_ref?: string;\n app_id?: string;\n team_id?: string;\n status?: string;\n created_at?: string;\n updated_at?: string;\n };\n }>(`/agents/${encodeURIComponent(agentCodeName)}/channel-configs/slack`);\n\n spinner.stop();\n\n const config = data.config;\n\n if (json) {\n jsonOutput({\n ok: true,\n agent: agentCodeName,\n channel: 'slack',\n configured: true,\n config,\n });\n return;\n }\n\n console.log(chalk.bold(`\\nSlack Configuration: ${agentCodeName}\\n`));\n\n const rows: string[][] = [\n ['App Name', config.app_name ?? '-'],\n ['App ID', config.app_id ?? '-'],\n ['Team ID', config.team_id ?? '-'],\n ['Bot Token', config.bot_token_ref ? chalk.green('configured') : chalk.dim('not set')],\n ['Signing Secret', config.signing_secret_ref ? chalk.green('configured') : chalk.dim('not set')],\n ['Scopes', (config.scopes ?? []).join(', ') || '-'],\n ];\n\n table(['Field', 'Value'], rows);\n } catch (err) {\n spinner.stop();\n if ((err as any).status === 404) {\n if (json) {\n jsonOutput({ ok: true, agent: agentCodeName, channel: 'slack', configured: false });\n } else {\n warn(`No Slack configuration found for \"${agentCodeName}\".`);\n info('Run `agt channels slack setup ' + agentCodeName + '` to configure.');\n }\n return;\n }\n\n spinner.fail('Failed to fetch Slack status.');\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n }\n}\n\n/**\n * `agt channels slack remove <agent-code-name>`\n */\nexport async function channelSlackRemoveCommand(agentCodeName: string): Promise<void> {\n const teamSlug = requireTeam();\n if (!teamSlug) return;\n\n const json = isJsonMode();\n const spinner = ora({ text: `Looking up agent \"${agentCodeName}\"…`, isSilent: json });\n spinner.start();\n\n try {\n // Check if config exists\n let config: { app_id?: string; app_name?: string } | null = null;\n try {\n const data = await api.get<{ config: { app_id?: string; app_name?: string } | null }>(`/agents/${encodeURIComponent(agentCodeName)}/channel-configs/slack`);\n config = data.config;\n } catch (err) {\n if ((err as any).status === 404) {\n spinner.info(`No Slack configuration found for \"${agentCodeName}\".`);\n if (json) {\n jsonOutput({ ok: true, agent: agentCodeName, channel: 'slack', removed: false, reason: 'not_configured' });\n }\n return;\n }\n throw err;\n }\n\n spinner.stop();\n\n // Confirm removal\n if (!json) {\n const appLabel = config?.app_id\n ? ` (App ID: ${config.app_id})`\n : config?.app_name\n ? ` (${config.app_name})`\n : '';\n const confirmed = await confirm({\n message: `Remove Slack bot configuration${appLabel} for \"${agentCodeName}\"?`,\n default: false,\n });\n\n if (!confirmed) {\n warn('Aborted.');\n return;\n }\n }\n\n const removeSpinner = ora({ text: 'Removing Slack configuration…', isSilent: json });\n removeSpinner.start();\n\n await api.del(`/agents/${encodeURIComponent(agentCodeName)}/channel-configs/slack`);\n\n removeSpinner.succeed('Slack configuration removed.');\n\n if (json) {\n jsonOutput({ ok: true, agent: agentCodeName, channel: 'slack', removed: true });\n } else {\n if (config?.app_id) {\n console.log();\n info(`Note: The Slack app (${config.app_id}) still exists in your Slack workspace.`);\n info('Delete it manually at https://api.slack.com/apps if no longer needed.');\n }\n }\n } catch (err) {\n error((err as Error).message);\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n }\n process.exitCode = 1;\n }\n}\n","import chalk from 'chalk';\nimport ora from 'ora';\nimport { confirm } from '@inquirer/prompts';\nimport { requireTeam } from '../lib/auth-guard.js';\nimport { api } from '../lib/api-client.js';\nimport { success, error, info, table } from '../lib/output.js';\nimport { isJsonMode, jsonOutput } from '../lib/globals.js';\n\n/**\n * `agt channels beam setup <agent-code-name>`\n */\nexport async function channelBeamSetupCommand(\n agentCodeName: string,\n options: {\n directoryUrl?: string;\n skipRegister?: boolean;\n autoPublish?: boolean;\n },\n): Promise<void> {\n const teamSlug = requireTeam();\n if (!teamSlug) return;\n\n const json = isJsonMode();\n const spinner = ora({ text: `Looking up agent \"${agentCodeName}\"…`, isSilent: json });\n spinner.start();\n\n try {\n // Look up agent via API\n const agentData = await api.get<{\n agent: {\n agent_id: string;\n code_name: string;\n display_name: string;\n team_id: string;\n channels: string[];\n };\n }>(`/agents/${encodeURIComponent(agentCodeName)}`);\n\n const agent = agentData.agent;\n\n // Verify beam is in the agent's channel list\n const channels: string[] = agent.channels ?? [];\n if (!channels.includes('beam')) {\n spinner.fail(`Agent \"${agentCodeName}\" does not have Beam in its channel list.`);\n error('Enable Beam in the agent\\'s channels first (add \"beam\" to the channels array).');\n process.exitCode = 1;\n return;\n }\n\n spinner.succeed(`Found agent \"${agentCodeName}\"`);\n\n // Check for existing config\n const existingConfig = await api.get<{\n config: Record<string, unknown> | null;\n }>(`/agents/${encodeURIComponent(agentCodeName)}/channel-configs/beam`).catch(() => ({ config: null }));\n\n if (existingConfig.config?.beam_id) {\n info(`Agent already has Beam identity: ${chalk.cyan(String(existingConfig.config.beam_id))}`);\n const proceed = await confirm({\n message: 'Regenerate identity? This will create a new keypair and re-register.',\n default: false,\n });\n if (!proceed) return;\n }\n\n // Generate identity and register\n spinner.start('Generating Ed25519 identity and registering with Beam directory…');\n\n const result = await api.post<{\n ok: boolean;\n beam_id: string;\n did: string;\n public_key: string;\n trust_score: number;\n verification_tier: string;\n published_capabilities: string[];\n error?: string;\n }>(`/agents/${encodeURIComponent(agentCodeName)}/channel-configs/beam/setup`, {\n auto_publish_capabilities: options.autoPublish ?? true,\n directory_url: options.directoryUrl,\n });\n\n if (!result.ok) {\n spinner.fail('Registration failed');\n error(result.error ?? 'Unknown error');\n process.exitCode = 1;\n return;\n }\n\n spinner.succeed('Beam identity created and registered');\n\n if (json) {\n jsonOutput({\n beam_id: result.beam_id,\n did: result.did,\n public_key: result.public_key,\n trust_score: result.trust_score,\n verification_tier: result.verification_tier,\n published_capabilities: result.published_capabilities,\n });\n return;\n }\n\n console.log();\n table(\n ['Field', 'Value'],\n [\n ['Beam ID', chalk.cyan(result.beam_id)],\n ['DID', chalk.dim(result.did)],\n ['Trust Score', String(result.trust_score)],\n ['Verification', result.verification_tier],\n ['Capabilities', result.published_capabilities.length > 0\n ? result.published_capabilities.join(', ')\n : chalk.dim('none published')],\n ],\n );\n console.log();\n success(`Agent \"${agentCodeName}\" is now reachable at ${chalk.cyan(result.beam_id)}`);\n } catch (err) {\n spinner.fail('Setup failed');\n error(err instanceof Error ? err.message : 'Unknown error');\n process.exitCode = 1;\n }\n}\n\n/**\n * `agt channels beam status <agent-code-name>`\n */\nexport async function channelBeamStatusCommand(agentCodeName: string): Promise<void> {\n const teamSlug = requireTeam();\n if (!teamSlug) return;\n\n const json = isJsonMode();\n const spinner = ora({ text: `Fetching Beam config for \"${agentCodeName}\"…`, isSilent: json });\n spinner.start();\n\n try {\n const data = await api.get<{\n config: Record<string, unknown> | null;\n status?: string;\n }>(`/agents/${encodeURIComponent(agentCodeName)}/channel-configs/beam`);\n\n if (!data.config?.beam_id) {\n spinner.info('No Beam identity configured for this agent.');\n return;\n }\n\n spinner.succeed('Beam configuration found');\n const cfg = data.config;\n\n if (json) {\n jsonOutput(cfg);\n return;\n }\n\n console.log();\n table(\n ['Field', 'Value'],\n [\n ['Beam ID', chalk.cyan(String(cfg.beam_id))],\n ['DID', chalk.dim(String(cfg.did ?? '—'))],\n ['Public Key', chalk.dim(String(cfg.public_key ?? '').slice(0, 24) + '…')],\n ['Trust Score', String(cfg.trust_score ?? 0)],\n ['Verification', String(cfg.verification_tier ?? 'basic')],\n ['Auto-publish', cfg.auto_publish_capabilities ? chalk.green('yes') : chalk.dim('no')],\n ['Capabilities', Array.isArray(cfg.published_capabilities) && cfg.published_capabilities.length > 0\n ? cfg.published_capabilities.join(', ')\n : chalk.dim('none')],\n ['Status', data.status ?? '—'],\n ],\n );\n console.log();\n } catch (err) {\n spinner.fail('Failed to fetch config');\n error(err instanceof Error ? err.message : 'Unknown error');\n process.exitCode = 1;\n }\n}\n\n/**\n * `agt channels beam remove <agent-code-name>`\n */\nexport async function channelBeamRemoveCommand(agentCodeName: string): Promise<void> {\n const teamSlug = requireTeam();\n if (!teamSlug) return;\n\n const json = isJsonMode();\n\n if (!json) {\n const proceed = await confirm({\n message: `Remove Beam identity from \"${agentCodeName}\"? The directory entry will expire.`,\n default: false,\n });\n if (!proceed) return;\n }\n\n const spinner = ora({ text: 'Removing Beam identity…', isSilent: json });\n spinner.start();\n\n try {\n await api.del(`/agents/${encodeURIComponent(agentCodeName)}/channel-configs/beam`);\n spinner.succeed('Beam identity removed');\n\n if (json) {\n jsonOutput({ ok: true });\n }\n } catch (err) {\n spinner.fail('Failed to remove');\n error(err instanceof Error ? err.message : 'Unknown error');\n process.exitCode = 1;\n }\n}\n","import chalk from 'chalk';\nimport ora from 'ora';\nimport { select, input } from '@inquirer/prompts';\nimport { writeFileSync, mkdirSync } from 'node:fs';\nimport { join } from 'node:path';\nimport {\n DEPLOYMENT_TEMPLATES,\n getTemplate,\n renderTemplate,\n type TemplateContext,\n type TemplateAgent,\n} from '@augmented/core';\nimport { requireTeam } from '../lib/auth-guard.js';\nimport { api } from '../lib/api-client.js';\nimport { success, error, info } from '../lib/output.js';\nimport { isJsonMode, jsonOutput } from '../lib/globals.js';\n\ninterface DeployOptions {\n template?: string;\n port?: string;\n}\n\n/**\n * `agt deploy`\n */\nexport async function deployCommand(opts: DeployOptions): Promise<void> {\n const teamSlug = requireTeam();\n if (!teamSlug) return;\n\n const nonInteractive = !!opts.template;\n const json = isJsonMode();\n\n let templateId: string;\n let basePort: number;\n\n if (nonInteractive) {\n templateId = opts.template!;\n basePort = Number(opts.port ?? '9000');\n if (isNaN(basePort) || basePort < 1 || basePort > 65535) {\n if (json) {\n jsonOutput({ ok: false, error: 'Invalid port number' });\n } else {\n error('Invalid port number. Must be between 1 and 65535.');\n }\n process.exitCode = 1;\n return;\n }\n } else {\n console.log(chalk.bold('\\nAugmented — Deploy\\n'));\n\n templateId = await select({\n message: 'Deployment template:',\n choices: DEPLOYMENT_TEMPLATES.map((t) => ({\n value: t.id,\n name: `${t.name} — ${t.description}`,\n })),\n });\n\n const basePortStr = await input({\n message: 'Base port for gateway:',\n default: '9000',\n validate: (v) => {\n const n = Number(v);\n return (!isNaN(n) && n > 0 && n < 65536) || 'Must be a valid port number';\n },\n });\n basePort = Number(basePortStr);\n }\n\n const tmpl = getTemplate(templateId);\n if (!tmpl) {\n if (json) {\n jsonOutput({ ok: false, error: `Template \"${templateId}\" not found` });\n } else {\n error(`Template \"${templateId}\" not found.`);\n }\n process.exitCode = 1;\n return;\n }\n\n // ── Fetch agents via API ──────────────────────────────────────────────\n\n const spinner = ora({ text: 'Fetching agents…', isSilent: json });\n spinner.start();\n\n let agents: Array<{\n agent_id: string;\n code_name: string;\n display_name: string;\n environment: string;\n }>;\n\n try {\n const data = await api.get<{ agents: typeof agents }>('/agents');\n agents = data.agents;\n } catch (err) {\n spinner.fail('Failed to fetch agents.');\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n return;\n }\n\n if (!agents || agents.length === 0) {\n spinner.fail('No agents found in team.');\n if (json) {\n jsonOutput({ ok: false, error: 'No agents found in team. Run `agt init` first.' });\n } else {\n error('No agents found in team. Run `agt init` first.');\n }\n process.exitCode = 1;\n return;\n }\n\n // ── Build template context ────────────────────────────────────────────\n\n const templateAgents: TemplateAgent[] = agents.map((a, i) => ({\n agent_id: a.agent_id,\n code_name: a.code_name,\n display_name: a.display_name,\n environment: a.environment,\n port: basePort + i,\n }));\n\n const context: TemplateContext = {\n agents: templateAgents,\n gateway: { port: basePort },\n variables: {},\n };\n\n let rendered: string;\n try {\n rendered = renderTemplate(tmpl.template, context);\n } catch (err) {\n spinner.fail('Template rendering failed.');\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n return;\n }\n\n // ── Record deployment via API ─────────────────────────────────────────\n\n try {\n await api.post('/deployments', {\n template_id: tmpl.id,\n agent_ids: agents.map((a) => a.agent_id),\n variables: { base_port: basePort },\n });\n } catch (deployErr) {\n spinner.stop();\n if (!json) info(`Warning: could not record deployment in database: ${(deployErr as Error).message}`);\n }\n\n // ── Write output file ─────────────────────────────────────────────────\n\n const outDir = join(process.cwd(), '.augmented', 'deploy');\n mkdirSync(outDir, { recursive: true });\n const outPath = join(outDir, 'docker-compose.yaml');\n writeFileSync(outPath, rendered);\n\n spinner.succeed('Deployment config generated.');\n\n if (json) {\n jsonOutput({\n ok: true,\n template: tmpl.id,\n agents: agents.map((a) => a.code_name),\n output_path: outPath,\n });\n return;\n }\n\n console.log();\n info(`Template: ${chalk.bold(tmpl.name)}`);\n info(`Agents: ${agents.map((a) => a.code_name).join(', ')}`);\n info(`Output: ${outPath}`);\n console.log();\n info(`Next steps:`);\n info(` cd .augmented/deploy && docker compose up`);\n}\n","import chalk from 'chalk';\nimport ora from 'ora';\nimport { writeFileSync, mkdirSync } from 'node:fs';\nimport { join } from 'node:path';\nimport {\n extractFrontmatter,\n resolveChannels,\n lintAll,\n getFramework,\n getTemplate,\n renderTemplate,\n type CharterFrontmatter,\n type ToolsFrontmatter,\n type ChannelId,\n type ChannelPolicy,\n type OrgChannelPolicy,\n type DeploymentTarget,\n type LintDiagnostic,\n type ProvisionInput,\n type TemplateContext,\n} from '@augmented/core';\nimport { provision } from '@augmented/core/provisioning/provisioner.js';\nimport { requireTeam } from '../lib/auth-guard.js';\nimport { api } from '../lib/api-client.js';\nimport { success, error, warn, info } from '../lib/output.js';\nimport { isJsonMode, jsonOutput } from '../lib/globals.js';\n\nfunction printDiagnostics(diagnostics: LintDiagnostic[]): void {\n for (const d of diagnostics) {\n const prefix = d.severity === 'error' ? chalk.red('ERR') : chalk.yellow('WARN');\n const path = d.path ? chalk.dim(` (${d.path})`) : '';\n console.log(` ${prefix} [${d.code}] ${d.message}${path}`);\n }\n}\n\n/**\n * `agt provision <code-name>`\n */\nexport async function provisionCommand(\n codeName: string,\n options: { target?: string; output?: string; dryRun?: boolean },\n): Promise<void> {\n const teamSlug = requireTeam();\n if (!teamSlug) return;\n\n const json = isJsonMode();\n const target = (options.target ?? 'local_docker') as DeploymentTarget;\n const outputDir = options.output ?? join(process.cwd(), '.augmented', codeName, 'provision');\n const dryRun = options.dryRun ?? false;\n\n if (!json) console.log(chalk.bold('\\nAugmented — Provision\\n'));\n\n const spinner = ora({ text: 'Fetching agent data…', isSilent: json });\n spinner.start();\n\n // ── Fetch all provision data in one call ──────────────────────────────\n\n let provisionData: {\n agent: Record<string, unknown>;\n charter: { raw_content: string; version: string } | null;\n tools: { raw_content: string; version: string } | null;\n channel_configs: Record<string, { config: unknown; status: string }> | null;\n team_channel_policy: {\n team_id: string;\n allowed_channels: string[];\n denied_channels: string[];\n require_elevated_for_pii: boolean;\n } | null;\n };\n\n try {\n provisionData = await api.get(`/agents/${encodeURIComponent(codeName)}/provision-data`);\n } catch (err) {\n spinner.fail(`Could not fetch provision data for \"${codeName}\".`);\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n return;\n }\n\n const agentData = provisionData.agent;\n\n if (!provisionData.charter) {\n spinner.fail('No CHARTER.md version found.');\n if (json) jsonOutput({ ok: false, error: 'No CHARTER.md version found' });\n else error('No CHARTER.md version found for this agent');\n process.exitCode = 1;\n return;\n }\n\n if (!provisionData.tools) {\n spinner.fail('No TOOLS.md version found.');\n if (json) jsonOutput({ ok: false, error: 'No TOOLS.md version found' });\n else error('No TOOLS.md version found for this agent');\n process.exitCode = 1;\n return;\n }\n\n spinner.text = 'Parsing frontmatter…';\n\n const charterContent = provisionData.charter.raw_content;\n const toolsContent = provisionData.tools.raw_content;\n\n const charterParsed = extractFrontmatter(charterContent);\n if (!charterParsed.frontmatter) {\n spinner.fail('Failed to parse CHARTER.md frontmatter.');\n if (json) jsonOutput({ ok: false, error: charterParsed.error ?? 'Unknown parse error' });\n else error(charterParsed.error ?? 'Unknown parse error');\n process.exitCode = 1;\n return;\n }\n\n const toolsParsed = extractFrontmatter(toolsContent);\n if (!toolsParsed.frontmatter) {\n spinner.fail('Failed to parse TOOLS.md frontmatter.');\n if (json) jsonOutput({ ok: false, error: toolsParsed.error ?? 'Unknown parse error' });\n else error(toolsParsed.error ?? 'Unknown parse error');\n process.exitCode = 1;\n return;\n }\n\n const charterFrontmatter = charterParsed.frontmatter as unknown as CharterFrontmatter;\n const toolsFrontmatter = toolsParsed.frontmatter as unknown as ToolsFrontmatter;\n\n // ── Lint ───────────────────────────────────────────────────────────────\n\n spinner.text = 'Linting…';\n const lintResult = lintAll(charterContent, toolsContent);\n\n if (!lintResult.ok) {\n spinner.fail('Lint errors — cannot provision.');\n if (json) {\n jsonOutput({\n ok: false,\n error: 'Lint errors — cannot provision',\n lint: {\n errors: lintResult.errors.length,\n warnings: lintResult.warnings.length,\n diagnostics: [...lintResult.errors, ...lintResult.warnings],\n },\n });\n } else {\n printDiagnostics(lintResult.errors);\n if (lintResult.warnings.length > 0) printDiagnostics(lintResult.warnings);\n }\n process.exitCode = 1;\n return;\n }\n\n if (lintResult.warnings.length > 0 && !json) {\n spinner.stop();\n warn(`Lint: ${lintResult.warnings.length} warning(s)`);\n printDiagnostics(lintResult.warnings);\n spinner.start('Provisioning…');\n }\n\n // ── Resolve channels ──────────────────────────────────────────────────\n\n spinner.text = 'Resolving channels…';\n\n // Derive channels from agent_channel_configs (source of truth)\n const configuredChannels = Object.keys(provisionData.channel_configs ?? {}) as ChannelId[];\n\n const agentChannelPolicy: ChannelPolicy = {\n policy: 'allowlist',\n allowed: configuredChannels,\n denied: [],\n require_approval_to_change: true,\n };\n\n let orgChannelPolicy: OrgChannelPolicy | undefined;\n const policyData = provisionData.team_channel_policy;\n\n if (policyData) {\n orgChannelPolicy = {\n organization_id: policyData.team_id,\n allowed_channels: (policyData.allowed_channels ?? []) as ChannelId[],\n denied_channels: (policyData.denied_channels ?? []) as ChannelId[],\n require_elevated_for_pii: policyData.require_elevated_for_pii ?? false,\n };\n }\n\n const resolvedChannels = resolveChannels(agentChannelPolicy, orgChannelPolicy);\n\n // ── Provision ─────────────────────────────────────────────────────────\n\n const frameworkId = (agentData.framework as string) ?? 'openclaw';\n const adapter = getFramework(frameworkId);\n\n spinner.text = `Building ${adapter.label} config…`;\n\n const provisionInput: ProvisionInput = {\n agent: agentData as any,\n charterFrontmatter,\n charterContent,\n toolsFrontmatter,\n toolsContent,\n resolvedChannels,\n deploymentTarget: target,\n gatewayPort: 9000,\n };\n\n const provisionOutput = provision(provisionInput, frameworkId);\n\n const templateId = target === 'local_docker' ? 'shared-gateway-local' : 'shared-gateway-local';\n const tmpl = getTemplate(templateId);\n let deploymentYaml = '';\n if (tmpl) {\n const templateContext: TemplateContext = {\n agents: [{\n agent_id: agentData.agent_id as string,\n code_name: agentData.code_name as string,\n display_name: agentData.display_name as string,\n environment: agentData.environment as string,\n port: 9000,\n }],\n gateway: { port: 9000 },\n variables: {},\n };\n deploymentYaml = renderTemplate(tmpl.template, templateContext);\n }\n\n // ── Dry run ───────────────────────────────────────────────────────────\n\n if (dryRun) {\n spinner.stop();\n if (json) {\n jsonOutput({\n ok: true,\n dry_run: true,\n agent: codeName,\n framework: frameworkId,\n target,\n charter_hash: provisionOutput.charterHash,\n tools_hash: provisionOutput.toolsHash,\n channels: resolvedChannels.length,\n artifacts: provisionOutput.artifacts.map((a) => ({\n path: a.relativePath,\n size: a.content.length,\n })),\n deployment_yaml: deploymentYaml || null,\n });\n return;\n }\n\n console.log();\n info('Dry run — no files written.');\n console.log();\n for (const artifact of provisionOutput.artifacts) {\n console.log(chalk.bold(`${artifact.relativePath}:`));\n console.log(artifact.content);\n }\n if (deploymentYaml) {\n console.log(chalk.bold('Deployment Template:'));\n console.log(deploymentYaml);\n }\n console.log();\n info(`CHARTER hash: ${provisionOutput.charterHash}`);\n info(`TOOLS hash: ${provisionOutput.toolsHash}`);\n return;\n }\n\n // ── Write files ───────────────────────────────────────────────────────\n\n spinner.text = 'Writing files…';\n\n mkdirSync(outputDir, { recursive: true });\n for (const artifact of provisionOutput.artifacts) {\n writeFileSync(join(outputDir, artifact.relativePath), artifact.content);\n }\n if (deploymentYaml) {\n writeFileSync(join(outputDir, 'docker-compose.yaml'), deploymentYaml);\n }\n\n // ── Store provision snapshot via API ───────────────────────────────────\n\n spinner.text = 'Storing provision snapshot…';\n\n try {\n await api.post(`/agents/${encodeURIComponent(codeName)}/provision-snapshots`, {\n charter_version: provisionData.charter.version,\n tools_version: provisionData.tools.version,\n charter_content: charterContent,\n tools_content: toolsContent,\n channels: resolvedChannels,\n });\n } catch (err) {\n spinner.stop();\n if (!json) warn(`Provision completed but could not store snapshot: ${(err as Error).message}`);\n }\n\n // ── Summary ───────────────────────────────────────────────────────────\n\n spinner.succeed(`Agent \"${chalk.bold(agentData.display_name as string)}\" provisioned.`);\n\n if (json) {\n jsonOutput({\n ok: true,\n agent: codeName,\n framework: frameworkId,\n target,\n output_dir: outputDir,\n charter_hash: provisionOutput.charterHash,\n tools_hash: provisionOutput.toolsHash,\n channels: resolvedChannels.length,\n artifacts: provisionOutput.artifacts.map((a) => a.relativePath),\n });\n return;\n }\n\n console.log();\n info(`Agent: ${agentData.code_name}`);\n info(`Framework: ${adapter.label}`);\n info(`Target: ${target}`);\n info(`Output: ${outputDir}`);\n info(`CHARTER hash: ${provisionOutput.charterHash.slice(0, 12)}…`);\n info(`TOOLS hash: ${provisionOutput.toolsHash.slice(0, 12)}…`);\n info(`Channels: ${resolvedChannels.length} active`);\n info(`Artifacts: ${provisionOutput.artifacts.map((a) => a.relativePath).join(', ')}`);\n console.log();\n info('Next steps:');\n info(` cd ${outputDir} && docker compose up`);\n info(` agt drift check ${agentData.code_name}`);\n}\n","import chalk from 'chalk';\nimport ora from 'ora';\nimport {\n detectDrift,\n getFramework,\n type DriftReport,\n type DriftFinding,\n type RiskTier,\n} from '@augmented/core';\nimport { readLiveState } from '@augmented/core/drift/live-state-reader.js';\nimport { requireTeam } from '../lib/auth-guard.js';\nimport { api } from '../lib/api-client.js';\nimport { success, error, warn, info, table } from '../lib/output.js';\nimport { isJsonMode } from '../lib/globals.js';\n\nconst KEBAB_CASE_RE = /^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/;\n\nfunction severityColor(severity: string): string {\n switch (severity) {\n case 'critical':\n return chalk.red(severity);\n case 'warning':\n return chalk.yellow(severity);\n default:\n return chalk.dim(severity);\n }\n}\n\nfunction printDriftReport(report: DriftReport): void {\n console.log(chalk.bold(`\\nDrift Report: ${report.codeName}\\n`));\n\n info(`Agent ID: ${report.agentId}`);\n info(`Checked at: ${report.checkedAt.toISOString()}`);\n console.log();\n\n if (!report.hasDrift) {\n success('No drift detected. Agent matches provisioned state.');\n return;\n }\n\n warn(`Drift detected: ${report.criticalCount} critical, ${report.warningCount} warning`);\n console.log();\n\n const rows = report.findings.map((f: DriftFinding) => [\n severityColor(f.severity),\n f.category,\n f.field,\n f.message,\n ]);\n\n table(['Severity', 'Category', 'Field', 'Message'], rows);\n}\n\ninterface DriftCheckOpts {\n json?: boolean;\n audit?: boolean;\n config?: string;\n}\n\n/**\n * `agt drift check <code-name>`\n */\nexport async function driftCheckCommand(\n codeName: string,\n opts: DriftCheckOpts,\n): Promise<void> {\n const teamSlug = requireTeam();\n if (!teamSlug) return;\n\n if (!KEBAB_CASE_RE.test(codeName)) {\n error('Invalid code-name. Must be kebab-case (e.g. \"my-agent\").');\n process.exitCode = 1;\n return;\n }\n\n const useJson = opts.json || isJsonMode();\n\n const spinner = ora({ text: `Checking drift for \"${codeName}\"…`, isSilent: useJson });\n spinner.start();\n\n try {\n // Fetch drift data via API\n const driftData = await api.get<{\n agent: Record<string, unknown>;\n snapshot: Record<string, unknown> | null;\n charter: { raw_content: string; version: string } | null;\n tools: { raw_content: string; version: string } | null;\n }>(`/agents/${encodeURIComponent(codeName)}/drift-data`);\n\n const agent = driftData.agent;\n const snapshot = driftData.snapshot;\n\n if (!snapshot) {\n spinner.fail(`No provision snapshot found for \"${codeName}\". Run \\`agt provision\\` first.`);\n error('No provision snapshot available');\n process.exitCode = 1;\n return;\n }\n\n // Resolve adapter from agent's framework field\n const frameworkId = (agent.framework as string) ?? 'openclaw';\n const adapter = getFramework(frameworkId);\n const trackedFiles = adapter.driftTrackedFiles();\n\n // Read live state from disk (team-scoped to prevent cross-team collisions)\n const defaultDir = `.augmented/${teamSlug}/${codeName}/provision`;\n const configPath = opts.config ?? `${defaultDir}/${trackedFiles[0]}`;\n\n const liveState = await readLiveState({\n configPath,\n teamDir: defaultDir,\n trackedFiles,\n runAudit: opts.audit,\n });\n\n // Run drift detection\n const report = detectDrift(\n {\n frameworkConfig: (snapshot.openclaw_config ?? {}) as Record<string, unknown>,\n charterHash: snapshot.charter_hash as string ?? '',\n toolsHash: snapshot.tools_hash as string ?? '',\n toolAllow: snapshot.tool_allow as string[] ?? [],\n toolDeny: snapshot.tool_deny as string[] ?? [],\n channelsConfig: (snapshot.channels_config ?? {}) as Record<string, unknown>,\n sandboxMode: snapshot.sandbox_mode as string ?? 'all',\n },\n liveState,\n agent.agent_id as string,\n codeName,\n (agent.risk_tier as RiskTier) ?? 'Medium',\n );\n\n spinner.stop();\n\n if (useJson) {\n console.log(JSON.stringify(report, null, 2));\n } else {\n printDriftReport(report);\n }\n\n if (report.hasDrift) {\n process.exitCode = 1;\n }\n } catch (err) {\n spinner.fail('Drift check failed.');\n error((err as Error).message);\n process.exitCode = 1;\n }\n}\n\ninterface DriftWatchOpts {\n interval?: string;\n webhook?: string;\n json?: boolean;\n config?: string;\n}\n\n/**\n * `agt drift watch <code-name>`\n */\nexport async function driftWatchCommand(\n codeName: string,\n opts: DriftWatchOpts,\n): Promise<void> {\n const teamSlug = requireTeam();\n if (!teamSlug) return;\n\n if (!KEBAB_CASE_RE.test(codeName)) {\n error('Invalid code-name. Must be kebab-case (e.g. \"my-agent\").');\n process.exitCode = 1;\n return;\n }\n\n const useJson = opts.json || isJsonMode();\n\n const intervalSec = parseInt(opts.interval ?? '60', 10);\n if (isNaN(intervalSec) || intervalSec < 1) {\n error('Interval must be a positive number of seconds.');\n process.exitCode = 1;\n return;\n }\n\n // Resolve agent once up front\n let agent: Record<string, unknown>;\n try {\n const data = await api.get<{ agent: Record<string, unknown> }>(`/agents/${encodeURIComponent(codeName)}`);\n agent = data.agent;\n } catch (err) {\n error((err as Error).message);\n process.exitCode = 1;\n return;\n }\n\n // Resolve adapter from agent's framework field\n const frameworkId = (agent.framework as string) ?? 'openclaw';\n const adapter = getFramework(frameworkId);\n const trackedFiles = adapter.driftTrackedFiles();\n\n if (!useJson) {\n console.log(\n chalk.bold(`\\nWatching drift for \"${codeName}\" every ${intervalSec}s. Press Ctrl+C to stop.\\n`),\n );\n }\n\n let previousFindingCount = -1;\n\n const runCheck = async (): Promise<void> => {\n const spinner = ora({ text: `Checking drift for \"${codeName}\"…`, isSilent: useJson });\n spinner.start();\n\n try {\n const driftData = await api.get<{\n snapshot: Record<string, unknown> | null;\n }>(`/agents/${encodeURIComponent(codeName)}/drift-data`);\n\n const snapshot = driftData.snapshot;\n if (!snapshot) {\n spinner.warn('No provision snapshot found. Skipping check.');\n return;\n }\n\n const watchDefaultDir = `.augmented/${teamSlug}/${codeName}/provision`;\n const configPath = opts.config ?? `${watchDefaultDir}/${trackedFiles[0]}`;\n\n const liveState = await readLiveState({\n configPath,\n teamDir: watchDefaultDir,\n trackedFiles,\n });\n\n const report = detectDrift(\n {\n frameworkConfig: (snapshot.openclaw_config ?? {}) as Record<string, unknown>,\n charterHash: snapshot.charter_hash as string ?? '',\n toolsHash: snapshot.tools_hash as string ?? '',\n toolAllow: snapshot.tool_allow as string[] ?? [],\n toolDeny: snapshot.tool_deny as string[] ?? [],\n channelsConfig: (snapshot.channels_config ?? {}) as Record<string, unknown>,\n sandboxMode: snapshot.sandbox_mode as string ?? 'all',\n },\n liveState,\n agent.agent_id as string,\n codeName,\n (agent.risk_tier as RiskTier) ?? 'Medium',\n );\n\n spinner.stop();\n\n const isNew = report.findings.length !== previousFindingCount;\n previousFindingCount = report.findings.length;\n\n if (useJson) {\n console.log(JSON.stringify(report, null, 2));\n } else if (report.hasDrift) {\n printDriftReport(report);\n } else {\n success(`[${new Date().toLocaleTimeString()}] No drift detected.`);\n }\n\n if (isNew && report.hasDrift && opts.webhook) {\n try {\n await fetch(opts.webhook, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(report),\n });\n if (!useJson) info(`Webhook notified: ${opts.webhook}`);\n } catch (webhookErr) {\n if (!useJson) warn(`Failed to notify webhook: ${(webhookErr as Error).message}`);\n }\n }\n } catch (err) {\n spinner.fail('Drift check failed.');\n error((err as Error).message);\n }\n };\n\n await runCheck();\n\n const timer = setInterval(() => {\n void runCheck();\n }, intervalSec * 1000);\n\n process.on('SIGINT', () => {\n clearInterval(timer);\n if (!useJson) console.log(chalk.dim('\\nStopped watching.'));\n process.exit(0);\n });\n}\n","import { readFile } from 'node:fs/promises';\nimport { createHash } from 'node:crypto';\nimport { join } from 'node:path';\nimport JSON5 from 'json5';\nimport type { DriftCheckOptions, LiveState } from './types.js';\n\nasync function hashFile(filePath: string): Promise<string | null> {\n try {\n const content = await readFile(filePath);\n return createHash('sha256').update(content).digest('hex');\n } catch {\n return null;\n }\n}\n\nasync function readJsonFile(filePath: string): Promise<Record<string, unknown> | null> {\n try {\n const content = await readFile(filePath, 'utf-8');\n return JSON5.parse(content) as Record<string, unknown>;\n } catch {\n return null;\n }\n}\n\nexport async function readLiveState(options: DriftCheckOptions): Promise<LiveState> {\n const trackedFiles = options.trackedFiles ?? ['openclaw.json5', 'CHARTER.md', 'TOOLS.md'];\n\n // Config file is the first tracked file (framework-specific config)\n // CHARTER.md and TOOLS.md are identified by name within the tracked list\n const charterFile = trackedFiles.find((f) => f.includes('CHARTER')) ?? 'CHARTER.md';\n const toolsFile = trackedFiles.find((f) => f.includes('TOOLS')) ?? 'TOOLS.md';\n\n const [frameworkConfig, charterHash, toolsHash] = await Promise.all([\n readJsonFile(options.configPath),\n hashFile(join(options.teamDir, charterFile)),\n hashFile(join(options.teamDir, toolsFile)),\n ]);\n\n return {\n frameworkConfig,\n charterHash,\n toolsHash,\n configPath: options.configPath,\n };\n}\n","import chalk from 'chalk';\nimport ora from 'ora';\nimport { requireTeam } from '../lib/auth-guard.js';\nimport { api, getHostId } from '../lib/api-client.js';\nimport { success, error, info, table } from '../lib/output.js';\nimport { isJsonMode, jsonOutput } from '../lib/globals.js';\n\n// ---------------------------------------------------------------------------\n// agt host list\n// ---------------------------------------------------------------------------\n\nexport async function hostListCommand(): Promise<void> {\n const teamSlug = requireTeam();\n if (!teamSlug) return;\n\n const json = isJsonMode();\n const spinner = ora({ text: 'Fetching hosts\\u2026', isSilent: json });\n spinner.start();\n\n try {\n const data = await api.get<{\n hosts: Array<{\n name: string;\n status: string;\n description: string | null;\n framework: string;\n agents: number;\n last_seen_at: string | null;\n key_prefix: string | null;\n created_at: string;\n }>;\n }>('/hosts');\n\n spinner.stop();\n\n if (!data.hosts || data.hosts.length === 0) {\n if (json) {\n jsonOutput({ ok: true, hosts: [] });\n } else {\n info('No hosts found. Create one with `agt host create --name <name>`.');\n }\n return;\n }\n\n if (json) {\n jsonOutput({ ok: true, hosts: data.hosts });\n return;\n }\n\n const rows = data.hosts.map((h) => {\n const status = h.status === 'active'\n ? chalk.green('active')\n : chalk.red('decommissioned');\n\n const agents = String(h.agents);\n\n const lastSeen = h.last_seen_at\n ? new Date(h.last_seen_at).toLocaleDateString()\n : chalk.dim('never');\n\n const prefix = h.key_prefix\n ? `tlk_${h.key_prefix}\\u2026`\n : chalk.dim('none');\n\n return [h.name, status, agents, lastSeen, prefix];\n });\n\n table(['Name', 'Status', 'Agents', 'Last Seen', 'Key'], rows);\n } catch (err) {\n spinner.fail('Failed to fetch hosts.');\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n }\n}\n\n// ---------------------------------------------------------------------------\n// agt host assign\n// ---------------------------------------------------------------------------\n\ninterface HostAssignOptions {\n force?: boolean;\n}\n\nexport async function hostAssignCommand(\n hostName: string,\n agentCodeNames: string[],\n opts: HostAssignOptions,\n): Promise<void> {\n const teamSlug = requireTeam();\n if (!teamSlug) return;\n\n const json = isJsonMode();\n\n if (!agentCodeNames || agentCodeNames.length === 0) {\n if (json) {\n jsonOutput({ ok: false, error: 'At least one agent code name is required' });\n } else {\n error('At least one agent code name is required.');\n }\n process.exitCode = 1;\n return;\n }\n\n const spinner = ora({ text: 'Assigning agents\\u2026', isSilent: json });\n spinner.start();\n\n try {\n await api.post(`/hosts/${encodeURIComponent(hostName)}/assign`, {\n agents: agentCodeNames,\n force: opts.force,\n });\n\n spinner.succeed(`Agents assigned to ${chalk.bold(hostName)}.`);\n\n if (json) {\n jsonOutput({ ok: true, host: hostName, assigned: agentCodeNames });\n return;\n }\n\n for (const name of agentCodeNames) {\n info(` ${name}`);\n }\n } catch (err) {\n spinner.fail('Failed to assign agents.');\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n }\n}\n\n// ---------------------------------------------------------------------------\n// agt host unassign\n// ---------------------------------------------------------------------------\n\nexport async function hostUnassignCommand(\n hostName: string,\n agentCodeNames: string[],\n): Promise<void> {\n const teamSlug = requireTeam();\n if (!teamSlug) return;\n\n const json = isJsonMode();\n\n if (!agentCodeNames || agentCodeNames.length === 0) {\n if (json) {\n jsonOutput({ ok: false, error: 'At least one agent code name is required' });\n } else {\n error('At least one agent code name is required.');\n }\n process.exitCode = 1;\n return;\n }\n\n const spinner = ora({ text: 'Unassigning agents\\u2026', isSilent: json });\n spinner.start();\n\n try {\n await api.post(`/hosts/${encodeURIComponent(hostName)}/unassign`, {\n agents: agentCodeNames,\n });\n\n spinner.succeed(`Agents unassigned from ${chalk.bold(hostName)}.`);\n\n if (json) {\n jsonOutput({ ok: true, host: hostName, unassigned: agentCodeNames });\n return;\n }\n\n for (const name of agentCodeNames) {\n info(` ${name}`);\n }\n } catch (err) {\n spinner.fail('Failed to unassign agents.');\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n }\n}\n\n// ---------------------------------------------------------------------------\n// agt host agents [host-name]\n// ---------------------------------------------------------------------------\n\nexport async function hostAgentsCommand(hostName?: string): Promise<void> {\n const json = isJsonMode();\n const spinner = ora({ text: 'Fetching host agents\\u2026', isSilent: json });\n spinner.start();\n\n try {\n // If no host name given, use the API key's host identity via /host/agents\n const hostId = await getHostId();\n\n if (!hostName && !hostId) {\n spinner.fail('No host specified.');\n if (json) {\n jsonOutput({ ok: false, error: 'Provide a host name or use an AGT_API_KEY' });\n } else {\n error('Provide a host name, or set AGT_API_KEY to auto-resolve the host.');\n }\n process.exitCode = 1;\n return;\n }\n\n let agents: Array<{\n code_name: string;\n display_name: string;\n status: string;\n environment: string;\n risk_tier?: string;\n assigned_at?: string;\n }>;\n\n if (hostId && !hostName) {\n // Host runtime path — resolve from API key\n const data = await api.post<{\n agents: typeof agents;\n }>('/host/agents', { host_id: hostId });\n agents = data.agents ?? [];\n } else {\n // Dashboard path — look up by name\n const teamSlug = requireTeam();\n if (!teamSlug) return;\n\n const data = await api.get<{\n agents: typeof agents;\n }>(`/hosts/${encodeURIComponent(hostName!)}/agents`);\n agents = data.agents ?? [];\n }\n\n spinner.stop();\n\n if (agents.length === 0) {\n if (json) {\n jsonOutput({ ok: true, agents: [] });\n } else {\n info('No agents assigned to this host.');\n info('Assign agents with `agt host assign <host-name> <agent-code-name>`.');\n }\n return;\n }\n\n if (json) {\n jsonOutput({ ok: true, agents });\n return;\n }\n\n const rows = agents.map((a) => {\n const statusColor = a.status === 'active' ? chalk.green : chalk.yellow;\n return [\n a.code_name,\n a.display_name,\n statusColor(a.status),\n a.environment,\n ];\n });\n\n table(['Code Name', 'Display Name', 'Status', 'Environment'], rows);\n } catch (err) {\n spinner.fail('Failed to fetch host agents.');\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n }\n}\n\n// ---------------------------------------------------------------------------\n// agt host rotate-key\n// ---------------------------------------------------------------------------\n\nexport async function hostRotateKeyCommand(hostName: string): Promise<void> {\n const teamSlug = requireTeam();\n if (!teamSlug) return;\n\n const json = isJsonMode();\n const spinner = ora({ text: 'Rotating host key\\u2026', isSilent: json });\n spinner.start();\n\n try {\n const data = await api.post<{\n ok: boolean;\n host: string;\n key: { prefix: string; raw_key: string };\n }>(`/hosts/${encodeURIComponent(hostName)}/rotate-key`);\n\n spinner.succeed(`Key rotated for ${chalk.bold(hostName)}.`);\n\n if (json) {\n jsonOutput({\n ok: true,\n host: hostName,\n key: data.key,\n });\n return;\n }\n\n console.log();\n info(`Host: ${chalk.bold(hostName)}`);\n info(`Prefix: ${data.key.prefix}`);\n console.log();\n console.log(chalk.yellow.bold(' Save this key now \\u2014 it will not be shown again:'));\n console.log();\n console.log(` ${chalk.green.bold(data.key.raw_key)}`);\n console.log();\n } catch (err) {\n spinner.fail('Failed to rotate key.');\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n }\n}\n\n// ---------------------------------------------------------------------------\n// agt host decommission\n// ---------------------------------------------------------------------------\n\nexport async function hostDecommissionCommand(hostName: string): Promise<void> {\n const teamSlug = requireTeam();\n if (!teamSlug) return;\n\n const json = isJsonMode();\n const spinner = ora({ text: 'Decommissioning host\\u2026', isSilent: json });\n spinner.start();\n\n try {\n await api.post(`/hosts/${encodeURIComponent(hostName)}/decommission`);\n\n spinner.succeed(`Host \"${chalk.bold(hostName)}\" decommissioned.`);\n\n if (json) {\n jsonOutput({\n ok: true,\n host: hostName,\n status: 'decommissioned',\n });\n return;\n }\n\n info(`Host: ${hostName}`);\n info(`Status: ${chalk.red('decommissioned')}`);\n info('API key revoked. Agents remain assigned for audit visibility.');\n info('Reassign agents to another host with `agt host assign --force`.');\n } catch (err) {\n spinner.fail('Failed to decommission host.');\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n }\n}\n","import chalk from 'chalk';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport { getApiKey, AGT_HOST } from '../lib/config.js';\nimport { startWatchdog, stopWatchdog, getManagerStatus } from '../lib/watchdog.js';\nimport { success, error, info, table } from '../lib/output.js';\nimport { isJsonMode, jsonOutput } from '../lib/globals.js';\n\n// ---------------------------------------------------------------------------\n// agt manager start\n// ---------------------------------------------------------------------------\n\ninterface ManagerStartOptions {\n interval?: string;\n configDir?: string;\n}\n\nexport function managerStartCommand(opts: ManagerStartOptions): void {\n const json = isJsonMode();\n\n // Validate required env vars\n if (!AGT_HOST) {\n const msg = 'AGT_HOST is not set. Export it to point at the Augmented API (e.g. export AGT_HOST=https://your-api.example.com)';\n if (json) { jsonOutput({ ok: false, error: msg }); } else { error(msg); }\n process.exitCode = 1;\n return;\n }\n\n const apiKey = getApiKey();\n if (!apiKey) {\n const msg = 'AGT_API_KEY is not set. Export it with your host API key (tlk_...)';\n if (json) { jsonOutput({ ok: false, error: msg }); } else { error(msg); }\n process.exitCode = 1;\n return;\n }\n\n const intervalSec = parseInt(opts.interval ?? '10', 10);\n if (isNaN(intervalSec) || intervalSec < 5) {\n if (json) {\n jsonOutput({ ok: false, error: 'Interval must be at least 10 seconds' });\n } else {\n error('Interval must be at least 10 seconds.');\n }\n process.exitCode = 1;\n return;\n }\n\n const configDir = opts.configDir ?? join(homedir(), '.augmented');\n\n try {\n const { pid } = startWatchdog({\n intervalMs: intervalSec * 1000,\n configDir,\n });\n\n if (json) {\n jsonOutput({ ok: true, pid, interval: intervalSec, configDir });\n } else {\n success(`Manager started (PID ${pid}, interval ${intervalSec}s)`);\n info(`Config dir: ${configDir}`);\n info('Stop with: agt manager stop');\n }\n } catch (err) {\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n }\n}\n\n// ---------------------------------------------------------------------------\n// agt manager stop\n// ---------------------------------------------------------------------------\n\nexport async function managerStopCommand(): Promise<void> {\n const json = isJsonMode();\n\n try {\n const result = await stopWatchdog();\n\n if (!result.stopped && !result.pid) {\n if (json) {\n jsonOutput({ ok: false, error: 'Manager is not running' });\n } else {\n error('Manager is not running.');\n }\n process.exitCode = 1;\n return;\n }\n\n if (json) {\n jsonOutput({ ok: true, stopped: true, pid: result.pid });\n } else {\n success(`Manager stopped (PID ${result.pid})`);\n }\n } catch (err) {\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n }\n}\n\n// ---------------------------------------------------------------------------\n// agt manager status\n// ---------------------------------------------------------------------------\n\nexport function managerStatusCommand(): void {\n const json = isJsonMode();\n\n const status = getManagerStatus();\n\n if (!status) {\n if (json) {\n jsonOutput({ ok: true, running: false });\n } else {\n info('Manager is not running.');\n }\n return;\n }\n\n if (json) {\n jsonOutput({ ok: true, running: true, ...status });\n return;\n }\n\n console.log(chalk.bold('\\nManager Status\\n'));\n\n info(`PID: ${status.pid}`);\n info(`Started: ${status.startedAt}`);\n info(`Last poll: ${status.lastPollAt ?? chalk.dim('none')}`);\n info(`Polls: ${status.pollCount}`);\n info(`Errors: ${status.errorCount}`);\n console.log();\n\n if (status.agents.length === 0) {\n info('No agents discovered yet.');\n return;\n }\n\n const rows = status.agents.map((a) => {\n let gwStatus = chalk.dim('—');\n if (a.gatewayRunning) {\n gwStatus = chalk.green(`:${a.gatewayPort} (PID ${a.gatewayPid})`);\n } else if (a.gatewayPort) {\n gwStatus = chalk.red(`:${a.gatewayPort} (down)`);\n }\n\n return [\n a.codeName,\n a.status === 'active' ? chalk.green(a.status) : a.status === 'paused' ? chalk.yellow(a.status) : chalk.dim(a.status ?? '—'),\n a.charterVersion || chalk.dim('—'),\n gwStatus,\n a.lastProvisionAt ? new Date(a.lastProvisionAt).toLocaleTimeString() : chalk.dim('—'),\n a.lastDriftCheckAt ? new Date(a.lastDriftCheckAt).toLocaleTimeString() : chalk.dim('—'),\n ];\n });\n\n table(\n ['Agent', 'Status', 'Charter', 'Gateway', 'Last Provision', 'Last Drift'],\n rows,\n );\n\n // Show ACP sessions if any agent has active ones\n const acpAgents = status.agents.filter((a) => a.acpSessions && a.acpSessions.length > 0);\n if (acpAgents.length > 0) {\n console.log(chalk.bold('\\nACP Sessions\\n'));\n const acpRows = acpAgents.flatMap((a) =>\n a.acpSessions.map((s) => [\n a.codeName,\n s.agentCommand,\n s.sessionName ?? chalk.dim('default'),\n s.queueState === 'running' ? chalk.green(s.queueState) : s.queueState === 'queued' ? chalk.yellow(s.queueState) : chalk.dim(s.queueState),\n String(s.turnCount),\n new Date(s.startedAt).toLocaleTimeString(),\n ]),\n );\n table(\n ['Agent', 'Coding Agent', 'Session', 'Queue', 'Turns', 'Started'],\n acpRows,\n );\n }\n}\n","/**\n * Manager process — single-process manager with PID management and state files.\n * No fork/IPC — the poll loop runs directly in this process.\n */\n\nimport { readFileSync, writeFileSync, unlinkSync, existsSync, mkdirSync } from 'node:fs';\nimport { join } from 'node:path';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface WatchdogOptions {\n intervalMs: number;\n configDir: string;\n}\n\nexport interface ManagerStatus {\n pid: number;\n startedAt: string;\n lastPollAt: string | null;\n pollCount: number;\n errorCount: number;\n agents: Array<{\n agentId: string;\n codeName: string;\n status: string;\n charterVersion: string;\n toolsVersion: string;\n lastRefreshAt: string | null;\n lastProvisionAt: string | null;\n lastDriftCheckAt: string | null;\n gatewayPort: number | null;\n gatewayPid: number | null;\n gatewayRunning: boolean;\n acpSessions: Array<{\n sessionId: string;\n agentCommand: string;\n sessionName?: string;\n queueState: string;\n turnCount: number;\n startedAt: string;\n }>;\n }>;\n}\n\n// ---------------------------------------------------------------------------\n// Paths\n// ---------------------------------------------------------------------------\n\nconst AUGMENTED_DIR = join(process.env['HOME'] ?? '/tmp', '.augmented');\nconst PID_FILE = join(AUGMENTED_DIR, 'manager.pid');\nconst STATE_FILE = join(AUGMENTED_DIR, 'manager-state.json');\n\nfunction ensureDir(): void {\n if (!existsSync(AUGMENTED_DIR)) {\n mkdirSync(AUGMENTED_DIR, { recursive: true });\n }\n}\n\n// ---------------------------------------------------------------------------\n// PID file management\n// ---------------------------------------------------------------------------\n\nfunction writePidFile(pid: number): void {\n ensureDir();\n writeFileSync(PID_FILE, String(pid), { mode: 0o600 });\n}\n\nfunction readPidFile(): number | null {\n try {\n const raw = readFileSync(PID_FILE, 'utf-8').trim();\n const pid = parseInt(raw, 10);\n return isNaN(pid) ? null : pid;\n } catch {\n return null;\n }\n}\n\nfunction removePidFile(): void {\n try {\n unlinkSync(PID_FILE);\n } catch {\n // may not exist\n }\n}\n\nfunction isProcessAlive(pid: number): boolean {\n try {\n process.kill(pid, 0);\n return true;\n } catch {\n return false;\n }\n}\n\n// ---------------------------------------------------------------------------\n// State file management\n// ---------------------------------------------------------------------------\n\nfunction readStateFile(): ManagerStatus | null {\n try {\n const raw = readFileSync(STATE_FILE, 'utf-8');\n return JSON.parse(raw) as ManagerStatus;\n } catch {\n return null;\n }\n}\n\nfunction removeStateFile(): void {\n try {\n unlinkSync(STATE_FILE);\n } catch {\n // may not exist\n }\n}\n\n// ---------------------------------------------------------------------------\n// Manager (single-process, no fork)\n// ---------------------------------------------------------------------------\n\n/**\n * Start the manager. Runs the poll loop directly in this process.\n * This function does not return until the process is stopped.\n */\nexport function startWatchdog(opts: WatchdogOptions): { pid: number } {\n // Check for existing process\n const existingPid = readPidFile();\n if (existingPid !== null) {\n if (isProcessAlive(existingPid)) {\n throw new Error(`Manager already running (PID ${existingPid}). Use \\`agt manager stop\\` first.`);\n }\n // Stale PID file — clean up\n removePidFile();\n removeStateFile();\n }\n\n // Write PID file\n writePidFile(process.pid);\n\n // Import and start the manager worker directly (no fork)\n // Dynamic import to avoid circular dependency at module load time\n void import('./manager-worker.js').then(({ startManager }) => {\n startManager({\n intervalMs: opts.intervalMs,\n configDir: opts.configDir,\n });\n });\n\n // Clean up PID file on exit\n process.on('exit', () => {\n removePidFile();\n });\n\n return { pid: process.pid };\n}\n\n/**\n * Stop a running manager by reading the PID file and sending SIGTERM.\n */\nexport async function stopWatchdog(): Promise<{ stopped: boolean; pid?: number }> {\n const pid = readPidFile();\n if (pid === null) {\n return { stopped: false };\n }\n\n if (!isProcessAlive(pid)) {\n // Stale PID — clean up\n removePidFile();\n removeStateFile();\n return { stopped: true, pid };\n }\n\n // Send SIGTERM\n process.kill(pid, 'SIGTERM');\n\n // Poll for up to 5 seconds until the process exits\n const deadline = Date.now() + 5_000;\n while (Date.now() < deadline) {\n await new Promise((r) => setTimeout(r, 200));\n if (!isProcessAlive(pid)) {\n removePidFile();\n return { stopped: true, pid };\n }\n }\n\n // Still alive after 5s — force kill\n try {\n process.kill(pid, 'SIGKILL');\n } catch {\n // may have died between checks\n }\n removePidFile();\n removeStateFile();\n return { stopped: true, pid };\n}\n\n/**\n * Get the current manager status by reading PID + state files.\n */\nexport function getManagerStatus(): ManagerStatus | null {\n const pid = readPidFile();\n if (pid === null) return null;\n\n if (!isProcessAlive(pid)) {\n removePidFile();\n removeStateFile();\n return null;\n }\n\n return readStateFile();\n}\n","import chalk from 'chalk';\nimport JSON5 from 'json5';\nimport { readFileSync, existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport {\n extractFrontmatter,\n getChannel,\n type CharterFrontmatter,\n type ToolsFrontmatter,\n} from '@augmented/core';\nimport { error, info, table } from '../lib/output.js';\nimport { isJsonMode, jsonOutput } from '../lib/globals.js';\nimport { api } from '../lib/api-client.js';\nimport { getApiKey } from '../lib/config.js';\n\ninterface AgentShowOptions {\n configDir: string;\n allChannels?: boolean;\n}\n\nexport async function agentShowCommand(\n codeName: string,\n opts: AgentShowOptions,\n): Promise<void> {\n const json = isJsonMode();\n const agentDir = join(opts.configDir, codeName, 'provision');\n const hasLocalConfig = existsSync(agentDir);\n\n // ── Try API first for channel data ─────────────────────────────────────\n\n type ApiChannelConfig = {\n channel_id: string;\n config: Record<string, unknown>;\n status: string;\n };\n\n let apiChannels: ApiChannelConfig[] | null = null;\n let apiAgent: Record<string, unknown> | null = null;\n\n if (getApiKey()) {\n try {\n const data = await api.get<{\n agent: Record<string, unknown>;\n channel_configs: Record<string, { config: Record<string, unknown>; status: string }>;\n }>(`/agents/${encodeURIComponent(codeName)}/provision-data`);\n\n apiAgent = data.agent ?? null;\n\n if (data.channel_configs) {\n apiChannels = Object.entries(data.channel_configs).map(\n ([channelId, val]) => ({\n channel_id: channelId,\n config: val.config,\n status: val.status,\n }),\n );\n }\n } catch {\n // API not available or agent not found — continue with local data\n }\n }\n\n // If no local config and no API data, agent doesn't exist anywhere\n if (!hasLocalConfig && !apiAgent) {\n if (json) {\n jsonOutput({ ok: false, error: `Agent '${codeName}' not found` });\n } else {\n error(`Agent '${codeName}' not found`);\n }\n process.exitCode = 1;\n return;\n }\n\n // ── Read local files (best-effort) ────────────────────────────────────\n\n let charter: CharterFrontmatter | null = null;\n let tools: ToolsFrontmatter | null = null;\n let openclawConfig: Record<string, unknown> | null = null;\n let agentState: {\n charterVersion: string;\n toolsVersion: string;\n lastProvisionAt: string | null;\n lastDriftCheckAt: string | null;\n } | null = null;\n\n if (hasLocalConfig) {\n // CHARTER.md\n const charterPath = join(agentDir, 'CHARTER.md');\n if (existsSync(charterPath)) {\n const raw = readFileSync(charterPath, 'utf-8');\n const parsed = extractFrontmatter(raw);\n if (parsed.frontmatter) {\n charter = parsed.frontmatter as unknown as CharterFrontmatter;\n }\n }\n\n // TOOLS.md\n const toolsPath = join(agentDir, 'TOOLS.md');\n if (existsSync(toolsPath)) {\n const raw = readFileSync(toolsPath, 'utf-8');\n const parsed = extractFrontmatter(raw);\n if (parsed.frontmatter) {\n tools = parsed.frontmatter as unknown as ToolsFrontmatter;\n }\n }\n\n // openclaw.json5\n const openclawPath = join(agentDir, 'openclaw.json5');\n if (existsSync(openclawPath)) {\n try {\n const raw = readFileSync(openclawPath, 'utf-8');\n openclawConfig = JSON5.parse(raw) as Record<string, unknown>;\n } catch {\n // ignore parse errors — show what we can\n }\n }\n\n // manager-state.json\n const statePath = join(opts.configDir, 'manager-state.json');\n if (existsSync(statePath)) {\n try {\n const raw = readFileSync(statePath, 'utf-8');\n const state = JSON.parse(raw) as {\n agents: Array<{\n codeName: string;\n charterVersion: string;\n toolsVersion: string;\n lastProvisionAt: string | null;\n lastDriftCheckAt: string | null;\n }>;\n };\n agentState = state.agents?.find((a) => a.codeName === codeName) ?? null;\n } catch {\n // ignore\n }\n }\n }\n\n // ── Resolve channel data ────────────────────────────────────────────────\n // Prefer API channel data over local openclaw.json5 since the webapp/API\n // is the source of truth for channel configuration.\n\n type ChannelRow = {\n id: string;\n name: string;\n tier: string;\n enabled: boolean;\n status: string;\n e2e: string;\n };\n\n const channelRows: ChannelRow[] = [];\n\n if (apiChannels && apiChannels.length > 0) {\n // Use API channel configs (source of truth)\n for (const ch of apiChannels) {\n const def = getChannel(ch.channel_id);\n channelRows.push({\n id: ch.channel_id,\n name: def?.name ?? ch.channel_id,\n tier: def?.securityTier ?? 'unknown',\n enabled: true,\n status: ch.status,\n e2e: def ? String(def.e2eEncrypted) : '—',\n });\n }\n } else {\n // Fall back to local openclaw.json5 channels\n const openclawChannels = Array.isArray(openclawConfig?.channels)\n ? (openclawConfig!.channels as Array<{ id: string; enabled?: boolean }>)\n : [];\n\n for (const ch of openclawChannels) {\n const def = getChannel(ch.id);\n channelRows.push({\n id: ch.id,\n name: def?.name ?? ch.id,\n tier: def?.securityTier ?? 'unknown',\n enabled: ch.enabled !== false,\n status: ch.enabled !== false ? 'configured' : 'disabled',\n e2e: def ? String(def.e2eEncrypted) : '—',\n });\n }\n }\n\n // ── JSON output ─────────────────────────────────────────────────────────\n\n if (json) {\n const filtered = opts.allChannels ? channelRows : channelRows.filter((c) => c.enabled);\n jsonOutput({\n ok: true,\n agent: {\n code_name: codeName,\n display_name: (apiAgent?.display_name as string) ?? charter?.display_name ?? null,\n agent_id: (apiAgent?.agent_id as string) ?? charter?.agent_id ?? null,\n environment: (apiAgent?.environment as string) ?? charter?.environment ?? null,\n risk_tier: (apiAgent?.risk_tier as string) ?? charter?.risk_tier ?? null,\n owner: charter?.owner ?? null,\n logging_mode: charter?.logging_mode ?? null,\n budget: charter?.budget ?? null,\n limits: charter?.limits ?? null,\n },\n versions: {\n charter: agentState?.charterVersion ?? charter?.version ?? null,\n tools: agentState?.toolsVersion ?? tools?.version ?? null,\n last_provision: agentState?.lastProvisionAt ?? null,\n last_drift_check: agentState?.lastDriftCheckAt ?? null,\n },\n tools: {\n enforcement_mode: tools?.enforcement_mode ?? null,\n global_controls: tools?.global_controls ?? null,\n count: tools?.tools?.length ?? 0,\n items: tools?.tools ?? [],\n },\n channels: filtered,\n openclaw: openclawConfig\n ? { sandbox: (openclawConfig as any).sandbox ?? null, gateway: (openclawConfig as any).gateway ?? null }\n : null,\n });\n return;\n }\n\n // ── Human output ────────────────────────────────────────────────────────\n\n const displayName = (apiAgent?.display_name as string) ?? charter?.display_name ?? codeName;\n console.log(chalk.bold(`\\nAgent: ${codeName}`) + (displayName !== codeName ? ` (${displayName})` : '') + '\\n');\n\n if (charter || apiAgent) {\n const agentId = (apiAgent?.agent_id as string) ?? charter?.agent_id;\n const environment = (apiAgent?.environment as string) ?? charter?.environment;\n const riskTier = (apiAgent?.risk_tier as string) ?? charter?.risk_tier;\n\n info(`Agent ID: ${agentId ?? '—'}`);\n info(`Environment: ${environment ?? '—'}`);\n info(`Risk Tier: ${riskTier ?? '—'}`);\n info(`Owner: ${charter?.owner?.name ?? '—'}`);\n\n const charterVer = agentState?.charterVersion ?? charter?.version;\n const toolsVer = agentState?.toolsVersion ?? tools?.version ?? '—';\n const provTs = agentState?.lastProvisionAt\n ? formatTimestamp(agentState.lastProvisionAt)\n : null;\n\n if (charterVer) {\n info(`Charter: v${charterVer}${provTs ? ` (provisioned ${provTs})` : ''}`);\n }\n if (toolsVer !== '—') {\n info(`Tools: v${toolsVer}${provTs ? ` (provisioned ${provTs})` : ''}`);\n }\n\n // Sandbox\n const sandbox = openclawConfig ? (openclawConfig as any).sandbox : null;\n if (sandbox != null) {\n info(`Sandbox: ${sandbox ? 'on' : 'off'}`);\n }\n\n // Budget\n const b = charter?.budget;\n if (b) {\n const budgetStr = `${b.limit.toLocaleString()} ${b.type} / ${b.window} (${b.enforcement ?? 'block'})`;\n info(`Budget: ${budgetStr}`);\n }\n } else {\n info('No agent metadata available');\n }\n\n // ── Channels table ──────────────────────────────────────────────────────\n\n const filtered = opts.allChannels ? channelRows : channelRows.filter((c) => c.enabled);\n\n console.log(chalk.bold('\\nChannels:'));\n\n if (filtered.length === 0) {\n info('(none enabled)');\n } else {\n table(\n ['Channel', 'Name', 'Tier', 'Status', 'E2E'],\n filtered.map((c) => [\n c.id,\n c.name,\n c.tier,\n c.status,\n c.e2e,\n ]),\n );\n }\n\n // ── Tools ───────────────────────────────────────────────────────────────\n\n if (tools) {\n console.log(chalk.bold('\\nTools:'));\n\n if (tools.tools.length === 0) {\n info('(none configured)');\n } else {\n table(\n ['ID', 'Name', 'Type', 'Access', 'Enforcement'],\n tools.tools.map((t) => [t.id, t.name, t.type, t.access, t.enforcement]),\n );\n }\n\n // Global controls\n if (tools.global_controls) {\n const gc = tools.global_controls;\n console.log(chalk.bold('\\nGlobal Controls:'));\n info(`Network: ${gc.default_network_policy === 'deny' ? 'deny-by-default' : 'allow-by-default'}`);\n info(`Timeout: ${gc.default_timeout_ms}ms`);\n info(`Rate: ${gc.default_rate_limit_rpm} rpm`);\n info(`Retries: ${gc.default_retries}`);\n }\n }\n\n console.log();\n}\n\nfunction formatTimestamp(iso: string): string {\n const d = new Date(iso);\n const pad = (n: number) => String(n).padStart(2, '0');\n return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}`;\n}\n","import chalk from 'chalk';\nimport ora from 'ora';\nimport { requireTeam } from '../lib/auth-guard.js';\nimport { api, ApiError } from '../lib/api-client.js';\nimport { success, error, info, table } from '../lib/output.js';\nimport { isJsonMode, jsonOutput } from '../lib/globals.js';\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\ninterface RecurringTemplate {\n id: string;\n title: string;\n kind: string;\n expression?: string;\n every_interval?: string;\n natural_language?: string;\n timezone: string;\n enabled: boolean;\n next_spawn_at?: string;\n last_spawned_at?: string;\n spawn_count: number;\n priority: number;\n created_at: string;\n}\n\nasync function resolveAgentId(codeName: string): Promise<string | null> {\n try {\n const data = await api.get<{ agent_id: string }>(`/agents/${codeName}`);\n return data.agent_id;\n } catch (err) {\n if (err instanceof ApiError && err.status === 404) return null;\n throw err;\n }\n}\n\nfunction priorityLabel(p: number): string {\n return p === 1 ? chalk.red('HIGH') : p === 3 ? chalk.dim('LOW') : chalk.yellow('MED');\n}\n\nfunction formatSpawnTime(isoDate: string | undefined, timezone: string): string {\n if (!isoDate) return chalk.dim('—');\n try {\n return new Intl.DateTimeFormat('en-AU', {\n dateStyle: 'medium',\n timeStyle: 'short',\n timeZone: timezone,\n }).format(new Date(isoDate));\n } catch {\n return new Date(isoDate).toLocaleString();\n }\n}\n\n// ---------------------------------------------------------------------------\n// agt kanban recurring add\n// ---------------------------------------------------------------------------\n\nexport async function kanbanRecurringAddCommand(\n title: string,\n opts: {\n agent: string;\n every: string;\n priority?: string;\n description?: string;\n estimate?: string;\n deliverable?: string;\n timezone?: string;\n },\n): Promise<void> {\n const teamSlug = requireTeam();\n if (!teamSlug) return;\n const json = isJsonMode();\n\n // Validate numeric inputs\n let priority: number | undefined;\n if (opts.priority) {\n priority = Number(opts.priority);\n if (!Number.isInteger(priority) || priority < 1 || priority > 3) {\n if (json) {\n jsonOutput({ ok: false, error: 'Priority must be 1, 2, or 3' });\n } else {\n error('Priority must be 1 (high), 2 (medium), or 3 (low)');\n }\n process.exitCode = 1;\n return;\n }\n }\n\n let estimatedMinutes: number | undefined;\n if (opts.estimate) {\n estimatedMinutes = Number(opts.estimate);\n if (!Number.isInteger(estimatedMinutes) || estimatedMinutes <= 0) {\n if (json) {\n jsonOutput({ ok: false, error: 'Estimate must be a positive integer (minutes)' });\n } else {\n error('Estimate must be a positive integer (minutes)');\n }\n process.exitCode = 1;\n return;\n }\n }\n\n const spinner = ora({ text: 'Creating recurring template…', isSilent: json });\n spinner.start();\n\n const agentId = await resolveAgentId(opts.agent);\n if (!agentId) {\n spinner.fail(`Agent \"${opts.agent}\" not found`);\n process.exitCode = 1;\n return;\n }\n\n try {\n const data = await api.post<{ template: RecurringTemplate }>('/host/kanban/recurring', {\n agent_id: agentId,\n title,\n description: opts.description ?? undefined,\n priority,\n estimated_minutes: estimatedMinutes,\n deliverable: opts.deliverable ?? undefined,\n schedule: opts.every,\n timezone: opts.timezone ?? undefined,\n });\n\n spinner.stop();\n\n if (json) {\n jsonOutput({ ok: true, template: data.template });\n return;\n }\n\n success(`Recurring task created: ${chalk.bold(title)}`);\n info(`Schedule: ${chalk.cyan(data.template.natural_language ?? data.template.expression ?? data.template.every_interval ?? '')}`);\n info(`Next spawn: ${formatSpawnTime(data.template.next_spawn_at, data.template.timezone)}`);\n info(`Timezone: ${data.template.timezone}`);\n } catch (err) {\n spinner.fail('Failed to create recurring template');\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n }\n}\n\n// ---------------------------------------------------------------------------\n// agt kanban recurring list\n// ---------------------------------------------------------------------------\n\nexport async function kanbanRecurringListCommand(\n opts: { agent: string },\n): Promise<void> {\n const teamSlug = requireTeam();\n if (!teamSlug) return;\n const json = isJsonMode();\n\n const spinner = ora({ text: 'Fetching recurring templates…', isSilent: json });\n spinner.start();\n\n const agentId = await resolveAgentId(opts.agent);\n if (!agentId) {\n spinner.fail(`Agent \"${opts.agent}\" not found`);\n process.exitCode = 1;\n return;\n }\n\n try {\n const data = await api.get<{ templates: RecurringTemplate[] }>(\n `/host/kanban/recurring?agent_id=${agentId}`,\n );\n\n spinner.stop();\n\n if (json) {\n jsonOutput({ ok: true, templates: data.templates });\n return;\n }\n\n if (data.templates.length === 0) {\n info('No recurring templates found.');\n return;\n }\n\n const rows = data.templates.map((t) => [\n t.id.slice(0, 8),\n t.title,\n t.natural_language ?? t.expression ?? t.every_interval ?? '—',\n priorityLabel(t.priority),\n t.enabled ? chalk.green('Active') : chalk.dim('Disabled'),\n formatSpawnTime(t.next_spawn_at, t.timezone),\n String(t.spawn_count),\n ]);\n\n table(\n ['ID', 'Title', 'Schedule', 'Priority', 'Status', 'Next Spawn', 'Spawned'],\n rows,\n );\n } catch (err) {\n spinner.fail('Failed to fetch recurring templates');\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n }\n}\n\n// ---------------------------------------------------------------------------\n// agt kanban recurring disable\n// ---------------------------------------------------------------------------\n\nexport async function kanbanRecurringDisableCommand(\n titleOrId: string,\n opts: { agent: string },\n): Promise<void> {\n const teamSlug = requireTeam();\n if (!teamSlug) return;\n const json = isJsonMode();\n\n const spinner = ora({ text: 'Disabling recurring template…', isSilent: json });\n spinner.start();\n\n const agentId = await resolveAgentId(opts.agent);\n if (!agentId) {\n spinner.fail(`Agent \"${opts.agent}\" not found`);\n process.exitCode = 1;\n return;\n }\n\n try {\n const data = await api.get<{ templates: RecurringTemplate[] }>(\n `/host/kanban/recurring?agent_id=${agentId}`,\n );\n\n const matches = data.templates.filter(\n (t) => t.id.startsWith(titleOrId) || t.title.toLowerCase() === titleOrId.toLowerCase(),\n );\n\n if (matches.length === 0) {\n spinner.fail(`Recurring template \"${titleOrId}\" not found`);\n process.exitCode = 1;\n return;\n }\n\n if (matches.length > 1) {\n spinner.fail(`Ambiguous match for \"${titleOrId}\" — ${matches.length} templates found:`);\n for (const m of matches) {\n info(` ${m.id.slice(0, 8)} — ${m.title}`);\n }\n info('Use a longer ID prefix to disambiguate.');\n process.exitCode = 1;\n return;\n }\n\n const match = matches[0]!;\n await api.patch(`/host/kanban/recurring/${match.id}`, { enabled: false });\n spinner.stop();\n\n if (json) {\n jsonOutput({ ok: true, id: match.id, title: match.title, enabled: false });\n } else {\n success(`Disabled: ${chalk.bold(match.title)}`);\n }\n } catch (err) {\n spinner.fail('Failed to disable recurring template');\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n }\n}\n","import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';\nimport { join, dirname } from 'node:path';\nimport { homedir } from 'node:os';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { success, error, info, warn } from '../lib/output.js';\nimport { isJsonMode, jsonOutput } from '../lib/globals.js';\nimport { exchangeApiKey } from '../lib/api-client.js';\nimport { startWatchdog } from '../lib/watchdog.js';\n\n/**\n * Detect the user's shell profile file.\n * Returns the path to the most appropriate profile file.\n */\nfunction detectShellProfile(): string {\n const shell = process.env['SHELL'] ?? '';\n const home = homedir();\n\n if (shell.includes('zsh')) {\n // Prefer .zshrc if it exists, otherwise .zprofile\n const zshrc = join(home, '.zshrc');\n if (existsSync(zshrc)) return zshrc;\n return join(home, '.zprofile');\n }\n\n if (shell.includes('fish')) {\n const fishConfig = join(home, '.config', 'fish', 'config.fish');\n return fishConfig;\n }\n\n // Default to bash\n const bashrc = join(home, '.bashrc');\n if (existsSync(bashrc)) return bashrc;\n return join(home, '.bash_profile');\n}\n\n/**\n * Build export lines for the shell profile.\n */\nfunction buildExportLines(shell: string, apiUrl: string, apiKey: string): string {\n if (shell.includes('fish')) {\n return [\n '',\n '# Augmented (agt) host configuration',\n `set -gx AGT_HOST \"${apiUrl}\"`,\n `set -gx AGT_API_KEY \"${apiKey}\"`,\n '',\n ].join('\\n');\n }\n\n return [\n '',\n '# Augmented (agt) host configuration',\n `export AGT_HOST=\"${apiUrl}\"`,\n `export AGT_API_KEY=\"${apiKey}\"`,\n '',\n ].join('\\n');\n}\n\nexport async function setupCommand(token: string): Promise<void> {\n const json = isJsonMode();\n\n // Accept both new short format (XXXX-XXXX) and legacy prov_ format\n const shortTokenPattern = /^[A-HJ-NP-Z2-9]{4}-[A-HJ-NP-Z2-9]{4}$/i;\n const legacyTokenPattern = /^prov_[a-f0-9]{64}$/i;\n if (!token || (!shortTokenPattern.test(token) && !legacyTokenPattern.test(token))) {\n if (json) {\n jsonOutput({ ok: false, error: 'Invalid provisioning token. Expected format: XXXX-XXXX or prov_<64 hex>' });\n } else {\n error('Invalid provisioning token. Expected format: XXXX-XXXX or prov_<64 hex>');\n info('Get a provisioning token from the Augmented dashboard after creating a host.');\n }\n process.exitCode = 1;\n return;\n }\n\n // Normalize: short tokens to uppercase, legacy tokens to lowercase\n const normalizedToken = shortTokenPattern.test(token) ? token.toUpperCase() : token.toLowerCase();\n\n // Step 1: Determine API URL\n // If AGT_HOST is already set, use it. Otherwise try to infer from common defaults.\n let apiUrl = process.env['AGT_HOST'];\n if (!apiUrl) {\n // Default to the production API\n apiUrl = 'https://api.augmented.team';\n if (!json) {\n info(`No AGT_HOST set — using default: ${chalk.bold(apiUrl)}`);\n }\n }\n\n // Step 2: Exchange provisioning token\n const spinner = ora({ text: 'Exchanging provisioning token\\u2026', isSilent: json });\n spinner.start();\n\n let setupResult: {\n host_name: string;\n host_id: string;\n team_slug: string | null;\n api_url: string;\n api_key: string;\n agents: string[];\n };\n\n try {\n const res = await fetch(`${apiUrl}/host/setup`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ token: normalizedToken }),\n });\n\n if (!res.ok) {\n const body = await res.json().catch(() => ({})) as Record<string, unknown>;\n throw new Error((body['error'] as string) ?? `Setup failed: HTTP ${res.status}`);\n }\n\n setupResult = await res.json() as typeof setupResult;\n spinner.succeed('Provisioning token accepted');\n } catch (err) {\n spinner.fail('Failed to exchange provisioning token');\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n return;\n }\n\n // Use the API URL returned by the server (more authoritative)\n const finalApiUrl = setupResult.api_url || apiUrl;\n\n // Set for current process so verification can run\n process.env['AGT_HOST'] = finalApiUrl;\n process.env['AGT_API_KEY'] = setupResult.api_key;\n\n // Step 3: Verify connection before writing anything to disk\n const verifySpinner = ora({ text: 'Verifying connection\\u2026', isSilent: json });\n verifySpinner.start();\n\n try {\n const exchange = await exchangeApiKey(setupResult.api_key);\n verifySpinner.succeed('Connection verified');\n\n if (!json) {\n info(`Host: ${chalk.bold(setupResult.host_name)}`);\n info(`Host ID: ${exchange.hostId}`);\n info(`Team: ${chalk.bold(exchange.teamSlug ?? setupResult.team_slug ?? 'unknown')}`);\n if (exchange.userEmail) {\n info(`User: ${chalk.bold(exchange.userEmail)}`);\n }\n }\n } catch (err) {\n verifySpinner.fail('Connection verification failed');\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n info('Connection could not be verified. No changes were written to your shell profile.');\n info('Check your network connection and try: agt whoami');\n }\n process.exitCode = 1;\n return;\n }\n\n // Step 4: Write env vars to shell profile (only after successful verification)\n const profilePath = detectShellProfile();\n const shell = process.env['SHELL'] ?? 'bash';\n\n const exportLines = buildExportLines(shell, finalApiUrl, setupResult.api_key);\n const profileDir = dirname(profilePath);\n if (!existsSync(profileDir)) {\n mkdirSync(profileDir, { recursive: true });\n }\n\n // Replace existing block if present, otherwise append\n const marker = '# Augmented (agt) host configuration';\n const current = existsSync(profilePath) ? readFileSync(profilePath, 'utf-8') : '';\n let updated: string;\n if (current.includes(marker)) {\n updated = current.replace(\n /# Augmented \\(agt\\) host configuration[\\s\\S]*?(?=\\n# |\\s*$)/m,\n exportLines.trimEnd(),\n );\n if (!json) {\n info('Replacing existing Augmented config block in shell profile.');\n }\n } else {\n updated = current + exportLines;\n }\n writeFileSync(profilePath, updated.endsWith('\\n') ? updated : `${updated}\\n`);\n\n if (!json) {\n success(`Environment variables written to ${chalk.bold(profilePath)}`);\n }\n\n // Step 5: Start manager daemon\n const managerSpinner = ora({ text: 'Starting manager daemon\\u2026', isSilent: json });\n managerSpinner.start();\n\n try {\n const configDir = join(homedir(), '.augmented');\n const { pid } = startWatchdog({ intervalMs: 10_000, configDir });\n managerSpinner.succeed(`Manager started (PID ${pid})`);\n } catch (err) {\n managerSpinner.warn('Could not start manager daemon');\n if (!json) {\n warn((err as Error).message);\n info('Start it manually with: agt manager start');\n }\n }\n\n // Step 6: Print summary\n if (json) {\n jsonOutput({\n ok: true,\n host_name: setupResult.host_name,\n host_id: setupResult.host_id,\n team_slug: setupResult.team_slug,\n api_url: finalApiUrl,\n agents: setupResult.agents,\n profile: profilePath,\n });\n } else {\n console.log();\n console.log(chalk.green.bold(' Setup complete!'));\n console.log();\n if (setupResult.agents.length > 0) {\n info(`Agents: ${setupResult.agents.map((a) => chalk.cyan(a)).join(', ')}`);\n } else {\n info('No agents assigned yet. Assign agents in the dashboard or with: agt host assign');\n }\n console.log();\n info(`Restart your shell or run: ${chalk.bold(`source ${profilePath}`)}`);\n }\n}\n","import chalk from 'chalk';\nimport ora from 'ora';\nimport { requireTeam } from '../lib/auth-guard.js';\nimport { api } from '../lib/api-client.js';\nimport { success, error, info, table } from '../lib/output.js';\nimport { isJsonMode, jsonOutput } from '../lib/globals.js';\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\ninterface KanbanItem {\n id: string;\n title: string;\n description?: string;\n priority: number;\n status: string;\n estimated_minutes?: number;\n notes?: string;\n deliverable?: string;\n result?: string;\n completed_at?: string;\n created_at: string;\n}\n\nasync function resolveAgentId(codeName: string): Promise<string | null> {\n try {\n const data = await api.get<{ agent_id: string }>(`/agents/${codeName}`);\n return data.agent_id;\n } catch {\n return null;\n }\n}\n\nfunction priorityLabel(p: number): string {\n return p === 1 ? chalk.red('HIGH') : p === 3 ? chalk.dim('LOW') : chalk.yellow('MED');\n}\n\nfunction statusLabel(s: string): string {\n const map: Record<string, string> = {\n in_progress: chalk.blue('In Progress'),\n today: chalk.green('Today'),\n backlog: chalk.dim('Backlog'),\n done: chalk.gray('Done'),\n };\n return map[s] ?? s;\n}\n\n// ---------------------------------------------------------------------------\n// agt kanban list\n// ---------------------------------------------------------------------------\n\nexport async function kanbanListCommand(\n opts: { agent: string },\n): Promise<void> {\n const teamSlug = requireTeam();\n if (!teamSlug) return;\n const json = isJsonMode();\n\n const spinner = ora({ text: 'Fetching kanban board…', isSilent: json });\n spinner.start();\n\n const agentId = await resolveAgentId(opts.agent);\n if (!agentId) {\n spinner.fail(`Agent \"${opts.agent}\" not found.`);\n process.exitCode = 1;\n return;\n }\n\n try {\n const data = await api.post<{ items: KanbanItem[] }>('/host/my-kanban', {\n agent_id: agentId,\n });\n\n spinner.stop();\n\n if (json) {\n jsonOutput({ ok: true, items: data.items });\n return;\n }\n\n if (!data.items.length) {\n info(`Board for ${opts.agent} is empty.`);\n return;\n }\n\n const rows = data.items.map((item) => [\n priorityLabel(item.priority),\n statusLabel(item.status),\n item.title.length > 50 ? item.title.slice(0, 47) + '…' : item.title,\n item.estimated_minutes ? `~${item.estimated_minutes}min` : '',\n item.id.slice(0, 8),\n ]);\n\n console.log(chalk.bold(`\\nKanban: ${opts.agent}\\n`));\n table(['Pri', 'Status', 'Title', 'Est', 'ID'], rows);\n } catch (err) {\n spinner.fail('Failed to fetch board.');\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n }\n}\n\n// ---------------------------------------------------------------------------\n// agt kanban add\n// ---------------------------------------------------------------------------\n\nexport async function kanbanAddCommand(\n title: string,\n opts: {\n agent: string;\n priority?: string;\n status?: string;\n description?: string;\n estimate?: string;\n deliverable?: string;\n },\n): Promise<void> {\n const teamSlug = requireTeam();\n if (!teamSlug) return;\n const json = isJsonMode();\n\n const agentId = await resolveAgentId(opts.agent);\n if (!agentId) {\n error(`Agent \"${opts.agent}\" not found.`);\n process.exitCode = 1;\n return;\n }\n\n try {\n const data = await api.post<{ ok: boolean; added: number }>('/host/kanban', {\n agent_id: agentId,\n add: [\n {\n title,\n description: opts.description,\n priority: opts.priority ? Number(opts.priority) : 2,\n status: opts.status ?? 'today',\n estimated_minutes: opts.estimate ? Number(opts.estimate) : undefined,\n deliverable: opts.deliverable,\n source: 'manual',\n },\n ],\n });\n\n if (json) {\n jsonOutput({ ok: true, added: data.added });\n } else {\n success(`Added \"${title}\" to ${opts.agent}'s board.`);\n }\n } catch (err) {\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n }\n}\n\n// ---------------------------------------------------------------------------\n// agt kanban move\n// ---------------------------------------------------------------------------\n\nexport async function kanbanMoveCommand(\n titleOrId: string,\n status: string,\n opts: { agent: string; notes?: string },\n): Promise<void> {\n const teamSlug = requireTeam();\n if (!teamSlug) return;\n const json = isJsonMode();\n\n const validStatuses = ['backlog', 'today', 'in_progress', 'done'];\n if (!validStatuses.includes(status)) {\n error(`Invalid status \"${status}\". Must be one of: ${validStatuses.join(', ')}`);\n process.exitCode = 1;\n return;\n }\n\n const agentId = await resolveAgentId(opts.agent);\n if (!agentId) {\n error(`Agent \"${opts.agent}\" not found.`);\n process.exitCode = 1;\n return;\n }\n\n const isUuid = /^[0-9a-f]{8}-/.test(titleOrId);\n const update: Record<string, unknown> = {\n status,\n notes: opts.notes,\n };\n if (isUuid) {\n update.id = titleOrId;\n } else {\n update.title = titleOrId;\n }\n\n try {\n const data = await api.post<{ ok: boolean; updated: number }>('/host/kanban', {\n agent_id: agentId,\n update: [update],\n });\n\n if (json) {\n jsonOutput({ ok: true, updated: data.updated });\n } else if (data.updated > 0) {\n success(`Moved \"${titleOrId}\" → ${status}.`);\n } else {\n error(`Item \"${titleOrId}\" not found.`);\n process.exitCode = 1;\n }\n } catch (err) {\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n }\n}\n\n// ---------------------------------------------------------------------------\n// agt kanban update\n// ---------------------------------------------------------------------------\n\nexport async function kanbanUpdateCommand(\n titleOrId: string,\n opts: { agent: string; notes?: string; result?: string },\n): Promise<void> {\n const teamSlug = requireTeam();\n if (!teamSlug) return;\n const json = isJsonMode();\n\n const agentId = await resolveAgentId(opts.agent);\n if (!agentId) {\n error(`Agent \"${opts.agent}\" not found.`);\n process.exitCode = 1;\n return;\n }\n\n // Fetch current item to get its status\n let board: { items: KanbanItem[] };\n try {\n board = await api.post<{ items: KanbanItem[] }>('/host/my-kanban', {\n agent_id: agentId,\n });\n } catch (err) {\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n return;\n }\n\n const isUuid = /^[0-9a-f]{8}-/.test(titleOrId);\n const match = board.items.find(\n (i) => (isUuid && i.id === titleOrId) || i.title === titleOrId,\n );\n\n if (!match) {\n if (json) {\n jsonOutput({ ok: false, error: `Item \"${titleOrId}\" not found.` });\n } else {\n error(`Item \"${titleOrId}\" not found.`);\n }\n process.exitCode = 1;\n return;\n }\n\n try {\n const data = await api.post<{ ok: boolean; updated: number }>('/host/kanban', {\n agent_id: agentId,\n update: [\n {\n id: match.id,\n status: match.status,\n notes: opts.notes,\n result: opts.result,\n },\n ],\n });\n\n if (json) {\n jsonOutput({ ok: true, updated: data.updated });\n } else {\n success(`Updated \"${match.title}\".`);\n }\n } catch (err) {\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n }\n}\n\n// ---------------------------------------------------------------------------\n// agt kanban done\n// ---------------------------------------------------------------------------\n\nexport async function kanbanDoneCommand(\n titleOrId: string,\n opts: { agent: string; result?: string; notes?: string },\n): Promise<void> {\n const teamSlug = requireTeam();\n if (!teamSlug) return;\n const json = isJsonMode();\n\n const agentId = await resolveAgentId(opts.agent);\n if (!agentId) {\n error(`Agent \"${opts.agent}\" not found.`);\n process.exitCode = 1;\n return;\n }\n\n const isUuid = /^[0-9a-f]{8}-/.test(titleOrId);\n const update: Record<string, unknown> = {\n status: 'done',\n result: opts.result,\n notes: opts.notes,\n };\n if (isUuid) {\n update.id = titleOrId;\n } else {\n update.title = titleOrId;\n }\n\n try {\n const data = await api.post<{ ok: boolean; updated: number }>('/host/kanban', {\n agent_id: agentId,\n update: [update],\n });\n\n if (json) {\n jsonOutput({ ok: true, updated: data.updated });\n } else if (data.updated > 0) {\n success(`Marked \"${titleOrId}\" as done.`);\n } else {\n error(`Item \"${titleOrId}\" not found.`);\n process.exitCode = 1;\n }\n } catch (err) {\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n }\n}\n","import type { AcpAgentAdapter } from './types.js';\n\n/**\n * Built-in ACP agent adapters.\n * Only the three agents specified in ENG-4119 scope: Claude Code, OpenClaw, Codex.\n */\nexport const ACP_AGENT_REGISTRY: readonly AcpAgentAdapter[] = [\n {\n name: 'claude',\n label: 'Claude Code',\n adapter_package: 'claude-agent-acp',\n command: 'npx',\n args: ['-y', 'claude-agent-acp'],\n type: 'npx-wrapper',\n },\n {\n name: 'openclaw',\n label: 'OpenClaw',\n command: 'openclaw',\n args: ['acp'],\n type: 'native',\n },\n {\n name: 'codex',\n label: 'Codex',\n adapter_package: 'codex-acp',\n command: 'npx',\n args: ['-y', 'codex-acp'],\n type: 'npx-wrapper',\n },\n] as const;\n\nconst agentMap = new Map<string, AcpAgentAdapter>(\n ACP_AGENT_REGISTRY.map((a) => [a.name, a]),\n);\n\nexport function getAcpAgent(name: string): AcpAgentAdapter | undefined {\n return agentMap.get(name);\n}\n\nexport function getAllAcpAgentNames(): string[] {\n return ACP_AGENT_REGISTRY.map((a) => a.name);\n}\n","import { spawn } from 'node:child_process';\nimport type {\n AcpSessionMetadata,\n AcpEvent,\n AcpPermissionMode,\n AcpAgentAdapter,\n} from './types.js';\nimport { getAcpAgent } from './agent-registry.js';\n\nexport interface AcpSpawnOptions {\n /** Agent name or custom command */\n agent: string;\n /** Working directory for the session */\n cwd: string;\n /** Named session for parallel workstreams */\n sessionName?: string;\n /** Permission mode */\n permissions?: AcpPermissionMode;\n /** Queue owner idle TTL in seconds */\n ttl?: number;\n /** Prompt execution timeout in seconds */\n timeout?: number;\n /** Auto-approve all tool permissions */\n approveAll?: boolean;\n}\n\nexport interface AcpPromptOptions {\n /** Agent name */\n agent: string;\n /** Prompt text */\n prompt: string;\n /** Working directory */\n cwd: string;\n /** Named session */\n sessionName?: string;\n /** Output format */\n format?: 'text' | 'json' | 'json-strict' | 'quiet';\n /** Don't wait for completion */\n noWait?: boolean;\n /** Timeout in seconds */\n timeout?: number;\n}\n\nexport interface AcpExecResult {\n exitCode: number;\n stdout: string;\n stderr: string;\n events: AcpEvent[];\n}\n\n/**\n * Resolves the acpx command and arguments for a given agent.\n * Falls back to raw command execution for unknown agents.\n */\nfunction resolveAgentCommand(agentName: string): { command: string; args: string[] } {\n const adapter = getAcpAgent(agentName);\n if (adapter) {\n return {\n command: 'acpx',\n args: [adapter.name],\n };\n }\n // Unknown agent — use raw command via --agent flag\n return {\n command: 'acpx',\n args: ['--agent', agentName],\n };\n}\n\n/**\n * Runs an acpx command and returns the result.\n */\nexport async function runAcpx(\n args: string[],\n options: { cwd?: string; timeout?: number } = {},\n): Promise<AcpExecResult> {\n return new Promise((resolve) => {\n const child = spawn('acpx', args, {\n cwd: options.cwd,\n stdio: ['pipe', 'pipe', 'pipe'],\n env: { ...process.env },\n });\n\n let stdout = '';\n let stderr = '';\n const events: AcpEvent[] = [];\n\n child.stdout?.on('data', (data: Buffer) => {\n const chunk = data.toString();\n stdout += chunk;\n // Parse NDJSON events if format is json\n for (const line of chunk.split('\\n').filter(Boolean)) {\n try {\n const parsed = JSON.parse(line) as AcpEvent;\n if (parsed.eventVersion === 1) {\n events.push(parsed);\n }\n } catch {\n // Not JSON — plain text output\n }\n }\n });\n\n child.stderr?.on('data', (data: Buffer) => {\n stderr += data.toString();\n });\n\n const timer = options.timeout\n ? setTimeout(() => child.kill('SIGTERM'), options.timeout * 1000)\n : undefined;\n\n child.on('close', (code) => {\n if (timer) clearTimeout(timer);\n resolve({ exitCode: code ?? 1, stdout, stderr, events });\n });\n });\n}\n\n/**\n * Spawns a new ACP session via acpx.\n */\nexport async function acpSpawnSession(opts: AcpSpawnOptions): Promise<AcpExecResult> {\n const { command: _cmd, args: agentArgs } = resolveAgentCommand(opts.agent);\n const args = [...agentArgs, 'sessions', 'ensure'];\n\n if (opts.sessionName) args.push('-s', opts.sessionName);\n if (opts.approveAll) args.unshift('--approve-all');\n if (opts.ttl !== undefined) args.unshift('--ttl', String(opts.ttl));\n\n args.unshift('--format', 'json');\n\n return runAcpx(args, { cwd: opts.cwd });\n}\n\n/**\n * Sends a prompt to an ACP session.\n */\nexport async function acpPrompt(opts: AcpPromptOptions): Promise<AcpExecResult> {\n const { command: _cmd, args: agentArgs } = resolveAgentCommand(opts.agent);\n const args = [...agentArgs, 'prompt', opts.prompt];\n\n if (opts.sessionName) args.push('-s', opts.sessionName);\n if (opts.noWait) args.push('--no-wait');\n if (opts.format) args.unshift('--format', opts.format);\n if (opts.timeout) args.unshift('--timeout', String(opts.timeout));\n\n return runAcpx(args, { cwd: opts.cwd, timeout: opts.timeout });\n}\n\n/**\n * Executes a one-shot prompt (no session reuse).\n */\nexport async function acpExec(\n agent: string,\n prompt: string,\n options: { cwd?: string; format?: string; timeout?: number } = {},\n): Promise<AcpExecResult> {\n const { command: _cmd, args: agentArgs } = resolveAgentCommand(agent);\n const args = [...agentArgs, 'exec', prompt];\n\n if (options.format) args.unshift('--format', options.format);\n if (options.timeout) args.unshift('--timeout', String(options.timeout));\n\n return runAcpx(args, { cwd: options.cwd, timeout: options.timeout });\n}\n\n/**\n * Lists active sessions for an agent.\n */\nexport async function acpListSessions(\n agent: string,\n options: { cwd?: string } = {},\n): Promise<AcpExecResult> {\n const { command: _cmd, args: agentArgs } = resolveAgentCommand(agent);\n const args = [...agentArgs, 'sessions', 'list', '--format', 'json'];\n\n return runAcpx(args, { cwd: options.cwd });\n}\n\n/**\n * Cancels the current prompt in an ACP session.\n */\nexport async function acpCancel(\n agent: string,\n options: { cwd?: string; sessionName?: string } = {},\n): Promise<AcpExecResult> {\n const { command: _cmd, args: agentArgs } = resolveAgentCommand(agent);\n const args = [...agentArgs, 'cancel'];\n\n if (options.sessionName) args.push('-s', options.sessionName);\n\n return runAcpx(args, { cwd: options.cwd });\n}\n\n/**\n * Closes (soft-close) an ACP session.\n */\nexport async function acpCloseSession(\n agent: string,\n options: { cwd?: string; sessionName?: string } = {},\n): Promise<AcpExecResult> {\n const { command: _cmd, args: agentArgs } = resolveAgentCommand(agent);\n const args = [...agentArgs, 'sessions', 'close'];\n\n if (options.sessionName) args.push(options.sessionName);\n\n return runAcpx(args, { cwd: options.cwd });\n}\n\n/**\n * Gets status of the current ACP session.\n */\nexport async function acpStatus(\n agent: string,\n options: { cwd?: string; sessionName?: string } = {},\n): Promise<AcpExecResult> {\n const { command: _cmd, args: agentArgs } = resolveAgentCommand(agent);\n const args = [...agentArgs, 'status', '--format', 'json'];\n\n if (options.sessionName) args.push('-s', options.sessionName);\n\n return runAcpx(args, { cwd: options.cwd });\n}\n","import {\n acpSpawnSession,\n acpPrompt,\n acpExec,\n acpListSessions,\n acpCancel,\n acpCloseSession,\n} from '@augmented/core/acp';\nimport { success, error, info } from '../lib/output.js';\nimport { isJsonMode, jsonOutput } from '../lib/globals.js';\n\n// ---------------------------------------------------------------------------\n// agt acpx spawn\n// ---------------------------------------------------------------------------\n\nexport async function acpxSpawnCommand(\n agent: string,\n _opts: Record<string, unknown>,\n cmd: { parent: { opts: () => Record<string, unknown> } },\n): Promise<void> {\n const parentOpts = cmd.parent.opts();\n const cwd = (parentOpts.cwd as string) ?? process.cwd();\n const sessionName = parentOpts.name as string | undefined;\n const approveAll = Boolean(parentOpts.approveAll);\n const ttl = parentOpts.ttl !== undefined ? Number(parentOpts.ttl) : undefined;\n\n info(`Spawning ACP session for \"${agent}\"...`);\n\n const result = await acpSpawnSession({\n agent,\n cwd,\n sessionName,\n approveAll,\n ttl,\n });\n\n if (result.exitCode !== 0) {\n error(`Failed to spawn session: ${result.stderr || 'unknown error'}`);\n process.exitCode = 1;\n return;\n }\n\n if (isJsonMode()) {\n process.stdout.write(result.stdout);\n } else {\n success(`ACP session spawned for \"${agent}\"`);\n if (sessionName) info(`Session name: ${sessionName}`);\n info(`Working directory: ${cwd}`);\n }\n}\n\n// ---------------------------------------------------------------------------\n// agt acpx prompt\n// ---------------------------------------------------------------------------\n\nexport async function acpxPromptCommand(\n agent: string,\n prompt: string,\n _opts: Record<string, unknown>,\n cmd: { parent: { opts: () => Record<string, unknown> } },\n): Promise<void> {\n const parentOpts = cmd.parent.opts();\n const cwd = (parentOpts.cwd as string) ?? process.cwd();\n const sessionName = parentOpts.name as string | undefined;\n const format = (parentOpts.format as string) ?? 'text';\n const noWait = Boolean(parentOpts.noWait);\n const timeout = parentOpts.timeout !== undefined ? Number(parentOpts.timeout) : undefined;\n\n if (!isJsonMode()) info(`Sending prompt to \"${agent}\"...`);\n\n const result = await acpPrompt({\n agent,\n prompt,\n cwd,\n sessionName,\n format: format as 'text' | 'json' | 'json-strict' | 'quiet',\n noWait,\n timeout,\n });\n\n process.stdout.write(result.stdout);\n if (result.stderr) process.stderr.write(result.stderr);\n process.exitCode = result.exitCode;\n}\n\n// ---------------------------------------------------------------------------\n// agt acpx exec\n// ---------------------------------------------------------------------------\n\nexport async function acpxExecCommand(\n agent: string,\n prompt: string,\n _opts: Record<string, unknown>,\n cmd: { parent: { opts: () => Record<string, unknown> } },\n): Promise<void> {\n const parentOpts = cmd.parent.opts();\n const cwd = (parentOpts.cwd as string) ?? process.cwd();\n const format = (parentOpts.format as string) ?? 'text';\n const timeout = parentOpts.timeout !== undefined ? Number(parentOpts.timeout) : undefined;\n\n if (!isJsonMode()) info(`Running one-shot exec with \"${agent}\"...`);\n\n const result = await acpExec(agent, prompt, { cwd, format, timeout });\n\n process.stdout.write(result.stdout);\n if (result.stderr) process.stderr.write(result.stderr);\n process.exitCode = result.exitCode;\n}\n\n// ---------------------------------------------------------------------------\n// agt acpx list-sessions\n// ---------------------------------------------------------------------------\n\nexport async function acpxListSessionsCommand(\n agent: string,\n _opts: Record<string, unknown>,\n cmd: { parent: { opts: () => Record<string, unknown> } },\n): Promise<void> {\n const parentOpts = cmd.parent.opts();\n const cwd = (parentOpts.cwd as string) ?? process.cwd();\n\n const result = await acpListSessions(agent, { cwd });\n\n if (isJsonMode()) {\n process.stdout.write(result.stdout);\n } else {\n if (result.exitCode !== 0) {\n error(`Failed to list sessions: ${result.stderr || 'unknown error'}`);\n process.exitCode = 1;\n return;\n }\n // Parse and display as table\n try {\n const sessions = JSON.parse(result.stdout);\n if (Array.isArray(sessions) && sessions.length > 0) {\n info(`Active sessions for \"${agent}\":`);\n process.stdout.write(result.stdout);\n } else {\n info(`No active sessions for \"${agent}\".`);\n }\n } catch {\n process.stdout.write(result.stdout);\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// agt acpx cancel\n// ---------------------------------------------------------------------------\n\nexport async function acpxCancelCommand(\n agent: string,\n _opts: Record<string, unknown>,\n cmd: { parent: { opts: () => Record<string, unknown> } },\n): Promise<void> {\n const parentOpts = cmd.parent.opts();\n const cwd = (parentOpts.cwd as string) ?? process.cwd();\n const sessionName = parentOpts.name as string | undefined;\n\n info(`Sending cancel to \"${agent}\"...`);\n\n const result = await acpCancel(agent, { cwd, sessionName });\n\n if (result.exitCode !== 0) {\n error(`Cancel failed: ${result.stderr || 'unknown error'}`);\n process.exitCode = 1;\n return;\n }\n\n success('Cancel sent (cooperative).');\n}\n\n// ---------------------------------------------------------------------------\n// agt acpx close\n// ---------------------------------------------------------------------------\n\nexport async function acpxCloseCommand(\n agent: string,\n _opts: Record<string, unknown>,\n cmd: { parent: { opts: () => Record<string, unknown> } },\n): Promise<void> {\n const parentOpts = cmd.parent.opts();\n const cwd = (parentOpts.cwd as string) ?? process.cwd();\n const sessionName = parentOpts.name as string | undefined;\n\n info(`Closing ACP session for \"${agent}\"...`);\n\n const result = await acpCloseSession(agent, { cwd, sessionName });\n\n if (result.exitCode !== 0) {\n error(`Close failed: ${result.stderr || 'unknown error'}`);\n process.exitCode = 1;\n return;\n }\n\n success('Session closed (soft-close — history retained).');\n}\n","import { execSync } from 'node:child_process';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { AGT_HOST } from '../lib/config.js';\nimport { success, error, info, warn } from '../lib/output.js';\nimport { isJsonMode, jsonOutput } from '../lib/globals.js';\n\ndeclare const __CLI_VERSION__: string;\n\nconst cliVersion = typeof __CLI_VERSION__ !== 'undefined' ? __CLI_VERSION__ : 'dev';\n\nexport interface VersionInfo {\n latest: string;\n download_url: string;\n changelog_url?: string;\n}\n\n/**\n * Fetch the latest CLI version from the API.\n * Returns null if the API is unreachable (silent fail).\n */\nexport async function fetchLatestVersion(): Promise<VersionInfo | null> {\n const host = AGT_HOST;\n if (!host) return null;\n\n try {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 5_000);\n timeout.unref();\n\n const res = await fetch(`${host}/cli/version`, {\n signal: controller.signal,\n });\n\n clearTimeout(timeout);\n\n if (!res.ok) return null;\n\n return (await res.json()) as VersionInfo;\n } catch {\n // Network error, timeout, etc. — silently fail\n return null;\n }\n}\n\n/**\n * Compare two semver strings. Returns true if remote > local.\n */\nfunction isNewerVersion(local: string, remote: string): boolean {\n if (local === 'dev') return false;\n\n const parse = (v: string) => v.replace(/^v/, '').split('.').map(Number);\n const lParts = parse(local);\n const rParts = parse(remote);\n const lMaj = lParts[0] ?? 0, lMin = lParts[1] ?? 0, lPat = lParts[2] ?? 0;\n const rMaj = rParts[0] ?? 0, rMin = rParts[1] ?? 0, rPat = rParts[2] ?? 0;\n\n if (rMaj !== lMaj) return rMaj > lMaj;\n if (rMin !== lMin) return rMin > lMin;\n return rPat > lPat;\n}\n\n/**\n * Perform the actual update by running npm install from the GitHub Packages registry.\n * Uses the API-provided version to pin the exact target.\n */\nfunction performUpdate(version: string): void {\n execSync(`npm install -g @integrity-labs/agt-cli@${version} --registry=https://npm.pkg.github.com`, {\n stdio: 'inherit',\n });\n}\n\n/**\n * `agt update` command handler.\n */\nexport async function updateCommand(): Promise<void> {\n const json = isJsonMode();\n const spinner = ora({ text: 'Checking for updates…', isSilent: json });\n spinner.start();\n\n const versionInfo = await fetchLatestVersion();\n\n if (!versionInfo) {\n spinner.stop();\n if (json) {\n jsonOutput({ ok: false, error: 'Could not reach API to check for updates' });\n } else {\n warn('Could not reach the API to check for updates. Check AGT_HOST is set and the API is reachable.');\n }\n process.exitCode = 1;\n return;\n }\n\n const updateAvailable = isNewerVersion(cliVersion, versionInfo.latest);\n\n if (!updateAvailable) {\n spinner.stop();\n if (json) {\n jsonOutput({ ok: true, current: cliVersion, latest: versionInfo.latest, update_available: false });\n } else {\n success(`You're on the latest version (${chalk.bold(cliVersion)})`);\n }\n return;\n }\n\n spinner.stop();\n\n if (!json) {\n info(`Update available: ${chalk.dim(cliVersion)} → ${chalk.bold.green(versionInfo.latest)}`);\n if (versionInfo.changelog_url) {\n info(`Changelog: ${versionInfo.changelog_url}`);\n }\n }\n\n const updateSpinner = ora({ text: 'Installing update…', isSilent: json });\n updateSpinner.start();\n\n try {\n performUpdate(versionInfo.latest);\n updateSpinner.stop();\n if (json) {\n jsonOutput({\n ok: true,\n current: cliVersion,\n latest: versionInfo.latest,\n update_available: true,\n updated: true,\n });\n } else {\n success(`Updated to ${chalk.bold(versionInfo.latest)}`);\n }\n } catch (err) {\n updateSpinner.fail('Update failed');\n if (json) {\n jsonOutput({\n ok: false,\n current: cliVersion,\n latest: versionInfo.latest,\n update_available: true,\n updated: false,\n error: (err as Error).message,\n });\n } else {\n error(`Failed to install update: ${(err as Error).message}`);\n info(`You can manually update with: npm install -g @integrity-labs/agt-cli@${versionInfo.latest} --registry=https://npm.pkg.github.com`);\n }\n process.exitCode = 1;\n }\n}\n\n/**\n * Non-blocking startup version check. Prints a one-liner if an update is available.\n * Silently does nothing on failure.\n */\nexport async function checkForUpdateOnStartup(): Promise<void> {\n try {\n const versionInfo = await fetchLatestVersion();\n if (!versionInfo) return;\n\n if (isNewerVersion(cliVersion, versionInfo.latest)) {\n console.error(\n chalk.yellow(`\\n Update available: ${cliVersion} → ${versionInfo.latest}. Run ${chalk.bold('agt update')} to install.\\n`)\n );\n }\n } catch {\n // Silent fail — never block CLI usage\n }\n}\n"],"mappings":"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","names":["join","homedir","chalk","chalk","chalk","chalk","ora","ora","chalk","chalk","ora","chalk","ora","chalk","ora","join","printDiagnostics","chalk","join","ora","chalk","ora","channels","chalk","ora","chalk","ora","checkbox","confirm","input","join","ora","agent","channels","chalk","checkbox","input","confirm","chalk","ora","confirm","ora","agent","channels","chalk","confirm","chalk","ora","select","input","writeFileSync","mkdirSync","join","chalk","select","input","ora","join","mkdirSync","writeFileSync","chalk","ora","writeFileSync","mkdirSync","join","printDiagnostics","chalk","join","ora","mkdirSync","writeFileSync","chalk","ora","join","chalk","ora","agent","chalk","ora","ora","chalk","chalk","join","readFileSync","writeFileSync","existsSync","mkdirSync","join","join","chalk","chalk","JSON5","readFileSync","existsSync","join","join","existsSync","readFileSync","JSON5","filtered","chalk","chalk","ora","chalk","ora","existsSync","readFileSync","writeFileSync","mkdirSync","join","homedir","chalk","ora","homedir","join","existsSync","chalk","ora","mkdirSync","readFileSync","writeFileSync","chalk","ora","resolveAgentId","priorityLabel","chalk","ora","resolve","agent","agent","chalk","ora","host","ora","chalk","cliVersion","join","homedir"]}
1
+ {"version":3,"sources":["../../src/bin/agt.ts","../../src/lib/globals.ts","../../src/commands/whoami.ts","../../src/lib/output.ts","../../src/commands/team.ts","../../src/lib/auth-guard.ts","../../src/commands/init.ts","../../src/commands/lint.ts","../../src/commands/channels.ts","../../src/commands/channel-slack.ts","../../src/commands/channel-beam.ts","../../src/commands/deploy.ts","../../src/commands/provision.ts","../../src/commands/drift.ts","../../../../packages/core/src/drift/live-state-reader.ts","../../src/commands/host.ts","../../src/commands/manager.ts","../../src/lib/watchdog.ts","../../src/commands/agent.ts","../../src/commands/kanban-recurring.ts","../../src/commands/setup.ts","../../src/commands/kanban.ts","../../../../packages/core/src/acp/agent-registry.ts","../../../../packages/core/src/acp/client.ts","../../src/commands/acpx.ts","../../src/commands/update.ts"],"sourcesContent":["#!/usr/bin/env node\n\n// Register framework adapters (side-effect imports — must be before any provisioning code)\nimport '@augmented/core/provisioning/frameworks/openclaw/index.js';\nimport '@augmented/core/provisioning/frameworks/nemoclaw/index.js';\nimport '@augmented/core/provisioning/frameworks/claudecode/index.js';\n\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport { Command } from 'commander';\nimport { setJsonMode } from '../lib/globals.js';\nimport { whoamiCommand } from '../commands/whoami.js';\nimport {\n teamListCommand,\n teamCreateCommand,\n teamSwitchCommand,\n} from '../commands/team.js';\nimport { initCommand } from '../commands/init.js';\nimport { lintCommand } from '../commands/lint.js';\nimport { channelsListCommand, channelsCheckCommand } from '../commands/channels.js';\nimport { channelSlackSetupCommand, channelSlackStatusCommand, channelSlackRemoveCommand } from '../commands/channel-slack.js';\nimport { channelBeamSetupCommand, channelBeamStatusCommand, channelBeamRemoveCommand } from '../commands/channel-beam.js';\nimport { deployCommand } from '../commands/deploy.js';\nimport { provisionCommand } from '../commands/provision.js';\nimport { driftCheckCommand, driftWatchCommand } from '../commands/drift.js';\nimport {\n hostListCommand,\n hostAssignCommand,\n hostUnassignCommand,\n hostAgentsCommand,\n hostRotateKeyCommand,\n hostDecommissionCommand,\n} from '../commands/host.js';\nimport {\n managerStartCommand,\n managerStopCommand,\n managerStatusCommand,\n} from '../commands/manager.js';\nimport { agentShowCommand } from '../commands/agent.js';\nimport {\n kanbanRecurringAddCommand,\n kanbanRecurringListCommand,\n kanbanRecurringDisableCommand,\n} from '../commands/kanban-recurring.js';\nimport { setupCommand } from '../commands/setup.js';\nimport {\n kanbanListCommand,\n kanbanAddCommand,\n kanbanMoveCommand,\n kanbanUpdateCommand,\n kanbanDoneCommand,\n} from '../commands/kanban.js';\nimport {\n acpxSpawnCommand,\n acpxPromptCommand,\n acpxExecCommand,\n acpxListSessionsCommand,\n acpxCancelCommand,\n acpxCloseCommand,\n} from '../commands/acpx.js';\nimport { updateCommand, checkForUpdateOnStartup } from '../commands/update.js';\n\ndeclare const __CLI_VERSION__: string;\n\nconst cliVersion = typeof __CLI_VERSION__ !== 'undefined' ? __CLI_VERSION__ : 'dev';\n\nconst program = new Command();\n\nprogram\n .name('agt')\n .description('Augmented CLI — agent provisioning and management')\n .version(cliVersion)\n .option('--json', 'Emit machine-readable JSON output (suppress spinners and colors)')\n .option('--skip-update-check', 'Skip the automatic update check on startup');\n\n// ── Global pre-action hook ──────────────────────────────────────────────────\n\nprogram.hook('preAction', (thisCommand) => {\n const root = thisCommand.optsWithGlobals();\n if (root.json) {\n setJsonMode(true);\n }\n});\n\n// ── Auth commands ──────────────────────────────────────────────────────────\n\nprogram\n .command('whoami')\n .description('Show the authenticated host, team, and user from AGT_API_KEY')\n .action(whoamiCommand);\n\nprogram\n .command('setup <token>')\n .description('One-command host setup: exchange provisioning token, configure env vars, verify, and start manager')\n .action(setupCommand);\n\n// ── Team commands ─────────────────────────────────────────────────────\n\nconst team = program\n .command('team')\n .description('Manage teams');\n\nteam\n .command('list')\n .description('List teams you belong to')\n .action(teamListCommand);\n\nteam\n .command('create <name>')\n .description('Create a new team and set it as active')\n .action(teamCreateCommand);\n\nteam\n .command('switch <slug>')\n .description('Switch the active team')\n .action(teamSwitchCommand);\n\n// ── Agent commands ─────────────────────────────────────────────────────────\n\nprogram\n .command('init')\n .description('Create a new agent (interactive wizard, or non-interactive with --name)')\n .option('--name <display-name>', 'Agent display name (triggers non-interactive mode)')\n .option('--code-name <code-name>', 'Agent code name (kebab-case, derived from --name if omitted)')\n .option('--description <text>', 'Short agent description')\n .option('--env <environment>', 'Environment: dev | stage | prod', 'dev')\n .option('--risk-tier <tier>', 'Risk tier: Low | Medium | High', 'Low')\n .option('--budget-type <type>', 'Budget type: tokens | dollars | both', 'tokens')\n .option('--budget-tokens <number>', 'Token budget limit', '10000')\n .option('--budget-dollars <number>', 'Dollar budget limit', '10')\n .option('--budget-window <window>', 'Budget window: daily | weekly | monthly', 'daily')\n .option('--budget-enforcement <mode>', 'Budget enforcement: block | throttle | alert | degrade', 'block')\n .option('--channels <list>', 'Comma-separated channel IDs')\n .option('--logging <mode>', 'Logging mode: redacted | hash-only | full-local', 'redacted')\n .action(initCommand);\n\nprogram\n .command('lint')\n .argument('[path]', 'Path to agent directory (default: all agents in .augmented/)')\n .description('Lint CHARTER.md and TOOLS.md files')\n .action(lintCommand);\n\n// ── Channel commands ───────────────────────────────────────────────────────\n\nconst channels = program\n .command('channels')\n .description('Manage and inspect channel configuration');\n\nchannels\n .command('list')\n .description('Print the full channel registry with security metadata')\n .action(channelsListCommand);\n\nchannels\n .command('check <agent>')\n .description('Resolve the effective channel list for an agent')\n .action(channelsCheckCommand);\n\nconst slack = channels\n .command('slack')\n .description('Manage Slack channel configuration');\n\nslack\n .command('setup <agent-code-name>')\n .description('Configure Slack bot scopes, generate manifest, and store credentials')\n .option('--preset <preset>', 'Scope preset: minimal | standard | full')\n .option('--scopes <scopes>', 'Comma-separated list of Slack bot scopes')\n .option('--skip-create', 'Skip Slack CLI app creation step')\n .option('--bot-token <token>', 'Slack bot token (xoxb-…)')\n .option('--signing-secret <secret>', 'Slack signing secret')\n .option('--config-token <token>', 'Slack app configuration token (xoxe-…) for API-based app creation')\n .action(channelSlackSetupCommand);\n\nslack\n .command('status <agent-code-name>')\n .description('Show current Slack configuration for an agent')\n .action(channelSlackStatusCommand);\n\nslack\n .command('remove <agent-code-name>')\n .description('Remove Slack bot configuration for an agent')\n .action(channelSlackRemoveCommand);\n\nconst beam = channels\n .command('beam')\n .description('Manage Beam Protocol channel configuration');\n\nbeam\n .command('setup <agent-code-name>')\n .description('Generate Beam identity, register in directory, and configure channel')\n .option('--directory-url <url>', 'Beam directory URL (default: hosted)')\n .option('--skip-register', 'Skip directory registration')\n .option('--auto-publish', 'Auto-publish capabilities from TOOLS.md', true)\n .action(channelBeamSetupCommand);\n\nbeam\n .command('status <agent-code-name>')\n .description('Show Beam configuration and directory status')\n .action(channelBeamStatusCommand);\n\nbeam\n .command('remove <agent-code-name>')\n .description('Remove Beam identity for an agent')\n .action(channelBeamRemoveCommand);\n\n// ── Provision commands ─────────────────────────────────────────────────────\n\nprogram\n .command('provision <code-name>')\n .description('Provision an agent: build OpenClaw config, generate files, store snapshot')\n .option('--target <target>', 'Deployment target', 'local_docker')\n .option('--output <dir>', 'Output directory for generated files')\n .option('--dry-run', 'Print what would be generated without writing files')\n .action(provisionCommand);\n\n// ── Deploy commands ────────────────────────────────────────────────────────\n\nprogram\n .command('deploy')\n .description('Generate deployment config from a template')\n .option('--template <id>', 'Template ID (triggers non-interactive mode)')\n .option('--port <number>', 'Base port for gateway', '9000')\n .action(deployCommand);\n\n// ── Drift commands ────────────────────────────────────────────────────────\n\nconst drift = program\n .command('drift')\n .description('Detect configuration drift from provisioned state');\n\ndrift\n .command('check <code-name>')\n .description('Compare live state against provisioned snapshot')\n .option('--json', 'Output as JSON')\n .option('--audit', 'Run openclaw security audit')\n .option('--config <path>', 'Path to openclaw.json')\n .action(driftCheckCommand);\n\ndrift\n .command('watch <code-name>')\n .description('Continuously monitor for drift')\n .option('--interval <seconds>', 'Check interval in seconds', '60')\n .option('--webhook <url>', 'POST webhook URL on new findings')\n .option('--json', 'Output as JSON')\n .option('--config <path>', 'Path to openclaw.json')\n .action(driftWatchCommand);\n\n// ── Host commands ─────────────────────────────────────────────────────────\n\nconst host = program\n .command('host')\n .description('Manage hosts (OpenClaw servers/gateways) and their API keys');\n\nhost\n .command('list')\n .description('List hosts in the active team')\n .action(hostListCommand);\n\nhost\n .command('assign <host-name> <agent-code-names...>')\n .description('Assign agents to a host')\n .option('--force', 'Reassign agents already assigned to another host')\n .action(hostAssignCommand);\n\nhost\n .command('unassign <host-name> <agent-code-names...>')\n .description('Unassign agents from a host')\n .action(hostUnassignCommand);\n\nhost\n .command('agents [host-name]')\n .description('List agents assigned to a host (omit name to auto-resolve from AGT_API_KEY)')\n .action(hostAgentsCommand);\n\nhost\n .command('rotate-key <host-name>')\n .description('Rotate the API key for a host (revokes the old key)')\n .action(hostRotateKeyCommand);\n\nhost\n .command('decommission <host-name>')\n .description('Decommission a host (revokes key, marks inactive)')\n .action(hostDecommissionCommand);\n\n// ── Manager commands ──────────────────────────────────────────────────────\n\nconst manager = program\n .command('manager')\n .description('Host config sync daemon — keeps local agent files in sync with API');\n\nmanager\n .command('start')\n .description('Start the manager daemon (polls API for config changes and detects local drift)')\n .option('--interval <seconds>', 'Poll interval in seconds (min 5)', '10')\n .option('--config-dir <dir>', 'Config directory for agent files', join(homedir(), '.augmented'))\n .action(managerStartCommand);\n\nmanager\n .command('stop')\n .description('Stop the running manager daemon')\n .action(managerStopCommand);\n\nmanager\n .command('status')\n .description('Show the current manager daemon status and discovered agents')\n .action(managerStatusCommand);\n\n// ── Agent inspect commands ────────────────────────────────────────────────\n\nconst agent = program\n .command('agent')\n .description('Inspect and manage agents');\n\nagent\n .command('show <code-name>')\n .description(\"Display an agent's provisioned OpenClaw configuration\")\n .option('--config-dir <dir>', 'Config directory', join(homedir(), '.augmented'))\n .option('--all-channels', 'Show all channels (including disabled)')\n .action(agentShowCommand);\n\n// ── Kanban commands ──────────────────────────────────────────────────────\n\nconst kanban = program\n .command('kanban')\n .description('Manage agent kanban boards');\n\nkanban\n .command('list')\n .description('List kanban board items for an agent')\n .requiredOption('--agent <code-name>', 'Agent code name')\n .action(kanbanListCommand);\n\nkanban\n .command('add <title>')\n .description('Add a new item to an agent kanban board')\n .requiredOption('--agent <code-name>', 'Agent code name')\n .option('--priority <1|2|3>', 'Priority: 1=high, 2=medium, 3=low', '2')\n .option('--status <status>', 'Initial status: backlog | today | in_progress', 'today')\n .option('--description <text>', 'Item description')\n .option('--estimate <minutes>', 'Estimated time in minutes')\n .option('--deliverable <text>', 'Expected output/deliverable')\n .action(kanbanAddCommand);\n\nkanban\n .command('move <title-or-id> <status>')\n .description('Move a kanban item to a different status')\n .requiredOption('--agent <code-name>', 'Agent code name')\n .option('--notes <text>', 'Progress notes')\n .action(kanbanMoveCommand);\n\nkanban\n .command('update <title-or-id>')\n .description('Update notes or result on a kanban item')\n .requiredOption('--agent <code-name>', 'Agent code name')\n .option('--notes <text>', 'Progress notes')\n .option('--result <text>', 'Result/output produced')\n .action(kanbanUpdateCommand);\n\nkanban\n .command('done <title-or-id>')\n .description('Mark a kanban item as done')\n .requiredOption('--agent <code-name>', 'Agent code name')\n .option('--result <text>', 'What was produced/delivered')\n .option('--notes <text>', 'Completion notes')\n .action(kanbanDoneCommand);\n\nconst recurring = kanban\n .command('recurring')\n .description('Manage recurring kanban tasks');\n\nrecurring\n .command('add <title>')\n .description('Create a recurring kanban task')\n .requiredOption('--agent <code-name>', 'Agent code name')\n .requiredOption('--every <schedule>', 'Schedule: \"every Monday at 9am\", \"daily at 8:30am\", \"every 2 hours\", or cron')\n .option('--priority <1|2|3>', 'Priority: 1=high, 2=medium, 3=low', '2')\n .option('--description <text>', 'Task description')\n .option('--estimate <minutes>', 'Estimated time in minutes')\n .option('--deliverable <text>', 'Expected output/deliverable')\n .option('--timezone <tz>', 'Timezone (default: UTC)')\n .action(kanbanRecurringAddCommand);\n\nrecurring\n .command('list')\n .description('List recurring kanban templates for an agent')\n .requiredOption('--agent <code-name>', 'Agent code name')\n .action(kanbanRecurringListCommand);\n\nrecurring\n .command('disable <title-or-id>')\n .description('Disable a recurring kanban template')\n .requiredOption('--agent <code-name>', 'Agent code name')\n .action(kanbanRecurringDisableCommand);\n\n// ── ACPX commands ────────────────────────────────────────────────────────\n\nconst acpx = program\n .command('acpx')\n .description('Agent Client Protocol (ACP) session management via acpx')\n .option('--cwd <path>', 'Working directory for session routing')\n .option('-s, --name <name>', 'Named session for parallel workstreams')\n .option('--approve-all', 'Auto-approve all agent tool permissions')\n .option('--format <type>', 'Output format: text | json | json-strict | quiet', 'text')\n .option('--ttl <seconds>', 'Queue owner idle TTL in seconds (0 = indefinite)')\n .option('--timeout <seconds>', 'Prompt execution timeout')\n .option('--no-wait', 'Submit prompt without waiting for completion');\n\nacpx\n .command('spawn <agent>')\n .description('Spawn or ensure an ACP session for an agent (claude, codex, openclaw)')\n .action(acpxSpawnCommand);\n\nacpx\n .command('prompt <agent> <prompt>')\n .description('Send a prompt to an ACP session')\n .action(acpxPromptCommand);\n\nacpx\n .command('exec <agent> <prompt>')\n .description('One-shot execution (no session reuse)')\n .action(acpxExecCommand);\n\nacpx\n .command('list-sessions <agent>')\n .description('List active ACP sessions for an agent')\n .action(acpxListSessionsCommand);\n\nacpx\n .command('cancel <agent>')\n .description('Send cooperative cancel to the running ACP session')\n .action(acpxCancelCommand);\n\nacpx\n .command('close <agent>')\n .description('Soft-close an ACP session (preserves history)')\n .action(acpxCloseCommand);\n\n// ── Update command ───────────────────────────────────────────────────────\n\nprogram\n .command('update')\n .description('Check for and install CLI updates')\n .action(updateCommand);\n\n// ── Parse & run ────────────────────────────────────────────────────────────\n\n// Non-blocking startup update check (fire-and-forget, resolves after parse)\nconst skipUpdateCheck =\n process.argv.includes('--skip-update-check') ||\n process.argv.includes('--json') ||\n process.argv[2] === 'update';\n\nif (!skipUpdateCheck) {\n // Fire the check but don't await — it prints to stderr if an update is found\n checkForUpdateOnStartup().catch(() => {});\n}\n\nprogram.parse();\n","import chalk from 'chalk';\n\nlet _jsonMode = false;\n\nexport function setJsonMode(enabled: boolean): void {\n _jsonMode = enabled;\n if (enabled) {\n chalk.level = 0;\n }\n}\n\nexport function isJsonMode(): boolean {\n return _jsonMode;\n}\n\n/**\n * Emit a JSON object to stdout and exit cleanly.\n * In JSON mode, this is the only output function that should be used.\n */\nexport function jsonOutput(data: Record<string, unknown>): void {\n console.log(JSON.stringify(data, null, 2));\n}\n","import chalk from 'chalk';\nimport ora from 'ora';\nimport { getApiKey, AGT_HOST } from '../lib/config.js';\nimport { exchangeApiKey } from '../lib/api-client.js';\nimport { success, error, info } from '../lib/output.js';\nimport { isJsonMode, jsonOutput } from '../lib/globals.js';\n\nexport async function whoamiCommand(): Promise<void> {\n const json = isJsonMode();\n const apiKey = getApiKey();\n\n if (!apiKey) {\n if (json) {\n jsonOutput({ ok: false, error: 'AGT_API_KEY is not set' });\n } else {\n error('AGT_API_KEY is not set. Export it with your host API key (tlk_...)');\n }\n process.exitCode = 1;\n return;\n }\n\n const spinner = ora({ text: 'Exchanging API key\\u2026', isSilent: json });\n spinner.start();\n\n try {\n const exchange = await exchangeApiKey(apiKey);\n spinner.stop();\n\n if (json) {\n jsonOutput({\n ok: true,\n api_key_prefix: apiKey.slice(0, 8) + '****',\n host: AGT_HOST ?? null,\n host_id: exchange.hostId,\n team: exchange.teamSlug,\n team_id: exchange.teamId,\n email: exchange.userEmail,\n });\n return;\n }\n\n success('Authenticated via API key');\n info(`API Key: ${chalk.bold(apiKey.slice(0, 8) + '****')}`);\n info(`Host: ${chalk.bold(AGT_HOST ?? 'not set')}`);\n info(`Host ID: ${exchange.hostId}`);\n info(`Team: ${chalk.bold(exchange.teamSlug ?? exchange.teamId)}`);\n info(`User: ${chalk.bold(exchange.userEmail ?? 'unknown')}`);\n } catch (err) {\n spinner.fail('Failed to exchange API key.');\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n }\n}\n","import chalk from 'chalk';\nimport Table from 'cli-table3';\n\nexport function success(msg: string): void {\n console.log(chalk.green(`\\u2714 ${msg}`));\n}\n\nexport function error(msg: string): void {\n console.error(chalk.red(`\\u2718 ${msg}`));\n}\n\nexport function warn(msg: string): void {\n console.warn(chalk.yellow(`\\u26A0 ${msg}`));\n}\n\nexport function info(msg: string): void {\n console.log(chalk.cyan(`\\u2139 ${msg}`));\n}\n\n/**\n * Print a formatted table to stdout.\n *\n * @param headers - Column header labels\n * @param rows - Array of row arrays (one value per column)\n */\nexport function table(headers: string[], rows: string[][]): void {\n const t = new Table({\n head: headers.map((h) => chalk.bold.cyan(h)),\n style: { head: [], border: [] },\n });\n\n for (const row of rows) {\n t.push(row);\n }\n\n console.log(t.toString());\n}\n","import chalk from 'chalk';\nimport ora from 'ora';\nimport { setActiveTeam, getActiveTeam } from '../lib/config.js';\nimport { api } from '../lib/api-client.js';\nimport { requireAuth } from '../lib/auth-guard.js';\nimport { success, error, info, table } from '../lib/output.js';\nimport { isJsonMode, jsonOutput } from '../lib/globals.js';\n\n// ---------------------------------------------------------------------------\n// Subcommands\n// ---------------------------------------------------------------------------\n\n/**\n * `agt team list`\n * Fetch teams where the current user is a member and display as a table.\n */\nexport async function teamListCommand(): Promise<void> {\n if (!requireAuth()) return;\n\n const json = isJsonMode();\n const spinner = ora({ text: 'Fetching teams\\u2026', isSilent: json });\n spinner.start();\n\n try {\n const data = await api.get<{\n teams: Array<{\n id: string;\n name: string;\n slug: string;\n plan: string;\n role: string;\n created_at: string;\n }>;\n }>('/teams');\n\n spinner.stop();\n\n if (!data.teams || data.teams.length === 0) {\n if (json) {\n jsonOutput({ ok: true, teams: [] });\n } else {\n info('You are not a member of any teams. Create one with `agt team create <name>`.');\n }\n return;\n }\n\n const activeSlug = getActiveTeam();\n\n if (json) {\n const teams = data.teams.map((ws) => ({\n name: ws.name,\n slug: ws.slug,\n role: ws.role,\n active: ws.slug === activeSlug,\n }));\n jsonOutput({ ok: true, teams });\n return;\n }\n\n const rows = data.teams.map((ws) => {\n const active = ws.slug === activeSlug ? chalk.green('*') : '';\n return [active, ws.name, ws.slug, ws.role];\n });\n\n table(['', 'Name', 'Slug', 'Role'], rows);\n } catch (err) {\n spinner.fail('Failed to fetch teams.');\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n }\n}\n\n/**\n * `agt team create <name>`\n * Create a new team, add the creator as owner, and set it as active.\n */\nexport async function teamCreateCommand(name: string): Promise<void> {\n if (!requireAuth()) return;\n\n const json = isJsonMode();\n const slug = name\n .toLowerCase()\n .trim()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '');\n\n if (!slug) {\n if (json) {\n jsonOutput({ ok: false, error: 'Invalid team name' });\n } else {\n error('Invalid team name. It must contain at least one alphanumeric character.');\n }\n process.exitCode = 1;\n return;\n }\n\n const spinner = ora({ text: `Creating team \"${name}\" (${slug})\\u2026`, isSilent: json });\n spinner.start();\n\n try {\n const data = await api.post<{\n team: { id: string; name: string; slug: string; plan: string; role: string };\n }>('/teams', { name, slug });\n\n // Set as active\n setActiveTeam(data.team.slug);\n\n spinner.succeed(`Team \"${chalk.bold(name)}\" created.`);\n\n if (json) {\n jsonOutput({ ok: true, name, slug: data.team.slug, role: data.team.role });\n return;\n }\n\n info(`Slug: ${chalk.bold(data.team.slug)}`);\n success(`Active team set to ${chalk.bold(data.team.slug)}.`);\n } catch (err) {\n spinner.fail('Failed to create team.');\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n }\n}\n\n/**\n * `agt team switch <slug>`\n * Verify the user is a member of the team and set it as active.\n */\nexport async function teamSwitchCommand(slug: string): Promise<void> {\n if (!requireAuth()) return;\n\n const json = isJsonMode();\n const spinner = ora({ text: `Switching to team \"${slug}\"\\u2026`, isSilent: json });\n spinner.start();\n\n try {\n await api.get(`/teams/${encodeURIComponent(slug)}`);\n\n setActiveTeam(slug);\n spinner.succeed(`Active team set to ${chalk.bold(slug)}.`);\n\n if (json) {\n jsonOutput({ ok: true, team: slug });\n }\n } catch (err) {\n spinner.fail(`Could not switch to team \"${slug}\".`);\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n }\n}\n","import { getApiKey } from './config.js';\nimport { error } from './output.js';\n\n/**\n * Guard: checks that AGT_API_KEY is set.\n * Returns false (and prints an error) if not.\n */\nexport function requireAuth(): boolean {\n const key = getApiKey();\n if (!key) {\n error('AGT_API_KEY is not set. Export it with your host API key (tlk_...)');\n process.exitCode = 1;\n return false;\n }\n return true;\n}\n\n/**\n * Guard: checks that AGT_API_KEY is set.\n * Team auto-resolves from the API key exchange.\n * Returns a truthy string on success, or null on failure.\n */\nexport function requireTeam(): string | null {\n if (!requireAuth()) return null;\n return 'auto'; // team resolves from exchange\n}\n","import chalk from 'chalk';\nimport ora from 'ora';\nimport { input, select, checkbox, confirm } from '@inquirer/prompts';\nimport { randomUUID } from 'node:crypto';\nimport { mkdirSync, writeFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport {\n generateCharterMd,\n generateToolsMd,\n lintAll,\n getAllChannelIds,\n type CharterGenerationInput,\n type ToolsGenerationInput,\n type ChannelId,\n type LintDiagnostic,\n} from '@augmented/core';\nimport { requireTeam } from '../lib/auth-guard.js';\nimport { api } from '../lib/api-client.js';\nimport { success, error, warn, info } from '../lib/output.js';\nimport { isJsonMode, jsonOutput } from '../lib/globals.js';\n\nfunction toSlug(name: string): string {\n return name\n .toLowerCase()\n .trim()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '');\n}\n\nfunction printDiagnostics(diagnostics: LintDiagnostic[]): void {\n for (const d of diagnostics) {\n const prefix = d.severity === 'error' ? chalk.red('ERR') : chalk.yellow('WARN');\n const path = d.path ? chalk.dim(` (${d.path})`) : '';\n console.log(` ${prefix} [${d.code}] ${d.message}${path}`);\n }\n}\n\n/** Options passed from Commander flags. */\ninterface InitOptions {\n name?: string;\n codeName?: string;\n description?: string;\n env?: string;\n riskTier?: string;\n budgetType?: string;\n budgetTokens?: string;\n budgetDollars?: string;\n budgetWindow?: string;\n budgetEnforcement?: string;\n channels?: string;\n logging?: string;\n}\n\n/**\n * `agt init`\n * Interactive wizard to create a new agent, generate CHARTER.md + TOOLS.md,\n * register via the API, and write files to `.augmented/<code_name>/`.\n */\nexport async function initCommand(opts: InitOptions): Promise<void> {\n const teamSlug = requireTeam();\n if (!teamSlug) return;\n\n const nonInteractive = !!opts.name;\n const json = isJsonMode();\n\n let displayName: string;\n let codeName: string;\n let description: string;\n let environment: 'dev' | 'stage' | 'prod';\n let riskTier: 'Low' | 'Medium' | 'High';\n let budgetType: 'tokens' | 'dollars' | 'both';\n let budgetLimitTokens: number | undefined;\n let budgetLimitDollars: number | undefined;\n let budgetLimit: number;\n let budgetWindow: 'daily' | 'weekly' | 'monthly';\n let budgetEnforcement: 'alert' | 'throttle' | 'block' | 'degrade';\n let selectedChannels: ChannelId[];\n let loggingMode: 'hash-only' | 'redacted' | 'full-local';\n\n if (nonInteractive) {\n displayName = opts.name!;\n codeName = opts.codeName ?? toSlug(displayName);\n description = opts.description ?? `${displayName} agent`;\n environment = (opts.env ?? 'dev') as 'dev' | 'stage' | 'prod';\n riskTier = (opts.riskTier ?? 'Low') as 'Low' | 'Medium' | 'High';\n budgetType = (opts.budgetType ?? 'tokens') as 'tokens' | 'dollars' | 'both';\n budgetLimitTokens = (budgetType === 'tokens' || budgetType === 'both')\n ? Number(opts.budgetTokens ?? '10000')\n : undefined;\n budgetLimitDollars = (budgetType === 'dollars' || budgetType === 'both')\n ? Number(opts.budgetDollars ?? '10')\n : undefined;\n budgetLimit = budgetLimitTokens ?? budgetLimitDollars ?? 10000;\n budgetWindow = (opts.budgetWindow ?? 'daily') as 'daily' | 'weekly' | 'monthly';\n budgetEnforcement = (opts.budgetEnforcement ?? 'block') as 'alert' | 'throttle' | 'block' | 'degrade';\n selectedChannels = opts.channels\n ? opts.channels.split(',').map((c) => c.trim()) as ChannelId[]\n : [];\n loggingMode = (opts.logging ?? 'redacted') as 'hash-only' | 'redacted' | 'full-local';\n } else {\n console.log(chalk.bold('\\nAugmented — Agent Init Wizard\\n'));\n\n displayName = await input({\n message: 'Agent display name:',\n validate: (v) => v.trim().length > 0 || 'Name is required',\n });\n\n const suggestedSlug = toSlug(displayName);\n codeName = await input({\n message: 'Code name (kebab-case):',\n default: suggestedSlug,\n validate: (v) => /^[a-z0-9][a-z0-9-]*[a-z0-9]$|^[a-z0-9]$/.test(v) || 'Must be lowercase alphanumeric with hyphens',\n });\n\n description = await input({\n message: 'Short description:',\n default: `${displayName} agent`,\n });\n\n environment = await select({\n message: 'Environment:',\n choices: [\n { value: 'dev', name: 'dev' },\n { value: 'stage', name: 'stage' },\n { value: 'prod', name: 'prod' },\n ],\n }) as 'dev' | 'stage' | 'prod';\n\n riskTier = await select({\n message: 'Risk tier:',\n choices: [\n { value: 'Low', name: 'Low — read-only tools, no PII' },\n { value: 'Medium', name: 'Medium — write access, limited scope' },\n { value: 'High', name: 'High — broad access, PII, external comms' },\n ],\n }) as 'Low' | 'Medium' | 'High';\n\n budgetType = await select({\n message: 'Budget type:',\n choices: [\n { value: 'tokens', name: 'Tokens' },\n { value: 'dollars', name: 'Dollars' },\n { value: 'both', name: 'Both' },\n ],\n }) as 'tokens' | 'dollars' | 'both';\n\n budgetLimit = 10000;\n budgetLimitTokens = undefined;\n budgetLimitDollars = undefined;\n\n if (budgetType === 'tokens' || budgetType === 'both') {\n const val = await input({\n message: 'Token budget limit:',\n default: '10000',\n validate: (v) => !isNaN(Number(v)) && Number(v) > 0 || 'Must be a positive number',\n });\n budgetLimitTokens = Number(val);\n budgetLimit = budgetLimitTokens;\n }\n\n if (budgetType === 'dollars' || budgetType === 'both') {\n const val = await input({\n message: 'Dollar budget limit:',\n default: '10',\n validate: (v) => !isNaN(Number(v)) && Number(v) > 0 || 'Must be a positive number',\n });\n budgetLimitDollars = Number(val);\n if (budgetType === 'dollars') budgetLimit = budgetLimitDollars;\n }\n\n budgetWindow = await select({\n message: 'Budget window:',\n choices: [\n { value: 'daily', name: 'Daily' },\n { value: 'weekly', name: 'Weekly' },\n { value: 'monthly', name: 'Monthly' },\n ],\n }) as 'daily' | 'weekly' | 'monthly';\n\n budgetEnforcement = await select({\n message: 'Budget enforcement:',\n choices: [\n { value: 'block', name: 'Block — hard stop when limit reached' },\n { value: 'throttle', name: 'Throttle — slow down near limit' },\n { value: 'alert', name: 'Alert — warn but do not stop' },\n { value: 'degrade', name: 'Degrade — switch to cheaper model' },\n ],\n }) as 'alert' | 'throttle' | 'block' | 'degrade';\n\n const allChannels = getAllChannelIds();\n selectedChannels = await checkbox({\n message: 'Select allowed channels:',\n choices: allChannels.map((c) => ({ value: c, name: c })),\n }) as ChannelId[];\n\n loggingMode = await select({\n message: 'Logging mode:',\n choices: [\n { value: 'redacted', name: 'Redacted — PII stripped' },\n { value: 'hash-only', name: 'Hash-only — content is hashed' },\n { value: 'full-local', name: 'Full local — plain text (dev only)' },\n ],\n }) as 'hash-only' | 'redacted' | 'full-local';\n }\n\n // ── Resolve user info via API ─────────────────────────────────────────\n\n const spinner = ora({ text: 'Creating agent…', isSilent: json });\n spinner.start();\n\n let userEmail: string;\n let userId: string;\n try {\n const me = await api.get<{ id: string; email: string | null }>('/auth/me');\n userId = me.id;\n userEmail = me.email ?? me.id;\n } catch (err) {\n spinner.fail('Could not determine current user.');\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n return;\n }\n\n const agentId = randomUUID();\n\n // ── Generate CHARTER.md + TOOLS.md ─────────────────────────────────────\n\n const charterInput: CharterGenerationInput = {\n agent_id: agentId,\n code_name: codeName,\n display_name: displayName,\n environment,\n owner: {\n id: userId,\n name: userEmail,\n email: userEmail,\n },\n risk_tier: riskTier,\n logging_mode: loggingMode,\n description,\n };\n\n const toolsInput: ToolsGenerationInput = {\n agent_id: agentId,\n code_name: codeName,\n environment,\n owner: userEmail,\n display_name: displayName,\n logging_redaction: loggingMode,\n };\n\n const charterMd = generateCharterMd(charterInput);\n const toolsMd = generateToolsMd(toolsInput);\n\n // ── Lint ────────────────────────────────────────────────────────────────\n\n const lintResult = lintAll(charterMd, toolsMd);\n\n // ── Register via API ───────────────────────────────────────────────────\n\n try {\n await api.post('/agents', {\n code_name: codeName,\n display_name: displayName,\n description,\n environment,\n risk_tier: riskTier,\n channels: selectedChannels,\n charter_content: charterMd,\n charter_version: '0.1',\n tools_content: toolsMd,\n tools_version: '0.1',\n });\n } catch (err) {\n spinner.fail('Failed to register agent.');\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n return;\n }\n\n // ── Write files to .augmented/<code_name>/ ─────────────────────────────\n\n const agentDir = join(process.cwd(), '.augmented', codeName);\n mkdirSync(agentDir, { recursive: true });\n writeFileSync(join(agentDir, 'CHARTER.md'), charterMd);\n writeFileSync(join(agentDir, 'TOOLS.md'), toolsMd);\n\n spinner.succeed(`Agent \"${chalk.bold(displayName)}\" created.`);\n\n // ── Output ─────────────────────────────────────────────────────────────\n\n if (json) {\n jsonOutput({\n ok: true,\n agent_id: agentId,\n code_name: codeName,\n display_name: displayName,\n environment,\n risk_tier: riskTier,\n channels: selectedChannels,\n directory: agentDir,\n lint: {\n ok: lintResult.ok,\n errors: lintResult.errors.length,\n warnings: lintResult.warnings.length,\n diagnostics: [...lintResult.errors, ...lintResult.warnings],\n },\n });\n return;\n }\n\n console.log();\n info(`Agent ID: ${agentId}`);\n info(`Code Name: ${codeName}`);\n info(`Environment: ${environment}`);\n info(`Risk Tier: ${riskTier}`);\n info(`Channels: ${selectedChannels.length > 0 ? selectedChannels.join(', ') : 'none'}`);\n info(`Files: ${agentDir}/CHARTER.md, TOOLS.md`);\n console.log();\n\n if (lintResult.ok && lintResult.warnings.length === 0) {\n success('Lint passed — no errors or warnings.');\n } else {\n if (lintResult.errors.length > 0) {\n error(`Lint: ${lintResult.errors.length} error(s)`);\n printDiagnostics(lintResult.errors);\n }\n if (lintResult.warnings.length > 0) {\n warn(`Lint: ${lintResult.warnings.length} warning(s)`);\n printDiagnostics(lintResult.warnings);\n }\n }\n\n console.log();\n info(`Next steps:`);\n info(` 1. Edit ${chalk.bold('.augmented/' + codeName + '/CHARTER.md')} to refine the agent charter`);\n info(` 2. Edit ${chalk.bold('.augmented/' + codeName + '/TOOLS.md')} to add tools`);\n info(` 3. Run ${chalk.bold('agt lint')} to validate`);\n info(` 4. Run ${chalk.bold('agt deploy')} to generate deployment config`);\n}\n","import chalk from 'chalk';\nimport ora from 'ora';\nimport { readFileSync, existsSync } from 'node:fs';\nimport { join, resolve } from 'node:path';\nimport {\n lintCharter,\n lintTools,\n lintAll,\n type LintDiagnostic,\n type LintResult,\n type OrgChannelPolicy,\n type ChannelId,\n} from '@augmented/core';\nimport { requireTeam } from '../lib/auth-guard.js';\nimport { api } from '../lib/api-client.js';\nimport { success, error, warn, info } from '../lib/output.js';\nimport { isJsonMode, jsonOutput } from '../lib/globals.js';\n\nfunction printDiagnostics(diagnostics: LintDiagnostic[]): void {\n for (const d of diagnostics) {\n const prefix = d.severity === 'error' ? chalk.red('ERR') : chalk.yellow('WARN');\n const file = chalk.dim(`[${d.file}]`);\n const path = d.path ? chalk.dim(` (${d.path})`) : '';\n console.log(` ${prefix} ${file} ${d.code}: ${d.message}${path}`);\n }\n}\n\nfunction printResult(label: string, result: LintResult): void {\n if (result.ok && result.warnings.length === 0) {\n success(`${label}: passed`);\n return;\n }\n if (result.errors.length > 0) {\n error(`${label}: ${result.errors.length} error(s)`);\n printDiagnostics(result.errors);\n }\n if (result.warnings.length > 0) {\n warn(`${label}: ${result.warnings.length} warning(s)`);\n printDiagnostics(result.warnings);\n }\n}\n\n/**\n * `agt lint [path]`\n */\nexport async function lintCommand(path?: string): Promise<void> {\n const json = isJsonMode();\n\n const dirs: { name: string; dir: string }[] = [];\n\n if (path) {\n const resolved = resolve(path);\n if (!existsSync(resolved)) {\n if (json) {\n jsonOutput({ ok: false, error: `Path not found: ${resolved}` });\n } else {\n error(`Path not found: ${resolved}`);\n }\n process.exitCode = 1;\n return;\n }\n dirs.push({ name: path, dir: resolved });\n } else {\n const augmentedDir = join(process.cwd(), '.augmented');\n if (!existsSync(augmentedDir)) {\n if (json) {\n jsonOutput({ ok: false, error: 'No .augmented/ directory found' });\n } else {\n error('No .augmented/ directory found. Run `agt init` first.');\n }\n process.exitCode = 1;\n return;\n }\n\n const { readdirSync, statSync } = await import('node:fs');\n const entries = readdirSync(augmentedDir);\n for (const entry of entries) {\n const entryPath = join(augmentedDir, entry);\n if (statSync(entryPath).isDirectory()) {\n dirs.push({ name: entry, dir: entryPath });\n }\n }\n\n if (dirs.length === 0) {\n if (json) {\n jsonOutput({ ok: false, error: 'No agent directories found in .augmented/' });\n } else {\n error('No agent directories found in .augmented/. Run `agt init` first.');\n }\n process.exitCode = 1;\n return;\n }\n }\n\n // Optionally fetch team channel policy via API\n let orgPolicy: OrgChannelPolicy | undefined;\n const teamSlug = requireTeam();\n if (teamSlug) {\n const spinner = ora({ text: 'Fetching org channel policy…', isSilent: json });\n spinner.start();\n try {\n const data = await api.get<{\n channel_policy: {\n team_id: string;\n allowed_channels: string[];\n denied_channels: string[];\n require_elevated_for_pii: boolean;\n } | null;\n }>(`/teams/${encodeURIComponent(teamSlug)}/channel-policy`);\n\n if (data.channel_policy) {\n orgPolicy = {\n organization_id: data.channel_policy.team_id,\n allowed_channels: (data.channel_policy.allowed_channels ?? []) as ChannelId[],\n denied_channels: (data.channel_policy.denied_channels ?? []) as ChannelId[],\n require_elevated_for_pii: data.channel_policy.require_elevated_for_pii ?? false,\n };\n }\n spinner.stop();\n } catch {\n spinner.stop();\n // Non-fatal — lint without org policy\n }\n }\n\n let totalErrors = 0;\n let totalWarnings = 0;\n const jsonResults: Record<string, unknown>[] = [];\n\n for (const { name, dir } of dirs) {\n if (!json) console.log(chalk.bold(`\\nLinting ${name}:`));\n\n const charterPath = join(dir, 'CHARTER.md');\n const toolsPath = join(dir, 'TOOLS.md');\n const hasCharter = existsSync(charterPath);\n const hasTools = existsSync(toolsPath);\n\n if (!hasCharter && !hasTools) {\n if (!json) warn('No CHARTER.md or TOOLS.md found — skipping.');\n if (json) jsonResults.push({ agent: name, skipped: true });\n continue;\n }\n\n const charterContent = hasCharter ? readFileSync(charterPath, 'utf-8') : undefined;\n const toolsContent = hasTools ? readFileSync(toolsPath, 'utf-8') : undefined;\n\n let result: LintResult;\n if (charterContent && toolsContent) {\n result = lintAll(charterContent, toolsContent, { orgChannelPolicy: orgPolicy });\n if (!json) printResult('Full lint', result);\n } else if (charterContent) {\n result = lintCharter(charterContent, { orgChannelPolicy: orgPolicy });\n if (!json) printResult('CHARTER.md', result);\n } else {\n result = lintTools(toolsContent!);\n if (!json) printResult('TOOLS.md', result);\n }\n\n totalErrors += result.errors.length;\n totalWarnings += result.warnings.length;\n\n if (json) {\n jsonResults.push({\n agent: name,\n ok: result.ok,\n errors: result.errors.length,\n warnings: result.warnings.length,\n diagnostics: [...result.errors, ...result.warnings],\n });\n }\n }\n\n if (json) {\n jsonOutput({\n ok: totalErrors === 0,\n agents: jsonResults,\n total_errors: totalErrors,\n total_warnings: totalWarnings,\n });\n if (totalErrors > 0) process.exitCode = 1;\n return;\n }\n\n console.log();\n if (totalErrors === 0 && totalWarnings === 0) {\n success(`All ${dirs.length} agent(s) passed lint.`);\n } else {\n if (totalErrors > 0) {\n error(`Total: ${totalErrors} error(s) across ${dirs.length} agent(s)`);\n process.exitCode = 1;\n }\n if (totalWarnings > 0) {\n warn(`Total: ${totalWarnings} warning(s) across ${dirs.length} agent(s)`);\n }\n }\n}\n","import chalk from 'chalk';\nimport ora from 'ora';\nimport {\n CHANNEL_REGISTRY,\n getChannel,\n resolveChannels,\n type ChannelId,\n type ChannelPolicy,\n type OrgChannelPolicy,\n} from '@augmented/core';\nimport { requireTeam } from '../lib/auth-guard.js';\nimport { api } from '../lib/api-client.js';\nimport { success, error, info, table } from '../lib/output.js';\nimport { isJsonMode, jsonOutput } from '../lib/globals.js';\n\n/**\n * `agt channels list`\n */\nexport function channelsListCommand(): void {\n const json = isJsonMode();\n\n if (json) {\n const channels = CHANNEL_REGISTRY.map((ch) => ({\n id: ch.id,\n name: ch.name,\n security_tier: ch.securityTier,\n e2e_encrypted: ch.e2eEncrypted,\n audit_trail: ch.auditTrail,\n public_exposure_risk: ch.publicExposureRisk,\n }));\n jsonOutput({ ok: true, channels });\n return;\n }\n\n console.log(chalk.bold('\\nChannel Registry (18 channels)\\n'));\n\n const rows = CHANNEL_REGISTRY.map((ch) => [\n ch.id,\n ch.name,\n ch.securityTier === 'elevated'\n ? chalk.green(ch.securityTier)\n : ch.securityTier === 'limited'\n ? chalk.red(ch.securityTier)\n : chalk.cyan(ch.securityTier),\n typeof ch.e2eEncrypted === 'boolean'\n ? (ch.e2eEncrypted ? chalk.green('yes') : chalk.dim('no'))\n : chalk.yellow(ch.e2eEncrypted),\n typeof ch.auditTrail === 'boolean'\n ? (ch.auditTrail ? chalk.green('yes') : chalk.dim('no'))\n : chalk.yellow(ch.auditTrail),\n ch.publicExposureRisk === 'High'\n ? chalk.red(ch.publicExposureRisk)\n : ch.publicExposureRisk === 'Medium'\n ? chalk.yellow(ch.publicExposureRisk)\n : chalk.green(ch.publicExposureRisk),\n ]);\n\n table(['ID', 'Name', 'Security Tier', 'E2E Encrypted', 'Audit Trail', 'Public Risk'], rows);\n}\n\n/**\n * `agt channels check <agent>`\n */\nexport async function channelsCheckCommand(agentCodeName: string): Promise<void> {\n const teamSlug = requireTeam();\n if (!teamSlug) return;\n\n const json = isJsonMode();\n const spinner = ora({ text: `Resolving channels for \"${agentCodeName}\"…`, isSilent: json });\n spinner.start();\n\n try {\n const data = await api.get<{\n agent_channels: string[];\n channel_policy: {\n team_id: string;\n allowed_channels: string[];\n denied_channels: string[];\n require_elevated_for_pii: boolean;\n } | null;\n }>(`/agents/${encodeURIComponent(agentCodeName)}/channels`);\n\n const agentPolicy: ChannelPolicy = {\n policy: 'allowlist',\n allowed: (data.agent_channels ?? []) as ChannelId[],\n denied: [],\n require_approval_to_change: false,\n };\n\n const orgPolicy: OrgChannelPolicy | undefined = data.channel_policy\n ? {\n organization_id: data.channel_policy.team_id,\n allowed_channels: (data.channel_policy.allowed_channels ?? []) as ChannelId[],\n denied_channels: (data.channel_policy.denied_channels ?? []) as ChannelId[],\n require_elevated_for_pii: data.channel_policy.require_elevated_for_pii ?? false,\n }\n : undefined;\n\n const resolved = resolveChannels(agentPolicy, orgPolicy);\n\n spinner.stop();\n\n if (json) {\n jsonOutput({\n ok: true,\n agent: agentCodeName,\n agent_allowlist: agentPolicy.allowed,\n org_policy: orgPolicy\n ? {\n allowed: orgPolicy.allowed_channels,\n denied: orgPolicy.denied_channels,\n require_elevated_for_pii: orgPolicy.require_elevated_for_pii,\n }\n : null,\n resolved_channels: resolved,\n count: resolved.length,\n });\n return;\n }\n\n console.log(chalk.bold(`\\nChannel Resolution: ${agentCodeName}\\n`));\n\n info(`Agent allowlist: ${agentPolicy.allowed.length > 0 ? agentPolicy.allowed.join(', ') : 'none'}`);\n\n if (orgPolicy) {\n info(`Org allowed: ${orgPolicy.allowed_channels.length > 0 ? orgPolicy.allowed_channels.join(', ') : 'all (no restriction)'}`);\n info(`Org denied: ${orgPolicy.denied_channels.length > 0 ? orgPolicy.denied_channels.join(', ') : 'none'}`);\n if (orgPolicy.require_elevated_for_pii) {\n info('Org requires elevated tier for PII channels');\n }\n } else {\n info('No org channel policy configured.');\n }\n\n console.log();\n\n if (resolved.length === 0) {\n error('No channels available after resolution. The agent cannot communicate.');\n process.exitCode = 1;\n return;\n }\n\n const rows = resolved.map((chId) => {\n const ch = getChannel(chId);\n return [\n chId,\n ch?.name ?? 'Unknown',\n ch?.securityTier ?? '-',\n ch?.publicExposureRisk ?? '-',\n ];\n });\n\n success(`${resolved.length} channel(s) available:`);\n table(['ID', 'Name', 'Security Tier', 'Public Risk'], rows);\n } catch (err) {\n spinner.fail('Failed to resolve channels.');\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n }\n}\n","import chalk from 'chalk';\nimport ora from 'ora';\nimport { checkbox, confirm, input } from '@inquirer/prompts';\nimport {\n getDefaultSlackScopes,\n getScopesByCategory,\n SLACK_SCOPE_CATEGORY_LABELS,\n SLACK_SCOPE_PRESETS,\n generateSlackAppManifest,\n serializeManifestForSlackCli,\n createSlackApp,\n SlackApiError,\n type SlackScope,\n type SlackScopeCategory,\n} from '@augmented/core';\nimport { requireTeam } from '../lib/auth-guard.js';\nimport { api } from '../lib/api-client.js';\nimport { success, error, info, warn, table } from '../lib/output.js';\nimport { isJsonMode, jsonOutput } from '../lib/globals.js';\n\nimport { writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { tmpdir } from 'node:os';\n\n/**\n * `agt channels slack setup <agent-code-name>`\n */\nexport async function channelSlackSetupCommand(\n agentCodeName: string,\n options: {\n preset?: string;\n scopes?: string;\n skipCreate?: boolean;\n botToken?: string;\n signingSecret?: string;\n configToken?: string;\n },\n): Promise<void> {\n const teamSlug = requireTeam();\n if (!teamSlug) return;\n\n const json = isJsonMode();\n const spinner = ora({ text: `Looking up agent \"${agentCodeName}\"…`, isSilent: json });\n spinner.start();\n\n try {\n // Look up agent via API\n const agentData = await api.get<{\n agent: {\n agent_id: string;\n code_name: string;\n display_name: string;\n channels: string[];\n };\n }>(`/agents/${encodeURIComponent(agentCodeName)}`);\n\n const agent = agentData.agent;\n\n // Verify slack is in the agent's channel list\n const channels: string[] = agent.channels ?? [];\n if (!channels.includes('slack')) {\n spinner.fail(`Agent \"${agentCodeName}\" does not have Slack in its channel list.`);\n error('Enable Slack in the agent\\'s channels first (add \"slack\" to the channels array).');\n process.exitCode = 1;\n return;\n }\n\n spinner.succeed(`Found agent \"${agentCodeName}\"`);\n\n // ── Scope selection ─────────────────────────────────────────────────\n let selectedScopes: SlackScope[];\n\n if (options.scopes) {\n selectedScopes = options.scopes.split(',').map((s) => s.trim()) as SlackScope[];\n } else if (options.preset) {\n const preset = options.preset as keyof typeof SLACK_SCOPE_PRESETS;\n if (!(preset in SLACK_SCOPE_PRESETS)) {\n error(`Unknown preset \"${options.preset}\". Available: minimal, standard, full`);\n process.exitCode = 1;\n return;\n }\n selectedScopes = [...SLACK_SCOPE_PRESETS[preset]];\n info(`Using \"${preset}\" preset (${selectedScopes.length} scopes)`);\n } else if (json) {\n selectedScopes = [...SLACK_SCOPE_PRESETS.standard];\n } else {\n const scopesByCategory = getScopesByCategory();\n const defaults = getDefaultSlackScopes();\n\n type CheckboxChoice = { name: string; value: SlackScope; checked: boolean };\n type CheckboxSeparator = { type: 'separator'; separator: string };\n const choices: Array<CheckboxChoice | CheckboxSeparator> = [];\n for (const [category, defs] of scopesByCategory) {\n const label = SLACK_SCOPE_CATEGORY_LABELS[category as SlackScopeCategory];\n choices.push({ type: 'separator', separator: `── ${label} ──` });\n for (const def of defs) {\n const riskColor =\n def.risk === 'high' ? chalk.red : def.risk === 'medium' ? chalk.yellow : chalk.green;\n choices.push({\n name: `${def.scope} ${chalk.dim(`— ${def.description}`)} ${riskColor(`[${def.risk}]`)}`,\n value: def.scope,\n checked: defaults.includes(def.scope),\n });\n }\n }\n\n selectedScopes = await checkbox({\n message: 'Select Slack bot scopes:',\n choices,\n pageSize: 30,\n });\n }\n\n if (selectedScopes.length === 0) {\n error('No scopes selected. At least one scope is required.');\n process.exitCode = 1;\n return;\n }\n\n info(`Selected ${selectedScopes.length} scope(s): ${selectedScopes.join(', ')}`);\n\n // ── Generate manifest ───────────────────────────────────────────────\n const manifest = generateSlackAppManifest({\n agent_name: agent.display_name ?? agentCodeName,\n description: `Augmented-managed Slack bot for agent ${agentCodeName}`,\n scopes: selectedScopes,\n });\n\n const manifestObj = serializeManifestForSlackCli(manifest);\n\n const manifestJson = JSON.stringify(manifestObj, null, 2);\n const manifestPath = join(tmpdir(), `augmented-slack-manifest-${agentCodeName}.json`);\n await writeFile(manifestPath, manifestJson, 'utf-8');\n\n success(`Manifest written to ${manifestPath}`);\n console.log(chalk.dim(manifestJson));\n\n // ── Slack app creation via API ──────────────────────────────────────\n let appId: string | undefined;\n let botTokenRef: string | undefined = options.botToken;\n let signingSecretRef: string | undefined = options.signingSecret;\n\n if (!options.skipCreate) {\n let token = options.configToken;\n if (!token && !json) {\n token = (await input({\n message: 'Paste your Slack config token (xoxe-…) to create the app automatically, or leave empty to skip:',\n })).trim() || undefined;\n }\n\n if (token) {\n const createSpinner = ora({ text: 'Creating Slack app via API…', isSilent: json });\n createSpinner.start();\n\n try {\n const result = await createSlackApp(token, manifest);\n appId = result.app_id;\n signingSecretRef = `secret_ref://slack/${agentCodeName}/signing_secret`;\n createSpinner.succeed(`Slack app created: ${result.app_id}`);\n info(`OAuth URL: ${result.oauth_authorize_url}`);\n } catch (err) {\n createSpinner.fail('Failed to create Slack app via API.');\n if (err instanceof SlackApiError) {\n warn(`Slack API error: ${err.message}`);\n } else {\n warn((err as Error).message);\n }\n info(`Manifest saved at: ${manifestPath}`);\n info('Create the app manually via https://api.slack.com/apps and paste the manifest.');\n }\n } else {\n info(`Manifest saved at: ${manifestPath}`);\n info('Create the app manually via https://api.slack.com/apps and paste the manifest.');\n }\n }\n\n if (!signingSecretRef && !json) {\n const secret = await input({\n message: 'Paste your Slack Signing Secret, or leave empty to skip:',\n });\n if (secret.trim()) {\n signingSecretRef = `secret_ref://slack/${agentCodeName}/signing_secret`;\n }\n }\n\n if (!botTokenRef && !json) {\n const token = await input({\n message: 'Paste your Slack Bot Token (xoxb-…), or leave empty to skip:',\n });\n if (token.trim()) {\n botTokenRef = `secret_ref://slack/${agentCodeName}/bot_token`;\n }\n }\n\n // ── Store config via API ────────────────────────────────────────────\n const configSpinner = ora({ text: 'Saving channel config…', isSilent: json });\n configSpinner.start();\n\n const config = {\n channel_type: 'slack' as const,\n app_name: agent.display_name ?? agentCodeName,\n scopes: selectedScopes,\n ...(appId ? { app_id: appId } : {}),\n ...(botTokenRef ? { bot_token_ref: botTokenRef } : {}),\n ...(signingSecretRef ? { signing_secret_ref: signingSecretRef } : {}),\n manifest,\n };\n\n try {\n await api.put(\n `/agents/${encodeURIComponent(agentCodeName)}/channel-configs/slack`,\n {\n config,\n status: botTokenRef ? 'configured' : 'pending',\n },\n );\n } catch (err) {\n configSpinner.fail('Failed to save channel config.');\n error((err as Error).message);\n process.exitCode = 1;\n return;\n }\n\n configSpinner.succeed('Slack channel config saved.');\n\n if (json) {\n jsonOutput({\n ok: true,\n agent: agentCodeName,\n channel: 'slack',\n scopes: selectedScopes,\n status: botTokenRef ? 'configured' : 'pending',\n manifest_path: manifestPath,\n });\n } else {\n console.log();\n success(`Slack setup complete for \"${agentCodeName}\"`);\n info(`Status: ${botTokenRef ? 'configured' : 'pending (add credentials to activate)'}`);\n }\n } catch (err) {\n spinner.fail('Slack setup failed.');\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n }\n}\n\n/**\n * `agt channels slack status <agent-code-name>`\n */\nexport async function channelSlackStatusCommand(agentCodeName: string): Promise<void> {\n const teamSlug = requireTeam();\n if (!teamSlug) return;\n\n const json = isJsonMode();\n const spinner = ora({ text: `Fetching Slack config for \"${agentCodeName}\"…`, isSilent: json });\n spinner.start();\n\n try {\n const data = await api.get<{\n config: {\n channel_type: string;\n app_name?: string;\n scopes?: string[];\n bot_token_ref?: string;\n signing_secret_ref?: string;\n app_id?: string;\n team_id?: string;\n status?: string;\n created_at?: string;\n updated_at?: string;\n };\n }>(`/agents/${encodeURIComponent(agentCodeName)}/channel-configs/slack`);\n\n spinner.stop();\n\n const config = data.config;\n\n if (json) {\n jsonOutput({\n ok: true,\n agent: agentCodeName,\n channel: 'slack',\n configured: true,\n config,\n });\n return;\n }\n\n console.log(chalk.bold(`\\nSlack Configuration: ${agentCodeName}\\n`));\n\n const rows: string[][] = [\n ['App Name', config.app_name ?? '-'],\n ['App ID', config.app_id ?? '-'],\n ['Team ID', config.team_id ?? '-'],\n ['Bot Token', config.bot_token_ref ? chalk.green('configured') : chalk.dim('not set')],\n ['Signing Secret', config.signing_secret_ref ? chalk.green('configured') : chalk.dim('not set')],\n ['Scopes', (config.scopes ?? []).join(', ') || '-'],\n ];\n\n table(['Field', 'Value'], rows);\n } catch (err) {\n spinner.stop();\n if ((err as any).status === 404) {\n if (json) {\n jsonOutput({ ok: true, agent: agentCodeName, channel: 'slack', configured: false });\n } else {\n warn(`No Slack configuration found for \"${agentCodeName}\".`);\n info('Run `agt channels slack setup ' + agentCodeName + '` to configure.');\n }\n return;\n }\n\n spinner.fail('Failed to fetch Slack status.');\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n }\n}\n\n/**\n * `agt channels slack remove <agent-code-name>`\n */\nexport async function channelSlackRemoveCommand(agentCodeName: string): Promise<void> {\n const teamSlug = requireTeam();\n if (!teamSlug) return;\n\n const json = isJsonMode();\n const spinner = ora({ text: `Looking up agent \"${agentCodeName}\"…`, isSilent: json });\n spinner.start();\n\n try {\n // Check if config exists\n let config: { app_id?: string; app_name?: string } | null = null;\n try {\n const data = await api.get<{ config: { app_id?: string; app_name?: string } | null }>(`/agents/${encodeURIComponent(agentCodeName)}/channel-configs/slack`);\n config = data.config;\n } catch (err) {\n if ((err as any).status === 404) {\n spinner.info(`No Slack configuration found for \"${agentCodeName}\".`);\n if (json) {\n jsonOutput({ ok: true, agent: agentCodeName, channel: 'slack', removed: false, reason: 'not_configured' });\n }\n return;\n }\n throw err;\n }\n\n spinner.stop();\n\n // Confirm removal\n if (!json) {\n const appLabel = config?.app_id\n ? ` (App ID: ${config.app_id})`\n : config?.app_name\n ? ` (${config.app_name})`\n : '';\n const confirmed = await confirm({\n message: `Remove Slack bot configuration${appLabel} for \"${agentCodeName}\"?`,\n default: false,\n });\n\n if (!confirmed) {\n warn('Aborted.');\n return;\n }\n }\n\n const removeSpinner = ora({ text: 'Removing Slack configuration…', isSilent: json });\n removeSpinner.start();\n\n await api.del(`/agents/${encodeURIComponent(agentCodeName)}/channel-configs/slack`);\n\n removeSpinner.succeed('Slack configuration removed.');\n\n if (json) {\n jsonOutput({ ok: true, agent: agentCodeName, channel: 'slack', removed: true });\n } else {\n if (config?.app_id) {\n console.log();\n info(`Note: The Slack app (${config.app_id}) still exists in your Slack workspace.`);\n info('Delete it manually at https://api.slack.com/apps if no longer needed.');\n }\n }\n } catch (err) {\n error((err as Error).message);\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n }\n process.exitCode = 1;\n }\n}\n","import chalk from 'chalk';\nimport ora from 'ora';\nimport { confirm } from '@inquirer/prompts';\nimport { requireTeam } from '../lib/auth-guard.js';\nimport { api } from '../lib/api-client.js';\nimport { success, error, info, table } from '../lib/output.js';\nimport { isJsonMode, jsonOutput } from '../lib/globals.js';\n\n/**\n * `agt channels beam setup <agent-code-name>`\n */\nexport async function channelBeamSetupCommand(\n agentCodeName: string,\n options: {\n directoryUrl?: string;\n skipRegister?: boolean;\n autoPublish?: boolean;\n },\n): Promise<void> {\n const teamSlug = requireTeam();\n if (!teamSlug) return;\n\n const json = isJsonMode();\n const spinner = ora({ text: `Looking up agent \"${agentCodeName}\"…`, isSilent: json });\n spinner.start();\n\n try {\n // Look up agent via API\n const agentData = await api.get<{\n agent: {\n agent_id: string;\n code_name: string;\n display_name: string;\n team_id: string;\n channels: string[];\n };\n }>(`/agents/${encodeURIComponent(agentCodeName)}`);\n\n const agent = agentData.agent;\n\n // Verify beam is in the agent's channel list\n const channels: string[] = agent.channels ?? [];\n if (!channels.includes('beam')) {\n spinner.fail(`Agent \"${agentCodeName}\" does not have Beam in its channel list.`);\n error('Enable Beam in the agent\\'s channels first (add \"beam\" to the channels array).');\n process.exitCode = 1;\n return;\n }\n\n spinner.succeed(`Found agent \"${agentCodeName}\"`);\n\n // Check for existing config\n const existingConfig = await api.get<{\n config: Record<string, unknown> | null;\n }>(`/agents/${encodeURIComponent(agentCodeName)}/channel-configs/beam`).catch(() => ({ config: null }));\n\n if (existingConfig.config?.beam_id) {\n info(`Agent already has Beam identity: ${chalk.cyan(String(existingConfig.config.beam_id))}`);\n const proceed = await confirm({\n message: 'Regenerate identity? This will create a new keypair and re-register.',\n default: false,\n });\n if (!proceed) return;\n }\n\n // Generate identity and register\n spinner.start('Generating Ed25519 identity and registering with Beam directory…');\n\n const result = await api.post<{\n ok: boolean;\n beam_id: string;\n did: string;\n public_key: string;\n trust_score: number;\n verification_tier: string;\n published_capabilities: string[];\n error?: string;\n }>(`/agents/${encodeURIComponent(agentCodeName)}/channel-configs/beam/setup`, {\n auto_publish_capabilities: options.autoPublish ?? true,\n directory_url: options.directoryUrl,\n });\n\n if (!result.ok) {\n spinner.fail('Registration failed');\n error(result.error ?? 'Unknown error');\n process.exitCode = 1;\n return;\n }\n\n spinner.succeed('Beam identity created and registered');\n\n if (json) {\n jsonOutput({\n beam_id: result.beam_id,\n did: result.did,\n public_key: result.public_key,\n trust_score: result.trust_score,\n verification_tier: result.verification_tier,\n published_capabilities: result.published_capabilities,\n });\n return;\n }\n\n console.log();\n table(\n ['Field', 'Value'],\n [\n ['Beam ID', chalk.cyan(result.beam_id)],\n ['DID', chalk.dim(result.did)],\n ['Trust Score', String(result.trust_score)],\n ['Verification', result.verification_tier],\n ['Capabilities', result.published_capabilities.length > 0\n ? result.published_capabilities.join(', ')\n : chalk.dim('none published')],\n ],\n );\n console.log();\n success(`Agent \"${agentCodeName}\" is now reachable at ${chalk.cyan(result.beam_id)}`);\n } catch (err) {\n spinner.fail('Setup failed');\n error(err instanceof Error ? err.message : 'Unknown error');\n process.exitCode = 1;\n }\n}\n\n/**\n * `agt channels beam status <agent-code-name>`\n */\nexport async function channelBeamStatusCommand(agentCodeName: string): Promise<void> {\n const teamSlug = requireTeam();\n if (!teamSlug) return;\n\n const json = isJsonMode();\n const spinner = ora({ text: `Fetching Beam config for \"${agentCodeName}\"…`, isSilent: json });\n spinner.start();\n\n try {\n const data = await api.get<{\n config: Record<string, unknown> | null;\n status?: string;\n }>(`/agents/${encodeURIComponent(agentCodeName)}/channel-configs/beam`);\n\n if (!data.config?.beam_id) {\n spinner.info('No Beam identity configured for this agent.');\n return;\n }\n\n spinner.succeed('Beam configuration found');\n const cfg = data.config;\n\n if (json) {\n jsonOutput(cfg);\n return;\n }\n\n console.log();\n table(\n ['Field', 'Value'],\n [\n ['Beam ID', chalk.cyan(String(cfg.beam_id))],\n ['DID', chalk.dim(String(cfg.did ?? '—'))],\n ['Public Key', chalk.dim(String(cfg.public_key ?? '').slice(0, 24) + '…')],\n ['Trust Score', String(cfg.trust_score ?? 0)],\n ['Verification', String(cfg.verification_tier ?? 'basic')],\n ['Auto-publish', cfg.auto_publish_capabilities ? chalk.green('yes') : chalk.dim('no')],\n ['Capabilities', Array.isArray(cfg.published_capabilities) && cfg.published_capabilities.length > 0\n ? cfg.published_capabilities.join(', ')\n : chalk.dim('none')],\n ['Status', data.status ?? '—'],\n ],\n );\n console.log();\n } catch (err) {\n spinner.fail('Failed to fetch config');\n error(err instanceof Error ? err.message : 'Unknown error');\n process.exitCode = 1;\n }\n}\n\n/**\n * `agt channels beam remove <agent-code-name>`\n */\nexport async function channelBeamRemoveCommand(agentCodeName: string): Promise<void> {\n const teamSlug = requireTeam();\n if (!teamSlug) return;\n\n const json = isJsonMode();\n\n if (!json) {\n const proceed = await confirm({\n message: `Remove Beam identity from \"${agentCodeName}\"? The directory entry will expire.`,\n default: false,\n });\n if (!proceed) return;\n }\n\n const spinner = ora({ text: 'Removing Beam identity…', isSilent: json });\n spinner.start();\n\n try {\n await api.del(`/agents/${encodeURIComponent(agentCodeName)}/channel-configs/beam`);\n spinner.succeed('Beam identity removed');\n\n if (json) {\n jsonOutput({ ok: true });\n }\n } catch (err) {\n spinner.fail('Failed to remove');\n error(err instanceof Error ? err.message : 'Unknown error');\n process.exitCode = 1;\n }\n}\n","import chalk from 'chalk';\nimport ora from 'ora';\nimport { select, input } from '@inquirer/prompts';\nimport { writeFileSync, mkdirSync } from 'node:fs';\nimport { join } from 'node:path';\nimport {\n DEPLOYMENT_TEMPLATES,\n getTemplate,\n renderTemplate,\n type TemplateContext,\n type TemplateAgent,\n} from '@augmented/core';\nimport { requireTeam } from '../lib/auth-guard.js';\nimport { api } from '../lib/api-client.js';\nimport { success, error, info } from '../lib/output.js';\nimport { isJsonMode, jsonOutput } from '../lib/globals.js';\n\ninterface DeployOptions {\n template?: string;\n port?: string;\n}\n\n/**\n * `agt deploy`\n */\nexport async function deployCommand(opts: DeployOptions): Promise<void> {\n const teamSlug = requireTeam();\n if (!teamSlug) return;\n\n const nonInteractive = !!opts.template;\n const json = isJsonMode();\n\n let templateId: string;\n let basePort: number;\n\n if (nonInteractive) {\n templateId = opts.template!;\n basePort = Number(opts.port ?? '9000');\n if (isNaN(basePort) || basePort < 1 || basePort > 65535) {\n if (json) {\n jsonOutput({ ok: false, error: 'Invalid port number' });\n } else {\n error('Invalid port number. Must be between 1 and 65535.');\n }\n process.exitCode = 1;\n return;\n }\n } else {\n console.log(chalk.bold('\\nAugmented — Deploy\\n'));\n\n templateId = await select({\n message: 'Deployment template:',\n choices: DEPLOYMENT_TEMPLATES.map((t) => ({\n value: t.id,\n name: `${t.name} — ${t.description}`,\n })),\n });\n\n const basePortStr = await input({\n message: 'Base port for gateway:',\n default: '9000',\n validate: (v) => {\n const n = Number(v);\n return (!isNaN(n) && n > 0 && n < 65536) || 'Must be a valid port number';\n },\n });\n basePort = Number(basePortStr);\n }\n\n const tmpl = getTemplate(templateId);\n if (!tmpl) {\n if (json) {\n jsonOutput({ ok: false, error: `Template \"${templateId}\" not found` });\n } else {\n error(`Template \"${templateId}\" not found.`);\n }\n process.exitCode = 1;\n return;\n }\n\n // ── Fetch agents via API ──────────────────────────────────────────────\n\n const spinner = ora({ text: 'Fetching agents…', isSilent: json });\n spinner.start();\n\n let agents: Array<{\n agent_id: string;\n code_name: string;\n display_name: string;\n environment: string;\n }>;\n\n try {\n const data = await api.get<{ agents: typeof agents }>('/agents');\n agents = data.agents;\n } catch (err) {\n spinner.fail('Failed to fetch agents.');\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n return;\n }\n\n if (!agents || agents.length === 0) {\n spinner.fail('No agents found in team.');\n if (json) {\n jsonOutput({ ok: false, error: 'No agents found in team. Run `agt init` first.' });\n } else {\n error('No agents found in team. Run `agt init` first.');\n }\n process.exitCode = 1;\n return;\n }\n\n // ── Build template context ────────────────────────────────────────────\n\n const templateAgents: TemplateAgent[] = agents.map((a, i) => ({\n agent_id: a.agent_id,\n code_name: a.code_name,\n display_name: a.display_name,\n environment: a.environment,\n port: basePort + i,\n }));\n\n const context: TemplateContext = {\n agents: templateAgents,\n gateway: { port: basePort },\n variables: {},\n };\n\n let rendered: string;\n try {\n rendered = renderTemplate(tmpl.template, context);\n } catch (err) {\n spinner.fail('Template rendering failed.');\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n return;\n }\n\n // ── Record deployment via API ─────────────────────────────────────────\n\n try {\n await api.post('/deployments', {\n template_id: tmpl.id,\n agent_ids: agents.map((a) => a.agent_id),\n variables: { base_port: basePort },\n });\n } catch (deployErr) {\n spinner.stop();\n if (!json) info(`Warning: could not record deployment in database: ${(deployErr as Error).message}`);\n }\n\n // ── Write output file ─────────────────────────────────────────────────\n\n const outDir = join(process.cwd(), '.augmented', 'deploy');\n mkdirSync(outDir, { recursive: true });\n const outPath = join(outDir, 'docker-compose.yaml');\n writeFileSync(outPath, rendered);\n\n spinner.succeed('Deployment config generated.');\n\n if (json) {\n jsonOutput({\n ok: true,\n template: tmpl.id,\n agents: agents.map((a) => a.code_name),\n output_path: outPath,\n });\n return;\n }\n\n console.log();\n info(`Template: ${chalk.bold(tmpl.name)}`);\n info(`Agents: ${agents.map((a) => a.code_name).join(', ')}`);\n info(`Output: ${outPath}`);\n console.log();\n info(`Next steps:`);\n info(` cd .augmented/deploy && docker compose up`);\n}\n","import chalk from 'chalk';\nimport ora from 'ora';\nimport { writeFileSync, mkdirSync } from 'node:fs';\nimport { join } from 'node:path';\nimport {\n extractFrontmatter,\n resolveChannels,\n lintAll,\n getFramework,\n getTemplate,\n renderTemplate,\n type CharterFrontmatter,\n type ToolsFrontmatter,\n type ChannelId,\n type ChannelPolicy,\n type OrgChannelPolicy,\n type DeploymentTarget,\n type LintDiagnostic,\n type ProvisionInput,\n type TemplateContext,\n} from '@augmented/core';\nimport { provision } from '@augmented/core/provisioning/provisioner.js';\nimport { requireTeam } from '../lib/auth-guard.js';\nimport { api } from '../lib/api-client.js';\nimport { success, error, warn, info } from '../lib/output.js';\nimport { isJsonMode, jsonOutput } from '../lib/globals.js';\n\nfunction printDiagnostics(diagnostics: LintDiagnostic[]): void {\n for (const d of diagnostics) {\n const prefix = d.severity === 'error' ? chalk.red('ERR') : chalk.yellow('WARN');\n const path = d.path ? chalk.dim(` (${d.path})`) : '';\n console.log(` ${prefix} [${d.code}] ${d.message}${path}`);\n }\n}\n\n/**\n * `agt provision <code-name>`\n */\nexport async function provisionCommand(\n codeName: string,\n options: { target?: string; output?: string; dryRun?: boolean },\n): Promise<void> {\n const teamSlug = requireTeam();\n if (!teamSlug) return;\n\n const json = isJsonMode();\n const target = (options.target ?? 'local_docker') as DeploymentTarget;\n const outputDir = options.output ?? join(process.cwd(), '.augmented', codeName, 'provision');\n const dryRun = options.dryRun ?? false;\n\n if (!json) console.log(chalk.bold('\\nAugmented — Provision\\n'));\n\n const spinner = ora({ text: 'Fetching agent data…', isSilent: json });\n spinner.start();\n\n // ── Fetch all provision data in one call ──────────────────────────────\n\n let provisionData: {\n agent: Record<string, unknown>;\n charter: { raw_content: string; version: string } | null;\n tools: { raw_content: string; version: string } | null;\n channel_configs: Record<string, { config: unknown; status: string }> | null;\n team_channel_policy: {\n team_id: string;\n allowed_channels: string[];\n denied_channels: string[];\n require_elevated_for_pii: boolean;\n } | null;\n };\n\n try {\n provisionData = await api.get(`/agents/${encodeURIComponent(codeName)}/provision-data`);\n } catch (err) {\n spinner.fail(`Could not fetch provision data for \"${codeName}\".`);\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n return;\n }\n\n const agentData = provisionData.agent;\n\n if (!provisionData.charter) {\n spinner.fail('No CHARTER.md version found.');\n if (json) jsonOutput({ ok: false, error: 'No CHARTER.md version found' });\n else error('No CHARTER.md version found for this agent');\n process.exitCode = 1;\n return;\n }\n\n if (!provisionData.tools) {\n spinner.fail('No TOOLS.md version found.');\n if (json) jsonOutput({ ok: false, error: 'No TOOLS.md version found' });\n else error('No TOOLS.md version found for this agent');\n process.exitCode = 1;\n return;\n }\n\n spinner.text = 'Parsing frontmatter…';\n\n const charterContent = provisionData.charter.raw_content;\n const toolsContent = provisionData.tools.raw_content;\n\n const charterParsed = extractFrontmatter(charterContent);\n if (!charterParsed.frontmatter) {\n spinner.fail('Failed to parse CHARTER.md frontmatter.');\n if (json) jsonOutput({ ok: false, error: charterParsed.error ?? 'Unknown parse error' });\n else error(charterParsed.error ?? 'Unknown parse error');\n process.exitCode = 1;\n return;\n }\n\n const toolsParsed = extractFrontmatter(toolsContent);\n if (!toolsParsed.frontmatter) {\n spinner.fail('Failed to parse TOOLS.md frontmatter.');\n if (json) jsonOutput({ ok: false, error: toolsParsed.error ?? 'Unknown parse error' });\n else error(toolsParsed.error ?? 'Unknown parse error');\n process.exitCode = 1;\n return;\n }\n\n const charterFrontmatter = charterParsed.frontmatter as unknown as CharterFrontmatter;\n const toolsFrontmatter = toolsParsed.frontmatter as unknown as ToolsFrontmatter;\n\n // ── Lint ───────────────────────────────────────────────────────────────\n\n spinner.text = 'Linting…';\n const lintResult = lintAll(charterContent, toolsContent);\n\n if (!lintResult.ok) {\n spinner.fail('Lint errors — cannot provision.');\n if (json) {\n jsonOutput({\n ok: false,\n error: 'Lint errors — cannot provision',\n lint: {\n errors: lintResult.errors.length,\n warnings: lintResult.warnings.length,\n diagnostics: [...lintResult.errors, ...lintResult.warnings],\n },\n });\n } else {\n printDiagnostics(lintResult.errors);\n if (lintResult.warnings.length > 0) printDiagnostics(lintResult.warnings);\n }\n process.exitCode = 1;\n return;\n }\n\n if (lintResult.warnings.length > 0 && !json) {\n spinner.stop();\n warn(`Lint: ${lintResult.warnings.length} warning(s)`);\n printDiagnostics(lintResult.warnings);\n spinner.start('Provisioning…');\n }\n\n // ── Resolve channels ──────────────────────────────────────────────────\n\n spinner.text = 'Resolving channels…';\n\n // Derive channels from agent_channel_configs (source of truth)\n const configuredChannels = Object.keys(provisionData.channel_configs ?? {}) as ChannelId[];\n\n const agentChannelPolicy: ChannelPolicy = {\n policy: 'allowlist',\n allowed: configuredChannels,\n denied: [],\n require_approval_to_change: true,\n };\n\n let orgChannelPolicy: OrgChannelPolicy | undefined;\n const policyData = provisionData.team_channel_policy;\n\n if (policyData) {\n orgChannelPolicy = {\n organization_id: policyData.team_id,\n allowed_channels: (policyData.allowed_channels ?? []) as ChannelId[],\n denied_channels: (policyData.denied_channels ?? []) as ChannelId[],\n require_elevated_for_pii: policyData.require_elevated_for_pii ?? false,\n };\n }\n\n const resolvedChannels = resolveChannels(agentChannelPolicy, orgChannelPolicy);\n\n // ── Provision ─────────────────────────────────────────────────────────\n\n const frameworkId = (agentData.framework as string) ?? 'openclaw';\n const adapter = getFramework(frameworkId);\n\n spinner.text = `Building ${adapter.label} config…`;\n\n const provisionInput: ProvisionInput = {\n agent: agentData as any,\n charterFrontmatter,\n charterContent,\n toolsFrontmatter,\n toolsContent,\n resolvedChannels,\n deploymentTarget: target,\n gatewayPort: 9000,\n };\n\n const provisionOutput = provision(provisionInput, frameworkId);\n\n const templateId = target === 'local_docker' ? 'shared-gateway-local' : 'shared-gateway-local';\n const tmpl = getTemplate(templateId);\n let deploymentYaml = '';\n if (tmpl) {\n const templateContext: TemplateContext = {\n agents: [{\n agent_id: agentData.agent_id as string,\n code_name: agentData.code_name as string,\n display_name: agentData.display_name as string,\n environment: agentData.environment as string,\n port: 9000,\n }],\n gateway: { port: 9000 },\n variables: {},\n };\n deploymentYaml = renderTemplate(tmpl.template, templateContext);\n }\n\n // ── Dry run ───────────────────────────────────────────────────────────\n\n if (dryRun) {\n spinner.stop();\n if (json) {\n jsonOutput({\n ok: true,\n dry_run: true,\n agent: codeName,\n framework: frameworkId,\n target,\n charter_hash: provisionOutput.charterHash,\n tools_hash: provisionOutput.toolsHash,\n channels: resolvedChannels.length,\n artifacts: provisionOutput.artifacts.map((a) => ({\n path: a.relativePath,\n size: a.content.length,\n })),\n deployment_yaml: deploymentYaml || null,\n });\n return;\n }\n\n console.log();\n info('Dry run — no files written.');\n console.log();\n for (const artifact of provisionOutput.artifacts) {\n console.log(chalk.bold(`${artifact.relativePath}:`));\n console.log(artifact.content);\n }\n if (deploymentYaml) {\n console.log(chalk.bold('Deployment Template:'));\n console.log(deploymentYaml);\n }\n console.log();\n info(`CHARTER hash: ${provisionOutput.charterHash}`);\n info(`TOOLS hash: ${provisionOutput.toolsHash}`);\n return;\n }\n\n // ── Write files ───────────────────────────────────────────────────────\n\n spinner.text = 'Writing files…';\n\n mkdirSync(outputDir, { recursive: true });\n for (const artifact of provisionOutput.artifacts) {\n writeFileSync(join(outputDir, artifact.relativePath), artifact.content);\n }\n if (deploymentYaml) {\n writeFileSync(join(outputDir, 'docker-compose.yaml'), deploymentYaml);\n }\n\n // ── Store provision snapshot via API ───────────────────────────────────\n\n spinner.text = 'Storing provision snapshot…';\n\n try {\n await api.post(`/agents/${encodeURIComponent(codeName)}/provision-snapshots`, {\n charter_version: provisionData.charter.version,\n tools_version: provisionData.tools.version,\n charter_content: charterContent,\n tools_content: toolsContent,\n channels: resolvedChannels,\n });\n } catch (err) {\n spinner.stop();\n if (!json) warn(`Provision completed but could not store snapshot: ${(err as Error).message}`);\n }\n\n // ── Summary ───────────────────────────────────────────────────────────\n\n spinner.succeed(`Agent \"${chalk.bold(agentData.display_name as string)}\" provisioned.`);\n\n if (json) {\n jsonOutput({\n ok: true,\n agent: codeName,\n framework: frameworkId,\n target,\n output_dir: outputDir,\n charter_hash: provisionOutput.charterHash,\n tools_hash: provisionOutput.toolsHash,\n channels: resolvedChannels.length,\n artifacts: provisionOutput.artifacts.map((a) => a.relativePath),\n });\n return;\n }\n\n console.log();\n info(`Agent: ${agentData.code_name}`);\n info(`Framework: ${adapter.label}`);\n info(`Target: ${target}`);\n info(`Output: ${outputDir}`);\n info(`CHARTER hash: ${provisionOutput.charterHash.slice(0, 12)}…`);\n info(`TOOLS hash: ${provisionOutput.toolsHash.slice(0, 12)}…`);\n info(`Channels: ${resolvedChannels.length} active`);\n info(`Artifacts: ${provisionOutput.artifacts.map((a) => a.relativePath).join(', ')}`);\n console.log();\n info('Next steps:');\n info(` cd ${outputDir} && docker compose up`);\n info(` agt drift check ${agentData.code_name}`);\n}\n","import chalk from 'chalk';\nimport ora from 'ora';\nimport {\n detectDrift,\n getFramework,\n type DriftReport,\n type DriftFinding,\n type RiskTier,\n} from '@augmented/core';\nimport { readLiveState } from '@augmented/core/drift/live-state-reader.js';\nimport { requireTeam } from '../lib/auth-guard.js';\nimport { api } from '../lib/api-client.js';\nimport { success, error, warn, info, table } from '../lib/output.js';\nimport { isJsonMode } from '../lib/globals.js';\n\nconst KEBAB_CASE_RE = /^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/;\n\nfunction severityColor(severity: string): string {\n switch (severity) {\n case 'critical':\n return chalk.red(severity);\n case 'warning':\n return chalk.yellow(severity);\n default:\n return chalk.dim(severity);\n }\n}\n\nfunction printDriftReport(report: DriftReport): void {\n console.log(chalk.bold(`\\nDrift Report: ${report.codeName}\\n`));\n\n info(`Agent ID: ${report.agentId}`);\n info(`Checked at: ${report.checkedAt.toISOString()}`);\n console.log();\n\n if (!report.hasDrift) {\n success('No drift detected. Agent matches provisioned state.');\n return;\n }\n\n warn(`Drift detected: ${report.criticalCount} critical, ${report.warningCount} warning`);\n console.log();\n\n const rows = report.findings.map((f: DriftFinding) => [\n severityColor(f.severity),\n f.category,\n f.field,\n f.message,\n ]);\n\n table(['Severity', 'Category', 'Field', 'Message'], rows);\n}\n\ninterface DriftCheckOpts {\n json?: boolean;\n audit?: boolean;\n config?: string;\n}\n\n/**\n * `agt drift check <code-name>`\n */\nexport async function driftCheckCommand(\n codeName: string,\n opts: DriftCheckOpts,\n): Promise<void> {\n const teamSlug = requireTeam();\n if (!teamSlug) return;\n\n if (!KEBAB_CASE_RE.test(codeName)) {\n error('Invalid code-name. Must be kebab-case (e.g. \"my-agent\").');\n process.exitCode = 1;\n return;\n }\n\n const useJson = opts.json || isJsonMode();\n\n const spinner = ora({ text: `Checking drift for \"${codeName}\"…`, isSilent: useJson });\n spinner.start();\n\n try {\n // Fetch drift data via API\n const driftData = await api.get<{\n agent: Record<string, unknown>;\n snapshot: Record<string, unknown> | null;\n charter: { raw_content: string; version: string } | null;\n tools: { raw_content: string; version: string } | null;\n }>(`/agents/${encodeURIComponent(codeName)}/drift-data`);\n\n const agent = driftData.agent;\n const snapshot = driftData.snapshot;\n\n if (!snapshot) {\n spinner.fail(`No provision snapshot found for \"${codeName}\". Run \\`agt provision\\` first.`);\n error('No provision snapshot available');\n process.exitCode = 1;\n return;\n }\n\n // Resolve adapter from agent's framework field\n const frameworkId = (agent.framework as string) ?? 'openclaw';\n const adapter = getFramework(frameworkId);\n const trackedFiles = adapter.driftTrackedFiles();\n\n // Read live state from disk (team-scoped to prevent cross-team collisions)\n const defaultDir = `.augmented/${teamSlug}/${codeName}/provision`;\n const configPath = opts.config ?? `${defaultDir}/${trackedFiles[0]}`;\n\n const liveState = await readLiveState({\n configPath,\n teamDir: defaultDir,\n trackedFiles,\n runAudit: opts.audit,\n });\n\n // Run drift detection\n const report = detectDrift(\n {\n frameworkConfig: (snapshot.openclaw_config ?? {}) as Record<string, unknown>,\n charterHash: snapshot.charter_hash as string ?? '',\n toolsHash: snapshot.tools_hash as string ?? '',\n toolAllow: snapshot.tool_allow as string[] ?? [],\n toolDeny: snapshot.tool_deny as string[] ?? [],\n channelsConfig: (snapshot.channels_config ?? {}) as Record<string, unknown>,\n sandboxMode: snapshot.sandbox_mode as string ?? 'all',\n },\n liveState,\n agent.agent_id as string,\n codeName,\n (agent.risk_tier as RiskTier) ?? 'Medium',\n );\n\n spinner.stop();\n\n if (useJson) {\n console.log(JSON.stringify(report, null, 2));\n } else {\n printDriftReport(report);\n }\n\n if (report.hasDrift) {\n process.exitCode = 1;\n }\n } catch (err) {\n spinner.fail('Drift check failed.');\n error((err as Error).message);\n process.exitCode = 1;\n }\n}\n\ninterface DriftWatchOpts {\n interval?: string;\n webhook?: string;\n json?: boolean;\n config?: string;\n}\n\n/**\n * `agt drift watch <code-name>`\n */\nexport async function driftWatchCommand(\n codeName: string,\n opts: DriftWatchOpts,\n): Promise<void> {\n const teamSlug = requireTeam();\n if (!teamSlug) return;\n\n if (!KEBAB_CASE_RE.test(codeName)) {\n error('Invalid code-name. Must be kebab-case (e.g. \"my-agent\").');\n process.exitCode = 1;\n return;\n }\n\n const useJson = opts.json || isJsonMode();\n\n const intervalSec = parseInt(opts.interval ?? '60', 10);\n if (isNaN(intervalSec) || intervalSec < 1) {\n error('Interval must be a positive number of seconds.');\n process.exitCode = 1;\n return;\n }\n\n // Resolve agent once up front\n let agent: Record<string, unknown>;\n try {\n const data = await api.get<{ agent: Record<string, unknown> }>(`/agents/${encodeURIComponent(codeName)}`);\n agent = data.agent;\n } catch (err) {\n error((err as Error).message);\n process.exitCode = 1;\n return;\n }\n\n // Resolve adapter from agent's framework field\n const frameworkId = (agent.framework as string) ?? 'openclaw';\n const adapter = getFramework(frameworkId);\n const trackedFiles = adapter.driftTrackedFiles();\n\n if (!useJson) {\n console.log(\n chalk.bold(`\\nWatching drift for \"${codeName}\" every ${intervalSec}s. Press Ctrl+C to stop.\\n`),\n );\n }\n\n let previousFindingCount = -1;\n\n const runCheck = async (): Promise<void> => {\n const spinner = ora({ text: `Checking drift for \"${codeName}\"…`, isSilent: useJson });\n spinner.start();\n\n try {\n const driftData = await api.get<{\n snapshot: Record<string, unknown> | null;\n }>(`/agents/${encodeURIComponent(codeName)}/drift-data`);\n\n const snapshot = driftData.snapshot;\n if (!snapshot) {\n spinner.warn('No provision snapshot found. Skipping check.');\n return;\n }\n\n const watchDefaultDir = `.augmented/${teamSlug}/${codeName}/provision`;\n const configPath = opts.config ?? `${watchDefaultDir}/${trackedFiles[0]}`;\n\n const liveState = await readLiveState({\n configPath,\n teamDir: watchDefaultDir,\n trackedFiles,\n });\n\n const report = detectDrift(\n {\n frameworkConfig: (snapshot.openclaw_config ?? {}) as Record<string, unknown>,\n charterHash: snapshot.charter_hash as string ?? '',\n toolsHash: snapshot.tools_hash as string ?? '',\n toolAllow: snapshot.tool_allow as string[] ?? [],\n toolDeny: snapshot.tool_deny as string[] ?? [],\n channelsConfig: (snapshot.channels_config ?? {}) as Record<string, unknown>,\n sandboxMode: snapshot.sandbox_mode as string ?? 'all',\n },\n liveState,\n agent.agent_id as string,\n codeName,\n (agent.risk_tier as RiskTier) ?? 'Medium',\n );\n\n spinner.stop();\n\n const isNew = report.findings.length !== previousFindingCount;\n previousFindingCount = report.findings.length;\n\n if (useJson) {\n console.log(JSON.stringify(report, null, 2));\n } else if (report.hasDrift) {\n printDriftReport(report);\n } else {\n success(`[${new Date().toLocaleTimeString()}] No drift detected.`);\n }\n\n if (isNew && report.hasDrift && opts.webhook) {\n try {\n await fetch(opts.webhook, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(report),\n });\n if (!useJson) info(`Webhook notified: ${opts.webhook}`);\n } catch (webhookErr) {\n if (!useJson) warn(`Failed to notify webhook: ${(webhookErr as Error).message}`);\n }\n }\n } catch (err) {\n spinner.fail('Drift check failed.');\n error((err as Error).message);\n }\n };\n\n await runCheck();\n\n const timer = setInterval(() => {\n void runCheck();\n }, intervalSec * 1000);\n\n process.on('SIGINT', () => {\n clearInterval(timer);\n if (!useJson) console.log(chalk.dim('\\nStopped watching.'));\n process.exit(0);\n });\n}\n","import { readFile } from 'node:fs/promises';\nimport { createHash } from 'node:crypto';\nimport { join } from 'node:path';\nimport JSON5 from 'json5';\nimport type { DriftCheckOptions, LiveState } from './types.js';\n\nasync function hashFile(filePath: string): Promise<string | null> {\n try {\n const content = await readFile(filePath);\n return createHash('sha256').update(content).digest('hex');\n } catch {\n return null;\n }\n}\n\nasync function readJsonFile(filePath: string): Promise<Record<string, unknown> | null> {\n try {\n const content = await readFile(filePath, 'utf-8');\n return JSON5.parse(content) as Record<string, unknown>;\n } catch {\n return null;\n }\n}\n\nexport async function readLiveState(options: DriftCheckOptions): Promise<LiveState> {\n const trackedFiles = options.trackedFiles ?? ['openclaw.json5', 'CHARTER.md', 'TOOLS.md'];\n\n // Config file is the first tracked file (framework-specific config)\n // CHARTER.md and TOOLS.md are identified by name within the tracked list\n const charterFile = trackedFiles.find((f) => f.includes('CHARTER')) ?? 'CHARTER.md';\n const toolsFile = trackedFiles.find((f) => f.includes('TOOLS')) ?? 'TOOLS.md';\n\n const [frameworkConfig, charterHash, toolsHash] = await Promise.all([\n readJsonFile(options.configPath),\n hashFile(join(options.teamDir, charterFile)),\n hashFile(join(options.teamDir, toolsFile)),\n ]);\n\n return {\n frameworkConfig,\n charterHash,\n toolsHash,\n configPath: options.configPath,\n };\n}\n","import chalk from 'chalk';\nimport ora from 'ora';\nimport { requireTeam } from '../lib/auth-guard.js';\nimport { api, getHostId } from '../lib/api-client.js';\nimport { success, error, info, table } from '../lib/output.js';\nimport { isJsonMode, jsonOutput } from '../lib/globals.js';\n\n// ---------------------------------------------------------------------------\n// agt host list\n// ---------------------------------------------------------------------------\n\nexport async function hostListCommand(): Promise<void> {\n const teamSlug = requireTeam();\n if (!teamSlug) return;\n\n const json = isJsonMode();\n const spinner = ora({ text: 'Fetching hosts\\u2026', isSilent: json });\n spinner.start();\n\n try {\n const data = await api.get<{\n hosts: Array<{\n name: string;\n status: string;\n description: string | null;\n framework: string;\n agents: number;\n last_seen_at: string | null;\n key_prefix: string | null;\n created_at: string;\n }>;\n }>('/hosts');\n\n spinner.stop();\n\n if (!data.hosts || data.hosts.length === 0) {\n if (json) {\n jsonOutput({ ok: true, hosts: [] });\n } else {\n info('No hosts found. Create one with `agt host create --name <name>`.');\n }\n return;\n }\n\n if (json) {\n jsonOutput({ ok: true, hosts: data.hosts });\n return;\n }\n\n const rows = data.hosts.map((h) => {\n const status = h.status === 'active'\n ? chalk.green('active')\n : chalk.red('decommissioned');\n\n const agents = String(h.agents);\n\n const lastSeen = h.last_seen_at\n ? new Date(h.last_seen_at).toLocaleDateString()\n : chalk.dim('never');\n\n const prefix = h.key_prefix\n ? `tlk_${h.key_prefix}\\u2026`\n : chalk.dim('none');\n\n return [h.name, status, agents, lastSeen, prefix];\n });\n\n table(['Name', 'Status', 'Agents', 'Last Seen', 'Key'], rows);\n } catch (err) {\n spinner.fail('Failed to fetch hosts.');\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n }\n}\n\n// ---------------------------------------------------------------------------\n// agt host assign\n// ---------------------------------------------------------------------------\n\ninterface HostAssignOptions {\n force?: boolean;\n}\n\nexport async function hostAssignCommand(\n hostName: string,\n agentCodeNames: string[],\n opts: HostAssignOptions,\n): Promise<void> {\n const teamSlug = requireTeam();\n if (!teamSlug) return;\n\n const json = isJsonMode();\n\n if (!agentCodeNames || agentCodeNames.length === 0) {\n if (json) {\n jsonOutput({ ok: false, error: 'At least one agent code name is required' });\n } else {\n error('At least one agent code name is required.');\n }\n process.exitCode = 1;\n return;\n }\n\n const spinner = ora({ text: 'Assigning agents\\u2026', isSilent: json });\n spinner.start();\n\n try {\n await api.post(`/hosts/${encodeURIComponent(hostName)}/assign`, {\n agents: agentCodeNames,\n force: opts.force,\n });\n\n spinner.succeed(`Agents assigned to ${chalk.bold(hostName)}.`);\n\n if (json) {\n jsonOutput({ ok: true, host: hostName, assigned: agentCodeNames });\n return;\n }\n\n for (const name of agentCodeNames) {\n info(` ${name}`);\n }\n } catch (err) {\n spinner.fail('Failed to assign agents.');\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n }\n}\n\n// ---------------------------------------------------------------------------\n// agt host unassign\n// ---------------------------------------------------------------------------\n\nexport async function hostUnassignCommand(\n hostName: string,\n agentCodeNames: string[],\n): Promise<void> {\n const teamSlug = requireTeam();\n if (!teamSlug) return;\n\n const json = isJsonMode();\n\n if (!agentCodeNames || agentCodeNames.length === 0) {\n if (json) {\n jsonOutput({ ok: false, error: 'At least one agent code name is required' });\n } else {\n error('At least one agent code name is required.');\n }\n process.exitCode = 1;\n return;\n }\n\n const spinner = ora({ text: 'Unassigning agents\\u2026', isSilent: json });\n spinner.start();\n\n try {\n await api.post(`/hosts/${encodeURIComponent(hostName)}/unassign`, {\n agents: agentCodeNames,\n });\n\n spinner.succeed(`Agents unassigned from ${chalk.bold(hostName)}.`);\n\n if (json) {\n jsonOutput({ ok: true, host: hostName, unassigned: agentCodeNames });\n return;\n }\n\n for (const name of agentCodeNames) {\n info(` ${name}`);\n }\n } catch (err) {\n spinner.fail('Failed to unassign agents.');\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n }\n}\n\n// ---------------------------------------------------------------------------\n// agt host agents [host-name]\n// ---------------------------------------------------------------------------\n\nexport async function hostAgentsCommand(hostName?: string): Promise<void> {\n const json = isJsonMode();\n const spinner = ora({ text: 'Fetching host agents\\u2026', isSilent: json });\n spinner.start();\n\n try {\n // If no host name given, use the API key's host identity via /host/agents\n const hostId = await getHostId();\n\n if (!hostName && !hostId) {\n spinner.fail('No host specified.');\n if (json) {\n jsonOutput({ ok: false, error: 'Provide a host name or use an AGT_API_KEY' });\n } else {\n error('Provide a host name, or set AGT_API_KEY to auto-resolve the host.');\n }\n process.exitCode = 1;\n return;\n }\n\n let agents: Array<{\n code_name: string;\n display_name: string;\n status: string;\n environment: string;\n risk_tier?: string;\n assigned_at?: string;\n }>;\n\n if (hostId && !hostName) {\n // Host runtime path — resolve from API key\n const data = await api.post<{\n agents: typeof agents;\n }>('/host/agents', { host_id: hostId });\n agents = data.agents ?? [];\n } else {\n // Dashboard path — look up by name\n const teamSlug = requireTeam();\n if (!teamSlug) return;\n\n const data = await api.get<{\n agents: typeof agents;\n }>(`/hosts/${encodeURIComponent(hostName!)}/agents`);\n agents = data.agents ?? [];\n }\n\n spinner.stop();\n\n if (agents.length === 0) {\n if (json) {\n jsonOutput({ ok: true, agents: [] });\n } else {\n info('No agents assigned to this host.');\n info('Assign agents with `agt host assign <host-name> <agent-code-name>`.');\n }\n return;\n }\n\n if (json) {\n jsonOutput({ ok: true, agents });\n return;\n }\n\n const rows = agents.map((a) => {\n const statusColor = a.status === 'active' ? chalk.green : chalk.yellow;\n return [\n a.code_name,\n a.display_name,\n statusColor(a.status),\n a.environment,\n ];\n });\n\n table(['Code Name', 'Display Name', 'Status', 'Environment'], rows);\n } catch (err) {\n spinner.fail('Failed to fetch host agents.');\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n }\n}\n\n// ---------------------------------------------------------------------------\n// agt host rotate-key\n// ---------------------------------------------------------------------------\n\nexport async function hostRotateKeyCommand(hostName: string): Promise<void> {\n const teamSlug = requireTeam();\n if (!teamSlug) return;\n\n const json = isJsonMode();\n const spinner = ora({ text: 'Rotating host key\\u2026', isSilent: json });\n spinner.start();\n\n try {\n const data = await api.post<{\n ok: boolean;\n host: string;\n key: { prefix: string; raw_key: string };\n }>(`/hosts/${encodeURIComponent(hostName)}/rotate-key`);\n\n spinner.succeed(`Key rotated for ${chalk.bold(hostName)}.`);\n\n if (json) {\n jsonOutput({\n ok: true,\n host: hostName,\n key: data.key,\n });\n return;\n }\n\n console.log();\n info(`Host: ${chalk.bold(hostName)}`);\n info(`Prefix: ${data.key.prefix}`);\n console.log();\n console.log(chalk.yellow.bold(' Save this key now \\u2014 it will not be shown again:'));\n console.log();\n console.log(` ${chalk.green.bold(data.key.raw_key)}`);\n console.log();\n } catch (err) {\n spinner.fail('Failed to rotate key.');\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n }\n}\n\n// ---------------------------------------------------------------------------\n// agt host decommission\n// ---------------------------------------------------------------------------\n\nexport async function hostDecommissionCommand(hostName: string): Promise<void> {\n const teamSlug = requireTeam();\n if (!teamSlug) return;\n\n const json = isJsonMode();\n const spinner = ora({ text: 'Decommissioning host\\u2026', isSilent: json });\n spinner.start();\n\n try {\n await api.post(`/hosts/${encodeURIComponent(hostName)}/decommission`);\n\n spinner.succeed(`Host \"${chalk.bold(hostName)}\" decommissioned.`);\n\n if (json) {\n jsonOutput({\n ok: true,\n host: hostName,\n status: 'decommissioned',\n });\n return;\n }\n\n info(`Host: ${hostName}`);\n info(`Status: ${chalk.red('decommissioned')}`);\n info('API key revoked. Agents remain assigned for audit visibility.');\n info('Reassign agents to another host with `agt host assign --force`.');\n } catch (err) {\n spinner.fail('Failed to decommission host.');\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n }\n}\n","import chalk from 'chalk';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport { getApiKey, AGT_HOST } from '../lib/config.js';\nimport { startWatchdog, stopWatchdog, getManagerStatus } from '../lib/watchdog.js';\nimport { success, error, info, table } from '../lib/output.js';\nimport { isJsonMode, jsonOutput } from '../lib/globals.js';\n\n// ---------------------------------------------------------------------------\n// agt manager start\n// ---------------------------------------------------------------------------\n\ninterface ManagerStartOptions {\n interval?: string;\n configDir?: string;\n}\n\nexport function managerStartCommand(opts: ManagerStartOptions): void {\n const json = isJsonMode();\n\n // Validate required env vars\n if (!AGT_HOST) {\n const msg = 'AGT_HOST is not set. Export it to point at the Augmented API (e.g. export AGT_HOST=https://your-api.example.com)';\n if (json) { jsonOutput({ ok: false, error: msg }); } else { error(msg); }\n process.exitCode = 1;\n return;\n }\n\n const apiKey = getApiKey();\n if (!apiKey) {\n const msg = 'AGT_API_KEY is not set. Export it with your host API key (tlk_...)';\n if (json) { jsonOutput({ ok: false, error: msg }); } else { error(msg); }\n process.exitCode = 1;\n return;\n }\n\n const intervalSec = parseInt(opts.interval ?? '10', 10);\n if (isNaN(intervalSec) || intervalSec < 5) {\n if (json) {\n jsonOutput({ ok: false, error: 'Interval must be at least 10 seconds' });\n } else {\n error('Interval must be at least 10 seconds.');\n }\n process.exitCode = 1;\n return;\n }\n\n const configDir = opts.configDir ?? join(homedir(), '.augmented');\n\n try {\n const { pid } = startWatchdog({\n intervalMs: intervalSec * 1000,\n configDir,\n });\n\n if (json) {\n jsonOutput({ ok: true, pid, interval: intervalSec, configDir });\n } else {\n success(`Manager started (PID ${pid}, interval ${intervalSec}s)`);\n info(`Config dir: ${configDir}`);\n info('Stop with: agt manager stop');\n }\n } catch (err) {\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n }\n}\n\n// ---------------------------------------------------------------------------\n// agt manager stop\n// ---------------------------------------------------------------------------\n\nexport async function managerStopCommand(): Promise<void> {\n const json = isJsonMode();\n\n try {\n const result = await stopWatchdog();\n\n if (!result.stopped && !result.pid) {\n if (json) {\n jsonOutput({ ok: false, error: 'Manager is not running' });\n } else {\n error('Manager is not running.');\n }\n process.exitCode = 1;\n return;\n }\n\n if (json) {\n jsonOutput({ ok: true, stopped: true, pid: result.pid });\n } else {\n success(`Manager stopped (PID ${result.pid})`);\n }\n } catch (err) {\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n }\n}\n\n// ---------------------------------------------------------------------------\n// agt manager status\n// ---------------------------------------------------------------------------\n\nexport function managerStatusCommand(): void {\n const json = isJsonMode();\n\n const status = getManagerStatus();\n\n if (!status) {\n if (json) {\n jsonOutput({ ok: true, running: false });\n } else {\n info('Manager is not running.');\n }\n return;\n }\n\n if (json) {\n jsonOutput({ ok: true, running: true, ...status });\n return;\n }\n\n console.log(chalk.bold('\\nManager Status\\n'));\n\n info(`PID: ${status.pid}`);\n info(`Started: ${status.startedAt}`);\n info(`Last poll: ${status.lastPollAt ?? chalk.dim('none')}`);\n info(`Polls: ${status.pollCount}`);\n info(`Errors: ${status.errorCount}`);\n console.log();\n\n if (status.agents.length === 0) {\n info('No agents discovered yet.');\n return;\n }\n\n const rows = status.agents.map((a) => {\n let gwStatus = chalk.dim('—');\n if (a.gatewayRunning) {\n gwStatus = chalk.green(`:${a.gatewayPort} (PID ${a.gatewayPid})`);\n } else if (a.gatewayPort) {\n gwStatus = chalk.red(`:${a.gatewayPort} (down)`);\n }\n\n return [\n a.codeName,\n a.status === 'active' ? chalk.green(a.status) : a.status === 'paused' ? chalk.yellow(a.status) : chalk.dim(a.status ?? '—'),\n a.charterVersion || chalk.dim('—'),\n gwStatus,\n a.lastProvisionAt ? new Date(a.lastProvisionAt).toLocaleTimeString() : chalk.dim('—'),\n a.lastDriftCheckAt ? new Date(a.lastDriftCheckAt).toLocaleTimeString() : chalk.dim('—'),\n ];\n });\n\n table(\n ['Agent', 'Status', 'Charter', 'Gateway', 'Last Provision', 'Last Drift'],\n rows,\n );\n\n // Show ACP sessions if any agent has active ones\n const acpAgents = status.agents.filter((a) => a.acpSessions && a.acpSessions.length > 0);\n if (acpAgents.length > 0) {\n console.log(chalk.bold('\\nACP Sessions\\n'));\n const acpRows = acpAgents.flatMap((a) =>\n a.acpSessions.map((s) => [\n a.codeName,\n s.agentCommand,\n s.sessionName ?? chalk.dim('default'),\n s.queueState === 'running' ? chalk.green(s.queueState) : s.queueState === 'queued' ? chalk.yellow(s.queueState) : chalk.dim(s.queueState),\n String(s.turnCount),\n new Date(s.startedAt).toLocaleTimeString(),\n ]),\n );\n table(\n ['Agent', 'Coding Agent', 'Session', 'Queue', 'Turns', 'Started'],\n acpRows,\n );\n }\n}\n","/**\n * Manager process — single-process manager with PID management and state files.\n * No fork/IPC — the poll loop runs directly in this process.\n */\n\nimport { readFileSync, writeFileSync, unlinkSync, existsSync, mkdirSync } from 'node:fs';\nimport { join } from 'node:path';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface WatchdogOptions {\n intervalMs: number;\n configDir: string;\n}\n\nexport interface ManagerStatus {\n pid: number;\n startedAt: string;\n lastPollAt: string | null;\n pollCount: number;\n errorCount: number;\n agents: Array<{\n agentId: string;\n codeName: string;\n status: string;\n charterVersion: string;\n toolsVersion: string;\n lastRefreshAt: string | null;\n lastProvisionAt: string | null;\n lastDriftCheckAt: string | null;\n gatewayPort: number | null;\n gatewayPid: number | null;\n gatewayRunning: boolean;\n acpSessions: Array<{\n sessionId: string;\n agentCommand: string;\n sessionName?: string;\n queueState: string;\n turnCount: number;\n startedAt: string;\n }>;\n }>;\n}\n\n// ---------------------------------------------------------------------------\n// Paths\n// ---------------------------------------------------------------------------\n\nconst AUGMENTED_DIR = join(process.env['HOME'] ?? '/tmp', '.augmented');\nconst PID_FILE = join(AUGMENTED_DIR, 'manager.pid');\nconst STATE_FILE = join(AUGMENTED_DIR, 'manager-state.json');\n\nfunction ensureDir(): void {\n if (!existsSync(AUGMENTED_DIR)) {\n mkdirSync(AUGMENTED_DIR, { recursive: true });\n }\n}\n\n// ---------------------------------------------------------------------------\n// PID file management\n// ---------------------------------------------------------------------------\n\nfunction writePidFile(pid: number): void {\n ensureDir();\n writeFileSync(PID_FILE, String(pid), { mode: 0o600 });\n}\n\nfunction readPidFile(): number | null {\n try {\n const raw = readFileSync(PID_FILE, 'utf-8').trim();\n const pid = parseInt(raw, 10);\n return isNaN(pid) ? null : pid;\n } catch {\n return null;\n }\n}\n\nfunction removePidFile(): void {\n try {\n unlinkSync(PID_FILE);\n } catch {\n // may not exist\n }\n}\n\nfunction isProcessAlive(pid: number): boolean {\n try {\n process.kill(pid, 0);\n return true;\n } catch {\n return false;\n }\n}\n\n// ---------------------------------------------------------------------------\n// State file management\n// ---------------------------------------------------------------------------\n\nfunction readStateFile(): ManagerStatus | null {\n try {\n const raw = readFileSync(STATE_FILE, 'utf-8');\n return JSON.parse(raw) as ManagerStatus;\n } catch {\n return null;\n }\n}\n\nfunction removeStateFile(): void {\n try {\n unlinkSync(STATE_FILE);\n } catch {\n // may not exist\n }\n}\n\n// ---------------------------------------------------------------------------\n// Manager (single-process, no fork)\n// ---------------------------------------------------------------------------\n\n/**\n * Start the manager. Runs the poll loop directly in this process.\n * This function does not return until the process is stopped.\n */\nexport function startWatchdog(opts: WatchdogOptions): { pid: number } {\n // Check for existing process\n const existingPid = readPidFile();\n if (existingPid !== null) {\n if (isProcessAlive(existingPid)) {\n throw new Error(`Manager already running (PID ${existingPid}). Use \\`agt manager stop\\` first.`);\n }\n // Stale PID file — clean up\n removePidFile();\n removeStateFile();\n }\n\n // Write PID file\n writePidFile(process.pid);\n\n // Import and start the manager worker directly (no fork)\n // Dynamic import to avoid circular dependency at module load time\n void import('./manager-worker.js').then(({ startManager }) => {\n startManager({\n intervalMs: opts.intervalMs,\n configDir: opts.configDir,\n });\n });\n\n // Clean up PID file on exit\n process.on('exit', () => {\n removePidFile();\n });\n\n return { pid: process.pid };\n}\n\n/**\n * Stop a running manager by reading the PID file and sending SIGTERM.\n */\nexport async function stopWatchdog(): Promise<{ stopped: boolean; pid?: number }> {\n const pid = readPidFile();\n if (pid === null) {\n return { stopped: false };\n }\n\n if (!isProcessAlive(pid)) {\n // Stale PID — clean up\n removePidFile();\n removeStateFile();\n return { stopped: true, pid };\n }\n\n // Send SIGTERM\n process.kill(pid, 'SIGTERM');\n\n // Poll for up to 5 seconds until the process exits\n const deadline = Date.now() + 5_000;\n while (Date.now() < deadline) {\n await new Promise((r) => setTimeout(r, 200));\n if (!isProcessAlive(pid)) {\n removePidFile();\n return { stopped: true, pid };\n }\n }\n\n // Still alive after 5s — force kill\n try {\n process.kill(pid, 'SIGKILL');\n } catch {\n // may have died between checks\n }\n removePidFile();\n removeStateFile();\n return { stopped: true, pid };\n}\n\n/**\n * Get the current manager status by reading PID + state files.\n */\nexport function getManagerStatus(): ManagerStatus | null {\n const pid = readPidFile();\n if (pid === null) return null;\n\n if (!isProcessAlive(pid)) {\n removePidFile();\n removeStateFile();\n return null;\n }\n\n return readStateFile();\n}\n","import chalk from 'chalk';\nimport JSON5 from 'json5';\nimport { readFileSync, existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport {\n extractFrontmatter,\n getChannel,\n type CharterFrontmatter,\n type ToolsFrontmatter,\n} from '@augmented/core';\nimport { error, info, table } from '../lib/output.js';\nimport { isJsonMode, jsonOutput } from '../lib/globals.js';\nimport { api } from '../lib/api-client.js';\nimport { getApiKey } from '../lib/config.js';\n\ninterface AgentShowOptions {\n configDir: string;\n allChannels?: boolean;\n}\n\nexport async function agentShowCommand(\n codeName: string,\n opts: AgentShowOptions,\n): Promise<void> {\n const json = isJsonMode();\n const agentDir = join(opts.configDir, codeName, 'provision');\n const hasLocalConfig = existsSync(agentDir);\n\n // ── Try API first for channel data ─────────────────────────────────────\n\n type ApiChannelConfig = {\n channel_id: string;\n config: Record<string, unknown>;\n status: string;\n };\n\n let apiChannels: ApiChannelConfig[] | null = null;\n let apiAgent: Record<string, unknown> | null = null;\n\n if (getApiKey()) {\n try {\n const data = await api.get<{\n agent: Record<string, unknown>;\n channel_configs: Record<string, { config: Record<string, unknown>; status: string }>;\n }>(`/agents/${encodeURIComponent(codeName)}/provision-data`);\n\n apiAgent = data.agent ?? null;\n\n if (data.channel_configs) {\n apiChannels = Object.entries(data.channel_configs).map(\n ([channelId, val]) => ({\n channel_id: channelId,\n config: val.config,\n status: val.status,\n }),\n );\n }\n } catch {\n // API not available or agent not found — continue with local data\n }\n }\n\n // If no local config and no API data, agent doesn't exist anywhere\n if (!hasLocalConfig && !apiAgent) {\n if (json) {\n jsonOutput({ ok: false, error: `Agent '${codeName}' not found` });\n } else {\n error(`Agent '${codeName}' not found`);\n }\n process.exitCode = 1;\n return;\n }\n\n // ── Read local files (best-effort) ────────────────────────────────────\n\n let charter: CharterFrontmatter | null = null;\n let tools: ToolsFrontmatter | null = null;\n let openclawConfig: Record<string, unknown> | null = null;\n let agentState: {\n charterVersion: string;\n toolsVersion: string;\n lastProvisionAt: string | null;\n lastDriftCheckAt: string | null;\n } | null = null;\n\n if (hasLocalConfig) {\n // CHARTER.md\n const charterPath = join(agentDir, 'CHARTER.md');\n if (existsSync(charterPath)) {\n const raw = readFileSync(charterPath, 'utf-8');\n const parsed = extractFrontmatter(raw);\n if (parsed.frontmatter) {\n charter = parsed.frontmatter as unknown as CharterFrontmatter;\n }\n }\n\n // TOOLS.md\n const toolsPath = join(agentDir, 'TOOLS.md');\n if (existsSync(toolsPath)) {\n const raw = readFileSync(toolsPath, 'utf-8');\n const parsed = extractFrontmatter(raw);\n if (parsed.frontmatter) {\n tools = parsed.frontmatter as unknown as ToolsFrontmatter;\n }\n }\n\n // openclaw.json5\n const openclawPath = join(agentDir, 'openclaw.json5');\n if (existsSync(openclawPath)) {\n try {\n const raw = readFileSync(openclawPath, 'utf-8');\n openclawConfig = JSON5.parse(raw) as Record<string, unknown>;\n } catch {\n // ignore parse errors — show what we can\n }\n }\n\n // manager-state.json\n const statePath = join(opts.configDir, 'manager-state.json');\n if (existsSync(statePath)) {\n try {\n const raw = readFileSync(statePath, 'utf-8');\n const state = JSON.parse(raw) as {\n agents: Array<{\n codeName: string;\n charterVersion: string;\n toolsVersion: string;\n lastProvisionAt: string | null;\n lastDriftCheckAt: string | null;\n }>;\n };\n agentState = state.agents?.find((a) => a.codeName === codeName) ?? null;\n } catch {\n // ignore\n }\n }\n }\n\n // ── Resolve channel data ────────────────────────────────────────────────\n // Prefer API channel data over local openclaw.json5 since the webapp/API\n // is the source of truth for channel configuration.\n\n type ChannelRow = {\n id: string;\n name: string;\n tier: string;\n enabled: boolean;\n status: string;\n e2e: string;\n };\n\n const channelRows: ChannelRow[] = [];\n\n if (apiChannels && apiChannels.length > 0) {\n // Use API channel configs (source of truth)\n for (const ch of apiChannels) {\n const def = getChannel(ch.channel_id);\n channelRows.push({\n id: ch.channel_id,\n name: def?.name ?? ch.channel_id,\n tier: def?.securityTier ?? 'unknown',\n enabled: true,\n status: ch.status,\n e2e: def ? String(def.e2eEncrypted) : '—',\n });\n }\n } else {\n // Fall back to local openclaw.json5 channels\n const openclawChannels = Array.isArray(openclawConfig?.channels)\n ? (openclawConfig!.channels as Array<{ id: string; enabled?: boolean }>)\n : [];\n\n for (const ch of openclawChannels) {\n const def = getChannel(ch.id);\n channelRows.push({\n id: ch.id,\n name: def?.name ?? ch.id,\n tier: def?.securityTier ?? 'unknown',\n enabled: ch.enabled !== false,\n status: ch.enabled !== false ? 'configured' : 'disabled',\n e2e: def ? String(def.e2eEncrypted) : '—',\n });\n }\n }\n\n // ── JSON output ─────────────────────────────────────────────────────────\n\n if (json) {\n const filtered = opts.allChannels ? channelRows : channelRows.filter((c) => c.enabled);\n jsonOutput({\n ok: true,\n agent: {\n code_name: codeName,\n display_name: (apiAgent?.display_name as string) ?? charter?.display_name ?? null,\n agent_id: (apiAgent?.agent_id as string) ?? charter?.agent_id ?? null,\n environment: (apiAgent?.environment as string) ?? charter?.environment ?? null,\n risk_tier: (apiAgent?.risk_tier as string) ?? charter?.risk_tier ?? null,\n owner: charter?.owner ?? null,\n logging_mode: charter?.logging_mode ?? null,\n budget: charter?.budget ?? null,\n limits: charter?.limits ?? null,\n },\n versions: {\n charter: agentState?.charterVersion ?? charter?.version ?? null,\n tools: agentState?.toolsVersion ?? tools?.version ?? null,\n last_provision: agentState?.lastProvisionAt ?? null,\n last_drift_check: agentState?.lastDriftCheckAt ?? null,\n },\n tools: {\n enforcement_mode: tools?.enforcement_mode ?? null,\n global_controls: tools?.global_controls ?? null,\n count: tools?.tools?.length ?? 0,\n items: tools?.tools ?? [],\n },\n channels: filtered,\n openclaw: openclawConfig\n ? { sandbox: (openclawConfig as any).sandbox ?? null, gateway: (openclawConfig as any).gateway ?? null }\n : null,\n });\n return;\n }\n\n // ── Human output ────────────────────────────────────────────────────────\n\n const displayName = (apiAgent?.display_name as string) ?? charter?.display_name ?? codeName;\n console.log(chalk.bold(`\\nAgent: ${codeName}`) + (displayName !== codeName ? ` (${displayName})` : '') + '\\n');\n\n if (charter || apiAgent) {\n const agentId = (apiAgent?.agent_id as string) ?? charter?.agent_id;\n const environment = (apiAgent?.environment as string) ?? charter?.environment;\n const riskTier = (apiAgent?.risk_tier as string) ?? charter?.risk_tier;\n\n info(`Agent ID: ${agentId ?? '—'}`);\n info(`Environment: ${environment ?? '—'}`);\n info(`Risk Tier: ${riskTier ?? '—'}`);\n info(`Owner: ${charter?.owner?.name ?? '—'}`);\n\n const charterVer = agentState?.charterVersion ?? charter?.version;\n const toolsVer = agentState?.toolsVersion ?? tools?.version ?? '—';\n const provTs = agentState?.lastProvisionAt\n ? formatTimestamp(agentState.lastProvisionAt)\n : null;\n\n if (charterVer) {\n info(`Charter: v${charterVer}${provTs ? ` (provisioned ${provTs})` : ''}`);\n }\n if (toolsVer !== '—') {\n info(`Tools: v${toolsVer}${provTs ? ` (provisioned ${provTs})` : ''}`);\n }\n\n // Sandbox\n const sandbox = openclawConfig ? (openclawConfig as any).sandbox : null;\n if (sandbox != null) {\n info(`Sandbox: ${sandbox ? 'on' : 'off'}`);\n }\n\n // Budget\n const b = charter?.budget;\n if (b) {\n const budgetStr = `${b.limit.toLocaleString()} ${b.type} / ${b.window} (${b.enforcement ?? 'block'})`;\n info(`Budget: ${budgetStr}`);\n }\n } else {\n info('No agent metadata available');\n }\n\n // ── Channels table ──────────────────────────────────────────────────────\n\n const filtered = opts.allChannels ? channelRows : channelRows.filter((c) => c.enabled);\n\n console.log(chalk.bold('\\nChannels:'));\n\n if (filtered.length === 0) {\n info('(none enabled)');\n } else {\n table(\n ['Channel', 'Name', 'Tier', 'Status', 'E2E'],\n filtered.map((c) => [\n c.id,\n c.name,\n c.tier,\n c.status,\n c.e2e,\n ]),\n );\n }\n\n // ── Tools ───────────────────────────────────────────────────────────────\n\n if (tools) {\n console.log(chalk.bold('\\nTools:'));\n\n if (tools.tools.length === 0) {\n info('(none configured)');\n } else {\n table(\n ['ID', 'Name', 'Type', 'Access', 'Enforcement'],\n tools.tools.map((t) => [t.id, t.name, t.type, t.access, t.enforcement]),\n );\n }\n\n // Global controls\n if (tools.global_controls) {\n const gc = tools.global_controls;\n console.log(chalk.bold('\\nGlobal Controls:'));\n info(`Network: ${gc.default_network_policy === 'deny' ? 'deny-by-default' : 'allow-by-default'}`);\n info(`Timeout: ${gc.default_timeout_ms}ms`);\n info(`Rate: ${gc.default_rate_limit_rpm} rpm`);\n info(`Retries: ${gc.default_retries}`);\n }\n }\n\n console.log();\n}\n\nfunction formatTimestamp(iso: string): string {\n const d = new Date(iso);\n const pad = (n: number) => String(n).padStart(2, '0');\n return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}`;\n}\n","import chalk from 'chalk';\nimport ora from 'ora';\nimport { requireTeam } from '../lib/auth-guard.js';\nimport { api, ApiError } from '../lib/api-client.js';\nimport { success, error, info, table } from '../lib/output.js';\nimport { isJsonMode, jsonOutput } from '../lib/globals.js';\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\ninterface RecurringTemplate {\n id: string;\n title: string;\n kind: string;\n expression?: string;\n every_interval?: string;\n natural_language?: string;\n timezone: string;\n enabled: boolean;\n next_spawn_at?: string;\n last_spawned_at?: string;\n spawn_count: number;\n priority: number;\n created_at: string;\n}\n\nasync function resolveAgentId(codeName: string): Promise<string | null> {\n try {\n const data = await api.get<{ agent_id: string }>(`/agents/${codeName}`);\n return data.agent_id;\n } catch (err) {\n if (err instanceof ApiError && err.status === 404) return null;\n throw err;\n }\n}\n\nfunction priorityLabel(p: number): string {\n return p === 1 ? chalk.red('HIGH') : p === 3 ? chalk.dim('LOW') : chalk.yellow('MED');\n}\n\nfunction formatSpawnTime(isoDate: string | undefined, timezone: string): string {\n if (!isoDate) return chalk.dim('—');\n try {\n return new Intl.DateTimeFormat('en-AU', {\n dateStyle: 'medium',\n timeStyle: 'short',\n timeZone: timezone,\n }).format(new Date(isoDate));\n } catch {\n return new Date(isoDate).toLocaleString();\n }\n}\n\n// ---------------------------------------------------------------------------\n// agt kanban recurring add\n// ---------------------------------------------------------------------------\n\nexport async function kanbanRecurringAddCommand(\n title: string,\n opts: {\n agent: string;\n every: string;\n priority?: string;\n description?: string;\n estimate?: string;\n deliverable?: string;\n timezone?: string;\n },\n): Promise<void> {\n const teamSlug = requireTeam();\n if (!teamSlug) return;\n const json = isJsonMode();\n\n // Validate numeric inputs\n let priority: number | undefined;\n if (opts.priority) {\n priority = Number(opts.priority);\n if (!Number.isInteger(priority) || priority < 1 || priority > 3) {\n if (json) {\n jsonOutput({ ok: false, error: 'Priority must be 1, 2, or 3' });\n } else {\n error('Priority must be 1 (high), 2 (medium), or 3 (low)');\n }\n process.exitCode = 1;\n return;\n }\n }\n\n let estimatedMinutes: number | undefined;\n if (opts.estimate) {\n estimatedMinutes = Number(opts.estimate);\n if (!Number.isInteger(estimatedMinutes) || estimatedMinutes <= 0) {\n if (json) {\n jsonOutput({ ok: false, error: 'Estimate must be a positive integer (minutes)' });\n } else {\n error('Estimate must be a positive integer (minutes)');\n }\n process.exitCode = 1;\n return;\n }\n }\n\n const spinner = ora({ text: 'Creating recurring template…', isSilent: json });\n spinner.start();\n\n const agentId = await resolveAgentId(opts.agent);\n if (!agentId) {\n spinner.fail(`Agent \"${opts.agent}\" not found`);\n process.exitCode = 1;\n return;\n }\n\n try {\n const data = await api.post<{ template: RecurringTemplate }>('/host/kanban/recurring', {\n agent_id: agentId,\n title,\n description: opts.description ?? undefined,\n priority,\n estimated_minutes: estimatedMinutes,\n deliverable: opts.deliverable ?? undefined,\n schedule: opts.every,\n timezone: opts.timezone ?? undefined,\n });\n\n spinner.stop();\n\n if (json) {\n jsonOutput({ ok: true, template: data.template });\n return;\n }\n\n success(`Recurring task created: ${chalk.bold(title)}`);\n info(`Schedule: ${chalk.cyan(data.template.natural_language ?? data.template.expression ?? data.template.every_interval ?? '')}`);\n info(`Next spawn: ${formatSpawnTime(data.template.next_spawn_at, data.template.timezone)}`);\n info(`Timezone: ${data.template.timezone}`);\n } catch (err) {\n spinner.fail('Failed to create recurring template');\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n }\n}\n\n// ---------------------------------------------------------------------------\n// agt kanban recurring list\n// ---------------------------------------------------------------------------\n\nexport async function kanbanRecurringListCommand(\n opts: { agent: string },\n): Promise<void> {\n const teamSlug = requireTeam();\n if (!teamSlug) return;\n const json = isJsonMode();\n\n const spinner = ora({ text: 'Fetching recurring templates…', isSilent: json });\n spinner.start();\n\n const agentId = await resolveAgentId(opts.agent);\n if (!agentId) {\n spinner.fail(`Agent \"${opts.agent}\" not found`);\n process.exitCode = 1;\n return;\n }\n\n try {\n const data = await api.get<{ templates: RecurringTemplate[] }>(\n `/host/kanban/recurring?agent_id=${agentId}`,\n );\n\n spinner.stop();\n\n if (json) {\n jsonOutput({ ok: true, templates: data.templates });\n return;\n }\n\n if (data.templates.length === 0) {\n info('No recurring templates found.');\n return;\n }\n\n const rows = data.templates.map((t) => [\n t.id.slice(0, 8),\n t.title,\n t.natural_language ?? t.expression ?? t.every_interval ?? '—',\n priorityLabel(t.priority),\n t.enabled ? chalk.green('Active') : chalk.dim('Disabled'),\n formatSpawnTime(t.next_spawn_at, t.timezone),\n String(t.spawn_count),\n ]);\n\n table(\n ['ID', 'Title', 'Schedule', 'Priority', 'Status', 'Next Spawn', 'Spawned'],\n rows,\n );\n } catch (err) {\n spinner.fail('Failed to fetch recurring templates');\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n }\n}\n\n// ---------------------------------------------------------------------------\n// agt kanban recurring disable\n// ---------------------------------------------------------------------------\n\nexport async function kanbanRecurringDisableCommand(\n titleOrId: string,\n opts: { agent: string },\n): Promise<void> {\n const teamSlug = requireTeam();\n if (!teamSlug) return;\n const json = isJsonMode();\n\n const spinner = ora({ text: 'Disabling recurring template…', isSilent: json });\n spinner.start();\n\n const agentId = await resolveAgentId(opts.agent);\n if (!agentId) {\n spinner.fail(`Agent \"${opts.agent}\" not found`);\n process.exitCode = 1;\n return;\n }\n\n try {\n const data = await api.get<{ templates: RecurringTemplate[] }>(\n `/host/kanban/recurring?agent_id=${agentId}`,\n );\n\n const matches = data.templates.filter(\n (t) => t.id.startsWith(titleOrId) || t.title.toLowerCase() === titleOrId.toLowerCase(),\n );\n\n if (matches.length === 0) {\n spinner.fail(`Recurring template \"${titleOrId}\" not found`);\n process.exitCode = 1;\n return;\n }\n\n if (matches.length > 1) {\n spinner.fail(`Ambiguous match for \"${titleOrId}\" — ${matches.length} templates found:`);\n for (const m of matches) {\n info(` ${m.id.slice(0, 8)} — ${m.title}`);\n }\n info('Use a longer ID prefix to disambiguate.');\n process.exitCode = 1;\n return;\n }\n\n const match = matches[0]!;\n await api.patch(`/host/kanban/recurring/${match.id}`, { enabled: false });\n spinner.stop();\n\n if (json) {\n jsonOutput({ ok: true, id: match.id, title: match.title, enabled: false });\n } else {\n success(`Disabled: ${chalk.bold(match.title)}`);\n }\n } catch (err) {\n spinner.fail('Failed to disable recurring template');\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n }\n}\n","import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';\nimport { join, dirname } from 'node:path';\nimport { homedir } from 'node:os';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { success, error, info, warn } from '../lib/output.js';\nimport { isJsonMode, jsonOutput } from '../lib/globals.js';\nimport { exchangeApiKey } from '../lib/api-client.js';\nimport { startWatchdog } from '../lib/watchdog.js';\n\n/**\n * Detect the user's shell profile file.\n * Returns the path to the most appropriate profile file.\n */\nfunction detectShellProfile(): string {\n const shell = process.env['SHELL'] ?? '';\n const home = homedir();\n\n if (shell.includes('zsh')) {\n // Always use .zshrc — it's sourced by interactive shells.\n // .zprofile is only sourced by login shells and won't be read by subprocesses.\n return join(home, '.zshrc');\n }\n\n if (shell.includes('fish')) {\n const fishConfig = join(home, '.config', 'fish', 'config.fish');\n return fishConfig;\n }\n\n // Default to bash\n const bashrc = join(home, '.bashrc');\n if (existsSync(bashrc)) return bashrc;\n return join(home, '.bash_profile');\n}\n\n/**\n * Build export lines for the shell profile.\n */\nfunction buildExportLines(shell: string, apiUrl: string, apiKey: string): string {\n if (shell.includes('fish')) {\n return [\n '',\n '# Augmented (agt) host configuration',\n `set -gx AGT_HOST \"${apiUrl}\"`,\n `set -gx AGT_API_KEY \"${apiKey}\"`,\n '',\n ].join('\\n');\n }\n\n return [\n '',\n '# Augmented (agt) host configuration',\n `export AGT_HOST=\"${apiUrl}\"`,\n `export AGT_API_KEY=\"${apiKey}\"`,\n '',\n ].join('\\n');\n}\n\nexport async function setupCommand(token: string): Promise<void> {\n const json = isJsonMode();\n\n // Accept both new short format (XXXX-XXXX) and legacy prov_ format\n const shortTokenPattern = /^[A-HJ-NP-Z2-9]{4}-[A-HJ-NP-Z2-9]{4}$/i;\n const legacyTokenPattern = /^prov_[a-f0-9]{64}$/i;\n if (!token || (!shortTokenPattern.test(token) && !legacyTokenPattern.test(token))) {\n if (json) {\n jsonOutput({ ok: false, error: 'Invalid provisioning token. Expected format: XXXX-XXXX or prov_<64 hex>' });\n } else {\n error('Invalid provisioning token. Expected format: XXXX-XXXX or prov_<64 hex>');\n info('Get a provisioning token from the Augmented dashboard after creating a host.');\n }\n process.exitCode = 1;\n return;\n }\n\n // Normalize: short tokens to uppercase, legacy tokens to lowercase\n const normalizedToken = shortTokenPattern.test(token) ? token.toUpperCase() : token.toLowerCase();\n\n // Step 1: Determine API URL\n // If AGT_HOST is already set, use it. Otherwise try to infer from common defaults.\n let apiUrl = process.env['AGT_HOST'];\n if (!apiUrl) {\n // Default to the production API\n apiUrl = 'https://api.augmented.team';\n if (!json) {\n info(`No AGT_HOST set — using default: ${chalk.bold(apiUrl)}`);\n }\n }\n\n // Step 2: Exchange provisioning token\n const spinner = ora({ text: 'Exchanging provisioning token\\u2026', isSilent: json });\n spinner.start();\n\n let setupResult: {\n host_name: string;\n host_id: string;\n team_slug: string | null;\n api_url: string;\n api_key: string;\n agents: string[];\n };\n\n try {\n const res = await fetch(`${apiUrl}/host/setup`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ token: normalizedToken }),\n });\n\n if (!res.ok) {\n const body = await res.json().catch(() => ({})) as Record<string, unknown>;\n throw new Error((body['error'] as string) ?? `Setup failed: HTTP ${res.status}`);\n }\n\n setupResult = await res.json() as typeof setupResult;\n spinner.succeed('Provisioning token accepted');\n } catch (err) {\n spinner.fail('Failed to exchange provisioning token');\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n return;\n }\n\n // Use the API URL returned by the server (more authoritative)\n const finalApiUrl = setupResult.api_url || apiUrl;\n\n // Set for current process so verification can run\n process.env['AGT_HOST'] = finalApiUrl;\n process.env['AGT_API_KEY'] = setupResult.api_key;\n\n // Step 3: Verify connection before writing anything to disk\n const verifySpinner = ora({ text: 'Verifying connection\\u2026', isSilent: json });\n verifySpinner.start();\n\n try {\n const exchange = await exchangeApiKey(setupResult.api_key);\n verifySpinner.succeed('Connection verified');\n\n if (!json) {\n info(`Host: ${chalk.bold(setupResult.host_name)}`);\n info(`Host ID: ${exchange.hostId}`);\n info(`Team: ${chalk.bold(exchange.teamSlug ?? setupResult.team_slug ?? 'unknown')}`);\n if (exchange.userEmail) {\n info(`User: ${chalk.bold(exchange.userEmail)}`);\n }\n }\n } catch (err) {\n verifySpinner.fail('Connection verification failed');\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n info('Connection could not be verified. No changes were written to your shell profile.');\n info('Check your network connection and try: agt whoami');\n }\n process.exitCode = 1;\n return;\n }\n\n // Step 4: Write env vars to shell profile (only after successful verification)\n const profilePath = detectShellProfile();\n const shell = process.env['SHELL'] ?? 'bash';\n\n const exportLines = buildExportLines(shell, finalApiUrl, setupResult.api_key);\n const profileDir = dirname(profilePath);\n if (!existsSync(profileDir)) {\n mkdirSync(profileDir, { recursive: true });\n }\n\n // Replace existing block if present, otherwise append\n const marker = '# Augmented (agt) host configuration';\n const current = existsSync(profilePath) ? readFileSync(profilePath, 'utf-8') : '';\n let updated: string;\n if (current.includes(marker)) {\n updated = current.replace(\n /# Augmented \\(agt\\) host configuration[\\s\\S]*?(?=\\n# |\\s*$)/m,\n exportLines.trimEnd(),\n );\n if (!json) {\n info('Replacing existing Augmented config block in shell profile.');\n }\n } else {\n updated = current + exportLines;\n }\n writeFileSync(profilePath, updated.endsWith('\\n') ? updated : `${updated}\\n`);\n\n if (!json) {\n success(`Environment variables written to ${chalk.bold(profilePath)}`);\n }\n\n // Step 5: Start manager daemon\n const managerSpinner = ora({ text: 'Starting manager daemon\\u2026', isSilent: json });\n managerSpinner.start();\n\n try {\n const configDir = join(homedir(), '.augmented');\n const { pid } = startWatchdog({ intervalMs: 10_000, configDir });\n managerSpinner.succeed(`Manager started (PID ${pid})`);\n } catch (err) {\n managerSpinner.warn('Could not start manager daemon');\n if (!json) {\n warn((err as Error).message);\n info('Start it manually with: agt manager start');\n }\n }\n\n // Step 6: Print summary\n if (json) {\n jsonOutput({\n ok: true,\n host_name: setupResult.host_name,\n host_id: setupResult.host_id,\n team_slug: setupResult.team_slug,\n api_url: finalApiUrl,\n agents: setupResult.agents,\n profile: profilePath,\n });\n } else {\n console.log();\n console.log(chalk.green.bold(' Setup complete!'));\n console.log();\n if (setupResult.agents.length > 0) {\n info(`Agents: ${setupResult.agents.map((a) => chalk.cyan(a)).join(', ')}`);\n } else {\n info('No agents assigned yet. Assign agents in the dashboard or with: agt host assign');\n }\n console.log();\n info(`Restart your shell or run: ${chalk.bold(`source ${profilePath}`)}`);\n }\n}\n","import chalk from 'chalk';\nimport ora from 'ora';\nimport { requireTeam } from '../lib/auth-guard.js';\nimport { api } from '../lib/api-client.js';\nimport { success, error, info, table } from '../lib/output.js';\nimport { isJsonMode, jsonOutput } from '../lib/globals.js';\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\ninterface KanbanItem {\n id: string;\n title: string;\n description?: string;\n priority: number;\n status: string;\n estimated_minutes?: number;\n notes?: string;\n deliverable?: string;\n result?: string;\n completed_at?: string;\n created_at: string;\n}\n\nasync function resolveAgentId(codeName: string): Promise<string | null> {\n try {\n const data = await api.get<{ agent_id: string }>(`/agents/${codeName}`);\n return data.agent_id;\n } catch {\n return null;\n }\n}\n\nfunction priorityLabel(p: number): string {\n return p === 1 ? chalk.red('HIGH') : p === 3 ? chalk.dim('LOW') : chalk.yellow('MED');\n}\n\nfunction statusLabel(s: string): string {\n const map: Record<string, string> = {\n in_progress: chalk.blue('In Progress'),\n today: chalk.green('Today'),\n backlog: chalk.dim('Backlog'),\n done: chalk.gray('Done'),\n };\n return map[s] ?? s;\n}\n\n// ---------------------------------------------------------------------------\n// agt kanban list\n// ---------------------------------------------------------------------------\n\nexport async function kanbanListCommand(\n opts: { agent: string },\n): Promise<void> {\n const teamSlug = requireTeam();\n if (!teamSlug) return;\n const json = isJsonMode();\n\n const spinner = ora({ text: 'Fetching kanban board…', isSilent: json });\n spinner.start();\n\n const agentId = await resolveAgentId(opts.agent);\n if (!agentId) {\n spinner.fail(`Agent \"${opts.agent}\" not found.`);\n process.exitCode = 1;\n return;\n }\n\n try {\n const data = await api.post<{ items: KanbanItem[] }>('/host/my-kanban', {\n agent_id: agentId,\n });\n\n spinner.stop();\n\n if (json) {\n jsonOutput({ ok: true, items: data.items });\n return;\n }\n\n if (!data.items.length) {\n info(`Board for ${opts.agent} is empty.`);\n return;\n }\n\n const rows = data.items.map((item) => [\n priorityLabel(item.priority),\n statusLabel(item.status),\n item.title.length > 50 ? item.title.slice(0, 47) + '…' : item.title,\n item.estimated_minutes ? `~${item.estimated_minutes}min` : '',\n item.id.slice(0, 8),\n ]);\n\n console.log(chalk.bold(`\\nKanban: ${opts.agent}\\n`));\n table(['Pri', 'Status', 'Title', 'Est', 'ID'], rows);\n } catch (err) {\n spinner.fail('Failed to fetch board.');\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n }\n}\n\n// ---------------------------------------------------------------------------\n// agt kanban add\n// ---------------------------------------------------------------------------\n\nexport async function kanbanAddCommand(\n title: string,\n opts: {\n agent: string;\n priority?: string;\n status?: string;\n description?: string;\n estimate?: string;\n deliverable?: string;\n },\n): Promise<void> {\n const teamSlug = requireTeam();\n if (!teamSlug) return;\n const json = isJsonMode();\n\n const agentId = await resolveAgentId(opts.agent);\n if (!agentId) {\n error(`Agent \"${opts.agent}\" not found.`);\n process.exitCode = 1;\n return;\n }\n\n try {\n const data = await api.post<{ ok: boolean; added: number }>('/host/kanban', {\n agent_id: agentId,\n add: [\n {\n title,\n description: opts.description,\n priority: opts.priority ? Number(opts.priority) : 2,\n status: opts.status ?? 'today',\n estimated_minutes: opts.estimate ? Number(opts.estimate) : undefined,\n deliverable: opts.deliverable,\n source: 'manual',\n },\n ],\n });\n\n if (json) {\n jsonOutput({ ok: true, added: data.added });\n } else {\n success(`Added \"${title}\" to ${opts.agent}'s board.`);\n }\n } catch (err) {\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n }\n}\n\n// ---------------------------------------------------------------------------\n// agt kanban move\n// ---------------------------------------------------------------------------\n\nexport async function kanbanMoveCommand(\n titleOrId: string,\n status: string,\n opts: { agent: string; notes?: string },\n): Promise<void> {\n const teamSlug = requireTeam();\n if (!teamSlug) return;\n const json = isJsonMode();\n\n const validStatuses = ['backlog', 'today', 'in_progress', 'done'];\n if (!validStatuses.includes(status)) {\n error(`Invalid status \"${status}\". Must be one of: ${validStatuses.join(', ')}`);\n process.exitCode = 1;\n return;\n }\n\n const agentId = await resolveAgentId(opts.agent);\n if (!agentId) {\n error(`Agent \"${opts.agent}\" not found.`);\n process.exitCode = 1;\n return;\n }\n\n const isUuid = /^[0-9a-f]{8}-/.test(titleOrId);\n const update: Record<string, unknown> = {\n status,\n notes: opts.notes,\n };\n if (isUuid) {\n update.id = titleOrId;\n } else {\n update.title = titleOrId;\n }\n\n try {\n const data = await api.post<{ ok: boolean; updated: number }>('/host/kanban', {\n agent_id: agentId,\n update: [update],\n });\n\n if (json) {\n jsonOutput({ ok: true, updated: data.updated });\n } else if (data.updated > 0) {\n success(`Moved \"${titleOrId}\" → ${status}.`);\n } else {\n error(`Item \"${titleOrId}\" not found.`);\n process.exitCode = 1;\n }\n } catch (err) {\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n }\n}\n\n// ---------------------------------------------------------------------------\n// agt kanban update\n// ---------------------------------------------------------------------------\n\nexport async function kanbanUpdateCommand(\n titleOrId: string,\n opts: { agent: string; notes?: string; result?: string },\n): Promise<void> {\n const teamSlug = requireTeam();\n if (!teamSlug) return;\n const json = isJsonMode();\n\n const agentId = await resolveAgentId(opts.agent);\n if (!agentId) {\n error(`Agent \"${opts.agent}\" not found.`);\n process.exitCode = 1;\n return;\n }\n\n // Fetch current item to get its status\n let board: { items: KanbanItem[] };\n try {\n board = await api.post<{ items: KanbanItem[] }>('/host/my-kanban', {\n agent_id: agentId,\n });\n } catch (err) {\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n return;\n }\n\n const isUuid = /^[0-9a-f]{8}-/.test(titleOrId);\n const match = board.items.find(\n (i) => (isUuid && i.id === titleOrId) || i.title === titleOrId,\n );\n\n if (!match) {\n if (json) {\n jsonOutput({ ok: false, error: `Item \"${titleOrId}\" not found.` });\n } else {\n error(`Item \"${titleOrId}\" not found.`);\n }\n process.exitCode = 1;\n return;\n }\n\n try {\n const data = await api.post<{ ok: boolean; updated: number }>('/host/kanban', {\n agent_id: agentId,\n update: [\n {\n id: match.id,\n status: match.status,\n notes: opts.notes,\n result: opts.result,\n },\n ],\n });\n\n if (json) {\n jsonOutput({ ok: true, updated: data.updated });\n } else {\n success(`Updated \"${match.title}\".`);\n }\n } catch (err) {\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n }\n}\n\n// ---------------------------------------------------------------------------\n// agt kanban done\n// ---------------------------------------------------------------------------\n\nexport async function kanbanDoneCommand(\n titleOrId: string,\n opts: { agent: string; result?: string; notes?: string },\n): Promise<void> {\n const teamSlug = requireTeam();\n if (!teamSlug) return;\n const json = isJsonMode();\n\n const agentId = await resolveAgentId(opts.agent);\n if (!agentId) {\n error(`Agent \"${opts.agent}\" not found.`);\n process.exitCode = 1;\n return;\n }\n\n const isUuid = /^[0-9a-f]{8}-/.test(titleOrId);\n const update: Record<string, unknown> = {\n status: 'done',\n result: opts.result,\n notes: opts.notes,\n };\n if (isUuid) {\n update.id = titleOrId;\n } else {\n update.title = titleOrId;\n }\n\n try {\n const data = await api.post<{ ok: boolean; updated: number }>('/host/kanban', {\n agent_id: agentId,\n update: [update],\n });\n\n if (json) {\n jsonOutput({ ok: true, updated: data.updated });\n } else if (data.updated > 0) {\n success(`Marked \"${titleOrId}\" as done.`);\n } else {\n error(`Item \"${titleOrId}\" not found.`);\n process.exitCode = 1;\n }\n } catch (err) {\n if (json) {\n jsonOutput({ ok: false, error: (err as Error).message });\n } else {\n error((err as Error).message);\n }\n process.exitCode = 1;\n }\n}\n","import type { AcpAgentAdapter } from './types.js';\n\n/**\n * Built-in ACP agent adapters.\n * Only the three agents specified in ENG-4119 scope: Claude Code, OpenClaw, Codex.\n */\nexport const ACP_AGENT_REGISTRY: readonly AcpAgentAdapter[] = [\n {\n name: 'claude',\n label: 'Claude Code',\n adapter_package: 'claude-agent-acp',\n command: 'npx',\n args: ['-y', 'claude-agent-acp'],\n type: 'npx-wrapper',\n },\n {\n name: 'openclaw',\n label: 'OpenClaw',\n command: 'openclaw',\n args: ['acp'],\n type: 'native',\n },\n {\n name: 'codex',\n label: 'Codex',\n adapter_package: 'codex-acp',\n command: 'npx',\n args: ['-y', 'codex-acp'],\n type: 'npx-wrapper',\n },\n] as const;\n\nconst agentMap = new Map<string, AcpAgentAdapter>(\n ACP_AGENT_REGISTRY.map((a) => [a.name, a]),\n);\n\nexport function getAcpAgent(name: string): AcpAgentAdapter | undefined {\n return agentMap.get(name);\n}\n\nexport function getAllAcpAgentNames(): string[] {\n return ACP_AGENT_REGISTRY.map((a) => a.name);\n}\n","import { spawn } from 'node:child_process';\nimport type {\n AcpSessionMetadata,\n AcpEvent,\n AcpPermissionMode,\n AcpAgentAdapter,\n} from './types.js';\nimport { getAcpAgent } from './agent-registry.js';\n\nexport interface AcpSpawnOptions {\n /** Agent name or custom command */\n agent: string;\n /** Working directory for the session */\n cwd: string;\n /** Named session for parallel workstreams */\n sessionName?: string;\n /** Permission mode */\n permissions?: AcpPermissionMode;\n /** Queue owner idle TTL in seconds */\n ttl?: number;\n /** Prompt execution timeout in seconds */\n timeout?: number;\n /** Auto-approve all tool permissions */\n approveAll?: boolean;\n}\n\nexport interface AcpPromptOptions {\n /** Agent name */\n agent: string;\n /** Prompt text */\n prompt: string;\n /** Working directory */\n cwd: string;\n /** Named session */\n sessionName?: string;\n /** Output format */\n format?: 'text' | 'json' | 'json-strict' | 'quiet';\n /** Don't wait for completion */\n noWait?: boolean;\n /** Timeout in seconds */\n timeout?: number;\n}\n\nexport interface AcpExecResult {\n exitCode: number;\n stdout: string;\n stderr: string;\n events: AcpEvent[];\n}\n\n/**\n * Resolves the acpx command and arguments for a given agent.\n * Falls back to raw command execution for unknown agents.\n */\nfunction resolveAgentCommand(agentName: string): { command: string; args: string[] } {\n const adapter = getAcpAgent(agentName);\n if (adapter) {\n return {\n command: 'acpx',\n args: [adapter.name],\n };\n }\n // Unknown agent — use raw command via --agent flag\n return {\n command: 'acpx',\n args: ['--agent', agentName],\n };\n}\n\n/**\n * Runs an acpx command and returns the result.\n */\nexport async function runAcpx(\n args: string[],\n options: { cwd?: string; timeout?: number } = {},\n): Promise<AcpExecResult> {\n return new Promise((resolve) => {\n const child = spawn('acpx', args, {\n cwd: options.cwd,\n stdio: ['pipe', 'pipe', 'pipe'],\n env: { ...process.env },\n });\n\n let stdout = '';\n let stderr = '';\n const events: AcpEvent[] = [];\n\n child.stdout?.on('data', (data: Buffer) => {\n const chunk = data.toString();\n stdout += chunk;\n // Parse NDJSON events if format is json\n for (const line of chunk.split('\\n').filter(Boolean)) {\n try {\n const parsed = JSON.parse(line) as AcpEvent;\n if (parsed.eventVersion === 1) {\n events.push(parsed);\n }\n } catch {\n // Not JSON — plain text output\n }\n }\n });\n\n child.stderr?.on('data', (data: Buffer) => {\n stderr += data.toString();\n });\n\n const timer = options.timeout\n ? setTimeout(() => child.kill('SIGTERM'), options.timeout * 1000)\n : undefined;\n\n child.on('close', (code) => {\n if (timer) clearTimeout(timer);\n resolve({ exitCode: code ?? 1, stdout, stderr, events });\n });\n });\n}\n\n/**\n * Spawns a new ACP session via acpx.\n */\nexport async function acpSpawnSession(opts: AcpSpawnOptions): Promise<AcpExecResult> {\n const { command: _cmd, args: agentArgs } = resolveAgentCommand(opts.agent);\n const args = [...agentArgs, 'sessions', 'ensure'];\n\n if (opts.sessionName) args.push('-s', opts.sessionName);\n if (opts.approveAll) args.unshift('--approve-all');\n if (opts.ttl !== undefined) args.unshift('--ttl', String(opts.ttl));\n\n args.unshift('--format', 'json');\n\n return runAcpx(args, { cwd: opts.cwd });\n}\n\n/**\n * Sends a prompt to an ACP session.\n */\nexport async function acpPrompt(opts: AcpPromptOptions): Promise<AcpExecResult> {\n const { command: _cmd, args: agentArgs } = resolveAgentCommand(opts.agent);\n const args = [...agentArgs, 'prompt', opts.prompt];\n\n if (opts.sessionName) args.push('-s', opts.sessionName);\n if (opts.noWait) args.push('--no-wait');\n if (opts.format) args.unshift('--format', opts.format);\n if (opts.timeout) args.unshift('--timeout', String(opts.timeout));\n\n return runAcpx(args, { cwd: opts.cwd, timeout: opts.timeout });\n}\n\n/**\n * Executes a one-shot prompt (no session reuse).\n */\nexport async function acpExec(\n agent: string,\n prompt: string,\n options: { cwd?: string; format?: string; timeout?: number } = {},\n): Promise<AcpExecResult> {\n const { command: _cmd, args: agentArgs } = resolveAgentCommand(agent);\n const args = [...agentArgs, 'exec', prompt];\n\n if (options.format) args.unshift('--format', options.format);\n if (options.timeout) args.unshift('--timeout', String(options.timeout));\n\n return runAcpx(args, { cwd: options.cwd, timeout: options.timeout });\n}\n\n/**\n * Lists active sessions for an agent.\n */\nexport async function acpListSessions(\n agent: string,\n options: { cwd?: string } = {},\n): Promise<AcpExecResult> {\n const { command: _cmd, args: agentArgs } = resolveAgentCommand(agent);\n const args = [...agentArgs, 'sessions', 'list', '--format', 'json'];\n\n return runAcpx(args, { cwd: options.cwd });\n}\n\n/**\n * Cancels the current prompt in an ACP session.\n */\nexport async function acpCancel(\n agent: string,\n options: { cwd?: string; sessionName?: string } = {},\n): Promise<AcpExecResult> {\n const { command: _cmd, args: agentArgs } = resolveAgentCommand(agent);\n const args = [...agentArgs, 'cancel'];\n\n if (options.sessionName) args.push('-s', options.sessionName);\n\n return runAcpx(args, { cwd: options.cwd });\n}\n\n/**\n * Closes (soft-close) an ACP session.\n */\nexport async function acpCloseSession(\n agent: string,\n options: { cwd?: string; sessionName?: string } = {},\n): Promise<AcpExecResult> {\n const { command: _cmd, args: agentArgs } = resolveAgentCommand(agent);\n const args = [...agentArgs, 'sessions', 'close'];\n\n if (options.sessionName) args.push(options.sessionName);\n\n return runAcpx(args, { cwd: options.cwd });\n}\n\n/**\n * Gets status of the current ACP session.\n */\nexport async function acpStatus(\n agent: string,\n options: { cwd?: string; sessionName?: string } = {},\n): Promise<AcpExecResult> {\n const { command: _cmd, args: agentArgs } = resolveAgentCommand(agent);\n const args = [...agentArgs, 'status', '--format', 'json'];\n\n if (options.sessionName) args.push('-s', options.sessionName);\n\n return runAcpx(args, { cwd: options.cwd });\n}\n","import {\n acpSpawnSession,\n acpPrompt,\n acpExec,\n acpListSessions,\n acpCancel,\n acpCloseSession,\n} from '@augmented/core/acp';\nimport { success, error, info } from '../lib/output.js';\nimport { isJsonMode, jsonOutput } from '../lib/globals.js';\n\n// ---------------------------------------------------------------------------\n// agt acpx spawn\n// ---------------------------------------------------------------------------\n\nexport async function acpxSpawnCommand(\n agent: string,\n _opts: Record<string, unknown>,\n cmd: { parent: { opts: () => Record<string, unknown> } },\n): Promise<void> {\n const parentOpts = cmd.parent.opts();\n const cwd = (parentOpts.cwd as string) ?? process.cwd();\n const sessionName = parentOpts.name as string | undefined;\n const approveAll = Boolean(parentOpts.approveAll);\n const ttl = parentOpts.ttl !== undefined ? Number(parentOpts.ttl) : undefined;\n\n info(`Spawning ACP session for \"${agent}\"...`);\n\n const result = await acpSpawnSession({\n agent,\n cwd,\n sessionName,\n approveAll,\n ttl,\n });\n\n if (result.exitCode !== 0) {\n error(`Failed to spawn session: ${result.stderr || 'unknown error'}`);\n process.exitCode = 1;\n return;\n }\n\n if (isJsonMode()) {\n process.stdout.write(result.stdout);\n } else {\n success(`ACP session spawned for \"${agent}\"`);\n if (sessionName) info(`Session name: ${sessionName}`);\n info(`Working directory: ${cwd}`);\n }\n}\n\n// ---------------------------------------------------------------------------\n// agt acpx prompt\n// ---------------------------------------------------------------------------\n\nexport async function acpxPromptCommand(\n agent: string,\n prompt: string,\n _opts: Record<string, unknown>,\n cmd: { parent: { opts: () => Record<string, unknown> } },\n): Promise<void> {\n const parentOpts = cmd.parent.opts();\n const cwd = (parentOpts.cwd as string) ?? process.cwd();\n const sessionName = parentOpts.name as string | undefined;\n const format = (parentOpts.format as string) ?? 'text';\n const noWait = Boolean(parentOpts.noWait);\n const timeout = parentOpts.timeout !== undefined ? Number(parentOpts.timeout) : undefined;\n\n if (!isJsonMode()) info(`Sending prompt to \"${agent}\"...`);\n\n const result = await acpPrompt({\n agent,\n prompt,\n cwd,\n sessionName,\n format: format as 'text' | 'json' | 'json-strict' | 'quiet',\n noWait,\n timeout,\n });\n\n process.stdout.write(result.stdout);\n if (result.stderr) process.stderr.write(result.stderr);\n process.exitCode = result.exitCode;\n}\n\n// ---------------------------------------------------------------------------\n// agt acpx exec\n// ---------------------------------------------------------------------------\n\nexport async function acpxExecCommand(\n agent: string,\n prompt: string,\n _opts: Record<string, unknown>,\n cmd: { parent: { opts: () => Record<string, unknown> } },\n): Promise<void> {\n const parentOpts = cmd.parent.opts();\n const cwd = (parentOpts.cwd as string) ?? process.cwd();\n const format = (parentOpts.format as string) ?? 'text';\n const timeout = parentOpts.timeout !== undefined ? Number(parentOpts.timeout) : undefined;\n\n if (!isJsonMode()) info(`Running one-shot exec with \"${agent}\"...`);\n\n const result = await acpExec(agent, prompt, { cwd, format, timeout });\n\n process.stdout.write(result.stdout);\n if (result.stderr) process.stderr.write(result.stderr);\n process.exitCode = result.exitCode;\n}\n\n// ---------------------------------------------------------------------------\n// agt acpx list-sessions\n// ---------------------------------------------------------------------------\n\nexport async function acpxListSessionsCommand(\n agent: string,\n _opts: Record<string, unknown>,\n cmd: { parent: { opts: () => Record<string, unknown> } },\n): Promise<void> {\n const parentOpts = cmd.parent.opts();\n const cwd = (parentOpts.cwd as string) ?? process.cwd();\n\n const result = await acpListSessions(agent, { cwd });\n\n if (isJsonMode()) {\n process.stdout.write(result.stdout);\n } else {\n if (result.exitCode !== 0) {\n error(`Failed to list sessions: ${result.stderr || 'unknown error'}`);\n process.exitCode = 1;\n return;\n }\n // Parse and display as table\n try {\n const sessions = JSON.parse(result.stdout);\n if (Array.isArray(sessions) && sessions.length > 0) {\n info(`Active sessions for \"${agent}\":`);\n process.stdout.write(result.stdout);\n } else {\n info(`No active sessions for \"${agent}\".`);\n }\n } catch {\n process.stdout.write(result.stdout);\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// agt acpx cancel\n// ---------------------------------------------------------------------------\n\nexport async function acpxCancelCommand(\n agent: string,\n _opts: Record<string, unknown>,\n cmd: { parent: { opts: () => Record<string, unknown> } },\n): Promise<void> {\n const parentOpts = cmd.parent.opts();\n const cwd = (parentOpts.cwd as string) ?? process.cwd();\n const sessionName = parentOpts.name as string | undefined;\n\n info(`Sending cancel to \"${agent}\"...`);\n\n const result = await acpCancel(agent, { cwd, sessionName });\n\n if (result.exitCode !== 0) {\n error(`Cancel failed: ${result.stderr || 'unknown error'}`);\n process.exitCode = 1;\n return;\n }\n\n success('Cancel sent (cooperative).');\n}\n\n// ---------------------------------------------------------------------------\n// agt acpx close\n// ---------------------------------------------------------------------------\n\nexport async function acpxCloseCommand(\n agent: string,\n _opts: Record<string, unknown>,\n cmd: { parent: { opts: () => Record<string, unknown> } },\n): Promise<void> {\n const parentOpts = cmd.parent.opts();\n const cwd = (parentOpts.cwd as string) ?? process.cwd();\n const sessionName = parentOpts.name as string | undefined;\n\n info(`Closing ACP session for \"${agent}\"...`);\n\n const result = await acpCloseSession(agent, { cwd, sessionName });\n\n if (result.exitCode !== 0) {\n error(`Close failed: ${result.stderr || 'unknown error'}`);\n process.exitCode = 1;\n return;\n }\n\n success('Session closed (soft-close — history retained).');\n}\n","import { execSync } from 'node:child_process';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { AGT_HOST } from '../lib/config.js';\nimport { success, error, info, warn } from '../lib/output.js';\nimport { isJsonMode, jsonOutput } from '../lib/globals.js';\n\ndeclare const __CLI_VERSION__: string;\n\nconst cliVersion = typeof __CLI_VERSION__ !== 'undefined' ? __CLI_VERSION__ : 'dev';\n\nexport interface VersionInfo {\n latest: string;\n download_url: string;\n changelog_url?: string;\n}\n\n/**\n * Fetch the latest CLI version from the API.\n * Returns null if the API is unreachable (silent fail).\n */\nexport async function fetchLatestVersion(): Promise<VersionInfo | null> {\n const host = AGT_HOST;\n if (!host) return null;\n\n try {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 5_000);\n timeout.unref();\n\n const res = await fetch(`${host}/cli/version`, {\n signal: controller.signal,\n });\n\n clearTimeout(timeout);\n\n if (!res.ok) return null;\n\n return (await res.json()) as VersionInfo;\n } catch {\n // Network error, timeout, etc. — silently fail\n return null;\n }\n}\n\n/**\n * Compare two semver strings. Returns true if remote > local.\n */\nfunction isNewerVersion(local: string, remote: string): boolean {\n if (local === 'dev') return false;\n\n const parse = (v: string) => v.replace(/^v/, '').split('.').map(Number);\n const lParts = parse(local);\n const rParts = parse(remote);\n const lMaj = lParts[0] ?? 0, lMin = lParts[1] ?? 0, lPat = lParts[2] ?? 0;\n const rMaj = rParts[0] ?? 0, rMin = rParts[1] ?? 0, rPat = rParts[2] ?? 0;\n\n if (rMaj !== lMaj) return rMaj > lMaj;\n if (rMin !== lMin) return rMin > lMin;\n return rPat > lPat;\n}\n\n/**\n * Perform the actual update by running npm install from the GitHub Packages registry.\n * Uses the API-provided version to pin the exact target.\n */\nfunction performUpdate(version: string): void {\n execSync(`npm install -g @integrity-labs/agt-cli@${version} --registry=https://npm.pkg.github.com`, {\n stdio: 'inherit',\n });\n}\n\n/**\n * `agt update` command handler.\n */\nexport async function updateCommand(): Promise<void> {\n const json = isJsonMode();\n const spinner = ora({ text: 'Checking for updates…', isSilent: json });\n spinner.start();\n\n const versionInfo = await fetchLatestVersion();\n\n if (!versionInfo) {\n spinner.stop();\n if (json) {\n jsonOutput({ ok: false, error: 'Could not reach API to check for updates' });\n } else {\n warn('Could not reach the API to check for updates. Check AGT_HOST is set and the API is reachable.');\n }\n process.exitCode = 1;\n return;\n }\n\n const updateAvailable = isNewerVersion(cliVersion, versionInfo.latest);\n\n if (!updateAvailable) {\n spinner.stop();\n if (json) {\n jsonOutput({ ok: true, current: cliVersion, latest: versionInfo.latest, update_available: false });\n } else {\n success(`You're on the latest version (${chalk.bold(cliVersion)})`);\n }\n return;\n }\n\n spinner.stop();\n\n if (!json) {\n info(`Update available: ${chalk.dim(cliVersion)} → ${chalk.bold.green(versionInfo.latest)}`);\n if (versionInfo.changelog_url) {\n info(`Changelog: ${versionInfo.changelog_url}`);\n }\n }\n\n const updateSpinner = ora({ text: 'Installing update…', isSilent: json });\n updateSpinner.start();\n\n try {\n performUpdate(versionInfo.latest);\n updateSpinner.stop();\n if (json) {\n jsonOutput({\n ok: true,\n current: cliVersion,\n latest: versionInfo.latest,\n update_available: true,\n updated: true,\n });\n } else {\n success(`Updated to ${chalk.bold(versionInfo.latest)}`);\n }\n } catch (err) {\n updateSpinner.fail('Update failed');\n if (json) {\n jsonOutput({\n ok: false,\n current: cliVersion,\n latest: versionInfo.latest,\n update_available: true,\n updated: false,\n error: (err as Error).message,\n });\n } else {\n error(`Failed to install update: ${(err as Error).message}`);\n info(`You can manually update with: npm install -g @integrity-labs/agt-cli@${versionInfo.latest} --registry=https://npm.pkg.github.com`);\n }\n process.exitCode = 1;\n }\n}\n\n/**\n * Non-blocking startup version check. Prints a one-liner if an update is available.\n * Silently does nothing on failure.\n */\nexport async function checkForUpdateOnStartup(): Promise<void> {\n try {\n const versionInfo = await fetchLatestVersion();\n if (!versionInfo) return;\n\n if (isNewerVersion(cliVersion, versionInfo.latest)) {\n console.error(\n chalk.yellow(`\\n Update available: ${cliVersion} → ${versionInfo.latest}. Run ${chalk.bold('agt update')} to install.\\n`)\n );\n }\n } catch {\n // Silent fail — never block CLI usage\n }\n}\n"],"mappings":"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","names":["join","homedir","chalk","chalk","chalk","chalk","ora","ora","chalk","chalk","ora","chalk","ora","chalk","ora","join","printDiagnostics","chalk","join","ora","chalk","ora","channels","chalk","ora","chalk","ora","checkbox","confirm","input","join","ora","agent","channels","chalk","checkbox","input","confirm","chalk","ora","confirm","ora","agent","channels","chalk","confirm","chalk","ora","select","input","writeFileSync","mkdirSync","join","chalk","select","input","ora","join","mkdirSync","writeFileSync","chalk","ora","writeFileSync","mkdirSync","join","printDiagnostics","chalk","join","ora","mkdirSync","writeFileSync","chalk","ora","join","chalk","ora","agent","chalk","ora","ora","chalk","chalk","join","readFileSync","writeFileSync","existsSync","mkdirSync","join","join","chalk","chalk","JSON5","readFileSync","existsSync","join","join","existsSync","readFileSync","JSON5","filtered","chalk","chalk","ora","chalk","ora","existsSync","readFileSync","writeFileSync","mkdirSync","join","homedir","chalk","ora","homedir","join","existsSync","chalk","ora","mkdirSync","readFileSync","writeFileSync","chalk","ora","resolveAgentId","priorityLabel","chalk","ora","resolve","agent","agent","chalk","ora","host","ora","chalk","cliVersion","join","homedir"]}