@zhijiewang/openharness 0.10.1 → 0.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +83 -13
- package/dist/Tool.d.ts.map +1 -1
- package/dist/Tool.js +7 -1
- package/dist/Tool.js.map +1 -1
- package/dist/Tool.test.js +8 -2
- package/dist/Tool.test.js.map +1 -1
- package/dist/agents/roles.d.ts +25 -0
- package/dist/agents/roles.d.ts.map +1 -0
- package/dist/agents/roles.js +116 -0
- package/dist/agents/roles.js.map +1 -0
- package/dist/agents/roles.test.d.ts +2 -0
- package/dist/agents/roles.test.d.ts.map +1 -0
- package/dist/agents/roles.test.js +38 -0
- package/dist/agents/roles.test.js.map +1 -0
- package/dist/commands/commands-new.test.d.ts +5 -0
- package/dist/commands/commands-new.test.d.ts.map +1 -0
- package/dist/commands/commands-new.test.js +132 -0
- package/dist/commands/commands-new.test.js.map +1 -0
- package/dist/commands/commands.test.js +31 -0
- package/dist/commands/commands.test.js.map +1 -1
- package/dist/commands/index.d.ts +2 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +199 -6
- package/dist/commands/index.js.map +1 -1
- package/dist/components/REPL.js +1 -1
- package/dist/components/REPL.js.map +1 -1
- package/dist/git/git.test.js +33 -1
- package/dist/git/git.test.js.map +1 -1
- package/dist/git/index.d.ts +12 -0
- package/dist/git/index.d.ts.map +1 -1
- package/dist/git/index.js +47 -2
- package/dist/git/index.js.map +1 -1
- package/dist/harness/checkpoints.d.ts +36 -0
- package/dist/harness/checkpoints.d.ts.map +1 -0
- package/dist/harness/checkpoints.js +156 -0
- package/dist/harness/checkpoints.js.map +1 -0
- package/dist/harness/config.d.ts +3 -0
- package/dist/harness/config.d.ts.map +1 -1
- package/dist/harness/config.js +35 -2
- package/dist/harness/config.js.map +1 -1
- package/dist/harness/config.test.js +21 -1
- package/dist/harness/config.test.js.map +1 -1
- package/dist/harness/hooks-env.test.d.ts +5 -0
- package/dist/harness/hooks-env.test.d.ts.map +1 -0
- package/dist/harness/hooks-env.test.js +41 -0
- package/dist/harness/hooks-env.test.js.map +1 -0
- package/dist/harness/hooks.d.ts +7 -0
- package/dist/harness/hooks.d.ts.map +1 -1
- package/dist/harness/hooks.js +14 -0
- package/dist/harness/hooks.js.map +1 -1
- package/dist/harness/keybindings.d.ts.map +1 -1
- package/dist/harness/keybindings.js +4 -0
- package/dist/harness/keybindings.js.map +1 -1
- package/dist/harness/memory.d.ts +19 -0
- package/dist/harness/memory.d.ts.map +1 -1
- package/dist/harness/memory.js +85 -0
- package/dist/harness/memory.js.map +1 -1
- package/dist/harness/onboarding.d.ts +1 -1
- package/dist/harness/onboarding.d.ts.map +1 -1
- package/dist/harness/onboarding.js +59 -4
- package/dist/harness/onboarding.js.map +1 -1
- package/dist/harness/onboarding.test.d.ts +5 -0
- package/dist/harness/onboarding.test.d.ts.map +1 -0
- package/dist/harness/onboarding.test.js +93 -0
- package/dist/harness/onboarding.test.js.map +1 -0
- package/dist/harness/rules.d.ts +6 -1
- package/dist/harness/rules.d.ts.map +1 -1
- package/dist/harness/rules.js +52 -5
- package/dist/harness/rules.js.map +1 -1
- package/dist/harness/rules.test.js +30 -1
- package/dist/harness/rules.test.js.map +1 -1
- package/dist/harness/session.d.ts +8 -1
- package/dist/harness/session.d.ts.map +1 -1
- package/dist/harness/session.js +13 -5
- package/dist/harness/session.js.map +1 -1
- package/dist/harness/store.d.ts +46 -0
- package/dist/harness/store.d.ts.map +1 -0
- package/dist/harness/store.js +56 -0
- package/dist/harness/store.js.map +1 -0
- package/dist/harness/store.test.d.ts +2 -0
- package/dist/harness/store.test.d.ts.map +1 -0
- package/dist/harness/store.test.js +71 -0
- package/dist/harness/store.test.js.map +1 -0
- package/dist/harness/submit-handler.d.ts +2 -0
- package/dist/harness/submit-handler.d.ts.map +1 -1
- package/dist/harness/submit-handler.js +3 -0
- package/dist/harness/submit-handler.js.map +1 -1
- package/dist/main.js +153 -26
- package/dist/main.js.map +1 -1
- package/dist/mcp/client.d.ts +2 -0
- package/dist/mcp/client.d.ts.map +1 -1
- package/dist/mcp/client.js +10 -2
- package/dist/mcp/client.js.map +1 -1
- package/dist/mcp/loader.d.ts +2 -0
- package/dist/mcp/loader.d.ts.map +1 -1
- package/dist/mcp/loader.js +34 -18
- package/dist/mcp/loader.js.map +1 -1
- package/dist/mcp/loader.test.d.ts +7 -0
- package/dist/mcp/loader.test.d.ts.map +1 -0
- package/dist/mcp/loader.test.js +25 -0
- package/dist/mcp/loader.test.js.map +1 -0
- package/dist/providers/anthropic-convert.test.d.ts +5 -0
- package/dist/providers/anthropic-convert.test.d.ts.map +1 -0
- package/dist/providers/anthropic-convert.test.js +98 -0
- package/dist/providers/anthropic-convert.test.js.map +1 -0
- package/dist/providers/anthropic.d.ts.map +1 -1
- package/dist/providers/anthropic.js +23 -4
- package/dist/providers/anthropic.js.map +1 -1
- package/dist/providers/stream-parsing.test.d.ts +6 -0
- package/dist/providers/stream-parsing.test.d.ts.map +1 -0
- package/dist/providers/stream-parsing.test.js +174 -0
- package/dist/providers/stream-parsing.test.js.map +1 -0
- package/dist/query/compress.d.ts +17 -0
- package/dist/query/compress.d.ts.map +1 -0
- package/dist/query/compress.js +115 -0
- package/dist/query/compress.js.map +1 -0
- package/dist/query/errors.d.ts +10 -0
- package/dist/query/errors.d.ts.map +1 -0
- package/dist/query/errors.js +22 -0
- package/dist/query/errors.js.map +1 -0
- package/dist/query/index.d.ts +15 -0
- package/dist/query/index.d.ts.map +1 -0
- package/dist/query/index.js +199 -0
- package/dist/query/index.js.map +1 -0
- package/dist/query/tools.d.ts +17 -0
- package/dist/query/tools.d.ts.map +1 -0
- package/dist/query/tools.js +129 -0
- package/dist/query/tools.js.map +1 -0
- package/dist/query/types.d.ts +31 -0
- package/dist/query/types.d.ts.map +1 -0
- package/dist/query/types.js +5 -0
- package/dist/query/types.js.map +1 -0
- package/dist/query.d.ts +8 -38
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +7 -444
- package/dist/query.js.map +1 -1
- package/dist/query.test.js +1 -1
- package/dist/query.test.js.map +1 -1
- package/dist/renderer/cells.d.ts.map +1 -1
- package/dist/renderer/cells.js +15 -2
- package/dist/renderer/cells.js.map +1 -1
- package/dist/renderer/colors.d.ts +8 -0
- package/dist/renderer/colors.d.ts.map +1 -0
- package/dist/renderer/colors.js +18 -0
- package/dist/renderer/colors.js.map +1 -0
- package/dist/renderer/diff.test.d.ts +5 -0
- package/dist/renderer/diff.test.d.ts.map +1 -0
- package/dist/renderer/diff.test.js +140 -0
- package/dist/renderer/diff.test.js.map +1 -0
- package/dist/renderer/differ.d.ts.map +1 -1
- package/dist/renderer/differ.js +1 -10
- package/dist/renderer/differ.js.map +1 -1
- package/dist/renderer/e2e.test.js +1 -0
- package/dist/renderer/e2e.test.js.map +1 -1
- package/dist/renderer/image.test.d.ts +5 -0
- package/dist/renderer/image.test.d.ts.map +1 -0
- package/dist/renderer/image.test.js +66 -0
- package/dist/renderer/image.test.js.map +1 -0
- package/dist/renderer/index.d.ts +23 -4
- package/dist/renderer/index.d.ts.map +1 -1
- package/dist/renderer/index.js +203 -118
- package/dist/renderer/index.js.map +1 -1
- package/dist/renderer/layout.d.ts +5 -1
- package/dist/renderer/layout.d.ts.map +1 -1
- package/dist/renderer/layout.js +504 -614
- package/dist/renderer/layout.js.map +1 -1
- package/dist/renderer/markdown.d.ts.map +1 -1
- package/dist/renderer/markdown.js +42 -36
- package/dist/renderer/markdown.js.map +1 -1
- package/dist/renderer/perf.test.js +1 -0
- package/dist/renderer/perf.test.js.map +1 -1
- package/dist/renderer/session-browser.test.d.ts +6 -0
- package/dist/renderer/session-browser.test.d.ts.map +1 -0
- package/dist/renderer/session-browser.test.js +95 -0
- package/dist/renderer/session-browser.test.js.map +1 -0
- package/dist/renderer/ui-ux.test.d.ts +15 -0
- package/dist/renderer/ui-ux.test.d.ts.map +1 -0
- package/dist/renderer/ui-ux.test.js +470 -0
- package/dist/renderer/ui-ux.test.js.map +1 -0
- package/dist/repl.d.ts.map +1 -1
- package/dist/repl.js +246 -28
- package/dist/repl.js.map +1 -1
- package/dist/services/StreamingToolExecutor.d.ts.map +1 -1
- package/dist/services/StreamingToolExecutor.js +4 -2
- package/dist/services/StreamingToolExecutor.js.map +1 -1
- package/dist/services/agent-messaging.d.ts +68 -0
- package/dist/services/agent-messaging.d.ts.map +1 -0
- package/dist/services/agent-messaging.js +121 -0
- package/dist/services/agent-messaging.js.map +1 -0
- package/dist/services/agent-messaging.test.d.ts +2 -0
- package/dist/services/agent-messaging.test.d.ts.map +1 -0
- package/dist/services/agent-messaging.test.js +88 -0
- package/dist/services/agent-messaging.test.js.map +1 -0
- package/dist/services/cron.d.ts +40 -0
- package/dist/services/cron.d.ts.map +1 -0
- package/dist/services/cron.js +90 -0
- package/dist/services/cron.js.map +1 -0
- package/dist/services/cron.test.d.ts +2 -0
- package/dist/services/cron.test.d.ts.map +1 -0
- package/dist/services/cron.test.js +49 -0
- package/dist/services/cron.test.js.map +1 -0
- package/dist/tools/AgentTool/index.d.ts +9 -0
- package/dist/tools/AgentTool/index.d.ts.map +1 -1
- package/dist/tools/AgentTool/index.js +89 -6
- package/dist/tools/AgentTool/index.js.map +1 -1
- package/dist/tools/BashTool/index.d.ts +6 -0
- package/dist/tools/BashTool/index.d.ts.map +1 -1
- package/dist/tools/BashTool/index.js +39 -1
- package/dist/tools/BashTool/index.js.map +1 -1
- package/dist/tools/CronTool/index.d.ts +40 -0
- package/dist/tools/CronTool/index.d.ts.map +1 -0
- package/dist/tools/CronTool/index.js +59 -0
- package/dist/tools/CronTool/index.js.map +1 -0
- package/dist/tools/EnterWorktreeTool/index.d.ts +12 -0
- package/dist/tools/EnterWorktreeTool/index.d.ts.map +1 -0
- package/dist/tools/EnterWorktreeTool/index.js +27 -0
- package/dist/tools/EnterWorktreeTool/index.js.map +1 -0
- package/dist/tools/ExitWorktreeTool/index.d.ts +15 -0
- package/dist/tools/ExitWorktreeTool/index.d.ts.map +1 -0
- package/dist/tools/ExitWorktreeTool/index.js +33 -0
- package/dist/tools/ExitWorktreeTool/index.js.map +1 -0
- package/dist/tools/FileEditTool/index.js +4 -4
- package/dist/tools/FileEditTool/index.js.map +1 -1
- package/dist/tools/FileReadTool/index.d.ts +3 -0
- package/dist/tools/FileReadTool/index.d.ts.map +1 -1
- package/dist/tools/FileReadTool/index.js +102 -4
- package/dist/tools/FileReadTool/index.js.map +1 -1
- package/dist/tools/FileWriteTool/index.d.ts.map +1 -1
- package/dist/tools/FileWriteTool/index.js +20 -5
- package/dist/tools/FileWriteTool/index.js.map +1 -1
- package/dist/tools/GlobTool/index.d.ts.map +1 -1
- package/dist/tools/GlobTool/index.js +4 -61
- package/dist/tools/GlobTool/index.js.map +1 -1
- package/dist/tools/GrepTool/index.d.ts +30 -0
- package/dist/tools/GrepTool/index.d.ts.map +1 -1
- package/dist/tools/GrepTool/index.js +153 -72
- package/dist/tools/GrepTool/index.js.map +1 -1
- package/dist/tools/KillProcessTool/index.d.ts +18 -0
- package/dist/tools/KillProcessTool/index.d.ts.map +1 -0
- package/dist/tools/KillProcessTool/index.js +43 -0
- package/dist/tools/KillProcessTool/index.js.map +1 -0
- package/dist/tools/LSTool/index.d.ts +3 -0
- package/dist/tools/LSTool/index.d.ts.map +1 -1
- package/dist/tools/LSTool/index.js +44 -29
- package/dist/tools/LSTool/index.js.map +1 -1
- package/dist/tools/MemoryTool/index.d.ts +30 -0
- package/dist/tools/MemoryTool/index.d.ts.map +1 -0
- package/dist/tools/MemoryTool/index.js +56 -0
- package/dist/tools/MemoryTool/index.js.map +1 -0
- package/dist/tools/MultiEditTool/index.d.ts +32 -0
- package/dist/tools/MultiEditTool/index.d.ts.map +1 -0
- package/dist/tools/MultiEditTool/index.js +53 -0
- package/dist/tools/MultiEditTool/index.js.map +1 -0
- package/dist/tools/RemoteTriggerTool/index.d.ts +21 -0
- package/dist/tools/RemoteTriggerTool/index.d.ts.map +1 -0
- package/dist/tools/RemoteTriggerTool/index.js +43 -0
- package/dist/tools/RemoteTriggerTool/index.js.map +1 -0
- package/dist/tools/SendMessageTool/index.d.ts +18 -0
- package/dist/tools/SendMessageTool/index.d.ts.map +1 -0
- package/dist/tools/SendMessageTool/index.js +29 -0
- package/dist/tools/SendMessageTool/index.js.map +1 -0
- package/dist/tools/TaskCreateTool/index.d.ts +6 -0
- package/dist/tools/TaskCreateTool/index.d.ts.map +1 -1
- package/dist/tools/TaskCreateTool/index.js +8 -2
- package/dist/tools/TaskCreateTool/index.js.map +1 -1
- package/dist/tools/TaskGetTool/index.d.ts +12 -0
- package/dist/tools/TaskGetTool/index.d.ts.map +1 -0
- package/dist/tools/TaskGetTool/index.js +50 -0
- package/dist/tools/TaskGetTool/index.js.map +1 -0
- package/dist/tools/TaskOutputTool/index.d.ts +15 -0
- package/dist/tools/TaskOutputTool/index.d.ts.map +1 -0
- package/dist/tools/TaskOutputTool/index.js +45 -0
- package/dist/tools/TaskOutputTool/index.js.map +1 -0
- package/dist/tools/TaskStopTool/index.d.ts +15 -0
- package/dist/tools/TaskStopTool/index.d.ts.map +1 -0
- package/dist/tools/TaskStopTool/index.js +51 -0
- package/dist/tools/TaskStopTool/index.js.map +1 -0
- package/dist/tools/TaskUpdateTool/index.d.ts +21 -3
- package/dist/tools/TaskUpdateTool/index.d.ts.map +1 -1
- package/dist/tools/TaskUpdateTool/index.js +48 -3
- package/dist/tools/TaskUpdateTool/index.js.map +1 -1
- package/dist/tools/tools-basic.test.js +191 -2
- package/dist/tools/tools-basic.test.js.map +1 -1
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +38 -0
- package/dist/tools.js.map +1 -1
- package/dist/types/permissions.d.ts +2 -2
- package/dist/types/permissions.d.ts.map +1 -1
- package/dist/types/permissions.js +59 -13
- package/dist/types/permissions.js.map +1 -1
- package/dist/types/permissions.test.js +57 -0
- package/dist/types/permissions.test.js.map +1 -1
- package/dist/utils/bash-safety.d.ts +18 -0
- package/dist/utils/bash-safety.d.ts.map +1 -0
- package/dist/utils/bash-safety.js +227 -0
- package/dist/utils/bash-safety.js.map +1 -0
- package/dist/utils/bash-safety.test.d.ts +2 -0
- package/dist/utils/bash-safety.test.d.ts.map +1 -0
- package/dist/utils/bash-safety.test.js +112 -0
- package/dist/utils/bash-safety.test.js.map +1 -0
- package/dist/utils/fs.d.ts +15 -0
- package/dist/utils/fs.d.ts.map +1 -0
- package/dist/utils/fs.js +64 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/fs.test.d.ts +5 -0
- package/dist/utils/fs.test.d.ts.map +1 -0
- package/dist/utils/fs.test.js +82 -0
- package/dist/utils/fs.test.js.map +1 -0
- package/dist/utils/safe-env.d.ts +10 -0
- package/dist/utils/safe-env.d.ts.map +1 -0
- package/dist/utils/safe-env.js +40 -0
- package/dist/utils/safe-env.js.map +1 -0
- package/package.json +4 -1
|
@@ -3,7 +3,46 @@ import * as fs from "fs/promises";
|
|
|
3
3
|
import * as path from "path";
|
|
4
4
|
const inputSchema = z.object({
|
|
5
5
|
path: z.string().optional(),
|
|
6
|
+
depth: z.number().optional(),
|
|
6
7
|
});
|
|
8
|
+
const MAX_ENTRIES = 500;
|
|
9
|
+
async function listDir(dir, prefix, maxDepth, currentDepth) {
|
|
10
|
+
const entries = await fs.readdir(dir, { withFileTypes: true });
|
|
11
|
+
entries.sort((a, b) => {
|
|
12
|
+
if (a.isDirectory() !== b.isDirectory())
|
|
13
|
+
return a.isDirectory() ? -1 : 1;
|
|
14
|
+
return a.name.localeCompare(b.name);
|
|
15
|
+
});
|
|
16
|
+
const lines = [];
|
|
17
|
+
for (const entry of entries) {
|
|
18
|
+
if (lines.length >= MAX_ENTRIES)
|
|
19
|
+
break;
|
|
20
|
+
if (entry.name.startsWith(".") && currentDepth > 0)
|
|
21
|
+
continue; // skip dotfiles in subdirs
|
|
22
|
+
if (entry.isDirectory()) {
|
|
23
|
+
lines.push(`${prefix}${entry.name}/`);
|
|
24
|
+
if (currentDepth + 1 < maxDepth) {
|
|
25
|
+
const subLines = await listDir(path.join(dir, entry.name), prefix + " ", maxDepth, currentDepth + 1);
|
|
26
|
+
lines.push(...subLines);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
try {
|
|
31
|
+
const stat = await fs.stat(path.join(dir, entry.name));
|
|
32
|
+
const size = stat.size < 1024
|
|
33
|
+
? `${stat.size}B`
|
|
34
|
+
: stat.size < 1024 * 1024
|
|
35
|
+
? `${(stat.size / 1024).toFixed(1)}K`
|
|
36
|
+
: `${(stat.size / 1024 / 1024).toFixed(1)}M`;
|
|
37
|
+
lines.push(`${prefix}${entry.name.padEnd(Math.max(1, 40 - prefix.length))} ${size}`);
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
lines.push(`${prefix}${entry.name}`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return lines;
|
|
45
|
+
}
|
|
7
46
|
export const LSTool = {
|
|
8
47
|
name: "LS",
|
|
9
48
|
description: "List the contents of a directory.",
|
|
@@ -21,34 +60,9 @@ export const LSTool = {
|
|
|
21
60
|
? input.path
|
|
22
61
|
: path.resolve(context.workingDir, input.path)
|
|
23
62
|
: context.workingDir;
|
|
63
|
+
const maxDepth = input.depth ?? 1;
|
|
24
64
|
try {
|
|
25
|
-
const
|
|
26
|
-
entries.sort((a, b) => {
|
|
27
|
-
// Directories first, then files, both alphabetically
|
|
28
|
-
if (a.isDirectory() !== b.isDirectory())
|
|
29
|
-
return a.isDirectory() ? -1 : 1;
|
|
30
|
-
return a.name.localeCompare(b.name);
|
|
31
|
-
});
|
|
32
|
-
const lines = [];
|
|
33
|
-
for (const entry of entries) {
|
|
34
|
-
if (entry.isDirectory()) {
|
|
35
|
-
lines.push(`${entry.name}/`);
|
|
36
|
-
}
|
|
37
|
-
else {
|
|
38
|
-
try {
|
|
39
|
-
const stat = await fs.stat(path.join(dir, entry.name));
|
|
40
|
-
const size = stat.size < 1024
|
|
41
|
-
? `${stat.size}B`
|
|
42
|
-
: stat.size < 1024 * 1024
|
|
43
|
-
? `${(stat.size / 1024).toFixed(1)}K`
|
|
44
|
-
: `${(stat.size / 1024 / 1024).toFixed(1)}M`;
|
|
45
|
-
lines.push(`${entry.name.padEnd(40)} ${size}`);
|
|
46
|
-
}
|
|
47
|
-
catch {
|
|
48
|
-
lines.push(entry.name);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
}
|
|
65
|
+
const lines = await listDir(dir, "", maxDepth, 0);
|
|
52
66
|
if (lines.length === 0)
|
|
53
67
|
return { output: "(empty directory)", isError: false };
|
|
54
68
|
return { output: lines.join("\n"), isError: false };
|
|
@@ -62,9 +76,10 @@ export const LSTool = {
|
|
|
62
76
|
}
|
|
63
77
|
},
|
|
64
78
|
prompt() {
|
|
65
|
-
return `List the contents of a directory. Parameters:
|
|
79
|
+
return `List the contents of a directory. Use this instead of running 'ls' via Bash. Parameters:
|
|
66
80
|
- path (string, optional): Directory to list (default: working directory).
|
|
67
|
-
|
|
81
|
+
- depth (number, optional): How many levels deep to recurse (default 1 = immediate contents only). Use 2 or 3 for a tree view.
|
|
82
|
+
Directories are shown with a trailing slash and listed first. Files show their size. For recursive file discovery by pattern, use the Glob tool instead.`;
|
|
68
83
|
},
|
|
69
84
|
};
|
|
70
85
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/LSTool/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,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/LSTool/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { Tool } from "../../Tool.js";
|
|
3
|
+
declare const inputSchema: z.ZodObject<{
|
|
4
|
+
action: z.ZodEnum<["save", "list", "search"]>;
|
|
5
|
+
name: z.ZodOptional<z.ZodString>;
|
|
6
|
+
type: z.ZodOptional<z.ZodEnum<["convention", "preference", "project", "debugging"]>>;
|
|
7
|
+
description: z.ZodOptional<z.ZodString>;
|
|
8
|
+
content: z.ZodOptional<z.ZodString>;
|
|
9
|
+
query: z.ZodOptional<z.ZodString>;
|
|
10
|
+
global: z.ZodOptional<z.ZodBoolean>;
|
|
11
|
+
}, "strip", z.ZodTypeAny, {
|
|
12
|
+
action: "search" | "list" | "save";
|
|
13
|
+
content?: string | undefined;
|
|
14
|
+
type?: "convention" | "preference" | "project" | "debugging" | undefined;
|
|
15
|
+
global?: boolean | undefined;
|
|
16
|
+
name?: string | undefined;
|
|
17
|
+
description?: string | undefined;
|
|
18
|
+
query?: string | undefined;
|
|
19
|
+
}, {
|
|
20
|
+
action: "search" | "list" | "save";
|
|
21
|
+
content?: string | undefined;
|
|
22
|
+
type?: "convention" | "preference" | "project" | "debugging" | undefined;
|
|
23
|
+
global?: boolean | undefined;
|
|
24
|
+
name?: string | undefined;
|
|
25
|
+
description?: string | undefined;
|
|
26
|
+
query?: string | undefined;
|
|
27
|
+
}>;
|
|
28
|
+
export declare const MemoryTool: Tool<typeof inputSchema>;
|
|
29
|
+
export {};
|
|
30
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/MemoryTool/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,IAAI,EAAc,MAAM,eAAe,CAAC;AAGtD,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;EAQf,CAAC;AAEH,eAAO,MAAM,UAAU,EAAE,IAAI,CAAC,OAAO,WAAW,CAsD/C,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { saveMemory, loadActiveMemories, touchMemory } from "../../harness/memory.js";
|
|
3
|
+
const inputSchema = z.object({
|
|
4
|
+
action: z.enum(["save", "list", "search"]),
|
|
5
|
+
name: z.string().optional().describe("Memory name (for save)"),
|
|
6
|
+
type: z.enum(["convention", "preference", "project", "debugging"]).optional(),
|
|
7
|
+
description: z.string().optional(),
|
|
8
|
+
content: z.string().optional().describe("Memory content (for save)"),
|
|
9
|
+
query: z.string().optional().describe("Search query (for search)"),
|
|
10
|
+
global: z.boolean().optional().describe("Save to global memory instead of project"),
|
|
11
|
+
});
|
|
12
|
+
export const MemoryTool = {
|
|
13
|
+
name: "Memory",
|
|
14
|
+
description: "Save, list, or search persistent memories that survive across sessions.",
|
|
15
|
+
inputSchema,
|
|
16
|
+
riskLevel: "low",
|
|
17
|
+
isReadOnly(input) { return input.action !== 'save'; },
|
|
18
|
+
isConcurrencySafe() { return true; },
|
|
19
|
+
async call(input) {
|
|
20
|
+
if (input.action === 'save') {
|
|
21
|
+
if (!input.name || !input.content) {
|
|
22
|
+
return { output: "name and content required for save.", isError: true };
|
|
23
|
+
}
|
|
24
|
+
const path = saveMemory(input.name, input.type ?? 'convention', input.description ?? input.name, input.content, input.global);
|
|
25
|
+
return { output: `Memory saved: ${path}`, isError: false };
|
|
26
|
+
}
|
|
27
|
+
if (input.action === 'list') {
|
|
28
|
+
const memories = loadActiveMemories();
|
|
29
|
+
if (memories.length === 0)
|
|
30
|
+
return { output: "No memories saved.", isError: false };
|
|
31
|
+
const lines = memories.map(m => `[${m.type}] ${m.name} (relevance: ${(m.relevance ?? 0.5).toFixed(1)}) — ${m.description}`);
|
|
32
|
+
return { output: lines.join('\n'), isError: false };
|
|
33
|
+
}
|
|
34
|
+
if (input.action === 'search') {
|
|
35
|
+
if (!input.query)
|
|
36
|
+
return { output: "query required for search.", isError: true };
|
|
37
|
+
const memories = loadActiveMemories();
|
|
38
|
+
const q = input.query.toLowerCase();
|
|
39
|
+
const matches = memories.filter(m => m.name.toLowerCase().includes(q) ||
|
|
40
|
+
m.content.toLowerCase().includes(q) ||
|
|
41
|
+
m.description.toLowerCase().includes(q));
|
|
42
|
+
if (matches.length === 0)
|
|
43
|
+
return { output: `No memories matching "${input.query}".`, isError: false };
|
|
44
|
+
// Touch accessed memories to boost relevance
|
|
45
|
+
for (const m of matches)
|
|
46
|
+
touchMemory(m);
|
|
47
|
+
const lines = matches.map(m => `[${m.type}] ${m.name}: ${m.content.slice(0, 200)}`);
|
|
48
|
+
return { output: lines.join('\n\n'), isError: false };
|
|
49
|
+
}
|
|
50
|
+
return { output: "Unknown action.", isError: true };
|
|
51
|
+
},
|
|
52
|
+
prompt() {
|
|
53
|
+
return "Memory: Save/list/search persistent memories across sessions. Actions: save, list, search.";
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/MemoryTool/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { Tool } from "../../Tool.js";
|
|
3
|
+
declare const inputSchema: z.ZodObject<{
|
|
4
|
+
edits: z.ZodArray<z.ZodObject<{
|
|
5
|
+
file_path: z.ZodString;
|
|
6
|
+
old_string: z.ZodString;
|
|
7
|
+
new_string: z.ZodString;
|
|
8
|
+
}, "strip", z.ZodTypeAny, {
|
|
9
|
+
file_path: string;
|
|
10
|
+
old_string: string;
|
|
11
|
+
new_string: string;
|
|
12
|
+
}, {
|
|
13
|
+
file_path: string;
|
|
14
|
+
old_string: string;
|
|
15
|
+
new_string: string;
|
|
16
|
+
}>, "many">;
|
|
17
|
+
}, "strip", z.ZodTypeAny, {
|
|
18
|
+
edits: {
|
|
19
|
+
file_path: string;
|
|
20
|
+
old_string: string;
|
|
21
|
+
new_string: string;
|
|
22
|
+
}[];
|
|
23
|
+
}, {
|
|
24
|
+
edits: {
|
|
25
|
+
file_path: string;
|
|
26
|
+
old_string: string;
|
|
27
|
+
new_string: string;
|
|
28
|
+
}[];
|
|
29
|
+
}>;
|
|
30
|
+
export declare const MultiEditTool: Tool<typeof inputSchema>;
|
|
31
|
+
export {};
|
|
32
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/MultiEditTool/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,IAAI,EAAc,MAAM,eAAe,CAAC;AAStD,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;EAEf,CAAC;AAEH,eAAO,MAAM,aAAa,EAAE,IAAI,CAAC,OAAO,WAAW,CA8ClD,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { readFileSync, writeFileSync, existsSync } from "node:fs";
|
|
3
|
+
const editSchema = z.object({
|
|
4
|
+
file_path: z.string(),
|
|
5
|
+
old_string: z.string(),
|
|
6
|
+
new_string: z.string(),
|
|
7
|
+
});
|
|
8
|
+
const inputSchema = z.object({
|
|
9
|
+
edits: z.array(editSchema).describe("Array of edits to apply atomically"),
|
|
10
|
+
});
|
|
11
|
+
export const MultiEditTool = {
|
|
12
|
+
name: "MultiEdit",
|
|
13
|
+
description: "Apply multiple file edits atomically. All edits succeed or none do. Useful for coordinated changes across files.",
|
|
14
|
+
inputSchema,
|
|
15
|
+
riskLevel: "medium",
|
|
16
|
+
isReadOnly() { return false; },
|
|
17
|
+
isConcurrencySafe() { return false; },
|
|
18
|
+
async call(input) {
|
|
19
|
+
// Phase 1: Validate all edits can be applied
|
|
20
|
+
const originals = new Map();
|
|
21
|
+
const modified = new Map();
|
|
22
|
+
for (const edit of input.edits) {
|
|
23
|
+
if (!existsSync(edit.file_path)) {
|
|
24
|
+
return { output: `File not found: ${edit.file_path}`, isError: true };
|
|
25
|
+
}
|
|
26
|
+
if (!originals.has(edit.file_path)) {
|
|
27
|
+
originals.set(edit.file_path, readFileSync(edit.file_path, 'utf-8'));
|
|
28
|
+
}
|
|
29
|
+
const current = modified.get(edit.file_path) ?? originals.get(edit.file_path);
|
|
30
|
+
if (!current.includes(edit.old_string)) {
|
|
31
|
+
return {
|
|
32
|
+
output: `old_string not found in ${edit.file_path}: "${edit.old_string.slice(0, 80)}"`,
|
|
33
|
+
isError: true,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
modified.set(edit.file_path, current.replace(edit.old_string, edit.new_string));
|
|
37
|
+
}
|
|
38
|
+
// Phase 2: Apply all edits
|
|
39
|
+
const results = [];
|
|
40
|
+
for (const [path, content] of modified) {
|
|
41
|
+
writeFileSync(path, content);
|
|
42
|
+
results.push(path);
|
|
43
|
+
}
|
|
44
|
+
return {
|
|
45
|
+
output: `Applied ${input.edits.length} edit(s) across ${results.length} file(s): ${results.join(', ')}`,
|
|
46
|
+
isError: false,
|
|
47
|
+
};
|
|
48
|
+
},
|
|
49
|
+
prompt() {
|
|
50
|
+
return "MultiEdit: Apply multiple file edits atomically. All succeed or none do.";
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/MultiEditTool/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAElE,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;CACvB,CAAC,CAAC;AAEH,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,oCAAoC,CAAC;CAC1E,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,aAAa,GAA6B;IACrD,IAAI,EAAE,WAAW;IACjB,WAAW,EAAE,kHAAkH;IAC/H,WAAW;IACX,SAAS,EAAE,QAAQ;IACnB,UAAU,KAAK,OAAO,KAAK,CAAC,CAAC,CAAC;IAC9B,iBAAiB,KAAK,OAAO,KAAK,CAAC,CAAC,CAAC;IAErC,KAAK,CAAC,IAAI,CAAC,KAAK;QACd,6CAA6C;QAC7C,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC5C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;QAE3C,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAC/B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBAChC,OAAO,EAAE,MAAM,EAAE,mBAAmB,IAAI,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YACxE,CAAC;YACD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBACnC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;YACvE,CAAC;YACD,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAE,CAAC;YAC/E,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBACvC,OAAO;oBACL,MAAM,EAAE,2BAA2B,IAAI,CAAC,SAAS,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG;oBACtF,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YACD,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAClF,CAAC;QAED,2BAA2B;QAC3B,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,QAAQ,EAAE,CAAC;YACvC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC7B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;QAED,OAAO;YACL,MAAM,EAAE,WAAW,KAAK,CAAC,KAAK,CAAC,MAAM,mBAAmB,OAAO,CAAC,MAAM,aAAa,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACvG,OAAO,EAAE,KAAK;SACf,CAAC;IACJ,CAAC;IAED,MAAM;QACJ,OAAO,0EAA0E,CAAC;IACpF,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { Tool } from "../../Tool.js";
|
|
3
|
+
declare const inputSchema: z.ZodObject<{
|
|
4
|
+
url: z.ZodString;
|
|
5
|
+
method: z.ZodOptional<z.ZodEnum<["GET", "POST", "PUT", "DELETE"]>>;
|
|
6
|
+
body: z.ZodOptional<z.ZodString>;
|
|
7
|
+
headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
8
|
+
}, "strip", z.ZodTypeAny, {
|
|
9
|
+
url: string;
|
|
10
|
+
method?: "POST" | "GET" | "PUT" | "DELETE" | undefined;
|
|
11
|
+
body?: string | undefined;
|
|
12
|
+
headers?: Record<string, string> | undefined;
|
|
13
|
+
}, {
|
|
14
|
+
url: string;
|
|
15
|
+
method?: "POST" | "GET" | "PUT" | "DELETE" | undefined;
|
|
16
|
+
body?: string | undefined;
|
|
17
|
+
headers?: Record<string, string> | undefined;
|
|
18
|
+
}>;
|
|
19
|
+
export declare const RemoteTriggerTool: 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/RemoteTriggerTool/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,IAAI,EAAc,MAAM,eAAe,CAAC;AAEtD,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;EAKf,CAAC;AAEH,eAAO,MAAM,iBAAiB,EAAE,IAAI,CAAC,OAAO,WAAW,CAqCtD,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
const inputSchema = z.object({
|
|
3
|
+
url: z.string().describe("Webhook URL to trigger"),
|
|
4
|
+
method: z.enum(["GET", "POST", "PUT", "DELETE"]).optional(),
|
|
5
|
+
body: z.string().optional().describe("JSON body for POST/PUT requests"),
|
|
6
|
+
headers: z.record(z.string()).optional().describe("Custom headers"),
|
|
7
|
+
});
|
|
8
|
+
export const RemoteTriggerTool = {
|
|
9
|
+
name: "RemoteTrigger",
|
|
10
|
+
description: "Trigger a remote webhook or API endpoint. Useful for CI/CD, deployments, and external integrations.",
|
|
11
|
+
inputSchema,
|
|
12
|
+
riskLevel: "high",
|
|
13
|
+
isReadOnly() { return false; },
|
|
14
|
+
isConcurrencySafe() { return true; },
|
|
15
|
+
async call(input) {
|
|
16
|
+
try {
|
|
17
|
+
const method = input.method ?? (input.body ? "POST" : "GET");
|
|
18
|
+
const headers = {
|
|
19
|
+
'Content-Type': 'application/json',
|
|
20
|
+
...input.headers,
|
|
21
|
+
};
|
|
22
|
+
const res = await fetch(input.url, {
|
|
23
|
+
method,
|
|
24
|
+
headers,
|
|
25
|
+
body: input.body,
|
|
26
|
+
signal: AbortSignal.timeout(30_000),
|
|
27
|
+
});
|
|
28
|
+
const text = await res.text();
|
|
29
|
+
const truncated = text.length > 5000 ? text.slice(0, 5000) + '\n[truncated]' : text;
|
|
30
|
+
return {
|
|
31
|
+
output: `${res.status} ${res.statusText}\n${truncated}`,
|
|
32
|
+
isError: res.status >= 400,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
return { output: `Request failed: ${err instanceof Error ? err.message : String(err)}`, isError: true };
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
prompt() {
|
|
40
|
+
return "RemoteTrigger: Send HTTP requests to webhooks, APIs, or CI/CD triggers.";
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/RemoteTriggerTool/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IAClD,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC3D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IACvE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;CACpE,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAA6B;IACzD,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,qGAAqG;IAClH,WAAW;IACX,SAAS,EAAE,MAAM;IACjB,UAAU,KAAK,OAAO,KAAK,CAAC,CAAC,CAAC;IAC9B,iBAAiB,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC;IAEpC,KAAK,CAAC,IAAI,CAAC,KAAK;QACd,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAC7D,MAAM,OAAO,GAA2B;gBACtC,cAAc,EAAE,kBAAkB;gBAClC,GAAG,KAAK,CAAC,OAAO;aACjB,CAAC;YAEF,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE;gBACjC,MAAM;gBACN,OAAO;gBACP,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;aACpC,CAAC,CAAC;YAEH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC;YACpF,OAAO;gBACL,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,KAAK,SAAS,EAAE;gBACvD,OAAO,EAAE,GAAG,CAAC,MAAM,IAAI,GAAG;aAC3B,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,EAAE,MAAM,EAAE,mBAAmB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC1G,CAAC;IACH,CAAC;IAED,MAAM;QACJ,OAAO,yEAAyE,CAAC;IACnF,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { Tool } from "../../Tool.js";
|
|
3
|
+
declare const inputSchema: z.ZodObject<{
|
|
4
|
+
to: z.ZodString;
|
|
5
|
+
content: z.ZodString;
|
|
6
|
+
type: z.ZodOptional<z.ZodEnum<["request", "response", "status", "error"]>>;
|
|
7
|
+
}, "strip", z.ZodTypeAny, {
|
|
8
|
+
content: string;
|
|
9
|
+
to: string;
|
|
10
|
+
type?: "error" | "status" | "request" | "response" | undefined;
|
|
11
|
+
}, {
|
|
12
|
+
content: string;
|
|
13
|
+
to: string;
|
|
14
|
+
type?: "error" | "status" | "request" | "response" | undefined;
|
|
15
|
+
}>;
|
|
16
|
+
export declare const SendMessageTool: Tool<typeof inputSchema>;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/SendMessageTool/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,IAAI,EAAc,MAAM,eAAe,CAAC;AAGtD,QAAA,MAAM,WAAW;;;;;;;;;;;;EAIf,CAAC;AAEH,eAAO,MAAM,eAAe,EAAE,IAAI,CAAC,OAAO,WAAW,CAuBpD,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { getMessageBus } from "../../services/agent-messaging.js";
|
|
3
|
+
const inputSchema = z.object({
|
|
4
|
+
to: z.string().describe("Target agent ID, or '*' for broadcast"),
|
|
5
|
+
content: z.string().describe("Message content"),
|
|
6
|
+
type: z.enum(["request", "response", "status", "error"]).optional(),
|
|
7
|
+
});
|
|
8
|
+
export const SendMessageTool = {
|
|
9
|
+
name: "SendMessage",
|
|
10
|
+
description: "Send a message to another agent. Use for coordination in multi-agent workflows.",
|
|
11
|
+
inputSchema,
|
|
12
|
+
riskLevel: "low",
|
|
13
|
+
isReadOnly() { return true; },
|
|
14
|
+
isConcurrencySafe() { return true; },
|
|
15
|
+
async call(input) {
|
|
16
|
+
const bus = getMessageBus();
|
|
17
|
+
bus.send({
|
|
18
|
+
from: 'lead',
|
|
19
|
+
to: input.to,
|
|
20
|
+
type: input.type ?? 'request',
|
|
21
|
+
content: input.content,
|
|
22
|
+
});
|
|
23
|
+
return { output: `Message sent to ${input.to}`, isError: false };
|
|
24
|
+
},
|
|
25
|
+
prompt() {
|
|
26
|
+
return "SendMessage: Send messages to other agents for coordination. Use to: '*' for broadcast.";
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/SendMessageTool/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAElE,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IAChE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IAC/C,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE;CACpE,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,eAAe,GAA6B;IACvD,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,iFAAiF;IAC9F,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;QACd,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;QAC5B,GAAG,CAAC,IAAI,CAAC;YACP,IAAI,EAAE,MAAM;YACZ,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,SAAS;YAC7B,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC,CAAC;QACH,OAAO,EAAE,MAAM,EAAE,mBAAmB,KAAK,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACnE,CAAC;IAED,MAAM;QACJ,OAAO,yFAAyF,CAAC;IACnG,CAAC;CACF,CAAC"}
|
|
@@ -3,12 +3,18 @@ import type { Tool } from "../../Tool.js";
|
|
|
3
3
|
declare const inputSchema: z.ZodObject<{
|
|
4
4
|
subject: z.ZodString;
|
|
5
5
|
description: z.ZodString;
|
|
6
|
+
activeForm: z.ZodOptional<z.ZodString>;
|
|
7
|
+
metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
6
8
|
}, "strip", z.ZodTypeAny, {
|
|
7
9
|
description: string;
|
|
8
10
|
subject: string;
|
|
11
|
+
activeForm?: string | undefined;
|
|
12
|
+
metadata?: Record<string, unknown> | undefined;
|
|
9
13
|
}, {
|
|
10
14
|
description: string;
|
|
11
15
|
subject: string;
|
|
16
|
+
activeForm?: string | undefined;
|
|
17
|
+
metadata?: Record<string, unknown> | undefined;
|
|
12
18
|
}>;
|
|
13
19
|
export declare const TaskCreateTool: Tool<typeof inputSchema>;
|
|
14
20
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/TaskCreateTool/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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/TaskCreateTool/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;;;;;;;;;;;;;;;EAKf,CAAC;AAeH,eAAO,MAAM,cAAc,EAAE,IAAI,CAAC,OAAO,WAAW,CAwDnD,CAAC"}
|
|
@@ -4,6 +4,8 @@ import * as path from "path";
|
|
|
4
4
|
const inputSchema = z.object({
|
|
5
5
|
subject: z.string(),
|
|
6
6
|
description: z.string(),
|
|
7
|
+
activeForm: z.string().optional(),
|
|
8
|
+
metadata: z.record(z.unknown()).optional(),
|
|
7
9
|
});
|
|
8
10
|
export const TaskCreateTool = {
|
|
9
11
|
name: "TaskCreate",
|
|
@@ -35,6 +37,8 @@ export const TaskCreateTool = {
|
|
|
35
37
|
subject: input.subject,
|
|
36
38
|
description: input.description,
|
|
37
39
|
status: "pending",
|
|
40
|
+
...(input.activeForm ? { activeForm: input.activeForm } : {}),
|
|
41
|
+
...(input.metadata ? { metadata: input.metadata } : {}),
|
|
38
42
|
};
|
|
39
43
|
tasks.push(newTask);
|
|
40
44
|
await fs.writeFile(filePath, JSON.stringify(tasks, null, 2), "utf-8");
|
|
@@ -46,8 +50,10 @@ export const TaskCreateTool = {
|
|
|
46
50
|
},
|
|
47
51
|
prompt() {
|
|
48
52
|
return `Create a new task in .oh/tasks.json. Parameters:
|
|
49
|
-
- subject (string, required):
|
|
50
|
-
- description (string, required):
|
|
53
|
+
- subject (string, required): A brief, actionable title in imperative form (e.g., "Fix authentication bug").
|
|
54
|
+
- description (string, required): What needs to be done.
|
|
55
|
+
- activeForm (string, optional): Present continuous form shown in spinner when in_progress (e.g., "Fixing authentication bug").
|
|
56
|
+
- metadata (object, optional): Arbitrary metadata to attach to the task.
|
|
51
57
|
Each task gets an auto-incremented ID and starts with status "pending".`;
|
|
52
58
|
},
|
|
53
59
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/TaskCreateTool/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,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/TaskCreateTool/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,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;CAC3C,CAAC,CAAC;AAeH,MAAM,CAAC,MAAM,cAAc,GAA6B;IACtD,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE,oDAAoD;IACjE,WAAW;IACX,SAAS,EAAE,KAAK;IAEhB,UAAU;QACR,OAAO,KAAK,CAAC;IACf,CAAC;IAED,iBAAiB;QACf,OAAO,KAAK,CAAC,CAAC,4BAA4B;IAC5C,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO;QACvB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QAE9C,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAEzC,IAAI,KAAK,GAAW,EAAE,CAAC;YACvB,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBACrD,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC9B,CAAC;YAAC,MAAM,CAAC;gBACP,yBAAyB;YAC3B,CAAC;YAED,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/D,MAAM,OAAO,GAAS;gBACpB,EAAE,EAAE,KAAK,GAAG,CAAC;gBACb,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,MAAM,EAAE,SAAS;gBACjB,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7D,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACxD,CAAC;YAEF,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACpB,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YAEtE,OAAO,EAAE,MAAM,EAAE,SAAS,OAAO,CAAC,EAAE,aAAa,OAAO,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QACvF,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,EAAE,MAAM,EAAE,wBAAwB,GAAG,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC1E,CAAC;IACH,CAAC;IAED,MAAM;QACJ,OAAO;;;;;wEAK6D,CAAC;IACvE,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { Tool } from "../../Tool.js";
|
|
3
|
+
declare const inputSchema: z.ZodObject<{
|
|
4
|
+
taskId: z.ZodNumber;
|
|
5
|
+
}, "strip", z.ZodTypeAny, {
|
|
6
|
+
taskId: number;
|
|
7
|
+
}, {
|
|
8
|
+
taskId: number;
|
|
9
|
+
}>;
|
|
10
|
+
export declare const TaskGetTool: Tool<typeof inputSchema>;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/TaskGetTool/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;;;;;;EAEf,CAAC;AAUH,eAAO,MAAM,WAAW,EAAE,IAAI,CAAC,OAAO,WAAW,CAiDhD,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import * as fs from "fs/promises";
|
|
3
|
+
import * as path from "path";
|
|
4
|
+
const inputSchema = z.object({
|
|
5
|
+
taskId: z.number(),
|
|
6
|
+
});
|
|
7
|
+
export const TaskGetTool = {
|
|
8
|
+
name: "TaskGet",
|
|
9
|
+
description: "Get details of a single task by ID.",
|
|
10
|
+
inputSchema,
|
|
11
|
+
riskLevel: "low",
|
|
12
|
+
isReadOnly() {
|
|
13
|
+
return true;
|
|
14
|
+
},
|
|
15
|
+
isConcurrencySafe() {
|
|
16
|
+
return true;
|
|
17
|
+
},
|
|
18
|
+
async call(input, context) {
|
|
19
|
+
const filePath = path.join(context.workingDir, ".oh", "tasks.json");
|
|
20
|
+
try {
|
|
21
|
+
const content = await fs.readFile(filePath, "utf-8");
|
|
22
|
+
const tasks = JSON.parse(content);
|
|
23
|
+
const task = tasks.find((t) => t.id === input.taskId);
|
|
24
|
+
if (!task) {
|
|
25
|
+
return { output: `Error: Task #${input.taskId} not found.`, isError: true };
|
|
26
|
+
}
|
|
27
|
+
const lines = [
|
|
28
|
+
`Task #${task.id}`,
|
|
29
|
+
`Subject: ${task.subject}`,
|
|
30
|
+
`Status: ${task.status}`,
|
|
31
|
+
`Description: ${task.description}`,
|
|
32
|
+
];
|
|
33
|
+
if (task.output) {
|
|
34
|
+
lines.push(`Output: ${task.output}`);
|
|
35
|
+
}
|
|
36
|
+
return { output: lines.join("\n"), isError: false };
|
|
37
|
+
}
|
|
38
|
+
catch (err) {
|
|
39
|
+
if (err.code === "ENOENT") {
|
|
40
|
+
return { output: "Error: No tasks file found.", isError: true };
|
|
41
|
+
}
|
|
42
|
+
return { output: `Error: ${err.message}`, isError: true };
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
prompt() {
|
|
46
|
+
return `Get full details of a single task by ID. Parameters:
|
|
47
|
+
- taskId (number, required): The ID of the task to retrieve.`;
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/TaskGetTool/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,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;CACnB,CAAC,CAAC;AAUH,MAAM,CAAC,MAAM,WAAW,GAA6B;IACnD,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,qCAAqC;IAClD,WAAW;IACX,SAAS,EAAE,KAAK;IAEhB,UAAU;QACR,OAAO,IAAI,CAAC;IACd,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;QAEpE,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACrD,MAAM,KAAK,GAAW,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAE1C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC;YACtD,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO,EAAE,MAAM,EAAE,gBAAgB,KAAK,CAAC,MAAM,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC9E,CAAC;YAED,MAAM,KAAK,GAAG;gBACZ,SAAS,IAAI,CAAC,EAAE,EAAE;gBAClB,YAAY,IAAI,CAAC,OAAO,EAAE;gBAC1B,WAAW,IAAI,CAAC,MAAM,EAAE;gBACxB,gBAAgB,IAAI,CAAC,WAAW,EAAE;aACnC,CAAC;YACF,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YACvC,CAAC;YAED,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QACtD,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC1B,OAAO,EAAE,MAAM,EAAE,6BAA6B,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAClE,CAAC;YACD,OAAO,EAAE,MAAM,EAAE,UAAU,GAAG,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC5D,CAAC;IACH,CAAC;IAED,MAAM;QACJ,OAAO;6DACkD,CAAC;IAC5D,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
|
+
taskId: z.ZodNumber;
|
|
5
|
+
output: z.ZodString;
|
|
6
|
+
}, "strip", z.ZodTypeAny, {
|
|
7
|
+
output: string;
|
|
8
|
+
taskId: number;
|
|
9
|
+
}, {
|
|
10
|
+
output: string;
|
|
11
|
+
taskId: number;
|
|
12
|
+
}>;
|
|
13
|
+
export declare const TaskOutputTool: 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/TaskOutputTool/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;AAUH,eAAO,MAAM,cAAc,EAAE,IAAI,CAAC,OAAO,WAAW,CA2CnD,CAAC"}
|