Will Pfleger
8cb00b37a3
fix(personas): address code review findings on symlink pack sync
...
Four issues from Thufir's review:
1. Remove mtime short-circuit — directory mtime doesn't change when
files inside subdirectories are edited, so the cache silently
suppressed the most common developer action (editing a .persona.md).
Always call resolve_pack() for correctness.
2. Defer load_managed_agents() to removal path only — restructured
sync_packs_from_dir to take a lazy loader closure. First pass
computes all diffs; managed_agents.json is only read if removals
are detected. Common case (additions/updates only) never touches
the file.
3. Remove double directory scan — eliminated the has_symlinked_packs
pre-scan in the wrapper. sync_packs_from_dir handles the no-symlinks
case naturally in a single read_dir pass.
4. env_vars always empty for pack personas — removed goose_env_vars
sync from UPDATE and ADD paths. Matches import_persona_pack()
behavior; GOOSE_PROVIDER/GOOSE_MODEL are projected at launch time.
2026-06-06 15:07:18 -04:00
Will Pfleger
25536f07c4
feat(personas): sync symlinked pack changes on read
...
When a persona pack is installed as a symlink, edits to the pack source
files are never reflected in the running app — import_persona_pack()
snapshots data into personas.json at install time and all runtime reads
go through that snapshot exclusively.
Add sync_packs_from_dir() / sync_one_pack() (pure, testable) and a thin
sync_symlinked_packs() AppHandle wrapper. The sync step is inserted into
load_personas() after merge_personas(), reusing the existing read →
reconcile → write-back pattern. The frontend's 30s poll on
usePersonasQuery() becomes the refresh trigger with zero new
infrastructure.
Key design decisions:
- Mtime short-circuit: stat the symlink target dir before calling
resolve_pack(). Unchanged mtime = skip. Common case pays one stat()
per symlinked pack instead of a full re-parse.
- Quick pre-scan in the AppHandle wrapper: if no symlinked packs exist,
managed_agents.json is never loaded (Thufir's concern about the hot
path loading two JSON files on every poll).
- Removal safety gate: when a persona is removed from the source pack
but a managed agent still references it by persona_id UUID, deactivate
(is_active = false) rather than delete to avoid orphaning running
agents. managed_agents.json is only loaded when removals are detected.
- Non-symlinked packs are completely unaffected.
- Broken symlinks (canonicalize fails) log a warning and are skipped.
- name_pool is always Vec::new() for pack personas (matches existing
import_persona_pack() behavior).
2026-06-06 14:59:24 -04:00
Wes and GitHub
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
klopez4212 and GitHub
0a4783c6f8
Refine sidebar behavior and borders ( #869 )
2026-06-05 14:00:37 -07:00
Will Pfleger and GitHub
5d7c748969
fix(presence): clear on disconnect, fix heartbeat/TTL, drop broken REST path ( #877 )
2026-06-05 13:28:00 -07:00
Will Pfleger and GitHub
ef98ae942a
fix(cli): publish ephemeral events over WebSocket via sprout-ws-client ( #876 )
2026-06-05 16:26:30 -04:00
Will Pfleger and GitHub
2f50011bdd
docs(sprout-acp): add communication discipline rules to base prompt + deprecate --mention flag ( #883 )
2026-06-05 15:52:05 -04:00
klopez4212 and GitHub
5c2476a71e
Polish thread summaries and reactions ( #881 )
2026-06-05 20:50:19 +01:00
Will Pfleger and GitHub
7129cd6f23
feat(cli): add emoji export and import subcommands ( #882 )
2026-06-05 15:33:31 -04:00
klopez4212 and GitHub
b84f8e6a01
Polish message row hover states ( #880 )
2026-06-05 20:32:35 +01:00
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 and GitHub
581c7e95a9
docs: add ecosystem section to CONTRIBUTING.md, fix stale release info ( #873 )
2026-06-05 12:47:31 -04:00
Will Pfleger and GitHub
031152221b
fix(relay): wire custom filter fields through HTTP bridge ( #864 )
2026-06-05 12:36:22 -04:00
Will Pfleger and GitHub
f1c672fea5
chore: deprecate sprout-mcp — fill CLI gaps, remove crate and all references ( #850 )
2026-06-05 12:31:52 -04:00
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
b295f51c90
fix(agent): gate handoff on provider token usage, not byte estimate ( #821 )
...
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-05 11:52:50 -04:00
cdb7bc27e1
docs: add VISION_MESH.md — the compute-commons vision ( #867 )
...
Signed-off-by: npub1qyvc0c5kl4gqv2fd97fsk46tu378sqgy35vc83rvgfwne90sel7s0ed67d <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@sprout-oss.stage.blox.sqprod.co >
Co-authored-by: npub1qyvc0c5kl4gqv2fd97fsk46tu378sqgy35vc83rvgfwne90sel7s0ed67d <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@sprout-oss.stage.blox.sqprod.co >
2026-06-05 10:41:13 -04:00
d4bb7f66e0
fix(desktop): simplify profile popover header ( #853 )
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-05 07:07:12 -07:00
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 and GitHub
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
Wes and GitHub
baf1f7705f
chore(release): release version 0.3.11 ( #865 )
v0.3.11
2026-06-04 17:34:15 -07:00
Will Pfleger and GitHub
269b35e8de
fix(mobile+desktop): cross-device read state sync + diagnostic logging ( #843 )
2026-06-04 18:55:40 -04:00
3ddfe5fcc2
feat(mobile): star channels (Slack-style favorites) ( #863 )
...
Signed-off-by: Wes <wesbillman@users.noreply.github.com >
Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co >
2026-06-04 15:48:59 -07:00
Will Pfleger and GitHub
36d7dbd7ca
feat: desktop-screenshot skill to stop agents uploading relay media to PRs ( #862 )
2026-06-04 18:35:10 -04:00
c10b4f8f5c
feat(desktop): star channels (Slack-style favorites) ( #860 )
...
Signed-off-by: Wes <wesbillman@users.noreply.github.com >
Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co >
2026-06-04 15:32:28 -07:00
Will Pfleger and GitHub
f748f71268
fix(desktop): handle symlinked persona pack directories ( #859 )
2026-06-04 17:52:36 -04:00
Will Pfleger and GitHub
1fe7bf2872
feat: channel muting for desktop and mobile ( #838 )
2026-06-04 15:53:53 -04:00
tlongwell-block and GitHub
4ead7de463
feat(acp): default SPROUT_ACP_MEMORY to on ( #854 )
...
Signed-off-by: Tyler Longwell <tlongwell@squareup.com >
2026-06-04 15:17:28 -04:00
759e5cd923
fix(desktop): eliminate image-hover layout jump in messages ( #813 )
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-04 09:55:02 -07:00
Wes and GitHub
249bec86cf
chore(release): release version 0.3.10 ( #849 )
v0.3.10
2026-06-04 09:04:52 -07:00
tlongwell-block and GitHub
34ac3ba1d1
fix(desktop): harden relay mesh connect p-tag ( #834 )
2026-06-04 11:50:49 -04:00
b3aefae152
fix(desktop): scroll activity panel to bottom on open ( #848 )
...
Signed-off-by: Wes <wesbillman@users.noreply.github.com >
Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co >
2026-06-04 08:49:15 -07:00
a13691b620
Polish desktop profile menu interactions ( #836 )
...
Signed-off-by: Wes <wesbillman@users.noreply.github.com >
Co-authored-by: Cursor <cursoragent@cursor.com >
Co-authored-by: Wes <wesbillman@users.noreply.github.com >
Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co >
2026-06-04 08:48:57 -07:00
0d9b8148f8
fix(desktop): outline thread hover targets ( #845 )
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-04 08:39:56 -07:00
b3be9ecba7
fix(desktop): keep message actions hover-only ( #844 )
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-04 08:07:36 -07:00
db46c42546
fix(desktop): let inbox composer fill available width ( #841 )
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-04 08:00:03 -07:00
Will Pfleger and GitHub
2a0572c0d8
fix: use immutable commit-SHA URLs in screenshot PR comments ( #842 )
2026-06-03 22:28:11 -04:00
Will Pfleger and GitHub
3b78dc5690
feat(mobile+desktop): two-tier Slack-style app icon badge ( #802 )
2026-06-03 18:16:49 -07:00
0c225f4d7d
chore: simplify file-size check to a flat 1000-line limit ( #839 )
...
Signed-off-by: Wes <wesbillman@users.noreply.github.com >
Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co >
2026-06-03 16:40:33 -07:00
d8b602a359
fix(desktop): robust emoji picker — unify picker + fix custom emoji in editing, status, reactions ( #837 )
...
Signed-off-by: Wes <wesbillman@users.noreply.github.com >
Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co >
2026-06-03 15:13:25 -07:00
Will Pfleger and GitHub
06bc67fd34
feat(desktop): reusable screenshot workflow for agents ( #826 )
...
Signed-off-by: Will Pfleger <wpfleger@block.xyz >
2026-06-03 19:33:56 +00:00
9f0c22a43a
desktop(mesh-llm): let a serving node route a different model ( #833 )
...
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-03 14:30:46 -04:00
Wes and GitHub
b4f8f40333
chore(release): release version 0.3.9 ( #832 )
v0.3.9
2026-06-03 10:45:22 -07:00
82ae85f79a
fix: native arbitrary-file download + image context-menu flash ( #830 )
...
Signed-off-by: Wes <wesbillman@users.noreply.github.com >
Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co >
2026-06-03 09:59:57 -07:00
7797ae77f6
fix(desktop): custom emoji reaction rendering + picker autofocus ( #831 )
...
Signed-off-by: Wes <wesbillman@users.noreply.github.com >
Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co >
2026-06-03 08:53:43 -07:00
33cfc85293
Mesh-LLM v1: relay-gated direct-iroh inference between users (WAN) ( #822 )
...
Signed-off-by: Eva <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@sprout-oss.stage.blox.sqprod.co >
Co-authored-by: npub1qyvc0c5kl4gqv2fd97fsk46tu378sqgy35vc83rvgfwne90sel7s0ed67d <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@sprout-oss.stage.blox.sqprod.co >
Co-authored-by: npub1t2tgm7d8f995uqvmnm8h88sg3wnpp9a5xysjf6dg3tjmgt3ltulqdp8ehr <5a968df9a7494b4e019b9ecf739e088ba61097b4312124e9a88ae5b42e3f5f3e@sprout-oss.stage.blox.sqprod.co >
Co-authored-by: Max <d8473ee32b973aa31a21a65adddcc4b69cc2a8a4dee8121ecd51926e0cddbc02@sprout-oss.stage.blox.sqprod.co >
2026-06-03 10:49:09 -04:00
Wes and GitHub
7c896d339d
chore(release): release version 0.3.8 ( #829 )
v0.3.8
2026-06-02 16:57:08 -07:00
dc6821667d
chore(release): release version 0.3.7 ( #825 )
...
Signed-off-by: Mesh-LLM CI <ci@mesh-llm.local >
Co-authored-by: Mesh-LLM CI <ci@mesh-llm.local >
v0.3.7
2026-06-02 14:56:23 -07:00