From fe3eb71b3033c5e6e19210c512c731adc3395988 Mon Sep 17 00:00:00 2001 From: Chengdong Zhang Date: Mon, 27 Jul 2026 18:52:23 +0800 Subject: [PATCH] feat: report local task terminal events --- src/localAgentProtocol.test.ts | 23 +++++++++++++++++++++++ src/localAgentProtocol.ts | 27 +++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 src/localAgentProtocol.test.ts diff --git a/src/localAgentProtocol.test.ts b/src/localAgentProtocol.test.ts new file mode 100644 index 0000000..eb94036 --- /dev/null +++ b/src/localAgentProtocol.test.ts @@ -0,0 +1,23 @@ +import { describe, expect, it } from 'vitest'; +import { localAgentClientMessageSchema } from './localAgentProtocol.js'; + +describe('localAgentClientMessageSchema', () => { + it('parses a completed local task', () => { + const parsed = localAgentClientMessageSchema.parse({ + type: 'task.completed', + taskId: 'task-1', + text: 'Created CODE_INDEX.md.', + }); + + expect(parsed.type).toBe('task.completed'); + }); + + it('rejects a failed local task without a message', () => { + const result = localAgentClientMessageSchema.safeParse({ + type: 'task.failed', + taskId: 'task-1', + }); + + expect(result.success).toBe(false); + }); +}); diff --git a/src/localAgentProtocol.ts b/src/localAgentProtocol.ts index e9a7d63..8aafcd8 100644 --- a/src/localAgentProtocol.ts +++ b/src/localAgentProtocol.ts @@ -21,6 +21,25 @@ const taskDispatchServerMessageSchema = z.object({ prompt: z.string().min(1), }); +const taskResultClientMessageSchema = z.object({ + type: z.literal('task.result'), + taskId: z.string().min(1), + status: z.enum(['accepted', 'rejected']), + reason: z.string().min(1).optional(), +}); + +const taskCompletedClientMessageSchema = z.object({ + type: z.literal('task.completed'), + taskId: z.string().min(1), + text: z.string(), +}); + +const taskFailedClientMessageSchema = z.object({ + type: z.literal('task.failed'), + taskId: z.string().min(1), + message: z.string().min(1), +}); + const errorServerMessageSchema = z.object({ type: z.literal('error'), code: z.string().min(1), @@ -35,3 +54,11 @@ export const localAgentServerMessageSchema = z.discriminatedUnion('type', [ ]); export type LocalAgentServerMessage = z.infer; + +export const localAgentClientMessageSchema = z.discriminatedUnion('type', [ + taskResultClientMessageSchema, + taskCompletedClientMessageSchema, + taskFailedClientMessageSchema, +]); + +export type LocalAgentClientMessage = z.infer;