




















@@ -387,6 +387,31 @@ function hasOption(commandArgs, name) {
387387return false;
388388}
389389390+function commandOptionEnd(commandArgs) {
391+if (commandArgs[0] === "run") {
392+return runCommandBounds(commandArgs).optionEnd;
393+}
394+const delimiter = commandArgs.indexOf("--");
395+return delimiter >= 0 ? delimiter : commandArgs.length;
396+}
397+398+function ensureAwsMacOnDemandMarket(commandArgs, providerName) {
399+if (
400+!["run", "warmup"].includes(commandArgs[0]) ||
401+providerName !== "aws" ||
402+optionValue(commandArgs, "--target") !== "macos" ||
403+hasOption(commandArgs, "--market") ||
404+hasOption(commandArgs, "--id")
405+) {
406+return commandArgs;
407+}
408+409+const optionEnd = commandOptionEnd(commandArgs);
410+const normalizedArgs = [...commandArgs];
411+normalizedArgs.splice(optionEnd, 0, "--market", "on-demand");
412+return normalizedArgs;
413+}
414+390415const localPathRunOptions = new Set([
391416"capture-stderr",
392417"capture-stdout",
@@ -669,6 +694,7 @@ const providers = parseProvidersFromHelp(help.text);
669694const displayBinary = binary === "crabbox" ? "crabbox" : relative(repoRoot, binary);
670695const provider = selectedProvider(args);
671696const commandProviderValue = commandProvider(args);
697+const normalizedArgs = ensureAwsMacOnDemandMarket(args, provider);
672698673699console.error(
674700`[crabbox] bin=${displayBinary} version=${version.text || "unknown"} provider=${provider || "unknown"} providers=${providers.join(",") || "unknown"}`,
@@ -712,8 +738,8 @@ if (provider === "blacksmith-testbox") {
712738let childCwd = repoRoot;
713739let cleanupChildCwd = () => {};
714740let cleanupDone = false;
715-if (shouldUseFullCheckoutForCleanSparseRemoteSync(args, provider)) {
716-const runWords = runCommandArgs(args);
741+if (shouldUseFullCheckoutForCleanSparseRemoteSync(normalizedArgs, provider)) {
742+const runWords = runCommandArgs(normalizedArgs);
717743const changedGateBase =
718744isChangedGateCommand(runWords) && !headInRemoteRefs() ? mergeBaseForChangedGate() : "";
719745const checkout = prepareFullCheckoutForSync({ changedGateBase });
@@ -737,9 +763,9 @@ function cleanupOnce() {
737763cleanupChildCwd();
738764}
739765740-const runtimeEntrypoint = commandRuntimeEntrypoint(runCommandArgs(args));
741-if (args[0] === "run" && provider === "aws" && runtimeEntrypoint) {
742-const id = optionValue(args, "--id");
766+const runtimeEntrypoint = commandRuntimeEntrypoint(runCommandArgs(normalizedArgs));
767+if (normalizedArgs[0] === "run" && provider === "aws" && runtimeEntrypoint) {
768+const id = optionValue(normalizedArgs, "--id");
743769const hydrate = id
744770 ? `pnpm crabbox:hydrate -- --id ${id}`
745771 : "pnpm crabbox:warmup, then pnpm crabbox:hydrate -- --id <id>";
@@ -752,7 +778,7 @@ const childEnv = { ...process.env };
752778if (
753779isLocalContainerProvider(provider) &&
754780!childEnv.CRABBOX_LOCAL_CONTAINER_DOCKER_SOCKET &&
755-!hasOption(args, "--local-container-docker-socket")
781+!hasOption(normalizedArgs, "--local-container-docker-socket")
756782) {
757783childEnv.CRABBOX_LOCAL_CONTAINER_DOCKER_SOCKET = "1";
758784console.error(
@@ -763,15 +789,15 @@ if (
763789isLocalContainerProvider(provider) &&
764790process.platform !== "win32" &&
765791!childEnv.CRABBOX_LOCAL_CONTAINER_WORK_ROOT &&
766-!hasOption(args, "--local-container-work-root")
792+!hasOption(normalizedArgs, "--local-container-work-root")
767793) {
768794childEnv.CRABBOX_LOCAL_CONTAINER_WORK_ROOT = "/tmp/openclaw-crabbox-docker-work";
769795console.error(
770796"[crabbox] provider=docker using short host-visible work root for OpenClaw Docker tests",
771797);
772798}
773799774-const childArgs = childCwd === repoRoot ? args : absolutizeLocalRunPaths(args);
800+const childArgs = childCwd === repoRoot ? normalizedArgs : absolutizeLocalRunPaths(normalizedArgs);
775801const childInvocation = spawnInvocation(binary, childArgs, childEnv, process.platform);
776802const child = spawn(childInvocation.command, childInvocation.args, {
777803cwd: childCwd,
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。