@@ -21,7 +21,29 @@ describe("config and settings loading", () => {
2121 else process . env . DSCODE_DATA_HOME = originalDataHome ;
2222 } ) ;
2323
24- it ( "switches projectPath using user config cwd on restart" , ( ) => {
24+ it ( "defaults to startup path and records it in user config" , ( ) => {
25+ const root = mkdtempSync ( join ( tmpdir ( ) , "dscode-config-" ) ) ;
26+ const configHome = join ( root , "home" ) ;
27+ const workspace = join ( root , "workspace" ) ;
28+
29+ mkdirSync ( configHome , { recursive : true } ) ;
30+ mkdirSync ( workspace , { recursive : true } ) ;
31+
32+ process . env . DSCODE_PROJECT_PATH = workspace ;
33+ process . env . DSCODE_CONFIG_HOME = configHome ;
34+ process . env . DSCODE_DATA_HOME = configHome ;
35+
36+ const config = loadConfig ( ) ;
37+ const saved = JSON . parse ( readFileSync ( join ( configHome , "config.json" ) , "utf8" ) ) ;
38+
39+ expect ( realpathSync ( config . projectPath ) ) . toBe ( realpathSync ( workspace ) ) ;
40+ expect ( realpathSync ( process . cwd ( ) ) ) . toBe ( realpathSync ( workspace ) ) ;
41+ expect ( saved ) . toMatchObject ( { cwd : workspace , cwdProjectPath : workspace } ) ;
42+
43+ rmSync ( root , { recursive : true , force : true } ) ;
44+ } ) ;
45+
46+ it ( "switches projectPath using persisted cwd for the same startup project" , ( ) => {
2547 const root = mkdtempSync ( join ( tmpdir ( ) , "dscode-config-" ) ) ;
2648 const configHome = join ( root , "home" ) ;
2749 const workspace = join ( root , "workspace" ) ;
@@ -31,7 +53,7 @@ describe("config and settings loading", () => {
3153 mkdirSync ( target , { recursive : true } ) ;
3254 writeFileSync (
3355 join ( configHome , "config.json" ) ,
34- JSON . stringify ( { cwd : target , modelId : "deepseek-v4-pro" } ) + "\n" ,
56+ JSON . stringify ( { cwd : target , cwdProjectPath : workspace , modelId : "deepseek-v4-pro" } ) + "\n" ,
3557 "utf8" ,
3658 ) ;
3759
@@ -48,7 +70,36 @@ describe("config and settings loading", () => {
4870 rmSync ( root , { recursive : true , force : true } ) ;
4971 } ) ;
5072
51- it ( "keeps startup path when user config cwd does not exist" , ( ) => {
73+ it ( "keeps startup path when persisted cwd belongs to another startup project" , ( ) => {
74+ const root = mkdtempSync ( join ( tmpdir ( ) , "dscode-config-" ) ) ;
75+ const configHome = join ( root , "home" ) ;
76+ const workspace = join ( root , "workspace" ) ;
77+ const otherWorkspace = join ( root , "other-workspace" ) ;
78+ const target = join ( workspace , "nested-project" ) ;
79+
80+ mkdirSync ( configHome , { recursive : true } ) ;
81+ mkdirSync ( workspace , { recursive : true } ) ;
82+ mkdirSync ( otherWorkspace , { recursive : true } ) ;
83+ mkdirSync ( target , { recursive : true } ) ;
84+ writeFileSync (
85+ join ( configHome , "config.json" ) ,
86+ JSON . stringify ( { cwd : target , cwdProjectPath : workspace } ) + "\n" ,
87+ "utf8" ,
88+ ) ;
89+
90+ process . env . DSCODE_PROJECT_PATH = otherWorkspace ;
91+ process . env . DSCODE_CONFIG_HOME = configHome ;
92+ process . env . DSCODE_DATA_HOME = configHome ;
93+
94+ const config = loadConfig ( ) ;
95+
96+ expect ( realpathSync ( config . projectPath ) ) . toBe ( realpathSync ( otherWorkspace ) ) ;
97+ expect ( realpathSync ( process . cwd ( ) ) ) . toBe ( realpathSync ( otherWorkspace ) ) ;
98+
99+ rmSync ( root , { recursive : true , force : true } ) ;
100+ } ) ;
101+
102+ it ( "keeps startup path when persisted cwd does not exist" , ( ) => {
52103 const root = mkdtempSync ( join ( tmpdir ( ) , "dscode-config-" ) ) ;
53104 const configHome = join ( root , "home" ) ;
54105 const workspace = join ( root , "workspace" ) ;
@@ -57,7 +108,7 @@ describe("config and settings loading", () => {
57108 mkdirSync ( workspace , { recursive : true } ) ;
58109 writeFileSync (
59110 join ( configHome , "config.json" ) ,
60- JSON . stringify ( { cwd : join ( workspace , "missing" ) } ) + "\n" ,
111+ JSON . stringify ( { cwd : join ( workspace , "missing" ) , cwdProjectPath : workspace } ) + "\n" ,
61112 "utf8" ,
62113 ) ;
63114
@@ -115,10 +166,11 @@ describe("config and settings loading", () => {
115166 process . env . DSCODE_CONFIG_HOME = configHome ;
116167 process . env . DSCODE_DATA_HOME = configHome ;
117168
118- saveUserConfig ( { modelId : "deepseek-v4-pro" , cwd : "/tmp/project" } ) ;
169+ saveUserConfig ( { modelId : "deepseek-v4-pro" } ) ;
119170
120171 const saved = JSON . parse ( readFileSync ( join ( configHome , "config.json" ) , "utf8" ) ) ;
121- expect ( saved ) . toMatchObject ( { modelId : "deepseek-v4-pro" , cwd : "/tmp/project" } ) ;
172+ expect ( saved ) . toMatchObject ( { modelId : "deepseek-v4-pro" } ) ;
173+ expect ( saved . cwd ) . toBeUndefined ( ) ;
122174
123175 rmSync ( root , { recursive : true , force : true } ) ;
124176 } ) ;
0 commit comments