fix: preserve bootstrap paths and expose failed mutations (#16131)

Merged via /review-pr -> /prepare-pr -> /merge-pr.

Prepared head SHA: 385dcbd8a9
Co-authored-by: Swader <1430603+Swader@users.noreply.github.com>
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com>
Reviewed-by: @gumadeiras
This commit is contained in:
Bruno Škvorc
2026-02-14 23:01:16 +01:00
committed by GitHub
parent bc299ae17e
commit dbdcbe03e7
14 changed files with 718 additions and 34 deletions

View File

@@ -1,4 +1,5 @@
import type { AgentTool } from "@mariozechner/pi-agent-core";
import path from "node:path";
import type { SessionSystemPromptReport } from "../config/sessions/types.js";
import type { EmbeddedContextFile } from "./pi-embedded-helpers.js";
import type { WorkspaceBootstrapFile } from "./workspace.js";
@@ -40,10 +41,21 @@ function buildInjectedWorkspaceFiles(params: {
injectedFiles: EmbeddedContextFile[];
bootstrapMaxChars: number;
}): SessionSystemPromptReport["injectedWorkspaceFiles"] {
const injectedByName = new Map(params.injectedFiles.map((f) => [f.path, f.content]));
const injectedByPath = new Map(params.injectedFiles.map((f) => [f.path, f.content]));
const injectedByBaseName = new Map<string, string>();
for (const file of params.injectedFiles) {
const normalizedPath = file.path.replace(/\\/g, "/");
const baseName = path.posix.basename(normalizedPath);
if (!injectedByBaseName.has(baseName)) {
injectedByBaseName.set(baseName, file.content);
}
}
return params.bootstrapFiles.map((file) => {
const rawChars = file.missing ? 0 : (file.content ?? "").trimEnd().length;
const injected = injectedByName.get(file.name);
const injected =
injectedByPath.get(file.path) ??
injectedByPath.get(file.name) ??
injectedByBaseName.get(file.name);
const injectedChars = injected ? injected.length : 0;
const truncated = !file.missing && rawChars > params.bootstrapMaxChars;
return {