Commit Graph
1204 Commits
Author SHA1 Message Date
npub1223z34hd7vtwc6qj4s7flsxkj644nlre2nthu7lrrmkumhu3xddsrx9r6wandTaylor Ho c192485e95 fix(desktop): clarify saved-template delete confirmation copy
Title now names the template ("Delete Ned template?") and the body
spells out that only the saved template is removed — agents created
from it, and the agent it was saved from, are unaffected.

Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
2026-07-07 01:12:30 -07:00
npub1223z34hd7vtwc6qj4s7flsxkj644nlre2nthu7lrrmkumhu3xddsrx9r6wandTaylor Ho e686f14407 test(desktop): cover agent-template listing, save upsert, and inbound echoes
Extract the pure cores of list_agent_templates (assemble_agent_templates)
and save_agent_as_template (upsert_template_persona) — behavior unchanged —
and pin them with unit tests: listing filters inactive and builtin-shadow
records and sorts saved templates case-insensitively after built-ins;
saving with an existing name updates the record in place (identity,
created_at, and stored env_vars preserved) instead of duplicating; a fresh
insert never carries credentials; and inactive or team-sourced records with
the same name are never hijacked. Also pin that an inbound persona echo
cannot resurrect a locally deactivated record — is_active is not a
projected field, so a stale relay echo leaves the local flag untouched.

Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
2026-07-03 14:05:05 -07:00
npub1223z34hd7vtwc6qj4s7flsxkj644nlre2nthu7lrrmkumhu3xddsrx9r6wandTaylor Ho d3d24c86ab feat(desktop): delete saved templates from the New Agent catalog
Save as template had no inverse: a saved template could never be removed
from the catalog. Add a Delete affordance to CreateAgentStartDialog for
saved templates — an outline button next to Use template, gated behind a
confirm AlertDialog matching TeamDeleteDialog. Deletion drives the
previously-unused useDeletePersonaMutation, which now also invalidates
agentTemplatesQueryKey so the catalog drops the row immediately; backend
validation errors (e.g. record still referenced by a team) surface in the
detail pane.

Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
2026-07-03 14:04:46 -07:00
npub1223z34hd7vtwc6qj4s7flsxkj644nlre2nthu7lrrmkumhu3xddsrx9r6wandTaylor Ho 99534b5d6f fix(desktop): refresh the agent-template catalog on inbound relay sync
The agent-templates query pins staleTime: Infinity, so a saved template
created, edited, or tombstoned on another device never reached the New
Agent catalog until app restart. Invalidate agentTemplatesQueryKey in the
agents-data-changed listener alongside the other relay-backed queries.

Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
2026-07-03 14:04:26 -07:00
Taylor Ho 28ca228e19 fix(desktop): unblock UI freeze when entering the create-agent details step
Clicking "Blank agent" or "Use template" froze the entire webview until
runtime discovery finished. The details dialog opens immediately, but on
mount it fires three Tauri commands that were synchronous — and Tauri 2
runs sync commands on the main thread, so the UI blocked while login
shells resolved each agent binary.

- desktop/src-tauri/src/commands/agent_discovery.rs: make
  discover_acp_providers and discover_managed_agent_prereqs async and
  move their shell-spawning work into tokio::task::spawn_blocking so
  the main thread never blocks; both now return Result to surface a
  panicked task instead of unwrapping
- desktop/src-tauri/src/commands/agent_providers.rs: same treatment
  for discover_backend_providers, which scans every PATH directory on
  disk for buzz-backend-* binaries
- desktop/src/features/agents/ui/CreateAgentDialog.tsx: show a spinner
  in the submit button while discovery is pending, so the disabled
  button reads as "loading" rather than broken

No frontend API changes needed — invokeTauri handles the Result return
transparently. Also fixes the same freeze anywhere these queries fire
(Edit Agent, Add Channel Bot, Settings > Doctor).

Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
2026-07-03 02:19:45 -07:00
Taylor Ho 9c71264b4e feat(desktop): personas as catalog templates — unwind boot-time agent minting
Agents are now only ever minted explicitly through the Create Agent
wizard. Personas surface exclusively inside the New Agent catalog as
"saved templates" instead of rendering as cards on the Agents grid.

Remove the flatten/materialization migration:
- Delete managed_agents/flatten.rs and flatten_tests.rs — the boot-time
  migration minted a fresh keypair for every active persona with no
  linked agent, but keyed dedup on the persona_id link it erased itself,
  so relay persona echoes from other builds (dev vs release, d-tag
  drift) re-minted duplicate agents on every launch on both sides
- Remove the flatten_personas_into_agents boot hookup in lib.rs
- Remove materialize_pack_agents_locked from team pack install/sync in
  commands/teams.rs — installing a pack now lands its personas in the
  catalog without minting agents

Catalog = built-ins + saved templates:
- list_agent_templates merges static built-ins with active persona
  records (store lock held, spawn_blocking), skipping records that
  shadow a built-in id and sorting saved entries by display name
- AgentTemplate gains provider and source ("builtin" | "saved") on both
  the Rust struct and the TS type; templateAgentDraft carries provider
  through to the create form prefill
- CreateAgentStartDialog renders saved templates under a "Saved"
  sidebar group; detail pane labels the type accordingly

"Save as template" on minted agents:
- New save_agent_as_template Tauri command maps an agent's pinned
  config (name, instructions, avatar, runtime, model, provider — never
  env_vars) onto a persona record; re-saving the same name updates the
  existing template instead of duplicating; retained as kind:30175
  pending relay sync so templates reach other devices
- AgentActionsMenu gains a "Save as template" entry wired through
  UnifiedAgentsSection/AgentsView with success toast and
  agent-templates/personas query invalidation

Tests:
- e2eBridge mocks the merged template list and save_agent_as_template
- agents.spec.ts covers the new menu entry and the save-as-template →
  Saved group → detail pane flow
- Stale flatten references in persona/teams test comments cleaned up

873 Tauri unit tests, 69 Playwright tests, and the full just ci gate
pass.

Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
2026-07-03 01:36:09 -07:00
Taylor Ho b36f727996 feat(desktop): catalog-style chooser for the create-agent wizard's first step
Restores the old Agent Catalog layout (PersonaCatalogDialog, removed in
24ff2034) for the New agent starting-point step, replacing the flat grid
of cards with a sidebar list + detail preview.

- CreateAgentStartDialog.tsx: rebuilt on ChooserDialogContent (h-168 /
  max-w-4xl, bg-sidebar header). The left sidebar keeps "Blank agent"
  and "Import from file" as immediate actions with their existing
  testids, above a Templates list; clicking a template now selects it
  for preview instead of advancing straight to the form. The right pane
  shows the selected template's avatar, name, the Type / Preferred
  model / Preferred runtime meta group, and the system prompt rendered
  as non-interactive Markdown, with a floating "Use template" confirm
  button (create-agent-start-use-template) over a gradient that hands
  the template to the details step. Selection defaults to the first
  template on open, list/detail skeletons cover loading, and the
  drag-and-drop import overlay + hidden file input carry over from the
  grid version. Props are unchanged so AgentsView needed no edits.
  Tailwind classes use the current v4 lint forms (h-168, bg-linear-to-t)
  instead of the old catalog's literals
- agents.spec.ts: the two template-selection tests click the template
  row and then the new confirm button; blank/import flows in the other
  suites are unchanged (all four affected suites pass)

Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
2026-07-02 23:08:06 -07:00
Taylor Ho 4461c70074 test(desktop): update Playwright specs for the agents-first flows
- agents.spec.ts: rewritten around the new surface — wizard starting
  points (blank / import / template), template prefill and submit,
  duplicate prefill, agent card actions menu, team creation with agent
  members, and the inactive-persona / team-referenced-persona guards via
  the mock bridge
- mesh-compute.spec.ts, smoke.spec.ts: replace the retired
  "New agent > Custom agent" menu path with the wizard's blank starting
  point; the system prompt now fills the top-level agent-instructions
  field instead of the Advanced section
- persona-env-vars.spec.ts: env-vars editor and model/provider tests
  target the create-agent form (agent-runtime / agent-llm-provider ids)
- onboarding.spec.ts: the Fizz welcome guide is identified by name — no
  persona_id backing record anymore
- config-bridge-screenshots.spec.ts: provenance copy is now
  "Inherited from agent profile"

Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
2026-07-02 22:40:29 -07:00
Taylor Ho 24ff20349b feat(desktop): remove personas from the UI — flat agents grid, create-agent wizard, teams pick agents
Agents are now the only concept users touch. Persona records remain a
pack-internal primitive; nothing in the UI creates, lists, or edits them.

- Agents grid: UnifiedAgentsSection renders one card per managed agent in
  a single flat grid with a new AgentActionsMenu (Edit, Duplicate, Add to
  channel, Export, Remove). Persona-keyed grouping, persona cards, and
  the persona profile-panel path are deleted (unifiedAgentGroups,
  AgentGroupRows, ManagedAgentRow, PersonaActionsMenu, PersonaIdentity,
  PersonaCatalog*, PersonaLibraryEntryPoints, usePersonaActions, and the
  persona dialog state helpers)
- Create Agent wizard: new CreateAgentStartDialog (blank, built-in
  template, or import from file) hands an AgentDraft to CreateAgentDialog;
  submit only creates a managed agent — no persona record. PersonaDialog
  is gone; batch import creates agents directly; the system prompt is a
  top-level "Agent instructions" field with model/provider fields shared
  via AgentModelProviderFields
- Duplicate opens the wizard prefilled from the source agent record's
  pinned fields (prompt, model, provider, env vars, avatar, runtime)
- Teams: TeamDialog picks managed agents and stores pubkeys via the
  unified TeamCardMember model (pack persona members render read-only);
  TeamsSection, import/export, and AddTeamToChannelDialog resolve members
  from agent_pubkeys plus pack persona_ids, deploying pack personas
  through the existing persona path
- Channel deploy: AddChannelBotDialog lists managed agents
  (AddChannelBotAgentsSection + useInChannelAgentPubkeys) and attaches
  existing agents instead of spawning persona instances; QuickBotBar and
  the persona section/runtime-override helpers are deleted. The dialog
  also prevents open-autofocus: focus landing on the first agent chip
  opened its tooltip, so the first Escape dismissed the tooltip layer
  instead of closing the dialog
- Sharing: PersonaShareDialog, catalog-visibility localStorage, and the
  standalone catalog dialog are removed — Export in the card menu is the
  sharing path
- Copy sweep: remaining user-visible "persona" strings renamed (config
  provenance is "Inherited from agent profile", delete/import/toast copy,
  ModelPicker, EnvVarsEditor); profile panel actions are agent-centric
  and the profilePersona route param is gone; channel templates resolve
  agent pubkeys, persona ids, or builtin template ids polymorphically;
  the Fizz welcome guide spawns from its AgentTemplate
- shared/api: AgentTemplate type, agentPubkeys on team types, provider on
  CreateManagedAgentInput, listAgentTemplates/exportAgentToJson bindings;
  e2eBridge mocks the new surface for the Playwright suites; colocated
  unit tests (.test.mjs) updated alongside their sources

Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
2026-07-02 22:40:05 -07:00
Taylor Ho ce88863d78 feat(desktop): agents own their config — team agent members, flattening migration, built-in templates (Tauri)
Backend half of removing personas from the UI. User-created agents no
longer have a backing persona record; persona records are quarantined to
team packs, which genuinely need them for directory install/sync and
writeback.

- types.rs, team_events.rs: add agent_pubkeys to TeamRecord, the
  create/update team inputs, and the kind:30176 payload. The field is
  additive — events published by older clients parse with empty agent
  membership (round-trip and tolerance tests included)
- commands/teams.rs: normalize and validate agent pubkeys on team
  create/update; team export resolves agent members into the interchange
  member shape alongside persona members; pack install/sync materialize
  pack personas as stopped agents so they appear in the grid immediately
- commands/personas/mod.rs: inbound kind:30176 reconcile applies
  agent_pubkeys from remote events
- managed_agents/flatten.rs (new): idempotent boot migration —
  materialize a stopped agent for every active persona without one,
  rewrite non-pack team persona members to agent pubkeys, pin persona
  config onto linked agents and clear persona_id, then deactivate the
  flattened non-pack personas (records stay on disk/relay for rollback).
  flatten_tests.rs covers materialization, team rewrite, pack
  quarantine, and re-run idempotency
- managed_agents/personas.rs: stop seeding built-in personas as records;
  the same data is now a static AgentTemplate list, and merge_personas
  only demotes stale is_builtin flags
- commands/agent_templates.rs (new): list_agent_templates and
  export_agent_to_json — agent-record export to the .persona.json
  interchange format (env vars excluded, matching persona export)
- commands/agents.rs: create_managed_agent accepts an explicit provider
  so templates and duplicates can pin the LLM provider at create time
- lib.rs: run the flatten migration post-identity, before event sync, so
  rewritten teams/personas are what get reconciled and published;
  register the new template commands
- team_repair.rs, personas/writeback.rs, inbound_tests.rs,
  personas/tests.rs: fixtures and merge-semantics tests updated for the
  new fields and the removal of built-in seeding; the shared test UUID
  constant avoids a digit run the secret scanner reads as a card number

Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
2026-07-02 22:39:27 -07:00
Taylor Ho b38a412345 chore(desktop): clear pre-existing clippy failures in the Tauri crate
These predate the agents-first work but fail desktop-tauri-clippy
(-D warnings) and therefore block `just ci`, so they land first as a
standalone mechanical cleanup.

- agent_models.rs: drop the vestigial preserve_first_separator parameter
  from title_case_model_suffix — both branches were identical
  (if_same_then_else)
- config_bridge/claude.rs: build RuntimeFileConfig via struct-literal
  init in the test helper (field_reassign_with_default)
- config_bridge/reader.rs: annotate build_model_field with
  too_many_arguments and resolve_with_override with type_complexity —
  pre-existing shapes, allowed rather than refactored to keep this
  change mechanical
- runtime.rs: use slice::contains instead of iter().any
  (manual_contains)

Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
2026-07-02 22:37:20 -07:00
228122fddc Add agent catalog modal (#1302)
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: npub1223z34hd7vtwc6qj4s7flsxkj644nlre2nthu7lrrmkumhu3xddsrx9r6w <52a228d6edf316ec6812ac3c9fc0d696ab59fc7954d77e7be31eedcddf91335b@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
2026-07-02 16:26:31 -07:00
e70dd1a1e7 fix(desktop): actually close relay sockets — plugin:websocket|disconnect does not exist (#1481)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co>
2026-07-02 22:55:53 +00:00
3e282a2418 feat(buzz-agent): config parity — thinking effort, model switching, normalized token limits (#1470)
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
Co-authored-by: npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7 <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@sprout-oss.stage.blox.sqprod.co>
2026-07-02 22:52:38 +00:00
f9d06ae21a fix(sidebar): scope channel sections storage to relay URL (#1477)
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
Co-authored-by: npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7 <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@sprout-oss.stage.blox.sqprod.co>
2026-07-02 17:38:55 -04:00
453b8b1e47 chore(mobile): declare non-exempt encryption usage in Info.plist (#1474)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 13:24:08 -07:00
d369ca9df1 fix(desktop): bind channel and thread context at compose time to prevent wrong-channel send (#1472)
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
Co-authored-by: npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7 <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@sprout-oss.stage.blox.sqprod.co>
2026-07-02 20:15:44 +00:00
02ff06cac2 fix(relay-reconnect): resilient reconnect with fast-path, escalation, and polling (#1456)
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
Co-authored-by: npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7 <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@sprout-oss.stage.blox.sqprod.co>
2026-07-02 19:30:24 +00:00
5bfd5ca270 feat: per-community workspace icon set by admins, served via NIP-11 (#1463)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co>
2026-07-02 11:58:42 -07:00
01b92faa15 perf(relay): batch outbound websocket data frames (#1464)
Signed-off-by: Tyler Longwell <tlongwell@block.xyz>
Co-authored-by: npub1mprnacetjua2xx3p5eddmhxyk6wv929ymm5py8kd2xfxurxahspqqlgyta <d8473ee32b973aa31a21a65adddcc4b69cc2a8a4dee8121ecd51926e0cddbc02@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: Tyler Longwell <tlongwell@block.xyz>
2026-07-02 14:32:20 -04:00
835302cc82 Make reaction ingest atomic (#1458)
Signed-off-by: npub1t2tgm7d8f995uqvmnm8h88sg3wnpp9a5xysjf6dg3tjmgt3ltulqdp8ehr <5a968df9a7494b4e019b9ecf739e088ba61097b4312124e9a88ae5b42e3f5f3e@sprout-oss.stage.blox.sqprod.co>
Signed-off-by: Tyler Longwell <tlongwell@block.xyz>
Co-authored-by: npub1t2tgm7d8f995uqvmnm8h88sg3wnpp9a5xysjf6dg3tjmgt3ltulqdp8ehr <5a968df9a7494b4e019b9ecf739e088ba61097b4312124e9a88ae5b42e3f5f3e@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: Tyler Longwell <tlongwell@block.xyz>
2026-07-02 14:32:08 -04:00
3c661fb48f Serialize fan-out EVENT frames once (#1459)
Signed-off-by: npub12gtutshhh76rx0jx697f32f9tffd4hhp3hx58fp4x6u4uemkm7sqf8f757 <5217c5c2f7bfb4333e46d17c98a9255a52dadee18dcd43a43536b95e6776dfa0@sprout-oss.stage.blox.sqprod.co>
Signed-off-by: Tyler Longwell <tlongwell@block.xyz>
Co-authored-by: npub12gtutshhh76rx0jx697f32f9tffd4hhp3hx58fp4x6u4uemkm7sqf8f757 <5217c5c2f7bfb4333e46d17c98a9255a52dadee18dcd43a43536b95e6776dfa0@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: Tyler Longwell <tlongwell@block.xyz>
2026-07-02 14:31:47 -04:00
d9c4e4aa7f fix: agent reliability — no restart on channel-add, visible dead-letter notice (#1468)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co>
2026-07-02 11:16:50 -07:00
c48006fc3e fix(profile): consolidate agent profile runtime metadata (#1451)
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: npub1223z34hd7vtwc6qj4s7flsxkj644nlre2nthu7lrrmkumhu3xddsrx9r6w <52a228d6edf316ec6812ac3c9fc0d696ab59fc7954d77e7be31eedcddf91335b@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: npub14vtk7pvazqrq9639qu7e560wnqtl0d53ca4gjuvq6jzf3k2el23qqlwa7f <ab176f059d100602ea25073d9a69ee9817f7b691c76a897180d48498d959faa2@sprout-oss.stage.blox.sqprod.co>
2026-07-02 10:13:15 -07:00
e42dae3f9c fix(desktop): simplify workspace rail badges (#1462)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Pinky <44b8e82baa6e0e254e0208d68f335c283c94e7b78dd1fa10d5a49d3f13dd0435@sprout-oss.stage.blox.sqprod.co>
2026-07-02 08:45:57 -07:00
deb3e6adca perf(desktop): instant channel switching — non-blocking first paint, persisted snapshots (#1452)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co>
2026-07-02 08:45:38 -07:00
a9e752e254 perf(relay): bounded-concurrency multi-filter query execution (S2) (#1457)
Signed-off-by: Tyler Longwell <tlongwell@block.xyz>
Co-authored-by: npub1qyvc0c5kl4gqv2fd97fsk46tu378sqgy35vc83rvgfwne90sel7s0ed67d <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: Tyler Longwell <tlongwell@block.xyz>
2026-07-02 11:18:49 -04:00
9967b97f59 fix(desktop): classify timeline prepends so history loads don't bump unread (#1416)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Pinky <44b8e82baa6e0e254e0208d68f335c283c94e7b78dd1fa10d5a49d3f13dd0435@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co>
2026-07-02 07:49:06 -07:00
b779a3ee2f fix(desktop): quiet gate for workspace switches instead of boot splash (#1449)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co>
2026-07-02 07:46:20 -07:00
7da936fff8 fix(read-path): reach complete threads, dense-second timelines, and all people in the GUI (#1418)
Signed-off-by: Tyler Longwell <tlongwell@block.xyz>
Co-authored-by: npub12gtutshhh76rx0jx697f32f9tffd4hhp3hx58fp4x6u4uemkm7sqf8f757 <5217c5c2f7bfb4333e46d17c98a9255a52dadee18dcd43a43536b95e6776dfa0@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: Tyler Longwell <tlongwell@block.xyz>
Co-authored-by: npub1qyvc0c5kl4gqv2fd97fsk46tu378sqgy35vc83rvgfwne90sel7s0ed67d <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@sprout-oss.stage.blox.sqprod.co>
2026-07-02 10:36:11 -04:00
a504ad6197 E1+E3: reduce relay ingest/fan-out DB round trips; ack p99 −7–16%, fd p99 −6–28%, p999 tails −29–53% vs PR #1453 tip (#1454)
Signed-off-by: Tyler Longwell <tlongwell@block.xyz>
Co-authored-by: npub1qyvc0c5kl4gqv2fd97fsk46tu378sqgy35vc83rvgfwne90sel7s0ed67d <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: Tyler Longwell <tlongwell@block.xyz>
2026-07-02 09:09:09 -04:00
7bd3760c82 perf(relay): defer post-commit dispatch and avoid verify clone (#1453)
Signed-off-by: npub12gtutshhh76rx0jx697f32f9tffd4hhp3hx58fp4x6u4uemkm7sqf8f757 <5217c5c2f7bfb4333e46d17c98a9255a52dadee18dcd43a43536b95e6776dfa0@sprout-oss.stage.blox.sqprod.co>
Signed-off-by: Tyler Longwell <tlongwell@block.xyz>
Co-authored-by: npub12gtutshhh76rx0jx697f32f9tffd4hhp3hx58fp4x6u4uemkm7sqf8f757 <5217c5c2f7bfb4333e46d17c98a9255a52dadee18dcd43a43536b95e6776dfa0@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: npub1qyvc0c5kl4gqv2fd97fsk46tu378sqgy35vc83rvgfwne90sel7s0ed67d <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: Tyler Longwell <tlongwell@block.xyz>
2026-07-02 08:46:25 -04:00
thomaspblockandGitHub 88c089d3b6 fix(relay): include git hook tools in runtime image (#1326)
Signed-off-by: Thomas Petersen <thomasp@squareup.com>
2026-07-01 21:12:21 -04:00
c88799ac6c feat(chart): per-pod emptyDir git scratch when persistence disabled (multi-replica HA) (#1450)
Signed-off-by: Tyler Longwell <tlongwell@block.xyz>
Co-authored-by: npub1qyvc0c5kl4gqv2fd97fsk46tu378sqgy35vc83rvgfwne90sel7s0ed67d <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: Tyler Longwell <tlongwell@block.xyz>
chart-v0.1.2
2026-07-01 19:55:34 -04:00
0701f47f4a fix(relay): remove media bearer-token auth (#1444)
Signed-off-by: npub12gtutshhh76rx0jx697f32f9tffd4hhp3hx58fp4x6u4uemkm7sqf8f757 <5217c5c2f7bfb4333e46d17c98a9255a52dadee18dcd43a43536b95e6776dfa0@sprout-oss.stage.blox.sqprod.co>
Signed-off-by: Tyler Longwell <tlongwell@block.xyz>
Co-authored-by: npub12gtutshhh76rx0jx697f32f9tffd4hhp3hx58fp4x6u4uemkm7sqf8f757 <5217c5c2f7bfb4333e46d17c98a9255a52dadee18dcd43a43536b95e6776dfa0@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: npub1qyvc0c5kl4gqv2fd97fsk46tu378sqgy35vc83rvgfwne90sel7s0ed67d <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: Tyler Longwell <tlongwell@block.xyz>
2026-07-01 19:25:24 -04:00
15ad7ae87e fix(desktop): stop search shortcut from hijacking the sidebar (#1447)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co>
2026-07-01 15:53:25 -07:00
Will PflegerandGitHub 89c4f76579 fix(ci): set PGSCHEMA_PLAN_* in start-relay-for-tests.sh to avoid embedded-PG fetch (#1443)
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
2026-07-01 16:57:56 -04:00
fec7684366 feat(desktop): restore observer-feed regressions from #1381 and classify 4 new session/update types (#1412)
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
Co-authored-by: npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7 <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@sprout-oss.stage.blox.sqprod.co>
2026-07-01 16:33:26 -04:00
bdeab23b59 fix(desktop): disable spellcheck/autocorrect/autocapitalize on emoji picker search (#1438)
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
Co-authored-by: npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7 <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@sprout-oss.stage.blox.sqprod.co>
2026-07-01 16:23:55 -04:00
b1d9d955de feat(relay): add OpenTelemetry tracing, keep Prometheus metrics (#1398)
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
Co-authored-by: npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7 <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@sprout-oss.stage.blox.sqprod.co>
2026-07-01 16:05:59 -04:00
9f2a11b338 feat(buzz-agent): emit agent_thought_chunk for reasoning content (#1436)
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
Co-authored-by: npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7 <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@sprout-oss.stage.blox.sqprod.co>
2026-07-01 14:57:05 -04:00
e5aa4a2132 feat(git): move repo-name registry to Postgres + relax RWM chart gate (HA relay) (#1432)
Signed-off-by: Tyler Longwell <tlongwell@block.xyz>
Co-authored-by: npub1qyvc0c5kl4gqv2fd97fsk46tu378sqgy35vc83rvgfwne90sel7s0ed67d <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: Tyler Longwell <tlongwell@block.xyz>
2026-07-01 14:50:18 -04:00
WesandGitHub b32db5e0fd chore(release): release Buzz Desktop version 0.3.41 (#1435) v0.3.41 2026-07-01 12:46:57 -06:00
323a86ade8 fix(desktop): sort reaction pills by earliest created_at ascending (#1434)
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
Co-authored-by: npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7 <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@sprout-oss.stage.blox.sqprod.co>
2026-07-01 14:28:58 -04:00
klopez4212andGitHub 3d08c3b02b Group consecutive desktop messages (#1429) 2026-07-01 18:13:22 +00:00
klopez4212andGitHub db2a970115 Update Buzz app icon (#1430) 2026-07-01 10:58:43 -07:00
ce1f13e8f7 feat(desktop): add workspace rail unread observer (#1428)
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-07-01 10:55:30 -07:00
8fb33bdbca Prioritize channel members in mention autocomplete (#1431)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Pinky <44b8e82baa6e0e254e0208d68f335c283c94e7b78dd1fa10d5a49d3f13dd0435@sprout-oss.stage.blox.sqprod.co>
2026-07-01 10:54:32 -07:00
klopez4212andGitHub 6a08a3f4c8 Tighten message density (#1426) 2026-07-01 16:50:50 +01:00
klopez4212andGitHub c0e10d67e0 Tighten sidebar section actions (#1424) 2026-07-01 15:22:09 +00:00