context-engineering-cli 2.6.0__py3-none-any.whl → 2.6.1__py3-none-any.whl

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.
@@ -1,3 +1,3 @@
1
1
  """Shared CLI for the context-engineering plugin."""
2
2
 
3
- __version__ = "2.6.0"
3
+ __version__ = "2.6.1"
@@ -1,27 +1,46 @@
1
- """Optional session-artifact discovery with no assumed agent or home-directory layout."""
1
+ """Rank explicitly supplied session artifacts without assuming a local agent layout."""
2
2
  from __future__ import annotations
3
+
3
4
  from pathlib import Path
5
+ from time import time
6
+
4
7
  from ..domain.result import AnalysisResult
5
8
 
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
 
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
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
14
  if root is None:
15
- result.data={"state":"unavailable", "reason":"No session artifact directory was configured; continue without session evidence."}
15
+ result.data = {"state": "unavailable", "reason": "No session artifact directory was configured; continue without session evidence."}
16
16
  return result
17
17
  if not root.is_dir():
18
- result.data={"state":"unavailable", "reason":"Configured session artifact directory does not exist."}
18
+ result.data = {"state": "unavailable", "reason": "Configured session artifact directory does not exist."}
19
19
  return result
20
- target=str(Path(project_path).resolve())
21
- hits=[]
20
+
21
+ target = Path(project_path).resolve()
22
+ full_path = str(target)
23
+ basename = target.name
24
+ now = time()
25
+ sessions = []
22
26
  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
+ 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]}
27
46
  return result
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: context-engineering-cli
3
- Version: 2.6.0
3
+ Version: 2.6.1
4
4
  Summary: Portable CLI for Context Engineering analyzers.
5
5
  License: MIT License
6
6
 
@@ -1,4 +1,4 @@
1
- context_engineering/__init__.py,sha256=3mgr87eJEJl9yhhFAzNPn6xHcy7EOov6KBuab6x3nU4,76
1
+ context_engineering/__init__.py,sha256=0LXb0cxTfotHfKWBD4YyXnzB06CfT75QKrFg_3FVh6U,76
2
2
  context_engineering/__main__.py,sha256=fi_tkPTbyCAM_UhTg1qcz10jmie3vNrg50QOOU4mX-s,75
3
3
  context_engineering/analysis/__init__.py,sha256=1Sii4fbwxLJukSHqDYihcLV5fErPI6kRJumpa_rplNg,64
4
4
  context_engineering/analysis/backfill.py,sha256=T7elnNsy7aeWpUPXAaQF5XRhh321tcZLv1sc8DczMDg,39108
@@ -6,7 +6,7 @@ context_engineering/analysis/context_check.py,sha256=lsjgMwyLUALlFc36T6Hsuwt3pND
6
6
  context_engineering/analysis/context_layout.py,sha256=MwZNgiEIUdhB9v92eyjskqMWYsCf2Y2i6zjf0027tco,3790
7
7
  context_engineering/analysis/context_review.py,sha256=KFJG900geWdvovTpP28Y9JWYXMVi9XIRHsKvicA76zY,7501
8
8
  context_engineering/analysis/impact.py,sha256=5f1_QCRdCklbVwQC1r3NlWJXXNPRp1twGPN1CdEgrhM,2736
9
- context_engineering/analysis/sessions.py,sha256=NCjqN-xOY4dhktglcIQpxSWVoRFCHE_lVZEntCyNgWk,1439
9
+ context_engineering/analysis/sessions.py,sha256=TkzS9BE2KiJd0-uC0FUup-Gs1lAwk9qAQigQEaRrijI,1875
10
10
  context_engineering/analysis/staleness.py,sha256=HC3IVRlyu7e-S7vn3DzewFb8RWNpfZ8eyXQi36as85k,6153
11
11
  context_engineering/analysis/tier.py,sha256=91ORWsJ_laQxUPI9JfQfBi0ygI31Jx7kRfX0LFCfU3g,2687
12
12
  context_engineering/analysis/cross_cutting/__init__.py,sha256=RcDjy89T0zU2W-iI7fi1TJYf2pQOD_0Oo9BHlccMuMk,162
@@ -48,8 +48,8 @@ context_engineering/infra/git_tree.py,sha256=-PZQbYsyXIYpJNBpP1Zo-Lt71Fbxl7LJfnp
48
48
  context_engineering/infra/markdown.py,sha256=tHSt66r4PTYYRTUIfwIjSEDCeGFtcNBrn-YtAhgrioY,1923
49
49
  context_engineering/infra/yaml_frontmatter.py,sha256=yVZamFli5iCUsvdzV2a8VAq_ETqnlciCxcX_iOEQnMY,2290
50
50
  provenance.json,sha256=3elXiJzp__2KjnqNhOFW_9bkvApaF6HRlCI3lQCyYyw,599
51
- context_engineering_cli-2.6.0.dist-info/METADATA,sha256=EO4WBUvvPudA7_HuqjZU-9rMWwl1MqOBzPjzvByl0do,1405
52
- context_engineering_cli-2.6.0.dist-info/WHEEL,sha256=W3fkpkm7-wf9vBI5Z-7s0eWkeM-spu78I8Neb98DeEg,87
53
- context_engineering_cli-2.6.0.dist-info/entry_points.txt,sha256=PRSEj7vD7_aYqcfeslJIJ0VsWK2bMPh31QifshEsRis,69
54
- context_engineering_cli-2.6.0.dist-info/licenses/LICENSE,sha256=a_2IOUCuE6IJu-MvjvKkL8hQnGtMybcXi2SAnR65YIY,1066
55
- context_engineering_cli-2.6.0.dist-info/RECORD,,
51
+ context_engineering_cli-2.6.1.dist-info/METADATA,sha256=gr3uc89MGVG_4fTpq0Bunp7Xa7JSNHS_9nwt_FeJXgc,1405
52
+ context_engineering_cli-2.6.1.dist-info/WHEEL,sha256=W3fkpkm7-wf9vBI5Z-7s0eWkeM-spu78I8Neb98DeEg,87
53
+ context_engineering_cli-2.6.1.dist-info/entry_points.txt,sha256=PRSEj7vD7_aYqcfeslJIJ0VsWK2bMPh31QifshEsRis,69
54
+ context_engineering_cli-2.6.1.dist-info/licenses/LICENSE,sha256=a_2IOUCuE6IJu-MvjvKkL8hQnGtMybcXi2SAnR65YIY,1066
55
+ context_engineering_cli-2.6.1.dist-info/RECORD,,