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,488 @@
1
+ import { ChannelHeartbeatVisibilitySchema, GroupPolicySchema, HexColorSchema, ModelsConfigSchema, TranscribeAudioSchema } from "./zod-schema.core.js";
2
+ import { AgentDefaultsSchema, AgentEntrySchema, ToolsSchema } from "./zod-schema.agent-runtime.js";
3
+ import { HookMappingSchema, HooksGmailSchema, InstallRecordSchema, InternalHooksSchema } from "./zod-schema.hooks.js";
4
+ import { BlueBubblesConfigSchema, DiscordConfigSchema, GoogleChatConfigSchema, IMessageConfigSchema, MSTeamsConfigSchema, SignalConfigSchema, SlackConfigSchema, TelegramConfigSchema, TwitterConfigSchema, WhatsAppConfigSchema } from "./zod-schema.providers-core.js";
5
+ import { CommandsSchema, MessagesSchema, SessionSchema, SessionSendPolicySchema } from "./zod-schema.session.js";
6
+ import { z } from "zod";
7
+
8
+ //#region src/config/zod-schema.ts
9
+ const AgentsSchema = z.object({
10
+ defaults: z.lazy(() => AgentDefaultsSchema).optional(),
11
+ list: z.array(AgentEntrySchema).optional()
12
+ }).strict().optional();
13
+ const BindingsSchema = z.array(z.object({
14
+ agentId: z.string(),
15
+ match: z.object({
16
+ channel: z.string(),
17
+ accountId: z.string().optional(),
18
+ peer: z.object({
19
+ kind: z.union([
20
+ z.literal("dm"),
21
+ z.literal("group"),
22
+ z.literal("channel")
23
+ ]),
24
+ id: z.string()
25
+ }).strict().optional(),
26
+ guildId: z.string().optional(),
27
+ teamId: z.string().optional()
28
+ }).strict()
29
+ }).strict()).optional();
30
+ const BroadcastStrategySchema = z.enum(["parallel", "sequential"]);
31
+ const BroadcastSchema = z.object({ strategy: BroadcastStrategySchema.optional() }).catchall(z.array(z.string())).optional();
32
+ const AudioSchema = z.object({ transcription: TranscribeAudioSchema }).strict().optional();
33
+ const ExecApprovalForwardTargetSchema = z.object({
34
+ channel: z.string().min(1),
35
+ to: z.string().min(1),
36
+ accountId: z.string().optional(),
37
+ threadId: z.union([z.string(), z.number()]).optional()
38
+ }).strict();
39
+ const ExecApprovalForwardingSchema = z.object({
40
+ enabled: z.boolean().optional(),
41
+ mode: z.union([
42
+ z.literal("session"),
43
+ z.literal("targets"),
44
+ z.literal("both")
45
+ ]).optional(),
46
+ agentFilter: z.array(z.string()).optional(),
47
+ sessionFilter: z.array(z.string()).optional(),
48
+ targets: z.array(ExecApprovalForwardTargetSchema).optional()
49
+ }).strict().optional();
50
+ const ApprovalsSchema = z.object({ exec: ExecApprovalForwardingSchema }).strict().optional();
51
+ const ConnectorsSchema = z.object({
52
+ defaults: z.object({
53
+ groupPolicy: GroupPolicySchema.optional(),
54
+ heartbeat: ChannelHeartbeatVisibilitySchema
55
+ }).strict().optional(),
56
+ whatsapp: WhatsAppConfigSchema.optional(),
57
+ telegram: TelegramConfigSchema.optional(),
58
+ discord: DiscordConfigSchema.optional(),
59
+ twitter: TwitterConfigSchema.optional(),
60
+ googlechat: GoogleChatConfigSchema.optional(),
61
+ slack: SlackConfigSchema.optional(),
62
+ signal: SignalConfigSchema.optional(),
63
+ imessage: IMessageConfigSchema.optional(),
64
+ bluebubbles: BlueBubblesConfigSchema.optional(),
65
+ msteams: MSTeamsConfigSchema.optional()
66
+ }).passthrough().optional();
67
+ const BrowserSnapshotDefaultsSchema = z.object({ mode: z.literal("efficient").optional() }).strict().optional();
68
+ const NodeHostSchema = z.object({ browserProxy: z.object({
69
+ enabled: z.boolean().optional(),
70
+ allowProfiles: z.array(z.string()).optional()
71
+ }).strict().optional() }).strict().optional();
72
+ const MemoryQmdPathSchema = z.object({
73
+ path: z.string(),
74
+ name: z.string().optional(),
75
+ pattern: z.string().optional()
76
+ }).strict();
77
+ const MemoryQmdSessionSchema = z.object({
78
+ enabled: z.boolean().optional(),
79
+ exportDir: z.string().optional(),
80
+ retentionDays: z.number().int().nonnegative().optional()
81
+ }).strict();
82
+ const MemoryQmdUpdateSchema = z.object({
83
+ interval: z.string().optional(),
84
+ debounceMs: z.number().int().nonnegative().optional(),
85
+ onBoot: z.boolean().optional(),
86
+ embedInterval: z.string().optional()
87
+ }).strict();
88
+ const MemoryQmdLimitsSchema = z.object({
89
+ maxResults: z.number().int().positive().optional(),
90
+ maxSnippetChars: z.number().int().positive().optional(),
91
+ maxInjectedChars: z.number().int().positive().optional(),
92
+ timeoutMs: z.number().int().nonnegative().optional()
93
+ }).strict();
94
+ const MemoryQmdSchema = z.object({
95
+ command: z.string().optional(),
96
+ includeDefaultMemory: z.boolean().optional(),
97
+ paths: z.array(MemoryQmdPathSchema).optional(),
98
+ sessions: MemoryQmdSessionSchema.optional(),
99
+ update: MemoryQmdUpdateSchema.optional(),
100
+ limits: MemoryQmdLimitsSchema.optional(),
101
+ scope: SessionSendPolicySchema.optional()
102
+ }).strict();
103
+ const MemorySchema = z.object({
104
+ backend: z.union([z.literal("builtin"), z.literal("qmd")]).optional(),
105
+ citations: z.union([
106
+ z.literal("auto"),
107
+ z.literal("on"),
108
+ z.literal("off")
109
+ ]).optional(),
110
+ qmd: MemoryQmdSchema.optional()
111
+ }).strict().optional();
112
+ const MessageExampleContentSchema = z.object({
113
+ text: z.string().min(1),
114
+ actions: z.array(z.string()).optional()
115
+ }).strict();
116
+ const MessageExampleSchema = z.object({
117
+ name: z.string().min(1),
118
+ content: MessageExampleContentSchema
119
+ }).strict();
120
+ const MessageExampleGroupSchema = z.object({ examples: z.array(MessageExampleSchema).min(1) }).strict();
121
+ const CharacterStyleSchema = z.object({
122
+ all: z.array(z.string()).optional(),
123
+ chat: z.array(z.string()).optional(),
124
+ post: z.array(z.string()).optional()
125
+ }).strict().optional();
126
+ const CharacterSchema = z.object({
127
+ name: z.string().min(1).max(100).optional(),
128
+ username: z.string().max(50).optional(),
129
+ bio: z.union([z.string(), z.array(z.string())]).optional(),
130
+ system: z.string().max(1e4).optional(),
131
+ adjectives: z.array(z.string().min(1).max(100)).optional(),
132
+ topics: z.array(z.string().min(1).max(200)).optional(),
133
+ style: CharacterStyleSchema,
134
+ messageExamples: z.array(MessageExampleGroupSchema).optional(),
135
+ postExamples: z.array(z.string()).optional()
136
+ }).strict().optional();
137
+ const MiladySchema = z.object({
138
+ meta: z.object({
139
+ lastTouchedVersion: z.string().optional(),
140
+ lastTouchedAt: z.string().optional()
141
+ }).strict().optional(),
142
+ env: z.object({
143
+ shellEnv: z.object({
144
+ enabled: z.boolean().optional(),
145
+ timeoutMs: z.number().int().nonnegative().optional()
146
+ }).strict().optional(),
147
+ vars: z.record(z.string(), z.string()).optional()
148
+ }).catchall(z.string()).optional(),
149
+ wizard: z.object({
150
+ lastRunAt: z.string().optional(),
151
+ lastRunVersion: z.string().optional(),
152
+ lastRunCommit: z.string().optional(),
153
+ lastRunCommand: z.string().optional(),
154
+ lastRunMode: z.union([z.literal("local"), z.literal("remote")]).optional()
155
+ }).strict().optional(),
156
+ diagnostics: z.object({
157
+ enabled: z.boolean().optional(),
158
+ flags: z.array(z.string()).optional(),
159
+ otel: z.object({
160
+ enabled: z.boolean().optional(),
161
+ endpoint: z.string().optional(),
162
+ protocol: z.union([z.literal("http/protobuf"), z.literal("grpc")]).optional(),
163
+ headers: z.record(z.string(), z.string()).optional(),
164
+ serviceName: z.string().optional(),
165
+ traces: z.boolean().optional(),
166
+ metrics: z.boolean().optional(),
167
+ logs: z.boolean().optional(),
168
+ sampleRate: z.number().min(0).max(1).optional(),
169
+ flushIntervalMs: z.number().int().nonnegative().optional()
170
+ }).strict().optional(),
171
+ cacheTrace: z.object({
172
+ enabled: z.boolean().optional(),
173
+ filePath: z.string().optional(),
174
+ includeMessages: z.boolean().optional(),
175
+ includePrompt: z.boolean().optional(),
176
+ includeSystem: z.boolean().optional()
177
+ }).strict().optional()
178
+ }).strict().optional(),
179
+ logging: z.object({
180
+ level: z.union([
181
+ z.literal("silent"),
182
+ z.literal("fatal"),
183
+ z.literal("error"),
184
+ z.literal("warn"),
185
+ z.literal("info"),
186
+ z.literal("debug"),
187
+ z.literal("trace")
188
+ ]).optional(),
189
+ file: z.string().optional(),
190
+ consoleLevel: z.union([
191
+ z.literal("silent"),
192
+ z.literal("fatal"),
193
+ z.literal("error"),
194
+ z.literal("warn"),
195
+ z.literal("info"),
196
+ z.literal("debug"),
197
+ z.literal("trace")
198
+ ]).optional(),
199
+ consoleStyle: z.union([
200
+ z.literal("pretty"),
201
+ z.literal("compact"),
202
+ z.literal("json")
203
+ ]).optional(),
204
+ redactSensitive: z.union([z.literal("off"), z.literal("tools")]).optional(),
205
+ redactPatterns: z.array(z.string()).optional()
206
+ }).strict().optional(),
207
+ update: z.object({
208
+ channel: z.union([
209
+ z.literal("stable"),
210
+ z.literal("beta"),
211
+ z.literal("dev")
212
+ ]).optional(),
213
+ checkOnStart: z.boolean().optional()
214
+ }).strict().optional(),
215
+ browser: z.object({
216
+ enabled: z.boolean().optional(),
217
+ evaluateEnabled: z.boolean().optional(),
218
+ cdpUrl: z.string().optional(),
219
+ remoteCdpTimeoutMs: z.number().int().nonnegative().optional(),
220
+ remoteCdpHandshakeTimeoutMs: z.number().int().nonnegative().optional(),
221
+ color: z.string().optional(),
222
+ executablePath: z.string().optional(),
223
+ headless: z.boolean().optional(),
224
+ noSandbox: z.boolean().optional(),
225
+ attachOnly: z.boolean().optional(),
226
+ defaultProfile: z.string().optional(),
227
+ snapshotDefaults: BrowserSnapshotDefaultsSchema,
228
+ profiles: z.record(z.string().regex(/^[a-z0-9-]+$/, "Profile names must be alphanumeric with hyphens only"), z.object({
229
+ cdpPort: z.number().int().min(1).max(65535).optional(),
230
+ cdpUrl: z.string().optional(),
231
+ driver: z.union([z.literal("cdp"), z.literal("extension")]).optional(),
232
+ color: HexColorSchema
233
+ }).strict().refine((value) => value.cdpPort || value.cdpUrl, { message: "Profile must set cdpPort or cdpUrl" })).optional()
234
+ }).strict().optional(),
235
+ ui: z.object({
236
+ seamColor: HexColorSchema.optional(),
237
+ assistant: z.object({
238
+ name: z.string().max(50).optional(),
239
+ avatar: z.string().max(200).optional()
240
+ }).strict().optional()
241
+ }).strict().optional(),
242
+ auth: z.object({
243
+ profiles: z.record(z.string(), z.object({
244
+ provider: z.string(),
245
+ mode: z.union([
246
+ z.literal("api_key"),
247
+ z.literal("oauth"),
248
+ z.literal("token")
249
+ ]),
250
+ email: z.string().optional()
251
+ }).strict()).optional(),
252
+ order: z.record(z.string(), z.array(z.string())).optional(),
253
+ cooldowns: z.object({
254
+ billingBackoffHours: z.number().positive().optional(),
255
+ billingBackoffHoursByProvider: z.record(z.string(), z.number().positive()).optional(),
256
+ billingMaxHours: z.number().positive().optional(),
257
+ failureWindowHours: z.number().positive().optional()
258
+ }).strict().optional()
259
+ }).strict().optional(),
260
+ models: ModelsConfigSchema,
261
+ nodeHost: NodeHostSchema,
262
+ agents: AgentsSchema,
263
+ tools: ToolsSchema,
264
+ bindings: BindingsSchema,
265
+ broadcast: BroadcastSchema,
266
+ audio: AudioSchema,
267
+ media: z.object({ preserveFilenames: z.boolean().optional() }).strict().optional(),
268
+ messages: MessagesSchema,
269
+ commands: CommandsSchema,
270
+ approvals: ApprovalsSchema,
271
+ session: SessionSchema,
272
+ cron: z.object({
273
+ enabled: z.boolean().optional(),
274
+ store: z.string().optional(),
275
+ maxConcurrentRuns: z.number().int().positive().optional()
276
+ }).strict().optional(),
277
+ hooks: z.object({
278
+ enabled: z.boolean().optional(),
279
+ path: z.string().optional(),
280
+ token: z.string().optional(),
281
+ maxBodyBytes: z.number().int().positive().optional(),
282
+ presets: z.array(z.string()).optional(),
283
+ transformsDir: z.string().optional(),
284
+ mappings: z.array(HookMappingSchema).optional(),
285
+ gmail: HooksGmailSchema,
286
+ internal: InternalHooksSchema
287
+ }).strict().optional(),
288
+ web: z.object({
289
+ enabled: z.boolean().optional(),
290
+ heartbeatSeconds: z.number().int().positive().optional(),
291
+ reconnect: z.object({
292
+ initialMs: z.number().positive().optional(),
293
+ maxMs: z.number().positive().optional(),
294
+ factor: z.number().positive().optional(),
295
+ jitter: z.number().min(0).max(1).optional(),
296
+ maxAttempts: z.number().int().min(0).optional()
297
+ }).strict().optional()
298
+ }).strict().optional(),
299
+ connectors: ConnectorsSchema,
300
+ channels: ConnectorsSchema,
301
+ discovery: z.object({
302
+ wideArea: z.object({ enabled: z.boolean().optional() }).strict().optional(),
303
+ mdns: z.object({ mode: z.enum([
304
+ "off",
305
+ "minimal",
306
+ "full"
307
+ ]).optional() }).strict().optional()
308
+ }).strict().optional(),
309
+ talk: z.object({
310
+ voiceId: z.string().optional(),
311
+ voiceAliases: z.record(z.string(), z.string()).optional(),
312
+ modelId: z.string().optional(),
313
+ outputFormat: z.string().optional(),
314
+ apiKey: z.string().optional(),
315
+ interruptOnSpeech: z.boolean().optional()
316
+ }).strict().optional(),
317
+ gateway: z.object({
318
+ port: z.number().int().positive().optional(),
319
+ mode: z.union([z.literal("local"), z.literal("remote")]).optional(),
320
+ bind: z.union([
321
+ z.literal("auto"),
322
+ z.literal("lan"),
323
+ z.literal("loopback"),
324
+ z.literal("custom"),
325
+ z.literal("tailnet")
326
+ ]).optional(),
327
+ controlUi: z.object({
328
+ enabled: z.boolean().optional(),
329
+ basePath: z.string().optional(),
330
+ root: z.string().optional(),
331
+ allowedOrigins: z.array(z.string()).optional(),
332
+ allowInsecureAuth: z.boolean().optional(),
333
+ dangerouslyDisableDeviceAuth: z.boolean().optional()
334
+ }).strict().optional(),
335
+ auth: z.object({
336
+ mode: z.union([z.literal("token"), z.literal("password")]).optional(),
337
+ token: z.string().optional(),
338
+ password: z.string().optional(),
339
+ allowTailscale: z.boolean().optional()
340
+ }).strict().optional(),
341
+ trustedProxies: z.array(z.string()).optional(),
342
+ tailscale: z.object({
343
+ mode: z.union([
344
+ z.literal("off"),
345
+ z.literal("serve"),
346
+ z.literal("funnel")
347
+ ]).optional(),
348
+ resetOnExit: z.boolean().optional()
349
+ }).strict().optional(),
350
+ remote: z.object({
351
+ url: z.string().optional(),
352
+ transport: z.union([z.literal("ssh"), z.literal("direct")]).optional(),
353
+ token: z.string().optional(),
354
+ password: z.string().optional(),
355
+ tlsFingerprint: z.string().optional(),
356
+ sshTarget: z.string().optional(),
357
+ sshIdentity: z.string().optional()
358
+ }).strict().optional(),
359
+ reload: z.object({
360
+ mode: z.union([
361
+ z.literal("off"),
362
+ z.literal("restart"),
363
+ z.literal("hot"),
364
+ z.literal("hybrid")
365
+ ]).optional(),
366
+ debounceMs: z.number().int().min(0).optional()
367
+ }).strict().optional(),
368
+ tls: z.object({
369
+ enabled: z.boolean().optional(),
370
+ autoGenerate: z.boolean().optional(),
371
+ certPath: z.string().optional(),
372
+ keyPath: z.string().optional(),
373
+ caPath: z.string().optional()
374
+ }).optional(),
375
+ http: z.object({ endpoints: z.object({
376
+ chatCompletions: z.object({ enabled: z.boolean().optional() }).strict().optional(),
377
+ responses: z.object({
378
+ enabled: z.boolean().optional(),
379
+ maxBodyBytes: z.number().int().positive().optional(),
380
+ files: z.object({
381
+ allowUrl: z.boolean().optional(),
382
+ allowedMimes: z.array(z.string()).optional(),
383
+ maxBytes: z.number().int().positive().optional(),
384
+ maxChars: z.number().int().positive().optional(),
385
+ maxRedirects: z.number().int().nonnegative().optional(),
386
+ timeoutMs: z.number().int().positive().optional(),
387
+ pdf: z.object({
388
+ maxPages: z.number().int().positive().optional(),
389
+ maxPixels: z.number().int().positive().optional(),
390
+ minTextChars: z.number().int().nonnegative().optional()
391
+ }).strict().optional()
392
+ }).strict().optional(),
393
+ images: z.object({
394
+ allowUrl: z.boolean().optional(),
395
+ allowedMimes: z.array(z.string()).optional(),
396
+ maxBytes: z.number().int().positive().optional(),
397
+ maxRedirects: z.number().int().nonnegative().optional(),
398
+ timeoutMs: z.number().int().positive().optional()
399
+ }).strict().optional()
400
+ }).strict().optional()
401
+ }).strict().optional() }).strict().optional(),
402
+ nodes: z.object({
403
+ browser: z.object({
404
+ mode: z.union([
405
+ z.literal("auto"),
406
+ z.literal("manual"),
407
+ z.literal("off")
408
+ ]).optional(),
409
+ node: z.string().optional()
410
+ }).strict().optional(),
411
+ allowCommands: z.array(z.string()).optional(),
412
+ denyCommands: z.array(z.string()).optional()
413
+ }).strict().optional()
414
+ }).strict().optional(),
415
+ memory: MemorySchema,
416
+ embedding: z.object({
417
+ model: z.string().optional(),
418
+ modelRepo: z.string().optional(),
419
+ dimensions: z.number().int().positive().optional(),
420
+ contextSize: z.number().int().positive().optional(),
421
+ gpuLayers: z.union([
422
+ z.literal("auto"),
423
+ z.literal("max"),
424
+ z.number().int().min(0)
425
+ ]).optional(),
426
+ idleTimeoutMinutes: z.number().min(0).optional()
427
+ }).strict().optional(),
428
+ skills: z.object({
429
+ allowBundled: z.array(z.string()).optional(),
430
+ denyBundled: z.array(z.string()).optional(),
431
+ load: z.object({
432
+ extraDirs: z.array(z.string()).optional(),
433
+ watch: z.boolean().optional(),
434
+ watchDebounceMs: z.number().int().min(0).optional()
435
+ }).strict().optional(),
436
+ install: z.object({
437
+ preferBrew: z.boolean().optional(),
438
+ nodeManager: z.union([
439
+ z.literal("npm"),
440
+ z.literal("yarn"),
441
+ z.literal("bun")
442
+ ]).optional()
443
+ }).strict().optional(),
444
+ entries: z.record(z.string(), z.object({
445
+ enabled: z.boolean().optional(),
446
+ apiKey: z.string().optional(),
447
+ env: z.record(z.string(), z.string()).optional(),
448
+ config: z.record(z.string(), z.unknown()).optional()
449
+ }).strict()).optional()
450
+ }).strict().optional(),
451
+ plugins: z.object({
452
+ enabled: z.boolean().optional(),
453
+ allow: z.array(z.string()).optional(),
454
+ deny: z.array(z.string()).optional(),
455
+ load: z.object({ paths: z.array(z.string()).optional() }).strict().optional(),
456
+ slots: z.object({ memory: z.string().optional() }).strict().optional(),
457
+ entries: z.record(z.string(), z.object({
458
+ enabled: z.boolean().optional(),
459
+ config: z.record(z.string(), z.unknown()).optional()
460
+ }).strict()).optional(),
461
+ installs: z.record(z.string(), InstallRecordSchema).optional()
462
+ }).strict().optional()
463
+ }).strict().superRefine((cfg, ctx) => {
464
+ const agents = cfg.agents?.list ?? [];
465
+ if (agents.length === 0) return;
466
+ const agentIds = new Set(agents.map((agent) => agent.id));
467
+ const broadcast = cfg.broadcast;
468
+ if (!broadcast) return;
469
+ for (const [peerId, ids] of Object.entries(broadcast)) {
470
+ if (peerId === "strategy") continue;
471
+ if (!Array.isArray(ids)) continue;
472
+ for (let idx = 0; idx < ids.length; idx += 1) {
473
+ const agentId = ids[idx];
474
+ if (!agentIds.has(agentId)) ctx.addIssue({
475
+ code: z.ZodIssueCode.custom,
476
+ path: [
477
+ "broadcast",
478
+ peerId,
479
+ idx
480
+ ],
481
+ message: `Unknown agent id "${agentId}" (not in agents.list).`
482
+ });
483
+ }
484
+ }
485
+ });
486
+
487
+ //#endregion
488
+ export { CharacterSchema, MiladySchema };