rename instance context type

This commit is contained in:
Kit Langton
2026-03-25 14:58:00 -04:00
parent c1df8a52c8
commit d844e3aa25
3 changed files with 19 additions and 21 deletions

View File

@@ -20,7 +20,7 @@ import {
parse as parseJsonc,
printParseErrorCode,
} from "jsonc-parser"
import { Instance, type Info as InstanceInfo } from "../project/instance"
import { Instance, type InstanceContext } from "../project/instance"
import { LSPServer } from "../lsp/server"
import { BunProc } from "@/bun"
import { Installation } from "@/installation"
@@ -78,7 +78,7 @@ export namespace Config {
return merged
}
async function loadState(ctx: InstanceInfo) {
async function loadState(ctx: InstanceContext) {
const auth = await Auth.all()
// Config loading order (low -> high precedence): https://opencode.ai/docs/config#precedence-order
@@ -157,8 +157,8 @@ export namespace Config {
deps.push(
iife(async () => {
const ok = await needsInstall(dir)
if (ok) await installDependencies(dir)
const shouldInstall = await needsInstall(dir)
if (shouldInstall) await installDependencies(dir)
}),
)
@@ -1474,21 +1474,19 @@ export namespace Config {
})
}
function disposed() {
GlobalBus.emit("event", {
directory: "global",
payload: {
type: Event.Disposed.type,
properties: {},
},
})
}
export async function invalidate(wait = false) {
resetGlobal()
const task = Instance.disposeAll()
.catch(() => undefined)
.finally(disposed)
.finally(() =>
GlobalBus.emit("event", {
directory: "global",
payload: {
type: Event.Disposed.type,
properties: {},
},
}),
)
if (wait) return task
void task
}

View File

@@ -1,5 +1,5 @@
import { Effect, ScopedCache, Scope } from "effect"
import { Instance, type Info as InstanceInfo } from "@/project/instance"
import { Instance, type InstanceContext } from "@/project/instance"
import { registerDisposer } from "./instance-registry"
const TypeId = "~opencode/InstanceState"
@@ -11,7 +11,7 @@ export interface InstanceState<A, E = never, R = never> {
export namespace InstanceState {
export const make = <A, E = never, R = never>(
init: (ctx: InstanceInfo) => Effect.Effect<A, E, R | Scope.Scope>,
init: (ctx: InstanceContext) => Effect.Effect<A, E, R | Scope.Scope>,
): Effect.Effect<InstanceState<A, E, Exclude<R, Scope.Scope>>, never, R | Scope.Scope> =>
Effect.gen(function* () {
const cache = yield* ScopedCache.make<string, A, E, R>({

View File

@@ -7,14 +7,14 @@ import { Context } from "../util/context"
import { Project } from "./project"
import { State } from "./state"
export interface Info {
export interface InstanceContext {
directory: string
worktree: string
project: Project.Info
}
const context = Context.create<Info>("instance")
const cache = new Map<string, Promise<Info>>()
const context = Context.create<InstanceContext>("instance")
const cache = new Map<string, Promise<InstanceContext>>()
const disposal = {
all: undefined as Promise<void> | undefined,
@@ -53,7 +53,7 @@ function boot(input: { directory: string; init?: () => Promise<any>; project?: P
})
}
function track(directory: string, next: Promise<Info>) {
function track(directory: string, next: Promise<InstanceContext>) {
const task = next.catch((error) => {
if (cache.get(directory) === task) cache.delete(directory)
throw error