hoomanjs 1.44.0 → 1.45.1
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 +1 -1
- package/dist/acp/acp-agent.js +0 -6
- package/dist/acp/acp-agent.js.map +1 -1
- package/dist/chat/app.js +0 -2
- package/dist/chat/app.js.map +1 -1
- package/dist/cli.js +5 -6
- package/dist/cli.js.map +1 -1
- package/dist/configure/app.js +469 -105
- package/dist/configure/app.js.map +1 -1
- package/dist/configure/components/MenuScreen.d.ts +3 -2
- package/dist/configure/components/MenuScreen.js +6 -2
- package/dist/configure/components/MenuScreen.js.map +1 -1
- package/dist/configure/index.js +4 -3
- package/dist/configure/index.js.map +1 -1
- package/dist/configure/types.d.ts +15 -0
- package/dist/core/agent/index.js +57 -36
- package/dist/core/agent/index.js.map +1 -1
- package/dist/core/agent/lazy-tool-registry.d.ts +42 -0
- package/dist/core/agent/lazy-tool-registry.js +126 -0
- package/dist/core/agent/lazy-tool-registry.js.map +1 -0
- package/dist/core/approvals/intervention.js +8 -3
- package/dist/core/approvals/intervention.js.map +1 -1
- package/dist/core/mcp/config.d.ts +26 -3
- package/dist/core/mcp/config.js +126 -34
- package/dist/core/mcp/config.js.map +1 -1
- package/dist/core/mcp/manager.d.ts +3 -2
- package/dist/core/mcp/manager.js.map +1 -1
- package/dist/core/mcp/oauth/provider.js +12 -4
- package/dist/core/mcp/oauth/provider.js.map +1 -1
- package/dist/core/mcp/oauth/service.js +3 -1
- package/dist/core/mcp/oauth/service.js.map +1 -1
- package/dist/core/mcp/prefixed-mcp-tool.d.ts +1 -0
- package/dist/core/mcp/prefixed-mcp-tool.js +2 -0
- package/dist/core/mcp/prefixed-mcp-tool.js.map +1 -1
- package/dist/core/modes/definitions.js +4 -0
- package/dist/core/modes/definitions.js.map +1 -1
- package/dist/core/prompts/modes/agent.md +6 -0
- package/dist/core/prompts/modes/plan.md +17 -0
- package/dist/core/prompts/session-mode-appendix.js +2 -1
- package/dist/core/prompts/session-mode-appendix.js.map +1 -1
- package/dist/core/prompts/static/mcp-discovery.md +10 -0
- package/dist/core/prompts/static/todo.md +2 -0
- package/dist/core/prompts/system.js +1 -0
- package/dist/core/prompts/system.js.map +1 -1
- package/dist/core/runtime-config.js +4 -0
- package/dist/core/runtime-config.js.map +1 -1
- package/dist/core/state/active-mcp-tools.d.ts +10 -0
- package/dist/core/state/active-mcp-tools.js +22 -0
- package/dist/core/state/active-mcp-tools.js.map +1 -0
- package/dist/core/state/tool-approvals.js +4 -0
- package/dist/core/state/tool-approvals.js.map +1 -1
- package/dist/core/subagents/index.d.ts +1 -1
- package/dist/core/subagents/index.js +1 -1
- package/dist/core/subagents/index.js.map +1 -1
- package/dist/core/subagents/registry.d.ts +2 -2
- package/dist/core/subagents/registry.js +2 -2
- package/dist/core/subagents/registry.js.map +1 -1
- package/dist/core/tools/index.d.ts +1 -0
- package/dist/core/tools/index.js +1 -0
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/mcp-discovery.d.ts +15 -0
- package/dist/core/tools/mcp-discovery.js +209 -0
- package/dist/core/tools/mcp-discovery.js.map +1 -0
- package/dist/core/tools/plan.js +9 -4
- package/dist/core/tools/plan.js.map +1 -1
- package/dist/exec/approvals.js +7 -3
- package/dist/exec/approvals.js.map +1 -1
- package/dist/index.d.ts +2 -3
- package/dist/index.js +2 -3
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/core/agent/mode-aware-tool-registry.d.ts +0 -18
- package/dist/core/agent/mode-aware-tool-registry.js +0 -71
- package/dist/core/agent/mode-aware-tool-registry.js.map +0 -1
- package/dist/core/agent/sync-tool-registry-mode.d.ts +0 -6
- package/dist/core/agent/sync-tool-registry-mode.js +0 -15
- package/dist/core/agent/sync-tool-registry-mode.js.map +0 -1
package/dist/core/agent/index.js
CHANGED
|
@@ -7,16 +7,16 @@ import { HoomanDefaultModelRetryStrategy } from "./default-retry-strategy.js";
|
|
|
7
7
|
import { FlatFileStorage } from "../sessions/flat-file-storage.js";
|
|
8
8
|
import { LazySessionManager } from "../sessions/lazy-session-manager.js";
|
|
9
9
|
import { TolerantFileStorage } from "../sessions/tolerant-file-storage.js";
|
|
10
|
-
import { createSubagentTools,
|
|
11
|
-
import { createAskUserTools, createTodoTools, createFetchTools, createFilesystemTools, createGrepTools, clearReadTimeAgentInstructionState, createPlanTools, createSleepTools, createShellTools, createThinkingTools, createTimeTools, createWebSearchTools, } from "../tools/index.js";
|
|
10
|
+
import { createSubagentTools, createSubagentRegistry, } from "../subagents/index.js";
|
|
11
|
+
import { createAskUserTools, createTodoTools, createFetchTools, createFilesystemTools, createGrepTools, clearReadTimeAgentInstructionState, createPlanTools, createSleepTools, createShellTools, createThinkingTools, createTimeTools, createWebSearchTools, createMcpDiscoveryTools, } from "../tools/index.js";
|
|
12
12
|
import { createSessionModePromptPlugin } from "../prompts/session-mode-appendix.js";
|
|
13
13
|
import { clearAgentSkillsPromptInjectionState, createAgentSkillsPlugin, } from "../skills/index.js";
|
|
14
14
|
import { createPromptCachePlugin } from "./prompt-cache-plugin.js";
|
|
15
15
|
import { createSessionTitlePlugin, } from "./session-title-plugin.js";
|
|
16
|
-
import {
|
|
17
|
-
import { applySessionMode } from "./sync-tool-registry-mode.js";
|
|
16
|
+
import { LazyToolRegistry } from "./lazy-tool-registry.js";
|
|
18
17
|
import { clearTodoState } from "../state/todos.js";
|
|
19
18
|
import { MODE_STATE_KEY } from "../state/session-mode.js";
|
|
19
|
+
import { PrefixedMcpTool } from "../mcp/prefixed-mcp-tool.js";
|
|
20
20
|
import { YOLO_STATE_KEY } from "../state/yolo.js";
|
|
21
21
|
import { memoryPath, offloadedContentPath, sessionsPath, } from "../utils/paths.js";
|
|
22
22
|
const SECTION_BREAK = "\n\n---\n\n";
|
|
@@ -27,6 +27,50 @@ const MEMORY_EXTRACTION_TURNS = 5;
|
|
|
27
27
|
const MEMORY_MAX_SEARCH_RESULTS = 5;
|
|
28
28
|
const agentConversationManagers = new WeakMap();
|
|
29
29
|
const agentSessionManagers = new WeakMap();
|
|
30
|
+
async function createToolRegistry({ config, systemPrompt, createModel, manager, }) {
|
|
31
|
+
const tools = [
|
|
32
|
+
...createTimeTools(),
|
|
33
|
+
...(config.tools.sleep.enabled ? createSleepTools() : []),
|
|
34
|
+
...(config.tools.todo.enabled ? createTodoTools() : []),
|
|
35
|
+
...(config.tools.fetch.enabled ? createFetchTools() : []),
|
|
36
|
+
...(config.tools.filesystem.enabled ? createFilesystemTools() : []),
|
|
37
|
+
...(config.tools.filesystem.enabled ? createGrepTools() : []),
|
|
38
|
+
...(config.tools.shell.enabled ? createShellTools() : []),
|
|
39
|
+
...(config.search.enabled ? createWebSearchTools(config) : []),
|
|
40
|
+
...createAskUserTools(),
|
|
41
|
+
...createThinkingTools(),
|
|
42
|
+
...createPlanTools(),
|
|
43
|
+
];
|
|
44
|
+
const registry = new LazyToolRegistry(tools);
|
|
45
|
+
const discoveryTools = createMcpDiscoveryTools(registry);
|
|
46
|
+
tools.push(...discoveryTools);
|
|
47
|
+
registry.add(discoveryTools);
|
|
48
|
+
const prefixed = await manager.listPrefixedTools();
|
|
49
|
+
const prefixedMcpTools = prefixed.filter((tool) => tool instanceof PrefixedMcpTool);
|
|
50
|
+
for (const tool of prefixedMcpTools) {
|
|
51
|
+
registry.hide(tool, LazyToolRegistry.buildMcpCatalogEntry(tool, tool.server, tool.mcpReadOnlyHint));
|
|
52
|
+
}
|
|
53
|
+
if (config.tools.subagents.enabled) {
|
|
54
|
+
const subagentRegistry = createSubagentRegistry(config, {
|
|
55
|
+
knownTools: tools.map((entry) => entry.name),
|
|
56
|
+
systemPrompt,
|
|
57
|
+
});
|
|
58
|
+
const subagentTools = createSubagentTools({
|
|
59
|
+
parent: config.name,
|
|
60
|
+
registry: subagentRegistry,
|
|
61
|
+
tools,
|
|
62
|
+
createModel,
|
|
63
|
+
});
|
|
64
|
+
tools.push(...subagentTools);
|
|
65
|
+
registry.add(subagentTools);
|
|
66
|
+
}
|
|
67
|
+
return { tools, registry };
|
|
68
|
+
}
|
|
69
|
+
function attachToolRegistry(agent, registry) {
|
|
70
|
+
registry.attachAgent(agent);
|
|
71
|
+
agent._toolRegistry =
|
|
72
|
+
registry;
|
|
73
|
+
}
|
|
30
74
|
export function getAgentConversationManager(agent) {
|
|
31
75
|
return agentConversationManagers.get(agent);
|
|
32
76
|
}
|
|
@@ -53,7 +97,6 @@ export async function create(config, system, mcp, print = false, meta) {
|
|
|
53
97
|
}
|
|
54
98
|
const ctx = createContext(sessionId);
|
|
55
99
|
const { plugins: contextPlugins = [], conversationManager, sessionManager, ...agentContext } = ctx;
|
|
56
|
-
const prefixed = await mcp.manager.listPrefixedTools();
|
|
57
100
|
const skillsPlugin = createAgentSkillsPlugin();
|
|
58
101
|
const sessionModePlugin = createSessionModePromptPlugin();
|
|
59
102
|
// Insert prompt-cache breakpoints for providers that require them (Anthropic,
|
|
@@ -71,37 +114,17 @@ export async function create(config, system, mcp, print = false, meta) {
|
|
|
71
114
|
const appendNext = await mcp.manager.listServerInstructions();
|
|
72
115
|
return [system.content, ...appendNext].filter(Boolean).join(SECTION_BREAK);
|
|
73
116
|
}
|
|
74
|
-
const
|
|
117
|
+
const systemPrompt = await buildBaseSystemPrompt();
|
|
75
118
|
const model = createLiveModel();
|
|
76
|
-
const tools =
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
...(config.tools.filesystem.enabled ? createGrepTools() : []),
|
|
83
|
-
...(config.tools.shell.enabled ? createShellTools() : []),
|
|
84
|
-
...(config.search.enabled ? createWebSearchTools(config) : []),
|
|
85
|
-
...createAskUserTools(),
|
|
86
|
-
...createThinkingTools(),
|
|
87
|
-
...createPlanTools(),
|
|
88
|
-
...prefixed,
|
|
89
|
-
];
|
|
90
|
-
if (config.tools.subagents.enabled) {
|
|
91
|
-
const registry = loadSubagentRegistry(config, {
|
|
92
|
-
knownTools: tools.map((entry) => entry.name),
|
|
93
|
-
baseSystemPrompt: base,
|
|
94
|
-
});
|
|
95
|
-
tools.push(...createSubagentTools({
|
|
96
|
-
parent: config.name,
|
|
97
|
-
registry,
|
|
98
|
-
tools,
|
|
99
|
-
createModel: () => createLiveModel(),
|
|
100
|
-
}));
|
|
101
|
-
}
|
|
119
|
+
const { tools, registry } = await createToolRegistry({
|
|
120
|
+
config,
|
|
121
|
+
systemPrompt,
|
|
122
|
+
createModel: () => createLiveModel(),
|
|
123
|
+
manager: mcp.manager,
|
|
124
|
+
});
|
|
102
125
|
const agent = new Agent({
|
|
103
126
|
name: config.name,
|
|
104
|
-
systemPrompt
|
|
127
|
+
systemPrompt,
|
|
105
128
|
model,
|
|
106
129
|
appState: {
|
|
107
130
|
...(userId ? { userId } : {}),
|
|
@@ -130,8 +153,7 @@ export async function create(config, system, mcp, print = false, meta) {
|
|
|
130
153
|
if (sessionManager) {
|
|
131
154
|
agentSessionManagers.set(agent, sessionManager);
|
|
132
155
|
}
|
|
133
|
-
agent
|
|
134
|
-
new ModeAwareToolRegistry(agent.toolRegistry.list());
|
|
156
|
+
attachToolRegistry(agent, registry);
|
|
135
157
|
await agent.initialize();
|
|
136
158
|
agent.addHook(BeforeInvocationEvent, async (event) => {
|
|
137
159
|
clearTodoState(event.agent);
|
|
@@ -139,7 +161,6 @@ export async function create(config, system, mcp, print = false, meta) {
|
|
|
139
161
|
clearAgentSkillsPromptInjectionState(event.agent);
|
|
140
162
|
event.agent.systemPrompt = await buildBaseSystemPrompt();
|
|
141
163
|
}, { order: HookOrder.SDK_FIRST - 1 });
|
|
142
|
-
applySessionMode(agent);
|
|
143
164
|
return agent;
|
|
144
165
|
}
|
|
145
166
|
export function createContext(sessionId) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/agent/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,qBAAqB,EACrB,SAAS,EACT,eAAe,EACf,cAAc,EACd,8BAA8B,GAI/B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,sDAAsD,CAAC;AAGxF,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,cAAc,EAAsB,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AAG9E,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EACL,mBAAmB,EACnB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/agent/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { Tool } from "@strands-agents/sdk";
|
|
2
|
+
import { type KnownSessionMode } from "../modes/schema.js";
|
|
3
|
+
import { type AgentLike as ActiveMcpAgentLike } from "../state/active-mcp-tools.js";
|
|
4
|
+
export type ToolCatalogEntry = {
|
|
5
|
+
name: string;
|
|
6
|
+
description: string;
|
|
7
|
+
server: string;
|
|
8
|
+
readOnly: boolean;
|
|
9
|
+
args: string[];
|
|
10
|
+
modes: KnownSessionMode[];
|
|
11
|
+
tool: Tool;
|
|
12
|
+
};
|
|
13
|
+
type AgentLike = ActiveMcpAgentLike;
|
|
14
|
+
/**
|
|
15
|
+
* Tool registry that mirrors Strands SDK registry semantics and lazily exposes
|
|
16
|
+
* MCP tools based on session mode plus the current session's activated MCP set.
|
|
17
|
+
*/
|
|
18
|
+
export declare class LazyToolRegistry {
|
|
19
|
+
#private;
|
|
20
|
+
private readonly tools;
|
|
21
|
+
private readonly catalog;
|
|
22
|
+
private agent;
|
|
23
|
+
constructor(tools?: Tool[]);
|
|
24
|
+
attachAgent(agent: AgentLike): void;
|
|
25
|
+
add(tool: Tool | Tool[]): void;
|
|
26
|
+
hide(tool: Tool, entry: Omit<ToolCatalogEntry, "tool">): void;
|
|
27
|
+
hidden(): ToolCatalogEntry[];
|
|
28
|
+
hiddenEntry(name: string): ToolCatalogEntry | undefined;
|
|
29
|
+
isToolRegistered(name: string): boolean;
|
|
30
|
+
isToolActivatable(entry: ToolCatalogEntry): boolean;
|
|
31
|
+
get(name: string): Tool | undefined;
|
|
32
|
+
remove(name: string): void;
|
|
33
|
+
list(): Tool[];
|
|
34
|
+
static buildMcpCatalogEntry(tool: Tool & {
|
|
35
|
+
name: string;
|
|
36
|
+
description: string;
|
|
37
|
+
toolSpec: {
|
|
38
|
+
inputSchema?: unknown;
|
|
39
|
+
};
|
|
40
|
+
}, server: string, readOnly: boolean): ToolCatalogEntry;
|
|
41
|
+
}
|
|
42
|
+
export {};
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { ToolValidationError } from "@strands-agents/sdk";
|
|
2
|
+
import { MODE_IDS } from "../modes/schema.js";
|
|
3
|
+
import { getActiveMcpToolNames, } from "../state/active-mcp-tools.js";
|
|
4
|
+
import { getModeState } from "../state/session-mode.js";
|
|
5
|
+
import { isToolVisible } from "../state/tool-approvals.js";
|
|
6
|
+
function toolVisibilityOptions(tool) {
|
|
7
|
+
if ("mcpReadOnlyHint" in tool &&
|
|
8
|
+
tool.mcpReadOnlyHint === true) {
|
|
9
|
+
return { mcpReadOnlyHint: true };
|
|
10
|
+
}
|
|
11
|
+
return undefined;
|
|
12
|
+
}
|
|
13
|
+
function buildToolModes(name, readOnly) {
|
|
14
|
+
return MODE_IDS.filter((mode) => isToolVisible(mode, name, readOnly ? { mcpReadOnlyHint: true } : undefined));
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Tool registry that mirrors Strands SDK registry semantics and lazily exposes
|
|
18
|
+
* MCP tools based on session mode plus the current session's activated MCP set.
|
|
19
|
+
*/
|
|
20
|
+
export class LazyToolRegistry {
|
|
21
|
+
tools = new Map();
|
|
22
|
+
catalog = new Map();
|
|
23
|
+
agent = null;
|
|
24
|
+
constructor(tools) {
|
|
25
|
+
if (tools) {
|
|
26
|
+
this.add(tools);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
attachAgent(agent) {
|
|
30
|
+
this.agent = agent;
|
|
31
|
+
}
|
|
32
|
+
add(tool) {
|
|
33
|
+
const tools = Array.isArray(tool) ? tool : [tool];
|
|
34
|
+
for (const t of tools) {
|
|
35
|
+
this.#validate(t, this.tools);
|
|
36
|
+
this.tools.set(t.name, t);
|
|
37
|
+
this.catalog.delete(t.name);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
hide(tool, entry) {
|
|
41
|
+
this.#validate(tool, this.#catalogAsTools(), this.tools);
|
|
42
|
+
this.catalog.set(tool.name, { ...entry, tool });
|
|
43
|
+
}
|
|
44
|
+
hidden() {
|
|
45
|
+
return [...this.catalog.values()].filter((entry) => this.isToolActivatable(entry));
|
|
46
|
+
}
|
|
47
|
+
hiddenEntry(name) {
|
|
48
|
+
const entry = this.catalog.get(name);
|
|
49
|
+
if (!entry || !this.isToolActivatable(entry)) {
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
return entry;
|
|
53
|
+
}
|
|
54
|
+
isToolRegistered(name) {
|
|
55
|
+
return this.tools.has(name);
|
|
56
|
+
}
|
|
57
|
+
isToolActivatable(entry) {
|
|
58
|
+
return entry.modes.includes(this.#mode());
|
|
59
|
+
}
|
|
60
|
+
get(name) {
|
|
61
|
+
const tool = this.tools.get(name);
|
|
62
|
+
if (!tool) {
|
|
63
|
+
return undefined;
|
|
64
|
+
}
|
|
65
|
+
if (!isToolVisible(this.#mode(), name, toolVisibilityOptions(tool))) {
|
|
66
|
+
return undefined;
|
|
67
|
+
}
|
|
68
|
+
return tool;
|
|
69
|
+
}
|
|
70
|
+
remove(name) {
|
|
71
|
+
this.tools.delete(name);
|
|
72
|
+
this.catalog.delete(name);
|
|
73
|
+
}
|
|
74
|
+
list() {
|
|
75
|
+
const visible = new Map(this.tools);
|
|
76
|
+
for (const name of this.#activeMcpNames()) {
|
|
77
|
+
const entry = this.catalog.get(name);
|
|
78
|
+
if (entry && this.isToolActivatable(entry)) {
|
|
79
|
+
visible.set(name, entry.tool);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return [...visible.values()].filter((tool) => isToolVisible(this.#mode(), tool.name, toolVisibilityOptions(tool)));
|
|
83
|
+
}
|
|
84
|
+
static buildMcpCatalogEntry(tool, server, readOnly) {
|
|
85
|
+
const args = Object.keys(tool.toolSpec.inputSchema?.properties ?? {});
|
|
86
|
+
return {
|
|
87
|
+
name: tool.name,
|
|
88
|
+
description: tool.description,
|
|
89
|
+
server,
|
|
90
|
+
readOnly,
|
|
91
|
+
args,
|
|
92
|
+
modes: buildToolModes(tool.name, readOnly),
|
|
93
|
+
tool,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
#mode() {
|
|
97
|
+
return this.agent ? getModeState(this.agent).mode : "agent";
|
|
98
|
+
}
|
|
99
|
+
#activeMcpNames() {
|
|
100
|
+
return this.agent ? getActiveMcpToolNames(this.agent) : [];
|
|
101
|
+
}
|
|
102
|
+
#catalogAsTools() {
|
|
103
|
+
return new Map([...this.catalog.entries()].map(([name, entry]) => [name, entry.tool]));
|
|
104
|
+
}
|
|
105
|
+
#validate(tool, primary, secondary) {
|
|
106
|
+
if (typeof tool.name !== "string") {
|
|
107
|
+
throw new ToolValidationError("Tool name must be a string");
|
|
108
|
+
}
|
|
109
|
+
if (tool.name.length < 1 || tool.name.length > 64) {
|
|
110
|
+
throw new ToolValidationError("Tool name must be between 1 and 64 characters");
|
|
111
|
+
}
|
|
112
|
+
const validNamePattern = /^[a-zA-Z0-9_-]+$/;
|
|
113
|
+
if (!validNamePattern.test(tool.name)) {
|
|
114
|
+
throw new ToolValidationError("Tool name must contain only alphanumeric characters, hyphens, and underscores");
|
|
115
|
+
}
|
|
116
|
+
if (tool.description !== undefined && tool.description !== null) {
|
|
117
|
+
if (typeof tool.description !== "string" || tool.description.length < 1) {
|
|
118
|
+
throw new ToolValidationError("Tool description must be a non-empty string");
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
if (primary.has(tool.name) || secondary?.has(tool.name)) {
|
|
122
|
+
throw new ToolValidationError(`Tool with name '${tool.name}' already registered`);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=lazy-tool-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lazy-tool-registry.js","sourceRoot":"","sources":["../../../src/core/agent/lazy-tool-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE1D,OAAO,EAAE,QAAQ,EAAyB,MAAM,oBAAoB,CAAC;AACrE,OAAO,EACL,qBAAqB,GAEtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAc3D,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,SAAS,cAAc,CAAC,IAAY,EAAE,QAAiB;IACrD,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAC9B,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAC5E,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,OAAO,gBAAgB;IACV,KAAK,GAAG,IAAI,GAAG,EAAgB,CAAC;IAChC,OAAO,GAAG,IAAI,GAAG,EAA4B,CAAC;IACvD,KAAK,GAAqB,IAAI,CAAC;IAEvC,YAAY,KAAc;QACxB,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,WAAW,CAAC,KAAgB;QAC1B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,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,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAC9B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,IAAI,CAAC,IAAU,EAAE,KAAqC;QACpD,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,eAAe,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACzD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,MAAM;QACJ,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CACjD,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAC9B,CAAC;IACJ,CAAC;IAED,WAAW,CAAC,IAAY;QACtB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7C,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,gBAAgB,CAAC,IAAY;QAC3B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,iBAAiB,CAAC,KAAuB;QACvC,OAAO,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAsB,CAAC,CAAC;IAChE,CAAC;IAED,GAAG,CAAC,IAAY;QACd,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,qBAAqB,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YACpE,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CAAC,IAAY;QACjB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,IAAI;QACF,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;YAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,KAAK,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC3C,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QACD,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAC3C,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,qBAAqB,CAAC,IAAI,CAAC,CAAC,CACpE,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,oBAAoB,CACzB,IAIC,EACD,MAAc,EACd,QAAiB;QAEjB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAEpB,IAAI,CAAC,QAAQ,CAAC,WAEf,EAAE,UAAU,IAAI,EAAE,CACpB,CAAC;QACF,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,MAAM;YACN,QAAQ;YACR,IAAI;YACJ,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC;YAC1C,IAAI;SACL,CAAC;IACJ,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;IAC9D,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7D,CAAC;IAED,eAAe;QACb,OAAO,IAAI,GAAG,CACZ,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CACvE,CAAC;IACJ,CAAC;IAED,SAAS,CACP,IAAU,EACV,OAA0B,EAC1B,SAA6B;QAE7B,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,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACxD,MAAM,IAAI,mBAAmB,CAC3B,mBAAmB,IAAI,CAAC,IAAI,sBAAsB,CACnD,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
|
|
@@ -60,14 +60,15 @@ export class HoomanToolApprovalIntervention extends InterventionHandler {
|
|
|
60
60
|
await this.onRejected?.(request, event, planReject);
|
|
61
61
|
return InterventionActions.deny(planReject);
|
|
62
62
|
}
|
|
63
|
-
|
|
63
|
+
const isPlanExit = toolName === EXIT_PLAN_MODE_TOOL;
|
|
64
|
+
if ((!isPlanExit && isYoloEnabled(event.agent)) ||
|
|
64
65
|
INTERNAL_ALWAYS_ALLOWED.has(toolName) ||
|
|
65
66
|
isImplicitlyAllowed(toolName, event.toolUse.input, getModeState(event.agent).mode) ||
|
|
66
|
-
getAllowlist().isAllowed(toolName, event.toolUse.input)) {
|
|
67
|
+
(!isPlanExit && getAllowlist().isAllowed(toolName, event.toolUse.input))) {
|
|
67
68
|
await this.onApproved?.(request, event, "auto");
|
|
68
69
|
return InterventionActions.proceed();
|
|
69
70
|
}
|
|
70
|
-
if (
|
|
71
|
+
if (isPlanExit) {
|
|
71
72
|
const preview = await readPlanPreview(event.agent);
|
|
72
73
|
if (preview) {
|
|
73
74
|
request = { ...request, preview };
|
|
@@ -80,6 +81,10 @@ export class HoomanToolApprovalIntervention extends InterventionHandler {
|
|
|
80
81
|
return InterventionActions.proceed();
|
|
81
82
|
}
|
|
82
83
|
if (result === "always") {
|
|
84
|
+
if (isPlanExit) {
|
|
85
|
+
await this.onApproved?.(request, event, "allow");
|
|
86
|
+
return InterventionActions.proceed();
|
|
87
|
+
}
|
|
83
88
|
getAllowlist().allowAlways(toolName, event.toolUse.input);
|
|
84
89
|
await this.onApproved?.(request, event, "always");
|
|
85
90
|
return InterventionActions.proceed();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intervention.js","sourceRoot":"","sources":["../../../src/core/approvals/intervention.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"intervention.js","sourceRoot":"","sources":["../../../src/core/approvals/intervention.ts"],"names":[],"mappings":"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"}
|
|
@@ -50,31 +50,54 @@ declare const McpServersFileSchema: z.ZodObject<{
|
|
|
50
50
|
export type McpServersFile = z.infer<typeof McpServersFileSchema>;
|
|
51
51
|
export type ConfigOptions = {
|
|
52
52
|
overlayPaths?: readonly string[];
|
|
53
|
+
projectPath?: string;
|
|
53
54
|
};
|
|
54
55
|
/** One named MCP transport from the config file. */
|
|
55
56
|
export type NamedMcpTransport = {
|
|
56
57
|
name: string;
|
|
57
58
|
transport: McpTransport;
|
|
58
59
|
};
|
|
60
|
+
export type McpConfigScope = "global" | "project";
|
|
61
|
+
export type NamedMcpTransportWithSource = NamedMcpTransport & {
|
|
62
|
+
sourcePath: string;
|
|
63
|
+
scope: McpConfigScope;
|
|
64
|
+
};
|
|
65
|
+
export type McpWriteTarget = {
|
|
66
|
+
path: string;
|
|
67
|
+
scope: McpConfigScope;
|
|
68
|
+
};
|
|
59
69
|
/**
|
|
60
70
|
* Read/write `{"mcpServers": { "<name>": <transport> }}` on disk.
|
|
61
71
|
*/
|
|
62
72
|
export declare class Config {
|
|
63
73
|
private readonly path;
|
|
64
74
|
private readonly overlayPaths;
|
|
65
|
-
private
|
|
75
|
+
private readonly projectPath?;
|
|
76
|
+
private entries;
|
|
66
77
|
constructor(path: string, options?: ConfigOptions);
|
|
67
78
|
private readJson;
|
|
68
79
|
private parse;
|
|
69
|
-
private
|
|
80
|
+
private sourcePaths;
|
|
81
|
+
private scopeForPath;
|
|
82
|
+
private mergedEntries;
|
|
70
83
|
/** Reload servers from disk (overwrites unsaved in-memory changes). */
|
|
71
84
|
reload(): void;
|
|
72
85
|
/** All configured servers, stable sort by name. */
|
|
73
86
|
list(): NamedMcpTransport[];
|
|
87
|
+
/** All configured servers, stable sort by name, including source metadata. */
|
|
88
|
+
listWithSources(): NamedMcpTransportWithSource[];
|
|
74
89
|
get(name: string): McpTransport | undefined;
|
|
75
|
-
|
|
90
|
+
getEntry(name: string): NamedMcpTransportWithSource | undefined;
|
|
91
|
+
primaryPath(): string;
|
|
92
|
+
writableTargets(): McpWriteTarget[];
|
|
93
|
+
private persistFile;
|
|
94
|
+
private requireVisibleEntry;
|
|
76
95
|
add(name: string, transport: McpTransport): void;
|
|
77
96
|
update(name: string, transport: McpTransport): void;
|
|
78
97
|
remove(name: string): void;
|
|
98
|
+
addToPath(targetPath: string, name: string, transport: McpTransport): void;
|
|
99
|
+
updateInPath(targetPath: string, name: string, transport: McpTransport): void;
|
|
100
|
+
renameInPath(targetPath: string, currentName: string, nextName: string, transport: McpTransport): void;
|
|
101
|
+
removeFromPath(targetPath: string, name: string): void;
|
|
79
102
|
}
|
|
80
103
|
export {};
|