milaidy 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 (253) hide show
  1. package/LICENSE +8 -0
  2. package/README.md +538 -0
  3. package/dist/argv-CfSowvEA.js +63 -0
  4. package/dist/config-B-mboG4v.js +4 -0
  5. package/dist/eliza-CPJjgw-e.js +1491 -0
  6. package/dist/eliza.js +2192 -0
  7. package/dist/entry.js +232 -0
  8. package/dist/index.js +209 -0
  9. package/dist/links-BFKlWqSe.js +15 -0
  10. package/dist/paths-D_yh1DEJ.js +69 -0
  11. package/dist/plugins-cli-B7kSre2c.js +134 -0
  12. package/dist/program-6KwWwKKh.js +510 -0
  13. package/dist/register.agents-CPVmSjMG.js +17 -0
  14. package/dist/register.browser-B2ooXxNx.js +15 -0
  15. package/dist/register.channels-CMYQ6K6Y.js +42 -0
  16. package/dist/register.cron-D91lY1_Y.js +9 -0
  17. package/dist/register.devices-rU5I5L_y.js +13 -0
  18. package/dist/register.gateway-82SLAvw3.js +22 -0
  19. package/dist/register.hooks-B_XTBEkt.js +9 -0
  20. package/dist/register.logs-BgEGcPd8.js +10 -0
  21. package/dist/register.models-BJt9eVgZ.js +26 -0
  22. package/dist/register.nodes-B5xY1s8a.js +9 -0
  23. package/dist/register.skills-SFQqYIhg.js +10 -0
  24. package/dist/register.subclis-uF_AsbWR.js +187 -0
  25. package/dist/run-main-XODklzS-.js +56 -0
  26. package/dist/theme-DBvtuGeq.js +36 -0
  27. package/dist/utils-C1AUpp_V.js +42 -0
  28. package/dist/version-Cpn3yr5D.js +26 -0
  29. package/dist/workspace-Co3Wul2D.js +206 -0
  30. package/dist/workspace-DCA6MNVK.js +350 -0
  31. package/docs/.i18n/README.md +31 -0
  32. package/docs/.i18n/glossary.zh-CN.json +210 -0
  33. package/docs/.i18n/zh-CN.tm.jsonl +1329 -0
  34. package/docs/CNAME +1 -0
  35. package/docs/automation/cron-jobs.md +468 -0
  36. package/docs/automation/cron-vs-heartbeat.md +254 -0
  37. package/docs/automation/gmail-pubsub.md +256 -0
  38. package/docs/automation/poll.md +69 -0
  39. package/docs/automation/webhook.md +163 -0
  40. package/docs/bedrock.md +176 -0
  41. package/docs/brave-search.md +41 -0
  42. package/docs/broadcast-groups.md +442 -0
  43. package/docs/cli/acp.md +170 -0
  44. package/docs/cli/agent.md +24 -0
  45. package/docs/cli/agents.md +75 -0
  46. package/docs/cli/approvals.md +50 -0
  47. package/docs/cli/browser.md +107 -0
  48. package/docs/cli/channels.md +79 -0
  49. package/docs/cli/config.md +50 -0
  50. package/docs/cli/configure.md +33 -0
  51. package/docs/cli/cron.md +42 -0
  52. package/docs/cli/dashboard.md +16 -0
  53. package/docs/cli/devices.md +67 -0
  54. package/docs/cli/directory.md +63 -0
  55. package/docs/cli/dns.md +23 -0
  56. package/docs/cli/docs.md +15 -0
  57. package/docs/cli/doctor.md +41 -0
  58. package/docs/cli/gateway.md +199 -0
  59. package/docs/cli/health.md +21 -0
  60. package/docs/cli/hooks.md +291 -0
  61. package/docs/cli/index.md +1029 -0
  62. package/docs/cli/logs.md +24 -0
  63. package/docs/cli/memory.md +45 -0
  64. package/docs/cli/message.md +239 -0
  65. package/docs/cli/models.md +79 -0
  66. package/docs/cli/node.md +112 -0
  67. package/docs/cli/nodes.md +73 -0
  68. package/docs/cli/onboard.md +29 -0
  69. package/docs/cli/pairing.md +21 -0
  70. package/docs/cli/plugins.md +62 -0
  71. package/docs/cli/reset.md +17 -0
  72. package/docs/cli/sandbox.md +152 -0
  73. package/docs/cli/security.md +26 -0
  74. package/docs/cli/sessions.md +16 -0
  75. package/docs/cli/setup.md +29 -0
  76. package/docs/cli/skills.md +26 -0
  77. package/docs/cli/status.md +26 -0
  78. package/docs/cli/system.md +60 -0
  79. package/docs/cli/tui.md +23 -0
  80. package/docs/cli/uninstall.md +17 -0
  81. package/docs/cli/update.md +98 -0
  82. package/docs/cli/voicecall.md +34 -0
  83. package/docs/cli/webhooks.md +25 -0
  84. package/docs/concepts/agent-loop.md +146 -0
  85. package/docs/concepts/agent-workspace.md +229 -0
  86. package/docs/concepts/agent.md +122 -0
  87. package/docs/concepts/architecture.md +129 -0
  88. package/docs/concepts/channel-routing.md +114 -0
  89. package/docs/concepts/compaction.md +61 -0
  90. package/docs/concepts/context.md +159 -0
  91. package/docs/concepts/features.md +53 -0
  92. package/docs/concepts/group-messages.md +84 -0
  93. package/docs/concepts/groups.md +373 -0
  94. package/docs/concepts/markdown-formatting.md +130 -0
  95. package/docs/concepts/memory.md +546 -0
  96. package/docs/concepts/messages.md +154 -0
  97. package/docs/concepts/model-failover.md +149 -0
  98. package/docs/concepts/model-providers.md +315 -0
  99. package/docs/concepts/models.md +208 -0
  100. package/docs/concepts/multi-agent.md +376 -0
  101. package/docs/concepts/oauth.md +145 -0
  102. package/docs/concepts/plugins.md +454 -0
  103. package/docs/concepts/presence.md +102 -0
  104. package/docs/concepts/queue.md +89 -0
  105. package/docs/concepts/retry.md +69 -0
  106. package/docs/concepts/secrets.md +300 -0
  107. package/docs/concepts/session-pruning.md +122 -0
  108. package/docs/concepts/session-tool.md +193 -0
  109. package/docs/concepts/session.md +188 -0
  110. package/docs/concepts/sessions.md +10 -0
  111. package/docs/concepts/skills.md +392 -0
  112. package/docs/concepts/streaming.md +135 -0
  113. package/docs/concepts/system-prompt.md +114 -0
  114. package/docs/concepts/timezone.md +91 -0
  115. package/docs/concepts/typebox.md +289 -0
  116. package/docs/concepts/typing-indicators.md +68 -0
  117. package/docs/concepts/usage-tracking.md +35 -0
  118. package/docs/custom.css +4 -0
  119. package/docs/date-time.md +128 -0
  120. package/docs/debugging.md +162 -0
  121. package/docs/docs.json +1599 -0
  122. package/docs/environment.md +81 -0
  123. package/docs/hooks.md +876 -0
  124. package/docs/index.md +179 -0
  125. package/docs/install/ansible.md +208 -0
  126. package/docs/install/bun.md +59 -0
  127. package/docs/install/development-channels.md +75 -0
  128. package/docs/install/docker.md +567 -0
  129. package/docs/install/index.md +185 -0
  130. package/docs/install/installer.md +123 -0
  131. package/docs/install/migrating.md +192 -0
  132. package/docs/install/nix.md +96 -0
  133. package/docs/install/node.md +78 -0
  134. package/docs/install/uninstall.md +128 -0
  135. package/docs/install/updating.md +228 -0
  136. package/docs/logging.md +350 -0
  137. package/docs/multi-agent-sandbox-tools.md +395 -0
  138. package/docs/network.md +54 -0
  139. package/docs/nodes/audio.md +114 -0
  140. package/docs/nodes/camera.md +156 -0
  141. package/docs/nodes/images.md +72 -0
  142. package/docs/nodes/index.md +341 -0
  143. package/docs/nodes/location-command.md +113 -0
  144. package/docs/nodes/media-understanding.md +379 -0
  145. package/docs/nodes/talk.md +90 -0
  146. package/docs/nodes/voicewake.md +65 -0
  147. package/docs/northflank.mdx +53 -0
  148. package/docs/perplexity.md +80 -0
  149. package/docs/platforms/android.md +129 -0
  150. package/docs/platforms/digitalocean.md +262 -0
  151. package/docs/platforms/exe-dev.md +125 -0
  152. package/docs/platforms/fly.md +486 -0
  153. package/docs/platforms/gcp.md +503 -0
  154. package/docs/platforms/hetzner.md +330 -0
  155. package/docs/platforms/index.md +53 -0
  156. package/docs/platforms/ios.md +106 -0
  157. package/docs/platforms/linux.md +94 -0
  158. package/docs/platforms/mac/bundled-gateway.md +73 -0
  159. package/docs/platforms/mac/canvas.md +125 -0
  160. package/docs/platforms/mac/child-process.md +69 -0
  161. package/docs/platforms/mac/dev-setup.md +102 -0
  162. package/docs/platforms/mac/health.md +34 -0
  163. package/docs/platforms/mac/icon.md +31 -0
  164. package/docs/platforms/mac/logging.md +57 -0
  165. package/docs/platforms/mac/menu-bar.md +81 -0
  166. package/docs/platforms/mac/peekaboo.md +65 -0
  167. package/docs/platforms/mac/permissions.md +44 -0
  168. package/docs/platforms/mac/release.md +85 -0
  169. package/docs/platforms/mac/remote.md +83 -0
  170. package/docs/platforms/mac/signing.md +47 -0
  171. package/docs/platforms/mac/skills.md +33 -0
  172. package/docs/platforms/mac/voice-overlay.md +60 -0
  173. package/docs/platforms/mac/voicewake.md +67 -0
  174. package/docs/platforms/mac/webchat.md +41 -0
  175. package/docs/platforms/mac/xpc.md +61 -0
  176. package/docs/platforms/macos-vm.md +281 -0
  177. package/docs/platforms/macos.md +203 -0
  178. package/docs/platforms/oracle.md +303 -0
  179. package/docs/platforms/raspberry-pi.md +358 -0
  180. package/docs/platforms/windows.md +159 -0
  181. package/docs/plugin.md +651 -0
  182. package/docs/plugins/agent-tools.md +99 -0
  183. package/docs/plugins/manifest.md +71 -0
  184. package/docs/plugins/voice-call.md +273 -0
  185. package/docs/plugins/zalouser.md +70 -0
  186. package/docs/providers/anthropic.md +152 -0
  187. package/docs/providers/claude-max-api-proxy.md +148 -0
  188. package/docs/providers/cloudflare-ai-gateway.md +71 -0
  189. package/docs/providers/deepgram.md +93 -0
  190. package/docs/providers/glm.md +33 -0
  191. package/docs/providers/index.md +63 -0
  192. package/docs/providers/minimax.md +208 -0
  193. package/docs/providers/models.md +51 -0
  194. package/docs/providers/moonshot.md +142 -0
  195. package/docs/providers/ollama.md +223 -0
  196. package/docs/providers/openai.md +62 -0
  197. package/docs/providers/opencode.md +36 -0
  198. package/docs/providers/openrouter.md +37 -0
  199. package/docs/providers/qwen.md +53 -0
  200. package/docs/providers/synthetic.md +99 -0
  201. package/docs/providers/venice.md +267 -0
  202. package/docs/providers/vercel-ai-gateway.md +50 -0
  203. package/docs/providers/xiaomi.md +64 -0
  204. package/docs/providers/zai.md +36 -0
  205. package/docs/railway.mdx +99 -0
  206. package/docs/reference/templates/AGENTS.md +9 -0
  207. package/docs/reference/templates/BOOTSTRAP.md +3 -0
  208. package/docs/reference/templates/HEARTBEAT.md +3 -0
  209. package/docs/reference/templates/IDENTITY.md +3 -0
  210. package/docs/reference/templates/TOOLS.md +3 -0
  211. package/docs/reference/templates/USER.md +3 -0
  212. package/docs/render.mdx +165 -0
  213. package/docs/start/docs-directory.md +63 -0
  214. package/docs/start/getting-started.md +212 -0
  215. package/docs/start/milaidy.md +247 -0
  216. package/docs/start/onboarding.md +258 -0
  217. package/docs/start/pairing.md +86 -0
  218. package/docs/start/quickstart.md +81 -0
  219. package/docs/start/setup.md +149 -0
  220. package/docs/start/showcase.md +416 -0
  221. package/docs/start/wizard.md +418 -0
  222. package/docs/testing.md +368 -0
  223. package/docs/token-use.md +112 -0
  224. package/docs/tools/agent-send.md +53 -0
  225. package/docs/tools/apply-patch.md +50 -0
  226. package/docs/tools/browser-linux-troubleshooting.md +139 -0
  227. package/docs/tools/browser-login.md +68 -0
  228. package/docs/tools/browser.md +576 -0
  229. package/docs/tools/chrome-extension.md +178 -0
  230. package/docs/tools/clawhub.md +257 -0
  231. package/docs/tools/creating-skills.md +54 -0
  232. package/docs/tools/elevated.md +57 -0
  233. package/docs/tools/exec-approvals.md +246 -0
  234. package/docs/tools/exec.md +179 -0
  235. package/docs/tools/firecrawl.md +61 -0
  236. package/docs/tools/index.md +508 -0
  237. package/docs/tools/llm-task.md +115 -0
  238. package/docs/tools/reactions.md +22 -0
  239. package/docs/tools/skills-config.md +76 -0
  240. package/docs/tools/skills.md +300 -0
  241. package/docs/tools/slash-commands.md +196 -0
  242. package/docs/tools/subagents.md +151 -0
  243. package/docs/tools/thinking.md +73 -0
  244. package/docs/tools/web.md +261 -0
  245. package/docs/tui.md +159 -0
  246. package/docs/vps.md +43 -0
  247. package/docs/web/control-ui.md +221 -0
  248. package/docs/web/dashboard.md +46 -0
  249. package/docs/web/index.md +116 -0
  250. package/docs/web/webchat.md +49 -0
  251. package/milaidy.mjs +14 -0
  252. package/package.json +271 -0
  253. package/skills/.cache/catalog.json +88519 -0
@@ -0,0 +1,330 @@
1
+ ---
2
+ summary: "Run Milaidy Gateway 24/7 on a cheap Hetzner VPS (Docker) with durable state and baked-in binaries"
3
+ read_when:
4
+ - You want Milaidy running 24/7 on a cloud VPS (not your laptop)
5
+ - You want a production-grade, always-on Gateway on your own VPS
6
+ - You want full control over persistence, binaries, and restart behavior
7
+ - You are running Milaidy in Docker on Hetzner or a similar provider
8
+ title: "Hetzner"
9
+ ---
10
+
11
+ # Milaidy on Hetzner (Docker, Production VPS Guide)
12
+
13
+ ## Goal
14
+
15
+ Run a persistent Milaidy Gateway on a Hetzner VPS using Docker, with durable state, baked-in binaries, and safe restart behavior.
16
+
17
+ If you want “Milaidy 24/7 for ~$5”, this is the simplest reliable setup.
18
+ Hetzner pricing changes; pick the smallest Debian/Ubuntu VPS and scale up if you hit OOMs.
19
+
20
+ ## What are we doing (simple terms)?
21
+
22
+ - Rent a small Linux server (Hetzner VPS)
23
+ - Install Docker (isolated app runtime)
24
+ - Start the Milaidy Gateway in Docker
25
+ - Persist `~/.milaidy` + `~/.milaidy/workspace` on the host (survives restarts/rebuilds)
26
+ - Access the Control UI from your laptop via an SSH tunnel
27
+
28
+ The Gateway can be accessed via:
29
+
30
+ - SSH port forwarding from your laptop
31
+ - Direct port exposure if you manage firewalling and tokens yourself
32
+
33
+ This guide assumes Ubuntu or Debian on Hetzner.
34
+ If you are on another Linux VPS, map packages accordingly.
35
+ For the generic Docker flow, see [Docker](/install/docker).
36
+
37
+ ---
38
+
39
+ ## Quick path (experienced operators)
40
+
41
+ 1. Provision Hetzner VPS
42
+ 2. Install Docker
43
+ 3. Clone Milaidy repository
44
+ 4. Create persistent host directories
45
+ 5. Configure `.env` and `docker-compose.yml`
46
+ 6. Bake required binaries into the image
47
+ 7. `docker compose up -d`
48
+ 8. Verify persistence and Gateway access
49
+
50
+ ---
51
+
52
+ ## What you need
53
+
54
+ - Hetzner VPS with root access
55
+ - SSH access from your laptop
56
+ - Basic comfort with SSH + copy/paste
57
+ - ~20 minutes
58
+ - Docker and Docker Compose
59
+ - Model auth credentials
60
+ - Optional provider credentials
61
+ - WhatsApp QR
62
+ - Telegram bot token
63
+ - Gmail OAuth
64
+
65
+ ---
66
+
67
+ ## 1) Provision the VPS
68
+
69
+ Create an Ubuntu or Debian VPS in Hetzner.
70
+
71
+ Connect as root:
72
+
73
+ ```bash
74
+ ssh root@YOUR_VPS_IP
75
+ ```
76
+
77
+ This guide assumes the VPS is stateful.
78
+ Do not treat it as disposable infrastructure.
79
+
80
+ ---
81
+
82
+ ## 2) Install Docker (on the VPS)
83
+
84
+ ```bash
85
+ apt-get update
86
+ apt-get install -y git curl ca-certificates
87
+ curl -fsSL https://get.docker.com | sh
88
+ ```
89
+
90
+ Verify:
91
+
92
+ ```bash
93
+ docker --version
94
+ docker compose version
95
+ ```
96
+
97
+ ---
98
+
99
+ ## 3) Clone the Milaidy repository
100
+
101
+ ```bash
102
+ git clone https://github.com/milaidy/milaidy.git
103
+ cd milaidy
104
+ ```
105
+
106
+ This guide assumes you will build a custom image to guarantee binary persistence.
107
+
108
+ ---
109
+
110
+ ## 4) Create persistent host directories
111
+
112
+ Docker containers are ephemeral.
113
+ All long-lived state must live on the host.
114
+
115
+ ```bash
116
+ mkdir -p /root/.milaidy
117
+ mkdir -p /root/.milaidy/workspace
118
+
119
+ # Set ownership to the container user (uid 1000):
120
+ chown -R 1000:1000 /root/.milaidy
121
+ chown -R 1000:1000 /root/.milaidy/workspace
122
+ ```
123
+
124
+ ---
125
+
126
+ ## 5) Configure environment variables
127
+
128
+ Create `.env` in the repository root.
129
+
130
+ ```bash
131
+ MILAIDY_IMAGE=milaidy:latest
132
+ MILAIDY_GATEWAY_TOKEN=change-me-now
133
+ MILAIDY_GATEWAY_BIND=lan
134
+ MILAIDY_GATEWAY_PORT=18789
135
+
136
+ MILAIDY_CONFIG_DIR=/root/.milaidy
137
+ MILAIDY_WORKSPACE_DIR=/root/.milaidy/workspace
138
+
139
+ GOG_KEYRING_PASSWORD=change-me-now
140
+ XDG_CONFIG_HOME=/home/node/.milaidy
141
+ ```
142
+
143
+ Generate strong secrets:
144
+
145
+ ```bash
146
+ openssl rand -hex 32
147
+ ```
148
+
149
+ **Do not commit this file.**
150
+
151
+ ---
152
+
153
+ ## 6) Docker Compose configuration
154
+
155
+ Create or update `docker-compose.yml`.
156
+
157
+ ```yaml
158
+ services:
159
+ milaidy-gateway:
160
+ image: ${MILAIDY_IMAGE}
161
+ build: .
162
+ restart: unless-stopped
163
+ env_file:
164
+ - .env
165
+ environment:
166
+ - HOME=/home/node
167
+ - NODE_ENV=production
168
+ - TERM=xterm-256color
169
+ - MILAIDY_GATEWAY_BIND=${MILAIDY_GATEWAY_BIND}
170
+ - MILAIDY_GATEWAY_PORT=${MILAIDY_GATEWAY_PORT}
171
+ - MILAIDY_GATEWAY_TOKEN=${MILAIDY_GATEWAY_TOKEN}
172
+ - GOG_KEYRING_PASSWORD=${GOG_KEYRING_PASSWORD}
173
+ - XDG_CONFIG_HOME=${XDG_CONFIG_HOME}
174
+ - PATH=/home/linuxbrew/.linuxbrew/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
175
+ volumes:
176
+ - ${MILAIDY_CONFIG_DIR}:/home/node/.milaidy
177
+ - ${MILAIDY_WORKSPACE_DIR}:/home/node/.milaidy/workspace
178
+ ports:
179
+ # Recommended: keep the Gateway loopback-only on the VPS; access via SSH tunnel.
180
+ # To expose it publicly, remove the `127.0.0.1:` prefix and firewall accordingly.
181
+ - "127.0.0.1:${MILAIDY_GATEWAY_PORT}:18789"
182
+
183
+ # Optional: only if you run iOS/Android nodes against this VPS and need Canvas host.
184
+ # If you expose this publicly, read /gateway/security and firewall accordingly.
185
+ # - "18793:18793"
186
+ command:
187
+ [
188
+ "node",
189
+ "dist/index.js",
190
+ "gateway",
191
+ "--bind",
192
+ "${MILAIDY_GATEWAY_BIND}",
193
+ "--port",
194
+ "${MILAIDY_GATEWAY_PORT}",
195
+ ]
196
+ ```
197
+
198
+ ---
199
+
200
+ ## 7) Bake required binaries into the image (critical)
201
+
202
+ Installing binaries inside a running container is a trap.
203
+ Anything installed at runtime will be lost on restart.
204
+
205
+ All external binaries required by skills must be installed at image build time.
206
+
207
+ The examples below show three common binaries only:
208
+
209
+ - `gog` for Gmail access
210
+ - `goplaces` for Google Places
211
+ - `wacli` for WhatsApp
212
+
213
+ These are examples, not a complete list.
214
+ You may install as many binaries as needed using the same pattern.
215
+
216
+ If you add new skills later that depend on additional binaries, you must:
217
+
218
+ 1. Update the Dockerfile
219
+ 2. Rebuild the image
220
+ 3. Restart the containers
221
+
222
+ **Example Dockerfile**
223
+
224
+ ```dockerfile
225
+ FROM node:22-bookworm
226
+
227
+ RUN apt-get update && apt-get install -y socat && rm -rf /var/lib/apt/lists/*
228
+
229
+ # Example binary 1: Gmail CLI
230
+ RUN curl -L https://github.com/steipete/gog/releases/latest/download/gog_Linux_x86_64.tar.gz \
231
+ | tar -xz -C /usr/local/bin && chmod +x /usr/local/bin/gog
232
+
233
+ # Example binary 2: Google Places CLI
234
+ RUN curl -L https://github.com/steipete/goplaces/releases/latest/download/goplaces_Linux_x86_64.tar.gz \
235
+ | tar -xz -C /usr/local/bin && chmod +x /usr/local/bin/goplaces
236
+
237
+ # Example binary 3: WhatsApp CLI
238
+ RUN curl -L https://github.com/steipete/wacli/releases/latest/download/wacli_Linux_x86_64.tar.gz \
239
+ | tar -xz -C /usr/local/bin && chmod +x /usr/local/bin/wacli
240
+
241
+ # Add more binaries below using the same pattern
242
+
243
+ WORKDIR /app
244
+ COPY package.json pnpm-lock.yaml pnpm-workspace.yaml .npmrc ./
245
+ COPY ui/package.json ./ui/package.json
246
+ COPY scripts ./scripts
247
+
248
+ RUN corepack enable
249
+ RUN pnpm install --frozen-lockfile
250
+
251
+ COPY . .
252
+ RUN pnpm build
253
+ RUN pnpm ui:install
254
+ RUN pnpm ui:build
255
+
256
+ ENV NODE_ENV=production
257
+
258
+ CMD ["node","dist/index.js"]
259
+ ```
260
+
261
+ ---
262
+
263
+ ## 8) Build and launch
264
+
265
+ ```bash
266
+ docker compose build
267
+ docker compose up -d milaidy-gateway
268
+ ```
269
+
270
+ Verify binaries:
271
+
272
+ ```bash
273
+ docker compose exec milaidy-gateway which gog
274
+ docker compose exec milaidy-gateway which goplaces
275
+ docker compose exec milaidy-gateway which wacli
276
+ ```
277
+
278
+ Expected output:
279
+
280
+ ```
281
+ /usr/local/bin/gog
282
+ /usr/local/bin/goplaces
283
+ /usr/local/bin/wacli
284
+ ```
285
+
286
+ ---
287
+
288
+ ## 9) Verify Gateway
289
+
290
+ ```bash
291
+ docker compose logs -f milaidy-gateway
292
+ ```
293
+
294
+ Success:
295
+
296
+ ```
297
+ [gateway] listening on ws://0.0.0.0:18789
298
+ ```
299
+
300
+ From your laptop:
301
+
302
+ ```bash
303
+ ssh -N -L 18789:127.0.0.1:18789 root@YOUR_VPS_IP
304
+ ```
305
+
306
+ Open:
307
+
308
+ `http://127.0.0.1:18789/`
309
+
310
+ Paste your gateway token.
311
+
312
+ ---
313
+
314
+ ## What persists where (source of truth)
315
+
316
+ Milaidy runs in Docker, but Docker is not the source of truth.
317
+ All long-lived state must survive restarts, rebuilds, and reboots.
318
+
319
+ | Component | Location | Persistence mechanism | Notes |
320
+ | ------------------- | --------------------------------- | ---------------------- | -------------------------------- |
321
+ | Gateway config | `/home/node/.milaidy/` | Host volume mount | Includes `milaidy.json`, tokens |
322
+ | Model auth profiles | `/home/node/.milaidy/` | Host volume mount | OAuth tokens, API keys |
323
+ | Skill configs | `/home/node/.milaidy/skills/` | Host volume mount | Skill-level state |
324
+ | Agent workspace | `/home/node/.milaidy/workspace/` | Host volume mount | Code and agent artifacts |
325
+ | WhatsApp session | `/home/node/.milaidy/` | Host volume mount | Preserves QR login |
326
+ | Gmail keyring | `/home/node/.milaidy/` | Host volume + password | Requires `GOG_KEYRING_PASSWORD` |
327
+ | External binaries | `/usr/local/bin/` | Docker image | Must be baked at build time |
328
+ | Node runtime | Container filesystem | Docker image | Rebuilt every image build |
329
+ | OS packages | Container filesystem | Docker image | Do not install at runtime |
330
+ | Docker container | Ephemeral | Restartable | Safe to destroy |
@@ -0,0 +1,53 @@
1
+ ---
2
+ summary: "Platform support overview (Gateway + companion apps)"
3
+ read_when:
4
+ - Looking for OS support or install paths
5
+ - Deciding where to run the Gateway
6
+ title: "Platforms"
7
+ ---
8
+
9
+ # Platforms
10
+
11
+ Milaidy core is written in TypeScript. **Node is the recommended runtime**.
12
+ Bun is not recommended for the Gateway (WhatsApp/Telegram bugs).
13
+
14
+ Companion apps exist for macOS (menu bar app) and mobile nodes (iOS/Android). Windows and
15
+ Linux companion apps are planned, but the Gateway is fully supported today.
16
+ Native companion apps for Windows are also planned; the Gateway is recommended via WSL2.
17
+
18
+ ## Choose your OS
19
+
20
+ - macOS: [macOS](/platforms/macos)
21
+ - iOS: [iOS](/platforms/ios)
22
+ - Android: [Android](/platforms/android)
23
+ - Windows: [Windows](/platforms/windows)
24
+ - Linux: [Linux](/platforms/linux)
25
+
26
+ ## VPS & hosting
27
+
28
+ - VPS hub: [VPS hosting](/vps)
29
+ - Fly.io: [Fly.io](/platforms/fly)
30
+ - Hetzner (Docker): [Hetzner](/platforms/hetzner)
31
+ - GCP (Compute Engine): [GCP](/platforms/gcp)
32
+ - exe.dev (VM + HTTPS proxy): [exe.dev](/platforms/exe-dev)
33
+
34
+ ## Common links
35
+
36
+ - Install guide: [Getting Started](/start/getting-started)
37
+ - Gateway runbook: [Gateway](/gateway)
38
+ - Gateway configuration: [Configuration](/gateway/configuration)
39
+ - Service status: `milaidy gateway status`
40
+
41
+ ## Gateway service install (CLI)
42
+
43
+ Use one of these (all supported):
44
+
45
+ - Wizard (recommended): `milaidy onboard --install-daemon`
46
+ - Direct: `milaidy gateway install`
47
+ - Configure flow: `milaidy configure` → select **Gateway service**
48
+ - Repair/migrate: `milaidy doctor` (offers to install or fix the service)
49
+
50
+ The service target depends on OS:
51
+
52
+ - macOS: LaunchAgent (`bot.molt.gateway` or `bot.molt.<profile>`; legacy `com.milaidy.*`)
53
+ - Linux/WSL2: systemd user service (`milaidy-gateway[-<profile>].service`)
@@ -0,0 +1,106 @@
1
+ ---
2
+ summary: "iOS node app: connect to the Gateway, pairing, canvas, and troubleshooting"
3
+ read_when:
4
+ - Pairing or reconnecting the iOS node
5
+ - Running the iOS app from source
6
+ - Debugging gateway discovery or canvas commands
7
+ title: "iOS App"
8
+ ---
9
+
10
+ # iOS App (Node)
11
+
12
+ Availability: internal preview. The iOS app is not publicly distributed yet.
13
+
14
+ ## What it does
15
+
16
+ - Connects to a Gateway over WebSocket (LAN or tailnet).
17
+ - Exposes node capabilities: Canvas, Screen snapshot, Camera capture, Location, Talk mode, Voice wake.
18
+ - Receives `node.invoke` commands and reports node status events.
19
+
20
+ ## Requirements
21
+
22
+ - Gateway running on another device (macOS, Linux, or Windows via WSL2).
23
+ - Network path:
24
+ - Same LAN via Bonjour, **or**
25
+ - Tailnet via unicast DNS-SD (example domain: `milaidy.internal.`), **or**
26
+ - Manual host/port (fallback).
27
+
28
+ ## Quick start (pair + connect)
29
+
30
+ 1. Start the Gateway:
31
+
32
+ ```bash
33
+ milaidy gateway --port 18789
34
+ ```
35
+
36
+ 2. In the iOS app, open Settings and pick a discovered gateway (or enable Manual Host and enter host/port).
37
+
38
+ 3. Approve the pairing request on the gateway host:
39
+
40
+ ```bash
41
+ milaidy nodes pending
42
+ milaidy nodes approve <requestId>
43
+ ```
44
+
45
+ 4. Verify connection:
46
+
47
+ ```bash
48
+ milaidy nodes status
49
+ milaidy gateway call node.list --params "{}"
50
+ ```
51
+
52
+ ## Discovery paths
53
+
54
+ ### Bonjour (LAN)
55
+
56
+ The Gateway advertises `_milaidy-gw._tcp` on `local.`. The iOS app lists these automatically.
57
+
58
+ ### Tailnet (cross-network)
59
+
60
+ If mDNS is blocked, use a unicast DNS-SD zone (choose a domain; example: `milaidy.internal.`) and Tailscale split DNS.
61
+ See [Bonjour](/gateway/bonjour) for the CoreDNS example.
62
+
63
+ ### Manual host/port
64
+
65
+ In Settings, enable **Manual Host** and enter the gateway host + port (default `18789`).
66
+
67
+ ## Canvas + A2UI
68
+
69
+ The iOS node renders a WKWebView canvas. Use `node.invoke` to drive it:
70
+
71
+ ```bash
72
+ milaidy nodes invoke --node "iOS Node" --command canvas.navigate --params '{"url":"http://<gateway-host>:18793/__milaidy__/canvas/"}'
73
+ ```
74
+
75
+ Notes:
76
+
77
+ - The Gateway canvas host serves `/__milaidy__/canvas/` and `/__milaidy__/a2ui/`.
78
+ - The iOS node auto-navigates to A2UI on connect when a canvas host URL is advertised.
79
+ - Return to the built-in scaffold with `canvas.navigate` and `{"url":""}`.
80
+
81
+ ### Canvas eval / snapshot
82
+
83
+ ```bash
84
+ milaidy nodes invoke --node "iOS Node" --command canvas.eval --params '{"javaScript":"(() => { const {ctx} = window.__milaidy; ctx.clearRect(0,0,innerWidth,innerHeight); ctx.lineWidth=6; ctx.strokeStyle=\"#ff2d55\"; ctx.beginPath(); ctx.moveTo(40,40); ctx.lineTo(innerWidth-40, innerHeight-40); ctx.stroke(); return \"ok\"; })()"}'
85
+ ```
86
+
87
+ ```bash
88
+ milaidy nodes invoke --node "iOS Node" --command canvas.snapshot --params '{"maxWidth":900,"format":"jpeg"}'
89
+ ```
90
+
91
+ ## Voice wake + talk mode
92
+
93
+ - Voice wake and talk mode are available in Settings.
94
+ - iOS may suspend background audio; treat voice features as best-effort when the app is not active.
95
+
96
+ ## Common errors
97
+
98
+ - `NODE_BACKGROUND_UNAVAILABLE`: bring the iOS app to the foreground (canvas/camera/screen commands require it).
99
+ - Pairing prompt never appears: run `milaidy nodes pending` and approve manually.
100
+ - Reconnect fails after reinstall: the Keychain pairing token was cleared; re-pair the node.
101
+
102
+ ## Related docs
103
+
104
+ - [Pairing](/gateway/pairing)
105
+ - [Discovery](/gateway/discovery)
106
+ - [Bonjour](/gateway/bonjour)
@@ -0,0 +1,94 @@
1
+ ---
2
+ summary: "Linux support + companion app status"
3
+ read_when:
4
+ - Looking for Linux companion app status
5
+ - Planning platform coverage or contributions
6
+ title: "Linux App"
7
+ ---
8
+
9
+ # Linux App
10
+
11
+ The Gateway is fully supported on Linux. **Node is the recommended runtime**.
12
+ Bun is not recommended for the Gateway (WhatsApp/Telegram bugs).
13
+
14
+ Native Linux companion apps are planned. Contributions are welcome if you want to help build one.
15
+
16
+ ## Beginner quick path (VPS)
17
+
18
+ 1. Install Node 22+
19
+ 2. `npm i -g milaidy@latest`
20
+ 3. `milaidy onboard --install-daemon`
21
+ 4. From your laptop: `ssh -N -L 18789:127.0.0.1:18789 <user>@<host>`
22
+ 5. Open `http://127.0.0.1:18789/` and paste your token
23
+
24
+ Step-by-step VPS guide: [exe.dev](/platforms/exe-dev)
25
+
26
+ ## Install
27
+
28
+ - [Getting Started](/start/getting-started)
29
+ - [Install & updates](/install/updating)
30
+ - Optional flows: [Bun (experimental)](/install/bun), [Nix](/install/nix), [Docker](/install/docker)
31
+
32
+ ## Gateway
33
+
34
+ - [Gateway runbook](/gateway)
35
+ - [Configuration](/gateway/configuration)
36
+
37
+ ## Gateway service install (CLI)
38
+
39
+ Use one of these:
40
+
41
+ ```
42
+ milaidy onboard --install-daemon
43
+ ```
44
+
45
+ Or:
46
+
47
+ ```
48
+ milaidy gateway install
49
+ ```
50
+
51
+ Or:
52
+
53
+ ```
54
+ milaidy configure
55
+ ```
56
+
57
+ Select **Gateway service** when prompted.
58
+
59
+ Repair/migrate:
60
+
61
+ ```
62
+ milaidy doctor
63
+ ```
64
+
65
+ ## System control (systemd user unit)
66
+
67
+ Milaidy installs a systemd **user** service by default. Use a **system**
68
+ service for shared or always-on servers. The full unit example and guidance
69
+ live in the [Gateway runbook](/gateway).
70
+
71
+ Minimal setup:
72
+
73
+ Create `~/.config/systemd/user/milaidy-gateway[-<profile>].service`:
74
+
75
+ ```
76
+ [Unit]
77
+ Description=Milaidy Gateway (profile: <profile>, v<version>)
78
+ After=network-online.target
79
+ Wants=network-online.target
80
+
81
+ [Service]
82
+ ExecStart=/usr/local/bin/milaidy gateway --port 18789
83
+ Restart=always
84
+ RestartSec=5
85
+
86
+ [Install]
87
+ WantedBy=default.target
88
+ ```
89
+
90
+ Enable it:
91
+
92
+ ```
93
+ systemctl --user enable --now milaidy-gateway[-<profile>].service
94
+ ```
@@ -0,0 +1,73 @@
1
+ ---
2
+ summary: "Gateway runtime on macOS (external launchd service)"
3
+ read_when:
4
+ - Packaging Milaidy.app
5
+ - Debugging the macOS gateway launchd service
6
+ - Installing the gateway CLI for macOS
7
+ title: "Gateway on macOS"
8
+ ---
9
+
10
+ # Gateway on macOS (external launchd)
11
+
12
+ Milaidy.app no longer bundles Node/Bun or the Gateway runtime. The macOS app
13
+ expects an **external** `milaidy` CLI install, does not spawn the Gateway as a
14
+ child process, and manages a per‑user launchd service to keep the Gateway
15
+ running (or attaches to an existing local Gateway if one is already running).
16
+
17
+ ## Install the CLI (required for local mode)
18
+
19
+ You need Node 22+ on the Mac, then install `milaidy` globally:
20
+
21
+ ```bash
22
+ npm install -g milaidy@<version>
23
+ ```
24
+
25
+ The macOS app’s **Install CLI** button runs the same flow via npm/pnpm (bun not recommended for Gateway runtime).
26
+
27
+ ## Launchd (Gateway as LaunchAgent)
28
+
29
+ Label:
30
+
31
+ - `bot.molt.gateway` (or `bot.molt.<profile>`; legacy `com.milaidy.*` may remain)
32
+
33
+ Plist location (per‑user):
34
+
35
+ - `~/Library/LaunchAgents/bot.molt.gateway.plist`
36
+ (or `~/Library/LaunchAgents/bot.molt.<profile>.plist`)
37
+
38
+ Manager:
39
+
40
+ - The macOS app owns LaunchAgent install/update in Local mode.
41
+ - The CLI can also install it: `milaidy gateway install`.
42
+
43
+ Behavior:
44
+
45
+ - “Milaidy Active” enables/disables the LaunchAgent.
46
+ - App quit does **not** stop the gateway (launchd keeps it alive).
47
+ - If a Gateway is already running on the configured port, the app attaches to
48
+ it instead of starting a new one.
49
+
50
+ Logging:
51
+
52
+ - launchd stdout/err: `/tmp/milaidy/milaidy-gateway.log`
53
+
54
+ ## Version compatibility
55
+
56
+ The macOS app checks the gateway version against its own version. If they’re
57
+ incompatible, update the global CLI to match the app version.
58
+
59
+ ## Smoke check
60
+
61
+ ```bash
62
+ milaidy --version
63
+
64
+ MILAIDY_SKIP_CHANNELS=1 \
65
+ MILAIDY_SKIP_CANVAS_HOST=1 \
66
+ milaidy gateway --port 18999 --bind loopback
67
+ ```
68
+
69
+ Then:
70
+
71
+ ```bash
72
+ milaidy gateway call health --url ws://127.0.0.1:18999 --timeout 3000
73
+ ```