
































@@ -119,6 +119,38 @@ const expectIncludes = (listValue, expected, field) => {
119119}
120120};
121121122+function assertRealPathInside(parentPath, childPath, label) {
123+const parentRealPath = fs.realpathSync(parentPath);
124+const childRealPath = fs.realpathSync(childPath);
125+if (
126+childRealPath !== parentRealPath &&
127+!childRealPath.startsWith(`${parentRealPath}${path.sep}`)
128+) {
129+throw new Error(`${label} resolved outside ${parentPath}: ${childRealPath}`);
130+}
131+}
132+133+function assertClawHubExternalInstallContract(installPath) {
134+const openclawPeerPath = path.join(installPath, "node_modules", "openclaw");
135+if (!fs.existsSync(openclawPeerPath)) {
136+throw new Error(`missing kitchen-sink openclaw peer symlink: ${openclawPeerPath}`);
137+}
138+if (!fs.lstatSync(openclawPeerPath).isSymbolicLink()) {
139+throw new Error(`kitchen-sink openclaw peer is not a symlink: ${openclawPeerPath}`);
140+}
141+const hostRoot = fs.realpathSync(process.cwd());
142+const linkedHostRoot = fs.realpathSync(openclawPeerPath);
143+if (linkedHostRoot !== hostRoot) {
144+throw new Error(`expected kitchen-sink openclaw peer ${linkedHostRoot} to target ${hostRoot}`);
145+}
146+147+const dependencyPackagePath = path.join(installPath, "node_modules", "is-number", "package.json");
148+if (!fs.existsSync(dependencyPackagePath)) {
149+throw new Error(`missing kitchen-sink isolated dependency: ${dependencyPackagePath}`);
150+}
151+assertRealPathInside(installPath, dependencyPackagePath, "kitchen-sink isolated dependency");
152+}
153+122154function assertInstalled() {
123155const pluginId = process.env.KITCHEN_SINK_ID;
124156const spec = process.env.KITCHEN_SINK_SPEC;
@@ -270,6 +302,9 @@ function assertInstalled() {
270302if (!fs.existsSync(installPath)) {
271303throw new Error(`kitchen-sink install path missing: ${record.installPath}`);
272304}
305+if (source === "clawhub") {
306+assertClawHubExternalInstallContract(installPath);
307+}
273308fs.writeFileSync(`/tmp/kitchen-sink-${label}-install-path.txt`, installPath, "utf8");
274309}
275310此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。