Skip to content

Update desktop icon and persist window state - #9

Merged
wesbillman merged 1 commit into
mainfrom
codex/use-updated-sprout-icon
Mar 10, 2026
Merged

wesbillman merged 1 commit into
mainfrom
codex/use-updated-sprout-icon

Conversation

@wesbillman

Copy link
Copy Markdown
Collaborator

Summary

  • switch the desktop app to the updated sprout.svg favicon and remove the old sprout.png reference
  • regenerate the Tauri icon assets from the updated SVG and add padding so the dock icon matches typical macOS sizing
  • persist desktop window size, position, and maximized state across app restarts with the Tauri window-state plugin

Testing

  • pnpm build
  • cargo check --manifest-path desktop/src-tauri/Cargo.toml
  • pre-push hooks via lefthook (desktop-check, desktop-build, desktop-tauri-check, rust-fmt, rust-clippy, rust-tests)

@wesbillman
wesbillman merged commit 998d839 into main Mar 10, 2026
7 checks passed
@wesbillman
wesbillman deleted the codex/use-updated-sprout-icon branch March 10, 2026 00:50
tlongwell-block added a commit that referenced this pull request Mar 10, 2026
* origin/main:
  Add desktop Home feed (#12)
  Add desktop Playwright e2e harness (#11)
  Update desktop icon and persist window state (#9)
  feat: add channel creation flow (#8)
  Improve message markdown display and formatting (#7)
  feat(desktop): connect chat to relay (#6)
  docs(readme): clarify desktop setup (#4)
  feat: add desktop app (#3)

# Conflicts:
#	crates/sprout-test-client/tests/e2e_rest_api.rs
tlongwell-block added a commit that referenced this pull request Mar 11, 2026
* origin/main:
  feat: soft-delete for events/channels, enriched API responses, NIP-29 group management (#17)
  feat: Channel management, messaging, threads, DMs, reactions, and NIP-29 support (#16)
  Improve chat scrolling and multiline composer (#14)
  chore: remove redundant inline comments across all crates (#13)
  Initial backend revisions, workflow expansion (#5)
  Add desktop Home feed (#12)
  Add desktop Playwright e2e harness (#11)
  Update desktop icon and persist window state (#9)
  feat: add channel creation flow (#8)
wpfleger96 added a commit that referenced this pull request May 22, 2026
…iew findings

The original implementation created a second parallel Tauri command
(discover_all_acp_providers) alongside the existing one to avoid
changing the return type. This produced two commands, two hooks, two
query keys, and two raw type converters. Consolidates into a single
command returning the full catalog, with a useAvailableAcpProviders
hook that type-narrows for callers needing non-null command/binaryPath.

Also fixes: pipe deadlock in install command (#1), UTF-8 truncation
panic (#2/#4), adds install concurrency guard (#11), exact provider ID
match (#15), error display stdout fallback (#5), success banner
suppression when already available (#12), misleading re-run text (#13),
IIFE refactor in PersonaDialog (#14), hidden internal query lift (#7),
configurable e2e mocks (#9), shared raw type exports (#8), and
classify_provider unit tests (#10).
wpfleger96 added a commit that referenced this pull request May 22, 2026
…iew findings

The original implementation created a second parallel Tauri command
(discover_all_acp_providers) alongside the existing one to avoid
changing the return type. This produced two commands, two hooks, two
query keys, and two raw type converters. Consolidates into a single
command returning the full catalog, with a useAvailableAcpProviders
hook that type-narrows for callers needing non-null command/binaryPath.

Also fixes: pipe deadlock in install command (#1), UTF-8 truncation
panic (#2/#4), adds install concurrency guard (#11), exact provider ID
match (#15), error display stdout fallback (#5), success banner
suppression when already available (#12), misleading re-run text (#13),
IIFE refactor in PersonaDialog (#14), hidden internal query lift (#7),
configurable e2e mocks (#9), shared raw type exports (#8), and
classify_provider unit tests (#10).
wpfleger96 added a commit that referenced this pull request May 22, 2026
…iew findings

The original implementation created a second parallel Tauri command
(discover_all_acp_providers) alongside the existing one to avoid
changing the return type. This produced two commands, two hooks, two
query keys, and two raw type converters. Consolidates into a single
command returning the full catalog, with a useAvailableAcpProviders
hook that type-narrows for callers needing non-null command/binaryPath.

Also fixes: pipe deadlock in install command (#1), UTF-8 truncation
panic (#2/#4), adds install concurrency guard (#11), exact provider ID
match (#15), error display stdout fallback (#5), success banner
suppression when already available (#12), misleading re-run text (#13),
IIFE refactor in PersonaDialog (#14), hidden internal query lift (#7),
configurable e2e mocks (#9), shared raw type exports (#8), and
classify_provider unit tests (#10).
kaalph pushed a commit to kaalph/buzz that referenced this pull request Aug 21, 2026
…iew findings

The original implementation created a second parallel Tauri command
(discover_all_acp_providers) alongside the existing one to avoid
changing the return type. This produced two commands, two hooks, two
query keys, and two raw type converters. Consolidates into a single
command returning the full catalog, with a useAvailableAcpProviders
hook that type-narrows for callers needing non-null command/binaryPath.

Also fixes: pipe deadlock in install command (block#1), UTF-8 truncation
panic (block#2/block#4), adds install concurrency guard (block#11), exact provider ID
match (block#15), error display stdout fallback (block#5), success banner
suppression when already available (block#12), misleading re-run text (block#13),
IIFE refactor in PersonaDialog (block#14), hidden internal query lift (block#7),
configurable e2e mocks (block#9), shared raw type exports (block#8), and
classify_provider unit tests (block#10).
BradGroux pushed a commit to BradGroux/buzz that referenced this pull request Aug 23, 2026
birdblues added a commit to birdblues/buzz that referenced this pull request Sep 5, 2026
…side

Review follow-up (Codex + Grok on e4bf6fa). Both flagged the same blocker:
the WebView loaded the app door over plain HTTP and trusted the response
CSP, so a LAN MITM (or a header regression) could strip the policy and
restore fetch/XHR/WebSocket/subresource exfiltration — the navigation
delegate only sees navigations. Grok also warned that iOS 17+ ATS may block
raw private-IP HTTP in WKWebView regardless of NSAllowsLocalNetworking.

Both go away by never letting the WebView touch the network, the way the
desktop proxy works:
- shared/relay/app_content.dart: fetchAppDocument — Authorization header,
  no redirects (a 3xx fails; a custom header must never follow one),
  text/html only, 8 MiB cap, timeout; stampSandboxCsp — the relay/desktop
  policy minus `sandbox` (not expressible in <meta>) inserted as the first
  element after a leading doctype so no script can precede it.
- app_webview_page.dart: loadHtmlString with no base URL → about:blank,
  opaque origin, no storage. Navigation is one-shot: exactly the first
  main-frame about:blank load; reloads, window.open, same-URL posts and
  every subframe are prevented (decideAppNavigation, Codex block#2). Retries are
  generation-fenced so a stale callback cannot overwrite the current load
  (Codex block#4). Before running, Dart asks the native side whether the WebRTC
  hook is installed and fails closed otherwise (Codex block#3, Android included).
- SandboxWebViewHardening.swift: hook loadHTMLString(_:baseURL:) instead of
  load(_:) — the page's only entry point now; `installed` is set only after
  the exchange succeeds; kill list gains WebTransport and
  webkitGetUserMedia (Grok block#4; desktop script updated for parity).
- Info.plist: the ATS exception is removed — nothing in the WebView loads
  from the network any more.
- message_content.dart: an `![…]()` reference to an HTML app never reaches
  the image decoder; without a door it renders an inert download pill
  (Codex block#6). New `allowAppCards` flag turned off on the forum post card and
  compose-note preview, which crop with a box instead of maxLines and could
  hide a card's safety chrome (Codex block#5). authorLabel wired on forum thread
  posts/replies and pulse notes (Codex block#7, Grok block#7).
- relay_info.dart: a failed NIP-11 lookup while connected retries after 30 s
  instead of waiting for the next reconnect (Grok block#9).
- AppCard: the preview is a plain tap target; Run is the one announced
  action (Grok block#8).
- docs/sandboxed-apps.md: threat-model rows and the mobile table updated;
  iPad step 3 no longer checks ATS, the probe must see location.href ==
  about:blank.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UAm5qbNPszvcwnMMbfGVGa
Signed-off-by: dhseo <birdblues@mac.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant