@oharness/engine 0.9.2 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent/agent.d.ts +207 -1
- package/dist/agent/agent.js +691 -55
- package/dist/agent/agent.js.map +1 -1
- package/dist/agent/background.d.ts +135 -0
- package/dist/agent/background.js +307 -0
- package/dist/agent/background.js.map +1 -0
- package/dist/agent/compaction.d.ts +7 -0
- package/dist/agent/compaction.js +11 -3
- package/dist/agent/compaction.js.map +1 -1
- package/dist/agent/goal.d.ts +36 -0
- package/dist/agent/goal.js +71 -0
- package/dist/agent/goal.js.map +1 -0
- package/dist/agent/permissions.d.ts +6 -0
- package/dist/agent/permissions.js +2 -1
- package/dist/agent/permissions.js.map +1 -1
- package/dist/agent/session.d.ts +36 -0
- package/dist/agent/session.js +72 -0
- package/dist/agent/session.js.map +1 -1
- package/dist/agent/store.d.ts +25 -0
- package/dist/agent/store.js +21 -0
- package/dist/agent/store.js.map +1 -1
- package/dist/agent/subagent.d.ts +12 -0
- package/dist/agent/subagent.js +11 -1
- package/dist/agent/subagent.js.map +1 -1
- package/dist/agent/workspace.d.ts +9 -0
- package/dist/agent/workspace.js +59 -5
- package/dist/agent/workspace.js.map +1 -1
- package/dist/auth/manager.d.ts +9 -0
- package/dist/auth/manager.js +67 -6
- package/dist/auth/manager.js.map +1 -1
- package/dist/auth/providers/account.js +5 -4
- package/dist/auth/providers/account.js.map +1 -1
- package/dist/browser/tools.js +3 -0
- package/dist/browser/tools.js.map +1 -1
- package/dist/computer/arbiter.d.ts +69 -0
- package/dist/computer/arbiter.js +128 -0
- package/dist/computer/arbiter.js.map +1 -0
- package/dist/computer/cua-driver.d.ts +115 -0
- package/dist/computer/cua-driver.js +453 -0
- package/dist/computer/cua-driver.js.map +1 -0
- package/dist/computer/helper-client.d.ts +78 -0
- package/dist/computer/helper-client.js +163 -0
- package/dist/computer/helper-client.js.map +1 -0
- package/dist/computer/index.d.ts +15 -0
- package/dist/computer/index.js +9 -0
- package/dist/computer/index.js.map +1 -0
- package/dist/computer/mode.d.ts +19 -0
- package/dist/computer/mode.js +42 -0
- package/dist/computer/mode.js.map +1 -0
- package/dist/computer/plugin.d.ts +24 -0
- package/dist/computer/plugin.js +17 -0
- package/dist/computer/plugin.js.map +1 -0
- package/dist/computer/policy.d.ts +29 -0
- package/dist/computer/policy.js +127 -0
- package/dist/computer/policy.js.map +1 -0
- package/dist/computer/session.d.ts +199 -0
- package/dist/computer/session.js +392 -0
- package/dist/computer/session.js.map +1 -0
- package/dist/computer/target.d.ts +187 -0
- package/dist/computer/target.js +31 -0
- package/dist/computer/target.js.map +1 -0
- package/dist/computer/tools.d.ts +8 -0
- package/dist/computer/tools.js +537 -0
- package/dist/computer/tools.js.map +1 -0
- package/dist/core/tokens.js +4 -0
- package/dist/core/tokens.js.map +1 -1
- package/dist/core/types.d.ts +16 -1
- package/dist/core/types.js.map +1 -1
- package/dist/harness.d.ts +76 -1
- package/dist/harness.js +178 -22
- package/dist/harness.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp/transport.js +3 -0
- package/dist/mcp/transport.js.map +1 -1
- package/dist/providers/catalog.js +6 -0
- package/dist/providers/catalog.js.map +1 -1
- package/dist/providers/discovery.js +10 -2
- package/dist/providers/discovery.js.map +1 -1
- package/dist/providers/models-dev.js +1 -0
- package/dist/providers/models-dev.js.map +1 -1
- package/dist/providers/models-dev.json +114 -102
- package/dist/providers/piai.d.ts +16 -1
- package/dist/providers/piai.js +84 -7
- package/dist/providers/piai.js.map +1 -1
- package/dist/providers/types.d.ts +6 -0
- package/dist/providers/types.js.map +1 -1
- package/dist/runtime-plugins/cloud-connector.js +5 -0
- package/dist/runtime-plugins/cloud-connector.js.map +1 -1
- package/dist/schedule/scheduler.d.ts +38 -0
- package/dist/schedule/scheduler.js +101 -1
- package/dist/schedule/scheduler.js.map +1 -1
- package/dist/tools/builtin/bash.d.ts +6 -0
- package/dist/tools/builtin/bash.js +2 -1
- package/dist/tools/builtin/bash.js.map +1 -1
- package/dist/tools/builtin/recall.js +4 -0
- package/dist/tools/builtin/recall.js.map +1 -1
- package/dist/tools/builtin/routine.d.ts +9 -0
- package/dist/tools/builtin/routine.js +23 -2
- package/dist/tools/builtin/routine.js.map +1 -1
- package/dist/tools/builtin/task-control.d.ts +21 -0
- package/dist/tools/builtin/task-control.js +120 -0
- package/dist/tools/builtin/task-control.js.map +1 -0
- package/dist/tools/builtin/task.js +50 -9
- package/dist/tools/builtin/task.js.map +1 -1
- package/dist/tools/builtin/todo.d.ts +1 -1
- package/dist/tools/builtin/worktree.d.ts +10 -0
- package/dist/tools/builtin/worktree.js +52 -0
- package/dist/tools/builtin/worktree.js.map +1 -0
- package/dist/tools/define.d.ts +4 -1
- package/dist/tools/define.js +2 -0
- package/dist/tools/define.js.map +1 -1
- package/dist/tools/types.d.ts +112 -0
- package/dist/tools/types.js.map +1 -1
- package/dist/worktree/index.d.ts +109 -0
- package/dist/worktree/index.js +463 -0
- package/dist/worktree/index.js.map +1 -0
- package/package.json +3 -3
|
@@ -1,3 +1,9 @@
|
|
|
1
1
|
import type { ToolResult } from "../types.ts";
|
|
2
|
+
/**
|
|
3
|
+
* `cd` inside one command would otherwise be lost, because each call is its
|
|
4
|
+
* own process. We keep a per-session working directory instead of holding a
|
|
5
|
+
* long-lived shell open, which avoids a whole class of wedged-process bugs.
|
|
6
|
+
*/
|
|
7
|
+
export declare const BASH_CWD_KEY = "bash:cwd";
|
|
2
8
|
export declare const bashTool: import("../types.ts").Tool;
|
|
3
9
|
export declare function bashResultText(result: ToolResult): string;
|
|
@@ -12,7 +12,8 @@ const MAX_OUTPUT_CHARS = 30_000;
|
|
|
12
12
|
* own process. We keep a per-session working directory instead of holding a
|
|
13
13
|
* long-lived shell open, which avoids a whole class of wedged-process bugs.
|
|
14
14
|
*/
|
|
15
|
-
const
|
|
15
|
+
export const BASH_CWD_KEY = "bash:cwd";
|
|
16
|
+
const CWD_KEY = BASH_CWD_KEY;
|
|
16
17
|
export const bashTool = defineTool({
|
|
17
18
|
name: "bash",
|
|
18
19
|
description: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bash.js","sourceRoot":"","sources":["../../../src/tools/builtin/bash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC,MAAM,kBAAkB,GAAG,OAAO,CAAC;AACnC,MAAM,cAAc,GAAG,OAAO,CAAC;AAC/B,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEhC;;;;GAIG;AACH,MAAM,
|
|
1
|
+
{"version":3,"file":"bash.js","sourceRoot":"","sources":["../../../src/tools/builtin/bash.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recall.js","sourceRoot":"","sources":["../../../src/tools/builtin/recall.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"recall.js","sourceRoot":"","sources":["../../../src/tools/builtin/recall.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,8 +17,17 @@ export interface RoutineHost {
|
|
|
17
17
|
cron: string;
|
|
18
18
|
prompt: string;
|
|
19
19
|
cwd: string;
|
|
20
|
+
model?: string;
|
|
21
|
+
apps?: string[];
|
|
20
22
|
}): Promise<unknown>;
|
|
21
23
|
remove(name: string): Promise<void>;
|
|
24
|
+
/** The model the calling conversation is on, which its routines inherit. */
|
|
25
|
+
sessionModel?(sessionId: string): string | undefined;
|
|
26
|
+
/** Whether a Cloud app is connected, asked without opening a card. */
|
|
27
|
+
appStatus?(app: string, signal: AbortSignal): Promise<{
|
|
28
|
+
connected: boolean;
|
|
29
|
+
label: string;
|
|
30
|
+
}>;
|
|
22
31
|
}
|
|
23
32
|
/**
|
|
24
33
|
* Create, list and delete routines — prompts that run on a schedule.
|
|
@@ -19,6 +19,8 @@ export function createRoutineTool(host) {
|
|
|
19
19
|
"`add` takes a short kebab-case name, a five-field cron in the user's local time (minute hour day-of-month month day-of-week; `0 9 * * 1-5` is weekdays at 9:00), and the prompt each run sends.",
|
|
20
20
|
"Translate the user's words into the cron yourself; ask only if the time is genuinely unclear.",
|
|
21
21
|
"Write the prompt to stand on its own: the run has no memory of this conversation and nobody is there to answer questions or approve anything.",
|
|
22
|
+
"If the prompt uses a Cloud app (Gmail, GitHub, Slack…), list its slug in `apps`. Adding checks each one is connected; when one is not, call cloud_app_tools with that app so the user can connect it here, then add the routine again. A run cannot show a connection card, so never tell the user one will appear later.",
|
|
23
|
+
"Each run uses the model this conversation is on.",
|
|
22
24
|
"After adding, tell the user in plain words when it will run.",
|
|
23
25
|
"It runs in this session's project unless `cwd` names another one.",
|
|
24
26
|
"`list` shows existing routines; `remove` deletes one by name.",
|
|
@@ -28,6 +30,10 @@ export function createRoutineTool(host) {
|
|
|
28
30
|
name: z.string().optional().describe("Routine name. Required for add and remove."),
|
|
29
31
|
cron: z.string().optional().describe("Five-field cron, local time. Required for add."),
|
|
30
32
|
prompt: z.string().optional().describe("What each run asks. Required for add."),
|
|
33
|
+
apps: z
|
|
34
|
+
.array(z.string())
|
|
35
|
+
.optional()
|
|
36
|
+
.describe("Cloud app slugs the prompt needs, such as [\"gmail\"]. Checked now and before every run."),
|
|
31
37
|
cwd: z
|
|
32
38
|
.string()
|
|
33
39
|
.optional()
|
|
@@ -54,10 +60,25 @@ export function createRoutineTool(host) {
|
|
|
54
60
|
}
|
|
55
61
|
if (!input.cron || !input.prompt)
|
|
56
62
|
return toolError("add needs a name, a cron and a prompt");
|
|
57
|
-
|
|
63
|
+
const apps = input.apps ?? [];
|
|
64
|
+
if (apps.length && host.appStatus) {
|
|
65
|
+
for (const app of apps) {
|
|
66
|
+
const status = await host.appStatus(app, ctx.signal);
|
|
67
|
+
if (!status.connected) {
|
|
68
|
+
return toolError(`${status.label} is not connected, so the routine was not added. ` +
|
|
69
|
+
`Call cloud_app_tools with {"app": "${app}"} now — the user connects it on the card in this conversation — then add the routine again.`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
const model = host.sessionModel?.(ctx.sessionId);
|
|
74
|
+
await host.add({
|
|
75
|
+
name: input.name, cron: input.cron, prompt: input.prompt, cwd: input.cwd ?? ctx.cwd,
|
|
76
|
+
...(model ? { model } : {}),
|
|
77
|
+
...(apps.length ? { apps } : {}),
|
|
78
|
+
});
|
|
58
79
|
const added = (await host.list()).find((one) => one.name === input.name);
|
|
59
80
|
const next = added?.nextRunAt ? ` Next run: ${new Date(added.nextRunAt).toString()}.` : "";
|
|
60
|
-
return toolText(`Added routine "${input.name}" (${input.cron}).${next} ` +
|
|
81
|
+
return toolText(`Added routine "${input.name}" (${input.cron})${model ? `, running on ${model}` : ""}.${next} ` +
|
|
61
82
|
"It fires while the OHarness desktop app or the TUI is open, or while `oharness schedule daemon` runs; " +
|
|
62
83
|
"a time missed while none was running is caught up once when one next starts. Say this if the user may not know it.", { routine: input.name });
|
|
63
84
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routine.js","sourceRoot":"","sources":["../../../src/tools/builtin/routine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"routine.js","sourceRoot":"","sources":["../../../src/tools/builtin/routine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Tool } from "../types.ts";
|
|
2
|
+
export declare const TASK_OUTPUT_TOOL = "task_output";
|
|
3
|
+
export declare const TASK_STOP_TOOL = "task_stop";
|
|
4
|
+
export declare const TASK_MESSAGE_TOOL = "task_message";
|
|
5
|
+
/**
|
|
6
|
+
* A look at background tasks, without waiting on any.
|
|
7
|
+
*
|
|
8
|
+
* There is deliberately no tool that waits: a finished task's result is read
|
|
9
|
+
* into the conversation on its own. This one is for when the person asks how
|
|
10
|
+
* things are going, or for the full text of a result a notification cut short.
|
|
11
|
+
*/
|
|
12
|
+
export declare const taskOutputTool: Tool;
|
|
13
|
+
export declare const taskStopTool: Tool;
|
|
14
|
+
/**
|
|
15
|
+
* Say more to a background task.
|
|
16
|
+
*
|
|
17
|
+
* The subagent keeps its conversation after it ends, so a follow-up costs no
|
|
18
|
+
* re-explaining: "now add tests for that" lands on an agent that still knows
|
|
19
|
+
* what "that" is, in the worktree it already changed.
|
|
20
|
+
*/
|
|
21
|
+
export declare const taskMessageTool: Tool;
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { defineTool } from "../define.js";
|
|
3
|
+
import { toolError, toolText } from "../types.js";
|
|
4
|
+
export const TASK_OUTPUT_TOOL = "task_output";
|
|
5
|
+
export const TASK_STOP_TOOL = "task_stop";
|
|
6
|
+
export const TASK_MESSAGE_TOOL = "task_message";
|
|
7
|
+
/**
|
|
8
|
+
* A look at background tasks, without waiting on any.
|
|
9
|
+
*
|
|
10
|
+
* There is deliberately no tool that waits: a finished task's result is read
|
|
11
|
+
* into the conversation on its own. This one is for when the person asks how
|
|
12
|
+
* things are going, or for the full text of a result a notification cut short.
|
|
13
|
+
*/
|
|
14
|
+
export const taskOutputTool = defineTool({
|
|
15
|
+
name: TASK_OUTPUT_TOOL,
|
|
16
|
+
description: [
|
|
17
|
+
"Show background tasks started with task(background: true): status, turns, what each is doing now, and the final result of those that have ended.",
|
|
18
|
+
"Pass taskId for one task and its full result; leave it out for a one-line summary of every task.",
|
|
19
|
+
"Do not call this repeatedly to wait for a task: its result is read into the conversation by itself when it ends. If there is nothing else to do, end your turn.",
|
|
20
|
+
].join("\n"),
|
|
21
|
+
parameters: z.object({
|
|
22
|
+
taskId: z.string().optional().describe("The task to show; every task when left out"),
|
|
23
|
+
}),
|
|
24
|
+
readOnly: true,
|
|
25
|
+
renderTitle: (input) => `TaskOutput(${input.taskId ?? "all"})`,
|
|
26
|
+
async execute(input, ctx) {
|
|
27
|
+
const tasks = ctx.host.backgroundTasks;
|
|
28
|
+
if (!tasks)
|
|
29
|
+
return toolError("background tasks are not available here");
|
|
30
|
+
if (!input.taskId) {
|
|
31
|
+
const all = tasks.list();
|
|
32
|
+
if (!all.length)
|
|
33
|
+
return toolText("No background tasks in this conversation.");
|
|
34
|
+
return toolText(all.map(summaryLine).join("\n"));
|
|
35
|
+
}
|
|
36
|
+
const task = tasks.get(input.taskId);
|
|
37
|
+
if (!task)
|
|
38
|
+
return toolError(`no background task "${input.taskId}"`);
|
|
39
|
+
const lines = [summaryLine(task)];
|
|
40
|
+
if (task.worktree)
|
|
41
|
+
lines.push(`Worktree: ${task.worktree}`);
|
|
42
|
+
if (task.error)
|
|
43
|
+
lines.push(`Error: ${task.error}`);
|
|
44
|
+
if (task.result)
|
|
45
|
+
lines.push("", task.result);
|
|
46
|
+
return toolText(lines.join("\n"), { task });
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
export const taskStopTool = defineTool({
|
|
50
|
+
name: TASK_STOP_TOOL,
|
|
51
|
+
description: "Stop a background task started with task(background: true), for good: it cannot be continued afterwards, and its result is not announced. A worktree it changed is kept; an untouched one is removed.",
|
|
52
|
+
parameters: z.object({
|
|
53
|
+
taskId: z.string().describe("The task to stop"),
|
|
54
|
+
}),
|
|
55
|
+
// Ends work this conversation started and nothing else: approving it
|
|
56
|
+
// protects nobody.
|
|
57
|
+
sessionLocal: true,
|
|
58
|
+
renderTitle: (input) => `TaskStop(${input.taskId})`,
|
|
59
|
+
async execute(input, ctx) {
|
|
60
|
+
const tasks = ctx.host.backgroundTasks;
|
|
61
|
+
if (!tasks)
|
|
62
|
+
return toolError("background tasks are not available here");
|
|
63
|
+
const task = tasks.get(input.taskId);
|
|
64
|
+
if (!task)
|
|
65
|
+
return toolError(`no background task "${input.taskId}"`);
|
|
66
|
+
if (!tasks.stop(input.taskId))
|
|
67
|
+
return toolText(`Task ${input.taskId} had already ended (${task.status}).`);
|
|
68
|
+
return toolText(`Stopped task ${input.taskId} (${task.description}).`);
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
/**
|
|
72
|
+
* Say more to a background task.
|
|
73
|
+
*
|
|
74
|
+
* The subagent keeps its conversation after it ends, so a follow-up costs no
|
|
75
|
+
* re-explaining: "now add tests for that" lands on an agent that still knows
|
|
76
|
+
* what "that" is, in the worktree it already changed.
|
|
77
|
+
*/
|
|
78
|
+
export const taskMessageTool = defineTool({
|
|
79
|
+
name: TASK_MESSAGE_TOOL,
|
|
80
|
+
description: [
|
|
81
|
+
"Send a message to a background task started with task(background: true).",
|
|
82
|
+
"If it is still running, it reads the message at its next step — use this to correct or redirect it.",
|
|
83
|
+
"If it has finished, it runs again from where it stopped, with everything it already knows and in the same worktree, and its new result is read into this conversation when it ends, like the first.",
|
|
84
|
+
"A stopped task cannot be continued.",
|
|
85
|
+
].join("\n"),
|
|
86
|
+
parameters: z.object({
|
|
87
|
+
taskId: z.string().describe("The task to message"),
|
|
88
|
+
message: z.string().min(1).describe("What to tell it; it sees only this, so be specific"),
|
|
89
|
+
}),
|
|
90
|
+
// Steers work this conversation started; any effect it then has goes
|
|
91
|
+
// through the subagent's own permission checks.
|
|
92
|
+
sessionLocal: true,
|
|
93
|
+
renderTitle: (input) => `TaskMessage(${input.taskId})`,
|
|
94
|
+
async execute(input, ctx) {
|
|
95
|
+
const tasks = ctx.host.backgroundTasks;
|
|
96
|
+
if (!tasks)
|
|
97
|
+
return toolError("background tasks are not available here");
|
|
98
|
+
switch (tasks.send(input.taskId, input.message)) {
|
|
99
|
+
case "interjected":
|
|
100
|
+
return toolText(`Told task ${input.taskId}; it reads the message at its next step.`);
|
|
101
|
+
case "resumed":
|
|
102
|
+
return toolText(`Task ${input.taskId} is running again with your message. Its result will be read into this conversation when it ends.`);
|
|
103
|
+
case "busy":
|
|
104
|
+
return toolError(`task ${input.taskId} is between steps or still queued; try again in a moment`);
|
|
105
|
+
case "stopped":
|
|
106
|
+
return toolError(`task ${input.taskId} was stopped and cannot be continued; start a new task instead`);
|
|
107
|
+
default:
|
|
108
|
+
return toolError(`no background task "${input.taskId}"`);
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
});
|
|
112
|
+
function summaryLine(task) {
|
|
113
|
+
const parts = [`${task.id} [${task.status}] ${task.agentType}: ${task.description}`, `${task.turns} turns`];
|
|
114
|
+
if (task.startedAt)
|
|
115
|
+
parts.push(`${Math.round(((task.endedAt ?? Date.now()) - task.startedAt) / 1000)}s`);
|
|
116
|
+
if (task.activity)
|
|
117
|
+
parts.push(`now: ${task.activity}`);
|
|
118
|
+
return parts.join(" · ");
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=task-control.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-control.js","sourceRoot":"","sources":["../../../src/tools/builtin/task-control.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,7 @@ export function createTaskTool(host) {
|
|
|
13
13
|
const roster = types.length === 0
|
|
14
14
|
? "(no subagent types are configured)"
|
|
15
15
|
: types.map((t) => `- ${t.name}: ${t.description}`).join("\n");
|
|
16
|
+
const parallel = new Set(types.filter((t) => t.readOnly || t.isolation === "worktree").map((t) => t.name));
|
|
16
17
|
return defineTool({
|
|
17
18
|
name: "task",
|
|
18
19
|
description: [
|
|
@@ -20,6 +21,9 @@ export function createTaskTool(host) {
|
|
|
20
21
|
"The subagent cannot ask follow-up questions, so put everything it needs in the prompt — file paths, constraints, and what to return.",
|
|
21
22
|
"You receive only its final message, so state explicitly what it should report back.",
|
|
22
23
|
"Use this for wide searches or independent tracks of work; do routine multi-step work yourself rather than paying the delegation overhead.",
|
|
24
|
+
"Several read-only subagents, or several in worktrees, called in one message run at the same time and all return before you continue: use that when you need every result to decide the next step.",
|
|
25
|
+
"Set isolation to \"worktree\" when the subagent will edit files alongside other work: it then runs in a fresh worktree beside the project (a git branch from this checkout's HEAD, or a copy of a plain folder), which is removed if it changed nothing and kept otherwise — its path is in the result.",
|
|
26
|
+
"Set background to true for work that can finish later: you get a task id at once and carry on, or end your turn. When it ends, its result is read into this conversation automatically, as a message of its own. Never poll or sleep to wait for one; if there is nothing else to do, end your turn. A background subagent that edits files should run in a worktree.",
|
|
23
27
|
"",
|
|
24
28
|
"Available agent types:",
|
|
25
29
|
roster,
|
|
@@ -34,27 +38,64 @@ export function createTaskTool(host) {
|
|
|
34
38
|
.string()
|
|
35
39
|
.optional()
|
|
36
40
|
.describe("Override the model for this subagent, e.g. 'haiku' for cheap fan-out"),
|
|
41
|
+
isolation: z
|
|
42
|
+
.enum(["worktree"])
|
|
43
|
+
.optional()
|
|
44
|
+
.describe("\"worktree\" to run the subagent in its own worktree beside the project"),
|
|
45
|
+
background: z
|
|
46
|
+
.boolean()
|
|
47
|
+
.optional()
|
|
48
|
+
.describe("true to run it in the background and get its result later, as a message"),
|
|
49
|
+
computer: z
|
|
50
|
+
.boolean()
|
|
51
|
+
.optional()
|
|
52
|
+
.describe("true to let the subagent use the computer_* tools; only works while Computer Use is on in this conversation"),
|
|
37
53
|
}),
|
|
38
|
-
|
|
54
|
+
// Safe beside other calls when nothing it does can collide with them:
|
|
55
|
+
// it changes nothing, it changes only its own worktree, or it only
|
|
56
|
+
// registers a task and returns.
|
|
57
|
+
concurrencySafeFor(raw, host) {
|
|
58
|
+
const input = (raw ?? {});
|
|
59
|
+
// Only a background task that really goes to the background: where none
|
|
60
|
+
// can be offered it runs here, in this checkout, like any other.
|
|
61
|
+
if (input.background === true && host.backgroundTasks)
|
|
62
|
+
return true;
|
|
63
|
+
if (input.isolation === "worktree")
|
|
64
|
+
return true;
|
|
65
|
+
return typeof input.agentType === "string" && parallel.has(input.agentType);
|
|
66
|
+
},
|
|
67
|
+
renderTitle: (input) => `Task(${input.agentType}: ${input.description}${input.background ? ", background" : ""})`,
|
|
39
68
|
async execute(input, ctx) {
|
|
40
69
|
const known = ctx.host.listSubagentTypes().map((t) => t.name);
|
|
41
70
|
if (!known.includes(input.agentType)) {
|
|
42
71
|
return toolError(`unknown agent type "${input.agentType}". Available: ${known.join(", ") || "none"}`);
|
|
43
72
|
}
|
|
73
|
+
const options = {
|
|
74
|
+
agentType: input.agentType,
|
|
75
|
+
prompt: input.prompt,
|
|
76
|
+
description: input.description,
|
|
77
|
+
model: input.model,
|
|
78
|
+
...(input.isolation ? { isolation: input.isolation } : {}),
|
|
79
|
+
...(input.computer ? { computer: true } : {}),
|
|
80
|
+
};
|
|
81
|
+
const background = input.background ? ctx.host.backgroundTasks : undefined;
|
|
82
|
+
if (background) {
|
|
83
|
+
const task = background.start(options);
|
|
84
|
+
return toolText(`Started background task ${task.id} (${input.agentType}: ${input.description}). Its result will be read into this conversation when it ends; carry on with other work, or end your turn if there is none.`, { taskId: task.id, background: true });
|
|
85
|
+
}
|
|
44
86
|
ctx.onProgress({
|
|
45
87
|
toolCallId: ctx.toolCallId,
|
|
46
88
|
toolName: "task",
|
|
47
89
|
message: `Running ${input.agentType} subagent: ${input.description}`,
|
|
48
90
|
});
|
|
49
91
|
try {
|
|
50
|
-
const result = await ctx.host.runSubagent({
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
}
|
|
57
|
-
return toolText(result.text || "(the subagent returned no text)", {
|
|
92
|
+
const result = await ctx.host.runSubagent({ ...options, signal: ctx.signal });
|
|
93
|
+
// Asked for the background where nothing could deliver a late result:
|
|
94
|
+
// the work is done all the same, and the model should know why it waited.
|
|
95
|
+
const note = input.background
|
|
96
|
+
? "\n\n[Background tasks are not available here, so this ran in the foreground.]"
|
|
97
|
+
: "";
|
|
98
|
+
return toolText(`${result.text || "(the subagent returned no text)"}${note}`, {
|
|
58
99
|
turns: result.turns,
|
|
59
100
|
usage: result.usage,
|
|
60
101
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task.js","sourceRoot":"","sources":["../../../src/tools/builtin/task.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGlD;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,IAAyC;IACtE,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;IACvC,MAAM,MAAM,GACV,KAAK,CAAC,MAAM,KAAK,CAAC;QAChB,CAAC,CAAC,oCAAoC;QACtC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"task.js","sourceRoot":"","sources":["../../../src/tools/builtin/task.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,8 +3,8 @@ declare const TodoItemSchema: z.ZodObject<{
|
|
|
3
3
|
content: z.ZodString;
|
|
4
4
|
status: z.ZodEnum<{
|
|
5
5
|
pending: "pending";
|
|
6
|
-
in_progress: "in_progress";
|
|
7
6
|
completed: "completed";
|
|
7
|
+
in_progress: "in_progress";
|
|
8
8
|
}>;
|
|
9
9
|
activeForm: z.ZodOptional<z.ZodString>;
|
|
10
10
|
}, z.core.$strip>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare const WORKTREE_START_TOOL = "worktree_start";
|
|
2
|
+
/**
|
|
3
|
+
* Hand a task to a new session in its own worktree.
|
|
4
|
+
*
|
|
5
|
+
* The session asking keeps its directory: a harness belongs to one tree, and a
|
|
6
|
+
* conversation whose files changed under it halfway through would be harder to
|
|
7
|
+
* follow than two conversations. What comes back is where the new one runs,
|
|
8
|
+
* so the person can be told where to look.
|
|
9
|
+
*/
|
|
10
|
+
export declare const worktreeStartTool: import("../types.ts").Tool;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { defineTool } from "../define.js";
|
|
3
|
+
import { toolError, toolText } from "../types.js";
|
|
4
|
+
export const WORKTREE_START_TOOL = "worktree_start";
|
|
5
|
+
/**
|
|
6
|
+
* Hand a task to a new session in its own worktree.
|
|
7
|
+
*
|
|
8
|
+
* The session asking keeps its directory: a harness belongs to one tree, and a
|
|
9
|
+
* conversation whose files changed under it halfway through would be harder to
|
|
10
|
+
* follow than two conversations. What comes back is where the new one runs,
|
|
11
|
+
* so the person can be told where to look.
|
|
12
|
+
*/
|
|
13
|
+
export const worktreeStartTool = defineTool({
|
|
14
|
+
name: WORKTREE_START_TOOL,
|
|
15
|
+
description: [
|
|
16
|
+
"Start a separate task in a new worktree beside this project and hand it to a new session, which begins at once and runs on its own.",
|
|
17
|
+
"The worktree is named <project>-<slug> next to the project: a git worktree on branch <type>/<slug> from the remote's default branch, or a copy of a plain folder.",
|
|
18
|
+
"Use it when the person asks for work to happen in parallel or in a worktree, or for a task unrelated to what this session is doing. Do not use it for steps of the current task.",
|
|
19
|
+
"The new session cannot see this conversation, so the prompt must carry everything it needs: the goal, file paths, constraints, and what done looks like.",
|
|
20
|
+
].join("\n"),
|
|
21
|
+
parameters: z.object({
|
|
22
|
+
task: z.string().min(1).describe("Short title of the task (a few words); it names the session"),
|
|
23
|
+
slug: z
|
|
24
|
+
.string()
|
|
25
|
+
.optional()
|
|
26
|
+
.describe("Lowercase ASCII words for the directory and branch, e.g. 'fix-tmp-writes'. Required when the task is not in English"),
|
|
27
|
+
type: z
|
|
28
|
+
.enum(["feat", "fix", "chore", "docs"])
|
|
29
|
+
.optional()
|
|
30
|
+
.describe("Branch prefix; inferred from the task when left out"),
|
|
31
|
+
prompt: z.string().min(1).describe("The complete first message for the new session"),
|
|
32
|
+
}),
|
|
33
|
+
renderTitle: (input) => `WorktreeStart(${input.slug || input.task})`,
|
|
34
|
+
async execute(input, ctx) {
|
|
35
|
+
if (!ctx.host.startWorktree)
|
|
36
|
+
return toolError("this frontend cannot start a session in a worktree");
|
|
37
|
+
try {
|
|
38
|
+
const started = await ctx.host.startWorktree({
|
|
39
|
+
task: input.task,
|
|
40
|
+
prompt: input.prompt,
|
|
41
|
+
...(input.slug ? { slug: input.slug } : {}),
|
|
42
|
+
...(input.type ? { type: input.type } : {}),
|
|
43
|
+
});
|
|
44
|
+
const where = started.branch ? `${started.path} on branch ${started.branch}` : `${started.path} (a copy of the folder)`;
|
|
45
|
+
return toolText(`Started session ${started.sessionId} in ${where}. It is working on its own; the person can open it from the sidebar.`, { ...started });
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
return toolError(`could not start the worktree: ${err instanceof Error ? err.message : String(err)}`);
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
});
|
|
52
|
+
//# sourceMappingURL=worktree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worktree.js","sourceRoot":"","sources":["../../../src/tools/builtin/worktree.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,CAAC,MAAM,mBAAmB,GAAG,gBAAgB,CAAC;AAEpD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,UAAU,CAAC;IAC1C,IAAI,EAAE,mBAAmB;IACzB,WAAW,EAAE;QACX,qIAAqI;QACrI,mKAAmK;QACnK,kLAAkL;QAClL,0JAA0J;KAC3J,CAAC,IAAI,CAAC,IAAI,CAAC;IACZ,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,6DAA6D,CAAC;QAC/F,IAAI,EAAE,CAAC;aACJ,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,qHAAqH,CAAC;QAClI,IAAI,EAAE,CAAC;aACJ,IAAI,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;aACtC,QAAQ,EAAE;aACV,QAAQ,CAAC,qDAAqD,CAAC;QAClE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,gDAAgD,CAAC;KACrF,CAAC;IACF,WAAW,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAiB,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,GAAG;IACpE,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG;QACtB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa;YAAE,OAAO,SAAS,CAAC,oDAAoD,CAAC,CAAC;QACpG,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC;gBAC3C,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3C,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC5C,CAAC,CAAC;YACH,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,cAAc,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,yBAAyB,CAAC;YACxH,OAAO,QAAQ,CACb,mBAAmB,OAAO,CAAC,SAAS,OAAO,KAAK,sEAAsE,EACtH,EAAE,GAAG,OAAO,EAAE,CACf,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,SAAS,CAAC,iCAAiC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACxG,CAAC;IACH,CAAC;CACF,CAAC,CAAC"}
|
package/dist/tools/define.d.ts
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import type { Tool, ToolContext, ToolResult } from "./types.ts";
|
|
2
|
+
import type { Tool, ToolContext, ToolHost, ToolResult } from "./types.ts";
|
|
3
3
|
export interface DefineToolOptions<S extends z.ZodType> {
|
|
4
4
|
name: string;
|
|
5
5
|
description: string;
|
|
6
6
|
parameters: S;
|
|
7
7
|
readOnly?: boolean;
|
|
8
|
+
observes?: boolean;
|
|
8
9
|
concurrencySafe?: boolean;
|
|
10
|
+
/** Raw, unvalidated input: see Tool.concurrencySafeFor. */
|
|
11
|
+
concurrencySafeFor?(input: unknown, host: ToolHost): boolean;
|
|
9
12
|
sessionLocal?: boolean;
|
|
10
13
|
hidden?: boolean;
|
|
11
14
|
renderTitle?(input: z.infer<S>): string;
|
package/dist/tools/define.js
CHANGED
|
@@ -12,7 +12,9 @@ export function defineTool(opts) {
|
|
|
12
12
|
description: opts.description,
|
|
13
13
|
inputSchema,
|
|
14
14
|
readOnly: opts.readOnly,
|
|
15
|
+
...(opts.observes ? { observes: true } : {}),
|
|
15
16
|
concurrencySafe: opts.concurrencySafe ?? opts.readOnly,
|
|
17
|
+
...(opts.concurrencySafeFor ? { concurrencySafeFor: opts.concurrencySafeFor } : {}),
|
|
16
18
|
sessionLocal: opts.sessionLocal,
|
|
17
19
|
hidden: opts.hidden,
|
|
18
20
|
source: "builtin",
|
package/dist/tools/define.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"define.js","sourceRoot":"","sources":["../../src/tools/define.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"define.js","sourceRoot":"","sources":["../../src/tools/define.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAmBpD;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAsB,IAA0B;IACxE,MAAM,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAErD,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,WAAW;QACX,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5C,eAAe,EAAE,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,QAAQ;QACtD,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnF,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,MAAM,EAAE,SAAS;QACjB,QAAQ,CAAC,GAAG;YACV,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;YACpD,IAAI,MAAM,CAAC,OAAO;gBAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;YAC5D,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5D,CAAC;QACD,WAAW,EAAE,IAAI,CAAC,WAAW;YAC3B,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,WAAY,CAAC,KAAmB,CAAC;YACnD,CAAC,CAAC,SAAS;QACb,UAAU,EAAE,IAAI,CAAC,UAAU;YACzB,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,UAAW,CAAC,KAAmB,CAAC;YAClD,CAAC,CAAC,SAAS;QACb,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAmB,EAAE,GAAG,CAAC;KAChE,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,KAAiB;IACvC,OAAO,KAAK,CAAC,MAAM;SAChB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACb,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QACjE,OAAO,GAAG,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;IACrC,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC"}
|