Fix markdown streaming duplication by splitting newlines first

- Added string-width library for proper terminal column width calculation
- Fixed wrapLine() to split by newlines before wrapping (like Text component)
- Fixed Loader interval leak by stopping before container removal
- Changed loader message from 'Loading...' to 'Working...'
This commit is contained in:
Mario Zechner 2025-11-11 19:27:58 +01:00
parent 985f955ea0
commit c5083bb7cb
16 changed files with 429 additions and 372 deletions

View file

@ -36,30 +36,28 @@ describe("Agent", () => {
expect(agent.state.thinkingLevel).toBe("low");
});
it("should subscribe to state updates", () => {
it("should subscribe to events", () => {
const agent = new Agent({
transport: new ProviderTransport(),
});
let updateCount = 0;
const unsubscribe = agent.subscribe((event) => {
if (event.type === "state-update") {
updateCount++;
}
let eventCount = 0;
const unsubscribe = agent.subscribe((_event) => {
eventCount++;
});
// Initial state update on subscribe
expect(updateCount).toBe(1);
// No initial event on subscribe
expect(eventCount).toBe(0);
// Update state
// State mutators don't emit events
agent.setSystemPrompt("Test prompt");
expect(updateCount).toBe(2);
expect(eventCount).toBe(0);
expect(agent.state.systemPrompt).toBe("Test prompt");
// Unsubscribe should work
unsubscribe();
agent.setSystemPrompt("Another prompt");
expect(updateCount).toBe(2); // Should not increase
expect(eventCount).toBe(0); // Should not increase
});
it("should update state with mutators", () => {