Paul Hernandez
a7d7cc5ee6
fix: Normalize YAML frontmatter types to prevent AttributeError ( #236 ) ( #402 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
Co-authored-by: Claude <noreply@anthropic.com >
2025-10-27 09:19:50 -05:00
Paul Hernandez
c7e6eab02f
feat: Add delete_notes parameter to remove project endpoint ( #391 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
Co-authored-by: Claude <noreply@anthropic.com >
2025-10-21 14:09:20 -05:00
Paul Hernandez
bb8da31472
fix: Handle null, empty, and string 'None' title in markdown frontmatter ( #387 ) ( #389 )
...
Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Paul Hernandez <phernandez@users.noreply.github.com >
2025-10-21 09:29:19 -05:00
Paul Hernandez
e78345ff25
feat: Streaming Foundation & Async I/O Consolidation (SPEC-19) ( #384 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
Co-authored-by: Claude <noreply@anthropic.com >
2025-10-21 09:03:59 -05:00
Paul Hernandez
32236cd247
fix: Handle YAML parsing errors gracefully in update_frontmatter ( #378 ) ( #379 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
Co-authored-by: Claude <noreply@anthropic.com >
2025-10-16 20:17:58 -05:00
Paul Hernandez
4fd6d0c648
fix: Optimize sync memory usage to prevent OOM on large projects ( #380 )
...
Signed-off-by: Claude <noreply@anthropic.com >
Signed-off-by: phernandez <paul@basicmachines.co >
2025-10-16 20:17:34 -05:00
Paul Hernandez
e6c8e3662c
fix: preserve mtime webdav upload 376 ( #377 )
...
Signed-off-by: Claude <noreply@anthropic.com >
Signed-off-by: phernandez <paul@basicmachines.co >
Co-authored-by: Claude <noreply@anthropic.com >
2025-10-16 17:18:10 -05:00
Paul Hernandez
449b62d947
fix: Prevent deleted projects from being recreated by background sync ( #193 ) ( #370 )
...
Signed-off-by: Claude <noreply@anthropic.com >
Signed-off-by: phernandez <paul@basicmachines.co >
2025-10-16 15:16:24 -05:00
Paul Hernandez
b7497d7484
fix: Use filesystem timestamps for entity sync instead of database operation time ( #138 ) ( #369 )
...
Signed-off-by: Claude <noreply@anthropic.com >
Signed-off-by: phernandez <paul@basicmachines.co >
2025-10-16 14:21:27 -05:00
Paul Hernandez
d1431bdb1b
fix: Handle YAML parsing errors and missing entity_type in markdown files ( #368 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
Co-authored-by: Claude <noreply@anthropic.com >
2025-10-16 13:18:58 -05:00
Paul Hernandez
171bef717f
fix: Resolve UNIQUE constraint violation in entity upsert with observations ( #187 ) ( #367 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
Co-authored-by: Claude <noreply@anthropic.com >
2025-10-16 12:30:56 -05:00
Paul Hernandez
729a5a3b8d
fix: Terminate sync immediately when project is deleted ( #366 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
Co-authored-by: Claude <noreply@anthropic.com >
2025-10-16 11:07:12 -05:00
Paul Hernandez
434cdf24dd
feat: Add circuit breaker for file sync failures ( #364 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
Co-authored-by: Claude <noreply@anthropic.com >
2025-10-16 09:47:48 -05:00
Paul Hernandez
7f9c1a97a4
feat: Add --verbose and --no-gitignore options to cloud upload ( #362 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
Co-authored-by: Claude <noreply@anthropic.com >
2025-10-15 20:03:36 -05:00
Paul Hernandez
53fb13b054
fix: Make project creation endpoint idempotent ( #357 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
Co-authored-by: Claude <noreply@anthropic.com >
2025-10-15 19:27:41 -05:00
Paul Hernandez
bd6c8348b8
fix: Handle None text values in Claude conversations importer ( #353 )
...
Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Paul Hernandez <phernandez@users.noreply.github.com >
2025-10-15 16:08:57 -05:00
phernandez
994c8b8e7e
chore: update version to 0.15.2 for v0.15.2 release
2025-10-14 09:36:47 -05:00
phernandez
a78e8c3ac5
style: Apply linter formatting changes
2025-10-14 09:34:10 -05:00
phernandez
53900c5baa
fix: Project commands now respect cloud_mode at runtime
...
- Moved config evaluation from module load time to runtime
- Unified add_project command to handle both cloud and local modes
- Commands (default, sync-config, move) now check cloud_mode at runtime
- Fixes test failures where monkeypatch wasn't applied before command registration
2025-10-14 09:24:13 -05:00
phernandez
9ccf4b6b56
remove extra conole out from sync message after upload
...
Signed-off-by: phernandez <paul@basicmachines.co >
2025-10-14 00:38:02 -05:00
phernandez
ba74ca7e18
fix: Update CloudProjectCreateResponse schema to match API response
...
The /proxy/projects/projects POST endpoint returns a ProjectStatusResponse
with fields: message, status, default, old_project, new_project.
Updated CloudProjectCreateResponse schema to match this format instead of
expecting name, path, message fields.
Also updated all related tests to use the correct response format:
- tests/cli/test_cloud_utils.py (3 tests)
- tests/cli/test_bisync_commands.py (1 test)
Fixes the validation error when creating cloud projects via upload command:
"bm cloud upload --project test --create-project specs"
Signed-off-by: Pablo Hernandez <pablo@basicmachines.co >
Signed-off-by: phernandez <paul@basicmachines.co >
2025-10-13 23:56:59 -05:00
Paul Hernandez
5258f45730
feat: Add WebDAV upload command for cloud projects ( #356 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
Signed-off-by: Pablo Hernandez <pablo@basicmachines.co >
Co-authored-by: Claude <noreply@anthropic.com >
2025-10-13 23:20:54 -05:00
phernandez
e773c002ce
chore: update version to 0.15.1 for v0.15.1 release
2025-10-13 11:04:44 -05:00
Paul Hernandez
2b7008d997
fix: Update view_note and ChatGPT tools for Claude Desktop compatibility ( #355 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
Co-authored-by: Claude <noreply@anthropic.com >
2025-10-13 10:44:35 -05:00
Paul Hernandez
c0538ad2dd
perf: Optimize sync/indexing for 43% faster performance ( #352 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
Co-authored-by: Claude <noreply@anthropic.com >
2025-10-12 14:41:44 -05:00
phernandez
cd5efd4a44
perf: exclude null fields from directory endpoint responses
...
Reduces JSON payload size by 50-70% for directory-heavy responses by omitting
null fields from serialization.
Changes:
- Added response_model_exclude_none=True to all directory endpoints:
- GET /directory/tree
- GET /directory/structure
- GET /directory/list
Impact:
- Directory nodes no longer serialize 7 null fields (title, permalink,
entity_id, entity_type, content_type, updated_at, file_path)
- For 50+ directories: eliminates 350+ null fields from response
- Payload reduction: ~2.3kb → ~1kb for typical directory trees
- File nodes still include all metadata when present
Example directory node output:
{
"name": "Tools",
"directory_path": "/Tools",
"type": "directory",
"children": []
}
Testing:
- All 29 directory tests passing
- Type checking passing (0 errors)
- Backward compatible (clients just see missing keys vs null)
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
Signed-off-by: phernandez <paul@basicmachines.co >
2025-10-11 09:56:26 -05:00
Paul Hernandez
00b73b0d08
feat: Optimize directory operations for 10-100x performance improvement ( #350 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
Co-authored-by: Claude <noreply@anthropic.com >
2025-10-11 09:11:46 -05:00
jope-bm
a09066e0f0
fix: Add permalink normalization to project lookups in deps.py ( #348 )
...
Signed-off-by: Joe P <joe@basicmemory.com >
Co-authored-by: Claude <noreply@anthropic.com >
Co-authored-by: phernandez <paul@basicmachines.co >
2025-10-10 21:21:35 -05:00
Drew Cain
be352ab474
fix: Project deletion failing with permalink normalization ( #345 )
2025-10-10 12:18:03 -05:00
Paul Hernandez
8d2e70cfc8
refactor: async client context manager pattern for cloud consolidation ( #344 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
Co-authored-by: Claude <noreply@anthropic.com >
2025-10-09 19:09:47 -05:00
Paul Hernandez
53438d1eab
feat: Add SPEC-15 for configuration persistence via Tigris ( #343 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
Co-authored-by: Claude <noreply@anthropic.com >
2025-10-08 18:07:00 -05:00
phernandez
fd2b188645
Revert "feat: add optional logfire instrumentation for cloud mode distributed tracing"
...
This reverts commit 1fa93ecbd2 .
2025-10-08 09:08:15 -05:00
phernandez
453cba94e4
Revert "fix: instrument httpx client at module level for MCP context"
...
This reverts commit 48cb4be4cd .
2025-10-08 09:07:26 -05:00
phernandez
48cb4be4cd
fix: instrument httpx client at module level for MCP context
...
The lifespan-based instrumentation only runs when FastAPI app starts.
In MCP context, the app never starts but the httpx client is still used.
Solution: Instrument the client immediately after creation at module level.
This works in both contexts:
- MCP: client is instrumented when module is imported
- API: client is instrumented before lifespan runs (lifespan still safe)
This enables distributed tracing from MCP -> Cloud -> API.
Signed-off-by: phernandez <paul@basicmachines.co >
2025-10-08 08:10:54 -05:00
Paul Hernandez
3e876a7549
fix: correct ProjectItem.home property to return path instead of name ( #341 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Paul Hernandez <phernandez@users.noreply.github.com >
Co-authored-by: Claude <noreply@anthropic.com >
2025-10-08 01:03:12 -05:00
phernandez
1fa93ecbd2
feat: add optional logfire instrumentation for cloud mode distributed tracing
2025-10-08 00:23:00 -05:00
Paul Hernandez
73202d1aab
fix: add tool use doc to write note for using empty string for root folder ( #339 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
Co-authored-by: Claude <noreply@anthropic.com >
2025-10-07 23:48:02 -05:00
Paul Hernandez
795e339333
fix: prevent nested project paths to avoid data conflicts ( #338 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
Co-authored-by: Claude <noreply@anthropic.com >
2025-10-07 09:44:39 -05:00
Paul Hernandez
07e304ce8e
fix: normalize paths to lowercase in cloud mode to prevent case collisions ( #336 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
Co-authored-by: Claude <noreply@anthropic.com >
2025-10-05 17:56:58 -05:00
phernandez
2a1c06d9ad
fix link in ai_assistant_guide resource
...
Signed-off-by: phernandez <paul@basicmachines.co >
2025-10-05 17:26:14 -05:00
Paul Hernandez
c6f93a0294
chore: v0.15.0 assistant guide ( #335 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
2025-10-05 17:20:54 -05:00
Paul Hernandez
ccc4386627
feat: introduce BASIC_MEMORY_PROJECT_ROOT for path constraints ( #334 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
2025-10-05 10:42:06 -05:00
Paul Hernandez
7616b2bb08
fix: cloud mode path validation and sanitization (bmc-issue-103) ( #332 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
Co-authored-by: Claude <noreply@anthropic.com >
2025-10-04 22:10:21 -05:00
phernandez
14c1fe4e89
chore: update version to 0.15.0 for v0.15.0 release
2025-10-04 15:02:28 -05:00
phernandez
2a050edee4
fix: prevent permalink collision via strict link resolution
...
Fixes critical data loss bug where creating similar entity names
(e.g., "Node C") would overwrite existing entities (e.g., "Node A.md")
due to fuzzy search incorrectly matching similar file paths.
Changes:
- Add strict=True to resolve_link() calls in entity_service.py
- Disables fuzzy search fallback during entity creation/update
- Prevents false positive matches on similar paths like
"edge-cases/Node A.md" and "edge-cases/Node C.md"
Testing:
- Added comprehensive integration test reproducing the bug scenario
- Added MCP-level permalink collision tests
- All 55 entity service tests pass
- Manual testing confirms fix prevents file overwrite
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
Signed-off-by: phernandez <paul@basicmachines.co >
2025-10-04 14:45:37 -05:00
Paul Hernandez
f3b1945e4c
fix: remove .env file loading from BasicMemoryConfig ( #330 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
2025-10-04 01:13:06 -05:00
Paul Hernandez
f5a11f3911
fix: normalize underscores in memory:// URLs for build_context ( #329 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
Co-authored-by: Claude <noreply@anthropic.com >
Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Paul Hernandez <phernandez@users.noreply.github.com >
2025-10-04 00:16:06 -05:00
Paul Hernandez
ee83b0e5a8
fix: simplify entity upsert to use database-level conflict resolution ( #328 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
Co-authored-by: Claude <noreply@anthropic.com >
2025-10-03 23:25:34 -05:00
Paul Hernandez
a7bf42ef49
fix: Add proper datetime JSON schema format annotations for MCP validation ( #312 )
...
Signed-off-by: Claude Code <noreply@anthropic.com >
Signed-off-by: phernandez <paul@basicmachines.co >
Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Paul Hernandez <phernandez@users.noreply.github.com >
2025-10-03 22:47:02 -05:00
Paul Hernandez
903591384d
feat: Add disable_permalinks config flag ( #313 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Paul Hernandez <phernandez@users.noreply.github.com >
Co-authored-by: Claude <noreply@anthropic.com >
2025-10-03 22:11:47 -05:00