@@ -30,9 +30,15 @@ function isDirectory(dirPath: string): boolean {
3030 }
3131}
3232
33- function mergePath ( params : { existing : string ; prepend ?: string [ ] ; append ?: string [ ] } ) : string {
33+ function mergePath ( params : {
34+ existing : string ;
35+ prepend ?: string [ ] ;
36+ append ?: string [ ] ;
37+ delimiter ?: string ;
38+ } ) : string {
39+ const delimiter = params . delimiter ?? path . delimiter ;
3440 const partsExisting = params . existing
35- . split ( path . delimiter )
41+ . split ( delimiter )
3642 . map ( ( part ) => part . trim ( ) )
3743 . filter ( Boolean ) ;
3844 const partsPrepend = ( params . prepend ?? [ ] ) . map ( ( part ) => part . trim ( ) ) . filter ( Boolean ) ;
@@ -46,7 +52,7 @@ function mergePath(params: { existing: string; prepend?: string[]; append?: stri
4652 merged . push ( part ) ;
4753 }
4854 }
49- return merged . join ( path . delimiter ) ;
55+ return merged . join ( delimiter ) ;
5056}
5157
5258function candidateBinDirs ( opts : EnsureOpenClawPathOpts ) : { prepend : string [ ] ; append : string [ ] } {
@@ -142,12 +148,13 @@ export function ensureOpenClawCliOnPath(opts: EnsureOpenClawPathOpts = {}) {
142148 process . env . OPENCLAW_PATH_BOOTSTRAPPED = "1" ;
143149
144150 const existing = opts . pathEnv ?? process . env . PATH ?? "" ;
151+ const delimiter = ( opts . platform ?? process . platform ) === "win32" ? ";" : path . delimiter ;
145152 const { prepend, append } = candidateBinDirs ( opts ) ;
146153 if ( prepend . length === 0 && append . length === 0 ) {
147154 return ;
148155 }
149156
150- const merged = mergePath ( { existing, prepend, append } ) ;
157+ const merged = mergePath ( { existing, prepend, append, delimiter } ) ;
151158 if ( merged ) {
152159 process . env . PATH = merged ;
153160 }
0 commit comments