From 362dc945823f57195db5e827727253d3314724c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E6=A9=98?= Date: Wed, 22 Apr 2026 14:15:19 +0000 Subject: [PATCH] fix: add try/catch to IPC trigger handler & import real buildWorkflowTemplate in test MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - daemon-ipc: wrap startWorkflow() in try/catch so errors are sent back as {ok:false, error:msg} instead of silently dropping the socket - init-workflow.test: import buildWorkflowTemplate from init.ts instead of maintaining an inline copy Addresses review follow-up suggestions from PR #31. 小橘 --- .../cli/src/__tests__/init-workflow.test.ts | 28 +------------------ packages/cli/src/commands/init.ts | 2 +- packages/daemon/src/daemon-ipc.ts | 12 ++++++-- 3 files changed, 11 insertions(+), 31 deletions(-) diff --git a/packages/cli/src/__tests__/init-workflow.test.ts b/packages/cli/src/__tests__/init-workflow.test.ts index 4e47291..b917756 100644 --- a/packages/cli/src/__tests__/init-workflow.test.ts +++ b/packages/cli/src/__tests__/init-workflow.test.ts @@ -9,33 +9,7 @@ import { mkdtempSync, readFileSync, rmSync } from "node:fs"; import { tmpdir } from "node:os"; import { join } from "node:path"; import { afterEach, beforeEach, describe, expect, it } from "vitest"; - -// Inline the template builder (same logic as in init.ts) for isolated testing -function buildWorkflowTemplate(name: string): string { - return `import type { WorkflowDefinition } from "@uncaged/nerve-daemon"; - -const workflow: WorkflowDefinition = { - roles: { - main: { - async execute(prompt, ctx) { - ctx.log("${name} started"); - // TODO: implement your role logic here - return { type: "done" }; - }, - }, - }, - - moderate(thread, event) { - if (event.type === "thread_start") { - return { role: "main", prompt: {} }; - } - return null; // workflow complete - }, -}; - -export default workflow; -`; -} +import { buildWorkflowTemplate } from "../commands/init.js"; let tmpDir: string; diff --git a/packages/cli/src/commands/init.ts b/packages/cli/src/commands/init.ts index e365609..d3c6497 100644 --- a/packages/cli/src/commands/init.ts +++ b/packages/cli/src/commands/init.ts @@ -124,7 +124,7 @@ export function validateWorkflowName(name: string): string | null { return null; } -function buildWorkflowTemplate(name: string): string { +export function buildWorkflowTemplate(name: string): string { return `import type { WorkflowDefinition } from "@uncaged/nerve-daemon"; const workflow: WorkflowDefinition = { diff --git a/packages/daemon/src/daemon-ipc.ts b/packages/daemon/src/daemon-ipc.ts index 76ef531..09e9205 100644 --- a/packages/daemon/src/daemon-ipc.ts +++ b/packages/daemon/src/daemon-ipc.ts @@ -64,9 +64,15 @@ export function createDaemonIpcServer( return; } - workflowManager.startWorkflow(req.workflow, req.payload); - const resp: DaemonResponse = { ok: true }; - socket.write(`${JSON.stringify(resp)}\n`); + try { + workflowManager.startWorkflow(req.workflow, req.payload); + const resp: DaemonResponse = { ok: true }; + socket.write(`${JSON.stringify(resp)}\n`); + } catch (err) { + const msg = err instanceof Error ? err.message : String(err); + const resp: DaemonResponse = { ok: false, error: msg }; + socket.write(`${JSON.stringify(resp)}\n`); + } } const server: Server = createServer((socket) => { -- 2.43.0