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,99 @@
1
+ ---
2
+ summary: "Write agent tools in a plugin (schemas, optional tools, allowlists)"
3
+ read_when:
4
+ - You want to add a new agent tool in a plugin
5
+ - You need to make a tool opt-in via allowlists
6
+ title: "Plugin Agent Tools"
7
+ ---
8
+
9
+ # Plugin agent tools
10
+
11
+ Milaidy plugins can register **agent tools** (JSON‑schema functions) that are exposed
12
+ to the LLM during agent runs. Tools can be **required** (always available) or
13
+ **optional** (opt‑in).
14
+
15
+ Agent tools are configured under `tools` in the main config, or per‑agent under
16
+ `agents.list[].tools`. The allowlist/denylist policy controls which tools the agent
17
+ can call.
18
+
19
+ ## Basic tool
20
+
21
+ ```ts
22
+ import { Type } from "@sinclair/typebox";
23
+
24
+ export default function (api) {
25
+ api.registerTool({
26
+ name: "my_tool",
27
+ description: "Do a thing",
28
+ parameters: Type.Object({
29
+ input: Type.String(),
30
+ }),
31
+ async execute(_id, params) {
32
+ return { content: [{ type: "text", text: params.input }] };
33
+ },
34
+ });
35
+ }
36
+ ```
37
+
38
+ ## Optional tool (opt‑in)
39
+
40
+ Optional tools are **never** auto‑enabled. Users must add them to an agent
41
+ allowlist.
42
+
43
+ ```ts
44
+ export default function (api) {
45
+ api.registerTool(
46
+ {
47
+ name: "workflow_tool",
48
+ description: "Run a local workflow",
49
+ parameters: {
50
+ type: "object",
51
+ properties: {
52
+ pipeline: { type: "string" },
53
+ },
54
+ required: ["pipeline"],
55
+ },
56
+ async execute(_id, params) {
57
+ return { content: [{ type: "text", text: params.pipeline }] };
58
+ },
59
+ },
60
+ { optional: true },
61
+ );
62
+ }
63
+ ```
64
+
65
+ Enable optional tools in `agents.list[].tools.allow` (or global `tools.allow`):
66
+
67
+ ```json5
68
+ {
69
+ agents: {
70
+ list: [
71
+ {
72
+ id: "main",
73
+ tools: {
74
+ allow: [
75
+ "workflow_tool", // specific tool name
76
+ "workflow", // plugin id (enables all tools from that plugin)
77
+ "group:plugins", // all plugin tools
78
+ ],
79
+ },
80
+ },
81
+ ],
82
+ },
83
+ }
84
+ ```
85
+
86
+ Other config knobs that affect tool availability:
87
+
88
+ - Allowlists that only name plugin tools are treated as plugin opt-ins; core tools remain
89
+ enabled unless you also include core tools or groups in the allowlist.
90
+ - `tools.profile` / `agents.list[].tools.profile` (base allowlist)
91
+ - `tools.byProvider` / `agents.list[].tools.byProvider` (provider‑specific allow/deny)
92
+ - `tools.sandbox.tools.*` (sandbox tool policy when sandboxed)
93
+
94
+ ## Rules + tips
95
+
96
+ - Tool names must **not** clash with core tool names; conflicting tools are skipped.
97
+ - Plugin ids used in allowlists must not clash with core tool names.
98
+ - Prefer `optional: true` for tools that trigger side effects or require extra
99
+ binaries/credentials.
@@ -0,0 +1,71 @@
1
+ ---
2
+ summary: "Plugin manifest + JSON schema requirements (strict config validation)"
3
+ read_when:
4
+ - You are building a Milaidy plugin
5
+ - You need to ship a plugin config schema or debug plugin validation errors
6
+ title: "Plugin Manifest"
7
+ ---
8
+
9
+ # Plugin manifest (milaidy.plugin.json)
10
+
11
+ Every plugin **must** ship a `milaidy.plugin.json` file in the **plugin root**.
12
+ Milaidy uses this manifest to validate configuration **without executing plugin
13
+ code**. Missing or invalid manifests are treated as plugin errors and block
14
+ config validation.
15
+
16
+ See the full plugin system guide: [Plugins](/plugin).
17
+
18
+ ## Required fields
19
+
20
+ ```json
21
+ {
22
+ "id": "voice-call",
23
+ "configSchema": {
24
+ "type": "object",
25
+ "additionalProperties": false,
26
+ "properties": {}
27
+ }
28
+ }
29
+ ```
30
+
31
+ Required keys:
32
+
33
+ - `id` (string): canonical plugin id.
34
+ - `configSchema` (object): JSON Schema for plugin config (inline).
35
+
36
+ Optional keys:
37
+
38
+ - `kind` (string): plugin kind (example: `"memory"`).
39
+ - `channels` (array): channel ids registered by this plugin (example: `["matrix"]`).
40
+ - `providers` (array): provider ids registered by this plugin.
41
+ - `skills` (array): skill directories to load (relative to the plugin root).
42
+ - `name` (string): display name for the plugin.
43
+ - `description` (string): short plugin summary.
44
+ - `uiHints` (object): config field labels/placeholders/sensitive flags for UI rendering.
45
+ - `version` (string): plugin version (informational).
46
+
47
+ ## JSON Schema requirements
48
+
49
+ - **Every plugin must ship a JSON Schema**, even if it accepts no config.
50
+ - An empty schema is acceptable (for example, `{ "type": "object", "additionalProperties": false }`).
51
+ - Schemas are validated at config read/write time, not at runtime.
52
+
53
+ ## Validation behavior
54
+
55
+ - Unknown `channels.*` keys are **errors**, unless the channel id is declared by
56
+ a plugin manifest.
57
+ - `plugins.entries.<id>`, `plugins.allow`, `plugins.deny`, and `plugins.slots.*`
58
+ must reference **discoverable** plugin ids. Unknown ids are **errors**.
59
+ - If a plugin is installed but has a broken or missing manifest or schema,
60
+ validation fails and Doctor reports the plugin error.
61
+ - If plugin config exists but the plugin is **disabled**, the config is kept and
62
+ a **warning** is surfaced in Doctor + logs.
63
+
64
+ ## Notes
65
+
66
+ - The manifest is **required for all plugins**, including local filesystem loads.
67
+ - Runtime still loads the plugin module separately; the manifest is only for
68
+ discovery + validation.
69
+ - If your plugin depends on native modules, document the build steps and any
70
+ package-manager allowlist requirements (for example, pnpm `allow-build-scripts`
71
+ - `pnpm rebuild <package>`).
@@ -0,0 +1,273 @@
1
+ ---
2
+ summary: "Voice Call plugin: outbound + inbound calls via Twilio/Telnyx/Plivo (plugin install + config + CLI)"
3
+ read_when:
4
+ - You want to place an outbound voice call from Milaidy
5
+ - You are configuring or developing the voice-call plugin
6
+ title: "Voice Call Plugin"
7
+ ---
8
+
9
+ # Voice Call (plugin)
10
+
11
+ Voice calls for Milaidy via a plugin. Supports outbound notifications and
12
+ multi-turn conversations with inbound policies.
13
+
14
+ Current providers:
15
+
16
+ - `twilio` (Programmable Voice + Media Streams)
17
+ - `telnyx` (Call Control v2)
18
+ - `plivo` (Voice API + XML transfer + GetInput speech)
19
+ - `mock` (dev/no network)
20
+
21
+ Quick mental model:
22
+
23
+ - Install plugin
24
+ - Restart Gateway
25
+ - Configure under `plugins.entries.voice-call.config`
26
+ - Use `milaidy voicecall ...` or the `voice_call` tool
27
+
28
+ ## Where it runs (local vs remote)
29
+
30
+ The Voice Call plugin runs **inside the Gateway process**.
31
+
32
+ If you use a remote Gateway, install/configure the plugin on the **machine running the Gateway**, then restart the Gateway to load it.
33
+
34
+ ## Install
35
+
36
+ ```bash
37
+ milaidy plugins install @elizaos/plugin-voice-call
38
+ ```
39
+
40
+ Restart the Gateway afterwards.
41
+
42
+ ## Config
43
+
44
+ Set config under `plugins.entries.voice-call.config`:
45
+
46
+ ```json5
47
+ {
48
+ plugins: {
49
+ entries: {
50
+ "voice-call": {
51
+ enabled: true,
52
+ config: {
53
+ provider: "twilio", // or "telnyx" | "plivo" | "mock"
54
+ fromNumber: "+15550001234",
55
+ toNumber: "+15550005678",
56
+
57
+ twilio: {
58
+ accountSid: "ACxxxxxxxx",
59
+ authToken: "...",
60
+ },
61
+
62
+ plivo: {
63
+ authId: "MAxxxxxxxxxxxxxxxxxxxx",
64
+ authToken: "...",
65
+ },
66
+
67
+ // Webhook server
68
+ serve: {
69
+ port: 3334,
70
+ path: "/voice/webhook",
71
+ },
72
+
73
+ // Webhook security (recommended for tunnels/proxies)
74
+ webhookSecurity: {
75
+ allowedHosts: ["voice.example.com"],
76
+ trustedProxyIPs: ["100.64.0.1"],
77
+ },
78
+
79
+ // Public exposure (pick one)
80
+ // publicUrl: "https://example.ngrok.app/voice/webhook",
81
+ // tunnel: { provider: "ngrok" },
82
+ // tailscale: { mode: "funnel", path: "/voice/webhook" }
83
+
84
+ outbound: {
85
+ defaultMode: "notify", // notify | conversation
86
+ },
87
+
88
+ streaming: {
89
+ enabled: true,
90
+ streamPath: "/voice/stream",
91
+ },
92
+ },
93
+ },
94
+ },
95
+ },
96
+ }
97
+ ```
98
+
99
+ Notes:
100
+
101
+ - Twilio/Telnyx require a **publicly reachable** webhook URL.
102
+ - Plivo requires a **publicly reachable** webhook URL.
103
+ - `mock` is a local dev provider (no network calls).
104
+ - `skipSignatureVerification` is for local testing only.
105
+ - If you use ngrok free tier, set `publicUrl` to the exact ngrok URL; signature verification is always enforced.
106
+ - `tunnel.allowNgrokFreeTierLoopbackBypass: true` allows Twilio webhooks with invalid signatures **only** when `tunnel.provider="ngrok"` and `serve.bind` is loopback (ngrok local agent). Use for local dev only.
107
+ - Ngrok free tier URLs can change or add interstitial behavior; if `publicUrl` drifts, Twilio signatures will fail. For production, prefer a stable domain or Tailscale funnel.
108
+
109
+ ## Webhook Security
110
+
111
+ When a proxy or tunnel sits in front of the Gateway, the plugin reconstructs the
112
+ public URL for signature verification. These options control which forwarded
113
+ headers are trusted.
114
+
115
+ `webhookSecurity.allowedHosts` allowlists hosts from forwarding headers.
116
+
117
+ `webhookSecurity.trustForwardingHeaders` trusts forwarded headers without an allowlist.
118
+
119
+ `webhookSecurity.trustedProxyIPs` only trusts forwarded headers when the request
120
+ remote IP matches the list.
121
+
122
+ Example with a stable public host:
123
+
124
+ ```json5
125
+ {
126
+ plugins: {
127
+ entries: {
128
+ "voice-call": {
129
+ config: {
130
+ publicUrl: "https://voice.example.com/voice/webhook",
131
+ webhookSecurity: {
132
+ allowedHosts: ["voice.example.com"],
133
+ },
134
+ },
135
+ },
136
+ },
137
+ },
138
+ }
139
+ ```
140
+
141
+ ## TTS for calls
142
+
143
+ Voice Call uses the core `messages.tts` configuration (OpenAI or ElevenLabs) for
144
+ streaming speech on calls. You can override it under the plugin config with the
145
+ **same shape** — it deep‑merges with `messages.tts`.
146
+
147
+ ```json5
148
+ {
149
+ tts: {
150
+ provider: "elevenlabs",
151
+ elevenlabs: {
152
+ voiceId: "pMsXgVXv3BLzUgSXRplE",
153
+ modelId: "eleven_multilingual_v2",
154
+ },
155
+ },
156
+ }
157
+ ```
158
+
159
+ Notes:
160
+
161
+ - **Edge TTS is ignored for voice calls** (telephony audio needs PCM; Edge output is unreliable).
162
+ - Core TTS is used when Twilio media streaming is enabled; otherwise calls fall back to provider native voices.
163
+
164
+ ### More examples
165
+
166
+ Use core TTS only (no override):
167
+
168
+ ```json5
169
+ {
170
+ messages: {
171
+ tts: {
172
+ provider: "openai",
173
+ openai: { voice: "alloy" },
174
+ },
175
+ },
176
+ }
177
+ ```
178
+
179
+ Override to ElevenLabs just for calls (keep core default elsewhere):
180
+
181
+ ```json5
182
+ {
183
+ plugins: {
184
+ entries: {
185
+ "voice-call": {
186
+ config: {
187
+ tts: {
188
+ provider: "elevenlabs",
189
+ elevenlabs: {
190
+ apiKey: "elevenlabs_key",
191
+ voiceId: "pMsXgVXv3BLzUgSXRplE",
192
+ modelId: "eleven_multilingual_v2",
193
+ },
194
+ },
195
+ },
196
+ },
197
+ },
198
+ },
199
+ }
200
+ ```
201
+
202
+ Override only the OpenAI model for calls (deep‑merge example):
203
+
204
+ ```json5
205
+ {
206
+ plugins: {
207
+ entries: {
208
+ "voice-call": {
209
+ config: {
210
+ tts: {
211
+ openai: {
212
+ model: "gpt-5-mini-tts",
213
+ voice: "marin",
214
+ },
215
+ },
216
+ },
217
+ },
218
+ },
219
+ },
220
+ }
221
+ ```
222
+
223
+ ## Inbound calls
224
+
225
+ Inbound policy defaults to `disabled`. To enable inbound calls, set:
226
+
227
+ ```json5
228
+ {
229
+ inboundPolicy: "allowlist",
230
+ allowFrom: ["+15550001234"],
231
+ inboundGreeting: "Hello! How can I help?",
232
+ }
233
+ ```
234
+
235
+ Auto-responses use the agent system. Tune with:
236
+
237
+ - `responseModel`
238
+ - `responseSystemPrompt`
239
+ - `responseTimeoutMs`
240
+
241
+ ## CLI
242
+
243
+ ```bash
244
+ milaidy voicecall call --to "+15555550123" --message "Hello from Milaidy"
245
+ milaidy voicecall continue --call-id <id> --message "Any questions?"
246
+ milaidy voicecall speak --call-id <id> --message "One moment"
247
+ milaidy voicecall end --call-id <id>
248
+ milaidy voicecall status --call-id <id>
249
+ milaidy voicecall tail
250
+ milaidy voicecall expose --mode funnel
251
+ ```
252
+
253
+ ## Agent tool
254
+
255
+ Tool name: `voice_call`
256
+
257
+ Actions:
258
+
259
+ - `initiate_call` (message, to?, mode?)
260
+ - `continue_call` (callId, message)
261
+ - `speak_to_user` (callId, message)
262
+ - `end_call` (callId)
263
+ - `get_status` (callId)
264
+
265
+ This repo ships a matching skill doc at `skills/voice-call/SKILL.md`.
266
+
267
+ ## Gateway RPC
268
+
269
+ - `voicecall.initiate` (`to?`, `message`, `mode?`)
270
+ - `voicecall.continue` (`callId`, `message`)
271
+ - `voicecall.speak` (`callId`, `message`)
272
+ - `voicecall.end` (`callId`)
273
+ - `voicecall.status` (`callId`)
@@ -0,0 +1,70 @@
1
+ ---
2
+ summary: "Zalo Personal plugin: QR login + messaging via zca-cli (plugin install + channel config + CLI + tool)"
3
+ read_when:
4
+ - You want Zalo Personal (unofficial) support in Milaidy
5
+ - You are configuring or developing the zalouser plugin
6
+ title: "Zalo Personal Plugin"
7
+ ---
8
+
9
+ # Zalo Personal (plugin)
10
+
11
+ Zalo Personal support for Milaidy via a plugin, using `zca-cli` to automate a normal Zalo user account.
12
+
13
+ > **Warning:** Unofficial automation may lead to account suspension/ban. Use at your own risk.
14
+
15
+ ## Naming
16
+
17
+ Channel id is `zalouser` to make it explicit this automates a **personal Zalo user account** (unofficial). We keep `zalo` reserved for a potential future official Zalo API integration.
18
+
19
+ ## Where it runs
20
+
21
+ This plugin runs **inside the Gateway process**.
22
+
23
+ If you use a remote Gateway, install/configure it on the **machine running the Gateway**, then restart the Gateway.
24
+
25
+ ## Install
26
+
27
+ ```bash
28
+ milaidy plugins install @elizaos/plugin-zalouser
29
+ ```
30
+
31
+ Restart the Gateway afterwards.
32
+
33
+ ## Prerequisite: zca-cli
34
+
35
+ The Gateway machine must have `zca` on `PATH`:
36
+
37
+ ```bash
38
+ zca --version
39
+ ```
40
+
41
+ ## Config
42
+
43
+ Channel config lives under `channels.zalouser` (not `plugins.entries.*`):
44
+
45
+ ```json5
46
+ {
47
+ channels: {
48
+ zalouser: {
49
+ enabled: true,
50
+ dmPolicy: "pairing",
51
+ },
52
+ },
53
+ }
54
+ ```
55
+
56
+ ## CLI
57
+
58
+ ```bash
59
+ milaidy channels login --channel zalouser
60
+ milaidy channels logout --channel zalouser
61
+ milaidy channels status --probe
62
+ milaidy message send --channel zalouser --target <threadId> --message "Hello from Milaidy"
63
+ milaidy directory peers list --channel zalouser --query "name"
64
+ ```
65
+
66
+ ## Agent tool
67
+
68
+ Tool name: `zalouser`
69
+
70
+ Actions: `send`, `image`, `link`, `friends`, `groups`, `me`, `status`
@@ -0,0 +1,152 @@
1
+ ---
2
+ summary: "Use Anthropic Claude via API keys or setup-token in Milaidy"
3
+ read_when:
4
+ - You want to use Anthropic models in Milaidy
5
+ - You want setup-token instead of API keys
6
+ title: "Anthropic"
7
+ ---
8
+
9
+ # Anthropic (Claude)
10
+
11
+ Anthropic builds the **Claude** model family and provides access via an API.
12
+ In Milaidy you can authenticate with an API key or a **setup-token**.
13
+
14
+ ## Option A: Anthropic API key
15
+
16
+ **Best for:** standard API access and usage-based billing.
17
+ Create your API key in the Anthropic Console.
18
+
19
+ ### CLI setup
20
+
21
+ ```bash
22
+ milaidy onboard
23
+ # choose: Anthropic API key
24
+
25
+ # or non-interactive
26
+ milaidy onboard --anthropic-api-key "$ANTHROPIC_API_KEY"
27
+ ```
28
+
29
+ ### Config snippet
30
+
31
+ ```json5
32
+ {
33
+ env: { ANTHROPIC_API_KEY: "sk-ant-..." },
34
+ agents: { defaults: { model: { primary: "anthropic/claude-opus-4-5" } } },
35
+ }
36
+ ```
37
+
38
+ ## Prompt caching (Anthropic API)
39
+
40
+ Milaidy supports Anthropic's prompt caching feature. This is **API-only**; subscription auth does not honor cache settings.
41
+
42
+ ### Configuration
43
+
44
+ Use the `cacheRetention` parameter in your model config:
45
+
46
+ | Value | Cache Duration | Description |
47
+ | ------- | -------------- | ----------------------------------- |
48
+ | `none` | No caching | Disable prompt caching |
49
+ | `short` | 5 minutes | Default for API Key auth |
50
+ | `long` | 1 hour | Extended cache (requires beta flag) |
51
+
52
+ ```json5
53
+ {
54
+ agents: {
55
+ defaults: {
56
+ models: {
57
+ "anthropic/claude-opus-4-5": {
58
+ params: { cacheRetention: "long" },
59
+ },
60
+ },
61
+ },
62
+ },
63
+ }
64
+ ```
65
+
66
+ ### Defaults
67
+
68
+ When using Anthropic API Key authentication, Milaidy automatically applies `cacheRetention: "short"` (5-minute cache) for all Anthropic models. You can override this by explicitly setting `cacheRetention` in your config.
69
+
70
+ ### Legacy parameter
71
+
72
+ The older `cacheControlTtl` parameter is still supported for backwards compatibility:
73
+
74
+ - `"5m"` maps to `short`
75
+ - `"1h"` maps to `long`
76
+
77
+ We recommend migrating to the new `cacheRetention` parameter.
78
+
79
+ Milaidy includes the `extended-cache-ttl-2025-04-11` beta flag for Anthropic API
80
+ requests; keep it if you override provider headers (see [/gateway/configuration](/gateway/configuration)).
81
+
82
+ ## Option B: Claude setup-token
83
+
84
+ **Best for:** using your Claude subscription.
85
+
86
+ ### Where to get a setup-token
87
+
88
+ Setup-tokens are created by the **Claude Code CLI**, not the Anthropic Console. You can run this on **any machine**:
89
+
90
+ ```bash
91
+ claude setup-token
92
+ ```
93
+
94
+ Paste the token into Milaidy (wizard: **Anthropic token (paste setup-token)**), or run it on the gateway host:
95
+
96
+ ```bash
97
+ milaidy models auth setup-token --provider anthropic
98
+ ```
99
+
100
+ If you generated the token on a different machine, paste it:
101
+
102
+ ```bash
103
+ milaidy models auth paste-token --provider anthropic
104
+ ```
105
+
106
+ ### CLI setup
107
+
108
+ ```bash
109
+ # Paste a setup-token during onboarding
110
+ milaidy onboard --auth-choice setup-token
111
+ ```
112
+
113
+ ### Config snippet
114
+
115
+ ```json5
116
+ {
117
+ agents: { defaults: { model: { primary: "anthropic/claude-opus-4-5" } } },
118
+ }
119
+ ```
120
+
121
+ ## Notes
122
+
123
+ - Generate the setup-token with `claude setup-token` and paste it, or run `milaidy models auth setup-token` on the gateway host.
124
+ - If you see “OAuth token refresh failed …” on a Claude subscription, re-auth with a setup-token. See [/gateway/troubleshooting#oauth-token-refresh-failed-anthropic-claude-subscription](/gateway/troubleshooting#oauth-token-refresh-failed-anthropic-claude-subscription).
125
+ - Auth details + reuse rules are in [/concepts/oauth](/concepts/oauth).
126
+
127
+ ## Troubleshooting
128
+
129
+ **401 errors / token suddenly invalid**
130
+
131
+ - Claude subscription auth can expire or be revoked. Re-run `claude setup-token`
132
+ and paste it into the **gateway host**.
133
+ - If the Claude CLI login lives on a different machine, use
134
+ `milaidy models auth paste-token --provider anthropic` on the gateway host.
135
+
136
+ **No API key found for provider "anthropic"**
137
+
138
+ - Auth is **per agent**. New agents don’t inherit the main agent’s keys.
139
+ - Re-run onboarding for that agent, or paste a setup-token / API key on the
140
+ gateway host, then verify with `milaidy models status`.
141
+
142
+ **No credentials found for profile `anthropic:default`**
143
+
144
+ - Run `milaidy models status` to see which auth profile is active.
145
+ - Re-run onboarding, or paste a setup-token / API key for that profile.
146
+
147
+ **No available auth profile (all in cooldown/unavailable)**
148
+
149
+ - Check `milaidy models status --json` for `auth.unusableProfiles`.
150
+ - Add another Anthropic profile or wait for cooldown.
151
+
152
+ More: [/gateway/troubleshooting](/gateway/troubleshooting) and [/help/faq](/help/faq).