Commit Graph
793 Commits
Author SHA1 Message Date
npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7andWill Pfleger 7d3b782ac8 test(agent): add chunk-emission, Auto→Responses upgrade, and config validation tests
StreamEmitter::test_channel() helper: returns a live mpsc receiver so
tests can assert which agent_message_chunk messages were emitted, unlike
noop() which drops the receiver.

Chunk-emission (2 tests): verify one chunk per text delta with correct
content, and that empty/absent text emits nothing.

Auto→Responses upgrade (2 tests): verify that Auto mode retries on
/responses when /chat/completions returns a 400 with an
is_responses_required body, and that the sticky auto_upgraded flag
causes subsequent calls to skip /chat/completions entirely. Both tests
assert which paths the fake server saw — the discriminating assertion
per Thufir's review.

Config validation (2 tests): stream_chunk_timeout=0 and
llm_body_chunk_timeout=0 both rejected with the documented error message.

Co-authored-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
2026-06-10 15:25:06 -04:00
npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7andWill Pfleger 1f0ddadc47 test(agent): add streaming resilience tests for timeout, framing, and retry
Cover three high-priority gaps identified in the PR #944 test plan:

Gap 3 (dual-timeout switchover): Verify first_byte_timeout governs
pre-content and stream_chunk_timeout governs post-content. Three tests
exercise the transition using sub-second timeouts against a delayed-write
TCP server.

Gap 1 (split-boundary framing): Verify SseReader handles event boundaries
split across TCP chunks, data: prefix split mid-keyword, and trailing data
without a final \n\n boundary before EOF.

Gap 6 (send_stream_with_retry): Verify 5xx triggers retry and succeeds on
second attempt, all-503 exhausts retries with clear error, and 401 surfaces
LlmAuth immediately without retrying.

Co-authored-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
2026-06-10 15:17:37 -04:00
npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7andWill Pfleger dac14a526a refactor(agent): rename llm_stream_chunk_timeout and extract test helper
The buffered-body inter-chunk timeout was named llm_stream_chunk_timeout,
confusingly similar to stream_chunk_timeout (the SSE inter-chunk timeout).
Operators tuning "stream chunk timeout" would set the wrong env var.
Rename to llm_body_chunk_timeout / SPROUT_AGENT_LLM_BODY_CHUNK_TIMEOUT_SECS
to clearly distinguish the buffered path from the streaming path.

Extract the openai_to_sse_events test helper (duplicated in fake_llm.rs,
golden_transcripts.rs, and regressions.rs) into tests/common/mod.rs.

Co-authored-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
2026-06-10 14:01:28 -04:00
npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7andWill Pfleger 06378f49ef fix(agent): SSE robustness — CRLF normalization, buffer cap, pre-stream retry, ordered tool calls
The SSE reader split events only on "\n\n", so providers or proxies
emitting CRLF or bare-CR line terminators broke event framing. It also
let SseReader.buf grow without bound when a stream never produced an
event boundary. Streaming requests had no retry on the initial send, and
the Responses-API tool-call accumulator used a HashMap, yielding
non-deterministic tool-call order.

- Normalize CR and CRLF to LF on chunk append (SSE spec equivalence)
- Cap SseReader.buf at MAX_LLM_RESPONSE_BYTES, erroring before any
  unbounded growth
- Add send_stream_with_retry() applying the buffered path's transport/
  5xx/429 backoff to the initial request only, stopping before any chunk
  is emitted to avoid duplicate output
- Replace the HashMap tool-call accumulator with a first-seen-ordered Vec
  to match the buffered parser's ordering

Co-authored-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
2026-06-10 13:45:13 -04:00
npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7andWill Pfleger 52e1013b17 fix(agent): backfill tool name on Responses API event ordering race
output_item.added may arrive after function_call_arguments.delta when
the Responses API reorders events. The delta handler creates the HashMap
entry with an empty name, and the previous or_insert_with no-oped on
existing entries. Use and_modify to backfill the name regardless of
insertion order.

Co-authored-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
2026-06-10 13:45:13 -04:00
npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7andWill Pfleger d22ba793a6 feat(agent): SSE streaming for LLM completions with per-provider accumulators
Replace buffered LLM requests with Server-Sent Events streaming. Each
text delta emits an agent_message_chunk session update as it arrives,
providing a natural keepalive that resets the ACP idle clock without
relying solely on the 30s ticker.

Design decisions:
- Two reqwest::Client instances: `http` (with global timeout for
  summarize) and `http_stream` (no global timeout, enforces first-byte
  and inter-chunk timeouts via tokio::time::timeout)
- Two-phase timeout: llm_timeout (120s) until first content delta,
  then stream_chunk_timeout (30s) between subsequent events
- Anthropic: index-keyed HashMap<usize, (String, String)> for parallel
  tool-call accumulation via content_block index
- OpenAI Chat: Vec-indexed accumulation by tool_calls[].index
- Responses API: routes on JSON `type` field inside data payload, uses
  response.output_text.delta and response.function_call_arguments.delta
- MAX_LLM_RESPONSE_BYTES caps accumulated semantic content (text + tool
  args), not raw SSE wire bytes
- SSE parser handles : comments, multi-line data:, id:/retry: fields
- Keepalive ticker (G) preserved as fallback for reasoning models that
  pause before producing content

Co-authored-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
2026-06-10 13:45:13 -04:00
npub16v54tttfqacx9ycvc3k0ut0npj564ahcuajzy6qjvh57ntmsf4uq4806j2andWill Pfleger 4b676908bd fix(acp): death notice threading, error variant, and DRY extraction
Death notices referenced the thread root with NIP-10 marker "reply"
instead of "root", causing incorrect threading in clients. Tag-parse
errors incorrectly mapped to RelayError::AuthFailed.

- Change e-tag marker from "reply" to "root" in build_death_notice
- Add RelayError::EventBuild variant for tag-parse failures
- Add publish_death_notice() method on HarnessRelay to consolidate
  the build+publish+warn pattern used by both timeout and transport
  error paths
- Replace inline match blocks in handle_prompt_result with method call

Co-authored-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
2026-06-10 13:38:36 -04:00
npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7andWill Pfleger 7b666057e6 fix(acp): review fixes — transport-error death notices, threaded messages, keepalive arm
Address review findings from Thufir on PR #935:

- Post death notice on transport-error respawns (Io, WriteTimeout,
  Timeout, Protocol) — same user-facing silence as idle timeout
- Thread death notices into the original conversation via e-tag reply
  so users know which task died in busy channels
- Add explicit "keepalive" match arm in handle_session_update for
  documentation clarity
- Update idle-reset comment to clarify belt-and-suspenders intent

Co-authored-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
2026-06-09 20:36:46 -04:00
npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7andWill Pfleger 903ab774bf feat(acp): agent timeout resilience — idle margin, tool-call reset, death notices, keepalive
The 20s margin between the 600s max shell timeout and the 620s idle
timeout caused spurious session kills during legitimate long-running
tool calls. This changeset addresses the problem from four angles:

- Raise DEFAULT_IDLE_TIMEOUT_SECS from 620 to 900 (300s margin)
- Reset idle clock explicitly on tool_call session updates with
  observability logging
- Post a visible channel message (death notice) when a session ends
  due to idle timeout or unexpected agent exit
- Emit a keepalive session update every 30s while waiting on the LLM
  provider response, preventing idle timeout during slow completions

Co-authored-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
2026-06-09 20:20:41 -04:00
877048d68f fix: persona is source of truth at spawn + thread-depth conventions (#930)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Signed-off-by: npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7 <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7 <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@sprout-oss.stage.blox.sqprod.co>
2026-06-09 23:58:45 +00:00
73cd8d082d fix: skip avatar reconciliation for legacy agent records (#933)
Signed-off-by: npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7 <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@sprout-oss.stage.blox.sqprod.co>
Signed-off-by: npub1fgdl5qqnh3k3f2xkqrvt7cujalhm623x4s7fdjdj5yrtp5fzjl9qrjpucw <4a1bfa0013bc6d14a8d600d8bf6392efefbd2a26ac3c96c9b2a106b0d12297ca@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: npub1fgdl5qqnh3k3f2xkqrvt7cujalhm623x4s7fdjdj5yrtp5fzjl9qrjpucw <4a1bfa0013bc6d14a8d600d8bf6392efefbd2a26ac3c96c9b2a106b0d12297ca@sprout-oss.stage.blox.sqprod.co>
2026-06-09 19:52:11 -04:00
165b9f7a5f feat(desktop): add nest commit identity guidance with human sign-off (#929)
Signed-off-by: npub1fgdl5qqnh3k3f2xkqrvt7cujalhm623x4s7fdjdj5yrtp5fzjl9qrjpucw <4a1bfa0013bc6d14a8d600d8bf6392efefbd2a26ac3c96c9b2a106b0d12297ca@sprout-oss.stage.blox.sqprod.co>
Signed-off-by: Will Pfleger <wpfleger@squareup.com>
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
Co-authored-by: npub1fgdl5qqnh3k3f2xkqrvt7cujalhm623x4s7fdjdj5yrtp5fzjl9qrjpucw <4a1bfa0013bc6d14a8d600d8bf6392efefbd2a26ac3c96c9b2a106b0d12297ca@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7 <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@sprout-oss.stage.blox.sqprod.co>
2026-06-09 18:46:55 -04:00
Will PflegerandGitHub 9a98e60fc2 feat: provider/model selection for personas and runtime-aware env injection (#794) 2026-06-09 20:42:27 +00:00
762a45969a fix: reconcile agent profile on startup when relay publish was missed (#921)
Signed-off-by: npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7 <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7 <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@sprout-oss.stage.blox.sqprod.co>
2026-06-09 15:05:42 -04:00
klopez4212andGitHub 5d927aba0c Revamp first-run onboarding (#924) 2026-06-09 19:47:52 +01:00
klopez4212andGitHub f362650195 Update setup loading screen (#926) 2026-06-09 18:27:54 +01:00
c38301bca5 fix(dm): keep hidden DMs hidden across refetch via relay-signed visibility snapshot (NIP-DV) (#857)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Signed-off-by: npub1qyvc0c5kl4gqv2fd97fsk46tu378sqgy35vc83rvgfwne90sel7s0ed67d <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: npub1qyvc0c5kl4gqv2fd97fsk46tu378sqgy35vc83rvgfwne90sel7s0ed67d <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@sprout-oss.stage.blox.sqprod.co>
2026-06-09 10:23:57 -07:00
klopez4212andGitHub 4dfae61f24 Maximize desktop window on launch (#925) 2026-06-09 18:08:37 +01:00
Taylor HoandGitHub ae430d4dd9 feat: preview features (experiments settings UI) (#888)
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: npub1223z34hd7vtwc6qj4s7flsxkj644nlre2nthu7lrrmkumhu3xddsrx9r6w <52a228d6edf316ec6812ac3c9fc0d696ab59fc7954d77e7be31eedcddf91335b@sprout-oss.stage.blox.sqprod.co>
2026-06-09 09:53:09 -07:00
a357e220d8 fix(updater): send no-cache header on update check to avoid stale manifest (#922)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co>
2026-06-09 09:52:49 -07:00
56230c1442 fix(desktop): refresh channel state after unarchive (#923)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co>
2026-06-09 09:49:27 -07:00
7dd5b34536 Add channel visibility & ephemeral TTL controls to manage sidebar (#911)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co>
2026-06-09 09:01:10 -07:00
tlongwell-blockandGitHub 4b78fe3bea ci(release): add Intel macOS (x86_64) DMG as a release target (#748)
Signed-off-by: tlongwell-block <109685178+tlongwell-block@users.noreply.github.com>
2026-06-09 11:52:41 -04:00
421593062f mesh: Rust-owned coordinator — fix saved-agent reconnect flakiness + DRY the start path (#879)
Signed-off-by: npub1qyvc0c5kl4gqv2fd97fsk46tu378sqgy35vc83rvgfwne90sel7s0ed67d <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@sprout-oss.stage.blox.sqprod.co>
Signed-off-by: npub1mprnacetjua2xx3p5eddmhxyk6wv929ymm5py8kd2xfxurxahspqqlgyta <d8473ee32b973aa31a21a65adddcc4b69cc2a8a4dee8121ecd51926e0cddbc02@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: npub1qyvc0c5kl4gqv2fd97fsk46tu378sqgy35vc83rvgfwne90sel7s0ed67d <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: npub1mprnacetjua2xx3p5eddmhxyk6wv929ymm5py8kd2xfxurxahspqqlgyta <d8473ee32b973aa31a21a65adddcc4b69cc2a8a4dee8121ecd51926e0cddbc02@sprout-oss.stage.blox.sqprod.co>
2026-06-09 10:59:28 -04:00
WesandGitHub d099866ace chore(release): release version 0.3.14 (#916) v0.3.14 2026-06-09 07:43:02 -07:00
7b3012b777 docs: add NIP-ER event reminders (#875)
Signed-off-by: npub1mprnacetjua2xx3p5eddmhxyk6wv929ymm5py8kd2xfxurxahspqqlgyta <d8473ee32b973aa31a21a65adddcc4b69cc2a8a4dee8121ecd51926e0cddbc02@sprout-oss.stage.blox.sqprod.co>
Signed-off-by: npub1qyvc0c5kl4gqv2fd97fsk46tu378sqgy35vc83rvgfwne90sel7s0ed67d <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: npub1mprnacetjua2xx3p5eddmhxyk6wv929ymm5py8kd2xfxurxahspqqlgyta <d8473ee32b973aa31a21a65adddcc4b69cc2a8a4dee8121ecd51926e0cddbc02@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: npub1qyvc0c5kl4gqv2fd97fsk46tu378sqgy35vc83rvgfwne90sel7s0ed67d <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@sprout-oss.stage.blox.sqprod.co>
2026-06-09 10:02:54 -04:00
7b854971c6 feat(acp): pass slash commands through to ACP connectors (#919)
Signed-off-by: npub1qyvc0c5kl4gqv2fd97fsk46tu378sqgy35vc83rvgfwne90sel7s0ed67d <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: npub1qyvc0c5kl4gqv2fd97fsk46tu378sqgy35vc83rvgfwne90sel7s0ed67d <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@sprout-oss.stage.blox.sqprod.co>
2026-06-09 10:02:21 -04:00
bfafdd46b2 fix(sdk): resolve multi-word display names and add NIP-27 nostr:npub mention extraction (#905)
Signed-off-by: npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7 <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7 <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@sprout-oss.stage.blox.sqprod.co>
2026-06-08 19:05:37 -04:00
15f610dcd5 fix(desktop): re-enable mcp_command reconciliation and harden spawn site (#909)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: Duncan <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@sprout-oss.stage.blox.sqprod.co>
2026-06-08 13:54:42 -07:00
klopez4212andGitHub da80c7340f Fix desktop DM and sidebar UI polish (#908) 2026-06-08 21:04:20 +01:00
klopez4212andGitHub dd08f988de Animate reaction counts (#904) 2026-06-08 10:47:24 -07:00
10b6674bd7 Mobile custom emoji + settings redesign (#906)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: Pinky <44b8e82baa6e0e254e0208d68f335c283c94e7b78dd1fa10d5a49d3f13dd0435@sprout-oss.stage.blox.sqprod.co>
2026-06-08 10:28:32 -07:00
732e23dd5c Renew TTL when unarchiving ephemeral channels (#902)
Signed-off-by: npub1mprnacetjua2xx3p5eddmhxyk6wv929ymm5py8kd2xfxurxahspqqlgyta <d8473ee32b973aa31a21a65adddcc4b69cc2a8a4dee8121ecd51926e0cddbc02@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: npub1mprnacetjua2xx3p5eddmhxyk6wv929ymm5py8kd2xfxurxahspqqlgyta <d8473ee32b973aa31a21a65adddcc4b69cc2a8a4dee8121ecd51926e0cddbc02@sprout-oss.stage.blox.sqprod.co>
2026-06-08 12:43:39 -04:00
WesandGitHub d8278f7588 chore(release): release version 0.3.13 (#903) v0.3.13 2026-06-08 09:36:16 -07:00
klopez4212andGitHub ecca5e77e4 Collapse channel header actions (#901) 2026-06-08 16:18:11 +00:00
4ec7f8125e sprout-agent: make Databricks defaults env-only (#868)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Pinky <44b8e82baa6e0e254e0208d68f335c283c94e7b78dd1fa10d5a49d3f13dd0435@sprout-oss.stage.blox.sqprod.co>
2026-06-08 09:17:30 -07:00
klopez4212andGitHub b384354e2b Restyle settings sections (#894) 2026-06-08 14:59:26 +00:00
klopez4212andGitHub fdcbb696fe Add emoji reaction particles (#890) 2026-06-08 07:37:47 -07:00
klopez4212andGitHub 32039b9a25 Move settings into the app shell (#893) 2026-06-08 07:23:11 -07:00
klopez4212andGitHub 45f3dfe5ba Tune chat text sizing (#891) 2026-06-08 07:13:22 -07:00
klopez4212andGitHub 29f6ccf9e9 Style channel header navigation (#889) 2026-06-08 07:03:06 -07:00
tlongwell-blockandGitHub 2ebe551741 fix: rename missed known_acp_provider_exact → known_acp_runtime_exact (#900) 2026-06-08 09:29:12 -04:00
renovate[bot]GitHubrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
97bdb79ded chore(deps): update radix-ui-primitives monorepo (#898)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-07 22:32:11 -04:00
renovate[bot]GitHubrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
4a93100e19 chore(deps): update actions/checkout digest to df4cb1c (#897)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-07 22:31:08 -04:00
Will PflegerandGitHub 0a6067ca1b refactor: rename ACP "provider" to "runtime" across the codebase (#783) 2026-06-07 14:40:59 -04:00
klopez4212andGitHub 056b87d3da Unify avatar radius (#892) 2026-06-07 09:41:15 -04:00
WesandGitHub 9bbb85b439 chore(release): release version 0.3.12 (#886) v0.3.12 2026-06-05 21:17:01 +00:00
1b7b6978fc Show hover cards for inline message emoji (#885)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Pinky <44b8e82baa6e0e254e0208d68f335c283c94e7b78dd1fa10d5a49d3f13dd0435@sprout-oss.stage.blox.sqprod.co>
2026-06-05 14:01:06 -07:00
5268fac2d8 Fix monotonic read-state merges (#884)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Pinky <44b8e82baa6e0e254e0208d68f335c283c94e7b78dd1fa10d5a49d3f13dd0435@sprout-oss.stage.blox.sqprod.co>
2026-06-05 14:00:50 -07:00
klopez4212andGitHub 0a4783c6f8 Refine sidebar behavior and borders (#869) 2026-06-05 14:00:37 -07:00