Commit graph

1077 commits

Author SHA1 Message Date
777genius
6a9f281eca fix(opencode): preserve loading state during runtime hydration 2026-04-21 23:24:09 +03:00
777genius
94b97c4930 fix(team): preserve worktree isolation in edit snapshots 2026-04-21 22:47:19 +03:00
777genius
708e1c3bf2 merge(team): integrate teammate worktree isolation ui 2026-04-21 22:35:32 +03:00
777genius
339fb072e5 feat(team): add teammate worktree isolation controls 2026-04-21 22:35:18 +03:00
777genius
db94a08712 Merge remote-tracking branch 'origin/dev' into dev 2026-04-21 22:23:14 +03:00
777genius
796c529439 feat(runtime): add provider fast mode support 2026-04-21 22:22:47 +03:00
777genius
dc4d117a8e feat(opencode): enable managed runtime defaults 2026-04-21 22:17:11 +03:00
777genius
28b64ec467 fix(opencode): scope model preflight by provider 2026-04-21 21:22:40 +03:00
777genius
09004df72c feat(opencode): add production proof workflow 2026-04-21 21:03:48 +03:00
777genius
5e31bd1c06 feat(opencode): add team runtime integration 2026-04-21 20:28:22 +03:00
777genius
2e87e12774 fix(ci): satisfy runtime catalog lint gate 2026-04-21 19:02:15 +03:00
777genius
1c5fce5f0a fix(task-change-ledger): preserve synthetic slash paths on Windows 2026-04-21 18:27:50 +03:00
777genius
e0d32d59ff fix(task-change-ledger): normalize fixture paths on Windows 2026-04-21 18:19:29 +03:00
777genius
95b62d6013 fix(task-change-ledger): read long hashed task artifacts 2026-04-21 18:02:40 +03:00
777genius
f40ea4f738 feat(agent-teams): add derived task queue agenda 2026-04-21 17:22:54 +03:00
777genius
7b486b7fea feat(task-change-ledger): merge review hardening 2026-04-21 17:22:01 +03:00
777genius
c69b7e4212 feat(task-change-ledger): harden review flow 2026-04-21 17:21:29 +03:00
777genius
7374108a71 fix(teams): preserve explicit provider during relaunch 2026-04-21 17:16:49 +03:00
777genius
1db7e501a0 feat(teams): introduce fast mode configuration for Anthropic provider and enhance related UI components 2026-04-21 16:44:18 +03:00
777genius
331166216e feat(team-runtime): snapshot catalog-backed picker baseline 2026-04-21 15:29:23 +03:00
777genius
7a337b6268 feat(codex): add app-server model catalog 2026-04-21 12:45:34 +03:00
777genius
99102565f3 feat(ledger): integrate task change ledger functionality into file content resolution and review application processes 2026-04-21 12:25:42 +03:00
777genius
98a9c25cfe fix(validate): normalize provider backend ids 2026-04-20 22:07:02 +03:00
Илия
4931115b7a
feat(codex): rewrite to app-server rich variant Merge pull request #80 from 777genius/spike/codex-native-runtime-plan
Merge pull request #80 from 777genius/spike/codex-native-runtime-plan
2026-04-20 20:54:35 +03:00
777genius
19e7ea995e fix(ci): stabilize workspace test suite 2026-04-20 20:38:12 +03:00
777genius
a76404fec7 feat(agent-graph): add activity visibility toggle 2026-04-20 20:33:34 +03:00
777genius
5683973c04 feat(codex): add app-server account management and polish native UX 2026-04-20 20:18:21 +03:00
777genius
8093201b78 Merge remote-tracking branch 'origin/dev' into spike/codex-native-runtime-plan
# Conflicts:
#	docs/research/codex-native-runtime-integration-decision.md
2026-04-20 19:42:49 +03:00
777genius
8fa107d055 style(ci): normalize provisioning error throw formatting 2026-04-20 11:08:40 +03:00
777genius
5f05ab0919 fix(ci): restore dev validate after virtualization merge 2026-04-20 11:06:40 +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
777genius
63bc5ed866 fix(team): stabilize activity timeline virtualization 2026-04-20 08:59:38 +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
b9c2dd5480 perf(team): measureElement + suppress remount animation on virtualized rows
Fifth step of the virtualization plan. Two small, coupled changes that
make the virtualized path stable without a merged-ref helper.

- Attach `rowVirtualizer.measureElement` to the existing virtualizer
  wrapper div. Because the wrapper carries no padding or margin, its
  bounding box matches the inner row, so the observer ref (which stays
  on the inner AnimatedHeightReveal node) and the measure ref (on the
  outer wrapper) address the same effective height. No merged ref
  callback is needed.
- Suppress mount-based entry animation inside the virtualized path.
  The virtualizer mounts and unmounts rows as the user scrolls them in
  and out; without this, the "new item" fade would replay every time
  an older row re-entered the viewport. `renderTimelineRow` now takes
  an optional `suppressEntryAnimation` flag and forwards `isNew=false`
  to both `LeadThoughtsGroupRow` and `MemoizedMessageRowWithObserver`
  when set. The direct render path is unchanged.

Still dormant in this release — `viewport.virtualizationEnabled` stays
false at every call site. PR #6 adds the threshold gate, tests, and
opt-in wiring.
2026-04-20 00:49:48 +05:00
Mike
7c4247bc73 perf(team): virtualizer skeleton + measured scrollMargin (gated)
Fourth step of the virtualization plan. Adds `useVirtualizer` wiring
with a DOM-measured `scrollMargin`, gated behind
`viewport.virtualizationEnabled`. Dormant in this release — no caller
flips the flag yet — so behavior is unchanged.

- Imports `useVirtualizer` from `@tanstack/react-virtual`. Fixed
  per-kind estimates (`ROW_SIZE_ESTIMATES`) drive `estimateSize`. Keys
  come from `row.key`, so row identity matches the renderRows model.
- `shouldVirtualize` requires all of: contract says enabled, a scroll
  element ref is present, and there is at least one row. Otherwise the
  render falls back to the direct `renderRows.map(...)` path from PR
  #72.
- Measures `scrollMargin` via `ResizeObserver` on both the scroll
  element and the timeline root, plus `scroll` and `resize` listeners,
  all rAF-batched. Avoids hand-summed heights that drift when
  composer/status/padding change.
- Virtualized path renders an absolute-positioned list inside a sized
  container (`height = getTotalSize()`). `translateY` subtracts
  `scrollMargin` so rows align to the timeline's own origin rather
  than the scroll container's top.

This PR intentionally does *not* enable `measureElement` (PR #5) or
flip `virtualizationEnabled` for any layout (PR #6) — both rely on
this wiring landing first.
2026-04-20 00:48:23 +05:00
Mike
a43fedcaab refactor(team): flatten ActivityTimeline render into atomic rows
Third step of the virtualization plan. Pure refactor — no UI change, no
virtualization yet. Prepares the timeline for row-level windowing.

- Introduces `TimelineRow`, a discriminated union of `session-separator`,
  `lead-thought-group` (pinned and non-pinned), `compaction-divider`,
  and `message-row`. Each row maps 1:1 to a single visual element.
- Adds a `renderRows` useMemo that walks `timelineItems` once and emits
  atomic rows, hoisting session separators out of the Fragment bundle
  that used to pair them with their owning item. This is the shape a
  windowing layer needs: each row measurable and addressable
  independently.
- Extracts a `renderTimelineRow(row)` helper that switches on `row.kind`
  and returns the same JSX the previous inline render produced. Logic
  per kind is identical — keys, memoization, collapse props, pinned
  thought "live" semantics — so there is no visual diff.
- The render body collapses from two blocks (pinned + `.slice().map()`)
  into a single `renderRows.map(renderTimelineRow)` call.

Follow-ups will virtualize `renderRows` with measured row heights and
tighten observer/animation wiring; pagination, collapse state, zebra
striping, and `groupTimelineItems` are untouched.
2026-04-20 00:47:02 +05:00
777genius
1794e5be4e refactor(runtime): finalize codex native-only config contract 2026-04-19 22:44:48 +03:00
777genius
ee7deb15f7 fix(runtime): remove stale codex phase 4 branches 2026-04-19 22:39:16 +03:00
777genius
cb62acb4fb fix(team): harden restart and session refresh flows 2026-04-19 22:34:43 +03:00
777genius
5d014b375b fix(runtime): tighten codex native-only phase 4 truth 2026-04-19 22:29:26 +03:00
777genius
1f7dd2100f refactor(runtime): remove legacy codex lanes 2026-04-19 22:22:13 +03: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
777genius
4cab3052eb Merge branch 'dev' of https://github.com/777genius/claude_agent_teams_ui into dev 2026-04-19 22:05:40 +03:00
777genius
e9dd7e0920 refactor(team): simplify cache expiration logic in TeamMessageFeedService
- Removed unnecessary line break in cache expiration condition for improved readability.
2026-04-19 22:05:19 +03:00
777genius
41f0b0d1d1 feat(team): enhance TeamMessageFeedService caching and logging
- Introduced caching mechanism with expiration for message feeds to improve performance.
- Added logging for cache expiration events to aid in debugging.
- Updated MessagesPanel to reopen search bar when participant filters are active.
- Added test cases for handling tmux server errors and message panel behavior with filters.
2026-04-19 22:04:44 +03:00
777genius
83748673af fix(team): dedupe project path options 2026-04-19 21:49:40 +03:00
Mike
49e029163b refactor(team): wire scroll owners for MessagesPanel layouts
First step toward virtualizing ActivityTimeline. Makes the real scroll
container observable per layout, without changing behavior.

- `TeamDetailView` forwards `contentRef` to `MessagesPanel` as
  `inlineScrollContainerRef`. `MessagesPanel` accepts it as an optional
  prop (unused in this release) so a follow-up can wire the inline
  viewport to virtualization consumers.
- `MessagesPanel` creates `bottomSheetScrollRef` and passes it to
  `Sheet.Content scrollRef`. react-modal-sheet merges it with its
  internal scroll ref, so the element stays the same DOM node; this
  only exposes it to us.
- Sidebar already owns `sidebarScrollRef`; no change there.

Behavior is unchanged — this only exposes refs for the follow-up that
will thread a viewport contract into ActivityTimeline.
2026-04-19 23:41:33 +05:00
777genius
e90bdc5b7f feat(runtime): switch codex default to native with hidden fallback 2026-04-19 21:21:29 +03:00
777genius
358496c353 merge: integrate task stall monitor shadow rollout into dev 2026-04-19 21:17:25 +03:00
777genius
a8cca65658 feat(team): add task stall monitor shadow rollout 2026-04-19 21:17:09 +03:00