basic-memory 0.13.0b4__py3-none-any.whl → 0.13.0b6__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of basic-memory might be problematic. Click here for more details.

Files changed (41) hide show
  1. basic_memory/__init__.py +2 -7
  2. basic_memory/api/routers/knowledge_router.py +13 -0
  3. basic_memory/api/routers/memory_router.py +3 -4
  4. basic_memory/api/routers/project_router.py +6 -5
  5. basic_memory/api/routers/prompt_router.py +2 -2
  6. basic_memory/cli/commands/project.py +3 -3
  7. basic_memory/cli/commands/status.py +1 -1
  8. basic_memory/cli/commands/sync.py +1 -1
  9. basic_memory/cli/commands/tool.py +6 -6
  10. basic_memory/mcp/prompts/__init__.py +2 -0
  11. basic_memory/mcp/prompts/recent_activity.py +1 -1
  12. basic_memory/mcp/prompts/sync_status.py +116 -0
  13. basic_memory/mcp/server.py +6 -6
  14. basic_memory/mcp/tools/__init__.py +4 -0
  15. basic_memory/mcp/tools/build_context.py +32 -7
  16. basic_memory/mcp/tools/canvas.py +2 -1
  17. basic_memory/mcp/tools/delete_note.py +159 -4
  18. basic_memory/mcp/tools/edit_note.py +17 -11
  19. basic_memory/mcp/tools/move_note.py +252 -40
  20. basic_memory/mcp/tools/project_management.py +35 -3
  21. basic_memory/mcp/tools/read_note.py +11 -4
  22. basic_memory/mcp/tools/search.py +180 -8
  23. basic_memory/mcp/tools/sync_status.py +254 -0
  24. basic_memory/mcp/tools/utils.py +47 -0
  25. basic_memory/mcp/tools/view_note.py +66 -0
  26. basic_memory/mcp/tools/write_note.py +13 -2
  27. basic_memory/repository/search_repository.py +116 -38
  28. basic_memory/schemas/base.py +33 -5
  29. basic_memory/schemas/memory.py +58 -1
  30. basic_memory/services/entity_service.py +18 -5
  31. basic_memory/services/initialization.py +32 -5
  32. basic_memory/services/link_resolver.py +20 -5
  33. basic_memory/services/migration_service.py +168 -0
  34. basic_memory/services/project_service.py +121 -50
  35. basic_memory/services/sync_status_service.py +181 -0
  36. basic_memory/sync/sync_service.py +91 -13
  37. {basic_memory-0.13.0b4.dist-info → basic_memory-0.13.0b6.dist-info}/METADATA +2 -2
  38. {basic_memory-0.13.0b4.dist-info → basic_memory-0.13.0b6.dist-info}/RECORD +41 -36
  39. {basic_memory-0.13.0b4.dist-info → basic_memory-0.13.0b6.dist-info}/WHEEL +0 -0
  40. {basic_memory-0.13.0b4.dist-info → basic_memory-0.13.0b6.dist-info}/entry_points.txt +0 -0
  41. {basic_memory-0.13.0b4.dist-info → basic_memory-0.13.0b6.dist-info}/licenses/LICENSE +0 -0
@@ -17,6 +17,7 @@ from basic_memory.models import Entity
17
17
  from basic_memory.repository import EntityRepository, RelationRepository
18
18
  from basic_memory.services import EntityService, FileService
19
19
  from basic_memory.services.search_service import SearchService
20
+ from basic_memory.services.sync_status_service import sync_status_tracker, SyncStatus
20
21
 
21
22
 
22
23
  @dataclass
@@ -80,23 +81,38 @@ class SyncService:
80
81
  self.search_service = search_service
81
82
  self.file_service = file_service
82
83
 
83
- async def sync(self, directory: Path) -> SyncReport:
84
+ async def sync(self, directory: Path, project_name: Optional[str] = None) -> SyncReport:
84
85
  """Sync all files with database."""
85
86
 
86
87
  start_time = time.time()
87
88
  logger.info(f"Sync operation started for directory: {directory}")
88
89
 
90
+ # Start tracking sync for this project if project name provided
91
+ if project_name:
92
+ sync_status_tracker.start_project_sync(project_name)
93
+
89
94
  # initial paths from db to sync
90
95
  # path -> checksum
91
96
  report = await self.scan(directory)
92
97
 
93
- # Initialize progress tracking if requested
98
+ # Update progress with file counts
99
+ if project_name:
100
+ sync_status_tracker.update_project_progress(
101
+ project_name=project_name,
102
+ status=SyncStatus.SYNCING,
103
+ message="Processing file changes",
104
+ files_total=report.total,
105
+ files_processed=0,
106
+ )
107
+
94
108
  # order of sync matters to resolve relations effectively
95
109
  logger.info(
96
110
  f"Sync changes detected: new_files={len(report.new)}, modified_files={len(report.modified)}, "
97
111
  + f"deleted_files={len(report.deleted)}, moved_files={len(report.moves)}"
98
112
  )
99
113
 
114
+ files_processed = 0
115
+
100
116
  # sync moves first
101
117
  for old_path, new_path in report.moves.items():
102
118
  # in the case where a file has been deleted and replaced by another file
@@ -109,19 +125,56 @@ class SyncService:
109
125
  else:
110
126
  await self.handle_move(old_path, new_path)
111
127
 
128
+ files_processed += 1
129
+ if project_name:
130
+ sync_status_tracker.update_project_progress( # pragma: no cover
131
+ project_name=project_name,
132
+ status=SyncStatus.SYNCING,
133
+ message="Processing moves",
134
+ files_processed=files_processed,
135
+ )
136
+
112
137
  # deleted next
113
138
  for path in report.deleted:
114
139
  await self.handle_delete(path)
140
+ files_processed += 1
141
+ if project_name:
142
+ sync_status_tracker.update_project_progress( # pragma: no cover
143
+ project_name=project_name,
144
+ status=SyncStatus.SYNCING,
145
+ message="Processing deletions",
146
+ files_processed=files_processed,
147
+ )
115
148
 
116
149
  # then new and modified
117
150
  for path in report.new:
118
151
  await self.sync_file(path, new=True)
152
+ files_processed += 1
153
+ if project_name:
154
+ sync_status_tracker.update_project_progress(
155
+ project_name=project_name,
156
+ status=SyncStatus.SYNCING,
157
+ message="Processing new files",
158
+ files_processed=files_processed,
159
+ )
119
160
 
120
161
  for path in report.modified:
121
162
  await self.sync_file(path, new=False)
163
+ files_processed += 1
164
+ if project_name:
165
+ sync_status_tracker.update_project_progress( # pragma: no cover
166
+ project_name=project_name,
167
+ status=SyncStatus.SYNCING,
168
+ message="Processing modified files",
169
+ files_processed=files_processed,
170
+ )
122
171
 
123
172
  await self.resolve_relations()
124
173
 
174
+ # Mark sync as completed
175
+ if project_name:
176
+ sync_status_tracker.complete_project_sync(project_name)
177
+
125
178
  duration_ms = int((time.time() - start_time) * 1000)
126
179
  logger.info(
127
180
  f"Sync operation completed: directory={directory}, total_changes={report.total}, duration_ms={duration_ms}"
@@ -311,18 +364,43 @@ class SyncService:
311
364
  content_type = self.file_service.content_type(path)
312
365
 
313
366
  file_path = Path(path)
314
- entity = await self.entity_repository.add(
315
- Entity(
316
- entity_type="file",
317
- file_path=path,
318
- checksum=checksum,
319
- title=file_path.name,
320
- created_at=created,
321
- updated_at=modified,
322
- content_type=content_type,
367
+ try:
368
+ entity = await self.entity_repository.add(
369
+ Entity(
370
+ entity_type="file",
371
+ file_path=path,
372
+ checksum=checksum,
373
+ title=file_path.name,
374
+ created_at=created,
375
+ updated_at=modified,
376
+ content_type=content_type,
377
+ )
323
378
  )
324
- )
325
- return entity, checksum
379
+ return entity, checksum
380
+ except IntegrityError as e:
381
+ # Handle race condition where entity was created by another process
382
+ if "UNIQUE constraint failed: entity.file_path" in str(e):
383
+ logger.info(
384
+ f"Entity already exists for file_path={path}, updating instead of creating"
385
+ )
386
+ # Treat as update instead of create
387
+ entity = await self.entity_repository.get_by_file_path(path)
388
+ if entity is None: # pragma: no cover
389
+ logger.error(f"Entity not found after constraint violation, path={path}")
390
+ raise ValueError(f"Entity not found after constraint violation: {path}")
391
+
392
+ updated = await self.entity_repository.update(
393
+ entity.id, {"file_path": path, "checksum": checksum}
394
+ )
395
+
396
+ if updated is None: # pragma: no cover
397
+ logger.error(f"Failed to update entity, entity_id={entity.id}, path={path}")
398
+ raise ValueError(f"Failed to update entity with ID {entity.id}")
399
+
400
+ return updated, checksum
401
+ else:
402
+ # Re-raise if it's a different integrity error
403
+ raise
326
404
  else:
327
405
  entity = await self.entity_repository.get_by_file_path(path)
328
406
  if entity is None: # pragma: no cover
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: basic-memory
3
- Version: 0.13.0b4
3
+ Version: 0.13.0b6
4
4
  Summary: Local-first knowledge management combining Zettelkasten with knowledge graphs
5
5
  Project-URL: Homepage, https://github.com/basicmachines-co/basic-memory
6
6
  Project-URL: Repository, https://github.com/basicmachines-co/basic-memory
@@ -25,10 +25,10 @@ Requires-Dist: pydantic-settings>=2.6.1
25
25
  Requires-Dist: pydantic[email,timezone]>=2.10.3
26
26
  Requires-Dist: pyjwt>=2.10.1
27
27
  Requires-Dist: pyright>=1.1.390
28
+ Requires-Dist: pytest-aio>=1.9.0
28
29
  Requires-Dist: python-dotenv>=1.1.0
29
30
  Requires-Dist: python-frontmatter>=1.1.0
30
31
  Requires-Dist: pyyaml>=6.0.1
31
- Requires-Dist: qasync>=0.27.1
32
32
  Requires-Dist: rich>=13.9.4
33
33
  Requires-Dist: sqlalchemy>=2.0.0
34
34
  Requires-Dist: typer>=0.9.0
@@ -1,4 +1,4 @@
1
- basic_memory/__init__.py,sha256=4JBLRdCwrUwNtv3qPAFmcDiktOIhvAF8hgT-Ku5RL1U,342
1
+ basic_memory/__init__.py,sha256=kYTgbNYjpTOTrVbmkdvP8eII6KD0j3qf2LgF-q01dQQ,178
2
2
  basic_memory/config.py,sha256=lNpbn-b1k9nunQ-htciYQHC8XatRIhc_m6SN2Pbvp-E,11101
3
3
  basic_memory/db.py,sha256=X4-uyEZdJXVLfFDTpcNZxWzawRZXhDdKoEFWAGgE4Lk,6193
4
4
  basic_memory/deps.py,sha256=zXOhqXCoSVIa1iIcO8U6uUiofJn5eT4ycwJkH9I2kX4,12102
@@ -20,11 +20,11 @@ basic_memory/api/template_loader.py,sha256=exbTeXyJRgyLFmSjNeroxjT7X2DWFm2X5qUVa
20
20
  basic_memory/api/routers/__init__.py,sha256=REO5CKQ96o5vtGWACcsIxIpWybIUSeKXc83RWbWc8BQ,398
21
21
  basic_memory/api/routers/directory_router.py,sha256=rBQHvuwffUOk0iKvcEs2QlWclgvr8ur24f_pH3-sVRQ,2054
22
22
  basic_memory/api/routers/importer_router.py,sha256=xFUCorkPWo8AF0ya0UrcLmXNf8CjPZdAqddQIH8PO-o,4513
23
- basic_memory/api/routers/knowledge_router.py,sha256=sdRGWqBmAjELkJ7ZXyZB6qTU1CVH4EXpKOyDDVGV4yU,9133
23
+ basic_memory/api/routers/knowledge_router.py,sha256=4dD_tPpcJGWCuoRKEbQXCS3hoXNWe-VbcGC7xV-8VoE,9738
24
24
  basic_memory/api/routers/management_router.py,sha256=INT5PzUXhfBH2546CTZKqZnRuECYIA4Ypfgdf6JNyu0,2686
25
- basic_memory/api/routers/memory_router.py,sha256=M344_tHIFzgi-i5PqltaPHdZaut_bMejqktmzLKto0c,2995
26
- basic_memory/api/routers/project_router.py,sha256=ZlKcrA7lThWcm7-IdFMBtxMMd7IoV03GRfSH1zVs5Ug,8175
27
- basic_memory/api/routers/prompt_router.py,sha256=LzZAerGtDLPdyTKjThQciVGPUkjbIc3dmdJHX-ievSo,9913
25
+ basic_memory/api/routers/memory_router.py,sha256=a9Cnx3XgwSkO-2ABFzI3wM3PoMGxuyfJFFp7NfFZapc,3003
26
+ basic_memory/api/routers/project_router.py,sha256=cXGx6VZMg67jdzMi1Xf8SodtueEI04xRwtiv9ygf2Bg,8239
27
+ basic_memory/api/routers/prompt_router.py,sha256=4wxq6-NREgVJM8N9C0YsN1AAUDD8nkTCOzWyzSqTSFw,9948
28
28
  basic_memory/api/routers/resource_router.py,sha256=WEJEqEaY_yTKj5-U-rW4kXQKUcJflykgwI6_g_R41ck,8058
29
29
  basic_memory/api/routers/search_router.py,sha256=GD62jlCQTiL_VNsdibi-b1f6H40KCWo9SX2Cl7YH4QU,1226
30
30
  basic_memory/api/routers/utils.py,sha256=vW-bYUmATQPe-pYbQfNjuho-BzsHhy9bmWv-LZX3HTc,5153
@@ -39,10 +39,10 @@ basic_memory/cli/commands/import_claude_conversations.py,sha256=sXnP0hjfwUapwHQD
39
39
  basic_memory/cli/commands/import_claude_projects.py,sha256=mWYIeA-mu_Pq23R7OEtY2XHXG5CAh1dMGIBhckB4zRk,2811
40
40
  basic_memory/cli/commands/import_memory_json.py,sha256=Vz5rt7KCel5B3Dtv57WPEUJTHCMwFUqQlOCm2djwUi8,2867
41
41
  basic_memory/cli/commands/mcp.py,sha256=jmRUv1U5FT3AQ1cDbvTfAUnjhBw6UsNEmIkpbNr-_qQ,3093
42
- basic_memory/cli/commands/project.py,sha256=RDeVI18SR-OZkBVZfTwimBYQRhn7Qh-RlvZsXkiCEI0,12864
43
- basic_memory/cli/commands/status.py,sha256=SnwNK7d2cAT16i_k4jRnQsDC0fwU1XtZza5o2tIX51s,5699
44
- basic_memory/cli/commands/sync.py,sha256=g5RZMST68SkUenp2VZ_vQN-I50nZtvE1wZkPhHH-1zM,7983
45
- basic_memory/cli/commands/tool.py,sha256=7wte1TqjG__NcC7BB0BRLl8THB3t5eAngud0zVHBQ8k,9506
42
+ basic_memory/cli/commands/project.py,sha256=YkVYcjxQOVhxIX1M0g_vMaP5dTinYvSnUQIjeOPg8HE,12971
43
+ basic_memory/cli/commands/status.py,sha256=708EK8-iPjyc1iE5MPECzAyZraGYoGpvYjLwTm-BlQs,5719
44
+ basic_memory/cli/commands/sync.py,sha256=gOU_onrMj9_IRiIe8FWU_FLEvfjcOt-qhrvvFJuU-ws,8010
45
+ basic_memory/cli/commands/tool.py,sha256=my-kALn3khv1W2Avi736NrHsfkpbyP57mDi5LjHwqe0,9540
46
46
  basic_memory/importers/__init__.py,sha256=BTcBW97P3thcsWa5w9tQsvOu8ynHDgw2-8tPgkCZoh8,795
47
47
  basic_memory/importers/base.py,sha256=awwe_U-CfzSINKoM6iro7ru4QqLlsfXzdHztDvebnxM,2531
48
48
  basic_memory/importers/chatgpt_importer.py,sha256=36VAsZarI7XE5r_KxNpWeHM1HPfHj6NfTDuH6ExY4hg,7372
@@ -61,30 +61,33 @@ basic_memory/mcp/async_client.py,sha256=Eo345wANiBRSM4u3j_Vd6Ax4YtMg7qbWd9PIoFfj
61
61
  basic_memory/mcp/auth_provider.py,sha256=CTydkEBvxh_fg_Z0hxKjTT8nHJoFhxrwp5hTQuToiIU,9977
62
62
  basic_memory/mcp/external_auth_provider.py,sha256=Z1GDbr6P4C-flZVHMWkIqAu30kcfeHv2iSp0EYbFuxo,11483
63
63
  basic_memory/mcp/project_session.py,sha256=OP1X10iG4wIWHgfkwC2q7Inl6b68zrioqkD1-Ju_S6w,3462
64
- basic_memory/mcp/server.py,sha256=2J6uWnpsGFnrlp8G6XlUknhjpD72vFI8nP5OLPw3H28,3665
64
+ basic_memory/mcp/server.py,sha256=QbRkkYaDWK5Vrvez39ET8C6h5uGS6y4wDHMVaCgdD78,3787
65
65
  basic_memory/mcp/supabase_auth_provider.py,sha256=MLHfSHjdx2Q5jr_Ljx0qZBaOwp7CkPdk_ybR_LQ7Mvw,16472
66
- basic_memory/mcp/prompts/__init__.py,sha256=-Bl9Dgj2TD9PULjzggPqXuvPEjWCRy7S9Yg03h2-U7A,615
66
+ basic_memory/mcp/prompts/__init__.py,sha256=UvaIw5KA8PaXj3Wz1Dr-VjlkEq6T5D8AGtYFVwaHqnA,683
67
67
  basic_memory/mcp/prompts/ai_assistant_guide.py,sha256=8TI5xObiRVcwv6w9by1xQHlX0whvyE7-LGsiqDMRTFg,821
68
68
  basic_memory/mcp/prompts/continue_conversation.py,sha256=rsmlC2V7e7G6DAK0K825vFsPKgsRQ702HFzn6lkHaDM,1998
69
- basic_memory/mcp/prompts/recent_activity.py,sha256=Q-KKOt33hWVH4PSPO4AkCpc0y0rFPGFzARLN2MphKuY,3308
69
+ basic_memory/mcp/prompts/recent_activity.py,sha256=0v1c3b2SdDDxXVuF8eOjNooYy04uRYel0pdJ0rnggw4,3311
70
70
  basic_memory/mcp/prompts/search.py,sha256=nb88MZy9tdW_MmCLUVItiukrLdb3xEHWLv0JVLUlc4o,1692
71
+ basic_memory/mcp/prompts/sync_status.py,sha256=_5EqnCavY9BTsaxX2tPp-AgQZLt4bUrqQ6TwbM0L5w8,4645
71
72
  basic_memory/mcp/prompts/utils.py,sha256=VacrbqwYtySpIlYIrKHo5s6jtoTMscYJqrFRH3zpC6Q,5431
72
73
  basic_memory/mcp/resources/ai_assistant_guide.md,sha256=qnYWDkYlb-JmKuOoZ5llmRas_t4dWDXB_i8LE277Lgs,14777
73
74
  basic_memory/mcp/resources/project_info.py,sha256=LcUkTx4iXBfU6Lp4TVch78OqLopbOy4ljyKnfr4VXso,1906
74
- basic_memory/mcp/tools/__init__.py,sha256=eU-YqlayCIzzbpipipTi7pX7PUad_W-Uh9CxtY4IjvQ,1441
75
- basic_memory/mcp/tools/build_context.py,sha256=U9ZWqtOwdpxbVm0gPoQfYdl55hJAQ6d6Xdw2-AeyXcE,3325
76
- basic_memory/mcp/tools/canvas.py,sha256=KFbwRAWtr31wLjRgeYyvIDLYRGs1Qs_hHhY_WWuDFWs,3601
77
- basic_memory/mcp/tools/delete_note.py,sha256=mDX7JxmzMzXyRaY0-fKyLiGf2czM51Kxz2ACX-dyrNU,1270
78
- basic_memory/mcp/tools/edit_note.py,sha256=VG1pbB50cm70FTevspAkfDxCj-gs_YbdtPqhHS2i_xA,13025
75
+ basic_memory/mcp/tools/__init__.py,sha256=lCCOC0jElvL2v53WI_dxRs4qABq4Eo-YGm6j2XeZ6AQ,1591
76
+ basic_memory/mcp/tools/build_context.py,sha256=RbevfGVblSF901kAD2zc1CQ5z3tzfLC9XV_jcq35d_Y,4490
77
+ basic_memory/mcp/tools/canvas.py,sha256=22F9G9gfPb-l8i1B5ra4Ja_h9zYY83rPY9mDA5C5gkY,3738
78
+ basic_memory/mcp/tools/delete_note.py,sha256=tSyRc_VgBmLyVeenClwX1Sk--LKcGahAMzTX2mK2XIs,7346
79
+ basic_memory/mcp/tools/edit_note.py,sha256=q4x-f7-j_l-wzm17-AVFT1_WGCo0Cq4lI3seYSe21aY,13570
79
80
  basic_memory/mcp/tools/list_directory.py,sha256=-FxDsCru5YD02M4qkQDAurEJWyRaC7YI4YR6zg0atR8,5236
80
- basic_memory/mcp/tools/move_note.py,sha256=oZ83EtKmi5bs8usN2ydc-l_PG1hIXmt86QK4-cSZs6M,2885
81
- basic_memory/mcp/tools/project_management.py,sha256=wMmiGy_n7VGhwKmRpoBMU-z-2NYJouNdvBmujTGkV3w,10952
81
+ basic_memory/mcp/tools/move_note.py,sha256=esnbddG2OcmIgRNuQwx5OhlwZ1CWcOheg3hUobsEcq0,11320
82
+ basic_memory/mcp/tools/project_management.py,sha256=XtZTFWi7--ku6yUR_vwHQx2Ka3vz3pCcWMhVa_y4CQs,12162
82
83
  basic_memory/mcp/tools/read_content.py,sha256=4FTw13B8UjVVhR78NJB9HKeJb_nA6-BGT1WdGtekN5Q,8596
83
- basic_memory/mcp/tools/read_note.py,sha256=Q2z_9dEoR3lq4v_NKyMyZAW-SP4LUgi1b6kWrYEanQ4,6944
84
+ basic_memory/mcp/tools/read_note.py,sha256=GdsJLkcDrCBnmNeM9BZRx9Xs2LUqH5ty_E471T9Kf1Y,7493
84
85
  basic_memory/mcp/tools/recent_activity.py,sha256=XVjNJAJnmxvzx9_Ls1A-QOd2yTR7pJlSTTuRxSivmN4,4833
85
- basic_memory/mcp/tools/search.py,sha256=9imlCXSv5NHpKb75asCxKNzBW5tHOJQNc6XFZjaYL1U,4209
86
- basic_memory/mcp/tools/utils.py,sha256=9TV-RNj_3OrFK-5xTaMl41a6moKlCP-HRrfEI0e0Plo,18161
87
- basic_memory/mcp/tools/write_note.py,sha256=yGPb9HGB5BFnjBD1lFNsZ7wF4ItY2nOxaE05bBNP1Jg,5226
86
+ basic_memory/mcp/tools/search.py,sha256=22sLHed6z53mH9NQqBv37Xi4d6AtOTyrUvKs2Mycijk,11296
87
+ basic_memory/mcp/tools/sync_status.py,sha256=mt0DdcaAlyiKW4NK4gy6psajSqcez0bOm_4MzG1NOdg,10486
88
+ basic_memory/mcp/tools/utils.py,sha256=wsfrgiBScacMilODu85AXbUUKA5fJi4_6phDIC9dQRs,19702
89
+ basic_memory/mcp/tools/view_note.py,sha256=ddNXxyETsdA5SYflIaQVj_Cbd7I7CLVs3atRRDMbGmg,2499
90
+ basic_memory/mcp/tools/write_note.py,sha256=TW_7-4QfX8GYZ-FU_iSSYAm1lucE7NeOcpZUypRXKOk,5912
88
91
  basic_memory/models/__init__.py,sha256=j0C4dtFi-FOEaQKR8dQWEG-dJtdQ15NBTiJg4nbIXNU,333
89
92
  basic_memory/models/base.py,sha256=4hAXJ8CE1RnjKhb23lPd-QM7G_FXIdTowMJ9bRixspU,225
90
93
  basic_memory/models/knowledge.py,sha256=AFxfKS8fRa43Kq3EjJCAufpte4VNC7fs9YfshDrB4o0,7087
@@ -97,13 +100,13 @@ basic_memory/repository/project_info_repository.py,sha256=8XLVAYKkBWQ6GbKj1iqA9O
97
100
  basic_memory/repository/project_repository.py,sha256=sgdKxKTSiiOZTzABwUNqli7K5mbXiPiQEAc5r0RD_jQ,3159
98
101
  basic_memory/repository/relation_repository.py,sha256=z7Oo5Zz_J-Bj6RvQDpSWR73ZLk2fxG7e7jrMbeFeJvQ,3179
99
102
  basic_memory/repository/repository.py,sha256=MJb-cb8QZQbL-Grq_iqv4Kq75aX2yQohLIqh5T4fFxw,15224
100
- basic_memory/repository/search_repository.py,sha256=WVj4PlFa4ZywoZZhQaArQg9PtTuMkLYaMe-jr9pASxA,14066
103
+ basic_memory/repository/search_repository.py,sha256=CdALAsROY6W_rE1UB8Bn55ZdMv4DOmNOtShoXCwPI_Q,17897
101
104
  basic_memory/schemas/__init__.py,sha256=mEgIFcdTeb-v4y0gkOh_pA5zyqGbZk-9XbXqlSi6WMs,1674
102
- basic_memory/schemas/base.py,sha256=dwnaI5fJXsdp81mdH0ZpmJ-WICY-0M7ZPWeW5OUgBG8,5685
105
+ basic_memory/schemas/base.py,sha256=Fx97DEqzOr7y9zeeseO9qVBYbOft_4OQf9EiVfhOJn4,6738
103
106
  basic_memory/schemas/delete.py,sha256=UAR2JK99WMj3gP-yoGWlHD3eZEkvlTSRf8QoYIE-Wfw,1180
104
107
  basic_memory/schemas/directory.py,sha256=F9_LrJqRqb_kO08GDKJzXLb2nhbYG2PdVUo5eDD_Kf4,881
105
108
  basic_memory/schemas/importer.py,sha256=FAh-RGxuhFW2rz3HFxwLzENJOiGgbTR2hUeXZZpM3OA,663
106
- basic_memory/schemas/memory.py,sha256=IjdKvOx1l61Sx7Si4lldjtAJCKg2e0yaeW-MUJmkECE,3802
109
+ basic_memory/schemas/memory.py,sha256=6YjEyJ9GJLC4VrFD0EnoRDTfg-Sf6g0D4bhL9rwNBi4,5816
107
110
  basic_memory/schemas/project_info.py,sha256=cHXgp9k4RbgolIpCIEcrb-RR9m7WL72KFGwknig4H-E,6884
108
111
  basic_memory/schemas/prompt.py,sha256=SpIVfZprQT8E5uP40j3CpBc2nHKflwOo3iZD7BFPIHE,3648
109
112
  basic_memory/schemas/request.py,sha256=Mv5EvrLZlFIiPr8dOjo_4QXvkseYhQI7cd_X2zDsxQM,3760
@@ -112,22 +115,24 @@ basic_memory/schemas/search.py,sha256=ywMsDGAQK2sO2TT5lc-da_k67OKW1x1TenXormHHWv
112
115
  basic_memory/services/__init__.py,sha256=XGt8WX3fX_0K9L37Msy8HF8nlMZYIG3uQ6mUX6_iJtg,259
113
116
  basic_memory/services/context_service.py,sha256=4ReLAF5qifA9ayOePGsVKusw1TWj8oBzRECjrsFiKPI,14462
114
117
  basic_memory/services/directory_service.py,sha256=_YOPXseQM4knd7PIFAho9LV_E-FljVE5WVJKQ0uflZs,6017
115
- basic_memory/services/entity_service.py,sha256=5l17i13xneUPwIAKGYi78VeWvwwpz4Yhfgphgx295Jg,29326
118
+ basic_memory/services/entity_service.py,sha256=KemsDkKkA7KItVtfsdAlYaGyOR8ryZQCu_O9GhkJucc,30103
116
119
  basic_memory/services/exceptions.py,sha256=oVjQr50XQqnFq1-MNKBilI2ShtHDxypavyDk1UeyHhw,390
117
120
  basic_memory/services/file_service.py,sha256=jCrmnEkTQ4t9HF7L_M6BL7tdDqjjzty9hpTo9AzwhvM,10059
118
- basic_memory/services/initialization.py,sha256=1sPz0dAsFVJOaiWBG6FgxKmwLNrMtBrmX4I4qVTI0aY,7786
119
- basic_memory/services/link_resolver.py,sha256=8KgozYS8reQaihzDMS8_0tDKo-BdqHjhECIM39I_wis,4078
120
- basic_memory/services/project_service.py,sha256=mntHwPwypgec45vsB5ASzTybA_UGAf4lA9cRKw4sl8E,23310
121
+ basic_memory/services/initialization.py,sha256=6ZeuTInPksyre4pjmiK_GXi5o_mJk3mfqGGH6apHxko,9271
122
+ basic_memory/services/link_resolver.py,sha256=1-_VFsvqdT5rVBHe8Jrq63U59XQ0hxGezxY8c24Tiow,4594
123
+ basic_memory/services/migration_service.py,sha256=pFJCSD7UgHLx1CHvtN4Df1CzDEp-CZ9Vqx4XYn1m1M0,6096
124
+ basic_memory/services/project_service.py,sha256=nWnrlnjISqtGP6ui1BR8rSTNFzwExW8u7mRYPtWJLok,26856
121
125
  basic_memory/services/search_service.py,sha256=c5Ky0ufz7YPFgHhVzNRQ4OecF_JUrt7nALzpMjobW4M,12782
122
126
  basic_memory/services/service.py,sha256=V-d_8gOV07zGIQDpL-Ksqs3ZN9l3qf3HZOK1f_YNTag,336
127
+ basic_memory/services/sync_status_service.py,sha256=PRAnYrsNJY8EIlxaxCrDsY0TjySDdhktjta8ReQZyiY,6838
123
128
  basic_memory/sync/__init__.py,sha256=CVHguYH457h2u2xoM8KvOilJC71XJlZ-qUh8lHcjYj4,156
124
129
  basic_memory/sync/background_sync.py,sha256=4CEx8oP6-qD33uCeowhpzhA8wivmWxaCmSBP37h3Fs8,714
125
- basic_memory/sync/sync_service.py,sha256=7ccn4_YWcmC9VSEgm6diosRAibn4LxBS3lWb8vcTaoQ,19833
130
+ basic_memory/sync/sync_service.py,sha256=AxC5J1YTcPWTmA0HdzvOZBthi4-_LZ44kNF0KQoDRPw,23387
126
131
  basic_memory/sync/watch_service.py,sha256=JAumrHUjV1lF9NtEK32jgg0myWBfLXotNXxONeIV9SM,15316
127
132
  basic_memory/templates/prompts/continue_conversation.hbs,sha256=begMFHOPN3aCm5sHz5PlKMLOfZ8hlpFxFJ-hgy0T9K4,3075
128
133
  basic_memory/templates/prompts/search.hbs,sha256=H1cCIsHKp4VC1GrH2KeUB8pGe5vXFPqb2VPotypmeCA,3098
129
- basic_memory-0.13.0b4.dist-info/METADATA,sha256=Anht8NA7a-vnCuyqZQfv1quuEHqerGWwg26uegkhUZo,15468
130
- basic_memory-0.13.0b4.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
131
- basic_memory-0.13.0b4.dist-info/entry_points.txt,sha256=wvE2mRF6-Pg4weIYcfQ-86NOLZD4WJg7F7TIsRVFLb8,90
132
- basic_memory-0.13.0b4.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
133
- basic_memory-0.13.0b4.dist-info/RECORD,,
134
+ basic_memory-0.13.0b6.dist-info/METADATA,sha256=WaorkcUqigopjYoHen6E7Ho5QDdBV7o-mKKYxvke4aY,15471
135
+ basic_memory-0.13.0b6.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
136
+ basic_memory-0.13.0b6.dist-info/entry_points.txt,sha256=wvE2mRF6-Pg4weIYcfQ-86NOLZD4WJg7F7TIsRVFLb8,90
137
+ basic_memory-0.13.0b6.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
138
+ basic_memory-0.13.0b6.dist-info/RECORD,,