capacitor-mobile-claw 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +231 -0
- package/dist/esm/definitions.d.ts +226 -0
- package/dist/esm/definitions.d.ts.map +1 -0
- package/dist/esm/definitions.js +16 -0
- package/dist/esm/definitions.js.map +1 -0
- package/dist/esm/engine.d.ts +93 -0
- package/dist/esm/engine.d.ts.map +1 -0
- package/dist/esm/engine.js +332 -0
- package/dist/esm/engine.js.map +1 -0
- package/dist/esm/index.d.ts +24 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +25 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/mcp/mcp-server-manager.d.ts +33 -0
- package/dist/esm/mcp/mcp-server-manager.d.ts.map +1 -0
- package/dist/esm/mcp/mcp-server-manager.js +99 -0
- package/dist/esm/mcp/mcp-server-manager.js.map +1 -0
- package/dist/esm/mcp/server/device-mcp-server.d.ts +43 -0
- package/dist/esm/mcp/server/device-mcp-server.d.ts.map +1 -0
- package/dist/esm/mcp/server/device-mcp-server.js +52 -0
- package/dist/esm/mcp/server/device-mcp-server.js.map +1 -0
- package/dist/esm/mcp/tools/app-state.tools.d.ts +3 -0
- package/dist/esm/mcp/tools/app-state.tools.d.ts.map +1 -0
- package/dist/esm/mcp/tools/app-state.tools.js +22 -0
- package/dist/esm/mcp/tools/app-state.tools.js.map +1 -0
- package/dist/esm/mcp/tools/barcode.tools.d.ts +3 -0
- package/dist/esm/mcp/tools/barcode.tools.d.ts.map +1 -0
- package/dist/esm/mcp/tools/barcode.tools.js +29 -0
- package/dist/esm/mcp/tools/barcode.tools.js.map +1 -0
- package/dist/esm/mcp/tools/biometric.tools.d.ts +3 -0
- package/dist/esm/mcp/tools/biometric.tools.d.ts.map +1 -0
- package/dist/esm/mcp/tools/biometric.tools.js +33 -0
- package/dist/esm/mcp/tools/biometric.tools.js.map +1 -0
- package/dist/esm/mcp/tools/bluetooth.tools.d.ts +3 -0
- package/dist/esm/mcp/tools/bluetooth.tools.d.ts.map +1 -0
- package/dist/esm/mcp/tools/bluetooth.tools.js +95 -0
- package/dist/esm/mcp/tools/bluetooth.tools.js.map +1 -0
- package/dist/esm/mcp/tools/camera.tools.d.ts +3 -0
- package/dist/esm/mcp/tools/camera.tools.d.ts.map +1 -0
- package/dist/esm/mcp/tools/camera.tools.js +36 -0
- package/dist/esm/mcp/tools/camera.tools.js.map +1 -0
- package/dist/esm/mcp/tools/categories.d.ts +22 -0
- package/dist/esm/mcp/tools/categories.d.ts.map +1 -0
- package/dist/esm/mcp/tools/categories.js +242 -0
- package/dist/esm/mcp/tools/categories.js.map +1 -0
- package/dist/esm/mcp/tools/clipboard.tools.d.ts +3 -0
- package/dist/esm/mcp/tools/clipboard.tools.d.ts.map +1 -0
- package/dist/esm/mcp/tools/clipboard.tools.js +22 -0
- package/dist/esm/mcp/tools/clipboard.tools.js.map +1 -0
- package/dist/esm/mcp/tools/contacts.tools.d.ts +3 -0
- package/dist/esm/mcp/tools/contacts.tools.d.ts.map +1 -0
- package/dist/esm/mcp/tools/contacts.tools.js +58 -0
- package/dist/esm/mcp/tools/contacts.tools.js.map +1 -0
- package/dist/esm/mcp/tools/device-info.tools.d.ts +3 -0
- package/dist/esm/mcp/tools/device-info.tools.d.ts.map +1 -0
- package/dist/esm/mcp/tools/device-info.tools.js +39 -0
- package/dist/esm/mcp/tools/device-info.tools.js.map +1 -0
- package/dist/esm/mcp/tools/discovery.tools.d.ts +3 -0
- package/dist/esm/mcp/tools/discovery.tools.d.ts.map +1 -0
- package/dist/esm/mcp/tools/discovery.tools.js +41 -0
- package/dist/esm/mcp/tools/discovery.tools.js.map +1 -0
- package/dist/esm/mcp/tools/geolocation.tools.d.ts +3 -0
- package/dist/esm/mcp/tools/geolocation.tools.d.ts.map +1 -0
- package/dist/esm/mcp/tools/geolocation.tools.js +25 -0
- package/dist/esm/mcp/tools/geolocation.tools.js.map +1 -0
- package/dist/esm/mcp/tools/haptics.tools.d.ts +3 -0
- package/dist/esm/mcp/tools/haptics.tools.d.ts.map +1 -0
- package/dist/esm/mcp/tools/haptics.tools.js +41 -0
- package/dist/esm/mcp/tools/haptics.tools.js.map +1 -0
- package/dist/esm/mcp/tools/health.tools.d.ts +3 -0
- package/dist/esm/mcp/tools/health.tools.d.ts.map +1 -0
- package/dist/esm/mcp/tools/health.tools.js +38 -0
- package/dist/esm/mcp/tools/health.tools.js.map +1 -0
- package/dist/esm/mcp/tools/http.tools.d.ts +3 -0
- package/dist/esm/mcp/tools/http.tools.d.ts.map +1 -0
- package/dist/esm/mcp/tools/http.tools.js +24 -0
- package/dist/esm/mcp/tools/http.tools.js.map +1 -0
- package/dist/esm/mcp/tools/index.d.ts +10 -0
- package/dist/esm/mcp/tools/index.d.ts.map +1 -0
- package/dist/esm/mcp/tools/index.js +70 -0
- package/dist/esm/mcp/tools/index.js.map +1 -0
- package/dist/esm/mcp/tools/keep-awake.tools.d.ts +3 -0
- package/dist/esm/mcp/tools/keep-awake.tools.d.ts.map +1 -0
- package/dist/esm/mcp/tools/keep-awake.tools.js +23 -0
- package/dist/esm/mcp/tools/keep-awake.tools.js.map +1 -0
- package/dist/esm/mcp/tools/motion-sensors.tools.d.ts +3 -0
- package/dist/esm/mcp/tools/motion-sensors.tools.d.ts.map +1 -0
- package/dist/esm/mcp/tools/motion-sensors.tools.js +60 -0
- package/dist/esm/mcp/tools/motion-sensors.tools.js.map +1 -0
- package/dist/esm/mcp/tools/network-status.tools.d.ts +3 -0
- package/dist/esm/mcp/tools/network-status.tools.d.ts.map +1 -0
- package/dist/esm/mcp/tools/network-status.tools.js +16 -0
- package/dist/esm/mcp/tools/network-status.tools.js.map +1 -0
- package/dist/esm/mcp/tools/nfc.tools.d.ts +3 -0
- package/dist/esm/mcp/tools/nfc.tools.d.ts.map +1 -0
- package/dist/esm/mcp/tools/nfc.tools.js +52 -0
- package/dist/esm/mcp/tools/nfc.tools.js.map +1 -0
- package/dist/esm/mcp/tools/notifications.tools.d.ts +3 -0
- package/dist/esm/mcp/tools/notifications.tools.d.ts.map +1 -0
- package/dist/esm/mcp/tools/notifications.tools.js +30 -0
- package/dist/esm/mcp/tools/notifications.tools.js.map +1 -0
- package/dist/esm/mcp/tools/push-notifications.tools.d.ts +3 -0
- package/dist/esm/mcp/tools/push-notifications.tools.d.ts.map +1 -0
- package/dist/esm/mcp/tools/push-notifications.tools.js +43 -0
- package/dist/esm/mcp/tools/push-notifications.tools.js.map +1 -0
- package/dist/esm/mcp/tools/secure-storage.tools.d.ts +3 -0
- package/dist/esm/mcp/tools/secure-storage.tools.d.ts.map +1 -0
- package/dist/esm/mcp/tools/secure-storage.tools.js +31 -0
- package/dist/esm/mcp/tools/secure-storage.tools.js.map +1 -0
- package/dist/esm/mcp/tools/sftp.tools.d.ts +3 -0
- package/dist/esm/mcp/tools/sftp.tools.d.ts.map +1 -0
- package/dist/esm/mcp/tools/sftp.tools.js +41 -0
- package/dist/esm/mcp/tools/sftp.tools.js.map +1 -0
- package/dist/esm/mcp/tools/share.tools.d.ts +3 -0
- package/dist/esm/mcp/tools/share.tools.d.ts.map +1 -0
- package/dist/esm/mcp/tools/share.tools.js +18 -0
- package/dist/esm/mcp/tools/share.tools.js.map +1 -0
- package/dist/esm/mcp/tools/speech.tools.d.ts +3 -0
- package/dist/esm/mcp/tools/speech.tools.d.ts.map +1 -0
- package/dist/esm/mcp/tools/speech.tools.js +38 -0
- package/dist/esm/mcp/tools/speech.tools.js.map +1 -0
- package/dist/esm/mcp/tools/ssh.tools.d.ts +3 -0
- package/dist/esm/mcp/tools/ssh.tools.d.ts.map +1 -0
- package/dist/esm/mcp/tools/ssh.tools.js +41 -0
- package/dist/esm/mcp/tools/ssh.tools.js.map +1 -0
- package/dist/esm/mcp/tools/tcp.tools.d.ts +3 -0
- package/dist/esm/mcp/tools/tcp.tools.d.ts.map +1 -0
- package/dist/esm/mcp/tools/tcp.tools.js +47 -0
- package/dist/esm/mcp/tools/tcp.tools.js.map +1 -0
- package/dist/esm/mcp/tools/tts.tools.d.ts +3 -0
- package/dist/esm/mcp/tools/tts.tools.d.ts.map +1 -0
- package/dist/esm/mcp/tools/tts.tools.js +29 -0
- package/dist/esm/mcp/tools/tts.tools.js.map +1 -0
- package/dist/esm/mcp/tools/types.d.ts +18 -0
- package/dist/esm/mcp/tools/types.d.ts.map +1 -0
- package/dist/esm/mcp/tools/types.js +2 -0
- package/dist/esm/mcp/tools/types.js.map +1 -0
- package/dist/esm/mcp/tools/udp.tools.d.ts +3 -0
- package/dist/esm/mcp/tools/udp.tools.d.ts.map +1 -0
- package/dist/esm/mcp/tools/udp.tools.js +22 -0
- package/dist/esm/mcp/tools/udp.tools.js.map +1 -0
- package/dist/esm/mcp/tools/wol.tools.d.ts +3 -0
- package/dist/esm/mcp/tools/wol.tools.d.ts.map +1 -0
- package/dist/esm/mcp/tools/wol.tools.js +16 -0
- package/dist/esm/mcp/tools/wol.tools.js.map +1 -0
- package/dist/esm/mcp/transport/bridge-server-transport.d.ts +27 -0
- package/dist/esm/mcp/transport/bridge-server-transport.d.ts.map +1 -0
- package/dist/esm/mcp/transport/bridge-server-transport.js +72 -0
- package/dist/esm/mcp/transport/bridge-server-transport.js.map +1 -0
- package/dist/esm/mcp/transport/stomp-server-transport.d.ts +43 -0
- package/dist/esm/mcp/transport/stomp-server-transport.d.ts.map +1 -0
- package/dist/esm/mcp/transport/stomp-server-transport.js +128 -0
- package/dist/esm/mcp/transport/stomp-server-transport.js.map +1 -0
- package/dist/esm/mcp/transport/transport-manager.d.ts +38 -0
- package/dist/esm/mcp/transport/transport-manager.d.ts.map +1 -0
- package/dist/esm/mcp/transport/transport-manager.js +70 -0
- package/dist/esm/mcp/transport/transport-manager.js.map +1 -0
- package/dist/esm/plugin.d.ts +79 -0
- package/dist/esm/plugin.d.ts.map +1 -0
- package/dist/esm/plugin.js +81 -0
- package/dist/esm/plugin.js.map +1 -0
- package/dist/esm/services/bridge-protocol.d.ts +107 -0
- package/dist/esm/services/bridge-protocol.d.ts.map +1 -0
- package/dist/esm/services/bridge-protocol.js +6 -0
- package/dist/esm/services/bridge-protocol.js.map +1 -0
- package/nodejs-assets/nodejs-project/main.js +1971 -0
- package/nodejs-assets/nodejs-project/mcp-agent-tools.js +57 -0
- package/nodejs-assets/nodejs-project/mcp-bridge-client.js +98 -0
- package/nodejs-assets/nodejs-project/package-lock.json +3639 -0
- package/nodejs-assets/nodejs-project/package.json +18 -0
- package/package.json +80 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025-present Techxagon
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
# Mobile Claw
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/capacitor-mobile-claw)
|
|
4
|
+
[](https://github.com/rogelioRuiz/capacitor-mobile-claw/actions/workflows/ci.yml)
|
|
5
|
+
[](LICENSE)
|
|
6
|
+
|
|
7
|
+
**On-device AI agent engine for mobile apps** — run Claude directly on your phone with file tools, code execution, git, and extensible MCP tool support.
|
|
8
|
+
|
|
9
|
+
Mobile Claw is a [Capacitor](https://capacitorjs.com/) plugin that embeds a full AI agent runtime on Android and iOS via an embedded Node.js worker. No cloud relay, no proxy — the agent runs locally on the device and talks directly to the Anthropic API.
|
|
10
|
+
|
|
11
|
+
> Built on [OpenClaw](https://github.com/openclaw/openclaw) and the [Pi framework](https://www.npmjs.com/package/@mariozechner/pi-ai) by [Mario Zechner](https://github.com/badlogic). Pi's philosophy of *"what you leave out matters more than what you put in"* — just 4 core tools and a system prompt under 1,000 tokens — is what makes running a capable AI agent on a phone possible at all.
|
|
12
|
+
|
|
13
|
+
## Try It — Reference App
|
|
14
|
+
|
|
15
|
+
The fastest way to see Mobile Claw in action is the included reference app — a complete Vue 3 chat UI with streaming, tool approval, session management, and all features wired up.
|
|
16
|
+
|
|
17
|
+
<p align="center">
|
|
18
|
+
<img src="docs/screenshots/setup.png" width="240" alt="Setup screen — engine ready, auth config" />
|
|
19
|
+
|
|
20
|
+
<img src="docs/screenshots/chat.png" width="240" alt="Chat — code execution with JavaScript and Python test results" />
|
|
21
|
+
|
|
22
|
+
<img src="docs/screenshots/settings.png" width="240" alt="Settings — API key, workspace editor, sessions" />
|
|
23
|
+
</p>
|
|
24
|
+
|
|
25
|
+
### Prerequisites
|
|
26
|
+
|
|
27
|
+
- [Node.js](https://nodejs.org/) >= 20
|
|
28
|
+
- [Android Studio](https://developer.android.com/studio) (for Android) or [Xcode](https://developer.apple.com/xcode/) (for iOS)
|
|
29
|
+
- An Anthropic API key or Claude Max subscription
|
|
30
|
+
|
|
31
|
+
### Run on Android
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
# Clone the repo
|
|
35
|
+
git clone https://github.com/rogelioRuiz/capacitor-mobile-claw.git
|
|
36
|
+
cd capacitor-mobile-claw
|
|
37
|
+
|
|
38
|
+
# Install plugin dependencies
|
|
39
|
+
npm install
|
|
40
|
+
|
|
41
|
+
# Set up the reference app
|
|
42
|
+
cd examples/reference-app
|
|
43
|
+
npm install
|
|
44
|
+
|
|
45
|
+
# Build the web app
|
|
46
|
+
npm run build
|
|
47
|
+
|
|
48
|
+
# Add the Android platform (first time only)
|
|
49
|
+
npx cap add android
|
|
50
|
+
|
|
51
|
+
# Sync web assets → native project
|
|
52
|
+
npx cap sync android
|
|
53
|
+
|
|
54
|
+
# Open in Android Studio — build & run from there
|
|
55
|
+
npx cap open android
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Run on iOS
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
cd examples/reference-app
|
|
62
|
+
npx cap add ios
|
|
63
|
+
npx cap sync ios
|
|
64
|
+
npx cap open ios
|
|
65
|
+
# Build & run from Xcode
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Once the app launches, enter your Anthropic API key in settings and start chatting. The agent can read/write files, run code, use git, and call any registered MCP device tools — all on-device.
|
|
69
|
+
|
|
70
|
+
## How It Works
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
┌─────────────────────────────────────────────────────┐
|
|
74
|
+
│ Your App (Vue, React, Svelte, vanilla JS) │
|
|
75
|
+
│ ┌───────────────────────────────────────────────┐ │
|
|
76
|
+
│ │ MobileClawEngine (framework-agnostic) │ │
|
|
77
|
+
│ │ - sendMessage() / stopTurn() / steerAgent() │ │
|
|
78
|
+
│ │ - readFile() / writeFile() │ │
|
|
79
|
+
│ │ - listSessions() / resumeSession() │ │
|
|
80
|
+
│ │ - invokeTool() │ │
|
|
81
|
+
│ └──────────────────┬────────────────────────────┘ │
|
|
82
|
+
│ │ Bridge Protocol (IPC) │
|
|
83
|
+
│ ┌──────────────────▼────────────────────────────┐ │
|
|
84
|
+
│ │ Embedded Node.js Worker (Capacitor-NodeJS) │ │
|
|
85
|
+
│ │ ┌──────────────┐ ┌──────────────────────┐ │ │
|
|
86
|
+
│ │ │ Pi Agent │ │ MCP Server │ │ │
|
|
87
|
+
│ │ │ (@mariozechner│ │ - Bridge transport │ │ │
|
|
88
|
+
│ │ │ /pi-ai) │ │ - STOMP transport │ │ │
|
|
89
|
+
│ │ │ │ │ - Custom tools (BYO) │ │ │
|
|
90
|
+
│ │ └──────┬───────┘ └──────────────────────┘ │ │
|
|
91
|
+
│ │ │ │ │
|
|
92
|
+
│ │ ▼ Anthropic Messages API │ │
|
|
93
|
+
│ └────────────────────────────────────────────────┘ │
|
|
94
|
+
└─────────────────────────────────────────────────────┘
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## Install in Your Own App
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
npm install capacitor-mobile-claw
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Peer dependencies:
|
|
104
|
+
```bash
|
|
105
|
+
npm install @capacitor/core @capacitor/device
|
|
106
|
+
# capacitor-nodejs is distributed via GitHub Releases (not npm):
|
|
107
|
+
npm install https://github.com/hampoelz/Capacitor-NodeJS/releases/download/v1.0.0-beta.9/capacitor-nodejs.tgz
|
|
108
|
+
# Optional (for MCP device tools):
|
|
109
|
+
npm install @modelcontextprotocol/sdk
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### Basic Usage
|
|
113
|
+
|
|
114
|
+
```typescript
|
|
115
|
+
import { MobileClawEngine } from 'capacitor-mobile-claw'
|
|
116
|
+
|
|
117
|
+
const engine = new MobileClawEngine()
|
|
118
|
+
|
|
119
|
+
// Initialize the embedded Node.js worker
|
|
120
|
+
await engine.init()
|
|
121
|
+
|
|
122
|
+
// Listen for streaming text
|
|
123
|
+
engine.addListener('agentEvent', (event) => {
|
|
124
|
+
if (event.eventType === 'text_delta') {
|
|
125
|
+
process.stdout.write(event.data.text)
|
|
126
|
+
}
|
|
127
|
+
})
|
|
128
|
+
|
|
129
|
+
// Send a message
|
|
130
|
+
await engine.sendMessage('What files are in my workspace?')
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### With Custom MCP Tools
|
|
134
|
+
|
|
135
|
+
```typescript
|
|
136
|
+
import { MobileClawEngine } from 'capacitor-mobile-claw'
|
|
137
|
+
import type { DeviceTool } from 'capacitor-mobile-claw/mcp/tools/types'
|
|
138
|
+
|
|
139
|
+
const myTools: DeviceTool[] = [
|
|
140
|
+
{
|
|
141
|
+
name: 'get_battery',
|
|
142
|
+
description: 'Get current battery level and charging state',
|
|
143
|
+
inputSchema: { type: 'object', properties: {} },
|
|
144
|
+
handler: async () => ({ level: 0.85, charging: true }),
|
|
145
|
+
},
|
|
146
|
+
]
|
|
147
|
+
|
|
148
|
+
const engine = new MobileClawEngine()
|
|
149
|
+
|
|
150
|
+
await engine.init({
|
|
151
|
+
tools: myTools,
|
|
152
|
+
enableBridge: true,
|
|
153
|
+
})
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
## Features
|
|
157
|
+
|
|
158
|
+
- **Real-time streaming** — text deltas, tool use, and thinking events
|
|
159
|
+
- **Multi-turn conversations** — session persistence with JSONL transcripts
|
|
160
|
+
- **OAuth PKCE + API key** — sign in with Claude Max or use a direct API key
|
|
161
|
+
- **File tools** — sandboxed read/write/edit/find/grep
|
|
162
|
+
- **Code execution** — JavaScript (sandbox) + Python (Pyodide/WebAssembly)
|
|
163
|
+
- **Git** — clone, commit, push, diff via isomorphic-git
|
|
164
|
+
- **MCP device tools** — extensible via Model Context Protocol
|
|
165
|
+
- **Tool approval gate** — approve/deny tool executions before they run
|
|
166
|
+
- **Agent steering** — inject follow-up instructions into a running turn
|
|
167
|
+
|
|
168
|
+
## API Reference
|
|
169
|
+
|
|
170
|
+
### MobileClawEngine
|
|
171
|
+
|
|
172
|
+
| Method | Description |
|
|
173
|
+
|--------|-------------|
|
|
174
|
+
| `init(options?)` | Start the Node.js worker and MCP bridge |
|
|
175
|
+
| `sendMessage(prompt, agentId?)` | Send a prompt to the agent |
|
|
176
|
+
| `stopTurn()` | Cancel the running agent turn |
|
|
177
|
+
| `approveTool(toolCallId, approved)` | Approve/deny a tool execution |
|
|
178
|
+
| `steerAgent(text)` | Inject a follow-up instruction |
|
|
179
|
+
| `updateConfig(config)` | Update worker config (auth, model, etc.) |
|
|
180
|
+
| `getAuthStatus()` | Get current auth profile status |
|
|
181
|
+
| `getModels()` | List available models |
|
|
182
|
+
| `readFile(path)` / `writeFile(path, content)` | Workspace file operations |
|
|
183
|
+
| `listSessions()` / `resumeSession(key)` | Session management |
|
|
184
|
+
| `invokeTool(toolName, args?)` | Call a tool directly |
|
|
185
|
+
| `addListener(eventName, handler)` | Subscribe to agent events |
|
|
186
|
+
|
|
187
|
+
### Events
|
|
188
|
+
|
|
189
|
+
| Event | Fired When |
|
|
190
|
+
|-------|-----------|
|
|
191
|
+
| `agentEvent` | Text delta, tool use, tool result, or thinking update |
|
|
192
|
+
| `agentCompleted` | Agent turn finished (includes token usage) |
|
|
193
|
+
| `agentError` | Agent execution failed |
|
|
194
|
+
| `toolApprovalRequest` | Agent wants to run a tool (approval gate) |
|
|
195
|
+
| `workerReady` | Node.js worker initialized |
|
|
196
|
+
|
|
197
|
+
## Documentation
|
|
198
|
+
|
|
199
|
+
- [Architecture](docs/architecture.md) — system design and layer breakdown
|
|
200
|
+
- [Bridge Protocol](docs/bridge-protocol.md) — UI-to-Worker message reference
|
|
201
|
+
- [Creating Device Tools](docs/creating-tools.md) — how to build custom MCP tools
|
|
202
|
+
|
|
203
|
+
## Related Packages
|
|
204
|
+
|
|
205
|
+
- [capacitor-mobile-claw-device-tools](https://github.com/rogelioRuiz/capacitor-mobile-claw-device-tools) — 64+ pre-built device tools (camera, clipboard, sensors, SSH, etc.)
|
|
206
|
+
|
|
207
|
+
## Contributing
|
|
208
|
+
|
|
209
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup, workflow, and guidelines.
|
|
210
|
+
|
|
211
|
+
## Tech Stack
|
|
212
|
+
|
|
213
|
+
| Layer | Technology |
|
|
214
|
+
|-------|-----------|
|
|
215
|
+
| Mobile framework | [Capacitor 8](https://capacitorjs.com/) |
|
|
216
|
+
| Agent core | [Pi](https://www.npmjs.com/package/@mariozechner/pi-ai) by Mario Zechner |
|
|
217
|
+
| Embedded runtime | [Capacitor-NodeJS](https://github.com/hampoelz/Capacitor-NodeJS) |
|
|
218
|
+
| Tool protocol | [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) |
|
|
219
|
+
| LLM provider | [Anthropic Claude](https://anthropic.com/) |
|
|
220
|
+
| Git | [isomorphic-git](https://isomorphic-git.org/) |
|
|
221
|
+
| Python | [Pyodide](https://pyodide.org/) (CPython via WebAssembly) |
|
|
222
|
+
| Type system | TypeScript (strict mode) |
|
|
223
|
+
| Tests | [Vitest](https://vitest.dev/) |
|
|
224
|
+
|
|
225
|
+
## Acknowledgments
|
|
226
|
+
|
|
227
|
+
Mobile Claw is built on [OpenClaw](https://github.com/openclaw/openclaw) and the [Pi framework](https://www.npmjs.com/package/@mariozechner/pi-ai) by [Mario Zechner](https://github.com/badlogic) (creator of [libGDX](https://libgdx.com/)). Pi demonstrated that a truly capable AI agent doesn't need a massive framework — just four well-designed tools and a focused system prompt. That minimalism is what makes on-device mobile execution feasible.
|
|
228
|
+
|
|
229
|
+
## License
|
|
230
|
+
|
|
231
|
+
MIT
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MobileClaw Capacitor Plugin — Public API definitions.
|
|
3
|
+
*
|
|
4
|
+
* This is a headless (no-UI) plugin that embeds an AI agent engine
|
|
5
|
+
* on-device via Capacitor-NodeJS. The agent has file tools, code
|
|
6
|
+
* execution, git integration, and 64+ MCP device tools.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* import { MobileClaw } from 'capacitor-mobile-claw'
|
|
10
|
+
*
|
|
11
|
+
* await MobileClaw.init()
|
|
12
|
+
* const key = await MobileClaw.sendMessage('Hello agent')
|
|
13
|
+
* MobileClaw.onEvent('text_delta', (e) => console.log(e.text))
|
|
14
|
+
*/
|
|
15
|
+
export interface MobileClawPlugin {
|
|
16
|
+
/**
|
|
17
|
+
* Initialize the embedded Node.js worker and MCP bridge.
|
|
18
|
+
* Must be called once before any other method.
|
|
19
|
+
* Resolves when the worker sends 'worker.ready'.
|
|
20
|
+
*/
|
|
21
|
+
init(options?: MobileClawInitOptions): Promise<MobileClawReadyInfo>;
|
|
22
|
+
/**
|
|
23
|
+
* Whether the plugin has been initialized and the worker is ready.
|
|
24
|
+
*/
|
|
25
|
+
isReady(): Promise<{
|
|
26
|
+
ready: boolean;
|
|
27
|
+
}>;
|
|
28
|
+
/**
|
|
29
|
+
* Send a prompt to the agent. Returns the session key for this conversation.
|
|
30
|
+
* Reuses the current session key for multi-turn conversations.
|
|
31
|
+
*/
|
|
32
|
+
sendMessage(options: {
|
|
33
|
+
prompt: string;
|
|
34
|
+
agentId?: string;
|
|
35
|
+
}): Promise<{
|
|
36
|
+
sessionKey: string;
|
|
37
|
+
}>;
|
|
38
|
+
/**
|
|
39
|
+
* Stop the currently running agent turn.
|
|
40
|
+
*/
|
|
41
|
+
stopTurn(): Promise<void>;
|
|
42
|
+
/**
|
|
43
|
+
* Approve or deny a tool execution request from the agent.
|
|
44
|
+
*/
|
|
45
|
+
approveTool(options: {
|
|
46
|
+
toolCallId: string;
|
|
47
|
+
approved: boolean;
|
|
48
|
+
}): Promise<void>;
|
|
49
|
+
/**
|
|
50
|
+
* Send a steering/follow-up message to a running agent turn.
|
|
51
|
+
*/
|
|
52
|
+
steerAgent(options: {
|
|
53
|
+
text: string;
|
|
54
|
+
}): Promise<void>;
|
|
55
|
+
/**
|
|
56
|
+
* Update worker configuration (e.g. set API key, provider, model).
|
|
57
|
+
*/
|
|
58
|
+
updateConfig(options: {
|
|
59
|
+
config: Record<string, unknown>;
|
|
60
|
+
}): Promise<void>;
|
|
61
|
+
/**
|
|
62
|
+
* Get auth profile status from the worker.
|
|
63
|
+
*/
|
|
64
|
+
getAuthStatus(): Promise<AuthStatus>;
|
|
65
|
+
/**
|
|
66
|
+
* Read a file from the agent workspace.
|
|
67
|
+
*/
|
|
68
|
+
readFile(options: {
|
|
69
|
+
path: string;
|
|
70
|
+
}): Promise<FileReadResult>;
|
|
71
|
+
/**
|
|
72
|
+
* Write a file to the agent workspace.
|
|
73
|
+
*/
|
|
74
|
+
writeFile(options: {
|
|
75
|
+
path: string;
|
|
76
|
+
content: string;
|
|
77
|
+
}): Promise<void>;
|
|
78
|
+
/**
|
|
79
|
+
* List past sessions from the worker's JSONL store.
|
|
80
|
+
*/
|
|
81
|
+
listSessions(options?: {
|
|
82
|
+
agentId?: string;
|
|
83
|
+
}): Promise<SessionListResult>;
|
|
84
|
+
/**
|
|
85
|
+
* Get the most recent session.
|
|
86
|
+
*/
|
|
87
|
+
getLatestSession(options?: {
|
|
88
|
+
agentId?: string;
|
|
89
|
+
}): Promise<SessionInfo | null>;
|
|
90
|
+
/**
|
|
91
|
+
* Load message history for a session from JSONL transcript.
|
|
92
|
+
*/
|
|
93
|
+
loadSessionHistory(options: {
|
|
94
|
+
sessionKey: string;
|
|
95
|
+
agentId?: string;
|
|
96
|
+
}): Promise<SessionHistoryResult>;
|
|
97
|
+
/**
|
|
98
|
+
* Resume a previous session (hydrate agent with saved messages).
|
|
99
|
+
*/
|
|
100
|
+
resumeSession(options: {
|
|
101
|
+
sessionKey: string;
|
|
102
|
+
agentId?: string;
|
|
103
|
+
}): Promise<void>;
|
|
104
|
+
/**
|
|
105
|
+
* Clear the current conversation (local state; transcripts preserved).
|
|
106
|
+
*/
|
|
107
|
+
clearConversation(): Promise<{
|
|
108
|
+
success: boolean;
|
|
109
|
+
}>;
|
|
110
|
+
/**
|
|
111
|
+
* Set the current session key (e.g. for resuming a specific session).
|
|
112
|
+
*/
|
|
113
|
+
setSessionKey(options: {
|
|
114
|
+
sessionKey: string;
|
|
115
|
+
}): Promise<void>;
|
|
116
|
+
/**
|
|
117
|
+
* Get the current session key.
|
|
118
|
+
*/
|
|
119
|
+
getSessionKey(): Promise<{
|
|
120
|
+
sessionKey: string | null;
|
|
121
|
+
}>;
|
|
122
|
+
/**
|
|
123
|
+
* Invoke a worker tool directly (local file tools or MCP device tools).
|
|
124
|
+
* Useful for testing or for direct tool access without running the agent.
|
|
125
|
+
*/
|
|
126
|
+
invokeTool(options: {
|
|
127
|
+
toolName: string;
|
|
128
|
+
args?: Record<string, unknown>;
|
|
129
|
+
}): Promise<ToolInvokeResult>;
|
|
130
|
+
/**
|
|
131
|
+
* Register a listener for agent events.
|
|
132
|
+
* Returns an unsubscribe function.
|
|
133
|
+
*/
|
|
134
|
+
addListener(eventName: MobileClawEventName, handler: (event: MobileClawEvent) => void): Promise<{
|
|
135
|
+
remove: () => Promise<void>;
|
|
136
|
+
}>;
|
|
137
|
+
/**
|
|
138
|
+
* Remove all listeners for an event type.
|
|
139
|
+
*/
|
|
140
|
+
removeAllListeners(eventName?: MobileClawEventName): Promise<void>;
|
|
141
|
+
}
|
|
142
|
+
import type { DeviceTool } from './mcp/tools/types';
|
|
143
|
+
export interface MobileClawInitOptions {
|
|
144
|
+
/** Enable bridge MCP transport (in-process device tools). Default: true. */
|
|
145
|
+
enableBridge?: boolean;
|
|
146
|
+
/** Enable STOMP MCP transport (remote access). Default: false. */
|
|
147
|
+
enableStomp?: boolean;
|
|
148
|
+
/** Custom STOMP config when enableStomp is true. */
|
|
149
|
+
stompConfig?: StompConfig;
|
|
150
|
+
/** MCP device tools to register. Pass from an external tools package. */
|
|
151
|
+
tools?: DeviceTool[];
|
|
152
|
+
/** Worker startup timeout in ms. Default: 60000. */
|
|
153
|
+
workerTimeout?: number;
|
|
154
|
+
}
|
|
155
|
+
export interface StompConfig {
|
|
156
|
+
brokerURL: string;
|
|
157
|
+
login: string;
|
|
158
|
+
passcode: string;
|
|
159
|
+
deviceId?: string;
|
|
160
|
+
reconnectDelay?: number;
|
|
161
|
+
}
|
|
162
|
+
export interface MobileClawReadyInfo {
|
|
163
|
+
nodeVersion: string;
|
|
164
|
+
openclawRoot: string;
|
|
165
|
+
mcpToolCount: number;
|
|
166
|
+
}
|
|
167
|
+
export interface AuthStatus {
|
|
168
|
+
hasKey: boolean;
|
|
169
|
+
masked: string;
|
|
170
|
+
}
|
|
171
|
+
export interface FileReadResult {
|
|
172
|
+
path: string;
|
|
173
|
+
content: string;
|
|
174
|
+
error?: string;
|
|
175
|
+
}
|
|
176
|
+
export interface SessionInfo {
|
|
177
|
+
sessionKey: string;
|
|
178
|
+
sessionId?: string;
|
|
179
|
+
updatedAt: number;
|
|
180
|
+
model?: string;
|
|
181
|
+
totalTokens?: number;
|
|
182
|
+
}
|
|
183
|
+
export interface SessionListResult {
|
|
184
|
+
agentId: string;
|
|
185
|
+
sessions: SessionInfo[];
|
|
186
|
+
}
|
|
187
|
+
export interface SessionHistoryResult {
|
|
188
|
+
sessionKey: string;
|
|
189
|
+
messages: unknown[];
|
|
190
|
+
error?: string;
|
|
191
|
+
}
|
|
192
|
+
export interface ToolInvokeResult {
|
|
193
|
+
toolName: string;
|
|
194
|
+
result?: unknown;
|
|
195
|
+
error?: string;
|
|
196
|
+
}
|
|
197
|
+
export type MobileClawEventName = 'agentEvent' | 'agentCompleted' | 'agentError' | 'toolApprovalRequest' | 'workerReady';
|
|
198
|
+
export type MobileClawEvent = AgentEvent | AgentCompletedEvent | AgentErrorEvent | ToolApprovalRequestEvent | WorkerReadyEvent;
|
|
199
|
+
export interface AgentEvent {
|
|
200
|
+
eventType: 'text_delta' | 'tool_use' | 'tool_result' | 'thinking' | 'error';
|
|
201
|
+
data: Record<string, unknown>;
|
|
202
|
+
}
|
|
203
|
+
export interface AgentCompletedEvent {
|
|
204
|
+
sessionKey: string;
|
|
205
|
+
usage?: {
|
|
206
|
+
inputTokens: number;
|
|
207
|
+
outputTokens: number;
|
|
208
|
+
totalTokens: number;
|
|
209
|
+
};
|
|
210
|
+
durationMs: number;
|
|
211
|
+
}
|
|
212
|
+
export interface AgentErrorEvent {
|
|
213
|
+
error: string;
|
|
214
|
+
code?: string;
|
|
215
|
+
}
|
|
216
|
+
export interface ToolApprovalRequestEvent {
|
|
217
|
+
toolCallId: string;
|
|
218
|
+
toolName: string;
|
|
219
|
+
args: Record<string, unknown>;
|
|
220
|
+
}
|
|
221
|
+
export interface WorkerReadyEvent {
|
|
222
|
+
nodeVersion: string;
|
|
223
|
+
openclawRoot: string;
|
|
224
|
+
mcpToolCount?: number;
|
|
225
|
+
}
|
|
226
|
+
//# sourceMappingURL=definitions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/definitions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MobileClaw Capacitor Plugin — Public API definitions.
|
|
3
|
+
*
|
|
4
|
+
* This is a headless (no-UI) plugin that embeds an AI agent engine
|
|
5
|
+
* on-device via Capacitor-NodeJS. The agent has file tools, code
|
|
6
|
+
* execution, git integration, and 64+ MCP device tools.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* import { MobileClaw } from 'capacitor-mobile-claw'
|
|
10
|
+
*
|
|
11
|
+
* await MobileClaw.init()
|
|
12
|
+
* const key = await MobileClaw.sendMessage('Hello agent')
|
|
13
|
+
* MobileClaw.onEvent('text_delta', (e) => console.log(e.text))
|
|
14
|
+
*/
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=definitions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/definitions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MobileClawEngine — Framework-agnostic core engine.
|
|
3
|
+
*
|
|
4
|
+
* This is the headless implementation of the MobileClaw plugin.
|
|
5
|
+
* It manages the embedded Node.js worker, bridge communication,
|
|
6
|
+
* MCP server lifecycle, and exposes all plugin API methods.
|
|
7
|
+
*
|
|
8
|
+
* No Vue, React, or any UI framework dependency.
|
|
9
|
+
*/
|
|
10
|
+
import type { AuthStatus, FileReadResult, MobileClawEvent, MobileClawEventName, MobileClawInitOptions, MobileClawReadyInfo, SessionHistoryResult, SessionInfo, SessionListResult, ToolInvokeResult } from './definitions';
|
|
11
|
+
import { McpServerManager } from './mcp/mcp-server-manager';
|
|
12
|
+
type MessageHandler = (msg: any) => void;
|
|
13
|
+
export declare class MobileClawEngine {
|
|
14
|
+
private _ready;
|
|
15
|
+
private _available;
|
|
16
|
+
private _nodeVersion;
|
|
17
|
+
private _openclawRoot;
|
|
18
|
+
private _mcpToolCount;
|
|
19
|
+
private _loading;
|
|
20
|
+
private _error;
|
|
21
|
+
private _currentSessionKey;
|
|
22
|
+
private nodePlugin;
|
|
23
|
+
private listeners;
|
|
24
|
+
private initPromise;
|
|
25
|
+
private _mcpManager;
|
|
26
|
+
get ready(): boolean;
|
|
27
|
+
get available(): boolean;
|
|
28
|
+
get nodeVersion(): string | null;
|
|
29
|
+
get openclawRoot(): string | null;
|
|
30
|
+
get mcpToolCount(): number;
|
|
31
|
+
get loading(): boolean;
|
|
32
|
+
get error(): string | null;
|
|
33
|
+
get currentSessionKey(): string | null;
|
|
34
|
+
/** Access the MCP server manager for status, restart, etc. */
|
|
35
|
+
get mcpManager(): McpServerManager | null;
|
|
36
|
+
init(options?: MobileClawInitOptions): Promise<MobileClawReadyInfo>;
|
|
37
|
+
private _doInit;
|
|
38
|
+
isReady(): Promise<{
|
|
39
|
+
ready: boolean;
|
|
40
|
+
}>;
|
|
41
|
+
send(message: Record<string, unknown>): Promise<void>;
|
|
42
|
+
/** Internal message listener (returns unsubscribe fn) */
|
|
43
|
+
private _onMessage;
|
|
44
|
+
private _dispatch;
|
|
45
|
+
sendMessage(prompt: string, agentId?: string, options?: {
|
|
46
|
+
model?: string;
|
|
47
|
+
}): Promise<{
|
|
48
|
+
sessionKey: string;
|
|
49
|
+
}>;
|
|
50
|
+
getModels(): Promise<Array<{
|
|
51
|
+
id: string;
|
|
52
|
+
name: string;
|
|
53
|
+
description: string;
|
|
54
|
+
default?: boolean;
|
|
55
|
+
}>>;
|
|
56
|
+
stopTurn(): Promise<void>;
|
|
57
|
+
approveTool(toolCallId: string, approved: boolean): Promise<void>;
|
|
58
|
+
steerAgent(text: string): Promise<void>;
|
|
59
|
+
updateConfig(config: Record<string, unknown>): Promise<void>;
|
|
60
|
+
exchangeOAuthCode(tokenUrl: string, body: Record<string, string>): Promise<any>;
|
|
61
|
+
getAuthStatus(): Promise<AuthStatus>;
|
|
62
|
+
readFile(path: string): Promise<FileReadResult>;
|
|
63
|
+
writeFile(path: string, content: string): Promise<void>;
|
|
64
|
+
listSessions(agentId?: string): Promise<SessionListResult>;
|
|
65
|
+
getLatestSession(agentId?: string): Promise<SessionInfo | null>;
|
|
66
|
+
loadSessionHistory(sessionKey: string, agentId?: string): Promise<SessionHistoryResult>;
|
|
67
|
+
resumeSession(sessionKey: string, agentId?: string): Promise<void>;
|
|
68
|
+
clearConversation(): Promise<{
|
|
69
|
+
success: boolean;
|
|
70
|
+
}>;
|
|
71
|
+
setSessionKey(sessionKey: string): Promise<void>;
|
|
72
|
+
getSessionKey(): Promise<{
|
|
73
|
+
sessionKey: string | null;
|
|
74
|
+
}>;
|
|
75
|
+
invokeTool(toolName: string, args?: Record<string, unknown>): Promise<ToolInvokeResult>;
|
|
76
|
+
/**
|
|
77
|
+
* Map from Capacitor event names to bridge message types.
|
|
78
|
+
*/
|
|
79
|
+
private static readonly EVENT_MAP;
|
|
80
|
+
addListener(eventName: MobileClawEventName, handler: (event: MobileClawEvent) => void): {
|
|
81
|
+
remove: () => void;
|
|
82
|
+
};
|
|
83
|
+
removeAllListeners(eventName?: MobileClawEventName): void;
|
|
84
|
+
/**
|
|
85
|
+
* Register a handler for a specific bridge message type.
|
|
86
|
+
* Useful for framework wrappers (Vue, React) that need raw bridge access.
|
|
87
|
+
*/
|
|
88
|
+
onMessage(type: string, handler: MessageHandler, opts?: {
|
|
89
|
+
once?: boolean;
|
|
90
|
+
}): () => void;
|
|
91
|
+
}
|
|
92
|
+
export {};
|
|
93
|
+
//# sourceMappingURL=engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/engine.ts"],"names":[],"mappings":"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"}
|