basic-memory 0.7.0__py3-none-any.whl → 0.16.1__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 (150) hide show
  1. basic_memory/__init__.py +5 -1
  2. basic_memory/alembic/alembic.ini +119 -0
  3. basic_memory/alembic/env.py +27 -3
  4. basic_memory/alembic/migrations.py +4 -9
  5. basic_memory/alembic/versions/502b60eaa905_remove_required_from_entity_permalink.py +51 -0
  6. basic_memory/alembic/versions/5fe1ab1ccebe_add_projects_table.py +108 -0
  7. basic_memory/alembic/versions/647e7a75e2cd_project_constraint_fix.py +104 -0
  8. basic_memory/alembic/versions/9d9c1cb7d8f5_add_mtime_and_size_columns_to_entity_.py +49 -0
  9. basic_memory/alembic/versions/a1b2c3d4e5f6_fix_project_foreign_keys.py +49 -0
  10. basic_memory/alembic/versions/b3c3938bacdb_relation_to_name_unique_index.py +44 -0
  11. basic_memory/alembic/versions/cc7172b46608_update_search_index_schema.py +100 -0
  12. basic_memory/alembic/versions/e7e1f4367280_add_scan_watermark_tracking_to_project.py +37 -0
  13. basic_memory/api/app.py +64 -18
  14. basic_memory/api/routers/__init__.py +4 -1
  15. basic_memory/api/routers/directory_router.py +84 -0
  16. basic_memory/api/routers/importer_router.py +152 -0
  17. basic_memory/api/routers/knowledge_router.py +166 -21
  18. basic_memory/api/routers/management_router.py +80 -0
  19. basic_memory/api/routers/memory_router.py +9 -64
  20. basic_memory/api/routers/project_router.py +406 -0
  21. basic_memory/api/routers/prompt_router.py +260 -0
  22. basic_memory/api/routers/resource_router.py +119 -4
  23. basic_memory/api/routers/search_router.py +5 -5
  24. basic_memory/api/routers/utils.py +130 -0
  25. basic_memory/api/template_loader.py +292 -0
  26. basic_memory/cli/app.py +43 -9
  27. basic_memory/cli/auth.py +277 -0
  28. basic_memory/cli/commands/__init__.py +13 -2
  29. basic_memory/cli/commands/cloud/__init__.py +6 -0
  30. basic_memory/cli/commands/cloud/api_client.py +112 -0
  31. basic_memory/cli/commands/cloud/bisync_commands.py +110 -0
  32. basic_memory/cli/commands/cloud/cloud_utils.py +101 -0
  33. basic_memory/cli/commands/cloud/core_commands.py +195 -0
  34. basic_memory/cli/commands/cloud/rclone_commands.py +301 -0
  35. basic_memory/cli/commands/cloud/rclone_config.py +110 -0
  36. basic_memory/cli/commands/cloud/rclone_installer.py +249 -0
  37. basic_memory/cli/commands/cloud/upload.py +233 -0
  38. basic_memory/cli/commands/cloud/upload_command.py +124 -0
  39. basic_memory/cli/commands/command_utils.py +51 -0
  40. basic_memory/cli/commands/db.py +28 -12
  41. basic_memory/cli/commands/import_chatgpt.py +40 -220
  42. basic_memory/cli/commands/import_claude_conversations.py +41 -168
  43. basic_memory/cli/commands/import_claude_projects.py +46 -157
  44. basic_memory/cli/commands/import_memory_json.py +48 -108
  45. basic_memory/cli/commands/mcp.py +84 -10
  46. basic_memory/cli/commands/project.py +876 -0
  47. basic_memory/cli/commands/status.py +50 -33
  48. basic_memory/cli/commands/tool.py +341 -0
  49. basic_memory/cli/main.py +8 -7
  50. basic_memory/config.py +477 -23
  51. basic_memory/db.py +168 -17
  52. basic_memory/deps.py +251 -25
  53. basic_memory/file_utils.py +113 -58
  54. basic_memory/ignore_utils.py +297 -0
  55. basic_memory/importers/__init__.py +27 -0
  56. basic_memory/importers/base.py +79 -0
  57. basic_memory/importers/chatgpt_importer.py +232 -0
  58. basic_memory/importers/claude_conversations_importer.py +177 -0
  59. basic_memory/importers/claude_projects_importer.py +148 -0
  60. basic_memory/importers/memory_json_importer.py +108 -0
  61. basic_memory/importers/utils.py +58 -0
  62. basic_memory/markdown/entity_parser.py +143 -23
  63. basic_memory/markdown/markdown_processor.py +3 -3
  64. basic_memory/markdown/plugins.py +39 -21
  65. basic_memory/markdown/schemas.py +1 -1
  66. basic_memory/markdown/utils.py +28 -13
  67. basic_memory/mcp/async_client.py +134 -4
  68. basic_memory/mcp/project_context.py +141 -0
  69. basic_memory/mcp/prompts/__init__.py +19 -0
  70. basic_memory/mcp/prompts/ai_assistant_guide.py +70 -0
  71. basic_memory/mcp/prompts/continue_conversation.py +62 -0
  72. basic_memory/mcp/prompts/recent_activity.py +188 -0
  73. basic_memory/mcp/prompts/search.py +57 -0
  74. basic_memory/mcp/prompts/utils.py +162 -0
  75. basic_memory/mcp/resources/ai_assistant_guide.md +283 -0
  76. basic_memory/mcp/resources/project_info.py +71 -0
  77. basic_memory/mcp/server.py +7 -13
  78. basic_memory/mcp/tools/__init__.py +33 -21
  79. basic_memory/mcp/tools/build_context.py +120 -0
  80. basic_memory/mcp/tools/canvas.py +130 -0
  81. basic_memory/mcp/tools/chatgpt_tools.py +187 -0
  82. basic_memory/mcp/tools/delete_note.py +225 -0
  83. basic_memory/mcp/tools/edit_note.py +320 -0
  84. basic_memory/mcp/tools/list_directory.py +167 -0
  85. basic_memory/mcp/tools/move_note.py +545 -0
  86. basic_memory/mcp/tools/project_management.py +200 -0
  87. basic_memory/mcp/tools/read_content.py +271 -0
  88. basic_memory/mcp/tools/read_note.py +255 -0
  89. basic_memory/mcp/tools/recent_activity.py +534 -0
  90. basic_memory/mcp/tools/search.py +369 -23
  91. basic_memory/mcp/tools/utils.py +374 -16
  92. basic_memory/mcp/tools/view_note.py +77 -0
  93. basic_memory/mcp/tools/write_note.py +207 -0
  94. basic_memory/models/__init__.py +3 -2
  95. basic_memory/models/knowledge.py +67 -15
  96. basic_memory/models/project.py +87 -0
  97. basic_memory/models/search.py +10 -6
  98. basic_memory/repository/__init__.py +2 -0
  99. basic_memory/repository/entity_repository.py +229 -7
  100. basic_memory/repository/observation_repository.py +35 -3
  101. basic_memory/repository/project_info_repository.py +10 -0
  102. basic_memory/repository/project_repository.py +103 -0
  103. basic_memory/repository/relation_repository.py +21 -2
  104. basic_memory/repository/repository.py +147 -29
  105. basic_memory/repository/search_repository.py +411 -62
  106. basic_memory/schemas/__init__.py +22 -9
  107. basic_memory/schemas/base.py +97 -8
  108. basic_memory/schemas/cloud.py +50 -0
  109. basic_memory/schemas/directory.py +30 -0
  110. basic_memory/schemas/importer.py +35 -0
  111. basic_memory/schemas/memory.py +187 -25
  112. basic_memory/schemas/project_info.py +211 -0
  113. basic_memory/schemas/prompt.py +90 -0
  114. basic_memory/schemas/request.py +56 -2
  115. basic_memory/schemas/response.py +1 -1
  116. basic_memory/schemas/search.py +31 -35
  117. basic_memory/schemas/sync_report.py +72 -0
  118. basic_memory/services/__init__.py +2 -1
  119. basic_memory/services/context_service.py +241 -104
  120. basic_memory/services/directory_service.py +295 -0
  121. basic_memory/services/entity_service.py +590 -60
  122. basic_memory/services/exceptions.py +21 -0
  123. basic_memory/services/file_service.py +284 -30
  124. basic_memory/services/initialization.py +191 -0
  125. basic_memory/services/link_resolver.py +49 -56
  126. basic_memory/services/project_service.py +863 -0
  127. basic_memory/services/search_service.py +168 -32
  128. basic_memory/sync/__init__.py +3 -2
  129. basic_memory/sync/background_sync.py +26 -0
  130. basic_memory/sync/sync_service.py +1180 -109
  131. basic_memory/sync/watch_service.py +412 -135
  132. basic_memory/templates/prompts/continue_conversation.hbs +110 -0
  133. basic_memory/templates/prompts/search.hbs +101 -0
  134. basic_memory/utils.py +383 -51
  135. basic_memory-0.16.1.dist-info/METADATA +493 -0
  136. basic_memory-0.16.1.dist-info/RECORD +148 -0
  137. {basic_memory-0.7.0.dist-info → basic_memory-0.16.1.dist-info}/entry_points.txt +1 -0
  138. basic_memory/alembic/README +0 -1
  139. basic_memory/cli/commands/sync.py +0 -206
  140. basic_memory/cli/commands/tools.py +0 -157
  141. basic_memory/mcp/tools/knowledge.py +0 -68
  142. basic_memory/mcp/tools/memory.py +0 -170
  143. basic_memory/mcp/tools/notes.py +0 -202
  144. basic_memory/schemas/discovery.py +0 -28
  145. basic_memory/sync/file_change_scanner.py +0 -158
  146. basic_memory/sync/utils.py +0 -31
  147. basic_memory-0.7.0.dist-info/METADATA +0 -378
  148. basic_memory-0.7.0.dist-info/RECORD +0 -82
  149. {basic_memory-0.7.0.dist-info → basic_memory-0.16.1.dist-info}/WHEEL +0 -0
  150. {basic_memory-0.7.0.dist-info → basic_memory-0.16.1.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,110 @@
1
+ # Continuing conversation on: {{ topic }}
2
+
3
+ This is a memory retrieval session.
4
+
5
+ Please use the available basic-memory tools to gather relevant context before responding. Start by executing one of the suggested commands below to retrieve content.
6
+
7
+ > **Knowledge Capture Recommendation:** As you continue this conversation, actively look for opportunities to record new information, decisions, or insights that emerge. Use `write_note()` to document important context.
8
+
9
+ Here's what I found from previous conversations:
10
+
11
+ {{#if has_results}}
12
+ {{#each hierarchical_results}}
13
+ <memory>
14
+ --- memory://{{ primary_result.permalink }}
15
+
16
+ ## {{ primary_result.title }}
17
+ - **Type**: {{ primary_result.type }}
18
+ - **Created**: {{date primary_result.created_at "%Y-%m-%d %H:%M"}}
19
+
20
+ {{#if primary_result.content}}
21
+ **Excerpt**:
22
+ <excerpt>
23
+ {{ primary_result.content }}
24
+ </excerpt>
25
+ {{/if}}
26
+
27
+ {{#if observations}}
28
+ ## Observations
29
+ {{#each observations}}
30
+ <observation>
31
+ - [{{ category }}] {{ content }}
32
+ </observation>
33
+ {{/each}}
34
+ {{/if}}
35
+
36
+ You can read this document with: `read_note("{{ primary_result.permalink }}")`
37
+
38
+ {{#if related_results}}
39
+ ## Related Context
40
+
41
+ {{#each related_results}}
42
+ <related>
43
+ - type: **{{ type }}**
44
+ - title: {{ title }}
45
+
46
+ {{#if permalink}}
47
+ You can view this document with: `read_note("{{ permalink }}")`
48
+ {{else}}
49
+ You can view this file with: `read_file("{{ file_path }}")`
50
+ {{/if}}
51
+ </related>
52
+ {{/each}}
53
+ {{/if}}
54
+
55
+ </memory>
56
+ {{/each}}
57
+ {{else}}
58
+ The supplied query did not return any information specifically on this topic.
59
+
60
+ ## Opportunity to Capture New Knowledge!
61
+
62
+ This is an excellent chance to start documenting this topic:
63
+
64
+ ```python
65
+ await write_note(
66
+ title="{{ topic }}",
67
+ content=f'''
68
+ # {{ topic }}
69
+
70
+ ## Overview
71
+ [Summary of what we know about {{ topic }}]
72
+
73
+ ## Key Points
74
+ [Main aspects or components of {{ topic }}]
75
+
76
+ ## Observations
77
+ - [category] [First important observation about {{ topic }}]
78
+ - [category] [Second observation about {{ topic }}]
79
+
80
+ ## Relations
81
+ - relates_to [[Related Topic]]
82
+ - part_of [[Broader Context]]
83
+ '''
84
+ )
85
+ ```
86
+
87
+ ## Other Options
88
+
89
+ Please use the available basic-memory tools to gather relevant context before responding.
90
+ You can also:
91
+ - Try a different search term
92
+ - Check recent activity with `recent_activity(timeframe="1w")`
93
+ {{/if}}
94
+ ## Next Steps
95
+ <instructions>
96
+ You can:
97
+ - Explore more with: `search_notes("{{ topic }}")`
98
+ - See what's changed: `recent_activity(timeframe="{{default timeframe "7d"}}")`
99
+ - **Record new learnings or decisions from this conversation:** `write_note(folder="[Choose a folder]" title="[Create a meaningful title]", content="[Content with observations and relations]")`
100
+
101
+ ## Knowledge Capture Recommendation
102
+
103
+ As you continue this conversation, **actively look for opportunities to:**
104
+ 1. Record key information, decisions, or insights that emerge
105
+ 2. Link new knowledge to existing topics
106
+ 3. Suggest capturing important context when appropriate
107
+ 4. Create forward references to topics that might be created later
108
+
109
+ Remember that capturing knowledge during conversations is one of the most valuable aspects of Basic Memory.
110
+ </instructions>
@@ -0,0 +1,101 @@
1
+ # Search Results for: "{{ query }}"{{#if timeframe}} (after {{ timeframe }}){{/if}}
2
+
3
+ This is a memory search session.
4
+ Please use the available basic-memory tools to gather relevant context before responding.
5
+ I found {{ result_count }} result(s) that match your query.
6
+
7
+ {{#if has_results}}
8
+ Here are the most relevant results:
9
+
10
+ {{#each results}}
11
+ {{#if_cond (lt @index 5)}}
12
+ {{#dedent}}
13
+ ## {{math @index "+" 1}}. {{ title }}
14
+ - **Type**: {{ type.value }}
15
+ {{#if metadata.created_at}}
16
+ - **Created**: {{date metadata.created_at "%Y-%m-%d %H:%M"}}
17
+ {{/if}}
18
+ - **Relevance Score**: {{round score 2}}
19
+
20
+ {{#if content}}
21
+ - **Excerpt**:
22
+ {{ content }}
23
+ {{/if}}
24
+
25
+ {{#if permalink}}
26
+ You can view this content with: `read_note("{{ permalink }}")`
27
+ Or explore its context with: `build_context("memory://{{ permalink }}")`
28
+ {{else}}
29
+ You can view this file with: `read_file("{{ file_path }}")`
30
+ {{/if}}
31
+ {{/dedent}}
32
+ {{/if_cond}}
33
+ {{/each}}
34
+
35
+ ## Next Steps
36
+
37
+ You can:
38
+ - Refine your search: `search_notes("{{ query }} AND additional_term")`
39
+ - Exclude terms: `search_notes("{{ query }} NOT exclude_term")`
40
+ - View more results: `search_notes("{{ query }}", after_date=None)`
41
+ - Check recent activity: `recent_activity()`
42
+
43
+ ## Synthesize and Capture Knowledge
44
+
45
+ Consider creating a new note that synthesizes what you've learned:
46
+
47
+ ```python
48
+ await write_note(
49
+ title="Synthesis of {{capitalize query}} Information",
50
+ content='''
51
+ # Synthesis of {{capitalize query}} Information
52
+
53
+ ## Overview
54
+ [Synthesis of the search results and your conversation]
55
+
56
+ ## Key Insights
57
+ [Summary of main points learned from these results]
58
+
59
+ ## Observations
60
+ - [insight] [Important observation from search results]
61
+ - [connection] [How this connects to other topics]
62
+
63
+ ## Relations
64
+ - relates_to [[{{#if results.length}}{{#if results.0.title}}{{results.0.title}}{{else}}Related Topic{{/if}}{{else}}Related Topic{{/if}}]]
65
+ - extends [[Another Relevant Topic]]
66
+ '''
67
+ )
68
+ ```
69
+
70
+ Remember that capturing synthesized knowledge is one of the most valuable features of Basic Memory.
71
+ {{else}}
72
+ I couldn't find any results for this query.
73
+
74
+ ## Opportunity to Capture Knowledge!
75
+
76
+ This is an excellent opportunity to create new knowledge on this topic. Consider:
77
+
78
+ ```python
79
+ await write_note(
80
+ title="{{capitalize query}}",
81
+ content='''
82
+ # {{capitalize query}}
83
+
84
+ ## Overview
85
+ [Summary of what we've discussed about {{ query }}]
86
+
87
+ ## Observations
88
+ - [category] [First observation about {{ query }}]
89
+ - [category] [Second observation about {{ query }}]
90
+
91
+ ## Relations
92
+ - relates_to [[Other Relevant Topic]]
93
+ '''
94
+ )
95
+ ```
96
+
97
+ ## Other Suggestions
98
+ - Try a different search term
99
+ - Broaden your search criteria
100
+ - Check recent activity with `recent_activity(timeframe="1w")`
101
+ {{/if}}