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,151 @@
1
+ ---
2
+ summary: "Sub-agents: spawning isolated agent runs that announce results back to the requester chat"
3
+ read_when:
4
+ - You want background/parallel work via the agent
5
+ - You are changing sessions_spawn or sub-agent tool policy
6
+ title: "Sub-Agents"
7
+ ---
8
+
9
+ # Sub-agents
10
+
11
+ Sub-agents are background agent runs spawned from an existing agent run. They run in their own session (`agent:<agentId>:subagent:<uuid>`) and, when finished, **announce** their result back to the requester chat channel.
12
+
13
+ ## Slash command
14
+
15
+ Use `/subagents` to inspect or control sub-agent runs for the **current session**:
16
+
17
+ - `/subagents list`
18
+ - `/subagents stop <id|#|all>`
19
+ - `/subagents log <id|#> [limit] [tools]`
20
+ - `/subagents info <id|#>`
21
+ - `/subagents send <id|#> <message>`
22
+
23
+ `/subagents info` shows run metadata (status, timestamps, session id, transcript path, cleanup).
24
+
25
+ Primary goals:
26
+
27
+ - Parallelize “research / long task / slow tool” work without blocking the main run.
28
+ - Keep sub-agents isolated by default (session separation + optional sandboxing).
29
+ - Keep the tool surface hard to misuse: sub-agents do **not** get session tools by default.
30
+ - Avoid nested fan-out: sub-agents cannot spawn sub-agents.
31
+
32
+ Cost note: each sub-agent has its **own** context and token usage. For heavy or repetitive
33
+ tasks, set a cheaper model for sub-agents and keep your main agent on a higher-quality model.
34
+ You can configure this via `agents.defaults.subagents.model` or per-agent overrides.
35
+
36
+ ## Tool
37
+
38
+ Use `sessions_spawn`:
39
+
40
+ - Starts a sub-agent run (`deliver: false`, global lane: `subagent`)
41
+ - Then runs an announce step and posts the announce reply to the requester chat channel
42
+ - Default model: inherits the caller unless you set `agents.defaults.subagents.model` (or per-agent `agents.list[].subagents.model`); an explicit `sessions_spawn.model` still wins.
43
+ - Default thinking: inherits the caller unless you set `agents.defaults.subagents.thinking` (or per-agent `agents.list[].subagents.thinking`); an explicit `sessions_spawn.thinking` still wins.
44
+
45
+ Tool params:
46
+
47
+ - `task` (required)
48
+ - `label?` (optional)
49
+ - `agentId?` (optional; spawn under another agent id if allowed)
50
+ - `model?` (optional; overrides the sub-agent model; invalid values are skipped and the sub-agent runs on the default model with a warning in the tool result)
51
+ - `thinking?` (optional; overrides thinking level for the sub-agent run)
52
+ - `runTimeoutSeconds?` (default `0`; when set, the sub-agent run is aborted after N seconds)
53
+ - `cleanup?` (`delete|keep`, default `keep`)
54
+
55
+ Allowlist:
56
+
57
+ - `agents.list[].subagents.allowAgents`: list of agent ids that can be targeted via `agentId` (`["*"]` to allow any). Default: only the requester agent.
58
+
59
+ Discovery:
60
+
61
+ - Use `agents_list` to see which agent ids are currently allowed for `sessions_spawn`.
62
+
63
+ Auto-archive:
64
+
65
+ - Sub-agent sessions are automatically archived after `agents.defaults.subagents.archiveAfterMinutes` (default: 60).
66
+ - Archive uses `sessions.delete` and renames the transcript to `*.deleted.<timestamp>` (same folder).
67
+ - `cleanup: "delete"` archives immediately after announce (still keeps the transcript via rename).
68
+ - Auto-archive is best-effort; pending timers are lost if the gateway restarts.
69
+ - `runTimeoutSeconds` does **not** auto-archive; it only stops the run. The session remains until auto-archive.
70
+
71
+ ## Authentication
72
+
73
+ Sub-agent auth is resolved by **agent id**, not by session type:
74
+
75
+ - The sub-agent session key is `agent:<agentId>:subagent:<uuid>`.
76
+ - The auth store is loaded from that agent’s `agentDir`.
77
+ - The main agent’s auth profiles are merged in as a **fallback**; agent profiles override main profiles on conflicts.
78
+
79
+ Note: the merge is additive, so main profiles are always available as fallbacks. Fully isolated auth per agent is not supported yet.
80
+
81
+ ## Announce
82
+
83
+ Sub-agents report back via an announce step:
84
+
85
+ - The announce step runs inside the sub-agent session (not the requester session).
86
+ - If the sub-agent replies exactly `ANNOUNCE_SKIP`, nothing is posted.
87
+ - Otherwise the announce reply is posted to the requester chat channel via a follow-up `agent` call (`deliver=true`).
88
+ - Announce replies preserve thread/topic routing when available (Slack threads, Telegram topics, Matrix threads).
89
+ - Announce messages are normalized to a stable template:
90
+ - `Status:` derived from the run outcome (`success`, `error`, `timeout`, or `unknown`).
91
+ - `Result:` the summary content from the announce step (or `(not available)` if missing).
92
+ - `Notes:` error details and other useful context.
93
+ - `Status` is not inferred from model output; it comes from runtime outcome signals.
94
+
95
+ Announce payloads include a stats line at the end (even when wrapped):
96
+
97
+ - Runtime (e.g., `runtime 5m12s`)
98
+ - Token usage (input/output/total)
99
+ - Estimated cost when model pricing is configured (`models.providers.*.models[].cost`)
100
+ - `sessionKey`, `sessionId`, and transcript path (so the main agent can fetch history via `sessions_history` or inspect the file on disk)
101
+
102
+ ## Tool Policy (sub-agent tools)
103
+
104
+ By default, sub-agents get **all tools except session tools**:
105
+
106
+ - `sessions_list`
107
+ - `sessions_history`
108
+ - `sessions_send`
109
+ - `sessions_spawn`
110
+
111
+ Override via config:
112
+
113
+ ```json5
114
+ {
115
+ agents: {
116
+ defaults: {
117
+ subagents: {
118
+ maxConcurrent: 1,
119
+ },
120
+ },
121
+ },
122
+ tools: {
123
+ subagents: {
124
+ tools: {
125
+ // deny wins
126
+ deny: ["gateway", "cron"],
127
+ // if allow is set, it becomes allow-only (deny still wins)
128
+ // allow: ["read", "exec", "process"]
129
+ },
130
+ },
131
+ },
132
+ }
133
+ ```
134
+
135
+ ## Concurrency
136
+
137
+ Sub-agents use a dedicated in-process queue lane:
138
+
139
+ - Lane name: `subagent`
140
+ - Concurrency: `agents.defaults.subagents.maxConcurrent` (default `8`)
141
+
142
+ ## Stopping
143
+
144
+ - Sending `/stop` in the requester chat aborts the requester session and stops any active sub-agent runs spawned from it.
145
+
146
+ ## Limitations
147
+
148
+ - Sub-agent announce is **best-effort**. If the gateway restarts, pending “announce back” work is lost.
149
+ - Sub-agents still share the same gateway process resources; treat `maxConcurrent` as a safety valve.
150
+ - `sessions_spawn` is always non-blocking: it returns `{ status: "accepted", runId, childSessionKey }` immediately.
151
+ - Sub-agent context only injects `AGENTS.md` + `TOOLS.md` (no `IDENTITY.md`, `USER.md`, `HEARTBEAT.md`, or `BOOTSTRAP.md`).
@@ -0,0 +1,73 @@
1
+ ---
2
+ summary: "Directive syntax for /think + /verbose and how they affect model reasoning"
3
+ read_when:
4
+ - Adjusting thinking or verbose directive parsing or defaults
5
+ title: "Thinking Levels"
6
+ ---
7
+
8
+ # Thinking Levels (/think directives)
9
+
10
+ ## What it does
11
+
12
+ - Inline directive in any inbound body: `/t <level>`, `/think:<level>`, or `/thinking <level>`.
13
+ - Levels (aliases): `off | minimal | low | medium | high | xhigh` (GPT-5.2 + Codex models only)
14
+ - minimal → “think”
15
+ - low → “think hard”
16
+ - medium → “think harder”
17
+ - high → “ultrathink” (max budget)
18
+ - xhigh → “ultrathink+” (GPT-5.2 + Codex models only)
19
+ - `highest`, `max` map to `high`.
20
+ - Provider notes:
21
+ - Z.AI (`zai/*`) only supports binary thinking (`on`/`off`). Any non-`off` level is treated as `on` (mapped to `low`).
22
+
23
+ ## Resolution order
24
+
25
+ 1. Inline directive on the message (applies only to that message).
26
+ 2. Session override (set by sending a directive-only message).
27
+ 3. Global default (`agents.defaults.thinkingDefault` in config).
28
+ 4. Fallback: low for reasoning-capable models; off otherwise.
29
+
30
+ ## Setting a session default
31
+
32
+ - Send a message that is **only** the directive (whitespace allowed), e.g. `/think:medium` or `/t high`.
33
+ - That sticks for the current session (per-sender by default); cleared by `/think:off` or session idle reset.
34
+ - Confirmation reply is sent (`Thinking level set to high.` / `Thinking disabled.`). If the level is invalid (e.g. `/thinking big`), the command is rejected with a hint and the session state is left unchanged.
35
+ - Send `/think` (or `/think:`) with no argument to see the current thinking level.
36
+
37
+ ## Application by agent
38
+
39
+ - **Embedded Pi**: the resolved level is passed to the in-process Pi agent runtime.
40
+
41
+ ## Verbose directives (/verbose or /v)
42
+
43
+ - Levels: `on` (minimal) | `full` | `off` (default).
44
+ - Directive-only message toggles session verbose and replies `Verbose logging enabled.` / `Verbose logging disabled.`; invalid levels return a hint without changing state.
45
+ - `/verbose off` stores an explicit session override; clear it via the Sessions UI by choosing `inherit`.
46
+ - Inline directive affects only that message; session/global defaults apply otherwise.
47
+ - Send `/verbose` (or `/verbose:`) with no argument to see the current verbose level.
48
+ - When verbose is on, agents that emit structured tool results (Pi, other JSON agents) send each tool call back as its own metadata-only message, prefixed with `<emoji> <tool-name>: <arg>` when available (path/command). These tool summaries are sent as soon as each tool starts (separate bubbles), not as streaming deltas.
49
+ - When verbose is `full`, tool outputs are also forwarded after completion (separate bubble, truncated to a safe length). If you toggle `/verbose on|full|off` while a run is in-flight, subsequent tool bubbles honor the new setting.
50
+
51
+ ## Reasoning visibility (/reasoning)
52
+
53
+ - Levels: `on|off|stream`.
54
+ - Directive-only message toggles whether thinking blocks are shown in replies.
55
+ - When enabled, reasoning is sent as a **separate message** prefixed with `Reasoning:`.
56
+ - `stream` (Telegram only): streams reasoning into the Telegram draft bubble while the reply is generating, then sends the final answer without reasoning.
57
+ - Alias: `/reason`.
58
+ - Send `/reasoning` (or `/reasoning:`) with no argument to see the current reasoning level.
59
+
60
+ ## Related
61
+
62
+ - Elevated mode docs live in [Elevated mode](/tools/elevated).
63
+
64
+ ## Heartbeats
65
+
66
+ - Heartbeat probe body is the configured heartbeat prompt (default: `Read HEARTBEAT.md if it exists (workspace context). Follow it strictly. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply HEARTBEAT_OK.`). Inline directives in a heartbeat message apply as usual (but avoid changing session defaults from heartbeats).
67
+ - Heartbeat delivery defaults to the final payload only. To also send the separate `Reasoning:` message (when available), set `agents.defaults.heartbeat.includeReasoning: true` or per-agent `agents.list[].heartbeat.includeReasoning: true`.
68
+
69
+ ## Web chat UI
70
+
71
+ - The web chat thinking selector mirrors the session's stored level from the inbound session store/config when the page loads.
72
+ - Picking another level applies only to the next message (`thinkingOnce`); after sending, the selector snaps back to the stored session level.
73
+ - To change the session default, send a `/think:<level>` directive (as before); the selector will reflect it after the next reload.
@@ -0,0 +1,261 @@
1
+ ---
2
+ summary: "Web search + fetch tools (Brave Search API, Perplexity direct/OpenRouter)"
3
+ read_when:
4
+ - You want to enable web_search or web_fetch
5
+ - You need Brave Search API key setup
6
+ - You want to use Perplexity Sonar for web search
7
+ title: "Web Tools"
8
+ ---
9
+
10
+ # Web tools
11
+
12
+ Milaidy ships two lightweight web tools:
13
+
14
+ - `web_search` — Search the web via Brave Search API (default) or Perplexity Sonar (direct or via OpenRouter).
15
+ - `web_fetch` — HTTP fetch + readable extraction (HTML → markdown/text).
16
+
17
+ These are **not** browser automation. For JS-heavy sites or logins, use the
18
+ [Browser tool](/tools/browser).
19
+
20
+ ## How it works
21
+
22
+ - `web_search` calls your configured provider and returns results.
23
+ - **Brave** (default): returns structured results (title, URL, snippet).
24
+ - **Perplexity**: returns AI-synthesized answers with citations from real-time web search.
25
+ - Results are cached by query for 15 minutes (configurable).
26
+ - `web_fetch` does a plain HTTP GET and extracts readable content
27
+ (HTML → markdown/text). It does **not** execute JavaScript.
28
+ - `web_fetch` is enabled by default (unless explicitly disabled).
29
+
30
+ ## Choosing a search provider
31
+
32
+ | Provider | Pros | Cons | API Key |
33
+ | ------------------- | -------------------------------------------- | ---------------------------------------- | -------------------------------------------- |
34
+ | **Brave** (default) | Fast, structured results, free tier | Traditional search results | `BRAVE_API_KEY` |
35
+ | **Perplexity** | AI-synthesized answers, citations, real-time | Requires Perplexity or OpenRouter access | `OPENROUTER_API_KEY` or `PERPLEXITY_API_KEY` |
36
+
37
+ See [Brave Search setup](/brave-search) and [Perplexity Sonar](/perplexity) for provider-specific details.
38
+
39
+ Set the provider in config:
40
+
41
+ ```json5
42
+ {
43
+ tools: {
44
+ web: {
45
+ search: {
46
+ provider: "brave", // or "perplexity"
47
+ },
48
+ },
49
+ },
50
+ }
51
+ ```
52
+
53
+ Example: switch to Perplexity Sonar (direct API):
54
+
55
+ ```json5
56
+ {
57
+ tools: {
58
+ web: {
59
+ search: {
60
+ provider: "perplexity",
61
+ perplexity: {
62
+ apiKey: "pplx-...",
63
+ baseUrl: "https://api.perplexity.ai",
64
+ model: "perplexity/sonar-pro",
65
+ },
66
+ },
67
+ },
68
+ },
69
+ }
70
+ ```
71
+
72
+ ## Getting a Brave API key
73
+
74
+ 1. Create a Brave Search API account at https://brave.com/search/api/
75
+ 2. In the dashboard, choose the **Data for Search** plan (not “Data for AI”) and generate an API key.
76
+ 3. Run `milaidy configure --section web` to store the key in config (recommended), or set `BRAVE_API_KEY` in your environment.
77
+
78
+ Brave provides a free tier plus paid plans; check the Brave API portal for the
79
+ current limits and pricing.
80
+
81
+ ### Where to set the key (recommended)
82
+
83
+ **Recommended:** run `milaidy configure --section web`. It stores the key in
84
+ `~/.milaidy/milaidy.json` under `tools.web.search.apiKey`.
85
+
86
+ **Environment alternative:** set `BRAVE_API_KEY` in the Gateway process
87
+ environment. For a gateway install, put it in `~/.milaidy/.env` (or your
88
+ service environment). See [Env vars](/help/faq#how-does-milaidy-load-environment-variables).
89
+
90
+ ## Using Perplexity (direct or via OpenRouter)
91
+
92
+ Perplexity Sonar models have built-in web search capabilities and return AI-synthesized
93
+ answers with citations. You can use them via OpenRouter (no credit card required - supports
94
+ crypto/prepaid).
95
+
96
+ ### Getting an OpenRouter API key
97
+
98
+ 1. Create an account at https://openrouter.ai/
99
+ 2. Add credits (supports crypto, prepaid, or credit card)
100
+ 3. Generate an API key in your account settings
101
+
102
+ ### Setting up Perplexity search
103
+
104
+ ```json5
105
+ {
106
+ tools: {
107
+ web: {
108
+ search: {
109
+ enabled: true,
110
+ provider: "perplexity",
111
+ perplexity: {
112
+ // API key (optional if OPENROUTER_API_KEY or PERPLEXITY_API_KEY is set)
113
+ apiKey: "sk-or-v1-...",
114
+ // Base URL (key-aware default if omitted)
115
+ baseUrl: "https://openrouter.ai/api/v1",
116
+ // Model (defaults to perplexity/sonar-pro)
117
+ model: "perplexity/sonar-pro",
118
+ },
119
+ },
120
+ },
121
+ },
122
+ }
123
+ ```
124
+
125
+ **Environment alternative:** set `OPENROUTER_API_KEY` or `PERPLEXITY_API_KEY` in the Gateway
126
+ environment. For a gateway install, put it in `~/.milaidy/.env`.
127
+
128
+ If no base URL is set, Milaidy chooses a default based on the API key source:
129
+
130
+ - `PERPLEXITY_API_KEY` or `pplx-...` → `https://api.perplexity.ai`
131
+ - `OPENROUTER_API_KEY` or `sk-or-...` → `https://openrouter.ai/api/v1`
132
+ - Unknown key formats → OpenRouter (safe fallback)
133
+
134
+ ### Available Perplexity models
135
+
136
+ | Model | Description | Best for |
137
+ | -------------------------------- | ------------------------------------ | ----------------- |
138
+ | `perplexity/sonar` | Fast Q&A with web search | Quick lookups |
139
+ | `perplexity/sonar-pro` (default) | Multi-step reasoning with web search | Complex questions |
140
+ | `perplexity/sonar-reasoning-pro` | Chain-of-thought analysis | Deep research |
141
+
142
+ ## web_search
143
+
144
+ Search the web using your configured provider.
145
+
146
+ ### Requirements
147
+
148
+ - `tools.web.search.enabled` must not be `false` (default: enabled)
149
+ - API key for your chosen provider:
150
+ - **Brave**: `BRAVE_API_KEY` or `tools.web.search.apiKey`
151
+ - **Perplexity**: `OPENROUTER_API_KEY`, `PERPLEXITY_API_KEY`, or `tools.web.search.perplexity.apiKey`
152
+
153
+ ### Config
154
+
155
+ ```json5
156
+ {
157
+ tools: {
158
+ web: {
159
+ search: {
160
+ enabled: true,
161
+ apiKey: "BRAVE_API_KEY_HERE", // optional if BRAVE_API_KEY is set
162
+ maxResults: 5,
163
+ timeoutSeconds: 30,
164
+ cacheTtlMinutes: 15,
165
+ },
166
+ },
167
+ },
168
+ }
169
+ ```
170
+
171
+ ### Tool parameters
172
+
173
+ - `query` (required)
174
+ - `count` (1–10; default from config)
175
+ - `country` (optional): 2-letter country code for region-specific results (e.g., "DE", "US", "ALL"). If omitted, Brave chooses its default region.
176
+ - `search_lang` (optional): ISO language code for search results (e.g., "de", "en", "fr")
177
+ - `ui_lang` (optional): ISO language code for UI elements
178
+ - `freshness` (optional, Brave only): filter by discovery time (`pd`, `pw`, `pm`, `py`, or `YYYY-MM-DDtoYYYY-MM-DD`)
179
+
180
+ **Examples:**
181
+
182
+ ```javascript
183
+ // German-specific search
184
+ await web_search({
185
+ query: "TV online schauen",
186
+ count: 10,
187
+ country: "DE",
188
+ search_lang: "de",
189
+ });
190
+
191
+ // French search with French UI
192
+ await web_search({
193
+ query: "actualités",
194
+ country: "FR",
195
+ search_lang: "fr",
196
+ ui_lang: "fr",
197
+ });
198
+
199
+ // Recent results (past week)
200
+ await web_search({
201
+ query: "TMBG interview",
202
+ freshness: "pw",
203
+ });
204
+ ```
205
+
206
+ ## web_fetch
207
+
208
+ Fetch a URL and extract readable content.
209
+
210
+ ### Requirements
211
+
212
+ - `tools.web.fetch.enabled` must not be `false` (default: enabled)
213
+ - Optional Firecrawl fallback: set `tools.web.fetch.firecrawl.apiKey` or `FIRECRAWL_API_KEY`.
214
+
215
+ ### Config
216
+
217
+ ```json5
218
+ {
219
+ tools: {
220
+ web: {
221
+ fetch: {
222
+ enabled: true,
223
+ maxChars: 50000,
224
+ maxCharsCap: 50000,
225
+ timeoutSeconds: 30,
226
+ cacheTtlMinutes: 15,
227
+ maxRedirects: 3,
228
+ userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 14_7_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36",
229
+ readability: true,
230
+ firecrawl: {
231
+ enabled: true,
232
+ apiKey: "FIRECRAWL_API_KEY_HERE", // optional if FIRECRAWL_API_KEY is set
233
+ baseUrl: "https://api.firecrawl.dev",
234
+ onlyMainContent: true,
235
+ maxAgeMs: 86400000, // ms (1 day)
236
+ timeoutSeconds: 60,
237
+ },
238
+ },
239
+ },
240
+ },
241
+ }
242
+ ```
243
+
244
+ ### Tool parameters
245
+
246
+ - `url` (required, http/https only)
247
+ - `extractMode` (`markdown` | `text`)
248
+ - `maxChars` (truncate long pages)
249
+
250
+ Notes:
251
+
252
+ - `web_fetch` uses Readability (main-content extraction) first, then Firecrawl (if configured). If both fail, the tool returns an error.
253
+ - Firecrawl requests use bot-circumvention mode and cache results by default.
254
+ - `web_fetch` sends a Chrome-like User-Agent and `Accept-Language` by default; override `userAgent` if needed.
255
+ - `web_fetch` blocks private/internal hostnames and re-checks redirects (limit with `maxRedirects`).
256
+ - `maxChars` is clamped to `tools.web.fetch.maxCharsCap`.
257
+ - `web_fetch` is best-effort extraction; some sites will need the browser tool.
258
+ - See [Firecrawl](/tools/firecrawl) for key setup and service details.
259
+ - Responses are cached (default 15 minutes) to reduce repeated fetches.
260
+ - If you use tool profiles/allowlists, add `web_search`/`web_fetch` or `group:web`.
261
+ - If the Brave key is missing, `web_search` returns a short setup hint with a docs link.
package/docs/tui.md ADDED
@@ -0,0 +1,159 @@
1
+ ---
2
+ summary: "Terminal UI (TUI): connect to the Gateway from any machine"
3
+ read_when:
4
+ - You want a beginner-friendly walkthrough of the TUI
5
+ - You need the complete list of TUI features, commands, and shortcuts
6
+ title: "TUI"
7
+ ---
8
+
9
+ # TUI (Terminal UI)
10
+
11
+ ## Quick start
12
+
13
+ 1. Start the Gateway.
14
+
15
+ ```bash
16
+ milaidy gateway
17
+ ```
18
+
19
+ 2. Open the TUI.
20
+
21
+ ```bash
22
+ milaidy tui
23
+ ```
24
+
25
+ 3. Type a message and press Enter.
26
+
27
+ Remote Gateway:
28
+
29
+ ```bash
30
+ milaidy tui --url ws://<host>:<port> --token <gateway-token>
31
+ ```
32
+
33
+ Use `--password` if your Gateway uses password auth.
34
+
35
+ ## What you see
36
+
37
+ - Header: connection URL, current agent, current session.
38
+ - Chat log: user messages, assistant replies, system notices, tool cards.
39
+ - Status line: connection/run state (connecting, running, streaming, idle, error).
40
+ - Footer: connection state + agent + session + model + think/verbose/reasoning + token counts + deliver.
41
+ - Input: text editor with autocomplete.
42
+
43
+ ## Mental model: agents + sessions
44
+
45
+ - Agents are unique slugs (e.g. `main`, `research`). The Gateway exposes the list.
46
+ - Sessions belong to the current agent.
47
+ - Session keys are stored as `agent:<agentId>:<sessionKey>`.
48
+ - If you type `/session main`, the TUI expands it to `agent:<currentAgent>:main`.
49
+ - If you type `/session agent:other:main`, you switch to that agent session explicitly.
50
+ - Session scope:
51
+ - `per-sender` (default): each agent has many sessions.
52
+ - `global`: the TUI always uses the `global` session (the picker may be empty).
53
+ - The current agent + session are always visible in the footer.
54
+
55
+ ## Sending + delivery
56
+
57
+ - Messages are sent to the Gateway; delivery to providers is off by default.
58
+ - Turn delivery on:
59
+ - `/deliver on`
60
+ - or the Settings panel
61
+ - or start with `milaidy tui --deliver`
62
+
63
+ ## Pickers + overlays
64
+
65
+ - Model picker: list available models and set the session override.
66
+ - Agent picker: choose a different agent.
67
+ - Session picker: shows only sessions for the current agent.
68
+ - Settings: toggle deliver, tool output expansion, and thinking visibility.
69
+
70
+ ## Keyboard shortcuts
71
+
72
+ - Enter: send message
73
+ - Esc: abort active run
74
+ - Ctrl+C: clear input (press twice to exit)
75
+ - Ctrl+D: exit
76
+ - Ctrl+L: model picker
77
+ - Ctrl+G: agent picker
78
+ - Ctrl+P: session picker
79
+ - Ctrl+O: toggle tool output expansion
80
+ - Ctrl+T: toggle thinking visibility (reloads history)
81
+
82
+ ## Slash commands
83
+
84
+ Core:
85
+
86
+ - `/help`
87
+ - `/status`
88
+ - `/agent <id>` (or `/agents`)
89
+ - `/session <key>` (or `/sessions`)
90
+ - `/model <provider/model>` (or `/models`)
91
+
92
+ Session controls:
93
+
94
+ - `/think <off|minimal|low|medium|high>`
95
+ - `/verbose <on|full|off>`
96
+ - `/reasoning <on|off|stream>`
97
+ - `/usage <off|tokens|full>`
98
+ - `/elevated <on|off|ask|full>` (alias: `/elev`)
99
+ - `/activation <mention|always>`
100
+ - `/deliver <on|off>`
101
+
102
+ Session lifecycle:
103
+
104
+ - `/new` or `/reset` (reset the session)
105
+ - `/abort` (abort the active run)
106
+ - `/settings`
107
+ - `/exit`
108
+
109
+ Other Gateway slash commands (for example, `/context`) are forwarded to the Gateway and shown as system output. See [Slash commands](/tools/slash-commands).
110
+
111
+ ## Local shell commands
112
+
113
+ - Prefix a line with `!` to run a local shell command on the TUI host.
114
+ - The TUI prompts once per session to allow local execution; declining keeps `!` disabled for the session.
115
+ - Commands run in a fresh, non-interactive shell in the TUI working directory (no persistent `cd`/env).
116
+ - A lone `!` is sent as a normal message; leading spaces do not trigger local exec.
117
+
118
+ ## Tool output
119
+
120
+ - Tool calls show as cards with args + results.
121
+ - Ctrl+O toggles between collapsed/expanded views.
122
+ - While tools run, partial updates stream into the same card.
123
+
124
+ ## History + streaming
125
+
126
+ - On connect, the TUI loads the latest history (default 200 messages).
127
+ - Streaming responses update in place until finalized.
128
+ - The TUI also listens to agent tool events for richer tool cards.
129
+
130
+ ## Connection details
131
+
132
+ - The TUI registers with the Gateway as `mode: "tui"`.
133
+ - Reconnects show a system message; event gaps are surfaced in the log.
134
+
135
+ ## Options
136
+
137
+ - `--url <url>`: Gateway WebSocket URL (defaults to config or `ws://127.0.0.1:<port>`)
138
+ - `--token <token>`: Gateway token (if required)
139
+ - `--password <password>`: Gateway password (if required)
140
+ - `--session <key>`: Session key (default: `main`, or `global` when scope is global)
141
+ - `--deliver`: Deliver assistant replies to the provider (default off)
142
+ - `--thinking <level>`: Override thinking level for sends
143
+ - `--timeout-ms <ms>`: Agent timeout in ms (defaults to `agents.defaults.timeoutSeconds`)
144
+
145
+ ## Troubleshooting
146
+
147
+ No output after sending a message:
148
+
149
+ - Run `/status` in the TUI to confirm the Gateway is connected and idle/busy.
150
+ - Check the Gateway logs: `milaidy logs --follow`.
151
+ - Confirm the agent can run: `milaidy status` and `milaidy models status`.
152
+ - If you expect messages in a chat channel, enable delivery (`/deliver on` or `--deliver`).
153
+ - `--history-limit <n>`: History entries to load (default 200)
154
+
155
+ ## Troubleshooting
156
+
157
+ - `disconnected`: ensure the Gateway is running and your `--url/--token/--password` are correct.
158
+ - No agents in picker: check `milaidy agents list` and your routing config.
159
+ - Empty session picker: you might be in global scope or have no sessions yet.
package/docs/vps.md ADDED
@@ -0,0 +1,43 @@
1
+ ---
2
+ summary: "VPS hosting hub for Milaidy (Oracle/Fly/Hetzner/GCP/exe.dev)"
3
+ read_when:
4
+ - You want to run the Gateway in the cloud
5
+ - You need a quick map of VPS/hosting guides
6
+ title: "VPS Hosting"
7
+ ---
8
+
9
+ # VPS hosting
10
+
11
+ This hub links to the supported VPS/hosting guides and explains how cloud
12
+ deployments work at a high level.
13
+
14
+ ## Pick a provider
15
+
16
+ - **Railway** (one‑click + browser setup): [Railway](/railway)
17
+ - **Northflank** (one‑click + browser setup): [Northflank](/northflank)
18
+ - **Oracle Cloud (Always Free)**: [Oracle](/platforms/oracle) — $0/month (Always Free, ARM; capacity/signup can be finicky)
19
+ - **Fly.io**: [Fly.io](/platforms/fly)
20
+ - **Hetzner (Docker)**: [Hetzner](/platforms/hetzner)
21
+ - **GCP (Compute Engine)**: [GCP](/platforms/gcp)
22
+ - **exe.dev** (VM + HTTPS proxy): [exe.dev](/platforms/exe-dev)
23
+ - **AWS (EC2/Lightsail/free tier)**: works well too. Video guide:
24
+ https://x.com/techfrenAJ/status/2014934471095812547
25
+
26
+ ## How cloud setups work
27
+
28
+ - The **Gateway runs on the VPS** and owns state + workspace.
29
+ - You connect from your laptop/phone via the **Control UI** or **Tailscale/SSH**.
30
+ - Treat the VPS as the source of truth and **back up** the state + workspace.
31
+ - Secure default: keep the Gateway on loopback and access it via SSH tunnel or Tailscale Serve.
32
+ If you bind to `lan`/`tailnet`, require `gateway.auth.token` or `gateway.auth.password`.
33
+
34
+ Remote access: [Gateway remote](/gateway/remote)
35
+ Platforms hub: [Platforms](/platforms)
36
+
37
+ ## Using nodes with a VPS
38
+
39
+ You can keep the Gateway in the cloud and pair **nodes** on your local devices
40
+ (Mac/iOS/Android/headless). Nodes provide local screen/camera/canvas and `system.run`
41
+ capabilities while the Gateway stays in the cloud.
42
+
43
+ Docs: [Nodes](/nodes), [Nodes CLI](/cli/nodes)