summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorjwaterwater <[email protected]>2026-01-07 20:46:17 +0800
committerGitHub <[email protected]>2026-01-07 06:46:17 -0600
commit2d52a461a0fb20828c3d3334773a5cbffe7bf3ee (patch)
tree9799bd8a3b25c5fba0d7bf073989cceaed961638
parent9cce0cf4f404debe1656788328bedd029c618d78 (diff)
downloadopencode-2d52a461a0fb20828c3d3334773a5cbffe7bf3ee.tar.gz
opencode-2d52a461a0fb20828c3d3334773a5cbffe7bf3ee.zip
fix: encode non-ASCII directory paths in HTTP headers (#7145)
Co-authored-by: Claude <[email protected]>
-rw-r--r--packages/opencode/src/server/server.ts7
-rw-r--r--packages/sdk/js/src/v2/client.ts4
2 files changed, 9 insertions, 2 deletions
diff --git a/packages/opencode/src/server/server.ts b/packages/opencode/src/server/server.ts
index 04ec4673e..615d92728 100644
--- a/packages/opencode/src/server/server.ts
+++ b/packages/opencode/src/server/server.ts
@@ -246,7 +246,12 @@ export namespace Server {
},
)
.use(async (c, next) => {
- const directory = c.req.query("directory") || c.req.header("x-opencode-directory") || process.cwd()
+ let directory = c.req.query("directory") || c.req.header("x-opencode-directory") || process.cwd()
+ try {
+ directory = decodeURIComponent(directory)
+ } catch {
+ // fallback to original value
+ }
return Instance.provide({
directory,
init: InstanceBootstrap,
diff --git a/packages/sdk/js/src/v2/client.ts b/packages/sdk/js/src/v2/client.ts
index 806ad26e5..8685be52d 100644
--- a/packages/sdk/js/src/v2/client.ts
+++ b/packages/sdk/js/src/v2/client.ts
@@ -19,9 +19,11 @@ export function createOpencodeClient(config?: Config & { directory?: string }) {
}
if (config?.directory) {
+ const isNonASCII = /[^\x00-\x7F]/.test(config.directory)
+ const encodedDirectory = isNonASCII ? encodeURIComponent(config.directory) : config.directory
config.headers = {
...config.headers,
- "x-opencode-directory": config.directory,
+ "x-opencode-directory": encodedDirectory,
}
}