Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/artifact-tools.ts
Original file line number Diff line number Diff line change
Expand Up @@ -98,13 +98,13 @@ export function registerArtifactTools(
{
title: "Download attached or generated file",
description:
"Stream one MCP-host-provided native file to a requested relative path inside an already-open workspace. Existing destinations, arbitrary URLs, absolute paths, traversal, symlinked parents, local source paths, and malformed file objects are rejected.",
"Stream one MCP-host-provided native file to a requested relative path inside a workspace. Existing destinations, arbitrary URLs, absolute paths, traversal, symlinked parents, source filesystem paths, and malformed file objects are rejected.",
inputSchema: {
file: openAIFileReferenceInputSchema.describe(
"Native file value authorized and supplied by the MCP host.",
),
workspaceId: z.string().min(1).describe(
"Workspace identifier returned by open_workspace.",
"Workspace to use. Reuse the current project's workspaceId.",
),
path: z.string().min(1).describe(
"Relative destination path inside the selected workspace. The destination must not already exist.",
Expand Down
10 changes: 0 additions & 10 deletions src/server.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,13 +48,6 @@ test("open_workspace keeps lifecycle flags out of model output and preserves com
assert.equal("workspaceReused" in repeatedStructured, false);
assert.equal("includeBootstrapContext" in repeatedStructured, false);

const repeatedText = responseText(repeated);
assert.match(repeatedText, /Workspace already open as/);
assert.match(repeatedText, /same checkout previously opened/);
assert.match(repeatedText, /Reuse this workspaceId for subsequent tool calls/);
assert.match(repeatedText, /previously provided for this workspace/);
assert.match(repeatedText, /not repeated here/);

const card = responseCard(repeated);
assert.equal(card.workspaceReused, true);
assert.equal(card.includeBootstrapContext, false);
Expand Down Expand Up @@ -104,7 +97,6 @@ test("new worktrees always receive a fresh workspace and complete worktree conte
assert.match(responseText(result), /Opened isolated worktree workspace/);
}
assert.equal(structuredContent(checkoutAgain).agentsFiles, undefined);
assert.match(responseText(checkoutAgain), /same checkout previously opened/);
});

test("checkout opened after a worktree receives its own complete context", async (t) => {
Expand All @@ -119,7 +111,6 @@ test("checkout opened after a worktree receives its own complete context", async
assert.ok(Array.isArray(structuredContent(checkout).agentsFiles));
assert.equal(structuredContent(checkoutAgain).workspaceId, structuredContent(checkout).workspaceId);
assert.equal(structuredContent(checkoutAgain).agentsFiles, undefined);
assert.match(responseText(checkoutAgain), /same checkout previously opened/);
});

test("a host without conversation metadata receives normal explicit-workspace behavior", async (t) => {
Expand Down Expand Up @@ -171,7 +162,6 @@ test("checkout reuse and context suppression survive a registry restart", async
const restored = await callOpen(restoredClient, context.project, "chat-1");
assert.equal(structuredContent(restored).workspaceId, firstWorkspaceId);
assert.equal(structuredContent(restored).agentsFiles, undefined);
assert.match(responseText(restored), /same checkout previously opened/);
} finally {
await closeRestored();
}
Expand Down
Loading
Loading