hoomanjs 1.29.1 → 1.30.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 (270) hide show
  1. package/README.md +216 -69
  2. package/dist/acp/acp-agent.d.ts +5 -5
  3. package/dist/acp/acp-agent.js +55 -54
  4. package/dist/acp/acp-agent.js.map +1 -1
  5. package/dist/acp/approvals.d.ts +3 -3
  6. package/dist/acp/approvals.js +73 -115
  7. package/dist/acp/approvals.js.map +1 -1
  8. package/dist/acp/sessions/options.js +11 -25
  9. package/dist/acp/sessions/options.js.map +1 -1
  10. package/dist/acp/utils/tool-kind.js +1 -5
  11. package/dist/acp/utils/tool-kind.js.map +1 -1
  12. package/dist/chat/app.d.ts +5 -1
  13. package/dist/chat/app.js +322 -202
  14. package/dist/chat/app.js.map +1 -1
  15. package/dist/chat/approvals.d.ts +4 -3
  16. package/dist/chat/approvals.js +11 -45
  17. package/dist/chat/approvals.js.map +1 -1
  18. package/dist/chat/components/ChatMessage.d.ts +1 -2
  19. package/dist/chat/components/ChatMessage.js +4 -5
  20. package/dist/chat/components/ChatMessage.js.map +1 -1
  21. package/dist/chat/components/EmptyChatBanner.js +2 -3
  22. package/dist/chat/components/EmptyChatBanner.js.map +1 -1
  23. package/dist/chat/components/StatusBar.js +6 -2
  24. package/dist/chat/components/StatusBar.js.map +1 -1
  25. package/dist/chat/components/ThoughtEvent.d.ts +6 -0
  26. package/dist/chat/components/ThoughtEvent.js +30 -0
  27. package/dist/chat/components/ThoughtEvent.js.map +1 -0
  28. package/dist/chat/components/ToolEvent.js +1 -1
  29. package/dist/chat/components/ToolEvent.js.map +1 -1
  30. package/dist/chat/components/Transcript.d.ts +7 -2
  31. package/dist/chat/components/Transcript.js +6 -2
  32. package/dist/chat/components/Transcript.js.map +1 -1
  33. package/dist/chat/components/markdown/BlockRenderer.js +7 -7
  34. package/dist/chat/components/markdown/BlockRenderer.js.map +1 -1
  35. package/dist/chat/components/markdown/MarkdownMessage.js +1 -1
  36. package/dist/chat/components/markdown/MarkdownMessage.js.map +1 -1
  37. package/dist/chat/components/shared.js +2 -0
  38. package/dist/chat/components/shared.js.map +1 -1
  39. package/dist/chat/index.d.ts +4 -0
  40. package/dist/chat/index.js +17 -3
  41. package/dist/chat/index.js.map +1 -1
  42. package/dist/chat/steering.d.ts +20 -0
  43. package/dist/chat/steering.js +67 -0
  44. package/dist/chat/steering.js.map +1 -0
  45. package/dist/chat/types.d.ts +5 -1
  46. package/dist/cli.js +91 -13
  47. package/dist/cli.js.map +1 -1
  48. package/dist/configure/app.d.ts +1 -1
  49. package/dist/configure/app.js +581 -303
  50. package/dist/configure/app.js.map +1 -1
  51. package/dist/configure/components/MenuScreen.d.ts +4 -2
  52. package/dist/configure/components/MenuScreen.js +33 -6
  53. package/dist/configure/components/MenuScreen.js.map +1 -1
  54. package/dist/configure/components/SelectMenuItem.d.ts +1 -0
  55. package/dist/configure/components/SelectMenuItem.js +19 -10
  56. package/dist/configure/components/SelectMenuItem.js.map +1 -1
  57. package/dist/configure/index.js +4 -2
  58. package/dist/configure/index.js.map +1 -1
  59. package/dist/configure/types.d.ts +14 -12
  60. package/dist/configure/utils.d.ts +2 -0
  61. package/dist/configure/utils.js +21 -2
  62. package/dist/configure/utils.js.map +1 -1
  63. package/dist/core/agent/index.d.ts +3 -3
  64. package/dist/core/agent/index.js +20 -25
  65. package/dist/core/agent/index.js.map +1 -1
  66. package/dist/core/agent/mode-aware-tool-registry.js +2 -1
  67. package/dist/core/agent/mode-aware-tool-registry.js.map +1 -1
  68. package/dist/core/approvals/intervention.d.ts +34 -0
  69. package/dist/core/approvals/intervention.js +94 -0
  70. package/dist/core/approvals/intervention.js.map +1 -0
  71. package/dist/core/config.d.ts +49 -27
  72. package/dist/core/config.js +85 -25
  73. package/dist/core/config.js.map +1 -1
  74. package/dist/core/context/index.d.ts +11 -2
  75. package/dist/core/context/index.js +54 -4
  76. package/dist/core/context/index.js.map +1 -1
  77. package/dist/core/context/model-extractor.d.ts +13 -0
  78. package/dist/core/context/model-extractor.js +98 -0
  79. package/dist/core/context/model-extractor.js.map +1 -0
  80. package/dist/core/index.d.ts +6 -2
  81. package/dist/core/index.js +6 -1
  82. package/dist/core/index.js.map +1 -1
  83. package/dist/core/mcp/config.d.ts +28 -0
  84. package/dist/core/mcp/index.d.ts +5 -3
  85. package/dist/core/mcp/index.js +4 -2
  86. package/dist/core/mcp/index.js.map +1 -1
  87. package/dist/core/mcp/manager.d.ts +14 -1
  88. package/dist/core/mcp/manager.js +76 -4
  89. package/dist/core/mcp/manager.js.map +1 -1
  90. package/dist/core/mcp/oauth/callback-server.d.ts +16 -0
  91. package/dist/core/mcp/oauth/callback-server.js +134 -0
  92. package/dist/core/mcp/oauth/callback-server.js.map +1 -0
  93. package/dist/core/mcp/oauth/identity.d.ts +9 -0
  94. package/dist/core/mcp/oauth/identity.js +31 -0
  95. package/dist/core/mcp/oauth/identity.js.map +1 -0
  96. package/dist/core/mcp/oauth/index.d.ts +11 -0
  97. package/dist/core/mcp/oauth/index.js +15 -0
  98. package/dist/core/mcp/oauth/index.js.map +1 -0
  99. package/dist/core/mcp/oauth/provider.d.ts +43 -0
  100. package/dist/core/mcp/oauth/provider.js +203 -0
  101. package/dist/core/mcp/oauth/provider.js.map +1 -0
  102. package/dist/core/mcp/oauth/service.d.ts +29 -0
  103. package/dist/core/mcp/oauth/service.js +139 -0
  104. package/dist/core/mcp/oauth/service.js.map +1 -0
  105. package/dist/core/mcp/oauth/store.d.ts +14 -0
  106. package/dist/core/mcp/oauth/store.js +86 -0
  107. package/dist/core/mcp/oauth/store.js.map +1 -0
  108. package/dist/core/mcp/oauth/types.d.ts +87 -0
  109. package/dist/core/mcp/oauth/types.js +45 -0
  110. package/dist/core/mcp/oauth/types.js.map +1 -0
  111. package/dist/core/mcp/types.d.ts +56 -0
  112. package/dist/core/mcp/types.js +3 -0
  113. package/dist/core/mcp/types.js.map +1 -1
  114. package/dist/core/memory/file-store.d.ts +24 -0
  115. package/dist/core/memory/file-store.js +151 -0
  116. package/dist/core/memory/file-store.js.map +1 -0
  117. package/dist/core/memory/index.d.ts +2 -5
  118. package/dist/core/memory/index.js +2 -3
  119. package/dist/core/memory/index.js.map +1 -1
  120. package/dist/core/memory/runtime.d.ts +4 -0
  121. package/dist/core/memory/runtime.js +37 -0
  122. package/dist/core/memory/runtime.js.map +1 -0
  123. package/dist/core/models/anthropic.js +24 -1
  124. package/dist/core/models/anthropic.js.map +1 -1
  125. package/dist/core/models/moonshot.js +33 -1
  126. package/dist/core/models/moonshot.js.map +1 -1
  127. package/dist/core/modes/definitions.d.ts +19 -0
  128. package/dist/core/modes/definitions.js +99 -0
  129. package/dist/core/modes/definitions.js.map +1 -0
  130. package/dist/core/modes/index.d.ts +3 -0
  131. package/dist/core/modes/index.js +4 -0
  132. package/dist/core/modes/index.js.map +1 -0
  133. package/dist/core/modes/registry.d.ts +9 -0
  134. package/dist/core/modes/registry.js +57 -0
  135. package/dist/core/modes/registry.js.map +1 -0
  136. package/dist/core/modes/schema.d.ts +5 -0
  137. package/dist/core/modes/schema.js +6 -0
  138. package/dist/core/modes/schema.js.map +1 -0
  139. package/dist/core/prompts/agents/research.md +8 -8
  140. package/dist/core/prompts/bundled.d.ts +3 -0
  141. package/dist/core/prompts/bundled.js +14 -0
  142. package/dist/core/prompts/bundled.js.map +1 -0
  143. package/dist/core/prompts/environment.d.ts +0 -1
  144. package/dist/core/prompts/environment.js +0 -2
  145. package/dist/core/prompts/environment.js.map +1 -1
  146. package/dist/core/prompts/index.d.ts +1 -4
  147. package/dist/core/prompts/index.js +1 -7
  148. package/dist/core/prompts/index.js.map +1 -1
  149. package/dist/core/prompts/modes/agent.md +3 -0
  150. package/dist/core/prompts/modes/ask.md +5 -3
  151. package/dist/core/prompts/modes/plan.md +2 -2
  152. package/dist/core/prompts/session-mode-appendix.d.ts +3 -9
  153. package/dist/core/prompts/session-mode-appendix.js +32 -69
  154. package/dist/core/prompts/session-mode-appendix.js.map +1 -1
  155. package/dist/core/prompts/static/environment.md +2 -2
  156. package/dist/core/prompts/static/init.md +25 -0
  157. package/dist/core/prompts/static/memory.md +9 -123
  158. package/dist/core/prompts/static/planning.md +1 -1
  159. package/dist/core/prompts/static/skills.md +6 -5
  160. package/dist/core/prompts/static/subagents.md +2 -2
  161. package/dist/core/prompts/static/web-search.md +2 -1
  162. package/dist/core/prompts/system.js +8 -22
  163. package/dist/core/prompts/system.js.map +1 -1
  164. package/dist/core/skills/built-in/hooman-config/SKILL.md +105 -32
  165. package/dist/core/skills/built-in/hooman-skills/SKILL.md +1 -1
  166. package/dist/core/skills/index.d.ts +1 -0
  167. package/dist/core/skills/index.js +1 -0
  168. package/dist/core/skills/index.js.map +1 -1
  169. package/dist/core/skills/plugin.d.ts +7 -0
  170. package/dist/core/skills/plugin.js +40 -0
  171. package/dist/core/skills/plugin.js.map +1 -0
  172. package/dist/core/state/agent-app-state.d.ts +1 -1
  173. package/dist/core/state/agent-app-state.js +1 -1
  174. package/dist/core/state/session-mode.d.ts +2 -9
  175. package/dist/core/state/session-mode.js +4 -12
  176. package/dist/core/state/session-mode.js.map +1 -1
  177. package/dist/core/state/tool-approvals.d.ts +4 -8
  178. package/dist/core/state/tool-approvals.js +14 -76
  179. package/dist/core/state/tool-approvals.js.map +1 -1
  180. package/dist/core/subagents/index.d.ts +3 -0
  181. package/dist/core/subagents/index.js +4 -0
  182. package/dist/core/subagents/index.js.map +1 -0
  183. package/dist/core/subagents/research.d.ts +16 -0
  184. package/dist/core/subagents/research.js +58 -0
  185. package/dist/core/subagents/research.js.map +1 -0
  186. package/dist/core/{agents → subagents}/runner.d.ts +6 -5
  187. package/dist/core/{agents → subagents}/runner.js +8 -10
  188. package/dist/core/subagents/runner.js.map +1 -0
  189. package/dist/core/{agents/tools.d.ts → subagents/tool.d.ts} +6 -6
  190. package/dist/core/{agents/tools.js → subagents/tool.js} +14 -16
  191. package/dist/core/subagents/tool.js.map +1 -0
  192. package/dist/core/tools/plan.js +2 -6
  193. package/dist/core/tools/plan.js.map +1 -1
  194. package/dist/core/tools/time.js +1 -1
  195. package/dist/core/tools/time.js.map +1 -1
  196. package/dist/core/utils/browser.d.ts +1 -0
  197. package/dist/core/utils/browser.js +25 -0
  198. package/dist/core/utils/browser.js.map +1 -0
  199. package/dist/core/utils/paths.d.ts +2 -4
  200. package/dist/core/utils/paths.js +2 -4
  201. package/dist/core/utils/paths.js.map +1 -1
  202. package/dist/daemon/approvals.d.ts +2 -2
  203. package/dist/daemon/approvals.js +51 -56
  204. package/dist/daemon/approvals.js.map +1 -1
  205. package/dist/daemon/index.js +9 -6
  206. package/dist/daemon/index.js.map +1 -1
  207. package/dist/exec/approvals.d.ts +2 -4
  208. package/dist/exec/approvals.js +16 -48
  209. package/dist/exec/approvals.js.map +1 -1
  210. package/dist/index.d.ts +13 -18
  211. package/dist/index.js +9 -11
  212. package/dist/index.js.map +1 -1
  213. package/package.json +5 -18
  214. package/dist/chat/components/ScrollView.d.ts +0 -106
  215. package/dist/chat/components/ScrollView.js +0 -80
  216. package/dist/chat/components/ScrollView.js.map +0 -1
  217. package/dist/chat/components/TranscriptViewport.d.ts +0 -9
  218. package/dist/chat/components/TranscriptViewport.js +0 -124
  219. package/dist/chat/components/TranscriptViewport.js.map +0 -1
  220. package/dist/core/agents/definitions.d.ts +0 -12
  221. package/dist/core/agents/definitions.js +0 -20
  222. package/dist/core/agents/definitions.js.map +0 -1
  223. package/dist/core/agents/index.d.ts +0 -4
  224. package/dist/core/agents/index.js +0 -5
  225. package/dist/core/agents/index.js.map +0 -1
  226. package/dist/core/agents/registry.d.ts +0 -5
  227. package/dist/core/agents/registry.js +0 -84
  228. package/dist/core/agents/registry.js.map +0 -1
  229. package/dist/core/agents/runner.js.map +0 -1
  230. package/dist/core/agents/tools.js.map +0 -1
  231. package/dist/core/inference/embedder.d.ts +0 -26
  232. package/dist/core/inference/embedder.js +0 -85
  233. package/dist/core/inference/embedder.js.map +0 -1
  234. package/dist/core/inference/index.d.ts +0 -12
  235. package/dist/core/inference/index.js +0 -20
  236. package/dist/core/inference/index.js.map +0 -1
  237. package/dist/core/inference/loader.d.ts +0 -8
  238. package/dist/core/inference/loader.js +0 -85
  239. package/dist/core/inference/loader.js.map +0 -1
  240. package/dist/core/memory/brain.d.ts +0 -24
  241. package/dist/core/memory/brain.js +0 -133
  242. package/dist/core/memory/brain.js.map +0 -1
  243. package/dist/core/memory/database.d.ts +0 -4
  244. package/dist/core/memory/database.js +0 -87
  245. package/dist/core/memory/database.js.map +0 -1
  246. package/dist/core/memory/tools.d.ts +0 -16
  247. package/dist/core/memory/tools.js +0 -105
  248. package/dist/core/memory/tools.js.map +0 -1
  249. package/dist/core/memory/types.d.ts +0 -11
  250. package/dist/core/memory/types.js +0 -2
  251. package/dist/core/memory/types.js.map +0 -1
  252. package/dist/core/prompts/skills.d.ts +0 -15
  253. package/dist/core/prompts/skills.js +0 -92
  254. package/dist/core/prompts/skills.js.map +0 -1
  255. package/dist/core/prompts/static/wiki.md +0 -25
  256. package/dist/core/wiki/converters.d.ts +0 -12
  257. package/dist/core/wiki/converters.js +0 -73
  258. package/dist/core/wiki/converters.js.map +0 -1
  259. package/dist/core/wiki/database.d.ts +0 -39
  260. package/dist/core/wiki/database.js +0 -179
  261. package/dist/core/wiki/database.js.map +0 -1
  262. package/dist/core/wiki/index.d.ts +0 -7
  263. package/dist/core/wiki/index.js +0 -5
  264. package/dist/core/wiki/index.js.map +0 -1
  265. package/dist/core/wiki/storage.d.ts +0 -37
  266. package/dist/core/wiki/storage.js +0 -197
  267. package/dist/core/wiki/storage.js.map +0 -1
  268. package/dist/core/wiki/tools.d.ts +0 -5
  269. package/dist/core/wiki/tools.js +0 -32
  270. package/dist/core/wiki/tools.js.map +0 -1
@@ -1,38 +1,34 @@
1
- import { Agent, BeforeInvocationEvent } from "@strands-agents/sdk";
1
+ import { Agent, BeforeInvocationEvent, } from "@strands-agents/sdk";
2
2
  import { create as createContext } from "../context/index.js";
3
3
  import { modelProviders } from "../models/index.js";
4
- import { createMemoryTools } from "../memory/index.js";
5
- import { createWikiTools } from "../wiki/tools.js";
6
- import { skills as createSkillsPrompt } from "../prompts/index.js";
7
- import { createRunAgentsTools, loadBuiltInAgentDefinitions, } from "../agents/index.js";
4
+ import { createRunSubagentTools, loadResearchSubagent, } from "../subagents/index.js";
8
5
  import { createByeTools, createTodoTools, createFetchTools, createFilesystemTools, createPlanTools, createSleepTools, createShellTools, createThinkingTools, createTimeTools, createWebSearchTools, } from "../tools/index.js";
9
- import { composeSystemPromptWithSessionMode, refreshAgentSystemPromptForSessionMode, registerAgentSystemPromptBaseBuilder, } from "../prompts/session-mode-appendix.js";
6
+ import { createSessionModePromptPlugin } from "../prompts/session-mode-appendix.js";
7
+ import { createAgentSkillsPlugin } from "../skills/index.js";
10
8
  import { ModeAwareToolRegistry } from "./mode-aware-tool-registry.js";
11
9
  import { applySessionMode } from "./sync-tool-registry-mode.js";
12
10
  import { clearTodoState } from "../state/todos.js";
13
- import { MODE_STATE_KEY, normalizeSessionMode, } from "../state/session-mode.js";
11
+ import { MODE_STATE_KEY } from "../state/session-mode.js";
14
12
  import { YOLO_STATE_KEY } from "../state/yolo.js";
15
13
  const SECTION_BREAK = "\n\n---\n\n";
16
- export async function create(config, system, registry, mcp, print = false, meta) {
14
+ export async function create(config, system, mcp, print = false, meta) {
17
15
  const sessionId = meta.sessionId;
18
16
  const userId = meta.userId ?? sessionId;
19
17
  const llm = await modelProviders[config.llm.provider]();
20
18
  const ctx = createContext(sessionId);
19
+ const { plugins: contextPlugins = [], ...agentContext } = ctx;
21
20
  const prefixed = await mcp.manager.listPrefixedTools();
21
+ const skillsPlugin = createAgentSkillsPlugin();
22
+ const sessionModePlugin = createSessionModePromptPlugin();
22
23
  async function buildBaseSystemPrompt() {
23
24
  await system.reload();
24
- const skillsContent = (await createSkillsPrompt(registry)).content;
25
25
  const appendNext = await mcp.manager.listServerInstructions();
26
- return [system.content, meta.systemPrompt, ...appendNext, skillsContent]
27
- .filter((x) => !!x)
26
+ return [system.content, meta.systemPrompt, ...appendNext]
27
+ .filter(Boolean)
28
28
  .join(SECTION_BREAK);
29
29
  }
30
30
  const base = await buildBaseSystemPrompt();
31
- const mode = normalizeSessionMode(meta.sessionMode);
32
- const prompt = composeSystemPromptWithSessionMode(base, mode, {});
33
31
  const model = llm.create(config.llm.model, config.llm.params);
34
- const memory = await createMemoryTools();
35
- const wiki = config.tools.wiki.enabled ? await createWikiTools() : [];
36
32
  const tools = [
37
33
  ...createByeTools(),
38
34
  ...createTimeTools(),
@@ -42,27 +38,26 @@ export async function create(config, system, registry, mcp, print = false, meta)
42
38
  ...(config.tools.filesystem.enabled ? createFilesystemTools() : []),
43
39
  ...(config.tools.shell.enabled ? createShellTools() : []),
44
40
  ...(config.search.enabled ? createWebSearchTools(config) : []),
45
- ...memory,
46
- ...wiki,
47
41
  ...createThinkingTools(),
48
42
  ...createPlanTools(),
49
43
  ...prefixed,
50
44
  ];
51
45
  if (config.tools.agents.enabled) {
52
- const definitions = loadBuiltInAgentDefinitions(config, {
46
+ const research = loadResearchSubagent(config, {
53
47
  knownTools: tools.map((entry) => entry.name),
48
+ baseSystemPrompt: base,
54
49
  });
55
- tools.push(...createRunAgentsTools({
50
+ tools.push(...createRunSubagentTools({
56
51
  parent: config.name,
57
- definitions,
52
+ research,
58
53
  tools,
59
54
  createModel: () => llm.create(config.llm.model, config.llm.params),
60
- defaultConcurrency: config.tools.agents.concurrency,
55
+ concurrency: config.tools.agents.concurrency,
61
56
  }));
62
57
  }
63
58
  const agent = new Agent({
64
59
  name: config.name,
65
- systemPrompt: prompt,
60
+ systemPrompt: base,
66
61
  model,
67
62
  appState: {
68
63
  ...(userId ? { userId } : {}),
@@ -70,15 +65,15 @@ export async function create(config, system, registry, mcp, print = false, meta)
70
65
  ...(meta.yolo ? { [YOLO_STATE_KEY]: true } : {}),
71
66
  ...(meta.sessionMode ? { [MODE_STATE_KEY]: meta.sessionMode } : {}),
72
67
  },
68
+ plugins: [skillsPlugin, sessionModePlugin, ...contextPlugins],
69
+ interventions: meta.interventions ?? [],
73
70
  tools,
74
71
  printer: print,
75
- ...ctx,
72
+ ...agentContext,
76
73
  });
77
74
  agent.addHook(BeforeInvocationEvent, async (event) => {
78
75
  clearTodoState(event.agent);
79
- refreshAgentSystemPromptForSessionMode(event.agent, await buildBaseSystemPrompt());
80
76
  });
81
- registerAgentSystemPromptBaseBuilder(agent, buildBaseSystemPrompt);
82
77
  agent._toolRegistry =
83
78
  new ModeAwareToolRegistry(agent.toolRegistry.list());
84
79
  await agent.initialize();
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/agent/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/agent/index.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { ToolValidationError } from "@strands-agents/sdk";
2
+ import { DEFAULT_SESSION_MODE } from "../modes/schema.js";
2
3
  import { isToolVisible } from "../state/tool-approvals.js";
3
4
  function toolVisibilityOptions(tool) {
4
5
  if ("mcpReadOnlyHint" in tool &&
@@ -14,7 +15,7 @@ function toolVisibilityOptions(tool) {
14
15
  */
15
16
  export class ModeAwareToolRegistry {
16
17
  _tools = new Map();
17
- mode = "default";
18
+ mode = DEFAULT_SESSION_MODE;
18
19
  constructor(tools) {
19
20
  if (tools) {
20
21
  this.add(tools);
@@ -1 +1 @@
1
- {"version":3,"file":"mode-aware-tool-registry.js","sourceRoot":"","sources":["../../../src/core/agent/mode-aware-tool-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE1D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAG3D,SAAS,qBAAqB,CAC5B,IAAU;IAEV,IACE,iBAAiB,IAAI,IAAI;QACxB,IAAsC,CAAC,eAAe,KAAK,IAAI,EAChE,CAAC;QACD,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC;IACnC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,MAAM,OAAO,qBAAqB;IACf,MAAM,GAAG,IAAI,GAAG,EAAgB,CAAC;IAC1C,IAAI,GAAgB,SAAS,CAAC;IAEtC,YAAY,KAAc;QACxB,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,cAAc,CAAC,IAAiB;QAC9B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,GAAG,CAAC,IAAmB;QACrB,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAClD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAClB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,GAAG,CAAC,IAAY;QACd,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,CAAC,CAAC,EAAE,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9D,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,CAAC,IAAY;QACjB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,IAAI;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACnD,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAC3D,CAAC;IACJ,CAAC;IAED,SAAS,CAAC,IAAU;QAClB,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAClC,MAAM,IAAI,mBAAmB,CAAC,4BAA4B,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YAClD,MAAM,IAAI,mBAAmB,CAC3B,+CAA+C,CAChD,CAAC;QACJ,CAAC;QACD,MAAM,gBAAgB,GAAG,kBAAkB,CAAC;QAC5C,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,mBAAmB,CAC3B,+EAA+E,CAChF,CAAC;QACJ,CAAC;QACD,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;YAChE,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxE,MAAM,IAAI,mBAAmB,CAC3B,6CAA6C,CAC9C,CAAC;YACJ,CAAC;QACH,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,mBAAmB,CAC3B,mBAAmB,IAAI,CAAC,IAAI,sBAAsB,CACnD,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"mode-aware-tool-registry.js","sourceRoot":"","sources":["../../../src/core/agent/mode-aware-tool-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import { InterventionHandler, InterventionActions, type BeforeToolCallEvent, type JSONValue } from "@strands-agents/sdk";
2
+ export type ToolApprovalDecision = "allow" | "always";
3
+ export type ToolApprovalResult = ToolApprovalDecision | "reject" | {
4
+ decision: "reject";
5
+ reason?: string;
6
+ };
7
+ export type ToolApprovalRequest = {
8
+ toolName: string;
9
+ description?: string;
10
+ input: unknown;
11
+ inputPreview: string;
12
+ prompt: string;
13
+ };
14
+ type ToolApprovalCallbacks = {
15
+ onPromptStart?: (request: ToolApprovalRequest, event: BeforeToolCallEvent) => Promise<void> | void;
16
+ onApproved?: (request: ToolApprovalRequest, event: BeforeToolCallEvent, decision: ToolApprovalDecision | "auto") => Promise<void> | void;
17
+ onRejected?: (request: ToolApprovalRequest, event: BeforeToolCallEvent, reason: string) => Promise<void> | void;
18
+ };
19
+ export type ToolApprovalAsk = (request: ToolApprovalRequest, event: BeforeToolCallEvent) => Promise<ToolApprovalResult>;
20
+ export type HoomanToolApprovalInterventionConfig = ToolApprovalCallbacks & {
21
+ ask: ToolApprovalAsk;
22
+ };
23
+ export declare class HoomanToolApprovalIntervention extends InterventionHandler {
24
+ readonly name = "hooman:tool-approval";
25
+ private readonly ask;
26
+ private readonly onPromptStart?;
27
+ private readonly onApproved?;
28
+ private readonly onRejected?;
29
+ constructor(config: HoomanToolApprovalInterventionConfig);
30
+ beforeToolCall(event: BeforeToolCallEvent): Promise<ReturnType<typeof InterventionActions.proceed> | ReturnType<typeof InterventionActions.deny>>;
31
+ private buildRequest;
32
+ }
33
+ export declare function normalizeApprovalResponse(response: JSONValue): ToolApprovalResult;
34
+ export {};
@@ -0,0 +1,94 @@
1
+ import { InterventionHandler, InterventionActions, } from "@strands-agents/sdk";
2
+ import { INTERNAL_ALWAYS_ALLOWED, allowToolForSession, isToolSessionAllowed, planModeWriteEditRejectionMessage, } from "../state/tool-approvals.js";
3
+ import { isYoloEnabled } from "../state/yolo.js";
4
+ const INPUT_PREVIEW_LIMIT = 1_024;
5
+ function previewInput(input) {
6
+ try {
7
+ const text = JSON.stringify(input, null, 2) ?? "null";
8
+ return text.length > INPUT_PREVIEW_LIMIT
9
+ ? `${text.slice(0, INPUT_PREVIEW_LIMIT)}\n... (truncated)`
10
+ : text;
11
+ }
12
+ catch {
13
+ return String(input);
14
+ }
15
+ }
16
+ function toRejectReason(toolName, result) {
17
+ if (typeof result === "object" && result !== null && result.reason?.trim()) {
18
+ return result.reason.trim();
19
+ }
20
+ return `Tool "${toolName}" was rejected by the user.`;
21
+ }
22
+ export class HoomanToolApprovalIntervention extends InterventionHandler {
23
+ name = "hooman:tool-approval";
24
+ ask;
25
+ onPromptStart;
26
+ onApproved;
27
+ onRejected;
28
+ constructor(config) {
29
+ super();
30
+ this.ask = config.ask;
31
+ this.onPromptStart = config.onPromptStart;
32
+ this.onApproved = config.onApproved;
33
+ this.onRejected = config.onRejected;
34
+ }
35
+ async beforeToolCall(event) {
36
+ const toolName = event.toolUse.name;
37
+ const request = this.buildRequest(event);
38
+ const planReject = planModeWriteEditRejectionMessage(event.agent, toolName, event.toolUse.input);
39
+ if (planReject) {
40
+ await this.onRejected?.(request, event, planReject);
41
+ return InterventionActions.deny(planReject);
42
+ }
43
+ if (isYoloEnabled(event.agent) ||
44
+ INTERNAL_ALWAYS_ALLOWED.has(toolName) ||
45
+ isToolSessionAllowed(event.agent, toolName, event.toolUse.input)) {
46
+ await this.onApproved?.(request, event, "auto");
47
+ return InterventionActions.proceed();
48
+ }
49
+ await this.onPromptStart?.(request, event);
50
+ const result = await this.ask(request, event);
51
+ if (result === "allow") {
52
+ await this.onApproved?.(request, event, "allow");
53
+ return InterventionActions.proceed();
54
+ }
55
+ if (result === "always") {
56
+ allowToolForSession(event.agent, toolName);
57
+ await this.onApproved?.(request, event, "always");
58
+ return InterventionActions.proceed();
59
+ }
60
+ const reason = toRejectReason(toolName, result);
61
+ await this.onRejected?.(request, event, reason);
62
+ return InterventionActions.deny(reason);
63
+ }
64
+ buildRequest(event) {
65
+ const toolName = event.toolUse.name;
66
+ const description = event.tool?.description?.trim();
67
+ const inputPreview = previewInput(event.toolUse.input);
68
+ return {
69
+ toolName,
70
+ description,
71
+ input: event.toolUse.input,
72
+ inputPreview,
73
+ prompt: `Tool "${toolName}" requires human approval. Input: ${inputPreview}`,
74
+ };
75
+ }
76
+ }
77
+ export function normalizeApprovalResponse(response) {
78
+ if (response === true) {
79
+ return "allow";
80
+ }
81
+ if (typeof response === "string") {
82
+ const normalized = response.trim().toLowerCase();
83
+ if (normalized === "y" || normalized === "yes" || normalized === "allow") {
84
+ return "allow";
85
+ }
86
+ if (normalized === "t" ||
87
+ normalized === "trust" ||
88
+ normalized === "always") {
89
+ return "always";
90
+ }
91
+ }
92
+ return "reject";
93
+ }
94
+ //# sourceMappingURL=intervention.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intervention.js","sourceRoot":"","sources":["../../../src/core/approvals/intervention.ts"],"names":[],"mappings":"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"}
@@ -12,27 +12,44 @@ export declare enum LlmProvider {
12
12
  TensorZero = "tensorzero",
13
13
  Xai = "xai"
14
14
  }
15
- declare const LlmSchema: z.ZodObject<{
15
+ declare const ResolvedLlmSchema: z.ZodObject<{
16
16
  provider: z.ZodEnum<typeof LlmProvider>;
17
17
  model: z.ZodString;
18
18
  params: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodAny>>;
19
19
  }, z.core.$strip>;
20
- declare const NamedLlmSchema: z.ZodObject<{
20
+ declare const ProviderSchema: z.ZodObject<{
21
+ provider: z.ZodEnum<typeof LlmProvider>;
22
+ params: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodAny>>;
23
+ }, z.core.$strip>;
24
+ declare const NamedProviderSchema: z.ZodObject<{
21
25
  name: z.ZodString;
22
26
  options: z.ZodObject<{
23
27
  provider: z.ZodEnum<typeof LlmProvider>;
28
+ params: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodAny>>;
29
+ }, z.core.$strip>;
30
+ }, z.core.$strip>;
31
+ declare const NamedLlmSchema: z.ZodObject<{
32
+ name: z.ZodString;
33
+ options: z.ZodObject<{
34
+ provider: z.ZodString;
24
35
  model: z.ZodString;
25
36
  params: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodAny>>;
26
37
  }, z.core.$strip>;
27
38
  default: z.ZodDefault<z.ZodBoolean>;
28
39
  }, z.core.$strip>;
29
- export declare const DEFAULT_EMBED_MODEL = "hf:unsloth/embeddinggemma-300m-GGUF/embeddinggemma-300m-Q4_0.gguf";
30
40
  declare const ConfigSchema: z.ZodPipe<z.ZodObject<{
31
41
  name: z.ZodString;
32
- llms: z.ZodArray<z.ZodObject<{
42
+ providers: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodObject<{
33
43
  name: z.ZodString;
34
44
  options: z.ZodObject<{
35
45
  provider: z.ZodEnum<typeof LlmProvider>;
46
+ params: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodAny>>;
47
+ }, z.core.$strip>;
48
+ }, z.core.$strip>>>>;
49
+ llms: z.ZodArray<z.ZodObject<{
50
+ name: z.ZodString;
51
+ options: z.ZodObject<{
52
+ provider: z.ZodString;
36
53
  model: z.ZodString;
37
54
  params: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodAny>>;
38
55
  }, z.core.$strip>;
@@ -85,12 +102,6 @@ declare const ConfigSchema: z.ZodPipe<z.ZodObject<{
85
102
  sleep: z.ZodOptional<z.ZodObject<{
86
103
  enabled: z.ZodOptional<z.ZodBoolean>;
87
104
  }, z.core.$strip>>;
88
- memory: z.ZodOptional<z.ZodObject<{
89
- enabled: z.ZodOptional<z.ZodBoolean>;
90
- }, z.core.$strip>>;
91
- wiki: z.ZodOptional<z.ZodObject<{
92
- enabled: z.ZodOptional<z.ZodBoolean>;
93
- }, z.core.$strip>>;
94
105
  agents: z.ZodOptional<z.ZodObject<{
95
106
  enabled: z.ZodOptional<z.ZodBoolean>;
96
107
  concurrency: z.ZodOptional<z.ZodNumber>;
@@ -108,10 +119,17 @@ declare const ConfigSchema: z.ZodPipe<z.ZodObject<{
108
119
  } | null | undefined>>;
109
120
  }, z.core.$strip>, z.ZodTransform<{
110
121
  name: string;
111
- llms: {
122
+ providers: {
112
123
  name: string;
113
124
  options: {
114
125
  provider: LlmProvider;
126
+ params: Record<string, any>;
127
+ };
128
+ }[];
129
+ llms: {
130
+ name: string;
131
+ options: {
132
+ provider: string;
115
133
  model: string;
116
134
  params: Record<string, any>;
117
135
  };
@@ -158,12 +176,6 @@ declare const ConfigSchema: z.ZodPipe<z.ZodObject<{
158
176
  sleep: {
159
177
  enabled: boolean;
160
178
  };
161
- memory: {
162
- enabled: boolean;
163
- };
164
- wiki: {
165
- enabled: boolean;
166
- };
167
179
  agents: {
168
180
  enabled: boolean;
169
181
  concurrency: number;
@@ -178,7 +190,7 @@ declare const ConfigSchema: z.ZodPipe<z.ZodObject<{
178
190
  llms: {
179
191
  name: string;
180
192
  options: {
181
- provider: LlmProvider;
193
+ provider: string;
182
194
  model: string;
183
195
  params: Record<string, any>;
184
196
  };
@@ -188,6 +200,13 @@ declare const ConfigSchema: z.ZodPipe<z.ZodObject<{
188
200
  ratio: number;
189
201
  keep: number;
190
202
  };
203
+ providers?: {
204
+ name: string;
205
+ options: {
206
+ provider: LlmProvider;
207
+ params: Record<string, any>;
208
+ };
209
+ }[] | null | undefined;
191
210
  search?: {
192
211
  enabled?: boolean | undefined;
193
212
  provider?: "brave" | "exa" | "firecrawl" | "serper" | "tavily" | undefined;
@@ -229,12 +248,6 @@ declare const ConfigSchema: z.ZodPipe<z.ZodObject<{
229
248
  sleep?: {
230
249
  enabled?: boolean | undefined;
231
250
  } | undefined;
232
- memory?: {
233
- enabled?: boolean | undefined;
234
- } | undefined;
235
- wiki?: {
236
- enabled?: boolean | undefined;
237
- } | undefined;
238
251
  agents?: {
239
252
  enabled?: boolean | undefined;
240
253
  concurrency?: number | undefined;
@@ -242,12 +255,17 @@ declare const ConfigSchema: z.ZodPipe<z.ZodObject<{
242
255
  } | null | undefined;
243
256
  }>>;
244
257
  export type ConfigData = z.infer<typeof ConfigSchema>;
245
- export type LlmConfig = z.infer<typeof LlmSchema>;
258
+ export type ProviderConfig = z.infer<typeof ProviderSchema>;
259
+ export type NamedProviderConfig = z.infer<typeof NamedProviderSchema>;
260
+ export type LlmConfig = z.infer<typeof ResolvedLlmSchema>;
246
261
  export type NamedLlmConfig = z.infer<typeof NamedLlmSchema>;
262
+ export type ResolvedNamedLlmConfig = {
263
+ name: string;
264
+ options: LlmConfig;
265
+ default: boolean;
266
+ };
247
267
  export type CompactionConfig = ConfigData["compaction"];
248
268
  export type PromptsConfig = ConfigData["prompts"];
249
- export type MemoryConfig = ConfigData["tools"]["memory"];
250
- export type WikiConfig = ConfigData["tools"]["wiki"];
251
269
  export type SearchConfig = ConfigData["search"];
252
270
  export type ToolsConfig = ConfigData["tools"];
253
271
  export declare class Config {
@@ -255,8 +273,12 @@ export declare class Config {
255
273
  private readonly path;
256
274
  constructor(path: string);
257
275
  get name(): string;
276
+ private resolveNamedLlm;
277
+ get providers(): NamedProviderConfig[];
258
278
  get llm(): LlmConfig;
259
279
  get llms(): NamedLlmConfig[];
280
+ get resolvedLlms(): ResolvedNamedLlmConfig[];
281
+ resolveLlm(name: string): ResolvedNamedLlmConfig | undefined;
260
282
  get search(): SearchConfig;
261
283
  get prompts(): PromptsConfig;
262
284
  get tools(): ToolsConfig;
@@ -14,8 +14,21 @@ export var LlmProvider;
14
14
  LlmProvider["TensorZero"] = "tensorzero";
15
15
  LlmProvider["Xai"] = "xai";
16
16
  })(LlmProvider || (LlmProvider = {}));
17
- const LlmSchema = z.object({
17
+ const ResolvedLlmSchema = z.object({
18
+ provider: z.nativeEnum(LlmProvider),
19
+ model: z.string().min(1),
20
+ params: z.record(z.string(), z.any()).default({}),
21
+ });
22
+ const ProviderSchema = z.object({
18
23
  provider: z.nativeEnum(LlmProvider),
24
+ params: z.record(z.string(), z.any()).default({}),
25
+ });
26
+ const NamedProviderSchema = z.object({
27
+ name: z.string().min(1),
28
+ options: ProviderSchema,
29
+ });
30
+ const LlmSchema = z.object({
31
+ provider: z.string().min(1),
19
32
  model: z.string().min(1),
20
33
  params: z.record(z.string(), z.any()).default({}),
21
34
  });
@@ -38,10 +51,6 @@ const DEFAULT_PROMPTS = {
38
51
  execution: true,
39
52
  guardrails: true,
40
53
  };
41
- export const DEFAULT_EMBED_MODEL = "hf:unsloth/embeddinggemma-300m-GGUF/embeddinggemma-300m-Q4_0.gguf";
42
- const MemoryPartialSchema = z.object({
43
- enabled: z.boolean().optional(),
44
- });
45
54
  const ToolTogglePartialSchema = z.object({
46
55
  enabled: z.boolean().optional(),
47
56
  });
@@ -97,13 +106,12 @@ const ToolsPartialSchema = z.object({
97
106
  filesystem: ToolTogglePartialSchema.optional(),
98
107
  shell: ToolTogglePartialSchema.optional(),
99
108
  sleep: ToolTogglePartialSchema.optional(),
100
- memory: MemoryPartialSchema.optional(),
101
- wiki: ToolTogglePartialSchema.optional(),
102
109
  agents: AgentsPartialSchema.optional(),
103
110
  });
104
111
  const ConfigSchema = z
105
112
  .object({
106
113
  name: z.string().min(1),
114
+ providers: z.array(NamedProviderSchema).nullish(),
107
115
  llms: z.array(NamedLlmSchema).min(1),
108
116
  search: SearchPartialSchema.nullish(),
109
117
  prompts: PromptsPartialSchema.nullish(),
@@ -112,12 +120,35 @@ const ConfigSchema = z
112
120
  ratio: c?.ratio ?? DEFAULT_COMPACTION.ratio,
113
121
  keep: c?.keep ?? DEFAULT_COMPACTION.keep,
114
122
  })),
123
+ })
124
+ .superRefine((input, ctx) => {
125
+ const seenProviders = new Set();
126
+ for (const provider of input.providers ?? []) {
127
+ if (seenProviders.has(provider.name)) {
128
+ ctx.addIssue({
129
+ code: z.ZodIssueCode.custom,
130
+ message: `Duplicate provider name: "${provider.name}".`,
131
+ path: ["providers"],
132
+ });
133
+ continue;
134
+ }
135
+ seenProviders.add(provider.name);
136
+ }
137
+ for (const llm of input.llms) {
138
+ const ref = llm.options.provider;
139
+ if (!seenProviders.has(ref)) {
140
+ ctx.addIssue({
141
+ code: z.ZodIssueCode.custom,
142
+ message: `LLM "${llm.name}" references unknown provider "${ref}".`,
143
+ path: ["llms"],
144
+ });
145
+ }
146
+ }
115
147
  })
116
148
  .transform((input) => {
117
- const memory = input.tools?.memory;
118
- const wiki = input.tools?.wiki;
119
149
  return {
120
150
  name: input.name,
151
+ providers: input.providers ?? [],
121
152
  llms: input.llms,
122
153
  search: {
123
154
  enabled: input.search?.enabled ?? false,
@@ -160,12 +191,6 @@ const ConfigSchema = z
160
191
  sleep: {
161
192
  enabled: input.tools?.sleep?.enabled ?? true,
162
193
  },
163
- memory: {
164
- enabled: memory?.enabled ?? false,
165
- },
166
- wiki: {
167
- enabled: wiki?.enabled ?? false,
168
- },
169
194
  agents: {
170
195
  enabled: input.tools?.agents?.enabled ?? true,
171
196
  concurrency: input.tools?.agents?.concurrency ?? 3,
@@ -176,11 +201,20 @@ const ConfigSchema = z
176
201
  });
177
202
  const defaultConfigData = () => ({
178
203
  name: "Hooman",
204
+ providers: [
205
+ {
206
+ name: "ollama-local",
207
+ options: {
208
+ provider: LlmProvider.Ollama,
209
+ params: {},
210
+ },
211
+ },
212
+ ],
179
213
  llms: [
180
214
  {
181
215
  name: "Default",
182
216
  options: {
183
- provider: LlmProvider.Ollama,
217
+ provider: "ollama-local",
184
218
  model: "gemma4:e4b",
185
219
  params: {},
186
220
  },
@@ -213,12 +247,6 @@ const defaultConfigData = () => ({
213
247
  sleep: {
214
248
  enabled: true,
215
249
  },
216
- memory: {
217
- enabled: false,
218
- },
219
- wiki: {
220
- enabled: false,
221
- },
222
250
  agents: {
223
251
  enabled: true,
224
252
  concurrency: 2,
@@ -239,13 +267,47 @@ export class Config {
239
267
  get name() {
240
268
  return this.data.name;
241
269
  }
270
+ resolveNamedLlm(entry) {
271
+ const matched = this.data.providers.find((p) => p.name === entry.options.provider);
272
+ if (!matched) {
273
+ throw new Error(`LLM "${entry.name}" references unknown provider "${entry.options.provider}".`);
274
+ }
275
+ return {
276
+ name: entry.name,
277
+ default: entry.default,
278
+ options: {
279
+ provider: matched.options.provider,
280
+ model: entry.options.model,
281
+ params: {
282
+ ...matched.options.params,
283
+ ...entry.options.params,
284
+ },
285
+ },
286
+ };
287
+ }
288
+ get providers() {
289
+ return this.data.providers.map((provider) => ({
290
+ ...provider,
291
+ options: {
292
+ ...provider.options,
293
+ params: { ...provider.options.params },
294
+ },
295
+ }));
296
+ }
242
297
  get llm() {
243
298
  const found = this.data.llms.find((m) => m.default) ?? this.data.llms[0];
244
- return { ...found.options };
299
+ return { ...this.resolveNamedLlm(found).options };
245
300
  }
246
301
  get llms() {
247
302
  return this.data.llms.map((m) => ({ ...m, options: { ...m.options } }));
248
303
  }
304
+ get resolvedLlms() {
305
+ return this.data.llms.map((entry) => this.resolveNamedLlm(entry));
306
+ }
307
+ resolveLlm(name) {
308
+ const found = this.data.llms.find((entry) => entry.name === name);
309
+ return found ? this.resolveNamedLlm(found) : undefined;
310
+ }
249
311
  get search() {
250
312
  return {
251
313
  ...this.data.search,
@@ -267,8 +329,6 @@ export class Config {
267
329
  filesystem: { ...this.data.tools.filesystem },
268
330
  shell: { ...this.data.tools.shell },
269
331
  sleep: { ...this.data.tools.sleep },
270
- memory: { ...this.data.tools.memory },
271
- wiki: { ...this.data.tools.wiki },
272
332
  agents: { ...this.data.tools.agents },
273
333
  };
274
334
  }