瀏覽代碼

chore: generate

opencode-agent[bot] 3 周之前
父節點
當前提交
31ad6e85ba

+ 24 - 17
packages/opencode/specs/effect-migration.md

@@ -82,31 +82,38 @@ The `InstanceState.make` init callback receives a `Scope`, so you can use `Effec
 - **Subscriptions**: Yield `Bus.Service` at the layer level, then use `Stream` + `forkScoped` inside the init closure. The fiber is automatically interrupted when the instance scope closes:
 
 ```ts
-const bus = yield* Bus.Service
-
-const cache = yield* InstanceState.make<State>(
-  Effect.fn("Foo.state")(function* (ctx) {
-    // ... load state ...
-
-    yield* bus
-      .subscribeAll()
-      .pipe(
-        Stream.runForEach((event) => Effect.sync(() => { /* handle */ })),
+const bus = yield * Bus.Service
+
+const cache =
+  yield *
+  InstanceState.make<State>(
+    Effect.fn("Foo.state")(function* (ctx) {
+      // ... load state ...
+
+      yield* bus.subscribeAll().pipe(
+        Stream.runForEach((event) =>
+          Effect.sync(() => {
+            /* handle */
+          }),
+        ),
         Effect.forkScoped,
       )
 
-    return { /* state */ }
-  }),
-)
+      return {
+        /* state */
+      }
+    }),
+  )
 ```
 
 - **Resource cleanup**: Use `Effect.acquireRelease` or `Effect.addFinalizer` for resources that need teardown (native watchers, process handles, etc.):
 
 ```ts
-yield* Effect.acquireRelease(
-  Effect.sync(() => nativeAddon.watch(dir)),
-  (watcher) => Effect.sync(() => watcher.close()),
-)
+yield *
+  Effect.acquireRelease(
+    Effect.sync(() => nativeAddon.watch(dir)),
+    (watcher) => Effect.sync(() => watcher.close()),
+  )
 ```
 
 - **Background fibers**: Use `Effect.forkScoped` — the fiber is interrupted on disposal.

+ 2 - 6
packages/opencode/src/file/index.ts

@@ -404,15 +404,11 @@ export namespace File {
         s.cache = next
       })
 
-      let cachedScan = yield* Effect.cached(
-        scan().pipe(Effect.catchCause(() => Effect.void)),
-      )
+      let cachedScan = yield* Effect.cached(scan().pipe(Effect.catchCause(() => Effect.void)))
 
       const ensure = Effect.fn("File.ensure")(function* () {
         yield* cachedScan
-        cachedScan = yield* Effect.cached(
-          scan().pipe(Effect.catchCause(() => Effect.void)),
-        )
+        cachedScan = yield* Effect.cached(scan().pipe(Effect.catchCause(() => Effect.void)))
       })
 
       const init = Effect.fn("File.init")(function* () {

+ 10 - 12
packages/opencode/src/plugin/index.ts

@@ -149,18 +149,16 @@ export namespace Plugin {
           })
 
           // Subscribe to bus events, fiber interrupted when scope closes
-          yield* bus
-            .subscribeAll()
-            .pipe(
-              Stream.runForEach((input) =>
-                Effect.sync(() => {
-                  for (const hook of hooks) {
-                    hook["event"]?.({ event: input as any })
-                  }
-                }),
-              ),
-              Effect.forkScoped,
-            )
+          yield* bus.subscribeAll().pipe(
+            Stream.runForEach((input) =>
+              Effect.sync(() => {
+                for (const hook of hooks) {
+                  hook["event"]?.({ event: input as any })
+                }
+              }),
+            ),
+            Effect.forkScoped,
+          )
 
           return { hooks }
         }),

+ 14 - 16
packages/opencode/src/project/vcs.ts

@@ -159,22 +159,20 @@ export namespace Vcs {
             const value = { current, root }
             log.info("initialized", { branch: value.current, default_branch: value.root?.name })
 
-            yield* bus
-              .subscribe(FileWatcher.Event.Updated)
-              .pipe(
-                Stream.filter((evt) => evt.properties.file.endsWith("HEAD")),
-                Stream.runForEach((_evt) =>
-                  Effect.gen(function* () {
-                    const next = yield* Effect.promise(() => get())
-                    if (next !== value.current) {
-                      log.info("branch changed", { from: value.current, to: next })
-                      value.current = next
-                      yield* bus.publish(Event.BranchUpdated, { branch: next })
-                    }
-                  }),
-                ),
-                Effect.forkScoped,
-              )
+            yield* bus.subscribe(FileWatcher.Event.Updated).pipe(
+              Stream.filter((evt) => evt.properties.file.endsWith("HEAD")),
+              Stream.runForEach((_evt) =>
+                Effect.gen(function* () {
+                  const next = yield* Effect.promise(() => get())
+                  if (next !== value.current) {
+                    log.info("branch changed", { from: value.current, to: next })
+                    value.current = next
+                    yield* bus.publish(Event.BranchUpdated, { branch: next })
+                  }
+                }),
+              ),
+              Effect.forkScoped,
+            )
 
             return value
           }),

+ 1 - 4
packages/opencode/test/project/vcs.test.ts

@@ -162,10 +162,7 @@ describe("Vcs diff", () => {
     await $`git worktree add -b feature/test ${dir} HEAD`.cwd(tmp.path).quiet()
 
     await withVcsOnly(dir, async () => {
-      const [branch, base] = await Promise.all([
-        Vcs.branch(),
-        Vcs.defaultBranch(),
-      ])
+      const [branch, base] = await Promise.all([Vcs.branch(), Vcs.defaultBranch()])
       expect(branch).toBe("feature/test")
       expect(base).toBe("main")
     })