fix(workspace): create BOOTSTRAP.md regardless of workspace state (#16457) (#16504)

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

Prepared head SHA: a57718c09e
Co-authored-by: robbyczgw-cla <239660374+robbyczgw-cla@users.noreply.github.com>
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com>
Reviewed-by: @gumadeiras
This commit is contained in:
Robby
2026-02-15 00:41:35 +01:00
committed by GitHub
parent 5b23999404
commit ceb934299b
3 changed files with 53 additions and 10 deletions

View File

@@ -106,17 +106,19 @@ const VALID_BOOTSTRAP_NAMES: ReadonlySet<string> = new Set([
DEFAULT_MEMORY_ALT_FILENAME,
]);
async function writeFileIfMissing(filePath: string, content: string) {
async function writeFileIfMissing(filePath: string, content: string): Promise<boolean> {
try {
await fs.writeFile(filePath, content, {
encoding: "utf-8",
flag: "wx",
});
return true;
} catch (err) {
const anyErr = err as { code?: string };
if (anyErr.code !== "EEXIST") {
throw err;
}
return false;
}
}
@@ -213,15 +215,16 @@ export async function ensureAgentWorkspace(params?: {
const identityTemplate = await loadTemplate(DEFAULT_IDENTITY_FILENAME);
const userTemplate = await loadTemplate(DEFAULT_USER_FILENAME);
const heartbeatTemplate = await loadTemplate(DEFAULT_HEARTBEAT_FILENAME);
const bootstrapTemplate = await loadTemplate(DEFAULT_BOOTSTRAP_FILENAME);
await writeFileIfMissing(agentsPath, agentsTemplate);
await writeFileIfMissing(soulPath, soulTemplate);
await writeFileIfMissing(toolsPath, toolsTemplate);
await writeFileIfMissing(identityPath, identityTemplate);
await writeFileIfMissing(userPath, userTemplate);
await writeFileIfMissing(heartbeatPath, heartbeatTemplate);
if (isBrandNewWorkspace) {
const wroteAgents = await writeFileIfMissing(agentsPath, agentsTemplate);
const wroteSoul = await writeFileIfMissing(soulPath, soulTemplate);
const wroteTools = await writeFileIfMissing(toolsPath, toolsTemplate);
const wroteIdentity = await writeFileIfMissing(identityPath, identityTemplate);
const wroteUser = await writeFileIfMissing(userPath, userTemplate);
const wroteHeartbeat = await writeFileIfMissing(heartbeatPath, heartbeatTemplate);
const wroteAnyCoreBootstrapFile =
wroteAgents || wroteSoul || wroteTools || wroteIdentity || wroteUser || wroteHeartbeat;
if (isBrandNewWorkspace || wroteAnyCoreBootstrapFile) {
const bootstrapTemplate = await loadTemplate(DEFAULT_BOOTSTRAP_FILENAME);
await writeFileIfMissing(bootstrapPath, bootstrapTemplate);
}
await ensureGitRepo(dir, isBrandNewWorkspace);