sqlite-graph-memory 0.3.2__py3-none-any.whl → 0.3.3__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.
@@ -21,6 +21,6 @@ the indexer and the reranker will tell you what is missing instead of failing
21
21
  on an ``ImportError`` at startup.
22
22
  """
23
23
 
24
- __version__ = "0.3.2"
24
+ __version__ = "0.3.3"
25
25
 
26
26
  __all__ = ["__version__"]
@@ -31,6 +31,7 @@ for _s in (sys.stdout, sys.stderr):
31
31
  try: _s.reconfigure(encoding='utf-8')
32
32
  except Exception: pass
33
33
 
34
+ FEEDBACK_URL = 'https://github.com/tonydzi/sqlite-graph-memory/discussions/categories/ideas'
34
35
  INDEX_DIR = Path(os.getenv('BRAIN_INDEX_DIR', 'index'))
35
36
  AB_DB = Path(os.getenv('TURNSTATE_DB', 'turnstate.db'))
36
37
  EMB = INDEX_DIR / '_brain_e5.npy'
@@ -299,6 +300,8 @@ def main():
299
300
  query = ' '.join(a for a in args if a not in flags)
300
301
  if not query or not EMB.exists():
301
302
  sys.stderr.write('need an embedding index (%s) and a query — run index_notes.py first\n' % EMB)
303
+ if query and not EMB.exists():
304
+ print('Stuck? Tell us what you were trying to do: %s' % FEEDBACK_URL, file=sys.stderr)
302
305
  raise SystemExit(1)
303
306
 
304
307
  dev = pick_device()
@@ -12,9 +12,9 @@ USAGE:
12
12
  python index_notes.py <notes_dir>
13
13
  Config (env, optional):
14
14
  BRAIN_INDEX_DIR output dir (default: ./index)
15
- BRAIN_INDEX_HIDDEN 1 = also index dot-directories (default: skip them,
16
- so .stversions/.obsidian/.git and Syncthing conflict
17
- copies never enter the index)
15
+ BRAIN_INDEX_HIDDEN 1 = also index dot-files and dot-directories (default:
16
+ skip them, so .draft.md, .stversions/.obsidian/.git and
17
+ Syncthing conflict copies never enter the index)
18
18
  """
19
19
  import os, re, sys, pickle
20
20
  from pathlib import Path
@@ -77,15 +77,15 @@ CONFLICT_MARKER = 'sync-conflict'
77
77
  def iter_notes(notes_dir):
78
78
  """Files that count as a note under ``notes_dir``.
79
79
 
80
- Skips dot-directories and Syncthing conflict copies. Set ``BRAIN_INDEX_HIDDEN=1``
81
- to index hidden folders too — someone will legitimately keep notes in one.
80
+ Skips dot-directories, dot-files (``.draft.md``) and Syncthing conflict copies.
81
+ Set ``BRAIN_INDEX_HIDDEN=1`` to index hidden paths too — someone will legitimately keep notes in one.
82
82
  """
83
83
  root = Path(notes_dir)
84
84
  include_hidden = os.getenv('BRAIN_INDEX_HIDDEN', '') not in ('', '0', 'false', 'no')
85
85
  out = []
86
86
  for p in root.rglob('*.md'):
87
87
  rel = p.relative_to(root)
88
- if not include_hidden and any(part.startswith('.') for part in rel.parts[:-1]):
88
+ if not include_hidden and any(part.startswith('.') for part in rel.parts):
89
89
  continue
90
90
  if CONFLICT_MARKER in p.name:
91
91
  continue
@@ -131,7 +131,6 @@ def run_recall(query: str, mode: str = "associative") -> tuple[str, bool]:
131
131
  call_env["PYTHONPATH"] = f"{src_dir}{os.pathsep}{existing_pp}" if existing_pp else src_dir
132
132
  res = subprocess.run(
133
133
  cmd,
134
- cwd=str(ROOT_DIR),
135
134
  env=call_env,
136
135
  capture_output=True,
137
136
  text=True,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: sqlite-graph-memory
3
- Version: 0.3.2
3
+ Version: 0.3.3
4
4
  Summary: Associative memory for LLM agents: Graph RAG over a folder of markdown notes, in one SQLite file, with no server to run.
5
5
  Project-URL: Homepage, https://github.com/tonydzi/sqlite-graph-memory
6
6
  Project-URL: Repository, https://github.com/tonydzi/sqlite-graph-memory
@@ -126,7 +126,7 @@ points, the `[[wikilinks]]` you already wrote by hand are the graph, and a cross
126
126
  reranks what the hop dragged in.
127
127
  SQLite is the only database ([`schema.sql`](src/sqlite_graph_memory/schema.sql)).
128
128
 
129
- Status: **pilot**, and the word is load-bearing: it runs daily in one real setup (a ~100k-note
129
+ Status: **pilot**, and the word is load-bearing: it runs daily in one real setup (an index of ~28k curated notes, ~93k chunks, rebuilt nightly from a ~270k-file
130
130
  Obsidian vault driven by Claude Code), but it is deliberately minimal and makes no attempt
131
131
  to be general — see [What's intentionally missing](#whats-intentionally-missing), which is
132
132
  where the uneven test coverage is described.
@@ -252,7 +252,7 @@ present, and CPU works fine for small corpora.
252
252
 
253
253
  ### What `--ab` looks like
254
254
 
255
- Output of `brain_ask.py` with `--ab`, on a toy 4-note corpus (real runs use a ~100k-note vault):
255
+ Output of `brain_ask.py` with `--ab`, on a toy 4-note corpus (real runs use an index of ~28k notes / ~93k chunks):
256
256
 
257
257
  ```
258
258
  A/B RECALL: how should agent memory work
@@ -491,6 +491,16 @@ Questions, war stories, or you want to run this on your own fleet:
491
491
  - 🌐 [palo-alto.ai](https://palo-alto.ai) · [Palo Alto AI Research Lab](https://github.com/tonydzi)
492
492
  - 🧪 **Engineers: want to test-drive this setup?** Message me — I hand out free starter seeds to engineers who test and report back.
493
493
 
494
+ ## Tell us what is missing
495
+
496
+ You tried this on your own notes and something was missing or broke. That is the most useful
497
+ thing anyone can tell us.
498
+
499
+ - **You started and it did not work:** [open the 3-question form](https://github.com/tonydzi/sqlite-graph-memory/issues/new?template=feature_request.yml) (what you tried, what broke, which machine).
500
+ - **Not sure it is a bug, or just an idea:** [Discussions → Ideas](https://github.com/tonydzi/sqlite-graph-memory/discussions/categories/ideas).
501
+
502
+ Nothing in this package phones home. There is no telemetry, so we only know what you write to us.
503
+
494
504
  ## Contributors welcome — and there is a queue
495
505
 
496
506
  Issues labelled [`accepted`](https://github.com/tonydzi/sqlite-graph-memory/issues?q=is%3Aissue+is%3Aopen+label%3Aaccepted)
@@ -0,0 +1,14 @@
1
+ sqlite_graph_memory/__init__.py,sha256=2xKSCi2vAjRyWsMf6N3Sd9-Znk0IYgmoSc_RzwKM6go,1151
2
+ sqlite_graph_memory/brain_ask.py,sha256=rcXquak8fIYzKLPJL0GhrQGvbA0cVIcj805lNUjvcTY,19392
3
+ sqlite_graph_memory/index_notes.py,sha256=blm9lLlB5MSLB39tNYVtjVGULLQXTQGOth_LV4utyic,5378
4
+ sqlite_graph_memory/mcp_server.py,sha256=XSCd2qJPvAcw9X-81YJzXeAlwL_Ss9soh9kDUqPQ3aQ,9817
5
+ sqlite_graph_memory/ppr.py,sha256=L7VSAiliXr8j3PH2hQqKbdgm08BPm6pZkLcckoMxAro,10001
6
+ sqlite_graph_memory/schema.sql,sha256=8aySXKw3Azaxyzqbd76mKTfOaDP7FlpkLXtgwA8ZVK4,2543
7
+ sqlite_graph_memory/turnstate_hook.py,sha256=fypGmUcHQkzlRN74tvIG07lr9uAXpp2GjetqthkuMc8,8641
8
+ sqlite_graph_memory/turnstate_show.py,sha256=IED7fmJQM5VgBNwxmEoNSZtujRmWja-qVPg5ckbWVnY,2909
9
+ sqlite_graph_memory/vault_stats.py,sha256=QYNGck556RDyLIVFH1C864su5tWehep1DHE21sSTi9g,8596
10
+ sqlite_graph_memory-0.3.3.dist-info/METADATA,sha256=OQVb_K2tbcV2Do83KtG7JlRPLTWnr2ZzNYvBpYhYIiw,33515
11
+ sqlite_graph_memory-0.3.3.dist-info/WHEEL,sha256=W3fkpkm7-wf9vBI5Z-7s0eWkeM-spu78I8Neb98DeEg,87
12
+ sqlite_graph_memory-0.3.3.dist-info/entry_points.txt,sha256=ggzirSEagKB7DZnMli9NUDiMuaog1oeBu_NpRPiKmr0,387
13
+ sqlite_graph_memory-0.3.3.dist-info/licenses/LICENSE,sha256=p88nZdrfMUiES3_MpUEwhGmqz2hQFpyMh0k0cqdpfU8,1082
14
+ sqlite_graph_memory-0.3.3.dist-info/RECORD,,
@@ -1,14 +0,0 @@
1
- sqlite_graph_memory/__init__.py,sha256=UjsgczAXDPxFURyM2QPQpy5D1LYuVFJ8x-7KWPMKsHY,1151
2
- sqlite_graph_memory/brain_ask.py,sha256=v3Xn3uczigPxHvsfzoKtZOHmJdMwDjK9ZdP7HKUHkN4,19161
3
- sqlite_graph_memory/index_notes.py,sha256=Hmt0_VVJHS-zXhPPw9h2te8iG1W48f1tJ_H0ALt9aLk,5333
4
- sqlite_graph_memory/mcp_server.py,sha256=rYrEUVVnQ5KfZLGIt1Pcpm_6eGZIR37KDKDVSBtilWU,9848
5
- sqlite_graph_memory/ppr.py,sha256=L7VSAiliXr8j3PH2hQqKbdgm08BPm6pZkLcckoMxAro,10001
6
- sqlite_graph_memory/schema.sql,sha256=8aySXKw3Azaxyzqbd76mKTfOaDP7FlpkLXtgwA8ZVK4,2543
7
- sqlite_graph_memory/turnstate_hook.py,sha256=fypGmUcHQkzlRN74tvIG07lr9uAXpp2GjetqthkuMc8,8641
8
- sqlite_graph_memory/turnstate_show.py,sha256=IED7fmJQM5VgBNwxmEoNSZtujRmWja-qVPg5ckbWVnY,2909
9
- sqlite_graph_memory/vault_stats.py,sha256=QYNGck556RDyLIVFH1C864su5tWehep1DHE21sSTi9g,8596
10
- sqlite_graph_memory-0.3.2.dist-info/METADATA,sha256=ZZNMig7G0ZP5F0vHv7CPLLEXUpvQBWmWx6p6XTic3ME,32837
11
- sqlite_graph_memory-0.3.2.dist-info/WHEEL,sha256=W3fkpkm7-wf9vBI5Z-7s0eWkeM-spu78I8Neb98DeEg,87
12
- sqlite_graph_memory-0.3.2.dist-info/entry_points.txt,sha256=ggzirSEagKB7DZnMli9NUDiMuaog1oeBu_NpRPiKmr0,387
13
- sqlite_graph_memory-0.3.2.dist-info/licenses/LICENSE,sha256=p88nZdrfMUiES3_MpUEwhGmqz2hQFpyMh0k0cqdpfU8,1082
14
- sqlite_graph_memory-0.3.2.dist-info/RECORD,,