settingSurfaces top-level constant

Map<SharedSetting, SettingSurfaces> const settingSurfaces

The {macOS, iOS, web, extension} applicability audit (issue #288 AC3).

Implementation

const settingSurfaces = <SharedSetting, SettingSurfaces>{
  SharedSetting.approvalMode: SettingSurfaces(
    macos: true,
    ios: true,
    web: true,
    extensionPanel: true,
  ),
  SharedSetting.modelDefault: SettingSurfaces(
    macos: true,
    ios: true,
    web: true,
    extensionPanel: true,
  ),
  SharedSetting.modelSmol: SettingSurfaces(
    macos: true,
    ios: true,
    web: true,
    extensionPanel: false,
    gapWhy:
        'The extension panel runs single embedded turns; the auxiliary '
        'role chains (quick/subagent model) have no selection surface there.',
  ),
  SharedSetting.mediaSlots: SettingSurfaces(
    macos: true,
    ios: true,
    web: true,
    extensionPanel: false,
    gapWhy: 'Media generation tools are not wired into the extension panel.',
  ),
  SharedSetting.customProviders: SettingSurfaces(
    macos: true,
    ios: true,
    web: true,
    extensionPanel: false,
    gapWhy:
        'The extension panel stores a single provider triple '
        '(settings_put provider.save), not a saved-provider registry.',
  ),
  SharedSetting.apiKeys: SettingSurfaces(
    macos: true,
    ios: true,
    web: true,
    extensionPanel: true,
  ),
  SharedSetting.skillsAccess: SettingSurfaces(
    macos: true,
    ios: true,
    web: false,
    extensionPanel: false,
    gapWhy:
        'Third-party skill roots live on the HOST filesystem '
        '(~/.claude, ~/.copilot, …); the browser sandbox and the extension '
        'have no host filesystem to read them from.',
  ),
  SharedSetting.skillsToggles: SettingSurfaces(
    macos: true,
    ios: true,
    web: true,
    extensionPanel: false,
    gapWhy:
        'The extension panel runs single embedded turns; there is no '
        'settings surface to list per-skill toggles.',
  ),
  SharedSetting.dapHub: SettingSurfaces(
    macos: true,
    ios: true,
    web: true,
    extensionPanel: false,
    gapWhy: 'The extension panel has no DAP hub client.',
  ),
  SharedSetting.tools: SettingSurfaces(
    macos: true,
    ios: true,
    web: true,
    extensionPanel: true,
  ),
  SharedSetting.compactionEngine: SettingSurfaces(
    macos: true,
    ios: true,
    web: false,
    extensionPanel: false,
    gapWhy:
        'The app consumes the engine from the shared ~/.fah/config.yaml on '
        'io hosts (read-only, loadAppCompactionEngine); the browser sandbox '
        'and the extension have no shared config file — the web loader '
        'keeps the classic engine.',
  ),
  SharedSetting.providersQueue: SettingSurfaces(
    macos: true,
    ios: true,
    web: false,
    extensionPanel: false,
    gapWhy:
        'The app edits the queue through the shared config yaml on io '
        'hosts (providersQueueLoader); the browser sandbox has no config '
        'file and no environment to read FA_PROVIDERS_QUEUE from.',
  ),
  SharedSetting.mcpServers: SettingSurfaces(
    macos: false,
    ios: false,
    web: false,
    extensionPanel: false,
    gapWhy: 'MCP servers spawn host processes; no app surface can.',
  ),
  // The app applies the yaml rules at boot (issue #1078 AC3).
  SharedSetting.ttsrRules: SettingSurfaces(
    macos: true,
    ios: true,
    web: false,
    extensionPanel: false,
    gapWhy:
        'The web stub reads no ~/.fah/config.yaml (browser sandbox has '
        'no config file), so the rules have nothing to load from.',
  ),
  SharedSetting.cubeSandbox: SettingSurfaces(
    macos: false,
    ios: false,
    web: false,
    extensionPanel: false,
    gapWhy: 'Needs host-process sandboxing and a host shell.',
  ),
  SharedSetting.promptOverrides: SettingSurfaces(
    macos: false,
    ios: false,
    web: false,
    extensionPanel: false,
    gapWhy: 'App prompts are compiled in (prompts.g.dart).',
  ),
  SharedSetting.agentMode: SettingSurfaces(
    macos: false,
    ios: false,
    web: false,
    extensionPanel: false,
    gapWhy: 'Mode presets are a CLI REPL concept; apps compose prompts.',
  ),
  SharedSetting.memoryStores: SettingSurfaces(
    macos: false,
    ios: false,
    web: false,
    extensionPanel: false,
    gapWhy:
        'Memory roots are host filesystem paths; the app resolves them '
        'read-only.',
  ),
  SharedSetting.spillHooks: SettingSurfaces(
    macos: false,
    ios: false,
    web: false,
    extensionPanel: false,
    gapWhy:
        'Spill hooks live in the CLI host process\'s agent loop; no app '
        'surface has a hook chain to configure.',
  ),
  SharedSetting.tuiTheme: SettingSurfaces(
    macos: false,
    ios: false,
    web: false,
    extensionPanel: false,
    gapWhy:
        'The palette colors a terminal emulator; the app themes through '
        'its own Flutter theming stack.',
  ),
  // The app ships the live toggle (issue #1078 AC4/E3).
  SharedSetting.redactionPolicy: SettingSurfaces(
    macos: true,
    ios: true,
    web: false,
    extensionPanel: false,
    gapWhy:
        'The web stub reads no ~/.fah/config.yaml, so the toggle has '
        'no yaml config to reflect or persist into.',
  ),
  SharedSetting.imageRegistry: SettingSurfaces(
    macos: false,
    ios: false,
    web: false,
    extensionPanel: false,
    gapWhy:
        'The image registry is process-wide state in the CLI host agent '
        'loop (the request-build rewrite); the app composes its own '
        'requests and reads the section read-only.',
  ),
  // providerTimeouts publishes the CLI's global in the app too
  // (issue #1078 AC5); the retry policy rides the app roles resolver.
  SharedSetting.resiliencePolicy: SettingSurfaces(
    macos: true,
    ios: true,
    web: false,
    extensionPanel: false,
    gapWhy:
        'The web stub reads no ~/.fah/config.yaml, so the overrides '
        'have nothing to load from.',
  ),
  SharedSetting.sleepPrevention: SettingSurfaces(
    macos: false,
    ios: false,
    web: false,
    extensionPanel: false,
    gapWhy:
        'The assertion lifecycle (run-start/settle, session hooks) runs '
        'in the CLI host process; the app\'s power_guard reads the '
        'section read-only.',
  ),
  SharedSetting.contextWindowCap: SettingSurfaces(
    macos: false,
    ios: false,
    web: false,
    extensionPanel: false,
    gapWhy:
        'The cap clamps the CLI agent loop and compaction math in the CLI '
        'host process; no app surface runs that loop.',
  ),
  SharedSetting.harnessMode: SettingSurfaces(
    macos: false,
    ios: false,
    web: false,
    extensionPanel: false,
    gapWhy:
        'The benchmark mode presets the CLI REPL boot (tool scope pin, '
        'bare prompt composition); no app surface runs the fa REPL.',
  ),
  // The app pins the preset at agent build (issue #1078 AC2/E4).
  SharedSetting.loadMode: SettingSurfaces(
    macos: true,
    ios: true,
    web: false,
    extensionPanel: false,
    gapWhy:
        'The web stub reads no ~/.fah/config.yaml, so agent.mode has '
        'nothing to load from.',
  ),
  // The self-update swaps the fa binary and respawns the CLI process
  // (issue #1377); app builds update through their store/installer, and
  // the browser sandbox has no config file to persist the flag into.
  SharedSetting.autoUpdate: SettingSurfaces(
    macos: false,
    ios: false,
    web: false,
    extensionPanel: false,
    gapWhy:
        'The self-update restarts the CLI executable over its own stdio; '
        'no app surface can re-exec itself, and the browser sandbox has '
        'no ~/.fah/config.yaml to persist the flag into.',
  ),
};