@simonyea/holysheep-cli 1.7.93 → 1.7.94

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@simonyea/holysheep-cli",
3
- "version": "1.7.93",
3
+ "version": "1.7.94",
4
4
  "description": "Claude Code/Cursor/Cline API relay for China — ¥1=$1, WeChat/Alipay payment, no credit card, no VPN. One command setup for all AI coding tools.",
5
5
  "keywords": [
6
6
  "openai-china",
@@ -773,6 +773,27 @@ module.exports = {
773
773
  getConfigPath() { return CONFIG_FILE },
774
774
  getBridgePort() { return getConfiguredBridgePort() },
775
775
  getGatewayPort() { return getConfiguredGatewayPort() },
776
+ ensureBridgeRunning(port) {
777
+ port = port || getConfiguredBridgePort()
778
+ return startBridge(port)
779
+ },
780
+ ensureGatewayRunning(port) {
781
+ port = port || getConfiguredGatewayPort()
782
+ // 先检查是否已在运行
783
+ try {
784
+ execSync(
785
+ isWin
786
+ ? `powershell -NonInteractive -Command "try{(Invoke-WebRequest -Uri http://127.0.0.1:${port}/ -TimeoutSec 1 -UseBasicParsing).StatusCode}catch{exit 1}"`
787
+ : `curl -sf http://127.0.0.1:${port}/ -o /dev/null --max-time 1`,
788
+ { stdio: 'ignore', timeout: 3000 }
789
+ )
790
+ return true
791
+ } catch {}
792
+ // 未运行,启动它
793
+ const preferNpx = !hasOpenClawBinary()
794
+ const result = _startGateway(port, preferNpx, !preferNpx)
795
+ return result.ok
796
+ },
776
797
  getPrimaryModel() { return getConfiguredPrimaryModel() },
777
798
  getPrimaryModelRoute() { return getPrimaryModelRoute() },
778
799
  getPortListeners(port = getConfiguredGatewayPort()) { return listPortListeners(port) },
@@ -654,10 +654,21 @@ async function handleToolLaunch(req, res) {
654
654
  const tool = TOOLS.find(t => t.id === toolId)
655
655
  if (!tool) return json(res, { error: '未知工具' }, 400)
656
656
 
657
- // OpenClaw: 打开浏览器 dashboard 而非终端
657
+ // OpenClaw: 先启动 Bridge + Gateway,再打开浏览器
658
658
  if (toolId === 'openclaw') {
659
- const port = tool.getGatewayPort?.() || 18789
660
- const url = `http://127.0.0.1:${port}/`
659
+ const gatewayPort = tool.getGatewayPort?.() || 18789
660
+ const bridgePort = tool.getBridgePort?.() || 18788
661
+
662
+ // 确保 Bridge 在运行
663
+ const bridgeUp = tool.ensureBridgeRunning?.(bridgePort)
664
+ // 确保 Gateway 在运行
665
+ const gatewayUp = tool.ensureGatewayRunning?.(gatewayPort)
666
+
667
+ if (!gatewayUp) {
668
+ return json(res, { ok: false, error: 'Gateway 启动失败,请先运行 hs setup 配置 OpenClaw' }, 500)
669
+ }
670
+
671
+ const url = `http://127.0.0.1:${gatewayPort}/`
661
672
  if (process.platform === 'darwin') spawn('open', [url], { detached: true, stdio: 'ignore' }).unref()
662
673
  else if (process.platform === 'win32') spawn('cmd.exe', ['/c', 'start', '', url], { detached: true, stdio: 'ignore', shell: true }).unref()
663
674
  else spawn('xdg-open', [url], { detached: true, stdio: 'ignore' }).unref()