hoomanjs 1.29.2 → 1.31.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 +469 -234
- 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/BottomChrome.d.ts +52 -0
- package/dist/chat/components/BottomChrome.js +12 -0
- package/dist/chat/components/BottomChrome.js.map +1 -0
- package/dist/chat/components/ChatMessage.d.ts +2 -2
- package/dist/chat/components/ChatMessage.js +5 -6
- package/dist/chat/components/ChatMessage.js.map +1 -1
- package/dist/chat/components/ChromePicker.d.ts +17 -0
- package/dist/chat/components/ChromePicker.js +35 -0
- package/dist/chat/components/ChromePicker.js.map +1 -0
- package/dist/chat/components/EmptyChatBanner.js +2 -3
- package/dist/chat/components/EmptyChatBanner.js.map +1 -1
- package/dist/chat/components/StatusBar.d.ts +1 -2
- package/dist/chat/components/StatusBar.js +8 -5
- package/dist/chat/components/StatusBar.js.map +1 -1
- package/dist/chat/components/ThoughtEvent.d.ts +7 -0
- package/dist/chat/components/ThoughtEvent.js +30 -0
- package/dist/chat/components/ThoughtEvent.js.map +1 -0
- package/dist/chat/components/TodoPanel.js +52 -2
- package/dist/chat/components/TodoPanel.js.map +1 -1
- package/dist/chat/components/ToolEvent.js +1 -1
- package/dist/chat/components/ToolEvent.js.map +1 -1
- package/dist/chat/components/Transcript.d.ts +11 -2
- package/dist/chat/components/Transcript.js +78 -4
- 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 +21 -4
- 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 +26 -29
- 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 -28
- package/dist/core/config.js +85 -26
- 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/runtime.d.ts +10 -0
- package/dist/core/prompts/runtime.js +136 -0
- package/dist/core/prompts/runtime.js.map +1 -0
- 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/filesystem.md +2 -0
- 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 +12 -29
- 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/filesystem.d.ts +1 -0
- package/dist/core/tools/filesystem.js +38 -3
- package/dist/core/tools/filesystem.js.map +1 -1
- package/dist/core/tools/index.d.ts +1 -1
- package/dist/core/tools/index.js +1 -1
- package/dist/core/tools/index.js.map +1 -1
- 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 -9
- package/dist/core/inference/index.js +0 -13
- package/dist/core/inference/index.js.map +0 -1
- package/dist/core/inference/loader.d.ts +0 -16
- package/dist/core/inference/loader.js +0 -129
- package/dist/core/inference/loader.js.map +0 -1
- package/dist/core/inference/reranker.d.ts +0 -28
- package/dist/core/inference/reranker.js +0 -66
- package/dist/core/inference/reranker.js.map +0 -1
- package/dist/core/memory/brain.d.ts +0 -25
- package/dist/core/memory/brain.js +0 -137
- 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 -110
- 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 -177
- 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 -38
- package/dist/core/wiki/storage.js +0 -206
- 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 {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
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";
|
|
4
|
+
import { createRunSubagentTools, loadResearchSubagent, } from "../subagents/index.js";
|
|
5
|
+
import { createByeTools, createTodoTools, createFetchTools, createFilesystemTools, clearReadTimeAgentInstructionState, createPlanTools, createSleepTools, createShellTools, createThinkingTools, createTimeTools, createWebSearchTools, } from "../tools/index.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
|
|
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,18 +65,20 @@ 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
|
-
agent.addHook(BeforeInvocationEvent, async (event) => {
|
|
78
|
-
clearTodoState(event.agent);
|
|
79
|
-
refreshAgentSystemPromptForSessionMode(event.agent, await buildBaseSystemPrompt());
|
|
80
|
-
});
|
|
81
|
-
registerAgentSystemPromptBaseBuilder(agent, buildBaseSystemPrompt);
|
|
82
74
|
agent._toolRegistry =
|
|
83
75
|
new ModeAwareToolRegistry(agent.toolRegistry.list());
|
|
84
76
|
await agent.initialize();
|
|
77
|
+
agent.addHook(BeforeInvocationEvent, async (event) => {
|
|
78
|
+
clearTodoState(event.agent);
|
|
79
|
+
clearReadTimeAgentInstructionState(event.agent);
|
|
80
|
+
event.agent.systemPrompt = await buildBaseSystemPrompt();
|
|
81
|
+
});
|
|
85
82
|
applySessionMode(agent);
|
|
86
83
|
return agent;
|
|
87
84
|
}
|
|
@@ -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,28 +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
|
-
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
|
-
|
|
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
|
-
|
|
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:
|
|
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
|
|
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;
|
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,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:
|
|
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
|
}
|