Paul Hernandez
4cba7ba01c
fix(core): parse prose wikilinks as inline links ( #824 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
2026-05-14 11:43:11 -05:00
Paul Hernandez
0b335476d6
fix(mcp): resolve projects by external_id, remove workspace from MCP tools ( #777 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com >
2026-05-01 05:15:44 -05:00
Paul Hernandez
a4282d9f2f
fix(core): skip Obsidian callouts in observation parser ( #769 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
2026-04-28 23:15:13 -05:00
Viktor Szépe
4d62b623db
chore(core): fix typos ( #761 )
...
Signed-off-by: Viktor Szépe <viktor@szepe.net >
2026-04-23 10:12:46 -05:00
Paul Hernandez
052545b661
chore(core): make ty the default typechecker ( #736 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
2026-04-13 10:34:01 -05:00
phernandez
e982900084
fix(core): strip null bytes from markdown content before database insert
...
PostgreSQL rejects null bytes (0x00) in text columns, causing
CharacterNotInRepertoireError when syncing files like Claude agent
definitions that contain embedded nulls. SQLite silently accepts them,
so this only surfaces in cloud environments.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
Signed-off-by: phernandez <paul@basicmachines.co >
2026-04-06 23:14:40 -05:00
phernandez
1987581ee3
docs: update v0.19.0 release notes and apply formatting fixes
...
Add #634 (stale schema metadata) to bug fixes section.
Apply ruff formatting to schema.py, write_note.py, test files.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
Signed-off-by: phernandez <paul@basicmachines.co >
2026-03-01 12:08:25 -06:00
phernandez
dc0ca71c18
fix: avoid Post(**metadata) crash when frontmatter contains 'content' or 'handler' keys
...
frontmatter.Post.__init__ takes `content` and `handler` as positional
parameters. When user YAML frontmatter contains these as field names,
unpacking metadata via **kwargs causes "got multiple values for argument
'content'".
Replace frontmatter.loads() with frontmatter.parse() + Post() + update()
in entity_parser, and replace the **metadata unpacking in
entity_service.update_entity() with the same safe pattern.
Fixes basic-memory-cloud#375
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
Signed-off-by: phernandez <paul@basicmachines.co >
2026-02-27 22:52:16 -06:00
phernandez
236ae268aa
fix: coerce list frontmatter values to strings for title and type fields
...
YAML block sequence syntax can cause PyYAML to parse scalar fields like
`title` and `type` as lists instead of strings. Downstream code calls
.strip()/.casefold() on these values, crashing with
"'list' object has no attribute 'strip'".
Add _coerce_to_string() helper that joins list items with ", " and apply
it in entity_parser.parse_markdown_content() and
entity_service.fast_edit_entity() where these fields are extracted.
Fixes basic-memory-cloud#376
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
Signed-off-by: phernandez <paul@basicmachines.co >
2026-02-27 22:45:09 -06:00
Paul Hernandez
c44291830c
chore: rename entity_type to note_type ( #600 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-22 20:28:57 -06:00
Paul Hernandez
55d675e278
feat: min_similarity override, cloud promo improvements ( #570 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-16 16:44:02 -06:00
Paul Hernandez
545804f194
feat: Add project-prefixed permalinks and memory URL routing ( #544 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-13 17:45:50 -06:00
Paul Hernandez
8072449a78
chore: Add fast feedback loop tooling ( #538 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
2026-02-01 23:04:59 -06:00
Paul Hernandez
e3ced49d9d
fix: prevent spurious 'metadata: {}' in frontmatter output ( #530 )
...
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com >
2026-01-31 12:17:10 -06:00
Paul Hernandez
c7835a9d5c
fix: ensure external_id is set on entity creation ( #512 ) ( #513 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com >
2026-01-19 11:14:48 -06:00
Paul Hernandez
1fd680c3f1
feat: add auto-format files on save with built-in Python formatter ( #474 )
...
Signed-off-by: Cedric Hurst <cedric@spantree.net >
Signed-off-by: phernandez <paul@basicmachines.co >
Co-authored-by: Cedric Hurst <cedric@spantree.net >
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com >
Co-authored-by: Sebastian B Otaegui <feniix@users.noreply.github.com >
Co-authored-by: Cedric Hurst <cedric@divideby0.io >
2025-12-24 15:39:22 -06:00
jope-bm
1a74d85973
feat: Complete Phase 2 of API v2 migration - Update MCP tools to use v2 endpoints ( #447 )
...
Signed-off-by: Joe P <joe@basicmemory.com >
Signed-off-by: Paul Hernandez <60959+phernandez@users.noreply.github.com >
Signed-off-by: phernandez <paul@basicmachines.co >
Co-authored-by: Claude <noreply@anthropic.com >
Co-authored-by: Paul Hernandez <60959+phernandez@users.noreply.github.com >
Co-authored-by: phernandez <paul@basicmachines.co >
2025-12-24 12:59:14 -06:00
phernandez
a920a9ff29
feat: Add project_id to Relation and Observation for efficient project-scoped queries
...
Denormalizes project_id onto Relation and Observation tables to enable
efficient project-scoped queries without joins. Migration backfills
from associated entity and adds pg_trgm extension with GIN indexes
for fuzzy link resolution on PostgreSQL.
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
Signed-off-by: phernandez <paul@basicmachines.co >
2025-12-01 21:54:56 -06:00
phernandez
0eaf30bb06
remove conflict constraint name from relation_repository.py
...
Signed-off-by: phernandez <paul@basicmachines.co >
2025-11-30 19:31:09 -06:00
phernandez
73d940e064
fix: observation parsing and permalink limits ( #446 )
...
1. Hashtag detection now checks for standalone words starting with #
instead of just checking if # appears anywhere in content.
This prevents HTML color codes like #4285F4 from being
interpreted as hashtags.
2. Observation permalinks now truncate content to 200 chars
to stay under PostgreSQL's btree index limit of 2704 bytes.
Added tests for both fixes.
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com >
Signed-off-by: phernandez <paul@basicmachines.co >
2025-11-30 00:12:04 -06:00
Paul Hernandez
0b3272ae6e
feat: SPEC-20 Simplified Project-Scoped Rclone Sync ( #405 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
Signed-off-by: Claude <noreply@anthropic.com >
Co-authored-by: Claude <noreply@anthropic.com >
2025-11-02 09:35:26 -06:00
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
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
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
jope-bm
ec2fa07350
chore: apply lint and formatting fixes for 0.14.4 release ( #290 )
...
Signed-off-by: Joe P <joe@basicmemory.com >
Co-authored-by: Claude <noreply@anthropic.com >
2025-09-05 10:00:52 -06:00
jope-bm
285e96baea
fix: Fix observation parsing to exclude markdown and wiki links ( #269 )
...
Signed-off-by: Joe P <joe@basicmemory.com >
Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>
Co-authored-by: jope-bm <jope-bm@users.noreply.github.com >
Co-authored-by: Claude <noreply@anthropic.com >
2025-08-22 20:16:05 -06:00
Paul Hernandez
634486107b
feat: v0.13.0 pre ( #122 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
Co-authored-by: Claude <noreply@anthropic.com >
2025-06-03 01:00:40 -05:00
Paul Hernandez
2934176331
fix: utf8 for all file reads/write/open instead of default platform encoding ( #91 )
...
Signed-off-by: phernandez <paul@basicmachines.co >
2025-04-08 10:55:01 -05:00
Paul Hernandez
617e60bda4
feat: permalink enhancements ( #82 )
...
- Avoiding "useless permalink values" for files without metadata
- Enable permalinks to be updated on move via config setting
2025-04-06 14:54:59 -05:00
github-actions[bot]
9bff1f732e
fix: [BUG] write_note Tool Fails to Update Existing Files in Some Situations. ( #80 )
2025-04-05 22:31:40 -05:00
phernandez
28513c8b8d
lint code
2025-02-12 22:39:22 -06:00
Paul Hernandez
5b4f0eafcc
Pre release fixups ( #5 )
...
* configure logging
* set mcp output logging also
* fix type check errors
* fix type check
* rename Permalink schema type
* fix type errors
* add typechecks to ci workflow
* pytest coverage setup
* add tests for status cli
* sync tests coverage
* watch_service test coverage
* tests for tool_utils.py
* clean up imports
* file_utils coverage
* markdown plugins coverage
* 99% test coverage
* more test coverage, remove ObservationCategory
* more tool coverage
* fix type-check
* format, upgrade deps
---------
Co-authored-by: phernandez <phernandez@basicmachines.co >
2025-02-12 08:23:10 -06:00
phernandez
3484e26631
feat: add memory-json importer, tweak observation content
2025-02-04 10:59:28 -06:00
phernandez
9983271e94
Refactor created/modified handling in markdown entities.
...
Replace frontmatter properties with top-level attributes for `created` and `modified` to simplify handling and ensure consistent attribute usage. Added a utility function for schema-to-markdown conversion and updated related tests and code to reflect these changes.
2025-01-31 13:59:06 -06:00
phernandez
9589a81b51
delete relations/observations from entity content
2025-01-26 15:54:16 -06:00
phernandez
9202b396a1
write semantic content if not present in content
2025-01-26 12:32:20 -06:00
phernandez
d31f481405
remove EntityContent from markdown
2025-01-26 09:24:52 -06:00
phernandez
18bd850019
fix updates and save content. remove entity.summary
2025-01-26 00:00:37 -06:00
phernandez
9019ffedb7
add markdown_processor
2025-01-24 17:43:38 -06:00
phernandez
23922f2915
set permalink in frontmatter, re-index file_path on move during sync
2025-01-22 17:59:46 -06:00
phernandez
32606d771d
fix tests for context and permalinks
2025-01-18 23:54:28 -06:00
phernandez
ef13b3b30a
refactor sync to use link_resolver
2025-01-13 22:31:32 -06:00
phernandez
f464c894f1
add link parsing to entity_parser.py
2025-01-13 19:45:48 -06:00
phernandez
c5d21276de
change entity.path_id to entity.permalink
2025-01-12 16:47:21 -06:00
phernandez
90a301d4ce
rename entity.name to entity.title
2025-01-12 13:48:16 -06:00
phernandez
621154eaec
add tags to observation
2025-01-09 23:36:31 -06:00
phernandez
9d2f0c969e
fix parser tests
2025-01-09 23:12:29 -06:00
phernandez
a0b7e70951
enity parsing tests
2025-01-09 20:49:49 -06:00
phernandez
81c1ceecbe
fix file_scanner tests
2025-01-09 15:22:41 -06:00