changes
This commit is contained in:
@@ -1,3 +1,9 @@
|
||||
---
|
||||
title: decisions
|
||||
type: note
|
||||
permalink: voyage/decisions
|
||||
---
|
||||
|
||||
# Voyage — Decisions Log
|
||||
|
||||
## Fork from AdventureLog
|
||||
@@ -391,4 +397,4 @@
|
||||
- **Regression tests verified**: `test_get_trip_details_owner_also_in_shared_with_avoids_duplicates` (tests.py:53-59) and `test_add_to_itinerary_owner_also_in_shared_with_avoids_duplicates` (tests.py:81-96) both add owner to `shared_with` and exercise the exact codepath that would raise `MultipleObjectsReturned` without `.distinct()`.
|
||||
- **No new issues introduced**: `.distinct()` placement in ORM chain is correct, no logic changes to error handling or return shapes, no mutations to other code paths.
|
||||
- **Reference**: See [Plan: Chat provider fixes](plans/chat-provider-fixes.md#shared-trip-tool-access)
|
||||
- **Date**: 2026-03-09
|
||||
- **Date**: 2026-03-09
|
||||
@@ -1,3 +1,9 @@
|
||||
---
|
||||
title: knowledge
|
||||
type: note
|
||||
permalink: voyage/knowledge
|
||||
---
|
||||
|
||||
# DEPRECATED — Migrated to nested structure (2026-03-09)
|
||||
|
||||
This file has been superseded. Content has been migrated to:
|
||||
@@ -10,4 +16,4 @@ This file has been superseded. Content has been migrated to:
|
||||
- **[knowledge/domain/collections-and-sharing.md](knowledge/domain/collections-and-sharing.md)** — Collection sharing, itinerary, user preferences
|
||||
- **[knowledge/domain/ai-configuration.md](knowledge/domain/ai-configuration.md)** — WS1 config infrastructure, frontend gaps
|
||||
|
||||
See [manifest.yaml](manifest.yaml) for the full index.
|
||||
See [manifest.yaml](manifest.yaml) for the full index.
|
||||
@@ -1,3 +1,9 @@
|
||||
---
|
||||
title: conventions
|
||||
type: note
|
||||
permalink: voyage/knowledge/conventions
|
||||
---
|
||||
|
||||
# Coding Conventions & Patterns
|
||||
|
||||
## Frontend Patterns
|
||||
@@ -18,4 +24,4 @@
|
||||
- Do **not** attempt to fix known test/configuration issues as part of feature work
|
||||
- Use `bun` for frontend commands, `uv` for local Python tooling where applicable
|
||||
- Commit and merge completed feature branches promptly once validation passes (avoid leaving finished work unmerged)
|
||||
- See [decisions.md](../decisions.md#workflow-preference-commit--merge-when-done) for rationale
|
||||
- See [decisions.md](../decisions.md#workflow-preference-commit--merge-when-done) for rationale
|
||||
@@ -1,3 +1,9 @@
|
||||
---
|
||||
title: ai-configuration
|
||||
type: note
|
||||
permalink: voyage/knowledge/domain/ai-configuration
|
||||
---
|
||||
|
||||
# AI Configuration Domain
|
||||
|
||||
## WS1 Configuration Infrastructure
|
||||
@@ -41,4 +47,4 @@ Three compounding issues (all resolved):
|
||||
| Fallback key | `backend/server/chat/llm_client.py` | `get_llm_api_key()` |
|
||||
| UserAISettings model | `backend/server/integrations/models.py` | after UserAPIKey |
|
||||
| Catalog user flags | `backend/server/chat/llm_client.py` | `get_provider_catalog()` |
|
||||
| Provider view | `backend/server/chat/views/__init__.py` | `ChatProviderCatalogViewSet` |
|
||||
| Provider view | `backend/server/chat/views/__init__.py` | `ChatProviderCatalogViewSet` |
|
||||
@@ -1,3 +1,9 @@
|
||||
---
|
||||
title: collections-and-sharing
|
||||
type: note
|
||||
permalink: voyage/knowledge/domain/collections-and-sharing
|
||||
---
|
||||
|
||||
# Collections & Sharing Domain
|
||||
|
||||
## Collection Sharing Architecture
|
||||
@@ -65,4 +71,4 @@ Backend-only feature: model, API, and system-prompt integration exist, but **no
|
||||
### Frontend Gap
|
||||
- No settings tab for manual preference editing
|
||||
- TypeScript type available as `UserRecommendationPreferenceProfile` in `src/lib/types.ts`
|
||||
- See [Plan: AI travel agent redesign](../../plans/ai-travel-agent-redesign.md#ws2-user-preference-learning)
|
||||
- See [Plan: AI travel agent redesign](../../plans/ai-travel-agent-redesign.md#ws2-user-preference-learning)
|
||||
@@ -1,3 +1,9 @@
|
||||
---
|
||||
title: overview
|
||||
type: note
|
||||
permalink: voyage/knowledge/overview
|
||||
---
|
||||
|
||||
# Architecture Overview
|
||||
|
||||
## API Proxy Pattern
|
||||
@@ -40,4 +46,4 @@ Session-based via `django-allauth`. CSRF tokens from `/auth/csrf/`, passed as `X
|
||||
- i18n: `frontend/src/locales/`
|
||||
- Docker config: `docker-compose.yml`, `docker-compose.dev.yml`
|
||||
- CI/CD: `.github/workflows/`
|
||||
- Public docs: `documentation/` (VitePress)
|
||||
- Public docs: `documentation/` (VitePress)
|
||||
@@ -1,3 +1,9 @@
|
||||
---
|
||||
title: chat-and-llm
|
||||
type: note
|
||||
permalink: voyage/knowledge/patterns/chat-and-llm
|
||||
---
|
||||
|
||||
# Chat & LLM Patterns
|
||||
|
||||
## Default AI Settings & Model Override
|
||||
@@ -164,4 +170,4 @@ All tool functions: `def tool_name(user, **kwargs) -> dict`. Return `{"error": "
|
||||
## WS4-F3 Add-to-itinerary from Chat
|
||||
- `search_places` card results can be added directly to itinerary when collection context exists
|
||||
- Flow: date selector modal -> `POST /api/locations/` -> `POST /api/itineraries/` -> `itemAdded` event
|
||||
- Coordinate guard (`hasPlaceCoordinates`) required
|
||||
- Coordinate guard (`hasPlaceCoordinates`) required
|
||||
@@ -1,3 +1,9 @@
|
||||
---
|
||||
title: tech-stack
|
||||
type: note
|
||||
permalink: voyage/knowledge/tech-stack
|
||||
---
|
||||
|
||||
# Tech Stack & Development
|
||||
|
||||
## Stack
|
||||
@@ -62,4 +68,4 @@ LLM provider keys stored per-user in DB (`UserAPIKey` model, `integrations/model
|
||||
- Docker dev setup has frontend-backend communication issues (500 errors beyond homepage)
|
||||
- Frontend check: 0 errors, 6 warnings expected (pre-existing in `CollectionRecommendationView.svelte` + `RegionCard.svelte`)
|
||||
- Backend tests: 6/30 pre-existing failures (2 user email key errors + 4 geocoding API mocks)
|
||||
- Local Python pip install fails (network timeouts) — use Docker
|
||||
- Local Python pip install fails (network timeouts) — use Docker
|
||||
@@ -1,3 +1,9 @@
|
||||
---
|
||||
title: ai-travel-agent-collections-integration
|
||||
type: note
|
||||
permalink: voyage/plans/ai-travel-agent-collections-integration
|
||||
---
|
||||
|
||||
# Plan: AI travel agent in Collections Recommendations
|
||||
|
||||
## Clarified requirements
|
||||
@@ -105,4 +111,4 @@
|
||||
- [x] WS2-F2 OpenCode Zen provider support (Tier 2)
|
||||
- [x] WS1-F1 Embed AI chat into Collections Recommendations (Tier 2)
|
||||
- [x] WS1-F2 Remove standalone `/chat` route (Tier 2)
|
||||
- [x] Documentation coverage + knowledge sync (Librarian)
|
||||
- [x] Documentation coverage + knowledge sync (Librarian)
|
||||
@@ -1,3 +1,9 @@
|
||||
---
|
||||
title: ai-travel-agent-redesign
|
||||
type: note
|
||||
permalink: voyage/plans/ai-travel-agent-redesign
|
||||
---
|
||||
|
||||
# AI Travel Agent Redesign Plan
|
||||
|
||||
## Vision Summary
|
||||
@@ -335,4 +341,4 @@ See [Project Knowledge — WS4-F4 Chat UI Rendering](../knowledge.md#ws4-f4-chat
|
||||
- WSGI→ASGI migration (keep current async-in-sync pattern)
|
||||
- Role-based permissions (all shared users have same access)
|
||||
- Real-time collaboration (WebSocket sync)
|
||||
- Mobile-specific optimizations
|
||||
- Mobile-specific optimizations
|
||||
@@ -1,3 +1,9 @@
|
||||
---
|
||||
title: chat-provider-fixes
|
||||
type: note
|
||||
permalink: voyage/plans/chat-provider-fixes
|
||||
---
|
||||
|
||||
# Chat Provider Fixes
|
||||
|
||||
## Problem Statement
|
||||
@@ -580,4 +586,4 @@ See [decisions.md](../decisions.md#correctness-review-chat-regression-tests).
|
||||
- Prior tester finding (chat-tool-grounding-and-confirmation adversarial item 5): shared-member `get_trip_details` returns DoesNotExist — **CONTRADICTED / RESOLVED** by `shared-trip-tool-access` fix. Confirmed by `test_get_trip_details_allows_shared_user_access` passing in this run.
|
||||
- Prior tester finding (chat-loop-hardening): `get_weather` "dates must be a non-empty list" did not short-circuit — **RESOLVED** by `chat-tool-grounding-and-confirmation`. Confirmed by `test_dates_is_required_matches_required_param_short_circuit` passing.
|
||||
|
||||
**Reviewer optional suggestions** (not blocking, not addressed): (1) split `test_non_member_access_remains_denied` into two test methods; (2) add explicit multi-param positive regex case. Neither represents a coverage gap for the fixed behavior.
|
||||
**Reviewer optional suggestions** (not blocking, not addressed): (1) split `test_non_member_access_remains_denied` into two test methods; (2) add explicit multi-param positive regex case. Neither represents a coverage gap for the fixed behavior.
|
||||
@@ -1,3 +1,9 @@
|
||||
---
|
||||
title: opencode-zen-connection-error
|
||||
type: note
|
||||
permalink: voyage/plans/opencode-zen-connection-error
|
||||
---
|
||||
|
||||
# Plan: Fix OpenCode Zen connection errors in AI travel chat
|
||||
|
||||
## Clarified requirements
|
||||
@@ -398,4 +404,4 @@ The plan is well-scoped, targets a verified root cause with clear code reference
|
||||
- `docs/docs/configuration/advanced_configuration.md` — Chat uses per-user API keys (no server-side env vars); no config changes to document.
|
||||
|
||||
### Task tracker
|
||||
- [x] Documentation and knowledge sync for provider troubleshooting notes (Agent: librarian)
|
||||
- [x] Documentation and knowledge sync for provider troubleshooting notes (Agent: librarian)
|
||||
@@ -1,3 +1,9 @@
|
||||
---
|
||||
title: pre-release-and-memory-migration
|
||||
type: note
|
||||
permalink: voyage/plans/pre-release-and-memory-migration
|
||||
---
|
||||
|
||||
# Plan: Pre-release policy + .memory migration
|
||||
|
||||
## Scope
|
||||
@@ -33,4 +39,4 @@
|
||||
| `knowledge.md` §WS1 Config, §Frontend Gaps | `knowledge/domain/ai-configuration.md` | AI configuration domain |
|
||||
| (new) | `sessions/continuity.md` | Session continuity notes |
|
||||
| (new) | `gates/.gitkeep` | Quality gates directory placeholder |
|
||||
| `knowledge.md` | `knowledge.md` (DEPRECATED) | Deprecation notice with pointers to new locations |
|
||||
| `knowledge.md` | `knowledge.md` (DEPRECATED) | Deprecation notice with pointers to new locations |
|
||||
@@ -1,3 +1,9 @@
|
||||
---
|
||||
title: travel-agent-context-and-models
|
||||
type: note
|
||||
permalink: voyage/plans/travel-agent-context-and-models
|
||||
---
|
||||
|
||||
# Plan: Travel Agent Context + Models Follow-up
|
||||
|
||||
## Scope
|
||||
@@ -672,4 +678,4 @@ Replacing LiteLLM is not warranted. Every Voyage issue is in the integration lay
|
||||
- **No production project does universal runtime model discovery** — all use curated/admin-managed lists
|
||||
- **Every production LiteLLM user has retry logic** — Voyage is the outlier with zero retries
|
||||
- **Tool-call capability guards** are standard (`litellm.supports_function_calling()` used by PraisonAI, open-interpreter, mem0, ragbits, dspy)
|
||||
- **Rate-limit resilience** ranges from simple `num_retries` to full `litellm.Router` with `RetryPolicy` and cross-model fallbacks
|
||||
- **Rate-limit resilience** ranges from simple `num_retries` to full `litellm.Router` with `RetryPolicy` and cross-model fallbacks
|
||||
@@ -1,3 +1,9 @@
|
||||
---
|
||||
title: auto-learn-preference-signals
|
||||
type: note
|
||||
permalink: voyage/research/auto-learn-preference-signals
|
||||
---
|
||||
|
||||
# Research: Auto-Learn User Preference Signals
|
||||
|
||||
## Purpose
|
||||
@@ -127,4 +133,4 @@ def build_auto_preference_profile(user) -> dict:
|
||||
flow directly into AI context with zero additional changes needed there.
|
||||
|
||||
See: [knowledge.md — User Recommendation Preference Profile](../knowledge.md#user-recommendation-preference-profile)
|
||||
See: [plans/ai-travel-agent-redesign.md — WS2](../plans/ai-travel-agent-redesign.md#ws2-user-preference-learning)
|
||||
See: [plans/ai-travel-agent-redesign.md — WS2](../plans/ai-travel-agent-redesign.md#ws2-user-preference-learning)
|
||||
@@ -1,3 +1,9 @@
|
||||
---
|
||||
title: litellm-zen-provider-catalog
|
||||
type: note
|
||||
permalink: voyage/research/litellm-zen-provider-catalog
|
||||
---
|
||||
|
||||
# Research: LiteLLM provider catalog and OpenCode Zen support
|
||||
|
||||
Date: 2026-03-08
|
||||
@@ -32,4 +38,4 @@ Related plan: [AI travel agent in Collections Recommendations](../plans/ai-trave
|
||||
|
||||
## Risks
|
||||
- Zen model names may evolve; keep default model configurable in backend mapping.
|
||||
- Full provider list is large; UI should communicate unavailable-for-chat providers clearly.
|
||||
- Full provider list is large; UI should communicate unavailable-for-chat providers clearly.
|
||||
@@ -1,3 +1,9 @@
|
||||
---
|
||||
title: opencode-zen-connection-debug
|
||||
type: note
|
||||
permalink: voyage/research/opencode-zen-connection-debug
|
||||
---
|
||||
|
||||
# OpenCode Zen Connection Debug — Research Findings
|
||||
|
||||
**Date**: 2026-03-08
|
||||
@@ -300,4 +306,4 @@ Exception: `opencode_zen` and `openrouter` accept any prefix (they're routing ga
|
||||
|
||||
- See [Plan: OpenCode Zen connection error](../plans/opencode-zen-connection-error.md)
|
||||
- See [Research: LiteLLM provider catalog](litellm-zen-provider-catalog.md)
|
||||
- See [Knowledge: AI Chat](../knowledge.md#ai-chat-collections--recommendations)
|
||||
- See [Knowledge: AI Chat](../knowledge.md#ai-chat-collections--recommendations)
|
||||
@@ -1,3 +1,9 @@
|
||||
---
|
||||
title: provider-strategy
|
||||
type: note
|
||||
permalink: voyage/research/provider-strategy
|
||||
---
|
||||
|
||||
# Research: Multi-Provider Strategy for Voyage AI Chat
|
||||
|
||||
**Date**: 2026-03-09
|
||||
@@ -195,4 +201,4 @@ Should use provider_config default or user-selected model.
|
||||
- See [Research: LiteLLM provider catalog](litellm-zen-provider-catalog.md)
|
||||
- See [Research: OpenCode Zen connection debug](opencode-zen-connection-debug.md)
|
||||
- See [Plan: Travel agent context + models](../plans/travel-agent-context-and-models.md)
|
||||
- See [Decisions: Critic Gate](../decisions.md#critic-gate-travel-agent-context--models-follow-up)
|
||||
- See [Decisions: Critic Gate](../decisions.md#critic-gate-travel-agent-context--models-follow-up)
|
||||
@@ -1,3 +1,9 @@
|
||||
---
|
||||
title: continuity
|
||||
type: note
|
||||
permalink: voyage/sessions/continuity
|
||||
---
|
||||
|
||||
# Session Continuity
|
||||
|
||||
## Last Session (2026-03-09)
|
||||
@@ -21,4 +27,4 @@
|
||||
- LLM-generated name/location fields not truncated to `max_length=200` before `LocationSerializer` (low risk)
|
||||
- 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
|
||||
- Escape handler in settings dropdown lacks `settingsOpen` guard — idempotent no-op, no functional consequence
|
||||
@@ -1 +1,7 @@
|
||||
Voyage is a self-hosted travel companion web app (fork of AdventureLog) built with SvelteKit 2 (TypeScript) frontend, Django REST Framework (Python) backend, PostgreSQL/PostGIS, Memcached, and Docker. It provides trip planning with collections/itineraries, AI-powered travel chat with multi-provider LLM support (via LiteLLM), location/lodging/transportation management, user preference learning, and collaborative trip sharing. The project is pre-release — architecture-level changes are allowed. See [knowledge/overview.md](knowledge/overview.md) for architecture and [decisions.md](decisions.md) for ADRs.
|
||||
---
|
||||
title: system
|
||||
type: note
|
||||
permalink: voyage/system
|
||||
---
|
||||
|
||||
Voyage is a self-hosted travel companion web app (fork of AdventureLog) built with SvelteKit 2 (TypeScript) frontend, Django REST Framework (Python) backend, PostgreSQL/PostGIS, Memcached, and Docker. It provides trip planning with collections/itineraries, AI-powered travel chat with multi-provider LLM support (via LiteLLM), location/lodging/transportation management, user preference learning, and collaborative trip sharing. The project is pre-release — architecture-level changes are allowed. See [knowledge/overview.md](knowledge/overview.md) for architecture and [decisions.md](decisions.md) for ADRs.
|
||||
Reference in New Issue
Block a user