fix(mac): run relay with cwd set to configured project root

main
Peter Steinberger 2025-12-06 23:57:40 +01:00
parent b25b72ae19
commit 02e26996c1
1 changed files with 10 additions and 4 deletions

View File

@ -4,6 +4,11 @@ import Subprocess
#if canImport(Darwin) #if canImport(Darwin)
import Darwin import Darwin
#endif #endif
#if canImport(System)
import System
#else
import SystemPackage
#endif
@MainActor @MainActor
final class RelayProcessManager: ObservableObject { final class RelayProcessManager: ObservableObject {
@ -85,14 +90,15 @@ final class RelayProcessManager: ObservableObject {
private func spawnRelay() async { private func spawnRelay() async {
let command = self.resolveCommand() let command = self.resolveCommand()
self.appendLog("[relay] starting: \(command.joined(separator: " "))\n") let cwd = self.defaultProjectRoot().path
self.appendLog("[relay] starting: \(command.joined(separator: " ")) (cwd: \(cwd))\n")
do { do {
let result = try await run( let result = try await run(
.name(command.first ?? "clawdis"), .name(command.first ?? "clawdis"),
arguments: Arguments(Array(command.dropFirst())), arguments: Arguments(Array(command.dropFirst())),
environment: self.makeEnvironment(), environment: self.makeEnvironment(),
workingDirectory: nil workingDirectory: FilePath(cwd)
) { execution, stdin, stdout, stderr in ) { execution, stdin, stdout, stderr in
self.didStart(execution) self.didStart(execution)
async let out: Void = self.stream(output: stdout, label: "stdout") async let out: Void = self.stream(output: stdout, label: "stdout")
@ -202,8 +208,8 @@ final class RelayProcessManager: ObservableObject {
return [clawdisPath, "relay"] return [clawdisPath, "relay"]
} }
if let pnpm = self.findExecutable(named: "pnpm") { if let pnpm = self.findExecutable(named: "pnpm") {
// Run pnpm from the project root so package.json is present. // Run pnpm from the project root (workingDirectory handles cwd).
return [pnpm, "clawdis", "relay", "--dir", self.defaultProjectRoot().path] return [pnpm, "clawdis", "relay"]
} }
if let node = self.findExecutable(named: "node") { if let node = self.findExecutable(named: "node") {
let warelay = self.defaultProjectRoot().appendingPathComponent("bin/warelay.js").path let warelay = self.defaultProjectRoot().appendingPathComponent("bin/warelay.js").path