Skip to content

Commit f7bcead

Browse files
committed
✨ feat(workspace): accept workspaceRoot as explicit request body field
Add workspaceRoot as an optional field in ChatCompletionRequest so clients can explicitly pass the workspace directory. Resolution order: 1. body.workspaceRoot (explicit from client) 2. extractWorkspaceFromMessages() (parsed from system message) 3. process.cwd() (server working directory fallback)
1 parent fca8532 commit f7bcead

File tree

2 files changed

+5
-3
lines changed

2 files changed

+5
-3
lines changed

plugin/src/server.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ interface ChatCompletionRequest {
2929
model?: string;
3030
messages?: ChatMessage[];
3131
stream?: boolean;
32+
workspaceRoot?: string;
3233
}
3334

3435
// ACP Protocol Types
@@ -751,7 +752,7 @@ async function handleChatCompletions(
751752
const messages = body.messages;
752753
const stream = body.stream ?? false;
753754
const model = body.model ?? DEFAULT_MODEL;
754-
const workspaceRoot = extractWorkspaceFromMessages(messages) ?? undefined;
755+
const workspaceRoot = body.workspaceRoot ?? extractWorkspaceFromMessages(messages) ?? undefined;
755756
const prompt = formatMessages(messages);
756757

757758
if (stream) {

src/server.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ interface ChatCompletionRequest {
3131
model?: string;
3232
messages?: ChatMessage[];
3333
stream?: boolean;
34+
workspaceRoot?: string;
3435
}
3536

3637
// ACP Protocol Types - Session Update Types
@@ -1543,8 +1544,8 @@ async function handleChatCompletions(req: IncomingMessage, res: ServerResponse):
15431544
const stream = body.stream ?? false;
15441545
const model = body.model ?? DEFAULT_MODEL;
15451546
1546-
// Extract workspace root from messages (OpenCode sends this in system message)
1547-
const workspaceRoot = extractWorkspaceFromMessages(messages);
1547+
// Extract workspace root: prefer explicit field, then parse from messages
1548+
const workspaceRoot = body.workspaceRoot ?? extractWorkspaceFromMessages(messages);
15481549
if (workspaceRoot) {
15491550
structuredLog('info', 'Request', `Extracted workspace: ${workspaceRoot}`, { requestId });
15501551
}

0 commit comments

Comments
 (0)