context-engineering-cli 2.6.0__tar.gz → 2.6.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.
- {context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/PKG-INFO +1 -1
- {context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/pyproject.toml +1 -1
- {context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/src/context_engineering/__init__.py +1 -1
- context_engineering_cli-2.6.1/src/context_engineering/analysis/sessions.py +46 -0
- context_engineering_cli-2.6.0/src/context_engineering/analysis/sessions.py +0 -27
- {context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/.gitignore +0 -0
- {context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/LICENSE +0 -0
- {context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/provenance.json +0 -0
- {context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/src/context_engineering/__main__.py +0 -0
- {context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/src/context_engineering/analysis/__init__.py +0 -0
- {context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/src/context_engineering/analysis/backfill.py +0 -0
- {context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/src/context_engineering/analysis/context_check.py +0 -0
- {context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/src/context_engineering/analysis/context_layout.py +0 -0
- {context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/src/context_engineering/analysis/context_review.py +0 -0
- {context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/src/context_engineering/analysis/cross_cutting/__init__.py +0 -0
- {context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/src/context_engineering/analysis/cross_cutting/authors.py +0 -0
- {context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/src/context_engineering/analysis/cross_cutting/buckets.py +0 -0
- {context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/src/context_engineering/analysis/cross_cutting/co_change.py +0 -0
- {context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/src/context_engineering/analysis/cross_cutting/discover.py +0 -0
- {context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/src/context_engineering/analysis/cross_cutting/imports.py +0 -0
- {context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/src/context_engineering/analysis/cross_cutting/pair.py +0 -0
- {context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/src/context_engineering/analysis/impact.py +0 -0
- {context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/src/context_engineering/analysis/staleness.py +0 -0
- {context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/src/context_engineering/analysis/tier.py +0 -0
- {context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/src/context_engineering/checks/__init__.py +0 -0
- {context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/src/context_engineering/checks/antipatterns/__init__.py +0 -0
- {context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/src/context_engineering/checks/antipatterns/context.py +0 -0
- {context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/src/context_engineering/checks/antipatterns/density.py +0 -0
- {context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/src/context_engineering/checks/antipatterns/line_limits.py +0 -0
- {context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/src/context_engineering/checks/antipatterns/runner.py +0 -0
- {context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/src/context_engineering/checks/antipatterns/splitting.py +0 -0
- {context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/src/context_engineering/checks/antipatterns/volatile.py +0 -0
- {context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/src/context_engineering/checks/antipatterns/watermark.py +0 -0
- {context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/src/context_engineering/checks/contracts.py +0 -0
- {context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/src/context_engineering/checks/depth.py +0 -0
- {context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/src/context_engineering/checks/frontmatter.py +0 -0
- {context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/src/context_engineering/checks/references.py +0 -0
- {context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/src/context_engineering/checks/skill_structure.py +0 -0
- {context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/src/context_engineering/cli/__init__.py +0 -0
- {context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/src/context_engineering/cli/dispatch.py +0 -0
- {context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/src/context_engineering/cli/registry.py +0 -0
- {context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/src/context_engineering/cli/render.py +0 -0
- {context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/src/context_engineering/cli/subcommands.py +0 -0
- {context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/src/context_engineering/domain/__init__.py +0 -0
- {context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/src/context_engineering/domain/commit.py +0 -0
- {context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/src/context_engineering/domain/evidence.py +0 -0
- {context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/src/context_engineering/domain/finding.py +0 -0
- {context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/src/context_engineering/domain/result.py +0 -0
- {context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/src/context_engineering/infra/__init__.py +0 -0
- {context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/src/context_engineering/infra/filesystem.py +0 -0
- {context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/src/context_engineering/infra/git.py +0 -0
- {context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/src/context_engineering/infra/git_evidence.py +0 -0
- {context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/src/context_engineering/infra/git_tree.py +0 -0
- {context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/src/context_engineering/infra/markdown.py +0 -0
- {context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/src/context_engineering/infra/yaml_frontmatter.py +0 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"""Rank explicitly supplied session artifacts without assuming a local agent layout."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
from time import time
|
|
6
|
+
|
|
7
|
+
from ..domain.result import AnalysisResult
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def analyze(project_path: str, max_results: int = 20, sessions_dir: str | None = None) -> AnalysisResult:
|
|
11
|
+
"""Count matching JSONL text lines in a caller-configured directory only."""
|
|
12
|
+
result = AnalysisResult(target=project_path)
|
|
13
|
+
root = Path(sessions_dir).expanduser() if sessions_dir else None
|
|
14
|
+
if root is None:
|
|
15
|
+
result.data = {"state": "unavailable", "reason": "No session artifact directory was configured; continue without session evidence."}
|
|
16
|
+
return result
|
|
17
|
+
if not root.is_dir():
|
|
18
|
+
result.data = {"state": "unavailable", "reason": "Configured session artifact directory does not exist."}
|
|
19
|
+
return result
|
|
20
|
+
|
|
21
|
+
target = Path(project_path).resolve()
|
|
22
|
+
full_path = str(target)
|
|
23
|
+
basename = target.name
|
|
24
|
+
now = time()
|
|
25
|
+
sessions = []
|
|
26
|
+
for artifact in root.rglob("*.jsonl"):
|
|
27
|
+
try:
|
|
28
|
+
modified = artifact.stat().st_mtime
|
|
29
|
+
with artifact.open(encoding="utf-8") as stream:
|
|
30
|
+
count = sum(1 for line in stream if full_path in line or (basename and basename in line))
|
|
31
|
+
except (OSError, UnicodeError):
|
|
32
|
+
continue
|
|
33
|
+
if not count:
|
|
34
|
+
continue
|
|
35
|
+
age = max(0.0, (now - modified) / 86400)
|
|
36
|
+
weight = max(0.1, 1 - age / 33)
|
|
37
|
+
sessions.append({
|
|
38
|
+
"path": str(artifact),
|
|
39
|
+
"match_count": count,
|
|
40
|
+
"age_days": round(age, 1),
|
|
41
|
+
"recency_weight": round(weight, 2),
|
|
42
|
+
"score": round(count * weight, 2),
|
|
43
|
+
})
|
|
44
|
+
sessions.sort(key=lambda session: (-session["score"], session["path"]))
|
|
45
|
+
result.data = {"state": "available", "sessions": sessions[:max_results]}
|
|
46
|
+
return result
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
"""Optional session-artifact discovery with no assumed agent or home-directory layout."""
|
|
2
|
-
from __future__ import annotations
|
|
3
|
-
from pathlib import Path
|
|
4
|
-
from ..domain.result import AnalysisResult
|
|
5
|
-
|
|
6
|
-
def analyze(project_path: str, max_results: int = 20, sessions_dir: str | None = None) -> AnalysisResult:
|
|
7
|
-
"""Return explicit unavailable evidence unless the caller configures a directory.
|
|
8
|
-
|
|
9
|
-
This portable fallback deliberately never searches a personal agent-history path.
|
|
10
|
-
A caller may supply exported JSONL artifacts through a configured directory.
|
|
11
|
-
"""
|
|
12
|
-
result=AnalysisResult(target=project_path)
|
|
13
|
-
root=Path(sessions_dir).expanduser() if sessions_dir else None
|
|
14
|
-
if root is None:
|
|
15
|
-
result.data={"state":"unavailable", "reason":"No session artifact directory was configured; continue without session evidence."}
|
|
16
|
-
return result
|
|
17
|
-
if not root.is_dir():
|
|
18
|
-
result.data={"state":"unavailable", "reason":"Configured session artifact directory does not exist."}
|
|
19
|
-
return result
|
|
20
|
-
target=str(Path(project_path).resolve())
|
|
21
|
-
hits=[]
|
|
22
|
-
for artifact in root.rglob("*.jsonl"):
|
|
23
|
-
try: count=artifact.read_text(encoding="utf-8").count(target)
|
|
24
|
-
except OSError: continue
|
|
25
|
-
if count: hits.append((count,artifact))
|
|
26
|
-
result.data={"state":"available", "sessions":[{"path":str(artifact),"mentions":count} for count, artifact in sorted(hits, reverse=True)[:max_results]]}
|
|
27
|
-
return result
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/src/context_engineering/__main__.py
RENAMED
|
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
|
{context_engineering_cli-2.6.0 → context_engineering_cli-2.6.1}/src/context_engineering/infra/git.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|