v1.1.8 lands three PRs since v1.1.7: an Electron Viewer surface that wires app control + sessions + chat together, a Mobile Models Registry that groups Droid alongside the existing Claude/Codex/Cursor tabs and adds a runtime-environment banner to the chat system prompt, and a wide performance optimization pass across the desktop main process and renderer (caching, dedupe, IPC bridge cleanup, lifecycle correctness). Ships in TestFlight build 10 of 1.1.1.Documentation Index
Fetch the complete documentation index at: https://ade-app.dev/docs/llms.txt
Use this file to discover all available pages before exploring further.
Desktop
- Performance Pass
- Electron Viewer
A profile-driven cleanup of CPU/memory/IPC/render hot paths uncovered while running the Electron app under stress. No product-behavior changes — just removing waste, polling, avoidable re-renders, redundant IPC, log spam, and tightening lifecycle/contracts that showed up under load.
- Auth detection.
aiIntegrationServiceandauthDetectornow dedupe + cache auth lookups, with ashallowCliAuthfast path.refreshOpenCodeInventoryopts into the full pass automatically (shallowCliAuth = !shouldProbeCliModels) so a refresh never reuses stale Cursor/Droid auth state. Tests expanded. - IPC surface hardening.
registerIpc.timePhasetakes a thunk now (Promise.resolve().then(...).catch(...)) so synchronous throws degrade to[]/nullfallbacks instead of failing whole snapshot calls. Adds validation + redaction across the lane / suggestions / status surface. - Preload bridge cleanup.
preload.tsreorganized end-to-end.createShortIpcCachecaptures the request reference and only nullspromisewhen it still equals our request, so aforce: truecall no longer races a stale.finally.createKeyedShortIpcCacheis now bounded (KEYED_IPC_CACHE_MAX_ENTRIES = 256, touch-on-access LRU) so high-cardinality keys (image paths, session ids, diff args) can’t grow monotonically across long sessions. IPC fanouts wrap each subscriber intry/catchso one throwing renderer doesn’t starve later subscribers, and theagentChatEventfanout invalidatesagentChatSummaryCacheinbeforeDispatchso background events don’t get a 1s-stale cached summary. - PTY lifecycle.
ptyService.onDataearly-returns onentry.disposedso late chunks can’t mutate post-teardown state, re-arm the pending-data timer, or emitptyDataafterptyExit. - Lanes services.
autoRebaseServiceadds ahasAuthoritativeLaneSetguard so the missing-parent prune only fires when the caller didn’t supply a lane subset — no more wiped statuses for lanes outside the requested slice.rebaseSuggestionServicenormalizes primary lane refs viabranchNameFromLaneRefbefore buildingorigin/<branch>, and the suggestions cache + in-flight promise are now scoped to default-shape requests only (force, lanes-subset, andrefreshRemoteTrackingbypass the shared cache). - Memory + sync.
syncServiceforce: truebypasses the cached value but still rides the in-flight dedupe promise — overlapping callers no longer kick off redundantcomputeTransferReadiness()runs.memoryService.evaluateWriteGatekeeps thetier IN (1, 2)filter on its dedupe scan, so candidate-tier-3 episodes are preserved acrossaddCandidateMemorycallers (procedural promotion needs each distinct episode).embeddingService/embeddingWorkerServiceworker shutdown is fixed, andknowledgeCaptureServicelow-signal regexes now also require!hasDurablePrFeedbackSignals && wordCount < 10, so “Thanks, but always X…” style guidance is preserved instead of being dropped as courtesy text. - Project icon resolver. Negative icon lookups no longer cache misses without an invalidation signal — a freshly added
src/app/icon.pngorpublic/favicon.svgis picked up on the next call. - Renderer.
AppShell,TopBar,TabNav,ChatGitToolbar,AgentChatPane,AgentChatComposer,LanesPage,WorkspaceGraphPage,TerminalView, andPaneTilingLayoutcut polling, log spam, and avoidable re-renders.WorkspaceGraphPage.refreshGraphLaneskeepsincludeStatus: true(and skips the heavier conflict/rebase phases instead) so dirty/behind chips stay current without paying for a full snapshot.appStoreslice cleanup + tests;terminalAttentionlifecycle correctness. - Optimize skill.
.claude/commands/optimize.mdlands as the/optimizeskill that drove this pass.
iOS
- Mobile Models Registry
- Question Cards + Composer
The Work model picker gets a Droid provider group, tighter reasoning-effort UX, and family-first provider routing.
- Droid provider tab.
WorkModelCatalogregisters a Droid group with Anthropic / OpenAI / Google / Factory sub-providers.provider == "factory"now maps into thedroidgroup key, so Factory-provider models (glm-*,kimi-*,minimax-*) land in the Droid group instead of forming a separate one. - Reasoning-effort row dropped. The standalone segmented row is gone;
gpt-5 miniexposes onlymedium/high. Tapping the header of a reasoning-capable card commits the model witheffort: nil(server default) instead of forcing a tier pill — users who don’t care about effort aren’t required to pick one. - Single-provider filter rows hidden. Claude and Codex tabs no longer render redundant single-provider filter rows.
- Family-first routing. Droid provider routing prefers
familyover ID substring matches, so an Anthropic model whose ID happens to contain “codex” still resolves to theanthropicbucket. Substring fallbacks only run when family is empty. - Effort normalization.
WorkModelPickerSheetnormalizescurrentReasoningEffortthe same way as the incoming effort before diffing, avoiding spurious “changed” comparisons from casing/whitespace drift.