The two compaction interruption tests ("stops quickly when aborted during
retry backoff" and "does not leave a summary assistant when aborted before
processor setup") intermittently fail on the Windows CI shard with an
uncaught TimeoutError.
Root cause: Effect 4.x changed Effect.timeout to throw a TimeoutError on
the error channel instead of returning Option (as in Effect 3.x). The
tests wrapped Deferred.await(ready) and Fiber.await(fiber) in
Effect.timeout as a guard against the fiber never reaching the trigger
state, but on loaded Windows runners the fiber can take longer than the
1 second / 250 millis deadlines to reach that state. When the deadline
expired the TimeoutError propagated uncaught and failed the test, even
though the interrupt assertions would still hold.
Swallow the TimeoutError from the ready wait so the test proceeds to
interrupt the fiber regardless of whether the trigger fired in time, and
drop the inner Fiber.await timeout since Fiber.interrupt already waits for
termination. The assertions verify the interrupt exit either way.
* fix(ui): support bidirectional chat markdown
* fix(ui): address bidi markdown review feedback
* fix(ui): distinguish user message bubbles
* fix(ui): simplify markdown bidi direction
Mark the markdown container with one auto direction instead of
decorating each rendered block after parsing. Assistant replies usually
have one dominant natural language, but coding responses often start
list items and paragraphs with identifiers, method names, or HTTP terms.
Per-block auto direction lets those English tokens choose the direction
for whole lists even when the surrounding answer is right-to-left.
Keeping direction on the root makes the answer follow the dominant
prose direction more consistently, while code and pre elements keep their
own auto direction so code-like content does not decide the container
direction. This also removes the post-render bidi decoration pass.
* fix(ui): isolate markdown math direction
* fix(vscode): improve bidi text rendering
Match the chat user message bubble to the prompt input by using
plaintext unicode-bidi handling inside the Kilo UI message text.
Set automatic direction on session title labels in the task header,
recent sessions, history, cloud history, and Agent Manager so RTL and
mixed-direction titles render correctly without changing row layout.
* fix(ui): preserve code block direction while streaming
Keep dir on the existing pre element when streaming Shiki highlighting
updates it in place. The updater removes current attributes before
copying Shiki attributes, and Shiki does not emit dir, so RTL markdown
roots could briefly force code blocks to render right-to-left during
streaming.
Export the update helper for a focused behavior test that verifies the
in-place highlight update keeps direction, replaces stale attributes,
applies Shiki attributes, preserves scroll position, and updates the
source hash.
* chore(vscode): fix formatting issues
Format files after adding automatic direction attributes.
* test(ui): improve markdown bidi tests
Replace source-shape checks with an isolated Markdown component render
for the root dir contract.
Use happy-dom for the streaming highlight update test so innerHTML
parsing, attributes, connectivity, and HTMLPreElement checks use a real
DOM implementation. Restore patched globals in finally to avoid test
leakage.
* test(ui): address markdown bidi review comments
* fix(ui): revert user message bubble styles
* Revert "fix(ui): revert user message bubble styles"
This reverts commit 282264e25c.
* refactor(agent-manager): extract unassigned sessions section
---------
Co-authored-by: marius-kilocode <marius@kilocode.ai>