@aexol/spectral 0.9.158 → 0.9.160
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +29 -5
- package/dist/extensions/desktop-screenshot/index.d.ts.map +1 -1
- package/dist/extensions/desktop-screenshot/index.js +46 -39
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/memory/tool-output-compressor.d.ts +8 -2
- package/dist/memory/tool-output-compressor.d.ts.map +1 -1
- package/dist/memory/tool-output-compressor.js +8 -83
- package/dist/sdk/coding-agent/core/compaction/policy.js +6 -6
- package/dist/sdk/coding-agent/core/extensions/index.d.ts +2 -2
- package/dist/sdk/coding-agent/core/extensions/index.d.ts.map +1 -1
- package/dist/sdk/coding-agent/core/extensions/index.js +1 -1
- package/dist/sdk/coding-agent/core/extensions/types.d.ts +3 -44
- package/dist/sdk/coding-agent/core/extensions/types.d.ts.map +1 -1
- package/dist/sdk/coding-agent/core/extensions/types.js +0 -12
- package/dist/sdk/coding-agent/core/package-manager.d.ts +0 -15
- package/dist/sdk/coding-agent/core/package-manager.d.ts.map +1 -1
- package/dist/sdk/coding-agent/core/package-manager.js +0 -80
- package/dist/sdk/coding-agent/core/sdk.d.ts +2 -2
- package/dist/sdk/coding-agent/core/sdk.d.ts.map +1 -1
- package/dist/sdk/coding-agent/core/sdk.js +3 -3
- package/dist/sdk/coding-agent/core/tools/bash-blocklist.js +1 -1
- package/dist/sdk/coding-agent/core/tools/index.d.ts +1 -13
- package/dist/sdk/coding-agent/core/tools/index.d.ts.map +1 -1
- package/dist/sdk/coding-agent/core/tools/index.js +0 -44
- package/dist/sdk/coding-agent/index.d.ts +4 -4
- package/dist/sdk/coding-agent/index.d.ts.map +1 -1
- package/dist/sdk/coding-agent/index.js +3 -3
- package/dist/server/agent-bridge.d.ts.map +1 -1
- package/dist/server/agent-bridge.js +1 -0
- package/package.json +1 -1
- package/dist/sdk/coding-agent/core/tools/edit.d.ts +0 -45
- package/dist/sdk/coding-agent/core/tools/edit.d.ts.map +0 -1
- package/dist/sdk/coding-agent/core/tools/edit.js +0 -216
- package/dist/sdk/coding-agent/core/tools/grep.d.ts +0 -37
- package/dist/sdk/coding-agent/core/tools/grep.d.ts.map +0 -1
- package/dist/sdk/coding-agent/core/tools/grep.js +0 -288
- package/dist/sdk/coding-agent/core/tools/ls.d.ts +0 -37
- package/dist/sdk/coding-agent/core/tools/ls.d.ts.map +0 -1
- package/dist/sdk/coding-agent/core/tools/ls.js +0 -156
- package/dist/sdk/coding-agent/core/tools/write.d.ts +0 -23
- package/dist/sdk/coding-agent/core/tools/write.d.ts.map +0 -1
- package/dist/sdk/coding-agent/core/tools/write.js +0 -134
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/sdk/coding-agent/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EACN,YAAY,EACZ,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,yBAAyB,EAC9B,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,eAAe,EACf,KAAK,YAAY,GACjB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACN,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,WAAW,EACX,KAAK,kBAAkB,EACvB,sBAAsB,EACtB,0BAA0B,EAC1B,KAAK,eAAe,GACpB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACN,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,2BAA2B,EAChC,KAAK,cAAc,EACnB,sBAAsB,EACtB,8BAA8B,EAC9B,OAAO,EACP,2BAA2B,EAC3B,cAAc,EACd,KAAK,cAAc,EACnB,YAAY,EACZ,kBAAkB,EAClB,KAAK,4BAA4B,EACjC,qBAAqB,EACrB,eAAe,EACf,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,aAAa,GACb,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,KAAK,QAAQ,EAAE,KAAK,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE7F,YAAY,EACX,0BAA0B,EAC1B,aAAa,EACb,eAAe,EACf,eAAe,EACf,uBAAuB,EACvB,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EACrB,2BAA2B,EAC3B,0BAA0B,EAC1B,gCAAgC,EAChC,wBAAwB,EACxB,cAAc,EACd,YAAY,EACZ,kBAAkB,EAClB,YAAY,EACZ,mBAAmB,EACnB,qBAAqB,EACrB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/sdk/coding-agent/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,7 @@ export { AuthStorage, FileAuthStorageBackend, InMemoryAuthStorageBackend, } from
|
|
|
7
7
|
// Compaction
|
|
8
8
|
export { calculateContextTokens, collectEntriesForBranchSummary, compact, DEFAULT_COMPACTION_SETTINGS, estimateTokens, findCutPoint, findTurnStartIndex, generateBranchSummary, generateSummary, getLastAssistantUsage, prepareBranchEntries, serializeConversation, shouldCompact, } from "./core/compaction/index.js";
|
|
9
9
|
export { createEventBus } from "./core/event-bus.js";
|
|
10
|
-
export { createExtensionRuntime, defineTool, discoverAndLoadExtensions, ExtensionRunner, isBashToolResult,
|
|
10
|
+
export { createExtensionRuntime, defineTool, discoverAndLoadExtensions, ExtensionRunner, isBashToolResult, isReadToolResult, isToolCallEventType, wrapRegisteredTool, wrapRegisteredTools, } from "./core/extensions/index.js";
|
|
11
11
|
// Footer data provider — no longer exported (TUI-only, serve/relay uses no-ops)
|
|
12
12
|
// export type { ReadonlyFooterDataProvider } from "./core/footer-data-provider.js";
|
|
13
13
|
export { convertToLlm } from "./core/messages.js";
|
|
@@ -25,14 +25,14 @@ export { AgentSessionRuntime,
|
|
|
25
25
|
// Factory
|
|
26
26
|
createAgentSession, createAgentSessionFromServices, createAgentSessionRuntime, createAgentSessionServices, createBashTool,
|
|
27
27
|
// Tool factories (for custom cwd)
|
|
28
|
-
createCodingTools,
|
|
28
|
+
createCodingTools, createReadOnlyTools, createReadTool, } from "./core/sdk.js";
|
|
29
29
|
export { buildSessionContext, CURRENT_SESSION_VERSION, getLatestCompactionEntry, migrateSessionEntries, parseSessionEntries, SessionManager, } from "./core/session-manager.js";
|
|
30
30
|
export { SettingsManager, } from "./core/settings-manager.js";
|
|
31
31
|
// Skills
|
|
32
32
|
export { formatSkillsForPrompt, loadSkills, loadSkillsFromDir, } from "./core/skills.js";
|
|
33
33
|
export { createSyntheticSourceInfo } from "./core/source-info.js";
|
|
34
34
|
// Tools
|
|
35
|
-
export { createApplyPatchToolDefinition, createBashToolDefinition,
|
|
35
|
+
export { createApplyPatchToolDefinition, createBashToolDefinition, createLocalBashOperations, createReadToolDefinition, DEFAULT_MAX_BYTES, DEFAULT_MAX_LINES, formatSize, truncateHead, truncateLine, truncateTail, withFileMutationQueue, } from "./core/tools/index.js";
|
|
36
36
|
// Main entry point
|
|
37
37
|
// main.ts removed (interactive-only, not used in SDK mode)
|
|
38
38
|
// Run modes for programmatic SDK usage
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-bridge.d.ts","sourceRoot":"","sources":["../../src/server/agent-bridge.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"agent-bridge.d.ts","sourceRoot":"","sources":["../../src/server/agent-bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -899,6 +899,7 @@ export class AgentBridge {
|
|
|
899
899
|
modelRegistry: this.modelRegistry,
|
|
900
900
|
settingsManager,
|
|
901
901
|
sessionId: this.opts.sessionId,
|
|
902
|
+
tools: ["read", "bash", "apply_patch"],
|
|
902
903
|
});
|
|
903
904
|
this.session = result.session;
|
|
904
905
|
// Headless UI context: forwards extension notify() calls as wire events
|
package/package.json
CHANGED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import type { AgentTool } from "../../../agent-core/index.js";
|
|
2
|
-
import type { Stats } from "fs";
|
|
3
|
-
import { type Static, Type } from "typebox";
|
|
4
|
-
import type { ToolDefinition } from "../extensions/types.js";
|
|
5
|
-
declare const editSchema: Type.TObject<{
|
|
6
|
-
path: Type.TString;
|
|
7
|
-
edits: Type.TArray<Type.TObject<{
|
|
8
|
-
oldText: Type.TString;
|
|
9
|
-
newText: Type.TString;
|
|
10
|
-
}>>;
|
|
11
|
-
}>;
|
|
12
|
-
export type EditToolInput = Static<typeof editSchema>;
|
|
13
|
-
export interface EditToolDetails {
|
|
14
|
-
/** Display-oriented diff of the changes made */
|
|
15
|
-
diff: string;
|
|
16
|
-
/** Standard unified patch of the changes made */
|
|
17
|
-
patch: string;
|
|
18
|
-
/** Line number of the first change in the new file (for editor navigation) */
|
|
19
|
-
firstChangedLine?: number;
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Pluggable operations for the edit tool.
|
|
23
|
-
* Override these to delegate file editing to remote systems (for example SSH).
|
|
24
|
-
*/
|
|
25
|
-
export interface EditOperations {
|
|
26
|
-
/** Read file contents as a Buffer */
|
|
27
|
-
readFile: (absolutePath: string) => Promise<Buffer>;
|
|
28
|
-
/** Write content to a file */
|
|
29
|
-
writeFile: (absolutePath: string, content: string) => Promise<void>;
|
|
30
|
-
/** Check if file is readable and writable (throw if not) */
|
|
31
|
-
access: (absolutePath: string) => Promise<void>;
|
|
32
|
-
/**
|
|
33
|
-
* Stat a file to obtain a freshness token (mtime). Used to detect stale reads
|
|
34
|
-
* between read and write. Optional — defaults to local fs.stat.
|
|
35
|
-
*/
|
|
36
|
-
stat?: (absolutePath: string) => Promise<Stats>;
|
|
37
|
-
}
|
|
38
|
-
export interface EditToolOptions {
|
|
39
|
-
/** Custom operations for file editing. Default: local filesystem */
|
|
40
|
-
operations?: EditOperations;
|
|
41
|
-
}
|
|
42
|
-
export declare function createEditToolDefinition(cwd: string, options?: EditToolOptions): ToolDefinition<typeof editSchema, EditToolDetails | undefined>;
|
|
43
|
-
export declare function createEditTool(cwd: string, options?: EditToolOptions): AgentTool<typeof editSchema>;
|
|
44
|
-
export {};
|
|
45
|
-
//# sourceMappingURL=edit.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"edit.d.ts","sourceRoot":"","sources":["../../../../../src/sdk/coding-agent/core/tools/edit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAG9D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,KAAK,MAAM,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AA8B7D,QAAA,MAAM,UAAU;;;;;;EASf,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,UAAU,CAAC,CAAC;AAMtD,MAAM,WAAW,eAAe;IAC/B,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC9B,qCAAqC;IACrC,QAAQ,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACpD,8BAA8B;IAC9B,SAAS,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,4DAA4D;IAC5D,MAAM,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD;;;OAGG;IACH,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC;CAChD;AASD,MAAM,WAAW,eAAe;IAC/B,oEAAoE;IACpE,UAAU,CAAC,EAAE,cAAc,CAAC;CAC5B;AAqGD,wBAAgB,wBAAwB,CACvC,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,eAAe,GACvB,cAAc,CAAC,OAAO,UAAU,EAAE,eAAe,GAAG,SAAS,CAAC,CAyJhE;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC,OAAO,UAAU,CAAC,CAEnG"}
|
|
@@ -1,216 +0,0 @@
|
|
|
1
|
-
import { constants } from "fs";
|
|
2
|
-
import { access as fsAccess, readFile as fsReadFile, stat as fsStat, writeFile as fsWriteFile } from "fs/promises";
|
|
3
|
-
import { Type } from "typebox";
|
|
4
|
-
import { renderDiff } from "./render-diff.js";
|
|
5
|
-
import { applyEditsToNormalizedContent, detectLineEnding, generateDiffString, generateUnifiedPatch, normalizeToLF, restoreLineEndings, stripBom, } from "./edit-diff.js";
|
|
6
|
-
import { atomicWriteFile } from "./atomic-write.js";
|
|
7
|
-
import { withFileMutationQueue } from "./file-mutation-queue.js";
|
|
8
|
-
import { resolveToCwd } from "./path-utils.js";
|
|
9
|
-
import { shortenPath, str } from "./render-utils.js";
|
|
10
|
-
import { wrapToolDefinition } from "./tool-definition-wrapper.js";
|
|
11
|
-
const replaceEditSchema = Type.Object({
|
|
12
|
-
oldText: Type.String({
|
|
13
|
-
description: "Exact text for one targeted replacement. It must be unique in the original file and must not overlap with any other edits[].oldText in the same call.",
|
|
14
|
-
}),
|
|
15
|
-
newText: Type.String({ description: "Replacement text for this targeted edit." }),
|
|
16
|
-
}, { additionalProperties: false });
|
|
17
|
-
const editSchema = Type.Object({
|
|
18
|
-
path: Type.String({ description: "Path to the file to edit (relative or absolute)" }),
|
|
19
|
-
edits: Type.Array(replaceEditSchema, {
|
|
20
|
-
description: "One or more targeted replacements. Each edit is matched against the original file, not incrementally. Do not include overlapping or nested edits. If two changes touch the same block or nearby lines, merge them into one edit instead.",
|
|
21
|
-
}),
|
|
22
|
-
}, { additionalProperties: false });
|
|
23
|
-
const defaultEditOperations = {
|
|
24
|
-
readFile: (path) => fsReadFile(path),
|
|
25
|
-
writeFile: (path, content) => fsWriteFile(path, content, "utf-8"),
|
|
26
|
-
access: (path) => fsAccess(path, constants.R_OK | constants.W_OK),
|
|
27
|
-
stat: (path) => fsStat(path),
|
|
28
|
-
};
|
|
29
|
-
function prepareEditArguments(input) {
|
|
30
|
-
if (!input || typeof input !== "object") {
|
|
31
|
-
return input;
|
|
32
|
-
}
|
|
33
|
-
const args = input;
|
|
34
|
-
// Some models (Opus 4.6, GLM-5.1) send edits as a JSON string instead of an array
|
|
35
|
-
if (typeof args.edits === "string") {
|
|
36
|
-
try {
|
|
37
|
-
const parsed = JSON.parse(args.edits);
|
|
38
|
-
if (Array.isArray(parsed))
|
|
39
|
-
args.edits = parsed;
|
|
40
|
-
}
|
|
41
|
-
catch (error) {
|
|
42
|
-
const reason = error instanceof Error ? error.message : String(error);
|
|
43
|
-
throw new Error(`Invalid "edits" argument for edit tool: expected an array but received a string that could not be parsed as JSON. Parse error: ${reason}`);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
const legacy = args;
|
|
47
|
-
if (typeof legacy.oldText !== "string" || typeof legacy.newText !== "string") {
|
|
48
|
-
return args;
|
|
49
|
-
}
|
|
50
|
-
const edits = Array.isArray(legacy.edits) ? [...legacy.edits] : [];
|
|
51
|
-
edits.push({ oldText: legacy.oldText, newText: legacy.newText });
|
|
52
|
-
const { oldText: _oldText, newText: _newText, ...rest } = legacy;
|
|
53
|
-
return { ...rest, edits };
|
|
54
|
-
}
|
|
55
|
-
function validateEditInput(input) {
|
|
56
|
-
if (!Array.isArray(input.edits) || input.edits.length === 0) {
|
|
57
|
-
throw new Error("Edit tool input is invalid. edits must contain at least one replacement.");
|
|
58
|
-
}
|
|
59
|
-
for (const edit of input.edits) {
|
|
60
|
-
if (!edit ||
|
|
61
|
-
typeof edit !== "object" ||
|
|
62
|
-
typeof edit.oldText !== "string" ||
|
|
63
|
-
typeof edit.newText !== "string") {
|
|
64
|
-
throw new Error("Edit tool input is invalid. Each edit must have string oldText and newText properties.");
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
return { path: input.path, edits: input.edits };
|
|
68
|
-
}
|
|
69
|
-
function formatEditCall(args, _theme) {
|
|
70
|
-
const rawPath = str(args?.file_path ?? args?.path);
|
|
71
|
-
const path = rawPath !== null ? shortenPath(rawPath) : null;
|
|
72
|
-
const pathDisplay = path === null ? "[invalid]" : path || "...";
|
|
73
|
-
return `edit ${pathDisplay}`;
|
|
74
|
-
}
|
|
75
|
-
function formatEditResult(args, result, _theme, isError) {
|
|
76
|
-
const rawPath = str(args?.file_path ?? args?.path);
|
|
77
|
-
if (isError) {
|
|
78
|
-
const errorText = result.content
|
|
79
|
-
.filter((c) => c.type === "text")
|
|
80
|
-
.map((c) => c.text || "")
|
|
81
|
-
.join("\n");
|
|
82
|
-
if (!errorText) {
|
|
83
|
-
return undefined;
|
|
84
|
-
}
|
|
85
|
-
return errorText;
|
|
86
|
-
}
|
|
87
|
-
const resultDiff = result.details?.diff;
|
|
88
|
-
if (resultDiff) {
|
|
89
|
-
return renderDiff(resultDiff, { filePath: rawPath ?? undefined });
|
|
90
|
-
}
|
|
91
|
-
return undefined;
|
|
92
|
-
}
|
|
93
|
-
export function createEditToolDefinition(cwd, options) {
|
|
94
|
-
const ops = options?.operations ?? defaultEditOperations;
|
|
95
|
-
return {
|
|
96
|
-
name: "edit",
|
|
97
|
-
label: "edit",
|
|
98
|
-
description: "Edit a single file using targeted text replacement. Prefer apply_patch for manual code edits when that tool is available; use edit for small exact replacements only. Prefer copying edits[].oldText from a fresh read of the current file. Every oldText must identify one unique, non-overlapping region of the original file snapshot for this tool call. If two changes affect the same block or nearby lines, merge them into one edit instead of emitting overlapping edits. Do not include large unchanged regions just to connect distant changes.",
|
|
99
|
-
promptSnippet: "Make precise file edits with targeted text replacement, including multiple disjoint edits in one call",
|
|
100
|
-
promptGuidelines: [
|
|
101
|
-
"Prefer apply_patch for manual code edits when that tool is available, especially with OpenAI/GPT/Codex models; use edit only for small exact replacements where edits[].oldText is copied from the latest file contents.",
|
|
102
|
-
"Read or re-read the target file immediately before risky edits, especially after another tool or agent may have changed it.",
|
|
103
|
-
"Never use edit from memory or from stale snippets. oldText must be copied byte-for-byte from the latest read output, including indentation, blank lines, comments, and punctuation.",
|
|
104
|
-
"When changing multiple separate locations in one file, use one edit call with multiple entries in edits[] instead of multiple edit calls.",
|
|
105
|
-
"Each edits[].oldText is matched against the original file snapshot for that edit call, not after earlier edits are applied. Do not emit sequential edits where a later oldText depends on an earlier replacement.",
|
|
106
|
-
"Do not emit overlapping or nested edits. If edits touch the same block or nearby lines, merge them into one edit.",
|
|
107
|
-
"Keep edits[].oldText as small as possible while still being unique in the file. Do not pad with large unchanged regions.",
|
|
108
|
-
"If edit reports that oldText was not found, stop and re-read the file before retrying; do not retry the same oldText.",
|
|
109
|
-
],
|
|
110
|
-
parameters: editSchema,
|
|
111
|
-
prepareArguments: prepareEditArguments,
|
|
112
|
-
async execute(_toolCallId, input, signal, _onUpdate, _ctx) {
|
|
113
|
-
const { path, edits } = validateEditInput(input);
|
|
114
|
-
const absolutePath = resolveToCwd(path, cwd);
|
|
115
|
-
return withFileMutationQueue(absolutePath, () => new Promise((resolve, reject) => {
|
|
116
|
-
// Check if already aborted.
|
|
117
|
-
if (signal?.aborted) {
|
|
118
|
-
reject(new Error("Operation aborted"));
|
|
119
|
-
return;
|
|
120
|
-
}
|
|
121
|
-
let aborted = false;
|
|
122
|
-
// Set up abort handler.
|
|
123
|
-
const onAbort = () => {
|
|
124
|
-
aborted = true;
|
|
125
|
-
reject(new Error("Operation aborted"));
|
|
126
|
-
};
|
|
127
|
-
if (signal) {
|
|
128
|
-
signal.addEventListener("abort", onAbort, { once: true });
|
|
129
|
-
}
|
|
130
|
-
// Perform the edit operation.
|
|
131
|
-
void (async () => {
|
|
132
|
-
try {
|
|
133
|
-
// Check if file exists.
|
|
134
|
-
try {
|
|
135
|
-
await ops.access(absolutePath);
|
|
136
|
-
}
|
|
137
|
-
catch (error) {
|
|
138
|
-
const errorMessage = error instanceof Error && "code" in error ? `Error code: ${error.code}` : String(error);
|
|
139
|
-
if (signal) {
|
|
140
|
-
signal.removeEventListener("abort", onAbort);
|
|
141
|
-
}
|
|
142
|
-
reject(new Error(`Could not edit file: ${path}. ${errorMessage}.`));
|
|
143
|
-
return;
|
|
144
|
-
}
|
|
145
|
-
// Check if aborted before reading.
|
|
146
|
-
if (aborted) {
|
|
147
|
-
return;
|
|
148
|
-
}
|
|
149
|
-
// Read the file.
|
|
150
|
-
const buffer = await ops.readFile(absolutePath);
|
|
151
|
-
const rawContent = buffer.toString("utf-8");
|
|
152
|
-
// Capture a freshness token so we can detect stale reads before writing.
|
|
153
|
-
const freshnessTokenBefore = ops.stat ? (await ops.stat(absolutePath)).mtimeMs : undefined;
|
|
154
|
-
// Check if aborted after reading.
|
|
155
|
-
if (aborted) {
|
|
156
|
-
return;
|
|
157
|
-
}
|
|
158
|
-
// Strip BOM before matching. The model will not include an invisible BOM in oldText.
|
|
159
|
-
const { bom, text: content } = stripBom(rawContent);
|
|
160
|
-
const originalEnding = detectLineEnding(content);
|
|
161
|
-
const normalizedContent = normalizeToLF(content);
|
|
162
|
-
const { baseContent, newContent, usedFuzzyMatch } = applyEditsToNormalizedContent(normalizedContent, edits, path);
|
|
163
|
-
// Check if aborted before writing.
|
|
164
|
-
if (aborted) {
|
|
165
|
-
return;
|
|
166
|
-
}
|
|
167
|
-
// Detect stale file: re-check freshness token before writing.
|
|
168
|
-
if (freshnessTokenBefore !== undefined && ops.stat) {
|
|
169
|
-
const freshnessTokenAfter = (await ops.stat(absolutePath)).mtimeMs;
|
|
170
|
-
if (freshnessTokenAfter !== freshnessTokenBefore) {
|
|
171
|
-
if (signal) {
|
|
172
|
-
signal.removeEventListener("abort", onAbort);
|
|
173
|
-
}
|
|
174
|
-
reject(new Error(`File ${path} was modified since read. Re-read the file and retry your edit.`));
|
|
175
|
-
return;
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
const finalContent = bom + restoreLineEndings(newContent, originalEnding);
|
|
179
|
-
await atomicWriteFile(absolutePath, finalContent);
|
|
180
|
-
// Check if aborted after writing.
|
|
181
|
-
if (aborted) {
|
|
182
|
-
return;
|
|
183
|
-
}
|
|
184
|
-
// Clean up abort handler.
|
|
185
|
-
if (signal) {
|
|
186
|
-
signal.removeEventListener("abort", onAbort);
|
|
187
|
-
}
|
|
188
|
-
const diffResult = generateDiffString(baseContent, newContent);
|
|
189
|
-
const patch = generateUnifiedPatch(path, baseContent, newContent);
|
|
190
|
-
resolve({
|
|
191
|
-
content: [
|
|
192
|
-
{
|
|
193
|
-
type: "text",
|
|
194
|
-
text: `Successfully replaced ${edits.length} block(s) in ${path}.${usedFuzzyMatch ? " (used tolerant matching — verify the change)" : ""}`,
|
|
195
|
-
},
|
|
196
|
-
],
|
|
197
|
-
details: { diff: diffResult.diff, patch, firstChangedLine: diffResult.firstChangedLine },
|
|
198
|
-
});
|
|
199
|
-
}
|
|
200
|
-
catch (error) {
|
|
201
|
-
// Clean up abort handler.
|
|
202
|
-
if (signal) {
|
|
203
|
-
signal.removeEventListener("abort", onAbort);
|
|
204
|
-
}
|
|
205
|
-
if (!aborted) {
|
|
206
|
-
reject(error instanceof Error ? error : new Error(String(error)));
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
})();
|
|
210
|
-
}));
|
|
211
|
-
},
|
|
212
|
-
};
|
|
213
|
-
}
|
|
214
|
-
export function createEditTool(cwd, options) {
|
|
215
|
-
return wrapToolDefinition(createEditToolDefinition(cwd, options));
|
|
216
|
-
}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import type { AgentTool } from "../../../agent-core/index.js";
|
|
2
|
-
import { type Static, Type } from "typebox";
|
|
3
|
-
import type { ToolDefinition } from "../extensions/types.js";
|
|
4
|
-
import { type TruncationResult } from "./truncate.js";
|
|
5
|
-
declare const grepSchema: Type.TObject<{
|
|
6
|
-
pattern: Type.TString;
|
|
7
|
-
path: Type.TOptional<Type.TString>;
|
|
8
|
-
glob: Type.TOptional<Type.TString>;
|
|
9
|
-
ignoreCase: Type.TOptional<Type.TBoolean>;
|
|
10
|
-
literal: Type.TOptional<Type.TBoolean>;
|
|
11
|
-
context: Type.TOptional<Type.TNumber>;
|
|
12
|
-
limit: Type.TOptional<Type.TNumber>;
|
|
13
|
-
}>;
|
|
14
|
-
export type GrepToolInput = Static<typeof grepSchema>;
|
|
15
|
-
export interface GrepToolDetails {
|
|
16
|
-
truncation?: TruncationResult;
|
|
17
|
-
matchLimitReached?: number;
|
|
18
|
-
linesTruncated?: boolean;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Pluggable operations for the grep tool.
|
|
22
|
-
* Override these to delegate search to remote systems (for example SSH).
|
|
23
|
-
*/
|
|
24
|
-
export interface GrepOperations {
|
|
25
|
-
/** Check if path is a directory. Throws if path does not exist. */
|
|
26
|
-
isDirectory: (absolutePath: string) => Promise<boolean> | boolean;
|
|
27
|
-
/** Read file contents for context lines */
|
|
28
|
-
readFile: (absolutePath: string) => Promise<string> | string;
|
|
29
|
-
}
|
|
30
|
-
export interface GrepToolOptions {
|
|
31
|
-
/** Custom operations for grep. Default: local filesystem plus ripgrep */
|
|
32
|
-
operations?: GrepOperations;
|
|
33
|
-
}
|
|
34
|
-
export declare function createGrepToolDefinition(cwd: string, options?: GrepToolOptions): ToolDefinition<typeof grepSchema, GrepToolDetails | undefined>;
|
|
35
|
-
export declare function createGrepTool(cwd: string, options?: GrepToolOptions): AgentTool<typeof grepSchema>;
|
|
36
|
-
export {};
|
|
37
|
-
//# sourceMappingURL=grep.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"grep.d.ts","sourceRoot":"","sources":["../../../../../src/sdk/coding-agent/core/tools/grep.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAI9D,OAAO,EAAE,KAAK,MAAM,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAG5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAI7D,OAAO,EAIN,KAAK,gBAAgB,EAGrB,MAAM,eAAe,CAAC;AAEvB,QAAA,MAAM,UAAU;;;;;;;;EAYd,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,UAAU,CAAC,CAAC;AAGtD,MAAM,WAAW,eAAe;IAC/B,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC9B,mEAAmE;IACnE,WAAW,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IAClE,2CAA2C;IAC3C,QAAQ,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;CAC7D;AAOD,MAAM,WAAW,eAAe;IAC/B,yEAAyE;IACzE,UAAU,CAAC,EAAE,cAAc,CAAC;CAC5B;AAqDD,wBAAgB,wBAAwB,CACvC,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,eAAe,GACvB,cAAc,CAAC,OAAO,UAAU,EAAE,eAAe,GAAG,SAAS,CAAC,CAqPhE;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC,OAAO,UAAU,CAAC,CAEnG"}
|