Commit graph

461 commits

Author SHA1 Message Date
Luis Novo
bdfdc9eecd
Merge pull request #404 from lfnovo/fix/cors-headers-on-error-responses
fix: add CORS headers to error responses and document file upload limits
2026-01-09 20:09:04 -03:00
LUIS NOVO
52177f7546 fix: add CORS headers to error responses and document file upload limits
- Added custom exception handler to ensure CORS headers are included in
  all HTTP error responses from the API
- Added documentation for 413 (Payload Too Large) errors when behind
  reverse proxies (nginx, traefik, kubernetes ingress)
- Added client_max_body_size to nginx configuration examples
- Documented how to configure CORS headers for proxy-level error responses

Fixes #401
2026-01-09 20:08:13 -03:00
Luis Novo
b045694992
Merge pull request #400 from lfnovo/fix/surrealdb-persistent-storage
fix: use persistent rocksdb storage instead of memory in docker-compose docs
2026-01-09 20:06:16 -03:00
Luis Novo
62730a9486
Merge pull request #402 from lfnovo/fix/model-duplicate-check-include-type
fix: include type in model duplicate check
2026-01-09 20:05:12 -03:00
LUIS NOVO
3c053c6eed fix: include type in model duplicate check
The model uniqueness constraint now considers (provider, name, type)
instead of just (provider, name). This allows users to add the same
model name for different purposes (e.g., language vs embedding).

Fixes #391
2026-01-09 20:00:20 -03:00
LUIS NOVO
fd03122aa3 fix: use persistent rocksdb storage instead of memory in docker-compose docs
Changed SurrealDB configuration from in-memory storage to RocksDB with
bind mounts for data persistence. Users' data will now survive container
restarts.

Fixes #398
2026-01-09 19:47:47 -03:00
Luis Novo
b8203db380
Merge pull request #396 from lfnovo/pr-346-mcp-integration
feat: add MCP integration documentation
2026-01-09 08:17:27 -03:00
Piotr Mrzygłowski
879e41a180 feat: add MCP integration documentation to README and create dedicated MCP integration guide 2026-01-09 08:14:39 -03:00
Luis Novo
76827af53f
Merge pull request #395 from lfnovo/docs/add-pull-policy-always
docs: add pull_policy always to docker-compose examples
2026-01-09 08:00:20 -03:00
LUIS NOVO
fb6dd01111 docs: add pull_policy always to docker-compose examples
Add pull_policy: always to all open_notebook service definitions
in docker-compose examples across documentation. This ensures
Docker always checks for and pulls newer images when running
docker compose up.

Closes #393
2026-01-09 07:57:25 -03:00
Luis Novo
2f98665676
Merge pull request #386 from jonigl/docs/fix-readme-assets
docs: fix removed assets in PR #379 affecting README.md
2026-01-09 07:54:34 -03:00
Luis Novo
6e5a856c99
Merge pull request #387 from M-Amrollahi/main
Update Doc for docker compose
2026-01-09 07:53:41 -03:00
Luis Novo
06b07df684
Merge pull request #394 from lfnovo/chore/remove-unused-addbutton
chore: remove unused AddButton component
2026-01-08 16:07:56 -03:00
LUIS NOVO
c15a563f26 chore: remove outdated new_docs folder
The new_docs folder contained stale documentation that was superseded
by the updated docs/ folder. The docs/ version has:
- LM Studio alternative instructions
- Updated architecture (single container, port 8502)
2026-01-08 16:02:52 -03:00
LUIS NOVO
a41703fbac chore: remove unused AddButton component
The AddButton component was never imported or used anywhere in the
application. Notebook creation is already implemented and working via:
- "New Notebook" button on the notebooks page
- "Create" button in the sidebar
- "Create Notebook" command in the command palette

Closes #390
2026-01-08 15:56:26 -03:00
Mahdi Amrollahi
31d4a0c84f
Merge pull request #1 from M-Amrollahi/M-Amrollahi-patch-1
Clarify Ollama API base URL in docker-compose.md
2026-01-06 20:48:43 -05:00
Mahdi Amrollahi
7a4ade612a
Clarify Ollama API base URL in docker-compose.md
Updated references to Ollama API base URL in documentation.
2026-01-06 17:21:40 -05:00
Jonathan Gastón Löwenstern
7252c05d33 docs: fix removed assets in https://github.com/lfnovo/open-notebook/pull/379 affecting README.md 2026-01-06 15:07:58 +01:00
Luis Novo
e69485bb72
Merge pull request #382 from thesohamdatta/fix/remove-debug-logging-prefixes
Remove debug prefixes from production error logging
2026-01-05 17:14:57 -03:00
Luis Novo
3695d6d475
Merge pull request #380 from lfnovo/fix/reduce-retry-log-noise
fix: reduce retry log noise during concurrent chunk processing
2026-01-05 17:14:25 -03:00
Soham Datta
ddfb754b48 Remove debug prefixes from production error logging 2026-01-05 22:22:34 +05:30
LUIS NOVO
48e2800211 fix: reduce retry log noise during concurrent chunk processing
Addresses issue #362 - users were seeing hundreds of ERROR/WARNING logs
when processing large documents due to SurrealDB v2 transaction conflicts
during concurrent chunk embedding operations.

Changes:
- Upgraded to surreal-commands v1.3.0 which includes retry_log_level feature
- Increased retry attempts from 5 to 15 with max wait time 120s (from 30s)
  to handle deep queues during concurrent processing
- Set retry_log_level to "debug" in embed_chunk and process_source commands
- Changed repository.py RuntimeError logging from ERROR to DEBUG level
- Updated command exception handlers to log retries at DEBUG level
- Updated documentation to reflect retry strategy

This is a temporary workaround for SurrealDB v2.x transaction conflict
issues with SEARCH indexes. Settings can be reduced after migrating to
SurrealDB v3 which fixes the underlying concurrency issue.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-05 11:30:55 -03:00
Luis Novo
b76af505b2
Merge pull request #379 from lfnovo/refactor/folder-reorg
refactor: Major codebase reorganization and documentation overhaul
2026-01-05 08:38:34 -03:00
LUIS NOVO
b1bd522c5c feat: improve dev commands, update all langchain dependencies to their latest major versions 2026-01-05 08:22:41 -03:00
LUIS NOVO
77feff344f chore: bump 2026-01-04 11:44:58 -03:00
LUIS NOVO
472d0e47c3 docs: Lots of documentation improvements 2026-01-04 11:42:13 -03:00
LUIS NOVO
ea7a41077b docs: update all database examples for more clarity and better database names. 2026-01-04 09:23:15 -03:00
LUIS NOVO
655d164fa0 docs: update quick start guides and core concepts for clarity and accuracy 2026-01-04 09:09:20 -03:00
LUIS NOVO
e13e4a2d8b docs: restructure documentation with new organized layout
- Replace old docs structure with new comprehensive documentation
- Organize into 8 major sections (0-START-HERE through 7-DEVELOPMENT)
- Convert CONFIGURATION.md, CONTRIBUTING.md, MAINTAINER_GUIDE.md to redirects
- Remove outdated MIGRATION.md and DESIGN_PRINCIPLES.md
- Fix all internal documentation links and cross-references
- Add progressive disclosure paths for different user types
- Include 44 focused guides covering all features
- Update README.md to remove v1.0 breaking changes notice
2026-01-03 20:10:24 -03:00
LUIS NOVO
71b8d13b24 docs: generate comprehensive CLAUDE.md reference documentation across codebase
Create a hierarchical CLAUDE.md documentation system for the entire Open Notebook
codebase with focus on concise, pattern-driven reference cards rather than
comprehensive tutorials.

## Changes

### Core Documentation System
- Updated `.claude/commands/build-claude-md.md` to distinguish between leaf and
  parent modules, with special handling for prompt/template modules
- Established clear patterns:
  * Leaf modules (40-70 lines): Components, hooks, API clients
  * Parent modules (50-150 lines): Architecture, cross-layer patterns, data flows
  * Template modules: Pattern focus, not catalog listings

### Generated Documentation
Created 15 CLAUDE.md reference files across the project:

**Frontend (React/Next.js)**
- frontend/src/CLAUDE.md: Architecture overview, data flow, three-tier design
- frontend/src/lib/hooks/CLAUDE.md: React Query patterns, state management
- frontend/src/lib/api/CLAUDE.md: Axios client, FormData handling, interceptors
- frontend/src/lib/stores/CLAUDE.md: Zustand state persistence, auth patterns
- frontend/src/components/ui/CLAUDE.md: Radix UI primitives, CVA styling

**Backend (Python/FastAPI)**
- open_notebook/CLAUDE.md: System architecture, layer interactions
- open_notebook/ai/CLAUDE.md: Model provisioning, Esperanto integration
- open_notebook/domain/CLAUDE.md: Data models, ObjectModel/RecordModel patterns
- open_notebook/database/CLAUDE.md: Repository pattern, async migrations
- open_notebook/graphs/CLAUDE.md: LangGraph workflows, async orchestration
- open_notebook/utils/CLAUDE.md: Cross-cutting utilities, context building
- open_notebook/podcasts/CLAUDE.md: Episode/speaker profiles, job tracking

**API & Other**
- api/CLAUDE.md: REST layer, service architecture
- commands/CLAUDE.md: Async command handlers, job queue patterns
- prompts/CLAUDE.md: Jinja2 templates, prompt engineering patterns (refactored)

**Project Root**
- CLAUDE.md: Project overview, three-tier architecture, tech stack, getting started

### Key Features
- Zero duplication: Parent modules reference child CLAUDE.md files, don't repeat them
- Pattern-focused: Emphasizes how components work together, not component catalogs
- Scannable: Short bullets, code examples only when necessary (1-2 per file)
- Practical: "How to extend" guides, quirks/gotchas for each module
- Navigation: Root CLAUDE.md acts as hub pointing to specialized documentation

### Cleanup
- Removed unused `batch_fix_services.py`
- Removed deprecated `open_notebook/plugins/podcasts.py`
- Updated .gitignore for documentation consistency

## Impact
New contributors can now:
1. Read root CLAUDE.md for system architecture (5 min)
2. Jump to specific layer documentation (frontend, api, open_notebook)
3. Dive into module-specific patterns in child CLAUDE.md files (1 min per module)
All documentation is lean, reference-focused, and avoids duplication.
2026-01-03 16:27:52 -03:00
LUIS NOVO
ab5560c9a2 refactor: reorganize folder structure for better maintainability
Changes:
- Move migrations/ under open_notebook/database/migrations/
- Extract AI models to open_notebook/ai/ (Model, ModelManager, provision)
- Extract podcasts to open_notebook/podcasts/ (EpisodeProfile, SpeakerProfile, PodcastEpisode)
- Reorganize prompts to mirror graphs structure (chat/, source_chat/)

This improves code organization by:
- Consolidating database concerns (migrations now with database code)
- Separating AI infrastructure from domain entities
- Isolating podcast feature into its own module
- Creating consistent prompt/graph naming conventions

All 52 tests pass.
2026-01-03 14:04:27 -03:00
Luis Novo
93cda6c42a
Merge pull request #304 from xeader/fix/issue-271.2-ui-not-responsive
feat(notebooks): improve layout responsiveness
2025-12-20 10:18:22 -03:00
Luis Novo
040cfbad88
Merge pull request #343 from lfnovo/fix/note-editor-fullscreen-observer-optimization
fix(ui): optimize MutationObserver in NoteEditorDialog
2025-12-20 10:16:49 -03:00
LUIS NOVO
2a4d98772b fix(ui): optimize MutationObserver in NoteEditorDialog
Only observe DOM mutations when dialog is open, preventing
unnecessary observer activity when the dialog is closed.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-20 10:13:49 -03:00
Luis Novo
a8bb88e10f
Merge pull request #305 from xeader/fix/issue-271.1-note-editor-not-full-screen
feat(notebooks): Enhance dialog content styling for fullscreen mode
2025-12-20 10:12:29 -03:00
Antonio Gatta
cdb074193f feat: support fullscreen mode in NoteEditorDialog
- Added `isEditorFullscreen` state to track fullscreen mode for the Markdown editor.
- Integrated `MutationObserver` to detect changes related to the `.w-md-editor-fullscreen` class.
- Adjusted dialog and editor styles dynamically based on fullscreen state using `cn`.
- Enhanced UX by resetting fullscreen state on dialog close.
2025-12-20 11:38:31 +01:00
Luis Novo
34aaad4162
Merge pull request #341 from lfnovo/fix/merge-conflict-insight-dialog
fix: resolve merge conflict in SourceInsightDialog
2025-12-19 23:12:15 -03:00
LUIS NOVO
79f4d5ea6a fix: resolve merge conflict in SourceInsightDialog
Add missing state variables and handlers for delete functionality
that were lost during merge of PRs #334 and #340
2025-12-19 23:10:49 -03:00
Luis Novo
d6eedde5a3
Merge pull request #333 from jflo/fix/strip-thinking-tags
fix: strip <think> tags from chat responses
2025-12-19 22:52:43 -03:00
Luis Novo
86329f406d
Merge pull request #334 from jflo/feat/delete-insight
feat: add delete insight functionality
2025-12-19 22:51:18 -03:00
Luis Novo
c41cc074b5
Merge branch 'main' into feat/delete-insight 2025-12-19 22:50:53 -03:00
Luis Novo
8fdb0f0539
Update frontend/src/components/source/SourceDetailContent.tsx
Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
2025-12-19 22:48:09 -03:00
Justin Florentine
c7de8ecd86
fix: address PR feedback for delete insight feature
- Fix AlertDialogAction closing before async delete completes by using
  asChild with Button and event.preventDefault()
- Add delete button to SourceInsightDialog header for consistent UX
- Add confirmation dialog in SourceInsightDialog
- Pass onDelete callback from SourceDetailContent to SourceInsightDialog

Addresses PR #334 feedback from lfnovo and cubic-dev-ai.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-19 20:45:11 -05:00
Justin Florentine
855e730577
fix: preserve AIMessage metadata when cleaning thinking content
Use model_copy() instead of creating new AIMessage to preserve
response_metadata, id, usage_metadata, etc. Also adds test coverage
for malformed thinking tags pattern.

Addresses PR #333 feedback from lfnovo and cubic-dev-ai.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-19 20:08:12 -05:00
Luis Novo
bbe06df7e4
Merge pull request #340 from lfnovo/fix/chat-model-selection
fix: chat model selection issues + Docker troubleshooting docs
2025-12-19 17:46:09 -03:00
LUIS NOVO
7f19c916ae feat: add View Source button to insight modal
- Add button to navigate from insight popup to its parent source
- Uses existing modal manager to open source detail view
- Shows button only when source_id is available
2025-12-19 17:10:55 -03:00
LUIS NOVO
a1d0a3a666 fix: allow model override before chat session exists
- Add pendingModelOverride state to useNotebookChat hook
- Store model selection when no session exists yet
- Apply pending model override when session is auto-created on first message
- Simplify ChatColumn by using new setModelOverride function
2025-12-19 16:55:26 -03:00
LUIS NOVO
e11f0a4db8 fix: resolve chat model selection and session display issues
- Add nullable_fields support to ObjectModel base class
- Configure ChatSession to allow model_override to be cleared to null
- Fix JSX conditional that rendered "0" when message_count was 0
- Display model name instead of raw ID in session manager

Fixes issues:
1. Switching to default model now persists correctly
2. Session list shows human-readable model names
3. Sessions with 0 messages no longer show "0" badge
2025-12-19 16:47:34 -03:00
LUIS NOVO
33b8f7a2b8 docs: add troubleshooting for common Docker installation issues
- Add fix for quotes in environment variables causing empty URL errors
- Add SurrealDB configuration section (single container includes DB, v2 only)
- Add network timeout fix for slow connections and Chinese users
- Update table of contents with new sections

Addresses feedback from issue #316
2025-12-19 16:30:55 -03:00
Justin Florentine
8644f1923c
feat: add delete insight functionality
Add ability to delete insights from sources with a confirmation dialog.
Uses AlertDialog component for a native React experience instead of
browser confirm().

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-18 18:04:41 -05:00