opencode-windows-encoding 2.1.2 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -3,23 +3,35 @@
3
3
  [![npm version](https://img.shields.io/npm/v/opencode-windows-encoding)](https://www.npmjs.com/package/opencode-windows-encoding)
4
4
  [![License: AGPL v3](https://img.shields.io/badge/License-AGPL%20v3-blue.svg)](https://www.gnu.org/licenses/agpl-3.0)
5
5
 
6
- OpenCode plugin that fixes UTF-8 encoding issues when executing PowerShell commands on Windows. Single-file, zero npm runtime dependencies.
6
+ OpenCode plugin that fixes UTF-8 encoding issues when executing shell commands on Windows. Single-file, zero npm runtime dependencies.
7
7
 
8
8
  ## The Problem
9
9
 
10
- When OpenCode runs shell commands via PowerShell (`pwsh`) on Windows, the console output encoding defaults to the system locale (e.g., GBK for zh-CN). This causes garbled text when LLM-generated commands produce UTF-8 output — breaking file paths, error messages, and all non-ASCII content.
10
+ When OpenCode runs shell commands on Windows, the console output encoding defaults to the system locale (e.g., GBK for zh-CN). This causes garbled text when LLM-generated commands produce UTF-8 output — breaking file paths, error messages, and all non-ASCII content.
11
11
 
12
12
  ## How It Works
13
13
 
14
- This plugin hooks into OpenCode's `tool.execute.before` event and injects UTF-8 encoding configuration before every PowerShell command:
14
+ This plugin hooks into OpenCode's `tool.execute.before` event, detects the configured shell from OpenCode's config (`config.shell`), and injects the matching UTF-8 encoding configuration before every shell command:
15
15
 
16
+ **PowerShell (`pwsh`):**
16
17
  ```powershell
17
- [Console]::OutputEncoding=[Console]::InputEncoding=[Text.Encoding]::UTF8;$OutputEncoding=[Text.Encoding]::UTF8;
18
+ [Console]::OutputEncoding=[Console]::InputEncoding=[Text.Encoding]::UTF8;$OutputEncoding=[Text.Encoding]::UTF8;$env:PYTHONIOENCODING='utf-8';
19
+ ```
20
+
21
+ **Bash / POSIX shells (`bash`, `zsh`, `sh`, ...):**
22
+ ```bash
23
+ export LC_ALL=C.UTF-8; export LANG=C.UTF-8; export PYTHONIOENCODING=utf-8;
24
+ ```
25
+
26
+ **Command Prompt (`cmd`):**
27
+ ```bat
28
+ chcp 65001 >nul
18
29
  ```
19
30
 
20
31
  ### Key behaviors:
32
+ - **Shell auto-detection** — reads `config.shell` from OpenCode at startup; falls back to platform detection (`pwsh` on Windows, `bash` elsewhere) when unset or unavailable
21
33
  - **Automatic injection** — applies to all `bash` and `shell` tool calls
22
- - **Idempotent** — skips commands that already contain `OutputEncoding` to avoid duplication
34
+ - **Idempotent** — skips commands that already contain the shell's encoding marker (`OutputEncoding` / `LC_ALL` / `chcp`) to avoid duplication
23
35
  - **`set` prefix aware** — preserves PowerShell `set VAR="value"` prefixes before injecting
24
36
  - **Zero config** — works out of the box with no options
25
37
  - **Debug logging off by default** — set `OPENCODE_UTF8_DEBUG=1` to enable diagnostic logging to `$TMP/utf8-plugin.log`
@@ -74,8 +86,8 @@ Restart OpenCode to apply. No `npm install`, no build step.
74
86
  ## Requirements
75
87
 
76
88
  - **OpenCode** (any recent version with plugin support)
77
- - **PowerShell 7+** (`pwsh`)
78
89
  - **Windows** (this plugin is designed specifically for Windows encoding issues)
90
+ - **Any of**: PowerShell 7+ (`pwsh`), Bash, or Command Prompt (`cmd`)
79
91
 
80
92
  ## Development
81
93
 
@@ -1,15 +1,16 @@
1
1
  import { PluginInput } from '@opencode-ai/plugin';
2
2
 
3
3
  /**
4
- * OpenCode Plugin — UTF-8 Encoding Fix for Windows + PowerShell
4
+ * OpenCode Plugin — UTF-8 Encoding Fix for Windows
5
5
  *
6
6
  * 单文件插件,可直接复制到 ~/.config/opencode/plugins/ 使用,无需 npm install。
7
7
  *
8
- * 工作原理:拦截所有 bash/shell 工具调用,在命令前注入 PowerShell
9
- * UTF-8 编码配置,解决 Windows 下中文/非 ASCII 字符乱码问题。
8
+ * 工作原理:拦截所有 bash/shell 工具调用,根据 opencode 当前配置的 shell
9
+ * (pwsh / bash / cmd)在命令前注入对应的 UTF-8 编码配置,解决中文/非 ASCII
10
+ * 字符乱码问题。
10
11
  */
11
12
 
12
- declare const Utf8EncodingPlugin: (_input: PluginInput) => Promise<{
13
+ declare const Utf8EncodingPlugin: (input: PluginInput) => Promise<{
13
14
  "tool.execute.before": (input: {
14
15
  tool: string;
15
16
  sessionID: string;
@@ -12,17 +12,68 @@ function flog(msg) {
12
12
  } catch {
13
13
  }
14
14
  }
15
- var UTF8_ENC = "[Console]::OutputEncoding=[Console]::InputEncoding=[Text.Encoding]::UTF8;$OutputEncoding=[Text.Encoding]::UTF8;$env:PYTHONIOENCODING='utf-8';";
15
+ var ENC = {
16
+ pwsh: {
17
+ prefix: "[Console]::OutputEncoding=[Console]::InputEncoding=[Text.Encoding]::UTF8;$OutputEncoding=[Text.Encoding]::UTF8;$env:PYTHONIOENCODING='utf-8';",
18
+ sep: "\n",
19
+ marker: "OutputEncoding"
20
+ },
21
+ bash: {
22
+ prefix: "export LC_ALL=C.UTF-8; export LANG=C.UTF-8; export PYTHONIOENCODING=utf-8;",
23
+ sep: "\n",
24
+ marker: "LC_ALL"
25
+ },
26
+ cmd: {
27
+ prefix: "chcp 65001 >nul",
28
+ sep: " & ",
29
+ marker: "chcp"
30
+ }
31
+ };
32
+ function detectShellKind(shell) {
33
+ if (shell) {
34
+ const base = shell.replace(/\\/g, "/").split("/").pop().toLowerCase().replace(/\.exe$/, "");
35
+ if (base === "pwsh" || base === "powershell") return "pwsh";
36
+ if (base === "cmd") return "cmd";
37
+ return "bash";
38
+ }
39
+ return process.platform === "win32" ? "pwsh" : "bash";
40
+ }
41
+ function withTimeout(p, ms) {
42
+ return new Promise((resolve, reject) => {
43
+ const t = setTimeout(() => reject(new Error("timeout")), ms);
44
+ p.then(
45
+ (v) => {
46
+ clearTimeout(t);
47
+ resolve(v);
48
+ },
49
+ (e) => {
50
+ clearTimeout(t);
51
+ reject(e);
52
+ }
53
+ );
54
+ });
55
+ }
56
+ async function resolveShellKind(client) {
57
+ try {
58
+ const res = await withTimeout(client.config.get(), 3e3);
59
+ const shell = res.data?.shell;
60
+ return detectShellKind(shell);
61
+ } catch {
62
+ return detectShellKind(void 0);
63
+ }
64
+ }
16
65
  function stripSetPrefixes(cmd) {
17
66
  const m = cmd.match(/^((?:set\s+\w+="[^"]*"\s*&&\s*)+)/);
18
67
  if (m) return { prefixes: m[1], cleanCmd: cmd.slice(m[1].length) };
19
68
  return { prefixes: "", cleanCmd: cmd };
20
69
  }
21
- var Utf8EncodingPlugin = async (_input) => {
70
+ var Utf8EncodingPlugin = async (input) => {
22
71
  flog("=== LOADED ===");
72
+ let kindPromise = null;
73
+ const getKind = () => kindPromise ??= resolveShellKind(input.client);
23
74
  return {
24
- "tool.execute.before": async (input, output) => {
25
- const tool = String(input?.tool ?? "");
75
+ "tool.execute.before": async (input2, output) => {
76
+ const tool = String(input2?.tool ?? "");
26
77
  flog(`[tool.before] tool="${tool}"`);
27
78
  if (tool !== "bash" && tool !== "shell") return;
28
79
  const args = output.args;
@@ -37,11 +88,14 @@ var Utf8EncodingPlugin = async (_input) => {
37
88
  }
38
89
  const { prefixes, cleanCmd } = stripSetPrefixes(cmd);
39
90
  flog(` orig: ${cleanCmd.slice(0, 120)}`);
40
- if (cleanCmd.includes("OutputEncoding")) {
91
+ const kind = await getKind();
92
+ const { prefix, sep, marker } = ENC[kind];
93
+ flog(` shell kind: ${kind}`);
94
+ if (cleanCmd.includes(marker)) {
41
95
  flog(" skip (idempotent)");
42
96
  return;
43
97
  }
44
- args.command = prefixes + UTF8_ENC + "\n" + cleanCmd;
98
+ args.command = prefixes + prefix + sep + cleanCmd;
45
99
  flog(" INJECTED");
46
100
  }
47
101
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utf8-encoding.ts"],"sourcesContent":["/**\n * OpenCode Plugin — UTF-8 Encoding Fix for Windows + PowerShell\n *\n * 单文件插件,可直接复制到 ~/.config/opencode/plugins/ 使用,无需 npm install。\n *\n * 工作原理:拦截所有 bash/shell 工具调用,在命令前注入 PowerShell\n * UTF-8 编码配置,解决 Windows 下中文/非 ASCII 字符乱码问题。\n */\n\nimport { appendFileSync } from \"node:fs\"\nimport { tmpdir } from \"node:os\"\nimport { join } from \"node:path\"\nimport type { PluginInput } from \"@opencode-ai/plugin\"\n\n// 调试日志(写入临时目录,默认关闭,设 OPENCODE_UTF8_DEBUG=1 开启)\nconst DEBUG = process.env.OPENCODE_UTF8_DEBUG === \"1\"\nconst LOG = join(tmpdir(), \"utf8-plugin.log\")\nfunction flog(msg: string) {\n if (!DEBUG) return\n try { appendFileSync(LOG, `[${new Date().toISOString()}] ${msg}\\n`, \"utf8\") } catch {}\n}\n\n// ── PowerShell UTF-8 编码前缀 ──\n// Console 编码覆盖所有进程;PYTHONIOENCODING 解决 Python 子进程 I/O 乱码\nconst UTF8_ENC =\n \"[Console]::OutputEncoding=[Console]::InputEncoding=[Text.Encoding]::UTF8;\" +\n \"$OutputEncoding=[Text.Encoding]::UTF8;\" +\n \"$env:PYTHONIOENCODING='utf-8';\"\n\n/** 提取 opencode 在命令前追加的 set VAR=\"value\" && 前缀 */\nfunction stripSetPrefixes(cmd: string): { prefixes: string; cleanCmd: string } {\n const m = cmd.match(/^((?:set\\s+\\w+=\"[^\"]*\"\\s*&&\\s*)+)/)\n if (m) return { prefixes: m[1], cleanCmd: cmd.slice(m[1].length) }\n return { prefixes: \"\", cleanCmd: cmd }\n}\n\nexport const Utf8EncodingPlugin = async (_input: PluginInput) => {\n flog(\"=== LOADED ===\")\n\n return {\n \"tool.execute.before\": async (input: { tool: string; sessionID: string; callID: string }, output: { args: any }) => {\n const tool = String(input?.tool ?? \"\")\n flog(`[tool.before] tool=\"${tool}\"`)\n\n if (tool !== \"bash\" && tool !== \"shell\") return\n\n const args = output.args\n if (!args) { flog(\" no args\"); return }\n\n const cmd = args.command\n if (typeof cmd !== \"string\" || !cmd) {\n flog(` args keys: ${JSON.stringify(Object.keys(args))}`)\n return\n }\n\n const { prefixes, cleanCmd } = stripSetPrefixes(cmd)\n flog(` orig: ${cleanCmd.slice(0, 120)}`)\n\n // 防止重复注入\n if (cleanCmd.includes(\"OutputEncoding\")) { flog(\" skip (idempotent)\"); return }\n\n args.command = prefixes + UTF8_ENC + \"\\n\" + cleanCmd\n flog(\" INJECTED\")\n },\n }\n}\n\nexport default Utf8EncodingPlugin\n"],"mappings":";AASA,SAAS,sBAAsB;AAC/B,SAAS,cAAc;AACvB,SAAS,YAAY;AAIrB,IAAM,QAAQ,QAAQ,IAAI,wBAAwB;AAClD,IAAM,MAAM,KAAK,OAAO,GAAG,iBAAiB;AAC5C,SAAS,KAAK,KAAa;AACzB,MAAI,CAAC,MAAO;AACZ,MAAI;AAAE,mBAAe,KAAK,KAAI,oBAAI,KAAK,GAAE,YAAY,CAAC,KAAK,GAAG;AAAA,GAAM,MAAM;AAAA,EAAE,QAAQ;AAAA,EAAC;AACvF;AAIA,IAAM,WACJ;AAKF,SAAS,iBAAiB,KAAqD;AAC7E,QAAM,IAAI,IAAI,MAAM,mCAAmC;AACvD,MAAI,EAAG,QAAO,EAAE,UAAU,EAAE,CAAC,GAAG,UAAU,IAAI,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE;AACjE,SAAO,EAAE,UAAU,IAAI,UAAU,IAAI;AACvC;AAEO,IAAM,qBAAqB,OAAO,WAAwB;AAC/D,OAAK,gBAAgB;AAErB,SAAO;AAAA,IACL,uBAAuB,OAAO,OAA4D,WAA0B;AAClH,YAAM,OAAO,OAAO,OAAO,QAAQ,EAAE;AACrC,WAAK,uBAAuB,IAAI,GAAG;AAEnC,UAAI,SAAS,UAAU,SAAS,QAAS;AAEzC,YAAM,OAAO,OAAO;AACpB,UAAI,CAAC,MAAM;AAAE,aAAK,WAAW;AAAG;AAAA,MAAO;AAEvC,YAAM,MAAM,KAAK;AACjB,UAAI,OAAO,QAAQ,YAAY,CAAC,KAAK;AACnC,aAAK,gBAAgB,KAAK,UAAU,OAAO,KAAK,IAAI,CAAC,CAAC,EAAE;AACxD;AAAA,MACF;AAEA,YAAM,EAAE,UAAU,SAAS,IAAI,iBAAiB,GAAG;AACnD,WAAK,WAAW,SAAS,MAAM,GAAG,GAAG,CAAC,EAAE;AAGxC,UAAI,SAAS,SAAS,gBAAgB,GAAG;AAAE,aAAK,qBAAqB;AAAG;AAAA,MAAO;AAE/E,WAAK,UAAU,WAAW,WAAW,OAAO;AAC5C,WAAK,YAAY;AAAA,IACnB;AAAA,EACF;AACF;AAEA,IAAO,wBAAQ;","names":[]}
1
+ {"version":3,"sources":["../src/utf8-encoding.ts"],"sourcesContent":["/**\n * OpenCode Plugin — UTF-8 Encoding Fix for Windows\n *\n * 单文件插件,可直接复制到 ~/.config/opencode/plugins/ 使用,无需 npm install。\n *\n * 工作原理:拦截所有 bash/shell 工具调用,根据 opencode 当前配置的 shell\n * (pwsh / bash / cmd)在命令前注入对应的 UTF-8 编码配置,解决中文/非 ASCII\n * 字符乱码问题。\n */\n\nimport { appendFileSync } from \"node:fs\"\nimport { tmpdir } from \"node:os\"\nimport { join } from \"node:path\"\nimport type { PluginInput } from \"@opencode-ai/plugin\"\n\n// 调试日志(写入临时目录,默认关闭,设 OPENCODE_UTF8_DEBUG=1 开启)\nconst DEBUG = process.env.OPENCODE_UTF8_DEBUG === \"1\"\nconst LOG = join(tmpdir(), \"utf8-plugin.log\")\nfunction flog(msg: string) {\n if (!DEBUG) return\n try { appendFileSync(LOG, `[${new Date().toISOString()}] ${msg}\\n`, \"utf8\") } catch {}\n}\n\ntype ShellKind = \"pwsh\" | \"bash\" | \"cmd\"\n\n// ── shell 的 UTF-8 编码前缀与命令分隔符 ──\nconst ENC: Record<ShellKind, { prefix: string; sep: string; marker: string }> = {\n pwsh: {\n prefix:\n \"[Console]::OutputEncoding=[Console]::InputEncoding=[Text.Encoding]::UTF8;\" +\n \"$OutputEncoding=[Text.Encoding]::UTF8;\" +\n \"$env:PYTHONIOENCODING='utf-8';\",\n sep: \"\\n\",\n marker: \"OutputEncoding\",\n },\n bash: {\n prefix: \"export LC_ALL=C.UTF-8; export LANG=C.UTF-8; export PYTHONIOENCODING=utf-8;\",\n sep: \"\\n\",\n marker: \"LC_ALL\",\n },\n cmd: {\n prefix: \"chcp 65001 >nul\",\n sep: \" & \",\n marker: \"chcp\",\n },\n}\n\n/** 由 config.shell 的值归一化为 shell 类型 */\nfunction detectShellKind(shell: string | undefined): ShellKind {\n if (shell) {\n const base = shell\n .replace(/\\\\/g, \"/\")\n .split(\"/\")\n .pop()!\n .toLowerCase()\n .replace(/\\.exe$/, \"\")\n if (base === \"pwsh\" || base === \"powershell\") return \"pwsh\"\n if (base === \"cmd\") return \"cmd\"\n return \"bash\" // bash / zsh / sh / dash / ksh 等 POSIX shell\n }\n // 未配置:按平台回退(opencode Windows 默认优先 pwsh)\n return process.platform === \"win32\" ? \"pwsh\" : \"bash\"\n}\n\n/** 带超时的 Promise(插件内不引入额外运行时依赖) */\nfunction withTimeout<T>(p: Promise<T>, ms: number): Promise<T> {\n return new Promise((resolve, reject) => {\n const t = setTimeout(() => reject(new Error(\"timeout\")), ms)\n p.then(\n (v) => { clearTimeout(t); resolve(v) },\n (e) => { clearTimeout(t); reject(e) },\n )\n })\n}\n\n/** 读取 opencode 配置中的 shell,失败/超时按平台回退(永不 reject) */\nasync function resolveShellKind(client: PluginInput[\"client\"]): Promise<ShellKind> {\n try {\n const res = await withTimeout(client.config.get(), 3000)\n const shell = (res.data as unknown as { shell?: string } | undefined)?.shell\n return detectShellKind(shell)\n } catch {\n return detectShellKind(undefined)\n }\n}\n\n/** 提取 opencode 在命令前追加的 set VAR=\"value\" && 前缀 */\nfunction stripSetPrefixes(cmd: string): { prefixes: string; cleanCmd: string } {\n const m = cmd.match(/^((?:set\\s+\\w+=\"[^\"]*\"\\s*&&\\s*)+)/)\n if (m) return { prefixes: m[1], cleanCmd: cmd.slice(m[1].length) }\n return { prefixes: \"\", cleanCmd: cmd }\n}\n\nexport const Utf8EncodingPlugin = async (input: PluginInput) => {\n flog(\"=== LOADED ===\")\n\n // 惰性检测:绝不在插件加载阶段调用 client.config.get()\n //(会因 httpapi 未就绪 + 请求无超时而永久挂起,导致 opencode 启动死锁)。\n // 首次 tool hook 触发时再查,结果缓存。\n let kindPromise: Promise<ShellKind> | null = null\n const getKind = () => (kindPromise ??= resolveShellKind(input.client))\n\n return {\n \"tool.execute.before\": async (input: { tool: string; sessionID: string; callID: string }, output: { args: any }) => {\n const tool = String(input?.tool ?? \"\")\n flog(`[tool.before] tool=\"${tool}\"`)\n\n if (tool !== \"bash\" && tool !== \"shell\") return\n\n const args = output.args\n if (!args) { flog(\" no args\"); return }\n\n const cmd = args.command\n if (typeof cmd !== \"string\" || !cmd) {\n flog(` args keys: ${JSON.stringify(Object.keys(args))}`)\n return\n }\n\n const { prefixes, cleanCmd } = stripSetPrefixes(cmd)\n flog(` orig: ${cleanCmd.slice(0, 120)}`)\n\n const kind = await getKind()\n const { prefix, sep, marker } = ENC[kind]\n flog(` shell kind: ${kind}`)\n\n // 防止重复注入\n if (cleanCmd.includes(marker)) { flog(\" skip (idempotent)\"); return }\n\n args.command = prefixes + prefix + sep + cleanCmd\n flog(\" INJECTED\")\n },\n }\n}\n\nexport default Utf8EncodingPlugin\n"],"mappings":"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","names":["input"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-windows-encoding",
3
- "version": "2.1.2",
3
+ "version": "3.0.1",
4
4
  "description": "OpenCode plugin to fix UTF-8 encoding issues in PowerShell on Windows",
5
5
  "type": "module",
6
6
  "main": "./dist/utf8-encoding.js",