Dax Raad 8 месяцев назад
Родитель
Сommit
8dfdd3927e

+ 1 - 1
packages/opencode/src/cli/cmd/login-anthropic.ts

@@ -3,7 +3,7 @@ import { UI } from "../ui"
 
 
 // Example: https://claude.ai/oauth/authorize?code=true&client_id=9d1c250a-e61b-44d9-88ed-5944d1962f5e&response_type=code&redirect_uri=https%3A%2F%2Fconsole.anthropic.com%2Foauth%2Fcode%2Fcallback&scope=org%3Acreate_api_key+user%3Aprofile+user%3Ainference&code_challenge=MdFtFgFap23AWDSN0oa3-eaKjQRFE4CaEhXx8M9fHZg&code_challenge_method=S256&state=rKLtaDzm88GSwekyEqdi0wXX-YqIr13tSzYymSzpvfs
 // Example: https://claude.ai/oauth/authorize?code=true&client_id=9d1c250a-e61b-44d9-88ed-5944d1962f5e&response_type=code&redirect_uri=https%3A%2F%2Fconsole.anthropic.com%2Foauth%2Fcode%2Fcallback&scope=org%3Acreate_api_key+user%3Aprofile+user%3Ainference&code_challenge=MdFtFgFap23AWDSN0oa3-eaKjQRFE4CaEhXx8M9fHZg&code_challenge_method=S256&state=rKLtaDzm88GSwekyEqdi0wXX-YqIr13tSzYymSzpvfs
 
 
-import { generatePKCE } from "@openauthjs/openauth/pkce"
+
 
 
 export const LoginAnthropicCommand = {
 export const LoginAnthropicCommand = {
   command: "anthropic",
   command: "anthropic",

+ 23 - 53
packages/opencode/src/cli/cmd/run.ts

@@ -6,6 +6,7 @@ import { Provider } from "../../provider/provider"
 import { Session } from "../../session"
 import { Session } from "../../session"
 import { Share } from "../../share/share"
 import { Share } from "../../share/share"
 import { Message } from "../../session/message"
 import { Message } from "../../session/message"
+import { UI } from "../ui"
 
 
 export const RunCommand = {
 export const RunCommand = {
   command: "run [message..]",
   command: "run [message..]",
@@ -31,52 +32,25 @@ export const RunCommand = {
         ? await Session.get(args.session)
         ? await Session.get(args.session)
         : await Session.create()
         : await Session.create()
 
 
-      const styles = {
-        TEXT_HIGHLIGHT: "\x1b[96m",
-        TEXT_HIGHLIGHT_BOLD: "\x1b[96m\x1b[1m",
-        TEXT_DIM: "\x1b[90m",
-        TEXT_DIM_BOLD: "\x1b[90m\x1b[1m",
-        TEXT_NORMAL: "\x1b[0m",
-        TEXT_NORMAL_BOLD: "\x1b[1m",
-        TEXT_WARNING: "\x1b[93m",
-        TEXT_WARNING_BOLD: "\x1b[93m\x1b[1m",
-        TEXT_DANGER: "\x1b[91m",
-        TEXT_DANGER_BOLD: "\x1b[91m\x1b[1m",
-        TEXT_SUCCESS: "\x1b[92m",
-        TEXT_SUCCESS_BOLD: "\x1b[92m\x1b[1m",
-        TEXT_INFO: "\x1b[94m",
-        TEXT_INFO_BOLD: "\x1b[94m\x1b[1m",
-      }
 
 
-      let isEmpty = false
-      function stderr(...message: string[]) {
-        isEmpty = true
-        Bun.stderr.write(message.join(" "))
-        Bun.stderr.write("\n")
-      }
 
 
-      function empty() {
-        stderr("" + styles.TEXT_NORMAL)
-        isEmpty = true
-      }
-
-      stderr(styles.TEXT_HIGHLIGHT_BOLD + "◍  OpenCode", version)
-      empty()
-      stderr(styles.TEXT_NORMAL_BOLD + "> ", message)
-      empty()
-      stderr(
-        styles.TEXT_INFO_BOLD +
+      UI.print(UI.Style.TEXT_HIGHLIGHT_BOLD + "◍  OpenCode", version)
+      UI.empty()
+      UI.print(UI.Style.TEXT_NORMAL_BOLD + "> ", message)
+      UI.empty()
+      UI.print(
+        UI.Style.TEXT_INFO_BOLD +
           "~  https://dev.opencode.ai/s?id=" +
           "~  https://dev.opencode.ai/s?id=" +
           session.id.slice(-8),
           session.id.slice(-8),
       )
       )
-      empty()
+      UI.empty()
 
 
       function printEvent(color: string, type: string, title: string) {
       function printEvent(color: string, type: string, title: string) {
-        stderr(
+        UI.print(
           color + `|`,
           color + `|`,
-          styles.TEXT_NORMAL + styles.TEXT_DIM + ` ${type.padEnd(7, " ")}`,
+          UI.Style.TEXT_NORMAL + UI.Style.TEXT_DIM + ` ${type.padEnd(7, " ")}`,
           "",
           "",
-          styles.TEXT_NORMAL + title,
+          UI.Style.TEXT_NORMAL + title,
         )
         )
       }
       }
 
 
@@ -87,25 +61,21 @@ export const RunCommand = {
           part.toolInvocation.state === "result"
           part.toolInvocation.state === "result"
         ) {
         ) {
           if (part.toolInvocation.toolName === "opencode_todowrite") return
           if (part.toolInvocation.toolName === "opencode_todowrite") return
-          const messages = await Session.messages(session.id)
-          const metadata =
-            messages[messages.length - 1].metadata.tool[
-              part.toolInvocation.toolCallId
-            ]
+
           const args = part.toolInvocation.args as any
           const args = part.toolInvocation.args as any
           const tool = part.toolInvocation.toolName
           const tool = part.toolInvocation.toolName
 
 
           if (tool === "opencode_edit")
           if (tool === "opencode_edit")
-            printEvent(styles.TEXT_SUCCESS_BOLD, "Edit", args.filePath)
+            printEvent(UI.Style.TEXT_SUCCESS_BOLD, "Edit", args.filePath)
           if (tool === "opencode_bash")
           if (tool === "opencode_bash")
-            printEvent(styles.TEXT_WARNING_BOLD, "Execute", args.command)
+            printEvent(UI.Style.TEXT_WARNING_BOLD, "Execute", args.command)
           if (tool === "opencode_read")
           if (tool === "opencode_read")
-            printEvent(styles.TEXT_INFO_BOLD, "Read", args.filePath)
+            printEvent(UI.Style.TEXT_INFO_BOLD, "Read", args.filePath)
           if (tool === "opencode_write")
           if (tool === "opencode_write")
-            printEvent(styles.TEXT_SUCCESS_BOLD, "Create", args.filePath)
+            printEvent(UI.Style.TEXT_SUCCESS_BOLD, "Create", args.filePath)
           if (tool === "opencode_glob")
           if (tool === "opencode_glob")
             printEvent(
             printEvent(
-              styles.TEXT_INFO_BOLD,
+              UI.Style.TEXT_INFO_BOLD,
               "Glob",
               "Glob",
               args.pattern + (args.path ? " in " + args.path : ""),
               args.pattern + (args.path ? " in " + args.path : ""),
             )
             )
@@ -113,17 +83,17 @@ export const RunCommand = {
 
 
         if (part.type === "text") {
         if (part.type === "text") {
           if (part.text.includes("\n")) {
           if (part.text.includes("\n")) {
-            empty()
-            stderr(part.text)
-            empty()
+            UI.empty()
+            UI.print(part.text)
+            UI.empty()
             return
             return
           }
           }
-          printEvent(styles.TEXT_NORMAL_BOLD, "Text", part.text)
+          printEvent(UI.Style.TEXT_NORMAL_BOLD, "Text", part.text)
         }
         }
       })
       })
 
 
       const { providerID, modelID } = await Provider.defaultModel()
       const { providerID, modelID } = await Provider.defaultModel()
-      const result = await Session.chat({
+      await Session.chat({
         sessionID: session.id,
         sessionID: session.id,
         providerID,
         providerID,
         modelID,
         modelID,
@@ -134,7 +104,7 @@ export const RunCommand = {
           },
           },
         ],
         ],
       })
       })
-      empty()
+      UI.empty()
     })
     })
   },
   },
 }
 }

+ 1 - 1
packages/opencode/src/provider/provider.ts

@@ -18,7 +18,7 @@ import { LspHoverTool } from "../tool/lsp-hover"
 import { PatchTool } from "../tool/patch"
 import { PatchTool } from "../tool/patch"
 import { ReadTool } from "../tool/read"
 import { ReadTool } from "../tool/read"
 import type { Tool } from "../tool/tool"
 import type { Tool } from "../tool/tool"
-import { MultiEditTool } from "../tool/multiedit"
+
 import { WriteTool } from "../tool/write"
 import { WriteTool } from "../tool/write"
 import { TodoReadTool, TodoWriteTool } from "../tool/todo"
 import { TodoReadTool, TodoWriteTool } from "../tool/todo"
 import { AuthAnthropic } from "../auth/anthropic"
 import { AuthAnthropic } from "../auth/anthropic"

+ 1 - 1
packages/opencode/src/tool/todo.ts

@@ -44,7 +44,7 @@ export const TodoReadTool = Tool.define({
   id: "opencode.todoread",
   id: "opencode.todoread",
   description: "Use this tool to read your todo list",
   description: "Use this tool to read your todo list",
   parameters: z.object({}),
   parameters: z.object({}),
-  async execute(params, opts) {
+  async execute(_params, opts) {
     const todos = state()[opts.sessionID] ?? []
     const todos = state()[opts.sessionID] ?? []
     return {
     return {
       metadata: {
       metadata: {