settingSurfaces top-level constant
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.',
),
};