
























@@ -5,7 +5,6 @@ import path from "node:path";
55import process from "node:process";
66import { setTimeout as delay } from "node:timers/promises";
77import { pathToFileURL } from "node:url";
8-import { createPnpmRunnerSpawnSpec } from "../pnpm-runner.mjs";
98109const PLUGIN_SPEC =
1110process.env.OPENCLAW_KITCHEN_SINK_NPM_SPEC || "npm:@openclaw/kitchen-sink@latest";
@@ -130,7 +129,7 @@ function runCommand(command, args, options = {}) {
130129}
131130132131async function runOpenClaw(runner, args, env, options = {}) {
133-const command = resolveOpenClawCommand(runner, args, env, {
132+const command = await resolveOpenClawCommand(runner, args, env, {
134133stdio: ["ignore", "pipe", "pipe"],
135134});
136135return runCommand(command.command, command.args, {
@@ -140,8 +139,9 @@ async function runOpenClaw(runner, args, env, options = {}) {
140139});
141140}
142141143-function resolveOpenClawCommand(runner, args, env, options = {}) {
142+async function resolveOpenClawCommand(runner, args, env, options = {}) {
144143if (runner.pnpm) {
144+const { createPnpmRunnerSpawnSpec } = await import("../pnpm-runner.mjs");
145145return createPnpmRunnerSpawnSpec({
146146 env,
147147pnpmArgs: [...runner.baseArgs, ...args],
@@ -242,12 +242,28 @@ async function rpcCall(method, params, options) {
242242}
243243244244async function loadCallGatewayModule() {
245-callGatewayModulePromise ??= import(
246-pathToFileURL(path.join(process.cwd(), "src/gateway/call.ts"))
247-);
245+callGatewayModulePromise ??= importCallGatewayModule();
248246return callGatewayModulePromise;
249247}
250248249+async function importCallGatewayModule() {
250+const distDir = path.join(process.cwd(), "dist");
251+if (fs.existsSync(distDir)) {
252+const candidates = fs
253+.readdirSync(distDir)
254+.filter((name) => /^call(?:\.runtime)?-[A-Za-z0-9_-]+\.js$/u.test(name))
255+.toSorted((left, right) => left.localeCompare(right));
256+for (const name of candidates) {
257+const module = await import(pathToFileURL(path.join(distDir, name)).href);
258+if (typeof module.callGateway === "function") {
259+return module;
260+}
261+}
262+throw new Error(`unable to find callGateway export in dist (${candidates.join(", ")})`);
263+}
264+return import(pathToFileURL(path.join(process.cwd(), "src/gateway/call.ts")).href);
265+}
266+251267async function retryRpcCall(method, params, options) {
252268const started = Date.now();
253269let lastError;
@@ -347,18 +363,11 @@ function configureKitchenSink(env, port) {
347363writeJson(configPath, config);
348364}
349365350-function startGateway(runner, port, env, logPath) {
366+async function startGateway(runner, port, env, logPath) {
351367const log = fs.openSync(logPath, "w");
352-const command = resolveOpenClawCommand(
368+const command = await resolveOpenClawCommand(
353369runner,
354-[
355-"gateway",
356-"--port",
357-String(port),
358-"--bind",
359-"loopback",
360-"--allow-unconfigured",
361-],
370+["gateway", "--port", String(port), "--bind", "loopback", "--allow-unconfigured"],
362371env,
363372{
364373stdio: ["ignore", log, log],
@@ -599,7 +608,7 @@ async function main() {
599608];
600609assertIncludesAny(inspectProviders, EXPECTED_PROVIDERS, "plugins inspect providers");
601610602-const child = startGateway(runner, port, env, logPath);
611+const child = await startGateway(runner, port, env, logPath);
603612try {
604613await waitForGatewayReady(child, port, logPath);
605614const initialSample = await sampleProcess(child.pid);
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。