Skip to content

Commit 0130198

Browse files
committed
同步镜像副本并转义含空格的恢复命令路径
上一提交只改了 canonical hook,两个分发镜像仍是旧的相对路径,导致 validate_portable_plugin.py 的 mirror-drift 校验失败;现三副本一致。 同时转义恢复命令中的绝对路径:插件路径可能含空格(macOS 的 Application Support)或单引号,未转义会被 shell 拆成多个参数,照抄即失败。 按 POSIX 规则单引号包裹,内部单引号转义;已实测普通路径、含空格路径、 含单引号路径三种情况经 sh 还原均与原值一致。 mirror-drift 校验 PASS;655 项测试通过;三副本 node --check 通过。
1 parent 79af622 commit 0130198

3 files changed

Lines changed: 27 additions & 3 deletions

File tree

‎com.github.copilot/hooks/rust_runtime_dispatch.cjs‎

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,18 @@ const EVENTS = new Map([
1717
['stop', 'Stop'],
1818
]);
1919

20+
// 恢复命令是给用户直接复制执行的;插件路径可能含空格(macOS 的 Application Support)
21+
// 或单引号,未转义会被 shell 拆成多个参数。按 POSIX 规则用单引号包裹,内部单引号转义。
22+
function shellQuote(value) {
23+
return `'${String(value).replace(/'/g, "'\\''")}'`;
24+
}
25+
2026
function incomplete(event, reason) {
2127
const safe = /^[a-z_]+$/.test(reason) ? reason : 'runtime_unavailable';
22-
const message = `CodeGuard Rust 运行时未完成(${safe});本次源码检查未运行,交付未评估。请用 Node 18+ 执行 node runtime/codeguard_runtime.cjs verify;支持的 macOS arm64 上显式运行 node runtime/codeguard_runtime.cjs install --download。运行时可用后,使用同一入口 exec init ABS_PROJECT --apply 初始化修复任务,或 exec next ABS_PROJECT 获取指引。`;
28+
// hooks 在用户 workspace 里运行,而管理器位于已安装插件根目录;相对路径会让照抄的用户
29+
// 得到 MODULE_NOT_FOUND,生命周期就永久卡在未完成。必须给出可直接执行的绝对路径。
30+
const manager = shellQuote(path.join(pluginRoot, 'runtime', 'codeguard_runtime.cjs'));
31+
const message = `CodeGuard Rust 运行时未完成(${safe});本次源码检查未运行,交付未评估。请用 Node 18+ 执行 node ${manager} verify;支持的 macOS arm64 上显式运行 node ${manager} install --download。运行时可用后,使用同一入口 exec init ABS_PROJECT --apply 初始化修复任务,或 exec next ABS_PROJECT 获取指引。`;
2332
return event === 'stop'
2433
? { systemMessage: message }
2534
: { hookSpecificOutput: { hookEventName: EVENTS.get(event), additionalContext: message } };

‎dev.openhands/hooks/rust_runtime_dispatch.cjs‎

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,18 @@ const EVENTS = new Map([
1717
['stop', 'Stop'],
1818
]);
1919

20+
// 恢复命令是给用户直接复制执行的;插件路径可能含空格(macOS 的 Application Support)
21+
// 或单引号,未转义会被 shell 拆成多个参数。按 POSIX 规则用单引号包裹,内部单引号转义。
22+
function shellQuote(value) {
23+
return `'${String(value).replace(/'/g, "'\\''")}'`;
24+
}
25+
2026
function incomplete(event, reason) {
2127
const safe = /^[a-z_]+$/.test(reason) ? reason : 'runtime_unavailable';
22-
const message = `CodeGuard Rust 运行时未完成(${safe});本次源码检查未运行,交付未评估。请用 Node 18+ 执行 node runtime/codeguard_runtime.cjs verify;支持的 macOS arm64 上显式运行 node runtime/codeguard_runtime.cjs install --download。运行时可用后,使用同一入口 exec init ABS_PROJECT --apply 初始化修复任务,或 exec next ABS_PROJECT 获取指引。`;
28+
// hooks 在用户 workspace 里运行,而管理器位于已安装插件根目录;相对路径会让照抄的用户
29+
// 得到 MODULE_NOT_FOUND,生命周期就永久卡在未完成。必须给出可直接执行的绝对路径。
30+
const manager = shellQuote(path.join(pluginRoot, 'runtime', 'codeguard_runtime.cjs'));
31+
const message = `CodeGuard Rust 运行时未完成(${safe});本次源码检查未运行,交付未评估。请用 Node 18+ 执行 node ${manager} verify;支持的 macOS arm64 上显式运行 node ${manager} install --download。运行时可用后,使用同一入口 exec init ABS_PROJECT --apply 初始化修复任务,或 exec next ABS_PROJECT 获取指引。`;
2332
return event === 'stop'
2433
? { systemMessage: message }
2534
: { hookSpecificOutput: { hookEventName: EVENTS.get(event), additionalContext: message } };

‎hooks/rust_runtime_dispatch.cjs‎

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,17 @@ const EVENTS = new Map([
1717
['stop', 'Stop'],
1818
]);
1919

20+
// 恢复命令是给用户直接复制执行的;插件路径可能含空格(macOS 的 Application Support)
21+
// 或单引号,未转义会被 shell 拆成多个参数。按 POSIX 规则用单引号包裹,内部单引号转义。
22+
function shellQuote(value) {
23+
return `'${String(value).replace(/'/g, "'\\''")}'`;
24+
}
25+
2026
function incomplete(event, reason) {
2127
const safe = /^[a-z_]+$/.test(reason) ? reason : 'runtime_unavailable';
2228
// hooks 在用户 workspace 里运行,而管理器位于已安装插件根目录;相对路径会让照抄的用户
2329
// 得到 MODULE_NOT_FOUND,生命周期就永久卡在未完成。必须给出可直接执行的绝对路径。
24-
const manager = path.join(pluginRoot, 'runtime', 'codeguard_runtime.cjs');
30+
const manager = shellQuote(path.join(pluginRoot, 'runtime', 'codeguard_runtime.cjs'));
2531
const message = `CodeGuard Rust 运行时未完成(${safe});本次源码检查未运行,交付未评估。请用 Node 18+ 执行 node ${manager} verify;支持的 macOS arm64 上显式运行 node ${manager} install --download。运行时可用后,使用同一入口 exec init ABS_PROJECT --apply 初始化修复任务,或 exec next ABS_PROJECT 获取指引。`;
2632
return event === 'stop'
2733
? { systemMessage: message }

0 commit comments

Comments
 (0)