diff --git a/packages/console/app/src/routes/download/index.tsx b/packages/console/app/src/routes/download/index.tsx index 31ce49617b..a19b97aa0f 100644 --- a/packages/console/app/src/routes/download/index.tsx +++ b/packages/console/app/src/routes/download/index.tsx @@ -8,7 +8,6 @@ import { Faq } from "~/component/faq" import desktopAppIcon from "../../asset/lander/opencode-desktop-icon.png" import { Legal } from "~/component/legal" import { config } from "~/config" -import { github } from "~/lib/github" function CopyStatus() { return ( @@ -20,14 +19,7 @@ function CopyStatus() { } export default function Download() { - const githubData = createAsync(() => github(), { - deferStream: true, - }) - const download = () => { - const version = githubData()?.release.tag_name - if (!version) return null - return `https://github.com/sst/opencode/releases/download/${version}` - } + const downloadUrl = "https://github.com/sst/opencode/releases/latest/download" const handleCopyClick = (command: string) => (event: Event) => { const button = event.currentTarget as HTMLButtonElement navigator.clipboard.writeText(command) @@ -115,7 +107,7 @@ export default function Download() { macOS (Apple Silicon) - + Download @@ -131,7 +123,7 @@ export default function Download() { macOS (Intel) - + Download @@ -154,7 +146,7 @@ export default function Download() { Windows (x64) - + Download @@ -170,7 +162,7 @@ export default function Download() { Linux (.deb) - + Download @@ -186,7 +178,7 @@ export default function Download() { Linux (.rpm) - + Download diff --git a/packages/opencode/src/config/config.ts b/packages/opencode/src/config/config.ts index 42f6b11e9f..333e198484 100644 --- a/packages/opencode/src/config/config.ts +++ b/packages/opencode/src/config/config.ts @@ -783,6 +783,7 @@ export namespace Config { .array(z.string()) .optional() .describe("Tools that should only be available to primary agents."), + continue_loop_on_deny: z.boolean().optional().describe("Continue the agent loop when a tool call is denied"), }) .optional(), }) diff --git a/packages/opencode/src/session/processor.ts b/packages/opencode/src/session/processor.ts index 4e701e8138..1d4d243031 100644 --- a/packages/opencode/src/session/processor.ts +++ b/packages/opencode/src/session/processor.ts @@ -12,6 +12,7 @@ import { SessionStatus } from "./status" import { Plugin } from "@/plugin" import type { Provider } from "@/provider/provider" import { LLM } from "./llm" +import { Config } from "@/config/config" export namespace SessionProcessor { const DOOM_LOOP_THRESHOLD = 3 @@ -40,6 +41,7 @@ export namespace SessionProcessor { }, async process(streamInput: LLM.StreamInput) { log.info("process") + const shouldBreak = (await Config.get()).experimental?.continue_loop_on_deny !== true while (true) { try { let currentText: MessageV2.TextPart | undefined @@ -219,7 +221,7 @@ export namespace SessionProcessor { }) if (value.error instanceof Permission.RejectedError) { - blocked = true + blocked = shouldBreak } delete toolcalls[value.toolCallId] } diff --git a/packages/sdk/js/src/v2/gen/types.gen.ts b/packages/sdk/js/src/v2/gen/types.gen.ts index 571e33ef0a..31d5b85610 100644 --- a/packages/sdk/js/src/v2/gen/types.gen.ts +++ b/packages/sdk/js/src/v2/gen/types.gen.ts @@ -1519,6 +1519,10 @@ export type Config = { * Tools that should only be available to primary agents. */ primary_tools?: Array + /** + * Continue the agent loop when a tool call is denied + */ + continue_loop_on_deny?: boolean } } diff --git a/packages/sdk/openapi.json b/packages/sdk/openapi.json index d3dd438f5b..21928684a0 100644 --- a/packages/sdk/openapi.json +++ b/packages/sdk/openapi.json @@ -8283,6 +8283,10 @@ "items": { "type": "string" } + }, + "continue_loop_on_deny": { + "description": "Continue the agent loop when a tool call is denied", + "type": "boolean" } } } diff --git a/packages/tauri/src-tauri/tauri.conf.json b/packages/tauri/src-tauri/tauri.conf.json index e6b089886a..a47b4a619e 100644 --- a/packages/tauri/src-tauri/tauri.conf.json +++ b/packages/tauri/src-tauri/tauri.conf.json @@ -19,7 +19,7 @@ }, "bundle": { "active": true, - "targets": ["deb", "rpm", "dmg", "nsis", "appimage"], + "targets": ["deb", "rpm", "dmg", "nsis"], "icon": ["icons/32x32.png", "icons/128x128.png", "icons/128x128@2x.png", "icons/icon.icns", "icons/icon.ico"], "externalBin": ["sidecars/opencode"], "createUpdaterArtifacts": true,