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.
- package/LICENSE +8 -0
- package/README.md +538 -0
- package/dist/argv-CfSowvEA.js +63 -0
- package/dist/config-B-mboG4v.js +4 -0
- package/dist/eliza-CPJjgw-e.js +1491 -0
- package/dist/eliza.js +2192 -0
- package/dist/entry.js +232 -0
- package/dist/index.js +209 -0
- package/dist/links-BFKlWqSe.js +15 -0
- package/dist/paths-D_yh1DEJ.js +69 -0
- package/dist/plugins-cli-B7kSre2c.js +134 -0
- package/dist/program-6KwWwKKh.js +510 -0
- package/dist/register.agents-CPVmSjMG.js +17 -0
- package/dist/register.browser-B2ooXxNx.js +15 -0
- package/dist/register.channels-CMYQ6K6Y.js +42 -0
- package/dist/register.cron-D91lY1_Y.js +9 -0
- package/dist/register.devices-rU5I5L_y.js +13 -0
- package/dist/register.gateway-82SLAvw3.js +22 -0
- package/dist/register.hooks-B_XTBEkt.js +9 -0
- package/dist/register.logs-BgEGcPd8.js +10 -0
- package/dist/register.models-BJt9eVgZ.js +26 -0
- package/dist/register.nodes-B5xY1s8a.js +9 -0
- package/dist/register.skills-SFQqYIhg.js +10 -0
- package/dist/register.subclis-uF_AsbWR.js +187 -0
- package/dist/run-main-XODklzS-.js +56 -0
- package/dist/theme-DBvtuGeq.js +36 -0
- package/dist/utils-C1AUpp_V.js +42 -0
- package/dist/version-Cpn3yr5D.js +26 -0
- package/dist/workspace-Co3Wul2D.js +206 -0
- package/dist/workspace-DCA6MNVK.js +350 -0
- package/docs/.i18n/README.md +31 -0
- package/docs/.i18n/glossary.zh-CN.json +210 -0
- package/docs/.i18n/zh-CN.tm.jsonl +1329 -0
- package/docs/CNAME +1 -0
- package/docs/automation/cron-jobs.md +468 -0
- package/docs/automation/cron-vs-heartbeat.md +254 -0
- package/docs/automation/gmail-pubsub.md +256 -0
- package/docs/automation/poll.md +69 -0
- package/docs/automation/webhook.md +163 -0
- package/docs/bedrock.md +176 -0
- package/docs/brave-search.md +41 -0
- package/docs/broadcast-groups.md +442 -0
- package/docs/cli/acp.md +170 -0
- package/docs/cli/agent.md +24 -0
- package/docs/cli/agents.md +75 -0
- package/docs/cli/approvals.md +50 -0
- package/docs/cli/browser.md +107 -0
- package/docs/cli/channels.md +79 -0
- package/docs/cli/config.md +50 -0
- package/docs/cli/configure.md +33 -0
- package/docs/cli/cron.md +42 -0
- package/docs/cli/dashboard.md +16 -0
- package/docs/cli/devices.md +67 -0
- package/docs/cli/directory.md +63 -0
- package/docs/cli/dns.md +23 -0
- package/docs/cli/docs.md +15 -0
- package/docs/cli/doctor.md +41 -0
- package/docs/cli/gateway.md +199 -0
- package/docs/cli/health.md +21 -0
- package/docs/cli/hooks.md +291 -0
- package/docs/cli/index.md +1029 -0
- package/docs/cli/logs.md +24 -0
- package/docs/cli/memory.md +45 -0
- package/docs/cli/message.md +239 -0
- package/docs/cli/models.md +79 -0
- package/docs/cli/node.md +112 -0
- package/docs/cli/nodes.md +73 -0
- package/docs/cli/onboard.md +29 -0
- package/docs/cli/pairing.md +21 -0
- package/docs/cli/plugins.md +62 -0
- package/docs/cli/reset.md +17 -0
- package/docs/cli/sandbox.md +152 -0
- package/docs/cli/security.md +26 -0
- package/docs/cli/sessions.md +16 -0
- package/docs/cli/setup.md +29 -0
- package/docs/cli/skills.md +26 -0
- package/docs/cli/status.md +26 -0
- package/docs/cli/system.md +60 -0
- package/docs/cli/tui.md +23 -0
- package/docs/cli/uninstall.md +17 -0
- package/docs/cli/update.md +98 -0
- package/docs/cli/voicecall.md +34 -0
- package/docs/cli/webhooks.md +25 -0
- package/docs/concepts/agent-loop.md +146 -0
- package/docs/concepts/agent-workspace.md +229 -0
- package/docs/concepts/agent.md +122 -0
- package/docs/concepts/architecture.md +129 -0
- package/docs/concepts/channel-routing.md +114 -0
- package/docs/concepts/compaction.md +61 -0
- package/docs/concepts/context.md +159 -0
- package/docs/concepts/features.md +53 -0
- package/docs/concepts/group-messages.md +84 -0
- package/docs/concepts/groups.md +373 -0
- package/docs/concepts/markdown-formatting.md +130 -0
- package/docs/concepts/memory.md +546 -0
- package/docs/concepts/messages.md +154 -0
- package/docs/concepts/model-failover.md +149 -0
- package/docs/concepts/model-providers.md +315 -0
- package/docs/concepts/models.md +208 -0
- package/docs/concepts/multi-agent.md +376 -0
- package/docs/concepts/oauth.md +145 -0
- package/docs/concepts/plugins.md +454 -0
- package/docs/concepts/presence.md +102 -0
- package/docs/concepts/queue.md +89 -0
- package/docs/concepts/retry.md +69 -0
- package/docs/concepts/secrets.md +300 -0
- package/docs/concepts/session-pruning.md +122 -0
- package/docs/concepts/session-tool.md +193 -0
- package/docs/concepts/session.md +188 -0
- package/docs/concepts/sessions.md +10 -0
- package/docs/concepts/skills.md +392 -0
- package/docs/concepts/streaming.md +135 -0
- package/docs/concepts/system-prompt.md +114 -0
- package/docs/concepts/timezone.md +91 -0
- package/docs/concepts/typebox.md +289 -0
- package/docs/concepts/typing-indicators.md +68 -0
- package/docs/concepts/usage-tracking.md +35 -0
- package/docs/custom.css +4 -0
- package/docs/date-time.md +128 -0
- package/docs/debugging.md +162 -0
- package/docs/docs.json +1599 -0
- package/docs/environment.md +81 -0
- package/docs/hooks.md +876 -0
- package/docs/index.md +179 -0
- package/docs/install/ansible.md +208 -0
- package/docs/install/bun.md +59 -0
- package/docs/install/development-channels.md +75 -0
- package/docs/install/docker.md +567 -0
- package/docs/install/index.md +185 -0
- package/docs/install/installer.md +123 -0
- package/docs/install/migrating.md +192 -0
- package/docs/install/nix.md +96 -0
- package/docs/install/node.md +78 -0
- package/docs/install/uninstall.md +128 -0
- package/docs/install/updating.md +228 -0
- package/docs/logging.md +350 -0
- package/docs/multi-agent-sandbox-tools.md +395 -0
- package/docs/network.md +54 -0
- package/docs/nodes/audio.md +114 -0
- package/docs/nodes/camera.md +156 -0
- package/docs/nodes/images.md +72 -0
- package/docs/nodes/index.md +341 -0
- package/docs/nodes/location-command.md +113 -0
- package/docs/nodes/media-understanding.md +379 -0
- package/docs/nodes/talk.md +90 -0
- package/docs/nodes/voicewake.md +65 -0
- package/docs/northflank.mdx +53 -0
- package/docs/perplexity.md +80 -0
- package/docs/platforms/android.md +129 -0
- package/docs/platforms/digitalocean.md +262 -0
- package/docs/platforms/exe-dev.md +125 -0
- package/docs/platforms/fly.md +486 -0
- package/docs/platforms/gcp.md +503 -0
- package/docs/platforms/hetzner.md +330 -0
- package/docs/platforms/index.md +53 -0
- package/docs/platforms/ios.md +106 -0
- package/docs/platforms/linux.md +94 -0
- package/docs/platforms/mac/bundled-gateway.md +73 -0
- package/docs/platforms/mac/canvas.md +125 -0
- package/docs/platforms/mac/child-process.md +69 -0
- package/docs/platforms/mac/dev-setup.md +102 -0
- package/docs/platforms/mac/health.md +34 -0
- package/docs/platforms/mac/icon.md +31 -0
- package/docs/platforms/mac/logging.md +57 -0
- package/docs/platforms/mac/menu-bar.md +81 -0
- package/docs/platforms/mac/peekaboo.md +65 -0
- package/docs/platforms/mac/permissions.md +44 -0
- package/docs/platforms/mac/release.md +85 -0
- package/docs/platforms/mac/remote.md +83 -0
- package/docs/platforms/mac/signing.md +47 -0
- package/docs/platforms/mac/skills.md +33 -0
- package/docs/platforms/mac/voice-overlay.md +60 -0
- package/docs/platforms/mac/voicewake.md +67 -0
- package/docs/platforms/mac/webchat.md +41 -0
- package/docs/platforms/mac/xpc.md +61 -0
- package/docs/platforms/macos-vm.md +281 -0
- package/docs/platforms/macos.md +203 -0
- package/docs/platforms/oracle.md +303 -0
- package/docs/platforms/raspberry-pi.md +358 -0
- package/docs/platforms/windows.md +159 -0
- package/docs/plugin.md +651 -0
- package/docs/plugins/agent-tools.md +99 -0
- package/docs/plugins/manifest.md +71 -0
- package/docs/plugins/voice-call.md +273 -0
- package/docs/plugins/zalouser.md +70 -0
- package/docs/providers/anthropic.md +152 -0
- package/docs/providers/claude-max-api-proxy.md +148 -0
- package/docs/providers/cloudflare-ai-gateway.md +71 -0
- package/docs/providers/deepgram.md +93 -0
- package/docs/providers/glm.md +33 -0
- package/docs/providers/index.md +63 -0
- package/docs/providers/minimax.md +208 -0
- package/docs/providers/models.md +51 -0
- package/docs/providers/moonshot.md +142 -0
- package/docs/providers/ollama.md +223 -0
- package/docs/providers/openai.md +62 -0
- package/docs/providers/opencode.md +36 -0
- package/docs/providers/openrouter.md +37 -0
- package/docs/providers/qwen.md +53 -0
- package/docs/providers/synthetic.md +99 -0
- package/docs/providers/venice.md +267 -0
- package/docs/providers/vercel-ai-gateway.md +50 -0
- package/docs/providers/xiaomi.md +64 -0
- package/docs/providers/zai.md +36 -0
- package/docs/railway.mdx +99 -0
- package/docs/reference/templates/AGENTS.md +9 -0
- package/docs/reference/templates/BOOTSTRAP.md +3 -0
- package/docs/reference/templates/HEARTBEAT.md +3 -0
- package/docs/reference/templates/IDENTITY.md +3 -0
- package/docs/reference/templates/TOOLS.md +3 -0
- package/docs/reference/templates/USER.md +3 -0
- package/docs/render.mdx +165 -0
- package/docs/start/docs-directory.md +63 -0
- package/docs/start/getting-started.md +212 -0
- package/docs/start/milaidy.md +247 -0
- package/docs/start/onboarding.md +258 -0
- package/docs/start/pairing.md +86 -0
- package/docs/start/quickstart.md +81 -0
- package/docs/start/setup.md +149 -0
- package/docs/start/showcase.md +416 -0
- package/docs/start/wizard.md +418 -0
- package/docs/testing.md +368 -0
- package/docs/token-use.md +112 -0
- package/docs/tools/agent-send.md +53 -0
- package/docs/tools/apply-patch.md +50 -0
- package/docs/tools/browser-linux-troubleshooting.md +139 -0
- package/docs/tools/browser-login.md +68 -0
- package/docs/tools/browser.md +576 -0
- package/docs/tools/chrome-extension.md +178 -0
- package/docs/tools/clawhub.md +257 -0
- package/docs/tools/creating-skills.md +54 -0
- package/docs/tools/elevated.md +57 -0
- package/docs/tools/exec-approvals.md +246 -0
- package/docs/tools/exec.md +179 -0
- package/docs/tools/firecrawl.md +61 -0
- package/docs/tools/index.md +508 -0
- package/docs/tools/llm-task.md +115 -0
- package/docs/tools/reactions.md +22 -0
- package/docs/tools/skills-config.md +76 -0
- package/docs/tools/skills.md +300 -0
- package/docs/tools/slash-commands.md +196 -0
- package/docs/tools/subagents.md +151 -0
- package/docs/tools/thinking.md +73 -0
- package/docs/tools/web.md +261 -0
- package/docs/tui.md +159 -0
- package/docs/vps.md +43 -0
- package/docs/web/control-ui.md +221 -0
- package/docs/web/dashboard.md +46 -0
- package/docs/web/index.md +116 -0
- package/docs/web/webchat.md +49 -0
- package/milaidy.mjs +14 -0
- package/package.json +271 -0
- 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
|
+
```
|