瀏覽代碼

refactor(tool): reuse edit entry schema in multiedit

Kit Langton 1 天之前
父節點
當前提交
e2eff19a32
共有 2 個文件被更改,包括 9 次插入15 次删除
  1. 6 2
      packages/opencode/src/tool/edit.ts
  2. 3 13
      packages/opencode/src/tool/multiedit.ts

+ 6 - 2
packages/opencode/src/tool/edit.ts

@@ -31,8 +31,7 @@ function convertToLineEnding(text: string, ending: "\n" | "\r\n"): string {
   return text.replaceAll("\n", "\r\n")
   return text.replaceAll("\n", "\r\n")
 }
 }
 
 
-export const Parameters = Schema.Struct({
-  filePath: Schema.String.annotate({ description: "The absolute path to the file to modify" }),
+export const Entry = Schema.Struct({
   oldString: Schema.String.annotate({ description: "The text to replace" }),
   oldString: Schema.String.annotate({ description: "The text to replace" }),
   newString: Schema.String.annotate({
   newString: Schema.String.annotate({
     description: "The text to replace it with (must be different from oldString)",
     description: "The text to replace it with (must be different from oldString)",
@@ -42,6 +41,11 @@ export const Parameters = Schema.Struct({
   }),
   }),
 })
 })
 
 
+export const Parameters = Schema.Struct({
+  filePath: Schema.String.annotate({ description: "The absolute path to the file to modify" }),
+  ...Entry.fields,
+})
+
 export const EditTool = Tool.define(
 export const EditTool = Tool.define(
   "edit",
   "edit",
   Effect.gen(function* () {
   Effect.gen(function* () {

+ 3 - 13
packages/opencode/src/tool/multiedit.ts

@@ -1,6 +1,6 @@
 import { Effect, Schema } from "effect"
 import { Effect, Schema } from "effect"
 import * as Tool from "./tool"
 import * as Tool from "./tool"
-import { EditTool } from "./edit"
+import * as Edit from "./edit"
 import DESCRIPTION from "./multiedit.txt"
 import DESCRIPTION from "./multiedit.txt"
 import path from "path"
 import path from "path"
 import { Instance } from "../project/instance"
 import { Instance } from "../project/instance"
@@ -8,24 +8,14 @@ import { Instance } from "../project/instance"
 export const Parameters = Schema.Struct({
 export const Parameters = Schema.Struct({
   filePath: Schema.String.annotate({ description: "The absolute path to the file to modify" }),
   filePath: Schema.String.annotate({ description: "The absolute path to the file to modify" }),
   edits: Schema.mutable(
   edits: Schema.mutable(
-    Schema.Array(
-      Schema.Struct({
-        oldString: Schema.String.annotate({ description: "The text to replace" }),
-        newString: Schema.String.annotate({
-          description: "The text to replace it with (must be different from oldString)",
-        }),
-        replaceAll: Schema.optional(Schema.Boolean).annotate({
-          description: "Replace all occurrences of oldString (default false)",
-        }),
-      }),
-    ),
+    Schema.Array(Edit.Entry),
   ).annotate({ description: "Array of edit operations to perform sequentially on the file" }),
   ).annotate({ description: "Array of edit operations to perform sequentially on the file" }),
 })
 })
 
 
 export const MultiEditTool = Tool.define(
 export const MultiEditTool = Tool.define(
   "multiedit",
   "multiedit",
   Effect.gen(function* () {
   Effect.gen(function* () {
-    const editInfo = yield* EditTool
+    const editInfo = yield* Edit.EditTool
     const edit = yield* editInfo.init()
     const edit = yield* editInfo.init()
 
 
     return {
     return {