@electric-ax/agents 0.2.3 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/dist/entrypoint.js +474 -737
  2. package/dist/index.cjs +470 -733
  3. package/dist/index.d.cts +68 -35
  4. package/dist/index.d.ts +69 -36
  5. package/dist/index.js +489 -751
  6. package/docs/entities/agents/horton.md +12 -12
  7. package/docs/entities/agents/worker.md +18 -18
  8. package/docs/entities/patterns/blackboard.md +6 -6
  9. package/docs/entities/patterns/dispatcher.md +1 -1
  10. package/docs/entities/patterns/manager-worker.md +1 -1
  11. package/docs/entities/patterns/map-reduce.md +1 -1
  12. package/docs/entities/patterns/pipeline.md +1 -1
  13. package/docs/entities/patterns/reactive-observers.md +2 -2
  14. package/docs/examples/playground.md +42 -26
  15. package/docs/index.md +25 -23
  16. package/docs/quickstart.md +12 -12
  17. package/docs/reference/agent-config.md +20 -12
  18. package/docs/reference/agent-tool.md +1 -1
  19. package/docs/reference/built-in-collections.md +21 -21
  20. package/docs/reference/cli.md +39 -30
  21. package/docs/reference/entity-definition.md +9 -9
  22. package/docs/reference/entity-handle.md +2 -2
  23. package/docs/reference/entity-registry.md +1 -1
  24. package/docs/reference/handler-context.md +34 -18
  25. package/docs/reference/mcp-registry.md +189 -0
  26. package/docs/reference/mcp-server-config.md +226 -0
  27. package/docs/reference/runtime-handler.md +25 -23
  28. package/docs/reference/shared-state-handle.md +7 -7
  29. package/docs/reference/state-collection-proxy.md +1 -1
  30. package/docs/reference/wake-event.md +23 -23
  31. package/docs/usage/app-setup.md +24 -23
  32. package/docs/usage/clients-and-react.md +40 -36
  33. package/docs/usage/configuring-the-agent.md +25 -19
  34. package/docs/usage/context-composition.md +12 -12
  35. package/docs/usage/defining-entities.md +36 -36
  36. package/docs/usage/defining-tools.md +45 -45
  37. package/docs/usage/embedded-builtins.md +54 -43
  38. package/docs/usage/managing-state.md +12 -12
  39. package/docs/usage/mcp-servers.md +354 -0
  40. package/docs/usage/overview.md +50 -45
  41. package/docs/usage/programmatic-runtime-client.md +51 -48
  42. package/docs/usage/shared-state.md +32 -32
  43. package/docs/usage/spawning-and-coordinating.md +9 -9
  44. package/docs/usage/testing.md +14 -14
  45. package/docs/usage/waking-entities.md +13 -13
  46. package/docs/usage/writing-handlers.md +52 -26
  47. package/package.json +9 -4
  48. package/scripts/sync-docs.mjs +42 -0
  49. package/docs/examples/mega-draw.md +0 -106
package/dist/index.d.cts CHANGED
@@ -1,7 +1,8 @@
1
- import { AgentTool, CodingAgentType, EntityRegistry, EntityStreamDBWithActions, HandlerContext, RuntimeHandler, WakeEvent } from "@electric-ax/agents-runtime";
1
+ import { AgentConfig, AgentTool, AvailableProvider, EntityRegistry, EntityStreamDBWithActions, HandlerContext, RuntimeHandler, WakeEvent } from "@electric-ax/agents-runtime";
2
2
  import { ChangeEvent } from "@durable-streams/state";
3
3
  import { AgentTool as AgentTool$1, StreamFn } from "@mariozechner/pi-agent-core";
4
4
  import { IncomingMessage, ServerResponse } from "node:http";
5
+ import { ListedEntry as McpListedEntry, McpConfig, McpServerConfig, McpServerConfig as McpServerConfig$1, Registry, Registry as McpRegistry, RegistrySnapshot, RegistrySubscriber } from "@electric-ax/agents-mcp";
5
6
  import { braveSearchTool } from "@electric-ax/agents-runtime/tools";
6
7
 
7
8
  //#region src/skills/types.d.ts
@@ -40,6 +41,8 @@ interface BuiltinAgentHandlerOptions {
40
41
  serveEndpoint?: string;
41
42
  workingDirectory?: string;
42
43
  streamFn?: StreamFn;
44
+ publicUrl?: string;
45
+ runtimeName?: string;
43
46
  createElectricTools?: (context: {
44
47
  entityUrl: string;
45
48
  entityType: string;
@@ -88,6 +91,30 @@ interface BuiltinAgentsServerOptions {
88
91
  workingDirectory?: string;
89
92
  mockStreamFn?: StreamFn;
90
93
  webhookPath?: string;
94
+ /** Invoked when an `authorizationCode` server needs user consent. */
95
+ openAuthorizeUrl?: (url: string, server: string) => void;
96
+ /**
97
+ * MCP servers contributed by the embedder. Merged with `mcp.json`
98
+ * when `loadProjectMcpConfig` is set; on name conflict `mcp.json`
99
+ * wins. `authorizationCode` servers are wired to `keychainPersistence`.
100
+ */
101
+ extraMcpServers?: ReadonlyArray<McpServerConfig$1>;
102
+ /** Invoked when applying MCP config fails. Errors are always logged. */
103
+ onConfigError?: (error: unknown) => void;
104
+ /**
105
+ * Base for OAuth redirect URIs — full URI is
106
+ * `<base>/oauth/callback/<server-name>`. Must be stable across
107
+ * restarts so DCR client info stays valid. The runtime never
108
+ * listens at this URI; the embedder intercepts the redirect.
109
+ * Defaults to the runtime's own listen URL.
110
+ */
111
+ mcpOAuthRedirectBase?: string;
112
+ /**
113
+ * Load `<workingDirectory>/mcp.json` (and watch it for changes).
114
+ * Off by default — stdio MCP servers can spawn local commands,
115
+ * so the embedder must opt in.
116
+ */
117
+ loadProjectMcpConfig?: boolean;
91
118
  createElectricTools?: (context: {
92
119
  entityUrl: string;
93
120
  entityType: string;
@@ -126,8 +153,15 @@ declare class BuiltinAgentsServer {
126
153
  private bootstrap;
127
154
  private _url;
128
155
  private publicBaseUrl;
156
+ private _mcpRegistry;
157
+ private mcpWatcherCloser;
158
+ private mcpToolProviderName;
159
+ private mcpApplyInFlight;
160
+ private mcpStopping;
129
161
  readonly options: BuiltinAgentsServerOptions;
130
162
  constructor(options: BuiltinAgentsServerOptions);
163
+ /** Embedded MCP registry. `null` until `start()` has run. */
164
+ get mcpRegistry(): Registry | null;
131
165
  get url(): string;
132
166
  get registeredBaseUrl(): string;
133
167
  start(): Promise<string>;
@@ -159,22 +193,50 @@ declare function runBuiltinAgentsEntrypoint({
159
193
  url: string;
160
194
  }>;
161
195
 
196
+ //#endregion
197
+ //#region src/model-catalog.d.ts
198
+ type BuiltinModelProvider = AvailableProvider;
199
+ interface BuiltinModelChoice {
200
+ provider: BuiltinModelProvider;
201
+ id: string;
202
+ label: string;
203
+ value: string;
204
+ reasoning: boolean;
205
+ }
206
+ interface BuiltinModelCatalog {
207
+ choices: Array<BuiltinModelChoice>;
208
+ defaultChoice: BuiltinModelChoice;
209
+ }
210
+ declare const REASONING_EFFORT_VALUES: readonly ["auto", "minimal", "low", "medium", "high"];
211
+ type BuiltinReasoningEffort = (typeof REASONING_EFFORT_VALUES)[number];
212
+ type ExplicitReasoningEffort = Exclude<BuiltinReasoningEffort, `auto`>;
213
+ type BuiltinAgentModelConfig = Pick<AgentConfig, `model` | `provider` | `onPayload` | `getApiKey`> & {
214
+ reasoningEffort?: ExplicitReasoningEffort;
215
+ };
216
+ declare function resolveBuiltinModelConfig(catalog: BuiltinModelCatalog, args: Readonly<Record<string, unknown>>): BuiltinAgentModelConfig;
217
+
162
218
  //#endregion
163
219
  //#region src/agents/horton.d.ts
164
220
  declare const HORTON_MODEL = "claude-sonnet-4-6";
165
- declare function generateTitle(userMessage: string, llmCall?: (prompt: string) => Promise<string>): Promise<string>;
221
+ declare function generateTitle(userMessage: string, llmCall: (prompt: string) => Promise<string>, onFallback?: (reason: string) => void): Promise<string>;
166
222
  declare function buildHortonSystemPrompt(workingDirectory: string, opts?: {
167
223
  hasDocsSupport?: boolean;
168
224
  hasSkills?: boolean;
169
225
  docsUrl?: string;
226
+ modelProvider?: string;
227
+ modelId?: string;
170
228
  }): string;
171
229
  declare function createHortonTools(workingDirectory: string, ctx: HandlerContext, readSet: Set<string>, opts?: {
172
230
  docsSearchTool?: AgentTool$1;
231
+ modelConfig?: ReturnType<typeof resolveBuiltinModelConfig>;
232
+ modelCatalog?: BuiltinModelCatalog;
233
+ logPrefix?: string;
173
234
  }): Array<AgentTool$1>;
174
235
  declare function registerHorton(registry: EntityRegistry, options: {
175
236
  workingDirectory: string;
176
237
  streamFn?: StreamFn;
177
238
  skillsRegistry?: SkillsRegistry | null;
239
+ modelCatalog: BuiltinModelCatalog;
178
240
  docsUrl?: string;
179
241
  }): Array<string>;
180
242
 
@@ -183,43 +245,14 @@ declare function registerHorton(registry: EntityRegistry, options: {
183
245
  declare function registerWorker(registry: EntityRegistry, options: {
184
246
  workingDirectory: string;
185
247
  streamFn?: StreamFn;
248
+ modelCatalog: BuiltinModelCatalog;
186
249
  }): void;
187
250
 
188
- //#endregion
189
- //#region src/agents/coding-session.d.ts
190
- /**
191
- * Abstraction over the claude/codex CLI. Default implementation spawns
192
- * the real binary; tests can inject a fake.
193
- *
194
- * `sessionId` is undefined for the first prompt on a fresh session —
195
- * the runner should then let the CLI generate its own id. For every
196
- * subsequent prompt, pass the id so the CLI resumes that conversation.
197
- */
198
- interface CodingSessionCliRunner {
199
- run(opts: {
200
- agent: CodingAgentType;
201
- sessionId?: string;
202
- cwd: string;
203
- prompt: string;
204
- }): Promise<{
205
- exitCode: number;
206
- stdout: string;
207
- stderr: string;
208
- }>;
209
- }
210
- interface RegisterCodingSessionOptions {
211
- /** Working directory the CLI runs in when `args.cwd` is not provided. Defaults to `process.cwd()`. */
212
- defaultWorkingDirectory?: string;
213
- /** Override the CLI runner (for tests or alternate backends). */
214
- cliRunner?: CodingSessionCliRunner;
215
- }
216
- declare function registerCodingSession(registry: EntityRegistry, options?: RegisterCodingSessionOptions): void;
217
-
218
251
  //#endregion
219
252
  //#region src/tools/spawn-worker.d.ts
220
- declare const WORKER_TOOL_NAMES: readonly ["bash", "read", "write", "edit", "brave_search", "fetch_url", "spawn_worker"];
253
+ declare const WORKER_TOOL_NAMES: readonly ["bash", "read", "write", "edit", "web_search", "fetch_url", "spawn_worker"];
221
254
  type WorkerToolName = (typeof WORKER_TOOL_NAMES)[number];
222
- declare function createSpawnWorkerTool(ctx: HandlerContext): AgentTool$1;
255
+ declare function createSpawnWorkerTool(ctx: HandlerContext, modelConfig?: BuiltinAgentModelConfig): AgentTool$1;
223
256
 
224
257
  //#endregion
225
258
  //#region src/docs/knowledge-base.d.ts
@@ -240,4 +273,4 @@ declare function createHortonDocsSupport(workingDirectory: string, opts?: {
240
273
  }): HortonDocsSupport | null;
241
274
 
242
275
  //#endregion
243
- export { AgentHandlerResult, BuiltinAgentHandlerOptions, BuiltinAgentsEntrypointOptions, BuiltinAgentsEntrypointServer, BuiltinAgentsServer, BuiltinAgentsServerOptions, CodingSessionCliRunner, DEFAULT_BUILTIN_AGENT_HANDLER_PATH, HORTON_MODEL, RegisterCodingSessionOptions, RunBuiltinAgentsEntrypointOptions, WORKER_TOOL_NAMES, WorkerToolName, braveSearchTool, buildHortonSystemPrompt, createAgentHandler, createBuiltinAgentHandler, createHortonDocsSupport, createHortonTools, createSpawnWorkerTool, generateTitle, registerAgentTypes, registerBuiltinAgentTypes, registerCodingSession, registerHorton, registerWorker, resolveBuiltinAgentsEntrypointOptions, runBuiltinAgentsEntrypoint };
276
+ export { AgentHandlerResult, BuiltinAgentHandlerOptions, BuiltinAgentsEntrypointOptions, BuiltinAgentsEntrypointServer, BuiltinAgentsServer, BuiltinAgentsServerOptions, DEFAULT_BUILTIN_AGENT_HANDLER_PATH, HORTON_MODEL, McpConfig, McpListedEntry, McpRegistry, McpServerConfig, RegistrySnapshot, RegistrySubscriber, RunBuiltinAgentsEntrypointOptions, WORKER_TOOL_NAMES, WorkerToolName, braveSearchTool, buildHortonSystemPrompt, createAgentHandler, createBuiltinAgentHandler, createHortonDocsSupport, createHortonTools, createSpawnWorkerTool, generateTitle, registerAgentTypes, registerBuiltinAgentTypes, registerHorton, registerWorker, resolveBuiltinAgentsEntrypointOptions, runBuiltinAgentsEntrypoint };
package/dist/index.d.ts CHANGED
@@ -1,7 +1,8 @@
1
- import { AgentTool, CodingAgentType, EntityRegistry, EntityStreamDBWithActions, HandlerContext, RuntimeHandler, WakeEvent } from "@electric-ax/agents-runtime";
1
+ import { AgentConfig, AgentTool, AvailableProvider, EntityRegistry, EntityStreamDBWithActions, HandlerContext, RuntimeHandler, WakeEvent } from "@electric-ax/agents-runtime";
2
+ import { ChangeEvent } from "@durable-streams/state";
2
3
  import { braveSearchTool } from "@electric-ax/agents-runtime/tools";
4
+ import { ListedEntry as McpListedEntry, McpConfig, McpServerConfig, McpServerConfig as McpServerConfig$1, Registry, Registry as McpRegistry, RegistrySnapshot, RegistrySubscriber } from "@electric-ax/agents-mcp";
3
5
  import { IncomingMessage, ServerResponse } from "node:http";
4
- import { ChangeEvent } from "@durable-streams/state";
5
6
  import { AgentTool as AgentTool$1, StreamFn } from "@mariozechner/pi-agent-core";
6
7
 
7
8
  //#region src/skills/types.d.ts
@@ -40,6 +41,8 @@ interface BuiltinAgentHandlerOptions {
40
41
  serveEndpoint?: string;
41
42
  workingDirectory?: string;
42
43
  streamFn?: StreamFn;
44
+ publicUrl?: string;
45
+ runtimeName?: string;
43
46
  createElectricTools?: (context: {
44
47
  entityUrl: string;
45
48
  entityType: string;
@@ -88,6 +91,30 @@ interface BuiltinAgentsServerOptions {
88
91
  workingDirectory?: string;
89
92
  mockStreamFn?: StreamFn;
90
93
  webhookPath?: string;
94
+ /** Invoked when an `authorizationCode` server needs user consent. */
95
+ openAuthorizeUrl?: (url: string, server: string) => void;
96
+ /**
97
+ * MCP servers contributed by the embedder. Merged with `mcp.json`
98
+ * when `loadProjectMcpConfig` is set; on name conflict `mcp.json`
99
+ * wins. `authorizationCode` servers are wired to `keychainPersistence`.
100
+ */
101
+ extraMcpServers?: ReadonlyArray<McpServerConfig$1>;
102
+ /** Invoked when applying MCP config fails. Errors are always logged. */
103
+ onConfigError?: (error: unknown) => void;
104
+ /**
105
+ * Base for OAuth redirect URIs — full URI is
106
+ * `<base>/oauth/callback/<server-name>`. Must be stable across
107
+ * restarts so DCR client info stays valid. The runtime never
108
+ * listens at this URI; the embedder intercepts the redirect.
109
+ * Defaults to the runtime's own listen URL.
110
+ */
111
+ mcpOAuthRedirectBase?: string;
112
+ /**
113
+ * Load `<workingDirectory>/mcp.json` (and watch it for changes).
114
+ * Off by default — stdio MCP servers can spawn local commands,
115
+ * so the embedder must opt in.
116
+ */
117
+ loadProjectMcpConfig?: boolean;
91
118
  createElectricTools?: (context: {
92
119
  entityUrl: string;
93
120
  entityType: string;
@@ -126,8 +153,15 @@ declare class BuiltinAgentsServer {
126
153
  private bootstrap;
127
154
  private _url;
128
155
  private publicBaseUrl;
156
+ private _mcpRegistry;
157
+ private mcpWatcherCloser;
158
+ private mcpToolProviderName;
159
+ private mcpApplyInFlight;
160
+ private mcpStopping;
129
161
  readonly options: BuiltinAgentsServerOptions;
130
162
  constructor(options: BuiltinAgentsServerOptions);
163
+ /** Embedded MCP registry. `null` until `start()` has run. */
164
+ get mcpRegistry(): Registry | null;
131
165
  get url(): string;
132
166
  get registeredBaseUrl(): string;
133
167
  start(): Promise<string>;
@@ -159,22 +193,50 @@ declare function runBuiltinAgentsEntrypoint({
159
193
  url: string;
160
194
  }>;
161
195
 
196
+ //#endregion
197
+ //#region src/model-catalog.d.ts
198
+ type BuiltinModelProvider = AvailableProvider;
199
+ interface BuiltinModelChoice {
200
+ provider: BuiltinModelProvider;
201
+ id: string;
202
+ label: string;
203
+ value: string;
204
+ reasoning: boolean;
205
+ }
206
+ interface BuiltinModelCatalog {
207
+ choices: Array<BuiltinModelChoice>;
208
+ defaultChoice: BuiltinModelChoice;
209
+ }
210
+ declare const REASONING_EFFORT_VALUES: readonly ["auto", "minimal", "low", "medium", "high"];
211
+ type BuiltinReasoningEffort = (typeof REASONING_EFFORT_VALUES)[number];
212
+ type ExplicitReasoningEffort = Exclude<BuiltinReasoningEffort, `auto`>;
213
+ type BuiltinAgentModelConfig = Pick<AgentConfig, `model` | `provider` | `onPayload` | `getApiKey`> & {
214
+ reasoningEffort?: ExplicitReasoningEffort;
215
+ };
216
+ declare function resolveBuiltinModelConfig(catalog: BuiltinModelCatalog, args: Readonly<Record<string, unknown>>): BuiltinAgentModelConfig;
217
+
162
218
  //#endregion
163
219
  //#region src/agents/horton.d.ts
164
220
  declare const HORTON_MODEL = "claude-sonnet-4-6";
165
- declare function generateTitle(userMessage: string, llmCall?: (prompt: string) => Promise<string>): Promise<string>;
221
+ declare function generateTitle(userMessage: string, llmCall: (prompt: string) => Promise<string>, onFallback?: (reason: string) => void): Promise<string>;
166
222
  declare function buildHortonSystemPrompt(workingDirectory: string, opts?: {
167
223
  hasDocsSupport?: boolean;
168
224
  hasSkills?: boolean;
169
225
  docsUrl?: string;
226
+ modelProvider?: string;
227
+ modelId?: string;
170
228
  }): string;
171
229
  declare function createHortonTools(workingDirectory: string, ctx: HandlerContext, readSet: Set<string>, opts?: {
172
230
  docsSearchTool?: AgentTool$1;
231
+ modelConfig?: ReturnType<typeof resolveBuiltinModelConfig>;
232
+ modelCatalog?: BuiltinModelCatalog;
233
+ logPrefix?: string;
173
234
  }): Array<AgentTool$1>;
174
235
  declare function registerHorton(registry: EntityRegistry, options: {
175
236
  workingDirectory: string;
176
237
  streamFn?: StreamFn;
177
238
  skillsRegistry?: SkillsRegistry | null;
239
+ modelCatalog: BuiltinModelCatalog;
178
240
  docsUrl?: string;
179
241
  }): Array<string>;
180
242
 
@@ -183,43 +245,14 @@ declare function registerHorton(registry: EntityRegistry, options: {
183
245
  declare function registerWorker(registry: EntityRegistry, options: {
184
246
  workingDirectory: string;
185
247
  streamFn?: StreamFn;
248
+ modelCatalog: BuiltinModelCatalog;
186
249
  }): void;
187
250
 
188
- //#endregion
189
- //#region src/agents/coding-session.d.ts
190
- /**
191
- * Abstraction over the claude/codex CLI. Default implementation spawns
192
- * the real binary; tests can inject a fake.
193
- *
194
- * `sessionId` is undefined for the first prompt on a fresh session —
195
- * the runner should then let the CLI generate its own id. For every
196
- * subsequent prompt, pass the id so the CLI resumes that conversation.
197
- */
198
- interface CodingSessionCliRunner {
199
- run(opts: {
200
- agent: CodingAgentType;
201
- sessionId?: string;
202
- cwd: string;
203
- prompt: string;
204
- }): Promise<{
205
- exitCode: number;
206
- stdout: string;
207
- stderr: string;
208
- }>;
209
- }
210
- interface RegisterCodingSessionOptions {
211
- /** Working directory the CLI runs in when `args.cwd` is not provided. Defaults to `process.cwd()`. */
212
- defaultWorkingDirectory?: string;
213
- /** Override the CLI runner (for tests or alternate backends). */
214
- cliRunner?: CodingSessionCliRunner;
215
- }
216
- declare function registerCodingSession(registry: EntityRegistry, options?: RegisterCodingSessionOptions): void;
217
-
218
251
  //#endregion
219
252
  //#region src/tools/spawn-worker.d.ts
220
- declare const WORKER_TOOL_NAMES: readonly ["bash", "read", "write", "edit", "brave_search", "fetch_url", "spawn_worker"];
253
+ declare const WORKER_TOOL_NAMES: readonly ["bash", "read", "write", "edit", "web_search", "fetch_url", "spawn_worker"];
221
254
  type WorkerToolName = (typeof WORKER_TOOL_NAMES)[number];
222
- declare function createSpawnWorkerTool(ctx: HandlerContext): AgentTool$1;
255
+ declare function createSpawnWorkerTool(ctx: HandlerContext, modelConfig?: BuiltinAgentModelConfig): AgentTool$1;
223
256
 
224
257
  //#endregion
225
258
  //#region src/docs/knowledge-base.d.ts
@@ -240,4 +273,4 @@ declare function createHortonDocsSupport(workingDirectory: string, opts?: {
240
273
  }): HortonDocsSupport | null;
241
274
 
242
275
  //#endregion
243
- export { AgentHandlerResult, BuiltinAgentHandlerOptions, BuiltinAgentsEntrypointOptions, BuiltinAgentsEntrypointServer, BuiltinAgentsServer, BuiltinAgentsServerOptions, CodingSessionCliRunner, DEFAULT_BUILTIN_AGENT_HANDLER_PATH, HORTON_MODEL, RegisterCodingSessionOptions, RunBuiltinAgentsEntrypointOptions, WORKER_TOOL_NAMES, WorkerToolName, braveSearchTool, buildHortonSystemPrompt, createAgentHandler, createBuiltinAgentHandler, createHortonDocsSupport, createHortonTools, createSpawnWorkerTool, generateTitle, registerAgentTypes, registerBuiltinAgentTypes, registerCodingSession, registerHorton, registerWorker, resolveBuiltinAgentsEntrypointOptions, runBuiltinAgentsEntrypoint };
276
+ export { AgentHandlerResult, BuiltinAgentHandlerOptions, BuiltinAgentsEntrypointOptions, BuiltinAgentsEntrypointServer, BuiltinAgentsServer, BuiltinAgentsServerOptions, DEFAULT_BUILTIN_AGENT_HANDLER_PATH, HORTON_MODEL, McpConfig, McpListedEntry, McpRegistry, McpServerConfig, RegistrySnapshot, RegistrySubscriber, RunBuiltinAgentsEntrypointOptions, WORKER_TOOL_NAMES, WorkerToolName, braveSearchTool, buildHortonSystemPrompt, createAgentHandler, createBuiltinAgentHandler, createHortonDocsSupport, createHortonTools, createSpawnWorkerTool, generateTitle, registerAgentTypes, registerBuiltinAgentTypes, registerHorton, registerWorker, resolveBuiltinAgentsEntrypointOptions, runBuiltinAgentsEntrypoint };