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.
- basic_memory/__init__.py +2 -1
- basic_memory/alembic/env.py +1 -1
- basic_memory/alembic/versions/5fe1ab1ccebe_add_projects_table.py +108 -0
- basic_memory/alembic/versions/647e7a75e2cd_project_constraint_fix.py +104 -0
- basic_memory/alembic/versions/cc7172b46608_update_search_index_schema.py +0 -6
- basic_memory/api/app.py +43 -13
- basic_memory/api/routers/__init__.py +4 -2
- basic_memory/api/routers/directory_router.py +63 -0
- basic_memory/api/routers/importer_router.py +152 -0
- basic_memory/api/routers/knowledge_router.py +139 -37
- basic_memory/api/routers/management_router.py +78 -0
- basic_memory/api/routers/memory_router.py +6 -62
- basic_memory/api/routers/project_router.py +234 -0
- basic_memory/api/routers/prompt_router.py +260 -0
- basic_memory/api/routers/search_router.py +3 -21
- basic_memory/api/routers/utils.py +130 -0
- basic_memory/api/template_loader.py +292 -0
- basic_memory/cli/app.py +20 -21
- basic_memory/cli/commands/__init__.py +2 -1
- basic_memory/cli/commands/auth.py +136 -0
- basic_memory/cli/commands/db.py +3 -3
- basic_memory/cli/commands/import_chatgpt.py +31 -207
- basic_memory/cli/commands/import_claude_conversations.py +16 -142
- basic_memory/cli/commands/import_claude_projects.py +33 -143
- basic_memory/cli/commands/import_memory_json.py +26 -83
- basic_memory/cli/commands/mcp.py +71 -18
- basic_memory/cli/commands/project.py +102 -70
- basic_memory/cli/commands/status.py +19 -9
- basic_memory/cli/commands/sync.py +44 -58
- basic_memory/cli/commands/tool.py +6 -6
- basic_memory/cli/main.py +1 -5
- basic_memory/config.py +143 -87
- basic_memory/db.py +6 -4
- basic_memory/deps.py +227 -30
- basic_memory/importers/__init__.py +27 -0
- basic_memory/importers/base.py +79 -0
- basic_memory/importers/chatgpt_importer.py +222 -0
- basic_memory/importers/claude_conversations_importer.py +172 -0
- basic_memory/importers/claude_projects_importer.py +148 -0
- basic_memory/importers/memory_json_importer.py +93 -0
- basic_memory/importers/utils.py +58 -0
- basic_memory/markdown/entity_parser.py +5 -2
- basic_memory/mcp/auth_provider.py +270 -0
- basic_memory/mcp/external_auth_provider.py +321 -0
- basic_memory/mcp/project_session.py +103 -0
- basic_memory/mcp/prompts/__init__.py +2 -0
- basic_memory/mcp/prompts/continue_conversation.py +18 -68
- basic_memory/mcp/prompts/recent_activity.py +20 -4
- basic_memory/mcp/prompts/search.py +14 -140
- basic_memory/mcp/prompts/sync_status.py +116 -0
- basic_memory/mcp/prompts/utils.py +3 -3
- basic_memory/mcp/{tools → resources}/project_info.py +6 -2
- basic_memory/mcp/server.py +86 -13
- basic_memory/mcp/supabase_auth_provider.py +463 -0
- basic_memory/mcp/tools/__init__.py +24 -0
- basic_memory/mcp/tools/build_context.py +43 -8
- basic_memory/mcp/tools/canvas.py +17 -3
- basic_memory/mcp/tools/delete_note.py +168 -5
- basic_memory/mcp/tools/edit_note.py +303 -0
- basic_memory/mcp/tools/list_directory.py +154 -0
- basic_memory/mcp/tools/move_note.py +299 -0
- basic_memory/mcp/tools/project_management.py +332 -0
- basic_memory/mcp/tools/read_content.py +15 -6
- basic_memory/mcp/tools/read_note.py +26 -7
- basic_memory/mcp/tools/recent_activity.py +11 -2
- basic_memory/mcp/tools/search.py +189 -8
- basic_memory/mcp/tools/sync_status.py +254 -0
- basic_memory/mcp/tools/utils.py +184 -12
- basic_memory/mcp/tools/view_note.py +66 -0
- basic_memory/mcp/tools/write_note.py +24 -17
- basic_memory/models/__init__.py +3 -2
- basic_memory/models/knowledge.py +16 -4
- basic_memory/models/project.py +78 -0
- basic_memory/models/search.py +8 -5
- basic_memory/repository/__init__.py +2 -0
- basic_memory/repository/entity_repository.py +8 -3
- basic_memory/repository/observation_repository.py +35 -3
- basic_memory/repository/project_info_repository.py +3 -2
- basic_memory/repository/project_repository.py +85 -0
- basic_memory/repository/relation_repository.py +8 -2
- basic_memory/repository/repository.py +107 -15
- basic_memory/repository/search_repository.py +192 -54
- basic_memory/schemas/__init__.py +6 -0
- basic_memory/schemas/base.py +33 -5
- basic_memory/schemas/directory.py +30 -0
- basic_memory/schemas/importer.py +34 -0
- basic_memory/schemas/memory.py +84 -13
- basic_memory/schemas/project_info.py +112 -2
- basic_memory/schemas/prompt.py +90 -0
- basic_memory/schemas/request.py +56 -2
- basic_memory/schemas/search.py +1 -1
- basic_memory/services/__init__.py +2 -1
- basic_memory/services/context_service.py +208 -95
- basic_memory/services/directory_service.py +167 -0
- basic_memory/services/entity_service.py +399 -6
- basic_memory/services/exceptions.py +6 -0
- basic_memory/services/file_service.py +14 -15
- basic_memory/services/initialization.py +170 -66
- basic_memory/services/link_resolver.py +35 -12
- basic_memory/services/migration_service.py +168 -0
- basic_memory/services/project_service.py +671 -0
- basic_memory/services/search_service.py +77 -2
- basic_memory/services/sync_status_service.py +181 -0
- basic_memory/sync/background_sync.py +25 -0
- basic_memory/sync/sync_service.py +102 -21
- basic_memory/sync/watch_service.py +63 -39
- basic_memory/templates/prompts/continue_conversation.hbs +110 -0
- basic_memory/templates/prompts/search.hbs +101 -0
- {basic_memory-0.12.3.dist-info → basic_memory-0.13.0.dist-info}/METADATA +24 -2
- basic_memory-0.13.0.dist-info/RECORD +138 -0
- basic_memory/api/routers/project_info_router.py +0 -274
- basic_memory/mcp/main.py +0 -24
- basic_memory-0.12.3.dist-info/RECORD +0 -100
- {basic_memory-0.12.3.dist-info → basic_memory-0.13.0.dist-info}/WHEEL +0 -0
- {basic_memory-0.12.3.dist-info → basic_memory-0.13.0.dist-info}/entry_points.txt +0 -0
- {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,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|