opencode-agent[bot] 4 месяцев назад
Родитель
Сommit
6589a66822

+ 11 - 13
packages/opencode/src/agent/agent.ts

@@ -351,19 +351,17 @@ export const layer = Layer.effect(
               description: referenceDescription(resolved),
               permission: Permission.merge(
                 agents.scout.permission,
-                Permission.fromConfig(
-                  {
-                    repo_clone: "deny",
-                    ...(localPath
-                      ? {
-                          external_directory: {
-                            [localPath]: "allow",
-                            [path.join(localPath, "*")]: "allow",
-                          },
-                        }
-                      : {}),
-                  },
-                ),
+                Permission.fromConfig({
+                  repo_clone: "deny",
+                  ...(localPath
+                    ? {
+                        external_directory: {
+                          [localPath]: "allow",
+                          [path.join(localPath, "*")]: "allow",
+                        },
+                      }
+                    : {}),
+                }),
               ),
               prompt: referencePrompt(resolved),
               options: { reference: cfg.reference?.[resolved.name], resolved },

+ 11 - 2
packages/opencode/src/reference/reference.ts

@@ -90,7 +90,12 @@ function containsReferencePath(referencePath: string, target: string) {
   return AppFileSystem.contains(normalizedTarget(referencePath) ?? referencePath, target)
 }
 
-export function resolve(input: { name: string; reference: ReferenceEntry; directory: string; worktree: string }): Resolved {
+export function resolve(input: {
+  name: string
+  reference: ReferenceEntry
+  directory: string
+  worktree: string
+}): Resolved {
   if (typeof input.reference === "string") {
     if (input.reference.startsWith(".") || input.reference.startsWith("/") || input.reference.startsWith("~")) {
       return { name: input.name, kind: "local", path: referencePath({ ...input, value: input.reference }) }
@@ -142,7 +147,11 @@ export const layer = Layer.effect(
     const state = yield* InstanceState.make<State>(
       Effect.fn("Reference.state")(function* (ctx) {
         const cfg = yield* config.get()
-        const references = resolveAll({ references: cfg.reference ?? {}, directory: ctx.directory, worktree: ctx.worktree })
+        const references = resolveAll({
+          references: cfg.reference ?? {},
+          directory: ctx.directory,
+          worktree: ctx.worktree,
+        })
         const seenPath = new Set<string>()
         const gitReferences = references.filter((reference): reference is Extract<Resolved, { kind: "git" }> => {
           if (reference.kind !== "git") return false

+ 1 - 9
packages/opencode/src/reference/repository-cache.ts

@@ -87,15 +87,7 @@ export const ensure = Effect.fn("RepositoryCache.ensure")(function* (
 
         if (status === "cloned") {
           const clone = yield* services.git.run(
-            [
-              "clone",
-              "--depth",
-              "100",
-              ...(input.branch ? ["--branch", input.branch] : []),
-              "--",
-              remote,
-              localPath,
-            ],
+            ["clone", "--depth", "100", ...(input.branch ? ["--branch", input.branch] : []), "--", remote, localPath],
             { cwd: path.dirname(localPath) },
           )
           if (clone.exitCode !== 0) {

+ 3 - 1
packages/opencode/test/agent/agent.test.ts

@@ -174,7 +174,9 @@ test("reference config creates scout-backed subagents", async () => {
         expect(effect).toBeDefined()
         expect(effect?.mode).toBe("subagent")
         expect(effect?.prompt).toContain("Repository: github.com/effect/effect-smol")
-        expect(effect?.prompt).toContain(`Cached directory: ${path.join(Global.Path.repos, "github.com", "effect", "effect-smol")}`)
+        expect(effect?.prompt).toContain(
+          `Cached directory: ${path.join(Global.Path.repos, "github.com", "effect", "effect-smol")}`,
+        )
         expect(effect?.prompt).toContain("Do not call repo_clone")
         expect(evalPerm(effect, "repo_clone")).toBe("deny")
 

+ 1 - 6
packages/opencode/test/reference/reference.test.ts

@@ -15,12 +15,7 @@ afterEach(async () => {
 })
 
 const it = testEffect(
-  Layer.mergeAll(
-    AppFileSystem.defaultLayer,
-    CrossSpawnSpawner.defaultLayer,
-    Git.defaultLayer,
-    Reference.defaultLayer,
-  ),
+  Layer.mergeAll(AppFileSystem.defaultLayer, CrossSpawnSpawner.defaultLayer, Git.defaultLayer, Reference.defaultLayer),
 )
 
 const experimentalScout = <A, E, R>(self: Effect.Effect<A, E, R>) =>