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,