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.
- {memor_cli-0.7.0/memor_cli.egg-info → memor_cli-0.7.1}/PKG-INFO +3 -3
- {memor_cli-0.7.0 → memor_cli-0.7.1}/README.md +2 -2
- memor_cli-0.7.1/memor/__init__.py +1 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/hook_server.py +6 -1
- {memor_cli-0.7.0 → memor_cli-0.7.1/memor_cli.egg-info}/PKG-INFO +3 -3
- {memor_cli-0.7.0 → memor_cli-0.7.1}/pyproject.toml +1 -1
- {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_multi_agent_hook.py +17 -0
- memor_cli-0.7.0/memor/__init__.py +0 -1
- {memor_cli-0.7.0 → memor_cli-0.7.1}/LICENSE +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/cli.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/daemon.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/dashboard/__init__.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/dashboard/server.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/dashboard/static/index.html +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/distill/__init__.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/distill/distiller.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/distill/extractive.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/embed/__init__.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/embed/api.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/embed/fake.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/embed/local.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/eval/__init__.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/eval/baselines/__init__.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/eval/baselines/base.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/eval/baselines/claude_mem.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/eval/baselines/graphiti.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/eval/counterfactual.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/eval/dataset.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/eval/embed_benchmark.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/eval/judge.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/eval/metrics.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/eval/runner.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/feedback.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/global_memories.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/hook_cli.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/ingest/__init__.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/ingest/claude_code.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/ingest/documents.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/interfaces.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/llm/__init__.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/llm/anthropic.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/llm/base.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/llm/openai_compat.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/project.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/query_complexity.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/recall.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/redact.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/retrieve/__init__.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/retrieve/retriever.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/service.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/session_context.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/store/__init__.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/store/sqlite_store.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/tokencount.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/turn_metrics.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/memor/types.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/memor_cli.egg-info/SOURCES.txt +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/memor_cli.egg-info/dependency_links.txt +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/memor_cli.egg-info/entry_points.txt +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/memor_cli.egg-info/requires.txt +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/memor_cli.egg-info/top_level.txt +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/setup.cfg +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_cli_smoke.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_counterfactual.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_daemon.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_dashboard.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_dashboard_quality.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_dataset_builder.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_dimension_safety.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_distiller.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_embed.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_embed_benchmark.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_eval_ablation.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_eval_runner.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_external_baselines.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_extractive.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_feedback.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_global_memories.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_hook.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_hook_server.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_hybrid_retrieval.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_ingest_claude_code.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_ingest_documents.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_install_hook.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_interfaces.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_judge.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_metrics.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_negative_feedback.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_noise_filter.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_project_resolver.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_quality_gate.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_query_complexity.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_recall_core.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_redact.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_retriever.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_roi_trend.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_semantic_feedback.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_service.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_session_context.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_skill_recall.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_store.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_supersession.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_tokencount.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_turn_metrics.py +0 -0
- {memor_cli-0.7.0 → memor_cli-0.7.1}/tests/test_types.py +0 -0
- {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.
|
|
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)
|
|
49
|
-
[]()
|
|
50
50
|
[]()
|
|
51
51
|
[](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 #
|
|
331
|
+
pytest # 287 tests
|
|
332
332
|
```
|
|
333
333
|
|
|
334
334
|
---
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
```
|
|
10
10
|
|
|
11
11
|
[](LICENSE)
|
|
12
|
-
[]()
|
|
13
13
|
[]()
|
|
14
14
|
[](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 #
|
|
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
|
-
|
|
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.
|
|
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)
|
|
49
|
-
[]()
|
|
50
50
|
[]()
|
|
51
51
|
[](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 #
|
|
331
|
+
pytest # 287 tests
|
|
332
332
|
```
|
|
333
333
|
|
|
334
334
|
---
|
|
@@ -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
|
|
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
|
|
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
|