@markusylisiurunen/tau 0.3.89 → 0.3.90
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/core/static/tau_docs/credentials.md +4 -1
- package/dist/core/static/tau_docs/ownership-and-scope.md +2 -0
- package/dist/core/static/tau_docs/security.md +2 -0
- package/dist/core/static/tau_docs/subagents.md +54 -8
- package/dist/core/subagents/agent_supervisor.js +158 -37
- package/dist/core/subagents/agent_supervisor.js.map +1 -1
- package/dist/core/subagents/claude_code_models.js +11 -0
- package/dist/core/subagents/claude_code_models.js.map +1 -0
- package/dist/core/subagents/claude_code_protocol.js +44 -0
- package/dist/core/subagents/claude_code_protocol.js.map +1 -0
- package/dist/core/subagents/claude_code_runner.js +226 -0
- package/dist/core/subagents/claude_code_runner.js.map +1 -0
- package/dist/core/subagents/claude_code_runner.mjs +176 -0
- package/dist/core/subagents/claude_code_runtime.js +145 -0
- package/dist/core/subagents/claude_code_runtime.js.map +1 -0
- package/dist/core/subagents/format.js +3 -1
- package/dist/core/subagents/format.js.map +1 -1
- package/dist/core/subagents/launch_model.js +23 -7
- package/dist/core/subagents/launch_model.js.map +1 -1
- package/dist/core/subagents/registry.js +10 -1
- package/dist/core/subagents/registry.js.map +1 -1
- package/dist/core/subagents/types.js.map +1 -1
- package/dist/core/tools/spawn_agent.js +31 -26
- package/dist/core/tools/spawn_agent.js.map +1 -1
- package/dist/core/version.js +1 -1
- package/package.json +7 -5
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
import { accessSync, constants } from "node:fs";
|
|
2
|
+
import { delimiter, join } from "node:path";
|
|
3
|
+
import { query, } from "@anthropic-ai/claude-agent-sdk";
|
|
4
|
+
import { claudeCodeInputSchema, } from "./claude_code_protocol.js";
|
|
5
|
+
export function claudeCodeTools(tools) {
|
|
6
|
+
const selected = new Set();
|
|
7
|
+
if (tools.includes("bash") || tools.includes("view_image")) {
|
|
8
|
+
for (const name of ["Read", "Glob", "Grep"])
|
|
9
|
+
selected.add(name);
|
|
10
|
+
}
|
|
11
|
+
if (tools.includes("bash"))
|
|
12
|
+
selected.add("Bash");
|
|
13
|
+
if (tools.includes("write"))
|
|
14
|
+
selected.add("Write");
|
|
15
|
+
if (tools.includes("edit"))
|
|
16
|
+
selected.add("Edit");
|
|
17
|
+
if (tools.includes("web")) {
|
|
18
|
+
selected.add("WebSearch");
|
|
19
|
+
selected.add("WebFetch");
|
|
20
|
+
}
|
|
21
|
+
return [...selected];
|
|
22
|
+
}
|
|
23
|
+
export function claudeCodeOptions(input, executable) {
|
|
24
|
+
const env = { ...process.env };
|
|
25
|
+
for (const key of Object.keys(env)) {
|
|
26
|
+
if (key.startsWith("ANTHROPIC_") ||
|
|
27
|
+
key.startsWith("CLAUDE_CODE_USE_") ||
|
|
28
|
+
key === "CLAUDE_CODE_OAUTH_TOKEN" ||
|
|
29
|
+
key === "CLAUDE_CODE_SUBAGENT_MODEL")
|
|
30
|
+
delete env[key];
|
|
31
|
+
}
|
|
32
|
+
const tools = [...claudeCodeTools(input.tools), "Skill"];
|
|
33
|
+
return {
|
|
34
|
+
cwd: input.cwd,
|
|
35
|
+
model: input.model,
|
|
36
|
+
effort: input.effort,
|
|
37
|
+
maxTurns: 1024,
|
|
38
|
+
includePartialMessages: true,
|
|
39
|
+
pathToClaudeCodeExecutable: executable,
|
|
40
|
+
env,
|
|
41
|
+
tools,
|
|
42
|
+
permissionMode: "bypassPermissions",
|
|
43
|
+
allowDangerouslySkipPermissions: true,
|
|
44
|
+
disallowedTools: ["Agent", "Task", "AskUserQuestion"],
|
|
45
|
+
settingSources: ["user", "project", "local"],
|
|
46
|
+
skills: "all",
|
|
47
|
+
settings: {
|
|
48
|
+
fastMode: false,
|
|
49
|
+
autoMemoryEnabled: false,
|
|
50
|
+
disableAllHooks: true,
|
|
51
|
+
sandbox: { enabled: false },
|
|
52
|
+
},
|
|
53
|
+
persistSession: true,
|
|
54
|
+
...(input.sessionId ? { resume: input.sessionId } : {}),
|
|
55
|
+
systemPrompt: {
|
|
56
|
+
type: "preset",
|
|
57
|
+
preset: "claude_code",
|
|
58
|
+
append: [
|
|
59
|
+
"You are a headless subagent supporting a parent agent. Complete the assigned task autonomously, including any verification it requires. No user or parent agent is available to answer questions or approve intermediate steps. Resolve minor ambiguities with reasonable assumptions and continue. If missing information or authority prevents safe progress, report the blocker clearly instead of attempting brittle or risky workarounds.",
|
|
60
|
+
"Read and follow applicable project instructions wherever you work. Use the skills available in this session when relevant.",
|
|
61
|
+
"Other agents may be modifying the same worktree. Never revert, discard, or overwrite changes you did not make. Avoid mutating Git operations unless explicitly instructed by the task. Do not launch other agents.",
|
|
62
|
+
"Your final response is what the parent agent receives from your work. Make it self-contained and include everything important for the parent to understand and use the result. Do not rely on intermediate messages or tool output being visible.",
|
|
63
|
+
].join("\n\n"),
|
|
64
|
+
},
|
|
65
|
+
stderr: () => { },
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
function findClaudeExecutable() {
|
|
69
|
+
for (const directory of (process.env.PATH ?? "").split(delimiter)) {
|
|
70
|
+
if (!directory)
|
|
71
|
+
continue;
|
|
72
|
+
const path = join(directory, "claude");
|
|
73
|
+
try {
|
|
74
|
+
accessSync(path, constants.X_OK);
|
|
75
|
+
return path;
|
|
76
|
+
}
|
|
77
|
+
catch { }
|
|
78
|
+
}
|
|
79
|
+
throw new Error("Claude Code is not installed on the execution environment. Install it and sign in there with your Claude subscription before launching a Claude Code subagent.");
|
|
80
|
+
}
|
|
81
|
+
export async function runClaudeCode(raw, emit) {
|
|
82
|
+
const input = claudeCodeInputSchema.parse(raw);
|
|
83
|
+
let authorized = false;
|
|
84
|
+
let allowPrompt;
|
|
85
|
+
const ready = new Promise((resolve) => {
|
|
86
|
+
allowPrompt = resolve;
|
|
87
|
+
});
|
|
88
|
+
let finishPrompt;
|
|
89
|
+
const finished = new Promise((resolve) => {
|
|
90
|
+
finishPrompt = resolve;
|
|
91
|
+
});
|
|
92
|
+
async function* prompts() {
|
|
93
|
+
await ready;
|
|
94
|
+
if (!authorized)
|
|
95
|
+
return;
|
|
96
|
+
yield {
|
|
97
|
+
type: "user",
|
|
98
|
+
session_id: input.sessionId ?? "",
|
|
99
|
+
parent_tool_use_id: null,
|
|
100
|
+
message: { role: "user", content: input.prompt },
|
|
101
|
+
};
|
|
102
|
+
// Keep the control channel open until the context summary has been read.
|
|
103
|
+
await finished;
|
|
104
|
+
}
|
|
105
|
+
const conversation = query({
|
|
106
|
+
prompt: prompts(),
|
|
107
|
+
options: claudeCodeOptions(input, findClaudeExecutable()),
|
|
108
|
+
});
|
|
109
|
+
const calls = new Map();
|
|
110
|
+
let streamedMessage;
|
|
111
|
+
const emitUsage = (message) => {
|
|
112
|
+
emit({
|
|
113
|
+
type: "usage",
|
|
114
|
+
messageId: message.id,
|
|
115
|
+
usage: {
|
|
116
|
+
input: message.usage.input_tokens,
|
|
117
|
+
output: message.usage.output_tokens,
|
|
118
|
+
cacheRead: message.usage.cache_read_input_tokens ?? 0,
|
|
119
|
+
cacheWrite: message.usage.cache_creation_input_tokens ?? 0,
|
|
120
|
+
},
|
|
121
|
+
});
|
|
122
|
+
};
|
|
123
|
+
try {
|
|
124
|
+
const initialization = await conversation.initializationResult();
|
|
125
|
+
const account = initialization.account;
|
|
126
|
+
if (!account.subscriptionType || (account.apiKeySource && account.apiKeySource !== "none")) {
|
|
127
|
+
throw new Error("Claude Code requires a subscription login on the execution environment; API-key billing is not used by this launch model.");
|
|
128
|
+
}
|
|
129
|
+
authorized = true;
|
|
130
|
+
allowPrompt();
|
|
131
|
+
for await (const message of conversation) {
|
|
132
|
+
if (message.type === "system" && message.subtype === "init") {
|
|
133
|
+
emit({ type: "session", id: message.session_id });
|
|
134
|
+
}
|
|
135
|
+
else if (message.type === "stream_event" && message.parent_tool_use_id === null) {
|
|
136
|
+
const event = message.event;
|
|
137
|
+
if (event.type === "message_start") {
|
|
138
|
+
streamedMessage = { id: event.message.id, usage: event.message.usage };
|
|
139
|
+
}
|
|
140
|
+
else if (event.type === "message_delta" && streamedMessage) {
|
|
141
|
+
const usage = streamedMessage.usage;
|
|
142
|
+
streamedMessage.usage = {
|
|
143
|
+
...usage,
|
|
144
|
+
input_tokens: event.usage.input_tokens ?? usage.input_tokens,
|
|
145
|
+
output_tokens: event.usage.output_tokens ?? usage.output_tokens,
|
|
146
|
+
cache_read_input_tokens: event.usage.cache_read_input_tokens ?? usage.cache_read_input_tokens,
|
|
147
|
+
cache_creation_input_tokens: event.usage.cache_creation_input_tokens ?? usage.cache_creation_input_tokens,
|
|
148
|
+
};
|
|
149
|
+
emitUsage(streamedMessage);
|
|
150
|
+
}
|
|
151
|
+
else if (event.type === "message_stop") {
|
|
152
|
+
streamedMessage = undefined;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
else if (message.type === "assistant" && message.parent_tool_use_id === null) {
|
|
156
|
+
emitUsage(message.message);
|
|
157
|
+
for (const block of message.message.content) {
|
|
158
|
+
if (block.type === "text" && block.text) {
|
|
159
|
+
emit({ type: "assistant", text: block.text.slice(0, 8192) });
|
|
160
|
+
}
|
|
161
|
+
else if (block.type === "tool_use") {
|
|
162
|
+
const args = block.input !== null && typeof block.input === "object" && !Array.isArray(block.input)
|
|
163
|
+
? block.input
|
|
164
|
+
: {};
|
|
165
|
+
const subject = [args.file_path, args.command, args.pattern, args.url].find((value) => typeof value === "string") ?? block.name;
|
|
166
|
+
calls.set(block.id, {
|
|
167
|
+
name: block.name.slice(0, 256),
|
|
168
|
+
subject: subject.slice(0, 1024),
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
else if (message.type === "user" &&
|
|
174
|
+
!("isReplay" in message) &&
|
|
175
|
+
message.parent_tool_use_id === null &&
|
|
176
|
+
Array.isArray(message.message.content)) {
|
|
177
|
+
for (const block of message.message.content) {
|
|
178
|
+
if (block.type !== "tool_result")
|
|
179
|
+
continue;
|
|
180
|
+
const call = calls.get(block.tool_use_id);
|
|
181
|
+
if (!call)
|
|
182
|
+
continue;
|
|
183
|
+
calls.delete(block.tool_use_id);
|
|
184
|
+
emit({ type: "tool", ...call, failed: block.is_error === true });
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
else if (message.type === "result") {
|
|
188
|
+
const totals = Object.values(message.modelUsage);
|
|
189
|
+
const failed = message.is_error || message.subtype !== "success";
|
|
190
|
+
const context = failed
|
|
191
|
+
? undefined
|
|
192
|
+
: await conversation.getContextUsage({ detail: "summary" });
|
|
193
|
+
const usage = {
|
|
194
|
+
input: 0,
|
|
195
|
+
output: 0,
|
|
196
|
+
cacheRead: 0,
|
|
197
|
+
cacheWrite: 0,
|
|
198
|
+
contextWindowUsageTokens: context?.totalTokens ?? 0,
|
|
199
|
+
contextWindow: context?.maxTokens ?? 0,
|
|
200
|
+
};
|
|
201
|
+
for (const model of totals) {
|
|
202
|
+
usage.input += model.inputTokens;
|
|
203
|
+
usage.output += model.outputTokens;
|
|
204
|
+
usage.cacheRead += model.cacheReadInputTokens;
|
|
205
|
+
usage.cacheWrite += model.cacheCreationInputTokens;
|
|
206
|
+
}
|
|
207
|
+
emit({
|
|
208
|
+
type: "result",
|
|
209
|
+
response: message.subtype === "success"
|
|
210
|
+
? message.result
|
|
211
|
+
: [message.subtype, ...message.errors].join("\n"),
|
|
212
|
+
failed,
|
|
213
|
+
cost: message.total_cost_usd,
|
|
214
|
+
usage,
|
|
215
|
+
});
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
finally {
|
|
221
|
+
finishPrompt();
|
|
222
|
+
conversation.close();
|
|
223
|
+
allowPrompt();
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
//# sourceMappingURL=claude_code_runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude_code_runner.js","sourceRoot":"","sources":["../../../src/core/subagents/claude_code_runner.ts"],"names":[],"mappings":"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"}
|