Commit Graph
1903 Commits
Author SHA1 Message Date
thePR0M3TH3AN f66e98f969 Merge pull request #2040 from PR0M3TH3AN/ai/fix-webseed-health-and-bootstrap-1140772652148172709
Fix WebTorrent webseed health check and bootstrap behavior
2026-02-01 10:52:02 -05:00
google-labs-jules[bot]andPR0M3TH3AN 7e21386bd0 fix(webtorrent): correct webseed availability check and force bootstrap
This change addresses two issues with WebTorrent webseed handling:
1.  **Grid Availability Check:** Modified `js/gridHealth.js` to correctly classify torrents with only webseeds as "healthy" and report 1 peer (instead of 0) so the UI availability check passes.
2.  **Video Player Bootstrap:** Modified `js/webtorrent.js` (`probePeers` and `streamVideo`) to explicitly append provided webseed URLs (`urlList`) to the magnet link as `&ws=` parameters. This forces the WebTorrent client to recognize and use these webseeds as initial peers for bootstrapping the swarm.

Tested via `tests/verification/verify_webseed_fix.mjs` (logic verification).

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-01 15:49:46 +00:00
google-labs-jules[bot]andPR0M3TH3AN 77cd03b2f7 Refactor DM loading to be opportunistic and serialize notification updates
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-01 15:47:54 +00:00
thePR0M3TH3AN 5a67774011 Merge pull request #2023 from PR0M3TH3AN/fix-webtorrent-webseed-regression-10274894627332192935
Fix WebTorrent webseed stream health check regression
2026-02-01 09:14:43 -05:00
google-labs-jules[bot]andPR0M3TH3AN 2f33992192 Fix dependencies (jsdom/nostr-tools conflict) and WebTorrent regression
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-01 13:32:00 +00:00
thePR0M3TH3AN 438f895dd6 Merge branch 'unstable' into fix-webtorrent-webseed-regression-10274894627332192935 2026-02-01 08:00:23 -05:00
google-labs-jules[bot]andPR0M3TH3AN 1dfc23c11a refactor(ai): extract notification logic from js/app.js (agent)
- Moved `showError`, `showStatus`, `showSuccess`, and `updateNotificationPortalVisibility` logic to `js/ui/notificationController.js`.
- Instantiated `NotificationController` in `js/ui/applicationBootstrap.js`.
- Refactored `js/app.js` to delegate notification calls to the controller.
- Added unit tests for `NotificationController`.
- Followed AGENTS.md refactoring checklist.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-01 03:08:05 +00:00
google-labs-jules[bot]andPR0M3TH3AN ffd8f0e23c fix: Sync package-lock.json and fix tests for nostr-tools v2
- Synced `package-lock.json` with `package.json` to resolve `npm ci` failures.
- Updated `nostr-tools` dependencies to resolve conflicts.
- Fixed `SyntaxError` in `tests/nostr-login-permissions.test.mjs` caused by duplicate code.
- Updated `js/nostr/client.js`, `js/nostr/publishHelpers.js`, `js/nostr/adapters/nsecAdapter.js`, `js/nostr/nip46Client.js` to use `hexToBytes` helper when calling `nostr-tools` functions, as v2+ expects `Uint8Array` instead of hex strings.
- Added `hexToBytes` helper in `js/utils/hex.js`.
- Updated tests (`tests/nostr/dm-direct-message-flow.test.mjs`, `tests/nostr-send-direct-message.test.mjs`, `tests/nostr-private-key-signer.test.mjs`, `tests/nostr/nip46Client.test.js`) to use `Uint8Array` for keys where required.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-31 19:56:44 +00:00
google-labs-jules[bot]andPR0M3TH3AN 5a5772de3a perf: Batch NIP-71 metadata fetches in NostrClient
Currently, when the NostrClient processes a burst of video events (e.g., initial
feed load), it triggers an individual NIP-71 metadata fetch for every video that
updates the `activeMap`. This results in a stampede of network requests (N videos
* M relays).

This change optimizes `flushEventBuffer` to collect all videos requiring metadata
updates and executes a single batched `populateNip71MetadataForVideos` call at
the end of the flush cycle.

This reduces the metadata fetch overhead from O(N) to O(1) per batch.

Verified with a local benchmark script (reduced fetch calls from 50 to 1 for 50 events)
and existing unit tests.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-31 19:36:08 +00:00
google-labs-jules[bot]andPR0M3TH3AN 9aaf8aa4d5 fix(webtorrent): ensure webseed-only streams are marked healthy
Previously, `probePeers` would mark a stream as unhealthy (healthy: false) if no P2P peers were found, even if a valid webseed was present. This caused the UI to potentially disable playback or show error states for webseed-only content.

This fix ensures that if `peers === 0` but `hasWebSeed` is true, the probe result returns `healthy: true` with reason `"webseed"`.

Added `tests/webtorrent-regression.test.mjs` to verify this behavior and prevent future regressions.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-31 19:07:31 +00:00
thePR0M3TH3AN daa9161f96 Merge branch 'unstable' into agent/automated-pr-review-fixes-3637557005884121646 2026-01-31 13:48:46 -05:00
thePR0M3TH3AN 66f41b56a1 Merge pull request #2018 from PR0M3TH3AN/ai/dead-code-20241024-16967779679149472382
Dead Code Sweep: Remove orphaned tracker config and signing adapter
2026-01-31 13:47:52 -05:00
thePR0M3TH3AN f58b9f709e Merge branch 'unstable' into ai/deps-safe-upgrades-3374834892089585189 2026-01-31 13:46:34 -05:00
thePR0M3TH3AN 47fde8dd84 Merge branch 'unstable' into ai/schema-validate-20250226-13203498180481473459 2026-01-31 13:40:52 -05:00
google-labs-jules[bot]andPR0M3TH3AN f0606065c9 fix(ai): resolve test failures and permission regressions (agent)
- Fix flaky mock in `tests/hashtag-preferences.test.mjs` (limit mock responses to avoid timeouts)
- Fix timeout leak in `js/services/hashtagPreferencesService.js` (clear timeout on success)
- Update `nostrClient.loginWithExtension` to request full permissions (fixing `nostr-login-permissions.test.mjs`)
- Ensure `jsdom` is available for `channel-profile-moderation.test.mjs`

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-31 15:53:38 +00:00
google-labs-jules[bot]andPR0M3TH3AN 76a90a1a62 chore(ai): safe dependency upgrades and test fixes
- Upgrade playwright to 1.58.1 and autoprefixer to 10.4.24
- Fix permission caching in client.js
- Improve test robustness for hashtag preferences
- Add dependency scan artifacts
- Document deferred upgrades

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-31 15:46:06 +00:00
google-labs-jules[bot]andPR0M3TH3AN 5232f38bed fix(ai): resolve test failures and permission regressions (agent)
- Fix flaky mock in `tests/hashtag-preferences.test.mjs`
- Update `nostrClient.loginWithExtension` to request full permissions (fixing `nostr-login-permissions.test.mjs`)
- Ensure `jsdom` is available for `channel-profile-moderation.test.mjs`

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-31 15:30:15 +00:00
thePR0M3TH3AN cffbe26c04 Merge pull request #2007 from PR0M3TH3AN/ai/refactor-profile-modal-20231026-3866161108178541875
Refactor handleAddProfile to ProfileModalController
2026-01-31 10:18:13 -05:00
google-labs-jules[bot]andPR0M3TH3AN 56d9465165 chore(ai): remove dead code (agent)
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-31 14:58:50 +00:00
google-labs-jules[bot]andPR0M3TH3AN 2c87b94b62 fix(tests): resolve hashtag preferences unit test failure
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-31 09:50:04 +00:00
google-labs-jules[bot]andPR0M3TH3AN 9d829f548b fix(nostr): request encryption permissions during extension login
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-31 09:32:02 +00:00
google-labs-jules[bot]andPR0M3TH3AN eeb3283344 fix(ci): prevent signer hangs in tests and background services
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-31 08:14:53 +00:00
google-labs-jules[bot]andPR0M3TH3AN a920032993 fix(ci): prevent signer timeouts in background tests
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-31 07:14:47 +00:00
google-labs-jules[bot]andPR0M3TH3AN ce8c5931e5 chore(ai): event schema validation tool + fixes
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-31 06:53:22 +00:00
google-labs-jules[bot]andPR0M3TH3AN f5e16f296e refactor(ai): extract handleAddProfile from js/app.js (agent)
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-31 03:55:51 +00:00
google-labs-jules[bot]andPR0M3TH3AN 51087fad7e refactor(ai): extract handleAddProfile from js/app.js (agent)
Moves `handleAddProfile` logic from the main application class into `ProfileModalController` to improve separation of concerns as per `AGENTS.md`.

- Extracts `handleAddProfile` to `js/ui/profileModalController.js`.
- Updates `ProfileModalController` to handle add account flow internally.
- Removes legacy callback wiring from `js/app.js` and `js/ui/applicationBootstrap.js`.
- Adds unit tests for the extracted logic in `tests/ui/profileModalController-addProfile.test.mjs`.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-31 03:32:52 +00:00
google-labs-jules[bot]andPR0M3TH3AN e027e6bba3 chore(ai): CI health fixes (flaky tests)
- Fix flaky `tests/hashtag-preferences.test.mjs` by correcting mock implementation for `fetchListIncrementally`.
- Fix `tests/nostr-login-permissions.test.mjs` failure by requesting correct permissions in `js/nostr/client.js`.
- Fix 90s timeout in `HashtagPreferencesService` by clearing the timeout timer upon successful decryption.
- `npm install` was run to ensure dependencies like `jsdom` are present for `tests/app/channel-profile-moderation.test.mjs`.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-31 03:08:33 +00:00
thePR0M3TH3AN 00899694b5 Revert "Fix ignored webseeds in magnet links" 2026-01-30 17:04:15 -05:00
google-labs-jules[bot]andPR0M3TH3AN 2bebaa6465 fix(webtorrent): ensure magnet webseeds are used in stream
Extracts `ws` (web seed) parameters from the magnet link and merges them with the explicit `urlList` (e.g., from direct URL) when initializing the WebTorrent stream. This fixes a regression where magnet-embedded web seeds were ignored if a direct URL was provided.

- Updates `js/magnets.js` to parse `ws` parameters and export `webSeedsFromMagnet`.
- Updates `js/webtorrent.js` to merge magnet web seeds with `opts.urlList`.
- Adds regression test `tests/webtorrent-webseeds.test.mjs`.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-30 22:01:13 +00:00
thePR0M3TH3AN ceccd34681 Revert "Dead Code Cleanup" 2026-01-30 16:51:01 -05:00
thePR0M3TH3AN e77f5f3636 Defer NIP-07 permission prompts 2026-01-30 16:28:00 -05:00
thePR0M3TH3AN a5c7d3d496 Merge pull request #1995 from PR0M3TH3AN/codex/add-allowpermissionprompt-option-to-loadblocks
Defer block list permission prompts during login
2026-01-30 16:04:03 -05:00
thePR0M3TH3AN 94e92acc68 Merge pull request #1996 from PR0M3TH3AN/ai/dead-code-cleanup-34771678735083742
Dead Code Cleanup
2026-01-30 16:00:28 -05:00
google-labs-jules[bot]andPR0M3TH3AN 60fa6c4282 chore(ai): remove dead code (agent)
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-30 20:54:52 +00:00
thePR0M3TH3AN 7ef420e1e2 Defer block list permission prompts during login 2026-01-30 15:53:57 -05:00
thePR0M3TH3AN deec2cd573 Merge pull request #1994 from PR0M3TH3AN/codex/handle-auth-login-failures-and-permissions
Add permission CTA and retry flow for subscriptions & hashtag preferences
2026-01-30 15:40:12 -05:00
thePR0M3TH3AN acf73bc5a3 Add permission CTA for subscriptions and hashtags 2026-01-30 15:39:52 -05:00
google-labs-jules[bot]andPR0M3TH3AN 6347ab0db1 fix(auth): optimize login speed and list decryption
- Reduced decryption timeout for user lists from 90s to 15s to fail faster.
- Optimized NIP-07 decryption calls to avoid retries and long timeouts during critical loading paths.
- Fixed a bug where `loginWithExtension` triggered `getPublicKey` twice, doubling the user interaction time.
- Added a 10s grace period for relay health warnings to prevent false positives on startup.
- Verified `deferBlocks` logic in `authService` prevents blocking the login UI on slow list decryption.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-30 20:31:24 +00:00
google-labs-jules[bot]andPR0M3TH3AN 5bdca14364 Fix list loading reliability and optimize NIP-07 login performance
- Fixes issue where user lists (subscriptions, blocks) fail to load if local cache is stale but metadata store is fresh.
- Updates `js/userBlocks.js` and `js/subscriptions.js` to persist `createdAt` timestamp and use it for incremental fetch `since` parameter.
- Optimizes `js/nostr/client.js` `ensureActiveSignerForPubkey` to reduce redundant `getPublicKey` calls to NIP-07 extension by 50%.
- Adds `preloadedPubkey` support to `createNip07Adapter`.
- Adds reproduction test for NIP-07 concurrency issue.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-30 19:35:05 +00:00
thePR0M3TH3AN 792473f56f Merge pull request #1989 from PR0M3TH3AN/fix/nip07-adapter-race-condition-531357967915833285
Fix NIP-07 adapter race condition for encrypted lists
2026-01-30 14:10:40 -05:00
google-labs-jules[bot]andPR0M3TH3AN 4f40025b9d fix(ai): frontend console error — strip xs on localhost (agent)
Diagnosed a CORS error on local development environment caused by WebTorrent fetching `.torrent` files from R2 buckets (via `xs` parameter) that do not allow localhost origin.

Modified `js/webtorrent.js` to strip the `xs` parameter from magnet links when running on `localhost` or `127.0.0.1`. This prevents the browser from attempting the blocked fetch request, resolving the console error while maintaining functionality (falling back to DHT/peers).

Verified using `scripts/agent/debug_frontend.py` which captures frontend console logs via Playwright.

Tests run:
- `npm run lint`
- `npm run test:unit:shard1`
- `python3 scripts/agent/debug_frontend.py` (verified error is gone)

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-30 18:53:25 +00:00
google-labs-jules[bot]andPR0M3TH3AN d38585f376 Fix NIP-07 adapter race condition with lazy encryption capability injection
- Modified `js/nostr/adapters/nip07Adapter.js` to use dynamic getters for `capabilities` (nip04/nip44) and unconditionally expose encryption methods.
- Updated `js/nostr/client.js` to use `Object.getOwnPropertyDescriptor` when handling `signer.capabilities`.
- Added `tests/nostr/nip07Adapter-race-condition.test.mjs` to verify the fix.
- Fixed test environment issues in `tests/nostr/adapters.test.mjs` and `tests/nostr-login-permissions.test.mjs`.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-30 18:47:08 +00:00
google-labs-jules[bot]andPR0M3TH3AN 51924d1619 fix(nostr): handle lazy NIP-44 injection in NIP-07 adapter
Updates `js/nostr/adapters/nip07Adapter.js` to unconditionally expose encryption methods (`nip04Encrypt`, `nip44Decrypt`, etc.) and use dynamic property getters for capabilities. This fixes a race condition where the adapter would initialize without NIP-44 support if the browser extension injected the `nip44` API slightly after `window.nostr` became available, preventing encrypted user lists (subscriptions, blocks, hashtags) from loading.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-30 18:19:44 +00:00
google-labs-jules[bot]andPR0M3TH3AN 9481de9e0a fix(app): sequence user list loading after profile relays are initialized
Prior to this change, user-specific lists (block lists, subscriptions, hashtag preferences, DMs, NWC settings) were fetched concurrently with the profile/relay initialization in `handleAuthLogin`. This caused a race condition where the application would attempt to fetch sensitive user data using default relays instead of the user's preferred relays, often resulting in empty or stale data.

This patch refactors `handleAuthLogin` in `js/app.js` to chain the loading of these lists to the completion of `profileStatePromise` (which ensures relays are loaded via `postLoginPromise`). This guarantees that the correct relays are used for fetching user-specific data.

Also defines `dmStatePromise`, `nwcPromise` and `hashtagPreferencesPromise` which were previously referenced but seemingly undefined in the scope, ensuring proper promise tracking.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-30 17:25:07 +00:00
thePR0M3TH3AN b8fad92b25 Merge pull request #1986 from PR0M3TH3AN/fix-nip07-decryption-13328665886531040373
fix(nostr): correctly resolve signer capabilities when methods are present
2026-01-30 11:43:25 -05:00
google-labs-jules[bot]andPR0M3TH3AN fdc070479b Optimize post-login sequence to load relays before other data
Prioritizes fetching the user's relay list (NIP-65) immediately after login, ensuring that subsequent data fetches (profile, contact list, DMs, feed) utilize the user's preferred relays instead of default ones. This prevents "slow" or incomplete data loading issues caused by relying on defaults.

- Refactored `authService.applyPostLoginState` to sequence relay loading before profile/block loading.
- Refactored `app.handleAuthLogin` to await relay loading before initiating dependent fetches (Hashtags, Moderation, DMs, NWC, Lists, Feed).
- Updated unit tests in `tests/auth-service.test.mjs` to verify sequential execution and correct return values.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-30 16:34:12 +00:00
google-labs-jules[bot]andPR0M3TH3AN 730618efa8 fix(nostr): correctly resolve signer capabilities when methods are present
This fixes a critical issue where valid NIP-07 signers were treated as incapable of NIP-44/NIP-04 operations if their initial `capabilities` flag was false, even if the necessary methods (e.g., `nip44Decrypt`) were subsequently added or already present.

This addresses errors like "Gift wrap events require a NIP-44 decryptor" for users with valid extensions.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-30 16:20:13 +00:00
thePR0M3TH3AN 09c0ac8127 Add relay health summary banner 2026-01-30 11:08:02 -05:00
thePR0M3TH3AN 9c8cc465ce Merge pull request #1983 from PR0M3TH3AN/codex/improve-websocket-stability-and-ui-responsiveness
Add per-relay backoff and rate-limited relay summary logging
2026-01-30 11:01:30 -05:00
thePR0M3TH3AN 6c8349fdfb Add relay backoff and summary logging 2026-01-30 11:01:17 -05:00