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,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)
|