9dfa06ffee
Docker image / Build (linux/amd64) (push) Has been cancelled
Docker image / Build (linux/arm64) (push) Has been cancelled
Docker image / Merge release multi-arch manifest (push) Has been cancelled
Docker image / Merge debug multi-arch manifest (push) Has been cancelled
Docker image / Build public push gateway (linux/amd64) (push) Has been cancelled
Docker image / Build public push gateway (linux/arm64) (push) Has been cancelled
Docker image / Publish public push gateway image (push) Has been cancelled
Sprig image / Build (linux/amd64) (push) Has been cancelled
Sprig image / Build (linux/arm64) (push) Has been cancelled
Sprig image / Merge multi-arch manifest (push) Has been cancelled
Harbor Buzz Orchestra / Python tests and lint (push) Has been cancelled
CI / Detect Changed Paths (push) Has been cancelled
CI / Rust Lint (push) Has been cancelled
CI / Unit Tests (push) Has been cancelled
CI / Desktop Core (push) Has been cancelled
CI / Desktop Smoke E2E (1) (push) Has been cancelled
CI / Desktop Smoke E2E (2) (push) Has been cancelled
CI / Desktop Smoke E2E (3) (push) Has been cancelled
CI / Desktop Smoke E2E (4) (push) Has been cancelled
CI / Desktop (push) Has been cancelled
CI / Desktop E2E Relay (push) Has been cancelled
CI / Desktop E2E Integration (1/2) (push) Has been cancelled
CI / Desktop E2E Integration (2/2) (push) Has been cancelled
CI / Desktop E2E Integration (push) Has been cancelled
CI / Backend Integration (relay e2e) (push) Has been cancelled
CI / Relay E2E (push) Has been cancelled
CI / Web (push) Has been cancelled
CI / Mobile (push) Has been cancelled
CI / Security (push) Has been cancelled
CI / Dead Token Reference Guard (push) Has been cancelled
CI / Server Cross-Compile (aarch64-unknown-linux-musl) (push) Has been cancelled
CI / Server Cross-Compile (x86_64-unknown-linux-musl) (push) Has been cancelled
CI / Windows Rust (x86_64-pc-windows-msvc) (push) Has been cancelled
CI / Desktop Build (macOS) (push) Has been cancelled
helm chart / lint + unittest + render matrix (push) Has been cancelled
helm chart / install on kind (gated) (push) Has been cancelled
helm chart / publish chart to GHCR (push) Has been cancelled
Mesh Lifecycle / Relay-Driven Mesh Lifecycle Smoke (push) Has been cancelled
Sprig / Build (aarch64-unknown-linux-musl) (push) Has been cancelled
Sprig / Build (x86_64-unknown-linux-musl) (push) Has been cancelled
Sprig / Publish rolling release (push) Has been cancelled
Sprig / Publish tagged release (push) Has been cancelled
Signed-off-by: cls_宁波本机 <908705107@qq.com>
145 lines
3.9 KiB
Dart
145 lines
3.9 KiB
Dart
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:buzz/features/channels/agent_activity/observer_models.dart';
|
|
import 'package:buzz/features/channels/agent_activity/transcript_builder.dart';
|
|
|
|
void main() {
|
|
test('aggregates assistant chunks until another item seals the message', () {
|
|
final items = buildTranscript([
|
|
_updateFrame(
|
|
seq: 1,
|
|
update: {
|
|
'sessionUpdate': 'agent_message_chunk',
|
|
'messageId': 'm1',
|
|
'content': [
|
|
{'type': 'text', 'text': 'Hello'},
|
|
],
|
|
},
|
|
),
|
|
_updateFrame(
|
|
seq: 2,
|
|
update: {
|
|
'sessionUpdate': 'agent_message_chunk',
|
|
'messageId': 'm1',
|
|
'content': [
|
|
{'type': 'text', 'text': ' world'},
|
|
],
|
|
},
|
|
),
|
|
_updateFrame(
|
|
seq: 3,
|
|
update: {
|
|
'sessionUpdate': 'tool_call',
|
|
'toolCallId': 'tool-1',
|
|
'title': 'sleep',
|
|
'args': {'seconds': 5},
|
|
},
|
|
),
|
|
_updateFrame(
|
|
seq: 4,
|
|
update: {
|
|
'sessionUpdate': 'agent_message_chunk',
|
|
'messageId': 'm1',
|
|
'content': [
|
|
{'type': 'text', 'text': 'Done'},
|
|
],
|
|
},
|
|
),
|
|
]);
|
|
|
|
expect(items, hasLength(3));
|
|
expect(items[0], isA<MessageItem>());
|
|
expect((items[0] as MessageItem).text, 'Hello world');
|
|
expect(items[1], isA<ToolItem>());
|
|
expect(items[2], isA<MessageItem>());
|
|
expect((items[2] as MessageItem).text, 'Done');
|
|
});
|
|
|
|
test('normalizes buzz tool calls and applies result updates', () {
|
|
final items = buildTranscript([
|
|
_updateFrame(
|
|
seq: 1,
|
|
update: {
|
|
'sessionUpdate': 'tool_call',
|
|
'toolCallId': 'send-1',
|
|
'title': 'Sending message to channel',
|
|
'status': 'executing',
|
|
'args': {'content': 'hi'},
|
|
},
|
|
),
|
|
_updateFrame(
|
|
seq: 2,
|
|
update: {
|
|
'sessionUpdate': 'tool_call_update',
|
|
'toolCallId': 'send-1',
|
|
'status': 'completed',
|
|
'content': [
|
|
{'type': 'text', 'text': 'posted #activity-test-channel'},
|
|
],
|
|
},
|
|
),
|
|
]);
|
|
|
|
expect(items, hasLength(1));
|
|
expect(items.single, isA<ToolItem>());
|
|
final tool = items.single as ToolItem;
|
|
expect(tool.buzzToolName, 'send_message');
|
|
expect(tool.toolName, 'send_message');
|
|
expect(tool.status, ToolStatus.completed);
|
|
expect(tool.args, {'content': 'hi'});
|
|
expect(tool.result, 'posted #activity-test-channel');
|
|
});
|
|
|
|
test('parses buzz prompt text into user message and metadata', () {
|
|
final items = buildTranscript([
|
|
ObserverFrame(
|
|
seq: 1,
|
|
timestamp: _timestamp(1),
|
|
kind: 'acp_write',
|
|
turnId: 'turn-1',
|
|
payload: {
|
|
'method': 'session/prompt',
|
|
'params': {
|
|
'prompt': [
|
|
{
|
|
'content':
|
|
'[Buzz event: stream message]\n'
|
|
'Content: @claude can you do that again?\n\n'
|
|
'[Channel]\n'
|
|
'#activity-test-channel',
|
|
},
|
|
],
|
|
},
|
|
},
|
|
),
|
|
]);
|
|
|
|
expect(items, hasLength(2));
|
|
expect(items[0], isA<MessageItem>());
|
|
final message = items[0] as MessageItem;
|
|
expect(message.role, 'user');
|
|
expect(message.title, 'Stream Message');
|
|
expect(message.text, '@claude can you do that again?');
|
|
expect(items[1], isA<MetadataItem>());
|
|
expect((items[1] as MetadataItem).sections, hasLength(2));
|
|
});
|
|
}
|
|
|
|
ObserverFrame _updateFrame({
|
|
required int seq,
|
|
required Map<String, dynamic> update,
|
|
}) {
|
|
return ObserverFrame(
|
|
seq: seq,
|
|
timestamp: _timestamp(seq),
|
|
kind: 'acp_read',
|
|
turnId: 'turn-1',
|
|
payload: {
|
|
'method': 'session/update',
|
|
'params': {'update': update},
|
|
},
|
|
);
|
|
}
|
|
|
|
String _timestamp(int seq) =>
|
|
DateTime.utc(2026, 4, 30, 12, 0, seq).toIso8601String();
|