import type { Prompter } from './prompts.js'; import type { ConfigBuilder } from './config.js'; const TOOL_PROFILES = [ { label: 'full (recommended)', value: 'full' }, { label: 'coding (fs + runtime)', value: 'coding' }, { label: 'messaging (read + services, no shell/writes)', value: 'messaging' }, { label: 'minimal (status only)', value: 'minimal' }, ]; const RESEARCH_AGENT_TIERS = [ { label: 'complex (recommended)', value: 'complex' as const }, { label: 'default', value: 'default' as const }, { label: 'fast', value: 'fast' as const }, { label: 'local', value: 'local' as const }, ]; export async function setupSecurity(p: Prompter, builder: ConfigBuilder): Promise { p.println(' Docker sandboxing runs tool commands in isolated containers.'); p.println(' Requires Docker installed and running.'); const sandbox = await p.confirm('Enable Docker sandboxing?', true); if (sandbox) { builder.setSandboxEnabled(true); p.println('✓ Docker sandboxing enabled'); } p.println(); p.println(' DM pairing requires unknown senders to enter a code before chatting.'); p.println(' Generate codes via the gateway or TUI /pair command.'); const pairing = await p.confirm('Enable DM pairing for unknown senders?', true); if (pairing) { builder.setPairingEnabled(true); p.println('✓ DM pairing enabled'); } p.println(); p.println(' Tool profiles control which tools the agent can use:'); p.println(' full — all tools available (file, shell, web, memory, messaging) (default)'); p.println(' coding — file system + shell + sessions + memory'); p.println(' messaging — read-only + web/memory + connected services (no file writes/shell)'); p.println(' minimal — status checks only (read-only, safest)'); const profile = await p.choose('Tool policy profile:', TOOL_PROFILES); builder.setToolProfile(profile); builder.setSensitiveMode('confirm_without_elevation'); p.println(); p.println(' Research agent adds a dedicated specialist for deep web research.'); p.println(' Enables /research command and automatic routing for messages starting with "research ..." or "look up ...".'); const enableResearchAgent = await p.confirm('Enable a dedicated research agent?', true); if (enableResearchAgent) { const tier = await p.choose('Research agent model tier:', RESEARCH_AGENT_TIERS); builder.setResearchAgentEnabled({ modelTier: tier }); p.println(`✓ Research agent enabled (tier=${tier})`); } }