@markusylisiurunen/tau 0.3.39 → 0.3.41
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 +34 -38
- package/dist/core/agent/agent_runtime.js +0 -22
- package/dist/core/agent/agent_runtime.js.map +1 -1
- package/dist/core/cli.js +2 -2
- package/dist/core/cli.js.map +1 -1
- package/dist/core/commands/registry.js +22 -20
- package/dist/core/commands/registry.js.map +1 -1
- package/dist/core/config/builtin_themes.js +936 -998
- package/dist/core/config/builtin_themes.js.map +1 -1
- package/dist/core/history/migrations.js +57 -0
- package/dist/core/history/migrations.js.map +1 -0
- package/dist/core/history/setup.js +18 -0
- package/dist/core/history/setup.js.map +1 -1
- package/dist/core/personas.js +8 -53
- package/dist/core/personas.js.map +1 -1
- package/dist/core/runtime/chat_runtime.js +0 -6
- package/dist/core/runtime/chat_runtime.js.map +1 -1
- package/dist/core/session/direct_bash.js +8 -8
- package/dist/core/session/direct_bash.js.map +1 -1
- package/dist/core/session/runner.js +6 -1
- package/dist/core/session/runner.js.map +1 -1
- package/dist/core/static/code_mode/history/documentation.md +3 -3
- package/dist/core/static/code_mode/nook/documentation.md +6 -4
- package/dist/core/static/code_mode/web/documentation.md +3 -3
- package/dist/core/tools/bash.js +80 -63
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/code_mode.js +45 -12
- package/dist/core/tools/code_mode.js.map +1 -1
- package/dist/core/tools/edit.js +72 -84
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/goal.js +97 -16
- package/dist/core/tools/goal.js.map +1 -1
- package/dist/core/tools/history.js +13 -15
- package/dist/core/tools/history.js.map +1 -1
- package/dist/core/tools/interrupt_agent.js +56 -37
- package/dist/core/tools/interrupt_agent.js.map +1 -1
- package/dist/core/tools/list_agents.js +28 -13
- package/dist/core/tools/list_agents.js.map +1 -1
- package/dist/core/tools/nook.js +15 -15
- package/dist/core/tools/nook.js.map +1 -1
- package/dist/core/tools/presentation.js +226 -0
- package/dist/core/tools/presentation.js.map +1 -0
- package/dist/core/tools/registry.js.map +1 -1
- package/dist/core/tools/send_input_to_agent.js +57 -47
- package/dist/core/tools/send_input_to_agent.js.map +1 -1
- package/dist/core/tools/spawn_agent.js +81 -52
- package/dist/core/tools/spawn_agent.js.map +1 -1
- package/dist/core/tools/subagent_ui.js +14 -38
- package/dist/core/tools/subagent_ui.js.map +1 -1
- package/dist/core/tools/view_image.js +45 -45
- package/dist/core/tools/view_image.js.map +1 -1
- package/dist/core/tools/wait_for_agents.js +94 -56
- package/dist/core/tools/wait_for_agents.js.map +1 -1
- package/dist/core/tools/web.js +11 -13
- package/dist/core/tools/web.js.map +1 -1
- package/dist/core/tools/write.js +41 -39
- package/dist/core/tools/write.js.map +1 -1
- package/dist/core/utils/gemini_speech.js +1 -1
- package/dist/core/utils/gemini_speech.js.map +1 -1
- package/dist/core/utils/subagent_utils.js +3 -3
- package/dist/core/utils/subagent_utils.js.map +1 -1
- package/dist/core/version.js +1 -1
- package/dist/execution/cloudflare_sandbox_execution_environment.js +1 -1
- package/dist/execution/cloudflare_sandbox_execution_environment.js.map +1 -1
- package/dist/history/worker/index.js +149 -192
- package/dist/history/worker/index.js.map +1 -1
- package/dist/host/client_tool_broker.js +29 -31
- package/dist/host/client_tool_broker.js.map +1 -1
- package/dist/host/local_session_host.js +11 -5
- package/dist/host/local_session_host.js.map +1 -1
- package/dist/main.js +6 -6
- package/dist/main.js.map +1 -1
- package/dist/tui/chat_controller/diff_review_service.js +1 -1
- package/dist/tui/chat_controller/diff_review_service.js.map +1 -1
- package/dist/tui/chat_controller/history_labels.js +13 -0
- package/dist/tui/chat_controller/history_labels.js.map +1 -1
- package/dist/tui/chat_view.js +24 -50
- package/dist/tui/chat_view.js.map +1 -1
- package/dist/tui/session_chat_app.js +3 -4
- package/dist/tui/session_chat_app.js.map +1 -1
- package/dist/tui/session_chat_controller.js +80 -111
- package/dist/tui/session_chat_controller.js.map +1 -1
- package/dist/tui/terminal_appearance.js +44 -25
- package/dist/tui/terminal_appearance.js.map +1 -1
- package/dist/tui/ui/autocomplete_item.js +2 -0
- package/dist/tui/ui/autocomplete_item.js.map +1 -0
- package/dist/tui/ui/chat_container.js +1 -14
- package/dist/tui/ui/chat_container.js.map +1 -1
- package/dist/tui/ui/chat_message_model.js +4 -12
- package/dist/tui/ui/chat_message_model.js.map +1 -1
- package/dist/tui/ui/components/autocomplete_list.js +138 -0
- package/dist/tui/ui/components/autocomplete_list.js.map +1 -0
- package/dist/tui/ui/components/editor.js +33 -40
- package/dist/tui/ui/components/editor.js.map +1 -1
- package/dist/tui/ui/components/one_line_segments.js +0 -67
- package/dist/tui/ui/components/one_line_segments.js.map +1 -1
- package/dist/tui/ui/custom_editor.js +15 -11
- package/dist/tui/ui/custom_editor.js.map +1 -1
- package/dist/tui/ui/diff_review_message.js +1 -11
- package/dist/tui/ui/diff_review_message.js.map +1 -1
- package/dist/tui/ui/footer.js +63 -13
- package/dist/tui/ui/footer.js.map +1 -1
- package/dist/tui/ui/rewind_picker.js +17 -47
- package/dist/tui/ui/rewind_picker.js.map +1 -1
- package/dist/tui/ui/slash_autocomplete.js +43 -64
- package/dist/tui/ui/slash_autocomplete.js.map +1 -1
- package/dist/tui/ui/subagent_editor_pane.js +3 -3
- package/dist/tui/ui/theme/index.js +1 -1
- package/dist/tui/ui/theme/index.js.map +1 -1
- package/dist/tui/ui/theme/palette.js +245 -8
- package/dist/tui/ui/theme/palette.js.map +1 -1
- package/dist/tui/ui/theme/theme.js +3 -30
- package/dist/tui/ui/theme/theme.js.map +1 -1
- package/dist/tui/ui/tool_card.js +137 -0
- package/dist/tui/ui/tool_card.js.map +1 -0
- package/dist/tui/ui/user_message.js +3 -6
- package/dist/tui/ui/user_message.js.map +1 -1
- package/package.json +2 -2
- package/dist/core/utils/tool_preview.js +0 -73
- package/dist/core/utils/tool_preview.js.map +0 -1
- package/dist/tui/chat_controller/command_hints.js +0 -35
- package/dist/tui/chat_controller/command_hints.js.map +0 -1
- package/dist/tui/ui/bash_execution.js +0 -129
- package/dist/tui/ui/bash_execution.js.map +0 -1
- package/dist/tui/ui/components/dynamic_border.js +0 -11
- package/dist/tui/ui/components/dynamic_border.js.map +0 -1
- package/dist/tui/ui/components/header_box.js +0 -107
- package/dist/tui/ui/components/header_box.js.map +0 -1
- package/dist/tui/ui/components/header_line.js +0 -60
- package/dist/tui/ui/components/header_line.js.map +0 -1
- package/dist/tui/ui/components/padded_container.js +0 -24
- package/dist/tui/ui/components/padded_container.js.map +0 -1
- package/dist/tui/ui/file_execution.js +0 -176
- package/dist/tui/ui/file_execution.js.map +0 -1
- package/dist/tui/ui/tool_output.js +0 -163
- package/dist/tui/ui/tool_output.js.map +0 -1
- package/dist/tui/ui/tool_ui_registry.js +0 -786
- package/dist/tui/ui/tool_ui_registry.js.map +0 -1
package/dist/core/tools/edit.js
CHANGED
|
@@ -2,6 +2,7 @@ import { Type } from "typebox";
|
|
|
2
2
|
import { z } from "zod";
|
|
3
3
|
import { buildLineDiff } from "../utils/line_diff.js";
|
|
4
4
|
import { formatZodError } from "../utils/zod.js";
|
|
5
|
+
import { buildToolRunPresentation } from "./presentation.js";
|
|
5
6
|
import { createTextToolOutcome, executeTool, } from "./registry.js";
|
|
6
7
|
import { TOOL_NAME_EDIT } from "./tool_names.js";
|
|
7
8
|
const EDIT_DESCRIPTION = [
|
|
@@ -9,7 +10,7 @@ const EDIT_DESCRIPTION = [
|
|
|
9
10
|
"Finds and replaces exactly one occurrence of oldText with newText.",
|
|
10
11
|
"Fails if the file doesn't exist, if oldText is not found, or if multiple matches exist.",
|
|
11
12
|
].join(" ");
|
|
12
|
-
const EDIT_PATH_DESCRIPTION = "
|
|
13
|
+
const EDIT_PATH_DESCRIPTION = "Single-line absolute or relative path to the file to edit.";
|
|
13
14
|
const EDIT_OLD_TEXT_DESCRIPTION = [
|
|
14
15
|
"The exact text to find and replace, including whitespace and newlines.",
|
|
15
16
|
"Must match exactly one occurrence.",
|
|
@@ -20,24 +21,39 @@ export const EDIT_TOOL = {
|
|
|
20
21
|
name: TOOL_NAME_EDIT,
|
|
21
22
|
description: EDIT_DESCRIPTION,
|
|
22
23
|
parameters: Type.Object({
|
|
23
|
-
path: Type.String({
|
|
24
|
+
path: Type.String({
|
|
25
|
+
description: EDIT_PATH_DESCRIPTION,
|
|
26
|
+
pattern: "^[^\\r\\n]+$",
|
|
27
|
+
}),
|
|
24
28
|
oldText: Type.String({ description: EDIT_OLD_TEXT_DESCRIPTION }),
|
|
25
29
|
newText: Type.String({ description: EDIT_NEW_TEXT_DESCRIPTION }),
|
|
26
30
|
}, { additionalProperties: false }),
|
|
27
31
|
};
|
|
28
|
-
const editArgsSchema = z
|
|
29
|
-
|
|
30
|
-
|
|
32
|
+
const editArgsSchema = z
|
|
33
|
+
.object({
|
|
34
|
+
path: z.string(),
|
|
35
|
+
oldText: z.string(),
|
|
31
36
|
newText: z.string(),
|
|
32
|
-
})
|
|
37
|
+
})
|
|
38
|
+
.strict();
|
|
33
39
|
function parseEditArgs(raw) {
|
|
34
40
|
const parsed = editArgsSchema.safeParse(raw);
|
|
35
41
|
if (!parsed.success) {
|
|
36
42
|
return { ok: false, error: formatZodError(parsed.error) };
|
|
37
43
|
}
|
|
38
|
-
|
|
44
|
+
const path = parsed.data.path.trim();
|
|
45
|
+
if (!path) {
|
|
46
|
+
return { ok: false, error: "path must not be empty." };
|
|
47
|
+
}
|
|
48
|
+
if (/[\r\n]/.test(path)) {
|
|
49
|
+
return { ok: false, error: "path must be a single line." };
|
|
50
|
+
}
|
|
51
|
+
if (!parsed.data.oldText) {
|
|
52
|
+
return { ok: false, error: "oldText must not be empty." };
|
|
53
|
+
}
|
|
54
|
+
return { ok: true, data: { ...parsed.data, path } };
|
|
39
55
|
}
|
|
40
|
-
function
|
|
56
|
+
function getEditSubject(raw) {
|
|
41
57
|
const parsedArgs = parseEditArgs(raw);
|
|
42
58
|
return parsedArgs.ok ? parsedArgs.data.path : "(invalid arguments)";
|
|
43
59
|
}
|
|
@@ -54,57 +70,54 @@ function countOccurrences(content, search) {
|
|
|
54
70
|
}
|
|
55
71
|
return count;
|
|
56
72
|
}
|
|
57
|
-
function
|
|
58
|
-
const
|
|
59
|
-
|
|
60
|
-
return "";
|
|
61
|
-
const lines = content.split(/\r?\n/);
|
|
62
|
-
const matchLineIndex = content.slice(0, index).split(/\r?\n/).length - 1;
|
|
63
|
-
const startLine = Math.max(0, matchLineIndex - contextLines);
|
|
64
|
-
const endLine = Math.min(lines.length - 1, matchLineIndex + contextLines);
|
|
65
|
-
const contextSnippet = lines.slice(startLine, endLine + 1).join("\n");
|
|
66
|
-
return `Lines ${startLine + 1}-${endLine + 1}:\n${contextSnippet}`;
|
|
73
|
+
function formatSignedDelta(value, unit) {
|
|
74
|
+
const prefix = value > 0 ? "+" : "";
|
|
75
|
+
return `${prefix}${value} ${unit}${Math.abs(value) === 1 ? "" : "s"}`;
|
|
67
76
|
}
|
|
68
|
-
function
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
}
|
|
86
|
-
return {
|
|
87
|
-
previewLines,
|
|
88
|
-
statusLine,
|
|
89
|
-
fullLines,
|
|
90
|
-
};
|
|
77
|
+
function buildEditPresentation(args) {
|
|
78
|
+
const details = args.diffLines.map((text) => {
|
|
79
|
+
if (text.startsWith("+ "))
|
|
80
|
+
return { text, tone: "added", wrap: "character" };
|
|
81
|
+
if (text.startsWith("- "))
|
|
82
|
+
return { text, tone: "removed", wrap: "character" };
|
|
83
|
+
return { text, wrap: "character" };
|
|
84
|
+
});
|
|
85
|
+
return buildToolRunPresentation({
|
|
86
|
+
toolName: TOOL_NAME_EDIT,
|
|
87
|
+
subject: args.subject,
|
|
88
|
+
details,
|
|
89
|
+
detailTruncation: false,
|
|
90
|
+
metadata: [
|
|
91
|
+
formatSignedDelta(args.added - args.removed, "line"),
|
|
92
|
+
formatSignedDelta(args.newLength - args.oldLength, "char"),
|
|
93
|
+
],
|
|
94
|
+
});
|
|
91
95
|
}
|
|
92
96
|
export function createEditToolDefinition(backend) {
|
|
93
97
|
return {
|
|
94
98
|
schema: EDIT_TOOL,
|
|
95
|
-
describe: (toolCall) =>
|
|
99
|
+
describe: (toolCall) => {
|
|
100
|
+
const subject = getEditSubject(toolCall.arguments);
|
|
101
|
+
return {
|
|
102
|
+
presentation: buildToolRunPresentation({ toolName: TOOL_NAME_EDIT, subject }),
|
|
103
|
+
};
|
|
104
|
+
},
|
|
96
105
|
async execute(toolCall, context) {
|
|
97
106
|
return executeTool(context, async () => {
|
|
98
107
|
const parsedArgs = parseEditArgs(toolCall.arguments);
|
|
99
108
|
const path = parsedArgs.ok ? parsedArgs.data.path : "";
|
|
100
|
-
const
|
|
109
|
+
const subject = getEditSubject(toolCall.arguments);
|
|
101
110
|
const blocked = (reason, semanticOutcome = "blocked") => {
|
|
102
111
|
const outcome = createTextToolOutcome(reason, semanticOutcome);
|
|
103
112
|
const uiEvent = {
|
|
104
113
|
type: "edit_blocked",
|
|
105
114
|
toolCallId: toolCall.id,
|
|
106
115
|
path: path || "(invalid path)",
|
|
107
|
-
|
|
116
|
+
presentation: buildToolRunPresentation({
|
|
117
|
+
toolName: TOOL_NAME_EDIT,
|
|
118
|
+
subject: subject,
|
|
119
|
+
details: [{ text: reason }],
|
|
120
|
+
}),
|
|
108
121
|
reason,
|
|
109
122
|
};
|
|
110
123
|
return { content: outcome.content, outcome: outcome.outcome, uiEvent };
|
|
@@ -127,58 +140,33 @@ export function createEditToolDefinition(backend) {
|
|
|
127
140
|
}
|
|
128
141
|
const matchCount = countOccurrences(content, oldText);
|
|
129
142
|
if (matchCount === 0) {
|
|
130
|
-
|
|
143
|
+
const noMatchMessage = "No exact match for oldText was found in the file. Read the file first to see its current content.";
|
|
131
144
|
const trimmedOld = oldText.trim();
|
|
132
|
-
const
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
" Hint: Found matches when ignoring leading/trailing whitespace. Check that your oldText exactly matches the file content, including whitespace.";
|
|
137
|
-
}
|
|
138
|
-
else if (oldText.includes("\n")) {
|
|
139
|
-
hint =
|
|
140
|
-
" Hint: Your search contains newlines. Ensure line endings match the file (LF vs CRLF) and indentation is exact.";
|
|
141
|
-
}
|
|
142
|
-
else {
|
|
143
|
-
// Check for partial matches
|
|
144
|
-
const words = oldText.split(/\s+/).filter((w) => w.length > 3);
|
|
145
|
-
const partialMatches = words.filter((w) => content.includes(w));
|
|
146
|
-
if (partialMatches.length > 0 && partialMatches.length < words.length) {
|
|
147
|
-
hint = ` Hint: Some words from oldText were found ('${partialMatches.slice(0, 3).join("', '")}'), but the exact string was not. Check for typos or extra whitespace.`;
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
return blocked(`No exact match for oldText was found in the file.${hint} Read the file first to see its current content.`);
|
|
145
|
+
const hasWhitespaceOnlyMismatch = trimmedOld !== oldText && countOccurrences(content, trimmedOld) > 0;
|
|
146
|
+
return blocked(hasWhitespaceOnlyMismatch
|
|
147
|
+
? `${noMatchMessage} Hint: Found matches when ignoring leading/trailing whitespace.`
|
|
148
|
+
: noMatchMessage);
|
|
151
149
|
}
|
|
152
150
|
if (matchCount > 1) {
|
|
153
|
-
|
|
154
|
-
return blocked(`Found ${matchCount} matches for oldText, but exactly 1 is required. Make oldText more specific to match only one location.\n\nFirst match context:\n${firstMatchContext}`);
|
|
151
|
+
return blocked(`Found ${matchCount} matches for oldText, but exactly 1 is required. Make oldText more specific to match only one location.`);
|
|
155
152
|
}
|
|
156
|
-
// Exactly one match -> perform the replacement
|
|
157
153
|
const newContent = content.replace(oldText, () => newText);
|
|
158
154
|
try {
|
|
159
155
|
await backend.writeFile(path, newContent);
|
|
160
156
|
const { lines: diffLines, added, removed } = buildLineDiff(oldText, newText);
|
|
161
|
-
const
|
|
162
|
-
const sizeDiffStr = sizeDiff === 0
|
|
163
|
-
? "Same size"
|
|
164
|
-
: sizeDiff > 0
|
|
165
|
-
? `+${sizeDiff} chars`
|
|
166
|
-
: `${sizeDiff} chars`;
|
|
167
|
-
const summaryLine = `Successfully edited ${path}: ${oldText.length} → ${newText.length} chars (${sizeDiffStr})`;
|
|
168
|
-
const statusLine = `+${added}, -${removed} · ${oldText.length} → ${newText.length} chars (${sizeDiffStr})`;
|
|
169
|
-
const resultText = formatEditToolResultText({ summaryLine });
|
|
170
|
-
const outcome = createTextToolOutcome(resultText, "succeeded");
|
|
171
|
-
const uiText = buildEditUiText({ summaryLine, statusLine, diffLines });
|
|
157
|
+
const outcome = createTextToolOutcome(`Successfully edited ${path}.`, "succeeded");
|
|
172
158
|
const uiEvent = {
|
|
173
159
|
type: "edit_success",
|
|
174
160
|
toolCallId: toolCall.id,
|
|
175
161
|
path,
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
162
|
+
presentation: buildEditPresentation({
|
|
163
|
+
subject: subject,
|
|
164
|
+
diffLines,
|
|
165
|
+
added,
|
|
166
|
+
removed,
|
|
167
|
+
oldLength: oldText.length,
|
|
168
|
+
newLength: newText.length,
|
|
169
|
+
}),
|
|
182
170
|
};
|
|
183
171
|
return { content: outcome.content, outcome: outcome.outcome, uiEvent };
|
|
184
172
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edit.js","sourceRoot":"","sources":["../../../src/core/tools/edit.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGjD,OAAO,EAEL,qBAAqB,EACrB,WAAW,GAIZ,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,gBAAgB,GAAG;IACvB,8CAA8C;IAC9C,oEAAoE;IACpE,yFAAyF;CAC1F,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEZ,MAAM,qBAAqB,GAAG,
|
|
1
|
+
{"version":3,"file":"edit.js","sourceRoot":"","sources":["../../../src/core/tools/edit.ts"],"names":[],"mappings":"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"}
|
package/dist/core/tools/goal.js
CHANGED
|
@@ -2,7 +2,8 @@ import { Type } from "typebox";
|
|
|
2
2
|
import { z } from "zod";
|
|
3
3
|
import { buildBlockedGoalInstruction, buildGoalPolicy, formatGoalState } from "../session/goal.js";
|
|
4
4
|
import { parseToolArgs } from "../utils/zod.js";
|
|
5
|
-
import {
|
|
5
|
+
import { buildToolRunPresentation, } from "./presentation.js";
|
|
6
|
+
import { createTextToolOutcome, executeTool, } from "./registry.js";
|
|
6
7
|
import { TOOL_NAME_CREATE_GOAL, TOOL_NAME_GET_GOAL, TOOL_NAME_UPDATE_GOAL } from "./tool_names.js";
|
|
7
8
|
const GET_GOAL_TOOL = {
|
|
8
9
|
name: TOOL_NAME_GET_GOAL,
|
|
@@ -26,6 +27,35 @@ const UPDATE_GOAL_TOOL = {
|
|
|
26
27
|
};
|
|
27
28
|
const emptyArgsSchema = z.object({}).strict();
|
|
28
29
|
const createArgsSchema = z.object({ objective: z.string().trim().min(1) }).strict();
|
|
30
|
+
const GOAL_ACTION_LABELS = {
|
|
31
|
+
[TOOL_NAME_GET_GOAL]: {
|
|
32
|
+
preparing: "preparing check",
|
|
33
|
+
queued: "queued check",
|
|
34
|
+
running: "checking",
|
|
35
|
+
succeeded: "checked",
|
|
36
|
+
failed: "failed to check",
|
|
37
|
+
blocked: "check blocked",
|
|
38
|
+
cancelled: "check cancelled",
|
|
39
|
+
},
|
|
40
|
+
[TOOL_NAME_CREATE_GOAL]: {
|
|
41
|
+
preparing: "preparing creation",
|
|
42
|
+
queued: "queued creation",
|
|
43
|
+
running: "creating",
|
|
44
|
+
succeeded: "created",
|
|
45
|
+
failed: "failed to create",
|
|
46
|
+
blocked: "creation blocked",
|
|
47
|
+
cancelled: "creation cancelled",
|
|
48
|
+
},
|
|
49
|
+
[TOOL_NAME_UPDATE_GOAL]: {
|
|
50
|
+
preparing: "preparing update",
|
|
51
|
+
queued: "queued update",
|
|
52
|
+
running: "updating",
|
|
53
|
+
succeeded: "updated",
|
|
54
|
+
failed: "failed to update",
|
|
55
|
+
blocked: "update blocked",
|
|
56
|
+
cancelled: "update cancelled",
|
|
57
|
+
},
|
|
58
|
+
};
|
|
29
59
|
const updateArgsSchema = z
|
|
30
60
|
.object({
|
|
31
61
|
objective: z.string().trim().min(1).optional(),
|
|
@@ -43,7 +73,12 @@ export function createGoalToolDefinitions(manager) {
|
|
|
43
73
|
createGoalTool(GET_GOAL_TOOL, emptyArgsSchema, () => formatGoalState(manager.getGoal())),
|
|
44
74
|
createGoalTool(CREATE_GOAL_TOOL, createArgsSchema, async ({ objective }) => {
|
|
45
75
|
const goal = await manager.createGoal(objective);
|
|
46
|
-
return
|
|
76
|
+
return {
|
|
77
|
+
text: `Session goal created.\n\n${buildGoalPolicy(goal)}`,
|
|
78
|
+
presentation: {
|
|
79
|
+
details: [{ text: goal.objective }],
|
|
80
|
+
},
|
|
81
|
+
};
|
|
47
82
|
}),
|
|
48
83
|
createGoalTool(UPDATE_GOAL_TOOL, updateArgsSchema, async (update) => {
|
|
49
84
|
const goal = await manager.updateGoal(update);
|
|
@@ -51,26 +86,72 @@ export function createGoalToolDefinitions(manager) {
|
|
|
51
86
|
return "The session goal is complete and has been cleared.";
|
|
52
87
|
}
|
|
53
88
|
const instruction = goal.status === "active" ? buildGoalPolicy(goal) : buildBlockedGoalInstruction(goal);
|
|
54
|
-
return
|
|
89
|
+
return {
|
|
90
|
+
text: `Session goal updated.\n\n${instruction}`,
|
|
91
|
+
presentation: {
|
|
92
|
+
details: [{ text: goal.objective }],
|
|
93
|
+
},
|
|
94
|
+
};
|
|
55
95
|
}),
|
|
56
96
|
];
|
|
57
97
|
}
|
|
58
98
|
function createGoalTool(schema, argsSchema, execute) {
|
|
99
|
+
const actionOverrides = GOAL_ACTION_LABELS[schema.name];
|
|
100
|
+
if (!actionOverrides) {
|
|
101
|
+
throw new Error(`missing goal action labels for '${schema.name}'`);
|
|
102
|
+
}
|
|
59
103
|
return {
|
|
60
104
|
schema,
|
|
61
|
-
describe: () => ({
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
105
|
+
describe: () => ({
|
|
106
|
+
presentation: buildToolRunPresentation({
|
|
107
|
+
toolName: schema.name,
|
|
108
|
+
subject: "goal",
|
|
109
|
+
actionOverrides,
|
|
110
|
+
}),
|
|
111
|
+
}),
|
|
112
|
+
async execute(toolCall, context) {
|
|
113
|
+
const finish = (text, outcome, successPresentation) => {
|
|
114
|
+
return {
|
|
115
|
+
...createTextToolOutcome(text, outcome),
|
|
116
|
+
uiEvent: {
|
|
117
|
+
type: "tool_call_finished",
|
|
118
|
+
toolCallId: toolCall.id,
|
|
119
|
+
toolName: schema.name,
|
|
120
|
+
presentation: buildToolRunPresentation({
|
|
121
|
+
toolName: schema.name,
|
|
122
|
+
subject: "goal",
|
|
123
|
+
details: successPresentation?.details ?? [{ text }],
|
|
124
|
+
...(successPresentation ? { detailTruncation: false } : {}),
|
|
125
|
+
actionOverrides,
|
|
126
|
+
}),
|
|
127
|
+
status: outcome === "succeeded" ? "success" : "error",
|
|
128
|
+
},
|
|
129
|
+
};
|
|
130
|
+
};
|
|
131
|
+
return executeTool(context, async () => {
|
|
132
|
+
const parsed = parseToolArgs(argsSchema, toolCall.arguments);
|
|
133
|
+
if (!parsed.ok) {
|
|
134
|
+
return finish(`Invalid arguments: ${parsed.error}`, "blocked");
|
|
135
|
+
}
|
|
136
|
+
try {
|
|
137
|
+
const result = await execute(parsed.data);
|
|
138
|
+
return typeof result === "string"
|
|
139
|
+
? finish(result, "succeeded")
|
|
140
|
+
: finish(result.text, "succeeded", result.presentation);
|
|
141
|
+
}
|
|
142
|
+
catch (error) {
|
|
143
|
+
return finish(error instanceof Error ? error.message : String(error), "blocked");
|
|
144
|
+
}
|
|
145
|
+
}, {
|
|
146
|
+
type: "tool_call_started",
|
|
147
|
+
toolCallId: toolCall.id,
|
|
148
|
+
toolName: schema.name,
|
|
149
|
+
presentation: buildToolRunPresentation({
|
|
150
|
+
toolName: schema.name,
|
|
151
|
+
subject: "goal",
|
|
152
|
+
actionOverrides,
|
|
153
|
+
}),
|
|
154
|
+
});
|
|
74
155
|
},
|
|
75
156
|
};
|
|
76
157
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"goal.js","sourceRoot":"","sources":["../../../src/core/tools/goal.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,2BAA2B,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACnG,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"goal.js","sourceRoot":"","sources":["../../../src/core/tools/goal.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,2BAA2B,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACnG,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EACL,wBAAwB,GAGzB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAEL,qBAAqB,EACrB,WAAW,GAGZ,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAWnG,MAAM,aAAa,GAAS;IAC1B,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,yEAAyE;IACtF,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC;CAC7D,CAAC;AAEF,MAAM,gBAAgB,GAAS;IAC7B,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EACT,mUAAmU;IACrU,UAAU,EAAE,IAAI,CAAC,MAAM,CACrB;QACE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;KACzC,EACD,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAChC;CACF,CAAC;AAEF,MAAM,gBAAgB,GAAS;IAC7B,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EACT,8cAA8c;IAChd,UAAU,EAAE,IAAI,CAAC,MAAM,CACrB;QACE,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;QACvD,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;KACvF,EACD,EAAE,oBAAoB,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,EAAE,CAClD;CACF,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;AAC9C,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;AACpF,MAAM,kBAAkB,GAAwC;IAC9D,CAAC,kBAAkB,CAAC,EAAE;QACpB,SAAS,EAAE,iBAAiB;QAC5B,MAAM,EAAE,cAAc;QACtB,OAAO,EAAE,UAAU;QACnB,SAAS,EAAE,SAAS;QACpB,MAAM,EAAE,iBAAiB;QACzB,OAAO,EAAE,eAAe;QACxB,SAAS,EAAE,iBAAiB;KAC7B;IACD,CAAC,qBAAqB,CAAC,EAAE;QACvB,SAAS,EAAE,oBAAoB;QAC/B,MAAM,EAAE,iBAAiB;QACzB,OAAO,EAAE,UAAU;QACnB,SAAS,EAAE,SAAS;QACpB,MAAM,EAAE,kBAAkB;QAC1B,OAAO,EAAE,kBAAkB;QAC3B,SAAS,EAAE,oBAAoB;KAChC;IACD,CAAC,qBAAqB,CAAC,EAAE;QACvB,SAAS,EAAE,kBAAkB;QAC7B,MAAM,EAAE,eAAe;QACvB,OAAO,EAAE,UAAU;QACnB,SAAS,EAAE,SAAS;QACpB,MAAM,EAAE,kBAAkB;QAC1B,OAAO,EAAE,gBAAgB;QACzB,SAAS,EAAE,kBAAkB;KAC9B;CACF,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC;KACvB,MAAM,CAAC;IACN,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC9C,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE;CACnD,CAAC;KACD,MAAM,EAAE;KACR,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE;IAC3E,OAAO,EAAE,iCAAiC;CAC3C,CAAC;KACD,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,EAAE;IAC/E,OAAO,EAAE,4CAA4C;CACtD,CAAC,CAAC;AAEL,MAAM,UAAU,yBAAyB,CAAC,OAAoB;IAC5D,OAAO;QACL,cAAc,CAAC,aAAa,EAAE,eAAe,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QACxF,cAAc,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;YACzE,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YACjD,OAAO;gBACL,IAAI,EAAE,4BAA4B,eAAe,CAAC,IAAI,CAAC,EAAE;gBACzD,YAAY,EAAE;oBACZ,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;iBACpC;aACF,CAAC;QACJ,CAAC,CAAC;QACF,cAAc,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YAClE,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAC9C,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBAClB,OAAO,oDAAoD,CAAC;YAC9D,CAAC;YACD,MAAM,WAAW,GACf,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAC;YACvF,OAAO;gBACL,IAAI,EAAE,4BAA4B,WAAW,EAAE;gBAC/C,YAAY,EAAE;oBACZ,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;iBACpC;aACF,CAAC;QACJ,CAAC,CAAC;KACH,CAAC;AACJ,CAAC;AAWD,SAAS,cAAc,CACrB,MAAY,EACZ,UAAwB,EACxB,OAEiF;IAEjF,MAAM,eAAe,GAAG,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACxD,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,mCAAmC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;IACrE,CAAC;IACD,OAAO;QACL,MAAM;QACN,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;YACf,YAAY,EAAE,wBAAwB,CAAC;gBACrC,QAAQ,EAAE,MAAM,CAAC,IAAI;gBACrB,OAAO,EAAE,MAAM;gBACf,eAAe;aAChB,CAAC;SACH,CAAC;QACF,KAAK,CAAC,OAAO,CACX,QAAkB,EAClB,OAA6B;YAE7B,MAAM,MAAM,GAAG,CACb,IAAY,EACZ,OAAwC,EACxC,mBAAiD,EACqB,EAAE;gBACxE,OAAO;oBACL,GAAG,qBAAqB,CAAC,IAAI,EAAE,OAAO,CAAC;oBACvC,OAAO,EAAE;wBACP,IAAI,EAAE,oBAAoB;wBAC1B,UAAU,EAAE,QAAQ,CAAC,EAAE;wBACvB,QAAQ,EAAE,MAAM,CAAC,IAAI;wBACrB,YAAY,EAAE,wBAAwB,CAAC;4BACrC,QAAQ,EAAE,MAAM,CAAC,IAAI;4BACrB,OAAO,EAAE,MAAM;4BACf,OAAO,EAAE,mBAAmB,EAAE,OAAO,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;4BACnD,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,KAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;4BACpE,eAAe;yBAChB,CAAC;wBACF,MAAM,EAAE,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO;qBACtD;iBACF,CAAC;YACJ,CAAC,CAAC;YAEF,OAAO,WAAW,CAChB,OAAO,EACP,KAAK,IAAI,EAAE;gBACT,MAAM,MAAM,GAAG,aAAa,CAAC,UAAU,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;gBAC7D,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;oBACf,OAAO,MAAM,CAAC,sBAAsB,MAAM,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;gBACjE,CAAC;gBACD,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBAC1C,OAAO,OAAO,MAAM,KAAK,QAAQ;wBAC/B,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC;wBAC7B,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;gBAC5D,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,MAAM,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC;gBACnF,CAAC;YACH,CAAC,EACD;gBACE,IAAI,EAAE,mBAAmB;gBACzB,UAAU,EAAE,QAAQ,CAAC,EAAE;gBACvB,QAAQ,EAAE,MAAM,CAAC,IAAI;gBACrB,YAAY,EAAE,wBAAwB,CAAC;oBACrC,QAAQ,EAAE,MAAM,CAAC,IAAI;oBACrB,OAAO,EAAE,MAAM;oBACf,eAAe;iBAChB,CAAC;aACH,CACF,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -2,21 +2,19 @@ import { readFileSync } from "node:fs";
|
|
|
2
2
|
import { Type } from "typebox";
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
import { formatZodError } from "../utils/zod.js";
|
|
5
|
-
import { createCodeModeToolDefinition, } from "./code_mode.js";
|
|
5
|
+
import { buildCodeModeToolDescription, createCodeModeToolDefinition, } from "./code_mode.js";
|
|
6
6
|
import { executeCodeModeWorker } from "./code_mode_worker.js";
|
|
7
7
|
import { TOOL_NAME_HISTORY } from "./tool_names.js";
|
|
8
8
|
const HISTORY_CODE_MODE_TIMEOUT_MS = 60_000;
|
|
9
9
|
const HISTORY_CODE_MODE_OUTPUT_TOKENS = 8_192;
|
|
10
|
-
const HISTORY_DESCRIPTION =
|
|
11
|
-
"
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
"To discover the available APIs, run a program that prints docs with console.log(docs), then use that documentation in the next turn.",
|
|
19
|
-
].join(" ");
|
|
10
|
+
const HISTORY_DESCRIPTION = buildCodeModeToolDescription({
|
|
11
|
+
sdkGlobal: "history",
|
|
12
|
+
introduction: [
|
|
13
|
+
"Run a one-shot JavaScript program to search and read durable transcripts from the configured history collection.",
|
|
14
|
+
"Use this tool only when the user or other active instructions directly ask you to reference, search, or read historical transcripts; do not invoke it merely because prior sessions might be relevant.",
|
|
15
|
+
"The tool is read-only and has global visibility across repositories and execution environments.",
|
|
16
|
+
],
|
|
17
|
+
});
|
|
20
18
|
export const HISTORY_TOOL = {
|
|
21
19
|
name: TOOL_NAME_HISTORY,
|
|
22
20
|
description: HISTORY_DESCRIPTION,
|
|
@@ -38,7 +36,7 @@ const searchInputSchema = z
|
|
|
38
36
|
.object({
|
|
39
37
|
query: z.string().trim().min(1).max(1_000).optional(),
|
|
40
38
|
attributes: attributeFiltersSchema.optional(),
|
|
41
|
-
limit: z.number().int().min(1).max(
|
|
39
|
+
limit: z.number().int().min(1).max(75).default(10),
|
|
42
40
|
cursor: z.string().min(1).max(2_048).optional(),
|
|
43
41
|
})
|
|
44
42
|
.strict();
|
|
@@ -55,7 +53,7 @@ function parseHistoryArguments(raw) {
|
|
|
55
53
|
const rawCode = typeof raw === "object" && raw !== null && typeof raw.code === "string"
|
|
56
54
|
? raw.code
|
|
57
55
|
: "";
|
|
58
|
-
const
|
|
56
|
+
const subject = rawCode
|
|
59
57
|
.split(/\r?\n/)
|
|
60
58
|
.map((line) => line.trim())
|
|
61
59
|
.find(Boolean) ?? "(invalid code)";
|
|
@@ -65,14 +63,14 @@ function parseHistoryArguments(raw) {
|
|
|
65
63
|
ok: false,
|
|
66
64
|
error: formatZodError(parsed.error),
|
|
67
65
|
code: rawCode,
|
|
68
|
-
|
|
66
|
+
subject,
|
|
69
67
|
};
|
|
70
68
|
}
|
|
71
69
|
return {
|
|
72
70
|
ok: true,
|
|
73
71
|
args: parsed.data,
|
|
74
72
|
code: parsed.data.code,
|
|
75
|
-
|
|
73
|
+
subject,
|
|
76
74
|
};
|
|
77
75
|
}
|
|
78
76
|
function parseBridgeArguments(request) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"history.js","sourceRoot":"","sources":["../../../src/core/tools/history.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,
|
|
1
|
+
{"version":3,"file":"history.js","sourceRoot":"","sources":["../../../src/core/tools/history.ts"],"names":[],"mappings":"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"}
|