fix(chat): support shared trips and polish controls

This commit is contained in:
2026-03-09 22:04:53 +00:00
parent d8c8ecf2bd
commit c918c9ce2f
27 changed files with 521 additions and 15 deletions

View File

@@ -1,12 +1,12 @@
# Session Continuity
## Last Session (2026-03-09)
- Completed `chat-provider-fixes` follow-up round with three additional workstreams:
- `chat-tool-grounding-and-confirmation`: trip context now injects collection UUID for `get_trip_details`/`add_to_itinerary`; system prompt confirms only before first add action; tool error wording aligned with short-circuit regex (`get_weather` gap resolved)
- `chat-tool-output-cleanup`: `role=tool` messages hidden from display; tool outputs render as concise summaries; persisted tool rows reconstructed into `tool_results` on reload
- `embedded-chat-ux-polish`: provider/model selectors in compact settings dropdown; sidebar closed by default in embedded mode; bounded height; visible streaming indicator
- Completed final `chat-provider-fixes` follow-up round with three workstreams:
- `shared-trip-tool-access`: `get_trip_details` and `add_to_itinerary` now authorize `shared_with` members using `Q(user=user) | Q(shared_with=user)).distinct()`; `list_trips` remains owner-only
- `chat-regression-tests`: focused backend regression tests in `backend/server/chat/tests.py` for shared-trip access and required-param regex boundaries (9 tests, all pass)
- `chat-a11y-and-dropdown-polish`: aria-labels in `AITravelChat.svelte` now use i18n keys; settings dropdown closes on outside click and Escape; locale key parity across all 20 files
- All three workstreams passed reviewer + tester validation
- Prior session completed `chat-loop-hardening`, `default-ai-settings`, `suggestion-add-flow` — all reviewed and tested
- Prior sessions completed: `chat-loop-hardening`, `default-ai-settings`, `suggestion-add-flow`, `chat-tool-grounding-and-confirmation`, `chat-tool-output-cleanup`, `embedded-chat-ux-polish` — all reviewed and tested
## Active Work
- `chat-provider-fixes` plan complete — all workstreams implemented, reviewed, tested, documented
@@ -19,6 +19,6 @@
- No automated test coverage for `DaySuggestionsView.post()`
- No Playwright e2e test for tool summary reconstruction on conversation reload
- LLM-generated name/location fields not truncated to `max_length=200` before `LocationSerializer` (low risk)
- `aria-label` values in `AITravelChat.svelte` sidebar toggle and settings button are hardcoded English (should use `$t()`)
- `<details>` settings dropdown in embedded chat does not auto-close on outside click
- `get_trip_details` excludes `shared_with` members from `filter(user=user)` — shared users get UUID context but tool returns DoesNotExist (pre-existing, low severity)
- Non-English locale `chat_a11y` values are English placeholders — requires human translation (separate concern)
- `outsideEvents` array includes both `pointerdown` and `mousedown` — double-fires but idempotent; could simplify to `['pointerdown', 'touchstart']`
- Escape handler in settings dropdown lacks `settingsOpen` guard — idempotent no-op, no functional consequence