msgsearch 0.2.2__tar.gz → 0.2.3__tar.gz
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.
- {msgsearch-0.2.2 → msgsearch-0.2.3}/CHANGELOG.md +7 -0
- {msgsearch-0.2.2 → msgsearch-0.2.3}/PKG-INFO +1 -1
- {msgsearch-0.2.2 → msgsearch-0.2.3}/pyproject.toml +1 -1
- {msgsearch-0.2.2 → msgsearch-0.2.3}/src/msgsearch/__init__.py +1 -1
- {msgsearch-0.2.2 → msgsearch-0.2.3}/src/msgsearch/cli.py +6 -0
- {msgsearch-0.2.2 → msgsearch-0.2.3}/.claude/agents/corpus-explorer.md +0 -0
- {msgsearch-0.2.2 → msgsearch-0.2.3}/.claude/agents/retrieval-critic.md +0 -0
- {msgsearch-0.2.2 → msgsearch-0.2.3}/.claude/commands/bench.md +0 -0
- {msgsearch-0.2.2 → msgsearch-0.2.3}/.claude/commands/go.md +0 -0
- {msgsearch-0.2.2 → msgsearch-0.2.3}/.claude/commands/recon.md +0 -0
- {msgsearch-0.2.2 → msgsearch-0.2.3}/.claude/hooks/verify-retrieval.py +0 -0
- {msgsearch-0.2.2 → msgsearch-0.2.3}/.claude/settings.json +0 -0
- {msgsearch-0.2.2 → msgsearch-0.2.3}/.github/workflows/ci.yml +0 -0
- {msgsearch-0.2.2 → msgsearch-0.2.3}/.github/workflows/release.yml +0 -0
- {msgsearch-0.2.2 → msgsearch-0.2.3}/.gitignore +0 -0
- {msgsearch-0.2.2 → msgsearch-0.2.3}/AGENTS.md +0 -0
- {msgsearch-0.2.2 → msgsearch-0.2.3}/ARCHITECTURE.md +0 -0
- {msgsearch-0.2.2 → msgsearch-0.2.3}/CLAUDE.md +0 -0
- {msgsearch-0.2.2 → msgsearch-0.2.3}/CONTRIBUTING.md +0 -0
- {msgsearch-0.2.2 → msgsearch-0.2.3}/LICENSE +0 -0
- {msgsearch-0.2.2 → msgsearch-0.2.3}/README.md +0 -0
- {msgsearch-0.2.2 → msgsearch-0.2.3}/eval/__init__.py +0 -0
- {msgsearch-0.2.2 → msgsearch-0.2.3}/eval/bench.py +0 -0
- {msgsearch-0.2.2 → msgsearch-0.2.3}/eval/gold.jsonl +0 -0
- {msgsearch-0.2.2 → msgsearch-0.2.3}/eval/label.py +0 -0
- {msgsearch-0.2.2 → msgsearch-0.2.3}/eval/results/baseline.json +0 -0
- {msgsearch-0.2.2 → msgsearch-0.2.3}/eval/results/retriever.json +0 -0
- {msgsearch-0.2.2 → msgsearch-0.2.3}/eval/results/retriever_bm25.json +0 -0
- {msgsearch-0.2.2 → msgsearch-0.2.3}/eval/results/retriever_dense.json +0 -0
- {msgsearch-0.2.2 → msgsearch-0.2.3}/eval/results/retriever_norerank.json +0 -0
- {msgsearch-0.2.2 → msgsearch-0.2.3}/eval/retriever.py +0 -0
- {msgsearch-0.2.2 → msgsearch-0.2.3}/eval/retriever_bm25.py +0 -0
- {msgsearch-0.2.2 → msgsearch-0.2.3}/eval/retriever_dense.py +0 -0
- {msgsearch-0.2.2 → msgsearch-0.2.3}/eval/retriever_norerank.py +0 -0
- {msgsearch-0.2.2 → msgsearch-0.2.3}/src/msgsearch/attributed_body.py +0 -0
- {msgsearch-0.2.2 → msgsearch-0.2.3}/src/msgsearch/chunk.py +0 -0
- {msgsearch-0.2.2 → msgsearch-0.2.3}/src/msgsearch/config.py +0 -0
- {msgsearch-0.2.2 → msgsearch-0.2.3}/src/msgsearch/contacts.py +0 -0
- {msgsearch-0.2.2 → msgsearch-0.2.3}/src/msgsearch/doctor.py +0 -0
- {msgsearch-0.2.2 → msgsearch-0.2.3}/src/msgsearch/embedder.py +0 -0
- {msgsearch-0.2.2 → msgsearch-0.2.3}/src/msgsearch/explore.py +0 -0
- {msgsearch-0.2.2 → msgsearch-0.2.3}/src/msgsearch/extract.py +0 -0
- {msgsearch-0.2.2 → msgsearch-0.2.3}/src/msgsearch/index.py +0 -0
- {msgsearch-0.2.2 → msgsearch-0.2.3}/src/msgsearch/py.typed +0 -0
- {msgsearch-0.2.2 → msgsearch-0.2.3}/src/msgsearch/search.py +0 -0
- {msgsearch-0.2.2 → msgsearch-0.2.3}/src/msgsearch/sync.py +0 -0
- {msgsearch-0.2.2 → msgsearch-0.2.3}/src/msgsearch/tagging.py +0 -0
- {msgsearch-0.2.2 → msgsearch-0.2.3}/tests/test_chunk.py +0 -0
- {msgsearch-0.2.2 → msgsearch-0.2.3}/tests/test_cli.py +4 -4
- {msgsearch-0.2.2 → msgsearch-0.2.3}/tests/test_contacts.py +0 -0
- {msgsearch-0.2.2 → msgsearch-0.2.3}/tests/test_index.py +0 -0
- {msgsearch-0.2.2 → msgsearch-0.2.3}/tests/test_search.py +0 -0
- {msgsearch-0.2.2 → msgsearch-0.2.3}/tests/test_sync.py +0 -0
- {msgsearch-0.2.2 → msgsearch-0.2.3}/tests/test_tagging.py +0 -0
|
@@ -3,6 +3,13 @@
|
|
|
3
3
|
Notable changes to msgsearch. Retrieval changes carry the measurement that
|
|
4
4
|
justified them; see `ARCHITECTURE.md` for the full evaluation.
|
|
5
5
|
|
|
6
|
+
## [0.2.3] — 2026-09-06
|
|
7
|
+
|
|
8
|
+
### Fixed
|
|
9
|
+
- Model-loading failures printed a Python traceback around their instructions,
|
|
10
|
+
which reads as a crash rather than "you need to log in" and buries the steps
|
|
11
|
+
under a stack. They now print the guidance alone and exit non-zero.
|
|
12
|
+
|
|
6
13
|
## [0.2.2] — 2026-09-06
|
|
7
14
|
|
|
8
15
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: msgsearch
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.3
|
|
4
4
|
Summary: Search your iMessage history by meaning, entirely on your own machine.
|
|
5
5
|
Project-URL: Homepage, https://github.com/dhruv1707/msgsearch
|
|
6
6
|
Project-URL: Documentation, https://github.com/dhruv1707/msgsearch/blob/main/README.md
|
|
@@ -398,6 +398,12 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
398
398
|
return args.handler(args)
|
|
399
399
|
except KeyboardInterrupt:
|
|
400
400
|
return 130
|
|
401
|
+
except RuntimeError as error:
|
|
402
|
+
# Model loading raises RuntimeError carrying instructions the user can
|
|
403
|
+
# act on. A traceback around them reads as "this crashed" rather than
|
|
404
|
+
# "you need to log in", and buries the steps under a stack.
|
|
405
|
+
print(error, file=sys.stderr)
|
|
406
|
+
return 1
|
|
401
407
|
|
|
402
408
|
|
|
403
409
|
if __name__ == "__main__":
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -73,10 +73,6 @@ class TestEntryPoint(unittest.TestCase):
|
|
|
73
73
|
cli.main(["nonsense"])
|
|
74
74
|
|
|
75
75
|
|
|
76
|
-
if __name__ == "__main__":
|
|
77
|
-
unittest.main()
|
|
78
|
-
|
|
79
|
-
|
|
80
76
|
class TestLoginCommand(unittest.TestCase):
|
|
81
77
|
"""Authentication is a msgsearch command because `hf` is not on the PATH.
|
|
82
78
|
|
|
@@ -98,3 +94,7 @@ class TestLoginCommand(unittest.TestCase):
|
|
|
98
94
|
|
|
99
95
|
def test_token_is_optional_so_it_can_prompt(self):
|
|
100
96
|
self.assertIsNone(self.parser.parse_args(["login"]).token)
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
if __name__ == "__main__":
|
|
100
|
+
unittest.main()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|