@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.
Files changed (185) hide show
  1. package/dist/commands/cybergotchi.d.ts.map +1 -1
  2. package/dist/commands/cybergotchi.js +22 -19
  3. package/dist/commands/cybergotchi.js.map +1 -1
  4. package/dist/components/App.d.ts +1 -1
  5. package/dist/components/App.d.ts.map +1 -1
  6. package/dist/components/App.js +58 -2
  7. package/dist/components/App.js.map +1 -1
  8. package/dist/components/CompanionFooter.d.ts +9 -0
  9. package/dist/components/CompanionFooter.d.ts.map +1 -0
  10. package/dist/components/CompanionFooter.js +13 -0
  11. package/dist/components/CompanionFooter.js.map +1 -0
  12. package/dist/components/CybergotchiBubble.d.ts +2 -1
  13. package/dist/components/CybergotchiBubble.d.ts.map +1 -1
  14. package/dist/components/CybergotchiBubble.js +4 -5
  15. package/dist/components/CybergotchiBubble.js.map +1 -1
  16. package/dist/components/CybergotchiPanel.d.ts +5 -4
  17. package/dist/components/CybergotchiPanel.d.ts.map +1 -1
  18. package/dist/components/CybergotchiPanel.js +4 -2
  19. package/dist/components/CybergotchiPanel.js.map +1 -1
  20. package/dist/components/CybergotchiPanelConnected.js +4 -4
  21. package/dist/components/CybergotchiPanelConnected.js.map +1 -1
  22. package/dist/components/CybergotchiSetup.d.ts.map +1 -1
  23. package/dist/components/CybergotchiSetup.js +25 -61
  24. package/dist/components/CybergotchiSetup.js.map +1 -1
  25. package/dist/components/CybergotchiSprite.d.ts +5 -4
  26. package/dist/components/CybergotchiSprite.d.ts.map +1 -1
  27. package/dist/components/CybergotchiSprite.js +16 -9
  28. package/dist/components/CybergotchiSprite.js.map +1 -1
  29. package/dist/components/DiffView.d.ts +27 -0
  30. package/dist/components/DiffView.d.ts.map +1 -0
  31. package/dist/components/DiffView.js +74 -0
  32. package/dist/components/DiffView.js.map +1 -0
  33. package/dist/components/Messages.js +1 -1
  34. package/dist/components/Messages.js.map +1 -1
  35. package/dist/components/PermissionPrompt.d.ts.map +1 -1
  36. package/dist/components/PermissionPrompt.js +61 -8
  37. package/dist/components/PermissionPrompt.js.map +1 -1
  38. package/dist/components/REPL.d.ts.map +1 -1
  39. package/dist/components/REPL.js +75 -21
  40. package/dist/components/REPL.js.map +1 -1
  41. package/dist/components/TextInput.d.ts +2 -1
  42. package/dist/components/TextInput.d.ts.map +1 -1
  43. package/dist/components/TextInput.js +110 -6
  44. package/dist/components/TextInput.js.map +1 -1
  45. package/dist/cybergotchi/bones.d.ts +12 -0
  46. package/dist/cybergotchi/bones.d.ts.map +1 -0
  47. package/dist/cybergotchi/bones.js +89 -0
  48. package/dist/cybergotchi/bones.js.map +1 -0
  49. package/dist/cybergotchi/config.d.ts +14 -4
  50. package/dist/cybergotchi/config.d.ts.map +1 -1
  51. package/dist/cybergotchi/config.js +62 -9
  52. package/dist/cybergotchi/config.js.map +1 -1
  53. package/dist/cybergotchi/needs.d.ts +4 -4
  54. package/dist/cybergotchi/needs.d.ts.map +1 -1
  55. package/dist/cybergotchi/needs.js.map +1 -1
  56. package/dist/cybergotchi/personality.d.ts +11 -0
  57. package/dist/cybergotchi/personality.d.ts.map +1 -0
  58. package/dist/cybergotchi/personality.js +26 -0
  59. package/dist/cybergotchi/personality.js.map +1 -0
  60. package/dist/cybergotchi/species.d.ts +0 -1
  61. package/dist/cybergotchi/species.d.ts.map +1 -1
  62. package/dist/cybergotchi/species.js +253 -229
  63. package/dist/cybergotchi/species.js.map +1 -1
  64. package/dist/cybergotchi/types.d.ts +45 -7
  65. package/dist/cybergotchi/types.d.ts.map +1 -1
  66. package/dist/cybergotchi/types.js +36 -5
  67. package/dist/cybergotchi/types.js.map +1 -1
  68. package/dist/cybergotchi/useCybergotchi.d.ts +7 -5
  69. package/dist/cybergotchi/useCybergotchi.d.ts.map +1 -1
  70. package/dist/cybergotchi/useCybergotchi.js +27 -16
  71. package/dist/cybergotchi/useCybergotchi.js.map +1 -1
  72. package/dist/git/index.d.ts +9 -0
  73. package/dist/git/index.d.ts.map +1 -1
  74. package/dist/git/index.js +31 -0
  75. package/dist/git/index.js.map +1 -1
  76. package/dist/harness/config.d.ts +5 -0
  77. package/dist/harness/config.d.ts.map +1 -1
  78. package/dist/harness/config.js.map +1 -1
  79. package/dist/harness/credentials.d.ts +24 -0
  80. package/dist/harness/credentials.d.ts.map +1 -0
  81. package/dist/harness/credentials.js +104 -0
  82. package/dist/harness/credentials.js.map +1 -0
  83. package/dist/harness/hooks.d.ts +8 -0
  84. package/dist/harness/hooks.d.ts.map +1 -1
  85. package/dist/harness/hooks.js +98 -22
  86. package/dist/harness/hooks.js.map +1 -1
  87. package/dist/harness/keybindings.d.ts +37 -0
  88. package/dist/harness/keybindings.d.ts.map +1 -0
  89. package/dist/harness/keybindings.js +134 -0
  90. package/dist/harness/keybindings.js.map +1 -0
  91. package/dist/harness/memory.d.ts +35 -0
  92. package/dist/harness/memory.d.ts.map +1 -0
  93. package/dist/harness/memory.js +115 -0
  94. package/dist/harness/memory.js.map +1 -0
  95. package/dist/harness/plugins.d.ts +57 -0
  96. package/dist/harness/plugins.d.ts.map +1 -0
  97. package/dist/harness/plugins.js +142 -0
  98. package/dist/harness/plugins.js.map +1 -0
  99. package/dist/harness/session.d.ts +5 -0
  100. package/dist/harness/session.d.ts.map +1 -1
  101. package/dist/harness/session.js +39 -1
  102. package/dist/harness/session.js.map +1 -1
  103. package/dist/lsp/client.d.ts +58 -0
  104. package/dist/lsp/client.d.ts.map +1 -0
  105. package/dist/lsp/client.js +174 -0
  106. package/dist/lsp/client.js.map +1 -0
  107. package/dist/main.js +160 -0
  108. package/dist/main.js.map +1 -1
  109. package/dist/mcp/DeferredMcpTool.d.ts +30 -0
  110. package/dist/mcp/DeferredMcpTool.d.ts.map +1 -0
  111. package/dist/mcp/DeferredMcpTool.js +75 -0
  112. package/dist/mcp/DeferredMcpTool.js.map +1 -0
  113. package/dist/mcp/client.d.ts +7 -0
  114. package/dist/mcp/client.d.ts.map +1 -1
  115. package/dist/mcp/client.js +56 -8
  116. package/dist/mcp/client.js.map +1 -1
  117. package/dist/mcp/loader.d.ts +9 -0
  118. package/dist/mcp/loader.d.ts.map +1 -1
  119. package/dist/mcp/loader.js +43 -2
  120. package/dist/mcp/loader.js.map +1 -1
  121. package/dist/mcp/schema.d.ts +7 -0
  122. package/dist/mcp/schema.d.ts.map +1 -0
  123. package/dist/mcp/schema.js +41 -0
  124. package/dist/mcp/schema.js.map +1 -0
  125. package/dist/mcp/server.d.ts +16 -0
  126. package/dist/mcp/server.d.ts.map +1 -0
  127. package/dist/mcp/server.js +94 -0
  128. package/dist/mcp/server.js.map +1 -0
  129. package/dist/providers/anthropic.d.ts +1 -1
  130. package/dist/providers/anthropic.d.ts.map +1 -1
  131. package/dist/providers/anthropic.js.map +1 -1
  132. package/dist/providers/base.d.ts +15 -0
  133. package/dist/providers/base.d.ts.map +1 -1
  134. package/dist/providers/base.js +13 -1
  135. package/dist/providers/base.js.map +1 -1
  136. package/dist/providers/openai.d.ts +1 -1
  137. package/dist/providers/openai.d.ts.map +1 -1
  138. package/dist/providers/openai.js.map +1 -1
  139. package/dist/query.d.ts.map +1 -1
  140. package/dist/query.js +91 -14
  141. package/dist/query.js.map +1 -1
  142. package/dist/remote/server.d.ts +31 -0
  143. package/dist/remote/server.d.ts.map +1 -0
  144. package/dist/remote/server.js +163 -0
  145. package/dist/remote/server.js.map +1 -0
  146. package/dist/services/AgentDispatcher.d.ts +42 -0
  147. package/dist/services/AgentDispatcher.d.ts.map +1 -0
  148. package/dist/services/AgentDispatcher.js +181 -0
  149. package/dist/services/AgentDispatcher.js.map +1 -0
  150. package/dist/services/StreamingToolExecutor.d.ts +2 -1
  151. package/dist/services/StreamingToolExecutor.d.ts.map +1 -1
  152. package/dist/services/StreamingToolExecutor.js +11 -2
  153. package/dist/services/StreamingToolExecutor.js.map +1 -1
  154. package/dist/tools/AgentTool/index.d.ts +3 -0
  155. package/dist/tools/AgentTool/index.d.ts.map +1 -1
  156. package/dist/tools/AgentTool/index.js +54 -16
  157. package/dist/tools/AgentTool/index.js.map +1 -1
  158. package/dist/tools/DiagnosticsTool/index.d.ts +21 -0
  159. package/dist/tools/DiagnosticsTool/index.d.ts.map +1 -0
  160. package/dist/tools/DiagnosticsTool/index.js +108 -0
  161. package/dist/tools/DiagnosticsTool/index.js.map +1 -0
  162. package/dist/tools/GrepTool/index.d.ts +2 -2
  163. package/dist/tools/ParallelAgentTool/index.d.ts +37 -0
  164. package/dist/tools/ParallelAgentTool/index.d.ts.map +1 -0
  165. package/dist/tools/ParallelAgentTool/index.js +53 -0
  166. package/dist/tools/ParallelAgentTool/index.js.map +1 -0
  167. package/dist/tools/SkillTool/index.d.ts.map +1 -1
  168. package/dist/tools/SkillTool/index.js +22 -27
  169. package/dist/tools/SkillTool/index.js.map +1 -1
  170. package/dist/tools/ToolSearchTool/index.d.ts +15 -0
  171. package/dist/tools/ToolSearchTool/index.d.ts.map +1 -0
  172. package/dist/tools/ToolSearchTool/index.js +50 -0
  173. package/dist/tools/ToolSearchTool/index.js.map +1 -0
  174. package/dist/tools.d.ts.map +1 -1
  175. package/dist/tools.js +9 -0
  176. package/dist/tools.js.map +1 -1
  177. package/dist/types/message.d.ts +2 -0
  178. package/dist/types/message.d.ts.map +1 -1
  179. package/dist/types/message.js +3 -0
  180. package/dist/types/message.js.map +1 -1
  181. package/dist/types/permissions.d.ts +2 -0
  182. package/dist/types/permissions.d.ts.map +1 -1
  183. package/dist/types/permissions.js +30 -0
  184. package/dist/types/permissions.js.map +1 -1
  185. 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 await (const event of query(input.prompt, config)) {
39
- if (event.type === "text_delta") {
40
- finalText += event.content;
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
- else if (event.type === "tool_output_delta") {
43
- outputChunks.push(event.chunk);
44
- if (context.onOutputChunk && context.callId) {
45
- context.onOutputChunk(context.callId, event.chunk);
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
- else if (event.type === "error") {
49
- return { output: `Sub-agent error: ${event.message}`, isError: true };
50
- }
51
- else if (event.type === "turn_complete" && event.reason !== "completed") {
52
- if (event.reason === "aborted") {
53
- return { output: finalText || "Sub-agent aborted.", isError: false };
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. Use this when a task is large enough to warrant isolation. Parameters:
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":"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"}
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;AAGxB,OAAO,KAAK,EAAE,IAAI,EAA2B,MAAM,eAAe,CAAC;AAEnE,QAAA,MAAM,WAAW;;;;;;;;;EAGf,CAAC;AAEH,eAAO,MAAM,SAAS,EAAE,IAAI,CAAC,OAAO,WAAW,CA4C9C,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 * as fs from "fs/promises";
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 reading its definition from .oh/skills/.",
9
+ description: "Execute a skill by loading its definition from project or global skills.",
11
10
  inputSchema,
12
11
  riskLevel: "low",
13
- isReadOnly() {
14
- return true;
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
- const baseDir = path.join(context.workingDir, ".oh", "skills");
25
- const filePath = path.join(baseDir, `${input.skill}.md`);
26
- if (!filePath.startsWith(baseDir)) {
27
- return { output: "Error: Invalid skill path.", isError: true };
28
- }
29
- try {
30
- const content = await fs.readFile(filePath, "utf-8");
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
- catch (err) {
34
- if (err.code === "ENOENT") {
35
- return {
36
- output: `Error: Skill "${input.skill}" not found at ${filePath}`,
37
- isError: true,
38
- };
39
- }
40
- return { output: `Error reading skill: ${err.message}`, isError: true };
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 from .oh/skills/{skill}.md. Parameters:
45
- - skill (string, required): The skill name (maps to a .md file).
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;AACxB,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAG7B,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,6DAA6D;IAC1E,WAAW;IACX,SAAS,EAAE,KAAK;IAEhB,UAAU;QACR,OAAO,IAAI,CAAC;IACd,CAAC;IAED,iBAAiB;QACf,OAAO,KAAK,CAAC;IACf,CAAC;IAED,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;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,KAAK,KAAK,CAAC,CAAC;QACzD,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAClC,OAAO,EAAE,MAAM,EAAE,4BAA4B,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACjE,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACrD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAC7C,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC1B,OAAO;oBACL,MAAM,EAAE,iBAAiB,KAAK,CAAC,KAAK,kBAAkB,QAAQ,EAAE;oBAChE,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YACD,OAAO,EAAE,MAAM,EAAE,wBAAwB,GAAG,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC1E,CAAC;IACH,CAAC;IAED,MAAM;QACJ,OAAO;;2DAEgD,CAAC;IAC1D,CAAC;CACF,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"}
@@ -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;AAyBvC;;GAEG;AACH,wBAAgB,WAAW,IAAI,KAAK,CA2BnC"}
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;AAE/D;;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;KACjB,CAAC;AACJ,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"}
@@ -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;CACtC,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,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"}
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"}
@@ -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
  }