diff --git a/.claude/CLAUDE.md b/.claude/CLAUDE.md index 2d5890ee..596a0529 100644 --- a/.claude/CLAUDE.md +++ b/.claude/CLAUDE.md @@ -1,203 +1,7 @@ -# Claude Instructions for Cotabby +# Claude Code Instructions -Cotabby is a community-driven open-source macOS menu bar app that provides -on-device inline autocomplete in any text field. It watches Accessibility focus, -monitors global input, generates a local continuation through Apple Intelligence -or llama.cpp, renders ghost text near the caret, and inserts accepted text when -the user presses `Tab`. +@../AGENTS.md -This is a production app with real users and external contributors. Treat every -change as shipping to end users, not as an exercise. - -## How To Work In This Repo - -- Read the relevant subsystem before editing. Cotabby is stateful, permission-heavy, - and tied to macOS Accessibility behavior, so guessing usually creates regressions. -- Talk through architecture before coding when ownership, lifecycle, or async - cancellation is unclear. -- Diagnose failures step by step before touching code. Many bugs come from stale - focus snapshots, AX timing, permission state, runtime lifecycle, or cancellation. -- Keep changes narrow. Prefer pure helpers in `Support/` before changing services, - coordinators, or SwiftUI views. -- Protect the user's worktree. Do not revert unrelated dirty files. - -## Project Map - -- `Cotabby/App/`: app lifecycle, dependency construction, and coordinators. -- `Cotabby/UI/`: SwiftUI/AppKit presentation such as settings, onboarding, overlays, - and menu-facing state. -- `Cotabby/Services/`: side-effectful boundaries: Accessibility, input monitoring, - screenshots/OCR, llama runtime, permissions, downloads, updates, and insertion. -- `Cotabby/Models/`: shared value types, settings snapshots, state machines, and - protocol contracts. -- `Cotabby/Support/`: pure rules and low-level helper logic that should be easy to - test. -- `CotabbyTests/`: focused tests for prompt rendering, request building, availability, - runtime behavior, and pure state transitions. - -## Key Subsystems - -- App ownership starts in `CotabbyAppEnvironment` and `AppDelegate`. These construct - and retain the long-lived services. SwiftUI views should observe this graph, - not recreate service objects. -- The suggestion state machine lives in `SuggestionCoordinator` plus its extension - files: lifecycle, input, prediction, and acceptance. Keep pure rules out of the - coordinator when they can live in `Support/`. -- Focus comes from `FocusTracker`, `FocusSnapshotResolver`, `AXTextGeometryResolver`, - and `AXHelper`. Treat AX data as eventually consistent and app-specific. -- Visual context flows through `VisualContextCoordinator`, - `ScreenshotContextGenerator`, `ScreenTextExtractor`, and `WindowScreenshotService`. - OCR text is cleaned by the pure `OCRTextHygiene`; there is no model summarization step. -- Runtime generation flows through `SuggestionEngineRouter`, - `FoundationModelSuggestionEngine`, `LlamaSuggestionEngine`, - `LlamaRuntimeManager`, and the serialized `LlamaRuntimeCore` actor. The OSS - (llama.cpp) path drives base models via `BaseCompletionPromptRenderer`; Apple - Foundation Models stays instruct via `FoundationModelPromptRenderer`. - -## Comments - -- Comments should explain why, not what. Explain which invariant a design - protects or which macOS/Swift pitfall it avoids. -- Prefer file-level and type-level `///` comments for new important files/types. -- Add targeted inline comments for tricky lifecycle, `@MainActor`, `Task`, - cancellation, Accessibility/Core Foundation bridging, unsafe pointer work, and - llama.cpp runtime state. -- Avoid comments that merely restate the next line of code. - -## Contributing Workflow - -- External contributors open PRs against `main`. Greptile reviews automatically. -- `Cotabby.xcodeproj` is generated from `project.yml` by XcodeGen and committed to the - repo. `project.yml` is the source of truth. Sources under `Cotabby/` and `CotabbyTests/` - are auto-discovered by folder, so a new file (including a new test) needs no project edit. - Only structural changes (targets, build settings, package dependencies, scheme) require - editing `project.yml` followed by `xcodegen generate`. The `XcodeGen` CI workflow fails the - PR if the committed project drifts from `project.yml`. -- Run SwiftLint before pushing: `swiftlint lint --quiet`. The project config is - in `.swiftlint.yml` (line length 140/200, trailing commas disallowed). -- Wiki lives at https://github.com/FuJacob/Cotabby/wiki for contributor onboarding. - -## GitHub Automation Rules - -- **No Co-Authored-By lines.** Never add `Co-Authored-By` trailers to commits. -- **PRs must use the repo template.** When creating a pull request, read - `.github/PULL_REQUEST_TEMPLATE.md` and fill in every section (Summary, - Validation, Linked issues, Risk / rollout notes). Do not invent your own - format or use a generic body. -- **Issues must use the repo templates.** When opening an issue, read the - matching template in `.github/ISSUE_TEMPLATE/` (bug_report.md or - feature_request.md) and fill in every field. Do not invent your own format. - -## Swift And macOS Expectations - -- UI, AppKit, SwiftUI, and most Accessibility interactions belong on the main actor. -- CPU-heavy work, OCR, screenshots, and llama.cpp generation must not block the UI. -- Keep cancellation and stale-result handling explicit. The focused field can change - while async work is still running. -- Use protocol contracts in `SuggestionSubsystemContracts.swift` when the coordinator - only needs a behavior-shaped dependency. -- Do not show dev-only diagnostics as normal user settings unless the feature is - intentionally productized. - -## Debugging & Logs - -Cotabby ships a structured logging system built for AI-assisted debugging. During development -the app is launched with `-cotabby-debug`, which enables on-disk JSONL sinks in addition to -the always-on Console.app stream. - -**Verbosity floor.** Every handler's level comes from `CotabbyDebugOptions.minimumLogLevel`. The -default is `.info`, which lets swift-log skip per-keystroke `.debug`/`.trace` calls before they -allocate, so they cost nothing in release and do not distort energy measurements. `-cotabby-debug` -raises the floor to `.trace`. `COTABBY_LOG_LEVEL=` overrides it explicitly, -e.g. to get Console `.debug` output without the heavier file/screenshot artifacts. A -`Logging initialized` line at startup records the active `debug_mode`, `min_log_level`, and sink paths. - -**Log file locations** (only populated when `-cotabby-debug` is set): - -- `~/Library/Logs/Cotabby/cotabby.jsonl` — main event stream. One JSON object per line. All - metadata (request IDs, engine names, token counts, latencies, error reasons) is flattened - as top-level fields so it can be filtered with `jq`. -- `~/Library/Logs/Cotabby/llm-io.jsonl` — full LLM prompts and completions, one record per - generation. Shares `request_id` with the main log so a single suggestion can be joined - across files. -- **Dev-identity builds log to `~/Library/Logs/Cotabby Dev/` instead** (same file names). The - `Cotabby Dev` scheme — the daily-driver way to run from Xcode — ships a separate app identity, - and its logs land in the identity's own directory. When debugging a dev-built app, read that - directory first; an apparently silent `~/Library/Logs/Cotabby/` does not mean the flag is off. -- `~/Desktop/cotabby-ax-dump.txt` — most recent Chrome AX tree snapshot. Overwritten on each - Chrome focus change (debounced by focused-element identity). -- Rotated previous logs: `*.jsonl.1` (one-step rotation when a file exceeds 10 MB). - -**Correlation IDs.** Every prediction gets a `request_id` like `req_a3f9k2lq`, stamped on -every log line that touches that request (coordinator state transitions, router selection, -engine generation, LLM I/O capture). To pull the complete history of one suggestion: - -```bash -jq 'select(.request_id == "req_a3f9k2lq")' ~/Library/Logs/Cotabby/cotabby.jsonl -jq 'select(.request_id == "req_a3f9k2lq")' ~/Library/Logs/Cotabby/llm-io.jsonl -``` - -**Useful `jq` recipes:** - -```bash -# Recent errors across the app -jq 'select(.level == "error")' ~/Library/Logs/Cotabby/cotabby.jsonl - -# Llama generations slower than 500 ms -jq 'select(.engine == "llama" and .latency_ms > 500)' ~/Library/Logs/Cotabby/llm-io.jsonl - -# Coordinator state transitions -jq 'select(.category == "suggestion" and .stage != null)' ~/Library/Logs/Cotabby/cotabby.jsonl - -# Runtime model load/decode events -jq 'select(.category == "runtime")' ~/Library/Logs/Cotabby/cotabby.jsonl -``` - -**Symptom → category map** (jump straight to the right filter): - -- Ghost text didn't appear → `suggestion` + `focus` -- Wrong text inserted → look up the request in `llm-io.jsonl`, then walk `suggestion` for - acceptance -- Model won't load / decode fails → `runtime` + `models` -- Permission dialog loop → `app` (permission state transitions) -- Chrome-specific weirdness → start with `~/Desktop/cotabby-ax-dump.txt`, then `focus` -- Wrong backend chosen → `suggestion` router selection log (`engine`, `fallback_engine`) - -**Console.app fallback** (when `-cotabby-debug` wasn't set or the user hasn't relaunched yet): - -```bash -log show --predicate 'subsystem == "com.cotabby.app"' --last 10m -log stream --predicate 'subsystem == "com.cotabby.app"' --level debug -``` - -Note the default verbosity floor is `.info`, so Cotabby's `.debug`/`.trace` lines are not emitted -unless the app was launched with `-cotabby-debug` or `COTABBY_LOG_LEVEL=debug`. The `--level debug` -flag above controls what `log` *displays*, not what Cotabby *emits*. The `.info`, warning, and error -lines (including model-load config and permission transitions) always stream. - -**Rule of thumb.** When a user reports a bug, first `tail` / `jq` the relevant file with the -symptom → category map. Do not ask the user to re-explain symptoms before checking the logs. -If `-cotabby-debug` clearly isn't on (no JSONL files exist), use the `log show` fallback -first; only ask for a relaunch with the flag if the OSLog stream is genuinely insufficient. - -## Validation - -Prefer the narrowest useful validation first, then broaden when the change touches -shared behavior: - -```bash -xcodebuild -project Cotabby.xcodeproj -scheme Cotabby -destination 'platform=macOS' build \ - -derivedDataPath build/DerivedData -xcodebuild -project Cotabby.xcodeproj -scheme Cotabby -destination 'platform=macOS' build-for-testing \ - -derivedDataPath build/DerivedData -``` - -Always pass `-derivedDataPath build/DerivedData` so output lands in the -repo-scoped `build/` (already gitignored) instead of accumulating under -`~/Library/Developer/Xcode/DerivedData/Cotabby-*`, where every build leaves a -fresh multi-GB module cache and SwiftPM checkout that nothing trims. When a -task is done and the build artifacts are no longer needed, `rm -rf -build/DerivedData` before reporting completion. - -Run targeted tests when possible. If app-hosted tests fail because of local signing -or Team ID mismatch, report the exact failure and still run `build-for-testing`. +`AGENTS.md` is the canonical project instruction file. Keep shared architecture, workflow, safety, +debugging, validation, and documentation rules there so Claude Code and other coding agents receive +the same guidance without duplicated copies drifting apart. diff --git a/.claude/scheduled_tasks.lock b/.claude/scheduled_tasks.lock deleted file mode 100644 index b4df76a1..00000000 --- a/.claude/scheduled_tasks.lock +++ /dev/null @@ -1 +0,0 @@ -{"sessionId":"87be731f-eb61-4656-9ac3-78b612fbc071","pid":73265,"procStart":"Sun May 31 00:57:26 2026","acquiredAt":1780192918141} \ No newline at end of file diff --git a/.codex/environments/environment.toml b/.codex/environments/environment.toml index f2478c47..e631519c 100644 --- a/.codex/environments/environment.toml +++ b/.codex/environments/environment.toml @@ -8,4 +8,4 @@ script = "" [[actions]] name = "Run" icon = "run" -command = "./script/build_and_run.sh" +command = "./scripts/build_and_run.sh" diff --git a/.gitignore b/.gitignore index 0359d6c4..3e5b784f 100644 --- a/.gitignore +++ b/.gitignore @@ -34,6 +34,7 @@ posts.txt # Claude Code .claude/worktrees/ +.claude/scheduled_tasks.lock # Large model files — keep out of git *.gguf @@ -41,4 +42,4 @@ posts.txt .rocketride/ .agents -.internal \ No newline at end of file +.internal diff --git a/AGENTS.md b/AGENTS.md index 781d76f6..2effb230 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -2,19 +2,21 @@ ## Project Identity -Cotabby is a macOS menu bar app for on-device inline autocomplete. The core loop is: +Cotabby is a macOS menu bar app for local-first inline autocomplete. The core loop is: 1. Track the currently focused editable field through Accessibility. 2. Monitor global keyboard input without stealing focus. 3. Decide whether the field, permissions, settings, and runtime are eligible. 4. Build an autocomplete request from the focused text context and optional visual context. -5. Generate locally through Apple Intelligence or llama.cpp. +5. Generate through Apple Intelligence, in-process llama.cpp, or a configured OpenAI-compatible + endpoint. 6. Normalize the model output into a short continuation. 7. Render ghost text near the caret. 8. Insert accepted chunks when the user presses `Tab` while keeping the remaining tail alive. -Privacy and local-first behavior matter. Do not introduce hosted API dependencies unless the user -explicitly asks for that direction. +Apple Intelligence and llama.cpp run on the Mac. The endpoint backend may send the same bounded +request to loopback, LAN, or public HTTPS when the user explicitly selects it. Do not add or broaden +hosted transmission without explicit user scope and clear disclosure. ## Learning-First Collaboration @@ -43,17 +45,17 @@ When adding a `struct`, `class`, `enum`, actor, or protocol, explain: ## Repository Map - `Cotabby/App/`: app entrypoint, composition root, lifecycle wiring, and coordinators. -- `Cotabby/UI/`: SwiftUI/AppKit presentation: settings, onboarding, menu views, overlays, and - visual affordances. -- `Cotabby/Services/`: side-effectful boundaries: Accessibility, input monitoring, text insertion, - screenshots/OCR, visual context, llama runtime, permissions, downloads, updates, and launch - services. -- `Cotabby/Models/`: shared value types, settings snapshots, states, domain models, and protocol - contracts. -- `Cotabby/Support/`: pure helper logic, prompt rendering, availability rules, normalization, - reconciliation, geometry helpers, and low-level bridging utilities. -- `CotabbyTests/`: unit and microbench tests. Prefer testing pure `Support/` and `Models/` logic - when possible. +- `Cotabby/UI/`: SwiftUI presentation grouped into menus, settings, onboarding, overlays, inline + features, and reusable components. +- `Cotabby/Services/`: side effects and OS/runtime boundaries. AppKit panel controllers live under + `Presentation`; other folders own focus, input, context, insertion, visual capture, inference, + model management, permissions, power, spelling, and updates. +- `Cotabby/Models/`: shared values, settings snapshots, states, domain models, and contracts grouped + by subsystem. +- `Cotabby/Support/`: deterministic policy, prompting, normalization, reconciliation, geometry, + sanitization, logging, and low-level bridging helpers grouped by subsystem. +- `CotabbyTests/`: unit and microbench tests that mirror the production subsystem map. Prefer + testing pure `Support/` and `Models/` logic when possible. - `CotabbyInference`: the llama.cpp wrapper, consumed as a SwiftPM package (`github.com/FuJacob/cotabbyinference`, pinned to `main`) rather than vendored in-tree. @@ -132,8 +134,8 @@ Runtime generation is split by responsibility: - `FoundationModelSuggestionEngine`: Apple on-device generation path. - `LlamaSuggestionEngine`: request-to-prompt, llama result handling, and cache reset handoff. - `LlamaRuntimeManager`: UI-facing runtime state, model selection, warmup, and lifecycle control. -- `LlamaRuntimeCore`: serialized actor around mutable llama.cpp pointers, prompt tokenization, - KV-cache reuse, sampling, an optional deterministic constrained decoder +- `LlamaRuntimeCore`: explicitly serialized native boundary around mutable llama.cpp pointers, + prompt tokenization, KV-cache reuse, sampling, an optional deterministic constrained decoder (`runConstrainedDecode`, gated behind the default-off `cotabbyConstrainedDecoderEnabled`), and shutdown. - `BaseCompletionPromptRenderer`: prompt construction for the Open Source path. The llama models are @@ -143,8 +145,9 @@ Runtime generation is split by responsibility: and the caret prefix comes last. `FoundationModelPromptRenderer` stays instruct-shaped because Apple's Foundation Models path gives us a first-class instructions channel. -Keep llama.cpp pointer work serialized inside `LlamaRuntimeCore`. The manager should publish state; -the core should own native correctness. +`LlamaRuntimeCore` is not a Swift actor. Its locks and lifecycle condition keep native pointer, +cache/decode, and shutdown work serialized while heavy generation runs away from MainActor. The +manager should publish state; the core should own native correctness. ## UI And Overlays diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md index 715b831e..87e25feb 100644 --- a/ARCHITECTURE.md +++ b/ARCHITECTURE.md @@ -1,101 +1,393 @@ # Cotabby Architecture -This document is the maintainer map for Cotabby. Read this before making changes to the suggestion -pipeline, Accessibility integration, or runtime lifecycle. - -If you are new to Swift or macOS APIs, treat this file as the system-level map and follow the -linked source files in order rather than hunting through the project tree at random. - -## System Shape - -Cotabby is a macOS menu bar app with one long-lived dependency graph and one main product loop: - -1. Resolve the currently focused editable field through Accessibility. -2. Watch keyboard input globally. -3. Decide whether a suggestion should be requested. -4. Ask the local llama runtime for a continuation. -5. Render ghost text near the caret. -6. Reconcile live typing against the active suggestion session. -7. Insert accepted text back into the host app when the user presses `Tab`. - -The key design rule is separation by responsibility: - -- `Cotabby/App/`: lifecycle owners and composition root. -- `Cotabby/UI/`: SwiftUI presentation only. -- `Cotabby/Services/`: side effects, async work, and OS/runtime boundaries. -- `Cotabby/Models/`: shared value types and contracts. -- `Cotabby/Support/`: pure rules and low-level bridging helpers. - -## Lifecycle Ownership - -Start with these files in order: - -1. `Cotabby/App/Core/CotabbyApp.swift` -2. `Cotabby/App/Core/AppDelegate.swift` -3. `Cotabby/App/Core/CotabbyAppEnvironment.swift` - -`CotabbyAppEnvironment` builds the long-lived object graph once. `AppDelegate` owns app lifecycle and cross-subsystem subscriptions. SwiftUI views observe those objects; they do not create them. - -This is similar to a React app with a root provider tree plus a small top-level controller that wires subscriptions and startup behavior. - -## Suggestion Pipeline - -The suggestion subsystem is centered on `SuggestionCoordinator`, but it is no longer intended to be read as one giant file. +This is the ten-minute maintainer map for Cotabby. It explains the product loop, ownership +boundaries, reliability rules, and the best files to read before changing behavior. It is intentionally +a roadmap rather than an encyclopedia. + +## What Cotabby Is + +Cotabby is a macOS menu bar agent that provides inline autocomplete in other applications: + +1. Find the focused editable field through macOS Accessibility. +2. Observe global keyboard input without taking focus. +3. Gate work using permissions, field capability, settings, and runtime state. +4. Build a bounded request from caret text and optional context. +5. Generate through Apple Intelligence, an in-process llama.cpp model, or a user-configured + OpenAI-compatible endpoint. +6. Normalize the result into a safe short continuation. +7. Render inline ghost text or a mirror card near the caret. +8. Reconcile typing against the active suggestion and insert accepted chunks through configurable + shortcuts. + +The product is local-first, not unconditionally offline. Apple Intelligence and the bundled +open-source path run on the Mac. An endpoint can be loopback, on the local network, or a public HTTPS +service; when selected, the bounded request is sent to that server. + +## Architectural Constraints + +These rules explain most of the structure: + +- There is one app-lifetime dependency graph. Views never create process-wide services. +- Accessibility state is eventually consistent and app-specific. Every async result can be stale. +- Generation, presentation, and insertion fail closed for secure and unsupported fields. Early + acquisition has a current secure-field caveat described under privacy below. +- User text and optional context are bounded before generation. +- On-device work stays local unless the user explicitly selects an endpoint engine. +- Global input is observed in a fail-open way; Cotabby consumes only events it successfully handles. +- MainActor owns UI, published state, AppKit, and most AX access. OCR, downloads, and generation do + not block it. +- Mutable native llama state is explicitly serialized and released before process teardown. +- Pure policy belongs outside coordinators so the state machine remains testable. + +## Repository Map + +- [Cotabby/App](Cotabby/App): application entry point, composition root, lifecycle, and coordinators. +- [Cotabby/UI](Cotabby/UI): SwiftUI and AppKit-facing presentation for settings, onboarding, menus, + previews, and user surfaces. +- [Cotabby/Services](Cotabby/Services): side-effectful boundaries for AX, event taps, insertion, + capture/OCR, generation, downloads, permissions, updates, and AppKit panels. +- [Cotabby/Models](Cotabby/Models): shared values, settings, states, configuration, and protocol + contracts. +- [Cotabby/Support](Cotabby/Support): deterministic rules, prompt rendering, normalization, + reconciliation, layout, and low-level bridging helpers. +- [CotabbyTests](CotabbyTests): unit tests and microbenchmarks, with emphasis on pure Support and + Models behavior. +- CotabbyInference: the llama.cpp Swift wrapper consumed from an external SwiftPM package pinned to + its main branch; native code is not vendored here. + +Folder names describe the dominant responsibility, not the UI framework. Cotabby/UI contains +SwiftUI views, while AppKit panel/window controllers live mostly under Cotabby/Services/Presentation or app +coordinators because they own process-level presentation behavior. + +## End-to-End Data Flow + +~~~text +CGEvent and focus poll + -> FocusTracker + -> FocusSnapshotResolver + AXTextGeometryResolver + -> FocusSnapshot + -> SuggestionCoordinator + -> availability and native correction + -> debounce + current work identity + -> SuggestionRequestFactory + -> bounded AX / surface / clipboard / visual / user context + -> SuggestionEngineRouter + -> Apple | in-process llama | OpenAI-compatible endpoint + -> SuggestionTextNormalizer + seam guards + -> SuggestionInteractionState + -> SuggestionOverlayPresenter -> OverlayController + -> typing reconciliation or configured acceptance + -> SuggestionInserter + -> host AX publication check and next prediction +~~~ + +The request is immutable after generation begins. Engines do not reach back into live AX state. +Before a partial, final, or insertion applies, the coordinator verifies current work identity, focus, +content signatures, settings continuity, and session state. + +## Lifecycle and Ownership + +Read these first: + +1. [CotabbyApp.swift](Cotabby/App/Core/CotabbyApp.swift) +2. [AppDelegate.swift](Cotabby/App/Core/AppDelegate.swift) +3. [CotabbyAppEnvironment.swift](Cotabby/App/Core/CotabbyAppEnvironment.swift) + +| Owner | Responsibility | Lifetime | +| --- | --- | --- | +| CotabbyApp | SwiftUI scenes, MenuBarExtra, AppDelegate bridge | Process | +| CotabbyAppEnvironment | Construct the shared object graph and retain graph-internal subscriptions | Process | +| AppDelegate | Start/stop services and retain lifecycle-driven subscriptions | Process | +| Coordinators | Orchestrate one product surface across services | App or window | +| Services | Own one side effect, OS boundary, or mutable subsystem | Injected | +| Views | Render shared state and send narrow user intents | SwiftUI/AppKit surface | + +AppDelegate starts the selected runtime, focus polling, input monitoring, updates, suggestion +coordination, inline commands, and onboarding after launch. It stops new work before tearing down +global taps, polling, and native resources at termination. Production service startup is skipped in +the XCTest host. + +CotabbyAppEnvironment also owns important subscriptions: focus cadence, global-toggle tap binding, +power-profile application, engine/model selection, and endpoint connection invalidation. AppDelegate +owns permission reactions, engine runtime start/stop, overlays, model-directory refresh, and +process-lifecycle behavior. Both retain subscriptions because both own different relationships. + +[SuggestionSettingsModel.swift](Cotabby/Models/Settings/SuggestionSettingsModel.swift) is the published source +of app behavior. [SuggestionSettingsStore.swift](Cotabby/Support/Settings/SuggestionSettingsStore.swift) +persists non-secret preferences in UserDefaults. Endpoint credentials live in Keychain. + +## Suggestion State Machine Read the coordinator in this order: -1. `Cotabby/App/Coordinators/SuggestionCoordinator.swift` -2. `Cotabby/App/Coordinators/SuggestionCoordinator+Lifecycle.swift` -3. `Cotabby/App/Coordinators/SuggestionCoordinator+Input.swift` -4. `Cotabby/App/Coordinators/SuggestionCoordinator+Prediction.swift` -5. `Cotabby/App/Coordinators/SuggestionCoordinator+Acceptance.swift` - -The coordinator owns: - -- published UI/debug state -- top-level orchestration -- debounce/generation task ownership through `SuggestionWorkController` -- active suggestion session ownership through `SuggestionInteractionState` -- overlay/insertion/logging decisions - -The coordinator should not own pure decision rules or low-level OS logic. Those live elsewhere: - -- `Cotabby/Support/SuggestionRequestFactory.swift`: pure request building -- `Cotabby/Support/SuggestionSessionReconciler.swift`: pure session and acceptance rules -- `Cotabby/Support/SuggestionAvailabilityEvaluator.swift`: pure gating logic -- `Cotabby/Services/Visual/VisualContextCoordinator.swift`: screenshot/OCR lifecycle; OCR text is cleaned by the pure `OCRTextHygiene` filters (no model-summarization step) -- `Cotabby/Services/Runtime/LlamaSuggestionEngine.swift`: prompt/result normalization over the runtime - -## Focus And Accessibility - -Focus detection is a small pipeline of its own: - -1. `FocusTracker` polls on a timer. -2. `FocusSnapshotResolver` walks the AX tree and validates field capability. -3. `AXTextGeometryResolver` computes caret and text geometry. -4. `AXHelper` contains the low-level Core Foundation / Accessibility bridging. - -If the issue is “Cotabby does not recognize this field” or “the ghost text is in the wrong place,” start in those files before touching the coordinator. - -## Runtime And Models - -The local model runtime is intentionally split: - -- `LlamaRuntimeManager`: published bootstrap state and user-facing control flow -- `LlamaRuntimeCore`: serialized low-level runtime work -- `LlamaSuggestionEngine`: suggestion-specific normalization and error mapping - -That split matters because runtime lifecycle concerns change at a different rate than prompt strategy or output cleanup. - -The constrained decoder, beam search, and fill-in-middle prompting ship behind default-off developer flags. +1. [SuggestionCoordinator.swift](Cotabby/App/Coordinators/SuggestionCoordinator.swift) +2. [SuggestionCoordinator+Lifecycle.swift](Cotabby/App/Coordinators/SuggestionCoordinator+Lifecycle.swift) +3. [SuggestionCoordinator+Input.swift](Cotabby/App/Coordinators/SuggestionCoordinator+Input.swift) +4. [SuggestionCoordinator+Prediction.swift](Cotabby/App/Coordinators/SuggestionCoordinator+Prediction.swift) +5. [SuggestionCoordinator+Acceptance.swift](Cotabby/App/Coordinators/SuggestionCoordinator+Acceptance.swift) + +The coordinator owns orchestration and user-facing suggestion state. It delegates rules and mutable +sub-state to smaller boundaries: + +- [SuggestionAvailabilityEvaluator.swift](Cotabby/Support/Suggestion/SuggestionAvailabilityEvaluator.swift): + pure permission, settings, focus, and runtime gates. +- [SuggestionRequestFactory.swift](Cotabby/Support/Suggestion/SuggestionRequestFactory.swift): pure bounded + request construction and prompt preview. +- [SuggestionWorkController.swift](Cotabby/Services/Suggestion/SuggestionWorkController.swift): + debounce/generation tasks and monotonically increasing work IDs. +- [SuggestionInteractionState.swift](Cotabby/Services/Suggestion/SuggestionInteractionState.swift): + active session, materialized context, consumed prefix, and known post-insertion AX lag. +- [SuggestionSessionReconciler.swift](Cotabby/Support/Suggestion/SuggestionSessionReconciler.swift): type-through, + acceptance, and live-host reconciliation. +- [SuggestionTextNormalizer.swift](Cotabby/Support/Suggestion/SuggestionTextNormalizer.swift): backend-independent + cleanup, echo removal, whitespace policy, trailing-text deduplication, and unsafe-output rejection. + +A native correction path runs before model generation. NSSpellChecker and bundled SymSpell indexes +can suppress completion while a likely typo is forming, offer a green atomic replacement, or apply +an opt-in automatic fix after Space. + +Engines can stream cumulative partials. The coordinator coalesces UI work, accepts only monotonic +extensions, and allows a displayed partial to become an active accept-ready session. The final result +remains authoritative and can replace or suppress provisional text. + +Normal sessions support exact type-through, word or phrase acceptance, full-tail acceptance, CJK-aware +segmentation, punctuation handling, optional trailing space, and speculative generation after final +acceptance. Corrections commit atomically rather than exposing partial acceptance. + +## Focus and Accessibility + +Read: + +1. [FocusTracker.swift](Cotabby/Services/Focus/FocusTracker.swift) +2. [FocusSnapshotResolver.swift](Cotabby/Services/Focus/FocusSnapshotResolver.swift) +3. [FocusModels.swift](Cotabby/Models/Focus/FocusModels.swift) +4. [AXTextGeometryResolver.swift](Cotabby/Services/Focus/AXTextGeometryResolver.swift) +5. [AXHelper.swift](Cotabby/Support/Accessibility/AXHelper.swift) + +FocusTracker uses timer polling as the authoritative source because AX notifications are inconsistent +across AppKit, browsers, Electron, and custom editors. Activity resets the cadence; idle unchanged +state backs it off. Input and acceptance paths may request an explicit fresh capture, but do not trust +event payloads as complete field state. + +FocusSnapshotResolver finds a usable editable candidate, blocks secure/unsupported surfaces, bounds +text on both sides of the caret, resolves the focused process, and publishes stable domain values. +Chromium/Electron require accessibility priming, cursor hit-test recovery, and out-of-process iframe +handling. All fallbacks are revalidated and yield to a valid system-focused element. + +AXTextGeometryResolver tries direct range bounds, browser text-marker bounds, a nearby measured +character, child static-text runs, and field-frame estimation. Geometry is labeled exact, derived, +estimated, or layoutEstimated; presentation uses that quality rather than pretending every rectangle +is equally trustworthy. + +AX is synchronous cross-process IPC on MainActor. Deep walks are gated, cached, bounded, and +throttled. Calendar has a narrow capture guard because enumerating its transient editor can dismiss +the editor. Async consumers carry focus/content signatures instead of relying on AX element identity +alone. + +## Global Input and Insertion + +[InputMonitor.swift](Cotabby/Services/Input/InputMonitor.swift) owns three event-tap responsibilities: + +- A steady listen-only observer for typing, deletion, navigation, and pointer activity. +- A conditional consuming tap while a suggestion or inline-command capture needs interception. +- A separate consuming tap for the configured global-toggle shortcut. + +The conditional tap consumes a matching key only after the owning coordinator succeeds. Stale taps, +missing overlays, rejected sessions, and revoked permission fail open so the host receives the key. +Word/phrase and full-tail acceptance have independent configurable key/modifier bindings. + +[InputSuppressionController.swift](Cotabby/Services/Input/InputSuppressionController.swift) marks and +counts Cotabby-generated events so insertion does not re-enter the typing pipeline. + +[SuggestionInserter.swift](Cotabby/Services/Suggestion/SuggestionInserter.swift) normally posts short +Unicode key events without touching the clipboard. Active IME composition uses a clipboard paste +commit. A default-off policy can also paste long or multiline chunks. Paste tries the target app's +Accessibility Paste menu item before synthetic Command-V and restores every pasteboard representation +unless newer user clipboard activity wins. + +Replacement sessions delete their validated literal run before inserting correction, emoji, or macro +text. Posting events is not treated as proof of success; the later AX snapshot is reconciled. + +## Engines and Prompting + +[SuggestionEngineRouter.swift](Cotabby/Services/Runtime/SuggestionEngineRouter.swift) selects one of: + +- [FoundationModelSuggestionEngine.swift](Cotabby/Services/Runtime/FoundationModelSuggestionEngine.swift) + for Apple Intelligence. It uses the framework's instructions channel, streams cumulative partials, + and keeps a one-use compatible prewarmed session. Unsupported language/locale can fall back to llama. +- [LlamaSuggestionEngine.swift](Cotabby/Services/Runtime/LlamaSuggestionEngine.swift) for an in-process + GGUF base model through CotabbyInference. [LlamaRuntimeManager.swift](Cotabby/Services/Runtime/LlamaRuntimeManager.swift) + publishes state; [LlamaRuntimeCore.swift](Cotabby/Services/Runtime/LlamaRuntimeCore.swift) owns native + pointers, tokenization, KV-cache reuse, prefill, sampling, abort, and shutdown. +- [OpenAICompatibleSuggestionEngine.swift](Cotabby/Services/Runtime/OpenAICompatibleSuggestionEngine.swift) + for completion/chat APIs and SSE streams. The default is loopback Ollama at + http://127.0.0.1:11434/v1; LAN and public HTTPS endpoints are supported, while insecure public HTTP + is rejected. + +LlamaRuntimeCore is a nonisolated lock/condition-protected native boundary, not a Swift actor. Its +autocomplete lock serializes cache/decode state, and its lifecycle condition prevents shutdown from +racing active native work. Heavy work runs away from MainActor. + +[BaseCompletionPromptRenderer.swift](Cotabby/Support/Prompting/BaseCompletionPromptRenderer.swift) renders a +base-model text continuation with optional budgeted context and the caret prefix last. It does not +wrap a base GGUF in an instruction conversation. [FoundationModelPromptRenderer.swift](Cotabby/Support/Prompting/FoundationModelPromptRenderer.swift) +keeps Apple's instruction-shaped prompt separate. + +Prewarm is opportunistic and goes only to the selected backend. Context reset reaches every backend. +The local runtime is loaded only for the Open Source engine and is released when switching to Apple +or endpoint mode so mapped weights and Metal buffers do not stay resident unnecessarily. + +## Context, Privacy, and Permissions + +[PermissionManager.swift](Cotabby/Services/Permission/PermissionManager.swift) tracks: + +- Accessibility: required for focus, text, capability, geometry, and insertion validation. +- Input Monitoring: required for global keyboard observation and acceptance interception. +- Screen Recording: optional, used only for screenshot-derived context. + +Context sources are independently enabled and bounded: recent AX prefix/trailing text, surface +metadata, user rules/extended context, relevant clipboard content, visual OCR, language, and settings. +[PromptContextSanitizer.swift](Cotabby/Support/Context/PromptContextSanitizer.swift) sanitizes optional text, +and prompt renderers apply per-section budgets. + +[ClipboardContextProvider.swift](Cotabby/Services/Context/ClipboardContextProvider.swift) reads a +fresh bounded value at request time rather than recording clipboard history. Relevance and distillation +policies drop unrelated or excessive content. + +Visual context is one field-scoped session: + +~~~text +VisualContextCoordinator + -> WindowScreenshotService (ScreenCaptureKit crop) + -> ScreenTextExtractor (Vision OCR + line confidence) + -> OCRTextHygiene + -> bounded sanitized excerpt +~~~ + +There is no model summarization step and raw screenshots do not enter prompts. Missing Screen Recording +produces an explicit unavailable state without disabling text-only autocomplete. Debug screenshot/OCR +artifacts exist only under the explicit debug launch mode. + +Secure fields cannot schedule generation, show a suggestion, accept text, or open an inline command, +so their context cannot flow into an engine request. The acquisition boundary is currently broader +than that guarantee: FocusSnapshotResolver still creates a bounded context for a secure field before +marking its capability blocked, and visual-capture eligibility deliberately ignores capability so +screenshot/OCR can warm for that field. The excerpt cannot be consumed by prediction, but explicit +debug mode can persist visual captures. Treat this as privacy debt; current architecture guarantees +no secure-field generation, not no secure-field acquisition. + +Endpoint credentials are stored in Keychain. A remote endpoint receives the same bounded request that +would otherwise be used locally, so its privacy scope must remain visible in settings and +documentation. + +## Presentation and Sibling Features + +[SuggestionOverlayPresenter.swift](Cotabby/Services/Suggestion/SuggestionOverlayPresenter.swift) +decides presentation actions. [OverlayController.swift](Cotabby/Services/Presentation/OverlayController.swift) +owns a reusable borderless non-activating NSPanel and SwiftUI-hosted content. + +Automatic presentation uses inline ghost text for exact/derived caret geometry and a mirror card for +estimated/layout-estimated geometry, mid-line editing, or explicit user preference. The overlay can +match host font/color, render corrections distinctly, respect right-to-left and multiline layout, +show an acceptance hint, and advance a partial tail without waiting for noisy AX geometry. + +[ActivationIndicatorController.swift](Cotabby/Services/Presentation/ActivationIndicatorController.swift) owns +the optional field/caret indicator. [FocusDebugOverlayController.swift](Cotabby/Services/Presentation/FocusDebugOverlayController.swift) +is developer-only and gated by -cotabby-debug. + +[InlineCommandCoordinator.swift](Cotabby/App/Coordinators/InlineCommandCoordinator.swift) arbitrates +the single input-capture slot between: + +- [EmojiPickerController.swift](Cotabby/App/Coordinators/EmojiPickerController.swift): colon query, + lazy catalog/matcher, non-activating picker, recency/frequency ranking, and literal-run replacement. +- [MacroController.swift](Cotabby/App/Coordinators/MacroController.swift): slash query and deterministic + date, random, unit, currency, and arithmetic evaluation through MacroEngine. + +Both use pure trigger state machines, stay pinned to one supported focus sequence, and cancel on +focus change or incompatible input. They do not call a language model. + +[SettingsCoordinator.swift](Cotabby/App/Coordinators/SettingsCoordinator.swift) and +[WelcomeCoordinator.swift](Cotabby/App/Coordinators/WelcomeCoordinator.swift) own app-lifetime AppKit +windows hosting SwiftUI content. Settings and onboarding observe the shared graph. Hiding the menu bar +icon retains a recovery path to Settings. + +## Concurrency and Reliability Rules + +- Revalidate after every await that can outlive focus, content, settings, or work identity. +- Treat cancellation as expected lifecycle, not automatically as a backend failure. +- Keep AX and AppKit access MainActor-isolated, but bound synchronous AX work aggressively. +- Use actors or explicit serialization for mutable non-UI state; do not move native pointers across + an ownership boundary casually. +- Never use only AX element identity as a stale-result guard. +- Keep overlay text and active-session remaining text equal before acceptance. +- Preserve the narrow known-insertion sentinel; general stale AX tolerance hides real divergence. +- Stop new generation and input work before releasing runtime state at termination. ## Safe Change Order -If you need to change behavior, prefer this order: - -1. Pure logic in `Support/` -2. Service boundary behavior in `Services/` -3. Coordinator orchestration in `App/` -4. SwiftUI presentation in `UI/` - -That order minimizes regression risk because the most deterministic code changes first and the most stateful code changes last. +When behavior changes, prefer: + +1. Pure policy and helpers in Support. +2. Domain values, state, settings, and contracts in Models. +3. Side-effectful boundaries in Services. +4. Orchestration in App. +5. Presentation in UI. + +This is a dependency direction, not a demand to touch every layer. A pure rule should not be added to +SuggestionCoordinator just because that is where its symptom becomes visible. + +## Debugging and Validation + +Development schemes launch with -cotabby-debug. That enables local privacy-sensitive diagnostics in +addition to unified logging: + +- ~/Library/Logs/Cotabby/cotabby.jsonl: structured event stream. +- ~/Library/Logs/Cotabby/llm-io.jsonl: full prompt/completion records. +- ~/Desktop/cotabby-ax-dump.txt: most recent Chrome focus AX tree. +- ~/Desktop/cotabby-debug-screenshots/: retained visual-context capture/OCR pairs. + +Every prediction carries a request_id through coordinator, router, engine, and LLM-I/O records. Start +with category focus for field/geometry failures, suggestion for state/acceptance failures, runtime for +model failures, and app for permissions/lifecycle. + +[project.yml](project.yml) is the Xcode project source of truth. XcodeGen produces the committed +[Cotabby.xcodeproj](Cotabby.xcodeproj); CI regenerates it and fails when the checked-in project differs. +Cotabby and Cotabby Dev build the same sources under distinct bundle/product identities so development +does not overwrite the production app's TCC grants. Swift default actor isolation is MainActor. + +Use the narrowest relevant tests first, then broaden. The standard build boundary is: + +~~~bash +xcodebuild -project Cotabby.xcodeproj -scheme Cotabby -destination 'platform=macOS' build \ + -derivedDataPath build/DerivedData + +xcodebuild -project Cotabby.xcodeproj -scheme Cotabby -destination 'platform=macOS' build-for-testing \ + -derivedDataPath build/DerivedData +~~~ + +CI independently checks project generation, compilation, tests, and SwiftLint. Pure state machines, +policies, prompt utilities, normalization, and layout logic should receive focused unit coverage. + +## Problem-to-File Map + +| Symptom or change | Start here | +| --- | --- | +| App startup, duplicate service, shutdown | CotabbyAppEnvironment, AppDelegate | +| Field not detected or wrong app policy | FocusTracker, FocusSnapshotResolver | +| Ghost at wrong location | AXTextGeometryResolver, CompletionRenderModePolicy, OverlayController | +| Suggestion never starts | SuggestionAvailabilityEvaluator, SuggestionCoordinator+Prediction | +| Old suggestion appears | SuggestionWorkController, focus/content signatures | +| Wrong prompt or leaked optional context | SuggestionRequestFactory, prompt renderer, sanitizer | +| Backend selection or memory issue | SuggestionEngineRouter, AppDelegate, LlamaRuntimeManager | +| Native decode/cache/shutdown issue | LlamaRuntimeCore, CotabbyInference boundary | +| Partial/final output mismatch | streaming policy, SuggestionTextNormalizer, seam guards | +| Acceptance key passes through or is stolen | InputMonitor, acceptance validation | +| Wrong or repeated inserted text | SuggestionInserter, InputSuppressionController, reconciler | +| Clipboard context is irrelevant | ClipboardRelevanceFilter, ClipboardContentDistiller | +| Screenshot context is stale/noisy | VisualContextCoordinator, OCRTextHygiene | +| Emoji or macro conflicts with suggestions | InlineCommandCoordinator, feature trigger machine | +| Permission loop or lost grant | PermissionManager, PermissionGuidanceController, app identity | +| Settings/onboarding window issue | SettingsCoordinator, WelcomeCoordinator | + +When a change crosses several rows, keep ownership at these boundaries rather than teaching one +coordinator to perform every step itself. diff --git a/Cotabby.xcodeproj/project.pbxproj b/Cotabby.xcodeproj/project.pbxproj index 618c269b..4b3e274a 100644 --- a/Cotabby.xcodeproj/project.pbxproj +++ b/Cotabby.xcodeproj/project.pbxproj @@ -7,710 +7,710 @@ objects = { /* Begin PBXBuildFile section */ - 000EBFCBA8CE49537690613B /* SymSpellCorrectorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C850141146422A132B2B3516 /* SymSpellCorrectorTests.swift */; }; - 0160F9D9929465E6B6A3385F /* OnboardingTemplateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28B7EB84781C0ED57844585E /* OnboardingTemplateTests.swift */; }; + 0133007DFD6B5160D8992FF6 /* GhostSuggestionLayoutTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D77599EFB08E1013FAED19B7 /* GhostSuggestionLayoutTests.swift */; }; + 0144ECDA06A8BDEFBB8DACE3 /* RuntimeBootstrapModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DF8AA184C5F9CFFDF97A070 /* RuntimeBootstrapModel.swift */; }; 0187EAA1D37B92DD5B264016 /* PermissionDragSourceView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D00A031C0D9CF2A7A2330D9 /* PermissionDragSourceView.swift */; }; - 021197C88AF19DEA715C849B /* FileLogHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE8C2569A8217EE9BD3B197F /* FileLogHandler.swift */; }; - 029B10EE4D659BAAF2C48FBE /* EmojiPopularity.swift in Sources */ = {isa = PBXBuildFile; fileRef = E27B962C66727776D00069DE /* EmojiPopularity.swift */; }; + 01A059CD42ADA031B4EB2D8F /* BrowserDomainTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 952BA2A01E31BC4E74B7736C /* BrowserDomainTests.swift */; }; + 01CDBE7607A9F9F85F87AFF0 /* PerformanceMetricsStoreTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EF5B128907702161F59D236 /* PerformanceMetricsStoreTests.swift */; }; + 021084DE49BDB797C67EA100 /* SuggestionTextNormalizerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A520C43E88BA7D3CCF0E961 /* SuggestionTextNormalizerTests.swift */; }; + 02A837BD3861FD72B3E99D0F /* BaseCompletionPromptRendererTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 612CA2988BF19FAE0114165A /* BaseCompletionPromptRendererTests.swift */; }; 02DA43985CDAE6859014F14F /* SuggestionOverlayPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D598CC3134879999D567455 /* SuggestionOverlayPresenter.swift */; }; + 02ECD5C9C5FE7B4EB62ABCAF /* FileLogHandlerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C57BCCAF434D44772948B696 /* FileLogHandlerTests.swift */; }; 02FE7E7D0CC26AB67307D6D3 /* ru.txt in Resources */ = {isa = PBXBuildFile; fileRef = D8C2663427BC5219EA415D00 /* ru.txt */; }; - 0333B3CE8F189DD1BEC4AD26 /* MenuBarSections.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83A810F9D28A18BA6F2066C7 /* MenuBarSections.swift */; }; - 0431AE1DBEE36C90C7F39C19 /* CustomRulesCatalog.swift in Sources */ = {isa = PBXBuildFile; fileRef = E43E587E421AF544A8300CE4 /* CustomRulesCatalog.swift */; }; - 046C133967B32BBF9205EBB1 /* LLMIOFileHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D610FCA3A97249DCCE7D0B8 /* LLMIOFileHandler.swift */; }; + 03848218E1069BA349B9C931 /* InsertionStrategySelectorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EA8ECB565875395AA51E328 /* InsertionStrategySelectorTests.swift */; }; + 039BC6D14C80C15841FE8019 /* OnboardingTemplate.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECF1C918E49607E99AE50C80 /* OnboardingTemplate.swift */; }; + 03FBB478CF7C51BDFB9AEB6D /* ScreenTextExtractorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 445BDC778CCC14AC909D659D /* ScreenTextExtractorTests.swift */; }; 0479478CBE8D5387119C3E35 /* OpenAICompatibleSuggestionEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD5611C5D712701A8B10C731 /* OpenAICompatibleSuggestionEngine.swift */; }; - 056EA46914B45722D19D438E /* HardwareCapabilityProbe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41BBD5A4BA08CABE77860886 /* HardwareCapabilityProbe.swift */; }; - 057CEA7858012C1501F1785C /* MarkerSelectionSynthesizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = A863F41C0C03D7B4AC5DC002 /* MarkerSelectionSynthesizer.swift */; }; + 050750A0343235F426D8B47B /* ScreenshotContextGeneratorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 023BA8AA7DF3F8A45F9CE8FA /* ScreenshotContextGeneratorTests.swift */; }; 05CC25E51682528CE2E73446 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = BC4F887528AE74AC0DD30314 /* Assets.xcassets */; }; 0609E4F29F537530A49C6A50 /* FocusSessionScopedCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E504DABB83411B3FA0B8DC5 /* FocusSessionScopedCache.swift */; }; - 06A310C087B460289B5ACCFE /* BundleVersion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01D84EED1A6A711F39DEA18F /* BundleVersion.swift */; }; - 06B7E7339877B334B28BE2D3 /* TypoGate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8412FE2BAC406421248A03B /* TypoGate.swift */; }; - 06CFA03207FF92EB272A66F2 /* CaretLinePosition.swift in Sources */ = {isa = PBXBuildFile; fileRef = D77364C1AF183EF1C0A4074D /* CaretLinePosition.swift */; }; - 0777169DC861BD87C4C1D729 /* TextLayoutCaretEstimator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8BF8DC1860CCF0DFA3A3DFD7 /* TextLayoutCaretEstimator.swift */; }; + 06358FF43FF44F773CCC6881 /* StreamedGhostTextPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2572996D6A44E20E2C0F9060 /* StreamedGhostTextPolicy.swift */; }; + 07639673B5A52D2075A9ED57 /* VisualContextModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A51B1559F4CE6728D39C959 /* VisualContextModels.swift */; }; 078FDE669437D756678E9AB7 /* SettingsRowLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 907549CB913B40C28B953A5D /* SettingsRowLabel.swift */; }; - 07D046D406411ED85AC5758A /* InputMonitorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BAC01317B0B68E3C4125E421 /* InputMonitorTests.swift */; }; - 07E50A9ECCE55072DA311F8F /* BundledRuntimeLocator.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA33F5FFAC5B99384E15CE3E /* BundledRuntimeLocator.swift */; }; - 08208001C5439ED68EA2C28D /* SettingsAttentionEvaluator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A02336442BB735EE2E8D064 /* SettingsAttentionEvaluator.swift */; }; + 07CA86AE733561B277AEF1DE /* FoundationModelAvailabilityServiceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A73AF6E8961EC168FA6DDD2D /* FoundationModelAvailabilityServiceTests.swift */; }; + 07E54011F501E14AC15DE2B7 /* OnboardingTemplateFeatureList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7174EF88BA41ACC0A74CA582 /* OnboardingTemplateFeatureList.swift */; }; + 085BB87581DFFA260A630E24 /* CotabbyBrand.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3C1C9A9BF1F74C16E4401EC /* CotabbyBrand.swift */; }; 085C64A7C11A728CFA2A6D57 /* WelcomePersonalizeStepView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB4548AF1ED25F574CCFA680 /* WelcomePersonalizeStepView.swift */; }; - 087EAFD68591401E870EFEC3 /* OnboardingTemplateFeatureList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24F613F0E2F7046E6532A09C /* OnboardingTemplateFeatureList.swift */; }; - 08A161D7775D09D116E48F6D /* SuggestionEngineModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADBE3E6CC585C1683787C877 /* SuggestionEngineModels.swift */; }; + 089B6C0BD99F2B6C4FF9D7EC /* SpellingDictionaryPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36FEDE8C3BE5E3C5E26989AE /* SpellingDictionaryPicker.swift */; }; 08A76C831813F9D5CEC578E0 /* frequency_dictionary_en_82_765.txt in Resources */ = {isa = PBXBuildFile; fileRef = 99FBB636008490B66CF26772 /* frequency_dictionary_en_82_765.txt */; }; - 0933A62F9B9AECEEA95BBA29 /* SuggestionCoordinatorInputTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98E25C90F99356EB5E249225 /* SuggestionCoordinatorInputTests.swift */; }; + 08EF35590D0C64D0D3FBACFE /* SuggestionSessionReconcilerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA1F9C5D85651740CC51B47F /* SuggestionSessionReconcilerTests.swift */; }; 094DE1CA4A821D722F173F9D /* SuggestionDebugLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 003594B09C83EF2DF35577D5 /* SuggestionDebugLogger.swift */; }; - 09FD133AFEFD8C08E7A9969D /* SymSpell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E3B1232C4BE8072A5183F9C /* SymSpell.swift */; }; + 09B092E8A682D127FC9872A7 /* HuggingFaceAPIClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D6D4D7CAD20C94DF9EF21D2 /* HuggingFaceAPIClient.swift */; }; 0A08A88B773845EF9A27DF0F /* SymSpellCorrector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12E1E72C09460390583D98D1 /* SymSpellCorrector.swift */; }; 0A15FAD03A93D57372D267E0 /* VisualContextCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = A854CAFB1F557BC4CAED8819 /* VisualContextCoordinator.swift */; }; - 0A2DDD946654076675AC0FC6 /* LanguageCatalog.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF4BB93056F291FD24EFAD22 /* LanguageCatalog.swift */; }; + 0A2D9EC761FDAEF15F547C4E /* ScreenFrameReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B49898B64D4DB50736CBC46 /* ScreenFrameReader.swift */; }; 0A3443AEE6540F11E5E6BF8F /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3E8E86A14090BC7BD13BA76 /* AppDelegate.swift */; }; + 0A4528A5D6D83BD0D8A56854 /* EmojiSynonymCatalog.swift in Sources */ = {isa = PBXBuildFile; fileRef = E38190E9916A96736E6769C2 /* EmojiSynonymCatalog.swift */; }; 0A658BF137DBD0898E40B87F /* AcknowledgementsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B7A28471B8526C2693FFF65 /* AcknowledgementsView.swift */; }; - 0AF568AB234033BA2DE4CAA7 /* SuggestionModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 386C98FFCF76EC1C8C7E82BB /* SuggestionModels.swift */; }; - 0B378201616831626DEC3AB6 /* MacroReferenceSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64442042F5B57CB0A701DA85 /* MacroReferenceSheet.swift */; }; - 0B6E28D1CBDF657F71548A3C /* EmojiPickerControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62BD2ADED33249F5BA53D0AD /* EmojiPickerControllerTests.swift */; }; - 0BD3D1CA74CF6CC53BF85153 /* ScreenFrameReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5484C8A04B9C00CF79D589EB /* ScreenFrameReader.swift */; }; - 0BEBB33EB75B59EE83C6FE44 /* MenuBarPopoverDismisser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44595B534DD7323F0AD60825 /* MenuBarPopoverDismisser.swift */; }; + 0B7C1A4F515F63462CCCE9EA /* HuggingFaceAPIClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D6D4D7CAD20C94DF9EF21D2 /* HuggingFaceAPIClient.swift */; }; + 0C0087684909C4A4F067BA9B /* OCRTextHygiene.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7736E6B390C822F91CC1DA99 /* OCRTextHygiene.swift */; }; 0C06CAD62975E87B2C852191 /* ScreenTextExtractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59E299BE2E9D42A33D5D2F5D /* ScreenTextExtractor.swift */; }; - 0C98ECB5BCEBA72C693AC1C9 /* SuggestionTextNormalizerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B55A4362AB7F0528C661C4C /* SuggestionTextNormalizerTests.swift */; }; 0CD30EF91DFB6D95D2964C3F /* SettingsIconTile.swift in Sources */ = {isa = PBXBuildFile; fileRef = E17AAA3C022A8AE39FACAAD5 /* SettingsIconTile.swift */; }; - 0D15CBF45EB1DB725B9F1A6A /* EmojiQueryRunTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75396860978E81EFAA506CD4 /* EmojiQueryRunTests.swift */; }; - 0D8241CD31942A25EC4E0EE4 /* CotabbyDebugOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7B2D34A6F3AC9DFD61350F7 /* CotabbyDebugOptions.swift */; }; - 0DDC0CFF5558A8F4355836B2 /* OverlayController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F308F6E274CC645E27CB651F /* OverlayController.swift */; }; - 0E4009CFC86608F055909967 /* PerformanceMetricsStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 979A7867966180A545BB44C4 /* PerformanceMetricsStore.swift */; }; - 0ED2E5A4C1F80E3B5B767596 /* MenuBarStatusLabelView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD42C7E2852F59BEF7972663 /* MenuBarStatusLabelView.swift */; }; - 0F3267956257401F39386773 /* SuggestionOverlayStabilityGate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2F95847D76893C8A5B504B4 /* SuggestionOverlayStabilityGate.swift */; }; - 0FCBF2250722780E46A92EE6 /* InputSuppressionControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01F583E92B0A78212B330E6E /* InputSuppressionControllerTests.swift */; }; - 0FF600435A2EFA9437E36B6F /* EmojiVariantResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A8414BEB7E34F57607E37FE /* EmojiVariantResolver.swift */; }; - 1003373E13779882503C0E9D /* DisplayCoordinateConverter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74BD1D4DB27D5D96D1E06096 /* DisplayCoordinateConverter.swift */; }; - 1059A308A31A94576FF29CF0 /* EmojiRecents.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E72A3972E15749337539C2D /* EmojiRecents.swift */; }; - 108C109E767888DEB2791F8E /* EmojiUsageModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC48B188C6E6E263B876621D /* EmojiUsageModels.swift */; }; - 111BEFF15FEF2CD3DED887A5 /* HuggingFaceSearchService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F426127917FCB1096134732 /* HuggingFaceSearchService.swift */; }; - 122D005AEDDD4D3EADEB0B53 /* OpenAICompatibleAPIClientTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2CD766561AE027DF0BD341A /* OpenAICompatibleAPIClientTests.swift */; }; + 0CF057842A15F79FB3C69462 /* ModelDownloadManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 050DC9D858A124FD1CFA4D99 /* ModelDownloadManager.swift */; }; + 0D2CAE170E355D2729FDD9C4 /* SettingsSearchRanker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57B29DAC600626783649475A /* SettingsSearchRanker.swift */; }; + 0DE687D08BE8AA33F0A91787 /* TokenCountEstimatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9AA97052545B05BA82450A6D /* TokenCountEstimatorTests.swift */; }; + 0E6692D2A7AEEDF72FCF1AE2 /* ExtendedContextTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA0447A27B293394D9379C48 /* ExtendedContextTests.swift */; }; + 105187F185A579BC67CA2A93 /* AXHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D1A7D938F633C6EE094F7 /* AXHelper.swift */; }; + 1104ABD01283774EDF249EF0 /* LLMIOFileHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56A2F75C66BECA61A722D3FB /* LLMIOFileHandler.swift */; }; + 11639AA485DDC2FA256F119D /* EmojiCatalog.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CC9E0602050256E3B0B08B2 /* EmojiCatalog.swift */; }; + 11C548C2B50D9B27BD1B7293 /* SymSpell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A2E9AF341F8F7043D5344B20 /* SymSpell.swift */; }; + 11D3A5C8DA17BCDB79969FC4 /* FileLogHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C90C9EBCB70327D215EAE07 /* FileLogHandler.swift */; }; 12995E5DDB11E3395E6AF82F /* ShortcutsPaneView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB630F9814388203DD1CA2EC /* ShortcutsPaneView.swift */; }; - 1450746C690B3D98203B71EC /* DeviceInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29ED42C4BDD0C521101AF95E /* DeviceInfo.swift */; }; + 12A6C1479CC03A148E93391F /* SuggestionOverlayStabilityGate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EE141D265E09DA9F95C4584 /* SuggestionOverlayStabilityGate.swift */; }; + 13EB210DA377922CBC38E69C /* SystemMetricsStoreTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 247AD238E2DD01C8DCAED598 /* SystemMetricsStoreTests.swift */; }; + 1415DED5362F6F343AF63123 /* ControlTokenMarkers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33D4F378E5C70CAF7827A90A /* ControlTokenMarkers.swift */; }; + 1419979A0649B00DACF75C61 /* OCRTextHygieneTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64B0584FA16465453F04CA8C /* OCRTextHygieneTests.swift */; }; 14611368270D611A2D5DC67E /* SettingsRowLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 907549CB913B40C28B953A5D /* SettingsRowLabel.swift */; }; - 14B2492F1208888C0C3F8804 /* SpeculativeAcceptanceContextTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA5B101C75C5D3972E33E8E0 /* SpeculativeAcceptanceContextTests.swift */; }; - 14C55DC5096F003BD3D2917D /* EmojiPopularityTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 023144451BB30F981D1F9EE6 /* EmojiPopularityTests.swift */; }; - 14D77F0B8A195AC2FA8D24A9 /* MirrorOverlayLayoutTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC83D14A7557BC0196E59007 /* MirrorOverlayLayoutTests.swift */; }; - 156E6AB3D24134EEC29FDB93 /* FocusSnapshotResolverSelectionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA705EDFE1C41294F0E381F1 /* FocusSnapshotResolverSelectionTests.swift */; }; - 157A55EB796BEB7819B90D5D /* ClipboardRelevanceFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3A2AC525DC664DB540D4F19 /* ClipboardRelevanceFilter.swift */; }; - 15D4C75B6BA901E110AC929F /* InlinePreviewPanelController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AAEFF8BAEC9168CADEDD4757 /* InlinePreviewPanelController.swift */; }; - 15FA56CEF6FB5FF54C2FBA6F /* PermissionAndContextModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7F42112F14026E6253BB865 /* PermissionAndContextModelTests.swift */; }; - 1671E0A3C8D6DF30C5AD7F9F /* SuggestionFadeInPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 764EE0693994E2E126E7FC77 /* SuggestionFadeInPolicy.swift */; }; + 14AAE7F7E381CE011501121D /* DisplayCoordinateConverter.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3096225612BC53296FB6931 /* DisplayCoordinateConverter.swift */; }; + 14AB92F33FAF52D2BCE589FB /* LanguageTagsEditor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85E6C2EBE2B63C2DF3CC4073 /* LanguageTagsEditor.swift */; }; + 1536BBBDFC274C414DEB1420 /* WebContentFieldDetectorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 601C120D3DB41535E1D90E24 /* WebContentFieldDetectorTests.swift */; }; + 15D7C2CFE930F62B88F07EA7 /* SymSpellCorrectorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3FE69F822DE85087BCA01DF5 /* SymSpellCorrectorTests.swift */; }; + 15F3DFEF14B748F5083A2517 /* MacroReferenceSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7F3F983901FC3648076B23D /* MacroReferenceSheet.swift */; }; 1681C0F22323FB1156579D99 /* AGPL-3.0.txt in Resources */ = {isa = PBXBuildFile; fileRef = 6F0EE728C0B1A7AD6B19CD0C /* AGPL-3.0.txt */; }; - 175C4FA56C29DEE58C2D4D7E /* SuggestionSettingsModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86460C747AA883FDE756BDBA /* SuggestionSettingsModel.swift */; }; - 18382D1919D90E3C1EE143C2 /* AppSurfaceClassifierTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C451E144D220D5C63372A8C0 /* AppSurfaceClassifierTests.swift */; }; - 18680D0D66469A2954A50B6C /* SuggestionQualityMetricsStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81718CA62FBC775A6CEBCED1 /* SuggestionQualityMetricsStore.swift */; }; + 16CCE176C5C31CB180D131AD /* TextLayoutCaretEstimatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5125EBB70F6E32CBD46506C0 /* TextLayoutCaretEstimatorTests.swift */; }; + 16E1A22AA7F4827E69C7F2CE /* SuggestionSettingsStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8AB17696CE79982039061F29 /* SuggestionSettingsStore.swift */; }; + 1816D3D625F561209590D45D /* TagChip.swift in Sources */ = {isa = PBXBuildFile; fileRef = A04DFC5BD7821D73DA21D7DB /* TagChip.swift */; }; + 188DE63AA5C77C740781A1AF /* RuntimeBootstrapModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DF8AA184C5F9CFFDF97A070 /* RuntimeBootstrapModel.swift */; }; 1899BC5A35DC96B4D04B18A5 /* es.txt in Resources */ = {isa = PBXBuildFile; fileRef = 0B6816DF5D33863F966240B4 /* es.txt */; }; 18F8E078D0CE6B3AF2C6AFFC /* WelcomeHeroDemo.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6FE1277859A1402F8FB7E4E /* WelcomeHeroDemo.swift */; }; + 19284043DCEDC562269991EE /* SymSpellTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CFB3F1AA4007F0B44CA70E6F /* SymSpellTests.swift */; }; 19386985A3A91D0843092086 /* AboutPaneView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3FA53BBC3D81503C1D17477 /* AboutPaneView.swift */; }; - 19CA1BF8B508E0E219EF4485 /* SuggestionEngineModelsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 470A7DAE3D6A2C873B395AE3 /* SuggestionEngineModelsTests.swift */; }; - 19CB55B62977376E9AE8D428 /* VisualContextStartCoalescer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F01FAC4F57EB08471521196 /* VisualContextStartCoalescer.swift */; }; - 19E59FD9A0707751D30D93E3 /* OpenAICompatibleEndpointModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1B68641C8203AEB8CBE6D98 /* OpenAICompatibleEndpointModels.swift */; }; + 19449988F10AD289E2682F04 /* SuggestionSettingsStoreTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35C0B587D81D87ACB952C95E /* SuggestionSettingsStoreTests.swift */; }; + 1972708E96F0643D5E434D6F /* SuggestionCoordinatorTestSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = D84A5FB8D9F0333B0B8E9C5F /* SuggestionCoordinatorTestSupport.swift */; }; + 1A3C48417F284B8DA55F4FEC /* LanguageTagsEditor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85E6C2EBE2B63C2DF3CC4073 /* LanguageTagsEditor.swift */; }; 1A4A2FCA8F08258A8A70A057 /* LGPL-3.0.txt in Resources */ = {isa = PBXBuildFile; fileRef = 7513810E78F3C94FE972EB07 /* LGPL-3.0.txt */; }; - 1AAB8B5A80EBB63948674DE8 /* OpenAICompatibleEndpointModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1B68641C8203AEB8CBE6D98 /* OpenAICompatibleEndpointModels.swift */; }; - 1AEA5D46AFB9095716406788 /* ApplicationBundleMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = 352AF5B2834FEE1F597394E4 /* ApplicationBundleMetadata.swift */; }; - 1B3FFCB9A979F49BF86EAAD4 /* ScreenshotContextGeneratorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2BFD19A159680A495EE02FD /* ScreenshotContextGeneratorTests.swift */; }; - 1B62024FC44DCAC1E4B7E048 /* FocusPollBackoff.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09FADF683BE7B3558377FA76 /* FocusPollBackoff.swift */; }; - 1BDEC75125ADFCD67F3C406D /* SpellingLanguageResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0348A7053E5683C68879A71A /* SpellingLanguageResolver.swift */; }; - 1C164EC9452EFB38173D227E /* TokenCountEstimator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1BA30E71C21C77BB6EA4C166 /* TokenCountEstimator.swift */; }; - 1C267B67EA61527B74C9D051 /* KeyCodeLabels.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAAE6B395FAB604DF059280A /* KeyCodeLabels.swift */; }; - 1C46642846D8FD1475AA5CCF /* RequestIDTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1909DF39C47A113382BB53B6 /* RequestIDTests.swift */; }; - 1D1C6FF0B8F50AC14A1000F4 /* SentenceBoundaryClassifierTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D7360A6D4261989A66658ED /* SentenceBoundaryClassifierTests.swift */; }; - 1D424A103EF7BFE45518F45E /* GhostFontMetricsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53E41890930AA80910E461EF /* GhostFontMetricsTests.swift */; }; + 1AB037C6DC95769F4765B5CA /* SettingsAttentionEvaluator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79AAAB1C46A0E5A9C6FC7D3D /* SettingsAttentionEvaluator.swift */; }; + 1B66CA97E53D1ADB9F4E9A4A /* InputMonitorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB36177FC6C26F5E4CD1AD6E /* InputMonitorTests.swift */; }; + 1B80604D77F1AF1DF96DDD45 /* MarkerSelectionSynthesizerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F7E66CFA5AB733CE1F793A8 /* MarkerSelectionSynthesizerTests.swift */; }; + 1C6B2EBC77B508A3FF43E994 /* FocusSnapshotResolverLiveTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC8F0BAC452D20743D316FB6 /* FocusSnapshotResolverLiveTests.swift */; }; 1D5389E9562AF6315BFCDCE1 /* NOTICE.md in Resources */ = {isa = PBXBuildFile; fileRef = 66CF2A70D4699421AC9BD849 /* NOTICE.md */; }; 1D54C941ED086C6427CFD773 /* MacroEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 974A8708D2006767BD76862A /* MacroEngine.swift */; }; - 1DF03DC12D45C22753F683BC /* SymSpell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E3B1232C4BE8072A5183F9C /* SymSpell.swift */; }; - 1DF1A9DFF50E9219875E24FF /* SuggestionPauseModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2FDC5884B07B19B9B4917A6 /* SuggestionPauseModels.swift */; }; - 1E0796CADFB4F561EC94602A /* HuggingFaceModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = A520809E71697E3BB9A8139C /* HuggingFaceModels.swift */; }; + 1EB5B904DB17460D839AD57F /* SpellingLanguageResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61CCBF33813CE5CD3B9EA37B /* SpellingLanguageResolver.swift */; }; 1EB90D3D8A5BA028B86E4D9F /* SettingsContainerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0CE9AB1286367BA2E82392 /* SettingsContainerView.swift */; }; - 1F714771EE793A5AF92F1E2B /* ModelDownloadManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51020F8CD58338BD643FBF63 /* ModelDownloadManager.swift */; }; + 1ED8785EB680045FF13270B4 /* MacroTriggerStateMachine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50CDB11D96F343194B390321 /* MacroTriggerStateMachine.swift */; }; + 1F12149EA676E69B75BDBFDA /* SuggestionAvailabilityEvaluator.swift in Sources */ = {isa = PBXBuildFile; fileRef = AADD165EBA2FE4C66F5BA885 /* SuggestionAvailabilityEvaluator.swift */; }; 1F8CC88AFFE67C08944CF506 /* WindowScreenshotService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77B0121E7BB173F8A2B0B108 /* WindowScreenshotService.swift */; }; 1FEB7ADDE569DE8C6E13920B /* GPL-3.0.txt in Resources */ = {isa = PBXBuildFile; fileRef = BEF60972B2D88E4EC4841AB0 /* GPL-3.0.txt */; }; + 2089CC6E33B24D5CD3DD1E57 /* DownloadOutcomeClassifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F324C645A4E53FB6E90061A /* DownloadOutcomeClassifier.swift */; }; 2089E4C64C1BFDCDA9F2F721 /* ContextPaneView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89497C35D1825BAE9625EE06 /* ContextPaneView.swift */; }; - 210EEE9D094586286EDD89E8 /* ControlTokenMarkers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CC2D6472ACD377FD73A5801 /* ControlTokenMarkers.swift */; }; + 21187878C7390AD639717B8F /* PromptSectionBudget.swift in Sources */ = {isa = PBXBuildFile; fileRef = AAE89BEAF57DF3A287DF56F1 /* PromptSectionBudget.swift */; }; 2160F8CC328D511EDA32301E /* es.txt in Resources */ = {isa = PBXBuildFile; fileRef = 0B6816DF5D33863F966240B4 /* es.txt */; }; 2197B68F1E4D0C3497DAC061 /* LlamaSuggestionEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE04620C905041680116BE80 /* LlamaSuggestionEngine.swift */; }; + 226C258F185E2E71518F4ABB /* OnboardingTemplateRecommender.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F86D2716CBE36970BB462E8 /* OnboardingTemplateRecommender.swift */; }; 227D70C89AE20DD5A3AC7D8B /* PermissionDragSourceView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D00A031C0D9CF2A7A2330D9 /* PermissionDragSourceView.swift */; }; - 22DF59FD6F3B83B092A6F5ED /* WordCountFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 815F2ABAF6AB75DA3AFBBCEF /* WordCountFormatter.swift */; }; - 2314C82FAAA81EB58BFE204D /* ClipboardRelevanceFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3A2AC525DC664DB540D4F19 /* ClipboardRelevanceFilter.swift */; }; 231905D5C463FA994CACFA77 /* AppsPaneView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9C1C921A1CDA2ADFC39EA01 /* AppsPaneView.swift */; }; - 23377D6411E1E5F09056285D /* OnboardingFlowSteps.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2578311F4ABCB3CDFF795A86 /* OnboardingFlowSteps.swift */; }; 23676A1A7099AC04091FD6A3 /* EmojiPaneView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A28B4A4368DB33C25E3AB5F3 /* EmojiPaneView.swift */; }; - 2402DC57AE2BCF6A686D30ED /* FocusModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C383AE85B971A9605787358 /* FocusModels.swift */; }; 2420363A5F652F51693A018B /* ScreenshotContextGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B84BAE361626891F19DC9DB /* ScreenshotContextGenerator.swift */; }; + 24A2D498222EB81B64EC36C9 /* MenuBarPopoverDismisser.swift in Sources */ = {isa = PBXBuildFile; fileRef = DADE6EEA8248DA6700E11844 /* MenuBarPopoverDismisser.swift */; }; + 24A393E033AB22A1C9951770 /* DecodeStopPolicyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81D7F428477976398CFC5CCF /* DecodeStopPolicyTests.swift */; }; 24A56B941C9354D4B10F2148 /* ru-100k.txt in Resources */ = {isa = PBXBuildFile; fileRef = 6CF1FBAABEF545B620AF8D78 /* ru-100k.txt */; }; + 24D5BE34BE7B7B72A93C6A9F /* BundledRuntimeLocator.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1AB5EBB44EE64EB3EB1426F /* BundledRuntimeLocator.swift */; }; + 24E0F4F0EC9148FB409FD112 /* InlinePreviewView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76BC705A82669AEFBC704F59 /* InlinePreviewView.swift */; }; + 253F6955921E8EA38A1D022B /* CompletionRenderModePolicyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B33E640B7FF8B1E8D53E7D85 /* CompletionRenderModePolicyTests.swift */; }; 25750F599635ED38E61517A3 /* RandomMacroEvaluator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E3EC87078D3A4C21DB3252C /* RandomMacroEvaluator.swift */; }; - 257C2A5D299365C1D98527A8 /* SpellingLanguageResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0348A7053E5683C68879A71A /* SpellingLanguageResolver.swift */; }; 258EAFB0292290C88520E915 /* SystemSettingsWindowLocator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5976600F428C1265121D4C0C /* SystemSettingsWindowLocator.swift */; }; - 258EC4BDDBD31A4509B668AE /* SuggestionAnchorCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = E99C99D2782EAF0492F964EF /* SuggestionAnchorCache.swift */; }; - 25D4FC8D191A50F63E6391F9 /* ModelAndPresentationValueTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03766F6253FF17639230C0F6 /* ModelAndPresentationValueTests.swift */; }; - 25F91CEF38400FD1ADB6B1AF /* CompletionRenderModePolicyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D504BEB224E0C176F5FCFF6E /* CompletionRenderModePolicyTests.swift */; }; 261FA692D19C48E53D6999BC /* DeepGeometryWalkThrottle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 684737E62EE6495A71344923 /* DeepGeometryWalkThrottle.swift */; }; - 266DB36F6BD7AD1038F13E39 /* InputModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F34AE24BB7C99D66E1F3904 /* InputModels.swift */; }; - 26A63FD59B47FB93A76D199F /* EmojiPickerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3384FD33776960103D6E22A9 /* EmojiPickerView.swift */; }; - 26B8841D2008F8A74C577A58 /* RuntimeBootstrapModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60629DFE309C1A4BD8A7FB3B /* RuntimeBootstrapModel.swift */; }; - 26C5604C3CEF43FC755FD24E /* EmojiUsageStoreTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 224438039A86E5619294EAF7 /* EmojiUsageStoreTests.swift */; }; - 26E0331E9E2F92FAE531BDEE /* ActivationIndicatorController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D84D4528EEC9EFEB8AE8E318 /* ActivationIndicatorController.swift */; }; - 2784A3A838FF122678547ECA /* GhostFontMetrics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E6439213F2A273702A6E26B /* GhostFontMetrics.swift */; }; - 279F017530A86AF62EB17918 /* EmojiSynonymCatalog.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0846DE4E0293AF13890620D3 /* EmojiSynonymCatalog.swift */; }; + 26EA96EB13B94A68276FA15E /* MenuBarRecoveryPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E267F3BB7FC8DEAEB5E841B /* MenuBarRecoveryPolicy.swift */; }; + 2786CC95BFBBF5250397D44C /* EmojiPickerPanelLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = D22CA80189225431804E87B0 /* EmojiPickerPanelLayout.swift */; }; + 27B1A99D61398752863DB251 /* RequestIDTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E80071E4A5D844CEF5B7C487 /* RequestIDTests.swift */; }; 27D4F5CACADE171F142178B4 /* SettingsSidebarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BADB38D0160B47637572FC5E /* SettingsSidebarView.swift */; }; + 27DD6865421158DF5BB7150C /* FocusCapabilityResolverTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B397084B31E549177DDC3F69 /* FocusCapabilityResolverTests.swift */; }; 28198855DD83CDABC02A780C /* AXTextGeometryResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB58035EFFD65B767949BAE6 /* AXTextGeometryResolver.swift */; }; - 2872D907299F79A9A69BBFCB /* EmojiPickerPanelController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 764659D09C3F0E8FBD267102 /* EmojiPickerPanelController.swift */; }; + 281B76BD6E02E93D04AA714B /* CustomRulesEditor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31F8F44FE13E69D4108F4AFB /* CustomRulesEditor.swift */; }; + 2835863F9971E5B4CCF0E816 /* CaretGeometrySelector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81D275EF19CA4133543F8DE1 /* CaretGeometrySelector.swift */; }; + 285B3026E0D911FFFC306696 /* SuggestionTextNormalizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DFA4093ADA92D5E33F1F833 /* SuggestionTextNormalizer.swift */; }; 287FC5401537014F688D92E2 /* SettingsIconTile.swift in Sources */ = {isa = PBXBuildFile; fileRef = E17AAA3C022A8AE39FACAAD5 /* SettingsIconTile.swift */; }; 28D217A96946A2005FCBEBFD /* emoji.json in Resources */ = {isa = PBXBuildFile; fileRef = C379D77029D6E88C8C1B9AF7 /* emoji.json */; }; - 29ABB5488251FD8089D74F51 /* MidWordContinuationPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 357C18383B047F24A531BDCD /* MidWordContinuationPolicy.swift */; }; - 2A53558D66C96E963B23CA11 /* CompositionInputModeClassifierTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC4A3C4BC38793EB11F484F1 /* CompositionInputModeClassifierTests.swift */; }; - 2B1F6B9BD4DEBD7DA4DD9855 /* TextLayoutCaretEstimatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F36111592745117D04C42405 /* TextLayoutCaretEstimatorTests.swift */; }; - 2BE029A192E82E795490DC7F /* BrowserDomain.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD8025E4A296845FC53E660D /* BrowserDomain.swift */; }; - 2C6159231472A849F15BD0AE /* ScreenFrameReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5484C8A04B9C00CF79D589EB /* ScreenFrameReader.swift */; }; - 2CCF87FD35BF2C438EEA606D /* SelfCaptureGate.swift in Sources */ = {isa = PBXBuildFile; fileRef = E68BE6A22BA0D42C8DD9868C /* SelfCaptureGate.swift */; }; + 29E20FF0F413E723D2A526C4 /* DecodeStopPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = C319B4FF652512A69377DD5C /* DecodeStopPolicy.swift */; }; + 2A2C0AA222A33A8B43880661 /* OpenAICompatibleAPIClientTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A47949D77BB2E411F1B81E5 /* OpenAICompatibleAPIClientTests.swift */; }; + 2AF12199E0FD9B802BF35A10 /* SpellingDictionaryCatalog.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25D41CC179EC04093971A0D0 /* SpellingDictionaryCatalog.swift */; }; + 2B355C61C20866199F414EB9 /* PermissionOverlayTracker.swift in Sources */ = {isa = PBXBuildFile; fileRef = E286B9A912808088FDA6B4C4 /* PermissionOverlayTracker.swift */; }; + 2B4049F81730E41A1274E57F /* ClipboardContentDistiller.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2229037BCDF7EFD3D47C15F /* ClipboardContentDistiller.swift */; }; + 2C44C5142ED914BF99A70EC6 /* InlinePreviewView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76BC705A82669AEFBC704F59 /* InlinePreviewView.swift */; }; 2CDF880348D439708BD4F792 /* ru.txt in Resources */ = {isa = PBXBuildFile; fileRef = D8C2663427BC5219EA415D00 /* ru.txt */; }; - 2D32B63CB58FBC5BC2EA7125 /* PopupChrome.swift in Sources */ = {isa = PBXBuildFile; fileRef = 565AB9A1265315C500FE5BDF /* PopupChrome.swift */; }; - 2D93881A6AE7DA50698600A3 /* SystemMetricsStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 807148A920E003DEF8BA6092 /* SystemMetricsStore.swift */; }; - 2DA8DFFE8DF9B6AD71E28417 /* PopupChrome.swift in Sources */ = {isa = PBXBuildFile; fileRef = 565AB9A1265315C500FE5BDF /* PopupChrome.swift */; }; + 2D83CECB0FF076323226449D /* SuggestionSettingsModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D253D06D941F60EDAF112625 /* SuggestionSettingsModelTests.swift */; }; 2DF5A3826AAB99C279EBB8DE /* InputMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = B81DD30EB657368AACE9625A /* InputMonitor.swift */; }; - 2E0FC35AA7D717B978033ED1 /* LlamaRuntimeModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = A804F4DB6FD9BC8C27B2B65F /* LlamaRuntimeModels.swift */; }; 2E3DEB7E89D0146274596F2E /* SettingsContainerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0CE9AB1286367BA2E82392 /* SettingsContainerView.swift */; }; 2E79F18B84807EFEAE20FA35 /* WelcomeKeybindStepView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D1F76146AC25F3B077B1F6D /* WelcomeKeybindStepView.swift */; }; - 2E972FB7E0CF14EE03AA55A3 /* SpellingDictionaryCatalog.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4D9DF8723AF32C058BFACDE /* SpellingDictionaryCatalog.swift */; }; + 2EA1350B599695F472A8F06E /* SuggestionTextColorCodec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7748B9FB3D88C383395CF528 /* SuggestionTextColorCodec.swift */; }; 2EDFE6F33018D2D43D5CB813 /* MacroEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 974A8708D2006767BD76862A /* MacroEngine.swift */; }; - 2EE05B312C990104BE934772 /* GhostFontSizeStabilizerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BF59EE80F3A0143B79740 /* GhostFontSizeStabilizerTests.swift */; }; 2F1E57A89D1DC775E8880297 /* ContextLivePreviewField.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1FAD890FBC2D0351C0E3C60 /* ContextLivePreviewField.swift */; }; - 2F227738D7834B1A7A81D1D6 /* ModelDownloadManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51020F8CD58338BD643FBF63 /* ModelDownloadManager.swift */; }; 2FC40D4BFDD05C2401D7A5E9 /* SuggestionInserter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A3D1125B962CBE0269EEDDB /* SuggestionInserter.swift */; }; - 303652F15C0FE55595669D81 /* SpellingDictionaryResourceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D562A73C7C680F2AA65F9F7F /* SpellingDictionaryResourceTests.swift */; }; + 306836875282844C05C35B2C /* ClipboardContentDistillerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3680E1B8FA712A888F509640 /* ClipboardContentDistillerTests.swift */; }; 30D4728580451C7D3BDF42E3 /* SurfaceContextCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8CF6B7FFBF77B4290F5F2FB8 /* SurfaceContextCache.swift */; }; - 30F3F2B6D13CD583136CD787 /* AXHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC70775535A3428991025AB8 /* AXHelper.swift */; }; - 3112A355E61878A6A6D1FDF8 /* EmojiQueryRun.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDF6A4E9CE93FD53C60E67E3 /* EmojiQueryRun.swift */; }; + 30ECD51B71D7BEF422DD8290 /* EmojiVariantResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 880D641ED480016420D007A0 /* EmojiVariantResolver.swift */; }; + 311445DF836037B2785E1539 /* SuggestionRequestFactoryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 499FA07A48925E79F091D9E7 /* SuggestionRequestFactoryTests.swift */; }; 3124AD2340D4B58AF48A22F3 /* KeyboardInputSourceMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 534F1297DEF3547D0DE56FB2 /* KeyboardInputSourceMonitor.swift */; }; - 314AD8F0FD781CB6DDE4603C /* GhostFontMetrics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E6439213F2A273702A6E26B /* GhostFontMetrics.swift */; }; - 31515DDD173535C4AC777853 /* MirrorOverlayLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54150A507B03221F137D539B /* MirrorOverlayLayout.swift */; }; - 317883210D1D1D5CD654E562 /* ModelFileValidator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C4E5869D103865486AAAEEC /* ModelFileValidator.swift */; }; - 31DCCE980B6708401256D4D1 /* FoundationModelDriftEvalTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D49F3B597374208594861B9B /* FoundationModelDriftEvalTests.swift */; }; - 323500F336AF70C520926383 /* MacroReferenceSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64442042F5B57CB0A701DA85 /* MacroReferenceSheet.swift */; }; - 32A2915FAE21CD9CE818A9D9 /* SuggestionSettingsModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86460C747AA883FDE756BDBA /* SuggestionSettingsModel.swift */; }; - 331208BF9383479A4C596F2B /* OnboardingFlowSteps.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2578311F4ABCB3CDFF795A86 /* OnboardingFlowSteps.swift */; }; - 333C09921443BDDF21A9753D /* SuggestionAvailabilityEvaluator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3609CC88A5280B3AA40414DF /* SuggestionAvailabilityEvaluator.swift */; }; + 32838075CC92556D0BC28791 /* FocusCapabilityResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CEEAA025DC9BD7D38AD78E8 /* FocusCapabilityResolver.swift */; }; + 32A5095C89B598C9A959F435 /* PromptContextSanitizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D182046E27CB170D943E8F86 /* PromptContextSanitizer.swift */; }; + 32C4F7853210DE04044FB363 /* OnboardingFlowStepTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D60AC0AFFF7CEAA24FC617E /* OnboardingFlowStepTests.swift */; }; + 32DD02FCDF43B45C757D82C7 /* EmojiPopularity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4719AA4F4513DB93CC0D1ECE /* EmojiPopularity.swift */; }; + 32E0812CB9ABADB25D906C22 /* BrowserAppDetector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16F8C2297472488862392DEE /* BrowserAppDetector.swift */; }; + 3312972B65F1B98447C59BD6 /* TextLayoutCaretEstimator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A5B87C4C13EAE32813286C7 /* TextLayoutCaretEstimator.swift */; }; + 3451F18F23F2C360F5B71F0C /* EmojiQueryRunTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D49BB108B57BF6A0A28AA5B6 /* EmojiQueryRunTests.swift */; }; + 34692B4809B7E8F0884A5BDC /* SuggestionAnchorCacheTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76B253B10FA2896242B6C26F /* SuggestionAnchorCacheTests.swift */; }; + 346A21884E25B07C338B33C9 /* SuggestionFadeInPolicyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 309B45D197958D1DA2FE4D53 /* SuggestionFadeInPolicyTests.swift */; }; + 35F125C5460AF8423BF737F4 /* SentenceBoundaryClassifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = C231B65BAF20AD33A3C0130C /* SentenceBoundaryClassifier.swift */; }; + 35F1681148A324CBEC797BAF /* MenuBarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DE038A6DF4A16B3EB5CEBD3 /* MenuBarView.swift */; }; 35F6F62A299713660CFB4797 /* SettingsPaneScaffold.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19BE12C28A4AB8A4A58C2FF7 /* SettingsPaneScaffold.swift */; }; - 36312821AEE03E3E62845958 /* FoundationModelPromptRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE7BF162A12703249726F20A /* FoundationModelPromptRenderer.swift */; }; - 36651BFF4917A1E80C667B64 /* SuggestionCoordinatorPredictionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 361D34F219C46FF21AC09B62 /* SuggestionCoordinatorPredictionTests.swift */; }; 3682DBB9DCF6C011F382A1B0 /* SuggestionWorkController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B2D97BAA3618A7D0357AC44 /* SuggestionWorkController.swift */; }; 37625DC44E2228CC897222B7 /* ru-100k.txt in Resources */ = {isa = PBXBuildFile; fileRef = 6CF1FBAABEF545B620AF8D78 /* ru-100k.txt */; }; + 3767E8C175376A784D5B3E80 /* TokenCountEstimator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A502BFB13373D1931B082CD /* TokenCountEstimator.swift */; }; 378EE9C111040353A6335454 /* CurrentWordSpellChecker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 733BF6287BDE599B02A12271 /* CurrentWordSpellChecker.swift */; }; + 3799AE2D7E8DFA464E045CA7 /* TickMarkSlider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1BB42779285A1BA40B7848C8 /* TickMarkSlider.swift */; }; + 37BA67D33AB24150733557A7 /* StaticTextRunWalkThrottleTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F6CECCA06E9B6FE9A1C3C23 /* StaticTextRunWalkThrottleTests.swift */; }; + 37BAD9C6AFAAF99E818D734D /* PromptContextSanitizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D182046E27CB170D943E8F86 /* PromptContextSanitizer.swift */; }; 39332A6824B1935AE3B0D8C0 /* fr-100k.txt in Resources */ = {isa = PBXBuildFile; fileRef = 6DB982BF30B3601F57277776 /* fr-100k.txt */; }; + 3935AEF7D139557677D09318 /* KeycapView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF96999230079A768BEFD0FC /* KeycapView.swift */; }; 39571AB31481959CD5C223AE /* PermissionsPaneView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7113D3373525113CA69E7597 /* PermissionsPaneView.swift */; }; + 3963B60499D83D9363E401BE /* InsertedTextAdvance.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61103A4FEA699AAE0E61D89B /* InsertedTextAdvance.swift */; }; 39836F8D77DA6A4B3E3426FE /* GPL-3.0.txt in Resources */ = {isa = PBXBuildFile; fileRef = BEF60972B2D88E4EC4841AB0 /* GPL-3.0.txt */; }; - 3985F0F2B3178DBB945B1064 /* CompletionRenderModePolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53CF416511099C6818110F01 /* CompletionRenderModePolicy.swift */; }; + 398D5648DD9DB75EDB5B9C08 /* EmojiVariantResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 880D641ED480016420D007A0 /* EmojiVariantResolver.swift */; }; + 39910B6812663A61FC13D6BD /* HuggingFaceSearchService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DF8401D3859F00CC94F8893 /* HuggingFaceSearchService.swift */; }; 39B31DBE07288712A1ACA202 /* OpenAICompatibleAPIClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96C455CB8D11E89CEDA0B3AE /* OpenAICompatibleAPIClient.swift */; }; + 3A35344542DD0AB857C56115 /* MirrorOverlayLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = A11589537F19EDE247697056 /* MirrorOverlayLayout.swift */; }; + 3A3B49975BCF1F648F8C1782 /* SuggestionEngineModelsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B494C76056D9B01D6A3ECABD /* SuggestionEngineModelsTests.swift */; }; 3AB45217DFC86AFC98C374D6 /* WelcomeCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21CB3008986BE7FD2A4D9132 /* WelcomeCoordinator.swift */; }; 3AC2F7F221F7C59242B06DFC /* InputSuppressionController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D1F9CEBAB0F330F8E7B61D8 /* InputSuppressionController.swift */; }; + 3AD39D992243A7AA541A43C8 /* SecureFieldDetector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EE99C84483D3A58D561C61D /* SecureFieldDetector.swift */; }; 3AFDA4A5BE9486A1B367815B /* SettingsNavigationModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D1AC5EC06664F49A6AE2B17 /* SettingsNavigationModel.swift */; }; 3B3E08D1204E85F3776D8853 /* Sparkle in Frameworks */ = {isa = PBXBuildFile; productRef = BAADA69C6172DD7F4A642E93 /* Sparkle */; }; - 3B5F96F9CC6D4D81B470DB2C /* EmojiSynonymCatalogTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF474064973F4752F79BB041 /* EmojiSynonymCatalogTests.swift */; }; + 3B984038F862CD7779EE8456 /* EmojiPopularityTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5769E45DA3B966F0863BBA93 /* EmojiPopularityTests.swift */; }; 3BB16F9F9F84C7A8D87DF044 /* es-100l.txt in Resources */ = {isa = PBXBuildFile; fileRef = 620D393D3B7E687A08FA9446 /* es-100l.txt */; }; 3BC4FCF9A51F57A0A8F6944D /* ArithmeticEvaluator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F7ED2D9D71CFAD9A30977E9 /* ArithmeticEvaluator.swift */; }; + 3C1D10594D37E35313B86BDD /* LlamaEvalScoringTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3ED4E38B9FE65164C3ABEA12 /* LlamaEvalScoringTests.swift */; }; 3C23336EE6F6559857DE92EE /* SuggestionDebugLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 003594B09C83EF2DF35577D5 /* SuggestionDebugLogger.swift */; }; - 3C561CD717064F9250200667 /* PromptSectionBudget.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFCFCCCB69C29A86E726B10A /* PromptSectionBudget.swift */; }; - 3CBBC3BFAC0DC8952EE24EF7 /* BundledRuntimeLocator.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA33F5FFAC5B99384E15CE3E /* BundledRuntimeLocator.swift */; }; - 3CF1A4E39F24917DF0470A7D /* PromptPolicyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4696A84D17890B154533A08F /* PromptPolicyTests.swift */; }; - 3D56E9B3AA378400E2C081E3 /* LlamaEvalScoringTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D4C1EF008B9DFA753D561D3 /* LlamaEvalScoringTests.swift */; }; - 3D82280EFF7F7E9F3FFF45ED /* LlamaEvalScoring.swift in Sources */ = {isa = PBXBuildFile; fileRef = 906011A6C9D66EEBAF3B5CC0 /* LlamaEvalScoring.swift */; }; + 3C338732EE30A6CA45120410 /* BrowserDomain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3871F63C8AF8AD96B14F5067 /* BrowserDomain.swift */; }; + 3CEE19FF81D284368225063C /* OnboardingTemplate.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECF1C918E49607E99AE50C80 /* OnboardingTemplate.swift */; }; + 3CF5E6D50BB799DFD6EBDA92 /* RequestID.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05F173F93FFA5FFBC169DA25 /* RequestID.swift */; }; + 3DC75D1C5EF3AB83E3BC5750 /* SuggestionSubsystemContracts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5652FFF8E718A17D98F87CD0 /* SuggestionSubsystemContracts.swift */; }; 3E1DBB2ABCB2404B59173534 /* SettingsIndex.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34EF2406E7A384F3325AAF9A /* SettingsIndex.swift */; }; - 3E28FFB8F7D91D3B39968E73 /* SuggestionSubsystemContracts.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEB16474A67CE1D210B944C9 /* SuggestionSubsystemContracts.swift */; }; 3E6BD683DA505C9737463890 /* SettingsNavigationModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D1AC5EC06664F49A6AE2B17 /* SettingsNavigationModel.swift */; }; 3E78D03ABA7141D344AB8285 /* he.txt in Resources */ = {isa = PBXBuildFile; fileRef = C9C000E46A1E404932F89C81 /* he.txt */; }; 3EF0A298B5590571B1C37282 /* FieldStyleCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7FBF2B766E728F25899B64E /* FieldStyleCache.swift */; }; - 3F5630CFB7BA40B900E832A1 /* OCRTextHygieneTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EED3CD2BC7B48DF35DEE562 /* OCRTextHygieneTests.swift */; }; - 3F87586426B5EF16B41CE62F /* LlamaSuggestionEngineStreamingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDC034BBCBAC5E7989D4C85B /* LlamaSuggestionEngineStreamingTests.swift */; }; - 3F8CBCBCC45E377DF9ADB216 /* MacroTriggerStateMachineTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22BE47D1DBF6C23151458836 /* MacroTriggerStateMachineTests.swift */; }; + 3F8E5F610B3AD803DDA007CC /* KeycapView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF96999230079A768BEFD0FC /* KeycapView.swift */; }; + 3FA7429EE4BDE4CE0D8E7DA0 /* SuggestionQualityMetricsStoreTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC5CD24D2FF35FD36B8D78DE /* SuggestionQualityMetricsStoreTests.swift */; }; 3FCEF50FDD9EE01AE3711083 /* AXTreeDumpWriter.swift in Sources */ = {isa = PBXBuildFile; fileRef = B27492B04B627DA53BDAD938 /* AXTreeDumpWriter.swift */; }; - 3FF6B7DE34A01C4AB7FA54E3 /* MacroTriggerStateMachine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C201A65A6B040F90C528A3B /* MacroTriggerStateMachine.swift */; }; 400E1A5145FC8C5BA2FAED0A /* DeepGeometryWalkThrottle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 684737E62EE6495A71344923 /* DeepGeometryWalkThrottle.swift */; }; + 403C8D745B0F6133382D78F9 /* EmojiPickerPanelController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 872C8DDC2E86A1C4C4BBD99F /* EmojiPickerPanelController.swift */; }; 4086A1B07488C4D3D43D86C9 /* KeyboardInputSourceMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 534F1297DEF3547D0DE56FB2 /* KeyboardInputSourceMonitor.swift */; }; + 413246B5C9F62DE2565BC154 /* CompletionSeamGuardTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F70588152A9E06C46971ACC /* CompletionSeamGuardTests.swift */; }; 4134ADBE464D00BB748BD9AE /* GeneralPaneView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07480CE96ED0EBD94817C6B1 /* GeneralPaneView.swift */; }; - 418055EF945C17BAEFAB89ED /* CaretRunPlacementTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 421FD16E18622824E038DFB4 /* CaretRunPlacementTests.swift */; }; - 418304869F503EDC6465F8D5 /* SentenceBoundaryClassifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4B56C250DDEF3E81F9DCBD7 /* SentenceBoundaryClassifier.swift */; }; - 4190F8A76196B16ED94D0A55 /* VisualContextModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE97A8169438D593C6C23412 /* VisualContextModels.swift */; }; 41924323814E45BFEDAA5359 /* PermissionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85BF316556FDA64CB8AD07B6 /* PermissionManager.swift */; }; - 41DD807E251E1DC653540EFD /* InlinePreviewView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 033A468451259A3214EECBE5 /* InlinePreviewView.swift */; }; - 429CE592897D8A952F2916C3 /* ConfidenceSuppressionPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1BD71ECC2AE4821B643E0935 /* ConfidenceSuppressionPolicy.swift */; }; - 42D40F37086294D0E58200C5 /* GhostFontSizeStabilizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9458F0820B3161FE9CF1DDAF /* GhostFontSizeStabilizer.swift */; }; + 41F36D158005A69CE87921FA /* PermissionOverlayTrackerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD003D4EBE530DC0E2B87C24 /* PermissionOverlayTrackerTests.swift */; }; + 420C41A28EB788D077719978 /* SuggestionTextColorCodecTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97AA016AC303DB8FC3F54A16 /* SuggestionTextColorCodecTests.swift */; }; + 430EB30535A955C3904C2AD9 /* PerDomainDisableSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F49C55FFF4352A6763BAE1A /* PerDomainDisableSettings.swift */; }; 437F391EBF32AA088A89F710 /* WelcomeKeybindStepView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D1F76146AC25F3B077B1F6D /* WelcomeKeybindStepView.swift */; }; - 43DED8ABEFF9894ED54097A9 /* DeviceInfoTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C49F67B3EEB2F2A577A54085 /* DeviceInfoTests.swift */; }; - 449218D0646AB3745B7E4F30 /* SuggestionEngineRouterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BDA36955CCCFA87C1F67268 /* SuggestionEngineRouterTests.swift */; }; - 4531645066A73971EB2A5FA1 /* EmojiCatalog.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AC3BF78835C8F2C315932F1 /* EmojiCatalog.swift */; }; - 45CE438CC67179356224AFD9 /* FocusTrackingModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6D42CD456B4B3C988B148A6 /* FocusTrackingModel.swift */; }; - 467E2EF8E7B1EC83F60F6A35 /* EmojiRecents.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E72A3972E15749337539C2D /* EmojiRecents.swift */; }; + 443B750143CF2F42371A622A /* MidWordContinuationPolicyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 786EDA0AB3DACFDA1399D6A3 /* MidWordContinuationPolicyTests.swift */; }; + 44FC5FBFEFDADA2B9E6F5C0B /* SystemMetricsStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51833C4853A3117C676CBC63 /* SystemMetricsStore.swift */; }; + 4666D3B3A81CCB4CC68FC395 /* FocusModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B778713FE1C9481CE0DF065 /* FocusModels.swift */; }; + 468477E87700B5D18BCD7A7A /* SuggestionEngineModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3DB1A3F7D6C0FF28717E6D4C /* SuggestionEngineModels.swift */; }; 469626C2EFEDFD6C188941F5 /* de.txt in Resources */ = {isa = PBXBuildFile; fileRef = C648EBB10D7F8E0B904DEC91 /* de.txt */; }; - 46F341472191BC451B6BF6B5 /* SuggestionRequestFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDE858CB1E687E3CEB8FDD5B /* SuggestionRequestFactory.swift */; }; - 4701AB8E93FA78B808824AAD /* CotabbyBrand.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9B27E3D3FD8008CE2C1B616 /* CotabbyBrand.swift */; }; - 47364583344BEA8FDC7178D8 /* DownloadFileRescuer.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4B4A2E2DD6733658EC05BD8 /* DownloadFileRescuer.swift */; }; - 475FB7450EEC3C1B16E66CC4 /* LLMIOFileHandlerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9030FAAB468119A0236284A6 /* LLMIOFileHandlerTests.swift */; }; - 47654BDCFD2DE6D4DE85D7FE /* LanguageTagsEditor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A7CDA90E128350BFF1A9D66 /* LanguageTagsEditor.swift */; }; - 4767E0C7B4997069EA7ADBD7 /* GhostFontSizeStabilizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9458F0820B3161FE9CF1DDAF /* GhostFontSizeStabilizer.swift */; }; - 47EBA122ABE99932326D9E4A /* CompletionRenderMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A03E565A11581FD2150B142 /* CompletionRenderMode.swift */; }; - 47FDCB1CFF8FA171F5EE1A01 /* SelfCaptureGate.swift in Sources */ = {isa = PBXBuildFile; fileRef = E68BE6A22BA0D42C8DD9868C /* SelfCaptureGate.swift */; }; + 46C96D63773ED90E74588315 /* SentenceBoundaryClassifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = C231B65BAF20AD33A3C0130C /* SentenceBoundaryClassifier.swift */; }; + 47123A894E2866177AA9A761 /* OnboardingFlowSteps.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64AEF94A48DF96D6BEE3048C /* OnboardingFlowSteps.swift */; }; + 47D099DE9608A174BB0C3C3F /* OnboardingTemplateFeatureListTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 771EAA74003DAD7D4F3FD199 /* OnboardingTemplateFeatureListTests.swift */; }; + 47EFFC4AEBA2848C933BB77C /* PromptSectionBudget.swift in Sources */ = {isa = PBXBuildFile; fileRef = AAE89BEAF57DF3A287DF56F1 /* PromptSectionBudget.swift */; }; + 484766367056A7103131FAEA /* SuggestionPauseModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17FD5822D3A75266B20A50CE /* SuggestionPauseModels.swift */; }; 4882DF865737ECDC4925F44B /* GeneralPaneView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07480CE96ED0EBD94817C6B1 /* GeneralPaneView.swift */; }; - 49C91DE326A590708D76102A /* BrowserAppDetector.swift in Sources */ = {isa = PBXBuildFile; fileRef = B997EC69E1C65B1E18234221 /* BrowserAppDetector.swift */; }; + 48A2F371756723299597F5A1 /* TypoGate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38FCE0E0C38A776383B11809 /* TypoGate.swift */; }; + 48CE539CB1D41EEE7B9F0819 /* TrailingDuplicationFilterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 800ADA19752797F5704D9B72 /* TrailingDuplicationFilterTests.swift */; }; + 49AD09B2EA8752F20A427F8E /* LlamaSuggestionEngineCancellationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5067AE83AEE957322A47E60 /* LlamaSuggestionEngineCancellationTests.swift */; }; + 4A2AC346A5A857AF551D1598 /* SuggestionPauseModelsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAED667FCDDF3DE1A7EBDDB9 /* SuggestionPauseModelsTests.swift */; }; + 4A69EB9EEA4620D2EC35B9B2 /* ClipboardContextProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B70455CA75A08FAD0F7409 /* ClipboardContextProvider.swift */; }; 4AC255BE2D0CCC67B8882C7A /* WelcomeCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21CB3008986BE7FD2A4D9132 /* WelcomeCoordinator.swift */; }; - 4B2C52C714D04D17ACB70B99 /* SpeculativeAcceptanceContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7EB66904C35A7D8BEF5D2A5 /* SpeculativeAcceptanceContext.swift */; }; - 4B47C5DF1EF4276E0B143AF5 /* PermissionOverlayTracker.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6423D6CC8CC371D2DA899DE /* PermissionOverlayTracker.swift */; }; - 4B4DDB569CAD806F765224DE /* CustomRulesEditor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82F7F7355967725162DF2D1B /* CustomRulesEditor.swift */; }; + 4AF6530E8F770BF434A2492D /* GhostSuggestionLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4084B2F8843FE479F8D347E3 /* GhostSuggestionLayout.swift */; }; 4B54ACE1255873955414CD06 /* PermissionGuidanceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F2C764D29C8D50D0C854FF8 /* PermissionGuidanceController.swift */; }; 4B93D26BACEEA932E92B1A19 /* SettingsPaneScaffold.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19BE12C28A4AB8A4A58C2FF7 /* SettingsPaneScaffold.swift */; }; - 4BFE7446533386550C839F25 /* EmojiTriggerStateMachine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 312C7306D916963F519CE0D9 /* EmojiTriggerStateMachine.swift */; }; - 4C6D8ED0A7B45D2EADF06DA5 /* SuggestionOverlayStabilityGateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDB25ABC4FFB0E63477CDCB0 /* SuggestionOverlayStabilityGateTests.swift */; }; - 4CAFD8F3444FEDC9ACAFF529 /* LlamaRuntimeModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = A804F4DB6FD9BC8C27B2B65F /* LlamaRuntimeModels.swift */; }; - 4CCF29A7EA1B7D37841C135D /* DateMacroEvaluatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 313EDBA60565836F32CEEC10 /* DateMacroEvaluatorTests.swift */; }; - 4D583CB3DA253FB795EE54F9 /* ArithmeticEvaluatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78AFA4586C82E92D7FBF381B /* ArithmeticEvaluatorTests.swift */; }; + 4C140D2AE293CCA81E410481 /* KeyRecorderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDDAB2E5837445522CF66B74 /* KeyRecorderView.swift */; }; + 4CD7DC9BFFA7B5C1B9834214 /* SpeculativeAcceptanceContextTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1480CC831D97E0C55267E0EC /* SpeculativeAcceptanceContextTests.swift */; }; + 4D2C1A0B4FBEF95CBFB9F481 /* ModelFileValidatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0259095D0A3E9B8DC26CB4B0 /* ModelFileValidatorTests.swift */; }; + 4D32F003F78EAAA984E77D83 /* LLMIOFileHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56A2F75C66BECA61A722D3FB /* LLMIOFileHandler.swift */; }; + 4D4F02A7187C324A4B43A974 /* MenuBarStatusLabelView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB051B5B72986C03AB1EE428 /* MenuBarStatusLabelView.swift */; }; 4E2DEFF3CA51E8B160B802CA /* SettingsIndex.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34EF2406E7A384F3325AAF9A /* SettingsIndex.swift */; }; - 4E49547F22DC8663171E3160 /* SuggestionPauseModelsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 224494DA9610B169F1C5BCFF /* SuggestionPauseModelsTests.swift */; }; - 4E7AC9EBE2781AC49E167608 /* EmojiPickerModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E5F074ED7E340E9B9E4C5E0 /* EmojiPickerModels.swift */; }; - 4F369F5284DDCEABF082E59B /* SuggestionAvailabilityEvaluator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3609CC88A5280B3AA40414DF /* SuggestionAvailabilityEvaluator.swift */; }; - 4F38CE1C2602CF4F41323032 /* PermissionOverlayTrackerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12DD19BCE610808F1E38702D /* PermissionOverlayTrackerTests.swift */; }; + 4E7F611941736F526C3B9C1B /* CotabbyBrand.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3C1C9A9BF1F74C16E4401EC /* CotabbyBrand.swift */; }; + 4E8268A5C44B9E5945EBE59D /* AppUpdateManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A7A9C39A0713BD3B442C9AC /* AppUpdateManager.swift */; }; 4F3CE71B97663B8025779F9C /* fr.txt in Resources */ = {isa = PBXBuildFile; fileRef = 5DCA3E46621815A19300365F /* fr.txt */; }; - 4F8EBC5FAE109058D3D2722C /* FocusModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C383AE85B971A9605787358 /* FocusModels.swift */; }; - 4FC42808D61BF110425801ED /* MenuBarPopoverDismisser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44595B534DD7323F0AD60825 /* MenuBarPopoverDismisser.swift */; }; - 4FC52FB28AFC013F000D8FF9 /* SecureFieldDetectorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 474560E524C1D74BAB1570DA /* SecureFieldDetectorTests.swift */; }; - 5009AF59DE8D40A45C0A5C2F /* ControlTokenMarkersTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22707E26E2106DF0E826D32D /* ControlTokenMarkersTests.swift */; }; 507E7BCCD189A64C3F8ECB79 /* HomePaneView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1123AB515110BD0CBA39490 /* HomePaneView.swift */; }; - 50AABC3B54A9CF2879232276 /* HuggingFaceModelBrowserView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78E49BDA7F3A42455C4C5350 /* HuggingFaceModelBrowserView.swift */; }; + 50CDF4E6CD754A74DDCF67FC /* MacroTriggerStateMachine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50CDB11D96F343194B390321 /* MacroTriggerStateMachine.swift */; }; 50E1247BE6A952AB1B12C444 /* PowerSourceMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB235F0DEA53295DAF8B4FA0 /* PowerSourceMonitor.swift */; }; 513066CA00F0E9A5E7358A4E /* PermissionReminderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 168A0DBF62BEF674B96CEBD2 /* PermissionReminderView.swift */; }; - 51C069603DA16830868F1628 /* LanguageTagsEditor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A7CDA90E128350BFF1A9D66 /* LanguageTagsEditor.swift */; }; + 5161D2D6BE6ADEAC91A7F0D4 /* MacroReferenceSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7F3F983901FC3648076B23D /* MacroReferenceSheet.swift */; }; + 51F0B064F34BA3F88196C39F /* CalendarAccessibilityCapturePolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3FE7D19D22434E3E24804999 /* CalendarAccessibilityCapturePolicy.swift */; }; 52518CF0760DFEE9AF7C786C /* SuggestionEngineRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 384FBCF5D7A3A446C5BE2B8D /* SuggestionEngineRouter.swift */; }; - 52F3962FA9F424576D7DB5B8 /* CotabbyDebugOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7B2D34A6F3AC9DFD61350F7 /* CotabbyDebugOptions.swift */; }; - 532283A7651F7E66635F4281 /* SuggestionSessionReconciler.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE0AA0503128B0FC3951D700 /* SuggestionSessionReconciler.swift */; }; - 533091ED7EB306D103DC94DB /* CalendarAccessibilityCapturePolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE2BBC9CD727C19DA94DB105 /* CalendarAccessibilityCapturePolicy.swift */; }; - 53480635FD54DAF41B1F5047 /* ControlTokenMarkers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CC2D6472ACD377FD73A5801 /* ControlTokenMarkers.swift */; }; - 53AA9A9D3555A67F8F31DC65 /* CompletionRenderModePolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53CF416511099C6818110F01 /* CompletionRenderModePolicy.swift */; }; - 53FB56A095BCF0389DAC0A56 /* SuggestionTextColorCodec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CE61E74928C221B8BB261C6 /* SuggestionTextColorCodec.swift */; }; - 543D71217CA218426E9638BF /* CaretLinePosition.swift in Sources */ = {isa = PBXBuildFile; fileRef = D77364C1AF183EF1C0A4074D /* CaretLinePosition.swift */; }; + 53C1D96427CECC559FAC631A /* EmojiTriggerStateMachineTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD72ADA2F88BD3C7E56CD8EC /* EmojiTriggerStateMachineTests.swift */; }; + 53F946FF09038C1C751C6E53 /* FoundationModelPromptRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A051152D3C503A2339BF0FA /* FoundationModelPromptRenderer.swift */; }; + 54091F97C3F64ABB737DC76B /* LanguageCatalog.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE6EA89178F52F6D5B90CBFE /* LanguageCatalog.swift */; }; 54BDF0D9C3DC7175555BD0F6 /* LlamaRuntimeManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = A52D0B550E00EF173A5D157E /* LlamaRuntimeManager.swift */; }; - 54E515A0E75B3902E6497A71 /* EmojiPopularity.swift in Sources */ = {isa = PBXBuildFile; fileRef = E27B962C66727776D00069DE /* EmojiPopularity.swift */; }; - 5560B54FBBEC80F13BCD2054 /* EmojiPickerPanelLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62EDF1199CC5E18BD7651661 /* EmojiPickerPanelLayout.swift */; }; - 5580B5FF786B4F5173E01B20 /* CalendarAccessibilityCapturePolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE2BBC9CD727C19DA94DB105 /* CalendarAccessibilityCapturePolicy.swift */; }; - 55D4E6FB63E3475749E61EB3 /* CustomRulesCatalog.swift in Sources */ = {isa = PBXBuildFile; fileRef = E43E587E421AF544A8300CE4 /* CustomRulesCatalog.swift */; }; - 55E841977534CBFD8B80E95F /* AXTreeDumpWriterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D44745635AF702C96B4225A2 /* AXTreeDumpWriterTests.swift */; }; + 556197D64680237CBCCCDD9F /* OCRTextHygiene.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7736E6B390C822F91CC1DA99 /* OCRTextHygiene.swift */; }; 55EDBFF489D4C31276E2A67F /* PermissionHostApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6ACCB12E4DB32D2F2BEA567 /* PermissionHostApp.swift */; }; 5614E22EAA5F5C37A9E4F7B6 /* LlamaRuntimeManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = A52D0B550E00EF173A5D157E /* LlamaRuntimeManager.swift */; }; - 56611BA0087710277140E9E6 /* DisplayCoordinateConverterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1C5DE0F3FF63545000E2453 /* DisplayCoordinateConverterTests.swift */; }; - 5687320132AD97B4086260DF /* SuggestionQualityMetricsStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81718CA62FBC775A6CEBCED1 /* SuggestionQualityMetricsStore.swift */; }; + 5682F4D4541502E19CC81F96 /* TerminalAppDetectorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA5C840CAF1DCEB561E0C826 /* TerminalAppDetectorTests.swift */; }; + 56D2FDE72FE21C35E8BDD06C /* ActivationIndicatorController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E379AF08CDFF65D6EFC565E /* ActivationIndicatorController.swift */; }; 57511FF4840471BFF3C1E534 /* WelcomePermissionStepView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D27A2CEA7B4E0CDACBC986C2 /* WelcomePermissionStepView.swift */; }; - 576B3FF30FB457EF04F9A715 /* SuggestionTextColorCodec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CE61E74928C221B8BB261C6 /* SuggestionTextColorCodec.swift */; }; - 586B36CD813E1432D0AB1380 /* DecodeStopPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = D12ABBCE23A946C22894945B /* DecodeStopPolicy.swift */; }; - 58AC3193D846FDE88513377D /* BundledRuntimeLocatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18D990E515E1AE4F312F4E95 /* BundledRuntimeLocatorTests.swift */; }; - 59CFE4B314842EDD6EDAC5C9 /* InlinePreviewView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 033A468451259A3214EECBE5 /* InlinePreviewView.swift */; }; - 5A441797D71A880A7482077D /* TextDirectionDetectorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC24FD54860CE6737E65EF65 /* TextDirectionDetectorTests.swift */; }; - 5A6C6B59C3FC821813A7C3E9 /* SuggestionCoordinatorLifecycleTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C2F4A55D7EC8C29D47B45C4 /* SuggestionCoordinatorLifecycleTests.swift */; }; + 57BCDFE786675C9793F3E08E /* ControlTokenMarkersTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D6234872B84ECB56A707945 /* ControlTokenMarkersTests.swift */; }; + 59F1CF8FC41EAFA625D0DEB0 /* AXHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D1A7D938F633C6EE094F7 /* AXHelper.swift */; }; + 5A3EA58C6CE36AD0A7104AEF /* PermissionOverlayTracker.swift in Sources */ = {isa = PBXBuildFile; fileRef = E286B9A912808088FDA6B4C4 /* PermissionOverlayTracker.swift */; }; + 5A88C18CE8A5BAD6307B96C0 /* KeyCodeLabels.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF4D6CEDF032A25EF72D7228 /* KeyCodeLabels.swift */; }; 5ADAA8600CE1A5ED570F889E /* InputMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = B81DD30EB657368AACE9625A /* InputMonitor.swift */; }; - 5B404450B412A6102F514250 /* SuggestionCoordinatorAcceptanceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C375227649689775275AA4B3 /* SuggestionCoordinatorAcceptanceTests.swift */; }; - 5BA36B2042EB7D9ECFE3B92F /* SuggestionSettingsStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 960F3FDBF283347594F30494 /* SuggestionSettingsStore.swift */; }; + 5B3FAD231ECFC7539C33FC1E /* DownloadableModelCatalogView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 415E80FEA7C1330D502CE97F /* DownloadableModelCatalogView.swift */; }; 5BB32CD44020B07AE453A2D6 /* InlineCommandCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D77C99769239E4B33D6B2C9 /* InlineCommandCoordinator.swift */; }; - 5BE53CE921664582F593B7B0 /* FieldEdgeIconIndicatorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBD5FCB8CC56AA6138382B2C /* FieldEdgeIconIndicatorView.swift */; }; - 5C0D3B6012C7412001BE3773 /* BrowserAppDetectorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04D853218B0A77B0CE090828 /* BrowserAppDetectorTests.swift */; }; - 5C119807B84F84B0B1B1C2D5 /* MarkerSelectionSynthesizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = A863F41C0C03D7B4AC5DC002 /* MarkerSelectionSynthesizer.swift */; }; + 5BF39DDF3101BB4C58863C19 /* PermissionModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = D47E1471C110614F0D07E399 /* PermissionModels.swift */; }; 5C5A2751F848F8A11DCF64B2 /* it-100k.txt in Resources */ = {isa = PBXBuildFile; fileRef = 2D8AA55C2B730110E8598F91 /* it-100k.txt */; }; - 5C6B59C2E56A3C4260591095 /* TypoCaseTransferTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2D0FE44138BCA8B2EE05AFE /* TypoCaseTransferTests.swift */; }; 5CB91F89B0E4ACA351621C51 /* WelcomeTemplateStepView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3AC1E3CC4048829E78E3E1B /* WelcomeTemplateStepView.swift */; }; - 5CED06E89FBEF557DCD6C684 /* SuggestionFocusFreshnessTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45A896811745673061AF3612 /* SuggestionFocusFreshnessTests.swift */; }; + 5CBE09685D85DFED89B79437 /* FocusPollBackoffTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1337F5C94FA9A6388841805 /* FocusPollBackoffTests.swift */; }; 5CF34E01F13FB242817057E2 /* Sparkle in Frameworks */ = {isa = PBXBuildFile; productRef = 6F134BAB5BC7015B9B2354AF /* Sparkle */; }; - 5D083F544CF36CF6DFA34CB1 /* GhostTextColorPreset.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E44E393DD58B978B1EAB6CF /* GhostTextColorPreset.swift */; }; 5DF31F465A3A1233260BD3A4 /* EngineAndModelPaneView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC9ECD5408B0F5708149B5C0 /* EngineAndModelPaneView.swift */; }; - 5E10EFC426217CB7218A5847 /* CotabbyTestFixtures.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF1E065C7FFB697FCEB2FA5C /* CotabbyTestFixtures.swift */; }; - 5E77261BAF8365B69F08DB67 /* FieldEdgeIconIndicatorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBD5FCB8CC56AA6138382B2C /* FieldEdgeIconIndicatorView.swift */; }; - 5E92E3C1EB41D482FC06BC52 /* MenuBarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9AA0117B322C625F6D4BBEAB /* MenuBarView.swift */; }; + 5DF60DD4F15079F1C1855495 /* EmojiQueryRun.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94D11446FF576F0BBDEE2D2F /* EmojiQueryRun.swift */; }; + 5E1CE9C9062D2DEB4B96FD5C /* PerDomainDisableSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F49C55FFF4352A6763BAE1A /* PerDomainDisableSettings.swift */; }; + 5E43AD2C53EA1813A6A138E3 /* SuggestionSettingsModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DFFEDED24AED136A9C83F730 /* SuggestionSettingsModel.swift */; }; + 5EA4B893AE7C634C0F9734B2 /* ConfidenceSuppressionPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95EF4BBE7320021CB8CD54D9 /* ConfidenceSuppressionPolicy.swift */; }; 5ED4272F22F0FB0DF2AE0AE1 /* MPL-2.0.txt in Resources */ = {isa = PBXBuildFile; fileRef = 4E283DF8948B10268B46811F /* MPL-2.0.txt */; }; - 5F019E5A0679FFB52F129798 /* InputModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F34AE24BB7C99D66E1F3904 /* InputModels.swift */; }; - 5F78F7F686015A06725698F1 /* EmojiCatalog.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AC3BF78835C8F2C315932F1 /* EmojiCatalog.swift */; }; - 6014B31E2570EFFE45557E33 /* TickMarkSlider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67586807ACE8EB13C9014535 /* TickMarkSlider.swift */; }; + 5F3E299F27F63F8F9D9FBABF /* SpellingLanguageResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61CCBF33813CE5CD3B9EA37B /* SpellingLanguageResolver.swift */; }; + 5F917D518007BAB8F81B6222 /* CaretLinePositionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85C36B59551CE66231CB8E26 /* CaretLinePositionTests.swift */; }; + 5FDFBF1A629E3661646124DA /* MirrorOverlayLayoutTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C8673733C0EB7A85861182F /* MirrorOverlayLayoutTests.swift */; }; + 6004FCACD5F5F27FA3319B76 /* KeyCodeLabelsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97F14FC0E8E0A5D23FA2F54C /* KeyCodeLabelsTests.swift */; }; 60636D92D12FED132250D8D2 /* PerformancePaneView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEBD6113A3C1038BECC99245 /* PerformancePaneView.swift */; }; 60773158D86A0D2F0EB3FF34 /* SettingsQuickLinkCard.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE0A565A2AD007EBE9D70697 /* SettingsQuickLinkCard.swift */; }; 610650A14AC5E8EDDC81B4E9 /* PermissionReminderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 168A0DBF62BEF674B96CEBD2 /* PermissionReminderView.swift */; }; - 6106B16C0DBA94EBF838D93E /* PermissionOverlayTracker.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6423D6CC8CC371D2DA899DE /* PermissionOverlayTracker.swift */; }; 613C60F5D664655CB4D8CC27 /* WelcomePermissionStepView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D27A2CEA7B4E0CDACBC986C2 /* WelcomePermissionStepView.swift */; }; - 614F45951D2BD56406E1F95E /* SuggestionFadeInPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 764EE0693994E2E126E7FC77 /* SuggestionFadeInPolicy.swift */; }; - 61635150B8004F6CB2FACE65 /* AppSurfaceClassifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94B0830FBE4F2E239F670DBA /* AppSurfaceClassifier.swift */; }; + 6167731C22B9B7ECFC5595AA /* EmojiRecents.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7786D3C52CC72971B74657F /* EmojiRecents.swift */; }; + 61932DE224F103A22C8E4EF7 /* MarkerSelectionSynthesizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9FD2044CDEA95EC02C9B2FE /* MarkerSelectionSynthesizer.swift */; }; 61EC9D635D416115E7C96E0F /* PermissionOverlayWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92C6EB9FDA48ADF425A116A9 /* PermissionOverlayWindowController.swift */; }; + 62194EBBF2CAE02887849E61 /* InsertedTextAdvanceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BAF8A580B615949356560AA /* InsertedTextAdvanceTests.swift */; }; + 62337F21F5B6BC2363192D17 /* CaretLinePosition.swift in Sources */ = {isa = PBXBuildFile; fileRef = 422E236CC16508B664E40F1E /* CaretLinePosition.swift */; }; + 62B45766E8A2827E31AFD356 /* ScreenFrameReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B49898B64D4DB50736CBC46 /* ScreenFrameReader.swift */; }; 62DBCF429B7F464A6B467725 /* OnboardingFeatureShowcase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 926B332E7B4CFEE42C4CAA75 /* OnboardingFeatureShowcase.swift */; }; - 62FADA407797998742502DD9 /* CaretLinePositionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EA827D6A2A54DF4BAD56405 /* CaretLinePositionTests.swift */; }; - 63054CBDCA87560130BF5ADC /* ExtendedContextTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54BC85605541E913EE57B258 /* ExtendedContextTests.swift */; }; - 641A9FAF3009A3E2AA06D74B /* VisualContextStartCoalescer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F01FAC4F57EB08471521196 /* VisualContextStartCoalescer.swift */; }; - 642287C5FA3930D61D4112E7 /* FocusSessionScopedCacheTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECD86A946E968A3B1DB7BB78 /* FocusSessionScopedCacheTests.swift */; }; + 63AEBAB1CDA1DEDB80F97F3F /* SpellingDictionaryPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36FEDE8C3BE5E3C5E26989AE /* SpellingDictionaryPicker.swift */; }; 644EEF959D07D54CC779BBF6 /* SettingsCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3350EDE01ED5125520C79D53 /* SettingsCoordinator.swift */; }; - 64599CD334AAD79266224689 /* CurrentWordExtractorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C4751DFE9DA372FBC40BA30 /* CurrentWordExtractorTests.swift */; }; - 64A36D1EE1BF29AF5B58906A /* TrailingDuplicationFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = D408D647412C59F3E692C42B /* TrailingDuplicationFilter.swift */; }; - 64C76BE489BD6E7D1DB94A85 /* CompletionSeamGuard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 306A36888B5F2CA8FEF9C806 /* CompletionSeamGuard.swift */; }; - 64DA031AEAC20AC6C852A24A /* OnboardingTemplateFeatureList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24F613F0E2F7046E6532A09C /* OnboardingTemplateFeatureList.swift */; }; - 64F20D51F7905DC290AE0351 /* KeycapView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB429709A7FA9D63B0D7B133 /* KeycapView.swift */; }; - 6503E1585D0CDE8CD852144B /* MacroTriggerStateMachine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C201A65A6B040F90C528A3B /* MacroTriggerStateMachine.swift */; }; - 65478B0DABF5460C32D4C458 /* ModelFileValidatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A829F28F01FAE76CA7244BBC /* ModelFileValidatorTests.swift */; }; - 663D37E35292F38666D807A7 /* HuggingFaceModelsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AF9479EF020071CA64CCC1 /* HuggingFaceModelsTests.swift */; }; - 664A5D62A723EB204ADEF2F9 /* DeepGeometryWalkThrottleTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F20A19A24D20E16D25ADCDA /* DeepGeometryWalkThrottleTests.swift */; }; - 66C23A7C2FCDE0266FF425F8 /* ApplicationBundleMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = 352AF5B2834FEE1F597394E4 /* ApplicationBundleMetadata.swift */; }; - 66D0D9F605AF462F569A5CFD /* SpellingLanguageResolverTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E0871985CB1F877EC422E18C /* SpellingLanguageResolverTests.swift */; }; + 64CC33F721B377F4F0547685 /* SuggestionRequestFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 330D425B2BF2245FD7BBE4FA /* SuggestionRequestFactory.swift */; }; + 65B44060371596BFA0EFD987 /* HardwareCapabilityProbeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57FE28720A0C1B74B5DEAA58 /* HardwareCapabilityProbeTests.swift */; }; + 65D20F8E6309CED34A638D35 /* CotabbyTestFixtures.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCF2889446A21BC8AC773A81 /* CotabbyTestFixtures.swift */; }; + 66A697ACC03A8A7338AB2204 /* WebContentFieldDetector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 178C5C54E1CC7E906DEA1D51 /* WebContentFieldDetector.swift */; }; + 66CF2F55FA3E565C70D35C7D /* FocusTrackingModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 480596411FBB38BA3B993EDC /* FocusTrackingModel.swift */; }; 66D9E37B12A9265D4733E72E /* LlamaRuntimeCore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 944065A858D9BC936CB12B23 /* LlamaRuntimeCore.swift */; }; - 67F9E4AD54E17A17FC825D74 /* OllamaPreloadWorkControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4660F0FA8500594314C6D5C /* OllamaPreloadWorkControllerTests.swift */; }; + 66E7FB51A0DF5916ABBA15D0 /* MenuBarSections.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12F6FDB6D09851CC5C6649EF /* MenuBarSections.swift */; }; + 678B85A4F27EB5B1C965F075 /* DebouncePolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 085D4F4D5242B0E7AD506473 /* DebouncePolicy.swift */; }; + 68394C2ED425A7D59E229810 /* CaretGeometrySelector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81D275EF19CA4133543F8DE1 /* CaretGeometrySelector.swift */; }; 68DA5F93B7185B4F5E6DB4C3 /* it.txt in Resources */ = {isa = PBXBuildFile; fileRef = 0397F1DACB094A0F6A66BC0E /* it.txt */; }; + 694D69DF8695CC400D206B51 /* FocusCapabilityResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CEEAA025DC9BD7D38AD78E8 /* FocusCapabilityResolver.swift */; }; + 6952E5B030740443C684F263 /* SettingsSearchRanker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57B29DAC600626783649475A /* SettingsSearchRanker.swift */; }; 6955C3A4D7AB3EEF7FA7C469 /* InputSuppressionController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D1F9CEBAB0F330F8E7B61D8 /* InputSuppressionController.swift */; }; - 695E431AC3FF79769E2C5EEF /* SuggestionQualityMetricsStoreTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4CC566AC1DE33FD0CD30E1E /* SuggestionQualityMetricsStoreTests.swift */; }; + 69F840D1C78E9AD037F60A94 /* StreamedGhostTextPolicyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA6A718EDDF3473A762705BE /* StreamedGhostTextPolicyTests.swift */; }; + 69FFF0A2A9E0D2900F2BE9B1 /* EmojiCatalog.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CC9E0602050256E3B0B08B2 /* EmojiCatalog.swift */; }; 6A0AC8C06FAF0F52493A6EE5 /* WelcomeTemplateStepView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3AC1E3CC4048829E78E3E1B /* WelcomeTemplateStepView.swift */; }; - 6A4E62EC9B7B970695F87136 /* TextDirectionDetector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 328847A0F494360033366791 /* TextDirectionDetector.swift */; }; + 6A3C43437DEECBCF935C1F12 /* ClipboardContextProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B70455CA75A08FAD0F7409 /* ClipboardContextProvider.swift */; }; + 6A47E31BF0F99AF318DA4D98 /* ModelFileValidator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36652DB88C5948AA4A31524A /* ModelFileValidator.swift */; }; 6A8454A989104AE150308BCF /* it-100k.txt in Resources */ = {isa = PBXBuildFile; fileRef = 2D8AA55C2B730110E8598F91 /* it-100k.txt */; }; - 6AE0B46FB52D189D94E1F79A /* WordCountFormatterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E0513E3B23937B099A3CFF2 /* WordCountFormatterTests.swift */; }; - 6BE0C8F9D054A2C0D9018001 /* ConfidenceSuppressionPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1BD71ECC2AE4821B643E0935 /* ConfidenceSuppressionPolicy.swift */; }; - 6C59B369AAC6948C53E41654 /* DebouncePolicyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB23CDF7CAA1DEAD606B46B3 /* DebouncePolicyTests.swift */; }; - 6CBEF02FCDFCF406E378C27C /* SuggestionInteractionStateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8CB1D4F2681FAF59014AE115 /* SuggestionInteractionStateTests.swift */; }; - 6D0E79CF3C1A8CE53046FCE5 /* AXTextGeometryResolverTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C046CB4F3CB4BFE9391DB5DE /* AXTextGeometryResolverTests.swift */; }; - 6D57E3CDF56127422311C065 /* TerminalAppDetector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F4C4A7EAF886E0CC945BFEF /* TerminalAppDetector.swift */; }; + 6AF17537A3A91BAA875DEA0F /* HuggingFaceSearchService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DF8401D3859F00CC94F8893 /* HuggingFaceSearchService.swift */; }; + 6B59FBD73BA169121537D3DE /* DeepGeometryWalkThrottleTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F076BC5527D08E5CE55E3A2C /* DeepGeometryWalkThrottleTests.swift */; }; + 6B9B1630E1F30EAE429B5B60 /* FoundationModelPromptRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A051152D3C503A2339BF0FA /* FoundationModelPromptRenderer.swift */; }; + 6C4EFF98C9D606B3BE35D2A6 /* DownloadOutcomeClassifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F324C645A4E53FB6E90061A /* DownloadOutcomeClassifier.swift */; }; + 6CB0A928230ACD262B02CFDF /* FocusDebugOverlayController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B4F6E70B8A242F7BDE5361A /* FocusDebugOverlayController.swift */; }; + 6CCFAA1D86C4E4DC7E3DB8A3 /* SuggestionSubsystemContracts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5652FFF8E718A17D98F87CD0 /* SuggestionSubsystemContracts.swift */; }; + 6D86798FFF558551D6E0333B /* GhostFontMetrics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 392DC1658B28561909169539 /* GhostFontMetrics.swift */; }; 6DD1E22151571E1A22FF22F4 /* FoundationModelSuggestionEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5664E34B23FBDF69292FEF43 /* FoundationModelSuggestionEngine.swift */; }; - 6E01052209B73D7361C12CEF /* ClipboardContentDistiller.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96495E4147D828C0B1B22765 /* ClipboardContentDistiller.swift */; }; - 6E49ADEB31D04DC77A47DEB0 /* FileLogHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE8C2569A8217EE9BD3B197F /* FileLogHandler.swift */; }; + 6DFEE8E6B6D3D47215E67781 /* AppSurfaceClassifierTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2C80E780DD9B08317E3B374 /* AppSurfaceClassifierTests.swift */; }; + 6DFF14EEC5838BC309D03B09 /* CompletionRenderMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F93E4EC64A8773A1A7F3E24 /* CompletionRenderMode.swift */; }; + 6E666BEE80ECE65CF71C7F56 /* EmojiPickerPanelController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 872C8DDC2E86A1C4C4BBD99F /* EmojiPickerPanelController.swift */; }; + 6ECD119C3883DEBC376578C3 /* InsertionStrategySelector.swift in Sources */ = {isa = PBXBuildFile; fileRef = DFEBE38C24E36D1FA3106FE5 /* InsertionStrategySelector.swift */; }; 6F2FE689BCA50BEAE80AC6F4 /* ShortcutsPaneView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB630F9814388203DD1CA2EC /* ShortcutsPaneView.swift */; }; + 6FD683476D81B6FD7A4AFBA0 /* SystemMetricsStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51833C4853A3117C676CBC63 /* SystemMetricsStore.swift */; }; + 7008657841ECD4F06A46A9DE /* PromptPolicyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAC4D7129517D678D95D0BC2 /* PromptPolicyTests.swift */; }; + 702A007D1950AC98DA2090BB /* SystemResourceSampler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E36DC1471E2D627F4735A0C /* SystemResourceSampler.swift */; }; 70998EEDBB8B9953CB043991 /* OpenAICompatibleCredentialStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE343D89A8632B629B38D351 /* OpenAICompatibleCredentialStore.swift */; }; - 709F365A846B908D953FA92D /* FoundationModelPromptRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE7BF162A12703249726F20A /* FoundationModelPromptRenderer.swift */; }; - 7179FB0EC6411166CCD79F6B /* CompositionInputModeClassifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F283E5B403F9FEBFB4BA04A /* CompositionInputModeClassifier.swift */; }; + 70A40CE02EF0AF361263BE7E /* EmojiPickerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 871C7A27BAB5A510273D0A19 /* EmojiPickerView.swift */; }; + 715BD5081873EF5FF070D3B0 /* CalendarAccessibilityCapturePolicyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 863B5A1DC3C4B9668F620245 /* CalendarAccessibilityCapturePolicyTests.swift */; }; + 71BB14A043A34851121AF2CE /* ApplicationBundleMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46B67EF101326F317EFD670D /* ApplicationBundleMetadata.swift */; }; + 71DA26FE8F6758CAFE6F7042 /* EmojiPickerModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8736D4321E8BF847D1F7338E /* EmojiPickerModels.swift */; }; + 7209B91E3550735271B52E0F /* SuggestionRequestFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 330D425B2BF2245FD7BBE4FA /* SuggestionRequestFactory.swift */; }; + 7256C2A329C96A16661E9181 /* DateMacroEvaluatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6B7AF08299D919C30ACE82C /* DateMacroEvaluatorTests.swift */; }; + 72672FBC57236EF484340659 /* ActivationIndicatorController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E379AF08CDFF65D6EFC565E /* ActivationIndicatorController.swift */; }; + 728E3E5345CCBD8BD6061F63 /* BrowserAppDetector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16F8C2297472488862392DEE /* BrowserAppDetector.swift */; }; 7291020840F2164EBB764FAF /* CalendarAccessibilityCaptureGuard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 049102F0ED85618106A042C4 /* CalendarAccessibilityCaptureGuard.swift */; }; - 7324B18578C646B1ADFF0C3F /* InsertedTextAdvanceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C46024A6D18B1AD9D04B3BD /* InsertedTextAdvanceTests.swift */; }; 735C2E64CA51F58098B30A0D /* it.txt in Resources */ = {isa = PBXBuildFile; fileRef = 0397F1DACB094A0F6A66BC0E /* it.txt */; }; - 74422BB837D6A319D12BF981 /* BaseCompletionPromptRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85EF79E6144D6C6AD062B569 /* BaseCompletionPromptRenderer.swift */; }; + 73B7C4D5143F7AEC321BC873 /* PermissionAndContextModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AEBBBAB9588AA8EDBA41520 /* PermissionAndContextModelTests.swift */; }; 744B06C2488156B178675615 /* PermissionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85BF316556FDA64CB8AD07B6 /* PermissionManager.swift */; }; - 746BC62993602F78147FF8B0 /* EmojiMatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1441B2D89DAE6878DAD11F17 /* EmojiMatcher.swift */; }; - 74E0082BA8D7E80C2E038EAA /* EmojiPickerModelsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF7F3EB7B874C836BF75F15D /* EmojiPickerModelsTests.swift */; }; + 749C4953D3AFE86AFABA968C /* OnboardingTemplateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4C5E3A714F5A7818337101C /* OnboardingTemplateTests.swift */; }; + 74EE4B6CFAD07099867BD0FC /* SpellingLanguageResolverTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D71686BC29B7E0FACFF0B19C /* SpellingLanguageResolverTests.swift */; }; + 7523DE160DC22FE5C26E866E /* SuggestionTextColorCodec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7748B9FB3D88C383395CF528 /* SuggestionTextColorCodec.swift */; }; + 7527A1523BFCCC1D418B44FD /* MenuBarPopoverDismisser.swift in Sources */ = {isa = PBXBuildFile; fileRef = DADE6EEA8248DA6700E11844 /* MenuBarPopoverDismisser.swift */; }; 753C5A939E986B1A0FB25664 /* StaticTextRunWalkThrottle.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0C3E6241B0F35C7A2C85965 /* StaticTextRunWalkThrottle.swift */; }; 753DC144B9394A35A3F395DA /* SettingsSidebarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BADB38D0160B47637572FC5E /* SettingsSidebarView.swift */; }; + 75549A20D66E861ED9C6B24F /* HardwareCapabilityProbe.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE2844BF23632FC9B0824ABE /* HardwareCapabilityProbe.swift */; }; + 765A4E8212962910AA3FBA87 /* InputSuppressionControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3DBD75CAF6CAC849D5ED9FA4 /* InputSuppressionControllerTests.swift */; }; 76DFC829F2417FB048463285 /* GhostTextPreview.swift in Sources */ = {isa = PBXBuildFile; fileRef = A594D02B0EF3C2DD62EFE69A /* GhostTextPreview.swift */; }; - 76FD91607794883F8E121450 /* CaretGeometrySelector.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3C84377F352140759B448C9 /* CaretGeometrySelector.swift */; }; - 773808D3D88440F0836D0072 /* FileLogHandlerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE98A6C28731BF5C8D434543 /* FileLogHandlerTests.swift */; }; 77823BCFB29F63615C514927 /* CalendarAccessibilityCaptureGuard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 049102F0ED85618106A042C4 /* CalendarAccessibilityCaptureGuard.swift */; }; + 77957609D3B06ED7960859A4 /* ArithmeticEvaluatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B831CA78687EAEE96493C09 /* ArithmeticEvaluatorTests.swift */; }; 77B57484667F71F7EFA380D1 /* fr-100k.txt in Resources */ = {isa = PBXBuildFile; fileRef = 6DB982BF30B3601F57277776 /* fr-100k.txt */; }; - 783BEC91DBC86AF75CEDB269 /* MenuBarPresentationObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00824BDD8D0E9B3063827C78 /* MenuBarPresentationObserver.swift */; }; - 78A8713A0E5B4C89E2D715BC /* FocusCapabilityFlickerGateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1972BD2C5254D8266618781F /* FocusCapabilityFlickerGateTests.swift */; }; + 77C40ACA872F20CFAB2BDD7F /* TagChip.swift in Sources */ = {isa = PBXBuildFile; fileRef = A04DFC5BD7821D73DA21D7DB /* TagChip.swift */; }; + 7807D6217618D982CD301875 /* MenuBarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DE038A6DF4A16B3EB5CEBD3 /* MenuBarView.swift */; }; + 78F319805DCEA8B1239C473A /* DisplayCoordinateConverter.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3096225612BC53296FB6931 /* DisplayCoordinateConverter.swift */; }; 78FAE5DB691A1B71042B9D20 /* AboutPaneView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3FA53BBC3D81503C1D17477 /* AboutPaneView.swift */; }; - 793BA44D503D61B44D133716 /* SuggestionSettingsStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 960F3FDBF283347594F30494 /* SuggestionSettingsStore.swift */; }; - 799691376DD3EE52E5F0F7FB /* FocusCapabilityResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70367FCC1E0F08EE3B8EB26F /* FocusCapabilityResolver.swift */; }; - 79AA66B111C059B342338443 /* BrowserAppDetector.swift in Sources */ = {isa = PBXBuildFile; fileRef = B997EC69E1C65B1E18234221 /* BrowserAppDetector.swift */; }; - 79B0AEA0D2FC6A865E9303F9 /* DecodeStopPolicyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3B09064903B760D6DF2DF7D /* DecodeStopPolicyTests.swift */; }; - 7A5DBBC32ABEF9E7ED147577 /* HardwareCapabilityProbeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23CFCE3EB3F41DAC0202E9D0 /* HardwareCapabilityProbeTests.swift */; }; - 7AEF46950EF5E2EBCFE4BBD3 /* SuggestionTextColorCodecTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87C309CD6A454C415D8BEEC7 /* SuggestionTextColorCodecTests.swift */; }; + 793E33BA3A7F5B706D18FC01 /* CompletionRenderModePolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = ACAD48CDC2F27F49558473F1 /* CompletionRenderModePolicy.swift */; }; + 7955ED6ECA506D4EDA204BB1 /* AppUpdateManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A7A9C39A0713BD3B442C9AC /* AppUpdateManager.swift */; }; + 7A31E6395C535FF017A1EFE1 /* CotabbyDebugOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = F47CD9DF50E7192A70D1870E /* CotabbyDebugOptions.swift */; }; + 7AEF32D2BCB710A3E018A637 /* SuggestionInteractionStateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 014DF977EED1CE9EB4E8E9D5 /* SuggestionInteractionStateTests.swift */; }; + 7AFC249A65F8E69A15F826BB /* CustomRulesEditor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31F8F44FE13E69D4108F4AFB /* CustomRulesEditor.swift */; }; 7B33F811711B26161212EAEA /* PermissionGuidanceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F2C764D29C8D50D0C854FF8 /* PermissionGuidanceController.swift */; }; 7B6A63F5DCC2C163CDFD2A5C /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = BC4F887528AE74AC0DD30314 /* Assets.xcassets */; }; - 7C36DBA762E19C8C31676D44 /* MidWordContinuationPolicyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1274F897631B1B3A835D157F /* MidWordContinuationPolicyTests.swift */; }; - 7C6D42EAD04C8144538B132A /* SuggestionSettingsModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00BB95A341A8B5F4A1725640 /* SuggestionSettingsModelTests.swift */; }; - 7C72A2D76E8BA38ADD523CF6 /* CaretGeometrySelector.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3C84377F352140759B448C9 /* CaretGeometrySelector.swift */; }; - 7C94725B4837DEC9ECF1BC54 /* CompletionRenderMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A03E565A11581FD2150B142 /* CompletionRenderMode.swift */; }; - 7D6BB9AF72F7076A4E5EE96F /* DownloadableModelCatalogView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB5C2AE9A7E55495D26AD074 /* DownloadableModelCatalogView.swift */; }; - 7D9C3D733CE7633FB12A35BE /* BrowserDomain.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD8025E4A296845FC53E660D /* BrowserDomain.swift */; }; - 7DCA61581FD8ECA6565A69F6 /* DisplayCoordinateConverter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74BD1D4DB27D5D96D1E06096 /* DisplayCoordinateConverter.swift */; }; - 7DEFC57991AB0C5379AD9CBF /* SuggestionModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 386C98FFCF76EC1C8C7E82BB /* SuggestionModels.swift */; }; - 7E505E25BD9C45F0DBE2796C /* AppUpdateManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD9573F3504CAE6891DF9B7D /* AppUpdateManager.swift */; }; - 7E9413CE7C999C4612348248 /* SuggestionSessionReconcilerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C8F07AC52C7A482F5FE34C5 /* SuggestionSessionReconcilerTests.swift */; }; + 7B85C2FB697D173A9CEB41D3 /* PerformanceMetricsStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA93AF731DE8931F72C3C65F /* PerformanceMetricsStore.swift */; }; + 7C24B19FF72386238B7E51B7 /* LlamaSuggestionEnginePrewarmTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F55AC46E880BE8AC086B80E9 /* LlamaSuggestionEnginePrewarmTests.swift */; }; + 7D62632C0775EB7E5D6DAE53 /* InsertionSafetyGateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45E30CEB74593771E5F62E5E /* InsertionSafetyGateTests.swift */; }; + 7E11BEAD32E9FF170C92000A /* HuggingFaceModelBrowserView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C696204AAEBA357129F77646 /* HuggingFaceModelBrowserView.swift */; }; 7E99F5676A1D1DF7EA7D7702 /* SuggestionCoordinator+Prediction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1ED1EA9282E0AC7592E60889 /* SuggestionCoordinator+Prediction.swift */; }; - 7EB20783E0D36715D1230A5C /* PromptSectionBudgetTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E260C4D08C786CDBD527B329 /* PromptSectionBudgetTests.swift */; }; - 7EB2CB1000EA2407A2F59B4E /* SuggestionPauseModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2FDC5884B07B19B9B4917A6 /* SuggestionPauseModels.swift */; }; - 7EEE6AEBFBD419FFE7C544BA /* SuggestionSettingsData.swift in Sources */ = {isa = PBXBuildFile; fileRef = D93563FDA25DFC0038E5F887 /* SuggestionSettingsData.swift */; }; 7FC103944F4EF39DB965F469 /* InMemoryLogging in Frameworks */ = {isa = PBXBuildFile; productRef = 88921938DC814625ED57D605 /* InMemoryLogging */; }; - 814E348C663B697537594F0C /* EmojiRecentsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 671689F289D45A124639C9C6 /* EmojiRecentsTests.swift */; }; - 8284A20D24B64503F138E946 /* CompletionSeamGuard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 306A36888B5F2CA8FEF9C806 /* CompletionSeamGuard.swift */; }; - 82D4ADEAF05337ABDE4C586C /* RuntimeBootstrapModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60629DFE309C1A4BD8A7FB3B /* RuntimeBootstrapModel.swift */; }; - 82DAFCA8CC3AE3E2FBFDBD76 /* RequestID.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DC693E00430F46E41CB56E6 /* RequestID.swift */; }; + 8014C090E6B95CC1CE40230A /* FocusCapabilityFlickerGateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D080DC6ABFA205A22E3D5FE /* FocusCapabilityFlickerGateTests.swift */; }; + 80624558CD11E3275F1B6250 /* SuggestionFadeInPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = A62CBDE1462C7733E4228BBE /* SuggestionFadeInPolicy.swift */; }; + 80D394FC224DE82F3A9057BC /* LanguageSupportTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE29E54D78A9DD7CD87626DD /* LanguageSupportTests.swift */; }; + 81073963BC57B5CA9151B0EC /* CustomRulesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5ADC3A68EF5FD9A1E6B5D249 /* CustomRulesTests.swift */; }; + 81213A3D2EC939A46BF6A105 /* GhostFontSizeStabilizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2B5BB7FEB3B9BF121A5A46F /* GhostFontSizeStabilizer.swift */; }; + 81870F2D46C12CA1E6B19523 /* CurrentWordExtractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1AAC6367483952AB7D59A62 /* CurrentWordExtractor.swift */; }; + 81CB78E2291C2CF307E371D5 /* InsertedTextAdvance.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61103A4FEA699AAE0E61D89B /* InsertedTextAdvance.swift */; }; + 82043C59FF8749A70998668C /* GhostTextColorPreset.swift in Sources */ = {isa = PBXBuildFile; fileRef = 786A5B721D148D09B5BDE651 /* GhostTextColorPreset.swift */; }; + 820BA5C9F46127C3CD3522E9 /* GhostFontMetricsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1FE47A75EA31B7384585C18 /* GhostFontMetricsTests.swift */; }; + 8259591A1BDE1D275181DF1A /* BrowserDomain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3871F63C8AF8AD96B14F5067 /* BrowserDomain.swift */; }; + 825FD379841F0DAABE247C2C /* MidWordContinuationPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 310F3498A3E498729CC8433E /* MidWordContinuationPolicy.swift */; }; + 83193301C97E763146DA9273 /* LlamaDecodeGateDefaultsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF924740638E6A6F77FCB4C4 /* LlamaDecodeGateDefaultsTests.swift */; }; 831B8DF92AAC8D0B99C5A262 /* AcceptanceModePickerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5DAF68AEBFE334F68A65E82 /* AcceptanceModePickerView.swift */; }; 8320BEF361D8EA55E5CC7D95 /* llama-eval-cases.json in Resources */ = {isa = PBXBuildFile; fileRef = AB84C175EA5B59E118F58C49 /* llama-eval-cases.json */; }; - 8369356B8E7E7E61787E828D /* AXHelperTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66B53214C3842F78B202D498 /* AXHelperTests.swift */; }; + 832FB4EEA935CA4D67F4478D /* MenuBarSections.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12F6FDB6D09851CC5C6649EF /* MenuBarSections.swift */; }; 83B25F54B74EE35787D5DBD4 /* de-100k.txt in Resources */ = {isa = PBXBuildFile; fileRef = 4B8665A5495891F9E3DDA48B /* de-100k.txt */; }; - 83EC3543DC45B1601F119BF9 /* InsertionSafetyGateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43D627C4A55359EAF4676FF7 /* InsertionSafetyGateTests.swift */; }; - 8429B116328C392DCA018D95 /* MacroEngineTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8083D44ABCDCFA68A4CD497 /* MacroEngineTests.swift */; }; - 8441299082E6B68F7F88911B /* ShortcutConflictTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0850B07CCDBA67C756C6EC59 /* ShortcutConflictTests.swift */; }; - 84A4CA05AF6885AE4FA4C13A /* SettingsAttentionEvaluator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A02336442BB735EE2E8D064 /* SettingsAttentionEvaluator.swift */; }; - 856082F4732206A3761816DC /* SystemMetricsStoreTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38931C165873B50B405CC602 /* SystemMetricsStoreTests.swift */; }; + 84E9E1F4D55CEB8A9692734E /* MenuBarPresentationObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DE86A49339BB507D197629D /* MenuBarPresentationObserver.swift */; }; + 85178E15A85EB772554220C6 /* WebContentFieldDetector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 178C5C54E1CC7E906DEA1D51 /* WebContentFieldDetector.swift */; }; + 852D882AA3AF54EE73BA5306 /* SpellingDictionaryCatalog.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25D41CC179EC04093971A0D0 /* SpellingDictionaryCatalog.swift */; }; + 853C19A148DE6D5A59AA2C87 /* ClipboardRelevanceFilterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04364C3242A25358E7C85FD6 /* ClipboardRelevanceFilterTests.swift */; }; + 8586BBF24A7F21AF84F59D2C /* CompletionRenderMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F93E4EC64A8773A1A7F3E24 /* CompletionRenderMode.swift */; }; + 85AF90012B06D69D0DBF2537 /* TerminalAppDetector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06820B1E0B02D6A16506427C /* TerminalAppDetector.swift */; }; + 85FCDC35AC29F4A89E30F559 /* BundledRuntimeLocatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBD7B94FF42D8C538C328E80 /* BundledRuntimeLocatorTests.swift */; }; 862146ABDADC022A3BE74E00 /* CurrencyEvaluator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0537986794554F5FABE6EFF3 /* CurrencyEvaluator.swift */; }; 864EC22F38FB832BB96FF58B /* SettingsQuickLinkCard.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE0A565A2AD007EBE9D70697 /* SettingsQuickLinkCard.swift */; }; - 865C569A9BC95B08F440D199 /* SystemResourceSampler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27A5D63F390E9B7A7FE343FE /* SystemResourceSampler.swift */; }; - 86AC625B4DD14EF807002FA2 /* WebContentFieldDetector.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3A35FAA742408D002B75920 /* WebContentFieldDetector.swift */; }; - 87806DE08881D11F2608A13D /* MarkerSelectionSynthesizerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52BAFA2F989C3C4F7FB892B5 /* MarkerSelectionSynthesizerTests.swift */; }; - 8865B95FE84198D70390DF80 /* ClipboardContentDistillerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EFD89799BB82AF7A92559AEB /* ClipboardContentDistillerTests.swift */; }; - 88BCD795A14E1C9308F7BB31 /* SuggestionAvailabilityEvaluatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C05B0439348261163B37C508 /* SuggestionAvailabilityEvaluatorTests.swift */; }; + 8756E3050C45106D7AD188AA /* MacroTriggerStateMachineTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1C9DBC2A94B6E805EDAFEA5 /* MacroTriggerStateMachineTests.swift */; }; + 87CE40ADBFCDBFD266BA9E3F /* InlinePreviewPanelController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 924CAA5E25C596A9FAB7602B /* InlinePreviewPanelController.swift */; }; + 88318BAA3E0754D09C048983 /* FocusSnapshotResolverSelectionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F42C0E566DA45DEB35D888B /* FocusSnapshotResolverSelectionTests.swift */; }; 89329024F050602EFBC7CC6B /* FocusTracker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C9FDF029F7828CAF3FE8850 /* FocusTracker.swift */; }; - 8A47597B097058832453C2FF /* LlamaSuggestionEvalTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A691EB51A7B93D1FAC38657F /* LlamaSuggestionEvalTests.swift */; }; - 8A88C3A598E65E4127FEEC3D /* SuggestionFadeInPolicyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 442507A5399ACD81D1DB4936 /* SuggestionFadeInPolicyTests.swift */; }; - 8B26F7B26358438D6EB88C2E /* PerformanceMetricsStoreTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C0FCC5CCF6AE528E3C4DDA7 /* PerformanceMetricsStoreTests.swift */; }; 8B2DFC860803C0A7C4D34A36 /* ContextBuffer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54EF3C7F5D9D6F3FA50FD51C /* ContextBuffer.swift */; }; - 8D0F66DD1E6C988368A4545D /* DownloadFileRescuer.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4B4A2E2DD6733658EC05BD8 /* DownloadFileRescuer.swift */; }; - 8D9F33F49E880956D0571574 /* OnboardingFlowStepTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A4B220D9A25174A43E7A258B /* OnboardingFlowStepTests.swift */; }; + 8B36A3FDDBB803C72A1E521B /* PerDomainDisableSettingsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A306C7B2B0790A0B98D8F353 /* PerDomainDisableSettingsTests.swift */; }; + 8BC2FD8031EDE67956BCAC73 /* EmojiSynonymCatalog.swift in Sources */ = {isa = PBXBuildFile; fileRef = E38190E9916A96736E6769C2 /* EmojiSynonymCatalog.swift */; }; + 8C090BA472D90D9682F329BA /* KeyCodeLabels.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF4D6CEDF032A25EF72D7228 /* KeyCodeLabels.swift */; }; + 8CC26E987D538732AE22DDA4 /* EmojiRecentsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7EB49ACD7DA4F098B2428C6 /* EmojiRecentsTests.swift */; }; + 8D63900E61EAA983D2C726FC /* SuggestionOverlayStabilityGateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8711876D1C2789D34601E159 /* SuggestionOverlayStabilityGateTests.swift */; }; 8DA36F1521B6A59D8C20AC59 /* Logging in Frameworks */ = {isa = PBXBuildFile; productRef = 5A60D1467BBFECB3DFEB39C2 /* Logging */; }; - 902B83CCB82E286FBEB9DAAD /* EmojiPickerPanelLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62EDF1199CC5E18BD7651661 /* EmojiPickerPanelLayout.swift */; }; + 8E460A307B1ED0DA783CB247 /* FocusPollBackoff.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECD5C8648740E7050CCA657F /* FocusPollBackoff.swift */; }; + 8E7EEDABB99CC50B898C2161 /* EmojiTriggerStateMachine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2412E9C50B4D2B3C57F5E3C6 /* EmojiTriggerStateMachine.swift */; }; + 8ED4542BF4F6BC1620D47A20 /* FocusDebugOverlayController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B4F6E70B8A242F7BDE5361A /* FocusDebugOverlayController.swift */; }; + 8F216FA9E4DD8C0317E28286 /* BundleVersion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A951C04DF783B1F1EFDD1E5 /* BundleVersion.swift */; }; + 8F508CD1A957BBC418C59780 /* InsertionSafetyGate.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB1A91DE0EA12F499D2129D0 /* InsertionSafetyGate.swift */; }; + 8F6B554D210B15AD99511D4D /* OnboardingTemplateRecommender.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F86D2716CBE36970BB462E8 /* OnboardingTemplateRecommender.swift */; }; 907A0BF56C3BB0CBAF2649AB /* SettingsCategory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D0AEFF86F8210CBE7CFCBAD /* SettingsCategory.swift */; }; 908D99B538976C07833157E8 /* OnboardingFeatureShowcase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 926B332E7B4CFEE42C4CAA75 /* OnboardingFeatureShowcase.swift */; }; 909EBE545CE644C6C57F1B5D /* SuggestionCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F961F5DF2A392F6F5F94F8A /* SuggestionCoordinator.swift */; }; - 90CD3F7238E223DEBA2B4D92 /* TagChip.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB317C82CE2CBC69056BA4B8 /* TagChip.swift */; }; - 90F287ED3B23FB2AB3EF8CCE /* SuggestionTextNormalizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = B424E2AC97C99D335B0D5751 /* SuggestionTextNormalizer.swift */; }; - 914266D314BBBCE2EAB5CBA7 /* OCRTextHygiene.swift in Sources */ = {isa = PBXBuildFile; fileRef = B22FDEB3B1DCC9ADE906CC73 /* OCRTextHygiene.swift */; }; - 91ADE463EE72D77E0D3EBBCA /* TickMarkSlider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67586807ACE8EB13C9014535 /* TickMarkSlider.swift */; }; - 91C27021750AC03AA4A0115A /* HuggingFaceAPIClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110CB0B53016644EF7840301 /* HuggingFaceAPIClient.swift */; }; - 91D1F16B8C5DA281D4B7F699 /* CustomRulesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD752451330486FE270018B0 /* CustomRulesTests.swift */; }; - 91D8189EFCD1BA992EA6F038 /* ConfidenceSuppressionPolicyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06FF2B0A3094A952A8EBA9B5 /* ConfidenceSuppressionPolicyTests.swift */; }; - 924489CEE8171F7AD8579D71 /* FocusDebugOverlayController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F5E263AB69029D5E13D5EE8 /* FocusDebugOverlayController.swift */; }; + 90CAE5A87EA9EA2670BD99DA /* FocusSessionScopedCacheTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE437912B6EE36826912191A /* FocusSessionScopedCacheTests.swift */; }; + 920DE073BEE1DC78B73108D0 /* OnboardingFlowSteps.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64AEF94A48DF96D6BEE3048C /* OnboardingFlowSteps.swift */; }; 924E6C74380F9289AA721518 /* he.txt in Resources */ = {isa = PBXBuildFile; fileRef = C9C000E46A1E404932F89C81 /* he.txt */; }; + 9261E4F7F4671A6D9ED8B0D4 /* OverlayController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A3C5A66AA93E50E4A64ED46 /* OverlayController.swift */; }; + 92A3ABB2C04CF95D00CED9A0 /* TextLayoutCaretEstimator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A5B87C4C13EAE32813286C7 /* TextLayoutCaretEstimator.swift */; }; 9301B309462E4CF7F554578F /* OnboardingStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9ABC808DE01AF9AD04E38943 /* OnboardingStyle.swift */; }; 930BA578E742D96FD9D340ED /* ContextPaneView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89497C35D1825BAE9625EE06 /* ContextPaneView.swift */; }; - 934885ACC2DEA20B27F10948 /* PromptContextSanitizerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D80CC2CCAAFE3F23FB8C37A /* PromptContextSanitizerTests.swift */; }; + 931D40674AF1CB11BE27327A /* OnboardingTemplateFeatureList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7174EF88BA41ACC0A74CA582 /* OnboardingTemplateFeatureList.swift */; }; + 9335AAAD76482788CF3736EB /* KeyRecorderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDDAB2E5837445522CF66B74 /* KeyRecorderView.swift */; }; 93524F3B861292206EE635CD /* FocusSessionScopedCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E504DABB83411B3FA0B8DC5 /* FocusSessionScopedCache.swift */; }; - 93EBF0366891222B7DD6C38D /* OCRTextHygiene.swift in Sources */ = {isa = PBXBuildFile; fileRef = B22FDEB3B1DCC9ADE906CC73 /* OCRTextHygiene.swift */; }; - 94F037A3F9D7CE52CC70CA0F /* SpellingDictionaryPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF3A73EB848780061FC162C0 /* SpellingDictionaryPicker.swift */; }; + 936F87925A22DAC58525B60F /* DownloadFileRescuer.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC756DF8E0032B39099D2BF8 /* DownloadFileRescuer.swift */; }; + 93DE9A4FE1218C2881D0E6AA /* CaretLinePosition.swift in Sources */ = {isa = PBXBuildFile; fileRef = 422E236CC16508B664E40F1E /* CaretLinePosition.swift */; }; + 948AD3BD25C113539DF12FD7 /* VisualContextModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A51B1559F4CE6728D39C959 /* VisualContextModels.swift */; }; + 94A93C9AECB84D56E3347601 /* FocusPollBackoff.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECD5C8648740E7050CCA657F /* FocusPollBackoff.swift */; }; 952729C6514FBC40D6E7D1D4 /* CotabbyInference in Frameworks */ = {isa = PBXBuildFile; productRef = D11AB0F962CCC5BD79B630CA /* CotabbyInference */; }; - 956BC802BDD3C7C3EA7F084A /* EmojiQueryRun.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDF6A4E9CE93FD53C60E67E3 /* EmojiQueryRun.swift */; }; - 959439B4785B996CE6D89944 /* EmojiUsageModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC48B188C6E6E263B876621D /* EmojiUsageModels.swift */; }; + 955D2ED21FAEB1731AE84497 /* SuggestionAnchorCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 841C71C9523CF19D9212F1CD /* SuggestionAnchorCache.swift */; }; 95B1C40207F57D7E059B9965 /* de.txt in Resources */ = {isa = PBXBuildFile; fileRef = C648EBB10D7F8E0B904DEC91 /* de.txt */; }; - 96498E097A5899AFC9F0C853 /* EmojiCatalogMatcherTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 292DC9D4D9D5D26AE882E39B /* EmojiCatalogMatcherTests.swift */; }; - 96782E57CA26A16409368B69 /* TextDirectionDetector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 328847A0F494360033366791 /* TextDirectionDetector.swift */; }; - 96C3128BCB17A05A7C7DEFF7 /* StaticTextRunWalkThrottleTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B3179B40A81DF121D1221C6 /* StaticTextRunWalkThrottleTests.swift */; }; - 96ECE89BD96CF93CC159B437 /* MenuBarRecoveryPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F32455AE743D1D0E9E2CB38 /* MenuBarRecoveryPolicy.swift */; }; - 9706D778FB549E9E7AE05F4F /* EmojiMatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1441B2D89DAE6878DAD11F17 /* EmojiMatcher.swift */; }; + 95BCE8E4CB984A0D8F1CC227 /* SuggestionCoordinatorInputTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31C6E7EF7E4F4CFD8702A331 /* SuggestionCoordinatorInputTests.swift */; }; + 96338F5360D3E1435DCCF087 /* SuggestionSessionReconciler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 022C91940E688482C3F80423 /* SuggestionSessionReconciler.swift */; }; + 96927B87C3C2B34819748CE1 /* DisplayCoordinateConverterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C51EBCF982A0A9A4A1084EBB /* DisplayCoordinateConverterTests.swift */; }; + 9698DED033367C1E6F48D43E /* ModelFileValidator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36652DB88C5948AA4A31524A /* ModelFileValidator.swift */; }; + 96CC39E6D6DF3F27ABA8019B /* SuggestionSettingsStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8AB17696CE79982039061F29 /* SuggestionSettingsStore.swift */; }; 972755DA269C9A5C34D64FBC /* OpenAICompatibleCredentialStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE343D89A8632B629B38D351 /* OpenAICompatibleCredentialStore.swift */; }; - 97ECEF5AA17B26FA6F187461 /* FocusCapabilityFlickerGate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A44BEC8C23FF227731DD0CD /* FocusCapabilityFlickerGate.swift */; }; + 973171C8C049F8CC15F589F2 /* ShortcutConflictTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA02598F555696782E180DA5 /* ShortcutConflictTests.swift */; }; 97EF76E6B7A1AFB3FA4879D1 /* LGPL-3.0.txt in Resources */ = {isa = PBXBuildFile; fileRef = 7513810E78F3C94FE972EB07 /* LGPL-3.0.txt */; }; - 982BA68A53CEE0F45D41F3D3 /* PromptSectionBudget.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFCFCCCB69C29A86E726B10A /* PromptSectionBudget.swift */; }; - 98E2E14A069384C1088CDB44 /* PromptContextSanitizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA4B45B91D4DEAC979C3113E /* PromptContextSanitizer.swift */; }; - 9938DE59D9E05BC51A5BA5B8 /* SuggestionDebugLoggerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD60968AEA8A5843F4E24618 /* SuggestionDebugLoggerTests.swift */; }; + 980E02175E2D83D4B60FE519 /* SuggestionQualityMetricsStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50119F67E7BB9FBC8EA94BF2 /* SuggestionQualityMetricsStore.swift */; }; + 985C583A41DEEE040F48D661 /* FocusModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B778713FE1C9481CE0DF065 /* FocusModels.swift */; }; + 986C1339A8FBA3569FC129D6 /* PopupChrome.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87C6335EED41343595F17A08 /* PopupChrome.swift */; }; + 99334CDC1399D03019202E85 /* CurrentWordExtractorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9331B12568E717FCF9A5086 /* CurrentWordExtractorTests.swift */; }; 9973763A9F4EA4D8B4AE59EB /* SuggestionEngineRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 384FBCF5D7A3A446C5BE2B8D /* SuggestionEngineRouter.swift */; }; + 997AD1EDD598F4239EA7A2A1 /* CaretRunPlacementTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DFB7940B64F4B82E03AB674E /* CaretRunPlacementTests.swift */; }; + 9A17FE331C20BB85B65457DD /* AppSurfaceClassifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8772CBA9365F890D03A56995 /* AppSurfaceClassifier.swift */; }; 9A419D0704C95920CB71D3B1 /* RandomMacroEvaluator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E3EC87078D3A4C21DB3252C /* RandomMacroEvaluator.swift */; }; 9A82FB431A61719F275623B8 /* PermissionOverlayWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92C6EB9FDA48ADF425A116A9 /* PermissionOverlayWindowController.swift */; }; - 9ADFFF634912F638D079E1C7 /* SentenceBoundaryClassifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4B56C250DDEF3E81F9DCBD7 /* SentenceBoundaryClassifier.swift */; }; + 9AC34510D097D670C9D7ABCB /* GhostFontSizeStabilizerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52A749138073241F38352484 /* GhostFontSizeStabilizerTests.swift */; }; 9B0CE2B00695EC13A6E6CCF3 /* CurrencyEvaluator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0537986794554F5FABE6EFF3 /* CurrencyEvaluator.swift */; }; + 9B6C176547D2B6D118572E41 /* BaseCompletionPromptRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C1AE4120FA68524700C9324 /* BaseCompletionPromptRenderer.swift */; }; 9BA9E52F33F00E65692EE6CD /* he-100k.txt in Resources */ = {isa = PBXBuildFile; fileRef = 7C9BB65FA5FC42B89766B037 /* he-100k.txt */; }; - 9C5B1ED23126B60E3BBF3A5B /* KeycapView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB429709A7FA9D63B0D7B133 /* KeycapView.swift */; }; - 9CEBD6AF4405F1BBE0E3D16C /* MidWordContinuationPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 357C18383B047F24A531BDCD /* MidWordContinuationPolicy.swift */; }; - 9D0F4829D11BCD4DB1290410 /* InsertionStrategySelector.swift in Sources */ = {isa = PBXBuildFile; fileRef = E0D2FEEA4304C86324BAADAB /* InsertionStrategySelector.swift */; }; + 9BDC4312E18A9E67045DD4F1 /* CompositionInputModeClassifierTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EE61CD2E8D2399E23D48818 /* CompositionInputModeClassifierTests.swift */; }; + 9C05D74099B0D309F01A3CEF /* TrailingDuplicationFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FCBADDF1A64F0813E094F2D /* TrailingDuplicationFilter.swift */; }; + 9C11CED7C78707EE8C3E0E10 /* SettingsAttentionEvaluatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E53B16C1E0CE667E9666C71 /* SettingsAttentionEvaluatorTests.swift */; }; + 9C41C817DE1785040E3628CE /* LLMIOFileHandlerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BB500911B047A5363D51E71 /* LLMIOFileHandlerTests.swift */; }; + 9C5339D11DC64BBD21C6BC6F /* MirrorOverlayLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = A11589537F19EDE247697056 /* MirrorOverlayLayout.swift */; }; + 9D8D6751BD3985F7A574AAE7 /* MidWordContinuationPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 310F3498A3E498729CC8433E /* MidWordContinuationPolicy.swift */; }; + 9DC064E0D7CD8A0F811A557D /* AppSurfaceClassifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8772CBA9365F890D03A56995 /* AppSurfaceClassifier.swift */; }; 9E031B67A275BB3E049EFC2F /* frequency_dictionary_en_82_765.txt in Resources */ = {isa = PBXBuildFile; fileRef = 99FBB636008490B66CF26772 /* frequency_dictionary_en_82_765.txt */; }; - 9E4AED02831829A108A1AA85 /* StreamedGhostTextPolicyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1AA6A6F4C3A54B5DA2A0022 /* StreamedGhostTextPolicyTests.swift */; }; 9EB8E3DC796A0C8BFDE8E683 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3E8E86A14090BC7BD13BA76 /* AppDelegate.swift */; }; 9F2FDCABCC941CBECAA3B4AB /* CotabbyInference in Frameworks */ = {isa = PBXBuildFile; productRef = 48A46AD6B613CF06072603E4 /* CotabbyInference */; }; - 9F6F88ED74ECA3E23A8E3CC0 /* SecureFieldDetector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1827565F4FAD3E4E61CA65C3 /* SecureFieldDetector.swift */; }; + 9F581B53E5877E81398B6B28 /* EmojiPickerPanelLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = D22CA80189225431804E87B0 /* EmojiPickerPanelLayout.swift */; }; A0657CE0488F69F0BD559CBC /* SuggestionCoordinator+Acceptance.swift in Sources */ = {isa = PBXBuildFile; fileRef = 72B13136DF7318F3E96DF0D3 /* SuggestionCoordinator+Acceptance.swift */; }; - A0A2BD916B2CB22BAF32A62E /* StreamedGhostTextPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 299BD7B741DA4AAE6A061BAD /* StreamedGhostTextPolicy.swift */; }; - A0BB87E3665EF6C209034798 /* GhostSuggestionLayoutTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AD3F4F9FBE82007E4E15F58 /* GhostSuggestionLayoutTests.swift */; }; - A147C5EC3F2214A670F7556E /* FocusPollBackoffTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 273B4DC844F79B4BE2C8910F /* FocusPollBackoffTests.swift */; }; + A06D86F7475984F7AD810EFC /* InputModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = A29DF1C68154C21E6943D38E /* InputModels.swift */; }; + A08A409B3D209BFDB7DF46EB /* SuggestionTextNormalizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DFA4093ADA92D5E33F1F833 /* SuggestionTextNormalizer.swift */; }; A1A612C90221E0FE1195754A /* SettingsCategory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D0AEFF86F8210CBE7CFCBAD /* SettingsCategory.swift */; }; - A26E14A6E73036222419C424 /* TokenCountEstimatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B78AA11B52A6588119ABF76F /* TokenCountEstimatorTests.swift */; }; + A1A97C45B0DA031BD2844D68 /* SpeculativeAcceptanceContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4275FD6213DCDA953B4800EA /* SpeculativeAcceptanceContext.swift */; }; + A2177BAD62703590054FA58E /* GhostSuggestionLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4084B2F8843FE479F8D347E3 /* GhostSuggestionLayout.swift */; }; A29594647EA5450A54B36228 /* ContextBuffer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54EF3C7F5D9D6F3FA50FD51C /* ContextBuffer.swift */; }; - A2B3F4D38BCB0FED452B2A3F /* FocusTrackingModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6D42CD456B4B3C988B148A6 /* FocusTrackingModel.swift */; }; + A30F28CB21A2DDE9E44FC10A /* BundleVersion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A951C04DF783B1F1EFDD1E5 /* BundleVersion.swift */; }; A335FBC828C3803200070F5D /* EmojiPickerController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A3B81B92E0743C6152ED8DD /* EmojiPickerController.swift */; }; - A36481222BB5B2A67349D389 /* ApplicationBundleMetadataTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A168A7B6A7AD11559B60C56B /* ApplicationBundleMetadataTests.swift */; }; - A3913860E04446A86833D39B /* MirrorOverlayLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54150A507B03221F137D539B /* MirrorOverlayLayout.swift */; }; - A3AFE27EDE956ADC04C91C94 /* SymSpellTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B32482EABE9EA979C40C8A8F /* SymSpellTests.swift */; }; - A5A6CE0EF01CA6A9AFA7A400 /* RequestID.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DC693E00430F46E41CB56E6 /* RequestID.swift */; }; + A3387480D017AA1502172BEA /* EmojiSynonymCatalogTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1060EACEF2E526956DD78A2 /* EmojiSynonymCatalogTests.swift */; }; + A35DF6CCC2EE6DCD99601E0E /* InsertionSafetyGate.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB1A91DE0EA12F499D2129D0 /* InsertionSafetyGate.swift */; }; + A3ABF1872257F40B14CBA3C2 /* FieldEdgeIconIndicatorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F35CD1B715FCBB12BEB6CE62 /* FieldEdgeIconIndicatorView.swift */; }; + A54337B0B12D1FE2F332C7E1 /* MenuBarRecoveryPolicyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66B5FF2D1DCC846AABC134CF /* MenuBarRecoveryPolicyTests.swift */; }; + A5D76116479357C29E2D8405 /* CotabbyDebugOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = F47CD9DF50E7192A70D1870E /* CotabbyDebugOptions.swift */; }; A614AD79BE724ABA3721613B /* MacroModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = B41F06FEF208B30ECCF23A6F /* MacroModels.swift */; }; - A67B3F97DAEBEC7CA9B1215E /* PerDomainDisableSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = B25C3087D4A9F4DC52FD5A69 /* PerDomainDisableSettings.swift */; }; A6DAD9EB9AE88A319EADAC7B /* WindowScreenshotService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77B0121E7BB173F8A2B0B108 /* WindowScreenshotService.swift */; }; - A736C52C0D280A35946E37A3 /* SurfaceContextComposer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C602357DDED5D11C8B4567FB /* SurfaceContextComposer.swift */; }; - A773D96AC9EC16231633542C /* DownloadOutcomeClassifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3DE1975F3B5F4A70478DBF41 /* DownloadOutcomeClassifier.swift */; }; + A6EC0817EEF776BAC49D9E93 /* ClipboardRelevanceFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BF37C1A0F734BB940E371C2 /* ClipboardRelevanceFilter.swift */; }; A7A1B9BE242959B3EE396D27 /* LaunchAtLogin in Frameworks */ = {isa = PBXBuildFile; productRef = 7B0278A63FEEE8DEDB6C50DB /* LaunchAtLogin */; }; - A81E3481B0067E9D6F9D1325 /* ScreenTextExtractorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C34A98E5B05DB3F4FE81E70 /* ScreenTextExtractorTests.swift */; }; - A87978083EBE1AC294377F7C /* HuggingFaceSearchService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F426127917FCB1096134732 /* HuggingFaceSearchService.swift */; }; + A7F8B6C13DD0BA5304BCDFD2 /* OverlayController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A3C5A66AA93E50E4A64ED46 /* OverlayController.swift */; }; + A8854697A9EB29DB737C4A26 /* SelfCaptureGateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 571B221ACAFED86DABB10F48 /* SelfCaptureGateTests.swift */; }; + A88F3C7039E8DDB71C5D6246 /* TypoGate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38FCE0E0C38A776383B11809 /* TypoGate.swift */; }; A8A294534897C461CA5968F3 /* UnitConversionEvaluator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82E7794DF60664B1FA8F6E7B /* UnitConversionEvaluator.swift */; }; - A93A741C8C3973687D28F0B6 /* SuggestionEngineModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADBE3E6CC585C1683787C877 /* SuggestionEngineModels.swift */; }; + A8CCEC6C9693BE4378B2511E /* GhostFontSizeStabilizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2B5BB7FEB3B9BF121A5A46F /* GhostFontSizeStabilizer.swift */; }; + A91AB54FC7359160F08E4A04 /* TerminalAppDetector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06820B1E0B02D6A16506427C /* TerminalAppDetector.swift */; }; A982E243A4D8BC1BF7504B3E /* SuggestionInteractionState.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA942A53B7C09D1F4EC57239 /* SuggestionInteractionState.swift */; }; - AA0B5EC6BC922E143971F8AD /* TextLayoutCaretEstimator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8BF8DC1860CCF0DFA3A3DFD7 /* TextLayoutCaretEstimator.swift */; }; + A995A5B3B1A361F75F4BDC26 /* SuggestionAvailabilityEvaluatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7907403362CEEFB8FA24FCCD /* SuggestionAvailabilityEvaluatorTests.swift */; }; AA2419299B395D420FA930F5 /* FocusSnapshotResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04E25414C307A20B6F9F20EC /* FocusSnapshotResolver.swift */; }; AA2E09FF7E430D66ECA8ECD5 /* CotabbyApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC1EDFB535AAA2EE0D67828A /* CotabbyApp.swift */; }; + AA583808F225CEE0A846BBAB /* ConfidenceSuppressionPolicyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2F098B80AE83F7973168641 /* ConfidenceSuppressionPolicyTests.swift */; }; + AB1B25E213AE0A79C6993239 /* HuggingFaceModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = C736C539D4C97B5664E498BE /* HuggingFaceModels.swift */; }; AB5D37BA744546F14C5566E8 /* AppearancePaneView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFBE491B3CA04FE9069B7B0F /* AppearancePaneView.swift */; }; - AB9C9C001F97F9D14F8B192A /* TerminalAppDetector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F4C4A7EAF886E0CC945BFEF /* TerminalAppDetector.swift */; }; + AB8F186A7CB13779DAF729A0 /* MacroEngineTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66D6D153C80A5BDE4905B81E /* MacroEngineTests.swift */; }; + AC3A30CDDFE6ED0A0D87005F /* FoundationModelDriftEvalTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2228A6C24CDE5F9D8DE33BF3 /* FoundationModelDriftEvalTests.swift */; }; AC4A369EC73115E1F698934D /* SuggestionCoordinator+Input.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22544F4B756E3E4144497D17 /* SuggestionCoordinator+Input.swift */; }; + AC716016F8E26C1711C39F6D /* FileLogHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C90C9EBCB70327D215EAE07 /* FileLogHandler.swift */; }; + AC9860EFB16104DFC2358C4F /* AXTreeDumpWriterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC94E159E15C2F2C06D77B4F /* AXTreeDumpWriterTests.swift */; }; ACC1D8C50007AA193271F977 /* PerformancePaneView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEBD6113A3C1038BECC99245 /* PerformancePaneView.swift */; }; + ACF74908E01CD33F2F5C0FB9 /* DeviceInfoTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 159A3097EEFEC93396821019 /* DeviceInfoTests.swift */; }; AD0FE3F0F75A40B827109589 /* SettingsCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3350EDE01ED5125520C79D53 /* SettingsCoordinator.swift */; }; - AD361AA6F90A5E5F6F5005BF /* SpellingDictionaryCatalog.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4D9DF8723AF32C058BFACDE /* SpellingDictionaryCatalog.swift */; }; - AD39F3B11BC4ADE6C6E0A828 /* FocusModelsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C10BCF95451954641C602E4 /* FocusModelsTests.swift */; }; - AD635E15149E7266BC309F34 /* WordCountFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 815F2ABAF6AB75DA3AFBBCEF /* WordCountFormatter.swift */; }; - AD6E005ABE34AB7EBD92A30D /* RuntimeBootstrapModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1E6D9CCC0AA3674FEE57AE0 /* RuntimeBootstrapModelTests.swift */; }; - ADBCB725707ED11B19C7F08D /* InsertionStrategySelector.swift in Sources */ = {isa = PBXBuildFile; fileRef = E0D2FEEA4304C86324BAADAB /* InsertionStrategySelector.swift */; }; - ADFBCB4099CF919F3EC5BE7B /* SecureFieldDetector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1827565F4FAD3E4E61CA65C3 /* SecureFieldDetector.swift */; }; - AECC7289DA796B071B4FE3C0 /* MenuBarStatusLabelView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD42C7E2852F59BEF7972663 /* MenuBarStatusLabelView.swift */; }; - AF26E77871200BB1FAAEBE79 /* SelfCaptureGateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5A5591BEB9EE7B6E9064412 /* SelfCaptureGateTests.swift */; }; + AD7940C54015532D2E8973DD /* CompositionInputModeClassifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9316289DD11A72D3EAC0A929 /* CompositionInputModeClassifier.swift */; }; + AED18FC69D7ECC5A0A80B8FB /* CustomRulesCatalog.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51D93E3819F3BB0957FF3DF6 /* CustomRulesCatalog.swift */; }; AF55F1ABEDEA10C76C307CEC /* CotabbyAppEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 711293EA57808B9428C7B908 /* CotabbyAppEnvironment.swift */; }; AF86357E50ADC91838446A9A /* AcknowledgementsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B7A28471B8526C2693FFF65 /* AcknowledgementsView.swift */; }; + AFEB6885A317284467CD44ED /* SuggestionPauseModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17FD5822D3A75266B20A50CE /* SuggestionPauseModels.swift */; }; B00FDD3DEE0B73FF5136C91C /* FocusTracker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C9FDF029F7828CAF3FE8850 /* FocusTracker.swift */; }; - B02F46E94F74BAEBB90E165A /* PerformanceMetricsStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 979A7867966180A545BB44C4 /* PerformanceMetricsStore.swift */; }; B0B115C6EBAC37FF6115B4BE /* SuggestionCoordinator+Lifecycle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78E280F4F39A9D86840800D2 /* SuggestionCoordinator+Lifecycle.swift */; }; - B2BDCFF0824EE41FC1C0451A /* FocusSnapshotResolverLiveTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67D57F248880978A09DD28A6 /* FocusSnapshotResolverLiveTests.swift */; }; - B2F7589B8D32ACF97BB642AB /* HuggingFaceModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = A520809E71697E3BB9A8139C /* HuggingFaceModels.swift */; }; - B335B04A3EB50E51FF9C8C0F /* PerDomainDisableSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = B25C3087D4A9F4DC52FD5A69 /* PerDomainDisableSettings.swift */; }; + B1E93ED4D7C0B9BB77F95ADC /* CompositionInputModeClassifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9316289DD11A72D3EAC0A929 /* CompositionInputModeClassifier.swift */; }; + B2994532783F7199B1E84A61 /* SystemResourceSampler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E36DC1471E2D627F4735A0C /* SystemResourceSampler.swift */; }; + B2F78CEF3A83C191E72214D4 /* SuggestionSessionReconciler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 022C91940E688482C3F80423 /* SuggestionSessionReconciler.swift */; }; + B3E9C077CF064F2DEC3E22B8 /* ModelAndPresentationValueTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BA1D28712B262ABD96F8399 /* ModelAndPresentationValueTests.swift */; }; B422256933F7BEAEF2FC4176 /* es-100l.txt in Resources */ = {isa = PBXBuildFile; fileRef = 620D393D3B7E687A08FA9446 /* es-100l.txt */; }; B4D36F5D03E3143CE74582F9 /* AppearancePaneView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFBE491B3CA04FE9069B7B0F /* AppearancePaneView.swift */; }; B50EDCA5C4C5FE4FC548AA74 /* StaticTextRunWalkThrottle.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0C3E6241B0F35C7A2C85965 /* StaticTextRunWalkThrottle.swift */; }; B55B160E0534AE23BAC1C3DA /* CotabbyApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC1EDFB535AAA2EE0D67828A /* CotabbyApp.swift */; }; + B57DBA2359D4D666E20BDDBD /* CompletionRenderModePolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = ACAD48CDC2F27F49558473F1 /* CompletionRenderModePolicy.swift */; }; B588C09233E69C6EDC69BEDC /* LlamaSuggestionEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE04620C905041680116BE80 /* LlamaSuggestionEngine.swift */; }; - B6346C2A6D8EB02A5BD0E49B /* CompositionInputModeClassifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F283E5B403F9FEBFB4BA04A /* CompositionInputModeClassifier.swift */; }; + B5AC1F97B254ECF0CAE43009 /* InsertionStrategySelector.swift in Sources */ = {isa = PBXBuildFile; fileRef = DFEBE38C24E36D1FA3106FE5 /* InsertionStrategySelector.swift */; }; + B5E3468CA0157FBEA53E96BD /* SuggestionAvailabilityEvaluator.swift in Sources */ = {isa = PBXBuildFile; fileRef = AADD165EBA2FE4C66F5BA885 /* SuggestionAvailabilityEvaluator.swift */; }; B65B49F24F59154A7611FD22 /* HomePaneView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1123AB515110BD0CBA39490 /* HomePaneView.swift */; }; - B6652D81162C64248AA4CF0B /* EmojiPickerPanelController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 764659D09C3F0E8FBD267102 /* EmojiPickerPanelController.swift */; }; - B6703DAE949C7FB034634424 /* CurrentWordExtractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 247561C626843957CFB4B632 /* CurrentWordExtractor.swift */; }; B67EEF6865EB7C2205605608 /* EngineAndModelPaneView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC9ECD5408B0F5708149B5C0 /* EngineAndModelPaneView.swift */; }; B6815BBBC91809A6EAA914CB /* UnitConversionEvaluator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82E7794DF60664B1FA8F6E7B /* UnitConversionEvaluator.swift */; }; - B691B8378FD73E186A72450C /* SuggestionRequestFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDE858CB1E687E3CEB8FDD5B /* SuggestionRequestFactory.swift */; }; - B6A84E11643F88D88B602F3D /* SuggestionAnchorCacheTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BC3BE51EFE0A1B2B13BD02B /* SuggestionAnchorCacheTests.swift */; }; + B6B82B72D4AE1ABFFA78978F /* SuggestionCaretLayoutRepairTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EE87C835317AF47C007C6B6 /* SuggestionCaretLayoutRepairTests.swift */; }; B6BA7DF77DCA55F9EF090AEE /* ScreenTextExtractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59E299BE2E9D42A33D5D2F5D /* ScreenTextExtractor.swift */; }; - B709B362B786AA6ED548C673 /* TypoCaseTransfer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08CE63B8725EBD71A4C024E1 /* TypoCaseTransfer.swift */; }; B71A95428B4003A29685FD5D /* WelcomeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63F7C6D15674B3043C4CEEAC /* WelcomeView.swift */; }; B782EC08B7516791BDB21172 /* FieldStyleCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7FBF2B766E728F25899B64E /* FieldStyleCache.swift */; }; - B7A98BC225304E4DFED9E622 /* OnboardingTemplateRecommender.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA878B447441BB4F3E327CC8 /* OnboardingTemplateRecommender.swift */; }; - B816C6191738AB616F2E8D2D /* SuggestionCoordinatorTestSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C174D8294858BF9DF3D361D /* SuggestionCoordinatorTestSupport.swift */; }; - B849D68E0474CECAE809881C /* DebouncePolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DC17643448271DE5DE61A89 /* DebouncePolicy.swift */; }; - B909A118616C0C47AAB6039A /* SpeculativeAcceptanceContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7EB66904C35A7D8BEF5D2A5 /* SpeculativeAcceptanceContext.swift */; }; - B93AB7E845086F6FBB068369 /* SuggestionRequestFactoryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE94342B888A5A2CCF66BC93 /* SuggestionRequestFactoryTests.swift */; }; + B81FF9FB9A794656F63DEC01 /* SettingsIndexTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 865F7C0490DAF7D77523BE84 /* SettingsIndexTests.swift */; }; + B8C71E65399B88D5543644DE /* SuggestionModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 977CE0DE2F43D3F964C0EC73 /* SuggestionModels.swift */; }; B95C928082728C49D851E40D /* SettingsSearchResultRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE8D7424D350FC7C0685DBEC /* SettingsSearchResultRow.swift */; }; - B9623395B31459D9D45B1320 /* CurrentWordExtractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 247561C626843957CFB4B632 /* CurrentWordExtractor.swift */; }; + B99A9C90F3688BEFD28513AD /* SuggestionCoordinatorPredictionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA86BBD7476CFAA0BB6A1C55 /* SuggestionCoordinatorPredictionTests.swift */; }; + B9D060250BDC10C5FD05B70B /* EmojiMatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC31A792E63C132BE8ABDFD2 /* EmojiMatcher.swift */; }; B9F400BCC20757DA5DB0B5F9 /* FoundationModelSuggestionEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5664E34B23FBDF69292FEF43 /* FoundationModelSuggestionEngine.swift */; }; - BA74281E2DDE659C5CACBF24 /* KeyRecorderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A567677424A82D9EEF47495 /* KeyRecorderView.swift */; }; BB3166B270865C8C6EFBA1CF /* FoundationModelAvailabilityService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8724ECA8FABBC82B0A2B943B /* FoundationModelAvailabilityService.swift */; }; - BB6325CA50F97B18B9725918 /* SuggestionTextNormalizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = B424E2AC97C99D335B0D5751 /* SuggestionTextNormalizer.swift */; }; BBBD7B4628BA1160DD6B4BDB /* MacroModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = B41F06FEF208B30ECCF23A6F /* MacroModels.swift */; }; - BBE22CE4EF43247F8775B25D /* FocusPollBackoff.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09FADF683BE7B3558377FA76 /* FocusPollBackoff.swift */; }; + BBC7F32FC99DBC41B0102E54 /* OpenAICompatibleEndpointModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1ABCE733783332BE52E43D67 /* OpenAICompatibleEndpointModels.swift */; }; + BC0B718DE571AC3AC182DC7E /* StreamedGhostTextPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2572996D6A44E20E2C0F9060 /* StreamedGhostTextPolicy.swift */; }; BC0FDF9998CA892F4EE0E2E2 /* SuggestionCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F961F5DF2A392F6F5F94F8A /* SuggestionCoordinator.swift */; }; - BC27A2F336857345642A30E5 /* SettingsSearchRanker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 866D74711A35E0085D2A4BB3 /* SettingsSearchRanker.swift */; }; - BC33B7F6EF791AD304646655 /* SuggestionAnchorCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = E99C99D2782EAF0492F964EF /* SuggestionAnchorCache.swift */; }; - BD77B0CFB09BF0B4EDB1B0C6 /* TagChip.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB317C82CE2CBC69056BA4B8 /* TagChip.swift */; }; + BC973BC6939231E0DB1836F1 /* SelfCaptureGate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13838E1372956FF2CFC5ECCC /* SelfCaptureGate.swift */; }; + BC9C2F30AF33F820256E4FBB /* PermissionModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = D47E1471C110614F0D07E399 /* PermissionModels.swift */; }; + BCD54829D3DD33D8B034AA73 /* SuggestionSettingsModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DFFEDED24AED136A9C83F730 /* SuggestionSettingsModel.swift */; }; + BD03F84A6D6C68005A8FC682 /* TextDirectionDetector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8489C1318F0232BFF9F2758C /* TextDirectionDetector.swift */; }; + BD4A3B059DBB46C791FF3FF7 /* EmojiUsageModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68C4773B9316036F7E594EE1 /* EmojiUsageModels.swift */; }; + BD4D2296BC699984D1916450 /* LanguageCatalog.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE6EA89178F52F6D5B90CBFE /* LanguageCatalog.swift */; }; + BD94A513828013BDDDF8BEE9 /* ApplicationBundleMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46B67EF101326F317EFD670D /* ApplicationBundleMetadata.swift */; }; BD94A8663D79D9609461F894 /* SurfaceContextCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8CF6B7FFBF77B4290F5F2FB8 /* SurfaceContextCache.swift */; }; - BE3CB85508055D159C35020A /* LlamaSuggestionEngineCancellationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AABCC3FD99B1824A81E665F3 /* LlamaSuggestionEngineCancellationTests.swift */; }; - BE688EC1957B4AE004063EFE /* TypoGateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C727BF6FF8ACAAED30B0329F /* TypoGateTests.swift */; }; + BDC565D0F9830B3FFDA4252C /* EmojiUsageStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 846A1C3328B3B1CB42E2E46B /* EmojiUsageStore.swift */; }; + BE16C2851265AB659A322835 /* LlamaSuggestionEvalTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31A62CE4DA3E55B5E117DBD8 /* LlamaSuggestionEvalTests.swift */; }; BE79CFA6A7A37F25B2AA4D56 /* LlamaRuntimeCore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 944065A858D9BC936CB12B23 /* LlamaRuntimeCore.swift */; }; - BEF746D51C69FE426376C89A /* SystemResourceSampler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27A5D63F390E9B7A7FE343FE /* SystemResourceSampler.swift */; }; + BF209645C5E3122B3C9C4381 /* FocusCapabilityFlickerGate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58C4F99A9232DD9E7B5A77BB /* FocusCapabilityFlickerGate.swift */; }; BF60D99576F60321078464AD /* SystemSettingsWindowLocator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5976600F428C1265121D4C0C /* SystemSettingsWindowLocator.swift */; }; - BFCA7FAFDAEBF586AB615567 /* ClipboardRelevanceFilterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90B0D133AB77A2503FB08827 /* ClipboardRelevanceFilterTests.swift */; }; - C0537A515AED443F6C61DB2A /* MenuBarSections.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83A810F9D28A18BA6F2066C7 /* MenuBarSections.swift */; }; + BFD3F43E9C83F3D0F7BF9ADE /* CalendarAccessibilityCapturePolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3FE7D19D22434E3E24804999 /* CalendarAccessibilityCapturePolicy.swift */; }; + BFE1811C699B5B87530C3248 /* ControlTokenMarkers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33D4F378E5C70CAF7827A90A /* ControlTokenMarkers.swift */; }; + C0468063222C5FEA7C1CFAB3 /* TypoCaseTransfer.swift in Sources */ = {isa = PBXBuildFile; fileRef = B293615FC411551C3FC15528 /* TypoCaseTransfer.swift */; }; + C059BDAD7E8F82B058201A87 /* OnboardingTemplateRecommenderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FFD3AFACAAC963DAF59D153 /* OnboardingTemplateRecommenderTests.swift */; }; + C080D50FA0ED1F32C92BCC36 /* HuggingFaceModelsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D2E806C1915514651343055 /* HuggingFaceModelsTests.swift */; }; C0B833234748E82D3382631A /* emoji.json in Resources */ = {isa = PBXBuildFile; fileRef = C379D77029D6E88C8C1B9AF7 /* emoji.json */; }; - C0F757D74758B76DA2962BC5 /* LlamaDecodeGateDefaultsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B3E5554AAC5D0007CCC61A7 /* LlamaDecodeGateDefaultsTests.swift */; }; - C0FE11D76BDF01A5470C554D /* FocusCapabilityFlickerGate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A44BEC8C23FF227731DD0CD /* FocusCapabilityFlickerGate.swift */; }; - C149EAED2CF6F8B6274053E0 /* AppSurfaceClassifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94B0830FBE4F2E239F670DBA /* AppSurfaceClassifier.swift */; }; - C178E35A9A713BD4D9943E62 /* TypoCaseTransfer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08CE63B8725EBD71A4C024E1 /* TypoCaseTransfer.swift */; }; - C29FE24B690BB883744AD248 /* FocusDebugOverlayController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F5E263AB69029D5E13D5EE8 /* FocusDebugOverlayController.swift */; }; - C2C958D6E5F5FE1CCC414BCE /* SuggestionSubsystemContracts.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEB16474A67CE1D210B944C9 /* SuggestionSubsystemContracts.swift */; }; - C3B6C8B9DE20A71C65D390DA /* BrowserDomainTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F761083EA5465023D82B5F4 /* BrowserDomainTests.swift */; }; - C423CCD7198ECE27DF260268 /* SurfaceContextComposerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29CDC8BE5312B9BEFD9B22CB /* SurfaceContextComposerTests.swift */; }; + C14049A1A7C33F8CADDB3675 /* EmojiUsageStoreTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3D991D3536ED989C89AF44D /* EmojiUsageStoreTests.swift */; }; + C1ADF50B2D3A3A05CD0FFA68 /* LlamaEvalScoring.swift in Sources */ = {isa = PBXBuildFile; fileRef = 202086735E28B96BBCE55E6B /* LlamaEvalScoring.swift */; }; + C2CD418FED8EB332C6417AF9 /* TokenCountEstimator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A502BFB13373D1931B082CD /* TokenCountEstimator.swift */; }; + C3A3977AF84C7037BE1AD17E /* TextDirectionDetectorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F661AAB8CC3ABDA49A957864 /* TextDirectionDetectorTests.swift */; }; + C3C347E9485B70C59BF5EFC8 /* SuggestionQualityMetricsStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50119F67E7BB9FBC8EA94BF2 /* SuggestionQualityMetricsStore.swift */; }; + C3F63C89E82ED82DF24BD603 /* TypoGateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8BE5F414704A8264C2946A50 /* TypoGateTests.swift */; }; C4805FA1A6CD552E572D7012 /* InMemoryLogging in Frameworks */ = {isa = PBXBuildFile; productRef = C42F41C6497D6199DA27D6CD /* InMemoryLogging */; }; - C4C6734678797669055988E0 /* AppUpdateManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD9573F3504CAE6891DF9B7D /* AppUpdateManager.swift */; }; - C5275D0DA6F5A9D6BFED943D /* CotabbyBrand.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9B27E3D3FD8008CE2C1B616 /* CotabbyBrand.swift */; }; + C526BC1F5D44376F25E48D8F /* SymSpell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A2E9AF341F8F7043D5344B20 /* SymSpell.swift */; }; + C52E6F9FECD2FB173386F836 /* MenuBarStatusLabelView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB051B5B72986C03AB1EE428 /* MenuBarStatusLabelView.swift */; }; C56ABA04AE27A9943368035C /* CurrentWordSpellChecker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 733BF6287BDE599B02A12271 /* CurrentWordSpellChecker.swift */; }; - C5ADE88B2504F252278E3DD5 /* OverlayController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F308F6E274CC645E27CB651F /* OverlayController.swift */; }; + C587EFD760A803711CD9C57F /* ApplicationBundleMetadataTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD46042FD66F6D6F206B1763 /* ApplicationBundleMetadataTests.swift */; }; + C5F026E7DF2AACC113ED05CE /* SecureFieldDetectorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8EBC9F1890DD2FFC4884A5C /* SecureFieldDetectorTests.swift */; }; C607A624A0FB697486C56B8E /* PowerSourceMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB235F0DEA53295DAF8B4FA0 /* PowerSourceMonitor.swift */; }; - C618C5595DA9C57C806A3E03 /* SettingsAttentionEvaluatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BC293F6125E2B14DCF05AD9 /* SettingsAttentionEvaluatorTests.swift */; }; + C60F976B84B6101EC0024919 /* SuggestionCoordinatorLifecycleTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3281A86A9144C82772337D1B /* SuggestionCoordinatorLifecycleTests.swift */; }; + C63BFB26E705A6BC81B53FE5 /* DeviceInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6378CE9064B5A46DF4B07A1C /* DeviceInfo.swift */; }; C63F95C324C29940FAC6B973 /* de-100k.txt in Resources */ = {isa = PBXBuildFile; fileRef = 4B8665A5495891F9E3DDA48B /* de-100k.txt */; }; - C6925440737F37F537622F35 /* StreamedGhostTextPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 299BD7B741DA4AAE6A061BAD /* StreamedGhostTextPolicy.swift */; }; - C6A112B51525F988EA46F725 /* SystemResourceSamplerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9255CBCDE66253F521EE0F08 /* SystemResourceSamplerTests.swift */; }; - C6A91AD96F52DB72947830C0 /* DownloadableModelCatalogView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB5C2AE9A7E55495D26AD074 /* DownloadableModelCatalogView.swift */; }; - C71B594433F3B411CAE5DE7E /* FocusCapabilityResolverTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4F6D5F94B238F7B4BE7C247 /* FocusCapabilityResolverTests.swift */; }; - C7849B86C5F2EE7D0A81AEF7 /* HuggingFaceAPIClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110CB0B53016644EF7840301 /* HuggingFaceAPIClient.swift */; }; - C7E1F0365602914CAC03F342 /* SuggestionSettingsStoreTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F050CE655081B840E361899E /* SuggestionSettingsStoreTests.swift */; }; - C8CA6DACEAA83336551D4EFA /* SuggestionSettingsData.swift in Sources */ = {isa = PBXBuildFile; fileRef = D93563FDA25DFC0038E5F887 /* SuggestionSettingsData.swift */; }; - C9426ADFCA2EC1D11D841A2A /* PerDomainDisableSettingsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC582636750B78D497119845 /* PerDomainDisableSettingsTests.swift */; }; - C9B815652CED38966C53A5E8 /* EmojiVariantResolverTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE8BB19D8EC9A75CD3458A6B /* EmojiVariantResolverTests.swift */; }; - CA5B2D226FBAA5419E78F14F /* SuggestionSessionReconciler.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE0AA0503128B0FC3951D700 /* SuggestionSessionReconciler.swift */; }; - CADCC1B825DBE7BFC3135F43 /* LanguageCatalog.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF4BB93056F291FD24EFAD22 /* LanguageCatalog.swift */; }; + C6EE8C731928DB2A26945127 /* FocusTrackingModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 341A1BBA636AEBA2491F6A26 /* FocusTrackingModelTests.swift */; }; + C7A48F93691943EF2EEBD775 /* DownloadOutcomeClassifierTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B3AD6D4125ED99669F4EC32 /* DownloadOutcomeClassifierTests.swift */; }; + C8434622BFCE324E7044E581 /* TickMarkSlider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1BB42779285A1BA40B7848C8 /* TickMarkSlider.swift */; }; + C8A3B724BB54A1209583B78B /* VisualContextStartCoalescer.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEF8F1A40EAA82773C07F8B9 /* VisualContextStartCoalescer.swift */; }; + C8A5B938A8CBFB9587E91988 /* SystemResourceSamplerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18705DCA94FBA82F6FB3DBB0 /* SystemResourceSamplerTests.swift */; }; + C8B5E45A6F45B307C067CF61 /* SurfaceContextComposer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27B03589D82D0ADCF41B9CD0 /* SurfaceContextComposer.swift */; }; CAFDC7A78647485F9C0AD167 /* SuggestionCoordinator+Lifecycle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78E280F4F39A9D86840800D2 /* SuggestionCoordinator+Lifecycle.swift */; }; - CB65A79F164269991FABC32E /* SuggestionStateHelperTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19DB9558F4D3AFB108D71649 /* SuggestionStateHelperTests.swift */; }; + CB37AE4BB3020A130E0B0239 /* SuggestionCoordinatorAcceptanceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4C1DDA236561DF284073F33 /* SuggestionCoordinatorAcceptanceTests.swift */; }; + CB405DA17FEF5051AE19B838 /* ConfidenceSuppressionPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95EF4BBE7320021CB8CD54D9 /* ConfidenceSuppressionPolicy.swift */; }; + CBFEC8E88D17BBB6FBEE79CE /* EmojiTriggerStateMachine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2412E9C50B4D2B3C57F5E3C6 /* EmojiTriggerStateMachine.swift */; }; + CC388DA5BCF3D6551AE5D11F /* SentenceBoundaryClassifierTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8104A4A22860581743CCC81 /* SentenceBoundaryClassifierTests.swift */; }; CC5EB06A46C84F05E300A903 /* ArithmeticEvaluator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F7ED2D9D71CFAD9A30977E9 /* ArithmeticEvaluator.swift */; }; - CC98B842D10574C5206BEFA7 /* FocusCapabilityResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70367FCC1E0F08EE3B8EB26F /* FocusCapabilityResolver.swift */; }; + CC615916E478E98D403F5714 /* SettingsAttentionEvaluator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79AAAB1C46A0E5A9C6FC7D3D /* SettingsAttentionEvaluator.swift */; }; + CC6BE0B13CCF9B1DE0466DC2 /* DecodeStopPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = C319B4FF652512A69377DD5C /* DecodeStopPolicy.swift */; }; CCB8D287A5FF3863B9DE9246 /* ChromiumAccessibilityEnabler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8896D976C7F116EBA0F3969F /* ChromiumAccessibilityEnabler.swift */; }; - CCC83DC5AE51C17F153D5A6A /* PermissionModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D82FFC568527700EC17C07D /* PermissionModels.swift */; }; - CE20BDEA713D21200B8822C7 /* MenuBarRecoveryPolicyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39366D6D7D5946BF9330D038 /* MenuBarRecoveryPolicyTests.swift */; }; + CDDEF3C29AEACA986034C01C /* SuggestionEngineModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3DB1A3F7D6C0FF28717E6D4C /* SuggestionEngineModels.swift */; }; + CE218D30F69D215095E68456 /* AXHelperTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E2AA5BD865E0BCFB53DC699 /* AXHelperTests.swift */; }; + CED430DD80E4769920E3C0E5 /* FocusModelsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F7E1691BC93836AE2FA8931 /* FocusModelsTests.swift */; }; + CF04C28598AF9A437990C8A4 /* SurfaceContextComposerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 652973AF18C20D51F81F76C5 /* SurfaceContextComposerTests.swift */; }; CF2EADEEEF5AA63FB9B9EA8E /* SuggestionInserter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A3D1125B962CBE0269EEDDB /* SuggestionInserter.swift */; }; - CF39EB76C3ECF8F764C1B4FB /* DeviceInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29ED42C4BDD0C521101AF95E /* DeviceInfo.swift */; }; + CF391BC4A3C80C41048D64D1 /* TypoCaseTransfer.swift in Sources */ = {isa = PBXBuildFile; fileRef = B293615FC411551C3FC15528 /* TypoCaseTransfer.swift */; }; CF4205B85D881B8176590D25 /* FocusSnapshotResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04E25414C307A20B6F9F20EC /* FocusSnapshotResolver.swift */; }; - CFDB42AB7DC7F9663450BC7F /* InsertedTextAdvance.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1267FF524A170ACC144E919 /* InsertedTextAdvance.swift */; }; + D0BA4677F47C6943310B8A28 /* PopupChrome.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87C6335EED41343595F17A08 /* PopupChrome.swift */; }; D0D4C0E28F5CD99669A49414 /* FoundationModelAvailabilityService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8724ECA8FABBC82B0A2B943B /* FoundationModelAvailabilityService.swift */; }; + D15D53DFCDD2E41391E4AADE /* EmojiRecents.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7786D3C52CC72971B74657F /* EmojiRecents.swift */; }; + D1CB2B2D33E5B6C76DDB2A9C /* FocusTrackingModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 480596411FBB38BA3B993EDC /* FocusTrackingModel.swift */; }; D1D7D50E5C620042CEA3A77E /* LaunchAtLogin in Frameworks */ = {isa = PBXBuildFile; productRef = E0AA9F90B83B823132880E6F /* LaunchAtLogin */; }; - D21EBD25BCB37E69B633BC00 /* CotabbyDebugOptionsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93AF1246C1C2E296A1162E63 /* CotabbyDebugOptionsTests.swift */; }; - D22C324C4FDB813E54AAD113 /* ClipboardContentDistiller.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96495E4147D828C0B1B22765 /* ClipboardContentDistiller.swift */; }; + D22F513CD1A4A1F8734FF067 /* EmojiPickerPanelLayoutTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94979FB3D3560BF2C5787E31 /* EmojiPickerPanelLayoutTests.swift */; }; D2B271E0FAE4F65FC2287930 /* SymSpellCorrector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12E1E72C09460390583D98D1 /* SymSpellCorrector.swift */; }; D2BB9B47E0E1619021931B49 /* WritingPaneView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D48B95B6665109B6C6A63B42 /* WritingPaneView.swift */; }; - D2CAA59F69BCBC07DDA2B0D8 /* ClipboardContextProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CF4FB0EC6C1BEB4EA74910A /* ClipboardContextProvider.swift */; }; + D2DB4238276DD73A8D5F588C /* ClipboardRelevanceFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BF37C1A0F734BB940E371C2 /* ClipboardRelevanceFilter.swift */; }; D2F1DD215989BF32675308C2 /* SuggestionCoordinator+Input.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22544F4B756E3E4144497D17 /* SuggestionCoordinator+Input.swift */; }; - D368C9A8531677174956DE50 /* ClipboardContextProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CF4FB0EC6C1BEB4EA74910A /* ClipboardContextProvider.swift */; }; - D3B43622E5A41B11E7AF527E /* TrailingDuplicationFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = D408D647412C59F3E692C42B /* TrailingDuplicationFilter.swift */; }; - D3BC4EA192B234EB22361186 /* SettingsSearchRanker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 866D74711A35E0085D2A4BB3 /* SettingsSearchRanker.swift */; }; - D46A0DB70B07F487431F48F6 /* EmojiPickerPanelLayoutTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7B185BA246A526CBA85E581 /* EmojiPickerPanelLayoutTests.swift */; }; - D46BCACE71169BF8403948CE /* BundleVersion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01D84EED1A6A711F39DEA18F /* BundleVersion.swift */; }; + D42BBBD704B21898047615E0 /* LlamaRuntimeModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16967F782C95CEB09B9C8D49 /* LlamaRuntimeModels.swift */; }; + D4460806E35A0FABE6CBD339 /* EmojiMatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC31A792E63C132BE8ABDFD2 /* EmojiMatcher.swift */; }; D4DD6B6D22598BB3B98792DA /* AGPL-3.0.txt in Resources */ = {isa = PBXBuildFile; fileRef = 6F0EE728C0B1A7AD6B19CD0C /* AGPL-3.0.txt */; }; D553BAA6C9F478533BD4A221 /* PermissionsPaneView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7113D3373525113CA69E7597 /* PermissionsPaneView.swift */; }; - D5CAF3B590E5EC2AFC72E57A /* VisualContextStartCoalescerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 050D929E13BE52E6282B64D2 /* VisualContextStartCoalescerTests.swift */; }; - D603EC842D9D7A1A81899050 /* PermissionModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D82FFC568527700EC17C07D /* PermissionModels.swift */; }; - D648DD70AD847F67B77CE052 /* OnboardingTemplateRecommenderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01B72736E416910878E8E493 /* OnboardingTemplateRecommenderTests.swift */; }; - D6AD25168F108DA8D60E76EF /* SpellingDictionaryPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF3A73EB848780061FC162C0 /* SpellingDictionaryPicker.swift */; }; - D75626719A38F535D475C675 /* WebContentFieldDetector.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3A35FAA742408D002B75920 /* WebContentFieldDetector.swift */; }; + D58B73ED080E5D253A838FAC /* SpellingDictionaryResourceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBDBD55F205C609303913423 /* SpellingDictionaryResourceTests.swift */; }; + D5929DF79BA02EE9B170B4D5 /* FieldEdgeIconIndicatorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F35CD1B715FCBB12BEB6CE62 /* FieldEdgeIconIndicatorView.swift */; }; + D79C2A5DCDAFB9741E208103 /* WordCountFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14E22DCC1852B8E4B235D256 /* WordCountFormatter.swift */; }; + D7A97AE39C5F52C0B2EE99B2 /* FocusCapabilityFlickerGate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58C4F99A9232DD9E7B5A77BB /* FocusCapabilityFlickerGate.swift */; }; D800277BE3296DE2FB8198A8 /* ChromiumAccessibilityEnabler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8896D976C7F116EBA0F3969F /* ChromiumAccessibilityEnabler.swift */; }; D80D98F6C7B86AAF8C831865 /* he-100k.txt in Resources */ = {isa = PBXBuildFile; fileRef = 7C9BB65FA5FC42B89766B037 /* he-100k.txt */; }; D81AC2294A64E7A95B29E081 /* fr.txt in Resources */ = {isa = PBXBuildFile; fileRef = 5DCA3E46621815A19300365F /* fr.txt */; }; - D90C889A623A928F4F5FDC7B /* HardwareCapabilityProbe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41BBD5A4BA08CABE77860886 /* HardwareCapabilityProbe.swift */; }; + D84D021FD61D9C18B08E168B /* EmojiCatalogMatcherTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC2A342474E4B41D8B385DC2 /* EmojiCatalogMatcherTests.swift */; }; + D8E0E5FA644F62103D18645B /* WordCountFormatterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0854896090B568FFB1926D24 /* WordCountFormatterTests.swift */; }; + D98538D3C1344422354B0B2E /* SuggestionDebugLoggerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A02F9151AEBBD825D64CEFA /* SuggestionDebugLoggerTests.swift */; }; D9C51DEDF01033E276A479CE /* AXTextGeometryResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB58035EFFD65B767949BAE6 /* AXTextGeometryResolver.swift */; }; - DA23422A2CF77CFD3B1283C8 /* OnboardingTemplateFeatureListTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D814BBA41CF29E8DD9954651 /* OnboardingTemplateFeatureListTests.swift */; }; + DA00477BB00EB3E95F204CB2 /* EmojiUsageStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 846A1C3328B3B1CB42E2E46B /* EmojiUsageStore.swift */; }; + DA92312A2DE3518DAF0C7819 /* SuggestionStateHelperTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BEB506B1042CD234D77258D4 /* SuggestionStateHelperTests.swift */; }; DA9360725086404C953BCE5A /* OpenAICompatibleAPIClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96C455CB8D11E89CEDA0B3AE /* OpenAICompatibleAPIClient.swift */; }; DAD77998F793468D4D64B705 /* DateMacroEvaluator.swift in Sources */ = {isa = PBXBuildFile; fileRef = F671FE53CDEAE9091EFBCE45 /* DateMacroEvaluator.swift */; }; - DB1310FF3576ACA6472C4DB1 /* TrailingDuplicationFilterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E19A5B462891263BDFB56607 /* TrailingDuplicationFilterTests.swift */; }; - DB7BE0A914BF75654D9EA6FF /* InsertedTextAdvance.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1267FF524A170ACC144E919 /* InsertedTextAdvance.swift */; }; + DB910312901B91E12AFC3E18 /* LlamaSuggestionEngineStreamingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECFF9A4976DD6CE584E00307 /* LlamaSuggestionEngineStreamingTests.swift */; }; + DB94828A33BEFD2393106F33 /* CompletionSeamGuard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3806EA97A628F15F155262D5 /* CompletionSeamGuard.swift */; }; + DBB48F0E93B03E5137B15ABD /* PerformanceMetricsStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA93AF731DE8931F72C3C65F /* PerformanceMetricsStore.swift */; }; DC0394C83D334B92A512A775 /* NOTICE.md in Resources */ = {isa = PBXBuildFile; fileRef = 66CF2A70D4699421AC9BD849 /* NOTICE.md */; }; - DC84D6A6A2F9A1060CD20ABB /* TokenCountEstimator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1BA30E71C21C77BB6EA4C166 /* TokenCountEstimator.swift */; }; - DCABB8D2B391C7820D6CA5FF /* InsertionSafetyGate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D472F9F396672E57873303B /* InsertionSafetyGate.swift */; }; - DD065767BC8B557C839464FE /* ModelFileValidator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C4E5869D103865486AAAEEC /* ModelFileValidator.swift */; }; + DC6C087A7C0E973967BB38D5 /* BaseCompletionPromptRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C1AE4120FA68524700C9324 /* BaseCompletionPromptRenderer.swift */; }; + DC6FEE1602B6891CA4D0CDCA /* VisualContextStartCoalescerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70F68E9A9255F607C4439ED5 /* VisualContextStartCoalescerTests.swift */; }; + DCCF7FDE5DA2A048EB6D2DE5 /* OllamaPreloadWorkControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EFECCCD6B271123F6D7CCEB /* OllamaPreloadWorkControllerTests.swift */; }; DD12A23468C18D37D4C64D88 /* WelcomeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63F7C6D15674B3043C4CEEAC /* WelcomeView.swift */; }; DD7FA343F1C21C4569F6D181 /* ScreenshotContextGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B84BAE361626891F19DC9DB /* ScreenshotContextGenerator.swift */; }; + DDC49DC77FDC6395581700C2 /* SuggestionFadeInPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = A62CBDE1462C7733E4228BBE /* SuggestionFadeInPolicy.swift */; }; + DDD1B7DA589286FE6D01DACF /* SuggestionAnchorCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 841C71C9523CF19D9212F1CD /* SuggestionAnchorCache.swift */; }; DDEDCBAA2196303455F6926A /* AcceptanceModePickerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5DAF68AEBFE334F68A65E82 /* AcceptanceModePickerView.swift */; }; - DE236C9285635C686D66A2F6 /* TerminalAppDetectorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43E37A7E835D3BDE6265843C /* TerminalAppDetectorTests.swift */; }; DE5879DCB3223CF67C9F399A /* MacroController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4638C74239D1DE2DC4D87975 /* MacroController.swift */; }; - DF8794793110A8ED234CBA96 /* OnboardingTemplateRecommender.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA878B447441BB4F3E327CC8 /* OnboardingTemplateRecommender.swift */; }; - DFF3AA49E0770DE3CFBC24C1 /* SuggestionOverlayStabilityGate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2F95847D76893C8A5B504B4 /* SuggestionOverlayStabilityGate.swift */; }; + DED8731A5A34A10349AA05A8 /* EmojiPickerModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8736D4321E8BF847D1F7338E /* EmojiPickerModels.swift */; }; + DFC02F29B2F44DA8176F7EEF /* GhostTextColorPreset.swift in Sources */ = {isa = PBXBuildFile; fileRef = 786A5B721D148D09B5BDE651 /* GhostTextColorPreset.swift */; }; E0DAB3CDE782C330AF21FC0D /* DateMacroEvaluator.swift in Sources */ = {isa = PBXBuildFile; fileRef = F671FE53CDEAE9091EFBCE45 /* DateMacroEvaluator.swift */; }; - E0ED91F0E8963870A4E6516E /* InlinePreviewPanelController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AAEFF8BAEC9168CADEDD4757 /* InlinePreviewPanelController.swift */; }; - E14AF4034E71EDE34646FEEC /* ActivationIndicatorController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D84D4528EEC9EFEB8AE8E318 /* ActivationIndicatorController.swift */; }; E17CAA453B1F534D284F0D89 /* PermissionHostApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6ACCB12E4DB32D2F2BEA567 /* PermissionHostApp.swift */; }; - E311B80968761E90FBA19A8A /* TypoGate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8412FE2BAC406421248A03B /* TypoGate.swift */; }; + E2E830C1D5FEFE5F621018FE /* EmojiUsageModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68C4773B9316036F7E594EE1 /* EmojiUsageModels.swift */; }; E313639E71AE1374D2B9A956 /* SuggestionWorkController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B2D97BAA3618A7D0357AC44 /* SuggestionWorkController.swift */; }; - E38801433B99E65BD7E45A0E /* LlamaPromptCacheHintTrackerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CA88BB29BC8727878C99E95 /* LlamaPromptCacheHintTrackerTests.swift */; }; - E3C0326597083762BA6D76CA /* DebouncePolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DC17643448271DE5DE61A89 /* DebouncePolicy.swift */; }; - E3CAAEFAAB5BB24CEE16445B /* LLMIOFileHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D610FCA3A97249DCCE7D0B8 /* LLMIOFileHandler.swift */; }; - E4382BEA8A8551612E5966B9 /* BaseCompletionPromptRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85EF79E6144D6C6AD062B569 /* BaseCompletionPromptRenderer.swift */; }; - E46F50AEDA8FE13B02E3FA8D /* AXHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC70775535A3428991025AB8 /* AXHelper.swift */; }; + E3A27C2FDF6405B926765D21 /* DebouncePolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 085D4F4D5242B0E7AD506473 /* DebouncePolicy.swift */; }; + E3CF6ADB3DFAE5AB2F23935B /* SuggestionSettingsData.swift in Sources */ = {isa = PBXBuildFile; fileRef = A914A6C81B1824E4907ACADE /* SuggestionSettingsData.swift */; }; + E42469F1225220932384F342 /* ClipboardContentDistiller.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2229037BCDF7EFD3D47C15F /* ClipboardContentDistiller.swift */; }; + E4550C83F263BD9A923DFD00 /* EmojiPickerControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9F9F3C58A0635AAB53D0441 /* EmojiPickerControllerTests.swift */; }; + E4E787A70A33BD7D14BD5852 /* LlamaPromptCacheHintTrackerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E4C115072B97CCCE9020F72 /* LlamaPromptCacheHintTrackerTests.swift */; }; + E5022E7BF72591C0FEE80CD7 /* DownloadFileRescuerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E94A6036F4B703A2FF7F68EF /* DownloadFileRescuerTests.swift */; }; E51FA12B690428CA431328FC /* WritingPaneView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D48B95B6665109B6C6A63B42 /* WritingPaneView.swift */; }; + E531A4B0BBFBDAED92F4B67C /* TrailingDuplicationFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FCBADDF1A64F0813E094F2D /* TrailingDuplicationFilter.swift */; }; + E53B1E22EEAC5A606DD87DC3 /* GhostFontMetrics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 392DC1658B28561909169539 /* GhostFontMetrics.swift */; }; E54F5F03E16859D5A1E3437A /* MacroController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4638C74239D1DE2DC4D87975 /* MacroController.swift */; }; - E5CB34ED76BAE87E8A858112 /* WebContentFieldDetectorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 210F9AD332273FE2EB3A9A01 /* WebContentFieldDetectorTests.swift */; }; - E64AE96DF2A80A368FDE522D /* LlamaSuggestionEnginePrewarmTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26EF16C7439BEB156BD9FB03 /* LlamaSuggestionEnginePrewarmTests.swift */; }; + E6C99AB3E1A56E71F3A518FB /* ModelDownloadManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 050DC9D858A124FD1CFA4D99 /* ModelDownloadManager.swift */; }; E6DD9EAAFF4001E2922B5F55 /* OnboardingStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9ABC808DE01AF9AD04E38943 /* OnboardingStyle.swift */; }; - E6EE3C13FA31F261CD734C69 /* DownloadOutcomeClassifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3DE1975F3B5F4A70478DBF41 /* DownloadOutcomeClassifier.swift */; }; E74FC77608C8000C5E81B28E /* WelcomeHeroDemo.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6FE1277859A1402F8FB7E4E /* WelcomeHeroDemo.swift */; }; - E853B9C7AF93FA595DC417B2 /* EmojiVariantResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A8414BEB7E34F57607E37FE /* EmojiVariantResolver.swift */; }; - E912D4617AE1376061DF1F00 /* LanguageSupportTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4793D4EA5D36D7E5CC216C27 /* LanguageSupportTests.swift */; }; - E95888E76AA68A18A88AD8E6 /* EmojiTriggerStateMachine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 312C7306D916963F519CE0D9 /* EmojiTriggerStateMachine.swift */; }; + E846FC1E29526242117F126F /* MenuBarPresentationObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DE86A49339BB507D197629D /* MenuBarPresentationObserver.swift */; }; + E8768B22E683F35098DF4CCF /* InlinePreviewPanelController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 924CAA5E25C596A9FAB7602B /* InlinePreviewPanelController.swift */; }; E98161E9592F825F9CB7D32D /* SettingsSearchResultRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE8D7424D350FC7C0685DBEC /* SettingsSearchResultRow.swift */; }; - E994FE418A961FB234D9057A /* DownloadFileRescuerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2F46767D9D1F0D44E239CA8 /* DownloadFileRescuerTests.swift */; }; + E9B34664449F7451581C6908 /* CustomRulesCatalog.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51D93E3819F3BB0957FF3DF6 /* CustomRulesCatalog.swift */; }; + E9B7E353B233F842AC859542 /* MenuBarRecoveryPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E267F3BB7FC8DEAEB5E841B /* MenuBarRecoveryPolicy.swift */; }; E9E4CC657771DF9F4C56183C /* VisualContextCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = A854CAFB1F557BC4CAED8819 /* VisualContextCoordinator.swift */; }; + EA353CCECBFB4D297C865447 /* CurrentWordExtractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1AAC6367483952AB7D59A62 /* CurrentWordExtractor.swift */; }; + EA7398BD23865985723C32E0 /* EmojiVariantResolverTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 632BC2442D1A1C98E5BD918A /* EmojiVariantResolverTests.swift */; }; + EA7D6ECD050AC621B02E35F2 /* RequestID.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05F173F93FFA5FFBC169DA25 /* RequestID.swift */; }; EA89011A4D7ADD2A716D886E /* EmojiPaneView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A28B4A4368DB33C25E3AB5F3 /* EmojiPaneView.swift */; }; - EABF1A8075791DC530E58614 /* EmojiSynonymCatalog.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0846DE4E0293AF13890620D3 /* EmojiSynonymCatalog.swift */; }; - EB13A392BFA5349DD8A0DD25 /* EmojiUsageStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE35C7770405ED368AA02448 /* EmojiUsageStore.swift */; }; - EB9B5E5F7326AB72E0E44C70 /* SuggestionCaretLayoutRepairTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC04832FBD5311352F35241B /* SuggestionCaretLayoutRepairTests.swift */; }; + EC4975F707689CEA77A636BB /* PromptSectionBudgetTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A73D95F2BF5CA59705653931 /* PromptSectionBudgetTests.swift */; }; EC4ED03BE4C7DD0E6319F310 /* SuggestionCoordinator+Acceptance.swift in Sources */ = {isa = PBXBuildFile; fileRef = 72B13136DF7318F3E96DF0D3 /* SuggestionCoordinator+Acceptance.swift */; }; - ED0843752B297D7E9DB2C468 /* EmojiTriggerStateMachineTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 723E1EFA85D2E61B6C5F33E8 /* EmojiTriggerStateMachineTests.swift */; }; ED51AE49BAD6DD5BD177F4F1 /* WelcomePersonalizeStepView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB4548AF1ED25F574CCFA680 /* WelcomePersonalizeStepView.swift */; }; - ED9C51B0D7056F0753AADF2D /* GhostSuggestionLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 043E8AA850F930222DD112C0 /* GhostSuggestionLayout.swift */; }; + ED5E57512F532DDA48DF3360 /* SurfaceContextComposer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27B03589D82D0ADCF41B9CD0 /* SurfaceContextComposer.swift */; }; + EDD9AE89E16AB1EF47D06269 /* DownloadableModelCatalogView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 415E80FEA7C1330D502CE97F /* DownloadableModelCatalogView.swift */; }; + EDF9B7C3E86A8CD6E0A2A9D5 /* BrowserAppDetectorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6137B225F7190F06F2089446 /* BrowserAppDetectorTests.swift */; }; EE2C9177CE615298595215A8 /* SuggestionOverlayPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D598CC3134879999D567455 /* SuggestionOverlayPresenter.swift */; }; - EE87886AC1BFC8BB3DE09762 /* HuggingFaceModelBrowserView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78E49BDA7F3A42455C4C5350 /* HuggingFaceModelBrowserView.swift */; }; + EE73E5D254C575F692D4D3B4 /* SecureFieldDetector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EE99C84483D3A58D561C61D /* SecureFieldDetector.swift */; }; + EEC06CE37957B44E2B258DEE /* PromptContextSanitizerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DA66559D50874865032EE8C /* PromptContextSanitizerTests.swift */; }; EF0DE5E045F328F1E912A02A /* AppsPaneView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9C1C921A1CDA2ADFC39EA01 /* AppsPaneView.swift */; }; - EF5BAB96DDADABB86F9E02D9 /* SyntheticReplacePlannerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C71031E8DB171047318B92FC /* SyntheticReplacePlannerTests.swift */; }; - F04D9470439699DB1F016000 /* MenuBarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9AA0117B322C625F6D4BBEAB /* MenuBarView.swift */; }; - F0556D369F809445D0AC4E9C /* SettingsSearchRankerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C533B73CDDA3685135C460FB /* SettingsSearchRankerTests.swift */; }; - F067EA26AC2D007382CE520F /* EmojiPickerModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E5F074ED7E340E9B9E4C5E0 /* EmojiPickerModels.swift */; }; - F08C139B246C1EC7BB435455 /* MenuBarPresentationObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00824BDD8D0E9B3063827C78 /* MenuBarPresentationObserver.swift */; }; - F279A4064B24FCF714A8CAD4 /* CalendarAccessibilityCapturePolicyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2AF115FEF7FC96D46C815479 /* CalendarAccessibilityCapturePolicyTests.swift */; }; + EF55CFC5C89584C748A5F7A4 /* EmojiCatalogTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F8C74F232DCE6E25552FFFC /* EmojiCatalogTests.swift */; }; + EF7B9939B2B9D792918CC471 /* SpeculativeAcceptanceContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4275FD6213DCDA953B4800EA /* SpeculativeAcceptanceContext.swift */; }; + EFEA8845584EC9AE7D3B123D /* SelfCaptureGate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13838E1372956FF2CFC5ECCC /* SelfCaptureGate.swift */; }; + F08F41E2A6AB0BC01D4323AF /* SyntheticReplacePlannerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CC541A0FCCE9172C24C1350 /* SyntheticReplacePlannerTests.swift */; }; + F0DCEFED640B453A5ECEB810 /* HuggingFaceModelBrowserView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C696204AAEBA357129F77646 /* HuggingFaceModelBrowserView.swift */; }; + F13B85DD24398CD22C3560C1 /* InputModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = A29DF1C68154C21E6943D38E /* InputModels.swift */; }; + F140C1894C54E0A94EAE70BC /* BundledRuntimeLocator.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1AB5EBB44EE64EB3EB1426F /* BundledRuntimeLocator.swift */; }; + F22FAA3449506ABBACB12BA0 /* WordCountFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14E22DCC1852B8E4B235D256 /* WordCountFormatter.swift */; }; + F25F1800B79BF85AF07048C3 /* TypoCaseTransferTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C5953E5EB042ABAF6F35A69 /* TypoCaseTransferTests.swift */; }; + F26DD9AEAFECAAAD13F3A0A0 /* DownloadFileRescuer.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC756DF8E0032B39099D2BF8 /* DownloadFileRescuer.swift */; }; + F28293E59121DBD6241BA551 /* EmojiPickerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 871C7A27BAB5A510273D0A19 /* EmojiPickerView.swift */; }; F28FB178EC507C3D42A6F893 /* SuggestionInteractionState.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA942A53B7C09D1F4EC57239 /* SuggestionInteractionState.swift */; }; + F2B7319CCC2FC409B4A9FD83 /* TextDirectionDetector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8489C1318F0232BFF9F2758C /* TextDirectionDetector.swift */; }; + F313FE220ED8BAC413F66DCE /* AXTextGeometryResolverTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26EF15DB8DA361CB5B67C5F9 /* AXTextGeometryResolverTests.swift */; }; F31B343F9C935A5421A526DE /* AXTreeDumpWriter.swift in Sources */ = {isa = PBXBuildFile; fileRef = B27492B04B627DA53BDAD938 /* AXTreeDumpWriter.swift */; }; - F41AB06FD117487D7136E896 /* FocusTrackingModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37DA0B2D4FE343E321A95C22 /* FocusTrackingModelTests.swift */; }; + F35738A5EFCE7C2A737F08C9 /* EmojiPickerModelsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68ADAFFD5031EBFA70CD62BB /* EmojiPickerModelsTests.swift */; }; + F38776739B0987C0E3F2D343 /* SettingsSearchRankerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95C62A4403E4815004C6FCB8 /* SettingsSearchRankerTests.swift */; }; + F3CAFFDA47FAF0B4FADFC699 /* SuggestionOverlayStabilityGate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EE141D265E09DA9F95C4584 /* SuggestionOverlayStabilityGate.swift */; }; F496D63FD0A163D222D8C76F /* EmojiPickerController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A3B81B92E0743C6152ED8DD /* EmojiPickerController.swift */; }; - F4A01E4F12F0183449BCCBB9 /* BaseCompletionPromptRendererTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9966D09D8D80F54BF2734E00 /* BaseCompletionPromptRendererTests.swift */; }; - F4BE7822C56F10CAC623B0C2 /* FoundationModelAvailabilityServiceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00D226C0B54B3B375EC2682D /* FoundationModelAvailabilityServiceTests.swift */; }; F4CFF323CDA02530ED0EBE57 /* MPL-2.0.txt in Resources */ = {isa = PBXBuildFile; fileRef = 4E283DF8948B10268B46811F /* MPL-2.0.txt */; }; - F4EEE6291095B0BF2D3FBA21 /* GhostTextColorPreset.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E44E393DD58B978B1EAB6CF /* GhostTextColorPreset.swift */; }; + F50F54FB1B3B2B2E464B8683 /* LlamaRuntimeModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16967F782C95CEB09B9C8D49 /* LlamaRuntimeModels.swift */; }; F596D7438459A7A4246A39CE /* GhostTextPreview.swift in Sources */ = {isa = PBXBuildFile; fileRef = A594D02B0EF3C2DD62EFE69A /* GhostTextPreview.swift */; }; - F66F0D982EBAF5A3E99C5342 /* KeyCodeLabelsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2930EC34057319130393696B /* KeyCodeLabelsTests.swift */; }; - F71FD79FAC8B59C1CBD9E2E0 /* SettingsIndexTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A2FFC2055C52FB837DEEB8F /* SettingsIndexTests.swift */; }; - F7237FDB0665465F1C7EDCDE /* CustomRulesEditor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82F7F7355967725162DF2D1B /* CustomRulesEditor.swift */; }; - F77DB394E9D6C6C482131BF9 /* VisualContextModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE97A8169438D593C6C23412 /* VisualContextModels.swift */; }; - F78F594F77C26C233377E71F /* KeyCodeLabels.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAAE6B395FAB604DF059280A /* KeyCodeLabels.swift */; }; + F752C13542D72C888936748D /* SuggestionFocusFreshnessTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F75577575FB8E2D13510A2A /* SuggestionFocusFreshnessTests.swift */; }; + F76ECB9663E46AA806E2C7DE /* SuggestionEngineRouterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C034C1C9E51031A845D1184 /* SuggestionEngineRouterTests.swift */; }; F7AF84CA2F97023E1DA6296F /* SuggestionCoordinator+Prediction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1ED1EA9282E0AC7592E60889 /* SuggestionCoordinator+Prediction.swift */; }; - F8E86FA4D6CEEBFA7FB55F8D /* KeyRecorderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A567677424A82D9EEF47495 /* KeyRecorderView.swift */; }; - F93F24A74E8942E26D82EFE3 /* GhostSuggestionLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 043E8AA850F930222DD112C0 /* GhostSuggestionLayout.swift */; }; - FA25762161F068F59BEC86EB /* DecodeStopPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = D12ABBCE23A946C22894945B /* DecodeStopPolicy.swift */; }; - FAC7FFC78BEBF62D5B7A2EFB /* DownloadOutcomeClassifierTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E217A66717D78E1E49350EC8 /* DownloadOutcomeClassifierTests.swift */; }; + F894B9A7730EE6EEEB4C81BE /* VisualContextStartCoalescer.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEF8F1A40EAA82773C07F8B9 /* VisualContextStartCoalescer.swift */; }; + F8D1C3FD1A1ACAE87D885D29 /* CotabbyDebugOptionsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FB0AF4FEC5A3FD07652F718 /* CotabbyDebugOptionsTests.swift */; }; + F8D9423197CE188B9D43AFD4 /* HardwareCapabilityProbe.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE2844BF23632FC9B0824ABE /* HardwareCapabilityProbe.swift */; }; + F992FE031F4D7F47B4C18E56 /* DeviceInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6378CE9064B5A46DF4B07A1C /* DeviceInfo.swift */; }; + FAEC5301B36B92E4B4A169D3 /* RuntimeBootstrapModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72CC98CFDA795F8210198E8 /* RuntimeBootstrapModelTests.swift */; }; FB0E2CE46002270A254E5FB3 /* ContextLivePreviewField.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1FAD890FBC2D0351C0E3C60 /* ContextLivePreviewField.swift */; }; - FBEDA005ECD53CD645CD4C64 /* EmojiPickerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3384FD33776960103D6E22A9 /* EmojiPickerView.swift */; }; - FC0C0C43EEC80325FE699B5A /* InsertionSafetyGate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D472F9F396672E57873303B /* InsertionSafetyGate.swift */; }; - FC255241A3B34A5717F09B36 /* InsertionStrategySelectorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2960080A726E51198225147A /* InsertionStrategySelectorTests.swift */; }; - FC51AE2C3F21263B11CA06B6 /* CompletionSeamGuardTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6D36DB66629CF22C1783945 /* CompletionSeamGuardTests.swift */; }; - FC6B0524B774F20C18BD6889 /* OnboardingTemplate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4451D6673112575DF24C4A48 /* OnboardingTemplate.swift */; }; + FB31D4954D031D97EDBB4C73 /* SuggestionSettingsData.swift in Sources */ = {isa = PBXBuildFile; fileRef = A914A6C81B1824E4907ACADE /* SuggestionSettingsData.swift */; }; + FC537C9D5B0D5A61E6A7C4AA /* SuggestionModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 977CE0DE2F43D3F964C0EC73 /* SuggestionModels.swift */; }; + FC7B332AC1F0BF42689D6EE8 /* CompletionSeamGuard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3806EA97A628F15F155262D5 /* CompletionSeamGuard.swift */; }; + FCA314FBD31BF7C2CD273321 /* EmojiQueryRun.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94D11446FF576F0BBDEE2D2F /* EmojiQueryRun.swift */; }; + FCB060F562093AACA90CAA21 /* MarkerSelectionSynthesizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9FD2044CDEA95EC02C9B2FE /* MarkerSelectionSynthesizer.swift */; }; FCC571EC239846F06007BFCA /* CotabbyAppEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 711293EA57808B9428C7B908 /* CotabbyAppEnvironment.swift */; }; FDA8E2A77C8D65C52C72159F /* OpenAICompatibleSuggestionEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD5611C5D712701A8B10C731 /* OpenAICompatibleSuggestionEngine.swift */; }; FDBD858EDABA08FBBE0C7ED3 /* InlineCommandCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D77C99769239E4B33D6B2C9 /* InlineCommandCoordinator.swift */; }; - FE3AE9F51E1F616D843E7BFA /* EmojiUsageStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE35C7770405ED368AA02448 /* EmojiUsageStore.swift */; }; - FE4191A7C84E547DCD4F8B44 /* OnboardingTemplate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4451D6673112575DF24C4A48 /* OnboardingTemplate.swift */; }; - FE424DD09040640CC2400FBE /* EmojiCatalogTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 700275BECBBDA98354ABBDF9 /* EmojiCatalogTests.swift */; }; - FEC24B9C23274B9FA1F0072E /* PromptContextSanitizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA4B45B91D4DEAC979C3113E /* PromptContextSanitizer.swift */; }; + FDF77C5FB84854E32F6E3D55 /* EmojiPopularity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4719AA4F4513DB93CC0D1ECE /* EmojiPopularity.swift */; }; + FE0922970524121DEC4EF2D9 /* OpenAICompatibleEndpointModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1ABCE733783332BE52E43D67 /* OpenAICompatibleEndpointModels.swift */; }; + FEC9464B540B7AC5ADE7AEEB /* DebouncePolicyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC5160FA603A7227AC0F3A80 /* DebouncePolicyTests.swift */; }; FEF2CF888D8709D1FB0D2B20 /* Logging in Frameworks */ = {isa = PBXBuildFile; productRef = 6F27073D2818C0218C3F4370 /* Logging */; }; - FF3F7B74B561EF0807D28FD8 /* SystemMetricsStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 807148A920E003DEF8BA6092 /* SystemMetricsStore.swift */; }; - FF773F168B20502C68239967 /* SurfaceContextComposer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C602357DDED5D11C8B4567FB /* SurfaceContextComposer.swift */; }; - FFF5215EAC4A931CCD0C3142 /* MenuBarRecoveryPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F32455AE743D1D0E9E2CB38 /* MenuBarRecoveryPolicy.swift */; }; + FF46903861BA67AED8C24EF8 /* HuggingFaceModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = C736C539D4C97B5664E498BE /* HuggingFaceModels.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -725,434 +725,434 @@ /* Begin PBXFileReference section */ 003594B09C83EF2DF35577D5 /* SuggestionDebugLogger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionDebugLogger.swift; sourceTree = ""; }; - 00824BDD8D0E9B3063827C78 /* MenuBarPresentationObserver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuBarPresentationObserver.swift; sourceTree = ""; }; - 00BB95A341A8B5F4A1725640 /* SuggestionSettingsModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionSettingsModelTests.swift; sourceTree = ""; }; - 00D226C0B54B3B375EC2682D /* FoundationModelAvailabilityServiceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoundationModelAvailabilityServiceTests.swift; sourceTree = ""; }; - 01B72736E416910878E8E493 /* OnboardingTemplateRecommenderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingTemplateRecommenderTests.swift; sourceTree = ""; }; - 01D84EED1A6A711F39DEA18F /* BundleVersion.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BundleVersion.swift; sourceTree = ""; }; - 01F583E92B0A78212B330E6E /* InputSuppressionControllerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InputSuppressionControllerTests.swift; sourceTree = ""; }; - 023144451BB30F981D1F9EE6 /* EmojiPopularityTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiPopularityTests.swift; sourceTree = ""; }; - 033A468451259A3214EECBE5 /* InlinePreviewView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InlinePreviewView.swift; sourceTree = ""; }; - 0348A7053E5683C68879A71A /* SpellingLanguageResolver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpellingLanguageResolver.swift; sourceTree = ""; }; - 03766F6253FF17639230C0F6 /* ModelAndPresentationValueTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ModelAndPresentationValueTests.swift; sourceTree = ""; }; + 014DF977EED1CE9EB4E8E9D5 /* SuggestionInteractionStateTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionInteractionStateTests.swift; sourceTree = ""; }; + 022C91940E688482C3F80423 /* SuggestionSessionReconciler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionSessionReconciler.swift; sourceTree = ""; }; + 023BA8AA7DF3F8A45F9CE8FA /* ScreenshotContextGeneratorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScreenshotContextGeneratorTests.swift; sourceTree = ""; }; + 0259095D0A3E9B8DC26CB4B0 /* ModelFileValidatorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ModelFileValidatorTests.swift; sourceTree = ""; }; 0397F1DACB094A0F6A66BC0E /* it.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = it.txt; sourceTree = ""; }; - 043E8AA850F930222DD112C0 /* GhostSuggestionLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GhostSuggestionLayout.swift; sourceTree = ""; }; + 04364C3242A25358E7C85FD6 /* ClipboardRelevanceFilterTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClipboardRelevanceFilterTests.swift; sourceTree = ""; }; 049102F0ED85618106A042C4 /* CalendarAccessibilityCaptureGuard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalendarAccessibilityCaptureGuard.swift; sourceTree = ""; }; - 04D853218B0A77B0CE090828 /* BrowserAppDetectorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BrowserAppDetectorTests.swift; sourceTree = ""; }; 04E25414C307A20B6F9F20EC /* FocusSnapshotResolver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FocusSnapshotResolver.swift; sourceTree = ""; }; - 050D929E13BE52E6282B64D2 /* VisualContextStartCoalescerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VisualContextStartCoalescerTests.swift; sourceTree = ""; }; + 050DC9D858A124FD1CFA4D99 /* ModelDownloadManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ModelDownloadManager.swift; sourceTree = ""; }; 0537986794554F5FABE6EFF3 /* CurrencyEvaluator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CurrencyEvaluator.swift; sourceTree = ""; }; - 06FF2B0A3094A952A8EBA9B5 /* ConfidenceSuppressionPolicyTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConfidenceSuppressionPolicyTests.swift; sourceTree = ""; }; + 05F173F93FFA5FFBC169DA25 /* RequestID.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestID.swift; sourceTree = ""; }; + 06820B1E0B02D6A16506427C /* TerminalAppDetector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TerminalAppDetector.swift; sourceTree = ""; }; 07480CE96ED0EBD94817C6B1 /* GeneralPaneView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GeneralPaneView.swift; sourceTree = ""; }; - 0846DE4E0293AF13890620D3 /* EmojiSynonymCatalog.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiSynonymCatalog.swift; sourceTree = ""; }; - 0850B07CCDBA67C756C6EC59 /* ShortcutConflictTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShortcutConflictTests.swift; sourceTree = ""; }; - 08CE63B8725EBD71A4C024E1 /* TypoCaseTransfer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TypoCaseTransfer.swift; sourceTree = ""; }; - 09FADF683BE7B3558377FA76 /* FocusPollBackoff.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FocusPollBackoff.swift; sourceTree = ""; }; + 0854896090B568FFB1926D24 /* WordCountFormatterTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WordCountFormatterTests.swift; sourceTree = ""; }; + 085D4F4D5242B0E7AD506473 /* DebouncePolicy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DebouncePolicy.swift; sourceTree = ""; }; 0A3D1125B962CBE0269EEDDB /* SuggestionInserter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionInserter.swift; sourceTree = ""; }; - 0AC3BF78835C8F2C315932F1 /* EmojiCatalog.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiCatalog.swift; sourceTree = ""; }; 0B6816DF5D33863F966240B4 /* es.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = es.txt; sourceTree = ""; }; - 0C10BCF95451954641C602E4 /* FocusModelsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FocusModelsTests.swift; sourceTree = ""; }; - 0C383AE85B971A9605787358 /* FocusModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FocusModels.swift; sourceTree = ""; }; - 0CA88BB29BC8727878C99E95 /* LlamaPromptCacheHintTrackerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LlamaPromptCacheHintTrackerTests.swift; sourceTree = ""; }; - 0D80CC2CCAAFE3F23FB8C37A /* PromptContextSanitizerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PromptContextSanitizerTests.swift; sourceTree = ""; }; - 0F5E263AB69029D5E13D5EE8 /* FocusDebugOverlayController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FocusDebugOverlayController.swift; sourceTree = ""; }; - 110CB0B53016644EF7840301 /* HuggingFaceAPIClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HuggingFaceAPIClient.swift; sourceTree = ""; }; - 1274F897631B1B3A835D157F /* MidWordContinuationPolicyTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MidWordContinuationPolicyTests.swift; sourceTree = ""; }; - 12DD19BCE610808F1E38702D /* PermissionOverlayTrackerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PermissionOverlayTrackerTests.swift; sourceTree = ""; }; + 0C90C9EBCB70327D215EAE07 /* FileLogHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileLogHandler.swift; sourceTree = ""; }; + 0DA66559D50874865032EE8C /* PromptContextSanitizerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PromptContextSanitizerTests.swift; sourceTree = ""; }; 12E1E72C09460390583D98D1 /* SymSpellCorrector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SymSpellCorrector.swift; sourceTree = ""; }; - 1441B2D89DAE6878DAD11F17 /* EmojiMatcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiMatcher.swift; sourceTree = ""; }; + 12F6FDB6D09851CC5C6649EF /* MenuBarSections.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuBarSections.swift; sourceTree = ""; }; + 13838E1372956FF2CFC5ECCC /* SelfCaptureGate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelfCaptureGate.swift; sourceTree = ""; }; + 1480CC831D97E0C55267E0EC /* SpeculativeAcceptanceContextTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpeculativeAcceptanceContextTests.swift; sourceTree = ""; }; + 14E22DCC1852B8E4B235D256 /* WordCountFormatter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WordCountFormatter.swift; sourceTree = ""; }; + 159A3097EEFEC93396821019 /* DeviceInfoTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeviceInfoTests.swift; sourceTree = ""; }; 168A0DBF62BEF674B96CEBD2 /* PermissionReminderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PermissionReminderView.swift; sourceTree = ""; }; - 1827565F4FAD3E4E61CA65C3 /* SecureFieldDetector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureFieldDetector.swift; sourceTree = ""; }; - 18D990E515E1AE4F312F4E95 /* BundledRuntimeLocatorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BundledRuntimeLocatorTests.swift; sourceTree = ""; }; - 1909DF39C47A113382BB53B6 /* RequestIDTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestIDTests.swift; sourceTree = ""; }; - 1972BD2C5254D8266618781F /* FocusCapabilityFlickerGateTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FocusCapabilityFlickerGateTests.swift; sourceTree = ""; }; + 16967F782C95CEB09B9C8D49 /* LlamaRuntimeModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LlamaRuntimeModels.swift; sourceTree = ""; }; + 16F8C2297472488862392DEE /* BrowserAppDetector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BrowserAppDetector.swift; sourceTree = ""; }; + 178C5C54E1CC7E906DEA1D51 /* WebContentFieldDetector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebContentFieldDetector.swift; sourceTree = ""; }; + 17FD5822D3A75266B20A50CE /* SuggestionPauseModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionPauseModels.swift; sourceTree = ""; }; + 18705DCA94FBA82F6FB3DBB0 /* SystemResourceSamplerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SystemResourceSamplerTests.swift; sourceTree = ""; }; 19BE12C28A4AB8A4A58C2FF7 /* SettingsPaneScaffold.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsPaneScaffold.swift; sourceTree = ""; }; - 19DB9558F4D3AFB108D71649 /* SuggestionStateHelperTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionStateHelperTests.swift; sourceTree = ""; }; - 1A8414BEB7E34F57607E37FE /* EmojiVariantResolver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiVariantResolver.swift; sourceTree = ""; }; - 1BA30E71C21C77BB6EA4C166 /* TokenCountEstimator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TokenCountEstimator.swift; sourceTree = ""; }; - 1BD71ECC2AE4821B643E0935 /* ConfidenceSuppressionPolicy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConfidenceSuppressionPolicy.swift; sourceTree = ""; }; - 1C201A65A6B040F90C528A3B /* MacroTriggerStateMachine.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MacroTriggerStateMachine.swift; sourceTree = ""; }; - 1C4751DFE9DA372FBC40BA30 /* CurrentWordExtractorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CurrentWordExtractorTests.swift; sourceTree = ""; }; - 1CE61E74928C221B8BB261C6 /* SuggestionTextColorCodec.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionTextColorCodec.swift; sourceTree = ""; }; + 1A951C04DF783B1F1EFDD1E5 /* BundleVersion.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BundleVersion.swift; sourceTree = ""; }; + 1ABCE733783332BE52E43D67 /* OpenAICompatibleEndpointModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenAICompatibleEndpointModels.swift; sourceTree = ""; }; + 1B831CA78687EAEE96493C09 /* ArithmeticEvaluatorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArithmeticEvaluatorTests.swift; sourceTree = ""; }; + 1BB42779285A1BA40B7848C8 /* TickMarkSlider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TickMarkSlider.swift; sourceTree = ""; }; + 1C1AE4120FA68524700C9324 /* BaseCompletionPromptRenderer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseCompletionPromptRenderer.swift; sourceTree = ""; }; 1D00A031C0D9CF2A7A2330D9 /* PermissionDragSourceView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PermissionDragSourceView.swift; sourceTree = ""; }; 1D1AC5EC06664F49A6AE2B17 /* SettingsNavigationModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsNavigationModel.swift; sourceTree = ""; }; - 1E0513E3B23937B099A3CFF2 /* WordCountFormatterTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WordCountFormatterTests.swift; sourceTree = ""; }; + 1D60AC0AFFF7CEAA24FC617E /* OnboardingFlowStepTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingFlowStepTests.swift; sourceTree = ""; }; + 1DF8AA184C5F9CFFDF97A070 /* RuntimeBootstrapModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RuntimeBootstrapModel.swift; sourceTree = ""; }; + 1E267F3BB7FC8DEAEB5E841B /* MenuBarRecoveryPolicy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuBarRecoveryPolicy.swift; sourceTree = ""; }; 1ED1EA9282E0AC7592E60889 /* SuggestionCoordinator+Prediction.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SuggestionCoordinator+Prediction.swift"; sourceTree = ""; }; - 1F32455AE743D1D0E9E2CB38 /* MenuBarRecoveryPolicy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuBarRecoveryPolicy.swift; sourceTree = ""; }; - 1F761083EA5465023D82B5F4 /* BrowserDomainTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BrowserDomainTests.swift; sourceTree = ""; }; + 1EE61CD2E8D2399E23D48818 /* CompositionInputModeClassifierTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CompositionInputModeClassifierTests.swift; sourceTree = ""; }; + 1EE99C84483D3A58D561C61D /* SecureFieldDetector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureFieldDetector.swift; sourceTree = ""; }; + 1F70588152A9E06C46971ACC /* CompletionSeamGuardTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CompletionSeamGuardTests.swift; sourceTree = ""; }; 1F7ED2D9D71CFAD9A30977E9 /* ArithmeticEvaluator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArithmeticEvaluator.swift; sourceTree = ""; }; - 210F9AD332273FE2EB3A9A01 /* WebContentFieldDetectorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebContentFieldDetectorTests.swift; sourceTree = ""; }; + 1FB0AF4FEC5A3FD07652F718 /* CotabbyDebugOptionsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CotabbyDebugOptionsTests.swift; sourceTree = ""; }; + 202086735E28B96BBCE55E6B /* LlamaEvalScoring.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LlamaEvalScoring.swift; sourceTree = ""; }; 21CB3008986BE7FD2A4D9132 /* WelcomeCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WelcomeCoordinator.swift; sourceTree = ""; }; - 224438039A86E5619294EAF7 /* EmojiUsageStoreTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiUsageStoreTests.swift; sourceTree = ""; }; - 224494DA9610B169F1C5BCFF /* SuggestionPauseModelsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionPauseModelsTests.swift; sourceTree = ""; }; + 2228A6C24CDE5F9D8DE33BF3 /* FoundationModelDriftEvalTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoundationModelDriftEvalTests.swift; sourceTree = ""; }; 22544F4B756E3E4144497D17 /* SuggestionCoordinator+Input.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SuggestionCoordinator+Input.swift"; sourceTree = ""; }; - 22707E26E2106DF0E826D32D /* ControlTokenMarkersTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ControlTokenMarkersTests.swift; sourceTree = ""; }; - 22BE47D1DBF6C23151458836 /* MacroTriggerStateMachineTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MacroTriggerStateMachineTests.swift; sourceTree = ""; }; - 23CFCE3EB3F41DAC0202E9D0 /* HardwareCapabilityProbeTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HardwareCapabilityProbeTests.swift; sourceTree = ""; }; - 247561C626843957CFB4B632 /* CurrentWordExtractor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CurrentWordExtractor.swift; sourceTree = ""; }; - 24F613F0E2F7046E6532A09C /* OnboardingTemplateFeatureList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingTemplateFeatureList.swift; sourceTree = ""; }; - 2578311F4ABCB3CDFF795A86 /* OnboardingFlowSteps.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingFlowSteps.swift; sourceTree = ""; }; + 2412E9C50B4D2B3C57F5E3C6 /* EmojiTriggerStateMachine.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiTriggerStateMachine.swift; sourceTree = ""; }; + 247AD238E2DD01C8DCAED598 /* SystemMetricsStoreTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SystemMetricsStoreTests.swift; sourceTree = ""; }; + 2572996D6A44E20E2C0F9060 /* StreamedGhostTextPolicy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StreamedGhostTextPolicy.swift; sourceTree = ""; }; + 25D41CC179EC04093971A0D0 /* SpellingDictionaryCatalog.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpellingDictionaryCatalog.swift; sourceTree = ""; }; 262BE2F1E97389FE8D7A5FB9 /* Cotabby.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Cotabby.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 26EF16C7439BEB156BD9FB03 /* LlamaSuggestionEnginePrewarmTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LlamaSuggestionEnginePrewarmTests.swift; sourceTree = ""; }; - 273B4DC844F79B4BE2C8910F /* FocusPollBackoffTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FocusPollBackoffTests.swift; sourceTree = ""; }; - 27A5D63F390E9B7A7FE343FE /* SystemResourceSampler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SystemResourceSampler.swift; sourceTree = ""; }; - 28B7EB84781C0ED57844585E /* OnboardingTemplateTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingTemplateTests.swift; sourceTree = ""; }; - 292DC9D4D9D5D26AE882E39B /* EmojiCatalogMatcherTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiCatalogMatcherTests.swift; sourceTree = ""; }; - 2930EC34057319130393696B /* KeyCodeLabelsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyCodeLabelsTests.swift; sourceTree = ""; }; - 2960080A726E51198225147A /* InsertionStrategySelectorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InsertionStrategySelectorTests.swift; sourceTree = ""; }; - 299BD7B741DA4AAE6A061BAD /* StreamedGhostTextPolicy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StreamedGhostTextPolicy.swift; sourceTree = ""; }; - 29CDC8BE5312B9BEFD9B22CB /* SurfaceContextComposerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SurfaceContextComposerTests.swift; sourceTree = ""; }; - 29ED42C4BDD0C521101AF95E /* DeviceInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeviceInfo.swift; sourceTree = ""; }; - 2A02336442BB735EE2E8D064 /* SettingsAttentionEvaluator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsAttentionEvaluator.swift; sourceTree = ""; }; - 2AF115FEF7FC96D46C815479 /* CalendarAccessibilityCapturePolicyTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalendarAccessibilityCapturePolicyTests.swift; sourceTree = ""; }; - 2B3E5554AAC5D0007CCC61A7 /* LlamaDecodeGateDefaultsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LlamaDecodeGateDefaultsTests.swift; sourceTree = ""; }; + 26EF15DB8DA361CB5B67C5F9 /* AXTextGeometryResolverTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AXTextGeometryResolverTests.swift; sourceTree = ""; }; + 27B03589D82D0ADCF41B9CD0 /* SurfaceContextComposer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SurfaceContextComposer.swift; sourceTree = ""; }; 2B7A28471B8526C2693FFF65 /* AcknowledgementsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AcknowledgementsView.swift; sourceTree = ""; }; - 2BC293F6125E2B14DCF05AD9 /* SettingsAttentionEvaluatorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsAttentionEvaluatorTests.swift; sourceTree = ""; }; + 2BAF8A580B615949356560AA /* InsertedTextAdvanceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InsertedTextAdvanceTests.swift; sourceTree = ""; }; + 2BF37C1A0F734BB940E371C2 /* ClipboardRelevanceFilter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClipboardRelevanceFilter.swift; sourceTree = ""; }; + 2C5953E5EB042ABAF6F35A69 /* TypoCaseTransferTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TypoCaseTransferTests.swift; sourceTree = ""; }; 2D1F9CEBAB0F330F8E7B61D8 /* InputSuppressionController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InputSuppressionController.swift; sourceTree = ""; }; - 2D7360A6D4261989A66658ED /* SentenceBoundaryClassifierTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SentenceBoundaryClassifierTests.swift; sourceTree = ""; }; 2D8AA55C2B730110E8598F91 /* it-100k.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = "it-100k.txt"; sourceTree = ""; }; - 2F01FAC4F57EB08471521196 /* VisualContextStartCoalescer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VisualContextStartCoalescer.swift; sourceTree = ""; }; - 306A36888B5F2CA8FEF9C806 /* CompletionSeamGuard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CompletionSeamGuard.swift; sourceTree = ""; }; - 312C7306D916963F519CE0D9 /* EmojiTriggerStateMachine.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiTriggerStateMachine.swift; sourceTree = ""; }; - 313EDBA60565836F32CEEC10 /* DateMacroEvaluatorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DateMacroEvaluatorTests.swift; sourceTree = ""; }; - 328847A0F494360033366791 /* TextDirectionDetector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextDirectionDetector.swift; sourceTree = ""; }; + 2E379AF08CDFF65D6EFC565E /* ActivationIndicatorController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActivationIndicatorController.swift; sourceTree = ""; }; + 2F93E4EC64A8773A1A7F3E24 /* CompletionRenderMode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CompletionRenderMode.swift; sourceTree = ""; }; + 309B45D197958D1DA2FE4D53 /* SuggestionFadeInPolicyTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionFadeInPolicyTests.swift; sourceTree = ""; }; + 310F3498A3E498729CC8433E /* MidWordContinuationPolicy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MidWordContinuationPolicy.swift; sourceTree = ""; }; + 31A62CE4DA3E55B5E117DBD8 /* LlamaSuggestionEvalTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LlamaSuggestionEvalTests.swift; sourceTree = ""; }; + 31C6E7EF7E4F4CFD8702A331 /* SuggestionCoordinatorInputTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionCoordinatorInputTests.swift; sourceTree = ""; }; + 31F8F44FE13E69D4108F4AFB /* CustomRulesEditor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomRulesEditor.swift; sourceTree = ""; }; + 3281A86A9144C82772337D1B /* SuggestionCoordinatorLifecycleTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionCoordinatorLifecycleTests.swift; sourceTree = ""; }; + 330D425B2BF2245FD7BBE4FA /* SuggestionRequestFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionRequestFactory.swift; sourceTree = ""; }; 3350EDE01ED5125520C79D53 /* SettingsCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsCoordinator.swift; sourceTree = ""; }; - 335BF59EE80F3A0143B79740 /* GhostFontSizeStabilizerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GhostFontSizeStabilizerTests.swift; sourceTree = ""; }; - 3384FD33776960103D6E22A9 /* EmojiPickerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiPickerView.swift; sourceTree = ""; }; + 33D4F378E5C70CAF7827A90A /* ControlTokenMarkers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ControlTokenMarkers.swift; sourceTree = ""; }; + 341A1BBA636AEBA2491F6A26 /* FocusTrackingModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FocusTrackingModelTests.swift; sourceTree = ""; }; 34EF2406E7A384F3325AAF9A /* SettingsIndex.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsIndex.swift; sourceTree = ""; }; - 352AF5B2834FEE1F597394E4 /* ApplicationBundleMetadata.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApplicationBundleMetadata.swift; sourceTree = ""; }; - 357C18383B047F24A531BDCD /* MidWordContinuationPolicy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MidWordContinuationPolicy.swift; sourceTree = ""; }; - 3609CC88A5280B3AA40414DF /* SuggestionAvailabilityEvaluator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionAvailabilityEvaluator.swift; sourceTree = ""; }; - 361D34F219C46FF21AC09B62 /* SuggestionCoordinatorPredictionTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionCoordinatorPredictionTests.swift; sourceTree = ""; }; - 37DA0B2D4FE343E321A95C22 /* FocusTrackingModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FocusTrackingModelTests.swift; sourceTree = ""; }; + 35C0B587D81D87ACB952C95E /* SuggestionSettingsStoreTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionSettingsStoreTests.swift; sourceTree = ""; }; + 36652DB88C5948AA4A31524A /* ModelFileValidator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ModelFileValidator.swift; sourceTree = ""; }; + 3680E1B8FA712A888F509640 /* ClipboardContentDistillerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClipboardContentDistillerTests.swift; sourceTree = ""; }; + 36FEDE8C3BE5E3C5E26989AE /* SpellingDictionaryPicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpellingDictionaryPicker.swift; sourceTree = ""; }; + 3806EA97A628F15F155262D5 /* CompletionSeamGuard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CompletionSeamGuard.swift; sourceTree = ""; }; 384FBCF5D7A3A446C5BE2B8D /* SuggestionEngineRouter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionEngineRouter.swift; sourceTree = ""; }; - 386C98FFCF76EC1C8C7E82BB /* SuggestionModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionModels.swift; sourceTree = ""; }; - 38931C165873B50B405CC602 /* SystemMetricsStoreTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SystemMetricsStoreTests.swift; sourceTree = ""; }; - 39366D6D7D5946BF9330D038 /* MenuBarRecoveryPolicyTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuBarRecoveryPolicyTests.swift; sourceTree = ""; }; - 3BDA36955CCCFA87C1F67268 /* SuggestionEngineRouterTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionEngineRouterTests.swift; sourceTree = ""; }; - 3DE1975F3B5F4A70478DBF41 /* DownloadOutcomeClassifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DownloadOutcomeClassifier.swift; sourceTree = ""; }; - 41BBD5A4BA08CABE77860886 /* HardwareCapabilityProbe.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HardwareCapabilityProbe.swift; sourceTree = ""; }; - 421FD16E18622824E038DFB4 /* CaretRunPlacementTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CaretRunPlacementTests.swift; sourceTree = ""; }; - 43D627C4A55359EAF4676FF7 /* InsertionSafetyGateTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InsertionSafetyGateTests.swift; sourceTree = ""; }; - 43E37A7E835D3BDE6265843C /* TerminalAppDetectorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TerminalAppDetectorTests.swift; sourceTree = ""; }; - 442507A5399ACD81D1DB4936 /* SuggestionFadeInPolicyTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionFadeInPolicyTests.swift; sourceTree = ""; }; - 4451D6673112575DF24C4A48 /* OnboardingTemplate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingTemplate.swift; sourceTree = ""; }; - 44595B534DD7323F0AD60825 /* MenuBarPopoverDismisser.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuBarPopoverDismisser.swift; sourceTree = ""; }; - 45A896811745673061AF3612 /* SuggestionFocusFreshnessTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionFocusFreshnessTests.swift; sourceTree = ""; }; + 3871F63C8AF8AD96B14F5067 /* BrowserDomain.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BrowserDomain.swift; sourceTree = ""; }; + 38FCE0E0C38A776383B11809 /* TypoGate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TypoGate.swift; sourceTree = ""; }; + 392DC1658B28561909169539 /* GhostFontMetrics.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GhostFontMetrics.swift; sourceTree = ""; }; + 3A051152D3C503A2339BF0FA /* FoundationModelPromptRenderer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoundationModelPromptRenderer.swift; sourceTree = ""; }; + 3A7A9C39A0713BD3B442C9AC /* AppUpdateManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppUpdateManager.swift; sourceTree = ""; }; + 3C8673733C0EB7A85861182F /* MirrorOverlayLayoutTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MirrorOverlayLayoutTests.swift; sourceTree = ""; }; + 3CEEAA025DC9BD7D38AD78E8 /* FocusCapabilityResolver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FocusCapabilityResolver.swift; sourceTree = ""; }; + 3D6234872B84ECB56A707945 /* ControlTokenMarkersTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ControlTokenMarkersTests.swift; sourceTree = ""; }; + 3DB1A3F7D6C0FF28717E6D4C /* SuggestionEngineModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionEngineModels.swift; sourceTree = ""; }; + 3DBD75CAF6CAC849D5ED9FA4 /* InputSuppressionControllerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InputSuppressionControllerTests.swift; sourceTree = ""; }; + 3ED4E38B9FE65164C3ABEA12 /* LlamaEvalScoringTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LlamaEvalScoringTests.swift; sourceTree = ""; }; + 3EE141D265E09DA9F95C4584 /* SuggestionOverlayStabilityGate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionOverlayStabilityGate.swift; sourceTree = ""; }; + 3EFECCCD6B271123F6D7CCEB /* OllamaPreloadWorkControllerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OllamaPreloadWorkControllerTests.swift; sourceTree = ""; }; + 3F42C0E566DA45DEB35D888B /* FocusSnapshotResolverSelectionTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FocusSnapshotResolverSelectionTests.swift; sourceTree = ""; }; + 3FE69F822DE85087BCA01DF5 /* SymSpellCorrectorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SymSpellCorrectorTests.swift; sourceTree = ""; }; + 3FE7D19D22434E3E24804999 /* CalendarAccessibilityCapturePolicy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalendarAccessibilityCapturePolicy.swift; sourceTree = ""; }; + 4084B2F8843FE479F8D347E3 /* GhostSuggestionLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GhostSuggestionLayout.swift; sourceTree = ""; }; + 415E80FEA7C1330D502CE97F /* DownloadableModelCatalogView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DownloadableModelCatalogView.swift; sourceTree = ""; }; + 422E236CC16508B664E40F1E /* CaretLinePosition.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CaretLinePosition.swift; sourceTree = ""; }; + 4275FD6213DCDA953B4800EA /* SpeculativeAcceptanceContext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpeculativeAcceptanceContext.swift; sourceTree = ""; }; + 445BDC778CCC14AC909D659D /* ScreenTextExtractorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScreenTextExtractorTests.swift; sourceTree = ""; }; + 45E30CEB74593771E5F62E5E /* InsertionSafetyGateTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InsertionSafetyGateTests.swift; sourceTree = ""; }; 4638C74239D1DE2DC4D87975 /* MacroController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MacroController.swift; sourceTree = ""; }; - 4696A84D17890B154533A08F /* PromptPolicyTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PromptPolicyTests.swift; sourceTree = ""; }; - 470A7DAE3D6A2C873B395AE3 /* SuggestionEngineModelsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionEngineModelsTests.swift; sourceTree = ""; }; - 474560E524C1D74BAB1570DA /* SecureFieldDetectorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureFieldDetectorTests.swift; sourceTree = ""; }; - 4793D4EA5D36D7E5CC216C27 /* LanguageSupportTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LanguageSupportTests.swift; sourceTree = ""; }; + 46B67EF101326F317EFD670D /* ApplicationBundleMetadata.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApplicationBundleMetadata.swift; sourceTree = ""; }; + 4719AA4F4513DB93CC0D1ECE /* EmojiPopularity.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiPopularity.swift; sourceTree = ""; }; + 480596411FBB38BA3B993EDC /* FocusTrackingModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FocusTrackingModel.swift; sourceTree = ""; }; + 499FA07A48925E79F091D9E7 /* SuggestionRequestFactoryTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionRequestFactoryTests.swift; sourceTree = ""; }; + 4A51B1559F4CE6728D39C959 /* VisualContextModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VisualContextModels.swift; sourceTree = ""; }; 4B8665A5495891F9E3DDA48B /* de-100k.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = "de-100k.txt"; sourceTree = ""; }; + 4BA1D28712B262ABD96F8399 /* ModelAndPresentationValueTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ModelAndPresentationValueTests.swift; sourceTree = ""; }; 4BC92317837813ACA5051177 /* Cotabby Dev.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Cotabby Dev.app"; sourceTree = BUILT_PRODUCTS_DIR; }; - 4C174D8294858BF9DF3D361D /* SuggestionCoordinatorTestSupport.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionCoordinatorTestSupport.swift; sourceTree = ""; }; + 4D080DC6ABFA205A22E3D5FE /* FocusCapabilityFlickerGateTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FocusCapabilityFlickerGateTests.swift; sourceTree = ""; }; + 4D6D4D7CAD20C94DF9EF21D2 /* HuggingFaceAPIClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HuggingFaceAPIClient.swift; sourceTree = ""; }; + 4DF8401D3859F00CC94F8893 /* HuggingFaceSearchService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HuggingFaceSearchService.swift; sourceTree = ""; }; 4E283DF8948B10268B46811F /* MPL-2.0.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = "MPL-2.0.txt"; sourceTree = ""; }; - 4F283E5B403F9FEBFB4BA04A /* CompositionInputModeClassifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CompositionInputModeClassifier.swift; sourceTree = ""; }; - 51020F8CD58338BD643FBF63 /* ModelDownloadManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ModelDownloadManager.swift; sourceTree = ""; }; - 52BAFA2F989C3C4F7FB892B5 /* MarkerSelectionSynthesizerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MarkerSelectionSynthesizerTests.swift; sourceTree = ""; }; + 4F6CECCA06E9B6FE9A1C3C23 /* StaticTextRunWalkThrottleTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StaticTextRunWalkThrottleTests.swift; sourceTree = ""; }; + 4F86D2716CBE36970BB462E8 /* OnboardingTemplateRecommender.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingTemplateRecommender.swift; sourceTree = ""; }; + 4FCBADDF1A64F0813E094F2D /* TrailingDuplicationFilter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrailingDuplicationFilter.swift; sourceTree = ""; }; + 4FFD3AFACAAC963DAF59D153 /* OnboardingTemplateRecommenderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingTemplateRecommenderTests.swift; sourceTree = ""; }; + 50119F67E7BB9FBC8EA94BF2 /* SuggestionQualityMetricsStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionQualityMetricsStore.swift; sourceTree = ""; }; + 50CDB11D96F343194B390321 /* MacroTriggerStateMachine.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MacroTriggerStateMachine.swift; sourceTree = ""; }; + 5125EBB70F6E32CBD46506C0 /* TextLayoutCaretEstimatorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextLayoutCaretEstimatorTests.swift; sourceTree = ""; }; + 51833C4853A3117C676CBC63 /* SystemMetricsStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SystemMetricsStore.swift; sourceTree = ""; }; + 51D93E3819F3BB0957FF3DF6 /* CustomRulesCatalog.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomRulesCatalog.swift; sourceTree = ""; }; + 52A749138073241F38352484 /* GhostFontSizeStabilizerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GhostFontSizeStabilizerTests.swift; sourceTree = ""; }; 534F1297DEF3547D0DE56FB2 /* KeyboardInputSourceMonitor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyboardInputSourceMonitor.swift; sourceTree = ""; }; - 53CF416511099C6818110F01 /* CompletionRenderModePolicy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CompletionRenderModePolicy.swift; sourceTree = ""; }; - 53E41890930AA80910E461EF /* GhostFontMetricsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GhostFontMetricsTests.swift; sourceTree = ""; }; - 54150A507B03221F137D539B /* MirrorOverlayLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MirrorOverlayLayout.swift; sourceTree = ""; }; - 5484C8A04B9C00CF79D589EB /* ScreenFrameReader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScreenFrameReader.swift; sourceTree = ""; }; - 54BC85605541E913EE57B258 /* ExtendedContextTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtendedContextTests.swift; sourceTree = ""; }; 54EF3C7F5D9D6F3FA50FD51C /* ContextBuffer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContextBuffer.swift; sourceTree = ""; }; - 565AB9A1265315C500FE5BDF /* PopupChrome.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PopupChrome.swift; sourceTree = ""; }; + 5652FFF8E718A17D98F87CD0 /* SuggestionSubsystemContracts.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionSubsystemContracts.swift; sourceTree = ""; }; 5664E34B23FBDF69292FEF43 /* FoundationModelSuggestionEngine.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoundationModelSuggestionEngine.swift; sourceTree = ""; }; + 56A2F75C66BECA61A722D3FB /* LLMIOFileHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LLMIOFileHandler.swift; sourceTree = ""; }; + 571B221ACAFED86DABB10F48 /* SelfCaptureGateTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelfCaptureGateTests.swift; sourceTree = ""; }; + 5769E45DA3B966F0863BBA93 /* EmojiPopularityTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiPopularityTests.swift; sourceTree = ""; }; + 57B29DAC600626783649475A /* SettingsSearchRanker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsSearchRanker.swift; sourceTree = ""; }; + 57FE28720A0C1B74B5DEAA58 /* HardwareCapabilityProbeTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HardwareCapabilityProbeTests.swift; sourceTree = ""; }; + 58C4F99A9232DD9E7B5A77BB /* FocusCapabilityFlickerGate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FocusCapabilityFlickerGate.swift; sourceTree = ""; }; 5976600F428C1265121D4C0C /* SystemSettingsWindowLocator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SystemSettingsWindowLocator.swift; sourceTree = ""; }; 59E299BE2E9D42A33D5D2F5D /* ScreenTextExtractor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScreenTextExtractor.swift; sourceTree = ""; }; - 5A03E565A11581FD2150B142 /* CompletionRenderMode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CompletionRenderMode.swift; sourceTree = ""; }; - 5A2FFC2055C52FB837DEEB8F /* SettingsIndexTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsIndexTests.swift; sourceTree = ""; }; 5A3B81B92E0743C6152ED8DD /* EmojiPickerController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiPickerController.swift; sourceTree = ""; }; - 5A567677424A82D9EEF47495 /* KeyRecorderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyRecorderView.swift; sourceTree = ""; }; - 5AD3F4F9FBE82007E4E15F58 /* GhostSuggestionLayoutTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GhostSuggestionLayoutTests.swift; sourceTree = ""; }; - 5C4E5869D103865486AAAEEC /* ModelFileValidator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ModelFileValidator.swift; sourceTree = ""; }; + 5A520C43E88BA7D3CCF0E961 /* SuggestionTextNormalizerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionTextNormalizerTests.swift; sourceTree = ""; }; + 5ADC3A68EF5FD9A1E6B5D249 /* CustomRulesTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomRulesTests.swift; sourceTree = ""; }; + 5B5D1A7D938F633C6EE094F7 /* AXHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AXHelper.swift; sourceTree = ""; }; + 5B778713FE1C9481CE0DF065 /* FocusModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FocusModels.swift; sourceTree = ""; }; 5C9FDF029F7828CAF3FE8850 /* FocusTracker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FocusTracker.swift; sourceTree = ""; }; 5D0AEFF86F8210CBE7CFCBAD /* SettingsCategory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsCategory.swift; sourceTree = ""; }; 5DCA3E46621815A19300365F /* fr.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = fr.txt; sourceTree = ""; }; - 5EED3CD2BC7B48DF35DEE562 /* OCRTextHygieneTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OCRTextHygieneTests.swift; sourceTree = ""; }; + 5EE87C835317AF47C007C6B6 /* SuggestionCaretLayoutRepairTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionCaretLayoutRepairTests.swift; sourceTree = ""; }; + 5EF5B128907702161F59D236 /* PerformanceMetricsStoreTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PerformanceMetricsStoreTests.swift; sourceTree = ""; }; 5F2C764D29C8D50D0C854FF8 /* PermissionGuidanceController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PermissionGuidanceController.swift; sourceTree = ""; }; - 5F34AE24BB7C99D66E1F3904 /* InputModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InputModels.swift; sourceTree = ""; }; - 60629DFE309C1A4BD8A7FB3B /* RuntimeBootstrapModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RuntimeBootstrapModel.swift; sourceTree = ""; }; + 5F8C74F232DCE6E25552FFFC /* EmojiCatalogTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiCatalogTests.swift; sourceTree = ""; }; + 601C120D3DB41535E1D90E24 /* WebContentFieldDetectorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebContentFieldDetectorTests.swift; sourceTree = ""; }; + 61103A4FEA699AAE0E61D89B /* InsertedTextAdvance.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InsertedTextAdvance.swift; sourceTree = ""; }; + 612CA2988BF19FAE0114165A /* BaseCompletionPromptRendererTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseCompletionPromptRendererTests.swift; sourceTree = ""; }; + 6137B225F7190F06F2089446 /* BrowserAppDetectorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BrowserAppDetectorTests.swift; sourceTree = ""; }; + 61CCBF33813CE5CD3B9EA37B /* SpellingLanguageResolver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpellingLanguageResolver.swift; sourceTree = ""; }; 620D393D3B7E687A08FA9446 /* es-100l.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = "es-100l.txt"; sourceTree = ""; }; - 62BD2ADED33249F5BA53D0AD /* EmojiPickerControllerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiPickerControllerTests.swift; sourceTree = ""; }; - 62EDF1199CC5E18BD7651661 /* EmojiPickerPanelLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiPickerPanelLayout.swift; sourceTree = ""; }; + 632BC2442D1A1C98E5BD918A /* EmojiVariantResolverTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiVariantResolverTests.swift; sourceTree = ""; }; + 6378CE9064B5A46DF4B07A1C /* DeviceInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeviceInfo.swift; sourceTree = ""; }; 63F7C6D15674B3043C4CEEAC /* WelcomeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WelcomeView.swift; sourceTree = ""; }; - 64442042F5B57CB0A701DA85 /* MacroReferenceSheet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MacroReferenceSheet.swift; sourceTree = ""; }; - 66B53214C3842F78B202D498 /* AXHelperTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AXHelperTests.swift; sourceTree = ""; }; + 64AEF94A48DF96D6BEE3048C /* OnboardingFlowSteps.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingFlowSteps.swift; sourceTree = ""; }; + 64B0584FA16465453F04CA8C /* OCRTextHygieneTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OCRTextHygieneTests.swift; sourceTree = ""; }; + 652973AF18C20D51F81F76C5 /* SurfaceContextComposerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SurfaceContextComposerTests.swift; sourceTree = ""; }; + 66B5FF2D1DCC846AABC134CF /* MenuBarRecoveryPolicyTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuBarRecoveryPolicyTests.swift; sourceTree = ""; }; 66CF2A70D4699421AC9BD849 /* NOTICE.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = NOTICE.md; sourceTree = ""; }; - 671689F289D45A124639C9C6 /* EmojiRecentsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiRecentsTests.swift; sourceTree = ""; }; - 67586807ACE8EB13C9014535 /* TickMarkSlider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TickMarkSlider.swift; sourceTree = ""; }; - 67D57F248880978A09DD28A6 /* FocusSnapshotResolverLiveTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FocusSnapshotResolverLiveTests.swift; sourceTree = ""; }; + 66D6D153C80A5BDE4905B81E /* MacroEngineTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MacroEngineTests.swift; sourceTree = ""; }; 684737E62EE6495A71344923 /* DeepGeometryWalkThrottle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeepGeometryWalkThrottle.swift; sourceTree = ""; }; - 6A44BEC8C23FF227731DD0CD /* FocusCapabilityFlickerGate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FocusCapabilityFlickerGate.swift; sourceTree = ""; }; + 68ADAFFD5031EBFA70CD62BB /* EmojiPickerModelsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiPickerModelsTests.swift; sourceTree = ""; }; + 68C4773B9316036F7E594EE1 /* EmojiUsageModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiUsageModels.swift; sourceTree = ""; }; + 6A5B87C4C13EAE32813286C7 /* TextLayoutCaretEstimator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextLayoutCaretEstimator.swift; sourceTree = ""; }; 6B2D97BAA3618A7D0357AC44 /* SuggestionWorkController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionWorkController.swift; sourceTree = ""; }; - 6C34A98E5B05DB3F4FE81E70 /* ScreenTextExtractorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScreenTextExtractorTests.swift; sourceTree = ""; }; + 6B49898B64D4DB50736CBC46 /* ScreenFrameReader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScreenFrameReader.swift; sourceTree = ""; }; + 6C034C1C9E51031A845D1184 /* SuggestionEngineRouterTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionEngineRouterTests.swift; sourceTree = ""; }; 6CF1FBAABEF545B620AF8D78 /* ru-100k.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = "ru-100k.txt"; sourceTree = ""; }; - 6D4C1EF008B9DFA753D561D3 /* LlamaEvalScoringTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LlamaEvalScoringTests.swift; sourceTree = ""; }; 6DB982BF30B3601F57277776 /* fr-100k.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = "fr-100k.txt"; sourceTree = ""; }; - 6DC17643448271DE5DE61A89 /* DebouncePolicy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DebouncePolicy.swift; sourceTree = ""; }; - 6DC693E00430F46E41CB56E6 /* RequestID.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestID.swift; sourceTree = ""; }; - 6E3B1232C4BE8072A5183F9C /* SymSpell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SymSpell.swift; sourceTree = ""; }; + 6E2AA5BD865E0BCFB53DC699 /* AXHelperTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AXHelperTests.swift; sourceTree = ""; }; 6E3EC87078D3A4C21DB3252C /* RandomMacroEvaluator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RandomMacroEvaluator.swift; sourceTree = ""; }; + 6E53B16C1E0CE667E9666C71 /* SettingsAttentionEvaluatorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsAttentionEvaluatorTests.swift; sourceTree = ""; }; + 6EA8ECB565875395AA51E328 /* InsertionStrategySelectorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InsertionStrategySelectorTests.swift; sourceTree = ""; }; 6F0EE728C0B1A7AD6B19CD0C /* AGPL-3.0.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = "AGPL-3.0.txt"; sourceTree = ""; }; - 700275BECBBDA98354ABBDF9 /* EmojiCatalogTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiCatalogTests.swift; sourceTree = ""; }; - 70367FCC1E0F08EE3B8EB26F /* FocusCapabilityResolver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FocusCapabilityResolver.swift; sourceTree = ""; }; + 6F324C645A4E53FB6E90061A /* DownloadOutcomeClassifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DownloadOutcomeClassifier.swift; sourceTree = ""; }; + 6F49C55FFF4352A6763BAE1A /* PerDomainDisableSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PerDomainDisableSettings.swift; sourceTree = ""; }; + 6F75577575FB8E2D13510A2A /* SuggestionFocusFreshnessTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionFocusFreshnessTests.swift; sourceTree = ""; }; + 6F7E1691BC93836AE2FA8931 /* FocusModelsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FocusModelsTests.swift; sourceTree = ""; }; + 70F68E9A9255F607C4439ED5 /* VisualContextStartCoalescerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VisualContextStartCoalescerTests.swift; sourceTree = ""; }; 711293EA57808B9428C7B908 /* CotabbyAppEnvironment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CotabbyAppEnvironment.swift; sourceTree = ""; }; 7113D3373525113CA69E7597 /* PermissionsPaneView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PermissionsPaneView.swift; sourceTree = ""; }; - 723E1EFA85D2E61B6C5F33E8 /* EmojiTriggerStateMachineTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiTriggerStateMachineTests.swift; sourceTree = ""; }; + 7174EF88BA41ACC0A74CA582 /* OnboardingTemplateFeatureList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingTemplateFeatureList.swift; sourceTree = ""; }; 72B13136DF7318F3E96DF0D3 /* SuggestionCoordinator+Acceptance.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SuggestionCoordinator+Acceptance.swift"; sourceTree = ""; }; 733BF6287BDE599B02A12271 /* CurrentWordSpellChecker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CurrentWordSpellChecker.swift; sourceTree = ""; }; - 74BD1D4DB27D5D96D1E06096 /* DisplayCoordinateConverter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DisplayCoordinateConverter.swift; sourceTree = ""; }; 7513810E78F3C94FE972EB07 /* LGPL-3.0.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = "LGPL-3.0.txt"; sourceTree = ""; }; - 75396860978E81EFAA506CD4 /* EmojiQueryRunTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiQueryRunTests.swift; sourceTree = ""; }; - 764659D09C3F0E8FBD267102 /* EmojiPickerPanelController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiPickerPanelController.swift; sourceTree = ""; }; - 764EE0693994E2E126E7FC77 /* SuggestionFadeInPolicy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionFadeInPolicy.swift; sourceTree = ""; }; + 76B253B10FA2896242B6C26F /* SuggestionAnchorCacheTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionAnchorCacheTests.swift; sourceTree = ""; }; + 76BC705A82669AEFBC704F59 /* InlinePreviewView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InlinePreviewView.swift; sourceTree = ""; }; + 771EAA74003DAD7D4F3FD199 /* OnboardingTemplateFeatureListTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingTemplateFeatureListTests.swift; sourceTree = ""; }; + 7736E6B390C822F91CC1DA99 /* OCRTextHygiene.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OCRTextHygiene.swift; sourceTree = ""; }; + 7748B9FB3D88C383395CF528 /* SuggestionTextColorCodec.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionTextColorCodec.swift; sourceTree = ""; }; 77B0121E7BB173F8A2B0B108 /* WindowScreenshotService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WindowScreenshotService.swift; sourceTree = ""; }; - 78AFA4586C82E92D7FBF381B /* ArithmeticEvaluatorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArithmeticEvaluatorTests.swift; sourceTree = ""; }; + 786A5B721D148D09B5BDE651 /* GhostTextColorPreset.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GhostTextColorPreset.swift; sourceTree = ""; }; + 786EDA0AB3DACFDA1399D6A3 /* MidWordContinuationPolicyTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MidWordContinuationPolicyTests.swift; sourceTree = ""; }; 78E280F4F39A9D86840800D2 /* SuggestionCoordinator+Lifecycle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SuggestionCoordinator+Lifecycle.swift"; sourceTree = ""; }; - 78E49BDA7F3A42455C4C5350 /* HuggingFaceModelBrowserView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HuggingFaceModelBrowserView.swift; sourceTree = ""; }; - 7C0FCC5CCF6AE528E3C4DDA7 /* PerformanceMetricsStoreTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PerformanceMetricsStoreTests.swift; sourceTree = ""; }; - 7C46024A6D18B1AD9D04B3BD /* InsertedTextAdvanceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InsertedTextAdvanceTests.swift; sourceTree = ""; }; + 7907403362CEEFB8FA24FCCD /* SuggestionAvailabilityEvaluatorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionAvailabilityEvaluatorTests.swift; sourceTree = ""; }; + 79AAAB1C46A0E5A9C6FC7D3D /* SettingsAttentionEvaluator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsAttentionEvaluator.swift; sourceTree = ""; }; + 7AEBBBAB9588AA8EDBA41520 /* PermissionAndContextModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PermissionAndContextModelTests.swift; sourceTree = ""; }; + 7B3AD6D4125ED99669F4EC32 /* DownloadOutcomeClassifierTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DownloadOutcomeClassifierTests.swift; sourceTree = ""; }; 7C9BB65FA5FC42B89766B037 /* he-100k.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = "he-100k.txt"; sourceTree = ""; }; - 7D472F9F396672E57873303B /* InsertionSafetyGate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InsertionSafetyGate.swift; sourceTree = ""; }; - 7E44E393DD58B978B1EAB6CF /* GhostTextColorPreset.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GhostTextColorPreset.swift; sourceTree = ""; }; + 7CC541A0FCCE9172C24C1350 /* SyntheticReplacePlannerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SyntheticReplacePlannerTests.swift; sourceTree = ""; }; + 7CC9E0602050256E3B0B08B2 /* EmojiCatalog.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiCatalog.swift; sourceTree = ""; }; + 7D2E806C1915514651343055 /* HuggingFaceModelsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HuggingFaceModelsTests.swift; sourceTree = ""; }; + 7DE038A6DF4A16B3EB5CEBD3 /* MenuBarView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuBarView.swift; sourceTree = ""; }; + 7E36DC1471E2D627F4735A0C /* SystemResourceSampler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SystemResourceSampler.swift; sourceTree = ""; }; + 7E4C115072B97CCCE9020F72 /* LlamaPromptCacheHintTrackerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LlamaPromptCacheHintTrackerTests.swift; sourceTree = ""; }; 7E504DABB83411B3FA0B8DC5 /* FocusSessionScopedCache.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FocusSessionScopedCache.swift; sourceTree = ""; }; - 7F4C4A7EAF886E0CC945BFEF /* TerminalAppDetector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TerminalAppDetector.swift; sourceTree = ""; }; - 807148A920E003DEF8BA6092 /* SystemMetricsStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SystemMetricsStore.swift; sourceTree = ""; }; - 815F2ABAF6AB75DA3AFBBCEF /* WordCountFormatter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WordCountFormatter.swift; sourceTree = ""; }; - 81718CA62FBC775A6CEBCED1 /* SuggestionQualityMetricsStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionQualityMetricsStore.swift; sourceTree = ""; }; + 7F7E66CFA5AB733CE1F793A8 /* MarkerSelectionSynthesizerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MarkerSelectionSynthesizerTests.swift; sourceTree = ""; }; + 800ADA19752797F5704D9B72 /* TrailingDuplicationFilterTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrailingDuplicationFilterTests.swift; sourceTree = ""; }; + 81D275EF19CA4133543F8DE1 /* CaretGeometrySelector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CaretGeometrySelector.swift; sourceTree = ""; }; + 81D7F428477976398CFC5CCF /* DecodeStopPolicyTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DecodeStopPolicyTests.swift; sourceTree = ""; }; 82E7794DF60664B1FA8F6E7B /* UnitConversionEvaluator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UnitConversionEvaluator.swift; sourceTree = ""; }; - 82F7F7355967725162DF2D1B /* CustomRulesEditor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomRulesEditor.swift; sourceTree = ""; }; - 83A810F9D28A18BA6F2066C7 /* MenuBarSections.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuBarSections.swift; sourceTree = ""; }; + 841C71C9523CF19D9212F1CD /* SuggestionAnchorCache.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionAnchorCache.swift; sourceTree = ""; }; + 846A1C3328B3B1CB42E2E46B /* EmojiUsageStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiUsageStore.swift; sourceTree = ""; }; + 8489C1318F0232BFF9F2758C /* TextDirectionDetector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextDirectionDetector.swift; sourceTree = ""; }; 85BF316556FDA64CB8AD07B6 /* PermissionManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PermissionManager.swift; sourceTree = ""; }; - 85EF79E6144D6C6AD062B569 /* BaseCompletionPromptRenderer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseCompletionPromptRenderer.swift; sourceTree = ""; }; - 86460C747AA883FDE756BDBA /* SuggestionSettingsModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionSettingsModel.swift; sourceTree = ""; }; - 866D74711A35E0085D2A4BB3 /* SettingsSearchRanker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsSearchRanker.swift; sourceTree = ""; }; + 85C36B59551CE66231CB8E26 /* CaretLinePositionTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CaretLinePositionTests.swift; sourceTree = ""; }; + 85E6C2EBE2B63C2DF3CC4073 /* LanguageTagsEditor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LanguageTagsEditor.swift; sourceTree = ""; }; + 863B5A1DC3C4B9668F620245 /* CalendarAccessibilityCapturePolicyTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalendarAccessibilityCapturePolicyTests.swift; sourceTree = ""; }; + 865F7C0490DAF7D77523BE84 /* SettingsIndexTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsIndexTests.swift; sourceTree = ""; }; + 8711876D1C2789D34601E159 /* SuggestionOverlayStabilityGateTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionOverlayStabilityGateTests.swift; sourceTree = ""; }; + 871C7A27BAB5A510273D0A19 /* EmojiPickerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiPickerView.swift; sourceTree = ""; }; 8724ECA8FABBC82B0A2B943B /* FoundationModelAvailabilityService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoundationModelAvailabilityService.swift; sourceTree = ""; }; - 87C309CD6A454C415D8BEEC7 /* SuggestionTextColorCodecTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionTextColorCodecTests.swift; sourceTree = ""; }; + 872C8DDC2E86A1C4C4BBD99F /* EmojiPickerPanelController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiPickerPanelController.swift; sourceTree = ""; }; + 8736D4321E8BF847D1F7338E /* EmojiPickerModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiPickerModels.swift; sourceTree = ""; }; + 8772CBA9365F890D03A56995 /* AppSurfaceClassifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppSurfaceClassifier.swift; sourceTree = ""; }; + 87C6335EED41343595F17A08 /* PopupChrome.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PopupChrome.swift; sourceTree = ""; }; + 880D641ED480016420D007A0 /* EmojiVariantResolver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiVariantResolver.swift; sourceTree = ""; }; 8896D976C7F116EBA0F3969F /* ChromiumAccessibilityEnabler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChromiumAccessibilityEnabler.swift; sourceTree = ""; }; 89497C35D1825BAE9625EE06 /* ContextPaneView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContextPaneView.swift; sourceTree = ""; }; - 8BF8DC1860CCF0DFA3A3DFD7 /* TextLayoutCaretEstimator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextLayoutCaretEstimator.swift; sourceTree = ""; }; - 8CB1D4F2681FAF59014AE115 /* SuggestionInteractionStateTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionInteractionStateTests.swift; sourceTree = ""; }; + 8A502BFB13373D1931B082CD /* TokenCountEstimator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TokenCountEstimator.swift; sourceTree = ""; }; + 8AB17696CE79982039061F29 /* SuggestionSettingsStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionSettingsStore.swift; sourceTree = ""; }; + 8B4F6E70B8A242F7BDE5361A /* FocusDebugOverlayController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FocusDebugOverlayController.swift; sourceTree = ""; }; + 8BE5F414704A8264C2946A50 /* TypoGateTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TypoGateTests.swift; sourceTree = ""; }; 8CF6B7FFBF77B4290F5F2FB8 /* SurfaceContextCache.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SurfaceContextCache.swift; sourceTree = ""; }; - 8D610FCA3A97249DCCE7D0B8 /* LLMIOFileHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LLMIOFileHandler.swift; sourceTree = ""; }; - 8EA827D6A2A54DF4BAD56405 /* CaretLinePositionTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CaretLinePositionTests.swift; sourceTree = ""; }; - 8F20A19A24D20E16D25ADCDA /* DeepGeometryWalkThrottleTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeepGeometryWalkThrottleTests.swift; sourceTree = ""; }; - 8F426127917FCB1096134732 /* HuggingFaceSearchService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HuggingFaceSearchService.swift; sourceTree = ""; }; 8F961F5DF2A392F6F5F94F8A /* SuggestionCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionCoordinator.swift; sourceTree = ""; }; - 9030FAAB468119A0236284A6 /* LLMIOFileHandlerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LLMIOFileHandlerTests.swift; sourceTree = ""; }; - 906011A6C9D66EEBAF3B5CC0 /* LlamaEvalScoring.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LlamaEvalScoring.swift; sourceTree = ""; }; 907549CB913B40C28B953A5D /* SettingsRowLabel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsRowLabel.swift; sourceTree = ""; }; - 90B0D133AB77A2503FB08827 /* ClipboardRelevanceFilterTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClipboardRelevanceFilterTests.swift; sourceTree = ""; }; - 9255CBCDE66253F521EE0F08 /* SystemResourceSamplerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SystemResourceSamplerTests.swift; sourceTree = ""; }; + 924CAA5E25C596A9FAB7602B /* InlinePreviewPanelController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InlinePreviewPanelController.swift; sourceTree = ""; }; 926B332E7B4CFEE42C4CAA75 /* OnboardingFeatureShowcase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingFeatureShowcase.swift; sourceTree = ""; }; 92C6EB9FDA48ADF425A116A9 /* PermissionOverlayWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PermissionOverlayWindowController.swift; sourceTree = ""; }; - 93AF1246C1C2E296A1162E63 /* CotabbyDebugOptionsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CotabbyDebugOptionsTests.swift; sourceTree = ""; }; + 9316289DD11A72D3EAC0A929 /* CompositionInputModeClassifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CompositionInputModeClassifier.swift; sourceTree = ""; }; 944065A858D9BC936CB12B23 /* LlamaRuntimeCore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LlamaRuntimeCore.swift; sourceTree = ""; }; - 9458F0820B3161FE9CF1DDAF /* GhostFontSizeStabilizer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GhostFontSizeStabilizer.swift; sourceTree = ""; }; - 94B0830FBE4F2E239F670DBA /* AppSurfaceClassifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppSurfaceClassifier.swift; sourceTree = ""; }; - 960F3FDBF283347594F30494 /* SuggestionSettingsStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionSettingsStore.swift; sourceTree = ""; }; - 96495E4147D828C0B1B22765 /* ClipboardContentDistiller.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClipboardContentDistiller.swift; sourceTree = ""; }; + 94979FB3D3560BF2C5787E31 /* EmojiPickerPanelLayoutTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiPickerPanelLayoutTests.swift; sourceTree = ""; }; + 94D11446FF576F0BBDEE2D2F /* EmojiQueryRun.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiQueryRun.swift; sourceTree = ""; }; + 952BA2A01E31BC4E74B7736C /* BrowserDomainTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BrowserDomainTests.swift; sourceTree = ""; }; + 95C62A4403E4815004C6FCB8 /* SettingsSearchRankerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsSearchRankerTests.swift; sourceTree = ""; }; + 95EF4BBE7320021CB8CD54D9 /* ConfidenceSuppressionPolicy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConfidenceSuppressionPolicy.swift; sourceTree = ""; }; 96C455CB8D11E89CEDA0B3AE /* OpenAICompatibleAPIClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenAICompatibleAPIClient.swift; sourceTree = ""; }; 974A8708D2006767BD76862A /* MacroEngine.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MacroEngine.swift; sourceTree = ""; }; - 979A7867966180A545BB44C4 /* PerformanceMetricsStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PerformanceMetricsStore.swift; sourceTree = ""; }; - 98E25C90F99356EB5E249225 /* SuggestionCoordinatorInputTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionCoordinatorInputTests.swift; sourceTree = ""; }; - 9966D09D8D80F54BF2734E00 /* BaseCompletionPromptRendererTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseCompletionPromptRendererTests.swift; sourceTree = ""; }; + 977CE0DE2F43D3F964C0EC73 /* SuggestionModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionModels.swift; sourceTree = ""; }; + 97AA016AC303DB8FC3F54A16 /* SuggestionTextColorCodecTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionTextColorCodecTests.swift; sourceTree = ""; }; + 97F14FC0E8E0A5D23FA2F54C /* KeyCodeLabelsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyCodeLabelsTests.swift; sourceTree = ""; }; 99FBB636008490B66CF26772 /* frequency_dictionary_en_82_765.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = frequency_dictionary_en_82_765.txt; sourceTree = ""; }; - 9A7CDA90E128350BFF1A9D66 /* LanguageTagsEditor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LanguageTagsEditor.swift; sourceTree = ""; }; - 9AA0117B322C625F6D4BBEAB /* MenuBarView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuBarView.swift; sourceTree = ""; }; + 9A02F9151AEBBD825D64CEFA /* SuggestionDebugLoggerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionDebugLoggerTests.swift; sourceTree = ""; }; + 9A3C5A66AA93E50E4A64ED46 /* OverlayController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OverlayController.swift; sourceTree = ""; }; + 9A47949D77BB2E411F1B81E5 /* OpenAICompatibleAPIClientTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenAICompatibleAPIClientTests.swift; sourceTree = ""; }; + 9AA97052545B05BA82450A6D /* TokenCountEstimatorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TokenCountEstimatorTests.swift; sourceTree = ""; }; 9ABC808DE01AF9AD04E38943 /* OnboardingStyle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingStyle.swift; sourceTree = ""; }; - 9B3179B40A81DF121D1221C6 /* StaticTextRunWalkThrottleTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StaticTextRunWalkThrottleTests.swift; sourceTree = ""; }; - 9B55A4362AB7F0528C661C4C /* SuggestionTextNormalizerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionTextNormalizerTests.swift; sourceTree = ""; }; 9B84BAE361626891F19DC9DB /* ScreenshotContextGenerator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScreenshotContextGenerator.swift; sourceTree = ""; }; - 9BC3BE51EFE0A1B2B13BD02B /* SuggestionAnchorCacheTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionAnchorCacheTests.swift; sourceTree = ""; }; - 9C2F4A55D7EC8C29D47B45C4 /* SuggestionCoordinatorLifecycleTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionCoordinatorLifecycleTests.swift; sourceTree = ""; }; - 9C8F07AC52C7A482F5FE34C5 /* SuggestionSessionReconcilerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionSessionReconcilerTests.swift; sourceTree = ""; }; - 9CC2D6472ACD377FD73A5801 /* ControlTokenMarkers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ControlTokenMarkers.swift; sourceTree = ""; }; - 9CF4FB0EC6C1BEB4EA74910A /* ClipboardContextProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClipboardContextProvider.swift; sourceTree = ""; }; + 9BB500911B047A5363D51E71 /* LLMIOFileHandlerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LLMIOFileHandlerTests.swift; sourceTree = ""; }; 9D1F76146AC25F3B077B1F6D /* WelcomeKeybindStepView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WelcomeKeybindStepView.swift; sourceTree = ""; }; 9D598CC3134879999D567455 /* SuggestionOverlayPresenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionOverlayPresenter.swift; sourceTree = ""; }; 9D77C99769239E4B33D6B2C9 /* InlineCommandCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InlineCommandCoordinator.swift; sourceTree = ""; }; - 9D82FFC568527700EC17C07D /* PermissionModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PermissionModels.swift; sourceTree = ""; }; - 9E5F074ED7E340E9B9E4C5E0 /* EmojiPickerModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiPickerModels.swift; sourceTree = ""; }; - 9E6439213F2A273702A6E26B /* GhostFontMetrics.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GhostFontMetrics.swift; sourceTree = ""; }; - 9E72A3972E15749337539C2D /* EmojiRecents.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiRecents.swift; sourceTree = ""; }; - A1267FF524A170ACC144E919 /* InsertedTextAdvance.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InsertedTextAdvance.swift; sourceTree = ""; }; - A168A7B6A7AD11559B60C56B /* ApplicationBundleMetadataTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApplicationBundleMetadataTests.swift; sourceTree = ""; }; - A1B68641C8203AEB8CBE6D98 /* OpenAICompatibleEndpointModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenAICompatibleEndpointModels.swift; sourceTree = ""; }; + 9DE86A49339BB507D197629D /* MenuBarPresentationObserver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuBarPresentationObserver.swift; sourceTree = ""; }; + 9DFA4093ADA92D5E33F1F833 /* SuggestionTextNormalizer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionTextNormalizer.swift; sourceTree = ""; }; + A04DFC5BD7821D73DA21D7DB /* TagChip.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TagChip.swift; sourceTree = ""; }; + A1060EACEF2E526956DD78A2 /* EmojiSynonymCatalogTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiSynonymCatalogTests.swift; sourceTree = ""; }; + A11589537F19EDE247697056 /* MirrorOverlayLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MirrorOverlayLayout.swift; sourceTree = ""; }; + A1C9DBC2A94B6E805EDAFEA5 /* MacroTriggerStateMachineTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MacroTriggerStateMachineTests.swift; sourceTree = ""; }; + A1FE47A75EA31B7384585C18 /* GhostFontMetricsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GhostFontMetricsTests.swift; sourceTree = ""; }; A28B4A4368DB33C25E3AB5F3 /* EmojiPaneView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiPaneView.swift; sourceTree = ""; }; + A29DF1C68154C21E6943D38E /* InputModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InputModels.swift; sourceTree = ""; }; + A2E9AF341F8F7043D5344B20 /* SymSpell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SymSpell.swift; sourceTree = ""; }; + A306C7B2B0790A0B98D8F353 /* PerDomainDisableSettingsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PerDomainDisableSettingsTests.swift; sourceTree = ""; }; A3E8E86A14090BC7BD13BA76 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; A3FA53BBC3D81503C1D17477 /* AboutPaneView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AboutPaneView.swift; sourceTree = ""; }; - A4B220D9A25174A43E7A258B /* OnboardingFlowStepTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingFlowStepTests.swift; sourceTree = ""; }; - A520809E71697E3BB9A8139C /* HuggingFaceModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HuggingFaceModels.swift; sourceTree = ""; }; A52D0B550E00EF173A5D157E /* LlamaRuntimeManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LlamaRuntimeManager.swift; sourceTree = ""; }; A594D02B0EF3C2DD62EFE69A /* GhostTextPreview.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GhostTextPreview.swift; sourceTree = ""; }; - A691EB51A7B93D1FAC38657F /* LlamaSuggestionEvalTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LlamaSuggestionEvalTests.swift; sourceTree = ""; }; - A804F4DB6FD9BC8C27B2B65F /* LlamaRuntimeModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LlamaRuntimeModels.swift; sourceTree = ""; }; - A829F28F01FAE76CA7244BBC /* ModelFileValidatorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ModelFileValidatorTests.swift; sourceTree = ""; }; + A62CBDE1462C7733E4228BBE /* SuggestionFadeInPolicy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionFadeInPolicy.swift; sourceTree = ""; }; + A73AF6E8961EC168FA6DDD2D /* FoundationModelAvailabilityServiceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoundationModelAvailabilityServiceTests.swift; sourceTree = ""; }; + A73D95F2BF5CA59705653931 /* PromptSectionBudgetTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PromptSectionBudgetTests.swift; sourceTree = ""; }; + A7786D3C52CC72971B74657F /* EmojiRecents.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiRecents.swift; sourceTree = ""; }; + A8104A4A22860581743CCC81 /* SentenceBoundaryClassifierTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SentenceBoundaryClassifierTests.swift; sourceTree = ""; }; A854CAFB1F557BC4CAED8819 /* VisualContextCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VisualContextCoordinator.swift; sourceTree = ""; }; - A863F41C0C03D7B4AC5DC002 /* MarkerSelectionSynthesizer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MarkerSelectionSynthesizer.swift; sourceTree = ""; }; - AA33F5FFAC5B99384E15CE3E /* BundledRuntimeLocator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BundledRuntimeLocator.swift; sourceTree = ""; }; - AABCC3FD99B1824A81E665F3 /* LlamaSuggestionEngineCancellationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LlamaSuggestionEngineCancellationTests.swift; sourceTree = ""; }; - AAEFF8BAEC9168CADEDD4757 /* InlinePreviewPanelController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InlinePreviewPanelController.swift; sourceTree = ""; }; + A914A6C81B1824E4907ACADE /* SuggestionSettingsData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionSettingsData.swift; sourceTree = ""; }; + A9331B12568E717FCF9A5086 /* CurrentWordExtractorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CurrentWordExtractorTests.swift; sourceTree = ""; }; + A9FD2044CDEA95EC02C9B2FE /* MarkerSelectionSynthesizer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MarkerSelectionSynthesizer.swift; sourceTree = ""; }; + AA86BBD7476CFAA0BB6A1C55 /* SuggestionCoordinatorPredictionTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionCoordinatorPredictionTests.swift; sourceTree = ""; }; + AADD165EBA2FE4C66F5BA885 /* SuggestionAvailabilityEvaluator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionAvailabilityEvaluator.swift; sourceTree = ""; }; + AAE89BEAF57DF3A287DF56F1 /* PromptSectionBudget.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PromptSectionBudget.swift; sourceTree = ""; }; + AB1A91DE0EA12F499D2129D0 /* InsertionSafetyGate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InsertionSafetyGate.swift; sourceTree = ""; }; AB4548AF1ED25F574CCFA680 /* WelcomePersonalizeStepView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WelcomePersonalizeStepView.swift; sourceTree = ""; }; AB84C175EA5B59E118F58C49 /* llama-eval-cases.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = "llama-eval-cases.json"; sourceTree = ""; }; - AC70775535A3428991025AB8 /* AXHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AXHelper.swift; sourceTree = ""; }; - AD752451330486FE270018B0 /* CustomRulesTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomRulesTests.swift; sourceTree = ""; }; - AD8025E4A296845FC53E660D /* BrowserDomain.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BrowserDomain.swift; sourceTree = ""; }; - AD9573F3504CAE6891DF9B7D /* AppUpdateManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppUpdateManager.swift; sourceTree = ""; }; - ADBE3E6CC585C1683787C877 /* SuggestionEngineModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionEngineModels.swift; sourceTree = ""; }; - AE98A6C28731BF5C8D434543 /* FileLogHandlerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileLogHandlerTests.swift; sourceTree = ""; }; - AF1E065C7FFB697FCEB2FA5C /* CotabbyTestFixtures.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CotabbyTestFixtures.swift; sourceTree = ""; }; + AC8F0BAC452D20743D316FB6 /* FocusSnapshotResolverLiveTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FocusSnapshotResolverLiveTests.swift; sourceTree = ""; }; + AC94E159E15C2F2C06D77B4F /* AXTreeDumpWriterTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AXTreeDumpWriterTests.swift; sourceTree = ""; }; + ACAD48CDC2F27F49558473F1 /* CompletionRenderModePolicy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CompletionRenderModePolicy.swift; sourceTree = ""; }; + AD003D4EBE530DC0E2B87C24 /* PermissionOverlayTrackerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PermissionOverlayTrackerTests.swift; sourceTree = ""; }; AFBE491B3CA04FE9069B7B0F /* AppearancePaneView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppearancePaneView.swift; sourceTree = ""; }; - AFCFCCCB69C29A86E726B10A /* PromptSectionBudget.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PromptSectionBudget.swift; sourceTree = ""; }; - B1E6D9CCC0AA3674FEE57AE0 /* RuntimeBootstrapModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RuntimeBootstrapModelTests.swift; sourceTree = ""; }; - B22FDEB3B1DCC9ADE906CC73 /* OCRTextHygiene.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OCRTextHygiene.swift; sourceTree = ""; }; - B25C3087D4A9F4DC52FD5A69 /* PerDomainDisableSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PerDomainDisableSettings.swift; sourceTree = ""; }; + B1AAC6367483952AB7D59A62 /* CurrentWordExtractor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CurrentWordExtractor.swift; sourceTree = ""; }; + B2229037BCDF7EFD3D47C15F /* ClipboardContentDistiller.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClipboardContentDistiller.swift; sourceTree = ""; }; B27492B04B627DA53BDAD938 /* AXTreeDumpWriter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AXTreeDumpWriter.swift; sourceTree = ""; }; - B2BFD19A159680A495EE02FD /* ScreenshotContextGeneratorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScreenshotContextGeneratorTests.swift; sourceTree = ""; }; - B2F95847D76893C8A5B504B4 /* SuggestionOverlayStabilityGate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionOverlayStabilityGate.swift; sourceTree = ""; }; - B32482EABE9EA979C40C8A8F /* SymSpellTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SymSpellTests.swift; sourceTree = ""; }; - B3B09064903B760D6DF2DF7D /* DecodeStopPolicyTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DecodeStopPolicyTests.swift; sourceTree = ""; }; + B293615FC411551C3FC15528 /* TypoCaseTransfer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TypoCaseTransfer.swift; sourceTree = ""; }; + B33E640B7FF8B1E8D53E7D85 /* CompletionRenderModePolicyTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CompletionRenderModePolicyTests.swift; sourceTree = ""; }; + B397084B31E549177DDC3F69 /* FocusCapabilityResolverTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FocusCapabilityResolverTests.swift; sourceTree = ""; }; B41F06FEF208B30ECCF23A6F /* MacroModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MacroModels.swift; sourceTree = ""; }; - B424E2AC97C99D335B0D5751 /* SuggestionTextNormalizer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionTextNormalizer.swift; sourceTree = ""; }; - B4660F0FA8500594314C6D5C /* OllamaPreloadWorkControllerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OllamaPreloadWorkControllerTests.swift; sourceTree = ""; }; - B4B4A2E2DD6733658EC05BD8 /* DownloadFileRescuer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DownloadFileRescuer.swift; sourceTree = ""; }; - B4CC566AC1DE33FD0CD30E1E /* SuggestionQualityMetricsStoreTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionQualityMetricsStoreTests.swift; sourceTree = ""; }; + B494C76056D9B01D6A3ECABD /* SuggestionEngineModelsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionEngineModelsTests.swift; sourceTree = ""; }; + B4C5E3A714F5A7818337101C /* OnboardingTemplateTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingTemplateTests.swift; sourceTree = ""; }; B6ACCB12E4DB32D2F2BEA567 /* PermissionHostApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PermissionHostApp.swift; sourceTree = ""; }; - B6D36DB66629CF22C1783945 /* CompletionSeamGuardTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CompletionSeamGuardTests.swift; sourceTree = ""; }; - B6D42CD456B4B3C988B148A6 /* FocusTrackingModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FocusTrackingModel.swift; sourceTree = ""; }; B6FE1277859A1402F8FB7E4E /* WelcomeHeroDemo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WelcomeHeroDemo.swift; sourceTree = ""; }; - B78AA11B52A6588119ABF76F /* TokenCountEstimatorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TokenCountEstimatorTests.swift; sourceTree = ""; }; - B7B185BA246A526CBA85E581 /* EmojiPickerPanelLayoutTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiPickerPanelLayoutTests.swift; sourceTree = ""; }; - B7EB66904C35A7D8BEF5D2A5 /* SpeculativeAcceptanceContext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpeculativeAcceptanceContext.swift; sourceTree = ""; }; B7FBF2B766E728F25899B64E /* FieldStyleCache.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FieldStyleCache.swift; sourceTree = ""; }; B81DD30EB657368AACE9625A /* InputMonitor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InputMonitor.swift; sourceTree = ""; }; - B8412FE2BAC406421248A03B /* TypoGate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TypoGate.swift; sourceTree = ""; }; - B997EC69E1C65B1E18234221 /* BrowserAppDetector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BrowserAppDetector.swift; sourceTree = ""; }; - BA705EDFE1C41294F0E381F1 /* FocusSnapshotResolverSelectionTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FocusSnapshotResolverSelectionTests.swift; sourceTree = ""; }; - BAC01317B0B68E3C4125E421 /* InputMonitorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InputMonitorTests.swift; sourceTree = ""; }; + B8EBC9F1890DD2FFC4884A5C /* SecureFieldDetectorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureFieldDetectorTests.swift; sourceTree = ""; }; BADB38D0160B47637572FC5E /* SettingsSidebarView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsSidebarView.swift; sourceTree = ""; }; - BB5C2AE9A7E55495D26AD074 /* DownloadableModelCatalogView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DownloadableModelCatalogView.swift; sourceTree = ""; }; + BB36177FC6C26F5E4CD1AD6E /* InputMonitorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InputMonitorTests.swift; sourceTree = ""; }; + BC2A342474E4B41D8B385DC2 /* EmojiCatalogMatcherTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiCatalogMatcherTests.swift; sourceTree = ""; }; BC4F887528AE74AC0DD30314 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - BD42C7E2852F59BEF7972663 /* MenuBarStatusLabelView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuBarStatusLabelView.swift; sourceTree = ""; }; + BCF2889446A21BC8AC773A81 /* CotabbyTestFixtures.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CotabbyTestFixtures.swift; sourceTree = ""; }; + BD46042FD66F6D6F206B1763 /* ApplicationBundleMetadataTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApplicationBundleMetadataTests.swift; sourceTree = ""; }; BE04620C905041680116BE80 /* LlamaSuggestionEngine.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LlamaSuggestionEngine.swift; sourceTree = ""; }; BE0A565A2AD007EBE9D70697 /* SettingsQuickLinkCard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsQuickLinkCard.swift; sourceTree = ""; }; + BE2844BF23632FC9B0824ABE /* HardwareCapabilityProbe.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HardwareCapabilityProbe.swift; sourceTree = ""; }; + BE6EA89178F52F6D5B90CBFE /* LanguageCatalog.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LanguageCatalog.swift; sourceTree = ""; }; BE8D7424D350FC7C0685DBEC /* SettingsSearchResultRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsSearchResultRow.swift; sourceTree = ""; }; - BE97A8169438D593C6C23412 /* VisualContextModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VisualContextModels.swift; sourceTree = ""; }; + BEB506B1042CD234D77258D4 /* SuggestionStateHelperTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionStateHelperTests.swift; sourceTree = ""; }; BEF60972B2D88E4EC4841AB0 /* GPL-3.0.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = "GPL-3.0.txt"; sourceTree = ""; }; - BF474064973F4752F79BB041 /* EmojiSynonymCatalogTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiSynonymCatalogTests.swift; sourceTree = ""; }; - BF4BB93056F291FD24EFAD22 /* LanguageCatalog.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LanguageCatalog.swift; sourceTree = ""; }; - BF7F3EB7B874C836BF75F15D /* EmojiPickerModelsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiPickerModelsTests.swift; sourceTree = ""; }; - C046CB4F3CB4BFE9391DB5DE /* AXTextGeometryResolverTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AXTextGeometryResolverTests.swift; sourceTree = ""; }; - C05B0439348261163B37C508 /* SuggestionAvailabilityEvaluatorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionAvailabilityEvaluatorTests.swift; sourceTree = ""; }; - C1C5DE0F3FF63545000E2453 /* DisplayCoordinateConverterTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DisplayCoordinateConverterTests.swift; sourceTree = ""; }; + BF924740638E6A6F77FCB4C4 /* LlamaDecodeGateDefaultsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LlamaDecodeGateDefaultsTests.swift; sourceTree = ""; }; + C1337F5C94FA9A6388841805 /* FocusPollBackoffTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FocusPollBackoffTests.swift; sourceTree = ""; }; + C231B65BAF20AD33A3C0130C /* SentenceBoundaryClassifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SentenceBoundaryClassifier.swift; sourceTree = ""; }; C2AD7D366EC4344D332EE6A3 /* Signing.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Signing.xcconfig; sourceTree = ""; }; - C2FDC5884B07B19B9B4917A6 /* SuggestionPauseModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionPauseModels.swift; sourceTree = ""; }; - C375227649689775275AA4B3 /* SuggestionCoordinatorAcceptanceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionCoordinatorAcceptanceTests.swift; sourceTree = ""; }; + C319B4FF652512A69377DD5C /* DecodeStopPolicy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DecodeStopPolicy.swift; sourceTree = ""; }; C379D77029D6E88C8C1B9AF7 /* emoji.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = emoji.json; sourceTree = ""; }; - C3A35FAA742408D002B75920 /* WebContentFieldDetector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebContentFieldDetector.swift; sourceTree = ""; }; - C451E144D220D5C63372A8C0 /* AppSurfaceClassifierTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppSurfaceClassifierTests.swift; sourceTree = ""; }; - C49F67B3EEB2F2A577A54085 /* DeviceInfoTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeviceInfoTests.swift; sourceTree = ""; }; - C533B73CDDA3685135C460FB /* SettingsSearchRankerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsSearchRankerTests.swift; sourceTree = ""; }; - C602357DDED5D11C8B4567FB /* SurfaceContextComposer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SurfaceContextComposer.swift; sourceTree = ""; }; + C4B70455CA75A08FAD0F7409 /* ClipboardContextProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClipboardContextProvider.swift; sourceTree = ""; }; + C51EBCF982A0A9A4A1084EBB /* DisplayCoordinateConverterTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DisplayCoordinateConverterTests.swift; sourceTree = ""; }; + C57BCCAF434D44772948B696 /* FileLogHandlerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileLogHandlerTests.swift; sourceTree = ""; }; C648EBB10D7F8E0B904DEC91 /* de.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = de.txt; sourceTree = ""; }; - C71031E8DB171047318B92FC /* SyntheticReplacePlannerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SyntheticReplacePlannerTests.swift; sourceTree = ""; }; - C727BF6FF8ACAAED30B0329F /* TypoGateTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TypoGateTests.swift; sourceTree = ""; }; - C7B2D34A6F3AC9DFD61350F7 /* CotabbyDebugOptions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CotabbyDebugOptions.swift; sourceTree = ""; }; - C850141146422A132B2B3516 /* SymSpellCorrectorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SymSpellCorrectorTests.swift; sourceTree = ""; }; + C696204AAEBA357129F77646 /* HuggingFaceModelBrowserView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HuggingFaceModelBrowserView.swift; sourceTree = ""; }; + C736C539D4C97B5664E498BE /* HuggingFaceModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HuggingFaceModels.swift; sourceTree = ""; }; C9C000E46A1E404932F89C81 /* he.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = he.txt; sourceTree = ""; }; - CA5B101C75C5D3972E33E8E0 /* SpeculativeAcceptanceContextTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpeculativeAcceptanceContextTests.swift; sourceTree = ""; }; + C9F9F3C58A0635AAB53D0441 /* EmojiPickerControllerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiPickerControllerTests.swift; sourceTree = ""; }; CA942A53B7C09D1F4EC57239 /* SuggestionInteractionState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionInteractionState.swift; sourceTree = ""; }; + CB051B5B72986C03AB1EE428 /* MenuBarStatusLabelView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuBarStatusLabelView.swift; sourceTree = ""; }; CB58035EFFD65B767949BAE6 /* AXTextGeometryResolver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AXTextGeometryResolver.swift; sourceTree = ""; }; - CBD5FCB8CC56AA6138382B2C /* FieldEdgeIconIndicatorView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FieldEdgeIconIndicatorView.swift; sourceTree = ""; }; + CBDBD55F205C609303913423 /* SpellingDictionaryResourceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpellingDictionaryResourceTests.swift; sourceTree = ""; }; CC1EDFB535AAA2EE0D67828A /* CotabbyApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CotabbyApp.swift; sourceTree = ""; }; + CC5CD24D2FF35FD36B8D78DE /* SuggestionQualityMetricsStoreTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionQualityMetricsStoreTests.swift; sourceTree = ""; }; CD5611C5D712701A8B10C731 /* OpenAICompatibleSuggestionEngine.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenAICompatibleSuggestionEngine.swift; sourceTree = ""; }; - CDB25ABC4FFB0E63477CDCB0 /* SuggestionOverlayStabilityGateTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionOverlayStabilityGateTests.swift; sourceTree = ""; }; - CE0AA0503128B0FC3951D700 /* SuggestionSessionReconciler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionSessionReconciler.swift; sourceTree = ""; }; + CD72ADA2F88BD3C7E56CD8EC /* EmojiTriggerStateMachineTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiTriggerStateMachineTests.swift; sourceTree = ""; }; + CDDAB2E5837445522CF66B74 /* KeyRecorderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyRecorderView.swift; sourceTree = ""; }; CE343D89A8632B629B38D351 /* OpenAICompatibleCredentialStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenAICompatibleCredentialStore.swift; sourceTree = ""; }; - CE8C2569A8217EE9BD3B197F /* FileLogHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileLogHandler.swift; sourceTree = ""; }; - D0AF9479EF020071CA64CCC1 /* HuggingFaceModelsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HuggingFaceModelsTests.swift; sourceTree = ""; }; + CF96999230079A768BEFD0FC /* KeycapView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeycapView.swift; sourceTree = ""; }; + CFB3F1AA4007F0B44CA70E6F /* SymSpellTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SymSpellTests.swift; sourceTree = ""; }; D1123AB515110BD0CBA39490 /* HomePaneView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomePaneView.swift; sourceTree = ""; }; - D12ABBCE23A946C22894945B /* DecodeStopPolicy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DecodeStopPolicy.swift; sourceTree = ""; }; - D1AA6A6F4C3A54B5DA2A0022 /* StreamedGhostTextPolicyTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StreamedGhostTextPolicyTests.swift; sourceTree = ""; }; + D182046E27CB170D943E8F86 /* PromptContextSanitizer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PromptContextSanitizer.swift; sourceTree = ""; }; + D1AB5EBB44EE64EB3EB1426F /* BundledRuntimeLocator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BundledRuntimeLocator.swift; sourceTree = ""; }; + D22CA80189225431804E87B0 /* EmojiPickerPanelLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiPickerPanelLayout.swift; sourceTree = ""; }; + D253D06D941F60EDAF112625 /* SuggestionSettingsModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionSettingsModelTests.swift; sourceTree = ""; }; D27A2CEA7B4E0CDACBC986C2 /* WelcomePermissionStepView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WelcomePermissionStepView.swift; sourceTree = ""; }; - D2CD766561AE027DF0BD341A /* OpenAICompatibleAPIClientTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenAICompatibleAPIClientTests.swift; sourceTree = ""; }; - D2D0FE44138BCA8B2EE05AFE /* TypoCaseTransferTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TypoCaseTransferTests.swift; sourceTree = ""; }; - D2F46767D9D1F0D44E239CA8 /* DownloadFileRescuerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DownloadFileRescuerTests.swift; sourceTree = ""; }; - D3A2AC525DC664DB540D4F19 /* ClipboardRelevanceFilter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClipboardRelevanceFilter.swift; sourceTree = ""; }; - D408D647412C59F3E692C42B /* TrailingDuplicationFilter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrailingDuplicationFilter.swift; sourceTree = ""; }; - D44745635AF702C96B4225A2 /* AXTreeDumpWriterTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AXTreeDumpWriterTests.swift; sourceTree = ""; }; + D3C1C9A9BF1F74C16E4401EC /* CotabbyBrand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CotabbyBrand.swift; sourceTree = ""; }; + D47E1471C110614F0D07E399 /* PermissionModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PermissionModels.swift; sourceTree = ""; }; D48B95B6665109B6C6A63B42 /* WritingPaneView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WritingPaneView.swift; sourceTree = ""; }; - D49F3B597374208594861B9B /* FoundationModelDriftEvalTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoundationModelDriftEvalTests.swift; sourceTree = ""; }; - D4B56C250DDEF3E81F9DCBD7 /* SentenceBoundaryClassifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SentenceBoundaryClassifier.swift; sourceTree = ""; }; - D4F6D5F94B238F7B4BE7C247 /* FocusCapabilityResolverTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FocusCapabilityResolverTests.swift; sourceTree = ""; }; - D504BEB224E0C176F5FCFF6E /* CompletionRenderModePolicyTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CompletionRenderModePolicyTests.swift; sourceTree = ""; }; - D562A73C7C680F2AA65F9F7F /* SpellingDictionaryResourceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpellingDictionaryResourceTests.swift; sourceTree = ""; }; - D5A5591BEB9EE7B6E9064412 /* SelfCaptureGateTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelfCaptureGateTests.swift; sourceTree = ""; }; - D77364C1AF183EF1C0A4074D /* CaretLinePosition.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CaretLinePosition.swift; sourceTree = ""; }; - D8083D44ABCDCFA68A4CD497 /* MacroEngineTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MacroEngineTests.swift; sourceTree = ""; }; - D814BBA41CF29E8DD9954651 /* OnboardingTemplateFeatureListTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingTemplateFeatureListTests.swift; sourceTree = ""; }; - D84D4528EEC9EFEB8AE8E318 /* ActivationIndicatorController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActivationIndicatorController.swift; sourceTree = ""; }; + D49BB108B57BF6A0A28AA5B6 /* EmojiQueryRunTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiQueryRunTests.swift; sourceTree = ""; }; + D71686BC29B7E0FACFF0B19C /* SpellingLanguageResolverTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpellingLanguageResolverTests.swift; sourceTree = ""; }; + D72CC98CFDA795F8210198E8 /* RuntimeBootstrapModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RuntimeBootstrapModelTests.swift; sourceTree = ""; }; + D77599EFB08E1013FAED19B7 /* GhostSuggestionLayoutTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GhostSuggestionLayoutTests.swift; sourceTree = ""; }; + D7EB49ACD7DA4F098B2428C6 /* EmojiRecentsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiRecentsTests.swift; sourceTree = ""; }; + D84A5FB8D9F0333B0B8E9C5F /* SuggestionCoordinatorTestSupport.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionCoordinatorTestSupport.swift; sourceTree = ""; }; D8C2663427BC5219EA415D00 /* ru.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = ru.txt; sourceTree = ""; }; - D93563FDA25DFC0038E5F887 /* SuggestionSettingsData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionSettingsData.swift; sourceTree = ""; }; - D9B27E3D3FD8008CE2C1B616 /* CotabbyBrand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CotabbyBrand.swift; sourceTree = ""; }; D9C1C921A1CDA2ADFC39EA01 /* AppsPaneView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppsPaneView.swift; sourceTree = ""; }; + DA02598F555696782E180DA5 /* ShortcutConflictTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShortcutConflictTests.swift; sourceTree = ""; }; + DA0447A27B293394D9379C48 /* ExtendedContextTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtendedContextTests.swift; sourceTree = ""; }; + DA1F9C5D85651740CC51B47F /* SuggestionSessionReconcilerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionSessionReconcilerTests.swift; sourceTree = ""; }; + DAC4D7129517D678D95D0BC2 /* PromptPolicyTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PromptPolicyTests.swift; sourceTree = ""; }; + DADE6EEA8248DA6700E11844 /* MenuBarPopoverDismisser.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuBarPopoverDismisser.swift; sourceTree = ""; }; DB0CE9AB1286367BA2E82392 /* SettingsContainerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsContainerView.swift; sourceTree = ""; }; DB235F0DEA53295DAF8B4FA0 /* PowerSourceMonitor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PowerSourceMonitor.swift; sourceTree = ""; }; - DDC034BBCBAC5E7989D4C85B /* LlamaSuggestionEngineStreamingTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LlamaSuggestionEngineStreamingTests.swift; sourceTree = ""; }; - DDE858CB1E687E3CEB8FDD5B /* SuggestionRequestFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionRequestFactory.swift; sourceTree = ""; }; - DDF6A4E9CE93FD53C60E67E3 /* EmojiQueryRun.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiQueryRun.swift; sourceTree = ""; }; - DE2BBC9CD727C19DA94DB105 /* CalendarAccessibilityCapturePolicy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalendarAccessibilityCapturePolicy.swift; sourceTree = ""; }; - DEB16474A67CE1D210B944C9 /* SuggestionSubsystemContracts.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionSubsystemContracts.swift; sourceTree = ""; }; + DC756DF8E0032B39099D2BF8 /* DownloadFileRescuer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DownloadFileRescuer.swift; sourceTree = ""; }; + DE29E54D78A9DD7CD87626DD /* LanguageSupportTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LanguageSupportTests.swift; sourceTree = ""; }; DEBD6113A3C1038BECC99245 /* PerformancePaneView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PerformancePaneView.swift; sourceTree = ""; }; - DF3A73EB848780061FC162C0 /* SpellingDictionaryPicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpellingDictionaryPicker.swift; sourceTree = ""; }; - E0871985CB1F877EC422E18C /* SpellingLanguageResolverTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpellingLanguageResolverTests.swift; sourceTree = ""; }; - E0D2FEEA4304C86324BAADAB /* InsertionStrategySelector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InsertionStrategySelector.swift; sourceTree = ""; }; + DEF8F1A40EAA82773C07F8B9 /* VisualContextStartCoalescer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VisualContextStartCoalescer.swift; sourceTree = ""; }; + DFB7940B64F4B82E03AB674E /* CaretRunPlacementTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CaretRunPlacementTests.swift; sourceTree = ""; }; + DFEBE38C24E36D1FA3106FE5 /* InsertionStrategySelector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InsertionStrategySelector.swift; sourceTree = ""; }; + DFFEDED24AED136A9C83F730 /* SuggestionSettingsModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionSettingsModel.swift; sourceTree = ""; }; E17AAA3C022A8AE39FACAAD5 /* SettingsIconTile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsIconTile.swift; sourceTree = ""; }; - E19A5B462891263BDFB56607 /* TrailingDuplicationFilterTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrailingDuplicationFilterTests.swift; sourceTree = ""; }; E1FAD890FBC2D0351C0E3C60 /* ContextLivePreviewField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContextLivePreviewField.swift; sourceTree = ""; }; - E217A66717D78E1E49350EC8 /* DownloadOutcomeClassifierTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DownloadOutcomeClassifierTests.swift; sourceTree = ""; }; - E260C4D08C786CDBD527B329 /* PromptSectionBudgetTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PromptSectionBudgetTests.swift; sourceTree = ""; }; - E27B962C66727776D00069DE /* EmojiPopularity.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiPopularity.swift; sourceTree = ""; }; + E286B9A912808088FDA6B4C4 /* PermissionOverlayTracker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PermissionOverlayTracker.swift; sourceTree = ""; }; + E2B5BB7FEB3B9BF121A5A46F /* GhostFontSizeStabilizer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GhostFontSizeStabilizer.swift; sourceTree = ""; }; + E3096225612BC53296FB6931 /* DisplayCoordinateConverter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DisplayCoordinateConverter.swift; sourceTree = ""; }; + E38190E9916A96736E6769C2 /* EmojiSynonymCatalog.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiSynonymCatalog.swift; sourceTree = ""; }; E3AC1E3CC4048829E78E3E1B /* WelcomeTemplateStepView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WelcomeTemplateStepView.swift; sourceTree = ""; }; - E3C84377F352140759B448C9 /* CaretGeometrySelector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CaretGeometrySelector.swift; sourceTree = ""; }; - E43E587E421AF544A8300CE4 /* CustomRulesCatalog.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomRulesCatalog.swift; sourceTree = ""; }; + E4C1DDA236561DF284073F33 /* SuggestionCoordinatorAcceptanceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionCoordinatorAcceptanceTests.swift; sourceTree = ""; }; E5DAF68AEBFE334F68A65E82 /* AcceptanceModePickerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AcceptanceModePickerView.swift; sourceTree = ""; }; - E6423D6CC8CC371D2DA899DE /* PermissionOverlayTracker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PermissionOverlayTracker.swift; sourceTree = ""; }; - E68BE6A22BA0D42C8DD9868C /* SelfCaptureGate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelfCaptureGate.swift; sourceTree = ""; }; - E7F42112F14026E6253BB865 /* PermissionAndContextModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PermissionAndContextModelTests.swift; sourceTree = ""; }; - E99C99D2782EAF0492F964EF /* SuggestionAnchorCache.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionAnchorCache.swift; sourceTree = ""; }; - EAAE6B395FAB604DF059280A /* KeyCodeLabels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyCodeLabels.swift; sourceTree = ""; }; - EB23CDF7CAA1DEAD606B46B3 /* DebouncePolicyTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DebouncePolicyTests.swift; sourceTree = ""; }; + E6B7AF08299D919C30ACE82C /* DateMacroEvaluatorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DateMacroEvaluatorTests.swift; sourceTree = ""; }; + E80071E4A5D844CEF5B7C487 /* RequestIDTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestIDTests.swift; sourceTree = ""; }; + E94A6036F4B703A2FF7F68EF /* DownloadFileRescuerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DownloadFileRescuerTests.swift; sourceTree = ""; }; + EA5C840CAF1DCEB561E0C826 /* TerminalAppDetectorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TerminalAppDetectorTests.swift; sourceTree = ""; }; EB630F9814388203DD1CA2EC /* ShortcutsPaneView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShortcutsPaneView.swift; sourceTree = ""; }; - EC04832FBD5311352F35241B /* SuggestionCaretLayoutRepairTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionCaretLayoutRepairTests.swift; sourceTree = ""; }; - EC4A3C4BC38793EB11F484F1 /* CompositionInputModeClassifierTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CompositionInputModeClassifierTests.swift; sourceTree = ""; }; - EC582636750B78D497119845 /* PerDomainDisableSettingsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PerDomainDisableSettingsTests.swift; sourceTree = ""; }; - ECD86A946E968A3B1DB7BB78 /* FocusSessionScopedCacheTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FocusSessionScopedCacheTests.swift; sourceTree = ""; }; + EBD7B94FF42D8C538C328E80 /* BundledRuntimeLocatorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BundledRuntimeLocatorTests.swift; sourceTree = ""; }; + EC31A792E63C132BE8ABDFD2 /* EmojiMatcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiMatcher.swift; sourceTree = ""; }; + EC5160FA603A7227AC0F3A80 /* DebouncePolicyTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DebouncePolicyTests.swift; sourceTree = ""; }; + ECD5C8648740E7050CCA657F /* FocusPollBackoff.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FocusPollBackoff.swift; sourceTree = ""; }; + ECF1C918E49607E99AE50C80 /* OnboardingTemplate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingTemplate.swift; sourceTree = ""; }; + ECFF9A4976DD6CE584E00307 /* LlamaSuggestionEngineStreamingTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LlamaSuggestionEngineStreamingTests.swift; sourceTree = ""; }; ED8672B87CEC72BE3978C6BB /* CotabbyTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CotabbyTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - EE8BB19D8EC9A75CD3458A6B /* EmojiVariantResolverTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiVariantResolverTests.swift; sourceTree = ""; }; - EE94342B888A5A2CCF66BC93 /* SuggestionRequestFactoryTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionRequestFactoryTests.swift; sourceTree = ""; }; - EFD89799BB82AF7A92559AEB /* ClipboardContentDistillerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClipboardContentDistillerTests.swift; sourceTree = ""; }; - F050CE655081B840E361899E /* SuggestionSettingsStoreTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionSettingsStoreTests.swift; sourceTree = ""; }; + EE437912B6EE36826912191A /* FocusSessionScopedCacheTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FocusSessionScopedCacheTests.swift; sourceTree = ""; }; + EF4D6CEDF032A25EF72D7228 /* KeyCodeLabels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyCodeLabels.swift; sourceTree = ""; }; + F076BC5527D08E5CE55E3A2C /* DeepGeometryWalkThrottleTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeepGeometryWalkThrottleTests.swift; sourceTree = ""; }; F0C3E6241B0F35C7A2C85965 /* StaticTextRunWalkThrottle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StaticTextRunWalkThrottle.swift; sourceTree = ""; }; - F308F6E274CC645E27CB651F /* OverlayController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OverlayController.swift; sourceTree = ""; }; - F36111592745117D04C42405 /* TextLayoutCaretEstimatorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextLayoutCaretEstimatorTests.swift; sourceTree = ""; }; - F4D9DF8723AF32C058BFACDE /* SpellingDictionaryCatalog.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpellingDictionaryCatalog.swift; sourceTree = ""; }; + F2C80E780DD9B08317E3B374 /* AppSurfaceClassifierTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppSurfaceClassifierTests.swift; sourceTree = ""; }; + F2F098B80AE83F7973168641 /* ConfidenceSuppressionPolicyTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConfidenceSuppressionPolicyTests.swift; sourceTree = ""; }; + F35CD1B715FCBB12BEB6CE62 /* FieldEdgeIconIndicatorView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FieldEdgeIconIndicatorView.swift; sourceTree = ""; }; + F3D991D3536ED989C89AF44D /* EmojiUsageStoreTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiUsageStoreTests.swift; sourceTree = ""; }; + F47CD9DF50E7192A70D1870E /* CotabbyDebugOptions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CotabbyDebugOptions.swift; sourceTree = ""; }; + F5067AE83AEE957322A47E60 /* LlamaSuggestionEngineCancellationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LlamaSuggestionEngineCancellationTests.swift; sourceTree = ""; }; + F55AC46E880BE8AC086B80E9 /* LlamaSuggestionEnginePrewarmTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LlamaSuggestionEnginePrewarmTests.swift; sourceTree = ""; }; + F661AAB8CC3ABDA49A957864 /* TextDirectionDetectorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextDirectionDetectorTests.swift; sourceTree = ""; }; F671FE53CDEAE9091EFBCE45 /* DateMacroEvaluator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DateMacroEvaluator.swift; sourceTree = ""; }; - FA4B45B91D4DEAC979C3113E /* PromptContextSanitizer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PromptContextSanitizer.swift; sourceTree = ""; }; - FA878B447441BB4F3E327CC8 /* OnboardingTemplateRecommender.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingTemplateRecommender.swift; sourceTree = ""; }; - FB317C82CE2CBC69056BA4B8 /* TagChip.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TagChip.swift; sourceTree = ""; }; - FB429709A7FA9D63B0D7B133 /* KeycapView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeycapView.swift; sourceTree = ""; }; - FC24FD54860CE6737E65EF65 /* TextDirectionDetectorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextDirectionDetectorTests.swift; sourceTree = ""; }; - FC48B188C6E6E263B876621D /* EmojiUsageModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiUsageModels.swift; sourceTree = ""; }; - FC83D14A7557BC0196E59007 /* MirrorOverlayLayoutTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MirrorOverlayLayoutTests.swift; sourceTree = ""; }; + F7F3F983901FC3648076B23D /* MacroReferenceSheet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MacroReferenceSheet.swift; sourceTree = ""; }; + FA6A718EDDF3473A762705BE /* StreamedGhostTextPolicyTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StreamedGhostTextPolicyTests.swift; sourceTree = ""; }; + FA93AF731DE8931F72C3C65F /* PerformanceMetricsStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PerformanceMetricsStore.swift; sourceTree = ""; }; + FAED667FCDDF3DE1A7EBDDB9 /* SuggestionPauseModelsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionPauseModelsTests.swift; sourceTree = ""; }; FC9ECD5408B0F5708149B5C0 /* EngineAndModelPaneView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EngineAndModelPaneView.swift; sourceTree = ""; }; - FD60968AEA8A5843F4E24618 /* SuggestionDebugLoggerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionDebugLoggerTests.swift; sourceTree = ""; }; - FE35C7770405ED368AA02448 /* EmojiUsageStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiUsageStore.swift; sourceTree = ""; }; - FE7BF162A12703249726F20A /* FoundationModelPromptRenderer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoundationModelPromptRenderer.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -1183,6 +1183,38 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 011A5248848010A06D9A182A /* Input */ = { + isa = PBXGroup; + children = ( + BB36177FC6C26F5E4CD1AD6E /* InputMonitorTests.swift */, + 3DBD75CAF6CAC849D5ED9FA4 /* InputSuppressionControllerTests.swift */, + ); + path = Input; + sourceTree = ""; + }; + 08981B971C3748670DF551EF /* Services */ = { + isa = PBXGroup; + children = ( + DD63AF32089738F21797C4D7 /* Focus */, + 011A5248848010A06D9A182A /* Input */, + 72E190A5A00C9BB76F46867A /* ModelManagement */, + 7630E49BE18AAF965F217AAA /* Runtime */, + B0ACD82A4062021762443C9A /* Spelling */, + 47C8100B9B0020FD0C25603E /* Suggestion */, + 987BC94D9D28389C8CE0406E /* Visual */, + ); + path = Services; + sourceTree = ""; + }; + 08CC4F856651B26C888B0F75 /* Focus */ = { + isa = PBXGroup; + children = ( + 6F7E1691BC93836AE2FA8931 /* FocusModelsTests.swift */, + 341A1BBA636AEBA2491F6A26 /* FocusTrackingModelTests.swift */, + ); + path = Focus; + sourceTree = ""; + }; 0AC43CF109C5FA47154353A4 /* App */ = { isa = PBXGroup; children = ( @@ -1200,6 +1232,14 @@ path = Config; sourceTree = ""; }; + 0AF20FCEC932776FDD999FD6 /* Utilities */ = { + isa = PBXGroup; + children = ( + 0854896090B568FFB1926D24 /* WordCountFormatterTests.swift */, + ); + path = Utilities; + sourceTree = ""; + }; 10701CD228D9F70454402BED /* Cotabby */ = { isa = PBXGroup; children = ( @@ -1214,6 +1254,26 @@ path = Cotabby; sourceTree = ""; }; + 14283EC2C587EED5D20875D3 /* Logging */ = { + isa = PBXGroup; + children = ( + 1FB0AF4FEC5A3FD07652F718 /* CotabbyDebugOptionsTests.swift */, + C57BCCAF434D44772948B696 /* FileLogHandlerTests.swift */, + 9BB500911B047A5363D51E71 /* LLMIOFileHandlerTests.swift */, + E80071E4A5D844CEF5B7C487 /* RequestIDTests.swift */, + 9A02F9151AEBBD825D64CEFA /* SuggestionDebugLoggerTests.swift */, + ); + path = Logging; + sourceTree = ""; + }; + 1A465C2F36A7A0F3BB80F424 /* UI */ = { + isa = PBXGroup; + children = ( + 865F7C0490DAF7D77523BE84 /* SettingsIndexTests.swift */, + ); + path = UI; + sourceTree = ""; + }; 1A748DD787833F29034EF2EA /* Input */ = { isa = PBXGroup; children = ( @@ -1224,6 +1284,15 @@ path = Input; sourceTree = ""; }; + 1B748CDAE854AA06B669CB40 /* App */ = { + isa = PBXGroup; + children = ( + 950FCF7EE5D587502769663B /* InlineFeatures */, + 85990F7208B7E63FD99A39B4 /* Suggestion */, + ); + path = App; + sourceTree = ""; + }; 1D6F00DFDE0013A930670603 /* Power */ = { isa = PBXGroup; children = ( @@ -1245,6 +1314,34 @@ path = Permission; sourceTree = ""; }; + 22548CAEF237D0D8CFCBD171 /* Settings */ = { + isa = PBXGroup; + children = ( + 1E267F3BB7FC8DEAEB5E841B /* MenuBarRecoveryPolicy.swift */, + 6F49C55FFF4352A6763BAE1A /* PerDomainDisableSettings.swift */, + 79AAAB1C46A0E5A9C6FC7D3D /* SettingsAttentionEvaluator.swift */, + 57B29DAC600626783649475A /* SettingsSearchRanker.swift */, + 8AB17696CE79982039061F29 /* SuggestionSettingsStore.swift */, + ); + path = Settings; + sourceTree = ""; + }; + 251BA8EDFCC71DCE20998F99 /* Emoji */ = { + isa = PBXGroup; + children = ( + BC2A342474E4B41D8B385DC2 /* EmojiCatalogMatcherTests.swift */, + 5F8C74F232DCE6E25552FFFC /* EmojiCatalogTests.swift */, + 94979FB3D3560BF2C5787E31 /* EmojiPickerPanelLayoutTests.swift */, + 5769E45DA3B966F0863BBA93 /* EmojiPopularityTests.swift */, + D49BB108B57BF6A0A28AA5B6 /* EmojiQueryRunTests.swift */, + D7EB49ACD7DA4F098B2428C6 /* EmojiRecentsTests.swift */, + A1060EACEF2E526956DD78A2 /* EmojiSynonymCatalogTests.swift */, + CD72ADA2F88BD3C7E56CD8EC /* EmojiTriggerStateMachineTests.swift */, + 632BC2442D1A1C98E5BD918A /* EmojiVariantResolverTests.swift */, + ); + path = Emoji; + sourceTree = ""; + }; 2574DDA4AFE2DE99E608EF95 /* Visual */ = { isa = PBXGroup; children = ( @@ -1256,6 +1353,39 @@ path = Visual; sourceTree = ""; }; + 2A9FB673C1DBB59C522F9ED5 /* MenuBar */ = { + isa = PBXGroup; + children = ( + DADE6EEA8248DA6700E11844 /* MenuBarPopoverDismisser.swift */, + 9DE86A49339BB507D197629D /* MenuBarPresentationObserver.swift */, + 12F6FDB6D09851CC5C6649EF /* MenuBarSections.swift */, + CB051B5B72986C03AB1EE428 /* MenuBarStatusLabelView.swift */, + 7DE038A6DF4A16B3EB5CEBD3 /* MenuBarView.swift */, + ); + path = MenuBar; + sourceTree = ""; + }; + 2B760C39A90C89FB4B5F2A0A /* ModelManagement */ = { + isa = PBXGroup; + children = ( + 415E80FEA7C1330D502CE97F /* DownloadableModelCatalogView.swift */, + C696204AAEBA357129F77646 /* HuggingFaceModelBrowserView.swift */, + ); + path = ModelManagement; + sourceTree = ""; + }; + 2D8E398BA5F2ED675A25AAFD /* Suggestion */ = { + isa = PBXGroup; + children = ( + 3DB1A3F7D6C0FF28717E6D4C /* SuggestionEngineModels.swift */, + 977CE0DE2F43D3F964C0EC73 /* SuggestionModels.swift */, + 17FD5822D3A75266B20A50CE /* SuggestionPauseModels.swift */, + 50119F67E7BB9FBC8EA94BF2 /* SuggestionQualityMetricsStore.swift */, + 5652FFF8E718A17D98F87CD0 /* SuggestionSubsystemContracts.swift */, + ); + path = Suggestion; + sourceTree = ""; + }; 2EE526D7C9284AF6687A556B /* Panes */ = { isa = PBXGroup; children = ( @@ -1276,6 +1406,17 @@ path = Panes; sourceTree = ""; }; + 31F80159F918D5DBF9E39915 /* Settings */ = { + isa = PBXGroup; + children = ( + 66B5FF2D1DCC846AABC134CF /* MenuBarRecoveryPolicyTests.swift */, + 6E53B16C1E0CE667E9666C71 /* SettingsAttentionEvaluatorTests.swift */, + 95C62A4403E4815004C6FCB8 /* SettingsSearchRankerTests.swift */, + 35C0B587D81D87ACB952C95E /* SuggestionSettingsStoreTests.swift */, + ); + path = Settings; + sourceTree = ""; + }; 3725B1A195A06A4F014B75B1 /* Products */ = { isa = PBXGroup; children = ( @@ -1286,6 +1427,16 @@ name = Products; sourceTree = ""; }; + 39CD6D46EF4D9EE89761F724 /* Context */ = { + isa = PBXGroup; + children = ( + 51D93E3819F3BB0957FF3DF6 /* CustomRulesCatalog.swift */, + BE6EA89178F52F6D5B90CBFE /* LanguageCatalog.swift */, + 4A51B1559F4CE6728D39C959 /* VisualContextModels.swift */, + ); + path = Context; + sourceTree = ""; + }; 3B1B0D8E3400BE4FC26AF6B5 /* Suggestion */ = { isa = PBXGroup; children = ( @@ -1299,19 +1450,48 @@ path = Suggestion; sourceTree = ""; }; - 41435C2343611783BD33423E /* Utilities */ = { + 41668E0DC60EEA0E8918E041 /* Overlays */ = { isa = PBXGroup; children = ( - AD9573F3504CAE6891DF9B7D /* AppUpdateManager.swift */, - 9CF4FB0EC6C1BEB4EA74910A /* ClipboardContextProvider.swift */, - B4B4A2E2DD6733658EC05BD8 /* DownloadFileRescuer.swift */, - 3DE1975F3B5F4A70478DBF41 /* DownloadOutcomeClassifier.swift */, - 110CB0B53016644EF7840301 /* HuggingFaceAPIClient.swift */, - 8F426127917FCB1096134732 /* HuggingFaceSearchService.swift */, - 51020F8CD58338BD643FBF63 /* ModelDownloadManager.swift */, - 5C4E5869D103865486AAAEEC /* ModelFileValidator.swift */, + F35CD1B715FCBB12BEB6CE62 /* FieldEdgeIconIndicatorView.swift */, + 76BC705A82669AEFBC704F59 /* InlinePreviewView.swift */, ); - path = Utilities; + path = Overlays; + sourceTree = ""; + }; + 479F89FC92F9800100D4628D /* Runtime */ = { + isa = PBXGroup; + children = ( + 7D2E806C1915514651343055 /* HuggingFaceModelsTests.swift */, + 5EF5B128907702161F59D236 /* PerformanceMetricsStoreTests.swift */, + D72CC98CFDA795F8210198E8 /* RuntimeBootstrapModelTests.swift */, + 247AD238E2DD01C8DCAED598 /* SystemMetricsStoreTests.swift */, + ); + path = Runtime; + sourceTree = ""; + }; + 47C8100B9B0020FD0C25603E /* Suggestion */ = { + isa = PBXGroup; + children = ( + 014DF977EED1CE9EB4E8E9D5 /* SuggestionInteractionStateTests.swift */, + ); + path = Suggestion; + sourceTree = ""; + }; + 4D07DA390100ECC4E8164547 /* Emoji */ = { + isa = PBXGroup; + children = ( + 7CC9E0602050256E3B0B08B2 /* EmojiCatalog.swift */, + EC31A792E63C132BE8ABDFD2 /* EmojiMatcher.swift */, + D22CA80189225431804E87B0 /* EmojiPickerPanelLayout.swift */, + 4719AA4F4513DB93CC0D1ECE /* EmojiPopularity.swift */, + 94D11446FF576F0BBDEE2D2F /* EmojiQueryRun.swift */, + A7786D3C52CC72971B74657F /* EmojiRecents.swift */, + E38190E9916A96736E6769C2 /* EmojiSynonymCatalog.swift */, + 2412E9C50B4D2B3C57F5E3C6 /* EmojiTriggerStateMachine.swift */, + 880D641ED480016420D007A0 /* EmojiVariantResolver.swift */, + ); + path = Emoji; sourceTree = ""; }; 4F9ACE2656DBD3454371C709 /* Emoji */ = { @@ -1322,6 +1502,40 @@ path = Emoji; sourceTree = ""; }; + 50D6C35B203AC5C0BF4BB1A8 /* Spelling */ = { + isa = PBXGroup; + children = ( + 25D41CC179EC04093971A0D0 /* SpellingDictionaryCatalog.swift */, + ); + path = Spelling; + sourceTree = ""; + }; + 5154668C834FF09343FD3BE6 /* Settings */ = { + isa = PBXGroup; + children = ( + 2F93E4EC64A8773A1A7F3E24 /* CompletionRenderMode.swift */, + A914A6C81B1824E4907ACADE /* SuggestionSettingsData.swift */, + DFFEDED24AED136A9C83F730 /* SuggestionSettingsModel.swift */, + ); + path = Settings; + sourceTree = ""; + }; + 55E1A705ADAF153AE40216E9 /* Context */ = { + isa = PBXGroup; + children = ( + C4B70455CA75A08FAD0F7409 /* ClipboardContextProvider.swift */, + ); + path = Context; + sourceTree = ""; + }; + 566042A4D7A0EC38C0DE910F /* Onboarding */ = { + isa = PBXGroup; + children = ( + ECF1C918E49607E99AE50C80 /* OnboardingTemplate.swift */, + ); + path = Onboarding; + sourceTree = ""; + }; 59681B24821B0C960A656168 /* Focus */ = { isa = PBXGroup; children = ( @@ -1340,6 +1554,72 @@ path = Focus; sourceTree = ""; }; + 5D103783890A40FD2F61C4AD /* Prompting */ = { + isa = PBXGroup; + children = ( + 612CA2988BF19FAE0114165A /* BaseCompletionPromptRendererTests.swift */, + 3D6234872B84ECB56A707945 /* ControlTokenMarkersTests.swift */, + DAC4D7129517D678D95D0BC2 /* PromptPolicyTests.swift */, + A73D95F2BF5CA59705653931 /* PromptSectionBudgetTests.swift */, + 9AA97052545B05BA82450A6D /* TokenCountEstimatorTests.swift */, + ); + path = Prompting; + sourceTree = ""; + }; + 5F051761F1857E3286265CDC /* InlineFeatures */ = { + isa = PBXGroup; + children = ( + 871C7A27BAB5A510273D0A19 /* EmojiPickerView.swift */, + F7F3F983901FC3648076B23D /* MacroReferenceSheet.swift */, + ); + path = InlineFeatures; + sourceTree = ""; + }; + 5F340B0B9DBB79ACA0DFE2D4 /* Suggestion */ = { + isa = PBXGroup; + children = ( + 4BA1D28712B262ABD96F8399 /* ModelAndPresentationValueTests.swift */, + B494C76056D9B01D6A3ECABD /* SuggestionEngineModelsTests.swift */, + FAED667FCDDF3DE1A7EBDDB9 /* SuggestionPauseModelsTests.swift */, + CC5CD24D2FF35FD36B8D78DE /* SuggestionQualityMetricsStoreTests.swift */, + ); + path = Suggestion; + sourceTree = ""; + }; + 60B9F74FA889713FB1308741 /* Presentation */ = { + isa = PBXGroup; + children = ( + 81D275EF19CA4133543F8DE1 /* CaretGeometrySelector.swift */, + 422E236CC16508B664E40F1E /* CaretLinePosition.swift */, + ACAD48CDC2F27F49558473F1 /* CompletionRenderModePolicy.swift */, + E3096225612BC53296FB6931 /* DisplayCoordinateConverter.swift */, + 392DC1658B28561909169539 /* GhostFontMetrics.swift */, + E2B5BB7FEB3B9BF121A5A46F /* GhostFontSizeStabilizer.swift */, + 4084B2F8843FE479F8D347E3 /* GhostSuggestionLayout.swift */, + 786A5B721D148D09B5BDE651 /* GhostTextColorPreset.swift */, + A11589537F19EDE247697056 /* MirrorOverlayLayout.swift */, + 841C71C9523CF19D9212F1CD /* SuggestionAnchorCache.swift */, + A62CBDE1462C7733E4228BBE /* SuggestionFadeInPolicy.swift */, + 3EE141D265E09DA9F95C4584 /* SuggestionOverlayStabilityGate.swift */, + 7748B9FB3D88C383395CF528 /* SuggestionTextColorCodec.swift */, + 8489C1318F0232BFF9F2758C /* TextDirectionDetector.swift */, + 6A5B87C4C13EAE32813286C7 /* TextLayoutCaretEstimator.swift */, + ); + path = Presentation; + sourceTree = ""; + }; + 643C6D3D4745CED7E4A6417B /* Spelling */ = { + isa = PBXGroup; + children = ( + B1AAC6367483952AB7D59A62 /* CurrentWordExtractor.swift */, + 61CCBF33813CE5CD3B9EA37B /* SpellingLanguageResolver.swift */, + A2E9AF341F8F7043D5344B20 /* SymSpell.swift */, + B293615FC411551C3FC15528 /* TypoCaseTransfer.swift */, + 38FCE0E0C38A776383B11809 /* TypoGate.swift */, + ); + path = Spelling; + sourceTree = ""; + }; 6495533696D4461386265D05 /* Spelling */ = { isa = PBXGroup; children = ( @@ -1357,27 +1637,56 @@ F671FE53CDEAE9091EFBCE45 /* DateMacroEvaluator.swift */, 974A8708D2006767BD76862A /* MacroEngine.swift */, B41F06FEF208B30ECCF23A6F /* MacroModels.swift */, + 50CDB11D96F343194B390321 /* MacroTriggerStateMachine.swift */, 6E3EC87078D3A4C21DB3252C /* RandomMacroEvaluator.swift */, 82E7794DF60664B1FA8F6E7B /* UnitConversionEvaluator.swift */, ); path = Macros; sourceTree = ""; }; + 6994DC8878D2BC1DFE0E7B80 /* Macros */ = { + isa = PBXGroup; + children = ( + 1B831CA78687EAEE96493C09 /* ArithmeticEvaluatorTests.swift */, + E6B7AF08299D919C30ACE82C /* DateMacroEvaluatorTests.swift */, + 66D6D153C80A5BDE4905B81E /* MacroEngineTests.swift */, + A1C9DBC2A94B6E805EDAFEA5 /* MacroTriggerStateMachineTests.swift */, + ); + path = Macros; + sourceTree = ""; + }; 6E1171BBC9CB74DB623C5E8B /* Components */ = { isa = PBXGroup; children = ( E5DAF68AEBFE334F68A65E82 /* AcceptanceModePickerView.swift */, E1FAD890FBC2D0351C0E3C60 /* ContextLivePreviewField.swift */, + 31F8F44FE13E69D4108F4AFB /* CustomRulesEditor.swift */, A594D02B0EF3C2DD62EFE69A /* GhostTextPreview.swift */, + CDDAB2E5837445522CF66B74 /* KeyRecorderView.swift */, + 85E6C2EBE2B63C2DF3CC4073 /* LanguageTagsEditor.swift */, E17AAA3C022A8AE39FACAAD5 /* SettingsIconTile.swift */, 19BE12C28A4AB8A4A58C2FF7 /* SettingsPaneScaffold.swift */, BE0A565A2AD007EBE9D70697 /* SettingsQuickLinkCard.swift */, 907549CB913B40C28B953A5D /* SettingsRowLabel.swift */, BE8D7424D350FC7C0685DBEC /* SettingsSearchResultRow.swift */, + 36FEDE8C3BE5E3C5E26989AE /* SpellingDictionaryPicker.swift */, ); path = Components; sourceTree = ""; }; + 6F3F555B2E97A98A6554D0DA /* Accessibility */ = { + isa = PBXGroup; + children = ( + 5B5D1A7D938F633C6EE094F7 /* AXHelper.swift */, + 3FE7D19D22434E3E24804999 /* CalendarAccessibilityCapturePolicy.swift */, + E286B9A912808088FDA6B4C4 /* PermissionOverlayTracker.swift */, + 1EE99C84483D3A58D561C61D /* SecureFieldDetector.swift */, + 13838E1372956FF2CFC5ECCC /* SelfCaptureGate.swift */, + 178C5C54E1CC7E906DEA1D51 /* WebContentFieldDetector.swift */, + ); + path = Accessibility; + sourceTree = ""; + }; 717EB52365B64107A6FB1126 /* Coordinators */ = { isa = PBXGroup; children = ( @@ -1395,6 +1704,48 @@ path = Coordinators; sourceTree = ""; }; + 72E190A5A00C9BB76F46867A /* ModelManagement */ = { + isa = PBXGroup; + children = ( + E94A6036F4B703A2FF7F68EF /* DownloadFileRescuerTests.swift */, + 0259095D0A3E9B8DC26CB4B0 /* ModelFileValidatorTests.swift */, + ); + path = ModelManagement; + sourceTree = ""; + }; + 73DDE4A2077E45FCF3A1C44C /* Context */ = { + isa = PBXGroup; + children = ( + DA0447A27B293394D9379C48 /* ExtendedContextTests.swift */, + 7AEBBBAB9588AA8EDBA41520 /* PermissionAndContextModelTests.swift */, + ); + path = Context; + sourceTree = ""; + }; + 7630E49BE18AAF965F217AAA /* Runtime */ = { + isa = PBXGroup; + children = ( + A73AF6E8961EC168FA6DDD2D /* FoundationModelAvailabilityServiceTests.swift */, + BF924740638E6A6F77FCB4C4 /* LlamaDecodeGateDefaultsTests.swift */, + 7E4C115072B97CCCE9020F72 /* LlamaPromptCacheHintTrackerTests.swift */, + F5067AE83AEE957322A47E60 /* LlamaSuggestionEngineCancellationTests.swift */, + F55AC46E880BE8AC086B80E9 /* LlamaSuggestionEnginePrewarmTests.swift */, + ECFF9A4976DD6CE584E00307 /* LlamaSuggestionEngineStreamingTests.swift */, + 3EFECCCD6B271123F6D7CCEB /* OllamaPreloadWorkControllerTests.swift */, + 9A47949D77BB2E411F1B81E5 /* OpenAICompatibleAPIClientTests.swift */, + 6C034C1C9E51031A845D1184 /* SuggestionEngineRouterTests.swift */, + ); + path = Runtime; + sourceTree = ""; + }; + 7CE2AB7F84E13EB0A98D263D /* Updates */ = { + isa = PBXGroup; + children = ( + 3A7A9C39A0713BD3B442C9AC /* AppUpdateManager.swift */, + ); + path = Updates; + sourceTree = ""; + }; 7EB6F6622189CE0212E7E9C1 /* Core */ = { isa = PBXGroup; children = ( @@ -1405,35 +1756,91 @@ path = Core; sourceTree = ""; }; + 7FAA2090D6421D9BAC2CFD37 /* Context */ = { + isa = PBXGroup; + children = ( + B2229037BCDF7EFD3D47C15F /* ClipboardContentDistiller.swift */, + 2BF37C1A0F734BB940E371C2 /* ClipboardRelevanceFilter.swift */, + 7736E6B390C822F91CC1DA99 /* OCRTextHygiene.swift */, + D182046E27CB170D943E8F86 /* PromptContextSanitizer.swift */, + 27B03589D82D0ADCF41B9CD0 /* SurfaceContextComposer.swift */, + DEF8F1A40EAA82773C07F8B9 /* VisualContextStartCoalescer.swift */, + ); + path = Context; + sourceTree = ""; + }; + 81A8C1B4295E6426050B3C2B /* Onboarding */ = { + isa = PBXGroup; + children = ( + 64AEF94A48DF96D6BEE3048C /* OnboardingFlowSteps.swift */, + 7174EF88BA41ACC0A74CA582 /* OnboardingTemplateFeatureList.swift */, + 4F86D2716CBE36970BB462E8 /* OnboardingTemplateRecommender.swift */, + ); + path = Onboarding; + sourceTree = ""; + }; + 81E6FF5F2E0AE29DA29FF3DC /* Suggestion */ = { + isa = PBXGroup; + children = ( + 3806EA97A628F15F155262D5 /* CompletionSeamGuard.swift */, + 95EF4BBE7320021CB8CD54D9 /* ConfidenceSuppressionPolicy.swift */, + 085D4F4D5242B0E7AD506473 /* DebouncePolicy.swift */, + 61103A4FEA699AAE0E61D89B /* InsertedTextAdvance.swift */, + AB1A91DE0EA12F499D2129D0 /* InsertionSafetyGate.swift */, + DFEBE38C24E36D1FA3106FE5 /* InsertionStrategySelector.swift */, + 310F3498A3E498729CC8433E /* MidWordContinuationPolicy.swift */, + C231B65BAF20AD33A3C0130C /* SentenceBoundaryClassifier.swift */, + 4275FD6213DCDA953B4800EA /* SpeculativeAcceptanceContext.swift */, + 2572996D6A44E20E2C0F9060 /* StreamedGhostTextPolicy.swift */, + AADD165EBA2FE4C66F5BA885 /* SuggestionAvailabilityEvaluator.swift */, + 330D425B2BF2245FD7BBE4FA /* SuggestionRequestFactory.swift */, + 022C91940E688482C3F80423 /* SuggestionSessionReconciler.swift */, + 9DFA4093ADA92D5E33F1F833 /* SuggestionTextNormalizer.swift */, + 4FCBADDF1A64F0813E094F2D /* TrailingDuplicationFilter.swift */, + ); + path = Suggestion; + sourceTree = ""; + }; + 85990F7208B7E63FD99A39B4 /* Suggestion */ = { + isa = PBXGroup; + children = ( + 5EE87C835317AF47C007C6B6 /* SuggestionCaretLayoutRepairTests.swift */, + E4C1DDA236561DF284073F33 /* SuggestionCoordinatorAcceptanceTests.swift */, + 31C6E7EF7E4F4CFD8702A331 /* SuggestionCoordinatorInputTests.swift */, + 3281A86A9144C82772337D1B /* SuggestionCoordinatorLifecycleTests.swift */, + AA86BBD7476CFAA0BB6A1C55 /* SuggestionCoordinatorPredictionTests.swift */, + 6F75577575FB8E2D13510A2A /* SuggestionFocusFreshnessTests.swift */, + BEB506B1042CD234D77258D4 /* SuggestionStateHelperTests.swift */, + ); + path = Suggestion; + sourceTree = ""; + }; + 8689EA264AF26AE15FCC31F4 /* Accessibility */ = { + isa = PBXGroup; + children = ( + 6E2AA5BD865E0BCFB53DC699 /* AXHelperTests.swift */, + 863B5A1DC3C4B9668F620245 /* CalendarAccessibilityCapturePolicyTests.swift */, + AD003D4EBE530DC0E2B87C24 /* PermissionOverlayTrackerTests.swift */, + B8EBC9F1890DD2FFC4884A5C /* SecureFieldDetectorTests.swift */, + 571B221ACAFED86DABB10F48 /* SelfCaptureGateTests.swift */, + 601C120D3DB41535E1D90E24 /* WebContentFieldDetectorTests.swift */, + ); + path = Accessibility; + sourceTree = ""; + }; 8D43A99A396CBAE5922C2969 /* Models */ = { isa = PBXGroup; children = ( - 5A03E565A11581FD2150B142 /* CompletionRenderMode.swift */, - E43E587E421AF544A8300CE4 /* CustomRulesCatalog.swift */, - 9E5F074ED7E340E9B9E4C5E0 /* EmojiPickerModels.swift */, - FC48B188C6E6E263B876621D /* EmojiUsageModels.swift */, - FE35C7770405ED368AA02448 /* EmojiUsageStore.swift */, - 0C383AE85B971A9605787358 /* FocusModels.swift */, - B6D42CD456B4B3C988B148A6 /* FocusTrackingModel.swift */, - A520809E71697E3BB9A8139C /* HuggingFaceModels.swift */, - 5F34AE24BB7C99D66E1F3904 /* InputModels.swift */, - BF4BB93056F291FD24EFAD22 /* LanguageCatalog.swift */, - A804F4DB6FD9BC8C27B2B65F /* LlamaRuntimeModels.swift */, - 4451D6673112575DF24C4A48 /* OnboardingTemplate.swift */, - A1B68641C8203AEB8CBE6D98 /* OpenAICompatibleEndpointModels.swift */, - 979A7867966180A545BB44C4 /* PerformanceMetricsStore.swift */, - 9D82FFC568527700EC17C07D /* PermissionModels.swift */, - 60629DFE309C1A4BD8A7FB3B /* RuntimeBootstrapModel.swift */, - F4D9DF8723AF32C058BFACDE /* SpellingDictionaryCatalog.swift */, - ADBE3E6CC585C1683787C877 /* SuggestionEngineModels.swift */, - 386C98FFCF76EC1C8C7E82BB /* SuggestionModels.swift */, - C2FDC5884B07B19B9B4917A6 /* SuggestionPauseModels.swift */, - 81718CA62FBC775A6CEBCED1 /* SuggestionQualityMetricsStore.swift */, - D93563FDA25DFC0038E5F887 /* SuggestionSettingsData.swift */, - 86460C747AA883FDE756BDBA /* SuggestionSettingsModel.swift */, - DEB16474A67CE1D210B944C9 /* SuggestionSubsystemContracts.swift */, - 807148A920E003DEF8BA6092 /* SystemMetricsStore.swift */, - BE97A8169438D593C6C23412 /* VisualContextModels.swift */, + 39CD6D46EF4D9EE89761F724 /* Context */, + C0079825564365520F908A23 /* Emoji */, + A94BF2CB1EA33390CE76EB16 /* Focus */, + F02B51FBFE03C6BF20497A70 /* Input */, + 566042A4D7A0EC38C0DE910F /* Onboarding */, + F66C64436E0D9AFC2D3334D0 /* Permissions */, + A67C689B1D0C749A4BF8A977 /* Runtime */, + 5154668C834FF09343FD3BE6 /* Settings */, + 50D6C35B203AC5C0BF4BB1A8 /* Spelling */, + 2D8E398BA5F2ED675A25AAFD /* Suggestion */, ); path = Models; sourceTree = ""; @@ -1453,6 +1860,79 @@ path = SpellingDictionaries; sourceTree = ""; }; + 950FCF7EE5D587502769663B /* InlineFeatures */ = { + isa = PBXGroup; + children = ( + C9F9F3C58A0635AAB53D0441 /* EmojiPickerControllerTests.swift */, + ); + path = InlineFeatures; + sourceTree = ""; + }; + 987BC94D9D28389C8CE0406E /* Visual */ = { + isa = PBXGroup; + children = ( + 023BA8AA7DF3F8A45F9CE8FA /* ScreenshotContextGeneratorTests.swift */, + 445BDC778CCC14AC909D659D /* ScreenTextExtractorTests.swift */, + ); + path = Visual; + sourceTree = ""; + }; + 9A2BF5E9121BB27CD045828D /* Support */ = { + isa = PBXGroup; + children = ( + 8689EA264AF26AE15FCC31F4 /* Accessibility */, + DEC0DDC1DF558A8932276294 /* Context */, + 251BA8EDFCC71DCE20998F99 /* Emoji */, + D2F864A6272D7DDD11AD4E7C /* Focus */, + A3BA1847A60D5F0CD97195DA /* Input */, + 14283EC2C587EED5D20875D3 /* Logging */, + 6994DC8878D2BC1DFE0E7B80 /* Macros */, + BF1CFAC49F567AF6AAE370CE /* Onboarding */, + DF66C06C201568550C519E06 /* Presentation */, + 5D103783890A40FD2F61C4AD /* Prompting */, + F73D13467155B655E5DFB8DD /* Runtime */, + 31F80159F918D5DBF9E39915 /* Settings */, + F96313138F50BA4CB6236726 /* Spelling */, + C33F213B45FF359E6176B987 /* Suggestion */, + 0AF20FCEC932776FDD999FD6 /* Utilities */, + ); + path = Support; + sourceTree = ""; + }; + 9EB3676074BA79C2AA545FF1 /* Runtime */ = { + isa = PBXGroup; + children = ( + D1AB5EBB44EE64EB3EB1426F /* BundledRuntimeLocator.swift */, + C319B4FF652512A69377DD5C /* DecodeStopPolicy.swift */, + 6378CE9064B5A46DF4B07A1C /* DeviceInfo.swift */, + 6F324C645A4E53FB6E90061A /* DownloadOutcomeClassifier.swift */, + BE2844BF23632FC9B0824ABE /* HardwareCapabilityProbe.swift */, + 7E36DC1471E2D627F4735A0C /* SystemResourceSampler.swift */, + ); + path = Runtime; + sourceTree = ""; + }; + 9ED3FC5CD8FA7C322F2AC166 /* Utilities */ = { + isa = PBXGroup; + children = ( + 1A951C04DF783B1F1EFDD1E5 /* BundleVersion.swift */, + 14E22DCC1852B8E4B235D256 /* WordCountFormatter.swift */, + ); + path = Utilities; + sourceTree = ""; + }; + A1B1508BA77EF490887E28DE /* Prompting */ = { + isa = PBXGroup; + children = ( + 1C1AE4120FA68524700C9324 /* BaseCompletionPromptRenderer.swift */, + 33D4F378E5C70CAF7827A90A /* ControlTokenMarkers.swift */, + 3A051152D3C503A2339BF0FA /* FoundationModelPromptRenderer.swift */, + AAE89BEAF57DF3A287DF56F1 /* PromptSectionBudget.swift */, + 8A502BFB13373D1931B082CD /* TokenCountEstimator.swift */, + ); + path = Prompting; + sourceTree = ""; + }; A2C5A783B8B991CE3F3176CC /* Onboarding */ = { isa = PBXGroup; children = ( @@ -1469,6 +1949,16 @@ path = Onboarding; sourceTree = ""; }; + A3BA1847A60D5F0CD97195DA /* Input */ = { + isa = PBXGroup; + children = ( + 1EE61CD2E8D2399E23D48818 /* CompositionInputModeClassifierTests.swift */, + 97F14FC0E8E0A5D23FA2F54C /* KeyCodeLabelsTests.swift */, + 7F7E66CFA5AB733CE1F793A8 /* MarkerSelectionSynthesizerTests.swift */, + ); + path = Input; + sourceTree = ""; + }; A3C1F7BD86257CF93639327C /* Fixtures */ = { isa = PBXGroup; children = ( @@ -1477,169 +1967,54 @@ path = Fixtures; sourceTree = ""; }; + A4EE6A8F2C4AB8940B72F681 /* Logging */ = { + isa = PBXGroup; + children = ( + F47CD9DF50E7192A70D1870E /* CotabbyDebugOptions.swift */, + 0C90C9EBCB70327D215EAE07 /* FileLogHandler.swift */, + 56A2F75C66BECA61A722D3FB /* LLMIOFileHandler.swift */, + 05F173F93FFA5FFBC169DA25 /* RequestID.swift */, + ); + path = Logging; + sourceTree = ""; + }; + A67C689B1D0C749A4BF8A977 /* Runtime */ = { + isa = PBXGroup; + children = ( + C736C539D4C97B5664E498BE /* HuggingFaceModels.swift */, + 16967F782C95CEB09B9C8D49 /* LlamaRuntimeModels.swift */, + 1ABCE733783332BE52E43D67 /* OpenAICompatibleEndpointModels.swift */, + FA93AF731DE8931F72C3C65F /* PerformanceMetricsStore.swift */, + 1DF8AA184C5F9CFFDF97A070 /* RuntimeBootstrapModel.swift */, + 51833C4853A3117C676CBC63 /* SystemMetricsStore.swift */, + ); + path = Runtime; + sourceTree = ""; + }; A8A141E1F2137943476D0C82 /* CotabbyTests */ = { isa = PBXGroup; children = ( + 1B748CDAE854AA06B669CB40 /* App */, + F3BC919F34D9998C293D16E2 /* Evals */, A3C1F7BD86257CF93639327C /* Fixtures */, - A168A7B6A7AD11559B60C56B /* ApplicationBundleMetadataTests.swift */, - C451E144D220D5C63372A8C0 /* AppSurfaceClassifierTests.swift */, - 78AFA4586C82E92D7FBF381B /* ArithmeticEvaluatorTests.swift */, - 66B53214C3842F78B202D498 /* AXHelperTests.swift */, - C046CB4F3CB4BFE9391DB5DE /* AXTextGeometryResolverTests.swift */, - D44745635AF702C96B4225A2 /* AXTreeDumpWriterTests.swift */, - 9966D09D8D80F54BF2734E00 /* BaseCompletionPromptRendererTests.swift */, - 04D853218B0A77B0CE090828 /* BrowserAppDetectorTests.swift */, - 1F761083EA5465023D82B5F4 /* BrowserDomainTests.swift */, - 18D990E515E1AE4F312F4E95 /* BundledRuntimeLocatorTests.swift */, - 2AF115FEF7FC96D46C815479 /* CalendarAccessibilityCapturePolicyTests.swift */, - 8EA827D6A2A54DF4BAD56405 /* CaretLinePositionTests.swift */, - 421FD16E18622824E038DFB4 /* CaretRunPlacementTests.swift */, - EFD89799BB82AF7A92559AEB /* ClipboardContentDistillerTests.swift */, - 90B0D133AB77A2503FB08827 /* ClipboardRelevanceFilterTests.swift */, - D504BEB224E0C176F5FCFF6E /* CompletionRenderModePolicyTests.swift */, - B6D36DB66629CF22C1783945 /* CompletionSeamGuardTests.swift */, - EC4A3C4BC38793EB11F484F1 /* CompositionInputModeClassifierTests.swift */, - 06FF2B0A3094A952A8EBA9B5 /* ConfidenceSuppressionPolicyTests.swift */, - 22707E26E2106DF0E826D32D /* ControlTokenMarkersTests.swift */, - 93AF1246C1C2E296A1162E63 /* CotabbyDebugOptionsTests.swift */, - AF1E065C7FFB697FCEB2FA5C /* CotabbyTestFixtures.swift */, - 1C4751DFE9DA372FBC40BA30 /* CurrentWordExtractorTests.swift */, - AD752451330486FE270018B0 /* CustomRulesTests.swift */, - 313EDBA60565836F32CEEC10 /* DateMacroEvaluatorTests.swift */, - EB23CDF7CAA1DEAD606B46B3 /* DebouncePolicyTests.swift */, - B3B09064903B760D6DF2DF7D /* DecodeStopPolicyTests.swift */, - 8F20A19A24D20E16D25ADCDA /* DeepGeometryWalkThrottleTests.swift */, - C49F67B3EEB2F2A577A54085 /* DeviceInfoTests.swift */, - C1C5DE0F3FF63545000E2453 /* DisplayCoordinateConverterTests.swift */, - D2F46767D9D1F0D44E239CA8 /* DownloadFileRescuerTests.swift */, - E217A66717D78E1E49350EC8 /* DownloadOutcomeClassifierTests.swift */, - 292DC9D4D9D5D26AE882E39B /* EmojiCatalogMatcherTests.swift */, - 700275BECBBDA98354ABBDF9 /* EmojiCatalogTests.swift */, - 62BD2ADED33249F5BA53D0AD /* EmojiPickerControllerTests.swift */, - BF7F3EB7B874C836BF75F15D /* EmojiPickerModelsTests.swift */, - B7B185BA246A526CBA85E581 /* EmojiPickerPanelLayoutTests.swift */, - 023144451BB30F981D1F9EE6 /* EmojiPopularityTests.swift */, - 75396860978E81EFAA506CD4 /* EmojiQueryRunTests.swift */, - 671689F289D45A124639C9C6 /* EmojiRecentsTests.swift */, - BF474064973F4752F79BB041 /* EmojiSynonymCatalogTests.swift */, - 723E1EFA85D2E61B6C5F33E8 /* EmojiTriggerStateMachineTests.swift */, - 224438039A86E5619294EAF7 /* EmojiUsageStoreTests.swift */, - EE8BB19D8EC9A75CD3458A6B /* EmojiVariantResolverTests.swift */, - 54BC85605541E913EE57B258 /* ExtendedContextTests.swift */, - AE98A6C28731BF5C8D434543 /* FileLogHandlerTests.swift */, - 1972BD2C5254D8266618781F /* FocusCapabilityFlickerGateTests.swift */, - D4F6D5F94B238F7B4BE7C247 /* FocusCapabilityResolverTests.swift */, - 0C10BCF95451954641C602E4 /* FocusModelsTests.swift */, - 273B4DC844F79B4BE2C8910F /* FocusPollBackoffTests.swift */, - ECD86A946E968A3B1DB7BB78 /* FocusSessionScopedCacheTests.swift */, - 67D57F248880978A09DD28A6 /* FocusSnapshotResolverLiveTests.swift */, - BA705EDFE1C41294F0E381F1 /* FocusSnapshotResolverSelectionTests.swift */, - 37DA0B2D4FE343E321A95C22 /* FocusTrackingModelTests.swift */, - 00D226C0B54B3B375EC2682D /* FoundationModelAvailabilityServiceTests.swift */, - D49F3B597374208594861B9B /* FoundationModelDriftEvalTests.swift */, - 53E41890930AA80910E461EF /* GhostFontMetricsTests.swift */, - 335BF59EE80F3A0143B79740 /* GhostFontSizeStabilizerTests.swift */, - 5AD3F4F9FBE82007E4E15F58 /* GhostSuggestionLayoutTests.swift */, - 23CFCE3EB3F41DAC0202E9D0 /* HardwareCapabilityProbeTests.swift */, - D0AF9479EF020071CA64CCC1 /* HuggingFaceModelsTests.swift */, - BAC01317B0B68E3C4125E421 /* InputMonitorTests.swift */, - 01F583E92B0A78212B330E6E /* InputSuppressionControllerTests.swift */, - 7C46024A6D18B1AD9D04B3BD /* InsertedTextAdvanceTests.swift */, - 43D627C4A55359EAF4676FF7 /* InsertionSafetyGateTests.swift */, - 2960080A726E51198225147A /* InsertionStrategySelectorTests.swift */, - 2930EC34057319130393696B /* KeyCodeLabelsTests.swift */, - 4793D4EA5D36D7E5CC216C27 /* LanguageSupportTests.swift */, - 2B3E5554AAC5D0007CCC61A7 /* LlamaDecodeGateDefaultsTests.swift */, - 906011A6C9D66EEBAF3B5CC0 /* LlamaEvalScoring.swift */, - 6D4C1EF008B9DFA753D561D3 /* LlamaEvalScoringTests.swift */, - 0CA88BB29BC8727878C99E95 /* LlamaPromptCacheHintTrackerTests.swift */, - AABCC3FD99B1824A81E665F3 /* LlamaSuggestionEngineCancellationTests.swift */, - 26EF16C7439BEB156BD9FB03 /* LlamaSuggestionEnginePrewarmTests.swift */, - DDC034BBCBAC5E7989D4C85B /* LlamaSuggestionEngineStreamingTests.swift */, - A691EB51A7B93D1FAC38657F /* LlamaSuggestionEvalTests.swift */, - 9030FAAB468119A0236284A6 /* LLMIOFileHandlerTests.swift */, - D8083D44ABCDCFA68A4CD497 /* MacroEngineTests.swift */, - 22BE47D1DBF6C23151458836 /* MacroTriggerStateMachineTests.swift */, - 52BAFA2F989C3C4F7FB892B5 /* MarkerSelectionSynthesizerTests.swift */, - 39366D6D7D5946BF9330D038 /* MenuBarRecoveryPolicyTests.swift */, - 1274F897631B1B3A835D157F /* MidWordContinuationPolicyTests.swift */, - FC83D14A7557BC0196E59007 /* MirrorOverlayLayoutTests.swift */, - 03766F6253FF17639230C0F6 /* ModelAndPresentationValueTests.swift */, - A829F28F01FAE76CA7244BBC /* ModelFileValidatorTests.swift */, - 5EED3CD2BC7B48DF35DEE562 /* OCRTextHygieneTests.swift */, - B4660F0FA8500594314C6D5C /* OllamaPreloadWorkControllerTests.swift */, - A4B220D9A25174A43E7A258B /* OnboardingFlowStepTests.swift */, - D814BBA41CF29E8DD9954651 /* OnboardingTemplateFeatureListTests.swift */, - 01B72736E416910878E8E493 /* OnboardingTemplateRecommenderTests.swift */, - 28B7EB84781C0ED57844585E /* OnboardingTemplateTests.swift */, - D2CD766561AE027DF0BD341A /* OpenAICompatibleAPIClientTests.swift */, - EC582636750B78D497119845 /* PerDomainDisableSettingsTests.swift */, - 7C0FCC5CCF6AE528E3C4DDA7 /* PerformanceMetricsStoreTests.swift */, - E7F42112F14026E6253BB865 /* PermissionAndContextModelTests.swift */, - 12DD19BCE610808F1E38702D /* PermissionOverlayTrackerTests.swift */, - 0D80CC2CCAAFE3F23FB8C37A /* PromptContextSanitizerTests.swift */, - 4696A84D17890B154533A08F /* PromptPolicyTests.swift */, - E260C4D08C786CDBD527B329 /* PromptSectionBudgetTests.swift */, - 1909DF39C47A113382BB53B6 /* RequestIDTests.swift */, - B1E6D9CCC0AA3674FEE57AE0 /* RuntimeBootstrapModelTests.swift */, - B2BFD19A159680A495EE02FD /* ScreenshotContextGeneratorTests.swift */, - 6C34A98E5B05DB3F4FE81E70 /* ScreenTextExtractorTests.swift */, - 474560E524C1D74BAB1570DA /* SecureFieldDetectorTests.swift */, - D5A5591BEB9EE7B6E9064412 /* SelfCaptureGateTests.swift */, - 2D7360A6D4261989A66658ED /* SentenceBoundaryClassifierTests.swift */, - 2BC293F6125E2B14DCF05AD9 /* SettingsAttentionEvaluatorTests.swift */, - 5A2FFC2055C52FB837DEEB8F /* SettingsIndexTests.swift */, - C533B73CDDA3685135C460FB /* SettingsSearchRankerTests.swift */, - 0850B07CCDBA67C756C6EC59 /* ShortcutConflictTests.swift */, - CA5B101C75C5D3972E33E8E0 /* SpeculativeAcceptanceContextTests.swift */, - D562A73C7C680F2AA65F9F7F /* SpellingDictionaryResourceTests.swift */, - E0871985CB1F877EC422E18C /* SpellingLanguageResolverTests.swift */, - 9B3179B40A81DF121D1221C6 /* StaticTextRunWalkThrottleTests.swift */, - D1AA6A6F4C3A54B5DA2A0022 /* StreamedGhostTextPolicyTests.swift */, - 9BC3BE51EFE0A1B2B13BD02B /* SuggestionAnchorCacheTests.swift */, - C05B0439348261163B37C508 /* SuggestionAvailabilityEvaluatorTests.swift */, - EC04832FBD5311352F35241B /* SuggestionCaretLayoutRepairTests.swift */, - C375227649689775275AA4B3 /* SuggestionCoordinatorAcceptanceTests.swift */, - 98E25C90F99356EB5E249225 /* SuggestionCoordinatorInputTests.swift */, - 9C2F4A55D7EC8C29D47B45C4 /* SuggestionCoordinatorLifecycleTests.swift */, - 361D34F219C46FF21AC09B62 /* SuggestionCoordinatorPredictionTests.swift */, - 4C174D8294858BF9DF3D361D /* SuggestionCoordinatorTestSupport.swift */, - FD60968AEA8A5843F4E24618 /* SuggestionDebugLoggerTests.swift */, - 470A7DAE3D6A2C873B395AE3 /* SuggestionEngineModelsTests.swift */, - 3BDA36955CCCFA87C1F67268 /* SuggestionEngineRouterTests.swift */, - 442507A5399ACD81D1DB4936 /* SuggestionFadeInPolicyTests.swift */, - 45A896811745673061AF3612 /* SuggestionFocusFreshnessTests.swift */, - 8CB1D4F2681FAF59014AE115 /* SuggestionInteractionStateTests.swift */, - CDB25ABC4FFB0E63477CDCB0 /* SuggestionOverlayStabilityGateTests.swift */, - 224494DA9610B169F1C5BCFF /* SuggestionPauseModelsTests.swift */, - B4CC566AC1DE33FD0CD30E1E /* SuggestionQualityMetricsStoreTests.swift */, - EE94342B888A5A2CCF66BC93 /* SuggestionRequestFactoryTests.swift */, - 9C8F07AC52C7A482F5FE34C5 /* SuggestionSessionReconcilerTests.swift */, - 00BB95A341A8B5F4A1725640 /* SuggestionSettingsModelTests.swift */, - F050CE655081B840E361899E /* SuggestionSettingsStoreTests.swift */, - 19DB9558F4D3AFB108D71649 /* SuggestionStateHelperTests.swift */, - 87C309CD6A454C415D8BEEC7 /* SuggestionTextColorCodecTests.swift */, - 9B55A4362AB7F0528C661C4C /* SuggestionTextNormalizerTests.swift */, - 29CDC8BE5312B9BEFD9B22CB /* SurfaceContextComposerTests.swift */, - C850141146422A132B2B3516 /* SymSpellCorrectorTests.swift */, - B32482EABE9EA979C40C8A8F /* SymSpellTests.swift */, - C71031E8DB171047318B92FC /* SyntheticReplacePlannerTests.swift */, - 38931C165873B50B405CC602 /* SystemMetricsStoreTests.swift */, - 9255CBCDE66253F521EE0F08 /* SystemResourceSamplerTests.swift */, - 43E37A7E835D3BDE6265843C /* TerminalAppDetectorTests.swift */, - FC24FD54860CE6737E65EF65 /* TextDirectionDetectorTests.swift */, - F36111592745117D04C42405 /* TextLayoutCaretEstimatorTests.swift */, - B78AA11B52A6588119ABF76F /* TokenCountEstimatorTests.swift */, - E19A5B462891263BDFB56607 /* TrailingDuplicationFilterTests.swift */, - D2D0FE44138BCA8B2EE05AFE /* TypoCaseTransferTests.swift */, - C727BF6FF8ACAAED30B0329F /* TypoGateTests.swift */, - 050D929E13BE52E6282B64D2 /* VisualContextStartCoalescerTests.swift */, - 210F9AD332273FE2EB3A9A01 /* WebContentFieldDetectorTests.swift */, - 1E0513E3B23937B099A3CFF2 /* WordCountFormatterTests.swift */, + BE5DEA21BDC4F5786F4247B3 /* Models */, + 08981B971C3748670DF551EF /* Services */, + 9A2BF5E9121BB27CD045828D /* Support */, + B69B0E48FA6F5D085DB1A136 /* TestSupport */, + 1A465C2F36A7A0F3BB80F424 /* UI */, ); path = CotabbyTests; sourceTree = ""; }; + A94BF2CB1EA33390CE76EB16 /* Focus */ = { + isa = PBXGroup; + children = ( + 5B778713FE1C9481CE0DF065 /* FocusModels.swift */, + 480596411FBB38BA3B993EDC /* FocusTrackingModel.swift */, + ); + path = Focus; + sourceTree = ""; + }; AC13835946398052C0836486 /* Licenses */ = { isa = PBXGroup; children = ( @@ -1667,40 +2042,163 @@ path = Resources; sourceTree = ""; }; + B0ACD82A4062021762443C9A /* Spelling */ = { + isa = PBXGroup; + children = ( + 3FE69F822DE85087BCA01DF5 /* SymSpellCorrectorTests.swift */, + ); + path = Spelling; + sourceTree = ""; + }; B0EBE873B895FB333A0BC26F /* UI */ = { isa = PBXGroup; children = ( + CA9E090F15FCB4CA83CC9FBC /* Components */, + 5F051761F1857E3286265CDC /* InlineFeatures */, + 2A9FB673C1DBB59C522F9ED5 /* MenuBar */, A2C5A783B8B991CE3F3176CC /* Onboarding */, + 41668E0DC60EEA0E8918E041 /* Overlays */, DCBC24D605EC0CBA1DD6097D /* Settings */, - D9B27E3D3FD8008CE2C1B616 /* CotabbyBrand.swift */, - 82F7F7355967725162DF2D1B /* CustomRulesEditor.swift */, - BB5C2AE9A7E55495D26AD074 /* DownloadableModelCatalogView.swift */, - 3384FD33776960103D6E22A9 /* EmojiPickerView.swift */, - CBD5FCB8CC56AA6138382B2C /* FieldEdgeIconIndicatorView.swift */, - 78E49BDA7F3A42455C4C5350 /* HuggingFaceModelBrowserView.swift */, - 033A468451259A3214EECBE5 /* InlinePreviewView.swift */, - FB429709A7FA9D63B0D7B133 /* KeycapView.swift */, - 5A567677424A82D9EEF47495 /* KeyRecorderView.swift */, - 9A7CDA90E128350BFF1A9D66 /* LanguageTagsEditor.swift */, - 64442042F5B57CB0A701DA85 /* MacroReferenceSheet.swift */, - 44595B534DD7323F0AD60825 /* MenuBarPopoverDismisser.swift */, - 00824BDD8D0E9B3063827C78 /* MenuBarPresentationObserver.swift */, - 83A810F9D28A18BA6F2066C7 /* MenuBarSections.swift */, - BD42C7E2852F59BEF7972663 /* MenuBarStatusLabelView.swift */, - 9AA0117B322C625F6D4BBEAB /* MenuBarView.swift */, - 565AB9A1265315C500FE5BDF /* PopupChrome.swift */, - 5484C8A04B9C00CF79D589EB /* ScreenFrameReader.swift */, - DF3A73EB848780061FC162C0 /* SpellingDictionaryPicker.swift */, - FB317C82CE2CBC69056BA4B8 /* TagChip.swift */, - 67586807ACE8EB13C9014535 /* TickMarkSlider.swift */, ); path = UI; sourceTree = ""; }; + B5D8E46E603B4919E00EBD60 /* Presentation */ = { + isa = PBXGroup; + children = ( + 2E379AF08CDFF65D6EFC565E /* ActivationIndicatorController.swift */, + 872C8DDC2E86A1C4C4BBD99F /* EmojiPickerPanelController.swift */, + 8B4F6E70B8A242F7BDE5361A /* FocusDebugOverlayController.swift */, + 924CAA5E25C596A9FAB7602B /* InlinePreviewPanelController.swift */, + 9A3C5A66AA93E50E4A64ED46 /* OverlayController.swift */, + ); + path = Presentation; + sourceTree = ""; + }; + B69B0E48FA6F5D085DB1A136 /* TestSupport */ = { + isa = PBXGroup; + children = ( + BCF2889446A21BC8AC773A81 /* CotabbyTestFixtures.swift */, + D84A5FB8D9F0333B0B8E9C5F /* SuggestionCoordinatorTestSupport.swift */, + ); + path = TestSupport; + sourceTree = ""; + }; + BE5DEA21BDC4F5786F4247B3 /* Models */ = { + isa = PBXGroup; + children = ( + 73DDE4A2077E45FCF3A1C44C /* Context */, + F91F89298707579FDD1FF0E4 /* Emoji */, + 08CC4F856651B26C888B0F75 /* Focus */, + 479F89FC92F9800100D4628D /* Runtime */, + EAC7119051E16252AE861FC0 /* Settings */, + 5F340B0B9DBB79ACA0DFE2D4 /* Suggestion */, + ); + path = Models; + sourceTree = ""; + }; + BF1CFAC49F567AF6AAE370CE /* Onboarding */ = { + isa = PBXGroup; + children = ( + 1D60AC0AFFF7CEAA24FC617E /* OnboardingFlowStepTests.swift */, + 771EAA74003DAD7D4F3FD199 /* OnboardingTemplateFeatureListTests.swift */, + 4FFD3AFACAAC963DAF59D153 /* OnboardingTemplateRecommenderTests.swift */, + B4C5E3A714F5A7818337101C /* OnboardingTemplateTests.swift */, + ); + path = Onboarding; + sourceTree = ""; + }; + C0079825564365520F908A23 /* Emoji */ = { + isa = PBXGroup; + children = ( + 8736D4321E8BF847D1F7338E /* EmojiPickerModels.swift */, + 68C4773B9316036F7E594EE1 /* EmojiUsageModels.swift */, + 846A1C3328B3B1CB42E2E46B /* EmojiUsageStore.swift */, + ); + path = Emoji; + sourceTree = ""; + }; + C33F213B45FF359E6176B987 /* Suggestion */ = { + isa = PBXGroup; + children = ( + 1F70588152A9E06C46971ACC /* CompletionSeamGuardTests.swift */, + F2F098B80AE83F7973168641 /* ConfidenceSuppressionPolicyTests.swift */, + EC5160FA603A7227AC0F3A80 /* DebouncePolicyTests.swift */, + 2BAF8A580B615949356560AA /* InsertedTextAdvanceTests.swift */, + 45E30CEB74593771E5F62E5E /* InsertionSafetyGateTests.swift */, + 6EA8ECB565875395AA51E328 /* InsertionStrategySelectorTests.swift */, + 786EDA0AB3DACFDA1399D6A3 /* MidWordContinuationPolicyTests.swift */, + A8104A4A22860581743CCC81 /* SentenceBoundaryClassifierTests.swift */, + 1480CC831D97E0C55267E0EC /* SpeculativeAcceptanceContextTests.swift */, + FA6A718EDDF3473A762705BE /* StreamedGhostTextPolicyTests.swift */, + 7907403362CEEFB8FA24FCCD /* SuggestionAvailabilityEvaluatorTests.swift */, + 499FA07A48925E79F091D9E7 /* SuggestionRequestFactoryTests.swift */, + DA1F9C5D85651740CC51B47F /* SuggestionSessionReconcilerTests.swift */, + 5A520C43E88BA7D3CCF0E961 /* SuggestionTextNormalizerTests.swift */, + 7CC541A0FCCE9172C24C1350 /* SyntheticReplacePlannerTests.swift */, + 800ADA19752797F5704D9B72 /* TrailingDuplicationFilterTests.swift */, + ); + path = Suggestion; + sourceTree = ""; + }; + CA9E090F15FCB4CA83CC9FBC /* Components */ = { + isa = PBXGroup; + children = ( + D3C1C9A9BF1F74C16E4401EC /* CotabbyBrand.swift */, + CF96999230079A768BEFD0FC /* KeycapView.swift */, + 87C6335EED41343595F17A08 /* PopupChrome.swift */, + 6B49898B64D4DB50736CBC46 /* ScreenFrameReader.swift */, + A04DFC5BD7821D73DA21D7DB /* TagChip.swift */, + 1BB42779285A1BA40B7848C8 /* TickMarkSlider.swift */, + ); + path = Components; + sourceTree = ""; + }; + CB1EE2A3FD527C8377056C38 /* Input */ = { + isa = PBXGroup; + children = ( + 9316289DD11A72D3EAC0A929 /* CompositionInputModeClassifier.swift */, + EF4D6CEDF032A25EF72D7228 /* KeyCodeLabels.swift */, + A9FD2044CDEA95EC02C9B2FE /* MarkerSelectionSynthesizer.swift */, + ); + path = Input; + sourceTree = ""; + }; + D2F864A6272D7DDD11AD4E7C /* Focus */ = { + isa = PBXGroup; + children = ( + BD46042FD66F6D6F206B1763 /* ApplicationBundleMetadataTests.swift */, + F2C80E780DD9B08317E3B374 /* AppSurfaceClassifierTests.swift */, + 6137B225F7190F06F2089446 /* BrowserAppDetectorTests.swift */, + 952BA2A01E31BC4E74B7736C /* BrowserDomainTests.swift */, + 4D080DC6ABFA205A22E3D5FE /* FocusCapabilityFlickerGateTests.swift */, + B397084B31E549177DDC3F69 /* FocusCapabilityResolverTests.swift */, + C1337F5C94FA9A6388841805 /* FocusPollBackoffTests.swift */, + EA5C840CAF1DCEB561E0C826 /* TerminalAppDetectorTests.swift */, + ); + path = Focus; + sourceTree = ""; + }; + D816DC011F025BC315F10052 /* Focus */ = { + isa = PBXGroup; + children = ( + 46B67EF101326F317EFD670D /* ApplicationBundleMetadata.swift */, + 8772CBA9365F890D03A56995 /* AppSurfaceClassifier.swift */, + 16F8C2297472488862392DEE /* BrowserAppDetector.swift */, + 3871F63C8AF8AD96B14F5067 /* BrowserDomain.swift */, + 58C4F99A9232DD9E7B5A77BB /* FocusCapabilityFlickerGate.swift */, + 3CEEAA025DC9BD7D38AD78E8 /* FocusCapabilityResolver.swift */, + ECD5C8648740E7050CCA657F /* FocusPollBackoff.swift */, + 06820B1E0B02D6A16506427C /* TerminalAppDetector.swift */, + ); + path = Focus; + sourceTree = ""; + }; DCBC24D605EC0CBA1DD6097D /* Settings */ = { isa = PBXGroup; children = ( 6E1171BBC9CB74DB623C5E8B /* Components */, + 2B760C39A90C89FB4B5F2A0A /* ModelManagement */, 2EE526D7C9284AF6687A556B /* Panes */, 5D0AEFF86F8210CBE7CFCBAD /* SettingsCategory.swift */, DB0CE9AB1286367BA2E82392 /* SettingsContainerView.swift */, @@ -1711,145 +2209,191 @@ path = Settings; sourceTree = ""; }; - DFE8419B341AF83B4D276BC0 = { + DD63AF32089738F21797C4D7 /* Focus */ = { isa = PBXGroup; children = ( - 0AD8D6729549734CA7E06926 /* Config */, - 10701CD228D9F70454402BED /* Cotabby */, - A8A141E1F2137943476D0C82 /* CotabbyTests */, - 3725B1A195A06A4F014B75B1 /* Products */, + 26EF15DB8DA361CB5B67C5F9 /* AXTextGeometryResolverTests.swift */, + AC94E159E15C2F2C06D77B4F /* AXTreeDumpWriterTests.swift */, + DFB7940B64F4B82E03AB674E /* CaretRunPlacementTests.swift */, + F076BC5527D08E5CE55E3A2C /* DeepGeometryWalkThrottleTests.swift */, + EE437912B6EE36826912191A /* FocusSessionScopedCacheTests.swift */, + AC8F0BAC452D20743D316FB6 /* FocusSnapshotResolverLiveTests.swift */, + 3F42C0E566DA45DEB35D888B /* FocusSnapshotResolverSelectionTests.swift */, + 4F6CECCA06E9B6FE9A1C3C23 /* StaticTextRunWalkThrottleTests.swift */, ); + path = Focus; sourceTree = ""; }; - E2E02780CEFBC8027DEEB398 /* UI */ = { + DEC0DDC1DF558A8932276294 /* Context */ = { isa = PBXGroup; children = ( - D84D4528EEC9EFEB8AE8E318 /* ActivationIndicatorController.swift */, - 764659D09C3F0E8FBD267102 /* EmojiPickerPanelController.swift */, - 0F5E263AB69029D5E13D5EE8 /* FocusDebugOverlayController.swift */, - AAEFF8BAEC9168CADEDD4757 /* InlinePreviewPanelController.swift */, - F308F6E274CC645E27CB651F /* OverlayController.swift */, + 3680E1B8FA712A888F509640 /* ClipboardContentDistillerTests.swift */, + 04364C3242A25358E7C85FD6 /* ClipboardRelevanceFilterTests.swift */, + 64B0584FA16465453F04CA8C /* OCRTextHygieneTests.swift */, + 0DA66559D50874865032EE8C /* PromptContextSanitizerTests.swift */, + 652973AF18C20D51F81F76C5 /* SurfaceContextComposerTests.swift */, + 70F68E9A9255F607C4439ED5 /* VisualContextStartCoalescerTests.swift */, + ); + path = Context; + sourceTree = ""; + }; + DF66C06C201568550C519E06 /* Presentation */ = { + isa = PBXGroup; + children = ( + 85C36B59551CE66231CB8E26 /* CaretLinePositionTests.swift */, + B33E640B7FF8B1E8D53E7D85 /* CompletionRenderModePolicyTests.swift */, + C51EBCF982A0A9A4A1084EBB /* DisplayCoordinateConverterTests.swift */, + A1FE47A75EA31B7384585C18 /* GhostFontMetricsTests.swift */, + 52A749138073241F38352484 /* GhostFontSizeStabilizerTests.swift */, + D77599EFB08E1013FAED19B7 /* GhostSuggestionLayoutTests.swift */, + 3C8673733C0EB7A85861182F /* MirrorOverlayLayoutTests.swift */, + 76B253B10FA2896242B6C26F /* SuggestionAnchorCacheTests.swift */, + 309B45D197958D1DA2FE4D53 /* SuggestionFadeInPolicyTests.swift */, + 8711876D1C2789D34601E159 /* SuggestionOverlayStabilityGateTests.swift */, + 97AA016AC303DB8FC3F54A16 /* SuggestionTextColorCodecTests.swift */, + F661AAB8CC3ABDA49A957864 /* TextDirectionDetectorTests.swift */, + 5125EBB70F6E32CBD46506C0 /* TextLayoutCaretEstimatorTests.swift */, + ); + path = Presentation; + sourceTree = ""; + }; + DFE8419B341AF83B4D276BC0 = { + isa = PBXGroup; + children = ( + 0AD8D6729549734CA7E06926 /* Config */, + 10701CD228D9F70454402BED /* Cotabby */, + A8A141E1F2137943476D0C82 /* CotabbyTests */, + 3725B1A195A06A4F014B75B1 /* Products */, ); - path = UI; sourceTree = ""; }; E32D8E69FA3AC2B43BBF8F84 /* Services */ = { isa = PBXGroup; children = ( + 55E1A705ADAF153AE40216E9 /* Context */, 59681B24821B0C960A656168 /* Focus */, 1A748DD787833F29034EF2EA /* Input */, + E9FA809AF98B9C97A5F472F6 /* ModelManagement */, 1F3BF5BD8958D0D0C2E34AF1 /* Permission */, 1D6F00DFDE0013A930670603 /* Power */, + B5D8E46E603B4919E00EBD60 /* Presentation */, FFF55D3CE9FF3B16845823F7 /* Runtime */, 6495533696D4461386265D05 /* Spelling */, 3B1B0D8E3400BE4FC26AF6B5 /* Suggestion */, - E2E02780CEFBC8027DEEB398 /* UI */, - 41435C2343611783BD33423E /* Utilities */, + 7CE2AB7F84E13EB0A98D263D /* Updates */, 2574DDA4AFE2DE99E608EF95 /* Visual */, ); path = Services; sourceTree = ""; }; + E9FA809AF98B9C97A5F472F6 /* ModelManagement */ = { + isa = PBXGroup; + children = ( + DC756DF8E0032B39099D2BF8 /* DownloadFileRescuer.swift */, + 4D6D4D7CAD20C94DF9EF21D2 /* HuggingFaceAPIClient.swift */, + 4DF8401D3859F00CC94F8893 /* HuggingFaceSearchService.swift */, + 050DC9D858A124FD1CFA4D99 /* ModelDownloadManager.swift */, + 36652DB88C5948AA4A31524A /* ModelFileValidator.swift */, + ); + path = ModelManagement; + sourceTree = ""; + }; + EAC7119051E16252AE861FC0 /* Settings */ = { + isa = PBXGroup; + children = ( + 5ADC3A68EF5FD9A1E6B5D249 /* CustomRulesTests.swift */, + DE29E54D78A9DD7CD87626DD /* LanguageSupportTests.swift */, + A306C7B2B0790A0B98D8F353 /* PerDomainDisableSettingsTests.swift */, + DA02598F555696782E180DA5 /* ShortcutConflictTests.swift */, + D253D06D941F60EDAF112625 /* SuggestionSettingsModelTests.swift */, + ); + path = Settings; + sourceTree = ""; + }; + F02B51FBFE03C6BF20497A70 /* Input */ = { + isa = PBXGroup; + children = ( + A29DF1C68154C21E6943D38E /* InputModels.swift */, + ); + path = Input; + sourceTree = ""; + }; + F3BC919F34D9998C293D16E2 /* Evals */ = { + isa = PBXGroup; + children = ( + 2228A6C24CDE5F9D8DE33BF3 /* FoundationModelDriftEvalTests.swift */, + 202086735E28B96BBCE55E6B /* LlamaEvalScoring.swift */, + 3ED4E38B9FE65164C3ABEA12 /* LlamaEvalScoringTests.swift */, + 31A62CE4DA3E55B5E117DBD8 /* LlamaSuggestionEvalTests.swift */, + ); + path = Evals; + sourceTree = ""; + }; + F66C64436E0D9AFC2D3334D0 /* Permissions */ = { + isa = PBXGroup; + children = ( + D47E1471C110614F0D07E399 /* PermissionModels.swift */, + ); + path = Permissions; + sourceTree = ""; + }; F70F608E2356146E1B2D607F /* Support */ = { isa = PBXGroup; children = ( + 6F3F555B2E97A98A6554D0DA /* Accessibility */, + 7FAA2090D6421D9BAC2CFD37 /* Context */, + 4D07DA390100ECC4E8164547 /* Emoji */, + D816DC011F025BC315F10052 /* Focus */, + CB1EE2A3FD527C8377056C38 /* Input */, + A4EE6A8F2C4AB8940B72F681 /* Logging */, 67C78D77B58388B15AC8B954 /* Macros */, - 352AF5B2834FEE1F597394E4 /* ApplicationBundleMetadata.swift */, - 94B0830FBE4F2E239F670DBA /* AppSurfaceClassifier.swift */, - AC70775535A3428991025AB8 /* AXHelper.swift */, - 85EF79E6144D6C6AD062B569 /* BaseCompletionPromptRenderer.swift */, - B997EC69E1C65B1E18234221 /* BrowserAppDetector.swift */, - AD8025E4A296845FC53E660D /* BrowserDomain.swift */, - AA33F5FFAC5B99384E15CE3E /* BundledRuntimeLocator.swift */, - 01D84EED1A6A711F39DEA18F /* BundleVersion.swift */, - DE2BBC9CD727C19DA94DB105 /* CalendarAccessibilityCapturePolicy.swift */, - E3C84377F352140759B448C9 /* CaretGeometrySelector.swift */, - D77364C1AF183EF1C0A4074D /* CaretLinePosition.swift */, - 96495E4147D828C0B1B22765 /* ClipboardContentDistiller.swift */, - D3A2AC525DC664DB540D4F19 /* ClipboardRelevanceFilter.swift */, - 53CF416511099C6818110F01 /* CompletionRenderModePolicy.swift */, - 306A36888B5F2CA8FEF9C806 /* CompletionSeamGuard.swift */, - 4F283E5B403F9FEBFB4BA04A /* CompositionInputModeClassifier.swift */, - 1BD71ECC2AE4821B643E0935 /* ConfidenceSuppressionPolicy.swift */, - 9CC2D6472ACD377FD73A5801 /* ControlTokenMarkers.swift */, - C7B2D34A6F3AC9DFD61350F7 /* CotabbyDebugOptions.swift */, - 247561C626843957CFB4B632 /* CurrentWordExtractor.swift */, - 6DC17643448271DE5DE61A89 /* DebouncePolicy.swift */, - D12ABBCE23A946C22894945B /* DecodeStopPolicy.swift */, - 29ED42C4BDD0C521101AF95E /* DeviceInfo.swift */, - 74BD1D4DB27D5D96D1E06096 /* DisplayCoordinateConverter.swift */, - 0AC3BF78835C8F2C315932F1 /* EmojiCatalog.swift */, - 1441B2D89DAE6878DAD11F17 /* EmojiMatcher.swift */, - 62EDF1199CC5E18BD7651661 /* EmojiPickerPanelLayout.swift */, - E27B962C66727776D00069DE /* EmojiPopularity.swift */, - DDF6A4E9CE93FD53C60E67E3 /* EmojiQueryRun.swift */, - 9E72A3972E15749337539C2D /* EmojiRecents.swift */, - 0846DE4E0293AF13890620D3 /* EmojiSynonymCatalog.swift */, - 312C7306D916963F519CE0D9 /* EmojiTriggerStateMachine.swift */, - 1A8414BEB7E34F57607E37FE /* EmojiVariantResolver.swift */, - CE8C2569A8217EE9BD3B197F /* FileLogHandler.swift */, - 6A44BEC8C23FF227731DD0CD /* FocusCapabilityFlickerGate.swift */, - 70367FCC1E0F08EE3B8EB26F /* FocusCapabilityResolver.swift */, - 09FADF683BE7B3558377FA76 /* FocusPollBackoff.swift */, - FE7BF162A12703249726F20A /* FoundationModelPromptRenderer.swift */, - 9E6439213F2A273702A6E26B /* GhostFontMetrics.swift */, - 9458F0820B3161FE9CF1DDAF /* GhostFontSizeStabilizer.swift */, - 043E8AA850F930222DD112C0 /* GhostSuggestionLayout.swift */, - 7E44E393DD58B978B1EAB6CF /* GhostTextColorPreset.swift */, - 41BBD5A4BA08CABE77860886 /* HardwareCapabilityProbe.swift */, - A1267FF524A170ACC144E919 /* InsertedTextAdvance.swift */, - 7D472F9F396672E57873303B /* InsertionSafetyGate.swift */, - E0D2FEEA4304C86324BAADAB /* InsertionStrategySelector.swift */, - EAAE6B395FAB604DF059280A /* KeyCodeLabels.swift */, - 8D610FCA3A97249DCCE7D0B8 /* LLMIOFileHandler.swift */, - 1C201A65A6B040F90C528A3B /* MacroTriggerStateMachine.swift */, - A863F41C0C03D7B4AC5DC002 /* MarkerSelectionSynthesizer.swift */, - 1F32455AE743D1D0E9E2CB38 /* MenuBarRecoveryPolicy.swift */, - 357C18383B047F24A531BDCD /* MidWordContinuationPolicy.swift */, - 54150A507B03221F137D539B /* MirrorOverlayLayout.swift */, - B22FDEB3B1DCC9ADE906CC73 /* OCRTextHygiene.swift */, - 2578311F4ABCB3CDFF795A86 /* OnboardingFlowSteps.swift */, - 24F613F0E2F7046E6532A09C /* OnboardingTemplateFeatureList.swift */, - FA878B447441BB4F3E327CC8 /* OnboardingTemplateRecommender.swift */, - B25C3087D4A9F4DC52FD5A69 /* PerDomainDisableSettings.swift */, - E6423D6CC8CC371D2DA899DE /* PermissionOverlayTracker.swift */, - FA4B45B91D4DEAC979C3113E /* PromptContextSanitizer.swift */, - AFCFCCCB69C29A86E726B10A /* PromptSectionBudget.swift */, - 6DC693E00430F46E41CB56E6 /* RequestID.swift */, - 1827565F4FAD3E4E61CA65C3 /* SecureFieldDetector.swift */, - E68BE6A22BA0D42C8DD9868C /* SelfCaptureGate.swift */, - D4B56C250DDEF3E81F9DCBD7 /* SentenceBoundaryClassifier.swift */, - 2A02336442BB735EE2E8D064 /* SettingsAttentionEvaluator.swift */, - 866D74711A35E0085D2A4BB3 /* SettingsSearchRanker.swift */, - B7EB66904C35A7D8BEF5D2A5 /* SpeculativeAcceptanceContext.swift */, - 0348A7053E5683C68879A71A /* SpellingLanguageResolver.swift */, - 299BD7B741DA4AAE6A061BAD /* StreamedGhostTextPolicy.swift */, - E99C99D2782EAF0492F964EF /* SuggestionAnchorCache.swift */, - 3609CC88A5280B3AA40414DF /* SuggestionAvailabilityEvaluator.swift */, - 764EE0693994E2E126E7FC77 /* SuggestionFadeInPolicy.swift */, - B2F95847D76893C8A5B504B4 /* SuggestionOverlayStabilityGate.swift */, - DDE858CB1E687E3CEB8FDD5B /* SuggestionRequestFactory.swift */, - CE0AA0503128B0FC3951D700 /* SuggestionSessionReconciler.swift */, - 960F3FDBF283347594F30494 /* SuggestionSettingsStore.swift */, - 1CE61E74928C221B8BB261C6 /* SuggestionTextColorCodec.swift */, - B424E2AC97C99D335B0D5751 /* SuggestionTextNormalizer.swift */, - C602357DDED5D11C8B4567FB /* SurfaceContextComposer.swift */, - 6E3B1232C4BE8072A5183F9C /* SymSpell.swift */, - 27A5D63F390E9B7A7FE343FE /* SystemResourceSampler.swift */, - 7F4C4A7EAF886E0CC945BFEF /* TerminalAppDetector.swift */, - 328847A0F494360033366791 /* TextDirectionDetector.swift */, - 8BF8DC1860CCF0DFA3A3DFD7 /* TextLayoutCaretEstimator.swift */, - 1BA30E71C21C77BB6EA4C166 /* TokenCountEstimator.swift */, - D408D647412C59F3E692C42B /* TrailingDuplicationFilter.swift */, - 08CE63B8725EBD71A4C024E1 /* TypoCaseTransfer.swift */, - B8412FE2BAC406421248A03B /* TypoGate.swift */, - 2F01FAC4F57EB08471521196 /* VisualContextStartCoalescer.swift */, - C3A35FAA742408D002B75920 /* WebContentFieldDetector.swift */, - 815F2ABAF6AB75DA3AFBBCEF /* WordCountFormatter.swift */, + 81A8C1B4295E6426050B3C2B /* Onboarding */, + 60B9F74FA889713FB1308741 /* Presentation */, + A1B1508BA77EF490887E28DE /* Prompting */, + 9EB3676074BA79C2AA545FF1 /* Runtime */, + 22548CAEF237D0D8CFCBD171 /* Settings */, + 643C6D3D4745CED7E4A6417B /* Spelling */, + 81E6FF5F2E0AE29DA29FF3DC /* Suggestion */, + 9ED3FC5CD8FA7C322F2AC166 /* Utilities */, ); path = Support; sourceTree = ""; }; + F73D13467155B655E5DFB8DD /* Runtime */ = { + isa = PBXGroup; + children = ( + EBD7B94FF42D8C538C328E80 /* BundledRuntimeLocatorTests.swift */, + 81D7F428477976398CFC5CCF /* DecodeStopPolicyTests.swift */, + 159A3097EEFEC93396821019 /* DeviceInfoTests.swift */, + 7B3AD6D4125ED99669F4EC32 /* DownloadOutcomeClassifierTests.swift */, + 57FE28720A0C1B74B5DEAA58 /* HardwareCapabilityProbeTests.swift */, + 18705DCA94FBA82F6FB3DBB0 /* SystemResourceSamplerTests.swift */, + ); + path = Runtime; + sourceTree = ""; + }; + F91F89298707579FDD1FF0E4 /* Emoji */ = { + isa = PBXGroup; + children = ( + 68ADAFFD5031EBFA70CD62BB /* EmojiPickerModelsTests.swift */, + F3D991D3536ED989C89AF44D /* EmojiUsageStoreTests.swift */, + ); + path = Emoji; + sourceTree = ""; + }; + F96313138F50BA4CB6236726 /* Spelling */ = { + isa = PBXGroup; + children = ( + A9331B12568E717FCF9A5086 /* CurrentWordExtractorTests.swift */, + CBDBD55F205C609303913423 /* SpellingDictionaryResourceTests.swift */, + D71686BC29B7E0FACFF0B19C /* SpellingLanguageResolverTests.swift */, + CFB3F1AA4007F0B44CA70E6F /* SymSpellTests.swift */, + 2C5953E5EB042ABAF6F35A69 /* TypoCaseTransferTests.swift */, + 8BE5F414704A8264C2946A50 /* TypoGateTests.swift */, + ); + path = Spelling; + sourceTree = ""; + }; FFF55D3CE9FF3B16845823F7 /* Runtime */ = { isa = PBXGroup; children = ( @@ -2056,178 +2600,178 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - E46F50AEDA8FE13B02E3FA8D /* AXHelper.swift in Sources */, + 105187F185A579BC67CA2A93 /* AXHelper.swift in Sources */, 28198855DD83CDABC02A780C /* AXTextGeometryResolver.swift in Sources */, 3FCEF50FDD9EE01AE3711083 /* AXTreeDumpWriter.swift in Sources */, 19386985A3A91D0843092086 /* AboutPaneView.swift in Sources */, 831B8DF92AAC8D0B99C5A262 /* AcceptanceModePickerView.swift in Sources */, AF86357E50ADC91838446A9A /* AcknowledgementsView.swift in Sources */, - E14AF4034E71EDE34646FEEC /* ActivationIndicatorController.swift in Sources */, + 56D2FDE72FE21C35E8BDD06C /* ActivationIndicatorController.swift in Sources */, 9EB8E3DC796A0C8BFDE8E683 /* AppDelegate.swift in Sources */, - C149EAED2CF6F8B6274053E0 /* AppSurfaceClassifier.swift in Sources */, - 7E505E25BD9C45F0DBE2796C /* AppUpdateManager.swift in Sources */, + 9DC064E0D7CD8A0F811A557D /* AppSurfaceClassifier.swift in Sources */, + 4E8268A5C44B9E5945EBE59D /* AppUpdateManager.swift in Sources */, B4D36F5D03E3143CE74582F9 /* AppearancePaneView.swift in Sources */, - 1AEA5D46AFB9095716406788 /* ApplicationBundleMetadata.swift in Sources */, + BD94A513828013BDDDF8BEE9 /* ApplicationBundleMetadata.swift in Sources */, 231905D5C463FA994CACFA77 /* AppsPaneView.swift in Sources */, 3BC4FCF9A51F57A0A8F6944D /* ArithmeticEvaluator.swift in Sources */, - 74422BB837D6A319D12BF981 /* BaseCompletionPromptRenderer.swift in Sources */, - 79AA66B111C059B342338443 /* BrowserAppDetector.swift in Sources */, - 2BE029A192E82E795490DC7F /* BrowserDomain.swift in Sources */, - 06A310C087B460289B5ACCFE /* BundleVersion.swift in Sources */, - 07E50A9ECCE55072DA311F8F /* BundledRuntimeLocator.swift in Sources */, + 9B6C176547D2B6D118572E41 /* BaseCompletionPromptRenderer.swift in Sources */, + 728E3E5345CCBD8BD6061F63 /* BrowserAppDetector.swift in Sources */, + 8259591A1BDE1D275181DF1A /* BrowserDomain.swift in Sources */, + A30F28CB21A2DDE9E44FC10A /* BundleVersion.swift in Sources */, + 24D5BE34BE7B7B72A93C6A9F /* BundledRuntimeLocator.swift in Sources */, 7291020840F2164EBB764FAF /* CalendarAccessibilityCaptureGuard.swift in Sources */, - 5580B5FF786B4F5173E01B20 /* CalendarAccessibilityCapturePolicy.swift in Sources */, - 7C72A2D76E8BA38ADD523CF6 /* CaretGeometrySelector.swift in Sources */, - 06CFA03207FF92EB272A66F2 /* CaretLinePosition.swift in Sources */, + BFD3F43E9C83F3D0F7BF9ADE /* CalendarAccessibilityCapturePolicy.swift in Sources */, + 68394C2ED425A7D59E229810 /* CaretGeometrySelector.swift in Sources */, + 93DE9A4FE1218C2881D0E6AA /* CaretLinePosition.swift in Sources */, CCB8D287A5FF3863B9DE9246 /* ChromiumAccessibilityEnabler.swift in Sources */, - D22C324C4FDB813E54AAD113 /* ClipboardContentDistiller.swift in Sources */, - D368C9A8531677174956DE50 /* ClipboardContextProvider.swift in Sources */, - 2314C82FAAA81EB58BFE204D /* ClipboardRelevanceFilter.swift in Sources */, - 47EBA122ABE99932326D9E4A /* CompletionRenderMode.swift in Sources */, - 53AA9A9D3555A67F8F31DC65 /* CompletionRenderModePolicy.swift in Sources */, - 8284A20D24B64503F138E946 /* CompletionSeamGuard.swift in Sources */, - 7179FB0EC6411166CCD79F6B /* CompositionInputModeClassifier.swift in Sources */, - 6BE0C8F9D054A2C0D9018001 /* ConfidenceSuppressionPolicy.swift in Sources */, + E42469F1225220932384F342 /* ClipboardContentDistiller.swift in Sources */, + 4A69EB9EEA4620D2EC35B9B2 /* ClipboardContextProvider.swift in Sources */, + D2DB4238276DD73A8D5F588C /* ClipboardRelevanceFilter.swift in Sources */, + 8586BBF24A7F21AF84F59D2C /* CompletionRenderMode.swift in Sources */, + 793E33BA3A7F5B706D18FC01 /* CompletionRenderModePolicy.swift in Sources */, + FC7B332AC1F0BF42689D6EE8 /* CompletionSeamGuard.swift in Sources */, + B1E93ED4D7C0B9BB77F95ADC /* CompositionInputModeClassifier.swift in Sources */, + CB405DA17FEF5051AE19B838 /* ConfidenceSuppressionPolicy.swift in Sources */, A29594647EA5450A54B36228 /* ContextBuffer.swift in Sources */, 2F1E57A89D1DC775E8880297 /* ContextLivePreviewField.swift in Sources */, 930BA578E742D96FD9D340ED /* ContextPaneView.swift in Sources */, - 53480635FD54DAF41B1F5047 /* ControlTokenMarkers.swift in Sources */, + BFE1811C699B5B87530C3248 /* ControlTokenMarkers.swift in Sources */, B55B160E0534AE23BAC1C3DA /* CotabbyApp.swift in Sources */, AF55F1ABEDEA10C76C307CEC /* CotabbyAppEnvironment.swift in Sources */, - C5275D0DA6F5A9D6BFED943D /* CotabbyBrand.swift in Sources */, - 52F3962FA9F424576D7DB5B8 /* CotabbyDebugOptions.swift in Sources */, + 4E7F611941736F526C3B9C1B /* CotabbyBrand.swift in Sources */, + A5D76116479357C29E2D8405 /* CotabbyDebugOptions.swift in Sources */, 9B0CE2B00695EC13A6E6CCF3 /* CurrencyEvaluator.swift in Sources */, - B9623395B31459D9D45B1320 /* CurrentWordExtractor.swift in Sources */, + 81870F2D46C12CA1E6B19523 /* CurrentWordExtractor.swift in Sources */, 378EE9C111040353A6335454 /* CurrentWordSpellChecker.swift in Sources */, - 55D4E6FB63E3475749E61EB3 /* CustomRulesCatalog.swift in Sources */, - F7237FDB0665465F1C7EDCDE /* CustomRulesEditor.swift in Sources */, + AED18FC69D7ECC5A0A80B8FB /* CustomRulesCatalog.swift in Sources */, + 281B76BD6E02E93D04AA714B /* CustomRulesEditor.swift in Sources */, E0DAB3CDE782C330AF21FC0D /* DateMacroEvaluator.swift in Sources */, - E3C0326597083762BA6D76CA /* DebouncePolicy.swift in Sources */, - FA25762161F068F59BEC86EB /* DecodeStopPolicy.swift in Sources */, + E3A27C2FDF6405B926765D21 /* DebouncePolicy.swift in Sources */, + 29E20FF0F413E723D2A526C4 /* DecodeStopPolicy.swift in Sources */, 400E1A5145FC8C5BA2FAED0A /* DeepGeometryWalkThrottle.swift in Sources */, - CF39EB76C3ECF8F764C1B4FB /* DeviceInfo.swift in Sources */, - 7DCA61581FD8ECA6565A69F6 /* DisplayCoordinateConverter.swift in Sources */, - 8D0F66DD1E6C988368A4545D /* DownloadFileRescuer.swift in Sources */, - A773D96AC9EC16231633542C /* DownloadOutcomeClassifier.swift in Sources */, - C6A91AD96F52DB72947830C0 /* DownloadableModelCatalogView.swift in Sources */, - 5F78F7F686015A06725698F1 /* EmojiCatalog.swift in Sources */, - 746BC62993602F78147FF8B0 /* EmojiMatcher.swift in Sources */, + F992FE031F4D7F47B4C18E56 /* DeviceInfo.swift in Sources */, + 78F319805DCEA8B1239C473A /* DisplayCoordinateConverter.swift in Sources */, + 936F87925A22DAC58525B60F /* DownloadFileRescuer.swift in Sources */, + 6C4EFF98C9D606B3BE35D2A6 /* DownloadOutcomeClassifier.swift in Sources */, + EDD9AE89E16AB1EF47D06269 /* DownloadableModelCatalogView.swift in Sources */, + 69FFF0A2A9E0D2900F2BE9B1 /* EmojiCatalog.swift in Sources */, + B9D060250BDC10C5FD05B70B /* EmojiMatcher.swift in Sources */, 23676A1A7099AC04091FD6A3 /* EmojiPaneView.swift in Sources */, A335FBC828C3803200070F5D /* EmojiPickerController.swift in Sources */, - 4E7AC9EBE2781AC49E167608 /* EmojiPickerModels.swift in Sources */, - 2872D907299F79A9A69BBFCB /* EmojiPickerPanelController.swift in Sources */, - 5560B54FBBEC80F13BCD2054 /* EmojiPickerPanelLayout.swift in Sources */, - 26A63FD59B47FB93A76D199F /* EmojiPickerView.swift in Sources */, - 029B10EE4D659BAAF2C48FBE /* EmojiPopularity.swift in Sources */, - 956BC802BDD3C7C3EA7F084A /* EmojiQueryRun.swift in Sources */, - 467E2EF8E7B1EC83F60F6A35 /* EmojiRecents.swift in Sources */, - EABF1A8075791DC530E58614 /* EmojiSynonymCatalog.swift in Sources */, - E95888E76AA68A18A88AD8E6 /* EmojiTriggerStateMachine.swift in Sources */, - 108C109E767888DEB2791F8E /* EmojiUsageModels.swift in Sources */, - FE3AE9F51E1F616D843E7BFA /* EmojiUsageStore.swift in Sources */, - E853B9C7AF93FA595DC417B2 /* EmojiVariantResolver.swift in Sources */, + DED8731A5A34A10349AA05A8 /* EmojiPickerModels.swift in Sources */, + 6E666BEE80ECE65CF71C7F56 /* EmojiPickerPanelController.swift in Sources */, + 2786CC95BFBBF5250397D44C /* EmojiPickerPanelLayout.swift in Sources */, + 70A40CE02EF0AF361263BE7E /* EmojiPickerView.swift in Sources */, + FDF77C5FB84854E32F6E3D55 /* EmojiPopularity.swift in Sources */, + FCA314FBD31BF7C2CD273321 /* EmojiQueryRun.swift in Sources */, + 6167731C22B9B7ECFC5595AA /* EmojiRecents.swift in Sources */, + 8BC2FD8031EDE67956BCAC73 /* EmojiSynonymCatalog.swift in Sources */, + 8E7EEDABB99CC50B898C2161 /* EmojiTriggerStateMachine.swift in Sources */, + BD4A3B059DBB46C791FF3FF7 /* EmojiUsageModels.swift in Sources */, + DA00477BB00EB3E95F204CB2 /* EmojiUsageStore.swift in Sources */, + 30ECD51B71D7BEF422DD8290 /* EmojiVariantResolver.swift in Sources */, B67EEF6865EB7C2205605608 /* EngineAndModelPaneView.swift in Sources */, - 5E77261BAF8365B69F08DB67 /* FieldEdgeIconIndicatorView.swift in Sources */, + D5929DF79BA02EE9B170B4D5 /* FieldEdgeIconIndicatorView.swift in Sources */, 3EF0A298B5590571B1C37282 /* FieldStyleCache.swift in Sources */, - 021197C88AF19DEA715C849B /* FileLogHandler.swift in Sources */, - 97ECEF5AA17B26FA6F187461 /* FocusCapabilityFlickerGate.swift in Sources */, - 799691376DD3EE52E5F0F7FB /* FocusCapabilityResolver.swift in Sources */, - C29FE24B690BB883744AD248 /* FocusDebugOverlayController.swift in Sources */, - 4F8EBC5FAE109058D3D2722C /* FocusModels.swift in Sources */, - 1B62024FC44DCAC1E4B7E048 /* FocusPollBackoff.swift in Sources */, + 11D3A5C8DA17BCDB79969FC4 /* FileLogHandler.swift in Sources */, + D7A97AE39C5F52C0B2EE99B2 /* FocusCapabilityFlickerGate.swift in Sources */, + 694D69DF8695CC400D206B51 /* FocusCapabilityResolver.swift in Sources */, + 8ED4542BF4F6BC1620D47A20 /* FocusDebugOverlayController.swift in Sources */, + 985C583A41DEEE040F48D661 /* FocusModels.swift in Sources */, + 94A93C9AECB84D56E3347601 /* FocusPollBackoff.swift in Sources */, 0609E4F29F537530A49C6A50 /* FocusSessionScopedCache.swift in Sources */, AA2419299B395D420FA930F5 /* FocusSnapshotResolver.swift in Sources */, 89329024F050602EFBC7CC6B /* FocusTracker.swift in Sources */, - 45CE438CC67179356224AFD9 /* FocusTrackingModel.swift in Sources */, + D1CB2B2D33E5B6C76DDB2A9C /* FocusTrackingModel.swift in Sources */, BB3166B270865C8C6EFBA1CF /* FoundationModelAvailabilityService.swift in Sources */, - 709F365A846B908D953FA92D /* FoundationModelPromptRenderer.swift in Sources */, + 6B9B1630E1F30EAE429B5B60 /* FoundationModelPromptRenderer.swift in Sources */, B9F400BCC20757DA5DB0B5F9 /* FoundationModelSuggestionEngine.swift in Sources */, 4882DF865737ECDC4925F44B /* GeneralPaneView.swift in Sources */, - 314AD8F0FD781CB6DDE4603C /* GhostFontMetrics.swift in Sources */, - 4767E0C7B4997069EA7ADBD7 /* GhostFontSizeStabilizer.swift in Sources */, - F93F24A74E8942E26D82EFE3 /* GhostSuggestionLayout.swift in Sources */, - 5D083F544CF36CF6DFA34CB1 /* GhostTextColorPreset.swift in Sources */, + E53B1E22EEAC5A606DD87DC3 /* GhostFontMetrics.swift in Sources */, + 81213A3D2EC939A46BF6A105 /* GhostFontSizeStabilizer.swift in Sources */, + A2177BAD62703590054FA58E /* GhostSuggestionLayout.swift in Sources */, + DFC02F29B2F44DA8176F7EEF /* GhostTextColorPreset.swift in Sources */, F596D7438459A7A4246A39CE /* GhostTextPreview.swift in Sources */, - 056EA46914B45722D19D438E /* HardwareCapabilityProbe.swift in Sources */, + 75549A20D66E861ED9C6B24F /* HardwareCapabilityProbe.swift in Sources */, 507E7BCCD189A64C3F8ECB79 /* HomePaneView.swift in Sources */, - C7849B86C5F2EE7D0A81AEF7 /* HuggingFaceAPIClient.swift in Sources */, - 50AABC3B54A9CF2879232276 /* HuggingFaceModelBrowserView.swift in Sources */, - 1E0796CADFB4F561EC94602A /* HuggingFaceModels.swift in Sources */, - 111BEFF15FEF2CD3DED887A5 /* HuggingFaceSearchService.swift in Sources */, + 09B092E8A682D127FC9872A7 /* HuggingFaceAPIClient.swift in Sources */, + 7E11BEAD32E9FF170C92000A /* HuggingFaceModelBrowserView.swift in Sources */, + FF46903861BA67AED8C24EF8 /* HuggingFaceModels.swift in Sources */, + 6AF17537A3A91BAA875DEA0F /* HuggingFaceSearchService.swift in Sources */, 5BB32CD44020B07AE453A2D6 /* InlineCommandCoordinator.swift in Sources */, - E0ED91F0E8963870A4E6516E /* InlinePreviewPanelController.swift in Sources */, - 41DD807E251E1DC653540EFD /* InlinePreviewView.swift in Sources */, - 266DB36F6BD7AD1038F13E39 /* InputModels.swift in Sources */, + 87CE40ADBFCDBFD266BA9E3F /* InlinePreviewPanelController.swift in Sources */, + 2C44C5142ED914BF99A70EC6 /* InlinePreviewView.swift in Sources */, + A06D86F7475984F7AD810EFC /* InputModels.swift in Sources */, 5ADAA8600CE1A5ED570F889E /* InputMonitor.swift in Sources */, 3AC2F7F221F7C59242B06DFC /* InputSuppressionController.swift in Sources */, - CFDB42AB7DC7F9663450BC7F /* InsertedTextAdvance.swift in Sources */, - FC0C0C43EEC80325FE699B5A /* InsertionSafetyGate.swift in Sources */, - ADBCB725707ED11B19C7F08D /* InsertionStrategySelector.swift in Sources */, - 1C267B67EA61527B74C9D051 /* KeyCodeLabels.swift in Sources */, - BA74281E2DDE659C5CACBF24 /* KeyRecorderView.swift in Sources */, + 3963B60499D83D9363E401BE /* InsertedTextAdvance.swift in Sources */, + 8F508CD1A957BBC418C59780 /* InsertionSafetyGate.swift in Sources */, + 6ECD119C3883DEBC376578C3 /* InsertionStrategySelector.swift in Sources */, + 5A88C18CE8A5BAD6307B96C0 /* KeyCodeLabels.swift in Sources */, + 9335AAAD76482788CF3736EB /* KeyRecorderView.swift in Sources */, 4086A1B07488C4D3D43D86C9 /* KeyboardInputSourceMonitor.swift in Sources */, - 64F20D51F7905DC290AE0351 /* KeycapView.swift in Sources */, - E3CAAEFAAB5BB24CEE16445B /* LLMIOFileHandler.swift in Sources */, - CADCC1B825DBE7BFC3135F43 /* LanguageCatalog.swift in Sources */, - 47654BDCFD2DE6D4DE85D7FE /* LanguageTagsEditor.swift in Sources */, + 3935AEF7D139557677D09318 /* KeycapView.swift in Sources */, + 4D32F003F78EAAA984E77D83 /* LLMIOFileHandler.swift in Sources */, + BD4D2296BC699984D1916450 /* LanguageCatalog.swift in Sources */, + 14AB92F33FAF52D2BCE589FB /* LanguageTagsEditor.swift in Sources */, BE79CFA6A7A37F25B2AA4D56 /* LlamaRuntimeCore.swift in Sources */, 5614E22EAA5F5C37A9E4F7B6 /* LlamaRuntimeManager.swift in Sources */, - 2E0FC35AA7D717B978033ED1 /* LlamaRuntimeModels.swift in Sources */, + F50F54FB1B3B2B2E464B8683 /* LlamaRuntimeModels.swift in Sources */, B588C09233E69C6EDC69BEDC /* LlamaSuggestionEngine.swift in Sources */, E54F5F03E16859D5A1E3437A /* MacroController.swift in Sources */, 1D54C941ED086C6427CFD773 /* MacroEngine.swift in Sources */, A614AD79BE724ABA3721613B /* MacroModels.swift in Sources */, - 323500F336AF70C520926383 /* MacroReferenceSheet.swift in Sources */, - 6503E1585D0CDE8CD852144B /* MacroTriggerStateMachine.swift in Sources */, - 057CEA7858012C1501F1785C /* MarkerSelectionSynthesizer.swift in Sources */, - 4FC42808D61BF110425801ED /* MenuBarPopoverDismisser.swift in Sources */, - 783BEC91DBC86AF75CEDB269 /* MenuBarPresentationObserver.swift in Sources */, - 96ECE89BD96CF93CC159B437 /* MenuBarRecoveryPolicy.swift in Sources */, - C0537A515AED443F6C61DB2A /* MenuBarSections.swift in Sources */, - 0ED2E5A4C1F80E3B5B767596 /* MenuBarStatusLabelView.swift in Sources */, - F04D9470439699DB1F016000 /* MenuBarView.swift in Sources */, - 29ABB5488251FD8089D74F51 /* MidWordContinuationPolicy.swift in Sources */, - A3913860E04446A86833D39B /* MirrorOverlayLayout.swift in Sources */, - 1F714771EE793A5AF92F1E2B /* ModelDownloadManager.swift in Sources */, - DD065767BC8B557C839464FE /* ModelFileValidator.swift in Sources */, - 914266D314BBBCE2EAB5CBA7 /* OCRTextHygiene.swift in Sources */, + 5161D2D6BE6ADEAC91A7F0D4 /* MacroReferenceSheet.swift in Sources */, + 50CDF4E6CD754A74DDCF67FC /* MacroTriggerStateMachine.swift in Sources */, + FCB060F562093AACA90CAA21 /* MarkerSelectionSynthesizer.swift in Sources */, + 7527A1523BFCCC1D418B44FD /* MenuBarPopoverDismisser.swift in Sources */, + 84E9E1F4D55CEB8A9692734E /* MenuBarPresentationObserver.swift in Sources */, + E9B7E353B233F842AC859542 /* MenuBarRecoveryPolicy.swift in Sources */, + 66E7FB51A0DF5916ABBA15D0 /* MenuBarSections.swift in Sources */, + 4D4F02A7187C324A4B43A974 /* MenuBarStatusLabelView.swift in Sources */, + 35F1681148A324CBEC797BAF /* MenuBarView.swift in Sources */, + 9D8D6751BD3985F7A574AAE7 /* MidWordContinuationPolicy.swift in Sources */, + 9C5339D11DC64BBD21C6BC6F /* MirrorOverlayLayout.swift in Sources */, + E6C99AB3E1A56E71F3A518FB /* ModelDownloadManager.swift in Sources */, + 6A47E31BF0F99AF318DA4D98 /* ModelFileValidator.swift in Sources */, + 556197D64680237CBCCCDD9F /* OCRTextHygiene.swift in Sources */, 908D99B538976C07833157E8 /* OnboardingFeatureShowcase.swift in Sources */, - 331208BF9383479A4C596F2B /* OnboardingFlowSteps.swift in Sources */, + 47123A894E2866177AA9A761 /* OnboardingFlowSteps.swift in Sources */, E6DD9EAAFF4001E2922B5F55 /* OnboardingStyle.swift in Sources */, - FE4191A7C84E547DCD4F8B44 /* OnboardingTemplate.swift in Sources */, - 087EAFD68591401E870EFEC3 /* OnboardingTemplateFeatureList.swift in Sources */, - B7A98BC225304E4DFED9E622 /* OnboardingTemplateRecommender.swift in Sources */, + 3CEE19FF81D284368225063C /* OnboardingTemplate.swift in Sources */, + 931D40674AF1CB11BE27327A /* OnboardingTemplateFeatureList.swift in Sources */, + 8F6B554D210B15AD99511D4D /* OnboardingTemplateRecommender.swift in Sources */, 39B31DBE07288712A1ACA202 /* OpenAICompatibleAPIClient.swift in Sources */, 70998EEDBB8B9953CB043991 /* OpenAICompatibleCredentialStore.swift in Sources */, - 19E59FD9A0707751D30D93E3 /* OpenAICompatibleEndpointModels.swift in Sources */, + BBC7F32FC99DBC41B0102E54 /* OpenAICompatibleEndpointModels.swift in Sources */, 0479478CBE8D5387119C3E35 /* OpenAICompatibleSuggestionEngine.swift in Sources */, - C5ADE88B2504F252278E3DD5 /* OverlayController.swift in Sources */, - B335B04A3EB50E51FF9C8C0F /* PerDomainDisableSettings.swift in Sources */, - B02F46E94F74BAEBB90E165A /* PerformanceMetricsStore.swift in Sources */, + 9261E4F7F4671A6D9ED8B0D4 /* OverlayController.swift in Sources */, + 5E1CE9C9062D2DEB4B96FD5C /* PerDomainDisableSettings.swift in Sources */, + 7B85C2FB697D173A9CEB41D3 /* PerformanceMetricsStore.swift in Sources */, ACC1D8C50007AA193271F977 /* PerformancePaneView.swift in Sources */, 227D70C89AE20DD5A3AC7D8B /* PermissionDragSourceView.swift in Sources */, 7B33F811711B26161212EAEA /* PermissionGuidanceController.swift in Sources */, 55EDBFF489D4C31276E2A67F /* PermissionHostApp.swift in Sources */, 41924323814E45BFEDAA5359 /* PermissionManager.swift in Sources */, - D603EC842D9D7A1A81899050 /* PermissionModels.swift in Sources */, - 4B47C5DF1EF4276E0B143AF5 /* PermissionOverlayTracker.swift in Sources */, + 5BF39DDF3101BB4C58863C19 /* PermissionModels.swift in Sources */, + 2B355C61C20866199F414EB9 /* PermissionOverlayTracker.swift in Sources */, 9A82FB431A61719F275623B8 /* PermissionOverlayWindowController.swift in Sources */, 513066CA00F0E9A5E7358A4E /* PermissionReminderView.swift in Sources */, D553BAA6C9F478533BD4A221 /* PermissionsPaneView.swift in Sources */, - 2D32B63CB58FBC5BC2EA7125 /* PopupChrome.swift in Sources */, + D0BA4677F47C6943310B8A28 /* PopupChrome.swift in Sources */, C607A624A0FB697486C56B8E /* PowerSourceMonitor.swift in Sources */, - FEC24B9C23274B9FA1F0072E /* PromptContextSanitizer.swift in Sources */, - 982BA68A53CEE0F45D41F3D3 /* PromptSectionBudget.swift in Sources */, + 37BAD9C6AFAAF99E818D734D /* PromptContextSanitizer.swift in Sources */, + 47EFFC4AEBA2848C933BB77C /* PromptSectionBudget.swift in Sources */, 9A419D0704C95920CB71D3B1 /* RandomMacroEvaluator.swift in Sources */, - 82DAFCA8CC3AE3E2FBFDBD76 /* RequestID.swift in Sources */, - 26B8841D2008F8A74C577A58 /* RuntimeBootstrapModel.swift in Sources */, - 0BD3D1CA74CF6CC53BF85153 /* ScreenFrameReader.swift in Sources */, + 3CF5E6D50BB799DFD6EBDA92 /* RequestID.swift in Sources */, + 188DE63AA5C77C740781A1AF /* RuntimeBootstrapModel.swift in Sources */, + 62B45766E8A2827E31AFD356 /* ScreenFrameReader.swift in Sources */, B6BA7DF77DCA55F9EF090AEE /* ScreenTextExtractor.swift in Sources */, 2420363A5F652F51693A018B /* ScreenshotContextGenerator.swift in Sources */, - ADFBCB4099CF919F3EC5BE7B /* SecureFieldDetector.swift in Sources */, - 47FDCB1CFF8FA171F5EE1A01 /* SelfCaptureGate.swift in Sources */, - 418304869F503EDC6465F8D5 /* SentenceBoundaryClassifier.swift in Sources */, - 08208001C5439ED68EA2C28D /* SettingsAttentionEvaluator.swift in Sources */, + 3AD39D992243A7AA541A43C8 /* SecureFieldDetector.swift in Sources */, + EFEA8845584EC9AE7D3B123D /* SelfCaptureGate.swift in Sources */, + 46C96D63773ED90E74588315 /* SentenceBoundaryClassifier.swift in Sources */, + 1AB037C6DC95769F4765B5CA /* SettingsAttentionEvaluator.swift in Sources */, A1A612C90221E0FE1195754A /* SettingsCategory.swift in Sources */, 1EB90D3D8A5BA028B86E4D9F /* SettingsContainerView.swift in Sources */, AD0FE3F0F75A40B827109589 /* SettingsCoordinator.swift in Sources */, @@ -2237,64 +2781,64 @@ 35F6F62A299713660CFB4797 /* SettingsPaneScaffold.swift in Sources */, 864EC22F38FB832BB96FF58B /* SettingsQuickLinkCard.swift in Sources */, 14611368270D611A2D5DC67E /* SettingsRowLabel.swift in Sources */, - BC27A2F336857345642A30E5 /* SettingsSearchRanker.swift in Sources */, + 0D2CAE170E355D2729FDD9C4 /* SettingsSearchRanker.swift in Sources */, B95C928082728C49D851E40D /* SettingsSearchResultRow.swift in Sources */, 753DC144B9394A35A3F395DA /* SettingsSidebarView.swift in Sources */, 6F2FE689BCA50BEAE80AC6F4 /* ShortcutsPaneView.swift in Sources */, - B909A118616C0C47AAB6039A /* SpeculativeAcceptanceContext.swift in Sources */, - AD361AA6F90A5E5F6F5005BF /* SpellingDictionaryCatalog.swift in Sources */, - D6AD25168F108DA8D60E76EF /* SpellingDictionaryPicker.swift in Sources */, - 257C2A5D299365C1D98527A8 /* SpellingLanguageResolver.swift in Sources */, + EF7B9939B2B9D792918CC471 /* SpeculativeAcceptanceContext.swift in Sources */, + 852D882AA3AF54EE73BA5306 /* SpellingDictionaryCatalog.swift in Sources */, + 089B6C0BD99F2B6C4FF9D7EC /* SpellingDictionaryPicker.swift in Sources */, + 1EB5B904DB17460D839AD57F /* SpellingLanguageResolver.swift in Sources */, 753C5A939E986B1A0FB25664 /* StaticTextRunWalkThrottle.swift in Sources */, - A0A2BD916B2CB22BAF32A62E /* StreamedGhostTextPolicy.swift in Sources */, - 258EC4BDDBD31A4509B668AE /* SuggestionAnchorCache.swift in Sources */, - 333C09921443BDDF21A9753D /* SuggestionAvailabilityEvaluator.swift in Sources */, + BC0B718DE571AC3AC182DC7E /* StreamedGhostTextPolicy.swift in Sources */, + 955D2ED21FAEB1731AE84497 /* SuggestionAnchorCache.swift in Sources */, + B5E3468CA0157FBEA53E96BD /* SuggestionAvailabilityEvaluator.swift in Sources */, EC4ED03BE4C7DD0E6319F310 /* SuggestionCoordinator+Acceptance.swift in Sources */, AC4A369EC73115E1F698934D /* SuggestionCoordinator+Input.swift in Sources */, CAFDC7A78647485F9C0AD167 /* SuggestionCoordinator+Lifecycle.swift in Sources */, F7AF84CA2F97023E1DA6296F /* SuggestionCoordinator+Prediction.swift in Sources */, BC0FDF9998CA892F4EE0E2E2 /* SuggestionCoordinator.swift in Sources */, 094DE1CA4A821D722F173F9D /* SuggestionDebugLogger.swift in Sources */, - 08A161D7775D09D116E48F6D /* SuggestionEngineModels.swift in Sources */, + 468477E87700B5D18BCD7A7A /* SuggestionEngineModels.swift in Sources */, 9973763A9F4EA4D8B4AE59EB /* SuggestionEngineRouter.swift in Sources */, - 1671E0A3C8D6DF30C5AD7F9F /* SuggestionFadeInPolicy.swift in Sources */, + 80624558CD11E3275F1B6250 /* SuggestionFadeInPolicy.swift in Sources */, CF2EADEEEF5AA63FB9B9EA8E /* SuggestionInserter.swift in Sources */, F28FB178EC507C3D42A6F893 /* SuggestionInteractionState.swift in Sources */, - 7DEFC57991AB0C5379AD9CBF /* SuggestionModels.swift in Sources */, + FC537C9D5B0D5A61E6A7C4AA /* SuggestionModels.swift in Sources */, EE2C9177CE615298595215A8 /* SuggestionOverlayPresenter.swift in Sources */, - DFF3AA49E0770DE3CFBC24C1 /* SuggestionOverlayStabilityGate.swift in Sources */, - 7EB2CB1000EA2407A2F59B4E /* SuggestionPauseModels.swift in Sources */, - 18680D0D66469A2954A50B6C /* SuggestionQualityMetricsStore.swift in Sources */, - B691B8378FD73E186A72450C /* SuggestionRequestFactory.swift in Sources */, - 532283A7651F7E66635F4281 /* SuggestionSessionReconciler.swift in Sources */, - C8CA6DACEAA83336551D4EFA /* SuggestionSettingsData.swift in Sources */, - 175C4FA56C29DEE58C2D4D7E /* SuggestionSettingsModel.swift in Sources */, - 5BA36B2042EB7D9ECFE3B92F /* SuggestionSettingsStore.swift in Sources */, - 3E28FFB8F7D91D3B39968E73 /* SuggestionSubsystemContracts.swift in Sources */, - 576B3FF30FB457EF04F9A715 /* SuggestionTextColorCodec.swift in Sources */, - 90F287ED3B23FB2AB3EF8CCE /* SuggestionTextNormalizer.swift in Sources */, + 12A6C1479CC03A148E93391F /* SuggestionOverlayStabilityGate.swift in Sources */, + 484766367056A7103131FAEA /* SuggestionPauseModels.swift in Sources */, + C3C347E9485B70C59BF5EFC8 /* SuggestionQualityMetricsStore.swift in Sources */, + 7209B91E3550735271B52E0F /* SuggestionRequestFactory.swift in Sources */, + B2F78CEF3A83C191E72214D4 /* SuggestionSessionReconciler.swift in Sources */, + FB31D4954D031D97EDBB4C73 /* SuggestionSettingsData.swift in Sources */, + BCD54829D3DD33D8B034AA73 /* SuggestionSettingsModel.swift in Sources */, + 16E1A22AA7F4827E69C7F2CE /* SuggestionSettingsStore.swift in Sources */, + 3DC75D1C5EF3AB83E3BC5750 /* SuggestionSubsystemContracts.swift in Sources */, + 7523DE160DC22FE5C26E866E /* SuggestionTextColorCodec.swift in Sources */, + A08A409B3D209BFDB7DF46EB /* SuggestionTextNormalizer.swift in Sources */, 3682DBB9DCF6C011F382A1B0 /* SuggestionWorkController.swift in Sources */, BD94A8663D79D9609461F894 /* SurfaceContextCache.swift in Sources */, - FF773F168B20502C68239967 /* SurfaceContextComposer.swift in Sources */, - 09FD133AFEFD8C08E7A9969D /* SymSpell.swift in Sources */, + C8B5E45A6F45B307C067CF61 /* SurfaceContextComposer.swift in Sources */, + C526BC1F5D44376F25E48D8F /* SymSpell.swift in Sources */, 0A08A88B773845EF9A27DF0F /* SymSpellCorrector.swift in Sources */, - FF3F7B74B561EF0807D28FD8 /* SystemMetricsStore.swift in Sources */, - 865C569A9BC95B08F440D199 /* SystemResourceSampler.swift in Sources */, + 44FC5FBFEFDADA2B9E6F5C0B /* SystemMetricsStore.swift in Sources */, + B2994532783F7199B1E84A61 /* SystemResourceSampler.swift in Sources */, BF60D99576F60321078464AD /* SystemSettingsWindowLocator.swift in Sources */, - BD77B0CFB09BF0B4EDB1B0C6 /* TagChip.swift in Sources */, - 6D57E3CDF56127422311C065 /* TerminalAppDetector.swift in Sources */, - 6A4E62EC9B7B970695F87136 /* TextDirectionDetector.swift in Sources */, - 0777169DC861BD87C4C1D729 /* TextLayoutCaretEstimator.swift in Sources */, - 91ADE463EE72D77E0D3EBBCA /* TickMarkSlider.swift in Sources */, - 1C164EC9452EFB38173D227E /* TokenCountEstimator.swift in Sources */, - 64A36D1EE1BF29AF5B58906A /* TrailingDuplicationFilter.swift in Sources */, - C178E35A9A713BD4D9943E62 /* TypoCaseTransfer.swift in Sources */, - 06B7E7339877B334B28BE2D3 /* TypoGate.swift in Sources */, + 77C40ACA872F20CFAB2BDD7F /* TagChip.swift in Sources */, + A91AB54FC7359160F08E4A04 /* TerminalAppDetector.swift in Sources */, + F2B7319CCC2FC409B4A9FD83 /* TextDirectionDetector.swift in Sources */, + 92A3ABB2C04CF95D00CED9A0 /* TextLayoutCaretEstimator.swift in Sources */, + C8434622BFCE324E7044E581 /* TickMarkSlider.swift in Sources */, + C2CD418FED8EB332C6417AF9 /* TokenCountEstimator.swift in Sources */, + E531A4B0BBFBDAED92F4B67C /* TrailingDuplicationFilter.swift in Sources */, + C0468063222C5FEA7C1CFAB3 /* TypoCaseTransfer.swift in Sources */, + A88F3C7039E8DDB71C5D6246 /* TypoGate.swift in Sources */, A8A294534897C461CA5968F3 /* UnitConversionEvaluator.swift in Sources */, 0A15FAD03A93D57372D267E0 /* VisualContextCoordinator.swift in Sources */, - F77DB394E9D6C6C482131BF9 /* VisualContextModels.swift in Sources */, - 641A9FAF3009A3E2AA06D74B /* VisualContextStartCoalescer.swift in Sources */, - 86AC625B4DD14EF807002FA2 /* WebContentFieldDetector.swift in Sources */, + 948AD3BD25C113539DF12FD7 /* VisualContextModels.swift in Sources */, + F894B9A7730EE6EEEB4C81BE /* VisualContextStartCoalescer.swift in Sources */, + 85178E15A85EB772554220C6 /* WebContentFieldDetector.swift in Sources */, 3AB45217DFC86AFC98C374D6 /* WelcomeCoordinator.swift in Sources */, 18F8E078D0CE6B3AF2C6AFFC /* WelcomeHeroDemo.swift in Sources */, 2E79F18B84807EFEAE20FA35 /* WelcomeKeybindStepView.swift in Sources */, @@ -2303,7 +2847,7 @@ 5CB91F89B0E4ACA351621C51 /* WelcomeTemplateStepView.swift in Sources */, B71A95428B4003A29685FD5D /* WelcomeView.swift in Sources */, A6DAD9EB9AE88A319EADAC7B /* WindowScreenshotService.swift in Sources */, - AD635E15149E7266BC309F34 /* WordCountFormatter.swift in Sources */, + D79C2A5DCDAFB9741E208103 /* WordCountFormatter.swift in Sources */, D2BB9B47E0E1619021931B49 /* WritingPaneView.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -2312,178 +2856,178 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 30F3F2B6D13CD583136CD787 /* AXHelper.swift in Sources */, + 59F1CF8FC41EAFA625D0DEB0 /* AXHelper.swift in Sources */, D9C51DEDF01033E276A479CE /* AXTextGeometryResolver.swift in Sources */, F31B343F9C935A5421A526DE /* AXTreeDumpWriter.swift in Sources */, 78FAE5DB691A1B71042B9D20 /* AboutPaneView.swift in Sources */, DDEDCBAA2196303455F6926A /* AcceptanceModePickerView.swift in Sources */, 0A658BF137DBD0898E40B87F /* AcknowledgementsView.swift in Sources */, - 26E0331E9E2F92FAE531BDEE /* ActivationIndicatorController.swift in Sources */, + 72672FBC57236EF484340659 /* ActivationIndicatorController.swift in Sources */, 0A3443AEE6540F11E5E6BF8F /* AppDelegate.swift in Sources */, - 61635150B8004F6CB2FACE65 /* AppSurfaceClassifier.swift in Sources */, - C4C6734678797669055988E0 /* AppUpdateManager.swift in Sources */, + 9A17FE331C20BB85B65457DD /* AppSurfaceClassifier.swift in Sources */, + 7955ED6ECA506D4EDA204BB1 /* AppUpdateManager.swift in Sources */, AB5D37BA744546F14C5566E8 /* AppearancePaneView.swift in Sources */, - 66C23A7C2FCDE0266FF425F8 /* ApplicationBundleMetadata.swift in Sources */, + 71BB14A043A34851121AF2CE /* ApplicationBundleMetadata.swift in Sources */, EF0DE5E045F328F1E912A02A /* AppsPaneView.swift in Sources */, CC5EB06A46C84F05E300A903 /* ArithmeticEvaluator.swift in Sources */, - E4382BEA8A8551612E5966B9 /* BaseCompletionPromptRenderer.swift in Sources */, - 49C91DE326A590708D76102A /* BrowserAppDetector.swift in Sources */, - 7D9C3D733CE7633FB12A35BE /* BrowserDomain.swift in Sources */, - D46BCACE71169BF8403948CE /* BundleVersion.swift in Sources */, - 3CBBC3BFAC0DC8952EE24EF7 /* BundledRuntimeLocator.swift in Sources */, + DC6C087A7C0E973967BB38D5 /* BaseCompletionPromptRenderer.swift in Sources */, + 32E0812CB9ABADB25D906C22 /* BrowserAppDetector.swift in Sources */, + 3C338732EE30A6CA45120410 /* BrowserDomain.swift in Sources */, + 8F216FA9E4DD8C0317E28286 /* BundleVersion.swift in Sources */, + F140C1894C54E0A94EAE70BC /* BundledRuntimeLocator.swift in Sources */, 77823BCFB29F63615C514927 /* CalendarAccessibilityCaptureGuard.swift in Sources */, - 533091ED7EB306D103DC94DB /* CalendarAccessibilityCapturePolicy.swift in Sources */, - 76FD91607794883F8E121450 /* CaretGeometrySelector.swift in Sources */, - 543D71217CA218426E9638BF /* CaretLinePosition.swift in Sources */, + 51F0B064F34BA3F88196C39F /* CalendarAccessibilityCapturePolicy.swift in Sources */, + 2835863F9971E5B4CCF0E816 /* CaretGeometrySelector.swift in Sources */, + 62337F21F5B6BC2363192D17 /* CaretLinePosition.swift in Sources */, D800277BE3296DE2FB8198A8 /* ChromiumAccessibilityEnabler.swift in Sources */, - 6E01052209B73D7361C12CEF /* ClipboardContentDistiller.swift in Sources */, - D2CAA59F69BCBC07DDA2B0D8 /* ClipboardContextProvider.swift in Sources */, - 157A55EB796BEB7819B90D5D /* ClipboardRelevanceFilter.swift in Sources */, - 7C94725B4837DEC9ECF1BC54 /* CompletionRenderMode.swift in Sources */, - 3985F0F2B3178DBB945B1064 /* CompletionRenderModePolicy.swift in Sources */, - 64C76BE489BD6E7D1DB94A85 /* CompletionSeamGuard.swift in Sources */, - B6346C2A6D8EB02A5BD0E49B /* CompositionInputModeClassifier.swift in Sources */, - 429CE592897D8A952F2916C3 /* ConfidenceSuppressionPolicy.swift in Sources */, + 2B4049F81730E41A1274E57F /* ClipboardContentDistiller.swift in Sources */, + 6A3C43437DEECBCF935C1F12 /* ClipboardContextProvider.swift in Sources */, + A6EC0817EEF776BAC49D9E93 /* ClipboardRelevanceFilter.swift in Sources */, + 6DFF14EEC5838BC309D03B09 /* CompletionRenderMode.swift in Sources */, + B57DBA2359D4D666E20BDDBD /* CompletionRenderModePolicy.swift in Sources */, + DB94828A33BEFD2393106F33 /* CompletionSeamGuard.swift in Sources */, + AD7940C54015532D2E8973DD /* CompositionInputModeClassifier.swift in Sources */, + 5EA4B893AE7C634C0F9734B2 /* ConfidenceSuppressionPolicy.swift in Sources */, 8B2DFC860803C0A7C4D34A36 /* ContextBuffer.swift in Sources */, FB0E2CE46002270A254E5FB3 /* ContextLivePreviewField.swift in Sources */, 2089E4C64C1BFDCDA9F2F721 /* ContextPaneView.swift in Sources */, - 210EEE9D094586286EDD89E8 /* ControlTokenMarkers.swift in Sources */, + 1415DED5362F6F343AF63123 /* ControlTokenMarkers.swift in Sources */, AA2E09FF7E430D66ECA8ECD5 /* CotabbyApp.swift in Sources */, FCC571EC239846F06007BFCA /* CotabbyAppEnvironment.swift in Sources */, - 4701AB8E93FA78B808824AAD /* CotabbyBrand.swift in Sources */, - 0D8241CD31942A25EC4E0EE4 /* CotabbyDebugOptions.swift in Sources */, + 085BB87581DFFA260A630E24 /* CotabbyBrand.swift in Sources */, + 7A31E6395C535FF017A1EFE1 /* CotabbyDebugOptions.swift in Sources */, 862146ABDADC022A3BE74E00 /* CurrencyEvaluator.swift in Sources */, - B6703DAE949C7FB034634424 /* CurrentWordExtractor.swift in Sources */, + EA353CCECBFB4D297C865447 /* CurrentWordExtractor.swift in Sources */, C56ABA04AE27A9943368035C /* CurrentWordSpellChecker.swift in Sources */, - 0431AE1DBEE36C90C7F39C19 /* CustomRulesCatalog.swift in Sources */, - 4B4DDB569CAD806F765224DE /* CustomRulesEditor.swift in Sources */, + E9B34664449F7451581C6908 /* CustomRulesCatalog.swift in Sources */, + 7AFC249A65F8E69A15F826BB /* CustomRulesEditor.swift in Sources */, DAD77998F793468D4D64B705 /* DateMacroEvaluator.swift in Sources */, - B849D68E0474CECAE809881C /* DebouncePolicy.swift in Sources */, - 586B36CD813E1432D0AB1380 /* DecodeStopPolicy.swift in Sources */, + 678B85A4F27EB5B1C965F075 /* DebouncePolicy.swift in Sources */, + CC6BE0B13CCF9B1DE0466DC2 /* DecodeStopPolicy.swift in Sources */, 261FA692D19C48E53D6999BC /* DeepGeometryWalkThrottle.swift in Sources */, - 1450746C690B3D98203B71EC /* DeviceInfo.swift in Sources */, - 1003373E13779882503C0E9D /* DisplayCoordinateConverter.swift in Sources */, - 47364583344BEA8FDC7178D8 /* DownloadFileRescuer.swift in Sources */, - E6EE3C13FA31F261CD734C69 /* DownloadOutcomeClassifier.swift in Sources */, - 7D6BB9AF72F7076A4E5EE96F /* DownloadableModelCatalogView.swift in Sources */, - 4531645066A73971EB2A5FA1 /* EmojiCatalog.swift in Sources */, - 9706D778FB549E9E7AE05F4F /* EmojiMatcher.swift in Sources */, + C63BFB26E705A6BC81B53FE5 /* DeviceInfo.swift in Sources */, + 14AAE7F7E381CE011501121D /* DisplayCoordinateConverter.swift in Sources */, + F26DD9AEAFECAAAD13F3A0A0 /* DownloadFileRescuer.swift in Sources */, + 2089CC6E33B24D5CD3DD1E57 /* DownloadOutcomeClassifier.swift in Sources */, + 5B3FAD231ECFC7539C33FC1E /* DownloadableModelCatalogView.swift in Sources */, + 11639AA485DDC2FA256F119D /* EmojiCatalog.swift in Sources */, + D4460806E35A0FABE6CBD339 /* EmojiMatcher.swift in Sources */, EA89011A4D7ADD2A716D886E /* EmojiPaneView.swift in Sources */, F496D63FD0A163D222D8C76F /* EmojiPickerController.swift in Sources */, - F067EA26AC2D007382CE520F /* EmojiPickerModels.swift in Sources */, - B6652D81162C64248AA4CF0B /* EmojiPickerPanelController.swift in Sources */, - 902B83CCB82E286FBEB9DAAD /* EmojiPickerPanelLayout.swift in Sources */, - FBEDA005ECD53CD645CD4C64 /* EmojiPickerView.swift in Sources */, - 54E515A0E75B3902E6497A71 /* EmojiPopularity.swift in Sources */, - 3112A355E61878A6A6D1FDF8 /* EmojiQueryRun.swift in Sources */, - 1059A308A31A94576FF29CF0 /* EmojiRecents.swift in Sources */, - 279F017530A86AF62EB17918 /* EmojiSynonymCatalog.swift in Sources */, - 4BFE7446533386550C839F25 /* EmojiTriggerStateMachine.swift in Sources */, - 959439B4785B996CE6D89944 /* EmojiUsageModels.swift in Sources */, - EB13A392BFA5349DD8A0DD25 /* EmojiUsageStore.swift in Sources */, - 0FF600435A2EFA9437E36B6F /* EmojiVariantResolver.swift in Sources */, + 71DA26FE8F6758CAFE6F7042 /* EmojiPickerModels.swift in Sources */, + 403C8D745B0F6133382D78F9 /* EmojiPickerPanelController.swift in Sources */, + 9F581B53E5877E81398B6B28 /* EmojiPickerPanelLayout.swift in Sources */, + F28293E59121DBD6241BA551 /* EmojiPickerView.swift in Sources */, + 32DD02FCDF43B45C757D82C7 /* EmojiPopularity.swift in Sources */, + 5DF60DD4F15079F1C1855495 /* EmojiQueryRun.swift in Sources */, + D15D53DFCDD2E41391E4AADE /* EmojiRecents.swift in Sources */, + 0A4528A5D6D83BD0D8A56854 /* EmojiSynonymCatalog.swift in Sources */, + CBFEC8E88D17BBB6FBEE79CE /* EmojiTriggerStateMachine.swift in Sources */, + E2E830C1D5FEFE5F621018FE /* EmojiUsageModels.swift in Sources */, + BDC565D0F9830B3FFDA4252C /* EmojiUsageStore.swift in Sources */, + 398D5648DD9DB75EDB5B9C08 /* EmojiVariantResolver.swift in Sources */, 5DF31F465A3A1233260BD3A4 /* EngineAndModelPaneView.swift in Sources */, - 5BE53CE921664582F593B7B0 /* FieldEdgeIconIndicatorView.swift in Sources */, + A3ABF1872257F40B14CBA3C2 /* FieldEdgeIconIndicatorView.swift in Sources */, B782EC08B7516791BDB21172 /* FieldStyleCache.swift in Sources */, - 6E49ADEB31D04DC77A47DEB0 /* FileLogHandler.swift in Sources */, - C0FE11D76BDF01A5470C554D /* FocusCapabilityFlickerGate.swift in Sources */, - CC98B842D10574C5206BEFA7 /* FocusCapabilityResolver.swift in Sources */, - 924489CEE8171F7AD8579D71 /* FocusDebugOverlayController.swift in Sources */, - 2402DC57AE2BCF6A686D30ED /* FocusModels.swift in Sources */, - BBE22CE4EF43247F8775B25D /* FocusPollBackoff.swift in Sources */, + AC716016F8E26C1711C39F6D /* FileLogHandler.swift in Sources */, + BF209645C5E3122B3C9C4381 /* FocusCapabilityFlickerGate.swift in Sources */, + 32838075CC92556D0BC28791 /* FocusCapabilityResolver.swift in Sources */, + 6CB0A928230ACD262B02CFDF /* FocusDebugOverlayController.swift in Sources */, + 4666D3B3A81CCB4CC68FC395 /* FocusModels.swift in Sources */, + 8E460A307B1ED0DA783CB247 /* FocusPollBackoff.swift in Sources */, 93524F3B861292206EE635CD /* FocusSessionScopedCache.swift in Sources */, CF4205B85D881B8176590D25 /* FocusSnapshotResolver.swift in Sources */, B00FDD3DEE0B73FF5136C91C /* FocusTracker.swift in Sources */, - A2B3F4D38BCB0FED452B2A3F /* FocusTrackingModel.swift in Sources */, + 66CF2F55FA3E565C70D35C7D /* FocusTrackingModel.swift in Sources */, D0D4C0E28F5CD99669A49414 /* FoundationModelAvailabilityService.swift in Sources */, - 36312821AEE03E3E62845958 /* FoundationModelPromptRenderer.swift in Sources */, + 53F946FF09038C1C751C6E53 /* FoundationModelPromptRenderer.swift in Sources */, 6DD1E22151571E1A22FF22F4 /* FoundationModelSuggestionEngine.swift in Sources */, 4134ADBE464D00BB748BD9AE /* GeneralPaneView.swift in Sources */, - 2784A3A838FF122678547ECA /* GhostFontMetrics.swift in Sources */, - 42D40F37086294D0E58200C5 /* GhostFontSizeStabilizer.swift in Sources */, - ED9C51B0D7056F0753AADF2D /* GhostSuggestionLayout.swift in Sources */, - F4EEE6291095B0BF2D3FBA21 /* GhostTextColorPreset.swift in Sources */, + 6D86798FFF558551D6E0333B /* GhostFontMetrics.swift in Sources */, + A8CCEC6C9693BE4378B2511E /* GhostFontSizeStabilizer.swift in Sources */, + 4AF6530E8F770BF434A2492D /* GhostSuggestionLayout.swift in Sources */, + 82043C59FF8749A70998668C /* GhostTextColorPreset.swift in Sources */, 76DFC829F2417FB048463285 /* GhostTextPreview.swift in Sources */, - D90C889A623A928F4F5FDC7B /* HardwareCapabilityProbe.swift in Sources */, + F8D9423197CE188B9D43AFD4 /* HardwareCapabilityProbe.swift in Sources */, B65B49F24F59154A7611FD22 /* HomePaneView.swift in Sources */, - 91C27021750AC03AA4A0115A /* HuggingFaceAPIClient.swift in Sources */, - EE87886AC1BFC8BB3DE09762 /* HuggingFaceModelBrowserView.swift in Sources */, - B2F7589B8D32ACF97BB642AB /* HuggingFaceModels.swift in Sources */, - A87978083EBE1AC294377F7C /* HuggingFaceSearchService.swift in Sources */, + 0B7C1A4F515F63462CCCE9EA /* HuggingFaceAPIClient.swift in Sources */, + F0DCEFED640B453A5ECEB810 /* HuggingFaceModelBrowserView.swift in Sources */, + AB1B25E213AE0A79C6993239 /* HuggingFaceModels.swift in Sources */, + 39910B6812663A61FC13D6BD /* HuggingFaceSearchService.swift in Sources */, FDBD858EDABA08FBBE0C7ED3 /* InlineCommandCoordinator.swift in Sources */, - 15D4C75B6BA901E110AC929F /* InlinePreviewPanelController.swift in Sources */, - 59CFE4B314842EDD6EDAC5C9 /* InlinePreviewView.swift in Sources */, - 5F019E5A0679FFB52F129798 /* InputModels.swift in Sources */, + E8768B22E683F35098DF4CCF /* InlinePreviewPanelController.swift in Sources */, + 24E0F4F0EC9148FB409FD112 /* InlinePreviewView.swift in Sources */, + F13B85DD24398CD22C3560C1 /* InputModels.swift in Sources */, 2DF5A3826AAB99C279EBB8DE /* InputMonitor.swift in Sources */, 6955C3A4D7AB3EEF7FA7C469 /* InputSuppressionController.swift in Sources */, - DB7BE0A914BF75654D9EA6FF /* InsertedTextAdvance.swift in Sources */, - DCABB8D2B391C7820D6CA5FF /* InsertionSafetyGate.swift in Sources */, - 9D0F4829D11BCD4DB1290410 /* InsertionStrategySelector.swift in Sources */, - F78F594F77C26C233377E71F /* KeyCodeLabels.swift in Sources */, - F8E86FA4D6CEEBFA7FB55F8D /* KeyRecorderView.swift in Sources */, + 81CB78E2291C2CF307E371D5 /* InsertedTextAdvance.swift in Sources */, + A35DF6CCC2EE6DCD99601E0E /* InsertionSafetyGate.swift in Sources */, + B5AC1F97B254ECF0CAE43009 /* InsertionStrategySelector.swift in Sources */, + 8C090BA472D90D9682F329BA /* KeyCodeLabels.swift in Sources */, + 4C140D2AE293CCA81E410481 /* KeyRecorderView.swift in Sources */, 3124AD2340D4B58AF48A22F3 /* KeyboardInputSourceMonitor.swift in Sources */, - 9C5B1ED23126B60E3BBF3A5B /* KeycapView.swift in Sources */, - 046C133967B32BBF9205EBB1 /* LLMIOFileHandler.swift in Sources */, - 0A2DDD946654076675AC0FC6 /* LanguageCatalog.swift in Sources */, - 51C069603DA16830868F1628 /* LanguageTagsEditor.swift in Sources */, + 3F8E5F610B3AD803DDA007CC /* KeycapView.swift in Sources */, + 1104ABD01283774EDF249EF0 /* LLMIOFileHandler.swift in Sources */, + 54091F97C3F64ABB737DC76B /* LanguageCatalog.swift in Sources */, + 1A3C48417F284B8DA55F4FEC /* LanguageTagsEditor.swift in Sources */, 66D9E37B12A9265D4733E72E /* LlamaRuntimeCore.swift in Sources */, 54BDF0D9C3DC7175555BD0F6 /* LlamaRuntimeManager.swift in Sources */, - 4CAFD8F3444FEDC9ACAFF529 /* LlamaRuntimeModels.swift in Sources */, + D42BBBD704B21898047615E0 /* LlamaRuntimeModels.swift in Sources */, 2197B68F1E4D0C3497DAC061 /* LlamaSuggestionEngine.swift in Sources */, DE5879DCB3223CF67C9F399A /* MacroController.swift in Sources */, 2EDFE6F33018D2D43D5CB813 /* MacroEngine.swift in Sources */, BBBD7B4628BA1160DD6B4BDB /* MacroModels.swift in Sources */, - 0B378201616831626DEC3AB6 /* MacroReferenceSheet.swift in Sources */, - 3FF6B7DE34A01C4AB7FA54E3 /* MacroTriggerStateMachine.swift in Sources */, - 5C119807B84F84B0B1B1C2D5 /* MarkerSelectionSynthesizer.swift in Sources */, - 0BEBB33EB75B59EE83C6FE44 /* MenuBarPopoverDismisser.swift in Sources */, - F08C139B246C1EC7BB435455 /* MenuBarPresentationObserver.swift in Sources */, - FFF5215EAC4A931CCD0C3142 /* MenuBarRecoveryPolicy.swift in Sources */, - 0333B3CE8F189DD1BEC4AD26 /* MenuBarSections.swift in Sources */, - AECC7289DA796B071B4FE3C0 /* MenuBarStatusLabelView.swift in Sources */, - 5E92E3C1EB41D482FC06BC52 /* MenuBarView.swift in Sources */, - 9CEBD6AF4405F1BBE0E3D16C /* MidWordContinuationPolicy.swift in Sources */, - 31515DDD173535C4AC777853 /* MirrorOverlayLayout.swift in Sources */, - 2F227738D7834B1A7A81D1D6 /* ModelDownloadManager.swift in Sources */, - 317883210D1D1D5CD654E562 /* ModelFileValidator.swift in Sources */, - 93EBF0366891222B7DD6C38D /* OCRTextHygiene.swift in Sources */, + 15F3DFEF14B748F5083A2517 /* MacroReferenceSheet.swift in Sources */, + 1ED8785EB680045FF13270B4 /* MacroTriggerStateMachine.swift in Sources */, + 61932DE224F103A22C8E4EF7 /* MarkerSelectionSynthesizer.swift in Sources */, + 24A2D498222EB81B64EC36C9 /* MenuBarPopoverDismisser.swift in Sources */, + E846FC1E29526242117F126F /* MenuBarPresentationObserver.swift in Sources */, + 26EA96EB13B94A68276FA15E /* MenuBarRecoveryPolicy.swift in Sources */, + 832FB4EEA935CA4D67F4478D /* MenuBarSections.swift in Sources */, + C52E6F9FECD2FB173386F836 /* MenuBarStatusLabelView.swift in Sources */, + 7807D6217618D982CD301875 /* MenuBarView.swift in Sources */, + 825FD379841F0DAABE247C2C /* MidWordContinuationPolicy.swift in Sources */, + 3A35344542DD0AB857C56115 /* MirrorOverlayLayout.swift in Sources */, + 0CF057842A15F79FB3C69462 /* ModelDownloadManager.swift in Sources */, + 9698DED033367C1E6F48D43E /* ModelFileValidator.swift in Sources */, + 0C0087684909C4A4F067BA9B /* OCRTextHygiene.swift in Sources */, 62DBCF429B7F464A6B467725 /* OnboardingFeatureShowcase.swift in Sources */, - 23377D6411E1E5F09056285D /* OnboardingFlowSteps.swift in Sources */, + 920DE073BEE1DC78B73108D0 /* OnboardingFlowSteps.swift in Sources */, 9301B309462E4CF7F554578F /* OnboardingStyle.swift in Sources */, - FC6B0524B774F20C18BD6889 /* OnboardingTemplate.swift in Sources */, - 64DA031AEAC20AC6C852A24A /* OnboardingTemplateFeatureList.swift in Sources */, - DF8794793110A8ED234CBA96 /* OnboardingTemplateRecommender.swift in Sources */, + 039BC6D14C80C15841FE8019 /* OnboardingTemplate.swift in Sources */, + 07E54011F501E14AC15DE2B7 /* OnboardingTemplateFeatureList.swift in Sources */, + 226C258F185E2E71518F4ABB /* OnboardingTemplateRecommender.swift in Sources */, DA9360725086404C953BCE5A /* OpenAICompatibleAPIClient.swift in Sources */, 972755DA269C9A5C34D64FBC /* OpenAICompatibleCredentialStore.swift in Sources */, - 1AAB8B5A80EBB63948674DE8 /* OpenAICompatibleEndpointModels.swift in Sources */, + FE0922970524121DEC4EF2D9 /* OpenAICompatibleEndpointModels.swift in Sources */, FDA8E2A77C8D65C52C72159F /* OpenAICompatibleSuggestionEngine.swift in Sources */, - 0DDC0CFF5558A8F4355836B2 /* OverlayController.swift in Sources */, - A67B3F97DAEBEC7CA9B1215E /* PerDomainDisableSettings.swift in Sources */, - 0E4009CFC86608F055909967 /* PerformanceMetricsStore.swift in Sources */, + A7F8B6C13DD0BA5304BCDFD2 /* OverlayController.swift in Sources */, + 430EB30535A955C3904C2AD9 /* PerDomainDisableSettings.swift in Sources */, + DBB48F0E93B03E5137B15ABD /* PerformanceMetricsStore.swift in Sources */, 60636D92D12FED132250D8D2 /* PerformancePaneView.swift in Sources */, 0187EAA1D37B92DD5B264016 /* PermissionDragSourceView.swift in Sources */, 4B54ACE1255873955414CD06 /* PermissionGuidanceController.swift in Sources */, E17CAA453B1F534D284F0D89 /* PermissionHostApp.swift in Sources */, 744B06C2488156B178675615 /* PermissionManager.swift in Sources */, - CCC83DC5AE51C17F153D5A6A /* PermissionModels.swift in Sources */, - 6106B16C0DBA94EBF838D93E /* PermissionOverlayTracker.swift in Sources */, + BC9C2F30AF33F820256E4FBB /* PermissionModels.swift in Sources */, + 5A3EA58C6CE36AD0A7104AEF /* PermissionOverlayTracker.swift in Sources */, 61EC9D635D416115E7C96E0F /* PermissionOverlayWindowController.swift in Sources */, 610650A14AC5E8EDDC81B4E9 /* PermissionReminderView.swift in Sources */, 39571AB31481959CD5C223AE /* PermissionsPaneView.swift in Sources */, - 2DA8DFFE8DF9B6AD71E28417 /* PopupChrome.swift in Sources */, + 986C1339A8FBA3569FC129D6 /* PopupChrome.swift in Sources */, 50E1247BE6A952AB1B12C444 /* PowerSourceMonitor.swift in Sources */, - 98E2E14A069384C1088CDB44 /* PromptContextSanitizer.swift in Sources */, - 3C561CD717064F9250200667 /* PromptSectionBudget.swift in Sources */, + 32A5095C89B598C9A959F435 /* PromptContextSanitizer.swift in Sources */, + 21187878C7390AD639717B8F /* PromptSectionBudget.swift in Sources */, 25750F599635ED38E61517A3 /* RandomMacroEvaluator.swift in Sources */, - A5A6CE0EF01CA6A9AFA7A400 /* RequestID.swift in Sources */, - 82D4ADEAF05337ABDE4C586C /* RuntimeBootstrapModel.swift in Sources */, - 2C6159231472A849F15BD0AE /* ScreenFrameReader.swift in Sources */, + EA7D6ECD050AC621B02E35F2 /* RequestID.swift in Sources */, + 0144ECDA06A8BDEFBB8DACE3 /* RuntimeBootstrapModel.swift in Sources */, + 0A2D9EC761FDAEF15F547C4E /* ScreenFrameReader.swift in Sources */, 0C06CAD62975E87B2C852191 /* ScreenTextExtractor.swift in Sources */, DD7FA343F1C21C4569F6D181 /* ScreenshotContextGenerator.swift in Sources */, - 9F6F88ED74ECA3E23A8E3CC0 /* SecureFieldDetector.swift in Sources */, - 2CCF87FD35BF2C438EEA606D /* SelfCaptureGate.swift in Sources */, - 9ADFFF634912F638D079E1C7 /* SentenceBoundaryClassifier.swift in Sources */, - 84A4CA05AF6885AE4FA4C13A /* SettingsAttentionEvaluator.swift in Sources */, + EE73E5D254C575F692D4D3B4 /* SecureFieldDetector.swift in Sources */, + BC973BC6939231E0DB1836F1 /* SelfCaptureGate.swift in Sources */, + 35F125C5460AF8423BF737F4 /* SentenceBoundaryClassifier.swift in Sources */, + CC615916E478E98D403F5714 /* SettingsAttentionEvaluator.swift in Sources */, 907A0BF56C3BB0CBAF2649AB /* SettingsCategory.swift in Sources */, 2E3DEB7E89D0146274596F2E /* SettingsContainerView.swift in Sources */, 644EEF959D07D54CC779BBF6 /* SettingsCoordinator.swift in Sources */, @@ -2493,64 +3037,64 @@ 4B93D26BACEEA932E92B1A19 /* SettingsPaneScaffold.swift in Sources */, 60773158D86A0D2F0EB3FF34 /* SettingsQuickLinkCard.swift in Sources */, 078FDE669437D756678E9AB7 /* SettingsRowLabel.swift in Sources */, - D3BC4EA192B234EB22361186 /* SettingsSearchRanker.swift in Sources */, + 6952E5B030740443C684F263 /* SettingsSearchRanker.swift in Sources */, E98161E9592F825F9CB7D32D /* SettingsSearchResultRow.swift in Sources */, 27D4F5CACADE171F142178B4 /* SettingsSidebarView.swift in Sources */, 12995E5DDB11E3395E6AF82F /* ShortcutsPaneView.swift in Sources */, - 4B2C52C714D04D17ACB70B99 /* SpeculativeAcceptanceContext.swift in Sources */, - 2E972FB7E0CF14EE03AA55A3 /* SpellingDictionaryCatalog.swift in Sources */, - 94F037A3F9D7CE52CC70CA0F /* SpellingDictionaryPicker.swift in Sources */, - 1BDEC75125ADFCD67F3C406D /* SpellingLanguageResolver.swift in Sources */, + A1A97C45B0DA031BD2844D68 /* SpeculativeAcceptanceContext.swift in Sources */, + 2AF12199E0FD9B802BF35A10 /* SpellingDictionaryCatalog.swift in Sources */, + 63AEBAB1CDA1DEDB80F97F3F /* SpellingDictionaryPicker.swift in Sources */, + 5F3E299F27F63F8F9D9FBABF /* SpellingLanguageResolver.swift in Sources */, B50EDCA5C4C5FE4FC548AA74 /* StaticTextRunWalkThrottle.swift in Sources */, - C6925440737F37F537622F35 /* StreamedGhostTextPolicy.swift in Sources */, - BC33B7F6EF791AD304646655 /* SuggestionAnchorCache.swift in Sources */, - 4F369F5284DDCEABF082E59B /* SuggestionAvailabilityEvaluator.swift in Sources */, + 06358FF43FF44F773CCC6881 /* StreamedGhostTextPolicy.swift in Sources */, + DDD1B7DA589286FE6D01DACF /* SuggestionAnchorCache.swift in Sources */, + 1F12149EA676E69B75BDBFDA /* SuggestionAvailabilityEvaluator.swift in Sources */, A0657CE0488F69F0BD559CBC /* SuggestionCoordinator+Acceptance.swift in Sources */, D2F1DD215989BF32675308C2 /* SuggestionCoordinator+Input.swift in Sources */, B0B115C6EBAC37FF6115B4BE /* SuggestionCoordinator+Lifecycle.swift in Sources */, 7E99F5676A1D1DF7EA7D7702 /* SuggestionCoordinator+Prediction.swift in Sources */, 909EBE545CE644C6C57F1B5D /* SuggestionCoordinator.swift in Sources */, 3C23336EE6F6559857DE92EE /* SuggestionDebugLogger.swift in Sources */, - A93A741C8C3973687D28F0B6 /* SuggestionEngineModels.swift in Sources */, + CDDEF3C29AEACA986034C01C /* SuggestionEngineModels.swift in Sources */, 52518CF0760DFEE9AF7C786C /* SuggestionEngineRouter.swift in Sources */, - 614F45951D2BD56406E1F95E /* SuggestionFadeInPolicy.swift in Sources */, + DDC49DC77FDC6395581700C2 /* SuggestionFadeInPolicy.swift in Sources */, 2FC40D4BFDD05C2401D7A5E9 /* SuggestionInserter.swift in Sources */, A982E243A4D8BC1BF7504B3E /* SuggestionInteractionState.swift in Sources */, - 0AF568AB234033BA2DE4CAA7 /* SuggestionModels.swift in Sources */, + B8C71E65399B88D5543644DE /* SuggestionModels.swift in Sources */, 02DA43985CDAE6859014F14F /* SuggestionOverlayPresenter.swift in Sources */, - 0F3267956257401F39386773 /* SuggestionOverlayStabilityGate.swift in Sources */, - 1DF1A9DFF50E9219875E24FF /* SuggestionPauseModels.swift in Sources */, - 5687320132AD97B4086260DF /* SuggestionQualityMetricsStore.swift in Sources */, - 46F341472191BC451B6BF6B5 /* SuggestionRequestFactory.swift in Sources */, - CA5B2D226FBAA5419E78F14F /* SuggestionSessionReconciler.swift in Sources */, - 7EEE6AEBFBD419FFE7C544BA /* SuggestionSettingsData.swift in Sources */, - 32A2915FAE21CD9CE818A9D9 /* SuggestionSettingsModel.swift in Sources */, - 793BA44D503D61B44D133716 /* SuggestionSettingsStore.swift in Sources */, - C2C958D6E5F5FE1CCC414BCE /* SuggestionSubsystemContracts.swift in Sources */, - 53FB56A095BCF0389DAC0A56 /* SuggestionTextColorCodec.swift in Sources */, - BB6325CA50F97B18B9725918 /* SuggestionTextNormalizer.swift in Sources */, + F3CAFFDA47FAF0B4FADFC699 /* SuggestionOverlayStabilityGate.swift in Sources */, + AFEB6885A317284467CD44ED /* SuggestionPauseModels.swift in Sources */, + 980E02175E2D83D4B60FE519 /* SuggestionQualityMetricsStore.swift in Sources */, + 64CC33F721B377F4F0547685 /* SuggestionRequestFactory.swift in Sources */, + 96338F5360D3E1435DCCF087 /* SuggestionSessionReconciler.swift in Sources */, + E3CF6ADB3DFAE5AB2F23935B /* SuggestionSettingsData.swift in Sources */, + 5E43AD2C53EA1813A6A138E3 /* SuggestionSettingsModel.swift in Sources */, + 96CC39E6D6DF3F27ABA8019B /* SuggestionSettingsStore.swift in Sources */, + 6CCFAA1D86C4E4DC7E3DB8A3 /* SuggestionSubsystemContracts.swift in Sources */, + 2EA1350B599695F472A8F06E /* SuggestionTextColorCodec.swift in Sources */, + 285B3026E0D911FFFC306696 /* SuggestionTextNormalizer.swift in Sources */, E313639E71AE1374D2B9A956 /* SuggestionWorkController.swift in Sources */, 30D4728580451C7D3BDF42E3 /* SurfaceContextCache.swift in Sources */, - A736C52C0D280A35946E37A3 /* SurfaceContextComposer.swift in Sources */, - 1DF03DC12D45C22753F683BC /* SymSpell.swift in Sources */, + ED5E57512F532DDA48DF3360 /* SurfaceContextComposer.swift in Sources */, + 11C548C2B50D9B27BD1B7293 /* SymSpell.swift in Sources */, D2B271E0FAE4F65FC2287930 /* SymSpellCorrector.swift in Sources */, - 2D93881A6AE7DA50698600A3 /* SystemMetricsStore.swift in Sources */, - BEF746D51C69FE426376C89A /* SystemResourceSampler.swift in Sources */, + 6FD683476D81B6FD7A4AFBA0 /* SystemMetricsStore.swift in Sources */, + 702A007D1950AC98DA2090BB /* SystemResourceSampler.swift in Sources */, 258EAFB0292290C88520E915 /* SystemSettingsWindowLocator.swift in Sources */, - 90CD3F7238E223DEBA2B4D92 /* TagChip.swift in Sources */, - AB9C9C001F97F9D14F8B192A /* TerminalAppDetector.swift in Sources */, - 96782E57CA26A16409368B69 /* TextDirectionDetector.swift in Sources */, - AA0B5EC6BC922E143971F8AD /* TextLayoutCaretEstimator.swift in Sources */, - 6014B31E2570EFFE45557E33 /* TickMarkSlider.swift in Sources */, - DC84D6A6A2F9A1060CD20ABB /* TokenCountEstimator.swift in Sources */, - D3B43622E5A41B11E7AF527E /* TrailingDuplicationFilter.swift in Sources */, - B709B362B786AA6ED548C673 /* TypoCaseTransfer.swift in Sources */, - E311B80968761E90FBA19A8A /* TypoGate.swift in Sources */, + 1816D3D625F561209590D45D /* TagChip.swift in Sources */, + 85AF90012B06D69D0DBF2537 /* TerminalAppDetector.swift in Sources */, + BD03F84A6D6C68005A8FC682 /* TextDirectionDetector.swift in Sources */, + 3312972B65F1B98447C59BD6 /* TextLayoutCaretEstimator.swift in Sources */, + 3799AE2D7E8DFA464E045CA7 /* TickMarkSlider.swift in Sources */, + 3767E8C175376A784D5B3E80 /* TokenCountEstimator.swift in Sources */, + 9C05D74099B0D309F01A3CEF /* TrailingDuplicationFilter.swift in Sources */, + CF391BC4A3C80C41048D64D1 /* TypoCaseTransfer.swift in Sources */, + 48A2F371756723299597F5A1 /* TypoGate.swift in Sources */, B6815BBBC91809A6EAA914CB /* UnitConversionEvaluator.swift in Sources */, E9E4CC657771DF9F4C56183C /* VisualContextCoordinator.swift in Sources */, - 4190F8A76196B16ED94D0A55 /* VisualContextModels.swift in Sources */, - 19CB55B62977376E9AE8D428 /* VisualContextStartCoalescer.swift in Sources */, - D75626719A38F535D475C675 /* WebContentFieldDetector.swift in Sources */, + 07639673B5A52D2075A9ED57 /* VisualContextModels.swift in Sources */, + C8A3B724BB54A1209583B78B /* VisualContextStartCoalescer.swift in Sources */, + 66A697ACC03A8A7338AB2204 /* WebContentFieldDetector.swift in Sources */, 4AC255BE2D0CCC67B8882C7A /* WelcomeCoordinator.swift in Sources */, E74FC77608C8000C5E81B28E /* WelcomeHeroDemo.swift in Sources */, 437F391EBF32AA088A89F710 /* WelcomeKeybindStepView.swift in Sources */, @@ -2559,7 +3103,7 @@ 6A0AC8C06FAF0F52493A6EE5 /* WelcomeTemplateStepView.swift in Sources */, DD12A23468C18D37D4C64D88 /* WelcomeView.swift in Sources */, 1F8CC88AFFE67C08944CF506 /* WindowScreenshotService.swift in Sources */, - 22DF59FD6F3B83B092A6F5ED /* WordCountFormatter.swift in Sources */, + F22FAA3449506ABBACB12BA0 /* WordCountFormatter.swift in Sources */, E51FA12B690428CA431328FC /* WritingPaneView.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -2568,161 +3112,161 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 8369356B8E7E7E61787E828D /* AXHelperTests.swift in Sources */, - 6D0E79CF3C1A8CE53046FCE5 /* AXTextGeometryResolverTests.swift in Sources */, - 55E841977534CBFD8B80E95F /* AXTreeDumpWriterTests.swift in Sources */, - 18382D1919D90E3C1EE143C2 /* AppSurfaceClassifierTests.swift in Sources */, - A36481222BB5B2A67349D389 /* ApplicationBundleMetadataTests.swift in Sources */, - 4D583CB3DA253FB795EE54F9 /* ArithmeticEvaluatorTests.swift in Sources */, - F4A01E4F12F0183449BCCBB9 /* BaseCompletionPromptRendererTests.swift in Sources */, - 5C0D3B6012C7412001BE3773 /* BrowserAppDetectorTests.swift in Sources */, - C3B6C8B9DE20A71C65D390DA /* BrowserDomainTests.swift in Sources */, - 58AC3193D846FDE88513377D /* BundledRuntimeLocatorTests.swift in Sources */, - F279A4064B24FCF714A8CAD4 /* CalendarAccessibilityCapturePolicyTests.swift in Sources */, - 62FADA407797998742502DD9 /* CaretLinePositionTests.swift in Sources */, - 418055EF945C17BAEFAB89ED /* CaretRunPlacementTests.swift in Sources */, - 8865B95FE84198D70390DF80 /* ClipboardContentDistillerTests.swift in Sources */, - BFCA7FAFDAEBF586AB615567 /* ClipboardRelevanceFilterTests.swift in Sources */, - 25F91CEF38400FD1ADB6B1AF /* CompletionRenderModePolicyTests.swift in Sources */, - FC51AE2C3F21263B11CA06B6 /* CompletionSeamGuardTests.swift in Sources */, - 2A53558D66C96E963B23CA11 /* CompositionInputModeClassifierTests.swift in Sources */, - 91D8189EFCD1BA992EA6F038 /* ConfidenceSuppressionPolicyTests.swift in Sources */, - 5009AF59DE8D40A45C0A5C2F /* ControlTokenMarkersTests.swift in Sources */, - D21EBD25BCB37E69B633BC00 /* CotabbyDebugOptionsTests.swift in Sources */, - 5E10EFC426217CB7218A5847 /* CotabbyTestFixtures.swift in Sources */, - 64599CD334AAD79266224689 /* CurrentWordExtractorTests.swift in Sources */, - 91D1F16B8C5DA281D4B7F699 /* CustomRulesTests.swift in Sources */, - 4CCF29A7EA1B7D37841C135D /* DateMacroEvaluatorTests.swift in Sources */, - 6C59B369AAC6948C53E41654 /* DebouncePolicyTests.swift in Sources */, - 79B0AEA0D2FC6A865E9303F9 /* DecodeStopPolicyTests.swift in Sources */, - 664A5D62A723EB204ADEF2F9 /* DeepGeometryWalkThrottleTests.swift in Sources */, - 43DED8ABEFF9894ED54097A9 /* DeviceInfoTests.swift in Sources */, - 56611BA0087710277140E9E6 /* DisplayCoordinateConverterTests.swift in Sources */, - E994FE418A961FB234D9057A /* DownloadFileRescuerTests.swift in Sources */, - FAC7FFC78BEBF62D5B7A2EFB /* DownloadOutcomeClassifierTests.swift in Sources */, - 96498E097A5899AFC9F0C853 /* EmojiCatalogMatcherTests.swift in Sources */, - FE424DD09040640CC2400FBE /* EmojiCatalogTests.swift in Sources */, - 0B6E28D1CBDF657F71548A3C /* EmojiPickerControllerTests.swift in Sources */, - 74E0082BA8D7E80C2E038EAA /* EmojiPickerModelsTests.swift in Sources */, - D46A0DB70B07F487431F48F6 /* EmojiPickerPanelLayoutTests.swift in Sources */, - 14C55DC5096F003BD3D2917D /* EmojiPopularityTests.swift in Sources */, - 0D15CBF45EB1DB725B9F1A6A /* EmojiQueryRunTests.swift in Sources */, - 814E348C663B697537594F0C /* EmojiRecentsTests.swift in Sources */, - 3B5F96F9CC6D4D81B470DB2C /* EmojiSynonymCatalogTests.swift in Sources */, - ED0843752B297D7E9DB2C468 /* EmojiTriggerStateMachineTests.swift in Sources */, - 26C5604C3CEF43FC755FD24E /* EmojiUsageStoreTests.swift in Sources */, - C9B815652CED38966C53A5E8 /* EmojiVariantResolverTests.swift in Sources */, - 63054CBDCA87560130BF5ADC /* ExtendedContextTests.swift in Sources */, - 773808D3D88440F0836D0072 /* FileLogHandlerTests.swift in Sources */, - 78A8713A0E5B4C89E2D715BC /* FocusCapabilityFlickerGateTests.swift in Sources */, - C71B594433F3B411CAE5DE7E /* FocusCapabilityResolverTests.swift in Sources */, - AD39F3B11BC4ADE6C6E0A828 /* FocusModelsTests.swift in Sources */, - A147C5EC3F2214A670F7556E /* FocusPollBackoffTests.swift in Sources */, - 642287C5FA3930D61D4112E7 /* FocusSessionScopedCacheTests.swift in Sources */, - B2BDCFF0824EE41FC1C0451A /* FocusSnapshotResolverLiveTests.swift in Sources */, - 156E6AB3D24134EEC29FDB93 /* FocusSnapshotResolverSelectionTests.swift in Sources */, - F41AB06FD117487D7136E896 /* FocusTrackingModelTests.swift in Sources */, - F4BE7822C56F10CAC623B0C2 /* FoundationModelAvailabilityServiceTests.swift in Sources */, - 31DCCE980B6708401256D4D1 /* FoundationModelDriftEvalTests.swift in Sources */, - 1D424A103EF7BFE45518F45E /* GhostFontMetricsTests.swift in Sources */, - 2EE05B312C990104BE934772 /* GhostFontSizeStabilizerTests.swift in Sources */, - A0BB87E3665EF6C209034798 /* GhostSuggestionLayoutTests.swift in Sources */, - 7A5DBBC32ABEF9E7ED147577 /* HardwareCapabilityProbeTests.swift in Sources */, - 663D37E35292F38666D807A7 /* HuggingFaceModelsTests.swift in Sources */, - 07D046D406411ED85AC5758A /* InputMonitorTests.swift in Sources */, - 0FCBF2250722780E46A92EE6 /* InputSuppressionControllerTests.swift in Sources */, - 7324B18578C646B1ADFF0C3F /* InsertedTextAdvanceTests.swift in Sources */, - 83EC3543DC45B1601F119BF9 /* InsertionSafetyGateTests.swift in Sources */, - FC255241A3B34A5717F09B36 /* InsertionStrategySelectorTests.swift in Sources */, - F66F0D982EBAF5A3E99C5342 /* KeyCodeLabelsTests.swift in Sources */, - 475FB7450EEC3C1B16E66CC4 /* LLMIOFileHandlerTests.swift in Sources */, - E912D4617AE1376061DF1F00 /* LanguageSupportTests.swift in Sources */, - C0F757D74758B76DA2962BC5 /* LlamaDecodeGateDefaultsTests.swift in Sources */, - 3D82280EFF7F7E9F3FFF45ED /* LlamaEvalScoring.swift in Sources */, - 3D56E9B3AA378400E2C081E3 /* LlamaEvalScoringTests.swift in Sources */, - E38801433B99E65BD7E45A0E /* LlamaPromptCacheHintTrackerTests.swift in Sources */, - BE3CB85508055D159C35020A /* LlamaSuggestionEngineCancellationTests.swift in Sources */, - E64AE96DF2A80A368FDE522D /* LlamaSuggestionEnginePrewarmTests.swift in Sources */, - 3F87586426B5EF16B41CE62F /* LlamaSuggestionEngineStreamingTests.swift in Sources */, - 8A47597B097058832453C2FF /* LlamaSuggestionEvalTests.swift in Sources */, - 8429B116328C392DCA018D95 /* MacroEngineTests.swift in Sources */, - 3F8CBCBCC45E377DF9ADB216 /* MacroTriggerStateMachineTests.swift in Sources */, - 87806DE08881D11F2608A13D /* MarkerSelectionSynthesizerTests.swift in Sources */, - CE20BDEA713D21200B8822C7 /* MenuBarRecoveryPolicyTests.swift in Sources */, - 7C36DBA762E19C8C31676D44 /* MidWordContinuationPolicyTests.swift in Sources */, - 14D77F0B8A195AC2FA8D24A9 /* MirrorOverlayLayoutTests.swift in Sources */, - 25D4FC8D191A50F63E6391F9 /* ModelAndPresentationValueTests.swift in Sources */, - 65478B0DABF5460C32D4C458 /* ModelFileValidatorTests.swift in Sources */, - 3F5630CFB7BA40B900E832A1 /* OCRTextHygieneTests.swift in Sources */, - 67F9E4AD54E17A17FC825D74 /* OllamaPreloadWorkControllerTests.swift in Sources */, - 8D9F33F49E880956D0571574 /* OnboardingFlowStepTests.swift in Sources */, - DA23422A2CF77CFD3B1283C8 /* OnboardingTemplateFeatureListTests.swift in Sources */, - D648DD70AD847F67B77CE052 /* OnboardingTemplateRecommenderTests.swift in Sources */, - 0160F9D9929465E6B6A3385F /* OnboardingTemplateTests.swift in Sources */, - 122D005AEDDD4D3EADEB0B53 /* OpenAICompatibleAPIClientTests.swift in Sources */, - C9426ADFCA2EC1D11D841A2A /* PerDomainDisableSettingsTests.swift in Sources */, - 8B26F7B26358438D6EB88C2E /* PerformanceMetricsStoreTests.swift in Sources */, - 15FA56CEF6FB5FF54C2FBA6F /* PermissionAndContextModelTests.swift in Sources */, - 4F38CE1C2602CF4F41323032 /* PermissionOverlayTrackerTests.swift in Sources */, - 934885ACC2DEA20B27F10948 /* PromptContextSanitizerTests.swift in Sources */, - 3CF1A4E39F24917DF0470A7D /* PromptPolicyTests.swift in Sources */, - 7EB20783E0D36715D1230A5C /* PromptSectionBudgetTests.swift in Sources */, - 1C46642846D8FD1475AA5CCF /* RequestIDTests.swift in Sources */, - AD6E005ABE34AB7EBD92A30D /* RuntimeBootstrapModelTests.swift in Sources */, - A81E3481B0067E9D6F9D1325 /* ScreenTextExtractorTests.swift in Sources */, - 1B3FFCB9A979F49BF86EAAD4 /* ScreenshotContextGeneratorTests.swift in Sources */, - 4FC52FB28AFC013F000D8FF9 /* SecureFieldDetectorTests.swift in Sources */, - AF26E77871200BB1FAAEBE79 /* SelfCaptureGateTests.swift in Sources */, - 1D1C6FF0B8F50AC14A1000F4 /* SentenceBoundaryClassifierTests.swift in Sources */, - C618C5595DA9C57C806A3E03 /* SettingsAttentionEvaluatorTests.swift in Sources */, - F71FD79FAC8B59C1CBD9E2E0 /* SettingsIndexTests.swift in Sources */, - F0556D369F809445D0AC4E9C /* SettingsSearchRankerTests.swift in Sources */, - 8441299082E6B68F7F88911B /* ShortcutConflictTests.swift in Sources */, - 14B2492F1208888C0C3F8804 /* SpeculativeAcceptanceContextTests.swift in Sources */, - 303652F15C0FE55595669D81 /* SpellingDictionaryResourceTests.swift in Sources */, - 66D0D9F605AF462F569A5CFD /* SpellingLanguageResolverTests.swift in Sources */, - 96C3128BCB17A05A7C7DEFF7 /* StaticTextRunWalkThrottleTests.swift in Sources */, - 9E4AED02831829A108A1AA85 /* StreamedGhostTextPolicyTests.swift in Sources */, - B6A84E11643F88D88B602F3D /* SuggestionAnchorCacheTests.swift in Sources */, - 88BCD795A14E1C9308F7BB31 /* SuggestionAvailabilityEvaluatorTests.swift in Sources */, - EB9B5E5F7326AB72E0E44C70 /* SuggestionCaretLayoutRepairTests.swift in Sources */, - 5B404450B412A6102F514250 /* SuggestionCoordinatorAcceptanceTests.swift in Sources */, - 0933A62F9B9AECEEA95BBA29 /* SuggestionCoordinatorInputTests.swift in Sources */, - 5A6C6B59C3FC821813A7C3E9 /* SuggestionCoordinatorLifecycleTests.swift in Sources */, - 36651BFF4917A1E80C667B64 /* SuggestionCoordinatorPredictionTests.swift in Sources */, - B816C6191738AB616F2E8D2D /* SuggestionCoordinatorTestSupport.swift in Sources */, - 9938DE59D9E05BC51A5BA5B8 /* SuggestionDebugLoggerTests.swift in Sources */, - 19CA1BF8B508E0E219EF4485 /* SuggestionEngineModelsTests.swift in Sources */, - 449218D0646AB3745B7E4F30 /* SuggestionEngineRouterTests.swift in Sources */, - 8A88C3A598E65E4127FEEC3D /* SuggestionFadeInPolicyTests.swift in Sources */, - 5CED06E89FBEF557DCD6C684 /* SuggestionFocusFreshnessTests.swift in Sources */, - 6CBEF02FCDFCF406E378C27C /* SuggestionInteractionStateTests.swift in Sources */, - 4C6D8ED0A7B45D2EADF06DA5 /* SuggestionOverlayStabilityGateTests.swift in Sources */, - 4E49547F22DC8663171E3160 /* SuggestionPauseModelsTests.swift in Sources */, - 695E431AC3FF79769E2C5EEF /* SuggestionQualityMetricsStoreTests.swift in Sources */, - B93AB7E845086F6FBB068369 /* SuggestionRequestFactoryTests.swift in Sources */, - 7E9413CE7C999C4612348248 /* SuggestionSessionReconcilerTests.swift in Sources */, - 7C6D42EAD04C8144538B132A /* SuggestionSettingsModelTests.swift in Sources */, - C7E1F0365602914CAC03F342 /* SuggestionSettingsStoreTests.swift in Sources */, - CB65A79F164269991FABC32E /* SuggestionStateHelperTests.swift in Sources */, - 7AEF46950EF5E2EBCFE4BBD3 /* SuggestionTextColorCodecTests.swift in Sources */, - 0C98ECB5BCEBA72C693AC1C9 /* SuggestionTextNormalizerTests.swift in Sources */, - C423CCD7198ECE27DF260268 /* SurfaceContextComposerTests.swift in Sources */, - 000EBFCBA8CE49537690613B /* SymSpellCorrectorTests.swift in Sources */, - A3AFE27EDE956ADC04C91C94 /* SymSpellTests.swift in Sources */, - EF5BAB96DDADABB86F9E02D9 /* SyntheticReplacePlannerTests.swift in Sources */, - 856082F4732206A3761816DC /* SystemMetricsStoreTests.swift in Sources */, - C6A112B51525F988EA46F725 /* SystemResourceSamplerTests.swift in Sources */, - DE236C9285635C686D66A2F6 /* TerminalAppDetectorTests.swift in Sources */, - 5A441797D71A880A7482077D /* TextDirectionDetectorTests.swift in Sources */, - 2B1F6B9BD4DEBD7DA4DD9855 /* TextLayoutCaretEstimatorTests.swift in Sources */, - A26E14A6E73036222419C424 /* TokenCountEstimatorTests.swift in Sources */, - DB1310FF3576ACA6472C4DB1 /* TrailingDuplicationFilterTests.swift in Sources */, - 5C6B59C2E56A3C4260591095 /* TypoCaseTransferTests.swift in Sources */, - BE688EC1957B4AE004063EFE /* TypoGateTests.swift in Sources */, - D5CAF3B590E5EC2AFC72E57A /* VisualContextStartCoalescerTests.swift in Sources */, - E5CB34ED76BAE87E8A858112 /* WebContentFieldDetectorTests.swift in Sources */, - 6AE0B46FB52D189D94E1F79A /* WordCountFormatterTests.swift in Sources */, + CE218D30F69D215095E68456 /* AXHelperTests.swift in Sources */, + F313FE220ED8BAC413F66DCE /* AXTextGeometryResolverTests.swift in Sources */, + AC9860EFB16104DFC2358C4F /* AXTreeDumpWriterTests.swift in Sources */, + 6DFEE8E6B6D3D47215E67781 /* AppSurfaceClassifierTests.swift in Sources */, + C587EFD760A803711CD9C57F /* ApplicationBundleMetadataTests.swift in Sources */, + 77957609D3B06ED7960859A4 /* ArithmeticEvaluatorTests.swift in Sources */, + 02A837BD3861FD72B3E99D0F /* BaseCompletionPromptRendererTests.swift in Sources */, + EDF9B7C3E86A8CD6E0A2A9D5 /* BrowserAppDetectorTests.swift in Sources */, + 01A059CD42ADA031B4EB2D8F /* BrowserDomainTests.swift in Sources */, + 85FCDC35AC29F4A89E30F559 /* BundledRuntimeLocatorTests.swift in Sources */, + 715BD5081873EF5FF070D3B0 /* CalendarAccessibilityCapturePolicyTests.swift in Sources */, + 5F917D518007BAB8F81B6222 /* CaretLinePositionTests.swift in Sources */, + 997AD1EDD598F4239EA7A2A1 /* CaretRunPlacementTests.swift in Sources */, + 306836875282844C05C35B2C /* ClipboardContentDistillerTests.swift in Sources */, + 853C19A148DE6D5A59AA2C87 /* ClipboardRelevanceFilterTests.swift in Sources */, + 253F6955921E8EA38A1D022B /* CompletionRenderModePolicyTests.swift in Sources */, + 413246B5C9F62DE2565BC154 /* CompletionSeamGuardTests.swift in Sources */, + 9BDC4312E18A9E67045DD4F1 /* CompositionInputModeClassifierTests.swift in Sources */, + AA583808F225CEE0A846BBAB /* ConfidenceSuppressionPolicyTests.swift in Sources */, + 57BCDFE786675C9793F3E08E /* ControlTokenMarkersTests.swift in Sources */, + F8D1C3FD1A1ACAE87D885D29 /* CotabbyDebugOptionsTests.swift in Sources */, + 65D20F8E6309CED34A638D35 /* CotabbyTestFixtures.swift in Sources */, + 99334CDC1399D03019202E85 /* CurrentWordExtractorTests.swift in Sources */, + 81073963BC57B5CA9151B0EC /* CustomRulesTests.swift in Sources */, + 7256C2A329C96A16661E9181 /* DateMacroEvaluatorTests.swift in Sources */, + FEC9464B540B7AC5ADE7AEEB /* DebouncePolicyTests.swift in Sources */, + 24A393E033AB22A1C9951770 /* DecodeStopPolicyTests.swift in Sources */, + 6B59FBD73BA169121537D3DE /* DeepGeometryWalkThrottleTests.swift in Sources */, + ACF74908E01CD33F2F5C0FB9 /* DeviceInfoTests.swift in Sources */, + 96927B87C3C2B34819748CE1 /* DisplayCoordinateConverterTests.swift in Sources */, + E5022E7BF72591C0FEE80CD7 /* DownloadFileRescuerTests.swift in Sources */, + C7A48F93691943EF2EEBD775 /* DownloadOutcomeClassifierTests.swift in Sources */, + D84D021FD61D9C18B08E168B /* EmojiCatalogMatcherTests.swift in Sources */, + EF55CFC5C89584C748A5F7A4 /* EmojiCatalogTests.swift in Sources */, + E4550C83F263BD9A923DFD00 /* EmojiPickerControllerTests.swift in Sources */, + F35738A5EFCE7C2A737F08C9 /* EmojiPickerModelsTests.swift in Sources */, + D22F513CD1A4A1F8734FF067 /* EmojiPickerPanelLayoutTests.swift in Sources */, + 3B984038F862CD7779EE8456 /* EmojiPopularityTests.swift in Sources */, + 3451F18F23F2C360F5B71F0C /* EmojiQueryRunTests.swift in Sources */, + 8CC26E987D538732AE22DDA4 /* EmojiRecentsTests.swift in Sources */, + A3387480D017AA1502172BEA /* EmojiSynonymCatalogTests.swift in Sources */, + 53C1D96427CECC559FAC631A /* EmojiTriggerStateMachineTests.swift in Sources */, + C14049A1A7C33F8CADDB3675 /* EmojiUsageStoreTests.swift in Sources */, + EA7398BD23865985723C32E0 /* EmojiVariantResolverTests.swift in Sources */, + 0E6692D2A7AEEDF72FCF1AE2 /* ExtendedContextTests.swift in Sources */, + 02ECD5C9C5FE7B4EB62ABCAF /* FileLogHandlerTests.swift in Sources */, + 8014C090E6B95CC1CE40230A /* FocusCapabilityFlickerGateTests.swift in Sources */, + 27DD6865421158DF5BB7150C /* FocusCapabilityResolverTests.swift in Sources */, + CED430DD80E4769920E3C0E5 /* FocusModelsTests.swift in Sources */, + 5CBE09685D85DFED89B79437 /* FocusPollBackoffTests.swift in Sources */, + 90CAE5A87EA9EA2670BD99DA /* FocusSessionScopedCacheTests.swift in Sources */, + 1C6B2EBC77B508A3FF43E994 /* FocusSnapshotResolverLiveTests.swift in Sources */, + 88318BAA3E0754D09C048983 /* FocusSnapshotResolverSelectionTests.swift in Sources */, + C6EE8C731928DB2A26945127 /* FocusTrackingModelTests.swift in Sources */, + 07CA86AE733561B277AEF1DE /* FoundationModelAvailabilityServiceTests.swift in Sources */, + AC3A30CDDFE6ED0A0D87005F /* FoundationModelDriftEvalTests.swift in Sources */, + 820BA5C9F46127C3CD3522E9 /* GhostFontMetricsTests.swift in Sources */, + 9AC34510D097D670C9D7ABCB /* GhostFontSizeStabilizerTests.swift in Sources */, + 0133007DFD6B5160D8992FF6 /* GhostSuggestionLayoutTests.swift in Sources */, + 65B44060371596BFA0EFD987 /* HardwareCapabilityProbeTests.swift in Sources */, + C080D50FA0ED1F32C92BCC36 /* HuggingFaceModelsTests.swift in Sources */, + 1B66CA97E53D1ADB9F4E9A4A /* InputMonitorTests.swift in Sources */, + 765A4E8212962910AA3FBA87 /* InputSuppressionControllerTests.swift in Sources */, + 62194EBBF2CAE02887849E61 /* InsertedTextAdvanceTests.swift in Sources */, + 7D62632C0775EB7E5D6DAE53 /* InsertionSafetyGateTests.swift in Sources */, + 03848218E1069BA349B9C931 /* InsertionStrategySelectorTests.swift in Sources */, + 6004FCACD5F5F27FA3319B76 /* KeyCodeLabelsTests.swift in Sources */, + 9C41C817DE1785040E3628CE /* LLMIOFileHandlerTests.swift in Sources */, + 80D394FC224DE82F3A9057BC /* LanguageSupportTests.swift in Sources */, + 83193301C97E763146DA9273 /* LlamaDecodeGateDefaultsTests.swift in Sources */, + C1ADF50B2D3A3A05CD0FFA68 /* LlamaEvalScoring.swift in Sources */, + 3C1D10594D37E35313B86BDD /* LlamaEvalScoringTests.swift in Sources */, + E4E787A70A33BD7D14BD5852 /* LlamaPromptCacheHintTrackerTests.swift in Sources */, + 49AD09B2EA8752F20A427F8E /* LlamaSuggestionEngineCancellationTests.swift in Sources */, + 7C24B19FF72386238B7E51B7 /* LlamaSuggestionEnginePrewarmTests.swift in Sources */, + DB910312901B91E12AFC3E18 /* LlamaSuggestionEngineStreamingTests.swift in Sources */, + BE16C2851265AB659A322835 /* LlamaSuggestionEvalTests.swift in Sources */, + AB8F186A7CB13779DAF729A0 /* MacroEngineTests.swift in Sources */, + 8756E3050C45106D7AD188AA /* MacroTriggerStateMachineTests.swift in Sources */, + 1B80604D77F1AF1DF96DDD45 /* MarkerSelectionSynthesizerTests.swift in Sources */, + A54337B0B12D1FE2F332C7E1 /* MenuBarRecoveryPolicyTests.swift in Sources */, + 443B750143CF2F42371A622A /* MidWordContinuationPolicyTests.swift in Sources */, + 5FDFBF1A629E3661646124DA /* MirrorOverlayLayoutTests.swift in Sources */, + B3E9C077CF064F2DEC3E22B8 /* ModelAndPresentationValueTests.swift in Sources */, + 4D2C1A0B4FBEF95CBFB9F481 /* ModelFileValidatorTests.swift in Sources */, + 1419979A0649B00DACF75C61 /* OCRTextHygieneTests.swift in Sources */, + DCCF7FDE5DA2A048EB6D2DE5 /* OllamaPreloadWorkControllerTests.swift in Sources */, + 32C4F7853210DE04044FB363 /* OnboardingFlowStepTests.swift in Sources */, + 47D099DE9608A174BB0C3C3F /* OnboardingTemplateFeatureListTests.swift in Sources */, + C059BDAD7E8F82B058201A87 /* OnboardingTemplateRecommenderTests.swift in Sources */, + 749C4953D3AFE86AFABA968C /* OnboardingTemplateTests.swift in Sources */, + 2A2C0AA222A33A8B43880661 /* OpenAICompatibleAPIClientTests.swift in Sources */, + 8B36A3FDDBB803C72A1E521B /* PerDomainDisableSettingsTests.swift in Sources */, + 01CDBE7607A9F9F85F87AFF0 /* PerformanceMetricsStoreTests.swift in Sources */, + 73B7C4D5143F7AEC321BC873 /* PermissionAndContextModelTests.swift in Sources */, + 41F36D158005A69CE87921FA /* PermissionOverlayTrackerTests.swift in Sources */, + EEC06CE37957B44E2B258DEE /* PromptContextSanitizerTests.swift in Sources */, + 7008657841ECD4F06A46A9DE /* PromptPolicyTests.swift in Sources */, + EC4975F707689CEA77A636BB /* PromptSectionBudgetTests.swift in Sources */, + 27B1A99D61398752863DB251 /* RequestIDTests.swift in Sources */, + FAEC5301B36B92E4B4A169D3 /* RuntimeBootstrapModelTests.swift in Sources */, + 03FBB478CF7C51BDFB9AEB6D /* ScreenTextExtractorTests.swift in Sources */, + 050750A0343235F426D8B47B /* ScreenshotContextGeneratorTests.swift in Sources */, + C5F026E7DF2AACC113ED05CE /* SecureFieldDetectorTests.swift in Sources */, + A8854697A9EB29DB737C4A26 /* SelfCaptureGateTests.swift in Sources */, + CC388DA5BCF3D6551AE5D11F /* SentenceBoundaryClassifierTests.swift in Sources */, + 9C11CED7C78707EE8C3E0E10 /* SettingsAttentionEvaluatorTests.swift in Sources */, + B81FF9FB9A794656F63DEC01 /* SettingsIndexTests.swift in Sources */, + F38776739B0987C0E3F2D343 /* SettingsSearchRankerTests.swift in Sources */, + 973171C8C049F8CC15F589F2 /* ShortcutConflictTests.swift in Sources */, + 4CD7DC9BFFA7B5C1B9834214 /* SpeculativeAcceptanceContextTests.swift in Sources */, + D58B73ED080E5D253A838FAC /* SpellingDictionaryResourceTests.swift in Sources */, + 74EE4B6CFAD07099867BD0FC /* SpellingLanguageResolverTests.swift in Sources */, + 37BA67D33AB24150733557A7 /* StaticTextRunWalkThrottleTests.swift in Sources */, + 69F840D1C78E9AD037F60A94 /* StreamedGhostTextPolicyTests.swift in Sources */, + 34692B4809B7E8F0884A5BDC /* SuggestionAnchorCacheTests.swift in Sources */, + A995A5B3B1A361F75F4BDC26 /* SuggestionAvailabilityEvaluatorTests.swift in Sources */, + B6B82B72D4AE1ABFFA78978F /* SuggestionCaretLayoutRepairTests.swift in Sources */, + CB37AE4BB3020A130E0B0239 /* SuggestionCoordinatorAcceptanceTests.swift in Sources */, + 95BCE8E4CB984A0D8F1CC227 /* SuggestionCoordinatorInputTests.swift in Sources */, + C60F976B84B6101EC0024919 /* SuggestionCoordinatorLifecycleTests.swift in Sources */, + B99A9C90F3688BEFD28513AD /* SuggestionCoordinatorPredictionTests.swift in Sources */, + 1972708E96F0643D5E434D6F /* SuggestionCoordinatorTestSupport.swift in Sources */, + D98538D3C1344422354B0B2E /* SuggestionDebugLoggerTests.swift in Sources */, + 3A3B49975BCF1F648F8C1782 /* SuggestionEngineModelsTests.swift in Sources */, + F76ECB9663E46AA806E2C7DE /* SuggestionEngineRouterTests.swift in Sources */, + 346A21884E25B07C338B33C9 /* SuggestionFadeInPolicyTests.swift in Sources */, + F752C13542D72C888936748D /* SuggestionFocusFreshnessTests.swift in Sources */, + 7AEF32D2BCB710A3E018A637 /* SuggestionInteractionStateTests.swift in Sources */, + 8D63900E61EAA983D2C726FC /* SuggestionOverlayStabilityGateTests.swift in Sources */, + 4A2AC346A5A857AF551D1598 /* SuggestionPauseModelsTests.swift in Sources */, + 3FA7429EE4BDE4CE0D8E7DA0 /* SuggestionQualityMetricsStoreTests.swift in Sources */, + 311445DF836037B2785E1539 /* SuggestionRequestFactoryTests.swift in Sources */, + 08EF35590D0C64D0D3FBACFE /* SuggestionSessionReconcilerTests.swift in Sources */, + 2D83CECB0FF076323226449D /* SuggestionSettingsModelTests.swift in Sources */, + 19449988F10AD289E2682F04 /* SuggestionSettingsStoreTests.swift in Sources */, + DA92312A2DE3518DAF0C7819 /* SuggestionStateHelperTests.swift in Sources */, + 420C41A28EB788D077719978 /* SuggestionTextColorCodecTests.swift in Sources */, + 021084DE49BDB797C67EA100 /* SuggestionTextNormalizerTests.swift in Sources */, + CF04C28598AF9A437990C8A4 /* SurfaceContextComposerTests.swift in Sources */, + 15D7C2CFE930F62B88F07EA7 /* SymSpellCorrectorTests.swift in Sources */, + 19284043DCEDC562269991EE /* SymSpellTests.swift in Sources */, + F08F41E2A6AB0BC01D4323AF /* SyntheticReplacePlannerTests.swift in Sources */, + 13EB210DA377922CBC38E69C /* SystemMetricsStoreTests.swift in Sources */, + C8A5B938A8CBFB9587E91988 /* SystemResourceSamplerTests.swift in Sources */, + 5682F4D4541502E19CC81F96 /* TerminalAppDetectorTests.swift in Sources */, + C3A3977AF84C7037BE1AD17E /* TextDirectionDetectorTests.swift in Sources */, + 16CCE176C5C31CB180D131AD /* TextLayoutCaretEstimatorTests.swift in Sources */, + 0DE687D08BE8AA33F0A91787 /* TokenCountEstimatorTests.swift in Sources */, + 48CE539CB1D41EEE7B9F0819 /* TrailingDuplicationFilterTests.swift in Sources */, + F25F1800B79BF85AF07048C3 /* TypoCaseTransferTests.swift in Sources */, + C3F63C89E82ED82DF24BD603 /* TypoGateTests.swift in Sources */, + DC6FEE1602B6891CA4D0CDCA /* VisualContextStartCoalescerTests.swift in Sources */, + 1536BBBDFC274C414DEB1420 /* WebContentFieldDetectorTests.swift in Sources */, + D8E0E5FA644F62103D18645B /* WordCountFormatterTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Cotabby/Models/CustomRulesCatalog.swift b/Cotabby/Models/Context/CustomRulesCatalog.swift similarity index 100% rename from Cotabby/Models/CustomRulesCatalog.swift rename to Cotabby/Models/Context/CustomRulesCatalog.swift diff --git a/Cotabby/Models/LanguageCatalog.swift b/Cotabby/Models/Context/LanguageCatalog.swift similarity index 100% rename from Cotabby/Models/LanguageCatalog.swift rename to Cotabby/Models/Context/LanguageCatalog.swift diff --git a/Cotabby/Models/VisualContextModels.swift b/Cotabby/Models/Context/VisualContextModels.swift similarity index 90% rename from Cotabby/Models/VisualContextModels.swift rename to Cotabby/Models/Context/VisualContextModels.swift index 05a3c7ec..7838e5b0 100644 --- a/Cotabby/Models/VisualContextModels.swift +++ b/Cotabby/Models/Context/VisualContextModels.swift @@ -27,9 +27,9 @@ nonisolated struct VisualContextConfiguration: Equatable, Sendable { // the previous 1600 cap. maxImageDimension: 1200, minRecognizedCharacterCount: 12, - // The summarizer needs enough raw OCR to recover task, filenames, and nearby messages. + // Cleanup needs enough raw OCR to retain the task, filenames, and nearby messages. maxRecognizedCharacters: 5000, - // The final prompt still stays bounded even when summarization falls back to OCR. + // The final prompt stays independently bounded after OCR cleanup. maxSummaryCharacters: 1500 ) } @@ -62,8 +62,8 @@ nonisolated enum VisualContextStatus: Equatable, Sendable { } /// The final visual-context excerpt eventually injected into the completion prompt. -/// This may be a model-generated summary when a summarizer is configured, or bounded normalized -/// OCR text in tests/fallback wiring where no summarizer exists. +/// This is bounded, normalized OCR text. The visual-context path intentionally does not run a +/// second model summarizer because that would add latency and could invent context. nonisolated struct VisualContextExcerpt: Equatable, Sendable { let text: String } diff --git a/Cotabby/Models/EmojiPickerModels.swift b/Cotabby/Models/Emoji/EmojiPickerModels.swift similarity index 100% rename from Cotabby/Models/EmojiPickerModels.swift rename to Cotabby/Models/Emoji/EmojiPickerModels.swift diff --git a/Cotabby/Models/EmojiUsageModels.swift b/Cotabby/Models/Emoji/EmojiUsageModels.swift similarity index 100% rename from Cotabby/Models/EmojiUsageModels.swift rename to Cotabby/Models/Emoji/EmojiUsageModels.swift diff --git a/Cotabby/Models/EmojiUsageStore.swift b/Cotabby/Models/Emoji/EmojiUsageStore.swift similarity index 100% rename from Cotabby/Models/EmojiUsageStore.swift rename to Cotabby/Models/Emoji/EmojiUsageStore.swift diff --git a/Cotabby/Models/FocusModels.swift b/Cotabby/Models/Focus/FocusModels.swift similarity index 100% rename from Cotabby/Models/FocusModels.swift rename to Cotabby/Models/Focus/FocusModels.swift diff --git a/Cotabby/Models/FocusTrackingModel.swift b/Cotabby/Models/Focus/FocusTrackingModel.swift similarity index 100% rename from Cotabby/Models/FocusTrackingModel.swift rename to Cotabby/Models/Focus/FocusTrackingModel.swift diff --git a/Cotabby/Models/InputModels.swift b/Cotabby/Models/Input/InputModels.swift similarity index 100% rename from Cotabby/Models/InputModels.swift rename to Cotabby/Models/Input/InputModels.swift diff --git a/Cotabby/Models/OnboardingTemplate.swift b/Cotabby/Models/Onboarding/OnboardingTemplate.swift similarity index 100% rename from Cotabby/Models/OnboardingTemplate.swift rename to Cotabby/Models/Onboarding/OnboardingTemplate.swift diff --git a/Cotabby/Models/PermissionModels.swift b/Cotabby/Models/Permissions/PermissionModels.swift similarity index 100% rename from Cotabby/Models/PermissionModels.swift rename to Cotabby/Models/Permissions/PermissionModels.swift diff --git a/Cotabby/Models/HuggingFaceModels.swift b/Cotabby/Models/Runtime/HuggingFaceModels.swift similarity index 100% rename from Cotabby/Models/HuggingFaceModels.swift rename to Cotabby/Models/Runtime/HuggingFaceModels.swift diff --git a/Cotabby/Models/LlamaRuntimeModels.swift b/Cotabby/Models/Runtime/LlamaRuntimeModels.swift similarity index 100% rename from Cotabby/Models/LlamaRuntimeModels.swift rename to Cotabby/Models/Runtime/LlamaRuntimeModels.swift diff --git a/Cotabby/Models/OpenAICompatibleEndpointModels.swift b/Cotabby/Models/Runtime/OpenAICompatibleEndpointModels.swift similarity index 100% rename from Cotabby/Models/OpenAICompatibleEndpointModels.swift rename to Cotabby/Models/Runtime/OpenAICompatibleEndpointModels.swift diff --git a/Cotabby/Models/PerformanceMetricsStore.swift b/Cotabby/Models/Runtime/PerformanceMetricsStore.swift similarity index 100% rename from Cotabby/Models/PerformanceMetricsStore.swift rename to Cotabby/Models/Runtime/PerformanceMetricsStore.swift diff --git a/Cotabby/Models/RuntimeBootstrapModel.swift b/Cotabby/Models/Runtime/RuntimeBootstrapModel.swift similarity index 100% rename from Cotabby/Models/RuntimeBootstrapModel.swift rename to Cotabby/Models/Runtime/RuntimeBootstrapModel.swift diff --git a/Cotabby/Models/SystemMetricsStore.swift b/Cotabby/Models/Runtime/SystemMetricsStore.swift similarity index 100% rename from Cotabby/Models/SystemMetricsStore.swift rename to Cotabby/Models/Runtime/SystemMetricsStore.swift diff --git a/Cotabby/Models/CompletionRenderMode.swift b/Cotabby/Models/Settings/CompletionRenderMode.swift similarity index 100% rename from Cotabby/Models/CompletionRenderMode.swift rename to Cotabby/Models/Settings/CompletionRenderMode.swift diff --git a/Cotabby/Models/SuggestionSettingsData.swift b/Cotabby/Models/Settings/SuggestionSettingsData.swift similarity index 100% rename from Cotabby/Models/SuggestionSettingsData.swift rename to Cotabby/Models/Settings/SuggestionSettingsData.swift diff --git a/Cotabby/Models/SuggestionSettingsModel.swift b/Cotabby/Models/Settings/SuggestionSettingsModel.swift similarity index 100% rename from Cotabby/Models/SuggestionSettingsModel.swift rename to Cotabby/Models/Settings/SuggestionSettingsModel.swift diff --git a/Cotabby/Models/SpellingDictionaryCatalog.swift b/Cotabby/Models/Spelling/SpellingDictionaryCatalog.swift similarity index 100% rename from Cotabby/Models/SpellingDictionaryCatalog.swift rename to Cotabby/Models/Spelling/SpellingDictionaryCatalog.swift diff --git a/Cotabby/Models/SuggestionEngineModels.swift b/Cotabby/Models/Suggestion/SuggestionEngineModels.swift similarity index 100% rename from Cotabby/Models/SuggestionEngineModels.swift rename to Cotabby/Models/Suggestion/SuggestionEngineModels.swift diff --git a/Cotabby/Models/SuggestionModels.swift b/Cotabby/Models/Suggestion/SuggestionModels.swift similarity index 100% rename from Cotabby/Models/SuggestionModels.swift rename to Cotabby/Models/Suggestion/SuggestionModels.swift diff --git a/Cotabby/Models/SuggestionPauseModels.swift b/Cotabby/Models/Suggestion/SuggestionPauseModels.swift similarity index 100% rename from Cotabby/Models/SuggestionPauseModels.swift rename to Cotabby/Models/Suggestion/SuggestionPauseModels.swift diff --git a/Cotabby/Models/SuggestionQualityMetricsStore.swift b/Cotabby/Models/Suggestion/SuggestionQualityMetricsStore.swift similarity index 100% rename from Cotabby/Models/SuggestionQualityMetricsStore.swift rename to Cotabby/Models/Suggestion/SuggestionQualityMetricsStore.swift diff --git a/Cotabby/Models/SuggestionSubsystemContracts.swift b/Cotabby/Models/Suggestion/SuggestionSubsystemContracts.swift similarity index 100% rename from Cotabby/Models/SuggestionSubsystemContracts.swift rename to Cotabby/Models/Suggestion/SuggestionSubsystemContracts.swift diff --git a/Cotabby/Services/Utilities/ClipboardContextProvider.swift b/Cotabby/Services/Context/ClipboardContextProvider.swift similarity index 100% rename from Cotabby/Services/Utilities/ClipboardContextProvider.swift rename to Cotabby/Services/Context/ClipboardContextProvider.swift diff --git a/Cotabby/Services/Utilities/DownloadFileRescuer.swift b/Cotabby/Services/ModelManagement/DownloadFileRescuer.swift similarity index 100% rename from Cotabby/Services/Utilities/DownloadFileRescuer.swift rename to Cotabby/Services/ModelManagement/DownloadFileRescuer.swift diff --git a/Cotabby/Services/Utilities/HuggingFaceAPIClient.swift b/Cotabby/Services/ModelManagement/HuggingFaceAPIClient.swift similarity index 100% rename from Cotabby/Services/Utilities/HuggingFaceAPIClient.swift rename to Cotabby/Services/ModelManagement/HuggingFaceAPIClient.swift diff --git a/Cotabby/Services/Utilities/HuggingFaceSearchService.swift b/Cotabby/Services/ModelManagement/HuggingFaceSearchService.swift similarity index 100% rename from Cotabby/Services/Utilities/HuggingFaceSearchService.swift rename to Cotabby/Services/ModelManagement/HuggingFaceSearchService.swift diff --git a/Cotabby/Services/Utilities/ModelDownloadManager.swift b/Cotabby/Services/ModelManagement/ModelDownloadManager.swift similarity index 100% rename from Cotabby/Services/Utilities/ModelDownloadManager.swift rename to Cotabby/Services/ModelManagement/ModelDownloadManager.swift diff --git a/Cotabby/Services/Utilities/ModelFileValidator.swift b/Cotabby/Services/ModelManagement/ModelFileValidator.swift similarity index 100% rename from Cotabby/Services/Utilities/ModelFileValidator.swift rename to Cotabby/Services/ModelManagement/ModelFileValidator.swift diff --git a/Cotabby/Services/Permission/PermissionOverlayWindowController.swift b/Cotabby/Services/Permission/PermissionOverlayWindowController.swift index 899f1caa..9a668fb0 100644 --- a/Cotabby/Services/Permission/PermissionOverlayWindowController.swift +++ b/Cotabby/Services/Permission/PermissionOverlayWindowController.swift @@ -7,7 +7,7 @@ import QuartzCore /// Settings. /// /// Keeping this as a dedicated window controller follows the same pattern Cotabby already uses for -/// floating AppKit UI in `Services/UI`. The rest of the app can ask for "present / update / hide" +/// floating AppKit UI in `Services/Presentation`. The rest of the app can ask for "present / update / hide" /// behavior without learning anything about `NSPanel` configuration or animation timing. final class PermissionOverlayWindowController: NSWindowController { private let windowSize = NSSize(width: 540, height: 112) diff --git a/Cotabby/Services/UI/ActivationIndicatorController.swift b/Cotabby/Services/Presentation/ActivationIndicatorController.swift similarity index 100% rename from Cotabby/Services/UI/ActivationIndicatorController.swift rename to Cotabby/Services/Presentation/ActivationIndicatorController.swift diff --git a/Cotabby/Services/UI/EmojiPickerPanelController.swift b/Cotabby/Services/Presentation/EmojiPickerPanelController.swift similarity index 100% rename from Cotabby/Services/UI/EmojiPickerPanelController.swift rename to Cotabby/Services/Presentation/EmojiPickerPanelController.swift diff --git a/Cotabby/Services/UI/FocusDebugOverlayController.swift b/Cotabby/Services/Presentation/FocusDebugOverlayController.swift similarity index 99% rename from Cotabby/Services/UI/FocusDebugOverlayController.swift rename to Cotabby/Services/Presentation/FocusDebugOverlayController.swift index 9c968de2..2046ccdd 100644 --- a/Cotabby/Services/UI/FocusDebugOverlayController.swift +++ b/Cotabby/Services/Presentation/FocusDebugOverlayController.swift @@ -45,7 +45,7 @@ final class FocusDebugOverlayController { /// Mirrors visual-context lifecycle state into the bottom debug panel. /// - /// We show metadata only, not the OCR text or summary. The raw prompt block remains the source + /// We show metadata only, not the cleaned OCR excerpt. The raw prompt block remains the source /// of truth for sensitive text debugging, and it is already gated behind `-cotabby-debug`. func updateVisualContext(status: VisualContextStatus, excerpt: String?) { latestVisualContextStatus = status diff --git a/Cotabby/Services/UI/InlinePreviewPanelController.swift b/Cotabby/Services/Presentation/InlinePreviewPanelController.swift similarity index 100% rename from Cotabby/Services/UI/InlinePreviewPanelController.swift rename to Cotabby/Services/Presentation/InlinePreviewPanelController.swift diff --git a/Cotabby/Services/UI/OverlayController.swift b/Cotabby/Services/Presentation/OverlayController.swift similarity index 100% rename from Cotabby/Services/UI/OverlayController.swift rename to Cotabby/Services/Presentation/OverlayController.swift diff --git a/Cotabby/Services/Runtime/LlamaRuntimeCore.swift b/Cotabby/Services/Runtime/LlamaRuntimeCore.swift index 492a25c2..12721680 100644 --- a/Cotabby/Services/Runtime/LlamaRuntimeCore.swift +++ b/Cotabby/Services/Runtime/LlamaRuntimeCore.swift @@ -8,11 +8,9 @@ import CotabbyInference /// sequences, tokenizes prompts, samples continuations, and frees native resources on shutdown. /// /// The engine handles thread safety internally via per-sequence mutexes. This class is -/// `@unchecked Sendable` rather than an `actor` so that `generate()` (autocomplete) and -/// `summarize()` (visual context) can run on separate sequences concurrently. -/// `autocompleteLock` serializes autocomplete-specific KV cache state; summary uses -/// ephemeral sequences with no shared state. A separate `lifecycleCondition` prevents -/// `shutdown()` from unloading the model while any operation is still in flight. +/// `@unchecked Sendable` rather than an `actor` so native work can execute away from MainActor. +/// `autocompleteLock` serializes autocomplete-specific KV-cache state. A separate +/// `lifecycleCondition` prevents `shutdown()` from unloading the model while generation is in flight. /// Immutable runtime metadata captured after a model has been successfully prepared. struct PreparedLlamaRuntime: Sendable { @@ -52,8 +50,8 @@ nonisolated final class LlamaRuntimeCore: @unchecked Sendable { /// decode of the same prompt. Guarded by `autocompleteLock`; reset on model load. private var modelRejectsPartialTrims = false - /// Coordinates model lifecycle with in-flight operations. `generate()` and `summarize()` - /// increment the active count on entry and decrement on exit. `shutdown()` sets the + /// Coordinates model lifecycle with in-flight generation. `generate()` increments the active + /// count on entry and decrements on exit. `shutdown()` sets the /// shutting-down flag and blocks until all active operations finish before unloading. private let lifecycleCondition = NSCondition() private var activeOperationCount = 0 @@ -503,7 +501,7 @@ nonisolated final class LlamaRuntimeCore: @unchecked Sendable { autocompleteSamplingFingerprint = nil } - /// Waits for all in-flight `generate()` and `summarize()` calls to finish, then frees all + /// Waits for all in-flight `generate()` calls to finish, then frees all /// sequences and the loaded model. Blocking is intentional: callers should dispatch this off /// the main thread via `Task.detached` when UI responsiveness matters. /// diff --git a/Cotabby/Services/Runtime/SuggestionEngineRouter.swift b/Cotabby/Services/Runtime/SuggestionEngineRouter.swift index 05c8124a..0c184347 100644 --- a/Cotabby/Services/Runtime/SuggestionEngineRouter.swift +++ b/Cotabby/Services/Runtime/SuggestionEngineRouter.swift @@ -105,7 +105,7 @@ final class SuggestionEngineRouter { /// Persists one (timestamp, model, latency) triple into the rolling ring buffer when the /// Performance pane toggle is on. The router is the right home for this seam because it is /// the single point that sees a finished `SuggestionResult` and knows which engine produced - /// it — both engines below would otherwise need to take a dependency on the metrics store. + /// it — every backend would otherwise need to take a dependency on the metrics store. private func recordPerformanceMetric(modelName: String, latency: TimeInterval) { guard suggestionSettings.isPerformanceTrackingEnabled else { return } let latencyMs = Int((latency * 1000).rounded()) diff --git a/Cotabby/Services/Utilities/AppUpdateManager.swift b/Cotabby/Services/Updates/AppUpdateManager.swift similarity index 100% rename from Cotabby/Services/Utilities/AppUpdateManager.swift rename to Cotabby/Services/Updates/AppUpdateManager.swift diff --git a/Cotabby/Services/Visual/ScreenshotContextGenerator.swift b/Cotabby/Services/Visual/ScreenshotContextGenerator.swift index 0ca338b1..d2aeda47 100644 --- a/Cotabby/Services/Visual/ScreenshotContextGenerator.swift +++ b/Cotabby/Services/Visual/ScreenshotContextGenerator.swift @@ -6,10 +6,10 @@ import UniformTypeIdentifiers /// File overview: /// Converts a newly focused input's surrounding screenshot into OCR text for prompt injection. -/// The pipeline is: focused snapshot -> screenshot crop -> Apple OCR -> optional local summary -> -/// bounded visible-context excerpt. +/// The pipeline is: focused snapshot -> screenshot crop -> Apple OCR -> cleanup -> bounded +/// visible-context excerpt. /// -/// Keeping capture/OCR/summarization at this boundary gives the suggestion coordinator a small +/// Keeping capture and OCR cleanup at this boundary gives the suggestion coordinator a small /// plain-text value instead of exposing raw screenshots or OCR implementation details. enum ScreenshotContextGenerationError: LocalizedError { @@ -211,7 +211,7 @@ final class ScreenshotContextGenerator { } /// OCR is noisy by nature. We normalize line whitespace, strip short-token noise from UI - /// chrome, and keep only a bounded excerpt so the summarizer receives meaningful text. + /// chrome, and keep only a bounded excerpt so the prompt receives meaningful text. private func normalizeRecognizedText(_ rawText: String) -> String { PromptContextSanitizer.sanitizeOCR( rawText, @@ -219,10 +219,10 @@ final class ScreenshotContextGenerator { ) } - /// Applies the final prompt-injection budget after optional summarization. + /// Applies the final prompt-injection budget after OCR cleanup. /// - /// `maxRecognizedCharacters` protects the OCR and summarizer input. This separate cap protects - /// the autocomplete prompt from a verbose model summary or from the raw-OCR fallback path. + /// `maxRecognizedCharacters` bounds OCR cleanup input. This separate cap protects the + /// autocomplete prompt from a verbose recognized-text result. private func boundedSummaryText(_ text: String) -> String { PromptContextSanitizer.sanitize( text, diff --git a/Cotabby/Services/Visual/VisualContextCoordinator.swift b/Cotabby/Services/Visual/VisualContextCoordinator.swift index 3afccc7e..e1396e87 100644 --- a/Cotabby/Services/Visual/VisualContextCoordinator.swift +++ b/Cotabby/Services/Visual/VisualContextCoordinator.swift @@ -75,7 +75,7 @@ final class VisualContextCoordinator { break } - // Debounce the expensive screenshot -> OCR -> summarize pipeline. Chromium/Electron apps + // Debounce the expensive screenshot -> OCR -> cleanup pipeline. Chromium/Electron apps // flap the focused AX element (lose and re-acquire it), calling this repeatedly with a // churning focusChangeSequence. Coalescing (above) plus a short settle window runs the // pipeline once focus is stable instead of once per flap — the retrigger storm in #280. diff --git a/Cotabby/Support/AXHelper.swift b/Cotabby/Support/Accessibility/AXHelper.swift similarity index 100% rename from Cotabby/Support/AXHelper.swift rename to Cotabby/Support/Accessibility/AXHelper.swift diff --git a/Cotabby/Support/CalendarAccessibilityCapturePolicy.swift b/Cotabby/Support/Accessibility/CalendarAccessibilityCapturePolicy.swift similarity index 100% rename from Cotabby/Support/CalendarAccessibilityCapturePolicy.swift rename to Cotabby/Support/Accessibility/CalendarAccessibilityCapturePolicy.swift diff --git a/Cotabby/Support/PermissionOverlayTracker.swift b/Cotabby/Support/Accessibility/PermissionOverlayTracker.swift similarity index 100% rename from Cotabby/Support/PermissionOverlayTracker.swift rename to Cotabby/Support/Accessibility/PermissionOverlayTracker.swift diff --git a/Cotabby/Support/SecureFieldDetector.swift b/Cotabby/Support/Accessibility/SecureFieldDetector.swift similarity index 100% rename from Cotabby/Support/SecureFieldDetector.swift rename to Cotabby/Support/Accessibility/SecureFieldDetector.swift diff --git a/Cotabby/Support/SelfCaptureGate.swift b/Cotabby/Support/Accessibility/SelfCaptureGate.swift similarity index 100% rename from Cotabby/Support/SelfCaptureGate.swift rename to Cotabby/Support/Accessibility/SelfCaptureGate.swift diff --git a/Cotabby/Support/WebContentFieldDetector.swift b/Cotabby/Support/Accessibility/WebContentFieldDetector.swift similarity index 100% rename from Cotabby/Support/WebContentFieldDetector.swift rename to Cotabby/Support/Accessibility/WebContentFieldDetector.swift diff --git a/Cotabby/Support/ClipboardContentDistiller.swift b/Cotabby/Support/Context/ClipboardContentDistiller.swift similarity index 100% rename from Cotabby/Support/ClipboardContentDistiller.swift rename to Cotabby/Support/Context/ClipboardContentDistiller.swift diff --git a/Cotabby/Support/ClipboardRelevanceFilter.swift b/Cotabby/Support/Context/ClipboardRelevanceFilter.swift similarity index 100% rename from Cotabby/Support/ClipboardRelevanceFilter.swift rename to Cotabby/Support/Context/ClipboardRelevanceFilter.swift diff --git a/Cotabby/Support/OCRTextHygiene.swift b/Cotabby/Support/Context/OCRTextHygiene.swift similarity index 100% rename from Cotabby/Support/OCRTextHygiene.swift rename to Cotabby/Support/Context/OCRTextHygiene.swift diff --git a/Cotabby/Support/PromptContextSanitizer.swift b/Cotabby/Support/Context/PromptContextSanitizer.swift similarity index 99% rename from Cotabby/Support/PromptContextSanitizer.swift rename to Cotabby/Support/Context/PromptContextSanitizer.swift index 58ef88e9..83418a03 100644 --- a/Cotabby/Support/PromptContextSanitizer.swift +++ b/Cotabby/Support/Context/PromptContextSanitizer.swift @@ -44,7 +44,7 @@ enum PromptContextSanitizer { return boundedText.trimmingCharacters(in: .whitespacesAndNewlines) } - /// Stricter sanitization for OCR text headed to the summarizer. + /// Stricter sanitization for OCR text headed to the prompt excerpt. /// /// OCR adds a second failure mode beyond ordinary prompt injection: Vision can hallucinate /// short mixed-case blobs, random alphanumeric IDs, repeated glyphs, and numeric UI chrome. diff --git a/Cotabby/Support/SurfaceContextComposer.swift b/Cotabby/Support/Context/SurfaceContextComposer.swift similarity index 100% rename from Cotabby/Support/SurfaceContextComposer.swift rename to Cotabby/Support/Context/SurfaceContextComposer.swift diff --git a/Cotabby/Support/VisualContextStartCoalescer.swift b/Cotabby/Support/Context/VisualContextStartCoalescer.swift similarity index 95% rename from Cotabby/Support/VisualContextStartCoalescer.swift rename to Cotabby/Support/Context/VisualContextStartCoalescer.swift index 245fd398..2731d523 100644 --- a/Cotabby/Support/VisualContextStartCoalescer.swift +++ b/Cotabby/Support/Context/VisualContextStartCoalescer.swift @@ -23,7 +23,7 @@ nonisolated enum VisualContextStartDecision: Equatable { /// /// Chromium/Electron apps flap the focused AX element, calling `startSessionIfNeeded` repeatedly with /// a churning `focusChangeSequence`. This collapses those repeats: a call matching the active or the -/// pending field is ignored, so the screenshot -> OCR -> summarize pipeline runs once focus is stable +/// pending field is ignored, so the screenshot -> OCR -> cleanup pipeline runs once focus is stable /// instead of once per flap (the #280 retrigger storm). Kept pure so the invariants are unit-testable. enum VisualContextStartCoalescer { static func decide( diff --git a/Cotabby/Support/EmojiCatalog.swift b/Cotabby/Support/Emoji/EmojiCatalog.swift similarity index 100% rename from Cotabby/Support/EmojiCatalog.swift rename to Cotabby/Support/Emoji/EmojiCatalog.swift diff --git a/Cotabby/Support/EmojiMatcher.swift b/Cotabby/Support/Emoji/EmojiMatcher.swift similarity index 100% rename from Cotabby/Support/EmojiMatcher.swift rename to Cotabby/Support/Emoji/EmojiMatcher.swift diff --git a/Cotabby/Support/EmojiPickerPanelLayout.swift b/Cotabby/Support/Emoji/EmojiPickerPanelLayout.swift similarity index 100% rename from Cotabby/Support/EmojiPickerPanelLayout.swift rename to Cotabby/Support/Emoji/EmojiPickerPanelLayout.swift diff --git a/Cotabby/Support/EmojiPopularity.swift b/Cotabby/Support/Emoji/EmojiPopularity.swift similarity index 100% rename from Cotabby/Support/EmojiPopularity.swift rename to Cotabby/Support/Emoji/EmojiPopularity.swift diff --git a/Cotabby/Support/EmojiQueryRun.swift b/Cotabby/Support/Emoji/EmojiQueryRun.swift similarity index 100% rename from Cotabby/Support/EmojiQueryRun.swift rename to Cotabby/Support/Emoji/EmojiQueryRun.swift diff --git a/Cotabby/Support/EmojiRecents.swift b/Cotabby/Support/Emoji/EmojiRecents.swift similarity index 100% rename from Cotabby/Support/EmojiRecents.swift rename to Cotabby/Support/Emoji/EmojiRecents.swift diff --git a/Cotabby/Support/EmojiSynonymCatalog.swift b/Cotabby/Support/Emoji/EmojiSynonymCatalog.swift similarity index 100% rename from Cotabby/Support/EmojiSynonymCatalog.swift rename to Cotabby/Support/Emoji/EmojiSynonymCatalog.swift diff --git a/Cotabby/Support/EmojiTriggerStateMachine.swift b/Cotabby/Support/Emoji/EmojiTriggerStateMachine.swift similarity index 100% rename from Cotabby/Support/EmojiTriggerStateMachine.swift rename to Cotabby/Support/Emoji/EmojiTriggerStateMachine.swift diff --git a/Cotabby/Support/EmojiVariantResolver.swift b/Cotabby/Support/Emoji/EmojiVariantResolver.swift similarity index 100% rename from Cotabby/Support/EmojiVariantResolver.swift rename to Cotabby/Support/Emoji/EmojiVariantResolver.swift diff --git a/Cotabby/Support/AppSurfaceClassifier.swift b/Cotabby/Support/Focus/AppSurfaceClassifier.swift similarity index 97% rename from Cotabby/Support/AppSurfaceClassifier.swift rename to Cotabby/Support/Focus/AppSurfaceClassifier.swift index 30873b84..6f687fbf 100644 --- a/Cotabby/Support/AppSurfaceClassifier.swift +++ b/Cotabby/Support/Focus/AppSurfaceClassifier.swift @@ -13,8 +13,8 @@ nonisolated enum AppSurfaceClass: Equatable, Sendable { } /// Single source of truth for bundle-identifier → surface classification, shared by the -/// Foundation Models tone hints and the base-model surface preface so the two engines never -/// disagree about what kind of app the user is in. +/// Foundation Models tone hints and the base-model surface preface so the on-device prompt paths +/// never disagree about what kind of app the user is in. /// /// The sets are intentionally small: each entry has to earn its place, so they cover the surfaces /// real users write in most (code editors, email/chat clients, browsers) and everything else falls diff --git a/Cotabby/Support/ApplicationBundleMetadata.swift b/Cotabby/Support/Focus/ApplicationBundleMetadata.swift similarity index 100% rename from Cotabby/Support/ApplicationBundleMetadata.swift rename to Cotabby/Support/Focus/ApplicationBundleMetadata.swift diff --git a/Cotabby/Support/BrowserAppDetector.swift b/Cotabby/Support/Focus/BrowserAppDetector.swift similarity index 100% rename from Cotabby/Support/BrowserAppDetector.swift rename to Cotabby/Support/Focus/BrowserAppDetector.swift diff --git a/Cotabby/Support/BrowserDomain.swift b/Cotabby/Support/Focus/BrowserDomain.swift similarity index 100% rename from Cotabby/Support/BrowserDomain.swift rename to Cotabby/Support/Focus/BrowserDomain.swift diff --git a/Cotabby/Support/FocusCapabilityFlickerGate.swift b/Cotabby/Support/Focus/FocusCapabilityFlickerGate.swift similarity index 100% rename from Cotabby/Support/FocusCapabilityFlickerGate.swift rename to Cotabby/Support/Focus/FocusCapabilityFlickerGate.swift diff --git a/Cotabby/Support/FocusCapabilityResolver.swift b/Cotabby/Support/Focus/FocusCapabilityResolver.swift similarity index 100% rename from Cotabby/Support/FocusCapabilityResolver.swift rename to Cotabby/Support/Focus/FocusCapabilityResolver.swift diff --git a/Cotabby/Support/FocusPollBackoff.swift b/Cotabby/Support/Focus/FocusPollBackoff.swift similarity index 100% rename from Cotabby/Support/FocusPollBackoff.swift rename to Cotabby/Support/Focus/FocusPollBackoff.swift diff --git a/Cotabby/Support/TerminalAppDetector.swift b/Cotabby/Support/Focus/TerminalAppDetector.swift similarity index 100% rename from Cotabby/Support/TerminalAppDetector.swift rename to Cotabby/Support/Focus/TerminalAppDetector.swift diff --git a/Cotabby/Support/CompositionInputModeClassifier.swift b/Cotabby/Support/Input/CompositionInputModeClassifier.swift similarity index 100% rename from Cotabby/Support/CompositionInputModeClassifier.swift rename to Cotabby/Support/Input/CompositionInputModeClassifier.swift diff --git a/Cotabby/Support/KeyCodeLabels.swift b/Cotabby/Support/Input/KeyCodeLabels.swift similarity index 100% rename from Cotabby/Support/KeyCodeLabels.swift rename to Cotabby/Support/Input/KeyCodeLabels.swift diff --git a/Cotabby/Support/MarkerSelectionSynthesizer.swift b/Cotabby/Support/Input/MarkerSelectionSynthesizer.swift similarity index 100% rename from Cotabby/Support/MarkerSelectionSynthesizer.swift rename to Cotabby/Support/Input/MarkerSelectionSynthesizer.swift diff --git a/Cotabby/Support/CotabbyDebugOptions.swift b/Cotabby/Support/Logging/CotabbyDebugOptions.swift similarity index 100% rename from Cotabby/Support/CotabbyDebugOptions.swift rename to Cotabby/Support/Logging/CotabbyDebugOptions.swift diff --git a/Cotabby/Support/FileLogHandler.swift b/Cotabby/Support/Logging/FileLogHandler.swift similarity index 100% rename from Cotabby/Support/FileLogHandler.swift rename to Cotabby/Support/Logging/FileLogHandler.swift diff --git a/Cotabby/Support/LLMIOFileHandler.swift b/Cotabby/Support/Logging/LLMIOFileHandler.swift similarity index 100% rename from Cotabby/Support/LLMIOFileHandler.swift rename to Cotabby/Support/Logging/LLMIOFileHandler.swift diff --git a/Cotabby/Support/RequestID.swift b/Cotabby/Support/Logging/RequestID.swift similarity index 100% rename from Cotabby/Support/RequestID.swift rename to Cotabby/Support/Logging/RequestID.swift diff --git a/Cotabby/Support/MacroTriggerStateMachine.swift b/Cotabby/Support/Macros/MacroTriggerStateMachine.swift similarity index 100% rename from Cotabby/Support/MacroTriggerStateMachine.swift rename to Cotabby/Support/Macros/MacroTriggerStateMachine.swift diff --git a/Cotabby/Support/OnboardingFlowSteps.swift b/Cotabby/Support/Onboarding/OnboardingFlowSteps.swift similarity index 100% rename from Cotabby/Support/OnboardingFlowSteps.swift rename to Cotabby/Support/Onboarding/OnboardingFlowSteps.swift diff --git a/Cotabby/Support/OnboardingTemplateFeatureList.swift b/Cotabby/Support/Onboarding/OnboardingTemplateFeatureList.swift similarity index 100% rename from Cotabby/Support/OnboardingTemplateFeatureList.swift rename to Cotabby/Support/Onboarding/OnboardingTemplateFeatureList.swift diff --git a/Cotabby/Support/OnboardingTemplateRecommender.swift b/Cotabby/Support/Onboarding/OnboardingTemplateRecommender.swift similarity index 100% rename from Cotabby/Support/OnboardingTemplateRecommender.swift rename to Cotabby/Support/Onboarding/OnboardingTemplateRecommender.swift diff --git a/Cotabby/Support/CaretGeometrySelector.swift b/Cotabby/Support/Presentation/CaretGeometrySelector.swift similarity index 100% rename from Cotabby/Support/CaretGeometrySelector.swift rename to Cotabby/Support/Presentation/CaretGeometrySelector.swift diff --git a/Cotabby/Support/CaretLinePosition.swift b/Cotabby/Support/Presentation/CaretLinePosition.swift similarity index 100% rename from Cotabby/Support/CaretLinePosition.swift rename to Cotabby/Support/Presentation/CaretLinePosition.swift diff --git a/Cotabby/Support/CompletionRenderModePolicy.swift b/Cotabby/Support/Presentation/CompletionRenderModePolicy.swift similarity index 100% rename from Cotabby/Support/CompletionRenderModePolicy.swift rename to Cotabby/Support/Presentation/CompletionRenderModePolicy.swift diff --git a/Cotabby/Support/DisplayCoordinateConverter.swift b/Cotabby/Support/Presentation/DisplayCoordinateConverter.swift similarity index 100% rename from Cotabby/Support/DisplayCoordinateConverter.swift rename to Cotabby/Support/Presentation/DisplayCoordinateConverter.swift diff --git a/Cotabby/Support/GhostFontMetrics.swift b/Cotabby/Support/Presentation/GhostFontMetrics.swift similarity index 100% rename from Cotabby/Support/GhostFontMetrics.swift rename to Cotabby/Support/Presentation/GhostFontMetrics.swift diff --git a/Cotabby/Support/GhostFontSizeStabilizer.swift b/Cotabby/Support/Presentation/GhostFontSizeStabilizer.swift similarity index 100% rename from Cotabby/Support/GhostFontSizeStabilizer.swift rename to Cotabby/Support/Presentation/GhostFontSizeStabilizer.swift diff --git a/Cotabby/Support/GhostSuggestionLayout.swift b/Cotabby/Support/Presentation/GhostSuggestionLayout.swift similarity index 100% rename from Cotabby/Support/GhostSuggestionLayout.swift rename to Cotabby/Support/Presentation/GhostSuggestionLayout.swift diff --git a/Cotabby/Support/GhostTextColorPreset.swift b/Cotabby/Support/Presentation/GhostTextColorPreset.swift similarity index 100% rename from Cotabby/Support/GhostTextColorPreset.swift rename to Cotabby/Support/Presentation/GhostTextColorPreset.swift diff --git a/Cotabby/Support/MirrorOverlayLayout.swift b/Cotabby/Support/Presentation/MirrorOverlayLayout.swift similarity index 100% rename from Cotabby/Support/MirrorOverlayLayout.swift rename to Cotabby/Support/Presentation/MirrorOverlayLayout.swift diff --git a/Cotabby/Support/SuggestionAnchorCache.swift b/Cotabby/Support/Presentation/SuggestionAnchorCache.swift similarity index 100% rename from Cotabby/Support/SuggestionAnchorCache.swift rename to Cotabby/Support/Presentation/SuggestionAnchorCache.swift diff --git a/Cotabby/Support/SuggestionFadeInPolicy.swift b/Cotabby/Support/Presentation/SuggestionFadeInPolicy.swift similarity index 100% rename from Cotabby/Support/SuggestionFadeInPolicy.swift rename to Cotabby/Support/Presentation/SuggestionFadeInPolicy.swift diff --git a/Cotabby/Support/SuggestionOverlayStabilityGate.swift b/Cotabby/Support/Presentation/SuggestionOverlayStabilityGate.swift similarity index 100% rename from Cotabby/Support/SuggestionOverlayStabilityGate.swift rename to Cotabby/Support/Presentation/SuggestionOverlayStabilityGate.swift diff --git a/Cotabby/Support/SuggestionTextColorCodec.swift b/Cotabby/Support/Presentation/SuggestionTextColorCodec.swift similarity index 100% rename from Cotabby/Support/SuggestionTextColorCodec.swift rename to Cotabby/Support/Presentation/SuggestionTextColorCodec.swift diff --git a/Cotabby/Support/TextDirectionDetector.swift b/Cotabby/Support/Presentation/TextDirectionDetector.swift similarity index 100% rename from Cotabby/Support/TextDirectionDetector.swift rename to Cotabby/Support/Presentation/TextDirectionDetector.swift diff --git a/Cotabby/Support/TextLayoutCaretEstimator.swift b/Cotabby/Support/Presentation/TextLayoutCaretEstimator.swift similarity index 100% rename from Cotabby/Support/TextLayoutCaretEstimator.swift rename to Cotabby/Support/Presentation/TextLayoutCaretEstimator.swift diff --git a/Cotabby/Support/BaseCompletionPromptRenderer.swift b/Cotabby/Support/Prompting/BaseCompletionPromptRenderer.swift similarity index 100% rename from Cotabby/Support/BaseCompletionPromptRenderer.swift rename to Cotabby/Support/Prompting/BaseCompletionPromptRenderer.swift diff --git a/Cotabby/Support/ControlTokenMarkers.swift b/Cotabby/Support/Prompting/ControlTokenMarkers.swift similarity index 100% rename from Cotabby/Support/ControlTokenMarkers.swift rename to Cotabby/Support/Prompting/ControlTokenMarkers.swift diff --git a/Cotabby/Support/FoundationModelPromptRenderer.swift b/Cotabby/Support/Prompting/FoundationModelPromptRenderer.swift similarity index 98% rename from Cotabby/Support/FoundationModelPromptRenderer.swift rename to Cotabby/Support/Prompting/FoundationModelPromptRenderer.swift index b0f17a74..dec610a4 100644 --- a/Cotabby/Support/FoundationModelPromptRenderer.swift +++ b/Cotabby/Support/Prompting/FoundationModelPromptRenderer.swift @@ -180,8 +180,8 @@ enum FoundationModelPromptRenderer { } /// Maps the focused app's surface class to a one-line tone cue or nil if no rule matches. - /// Classification lives in the shared `AppSurfaceClassifier` so both engines agree about what - /// kind of app the user is in. Terminal emulators and unrecognized apps get no hint: a shell + /// Classification lives in the shared `AppSurfaceClassifier` so the Apple and llama prompt + /// paths agree about what kind of app the user is in. Terminal emulators and unrecognized apps get no hint: a shell /// prompt, log pager, or `git commit` buffer is mostly prose, not code, so the no-hint default /// is safer than a guessed cue. private static func appToneHint(forBundleIdentifier identifier: String) -> String? { diff --git a/Cotabby/Support/PromptSectionBudget.swift b/Cotabby/Support/Prompting/PromptSectionBudget.swift similarity index 100% rename from Cotabby/Support/PromptSectionBudget.swift rename to Cotabby/Support/Prompting/PromptSectionBudget.swift diff --git a/Cotabby/Support/TokenCountEstimator.swift b/Cotabby/Support/Prompting/TokenCountEstimator.swift similarity index 100% rename from Cotabby/Support/TokenCountEstimator.swift rename to Cotabby/Support/Prompting/TokenCountEstimator.swift diff --git a/Cotabby/Support/BundledRuntimeLocator.swift b/Cotabby/Support/Runtime/BundledRuntimeLocator.swift similarity index 100% rename from Cotabby/Support/BundledRuntimeLocator.swift rename to Cotabby/Support/Runtime/BundledRuntimeLocator.swift diff --git a/Cotabby/Support/DecodeStopPolicy.swift b/Cotabby/Support/Runtime/DecodeStopPolicy.swift similarity index 100% rename from Cotabby/Support/DecodeStopPolicy.swift rename to Cotabby/Support/Runtime/DecodeStopPolicy.swift diff --git a/Cotabby/Support/DeviceInfo.swift b/Cotabby/Support/Runtime/DeviceInfo.swift similarity index 100% rename from Cotabby/Support/DeviceInfo.swift rename to Cotabby/Support/Runtime/DeviceInfo.swift diff --git a/Cotabby/Services/Utilities/DownloadOutcomeClassifier.swift b/Cotabby/Support/Runtime/DownloadOutcomeClassifier.swift similarity index 100% rename from Cotabby/Services/Utilities/DownloadOutcomeClassifier.swift rename to Cotabby/Support/Runtime/DownloadOutcomeClassifier.swift diff --git a/Cotabby/Support/HardwareCapabilityProbe.swift b/Cotabby/Support/Runtime/HardwareCapabilityProbe.swift similarity index 100% rename from Cotabby/Support/HardwareCapabilityProbe.swift rename to Cotabby/Support/Runtime/HardwareCapabilityProbe.swift diff --git a/Cotabby/Support/SystemResourceSampler.swift b/Cotabby/Support/Runtime/SystemResourceSampler.swift similarity index 100% rename from Cotabby/Support/SystemResourceSampler.swift rename to Cotabby/Support/Runtime/SystemResourceSampler.swift diff --git a/Cotabby/Support/MenuBarRecoveryPolicy.swift b/Cotabby/Support/Settings/MenuBarRecoveryPolicy.swift similarity index 100% rename from Cotabby/Support/MenuBarRecoveryPolicy.swift rename to Cotabby/Support/Settings/MenuBarRecoveryPolicy.swift diff --git a/Cotabby/Support/PerDomainDisableSettings.swift b/Cotabby/Support/Settings/PerDomainDisableSettings.swift similarity index 100% rename from Cotabby/Support/PerDomainDisableSettings.swift rename to Cotabby/Support/Settings/PerDomainDisableSettings.swift diff --git a/Cotabby/Support/SettingsAttentionEvaluator.swift b/Cotabby/Support/Settings/SettingsAttentionEvaluator.swift similarity index 100% rename from Cotabby/Support/SettingsAttentionEvaluator.swift rename to Cotabby/Support/Settings/SettingsAttentionEvaluator.swift diff --git a/Cotabby/Support/SettingsSearchRanker.swift b/Cotabby/Support/Settings/SettingsSearchRanker.swift similarity index 100% rename from Cotabby/Support/SettingsSearchRanker.swift rename to Cotabby/Support/Settings/SettingsSearchRanker.swift diff --git a/Cotabby/Support/SuggestionSettingsStore.swift b/Cotabby/Support/Settings/SuggestionSettingsStore.swift similarity index 100% rename from Cotabby/Support/SuggestionSettingsStore.swift rename to Cotabby/Support/Settings/SuggestionSettingsStore.swift diff --git a/Cotabby/Support/CurrentWordExtractor.swift b/Cotabby/Support/Spelling/CurrentWordExtractor.swift similarity index 100% rename from Cotabby/Support/CurrentWordExtractor.swift rename to Cotabby/Support/Spelling/CurrentWordExtractor.swift diff --git a/Cotabby/Support/SpellingLanguageResolver.swift b/Cotabby/Support/Spelling/SpellingLanguageResolver.swift similarity index 100% rename from Cotabby/Support/SpellingLanguageResolver.swift rename to Cotabby/Support/Spelling/SpellingLanguageResolver.swift diff --git a/Cotabby/Support/SymSpell.swift b/Cotabby/Support/Spelling/SymSpell.swift similarity index 100% rename from Cotabby/Support/SymSpell.swift rename to Cotabby/Support/Spelling/SymSpell.swift diff --git a/Cotabby/Support/TypoCaseTransfer.swift b/Cotabby/Support/Spelling/TypoCaseTransfer.swift similarity index 100% rename from Cotabby/Support/TypoCaseTransfer.swift rename to Cotabby/Support/Spelling/TypoCaseTransfer.swift diff --git a/Cotabby/Support/TypoGate.swift b/Cotabby/Support/Spelling/TypoGate.swift similarity index 100% rename from Cotabby/Support/TypoGate.swift rename to Cotabby/Support/Spelling/TypoGate.swift diff --git a/Cotabby/Support/CompletionSeamGuard.swift b/Cotabby/Support/Suggestion/CompletionSeamGuard.swift similarity index 100% rename from Cotabby/Support/CompletionSeamGuard.swift rename to Cotabby/Support/Suggestion/CompletionSeamGuard.swift diff --git a/Cotabby/Support/ConfidenceSuppressionPolicy.swift b/Cotabby/Support/Suggestion/ConfidenceSuppressionPolicy.swift similarity index 100% rename from Cotabby/Support/ConfidenceSuppressionPolicy.swift rename to Cotabby/Support/Suggestion/ConfidenceSuppressionPolicy.swift diff --git a/Cotabby/Support/DebouncePolicy.swift b/Cotabby/Support/Suggestion/DebouncePolicy.swift similarity index 100% rename from Cotabby/Support/DebouncePolicy.swift rename to Cotabby/Support/Suggestion/DebouncePolicy.swift diff --git a/Cotabby/Support/InsertedTextAdvance.swift b/Cotabby/Support/Suggestion/InsertedTextAdvance.swift similarity index 100% rename from Cotabby/Support/InsertedTextAdvance.swift rename to Cotabby/Support/Suggestion/InsertedTextAdvance.swift diff --git a/Cotabby/Support/InsertionSafetyGate.swift b/Cotabby/Support/Suggestion/InsertionSafetyGate.swift similarity index 100% rename from Cotabby/Support/InsertionSafetyGate.swift rename to Cotabby/Support/Suggestion/InsertionSafetyGate.swift diff --git a/Cotabby/Support/InsertionStrategySelector.swift b/Cotabby/Support/Suggestion/InsertionStrategySelector.swift similarity index 100% rename from Cotabby/Support/InsertionStrategySelector.swift rename to Cotabby/Support/Suggestion/InsertionStrategySelector.swift diff --git a/Cotabby/Support/MidWordContinuationPolicy.swift b/Cotabby/Support/Suggestion/MidWordContinuationPolicy.swift similarity index 100% rename from Cotabby/Support/MidWordContinuationPolicy.swift rename to Cotabby/Support/Suggestion/MidWordContinuationPolicy.swift diff --git a/Cotabby/Support/SentenceBoundaryClassifier.swift b/Cotabby/Support/Suggestion/SentenceBoundaryClassifier.swift similarity index 100% rename from Cotabby/Support/SentenceBoundaryClassifier.swift rename to Cotabby/Support/Suggestion/SentenceBoundaryClassifier.swift diff --git a/Cotabby/Support/SpeculativeAcceptanceContext.swift b/Cotabby/Support/Suggestion/SpeculativeAcceptanceContext.swift similarity index 100% rename from Cotabby/Support/SpeculativeAcceptanceContext.swift rename to Cotabby/Support/Suggestion/SpeculativeAcceptanceContext.swift diff --git a/Cotabby/Support/StreamedGhostTextPolicy.swift b/Cotabby/Support/Suggestion/StreamedGhostTextPolicy.swift similarity index 100% rename from Cotabby/Support/StreamedGhostTextPolicy.swift rename to Cotabby/Support/Suggestion/StreamedGhostTextPolicy.swift diff --git a/Cotabby/Support/SuggestionAvailabilityEvaluator.swift b/Cotabby/Support/Suggestion/SuggestionAvailabilityEvaluator.swift similarity index 100% rename from Cotabby/Support/SuggestionAvailabilityEvaluator.swift rename to Cotabby/Support/Suggestion/SuggestionAvailabilityEvaluator.swift diff --git a/Cotabby/Support/SuggestionRequestFactory.swift b/Cotabby/Support/Suggestion/SuggestionRequestFactory.swift similarity index 100% rename from Cotabby/Support/SuggestionRequestFactory.swift rename to Cotabby/Support/Suggestion/SuggestionRequestFactory.swift diff --git a/Cotabby/Support/SuggestionSessionReconciler.swift b/Cotabby/Support/Suggestion/SuggestionSessionReconciler.swift similarity index 100% rename from Cotabby/Support/SuggestionSessionReconciler.swift rename to Cotabby/Support/Suggestion/SuggestionSessionReconciler.swift diff --git a/Cotabby/Support/SuggestionTextNormalizer.swift b/Cotabby/Support/Suggestion/SuggestionTextNormalizer.swift similarity index 100% rename from Cotabby/Support/SuggestionTextNormalizer.swift rename to Cotabby/Support/Suggestion/SuggestionTextNormalizer.swift diff --git a/Cotabby/Support/TrailingDuplicationFilter.swift b/Cotabby/Support/Suggestion/TrailingDuplicationFilter.swift similarity index 100% rename from Cotabby/Support/TrailingDuplicationFilter.swift rename to Cotabby/Support/Suggestion/TrailingDuplicationFilter.swift diff --git a/Cotabby/Support/BundleVersion.swift b/Cotabby/Support/Utilities/BundleVersion.swift similarity index 100% rename from Cotabby/Support/BundleVersion.swift rename to Cotabby/Support/Utilities/BundleVersion.swift diff --git a/Cotabby/Support/WordCountFormatter.swift b/Cotabby/Support/Utilities/WordCountFormatter.swift similarity index 100% rename from Cotabby/Support/WordCountFormatter.swift rename to Cotabby/Support/Utilities/WordCountFormatter.swift diff --git a/Cotabby/UI/CotabbyBrand.swift b/Cotabby/UI/Components/CotabbyBrand.swift similarity index 100% rename from Cotabby/UI/CotabbyBrand.swift rename to Cotabby/UI/Components/CotabbyBrand.swift diff --git a/Cotabby/UI/KeycapView.swift b/Cotabby/UI/Components/KeycapView.swift similarity index 100% rename from Cotabby/UI/KeycapView.swift rename to Cotabby/UI/Components/KeycapView.swift diff --git a/Cotabby/UI/PopupChrome.swift b/Cotabby/UI/Components/PopupChrome.swift similarity index 100% rename from Cotabby/UI/PopupChrome.swift rename to Cotabby/UI/Components/PopupChrome.swift diff --git a/Cotabby/UI/ScreenFrameReader.swift b/Cotabby/UI/Components/ScreenFrameReader.swift similarity index 100% rename from Cotabby/UI/ScreenFrameReader.swift rename to Cotabby/UI/Components/ScreenFrameReader.swift diff --git a/Cotabby/UI/TagChip.swift b/Cotabby/UI/Components/TagChip.swift similarity index 100% rename from Cotabby/UI/TagChip.swift rename to Cotabby/UI/Components/TagChip.swift diff --git a/Cotabby/UI/TickMarkSlider.swift b/Cotabby/UI/Components/TickMarkSlider.swift similarity index 100% rename from Cotabby/UI/TickMarkSlider.swift rename to Cotabby/UI/Components/TickMarkSlider.swift diff --git a/Cotabby/UI/EmojiPickerView.swift b/Cotabby/UI/InlineFeatures/EmojiPickerView.swift similarity index 100% rename from Cotabby/UI/EmojiPickerView.swift rename to Cotabby/UI/InlineFeatures/EmojiPickerView.swift diff --git a/Cotabby/UI/MacroReferenceSheet.swift b/Cotabby/UI/InlineFeatures/MacroReferenceSheet.swift similarity index 100% rename from Cotabby/UI/MacroReferenceSheet.swift rename to Cotabby/UI/InlineFeatures/MacroReferenceSheet.swift diff --git a/Cotabby/UI/MenuBarPopoverDismisser.swift b/Cotabby/UI/MenuBar/MenuBarPopoverDismisser.swift similarity index 100% rename from Cotabby/UI/MenuBarPopoverDismisser.swift rename to Cotabby/UI/MenuBar/MenuBarPopoverDismisser.swift diff --git a/Cotabby/UI/MenuBarPresentationObserver.swift b/Cotabby/UI/MenuBar/MenuBarPresentationObserver.swift similarity index 100% rename from Cotabby/UI/MenuBarPresentationObserver.swift rename to Cotabby/UI/MenuBar/MenuBarPresentationObserver.swift diff --git a/Cotabby/UI/MenuBarSections.swift b/Cotabby/UI/MenuBar/MenuBarSections.swift similarity index 100% rename from Cotabby/UI/MenuBarSections.swift rename to Cotabby/UI/MenuBar/MenuBarSections.swift diff --git a/Cotabby/UI/MenuBarStatusLabelView.swift b/Cotabby/UI/MenuBar/MenuBarStatusLabelView.swift similarity index 100% rename from Cotabby/UI/MenuBarStatusLabelView.swift rename to Cotabby/UI/MenuBar/MenuBarStatusLabelView.swift diff --git a/Cotabby/UI/MenuBarView.swift b/Cotabby/UI/MenuBar/MenuBarView.swift similarity index 100% rename from Cotabby/UI/MenuBarView.swift rename to Cotabby/UI/MenuBar/MenuBarView.swift diff --git a/Cotabby/UI/FieldEdgeIconIndicatorView.swift b/Cotabby/UI/Overlays/FieldEdgeIconIndicatorView.swift similarity index 100% rename from Cotabby/UI/FieldEdgeIconIndicatorView.swift rename to Cotabby/UI/Overlays/FieldEdgeIconIndicatorView.swift diff --git a/Cotabby/UI/InlinePreviewView.swift b/Cotabby/UI/Overlays/InlinePreviewView.swift similarity index 100% rename from Cotabby/UI/InlinePreviewView.swift rename to Cotabby/UI/Overlays/InlinePreviewView.swift diff --git a/Cotabby/UI/CustomRulesEditor.swift b/Cotabby/UI/Settings/Components/CustomRulesEditor.swift similarity index 100% rename from Cotabby/UI/CustomRulesEditor.swift rename to Cotabby/UI/Settings/Components/CustomRulesEditor.swift diff --git a/Cotabby/UI/KeyRecorderView.swift b/Cotabby/UI/Settings/Components/KeyRecorderView.swift similarity index 100% rename from Cotabby/UI/KeyRecorderView.swift rename to Cotabby/UI/Settings/Components/KeyRecorderView.swift diff --git a/Cotabby/UI/LanguageTagsEditor.swift b/Cotabby/UI/Settings/Components/LanguageTagsEditor.swift similarity index 100% rename from Cotabby/UI/LanguageTagsEditor.swift rename to Cotabby/UI/Settings/Components/LanguageTagsEditor.swift diff --git a/Cotabby/UI/SpellingDictionaryPicker.swift b/Cotabby/UI/Settings/Components/SpellingDictionaryPicker.swift similarity index 100% rename from Cotabby/UI/SpellingDictionaryPicker.swift rename to Cotabby/UI/Settings/Components/SpellingDictionaryPicker.swift diff --git a/Cotabby/UI/DownloadableModelCatalogView.swift b/Cotabby/UI/Settings/ModelManagement/DownloadableModelCatalogView.swift similarity index 100% rename from Cotabby/UI/DownloadableModelCatalogView.swift rename to Cotabby/UI/Settings/ModelManagement/DownloadableModelCatalogView.swift diff --git a/Cotabby/UI/HuggingFaceModelBrowserView.swift b/Cotabby/UI/Settings/ModelManagement/HuggingFaceModelBrowserView.swift similarity index 100% rename from Cotabby/UI/HuggingFaceModelBrowserView.swift rename to Cotabby/UI/Settings/ModelManagement/HuggingFaceModelBrowserView.swift diff --git a/CotabbyTests/EmojiPickerControllerTests.swift b/CotabbyTests/App/InlineFeatures/EmojiPickerControllerTests.swift similarity index 100% rename from CotabbyTests/EmojiPickerControllerTests.swift rename to CotabbyTests/App/InlineFeatures/EmojiPickerControllerTests.swift diff --git a/CotabbyTests/SuggestionCaretLayoutRepairTests.swift b/CotabbyTests/App/Suggestion/SuggestionCaretLayoutRepairTests.swift similarity index 100% rename from CotabbyTests/SuggestionCaretLayoutRepairTests.swift rename to CotabbyTests/App/Suggestion/SuggestionCaretLayoutRepairTests.swift diff --git a/CotabbyTests/SuggestionCoordinatorAcceptanceTests.swift b/CotabbyTests/App/Suggestion/SuggestionCoordinatorAcceptanceTests.swift similarity index 100% rename from CotabbyTests/SuggestionCoordinatorAcceptanceTests.swift rename to CotabbyTests/App/Suggestion/SuggestionCoordinatorAcceptanceTests.swift diff --git a/CotabbyTests/SuggestionCoordinatorInputTests.swift b/CotabbyTests/App/Suggestion/SuggestionCoordinatorInputTests.swift similarity index 100% rename from CotabbyTests/SuggestionCoordinatorInputTests.swift rename to CotabbyTests/App/Suggestion/SuggestionCoordinatorInputTests.swift diff --git a/CotabbyTests/SuggestionCoordinatorLifecycleTests.swift b/CotabbyTests/App/Suggestion/SuggestionCoordinatorLifecycleTests.swift similarity index 100% rename from CotabbyTests/SuggestionCoordinatorLifecycleTests.swift rename to CotabbyTests/App/Suggestion/SuggestionCoordinatorLifecycleTests.swift diff --git a/CotabbyTests/SuggestionCoordinatorPredictionTests.swift b/CotabbyTests/App/Suggestion/SuggestionCoordinatorPredictionTests.swift similarity index 100% rename from CotabbyTests/SuggestionCoordinatorPredictionTests.swift rename to CotabbyTests/App/Suggestion/SuggestionCoordinatorPredictionTests.swift diff --git a/CotabbyTests/SuggestionFocusFreshnessTests.swift b/CotabbyTests/App/Suggestion/SuggestionFocusFreshnessTests.swift similarity index 100% rename from CotabbyTests/SuggestionFocusFreshnessTests.swift rename to CotabbyTests/App/Suggestion/SuggestionFocusFreshnessTests.swift diff --git a/CotabbyTests/SuggestionStateHelperTests.swift b/CotabbyTests/App/Suggestion/SuggestionStateHelperTests.swift similarity index 100% rename from CotabbyTests/SuggestionStateHelperTests.swift rename to CotabbyTests/App/Suggestion/SuggestionStateHelperTests.swift diff --git a/CotabbyTests/FoundationModelDriftEvalTests.swift b/CotabbyTests/Evals/FoundationModelDriftEvalTests.swift similarity index 100% rename from CotabbyTests/FoundationModelDriftEvalTests.swift rename to CotabbyTests/Evals/FoundationModelDriftEvalTests.swift diff --git a/CotabbyTests/LlamaEvalScoring.swift b/CotabbyTests/Evals/LlamaEvalScoring.swift similarity index 100% rename from CotabbyTests/LlamaEvalScoring.swift rename to CotabbyTests/Evals/LlamaEvalScoring.swift diff --git a/CotabbyTests/LlamaEvalScoringTests.swift b/CotabbyTests/Evals/LlamaEvalScoringTests.swift similarity index 100% rename from CotabbyTests/LlamaEvalScoringTests.swift rename to CotabbyTests/Evals/LlamaEvalScoringTests.swift diff --git a/CotabbyTests/LlamaSuggestionEvalTests.swift b/CotabbyTests/Evals/LlamaSuggestionEvalTests.swift similarity index 91% rename from CotabbyTests/LlamaSuggestionEvalTests.swift rename to CotabbyTests/Evals/LlamaSuggestionEvalTests.swift index 9a781a2f..b6eb36eb 100644 --- a/CotabbyTests/LlamaSuggestionEvalTests.swift +++ b/CotabbyTests/Evals/LlamaSuggestionEvalTests.swift @@ -159,11 +159,12 @@ final class LlamaSuggestionEvalTests: XCTestCase { } /// Repo-relative artifact path derived from this source file so the output lands in the - /// gitignored build/ directory regardless of the test process working directory. + /// gitignored build/ directory regardless of the test process working directory or this + /// test file's nesting depth. private static func writeArtifact(_ report: LlamaEvalReport) throws { - let repoRoot = URL(fileURLWithPath: #filePath) - .deletingLastPathComponent() - .deletingLastPathComponent() + guard let repoRoot = repositoryRoot(startingAt: URL(fileURLWithPath: #filePath)) else { + throw XCTSkip("Could not find project.yml above the eval source path") + } let directory = repoRoot.appendingPathComponent("build/eval", isDirectory: true) try FileManager.default.createDirectory(at: directory, withIntermediateDirectories: true) let stem = report.modelLabel.replacingOccurrences(of: ".gguf", with: "") @@ -171,5 +172,18 @@ final class LlamaSuggestionEvalTests: XCTestCase { try report.jsonArtifact().write(to: url) print("Eval artifact written to \(url.path)") } + + private static func repositoryRoot(startingAt sourceURL: URL) -> URL? { + var candidate = sourceURL.deletingLastPathComponent() + while candidate.path != "/" { + if FileManager.default.fileExists( + atPath: candidate.appendingPathComponent("project.yml").path + ) { + return candidate + } + candidate.deleteLastPathComponent() + } + return nil + } #endif } diff --git a/CotabbyTests/ExtendedContextTests.swift b/CotabbyTests/Models/Context/ExtendedContextTests.swift similarity index 100% rename from CotabbyTests/ExtendedContextTests.swift rename to CotabbyTests/Models/Context/ExtendedContextTests.swift diff --git a/CotabbyTests/PermissionAndContextModelTests.swift b/CotabbyTests/Models/Context/PermissionAndContextModelTests.swift similarity index 100% rename from CotabbyTests/PermissionAndContextModelTests.swift rename to CotabbyTests/Models/Context/PermissionAndContextModelTests.swift diff --git a/CotabbyTests/EmojiPickerModelsTests.swift b/CotabbyTests/Models/Emoji/EmojiPickerModelsTests.swift similarity index 100% rename from CotabbyTests/EmojiPickerModelsTests.swift rename to CotabbyTests/Models/Emoji/EmojiPickerModelsTests.swift diff --git a/CotabbyTests/EmojiUsageStoreTests.swift b/CotabbyTests/Models/Emoji/EmojiUsageStoreTests.swift similarity index 100% rename from CotabbyTests/EmojiUsageStoreTests.swift rename to CotabbyTests/Models/Emoji/EmojiUsageStoreTests.swift diff --git a/CotabbyTests/FocusModelsTests.swift b/CotabbyTests/Models/Focus/FocusModelsTests.swift similarity index 100% rename from CotabbyTests/FocusModelsTests.swift rename to CotabbyTests/Models/Focus/FocusModelsTests.swift diff --git a/CotabbyTests/FocusTrackingModelTests.swift b/CotabbyTests/Models/Focus/FocusTrackingModelTests.swift similarity index 100% rename from CotabbyTests/FocusTrackingModelTests.swift rename to CotabbyTests/Models/Focus/FocusTrackingModelTests.swift diff --git a/CotabbyTests/HuggingFaceModelsTests.swift b/CotabbyTests/Models/Runtime/HuggingFaceModelsTests.swift similarity index 100% rename from CotabbyTests/HuggingFaceModelsTests.swift rename to CotabbyTests/Models/Runtime/HuggingFaceModelsTests.swift diff --git a/CotabbyTests/PerformanceMetricsStoreTests.swift b/CotabbyTests/Models/Runtime/PerformanceMetricsStoreTests.swift similarity index 100% rename from CotabbyTests/PerformanceMetricsStoreTests.swift rename to CotabbyTests/Models/Runtime/PerformanceMetricsStoreTests.swift diff --git a/CotabbyTests/RuntimeBootstrapModelTests.swift b/CotabbyTests/Models/Runtime/RuntimeBootstrapModelTests.swift similarity index 100% rename from CotabbyTests/RuntimeBootstrapModelTests.swift rename to CotabbyTests/Models/Runtime/RuntimeBootstrapModelTests.swift diff --git a/CotabbyTests/SystemMetricsStoreTests.swift b/CotabbyTests/Models/Runtime/SystemMetricsStoreTests.swift similarity index 100% rename from CotabbyTests/SystemMetricsStoreTests.swift rename to CotabbyTests/Models/Runtime/SystemMetricsStoreTests.swift diff --git a/CotabbyTests/CustomRulesTests.swift b/CotabbyTests/Models/Settings/CustomRulesTests.swift similarity index 100% rename from CotabbyTests/CustomRulesTests.swift rename to CotabbyTests/Models/Settings/CustomRulesTests.swift diff --git a/CotabbyTests/LanguageSupportTests.swift b/CotabbyTests/Models/Settings/LanguageSupportTests.swift similarity index 100% rename from CotabbyTests/LanguageSupportTests.swift rename to CotabbyTests/Models/Settings/LanguageSupportTests.swift diff --git a/CotabbyTests/PerDomainDisableSettingsTests.swift b/CotabbyTests/Models/Settings/PerDomainDisableSettingsTests.swift similarity index 100% rename from CotabbyTests/PerDomainDisableSettingsTests.swift rename to CotabbyTests/Models/Settings/PerDomainDisableSettingsTests.swift diff --git a/CotabbyTests/ShortcutConflictTests.swift b/CotabbyTests/Models/Settings/ShortcutConflictTests.swift similarity index 100% rename from CotabbyTests/ShortcutConflictTests.swift rename to CotabbyTests/Models/Settings/ShortcutConflictTests.swift diff --git a/CotabbyTests/SuggestionSettingsModelTests.swift b/CotabbyTests/Models/Settings/SuggestionSettingsModelTests.swift similarity index 100% rename from CotabbyTests/SuggestionSettingsModelTests.swift rename to CotabbyTests/Models/Settings/SuggestionSettingsModelTests.swift diff --git a/CotabbyTests/ModelAndPresentationValueTests.swift b/CotabbyTests/Models/Suggestion/ModelAndPresentationValueTests.swift similarity index 100% rename from CotabbyTests/ModelAndPresentationValueTests.swift rename to CotabbyTests/Models/Suggestion/ModelAndPresentationValueTests.swift diff --git a/CotabbyTests/SuggestionEngineModelsTests.swift b/CotabbyTests/Models/Suggestion/SuggestionEngineModelsTests.swift similarity index 100% rename from CotabbyTests/SuggestionEngineModelsTests.swift rename to CotabbyTests/Models/Suggestion/SuggestionEngineModelsTests.swift diff --git a/CotabbyTests/SuggestionPauseModelsTests.swift b/CotabbyTests/Models/Suggestion/SuggestionPauseModelsTests.swift similarity index 100% rename from CotabbyTests/SuggestionPauseModelsTests.swift rename to CotabbyTests/Models/Suggestion/SuggestionPauseModelsTests.swift diff --git a/CotabbyTests/SuggestionQualityMetricsStoreTests.swift b/CotabbyTests/Models/Suggestion/SuggestionQualityMetricsStoreTests.swift similarity index 100% rename from CotabbyTests/SuggestionQualityMetricsStoreTests.swift rename to CotabbyTests/Models/Suggestion/SuggestionQualityMetricsStoreTests.swift diff --git a/CotabbyTests/AXTextGeometryResolverTests.swift b/CotabbyTests/Services/Focus/AXTextGeometryResolverTests.swift similarity index 100% rename from CotabbyTests/AXTextGeometryResolverTests.swift rename to CotabbyTests/Services/Focus/AXTextGeometryResolverTests.swift diff --git a/CotabbyTests/AXTreeDumpWriterTests.swift b/CotabbyTests/Services/Focus/AXTreeDumpWriterTests.swift similarity index 100% rename from CotabbyTests/AXTreeDumpWriterTests.swift rename to CotabbyTests/Services/Focus/AXTreeDumpWriterTests.swift diff --git a/CotabbyTests/CaretRunPlacementTests.swift b/CotabbyTests/Services/Focus/CaretRunPlacementTests.swift similarity index 100% rename from CotabbyTests/CaretRunPlacementTests.swift rename to CotabbyTests/Services/Focus/CaretRunPlacementTests.swift diff --git a/CotabbyTests/DeepGeometryWalkThrottleTests.swift b/CotabbyTests/Services/Focus/DeepGeometryWalkThrottleTests.swift similarity index 100% rename from CotabbyTests/DeepGeometryWalkThrottleTests.swift rename to CotabbyTests/Services/Focus/DeepGeometryWalkThrottleTests.swift diff --git a/CotabbyTests/FocusSessionScopedCacheTests.swift b/CotabbyTests/Services/Focus/FocusSessionScopedCacheTests.swift similarity index 100% rename from CotabbyTests/FocusSessionScopedCacheTests.swift rename to CotabbyTests/Services/Focus/FocusSessionScopedCacheTests.swift diff --git a/CotabbyTests/FocusSnapshotResolverLiveTests.swift b/CotabbyTests/Services/Focus/FocusSnapshotResolverLiveTests.swift similarity index 100% rename from CotabbyTests/FocusSnapshotResolverLiveTests.swift rename to CotabbyTests/Services/Focus/FocusSnapshotResolverLiveTests.swift diff --git a/CotabbyTests/FocusSnapshotResolverSelectionTests.swift b/CotabbyTests/Services/Focus/FocusSnapshotResolverSelectionTests.swift similarity index 100% rename from CotabbyTests/FocusSnapshotResolverSelectionTests.swift rename to CotabbyTests/Services/Focus/FocusSnapshotResolverSelectionTests.swift diff --git a/CotabbyTests/StaticTextRunWalkThrottleTests.swift b/CotabbyTests/Services/Focus/StaticTextRunWalkThrottleTests.swift similarity index 100% rename from CotabbyTests/StaticTextRunWalkThrottleTests.swift rename to CotabbyTests/Services/Focus/StaticTextRunWalkThrottleTests.swift diff --git a/CotabbyTests/InputMonitorTests.swift b/CotabbyTests/Services/Input/InputMonitorTests.swift similarity index 100% rename from CotabbyTests/InputMonitorTests.swift rename to CotabbyTests/Services/Input/InputMonitorTests.swift diff --git a/CotabbyTests/InputSuppressionControllerTests.swift b/CotabbyTests/Services/Input/InputSuppressionControllerTests.swift similarity index 100% rename from CotabbyTests/InputSuppressionControllerTests.swift rename to CotabbyTests/Services/Input/InputSuppressionControllerTests.swift diff --git a/CotabbyTests/DownloadFileRescuerTests.swift b/CotabbyTests/Services/ModelManagement/DownloadFileRescuerTests.swift similarity index 100% rename from CotabbyTests/DownloadFileRescuerTests.swift rename to CotabbyTests/Services/ModelManagement/DownloadFileRescuerTests.swift diff --git a/CotabbyTests/ModelFileValidatorTests.swift b/CotabbyTests/Services/ModelManagement/ModelFileValidatorTests.swift similarity index 100% rename from CotabbyTests/ModelFileValidatorTests.swift rename to CotabbyTests/Services/ModelManagement/ModelFileValidatorTests.swift diff --git a/CotabbyTests/FoundationModelAvailabilityServiceTests.swift b/CotabbyTests/Services/Runtime/FoundationModelAvailabilityServiceTests.swift similarity index 100% rename from CotabbyTests/FoundationModelAvailabilityServiceTests.swift rename to CotabbyTests/Services/Runtime/FoundationModelAvailabilityServiceTests.swift diff --git a/CotabbyTests/LlamaDecodeGateDefaultsTests.swift b/CotabbyTests/Services/Runtime/LlamaDecodeGateDefaultsTests.swift similarity index 100% rename from CotabbyTests/LlamaDecodeGateDefaultsTests.swift rename to CotabbyTests/Services/Runtime/LlamaDecodeGateDefaultsTests.swift diff --git a/CotabbyTests/LlamaPromptCacheHintTrackerTests.swift b/CotabbyTests/Services/Runtime/LlamaPromptCacheHintTrackerTests.swift similarity index 100% rename from CotabbyTests/LlamaPromptCacheHintTrackerTests.swift rename to CotabbyTests/Services/Runtime/LlamaPromptCacheHintTrackerTests.swift diff --git a/CotabbyTests/LlamaSuggestionEngineCancellationTests.swift b/CotabbyTests/Services/Runtime/LlamaSuggestionEngineCancellationTests.swift similarity index 100% rename from CotabbyTests/LlamaSuggestionEngineCancellationTests.swift rename to CotabbyTests/Services/Runtime/LlamaSuggestionEngineCancellationTests.swift diff --git a/CotabbyTests/LlamaSuggestionEnginePrewarmTests.swift b/CotabbyTests/Services/Runtime/LlamaSuggestionEnginePrewarmTests.swift similarity index 100% rename from CotabbyTests/LlamaSuggestionEnginePrewarmTests.swift rename to CotabbyTests/Services/Runtime/LlamaSuggestionEnginePrewarmTests.swift diff --git a/CotabbyTests/LlamaSuggestionEngineStreamingTests.swift b/CotabbyTests/Services/Runtime/LlamaSuggestionEngineStreamingTests.swift similarity index 100% rename from CotabbyTests/LlamaSuggestionEngineStreamingTests.swift rename to CotabbyTests/Services/Runtime/LlamaSuggestionEngineStreamingTests.swift diff --git a/CotabbyTests/OllamaPreloadWorkControllerTests.swift b/CotabbyTests/Services/Runtime/OllamaPreloadWorkControllerTests.swift similarity index 100% rename from CotabbyTests/OllamaPreloadWorkControllerTests.swift rename to CotabbyTests/Services/Runtime/OllamaPreloadWorkControllerTests.swift diff --git a/CotabbyTests/OpenAICompatibleAPIClientTests.swift b/CotabbyTests/Services/Runtime/OpenAICompatibleAPIClientTests.swift similarity index 100% rename from CotabbyTests/OpenAICompatibleAPIClientTests.swift rename to CotabbyTests/Services/Runtime/OpenAICompatibleAPIClientTests.swift diff --git a/CotabbyTests/SuggestionEngineRouterTests.swift b/CotabbyTests/Services/Runtime/SuggestionEngineRouterTests.swift similarity index 100% rename from CotabbyTests/SuggestionEngineRouterTests.swift rename to CotabbyTests/Services/Runtime/SuggestionEngineRouterTests.swift diff --git a/CotabbyTests/SymSpellCorrectorTests.swift b/CotabbyTests/Services/Spelling/SymSpellCorrectorTests.swift similarity index 100% rename from CotabbyTests/SymSpellCorrectorTests.swift rename to CotabbyTests/Services/Spelling/SymSpellCorrectorTests.swift diff --git a/CotabbyTests/SuggestionInteractionStateTests.swift b/CotabbyTests/Services/Suggestion/SuggestionInteractionStateTests.swift similarity index 100% rename from CotabbyTests/SuggestionInteractionStateTests.swift rename to CotabbyTests/Services/Suggestion/SuggestionInteractionStateTests.swift diff --git a/CotabbyTests/ScreenTextExtractorTests.swift b/CotabbyTests/Services/Visual/ScreenTextExtractorTests.swift similarity index 100% rename from CotabbyTests/ScreenTextExtractorTests.swift rename to CotabbyTests/Services/Visual/ScreenTextExtractorTests.swift diff --git a/CotabbyTests/ScreenshotContextGeneratorTests.swift b/CotabbyTests/Services/Visual/ScreenshotContextGeneratorTests.swift similarity index 100% rename from CotabbyTests/ScreenshotContextGeneratorTests.swift rename to CotabbyTests/Services/Visual/ScreenshotContextGeneratorTests.swift diff --git a/CotabbyTests/AXHelperTests.swift b/CotabbyTests/Support/Accessibility/AXHelperTests.swift similarity index 100% rename from CotabbyTests/AXHelperTests.swift rename to CotabbyTests/Support/Accessibility/AXHelperTests.swift diff --git a/CotabbyTests/CalendarAccessibilityCapturePolicyTests.swift b/CotabbyTests/Support/Accessibility/CalendarAccessibilityCapturePolicyTests.swift similarity index 100% rename from CotabbyTests/CalendarAccessibilityCapturePolicyTests.swift rename to CotabbyTests/Support/Accessibility/CalendarAccessibilityCapturePolicyTests.swift diff --git a/CotabbyTests/PermissionOverlayTrackerTests.swift b/CotabbyTests/Support/Accessibility/PermissionOverlayTrackerTests.swift similarity index 100% rename from CotabbyTests/PermissionOverlayTrackerTests.swift rename to CotabbyTests/Support/Accessibility/PermissionOverlayTrackerTests.swift diff --git a/CotabbyTests/SecureFieldDetectorTests.swift b/CotabbyTests/Support/Accessibility/SecureFieldDetectorTests.swift similarity index 100% rename from CotabbyTests/SecureFieldDetectorTests.swift rename to CotabbyTests/Support/Accessibility/SecureFieldDetectorTests.swift diff --git a/CotabbyTests/SelfCaptureGateTests.swift b/CotabbyTests/Support/Accessibility/SelfCaptureGateTests.swift similarity index 100% rename from CotabbyTests/SelfCaptureGateTests.swift rename to CotabbyTests/Support/Accessibility/SelfCaptureGateTests.swift diff --git a/CotabbyTests/WebContentFieldDetectorTests.swift b/CotabbyTests/Support/Accessibility/WebContentFieldDetectorTests.swift similarity index 100% rename from CotabbyTests/WebContentFieldDetectorTests.swift rename to CotabbyTests/Support/Accessibility/WebContentFieldDetectorTests.swift diff --git a/CotabbyTests/ClipboardContentDistillerTests.swift b/CotabbyTests/Support/Context/ClipboardContentDistillerTests.swift similarity index 100% rename from CotabbyTests/ClipboardContentDistillerTests.swift rename to CotabbyTests/Support/Context/ClipboardContentDistillerTests.swift diff --git a/CotabbyTests/ClipboardRelevanceFilterTests.swift b/CotabbyTests/Support/Context/ClipboardRelevanceFilterTests.swift similarity index 100% rename from CotabbyTests/ClipboardRelevanceFilterTests.swift rename to CotabbyTests/Support/Context/ClipboardRelevanceFilterTests.swift diff --git a/CotabbyTests/OCRTextHygieneTests.swift b/CotabbyTests/Support/Context/OCRTextHygieneTests.swift similarity index 100% rename from CotabbyTests/OCRTextHygieneTests.swift rename to CotabbyTests/Support/Context/OCRTextHygieneTests.swift diff --git a/CotabbyTests/PromptContextSanitizerTests.swift b/CotabbyTests/Support/Context/PromptContextSanitizerTests.swift similarity index 100% rename from CotabbyTests/PromptContextSanitizerTests.swift rename to CotabbyTests/Support/Context/PromptContextSanitizerTests.swift diff --git a/CotabbyTests/SurfaceContextComposerTests.swift b/CotabbyTests/Support/Context/SurfaceContextComposerTests.swift similarity index 100% rename from CotabbyTests/SurfaceContextComposerTests.swift rename to CotabbyTests/Support/Context/SurfaceContextComposerTests.swift diff --git a/CotabbyTests/VisualContextStartCoalescerTests.swift b/CotabbyTests/Support/Context/VisualContextStartCoalescerTests.swift similarity index 97% rename from CotabbyTests/VisualContextStartCoalescerTests.swift rename to CotabbyTests/Support/Context/VisualContextStartCoalescerTests.swift index 11bfacb4..3e5588ef 100644 --- a/CotabbyTests/VisualContextStartCoalescerTests.swift +++ b/CotabbyTests/Support/Context/VisualContextStartCoalescerTests.swift @@ -3,7 +3,7 @@ import XCTest /// Verifies the pure coalescing decision behind `VisualContextCoordinator.startSessionIfNeeded`. /// This is the #280 fix: focus flapping (Chrome losing and re-acquiring the AX field) must not -/// restart the screenshot -> OCR -> summarize pipeline on every flap. +/// restart the screenshot -> OCR -> cleanup pipeline on every flap. final class VisualContextStartCoalescerTests: XCTestCase { private func id(_ element: String, _ sequence: UInt64) -> VisualContextFieldIdentity { VisualContextFieldIdentity(elementIdentifier: element, focusChangeSequence: sequence) diff --git a/CotabbyTests/EmojiCatalogMatcherTests.swift b/CotabbyTests/Support/Emoji/EmojiCatalogMatcherTests.swift similarity index 100% rename from CotabbyTests/EmojiCatalogMatcherTests.swift rename to CotabbyTests/Support/Emoji/EmojiCatalogMatcherTests.swift diff --git a/CotabbyTests/EmojiCatalogTests.swift b/CotabbyTests/Support/Emoji/EmojiCatalogTests.swift similarity index 100% rename from CotabbyTests/EmojiCatalogTests.swift rename to CotabbyTests/Support/Emoji/EmojiCatalogTests.swift diff --git a/CotabbyTests/EmojiPickerPanelLayoutTests.swift b/CotabbyTests/Support/Emoji/EmojiPickerPanelLayoutTests.swift similarity index 100% rename from CotabbyTests/EmojiPickerPanelLayoutTests.swift rename to CotabbyTests/Support/Emoji/EmojiPickerPanelLayoutTests.swift diff --git a/CotabbyTests/EmojiPopularityTests.swift b/CotabbyTests/Support/Emoji/EmojiPopularityTests.swift similarity index 100% rename from CotabbyTests/EmojiPopularityTests.swift rename to CotabbyTests/Support/Emoji/EmojiPopularityTests.swift diff --git a/CotabbyTests/EmojiQueryRunTests.swift b/CotabbyTests/Support/Emoji/EmojiQueryRunTests.swift similarity index 100% rename from CotabbyTests/EmojiQueryRunTests.swift rename to CotabbyTests/Support/Emoji/EmojiQueryRunTests.swift diff --git a/CotabbyTests/EmojiRecentsTests.swift b/CotabbyTests/Support/Emoji/EmojiRecentsTests.swift similarity index 100% rename from CotabbyTests/EmojiRecentsTests.swift rename to CotabbyTests/Support/Emoji/EmojiRecentsTests.swift diff --git a/CotabbyTests/EmojiSynonymCatalogTests.swift b/CotabbyTests/Support/Emoji/EmojiSynonymCatalogTests.swift similarity index 100% rename from CotabbyTests/EmojiSynonymCatalogTests.swift rename to CotabbyTests/Support/Emoji/EmojiSynonymCatalogTests.swift diff --git a/CotabbyTests/EmojiTriggerStateMachineTests.swift b/CotabbyTests/Support/Emoji/EmojiTriggerStateMachineTests.swift similarity index 100% rename from CotabbyTests/EmojiTriggerStateMachineTests.swift rename to CotabbyTests/Support/Emoji/EmojiTriggerStateMachineTests.swift diff --git a/CotabbyTests/EmojiVariantResolverTests.swift b/CotabbyTests/Support/Emoji/EmojiVariantResolverTests.swift similarity index 100% rename from CotabbyTests/EmojiVariantResolverTests.swift rename to CotabbyTests/Support/Emoji/EmojiVariantResolverTests.swift diff --git a/CotabbyTests/AppSurfaceClassifierTests.swift b/CotabbyTests/Support/Focus/AppSurfaceClassifierTests.swift similarity index 100% rename from CotabbyTests/AppSurfaceClassifierTests.swift rename to CotabbyTests/Support/Focus/AppSurfaceClassifierTests.swift diff --git a/CotabbyTests/ApplicationBundleMetadataTests.swift b/CotabbyTests/Support/Focus/ApplicationBundleMetadataTests.swift similarity index 100% rename from CotabbyTests/ApplicationBundleMetadataTests.swift rename to CotabbyTests/Support/Focus/ApplicationBundleMetadataTests.swift diff --git a/CotabbyTests/BrowserAppDetectorTests.swift b/CotabbyTests/Support/Focus/BrowserAppDetectorTests.swift similarity index 100% rename from CotabbyTests/BrowserAppDetectorTests.swift rename to CotabbyTests/Support/Focus/BrowserAppDetectorTests.swift diff --git a/CotabbyTests/BrowserDomainTests.swift b/CotabbyTests/Support/Focus/BrowserDomainTests.swift similarity index 100% rename from CotabbyTests/BrowserDomainTests.swift rename to CotabbyTests/Support/Focus/BrowserDomainTests.swift diff --git a/CotabbyTests/FocusCapabilityFlickerGateTests.swift b/CotabbyTests/Support/Focus/FocusCapabilityFlickerGateTests.swift similarity index 100% rename from CotabbyTests/FocusCapabilityFlickerGateTests.swift rename to CotabbyTests/Support/Focus/FocusCapabilityFlickerGateTests.swift diff --git a/CotabbyTests/FocusCapabilityResolverTests.swift b/CotabbyTests/Support/Focus/FocusCapabilityResolverTests.swift similarity index 100% rename from CotabbyTests/FocusCapabilityResolverTests.swift rename to CotabbyTests/Support/Focus/FocusCapabilityResolverTests.swift diff --git a/CotabbyTests/FocusPollBackoffTests.swift b/CotabbyTests/Support/Focus/FocusPollBackoffTests.swift similarity index 100% rename from CotabbyTests/FocusPollBackoffTests.swift rename to CotabbyTests/Support/Focus/FocusPollBackoffTests.swift diff --git a/CotabbyTests/TerminalAppDetectorTests.swift b/CotabbyTests/Support/Focus/TerminalAppDetectorTests.swift similarity index 100% rename from CotabbyTests/TerminalAppDetectorTests.swift rename to CotabbyTests/Support/Focus/TerminalAppDetectorTests.swift diff --git a/CotabbyTests/CompositionInputModeClassifierTests.swift b/CotabbyTests/Support/Input/CompositionInputModeClassifierTests.swift similarity index 100% rename from CotabbyTests/CompositionInputModeClassifierTests.swift rename to CotabbyTests/Support/Input/CompositionInputModeClassifierTests.swift diff --git a/CotabbyTests/KeyCodeLabelsTests.swift b/CotabbyTests/Support/Input/KeyCodeLabelsTests.swift similarity index 100% rename from CotabbyTests/KeyCodeLabelsTests.swift rename to CotabbyTests/Support/Input/KeyCodeLabelsTests.swift diff --git a/CotabbyTests/MarkerSelectionSynthesizerTests.swift b/CotabbyTests/Support/Input/MarkerSelectionSynthesizerTests.swift similarity index 100% rename from CotabbyTests/MarkerSelectionSynthesizerTests.swift rename to CotabbyTests/Support/Input/MarkerSelectionSynthesizerTests.swift diff --git a/CotabbyTests/CotabbyDebugOptionsTests.swift b/CotabbyTests/Support/Logging/CotabbyDebugOptionsTests.swift similarity index 100% rename from CotabbyTests/CotabbyDebugOptionsTests.swift rename to CotabbyTests/Support/Logging/CotabbyDebugOptionsTests.swift diff --git a/CotabbyTests/FileLogHandlerTests.swift b/CotabbyTests/Support/Logging/FileLogHandlerTests.swift similarity index 100% rename from CotabbyTests/FileLogHandlerTests.swift rename to CotabbyTests/Support/Logging/FileLogHandlerTests.swift diff --git a/CotabbyTests/LLMIOFileHandlerTests.swift b/CotabbyTests/Support/Logging/LLMIOFileHandlerTests.swift similarity index 100% rename from CotabbyTests/LLMIOFileHandlerTests.swift rename to CotabbyTests/Support/Logging/LLMIOFileHandlerTests.swift diff --git a/CotabbyTests/RequestIDTests.swift b/CotabbyTests/Support/Logging/RequestIDTests.swift similarity index 100% rename from CotabbyTests/RequestIDTests.swift rename to CotabbyTests/Support/Logging/RequestIDTests.swift diff --git a/CotabbyTests/SuggestionDebugLoggerTests.swift b/CotabbyTests/Support/Logging/SuggestionDebugLoggerTests.swift similarity index 100% rename from CotabbyTests/SuggestionDebugLoggerTests.swift rename to CotabbyTests/Support/Logging/SuggestionDebugLoggerTests.swift diff --git a/CotabbyTests/ArithmeticEvaluatorTests.swift b/CotabbyTests/Support/Macros/ArithmeticEvaluatorTests.swift similarity index 100% rename from CotabbyTests/ArithmeticEvaluatorTests.swift rename to CotabbyTests/Support/Macros/ArithmeticEvaluatorTests.swift diff --git a/CotabbyTests/DateMacroEvaluatorTests.swift b/CotabbyTests/Support/Macros/DateMacroEvaluatorTests.swift similarity index 100% rename from CotabbyTests/DateMacroEvaluatorTests.swift rename to CotabbyTests/Support/Macros/DateMacroEvaluatorTests.swift diff --git a/CotabbyTests/MacroEngineTests.swift b/CotabbyTests/Support/Macros/MacroEngineTests.swift similarity index 100% rename from CotabbyTests/MacroEngineTests.swift rename to CotabbyTests/Support/Macros/MacroEngineTests.swift diff --git a/CotabbyTests/MacroTriggerStateMachineTests.swift b/CotabbyTests/Support/Macros/MacroTriggerStateMachineTests.swift similarity index 100% rename from CotabbyTests/MacroTriggerStateMachineTests.swift rename to CotabbyTests/Support/Macros/MacroTriggerStateMachineTests.swift diff --git a/CotabbyTests/OnboardingFlowStepTests.swift b/CotabbyTests/Support/Onboarding/OnboardingFlowStepTests.swift similarity index 100% rename from CotabbyTests/OnboardingFlowStepTests.swift rename to CotabbyTests/Support/Onboarding/OnboardingFlowStepTests.swift diff --git a/CotabbyTests/OnboardingTemplateFeatureListTests.swift b/CotabbyTests/Support/Onboarding/OnboardingTemplateFeatureListTests.swift similarity index 100% rename from CotabbyTests/OnboardingTemplateFeatureListTests.swift rename to CotabbyTests/Support/Onboarding/OnboardingTemplateFeatureListTests.swift diff --git a/CotabbyTests/OnboardingTemplateRecommenderTests.swift b/CotabbyTests/Support/Onboarding/OnboardingTemplateRecommenderTests.swift similarity index 100% rename from CotabbyTests/OnboardingTemplateRecommenderTests.swift rename to CotabbyTests/Support/Onboarding/OnboardingTemplateRecommenderTests.swift diff --git a/CotabbyTests/OnboardingTemplateTests.swift b/CotabbyTests/Support/Onboarding/OnboardingTemplateTests.swift similarity index 100% rename from CotabbyTests/OnboardingTemplateTests.swift rename to CotabbyTests/Support/Onboarding/OnboardingTemplateTests.swift diff --git a/CotabbyTests/CaretLinePositionTests.swift b/CotabbyTests/Support/Presentation/CaretLinePositionTests.swift similarity index 100% rename from CotabbyTests/CaretLinePositionTests.swift rename to CotabbyTests/Support/Presentation/CaretLinePositionTests.swift diff --git a/CotabbyTests/CompletionRenderModePolicyTests.swift b/CotabbyTests/Support/Presentation/CompletionRenderModePolicyTests.swift similarity index 100% rename from CotabbyTests/CompletionRenderModePolicyTests.swift rename to CotabbyTests/Support/Presentation/CompletionRenderModePolicyTests.swift diff --git a/CotabbyTests/DisplayCoordinateConverterTests.swift b/CotabbyTests/Support/Presentation/DisplayCoordinateConverterTests.swift similarity index 100% rename from CotabbyTests/DisplayCoordinateConverterTests.swift rename to CotabbyTests/Support/Presentation/DisplayCoordinateConverterTests.swift diff --git a/CotabbyTests/GhostFontMetricsTests.swift b/CotabbyTests/Support/Presentation/GhostFontMetricsTests.swift similarity index 100% rename from CotabbyTests/GhostFontMetricsTests.swift rename to CotabbyTests/Support/Presentation/GhostFontMetricsTests.swift diff --git a/CotabbyTests/GhostFontSizeStabilizerTests.swift b/CotabbyTests/Support/Presentation/GhostFontSizeStabilizerTests.swift similarity index 100% rename from CotabbyTests/GhostFontSizeStabilizerTests.swift rename to CotabbyTests/Support/Presentation/GhostFontSizeStabilizerTests.swift diff --git a/CotabbyTests/GhostSuggestionLayoutTests.swift b/CotabbyTests/Support/Presentation/GhostSuggestionLayoutTests.swift similarity index 100% rename from CotabbyTests/GhostSuggestionLayoutTests.swift rename to CotabbyTests/Support/Presentation/GhostSuggestionLayoutTests.swift diff --git a/CotabbyTests/MirrorOverlayLayoutTests.swift b/CotabbyTests/Support/Presentation/MirrorOverlayLayoutTests.swift similarity index 100% rename from CotabbyTests/MirrorOverlayLayoutTests.swift rename to CotabbyTests/Support/Presentation/MirrorOverlayLayoutTests.swift diff --git a/CotabbyTests/SuggestionAnchorCacheTests.swift b/CotabbyTests/Support/Presentation/SuggestionAnchorCacheTests.swift similarity index 100% rename from CotabbyTests/SuggestionAnchorCacheTests.swift rename to CotabbyTests/Support/Presentation/SuggestionAnchorCacheTests.swift diff --git a/CotabbyTests/SuggestionFadeInPolicyTests.swift b/CotabbyTests/Support/Presentation/SuggestionFadeInPolicyTests.swift similarity index 100% rename from CotabbyTests/SuggestionFadeInPolicyTests.swift rename to CotabbyTests/Support/Presentation/SuggestionFadeInPolicyTests.swift diff --git a/CotabbyTests/SuggestionOverlayStabilityGateTests.swift b/CotabbyTests/Support/Presentation/SuggestionOverlayStabilityGateTests.swift similarity index 100% rename from CotabbyTests/SuggestionOverlayStabilityGateTests.swift rename to CotabbyTests/Support/Presentation/SuggestionOverlayStabilityGateTests.swift diff --git a/CotabbyTests/SuggestionTextColorCodecTests.swift b/CotabbyTests/Support/Presentation/SuggestionTextColorCodecTests.swift similarity index 100% rename from CotabbyTests/SuggestionTextColorCodecTests.swift rename to CotabbyTests/Support/Presentation/SuggestionTextColorCodecTests.swift diff --git a/CotabbyTests/TextDirectionDetectorTests.swift b/CotabbyTests/Support/Presentation/TextDirectionDetectorTests.swift similarity index 100% rename from CotabbyTests/TextDirectionDetectorTests.swift rename to CotabbyTests/Support/Presentation/TextDirectionDetectorTests.swift diff --git a/CotabbyTests/TextLayoutCaretEstimatorTests.swift b/CotabbyTests/Support/Presentation/TextLayoutCaretEstimatorTests.swift similarity index 100% rename from CotabbyTests/TextLayoutCaretEstimatorTests.swift rename to CotabbyTests/Support/Presentation/TextLayoutCaretEstimatorTests.swift diff --git a/CotabbyTests/BaseCompletionPromptRendererTests.swift b/CotabbyTests/Support/Prompting/BaseCompletionPromptRendererTests.swift similarity index 100% rename from CotabbyTests/BaseCompletionPromptRendererTests.swift rename to CotabbyTests/Support/Prompting/BaseCompletionPromptRendererTests.swift diff --git a/CotabbyTests/ControlTokenMarkersTests.swift b/CotabbyTests/Support/Prompting/ControlTokenMarkersTests.swift similarity index 100% rename from CotabbyTests/ControlTokenMarkersTests.swift rename to CotabbyTests/Support/Prompting/ControlTokenMarkersTests.swift diff --git a/CotabbyTests/PromptPolicyTests.swift b/CotabbyTests/Support/Prompting/PromptPolicyTests.swift similarity index 100% rename from CotabbyTests/PromptPolicyTests.swift rename to CotabbyTests/Support/Prompting/PromptPolicyTests.swift diff --git a/CotabbyTests/PromptSectionBudgetTests.swift b/CotabbyTests/Support/Prompting/PromptSectionBudgetTests.swift similarity index 100% rename from CotabbyTests/PromptSectionBudgetTests.swift rename to CotabbyTests/Support/Prompting/PromptSectionBudgetTests.swift diff --git a/CotabbyTests/TokenCountEstimatorTests.swift b/CotabbyTests/Support/Prompting/TokenCountEstimatorTests.swift similarity index 100% rename from CotabbyTests/TokenCountEstimatorTests.swift rename to CotabbyTests/Support/Prompting/TokenCountEstimatorTests.swift diff --git a/CotabbyTests/BundledRuntimeLocatorTests.swift b/CotabbyTests/Support/Runtime/BundledRuntimeLocatorTests.swift similarity index 100% rename from CotabbyTests/BundledRuntimeLocatorTests.swift rename to CotabbyTests/Support/Runtime/BundledRuntimeLocatorTests.swift diff --git a/CotabbyTests/DecodeStopPolicyTests.swift b/CotabbyTests/Support/Runtime/DecodeStopPolicyTests.swift similarity index 100% rename from CotabbyTests/DecodeStopPolicyTests.swift rename to CotabbyTests/Support/Runtime/DecodeStopPolicyTests.swift diff --git a/CotabbyTests/DeviceInfoTests.swift b/CotabbyTests/Support/Runtime/DeviceInfoTests.swift similarity index 100% rename from CotabbyTests/DeviceInfoTests.swift rename to CotabbyTests/Support/Runtime/DeviceInfoTests.swift diff --git a/CotabbyTests/DownloadOutcomeClassifierTests.swift b/CotabbyTests/Support/Runtime/DownloadOutcomeClassifierTests.swift similarity index 100% rename from CotabbyTests/DownloadOutcomeClassifierTests.swift rename to CotabbyTests/Support/Runtime/DownloadOutcomeClassifierTests.swift diff --git a/CotabbyTests/HardwareCapabilityProbeTests.swift b/CotabbyTests/Support/Runtime/HardwareCapabilityProbeTests.swift similarity index 100% rename from CotabbyTests/HardwareCapabilityProbeTests.swift rename to CotabbyTests/Support/Runtime/HardwareCapabilityProbeTests.swift diff --git a/CotabbyTests/SystemResourceSamplerTests.swift b/CotabbyTests/Support/Runtime/SystemResourceSamplerTests.swift similarity index 100% rename from CotabbyTests/SystemResourceSamplerTests.swift rename to CotabbyTests/Support/Runtime/SystemResourceSamplerTests.swift diff --git a/CotabbyTests/MenuBarRecoveryPolicyTests.swift b/CotabbyTests/Support/Settings/MenuBarRecoveryPolicyTests.swift similarity index 100% rename from CotabbyTests/MenuBarRecoveryPolicyTests.swift rename to CotabbyTests/Support/Settings/MenuBarRecoveryPolicyTests.swift diff --git a/CotabbyTests/SettingsAttentionEvaluatorTests.swift b/CotabbyTests/Support/Settings/SettingsAttentionEvaluatorTests.swift similarity index 100% rename from CotabbyTests/SettingsAttentionEvaluatorTests.swift rename to CotabbyTests/Support/Settings/SettingsAttentionEvaluatorTests.swift diff --git a/CotabbyTests/SettingsSearchRankerTests.swift b/CotabbyTests/Support/Settings/SettingsSearchRankerTests.swift similarity index 100% rename from CotabbyTests/SettingsSearchRankerTests.swift rename to CotabbyTests/Support/Settings/SettingsSearchRankerTests.swift diff --git a/CotabbyTests/SuggestionSettingsStoreTests.swift b/CotabbyTests/Support/Settings/SuggestionSettingsStoreTests.swift similarity index 100% rename from CotabbyTests/SuggestionSettingsStoreTests.swift rename to CotabbyTests/Support/Settings/SuggestionSettingsStoreTests.swift diff --git a/CotabbyTests/CurrentWordExtractorTests.swift b/CotabbyTests/Support/Spelling/CurrentWordExtractorTests.swift similarity index 100% rename from CotabbyTests/CurrentWordExtractorTests.swift rename to CotabbyTests/Support/Spelling/CurrentWordExtractorTests.swift diff --git a/CotabbyTests/SpellingDictionaryResourceTests.swift b/CotabbyTests/Support/Spelling/SpellingDictionaryResourceTests.swift similarity index 100% rename from CotabbyTests/SpellingDictionaryResourceTests.swift rename to CotabbyTests/Support/Spelling/SpellingDictionaryResourceTests.swift diff --git a/CotabbyTests/SpellingLanguageResolverTests.swift b/CotabbyTests/Support/Spelling/SpellingLanguageResolverTests.swift similarity index 100% rename from CotabbyTests/SpellingLanguageResolverTests.swift rename to CotabbyTests/Support/Spelling/SpellingLanguageResolverTests.swift diff --git a/CotabbyTests/SymSpellTests.swift b/CotabbyTests/Support/Spelling/SymSpellTests.swift similarity index 100% rename from CotabbyTests/SymSpellTests.swift rename to CotabbyTests/Support/Spelling/SymSpellTests.swift diff --git a/CotabbyTests/TypoCaseTransferTests.swift b/CotabbyTests/Support/Spelling/TypoCaseTransferTests.swift similarity index 100% rename from CotabbyTests/TypoCaseTransferTests.swift rename to CotabbyTests/Support/Spelling/TypoCaseTransferTests.swift diff --git a/CotabbyTests/TypoGateTests.swift b/CotabbyTests/Support/Spelling/TypoGateTests.swift similarity index 100% rename from CotabbyTests/TypoGateTests.swift rename to CotabbyTests/Support/Spelling/TypoGateTests.swift diff --git a/CotabbyTests/CompletionSeamGuardTests.swift b/CotabbyTests/Support/Suggestion/CompletionSeamGuardTests.swift similarity index 100% rename from CotabbyTests/CompletionSeamGuardTests.swift rename to CotabbyTests/Support/Suggestion/CompletionSeamGuardTests.swift diff --git a/CotabbyTests/ConfidenceSuppressionPolicyTests.swift b/CotabbyTests/Support/Suggestion/ConfidenceSuppressionPolicyTests.swift similarity index 100% rename from CotabbyTests/ConfidenceSuppressionPolicyTests.swift rename to CotabbyTests/Support/Suggestion/ConfidenceSuppressionPolicyTests.swift diff --git a/CotabbyTests/DebouncePolicyTests.swift b/CotabbyTests/Support/Suggestion/DebouncePolicyTests.swift similarity index 100% rename from CotabbyTests/DebouncePolicyTests.swift rename to CotabbyTests/Support/Suggestion/DebouncePolicyTests.swift diff --git a/CotabbyTests/InsertedTextAdvanceTests.swift b/CotabbyTests/Support/Suggestion/InsertedTextAdvanceTests.swift similarity index 100% rename from CotabbyTests/InsertedTextAdvanceTests.swift rename to CotabbyTests/Support/Suggestion/InsertedTextAdvanceTests.swift diff --git a/CotabbyTests/InsertionSafetyGateTests.swift b/CotabbyTests/Support/Suggestion/InsertionSafetyGateTests.swift similarity index 100% rename from CotabbyTests/InsertionSafetyGateTests.swift rename to CotabbyTests/Support/Suggestion/InsertionSafetyGateTests.swift diff --git a/CotabbyTests/InsertionStrategySelectorTests.swift b/CotabbyTests/Support/Suggestion/InsertionStrategySelectorTests.swift similarity index 100% rename from CotabbyTests/InsertionStrategySelectorTests.swift rename to CotabbyTests/Support/Suggestion/InsertionStrategySelectorTests.swift diff --git a/CotabbyTests/MidWordContinuationPolicyTests.swift b/CotabbyTests/Support/Suggestion/MidWordContinuationPolicyTests.swift similarity index 100% rename from CotabbyTests/MidWordContinuationPolicyTests.swift rename to CotabbyTests/Support/Suggestion/MidWordContinuationPolicyTests.swift diff --git a/CotabbyTests/SentenceBoundaryClassifierTests.swift b/CotabbyTests/Support/Suggestion/SentenceBoundaryClassifierTests.swift similarity index 100% rename from CotabbyTests/SentenceBoundaryClassifierTests.swift rename to CotabbyTests/Support/Suggestion/SentenceBoundaryClassifierTests.swift diff --git a/CotabbyTests/SpeculativeAcceptanceContextTests.swift b/CotabbyTests/Support/Suggestion/SpeculativeAcceptanceContextTests.swift similarity index 100% rename from CotabbyTests/SpeculativeAcceptanceContextTests.swift rename to CotabbyTests/Support/Suggestion/SpeculativeAcceptanceContextTests.swift diff --git a/CotabbyTests/StreamedGhostTextPolicyTests.swift b/CotabbyTests/Support/Suggestion/StreamedGhostTextPolicyTests.swift similarity index 100% rename from CotabbyTests/StreamedGhostTextPolicyTests.swift rename to CotabbyTests/Support/Suggestion/StreamedGhostTextPolicyTests.swift diff --git a/CotabbyTests/SuggestionAvailabilityEvaluatorTests.swift b/CotabbyTests/Support/Suggestion/SuggestionAvailabilityEvaluatorTests.swift similarity index 100% rename from CotabbyTests/SuggestionAvailabilityEvaluatorTests.swift rename to CotabbyTests/Support/Suggestion/SuggestionAvailabilityEvaluatorTests.swift diff --git a/CotabbyTests/SuggestionRequestFactoryTests.swift b/CotabbyTests/Support/Suggestion/SuggestionRequestFactoryTests.swift similarity index 100% rename from CotabbyTests/SuggestionRequestFactoryTests.swift rename to CotabbyTests/Support/Suggestion/SuggestionRequestFactoryTests.swift diff --git a/CotabbyTests/SuggestionSessionReconcilerTests.swift b/CotabbyTests/Support/Suggestion/SuggestionSessionReconcilerTests.swift similarity index 100% rename from CotabbyTests/SuggestionSessionReconcilerTests.swift rename to CotabbyTests/Support/Suggestion/SuggestionSessionReconcilerTests.swift diff --git a/CotabbyTests/SuggestionTextNormalizerTests.swift b/CotabbyTests/Support/Suggestion/SuggestionTextNormalizerTests.swift similarity index 100% rename from CotabbyTests/SuggestionTextNormalizerTests.swift rename to CotabbyTests/Support/Suggestion/SuggestionTextNormalizerTests.swift diff --git a/CotabbyTests/SyntheticReplacePlannerTests.swift b/CotabbyTests/Support/Suggestion/SyntheticReplacePlannerTests.swift similarity index 100% rename from CotabbyTests/SyntheticReplacePlannerTests.swift rename to CotabbyTests/Support/Suggestion/SyntheticReplacePlannerTests.swift diff --git a/CotabbyTests/TrailingDuplicationFilterTests.swift b/CotabbyTests/Support/Suggestion/TrailingDuplicationFilterTests.swift similarity index 100% rename from CotabbyTests/TrailingDuplicationFilterTests.swift rename to CotabbyTests/Support/Suggestion/TrailingDuplicationFilterTests.swift diff --git a/CotabbyTests/WordCountFormatterTests.swift b/CotabbyTests/Support/Utilities/WordCountFormatterTests.swift similarity index 100% rename from CotabbyTests/WordCountFormatterTests.swift rename to CotabbyTests/Support/Utilities/WordCountFormatterTests.swift diff --git a/CotabbyTests/CotabbyTestFixtures.swift b/CotabbyTests/TestSupport/CotabbyTestFixtures.swift similarity index 100% rename from CotabbyTests/CotabbyTestFixtures.swift rename to CotabbyTests/TestSupport/CotabbyTestFixtures.swift diff --git a/CotabbyTests/SuggestionCoordinatorTestSupport.swift b/CotabbyTests/TestSupport/SuggestionCoordinatorTestSupport.swift similarity index 100% rename from CotabbyTests/SuggestionCoordinatorTestSupport.swift rename to CotabbyTests/TestSupport/SuggestionCoordinatorTestSupport.swift diff --git a/CotabbyTests/SettingsIndexTests.swift b/CotabbyTests/UI/SettingsIndexTests.swift similarity index 100% rename from CotabbyTests/SettingsIndexTests.swift rename to CotabbyTests/UI/SettingsIndexTests.swift diff --git a/FAQ.md b/FAQ.md index 9b8025a9..d9ff208c 100644 --- a/FAQ.md +++ b/FAQ.md @@ -1,6 +1,6 @@ # Cotabby FAQ -Frequently asked questions about Cotabby, the free, open-source, on-device AI +Frequently asked questions about Cotabby, the free, open-source, local-first AI autocomplete for macOS. ## 1. What is Cotabby and how does it work? @@ -12,7 +12,7 @@ typing to ignore it. Under the hood, Cotabby notices which text field you are focused on, reads what you have typed (and optionally the surrounding on-screen context), generates a -short continuation with a local AI model, and inserts the text you accept right +short continuation with your selected engine, and inserts the text you accept right where your cursor is. Beyond sentence completion, Cotabby also includes: @@ -33,25 +33,24 @@ terms of that license. The code lives at [github.com/FuJacob/cotabby](https://github.com/FuJacob/cotabby). The downloadable AI models are free too, and Apple Intelligence is built into -macOS, so there are no usage costs of any kind. +macOS. If you configure a third-party OpenAI-compatible endpoint, that provider may charge for use. ## 3. Is my data private? Does Cotabby send what I type to the cloud? -Privacy is the core design principle. Everything that produces a suggestion runs +Privacy is the core design principle. Cotabby's default engines produce suggestions on your Mac: -- All AI text generation happens on-device, using either Apple Intelligence - (built into macOS) or a local model running directly on your machine. There is - no hosted API and no cloud round-trip. +- Apple Intelligence and the Open Source engine run on-device. +- The optional OpenAI-compatible engine sends the bounded request to the endpoint + you configure. That endpoint can be loopback, on your LAN, or a public HTTPS service. - When screen context is used, the screenshot is captured and read entirely on-device with Apple's built-in text recognition. No images or recognized text are ever uploaded. - Cotabby contains no analytics, no telemetry, and no crash reporting. -The only times Cotabby uses the network are to download an AI model when you -choose to, to let you search for models in the optional in-app model browser, and -to check for app updates. None of these carry the text you type, your -suggestions, or anything from your screen. +Apart from a configured endpoint, Cotabby uses the network to download or search +for models and to check for app updates. Those operations do not carry the text +you type, your suggestions, or anything from your screen. For the technically curious: a normal install never writes your typed text to disk. Only special developer debug builds write local diagnostic logs, and even @@ -66,7 +65,7 @@ those stay on your Mac and are never transmitted. 5 GB each, depending on the model you pick). - To use the Apple Intelligence engine specifically, you need macOS 26 or later on a Mac that supports Apple Intelligence, with Apple Intelligence turned on in - System Settings. On older Macs, use the built-in Open Source engine instead. + System Settings. On older Macs, use the Open Source engine or a configured endpoint instead. ## 5. How do I install Cotabby? @@ -90,20 +89,19 @@ setup. It checks for and installs updates automatically when new versions ship. ## 6. Why does Cotabby need Accessibility, Input Monitoring, and Screen Recording permissions? -Cotabby works inside other apps, so macOS requires you to grant three -permissions. Each one maps to a specific feature: +Cotabby works inside other apps, so macOS asks for permissions that map to specific features: - **Accessibility:** to read the text and cursor position in the field you are typing in, and to insert the text you accept. - **Input Monitoring:** to notice your typing so it knows when to suggest, and to recognize the accept key (`Tab`). -- **Screen Recording:** to capture the area around your cursor for visual - context, which makes suggestions more relevant. +- **Screen Recording (optional):** to capture the area around your cursor for visual + context. Text-only autocomplete still works without it. Cotabby guides you through granting each one during setup and shows a reminder if a permission is later turned off. You can change them anytime in System Settings -under Privacy & Security. Cotabby never operates in password or other secure -fields. +under Privacy & Security. Cotabby blocks generation, presentation, and insertion in password and +other secure fields. ## 7. How do I use Cotabby, and how do I accept or dismiss a suggestion? @@ -136,7 +134,7 @@ field does not expose what Cotabby needs, it simply stays quiet there. ## 9. Which AI model does Cotabby use, and does it work offline? -Cotabby gives you two engines, and you choose which one to use: +Cotabby gives you three engines, and you choose which one to use: - **Apple Intelligence:** Apple's on-device model built into macOS (requires macOS 26 or later on a supported Mac). Nothing to download. @@ -145,10 +143,11 @@ Cotabby gives you two engines, and you choose which one to use: higher-quality one (around 5 GB). Larger models write better but run slower. You can also import your own GGUF model or browse Hugging Face from inside the app. +- **OpenAI-compatible:** a completion or chat endpoint you configure, including + local Ollama, another LAN host, or a public HTTPS service. -Both engines run entirely on your Mac. Once a model is downloaded (or Apple -Intelligence is set up), suggestions work fully offline, with no internet -required. +Apple Intelligence and Open Source run entirely on your Mac and work offline once configured. +The endpoint engine's network requirements depend on the server you choose. ## 10. How do I customize Cotabby or turn it off? diff --git a/README.md b/README.md index c614b4f2..12627b48 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@

Cotabby [beta]

-

Open-source, on-device AI autocomplete for macOS.

+

Open-source, local-first AI autocomplete for macOS.

@@ -42,7 +42,8 @@ Cotabby adds AI autocomplete to almost any text field on your Mac. As you type, a gray suggestion appears inline next to your cursor. Press `Tab` to accept it a word at a time, or keep typing to ignore it. -Everything runs on your Mac. No account, no cloud, no telemetry. +The default Apple Intelligence and Open Source engines run on your Mac. No account or telemetry is +required. An optional OpenAI-compatible engine can connect to a server you configure. ## Demo @@ -68,19 +69,24 @@ Everything runs on your Mac. No account, no cloud, no telemetry. ## Privacy -Privacy is the whole point — everything that produces a suggestion happens on your Mac: +Privacy is the whole point, so Cotabby's default engines keep generation on your Mac: -- All AI runs on-device. There's no hosted API and no cloud round-trip. +- Apple Intelligence and Open Source generation run on-device. +- The optional OpenAI-compatible engine sends a bounded request only to the endpoint you configure; + that endpoint can be loopback, on your local network, or a public HTTPS service. - No analytics, no telemetry, no crash reporting. - A normal install never writes what you type to disk. -- The network is used only to download a model you pick and to check for updates — never to send your text, your screen, or your suggestions anywhere. +- Apart from a configured endpoint, the network is used for model downloads and update checks, not + suggestion generation. ## Engines -Cotabby generates suggestions one of two ways. You choose which in Settings → Engine: +Cotabby generates suggestions in three ways. You choose which in Settings → Engine: - **Apple Intelligence** — Apple's model, built into macOS 26 or later on supported Macs. Nothing to download. - **Open Source** — a small AI model you download that runs entirely on your Mac. Works on any supported Mac (macOS 14+), with or without Apple Intelligence. +- **OpenAI-compatible** — a completion or chat endpoint you configure, including local Ollama, + another LAN host, or a public HTTPS service. Endpoint credentials are stored in Keychain. If your Mac supports Apple Intelligence, that's the easiest place to start. Otherwise, use the Open Source engine and pick one of the built-in models: @@ -148,7 +154,7 @@ Cotabby works inside other apps, so macOS asks for a few permissions. Each one m - **Input Monitoring** — notice your typing so it knows when to suggest, and detect the accept keys. - **Screen Recording** *(optional)* — capture the area around your cursor for visual context. Leave it off and everything else still works. -Cotabby never reads password or other secure fields. +Cotabby blocks generation, presentation, and insertion in password and other secure fields. ## Local Development diff --git a/THIRD_PARTY_LICENSES.md b/THIRD_PARTY_LICENSES.md index afbf5e6e..9a3652ad 100644 --- a/THIRD_PARTY_LICENSES.md +++ b/THIRD_PARTY_LICENSES.md @@ -13,7 +13,7 @@ upstream license text. The inline autocorrect feature uses a Swift port of SymSpell (Wolf Garbe's Symmetric Delete spelling-correction algorithm). The port lives in -`Cotabby/Support/SymSpell.swift`. SymSpell is distributed under the MIT License: +`Cotabby/Support/Spelling/SymSpell.swift`. SymSpell is distributed under the MIT License: ``` MIT License diff --git a/scripts/add_test_target.rb b/scripts/add_test_target.rb deleted file mode 100644 index d730f70e..00000000 --- a/scripts/add_test_target.rb +++ /dev/null @@ -1,145 +0,0 @@ -#!/usr/bin/env ruby -# Adds a `CotabbyTests` unit-test target to Cotabby.xcodeproj and wires the -# existing Swift files in `CotabbyTests/` into it. Idempotent — safe to re-run. -# -# Why a script instead of clicking through Xcode: -# - Xcode's target template is opaque; running it on every contributor's box -# risks divergent settings. Source-of-truth in a script keeps the setup -# reproducible and reviewable. -# - Test infrastructure should be inspectable like any other code. Diffing a -# Ruby script is much easier than diffing a pbxproj mutation. -# -# Requires the `xcodeproj` Ruby gem. On macOS with CocoaPods installed, the -# cocoapods GEM_HOME already ships it; the Makefile-free way to invoke is: -# -# GEM_HOME="/opt/homebrew/Cellar/cocoapods//libexec" \ -# ruby scripts/add_test_target.rb - -require 'xcodeproj' - -PROJECT_PATH = 'Cotabby.xcodeproj' -HOST_TARGET_NAME = 'Cotabby' -TEST_TARGET_NAME = 'CotabbyTests' -DEPLOYMENT_TARGET = '26.0' -TEST_BUNDLE_ID = 'com.jacobfu.tabby.CotabbyTests' -TESTS_DIR = 'CotabbyTests' - -project = Xcodeproj::Project.open(PROJECT_PATH) - -host_target = project.targets.find { |t| t.name == HOST_TARGET_NAME } -raise "Host target '#{HOST_TARGET_NAME}' not found" unless host_target - -# --- 1. Ensure the test target exists --------------------------------------- -# `new_target` is not idempotent; guard on presence so re-runs don't duplicate. -test_target = project.targets.find { |t| t.name == TEST_TARGET_NAME } -if test_target.nil? - test_target = project.new_target( - :unit_test_bundle, - TEST_TARGET_NAME, - :osx, - DEPLOYMENT_TARGET, - project.products_group, - :swift - ) -end - -# --- 2. Build settings ------------------------------------------------------ -# TEST_HOST + BUNDLE_LOADER let the test bundle load the app's symbols at -# test time; this is what makes `@testable import Cotabby` actually resolve. -# We intentionally disable code signing for the test bundle so CI runners -# without the dev cert can still run `xcodebuild test`. -test_target.build_configurations.each do |config| - config.build_settings.merge!( - # xcodeproj's `new_target` skips PRODUCT_NAME for unit test bundles; without - # it the swift compiler sees `-module-name ""` and fails. Setting both - # keeps `swiftc` happy and keeps the compiled .xctest bundle on a - # predictable name. - 'PRODUCT_NAME' => '$(TARGET_NAME)', - 'PRODUCT_MODULE_NAME' => '$(TARGET_NAME)', - 'TEST_HOST' => '$(BUILT_PRODUCTS_DIR)/Cotabby.app/Contents/MacOS/Cotabby', - 'BUNDLE_LOADER' => '$(TEST_HOST)', - 'PRODUCT_BUNDLE_IDENTIFIER' => TEST_BUNDLE_ID, - 'SWIFT_VERSION' => '5.0', - 'MACOSX_DEPLOYMENT_TARGET' => DEPLOYMENT_TARGET, - 'GENERATE_INFOPLIST_FILE' => 'YES', - 'CODE_SIGN_STYLE' => 'Automatic', - 'CODE_SIGN_IDENTITY' => '-', - 'CODE_SIGNING_REQUIRED' => 'NO', - 'CODE_SIGNING_ALLOWED' => 'NO', - 'LD_RUNPATH_SEARCH_PATHS' => ['$(inherited)', '@executable_path/../Frameworks', '@loader_path/../Frameworks'] - ) -end - -# --- 3. Target dependency on the host app ----------------------------------- -unless test_target.dependencies.any? { |dep| dep.target == host_target } - test_target.add_dependency(host_target) -end - -# Xcodeproj's `new_target(:unit_test_bundle, :osx, ...)` helpfully adds -# Cocoa.framework to the Frameworks build phase, but it hardcodes the path -# to whatever SDK string the gem was last updated against (today: MacOSX15.0). -# Our SDK is 26.x; pure Swift XCTest bundles don't need Cocoa anyway. Strip -# the build-file entry so we don't ship a stale reference. -test_target.frameworks_build_phase.files.to_a.each do |build_file| - file_ref = build_file.file_ref - next unless file_ref&.path&.include?('Cocoa.framework') - - test_target.frameworks_build_phase.remove_build_file(build_file) - # Unlink from whichever group the gem parked it in (usually an "OS X" group - # created as a side effect), then drop the file reference entirely. - file_ref.remove_from_project -end - -# Prune any empty groups left behind after removing Cocoa — otherwise a -# phantom "OS X" group shows up in the Xcode navigator with nothing in it. -project.main_group.recursive_children.to_a.each do |child| - next unless child.is_a?(Xcodeproj::Project::Object::PBXGroup) - next unless child.children.empty? - next if child == project.products_group || child == project.main_group - - child.remove_from_project -end - -# --- 4. File group + source membership -------------------------------------- -# Idempotent: find-or-create the group, then only add file refs that aren't -# already present. This way re-running after adding new test files just -# incorporates the new ones. -tests_group = project.main_group[TESTS_DIR] || - project.main_group.new_group(TESTS_DIR, TESTS_DIR) - -test_files = Dir.glob(File.join(TESTS_DIR, '*.swift')).sort -raise "No test files in #{TESTS_DIR}/" if test_files.empty? - -existing_paths = tests_group.files.map(&:path) -test_files.each do |path| - basename = File.basename(path) - next if existing_paths.include?(basename) - - file_ref = tests_group.new_reference(basename) - test_target.add_file_references([file_ref]) -end - -# --- 5. Scheme: add the test target to the Test action ---------------------- -# Without this, `xcodebuild test -scheme Cotabby` has nothing to run. -scheme_path = File.join(PROJECT_PATH, 'xcshareddata', 'xcschemes', "#{HOST_TARGET_NAME}.xcscheme") -scheme = Xcodeproj::XCScheme.new(scheme_path) - -already_testable = scheme.test_action.testables.any? do |testable| - testable.buildable_references.any? { |ref| ref.target_name == TEST_TARGET_NAME } -end - -unless already_testable - testable = Xcodeproj::XCScheme::TestAction::TestableReference.new(test_target) - scheme.test_action.add_testable(testable) -end - -# --- 6. Save ---------------------------------------------------------------- -scheme.save_as(PROJECT_PATH, HOST_TARGET_NAME, true) -project.save - -puts "Target '#{TEST_TARGET_NAME}' present: #{!project.targets.find { |t| t.name == TEST_TARGET_NAME }.nil?}" -puts "Files wired:" -test_target.source_build_phase.files_references.each do |ref| - puts " - #{ref.path}" -end -puts "Scheme updated: #{scheme_path}" diff --git a/script/build_and_run.sh b/scripts/build_and_run.sh similarity index 100% rename from script/build_and_run.sh rename to scripts/build_and_run.sh