From 09fbdefd14f3a3c842afe1e824ca0cb066f6a656 Mon Sep 17 00:00:00 2001 From: qer Date: Thu, 11 Jun 2026 18:07:00 +0800 Subject: [PATCH] feat(vis): expose app_version in wire.jsonl metadata for debug - WireReader now reads app_version from metadata record - WireResponse metadata includes optional appVersion field - Test fixtures updated with app_version for validation This makes the kimi-code CLI version visible in the vis server wire response, helping debug version-related issues. --- apps/vis/server/src/lib/agent-record-types.ts | 2 +- apps/vis/server/src/lib/wire-reader.ts | 5 +++-- .../fixtures/sessions/sample-main/agents/agent-0/wire.jsonl | 2 +- .../fixtures/sessions/sample-main/agents/main/wire.jsonl | 2 +- apps/vis/server/test/lib/wire-reader.test.ts | 1 + 5 files changed, 7 insertions(+), 5 deletions(-) diff --git a/apps/vis/server/src/lib/agent-record-types.ts b/apps/vis/server/src/lib/agent-record-types.ts index 2276c3c15..05ccab06c 100644 --- a/apps/vis/server/src/lib/agent-record-types.ts +++ b/apps/vis/server/src/lib/agent-record-types.ts @@ -101,7 +101,7 @@ export interface WireResponse { sessionId: string; agentId: string; protocolVersion: string; - metadata: { protocolVersion: string; createdAt: number }; + metadata: { protocolVersion: string; createdAt: number; appVersion?: string }; records: readonly WireEntry[]; warnings: string[]; } diff --git a/apps/vis/server/src/lib/wire-reader.ts b/apps/vis/server/src/lib/wire-reader.ts index 67ee4cd20..70aa6592c 100644 --- a/apps/vis/server/src/lib/wire-reader.ts +++ b/apps/vis/server/src/lib/wire-reader.ts @@ -10,7 +10,7 @@ import { import type { AgentRecord, WireEntry } from './agent-record-types'; export interface WireReadResult { - metadata: { protocolVersion: string; createdAt: number }; + metadata: { protocolVersion: string; createdAt: number; appVersion?: string }; records: ReadonlyArray; warnings: string[]; } @@ -66,6 +66,7 @@ export async function readAgentWire(path: string): Promise { } const pv = parsed['protocol_version']; const ca = parsed['created_at']; + const av = parsed['app_version']; if (typeof pv !== 'string' || typeof ca !== 'number') { throw new TypeError(`Wire metadata malformed at line ${lineNo}`); } @@ -77,7 +78,7 @@ export async function readAgentWire(path: string): Promise { ); migrations = bestEffortMigrations(); } - metadata = { protocolVersion: pv, createdAt: ca }; + metadata = { protocolVersion: pv, createdAt: ca, appVersion: typeof av === 'string' ? av : undefined }; continue; } const raw = parsed as Record; diff --git a/apps/vis/server/test/fixtures/sessions/sample-main/agents/agent-0/wire.jsonl b/apps/vis/server/test/fixtures/sessions/sample-main/agents/agent-0/wire.jsonl index f7fed1099..f4bac5ae6 100644 --- a/apps/vis/server/test/fixtures/sessions/sample-main/agents/agent-0/wire.jsonl +++ b/apps/vis/server/test/fixtures/sessions/sample-main/agents/agent-0/wire.jsonl @@ -1,2 +1,2 @@ -{"type":"metadata","protocol_version":"1.1","created_at":1779256900000} +{"type":"metadata","protocol_version":"1.1","created_at":1779256900000,"app_version":"1.2.3"} {"type":"config.update","cwd":"/tmp/work","profileName":"sub","systemPrompt":"You are a sub-agent.","time":1779256900001} diff --git a/apps/vis/server/test/fixtures/sessions/sample-main/agents/main/wire.jsonl b/apps/vis/server/test/fixtures/sessions/sample-main/agents/main/wire.jsonl index f7a7d11a6..51ae8eb35 100644 --- a/apps/vis/server/test/fixtures/sessions/sample-main/agents/main/wire.jsonl +++ b/apps/vis/server/test/fixtures/sessions/sample-main/agents/main/wire.jsonl @@ -1,4 +1,4 @@ -{"type":"metadata","protocol_version":"1.1","created_at":1779256791085} +{"type":"metadata","protocol_version":"1.1","created_at":1779256791085,"app_version":"1.2.3"} {"type":"config.update","cwd":"/tmp/work","profileName":"agent","systemPrompt":"You are Kimi.","time":1779256791100} {"type":"tools.set_active_tools","names":["Read","Write"],"time":1779256791101} {"type":"permission.set_mode","mode":"manual","time":1779256791102} diff --git a/apps/vis/server/test/lib/wire-reader.test.ts b/apps/vis/server/test/lib/wire-reader.test.ts index 6f67d6285..9a5b78273 100644 --- a/apps/vis/server/test/lib/wire-reader.test.ts +++ b/apps/vis/server/test/lib/wire-reader.test.ts @@ -17,6 +17,7 @@ describe('wire-reader', () => { cleanup = c; const result = await readAgentWire(join(sessionDir, 'agents', 'main', 'wire.jsonl')); expect(result.metadata.protocolVersion).toBe('1.1'); + expect(result.metadata.appVersion).toBe('1.2.3'); expect(result.records[0]!.lineNo).toBe(2); // metadata is line 1, first record is line 2 expect(result.records.at(-1)!.lineNo).toBe(10); expect(result.records.map((r) => r.data.type)).toEqual([