summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authoropencode-agent[bot] <219766164+opencode-agent[bot]@users.noreply.github.com>2025-07-13 16:43:58 -0400
committerGitHub <[email protected]>2025-07-13 16:43:58 -0400
commit736396fc70ab05204b886634ffbcd1318d82eca8 (patch)
tree37078ef2315c841684955e6465177f4c6dce2f1c
parent177bfed93ed04c55cc991463b9d7d0fe30ff6000 (diff)
downloadopencode-736396fc70ab05204b886634ffbcd1318d82eca8.tar.gz
opencode-736396fc70ab05204b886634ffbcd1318d82eca8.zip
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]>
-rw-r--r--packages/opencode/src/cli/cmd/run.ts14
-rw-r--r--packages/opencode/src/config/config.ts10
-rw-r--r--packages/opencode/src/session/index.ts9
3 files changed, 28 insertions, 5 deletions
diff --git a/packages/opencode/src/cli/cmd/run.ts b/packages/opencode/src/cli/cmd/run.ts
index e6b9e86d2..0daa510d1 100644
--- a/packages/opencode/src/cli/cmd/run.ts
+++ b/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()
diff --git a/packages/opencode/src/config/config.ts b/packages/opencode/src/config/config.ts
index 196b4db83..3c3890fc4 100644
--- a/packages/opencode/src/config/config.ts
+++ b/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()
}
+
+
}
diff --git a/packages/opencode/src/session/index.ts b/packages/opencode/src/session/index.ts
index 21434c3b6..16b9de9d3 100644
--- a/packages/opencode/src/session/index.ts
+++ b/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)