426e9eeabd
Voice Workbench / headless workbench (mocked backends) (push) Has been cancelled
Voice Workbench / real acoustic lane (nightly, provisioned only) (push) Has been cancelled
ci / test (push) Has been cancelled
ci / lint-and-format (push) Has been cancelled
ci / build (push) Has been cancelled
ci / dev-startup (push) Has been cancelled
gitleaks / gitleaks (push) Has been cancelled
Markdown Links / Relative Markdown Links (push) Has been cancelled
Quality (Extended) / Homepage Build (PR smoke) (push) Has been cancelled
Quality (Extended) / Comment-only diff guard (push) Has been cancelled
Quality (Extended) / Format + Type Safety Ratchet (push) Has been cancelled
Quality (Extended) / Develop Gate (secret scan + UI determinism) (push) Has been cancelled
Quality (Extended) / Develop Gate (lint) (push) Has been cancelled
Chat shell gestures / Chat shell gesture + parity e2e (push) Has been cancelled
Cloud Gateway Discord / Test (push) Has been cancelled
Benchmark Bridge Tests / benchmark (bunx @biomejs/biome check packages/lifeops-bench/src, benchmark-lint) (push) Has been cancelled
Benchmark Bridge Tests / benchmark (bunx vitest run --config packages/lifeops-bench/vitest.config.ts --root packages/lifeops-bench --passWithNoTests, benchmark-tests) (push) Has been cancelled
Build Agent Image / build-and-push (push) Has been cancelled
Dev Smoke / bun run dev onboarding chat (push) Has been cancelled
Dev Smoke / Vite HMR dependency-level smoke (push) Has been cancelled
Electrobun Submodule Guard / electrobun gitlink is fetchable (push) Has been cancelled
Publish @elizaos/example-code / check_npm (push) Has been cancelled
Publish @elizaos/example-code / publish_npm (push) Has been cancelled
Publish @elizaos/plugin-elizacloud / verify_version (push) Has been cancelled
Publish @elizaos/plugin-elizacloud / publish_npm (push) Has been cancelled
Sandbox Live Smoke / Sandbox live smoke (push) Has been cancelled
Snap Build & Test / Build Snap (amd64) (push) Has been cancelled
Snap Build & Test / Build Snap (arm64) (push) Has been cancelled
Test Packaging / elizaos CLI global-install smoke (node + bun) (push) Has been cancelled
Cloud Gateway Webhook / Test (push) Has been cancelled
Cloud Tests / lint-and-types (push) Has been cancelled
Cloud Tests / unit-tests (push) Has been cancelled
Cloud Tests / integration-tests (push) Has been cancelled
Cloud Tests / e2e-tests (push) Has been cancelled
CodeQL Advanced / Analyze (javascript-typescript) (push) Has been cancelled
Deploy Apps Worker (Product 2) / Determine environment (push) Has been cancelled
Deploy Apps Worker (Product 2) / Deploy apps worker to apps-control host (${{ needs.determine-env.outputs.environment }}) (push) Has been cancelled
Deploy Eliza Provisioning Worker / Determine environment (push) Has been cancelled
Deploy Eliza Provisioning Worker / Deploy worker to Hetzner host (${{ needs.determine-env.outputs.environment }} @ ${{ needs.determine-env.outputs.deployment_sha }}) (push) Has been cancelled
Dev Smoke / Classify changed paths (push) Has been cancelled
supply-chain / sbom (push) Has been cancelled
supply-chain / vulnerability-scan (push) Has been cancelled
Build, Push & Deploy to Phala Cloud / build-and-push (push) Has been cancelled
Test Packaging / Validate Packaging Configs (push) Has been cancelled
Test Packaging / Build & Test PyPI Package (push) Has been cancelled
Test Packaging / PyPI on Python ${{ matrix.python }} (push) Has been cancelled
Test Packaging / Pack & Test JS Tarballs (push) Has been cancelled
UI Fixture E2E / ui-fixture-e2e (push) Has been cancelled
UI Fixture E2E / fixture-e2e (push) Has been cancelled
UI Story Gate / story-gate (push) Has been cancelled
vault-ci / test (macos-latest) (push) Has been cancelled
vault-ci / test (ubuntu-latest) (push) Has been cancelled
vault-ci / test (windows-latest) (push) Has been cancelled
vault-ci / app-core wiring tests (push) Has been cancelled
verify-patches / verify patches/CHECKSUMS.sha256 (push) Has been cancelled
Voice Benchmark Smoke / voice-emotion fixture smoke (push) Has been cancelled
Voice Benchmark Smoke / voiceagentbench fixture smoke (push) Has been cancelled
Voice Benchmark Smoke / voicebench-quality unit smoke (push) Has been cancelled
Voice Benchmark Smoke / voicebench TypeScript unit (no audio) (push) Has been cancelled
Voice Benchmark Smoke / voice bench smoke summary (push) Has been cancelled
Windows CI / windows ([bun run --cwd packages/app-core test bun run --cwd packages/elizaos test bun run --cwd packages/cloud/shared test], app-and-cli) (push) Has been cancelled
Windows CI / windows ([bun run --cwd packages/scenario-runner test bun run --cwd packages/vault test bun run --cwd packages/security test bun run --cwd plugins/plugin-coding-tools test], framework-packages) (push) Has been cancelled
Windows CI / windows ([bun run --cwd plugins/plugin-elizacloud test bun run --cwd plugins/plugin-discord test bun run --cwd plugins/plugin-anthropic test bun run --cwd plugins/plugin-openai test bun run --cwd plugins/plugin-app-control test bun run --cwd plugins/pl… (push) Has been cancelled
Windows CI / windows ([node packages/scripts/run-turbo.mjs run build --filter=@elizaos/core --filter=@elizaos/shared --filter=@elizaos/agent --concurrency=4 node packages/scripts/run-bash-linux-only.mjs scripts/verify-riscv64-buildpaths.sh node packages/scripts/run… (push) Has been cancelled
Windows CI / windows ([node packages/scripts/run-turbo.mjs run typecheck --filter=@elizaos/core --filter=@elizaos/shared --filter=@elizaos/cloud-shared --concurrency=4 bun run --cwd packages/core test bun run --cwd packages/shared test], core-runtime, 75) (push) Has been cancelled
146 lines
4.9 KiB
Markdown
146 lines
4.9 KiB
Markdown
# @elizaos/capacitor-agent
|
|
|
|
Capacitor plugin for managing an embedded Eliza agent runtime from a WebView-based app. Provides a uniform `Agent.*` JavaScript API across iOS, Android, and web/desktop, with platform-specific native bridges and an HTTP-based web fallback.
|
|
|
|
## What it does
|
|
|
|
- **Start / stop** the agent runtime and poll its state.
|
|
- **Send chat messages** (DM channel) and receive agent replies.
|
|
- **Forward arbitrary HTTP requests** to the local agent API server via a path-only bridge.
|
|
- **Read the per-boot bearer token** on Android local deployments.
|
|
|
|
The plugin handles three deployment shapes automatically:
|
|
|
|
| Platform | Mechanism |
|
|
|---|---|
|
|
| iOS remote/cloud | HTTP to a configured API endpoint (reads `ELIZA_IOS_API_BASE` or equivalent) |
|
|
| iOS local / sideload | WebView ITTP bridge (`window.__ELIZA_BRIDGE__?.iosLocalAgentRequest`) |
|
|
| Android local | Reflection call into `ElizaAgentService` in the host app |
|
|
| Web / Electrobun | HTTP fetch to the boot-config `apiBase` or relative URLs |
|
|
|
|
## Capacitor methods
|
|
|
|
```typescript
|
|
import { Agent } from "@elizaos/capacitor-agent";
|
|
|
|
// Start the agent
|
|
const status = await Agent.start({ mode: "cloud" });
|
|
|
|
// Get status
|
|
const status = await Agent.getStatus();
|
|
// status.state: "not_started" | "starting" | "running" | "stopped" | "error"
|
|
|
|
// Chat
|
|
const reply = await Agent.chat({ text: "Hello" });
|
|
// reply.text, reply.agentName
|
|
|
|
// Forward a request
|
|
const result = await Agent.request({
|
|
path: "/api/status",
|
|
method: "GET",
|
|
timeoutMs: 5000,
|
|
});
|
|
|
|
// Stop the agent
|
|
await Agent.stop();
|
|
|
|
// Read local agent token (Android only)
|
|
const { available, token } = await Agent.getLocalAgentToken();
|
|
```
|
|
|
|
## Installation
|
|
|
|
This is a Capacitor plugin distributed as part of the elizaOS monorepo. Add it as a dependency in your Capacitor app, then run `npx cap sync` to install the native modules.
|
|
|
|
```bash
|
|
npm install @elizaos/capacitor-agent
|
|
npx cap sync
|
|
```
|
|
|
|
### iOS (CocoaPods)
|
|
|
|
The pod is named `ElizaosCapacitorAgent`. It is registered automatically via `capacitor.config` after `pod install`. Minimum deployment target: **iOS 13.0** (note: local ITTP mode requires iOS 14+).
|
|
|
|
### Android
|
|
|
|
The plugin is registered automatically. The host app must implement `ElizaAgentService` and register it in `AndroidManifest.xml`. The plugin locates it via reflection (no direct Gradle dependency).
|
|
|
|
## Configuration
|
|
|
|
### iOS endpoint (remote/cloud mode)
|
|
|
|
Set one of the following in your `capacitor.config.json` (under the `Agent` plugin key), `Info.plist`, or environment:
|
|
|
|
- `ELIZA_AGENT_API_BASE` / `ELIZA_IOS_API_BASE` / `ELIZA_MOBILE_API_BASE` — HTTP/HTTPS base URL of the agent API server
|
|
- `ELIZA_AGENT_API_TOKEN` / `ELIZA_IOS_API_TOKEN` / `ELIZA_MOBILE_API_TOKEN` — optional bearer token
|
|
- `ELIZA_IOS_RUNTIME_MODE` / `VITE_ELIZA_IOS_RUNTIME_MODE` — set to `local` / `ios-local` / `sideload-local` to activate local ITTP mode instead of HTTP
|
|
|
|
Example `capacitor.config.json` fragment:
|
|
```json
|
|
{
|
|
"plugins": {
|
|
"Agent": {
|
|
"apiBase": "https://your-eliza-host.example.com",
|
|
"apiToken": "your-bearer-token"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
### Web / Electrobun
|
|
|
|
- boot-config `apiBase` (`window.__ELIZAOS_APP_BOOT_CONFIG__`) — API server base URL; falls back to relative URLs on `http:`/`https:` origins.
|
|
- `window.__ELIZA_API_TOKEN__` — bearer token; falls back to `sessionStorage.eliza_api_token`.
|
|
|
|
## Exported types
|
|
|
|
```typescript
|
|
interface AgentStatus {
|
|
state: "not_started" | "starting" | "running" | "stopped" | "error";
|
|
agentName: string | null;
|
|
port: number | null;
|
|
startedAt: number | null; // epoch ms
|
|
error: string | null;
|
|
}
|
|
|
|
interface ChatResult {
|
|
text: string;
|
|
agentName: string;
|
|
}
|
|
|
|
interface AgentStartOptions {
|
|
apiBase?: string;
|
|
mode?: "remote-mac" | "cloud" | "cloud-hybrid" | "local" | string;
|
|
}
|
|
|
|
interface AgentRequestOptions {
|
|
path: string; // must start with /, not an absolute URL
|
|
method?: string;
|
|
headers?: Record<string, string>;
|
|
body?: string | null;
|
|
timeoutMs?: number;
|
|
}
|
|
|
|
interface AgentRequestResult {
|
|
status: number;
|
|
statusText: string;
|
|
headers: Record<string, string>;
|
|
body: string;
|
|
}
|
|
```
|
|
|
|
## Building
|
|
|
|
```bash
|
|
bun run --cwd plugins/plugin-native-agent build # tsc + rollup → dist/
|
|
bun run --cwd plugins/plugin-native-agent watch # tsc --watch
|
|
```
|
|
|
|
## Limitations
|
|
|
|
- `Agent.request` only accepts path-only URLs (must start with `/`). Absolute URLs are rejected by all implementations.
|
|
- Request and response bodies are capped at 10 MB.
|
|
- iOS local mode (`Agent.chat` / `Agent.request` via ITTP) requires `window.__ELIZA_BRIDGE__?.iosLocalAgentRequest` to be installed by the host WebView. If it is absent, a 503 is returned.
|
|
- The Android bridge uses reflection; renaming or unregistering `ElizaAgentService` breaks all Android calls silently at runtime.
|
|
- The `chat` method maintains one conversation per session (lazily created via `POST /api/conversations`). The conversation ID is not persisted across app restarts.
|