* feat(firecrawl): add keyless Firecrawl Search (Free) provider + richer firecrawl_search options
Add an opt-in, keyless 'firecrawl-free' web_search provider (Firecrawl
Search (Free)) mirroring the Parallel plugin's parallel-free pattern:
requiresCredential false, no autoDetectOrder, never auto-selected. The
free path is credential-isolated — it never resolves or sends any
Firecrawl API key (no Authorization header), so opting out of credentials
cannot leak a configured/paid key — and its results and cache key carry a
distinct 'firecrawl-free' provider identity. The keyed 'firecrawl'
provider and core search auto-select behavior are unchanged, honoring the
maintainers' opt-in policy for keyless search.
Registered in index.ts, the web-search-provider barrel, the
web-search-contract-api metadata artifact (the onboarding/setup source),
manifest contracts, the official external plugin catalog snapshot, and
the doctor/contract registries.
Also extend the firecrawl_search tool to /v2/search parity:
includeDomains/excludeDomains (mutually exclusive), tbs, location,
country, and raise the result cap to 100.
* docs: regenerate docs_map for firecrawl heading rename
---------
Co-authored-by: developersdigest <jonathan@sideguide.dev>
The sidebar's expandable "MORE" section (uppercase header, chevron, persisted
sidebarMoreExpanded pref, dedicated "Edit pinned items" row) collapses into a
single More nav row that opens a transient popup menu with the unpinned
routes, dynamic plugin tabs, and the pin editor entry. Menu rows are real
anchors, so Cmd/middle-click keeps native link behavior; the More row carries
the active highlight when the current route lives inside the menu. The
sessions list gets the reclaimed vertical space, and one persisted setting is
gone (stale keys are ignored on load). The nav rows and menus move to
app-sidebar-nav-menus.ts to keep app-sidebar.ts under the TS LOC ratchet.
Docs: docs/web/control-ui.md sidebar-navigation section updated.
Fixes#105905
* refactor(plugins): trim path safety facade
* chore(deadcode): reconcile export baseline
* chore(deadcode): refresh baseline after main sync
* chore(deadcode): align baseline with linux scan
0aabf56242 relaxed the wrapper contract to .accessibilityLabel(title) while
the same pattern stayed in RAW_LOCALIZATION_BYPASSES, and #105859 then
restored Text(title) in SettingsProTabSections.swift, leaving main's
apple-app-i18n guard failing in both directions. Revert the contract to the
original required pattern; both guard tables validate against current main.
5e9bc0916f switched two SettingsProTabSections accessibility labels
from .accessibilityLabel(Text(title)) to .accessibilityLabel(title);
title is LocalizedStringKey so lookup stays localized, but the wrapper
contract in apple-app-i18n.ts still required the old spelling and the
tooling shard only runs on PRs, so main broke silently.
* feat(chat): native session scroll-back with import-aware history paging
* fix(chat): page imported session history
* fix(chat): restore terminal import snapshots
* fix(chat): gate cli import resolver on ignore flag to stop history recursion
* fix(chat): correct scroll-back types and drop orphaned recent-messages reader