@@ -12,11 +12,8 @@ import { Auth } from "../auth"
1212import { Env } from "../env"
1313import { applyEdits , modify } from "jsonc-parser"
1414import { type InstanceContext } from "../project/instance"
15- import { InstanceStore } from "../project/instance-store"
1615import { InstallationLocal , InstallationVersion } from "@opencode-ai/core/installation/version"
1716import { existsSync } from "fs"
18- import { GlobalBus } from "@/bus/global"
19- import { Event } from "../server/event"
2017import { Account } from "@/account/account"
2118import { isRecord } from "@/util/record"
2219import type { ConsoleState } from "./console-state"
@@ -289,9 +286,9 @@ export interface Interface {
289286 readonly get : ( ) => Effect . Effect < Info >
290287 readonly getGlobal : ( ) => Effect . Effect < Info >
291288 readonly getConsoleState : ( ) => Effect . Effect < ConsoleState >
292- readonly update : ( config : Info , options ?: { dispose ?: boolean } ) => Effect . Effect < void >
293- readonly updateGlobal : ( config : Info ) => Effect . Effect < Info >
294- readonly invalidate : ( wait ?: boolean ) => Effect . Effect < void >
289+ readonly update : ( config : Info ) => Effect . Effect < void >
290+ readonly updateGlobal : ( config : Info ) => Effect . Effect < { info : Info ; changed : boolean } >
291+ readonly invalidate : ( ) => Effect . Effect < void >
295292 readonly directories : ( ) => Effect . Effect < string [ ] >
296293 readonly waitForDependencies : ( ) => Effect . Effect < void >
297294}
@@ -730,37 +727,17 @@ export const layer = Layer.effect(
730727 )
731728 } )
732729
733- const update = Effect . fn ( "Config.update" ) ( function * ( config : Info , options ?: { dispose ?: boolean } ) {
730+ const update = Effect . fn ( "Config.update" ) ( function * ( config : Info ) {
734731 const dir = yield * InstanceState . directory
735732 const file = path . join ( dir , "config.json" )
736733 const existing = yield * loadFile ( file )
737734 yield * fs
738735 . writeFileString ( file , JSON . stringify ( mergeDeep ( writable ( existing ) , writable ( config ) ) , null , 2 ) )
739736 . pipe ( Effect . orDie )
740- if ( options ?. dispose !== false ) {
741- // Fail loudly if no instance is bound — silently skipping would
742- // mask "config update without an active instance" bugs. The throw
743- // comes from `Instance.current` inside `InstanceState.context`.
744- const ctx = yield * InstanceState . context
745- yield * Effect . promise ( ( ) => InstanceStore . disposeInstance ( ctx ) )
746- }
747737 } )
748738
749- const invalidate = Effect . fn ( "Config.invalidate" ) ( function * ( wait ?: boolean ) {
739+ const invalidate = Effect . fn ( "Config.invalidate" ) ( function * ( ) {
750740 yield * invalidateGlobal
751- const task = InstanceStore . disposeAllInstances ( )
752- . catch ( ( ) => undefined )
753- . finally ( ( ) =>
754- GlobalBus . emit ( "event" , {
755- directory : "global" ,
756- payload : {
757- type : Event . Disposed . type ,
758- properties : { } ,
759- } ,
760- } ) ,
761- )
762- if ( wait ) yield * Effect . promise ( ( ) => task )
763- else void task
764741 } )
765742
766743 const updateGlobal = Effect . fn ( "Config.updateGlobal" ) ( function * ( config : Info ) {
@@ -784,9 +761,8 @@ export const layer = Layer.effect(
784761 if ( changed ) yield * fs . writeFileString ( file , updated ) . pipe ( Effect . orDie )
785762 }
786763
787- // Only tear down running instances if the config actually changed.
788764 if ( changed ) yield * invalidate ( )
789- return next
765+ return { info : next , changed }
790766 } )
791767
792768 return Service . of ( {
0 commit comments