@@ -186,6 +189,8 @@ async function main(): Promise<void> {
...
@@ -186,6 +189,8 @@ async function main(): Promise<void> {
assert(isBundledRuntimeNameConflictError("gateway name/hostname conflict detected via bonjour"),"Expected bonjour name conflict to be classified correctly.");
assert(isBundledRuntimeNameConflictError("gateway name/hostname conflict detected via bonjour"),"Expected bonjour name conflict to be classified correctly.");
assert(!policyViolationMessage.includes("本机已有 OpenClaw 网关正在运行"),"Policy violation message should no longer hard-assert a local OpenClaw gateway conflict.");
assert(!policyViolationMessage.includes("本机已有 OpenClaw 网关正在运行"),"Policy violation message should no longer hard-assert a local OpenClaw gateway conflict.");
constmacSecurityMessage=toStartupErrorMessage("macSecurityBlock: macOS blocked bundled runtime execution (Operation not permitted).","fallback");
assert(macSecurityMessage.includes("macOS 阻止了内置运行时启动"),"mac security blocks should get a specific startup diagnostic.");
constconfig=createConfig();
constconfig=createConfig();
construntimeStatus=createRuntimeStatus({
construntimeStatus=createRuntimeStatus({
...
@@ -210,6 +215,7 @@ async function main(): Promise<void> {
...
@@ -210,6 +215,7 @@ async function main(): Promise<void> {
});
});
assert(startupSummary.chatLaunchState==="starting","Transient packaged startup failures should remain in starting state.");
assert(startupSummary.chatLaunchState==="starting","Transient packaged startup failures should remain in starting state.");
assert(startupSummary.startupPhase==="starting-runtime","Transient runtime failures should map to starting-runtime.");
assert(startupSummary.startupPhase==="starting-runtime","Transient runtime failures should map to starting-runtime.");
assert(startupSummary.startupMessage==="本地助手正在启动,请稍候。","Transient runtime startup should use the unified local assistant starting message.");
constgatewayOnlySummary=buildChatSummary({
constgatewayOnlySummary=buildChatSummary({
config,
config,
...
@@ -223,6 +229,7 @@ async function main(): Promise<void> {
...
@@ -223,6 +229,7 @@ async function main(): Promise<void> {
});
});
assert(gatewayOnlySummary.chatLaunchState==="starting","Transient gateway failures should remain in starting state during packaged warmup.");
assert(gatewayOnlySummary.chatLaunchState==="starting","Transient gateway failures should remain in starting state during packaged warmup.");
assert(gatewayOnlySummary.startupPhase==="connecting-gateway","Transient gateway failures should map to connecting-gateway.");
assert(gatewayOnlySummary.startupPhase==="connecting-gateway","Transient gateway failures should map to connecting-gateway.");
assert(gatewayOnlySummary.startupMessage==="本地助手正在启动,请稍候。","Transient gateway startup should use the unified local assistant starting message.");
assert(shouldRetryBootstrapWarmup({
assert(shouldRetryBootstrapWarmup({
config,
config,
...
@@ -264,8 +271,8 @@ async function main(): Promise<void> {
...
@@ -264,8 +271,8 @@ async function main(): Promise<void> {
runtimeStatus:createRuntimeStatus(),
runtimeStatus:createRuntimeStatus(),
gatewayStatus:policyViolationGatewayStatus,
gatewayStatus:policyViolationGatewayStatus,
isPackaged:true
isPackaged:true
}),"Packaged bundled-runtime bootstrap should retry gateway policy violations.");
})===false,"Packaged bundled-runtime bootstrap should not retry gateway policy violations.");
assert(shouldRetryManagedRuntimeStartup(config,policyViolationRuntimeStatus),"Packaged bundled-runtime startup should retry runtime policy violations.");
assert(!shouldRetryManagedRuntimeStartup(config,policyViolationRuntimeStatus),"Packaged bundled-runtime startup should not retry runtime policy violations.");