@code-yeongyu/senpi 2026.8.5 → 2026.8.7
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/CHANGELOG.md +93 -0
- package/dist/core/agent-abort-provenance.d.ts +20 -0
- package/dist/core/agent-abort-provenance.d.ts.map +1 -0
- package/dist/core/agent-abort-provenance.js +83 -0
- package/dist/core/agent-abort-provenance.js.map +1 -0
- package/dist/core/agent-session.d.ts +15 -1
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +123 -80
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/agent-settled-delivery.d.ts +9 -0
- package/dist/core/agent-settled-delivery.d.ts.map +1 -0
- package/dist/core/agent-settled-delivery.js +25 -0
- package/dist/core/agent-settled-delivery.js.map +1 -0
- package/dist/core/extensions/builtin/bash-timeout/index.d.ts +2 -2
- package/dist/core/extensions/builtin/bash-timeout/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/bash-timeout/index.js +17 -20
- package/dist/core/extensions/builtin/bash-timeout/index.js.map +1 -1
- package/dist/core/extensions/builtin/bash-timeout/timeout.d.ts +7 -12
- package/dist/core/extensions/builtin/bash-timeout/timeout.d.ts.map +1 -1
- package/dist/core/extensions/builtin/bash-timeout/timeout.js +11 -19
- package/dist/core/extensions/builtin/bash-timeout/timeout.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/index.js +3 -3
- package/dist/core/extensions/builtin/compaction/index.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/per-turn-cap.d.ts +8 -8
- package/dist/core/extensions/builtin/compaction/per-turn-cap.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/per-turn-cap.js +9 -16
- package/dist/core/extensions/builtin/compaction/per-turn-cap.js.map +1 -1
- package/dist/core/extensions/builtin/goal/agent-end-continuation.d.ts +11 -0
- package/dist/core/extensions/builtin/goal/agent-end-continuation.d.ts.map +1 -0
- package/dist/core/extensions/builtin/goal/agent-end-continuation.js +13 -0
- package/dist/core/extensions/builtin/goal/agent-end-continuation.js.map +1 -0
- package/dist/core/extensions/builtin/goal/cache-warm.d.ts +0 -2
- package/dist/core/extensions/builtin/goal/cache-warm.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/cache-warm.js +0 -34
- package/dist/core/extensions/builtin/goal/cache-warm.js.map +1 -1
- package/dist/core/extensions/builtin/goal/continuation.d.ts +1 -1
- package/dist/core/extensions/builtin/goal/continuation.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/continuation.js +2 -0
- package/dist/core/extensions/builtin/goal/continuation.js.map +1 -1
- package/dist/core/extensions/builtin/goal/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/index.js +17 -19
- package/dist/core/extensions/builtin/goal/index.js.map +1 -1
- package/dist/core/extensions/builtin/goal/last-assistant-message.d.ts +5 -0
- package/dist/core/extensions/builtin/goal/last-assistant-message.d.ts.map +1 -0
- package/dist/core/extensions/builtin/goal/last-assistant-message.js +9 -0
- package/dist/core/extensions/builtin/goal/last-assistant-message.js.map +1 -0
- package/dist/core/extensions/builtin/goal/monitor-continuation-types.d.ts +23 -0
- package/dist/core/extensions/builtin/goal/monitor-continuation-types.d.ts.map +1 -0
- package/dist/core/extensions/builtin/goal/monitor-continuation-types.js +2 -0
- package/dist/core/extensions/builtin/goal/monitor-continuation-types.js.map +1 -0
- package/dist/core/extensions/builtin/goal/monitor-continuation.d.ts +4 -10
- package/dist/core/extensions/builtin/goal/monitor-continuation.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/monitor-continuation.js +31 -21
- package/dist/core/extensions/builtin/goal/monitor-continuation.js.map +1 -1
- package/dist/core/extensions/builtin/goal/terminal-provider-error.d.ts +3 -0
- package/dist/core/extensions/builtin/goal/terminal-provider-error.d.ts.map +1 -0
- package/dist/core/extensions/builtin/goal/terminal-provider-error.js +10 -0
- package/dist/core/extensions/builtin/goal/terminal-provider-error.js.map +1 -0
- package/dist/core/extensions/builtin/gpt-apply-patch/apply.d.ts.map +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/apply.js +55 -11
- package/dist/core/extensions/builtin/gpt-apply-patch/apply.js.map +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/preview-format.d.ts.map +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/preview-format.js +8 -5
- package/dist/core/extensions/builtin/gpt-apply-patch/preview-format.js.map +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/preview.d.ts +2 -0
- package/dist/core/extensions/builtin/gpt-apply-patch/preview.d.ts.map +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/preview.js +39 -7
- package/dist/core/extensions/builtin/gpt-apply-patch/preview.js.map +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/types.d.ts +1 -0
- package/dist/core/extensions/builtin/gpt-apply-patch/types.d.ts.map +1 -1
- package/dist/core/extensions/builtin/gpt-apply-patch/types.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/tools/bash.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/tools/bash.js +22 -10
- package/dist/core/extensions/builtin/terminal/tools/bash.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/tools/foreground-window.d.ts +11 -0
- package/dist/core/extensions/builtin/terminal/tools/foreground-window.d.ts.map +1 -0
- package/dist/core/extensions/builtin/terminal/tools/foreground-window.js +16 -0
- package/dist/core/extensions/builtin/terminal/tools/foreground-window.js.map +1 -0
- package/dist/core/extensions/builtin/terminal/tools/sleep-wait.d.ts +28 -0
- package/dist/core/extensions/builtin/terminal/tools/sleep-wait.d.ts.map +1 -0
- package/dist/core/extensions/builtin/terminal/tools/sleep-wait.js +75 -0
- package/dist/core/extensions/builtin/terminal/tools/sleep-wait.js.map +1 -0
- package/dist/core/extensions/builtin/tps.d.ts.map +1 -1
- package/dist/core/extensions/builtin/tps.js +3 -3
- package/dist/core/extensions/builtin/tps.js.map +1 -1
- package/dist/core/extensions/builtin/ttsr/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/ttsr/index.js +35 -34
- package/dist/core/extensions/builtin/ttsr/index.js.map +1 -1
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +2 -2
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +2 -2
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/retry-fallback/hint-policy.d.ts +14 -0
- package/dist/core/retry-fallback/hint-policy.d.ts.map +1 -1
- package/dist/core/retry-fallback/hint-policy.js +14 -0
- package/dist/core/retry-fallback/hint-policy.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts +0 -1
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js +8 -128
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/assistant-render-descriptors.d.ts +17 -0
- package/dist/modes/interactive/components/assistant-render-descriptors.d.ts.map +1 -0
- package/dist/modes/interactive/components/assistant-render-descriptors.js +133 -0
- package/dist/modes/interactive/components/assistant-render-descriptors.js.map +1 -0
- package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +41 -0
- package/node_modules/@code-yeongyu/senpi-codemode/package.json +4 -4
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/render.ts +2 -1
- package/node_modules/@earendil-works/pi-agent-core/package.json +2 -2
- package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.d.ts +30 -0
- package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js +30 -0
- package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/anthropic.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/huggingface.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/vercel-ai-gateway.json +1 -1
- package/node_modules/@earendil-works/pi-ai/package.json +1 -1
- package/node_modules/@earendil-works/pi-pty/package.json +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/terminal.js +14 -1
- package/node_modules/@earendil-works/pi-tui/dist/terminal.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/package.json +1 -1
- package/package.json +7 -7
|
@@ -56,6 +56,9 @@ function createChangedHunkPreview(lines) {
|
|
|
56
56
|
function formatLineCountSummary(added, removed) {
|
|
57
57
|
return `(+${added} -${removed})`;
|
|
58
58
|
}
|
|
59
|
+
function formatPatchFileSummary(file) {
|
|
60
|
+
return file.binary ? "(binary)" : formatLineCountSummary(file.added, file.removed);
|
|
61
|
+
}
|
|
59
62
|
function countLines(text) {
|
|
60
63
|
if (text.length === 0)
|
|
61
64
|
return 0;
|
|
@@ -109,7 +112,7 @@ export function formatPatchPreview(preview, cwd = process.cwd(), expanded = true
|
|
|
109
112
|
if (preview.files.length === 1) {
|
|
110
113
|
const file = preview.files[0];
|
|
111
114
|
if (file) {
|
|
112
|
-
lines.push(`• ${formatPatchOperation(file.operation)} ${formatPatchFilePath(file, cwd)} ${
|
|
115
|
+
lines.push(`• ${formatPatchOperation(file.operation)} ${formatPatchFilePath(file, cwd)} ${formatPatchFileSummary(file)}`);
|
|
113
116
|
if (expanded && file.diff)
|
|
114
117
|
lines.push(...truncatePreview(file.diff)
|
|
115
118
|
.split("\n")
|
|
@@ -120,7 +123,7 @@ export function formatPatchPreview(preview, cwd = process.cwd(), expanded = true
|
|
|
120
123
|
const noun = preview.files.length === 1 ? "file" : "files";
|
|
121
124
|
lines.push(`• Edited ${preview.files.length} ${noun} ${formatLineCountSummary(preview.added, preview.removed)}`);
|
|
122
125
|
for (const file of preview.files) {
|
|
123
|
-
lines.push(` └ ${formatPatchFilePath(file, cwd)} ${
|
|
126
|
+
lines.push(` └ ${formatPatchFilePath(file, cwd)} ${formatPatchFileSummary(file)}`);
|
|
124
127
|
if (expanded && file.diff)
|
|
125
128
|
lines.push(...truncatePreview(file.diff)
|
|
126
129
|
.split("\n")
|
|
@@ -173,10 +176,10 @@ export function renderPatchPreview(preview, cwd, theme, expanded) {
|
|
|
173
176
|
if (expanded) {
|
|
174
177
|
try {
|
|
175
178
|
const renderFile = (file, headerPrefix) => {
|
|
176
|
-
const header = `• ${formatPatchOperation(file.operation)} ${formatPatchFilePath(file, cwd)} ${
|
|
179
|
+
const header = `• ${formatPatchOperation(file.operation)} ${formatPatchFilePath(file, cwd)} ${formatPatchFileSummary(file)}`;
|
|
177
180
|
if (!file.diff) {
|
|
178
181
|
return headerPrefix.length > 0
|
|
179
|
-
? `${headerPrefix}${formatPatchFilePath(file, cwd)} ${
|
|
182
|
+
? `${headerPrefix}${formatPatchFilePath(file, cwd)} ${formatPatchFileSummary(file)}`
|
|
180
183
|
: header;
|
|
181
184
|
}
|
|
182
185
|
const renderedDiff = renderToolDiff(truncatePreview(file.diff), {
|
|
@@ -184,7 +187,7 @@ export function renderPatchPreview(preview, cwd, theme, expanded) {
|
|
|
184
187
|
theme,
|
|
185
188
|
});
|
|
186
189
|
if (headerPrefix.length > 0) {
|
|
187
|
-
const nestedHeader = `${headerPrefix}${formatPatchFilePath(file, cwd)} ${
|
|
190
|
+
const nestedHeader = `${headerPrefix}${formatPatchFilePath(file, cwd)} ${formatPatchFileSummary(file)}`;
|
|
188
191
|
return `${nestedHeader}\n${renderedDiff
|
|
189
192
|
.split("\n")
|
|
190
193
|
.map((line) => ` ${line}`)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preview-format.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/preview-format.ts"],"names":[],"mappings":"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","sourcesContent":["import path from \"node:path\";\nimport { renderToolDiff } from \"../../../tools/diff-render.ts\";\nimport { parsePatch } from \"./parser.ts\";\nimport { extractPatchedPaths } from \"./text.ts\";\nimport type {\n\tApplyPatchOperation,\n\tApplyPatchPreview,\n\tApplyPatchPreviewFile,\n\tApplyPatchRenderState,\n\tApplyPatchTheme,\n} from \"./types.ts\";\n\nexport const PATCH_PREVIEW_MAX_LINES = 16;\nexport const PATCH_PREVIEW_MAX_CHARS = 4000;\nconst PATCH_PREVIEW_HEAD_LINES = 8;\nconst PATCH_PREVIEW_TAIL_LINES = PATCH_PREVIEW_MAX_LINES - PATCH_PREVIEW_HEAD_LINES - 1;\nconst PATCH_PREVIEW_TRUNCATION_MARKER = \"…\";\nconst applyPatchRenderStates = new Map<string, ApplyPatchRenderState>();\n\nfunction isChangedPreviewLine(line: string): boolean {\n\treturn /^[+-]\\s*\\d+\\s/.test(line);\n}\n\nfunction countWindowLines(lines: string[], start: number, end: number): number {\n\treturn end - start + (start > 0 ? 1 : 0) + (end < lines.length ? 1 : 0);\n}\n\nfunction formatPreviewWindow(lines: string[], start: number, end: number): string {\n\tconst previewLines = lines.slice(start, end);\n\tif (start > 0) previewLines.unshift(\"…\");\n\tif (end < lines.length) previewLines.push(\"…\");\n\treturn previewLines.join(\"\\n\");\n}\n\nfunction createChangedHunkPreview(lines: string[]): string | undefined {\n\tconst firstChangedLine = lines.findIndex(isChangedPreviewLine);\n\tif (firstChangedLine === -1) return undefined;\n\n\tlet start = firstChangedLine;\n\tlet end = firstChangedLine + 1;\n\twhile (end < lines.length) {\n\t\tconst line = lines[end];\n\t\tif (line === undefined || !isChangedPreviewLine(line)) break;\n\t\tend++;\n\t}\n\n\tconst changedHunkEnd = end;\n\twhile (end > start && countWindowLines(lines, start, end) > PATCH_PREVIEW_MAX_LINES) end--;\n\n\twhile (countWindowLines(lines, start, end) < PATCH_PREVIEW_MAX_LINES) {\n\t\tconst canAddBefore = start > 0;\n\t\tconst canAddAfter = end < lines.length;\n\t\tif (!canAddBefore && !canAddAfter) break;\n\n\t\tconst beforeContextLines = firstChangedLine - start;\n\t\tconst afterContextLines = end - changedHunkEnd;\n\t\tif (canAddBefore && (!canAddAfter || beforeContextLines <= afterContextLines)) {\n\t\t\tstart--;\n\t\t} else {\n\t\t\tend++;\n\t\t}\n\t}\n\n\treturn formatPreviewWindow(lines, start, end);\n}\n\nfunction formatLineCountSummary(added: number, removed: number): string {\n\treturn `(+${added} -${removed})`;\n}\n\nfunction countLines(text: string): number {\n\tif (text.length === 0) return 0;\n\tlet lines = 1;\n\tfor (let index = 0; index < text.length; index++) {\n\t\tif (text.charCodeAt(index) === 10) lines += 1;\n\t}\n\treturn lines;\n}\n\nfunction enforcePreviewCharLimit(preview: string): string {\n\tif (preview.length <= PATCH_PREVIEW_MAX_CHARS) return preview;\n\treturn `${preview.slice(0, PATCH_PREVIEW_MAX_CHARS - PATCH_PREVIEW_TRUNCATION_MARKER.length).trimEnd()}${PATCH_PREVIEW_TRUNCATION_MARKER}`;\n}\n\nexport function truncatePreview(text: string): string {\n\tif (text.length <= PATCH_PREVIEW_MAX_CHARS && countLines(text) <= PATCH_PREVIEW_MAX_LINES) return text;\n\tconst lines = text.split(\"\\n\");\n\tconst changedHunkPreview = createChangedHunkPreview(lines);\n\tconst preview =\n\t\tchangedHunkPreview ??\n\t\t[...lines.slice(0, PATCH_PREVIEW_HEAD_LINES), \"…\", ...lines.slice(-PATCH_PREVIEW_TAIL_LINES)].join(\"\\n\");\n\treturn enforcePreviewCharLimit(preview);\n}\n\nexport function displayPath(filePath: string, cwd: string): string {\n\tif (!path.isAbsolute(filePath)) return filePath;\n\tconst absoluteCwd = path.resolve(cwd);\n\tconst relativePath = path.relative(absoluteCwd, filePath);\n\tif (\n\t\trelativePath === \"\" ||\n\t\t(!relativePath.startsWith(`..${path.sep}`) && relativePath !== \"..\" && !path.isAbsolute(relativePath))\n\t) {\n\t\treturn relativePath || \".\";\n\t}\n\treturn filePath;\n}\n\nfunction formatPatchFilePath(file: ApplyPatchPreviewFile, cwd: string = process.cwd()): string {\n\tconst filePath = displayPath(file.filePath, cwd);\n\tif (!file.movePath) return filePath;\n\treturn `${filePath} → ${displayPath(file.movePath, cwd)}`;\n}\n\nfunction formatPatchOperation(operation: ApplyPatchOperation): string {\n\tif (operation === \"add\") return \"Added\";\n\tif (operation === \"delete\") return \"Deleted\";\n\treturn \"Edited\";\n}\n\nexport function formatPatchPreview(\n\tpreview: ApplyPatchPreview,\n\tcwd: string = process.cwd(),\n\texpanded: boolean = true,\n): string {\n\tconst lines: string[] = [];\n\tif (preview.files.length === 1) {\n\t\tconst file = preview.files[0];\n\t\tif (file) {\n\t\t\tlines.push(\n\t\t\t\t`• ${formatPatchOperation(file.operation)} ${formatPatchFilePath(file, cwd)} ${formatLineCountSummary(file.added, file.removed)}`,\n\t\t\t);\n\t\t\tif (expanded && file.diff)\n\t\t\t\tlines.push(\n\t\t\t\t\t...truncatePreview(file.diff)\n\t\t\t\t\t\t.split(\"\\n\")\n\t\t\t\t\t\t.map((line) => ` ${line}`),\n\t\t\t\t);\n\t\t}\n\t\treturn lines.join(\"\\n\");\n\t}\n\n\tconst noun = preview.files.length === 1 ? \"file\" : \"files\";\n\tlines.push(`• Edited ${preview.files.length} ${noun} ${formatLineCountSummary(preview.added, preview.removed)}`);\n\tfor (const file of preview.files) {\n\t\tlines.push(` └ ${formatPatchFilePath(file, cwd)} ${formatLineCountSummary(file.added, file.removed)}`);\n\t\tif (expanded && file.diff)\n\t\t\tlines.push(\n\t\t\t\t...truncatePreview(file.diff)\n\t\t\t\t\t.split(\"\\n\")\n\t\t\t\t\t.map((line) => ` ${line}`),\n\t\t\t);\n\t}\n\treturn lines.join(\"\\n\");\n}\n\nexport function formatInFlightCallText(patchText: string): string {\n\tconst paths = extractPatchedPaths(patchText);\n\tif (paths.length === 0) return \"Patching\";\n\tconst noun = paths.length === 1 ? \"file\" : \"files\";\n\tconst count = paths.length > 1 ? ` (${paths.length} ${noun})` : \"\";\n\treturn `Patching${count}: ${paths.join(\", \")}`;\n}\n\nexport function getApplyPatchRenderState(toolCallId: string, cwd: string, patchText: string): ApplyPatchRenderState {\n\tconst existing = applyPatchRenderStates.get(toolCallId);\n\tif (existing && existing.cwd === cwd && existing.patchText === patchText) return existing;\n\n\tconst callText = formatInFlightCallText(patchText);\n\tlet collapsed = \"\";\n\tlet expanded = \"\";\n\ttry {\n\t\tconst hunks = parsePatch(patchText);\n\t\tif (hunks.length > 0) {\n\t\t\tconst files = hunks.map((hunk) => ({\n\t\t\t\tfilePath: hunk.filePath,\n\t\t\t\tmovePath: hunk.type === \"update\" ? hunk.movePath : undefined,\n\t\t\t\toperation: hunk.type,\n\t\t\t\tdiff: \"\",\n\t\t\t\tadded: 0,\n\t\t\t\tremoved: 0,\n\t\t\t})) satisfies ApplyPatchPreviewFile[];\n\t\t\tconst preview: ApplyPatchPreview = { files, added: 0, removed: 0 };\n\t\t\tcollapsed = formatPatchPreview(preview, cwd, false);\n\t\t\texpanded = formatPatchPreview(preview, cwd, true);\n\t\t}\n\t} catch {\n\t\t// ignore incomplete patch text\n\t}\n\n\tconst nextState: ApplyPatchRenderState = { ...existing, cwd, patchText, callText, collapsed, expanded };\n\tapplyPatchRenderStates.set(toolCallId, nextState);\n\treturn nextState;\n}\n\nexport function clearApplyPatchRenderState(): void {\n\tapplyPatchRenderStates.clear();\n}\n\nexport function renderPatchPreview(\n\tpreview: ApplyPatchPreview,\n\tcwd: string,\n\ttheme: ApplyPatchTheme,\n\texpanded: boolean,\n): string {\n\tif (expanded) {\n\t\ttry {\n\t\t\tconst renderFile = (file: ApplyPatchPreviewFile, headerPrefix: string): string => {\n\t\t\t\tconst header = `• ${formatPatchOperation(file.operation)} ${formatPatchFilePath(file, cwd)} ${formatLineCountSummary(file.added, file.removed)}`;\n\t\t\t\tif (!file.diff) {\n\t\t\t\t\treturn headerPrefix.length > 0\n\t\t\t\t\t\t? `${headerPrefix}${formatPatchFilePath(file, cwd)} ${formatLineCountSummary(file.added, file.removed)}`\n\t\t\t\t\t\t: header;\n\t\t\t\t}\n\n\t\t\t\tconst renderedDiff = renderToolDiff(truncatePreview(file.diff), {\n\t\t\t\t\tfilePath: file.movePath ?? file.filePath,\n\t\t\t\t\ttheme,\n\t\t\t\t});\n\t\t\t\tif (headerPrefix.length > 0) {\n\t\t\t\t\tconst nestedHeader = `${headerPrefix}${formatPatchFilePath(file, cwd)} ${formatLineCountSummary(file.added, file.removed)}`;\n\t\t\t\t\treturn `${nestedHeader}\\n${renderedDiff\n\t\t\t\t\t\t.split(\"\\n\")\n\t\t\t\t\t\t.map((line) => ` ${line}`)\n\t\t\t\t\t\t.join(\"\\n\")}`;\n\t\t\t\t}\n\t\t\t\treturn `${header}\\n${renderedDiff}`;\n\t\t\t};\n\n\t\t\tif (preview.files.length === 1) {\n\t\t\t\tconst file = preview.files[0];\n\t\t\t\treturn file ? renderFile(file, \"\") : \"\";\n\t\t\t}\n\n\t\t\tconst noun = preview.files.length === 1 ? \"file\" : \"files\";\n\t\t\tconst renderedFiles = preview.files.map((file) => renderFile(file, \" └ \")).join(\"\\n\");\n\t\t\tif (renderedFiles.length > 0) {\n\t\t\t\treturn `• Edited ${preview.files.length} ${noun} ${formatLineCountSummary(preview.added, preview.removed)}\\n${renderedFiles}`;\n\t\t\t}\n\t\t} catch {\n\t\t\t// fall back to manual themed line rendering\n\t\t}\n\t}\n\n\treturn formatPatchPreview(preview, cwd, expanded)\n\t\t.split(\"\\n\")\n\t\t.map((line) => renderPatchLine(line, theme))\n\t\t.join(\"\\n\");\n}\n\nexport function formatPendingPatchPaths(patchText: string): string {\n\tconst paths = extractPatchedPaths(patchText);\n\tif (paths.length === 0) return \"Applying patch...\";\n\treturn `Applying patch...\\n${paths.map((filePath) => `• ${filePath}`).join(\"\\n\")}`;\n}\n\nexport function renderPatchLine(line: string, theme: ApplyPatchTheme): string {\n\tconst trimmed = line.trimStart();\n\tif (trimmed.startsWith(\"+\")) return theme.fg(\"toolDiffAdded\", line);\n\tif (trimmed.startsWith(\"-\")) return theme.fg(\"toolDiffRemoved\", line);\n\tif (trimmed.startsWith(\"•\")) return theme.fg(\"toolTitle\", theme.bold(line));\n\tif (trimmed.startsWith(\"└\")) return theme.fg(\"accent\", line);\n\treturn theme.fg(\"toolDiffContext\", line);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"preview-format.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/preview-format.ts"],"names":[],"mappings":"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","sourcesContent":["import path from \"node:path\";\nimport { renderToolDiff } from \"../../../tools/diff-render.ts\";\nimport { parsePatch } from \"./parser.ts\";\nimport { extractPatchedPaths } from \"./text.ts\";\nimport type {\n\tApplyPatchOperation,\n\tApplyPatchPreview,\n\tApplyPatchPreviewFile,\n\tApplyPatchRenderState,\n\tApplyPatchTheme,\n} from \"./types.ts\";\n\nexport const PATCH_PREVIEW_MAX_LINES = 16;\nexport const PATCH_PREVIEW_MAX_CHARS = 4000;\nconst PATCH_PREVIEW_HEAD_LINES = 8;\nconst PATCH_PREVIEW_TAIL_LINES = PATCH_PREVIEW_MAX_LINES - PATCH_PREVIEW_HEAD_LINES - 1;\nconst PATCH_PREVIEW_TRUNCATION_MARKER = \"…\";\nconst applyPatchRenderStates = new Map<string, ApplyPatchRenderState>();\n\nfunction isChangedPreviewLine(line: string): boolean {\n\treturn /^[+-]\\s*\\d+\\s/.test(line);\n}\n\nfunction countWindowLines(lines: string[], start: number, end: number): number {\n\treturn end - start + (start > 0 ? 1 : 0) + (end < lines.length ? 1 : 0);\n}\n\nfunction formatPreviewWindow(lines: string[], start: number, end: number): string {\n\tconst previewLines = lines.slice(start, end);\n\tif (start > 0) previewLines.unshift(\"…\");\n\tif (end < lines.length) previewLines.push(\"…\");\n\treturn previewLines.join(\"\\n\");\n}\n\nfunction createChangedHunkPreview(lines: string[]): string | undefined {\n\tconst firstChangedLine = lines.findIndex(isChangedPreviewLine);\n\tif (firstChangedLine === -1) return undefined;\n\n\tlet start = firstChangedLine;\n\tlet end = firstChangedLine + 1;\n\twhile (end < lines.length) {\n\t\tconst line = lines[end];\n\t\tif (line === undefined || !isChangedPreviewLine(line)) break;\n\t\tend++;\n\t}\n\n\tconst changedHunkEnd = end;\n\twhile (end > start && countWindowLines(lines, start, end) > PATCH_PREVIEW_MAX_LINES) end--;\n\n\twhile (countWindowLines(lines, start, end) < PATCH_PREVIEW_MAX_LINES) {\n\t\tconst canAddBefore = start > 0;\n\t\tconst canAddAfter = end < lines.length;\n\t\tif (!canAddBefore && !canAddAfter) break;\n\n\t\tconst beforeContextLines = firstChangedLine - start;\n\t\tconst afterContextLines = end - changedHunkEnd;\n\t\tif (canAddBefore && (!canAddAfter || beforeContextLines <= afterContextLines)) {\n\t\t\tstart--;\n\t\t} else {\n\t\t\tend++;\n\t\t}\n\t}\n\n\treturn formatPreviewWindow(lines, start, end);\n}\n\nfunction formatLineCountSummary(added: number, removed: number): string {\n\treturn `(+${added} -${removed})`;\n}\n\nfunction formatPatchFileSummary(file: ApplyPatchPreviewFile): string {\n\treturn file.binary ? \"(binary)\" : formatLineCountSummary(file.added, file.removed);\n}\n\nfunction countLines(text: string): number {\n\tif (text.length === 0) return 0;\n\tlet lines = 1;\n\tfor (let index = 0; index < text.length; index++) {\n\t\tif (text.charCodeAt(index) === 10) lines += 1;\n\t}\n\treturn lines;\n}\n\nfunction enforcePreviewCharLimit(preview: string): string {\n\tif (preview.length <= PATCH_PREVIEW_MAX_CHARS) return preview;\n\treturn `${preview.slice(0, PATCH_PREVIEW_MAX_CHARS - PATCH_PREVIEW_TRUNCATION_MARKER.length).trimEnd()}${PATCH_PREVIEW_TRUNCATION_MARKER}`;\n}\n\nexport function truncatePreview(text: string): string {\n\tif (text.length <= PATCH_PREVIEW_MAX_CHARS && countLines(text) <= PATCH_PREVIEW_MAX_LINES) return text;\n\tconst lines = text.split(\"\\n\");\n\tconst changedHunkPreview = createChangedHunkPreview(lines);\n\tconst preview =\n\t\tchangedHunkPreview ??\n\t\t[...lines.slice(0, PATCH_PREVIEW_HEAD_LINES), \"…\", ...lines.slice(-PATCH_PREVIEW_TAIL_LINES)].join(\"\\n\");\n\treturn enforcePreviewCharLimit(preview);\n}\n\nexport function displayPath(filePath: string, cwd: string): string {\n\tif (!path.isAbsolute(filePath)) return filePath;\n\tconst absoluteCwd = path.resolve(cwd);\n\tconst relativePath = path.relative(absoluteCwd, filePath);\n\tif (\n\t\trelativePath === \"\" ||\n\t\t(!relativePath.startsWith(`..${path.sep}`) && relativePath !== \"..\" && !path.isAbsolute(relativePath))\n\t) {\n\t\treturn relativePath || \".\";\n\t}\n\treturn filePath;\n}\n\nfunction formatPatchFilePath(file: ApplyPatchPreviewFile, cwd: string = process.cwd()): string {\n\tconst filePath = displayPath(file.filePath, cwd);\n\tif (!file.movePath) return filePath;\n\treturn `${filePath} → ${displayPath(file.movePath, cwd)}`;\n}\n\nfunction formatPatchOperation(operation: ApplyPatchOperation): string {\n\tif (operation === \"add\") return \"Added\";\n\tif (operation === \"delete\") return \"Deleted\";\n\treturn \"Edited\";\n}\n\nexport function formatPatchPreview(\n\tpreview: ApplyPatchPreview,\n\tcwd: string = process.cwd(),\n\texpanded: boolean = true,\n): string {\n\tconst lines: string[] = [];\n\tif (preview.files.length === 1) {\n\t\tconst file = preview.files[0];\n\t\tif (file) {\n\t\t\tlines.push(\n\t\t\t\t`• ${formatPatchOperation(file.operation)} ${formatPatchFilePath(file, cwd)} ${formatPatchFileSummary(file)}`,\n\t\t\t);\n\t\t\tif (expanded && file.diff)\n\t\t\t\tlines.push(\n\t\t\t\t\t...truncatePreview(file.diff)\n\t\t\t\t\t\t.split(\"\\n\")\n\t\t\t\t\t\t.map((line) => ` ${line}`),\n\t\t\t\t);\n\t\t}\n\t\treturn lines.join(\"\\n\");\n\t}\n\n\tconst noun = preview.files.length === 1 ? \"file\" : \"files\";\n\tlines.push(`• Edited ${preview.files.length} ${noun} ${formatLineCountSummary(preview.added, preview.removed)}`);\n\tfor (const file of preview.files) {\n\t\tlines.push(` └ ${formatPatchFilePath(file, cwd)} ${formatPatchFileSummary(file)}`);\n\t\tif (expanded && file.diff)\n\t\t\tlines.push(\n\t\t\t\t...truncatePreview(file.diff)\n\t\t\t\t\t.split(\"\\n\")\n\t\t\t\t\t.map((line) => ` ${line}`),\n\t\t\t);\n\t}\n\treturn lines.join(\"\\n\");\n}\n\nexport function formatInFlightCallText(patchText: string): string {\n\tconst paths = extractPatchedPaths(patchText);\n\tif (paths.length === 0) return \"Patching\";\n\tconst noun = paths.length === 1 ? \"file\" : \"files\";\n\tconst count = paths.length > 1 ? ` (${paths.length} ${noun})` : \"\";\n\treturn `Patching${count}: ${paths.join(\", \")}`;\n}\n\nexport function getApplyPatchRenderState(toolCallId: string, cwd: string, patchText: string): ApplyPatchRenderState {\n\tconst existing = applyPatchRenderStates.get(toolCallId);\n\tif (existing && existing.cwd === cwd && existing.patchText === patchText) return existing;\n\n\tconst callText = formatInFlightCallText(patchText);\n\tlet collapsed = \"\";\n\tlet expanded = \"\";\n\ttry {\n\t\tconst hunks = parsePatch(patchText);\n\t\tif (hunks.length > 0) {\n\t\t\tconst files = hunks.map((hunk) => ({\n\t\t\t\tfilePath: hunk.filePath,\n\t\t\t\tmovePath: hunk.type === \"update\" ? hunk.movePath : undefined,\n\t\t\t\toperation: hunk.type,\n\t\t\t\tdiff: \"\",\n\t\t\t\tadded: 0,\n\t\t\t\tremoved: 0,\n\t\t\t})) satisfies ApplyPatchPreviewFile[];\n\t\t\tconst preview: ApplyPatchPreview = { files, added: 0, removed: 0 };\n\t\t\tcollapsed = formatPatchPreview(preview, cwd, false);\n\t\t\texpanded = formatPatchPreview(preview, cwd, true);\n\t\t}\n\t} catch {\n\t\t// ignore incomplete patch text\n\t}\n\n\tconst nextState: ApplyPatchRenderState = { ...existing, cwd, patchText, callText, collapsed, expanded };\n\tapplyPatchRenderStates.set(toolCallId, nextState);\n\treturn nextState;\n}\n\nexport function clearApplyPatchRenderState(): void {\n\tapplyPatchRenderStates.clear();\n}\n\nexport function renderPatchPreview(\n\tpreview: ApplyPatchPreview,\n\tcwd: string,\n\ttheme: ApplyPatchTheme,\n\texpanded: boolean,\n): string {\n\tif (expanded) {\n\t\ttry {\n\t\t\tconst renderFile = (file: ApplyPatchPreviewFile, headerPrefix: string): string => {\n\t\t\t\tconst header = `• ${formatPatchOperation(file.operation)} ${formatPatchFilePath(file, cwd)} ${formatPatchFileSummary(file)}`;\n\t\t\t\tif (!file.diff) {\n\t\t\t\t\treturn headerPrefix.length > 0\n\t\t\t\t\t\t? `${headerPrefix}${formatPatchFilePath(file, cwd)} ${formatPatchFileSummary(file)}`\n\t\t\t\t\t\t: header;\n\t\t\t\t}\n\n\t\t\t\tconst renderedDiff = renderToolDiff(truncatePreview(file.diff), {\n\t\t\t\t\tfilePath: file.movePath ?? file.filePath,\n\t\t\t\t\ttheme,\n\t\t\t\t});\n\t\t\t\tif (headerPrefix.length > 0) {\n\t\t\t\t\tconst nestedHeader = `${headerPrefix}${formatPatchFilePath(file, cwd)} ${formatPatchFileSummary(file)}`;\n\t\t\t\t\treturn `${nestedHeader}\\n${renderedDiff\n\t\t\t\t\t\t.split(\"\\n\")\n\t\t\t\t\t\t.map((line) => ` ${line}`)\n\t\t\t\t\t\t.join(\"\\n\")}`;\n\t\t\t\t}\n\t\t\t\treturn `${header}\\n${renderedDiff}`;\n\t\t\t};\n\n\t\t\tif (preview.files.length === 1) {\n\t\t\t\tconst file = preview.files[0];\n\t\t\t\treturn file ? renderFile(file, \"\") : \"\";\n\t\t\t}\n\n\t\t\tconst noun = preview.files.length === 1 ? \"file\" : \"files\";\n\t\t\tconst renderedFiles = preview.files.map((file) => renderFile(file, \" └ \")).join(\"\\n\");\n\t\t\tif (renderedFiles.length > 0) {\n\t\t\t\treturn `• Edited ${preview.files.length} ${noun} ${formatLineCountSummary(preview.added, preview.removed)}\\n${renderedFiles}`;\n\t\t\t}\n\t\t} catch {\n\t\t\t// fall back to manual themed line rendering\n\t\t}\n\t}\n\n\treturn formatPatchPreview(preview, cwd, expanded)\n\t\t.split(\"\\n\")\n\t\t.map((line) => renderPatchLine(line, theme))\n\t\t.join(\"\\n\");\n}\n\nexport function formatPendingPatchPaths(patchText: string): string {\n\tconst paths = extractPatchedPaths(patchText);\n\tif (paths.length === 0) return \"Applying patch...\";\n\treturn `Applying patch...\\n${paths.map((filePath) => `• ${filePath}`).join(\"\\n\")}`;\n}\n\nexport function renderPatchLine(line: string, theme: ApplyPatchTheme): string {\n\tconst trimmed = line.trimStart();\n\tif (trimmed.startsWith(\"+\")) return theme.fg(\"toolDiffAdded\", line);\n\tif (trimmed.startsWith(\"-\")) return theme.fg(\"toolDiffRemoved\", line);\n\tif (trimmed.startsWith(\"•\")) return theme.fg(\"toolTitle\", theme.bold(line));\n\tif (trimmed.startsWith(\"└\")) return theme.fg(\"accent\", line);\n\treturn theme.fg(\"toolDiffContext\", line);\n}\n"]}
|
|
@@ -2,6 +2,8 @@ import type { ApplyPatchPreview, ApplyPatchPreviewFile, ApplyPatchProgress, Appl
|
|
|
2
2
|
export type PatchFileSnapshot = {
|
|
3
3
|
readonly exists: boolean;
|
|
4
4
|
readonly content: string;
|
|
5
|
+
readonly binary?: true;
|
|
6
|
+
readonly bytes?: Uint8Array;
|
|
5
7
|
};
|
|
6
8
|
export declare function readPatchFileSnapshot(absolutePath: string): Promise<PatchFileSnapshot>;
|
|
7
9
|
export declare function buildPatchPreviewFile(input: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preview.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/preview.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACX,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,qBAAqB,EACrB,WAAW,EACX,MAAM,YAAY,CAAC;AAGpB,MAAM,MAAM,iBAAiB,GAAG;IAC/B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"preview.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/preview.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACX,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,qBAAqB,EACrB,WAAW,EACX,MAAM,YAAY,CAAC;AAGpB,MAAM,MAAM,iBAAiB,GAAG;IAC/B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;CAC5B,CAAC;AAEF,wBAAsB,qBAAqB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAkB5F;AAuBD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAC5C,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,eAAe,CAAC,EAAE,iBAAiB,CAAC;CAC7C,GAAG,qBAAqB,CAgDxB;AAuDD,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAgBtG;AAED,wBAAsB,wBAAwB,CAC7C,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,kBAAkB,EAC7B,eAAe,CAAC,EAAE,iBAAiB,GACjC,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,qBAAqB,GAAG,SAAS,CAAA;CAAE,CAAC,CAyBvE"}
|
|
@@ -7,7 +7,18 @@ import { formatPatchPreview, formatPendingPatchPaths } from "./preview-format.js
|
|
|
7
7
|
import { resolvePatchPath } from "./workspace.js";
|
|
8
8
|
export async function readPatchFileSnapshot(absolutePath) {
|
|
9
9
|
try {
|
|
10
|
-
|
|
10
|
+
const bytes = await readFile(absolutePath);
|
|
11
|
+
if (bytes.includes(0))
|
|
12
|
+
return { exists: true, content: "", binary: true, bytes };
|
|
13
|
+
try {
|
|
14
|
+
return {
|
|
15
|
+
exists: true,
|
|
16
|
+
content: new TextDecoder("utf-8", { fatal: true }).decode(bytes),
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return { exists: true, content: "", binary: true, bytes };
|
|
21
|
+
}
|
|
11
22
|
}
|
|
12
23
|
catch (error) {
|
|
13
24
|
if (error && typeof error === "object" && "code" in error && error.code === "ENOENT") {
|
|
@@ -31,6 +42,17 @@ function createMovePatch(input) {
|
|
|
31
42
|
}
|
|
32
43
|
export function buildPatchPreviewFile(input) {
|
|
33
44
|
const { hunk, source, newContent, moveDestination } = input;
|
|
45
|
+
if (source.binary || moveDestination?.binary) {
|
|
46
|
+
return {
|
|
47
|
+
filePath: hunk.filePath,
|
|
48
|
+
...(hunk.type === "update" && hunk.movePath ? { movePath: hunk.movePath } : {}),
|
|
49
|
+
operation: hunk.type === "add" && source.exists ? "update" : hunk.type,
|
|
50
|
+
binary: true,
|
|
51
|
+
diff: "",
|
|
52
|
+
added: 0,
|
|
53
|
+
removed: 0,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
34
56
|
switch (hunk.type) {
|
|
35
57
|
case "add": {
|
|
36
58
|
const operation = source.exists ? "update" : "add";
|
|
@@ -70,22 +92,32 @@ async function createPatchPreviewFile(cwd, hunk) {
|
|
|
70
92
|
return buildPatchPreviewFile({ hunk, source, newContent: hunk.content });
|
|
71
93
|
}
|
|
72
94
|
case "delete": {
|
|
73
|
-
const
|
|
95
|
+
const source = await readPatchFileSnapshot(absolutePath);
|
|
74
96
|
return buildPatchPreviewFile({
|
|
75
97
|
hunk,
|
|
76
|
-
source
|
|
98
|
+
source,
|
|
77
99
|
newContent: "",
|
|
78
100
|
});
|
|
79
101
|
}
|
|
80
102
|
case "update": {
|
|
81
|
-
const
|
|
82
|
-
const newContent = hunk.chunks.length === 0 ? oldContent : replaceChunks(oldContent, hunk.filePath, hunk.chunks).content;
|
|
103
|
+
const source = await readPatchFileSnapshot(absolutePath);
|
|
83
104
|
const moveDestination = hunk.movePath && hunk.movePath !== hunk.filePath
|
|
84
105
|
? await readPatchFileSnapshot(resolvePatchPath(cwd, hunk.movePath))
|
|
85
106
|
: undefined;
|
|
107
|
+
if (source.binary || moveDestination?.binary) {
|
|
108
|
+
return buildPatchPreviewFile({
|
|
109
|
+
hunk,
|
|
110
|
+
source,
|
|
111
|
+
newContent: "",
|
|
112
|
+
...(moveDestination ? { moveDestination } : {}),
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
const newContent = hunk.chunks.length === 0
|
|
116
|
+
? source.content
|
|
117
|
+
: replaceChunks(source.content, hunk.filePath, hunk.chunks).content;
|
|
86
118
|
return buildPatchPreviewFile({
|
|
87
119
|
hunk,
|
|
88
|
-
source
|
|
120
|
+
source,
|
|
89
121
|
newContent,
|
|
90
122
|
...(moveDestination ? { moveDestination } : {}),
|
|
91
123
|
});
|
|
@@ -97,7 +129,7 @@ async function createPatchPreviewFile(cwd, hunk) {
|
|
|
97
129
|
}
|
|
98
130
|
}
|
|
99
131
|
function hasPreviewChange(file) {
|
|
100
|
-
return file.operation !== "update" || file.movePath !== undefined || file.diff.trim().length > 0;
|
|
132
|
+
return (file.binary === true || file.operation !== "update" || file.movePath !== undefined || file.diff.trim().length > 0);
|
|
101
133
|
}
|
|
102
134
|
export async function createPatchPreview(cwd, hunks) {
|
|
103
135
|
const files = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preview.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/preview.ts"],"names":[],"mappings":"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","sourcesContent":["import { readFile } from \"node:fs/promises\";\nimport { createUnifiedPatch } from \"../../../tools/unified-diff.ts\";\nimport { parsePatch } from \"./parser.ts\";\nimport { createPatchDiff } from \"./patch-diff.ts\";\nimport { replaceChunks } from \"./patch-replace.ts\";\nimport { formatPatchPreview, formatPendingPatchPaths } from \"./preview-format.ts\";\nimport type {\n\tApplyPatchPreview,\n\tApplyPatchPreviewFile,\n\tApplyPatchProgress,\n\tApplyPatchToolDetails,\n\tParsedPatch,\n} from \"./types.ts\";\nimport { resolvePatchPath } from \"./workspace.ts\";\n\nexport type PatchFileSnapshot = {\n\treadonly exists: boolean;\n\treadonly content: string;\n};\n\nexport async function readPatchFileSnapshot(absolutePath: string): Promise<PatchFileSnapshot> {\n\ttry {\n\t\treturn { exists: true, content: await readFile(absolutePath, \"utf-8\") };\n\t} catch (error) {\n\t\tif (error && typeof error === \"object\" && \"code\" in error && error.code === \"ENOENT\") {\n\t\t\treturn { exists: false, content: \"\" };\n\t\t}\n\t\tthrow error;\n\t}\n}\n\ntype MovePatchInput = {\n\treadonly hunk: Extract<ParsedPatch, { type: \"update\" }>;\n\treadonly oldContent: string;\n\treadonly newContent: string;\n\treadonly moveDestination: PatchFileSnapshot | undefined;\n};\n\nfunction createMovePatch(input: MovePatchInput): string {\n\tconst { hunk, oldContent, newContent, moveDestination } = input;\n\tif (!hunk.movePath || hunk.movePath === hunk.filePath) {\n\t\treturn createUnifiedPatch(hunk.filePath, hunk.movePath ?? hunk.filePath, oldContent, newContent);\n\t}\n\tconst sourcePatch = createUnifiedPatch(`a/${hunk.filePath}`, \"/dev/null\", oldContent, \"\");\n\tconst destinationPatch = moveDestination?.exists\n\t\t? moveDestination.content === newContent\n\t\t\t? \"\"\n\t\t\t: createUnifiedPatch(`a/${hunk.movePath}`, `b/${hunk.movePath}`, moveDestination.content, newContent)\n\t\t: createUnifiedPatch(\"/dev/null\", `b/${hunk.movePath}`, \"\", newContent);\n\treturn `${sourcePatch}${destinationPatch}`;\n}\n\nexport function buildPatchPreviewFile(input: {\n\treadonly hunk: ParsedPatch;\n\treadonly source: PatchFileSnapshot;\n\treadonly newContent: string;\n\treadonly moveDestination?: PatchFileSnapshot;\n}): ApplyPatchPreviewFile {\n\tconst { hunk, source, newContent, moveDestination } = input;\n\tswitch (hunk.type) {\n\t\tcase \"add\": {\n\t\t\tconst operation = source.exists ? \"update\" : \"add\";\n\t\t\treturn {\n\t\t\t\tfilePath: hunk.filePath,\n\t\t\t\toperation,\n\t\t\t\tpatch: createUnifiedPatch(\n\t\t\t\t\toperation === \"add\" ? \"/dev/null\" : hunk.filePath,\n\t\t\t\t\thunk.filePath,\n\t\t\t\t\tsource.content,\n\t\t\t\t\tnewContent,\n\t\t\t\t),\n\t\t\t\t...createPatchDiff(source.content, newContent),\n\t\t\t};\n\t\t}\n\t\tcase \"delete\":\n\t\t\treturn {\n\t\t\t\tfilePath: hunk.filePath,\n\t\t\t\toperation: \"delete\",\n\t\t\t\tpatch: createUnifiedPatch(hunk.filePath, \"/dev/null\", source.content, \"\"),\n\t\t\t\t...createPatchDiff(source.content, \"\"),\n\t\t\t};\n\t\tcase \"update\":\n\t\t\treturn {\n\t\t\t\tfilePath: hunk.filePath,\n\t\t\t\tmovePath: hunk.movePath,\n\t\t\t\toperation: \"update\",\n\t\t\t\tpatch: createMovePatch({ hunk, oldContent: source.content, newContent, moveDestination }),\n\t\t\t\t...createPatchDiff(source.content, newContent),\n\t\t\t};\n\t\tdefault: {\n\t\t\tconst exhaustive: never = hunk;\n\t\t\treturn exhaustive;\n\t\t}\n\t}\n}\n\nasync function createPatchPreviewFile(cwd: string, hunk: ParsedPatch): Promise<ApplyPatchPreviewFile> {\n\tconst absolutePath = resolvePatchPath(cwd, hunk.filePath);\n\tswitch (hunk.type) {\n\t\tcase \"add\": {\n\t\t\tconst source = await readPatchFileSnapshot(absolutePath);\n\t\t\treturn buildPatchPreviewFile({ hunk, source, newContent: hunk.content });\n\t\t}\n\t\tcase \"delete\": {\n\t\t\tconst oldContent = await readFile(absolutePath, \"utf-8\");\n\t\t\treturn buildPatchPreviewFile({\n\t\t\t\thunk,\n\t\t\t\tsource: { exists: true, content: oldContent },\n\t\t\t\tnewContent: \"\",\n\t\t\t});\n\t\t}\n\t\tcase \"update\": {\n\t\t\tconst oldContent = await readFile(absolutePath, \"utf-8\");\n\t\t\tconst newContent =\n\t\t\t\thunk.chunks.length === 0 ? oldContent : replaceChunks(oldContent, hunk.filePath, hunk.chunks).content;\n\t\t\tconst moveDestination =\n\t\t\t\thunk.movePath && hunk.movePath !== hunk.filePath\n\t\t\t\t\t? await readPatchFileSnapshot(resolvePatchPath(cwd, hunk.movePath))\n\t\t\t\t\t: undefined;\n\t\t\treturn buildPatchPreviewFile({\n\t\t\t\thunk,\n\t\t\t\tsource: { exists: true, content: oldContent },\n\t\t\t\tnewContent,\n\t\t\t\t...(moveDestination ? { moveDestination } : {}),\n\t\t\t});\n\t\t}\n\t\tdefault: {\n\t\t\tconst exhaustive: never = hunk;\n\t\t\treturn exhaustive;\n\t\t}\n\t}\n}\n\nfunction hasPreviewChange(file: ApplyPatchPreviewFile): boolean {\n\treturn file.operation !== \"update\" || file.movePath !== undefined || file.diff.trim().length > 0;\n}\n\nexport async function createPatchPreview(cwd: string, hunks: ParsedPatch[]): Promise<ApplyPatchPreview> {\n\tconst files: ApplyPatchPreviewFile[] = [];\n\tfor (const hunk of hunks) {\n\t\ttry {\n\t\t\tfiles.push(await createPatchPreviewFile(cwd, hunk));\n\t\t} catch (error) {\n\t\t\tif (error instanceof Error) continue;\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\treturn {\n\t\tfiles,\n\t\tadded: files.reduce((sum, file) => sum + file.added, 0),\n\t\tremoved: files.reduce((sum, file) => sum + file.removed, 0),\n\t};\n}\n\nexport async function createPendingPatchUpdate(\n\tcwd: string,\n\tpatchText: string,\n\tprogress?: ApplyPatchProgress,\n\tpreviewOverride?: ApplyPatchPreview,\n): Promise<{ text: string; details: ApplyPatchToolDetails | undefined }> {\n\tconst title = progress\n\t\t? `Applying patch (${progress.applied + progress.failed}/${progress.total})...`\n\t\t: \"Applying patch...\";\n\tif (previewOverride) {\n\t\treturn {\n\t\t\ttext: `${title}\\n${formatPatchPreview(previewOverride)}`,\n\t\t\tdetails: { preview: previewOverride, progress },\n\t\t};\n\t}\n\n\ttry {\n\t\tconst hunks = parsePatch(patchText);\n\t\tif (hunks.length === 0) return { text: title, details: progress ? { progress } : undefined };\n\t\tconst preview = await createPatchPreview(cwd, hunks);\n\t\tif (preview.files.some(hasPreviewChange)) {\n\t\t\treturn { text: `${title}\\n${formatPatchPreview(preview)}`, details: { preview, progress } };\n\t\t}\n\t} catch {\n\t\treturn {\n\t\t\ttext: progress ? title : formatPendingPatchPaths(patchText),\n\t\t\tdetails: progress ? { progress } : undefined,\n\t\t};\n\t}\n\treturn { text: progress ? title : formatPendingPatchPaths(patchText), details: progress ? { progress } : undefined };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"preview.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/preview.ts"],"names":[],"mappings":"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","sourcesContent":["import { readFile } from \"node:fs/promises\";\nimport { createUnifiedPatch } from \"../../../tools/unified-diff.ts\";\nimport { parsePatch } from \"./parser.ts\";\nimport { createPatchDiff } from \"./patch-diff.ts\";\nimport { replaceChunks } from \"./patch-replace.ts\";\nimport { formatPatchPreview, formatPendingPatchPaths } from \"./preview-format.ts\";\nimport type {\n\tApplyPatchPreview,\n\tApplyPatchPreviewFile,\n\tApplyPatchProgress,\n\tApplyPatchToolDetails,\n\tParsedPatch,\n} from \"./types.ts\";\nimport { resolvePatchPath } from \"./workspace.ts\";\n\nexport type PatchFileSnapshot = {\n\treadonly exists: boolean;\n\treadonly content: string;\n\treadonly binary?: true;\n\treadonly bytes?: Uint8Array;\n};\n\nexport async function readPatchFileSnapshot(absolutePath: string): Promise<PatchFileSnapshot> {\n\ttry {\n\t\tconst bytes = await readFile(absolutePath);\n\t\tif (bytes.includes(0)) return { exists: true, content: \"\", binary: true, bytes };\n\t\ttry {\n\t\t\treturn {\n\t\t\t\texists: true,\n\t\t\t\tcontent: new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes),\n\t\t\t};\n\t\t} catch {\n\t\t\treturn { exists: true, content: \"\", binary: true, bytes };\n\t\t}\n\t} catch (error) {\n\t\tif (error && typeof error === \"object\" && \"code\" in error && error.code === \"ENOENT\") {\n\t\t\treturn { exists: false, content: \"\" };\n\t\t}\n\t\tthrow error;\n\t}\n}\n\ntype MovePatchInput = {\n\treadonly hunk: Extract<ParsedPatch, { type: \"update\" }>;\n\treadonly oldContent: string;\n\treadonly newContent: string;\n\treadonly moveDestination: PatchFileSnapshot | undefined;\n};\n\nfunction createMovePatch(input: MovePatchInput): string {\n\tconst { hunk, oldContent, newContent, moveDestination } = input;\n\tif (!hunk.movePath || hunk.movePath === hunk.filePath) {\n\t\treturn createUnifiedPatch(hunk.filePath, hunk.movePath ?? hunk.filePath, oldContent, newContent);\n\t}\n\tconst sourcePatch = createUnifiedPatch(`a/${hunk.filePath}`, \"/dev/null\", oldContent, \"\");\n\tconst destinationPatch = moveDestination?.exists\n\t\t? moveDestination.content === newContent\n\t\t\t? \"\"\n\t\t\t: createUnifiedPatch(`a/${hunk.movePath}`, `b/${hunk.movePath}`, moveDestination.content, newContent)\n\t\t: createUnifiedPatch(\"/dev/null\", `b/${hunk.movePath}`, \"\", newContent);\n\treturn `${sourcePatch}${destinationPatch}`;\n}\n\nexport function buildPatchPreviewFile(input: {\n\treadonly hunk: ParsedPatch;\n\treadonly source: PatchFileSnapshot;\n\treadonly newContent: string;\n\treadonly moveDestination?: PatchFileSnapshot;\n}): ApplyPatchPreviewFile {\n\tconst { hunk, source, newContent, moveDestination } = input;\n\tif (source.binary || moveDestination?.binary) {\n\t\treturn {\n\t\t\tfilePath: hunk.filePath,\n\t\t\t...(hunk.type === \"update\" && hunk.movePath ? { movePath: hunk.movePath } : {}),\n\t\t\toperation: hunk.type === \"add\" && source.exists ? \"update\" : hunk.type,\n\t\t\tbinary: true,\n\t\t\tdiff: \"\",\n\t\t\tadded: 0,\n\t\t\tremoved: 0,\n\t\t};\n\t}\n\tswitch (hunk.type) {\n\t\tcase \"add\": {\n\t\t\tconst operation = source.exists ? \"update\" : \"add\";\n\t\t\treturn {\n\t\t\t\tfilePath: hunk.filePath,\n\t\t\t\toperation,\n\t\t\t\tpatch: createUnifiedPatch(\n\t\t\t\t\toperation === \"add\" ? \"/dev/null\" : hunk.filePath,\n\t\t\t\t\thunk.filePath,\n\t\t\t\t\tsource.content,\n\t\t\t\t\tnewContent,\n\t\t\t\t),\n\t\t\t\t...createPatchDiff(source.content, newContent),\n\t\t\t};\n\t\t}\n\t\tcase \"delete\":\n\t\t\treturn {\n\t\t\t\tfilePath: hunk.filePath,\n\t\t\t\toperation: \"delete\",\n\t\t\t\tpatch: createUnifiedPatch(hunk.filePath, \"/dev/null\", source.content, \"\"),\n\t\t\t\t...createPatchDiff(source.content, \"\"),\n\t\t\t};\n\t\tcase \"update\":\n\t\t\treturn {\n\t\t\t\tfilePath: hunk.filePath,\n\t\t\t\tmovePath: hunk.movePath,\n\t\t\t\toperation: \"update\",\n\t\t\t\tpatch: createMovePatch({ hunk, oldContent: source.content, newContent, moveDestination }),\n\t\t\t\t...createPatchDiff(source.content, newContent),\n\t\t\t};\n\t\tdefault: {\n\t\t\tconst exhaustive: never = hunk;\n\t\t\treturn exhaustive;\n\t\t}\n\t}\n}\n\nasync function createPatchPreviewFile(cwd: string, hunk: ParsedPatch): Promise<ApplyPatchPreviewFile> {\n\tconst absolutePath = resolvePatchPath(cwd, hunk.filePath);\n\tswitch (hunk.type) {\n\t\tcase \"add\": {\n\t\t\tconst source = await readPatchFileSnapshot(absolutePath);\n\t\t\treturn buildPatchPreviewFile({ hunk, source, newContent: hunk.content });\n\t\t}\n\t\tcase \"delete\": {\n\t\t\tconst source = await readPatchFileSnapshot(absolutePath);\n\t\t\treturn buildPatchPreviewFile({\n\t\t\t\thunk,\n\t\t\t\tsource,\n\t\t\t\tnewContent: \"\",\n\t\t\t});\n\t\t}\n\t\tcase \"update\": {\n\t\t\tconst source = await readPatchFileSnapshot(absolutePath);\n\t\t\tconst moveDestination =\n\t\t\t\thunk.movePath && hunk.movePath !== hunk.filePath\n\t\t\t\t\t? await readPatchFileSnapshot(resolvePatchPath(cwd, hunk.movePath))\n\t\t\t\t\t: undefined;\n\t\t\tif (source.binary || moveDestination?.binary) {\n\t\t\t\treturn buildPatchPreviewFile({\n\t\t\t\t\thunk,\n\t\t\t\t\tsource,\n\t\t\t\t\tnewContent: \"\",\n\t\t\t\t\t...(moveDestination ? { moveDestination } : {}),\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst newContent =\n\t\t\t\thunk.chunks.length === 0\n\t\t\t\t\t? source.content\n\t\t\t\t\t: replaceChunks(source.content, hunk.filePath, hunk.chunks).content;\n\t\t\treturn buildPatchPreviewFile({\n\t\t\t\thunk,\n\t\t\t\tsource,\n\t\t\t\tnewContent,\n\t\t\t\t...(moveDestination ? { moveDestination } : {}),\n\t\t\t});\n\t\t}\n\t\tdefault: {\n\t\t\tconst exhaustive: never = hunk;\n\t\t\treturn exhaustive;\n\t\t}\n\t}\n}\n\nfunction hasPreviewChange(file: ApplyPatchPreviewFile): boolean {\n\treturn (\n\t\tfile.binary === true || file.operation !== \"update\" || file.movePath !== undefined || file.diff.trim().length > 0\n\t);\n}\n\nexport async function createPatchPreview(cwd: string, hunks: ParsedPatch[]): Promise<ApplyPatchPreview> {\n\tconst files: ApplyPatchPreviewFile[] = [];\n\tfor (const hunk of hunks) {\n\t\ttry {\n\t\t\tfiles.push(await createPatchPreviewFile(cwd, hunk));\n\t\t} catch (error) {\n\t\t\tif (error instanceof Error) continue;\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\treturn {\n\t\tfiles,\n\t\tadded: files.reduce((sum, file) => sum + file.added, 0),\n\t\tremoved: files.reduce((sum, file) => sum + file.removed, 0),\n\t};\n}\n\nexport async function createPendingPatchUpdate(\n\tcwd: string,\n\tpatchText: string,\n\tprogress?: ApplyPatchProgress,\n\tpreviewOverride?: ApplyPatchPreview,\n): Promise<{ text: string; details: ApplyPatchToolDetails | undefined }> {\n\tconst title = progress\n\t\t? `Applying patch (${progress.applied + progress.failed}/${progress.total})...`\n\t\t: \"Applying patch...\";\n\tif (previewOverride) {\n\t\treturn {\n\t\t\ttext: `${title}\\n${formatPatchPreview(previewOverride)}`,\n\t\t\tdetails: { preview: previewOverride, progress },\n\t\t};\n\t}\n\n\ttry {\n\t\tconst hunks = parsePatch(patchText);\n\t\tif (hunks.length === 0) return { text: title, details: progress ? { progress } : undefined };\n\t\tconst preview = await createPatchPreview(cwd, hunks);\n\t\tif (preview.files.some(hasPreviewChange)) {\n\t\t\treturn { text: `${title}\\n${formatPatchPreview(preview)}`, details: { preview, progress } };\n\t\t}\n\t} catch {\n\t\treturn {\n\t\t\ttext: progress ? title : formatPendingPatchPaths(patchText),\n\t\t\tdetails: progress ? { progress } : undefined,\n\t\t};\n\t}\n\treturn { text: progress ? title : formatPendingPatchPaths(patchText), details: progress ? { progress } : undefined };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { ExtensionAPI, ToolDefinition } from \"../../types.ts\";\nimport type { APPLY_PATCH_PARAMS } from \"./constants.ts\";\n\nexport type ParsedPatch =\n\t| { type: \"add\"; filePath: string; content: string }\n\t| { type: \"delete\"; filePath: string }\n\t| { type: \"update\"; filePath: string; movePath?: string; chunks: PatchChunk[] };\n\nexport type PatchChunk = {\n\tchangeContexts: string[];\n\toldLines: string[];\n\tnewLines: string[];\n\tisEndOfFile: boolean;\n};\n\nexport type ApplyPatchWireMode = \"freeform\" | \"json\" | \"none\";\n\nexport type ApplyPatchToolVariant = Exclude<ApplyPatchWireMode, \"none\">;\n\nexport type ApplyPatchToolsetState = {\n\t/** Exactly the edit-family tools this extension removed at the last non-GPT to GPT transition. */\n\tremovedEditToolNames: string[];\n};\n\nexport type FreeformToolFormat = {\n\ttype: \"grammar\";\n\tsyntax: \"lark\";\n\tdefinition: string;\n};\n\nexport type ApplyPatchParams = {\n\tinput: string;\n};\n\nexport type ApplyPatchOperation = \"add\" | \"delete\" | \"update\";\n\nexport type ApplyPatchPreviewFile = {\n\tfilePath: string;\n\tmovePath?: string;\n\toperation: ApplyPatchOperation;\n\tdiff: string;\n\tpatch?: string;\n\tadded: number;\n\tremoved: number;\n};\n\nexport type ApplyPatchPreview = {\n\tfiles: ApplyPatchPreviewFile[];\n\tadded: number;\n\tremoved: number;\n};\n\nexport type ApplyPatchToolDetails = {\n\tpreview?: ApplyPatchPreview;\n\tprogress?: ApplyPatchProgress;\n\tresult?: ApplyPatchResult;\n};\n\nexport type ApplyPatchProgress = {\n\tapplied: number;\n\tfailed: number;\n\ttotal: number;\n};\n\nexport type ApplyPatchProgressCallback = (progress: ApplyPatchProgress) => Promise<void> | void;\n\nexport type ApplyPatchFailure = {\n\toperationIndex: number;\n\tfilePath: string;\n\toperation: ApplyPatchOperation;\n\tmessage: string;\n\tcode?: string | undefined;\n};\n\nexport type AppliedPatchOperation = {\n\toperationIndex: number;\n\tpreview: ApplyPatchPreviewFile;\n};\n\nexport type ApplyPatchRecoveryInstructions = {\n\tmustReadFiles: string[];\n\tmustNotReadFiles: string[];\n\tfailedFiles: string[];\n};\n\nexport type ApplyPatchResult = {\n\tsummaries: string[];\n\tappliedFiles: string[];\n\tfailures: ApplyPatchFailure[];\n\thasPartialSuccess: boolean;\n\trecoveryInstructions: ApplyPatchRecoveryInstructions;\n\tdetails: {\n\t\tfuzz: number;\n\t\tappliedOperations: AppliedPatchOperation[];\n\t};\n};\n\nexport type AtomicWriteOperations = {\n\twriteFile: (filePath: string, content: string, encoding: \"utf-8\") => Promise<void>;\n\trename: (fromPath: string, toPath: string) => Promise<void>;\n\tunlink: (filePath: string) => Promise<void>;\n};\n\nexport type ApplyPatchThemeColor =\n\t| \"accent\"\n\t| \"error\"\n\t| \"muted\"\n\t| \"toolDiffAdded\"\n\t| \"toolDiffContext\"\n\t| \"toolDiffRemoved\"\n\t| \"toolOutput\"\n\t| \"toolTitle\";\n\nexport type ApplyPatchThemeBg = \"toolErrorBg\" | \"toolPendingBg\" | \"toolSuccessBg\";\n\nexport type ApplyPatchTheme = {\n\tfg: (name: ApplyPatchThemeColor, text: string) => string;\n\tbg: (name: ApplyPatchThemeBg, text: string) => string;\n\tbold: (text: string) => string;\n\tinverse: (text: string) => string;\n};\n\nexport type ApplyPatchRenderState = {\n\tcwd?: string;\n\tpatchText?: string;\n\tcallText?: string;\n\tcollapsed?: string;\n\texpanded?: string;\n\tstreamingInput?: string;\n\tstreamingParser?: { pushDelta: (delta: string) => ParsedPatch[] };\n\tstreamingHunks?: ParsedPatch[];\n\tstreamingError?: string;\n};\n\nexport type ApplyPatchToolDefinition = ToolDefinition<\n\ttypeof APPLY_PATCH_PARAMS,\n\tApplyPatchToolDetails | undefined,\n\tApplyPatchRenderState\n>;\n\nexport type ApplyPatchExtensionAPI = Pick<ExtensionAPI, \"on\" | \"getActiveTools\" | \"getAllTools\" | \"setActiveTools\"> & {\n\tregisterTool: (tool: ApplyPatchToolDefinition) => void;\n\tregisterLazyToolActivator?: ExtensionAPI[\"registerLazyToolActivator\"];\n};\n"]}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/gpt-apply-patch/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { ExtensionAPI, ToolDefinition } from \"../../types.ts\";\nimport type { APPLY_PATCH_PARAMS } from \"./constants.ts\";\n\nexport type ParsedPatch =\n\t| { type: \"add\"; filePath: string; content: string }\n\t| { type: \"delete\"; filePath: string }\n\t| { type: \"update\"; filePath: string; movePath?: string; chunks: PatchChunk[] };\n\nexport type PatchChunk = {\n\tchangeContexts: string[];\n\toldLines: string[];\n\tnewLines: string[];\n\tisEndOfFile: boolean;\n};\n\nexport type ApplyPatchWireMode = \"freeform\" | \"json\" | \"none\";\n\nexport type ApplyPatchToolVariant = Exclude<ApplyPatchWireMode, \"none\">;\n\nexport type ApplyPatchToolsetState = {\n\t/** Exactly the edit-family tools this extension removed at the last non-GPT to GPT transition. */\n\tremovedEditToolNames: string[];\n};\n\nexport type FreeformToolFormat = {\n\ttype: \"grammar\";\n\tsyntax: \"lark\";\n\tdefinition: string;\n};\n\nexport type ApplyPatchParams = {\n\tinput: string;\n};\n\nexport type ApplyPatchOperation = \"add\" | \"delete\" | \"update\";\n\nexport type ApplyPatchPreviewFile = {\n\tfilePath: string;\n\tmovePath?: string;\n\toperation: ApplyPatchOperation;\n\tbinary?: true;\n\tdiff: string;\n\tpatch?: string;\n\tadded: number;\n\tremoved: number;\n};\n\nexport type ApplyPatchPreview = {\n\tfiles: ApplyPatchPreviewFile[];\n\tadded: number;\n\tremoved: number;\n};\n\nexport type ApplyPatchToolDetails = {\n\tpreview?: ApplyPatchPreview;\n\tprogress?: ApplyPatchProgress;\n\tresult?: ApplyPatchResult;\n};\n\nexport type ApplyPatchProgress = {\n\tapplied: number;\n\tfailed: number;\n\ttotal: number;\n};\n\nexport type ApplyPatchProgressCallback = (progress: ApplyPatchProgress) => Promise<void> | void;\n\nexport type ApplyPatchFailure = {\n\toperationIndex: number;\n\tfilePath: string;\n\toperation: ApplyPatchOperation;\n\tmessage: string;\n\tcode?: string | undefined;\n};\n\nexport type AppliedPatchOperation = {\n\toperationIndex: number;\n\tpreview: ApplyPatchPreviewFile;\n};\n\nexport type ApplyPatchRecoveryInstructions = {\n\tmustReadFiles: string[];\n\tmustNotReadFiles: string[];\n\tfailedFiles: string[];\n};\n\nexport type ApplyPatchResult = {\n\tsummaries: string[];\n\tappliedFiles: string[];\n\tfailures: ApplyPatchFailure[];\n\thasPartialSuccess: boolean;\n\trecoveryInstructions: ApplyPatchRecoveryInstructions;\n\tdetails: {\n\t\tfuzz: number;\n\t\tappliedOperations: AppliedPatchOperation[];\n\t};\n};\n\nexport type AtomicWriteOperations = {\n\twriteFile: (filePath: string, content: string, encoding: \"utf-8\") => Promise<void>;\n\trename: (fromPath: string, toPath: string) => Promise<void>;\n\tunlink: (filePath: string) => Promise<void>;\n};\n\nexport type ApplyPatchThemeColor =\n\t| \"accent\"\n\t| \"error\"\n\t| \"muted\"\n\t| \"toolDiffAdded\"\n\t| \"toolDiffContext\"\n\t| \"toolDiffRemoved\"\n\t| \"toolOutput\"\n\t| \"toolTitle\";\n\nexport type ApplyPatchThemeBg = \"toolErrorBg\" | \"toolPendingBg\" | \"toolSuccessBg\";\n\nexport type ApplyPatchTheme = {\n\tfg: (name: ApplyPatchThemeColor, text: string) => string;\n\tbg: (name: ApplyPatchThemeBg, text: string) => string;\n\tbold: (text: string) => string;\n\tinverse: (text: string) => string;\n};\n\nexport type ApplyPatchRenderState = {\n\tcwd?: string;\n\tpatchText?: string;\n\tcallText?: string;\n\tcollapsed?: string;\n\texpanded?: string;\n\tstreamingInput?: string;\n\tstreamingParser?: { pushDelta: (delta: string) => ParsedPatch[] };\n\tstreamingHunks?: ParsedPatch[];\n\tstreamingError?: string;\n};\n\nexport type ApplyPatchToolDefinition = ToolDefinition<\n\ttypeof APPLY_PATCH_PARAMS,\n\tApplyPatchToolDetails | undefined,\n\tApplyPatchRenderState\n>;\n\nexport type ApplyPatchExtensionAPI = Pick<ExtensionAPI, \"on\" | \"getActiveTools\" | \"getAllTools\" | \"setActiveTools\"> & {\n\tregisterTool: (tool: ApplyPatchToolDefinition) => void;\n\tregisterLazyToolActivator?: ExtensionAPI[\"registerLazyToolActivator\"];\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bash.d.ts","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/terminal/tools/bash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAWjE,OAAO,EAAe,KAAK,mBAAmB,EAAE,KAAK,kBAAkB,EAAc,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"bash.d.ts","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/terminal/tools/bash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAWjE,OAAO,EAAe,KAAK,mBAAmB,EAAE,KAAK,kBAAkB,EAAc,MAAM,cAAc,CAAC;AAM1G,eAAO,MAAM,aAAa;;;;;;;EAiBxB,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,aAAa,CAAC,CAAC;AAcxD,MAAM,WAAW,gBAAgB;IAChC,QAAQ,IAAI,IAAI,CAAC;IACjB,KAAK,IAAI,IAAI,CAAC;IACd,OAAO,IAAI,IAAI,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,UAAU,SAA0B,GAAG,gBAAgB,CA2C/G;AAID,KAAK,gBAAgB,GAAG;IACvB,cAAc,CAAC,EAAE;QAAE,YAAY,EAAE,MAAM,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,MAAM,GAAG,SAAS,CAAA;KAAE,CAAC;IAC1F,KAAK,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IACzC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;CACb,CAAC;AAwRF,mDAAmD;AACnD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,mBAAmB;;;;;;;;;;;;;;yBAU1C,MAAM,SACZ,YAAY,WACV,WAAW,aACT,uBAAuB,YACxB,gBAAgB,GACxB,OAAO,CAAC,kBAAkB,CAAC;EAQ/B"}
|
|
@@ -3,11 +3,13 @@ import { formatTerminalToolOutput } from "../output-format.js";
|
|
|
3
3
|
import { BACKGROUND_START_GRACE_MS, DEFAULT_COLS, DEFAULT_ROWS, FOREGROUND_ENV_OVERRIDES, KILLED_SESSION_EXIT_GRACE_MS, TERMINAL_BASH_TOOL, } from "../shared.js";
|
|
4
4
|
import { errorResult, textResult } from "./context.js";
|
|
5
5
|
import { createForegroundDetachGate } from "./foreground-detach.js";
|
|
6
|
+
import { resolveForegroundWindowSeconds, SLEEP_WAIT_WINDOW_SECONDS } from "./foreground-window.js";
|
|
7
|
+
import { classifySleepWait } from "./sleep-wait.js";
|
|
6
8
|
import { describeExit, spawnCommandSession } from "./spawn.js";
|
|
7
9
|
export const ptyBashSchema = Type.Object({
|
|
8
10
|
command: Type.String({ description: "Shell command to execute in a PTY-backed session." }),
|
|
9
11
|
timeout: Type.Optional(Type.Number({
|
|
10
|
-
description: "
|
|
12
|
+
description: "Process kill deadline in seconds (default 1800). Foreground blocking stops at the ~60s window: a command still running then auto-detaches to a live background session instead of being killed. Ignored for run_in_background sessions (they live until exit or kill_bash).",
|
|
11
13
|
})),
|
|
12
14
|
description: Type.Optional(Type.String({ description: "Short human-readable label for this command." })),
|
|
13
15
|
run_in_background: Type.Optional(Type.Boolean({
|
|
@@ -134,16 +136,21 @@ function raceExitWithKillGrace(runtime, signal, timeoutMs) {
|
|
|
134
136
|
}
|
|
135
137
|
});
|
|
136
138
|
}
|
|
137
|
-
|
|
139
|
+
/**
|
|
140
|
+
* How long the model blocks before a still-running command is handed to a live
|
|
141
|
+
* background session. A sleep-wait detaches almost immediately: its remaining
|
|
142
|
+
* time is pure waiting, which the completion notification delivers for free.
|
|
143
|
+
*/
|
|
144
|
+
function resolveAutoDetachDelayMs(ctx, input, sleepWait) {
|
|
138
145
|
if (ctx.timeoutAction === "kill")
|
|
139
146
|
return undefined;
|
|
140
|
-
const
|
|
141
|
-
|
|
142
|
-
|
|
147
|
+
const windowSeconds = sleepWait
|
|
148
|
+
? Math.min(SLEEP_WAIT_WINDOW_SECONDS, resolveForegroundWindowSeconds(process.env))
|
|
149
|
+
: resolveForegroundWindowSeconds(process.env);
|
|
143
150
|
const timeoutSeconds = input.timeout !== undefined && Number.isFinite(input.timeout) ? input.timeout : Infinity;
|
|
144
|
-
if (timeoutSeconds <=
|
|
151
|
+
if (timeoutSeconds <= windowSeconds)
|
|
145
152
|
return undefined;
|
|
146
|
-
return Math.max(0, Math.trunc(
|
|
153
|
+
return Math.max(0, Math.trunc(windowSeconds * 1000));
|
|
147
154
|
}
|
|
148
155
|
function scheduleDetachedSweep(ctx, id, runtime, timeoutMs, startedAt) {
|
|
149
156
|
if (timeoutMs === undefined)
|
|
@@ -193,7 +200,8 @@ async function runForeground(ctx, input, cols, rows, signal, cwd, onUpdate, exec
|
|
|
193
200
|
const updateEmitter = onUpdate ? createThrottledEmitter(emitOutputUpdate) : undefined;
|
|
194
201
|
onUpdate?.({ content: [], details: undefined });
|
|
195
202
|
const unsubscribeOutput = onUpdate ? runtime.onOutput(() => updateEmitter?.schedule()) : undefined;
|
|
196
|
-
const
|
|
203
|
+
const sleepWait = classifySleepWait(input.command);
|
|
204
|
+
const detachDelayMs = resolveAutoDetachDelayMs(ctx, input, sleepWait);
|
|
197
205
|
let outcome;
|
|
198
206
|
if (detachDelayMs === undefined) {
|
|
199
207
|
// Interrupt means "stop now": SIGKILL the whole process group in one shot.
|
|
@@ -257,11 +265,15 @@ async function runForeground(ctx, input, cols, rows, signal, cwd, onUpdate, exec
|
|
|
257
265
|
const timeoutNote = input.timeout !== undefined && Number.isFinite(input.timeout)
|
|
258
266
|
? `not killed; the original ${input.timeout}s timeout still applies`
|
|
259
267
|
: "not killed; it will run until exit or kill_bash";
|
|
260
|
-
|
|
268
|
+
const guidance = sleepWait
|
|
269
|
+
? `This command is a wait (${sleepWait.seconds}s sleep), so it detached immediately; the wait continues in the background. Do nothing and end your turn — completion will be reported automatically with exit status and output tail. Do NOT poll bash_output({ bash_id: "${id}" }) for it. When you are waiting for a pattern in a command's output, launch it with monitor({ command, filter }) instead so matching lines arrive as events. Use kill_bash({ bash_id: "${id}" }) to stop this session.`
|
|
270
|
+
: `Continue other work; completion will be reported automatically with exit status and output tail. Use bash_output({ bash_id: "${id}" }) only to peek at new output. monitor cannot attach to this session; use it for future event-driven launches. Use kill_bash({ bash_id: "${id}" }) to stop this session.`;
|
|
271
|
+
return textResult(`Command is still running; auto-detached to background with ID: ${id} (${timeoutNote}).\n\nPartial output:\n${partialOutput}\n\n${guidance}`, {
|
|
261
272
|
details: {
|
|
262
273
|
bash_id: id,
|
|
263
274
|
background: true,
|
|
264
275
|
auto_detached: true,
|
|
276
|
+
...(sleepWait ? { sleep_wait: true } : {}),
|
|
265
277
|
status: "running",
|
|
266
278
|
...(delta.droppedChars > 0 ? { droppedChars: delta.droppedChars } : {}),
|
|
267
279
|
},
|
|
@@ -322,7 +334,7 @@ export function createPtyBashTool(ctx) {
|
|
|
322
334
|
return {
|
|
323
335
|
name: TERMINAL_BASH_TOOL,
|
|
324
336
|
label: "bash",
|
|
325
|
-
description: "Execute a shell command in a persistent PTY-backed session. Set run_in_background:true for long-lived or interactive sessions; steer them with bash_input, snapshot with bash_output, tear down with kill_bash. To wait on observable state (a build finishing, a server coming up, a log line), never run sleep or poll loops — subscribe with the monitor tool instead. Foreground timeout is
|
|
337
|
+
description: "Execute a shell command in a persistent PTY-backed session. Set run_in_background:true for long-lived or interactive sessions; steer them with bash_input, snapshot with bash_output, tear down with kill_bash. To wait on observable state (a build finishing, a server coming up, a log line), never run sleep or poll loops — subscribe with the monitor tool instead. Foreground blocking stops at the ~60s window and a still-running command auto-detaches to a live background session; `timeout` is the process kill deadline in seconds.",
|
|
326
338
|
promptSnippet: "Run shell commands; run_in_background:true for long-lived/interactive PTY sessions",
|
|
327
339
|
promptGuidelines: ["Inspect PI_* environment variables for current model and session details."],
|
|
328
340
|
parameters: ptyBashSchema,
|