npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7
56c68b2e35
fix(desktop): drop env_vars from public PersonaEventContent
...
The kind:30175 content body is published unencrypted, so carrying env_vars there leaked any secrets a persona held (API keys, tokens) in plaintext to every relay and reader. Per NIP-AP, persona events are public configuration; secrets travel only via the NIP-44-encrypted mem/persona engram. persona_from_event now returns an empty env_vars map; engram instantiation is the sole secret path.
Co-authored-by: Will Pfleger <pfleger.will@gmail.com >
Signed-off-by: Will Pfleger <pfleger.will@gmail.com >
2026-06-10 14:24:39 -04:00
npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7
a2e9c8c077
fix(desktop): sign every migrated persona event and drop the sentinel file
...
The persona-event migration stored synthetic placeholder events (zero
pubkey/sig, non-hex id) whenever signing keys were unavailable, producing
retention rows that fail event parsing and signature verification — the
read path would silently skip every such persona. It also tracked
idempotency with a migration_state.json sentinel that was written even on
partial failure and reset pending_sync on every boot if the write failed.
Migration now takes the owner's resolved Keys and runs after
resolve_persisted_identity, so every retained row is a real signed event;
the no-keys branch is gone. Idempotency keys on whether the retention
store already holds rows for the owner pubkey — the data is the sentinel.
Core logic is extracted into migrate_personas_in_dir for unit testing.
Co-authored-by: Will Pfleger <pfleger.will@gmail.com >
Signed-off-by: Will Pfleger <pfleger.will@gmail.com >
2026-06-10 10:27:44 -04:00
npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7
3c6cd9c3f0
feat(desktop): add persona event kind with client publish/read/retain
...
Implements the foundation for personas-as-events architecture:
- Define KIND_PERSONA (30175) as NIP-33 parameterized replaceable,
keyed by (pubkey, kind, d_tag) where d_tag is the plaintext persona
slug. Relay allowlists the kind under UsersWrite scope and marks it
global-only (never channel-scoped).
- Client-side serialization: PersonaRecord ↔ kind:30175 event with
JSON content body. Publish and fetch functions via relay HTTP API.
- SQLite retention store: local durable storage for persona events
enabling offline boot. INSERT OR REPLACE on (kind, pubkey, d_tag)
for NIP-33 latest-wins semantics. Pending-sync queue for deferred
relay publish.
- Migration: on first launch after upgrade, non-builtin personas from
personas.json are serialized as events and written to the retention
store with pending_sync=1. Idempotent via sentinel file. Runs after
the packs→teams migration.
The existing load_personas path is unchanged — retention-based loading
is wired up as a helper for PR 2 (instantiation flow) to activate.
Co-authored-by: Will Pfleger <pfleger.will@gmail.com >
Signed-off-by: Will Pfleger <pfleger.will@gmail.com >
2026-06-10 00:17:51 -04:00
Wes
e08937cdde
Fix emoji message rendering ( #938 )
...
Signed-off-by: Wes <wesbillman@users.noreply.github.com >
Co-authored-by: Pinky <44b8e82baa6e0e254e0208d68f335c283c94e7b78dd1fa10d5a49d3f13dd0435@sprout-oss.stage.blox.sqprod.co >
2026-06-09 20:52:37 -07:00
Will Pfleger
ba2fdbf697
refactor(desktop): consolidate packs into teams ( #852 )
2026-06-09 23:22:34 -04:00
Wes
98aa535935
chore(release): release version 0.3.15 ( #936 )
2026-06-09 18:02:31 -07:00
Wes
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
Will Pfleger
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
Will Pfleger
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 Pfleger
9a98e60fc2
feat: provider/model selection for personas and runtime-aware env injection ( #794 )
2026-06-09 20:42:27 +00:00
Will Pfleger
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
klopez4212
5d927aba0c
Revamp first-run onboarding ( #924 )
2026-06-09 19:47:52 +01:00
klopez4212
f362650195
Update setup loading screen ( #926 )
2026-06-09 18:27:54 +01:00
Wes
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
klopez4212
4dfae61f24
Maximize desktop window on launch ( #925 )
2026-06-09 18:08:37 +01:00
Taylor Ho
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
Wes
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
Wes
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
Wes
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-block
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
Wes
d099866ace
chore(release): release version 0.3.14 ( #916 )
2026-06-09 07:43:02 -07:00
Will Pfleger
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
Wes
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
klopez4212
da80c7340f
Fix desktop DM and sidebar UI polish ( #908 )
2026-06-08 21:04:20 +01:00
klopez4212
dd08f988de
Animate reaction counts ( #904 )
2026-06-08 10:47:24 -07:00
Wes
d8278f7588
chore(release): release version 0.3.13 ( #903 )
2026-06-08 09:36:16 -07:00
klopez4212
ecca5e77e4
Collapse channel header actions ( #901 )
2026-06-08 16:18:11 +00:00
Wes
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
klopez4212
b384354e2b
Restyle settings sections ( #894 )
2026-06-08 14:59:26 +00:00
klopez4212
fdcbb696fe
Add emoji reaction particles ( #890 )
2026-06-08 07:37:47 -07:00
klopez4212
32039b9a25
Move settings into the app shell ( #893 )
2026-06-08 07:23:11 -07:00
klopez4212
45f3dfe5ba
Tune chat text sizing ( #891 )
2026-06-08 07:13:22 -07:00
klopez4212
29f6ccf9e9
Style channel header navigation ( #889 )
2026-06-08 07:03:06 -07:00
tlongwell-block
2ebe551741
fix: rename missed known_acp_provider_exact → known_acp_runtime_exact ( #900 )
2026-06-08 09:29:12 -04:00
Will Pfleger
0a6067ca1b
refactor: rename ACP "provider" to "runtime" across the codebase ( #783 )
2026-06-07 14:40:59 -04:00
klopez4212
056b87d3da
Unify avatar radius ( #892 )
2026-06-07 09:41:15 -04:00
Wes
9bbb85b439
chore(release): release version 0.3.12 ( #886 )
2026-06-05 21:17:01 +00:00
Wes
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
Wes
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
klopez4212
0a4783c6f8
Refine sidebar behavior and borders ( #869 )
2026-06-05 14:00:37 -07:00
Will Pfleger
5d7c748969
fix(presence): clear on disconnect, fix heartbeat/TTL, drop broken REST path ( #877 )
2026-06-05 13:28:00 -07:00
Will Pfleger
2f50011bdd
docs(sprout-acp): add communication discipline rules to base prompt + deprecate --mention flag ( #883 )
2026-06-05 15:52:05 -04:00
klopez4212
5c2476a71e
Polish thread summaries and reactions ( #881 )
2026-06-05 20:50:19 +01:00
klopez4212
b84f8e6a01
Polish message row hover states ( #880 )
2026-06-05 20:32:35 +01:00
Wes
bc53008676
Improve emoji naming and custom emoji UX ( #878 )
...
Signed-off-by: Wes <wesbillman@users.noreply.github.com >
Co-authored-by: Pinky <44b8e82baa6e0e254e0208d68f335c283c94e7b78dd1fa10d5a49d3f13dd0435@sprout-oss.stage.blox.sqprod.co >
2026-06-05 18:51:46 +00:00
Will Pfleger
f1c672fea5
chore: deprecate sprout-mcp — fill CLI gaps, remove crate and all references ( #850 )
2026-06-05 12:31:52 -04:00
Wes
5bdac0566f
Fix custom emoji status in profile popover ( #874 )
...
Signed-off-by: Wes <wesbillman@users.noreply.github.com >
Co-authored-by: Pinky <44b8e82baa6e0e254e0208d68f335c283c94e7b78dd1fa10d5a49d3f13dd0435@sprout-oss.stage.blox.sqprod.co >
2026-06-05 09:26:13 -07:00
thomaspblock
d4bb7f66e0
fix(desktop): simplify profile popover header ( #853 )
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-05 07:07:12 -07:00
thomaspblock
ccff5464a4
fix(desktop): remove thread comment hover outline ( #861 )
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-05 07:04:59 -07:00
tlongwell-block
ad7ab482eb
feat(desktop): always show channel section search/add buttons ( #856 )
...
Signed-off-by: Tyler Longwell <tlongwell@squareup.com >
2026-06-05 09:32:49 -04:00