Explorar o código

refactor(effect): rename permission service namespace

Kit Langton hai 1 mes
pai
achega
8e4af17a4b

+ 3 - 3
packages/opencode/src/effect/instances.ts

@@ -3,7 +3,7 @@ import { FileService } from "@/file"
 import { FileTimeService } from "@/file/time"
 import { FileWatcherService } from "@/file/watcher"
 import { FormatService } from "@/format"
-import { PermissionService } from "@/permission/service"
+import { PermissionEffect } from "@/permission/service"
 import { Instance } from "@/project/instance"
 import { VcsService } from "@/project/vcs"
 import { ProviderAuthService } from "@/provider/auth-service"
@@ -17,7 +17,7 @@ export { InstanceContext } from "./instance-context"
 
 export type InstanceServices =
   | QuestionService
-  | PermissionService.Service
+  | PermissionEffect.Service
   | ProviderAuthService
   | FileWatcherService
   | VcsService
@@ -37,7 +37,7 @@ function lookup(_key: string) {
   const ctx = Layer.sync(InstanceContext, () => InstanceContext.of(Instance.current))
   return Layer.mergeAll(
     Layer.fresh(QuestionService.layer),
-    Layer.fresh(PermissionService.layer),
+    Layer.fresh(PermissionEffect.layer),
     Layer.fresh(ProviderAuthService.layer),
     Layer.fresh(FileWatcherService.layer).pipe(Layer.orDie),
     Layer.fresh(VcsService.layer),

+ 2 - 4
packages/opencode/src/permission/index.ts

@@ -3,7 +3,7 @@ import { Config } from "@/config/config"
 import { fn } from "@/util/fn"
 import { Wildcard } from "@/util/wildcard"
 import os from "os"
-import { PermissionService as S } from "./service"
+import { PermissionEffect as S } from "./service"
 
 export namespace PermissionNext {
   function expand(pattern: string): string {
@@ -53,9 +53,7 @@ export namespace PermissionNext {
     return rulesets.flat()
   }
 
-  export const ask = fn(S.AskInput, async (input) =>
-    runPromiseInstance(S.Service.use((service) => service.ask(input))),
-  )
+  export const ask = fn(S.AskInput, async (input) => runPromiseInstance(S.Service.use((service) => service.ask(input))))
 
   export const reply = fn(S.ReplyInput, async (input) =>
     runPromiseInstance(S.Service.use((service) => service.reply(input))),

+ 1 - 1
packages/opencode/src/permission/service.ts

@@ -11,7 +11,7 @@ import { Deferred, Effect, Layer, Schema, ServiceMap } from "effect"
 import z from "zod"
 import { PermissionID } from "./schema"
 
-export namespace PermissionService {
+export namespace PermissionEffect {
   const log = Log.create({ service: "permission" })
 
   export const Action = z.enum(["allow", "deny", "ask"]).meta({

+ 6 - 2
packages/opencode/src/tool/truncate-effect.ts

@@ -2,7 +2,7 @@ import { NodeFileSystem, NodePath } from "@effect/platform-node"
 import { Cause, Duration, Effect, FileSystem, Layer, Schedule, ServiceMap } from "effect"
 import path from "path"
 import type { Agent } from "../agent/agent"
-import { PermissionService } from "../permission/service"
+import { PermissionEffect } from "../permission/service"
 import { Identifier } from "../id/id"
 import { Log } from "../util/log"
 import { ToolID } from "./schema"
@@ -27,11 +27,15 @@ export namespace TruncateEffect {
 
   function hasTaskTool(agent?: Agent.Info) {
     if (!agent?.permission) return false
-    return PermissionService.evaluate("task", "*", agent.permission).action !== "deny"
+    return PermissionEffect.evaluate("task", "*", agent.permission).action !== "deny"
   }
 
   export interface Api {
     readonly cleanup: () => Effect.Effect<void>
+    /**
+     * Returns output unchanged when it fits within the limits, otherwise writes the full text
+     * to the truncation directory and returns a preview plus a hint to inspect the saved file.
+     */
     readonly output: (text: string, options?: Options, agent?: Agent.Info) => Effect.Effect<Result>
   }
 

+ 1 - 1
packages/opencode/test/permission/next.test.ts

@@ -1005,7 +1005,7 @@ test("ask - abort should clear pending request", async () => {
     fn: async () => {
       const ctl = new AbortController()
       const ask = runtime.runPromise(
-        S.PermissionService.Service.use((svc) =>
+        S.PermissionEffect.Service.use((svc) =>
           svc.ask({
             sessionID: SessionID.make("session_test"),
             permission: "bash",