102 lines
4.0 KiB
TypeScript
102 lines
4.0 KiB
TypeScript
// SPEC: PJ2026-0104010803 Workbench事件流可见性 draft-2026-07-09-p0-kafka-authority.
|
|
// Responsibility: lock AgentRun Kafka event -> HWLAB Kafka event projection contract without requiring a live Kafka broker.
|
|
|
|
import assert from "node:assert/strict";
|
|
import { test } from "bun:test";
|
|
|
|
import { projectAgentRunKafkaEventToHwlabEvent } from "./kafka-event-bridge.ts";
|
|
|
|
test("projects AgentRun assistant_message Kafka event into HWLAB trace event", () => {
|
|
const projected = projectAgentRunKafkaEventToHwlabEvent({
|
|
schema: "agentrun.event.v1",
|
|
eventType: "agentrun.run.event",
|
|
source: "agentrun-manager",
|
|
producedAt: "2026-07-09T10:00:00.000Z",
|
|
run: {
|
|
runId: "run_kafka_projection",
|
|
sessionId: "ses_kafka_projection",
|
|
conversationId: "cnv_kafka_projection",
|
|
threadId: "thread-kafka-projection",
|
|
projectId: "prj_kafka_projection",
|
|
backendProfile: "deepseek"
|
|
},
|
|
command: { commandId: "cmd_kafka_projection" },
|
|
event: {
|
|
seq: 7,
|
|
type: "assistant_message",
|
|
createdAt: "2026-07-09T10:00:01.000Z",
|
|
payload: {
|
|
traceId: "trc_kafka_projection",
|
|
commandId: "cmd_kafka_projection",
|
|
text: "partial answer",
|
|
itemId: "item_assistant_1",
|
|
final: false
|
|
}
|
|
}
|
|
}, { source: "hwlab-test", producedAt: "2026-07-09T10:00:02.000Z", sourceTopic: "agentrun.event.v1", sourceOffset: "42" });
|
|
|
|
assert.equal(projected.schema, "hwlab.event.v1");
|
|
assert.equal(projected.eventType, "hwlab.trace.event.projected");
|
|
assert.equal(projected.source, "hwlab-test");
|
|
assert.equal(projected.traceId, "trc_kafka_projection");
|
|
assert.equal(projected.sessionId, "ses_kafka_projection");
|
|
assert.equal(projected.context.runId, "run_kafka_projection");
|
|
assert.equal(projected.context.commandId, "cmd_kafka_projection");
|
|
assert.equal(projected.context.sourceSeq, 7);
|
|
assert.equal(projected.context.agentRunEventType, "assistant_message");
|
|
assert.equal(projected.event.type, "assistant");
|
|
assert.equal(projected.event.label, "agentrun:assistant:message");
|
|
assert.equal(projected.event.status, "running");
|
|
assert.equal(projected.event.text, "partial answer");
|
|
assert.equal(projected.event.terminal, false);
|
|
assert.equal(projected.sourceEvent.topic, "agentrun.event.v1");
|
|
assert.equal(projected.sourceEvent.offset, "42");
|
|
assert.equal(projected.valuesPrinted, false);
|
|
});
|
|
|
|
test("projects AgentRun terminal_status Kafka event into terminal HWLAB event", () => {
|
|
const projected = projectAgentRunKafkaEventToHwlabEvent({
|
|
schema: "agentrun.event.v1",
|
|
eventType: "agentrun.run.event",
|
|
run: { runId: "run_terminal", sessionId: "ses_terminal" },
|
|
command: { commandId: "cmd_terminal" },
|
|
event: {
|
|
seq: 12,
|
|
type: "terminal_status",
|
|
payload: {
|
|
traceId: "trc_terminal",
|
|
terminalStatus: "completed",
|
|
message: "AgentRun completed"
|
|
}
|
|
}
|
|
}, { source: "hwlab-test" });
|
|
|
|
assert.equal(projected.traceId, "trc_terminal");
|
|
assert.equal(projected.event.type, "result");
|
|
assert.equal(projected.event.eventType, "terminal");
|
|
assert.equal(projected.event.status, "completed");
|
|
assert.equal(projected.event.label, "agentrun:terminal:completed");
|
|
assert.equal(projected.event.terminal, true);
|
|
assert.equal(projected.event.message, "AgentRun completed");
|
|
});
|
|
|
|
test("projects AgentRun run-created envelope even when no source event is present", () => {
|
|
const projected = projectAgentRunKafkaEventToHwlabEvent({
|
|
schema: "agentrun.event.v1",
|
|
eventType: "agentrun.run.created",
|
|
run: {
|
|
runId: "run_created",
|
|
sessionId: "ses_created",
|
|
traceId: "trc_created",
|
|
backendProfile: "codex"
|
|
}
|
|
}, { source: "hwlab-test" });
|
|
|
|
assert.equal(projected.traceId, "trc_created");
|
|
assert.equal(projected.sessionId, "ses_created");
|
|
assert.equal(projected.context.runId, "run_created");
|
|
assert.equal(projected.context.sourceEventType, "agentrun.run.created");
|
|
assert.equal(projected.event.label, "agentrun:event:agentrun.run.created");
|
|
assert.equal(projected.event.status, "running");
|
|
});
|