@shanepadgett/tau-agent 0.33.1 → 0.34.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/docs/context.md +29 -20
- package/docs/extending-tau-agent.md +63 -24
- package/extensions/appshot/index.ts +112 -111
- package/extensions/aside/README.md +7 -0
- package/extensions/aside/index.ts +168 -0
- package/extensions/aside/panel.ts +83 -0
- package/extensions/branch/index.ts +38 -21
- package/extensions/cache-diagnostics/index.ts +70 -58
- package/extensions/checkpoint/README.md +9 -0
- package/extensions/checkpoint/checkpoint-budget.ts +79 -0
- package/extensions/checkpoint/checkpoint.ts +277 -0
- package/extensions/checkpoint/index.ts +102 -0
- package/extensions/checkpoint/messages.ts +169 -0
- package/extensions/checkpoint/prompt.ts +24 -0
- package/extensions/checkpoint/settings.ts +27 -0
- package/extensions/commit/commit-effort.ts +3 -3
- package/extensions/context/README.md +12 -8
- package/extensions/context/definitions.ts +178 -55
- package/extensions/context/index.ts +192 -160
- package/extensions/context/panel.ts +57 -37
- package/extensions/context/sync.ts +139 -89
- package/extensions/context/validation.ts +37 -25
- package/extensions/effort/README.md +1 -1
- package/extensions/effort/index.ts +3 -3
- package/extensions/effort/state.ts +3 -18
- package/extensions/explore/guidance.ts +6 -47
- package/extensions/explore/index.ts +38 -53
- package/extensions/explore/{ast/read → read}/hook.ts +12 -7
- package/extensions/explore/{ast/tools → tools}/ast-search.ts +15 -19
- package/extensions/explore/{ast/tools → tools}/context.ts +16 -23
- package/extensions/explore/{ast/tools → tools}/deps.ts +11 -15
- package/extensions/explore/{ast/tools → tools}/discover.ts +15 -17
- package/extensions/explore/{ast/tools → tools}/impact.ts +20 -23
- package/extensions/explore/{ast/tools → tools}/outline.ts +21 -24
- package/extensions/explore/{ast/tools → tools}/relationships.ts +23 -32
- package/extensions/explore/{ast/tools → tools}/render.ts +1 -1
- package/extensions/explore/{ast/tools → tools}/reverse-deps.ts +11 -15
- package/extensions/explore/{ast/tools → tools}/show.ts +16 -19
- package/extensions/explore/tools/target-params.ts +9 -0
- package/extensions/footer/index.ts +75 -56
- package/extensions/handoff/index.ts +8 -30
- package/extensions/image-gen/index.ts +46 -40
- package/extensions/patch/executor.ts +190 -135
- package/extensions/patch/matcher.ts +82 -48
- package/extensions/patch/parser.ts +149 -105
- package/extensions/patch/render.ts +32 -39
- package/extensions/patch/summary.ts +30 -26
- package/extensions/ready/README.md +7 -0
- package/extensions/ready/index.ts +58 -0
- package/extensions/ready/model.ts +128 -0
- package/extensions/ready/packs.ts +272 -0
- package/extensions/ready/render.ts +445 -0
- package/extensions/ready/scan.ts +760 -0
- package/extensions/reference/panel.ts +28 -16
- package/extensions/review/index.ts +63 -51
- package/extensions/review/panel.ts +5 -34
- package/extensions/runtime-context/context.ts +30 -26
- package/extensions/script-runner/README.md +2 -2
- package/extensions/script-runner/index.ts +122 -82
- package/extensions/silent-command-runner/index.ts +38 -23
- package/extensions/subagent/agents/context-sync.md +185 -33
- package/extensions/subagent/agents/scout.md +2 -2
- package/extensions/subagent/agents.ts +137 -84
- package/extensions/subagent/cmux-dashboard.ts +39 -30
- package/extensions/subagent/index.ts +79 -59
- package/extensions/subagent/resume.ts +1 -1
- package/extensions/subagent/run.ts +304 -193
- package/extensions/subagent/runtime.ts +781 -343
- package/extensions/tau/index.ts +47 -38
- package/extensions/tau-help/help.md +14 -6
- package/extensions/tool-loader/README.md +4 -2
- package/extensions/tool-loader/index.ts +77 -52
- package/extensions/web/index.ts +6 -3
- package/extensions/web/webfetch.ts +114 -86
- package/package.json +3 -3
- package/schemas/tau.schema.json +20 -33
- package/shared/bounded-text-result.ts +1 -0
- package/shared/checkpoint-visibility.ts +9 -0
- package/shared/events.ts +28 -10
- package/shared/isolated-session.ts +71 -29
- package/shared/model-effort.ts +9 -19
- package/shared/model-fallback/index.ts +66 -41
- package/shared/settings/load.ts +45 -38
- package/shared/temporary-output-store.ts +16 -10
- package/{extensions/explore → src}/ast/adapter.ts +11 -2
- package/{extensions/explore → src}/ast/engine.ts +54 -38
- package/{extensions/explore → src}/ast/format/ast-search.ts +15 -6
- package/{extensions/explore → src}/ast/format/context.ts +3 -6
- package/src/ast/format/deps.ts +94 -0
- package/{extensions/explore → src}/ast/format/discover.ts +2 -2
- package/{extensions/explore → src}/ast/format/impact.ts +9 -11
- package/{extensions/explore → src}/ast/format/outline.ts +2 -2
- package/{extensions/explore → src}/ast/format/relationships.ts +11 -7
- package/{extensions/explore → src}/ast/format/show.ts +1 -1
- package/src/ast/format/targeted-result.ts +20 -0
- package/src/ast/grammars/c_sharp.wasm +0 -0
- package/{extensions/explore → src}/ast/grammars/manifest.json +9 -12
- package/{extensions/explore → src}/ast/grammars/manifest.ts +0 -4
- package/{extensions/explore → src}/ast/graph/file-graph.ts +210 -98
- package/{extensions/explore → src}/ast/graph/relationships.ts +285 -72
- package/{extensions/explore → src}/ast/ir.ts +6 -0
- package/src/ast/languages/csharp-file-deps.ts +90 -0
- package/{extensions/explore → src}/ast/languages/csharp.ts +9 -40
- package/src/ast/languages/dotted-index.ts +131 -0
- package/{extensions/explore → src}/ast/languages/file-dep-util.ts +22 -13
- package/src/ast/languages/fixtures/sample.cs +53 -0
- package/src/ast/languages/fixtures/sample.cs.expected.json +156 -0
- package/src/ast/languages/fixtures/sample.go +37 -0
- package/src/ast/languages/fixtures/sample.go.expected.json +96 -0
- package/src/ast/languages/fixtures/sample.java +40 -0
- package/src/ast/languages/fixtures/sample.java.expected.json +126 -0
- package/src/ast/languages/fixtures/sample.kt +31 -0
- package/src/ast/languages/fixtures/sample.kt.expected.json +134 -0
- package/src/ast/languages/fixtures/sample.md +23 -0
- package/src/ast/languages/fixtures/sample.md.expected.json +44 -0
- package/src/ast/languages/fixtures/sample.rs +54 -0
- package/src/ast/languages/fixtures/sample.rs.expected.json +178 -0
- package/src/ast/languages/fixtures/sample.swift +45 -0
- package/src/ast/languages/fixtures/sample.swift.expected.json +147 -0
- package/src/ast/languages/fixtures/sample.ts +45 -0
- package/src/ast/languages/fixtures/sample.ts.expected.json +141 -0
- package/src/ast/languages/fixtures/sample.tsx +36 -0
- package/src/ast/languages/fixtures/sample.tsx.expected.json +59 -0
- package/{extensions/explore → src}/ast/languages/go-file-deps.ts +6 -0
- package/{extensions/explore → src}/ast/languages/go.ts +21 -3
- package/{extensions/explore → src}/ast/languages/java.ts +5 -38
- package/src/ast/languages/jvm-file-deps.ts +135 -0
- package/{extensions/explore → src}/ast/languages/kotlin.ts +5 -39
- package/{extensions/explore → src}/ast/languages/rust-file-deps.ts +3 -3
- package/{extensions/explore → src}/ast/languages/rust.ts +21 -13
- package/{extensions/explore → src}/ast/languages/swift-file-deps.ts +22 -15
- package/{extensions/explore → src}/ast/languages/swift.ts +9 -39
- package/{extensions/explore → src}/ast/languages/tree.ts +47 -0
- package/{extensions/explore → src}/ast/languages/typescript-file-deps.ts +108 -0
- package/{extensions/explore → src}/ast/languages/typescript-package-surface.ts +4 -3
- package/{extensions/explore → src}/ast/languages/typescript.ts +3 -5
- package/{extensions/explore → src}/ast/markdown.ts +72 -47
- package/{extensions/explore → src}/ast/queries/ast-search.ts +164 -146
- package/{extensions/explore → src}/ast/queries/composite-target.ts +1 -1
- package/{extensions/explore → src}/ast/queries/context.ts +116 -80
- package/{extensions/explore → src}/ast/queries/discover.ts +154 -105
- package/src/ast/queries/impact.ts +291 -0
- package/{extensions/explore → src}/ast/queries/outline.ts +4 -2
- package/{extensions/explore → src}/ast/queries/show.ts +46 -42
- package/{extensions/explore → src}/ast/query.ts +1 -1
- package/{extensions/explore → src}/ast/registry.ts +1 -2
- package/{extensions/explore → src}/ast/scan.ts +1 -1
- package/src/ast/session.ts +50 -0
- package/{extensions/explore → src}/ast/slice.ts +8 -0
- package/{extensions/explore → src/ast}/traverse.ts +32 -20
- package/src/file-injection/index.ts +547 -0
- package/src/image-generation/client.ts +50 -31
- package/src/image-generation/index.ts +177 -134
- package/src/index.ts +2 -0
- package/src/tool-loading/index.ts +58 -0
- package/extensions/context/evidence.ts +0 -517
- package/extensions/context/projection.ts +0 -141
- package/extensions/context/state.ts +0 -30
- package/extensions/context/write-scope.ts +0 -109
- package/extensions/explore/ast/format/deps.ts +0 -86
- package/extensions/explore/ast/grammars/odin.wasm +0 -0
- package/extensions/explore/ast/languages/csharp-file-deps.ts +0 -189
- package/extensions/explore/ast/languages/fixtures/sample.cs +0 -17
- package/extensions/explore/ast/languages/fixtures/sample.java +0 -21
- package/extensions/explore/ast/languages/fixtures/sample.kt +0 -15
- package/extensions/explore/ast/languages/fixtures/sample.odin +0 -28
- package/extensions/explore/ast/languages/fixtures/sample.rs +0 -31
- package/extensions/explore/ast/languages/fixtures/sample.swift +0 -25
- package/extensions/explore/ast/languages/jvm-file-deps.ts +0 -217
- package/extensions/explore/ast/languages/odin-file-deps.ts +0 -175
- package/extensions/explore/ast/languages/odin.ts +0 -407
- package/extensions/explore/ast/queries/impact.ts +0 -250
- package/extensions/explore/outline-injection.ts +0 -151
- package/extensions/explore/read/autoread.ts +0 -118
- package/extensions/working-memory/README.md +0 -17
- package/extensions/working-memory/checkpoint.ts +0 -242
- package/extensions/working-memory/index.ts +0 -341
- package/extensions/working-memory/memory.ts +0 -235
- package/extensions/working-memory/render.ts +0 -185
- package/extensions/working-memory/settings.ts +0 -38
- package/extensions/working-memory/state.ts +0 -158
- package/shared/autoread.ts +0 -234
- package/shared/context-messages.ts +0 -19
- package/shared/outline-injection.ts +0 -56
- /package/{extensions/explore → src}/ast/format/composite.ts +0 -0
- /package/{extensions/explore → src}/ast/grammars/kotlin.wasm +0 -0
- /package/{extensions/explore → src}/ast/grammars/swift.wasm +0 -0
- /package/{extensions/explore → src}/ast/identity.ts +0 -0
- /package/{extensions/explore → src}/ast/package-surface.ts +0 -0
- /package/{extensions/explore/ast/read/policy.ts → src/ast/read-policy.ts} +0 -0
|
@@ -204,22 +204,86 @@ export default function subagentExtension(pi: ExtensionAPI): void {
|
|
|
204
204
|
if (!pi.getActiveTools().includes("subagent")) return undefined;
|
|
205
205
|
const discovery = await discoverAgents(ctx.cwd, ctx.isProjectTrusted());
|
|
206
206
|
warn(discovery, ctx);
|
|
207
|
-
const
|
|
207
|
+
const agents = await parentVisibleAgents(ctx, discovery);
|
|
208
|
+
const lines = agents.map((agent) => `- ${agent.name}: ${agent.description}`);
|
|
209
|
+
const scoutGuidance = agents.some((agent) => agent.name === "scout")
|
|
210
|
+
? "\n\nScout only for substantial multi-hop lookup that would flood parent context. Skip few known-path reads, single declaration lookups, or small digs with most evidence already in hand; use tools directly. When uncertain, dig yourself. Do not send code review, diagnosis, design, or other judgment work to scout."
|
|
211
|
+
: "";
|
|
208
212
|
const prompt = `## Subagents
|
|
209
|
-
Use \`subagent\` when an available agent matches
|
|
213
|
+
Use \`subagent\` only when an available agent's listed purpose matches the delegated work. Stay inside that purpose. Off-purpose calls are denied — for example, do not send code review to a lookup-only agent.
|
|
210
214
|
|
|
211
215
|
Available agents for this turn:
|
|
212
|
-
${lines.join("\n")}
|
|
216
|
+
${lines.join("\n") || "none"}
|
|
213
217
|
|
|
214
218
|
Start a fresh thread with \`agent\` and \`task\`. Continue an existing thread with \`thread\` and \`task\`. Reuse a thread when feedback or follow-up work depends on its prior reads and reasoning. Start fresh for unrelated work or when its context is stale or oversized.
|
|
215
219
|
|
|
216
220
|
Pass \`files\` when exact relevant files are already known. Tau autoreads current line-numbered snapshots into that child turn before it starts.
|
|
217
221
|
|
|
218
|
-
Delegate one focused task per call. Children do not inherit parent messages. Include exact absolute reference paths when a child must inspect a repository outside the current working directory
|
|
219
|
-
|
|
220
|
-
Scout only for substantial multi-hop lookup that would flood parent context. Skip few known-path reads, single declaration lookups, or small digs with most evidence already in hand; use tools directly. When uncertain, dig yourself.`;
|
|
222
|
+
Delegate one focused task per call. Children do not inherit parent messages. Include exact absolute reference paths when a child must inspect a repository outside the current working directory.${scoutGuidance}`;
|
|
221
223
|
return { systemPrompt: `${event.systemPrompt}\n\n${prompt}` };
|
|
222
224
|
});
|
|
225
|
+
const resolveFreshSubagentDefinition = async (ctx: ExtensionContext, agent: string) => {
|
|
226
|
+
const discovery = await discoverAgents(ctx.cwd, ctx.isProjectTrusted());
|
|
227
|
+
warn(discovery, ctx);
|
|
228
|
+
const definition = discovery.agents.get(agent);
|
|
229
|
+
const invalid = discovery.invalid.get(agent);
|
|
230
|
+
if (!definition) {
|
|
231
|
+
const reason = invalid?.map((item) => item.reason).join("; ") ?? "unknown agent";
|
|
232
|
+
const names = (await parentVisibleAgents(ctx, discovery)).map((item) => item.name).join(", ") || "none";
|
|
233
|
+
return {
|
|
234
|
+
ok: false as const,
|
|
235
|
+
phase: "discovery" as const,
|
|
236
|
+
error: `Agent ${agent} discovery failed: ${reason}. Runnable agents: ${names}`,
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
const disabled = await disabledAgentNames(ctx);
|
|
240
|
+
if (disabled.effective.has(definition.name)) {
|
|
241
|
+
const source = disabled.configured.has(definition.name) ? "in Tau settings" : "for this session";
|
|
242
|
+
return {
|
|
243
|
+
ok: false as const,
|
|
244
|
+
phase: "discovery" as const,
|
|
245
|
+
error: `Agent ${definition.name} is disabled ${source}.`,
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
if (definition.name === "context-sync") {
|
|
249
|
+
const sync = (await loadTauExtensionSettings(ctx, contextSettings)).sync;
|
|
250
|
+
if (!sync.enabled) {
|
|
251
|
+
return { ok: false as const, phase: "discovery" as const, error: "Context sync is disabled in settings." };
|
|
252
|
+
}
|
|
253
|
+
if (!sync.automation) {
|
|
254
|
+
return {
|
|
255
|
+
ok: false as const,
|
|
256
|
+
phase: "discovery" as const,
|
|
257
|
+
error: "Context-sync automation is disabled. Use /context-sync or enable extensions.context.sync.automation.",
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
return { ok: true as const, definition };
|
|
262
|
+
};
|
|
263
|
+
|
|
264
|
+
const disabledContinuationResult = async (
|
|
265
|
+
ctx: ExtensionContext,
|
|
266
|
+
threadKey: string | undefined,
|
|
267
|
+
task: string,
|
|
268
|
+
parentModel: string,
|
|
269
|
+
parentThinking: ReturnType<ExtensionAPI["getThinkingLevel"]>,
|
|
270
|
+
) => {
|
|
271
|
+
const thread = runtime.listThreads(ctx.cwd).find((item) => item.id === threadKey);
|
|
272
|
+
if (!thread) return undefined;
|
|
273
|
+
const disabled = await disabledAgentNames(ctx);
|
|
274
|
+
if (!disabled.effective.has(thread.definition.name)) return undefined;
|
|
275
|
+
const source = disabled.configured.has(thread.definition.name) ? "in Tau settings" : "for this session";
|
|
276
|
+
return failedToolResult(
|
|
277
|
+
thread.definition.name,
|
|
278
|
+
task,
|
|
279
|
+
"discovery",
|
|
280
|
+
parentModel,
|
|
281
|
+
parentThinking,
|
|
282
|
+
`Agent ${thread.definition.name} is disabled ${source}.`,
|
|
283
|
+
threadKey,
|
|
284
|
+
);
|
|
285
|
+
};
|
|
286
|
+
|
|
223
287
|
pi.registerTool(
|
|
224
288
|
defineTool<typeof params, SubagentDetails>({
|
|
225
289
|
name: "subagent",
|
|
@@ -251,24 +315,14 @@ Scout only for substantial multi-hop lookup that would flood parent context. Ski
|
|
|
251
315
|
}
|
|
252
316
|
|
|
253
317
|
if (continuing) {
|
|
254
|
-
const
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
thread.definition.name,
|
|
263
|
-
task,
|
|
264
|
-
"discovery",
|
|
265
|
-
parentModel,
|
|
266
|
-
parentThinking,
|
|
267
|
-
`Agent ${thread.definition.name} is disabled ${source}.`,
|
|
268
|
-
threadKey,
|
|
269
|
-
);
|
|
270
|
-
}
|
|
271
|
-
}
|
|
318
|
+
const disabledContinuation = await disabledContinuationResult(
|
|
319
|
+
ctx,
|
|
320
|
+
threadKey,
|
|
321
|
+
task,
|
|
322
|
+
parentModel,
|
|
323
|
+
parentThinking,
|
|
324
|
+
);
|
|
325
|
+
if (disabledContinuation) return disabledContinuation;
|
|
272
326
|
}
|
|
273
327
|
|
|
274
328
|
return runtime.execute({
|
|
@@ -291,41 +345,7 @@ Scout only for substantial multi-hop lookup that would flood parent context. Ski
|
|
|
291
345
|
],
|
|
292
346
|
details,
|
|
293
347
|
}),
|
|
294
|
-
resolveFreshDefinition:
|
|
295
|
-
const discovery = await discoverAgents(ctx.cwd, ctx.isProjectTrusted());
|
|
296
|
-
warn(discovery, ctx);
|
|
297
|
-
const definition = discovery.agents.get(agent);
|
|
298
|
-
const invalid = discovery.invalid.get(agent);
|
|
299
|
-
if (!definition) {
|
|
300
|
-
const reason = invalid?.map((item) => item.reason).join("; ") ?? "unknown agent";
|
|
301
|
-
const names =
|
|
302
|
-
(await parentVisibleAgents(ctx, discovery)).map((item) => item.name).join(", ") || "none";
|
|
303
|
-
return {
|
|
304
|
-
ok: false,
|
|
305
|
-
phase: "discovery",
|
|
306
|
-
error: `Agent ${agent} discovery failed: ${reason}. Runnable agents: ${names}`,
|
|
307
|
-
};
|
|
308
|
-
}
|
|
309
|
-
const disabled = await disabledAgentNames(ctx);
|
|
310
|
-
if (disabled.effective.has(definition.name)) {
|
|
311
|
-
const source = disabled.configured.has(definition.name) ? "in Tau settings" : "for this session";
|
|
312
|
-
return { ok: false, phase: "discovery", error: `Agent ${definition.name} is disabled ${source}.` };
|
|
313
|
-
}
|
|
314
|
-
if (definition.name === "context-sync") {
|
|
315
|
-
const sync = (await loadTauExtensionSettings(ctx, contextSettings)).sync;
|
|
316
|
-
if (!sync.enabled) {
|
|
317
|
-
return { ok: false, phase: "discovery", error: "Context sync is disabled in settings." };
|
|
318
|
-
}
|
|
319
|
-
if (!sync.automation) {
|
|
320
|
-
return {
|
|
321
|
-
ok: false,
|
|
322
|
-
phase: "discovery",
|
|
323
|
-
error: "Context-sync automation is disabled. Use /context-sync or enable extensions.context.sync.automation.",
|
|
324
|
-
};
|
|
325
|
-
}
|
|
326
|
-
}
|
|
327
|
-
return { ok: true, definition };
|
|
328
|
-
},
|
|
348
|
+
resolveFreshDefinition: () => resolveFreshSubagentDefinition(ctx, agent),
|
|
329
349
|
});
|
|
330
350
|
},
|
|
331
351
|
renderCall(args, theme, context) {
|
|
@@ -29,7 +29,7 @@ export function retainSubagentTurn(state: SubagentResumeState, record: RetainedT
|
|
|
29
29
|
};
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
function selectRetainedTurns(
|
|
33
33
|
state: SubagentResumeState,
|
|
34
34
|
optionalTokenBudget = RESUME_OPTIONAL_HISTORY_TOKENS,
|
|
35
35
|
): { records: readonly RetainedTurnRecord[]; omitted: number } {
|