local-knowledge 0.2.0__tar.gz → 0.2.2__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.
- {local_knowledge-0.2.0 → local_knowledge-0.2.2}/PKG-INFO +3 -3
- {local_knowledge-0.2.0 → local_knowledge-0.2.2}/pyproject.toml +3 -3
- {local_knowledge-0.2.0 → local_knowledge-0.2.2}/src/local_knowledge/cli_local.py +11 -1
- {local_knowledge-0.2.0 → local_knowledge-0.2.2}/src/local_knowledge/crawl_local.py +13 -1
- {local_knowledge-0.2.0 → local_knowledge-0.2.2}/src/local_knowledge/server_local.py +7 -7
- {local_knowledge-0.2.0 → local_knowledge-0.2.2}/src/local_knowledge.egg-info/PKG-INFO +3 -3
- {local_knowledge-0.2.0 → local_knowledge-0.2.2}/src/local_knowledge.egg-info/requires.txt +2 -2
- {local_knowledge-0.2.0 → local_knowledge-0.2.2}/README.md +0 -0
- {local_knowledge-0.2.0 → local_knowledge-0.2.2}/setup.cfg +0 -0
- {local_knowledge-0.2.0 → local_knowledge-0.2.2}/src/local_knowledge/__init__.py +0 -0
- {local_knowledge-0.2.0 → local_knowledge-0.2.2}/src/local_knowledge/settings_local.py +0 -0
- {local_knowledge-0.2.0 → local_knowledge-0.2.2}/src/local_knowledge.egg-info/SOURCES.txt +0 -0
- {local_knowledge-0.2.0 → local_knowledge-0.2.2}/src/local_knowledge.egg-info/dependency_links.txt +0 -0
- {local_knowledge-0.2.0 → local_knowledge-0.2.2}/src/local_knowledge.egg-info/entry_points.txt +0 -0
- {local_knowledge-0.2.0 → local_knowledge-0.2.2}/src/local_knowledge.egg-info/top_level.txt +0 -0
- {local_knowledge-0.2.0 → local_knowledge-0.2.2}/tests/test_agent_doc_consistency.py +0 -0
- {local_knowledge-0.2.0 → local_knowledge-0.2.2}/tests/test_crawl_local.py +0 -0
- {local_knowledge-0.2.0 → local_knowledge-0.2.2}/tests/test_extract_files.py +0 -0
- {local_knowledge-0.2.0 → local_knowledge-0.2.2}/tests/test_server_flow_local.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: local-knowledge
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.2
|
|
4
4
|
Summary: Local file/folder indexer + grounded-Q&A MCP service — same engine as confluence-knowledge, no credentials needed
|
|
5
5
|
License: MIT
|
|
6
6
|
Project-URL: Repository, https://github.com/nkunal1992/agents
|
|
@@ -12,7 +12,7 @@ Classifier: License :: OSI Approved :: MIT License
|
|
|
12
12
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
13
13
|
Requires-Python: >=3.11
|
|
14
14
|
Description-Content-Type: text/markdown
|
|
15
|
-
Requires-Dist: confluence-knowledge>=0.5.
|
|
15
|
+
Requires-Dist: confluence-knowledge>=0.5.1
|
|
16
16
|
Requires-Dist: python-docx>=1.1
|
|
17
17
|
Requires-Dist: pypdf>=4.0
|
|
18
18
|
Requires-Dist: python-pptx>=1.0
|
|
@@ -20,7 +20,7 @@ Requires-Dist: openpyxl>=3.1
|
|
|
20
20
|
Requires-Dist: mcp<2,>=1.6
|
|
21
21
|
Requires-Dist: pip-system-certs>=5.0
|
|
22
22
|
Provides-Extra: models
|
|
23
|
-
Requires-Dist: confluence-knowledge[models]>=0.5.
|
|
23
|
+
Requires-Dist: confluence-knowledge[models]>=0.5.2; extra == "models"
|
|
24
24
|
Provides-Extra: dev
|
|
25
25
|
Requires-Dist: pytest>=8.0; extra == "dev"
|
|
26
26
|
Requires-Dist: pytest-cov>=5.0; extra == "dev"
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "local-knowledge"
|
|
7
|
-
version = "0.2.
|
|
7
|
+
version = "0.2.2"
|
|
8
8
|
description = "Local file/folder indexer + grounded-Q&A MCP service — same engine as confluence-knowledge, no credentials needed"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11"
|
|
@@ -16,7 +16,7 @@ classifiers = [
|
|
|
16
16
|
"Programming Language :: Python :: 3 :: Only",
|
|
17
17
|
]
|
|
18
18
|
dependencies = [
|
|
19
|
-
"confluence-knowledge>=0.5.
|
|
19
|
+
"confluence-knowledge>=0.5.1",
|
|
20
20
|
"python-docx>=1.1",
|
|
21
21
|
"pypdf>=4.0",
|
|
22
22
|
"python-pptx>=1.0",
|
|
@@ -27,7 +27,7 @@ dependencies = [
|
|
|
27
27
|
|
|
28
28
|
[project.optional-dependencies]
|
|
29
29
|
models = [
|
|
30
|
-
"confluence-knowledge[models]>=0.5.
|
|
30
|
+
"confluence-knowledge[models]>=0.5.2",
|
|
31
31
|
]
|
|
32
32
|
dev = [
|
|
33
33
|
"pytest>=8.0",
|
|
@@ -30,6 +30,13 @@ def _doctor() -> int:
|
|
|
30
30
|
from .server_local import status
|
|
31
31
|
s = status()
|
|
32
32
|
print(json.dumps(s, indent=2))
|
|
33
|
+
bad = [c for c in s.get("checks", []) if not c["ok"]]
|
|
34
|
+
if bad:
|
|
35
|
+
print("\nhealth flags:")
|
|
36
|
+
for c in bad:
|
|
37
|
+
print(f" ✗ {c['flag']}: {c['detail']}")
|
|
38
|
+
if c.get("remediation"):
|
|
39
|
+
print(f" → {c['remediation']}")
|
|
33
40
|
upd = check("local-knowledge")
|
|
34
41
|
if upd["installed"]:
|
|
35
42
|
line = f"version: {upd['installed']}"
|
|
@@ -41,7 +48,7 @@ def _doctor() -> int:
|
|
|
41
48
|
if upd["update_available"]:
|
|
42
49
|
print("update available: run `local-knowledge update` "
|
|
43
50
|
"(or pip install -U local-knowledge[models])")
|
|
44
|
-
return 0
|
|
51
|
+
return 4 if bad else 0
|
|
45
52
|
|
|
46
53
|
|
|
47
54
|
def main() -> None:
|
|
@@ -72,6 +79,9 @@ def main() -> None:
|
|
|
72
79
|
import subprocess
|
|
73
80
|
cmd = [sys.executable, "-m", "pip", "install", "-U",
|
|
74
81
|
"local-knowledge[models]"]
|
|
82
|
+
# a running MCP server holds open files — quit the IDE first
|
|
83
|
+
print("note: quit the IDE (or stop the MCP server) before updating —"
|
|
84
|
+
" a running server can't be replaced cleanly", flush=True)
|
|
75
85
|
if os.name == "nt":
|
|
76
86
|
# this exe is the running process on Windows — pip can't replace
|
|
77
87
|
# a file that's in use; hand the user the equivalent command
|
|
@@ -32,7 +32,7 @@ def resolve_root(path: str) -> Path:
|
|
|
32
32
|
return p.resolve()
|
|
33
33
|
|
|
34
34
|
|
|
35
|
-
from confluence_knowledge.retrieval import
|
|
35
|
+
from confluence_knowledge.retrieval import MODEL_MARKER as _MODEL_ID
|
|
36
36
|
|
|
37
37
|
|
|
38
38
|
class LocalCrawler:
|
|
@@ -133,6 +133,18 @@ class LocalCrawler:
|
|
|
133
133
|
|
|
134
134
|
queue: list[str] = job["queue"]
|
|
135
135
|
errors: list[str] = job["errors"]
|
|
136
|
+
# Mid-crawl model change: already-embedded pages live in the OLD
|
|
137
|
+
# vector space — finishing would publish mixed dims. Wipe + fail;
|
|
138
|
+
# start_crawl rebuilds under the new model.
|
|
139
|
+
stamped = self.index.model_id()
|
|
140
|
+
if stamped is not None and stamped != _MODEL_ID and queue:
|
|
141
|
+
self.index.clear_scope()
|
|
142
|
+
errors = errors + [
|
|
143
|
+
(f"model changed mid-crawl ({stamped} → {_MODEL_ID}) — "
|
|
144
|
+
"index cleared; run start_crawl")]
|
|
145
|
+
self.index.save_job(job_id, "error", [], errors)
|
|
146
|
+
return {"job_id": job_id, "state": "error",
|
|
147
|
+
"remaining": 0, "errors": errors}
|
|
136
148
|
seen_raw = self.index.meta_get(f"seen:{job_id}")
|
|
137
149
|
seen: set[str] = set(json.loads(seen_raw)) if seen_raw else set()
|
|
138
150
|
levels_raw = self.index.meta_get(f"levels:{job_id}")
|
|
@@ -14,7 +14,9 @@ import threading
|
|
|
14
14
|
from confluence_knowledge.client import AccessError, SecurityException
|
|
15
15
|
from confluence_knowledge.index import Index
|
|
16
16
|
from confluence_knowledge.retrieval import (
|
|
17
|
-
EMBED_MODEL_ID,
|
|
17
|
+
MODEL_MARKER as EMBED_MODEL_ID,
|
|
18
|
+
)
|
|
19
|
+
from confluence_knowledge.retrieval import (
|
|
18
20
|
LocalEmbedder,
|
|
19
21
|
LocalReranker,
|
|
20
22
|
LocalSparseEmbedder,
|
|
@@ -25,7 +27,7 @@ from confluence_knowledge.settings import SetupError
|
|
|
25
27
|
from mcp.server.fastmcp import FastMCP
|
|
26
28
|
|
|
27
29
|
from .crawl_local import LocalCrawler, resolve_root
|
|
28
|
-
from .settings_local import APP_NAME, LocalProfile, home, index_root
|
|
30
|
+
from .settings_local import APP_NAME, LocalProfile, home, index_root, workdir
|
|
29
31
|
|
|
30
32
|
mcp = FastMCP("local-knowledge")
|
|
31
33
|
|
|
@@ -113,19 +115,17 @@ def _scope(scope_handle: str) -> dict:
|
|
|
113
115
|
@mcp.tool()
|
|
114
116
|
def status() -> dict:
|
|
115
117
|
"""Report setup readiness — no credentials exist for this agent."""
|
|
116
|
-
models = home() / "models"
|
|
117
118
|
try:
|
|
118
119
|
profile = LocalProfile.load()
|
|
119
120
|
cfg = {"root": profile.root_path, "device": profile.device}
|
|
120
121
|
except SetupError as e:
|
|
121
122
|
cfg = {"error": str(e)}
|
|
123
|
+
from confluence_knowledge.health import health_checks
|
|
122
124
|
return {
|
|
123
125
|
"configured": "error" not in cfg,
|
|
124
126
|
"profile": cfg,
|
|
125
|
-
"
|
|
126
|
-
|
|
127
|
-
or (models / "bge-reranker-base-ONNX").exists(),
|
|
128
|
-
"sparse_model_ready": (models / "fastembed").exists(),
|
|
127
|
+
"checks": health_checks(home(), workdir(), APP_NAME, "local-knowledge",
|
|
128
|
+
index_root=index_root()),
|
|
129
129
|
"models_loaded": _models_ready.is_set() and _EMBEDDER is not None,
|
|
130
130
|
"index_root": str(index_root()),
|
|
131
131
|
"live_scopes": sorted(_scopes),
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: local-knowledge
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.2
|
|
4
4
|
Summary: Local file/folder indexer + grounded-Q&A MCP service — same engine as confluence-knowledge, no credentials needed
|
|
5
5
|
License: MIT
|
|
6
6
|
Project-URL: Repository, https://github.com/nkunal1992/agents
|
|
@@ -12,7 +12,7 @@ Classifier: License :: OSI Approved :: MIT License
|
|
|
12
12
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
13
13
|
Requires-Python: >=3.11
|
|
14
14
|
Description-Content-Type: text/markdown
|
|
15
|
-
Requires-Dist: confluence-knowledge>=0.5.
|
|
15
|
+
Requires-Dist: confluence-knowledge>=0.5.1
|
|
16
16
|
Requires-Dist: python-docx>=1.1
|
|
17
17
|
Requires-Dist: pypdf>=4.0
|
|
18
18
|
Requires-Dist: python-pptx>=1.0
|
|
@@ -20,7 +20,7 @@ Requires-Dist: openpyxl>=3.1
|
|
|
20
20
|
Requires-Dist: mcp<2,>=1.6
|
|
21
21
|
Requires-Dist: pip-system-certs>=5.0
|
|
22
22
|
Provides-Extra: models
|
|
23
|
-
Requires-Dist: confluence-knowledge[models]>=0.5.
|
|
23
|
+
Requires-Dist: confluence-knowledge[models]>=0.5.2; extra == "models"
|
|
24
24
|
Provides-Extra: dev
|
|
25
25
|
Requires-Dist: pytest>=8.0; extra == "dev"
|
|
26
26
|
Requires-Dist: pytest-cov>=5.0; extra == "dev"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{local_knowledge-0.2.0 → local_knowledge-0.2.2}/src/local_knowledge.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{local_knowledge-0.2.0 → local_knowledge-0.2.2}/src/local_knowledge.egg-info/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|