Commit graph

156 commits

Author SHA1 Message Date
777genius
b9cfdb9323 fix(team-messages): scope debounced sidebar scroll persistence to its team
A scroll within the 100ms persist debounce could otherwise have its queued
update fire after the user switched teams, writing the previous team's offset
under the new team and restoring the sidebar to the wrong position. Capture the
team that scheduled the update and drop it on fire if the active team changed.
2026-05-31 18:29:35 +03:00
777genius
ad2f602cba perf(renderer): gate timeline live lead props 2026-05-31 05:58:56 +03:00
777genius
db2c82475b perf(renderer): pass composer member avatars 2026-05-31 05:37:33 +03:00
777genius
4d0f3d802b perf(renderer): skip idle reply candidate scans 2026-05-31 05:35:02 +03:00
777genius
5041c79916 perf(renderer): cache repeated team badge selectors 2026-05-31 05:28:10 +03:00
777genius
5669373283 perf(renderer): narrow messages panel loading state 2026-05-31 04:19:00 +03:00
777genius
a2a4f99fce perf(renderer): avoid sorting stable team mention metadata 2026-05-31 04:00:34 +03:00
777genius
b9527004f3 perf(renderer): stabilize messages team mention selector 2026-05-31 03:58:13 +03:00
777genius
b6308ccb42 perf(renderer): defer message filter option work 2026-05-31 03:03:55 +03:00
777genius
a5444f3240 perf(renderer): defer inactive messages panel branches 2026-05-31 02:07:52 +03:00
777genius
6b08e0d1a7 perf(renderer): batch visible message read updates 2026-05-31 00:48:26 +03:00
777genius
7be9158eb3 fix(team): prevent composer recipient overflow 2026-05-30 18:46:21 +03:00
777genius
1ebeba8f6e fix: satisfy lint after performance fixes 2026-05-30 17:43:08 +03:00
777genius
126a485477 wip: team messages panel updates and runtime usage cache refinements
Checkpoint of in-progress work:
- renderer: team messages panel/composer, messagesPanelLogic, teamSlice,
  AnimatedHeightReveal plus their tests
- main: runtime process usage-stats caching (ignoreCachedMisses, bounded
  eviction), alive-run-id helpers, team watch-scope notify wiring

Note: the getTeamAgentRuntimeSnapshot rssBytes expectation in
TeamAgentLaunchMatrix.safe-e2e is environment-dependent and still red.
2026-05-30 12:54:11 +03:00
777genius
889e4cc374 perf: avoid sidebar timeline virtualization churn 2026-05-29 15:54:49 +03:00
777genius
f05aefe097 perf: trim team page render overhead 2026-05-29 15:15:01 +03:00
777genius
906942cb7a perf: isolate messages panel logic exports 2026-05-29 12:26:09 +03:00
777genius
3c37b22379 perf: debounce messages scroll persistence 2026-05-29 12:26:04 +03:00
777genius
fa3f8ce85c perf: defer message composer suggestion data 2026-05-29 12:25:53 +03:00
777genius
86e700f031 fix(team): require revision notice before editing 2026-05-25 20:57:04 +03:00
777genius
26a57f87d4 test(team): cover sent message revision flow 2026-05-25 01:22:57 +03:00
777genius
5aba24c400 feat(team): support revising sent messages 2026-05-25 01:22:57 +03:00
777genius
1bc8ccc07a fix(ci): restore workspace validation 2026-05-25 00:14:43 +03:00
777genius
6855d63ec6 feat(i18n): add localization foundation
Refs https://github.com/777genius/agent-teams-ai/issues/139
2026-05-24 15:37:24 +03:00
777genius
4a8cec9dc2 chore: checkpoint frontend workspace updates 2026-05-18 01:57:16 +03:00
777genius
445932e45b feat(team): improve runtime provider workflows 2026-05-17 19:11:26 +03:00
infiniti
d29f3a23d4
fix: harden Windows frontend stability (#125) 2026-05-16 19:57:11 +03:00
777genius
6e8f938da2 fix(team): harden opencode delivery recovery 2026-05-14 15:11:40 +03:00
777genius
cbe8d194ef chore: sync current frontend updates 2026-05-10 21:29:07 +03:00
777genius
bceef9dec5 feat(team): improve review change evidence flow 2026-05-09 17:44:09 +03:00
777genius
5d3ec8a8bd fix(team): hide review pickup escalation rows 2026-05-09 16:01:20 +03:00
777genius
8fd8949684 feat(team): harden opencode delivery advisories 2026-05-09 13:17:23 +03:00
777genius
409f84110e feat(team): checkpoint dashboard and runtime UX updates 2026-05-09 12:20:39 +03:00
777genius
1960c5d29e fix(attachments): expose opencode attachment target 2026-05-09 01:46:35 +03:00
777genius
80acc3b663 feat(team): harden runtime delivery and diagnostics 2026-05-09 00:25:55 +03:00
777genius
51650dca33 fix(team): harden runtime advisory and pending sends 2026-05-08 09:49:05 +03:00
777genius
38b3a1e789 feat(team): update task automation state 2026-05-07 01:22:16 +03:00
777genius
bbafedf06a fix: stabilize OpenCode team runtime delivery 2026-05-05 17:07:21 +03:00
777genius
acb7854ae7 fix(composer): keep editor active while sending 2026-05-05 14:35:09 +03:00
777genius
b192ed4bae feat(team): improve composer persistence flow 2026-05-05 10:35:33 +03:00
777genius
032ddbbe2c fix(team): clear sent composer draft before paint 2026-05-05 09:15:52 +03:00
Илия
a8d53ca5cb
fix(ci): restore dev validation 2026-04-28 16:08:05 +03:00
777genius
068e473d2d fix(team): clear delivered runtime message warnings 2026-04-27 11:15:57 +03:00
777genius
b67168a9e8 fix: show opencode teammate replies in messages 2026-04-26 21:35:48 +03:00
777genius
610bfc561d feat(opencode): persist teammate worktree context 2026-04-26 12:31:15 +03:00
777genius
19b6937446 feat(opencode): harden delivery and provider UI 2026-04-25 14:30:10 +03:00
777genius
64c9ddc78c feat(opencode): add semantic messaging seam 2026-04-24 22:41:16 +03:00
Илия
6929ab2a34
Merge pull request #75 from sardorb3k/perf/virtualization-threshold-tests
perf(team): enable virtualization past threshold + tests
2026-04-20 09:00:07 +03:00
Mike
05f68ced44 perf(team): enable virtualization past threshold + tests
Final step of the virtualization plan. Turns the virtualized render
path on in production behind a row-count threshold, and adds regression
tests covering every gate.

- `VIRTUALIZATION_ROW_THRESHOLD = 60`. Short lists stay on the direct
  render path (no wrapper, no position: absolute, no measurement
  churn). Above the threshold the virtualizer takes over. Threshold is
  sized so conversations under ~one session of activity don't pay the
  virtualization cost; it activates once scrolling through a longer
  history.
- `shouldVirtualize` now requires `renderRows.length >= threshold` in
  addition to the existing opt-in and scroll-ref checks.
- `MessagesPanel` opts into virtualization for every layout it wires
  (inline / sidebar / bottom-sheet). The internal threshold then
  decides when to actually enable it, so callers don't need per-layout
  heuristics.
- Tests: adds a new `ActivityTimeline virtualization threshold` block
  covering (a) below-threshold list stays on the direct path,
  (b) no viewport → direct path regardless of count, (c) above
  threshold + viewport with `virtualizationEnabled` flips to the
  virtualized render path (simulated by clicking "show all" past
  pagination).

With this in, #70#74 combine to deliver:
- correct IntersectionObserver roots in scroll containers
- atomic render rows with stable keys
- windowed rendering with DOM-measured scrollMargin and measureElement
- auto-on when the cost of direct rendering actually shows up
2026-04-20 00:56:28 +05:00
Mike
d4f518e8c5 refactor(team): viewport contract + observer root for ActivityTimeline
Second step of the virtualization plan. No virtualization yet. This PR
makes IntersectionObserver-based visibility tracking correct inside
scroll containers (sidebar, bottom-sheet), which is a prerequisite for
virtualizing the timeline.

- Introduces `TimelineViewport` — a grouped contract passed as a single
  `viewport` prop on `ActivityTimeline`. Holds `scrollElementRef`,
  `observerRoot`, `scrollMargin`, and `virtualizationEnabled`.
- `MessageRowWithObserver` and `LeadThoughtsGroupRow` now create their
  `IntersectionObserver` with `root = observerRoot?.current ?? null`
  instead of defaulting to the document viewport. Unread marking now
  fires when rows enter their real scroll parent.
- `MessagesPanel` resolves the active scroll owner from `position`
  (inline from parent ref, sidebar from `sidebarScrollRef`, bottom-sheet
  from `bottomSheetScrollRef`) and passes it into ActivityTimeline.
- Tests: stubs `IntersectionObserver` to capture `options.root` and
  asserts null when no viewport is passed, and the provided element when
  `viewport.observerRoot` is set.

`scrollMargin` and `virtualizationEnabled` are included in the contract
but not consumed yet — they land in follow-up PRs (#4/#5).
2026-04-20 00:17:04 +05:00