From 8e4af17a4beb730786bc40eb5c8d539c3fb896d3 Mon Sep 17 00:00:00 2001 From: Kit Langton Date: Tue, 17 Mar 2026 20:40:51 -0400 Subject: [PATCH] refactor(effect): rename permission service namespace --- packages/opencode/src/effect/instances.ts | 6 +++--- packages/opencode/src/permission/index.ts | 6 ++---- packages/opencode/src/permission/service.ts | 2 +- packages/opencode/src/tool/truncate-effect.ts | 8 ++++++-- packages/opencode/test/permission/next.test.ts | 2 +- 5 files changed, 13 insertions(+), 11 deletions(-) diff --git a/packages/opencode/src/effect/instances.ts b/packages/opencode/src/effect/instances.ts index dbbff5fb68..3a1fb0cdf9 100644 --- a/packages/opencode/src/effect/instances.ts +++ b/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), diff --git a/packages/opencode/src/permission/index.ts b/packages/opencode/src/permission/index.ts index 69150eb1b2..1349983542 100644 --- a/packages/opencode/src/permission/index.ts +++ b/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))), diff --git a/packages/opencode/src/permission/service.ts b/packages/opencode/src/permission/service.ts index 38411e9c1d..4335aa4cd8 100644 --- a/packages/opencode/src/permission/service.ts +++ b/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({ diff --git a/packages/opencode/src/tool/truncate-effect.ts b/packages/opencode/src/tool/truncate-effect.ts index 1c7a27307b..4d0ed8168f 100644 --- a/packages/opencode/src/tool/truncate-effect.ts +++ b/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 + /** + * 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 } diff --git a/packages/opencode/test/permission/next.test.ts b/packages/opencode/test/permission/next.test.ts index 2ac7bfdbe7..6e4fc1e9a4 100644 --- a/packages/opencode/test/permission/next.test.ts +++ b/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",