Summary
The marketplace's "Connect your stuff" rail now renders on Android (mp-mobile branch). The catalog browse works, but every action button on an integration card fails with a not-implemented stub error.
Repro
- Install the latest debug APK from a
mp-mobile-derived build.
- Open Marketplace → scroll to "Connect your stuff" rail.
- Tap any integration (Gmail, Drive, Spotify, etc.).
- Tap Install (or Connect / Uninstall if the card shows them).
- Card status flips to Error, detail overlay shows:
not-implemented: integrations available on Android in a follow-up.
What's working
- ✅
integrations:list — fetches catalog from https://raw.githubusercontent.com/itsdestin/wecoded-marketplace/master/integrations/index.json (24h cached). Implemented in app/src/main/kotlin/com/youcoded/app/skills/MarketplaceFetcher.kt::fetchIntegrations() and LocalSkillProvider.kt::listIntegrations(). Cards render correctly with platform-locked badges (e.g. macOS Only).
What's stubbed
In app/src/main/kotlin/com/youcoded/app/runtime/SessionService.kt (currently the case block matching "integrations:status", "integrations:install", "integrations:uninstall", "integrations:connect", "integrations:configure"):
| IPC |
Behavior |
integrations:install |
Returns { error: "not-implemented..." } |
integrations:connect |
Returns { error: "not-implemented..." } |
integrations:uninstall |
Returns { error: "not-implemented..." } |
integrations:status |
Returns { error: "not-implemented..." } |
integrations:configure |
Returns { error: "not-implemented..." } (also "Coming soon" on desktop — out of scope) |
Implementation notes
Three pieces, in order:
-
Install (plugin-wrapped integrations) — port desktop/src/main/integration-installer.ts::install() to a Kotlin IntegrationInstaller. For setup.type === "plugin" entries (Google Workspace, Spotify, etc.) it should look up the entry via LocalSkillProvider/MarketplaceFetcher, route through the existing Android PluginInstaller (which already handles clone + four-registry write for skills), then mirror setup.postInstallCommand back so the renderer can show the SetupHintBanner.
-
Connect (OAuth) — Android has no Electron safeStorage equivalent. Reuse the EncryptedSharedPreferences already wired for marketplace:auth (see MasterKeys usage in SessionService.kt) for token-at-rest. Start with one provider (Google Workspace) and copy the desktop flow's redirect-uri / device-code handling. The desktop flow currently uses an OAuth web flow against the Cloudflare Worker, which has a separate bug filed about redirect_uri mismatch — that needs fixing first or in parallel.
-
Uninstall + Status — uninstall is the inverse of install + clear the encrypted token. Status reads the integrations manifest (~/.claude/integrations.json on desktop). Either mirror that path on Android or fold into the existing youcoded-skills.json.
Branch / commit context
- Branch:
mp-mobile (mobile-responsive marketplace work)
- Catalog wiring commit:
9f027d0e (feat(marketplace): icon nav buttons, Library mobile top bar, Android integrations list)
- Worktree:
youcoded/.worktrees/marketplace-mobile/
Tracked in youcoded-dev/docs/knowledge-debt.md under "Android integrations install/connect/uninstall not implemented".
🤖 Generated with Claude Code
Summary
The marketplace's "Connect your stuff" rail now renders on Android (mp-mobile branch). The catalog browse works, but every action button on an integration card fails with a not-implemented stub error.
Repro
mp-mobile-derived build.not-implemented: integrations available on Android in a follow-up.What's working
integrations:list— fetches catalog fromhttps://raw.githubusercontent.com/itsdestin/wecoded-marketplace/master/integrations/index.json(24h cached). Implemented inapp/src/main/kotlin/com/youcoded/app/skills/MarketplaceFetcher.kt::fetchIntegrations()andLocalSkillProvider.kt::listIntegrations(). Cards render correctly with platform-locked badges (e.g.macOS Only).What's stubbed
In
app/src/main/kotlin/com/youcoded/app/runtime/SessionService.kt(currently the case block matching"integrations:status", "integrations:install", "integrations:uninstall", "integrations:connect", "integrations:configure"):integrations:install{ error: "not-implemented..." }integrations:connect{ error: "not-implemented..." }integrations:uninstall{ error: "not-implemented..." }integrations:status{ error: "not-implemented..." }integrations:configure{ error: "not-implemented..." }(also "Coming soon" on desktop — out of scope)Implementation notes
Three pieces, in order:
Install (plugin-wrapped integrations) — port
desktop/src/main/integration-installer.ts::install()to a KotlinIntegrationInstaller. Forsetup.type === "plugin"entries (Google Workspace, Spotify, etc.) it should look up the entry viaLocalSkillProvider/MarketplaceFetcher, route through the existing AndroidPluginInstaller(which already handles clone + four-registry write for skills), then mirrorsetup.postInstallCommandback so the renderer can show the SetupHintBanner.Connect (OAuth) — Android has no Electron
safeStorageequivalent. Reuse theEncryptedSharedPreferencesalready wired formarketplace:auth(seeMasterKeysusage inSessionService.kt) for token-at-rest. Start with one provider (Google Workspace) and copy the desktop flow's redirect-uri / device-code handling. The desktop flow currently uses an OAuth web flow against the Cloudflare Worker, which has a separate bug filed aboutredirect_urimismatch — that needs fixing first or in parallel.Uninstall + Status — uninstall is the inverse of install + clear the encrypted token. Status reads the integrations manifest (
~/.claude/integrations.jsonon desktop). Either mirror that path on Android or fold into the existingyoucoded-skills.json.Branch / commit context
mp-mobile(mobile-responsive marketplace work)9f027d0e(feat(marketplace): icon nav buttons, Library mobile top bar, Android integrations list)youcoded/.worktrees/marketplace-mobile/Tracked in
youcoded-dev/docs/knowledge-debt.mdunder "Android integrations install/connect/uninstall not implemented".🤖 Generated with Claude Code