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