packages/homepage/docs/eliza-app-unified-workstreams.md
This spec defines the implementation workstreams needed to make Eliza App feel like one product across desktop downloads, mobile installs, social-message onboarding, personal-agent provisioning, and release verification.
The product contract is one durable agent per user. Channel-specific onboarding may start in iMessage, Discord, Telegram, WhatsApp, the homepage, or a native app, but successful setup must converge on the same user account, same agent, same runtime target, and same handoff semantics.
packages/homepage/src/pages/marketing.tsx,
packages/homepage/src/generated/release-data.ts,
packages/homepage/README.md,
packages/homepage/tests/e2e/marketing-cloud-download.spec.ts.packages/app-core/scripts/write-homepage-release-data.mjs,
packages/app-core/scripts/run-release-contract-suite.mjs,
packages/app-core/platforms/electrobun/scripts/verify-windows-installer-proof.ps1,
packages/app-core/platforms/electrobun/scripts/stage-macos-release-artifacts.sh.packages/ui/src/onboarding/mobile-runtime-mode.ts,
packages/ui/src/state/agent-runtime-target.ts,
packages/app/src/mobile-bridges.ts,
packages/app/scripts/mobile-local-chat-smoke.mjs,
packages/app/scripts/ensure-capacitor-platform.mjs.packages/homepage/src/lib/hooks/use-eliza-app-provisioning-chat.ts,
packages/cloud-api/eliza-app/provisioning-agent/route.ts,
packages/cloud-api/eliza-app/provisioning-agent/chat/route.ts,
packages/cloud-api/eliza-app/provision-agent/route.ts,
packages/cloud-api/v1/eliza/agents/[agentId]/provision/route.ts.plugins/plugin-bluebubbles/src/service.ts,
plugins/plugin-bluebubbles/src/setup-routes.ts,
plugins/plugin-bluebubbles/src/data-routes.ts,
packages/ui/src/components/connectors/BlueBubblesStatusPanel.tsx,
packages/ui/src/components/connectors/IMessageStatusPanel.tsx,
packages/ui/src/components/connectors/DiscordLocalConnectorPanel.tsx,
packages/ui/src/components/connectors/TelegramBotSetupPanel.tsx,
packages/ui/src/components/connectors/TelegramAccountConnectorPanel.tsx,
packages/ui/src/components/connectors/WhatsAppQrOverlay.tsx,
packages/cloud-api/eliza-app/webhook/_forward.ts,
packages/cloud-api/eliza-app/webhook/discord/route.ts,
packages/cloud-api/eliza-app/webhook/telegram/route.ts,
packages/cloud-api/eliza-app/webhook/whatsapp/route.ts,
packages/cloud-services/gateway-discord/src/index.ts,
packages/cloud-services/gateway-webhook/src/webhook-handler.ts.Homepage downloads remain the canonical public install surface until each store path is approved. The page must render GitHub release assets from generated metadata, fall back only when metadata is unavailable, and keep store badges in a status-driven "coming soon", "beta", or "available" state.
Implementation requirements:
packages/homepage/src/pages/marketing.tsx rather than hard-coding new
release URLs in page components.packages/app-core/scripts/write-homepage-release-data.mjs.packages/homepage/README.md.Acceptance criteria:
/ renders current desktop artifact links from
releaseData.release.downloads when release metadata is present.bun run --cwd packages/homepage typecheck and
bun run --cwd packages/homepage test:e2e pass for the download surface.iOS sideload is a power-user bridge until TestFlight/App Store distribution is
approved. It must install or update the native app, preserve the selected mobile
runtime mode, and support local, cloud, cloud-hybrid, and tunnel-to-mobile
targets already modeled in packages/ui/src/onboarding/mobile-runtime-mode.ts.
Implementation requirements:
packages/app/scripts/ensure-capacitor-platform.mjs and app build scripts,
not a separate mobile app.MOBILE_RUNTIME_MODE_STORAGE_KEY as the shared persisted mode contract.IOS_LOCAL_AGENT_IPC_BASE and
the Bun/ITTP bridge described in packages/app/src/mobile-bridges.ts.Acceptance criteria:
node packages/app/scripts/mobile-local-chat-smoke.mjs --platform ios --ios-select-local --ios-full-bun-smoke --require-installed passes on the
supported simulator/device lane.iMessage onboarding is an advanced self-hosted gateway: a Mac host runs BlueBubbles, a spare iPhone supplies iMessage continuity, and Headscale provides private network reachability. Product copy must call this "iMessage gateway", while implementation uses the existing BlueBubbles plugin.
Implementation requirements:
plugins/plugin-bluebubbles as the only iMessage transport integration.plugins/plugin-bluebubbles/src/setup-routes.ts and
plugins/plugin-bluebubbles/src/data-routes.ts.plugins/plugin-bluebubbles/src/connector-account-provider.ts.Acceptance criteria:
Bot onboarding must be channel-specific at the edge and channel-neutral after identity is linked. Discord uses the Discord gateway service, Telegram and WhatsApp use the webhook gateway, and all three forward into the same Eliza App provisioning contract.
Implementation requirements:
packages/homepage/src/pages/get-started.tsx should
keep using environment-driven bot identifiers documented in
packages/homepage/README.md.packages/cloud-api/eliza-app/webhook/ remain
thin forwarders to gateway services; channel logic belongs in
packages/cloud-services/gateway-discord or
packages/cloud-services/gateway-webhook.packages/cloud-api/eliza-app/auth/ and
packages/cloud-api/eliza-app/connections/.TelegramBotSetupPanel.tsx for bot onboarding and
TelegramAccountConnectorPanel.tsx for user account linking.WhatsAppQrOverlay.tsx.Acceptance criteria:
bun test packages/cloud-services/gateway-discord/tests and
bun test packages/cloud-services/gateway-webhook/__tests__.The provisioning agent is temporary. It may answer setup questions and collect preferences, but it must hand the thread to the user's real agent once the agent is running.
Implementation requirements:
packages/homepage/src/lib/hooks/use-eliza-app-provisioning-chat.ts as
the browser-side handoff contract: agentId, bridgeUrl, and
containerStatus must be enough to transition from setup to real chat.packages/cloud-api/eliza-app/provision-agent/route.ts with persistent
account-bound provisioning before production launch.Acceptance criteria:
packages/ui/src/state/agent-runtime-target.ts.Release readiness is a product surface and a CI contract. Homepage metadata, desktop artifacts, mobile sideload builds, store-review state, gateway deploys, and smoke tests must advance together.
Implementation requirements:
packages/app-core/scripts/write-homepage-release-data.mjs.packages/app-core/scripts/run-release-contract-suite.mjs when adding new
artifact types or store metadata.packages/ui/src/components/release-center/.Acceptance criteria:
node packages/app-core/scripts/run-release-contract-suite.mjs passes before
public release.bun run --cwd packages/homepage build.Verification gates should prove user journeys, not only units. Each gate maps to a failure mode users would otherwise experience during install, onboarding, handoff, messaging, or update.
Required gates:
Acceptance criteria:
plugin-bluebubbles.