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.
- context_engineering/__init__.py +1 -1
- context_engineering/analysis/sessions.py +35 -16
- {context_engineering_cli-2.6.0.dist-info → context_engineering_cli-2.6.1.dist-info}/METADATA +1 -1
- {context_engineering_cli-2.6.0.dist-info → context_engineering_cli-2.6.1.dist-info}/RECORD +7 -7
- {context_engineering_cli-2.6.0.dist-info → context_engineering_cli-2.6.1.dist-info}/WHEEL +0 -0
- {context_engineering_cli-2.6.0.dist-info → context_engineering_cli-2.6.1.dist-info}/entry_points.txt +0 -0
- {context_engineering_cli-2.6.0.dist-info → context_engineering_cli-2.6.1.dist-info}/licenses/LICENSE +0 -0
context_engineering/__init__.py
CHANGED
|
@@ -1,27 +1,46 @@
|
|
|
1
|
-
"""
|
|
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
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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
|
-
|
|
21
|
-
|
|
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:
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
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,4 +1,4 @@
|
|
|
1
|
-
context_engineering/__init__.py,sha256=
|
|
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=
|
|
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.
|
|
52
|
-
context_engineering_cli-2.6.
|
|
53
|
-
context_engineering_cli-2.6.
|
|
54
|
-
context_engineering_cli-2.6.
|
|
55
|
-
context_engineering_cli-2.6.
|
|
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,,
|
|
File without changes
|
{context_engineering_cli-2.6.0.dist-info → context_engineering_cli-2.6.1.dist-info}/entry_points.txt
RENAMED
|
File without changes
|
{context_engineering_cli-2.6.0.dist-info → context_engineering_cli-2.6.1.dist-info}/licenses/LICENSE
RENAMED
|
File without changes
|