hostCapabilityCatalog top-level property

Map<HostCapability, CapabilitySpec> hostCapabilityCatalog
final

The capability catalog — the CLI's ceiling (AC10). Wiring sites cite the verified sweep (2026-09-29); line anchors drift, the files are the contract.

Implementation

final Map<HostCapability, CapabilitySpec>
hostCapabilityCatalog = Map.unmodifiable({
  HostCapability.configSections: CapabilitySpec(
    capability: HostCapability.configSections,
    title:
        'Config sections (roles:/tools:/ttsr:/redact:/providerTimeouts:/agent:)',
    note: 'Parsed once, applied to every host whose profile has the row on.',
    cliWiringSites: [
      'bin/fah.dart (AgentCliConfig)',
      'lib/src/cli/cli_config.dart (fromYaml)',
    ],
    surface: CapabilitySurface(
      tokens: {'roles:', 'ttsr:', 'redact:', 'providerTimeouts:'},
      promptSectionIds: {'config-sections'},
    ),
  ),
  HostCapability.compaction: CapabilitySpec(
    capability: HostCapability.compaction,
    title: 'Compaction wiring',
    note: 'roles.smol judge, overWindowRelief, contextWindowCap (#1077).',
    cliWiringSites: [
      'bin/fah.dart (compactionEngine, contextWindowCap)',
      'lib/src/cli/agent_cli.dart',
    ],
    surface: CapabilitySurface(
      tokens: {'overWindowRelief', 'contextWindowCap'},
      promptSectionIds: {'compaction'},
    ),
  ),
  HostCapability.loadModes: CapabilitySpec(
    capability: HostCapability.loadModes,
    title: 'Load modes + discover_tools',
    note: 'Essential-set demotion and the discover_tools registration.',
    cliWiringSites: [
      'bin/fah.dart (loadMode)',
      'lib/src/cli/agent_cli_tools.dart',
    ],
    surface: CapabilitySurface(tokens: {'discover_tools'}),
  ),
  HostCapability.mcp: CapabilitySpec(
    capability: HostCapability.mcp,
    title: 'MCP servers',
    note:
        'Transports: stdio (spawned) + remote (HTTP). One '
        'transport-parametrized factory: it creates exactly the transports '
        'the cell declares — stdio spawn on process hosts, remote fetch on '
        'web/extension — so a remote-only host never supplies a stdio '
        'spawner.',
    cliWiringSites: [
      'bin/fah.dart (mcpConfig)',
      'lib/src/mcp/io_mcp_transport.dart',
      'lib/src/mcp/mcp_http_transport.dart',
    ],
    requiredServices: {'mcpTransportFactory'},
    surface: CapabilitySurface(
      tokens: {'mcp__', 'mcp:'},
      promptSectionIds: {'mcp'},
    ),
  ),
  HostCapability.messagingFabric: CapabilitySpec(
    capability: HostCapability.messagingFabric,
    title: 'Messaging fabric',
    note:
        'Transports: file + hub (FallbackMessagingRepository) + a2a. The '
        'file transport needs no host service beyond the session root it '
        'writes under; hub rides the hub plugin (slice-2 run-narrowing '
        'drops the hub transport when the plugin is absent — the file '
        'fabric keeps working).',
    cliWiringSites: [
      'lib/src/messaging/agent_fabric.dart (buildAgentFabric)',
      'bin/fah.dart (a2aConfig, hubFabric)',
    ],
    requiredServicesByTransport: {
      'hub': {'hubFabric'},
      'file': {'sessionRoot'},
    },
    surface: CapabilitySurface(
      tokens: {'schedule_message', 'agent_message', 'a2a'},
    ),
  ),
  HostCapability.approvalGate: CapabilitySpec(
    capability: HostCapability.approvalGate,
    title: 'Approval gate',
    note: 'Modes + unattended + always-allow sets.',
    cliWiringSites: [
      'bin/fah.dart (approvalMode, alwaysAllowTools)',
      'lib/src/cli/agent_cli.dart (ApprovalManager)',
    ],
    surface: CapabilitySurface(
      tokens: {'approval'},
      promptSectionIds: {'approval'},
    ),
  ),
  HostCapability.skills: CapabilitySpec(
    capability: HostCapability.skills,
    title: 'Skills + project context',
    note: 'Skill discovery roots and the AGENTS.md project context.',
    cliWiringSites: [
      'lib/src/cli/agent_cli.dart (discoverSkills)',
      'bin/fah.dart (skillsAccess)',
    ],
    surface: CapabilitySurface(
      tokens: {'skills'},
      promptSectionIds: {'skills'},
    ),
  ),
  HostCapability.sandboxEnv: CapabilitySpec(
    capability: HostCapability.sandboxEnv,
    title: 'Sandbox env',
    note:
        'Backends: cube (passthrough/policy/kernel) + local on the CLI; '
        'platform / WasiSandbox / MemoryShell are host-side factories.',
    cliWiringSites: [
      'bin/fah.dart (cubeSpec, fsProbe)',
      'lib/src/cli/agent_cli.dart (SandboxedExecutionEnv)',
    ],
    requiredServices: {'cubeSpec', 'fsProbe'},
    surface: CapabilitySurface(tokens: {'cube', 'sandbox'}),
  ),
  HostCapability.backgroundShellJobs: CapabilitySpec(
    capability: HostCapability.backgroundShellJobs,
    title: 'Background shell jobs',
    note: 'The bash_job board over .fah/bash_jobs logs.',
    cliWiringSites: [
      'bin/fah.dart (jobs)',
      'lib/src/cli/agent_cli.dart (ShellJobRegistry)',
    ],
    // Review #1230: with no required services the capability could never
    // be run-narrowed off — a host without a job factory kept it "wired".
    requiredServices: {'shellJobFactory'},
    surface: CapabilitySurface(tokens: {'bash_job'}),
  ),
  HostCapability.sqliteLspDap: CapabilitySpec(
    capability: HostCapability.sqliteLspDap,
    title: 'sqlite / lsp / dap',
    note:
        'FFI sqlite reader, process lsp transport, dap_* via the hub plugin. '
        'Per-transport services: the sqlite reader rides the ffi transport, '
        'the lsp tool the process transport — a host without one keeps the '
        'other (the base file tools never depend on this row).',
    cliWiringSites: [
      'bin/fah.dart (sqliteEngine, lspConfig, dapHubState)',
      'bin/fah_hub_plugin.dart (registerTool)',
    ],
    requiredServicesByTransport: {
      'ffi': {'sqliteEngine'},
      'process': {'lspTransportFactory'},
    },
    surface: CapabilitySurface(tokens: {'sqlite', 'lsp', 'dap'}),
  ),
  HostCapability.onDeviceProviders: CapabilitySpec(
    capability: HostCapability.onDeviceProviders,
    title: 'On-device providers (webllm/gemma)',
    note:
        'NOT CLI-wired (matrix ❌ on the VM); wired in the Flutter app '
        '(flutter_app/lib/main.dart).',
    requiredServices: {'onDeviceProviderFactory'},
    surface: CapabilitySurface(tokens: {'webllm', 'gemma'}),
  ),
  HostCapability.jsApps: CapabilitySpec(
    capability: HostCapability.jsApps,
    title: 'JS apps (jsr) + dynamic_message',
    note:
        'The browser-API app surface — matrix-pinned off on the VM. Owns '
        'NO bare "jsr" token: the CLI wires an `fa jsr` widget pass-through '
        '(#1062), claimed by [HostCapability.jsExtensions]. The CLI\'s '
        'process-based QuickJS machinery is [HostCapability.jsExtensions].',
    requiredServices: {'dynamicMessageSink'},
    surface: CapabilitySurface(
      tokens: {'dynamic_message'},
      promptSectionIds: {'js-apps'},
    ),
  ),
  HostCapability.checkpointRewind: CapabilitySpec(
    capability: HostCapability.checkpointRewind,
    title: 'Checkpoint / rewind',
    note: 'CheckpointRewindController + checkpoint/rewind tools.',
    cliWiringSites: ['lib/src/cli/agent_cli.dart (CheckpointRewindController)'],
    surface: CapabilitySurface(tokens: {'checkpoint', 'rewind'}),
  ),
  HostCapability.hostExtensionApi: CapabilitySpec(
    capability: HostCapability.hostExtensionApi,
    title: 'Host extension API',
    note:
        'PluginContext.register — host tools, inboxes, slash commands. '
        'Core behaviors stay SDK-invariant (AC9).',
    cliWiringSites: [
      'bin/fah.dart (plugins, pluginConfig)',
      'lib/src/cli/agent_cli.dart (PluginContext)',
    ],
    surface: CapabilitySurface(
      tokens: {'plugin'},
      promptSectionIds: {'extensions'},
    ),
  ),
  HostCapability.webSearch: CapabilitySpec(
    capability: HostCapability.webSearch,
    title: 'Web search',
    note:
        'Inventory-driven (AC10): web_search/web_fetch over '
        'WebSearchConfig secrets; no matrix row pins it.',
    cliWiringSites: [
      'bin/fah.dart (webSearchConfig)',
      'lib/src/cli/agent_cli_tools.dart',
    ],
    requiredServices: {'webSearchSecrets'},
    surface: CapabilitySurface(tokens: {'web_search', 'web_fetch'}),
  ),
  HostCapability.visionTranscribe: CapabilitySpec(
    capability: HostCapability.visionTranscribe,
    title: 'Vision + transcribe',
    note:
        'Inventory-driven (AC10): inspect_image/transcribe_audio/image '
        'generation over the host vision/transcribe configs. No REQUIRED '
        'services: the CLI registers generate_image/generate_video '
        'unconditionally (config-gated models), and inspect/transcribe '
        'ride per-tool config presence inside the assembly — the row '
        'narrows only when a host profile declares it off.',
    cliWiringSites: [
      'bin/fah.dart (visionConfig, transcribeConfig)',
      'lib/src/cli/agent_cli.dart',
    ],
    surface: CapabilitySurface(
      tokens: {'inspect_image', 'transcribe_audio', 'generate_image'},
    ),
  ),
  HostCapability.subagents: CapabilitySpec(
    capability: HostCapability.subagents,
    title: 'Subagents + task system',
    note:
        'Inventory-driven (AC10): subagents: config, SubagentManager, '
        'task/agent tools, heartbeat. Slice 3: the builder assembles the '
        'complex (fabric → manager → heartbeat → task/monitoring tools) '
        'from the typed SubagentServices bundle — absent from the run, '
        'the capability narrows off like any missing platform service.',
    cliWiringSites: [
      'bin/fah.dart (subagents)',
      'lib/src/cli/agent_cli.dart (SubagentManager, taskTool)',
    ],
    requiredServices: {'sessionRoot', 'subagentServices'},
    surface: CapabilitySurface(tokens: {'task', 'agent_directory', 'subagent'}),
  ),
  HostCapability.browserBridge: CapabilitySpec(
    capability: HostCapability.browserBridge,
    title: 'Browser bridge tools',
    note:
        'Inventory-driven (AC10): the browser_* family over the loopback '
        'bridge — the automation surface the CLI wires today.',
    cliWiringSites: [
      'bin/fah.dart (browserBridgeHandle, browserController)',
      'lib/src/cli/agent_cli.dart (browserTools)',
    ],
    requiredServices: {'browserBridgeHandle'},
    surface: CapabilitySurface(
      tokens: {'browser_navigate', 'browser_click', 'browser_eval'},
    ),
  ),
  HostCapability.jsExtensions: CapabilitySpec(
    capability: HostCapability.jsExtensions,
    title: 'QuickJS JS extensions + jsr widget pass-through',
    note:
        'Inventory-driven (AC10): per-extension isolated QuickJS engines '
        '(process transport) — not the browser-API [HostCapability.jsApps] '
        'row. Owns the `fa jsr` widget pass-through + `/jsr` REPL alias '
        '(#1062): the only legitimate "jsr" surfaces on the CLI.',
    cliWiringSites: [
      'bin/fah.dart (extRuntimeFactory)',
      'lib/src/cli/agent_cli.dart (initJsExtensions)',
    ],
    requiredServices: {'extRuntimeFactory'},
    surface: CapabilitySurface(tokens: {'js_ext', 'jsr.ext', 'fa jsr', '/jsr'}),
  ),
});