Symptom
In a multi-repo project whose workspace root is a parent folder, clicking a repo-relative file path in an agent reply opens the preview panel with an error:
Failed to read workspace file '.graft/config.json' in '/home/cvl'.
The file exists, but at /home/cvl/unitree_sim_isaaclab/.graft/config.json, one level down in a repo root.
T3 Code 0.0.42 (Linux AppImage), built from multi-repo-workspaces @ 1d386b99a, local environment.
Repro
- Have a project with workspace root
/home/<user> and repo roots /home/<user>/<repo-1>, /home/<user>/<repo-2>, and three more.
- Ask the agent about uncommitted changes in one repo. It runs
cd /home/<user>/<repo-1> && git status and writes the path as `.graft/config.json`.
- Click the file chip for that path.
- The preview reads
/home/<user>/.graft/config.json, which does not exist.
Cause
In a chat message, a relative path resolves against the workspace root, not against a repo root:
resolveMarkdownFileLinkTarget joins the relative path onto the workspace root (apps/web/src/markdown-links.ts:83).
buildFileLinkMetaFromTarget then looks for the repo that contains the resulting path (markdown-links.ts:146). /home/cvl/.graft/config.json is not inside any repo root, so the preview reads from the workspace root (FilePreviewPanel.tsx:958).
The path is also ambiguous: .graft/config.json can exist in multiple repo roots (<repo-1> and <repo-2>).
Symptom
In a multi-repo project whose workspace root is a parent folder, clicking a repo-relative file path in an agent reply opens the preview panel with an error:
The file exists, but at
/home/cvl/unitree_sim_isaaclab/.graft/config.json, one level down in a repo root.T3 Code 0.0.42 (Linux AppImage), built from
multi-repo-workspaces@1d386b99a, local environment.Repro
/home/<user>and repo roots/home/<user>/<repo-1>,/home/<user>/<repo-2>, and three more.cd /home/<user>/<repo-1> && git statusand writes the path as`.graft/config.json`./home/<user>/.graft/config.json, which does not exist.Cause
In a chat message, a relative path resolves against the workspace root, not against a repo root:
resolveMarkdownFileLinkTargetjoins the relative path onto the workspace root (apps/web/src/markdown-links.ts:83).buildFileLinkMetaFromTargetthen looks for the repo that contains the resulting path (markdown-links.ts:146)./home/cvl/.graft/config.jsonis not inside any repo root, so the preview reads from the workspace root (FilePreviewPanel.tsx:958).The path is also ambiguous:
.graft/config.jsoncan exist in multiple repo roots (<repo-1>and<repo-2>).