@zhijiewang/openharness 0.5.1 → 0.6.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/dist/commands/cybergotchi.d.ts.map +1 -1
- package/dist/commands/cybergotchi.js +22 -19
- package/dist/commands/cybergotchi.js.map +1 -1
- package/dist/components/App.d.ts +1 -1
- package/dist/components/App.d.ts.map +1 -1
- package/dist/components/App.js +58 -2
- package/dist/components/App.js.map +1 -1
- package/dist/components/CompanionFooter.d.ts +9 -0
- package/dist/components/CompanionFooter.d.ts.map +1 -0
- package/dist/components/CompanionFooter.js +13 -0
- package/dist/components/CompanionFooter.js.map +1 -0
- package/dist/components/CybergotchiBubble.d.ts +2 -1
- package/dist/components/CybergotchiBubble.d.ts.map +1 -1
- package/dist/components/CybergotchiBubble.js +4 -5
- package/dist/components/CybergotchiBubble.js.map +1 -1
- package/dist/components/CybergotchiPanel.d.ts +5 -4
- package/dist/components/CybergotchiPanel.d.ts.map +1 -1
- package/dist/components/CybergotchiPanel.js +4 -2
- package/dist/components/CybergotchiPanel.js.map +1 -1
- package/dist/components/CybergotchiPanelConnected.js +4 -4
- package/dist/components/CybergotchiPanelConnected.js.map +1 -1
- package/dist/components/CybergotchiSetup.d.ts.map +1 -1
- package/dist/components/CybergotchiSetup.js +25 -61
- package/dist/components/CybergotchiSetup.js.map +1 -1
- package/dist/components/CybergotchiSprite.d.ts +5 -4
- package/dist/components/CybergotchiSprite.d.ts.map +1 -1
- package/dist/components/CybergotchiSprite.js +16 -9
- package/dist/components/CybergotchiSprite.js.map +1 -1
- package/dist/components/DiffView.d.ts +27 -0
- package/dist/components/DiffView.d.ts.map +1 -0
- package/dist/components/DiffView.js +74 -0
- package/dist/components/DiffView.js.map +1 -0
- package/dist/components/Messages.js +1 -1
- package/dist/components/Messages.js.map +1 -1
- package/dist/components/PermissionPrompt.d.ts.map +1 -1
- package/dist/components/PermissionPrompt.js +61 -8
- package/dist/components/PermissionPrompt.js.map +1 -1
- package/dist/components/REPL.d.ts.map +1 -1
- package/dist/components/REPL.js +75 -21
- package/dist/components/REPL.js.map +1 -1
- package/dist/components/TextInput.d.ts +2 -1
- package/dist/components/TextInput.d.ts.map +1 -1
- package/dist/components/TextInput.js +110 -6
- package/dist/components/TextInput.js.map +1 -1
- package/dist/cybergotchi/bones.d.ts +12 -0
- package/dist/cybergotchi/bones.d.ts.map +1 -0
- package/dist/cybergotchi/bones.js +89 -0
- package/dist/cybergotchi/bones.js.map +1 -0
- package/dist/cybergotchi/config.d.ts +14 -4
- package/dist/cybergotchi/config.d.ts.map +1 -1
- package/dist/cybergotchi/config.js +62 -9
- package/dist/cybergotchi/config.js.map +1 -1
- package/dist/cybergotchi/needs.d.ts +4 -4
- package/dist/cybergotchi/needs.d.ts.map +1 -1
- package/dist/cybergotchi/needs.js.map +1 -1
- package/dist/cybergotchi/personality.d.ts +11 -0
- package/dist/cybergotchi/personality.d.ts.map +1 -0
- package/dist/cybergotchi/personality.js +26 -0
- package/dist/cybergotchi/personality.js.map +1 -0
- package/dist/cybergotchi/species.d.ts +0 -1
- package/dist/cybergotchi/species.d.ts.map +1 -1
- package/dist/cybergotchi/species.js +253 -229
- package/dist/cybergotchi/species.js.map +1 -1
- package/dist/cybergotchi/types.d.ts +45 -7
- package/dist/cybergotchi/types.d.ts.map +1 -1
- package/dist/cybergotchi/types.js +36 -5
- package/dist/cybergotchi/types.js.map +1 -1
- package/dist/cybergotchi/useCybergotchi.d.ts +7 -5
- package/dist/cybergotchi/useCybergotchi.d.ts.map +1 -1
- package/dist/cybergotchi/useCybergotchi.js +27 -16
- package/dist/cybergotchi/useCybergotchi.js.map +1 -1
- package/dist/git/index.d.ts +9 -0
- package/dist/git/index.d.ts.map +1 -1
- package/dist/git/index.js +31 -0
- package/dist/git/index.js.map +1 -1
- package/dist/harness/config.d.ts +5 -0
- package/dist/harness/config.d.ts.map +1 -1
- package/dist/harness/config.js.map +1 -1
- package/dist/harness/credentials.d.ts +24 -0
- package/dist/harness/credentials.d.ts.map +1 -0
- package/dist/harness/credentials.js +104 -0
- package/dist/harness/credentials.js.map +1 -0
- package/dist/harness/hooks.d.ts +8 -0
- package/dist/harness/hooks.d.ts.map +1 -1
- package/dist/harness/hooks.js +98 -22
- package/dist/harness/hooks.js.map +1 -1
- package/dist/harness/keybindings.d.ts +37 -0
- package/dist/harness/keybindings.d.ts.map +1 -0
- package/dist/harness/keybindings.js +134 -0
- package/dist/harness/keybindings.js.map +1 -0
- package/dist/harness/memory.d.ts +35 -0
- package/dist/harness/memory.d.ts.map +1 -0
- package/dist/harness/memory.js +115 -0
- package/dist/harness/memory.js.map +1 -0
- package/dist/harness/plugins.d.ts +57 -0
- package/dist/harness/plugins.d.ts.map +1 -0
- package/dist/harness/plugins.js +142 -0
- package/dist/harness/plugins.js.map +1 -0
- package/dist/harness/session.d.ts +5 -0
- package/dist/harness/session.d.ts.map +1 -1
- package/dist/harness/session.js +39 -1
- package/dist/harness/session.js.map +1 -1
- package/dist/lsp/client.d.ts +58 -0
- package/dist/lsp/client.d.ts.map +1 -0
- package/dist/lsp/client.js +174 -0
- package/dist/lsp/client.js.map +1 -0
- package/dist/main.js +160 -0
- package/dist/main.js.map +1 -1
- package/dist/mcp/DeferredMcpTool.d.ts +30 -0
- package/dist/mcp/DeferredMcpTool.d.ts.map +1 -0
- package/dist/mcp/DeferredMcpTool.js +75 -0
- package/dist/mcp/DeferredMcpTool.js.map +1 -0
- package/dist/mcp/client.d.ts +7 -0
- package/dist/mcp/client.d.ts.map +1 -1
- package/dist/mcp/client.js +56 -8
- package/dist/mcp/client.js.map +1 -1
- package/dist/mcp/loader.d.ts +9 -0
- package/dist/mcp/loader.d.ts.map +1 -1
- package/dist/mcp/loader.js +43 -2
- package/dist/mcp/loader.js.map +1 -1
- package/dist/mcp/schema.d.ts +7 -0
- package/dist/mcp/schema.d.ts.map +1 -0
- package/dist/mcp/schema.js +41 -0
- package/dist/mcp/schema.js.map +1 -0
- package/dist/mcp/server.d.ts +16 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +94 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/providers/anthropic.d.ts +1 -1
- package/dist/providers/anthropic.d.ts.map +1 -1
- package/dist/providers/anthropic.js.map +1 -1
- package/dist/providers/base.d.ts +15 -0
- package/dist/providers/base.d.ts.map +1 -1
- package/dist/providers/base.js +13 -1
- package/dist/providers/base.js.map +1 -1
- package/dist/providers/openai.d.ts +1 -1
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js.map +1 -1
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +91 -14
- package/dist/query.js.map +1 -1
- package/dist/remote/server.d.ts +31 -0
- package/dist/remote/server.d.ts.map +1 -0
- package/dist/remote/server.js +163 -0
- package/dist/remote/server.js.map +1 -0
- package/dist/services/AgentDispatcher.d.ts +42 -0
- package/dist/services/AgentDispatcher.d.ts.map +1 -0
- package/dist/services/AgentDispatcher.js +181 -0
- package/dist/services/AgentDispatcher.js.map +1 -0
- package/dist/services/StreamingToolExecutor.d.ts +2 -1
- package/dist/services/StreamingToolExecutor.d.ts.map +1 -1
- package/dist/services/StreamingToolExecutor.js +11 -2
- package/dist/services/StreamingToolExecutor.js.map +1 -1
- package/dist/tools/AgentTool/index.d.ts +3 -0
- package/dist/tools/AgentTool/index.d.ts.map +1 -1
- package/dist/tools/AgentTool/index.js +54 -16
- package/dist/tools/AgentTool/index.js.map +1 -1
- package/dist/tools/DiagnosticsTool/index.d.ts +21 -0
- package/dist/tools/DiagnosticsTool/index.d.ts.map +1 -0
- package/dist/tools/DiagnosticsTool/index.js +108 -0
- package/dist/tools/DiagnosticsTool/index.js.map +1 -0
- package/dist/tools/GrepTool/index.d.ts +2 -2
- package/dist/tools/ParallelAgentTool/index.d.ts +37 -0
- package/dist/tools/ParallelAgentTool/index.d.ts.map +1 -0
- package/dist/tools/ParallelAgentTool/index.js +53 -0
- package/dist/tools/ParallelAgentTool/index.js.map +1 -0
- package/dist/tools/SkillTool/index.d.ts.map +1 -1
- package/dist/tools/SkillTool/index.js +22 -27
- package/dist/tools/SkillTool/index.js.map +1 -1
- package/dist/tools/ToolSearchTool/index.d.ts +15 -0
- package/dist/tools/ToolSearchTool/index.d.ts.map +1 -0
- package/dist/tools/ToolSearchTool/index.js +50 -0
- package/dist/tools/ToolSearchTool/index.js.map +1 -0
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +9 -0
- package/dist/tools.js.map +1 -1
- package/dist/types/message.d.ts +2 -0
- package/dist/types/message.d.ts.map +1 -1
- package/dist/types/message.js +3 -0
- package/dist/types/message.js.map +1 -1
- package/dist/types/permissions.d.ts +2 -0
- package/dist/types/permissions.d.ts.map +1 -1
- package/dist/types/permissions.js +30 -0
- package/dist/types/permissions.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
import { createWorktree, removeWorktree, isGitRepo } from "../../git/index.js";
|
|
2
3
|
const inputSchema = z.object({
|
|
3
4
|
prompt: z.string(),
|
|
4
5
|
description: z.string().optional(),
|
|
6
|
+
isolated: z.boolean().optional(),
|
|
5
7
|
});
|
|
6
8
|
export const AgentTool = {
|
|
7
9
|
name: "Agent",
|
|
@@ -22,6 +24,16 @@ export const AgentTool = {
|
|
|
22
24
|
};
|
|
23
25
|
}
|
|
24
26
|
const { query } = await import("../../query.js");
|
|
27
|
+
// Worktree isolation: create isolated copy of repo if requested or if in git repo
|
|
28
|
+
const useWorktree = input.isolated !== false && isGitRepo(context.workingDir);
|
|
29
|
+
let worktreePath = null;
|
|
30
|
+
let agentWorkingDir = context.workingDir;
|
|
31
|
+
if (useWorktree) {
|
|
32
|
+
worktreePath = createWorktree(context.workingDir);
|
|
33
|
+
if (worktreePath) {
|
|
34
|
+
agentWorkingDir = worktreePath;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
25
37
|
const systemPrompt = context.systemPrompt ?? "You are a sub-agent. Complete the delegated task concisely.";
|
|
26
38
|
const config = {
|
|
27
39
|
provider: context.provider,
|
|
@@ -35,23 +47,42 @@ export const AgentTool = {
|
|
|
35
47
|
const outputChunks = [];
|
|
36
48
|
let finalText = "";
|
|
37
49
|
try {
|
|
38
|
-
for
|
|
39
|
-
|
|
40
|
-
|
|
50
|
+
// Override process.cwd for the sub-agent by setting workingDir in tool context
|
|
51
|
+
const originalCwd = process.cwd();
|
|
52
|
+
if (worktreePath) {
|
|
53
|
+
try {
|
|
54
|
+
process.chdir(agentWorkingDir);
|
|
41
55
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
56
|
+
catch { /* ignore */ }
|
|
57
|
+
}
|
|
58
|
+
try {
|
|
59
|
+
for await (const event of query(input.prompt, config)) {
|
|
60
|
+
if (event.type === "text_delta") {
|
|
61
|
+
finalText += event.content;
|
|
62
|
+
}
|
|
63
|
+
else if (event.type === "tool_output_delta") {
|
|
64
|
+
outputChunks.push(event.chunk);
|
|
65
|
+
if (context.onOutputChunk && context.callId) {
|
|
66
|
+
context.onOutputChunk(context.callId, event.chunk);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
else if (event.type === "error") {
|
|
70
|
+
return { output: `Sub-agent error: ${event.message}`, isError: true };
|
|
71
|
+
}
|
|
72
|
+
else if (event.type === "turn_complete" && event.reason !== "completed") {
|
|
73
|
+
if (event.reason === "aborted") {
|
|
74
|
+
return { output: finalText || "Sub-agent aborted.", isError: false };
|
|
75
|
+
}
|
|
46
76
|
}
|
|
47
77
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
78
|
+
}
|
|
79
|
+
finally {
|
|
80
|
+
// Restore original working directory
|
|
81
|
+
if (worktreePath) {
|
|
82
|
+
try {
|
|
83
|
+
process.chdir(originalCwd);
|
|
54
84
|
}
|
|
85
|
+
catch { /* ignore */ }
|
|
55
86
|
}
|
|
56
87
|
}
|
|
57
88
|
}
|
|
@@ -61,12 +92,19 @@ export const AgentTool = {
|
|
|
61
92
|
isError: true,
|
|
62
93
|
};
|
|
63
94
|
}
|
|
95
|
+
finally {
|
|
96
|
+
// Clean up worktree
|
|
97
|
+
if (worktreePath) {
|
|
98
|
+
removeWorktree(worktreePath, context.workingDir);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
64
101
|
return { output: finalText || "(sub-agent completed with no text output)", isError: false };
|
|
65
102
|
},
|
|
66
103
|
prompt() {
|
|
67
|
-
return `Spawn a sub-agent with its own tool-use loop to handle a delegated task autonomously.
|
|
68
|
-
- prompt (string, required): The full instructions for the sub-agent.
|
|
69
|
-
- description (string, optional): A short label for what the sub-agent is doing
|
|
104
|
+
return `Spawn a sub-agent with its own tool-use loop to handle a delegated task autonomously. The sub-agent runs in an isolated git worktree to prevent file conflicts. Parameters:
|
|
105
|
+
- prompt (string, required): The full instructions for the sub-agent.
|
|
106
|
+
- description (string, optional): A short label for what the sub-agent is doing.
|
|
107
|
+
- isolated (boolean, optional): Whether to use git worktree isolation (default: true if in a git repo).`;
|
|
70
108
|
},
|
|
71
109
|
};
|
|
72
110
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/AgentTool/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/AgentTool/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { Tool } from "../../Tool.js";
|
|
3
|
+
declare const inputSchema: z.ZodObject<{
|
|
4
|
+
file_path: z.ZodString;
|
|
5
|
+
action: z.ZodDefault<z.ZodEnum<["diagnostics", "definition", "references"]>>;
|
|
6
|
+
line: z.ZodOptional<z.ZodNumber>;
|
|
7
|
+
character: z.ZodOptional<z.ZodNumber>;
|
|
8
|
+
}, "strip", z.ZodTypeAny, {
|
|
9
|
+
action: "diagnostics" | "definition" | "references";
|
|
10
|
+
file_path: string;
|
|
11
|
+
line?: number | undefined;
|
|
12
|
+
character?: number | undefined;
|
|
13
|
+
}, {
|
|
14
|
+
file_path: string;
|
|
15
|
+
action?: "diagnostics" | "definition" | "references" | undefined;
|
|
16
|
+
line?: number | undefined;
|
|
17
|
+
character?: number | undefined;
|
|
18
|
+
}>;
|
|
19
|
+
export declare const DiagnosticsTool: Tool<typeof inputSchema>;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/DiagnosticsTool/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,IAAI,EAA2B,MAAM,eAAe,CAAC;AAGnE,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;EAMf,CAAC;AA+BH,eAAO,MAAM,eAAe,EAAE,IAAI,CAAC,OAAO,WAAW,CA8EpD,CAAC"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { LspClient } from "../../lsp/client.js";
|
|
3
|
+
const inputSchema = z.object({
|
|
4
|
+
file_path: z.string().describe("Absolute path to the file to check"),
|
|
5
|
+
action: z.enum(["diagnostics", "definition", "references"]).default("diagnostics")
|
|
6
|
+
.describe("Action: diagnostics (errors/warnings), definition (go-to-def), references (find-refs)"),
|
|
7
|
+
line: z.number().optional().describe("Line number (0-indexed) for definition/references"),
|
|
8
|
+
character: z.number().optional().describe("Column number (0-indexed) for definition/references"),
|
|
9
|
+
});
|
|
10
|
+
// Singleton LSP client per language server
|
|
11
|
+
const lspClients = new Map();
|
|
12
|
+
function getLspCommand(filePath) {
|
|
13
|
+
if (filePath.endsWith('.ts') || filePath.endsWith('.tsx') || filePath.endsWith('.js') || filePath.endsWith('.jsx')) {
|
|
14
|
+
return { command: 'npx', args: ['typescript-language-server', '--stdio'] };
|
|
15
|
+
}
|
|
16
|
+
if (filePath.endsWith('.py')) {
|
|
17
|
+
return { command: 'pylsp', args: [] };
|
|
18
|
+
}
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
async function getClient(filePath, workingDir) {
|
|
22
|
+
const lspCmd = getLspCommand(filePath);
|
|
23
|
+
if (!lspCmd)
|
|
24
|
+
return null;
|
|
25
|
+
const key = `${lspCmd.command}:${workingDir}`;
|
|
26
|
+
if (lspClients.has(key))
|
|
27
|
+
return lspClients.get(key);
|
|
28
|
+
try {
|
|
29
|
+
const client = await LspClient.connect(lspCmd.command, lspCmd.args, workingDir);
|
|
30
|
+
lspClients.set(key, client);
|
|
31
|
+
return client;
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
export const DiagnosticsTool = {
|
|
38
|
+
name: "Diagnostics",
|
|
39
|
+
description: "Get code diagnostics (errors, warnings), go-to-definition, or find-references using the language server.",
|
|
40
|
+
inputSchema,
|
|
41
|
+
riskLevel: "low",
|
|
42
|
+
isReadOnly() { return true; },
|
|
43
|
+
isConcurrencySafe() { return true; },
|
|
44
|
+
async call(input, context) {
|
|
45
|
+
const client = await getClient(input.file_path, context.workingDir);
|
|
46
|
+
if (!client) {
|
|
47
|
+
return {
|
|
48
|
+
output: `No language server available for ${input.file_path}. Install typescript-language-server (TS/JS) or pylsp (Python).`,
|
|
49
|
+
isError: true,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
try {
|
|
53
|
+
if (input.action === "diagnostics") {
|
|
54
|
+
await client.openFile(input.file_path);
|
|
55
|
+
const diags = client.getDiagnostics(input.file_path);
|
|
56
|
+
if (diags.length === 0)
|
|
57
|
+
return { output: "No diagnostics found.", isError: false };
|
|
58
|
+
const severityMap = { 1: "Error", 2: "Warning", 3: "Info", 4: "Hint" };
|
|
59
|
+
const lines = diags.map(d => {
|
|
60
|
+
const sev = severityMap[d.severity ?? 1] ?? "Unknown";
|
|
61
|
+
return `${sev} [${d.source ?? ""}] L${d.range.start.line + 1}:${d.range.start.character}: ${d.message}`;
|
|
62
|
+
});
|
|
63
|
+
return { output: lines.join('\n'), isError: false };
|
|
64
|
+
}
|
|
65
|
+
if (input.action === "definition") {
|
|
66
|
+
if (input.line === undefined || input.character === undefined) {
|
|
67
|
+
return { output: "line and character are required for definition lookup.", isError: true };
|
|
68
|
+
}
|
|
69
|
+
await client.openFile(input.file_path);
|
|
70
|
+
const locs = await client.getDefinition(input.file_path, input.line, input.character);
|
|
71
|
+
if (locs.length === 0)
|
|
72
|
+
return { output: "No definition found.", isError: false };
|
|
73
|
+
const lines = locs.map(l => `${l.uri.replace('file://', '')}:${l.range.start.line + 1}:${l.range.start.character}`);
|
|
74
|
+
return { output: lines.join('\n'), isError: false };
|
|
75
|
+
}
|
|
76
|
+
if (input.action === "references") {
|
|
77
|
+
if (input.line === undefined || input.character === undefined) {
|
|
78
|
+
return { output: "line and character are required for references lookup.", isError: true };
|
|
79
|
+
}
|
|
80
|
+
await client.openFile(input.file_path);
|
|
81
|
+
const refs = await client.getReferences(input.file_path, input.line, input.character);
|
|
82
|
+
if (refs.length === 0)
|
|
83
|
+
return { output: "No references found.", isError: false };
|
|
84
|
+
const lines = refs.map(r => `${r.uri.replace('file://', '')}:${r.range.start.line + 1}:${r.range.start.character}`);
|
|
85
|
+
return { output: `${refs.length} reference(s):\n${lines.join('\n')}`, isError: false };
|
|
86
|
+
}
|
|
87
|
+
return { output: `Unknown action: ${input.action}`, isError: true };
|
|
88
|
+
}
|
|
89
|
+
catch (err) {
|
|
90
|
+
return {
|
|
91
|
+
output: `LSP error: ${err instanceof Error ? err.message : String(err)}`,
|
|
92
|
+
isError: true,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
prompt() {
|
|
97
|
+
return `Get code intelligence from the language server. Actions:
|
|
98
|
+
- diagnostics: Get errors and warnings for a file
|
|
99
|
+
- definition: Go to definition of a symbol at a given position (requires line, character)
|
|
100
|
+
- references: Find all references to a symbol at a given position (requires line, character)
|
|
101
|
+
Parameters:
|
|
102
|
+
- file_path (string, required): Absolute path to the file
|
|
103
|
+
- action (string): "diagnostics" | "definition" | "references" (default: diagnostics)
|
|
104
|
+
- line (number, optional): 0-indexed line for definition/references
|
|
105
|
+
- character (number, optional): 0-indexed column for definition/references`;
|
|
106
|
+
},
|
|
107
|
+
};
|
|
108
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/DiagnosticsTool/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,13 +8,13 @@ declare const inputSchema: z.ZodObject<{
|
|
|
8
8
|
}, "strip", z.ZodTypeAny, {
|
|
9
9
|
pattern: string;
|
|
10
10
|
path?: string | undefined;
|
|
11
|
-
glob?: string | undefined;
|
|
12
11
|
context?: number | undefined;
|
|
12
|
+
glob?: string | undefined;
|
|
13
13
|
}, {
|
|
14
14
|
pattern: string;
|
|
15
15
|
path?: string | undefined;
|
|
16
|
-
glob?: string | undefined;
|
|
17
16
|
context?: number | undefined;
|
|
17
|
+
glob?: string | undefined;
|
|
18
18
|
}>;
|
|
19
19
|
export declare const GrepTool: Tool<typeof inputSchema>;
|
|
20
20
|
export {};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { Tool } from "../../Tool.js";
|
|
3
|
+
declare const inputSchema: z.ZodObject<{
|
|
4
|
+
tasks: z.ZodArray<z.ZodObject<{
|
|
5
|
+
id: z.ZodString;
|
|
6
|
+
prompt: z.ZodString;
|
|
7
|
+
description: z.ZodOptional<z.ZodString>;
|
|
8
|
+
blockedBy: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
9
|
+
}, "strip", z.ZodTypeAny, {
|
|
10
|
+
prompt: string;
|
|
11
|
+
id: string;
|
|
12
|
+
description?: string | undefined;
|
|
13
|
+
blockedBy?: string[] | undefined;
|
|
14
|
+
}, {
|
|
15
|
+
prompt: string;
|
|
16
|
+
id: string;
|
|
17
|
+
description?: string | undefined;
|
|
18
|
+
blockedBy?: string[] | undefined;
|
|
19
|
+
}>, "many">;
|
|
20
|
+
}, "strip", z.ZodTypeAny, {
|
|
21
|
+
tasks: {
|
|
22
|
+
prompt: string;
|
|
23
|
+
id: string;
|
|
24
|
+
description?: string | undefined;
|
|
25
|
+
blockedBy?: string[] | undefined;
|
|
26
|
+
}[];
|
|
27
|
+
}, {
|
|
28
|
+
tasks: {
|
|
29
|
+
prompt: string;
|
|
30
|
+
id: string;
|
|
31
|
+
description?: string | undefined;
|
|
32
|
+
blockedBy?: string[] | undefined;
|
|
33
|
+
}[];
|
|
34
|
+
}>;
|
|
35
|
+
export declare const ParallelAgentTool: Tool<typeof inputSchema>;
|
|
36
|
+
export {};
|
|
37
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/ParallelAgentTool/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,IAAI,EAA2B,MAAM,eAAe,CAAC;AAUnE,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEf,CAAC;AAEH,eAAO,MAAM,iBAAiB,EAAE,IAAI,CAAC,OAAO,WAAW,CAuDtD,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { AgentDispatcher } from "../../services/AgentDispatcher.js";
|
|
3
|
+
const taskSchema = z.object({
|
|
4
|
+
id: z.string(),
|
|
5
|
+
prompt: z.string(),
|
|
6
|
+
description: z.string().optional(),
|
|
7
|
+
blockedBy: z.array(z.string()).optional(),
|
|
8
|
+
});
|
|
9
|
+
const inputSchema = z.object({
|
|
10
|
+
tasks: z.array(taskSchema).min(1),
|
|
11
|
+
});
|
|
12
|
+
export const ParallelAgentTool = {
|
|
13
|
+
name: "ParallelAgents",
|
|
14
|
+
description: "Dispatch multiple sub-agents in parallel with optional task dependencies.",
|
|
15
|
+
inputSchema,
|
|
16
|
+
riskLevel: "medium",
|
|
17
|
+
isReadOnly() { return false; },
|
|
18
|
+
isConcurrencySafe() { return false; },
|
|
19
|
+
async call(input, context) {
|
|
20
|
+
if (!context.provider || !context.tools) {
|
|
21
|
+
return { output: "Parallel agents unavailable: provider not in context.", isError: true };
|
|
22
|
+
}
|
|
23
|
+
const systemPrompt = context.systemPrompt ?? "You are a sub-agent. Complete the delegated task concisely.";
|
|
24
|
+
const dispatcher = new AgentDispatcher(context.provider, context.tools, systemPrompt, context.permissionMode ?? "trust", context.model, context.workingDir, context.abortSignal);
|
|
25
|
+
dispatcher.addTasks(input.tasks);
|
|
26
|
+
const results = await dispatcher.execute();
|
|
27
|
+
const output = results.map(r => {
|
|
28
|
+
const status = r.isError ? '✗' : '✓';
|
|
29
|
+
const duration = (r.durationMs / 1000).toFixed(1);
|
|
30
|
+
return `${status} [${r.id}] (${duration}s)\n${r.output}`;
|
|
31
|
+
}).join('\n\n---\n\n');
|
|
32
|
+
const hasErrors = results.some(r => r.isError);
|
|
33
|
+
return { output, isError: hasErrors };
|
|
34
|
+
},
|
|
35
|
+
prompt() {
|
|
36
|
+
return `Dispatch multiple sub-agents in parallel with optional task dependencies. Each agent runs in an isolated git worktree. Tasks with blockedBy wait for their dependencies to complete before starting.
|
|
37
|
+
|
|
38
|
+
Parameters:
|
|
39
|
+
- tasks (array, required): List of tasks to execute. Each task has:
|
|
40
|
+
- id (string): Unique task identifier
|
|
41
|
+
- prompt (string): Instructions for the sub-agent
|
|
42
|
+
- description (string, optional): Short label
|
|
43
|
+
- blockedBy (string[], optional): IDs of tasks that must complete first
|
|
44
|
+
|
|
45
|
+
Example: Run task A and B in parallel, then task C after both complete:
|
|
46
|
+
tasks: [
|
|
47
|
+
{ id: "a", prompt: "..." },
|
|
48
|
+
{ id: "b", prompt: "..." },
|
|
49
|
+
{ id: "c", prompt: "...", blockedBy: ["a", "b"] }
|
|
50
|
+
]`;
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/ParallelAgentTool/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,eAAe,EAAkB,MAAM,mCAAmC,CAAC;AAEpF,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1B,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CAC1C,CAAC,CAAC;AAEH,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;CAClC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAA6B;IACzD,IAAI,EAAE,gBAAgB;IACtB,WAAW,EAAE,2EAA2E;IACxF,WAAW;IACX,SAAS,EAAE,QAAQ;IAEnB,UAAU,KAAK,OAAO,KAAK,CAAC,CAAC,CAAC;IAC9B,iBAAiB,KAAK,OAAO,KAAK,CAAC,CAAC,CAAC;IAErC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,OAAoB;QACpC,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACxC,OAAO,EAAE,MAAM,EAAE,uDAAuD,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC5F,CAAC;QAED,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,6DAA6D,CAAC;QAC3G,MAAM,UAAU,GAAG,IAAI,eAAe,CACpC,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,KAAK,EACb,YAAY,EACZ,OAAO,CAAC,cAAc,IAAI,OAAO,EACjC,OAAO,CAAC,KAAK,EACb,OAAO,CAAC,UAAU,EAClB,OAAO,CAAC,WAAW,CACpB,CAAC;QAEF,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAoB,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,CAAC;QAE3C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YAC7B,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YACrC,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAClD,OAAO,GAAG,MAAM,KAAK,CAAC,CAAC,EAAE,MAAM,QAAQ,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC;QAC3D,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAEvB,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAC/C,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;IACxC,CAAC;IAED,MAAM;QACJ,OAAO;;;;;;;;;;;;;;EAcT,CAAC;IACD,CAAC;CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/SkillTool/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/SkillTool/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,IAAI,EAA2B,MAAM,eAAe,CAAC;AAGnE,QAAA,MAAM,WAAW;;;;;;;;;EAGf,CAAC;AAEH,eAAO,MAAM,SAAS,EAAE,IAAI,CAAC,OAAO,WAAW,CA2C9C,CAAC"}
|
|
@@ -1,48 +1,43 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import
|
|
3
|
-
import * as path from "path";
|
|
2
|
+
import { findSkill, discoverSkills } from "../../harness/plugins.js";
|
|
4
3
|
const inputSchema = z.object({
|
|
5
4
|
skill: z.string(),
|
|
6
5
|
args: z.string().optional(),
|
|
7
6
|
});
|
|
8
7
|
export const SkillTool = {
|
|
9
8
|
name: "Skill",
|
|
10
|
-
description: "Execute a skill by
|
|
9
|
+
description: "Execute a skill by loading its definition from project or global skills.",
|
|
11
10
|
inputSchema,
|
|
12
11
|
riskLevel: "low",
|
|
13
|
-
isReadOnly() {
|
|
14
|
-
|
|
15
|
-
},
|
|
16
|
-
isConcurrencySafe() {
|
|
17
|
-
return false;
|
|
18
|
-
},
|
|
12
|
+
isReadOnly() { return true; },
|
|
13
|
+
isConcurrencySafe() { return false; },
|
|
19
14
|
async call(input, context) {
|
|
20
15
|
// Path traversal protection
|
|
21
16
|
if (input.skill.includes("..") || input.skill.includes("/") || input.skill.includes("\\")) {
|
|
22
17
|
return { output: "Error: Invalid skill name.", isError: true };
|
|
23
18
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
return { output: content, isError: false };
|
|
19
|
+
// List skills if "list" or "ls"
|
|
20
|
+
if (input.skill === "list" || input.skill === "ls") {
|
|
21
|
+
const skills = discoverSkills();
|
|
22
|
+
if (skills.length === 0)
|
|
23
|
+
return { output: "No skills found. Create .oh/skills/*.md to add skills.", isError: false };
|
|
24
|
+
const lines = skills.map(s => `${s.name.padEnd(20)} [${s.source}] ${s.description.slice(0, 50)}`);
|
|
25
|
+
return { output: lines.join('\n'), isError: false };
|
|
32
26
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
|
|
27
|
+
// Find skill across all sources
|
|
28
|
+
const skill = findSkill(input.skill);
|
|
29
|
+
if (!skill) {
|
|
30
|
+
const available = discoverSkills().map(s => s.name).join(', ');
|
|
31
|
+
return {
|
|
32
|
+
output: `Error: Skill "${input.skill}" not found.${available ? ` Available: ${available}` : ' Create .oh/skills/*.md to add skills.'}`,
|
|
33
|
+
isError: true,
|
|
34
|
+
};
|
|
41
35
|
}
|
|
36
|
+
return { output: skill.content, isError: false };
|
|
42
37
|
},
|
|
43
38
|
prompt() {
|
|
44
|
-
return `Execute a skill by loading its definition
|
|
45
|
-
- skill (string, required): The skill name (
|
|
39
|
+
return `Execute a skill by loading its definition. Skills are searched in .oh/skills/ (project) and ~/.oh/skills/ (global). Parameters:
|
|
40
|
+
- skill (string, required): The skill name (or "list" to see available skills).
|
|
46
41
|
- args (string, optional): Arguments to pass to the skill.`;
|
|
47
42
|
},
|
|
48
43
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/SkillTool/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/SkillTool/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAErE,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC5B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,SAAS,GAA6B;IACjD,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,0EAA0E;IACvF,WAAW;IACX,SAAS,EAAE,KAAK;IAEhB,UAAU,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC;IAC7B,iBAAiB,KAAK,OAAO,KAAK,CAAC,CAAC,CAAC;IAErC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO;QACvB,4BAA4B;QAC5B,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1F,OAAO,EAAE,MAAM,EAAE,4BAA4B,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACjE,CAAC;QAED,gCAAgC;QAChC,IAAI,KAAK,CAAC,KAAK,KAAK,MAAM,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;YACnD,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;YAChC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,EAAE,MAAM,EAAE,wDAAwD,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;YACrH,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAC3B,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CACnE,CAAC;YACF,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QACtD,CAAC;QAED,gCAAgC;QAChC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,SAAS,GAAG,cAAc,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/D,OAAO;gBACL,MAAM,EAAE,iBAAiB,KAAK,CAAC,KAAK,eAAe,SAAS,CAAC,CAAC,CAAC,eAAe,SAAS,EAAE,CAAC,CAAC,CAAC,wCAAwC,EAAE;gBACtI,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACnD,CAAC;IAED,MAAM;QACJ,OAAO;;2DAEgD,CAAC;IAC1D,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { Tool } from "../../Tool.js";
|
|
3
|
+
declare const inputSchema: z.ZodObject<{
|
|
4
|
+
query: z.ZodString;
|
|
5
|
+
maxResults: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
6
|
+
}, "strip", z.ZodTypeAny, {
|
|
7
|
+
query: string;
|
|
8
|
+
maxResults: number;
|
|
9
|
+
}, {
|
|
10
|
+
query: string;
|
|
11
|
+
maxResults?: number | undefined;
|
|
12
|
+
}>;
|
|
13
|
+
export declare const ToolSearchTool: Tool<typeof inputSchema>;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/ToolSearchTool/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,IAAI,EAA2B,MAAM,eAAe,CAAC;AAGnE,QAAA,MAAM,WAAW;;;;;;;;;EAGf,CAAC;AAEH,eAAO,MAAM,cAAc,EAAE,IAAI,CAAC,OAAO,WAAW,CAiDnD,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { DeferredMcpTool } from "../../mcp/DeferredMcpTool.js";
|
|
3
|
+
const inputSchema = z.object({
|
|
4
|
+
query: z.string().describe("Tool name or keyword to search for"),
|
|
5
|
+
maxResults: z.number().optional().default(5).describe("Maximum results to return"),
|
|
6
|
+
});
|
|
7
|
+
export const ToolSearchTool = {
|
|
8
|
+
name: "ToolSearch",
|
|
9
|
+
description: "Search for available tools by name or keyword. Resolves deferred MCP tool schemas.",
|
|
10
|
+
inputSchema,
|
|
11
|
+
riskLevel: "low",
|
|
12
|
+
isReadOnly() { return true; },
|
|
13
|
+
isConcurrencySafe() { return true; },
|
|
14
|
+
async call(input, context) {
|
|
15
|
+
const allTools = context.tools ?? [];
|
|
16
|
+
const query = input.query.toLowerCase();
|
|
17
|
+
const max = input.maxResults ?? 5;
|
|
18
|
+
// Search by name or description
|
|
19
|
+
const matches = allTools
|
|
20
|
+
.filter(t => t.name.toLowerCase().includes(query) ||
|
|
21
|
+
t.description.toLowerCase().includes(query))
|
|
22
|
+
.slice(0, max);
|
|
23
|
+
if (matches.length === 0) {
|
|
24
|
+
return { output: `No tools found matching "${input.query}".`, isError: false };
|
|
25
|
+
}
|
|
26
|
+
// Resolve deferred tools to get their full schemas
|
|
27
|
+
const results = [];
|
|
28
|
+
for (const tool of matches) {
|
|
29
|
+
if (tool instanceof DeferredMcpTool) {
|
|
30
|
+
const resolved = await tool.getResolved();
|
|
31
|
+
if (resolved) {
|
|
32
|
+
results.push(`${resolved.name}: ${resolved.prompt()}`);
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
results.push(`${tool.name}: ${tool.description} (schema unavailable)`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
results.push(`${tool.name}: ${tool.prompt().slice(0, 200)}`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return { output: results.join('\n\n'), isError: false };
|
|
43
|
+
},
|
|
44
|
+
prompt() {
|
|
45
|
+
return `Search for available tools by name or keyword. Use this to discover MCP tools and resolve their schemas before calling them. Parameters:
|
|
46
|
+
- query (string, required): Tool name or keyword to search for
|
|
47
|
+
- maxResults (number, optional): Maximum results (default: 5)`;
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/ToolSearchTool/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE/D,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;IAChE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;CACnF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAA6B;IACtD,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE,oFAAoF;IACjG,WAAW;IACX,SAAS,EAAE,KAAK;IAEhB,UAAU,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC;IAC7B,iBAAiB,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC;IAEpC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,OAAoB;QACpC,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC;QAElC,gCAAgC;QAChC,MAAM,OAAO,GAAG,QAAQ;aACrB,MAAM,CAAC,CAAC,CAAC,EAAE,CACV,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;YACpC,CAAC,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAC5C;aACA,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAEjB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,EAAE,MAAM,EAAE,4BAA4B,KAAK,CAAC,KAAK,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QACjF,CAAC;QAED,mDAAmD;QACnD,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;YAC3B,IAAI,IAAI,YAAY,eAAe,EAAE,CAAC;gBACpC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;gBAC1C,IAAI,QAAQ,EAAE,CAAC;oBACb,OAAO,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBACzD,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,uBAAuB,CAAC,CAAC;gBACzE,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC1D,CAAC;IAED,MAAM;QACJ,OAAO;;8DAEmD,CAAC;IAC7D,CAAC;CACF,CAAC"}
|
package/dist/tools.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AA4BvC;;GAEG;AACH,wBAAgB,WAAW,IAAI,KAAK,CAiCnC"}
|
package/dist/tools.js
CHANGED
|
@@ -22,6 +22,9 @@ import { EnterPlanModeTool } from "./tools/EnterPlanModeTool/index.js";
|
|
|
22
22
|
import { ExitPlanModeTool } from "./tools/ExitPlanModeTool/index.js";
|
|
23
23
|
import { NotebookEditTool } from "./tools/NotebookEditTool/index.js";
|
|
24
24
|
import { ImageReadTool } from "./tools/ImageReadTool/index.js";
|
|
25
|
+
import { DiagnosticsTool } from "./tools/DiagnosticsTool/index.js";
|
|
26
|
+
import { ParallelAgentTool } from "./tools/ParallelAgentTool/index.js";
|
|
27
|
+
import { ToolSearchTool } from "./tools/ToolSearchTool/index.js";
|
|
25
28
|
/**
|
|
26
29
|
* Returns all registered tools.
|
|
27
30
|
*/
|
|
@@ -51,6 +54,12 @@ export function getAllTools() {
|
|
|
51
54
|
ExitPlanModeTool,
|
|
52
55
|
// Notebooks
|
|
53
56
|
NotebookEditTool,
|
|
57
|
+
// Code Intelligence
|
|
58
|
+
DiagnosticsTool,
|
|
59
|
+
// Parallel Agents
|
|
60
|
+
ParallelAgentTool,
|
|
61
|
+
// Tool Discovery
|
|
62
|
+
ToolSearchTool,
|
|
54
63
|
];
|
|
55
64
|
}
|
|
56
65
|
//# sourceMappingURL=tools.js.map
|
package/dist/tools.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,aAAa;AACb,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE7D,iBAAiB;AACjB,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,aAAa;AACb,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE7D,iBAAiB;AACjB,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEjE;;GAEG;AACH,MAAM,UAAU,WAAW;IACzB,OAAO;QACL,0BAA0B;QAC1B,QAAQ;QACR,YAAY;QACZ,aAAa;QACb,aAAa;QACb,YAAY;QACZ,QAAQ;QACR,QAAQ;QACR,MAAM;QACN,YAAY;QACZ,aAAa;QACb,kBAAkB;QAClB,cAAc;QACd,cAAc;QACd,YAAY;QACZ,oBAAoB;QACpB,WAAW;QACX,SAAS;QACT,SAAS;QACT,WAAW;QACX,iBAAiB;QACjB,gBAAgB;QAChB,YAAY;QACZ,gBAAgB;QAChB,oBAAoB;QACpB,eAAe;QACf,kBAAkB;QAClB,iBAAiB;QACjB,iBAAiB;QACjB,cAAc;KACf,CAAC;AACJ,CAAC"}
|
package/dist/types/message.d.ts
CHANGED
|
@@ -22,10 +22,12 @@ export type Message = {
|
|
|
22
22
|
/** Optional display hints — not sent to LLM */
|
|
23
23
|
readonly meta?: {
|
|
24
24
|
isInfo?: boolean;
|
|
25
|
+
pinned?: boolean;
|
|
25
26
|
};
|
|
26
27
|
};
|
|
27
28
|
export declare function createMessage(role: Role, content: string, extra?: Partial<Pick<Message, "toolCalls" | "toolResults" | "meta">>): Message;
|
|
28
29
|
export declare function createInfoMessage(content: string): Message;
|
|
30
|
+
export declare function createPinnedMessage(content: string): Message;
|
|
29
31
|
export declare function createUserMessage(content: string): Message;
|
|
30
32
|
export declare function createAssistantMessage(content: string, toolCalls?: readonly ToolCall[]): Message;
|
|
31
33
|
export declare function createToolResultMessage(result: ToolResult): Message;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../src/types/message.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,IAAI,GAAG,MAAM,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE5D,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IACpB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAC;IACzC,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IAC7C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,+CAA+C;IAC/C,QAAQ,CAAC,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../src/types/message.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,IAAI,GAAG,MAAM,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE5D,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IACpB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAC;IACzC,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IAC7C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,+CAA+C;IAC/C,QAAQ,CAAC,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CACxD,CAAC;AAEF,wBAAgB,aAAa,CAC3B,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,aAAa,GAAG,MAAM,CAAC,CAAC,GACnE,OAAO,CAQT;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE5D;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,SAAS,QAAQ,EAAE,GAC9B,OAAO,CAET;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAEnE"}
|
package/dist/types/message.js
CHANGED
|
@@ -13,6 +13,9 @@ export function createMessage(role, content, extra) {
|
|
|
13
13
|
export function createInfoMessage(content) {
|
|
14
14
|
return createMessage("system", content, { meta: { isInfo: true } });
|
|
15
15
|
}
|
|
16
|
+
export function createPinnedMessage(content) {
|
|
17
|
+
return createMessage("system", content, { meta: { isInfo: true, pinned: true } });
|
|
18
|
+
}
|
|
16
19
|
export function createUserMessage(content) {
|
|
17
20
|
return createMessage("user", content);
|
|
18
21
|
}
|