@@ -5,6 +5,7 @@ import path from "path"
55import { ConfigProvider , Deferred , Effect , Layer , ManagedRuntime , Option } from "effect"
66import { tmpdir } from "../fixture/fixture"
77import { Bus } from "../../src/bus"
8+ import { bootstrap } from "../../src/cli/bootstrap"
89import { Config } from "@/config/config"
910import { FileWatcher } from "../../src/file/watcher"
1011import { Git } from "../../src/git"
@@ -170,6 +171,34 @@ describeWatcher("FileWatcher", () => {
170171 )
171172 } )
172173
174+ test ( "bootstrap starts root watcher events" , async ( ) => {
175+ await using tmp = await tmpdir ( { git : true } )
176+ const file = path . join ( tmp . path , "bootstrap-watch.txt" )
177+ const previousFileWatcher = process . env . OPENCODE_EXPERIMENTAL_FILEWATCHER
178+ const previousDisableFileWatcher = process . env . OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER
179+
180+ process . env . OPENCODE_EXPERIMENTAL_FILEWATCHER = "true"
181+ process . env . OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER = "false"
182+
183+ try {
184+ await bootstrap ( tmp . path , async ( ) => {
185+ await Effect . runPromise ( ready ( tmp . path ) )
186+ await Effect . runPromise (
187+ nextUpdate (
188+ tmp . path ,
189+ ( evt ) => evt . file === file && evt . event === "add" ,
190+ Effect . promise ( ( ) => fs . writeFile ( file , "bootstrap" ) ) ,
191+ ) . pipe ( Effect . tap ( ( evt ) => Effect . sync ( ( ) => expect ( evt ) . toEqual ( { file, event : "add" } ) ) ) ) ,
192+ )
193+ } )
194+ } finally {
195+ if ( previousFileWatcher === undefined ) delete process . env . OPENCODE_EXPERIMENTAL_FILEWATCHER
196+ else process . env . OPENCODE_EXPERIMENTAL_FILEWATCHER = previousFileWatcher
197+ if ( previousDisableFileWatcher === undefined ) delete process . env . OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER
198+ else process . env . OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER = previousDisableFileWatcher
199+ }
200+ } )
201+
173202 test ( "watches non-git roots" , async ( ) => {
174203 await using tmp = await tmpdir ( )
175204 const file = path . join ( tmp . path , "plain.txt" )
0 commit comments