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.
Files changed (54) hide show
  1. {msgsearch-0.2.2 → msgsearch-0.2.3}/CHANGELOG.md +7 -0
  2. {msgsearch-0.2.2 → msgsearch-0.2.3}/PKG-INFO +1 -1
  3. {msgsearch-0.2.2 → msgsearch-0.2.3}/pyproject.toml +1 -1
  4. {msgsearch-0.2.2 → msgsearch-0.2.3}/src/msgsearch/__init__.py +1 -1
  5. {msgsearch-0.2.2 → msgsearch-0.2.3}/src/msgsearch/cli.py +6 -0
  6. {msgsearch-0.2.2 → msgsearch-0.2.3}/.claude/agents/corpus-explorer.md +0 -0
  7. {msgsearch-0.2.2 → msgsearch-0.2.3}/.claude/agents/retrieval-critic.md +0 -0
  8. {msgsearch-0.2.2 → msgsearch-0.2.3}/.claude/commands/bench.md +0 -0
  9. {msgsearch-0.2.2 → msgsearch-0.2.3}/.claude/commands/go.md +0 -0
  10. {msgsearch-0.2.2 → msgsearch-0.2.3}/.claude/commands/recon.md +0 -0
  11. {msgsearch-0.2.2 → msgsearch-0.2.3}/.claude/hooks/verify-retrieval.py +0 -0
  12. {msgsearch-0.2.2 → msgsearch-0.2.3}/.claude/settings.json +0 -0
  13. {msgsearch-0.2.2 → msgsearch-0.2.3}/.github/workflows/ci.yml +0 -0
  14. {msgsearch-0.2.2 → msgsearch-0.2.3}/.github/workflows/release.yml +0 -0
  15. {msgsearch-0.2.2 → msgsearch-0.2.3}/.gitignore +0 -0
  16. {msgsearch-0.2.2 → msgsearch-0.2.3}/AGENTS.md +0 -0
  17. {msgsearch-0.2.2 → msgsearch-0.2.3}/ARCHITECTURE.md +0 -0
  18. {msgsearch-0.2.2 → msgsearch-0.2.3}/CLAUDE.md +0 -0
  19. {msgsearch-0.2.2 → msgsearch-0.2.3}/CONTRIBUTING.md +0 -0
  20. {msgsearch-0.2.2 → msgsearch-0.2.3}/LICENSE +0 -0
  21. {msgsearch-0.2.2 → msgsearch-0.2.3}/README.md +0 -0
  22. {msgsearch-0.2.2 → msgsearch-0.2.3}/eval/__init__.py +0 -0
  23. {msgsearch-0.2.2 → msgsearch-0.2.3}/eval/bench.py +0 -0
  24. {msgsearch-0.2.2 → msgsearch-0.2.3}/eval/gold.jsonl +0 -0
  25. {msgsearch-0.2.2 → msgsearch-0.2.3}/eval/label.py +0 -0
  26. {msgsearch-0.2.2 → msgsearch-0.2.3}/eval/results/baseline.json +0 -0
  27. {msgsearch-0.2.2 → msgsearch-0.2.3}/eval/results/retriever.json +0 -0
  28. {msgsearch-0.2.2 → msgsearch-0.2.3}/eval/results/retriever_bm25.json +0 -0
  29. {msgsearch-0.2.2 → msgsearch-0.2.3}/eval/results/retriever_dense.json +0 -0
  30. {msgsearch-0.2.2 → msgsearch-0.2.3}/eval/results/retriever_norerank.json +0 -0
  31. {msgsearch-0.2.2 → msgsearch-0.2.3}/eval/retriever.py +0 -0
  32. {msgsearch-0.2.2 → msgsearch-0.2.3}/eval/retriever_bm25.py +0 -0
  33. {msgsearch-0.2.2 → msgsearch-0.2.3}/eval/retriever_dense.py +0 -0
  34. {msgsearch-0.2.2 → msgsearch-0.2.3}/eval/retriever_norerank.py +0 -0
  35. {msgsearch-0.2.2 → msgsearch-0.2.3}/src/msgsearch/attributed_body.py +0 -0
  36. {msgsearch-0.2.2 → msgsearch-0.2.3}/src/msgsearch/chunk.py +0 -0
  37. {msgsearch-0.2.2 → msgsearch-0.2.3}/src/msgsearch/config.py +0 -0
  38. {msgsearch-0.2.2 → msgsearch-0.2.3}/src/msgsearch/contacts.py +0 -0
  39. {msgsearch-0.2.2 → msgsearch-0.2.3}/src/msgsearch/doctor.py +0 -0
  40. {msgsearch-0.2.2 → msgsearch-0.2.3}/src/msgsearch/embedder.py +0 -0
  41. {msgsearch-0.2.2 → msgsearch-0.2.3}/src/msgsearch/explore.py +0 -0
  42. {msgsearch-0.2.2 → msgsearch-0.2.3}/src/msgsearch/extract.py +0 -0
  43. {msgsearch-0.2.2 → msgsearch-0.2.3}/src/msgsearch/index.py +0 -0
  44. {msgsearch-0.2.2 → msgsearch-0.2.3}/src/msgsearch/py.typed +0 -0
  45. {msgsearch-0.2.2 → msgsearch-0.2.3}/src/msgsearch/search.py +0 -0
  46. {msgsearch-0.2.2 → msgsearch-0.2.3}/src/msgsearch/sync.py +0 -0
  47. {msgsearch-0.2.2 → msgsearch-0.2.3}/src/msgsearch/tagging.py +0 -0
  48. {msgsearch-0.2.2 → msgsearch-0.2.3}/tests/test_chunk.py +0 -0
  49. {msgsearch-0.2.2 → msgsearch-0.2.3}/tests/test_cli.py +4 -4
  50. {msgsearch-0.2.2 → msgsearch-0.2.3}/tests/test_contacts.py +0 -0
  51. {msgsearch-0.2.2 → msgsearch-0.2.3}/tests/test_index.py +0 -0
  52. {msgsearch-0.2.2 → msgsearch-0.2.3}/tests/test_search.py +0 -0
  53. {msgsearch-0.2.2 → msgsearch-0.2.3}/tests/test_sync.py +0 -0
  54. {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.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
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "msgsearch"
7
- version = "0.2.2"
7
+ version = "0.2.3"
8
8
  description = "Search your iMessage history by meaning, entirely on your own machine."
9
9
  readme = "README.md"
10
10
  license = { file = "LICENSE" }
@@ -13,6 +13,6 @@ The pipeline, in the order data flows through it:
13
13
  Nothing here sends message text anywhere. Both models run locally.
14
14
  """
15
15
 
16
- __version__ = "0.2.2"
16
+ __version__ = "0.2.3"
17
17
 
18
18
  __all__ = ["__version__"]
@@ -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
@@ -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