@evalops/maestro 0.10.26 → 0.10.28

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.
Files changed (37) hide show
  1. package/dist/agent/transport/reusable-tool-results.d.ts +38 -0
  2. package/dist/agent/transport/reusable-tool-results.d.ts.map +1 -0
  3. package/dist/agent/transport/reusable-tool-results.js +432 -0
  4. package/dist/agent/transport/reusable-tool-results.js.map +1 -0
  5. package/dist/agent/transport.d.ts +1 -1
  6. package/dist/agent/transport.d.ts.map +1 -1
  7. package/dist/agent/transport.js +1 -430
  8. package/dist/agent/transport.js.map +1 -1
  9. package/dist/audit/logger.d.ts +2 -2
  10. package/dist/cli/commands/run.d.ts +15 -0
  11. package/dist/cli/commands/run.d.ts.map +1 -1
  12. package/dist/cli/commands/run.js +35 -0
  13. package/dist/cli/commands/run.js.map +1 -1
  14. package/dist/cli.js +739 -630
  15. package/dist/node_modules/@evalops/contracts/package.json +1 -1
  16. package/dist/node_modules/@evalops/tui/package.json +1 -1
  17. package/dist/platform/agent-registry-client.d.ts +6 -0
  18. package/dist/platform/agent-registry-client.d.ts.map +1 -1
  19. package/dist/platform/agent-registry-client.js +6 -0
  20. package/dist/platform/agent-registry-client.js.map +1 -1
  21. package/dist/server/agent-runtime-ledger.d.ts +5 -0
  22. package/dist/server/agent-runtime-ledger.d.ts.map +1 -1
  23. package/dist/server/agent-runtime-ledger.js +63 -0
  24. package/dist/server/agent-runtime-ledger.js.map +1 -1
  25. package/dist/server/headless-runtime/broker.d.ts +81 -0
  26. package/dist/server/headless-runtime/broker.d.ts.map +1 -0
  27. package/dist/server/headless-runtime/broker.js +201 -0
  28. package/dist/server/headless-runtime/broker.js.map +1 -0
  29. package/dist/server/headless-runtime-service.d.ts +3 -37
  30. package/dist/server/headless-runtime-service.d.ts.map +1 -1
  31. package/dist/server/headless-runtime-service.js +1 -199
  32. package/dist/server/headless-runtime-service.js.map +1 -1
  33. package/dist/session/manager.d.ts +1 -0
  34. package/dist/session/manager.d.ts.map +1 -1
  35. package/dist/session/manager.js.map +1 -1
  36. package/dist/version.json +2 -2
  37. package/package.json +1 -1
@@ -0,0 +1,38 @@
1
+ import type { AgentTool, ToolCall, ToolResultMessage } from "../types.js";
2
+ import { type PlatformToolExecutionBridge, type ToolExecutionBridgePlan } from "./tool-execution-bridge.js";
3
+ import type { PendingExecution, ToolExecutionOutcome } from "./tool-update-queue.js";
4
+ export type ReusableToolResultEntry = {
5
+ message: ToolResultMessage;
6
+ };
7
+ export type ReusableToolResultCacheGeneration = {
8
+ value: number;
9
+ };
10
+ export declare function computeReusableToolResultSnapshot(cwd: string): string | undefined;
11
+ export type ToolDefinitionLookup = ReadonlyMap<string, AgentTool> | AgentTool[];
12
+ export type ToolMetadataCache = {
13
+ readonly definitions: ReadonlyMap<string, AgentTool>;
14
+ readonly reusableToolResultCwd: string;
15
+ lookupCount: number;
16
+ get(toolName: string): AgentTool | undefined;
17
+ };
18
+ export declare function getReusableToolRegistrySignature(tools: readonly AgentTool[]): string;
19
+ export declare function createToolMetadataCache(tools: AgentTool[], reusableToolResultCwd?: string): ToolMetadataCache;
20
+ export declare function getReusableToolResultCacheKey(toolCall: ToolCall, tools: ToolDefinitionLookup | ToolMetadataCache): string | undefined;
21
+ export declare function cloneToolOutcomeForCall(outcome: ToolExecutionOutcome, toolCall: ToolCall, timestamp: number): ToolExecutionOutcome;
22
+ export declare function resolvePlatformToolExecutionBridge(option: PlatformToolExecutionBridge | false | undefined): PlatformToolExecutionBridge | undefined;
23
+ export declare function recordReusableToolExecutionBridgeOutput({ bridge, plan, outcome, durationMs, signal, }: {
24
+ bridge?: PlatformToolExecutionBridge;
25
+ plan?: ToolExecutionBridgePlan;
26
+ outcome: ToolExecutionOutcome;
27
+ durationMs: number;
28
+ signal?: AbortSignal;
29
+ }): Promise<ToolExecutionOutcome>;
30
+ export declare function hasReusableToolResultState(cacheKey: string, cache: Map<string, ReusableToolResultEntry>, pending: Map<string, Promise<ToolExecutionOutcome>>, policyCheckedKeys: Set<string>, pendingSafetyChecks: Map<string, number>): boolean;
31
+ export declare function incrementPendingReusableToolSafetyCheck(cacheKey: string | undefined, pendingSafetyChecks: Map<string, number>): void;
32
+ export declare function decrementPendingReusableToolSafetyCheck(cacheKey: string | undefined, pendingSafetyChecks: Map<string, number>): void;
33
+ export declare function clearReusableToolResultState(cache: Map<string, ReusableToolResultEntry>, pending: Map<string, Promise<ToolExecutionOutcome>>, policyCheckedKeys: Set<string>, pendingSafetyChecks: Map<string, number>, cacheGeneration: ReusableToolResultCacheGeneration): void;
34
+ export declare function clearRunScopedReusableToolResultState(cache: Map<string, ReusableToolResultEntry>, pending: Map<string, Promise<ToolExecutionOutcome>>, policyCheckedKeys: Set<string>, pendingSafetyChecks: Map<string, number>, cacheGeneration: ReusableToolResultCacheGeneration): void;
35
+ export declare function invalidateReusableToolResultsAfterMutation(toolCall: ToolCall, tools: ToolDefinitionLookup | ToolMetadataCache, cache: Map<string, ReusableToolResultEntry>, pending: Map<string, Promise<ToolExecutionOutcome>>, policyCheckedKeys: Set<string>, pendingSafetyChecks: Map<string, number>, cacheGeneration: ReusableToolResultCacheGeneration): void;
36
+ export declare function hasPendingMutatingToolExecution(pendingExecutions: readonly PendingExecution[], tools: ToolDefinitionLookup | ToolMetadataCache): boolean;
37
+ export declare function trackReusableToolResult(cacheKey: string, executionPromise: Promise<ToolExecutionOutcome>, cache: Map<string, ReusableToolResultEntry>, pending: Map<string, Promise<ToolExecutionOutcome>>, policyCheckedKeys?: Set<string>, cacheGeneration?: ReusableToolResultCacheGeneration): Promise<ToolExecutionOutcome>;
38
+ //# sourceMappingURL=reusable-tool-results.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reusable-tool-results.d.ts","sourceRoot":"","sources":["../../../src/agent/transport/reusable-tool-results.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,432 @@
1
+ import { execFileSync } from "node:child_process";
2
+ import { createHash } from "node:crypto";
3
+ import { readFileSync } from "node:fs";
4
+ import { resolve as resolvePath } from "node:path";
5
+ import { isReadOnlyTool } from "../../tools/parallel-execution.js";
6
+ import { stableStringify } from "./stable-stringify.js";
7
+ import { buildObservedResultMetadata, getDefaultPlatformToolExecutionBridge, } from "./tool-execution-bridge.js";
8
+ const REUSABLE_TOOL_RESULT_GIT_SNAPSHOT_TIMEOUT_MS = 5_000;
9
+ function hashReusableToolResultSnapshot(value) {
10
+ return createHash("sha256").update(value).digest("hex");
11
+ }
12
+ function readGitSnapshotBuffer(cwd, args) {
13
+ return execFileSync("git", args, {
14
+ cwd,
15
+ stdio: ["ignore", "pipe", "ignore"],
16
+ timeout: REUSABLE_TOOL_RESULT_GIT_SNAPSHOT_TIMEOUT_MS,
17
+ });
18
+ }
19
+ function readGitSnapshotPart(cwd, args) {
20
+ return readGitSnapshotBuffer(cwd, args).toString("utf8").trim();
21
+ }
22
+ function hashGitSnapshotPart(cwd, args) {
23
+ return hashReusableToolResultSnapshot(readGitSnapshotBuffer(cwd, args));
24
+ }
25
+ function hashUntrackedGitFiles(root) {
26
+ const files = readGitSnapshotBuffer(root, [
27
+ "ls-files",
28
+ "--others",
29
+ "--exclude-standard",
30
+ "-z",
31
+ ])
32
+ .toString("utf8")
33
+ .split("\0")
34
+ .filter(Boolean)
35
+ .sort();
36
+ const hash = createHash("sha256");
37
+ for (const file of files) {
38
+ hash.update(file);
39
+ hash.update("\0");
40
+ hash.update(readFileSync(resolvePath(root, file)));
41
+ hash.update("\0");
42
+ }
43
+ return hash.digest("hex");
44
+ }
45
+ function hasDirtyGitSubmodules(root) {
46
+ try {
47
+ return (readGitSnapshotPart(root, [
48
+ "submodule",
49
+ "foreach",
50
+ "--recursive",
51
+ "--quiet",
52
+ "git status --porcelain=v1 --untracked-files=all",
53
+ ]).length > 0);
54
+ }
55
+ catch {
56
+ return true;
57
+ }
58
+ }
59
+ export function computeReusableToolResultSnapshot(cwd) {
60
+ try {
61
+ const root = readGitSnapshotPart(cwd, ["rev-parse", "--show-toplevel"]);
62
+ const head = readGitSnapshotPart(cwd, ["rev-parse", "--verify", "HEAD"]);
63
+ const status = readGitSnapshotPart(root, [
64
+ "status",
65
+ "--porcelain=v1",
66
+ "--untracked-files=all",
67
+ ]);
68
+ if (hasDirtyGitSubmodules(root)) {
69
+ return undefined;
70
+ }
71
+ const unstagedDiff = hashGitSnapshotPart(root, [
72
+ "diff",
73
+ "--no-ext-diff",
74
+ "--binary",
75
+ ]);
76
+ const stagedDiff = hashGitSnapshotPart(root, [
77
+ "diff",
78
+ "--cached",
79
+ "--no-ext-diff",
80
+ "--binary",
81
+ ]);
82
+ const untracked = hashUntrackedGitFiles(root);
83
+ return `git:${hashReusableToolResultSnapshot(`${root}\n${head}\n${status}\n${unstagedDiff}\n${stagedDiff}\n${untracked}`)}`;
84
+ }
85
+ catch {
86
+ return undefined;
87
+ }
88
+ }
89
+ const GIT_SNAPSHOT_REUSABLE_TOOL_NAMES = new Set([
90
+ "read",
91
+ "ls",
92
+ "list",
93
+ "glob",
94
+ "find",
95
+ "grep",
96
+ "search",
97
+ "parallel_ripgrep",
98
+ "diff",
99
+ "status",
100
+ ]);
101
+ const REPO_PATH_ARGUMENTS_BY_TOOL = new Map([
102
+ ["read", ["path", "file_path"]],
103
+ ["ls", ["path", "dir", "directory"]],
104
+ ["list", ["path", "dir", "directory"]],
105
+ ["glob", ["path", "cwd", "root", "glob"]],
106
+ ["find", ["path", "cwd", "root", "glob"]],
107
+ ["grep", ["path", "paths", "glob"]],
108
+ ["search", ["path", "paths", "glob"]],
109
+ ["parallel_ripgrep", ["path", "paths", "glob"]],
110
+ ["diff", ["path", "paths", "cwd"]],
111
+ ["status", ["path", "paths", "cwd"]],
112
+ ]);
113
+ const GIT_SCOPED_REUSABLE_TOOL_RESULT_KEY_PREFIX = "git:";
114
+ const RUN_SCOPED_REUSABLE_TOOL_RESULT_KEY_PREFIX = "run:";
115
+ // Keep network-backed READ_ONLY_TOOLS out of reusable caches even if metadata is absent.
116
+ const NETWORK_BACKED_REUSABLE_TOOL_DENYLIST = new Set(["extract_document"]);
117
+ const REQUIRED_REPO_PATH_ARGUMENT_TOOLS = new Set(["read", "ls", "list"]);
118
+ function collectStringValues(value) {
119
+ if (typeof value === "string") {
120
+ return [value];
121
+ }
122
+ if (Array.isArray(value)) {
123
+ return value.flatMap((item) => collectStringValues(item));
124
+ }
125
+ return [];
126
+ }
127
+ function isRepoRelativePathArgument(value) {
128
+ const trimmed = value.trim();
129
+ if (trimmed.length === 0) {
130
+ return false;
131
+ }
132
+ if (trimmed.startsWith("/") ||
133
+ trimmed.startsWith("~") ||
134
+ trimmed.startsWith("\\\\") ||
135
+ /^[A-Za-z]:[\\/]/.test(trimmed)) {
136
+ return false;
137
+ }
138
+ return !trimmed.split(/[\\/]+/).includes("..");
139
+ }
140
+ function isGitIgnoredRepoPath(cwd, repoPath) {
141
+ try {
142
+ readGitSnapshotPart(cwd, ["check-ignore", "--quiet", "--", repoPath]);
143
+ return true;
144
+ }
145
+ catch (error) {
146
+ if (typeof error === "object" &&
147
+ error !== null &&
148
+ "status" in error &&
149
+ error.status === 1) {
150
+ return false;
151
+ }
152
+ return true;
153
+ }
154
+ }
155
+ function isToolCallIncludingIgnoredPaths(toolCall) {
156
+ const toolName = toolCall.name.toLowerCase();
157
+ const args = toolCall.arguments;
158
+ if (!args || typeof args !== "object" || Array.isArray(args)) {
159
+ return false;
160
+ }
161
+ const record = args;
162
+ if (toolName === "status") {
163
+ return record.includeIgnored === true || record.include_ignored === true;
164
+ }
165
+ if (toolName === "search" || toolName === "parallel_ripgrep") {
166
+ return record.useGitIgnore === false || record.use_git_ignore === false;
167
+ }
168
+ return false;
169
+ }
170
+ function hasRepoScopedReusableArguments(toolCall, cwd) {
171
+ const toolName = toolCall.name.toLowerCase();
172
+ if (isToolCallIncludingIgnoredPaths(toolCall)) {
173
+ return false;
174
+ }
175
+ const argumentNames = REPO_PATH_ARGUMENTS_BY_TOOL.get(toolName) ?? [];
176
+ if (argumentNames.length === 0) {
177
+ return true;
178
+ }
179
+ const args = toolCall.arguments;
180
+ if (!args || typeof args !== "object" || Array.isArray(args)) {
181
+ return !REQUIRED_REPO_PATH_ARGUMENT_TOOLS.has(toolName);
182
+ }
183
+ const pathValues = argumentNames.flatMap((name) => collectStringValues(args[name]));
184
+ if (pathValues.length === 0 &&
185
+ REQUIRED_REPO_PATH_ARGUMENT_TOOLS.has(toolName)) {
186
+ return false;
187
+ }
188
+ return pathValues.every((pathValue) => isRepoRelativePathArgument(pathValue) &&
189
+ !isGitIgnoredRepoPath(cwd, pathValue));
190
+ }
191
+ function isGitSnapshotReusableToolCall(tool, toolCall, cwd) {
192
+ if (tool.source !== undefined ||
193
+ tool.annotations?.openWorldHint === true ||
194
+ tool.executionLocation === "client") {
195
+ return false;
196
+ }
197
+ if (!GIT_SNAPSHOT_REUSABLE_TOOL_NAMES.has(tool.name.toLowerCase())) {
198
+ return false;
199
+ }
200
+ if (!isReadOnlyTool(tool.name, tool.annotations, tool.source)) {
201
+ return false;
202
+ }
203
+ return hasRepoScopedReusableArguments(toolCall, cwd);
204
+ }
205
+ const reusableToolDefinitionIdentities = new WeakMap();
206
+ let reusableToolDefinitionIdentityCounter = 0;
207
+ function getReusableToolDefinitionIdentity(value) {
208
+ const existing = reusableToolDefinitionIdentities.get(value);
209
+ if (existing !== undefined) {
210
+ return existing;
211
+ }
212
+ reusableToolDefinitionIdentityCounter += 1;
213
+ reusableToolDefinitionIdentities.set(value, reusableToolDefinitionIdentityCounter);
214
+ return reusableToolDefinitionIdentityCounter;
215
+ }
216
+ function getReusableToolFunctionIdentity(value) {
217
+ return typeof value === "function"
218
+ ? getReusableToolDefinitionIdentity(value)
219
+ : undefined;
220
+ }
221
+ export function getReusableToolRegistrySignature(tools) {
222
+ return stableStringify(tools.map((tool) => ({
223
+ allowedCallers: tool.allowedCallers,
224
+ annotations: tool.annotations,
225
+ deferApiDefinition: tool.deferApiDefinition,
226
+ description: tool.description,
227
+ executeIdentity: getReusableToolFunctionIdentity(tool.execute),
228
+ executionLocation: tool.executionLocation,
229
+ getActivityDescriptionIdentity: getReusableToolFunctionIdentity(tool.getActivityDescription),
230
+ getDisplayNameIdentity: getReusableToolFunctionIdentity(tool.getDisplayName),
231
+ getToolUseSummaryIdentity: getReusableToolFunctionIdentity(tool.getToolUseSummary),
232
+ inputExamples: tool.inputExamples,
233
+ label: tool.label,
234
+ maxRetries: tool.maxRetries,
235
+ name: tool.name,
236
+ parameters: tool.parameters,
237
+ retryDelayMs: tool.retryDelayMs,
238
+ shouldRetryIdentity: getReusableToolFunctionIdentity(tool.shouldRetry),
239
+ source: tool.source,
240
+ toolIdentity: getReusableToolDefinitionIdentity(tool),
241
+ toolType: tool.toolType,
242
+ })));
243
+ }
244
+ export function createToolMetadataCache(tools, reusableToolResultCwd = process.cwd()) {
245
+ const definitions = new Map(tools.map((tool) => [tool.name, tool]));
246
+ return {
247
+ definitions,
248
+ reusableToolResultCwd,
249
+ lookupCount: 0,
250
+ get(toolName) {
251
+ this.lookupCount += 1;
252
+ return definitions.get(toolName);
253
+ },
254
+ };
255
+ }
256
+ function getToolDefinition(lookup, toolName) {
257
+ if ("get" in lookup && !Array.isArray(lookup)) {
258
+ return lookup.get(toolName);
259
+ }
260
+ return lookup.find((candidate) => candidate.name === toolName);
261
+ }
262
+ export function getReusableToolResultCacheKey(toolCall, tools) {
263
+ const tool = getToolDefinition(tools, toolCall.name);
264
+ const cwd = "reusableToolResultCwd" in tools
265
+ ? tools.reusableToolResultCwd
266
+ : process.cwd();
267
+ if (!tool || tool.annotations?.destructiveHint === true) {
268
+ return undefined;
269
+ }
270
+ if (!isReadOnlyTool(tool.name, tool.annotations, tool.source)) {
271
+ return undefined;
272
+ }
273
+ const toolName = tool.name.toLowerCase();
274
+ const cacheKey = `${toolCall.name}:${stableStringify(toolCall.arguments)}`;
275
+ if (NETWORK_BACKED_REUSABLE_TOOL_DENYLIST.has(toolName)) {
276
+ return undefined;
277
+ }
278
+ if (isGitSnapshotReusableToolCall(tool, toolCall, cwd)) {
279
+ return `${GIT_SCOPED_REUSABLE_TOOL_RESULT_KEY_PREFIX}${cacheKey}`;
280
+ }
281
+ if (tool.source !== undefined ||
282
+ GIT_SNAPSHOT_REUSABLE_TOOL_NAMES.has(toolName) ||
283
+ tool.annotations?.openWorldHint === true ||
284
+ tool.executionLocation === "client") {
285
+ return undefined;
286
+ }
287
+ return `${RUN_SCOPED_REUSABLE_TOOL_RESULT_KEY_PREFIX}${cacheKey}`;
288
+ }
289
+ function isReadOnlyToolCallForCacheInvalidation(toolCall, tools) {
290
+ const tool = getToolDefinition(tools, toolCall.name);
291
+ return tool
292
+ ? isReadOnlyTool(tool.name, tool.annotations, tool.source)
293
+ : false;
294
+ }
295
+ function cloneToolResultForCache(message) {
296
+ return {
297
+ ...message,
298
+ content: message.content.map((item) => ({ ...item })),
299
+ };
300
+ }
301
+ export function cloneToolOutcomeForCall(outcome, toolCall, timestamp) {
302
+ return {
303
+ message: {
304
+ ...outcome.message,
305
+ toolCallId: toolCall.id,
306
+ toolName: toolCall.name,
307
+ content: outcome.message.content.map((item) => ({ ...item })),
308
+ timestamp,
309
+ },
310
+ isError: outcome.isError,
311
+ };
312
+ }
313
+ export function resolvePlatformToolExecutionBridge(option) {
314
+ if (option === false) {
315
+ return undefined;
316
+ }
317
+ return option ?? getDefaultPlatformToolExecutionBridge();
318
+ }
319
+ export async function recordReusableToolExecutionBridgeOutput({ bridge, plan, outcome, durationMs, signal, }) {
320
+ if (!bridge || !plan) {
321
+ return outcome;
322
+ }
323
+ const observed = plan.kind === "observe"
324
+ ? await bridge.recordObservation(plan, outcome.message, signal)
325
+ : undefined;
326
+ const governedOutput = plan.kind === "governed"
327
+ ? await bridge.recordGovernedOutput(plan, outcome.message, durationMs, signal)
328
+ : undefined;
329
+ return {
330
+ ...outcome,
331
+ ...buildObservedResultMetadata(plan, observed ?? governedOutput),
332
+ };
333
+ }
334
+ export function hasReusableToolResultState(cacheKey, cache, pending, policyCheckedKeys, pendingSafetyChecks) {
335
+ return (cache.has(cacheKey) ||
336
+ pending.has(cacheKey) ||
337
+ policyCheckedKeys.has(cacheKey) ||
338
+ (pendingSafetyChecks.get(cacheKey) ?? 0) > 0);
339
+ }
340
+ export function incrementPendingReusableToolSafetyCheck(cacheKey, pendingSafetyChecks) {
341
+ if (!cacheKey) {
342
+ return;
343
+ }
344
+ pendingSafetyChecks.set(cacheKey, (pendingSafetyChecks.get(cacheKey) ?? 0) + 1);
345
+ }
346
+ export function decrementPendingReusableToolSafetyCheck(cacheKey, pendingSafetyChecks) {
347
+ if (!cacheKey) {
348
+ return;
349
+ }
350
+ const nextCount = (pendingSafetyChecks.get(cacheKey) ?? 0) - 1;
351
+ if (nextCount <= 0) {
352
+ pendingSafetyChecks.delete(cacheKey);
353
+ return;
354
+ }
355
+ pendingSafetyChecks.set(cacheKey, nextCount);
356
+ }
357
+ export function clearReusableToolResultState(cache, pending, policyCheckedKeys, pendingSafetyChecks, cacheGeneration) {
358
+ cache.clear();
359
+ pending.clear();
360
+ policyCheckedKeys.clear();
361
+ pendingSafetyChecks.clear();
362
+ cacheGeneration.value += 1;
363
+ }
364
+ export function clearRunScopedReusableToolResultState(cache, pending, policyCheckedKeys, pendingSafetyChecks, cacheGeneration) {
365
+ let cleared = false;
366
+ for (const key of cache.keys()) {
367
+ if (key.startsWith(RUN_SCOPED_REUSABLE_TOOL_RESULT_KEY_PREFIX)) {
368
+ cache.delete(key);
369
+ cleared = true;
370
+ }
371
+ }
372
+ for (const key of pending.keys()) {
373
+ if (key.startsWith(RUN_SCOPED_REUSABLE_TOOL_RESULT_KEY_PREFIX)) {
374
+ pending.delete(key);
375
+ cleared = true;
376
+ }
377
+ }
378
+ for (const key of policyCheckedKeys) {
379
+ if (key.startsWith(RUN_SCOPED_REUSABLE_TOOL_RESULT_KEY_PREFIX)) {
380
+ policyCheckedKeys.delete(key);
381
+ cleared = true;
382
+ }
383
+ }
384
+ for (const key of pendingSafetyChecks.keys()) {
385
+ if (key.startsWith(RUN_SCOPED_REUSABLE_TOOL_RESULT_KEY_PREFIX)) {
386
+ pendingSafetyChecks.delete(key);
387
+ cleared = true;
388
+ }
389
+ }
390
+ if (cleared) {
391
+ cacheGeneration.value += 1;
392
+ }
393
+ }
394
+ export function invalidateReusableToolResultsAfterMutation(toolCall, tools, cache, pending, policyCheckedKeys, pendingSafetyChecks, cacheGeneration) {
395
+ if (isReadOnlyToolCallForCacheInvalidation(toolCall, tools)) {
396
+ return;
397
+ }
398
+ clearReusableToolResultState(cache, pending, policyCheckedKeys, pendingSafetyChecks, cacheGeneration);
399
+ }
400
+ export function hasPendingMutatingToolExecution(pendingExecutions, tools) {
401
+ return pendingExecutions.some((execution) => !isReadOnlyToolCallForCacheInvalidation(execution.toolCall, tools));
402
+ }
403
+ export function trackReusableToolResult(cacheKey, executionPromise, cache, pending, policyCheckedKeys, cacheGeneration) {
404
+ const trackedGeneration = cacheGeneration?.value;
405
+ const trackedPromise = executionPromise
406
+ .then((outcome) => {
407
+ if (!outcome.isError &&
408
+ outcome.message.isError !== true &&
409
+ (cacheGeneration === undefined ||
410
+ cacheGeneration.value === trackedGeneration)) {
411
+ cache.set(cacheKey, {
412
+ message: cloneToolResultForCache(outcome.message),
413
+ });
414
+ }
415
+ else {
416
+ policyCheckedKeys?.delete(cacheKey);
417
+ }
418
+ return outcome;
419
+ })
420
+ .catch((error) => {
421
+ policyCheckedKeys?.delete(cacheKey);
422
+ throw error;
423
+ })
424
+ .finally(() => {
425
+ if (pending.get(cacheKey) === trackedPromise) {
426
+ pending.delete(cacheKey);
427
+ }
428
+ });
429
+ pending.set(cacheKey, trackedPromise);
430
+ return trackedPromise;
431
+ }
432
+ //# sourceMappingURL=reusable-tool-results.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reusable-tool-results.js","sourceRoot":"","sources":["../../../src/agent/transport/reusable-tool-results.ts"],"names":[],"mappings":"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","sourcesContent":["import { execFileSync } from \"node:child_process\";\nimport { createHash } from \"node:crypto\";\nimport { readFileSync } from \"node:fs\";\nimport { resolve as resolvePath } from \"node:path\";\nimport { isReadOnlyTool } from \"../../tools/parallel-execution.js\";\nimport type { AgentTool, ToolCall, ToolResultMessage } from \"../types.js\";\nimport { stableStringify } from \"./stable-stringify.js\";\nimport {\n\ttype ObserveToolExecutionPlan,\n\ttype PlatformToolExecutionBridge,\n\ttype ToolExecutionBridgePlan,\n\tbuildObservedResultMetadata,\n\tgetDefaultPlatformToolExecutionBridge,\n} from \"./tool-execution-bridge.js\";\nimport type {\n\tPendingExecution,\n\tToolExecutionOutcome,\n} from \"./tool-update-queue.js\";\n\nconst REUSABLE_TOOL_RESULT_GIT_SNAPSHOT_TIMEOUT_MS = 5_000;\n\nexport type ReusableToolResultEntry = {\n\tmessage: ToolResultMessage;\n};\n\nexport type ReusableToolResultCacheGeneration = {\n\tvalue: number;\n};\n\nfunction hashReusableToolResultSnapshot(value: string | Buffer): string {\n\treturn createHash(\"sha256\").update(value).digest(\"hex\");\n}\n\nfunction readGitSnapshotBuffer(cwd: string, args: string[]): Buffer {\n\treturn execFileSync(\"git\", args, {\n\t\tcwd,\n\t\tstdio: [\"ignore\", \"pipe\", \"ignore\"],\n\t\ttimeout: REUSABLE_TOOL_RESULT_GIT_SNAPSHOT_TIMEOUT_MS,\n\t});\n}\n\nfunction readGitSnapshotPart(cwd: string, args: string[]): string {\n\treturn readGitSnapshotBuffer(cwd, args).toString(\"utf8\").trim();\n}\n\nfunction hashGitSnapshotPart(cwd: string, args: string[]): string {\n\treturn hashReusableToolResultSnapshot(readGitSnapshotBuffer(cwd, args));\n}\n\nfunction hashUntrackedGitFiles(root: string): string {\n\tconst files = readGitSnapshotBuffer(root, [\n\t\t\"ls-files\",\n\t\t\"--others\",\n\t\t\"--exclude-standard\",\n\t\t\"-z\",\n\t])\n\t\t.toString(\"utf8\")\n\t\t.split(\"\\0\")\n\t\t.filter(Boolean)\n\t\t.sort();\n\tconst hash = createHash(\"sha256\");\n\tfor (const file of files) {\n\t\thash.update(file);\n\t\thash.update(\"\\0\");\n\t\thash.update(readFileSync(resolvePath(root, file)));\n\t\thash.update(\"\\0\");\n\t}\n\treturn hash.digest(\"hex\");\n}\n\nfunction hasDirtyGitSubmodules(root: string): boolean {\n\ttry {\n\t\treturn (\n\t\t\treadGitSnapshotPart(root, [\n\t\t\t\t\"submodule\",\n\t\t\t\t\"foreach\",\n\t\t\t\t\"--recursive\",\n\t\t\t\t\"--quiet\",\n\t\t\t\t\"git status --porcelain=v1 --untracked-files=all\",\n\t\t\t]).length > 0\n\t\t);\n\t} catch {\n\t\treturn true;\n\t}\n}\n\nexport function computeReusableToolResultSnapshot(\n\tcwd: string,\n): string | undefined {\n\ttry {\n\t\tconst root = readGitSnapshotPart(cwd, [\"rev-parse\", \"--show-toplevel\"]);\n\t\tconst head = readGitSnapshotPart(cwd, [\"rev-parse\", \"--verify\", \"HEAD\"]);\n\t\tconst status = readGitSnapshotPart(root, [\n\t\t\t\"status\",\n\t\t\t\"--porcelain=v1\",\n\t\t\t\"--untracked-files=all\",\n\t\t]);\n\t\tif (hasDirtyGitSubmodules(root)) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst unstagedDiff = hashGitSnapshotPart(root, [\n\t\t\t\"diff\",\n\t\t\t\"--no-ext-diff\",\n\t\t\t\"--binary\",\n\t\t]);\n\t\tconst stagedDiff = hashGitSnapshotPart(root, [\n\t\t\t\"diff\",\n\t\t\t\"--cached\",\n\t\t\t\"--no-ext-diff\",\n\t\t\t\"--binary\",\n\t\t]);\n\t\tconst untracked = hashUntrackedGitFiles(root);\n\t\treturn `git:${hashReusableToolResultSnapshot(\n\t\t\t`${root}\\n${head}\\n${status}\\n${unstagedDiff}\\n${stagedDiff}\\n${untracked}`,\n\t\t)}`;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nconst GIT_SNAPSHOT_REUSABLE_TOOL_NAMES = new Set([\n\t\"read\",\n\t\"ls\",\n\t\"list\",\n\t\"glob\",\n\t\"find\",\n\t\"grep\",\n\t\"search\",\n\t\"parallel_ripgrep\",\n\t\"diff\",\n\t\"status\",\n]);\n\nconst REPO_PATH_ARGUMENTS_BY_TOOL = new Map<string, string[]>([\n\t[\"read\", [\"path\", \"file_path\"]],\n\t[\"ls\", [\"path\", \"dir\", \"directory\"]],\n\t[\"list\", [\"path\", \"dir\", \"directory\"]],\n\t[\"glob\", [\"path\", \"cwd\", \"root\", \"glob\"]],\n\t[\"find\", [\"path\", \"cwd\", \"root\", \"glob\"]],\n\t[\"grep\", [\"path\", \"paths\", \"glob\"]],\n\t[\"search\", [\"path\", \"paths\", \"glob\"]],\n\t[\"parallel_ripgrep\", [\"path\", \"paths\", \"glob\"]],\n\t[\"diff\", [\"path\", \"paths\", \"cwd\"]],\n\t[\"status\", [\"path\", \"paths\", \"cwd\"]],\n]);\n\nconst GIT_SCOPED_REUSABLE_TOOL_RESULT_KEY_PREFIX = \"git:\";\nconst RUN_SCOPED_REUSABLE_TOOL_RESULT_KEY_PREFIX = \"run:\";\n// Keep network-backed READ_ONLY_TOOLS out of reusable caches even if metadata is absent.\nconst NETWORK_BACKED_REUSABLE_TOOL_DENYLIST = new Set([\"extract_document\"]);\n\nconst REQUIRED_REPO_PATH_ARGUMENT_TOOLS = new Set([\"read\", \"ls\", \"list\"]);\n\nfunction collectStringValues(value: unknown): string[] {\n\tif (typeof value === \"string\") {\n\t\treturn [value];\n\t}\n\tif (Array.isArray(value)) {\n\t\treturn value.flatMap((item) => collectStringValues(item));\n\t}\n\treturn [];\n}\n\nfunction isRepoRelativePathArgument(value: string): boolean {\n\tconst trimmed = value.trim();\n\tif (trimmed.length === 0) {\n\t\treturn false;\n\t}\n\tif (\n\t\ttrimmed.startsWith(\"/\") ||\n\t\ttrimmed.startsWith(\"~\") ||\n\t\ttrimmed.startsWith(\"\\\\\\\\\") ||\n\t\t/^[A-Za-z]:[\\\\/]/.test(trimmed)\n\t) {\n\t\treturn false;\n\t}\n\treturn !trimmed.split(/[\\\\/]+/).includes(\"..\");\n}\n\nfunction isGitIgnoredRepoPath(cwd: string, repoPath: string): boolean {\n\ttry {\n\t\treadGitSnapshotPart(cwd, [\"check-ignore\", \"--quiet\", \"--\", repoPath]);\n\t\treturn true;\n\t} catch (error) {\n\t\tif (\n\t\t\ttypeof error === \"object\" &&\n\t\t\terror !== null &&\n\t\t\t\"status\" in error &&\n\t\t\terror.status === 1\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n}\n\nfunction isToolCallIncludingIgnoredPaths(toolCall: ToolCall): boolean {\n\tconst toolName = toolCall.name.toLowerCase();\n\tconst args = toolCall.arguments;\n\tif (!args || typeof args !== \"object\" || Array.isArray(args)) {\n\t\treturn false;\n\t}\n\tconst record = args as Record<string, unknown>;\n\tif (toolName === \"status\") {\n\t\treturn record.includeIgnored === true || record.include_ignored === true;\n\t}\n\tif (toolName === \"search\" || toolName === \"parallel_ripgrep\") {\n\t\treturn record.useGitIgnore === false || record.use_git_ignore === false;\n\t}\n\treturn false;\n}\n\nfunction hasRepoScopedReusableArguments(\n\ttoolCall: ToolCall,\n\tcwd: string,\n): boolean {\n\tconst toolName = toolCall.name.toLowerCase();\n\tif (isToolCallIncludingIgnoredPaths(toolCall)) {\n\t\treturn false;\n\t}\n\tconst argumentNames = REPO_PATH_ARGUMENTS_BY_TOOL.get(toolName) ?? [];\n\tif (argumentNames.length === 0) {\n\t\treturn true;\n\t}\n\tconst args = toolCall.arguments;\n\tif (!args || typeof args !== \"object\" || Array.isArray(args)) {\n\t\treturn !REQUIRED_REPO_PATH_ARGUMENT_TOOLS.has(toolName);\n\t}\n\tconst pathValues = argumentNames.flatMap((name) =>\n\t\tcollectStringValues((args as Record<string, unknown>)[name]),\n\t);\n\tif (\n\t\tpathValues.length === 0 &&\n\t\tREQUIRED_REPO_PATH_ARGUMENT_TOOLS.has(toolName)\n\t) {\n\t\treturn false;\n\t}\n\treturn pathValues.every(\n\t\t(pathValue) =>\n\t\t\tisRepoRelativePathArgument(pathValue) &&\n\t\t\t!isGitIgnoredRepoPath(cwd, pathValue),\n\t);\n}\n\nfunction isGitSnapshotReusableToolCall(\n\ttool: AgentTool,\n\ttoolCall: ToolCall,\n\tcwd: string,\n): boolean {\n\tif (\n\t\ttool.source !== undefined ||\n\t\ttool.annotations?.openWorldHint === true ||\n\t\ttool.executionLocation === \"client\"\n\t) {\n\t\treturn false;\n\t}\n\tif (!GIT_SNAPSHOT_REUSABLE_TOOL_NAMES.has(tool.name.toLowerCase())) {\n\t\treturn false;\n\t}\n\tif (!isReadOnlyTool(tool.name, tool.annotations, tool.source)) {\n\t\treturn false;\n\t}\n\treturn hasRepoScopedReusableArguments(toolCall, cwd);\n}\n\nexport type ToolDefinitionLookup = ReadonlyMap<string, AgentTool> | AgentTool[];\n\nexport type ToolMetadataCache = {\n\treadonly definitions: ReadonlyMap<string, AgentTool>;\n\treadonly reusableToolResultCwd: string;\n\tlookupCount: number;\n\tget(toolName: string): AgentTool | undefined;\n};\n\nconst reusableToolDefinitionIdentities = new WeakMap<object, number>();\nlet reusableToolDefinitionIdentityCounter = 0;\n\nfunction getReusableToolDefinitionIdentity(value: object): number {\n\tconst existing = reusableToolDefinitionIdentities.get(value);\n\tif (existing !== undefined) {\n\t\treturn existing;\n\t}\n\treusableToolDefinitionIdentityCounter += 1;\n\treusableToolDefinitionIdentities.set(\n\t\tvalue,\n\t\treusableToolDefinitionIdentityCounter,\n\t);\n\treturn reusableToolDefinitionIdentityCounter;\n}\n\nfunction getReusableToolFunctionIdentity(value: unknown): number | undefined {\n\treturn typeof value === \"function\"\n\t\t? getReusableToolDefinitionIdentity(value)\n\t\t: undefined;\n}\n\nexport function getReusableToolRegistrySignature(\n\ttools: readonly AgentTool[],\n): string {\n\treturn stableStringify(\n\t\ttools.map((tool) => ({\n\t\t\tallowedCallers: tool.allowedCallers,\n\t\t\tannotations: tool.annotations,\n\t\t\tdeferApiDefinition: tool.deferApiDefinition,\n\t\t\tdescription: tool.description,\n\t\t\texecuteIdentity: getReusableToolFunctionIdentity(tool.execute),\n\t\t\texecutionLocation: tool.executionLocation,\n\t\t\tgetActivityDescriptionIdentity: getReusableToolFunctionIdentity(\n\t\t\t\ttool.getActivityDescription,\n\t\t\t),\n\t\t\tgetDisplayNameIdentity: getReusableToolFunctionIdentity(\n\t\t\t\ttool.getDisplayName,\n\t\t\t),\n\t\t\tgetToolUseSummaryIdentity: getReusableToolFunctionIdentity(\n\t\t\t\ttool.getToolUseSummary,\n\t\t\t),\n\t\t\tinputExamples: tool.inputExamples,\n\t\t\tlabel: tool.label,\n\t\t\tmaxRetries: tool.maxRetries,\n\t\t\tname: tool.name,\n\t\t\tparameters: tool.parameters,\n\t\t\tretryDelayMs: tool.retryDelayMs,\n\t\t\tshouldRetryIdentity: getReusableToolFunctionIdentity(tool.shouldRetry),\n\t\t\tsource: tool.source,\n\t\t\ttoolIdentity: getReusableToolDefinitionIdentity(tool),\n\t\t\ttoolType: tool.toolType,\n\t\t})),\n\t);\n}\n\nexport function createToolMetadataCache(\n\ttools: AgentTool[],\n\treusableToolResultCwd = process.cwd(),\n): ToolMetadataCache {\n\tconst definitions = new Map(tools.map((tool) => [tool.name, tool]));\n\treturn {\n\t\tdefinitions,\n\t\treusableToolResultCwd,\n\t\tlookupCount: 0,\n\t\tget(toolName: string): AgentTool | undefined {\n\t\t\tthis.lookupCount += 1;\n\t\t\treturn definitions.get(toolName);\n\t\t},\n\t};\n}\n\nfunction getToolDefinition(\n\tlookup: ToolDefinitionLookup | ToolMetadataCache,\n\ttoolName: string,\n): AgentTool | undefined {\n\tif (\"get\" in lookup && !Array.isArray(lookup)) {\n\t\treturn lookup.get(toolName);\n\t}\n\treturn lookup.find((candidate) => candidate.name === toolName);\n}\n\nexport function getReusableToolResultCacheKey(\n\ttoolCall: ToolCall,\n\ttools: ToolDefinitionLookup | ToolMetadataCache,\n): string | undefined {\n\tconst tool = getToolDefinition(tools, toolCall.name);\n\tconst cwd =\n\t\t\"reusableToolResultCwd\" in tools\n\t\t\t? tools.reusableToolResultCwd\n\t\t\t: process.cwd();\n\tif (!tool || tool.annotations?.destructiveHint === true) {\n\t\treturn undefined;\n\t}\n\tif (!isReadOnlyTool(tool.name, tool.annotations, tool.source)) {\n\t\treturn undefined;\n\t}\n\tconst toolName = tool.name.toLowerCase();\n\tconst cacheKey = `${toolCall.name}:${stableStringify(toolCall.arguments)}`;\n\tif (NETWORK_BACKED_REUSABLE_TOOL_DENYLIST.has(toolName)) {\n\t\treturn undefined;\n\t}\n\tif (isGitSnapshotReusableToolCall(tool, toolCall, cwd)) {\n\t\treturn `${GIT_SCOPED_REUSABLE_TOOL_RESULT_KEY_PREFIX}${cacheKey}`;\n\t}\n\tif (\n\t\ttool.source !== undefined ||\n\t\tGIT_SNAPSHOT_REUSABLE_TOOL_NAMES.has(toolName) ||\n\t\ttool.annotations?.openWorldHint === true ||\n\t\ttool.executionLocation === \"client\"\n\t) {\n\t\treturn undefined;\n\t}\n\treturn `${RUN_SCOPED_REUSABLE_TOOL_RESULT_KEY_PREFIX}${cacheKey}`;\n}\n\nfunction isReadOnlyToolCallForCacheInvalidation(\n\ttoolCall: ToolCall,\n\ttools: ToolDefinitionLookup | ToolMetadataCache,\n): boolean {\n\tconst tool = getToolDefinition(tools, toolCall.name);\n\treturn tool\n\t\t? isReadOnlyTool(tool.name, tool.annotations, tool.source)\n\t\t: false;\n}\n\nfunction cloneToolResultForCache(\n\tmessage: ToolResultMessage,\n): ToolResultMessage {\n\treturn {\n\t\t...message,\n\t\tcontent: message.content.map((item) => ({ ...item })),\n\t};\n}\n\nexport function cloneToolOutcomeForCall(\n\toutcome: ToolExecutionOutcome,\n\ttoolCall: ToolCall,\n\ttimestamp: number,\n): ToolExecutionOutcome {\n\treturn {\n\t\tmessage: {\n\t\t\t...outcome.message,\n\t\t\ttoolCallId: toolCall.id,\n\t\t\ttoolName: toolCall.name,\n\t\t\tcontent: outcome.message.content.map((item) => ({ ...item })),\n\t\t\ttimestamp,\n\t\t},\n\t\tisError: outcome.isError,\n\t};\n}\n\nexport function resolvePlatformToolExecutionBridge(\n\toption: PlatformToolExecutionBridge | false | undefined,\n): PlatformToolExecutionBridge | undefined {\n\tif (option === false) {\n\t\treturn undefined;\n\t}\n\treturn option ?? getDefaultPlatformToolExecutionBridge();\n}\n\nexport async function recordReusableToolExecutionBridgeOutput({\n\tbridge,\n\tplan,\n\toutcome,\n\tdurationMs,\n\tsignal,\n}: {\n\tbridge?: PlatformToolExecutionBridge;\n\tplan?: ToolExecutionBridgePlan;\n\toutcome: ToolExecutionOutcome;\n\tdurationMs: number;\n\tsignal?: AbortSignal;\n}): Promise<ToolExecutionOutcome> {\n\tif (!bridge || !plan) {\n\t\treturn outcome;\n\t}\n\tconst observed =\n\t\tplan.kind === \"observe\"\n\t\t\t? await bridge.recordObservation(\n\t\t\t\t\tplan as ObserveToolExecutionPlan,\n\t\t\t\t\toutcome.message,\n\t\t\t\t\tsignal,\n\t\t\t\t)\n\t\t\t: undefined;\n\tconst governedOutput =\n\t\tplan.kind === \"governed\"\n\t\t\t? await bridge.recordGovernedOutput(\n\t\t\t\t\tplan,\n\t\t\t\t\toutcome.message,\n\t\t\t\t\tdurationMs,\n\t\t\t\t\tsignal,\n\t\t\t\t)\n\t\t\t: undefined;\n\treturn {\n\t\t...outcome,\n\t\t...buildObservedResultMetadata(plan, observed ?? governedOutput),\n\t};\n}\n\nexport function hasReusableToolResultState(\n\tcacheKey: string,\n\tcache: Map<string, ReusableToolResultEntry>,\n\tpending: Map<string, Promise<ToolExecutionOutcome>>,\n\tpolicyCheckedKeys: Set<string>,\n\tpendingSafetyChecks: Map<string, number>,\n): boolean {\n\treturn (\n\t\tcache.has(cacheKey) ||\n\t\tpending.has(cacheKey) ||\n\t\tpolicyCheckedKeys.has(cacheKey) ||\n\t\t(pendingSafetyChecks.get(cacheKey) ?? 0) > 0\n\t);\n}\n\nexport function incrementPendingReusableToolSafetyCheck(\n\tcacheKey: string | undefined,\n\tpendingSafetyChecks: Map<string, number>,\n): void {\n\tif (!cacheKey) {\n\t\treturn;\n\t}\n\tpendingSafetyChecks.set(\n\t\tcacheKey,\n\t\t(pendingSafetyChecks.get(cacheKey) ?? 0) + 1,\n\t);\n}\n\nexport function decrementPendingReusableToolSafetyCheck(\n\tcacheKey: string | undefined,\n\tpendingSafetyChecks: Map<string, number>,\n): void {\n\tif (!cacheKey) {\n\t\treturn;\n\t}\n\tconst nextCount = (pendingSafetyChecks.get(cacheKey) ?? 0) - 1;\n\tif (nextCount <= 0) {\n\t\tpendingSafetyChecks.delete(cacheKey);\n\t\treturn;\n\t}\n\tpendingSafetyChecks.set(cacheKey, nextCount);\n}\n\nexport function clearReusableToolResultState(\n\tcache: Map<string, ReusableToolResultEntry>,\n\tpending: Map<string, Promise<ToolExecutionOutcome>>,\n\tpolicyCheckedKeys: Set<string>,\n\tpendingSafetyChecks: Map<string, number>,\n\tcacheGeneration: ReusableToolResultCacheGeneration,\n): void {\n\tcache.clear();\n\tpending.clear();\n\tpolicyCheckedKeys.clear();\n\tpendingSafetyChecks.clear();\n\tcacheGeneration.value += 1;\n}\n\nexport function clearRunScopedReusableToolResultState(\n\tcache: Map<string, ReusableToolResultEntry>,\n\tpending: Map<string, Promise<ToolExecutionOutcome>>,\n\tpolicyCheckedKeys: Set<string>,\n\tpendingSafetyChecks: Map<string, number>,\n\tcacheGeneration: ReusableToolResultCacheGeneration,\n): void {\n\tlet cleared = false;\n\tfor (const key of cache.keys()) {\n\t\tif (key.startsWith(RUN_SCOPED_REUSABLE_TOOL_RESULT_KEY_PREFIX)) {\n\t\t\tcache.delete(key);\n\t\t\tcleared = true;\n\t\t}\n\t}\n\tfor (const key of pending.keys()) {\n\t\tif (key.startsWith(RUN_SCOPED_REUSABLE_TOOL_RESULT_KEY_PREFIX)) {\n\t\t\tpending.delete(key);\n\t\t\tcleared = true;\n\t\t}\n\t}\n\tfor (const key of policyCheckedKeys) {\n\t\tif (key.startsWith(RUN_SCOPED_REUSABLE_TOOL_RESULT_KEY_PREFIX)) {\n\t\t\tpolicyCheckedKeys.delete(key);\n\t\t\tcleared = true;\n\t\t}\n\t}\n\tfor (const key of pendingSafetyChecks.keys()) {\n\t\tif (key.startsWith(RUN_SCOPED_REUSABLE_TOOL_RESULT_KEY_PREFIX)) {\n\t\t\tpendingSafetyChecks.delete(key);\n\t\t\tcleared = true;\n\t\t}\n\t}\n\tif (cleared) {\n\t\tcacheGeneration.value += 1;\n\t}\n}\n\nexport function invalidateReusableToolResultsAfterMutation(\n\ttoolCall: ToolCall,\n\ttools: ToolDefinitionLookup | ToolMetadataCache,\n\tcache: Map<string, ReusableToolResultEntry>,\n\tpending: Map<string, Promise<ToolExecutionOutcome>>,\n\tpolicyCheckedKeys: Set<string>,\n\tpendingSafetyChecks: Map<string, number>,\n\tcacheGeneration: ReusableToolResultCacheGeneration,\n): void {\n\tif (isReadOnlyToolCallForCacheInvalidation(toolCall, tools)) {\n\t\treturn;\n\t}\n\tclearReusableToolResultState(\n\t\tcache,\n\t\tpending,\n\t\tpolicyCheckedKeys,\n\t\tpendingSafetyChecks,\n\t\tcacheGeneration,\n\t);\n}\n\nexport function hasPendingMutatingToolExecution(\n\tpendingExecutions: readonly PendingExecution[],\n\ttools: ToolDefinitionLookup | ToolMetadataCache,\n): boolean {\n\treturn pendingExecutions.some(\n\t\t(execution) =>\n\t\t\t!isReadOnlyToolCallForCacheInvalidation(execution.toolCall, tools),\n\t);\n}\n\nexport function trackReusableToolResult(\n\tcacheKey: string,\n\texecutionPromise: Promise<ToolExecutionOutcome>,\n\tcache: Map<string, ReusableToolResultEntry>,\n\tpending: Map<string, Promise<ToolExecutionOutcome>>,\n\tpolicyCheckedKeys?: Set<string>,\n\tcacheGeneration?: ReusableToolResultCacheGeneration,\n): Promise<ToolExecutionOutcome> {\n\tconst trackedGeneration = cacheGeneration?.value;\n\tconst trackedPromise = executionPromise\n\t\t.then((outcome) => {\n\t\t\tif (\n\t\t\t\t!outcome.isError &&\n\t\t\t\toutcome.message.isError !== true &&\n\t\t\t\t(cacheGeneration === undefined ||\n\t\t\t\t\tcacheGeneration.value === trackedGeneration)\n\t\t\t) {\n\t\t\t\tcache.set(cacheKey, {\n\t\t\t\t\tmessage: cloneToolResultForCache(outcome.message),\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tpolicyCheckedKeys?.delete(cacheKey);\n\t\t\t}\n\t\t\treturn outcome;\n\t\t})\n\t\t.catch((error) => {\n\t\t\tpolicyCheckedKeys?.delete(cacheKey);\n\t\t\tthrow error;\n\t\t})\n\t\t.finally(() => {\n\t\t\tif (pending.get(cacheKey) === trackedPromise) {\n\t\t\t\tpending.delete(cacheKey);\n\t\t\t}\n\t\t});\n\tpending.set(cacheKey, trackedPromise);\n\treturn trackedPromise;\n}\n"]}
@@ -49,7 +49,7 @@ import { type Clock } from "../utils/clock.js";
49
49
  import type { AuthCredential } from "../providers/auth.js";
50
50
  import type { ActionApprovalService } from "./action-approval.js";
51
51
  import type { ToolRetryConfig, ToolRetryService } from "./tool-retry.js";
52
- import { type PlatformToolExecutionBridge } from "./transport/tool-execution-bridge.js";
52
+ import type { PlatformToolExecutionBridge } from "./transport/tool-execution-bridge.js";
53
53
  import { type SessionTokenCounter, type ToolAuditLogger } from "./transport/transport-utils.js";
54
54
  import type { AgentEvent, AgentRunConfig, AgentToolResult, AgentTransport, Message } from "./types.js";
55
55
  export type { SessionTokenCounter, ToolAuditLogger, } from "./transport/transport-utils.js";
@@ -1 +1 @@
1
- {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/agent/transport.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/agent/transport.ts"],"names":[],"mappings":"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"}