Commit Graph

830 Commits

Author SHA1 Message Date
npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7
134e0f75ea feat(desktop): add custom date/time picker to Remind Me Later dialog
Add a "Custom date & time" section below the time presets in the
RemindMeLaterDialog, using native date and time inputs styled with the
existing Input component. The date picker defaults to today and prevents
selecting past dates. A "Set reminder" button creates the reminder at
the user-selected timestamp.

Also extends the screenshot spec to 6 tests: widens the action menu
screenshot clip, adds tests for the reminders panel with active and
fired/overdue reminders, and adds KIND_EVENT_REMINDER mock support to
the e2e bridge for seeding reminder data in tests.

Co-authored-by: Will Pfleger <wpfleger@block.xyz>
Signed-off-by: Will Pfleger <wpfleger@block.xyz>
2026-06-11 15:33:58 -04:00
Will Pfleger
7388a58d76 style: fix biome formatting in AppShell.tsx 2026-06-11 15:32:27 -04:00
Will Pfleger
5b32804829 fix(desktop): add shared animation-wait helper and fix reminders screenshots
Radix UI components animate in via CSS transitions. Playwright's toBeVisible()
resolves mid-animation, producing greyed-out or partially-rendered screenshots.

- Create shared waitForAnimations(page) utility in tests/helpers/animations.ts
- Wire it into screenshot.mjs so the just desktop-screenshot path settles
  animations automatically before capture
- Update reminders-screenshots.spec.ts to call waitForAnimations before every
  page.screenshot(), add clip regions for focused captures
- Update AGENTS.md to reference the shared helper as mandatory

Co-authored-by: Will Pfleger <wpfleger@block.xyz>
Signed-off-by: Will Pfleger <wpfleger@block.xyz>
2026-06-11 15:32:27 -04:00
npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7
16731e4135 test(desktop): add Playwright screenshot spec for reminders UI
Captures 4 screenshots verifying the NIP-ER reminder feature renders
correctly: sidebar nav item, message action menu, time-picker dialog,
and empty reminders panel. Registered in the smoke project.

Co-authored-by: Will Pfleger <wpfleger@squareup.com>
Signed-off-by: Will Pfleger <wpfleger@squareup.com>
2026-06-11 15:32:26 -04:00
npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7
757998cb03 feat(desktop): add NIP-ER reminder UI — create, view, and manage encrypted reminders
Implements the desktop client UI for kind:30300 event reminders (NIP-ER):

- Service layer (reminderService.ts): create, complete, snooze, and cancel
  reminders as individual parameterized-replaceable events with NIP-44
  encrypt-to-self. Each reminder has a random d-tag, not_before timestamp,
  and encrypted content containing the target message reference and optional
  note.

- "Remind me later" action: new menu item in MessageActionBar opens a dialog
  with time presets (30min, 1hr, 3hr, tomorrow 9am, next Monday 9am) and an
  optional note field.

- Reminders panel: accessible from sidebar (Bell icon), shows pending
  reminders grouped by due status (overdue/today/upcoming) with
  complete/snooze/cancel action buttons per row.

- Due-detection: local 60-second interval checks not_before against
  Date.now() and fires toast notifications when reminders become due.
  No relay scheduler dependency for v1 — purely client-side.

- RemindMeLaterProvider context avoids prop-threading through 4 intermediate
  components; MessageRow uses the hook directly.

All reminder content is NIP-44 encrypted — never stored or transmitted in
plaintext. Completed/cancelled reminders get jittered 30-90 day expiration
tags for eventual relay-side cleanup.

Co-authored-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
2026-06-11 15:32:26 -04:00
npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7
275ad4be4a feat(relay): add NIP-ER push scheduler, ingest relaxation, and NIP-11 advertisement
The relay now proactively delivers due reminders via Redis pub/sub.
Cross-pod dedup uses an atomic delivered_at claim (mirrors the reaper's
archived_at guard). Ingest relaxed to allow kind:30300 without
not_before (bookmarks/terminal states). max_not_before_delta enforced
to prevent unbounded-future scheduling abuse.

Schema: nullable not_before + delivered_at columns on events, partial
index for scheduler queries. NIP-11: supported_extensions ["nip-er"],
due_delivery_mode "push", max_not_before_delta advertised.

Spec (NIP-ER.md) amended: not_before optional on kind:30300, required
only for pending reminders that may become due.

Co-authored-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
2026-06-11 15:31:10 -04:00
Will Pfleger
f319f2fae5 style: fix formatting in e2e_event_reminder.rs 2026-06-11 15:25:04 -04:00
npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7
84b0dadee3 fix(relay): relax not_before to optional, add d-tag validation
The spec requires not_before on pending reminders only — terminal states
(done/cancelled) and bookmarks omit it. The validator incorrectly
required exactly one not_before on all kind:30300 events, blocking the
entire completion/cancellation lifecycle.

Also adds d-tag structure validation per spec: reject zero, empty, or
duplicate d tags.

Co-authored-by: Will Pfleger <will@pfleger.dev>
Signed-off-by: Will Pfleger <will@pfleger.dev>
2026-06-11 15:10:01 -04:00
npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7
0b3bed62bf feat(relay): implement NIP-ER event reminder support (kind:30300)
Adds relay-side support for NIP-ER encrypted event reminders:

Write path (ingest):
- Register KIND_EVENT_REMINDER (30300) as parameterized replaceable,
  global-only, and UsersWrite-scoped
- Validate not_before tag: exactly one, decimal digits only, no leading
  zeros, range 0..=MAX_SAFE_INTEGER
- Reject expiration <= not_before when both are present and parseable

Read path (REQ/COUNT/bridge):
- AUTHOR_ONLY_KINDS array gates visibility — only the authenticated
  event author may read kind:30300 events
- Exclusive author-only filters (kinds:[30300]) require authors=[self]
  or get CLOSED/403
- Mixed-kind filters pass the gate but per-event filtering silently
  omits other authors' reminders
- COUNT fast path disabled when author-only kinds are in play to
  prevent leaking aggregate counts

Integration tests (e2e_event_reminder.rs):
- Write validation: valid, missing, duplicate, malformed not_before;
  expiration ordering; edge cases (0, MAX_SAFE_INTEGER)
- Read filtering: author self-query, cross-user rejection (HTTP 403
  and WS CLOSED), mixed-kind omission, replacement semantics

Signed-off-by: npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7 <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: Will Pfleger <wpfleger@squareup.com>
Signed-off-by: Will Pfleger <wpfleger@squareup.com>
2026-06-11 15:10:01 -04:00
Will Pfleger
a101fd6ad3 chore(justfile): build git-credential-nostr in dev and staging recipes (#980)
Signed-off-by: Will Pfleger <wpfleger@block.xyz>
2026-06-11 14:53:36 -04:00
Wes
824c55114e Fix Buzz command migration for saved agents (#979) 2026-06-11 11:27:58 -07:00
Will Pfleger
63738139ba fix(desktop): resolve effective model and prompt from persona in display path (#972)
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
Co-authored-by: npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7 <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@sprout-oss.stage.blox.sqprod.co>
2026-06-11 13:29:38 -04:00
Wes
1bb8b8d547 docs: clean up remaining Buzz references (#977)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Pinky <44b8e82baa6e0e254e0208d68f335c283c94e7b78dd1fa10d5a49d3f13dd0435@sprout-oss.stage.blox.sqprod.co>
2026-06-11 10:22:14 -07:00
Wes
9242b91f00 chore(release): release version 0.3.17 (#976) v0.3.17 2026-06-11 10:10:34 -07:00
tlongwell-block
e4a0824c6a fix(onboarding): skip onboarding when relay already has a profile (#973) 2026-06-11 13:09:43 -04:00
Wes
79bcee55cb docs: finish Buzz rename cleanup (#974)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Pinky <44b8e82baa6e0e254e0208d68f335c283c94e7b78dd1fa10d5a49d3f13dd0435@sprout-oss.stage.blox.sqprod.co>
2026-06-11 09:28:18 -07:00
Taylor Ho
6f3733d43b fix(desktop): let channel members bypass mention agent gate (#965)
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-11 09:21:07 -07:00
Wes
8f580f308c Rename desktop app to Buzz (#960)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Pinky <44b8e82baa6e0e254e0208d68f335c283c94e7b78dd1fa10d5a49d3f13dd0435@sprout-oss.stage.blox.sqprod.co>
2026-06-11 15:06:24 +00:00
Taylor Ho
dcb2639b35 feat(desktop): open profile panel from MembersSidebar rows (#962)
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-11 07:42:24 -07:00
Taylor Ho
4e4dc723e4 feat(desktop): per-event notification sounds and alert controls (#968)
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-11 07:31:19 -07:00
Taylor Ho
1ca16c898c fix(desktop): make header chrome zoom-correct and tidy split-pane (#941)
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: npub1223z34hd7vtwc6qj4s7flsxkj644nlre2nthu7lrrmkumhu3xddsrx9r6w <52a228d6edf316ec6812ac3c9fc0d696ab59fc7954d77e7be31eedcddf91335b@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-06-11 07:27:23 -07:00
tlongwell-block
8c8312932a fix(desktop): rename SPROUT_ env vars to BUZZ_ for child agent processes (#971) 2026-06-11 10:13:52 -04:00
Taylor Ho
31b0665cff fix(justfile): complete buzz rename in dev and staging recipes (#966)
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-11 01:06:29 -07:00
Will Pfleger
d99ad131f1 refactor: rename sprout backend to buzz (#958)
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Will Pfleger <wpfleger@block.xyz>
Signed-off-by: Will Pfleger <wpfleger@squareup.com>
Signed-off-by: Will Pfleger <wpfleger96@gmail.com>
Co-authored-by: npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7 <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: npub1fgdl5qqnh3k3f2xkqrvt7cujalhm623x4s7fdjdj5yrtp5fzjl9qrjpucw <4a1bfa0013bc6d14a8d600d8bf6392efefbd2a26ac3c96c9b2a106b0d12297ca@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: npub16v54tttfqacx9ycvc3k0ut0npj564ahcuajzy6qjvh57ntmsf4uq4806j2 <d32955ad69077062930cc46cfe2df30ca9aaf6f8e76422681265e9e9af704d78@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: Will Pfleger <wpfleger96@gmail.com>
2026-06-10 19:29:51 -04:00
Will Pfleger
53e3f09485 fix(desktop): reap orphaned agent processes across instances (#954)
Signed-off-by: npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7 <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@sprout-oss.stage.blox.sqprod.co>
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
Co-authored-by: npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7 <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@sprout-oss.stage.blox.sqprod.co>
2026-06-10 17:38:39 -04:00
Wes
c5a54dcc39 Rename web app to Buzz (#959)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Pinky <44b8e82baa6e0e254e0208d68f335c283c94e7b78dd1fa10d5a49d3f13dd0435@sprout-oss.stage.blox.sqprod.co>
2026-06-10 21:07:02 +00:00
tlongwell-block
510009c11d fix(desktop): allow restarting saved relay-mesh agents from the UI (#956)
Signed-off-by: npub1qyvc0c5kl4gqv2fd97fsk46tu378sqgy35vc83rvgfwne90sel7s0ed67d <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: npub1qyvc0c5kl4gqv2fd97fsk46tu378sqgy35vc83rvgfwne90sel7s0ed67d <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@sprout-oss.stage.blox.sqprod.co>
2026-06-10 16:56:02 -04:00
Will Pfleger
60c8c5036a feat(acp): agent timeout resilience — idle margin, tool-call reset, death notices, keepalive (#935)
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
Co-authored-by: npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7 <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: npub16v54tttfqacx9ycvc3k0ut0npj564ahcuajzy6qjvh57ntmsf4uq4806j2 <d32955ad69077062930cc46cfe2df30ca9aaf6f8e76422681265e9e9af704d78@sprout-oss.stage.blox.sqprod.co>
2026-06-10 16:54:16 -04:00
Wes
c63e018b05 Rename mobile app to Buzz (#955)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Pinky <44b8e82baa6e0e254e0208d68f335c283c94e7b78dd1fa10d5a49d3f13dd0435@sprout-oss.stage.blox.sqprod.co>
2026-06-10 13:38:11 -07:00
Will Pfleger
929cc8861e fix(desktop): repair team-persona mismatch and deduplicate legacy imports (#949)
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
Co-authored-by: npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7 <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@sprout-oss.stage.blox.sqprod.co>
2026-06-10 15:47:36 -04:00
Will Pfleger
b792aa4704 fix(desktop): populate last_message_at in channel browser (#951)
Signed-off-by: Will Pfleger <wpfleger@squareup.com>
Co-authored-by: npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7 <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@sprout-oss.stage.blox.sqprod.co>
2026-06-10 12:23:44 -07:00
klopez4212
e5f0c32648 Kit/circular avatars (#927) 2026-06-10 19:53:45 +01:00
tlongwell-block
dbe973dacd fix(relay): accept mesh signaling kinds (24620/24621) via POST /events (#946)
Signed-off-by: npub1qyvc0c5kl4gqv2fd97fsk46tu378sqgy35vc83rvgfwne90sel7s0ed67d <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: npub1qyvc0c5kl4gqv2fd97fsk46tu378sqgy35vc83rvgfwne90sel7s0ed67d <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@sprout-oss.stage.blox.sqprod.co>
2026-06-10 14:51:38 -04:00
Will Pfleger
f49cdcdd30 feat(sprout-dev-mcp): add read_file tool and replace_all to str_replace (#928)
Co-authored-by: Will Pfleger <wpfleger@block.xyz>
Signed-off-by: Will Pfleger <wpfleger@block.xyz>
Co-authored-by: npub16v54tttfqacx9ycvc3k0ut0npj564ahcuajzy6qjvh57ntmsf4uq4806j2 <d32955ad69077062930cc46cfe2df30ca9aaf6f8e76422681265e9e9af704d78@sprout-oss.stage.blox.sqprod.co>
2026-06-10 17:28:53 +00:00
Will Pfleger
c28d14f460 chore(release): release version 0.3.16 (#943) v0.3.16 2026-06-10 13:04:14 -04:00
Wes
34c8bdab1a fix(desktop): land live presence updates for not-yet-cached pubkeys (#947)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co>
2026-06-10 16:58:12 +00:00
Will Pfleger
5c0af0bc93 fix(release): make just release idempotent for re-runs (#948) 2026-06-10 12:50:18 -04:00
klopez4212
e9cd1c3926 Improve mentions for agents + people (#942) 2026-06-10 17:40:53 +01:00
Taylor Ho
384eb6cba4 feat: agent memory viewer (read-only) in profile panel (#917)
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: npub1223z34hd7vtwc6qj4s7flsxkj644nlre2nthu7lrrmkumhu3xddsrx9r6w <52a228d6edf316ec6812ac3c9fc0d696ab59fc7954d77e7be31eedcddf91335b@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: Bart Simpson <bart@sprout.local>
2026-06-10 08:32:38 -07:00
Wes
2dc466fe0b Fix channel visibility controls (#940)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Pinky <44b8e82baa6e0e254e0208d68f335c283c94e7b78dd1fa10d5a49d3f13dd0435@sprout-oss.stage.blox.sqprod.co>
2026-06-10 07:46:43 -07:00
Taylor Ho
3e56331e9c fix(delete): make agent-deleted messages disappear from desktop UI immediately (#918)
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Bart <bart@sprout.local>
2026-06-09 23:02:13 -07: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
tlongwell-block
384a34ec31 Update README.md wording 2026-06-09 22:37:36 -04:00
tlongwell-block
fe14daa5d6 Fix post-compact handoff context for OpenAI providers (#931)
Signed-off-by: npub1t2tgm7d8f995uqvmnm8h88sg3wnpp9a5xysjf6dg3tjmgt3ltulqdp8ehr <5a968df9a7494b4e019b9ecf739e088ba61097b4312124e9a88ae5b42e3f5f3e@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: npub1t2tgm7d8f995uqvmnm8h88sg3wnpp9a5xysjf6dg3tjmgt3ltulqdp8ehr <5a968df9a7494b4e019b9ecf739e088ba61097b4312124e9a88ae5b42e3f5f3e@sprout-oss.stage.blox.sqprod.co>
2026-06-09 21:56:54 -04:00
Wes
98aa535935 chore(release): release version 0.3.15 (#936) v0.3.15 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