@zhijiewang/openharness 0.11.0 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +203 -23
- package/dist/DeferredTool.d.ts +34 -0
- package/dist/DeferredTool.d.ts.map +1 -0
- package/dist/DeferredTool.js +62 -0
- package/dist/DeferredTool.js.map +1 -0
- package/dist/DeferredTool.test.d.ts +2 -0
- package/dist/DeferredTool.test.d.ts.map +1 -0
- package/dist/DeferredTool.test.js +79 -0
- package/dist/DeferredTool.test.js.map +1 -0
- package/dist/agents/roles.d.ts.map +1 -1
- package/dist/agents/roles.js +20 -6
- package/dist/agents/roles.js.map +1 -1
- package/dist/agents/roles.test.js +26 -2
- package/dist/agents/roles.test.js.map +1 -1
- package/dist/harness/config.d.ts +15 -0
- package/dist/harness/config.d.ts.map +1 -1
- package/dist/harness/config.js +45 -23
- package/dist/harness/config.js.map +1 -1
- package/dist/harness/memory-consolidation.test.d.ts +2 -0
- package/dist/harness/memory-consolidation.test.d.ts.map +1 -0
- package/dist/harness/memory-consolidation.test.js +152 -0
- package/dist/harness/memory-consolidation.test.js.map +1 -0
- package/dist/harness/memory.d.ts +12 -0
- package/dist/harness/memory.d.ts.map +1 -1
- package/dist/harness/memory.js +53 -2
- package/dist/harness/memory.js.map +1 -1
- package/dist/harness/memory.test.js +43 -1
- package/dist/harness/memory.test.js.map +1 -1
- package/dist/harness/session.test.js +36 -0
- package/dist/harness/session.test.js.map +1 -1
- package/dist/harness/verification.d.ts +41 -0
- package/dist/harness/verification.d.ts.map +1 -0
- package/dist/harness/verification.js +197 -0
- package/dist/harness/verification.js.map +1 -0
- package/dist/harness/verification.test.d.ts +2 -0
- package/dist/harness/verification.test.d.ts.map +1 -0
- package/dist/harness/verification.test.js +181 -0
- package/dist/harness/verification.test.js.map +1 -0
- package/dist/query/index.d.ts.map +1 -1
- package/dist/query/index.js +9 -1
- package/dist/query/index.js.map +1 -1
- package/dist/query/tools.d.ts.map +1 -1
- package/dist/query/tools.js +30 -4
- package/dist/query/tools.js.map +1 -1
- package/dist/renderer/index.d.ts +2 -0
- package/dist/renderer/index.d.ts.map +1 -1
- package/dist/renderer/index.js +26 -16
- package/dist/renderer/index.js.map +1 -1
- package/dist/repl.d.ts.map +1 -1
- package/dist/repl.js +90 -15
- package/dist/repl.js.map +1 -1
- package/dist/services/AgentDispatcher.d.ts +1 -0
- package/dist/services/AgentDispatcher.d.ts.map +1 -1
- package/dist/services/AgentDispatcher.js +10 -1
- package/dist/services/AgentDispatcher.js.map +1 -1
- package/dist/services/CronExecutor.d.ts +38 -0
- package/dist/services/CronExecutor.d.ts.map +1 -0
- package/dist/services/CronExecutor.js +130 -0
- package/dist/services/CronExecutor.js.map +1 -0
- package/dist/services/CronExecutor.test.d.ts +2 -0
- package/dist/services/CronExecutor.test.d.ts.map +1 -0
- package/dist/services/CronExecutor.test.js +128 -0
- package/dist/services/CronExecutor.test.js.map +1 -0
- package/dist/services/StreamingToolExecutor.d.ts.map +1 -1
- package/dist/services/StreamingToolExecutor.js +28 -0
- package/dist/services/StreamingToolExecutor.js.map +1 -1
- package/dist/services/cron.d.ts +4 -0
- package/dist/services/cron.d.ts.map +1 -1
- package/dist/services/cron.js +27 -0
- package/dist/services/cron.js.map +1 -1
- package/dist/tools/AgentTool/index.d.ts +3 -0
- package/dist/tools/AgentTool/index.d.ts.map +1 -1
- package/dist/tools/AgentTool/index.js +17 -4
- package/dist/tools/AgentTool/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/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/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/ToolSearchTool/index.d.ts.map +1 -1
- package/dist/tools/ToolSearchTool/index.js +7 -0
- package/dist/tools/ToolSearchTool/index.js.map +1 -1
- package/dist/tools.d.ts +8 -0
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +56 -25
- package/dist/tools.js.map +1 -1
- package/package.json +2 -1
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { createCron, deleteCron, listCrons } from "../../services/cron.js";
|
|
3
|
+
const createSchema = z.object({
|
|
4
|
+
action: z.literal("create"),
|
|
5
|
+
name: z.string().describe("Human-readable name for this scheduled task"),
|
|
6
|
+
schedule: z.string().describe("Schedule: 'every 5m', 'every 2h', 'every 1d'"),
|
|
7
|
+
prompt: z.string().describe("The prompt to run on schedule"),
|
|
8
|
+
});
|
|
9
|
+
const deleteSchema = z.object({
|
|
10
|
+
action: z.literal("delete"),
|
|
11
|
+
id: z.string().describe("Cron ID to delete"),
|
|
12
|
+
});
|
|
13
|
+
const listSchema = z.object({
|
|
14
|
+
action: z.literal("list"),
|
|
15
|
+
});
|
|
16
|
+
const inputSchema = z.discriminatedUnion("action", [createSchema, deleteSchema, listSchema]);
|
|
17
|
+
export const CronCreateTool = {
|
|
18
|
+
name: "CronCreate",
|
|
19
|
+
description: "Create a scheduled recurring task that runs a prompt on an interval.",
|
|
20
|
+
inputSchema: createSchema,
|
|
21
|
+
riskLevel: "medium",
|
|
22
|
+
isReadOnly() { return false; },
|
|
23
|
+
isConcurrencySafe() { return true; },
|
|
24
|
+
async call(input) {
|
|
25
|
+
const cron = createCron(input.name, input.schedule, input.prompt);
|
|
26
|
+
return { output: `Created cron '${cron.name}' (${cron.id}) — schedule: ${cron.schedule}`, isError: false };
|
|
27
|
+
},
|
|
28
|
+
prompt() { return "CronCreate: Schedule a recurring task. Schedules: 'every 5m', 'every 2h', 'every 1d'."; },
|
|
29
|
+
};
|
|
30
|
+
export const CronDeleteTool = {
|
|
31
|
+
name: "CronDelete",
|
|
32
|
+
description: "Delete a scheduled recurring task.",
|
|
33
|
+
inputSchema: deleteSchema,
|
|
34
|
+
riskLevel: "medium",
|
|
35
|
+
isReadOnly() { return false; },
|
|
36
|
+
isConcurrencySafe() { return true; },
|
|
37
|
+
async call(input) {
|
|
38
|
+
const ok = deleteCron(input.id);
|
|
39
|
+
return { output: ok ? `Deleted cron ${input.id}` : `Cron ${input.id} not found`, isError: !ok };
|
|
40
|
+
},
|
|
41
|
+
prompt() { return "CronDelete: Remove a scheduled task by ID."; },
|
|
42
|
+
};
|
|
43
|
+
export const CronListTool = {
|
|
44
|
+
name: "CronList",
|
|
45
|
+
description: "List all scheduled recurring tasks.",
|
|
46
|
+
inputSchema: listSchema,
|
|
47
|
+
riskLevel: "low",
|
|
48
|
+
isReadOnly() { return true; },
|
|
49
|
+
isConcurrencySafe() { return true; },
|
|
50
|
+
async call() {
|
|
51
|
+
const crons = listCrons();
|
|
52
|
+
if (crons.length === 0)
|
|
53
|
+
return { output: "No scheduled tasks.", isError: false };
|
|
54
|
+
const lines = crons.map(c => `${c.id} ${c.name.padEnd(20)} ${c.schedule.padEnd(12)} ${c.enabled ? '✓' : '✗'} runs: ${c.runCount}`);
|
|
55
|
+
return { output: `Scheduled tasks:\n${lines.join('\n')}`, isError: false };
|
|
56
|
+
},
|
|
57
|
+
prompt() { return "CronList: Show all scheduled recurring tasks."; },
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/CronTool/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { Tool } from "../../Tool.js";
|
|
3
|
+
declare const inputSchema: z.ZodObject<{
|
|
4
|
+
branch: z.ZodOptional<z.ZodString>;
|
|
5
|
+
}, "strip", z.ZodTypeAny, {
|
|
6
|
+
branch?: string | undefined;
|
|
7
|
+
}, {
|
|
8
|
+
branch?: string | undefined;
|
|
9
|
+
}>;
|
|
10
|
+
export declare const EnterWorktreeTool: 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/EnterWorktreeTool/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;;;;;;EAEf,CAAC;AAEH,eAAO,MAAM,iBAAiB,EAAE,IAAI,CAAC,OAAO,WAAW,CAsBtD,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { createWorktree, isGitRepo } from "../../git/index.js";
|
|
3
|
+
const inputSchema = z.object({
|
|
4
|
+
branch: z.string().optional().describe("Branch name for the worktree (auto-generated if omitted)"),
|
|
5
|
+
});
|
|
6
|
+
export const EnterWorktreeTool = {
|
|
7
|
+
name: "EnterWorktree",
|
|
8
|
+
description: "Create an isolated git worktree for safe experimentation. Changes won't affect the main working directory.",
|
|
9
|
+
inputSchema,
|
|
10
|
+
riskLevel: "medium",
|
|
11
|
+
isReadOnly() { return false; },
|
|
12
|
+
isConcurrencySafe() { return false; },
|
|
13
|
+
async call(input, context) {
|
|
14
|
+
if (!isGitRepo(context.workingDir)) {
|
|
15
|
+
return { output: "Not a git repository — worktrees require git.", isError: true };
|
|
16
|
+
}
|
|
17
|
+
const path = createWorktree(context.workingDir);
|
|
18
|
+
if (!path) {
|
|
19
|
+
return { output: "Failed to create worktree.", isError: true };
|
|
20
|
+
}
|
|
21
|
+
return { output: `Worktree created at: ${path}\nUse ExitWorktree to clean up when done.`, isError: false };
|
|
22
|
+
},
|
|
23
|
+
prompt() {
|
|
24
|
+
return "EnterWorktree: Create an isolated git worktree for safe code changes.";
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/EnterWorktreeTool/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/D,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0DAA0D,CAAC;CACnG,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAA6B;IACzD,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,4GAA4G;IACzH,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,EAAE,OAAoB;QACpC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YACnC,OAAO,EAAE,MAAM,EAAE,+CAA+C,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACpF,CAAC;QACD,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,EAAE,MAAM,EAAE,4BAA4B,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACjE,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,wBAAwB,IAAI,2CAA2C,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC7G,CAAC;IAED,MAAM;QACJ,OAAO,uEAAuE,CAAC;IACjF,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
|
+
path: z.ZodString;
|
|
5
|
+
force: z.ZodOptional<z.ZodBoolean>;
|
|
6
|
+
}, "strip", z.ZodTypeAny, {
|
|
7
|
+
path: string;
|
|
8
|
+
force?: boolean | undefined;
|
|
9
|
+
}, {
|
|
10
|
+
path: string;
|
|
11
|
+
force?: boolean | undefined;
|
|
12
|
+
}>;
|
|
13
|
+
export declare const ExitWorktreeTool: 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/ExitWorktreeTool/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,gBAAgB,EAAE,IAAI,CAAC,OAAO,WAAW,CA0BrD,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { removeWorktree, hasWorktreeChanges } from "../../git/index.js";
|
|
3
|
+
const inputSchema = z.object({
|
|
4
|
+
path: z.string().describe("Path to the worktree to remove"),
|
|
5
|
+
force: z.boolean().optional().describe("Force removal even with uncommitted changes"),
|
|
6
|
+
});
|
|
7
|
+
export const ExitWorktreeTool = {
|
|
8
|
+
name: "ExitWorktree",
|
|
9
|
+
description: "Remove a git worktree. Warns if there are uncommitted changes unless force is true.",
|
|
10
|
+
inputSchema,
|
|
11
|
+
riskLevel: "medium",
|
|
12
|
+
isReadOnly() { return false; },
|
|
13
|
+
isConcurrencySafe() { return false; },
|
|
14
|
+
async call(input) {
|
|
15
|
+
if (!input.force && hasWorktreeChanges(input.path)) {
|
|
16
|
+
return {
|
|
17
|
+
output: `Worktree at ${input.path} has uncommitted changes. Use force: true to remove anyway.`,
|
|
18
|
+
isError: true,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
try {
|
|
22
|
+
removeWorktree(input.path);
|
|
23
|
+
return { output: `Worktree removed: ${input.path}`, isError: false };
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
return { output: `Failed to remove worktree: ${err instanceof Error ? err.message : String(err)}`, isError: true };
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
prompt() {
|
|
30
|
+
return "ExitWorktree: Remove a git worktree created by EnterWorktree.";
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/ExitWorktreeTool/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExE,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IAC3D,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;CACtF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAA6B;IACxD,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE,qFAAqF;IAClG,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,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACnD,OAAO;gBACL,MAAM,EAAE,eAAe,KAAK,CAAC,IAAI,6DAA6D;gBAC9F,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QACD,IAAI,CAAC;YACH,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3B,OAAO,EAAE,MAAM,EAAE,qBAAqB,KAAK,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QACvE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,EAAE,MAAM,EAAE,8BAA8B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACrH,CAAC;IACH,CAAC;IAED,MAAM;QACJ,OAAO,+DAA+D,CAAC;IACzE,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
|
+
pid: z.ZodOptional<z.ZodNumber>;
|
|
5
|
+
name: z.ZodOptional<z.ZodString>;
|
|
6
|
+
signal: z.ZodOptional<z.ZodString>;
|
|
7
|
+
}, "strip", z.ZodTypeAny, {
|
|
8
|
+
name?: string | undefined;
|
|
9
|
+
pid?: number | undefined;
|
|
10
|
+
signal?: string | undefined;
|
|
11
|
+
}, {
|
|
12
|
+
name?: string | undefined;
|
|
13
|
+
pid?: number | undefined;
|
|
14
|
+
signal?: string | undefined;
|
|
15
|
+
}>;
|
|
16
|
+
export declare const KillProcessTool: 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/KillProcessTool/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;;;;;;;;;;;;EAIf,CAAC;AAEH,eAAO,MAAM,eAAe,EAAE,IAAI,CAAC,OAAO,WAAW,CAuCpD,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
const inputSchema = z.object({
|
|
3
|
+
pid: z.number().optional().describe("Process ID to kill"),
|
|
4
|
+
name: z.string().optional().describe("Process name to kill (uses pkill/taskkill)"),
|
|
5
|
+
signal: z.string().optional().describe("Signal to send (default: SIGTERM)"),
|
|
6
|
+
});
|
|
7
|
+
export const KillProcessTool = {
|
|
8
|
+
name: "KillProcess",
|
|
9
|
+
description: "Kill a running process by PID or name. Use for stopping background tasks or stuck processes.",
|
|
10
|
+
inputSchema,
|
|
11
|
+
riskLevel: "high",
|
|
12
|
+
isReadOnly() { return false; },
|
|
13
|
+
isConcurrencySafe() { return true; },
|
|
14
|
+
async call(input) {
|
|
15
|
+
if (!input.pid && !input.name) {
|
|
16
|
+
return { output: "Provide either pid or name.", isError: true };
|
|
17
|
+
}
|
|
18
|
+
try {
|
|
19
|
+
if (input.pid) {
|
|
20
|
+
const signal = input.signal ?? 'SIGTERM';
|
|
21
|
+
process.kill(input.pid, signal);
|
|
22
|
+
return { output: `Sent ${signal} to PID ${input.pid}`, isError: false };
|
|
23
|
+
}
|
|
24
|
+
if (input.name) {
|
|
25
|
+
const { execSync } = await import('node:child_process');
|
|
26
|
+
const isWin = process.platform === 'win32';
|
|
27
|
+
const cmd = isWin
|
|
28
|
+
? `taskkill /IM "${input.name}" /F`
|
|
29
|
+
: `pkill ${input.signal ? `-${input.signal}` : ''} "${input.name}"`;
|
|
30
|
+
const result = execSync(cmd, { encoding: 'utf-8', timeout: 5000 });
|
|
31
|
+
return { output: result || `Killed process: ${input.name}`, isError: false };
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
return { output: `Failed: ${err instanceof Error ? err.message : String(err)}`, isError: true };
|
|
36
|
+
}
|
|
37
|
+
return { output: "No process specified.", isError: true };
|
|
38
|
+
},
|
|
39
|
+
prompt() {
|
|
40
|
+
return "KillProcess: Stop a running process by PID or name.";
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/KillProcessTool/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,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IACzD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;IAClF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;CAC5E,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,eAAe,GAA6B;IACvD,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,8FAA8F;IAC3G,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,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAC9B,OAAO,EAAE,MAAM,EAAE,6BAA6B,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAClE,CAAC;QAED,IAAI,CAAC;YACH,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;gBACd,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,SAAS,CAAC;gBACzC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,MAAwB,CAAC,CAAC;gBAClD,OAAO,EAAE,MAAM,EAAE,QAAQ,MAAM,WAAW,KAAK,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;YAC1E,CAAC;YAED,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBACf,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;gBACxD,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC;gBAC3C,MAAM,GAAG,GAAG,KAAK;oBACf,CAAC,CAAC,iBAAiB,KAAK,CAAC,IAAI,MAAM;oBACnC,CAAC,CAAC,SAAS,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,IAAI,GAAG,CAAC;gBACtE,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;gBACnE,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,mBAAmB,KAAK,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;YAC/E,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,EAAE,MAAM,EAAE,WAAW,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAClG,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,uBAAuB,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC5D,CAAC;IAED,MAAM;QACJ,OAAO,qDAAqD,CAAC;IAC/D,CAAC;CACF,CAAC"}
|
|
@@ -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" | "save" | "list";
|
|
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" | "save" | "list";
|
|
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"}
|
|
@@ -1 +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;
|
|
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;AAInE,QAAA,MAAM,WAAW;;;;;;;;;EAGf,CAAC;AAEH,eAAO,MAAM,cAAc,EAAE,IAAI,CAAC,OAAO,WAAW,CAsDnD,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { DeferredMcpTool } from "../../mcp/DeferredMcpTool.js";
|
|
3
|
+
import { DeferredTool } from "../../DeferredTool.js";
|
|
3
4
|
const inputSchema = z.object({
|
|
4
5
|
query: z.string().describe("Tool name or keyword to search for"),
|
|
5
6
|
maxResults: z.number().optional().default(5).describe("Maximum results to return"),
|
|
@@ -35,6 +36,12 @@ export const ToolSearchTool = {
|
|
|
35
36
|
results.push(`${tool.name}: ${tool.description} (schema unavailable)`);
|
|
36
37
|
}
|
|
37
38
|
}
|
|
39
|
+
else if (tool instanceof DeferredTool) {
|
|
40
|
+
// Activate deferred built-in tool and return full prompt
|
|
41
|
+
tool.activate();
|
|
42
|
+
const inner = tool.getInner();
|
|
43
|
+
results.push(`${inner.name}: ${inner.prompt()}`);
|
|
44
|
+
}
|
|
38
45
|
else {
|
|
39
46
|
results.push(`${tool.name}: ${tool.prompt().slice(0, 200)}`);
|
|
40
47
|
}
|
|
@@ -1 +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;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/ToolSearchTool/index.ts"],"names":[],"mappings":"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"}
|