Skip to content

Commit 7b517cc

Browse files
committed
infer workspace from context when creating session
1 parent 8045a6e commit 7b517cc

6 files changed

Lines changed: 17 additions & 18 deletions

File tree

packages/opencode/src/cli/cmd/tui/component/dialog-workspace-create.tsx

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -44,15 +44,13 @@ export async function openWorkspaceSession(input: {
4444
console.log("opening!")
4545
while (true) {
4646
console.log("creating")
47-
const result = await client.session
48-
.create({ workspaceID: input.workspaceID, workspace: input.workspaceID })
49-
.catch((err) => {
50-
log.error("workspace session create request failed", {
51-
workspaceID: input.workspaceID,
52-
error: errorData(err),
53-
})
54-
return undefined
47+
const result = await client.session.create({ workspace: input.workspaceID }).catch((err) => {
48+
log.error("workspace session create request failed", {
49+
workspaceID: input.workspaceID,
50+
error: errorData(err),
5551
})
52+
return undefined
53+
})
5654
if (!result) {
5755
input.toast.show({
5856
message: "Failed to create workspace session",

packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -615,10 +615,7 @@ export function Prompt(props: PromptProps) {
615615

616616
let sessionID = props.sessionID
617617
if (sessionID == null) {
618-
const res = await sdk.client.session.create({
619-
workspace: props.workspaceID,
620-
workspaceID: props.workspaceID,
621-
})
618+
const res = await sdk.client.session.create({ workspace: props.workspaceID })
622619

623620
if (res.error) {
624621
console.log("Creating a session failed:", res.error)

packages/opencode/src/control-plane/workspace-context.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,17 @@ import { LocalContext } from "../util/local-context"
22
import type { WorkspaceID } from "../control-plane/schema"
33

44
export interface WorkspaceContext {
5-
workspaceID: string
5+
workspaceID: WorkspaceID
66
}
77

88
const context = LocalContext.create<WorkspaceContext>("instance")
99

1010
export const WorkspaceContext = {
1111
async provide<R>(input: { workspaceID: WorkspaceID; fn: () => R }): Promise<R> {
12-
return context.provide({ workspaceID: input.workspaceID as string }, () => input.fn())
12+
return context.provide({ workspaceID: input.workspaceID }, () => input.fn())
1313
},
1414

15-
restore<R>(workspaceID: string, fn: () => R): R {
15+
restore<R>(workspaceID: WorkspaceID, fn: () => R): R {
1616
return context.provide({ workspaceID }, fn)
1717
},
1818

packages/opencode/src/effect/bridge.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { Effect, Fiber } from "effect"
22
import { WorkspaceContext } from "@/control-plane/workspace-context"
33
import { Instance, type InstanceContext } from "@/project/instance"
44
import { LocalContext } from "@/util/local-context"
5+
import type { WorkspaceID } from "@/control-plane/schema"
56
import { InstanceRef, WorkspaceRef } from "./instance-ref"
67
import { attachWith } from "./run-service"
78

@@ -11,7 +12,7 @@ export namespace EffectBridge {
1112
readonly fork: <A, E, R>(effect: Effect.Effect<A, E, R>) => Fiber.Fiber<A, E>
1213
}
1314

14-
function restore<R>(instance: InstanceContext | undefined, workspace: string | undefined, fn: () => R): R {
15+
function restore<R>(instance: InstanceContext | undefined, workspace: WorkspaceID | undefined, fn: () => R): R {
1516
if (instance && workspace !== undefined) {
1617
return WorkspaceContext.restore(workspace, () => Instance.restore(instance, fn))
1718
}
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
import { Context } from "effect"
22
import type { InstanceContext } from "@/project/instance"
3+
import type { WorkspaceID } from "@/control-plane/schema"
34

45
export const InstanceRef = Context.Reference<InstanceContext | undefined>("~opencode/InstanceRef", {
56
defaultValue: () => undefined,
67
})
78

8-
export const WorkspaceRef = Context.Reference<string | undefined>("~opencode/WorkspaceRef", {
9+
export const WorkspaceRef = Context.Reference<WorkspaceID | undefined>("~opencode/WorkspaceRef", {
910
defaultValue: () => undefined,
1011
})

packages/opencode/src/session/index.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -527,12 +527,14 @@ export namespace Session {
527527
workspaceID?: WorkspaceID
528528
}) {
529529
const directory = yield* InstanceState.directory
530+
const workspace = yield* InstanceState.workspaceID
531+
530532
return yield* createNext({
531533
parentID: input?.parentID,
532534
directory,
533535
title: input?.title,
534536
permission: input?.permission,
535-
workspaceID: input?.workspaceID,
537+
workspaceID: workspace,
536538
})
537539
})
538540

0 commit comments

Comments
 (0)