Detect external changes with deep context (#1888)
<!-- CURSOR_SUMMARY --> > [!NOTE] > Adds commit-aware deep context by computing hasExternalChanges (via latest assistant commit vs current repo + dirty check) and propagating commitHash through messages/provider options. > > - **Deep Smart Context**: > - Add `hasExternalChanges` to `VersionedFiles`; compute by comparing latest assistant `commitHash` with `getCurrentCommitHash` and checking `isGitStatusClean`. > - Make `sourceCommitHash` nullable; add `commitHash` in `DyadEngineProviderOptions` and use it when scanning history. > - **Chat Handling**: > - Include `commitHash` in `messageHistory` and pass through `providerOptions['dyad-engine']`. > - **Git Utilities**: > - New `isGitStatusClean(path)` supporting native git and isomorphic-git. > - **Tests/Snapshots**: > - Mock `getCurrentCommitHash` and `isGitStatusClean`; update snapshot to include `hasExternalChanges`. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit ad92d9dd5ead941de822e8da59c8819e4db8b775. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> <!-- This is an auto-generated description by cubic. --> --- ## Summary by cubic Detects external code changes in deep context by comparing the latest assistant commit with the current repo state. Exposes a hasExternalChanges flag so the engine can adapt responses when the workspace diverges. - **New Features** - Added hasExternalChanges to VersionedFiles. - Computes by comparing the latest assistant commitHash with getCurrentCommitHash and checking isGitStatusClean. - Passes commitHash through chat messages and dyad-engine providerOptions; sourceCommitHash is now nullable. - Defaults to true if detection fails (with a warning). <sup>Written for commit 6ebb0b125c9a3421b4e5673870b204c9cb279265. Summary will update automatically on new commits.</sup> <!-- End of auto-generated description by cubic. -->
This commit is contained in:
@@ -39,6 +39,23 @@ export async function getCurrentCommitHash({
|
||||
});
|
||||
}
|
||||
|
||||
export async function isGitStatusClean({
|
||||
path,
|
||||
}: {
|
||||
path: string;
|
||||
}): Promise<boolean> {
|
||||
const settings = readSettings();
|
||||
if (settings.enableNativeGit) {
|
||||
const { stdout } = await execAsync(`git -C "${path}" status --porcelain`);
|
||||
return stdout.trim() === "";
|
||||
} else {
|
||||
const statusMatrix = await git.statusMatrix({ fs, dir: path });
|
||||
return statusMatrix.every(
|
||||
(row) => row[1] === 1 && row[2] === 1 && row[3] === 1,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export async function gitCommit({
|
||||
path,
|
||||
message,
|
||||
|
||||
Reference in New Issue
Block a user