77 lines
3.9 KiB
Markdown
77 lines
3.9 KiB
Markdown
---
|
|
id: "02-context-hover-ui"
|
|
title: "Show compactions in context hover"
|
|
status: done
|
|
wave: 2
|
|
depends_on: ["01-persist-compaction-count"]
|
|
plan: "plan.md"
|
|
spec: "../../specs/ui/requirements/context-compaction-count.md"
|
|
---
|
|
|
|
# Task 02: Show compactions in context hover
|
|
|
|
## Intent
|
|
|
|
Carry the persisted count through live and hydrated frontend state, then show it with an accessible, translated accuracy disclosure in the existing context hover on every viewport.
|
|
|
|
## Acceptance
|
|
|
|
- Live session patches and page hydration populate `ContextWindowEntry.compactionCount`, treating absent, invalid, or negative legacy values as zero.
|
|
- The existing context hover shows zero and non-zero counts and explains that Kandev infers them from token drops, so missing samples or provider resets can make the value approximate.
|
|
- The shared inline help remains accessible by pointer, keyboard, and touch without nesting another tooltip or changing the existing desktop/mobile composition.
|
|
|
|
## TDD sequence
|
|
|
|
1. Add parser, live-handler, hydration-hook, and rendered-hover cases; run them and confirm count expectations fail.
|
|
2. Add English i18n keys, regenerate the pseudo locale, and implement the smallest state/hook/UI changes.
|
|
3. Rerun the exact tests, typecheck, and i18n checks; refactor only where needed to keep the component within repository limits.
|
|
|
|
## Files likely touched
|
|
|
|
- `apps/web/lib/state/slices/session-runtime/types.ts`
|
|
- `apps/web/lib/state/slices/session-runtime/context-window.ts`
|
|
- `apps/web/lib/state/slices/session-runtime/context-window.test.ts`
|
|
- `apps/web/lib/ws/handlers/agent-session.ts`
|
|
- `apps/web/lib/ws/handlers/agent-session.test.ts`
|
|
- `apps/web/hooks/domains/session/use-session-context-window.ts`
|
|
- `apps/web/hooks/domains/session/use-session-context-window.test.ts`
|
|
- `apps/web/components/task/chat/token-usage-display.tsx`
|
|
- `apps/web/components/task/chat/token-usage-display.test.tsx`
|
|
- `apps/web/src/locales/en/common.json`
|
|
- `apps/web/src/locales/pseudo/common.json`
|
|
|
|
## Dependencies
|
|
|
|
Task 01, which defines the persisted and live metadata field.
|
|
|
|
## Parallelism
|
|
|
|
`sequential` — the UI consumes the backend metadata contract and shares its state/parser files with all hover behavior.
|
|
|
|
## Verification
|
|
|
|
- `cd apps && pnpm install --frozen-lockfile`
|
|
- `cd apps && pnpm --filter @kandev/web test -- --run lib/state/slices/session-runtime/context-window.test.ts lib/ws/handlers/agent-session.test.ts hooks/domains/session/use-session-context-window.test.ts components/task/chat/token-usage-display.test.tsx`
|
|
- `cd apps/web && pnpm run typecheck`
|
|
- `cd apps && pnpm --filter @kandev/web run i18n:check`
|
|
|
|
## Inputs
|
|
|
|
- Spec `What`, `API surface`, and the final scenario.
|
|
- Frontend state flow and i18n rules in `apps/web/AGENTS.md`.
|
|
- Mobile content-only guidance in `.agents/skills/mobile-parity/SKILL.md`.
|
|
- Existing source disclosure and pinnable parent hover in `apps/web/components/task/chat/token-usage-display.tsx`.
|
|
|
|
## Output contract
|
|
|
|
Report the result, actual files changed, exact tests and counts, translated keys, rendered-check status, blockers, risks, and synchronized task/plan status in this conversation.
|
|
|
|
## Results
|
|
|
|
- RED: the rendered-hover case failed before the count row existed; parser/live-handler tests also established the missing-field baseline.
|
|
- GREEN: `cd apps && pnpm --filter @kandev/web test -- --run lib/state/slices/session-runtime/context-window.test.ts lib/ws/handlers/agent-session.test.ts hooks/domains/session/use-session-context-window.test.ts components/task/chat/token-usage-display.test.tsx` — 4 files passed, 68 tests passed.
|
|
- `cd apps/web && pnpm run typecheck` — passed.
|
|
- `cd apps && pnpm --filter @kandev/web run i18n:check` — passed; English and pseudo locale contain the three new keys.
|
|
- `cd apps && pnpm --filter @kandev/web run i18n:ratchet` — passed.
|
|
- Public docs impact: updated `docs/public/sessions-and-review.md` with the inferred-count limitation; public-doc validation passed.
|