basic-memory 0.10.1__py3-none-any.whl → 0.11.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 CHANGED
@@ -1,3 +1,3 @@
1
1
  """basic-memory - Local-first knowledge management combining Zettelkasten with knowledge graphs"""
2
2
 
3
- __version__ = "0.10.1"
3
+ __version__ = "0.11.0"
@@ -1,10 +1,13 @@
1
1
  """Database management commands."""
2
2
 
3
+ import asyncio
4
+
3
5
  import typer
4
6
  from loguru import logger
5
7
 
6
- from basic_memory.alembic import migrations
8
+ from basic_memory import db
7
9
  from basic_memory.cli.app import app
10
+ from basic_memory.config import config
8
11
 
9
12
 
10
13
  @app.command()
@@ -14,7 +17,17 @@ def reset(
14
17
  """Reset database (drop all tables and recreate)."""
15
18
  if typer.confirm("This will delete all data in your db. Are you sure?"):
16
19
  logger.info("Resetting database...")
17
- migrations.reset_database()
20
+ # Get database path
21
+ db_path = config.database_path
22
+
23
+ # Delete the database file if it exists
24
+ if db_path.exists():
25
+ db_path.unlink()
26
+ logger.info(f"Database file deleted: {db_path}")
27
+
28
+ # Create a new empty database
29
+ asyncio.run(db.run_migrations(config))
30
+ logger.info("Database reset complete")
18
31
 
19
32
  if reindex:
20
33
  # Import and run sync
@@ -12,7 +12,7 @@ from basic_memory.cli.app import app
12
12
  from basic_memory.mcp.tools import build_context as mcp_build_context
13
13
  from basic_memory.mcp.tools import read_note as mcp_read_note
14
14
  from basic_memory.mcp.tools import recent_activity as mcp_recent_activity
15
- from basic_memory.mcp.tools import search as mcp_search
15
+ from basic_memory.mcp.tools import search_notes as mcp_search
16
16
  from basic_memory.mcp.tools import write_note as mcp_write_note
17
17
 
18
18
  # Import prompts
@@ -180,8 +180,8 @@ def recent_activity(
180
180
  raise
181
181
 
182
182
 
183
- @tool_app.command()
184
- def search(
183
+ @tool_app.command("search-notes")
184
+ def search_notes(
185
185
  query: str,
186
186
  permalink: Annotated[bool, typer.Option("--permalink", help="Search permalink values")] = False,
187
187
  title: Annotated[bool, typer.Option("--title", help="Search title values")] = False,
basic_memory/config.py CHANGED
@@ -5,12 +5,13 @@ import os
5
5
  from pathlib import Path
6
6
  from typing import Any, Dict, Literal, Optional
7
7
 
8
- import basic_memory
9
- from basic_memory.utils import setup_logging
10
8
  from loguru import logger
11
9
  from pydantic import Field, field_validator
12
10
  from pydantic_settings import BaseSettings, SettingsConfigDict
13
11
 
12
+ import basic_memory
13
+ from basic_memory.utils import setup_logging
14
+
14
15
  DATABASE_NAME = "memory.db"
15
16
  DATA_DIR_NAME = ".basic-memory"
16
17
  CONFIG_FILE_NAME = "config.json"
@@ -213,11 +214,45 @@ user_home = Path.home()
213
214
  log_dir = user_home / DATA_DIR_NAME
214
215
  log_dir.mkdir(parents=True, exist_ok=True)
215
216
 
216
- setup_logging(
217
- env=config.env,
218
- home_dir=user_home, # Use user home for logs
219
- log_level=config.log_level,
220
- log_file=f"{DATA_DIR_NAME}/basic-memory.log",
221
- console=False,
222
- )
223
- logger.info(f"Starting Basic Memory {basic_memory.__version__} (Project: {config.project})")
217
+
218
+ def get_process_name(): # pragma: no cover
219
+ """
220
+ get the type of process for logging
221
+ """
222
+ import sys
223
+
224
+ if "sync" in sys.argv:
225
+ return "sync"
226
+ elif "mcp" in sys.argv:
227
+ return "mcp"
228
+ else:
229
+ return "cli"
230
+
231
+
232
+ process_name = get_process_name()
233
+
234
+ # Global flag to track if logging has been set up
235
+ _LOGGING_SETUP = False
236
+
237
+ def setup_basic_memory_logging(): # pragma: no cover
238
+ """Set up logging for basic-memory, ensuring it only happens once."""
239
+ global _LOGGING_SETUP
240
+ if _LOGGING_SETUP:
241
+ # We can't log before logging is set up
242
+ # print("Skipping duplicate logging setup")
243
+ return
244
+
245
+ setup_logging(
246
+ env=config.env,
247
+ home_dir=user_home, # Use user home for logs
248
+ log_level=config.log_level,
249
+ log_file=f"{DATA_DIR_NAME}/basic-memory-{process_name}.log",
250
+ console=False,
251
+ )
252
+
253
+ logger.info(f"Starting Basic Memory {basic_memory.__version__} (Project: {config.project})")
254
+ _LOGGING_SETUP = True
255
+
256
+
257
+ # Set up logging
258
+ setup_basic_memory_logging()
@@ -14,7 +14,7 @@ from basic_memory.mcp.prompts.utils import format_prompt_context, PromptContext,
14
14
  from basic_memory.mcp.server import mcp
15
15
  from basic_memory.mcp.tools.build_context import build_context
16
16
  from basic_memory.mcp.tools.recent_activity import recent_activity
17
- from basic_memory.mcp.tools.search import search
17
+ from basic_memory.mcp.tools.search import search_notes
18
18
  from basic_memory.schemas.base import TimeFrame
19
19
  from basic_memory.schemas.memory import GraphContext
20
20
  from basic_memory.schemas.search import SearchQuery, SearchItemType
@@ -47,7 +47,7 @@ async def continue_conversation(
47
47
 
48
48
  # If topic provided, search for it
49
49
  if topic:
50
- search_results = await search(
50
+ search_results = await search_notes(
51
51
  SearchQuery(text=topic, after_date=timeframe, types=[SearchItemType.ENTITY])
52
52
  )
53
53
 
@@ -93,7 +93,7 @@ async def continue_conversation(
93
93
  ## Next Steps
94
94
 
95
95
  You can:
96
- - Explore more with: `search({{"text": "{topic}"}})`
96
+ - Explore more with: `search_notes({{"text": "{topic}"}})`
97
97
  - See what's changed: `recent_activity(timeframe="{timeframe or "7d"}")`
98
98
  - **Record new learnings or decisions from this conversation:** `write_note(title="[Create a meaningful title]", content="[Content with observations and relations]")`
99
99
 
@@ -10,7 +10,7 @@ from loguru import logger
10
10
  from pydantic import Field
11
11
 
12
12
  from basic_memory.mcp.server import mcp
13
- from basic_memory.mcp.tools.search import search as search_tool
13
+ from basic_memory.mcp.tools.search import search_notes as search_tool
14
14
  from basic_memory.schemas.base import TimeFrame
15
15
  from basic_memory.schemas.search import SearchQuery, SearchResponse
16
16
 
@@ -144,9 +144,9 @@ def format_search_results(
144
144
  ## Next Steps
145
145
 
146
146
  You can:
147
- - Refine your search: `search("{query} AND additional_term")`
148
- - Exclude terms: `search("{query} NOT exclude_term")`
149
- - View more results: `search("{query}", after_date=None)`
147
+ - Refine your search: `search_notes("{query} AND additional_term")`
148
+ - Exclude terms: `search_notes("{query} NOT exclude_term")`
149
+ - View more results: `search_notes("{query}", after_date=None)`
150
150
  - Check recent activity: `recent_activity()`
151
151
 
152
152
  ## Synthesize and Capture Knowledge
@@ -49,7 +49,7 @@ content = await read_note("specs/search-design") # By path
49
49
  content = await read_note("memory://specs/search") # By memory URL
50
50
 
51
51
  # Searching for knowledge
52
- results = await search(
52
+ results = await search_notes(
53
53
  query="authentication system", # Text to search for
54
54
  page=1, # Optional: Pagination
55
55
  page_size=10 # Optional: Results per page
@@ -154,7 +154,7 @@ Users will interact with Basic Memory in patterns like:
154
154
  Human: "What were our decisions about auth?"
155
155
 
156
156
  You: Let me find that information for you.
157
- [Use search() to find relevant notes]
157
+ [Use search_notes() to find relevant notes]
158
158
  [Then build_context() to understand connections]
159
159
  ```
160
160
 
@@ -263,7 +263,7 @@ When creating relations, you can:
263
263
  # Example workflow for creating notes with effective relations
264
264
  async def create_note_with_effective_relations():
265
265
  # Search for existing entities to reference
266
- search_results = await search("travel")
266
+ search_results = await search_notes("travel")
267
267
  existing_entities = [result.title for result in search_results.primary_results]
268
268
 
269
269
  # Check if specific entities exist
@@ -335,7 +335,7 @@ Common issues to watch for:
335
335
  content = await read_note("Document")
336
336
  except:
337
337
  # Try search instead
338
- results = await search("Document")
338
+ results = await search_notes("Document")
339
339
  if results and results.primary_results:
340
340
  # Found something similar
341
341
  content = await read_note(results.primary_results[0].permalink)
@@ -381,7 +381,7 @@ Common issues to watch for:
381
381
  - **Create deliberate relations**: Connect each note to at least 2-3 related entities
382
382
  - **Use existing entities**: Before creating a new relation, search for existing entities
383
383
  - **Verify wikilinks**: When referencing `[[Entity]]`, use exact titles of existing notes
384
- - **Check accuracy**: Use `search()` or `recent_activity()` to confirm entity titles
384
+ - **Check accuracy**: Use `search_notes()` or `recent_activity()` to confirm entity titles
385
385
  - **Use precise relation types**: Choose specific relation types that convey meaning (e.g., "implements" instead
386
386
  of "relates_to")
387
387
  - **Consider bidirectional relations**: When appropriate, create inverse relations in both entities
@@ -12,7 +12,7 @@ from basic_memory.mcp.tools.build_context import build_context
12
12
  from basic_memory.mcp.tools.recent_activity import recent_activity
13
13
  from basic_memory.mcp.tools.read_note import read_note
14
14
  from basic_memory.mcp.tools.write_note import write_note
15
- from basic_memory.mcp.tools.search import search
15
+ from basic_memory.mcp.tools.search import search_notes
16
16
  from basic_memory.mcp.tools.canvas import canvas
17
17
 
18
18
  __all__ = [
@@ -22,6 +22,6 @@ __all__ = [
22
22
  "read_content",
23
23
  "read_note",
24
24
  "recent_activity",
25
- "search",
25
+ "search_notes",
26
26
  "write_note",
27
27
  ]
@@ -6,7 +6,7 @@ from loguru import logger
6
6
 
7
7
  from basic_memory.mcp.async_client import client
8
8
  from basic_memory.mcp.server import mcp
9
- from basic_memory.mcp.tools.search import search
9
+ from basic_memory.mcp.tools.search import search_notes
10
10
  from basic_memory.mcp.tools.utils import call_get
11
11
  from basic_memory.schemas.memory import memory_url_path
12
12
  from basic_memory.schemas.search import SearchQuery
@@ -63,7 +63,7 @@ async def read_note(identifier: str, page: int = 1, page_size: int = 10) -> str:
63
63
 
64
64
  # Fallback 1: Try title search via API
65
65
  logger.info(f"Search title for: {identifier}")
66
- title_results = await search(SearchQuery(title=identifier))
66
+ title_results = await search_notes(SearchQuery(title=identifier))
67
67
 
68
68
  if title_results and title_results.results:
69
69
  result = title_results.results[0] # Get the first/best match
@@ -87,7 +87,7 @@ async def read_note(identifier: str, page: int = 1, page_size: int = 10) -> str:
87
87
 
88
88
  # Fallback 2: Text search as a last resort
89
89
  logger.info(f"Title search failed, trying text search for: {identifier}")
90
- text_results = await search(SearchQuery(text=identifier))
90
+ text_results = await search_notes(SearchQuery(text=identifier))
91
91
 
92
92
  # We didn't find a direct match, construct a helpful error message
93
93
  if not text_results or not text_results.results:
@@ -11,7 +11,7 @@ from basic_memory.mcp.async_client import client
11
11
  @mcp.tool(
12
12
  description="Search across all content in the knowledge base.",
13
13
  )
14
- async def search(query: SearchQuery, page: int = 1, page_size: int = 10) -> SearchResponse:
14
+ async def search_notes(query: SearchQuery, page: int = 1, page_size: int = 10) -> SearchResponse:
15
15
  """Search across all content in the knowledge base.
16
16
 
17
17
  This tool searches the knowledge base using full-text search, pattern matching,
@@ -36,34 +36,34 @@ async def search(query: SearchQuery, page: int = 1, page_size: int = 10) -> Sear
36
36
 
37
37
  Examples:
38
38
  # Basic text search
39
- results = await search(SearchQuery(text="project planning"))
39
+ results = await search_notes(SearchQuery(text="project planning"))
40
40
 
41
41
  # Boolean AND search (both terms must be present)
42
- results = await search(SearchQuery(text="project AND planning"))
42
+ results = await search_notes(SearchQuery(text="project AND planning"))
43
43
 
44
44
  # Boolean OR search (either term can be present)
45
- results = await search(SearchQuery(text="project OR meeting"))
45
+ results = await search_notes(SearchQuery(text="project OR meeting"))
46
46
 
47
47
  # Boolean NOT search (exclude terms)
48
- results = await search(SearchQuery(text="project NOT meeting"))
48
+ results = await search_notes(SearchQuery(text="project NOT meeting"))
49
49
 
50
50
  # Boolean search with grouping
51
- results = await search(SearchQuery(text="(project OR planning) AND notes"))
51
+ results = await search_notes(SearchQuery(text="(project OR planning) AND notes"))
52
52
 
53
53
  # Search with type filter
54
- results = await search(SearchQuery(
54
+ results = await search_notes(SearchQuery(
55
55
  text="meeting notes",
56
56
  types=["entity"],
57
57
  ))
58
58
 
59
59
  # Search for recent content
60
- results = await search(SearchQuery(
60
+ results = await search_notes(SearchQuery(
61
61
  text="bug report",
62
62
  after_date="1 week"
63
63
  ))
64
64
 
65
65
  # Pattern matching on permalinks
66
- results = await search(SearchQuery(
66
+ results = await search_notes(SearchQuery(
67
67
  permalink_match="docs/meeting-*"
68
68
  ))
69
69
  """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: basic-memory
3
- Version: 0.10.1
3
+ Version: 0.11.0
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
@@ -319,7 +319,8 @@ for OS X):
319
319
  }
320
320
  ```
321
321
 
322
- If you want to use a specific project (see [Multiple Projects](#multiple-projects) below), update your Claude Desktop
322
+ If you want to use a specific project (see [Multiple Projects](docs/User%20Guide.md#multiple-projects)), update your
323
+ Claude Desktop
323
324
  config:
324
325
 
325
326
  ```json
@@ -354,7 +355,7 @@ basic-memory sync --watch
354
355
  write_note(title, content, folder, tags) - Create or update notes
355
356
  read_note(identifier, page, page_size) - Read notes by title or permalink
356
357
  build_context(url, depth, timeframe) - Navigate knowledge graph via memory:// URLs
357
- search(query, page, page_size) - Search across your knowledge base
358
+ search_notes(query, page, page_size) - Search across your knowledge base
358
359
  recent_activity(type, depth, timeframe) - Find recently updated information
359
360
  canvas(nodes, edges, title, folder) - Generate knowledge visualizations
360
361
  ```
@@ -395,4 +396,4 @@ and submitting PRs.
395
396
  </picture>
396
397
  </a>
397
398
 
398
- Built with ♥️ by Basic Machines
399
+ Built with ♥️ by Basic Machines
@@ -1,5 +1,5 @@
1
- basic_memory/__init__.py,sha256=1fDmXe64nAOzDOpG-Ekxh0NJVffTMyGSW3sxqA1XBvY,123
2
- basic_memory/config.py,sha256=PHUrzwjJSHab691mzShz5uZ-uuJyXcznnXA8kjD-wJU,7659
1
+ basic_memory/__init__.py,sha256=06l2-O3MzDid6DzYEdAOjAn3OLuVGdUYBo17g6ZALWQ,123
2
+ basic_memory/config.py,sha256=3lwRFYA1e2dk5JIRNvnuVVIAGT3UXI4FUjN-CEHpJy8,8432
3
3
  basic_memory/db.py,sha256=UDWBr52u7oBT4aXputhAG_Prmsv5og00sYVzPmaylhk,6026
4
4
  basic_memory/deps.py,sha256=yI6RL_5-8LXw7ywSJ_84BXAczDtv2h9GFLw-E9XDJFg,5770
5
5
  basic_memory/file_utils.py,sha256=csvij8o_j14A-rr8NTDeH6pUaI4DdBqNAWJIVc5r4A0,6658
@@ -24,7 +24,7 @@ basic_memory/cli/__init__.py,sha256=arcKLAWRDhPD7x5t80MlviZeYzwHZ0GZigyy3NKVoGk,
24
24
  basic_memory/cli/app.py,sha256=J4mkWnxbevOYmJwwRMx344olGOxoXq0o4RNG6DMQLKE,1804
25
25
  basic_memory/cli/main.py,sha256=9uwxOUc4mDeTeZCEWyJh7X5PzPXG1fva2veV2OPbFtg,1442
26
26
  basic_memory/cli/commands/__init__.py,sha256=3oojcC-Y-4RPqff9vtwWziT_T4uvBVicL0pSHNilVkU,393
27
- basic_memory/cli/commands/db.py,sha256=UL3JXGJrLzKZ-uRwgk6p0kbRznBy5x7keirvweVGNvY,754
27
+ basic_memory/cli/commands/db.py,sha256=-jgVH2fs_s1vvBNJx_FWspQVHv0F6Qd7V5ZPxtYn_jQ,1125
28
28
  basic_memory/cli/commands/import_chatgpt.py,sha256=M4_oUN9o_BaW5jpKQu2pTEybivB5ccVolhdZzmhLOsI,8162
29
29
  basic_memory/cli/commands/import_claude_conversations.py,sha256=D_4-0xFKkZka7xFvvW8OkgjLv3TFqsC_VuB2Z-Y3avU,6827
30
30
  basic_memory/cli/commands/import_claude_projects.py,sha256=KzUuf3wrlvJlqTWCzoLRrNxD3OYNteRXaTFj5IB1FA8,6649
@@ -33,7 +33,7 @@ basic_memory/cli/commands/mcp.py,sha256=ue_zDA8w0zZZToHLvu56s8hWkalgZsC64CfTyXX6
33
33
  basic_memory/cli/commands/project.py,sha256=BSjdz07xDM3R4CUXggv1qhrWLJsEgvGFir6aOUzdr2Q,11330
34
34
  basic_memory/cli/commands/status.py,sha256=nbs3myxaNtehEEJ4BBngPuKs-vqZTHNCCb0bTgDsE-s,5277
35
35
  basic_memory/cli/commands/sync.py,sha256=JxGJA6b7Qksz0ZKonHfB3s--7qzY7eWeLogPX8tR1pY,8351
36
- basic_memory/cli/commands/tool.py,sha256=JG_G4vG_gWLM4PkDXwl89vYwOLSeGDrTb2h0dswQCkE,9075
36
+ basic_memory/cli/commands/tool.py,sha256=0YFWEmaKZ--1SsNjs_Q3hBsg94CMiyqVc3S8gUmxJNo,9101
37
37
  basic_memory/markdown/__init__.py,sha256=DdzioCWtDnKaq05BHYLgL_78FawEHLpLXnp-kPSVfIc,501
38
38
  basic_memory/markdown/entity_parser.py,sha256=Pc6hTm9TB5SRW_ghf7WD-UMjEgOPyc8j8tgCtxEWfLQ,3893
39
39
  basic_memory/markdown/markdown_processor.py,sha256=S5ny69zu2dlqO7tWJoLrpLSzg8emQIDq7Du7olpJUsk,4968
@@ -46,20 +46,20 @@ basic_memory/mcp/main.py,sha256=0kbcyf1PxRC1bLnHv2zzParfJ6cOq7Am9ScF9UoI50U,703
46
46
  basic_memory/mcp/server.py,sha256=VGv0uWma6JGkT6Y_GESYGhGMYfPavkhEKlCNza8bvtY,287
47
47
  basic_memory/mcp/prompts/__init__.py,sha256=-Bl9Dgj2TD9PULjzggPqXuvPEjWCRy7S9Yg03h2-U7A,615
48
48
  basic_memory/mcp/prompts/ai_assistant_guide.py,sha256=8TI5xObiRVcwv6w9by1xQHlX0whvyE7-LGsiqDMRTFg,821
49
- basic_memory/mcp/prompts/continue_conversation.py,sha256=zb_3cOaO7NMFuStBkJDlMstQZqz1RCOYl6txwaHYM_Q,4424
49
+ basic_memory/mcp/prompts/continue_conversation.py,sha256=0AN44p8eF9l3VbtFX8RToSuHwnGYAkKYTZCgWpbbHX0,4442
50
50
  basic_memory/mcp/prompts/recent_activity.py,sha256=7607MWiGJWY0vPurhVII17LxLZlXY_zmH3xH9LfT6SY,2793
51
- basic_memory/mcp/prompts/search.py,sha256=nCz5wPxTszJLNQJ1CE7CIhnamy08EpGLQjoBMlXRRNc,6283
51
+ basic_memory/mcp/prompts/search.py,sha256=wokpuP4uN-N2YVN3VTyIjBG8Uu_HkjYSaln7i4dvfDw,6307
52
52
  basic_memory/mcp/prompts/utils.py,sha256=u_bG8DMtMMERvGPJfA3gbl5VAs0xmkuK8ZJBkY8xyV8,5371
53
- basic_memory/mcp/resources/ai_assistant_guide.md,sha256=EIMQlESWX1pZ19Ia3jMuodW44aCM8u8l78vQlwvPwfs,14747
54
- basic_memory/mcp/tools/__init__.py,sha256=mp8BiY-2YY5zzGBAIbf9hMCQM6uhDtst3eq1ApR2p2s,870
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
55
  basic_memory/mcp/tools/build_context.py,sha256=8xYRPpeYCEU8F9Dv_ctvbunZ8ciKwmFu9i8Pdv5vYfI,2891
56
56
  basic_memory/mcp/tools/canvas.py,sha256=fHC90eshnSSmROTBV-tBB-FSuXSpYVj_BcDrc96pWi0,2993
57
57
  basic_memory/mcp/tools/delete_note.py,sha256=mnrgOv-D7f6nsgZIAK0Wvyn0dbkwCg8adW_xJd7jwc0,829
58
58
  basic_memory/mcp/tools/project_info.py,sha256=pyoHpOMhjMIvZFku2iEIpXc2XDtbnNeb-OMrJlYR9LU,1710
59
59
  basic_memory/mcp/tools/read_content.py,sha256=PKnvLzNmHfzoIxRKXNaYW5P5q0d1azVwG9juPXPYeQo,8148
60
- basic_memory/mcp/tools/read_note.py,sha256=pM6FUxMdDxxCNxhnDrkrVqIJouIRPbUqSHsL3BVgiy8,6469
60
+ basic_memory/mcp/tools/read_note.py,sha256=1i1iaCBpGEhkHwOCn83zkil72tdKSCN_Ndt_HVcnTAw,6487
61
61
  basic_memory/mcp/tools/recent_activity.py,sha256=S0LgIk9RaeYzIsi2FIHs0KK7R1K-LJy3QaSokGlY9ew,3501
62
- basic_memory/mcp/tools/search.py,sha256=zyIcPC2z9485FFcJCnWi7Rv-RIG_BTRo8jS7d03rB3s,2978
62
+ basic_memory/mcp/tools/search.py,sha256=96mc8KTo23Olz918S9C2u4UOWD5QAo-koGfuWBqDVjQ,3032
63
63
  basic_memory/mcp/tools/utils.py,sha256=tOWklfSlDcoAJCRBmxkCVwkTY_TDBa5vOGxzU8J5eiQ,13636
64
64
  basic_memory/mcp/tools/write_note.py,sha256=Z2z92pHb74-uLzahY2Cz5Kj8kGikS4VSWPZ1I1rGy1U,4942
65
65
  basic_memory/models/__init__.py,sha256=Bf0xXV_ryndogvZDiVM_Wb6iV2fHUxYNGMZNWNcZi0s,307
@@ -92,8 +92,8 @@ basic_memory/services/service.py,sha256=V-d_8gOV07zGIQDpL-Ksqs3ZN9l3qf3HZOK1f_YN
92
92
  basic_memory/sync/__init__.py,sha256=CVHguYH457h2u2xoM8KvOilJC71XJlZ-qUh8lHcjYj4,156
93
93
  basic_memory/sync/sync_service.py,sha256=YirSOgk0PyqPJoHXVUzAxhNKdd2pebP8sFeXeAYmGjM,21957
94
94
  basic_memory/sync/watch_service.py,sha256=IliisNN8HMKLnBaF95wGHpA5WqRWujprWJVxOnAQ2yc,13468
95
- basic_memory-0.10.1.dist-info/METADATA,sha256=B0EeeYGFTpEe0VMSaoPT-w-mGIPPB-iNt7uMDaEYERQ,13483
96
- basic_memory-0.10.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
97
- basic_memory-0.10.1.dist-info/entry_points.txt,sha256=IDQa_VmVTzmvMrpnjhEfM0S3F--XsVGEj3MpdJfuo-Q,59
98
- basic_memory-0.10.1.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
99
- basic_memory-0.10.1.dist-info/RECORD,,
95
+ basic_memory-0.11.0.dist-info/METADATA,sha256=G3NFwoGFvifzfrnPYnBemgmGYmz7jUF8qlaN3LpFe_8,13504
96
+ basic_memory-0.11.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
97
+ basic_memory-0.11.0.dist-info/entry_points.txt,sha256=wvE2mRF6-Pg4weIYcfQ-86NOLZD4WJg7F7TIsRVFLb8,90
98
+ basic_memory-0.11.0.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
99
+ basic_memory-0.11.0.dist-info/RECORD,,
@@ -1,2 +1,3 @@
1
1
  [console_scripts]
2
2
  basic-memory = basic_memory.cli.main:app
3
+ bm = basic_memory.cli.main:app