Repository navigation
Integrate mobile, session and file preview updates for v1.0.23 - #176
Merged
Merged
Conversation
Merged
There was a problem hiding this comment.
🟡 Changes recommended
Concurrent duplicate-ID requests can share a session and mix conversations, Android defaults bypass the headless MCP allowlist, and unrelated settings updates can erase failed-write retry state.
3 open issues
What changed in this PR
Integrates v1.0.23 updates across Android hosting, the responsive Web UI, session handling, file previews, and the Windows installer.
Changes:
- Consolidates file-preview controls into the breadcrumb overflow menu and shares file-manager actions with context menus.
- Adds Android runtime integration, phone controls, clipboard access, and narrow-screen layouts.
- Updates session ownership, transcripts, follow-up prompts, and simulator controls.
- Updates authentication, installer COM handling, tests, and documentation.
This pull request requires changes.
Unresolved issues:
- Critical — 3 votes:
src/apps/web/server_helpers.cpp:2592: Concurrent requests can create the same reserved session ID and submit an initial message to another request’s conversation. Reserve IDs atomically in the registry, return 409 for duplicates, and add concurrent regression coverage. - Critical — 1 vote:
src/base/config/mcp_config.cpp:400: Android defaults reintroduce phone tools after headless MCP allowlist filtering. Apply defaults before capability selection and preserve the filtered configuration in connection and policy code. - Moderate — 3 votes:
web/src/lib/androidPhoneSettings.js:18: Successful unrelated mutations clear failed settings and their retry targets while leaving unsaved drafts selected. Preserve failures until the corresponding setting succeeds or is explicitly superseded. - Moderate — 1 vote:
web/src/lib/mobileShell.js:52: Body-dispatched Escape bypasses element-level dismissal handlers, allowing Android Back to report success without closing the active submenu. Target the focused/topmost layer or use explicit dismissal hooks. - Moderate — 1 vote:
web/src/lib/mobileShell.js:33: Back handling misses slash-command and @-reference listboxes, causing host navigation instead of picker dismissal. Include those picker roots. - Moderate — 1 vote:
web/src/lib/systemClipboard.js:85: Overlapping reads overwrite handlers ononmessage-only bridges, causing answered requests to time out. Serialize reads or dispatch replies through a shared ID-based handler, and cover this bridge branch.
| File | Description |
|---|---|
web/src/styles/file-breadcrumbs.css |
Separates scrolling breadcrumbs from fixed actions. |
web/src/main.jsx |
Installs the Android Back bridge. |
web/src/lib/useResponsiveSidebars.js |
Tracks coarse-pointer input for drawer layout. |
web/src/lib/useNarrowLayout.js |
Adds reactive narrow-viewport detection. |
web/src/lib/useFollowUpPrompt.js |
Exposes recommendation-generation suppression. |
web/src/lib/topBarQuickActions.test.js |
Covers Android quick-action filtering. |
web/src/lib/topBarQuickActions.js |
Filters desktop-only actions on Android. |
web/src/lib/timestamps.js |
Infers missing historical message timestamps. |
web/src/lib/systemClipboard.test.js |
Covers Android clipboard reads and failures. |
web/src/lib/systemClipboard.js |
Adds Android clipboard bridge support. |
web/src/lib/subagentPanelSplitArchitecture.test.js |
Updates background-task visibility assertions. |
web/src/lib/steerWithdrawal.js |
Restores withdrawn messages into composer state. |
web/src/lib/settingsNavigation.test.js |
Covers Android and narrow settings navigation. |
web/src/lib/settingsNavigation.js |
Adds shell-specific settings navigation helpers. |
web/src/lib/sessionTranscript.js |
Infers timestamps before filtering history. |
web/src/lib/sessionTitleActions.test.js |
Covers browser availability on the homepage. |
web/src/lib/sessionTitleActions.js |
Enables homepage browser access. |
web/src/lib/sessionCreationActionGuardsArchitecture.test.js |
Updates completion-summary copy assertions. |
web/src/lib/runTests.js |
Registers additional regression suites. |
web/src/lib/responsiveSidebars.test.js |
Covers touch-screen drawer decisions. |
web/src/lib/responsiveSidebars.js |
Prevents sidebar docking on phones. |
web/src/lib/previewWorkbenchArchitecture.test.js |
Updates preview-menu architecture assertions. |
web/src/lib/previewTabs.test.js |
Covers draft browser-tab transfers. |
web/src/lib/previewTabs.js |
Transfers browser tabs when ownership matches. |
web/src/lib/presentationPreview.test.js |
Updates slide and zoom action assertions. |
web/src/lib/officePreviewInteractions.test.js |
Updates Office zoom-menu assertions. |
web/src/lib/modelSettingsArchitecture.test.js |
Covers narrow model dialogs and paste controls. |
web/src/lib/mobileShell.js |
Adds Android detection and Back handling. |
web/src/lib/iosSimulatorSettings.test.js |
Covers device-specific shutdown API calls. |
web/src/lib/iosSimulator.test.js |
Covers power-action device-list fallback. |
web/src/lib/iosSimulator.js |
Preserves device state after listing failures. |
web/src/lib/followUpPrompt.test.js |
Covers recommendation retention during editing. |
web/src/lib/followUpPrompt.js |
Separates suppression from explicit consumption. |
web/src/lib/desktopContextMenu.js |
Adds preview folder-navigation actions. |
web/src/lib/conversationLivenessArchitecture.test.js |
Updates activity-detail text assertions. |
web/src/lib/conversationActivity.test.js |
Updates background activity expectations. |
web/src/lib/conversationActivity.js |
Removes redundant background-status detail. |
web/src/lib/composerSessionControlsArchitecture.test.js |
Covers touch-sized composer controls. |
web/src/lib/assistantRunDirectives.test.js |
Covers combined answer-and-summary copying. |
web/src/lib/assistantRunDirectives.js |
Supplies completion-summary copy content. |
web/src/lib/androidPhoneSettings.js |
Serializes native phone settings requests. |
web/src/lib/androidPhone.js |
Adds phone requests, activity, and approvals. |
web/src/lib/anchoredMenuPosition.js |
Supports end-aligned menus. |
web/src/lib/agentBrowserArchitecture.test.js |
Updates draft browser ownership assertions. |
web/src/lib/agentBrowser.test.js |
Covers reserved session-ID generation. |
web/src/lib/agentBrowser.js |
Generates draft browser owner IDs. |
web/src/components/TranscriptItems.jsx |
Uses combined completion-summary copy text. |
web/src/components/TopBar.jsx |
Marks navigation-history controls. |
web/src/components/ToolRewriteSettings.jsx |
Adapts rewrite rows to narrow screens. |
web/src/components/SummaryPanel.jsx |
Hides empty background-task sections. |
web/src/components/SpeechRecognitionSettings.jsx |
Adds Android API-key paste support. |
web/src/components/SidebarQuickMenu.jsx |
Applies Android quick-menu filtering. |
web/src/components/SettingsConfigSection.jsx |
Hides daemon self-update on Android. |
web/src/components/SecurityCenterSettings.jsx |
Allows security tabs to wrap. |
web/src/components/PreviewDetailsPanel.jsx |
Hosts actions beside file breadcrumbs. |
web/src/components/PresentationPreview.jsx |
Moves slide and zoom controls into menus. |
web/src/components/openTargetInExplorer.js |
Shares file-manager dispatch and feedback. |
web/src/components/OfficePreviewControls.jsx |
Exports bounded zoom-menu actions. |
web/src/components/model-settings/SavedModelList.jsx |
Adapts model search to narrow screens. |
web/src/components/model-settings/ProviderCatalogPicker.jsx |
Supports separate narrow provider/detail panes. |
web/src/components/LoopPage.jsx |
Adapts scheduling controls to narrow screens. |
web/src/components/InputBar.jsx |
Preserves ready recommendations during edits. |
web/src/components/ImageGenerationSettings.jsx |
Adds Android API-key paste support. |
web/src/components/FilePreviewMenu.jsx |
Adds the file-actions overflow menu. |
web/src/components/ComposerSessionControls.jsx |
Uses configurable minimum control widths. |
web/src/components/ClipboardPasteButton.jsx |
Adds an Android-only paste button. |
web/src/components/ChannelsSettings.jsx |
Adds paste controls for secret credentials. |
web/src/components/AnchoredMenu.jsx |
Passes menu alignment into positioning. |
web/src/App.jsx |
Connects Android activity and approval hooks. |
web/scripts/test-preview-presentation.mjs |
Exercises preview actions and folder dispatch. |
web/scripts/test-follow-up-prompts.mjs |
Exercises recommendation restoration after clearing. |
web/scripts/test-file-breadcrumbs.mjs |
Exercises narrow overflow-menu positioning. |
web/scripts/i18n-en-overrides.mjs |
Adds English UI translations. |
tests/web/web_server_smoke_test.cpp |
Covers reserved session-ID validation and collisions. |
tests/web/auth_test.cpp |
Covers mandatory loopback authentication. |
tests/prompt/system_prompt_test.cpp |
Covers Android host environment text. |
tests/installer/windows_shell_test.cpp |
Covers shortcuts on uninitialized COM threads. |
tests/daemon/cli_parse_test.cpp |
Covers the local-token CLI flag. |
src/engine/prompt/system_prompt.cpp |
Describes the Android host and Ubuntu guest. |
src/base/config/mcp_config.hpp |
Declares runtime host MCP defaults. |
src/base/config/mcp_config.cpp |
Adds Android phone MCP defaults. |
src/apps/web/server.hpp |
Adds mandatory local-token configuration. |
src/apps/web/server_helpers.cpp |
Applies authentication and reserved-ID validation. |
src/apps/web/auth.hpp |
Extends the authentication interface. |
src/apps/web/auth.cpp |
Supports disabling loopback token exemption. |
src/apps/installer/windows_shell.cpp |
Initializes COM around shortcut operations. |
src/apps/installer/installer_strings.hpp |
Removes obsolete ACEModel-key fields. |
src/apps/installer/installer_strings.cpp |
Removes obsolete ACEModel-key strings. |
src/apps/installer/acemodel_seed.hpp |
Removes the installer seeding header. |
src/apps/daemon/worker.hpp |
Adds the worker local-token option. |
src/apps/daemon/worker.cpp |
Forwards authentication configuration to Web. |
src/apps/daemon/cli.hpp |
Adds parsed local-token state. |
src/apps/daemon/cli.cpp |
Parses and forwards the local-token flag. |
src/adapters/tool/mcp_manager.cpp |
Applies Android defaults during MCP setup. |
openspec/changes/file-detail-actions-menu/tasks.md |
Records implementation and verification tasks. |
openspec/changes/file-detail-actions-menu/specs/file-preview-wrap-toggle/spec.md |
Specifies menu-based wrap controls. |
openspec/changes/file-detail-actions-menu/specs/file-detail-actions/spec.md |
Specifies shared file-detail actions. |
openspec/changes/file-detail-actions-menu/proposal.md |
Describes preview-action consolidation. |
openspec/changes/file-detail-actions-menu/design.md |
Documents action-slot ownership and dispatch. |
openspec/changes/file-detail-actions-menu/.openspec.yaml |
Adds change metadata. |
openspec/changes/add-ios-simulator/verification.md |
Records shutdown checks and runtime limitations. |
openspec/changes/add-ios-simulator/tasks.md |
Records preview-shutdown implementation tasks. |
openspec/changes/add-ios-simulator/specs/ios-simulator/spec.md |
Specifies device-targeted shutdown behavior. |
openspec/changes/add-ios-simulator/design.md |
Documents shutdown resource cleanup. |
openspec/changes/add-composer-follow-up-prompts/tasks.md |
Records recommendation-restoration verification. |
openspec/changes/add-composer-follow-up-prompts/specs/composer-follow-up-prompts/spec.md |
Specifies restoring cached recommendations. |
openspec/changes/add-composer-follow-up-prompts/design.md |
Documents recommendation retention during editing. |
docs/windows-installer.md |
Documents COM handling and installer changes. |
docs/ios-simulator.md |
Documents preview shutdown and reboot controls. |
docs/daemon-api.md |
Documents local authentication and reserved IDs. |
docs/agent-browser.md |
Documents draft browser ownership transfer. |
android/settings.gradle |
Defines the Android project and repositories. |
android/runtime/test_phone_mcp.py |
Covers the phone MCP stdio protocol. |
android/runtime/rootfs/Dockerfile |
Defines the bundled Ubuntu runtime. |
android/runtime/pins.json |
Pins runtime packages and checksums. |
android/gradlew.bat |
Adds the Windows Gradle launcher. |
android/gradle/wrapper/gradle-wrapper.properties |
Configures the Gradle wrapper distribution. |
android/gradle.properties |
Configures Android build defaults. |
android/build.gradle |
Declares the Android application plugin. |
android/app/src/test/java/dev/acecode/android/ProotCommandTest.kt |
Covers daemon launch arguments and environments. |
android/app/src/test/java/dev/acecode/android/ClipboardBridgeTest.kt |
Covers clipboard replies and escaping. |
android/app/src/main/res/xml/phone_accessibility.xml |
Declares accessibility service capabilities. |
android/app/src/main/res/xml/network_security_config.xml |
Allows cleartext access to localhost. |
android/app/src/main/res/values/themes.xml |
Defines native themes and button styles. |
android/app/src/main/res/values/strings.xml |
Adds English native UI strings. |
android/app/src/main/res/values/dimens.xml |
Defines native layout dimensions. |
android/app/src/main/res/values/colors.xml |
Defines light-theme color resources. |
android/app/src/main/res/values/bools.xml |
Configures light system bars. |
android/app/src/main/res/values-zh/strings.xml |
Adds Chinese native UI strings. |
android/app/src/main/res/values-v27/themes.xml |
Configures navigation-bar appearance. |
android/app/src/main/res/values-night/themes.xml |
Configures night-theme system bars. |
android/app/src/main/res/values-night/colors.xml |
Defines dark-theme color resources. |
android/app/src/main/res/values-night/bools.xml |
Configures dark system bars. |
android/app/src/main/res/layout/status_panel.xml |
Defines runtime progress and retry UI. |
android/app/src/main/res/layout/phone_approval.xml |
Defines phone-action approval controls. |
android/app/src/main/res/layout/activity_main.xml |
Hosts the WebView and runtime status. |
android/app/src/main/res/drawable/ic_notification.xml |
Adds the runtime notification icon. |
android/app/src/main/res/drawable/ace_card.xml |
Defines native card styling. |
android/app/src/main/res/drawable/ace_button_secondary.xml |
Defines secondary button styling. |
android/app/src/main/res/drawable/ace_button_primary.xml |
Defines primary button styling. |
android/app/src/main/java/dev/acecode/android/RuntimePaths.kt |
Defines runtime and persistent data paths. |
android/app/src/main/java/dev/acecode/android/ProotCommand.kt |
Builds authenticated guest daemon commands. |
android/app/src/main/java/dev/acecode/android/PhoneApproval.kt |
Displays background phone-action approval overlays. |
android/app/src/main/java/dev/acecode/android/ClipboardBridge.kt |
Encodes native clipboard bridge replies. |
android/app/src/main/java/dev/acecode/android/AndroidFsOps.kt |
Implements Android runtime filesystem operations. |
android/app/src/main/assets/phone/phone_mcp.py |
Relays MCP tools to Android operations. |
android/app/src/main/AndroidManifest.xml |
Declares app permissions and components. |
android/.gitignore |
Excludes build output and signing secrets. |
Review effort: Balanced
Comment on lines
+2592
to
+2594
| if (!opts.preset_session_id.empty() && | ||
| (find_session_meta_for_workspace(ws, opts.preset_session_id) || | ||
| (deps.session_registry && deps.session_registry->acquire(opts.preset_session_id)))) { |
Comment on lines
+400
to
+404
| if (getenv_utf8("ACECODE_ANDROID_HOST") == "1") { | ||
| McpServerConfig phone; | ||
| phone.command = "/usr/bin/python3"; | ||
| phone.args = {"/opt/acecode/android/phone_mcp.py"}; | ||
| servers.emplace("phone", std::move(phone)); |
| try { | ||
| const status = await request(action, fields); | ||
| // A background refresh must not erase a failed write or its retry target. | ||
| const clearFailure = action !== 'status' || snapshot.failed?.action === 'status'; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.


Changes
Verification
OpenSpec change
file-detail-actions-menu.