feat(mobile): add four app actions for OS surfaces - #6200
Conversation
Code Review SummaryStatus: No Issues Found | Recommendation: Merge Executive SummaryIncremental re-review of the 16 files changed since Files Reviewed (16 files)
Previous Review Summary (commit 40acdaa)Current summary above is authoritative. Previous snapshots are kept for context only. Previous review (commit 40acdaa)Status: 4 Issues Found | Recommendation: Address before merge Fix these issues in Kilo Cloud Overview
Issue Details (click to expand)WARNING
SUGGESTION
Files Reviewed (128 files)
Reviewed the shared Reviewed by deepseek-v4.1-flash · Input: 0 · Output: 0 · Cached: 0 Review guidance: REVIEW.md from base branch |
40acdaa to
65dd4c8
Compare
|
bot: Cross-platform fix. Pushed 0cf9fb5 (kwf What changed:
|
0cf9fb5 to
9fc177e
Compare
|
(bot) kwf reopened its section for this PR: verification restarted (phase verify) The proof in the body came from an earlier round and can be stale. This PR is human-ready, so nothing here was changed. |
Changelog for users
Changelog for maintainers
apps/mobile/src/lib/app-actions/app-action-dispatch.ts:207— accepted. The handler threw whenever the parser rejected a payload, so a blankStartAgentnever reached the action path and Android's fire got nocompleteAppAction, timing out silently after 15 s (KiloActionActivity.kt:149-166). The parser now keeps aStartAgentwith no usable prompt or session as that action (app-action-contract.ts:423-433), sostart-agent.ts:55-58returns the contract's non-retryableempty-promptresult for the entry point to report.apps/mobile/modules/kilo-app-actions/android/src/main/AndroidManifest.xml:19— rejected, no change. The exported entry point is the required design, not an oversight: the same four actions must be addressable from the launcher, the Assistant or another app (AndroidManifest.xml:3-15,21), and a permission or caller check would reject exactly those callers, which cannot hold a signature permission. The activity holds no action logic — it translates the intent and hands it to the shared dispatcher (KiloActionActivity.kt:11-18,141-167) — and StartAgent refuses when no user is signed in (start-agent.ts:71-74).apps/mobile/modules/kilo-app-actions/android/src/main/res/xml/actions.xml:14— accepted. The file was referenced by no meta-data and only repeated the four capability declarations, so it had no effect. Deleted it; the activity'sandroid.app.shortcutsmeta-data points at the one capability file,res/xml/shortcuts.xml(AndroidManifest.xml:60), and the adjacent comment now names that file. Tests assertres/xml/holds onlyshortcuts.xmland that it declares one capability per action.apps/mobile/modules/kilo-app-actions/ios/KiloAppActionBridge.swift:68— accepted. The singleton kept the JS dispatcher and runtime with no teardown, so an App Intent could still execute on a dead runtime after the module was destroyed. Addedunregister()clearing the dispatcher, runtime and parked buffer (KiloAppActionBridge.swift:82-88), called from the module'sOnDestroy(KiloAppActionsModule.swift:31-33), mirroring Android'sAppActionDispatcher.clear()(KiloAppActionsModule.kt:51-53).Localizable.strings; native sources, translations and four-action parity are checked by tests. Riskiest pieces: the boot-time dispatcher registration handshake, and the Android result handoff because Expo's Android API has no awaitable JS promise.iosjob failed becauseappintentsmetadataprocessorreads the App Intent sources at build time and halts the target with 'LocalizedStringResource' must be initialized with a call to its initializer or a string literal; the sharedKiloIntentCopytable exposed the copy asstatic letvalues, so every use site referenced a constant. Each intenttitle, every@Parameter(title:), every shortcutshortTitleand the start-failure message are now string literals at their use sites, andenum KiloIntentCopyis deleted; the inlined values are identical to the removed table, so the translation plugin still finds the same keys andplugins/app-intent-copy.jsonis unchanged.kiloapp:///actions/<slug>targets, the boot-time dispatcher handshake and the Android entry points are untouched.E2E proof
— log excerpts