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,538 @@
1
+ import { isSafeExecutableValue } from "../utils/exec-safety.js";
2
+ import { z } from "zod";
3
+
4
+ //#region src/config/zod-schema.core.ts
5
+ const ModelApiSchema = z.union([
6
+ z.literal("openai-completions"),
7
+ z.literal("openai-responses"),
8
+ z.literal("anthropic-messages"),
9
+ z.literal("google-generative-ai"),
10
+ z.literal("bedrock-converse-stream")
11
+ ]);
12
+ const ModelCompatSchema = z.object({
13
+ supportsStore: z.boolean().optional(),
14
+ supportsDeveloperRole: z.boolean().optional(),
15
+ supportsReasoningEffort: z.boolean().optional(),
16
+ maxTokensField: z.union([z.literal("max_completion_tokens"), z.literal("max_tokens")]).optional()
17
+ }).strict().optional();
18
+ const ModelDefinitionSchema = z.object({
19
+ id: z.string().min(1),
20
+ name: z.string().min(1),
21
+ api: ModelApiSchema.optional(),
22
+ reasoning: z.boolean().optional(),
23
+ input: z.array(z.union([z.literal("text"), z.literal("image")])).optional(),
24
+ cost: z.object({
25
+ input: z.number().optional(),
26
+ output: z.number().optional(),
27
+ cacheRead: z.number().optional(),
28
+ cacheWrite: z.number().optional()
29
+ }).strict().optional(),
30
+ contextWindow: z.number().positive().optional(),
31
+ maxTokens: z.number().positive().optional(),
32
+ headers: z.record(z.string(), z.string()).optional(),
33
+ compat: ModelCompatSchema
34
+ }).strict();
35
+ const ModelProviderSchema = z.object({
36
+ baseUrl: z.string().min(1),
37
+ apiKey: z.string().optional(),
38
+ auth: z.union([
39
+ z.literal("api-key"),
40
+ z.literal("aws-sdk"),
41
+ z.literal("oauth"),
42
+ z.literal("token")
43
+ ]).optional(),
44
+ api: ModelApiSchema.optional(),
45
+ headers: z.record(z.string(), z.string()).optional(),
46
+ authHeader: z.boolean().optional(),
47
+ models: z.array(ModelDefinitionSchema)
48
+ }).strict();
49
+ const BedrockDiscoverySchema = z.object({
50
+ enabled: z.boolean().optional(),
51
+ region: z.string().optional(),
52
+ providerFilter: z.array(z.string()).optional(),
53
+ refreshInterval: z.number().int().nonnegative().optional(),
54
+ defaultContextWindow: z.number().int().positive().optional(),
55
+ defaultMaxTokens: z.number().int().positive().optional()
56
+ }).strict().optional();
57
+ const ModelsConfigSchema = z.object({
58
+ mode: z.union([z.literal("merge"), z.literal("replace")]).optional(),
59
+ providers: z.record(z.string(), ModelProviderSchema).optional(),
60
+ bedrockDiscovery: BedrockDiscoverySchema
61
+ }).strict().optional();
62
+ const GroupChatSchema = z.object({
63
+ mentionPatterns: z.array(z.string()).optional(),
64
+ historyLimit: z.number().int().positive().optional()
65
+ }).strict().optional();
66
+ const DmConfigSchema = z.object({ historyLimit: z.number().int().min(0).optional() }).strict();
67
+ const IdentitySchema = z.object({
68
+ name: z.string().optional(),
69
+ theme: z.string().optional(),
70
+ emoji: z.string().optional(),
71
+ avatar: z.string().optional()
72
+ }).strict().optional();
73
+ const QueueModeSchema = z.union([
74
+ z.literal("steer"),
75
+ z.literal("followup"),
76
+ z.literal("collect"),
77
+ z.literal("steer-backlog"),
78
+ z.literal("steer+backlog"),
79
+ z.literal("queue"),
80
+ z.literal("interrupt")
81
+ ]);
82
+ const QueueDropSchema = z.union([
83
+ z.literal("old"),
84
+ z.literal("new"),
85
+ z.literal("summarize")
86
+ ]);
87
+ const ReplyToModeSchema = z.union([
88
+ z.literal("off"),
89
+ z.literal("first"),
90
+ z.literal("all")
91
+ ]);
92
+ const GroupPolicySchema = z.enum([
93
+ "open",
94
+ "disabled",
95
+ "allowlist"
96
+ ]);
97
+ const DmPolicySchema = z.enum([
98
+ "pairing",
99
+ "allowlist",
100
+ "open",
101
+ "disabled"
102
+ ]);
103
+ const BlockStreamingCoalesceSchema = z.object({
104
+ minChars: z.number().int().positive().optional(),
105
+ maxChars: z.number().int().positive().optional(),
106
+ idleMs: z.number().int().nonnegative().optional()
107
+ }).strict();
108
+ const BlockStreamingChunkSchema = z.object({
109
+ minChars: z.number().int().positive().optional(),
110
+ maxChars: z.number().int().positive().optional(),
111
+ breakPreference: z.union([
112
+ z.literal("paragraph"),
113
+ z.literal("newline"),
114
+ z.literal("sentence")
115
+ ]).optional()
116
+ }).strict();
117
+ const MarkdownTableModeSchema = z.enum([
118
+ "off",
119
+ "bullets",
120
+ "code"
121
+ ]);
122
+ const MarkdownConfigSchema = z.object({ tables: MarkdownTableModeSchema.optional() }).strict().optional();
123
+ const TtsProviderSchema = z.enum([
124
+ "elevenlabs",
125
+ "openai",
126
+ "edge"
127
+ ]);
128
+ const TtsModeSchema = z.enum(["final", "all"]);
129
+ const TtsAutoSchema = z.enum([
130
+ "off",
131
+ "always",
132
+ "inbound",
133
+ "tagged"
134
+ ]);
135
+ const TtsConfigSchema = z.object({
136
+ auto: TtsAutoSchema.optional(),
137
+ enabled: z.boolean().optional(),
138
+ mode: TtsModeSchema.optional(),
139
+ provider: TtsProviderSchema.optional(),
140
+ summaryModel: z.string().optional(),
141
+ modelOverrides: z.object({
142
+ enabled: z.boolean().optional(),
143
+ allowText: z.boolean().optional(),
144
+ allowProvider: z.boolean().optional(),
145
+ allowVoice: z.boolean().optional(),
146
+ allowModelId: z.boolean().optional(),
147
+ allowVoiceSettings: z.boolean().optional(),
148
+ allowNormalization: z.boolean().optional(),
149
+ allowSeed: z.boolean().optional()
150
+ }).strict().optional(),
151
+ elevenlabs: z.object({
152
+ apiKey: z.string().optional(),
153
+ baseUrl: z.string().optional(),
154
+ voiceId: z.string().optional(),
155
+ modelId: z.string().optional(),
156
+ seed: z.number().int().min(0).max(4294967295).optional(),
157
+ applyTextNormalization: z.enum([
158
+ "auto",
159
+ "on",
160
+ "off"
161
+ ]).optional(),
162
+ languageCode: z.string().optional(),
163
+ voiceSettings: z.object({
164
+ stability: z.number().min(0).max(1).optional(),
165
+ similarityBoost: z.number().min(0).max(1).optional(),
166
+ style: z.number().min(0).max(1).optional(),
167
+ useSpeakerBoost: z.boolean().optional(),
168
+ speed: z.number().min(.5).max(2).optional()
169
+ }).strict().optional()
170
+ }).strict().optional(),
171
+ openai: z.object({
172
+ apiKey: z.string().optional(),
173
+ model: z.string().optional(),
174
+ voice: z.string().optional()
175
+ }).strict().optional(),
176
+ edge: z.object({
177
+ enabled: z.boolean().optional(),
178
+ voice: z.string().optional(),
179
+ lang: z.string().optional(),
180
+ outputFormat: z.string().optional(),
181
+ pitch: z.string().optional(),
182
+ rate: z.string().optional(),
183
+ volume: z.string().optional(),
184
+ saveSubtitles: z.boolean().optional(),
185
+ proxy: z.string().optional(),
186
+ timeoutMs: z.number().int().min(1e3).max(12e4).optional()
187
+ }).strict().optional(),
188
+ prefsPath: z.string().optional(),
189
+ maxTextLength: z.number().int().min(1).optional(),
190
+ timeoutMs: z.number().int().min(1e3).max(12e4).optional()
191
+ }).strict().optional();
192
+ const HumanDelaySchema = z.object({
193
+ mode: z.union([
194
+ z.literal("off"),
195
+ z.literal("natural"),
196
+ z.literal("custom")
197
+ ]).optional(),
198
+ minMs: z.number().int().nonnegative().optional(),
199
+ maxMs: z.number().int().nonnegative().optional()
200
+ }).strict();
201
+ const CliBackendSchema = z.object({
202
+ command: z.string(),
203
+ args: z.array(z.string()).optional(),
204
+ output: z.union([
205
+ z.literal("json"),
206
+ z.literal("text"),
207
+ z.literal("jsonl")
208
+ ]).optional(),
209
+ resumeOutput: z.union([
210
+ z.literal("json"),
211
+ z.literal("text"),
212
+ z.literal("jsonl")
213
+ ]).optional(),
214
+ input: z.union([z.literal("arg"), z.literal("stdin")]).optional(),
215
+ maxPromptArgChars: z.number().int().positive().optional(),
216
+ env: z.record(z.string(), z.string()).optional(),
217
+ clearEnv: z.array(z.string()).optional(),
218
+ modelArg: z.string().optional(),
219
+ modelAliases: z.record(z.string(), z.string()).optional(),
220
+ sessionArg: z.string().optional(),
221
+ sessionArgs: z.array(z.string()).optional(),
222
+ resumeArgs: z.array(z.string()).optional(),
223
+ sessionMode: z.union([
224
+ z.literal("always"),
225
+ z.literal("existing"),
226
+ z.literal("none")
227
+ ]).optional(),
228
+ sessionIdFields: z.array(z.string()).optional(),
229
+ systemPromptArg: z.string().optional(),
230
+ systemPromptMode: z.union([z.literal("append"), z.literal("replace")]).optional(),
231
+ systemPromptWhen: z.union([
232
+ z.literal("first"),
233
+ z.literal("always"),
234
+ z.literal("never")
235
+ ]).optional(),
236
+ imageArg: z.string().optional(),
237
+ imageMode: z.union([z.literal("repeat"), z.literal("list")]).optional(),
238
+ serialize: z.boolean().optional()
239
+ }).strict();
240
+ const normalizeAllowFrom = (values) => (values ?? []).map((v) => String(v).trim()).filter(Boolean);
241
+ const requireOpenAllowFrom = (params) => {
242
+ if (params.policy !== "open") return;
243
+ if (normalizeAllowFrom(params.allowFrom).includes("*")) return;
244
+ params.ctx.addIssue({
245
+ code: z.ZodIssueCode.custom,
246
+ path: params.path,
247
+ message: params.message
248
+ });
249
+ };
250
+ const MSTeamsReplyStyleSchema = z.enum(["thread", "top-level"]);
251
+ const RetryConfigSchema = z.object({
252
+ attempts: z.number().int().min(1).optional(),
253
+ minDelayMs: z.number().int().min(0).optional(),
254
+ maxDelayMs: z.number().int().min(0).optional(),
255
+ jitter: z.number().min(0).max(1).optional()
256
+ }).strict().optional();
257
+ const QueueModeBySurfaceSchema = z.object({
258
+ whatsapp: QueueModeSchema.optional(),
259
+ telegram: QueueModeSchema.optional(),
260
+ discord: QueueModeSchema.optional(),
261
+ slack: QueueModeSchema.optional(),
262
+ mattermost: QueueModeSchema.optional(),
263
+ signal: QueueModeSchema.optional(),
264
+ imessage: QueueModeSchema.optional(),
265
+ msteams: QueueModeSchema.optional(),
266
+ webchat: QueueModeSchema.optional()
267
+ }).strict().optional();
268
+ const DebounceMsBySurfaceSchema = z.record(z.string(), z.number().int().nonnegative()).optional();
269
+ const QueueSchema = z.object({
270
+ mode: QueueModeSchema.optional(),
271
+ byChannel: QueueModeBySurfaceSchema,
272
+ debounceMs: z.number().int().nonnegative().optional(),
273
+ debounceMsByChannel: DebounceMsBySurfaceSchema,
274
+ cap: z.number().int().positive().optional(),
275
+ drop: QueueDropSchema.optional()
276
+ }).strict().optional();
277
+ const InboundDebounceSchema = z.object({
278
+ debounceMs: z.number().int().nonnegative().optional(),
279
+ byChannel: DebounceMsBySurfaceSchema
280
+ }).strict().optional();
281
+ const TranscribeAudioSchema = z.object({
282
+ command: z.array(z.string()).superRefine((value, ctx) => {
283
+ const executable = value[0];
284
+ if (!isSafeExecutableValue(executable)) ctx.addIssue({
285
+ code: z.ZodIssueCode.custom,
286
+ path: [0],
287
+ message: "expected safe executable name or path"
288
+ });
289
+ }),
290
+ timeoutSeconds: z.number().int().positive().optional()
291
+ }).strict().optional();
292
+ const HexColorSchema = z.string().regex(/^#?[0-9a-fA-F]{6}$/, "expected hex color (RRGGBB)");
293
+ const ExecutableTokenSchema = z.string().refine(isSafeExecutableValue, "expected safe executable name or path");
294
+ const MessagePolicyMatchSchema = z.object({
295
+ channel: z.string().optional(),
296
+ chatType: z.union([
297
+ z.literal("direct"),
298
+ z.literal("group"),
299
+ z.literal("channel")
300
+ ]).optional(),
301
+ keyPrefix: z.string().optional()
302
+ }).strict().optional();
303
+ const MessagePolicySchemaBase = z.object({
304
+ default: z.union([z.literal("allow"), z.literal("deny")]).optional(),
305
+ rules: z.array(z.object({
306
+ action: z.union([z.literal("allow"), z.literal("deny")]),
307
+ match: MessagePolicyMatchSchema
308
+ }).strict()).optional()
309
+ }).strict().optional();
310
+ const MediaUnderstandingScopeSchema = MessagePolicySchemaBase;
311
+ const MessagePolicySchema = MessagePolicySchemaBase;
312
+ const MediaUnderstandingCapabilitiesSchema = z.array(z.union([
313
+ z.literal("image"),
314
+ z.literal("audio"),
315
+ z.literal("video")
316
+ ])).optional();
317
+ const MediaUnderstandingAttachmentsSchema = z.object({
318
+ mode: z.union([z.literal("first"), z.literal("all")]).optional(),
319
+ maxAttachments: z.number().int().positive().optional(),
320
+ prefer: z.union([
321
+ z.literal("first"),
322
+ z.literal("last"),
323
+ z.literal("path"),
324
+ z.literal("url")
325
+ ]).optional()
326
+ }).strict().optional();
327
+ const DeepgramAudioSchema = z.object({
328
+ detectLanguage: z.boolean().optional(),
329
+ punctuate: z.boolean().optional(),
330
+ smartFormat: z.boolean().optional()
331
+ }).strict().optional();
332
+ const ProviderOptionValueSchema = z.union([
333
+ z.string(),
334
+ z.number(),
335
+ z.boolean()
336
+ ]);
337
+ const ProviderOptionsSchema = z.record(z.string(), z.record(z.string(), ProviderOptionValueSchema)).optional();
338
+ const MediaUnderstandingModelSchema = z.object({
339
+ provider: z.string().optional(),
340
+ model: z.string().optional(),
341
+ capabilities: MediaUnderstandingCapabilitiesSchema,
342
+ type: z.union([z.literal("provider"), z.literal("cli")]).optional(),
343
+ command: z.string().optional(),
344
+ args: z.array(z.string()).optional(),
345
+ prompt: z.string().optional(),
346
+ maxChars: z.number().int().positive().optional(),
347
+ maxBytes: z.number().int().positive().optional(),
348
+ timeoutSeconds: z.number().int().positive().optional(),
349
+ language: z.string().optional(),
350
+ providerOptions: ProviderOptionsSchema,
351
+ deepgram: DeepgramAudioSchema,
352
+ baseUrl: z.string().optional(),
353
+ headers: z.record(z.string(), z.string()).optional(),
354
+ profile: z.string().optional(),
355
+ preferredProfile: z.string().optional()
356
+ }).strict().optional();
357
+ const ToolsMediaUnderstandingSchema = z.object({
358
+ enabled: z.boolean().optional(),
359
+ scope: MediaUnderstandingScopeSchema,
360
+ maxBytes: z.number().int().positive().optional(),
361
+ maxChars: z.number().int().positive().optional(),
362
+ prompt: z.string().optional(),
363
+ timeoutSeconds: z.number().int().positive().optional(),
364
+ language: z.string().optional(),
365
+ providerOptions: ProviderOptionsSchema,
366
+ deepgram: DeepgramAudioSchema,
367
+ baseUrl: z.string().optional(),
368
+ headers: z.record(z.string(), z.string()).optional(),
369
+ attachments: MediaUnderstandingAttachmentsSchema,
370
+ models: z.array(MediaUnderstandingModelSchema).optional()
371
+ }).strict().optional();
372
+ const ToolsMediaSchema = z.object({
373
+ models: z.array(MediaUnderstandingModelSchema).optional(),
374
+ concurrency: z.number().int().positive().optional(),
375
+ image: ToolsMediaUnderstandingSchema.optional(),
376
+ audio: ToolsMediaUnderstandingSchema.optional(),
377
+ video: ToolsMediaUnderstandingSchema.optional()
378
+ }).strict().optional();
379
+ const LinkModelSchema = z.object({
380
+ type: z.literal("cli").optional(),
381
+ command: z.string().min(1),
382
+ args: z.array(z.string()).optional(),
383
+ timeoutSeconds: z.number().int().positive().optional()
384
+ }).strict();
385
+ const ToolsLinksSchema = z.object({
386
+ enabled: z.boolean().optional(),
387
+ scope: MediaUnderstandingScopeSchema,
388
+ maxLinks: z.number().int().positive().optional(),
389
+ timeoutSeconds: z.number().int().positive().optional(),
390
+ models: z.array(LinkModelSchema).optional()
391
+ }).strict().optional();
392
+ const NativeCommandsSettingSchema = z.union([z.boolean(), z.literal("auto")]);
393
+ const ProviderCommandsSchema = z.object({
394
+ native: NativeCommandsSettingSchema.optional(),
395
+ nativeSkills: NativeCommandsSettingSchema.optional()
396
+ }).strict().optional();
397
+ const ChannelHeartbeatVisibilitySchema = z.object({
398
+ showOk: z.boolean().optional(),
399
+ showAlerts: z.boolean().optional(),
400
+ useIndicator: z.boolean().optional()
401
+ }).strict().optional();
402
+ const MediaModeSchema = z.enum(["cloud", "own-key"]);
403
+ const ImageProviderSchema = z.enum([
404
+ "cloud",
405
+ "fal",
406
+ "openai",
407
+ "google",
408
+ "xai"
409
+ ]);
410
+ const ImageFalConfigSchema = z.object({
411
+ apiKey: z.string().optional(),
412
+ model: z.string().optional(),
413
+ baseUrl: z.string().optional()
414
+ }).strict().optional();
415
+ const ImageOpenaiConfigSchema = z.object({
416
+ apiKey: z.string().optional(),
417
+ model: z.string().optional(),
418
+ quality: z.enum(["standard", "hd"]).optional(),
419
+ style: z.enum(["natural", "vivid"]).optional()
420
+ }).strict().optional();
421
+ const ImageGoogleConfigSchema = z.object({
422
+ apiKey: z.string().optional(),
423
+ model: z.string().optional(),
424
+ aspectRatio: z.string().optional()
425
+ }).strict().optional();
426
+ const ImageXaiConfigSchema = z.object({
427
+ apiKey: z.string().optional(),
428
+ model: z.string().optional()
429
+ }).strict().optional();
430
+ const ImageConfigSchema = z.object({
431
+ enabled: z.boolean().optional(),
432
+ mode: MediaModeSchema.optional(),
433
+ provider: ImageProviderSchema.optional(),
434
+ defaultSize: z.string().optional(),
435
+ fal: ImageFalConfigSchema,
436
+ openai: ImageOpenaiConfigSchema,
437
+ google: ImageGoogleConfigSchema,
438
+ xai: ImageXaiConfigSchema
439
+ }).strict().optional();
440
+ const VideoProviderSchema = z.enum([
441
+ "cloud",
442
+ "fal",
443
+ "openai",
444
+ "google"
445
+ ]);
446
+ const VideoFalConfigSchema = z.object({
447
+ apiKey: z.string().optional(),
448
+ model: z.string().optional(),
449
+ baseUrl: z.string().optional()
450
+ }).strict().optional();
451
+ const VideoOpenaiConfigSchema = z.object({
452
+ apiKey: z.string().optional(),
453
+ model: z.string().optional()
454
+ }).strict().optional();
455
+ const VideoGoogleConfigSchema = z.object({
456
+ apiKey: z.string().optional(),
457
+ model: z.string().optional()
458
+ }).strict().optional();
459
+ const VideoConfigSchema = z.object({
460
+ enabled: z.boolean().optional(),
461
+ mode: MediaModeSchema.optional(),
462
+ provider: VideoProviderSchema.optional(),
463
+ defaultDuration: z.number().int().positive().optional(),
464
+ fal: VideoFalConfigSchema,
465
+ openai: VideoOpenaiConfigSchema,
466
+ google: VideoGoogleConfigSchema
467
+ }).strict().optional();
468
+ const AudioGenProviderSchema = z.enum([
469
+ "cloud",
470
+ "suno",
471
+ "elevenlabs"
472
+ ]);
473
+ const AudioSunoConfigSchema = z.object({
474
+ apiKey: z.string().optional(),
475
+ model: z.string().optional(),
476
+ baseUrl: z.string().optional()
477
+ }).strict().optional();
478
+ const AudioElevenlabsSfxConfigSchema = z.object({
479
+ apiKey: z.string().optional(),
480
+ duration: z.number().min(.5).max(22).optional()
481
+ }).strict().optional();
482
+ const AudioGenConfigSchema = z.object({
483
+ enabled: z.boolean().optional(),
484
+ mode: MediaModeSchema.optional(),
485
+ provider: AudioGenProviderSchema.optional(),
486
+ suno: AudioSunoConfigSchema,
487
+ elevenlabs: AudioElevenlabsSfxConfigSchema
488
+ }).strict().optional();
489
+ const VisionProviderSchema = z.enum([
490
+ "cloud",
491
+ "openai",
492
+ "google",
493
+ "anthropic",
494
+ "xai",
495
+ "ollama"
496
+ ]);
497
+ const VisionOpenaiConfigSchema = z.object({
498
+ apiKey: z.string().optional(),
499
+ model: z.string().optional(),
500
+ maxTokens: z.number().int().positive().optional()
501
+ }).strict().optional();
502
+ const VisionGoogleConfigSchema = z.object({
503
+ apiKey: z.string().optional(),
504
+ model: z.string().optional()
505
+ }).strict().optional();
506
+ const VisionAnthropicConfigSchema = z.object({
507
+ apiKey: z.string().optional(),
508
+ model: z.string().optional()
509
+ }).strict().optional();
510
+ const VisionXaiConfigSchema = z.object({
511
+ apiKey: z.string().optional(),
512
+ model: z.string().optional()
513
+ }).strict().optional();
514
+ const VisionOllamaConfigSchema = z.object({
515
+ baseUrl: z.string().url().optional(),
516
+ model: z.string().optional(),
517
+ maxTokens: z.number().int().positive().optional(),
518
+ autoDownload: z.boolean().optional()
519
+ }).strict().optional();
520
+ const VisionConfigSchema = z.object({
521
+ enabled: z.boolean().optional(),
522
+ mode: MediaModeSchema.optional(),
523
+ provider: VisionProviderSchema.optional(),
524
+ openai: VisionOpenaiConfigSchema,
525
+ google: VisionGoogleConfigSchema,
526
+ anthropic: VisionAnthropicConfigSchema,
527
+ xai: VisionXaiConfigSchema,
528
+ ollama: VisionOllamaConfigSchema
529
+ }).strict().optional();
530
+ const MediaConfigSchema = z.object({
531
+ image: ImageConfigSchema,
532
+ video: VideoConfigSchema,
533
+ audio: AudioGenConfigSchema,
534
+ vision: VisionConfigSchema
535
+ }).strict().optional();
536
+
537
+ //#endregion
538
+ export { BlockStreamingChunkSchema, BlockStreamingCoalesceSchema, ChannelHeartbeatVisibilitySchema, CliBackendSchema, DmConfigSchema, DmPolicySchema, ExecutableTokenSchema, GroupChatSchema, GroupPolicySchema, HexColorSchema, HumanDelaySchema, IdentitySchema, InboundDebounceSchema, MSTeamsReplyStyleSchema, MarkdownConfigSchema, MessagePolicySchema, ModelsConfigSchema, NativeCommandsSettingSchema, ProviderCommandsSchema, QueueSchema, ReplyToModeSchema, RetryConfigSchema, ToolsLinksSchema, ToolsMediaSchema, TranscribeAudioSchema, TtsConfigSchema, requireOpenAllowFrom };
@@ -0,0 +1,103 @@
1
+ import { z } from "zod";
2
+
3
+ //#region src/config/zod-schema.hooks.ts
4
+ const HookMappingSchema = z.object({
5
+ id: z.string().optional(),
6
+ match: z.object({
7
+ path: z.string().optional(),
8
+ source: z.string().optional()
9
+ }).optional(),
10
+ action: z.union([z.literal("wake"), z.literal("agent")]).optional(),
11
+ wakeMode: z.union([z.literal("now"), z.literal("next-heartbeat")]).optional(),
12
+ name: z.string().optional(),
13
+ sessionKey: z.string().optional(),
14
+ messageTemplate: z.string().optional(),
15
+ textTemplate: z.string().optional(),
16
+ deliver: z.boolean().optional(),
17
+ allowUnsafeExternalContent: z.boolean().optional(),
18
+ channel: z.union([
19
+ z.literal("last"),
20
+ z.literal("whatsapp"),
21
+ z.literal("telegram"),
22
+ z.literal("discord"),
23
+ z.literal("googlechat"),
24
+ z.literal("slack"),
25
+ z.literal("signal"),
26
+ z.literal("imessage"),
27
+ z.literal("msteams")
28
+ ]).optional(),
29
+ to: z.string().optional(),
30
+ model: z.string().optional(),
31
+ thinking: z.string().optional(),
32
+ timeoutSeconds: z.number().int().positive().optional(),
33
+ transform: z.object({
34
+ module: z.string(),
35
+ export: z.string().optional()
36
+ }).strict().optional()
37
+ }).strict().optional();
38
+ const InternalHookHandlerSchema = z.object({
39
+ event: z.string(),
40
+ module: z.string(),
41
+ export: z.string().optional()
42
+ }).strict();
43
+ const HookConfigSchema = z.object({
44
+ enabled: z.boolean().optional(),
45
+ env: z.record(z.string(), z.string()).optional()
46
+ }).strict();
47
+ const InstallRecordSchema = z.object({
48
+ source: z.union([
49
+ z.literal("npm"),
50
+ z.literal("archive"),
51
+ z.literal("path")
52
+ ]),
53
+ spec: z.string().optional(),
54
+ sourcePath: z.string().optional(),
55
+ installPath: z.string().optional(),
56
+ version: z.string().optional(),
57
+ installedAt: z.string().optional(),
58
+ hooks: z.array(z.string()).optional()
59
+ }).strict();
60
+ const InternalHooksSchema = z.object({
61
+ enabled: z.boolean().optional(),
62
+ handlers: z.array(InternalHookHandlerSchema).optional(),
63
+ entries: z.record(z.string(), HookConfigSchema).optional(),
64
+ load: z.object({ extraDirs: z.array(z.string()).optional() }).strict().optional(),
65
+ installs: z.record(z.string(), InstallRecordSchema).optional()
66
+ }).strict().optional();
67
+ const HooksGmailSchema = z.object({
68
+ account: z.string().optional(),
69
+ label: z.string().optional(),
70
+ topic: z.string().optional(),
71
+ subscription: z.string().optional(),
72
+ pushToken: z.string().optional(),
73
+ hookUrl: z.string().optional(),
74
+ includeBody: z.boolean().optional(),
75
+ maxBytes: z.number().int().positive().optional(),
76
+ renewEveryMinutes: z.number().int().positive().optional(),
77
+ allowUnsafeExternalContent: z.boolean().optional(),
78
+ serve: z.object({
79
+ bind: z.string().optional(),
80
+ port: z.number().int().positive().optional(),
81
+ path: z.string().optional()
82
+ }).strict().optional(),
83
+ tailscale: z.object({
84
+ mode: z.union([
85
+ z.literal("off"),
86
+ z.literal("serve"),
87
+ z.literal("funnel")
88
+ ]).optional(),
89
+ path: z.string().optional(),
90
+ target: z.string().optional()
91
+ }).strict().optional(),
92
+ model: z.string().optional(),
93
+ thinking: z.union([
94
+ z.literal("off"),
95
+ z.literal("minimal"),
96
+ z.literal("low"),
97
+ z.literal("medium"),
98
+ z.literal("high")
99
+ ]).optional()
100
+ }).strict().optional();
101
+
102
+ //#endregion
103
+ export { HookMappingSchema, HooksGmailSchema, InstallRecordSchema, InternalHooksSchema };