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.
- package/README.md +216 -69
- package/dist/acp/acp-agent.d.ts +5 -5
- package/dist/acp/acp-agent.js +55 -54
- package/dist/acp/acp-agent.js.map +1 -1
- package/dist/acp/approvals.d.ts +3 -3
- package/dist/acp/approvals.js +73 -115
- package/dist/acp/approvals.js.map +1 -1
- package/dist/acp/sessions/options.js +11 -25
- package/dist/acp/sessions/options.js.map +1 -1
- package/dist/acp/utils/tool-kind.js +1 -5
- package/dist/acp/utils/tool-kind.js.map +1 -1
- package/dist/chat/app.d.ts +5 -1
- package/dist/chat/app.js +322 -202
- package/dist/chat/app.js.map +1 -1
- package/dist/chat/approvals.d.ts +4 -3
- package/dist/chat/approvals.js +11 -45
- package/dist/chat/approvals.js.map +1 -1
- package/dist/chat/components/ChatMessage.d.ts +1 -2
- package/dist/chat/components/ChatMessage.js +4 -5
- package/dist/chat/components/ChatMessage.js.map +1 -1
- package/dist/chat/components/EmptyChatBanner.js +2 -3
- package/dist/chat/components/EmptyChatBanner.js.map +1 -1
- package/dist/chat/components/StatusBar.js +6 -2
- package/dist/chat/components/StatusBar.js.map +1 -1
- package/dist/chat/components/ThoughtEvent.d.ts +6 -0
- package/dist/chat/components/ThoughtEvent.js +30 -0
- package/dist/chat/components/ThoughtEvent.js.map +1 -0
- package/dist/chat/components/ToolEvent.js +1 -1
- package/dist/chat/components/ToolEvent.js.map +1 -1
- package/dist/chat/components/Transcript.d.ts +7 -2
- package/dist/chat/components/Transcript.js +6 -2
- package/dist/chat/components/Transcript.js.map +1 -1
- package/dist/chat/components/markdown/BlockRenderer.js +7 -7
- package/dist/chat/components/markdown/BlockRenderer.js.map +1 -1
- package/dist/chat/components/markdown/MarkdownMessage.js +1 -1
- package/dist/chat/components/markdown/MarkdownMessage.js.map +1 -1
- package/dist/chat/components/shared.js +2 -0
- package/dist/chat/components/shared.js.map +1 -1
- package/dist/chat/index.d.ts +4 -0
- package/dist/chat/index.js +17 -3
- package/dist/chat/index.js.map +1 -1
- package/dist/chat/steering.d.ts +20 -0
- package/dist/chat/steering.js +67 -0
- package/dist/chat/steering.js.map +1 -0
- package/dist/chat/types.d.ts +5 -1
- package/dist/cli.js +91 -13
- package/dist/cli.js.map +1 -1
- package/dist/configure/app.d.ts +1 -1
- package/dist/configure/app.js +581 -303
- package/dist/configure/app.js.map +1 -1
- package/dist/configure/components/MenuScreen.d.ts +4 -2
- package/dist/configure/components/MenuScreen.js +33 -6
- package/dist/configure/components/MenuScreen.js.map +1 -1
- package/dist/configure/components/SelectMenuItem.d.ts +1 -0
- package/dist/configure/components/SelectMenuItem.js +19 -10
- package/dist/configure/components/SelectMenuItem.js.map +1 -1
- package/dist/configure/index.js +4 -2
- package/dist/configure/index.js.map +1 -1
- package/dist/configure/types.d.ts +14 -12
- package/dist/configure/utils.d.ts +2 -0
- package/dist/configure/utils.js +21 -2
- package/dist/configure/utils.js.map +1 -1
- package/dist/core/agent/index.d.ts +3 -3
- package/dist/core/agent/index.js +20 -25
- package/dist/core/agent/index.js.map +1 -1
- package/dist/core/agent/mode-aware-tool-registry.js +2 -1
- package/dist/core/agent/mode-aware-tool-registry.js.map +1 -1
- package/dist/core/approvals/intervention.d.ts +34 -0
- package/dist/core/approvals/intervention.js +94 -0
- package/dist/core/approvals/intervention.js.map +1 -0
- package/dist/core/config.d.ts +49 -27
- package/dist/core/config.js +85 -25
- package/dist/core/config.js.map +1 -1
- package/dist/core/context/index.d.ts +11 -2
- package/dist/core/context/index.js +54 -4
- package/dist/core/context/index.js.map +1 -1
- package/dist/core/context/model-extractor.d.ts +13 -0
- package/dist/core/context/model-extractor.js +98 -0
- package/dist/core/context/model-extractor.js.map +1 -0
- package/dist/core/index.d.ts +6 -2
- package/dist/core/index.js +6 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/mcp/config.d.ts +28 -0
- package/dist/core/mcp/index.d.ts +5 -3
- package/dist/core/mcp/index.js +4 -2
- package/dist/core/mcp/index.js.map +1 -1
- package/dist/core/mcp/manager.d.ts +14 -1
- package/dist/core/mcp/manager.js +76 -4
- package/dist/core/mcp/manager.js.map +1 -1
- package/dist/core/mcp/oauth/callback-server.d.ts +16 -0
- package/dist/core/mcp/oauth/callback-server.js +134 -0
- package/dist/core/mcp/oauth/callback-server.js.map +1 -0
- package/dist/core/mcp/oauth/identity.d.ts +9 -0
- package/dist/core/mcp/oauth/identity.js +31 -0
- package/dist/core/mcp/oauth/identity.js.map +1 -0
- package/dist/core/mcp/oauth/index.d.ts +11 -0
- package/dist/core/mcp/oauth/index.js +15 -0
- package/dist/core/mcp/oauth/index.js.map +1 -0
- package/dist/core/mcp/oauth/provider.d.ts +43 -0
- package/dist/core/mcp/oauth/provider.js +203 -0
- package/dist/core/mcp/oauth/provider.js.map +1 -0
- package/dist/core/mcp/oauth/service.d.ts +29 -0
- package/dist/core/mcp/oauth/service.js +139 -0
- package/dist/core/mcp/oauth/service.js.map +1 -0
- package/dist/core/mcp/oauth/store.d.ts +14 -0
- package/dist/core/mcp/oauth/store.js +86 -0
- package/dist/core/mcp/oauth/store.js.map +1 -0
- package/dist/core/mcp/oauth/types.d.ts +87 -0
- package/dist/core/mcp/oauth/types.js +45 -0
- package/dist/core/mcp/oauth/types.js.map +1 -0
- package/dist/core/mcp/types.d.ts +56 -0
- package/dist/core/mcp/types.js +3 -0
- package/dist/core/mcp/types.js.map +1 -1
- package/dist/core/memory/file-store.d.ts +24 -0
- package/dist/core/memory/file-store.js +151 -0
- package/dist/core/memory/file-store.js.map +1 -0
- package/dist/core/memory/index.d.ts +2 -5
- package/dist/core/memory/index.js +2 -3
- package/dist/core/memory/index.js.map +1 -1
- package/dist/core/memory/runtime.d.ts +4 -0
- package/dist/core/memory/runtime.js +37 -0
- package/dist/core/memory/runtime.js.map +1 -0
- package/dist/core/models/anthropic.js +24 -1
- package/dist/core/models/anthropic.js.map +1 -1
- package/dist/core/models/moonshot.js +33 -1
- package/dist/core/models/moonshot.js.map +1 -1
- package/dist/core/modes/definitions.d.ts +19 -0
- package/dist/core/modes/definitions.js +99 -0
- package/dist/core/modes/definitions.js.map +1 -0
- package/dist/core/modes/index.d.ts +3 -0
- package/dist/core/modes/index.js +4 -0
- package/dist/core/modes/index.js.map +1 -0
- package/dist/core/modes/registry.d.ts +9 -0
- package/dist/core/modes/registry.js +57 -0
- package/dist/core/modes/registry.js.map +1 -0
- package/dist/core/modes/schema.d.ts +5 -0
- package/dist/core/modes/schema.js +6 -0
- package/dist/core/modes/schema.js.map +1 -0
- package/dist/core/prompts/agents/research.md +8 -8
- package/dist/core/prompts/bundled.d.ts +3 -0
- package/dist/core/prompts/bundled.js +14 -0
- package/dist/core/prompts/bundled.js.map +1 -0
- package/dist/core/prompts/environment.d.ts +0 -1
- package/dist/core/prompts/environment.js +0 -2
- package/dist/core/prompts/environment.js.map +1 -1
- package/dist/core/prompts/index.d.ts +1 -4
- package/dist/core/prompts/index.js +1 -7
- package/dist/core/prompts/index.js.map +1 -1
- package/dist/core/prompts/modes/agent.md +3 -0
- package/dist/core/prompts/modes/ask.md +5 -3
- package/dist/core/prompts/modes/plan.md +2 -2
- package/dist/core/prompts/session-mode-appendix.d.ts +3 -9
- package/dist/core/prompts/session-mode-appendix.js +32 -69
- package/dist/core/prompts/session-mode-appendix.js.map +1 -1
- package/dist/core/prompts/static/environment.md +2 -2
- package/dist/core/prompts/static/init.md +25 -0
- package/dist/core/prompts/static/memory.md +9 -123
- package/dist/core/prompts/static/planning.md +1 -1
- package/dist/core/prompts/static/skills.md +6 -5
- package/dist/core/prompts/static/subagents.md +2 -2
- package/dist/core/prompts/static/web-search.md +2 -1
- package/dist/core/prompts/system.js +8 -22
- package/dist/core/prompts/system.js.map +1 -1
- package/dist/core/skills/built-in/hooman-config/SKILL.md +105 -32
- package/dist/core/skills/built-in/hooman-skills/SKILL.md +1 -1
- package/dist/core/skills/index.d.ts +1 -0
- package/dist/core/skills/index.js +1 -0
- package/dist/core/skills/index.js.map +1 -1
- package/dist/core/skills/plugin.d.ts +7 -0
- package/dist/core/skills/plugin.js +40 -0
- package/dist/core/skills/plugin.js.map +1 -0
- package/dist/core/state/agent-app-state.d.ts +1 -1
- package/dist/core/state/agent-app-state.js +1 -1
- package/dist/core/state/session-mode.d.ts +2 -9
- package/dist/core/state/session-mode.js +4 -12
- package/dist/core/state/session-mode.js.map +1 -1
- package/dist/core/state/tool-approvals.d.ts +4 -8
- package/dist/core/state/tool-approvals.js +14 -76
- package/dist/core/state/tool-approvals.js.map +1 -1
- package/dist/core/subagents/index.d.ts +3 -0
- package/dist/core/subagents/index.js +4 -0
- package/dist/core/subagents/index.js.map +1 -0
- package/dist/core/subagents/research.d.ts +16 -0
- package/dist/core/subagents/research.js +58 -0
- package/dist/core/subagents/research.js.map +1 -0
- package/dist/core/{agents → subagents}/runner.d.ts +6 -5
- package/dist/core/{agents → subagents}/runner.js +8 -10
- package/dist/core/subagents/runner.js.map +1 -0
- package/dist/core/{agents/tools.d.ts → subagents/tool.d.ts} +6 -6
- package/dist/core/{agents/tools.js → subagents/tool.js} +14 -16
- package/dist/core/subagents/tool.js.map +1 -0
- package/dist/core/tools/plan.js +2 -6
- package/dist/core/tools/plan.js.map +1 -1
- package/dist/core/tools/time.js +1 -1
- package/dist/core/tools/time.js.map +1 -1
- package/dist/core/utils/browser.d.ts +1 -0
- package/dist/core/utils/browser.js +25 -0
- package/dist/core/utils/browser.js.map +1 -0
- package/dist/core/utils/paths.d.ts +2 -4
- package/dist/core/utils/paths.js +2 -4
- package/dist/core/utils/paths.js.map +1 -1
- package/dist/daemon/approvals.d.ts +2 -2
- package/dist/daemon/approvals.js +51 -56
- package/dist/daemon/approvals.js.map +1 -1
- package/dist/daemon/index.js +9 -6
- package/dist/daemon/index.js.map +1 -1
- package/dist/exec/approvals.d.ts +2 -4
- package/dist/exec/approvals.js +16 -48
- package/dist/exec/approvals.js.map +1 -1
- package/dist/index.d.ts +13 -18
- package/dist/index.js +9 -11
- package/dist/index.js.map +1 -1
- package/package.json +5 -18
- package/dist/chat/components/ScrollView.d.ts +0 -106
- package/dist/chat/components/ScrollView.js +0 -80
- package/dist/chat/components/ScrollView.js.map +0 -1
- package/dist/chat/components/TranscriptViewport.d.ts +0 -9
- package/dist/chat/components/TranscriptViewport.js +0 -124
- package/dist/chat/components/TranscriptViewport.js.map +0 -1
- package/dist/core/agents/definitions.d.ts +0 -12
- package/dist/core/agents/definitions.js +0 -20
- package/dist/core/agents/definitions.js.map +0 -1
- package/dist/core/agents/index.d.ts +0 -4
- package/dist/core/agents/index.js +0 -5
- package/dist/core/agents/index.js.map +0 -1
- package/dist/core/agents/registry.d.ts +0 -5
- package/dist/core/agents/registry.js +0 -84
- package/dist/core/agents/registry.js.map +0 -1
- package/dist/core/agents/runner.js.map +0 -1
- package/dist/core/agents/tools.js.map +0 -1
- package/dist/core/inference/embedder.d.ts +0 -26
- package/dist/core/inference/embedder.js +0 -85
- package/dist/core/inference/embedder.js.map +0 -1
- package/dist/core/inference/index.d.ts +0 -12
- package/dist/core/inference/index.js +0 -20
- package/dist/core/inference/index.js.map +0 -1
- package/dist/core/inference/loader.d.ts +0 -8
- package/dist/core/inference/loader.js +0 -85
- package/dist/core/inference/loader.js.map +0 -1
- package/dist/core/memory/brain.d.ts +0 -24
- package/dist/core/memory/brain.js +0 -133
- package/dist/core/memory/brain.js.map +0 -1
- package/dist/core/memory/database.d.ts +0 -4
- package/dist/core/memory/database.js +0 -87
- package/dist/core/memory/database.js.map +0 -1
- package/dist/core/memory/tools.d.ts +0 -16
- package/dist/core/memory/tools.js +0 -105
- package/dist/core/memory/tools.js.map +0 -1
- package/dist/core/memory/types.d.ts +0 -11
- package/dist/core/memory/types.js +0 -2
- package/dist/core/memory/types.js.map +0 -1
- package/dist/core/prompts/skills.d.ts +0 -15
- package/dist/core/prompts/skills.js +0 -92
- package/dist/core/prompts/skills.js.map +0 -1
- package/dist/core/prompts/static/wiki.md +0 -25
- package/dist/core/wiki/converters.d.ts +0 -12
- package/dist/core/wiki/converters.js +0 -73
- package/dist/core/wiki/converters.js.map +0 -1
- package/dist/core/wiki/database.d.ts +0 -39
- package/dist/core/wiki/database.js +0 -179
- package/dist/core/wiki/database.js.map +0 -1
- package/dist/core/wiki/index.d.ts +0 -7
- package/dist/core/wiki/index.js +0 -5
- package/dist/core/wiki/index.js.map +0 -1
- package/dist/core/wiki/storage.d.ts +0 -37
- package/dist/core/wiki/storage.js +0 -197
- package/dist/core/wiki/storage.js.map +0 -1
- package/dist/core/wiki/tools.d.ts +0 -5
- package/dist/core/wiki/tools.js +0 -32
- package/dist/core/wiki/tools.js.map +0 -1
package/dist/core/agent/index.js
CHANGED
|
@@ -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 {
|
|
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 {
|
|
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
|
|
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,
|
|
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
|
|
27
|
-
.filter(
|
|
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
|
|
46
|
+
const research = loadResearchSubagent(config, {
|
|
53
47
|
knownTools: tools.map((entry) => entry.name),
|
|
48
|
+
baseSystemPrompt: base,
|
|
54
49
|
});
|
|
55
|
-
tools.push(...
|
|
50
|
+
tools.push(...createRunSubagentTools({
|
|
56
51
|
parent: config.name,
|
|
57
|
-
|
|
52
|
+
research,
|
|
58
53
|
tools,
|
|
59
54
|
createModel: () => llm.create(config.llm.model, config.llm.params),
|
|
60
|
-
|
|
55
|
+
concurrency: config.tools.agents.concurrency,
|
|
61
56
|
}));
|
|
62
57
|
}
|
|
63
58
|
const agent = new Agent({
|
|
64
59
|
name: config.name,
|
|
65
|
-
systemPrompt:
|
|
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
|
-
...
|
|
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":"AAAA,OAAO,
|
|
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 =
|
|
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,
|
|
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,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,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,oBAAoB,CAAC;IAEjD,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"}
|
|
@@ -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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"}
|
package/dist/core/config.d.ts
CHANGED
|
@@ -12,27 +12,44 @@ export declare enum LlmProvider {
|
|
|
12
12
|
TensorZero = "tensorzero",
|
|
13
13
|
Xai = "xai"
|
|
14
14
|
}
|
|
15
|
-
declare const
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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
|
|
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;
|
package/dist/core/config.js
CHANGED
|
@@ -14,8 +14,21 @@ export var LlmProvider;
|
|
|
14
14
|
LlmProvider["TensorZero"] = "tensorzero";
|
|
15
15
|
LlmProvider["Xai"] = "xai";
|
|
16
16
|
})(LlmProvider || (LlmProvider = {}));
|
|
17
|
-
const
|
|
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:
|
|
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
|
}
|