Two additional fixes to prevent agents from writing .cw/output/ in the wrong location: 1. Always create .cw/output/ at the agent workdir root during spawn, even when no inputContext is provided. This gives the agent a visible anchor directory so it doesn't create one inside a project subdir. 2. Add absolute output path instruction to the workspace layout prompt for multi-project agents, explicitly telling them to write .cw/output/ relative to the workdir root, not their current cd location.
43 lines
1.4 KiB
TypeScript
43 lines
1.4 KiB
TypeScript
/**
|
|
* Workspace layout section describing the agent's working directory.
|
|
*/
|
|
|
|
import { readdirSync } from 'node:fs';
|
|
import { join } from 'node:path';
|
|
|
|
export function buildWorkspaceLayout(agentCwd: string): string {
|
|
let entries: string[];
|
|
try {
|
|
entries = readdirSync(agentCwd, { withFileTypes: true })
|
|
.filter(d => d.isDirectory() && d.name !== '.cw')
|
|
.map(d => d.name);
|
|
} catch {
|
|
return '';
|
|
}
|
|
|
|
if (entries.length === 0) {
|
|
return `
|
|
|
|
<workspace>
|
|
Your working directory is: ${agentCwd}
|
|
This is an isolated git worktree. Other agents may be working in parallel on separate branches — do not assume you have exclusive access to the repository.
|
|
</workspace>`;
|
|
}
|
|
|
|
const lines = entries.map(
|
|
name => `- \`${name}/\` — ${join(agentCwd, name)}`
|
|
);
|
|
|
|
return `
|
|
|
|
<workspace>
|
|
Your working directory is: ${agentCwd}
|
|
This is an isolated git worktree. Other agents may be working in parallel on separate branches — do not assume you have exclusive access to the repository.
|
|
The following project directories contain the source code (git worktrees):
|
|
|
|
${lines.join('\n')}
|
|
|
|
**IMPORTANT**: All \`.cw/output/\` paths (signal.json, progress.md, etc.) are relative to this working directory (\`${agentCwd}\`), NOT to any project subdirectory. Always write to \`${join(agentCwd, '.cw/output/')}\` regardless of your current \`cd\` location.
|
|
</workspace>`;
|
|
}
|