Commit graph

703 commits

Author SHA1 Message Date
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
Justin Florentine
869664a10b
fix: strip <think> tags from chat responses
Add thinking content cleaning to notebook and source chat graphs.
Previously, models that output <think>...</think> tags (like DeepSeek)
or malformed variants without opening tags (like Nemotron) would leak
reasoning content into user-visible responses.

Changes:
- chat.py: Clean AI response content before returning messages
- source_chat.py: Same fix for source-specific chat
- text_utils.py: Handle malformed output where opening <think> tag
  is missing but </think> is present

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-18 16:31:23 -05:00
Luis Novo
65166d4d2a
Merge pull request #326 from lfnovo/fix-ollama-json
chore: bump esperanto to fix ollama json
2025-12-15 21:56:32 -03:00
LUIS NOVO
f98522606d chore: bump esperanto to fix ollama json 2025-12-15 21:55:28 -03:00
Luis Novo
040e7ccf42
Merge pull request #325 from lfnovo/feat/ui-improv
feat: UI improvements and bug fixes
2025-12-14 22:24:15 -03:00
LUIS NOVO
26e989fdbb fix: query key consistency and timeout configuration
- Use QUERY_KEYS.sourcesInfinite for infinite scroll query key
  Starting with ['sources', ...] ensures mutations that invalidate
  ['sources'] will also invalidate the infinite scroll cache

- Use httpx.Timeout for chat service with short connect (10s) and
  long read (600s) timeouts. Prevents 10 min wait on connection errors
2025-12-14 21:55:38 -03:00
LUIS NOVO
1be8ef1116 chore: bump to 1.2.4 2025-12-14 21:34:49 -03:00
LUIS NOVO
5eac002b91 bump: fix ssl issue with langchain - relates to #274 2025-12-14 21:33:31 -03:00
Luis Novo
8b37104040
Merge pull request #323 from talkenigs/fix/start-all-flow
fix(install): specify docker compose and port
2025-12-14 19:49:29 -03:00