basic-memory 0.12.3__py3-none-any.whl → 0.13.0__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 (116) hide show
  1. basic_memory/__init__.py +2 -1
  2. basic_memory/alembic/env.py +1 -1
  3. basic_memory/alembic/versions/5fe1ab1ccebe_add_projects_table.py +108 -0
  4. basic_memory/alembic/versions/647e7a75e2cd_project_constraint_fix.py +104 -0
  5. basic_memory/alembic/versions/cc7172b46608_update_search_index_schema.py +0 -6
  6. basic_memory/api/app.py +43 -13
  7. basic_memory/api/routers/__init__.py +4 -2
  8. basic_memory/api/routers/directory_router.py +63 -0
  9. basic_memory/api/routers/importer_router.py +152 -0
  10. basic_memory/api/routers/knowledge_router.py +139 -37
  11. basic_memory/api/routers/management_router.py +78 -0
  12. basic_memory/api/routers/memory_router.py +6 -62
  13. basic_memory/api/routers/project_router.py +234 -0
  14. basic_memory/api/routers/prompt_router.py +260 -0
  15. basic_memory/api/routers/search_router.py +3 -21
  16. basic_memory/api/routers/utils.py +130 -0
  17. basic_memory/api/template_loader.py +292 -0
  18. basic_memory/cli/app.py +20 -21
  19. basic_memory/cli/commands/__init__.py +2 -1
  20. basic_memory/cli/commands/auth.py +136 -0
  21. basic_memory/cli/commands/db.py +3 -3
  22. basic_memory/cli/commands/import_chatgpt.py +31 -207
  23. basic_memory/cli/commands/import_claude_conversations.py +16 -142
  24. basic_memory/cli/commands/import_claude_projects.py +33 -143
  25. basic_memory/cli/commands/import_memory_json.py +26 -83
  26. basic_memory/cli/commands/mcp.py +71 -18
  27. basic_memory/cli/commands/project.py +102 -70
  28. basic_memory/cli/commands/status.py +19 -9
  29. basic_memory/cli/commands/sync.py +44 -58
  30. basic_memory/cli/commands/tool.py +6 -6
  31. basic_memory/cli/main.py +1 -5
  32. basic_memory/config.py +143 -87
  33. basic_memory/db.py +6 -4
  34. basic_memory/deps.py +227 -30
  35. basic_memory/importers/__init__.py +27 -0
  36. basic_memory/importers/base.py +79 -0
  37. basic_memory/importers/chatgpt_importer.py +222 -0
  38. basic_memory/importers/claude_conversations_importer.py +172 -0
  39. basic_memory/importers/claude_projects_importer.py +148 -0
  40. basic_memory/importers/memory_json_importer.py +93 -0
  41. basic_memory/importers/utils.py +58 -0
  42. basic_memory/markdown/entity_parser.py +5 -2
  43. basic_memory/mcp/auth_provider.py +270 -0
  44. basic_memory/mcp/external_auth_provider.py +321 -0
  45. basic_memory/mcp/project_session.py +103 -0
  46. basic_memory/mcp/prompts/__init__.py +2 -0
  47. basic_memory/mcp/prompts/continue_conversation.py +18 -68
  48. basic_memory/mcp/prompts/recent_activity.py +20 -4
  49. basic_memory/mcp/prompts/search.py +14 -140
  50. basic_memory/mcp/prompts/sync_status.py +116 -0
  51. basic_memory/mcp/prompts/utils.py +3 -3
  52. basic_memory/mcp/{tools → resources}/project_info.py +6 -2
  53. basic_memory/mcp/server.py +86 -13
  54. basic_memory/mcp/supabase_auth_provider.py +463 -0
  55. basic_memory/mcp/tools/__init__.py +24 -0
  56. basic_memory/mcp/tools/build_context.py +43 -8
  57. basic_memory/mcp/tools/canvas.py +17 -3
  58. basic_memory/mcp/tools/delete_note.py +168 -5
  59. basic_memory/mcp/tools/edit_note.py +303 -0
  60. basic_memory/mcp/tools/list_directory.py +154 -0
  61. basic_memory/mcp/tools/move_note.py +299 -0
  62. basic_memory/mcp/tools/project_management.py +332 -0
  63. basic_memory/mcp/tools/read_content.py +15 -6
  64. basic_memory/mcp/tools/read_note.py +26 -7
  65. basic_memory/mcp/tools/recent_activity.py +11 -2
  66. basic_memory/mcp/tools/search.py +189 -8
  67. basic_memory/mcp/tools/sync_status.py +254 -0
  68. basic_memory/mcp/tools/utils.py +184 -12
  69. basic_memory/mcp/tools/view_note.py +66 -0
  70. basic_memory/mcp/tools/write_note.py +24 -17
  71. basic_memory/models/__init__.py +3 -2
  72. basic_memory/models/knowledge.py +16 -4
  73. basic_memory/models/project.py +78 -0
  74. basic_memory/models/search.py +8 -5
  75. basic_memory/repository/__init__.py +2 -0
  76. basic_memory/repository/entity_repository.py +8 -3
  77. basic_memory/repository/observation_repository.py +35 -3
  78. basic_memory/repository/project_info_repository.py +3 -2
  79. basic_memory/repository/project_repository.py +85 -0
  80. basic_memory/repository/relation_repository.py +8 -2
  81. basic_memory/repository/repository.py +107 -15
  82. basic_memory/repository/search_repository.py +192 -54
  83. basic_memory/schemas/__init__.py +6 -0
  84. basic_memory/schemas/base.py +33 -5
  85. basic_memory/schemas/directory.py +30 -0
  86. basic_memory/schemas/importer.py +34 -0
  87. basic_memory/schemas/memory.py +84 -13
  88. basic_memory/schemas/project_info.py +112 -2
  89. basic_memory/schemas/prompt.py +90 -0
  90. basic_memory/schemas/request.py +56 -2
  91. basic_memory/schemas/search.py +1 -1
  92. basic_memory/services/__init__.py +2 -1
  93. basic_memory/services/context_service.py +208 -95
  94. basic_memory/services/directory_service.py +167 -0
  95. basic_memory/services/entity_service.py +399 -6
  96. basic_memory/services/exceptions.py +6 -0
  97. basic_memory/services/file_service.py +14 -15
  98. basic_memory/services/initialization.py +170 -66
  99. basic_memory/services/link_resolver.py +35 -12
  100. basic_memory/services/migration_service.py +168 -0
  101. basic_memory/services/project_service.py +671 -0
  102. basic_memory/services/search_service.py +77 -2
  103. basic_memory/services/sync_status_service.py +181 -0
  104. basic_memory/sync/background_sync.py +25 -0
  105. basic_memory/sync/sync_service.py +102 -21
  106. basic_memory/sync/watch_service.py +63 -39
  107. basic_memory/templates/prompts/continue_conversation.hbs +110 -0
  108. basic_memory/templates/prompts/search.hbs +101 -0
  109. {basic_memory-0.12.3.dist-info → basic_memory-0.13.0.dist-info}/METADATA +24 -2
  110. basic_memory-0.13.0.dist-info/RECORD +138 -0
  111. basic_memory/api/routers/project_info_router.py +0 -274
  112. basic_memory/mcp/main.py +0 -24
  113. basic_memory-0.12.3.dist-info/RECORD +0 -100
  114. {basic_memory-0.12.3.dist-info → basic_memory-0.13.0.dist-info}/WHEEL +0 -0
  115. {basic_memory-0.12.3.dist-info → basic_memory-0.13.0.dist-info}/entry_points.txt +0 -0
  116. {basic_memory-0.12.3.dist-info → basic_memory-0.13.0.dist-info}/licenses/LICENSE +0 -0
@@ -1,274 +0,0 @@
1
- """Router for statistics and system information."""
2
-
3
- import json
4
- from datetime import datetime
5
-
6
- from basic_memory.config import config, config_manager
7
- from basic_memory.deps import (
8
- ProjectInfoRepositoryDep,
9
- )
10
- from basic_memory.repository.project_info_repository import ProjectInfoRepository
11
- from basic_memory.schemas import (
12
- ProjectInfoResponse,
13
- ProjectStatistics,
14
- ActivityMetrics,
15
- SystemStatus,
16
- )
17
- from basic_memory.sync.watch_service import WATCH_STATUS_JSON
18
- from fastapi import APIRouter
19
- from sqlalchemy import text
20
-
21
- router = APIRouter(prefix="/stats", tags=["statistics"])
22
-
23
-
24
- @router.get("/project-info", response_model=ProjectInfoResponse)
25
- async def get_project_info(
26
- repository: ProjectInfoRepositoryDep,
27
- ) -> ProjectInfoResponse:
28
- """Get comprehensive information about the current Basic Memory project."""
29
- # Get statistics
30
- statistics = await get_statistics(repository)
31
-
32
- # Get activity metrics
33
- activity = await get_activity_metrics(repository)
34
-
35
- # Get system status
36
- system = await get_system_status()
37
-
38
- # Get project configuration information
39
- project_name = config.project
40
- project_path = str(config.home)
41
- available_projects = config_manager.projects
42
- default_project = config_manager.default_project
43
-
44
- # Construct the response
45
- return ProjectInfoResponse(
46
- project_name=project_name,
47
- project_path=project_path,
48
- available_projects=available_projects,
49
- default_project=default_project,
50
- statistics=statistics,
51
- activity=activity,
52
- system=system,
53
- )
54
-
55
-
56
- async def get_statistics(repository: ProjectInfoRepository) -> ProjectStatistics:
57
- """Get statistics about the current project."""
58
- # Get basic counts
59
- entity_count_result = await repository.execute_query(text("SELECT COUNT(*) FROM entity"))
60
- total_entities = entity_count_result.scalar() or 0
61
-
62
- observation_count_result = await repository.execute_query(
63
- text("SELECT COUNT(*) FROM observation")
64
- )
65
- total_observations = observation_count_result.scalar() or 0
66
-
67
- relation_count_result = await repository.execute_query(text("SELECT COUNT(*) FROM relation"))
68
- total_relations = relation_count_result.scalar() or 0
69
-
70
- unresolved_count_result = await repository.execute_query(
71
- text("SELECT COUNT(*) FROM relation WHERE to_id IS NULL")
72
- )
73
- total_unresolved = unresolved_count_result.scalar() or 0
74
-
75
- # Get entity counts by type
76
- entity_types_result = await repository.execute_query(
77
- text("SELECT entity_type, COUNT(*) FROM entity GROUP BY entity_type")
78
- )
79
- entity_types = {row[0]: row[1] for row in entity_types_result.fetchall()}
80
-
81
- # Get observation counts by category
82
- category_result = await repository.execute_query(
83
- text("SELECT category, COUNT(*) FROM observation GROUP BY category")
84
- )
85
- observation_categories = {row[0]: row[1] for row in category_result.fetchall()}
86
-
87
- # Get relation counts by type
88
- relation_types_result = await repository.execute_query(
89
- text("SELECT relation_type, COUNT(*) FROM relation GROUP BY relation_type")
90
- )
91
- relation_types = {row[0]: row[1] for row in relation_types_result.fetchall()}
92
-
93
- # Find most connected entities (most outgoing relations)
94
- connected_result = await repository.execute_query(
95
- text("""
96
- SELECT e.id, e.title, e.permalink, COUNT(r.id) AS relation_count
97
- FROM entity e
98
- JOIN relation r ON e.id = r.from_id
99
- GROUP BY e.id
100
- ORDER BY relation_count DESC
101
- LIMIT 10
102
- """)
103
- )
104
- most_connected = [
105
- {"id": row[0], "title": row[1], "permalink": row[2], "relation_count": row[3]}
106
- for row in connected_result.fetchall()
107
- ]
108
-
109
- # Count isolated entities (no relations)
110
- isolated_result = await repository.execute_query(
111
- text("""
112
- SELECT COUNT(e.id)
113
- FROM entity e
114
- LEFT JOIN relation r1 ON e.id = r1.from_id
115
- LEFT JOIN relation r2 ON e.id = r2.to_id
116
- WHERE r1.id IS NULL AND r2.id IS NULL
117
- """)
118
- )
119
- isolated_count = isolated_result.scalar() or 0
120
-
121
- return ProjectStatistics(
122
- total_entities=total_entities,
123
- total_observations=total_observations,
124
- total_relations=total_relations,
125
- total_unresolved_relations=total_unresolved,
126
- entity_types=entity_types,
127
- observation_categories=observation_categories,
128
- relation_types=relation_types,
129
- most_connected_entities=most_connected,
130
- isolated_entities=isolated_count,
131
- )
132
-
133
-
134
- async def get_activity_metrics(repository: ProjectInfoRepository) -> ActivityMetrics:
135
- """Get activity metrics for the current project."""
136
- # Get recently created entities
137
- created_result = await repository.execute_query(
138
- text("""
139
- SELECT id, title, permalink, entity_type, created_at
140
- FROM entity
141
- ORDER BY created_at DESC
142
- LIMIT 10
143
- """)
144
- )
145
- recently_created = [
146
- {
147
- "id": row[0],
148
- "title": row[1],
149
- "permalink": row[2],
150
- "entity_type": row[3],
151
- "created_at": row[4],
152
- }
153
- for row in created_result.fetchall()
154
- ]
155
-
156
- # Get recently updated entities
157
- updated_result = await repository.execute_query(
158
- text("""
159
- SELECT id, title, permalink, entity_type, updated_at
160
- FROM entity
161
- ORDER BY updated_at DESC
162
- LIMIT 10
163
- """)
164
- )
165
- recently_updated = [
166
- {
167
- "id": row[0],
168
- "title": row[1],
169
- "permalink": row[2],
170
- "entity_type": row[3],
171
- "updated_at": row[4],
172
- }
173
- for row in updated_result.fetchall()
174
- ]
175
-
176
- # Get monthly growth over the last 6 months
177
- # Calculate the start of 6 months ago
178
- now = datetime.now()
179
- six_months_ago = datetime(
180
- now.year - (1 if now.month <= 6 else 0), ((now.month - 6) % 12) or 12, 1
181
- )
182
-
183
- # Query for monthly entity creation
184
- entity_growth_result = await repository.execute_query(
185
- text(f"""
186
- SELECT
187
- strftime('%Y-%m', created_at) AS month,
188
- COUNT(*) AS count
189
- FROM entity
190
- WHERE created_at >= '{six_months_ago.isoformat()}'
191
- GROUP BY month
192
- ORDER BY month
193
- """)
194
- )
195
- entity_growth = {row[0]: row[1] for row in entity_growth_result.fetchall()}
196
-
197
- # Query for monthly observation creation
198
- observation_growth_result = await repository.execute_query(
199
- text(f"""
200
- SELECT
201
- strftime('%Y-%m', created_at) AS month,
202
- COUNT(*) AS count
203
- FROM observation
204
- INNER JOIN entity ON observation.entity_id = entity.id
205
- WHERE entity.created_at >= '{six_months_ago.isoformat()}'
206
- GROUP BY month
207
- ORDER BY month
208
- """)
209
- )
210
- observation_growth = {row[0]: row[1] for row in observation_growth_result.fetchall()}
211
-
212
- # Query for monthly relation creation
213
- relation_growth_result = await repository.execute_query(
214
- text(f"""
215
- SELECT
216
- strftime('%Y-%m', created_at) AS month,
217
- COUNT(*) AS count
218
- FROM relation
219
- INNER JOIN entity ON relation.from_id = entity.id
220
- WHERE entity.created_at >= '{six_months_ago.isoformat()}'
221
- GROUP BY month
222
- ORDER BY month
223
- """)
224
- )
225
- relation_growth = {row[0]: row[1] for row in relation_growth_result.fetchall()}
226
-
227
- # Combine all monthly growth data
228
- monthly_growth = {}
229
- for month in set(
230
- list(entity_growth.keys()) + list(observation_growth.keys()) + list(relation_growth.keys())
231
- ):
232
- monthly_growth[month] = {
233
- "entities": entity_growth.get(month, 0),
234
- "observations": observation_growth.get(month, 0),
235
- "relations": relation_growth.get(month, 0),
236
- "total": (
237
- entity_growth.get(month, 0)
238
- + observation_growth.get(month, 0)
239
- + relation_growth.get(month, 0)
240
- ),
241
- }
242
-
243
- return ActivityMetrics(
244
- recently_created=recently_created,
245
- recently_updated=recently_updated,
246
- monthly_growth=monthly_growth,
247
- )
248
-
249
-
250
- async def get_system_status() -> SystemStatus:
251
- """Get system status information."""
252
- import basic_memory
253
-
254
- # Get database information
255
- db_path = config.database_path
256
- db_size = db_path.stat().st_size if db_path.exists() else 0
257
- db_size_readable = f"{db_size / (1024 * 1024):.2f} MB"
258
-
259
- # Get watch service status if available
260
- watch_status = None
261
- watch_status_path = config.home / ".basic-memory" / WATCH_STATUS_JSON
262
- if watch_status_path.exists():
263
- try:
264
- watch_status = json.loads(watch_status_path.read_text(encoding="utf-8"))
265
- except Exception: # pragma: no cover
266
- pass
267
-
268
- return SystemStatus(
269
- version=basic_memory.__version__,
270
- database_path=str(db_path),
271
- database_size=db_size_readable,
272
- watch_status=watch_status,
273
- timestamp=datetime.now(),
274
- )
basic_memory/mcp/main.py DELETED
@@ -1,24 +0,0 @@
1
- """Main MCP entrypoint for Basic Memory.
2
-
3
- Creates and configures the shared MCP instance and handles server startup.
4
- """
5
-
6
- from loguru import logger # pragma: no cover
7
-
8
- from basic_memory.config import config # pragma: no cover
9
-
10
- # Import shared mcp instance
11
- from basic_memory.mcp.server import mcp # pragma: no cover
12
-
13
- # Import tools to register them
14
- import basic_memory.mcp.tools # noqa: F401 # pragma: no cover
15
-
16
- # Import prompts to register them
17
- import basic_memory.mcp.prompts # noqa: F401 # pragma: no cover
18
-
19
-
20
- if __name__ == "__main__": # pragma: no cover
21
- home_dir = config.home
22
- logger.info("Starting Basic Memory MCP server")
23
- logger.info(f"Home directory: {home_dir}")
24
- mcp.run()
@@ -1,100 +0,0 @@
1
- basic_memory/__init__.py,sha256=nFAcIbL7D1Mt34yxum-5H8dZECTf5-PIvqTAopg2nCg,123
2
- basic_memory/config.py,sha256=jZmBOj4Gl2l56pApiN88s6juPDaX1g2LcvuVUnUeG0Q,9203
3
- basic_memory/db.py,sha256=8SmrmNAlJlmYT9yIJiPwNq8SN8mB2rbW5t33Rqpyl2I,6052
4
- basic_memory/deps.py,sha256=yI6RL_5-8LXw7ywSJ_84BXAczDtv2h9GFLw-E9XDJFg,5770
5
- basic_memory/file_utils.py,sha256=eaxTKLLEbTIy_Mb_Iv_Dmt4IXAJSrZGVi-Knrpyci3E,6700
6
- basic_memory/utils.py,sha256=BL6DDRiMF1gNcDr_guRAYflooSrSlDniJh96ApdzuDY,7555
7
- basic_memory/alembic/alembic.ini,sha256=IEZsnF8CbbZnkwBr67LzKKNobHuzTaQNUvM8Psop5xc,3733
8
- basic_memory/alembic/env.py,sha256=GyQpEpQu84flqAdelxR0-H9nbkHrVoCboYGfmltBDoA,2737
9
- basic_memory/alembic/migrations.py,sha256=lriHPXDdBLSNXEW3QTpU0SJKuVd1V-8NrVkpN3qfsUQ,718
10
- basic_memory/alembic/script.py.mako,sha256=MEqL-2qATlST9TAOeYgscMn1uy6HUS9NFvDgl93dMj8,635
11
- basic_memory/alembic/versions/3dae7c7b1564_initial_schema.py,sha256=lTbWlAnd1es7xU99DoJgfaRe1_Kte8TL98riqeKGV80,4363
12
- basic_memory/alembic/versions/502b60eaa905_remove_required_from_entity_permalink.py,sha256=k6xYTmYPM9Ros-7CA7BwZBKYwoK_gmVdC-2n8FAjdoE,1840
13
- basic_memory/alembic/versions/b3c3938bacdb_relation_to_name_unique_index.py,sha256=RsGymQzfRXV1LSNKiyi0lMilTxW1NgwS9jR67ye2apI,1428
14
- basic_memory/alembic/versions/cc7172b46608_update_search_index_schema.py,sha256=Lbo3dEzdId_vKRFe3jMkGFF3dNQpblPIQa4Bh7np-zA,4020
15
- basic_memory/api/__init__.py,sha256=wCpj-21j1D0KzKl9Ql6unLBVFY0K1uGp_FeSZRKtqpk,72
16
- basic_memory/api/app.py,sha256=GFFX3MOusEzbDaAVDECk3B46xybuinUfMt4Atw0Nr8c,1724
17
- basic_memory/api/routers/__init__.py,sha256=SKuL-weA58hYj0NOMCQRfmsaumlNjjyVHDXNpRO38bQ,305
18
- basic_memory/api/routers/knowledge_router.py,sha256=iYuBguMb6ERitAwoelSejBYJqLTGfjpkzAHrqwTKjVE,5876
19
- basic_memory/api/routers/memory_router.py,sha256=W_uHJe2c4XN96mFj6XNvUH6INVbl1BMxy0KUchLcbxU,5421
20
- basic_memory/api/routers/project_info_router.py,sha256=Qv12_QL3SRpo7bPcpAjizJmkZEVm5h5tyjrf-qIiRl0,9030
21
- basic_memory/api/routers/resource_router.py,sha256=WEJEqEaY_yTKj5-U-rW4kXQKUcJflykgwI6_g_R41ck,8058
22
- basic_memory/api/routers/search_router.py,sha256=R_a5OF5_8rCjmoOMhmw3M4VLCy6I1KLGJ-otSLB0rbI,1953
23
- basic_memory/cli/__init__.py,sha256=arcKLAWRDhPD7x5t80MlviZeYzwHZ0GZigyy3NKVoGk,33
24
- basic_memory/cli/app.py,sha256=hFRYznTSI58t6FEDUwF_PUgKZF0V63sCHzBDDb5FOAk,2142
25
- basic_memory/cli/main.py,sha256=WhYOCKliF48DLDOukOg3QPiD16IP3AJfhdCIe7Wlh2g,666
26
- basic_memory/cli/commands/__init__.py,sha256=3oojcC-Y-4RPqff9vtwWziT_T4uvBVicL0pSHNilVkU,393
27
- basic_memory/cli/commands/db.py,sha256=-jgVH2fs_s1vvBNJx_FWspQVHv0F6Qd7V5ZPxtYn_jQ,1125
28
- basic_memory/cli/commands/import_chatgpt.py,sha256=M4_oUN9o_BaW5jpKQu2pTEybivB5ccVolhdZzmhLOsI,8162
29
- basic_memory/cli/commands/import_claude_conversations.py,sha256=D_4-0xFKkZka7xFvvW8OkgjLv3TFqsC_VuB2Z-Y3avU,6827
30
- basic_memory/cli/commands/import_claude_projects.py,sha256=KzUuf3wrlvJlqTWCzoLRrNxD3OYNteRXaTFj5IB1FA8,6649
31
- basic_memory/cli/commands/import_memory_json.py,sha256=qA7at-JbpwjGIJ27hbhIOQU6HnhQn4PGK0OxxC0rV1I,5212
32
- basic_memory/cli/commands/mcp.py,sha256=sWwRLRbY_FYUNxoy1a8risypnjS9YvZbnP3IjijiUZ0,1025
33
- basic_memory/cli/commands/project.py,sha256=BSjdz07xDM3R4CUXggv1qhrWLJsEgvGFir6aOUzdr2Q,11330
34
- basic_memory/cli/commands/status.py,sha256=nbs3myxaNtehEEJ4BBngPuKs-vqZTHNCCb0bTgDsE-s,5277
35
- basic_memory/cli/commands/sync.py,sha256=3jwgabxkF4WyFZ-gRC1l8A8p8Z_aYrzHRXOtUfYy2yc,8324
36
- basic_memory/cli/commands/tool.py,sha256=7wte1TqjG__NcC7BB0BRLl8THB3t5eAngud0zVHBQ8k,9506
37
- basic_memory/markdown/__init__.py,sha256=DdzioCWtDnKaq05BHYLgL_78FawEHLpLXnp-kPSVfIc,501
38
- basic_memory/markdown/entity_parser.py,sha256=vf0U2ABdnI4PS2rv7dlm-6WfSzdJlMEar55M79JSZJ0,4436
39
- basic_memory/markdown/markdown_processor.py,sha256=S5ny69zu2dlqO7tWJoLrpLSzg8emQIDq7Du7olpJUsk,4968
40
- basic_memory/markdown/plugins.py,sha256=gtIzKRjoZsyvBqLpVNnrmzl_cbTZ5ZGn8kcuXxQjRko,6639
41
- basic_memory/markdown/schemas.py,sha256=eyxYCr1hVyWmImcle0asE5It_DD6ARkqaBZYu1KK5n4,1896
42
- basic_memory/markdown/utils.py,sha256=wr7KnDMThgnztkOoqSG_ANPhwNBoPkyjYP1sA1Wnxe4,3270
43
- basic_memory/mcp/__init__.py,sha256=dsDOhKqjYeIbCULbHIxfcItTbqudEuEg1Np86eq0GEQ,35
44
- basic_memory/mcp/async_client.py,sha256=Eo345wANiBRSM4u3j_Vd6Ax4YtMg7qbWd9PIoFfj61I,236
45
- basic_memory/mcp/main.py,sha256=0kbcyf1PxRC1bLnHv2zzParfJ6cOq7Am9ScF9UoI50U,703
46
- basic_memory/mcp/server.py,sha256=RgNIyRUsuBgoCntj_5Dn2_QNTBYQ1tjFSEn-Z1PoFzU,1099
47
- basic_memory/mcp/prompts/__init__.py,sha256=-Bl9Dgj2TD9PULjzggPqXuvPEjWCRy7S9Yg03h2-U7A,615
48
- basic_memory/mcp/prompts/ai_assistant_guide.py,sha256=8TI5xObiRVcwv6w9by1xQHlX0whvyE7-LGsiqDMRTFg,821
49
- basic_memory/mcp/prompts/continue_conversation.py,sha256=I1FdNXIsSBKsu2ABj8TRRr-mdZKZ1K8LMCUfAik5Iqs,4424
50
- basic_memory/mcp/prompts/recent_activity.py,sha256=7607MWiGJWY0vPurhVII17LxLZlXY_zmH3xH9LfT6SY,2793
51
- basic_memory/mcp/prompts/search.py,sha256=Z4eb1HFb46p9Ezz9nDLsqedePDQtxWafmpcnR_NZUtA,6282
52
- basic_memory/mcp/prompts/utils.py,sha256=u_bG8DMtMMERvGPJfA3gbl5VAs0xmkuK8ZJBkY8xyV8,5371
53
- basic_memory/mcp/resources/ai_assistant_guide.md,sha256=qnYWDkYlb-JmKuOoZ5llmRas_t4dWDXB_i8LE277Lgs,14777
54
- basic_memory/mcp/tools/__init__.py,sha256=prvB6M150ba8WT-v-tmo4Yfu4JG-0yCi6nfK4SsL7XI,882
55
- basic_memory/mcp/tools/build_context.py,sha256=8xYRPpeYCEU8F9Dv_ctvbunZ8ciKwmFu9i8Pdv5vYfI,2891
56
- basic_memory/mcp/tools/canvas.py,sha256=fHC90eshnSSmROTBV-tBB-FSuXSpYVj_BcDrc96pWi0,2993
57
- basic_memory/mcp/tools/delete_note.py,sha256=mnrgOv-D7f6nsgZIAK0Wvyn0dbkwCg8adW_xJd7jwc0,829
58
- basic_memory/mcp/tools/project_info.py,sha256=pyoHpOMhjMIvZFku2iEIpXc2XDtbnNeb-OMrJlYR9LU,1710
59
- basic_memory/mcp/tools/read_content.py,sha256=PKnvLzNmHfzoIxRKXNaYW5P5q0d1azVwG9juPXPYeQo,8148
60
- basic_memory/mcp/tools/read_note.py,sha256=RyLI7WnZMgM9CkdCZiDcq3cByIXZH2iuYm9HVb3QV24,6463
61
- basic_memory/mcp/tools/recent_activity.py,sha256=_P5cn4_34HYjP7U5qM4Fb_yibw6KzNmVx_tkEwyH9cU,4399
62
- basic_memory/mcp/tools/search.py,sha256=TU9Q89rv9lCUmAWjxcc-J_jFQE8CAQM0lM_b-J8VLRc,3786
63
- basic_memory/mcp/tools/utils.py,sha256=tOWklfSlDcoAJCRBmxkCVwkTY_TDBa5vOGxzU8J5eiQ,13636
64
- basic_memory/mcp/tools/write_note.py,sha256=d7vb8vqwLmDJfSOYV_ZWJlbJD9tZyKvLlb7LTMgPXSM,4990
65
- basic_memory/models/__init__.py,sha256=Bf0xXV_ryndogvZDiVM_Wb6iV2fHUxYNGMZNWNcZi0s,307
66
- basic_memory/models/base.py,sha256=4hAXJ8CE1RnjKhb23lPd-QM7G_FXIdTowMJ9bRixspU,225
67
- basic_memory/models/knowledge.py,sha256=lbKd8VOOVPqXtIhNMY30bIokoQutFjLpHwLD5At90MY,6644
68
- basic_memory/models/search.py,sha256=YnF2YnP6NUFf7SSy9xvkY055MlfkBXJuxLoOhCTvB2Q,1244
69
- basic_memory/repository/__init__.py,sha256=TnscLXARq2iOgQZFvQoT9X1Bn9SB_7s1xw2fOqRs3Jg,252
70
- basic_memory/repository/entity_repository.py,sha256=VLKlQ97-_HhSqc-st_YToWUNE4pJIcKEOcGDxC25q1k,3575
71
- basic_memory/repository/observation_repository.py,sha256=BOcy4wARqCXu-thYyt7mPxt2A2C8TW0le3s_X9wrK6I,1701
72
- basic_memory/repository/project_info_repository.py,sha256=nHWzs0WBQ366WfzIYZgnAfU6tyQ_8slEszWNlDSeIlo,336
73
- basic_memory/repository/relation_repository.py,sha256=DwpTcn9z_1sZQcyMOUABz1k1VSwo_AU63x2zR7aerTk,2933
74
- basic_memory/repository/repository.py,sha256=X03U6FA3tpQ8FoULL7J7GByUeArSc2Ajb5GIJjZ8HBA,11934
75
- basic_memory/repository/search_repository.py,sha256=z6oX6wCLo2JaW2hawtgiyxmTsboKTjuO7cgXsFsQhmA,11607
76
- basic_memory/schemas/__init__.py,sha256=KHzF2lZhYXRsH2g6tV5Oivlk1EHFfrlbKuiRllqnBzs,1570
77
- basic_memory/schemas/base.py,sha256=dwnaI5fJXsdp81mdH0ZpmJ-WICY-0M7ZPWeW5OUgBG8,5685
78
- basic_memory/schemas/delete.py,sha256=UAR2JK99WMj3gP-yoGWlHD3eZEkvlTSRf8QoYIE-Wfw,1180
79
- basic_memory/schemas/memory.py,sha256=qqQm89nZQKtrhquHlRnR6LaSWynPi4MgtcMcqvGH5zg,3136
80
- basic_memory/schemas/project_info.py,sha256=qsZfafp8bn2oqCizX_CVwJZS4HE79kOmaNiNK9C_9_w,3380
81
- basic_memory/schemas/request.py,sha256=58r9mPGc4Am9rR_zGzo-yqXcsrl5I6n3M5LjGK5gFFk,1626
82
- basic_memory/schemas/response.py,sha256=lVYR31DTtSeFRddGWX_wQWnQgyiwX0LEpNJ4f4lKpTM,6440
83
- basic_memory/schemas/search.py,sha256=21GKEQEM3lebJfaTP_gz6DZR4tusx6AeR2E13LtjOvs,3650
84
- basic_memory/services/__init__.py,sha256=oop6SKmzV4_NAYt9otGnupLGVCCKIVgxEcdRQWwh25I,197
85
- basic_memory/services/context_service.py,sha256=vUo4j-_UDDlpL_PxoNTqmG5kZ2m7UfPyIz6FY3SCU7o,9715
86
- basic_memory/services/entity_service.py,sha256=lCdqRnAkaolt_pr48lFxRXAj2YRS-nasJTkepBf3zlU,12915
87
- basic_memory/services/exceptions.py,sha256=VGlCLd4UD2w5NWKqC7QpG4jOM_hA7jKRRM-MqvEVMNk,288
88
- basic_memory/services/file_service.py,sha256=egoJnhoHBUX_wepjkLyyc6qZkPfOexlj8p0HRvtdxWw,9940
89
- basic_memory/services/initialization.py,sha256=T8KPFpFzeURORPjvfhvHE7Vnmx_TXUUGumBCEEiCJaM,4787
90
- basic_memory/services/link_resolver.py,sha256=3I3wp5HHpe17DNHhn1IG3_yWWHYtEZKRNL7I2j_AHos,3599
91
- basic_memory/services/search_service.py,sha256=1K1YuWFVreKjn6LkbOpl-zCmXYjqOQS1qB-yvkwu-zc,9817
92
- basic_memory/services/service.py,sha256=V-d_8gOV07zGIQDpL-Ksqs3ZN9l3qf3HZOK1f_YNTag,336
93
- basic_memory/sync/__init__.py,sha256=CVHguYH457h2u2xoM8KvOilJC71XJlZ-qUh8lHcjYj4,156
94
- basic_memory/sync/sync_service.py,sha256=ZIgaukAsS8PRf5FBPYGT2lVdn--YuGLd8AJShA79IYk,19602
95
- basic_memory/sync/watch_service.py,sha256=ipkW9zK1MhisvdHambB9sesB6vNm0OapMZZM7w0GmsQ,14338
96
- basic_memory-0.12.3.dist-info/METADATA,sha256=JweKYzLuafX1wlbPDDqZ1KVsD2bygQifXzOdn2_g6ig,14992
97
- basic_memory-0.12.3.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
98
- basic_memory-0.12.3.dist-info/entry_points.txt,sha256=wvE2mRF6-Pg4weIYcfQ-86NOLZD4WJg7F7TIsRVFLb8,90
99
- basic_memory-0.12.3.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
100
- basic_memory-0.12.3.dist-info/RECORD,,