memor-cli 0.7.0__tar.gz → 0.7.1__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 (106) hide show
  1. {memor_cli-0.7.0/memor_cli.egg-info → memor_cli-0.7.1}/PKG-INFO +3 -3
  2. {memor_cli-0.7.0 → memor_cli-0.7.1}/README.md +2 -2
  3. memor_cli-0.7.1/memor/__init__.py +1 -0
  4. {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/hook_server.py +6 -1
  5. {memor_cli-0.7.0 → memor_cli-0.7.1/memor_cli.egg-info}/PKG-INFO +3 -3
  6. {memor_cli-0.7.0 → memor_cli-0.7.1}/pyproject.toml +1 -1
  7. {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_multi_agent_hook.py +17 -0
  8. memor_cli-0.7.0/memor/__init__.py +0 -1
  9. {memor_cli-0.7.0 → memor_cli-0.7.1}/LICENSE +0 -0
  10. {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/cli.py +0 -0
  11. {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/daemon.py +0 -0
  12. {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/dashboard/__init__.py +0 -0
  13. {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/dashboard/server.py +0 -0
  14. {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/dashboard/static/index.html +0 -0
  15. {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/distill/__init__.py +0 -0
  16. {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/distill/distiller.py +0 -0
  17. {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/distill/extractive.py +0 -0
  18. {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/embed/__init__.py +0 -0
  19. {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/embed/api.py +0 -0
  20. {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/embed/fake.py +0 -0
  21. {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/embed/local.py +0 -0
  22. {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/eval/__init__.py +0 -0
  23. {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/eval/baselines/__init__.py +0 -0
  24. {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/eval/baselines/base.py +0 -0
  25. {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/eval/baselines/claude_mem.py +0 -0
  26. {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/eval/baselines/graphiti.py +0 -0
  27. {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/eval/counterfactual.py +0 -0
  28. {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/eval/dataset.py +0 -0
  29. {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/eval/embed_benchmark.py +0 -0
  30. {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/eval/judge.py +0 -0
  31. {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/eval/metrics.py +0 -0
  32. {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/eval/runner.py +0 -0
  33. {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/feedback.py +0 -0
  34. {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/global_memories.py +0 -0
  35. {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/hook_cli.py +0 -0
  36. {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/ingest/__init__.py +0 -0
  37. {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/ingest/claude_code.py +0 -0
  38. {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/ingest/documents.py +0 -0
  39. {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/interfaces.py +0 -0
  40. {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/llm/__init__.py +0 -0
  41. {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/llm/anthropic.py +0 -0
  42. {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/llm/base.py +0 -0
  43. {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/llm/openai_compat.py +0 -0
  44. {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/project.py +0 -0
  45. {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/query_complexity.py +0 -0
  46. {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/recall.py +0 -0
  47. {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/redact.py +0 -0
  48. {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/retrieve/__init__.py +0 -0
  49. {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/retrieve/retriever.py +0 -0
  50. {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/service.py +0 -0
  51. {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/session_context.py +0 -0
  52. {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/store/__init__.py +0 -0
  53. {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/store/sqlite_store.py +0 -0
  54. {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/tokencount.py +0 -0
  55. {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/turn_metrics.py +0 -0
  56. {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/types.py +0 -0
  57. {memor_cli-0.7.0 → memor_cli-0.7.1}/memor_cli.egg-info/SOURCES.txt +0 -0
  58. {memor_cli-0.7.0 → memor_cli-0.7.1}/memor_cli.egg-info/dependency_links.txt +0 -0
  59. {memor_cli-0.7.0 → memor_cli-0.7.1}/memor_cli.egg-info/entry_points.txt +0 -0
  60. {memor_cli-0.7.0 → memor_cli-0.7.1}/memor_cli.egg-info/requires.txt +0 -0
  61. {memor_cli-0.7.0 → memor_cli-0.7.1}/memor_cli.egg-info/top_level.txt +0 -0
  62. {memor_cli-0.7.0 → memor_cli-0.7.1}/setup.cfg +0 -0
  63. {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_cli_smoke.py +0 -0
  64. {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_counterfactual.py +0 -0
  65. {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_daemon.py +0 -0
  66. {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_dashboard.py +0 -0
  67. {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_dashboard_quality.py +0 -0
  68. {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_dataset_builder.py +0 -0
  69. {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_dimension_safety.py +0 -0
  70. {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_distiller.py +0 -0
  71. {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_embed.py +0 -0
  72. {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_embed_benchmark.py +0 -0
  73. {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_eval_ablation.py +0 -0
  74. {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_eval_runner.py +0 -0
  75. {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_external_baselines.py +0 -0
  76. {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_extractive.py +0 -0
  77. {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_feedback.py +0 -0
  78. {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_global_memories.py +0 -0
  79. {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_hook.py +0 -0
  80. {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_hook_server.py +0 -0
  81. {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_hybrid_retrieval.py +0 -0
  82. {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_ingest_claude_code.py +0 -0
  83. {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_ingest_documents.py +0 -0
  84. {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_install_hook.py +0 -0
  85. {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_interfaces.py +0 -0
  86. {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_judge.py +0 -0
  87. {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_metrics.py +0 -0
  88. {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_negative_feedback.py +0 -0
  89. {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_noise_filter.py +0 -0
  90. {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_project_resolver.py +0 -0
  91. {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_quality_gate.py +0 -0
  92. {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_query_complexity.py +0 -0
  93. {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_recall_core.py +0 -0
  94. {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_redact.py +0 -0
  95. {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_retriever.py +0 -0
  96. {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_roi_trend.py +0 -0
  97. {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_semantic_feedback.py +0 -0
  98. {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_service.py +0 -0
  99. {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_session_context.py +0 -0
  100. {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_skill_recall.py +0 -0
  101. {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_store.py +0 -0
  102. {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_supersession.py +0 -0
  103. {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_tokencount.py +0 -0
  104. {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_turn_metrics.py +0 -0
  105. {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_types.py +0 -0
  106. {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_vec_compaction.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: memor-cli
3
- Version: 0.7.0
3
+ Version: 0.7.1
4
4
  Summary: Measured memory for coding agents. Fire and forget — no API keys needed.
5
5
  Author-email: Nimit Bhandari <nimitbhandari17@gmail.com>
6
6
  License-Expression: MIT
@@ -46,7 +46,7 @@ Dynamic: license-file
46
46
  ```
47
47
 
48
48
  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
49
- [![Tests](https://img.shields.io/badge/tests-285%20passing-brightgreen.svg)]()
49
+ [![Tests](https://img.shields.io/badge/tests-287%20passing-brightgreen.svg)]()
50
50
  [![Python](https://img.shields.io/badge/python-3.11%2B-blue.svg)]()
51
51
  [![PyPI](https://img.shields.io/pypi/v/memor-cli.svg)](https://pypi.org/project/memor-cli/)
52
52
 
@@ -328,7 +328,7 @@ cd memor-ai
328
328
  python3 -m venv .venv && source .venv/bin/activate
329
329
  pip install -e ".[dev]"
330
330
 
331
- pytest # 285 tests
331
+ pytest # 287 tests
332
332
  ```
333
333
 
334
334
  ---
@@ -9,7 +9,7 @@
9
9
  ```
10
10
 
11
11
  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
12
- [![Tests](https://img.shields.io/badge/tests-285%20passing-brightgreen.svg)]()
12
+ [![Tests](https://img.shields.io/badge/tests-287%20passing-brightgreen.svg)]()
13
13
  [![Python](https://img.shields.io/badge/python-3.11%2B-blue.svg)]()
14
14
  [![PyPI](https://img.shields.io/pypi/v/memor-cli.svg)](https://pypi.org/project/memor-cli/)
15
15
 
@@ -291,7 +291,7 @@ cd memor-ai
291
291
  python3 -m venv .venv && source .venv/bin/activate
292
292
  pip install -e ".[dev]"
293
293
 
294
- pytest # 285 tests
294
+ pytest # 287 tests
295
295
  ```
296
296
 
297
297
  ---
@@ -0,0 +1 @@
1
+ __version__ = "0.7.1"
@@ -17,7 +17,12 @@ def detect_agent(req: dict) -> str:
17
17
  event = req.get("hook_event_name", "")
18
18
  if event == "userPromptSubmitted":
19
19
  return "copilot"
20
- if "model" in req or "permission_mode" in req:
20
+ # A real Codex payload carries both `model` and a Codex-specific `turn_id`
21
+ # extension; Claude Code sends neither. We match on EITHER (not both) so
22
+ # detection still holds if a Codex version drops one field. Do NOT key on
23
+ # `permission_mode`: it is a base field on every Claude Code hook input, so
24
+ # it cannot discriminate between the two.
25
+ if "turn_id" in req or "model" in req:
21
26
  return "codex"
22
27
  return "claude"
23
28
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: memor-cli
3
- Version: 0.7.0
3
+ Version: 0.7.1
4
4
  Summary: Measured memory for coding agents. Fire and forget — no API keys needed.
5
5
  Author-email: Nimit Bhandari <nimitbhandari17@gmail.com>
6
6
  License-Expression: MIT
@@ -46,7 +46,7 @@ Dynamic: license-file
46
46
  ```
47
47
 
48
48
  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
49
- [![Tests](https://img.shields.io/badge/tests-285%20passing-brightgreen.svg)]()
49
+ [![Tests](https://img.shields.io/badge/tests-287%20passing-brightgreen.svg)]()
50
50
  [![Python](https://img.shields.io/badge/python-3.11%2B-blue.svg)]()
51
51
  [![PyPI](https://img.shields.io/pypi/v/memor-cli.svg)](https://pypi.org/project/memor-cli/)
52
52
 
@@ -328,7 +328,7 @@ cd memor-ai
328
328
  python3 -m venv .venv && source .venv/bin/activate
329
329
  pip install -e ".[dev]"
330
330
 
331
- pytest # 285 tests
331
+ pytest # 287 tests
332
332
  ```
333
333
 
334
334
  ---
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "memor-cli"
7
- version = "0.7.0"
7
+ version = "0.7.1"
8
8
  description = "Measured memory for coding agents. Fire and forget — no API keys needed."
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -21,6 +21,23 @@ def test_detect_codex():
21
21
  assert detect_agent(req) == "codex"
22
22
 
23
23
 
24
+ def test_detect_codex_by_turn_id():
25
+ # Codex sends a Codex-specific `turn_id` extension; this alone identifies it.
26
+ req = {"cwd": "/proj", "prompt": "auth flow", "session_id": "s1",
27
+ "hook_event_name": "UserPromptSubmit", "turn_id": "t-42"}
28
+ assert detect_agent(req) == "codex"
29
+
30
+
31
+ def test_claude_with_permission_mode_is_not_codex():
32
+ # Regression: Claude Code sends `permission_mode` on every hook input
33
+ # (default|plan|acceptEdits|dontAsk|bypassPermissions). It must NOT be
34
+ # mistaken for Codex, which is distinguished by `model`/`turn_id`.
35
+ req = {"cwd": "/proj", "prompt": "auth flow", "session_id": "s1",
36
+ "transcript_path": "/p/t.jsonl",
37
+ "hook_event_name": "UserPromptSubmit", "permission_mode": "default"}
38
+ assert detect_agent(req) == "claude"
39
+
40
+
24
41
  def test_detect_copilot():
25
42
  req = {"cwd": "/proj", "prompt": "auth flow", "session_id": "s1",
26
43
  "hook_event_name": "userPromptSubmitted"}
@@ -1 +0,0 @@
1
- __version__ = "0.7.0"
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