Jelajahi Sumber

Added sharing config with auto/disabled options (#951)

Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
Co-authored-by: thdxr <[email protected]>
opencode-agent[bot] 7 bulan lalu
induk
melakukan
736396fc70

+ 11 - 3
packages/opencode/src/cli/cmd/run.ts

@@ -93,9 +93,17 @@ export const RunCommand = cmd({
       UI.empty()
 
       const cfg = await Config.get()
-      if (cfg.autoshare || Flag.OPENCODE_AUTO_SHARE || args.share) {
-        await Session.share(session.id)
-        UI.println(UI.Style.TEXT_INFO_BOLD + "~  https://opencode.ai/s/" + session.id.slice(-8))
+      if (cfg.share === "auto" || Flag.OPENCODE_AUTO_SHARE || args.share) {
+        try {
+          await Session.share(session.id)
+          UI.println(UI.Style.TEXT_INFO_BOLD + "~  https://opencode.ai/s/" + session.id.slice(-8))
+        } catch (error) {
+          if (error instanceof Error && error.message.includes("disabled")) {
+            UI.println(UI.Style.TEXT_ERROR_BOLD + "!  " + error.message)
+          } else {
+            throw error
+          }
+        }
       }
       UI.empty()
 

+ 9 - 1
packages/opencode/src/config/config.ts

@@ -117,7 +117,8 @@ export namespace Config {
       $schema: z.string().optional().describe("JSON schema reference for configuration validation"),
       theme: z.string().optional().describe("Theme name to use for the interface"),
       keybinds: Keybinds.optional().describe("Custom keybind configurations"),
-      autoshare: z.boolean().optional().describe("Share newly created sessions automatically"),
+      share: z.enum(["auto", "disabled"]).optional().describe("Control sharing behavior: 'auto' enables automatic sharing, 'disabled' disables all sharing"),
+      autoshare: z.boolean().optional().describe("@deprecated Use 'share' field instead. Share newly created sessions automatically"),
       autoupdate: z.boolean().optional().describe("Automatically update to the latest version"),
       disabled_providers: z.array(z.string()).optional().describe("Disable providers that are loaded automatically"),
       model: z.string().describe("Model to use in the format of provider/model, eg anthropic/claude-2").optional(),
@@ -232,6 +233,11 @@ export namespace Config {
 
     const parsed = Info.safeParse(data)
     if (parsed.success) {
+      // Handle migration from autoshare to share field
+      if (parsed.data.autoshare === true && !parsed.data.share) {
+        parsed.data.share = "auto"
+      }
+      
       if (!parsed.data.$schema) {
         parsed.data.$schema = "https://opencode.ai/config.json"
         await Bun.write(configPath, JSON.stringify(parsed.data, null, 2))
@@ -258,4 +264,6 @@ export namespace Config {
   export function get() {
     return state()
   }
+
+
 }

+ 8 - 1
packages/opencode/src/session/index.ts

@@ -145,11 +145,13 @@ export namespace Session {
     state().sessions.set(result.id, result)
     await Storage.writeJSON("session/info/" + result.id, result)
     const cfg = await Config.get()
-    if (!result.parentID && (Flag.OPENCODE_AUTO_SHARE || cfg.autoshare))
+    if (!result.parentID && (Flag.OPENCODE_AUTO_SHARE || cfg.share === "auto"))
       share(result.id).then((share) => {
         update(result.id, (draft) => {
           draft.share = share
         })
+      }).catch(() => {
+        // Silently ignore sharing errors during session creation
       })
     Bus.publish(Event.Updated, {
       info: result,
@@ -172,6 +174,11 @@ export namespace Session {
   }
 
   export async function share(id: string) {
+    const cfg = await Config.get()
+    if (cfg.share === "disabled") {
+      throw new Error("Sharing is disabled in configuration")
+    }
+    
     const session = await get(id)
     if (session.share) return session.share
     const share = await Share.create(id)