chore(agent): start rpc worker at launch, fail if not running
This commit is contained in:
@@ -14,8 +14,10 @@ actor AgentRPC {
|
|||||||
private struct RpcError: Error { let message: String }
|
private struct RpcError: Error { let message: String }
|
||||||
|
|
||||||
func send(text: String, thinking: String?, session: String) async -> (ok: Bool, text: String?, error: String?) {
|
func send(text: String, thinking: String?, session: String) async -> (ok: Bool, text: String?, error: String?) {
|
||||||
|
guard process?.isRunning == true else {
|
||||||
|
return (false, nil, "rpc worker not running")
|
||||||
|
}
|
||||||
do {
|
do {
|
||||||
try await ensureRunning()
|
|
||||||
let payload: [String: Any] = [
|
let payload: [String: Any] = [
|
||||||
"type": "send",
|
"type": "send",
|
||||||
"text": text,
|
"text": text,
|
||||||
@@ -54,8 +56,10 @@ actor AgentRPC {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func status() async -> (ok: Bool, error: String?) {
|
func status() async -> (ok: Bool, error: String?) {
|
||||||
|
guard process?.isRunning == true else {
|
||||||
|
return (false, "rpc worker not running")
|
||||||
|
}
|
||||||
do {
|
do {
|
||||||
try await ensureRunning()
|
|
||||||
let payload: [String: Any] = ["type": "status"]
|
let payload: [String: Any] = ["type": "status"]
|
||||||
let data = try JSONSerialization.data(withJSONObject: payload)
|
let data = try JSONSerialization.data(withJSONObject: payload)
|
||||||
guard let stdinHandle else { throw RpcError(message: "stdin missing") }
|
guard let stdinHandle else { throw RpcError(message: "stdin missing") }
|
||||||
@@ -75,12 +79,7 @@ actor AgentRPC {
|
|||||||
|
|
||||||
// MARK: - Process lifecycle
|
// MARK: - Process lifecycle
|
||||||
|
|
||||||
private func ensureRunning() async throws {
|
func start() async throws {
|
||||||
if let process, process.isRunning { return }
|
|
||||||
try await start()
|
|
||||||
}
|
|
||||||
|
|
||||||
private func start() async throws {
|
|
||||||
let process = Process()
|
let process = Process()
|
||||||
process.executableURL = URL(fileURLWithPath: "/usr/bin/env")
|
process.executableURL = URL(fileURLWithPath: "/usr/bin/env")
|
||||||
process.arguments = ["pnpm", "clawdis", "rpc"]
|
process.arguments = ["pnpm", "clawdis", "rpc"]
|
||||||
|
|||||||
@@ -426,6 +426,7 @@ final class AppDelegate: NSObject, NSApplicationDelegate, NSXPCListenerDelegate
|
|||||||
if let state {
|
if let state {
|
||||||
RelayProcessManager.shared.setActive(!state.isPaused)
|
RelayProcessManager.shared.setActive(!state.isPaused)
|
||||||
}
|
}
|
||||||
|
Task { try? await AgentRPC.shared.start() }
|
||||||
self.startListener()
|
self.startListener()
|
||||||
self.scheduleFirstRunOnboardingIfNeeded()
|
self.scheduleFirstRunOnboardingIfNeeded()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user