mirror of
https://github.com/hansjone/oclaw.git
synced 2026-10-09 03:30:48 +08:00
收敛微信 sidecar 到官方单链路并同步文档与回归测试。
移除 weixin 安装与启动脚本中的 legacy/localSource 分支,只保留 official_runner 路径,统一开源安装命令并更新 RUNBOOK/Quickstart/README,确保脚本行为与测试预期一致。 Made-with: Cursor
This commit is contained in:
parent
3122b8a16c
commit
853dc1812f
7 changed files with 43 additions and 116 deletions
|
|
@ -1,7 +1,5 @@
|
|||
param(
|
||||
[string]$ChannelId = "oclaw-weixin",
|
||||
[string]$LocalSourcePath = "",
|
||||
[switch]$UseOpenclawCli = $false
|
||||
[string]$ChannelId = "oclaw-weixin"
|
||||
)
|
||||
|
||||
$ErrorActionPreference = "Stop"
|
||||
|
|
@ -16,6 +14,16 @@ $oclawRoot = Resolve-RepoRoot
|
|||
$sidecarRoot = Join-Path $oclawRoot "data\\channel_sidecar\\$ChannelId"
|
||||
$stateDir = Join-Path $sidecarRoot "state"
|
||||
$pluginRoot = Join-Path $env:USERPROFILE ".openclaw\\extensions\\openclaw-weixin"
|
||||
function Sync-WeixinBridgeRunners {
|
||||
$bridgeSrc = Join-Path $oclawRoot "runtime\\operations\\weixin_bridge"
|
||||
foreach ($name in @("official_runner.ts", "login.ts")) {
|
||||
$srcPath = Join-Path $bridgeSrc $name
|
||||
if (-not (Test-Path $srcPath)) {
|
||||
throw "missing bridge source file: $srcPath"
|
||||
}
|
||||
Copy-Item -Path $srcPath -Destination (Join-Path $sidecarRoot $name) -Force
|
||||
}
|
||||
}
|
||||
|
||||
New-Item -ItemType Directory -Force -Path $sidecarRoot | Out-Null
|
||||
New-Item -ItemType Directory -Force -Path (Join-Path $sidecarRoot "logs") | Out-Null
|
||||
|
|
@ -36,52 +44,6 @@ function Ensure-OfficialPluginRuntimeDeps {
|
|||
}
|
||||
}
|
||||
|
||||
if ($UseOpenclawCli) {
|
||||
# Do not require a globally-installed openclaw CLI.
|
||||
# We install openclaw into the sidecar runtime and put node_modules/.bin on PATH
|
||||
# so the official installer can run `openclaw ...` commands.
|
||||
Push-Location $sidecarRoot
|
||||
try {
|
||||
if (-not (Test-Path (Join-Path $sidecarRoot "package.json"))) {
|
||||
npm.cmd init -y | Out-Null
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
throw "npm init failed with exit code $LASTEXITCODE"
|
||||
}
|
||||
}
|
||||
npm.cmd install openclaw@latest --save
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
throw "npm install openclaw failed with exit code $LASTEXITCODE"
|
||||
}
|
||||
$env:PATH = (Join-Path $sidecarRoot "node_modules\\.bin") + ";" + $env:PATH
|
||||
npx.cmd -y @tencent-weixin/openclaw-weixin-cli@latest install
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
throw "openclaw-weixin-cli install failed with exit code $LASTEXITCODE"
|
||||
}
|
||||
} finally {
|
||||
Pop-Location
|
||||
}
|
||||
Ensure-OfficialPluginRuntimeDeps
|
||||
Push-Location $sidecarRoot
|
||||
try {
|
||||
npm.cmd install openclaw@latest --save tsx@4.21.0 typescript@6.0.3
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
throw "npm install bridge runtime deps failed with exit code $LASTEXITCODE"
|
||||
}
|
||||
$bridgeSrc = Join-Path $oclawRoot "runtime\\operations\\weixin_bridge"
|
||||
Copy-Item -Path (Join-Path $bridgeSrc "runner.ts") -Destination (Join-Path $sidecarRoot "runner.ts") -Force
|
||||
Copy-Item -Path (Join-Path $bridgeSrc "official_runner.ts") -Destination (Join-Path $sidecarRoot "official_runner.ts") -Force
|
||||
Copy-Item -Path (Join-Path $bridgeSrc "login.ts") -Destination (Join-Path $sidecarRoot "login.ts") -Force
|
||||
} finally {
|
||||
Pop-Location
|
||||
}
|
||||
Write-Host "[ok] installed official openclaw-weixin plugin + native/fallback sidecar runtime"
|
||||
exit 0
|
||||
}
|
||||
|
||||
if (-not $LocalSourcePath) {
|
||||
throw "LocalSourcePath is required in sidecar mode. Example: .\\scripts\\weixin_install.ps1 -LocalSourcePath D:\\path\\to\\your-weixin-module"
|
||||
}
|
||||
|
||||
Push-Location $sidecarRoot
|
||||
try {
|
||||
if (-not (Test-Path (Join-Path $sidecarRoot "package.json"))) {
|
||||
|
|
@ -90,21 +52,18 @@ try {
|
|||
throw "npm init failed with exit code $LASTEXITCODE"
|
||||
}
|
||||
}
|
||||
|
||||
$src = (Resolve-Path $LocalSourcePath).Path
|
||||
npm.cmd install --save-exact $src tsx@4.21.0 typescript@6.0.3
|
||||
npx.cmd -y @tencent-weixin/openclaw-weixin-cli@latest install
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
throw "npm install local source failed with exit code $LASTEXITCODE"
|
||||
throw "openclaw-weixin-cli install failed with exit code $LASTEXITCODE"
|
||||
}
|
||||
|
||||
if (-not (Test-Path (Join-Path $sidecarRoot "runner.ts"))) {
|
||||
throw "install completed but runner.ts is missing (invalid sidecar package/source)"
|
||||
npm.cmd install openclaw@latest --save tsx@4.21.0 typescript@6.0.3
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
throw "npm install bridge runtime deps failed with exit code $LASTEXITCODE"
|
||||
}
|
||||
if (-not (Test-Path (Join-Path $sidecarRoot "login.ts"))) {
|
||||
throw "install completed but login.ts is missing (invalid sidecar package/source)"
|
||||
}
|
||||
Write-Host "[ok] installed local weixin sidecar into $sidecarRoot"
|
||||
} finally {
|
||||
Pop-Location
|
||||
}
|
||||
Ensure-OfficialPluginRuntimeDeps
|
||||
Sync-WeixinBridgeRunners
|
||||
Write-Host "[ok] installed official openclaw-weixin plugin sidecar runtime into $sidecarRoot"
|
||||
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ try {
|
|||
npm.cmd exec -- tsx login.ts
|
||||
exit 0
|
||||
}
|
||||
throw "login.ts missing. Re-run weixin_install.ps1 -UseOpenclawCli to install sidecar runtime."
|
||||
throw "login.ts missing. Re-run weixin_install.ps1 to install sidecar runtime."
|
||||
} finally {
|
||||
Pop-Location
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,15 +18,11 @@ $logDir = Join-Path $sidecarRoot "logs"
|
|||
$pidFile = Join-Path $sidecarRoot "pid.txt"
|
||||
$bridgeSrc = Join-Path $oclawRoot "runtime\\operations\\weixin_bridge"
|
||||
$pluginRoot = Join-Path $env:USERPROFILE ".openclaw\\extensions\\openclaw-weixin"
|
||||
$runnerMode = [string]($env:AIA_WEIXIN_RUNNER_MODE)
|
||||
if (-not $runnerMode) { $runnerMode = "official" }
|
||||
$runnerMode = $runnerMode.Trim().ToLowerInvariant()
|
||||
|
||||
function Get-SidecarProcesses {
|
||||
$escapedSidecarRoot = $sidecarRoot.Replace("\", "\\")
|
||||
$patterns = @(
|
||||
"*$ChannelId*",
|
||||
"*runner.ts*",
|
||||
"*official_runner.ts*",
|
||||
"*$escapedSidecarRoot*"
|
||||
)
|
||||
|
|
@ -82,7 +78,7 @@ $cleaned = Stop-SidecarProcesses
|
|||
Remove-Item -Force $pidFile -ErrorAction SilentlyContinue
|
||||
|
||||
if (Test-Path $bridgeSrc) {
|
||||
foreach ($name in @("runner.ts", "official_runner.ts", "login.ts")) {
|
||||
foreach ($name in @("official_runner.ts", "login.ts")) {
|
||||
$srcPath = Join-Path $bridgeSrc $name
|
||||
if (Test-Path $srcPath) {
|
||||
Copy-Item -Path $srcPath -Destination (Join-Path $sidecarRoot $name) -Force
|
||||
|
|
@ -92,27 +88,18 @@ if (Test-Path $bridgeSrc) {
|
|||
|
||||
$logPath = Join-Path $logDir "weixin_sidecar.log"
|
||||
$errPath = Join-Path $logDir "weixin_sidecar.err.log"
|
||||
if ((Test-Path (Join-Path $sidecarRoot "runner.ts")) -or (Test-Path (Join-Path $sidecarRoot "official_runner.ts"))) {
|
||||
$runnerFile = "official_runner.ts"
|
||||
if ($runnerMode -eq "legacy") {
|
||||
$runnerFile = "runner.ts"
|
||||
}
|
||||
if ($runnerMode -eq "official") {
|
||||
Ensure-OfficialPluginRuntimeDeps
|
||||
}
|
||||
if (-not (Test-Path (Join-Path $sidecarRoot $runnerFile))) {
|
||||
throw "selected runner file missing: $runnerFile"
|
||||
}
|
||||
if (Test-Path (Join-Path $sidecarRoot "official_runner.ts")) {
|
||||
Ensure-OfficialPluginRuntimeDeps
|
||||
$cmd = "cmd.exe"
|
||||
$args = @(
|
||||
"/c",
|
||||
"cd /d $sidecarRoot && set OCLAW_STATE_DIR=$stateDir&& set AIA_GATEWAY_BASE_URL=$GatewayBaseUrl&& set NODE_PATH=$sidecarRoot\node_modules&& npm.cmd exec -- tsx $runnerFile"
|
||||
"cd /d $sidecarRoot && set OCLAW_STATE_DIR=$stateDir&& set AIA_GATEWAY_BASE_URL=$GatewayBaseUrl&& set NODE_PATH=$sidecarRoot\node_modules&& npm.cmd exec -- tsx official_runner.ts"
|
||||
)
|
||||
$p = Start-Process -FilePath $cmd -ArgumentList $args -WorkingDirectory $sidecarRoot -PassThru -WindowStyle Hidden -RedirectStandardOutput $logPath -RedirectStandardError $errPath
|
||||
Set-Content -Path $pidFile -Value $p.Id
|
||||
Write-Host "[ok] started weixin sidecar pid=$($p.Id) mode=$runnerMode cleaned=$cleaned out=$logPath err=$errPath"
|
||||
Write-Host "[ok] started weixin sidecar pid=$($p.Id) mode=official cleaned=$cleaned out=$logPath err=$errPath"
|
||||
exit 0
|
||||
}
|
||||
|
||||
throw "No runner.ts/official_runner.ts found in sidecar root. Re-run weixin_install.ps1 -UseOpenclawCli."
|
||||
throw "official_runner.ts missing in sidecar root. Re-run weixin_install.ps1."
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue