diff --git a/packages/desktop-electron/src/main/dsh-default-workspace.test.ts b/packages/desktop-electron/src/main/dsh-default-workspace.test.ts new file mode 100644 index 000000000..42476f28a --- /dev/null +++ b/packages/desktop-electron/src/main/dsh-default-workspace.test.ts @@ -0,0 +1,29 @@ +import { readdirSync, readFileSync } from "node:fs" +import { createRequire } from "node:module" +import path from "node:path" +import { pathToFileURL } from "node:url" +import { expect, test } from "vitest" + +function workspaceControllerRoot() { + const dsh = createRequire(import.meta.url).resolve("@deepseek-ai/dsh/package.json") + const web = createRequire(dsh).resolve("@deepseek-ai/dsh-web-app/package.json") + return path.dirname(createRequire(web).resolve("@deepseek-ai/dsh-api-workspace-controller/package.json")) +} + +test("the first-use workspace is created under Documents/PawWork", async () => { + const entry = path.join(workspaceControllerRoot(), "lib/types/default-directory.js") + const { defaultWorkspaceDirectory } = await import(pathToFileURL(entry).href) + const signal = new AbortController().signal + await expect(defaultWorkspaceDirectory("/Users/someone/Documents", signal, { platform: "darwin" })) + .resolves.toBe("/Users/someone/Documents/PawWork/default-workspace") + await expect(defaultWorkspaceDirectory("C:\\Users\\someone\\Documents", signal, { platform: "win32" })) + .resolves.toBe("C:\\Users\\someone\\Documents\\PawWork\\default-workspace") +}) + +test("no workspace-controller code still names the upstream directory", () => { + const lib = path.join(workspaceControllerRoot(), "lib") + const offenders = readdirSync(lib, { recursive: true, encoding: "utf8" }) + .filter((file) => file.endsWith(".js")) + .filter((file) => /["']deepseek-harness["']/.test(readFileSync(path.join(lib, file), "utf8"))) + expect(offenders).toEqual([]) +}) diff --git a/patches/@deepseek-ai__dsh-api-workspace-controller@0.2.1-rc.4.patch b/patches/@deepseek-ai__dsh-api-workspace-controller@0.2.1-rc.4.patch new file mode 100644 index 000000000..9845c58b3 --- /dev/null +++ b/patches/@deepseek-ai__dsh-api-workspace-controller@0.2.1-rc.4.patch @@ -0,0 +1,25 @@ +diff --git a/lib/index.js b/lib/index.js +index 743644a7a69f7071fda73a036061eec7a6660ef1..92da0ad1f2095de0eb2b52230e0e87e50a845e29 100644 +--- a/lib/index.js ++++ b/lib/index.js +@@ -637,7 +637,7 @@ async function defaultWorkspaceDirectory(documentsDirectory, signal, internals = + } + directory = validateDocumentsDirectory(directory, platform); + signal.throwIfAborted(); +- return paths.join(directory, "deepseek-harness", DEFAULT_WORKSPACE_DIRECTORY); ++ return paths.join(directory, "PawWork", DEFAULT_WORKSPACE_DIRECTORY); + } + //#endregion + //#region lib/types/index.js +diff --git a/lib/types/default-directory.js b/lib/types/default-directory.js +index 6df7843e5177464a2b690b95ac02ee03207b4fd6..50093583258884c4d3ae859a797436b730dcc061 100644 +--- a/lib/types/default-directory.js ++++ b/lib/types/default-directory.js +@@ -60,6 +60,6 @@ export async function defaultWorkspaceDirectory(documentsDirectory, signal, inte + } + directory = validateDocumentsDirectory(directory, platform); + signal.throwIfAborted(); +- return paths.join(directory, 'deepseek-harness', DEFAULT_WORKSPACE_DIRECTORY); ++ return paths.join(directory, 'PawWork', DEFAULT_WORKSPACE_DIRECTORY); + } + //# sourceMappingURL=default-directory.js.map diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7428602fe..6c75768a4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -27,6 +27,7 @@ overrides: zod@>=4.0.0 <4.6.6: 4.6.7 patchedDependencies: + '@deepseek-ai/dsh-api-workspace-controller@0.2.1-rc.4': f0c1ad9f5f621379914c5d166562118dee495f4e479882b0f78f3ee95e507136 '@deepseek-ai/dsh-llm-pi-ai@0.2.1-rc.4': 5fbcd2919e8f286499c7050166cb64df9979847875764de5a69ccac48e9cfe4e '@deepseek-ai/dsh-mcp-client@0.2.1-rc.4': e959aba5d381aa9307d5ce382bcbc9d49d8cd3bb3d6bdebd911c5f722ed47afc @@ -8420,7 +8421,7 @@ snapshots: '@xterm/headless': 6.0.0 zod: 4.6.7 - '@deepseek-ai/dsh-api-workspace-controller@0.2.1-rc.4(c7efc405f8cb93a019546377db84d0d2)': + '@deepseek-ai/dsh-api-workspace-controller@0.2.1-rc.4(patch_hash=f0c1ad9f5f621379914c5d166562118dee495f4e479882b0f78f3ee95e507136)(c7efc405f8cb93a019546377db84d0d2)': dependencies: '@deepseek-ai/cordis': 4.0.5(@deepseek-ai/cordis-plugin-include@1.0.10)(@deepseek-ai/cordis-plugin-loader@1.0.6) '@deepseek-ai/dsh-api-gateway': 0.2.1-rc.4(@deepseek-ai/cordis@4.0.5) @@ -10967,7 +10968,7 @@ snapshots: '@deepseek-ai/dsh-api-session-controller': 0.2.1-rc.4(52063594cbbddaeb9ca2132f71c2cf59) '@deepseek-ai/dsh-api-settings-controller': 0.2.1-rc.4(@deepseek-ai/cordis@4.0.5)(@deepseek-ai/dsh-agent-preset-registry@0.2.1-rc.4(0b3a1368e40f48ccc4f79a04a0d6ad87))(@deepseek-ai/dsh-credentials@0.2.1-rc.4(@deepseek-ai/cordis@4.0.5))(@deepseek-ai/dsh-native-command@0.2.1-rc.4(@deepseek-ai/cordis@4.0.5))(@deepseek-ai/dsh-session@0.2.1-rc.4(@deepseek-ai/cordis@4.0.5)(@deepseek-ai/dsh-scope@0.2.1-rc.4(@deepseek-ai/cordis@4.0.5)))(@deepseek-ai/dsh-settings@0.2.1-rc.4(0cb0dac60f28f72d8dec33474a1093fb))(@deepseek-ai/dsh-typert-protocol@0.2.1-rc.4(@deepseek-ai/cordis@4.0.5)) '@deepseek-ai/dsh-api-terminal-controller': 0.2.1-rc.4(@deepseek-ai/cordis@4.0.5)(@deepseek-ai/dsh-subprocess@0.2.1-rc.4(@deepseek-ai/cordis@4.0.5)(@deepseek-ai/dsh-http-proxy@0.2.1-rc.4(@deepseek-ai/cordis@4.0.5))) - '@deepseek-ai/dsh-api-workspace-controller': 0.2.1-rc.4(c7efc405f8cb93a019546377db84d0d2) + '@deepseek-ai/dsh-api-workspace-controller': 0.2.1-rc.4(patch_hash=f0c1ad9f5f621379914c5d166562118dee495f4e479882b0f78f3ee95e507136)(c7efc405f8cb93a019546377db84d0d2) '@deepseek-ai/dsh-api-workspace-files': 0.2.1-rc.4(@deepseek-ai/cordis@4.0.5) '@deepseek-ai/dsh-app-boot': 0.2.1-rc.4(@deepseek-ai/cordis-plugin-group@1.0.5(@deepseek-ai/cordis-plugin-loader@1.0.6)(@deepseek-ai/cordis@4.0.5))(@deepseek-ai/cordis-plugin-include@1.0.10)(@deepseek-ai/cordis-plugin-loader@1.0.6)(@deepseek-ai/cordis@4.0.5)(@deepseek-ai/dsh-home-paths@0.2.1-rc.4(@deepseek-ai/cordis@4.0.5))(@deepseek-ai/dsh-launch-environment@0.2.1-rc.4(@deepseek-ai/cordis@4.0.5)) '@deepseek-ai/dsh-client-connection': 0.2.1-rc.4(@deepseek-ai/cordis@4.0.5)(@deepseek-ai/dsh-scope@0.2.1-rc.4(@deepseek-ai/cordis@4.0.5)) diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index ea31faedd..9f6db44a8 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -48,5 +48,6 @@ overrides: 'zod@>=4.0.0 <4.6.6': 4.6.7 patchedDependencies: + '@deepseek-ai/dsh-api-workspace-controller@0.2.1-rc.4': patches/@deepseek-ai__dsh-api-workspace-controller@0.2.1-rc.4.patch '@deepseek-ai/dsh-llm-pi-ai@0.2.1-rc.4': patches/@deepseek-ai__dsh-llm-pi-ai@0.2.1-rc.4.patch '@deepseek-ai/dsh-mcp-client@0.2.1-rc.4': patches/@deepseek-ai__dsh-mcp-client@0.2.1-rc.4.patch