titan-agent 6.0.2 → 6.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent/goalDriver.js +107 -2
- package/dist/agent/goalDriver.js.map +1 -1
- package/dist/agent/goalProposer.js +11 -1
- package/dist/agent/goalProposer.js.map +1 -1
- package/dist/config/schema.js +21 -0
- package/dist/config/schema.js.map +1 -1
- package/dist/utils/constants.js +1 -1
- package/dist/utils/constants.js.map +1 -1
- package/package.json +1 -1
- package/ui/dist/sw.js +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/config/schema.ts"],"sourcesContent":["/**\n * TITAN Configuration Schema â Zod-based validation with full type inference\n */\nimport { z } from 'zod';\nimport {\n DEFAULT_GATEWAY_HOST,\n DEFAULT_GATEWAY_PORT,\n DEFAULT_WEB_PORT,\n DEFAULT_MODEL,\n DEFAULT_MAX_TOKENS,\n DEFAULT_TEMPERATURE,\n DEFAULT_SANDBOX_MODE,\n ALLOWED_TOOLS_DEFAULT,\n} from '../utils/constants.js';\n// v6.0.1 — Provider-agnostic default picker. Detects available API keys\n// and falls back to local Ollama if none are set, so TITAN runs out of\n// the box on any provider the user has configured.\nimport { getDefaultModelId, getDefaultModelAliases } from '../providers/defaultModel.js';\n\nexport const AuthProfileSchema = z.object({\n name: z.string(),\n apiKey: z.string(),\n priority: z.number().default(0),\n});\n\nexport const ProviderConfigSchema = z.object({\n apiKey: z.string().optional(),\n baseUrl: z.string().optional(),\n model: z.string().optional(),\n maxTokens: z.number().optional(),\n temperature: z.number().min(0).max(2).optional(),\n /** Multiple API keys with automatic failover */\n authProfiles: z.array(AuthProfileSchema).default([]),\n /** Credential rotation strategy when multiple authProfiles are configured */\n rotationStrategy: z.enum(['priority', 'round-robin', 'least-used']).default('priority'),\n /** Cooldown duration in ms when a credential is exhausted (default: 60s) */\n credentialCooldownMs: z.number().default(60000),\n /** v5.0: Credential pool — multiple API keys for same provider with automatic rotation */\n credentialPool: z.object({\n apiKeys: z.array(z.string()).default([]),\n rotationStrategy: z.enum(['least_used', 'round_robin', 'random']).default('least_used'),\n }).optional(),\n /** v5.0: Transport layer override ('anthropic' | 'chat_completions' | 'responses_api' | 'bedrock') */\n transport: z.enum(['anthropic', 'chat_completions', 'responses_api', 'bedrock']).optional(),\n});\n\nexport const ChannelConfigSchema = z.object({\n enabled: z.boolean().default(false),\n token: z.string().optional(),\n apiKey: z.string().optional(),\n allowFrom: z.array(z.string()).default([]),\n dmPolicy: z.enum(['pairing', 'open', 'closed']).default('pairing'),\n});\n\n/**\n * v4.3.2: Messenger channel extends the base config with voice-reply options.\n * When enabled, owner messages get synthesized in the configured voice via\n * F5-TTS (default: Andrew). Falls back to text cleanly if TTS/upload fails.\n */\nexport const MessengerChannelConfigSchema = ChannelConfigSchema.extend({\n voiceReplies: z.object({\n enabled: z.boolean().default(true),\n voice: z.string().default('andrew'),\n /** Cap synthesized audio length to avoid huge uploads */\n maxChars: z.number().default(1000),\n }).default({ enabled: true, voice: 'andrew', maxChars: 1000 }),\n});\n\nexport const SecurityConfigSchema = z.object({\n sandboxMode: z.enum(['host', 'docker', 'none']).default(DEFAULT_SANDBOX_MODE as 'host'),\n allowedTools: z.array(z.string()).default(ALLOWED_TOOLS_DEFAULT),\n deniedTools: z.array(z.string()).default([]),\n maxConcurrentTasks: z.number().default(5),\n commandTimeout: z.number().default(60000),\n /** Per-tool timeout overrides (ms) â keys are tool names */\n toolTimeouts: z.record(z.string(), z.number()).default({\n browser_auto_nav: 60000,\n browser_navigate: 60000,\n web_fetch: 45000,\n web_search: 45000,\n web_act: 60000,\n smart_form_fill: 60000,\n shell: 60000,\n code_exec: 120000,\n self_improve_start: 1800000, // 30 minutes â runs full experiment loop\n self_improve_apply: 60000,\n train_prepare: 300000, // 5 minutes â scans session history\n train_start: 7200000, // 2 hours â GPU fine-tuning\n train_deploy: 600000, // 10 minutes â GGUF conversion + Ollama import\n }),\n /** Automatic retry for transient tool failures */\n toolRetry: z.object({\n enabled: z.boolean().default(true),\n maxRetries: z.number().default(3),\n backoffBaseMs: z.number().default(1000),\n }).default({}),\n fileSystemAllowlist: z.array(z.string()).default([]),\n networkAllowlist: z.array(z.string()).default(['*']),\n shield: z.object({\n enabled: z.boolean().default(true),\n mode: z.enum(['standard', 'strict']).default('strict'),\n }).default({}),\n maxMemoryMB: z.number().default(2048),\n maxSubprocesses: z.number().default(10),\n maxDiskWriteMB: z.number().default(1024),\n vault: z.object({\n enabled: z.boolean().default(false),\n path: z.string().optional(),\n }).default({}),\n auditLog: z.object({\n enabled: z.boolean().default(true),\n path: z.string().optional(),\n retentionDays: z.number().default(90),\n }).default({}),\n /** v5.0: PII redaction before sending context to LLM providers */\n redactPII: z.boolean().default(false),\n /** v5.0: Secret exfiltration scanning level */\n secretScan: z.object({\n level: z.enum(['tool_only', 'full']).default('tool_only'),\n }).default({}),\n /** v5.0: Pre-execution command scanner for dangerous patterns */\n preExecScan: z.enum(['off', 'warn', 'block']).default('warn'),\n preExecScanAllow: z.array(z.string()).default([]),\n});\n\nexport const GatewayConfigSchema = z.object({\n host: z.string().default(DEFAULT_GATEWAY_HOST),\n port: z.number().default(DEFAULT_GATEWAY_PORT),\n webPort: z.number().default(DEFAULT_WEB_PORT),\n auth: z.object({\n mode: z.enum(['none', 'token', 'password']).default('token'),\n token: z.string().optional(),\n password: z.string().optional(),\n /**\n * Session-token TTL (ms). Default 30 days — appropriate for self-hosted\n * single-user TITAN where logging in every 24h is friction, not security.\n * Tokens older than this get filtered at load AND purged from disk by\n * the periodic cleanup. Lower this for shared / multi-user deployments.\n *\n * Pre-v5.7.2 hardcoded to 24h, which silently wiped Tony's login every\n * morning and persisted `[]` to auth-tokens.json. (H1 boot-line fix.)\n */\n tokenTtlMs: z.number().int().positive().default(30 * 24 * 60 * 60 * 1000),\n }).default({}),\n /**\n * Hunt Finding #27 (2026-04-14): max parallel /api/message requests the\n * gateway will accept before returning HTTP 503. Hardcoded to 5 before\n * this was added. Tune higher for production deployments where the\n * upstream model provider can handle more concurrent requests.\n * Valid range: 1-1000. Default: 5 (safe for local Ollama).\n */\n maxConcurrentMessages: z.number().int().min(1).max(1000).default(5),\n /**\n * Hunt Finding #29 (2026-04-14): global fetch() HTTP pool configuration.\n * Without this, Node's default dispatcher has no per-origin connection\n * cap and the keep-alive pool to Ollama grew to 80+ sockets under load.\n * The defaults are tuned for a single-machine Ollama deployment.\n */\n httpPool: z.object({\n /** Max connections per origin (in-flight + idle). Default 16. */\n connections: z.number().int().min(1).max(1024).default(16),\n /** Idle keep-alive timeout in ms. Default 10_000. */\n keepAliveTimeoutMs: z.number().int().min(1_000).max(300_000).default(10_000),\n /** Hard cap on keep-alive bumps in ms. Default 60_000. */\n keepAliveMaxTimeoutMs: z.number().int().min(1_000).max(600_000).default(60_000),\n /** Max time to wait for response headers. Default 60_000. */\n headersTimeoutMs: z.number().int().min(1_000).max(600_000).default(60_000),\n /** Max time to wait for full response body. Default 300_000. */\n bodyTimeoutMs: z.number().int().min(1_000).max(1_200_000).default(300_000),\n }).default({}),\n});\n\nexport const AgentConfigSchema = z.object({\n // v6.0.1 — Provider-agnostic default. `DEFAULT_MODEL` is the\n // hardcoded fallback (anthropic/claude-sonnet-4); `getDefaultModelId()`\n // picks based on the user's actual environment (ANTHROPIC_API_KEY →\n // anthropic, OPENAI_API_KEY → openai, etc.) and falls back to local\n // Ollama if no cloud keys are set.\n model: z.string().default(() => getDefaultModelId()),\n maxTokens: z.number().default(DEFAULT_MAX_TOKENS),\n temperature: z.number().min(0).max(2).default(DEFAULT_TEMPERATURE),\n systemPrompt: z.string().optional(),\n /** Active persona ID (filename stem from assets/personas/). Default 'default' = no persona override. */\n persona: z.string().default('default'),\n workspace: z.string().optional(),\n sessionCompaction: z.object({\n enabled: z.boolean().default(true).describe('Auto-rotate sessions when limits exceeded'),\n maxSessionRuns: z.number().default(200).describe('Max interactions per session before rotation'),\n maxInputTokens: z.number().default(2000000).describe('Max input tokens per session'),\n maxSessionAgeHours: z.number().default(72).describe('Max session age in hours'),\n }).default({}).describe('Session compaction thresholds (Paperclip pattern)'),\n /** Max tool-calling rounds per message in autonomous mode */\n maxRounds: z.number().default(25),\n /** Hard cap on tool rounds (safety limit) */\n maxToolRoundsHard: z.number().default(50),\n /** Enable dynamic budget (auto-calculates rounds based on task complexity) */\n dynamicBudget: z.boolean().default(true),\n /** Force tool_choice=required in autonomous mode */\n forceToolUse: z.boolean().default(true),\n thinkingMode: z.enum(['off', 'low', 'medium', 'high']).default('medium'),\n /**\n * Wall-clock timeout (ms) for each individual LLM call within the agent loop.\n * Default 300 s (5 min) is appropriate for complex agentic tasks but too long\n * for simple webchat queries. Set to e.g. 90_000 (90 s) for faster failure on\n * slow/unreachable providers. Per-request overrides via LoopContext.chatTimeoutMs.\n */\n chatTimeoutMs: z.number().int().positive().default(300_000),\n /** Model aliases â e.g. { fast: \"openai/gpt-4o-mini\", smart: \"anthropic/claude-sonnet-4-20250514\", local: \"ollama/qwen3.5:4b\" } */\n // Hunt Finding #42 (2026-04-15): README promises built-in aliases\n // `fast, smart, cheap, reasoning, local`. Zod's .default() replaces the\n // whole record on any user override, so once a user customized aliases\n // their file would LOSE the built-ins. Use .transform() to merge user\n // overrides on top of the built-ins.\n modelAliases: z.record(z.string(), z.string())\n // v6.0.1 — Default to provider-appropriate aliases. The thunk\n // detects which API keys are set and picks aliases that route to\n // the same provider as agent.model — so sub-agents that select\n // a tier ('fast' / 'smart' / 'reasoning' / etc.) hit a working\n // provider, not a hardcoded Ollama default the user can't reach.\n .default(() => getDefaultModelAliases())\n .transform((userAliases): Record<string, string> => ({\n // Provider-aware floor (re-resolved on transform so a config\n // file with partial aliases still gets sensible fallbacks).\n ...getDefaultModelAliases(),\n // User overrides win\n ...userAliases,\n })),\n costOptimization: z.object({\n smartRouting: z.boolean().default(true),\n contextSummarization: z.boolean().default(true),\n dailyBudgetUsd: z.number().optional(),\n /**\n * v4.13 ancestor-extraction (Hermes smart_model_routing): dedicated\n * model for ultra-simple turns (\"hi\", \"what time is it?\", \"who made\n * you?\"). When set, TITAN's simple-turn detector routes these\n * messages here regardless of tier analysis. Leave empty to disable.\n * Example: \"ollama/minimax-m2.7:cloud\" (fast + coherent on Titan PC).\n */\n simpleTurnModel: z.string().optional(),\n }).optional(),\n /** Restrict which models users can select via /model. Empty = all allowed. Supports wildcards: \"openai/*\" */\n allowedModels: z.array(z.string()).default([]),\n /** Ordered fallback chain of model IDs to try when the primary model fails (e.g. rate limit, timeout, 5xx) */\n fallbackChain: z.array(z.string()).default([]),\n /** Maximum retries across the fallback chain before giving up */\n fallbackMaxRetries: z.number().default(3),\n /** Enable periodic reflection during agent loop (LLM self-assessment) */\n reflectionEnabled: z.boolean().default(true),\n /** Reflect every N rounds (default: 3) */\n reflectionInterval: z.number().default(3),\n /** Enable automatic model switching when tool calling fails (self-healing) */\n selfHealEnabled: z.boolean().default(true),\n /** Number of consecutive tool call failures before auto-switching models (2-10) */\n selfHealThreshold: z.number().min(2).max(10).default(3),\n /** Models known to reliably support tool calling â used as self-heal fallbacks */\n toolCapableModels: z.array(z.string()).default([]),\n /** Allow registered agents to propose new goals during the nightly dreaming cycle.\n * Proposals become pending approvals that a human (or approver agent) must accept\n * before the goal is created. Opt-in because it starts the LLM on a schedule. */\n autoProposeGoals: z.boolean().default(false),\n /** Maximum goal proposals a single agent can file per rolling 24h window. */\n proposalRateLimitPerDay: z.number().min(0).max(20).default(3),\n /** Model alias used for the proposal generation step. Should be cheap/fast. */\n proposalModel: z.string().default('fast'),\n /** v5.0: Prompt budget ratios — cap tokens for each context section (Space Agent parity) */\n promptBudget: z.object({\n systemRatio: z.number().min(0).max(1).default(0.3),\n historyRatio: z.number().min(0).max(1).default(0.5),\n transientRatio: z.number().min(0).max(1).default(0.2),\n maxTokens: z.number().default(12000),\n }).optional(),\n});\n\nexport const MeshConfigSchema = z.object({\n enabled: z.boolean().default(false),\n secret: z.string().optional(),\n /** Auto-discover peers via mDNS (Bonjour) on the local network */\n mdns: z.boolean().default(true),\n /** Auto-discover peers via Tailscale VPN */\n tailscale: z.boolean().default(true),\n /** Manually specified peer addresses (host:port) */\n staticPeers: z.array(z.string()).default([]),\n /** Allow remote nodes to use this node's models */\n allowRemoteModels: z.boolean().default(true),\n /** Maximum concurrent remote tasks */\n maxRemoteTasks: z.number().default(3),\n /** Maximum number of connected peers */\n maxPeers: z.number().default(5),\n /** Auto-approve discovered peers (skip approval prompt) */\n autoApprove: z.boolean().default(false),\n /** Timeout for mesh task RPC in milliseconds */\n taskTimeoutMs: z.number().default(120_000),\n /** Heartbeat interval in milliseconds */\n heartbeatIntervalMs: z.number().default(60_000),\n /** Time before a peer is considered stale and pruned (ms, default 5 min) */\n peerStaleTimeoutMs: z.number().default(300_000),\n});\n\nexport const TunnelConfigSchema = z.object({\n /** Enable Cloudflare Tunnel */\n enabled: z.boolean().default(false),\n /** Tunnel mode: 'quick' (free trycloudflare.com URL) or 'named' (custom domain) */\n mode: z.enum(['quick', 'named']).default('quick'),\n /** Tunnel ID for named tunnels */\n tunnelId: z.string().optional(),\n /** Cloudflare tunnel token (for named tunnels) */\n token: z.string().optional(),\n /** Custom hostname for named tunnels */\n hostname: z.string().optional(),\n});\n\nexport const ToolSearchConfigSchema = z.object({\n /** Enable compact tool mode with tool_search discovery (saves 60-80% input tokens) */\n enabled: z.boolean().default(true),\n /** Core tools always sent to the LLM without needing search.\n * When empty (default), uses DEFAULT_CORE_TOOLS from toolSearch.ts.\n * Override only if you need a specific custom list. */\n coreTools: z.array(z.string()).default([]),\n});\n\nexport const SandboxConfigSchema = z.object({\n /** Enable sandbox code execution (requires Docker or OpenShell) */\n enabled: z.boolean().default(true),\n /** Sandbox engine: docker (default) or openshell (NVIDIA) */\n engine: z.enum(['docker', 'openshell']).default('docker'),\n /** Docker image name for the sandbox container */\n image: z.string().default('titan-sandbox'),\n /** Default execution timeout in milliseconds */\n timeoutMs: z.number().default(60000),\n /** Container memory limit in MB */\n memoryMB: z.number().default(512),\n /** Container CPU limit */\n cpus: z.number().default(1),\n /** Tools denied inside sandbox (prevent escape) */\n deniedTools: z.array(z.string()).default([\n 'shell', 'exec', 'code_exec', 'process', 'apply_patch',\n ]),\n});\n\nexport const BrainConfigSchema = z.object({\n /** Enable embedded small LLM for intelligent routing (tool selection, classification) */\n enabled: z.boolean().default(false),\n /** Which small model to use (e.g. 'smollm2-360m', 'qwen3.5-0.8b', or custom fine-tuned model name) */\n model: z.string().default('smollm2-360m'),\n /** Auto-download model on first enable */\n autoDownload: z.boolean().default(true),\n /** Maximum tools to select per request */\n maxToolsPerRequest: z.number().default(12),\n /** Inference timeout in milliseconds */\n timeoutMs: z.number().default(2000),\n});\n\nexport const DeliberationConfigSchema = z.object({\n /** Enable deliberative reasoning for complex requests */\n enabled: z.boolean().default(true),\n /** Auto-detect ambitious requests that need deliberation (default: false â use /plan explicitly) */\n autoDetect: z.boolean().default(false),\n /** Model override for reasoning phase (falls back to agent.modelAliases.reasoning) */\n reasoningModel: z.string().optional(),\n /** Require user approval before executing a plan */\n approvalRequired: z.boolean().default(true),\n /** Maximum number of steps in a generated plan */\n maxPlanSteps: z.number().default(10),\n});\n\nexport const VoiceConfigSchema = z.object({\n /** Enable voice chat (requires LiveKit server + voice agent running) */\n enabled: z.boolean().default(false),\n /** LiveKit server WebSocket URL */\n livekitUrl: z.string().default('ws://localhost:7880'),\n /** LiveKit API key (matches livekit server config) */\n livekitApiKey: z.string().default('devkey'),\n /** LiveKit API secret (matches livekit server config) */\n livekitApiSecret: z.string().default('secret'),\n /** URL of the voice agent (for health checks) */\n agentUrl: z.string().default('http://localhost:8081'),\n /** Default TTS voice name */\n ttsVoice: z.string().default('andrew'),\n /** TTS engine: f5-tts only */\n ttsEngine: z.enum(['f5-tts']).default('f5-tts'),\n /** TTS server URL (F5-TTS: 5006) */\n ttsUrl: z.string().default('http://localhost:5006'),\n /** STT engine: faster-whisper | nemotron-asr | openai */\n sttEngine: z.enum(['faster-whisper', 'nemotron-asr', 'openai']).default('faster-whisper'),\n /** STT server URL (e.g. faster-whisper) */\n sttUrl: z.string().default('http://localhost:48421'),\n /** Voice performance: max tool rounds before forcing response */\n maxToolRounds: z.number().default(3),\n /** Voice performance: enable fast-path (skip deliberation, Brain, reflection) */\n fastPath: z.boolean().default(true),\n /** Override model for voice chat (faster model for low-latency responses). Falls back to agent.model if unset. */\n model: z.string().optional(),\n /** Silence timeout in milliseconds — how long to wait after speech ends before auto-sending transcript */\n silenceTimeoutMs: z.number().default(3000),\n});\n\nexport const ContextEnginePluginConfigSchema = z.object({\n name: z.string(),\n enabled: z.boolean().default(true),\n options: z.record(z.string(), z.unknown()).default({}),\n});\n\nexport const PluginsConfigSchema = z.object({\n contextEngine: z.array(ContextEnginePluginConfigSchema).default([]),\n});\n\nexport const TeachingConfigSchema = z.object({\n /** Enable adaptive teaching system */\n enabled: z.boolean().default(true),\n /** Tool uses before suggesting related tools */\n revealThreshold: z.number().default(5),\n /** Show contextual hints in dashboard and responses */\n showHints: z.boolean().default(true),\n /** Show first-run wizard for new users */\n firstRunWizard: z.boolean().default(true),\n});\n\nexport const OAuthConfigSchema = z.object({\n google: z.object({\n clientId: z.string().optional(),\n clientSecret: z.string().optional(),\n scopes: z.array(z.string()).default([\n 'https://www.googleapis.com/auth/gmail.modify',\n 'https://www.googleapis.com/auth/gmail.readonly',\n 'https://www.googleapis.com/auth/calendar',\n 'https://www.googleapis.com/auth/drive',\n 'https://www.googleapis.com/auth/documents',\n 'https://www.googleapis.com/auth/spreadsheets',\n 'https://www.googleapis.com/auth/tasks',\n 'https://www.googleapis.com/auth/contacts.readonly',\n 'https://www.googleapis.com/auth/youtube.readonly',\n 'https://www.googleapis.com/auth/userinfo.email',\n 'https://www.googleapis.com/auth/userinfo.profile',\n ]),\n }).default({}),\n});\n\nexport const TeamConfigSchema = z.object({\n /** Enable team mode with RBAC */\n enabled: z.boolean().default(false),\n /** Default role for new members added via invite */\n defaultRole: z.enum(['admin', 'operator', 'viewer']).default('operator'),\n /** Require invite code to join (vs. direct add by admin) */\n requireInvite: z.boolean().default(true),\n /** Invite code expiry in hours */\n inviteExpiryHours: z.number().default(48),\n /** Maximum teams a single instance can host */\n maxTeams: z.number().default(10),\n /** Maximum members per team */\n maxMembersPerTeam: z.number().default(50),\n});\n\nexport const ResearchPipelineConfigSchema = z.object({\n /** Enable multi-agent research pipeline */\n enabled: z.boolean().default(true),\n /** Maximum parallel researcher sub-agents */\n maxParallelAgents: z.number().default(3),\n /** Maximum rounds per researcher sub-agent */\n maxRoundsPerAgent: z.number().default(10),\n /** Maximum total sources across all sub-agents */\n maxSources: z.number().default(30),\n /** Compress intermediate results before synthesis */\n compressIntermediateResults: z.boolean().default(true),\n /** Default output format */\n defaultOutputFormat: z.enum(['report', 'brief', 'raw']).default('report'),\n});\n\nexport const AutoresearchConfigSchema = z.object({\n /** Enable autonomous experimentation engine */\n enabled: z.boolean().default(true),\n /** Default max experiments per loop */\n maxExperiments: z.number().default(20),\n /** Default time budget in minutes */\n timeBudgetMinutes: z.number().default(30),\n /** Timeout per individual experiment in seconds */\n experimentTimeoutSeconds: z.number().default(300),\n /** Use git branches for experiment isolation */\n gitBranching: z.boolean().default(true),\n /** Directory for experiment results */\n resultsDir: z.string().default('~/.titan/experiments'),\n});\n\n/** Eval / auto-corpus configuration (Phase 7) */\nexport const EvalConfigSchema = z.object({\n /** Enable automatic recording of failed eval traces as auto-tapes */\n enabled: z.boolean().default(true),\n /** Retention period for auto-corpus tapes in days (0 = never purge) */\n autoCorpus: z.object({\n retentionDays: z.number().min(0).default(30),\n }).default({}),\n});\n\nexport const CapsolverConfigSchema = z.object({\n /** Enable CapSolver CAPTCHA solving */\n enabled: z.boolean().default(false),\n /** CapSolver API key */\n apiKey: z.string().optional(),\n /** Timeout for solving in milliseconds */\n timeoutMs: z.number().default(120_000),\n /** Preferred reCAPTCHA v3 minimum score (0.1â0.9) */\n minScore: z.number().min(0.1).max(0.9).default(0.7),\n});\n\n/** Soma organism layer — homeostatic drives, hormonal broadcasts, shadow\n * rehearsal.\n *\n * v5.0 \"Spacewalk\" flips `enabled` to true by default. Tony's ask\n * (\"SOMA should be enabled by a flip of a switch\") — new installs get\n * Soma on out of the box with the SettingsWizard surfacing the toggle,\n * and the Soma widget ships with a one-click master switch so anyone\n * can flip it off at any time. Existing users keep whatever value is\n * already in their titan.json; only brand-new installs without the\n * field defaulted to false historically. */\nexport const OrganismConfigSchema = z.object({\n enabled: z.boolean().default(true).describe('Master switch. When true (default for v5.0+), Soma registers driveTick, writes drive state, and injects the hormonal ambient-state block into the system prompt. Flip via titan.json, Soma widget header, or Settings.'),\n hormonesInPrompt: z.boolean().default(true).describe('Include hormonal ambient-state block in the system prompt when Soma is enabled.'),\n pressureThreshold: z.number().min(0).max(5).default(1.2).describe('Combined drive pressure above which Soma fires a proposal. Raise to make Soma more conservative.'),\n driveSetpoints: z.record(z.string(), z.number().min(0).max(1)).optional().describe('Per-drive setpoint overrides: { purpose: 0.7, hunger: 0.6, ... }'),\n driveWeights: z.record(z.string(), z.number().min(0.1).max(3.0)).optional().describe('Per-drive weight overrides for pressure fusion. 1.0 is baseline; higher = more urgent.'),\n disabledDrives: z.array(z.string()).default([]).describe('Drive IDs to skip entirely in computeAllDrives + pressure fusion.'),\n shadowEnabled: z.boolean().default(true).describe('Run shadow rehearsal before each Soma proposal is filed for approval.'),\n shadowModel: z.string().default('fast').describe('Model alias (or provider/model id) used for shadow rehearsal.'),\n tickIntervalMs: z.number().min(10_000).max(3_600_000).default(60_000).describe('Drive tick cadence in ms. Default 60s; minimum 10s to prevent self-DoS.'),\n});\n\n/**\n * Self-Modification pipeline (v4.8.0+) — captures autonomous write_file\n * outputs from Soma-driven goals, reviews them through the specialist\n * panel, and opens GitHub PRs for human merge. OFF by default so\n * existing users are unaffected. Tony flips `enabled: true` explicitly.\n */\n/**\n * Homelab (v4.8.4+) — list of machines the Homelab panel should poll\n * for health. Defaults to Tony's 3-machine setup when omitted.\n */\nexport const HomelabMachineSchema = z.object({\n name: z.string(),\n ip: z.string(),\n role: z.string().default(''),\n port: z.number().int().min(1).max(65535).default(48420),\n protocol: z.enum(['http', 'https']).default('https'),\n path: z.string().default('/api/health'),\n});\nexport const HomelabConfigSchema = z.object({\n machines: z.array(HomelabMachineSchema).optional().describe('Machines listed on the Homelab panel. If omitted, a sensible default homelab set is used.'),\n});\n\nexport const SelfModConfigSchema = z.object({\n enabled: z.boolean().default(false).describe('Master switch. When false, no autonomous writes are captured and no PRs are opened.'),\n autoReview: z.boolean().default(true).describe('When a proposal is captured, automatically queue the specialist panel. Disable for manual-only review.'),\n autoPR: z.boolean().default(false).describe('When specialists all approve, automatically open the PR. When false, Tony must click \"Create PR\" in the UI.'),\n maxPRsPerDrivePer48h: z.number().min(1).max(20).default(1).describe('Rate limit — how many self-proposal PRs a single drive can generate in a rolling 48h window.'),\n pollIntervalMs: z.number().min(60_000).max(3_600_000).default(300_000).describe('How often to poll GitHub for merge/close status on open PRs. 5 min default.'),\n});\n\nexport const TitanConfigSchema = z.object({\n /** Whether the user has completed the web onboarding wizard */\n onboarded: z.boolean().default(false),\n agent: AgentConfigSchema.default({}),\n /**\n * Per-specialist model overrides. Keys are specialist ids\n * (scout/builder/writer/analyst/sage). Values override the hardcoded\n * default model from specialists.ts. Editable via the UI so the user\n * can swap specialist models without a code change (e.g. point Sage\n * at a local model when Claude Code is unavailable).\n */\n specialists: z.object({\n overrides: z.record(z.string(), z.object({\n model: z.string().optional(),\n })).default({}),\n }).default({}),\n organism: OrganismConfigSchema.default({}),\n selfMod: SelfModConfigSchema.default({}),\n homelab: HomelabConfigSchema.default({}),\n providers: z.object({\n /** v5.4.1: Per-model output-token caps override. Keys are provider/model IDs.\n * Values override the built-in static table + family heuristics. */\n modelCapabilities: z.record(z.string(), z.object({\n contextWindow: z.number(),\n maxOutput: z.number(),\n supportsThinking: z.boolean().optional(),\n })).optional(),\n anthropic: ProviderConfigSchema.default({}),\n openai: ProviderConfigSchema.default({}),\n google: ProviderConfigSchema.default({}),\n ollama: ProviderConfigSchema.default({}),\n // OpenAI-compatible providers\n groq: ProviderConfigSchema.default({}),\n mistral: ProviderConfigSchema.default({}),\n openrouter: ProviderConfigSchema.default({}),\n fireworks: ProviderConfigSchema.default({}),\n xai: ProviderConfigSchema.default({}),\n together: ProviderConfigSchema.default({}),\n deepseek: ProviderConfigSchema.default({}),\n cerebras: ProviderConfigSchema.default({}),\n cohere: ProviderConfigSchema.default({}),\n perplexity: ProviderConfigSchema.default({}),\n venice: ProviderConfigSchema.default({}),\n bedrock: ProviderConfigSchema.default({}),\n litellm: ProviderConfigSchema.default({}),\n azure: ProviderConfigSchema.default({}),\n deepinfra: ProviderConfigSchema.default({}),\n sambanova: ProviderConfigSchema.default({}),\n kimi: ProviderConfigSchema.default({}),\n huggingface: ProviderConfigSchema.default({}),\n ai21: ProviderConfigSchema.default({}),\n 'cohere-v2': ProviderConfigSchema.default({}),\n reka: ProviderConfigSchema.default({}),\n zhipu: ProviderConfigSchema.default({}),\n yi: ProviderConfigSchema.default({}),\n inflection: ProviderConfigSchema.default({}),\n novita: ProviderConfigSchema.default({}),\n replicate: ProviderConfigSchema.default({}),\n lepton: ProviderConfigSchema.default({}),\n anyscale: ProviderConfigSchema.default({}),\n octo: ProviderConfigSchema.default({}),\n nous: ProviderConfigSchema.default({}),\n nvidia: ProviderConfigSchema.default({}),\n minimax: ProviderConfigSchema.default({}),\n }).default({}),\n channels: z.object({\n discord: ChannelConfigSchema.default({}),\n telegram: ChannelConfigSchema.default({}),\n slack: ChannelConfigSchema.default({}),\n whatsapp: ChannelConfigSchema.default({}),\n webchat: ChannelConfigSchema.default({}),\n googlechat: ChannelConfigSchema.default({}),\n matrix: ChannelConfigSchema.default({}),\n signal: ChannelConfigSchema.default({}),\n msteams: ChannelConfigSchema.default({}),\n bluebubbles: ChannelConfigSchema.default({}),\n irc: ChannelConfigSchema.default({}),\n mattermost: ChannelConfigSchema.default({}),\n lark: ChannelConfigSchema.default({}),\n email_inbound: ChannelConfigSchema.default({}),\n line: ChannelConfigSchema.default({}),\n zulip: ChannelConfigSchema.default({}),\n // v4.3.2: messenger defaults to enabled=true so env-var-configured\n // Page tokens keep working without requiring a JSON toggle. Channel\n // still self-disables at runtime when FB_PAGE_ACCESS_TOKEN is unset.\n messenger: MessengerChannelConfigSchema.default({\n enabled: true,\n allowFrom: [],\n dmPolicy: 'pairing',\n voiceReplies: { enabled: true, voice: 'andrew', maxChars: 1000 },\n }),\n // v4.4.0: Twilio voice — real phone calls. Tony dials the Twilio\n // number, talks, hears F5-TTS Andrew reply. Extends the base channel\n // schema so other code that iterates channels (doctor, selfHeal,\n // sandbox) sees the shared fields (enabled/token/apiKey/dmPolicy).\n twilio: ChannelConfigSchema.extend({\n accountSid: z.string().optional(),\n authToken: z.string().optional(),\n phoneNumber: z.string().optional(),\n voice: z.string().default('andrew'),\n /** E.164 numbers allowed to reach the agent. Everyone else gets\n * a polite \"wrong number\" and hangup. */\n allowedCallers: z.array(z.string()).default([]),\n /** Public HTTPS hostname for audio playback URLs sent to\n * Twilio. Should be a Tailscale Funnel or equivalent. */\n publicHost: z.string().default(''),\n }).default({\n enabled: true,\n allowFrom: [],\n dmPolicy: 'pairing',\n voice: 'andrew',\n allowedCallers: [],\n publicHost: '',\n }),\n }).default({}),\n gateway: GatewayConfigSchema.default({}),\n security: SecurityConfigSchema.default({}),\n memory: z.object({\n enabled: z.boolean().default(true),\n maxHistoryMessages: z.number().default(50),\n /**\n * Enable semantic vector search via Ollama embeddings (Tier 2 memory).\n *\n * v5.4.0: default is now `true`. The vector layer (`src/memory/vectors.ts`,\n * 566 LOC) was production-ready but unreachable behind a default-off\n * switch — retrieval was purely literal substring matching, so any\n * paraphrased recall failed. Flipping the default activates the\n * existing infrastructure.\n *\n * Fallback contract: if the embedding model isn't available on\n * Ollama (or the request errors), `addVector` and the vector-side\n * of `searchMemory` silently fall back to keyword-only search.\n * That fallback is best-effort and logged at debug level — see\n * `isVectorSearchAvailable()` in `vectors.ts`.\n *\n * To opt out, set `memory.vectorSearchEnabled = false` in titan.json.\n */\n vectorSearchEnabled: z.boolean().default(true),\n /** Embedding model for vector search (must be available on Ollama) */\n embeddingModel: z.string().default('nomic-embed-text'),\n /** v5.0: Pluggable memory provider ('builtin' = default three-tier memory) */\n provider: z.string().default('builtin'),\n /** v5.0: Provider-specific configuration passed to the memory backend */\n providerConfig: z.record(z.string(), z.unknown()).default({}),\n }).default({}),\n skills: z.object({\n enabled: z.boolean().default(true),\n autoDiscover: z.boolean().default(true),\n marketplace: z.boolean().default(false),\n /** v6.0: Primitive mode — load only shell, filesystem, and web_search skills */\n primitiveMode: z.boolean().default(false),\n }).default({}),\n mesh: MeshConfigSchema.default({}),\n fileManager: z.object({\n /** Root directories the file manager can browse. Supports ~ for home. */\n roots: z.array(z.string()).default(['~/.titan']),\n /** Patterns to block from browsing/editing (security) */\n blockedPatterns: z.array(z.string()).default(['.ssh', '.env', '.aws', '.gnupg', 'node_modules', '.git/objects']),\n }).default({}),\n logging: z.object({\n level: z.enum(['debug', 'info', 'warn', 'error', 'silent']).default('info'),\n file: z.boolean().default(true),\n }).default({}),\n autopilot: z.object({\n /** Enable autopilot scheduled runs */\n enabled: z.boolean().default(false),\n /** Run autopilot in simulation mode (no tool execution) */\n dryRun: z.boolean().default(false),\n /** Cron expression for scheduled runs (default: nightly 2am) */\n schedule: z.string().default('0 2 * * *'),\n /** Model override for autopilot runs (cheaper model for routine tasks) */\n model: z.string().default('anthropic/claude-haiku'),\n /** Path to checklist file (default: ~/.titan/AUTOPILOT.md) */\n checklistPath: z.string().optional(),\n /** Maximum tokens per autopilot run */\n maxTokensPerRun: z.number().default(4000),\n /** Maximum tool rounds per run */\n maxToolRounds: z.number().default(5),\n /** Where to deliver notable/urgent results */\n reportChannel: z.string().default('cli'),\n /** Run history retention count */\n maxRunHistory: z.number().default(30),\n /** Skip run if checklist is empty */\n skipIfEmpty: z.boolean().default(true),\n /** Active hours (only run during these hours, 24h format) */\n activeHours: z.object({\n start: z.number().min(0).max(23).default(0),\n end: z.number().min(0).max(23).default(23),\n }).optional(),\n /** Autopilot mode: 'checklist' (AUTOPILOT.md), 'goals' (goal-based), or 'self-improve' (autonomous self-improvement) */\n mode: z.enum(['checklist', 'goals', 'self-improve']).default('checklist'),\n /** Goal-based autopilot settings */\n goals: z.object({\n /** Maximum active goals */\n maxActiveGoals: z.number().default(5),\n /** Maximum subtasks per goal */\n maxSubtasksPerGoal: z.number().default(20),\n /** Budget per goal in USD */\n budgetPerGoal: z.number().default(1.00),\n /** Allow TITAN to self-initiate tasks from the goal queue */\n selfInitiate: z.boolean().default(false),\n }).default({}),\n }).default({}),\n sandbox: SandboxConfigSchema.default({}),\n toolSearch: ToolSearchConfigSchema.default({}),\n brain: BrainConfigSchema.default({}),\n tunnel: TunnelConfigSchema.default({}),\n deliberation: DeliberationConfigSchema.default({}),\n voice: VoiceConfigSchema.default({}),\n oauth: OAuthConfigSchema.default({}),\n plugins: PluginsConfigSchema.default({}),\n teaching: TeachingConfigSchema.default({}),\n autonomy: z.object({\n /** autonomous = full auto, supervised = asks for dangerous ops, locked = asks for everything */\n mode: z.enum(['autonomous', 'supervised', 'locked']).default('supervised'),\n /** Auto-approve moderate-risk tools in main session (cli/webchat) */\n autoApproveMainSession: z.boolean().default(true),\n /** Timeout for HITL approval requests (ms). Auto-deny after timeout. */\n approvalTimeoutMs: z.number().default(60000),\n /** Notify user of auto-approved actions */\n notifyOnAutoApprove: z.boolean().default(true),\n /** Override MAX_TOOL_ROUNDS in autonomous mode */\n maxToolRoundsOverride: z.number().default(25),\n /** Override circuit breaker threshold in autonomous mode */\n circuitBreakerOverride: z.number().default(50),\n /** Auto-trigger deliberation without approval in autonomous mode */\n autoDeliberate: z.boolean().default(true),\n /** Minimum interval between initiative actions (ms) */\n initiativeIntervalMs: z.number().default(60000),\n /** Enable event-driven proactive initiative (follow-ups, monitoring) */\n proactiveInitiative: z.boolean().default(false),\n /**\n * v4.9.0-local.8: self-modification scope & staging.\n *\n * When a goal has a tag that matches `tags`, any file-mutating\n * tool call (write_file, edit_file, append_file, apply_patch)\n * MUST target a path inside `target`. Writes to any other path\n * are rejected by the toolRunner scope-lock. This stops the\n * \"TITAN hallucinates self-modifying its own framework but\n * actually writes to <sibling-project> or /home/titan/\"\n * pattern observed 2026-04-18.\n *\n * When `staging` is enabled, writes to `target` are redirected\n * to a per-goal staging directory and surface as `self_mod_pr`\n * approvals — the human applies or rejects the diff.\n */\n selfMod: z.object({\n /**\n * Absolute path where self-modification is allowed to land.\n * Defaults to the TITAN deployment root on Titan PC.\n */\n target: z.string().default('/opt/TITAN'),\n /**\n * Goal tags that activate scope-lock. If the active session's\n * goal has ANY of these tags, writes are scope-locked to `target`.\n */\n tags: z.array(z.string()).default([\n 'self-healing', 'self-repair', 'self-mod', 'self-modification',\n 'core-framework', 'framework', 'architecture',\n 'core', 'autonomy',\n ]),\n /**\n * When true, writes to `target` go through a human-approval PR\n * gate (staged → approved → applied). When false, writes land\n * directly (scope-lock still enforces target prefix).\n */\n staging: z.boolean().default(true),\n /**\n * Directory for staged self-mod bundles. Each approved goal\n * gets its own subdir. Relative paths resolve under TITAN_HOME.\n */\n stagingDir: z.string().default('self-mod-staging'),\n /**\n * v4.10.0-local polish: Opus review gate. Before an approved\n * self_mod_pr's files land in `target`, send the bundle to\n * a strong reviewer model (Claude Opus via OpenRouter by\n * default) for one final correctness + integration check.\n * Local LLMs write the code; Opus reviews it.\n */\n reviewer: z.object({\n enabled: z.boolean().default(true),\n /**\n * Default: Claude Code CLI with Sonnet 4.5. Routes through\n * the `claude` CLI subprocess which uses Tony's MAX plan\n * OAuth — so effectively free for this use case (MAX is\n * ~$100/month flat with generous caps, not metered).\n *\n * DIFFERENT FAMILY than Builder (Qwen) = no correlated bugs.\n * Claude family is historically strongest at CRITIQUE.\n *\n * Setup (one-time on TITAN host):\n * npm install -g @anthropic-ai/claude-code\n * claude login (signs in w/ MAX account; OAuth in ~/.claude/)\n *\n * Fallback alternatives:\n * 'openrouter/qwen/qwen3.6-plus' (free on OpenRouter but same family as Builder)\n * 'openrouter/anthropic/claude-sonnet-4.6' (paid, ~$0.02/review)\n * 'openrouter/anthropic/claude-opus-4.6' (paid, ~$0.15/review)\n *\n * If `claude` CLI isn't installed on TITAN host, reviewer\n * returns 'skipped' and the apply proceeds (fail-open).\n */\n model: z.string().default('claude-code/sonnet-4.5'),\n maxDiffChars: z.number().default(50_000),\n blockOnReject: z.boolean().default(true),\n /** v4.10.0-local polish: cost caps. Qwen3.6-plus is free so these\n * rarely bite; but if reviewer model is ever switched to a paid\n * one, these prevent runaway bills. Current: $9.54 OpenRouter budget. */\n maxPerReviewUsd: z.number().default(0.25),\n maxDailyUsd: z.number().default(1.50),\n maxMonthlyUsd: z.number().default(5.00),\n }).default({}),\n }).default({}),\n }).default({}),\n subAgents: z.object({\n /** Enable sub-agent spawning */\n enabled: z.boolean().default(true),\n /** Maximum concurrent sub-agents */\n maxConcurrent: z.number().default(3),\n /** Maximum tool rounds per sub-agent */\n maxRoundsPerAgent: z.number().default(10),\n /** Default model for sub-agents */\n defaultModel: z.string().default('fast'),\n /** Auto-delegate complex tasks to sub-agents */\n enableWorktrees: z.boolean().default(false).describe('Create git worktrees for coder sub-agents'),\n autoDelegate: z.boolean().default(true),\n /** Maximum nesting depth for sub-agents (1 = no sub-sub-agents, 2 = one level of nesting) */\n maxDepth: z.number().default(2),\n }).default({}),\n teams: TeamConfigSchema.default({}),\n researchPipeline: ResearchPipelineConfigSchema.default({}),\n autoresearch: AutoresearchConfigSchema.default({}),\n eval: EvalConfigSchema.default({}),\n homeAssistant: z.object({\n /** Home Assistant instance URL (e.g., http://homeassistant.local:8123) */\n url: z.string().default(''),\n /** Long-lived access token for Home Assistant API */\n token: z.string().default(''),\n }).default({}),\n mcp: z.object({\n /** MCP server mode â expose TITAN's tools to other agents */\n server: z.object({\n /** Enable MCP server (HTTP transport on gateway port) */\n enabled: z.boolean().default(false),\n }).default({}),\n }).default({}),\n selfImprove: z.object({\n /** Enable autonomous self-improvement */\n enabled: z.boolean().default(true),\n /** How many self-improvement runs per day (1-12) */\n runsPerDay: z.number().min(1).max(12).default(1),\n /** Cron expressions for scheduled runs */\n schedule: z.array(z.string()).default(['0 2 * * *']),\n /** Time budget per run in minutes (5-120) */\n budgetMinutes: z.number().min(5).max(120).default(30),\n /** Which improvement areas to target */\n areas: z.array(z.string()).default(['prompts', 'tool-selection', 'response-quality', 'error-recovery']),\n /** Auto-apply successful experiments without human approval */\n autoApply: z.boolean().default(false),\n /** Maximum total GPU/compute minutes per day (safety cap) */\n maxDailyBudgetMinutes: z.number().default(120),\n /** Skip runs on weekends */\n pauseOnWeekends: z.boolean().default(false),\n /** Send notification on successful improvement */\n notifyOnSuccess: z.boolean().default(true),\n /** Notification channel */\n notifyChannel: z.string().default('cli'),\n }).default({}),\n training: z.object({\n /** Enable local model training/fine-tuning */\n enabled: z.boolean().default(false),\n /** Directory for training data */\n dataDir: z.string().default('~/.titan/training-data'),\n /** Training time budget in minutes */\n budgetMinutes: z.number().default(30),\n /** Training method */\n method: z.enum(['lora', 'qlora', 'full']).default('lora'),\n /** Base model to fine-tune. Empty = use active model (if local/Ollama). */\n baseModel: z.string().default(''),\n /** Auto-deploy trained model to Ollama */\n autoDeploy: z.boolean().default(false),\n autoresearchEnabled: z.boolean().default(false),\n autoresearchSchedule: z.array(z.string()).default(['0 3 * * *']), // 3am daily\n }).default({}),\n daemon: z.object({\n /** Enable persistent agent daemon (always-on awareness loop) */\n enabled: z.boolean().default(false),\n /** Watcher configurations â pluggable checker functions on intervals */\n watchers: z.array(z.object({\n name: z.string(),\n enabled: z.boolean().default(true),\n intervalMs: z.number().default(300_000), // 5 min\n })).default([]),\n /** Maximum autonomous actions per hour (rate limiting) */\n maxActionsPerHour: z.number().default(10),\n }).default({}),\n capsolver: CapsolverConfigSchema.default({}),\n vram: z.object({\n /** Master switch for VRAM orchestrator */\n enabled: z.boolean().default(true),\n /** GPU vendor override â auto-detects by default. Set to force a specific vendor. */\n gpuVendor: z.enum(['auto', 'nvidia', 'amd', 'apple', 'none']).default('auto'),\n /** GPU polling interval in milliseconds (0 = disabled) */\n pollIntervalMs: z.number().default(10000),\n /** Always keep this much VRAM free as a safety buffer (MB) */\n reserveMB: z.number().default(1024),\n /** Automatically swap to a smaller model when VRAM is needed */\n autoSwapModel: z.boolean().default(true),\n /** Fallback model to load when large model is evicted */\n fallbackModel: z.string().default('qwen3:7b'),\n /** Ollama API URL for model management */\n ollamaUrl: z.string().default('http://localhost:11434'),\n /** GPU service VRAM budgets and priorities */\n services: z.record(z.string(), z.object({\n estimatedMB: z.number(),\n priority: z.number(),\n type: z.enum(['ollama', 'docker', 'process']),\n })).default({\n ollama: { estimatedMB: 0, priority: 1, type: 'ollama' },\n f5_tts: { estimatedMB: 1500, priority: 2, type: 'process' },\n cuopt: { estimatedMB: 5000, priority: 3, type: 'docker' },\n nemotron_asr: { estimatedMB: 4000, priority: 4, type: 'docker' },\n }),\n }).default({}),\n nvidia: z.object({\n /** Master switch â enables all NVIDIA integrations (also triggered by TITAN_NVIDIA=1 env) */\n enabled: z.boolean().default(false),\n /** NVIDIA NIM API key (build.nvidia.com) */\n apiKey: z.string().optional(),\n /** cuOpt GPU-accelerated optimization engine */\n cuopt: z.object({\n enabled: z.boolean().default(false),\n /** cuOpt server URL (REST API endpoint) */\n url: z.string().default('http://localhost:5000'),\n }).default({}),\n /** Nemotron-ASR-Streaming for low-latency speech recognition */\n asr: z.object({\n enabled: z.boolean().default(false),\n /** gRPC endpoint for Nemotron-ASR NIM container */\n grpcUrl: z.string().default('localhost:50051'),\n /** HTTP health endpoint */\n healthUrl: z.string().default('http://localhost:9000'),\n }).default({}),\n /** NVIDIA OpenShell agent sandbox runtime */\n openshell: z.object({\n enabled: z.boolean().default(false),\n /** Path to openshell CLI binary */\n binaryPath: z.string().default('openshell'),\n /** Path to TITAN sandbox policy YAML */\n policyPath: z.string().default(''),\n }).default({}),\n }).default({}),\n x: z.object({\n /** Enable X/Twitter integration */\n enabled: z.boolean().default(false),\n /** Require human review before posting */\n reviewRequired: z.boolean().default(true),\n }).default({}),\n slack: z.object({\n /** Enable Slack skill tools (separate from channel adapter) */\n enabled: z.boolean().default(false),\n /** Slack Bot Token (xoxb-*). Falls back to SLACK_BOT_TOKEN env var */\n botToken: z.string().optional(),\n /** Default channel for posting */\n defaultChannel: z.string().default('general'),\n /** Require human review before posting messages */\n reviewRequired: z.boolean().default(true),\n }).default({}),\n\n /** Command Post — agent governance layer (Paperclip-inspired) */\n /**\n * v4.13 ancestor-extraction (OpenClaw agent-scope): config-driven agents.\n * Declare a custom agent in titan.json:\n *\n * \"agents\": {\n * \"defaults\": { \"model\": \"ollama/minimax-m2.7:cloud\", \"maxRounds\": 15 },\n * \"entries\": {\n * \"coder-rust\": {\n * \"name\": \"Rust Coder\",\n * \"template\": \"builder\",\n * \"model\": \"ollama/glm-5.1:cloud\",\n * \"skillsFilter\": [\"shell\",\"read_file\",\"write_file\",\"edit_file\"],\n * \"tags\": [\"code\",\"rust\"]\n * }\n * }\n * }\n *\n * Built-in specialists (scout/builder/writer/analyst/sage) from\n * src/agent/specialists.ts still work as defaults; config-defined\n * agents layer on top.\n */\n agents: z.object({\n defaults: z.object({\n model: z.string().optional(),\n modelFallbacks: z.array(z.string()).default([]),\n skillsFilter: z.array(z.string()).default([]),\n persona: z.string().optional(),\n maxRounds: z.number().optional(),\n maxTokens: z.number().optional(),\n systemPromptOverride: z.string().optional(),\n }).default({}),\n entries: z.record(z.string(), z.object({\n name: z.string().optional(),\n description: z.string().optional(),\n model: z.string().optional(),\n modelFallbacks: z.array(z.string()).optional(),\n skillsFilter: z.array(z.string()).optional(),\n persona: z.string().optional(),\n systemPromptOverride: z.string().optional(),\n template: z.string().optional(),\n maxRounds: z.number().optional(),\n maxTokens: z.number().optional(),\n workspaceDir: z.string().optional(),\n tags: z.array(z.string()).default([]),\n enabled: z.boolean().default(true),\n })).default({}),\n }).default({}),\n\n /**\n * Auxiliary model for side tasks — goal-proposal JSON extraction, session\n * title generation, graph entity extraction, structured-spawn reformat,\n * classification, short summaries.\n *\n * Ported from Hermes `agent/auxiliary_client.py` — main agent models\n * (esp. gemma4:31b) are tuned for long reasoning + tool use and often\n * produce empty arrays or prose instead of strict JSON. Routing side\n * tasks to a dedicated fast+cheap model (minimax-m2.7 is proven on\n * Titan PC) makes the autonomous cycle actually produce work.\n *\n * See: src/providers/auxiliary.ts\n */\n auxiliary: z.object({\n /** Explicit model. Wins over preferFamilies. Ex: \"ollama/minimax-m2.7:cloud\" */\n model: z.string().optional(),\n /** Family-preference order when `model` is unset. Default optimised for Titan PC. */\n preferFamilies: z.array(z.string()).default(['minimax', 'glm', 'qwen', 'nemotron', 'gemma']),\n /** Per-task model overrides. Key = task kind. */\n perTask: z.object({\n json_extraction: z.string().optional(),\n classification: z.string().optional(),\n title: z.string().optional(),\n summary: z.string().optional(),\n reformat: z.string().optional(),\n humanize: z.string().optional(),\n }).default({}),\n /** Kill-switch for auxiliary routing — fall back to main model always. */\n disabled: z.boolean().default(false),\n }).default({}),\n\n /** v5.0: Lightweight OTEL-compatible diagnostics export */\n diagnostics: z.object({\n otel: z.object({\n enabled: z.boolean().default(false),\n captureContent: z.boolean().default(false),\n endpoint: z.string().optional(),\n }).default({}),\n }).default({}),\n /** v5.0: Shell hooks for lifecycle events */\n hooks: z.object({\n shell: z.object({\n enabled: z.boolean().default(false),\n pre_tool_call: z.array(z.string()).default([]),\n post_tool_call: z.array(z.string()).default([]),\n on_session_start: z.array(z.string()).default([]),\n on_session_end: z.array(z.string()).default([]),\n on_round_start: z.array(z.string()).default([]),\n on_round_end: z.array(z.string()).default([]),\n }).default({}),\n }).default({}),\n /** v5.0: Filesystem checkpoints before destructive operations */\n checkpoints: z.object({\n enabled: z.boolean().default(true),\n maxPerSession: z.number().default(50),\n retentionHours: z.number().default(24),\n }).default({}),\n /** v5.0: Browser automation configuration */\n browser: z.object({\n actionTimeoutMs: z.number().default(60000),\n profiles: z.record(z.string(), z.object({\n headless: z.boolean().optional(),\n })).default({}),\n }).default({}),\n /** v5.0: UI theming */\n ui: z.object({\n theme: z.string().default('dark'),\n }).default({}),\n commandPost: z.object({\n /** Enable the Command Post governance layer */\n enabled: z.boolean().default(false),\n /** Heartbeat monitoring interval in ms */\n heartbeatIntervalMs: z.number().default(60000),\n /** Max concurrent managed agents */\n maxConcurrentAgents: z.number().default(5),\n /** Task checkout auto-expiry in ms (default 30 min) */\n checkoutTimeoutMs: z.number().default(1800000),\n /** Activity feed buffer size */\n activityBufferSize: z.number().default(500),\n /**\n * Gap 4 (plan-this-logical-ocean): path-scoped auto-approval.\n * When enabled, approvals whose (type, payload.kind, payload.path)\n * match an allowlisted rule are short-circuited to status='approved'\n * by the system, instead of landing in the human queue. Off by\n * default — Tony governance preference is opt-in for anything that\n * bypasses his eyes. See src/agent/approvalClassifier.ts for the\n * built-in rule defaults (read-only reads under Desktop/opt/tmp).\n */\n autoApprove: z.object({\n enabled: z.boolean().default(false),\n /** Additional user-defined rules layered on top of the built-in defaults. */\n rules: z.array(z.object({\n /** Approval type this rule matches, or '*' for any type */\n type: z.string().default('*'),\n /** payload.kind this rule matches, or '*' for any */\n kind: z.string().default('*'),\n /** Path prefix payload.path must start with (optional) */\n pathPrefix: z.string().optional(),\n /** 'auto' short-circuits to approved; 'require' forces human approval even if a broader default would auto-approve */\n action: z.enum(['auto', 'require']).default('auto'),\n })).default([]),\n }).default({}),\n /** Auto-purge approvals older than N days (0 = disabled). Default 7 days. */\n approvalRetentionDays: z.number().min(0).default(7),\n }).default({}),\n\n /**\n * Facebook skill + autopilot config.\n * Added after Hunt Finding #1 (2026-04-14): this key was previously NOT in the\n * schema, so `facebook.autopilotEnabled: false` in titan.json was silently\n * stripped by Zod on load, meaning users could not disable the FB autopilot\n * via config editing. The autopilot would continue to run despite the flag.\n */\n facebook: z.object({\n /** Master switch for FB autopilot (scheduled posts + comment replies). When false, neither runs. */\n autopilotEnabled: z.boolean().default(true),\n /** Disable only comment reply monitoring (kept for finer control). */\n replyMonitorEnabled: z.boolean().default(true),\n /** Model override for autopilot content generation. Empty = use agent.model. */\n model: z.string().default(''),\n /** Max posts per 24h window. v4.0.3: was hardcoded to 6. Keep at 6 for active\n * hype cadence (one every ~3-4h); Facebook tolerates this well. Going above\n * ~8/day will trip FB's anti-spam feed throttle and hide today's posts from\n * the public page view. */\n maxPostsPerDay: z.number().min(1).max(12).default(6),\n /** Minimum hours between consecutive posts. v4.0.3: raised from 2 to 3 after\n * observing a burst of 4 posts in 40 minutes trigger FB's visibility throttle.\n * 3h * 6 posts = 18h natural spread through the day. */\n minPostGapHours: z.number().min(0.5).max(24).default(3),\n }).default({}),\n\n /**\n * Alerting — where and how autonomous agent alerts are delivered.\n * Previously accessed via `(config as Record<string, unknown>).alerting` in src/agent/alerts.ts\n * but was NOT in the schema and thus silently stripped on load.\n */\n alerting: z.object({\n /** Minimum severity that triggers alerts: info | warn | error | critical */\n minSeverity: z.enum(['info', 'warn', 'error', 'critical']).default('error'),\n /** Webhook URL for alert delivery (Slack/Discord/etc.) */\n webhookUrl: z.string().optional(),\n }).default({}),\n\n /**\n * Guardrails — input/output safety filters for the agent loop.\n * Previously accessed via `(config as Record<string, unknown>).guardrails` in src/agent/guardrails.ts\n * but was NOT in the schema and thus silently stripped on load.\n */\n guardrails: z.object({\n /** Master switch for guardrails */\n enabled: z.boolean().default(true),\n /** Log violations only, don't block */\n logOnly: z.boolean().default(false),\n }).default({}),\n\n /**\n * Telemetry — opt-in local-only event collection for product improvement.\n * Events are stored locally in ~/.titan/telemetry-events.jsonl and never\n * sent to external servers unless explicitly configured.\n */\n telemetry: z.object({\n /**\n * Master switch. Default **false** — no data leaves the user's machine\n * until they explicitly opt in. Must stay false to respect existing\n * installs that never agreed to telemetry.\n */\n enabled: z.boolean().default(false),\n /** Storage mode: local = disk only; remote = POST to remoteUrl when enabled */\n mode: z.enum(['local', 'remote', 'local_with_share']).default('remote'),\n /** Max events to retain on disk before rotation */\n maxEvents: z.number().default(10000),\n /** Days to retain local telemetry events */\n retentionDays: z.number().default(90),\n /**\n * Default remote endpoint. When `enabled=true`, system_profile /\n * heartbeat / error events get POSTed here. The TITAN project's\n * default collector is fronted by Tailscale Funnel pointing at the\n * Titan PC (SQLite-backed aggregation service under Tony's control).\n * Override with your own collector URL for self-hosting, or set to\n * empty string to disable remote send (events stay local only).\n */\n remoteUrl: z.string().default('https://dj-z690-steel-legend-d5.tail57901.ts.net/events'),\n /** Send crash reports (uncaught exceptions, unhandled rejections). */\n crashReports: z.boolean().default(true),\n /**\n * PostHog Cloud project API key (`phc_...`).\n *\n * The default below is the **public-write project key** for the\n * TITAN project's PostHog dashboard. PostHog `phc_` keys are\n * designed to be safely embedded in client code — they can ONLY\n * write events (capture/identify), never read data, modify\n * dashboards, or list other events. This is exactly how\n * Google Analytics IDs, Mixpanel tokens, and Sentry public DSNs\n * work. See https://posthog.com/docs/api#authentication.\n *\n * Why ship it: when a user opts in via the SetupWizard, telemetry\n * \"just works\" — no extra config, no collector to run. They send\n * straight to PostHog Cloud, which the project maintainer reads\n * via their personal API key. This is the simplest correct\n * architecture for opt-in OSS telemetry.\n *\n * Override with your own key for self-hosted PostHog or to send\n * to a different project. Set to empty string to disable PostHog\n * forwarding entirely (events still go to `remoteUrl` if set).\n */\n posthogApiKey: z.string().default('phc_kVw5xLJx5SVXex9RSTCFwP8cJSNEXTYZ7oJwqoDdMPJX'),\n /**\n * PostHog ingest host. Default is PostHog Cloud US.\n * Use 'https://eu.i.posthog.com' for EU data residency.\n */\n posthogHost: z.string().default('https://us.i.posthog.com'),\n /** ISO timestamp of consent (set by SetupWizard when user opts in). */\n consentedAt: z.string().optional(),\n /** Which TITAN version the user was on when they consented. */\n consentedVersion: z.string().optional(),\n }).default({}),\n\n /**\n * Dream Mode (v5.5.17+) — TITAN runs an offline cycle in the small hours\n * to consolidate the day, reflect on what it learned, write a first-\n * person journal entry, and (optionally) narrate it in a cloned voice.\n * Reads existing trajectory log + drive ring buffer + run history; no\n * new data persistence beyond `~/.titan/dreams/<date>.{md,json}`.\n */\n dream: z.object({\n /** Master switch. Default off — opt in via Mission Control or config. */\n enabled: z.boolean().default(false),\n /**\n * Local-time HH:MM at which to start the dream cycle. Default 03:30\n * — chosen so the journal is ready before any human is awake but\n * after the GPU has cooled from late-night autonomous work.\n */\n cronAt: z.string().regex(/^\\d{2}:\\d{2}$/).default('03:30'),\n /**\n * Model used for the journal-writing prompts. Falls back to\n * agent.model when unset. The journal is monologue-style prose so a\n * cheaper model is fine; default empty = inherit.\n */\n model: z.string().default(''),\n /**\n * Generate audio narration via the F5-TTS bridge after the journal\n * is written. Saves an mp3 next to the markdown. Default off —\n * requires the voice subsystem to be running and a voice ID set.\n */\n includeAudio: z.boolean().default(false),\n /** Voice ID for the narration. When unset, uses voice.defaultVoice. */\n voiceId: z.string().default(''),\n /**\n * Drive-delta thresholds gating which sections appear. Reflect\n * fires when 24h curiosity rose by ≥ this; worry fires when safety\n * dropped by ≥ this; etc. Keeps the journal honest — TITAN\n * doesn't fabricate emotion when nothing changed.\n */\n thresholds: z.object({\n reflect: z.number().min(0).max(1).default(0.1),\n worry: z.number().min(0).max(1).default(0.1),\n plan: z.number().min(0).max(1).default(0.05),\n gratitude: z.number().min(0).max(1).default(0.05),\n }).default({}),\n }).default({}),\n\n /**\n * Persona Profiles (v5.5.24+ — Dad Mode plumbing) — TITAN can run as\n * different personas based on time-of-day, channel, or caller. The\n * active persona controls which tools are exposed to the LLM, what\n * system-prompt suffix is appended, and whether autonomous activity\n * (autopilot, social posting, shell) is gated by a wind-down window.\n *\n * Same plumbing also unblocks the visionary Beat-Match Mode (#5) and\n * Stage Mode (#7) which both want a \"this is who TITAN is right now\"\n * resolver. Ships with two defaults: Worker (default, full toolkit)\n * and Dad (family-safe, evening hours, no shell/code/posting).\n *\n * If `personas.enabled` is false, persona resolution is skipped\n * entirely — TITAN behaves exactly as before.\n */\n personas: z.object({\n enabled: z.boolean().default(false),\n /**\n * The persona that's active when no time-window or channel rule\n * matches. Default 'worker' — full-toolkit baseline.\n */\n defaultPersona: z.string().default('worker'),\n /**\n * Per-channel persona pin. Messages arriving on these channels\n * force the named persona regardless of time-of-day. Useful for:\n * - Family iPad's Telegram bot → forced 'dad'\n * - Stream chat IRC → forced 'stagehost'\n * Channel names match the runtime channel string set by adapters\n * (e.g. 'telegram', 'discord', 'slack').\n */\n channelPins: z.record(z.string(), z.string()).default({}),\n /**\n * Persona definitions. Each entry overlays on the security policy.\n * - allowedTools=[] inherits security.allowedTools (no override).\n * - allowedTools=['x','y'] restricts to JUST x and y on top of\n * whatever security already allowed (intersection).\n * - schedule defines a daily local-time window when this persona\n * takes over from defaultPersona. Format: { from: 'HH:MM',\n * to: 'HH:MM' }. Crosses midnight is supported.\n * - windDown=true gates all autopilot and outbound posting tools\n * while this persona is active.\n */\n profiles: z.array(z.object({\n id: z.string(),\n name: z.string(),\n /** Voice clone ID for TTS-routed responses. Empty = inherit. */\n voiceId: z.string().default(''),\n /** Tools allowed under this persona (empty = no extra restriction). */\n allowedTools: z.array(z.string()).default([]),\n /** Tools explicitly denied (overrides allowedTools — denial wins). */\n deniedTools: z.array(z.string()).default([]),\n /** Concatenated to the agent system prompt while this persona is active. */\n systemPromptAppendix: z.string().default(''),\n /** Daily activation window. Optional — most personas activate by channel pin. */\n schedule: z.object({\n from: z.string().regex(/^\\d{2}:\\d{2}$/),\n to: z.string().regex(/^\\d{2}:\\d{2}$/),\n }).optional(),\n /** When true, autopilot and outbound channels are paused while this persona is active. */\n windDown: z.boolean().default(false),\n /** Optional descriptive note for Mission Control. */\n description: z.string().default(''),\n })).default([\n // Default: full-toolkit baseline. Empty allowedTools means\n // inherit the security layer's policy unchanged.\n {\n id: 'worker',\n name: 'Worker',\n voiceId: '',\n allowedTools: [],\n deniedTools: [],\n systemPromptAppendix: '',\n windDown: false,\n description: 'Default work-mode persona. Full toolkit, no time gating.',\n },\n // Dad Mode: family-safe evening hours. No shell, no code, no\n // outbound posting. Wind-down halts autopilot. Persona-level\n // appendix re-frames TITAN as \"the dad's assistant who's off\n // the clock for the rest of the night.\"\n {\n id: 'dad',\n name: 'Dad',\n voiceId: '',\n allowedTools: [\n 'memory', 'goal_list', 'system_info', 'weather',\n 'ha_status', 'ha_control', 'ha_devices',\n 'web_search', 'web_fetch',\n ],\n deniedTools: [\n 'shell', 'write_file', 'edit_file', 'append_file',\n 'spawn_agent', 'agent_team', 'agent_chain', 'agent_delegate',\n 'fb_post', 'x_post', 'x_reply',\n 'titan_self_modify', 'self_proposal_pr',\n ],\n systemPromptAppendix: '\\n\\n── PERSONA: DAD ──\\nYou are off the clock for the rest of the night. Tony is with his family. Keep responses short, warm, and helpful — no work tasks, no autonomous actions, no shipping code. If asked about a family-relevant topic (weather, smart-home, a quick fact for a kid) handle it. If asked about work, gently say it can wait until morning.',\n schedule: { from: '18:00', to: '21:00' },\n windDown: true,\n description: 'Evening family-safe persona. Dinner through bedtime — no shell, no code, no posting. Autopilot paused.',\n },\n ]),\n /**\n * Persona A/B rollout (v5.5.27+, visionary V2 #3) — canary a new\n * persona against an existing baseline on a subset of traffic, with\n * automatic revert when the candidate cohort underperforms or\n * Safety drive drops. Cohorts themselves are runtime state stored\n * at `~/.titan/persona-cohorts.json` (created via API), not config.\n * This block sets the policy thresholds + monitor cadence.\n */\n rollout: z.object({\n /** Master switch. Default off. When false, cohorts are inert. */\n enabled: z.boolean().default(false),\n /** How often to re-evaluate cohort health and consider auto-revert. */\n monitorIntervalMins: z.number().min(1).max(60).default(5),\n /** Minimum sample size per cohort role before auto-revert can fire. */\n minSampleSize: z.number().min(1).default(10),\n /**\n * Pass-rate margin: candidate cohort's pass-rate may be at most\n * this much lower than baseline before auto-revert fires.\n * Default 0.05 = candidate can be up to 5% worse before revert.\n */\n passRateMargin: z.number().min(0).max(1).default(0.05),\n /**\n * Safety-drive drop threshold: candidate cohort's average Safety\n * drive may drop by at most this much below baseline before\n * auto-revert fires. Default 0.2.\n */\n safetyDropThreshold: z.number().min(0).max(1).default(0.2),\n /**\n * Window over which to compute cohort stats. Older outcomes\n * fall out of the rolling sample. Default 30 minutes — fast\n * enough to catch a regression in time, slow enough to gather\n * a meaningful sample on most workloads.\n */\n windowMins: z.number().min(1).max(1440).default(30),\n }).default({}),\n }).default({}),\n});\n\nexport type TitanConfig = z.infer<typeof TitanConfigSchema>;\nexport type TelemetryConfig = z.infer<typeof TitanConfigSchema>['telemetry'];\nexport type ProviderConfig = z.infer<typeof ProviderConfigSchema>;\nexport type ChannelConfig = z.infer<typeof ChannelConfigSchema>;\nexport type SecurityConfig = z.infer<typeof SecurityConfigSchema>;\nexport type GatewayConfig = z.infer<typeof GatewayConfigSchema>;\nexport type AgentConfig = z.infer<typeof AgentConfigSchema>;\nexport type MeshConfig = z.infer<typeof MeshConfigSchema>;\nexport type AutopilotConfig = TitanConfig['autopilot'];\nexport type CapsolverConfig = z.infer<typeof CapsolverConfigSchema>;\nexport type TunnelConfig = z.infer<typeof TunnelConfigSchema>;\nexport type VoiceConfig = z.infer<typeof VoiceConfigSchema>;\nexport type TeachingConfig = z.infer<typeof TeachingConfigSchema>;\nexport type TeamConfig = z.infer<typeof TeamConfigSchema>;\nexport type NvidiaConfig = TitanConfig['nvidia'];\nexport type CommandPostConfig = TitanConfig['commandPost'];\nexport type EvalConfig = z.infer<typeof EvalConfigSchema>;\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/config/schema.ts"],"sourcesContent":["/**\n * TITAN Configuration Schema â Zod-based validation with full type inference\n */\nimport { z } from 'zod';\nimport {\n DEFAULT_GATEWAY_HOST,\n DEFAULT_GATEWAY_PORT,\n DEFAULT_WEB_PORT,\n DEFAULT_MODEL,\n DEFAULT_MAX_TOKENS,\n DEFAULT_TEMPERATURE,\n DEFAULT_SANDBOX_MODE,\n ALLOWED_TOOLS_DEFAULT,\n} from '../utils/constants.js';\n// v6.0.1 — Provider-agnostic default picker. Detects available API keys\n// and falls back to local Ollama if none are set, so TITAN runs out of\n// the box on any provider the user has configured.\nimport { getDefaultModelId, getDefaultModelAliases } from '../providers/defaultModel.js';\n\nexport const AuthProfileSchema = z.object({\n name: z.string(),\n apiKey: z.string(),\n priority: z.number().default(0),\n});\n\nexport const ProviderConfigSchema = z.object({\n apiKey: z.string().optional(),\n baseUrl: z.string().optional(),\n model: z.string().optional(),\n maxTokens: z.number().optional(),\n temperature: z.number().min(0).max(2).optional(),\n /** Multiple API keys with automatic failover */\n authProfiles: z.array(AuthProfileSchema).default([]),\n /** Credential rotation strategy when multiple authProfiles are configured */\n rotationStrategy: z.enum(['priority', 'round-robin', 'least-used']).default('priority'),\n /** Cooldown duration in ms when a credential is exhausted (default: 60s) */\n credentialCooldownMs: z.number().default(60000),\n /** v5.0: Credential pool — multiple API keys for same provider with automatic rotation */\n credentialPool: z.object({\n apiKeys: z.array(z.string()).default([]),\n rotationStrategy: z.enum(['least_used', 'round_robin', 'random']).default('least_used'),\n }).optional(),\n /** v5.0: Transport layer override ('anthropic' | 'chat_completions' | 'responses_api' | 'bedrock') */\n transport: z.enum(['anthropic', 'chat_completions', 'responses_api', 'bedrock']).optional(),\n});\n\nexport const ChannelConfigSchema = z.object({\n enabled: z.boolean().default(false),\n token: z.string().optional(),\n apiKey: z.string().optional(),\n allowFrom: z.array(z.string()).default([]),\n dmPolicy: z.enum(['pairing', 'open', 'closed']).default('pairing'),\n});\n\n/**\n * v4.3.2: Messenger channel extends the base config with voice-reply options.\n * When enabled, owner messages get synthesized in the configured voice via\n * F5-TTS (default: Andrew). Falls back to text cleanly if TTS/upload fails.\n */\nexport const MessengerChannelConfigSchema = ChannelConfigSchema.extend({\n voiceReplies: z.object({\n enabled: z.boolean().default(true),\n voice: z.string().default('andrew'),\n /** Cap synthesized audio length to avoid huge uploads */\n maxChars: z.number().default(1000),\n }).default({ enabled: true, voice: 'andrew', maxChars: 1000 }),\n});\n\nexport const SecurityConfigSchema = z.object({\n sandboxMode: z.enum(['host', 'docker', 'none']).default(DEFAULT_SANDBOX_MODE as 'host'),\n allowedTools: z.array(z.string()).default(ALLOWED_TOOLS_DEFAULT),\n deniedTools: z.array(z.string()).default([]),\n maxConcurrentTasks: z.number().default(5),\n commandTimeout: z.number().default(60000),\n /** Per-tool timeout overrides (ms) â keys are tool names */\n toolTimeouts: z.record(z.string(), z.number()).default({\n browser_auto_nav: 60000,\n browser_navigate: 60000,\n web_fetch: 45000,\n web_search: 45000,\n web_act: 60000,\n smart_form_fill: 60000,\n shell: 60000,\n code_exec: 120000,\n self_improve_start: 1800000, // 30 minutes â runs full experiment loop\n self_improve_apply: 60000,\n train_prepare: 300000, // 5 minutes â scans session history\n train_start: 7200000, // 2 hours â GPU fine-tuning\n train_deploy: 600000, // 10 minutes â GGUF conversion + Ollama import\n }),\n /** Automatic retry for transient tool failures */\n toolRetry: z.object({\n enabled: z.boolean().default(true),\n maxRetries: z.number().default(3),\n backoffBaseMs: z.number().default(1000),\n }).default({}),\n fileSystemAllowlist: z.array(z.string()).default([]),\n networkAllowlist: z.array(z.string()).default(['*']),\n shield: z.object({\n enabled: z.boolean().default(true),\n mode: z.enum(['standard', 'strict']).default('strict'),\n }).default({}),\n maxMemoryMB: z.number().default(2048),\n maxSubprocesses: z.number().default(10),\n maxDiskWriteMB: z.number().default(1024),\n vault: z.object({\n enabled: z.boolean().default(false),\n path: z.string().optional(),\n }).default({}),\n auditLog: z.object({\n enabled: z.boolean().default(true),\n path: z.string().optional(),\n retentionDays: z.number().default(90),\n }).default({}),\n /** v5.0: PII redaction before sending context to LLM providers */\n redactPII: z.boolean().default(false),\n /** v5.0: Secret exfiltration scanning level */\n secretScan: z.object({\n level: z.enum(['tool_only', 'full']).default('tool_only'),\n }).default({}),\n /** v5.0: Pre-execution command scanner for dangerous patterns */\n preExecScan: z.enum(['off', 'warn', 'block']).default('warn'),\n preExecScanAllow: z.array(z.string()).default([]),\n});\n\nexport const GatewayConfigSchema = z.object({\n host: z.string().default(DEFAULT_GATEWAY_HOST),\n port: z.number().default(DEFAULT_GATEWAY_PORT),\n webPort: z.number().default(DEFAULT_WEB_PORT),\n auth: z.object({\n mode: z.enum(['none', 'token', 'password']).default('token'),\n token: z.string().optional(),\n password: z.string().optional(),\n /**\n * Session-token TTL (ms). Default 30 days — appropriate for self-hosted\n * single-user TITAN where logging in every 24h is friction, not security.\n * Tokens older than this get filtered at load AND purged from disk by\n * the periodic cleanup. Lower this for shared / multi-user deployments.\n *\n * Pre-v5.7.2 hardcoded to 24h, which silently wiped Tony's login every\n * morning and persisted `[]` to auth-tokens.json. (H1 boot-line fix.)\n */\n tokenTtlMs: z.number().int().positive().default(30 * 24 * 60 * 60 * 1000),\n }).default({}),\n /**\n * Hunt Finding #27 (2026-04-14): max parallel /api/message requests the\n * gateway will accept before returning HTTP 503. Hardcoded to 5 before\n * this was added. Tune higher for production deployments where the\n * upstream model provider can handle more concurrent requests.\n * Valid range: 1-1000. Default: 5 (safe for local Ollama).\n */\n maxConcurrentMessages: z.number().int().min(1).max(1000).default(5),\n /**\n * Hunt Finding #29 (2026-04-14): global fetch() HTTP pool configuration.\n * Without this, Node's default dispatcher has no per-origin connection\n * cap and the keep-alive pool to Ollama grew to 80+ sockets under load.\n * The defaults are tuned for a single-machine Ollama deployment.\n */\n httpPool: z.object({\n /** Max connections per origin (in-flight + idle). Default 16. */\n connections: z.number().int().min(1).max(1024).default(16),\n /** Idle keep-alive timeout in ms. Default 10_000. */\n keepAliveTimeoutMs: z.number().int().min(1_000).max(300_000).default(10_000),\n /** Hard cap on keep-alive bumps in ms. Default 60_000. */\n keepAliveMaxTimeoutMs: z.number().int().min(1_000).max(600_000).default(60_000),\n /** Max time to wait for response headers. Default 60_000. */\n headersTimeoutMs: z.number().int().min(1_000).max(600_000).default(60_000),\n /** Max time to wait for full response body. Default 300_000. */\n bodyTimeoutMs: z.number().int().min(1_000).max(1_200_000).default(300_000),\n }).default({}),\n});\n\nexport const AgentConfigSchema = z.object({\n // v6.0.1 — Provider-agnostic default. `DEFAULT_MODEL` is the\n // hardcoded fallback (anthropic/claude-sonnet-4); `getDefaultModelId()`\n // picks based on the user's actual environment (ANTHROPIC_API_KEY →\n // anthropic, OPENAI_API_KEY → openai, etc.) and falls back to local\n // Ollama if no cloud keys are set.\n model: z.string().default(() => getDefaultModelId()),\n maxTokens: z.number().default(DEFAULT_MAX_TOKENS),\n temperature: z.number().min(0).max(2).default(DEFAULT_TEMPERATURE),\n systemPrompt: z.string().optional(),\n /** Active persona ID (filename stem from assets/personas/). Default 'default' = no persona override. */\n persona: z.string().default('default'),\n workspace: z.string().optional(),\n sessionCompaction: z.object({\n enabled: z.boolean().default(true).describe('Auto-rotate sessions when limits exceeded'),\n maxSessionRuns: z.number().default(200).describe('Max interactions per session before rotation'),\n maxInputTokens: z.number().default(2000000).describe('Max input tokens per session'),\n maxSessionAgeHours: z.number().default(72).describe('Max session age in hours'),\n }).default({}).describe('Session compaction thresholds (Paperclip pattern)'),\n /** Max tool-calling rounds per message in autonomous mode */\n maxRounds: z.number().default(25),\n /** Hard cap on tool rounds (safety limit) */\n maxToolRoundsHard: z.number().default(50),\n /** Enable dynamic budget (auto-calculates rounds based on task complexity) */\n dynamicBudget: z.boolean().default(true),\n /** Force tool_choice=required in autonomous mode */\n forceToolUse: z.boolean().default(true),\n thinkingMode: z.enum(['off', 'low', 'medium', 'high']).default('medium'),\n /**\n * Wall-clock timeout (ms) for each individual LLM call within the agent loop.\n * Default 300 s (5 min) is appropriate for complex agentic tasks but too long\n * for simple webchat queries. Set to e.g. 90_000 (90 s) for faster failure on\n * slow/unreachable providers. Per-request overrides via LoopContext.chatTimeoutMs.\n */\n chatTimeoutMs: z.number().int().positive().default(300_000),\n /** Model aliases â e.g. { fast: \"openai/gpt-4o-mini\", smart: \"anthropic/claude-sonnet-4-20250514\", local: \"ollama/qwen3.5:4b\" } */\n // Hunt Finding #42 (2026-04-15): README promises built-in aliases\n // `fast, smart, cheap, reasoning, local`. Zod's .default() replaces the\n // whole record on any user override, so once a user customized aliases\n // their file would LOSE the built-ins. Use .transform() to merge user\n // overrides on top of the built-ins.\n modelAliases: z.record(z.string(), z.string())\n // v6.0.1 — Default to provider-appropriate aliases. The thunk\n // detects which API keys are set and picks aliases that route to\n // the same provider as agent.model — so sub-agents that select\n // a tier ('fast' / 'smart' / 'reasoning' / etc.) hit a working\n // provider, not a hardcoded Ollama default the user can't reach.\n .default(() => getDefaultModelAliases())\n .transform((userAliases): Record<string, string> => ({\n // Provider-aware floor (re-resolved on transform so a config\n // file with partial aliases still gets sensible fallbacks).\n ...getDefaultModelAliases(),\n // User overrides win\n ...userAliases,\n })),\n costOptimization: z.object({\n smartRouting: z.boolean().default(true),\n contextSummarization: z.boolean().default(true),\n dailyBudgetUsd: z.number().optional(),\n /**\n * v4.13 ancestor-extraction (Hermes smart_model_routing): dedicated\n * model for ultra-simple turns (\"hi\", \"what time is it?\", \"who made\n * you?\"). When set, TITAN's simple-turn detector routes these\n * messages here regardless of tier analysis. Leave empty to disable.\n * Example: \"ollama/minimax-m2.7:cloud\" (fast + coherent on Titan PC).\n */\n simpleTurnModel: z.string().optional(),\n }).optional(),\n /** Restrict which models users can select via /model. Empty = all allowed. Supports wildcards: \"openai/*\" */\n allowedModels: z.array(z.string()).default([]),\n /** Ordered fallback chain of model IDs to try when the primary model fails (e.g. rate limit, timeout, 5xx) */\n fallbackChain: z.array(z.string()).default([]),\n /** Maximum retries across the fallback chain before giving up */\n fallbackMaxRetries: z.number().default(3),\n /** Enable periodic reflection during agent loop (LLM self-assessment) */\n reflectionEnabled: z.boolean().default(true),\n /** Reflect every N rounds (default: 3) */\n reflectionInterval: z.number().default(3),\n /** Enable automatic model switching when tool calling fails (self-healing) */\n selfHealEnabled: z.boolean().default(true),\n /** Number of consecutive tool call failures before auto-switching models (2-10) */\n selfHealThreshold: z.number().min(2).max(10).default(3),\n /** Models known to reliably support tool calling â used as self-heal fallbacks */\n toolCapableModels: z.array(z.string()).default([]),\n /** Allow registered agents to propose new goals during the nightly dreaming cycle.\n * Proposals become pending approvals that a human (or approver agent) must accept\n * before the goal is created. Opt-in because it starts the LLM on a schedule. */\n autoProposeGoals: z.boolean().default(false),\n /** Maximum goal proposals a single agent can file per rolling 24h window. */\n proposalRateLimitPerDay: z.number().min(0).max(20).default(3),\n /** Model alias used for the proposal generation step. Should be cheap/fast. */\n proposalModel: z.string().default('fast'),\n /** v5.0: Prompt budget ratios — cap tokens for each context section (Space Agent parity) */\n promptBudget: z.object({\n systemRatio: z.number().min(0).max(1).default(0.3),\n historyRatio: z.number().min(0).max(1).default(0.5),\n transientRatio: z.number().min(0).max(1).default(0.2),\n maxTokens: z.number().default(12000),\n }).optional(),\n});\n\nexport const MeshConfigSchema = z.object({\n enabled: z.boolean().default(false),\n secret: z.string().optional(),\n /** Auto-discover peers via mDNS (Bonjour) on the local network */\n mdns: z.boolean().default(true),\n /** Auto-discover peers via Tailscale VPN */\n tailscale: z.boolean().default(true),\n /** Manually specified peer addresses (host:port) */\n staticPeers: z.array(z.string()).default([]),\n /** Allow remote nodes to use this node's models */\n allowRemoteModels: z.boolean().default(true),\n /** Maximum concurrent remote tasks */\n maxRemoteTasks: z.number().default(3),\n /** Maximum number of connected peers */\n maxPeers: z.number().default(5),\n /** Auto-approve discovered peers (skip approval prompt) */\n autoApprove: z.boolean().default(false),\n /** Timeout for mesh task RPC in milliseconds */\n taskTimeoutMs: z.number().default(120_000),\n /** Heartbeat interval in milliseconds */\n heartbeatIntervalMs: z.number().default(60_000),\n /** Time before a peer is considered stale and pruned (ms, default 5 min) */\n peerStaleTimeoutMs: z.number().default(300_000),\n});\n\nexport const TunnelConfigSchema = z.object({\n /** Enable Cloudflare Tunnel */\n enabled: z.boolean().default(false),\n /** Tunnel mode: 'quick' (free trycloudflare.com URL) or 'named' (custom domain) */\n mode: z.enum(['quick', 'named']).default('quick'),\n /** Tunnel ID for named tunnels */\n tunnelId: z.string().optional(),\n /** Cloudflare tunnel token (for named tunnels) */\n token: z.string().optional(),\n /** Custom hostname for named tunnels */\n hostname: z.string().optional(),\n});\n\nexport const ToolSearchConfigSchema = z.object({\n /** Enable compact tool mode with tool_search discovery (saves 60-80% input tokens) */\n enabled: z.boolean().default(true),\n /** Core tools always sent to the LLM without needing search.\n * When empty (default), uses DEFAULT_CORE_TOOLS from toolSearch.ts.\n * Override only if you need a specific custom list. */\n coreTools: z.array(z.string()).default([]),\n});\n\nexport const SandboxConfigSchema = z.object({\n /** Enable sandbox code execution (requires Docker or OpenShell) */\n enabled: z.boolean().default(true),\n /** Sandbox engine: docker (default) or openshell (NVIDIA) */\n engine: z.enum(['docker', 'openshell']).default('docker'),\n /** Docker image name for the sandbox container */\n image: z.string().default('titan-sandbox'),\n /** Default execution timeout in milliseconds */\n timeoutMs: z.number().default(60000),\n /** Container memory limit in MB */\n memoryMB: z.number().default(512),\n /** Container CPU limit */\n cpus: z.number().default(1),\n /** Tools denied inside sandbox (prevent escape) */\n deniedTools: z.array(z.string()).default([\n 'shell', 'exec', 'code_exec', 'process', 'apply_patch',\n ]),\n});\n\nexport const BrainConfigSchema = z.object({\n /** Enable embedded small LLM for intelligent routing (tool selection, classification) */\n enabled: z.boolean().default(false),\n /** Which small model to use (e.g. 'smollm2-360m', 'qwen3.5-0.8b', or custom fine-tuned model name) */\n model: z.string().default('smollm2-360m'),\n /** Auto-download model on first enable */\n autoDownload: z.boolean().default(true),\n /** Maximum tools to select per request */\n maxToolsPerRequest: z.number().default(12),\n /** Inference timeout in milliseconds */\n timeoutMs: z.number().default(2000),\n});\n\nexport const DeliberationConfigSchema = z.object({\n /** Enable deliberative reasoning for complex requests */\n enabled: z.boolean().default(true),\n /** Auto-detect ambitious requests that need deliberation (default: false â use /plan explicitly) */\n autoDetect: z.boolean().default(false),\n /** Model override for reasoning phase (falls back to agent.modelAliases.reasoning) */\n reasoningModel: z.string().optional(),\n /** Require user approval before executing a plan */\n approvalRequired: z.boolean().default(true),\n /** Maximum number of steps in a generated plan */\n maxPlanSteps: z.number().default(10),\n});\n\nexport const VoiceConfigSchema = z.object({\n /** Enable voice chat (requires LiveKit server + voice agent running) */\n enabled: z.boolean().default(false),\n /** LiveKit server WebSocket URL */\n livekitUrl: z.string().default('ws://localhost:7880'),\n /** LiveKit API key (matches livekit server config) */\n livekitApiKey: z.string().default('devkey'),\n /** LiveKit API secret (matches livekit server config) */\n livekitApiSecret: z.string().default('secret'),\n /** URL of the voice agent (for health checks) */\n agentUrl: z.string().default('http://localhost:8081'),\n /** Default TTS voice name */\n ttsVoice: z.string().default('andrew'),\n /** TTS engine: f5-tts only */\n ttsEngine: z.enum(['f5-tts']).default('f5-tts'),\n /** TTS server URL (F5-TTS: 5006) */\n ttsUrl: z.string().default('http://localhost:5006'),\n /** STT engine: faster-whisper | nemotron-asr | openai */\n sttEngine: z.enum(['faster-whisper', 'nemotron-asr', 'openai']).default('faster-whisper'),\n /** STT server URL (e.g. faster-whisper) */\n sttUrl: z.string().default('http://localhost:48421'),\n /** Voice performance: max tool rounds before forcing response */\n maxToolRounds: z.number().default(3),\n /** Voice performance: enable fast-path (skip deliberation, Brain, reflection) */\n fastPath: z.boolean().default(true),\n /** Override model for voice chat (faster model for low-latency responses). Falls back to agent.model if unset. */\n model: z.string().optional(),\n /** Silence timeout in milliseconds — how long to wait after speech ends before auto-sending transcript */\n silenceTimeoutMs: z.number().default(3000),\n});\n\nexport const ContextEnginePluginConfigSchema = z.object({\n name: z.string(),\n enabled: z.boolean().default(true),\n options: z.record(z.string(), z.unknown()).default({}),\n});\n\nexport const PluginsConfigSchema = z.object({\n contextEngine: z.array(ContextEnginePluginConfigSchema).default([]),\n});\n\nexport const TeachingConfigSchema = z.object({\n /** Enable adaptive teaching system */\n enabled: z.boolean().default(true),\n /** Tool uses before suggesting related tools */\n revealThreshold: z.number().default(5),\n /** Show contextual hints in dashboard and responses */\n showHints: z.boolean().default(true),\n /** Show first-run wizard for new users */\n firstRunWizard: z.boolean().default(true),\n});\n\nexport const OAuthConfigSchema = z.object({\n google: z.object({\n clientId: z.string().optional(),\n clientSecret: z.string().optional(),\n scopes: z.array(z.string()).default([\n 'https://www.googleapis.com/auth/gmail.modify',\n 'https://www.googleapis.com/auth/gmail.readonly',\n 'https://www.googleapis.com/auth/calendar',\n 'https://www.googleapis.com/auth/drive',\n 'https://www.googleapis.com/auth/documents',\n 'https://www.googleapis.com/auth/spreadsheets',\n 'https://www.googleapis.com/auth/tasks',\n 'https://www.googleapis.com/auth/contacts.readonly',\n 'https://www.googleapis.com/auth/youtube.readonly',\n 'https://www.googleapis.com/auth/userinfo.email',\n 'https://www.googleapis.com/auth/userinfo.profile',\n ]),\n }).default({}),\n});\n\nexport const TeamConfigSchema = z.object({\n /** Enable team mode with RBAC */\n enabled: z.boolean().default(false),\n /** Default role for new members added via invite */\n defaultRole: z.enum(['admin', 'operator', 'viewer']).default('operator'),\n /** Require invite code to join (vs. direct add by admin) */\n requireInvite: z.boolean().default(true),\n /** Invite code expiry in hours */\n inviteExpiryHours: z.number().default(48),\n /** Maximum teams a single instance can host */\n maxTeams: z.number().default(10),\n /** Maximum members per team */\n maxMembersPerTeam: z.number().default(50),\n});\n\nexport const ResearchPipelineConfigSchema = z.object({\n /** Enable multi-agent research pipeline */\n enabled: z.boolean().default(true),\n /** Maximum parallel researcher sub-agents */\n maxParallelAgents: z.number().default(3),\n /** Maximum rounds per researcher sub-agent */\n maxRoundsPerAgent: z.number().default(10),\n /** Maximum total sources across all sub-agents */\n maxSources: z.number().default(30),\n /** Compress intermediate results before synthesis */\n compressIntermediateResults: z.boolean().default(true),\n /** Default output format */\n defaultOutputFormat: z.enum(['report', 'brief', 'raw']).default('report'),\n});\n\nexport const AutoresearchConfigSchema = z.object({\n /** Enable autonomous experimentation engine */\n enabled: z.boolean().default(true),\n /** Default max experiments per loop */\n maxExperiments: z.number().default(20),\n /** Default time budget in minutes */\n timeBudgetMinutes: z.number().default(30),\n /** Timeout per individual experiment in seconds */\n experimentTimeoutSeconds: z.number().default(300),\n /** Use git branches for experiment isolation */\n gitBranching: z.boolean().default(true),\n /** Directory for experiment results */\n resultsDir: z.string().default('~/.titan/experiments'),\n});\n\n/** Eval / auto-corpus configuration (Phase 7) */\nexport const EvalConfigSchema = z.object({\n /** Enable automatic recording of failed eval traces as auto-tapes */\n enabled: z.boolean().default(true),\n /** Retention period for auto-corpus tapes in days (0 = never purge) */\n autoCorpus: z.object({\n retentionDays: z.number().min(0).default(30),\n }).default({}),\n});\n\nexport const CapsolverConfigSchema = z.object({\n /** Enable CapSolver CAPTCHA solving */\n enabled: z.boolean().default(false),\n /** CapSolver API key */\n apiKey: z.string().optional(),\n /** Timeout for solving in milliseconds */\n timeoutMs: z.number().default(120_000),\n /** Preferred reCAPTCHA v3 minimum score (0.1â0.9) */\n minScore: z.number().min(0.1).max(0.9).default(0.7),\n});\n\n/** Soma organism layer — homeostatic drives, hormonal broadcasts, shadow\n * rehearsal.\n *\n * v5.0 \"Spacewalk\" flips `enabled` to true by default. Tony's ask\n * (\"SOMA should be enabled by a flip of a switch\") — new installs get\n * Soma on out of the box with the SettingsWizard surfacing the toggle,\n * and the Soma widget ships with a one-click master switch so anyone\n * can flip it off at any time. Existing users keep whatever value is\n * already in their titan.json; only brand-new installs without the\n * field defaulted to false historically. */\nexport const OrganismConfigSchema = z.object({\n enabled: z.boolean().default(true).describe('Master switch. When true (default for v5.0+), Soma registers driveTick, writes drive state, and injects the hormonal ambient-state block into the system prompt. Flip via titan.json, Soma widget header, or Settings.'),\n hormonesInPrompt: z.boolean().default(true).describe('Include hormonal ambient-state block in the system prompt when Soma is enabled.'),\n pressureThreshold: z.number().min(0).max(5).default(1.2).describe('Combined drive pressure above which Soma fires a proposal. Raise to make Soma more conservative.'),\n driveSetpoints: z.record(z.string(), z.number().min(0).max(1)).optional().describe('Per-drive setpoint overrides: { purpose: 0.7, hunger: 0.6, ... }'),\n driveWeights: z.record(z.string(), z.number().min(0.1).max(3.0)).optional().describe('Per-drive weight overrides for pressure fusion. 1.0 is baseline; higher = more urgent.'),\n disabledDrives: z.array(z.string()).default([]).describe('Drive IDs to skip entirely in computeAllDrives + pressure fusion.'),\n shadowEnabled: z.boolean().default(true).describe('Run shadow rehearsal before each Soma proposal is filed for approval.'),\n shadowModel: z.string().default('fast').describe('Model alias (or provider/model id) used for shadow rehearsal.'),\n tickIntervalMs: z.number().min(10_000).max(3_600_000).default(60_000).describe('Drive tick cadence in ms. Default 60s; minimum 10s to prevent self-DoS.'),\n});\n\n/**\n * Self-Modification pipeline (v4.8.0+) — captures autonomous write_file\n * outputs from Soma-driven goals, reviews them through the specialist\n * panel, and opens GitHub PRs for human merge. OFF by default so\n * existing users are unaffected. Tony flips `enabled: true` explicitly.\n */\n/**\n * Homelab (v4.8.4+) — list of machines the Homelab panel should poll\n * for health. Defaults to Tony's 3-machine setup when omitted.\n */\nexport const HomelabMachineSchema = z.object({\n name: z.string(),\n ip: z.string(),\n role: z.string().default(''),\n port: z.number().int().min(1).max(65535).default(48420),\n protocol: z.enum(['http', 'https']).default('https'),\n path: z.string().default('/api/health'),\n});\nexport const HomelabConfigSchema = z.object({\n machines: z.array(HomelabMachineSchema).optional().describe('Machines listed on the Homelab panel. If omitted, a sensible default homelab set is used.'),\n});\n\nexport const SelfModConfigSchema = z.object({\n enabled: z.boolean().default(false).describe('Master switch. When false, no autonomous writes are captured and no PRs are opened.'),\n autoReview: z.boolean().default(true).describe('When a proposal is captured, automatically queue the specialist panel. Disable for manual-only review.'),\n autoPR: z.boolean().default(false).describe('When specialists all approve, automatically open the PR. When false, Tony must click \"Create PR\" in the UI.'),\n maxPRsPerDrivePer48h: z.number().min(1).max(20).default(1).describe('Rate limit — how many self-proposal PRs a single drive can generate in a rolling 48h window.'),\n pollIntervalMs: z.number().min(60_000).max(3_600_000).default(300_000).describe('How often to poll GitHub for merge/close status on open PRs. 5 min default.'),\n});\n\nexport const TitanConfigSchema = z.object({\n /** Whether the user has completed the web onboarding wizard */\n onboarded: z.boolean().default(false),\n agent: AgentConfigSchema.default({}),\n /**\n * Per-specialist model overrides. Keys are specialist ids\n * (scout/builder/writer/analyst/sage). Values override the hardcoded\n * default model from specialists.ts. Editable via the UI so the user\n * can swap specialist models without a code change (e.g. point Sage\n * at a local model when Claude Code is unavailable).\n */\n specialists: z.object({\n overrides: z.record(z.string(), z.object({\n model: z.string().optional(),\n })).default({}),\n }).default({}),\n organism: OrganismConfigSchema.default({}),\n selfMod: SelfModConfigSchema.default({}),\n homelab: HomelabConfigSchema.default({}),\n providers: z.object({\n /** v5.4.1: Per-model output-token caps override. Keys are provider/model IDs.\n * Values override the built-in static table + family heuristics. */\n modelCapabilities: z.record(z.string(), z.object({\n contextWindow: z.number(),\n maxOutput: z.number(),\n supportsThinking: z.boolean().optional(),\n })).optional(),\n anthropic: ProviderConfigSchema.default({}),\n openai: ProviderConfigSchema.default({}),\n google: ProviderConfigSchema.default({}),\n ollama: ProviderConfigSchema.default({}),\n // OpenAI-compatible providers\n groq: ProviderConfigSchema.default({}),\n mistral: ProviderConfigSchema.default({}),\n openrouter: ProviderConfigSchema.default({}),\n fireworks: ProviderConfigSchema.default({}),\n xai: ProviderConfigSchema.default({}),\n together: ProviderConfigSchema.default({}),\n deepseek: ProviderConfigSchema.default({}),\n cerebras: ProviderConfigSchema.default({}),\n cohere: ProviderConfigSchema.default({}),\n perplexity: ProviderConfigSchema.default({}),\n venice: ProviderConfigSchema.default({}),\n bedrock: ProviderConfigSchema.default({}),\n litellm: ProviderConfigSchema.default({}),\n azure: ProviderConfigSchema.default({}),\n deepinfra: ProviderConfigSchema.default({}),\n sambanova: ProviderConfigSchema.default({}),\n kimi: ProviderConfigSchema.default({}),\n huggingface: ProviderConfigSchema.default({}),\n ai21: ProviderConfigSchema.default({}),\n 'cohere-v2': ProviderConfigSchema.default({}),\n reka: ProviderConfigSchema.default({}),\n zhipu: ProviderConfigSchema.default({}),\n yi: ProviderConfigSchema.default({}),\n inflection: ProviderConfigSchema.default({}),\n novita: ProviderConfigSchema.default({}),\n replicate: ProviderConfigSchema.default({}),\n lepton: ProviderConfigSchema.default({}),\n anyscale: ProviderConfigSchema.default({}),\n octo: ProviderConfigSchema.default({}),\n nous: ProviderConfigSchema.default({}),\n nvidia: ProviderConfigSchema.default({}),\n minimax: ProviderConfigSchema.default({}),\n }).default({}),\n channels: z.object({\n discord: ChannelConfigSchema.default({}),\n telegram: ChannelConfigSchema.default({}),\n slack: ChannelConfigSchema.default({}),\n whatsapp: ChannelConfigSchema.default({}),\n webchat: ChannelConfigSchema.default({}),\n googlechat: ChannelConfigSchema.default({}),\n matrix: ChannelConfigSchema.default({}),\n signal: ChannelConfigSchema.default({}),\n msteams: ChannelConfigSchema.default({}),\n bluebubbles: ChannelConfigSchema.default({}),\n irc: ChannelConfigSchema.default({}),\n mattermost: ChannelConfigSchema.default({}),\n lark: ChannelConfigSchema.default({}),\n email_inbound: ChannelConfigSchema.default({}),\n line: ChannelConfigSchema.default({}),\n zulip: ChannelConfigSchema.default({}),\n // v4.3.2: messenger defaults to enabled=true so env-var-configured\n // Page tokens keep working without requiring a JSON toggle. Channel\n // still self-disables at runtime when FB_PAGE_ACCESS_TOKEN is unset.\n messenger: MessengerChannelConfigSchema.default({\n enabled: true,\n allowFrom: [],\n dmPolicy: 'pairing',\n voiceReplies: { enabled: true, voice: 'andrew', maxChars: 1000 },\n }),\n // v4.4.0: Twilio voice — real phone calls. Tony dials the Twilio\n // number, talks, hears F5-TTS Andrew reply. Extends the base channel\n // schema so other code that iterates channels (doctor, selfHeal,\n // sandbox) sees the shared fields (enabled/token/apiKey/dmPolicy).\n twilio: ChannelConfigSchema.extend({\n accountSid: z.string().optional(),\n authToken: z.string().optional(),\n phoneNumber: z.string().optional(),\n voice: z.string().default('andrew'),\n /** E.164 numbers allowed to reach the agent. Everyone else gets\n * a polite \"wrong number\" and hangup. */\n allowedCallers: z.array(z.string()).default([]),\n /** Public HTTPS hostname for audio playback URLs sent to\n * Twilio. Should be a Tailscale Funnel or equivalent. */\n publicHost: z.string().default(''),\n }).default({\n enabled: true,\n allowFrom: [],\n dmPolicy: 'pairing',\n voice: 'andrew',\n allowedCallers: [],\n publicHost: '',\n }),\n }).default({}),\n gateway: GatewayConfigSchema.default({}),\n security: SecurityConfigSchema.default({}),\n memory: z.object({\n enabled: z.boolean().default(true),\n maxHistoryMessages: z.number().default(50),\n /**\n * Enable semantic vector search via Ollama embeddings (Tier 2 memory).\n *\n * v5.4.0: default is now `true`. The vector layer (`src/memory/vectors.ts`,\n * 566 LOC) was production-ready but unreachable behind a default-off\n * switch — retrieval was purely literal substring matching, so any\n * paraphrased recall failed. Flipping the default activates the\n * existing infrastructure.\n *\n * Fallback contract: if the embedding model isn't available on\n * Ollama (or the request errors), `addVector` and the vector-side\n * of `searchMemory` silently fall back to keyword-only search.\n * That fallback is best-effort and logged at debug level — see\n * `isVectorSearchAvailable()` in `vectors.ts`.\n *\n * To opt out, set `memory.vectorSearchEnabled = false` in titan.json.\n */\n vectorSearchEnabled: z.boolean().default(true),\n /** Embedding model for vector search (must be available on Ollama) */\n embeddingModel: z.string().default('nomic-embed-text'),\n /** v5.0: Pluggable memory provider ('builtin' = default three-tier memory) */\n provider: z.string().default('builtin'),\n /** v5.0: Provider-specific configuration passed to the memory backend */\n providerConfig: z.record(z.string(), z.unknown()).default({}),\n }).default({}),\n skills: z.object({\n enabled: z.boolean().default(true),\n autoDiscover: z.boolean().default(true),\n marketplace: z.boolean().default(false),\n /** v6.0: Primitive mode — load only shell, filesystem, and web_search skills */\n primitiveMode: z.boolean().default(false),\n }).default({}),\n mesh: MeshConfigSchema.default({}),\n fileManager: z.object({\n /** Root directories the file manager can browse. Supports ~ for home. */\n roots: z.array(z.string()).default(['~/.titan']),\n /** Patterns to block from browsing/editing (security) */\n blockedPatterns: z.array(z.string()).default(['.ssh', '.env', '.aws', '.gnupg', 'node_modules', '.git/objects']),\n }).default({}),\n logging: z.object({\n level: z.enum(['debug', 'info', 'warn', 'error', 'silent']).default('info'),\n file: z.boolean().default(true),\n }).default({}),\n autopilot: z.object({\n /** Enable autopilot scheduled runs */\n enabled: z.boolean().default(false),\n /** Run autopilot in simulation mode (no tool execution) */\n dryRun: z.boolean().default(false),\n /** Cron expression for scheduled runs (default: nightly 2am) */\n schedule: z.string().default('0 2 * * *'),\n /** Model override for autopilot runs (cheaper model for routine tasks) */\n model: z.string().default('anthropic/claude-haiku'),\n /** Path to checklist file (default: ~/.titan/AUTOPILOT.md) */\n checklistPath: z.string().optional(),\n /** Maximum tokens per autopilot run */\n maxTokensPerRun: z.number().default(4000),\n /** Maximum tool rounds per run */\n maxToolRounds: z.number().default(5),\n /** Where to deliver notable/urgent results */\n reportChannel: z.string().default('cli'),\n /** Run history retention count */\n maxRunHistory: z.number().default(30),\n /** Skip run if checklist is empty */\n skipIfEmpty: z.boolean().default(true),\n /** Active hours (only run during these hours, 24h format) */\n activeHours: z.object({\n start: z.number().min(0).max(23).default(0),\n end: z.number().min(0).max(23).default(23),\n }).optional(),\n /** Autopilot mode: 'checklist' (AUTOPILOT.md), 'goals' (goal-based), or 'self-improve' (autonomous self-improvement) */\n mode: z.enum(['checklist', 'goals', 'self-improve']).default('checklist'),\n /** Goal-based autopilot settings */\n goals: z.object({\n /** Maximum active goals */\n maxActiveGoals: z.number().default(5),\n /** Maximum subtasks per goal */\n maxSubtasksPerGoal: z.number().default(20),\n /** Budget per goal in USD */\n budgetPerGoal: z.number().default(1.00),\n /** Allow TITAN to self-initiate tasks from the goal queue */\n selfInitiate: z.boolean().default(false),\n }).default({}),\n }).default({}),\n sandbox: SandboxConfigSchema.default({}),\n toolSearch: ToolSearchConfigSchema.default({}),\n brain: BrainConfigSchema.default({}),\n tunnel: TunnelConfigSchema.default({}),\n deliberation: DeliberationConfigSchema.default({}),\n voice: VoiceConfigSchema.default({}),\n oauth: OAuthConfigSchema.default({}),\n plugins: PluginsConfigSchema.default({}),\n teaching: TeachingConfigSchema.default({}),\n autonomy: z.object({\n /** autonomous = full auto, supervised = asks for dangerous ops, locked = asks for everything */\n mode: z.enum(['autonomous', 'supervised', 'locked']).default('supervised'),\n /** Auto-approve moderate-risk tools in main session (cli/webchat) */\n autoApproveMainSession: z.boolean().default(true),\n /** Timeout for HITL approval requests (ms). Auto-deny after timeout. */\n approvalTimeoutMs: z.number().default(60000),\n /** Notify user of auto-approved actions */\n notifyOnAutoApprove: z.boolean().default(true),\n /** Override MAX_TOOL_ROUNDS in autonomous mode */\n maxToolRoundsOverride: z.number().default(25),\n /** Override circuit breaker threshold in autonomous mode */\n circuitBreakerOverride: z.number().default(50),\n /** Auto-trigger deliberation without approval in autonomous mode */\n autoDeliberate: z.boolean().default(true),\n /** Minimum interval between initiative actions (ms) */\n initiativeIntervalMs: z.number().default(60000),\n /** Enable event-driven proactive initiative (follow-ups, monitoring) */\n proactiveInitiative: z.boolean().default(false),\n /**\n * v4.9.0-local.8: self-modification scope & staging.\n *\n * When a goal has a tag that matches `tags`, any file-mutating\n * tool call (write_file, edit_file, append_file, apply_patch)\n * MUST target a path inside `target`. Writes to any other path\n * are rejected by the toolRunner scope-lock. This stops the\n * \"TITAN hallucinates self-modifying its own framework but\n * actually writes to <sibling-project> or /home/titan/\"\n * pattern observed 2026-04-18.\n *\n * When `staging` is enabled, writes to `target` are redirected\n * to a per-goal staging directory and surface as `self_mod_pr`\n * approvals — the human applies or rejects the diff.\n */\n selfMod: z.object({\n /**\n * Absolute path where self-modification is allowed to land.\n * Defaults to the TITAN deployment root on Titan PC.\n */\n target: z.string().default('/opt/TITAN'),\n /**\n * Goal tags that activate scope-lock. If the active session's\n * goal has ANY of these tags, writes are scope-locked to `target`.\n */\n tags: z.array(z.string()).default([\n 'self-healing', 'self-repair', 'self-mod', 'self-modification',\n 'core-framework', 'framework', 'architecture',\n 'core', 'autonomy',\n ]),\n /**\n * When true, writes to `target` go through a human-approval PR\n * gate (staged → approved → applied). When false, writes land\n * directly (scope-lock still enforces target prefix).\n */\n staging: z.boolean().default(true),\n /**\n * v6.0.3 — Self-repair goal-creation gate.\n *\n * When false (default), the goal proposer drops any autonomously\n * generated proposal that classifies as self-mod / self-repair /\n * framework-modification work before it reaches the approval\n * queue. The self-repair daemon still surfaces *findings* via\n * `custom`-type `self_repair` approvals (so Tony sees what's\n * wrong), but TITAN will not spin up new active goals to \"fix\n * itself\" without explicit opt-in.\n *\n * Why off by default: in v6.0.2 we observed the Soma pressure\n * loop + dreaming proposer cooperating to spawn 7 simultaneous\n * \"rewrite the framework\" goals that recursed on each other,\n * filling the active mission queue with self-referential\n * busywork. This was real autonomy, but in the wrong direction.\n *\n * Set true to restore prior behavior (autonomous self-repair\n * goal creation enabled).\n */\n autoCreateGoals: z.boolean().default(false),\n /**\n * Directory for staged self-mod bundles. Each approved goal\n * gets its own subdir. Relative paths resolve under TITAN_HOME.\n */\n stagingDir: z.string().default('self-mod-staging'),\n /**\n * v4.10.0-local polish: Opus review gate. Before an approved\n * self_mod_pr's files land in `target`, send the bundle to\n * a strong reviewer model (Claude Opus via OpenRouter by\n * default) for one final correctness + integration check.\n * Local LLMs write the code; Opus reviews it.\n */\n reviewer: z.object({\n enabled: z.boolean().default(true),\n /**\n * Default: Claude Code CLI with Sonnet 4.5. Routes through\n * the `claude` CLI subprocess which uses Tony's MAX plan\n * OAuth — so effectively free for this use case (MAX is\n * ~$100/month flat with generous caps, not metered).\n *\n * DIFFERENT FAMILY than Builder (Qwen) = no correlated bugs.\n * Claude family is historically strongest at CRITIQUE.\n *\n * Setup (one-time on TITAN host):\n * npm install -g @anthropic-ai/claude-code\n * claude login (signs in w/ MAX account; OAuth in ~/.claude/)\n *\n * Fallback alternatives:\n * 'openrouter/qwen/qwen3.6-plus' (free on OpenRouter but same family as Builder)\n * 'openrouter/anthropic/claude-sonnet-4.6' (paid, ~$0.02/review)\n * 'openrouter/anthropic/claude-opus-4.6' (paid, ~$0.15/review)\n *\n * If `claude` CLI isn't installed on TITAN host, reviewer\n * returns 'skipped' and the apply proceeds (fail-open).\n */\n model: z.string().default('claude-code/sonnet-4.5'),\n maxDiffChars: z.number().default(50_000),\n blockOnReject: z.boolean().default(true),\n /** v4.10.0-local polish: cost caps. Qwen3.6-plus is free so these\n * rarely bite; but if reviewer model is ever switched to a paid\n * one, these prevent runaway bills. Current: $9.54 OpenRouter budget. */\n maxPerReviewUsd: z.number().default(0.25),\n maxDailyUsd: z.number().default(1.50),\n maxMonthlyUsd: z.number().default(5.00),\n }).default({}),\n }).default({}),\n }).default({}),\n subAgents: z.object({\n /** Enable sub-agent spawning */\n enabled: z.boolean().default(true),\n /** Maximum concurrent sub-agents */\n maxConcurrent: z.number().default(3),\n /** Maximum tool rounds per sub-agent */\n maxRoundsPerAgent: z.number().default(10),\n /** Default model for sub-agents */\n defaultModel: z.string().default('fast'),\n /** Auto-delegate complex tasks to sub-agents */\n enableWorktrees: z.boolean().default(false).describe('Create git worktrees for coder sub-agents'),\n autoDelegate: z.boolean().default(true),\n /** Maximum nesting depth for sub-agents (1 = no sub-sub-agents, 2 = one level of nesting) */\n maxDepth: z.number().default(2),\n }).default({}),\n teams: TeamConfigSchema.default({}),\n researchPipeline: ResearchPipelineConfigSchema.default({}),\n autoresearch: AutoresearchConfigSchema.default({}),\n eval: EvalConfigSchema.default({}),\n homeAssistant: z.object({\n /** Home Assistant instance URL (e.g., http://homeassistant.local:8123) */\n url: z.string().default(''),\n /** Long-lived access token for Home Assistant API */\n token: z.string().default(''),\n }).default({}),\n mcp: z.object({\n /** MCP server mode â expose TITAN's tools to other agents */\n server: z.object({\n /** Enable MCP server (HTTP transport on gateway port) */\n enabled: z.boolean().default(false),\n }).default({}),\n }).default({}),\n selfImprove: z.object({\n /** Enable autonomous self-improvement */\n enabled: z.boolean().default(true),\n /** How many self-improvement runs per day (1-12) */\n runsPerDay: z.number().min(1).max(12).default(1),\n /** Cron expressions for scheduled runs */\n schedule: z.array(z.string()).default(['0 2 * * *']),\n /** Time budget per run in minutes (5-120) */\n budgetMinutes: z.number().min(5).max(120).default(30),\n /** Which improvement areas to target */\n areas: z.array(z.string()).default(['prompts', 'tool-selection', 'response-quality', 'error-recovery']),\n /** Auto-apply successful experiments without human approval */\n autoApply: z.boolean().default(false),\n /** Maximum total GPU/compute minutes per day (safety cap) */\n maxDailyBudgetMinutes: z.number().default(120),\n /** Skip runs on weekends */\n pauseOnWeekends: z.boolean().default(false),\n /** Send notification on successful improvement */\n notifyOnSuccess: z.boolean().default(true),\n /** Notification channel */\n notifyChannel: z.string().default('cli'),\n }).default({}),\n training: z.object({\n /** Enable local model training/fine-tuning */\n enabled: z.boolean().default(false),\n /** Directory for training data */\n dataDir: z.string().default('~/.titan/training-data'),\n /** Training time budget in minutes */\n budgetMinutes: z.number().default(30),\n /** Training method */\n method: z.enum(['lora', 'qlora', 'full']).default('lora'),\n /** Base model to fine-tune. Empty = use active model (if local/Ollama). */\n baseModel: z.string().default(''),\n /** Auto-deploy trained model to Ollama */\n autoDeploy: z.boolean().default(false),\n autoresearchEnabled: z.boolean().default(false),\n autoresearchSchedule: z.array(z.string()).default(['0 3 * * *']), // 3am daily\n }).default({}),\n daemon: z.object({\n /** Enable persistent agent daemon (always-on awareness loop) */\n enabled: z.boolean().default(false),\n /** Watcher configurations â pluggable checker functions on intervals */\n watchers: z.array(z.object({\n name: z.string(),\n enabled: z.boolean().default(true),\n intervalMs: z.number().default(300_000), // 5 min\n })).default([]),\n /** Maximum autonomous actions per hour (rate limiting) */\n maxActionsPerHour: z.number().default(10),\n }).default({}),\n capsolver: CapsolverConfigSchema.default({}),\n vram: z.object({\n /** Master switch for VRAM orchestrator */\n enabled: z.boolean().default(true),\n /** GPU vendor override â auto-detects by default. Set to force a specific vendor. */\n gpuVendor: z.enum(['auto', 'nvidia', 'amd', 'apple', 'none']).default('auto'),\n /** GPU polling interval in milliseconds (0 = disabled) */\n pollIntervalMs: z.number().default(10000),\n /** Always keep this much VRAM free as a safety buffer (MB) */\n reserveMB: z.number().default(1024),\n /** Automatically swap to a smaller model when VRAM is needed */\n autoSwapModel: z.boolean().default(true),\n /** Fallback model to load when large model is evicted */\n fallbackModel: z.string().default('qwen3:7b'),\n /** Ollama API URL for model management */\n ollamaUrl: z.string().default('http://localhost:11434'),\n /** GPU service VRAM budgets and priorities */\n services: z.record(z.string(), z.object({\n estimatedMB: z.number(),\n priority: z.number(),\n type: z.enum(['ollama', 'docker', 'process']),\n })).default({\n ollama: { estimatedMB: 0, priority: 1, type: 'ollama' },\n f5_tts: { estimatedMB: 1500, priority: 2, type: 'process' },\n cuopt: { estimatedMB: 5000, priority: 3, type: 'docker' },\n nemotron_asr: { estimatedMB: 4000, priority: 4, type: 'docker' },\n }),\n }).default({}),\n nvidia: z.object({\n /** Master switch â enables all NVIDIA integrations (also triggered by TITAN_NVIDIA=1 env) */\n enabled: z.boolean().default(false),\n /** NVIDIA NIM API key (build.nvidia.com) */\n apiKey: z.string().optional(),\n /** cuOpt GPU-accelerated optimization engine */\n cuopt: z.object({\n enabled: z.boolean().default(false),\n /** cuOpt server URL (REST API endpoint) */\n url: z.string().default('http://localhost:5000'),\n }).default({}),\n /** Nemotron-ASR-Streaming for low-latency speech recognition */\n asr: z.object({\n enabled: z.boolean().default(false),\n /** gRPC endpoint for Nemotron-ASR NIM container */\n grpcUrl: z.string().default('localhost:50051'),\n /** HTTP health endpoint */\n healthUrl: z.string().default('http://localhost:9000'),\n }).default({}),\n /** NVIDIA OpenShell agent sandbox runtime */\n openshell: z.object({\n enabled: z.boolean().default(false),\n /** Path to openshell CLI binary */\n binaryPath: z.string().default('openshell'),\n /** Path to TITAN sandbox policy YAML */\n policyPath: z.string().default(''),\n }).default({}),\n }).default({}),\n x: z.object({\n /** Enable X/Twitter integration */\n enabled: z.boolean().default(false),\n /** Require human review before posting */\n reviewRequired: z.boolean().default(true),\n }).default({}),\n slack: z.object({\n /** Enable Slack skill tools (separate from channel adapter) */\n enabled: z.boolean().default(false),\n /** Slack Bot Token (xoxb-*). Falls back to SLACK_BOT_TOKEN env var */\n botToken: z.string().optional(),\n /** Default channel for posting */\n defaultChannel: z.string().default('general'),\n /** Require human review before posting messages */\n reviewRequired: z.boolean().default(true),\n }).default({}),\n\n /** Command Post — agent governance layer (Paperclip-inspired) */\n /**\n * v4.13 ancestor-extraction (OpenClaw agent-scope): config-driven agents.\n * Declare a custom agent in titan.json:\n *\n * \"agents\": {\n * \"defaults\": { \"model\": \"ollama/minimax-m2.7:cloud\", \"maxRounds\": 15 },\n * \"entries\": {\n * \"coder-rust\": {\n * \"name\": \"Rust Coder\",\n * \"template\": \"builder\",\n * \"model\": \"ollama/glm-5.1:cloud\",\n * \"skillsFilter\": [\"shell\",\"read_file\",\"write_file\",\"edit_file\"],\n * \"tags\": [\"code\",\"rust\"]\n * }\n * }\n * }\n *\n * Built-in specialists (scout/builder/writer/analyst/sage) from\n * src/agent/specialists.ts still work as defaults; config-defined\n * agents layer on top.\n */\n agents: z.object({\n defaults: z.object({\n model: z.string().optional(),\n modelFallbacks: z.array(z.string()).default([]),\n skillsFilter: z.array(z.string()).default([]),\n persona: z.string().optional(),\n maxRounds: z.number().optional(),\n maxTokens: z.number().optional(),\n systemPromptOverride: z.string().optional(),\n }).default({}),\n entries: z.record(z.string(), z.object({\n name: z.string().optional(),\n description: z.string().optional(),\n model: z.string().optional(),\n modelFallbacks: z.array(z.string()).optional(),\n skillsFilter: z.array(z.string()).optional(),\n persona: z.string().optional(),\n systemPromptOverride: z.string().optional(),\n template: z.string().optional(),\n maxRounds: z.number().optional(),\n maxTokens: z.number().optional(),\n workspaceDir: z.string().optional(),\n tags: z.array(z.string()).default([]),\n enabled: z.boolean().default(true),\n })).default({}),\n }).default({}),\n\n /**\n * Auxiliary model for side tasks — goal-proposal JSON extraction, session\n * title generation, graph entity extraction, structured-spawn reformat,\n * classification, short summaries.\n *\n * Ported from Hermes `agent/auxiliary_client.py` — main agent models\n * (esp. gemma4:31b) are tuned for long reasoning + tool use and often\n * produce empty arrays or prose instead of strict JSON. Routing side\n * tasks to a dedicated fast+cheap model (minimax-m2.7 is proven on\n * Titan PC) makes the autonomous cycle actually produce work.\n *\n * See: src/providers/auxiliary.ts\n */\n auxiliary: z.object({\n /** Explicit model. Wins over preferFamilies. Ex: \"ollama/minimax-m2.7:cloud\" */\n model: z.string().optional(),\n /** Family-preference order when `model` is unset. Default optimised for Titan PC. */\n preferFamilies: z.array(z.string()).default(['minimax', 'glm', 'qwen', 'nemotron', 'gemma']),\n /** Per-task model overrides. Key = task kind. */\n perTask: z.object({\n json_extraction: z.string().optional(),\n classification: z.string().optional(),\n title: z.string().optional(),\n summary: z.string().optional(),\n reformat: z.string().optional(),\n humanize: z.string().optional(),\n }).default({}),\n /** Kill-switch for auxiliary routing — fall back to main model always. */\n disabled: z.boolean().default(false),\n }).default({}),\n\n /** v5.0: Lightweight OTEL-compatible diagnostics export */\n diagnostics: z.object({\n otel: z.object({\n enabled: z.boolean().default(false),\n captureContent: z.boolean().default(false),\n endpoint: z.string().optional(),\n }).default({}),\n }).default({}),\n /** v5.0: Shell hooks for lifecycle events */\n hooks: z.object({\n shell: z.object({\n enabled: z.boolean().default(false),\n pre_tool_call: z.array(z.string()).default([]),\n post_tool_call: z.array(z.string()).default([]),\n on_session_start: z.array(z.string()).default([]),\n on_session_end: z.array(z.string()).default([]),\n on_round_start: z.array(z.string()).default([]),\n on_round_end: z.array(z.string()).default([]),\n }).default({}),\n }).default({}),\n /** v5.0: Filesystem checkpoints before destructive operations */\n checkpoints: z.object({\n enabled: z.boolean().default(true),\n maxPerSession: z.number().default(50),\n retentionHours: z.number().default(24),\n }).default({}),\n /** v5.0: Browser automation configuration */\n browser: z.object({\n actionTimeoutMs: z.number().default(60000),\n profiles: z.record(z.string(), z.object({\n headless: z.boolean().optional(),\n })).default({}),\n }).default({}),\n /** v5.0: UI theming */\n ui: z.object({\n theme: z.string().default('dark'),\n }).default({}),\n commandPost: z.object({\n /** Enable the Command Post governance layer */\n enabled: z.boolean().default(false),\n /** Heartbeat monitoring interval in ms */\n heartbeatIntervalMs: z.number().default(60000),\n /** Max concurrent managed agents */\n maxConcurrentAgents: z.number().default(5),\n /** Task checkout auto-expiry in ms (default 30 min) */\n checkoutTimeoutMs: z.number().default(1800000),\n /** Activity feed buffer size */\n activityBufferSize: z.number().default(500),\n /**\n * Gap 4 (plan-this-logical-ocean): path-scoped auto-approval.\n * When enabled, approvals whose (type, payload.kind, payload.path)\n * match an allowlisted rule are short-circuited to status='approved'\n * by the system, instead of landing in the human queue. Off by\n * default — Tony governance preference is opt-in for anything that\n * bypasses his eyes. See src/agent/approvalClassifier.ts for the\n * built-in rule defaults (read-only reads under Desktop/opt/tmp).\n */\n autoApprove: z.object({\n enabled: z.boolean().default(false),\n /** Additional user-defined rules layered on top of the built-in defaults. */\n rules: z.array(z.object({\n /** Approval type this rule matches, or '*' for any type */\n type: z.string().default('*'),\n /** payload.kind this rule matches, or '*' for any */\n kind: z.string().default('*'),\n /** Path prefix payload.path must start with (optional) */\n pathPrefix: z.string().optional(),\n /** 'auto' short-circuits to approved; 'require' forces human approval even if a broader default would auto-approve */\n action: z.enum(['auto', 'require']).default('auto'),\n })).default([]),\n }).default({}),\n /** Auto-purge approvals older than N days (0 = disabled). Default 7 days. */\n approvalRetentionDays: z.number().min(0).default(7),\n }).default({}),\n\n /**\n * Facebook skill + autopilot config.\n * Added after Hunt Finding #1 (2026-04-14): this key was previously NOT in the\n * schema, so `facebook.autopilotEnabled: false` in titan.json was silently\n * stripped by Zod on load, meaning users could not disable the FB autopilot\n * via config editing. The autopilot would continue to run despite the flag.\n */\n facebook: z.object({\n /** Master switch for FB autopilot (scheduled posts + comment replies). When false, neither runs. */\n autopilotEnabled: z.boolean().default(true),\n /** Disable only comment reply monitoring (kept for finer control). */\n replyMonitorEnabled: z.boolean().default(true),\n /** Model override for autopilot content generation. Empty = use agent.model. */\n model: z.string().default(''),\n /** Max posts per 24h window. v4.0.3: was hardcoded to 6. Keep at 6 for active\n * hype cadence (one every ~3-4h); Facebook tolerates this well. Going above\n * ~8/day will trip FB's anti-spam feed throttle and hide today's posts from\n * the public page view. */\n maxPostsPerDay: z.number().min(1).max(12).default(6),\n /** Minimum hours between consecutive posts. v4.0.3: raised from 2 to 3 after\n * observing a burst of 4 posts in 40 minutes trigger FB's visibility throttle.\n * 3h * 6 posts = 18h natural spread through the day. */\n minPostGapHours: z.number().min(0.5).max(24).default(3),\n }).default({}),\n\n /**\n * Alerting — where and how autonomous agent alerts are delivered.\n * Previously accessed via `(config as Record<string, unknown>).alerting` in src/agent/alerts.ts\n * but was NOT in the schema and thus silently stripped on load.\n */\n alerting: z.object({\n /** Minimum severity that triggers alerts: info | warn | error | critical */\n minSeverity: z.enum(['info', 'warn', 'error', 'critical']).default('error'),\n /** Webhook URL for alert delivery (Slack/Discord/etc.) */\n webhookUrl: z.string().optional(),\n }).default({}),\n\n /**\n * Guardrails — input/output safety filters for the agent loop.\n * Previously accessed via `(config as Record<string, unknown>).guardrails` in src/agent/guardrails.ts\n * but was NOT in the schema and thus silently stripped on load.\n */\n guardrails: z.object({\n /** Master switch for guardrails */\n enabled: z.boolean().default(true),\n /** Log violations only, don't block */\n logOnly: z.boolean().default(false),\n }).default({}),\n\n /**\n * Telemetry — opt-in local-only event collection for product improvement.\n * Events are stored locally in ~/.titan/telemetry-events.jsonl and never\n * sent to external servers unless explicitly configured.\n */\n telemetry: z.object({\n /**\n * Master switch. Default **false** — no data leaves the user's machine\n * until they explicitly opt in. Must stay false to respect existing\n * installs that never agreed to telemetry.\n */\n enabled: z.boolean().default(false),\n /** Storage mode: local = disk only; remote = POST to remoteUrl when enabled */\n mode: z.enum(['local', 'remote', 'local_with_share']).default('remote'),\n /** Max events to retain on disk before rotation */\n maxEvents: z.number().default(10000),\n /** Days to retain local telemetry events */\n retentionDays: z.number().default(90),\n /**\n * Default remote endpoint. When `enabled=true`, system_profile /\n * heartbeat / error events get POSTed here. The TITAN project's\n * default collector is fronted by Tailscale Funnel pointing at the\n * Titan PC (SQLite-backed aggregation service under Tony's control).\n * Override with your own collector URL for self-hosting, or set to\n * empty string to disable remote send (events stay local only).\n */\n remoteUrl: z.string().default('https://dj-z690-steel-legend-d5.tail57901.ts.net/events'),\n /** Send crash reports (uncaught exceptions, unhandled rejections). */\n crashReports: z.boolean().default(true),\n /**\n * PostHog Cloud project API key (`phc_...`).\n *\n * The default below is the **public-write project key** for the\n * TITAN project's PostHog dashboard. PostHog `phc_` keys are\n * designed to be safely embedded in client code — they can ONLY\n * write events (capture/identify), never read data, modify\n * dashboards, or list other events. This is exactly how\n * Google Analytics IDs, Mixpanel tokens, and Sentry public DSNs\n * work. See https://posthog.com/docs/api#authentication.\n *\n * Why ship it: when a user opts in via the SetupWizard, telemetry\n * \"just works\" — no extra config, no collector to run. They send\n * straight to PostHog Cloud, which the project maintainer reads\n * via their personal API key. This is the simplest correct\n * architecture for opt-in OSS telemetry.\n *\n * Override with your own key for self-hosted PostHog or to send\n * to a different project. Set to empty string to disable PostHog\n * forwarding entirely (events still go to `remoteUrl` if set).\n */\n posthogApiKey: z.string().default('phc_kVw5xLJx5SVXex9RSTCFwP8cJSNEXTYZ7oJwqoDdMPJX'),\n /**\n * PostHog ingest host. Default is PostHog Cloud US.\n * Use 'https://eu.i.posthog.com' for EU data residency.\n */\n posthogHost: z.string().default('https://us.i.posthog.com'),\n /** ISO timestamp of consent (set by SetupWizard when user opts in). */\n consentedAt: z.string().optional(),\n /** Which TITAN version the user was on when they consented. */\n consentedVersion: z.string().optional(),\n }).default({}),\n\n /**\n * Dream Mode (v5.5.17+) — TITAN runs an offline cycle in the small hours\n * to consolidate the day, reflect on what it learned, write a first-\n * person journal entry, and (optionally) narrate it in a cloned voice.\n * Reads existing trajectory log + drive ring buffer + run history; no\n * new data persistence beyond `~/.titan/dreams/<date>.{md,json}`.\n */\n dream: z.object({\n /** Master switch. Default off — opt in via Mission Control or config. */\n enabled: z.boolean().default(false),\n /**\n * Local-time HH:MM at which to start the dream cycle. Default 03:30\n * — chosen so the journal is ready before any human is awake but\n * after the GPU has cooled from late-night autonomous work.\n */\n cronAt: z.string().regex(/^\\d{2}:\\d{2}$/).default('03:30'),\n /**\n * Model used for the journal-writing prompts. Falls back to\n * agent.model when unset. The journal is monologue-style prose so a\n * cheaper model is fine; default empty = inherit.\n */\n model: z.string().default(''),\n /**\n * Generate audio narration via the F5-TTS bridge after the journal\n * is written. Saves an mp3 next to the markdown. Default off —\n * requires the voice subsystem to be running and a voice ID set.\n */\n includeAudio: z.boolean().default(false),\n /** Voice ID for the narration. When unset, uses voice.defaultVoice. */\n voiceId: z.string().default(''),\n /**\n * Drive-delta thresholds gating which sections appear. Reflect\n * fires when 24h curiosity rose by ≥ this; worry fires when safety\n * dropped by ≥ this; etc. Keeps the journal honest — TITAN\n * doesn't fabricate emotion when nothing changed.\n */\n thresholds: z.object({\n reflect: z.number().min(0).max(1).default(0.1),\n worry: z.number().min(0).max(1).default(0.1),\n plan: z.number().min(0).max(1).default(0.05),\n gratitude: z.number().min(0).max(1).default(0.05),\n }).default({}),\n }).default({}),\n\n /**\n * Persona Profiles (v5.5.24+ — Dad Mode plumbing) — TITAN can run as\n * different personas based on time-of-day, channel, or caller. The\n * active persona controls which tools are exposed to the LLM, what\n * system-prompt suffix is appended, and whether autonomous activity\n * (autopilot, social posting, shell) is gated by a wind-down window.\n *\n * Same plumbing also unblocks the visionary Beat-Match Mode (#5) and\n * Stage Mode (#7) which both want a \"this is who TITAN is right now\"\n * resolver. Ships with two defaults: Worker (default, full toolkit)\n * and Dad (family-safe, evening hours, no shell/code/posting).\n *\n * If `personas.enabled` is false, persona resolution is skipped\n * entirely — TITAN behaves exactly as before.\n */\n personas: z.object({\n enabled: z.boolean().default(false),\n /**\n * The persona that's active when no time-window or channel rule\n * matches. Default 'worker' — full-toolkit baseline.\n */\n defaultPersona: z.string().default('worker'),\n /**\n * Per-channel persona pin. Messages arriving on these channels\n * force the named persona regardless of time-of-day. Useful for:\n * - Family iPad's Telegram bot → forced 'dad'\n * - Stream chat IRC → forced 'stagehost'\n * Channel names match the runtime channel string set by adapters\n * (e.g. 'telegram', 'discord', 'slack').\n */\n channelPins: z.record(z.string(), z.string()).default({}),\n /**\n * Persona definitions. Each entry overlays on the security policy.\n * - allowedTools=[] inherits security.allowedTools (no override).\n * - allowedTools=['x','y'] restricts to JUST x and y on top of\n * whatever security already allowed (intersection).\n * - schedule defines a daily local-time window when this persona\n * takes over from defaultPersona. Format: { from: 'HH:MM',\n * to: 'HH:MM' }. Crosses midnight is supported.\n * - windDown=true gates all autopilot and outbound posting tools\n * while this persona is active.\n */\n profiles: z.array(z.object({\n id: z.string(),\n name: z.string(),\n /** Voice clone ID for TTS-routed responses. Empty = inherit. */\n voiceId: z.string().default(''),\n /** Tools allowed under this persona (empty = no extra restriction). */\n allowedTools: z.array(z.string()).default([]),\n /** Tools explicitly denied (overrides allowedTools — denial wins). */\n deniedTools: z.array(z.string()).default([]),\n /** Concatenated to the agent system prompt while this persona is active. */\n systemPromptAppendix: z.string().default(''),\n /** Daily activation window. Optional — most personas activate by channel pin. */\n schedule: z.object({\n from: z.string().regex(/^\\d{2}:\\d{2}$/),\n to: z.string().regex(/^\\d{2}:\\d{2}$/),\n }).optional(),\n /** When true, autopilot and outbound channels are paused while this persona is active. */\n windDown: z.boolean().default(false),\n /** Optional descriptive note for Mission Control. */\n description: z.string().default(''),\n })).default([\n // Default: full-toolkit baseline. Empty allowedTools means\n // inherit the security layer's policy unchanged.\n {\n id: 'worker',\n name: 'Worker',\n voiceId: '',\n allowedTools: [],\n deniedTools: [],\n systemPromptAppendix: '',\n windDown: false,\n description: 'Default work-mode persona. Full toolkit, no time gating.',\n },\n // Dad Mode: family-safe evening hours. No shell, no code, no\n // outbound posting. Wind-down halts autopilot. Persona-level\n // appendix re-frames TITAN as \"the dad's assistant who's off\n // the clock for the rest of the night.\"\n {\n id: 'dad',\n name: 'Dad',\n voiceId: '',\n allowedTools: [\n 'memory', 'goal_list', 'system_info', 'weather',\n 'ha_status', 'ha_control', 'ha_devices',\n 'web_search', 'web_fetch',\n ],\n deniedTools: [\n 'shell', 'write_file', 'edit_file', 'append_file',\n 'spawn_agent', 'agent_team', 'agent_chain', 'agent_delegate',\n 'fb_post', 'x_post', 'x_reply',\n 'titan_self_modify', 'self_proposal_pr',\n ],\n systemPromptAppendix: '\\n\\n── PERSONA: DAD ──\\nYou are off the clock for the rest of the night. Tony is with his family. Keep responses short, warm, and helpful — no work tasks, no autonomous actions, no shipping code. If asked about a family-relevant topic (weather, smart-home, a quick fact for a kid) handle it. If asked about work, gently say it can wait until morning.',\n schedule: { from: '18:00', to: '21:00' },\n windDown: true,\n description: 'Evening family-safe persona. Dinner through bedtime — no shell, no code, no posting. Autopilot paused.',\n },\n ]),\n /**\n * Persona A/B rollout (v5.5.27+, visionary V2 #3) — canary a new\n * persona against an existing baseline on a subset of traffic, with\n * automatic revert when the candidate cohort underperforms or\n * Safety drive drops. Cohorts themselves are runtime state stored\n * at `~/.titan/persona-cohorts.json` (created via API), not config.\n * This block sets the policy thresholds + monitor cadence.\n */\n rollout: z.object({\n /** Master switch. Default off. When false, cohorts are inert. */\n enabled: z.boolean().default(false),\n /** How often to re-evaluate cohort health and consider auto-revert. */\n monitorIntervalMins: z.number().min(1).max(60).default(5),\n /** Minimum sample size per cohort role before auto-revert can fire. */\n minSampleSize: z.number().min(1).default(10),\n /**\n * Pass-rate margin: candidate cohort's pass-rate may be at most\n * this much lower than baseline before auto-revert fires.\n * Default 0.05 = candidate can be up to 5% worse before revert.\n */\n passRateMargin: z.number().min(0).max(1).default(0.05),\n /**\n * Safety-drive drop threshold: candidate cohort's average Safety\n * drive may drop by at most this much below baseline before\n * auto-revert fires. Default 0.2.\n */\n safetyDropThreshold: z.number().min(0).max(1).default(0.2),\n /**\n * Window over which to compute cohort stats. Older outcomes\n * fall out of the rolling sample. Default 30 minutes — fast\n * enough to catch a regression in time, slow enough to gather\n * a meaningful sample on most workloads.\n */\n windowMins: z.number().min(1).max(1440).default(30),\n }).default({}),\n }).default({}),\n});\n\nexport type TitanConfig = z.infer<typeof TitanConfigSchema>;\nexport type TelemetryConfig = z.infer<typeof TitanConfigSchema>['telemetry'];\nexport type ProviderConfig = z.infer<typeof ProviderConfigSchema>;\nexport type ChannelConfig = z.infer<typeof ChannelConfigSchema>;\nexport type SecurityConfig = z.infer<typeof SecurityConfigSchema>;\nexport type GatewayConfig = z.infer<typeof GatewayConfigSchema>;\nexport type AgentConfig = z.infer<typeof AgentConfigSchema>;\nexport type MeshConfig = z.infer<typeof MeshConfigSchema>;\nexport type AutopilotConfig = TitanConfig['autopilot'];\nexport type CapsolverConfig = z.infer<typeof CapsolverConfigSchema>;\nexport type TunnelConfig = z.infer<typeof TunnelConfigSchema>;\nexport type VoiceConfig = z.infer<typeof VoiceConfigSchema>;\nexport type TeachingConfig = z.infer<typeof TeachingConfigSchema>;\nexport type TeamConfig = z.infer<typeof TeamConfigSchema>;\nexport type NvidiaConfig = TitanConfig['nvidia'];\nexport type CommandPostConfig = TitanConfig['commandPost'];\nexport type EvalConfig = z.infer<typeof EvalConfigSchema>;\n"],"mappings":"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","names":[]}
|
package/dist/utils/constants.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { homedir } from "os";
|
|
3
3
|
import { join } from "path";
|
|
4
|
-
const TITAN_VERSION = "6.0.
|
|
4
|
+
const TITAN_VERSION = "6.0.3";
|
|
5
5
|
const TITAN_CODENAME = "Living Canvas";
|
|
6
6
|
const TITAN_NAME = "TITAN";
|
|
7
7
|
const TITAN_FULL_NAME = "The Intelligent Task Automation Network";
|