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.
Files changed (172) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +231 -0
  3. package/dist/esm/definitions.d.ts +226 -0
  4. package/dist/esm/definitions.d.ts.map +1 -0
  5. package/dist/esm/definitions.js +16 -0
  6. package/dist/esm/definitions.js.map +1 -0
  7. package/dist/esm/engine.d.ts +93 -0
  8. package/dist/esm/engine.d.ts.map +1 -0
  9. package/dist/esm/engine.js +332 -0
  10. package/dist/esm/engine.js.map +1 -0
  11. package/dist/esm/index.d.ts +24 -0
  12. package/dist/esm/index.d.ts.map +1 -0
  13. package/dist/esm/index.js +25 -0
  14. package/dist/esm/index.js.map +1 -0
  15. package/dist/esm/mcp/mcp-server-manager.d.ts +33 -0
  16. package/dist/esm/mcp/mcp-server-manager.d.ts.map +1 -0
  17. package/dist/esm/mcp/mcp-server-manager.js +99 -0
  18. package/dist/esm/mcp/mcp-server-manager.js.map +1 -0
  19. package/dist/esm/mcp/server/device-mcp-server.d.ts +43 -0
  20. package/dist/esm/mcp/server/device-mcp-server.d.ts.map +1 -0
  21. package/dist/esm/mcp/server/device-mcp-server.js +52 -0
  22. package/dist/esm/mcp/server/device-mcp-server.js.map +1 -0
  23. package/dist/esm/mcp/tools/app-state.tools.d.ts +3 -0
  24. package/dist/esm/mcp/tools/app-state.tools.d.ts.map +1 -0
  25. package/dist/esm/mcp/tools/app-state.tools.js +22 -0
  26. package/dist/esm/mcp/tools/app-state.tools.js.map +1 -0
  27. package/dist/esm/mcp/tools/barcode.tools.d.ts +3 -0
  28. package/dist/esm/mcp/tools/barcode.tools.d.ts.map +1 -0
  29. package/dist/esm/mcp/tools/barcode.tools.js +29 -0
  30. package/dist/esm/mcp/tools/barcode.tools.js.map +1 -0
  31. package/dist/esm/mcp/tools/biometric.tools.d.ts +3 -0
  32. package/dist/esm/mcp/tools/biometric.tools.d.ts.map +1 -0
  33. package/dist/esm/mcp/tools/biometric.tools.js +33 -0
  34. package/dist/esm/mcp/tools/biometric.tools.js.map +1 -0
  35. package/dist/esm/mcp/tools/bluetooth.tools.d.ts +3 -0
  36. package/dist/esm/mcp/tools/bluetooth.tools.d.ts.map +1 -0
  37. package/dist/esm/mcp/tools/bluetooth.tools.js +95 -0
  38. package/dist/esm/mcp/tools/bluetooth.tools.js.map +1 -0
  39. package/dist/esm/mcp/tools/camera.tools.d.ts +3 -0
  40. package/dist/esm/mcp/tools/camera.tools.d.ts.map +1 -0
  41. package/dist/esm/mcp/tools/camera.tools.js +36 -0
  42. package/dist/esm/mcp/tools/camera.tools.js.map +1 -0
  43. package/dist/esm/mcp/tools/categories.d.ts +22 -0
  44. package/dist/esm/mcp/tools/categories.d.ts.map +1 -0
  45. package/dist/esm/mcp/tools/categories.js +242 -0
  46. package/dist/esm/mcp/tools/categories.js.map +1 -0
  47. package/dist/esm/mcp/tools/clipboard.tools.d.ts +3 -0
  48. package/dist/esm/mcp/tools/clipboard.tools.d.ts.map +1 -0
  49. package/dist/esm/mcp/tools/clipboard.tools.js +22 -0
  50. package/dist/esm/mcp/tools/clipboard.tools.js.map +1 -0
  51. package/dist/esm/mcp/tools/contacts.tools.d.ts +3 -0
  52. package/dist/esm/mcp/tools/contacts.tools.d.ts.map +1 -0
  53. package/dist/esm/mcp/tools/contacts.tools.js +58 -0
  54. package/dist/esm/mcp/tools/contacts.tools.js.map +1 -0
  55. package/dist/esm/mcp/tools/device-info.tools.d.ts +3 -0
  56. package/dist/esm/mcp/tools/device-info.tools.d.ts.map +1 -0
  57. package/dist/esm/mcp/tools/device-info.tools.js +39 -0
  58. package/dist/esm/mcp/tools/device-info.tools.js.map +1 -0
  59. package/dist/esm/mcp/tools/discovery.tools.d.ts +3 -0
  60. package/dist/esm/mcp/tools/discovery.tools.d.ts.map +1 -0
  61. package/dist/esm/mcp/tools/discovery.tools.js +41 -0
  62. package/dist/esm/mcp/tools/discovery.tools.js.map +1 -0
  63. package/dist/esm/mcp/tools/geolocation.tools.d.ts +3 -0
  64. package/dist/esm/mcp/tools/geolocation.tools.d.ts.map +1 -0
  65. package/dist/esm/mcp/tools/geolocation.tools.js +25 -0
  66. package/dist/esm/mcp/tools/geolocation.tools.js.map +1 -0
  67. package/dist/esm/mcp/tools/haptics.tools.d.ts +3 -0
  68. package/dist/esm/mcp/tools/haptics.tools.d.ts.map +1 -0
  69. package/dist/esm/mcp/tools/haptics.tools.js +41 -0
  70. package/dist/esm/mcp/tools/haptics.tools.js.map +1 -0
  71. package/dist/esm/mcp/tools/health.tools.d.ts +3 -0
  72. package/dist/esm/mcp/tools/health.tools.d.ts.map +1 -0
  73. package/dist/esm/mcp/tools/health.tools.js +38 -0
  74. package/dist/esm/mcp/tools/health.tools.js.map +1 -0
  75. package/dist/esm/mcp/tools/http.tools.d.ts +3 -0
  76. package/dist/esm/mcp/tools/http.tools.d.ts.map +1 -0
  77. package/dist/esm/mcp/tools/http.tools.js +24 -0
  78. package/dist/esm/mcp/tools/http.tools.js.map +1 -0
  79. package/dist/esm/mcp/tools/index.d.ts +10 -0
  80. package/dist/esm/mcp/tools/index.d.ts.map +1 -0
  81. package/dist/esm/mcp/tools/index.js +70 -0
  82. package/dist/esm/mcp/tools/index.js.map +1 -0
  83. package/dist/esm/mcp/tools/keep-awake.tools.d.ts +3 -0
  84. package/dist/esm/mcp/tools/keep-awake.tools.d.ts.map +1 -0
  85. package/dist/esm/mcp/tools/keep-awake.tools.js +23 -0
  86. package/dist/esm/mcp/tools/keep-awake.tools.js.map +1 -0
  87. package/dist/esm/mcp/tools/motion-sensors.tools.d.ts +3 -0
  88. package/dist/esm/mcp/tools/motion-sensors.tools.d.ts.map +1 -0
  89. package/dist/esm/mcp/tools/motion-sensors.tools.js +60 -0
  90. package/dist/esm/mcp/tools/motion-sensors.tools.js.map +1 -0
  91. package/dist/esm/mcp/tools/network-status.tools.d.ts +3 -0
  92. package/dist/esm/mcp/tools/network-status.tools.d.ts.map +1 -0
  93. package/dist/esm/mcp/tools/network-status.tools.js +16 -0
  94. package/dist/esm/mcp/tools/network-status.tools.js.map +1 -0
  95. package/dist/esm/mcp/tools/nfc.tools.d.ts +3 -0
  96. package/dist/esm/mcp/tools/nfc.tools.d.ts.map +1 -0
  97. package/dist/esm/mcp/tools/nfc.tools.js +52 -0
  98. package/dist/esm/mcp/tools/nfc.tools.js.map +1 -0
  99. package/dist/esm/mcp/tools/notifications.tools.d.ts +3 -0
  100. package/dist/esm/mcp/tools/notifications.tools.d.ts.map +1 -0
  101. package/dist/esm/mcp/tools/notifications.tools.js +30 -0
  102. package/dist/esm/mcp/tools/notifications.tools.js.map +1 -0
  103. package/dist/esm/mcp/tools/push-notifications.tools.d.ts +3 -0
  104. package/dist/esm/mcp/tools/push-notifications.tools.d.ts.map +1 -0
  105. package/dist/esm/mcp/tools/push-notifications.tools.js +43 -0
  106. package/dist/esm/mcp/tools/push-notifications.tools.js.map +1 -0
  107. package/dist/esm/mcp/tools/secure-storage.tools.d.ts +3 -0
  108. package/dist/esm/mcp/tools/secure-storage.tools.d.ts.map +1 -0
  109. package/dist/esm/mcp/tools/secure-storage.tools.js +31 -0
  110. package/dist/esm/mcp/tools/secure-storage.tools.js.map +1 -0
  111. package/dist/esm/mcp/tools/sftp.tools.d.ts +3 -0
  112. package/dist/esm/mcp/tools/sftp.tools.d.ts.map +1 -0
  113. package/dist/esm/mcp/tools/sftp.tools.js +41 -0
  114. package/dist/esm/mcp/tools/sftp.tools.js.map +1 -0
  115. package/dist/esm/mcp/tools/share.tools.d.ts +3 -0
  116. package/dist/esm/mcp/tools/share.tools.d.ts.map +1 -0
  117. package/dist/esm/mcp/tools/share.tools.js +18 -0
  118. package/dist/esm/mcp/tools/share.tools.js.map +1 -0
  119. package/dist/esm/mcp/tools/speech.tools.d.ts +3 -0
  120. package/dist/esm/mcp/tools/speech.tools.d.ts.map +1 -0
  121. package/dist/esm/mcp/tools/speech.tools.js +38 -0
  122. package/dist/esm/mcp/tools/speech.tools.js.map +1 -0
  123. package/dist/esm/mcp/tools/ssh.tools.d.ts +3 -0
  124. package/dist/esm/mcp/tools/ssh.tools.d.ts.map +1 -0
  125. package/dist/esm/mcp/tools/ssh.tools.js +41 -0
  126. package/dist/esm/mcp/tools/ssh.tools.js.map +1 -0
  127. package/dist/esm/mcp/tools/tcp.tools.d.ts +3 -0
  128. package/dist/esm/mcp/tools/tcp.tools.d.ts.map +1 -0
  129. package/dist/esm/mcp/tools/tcp.tools.js +47 -0
  130. package/dist/esm/mcp/tools/tcp.tools.js.map +1 -0
  131. package/dist/esm/mcp/tools/tts.tools.d.ts +3 -0
  132. package/dist/esm/mcp/tools/tts.tools.d.ts.map +1 -0
  133. package/dist/esm/mcp/tools/tts.tools.js +29 -0
  134. package/dist/esm/mcp/tools/tts.tools.js.map +1 -0
  135. package/dist/esm/mcp/tools/types.d.ts +18 -0
  136. package/dist/esm/mcp/tools/types.d.ts.map +1 -0
  137. package/dist/esm/mcp/tools/types.js +2 -0
  138. package/dist/esm/mcp/tools/types.js.map +1 -0
  139. package/dist/esm/mcp/tools/udp.tools.d.ts +3 -0
  140. package/dist/esm/mcp/tools/udp.tools.d.ts.map +1 -0
  141. package/dist/esm/mcp/tools/udp.tools.js +22 -0
  142. package/dist/esm/mcp/tools/udp.tools.js.map +1 -0
  143. package/dist/esm/mcp/tools/wol.tools.d.ts +3 -0
  144. package/dist/esm/mcp/tools/wol.tools.d.ts.map +1 -0
  145. package/dist/esm/mcp/tools/wol.tools.js +16 -0
  146. package/dist/esm/mcp/tools/wol.tools.js.map +1 -0
  147. package/dist/esm/mcp/transport/bridge-server-transport.d.ts +27 -0
  148. package/dist/esm/mcp/transport/bridge-server-transport.d.ts.map +1 -0
  149. package/dist/esm/mcp/transport/bridge-server-transport.js +72 -0
  150. package/dist/esm/mcp/transport/bridge-server-transport.js.map +1 -0
  151. package/dist/esm/mcp/transport/stomp-server-transport.d.ts +43 -0
  152. package/dist/esm/mcp/transport/stomp-server-transport.d.ts.map +1 -0
  153. package/dist/esm/mcp/transport/stomp-server-transport.js +128 -0
  154. package/dist/esm/mcp/transport/stomp-server-transport.js.map +1 -0
  155. package/dist/esm/mcp/transport/transport-manager.d.ts +38 -0
  156. package/dist/esm/mcp/transport/transport-manager.d.ts.map +1 -0
  157. package/dist/esm/mcp/transport/transport-manager.js +70 -0
  158. package/dist/esm/mcp/transport/transport-manager.js.map +1 -0
  159. package/dist/esm/plugin.d.ts +79 -0
  160. package/dist/esm/plugin.d.ts.map +1 -0
  161. package/dist/esm/plugin.js +81 -0
  162. package/dist/esm/plugin.js.map +1 -0
  163. package/dist/esm/services/bridge-protocol.d.ts +107 -0
  164. package/dist/esm/services/bridge-protocol.d.ts.map +1 -0
  165. package/dist/esm/services/bridge-protocol.js +6 -0
  166. package/dist/esm/services/bridge-protocol.js.map +1 -0
  167. package/nodejs-assets/nodejs-project/main.js +1971 -0
  168. package/nodejs-assets/nodejs-project/mcp-agent-tools.js +57 -0
  169. package/nodejs-assets/nodejs-project/mcp-bridge-client.js +98 -0
  170. package/nodejs-assets/nodejs-project/package-lock.json +3639 -0
  171. package/nodejs-assets/nodejs-project/package.json +18 -0
  172. 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
+ [![npm](https://img.shields.io/npm/v/capacitor-mobile-claw)](https://www.npmjs.com/package/capacitor-mobile-claw)
4
+ [![CI](https://github.com/rogelioRuiz/capacitor-mobile-claw/actions/workflows/ci.yml/badge.svg)](https://github.com/rogelioRuiz/capacitor-mobile-claw/actions/workflows/ci.yml)
5
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](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
+ &nbsp;&nbsp;
20
+ <img src="docs/screenshots/chat.png" width="240" alt="Chat — code execution with JavaScript and Python test results" />
21
+ &nbsp;&nbsp;
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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"}