@@ -3,42 +3,52 @@ import * as path from "path"
33import * as fs from "fs/promises"
44
55/**
6- * Get the base path for conversation storage
7- * If the user has configured a custom path, use the custom path
8- * Otherwise use the default VSCode extension global storage path
6+ * Gets the base storage path for conversations
7+ * If a custom path is configured, uses that path
8+ * Otherwise uses the default VSCode extension global storage path
99 */
1010export async function getStorageBasePath ( defaultPath : string ) : Promise < string > {
11- // Get the user-configured custom storage path
12- const config = vscode . workspace . getConfiguration ( "roo-cline" )
13- const customStoragePath = config . get < string > ( "customStoragePath" , "" )
11+ // Get user-configured custom storage path
12+ let customStoragePath = ""
1413
15- // If no custom path is set, use the default path
14+ try {
15+ // This is the line causing the error in tests
16+ const config = vscode . workspace . getConfiguration ( "roo-cline" )
17+ customStoragePath = config . get < string > ( "customStoragePath" , "" )
18+ } catch ( error ) {
19+ console . warn ( "Could not access VSCode configuration - using default path" )
20+ return defaultPath
21+ }
22+
23+ // If no custom path is set, use default path
1624 if ( ! customStoragePath ) {
1725 return defaultPath
1826 }
1927
2028 try {
21- // Ensure the custom path exists
29+ // Ensure custom path exists
2230 await fs . mkdir ( customStoragePath , { recursive : true } )
2331
24- // Test if the path is writable
32+ // Test if path is writable
2533 const testFile = path . join ( customStoragePath , ".write_test" )
2634 await fs . writeFile ( testFile , "test" )
2735 await fs . rm ( testFile )
2836
2937 return customStoragePath
3038 } catch ( error ) {
31- // If the path cannot be used, report the error and fall back to the default path
32- console . error ( `Custom storage path cannot be used: ${ error instanceof Error ? error . message : String ( error ) } ` )
33- vscode . window . showErrorMessage (
34- `Custom storage path "${ customStoragePath } " cannot be used, will use default path instead` ,
35- )
39+ // If path is unusable, report error and fall back to default path
40+ console . error ( `Custom storage path is unusable: ${ error instanceof Error ? error . message : String ( error ) } ` )
41+ if ( vscode . window ) {
42+ vscode . window . showErrorMessage (
43+ `Custom storage path "${ customStoragePath } " is unusable, will use default path` ,
44+ )
45+ }
3646 return defaultPath
3747 }
3848}
3949
4050/**
41- * Get the storage directory path for a task
51+ * Gets the storage directory path for a task
4252 */
4353export async function getTaskDirectoryPath ( globalStoragePath : string , taskId : string ) : Promise < string > {
4454 const basePath = await getStorageBasePath ( globalStoragePath )
@@ -48,7 +58,7 @@ export async function getTaskDirectoryPath(globalStoragePath: string, taskId: st
4858}
4959
5060/**
51- * Get the settings directory path
61+ * Gets the settings directory path
5262 */
5363export async function getSettingsDirectoryPath ( globalStoragePath : string ) : Promise < string > {
5464 const basePath = await getStorageBasePath ( globalStoragePath )
@@ -58,7 +68,7 @@ export async function getSettingsDirectoryPath(globalStoragePath: string): Promi
5868}
5969
6070/**
61- * Get the cache directory path
71+ * Gets the cache directory path
6272 */
6373export async function getCacheDirectoryPath ( globalStoragePath : string ) : Promise < string > {
6474 const basePath = await getStorageBasePath ( globalStoragePath )
@@ -68,12 +78,23 @@ export async function getCacheDirectoryPath(globalStoragePath: string): Promise<
6878}
6979
7080/**
71- * Prompt user to set a custom storage path
72- * Display an input box allowing users to enter a custom path
81+ * Prompts the user to set a custom storage path
82+ * Displays an input box allowing the user to enter a custom path
7383 */
7484export async function promptForCustomStoragePath ( ) : Promise < void > {
75- const currentConfig = vscode . workspace . getConfiguration ( "roo-cline" )
76- const currentPath = currentConfig . get < string > ( "customStoragePath" , "" )
85+ if ( ! vscode . window || ! vscode . workspace ) {
86+ console . error ( "VS Code API not available" )
87+ return
88+ }
89+
90+ let currentPath = ""
91+ try {
92+ const currentConfig = vscode . workspace . getConfiguration ( "roo-cline" )
93+ currentPath = currentConfig . get < string > ( "customStoragePath" , "" )
94+ } catch ( error ) {
95+ console . error ( "Could not access configuration" )
96+ return
97+ }
7798
7899 const result = await vscode . window . showInputBox ( {
79100 value : currentPath ,
@@ -85,8 +106,14 @@ export async function promptForCustomStoragePath(): Promise<void> {
85106 }
86107
87108 try {
88- // Simple validation of path validity
109+ // Validate path format
89110 path . parse ( input )
111+
112+ // Check if path is absolute
113+ if ( ! path . isAbsolute ( input ) ) {
114+ return "Please enter an absolute path (e.g. D:\\RooCodeStorage or /home/user/storage)"
115+ }
116+
90117 return null // Path format is valid
91118 } catch ( e ) {
92119 return "Please enter a valid path"
@@ -96,20 +123,25 @@ export async function promptForCustomStoragePath(): Promise<void> {
96123
97124 // If user canceled the operation, result will be undefined
98125 if ( result !== undefined ) {
99- await currentConfig . update ( "customStoragePath" , result , vscode . ConfigurationTarget . Global )
126+ try {
127+ const currentConfig = vscode . workspace . getConfiguration ( "roo-cline" )
128+ await currentConfig . update ( "customStoragePath" , result , vscode . ConfigurationTarget . Global )
100129
101- if ( result ) {
102- try {
103- // Test if the path is accessible
104- await fs . mkdir ( result , { recursive : true } )
105- vscode . window . showInformationMessage ( `Custom storage path set: ${ result } ` )
106- } catch ( error ) {
107- vscode . window . showErrorMessage (
108- `Cannot access path ${ result } : ${ error instanceof Error ? error . message : String ( error ) } ` ,
109- )
130+ if ( result ) {
131+ try {
132+ // Test if path is accessible
133+ await fs . mkdir ( result , { recursive : true } )
134+ vscode . window . showInformationMessage ( `Custom storage path set: ${ result } ` )
135+ } catch ( error ) {
136+ vscode . window . showErrorMessage (
137+ `Cannot access path ${ result } : ${ error instanceof Error ? error . message : String ( error ) } ` ,
138+ )
139+ }
140+ } else {
141+ vscode . window . showInformationMessage ( "Reverted to using default storage path" )
110142 }
111- } else {
112- vscode . window . showInformationMessage ( "Restored default storage path" )
143+ } catch ( error ) {
144+ console . error ( "Failed to update configuration" , error )
113145 }
114146 }
115147}
0 commit comments