


























@@ -1,14 +1,66 @@
11import { posixAgentWorkspaceScript, windowsAgentWorkspaceScript } from "./agent-workspace.ts";
22import { shellQuote } from "./host-command.ts";
3-import { psSingleQuote, windowsOpenClawResolver } from "./powershell.ts";
4-import type { ProviderAuth } from "./types.ts";
3+import {
4+psSingleQuote,
5+windowsModelProviderTimeoutScript,
6+windowsOpenClawResolver,
7+} from "./powershell.ts";
8+import { providerIdFromModelId, resolveParallelsModelTimeoutSeconds } from "./provider-auth.ts";
9+import type { Platform, ProviderAuth } from "./types.ts";
510611export interface NpmUpdateScriptInput {
712auth: ProviderAuth;
813expectedNeedle: string;
914updateTarget: string;
1015}
111617+function posixModelProviderTimeoutCommand(
18+command: string,
19+modelId: string,
20+platform: Platform,
21+): string {
22+const providerId = providerIdFromModelId(modelId);
23+if (!providerId) {
24+return "";
25+}
26+return `${command} config set ${shellQuote(
27+ `models.providers.${providerId}.timeoutSeconds`,
28+ )} ${resolveParallelsModelTimeoutSeconds(platform)} --strict-json`;
29+}
30+31+function posixAssertAgentOkScript(command: string, input: NpmUpdateScriptInput, sessionId: string) {
32+return `agent_ok=false
33+for attempt in 1 2; do
34+ session_id=${shellQuote(sessionId)}
35+ if [ "$attempt" -gt 1 ]; then session_id=${shellQuote(`${sessionId}-retry`)}"-$attempt"; fi
36+ rm -f "$HOME/.openclaw/agents/main/sessions/$session_id.jsonl"
37+ output_file="$(mktemp)"
38+ set +e
39+ ${input.auth.apiKeyEnv}=${shellQuote(input.auth.apiKeyValue)} ${command} agent --local --agent main --session-id "$session_id" --message 'Reply with exact ASCII text OK only.' --thinking minimal --json >"$output_file" 2>&1
40+ rc=$?
41+ set -e
42+ cat "$output_file"
43+ if [ "$rc" -ne 0 ]; then
44+ rm -f "$output_file"
45+ exit "$rc"
46+ fi
47+ if grep -Eq '"finalAssistant(Raw|Visible)Text"[[:space:]]*:[[:space:]]*"OK"' "$output_file"; then
48+ agent_ok=true
49+ rm -f "$output_file"
50+ break
51+ fi
52+ rm -f "$output_file"
53+ if [ "$attempt" -lt 2 ]; then
54+ echo "agent turn attempt $attempt finished without OK response; retrying"
55+ sleep 3
56+ fi
57+done
58+if [ "$agent_ok" != true ]; then
59+ echo "openclaw agent finished without OK response" >&2
60+ exit 1
61+fi`;
62+}
63+1264export function macosUpdateScript(input: NpmUpdateScriptInput): string {
1365return String.raw`set -euo pipefail
1466export PATH=/opt/homebrew/bin:/opt/homebrew/opt/node/bin:/opt/homebrew/sbin:/usr/bin:/bin:/usr/sbin:/sbin
@@ -70,10 +122,11 @@ ${posixVersionCheck("/opt/homebrew/bin/openclaw", input.expectedNeedle)}
70122start_openclaw_gateway
71123wait_for_gateway
72124/opt/homebrew/bin/openclaw models set ${shellQuote(input.auth.modelId)}
125+${posixModelProviderTimeoutCommand("/opt/homebrew/bin/openclaw", input.auth.modelId, "macos")}
73126/opt/homebrew/bin/openclaw config set agents.defaults.skipBootstrap true --strict-json
74127/opt/homebrew/bin/openclaw config set tools.profile minimal
75128${posixAgentWorkspaceScript("Parallels npm update smoke test assistant.")}
76-${input.auth.apiKeyEnv}=${shellQuote(input.auth.apiKeyValue)} /opt/homebrew/bin/openclaw agent --local --agent main --session-id parallels-npm-update-macos --message 'Reply with exact ASCII text OK only.' --thinking minimal --json`;
129+${posixAssertAgentOkScript("/opt/homebrew/bin/openclaw", input, "parallels-npm-update-macos")}`;
77130}
7813179132export function windowsUpdateScript(input: NpmUpdateScriptInput): string {
@@ -142,13 +195,32 @@ if ($LASTEXITCODE -ne 0) {
142195}
143196Wait-OpenClawGateway
144197Invoke-OpenClaw models set ${psSingleQuote(input.auth.modelId)}
198+${windowsModelProviderTimeoutScript(input.auth.modelId)}
145199Invoke-OpenClaw config set agents.defaults.skipBootstrap true --strict-json
146200Invoke-OpenClaw config set tools.profile minimal
147201$sessionPath = Join-Path $env:USERPROFILE '.openclaw\\agents\\main\\sessions\\parallels-npm-update-windows.jsonl'
148202Remove-Item $sessionPath -Force -ErrorAction SilentlyContinue
149203${windowsAgentWorkspaceScript("Parallels npm update smoke test assistant.")}
150204Set-Item -Path ('Env:' + ${psSingleQuote(input.auth.apiKeyEnv)}) -Value ${psSingleQuote(input.auth.apiKeyValue)}
151-Invoke-OpenClaw agent --local --agent main --session-id parallels-npm-update-windows --message 'Reply with exact ASCII text OK only.' --thinking minimal --json`;
205+$agentOk = $false
206+for ($attempt = 1; $attempt -le 2; $attempt++) {
207+ $sessionId = if ($attempt -eq 1) { 'parallels-npm-update-windows' } else { "parallels-npm-update-windows-retry-$attempt" }
208+ $sessionsDir = Join-Path $env:USERPROFILE '.openclaw\\agents\\main\\sessions'
209+ $sessionPath = Join-Path $sessionsDir "$sessionId.jsonl"
210+ Remove-Item $sessionPath -Force -ErrorAction SilentlyContinue
211+ $output = Invoke-OpenClaw agent --local --agent main --session-id $sessionId --message 'Reply with exact ASCII text OK only.' --thinking minimal --json 2>&1
212+ if ($null -ne $output) { $output | ForEach-Object { $_ } }
213+ if ($LASTEXITCODE -ne 0) { throw "agent failed with exit code $LASTEXITCODE" }
214+ if (($output | Out-String) -match '"finalAssistant(Raw|Visible)Text":\\s*"OK"') {
215+ $agentOk = $true
216+ break
217+ }
218+ if ($attempt -lt 2) {
219+ Write-Host "agent turn attempt $attempt finished without OK response; retrying"
220+ Start-Sleep -Seconds 3
221+ }
222+}
223+if (-not $agentOk) { throw 'openclaw agent finished without OK response' }`;
152224}
153225154226export function linuxUpdateScript(input: NpmUpdateScriptInput): string {
@@ -207,10 +279,11 @@ ${posixVersionCheck("openclaw", input.expectedNeedle)}
207279start_openclaw_gateway
208280wait_for_gateway
209281openclaw models set ${shellQuote(input.auth.modelId)}
282+${posixModelProviderTimeoutCommand("openclaw", input.auth.modelId, "linux")}
210283openclaw config set agents.defaults.skipBootstrap true --strict-json
211284openclaw config set tools.profile minimal
212285${posixAgentWorkspaceScript("Parallels npm update smoke test assistant.")}
213-${input.auth.apiKeyEnv}=${shellQuote(input.auth.apiKeyValue)} openclaw agent --local --agent main --session-id parallels-npm-update-linux --message 'Reply with exact ASCII text OK only.' --thinking minimal --json`;
286+${posixAssertAgentOkScript("openclaw", input, "parallels-npm-update-linux")}`;
214287}
215288216289function posixVersionCheck(command: string, expectedNeedle: string): string {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。