summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAdam <[email protected]>2026-01-19 12:44:35 -0600
committerAdam <[email protected]>2026-01-19 12:44:41 -0600
commitc2f9fd5fef5454a1e7cedab14d78267809d10fe9 (patch)
treeabdc80710f89ac165c0a2c2708211688eafee0c6
parent3fd0043d1907b0e565cee73fff0f4725f7c8c0d5 (diff)
downloadopencode-c2f9fd5fef5454a1e7cedab14d78267809d10fe9.tar.gz
opencode-c2f9fd5fef5454a1e7cedab14d78267809d10fe9.zip
fix(app): reload instance after workspace reset
-rw-r--r--packages/app/src/components/prompt-input.tsx11
-rw-r--r--packages/app/src/pages/layout.tsx49
2 files changed, 40 insertions, 20 deletions
diff --git a/packages/app/src/components/prompt-input.tsx b/packages/app/src/components/prompt-input.tsx
index 2f85652a9..c74edd94e 100644
--- a/packages/app/src/components/prompt-input.tsx
+++ b/packages/app/src/components/prompt-input.tsx
@@ -1056,7 +1056,16 @@ export const PromptInput: Component<PromptInputProps> = (props) => {
let session = info()
if (!session && isNewSession) {
- session = await client.session.create().then((x) => x.data ?? undefined)
+ session = await client.session
+ .create()
+ .then((x) => x.data ?? undefined)
+ .catch((err) => {
+ showToast({
+ title: "Failed to create session",
+ description: errorMessage(err),
+ })
+ return undefined
+ })
if (session) navigate(`/${base64Encode(sessionDirectory)}/session/${session.id}`)
}
if (!session) return
diff --git a/packages/app/src/pages/layout.tsx b/packages/app/src/pages/layout.tsx
index 5312ff0a2..81177d138 100644
--- a/packages/app/src/pages/layout.tsx
+++ b/packages/app/src/pages/layout.tsx
@@ -965,10 +965,23 @@ export default function Layout(props: ParentProps) {
if (!current) return
if (directory === current.worktree) return
- const reset = globalSDK.client.worktree
+ const progress = showToast({
+ persistent: true,
+ title: "Resetting workspace",
+ description: "This may take a minute.",
+ })
+ const dismiss = () => toaster.dismiss(progress)
+
+ const sessions = await globalSDK.client.session
+ .list({ directory })
+ .then((x) => x.data ?? [])
+ .catch(() => [])
+
+ const result = await globalSDK.client.worktree
.reset({ directory: current.worktree, worktreeResetInput: { directory } })
.then((x) => x.data)
.catch((err) => {
+ dismiss()
showToast({
title: "Failed to reset workspace",
description: errorMessage(err),
@@ -976,21 +989,16 @@ export default function Layout(props: ParentProps) {
return false
})
- const href = `/${base64Encode(directory)}/session`
- navigate(href)
- layout.mobileSidebar.hide()
-
- void (async () => {
- const sessions = await globalSDK.client.session
- .list({ directory })
- .then((x) => x.data ?? [])
- .catch(() => [])
-
- if (sessions.length === 0) return
+ if (!result) {
+ dismiss()
+ return
+ }
- const archivedAt = Date.now()
- await Promise.all(
- sessions.map((session) =>
+ const archivedAt = Date.now()
+ await Promise.all(
+ sessions
+ .filter((session) => session.time.archived === undefined)
+ .map((session) =>
globalSDK.client.session
.update({
sessionID: session.id,
@@ -999,11 +1007,14 @@ export default function Layout(props: ParentProps) {
})
.catch(() => undefined),
),
- )
- })()
+ )
- const result = await reset
- if (!result) return
+ await globalSDK.client.instance.dispose({ directory }).catch(() => undefined)
+ dismiss()
+
+ const href = `/${base64Encode(directory)}/session`
+ navigate(href)
+ layout.mobileSidebar.hide()
showToast({
title: "Workspace reset",