hoomanjs 1.29.2 → 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 (273) 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 -28
  72. package/dist/core/config.js +85 -26
  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 -9
  235. package/dist/core/inference/index.js +0 -13
  236. package/dist/core/inference/index.js.map +0 -1
  237. package/dist/core/inference/loader.d.ts +0 -16
  238. package/dist/core/inference/loader.js +0 -129
  239. package/dist/core/inference/loader.js.map +0 -1
  240. package/dist/core/inference/reranker.d.ts +0 -28
  241. package/dist/core/inference/reranker.js +0 -66
  242. package/dist/core/inference/reranker.js.map +0 -1
  243. package/dist/core/memory/brain.d.ts +0 -25
  244. package/dist/core/memory/brain.js +0 -137
  245. package/dist/core/memory/brain.js.map +0 -1
  246. package/dist/core/memory/database.d.ts +0 -4
  247. package/dist/core/memory/database.js +0 -87
  248. package/dist/core/memory/database.js.map +0 -1
  249. package/dist/core/memory/tools.d.ts +0 -16
  250. package/dist/core/memory/tools.js +0 -110
  251. package/dist/core/memory/tools.js.map +0 -1
  252. package/dist/core/memory/types.d.ts +0 -11
  253. package/dist/core/memory/types.js +0 -2
  254. package/dist/core/memory/types.js.map +0 -1
  255. package/dist/core/prompts/skills.d.ts +0 -15
  256. package/dist/core/prompts/skills.js +0 -92
  257. package/dist/core/prompts/skills.js.map +0 -1
  258. package/dist/core/prompts/static/wiki.md +0 -25
  259. package/dist/core/wiki/converters.d.ts +0 -12
  260. package/dist/core/wiki/converters.js +0 -73
  261. package/dist/core/wiki/converters.js.map +0 -1
  262. package/dist/core/wiki/database.d.ts +0 -39
  263. package/dist/core/wiki/database.js +0 -177
  264. package/dist/core/wiki/database.js.map +0 -1
  265. package/dist/core/wiki/index.d.ts +0 -7
  266. package/dist/core/wiki/index.js +0 -5
  267. package/dist/core/wiki/index.js.map +0 -1
  268. package/dist/core/wiki/storage.d.ts +0 -38
  269. package/dist/core/wiki/storage.js +0 -206
  270. package/dist/core/wiki/storage.js.map +0 -1
  271. package/dist/core/wiki/tools.d.ts +0 -5
  272. package/dist/core/wiki/tools.js +0 -32
  273. 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":"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"}
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,28 +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
- export declare const DEFAULT_RERANK_MODEL = "hf:ggml-org/Qwen3-Reranker-0.6B-Q8_0-GGUF/qwen3-reranker-0.6b-q8_0.gguf";
31
40
  declare const ConfigSchema: z.ZodPipe<z.ZodObject<{
32
41
  name: z.ZodString;
33
- llms: z.ZodArray<z.ZodObject<{
42
+ providers: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodObject<{
34
43
  name: z.ZodString;
35
44
  options: z.ZodObject<{
36
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;
37
53
  model: z.ZodString;
38
54
  params: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodAny>>;
39
55
  }, z.core.$strip>;
@@ -86,12 +102,6 @@ declare const ConfigSchema: z.ZodPipe<z.ZodObject<{
86
102
  sleep: z.ZodOptional<z.ZodObject<{
87
103
  enabled: z.ZodOptional<z.ZodBoolean>;
88
104
  }, z.core.$strip>>;
89
- memory: z.ZodOptional<z.ZodObject<{
90
- enabled: z.ZodOptional<z.ZodBoolean>;
91
- }, z.core.$strip>>;
92
- wiki: z.ZodOptional<z.ZodObject<{
93
- enabled: z.ZodOptional<z.ZodBoolean>;
94
- }, z.core.$strip>>;
95
105
  agents: z.ZodOptional<z.ZodObject<{
96
106
  enabled: z.ZodOptional<z.ZodBoolean>;
97
107
  concurrency: z.ZodOptional<z.ZodNumber>;
@@ -109,10 +119,17 @@ declare const ConfigSchema: z.ZodPipe<z.ZodObject<{
109
119
  } | null | undefined>>;
110
120
  }, z.core.$strip>, z.ZodTransform<{
111
121
  name: string;
112
- llms: {
122
+ providers: {
113
123
  name: string;
114
124
  options: {
115
125
  provider: LlmProvider;
126
+ params: Record<string, any>;
127
+ };
128
+ }[];
129
+ llms: {
130
+ name: string;
131
+ options: {
132
+ provider: string;
116
133
  model: string;
117
134
  params: Record<string, any>;
118
135
  };
@@ -159,12 +176,6 @@ declare const ConfigSchema: z.ZodPipe<z.ZodObject<{
159
176
  sleep: {
160
177
  enabled: boolean;
161
178
  };
162
- memory: {
163
- enabled: boolean;
164
- };
165
- wiki: {
166
- enabled: boolean;
167
- };
168
179
  agents: {
169
180
  enabled: boolean;
170
181
  concurrency: number;
@@ -179,7 +190,7 @@ declare const ConfigSchema: z.ZodPipe<z.ZodObject<{
179
190
  llms: {
180
191
  name: string;
181
192
  options: {
182
- provider: LlmProvider;
193
+ provider: string;
183
194
  model: string;
184
195
  params: Record<string, any>;
185
196
  };
@@ -189,6 +200,13 @@ declare const ConfigSchema: z.ZodPipe<z.ZodObject<{
189
200
  ratio: number;
190
201
  keep: number;
191
202
  };
203
+ providers?: {
204
+ name: string;
205
+ options: {
206
+ provider: LlmProvider;
207
+ params: Record<string, any>;
208
+ };
209
+ }[] | null | undefined;
192
210
  search?: {
193
211
  enabled?: boolean | undefined;
194
212
  provider?: "brave" | "exa" | "firecrawl" | "serper" | "tavily" | undefined;
@@ -230,12 +248,6 @@ declare const ConfigSchema: z.ZodPipe<z.ZodObject<{
230
248
  sleep?: {
231
249
  enabled?: boolean | undefined;
232
250
  } | undefined;
233
- memory?: {
234
- enabled?: boolean | undefined;
235
- } | undefined;
236
- wiki?: {
237
- enabled?: boolean | undefined;
238
- } | undefined;
239
251
  agents?: {
240
252
  enabled?: boolean | undefined;
241
253
  concurrency?: number | undefined;
@@ -243,12 +255,17 @@ declare const ConfigSchema: z.ZodPipe<z.ZodObject<{
243
255
  } | null | undefined;
244
256
  }>>;
245
257
  export type ConfigData = z.infer<typeof ConfigSchema>;
246
- 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>;
247
261
  export type NamedLlmConfig = z.infer<typeof NamedLlmSchema>;
262
+ export type ResolvedNamedLlmConfig = {
263
+ name: string;
264
+ options: LlmConfig;
265
+ default: boolean;
266
+ };
248
267
  export type CompactionConfig = ConfigData["compaction"];
249
268
  export type PromptsConfig = ConfigData["prompts"];
250
- export type MemoryConfig = ConfigData["tools"]["memory"];
251
- export type WikiConfig = ConfigData["tools"]["wiki"];
252
269
  export type SearchConfig = ConfigData["search"];
253
270
  export type ToolsConfig = ConfigData["tools"];
254
271
  export declare class Config {
@@ -256,8 +273,12 @@ export declare class Config {
256
273
  private readonly path;
257
274
  constructor(path: string);
258
275
  get name(): string;
276
+ private resolveNamedLlm;
277
+ get providers(): NamedProviderConfig[];
259
278
  get llm(): LlmConfig;
260
279
  get llms(): NamedLlmConfig[];
280
+ get resolvedLlms(): ResolvedNamedLlmConfig[];
281
+ resolveLlm(name: string): ResolvedNamedLlmConfig | undefined;
261
282
  get search(): SearchConfig;
262
283
  get prompts(): PromptsConfig;
263
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,11 +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
- export const DEFAULT_RERANK_MODEL = "hf:ggml-org/Qwen3-Reranker-0.6B-Q8_0-GGUF/qwen3-reranker-0.6b-q8_0.gguf";
43
- const MemoryPartialSchema = z.object({
44
- enabled: z.boolean().optional(),
45
- });
46
54
  const ToolTogglePartialSchema = z.object({
47
55
  enabled: z.boolean().optional(),
48
56
  });
@@ -98,13 +106,12 @@ const ToolsPartialSchema = z.object({
98
106
  filesystem: ToolTogglePartialSchema.optional(),
99
107
  shell: ToolTogglePartialSchema.optional(),
100
108
  sleep: ToolTogglePartialSchema.optional(),
101
- memory: MemoryPartialSchema.optional(),
102
- wiki: ToolTogglePartialSchema.optional(),
103
109
  agents: AgentsPartialSchema.optional(),
104
110
  });
105
111
  const ConfigSchema = z
106
112
  .object({
107
113
  name: z.string().min(1),
114
+ providers: z.array(NamedProviderSchema).nullish(),
108
115
  llms: z.array(NamedLlmSchema).min(1),
109
116
  search: SearchPartialSchema.nullish(),
110
117
  prompts: PromptsPartialSchema.nullish(),
@@ -113,12 +120,35 @@ const ConfigSchema = z
113
120
  ratio: c?.ratio ?? DEFAULT_COMPACTION.ratio,
114
121
  keep: c?.keep ?? DEFAULT_COMPACTION.keep,
115
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
+ }
116
147
  })
117
148
  .transform((input) => {
118
- const memory = input.tools?.memory;
119
- const wiki = input.tools?.wiki;
120
149
  return {
121
150
  name: input.name,
151
+ providers: input.providers ?? [],
122
152
  llms: input.llms,
123
153
  search: {
124
154
  enabled: input.search?.enabled ?? false,
@@ -161,12 +191,6 @@ const ConfigSchema = z
161
191
  sleep: {
162
192
  enabled: input.tools?.sleep?.enabled ?? true,
163
193
  },
164
- memory: {
165
- enabled: memory?.enabled ?? false,
166
- },
167
- wiki: {
168
- enabled: wiki?.enabled ?? false,
169
- },
170
194
  agents: {
171
195
  enabled: input.tools?.agents?.enabled ?? true,
172
196
  concurrency: input.tools?.agents?.concurrency ?? 3,
@@ -177,11 +201,20 @@ const ConfigSchema = z
177
201
  });
178
202
  const defaultConfigData = () => ({
179
203
  name: "Hooman",
204
+ providers: [
205
+ {
206
+ name: "ollama-local",
207
+ options: {
208
+ provider: LlmProvider.Ollama,
209
+ params: {},
210
+ },
211
+ },
212
+ ],
180
213
  llms: [
181
214
  {
182
215
  name: "Default",
183
216
  options: {
184
- provider: LlmProvider.Ollama,
217
+ provider: "ollama-local",
185
218
  model: "gemma4:e4b",
186
219
  params: {},
187
220
  },
@@ -214,12 +247,6 @@ const defaultConfigData = () => ({
214
247
  sleep: {
215
248
  enabled: true,
216
249
  },
217
- memory: {
218
- enabled: false,
219
- },
220
- wiki: {
221
- enabled: false,
222
- },
223
250
  agents: {
224
251
  enabled: true,
225
252
  concurrency: 2,
@@ -240,13 +267,47 @@ export class Config {
240
267
  get name() {
241
268
  return this.data.name;
242
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
+ }
243
297
  get llm() {
244
298
  const found = this.data.llms.find((m) => m.default) ?? this.data.llms[0];
245
- return { ...found.options };
299
+ return { ...this.resolveNamedLlm(found).options };
246
300
  }
247
301
  get llms() {
248
302
  return this.data.llms.map((m) => ({ ...m, options: { ...m.options } }));
249
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
+ }
250
311
  get search() {
251
312
  return {
252
313
  ...this.data.search,
@@ -268,8 +329,6 @@ export class Config {
268
329
  filesystem: { ...this.data.tools.filesystem },
269
330
  shell: { ...this.data.tools.shell },
270
331
  sleep: { ...this.data.tools.sleep },
271
- memory: { ...this.data.tools.memory },
272
- wiki: { ...this.data.tools.wiki },
273
332
  agents: { ...this.data.tools.agents },
274
333
  };
275
334
  }