miladyai 2.0.0-alpha.27

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 (241) hide show
  1. package/dist/_virtual/_rolldown/runtime.js +7 -0
  2. package/dist/actions/emote.js +64 -0
  3. package/dist/actions/restart.js +81 -0
  4. package/dist/actions/send-message.js +152 -0
  5. package/dist/agent-admin-routes.js +82 -0
  6. package/dist/agent-lifecycle-routes.js +79 -0
  7. package/dist/agent-transfer-routes.js +102 -0
  8. package/dist/api/agent-admin-routes.js +82 -0
  9. package/dist/api/agent-lifecycle-routes.js +79 -0
  10. package/dist/api/agent-transfer-routes.js +102 -0
  11. package/dist/api/apps-hyperscape-routes.js +58 -0
  12. package/dist/api/apps-routes.js +114 -0
  13. package/dist/api/auth-routes.js +56 -0
  14. package/dist/api/autonomy-routes.js +44 -0
  15. package/dist/api/bug-report-routes.js +111 -0
  16. package/dist/api/character-routes.js +195 -0
  17. package/dist/api/cloud-routes.js +330 -0
  18. package/dist/api/cloud-status-routes.js +155 -0
  19. package/dist/api/compat-utils.js +111 -0
  20. package/dist/api/database.js +735 -0
  21. package/dist/api/diagnostics-routes.js +205 -0
  22. package/dist/api/drop-service.js +134 -0
  23. package/dist/api/early-logs.js +86 -0
  24. package/dist/api/http-helpers.js +131 -0
  25. package/dist/api/knowledge-routes.js +534 -0
  26. package/dist/api/memory-bounds.js +71 -0
  27. package/dist/api/models-routes.js +28 -0
  28. package/dist/api/og-tracker.js +36 -0
  29. package/dist/api/permissions-routes.js +109 -0
  30. package/dist/api/plugin-validation.js +198 -0
  31. package/dist/api/provider-switch-config.js +41 -0
  32. package/dist/api/registry-routes.js +86 -0
  33. package/dist/api/registry-service.js +164 -0
  34. package/dist/api/sandbox-routes.js +1112 -0
  35. package/dist/api/server.js +7949 -0
  36. package/dist/api/subscription-routes.js +172 -0
  37. package/dist/api/terminal-run-limits.js +24 -0
  38. package/dist/api/training-routes.js +158 -0
  39. package/dist/api/trajectory-routes.js +300 -0
  40. package/dist/api/trigger-routes.js +246 -0
  41. package/dist/api/twitter-verify.js +134 -0
  42. package/dist/api/tx-service.js +108 -0
  43. package/dist/api/wallet-routes.js +266 -0
  44. package/dist/api/wallet.js +568 -0
  45. package/dist/api/whatsapp-routes.js +182 -0
  46. package/dist/api/zip-utils.js +109 -0
  47. package/dist/apps-hyperscape-routes.js +58 -0
  48. package/dist/apps-routes.js +114 -0
  49. package/dist/ascii.js +20 -0
  50. package/dist/auth/anthropic.js +44 -0
  51. package/dist/auth/apply-stealth.js +41 -0
  52. package/dist/auth/claude-code-stealth.js +78 -0
  53. package/dist/auth/credentials.js +156 -0
  54. package/dist/auth/index.js +5 -0
  55. package/dist/auth/openai-codex.js +66 -0
  56. package/dist/auth/types.js +9 -0
  57. package/dist/auth-routes.js +56 -0
  58. package/dist/autonomy-routes.js +44 -0
  59. package/dist/bug-report-routes.js +111 -0
  60. package/dist/build-info.json +6 -0
  61. package/dist/character-routes.js +195 -0
  62. package/dist/cli/argv.js +63 -0
  63. package/dist/cli/banner.js +34 -0
  64. package/dist/cli/cli-name.js +21 -0
  65. package/dist/cli/cli-utils.js +16 -0
  66. package/dist/cli/git-commit.js +78 -0
  67. package/dist/cli/parse-duration.js +15 -0
  68. package/dist/cli/plugins-cli.js +590 -0
  69. package/dist/cli/profile-utils.js +9 -0
  70. package/dist/cli/profile.js +95 -0
  71. package/dist/cli/program/build-program.js +17 -0
  72. package/dist/cli/program/command-registry.js +23 -0
  73. package/dist/cli/program/help.js +47 -0
  74. package/dist/cli/program/preaction.js +33 -0
  75. package/dist/cli/program/register.config.js +106 -0
  76. package/dist/cli/program/register.configure.js +20 -0
  77. package/dist/cli/program/register.dashboard.js +124 -0
  78. package/dist/cli/program/register.models.js +23 -0
  79. package/dist/cli/program/register.setup.js +36 -0
  80. package/dist/cli/program/register.start.js +22 -0
  81. package/dist/cli/program/register.subclis.js +70 -0
  82. package/dist/cli/program/register.tui.js +163 -0
  83. package/dist/cli/program/register.update.js +154 -0
  84. package/dist/cli/program.js +3 -0
  85. package/dist/cli/run-main.js +37 -0
  86. package/dist/cli/version.js +7 -0
  87. package/dist/cloud/validate-url.js +93 -0
  88. package/dist/cloud-routes.js +330 -0
  89. package/dist/cloud-status-routes.js +155 -0
  90. package/dist/compat-utils.js +111 -0
  91. package/dist/config/config.js +69 -0
  92. package/dist/config/env-vars.js +19 -0
  93. package/dist/config/includes.js +121 -0
  94. package/dist/config/object-utils.js +7 -0
  95. package/dist/config/paths.js +38 -0
  96. package/dist/config/plugin-auto-enable.js +231 -0
  97. package/dist/config/schema.js +864 -0
  98. package/dist/config/telegram-custom-commands.js +76 -0
  99. package/dist/config/zod-schema.agent-runtime.js +519 -0
  100. package/dist/config/zod-schema.core.js +538 -0
  101. package/dist/config/zod-schema.hooks.js +103 -0
  102. package/dist/config/zod-schema.js +488 -0
  103. package/dist/config/zod-schema.providers-core.js +785 -0
  104. package/dist/config/zod-schema.session.js +73 -0
  105. package/dist/core-plugins.js +37 -0
  106. package/dist/custom-actions.js +250 -0
  107. package/dist/database.js +735 -0
  108. package/dist/diagnostics/integration-observability.js +57 -0
  109. package/dist/diagnostics-routes.js +205 -0
  110. package/dist/drop-service.js +134 -0
  111. package/dist/early-logs.js +24 -0
  112. package/dist/eliza.js +2061 -0
  113. package/dist/emotes/catalog.js +271 -0
  114. package/dist/entry.js +40 -0
  115. package/dist/hooks/discovery.js +167 -0
  116. package/dist/hooks/eligibility.js +64 -0
  117. package/dist/hooks/index.js +4 -0
  118. package/dist/hooks/loader.js +147 -0
  119. package/dist/hooks/registry.js +55 -0
  120. package/dist/http-helpers.js +131 -0
  121. package/dist/index.js +49 -0
  122. package/dist/knowledge-routes.js +534 -0
  123. package/dist/memory-bounds.js +71 -0
  124. package/dist/milady-plugin.js +90 -0
  125. package/dist/models-routes.js +28 -0
  126. package/dist/onboarding-names.js +78 -0
  127. package/dist/onboarding-presets.js +922 -0
  128. package/dist/package.json +1 -0
  129. package/dist/permissions-routes.js +109 -0
  130. package/dist/plugin-validation.js +107 -0
  131. package/dist/plugins/whatsapp/actions.js +91 -0
  132. package/dist/plugins/whatsapp/index.js +16 -0
  133. package/dist/plugins/whatsapp/service.js +270 -0
  134. package/dist/provider-switch-config.js +41 -0
  135. package/dist/providers/admin-trust.js +46 -0
  136. package/dist/providers/autonomous-state.js +101 -0
  137. package/dist/providers/session-bridge.js +86 -0
  138. package/dist/providers/session-utils.js +36 -0
  139. package/dist/providers/simple-mode.js +50 -0
  140. package/dist/providers/ui-catalog.js +15 -0
  141. package/dist/providers/workspace-provider.js +93 -0
  142. package/dist/providers/workspace.js +348 -0
  143. package/dist/registry-routes.js +86 -0
  144. package/dist/registry-service.js +164 -0
  145. package/dist/restart.js +40 -0
  146. package/dist/runtime/core-plugins.js +37 -0
  147. package/dist/runtime/custom-actions.js +250 -0
  148. package/dist/runtime/eliza.js +2061 -0
  149. package/dist/runtime/embedding-manager-support.js +185 -0
  150. package/dist/runtime/embedding-manager.js +193 -0
  151. package/dist/runtime/embedding-presets.js +54 -0
  152. package/dist/runtime/embedding-state.js +8 -0
  153. package/dist/runtime/milady-plugin.js +90 -0
  154. package/dist/runtime/onboarding-names.js +78 -0
  155. package/dist/runtime/restart.js +40 -0
  156. package/dist/runtime/version.js +7 -0
  157. package/dist/sandbox-routes.js +1112 -0
  158. package/dist/security/audit-log.js +149 -0
  159. package/dist/security/network-policy.js +70 -0
  160. package/dist/server.js +7949 -0
  161. package/dist/services/agent-export.js +559 -0
  162. package/dist/services/app-manager.js +389 -0
  163. package/dist/services/browser-capture.js +86 -0
  164. package/dist/services/fallback-training-service.js +128 -0
  165. package/dist/services/mcp-marketplace.js +134 -0
  166. package/dist/services/plugin-installer.js +396 -0
  167. package/dist/services/plugin-manager-types.js +15 -0
  168. package/dist/services/registry-client-app-meta.js +144 -0
  169. package/dist/services/registry-client-endpoints.js +166 -0
  170. package/dist/services/registry-client-local.js +271 -0
  171. package/dist/services/registry-client-network.js +93 -0
  172. package/dist/services/registry-client-queries.js +70 -0
  173. package/dist/services/registry-client.js +157 -0
  174. package/dist/services/sandbox-engine.js +511 -0
  175. package/dist/services/sandbox-manager.js +297 -0
  176. package/dist/services/self-updater.js +175 -0
  177. package/dist/services/skill-catalog-client.js +119 -0
  178. package/dist/services/skill-marketplace.js +521 -0
  179. package/dist/services/stream-manager.js +236 -0
  180. package/dist/services/update-checker.js +121 -0
  181. package/dist/services/update-notifier.js +29 -0
  182. package/dist/services/version-compat.js +78 -0
  183. package/dist/services/whatsapp-pairing.js +196 -0
  184. package/dist/shared/ui-catalog-prompt.js +728 -0
  185. package/dist/subscription-routes.js +172 -0
  186. package/dist/terminal/links.js +19 -0
  187. package/dist/terminal/palette.js +14 -0
  188. package/dist/terminal/theme.js +25 -0
  189. package/dist/terminal-run-limits.js +24 -0
  190. package/dist/training-routes.js +158 -0
  191. package/dist/trajectory-routes.js +300 -0
  192. package/dist/trigger-routes.js +246 -0
  193. package/dist/triggers/action.js +218 -0
  194. package/dist/triggers/runtime.js +281 -0
  195. package/dist/triggers/scheduling.js +295 -0
  196. package/dist/triggers/types.js +5 -0
  197. package/dist/tui/components/assistant-message.js +76 -0
  198. package/dist/tui/components/chat-editor.js +34 -0
  199. package/dist/tui/components/embeddings-overlay.js +46 -0
  200. package/dist/tui/components/footer.js +60 -0
  201. package/dist/tui/components/index.js +15 -0
  202. package/dist/tui/components/modal-frame.js +45 -0
  203. package/dist/tui/components/modal-style.js +15 -0
  204. package/dist/tui/components/model-selector.js +70 -0
  205. package/dist/tui/components/pinned-chat-layout.js +46 -0
  206. package/dist/tui/components/plugins-endpoints-tab.js +196 -0
  207. package/dist/tui/components/plugins-installed-tab-view.js +69 -0
  208. package/dist/tui/components/plugins-installed-tab.js +319 -0
  209. package/dist/tui/components/plugins-overlay-catalog.js +81 -0
  210. package/dist/tui/components/plugins-overlay-data-api.js +21 -0
  211. package/dist/tui/components/plugins-overlay-data-shared.js +20 -0
  212. package/dist/tui/components/plugins-overlay-data.js +323 -0
  213. package/dist/tui/components/plugins-overlay.js +117 -0
  214. package/dist/tui/components/plugins-store-tab.js +148 -0
  215. package/dist/tui/components/settings-overlay.js +61 -0
  216. package/dist/tui/components/status-bar.js +64 -0
  217. package/dist/tui/components/tool-execution.js +68 -0
  218. package/dist/tui/components/user-message.js +22 -0
  219. package/dist/tui/eliza-tui-bridge.js +606 -0
  220. package/dist/tui/index.js +370 -0
  221. package/dist/tui/modal-presets.js +33 -0
  222. package/dist/tui/model-spec.js +46 -0
  223. package/dist/tui/sse-parser.js +78 -0
  224. package/dist/tui/theme.js +110 -0
  225. package/dist/tui/titlebar-spinner.js +62 -0
  226. package/dist/tui/tui-app.js +311 -0
  227. package/dist/tui/ws-client.js +215 -0
  228. package/dist/twitter-verify.js +134 -0
  229. package/dist/tx-service.js +108 -0
  230. package/dist/utils/exec-safety.js +17 -0
  231. package/dist/utils/globals.js +20 -0
  232. package/dist/utils/milady-root.js +61 -0
  233. package/dist/utils/number-parsing.js +37 -0
  234. package/dist/version-resolver.js +37 -0
  235. package/dist/version.js +7 -0
  236. package/dist/wallet-routes.js +266 -0
  237. package/dist/wallet.js +568 -0
  238. package/dist/whatsapp-routes.js +182 -0
  239. package/dist/zip-utils.js +109 -0
  240. package/milady.mjs +14 -0
  241. package/package.json +111 -0
@@ -0,0 +1,121 @@
1
+ import { isPlainObject } from "./object-utils.js";
2
+ import path from "node:path";
3
+ import fs from "node:fs";
4
+ import JSON5 from "json5";
5
+
6
+ //#region src/config/includes.ts
7
+ /**
8
+ * $include directive for modular configs.
9
+ *
10
+ * ```json5
11
+ * { "$include": "./base.json5" }
12
+ * { "$include": ["./a.json5", "./b.json5"] }
13
+ * ```
14
+ */
15
+ const INCLUDE_KEY = "$include";
16
+ const MAX_INCLUDE_DEPTH = 10;
17
+ const BLOCKED_KEYS = new Set([
18
+ "__proto__",
19
+ "constructor",
20
+ "prototype"
21
+ ]);
22
+ var ConfigIncludeError = class extends Error {
23
+ constructor(message, includePath, cause) {
24
+ super(message);
25
+ this.includePath = includePath;
26
+ this.cause = cause;
27
+ this.name = "ConfigIncludeError";
28
+ }
29
+ };
30
+ var CircularIncludeError = class extends ConfigIncludeError {
31
+ constructor(chain) {
32
+ super(`Circular include detected: ${chain.join(" -> ")}`, chain[chain.length - 1]);
33
+ this.chain = chain;
34
+ this.name = "CircularIncludeError";
35
+ }
36
+ };
37
+ function deepMerge(target, source) {
38
+ if (Array.isArray(target) && Array.isArray(source)) return [...target, ...source];
39
+ if (isPlainObject(target) && isPlainObject(source)) {
40
+ const result = { ...target };
41
+ for (const key of Object.keys(source)) {
42
+ if (BLOCKED_KEYS.has(key)) continue;
43
+ result[key] = key in result ? deepMerge(result[key], source[key]) : source[key];
44
+ }
45
+ return result;
46
+ }
47
+ return source;
48
+ }
49
+ var IncludeProcessor = class IncludeProcessor {
50
+ constructor(basePath, resolver) {
51
+ this.basePath = basePath;
52
+ this.resolver = resolver;
53
+ this.visited = /* @__PURE__ */ new Set();
54
+ this.depth = 0;
55
+ this.visited.add(path.normalize(basePath));
56
+ }
57
+ process(obj) {
58
+ if (Array.isArray(obj)) return obj.map((item) => this.process(item));
59
+ if (!isPlainObject(obj)) return obj;
60
+ if (!(INCLUDE_KEY in obj)) return this.processObject(obj);
61
+ return this.processInclude(obj);
62
+ }
63
+ processObject(obj) {
64
+ const result = {};
65
+ for (const [key, value] of Object.entries(obj)) {
66
+ if (BLOCKED_KEYS.has(key)) continue;
67
+ result[key] = this.process(value);
68
+ }
69
+ return result;
70
+ }
71
+ processInclude(obj) {
72
+ const includeValue = obj[INCLUDE_KEY];
73
+ const otherKeys = Object.keys(obj).filter((k) => k !== INCLUDE_KEY);
74
+ const included = this.resolveInclude(includeValue);
75
+ if (otherKeys.length === 0) return included;
76
+ if (!isPlainObject(included)) throw new ConfigIncludeError("Sibling keys require included content to be an object", typeof includeValue === "string" ? includeValue : INCLUDE_KEY);
77
+ const rest = {};
78
+ for (const key of otherKeys) rest[key] = this.process(obj[key]);
79
+ return deepMerge(included, rest);
80
+ }
81
+ resolveInclude(value) {
82
+ if (typeof value === "string") return this.loadFile(value);
83
+ if (Array.isArray(value)) return value.reduce((merged, item) => {
84
+ if (typeof item !== "string") throw new ConfigIncludeError(`Invalid $include array item: expected string, got ${typeof item}`, String(item));
85
+ return deepMerge(merged, this.loadFile(item));
86
+ }, {});
87
+ throw new ConfigIncludeError(`Invalid $include value: expected string or array of strings, got ${typeof value}`, String(value));
88
+ }
89
+ loadFile(includePath) {
90
+ const resolvedPath = path.isAbsolute(includePath) ? includePath : path.resolve(path.dirname(this.basePath), includePath);
91
+ const normalized = path.normalize(resolvedPath);
92
+ if (this.visited.has(normalized)) throw new CircularIncludeError([...this.visited, normalized]);
93
+ if (this.depth >= MAX_INCLUDE_DEPTH) throw new ConfigIncludeError(`Maximum include depth (${MAX_INCLUDE_DEPTH}) exceeded at: ${includePath}`, includePath);
94
+ let raw;
95
+ try {
96
+ raw = this.resolver.readFile(normalized);
97
+ } catch (err) {
98
+ throw new ConfigIncludeError(`Failed to read include file: ${includePath} (resolved: ${normalized})`, includePath, err instanceof Error ? err : void 0);
99
+ }
100
+ let parsed;
101
+ try {
102
+ parsed = this.resolver.parseJson(raw);
103
+ } catch (err) {
104
+ throw new ConfigIncludeError(`Failed to parse include file: ${includePath} (resolved: ${normalized})`, includePath, err instanceof Error ? err : void 0);
105
+ }
106
+ const nested = new IncludeProcessor(normalized, this.resolver);
107
+ nested.visited = new Set([...this.visited, normalized]);
108
+ nested.depth = this.depth + 1;
109
+ return nested.process(parsed);
110
+ }
111
+ };
112
+ const defaultResolver = {
113
+ readFile: (p) => fs.readFileSync(p, "utf-8"),
114
+ parseJson: (raw) => JSON5.parse(raw)
115
+ };
116
+ function resolveConfigIncludes(obj, configPath, resolver = defaultResolver) {
117
+ return new IncludeProcessor(configPath, resolver).process(obj);
118
+ }
119
+
120
+ //#endregion
121
+ export { resolveConfigIncludes };
@@ -0,0 +1,7 @@
1
+ //#region src/config/object-utils.ts
2
+ function isPlainObject(value) {
3
+ return typeof value === "object" && value !== null && !Array.isArray(value) && Object.prototype.toString.call(value) === "[object Object]";
4
+ }
5
+
6
+ //#endregion
7
+ export { isPlainObject };
@@ -0,0 +1,38 @@
1
+ import os from "node:os";
2
+ import path from "node:path";
3
+
4
+ //#region src/config/paths.ts
5
+ const STATE_DIRNAME = ".milady";
6
+ const CONFIG_FILENAME = "milady.json";
7
+ function stateDir(homedir = os.homedir) {
8
+ return path.join(homedir(), STATE_DIRNAME);
9
+ }
10
+ function resolveUserPath(input) {
11
+ const trimmed = input.trim();
12
+ if (!trimmed) return trimmed;
13
+ if (trimmed.startsWith("~")) {
14
+ const expanded = trimmed.replace(/^~(?=$|[\\/])/, os.homedir());
15
+ return path.resolve(expanded);
16
+ }
17
+ return path.resolve(trimmed);
18
+ }
19
+ function resolveStateDir(env = process.env, homedir = os.homedir) {
20
+ const override = env.MILADY_STATE_DIR?.trim();
21
+ if (override) return resolveUserPath(override);
22
+ return stateDir(homedir);
23
+ }
24
+ function resolveConfigPath(env = process.env, stateDirPath = resolveStateDir(env, os.homedir)) {
25
+ const override = env.MILADY_CONFIG_PATH?.trim();
26
+ if (override) return resolveUserPath(override);
27
+ return path.join(stateDirPath, CONFIG_FILENAME);
28
+ }
29
+ /**
30
+ * Directory for per-provider model cache files.
31
+ * Each provider gets its own file: `~/.milady/models/<providerId>.json`
32
+ */
33
+ function resolveModelsCacheDir(env = process.env, stateDirPath = resolveStateDir(env, os.homedir)) {
34
+ return path.join(stateDirPath, "models");
35
+ }
36
+
37
+ //#endregion
38
+ export { resolveConfigPath, resolveModelsCacheDir, resolveStateDir, resolveUserPath };
@@ -0,0 +1,231 @@
1
+ import { SUBSCRIPTION_PROVIDER_MAP } from "../auth/types.js";
2
+
3
+ //#region src/config/plugin-auto-enable.ts
4
+ const CONNECTOR_PLUGINS = {
5
+ telegram: "@elizaos/plugin-telegram",
6
+ discord: "@elizaos/plugin-discord",
7
+ slack: "@elizaos/plugin-slack",
8
+ twitter: "@elizaos/plugin-twitter",
9
+ whatsapp: "@milady/plugin-whatsapp",
10
+ signal: "@elizaos/plugin-signal",
11
+ bluebubbles: "@elizaos/plugin-bluebubbles",
12
+ imessage: "@elizaos/plugin-imessage",
13
+ farcaster: "@elizaos/plugin-farcaster",
14
+ lens: "@elizaos/plugin-lens",
15
+ msteams: "@elizaos/plugin-msteams",
16
+ mattermost: "@elizaos/plugin-mattermost",
17
+ googlechat: "@elizaos/plugin-google-chat",
18
+ feishu: "@elizaos/plugin-feishu",
19
+ matrix: "@elizaos/plugin-matrix",
20
+ nostr: "@elizaos/plugin-nostr",
21
+ retake: "@milady/plugin-retake"
22
+ };
23
+ const PROVIDER_PLUGINS = {
24
+ "google-antigravity": "@elizaos/plugin-google-antigravity",
25
+ "google-gemini": "@elizaos/plugin-google-gemini",
26
+ "vercel-ai-gateway": "@elizaos/plugin-vercel-ai-gateway",
27
+ openai: "@elizaos/plugin-openai",
28
+ anthropic: "@elizaos/plugin-anthropic",
29
+ "pi-ai": "@elizaos/plugin-pi-ai",
30
+ qwen: "@elizaos/plugin-qwen",
31
+ minimax: "@elizaos/plugin-minimax",
32
+ groq: "@elizaos/plugin-groq",
33
+ xai: "@elizaos/plugin-xai",
34
+ openrouter: "@elizaos/plugin-openrouter",
35
+ ollama: "@elizaos/plugin-ollama",
36
+ zai: "@homunculuslabs/plugin-zai",
37
+ deepseek: "@elizaos/plugin-deepseek",
38
+ together: "@elizaos/plugin-together",
39
+ mistral: "@elizaos/plugin-mistral",
40
+ cohere: "@elizaos/plugin-cohere",
41
+ perplexity: "@elizaos/plugin-perplexity"
42
+ };
43
+ const AUTH_PROVIDER_PLUGINS = {
44
+ ANTHROPIC_API_KEY: "@elizaos/plugin-anthropic",
45
+ CLAUDE_API_KEY: "@elizaos/plugin-anthropic",
46
+ OPENAI_API_KEY: "@elizaos/plugin-openai",
47
+ AI_GATEWAY_API_KEY: "@elizaos/plugin-vercel-ai-gateway",
48
+ AIGATEWAY_API_KEY: "@elizaos/plugin-vercel-ai-gateway",
49
+ GOOGLE_API_KEY: "@elizaos/plugin-google-gemini",
50
+ GOOGLE_GENERATIVE_AI_API_KEY: "@elizaos/plugin-google-gemini",
51
+ GOOGLE_CLOUD_API_KEY: "@elizaos/plugin-google-antigravity",
52
+ GROQ_API_KEY: "@elizaos/plugin-groq",
53
+ XAI_API_KEY: "@elizaos/plugin-xai",
54
+ GROK_API_KEY: "@elizaos/plugin-xai",
55
+ OPENROUTER_API_KEY: "@elizaos/plugin-openrouter",
56
+ OLLAMA_BASE_URL: "@elizaos/plugin-ollama",
57
+ ZAI_API_KEY: "@homunculuslabs/plugin-zai",
58
+ DEEPSEEK_API_KEY: "@elizaos/plugin-deepseek",
59
+ TOGETHER_API_KEY: "@elizaos/plugin-together",
60
+ MISTRAL_API_KEY: "@elizaos/plugin-mistral",
61
+ COHERE_API_KEY: "@elizaos/plugin-cohere",
62
+ PERPLEXITY_API_KEY: "@elizaos/plugin-perplexity",
63
+ ELIZAOS_CLOUD_API_KEY: "@elizaos/plugin-elizacloud",
64
+ ELIZAOS_CLOUD_ENABLED: "@elizaos/plugin-elizacloud",
65
+ MILAIDY_USE_PI_AI: "@elizaos/plugin-pi-ai",
66
+ CUA_API_KEY: "@elizaos/plugin-cua",
67
+ CUA_HOST: "@elizaos/plugin-cua",
68
+ OBSIDIAN_VAULT_PATH: "@elizaos/plugin-obsidian",
69
+ OBSIDAN_VAULT_PATH: "@elizaos/plugin-obsidian",
70
+ REPOPROMPT_CLI_PATH: "@elizaos/plugin-repoprompt",
71
+ CLAUDE_CODE_WORKBENCH_ENABLED: "@milaidy/plugin-claude-code-workbench"
72
+ };
73
+ const FEATURE_PLUGINS = {
74
+ browser: "@elizaos/plugin-browser",
75
+ cua: "@elizaos/plugin-cua",
76
+ obsidian: "@elizaos/plugin-obsidian",
77
+ cron: "@elizaos/plugin-cron",
78
+ shell: "@elizaos/plugin-shell",
79
+ imageGen: "@elizaos/plugin-image-generation",
80
+ tts: "@elizaos/plugin-tts",
81
+ stt: "@elizaos/plugin-stt",
82
+ agentSkills: "@elizaos/plugin-agent-skills",
83
+ directives: "@elizaos/plugin-directives",
84
+ commands: "@elizaos/plugin-commands",
85
+ diagnosticsOtel: "@elizaos/plugin-diagnostics-otel",
86
+ webhooks: "@elizaos/plugin-webhooks",
87
+ gmailWatch: "@elizaos/plugin-gmail-watch",
88
+ personality: "@elizaos/plugin-personality",
89
+ experience: "@elizaos/plugin-experience",
90
+ form: "@elizaos/plugin-form",
91
+ x402: "@elizaos/plugin-x402",
92
+ fal: "@elizaos/plugin-fal",
93
+ suno: "@elizaos/plugin-suno",
94
+ vision: "@elizaos/plugin-vision",
95
+ computeruse: "@elizaos/plugin-computeruse",
96
+ repoprompt: "@elizaos/plugin-repoprompt",
97
+ claudeCodeWorkbench: "@milaidy/plugin-claude-code-workbench"
98
+ };
99
+ function isConnectorConfigured(connectorName, connectorConfig) {
100
+ if (!connectorConfig || typeof connectorConfig !== "object") return false;
101
+ const config = connectorConfig;
102
+ if (config.enabled === false) return false;
103
+ if (config.botToken || config.token || config.apiKey) return true;
104
+ if (connectorName === "signal" && typeof config.accounts === "object" && config.accounts !== null && Object.values(config.accounts).some((account) => {
105
+ if (!account || typeof account !== "object") return false;
106
+ const accountConfig = account;
107
+ if (accountConfig.enabled === false) return false;
108
+ return Boolean(accountConfig.account || accountConfig.httpUrl || accountConfig.httpHost || accountConfig.httpPort || accountConfig.cliPath);
109
+ })) return true;
110
+ switch (connectorName) {
111
+ case "bluebubbles": return Boolean(config.serverUrl && config.password);
112
+ case "imessage": return Boolean(config.cliPath);
113
+ case "signal": return Boolean(config.account || config.httpUrl || config.httpHost || config.httpPort || config.cliPath);
114
+ case "whatsapp": return Boolean(config.authState || config.sessionPath || config.authDir || config.accounts && typeof config.accounts === "object" && Object.values(config.accounts).some((account) => {
115
+ if (!account || typeof account !== "object") return false;
116
+ const acc = account;
117
+ if (acc.enabled === false) return false;
118
+ return Boolean(acc.authDir);
119
+ }));
120
+ case "retake": return Boolean(config.accessToken || config.enabled === true);
121
+ default: return false;
122
+ }
123
+ }
124
+ function addToAllowlist(allow, pluginName, shortId, changes, reason) {
125
+ if (!allow.includes(pluginName) && !allow.includes(shortId)) {
126
+ allow.push(shortId);
127
+ changes.push(`Auto-enabled plugin: ${pluginName} (${reason})`);
128
+ }
129
+ }
130
+ /** Safely extract `agents.defaults.subscriptionProvider` from an untyped config. */
131
+ function getSubscriptionProvider(config) {
132
+ if (typeof config !== "object" || config === null) return void 0;
133
+ const agents = config.agents;
134
+ if (typeof agents !== "object" || agents === null) return void 0;
135
+ const defaults = agents.defaults;
136
+ if (typeof defaults !== "object" || defaults === null) return void 0;
137
+ const provider = defaults.subscriptionProvider;
138
+ return typeof provider === "string" ? provider : void 0;
139
+ }
140
+ function applyPluginAutoEnable(params) {
141
+ const { config, env } = params;
142
+ const changes = [];
143
+ const updatedConfig = structuredClone(config);
144
+ if (updatedConfig.plugins?.enabled === false) return {
145
+ config: updatedConfig,
146
+ changes
147
+ };
148
+ updatedConfig.plugins = updatedConfig.plugins ?? {};
149
+ const pluginsConfig = updatedConfig.plugins;
150
+ pluginsConfig.allow = pluginsConfig.allow ?? [];
151
+ pluginsConfig.entries = pluginsConfig.entries ?? {};
152
+ const connectors = updatedConfig.connectors ?? updatedConfig.channels;
153
+ if (connectors) for (const [connectorName, connectorConfig] of Object.entries(connectors)) {
154
+ const pluginName = CONNECTOR_PLUGINS[connectorName];
155
+ if (!pluginName) continue;
156
+ if (!isConnectorConfigured(connectorName, connectorConfig)) continue;
157
+ if (pluginsConfig.entries[connectorName]?.enabled === false) continue;
158
+ addToAllowlist(pluginsConfig.allow, pluginName, connectorName, changes, `connector: ${connectorName}`);
159
+ }
160
+ if (updatedConfig.auth?.profiles) for (const [profileKey, profile] of Object.entries(updatedConfig.auth.profiles)) {
161
+ const provider = profile.provider;
162
+ if (!provider) continue;
163
+ const pluginName = PROVIDER_PLUGINS[provider];
164
+ if (!pluginName) continue;
165
+ addToAllowlist(pluginsConfig.allow, pluginName, provider, changes, `auth profile: ${profileKey}`);
166
+ }
167
+ const subscriptionProvider = getSubscriptionProvider(updatedConfig);
168
+ const subscriptionPluginId = typeof subscriptionProvider === "string" ? SUBSCRIPTION_PROVIDER_MAP[subscriptionProvider] : void 0;
169
+ if (subscriptionPluginId) {
170
+ const pluginName = PROVIDER_PLUGINS[subscriptionPluginId];
171
+ if (pluginName) {
172
+ pluginsConfig.entries[subscriptionPluginId] = {
173
+ ...pluginsConfig.entries[subscriptionPluginId],
174
+ enabled: true
175
+ };
176
+ addToAllowlist(pluginsConfig.allow, pluginName, subscriptionPluginId, changes, `subscription: ${subscriptionProvider}`);
177
+ }
178
+ }
179
+ for (const [envKey, pluginName] of Object.entries(AUTH_PROVIDER_PLUGINS)) {
180
+ const envValue = env[envKey];
181
+ if (!envValue || typeof envValue !== "string" || envValue.trim() === "") continue;
182
+ const pluginId = pluginName.includes("/plugin-") ? pluginName.slice(pluginName.lastIndexOf("/plugin-") + 8) : pluginName;
183
+ if (pluginsConfig.entries[pluginId]?.enabled === false) continue;
184
+ addToAllowlist(pluginsConfig.allow, pluginName, pluginId, changes, `env: ${envKey}`);
185
+ }
186
+ if (updatedConfig.features) for (const [featureName, featureConfig] of Object.entries(updatedConfig.features)) {
187
+ const pluginName = FEATURE_PLUGINS[featureName];
188
+ if (!pluginName) continue;
189
+ if (!(featureConfig === true || typeof featureConfig === "object" && featureConfig !== null && featureConfig.enabled !== false)) continue;
190
+ const pluginId = pluginName.includes("/plugin-") ? pluginName.slice(pluginName.lastIndexOf("/plugin-") + 8) : pluginName;
191
+ if (pluginsConfig.entries[pluginId]?.enabled === false) continue;
192
+ addToAllowlist(pluginsConfig.allow, pluginName, pluginId, changes, `feature: ${featureName}`);
193
+ }
194
+ const hooksConfig = updatedConfig.hooks;
195
+ if (hooksConfig && hooksConfig.enabled !== false && hooksConfig.token) {
196
+ const webhooksPlugin = FEATURE_PLUGINS.webhooks;
197
+ if (webhooksPlugin) addToAllowlist(pluginsConfig.allow, webhooksPlugin, webhooksPlugin.replace("@elizaos/plugin-", ""), changes, "hooks.token");
198
+ }
199
+ if (hooksConfig) {
200
+ if (hooksConfig.gmail?.account?.trim()) {
201
+ const gmailPlugin = FEATURE_PLUGINS.gmailWatch;
202
+ if (gmailPlugin) addToAllowlist(pluginsConfig.allow, gmailPlugin, gmailPlugin.replace("@elizaos/plugin-", ""), changes, "hooks.gmail.account");
203
+ }
204
+ }
205
+ const mediaConfig = updatedConfig.media;
206
+ if (mediaConfig) {
207
+ if (mediaConfig.image?.enabled !== false && mediaConfig.image?.mode === "own-key" && mediaConfig.image?.provider === "fal") {
208
+ const falPlugin = FEATURE_PLUGINS.fal;
209
+ if (falPlugin) addToAllowlist(pluginsConfig.allow, falPlugin, "fal", changes, "media.image.provider=fal");
210
+ }
211
+ if (mediaConfig.video?.enabled !== false && mediaConfig.video?.mode === "own-key" && mediaConfig.video?.provider === "fal") {
212
+ const falPlugin = FEATURE_PLUGINS.fal;
213
+ if (falPlugin) addToAllowlist(pluginsConfig.allow, falPlugin, "fal", changes, "media.video.provider=fal");
214
+ }
215
+ if (mediaConfig.audio?.enabled !== false && mediaConfig.audio?.mode === "own-key" && mediaConfig.audio?.provider === "suno") {
216
+ const sunoPlugin = FEATURE_PLUGINS.suno;
217
+ if (sunoPlugin) addToAllowlist(pluginsConfig.allow, sunoPlugin, "suno", changes, "media.audio.provider=suno");
218
+ }
219
+ if (mediaConfig.vision?.enabled !== false && mediaConfig.vision?.provider) {
220
+ const visionPlugin = FEATURE_PLUGINS.vision;
221
+ if (visionPlugin) addToAllowlist(pluginsConfig.allow, visionPlugin, "vision", changes, `media.vision.provider=${mediaConfig.vision.provider}`);
222
+ }
223
+ }
224
+ return {
225
+ config: updatedConfig,
226
+ changes
227
+ };
228
+ }
229
+
230
+ //#endregion
231
+ export { applyPluginAutoEnable };