sharepoint-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.
- {sharepoint_knowledge-0.2.0 → sharepoint_knowledge-0.2.2}/PKG-INFO +3 -3
- {sharepoint_knowledge-0.2.0 → sharepoint_knowledge-0.2.2}/pyproject.toml +3 -3
- {sharepoint_knowledge-0.2.0 → sharepoint_knowledge-0.2.2}/src/sharepoint_knowledge/cli_sp.py +11 -1
- {sharepoint_knowledge-0.2.0 → sharepoint_knowledge-0.2.2}/src/sharepoint_knowledge/crawl_sp.py +13 -1
- {sharepoint_knowledge-0.2.0 → sharepoint_knowledge-0.2.2}/src/sharepoint_knowledge/server_sp.py +14 -7
- {sharepoint_knowledge-0.2.0 → sharepoint_knowledge-0.2.2}/src/sharepoint_knowledge.egg-info/PKG-INFO +3 -3
- {sharepoint_knowledge-0.2.0 → sharepoint_knowledge-0.2.2}/src/sharepoint_knowledge.egg-info/requires.txt +2 -2
- {sharepoint_knowledge-0.2.0 → sharepoint_knowledge-0.2.2}/README.md +0 -0
- {sharepoint_knowledge-0.2.0 → sharepoint_knowledge-0.2.2}/setup.cfg +0 -0
- {sharepoint_knowledge-0.2.0 → sharepoint_knowledge-0.2.2}/src/sharepoint_knowledge/__init__.py +0 -0
- {sharepoint_knowledge-0.2.0 → sharepoint_knowledge-0.2.2}/src/sharepoint_knowledge/auth_sp.py +0 -0
- {sharepoint_knowledge-0.2.0 → sharepoint_knowledge-0.2.2}/src/sharepoint_knowledge/client_sp.py +0 -0
- {sharepoint_knowledge-0.2.0 → sharepoint_knowledge-0.2.2}/src/sharepoint_knowledge/settings_sp.py +0 -0
- {sharepoint_knowledge-0.2.0 → sharepoint_knowledge-0.2.2}/src/sharepoint_knowledge.egg-info/SOURCES.txt +0 -0
- {sharepoint_knowledge-0.2.0 → sharepoint_knowledge-0.2.2}/src/sharepoint_knowledge.egg-info/dependency_links.txt +0 -0
- {sharepoint_knowledge-0.2.0 → sharepoint_knowledge-0.2.2}/src/sharepoint_knowledge.egg-info/entry_points.txt +0 -0
- {sharepoint_knowledge-0.2.0 → sharepoint_knowledge-0.2.2}/src/sharepoint_knowledge.egg-info/top_level.txt +0 -0
- {sharepoint_knowledge-0.2.0 → sharepoint_knowledge-0.2.2}/tests/test_agent_doc_consistency.py +0 -0
- {sharepoint_knowledge-0.2.0 → sharepoint_knowledge-0.2.2}/tests/test_client_sp.py +0 -0
- {sharepoint_knowledge-0.2.0 → sharepoint_knowledge-0.2.2}/tests/test_crawl_sp.py +0 -0
- {sharepoint_knowledge-0.2.0 → sharepoint_knowledge-0.2.2}/tests/test_server_flow_sp.py +0 -0
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sharepoint-knowledge
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.2
|
|
4
4
|
Summary: SharePoint connector for the grounded-Q&A engine — site pages + document libraries, Entra device-code sign-in, local models, cited answers
|
|
5
5
|
License: Apache-2.0
|
|
6
6
|
Project-URL: Homepage, https://github.com/nkunal1992/agents
|
|
7
7
|
Requires-Python: >=3.11
|
|
8
8
|
Description-Content-Type: text/markdown
|
|
9
|
-
Requires-Dist: confluence-knowledge[files]>=0.5.
|
|
9
|
+
Requires-Dist: confluence-knowledge[files]>=0.5.1
|
|
10
10
|
Requires-Dist: msal>=1.31
|
|
11
11
|
Requires-Dist: httpx>=0.27
|
|
12
12
|
Requires-Dist: mcp>=1.8
|
|
13
13
|
Provides-Extra: models
|
|
14
|
-
Requires-Dist: confluence-knowledge[models]>=0.5.
|
|
14
|
+
Requires-Dist: confluence-knowledge[models]>=0.5.2; extra == "models"
|
|
15
15
|
Provides-Extra: dev
|
|
16
16
|
Requires-Dist: pytest>=8.0; extra == "dev"
|
|
17
17
|
Requires-Dist: ruff>=0.5; extra == "dev"
|
|
@@ -4,13 +4,13 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "sharepoint-knowledge"
|
|
7
|
-
version = "0.2.
|
|
7
|
+
version = "0.2.2"
|
|
8
8
|
description = "SharePoint connector for the grounded-Q&A engine — site pages + document libraries, Entra device-code sign-in, local models, cited answers"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11"
|
|
11
11
|
license = {text = "Apache-2.0"}
|
|
12
12
|
dependencies = [
|
|
13
|
-
"confluence-knowledge[files]>=0.5.
|
|
13
|
+
"confluence-knowledge[files]>=0.5.1",
|
|
14
14
|
"msal>=1.31",
|
|
15
15
|
"httpx>=0.27",
|
|
16
16
|
"mcp>=1.8",
|
|
@@ -18,7 +18,7 @@ dependencies = [
|
|
|
18
18
|
|
|
19
19
|
[project.optional-dependencies]
|
|
20
20
|
models = [
|
|
21
|
-
"confluence-knowledge[models]>=0.5.
|
|
21
|
+
"confluence-knowledge[models]>=0.5.2",
|
|
22
22
|
]
|
|
23
23
|
dev = [
|
|
24
24
|
"pytest>=8.0",
|
{sharepoint_knowledge-0.2.0 → sharepoint_knowledge-0.2.2}/src/sharepoint_knowledge/cli_sp.py
RENAMED
|
@@ -99,6 +99,13 @@ def _doctor() -> int:
|
|
|
99
99
|
from .server_sp import status
|
|
100
100
|
s = status()
|
|
101
101
|
print(json.dumps(s, indent=2))
|
|
102
|
+
bad = [c for c in s.get("checks", []) if not c["ok"]]
|
|
103
|
+
if bad:
|
|
104
|
+
print("\nhealth flags:")
|
|
105
|
+
for c in bad:
|
|
106
|
+
print(f" ✗ {c['flag']}: {c['detail']}")
|
|
107
|
+
if c.get("remediation"):
|
|
108
|
+
print(f" → {c['remediation']}")
|
|
102
109
|
upd = check("sharepoint-knowledge")
|
|
103
110
|
if upd["installed"]:
|
|
104
111
|
line = f"version: {upd['installed']}"
|
|
@@ -110,7 +117,7 @@ def _doctor() -> int:
|
|
|
110
117
|
if upd["update_available"]:
|
|
111
118
|
print("update available: run `sharepoint-knowledge update` "
|
|
112
119
|
"(or pip install -U sharepoint-knowledge[models])")
|
|
113
|
-
return 0
|
|
120
|
+
return 4 if bad else 0
|
|
114
121
|
|
|
115
122
|
|
|
116
123
|
def main() -> None:
|
|
@@ -146,6 +153,9 @@ def main() -> None:
|
|
|
146
153
|
import subprocess
|
|
147
154
|
cmd = [sys.executable, "-m", "pip", "install", "-U",
|
|
148
155
|
"sharepoint-knowledge[models]"]
|
|
156
|
+
# a running MCP server holds open files — quit the IDE first
|
|
157
|
+
print("note: quit the IDE (or stop the MCP server) before updating —"
|
|
158
|
+
" a running server can't be replaced cleanly", flush=True)
|
|
149
159
|
if os.name == "nt":
|
|
150
160
|
print("on Windows, upgrade via the venv python directly:\n "
|
|
151
161
|
+ " ".join(f'"{c}"' if " " in c else c for c in cmd))
|
{sharepoint_knowledge-0.2.0 → sharepoint_knowledge-0.2.2}/src/sharepoint_knowledge/crawl_sp.py
RENAMED
|
@@ -23,7 +23,7 @@ from confluence_knowledge.settings import SetupError
|
|
|
23
23
|
MAX_FILE_BYTES = 25 * 1024 * 1024
|
|
24
24
|
MAX_FILES = 20_000
|
|
25
25
|
|
|
26
|
-
from confluence_knowledge.retrieval import
|
|
26
|
+
from confluence_knowledge.retrieval import MODEL_MARKER as _MODEL_ID
|
|
27
27
|
|
|
28
28
|
|
|
29
29
|
def resolve_root(client: ConfluenceClient, url: str) -> tuple[str, str]:
|
|
@@ -197,6 +197,18 @@ class SPCrawler:
|
|
|
197
197
|
|
|
198
198
|
queue: list[str] = job["queue"]
|
|
199
199
|
errors: list[str] = job["errors"]
|
|
200
|
+
# Mid-crawl model change: already-embedded pages live in the OLD
|
|
201
|
+
# vector space — finishing would publish mixed dims. Wipe + fail;
|
|
202
|
+
# start_crawl rebuilds under the new model.
|
|
203
|
+
stamped = self.index.model_id()
|
|
204
|
+
if stamped is not None and stamped != _MODEL_ID and queue:
|
|
205
|
+
self.index.clear_scope()
|
|
206
|
+
errors = errors + [
|
|
207
|
+
(f"model changed mid-crawl ({stamped} → {_MODEL_ID}) — "
|
|
208
|
+
"index cleared; run start_crawl")]
|
|
209
|
+
self.index.save_job(job_id, "error", [], errors)
|
|
210
|
+
return {"job_id": job_id, "state": "error",
|
|
211
|
+
"remaining": 0, "errors": errors}
|
|
200
212
|
seen_raw = self.index.meta_get(f"seen:{job_id}")
|
|
201
213
|
seen: set[str] = set(json.loads(seen_raw)) if seen_raw else set()
|
|
202
214
|
levels_raw = self.index.meta_get(f"levels:{job_id}")
|
{sharepoint_knowledge-0.2.0 → sharepoint_knowledge-0.2.2}/src/sharepoint_knowledge/server_sp.py
RENAMED
|
@@ -10,7 +10,9 @@ import threading
|
|
|
10
10
|
from confluence_knowledge.client import AccessError, SecurityException
|
|
11
11
|
from confluence_knowledge.index import Index
|
|
12
12
|
from confluence_knowledge.retrieval import (
|
|
13
|
-
EMBED_MODEL_ID,
|
|
13
|
+
MODEL_MARKER as EMBED_MODEL_ID,
|
|
14
|
+
)
|
|
15
|
+
from confluence_knowledge.retrieval import (
|
|
14
16
|
LocalEmbedder,
|
|
15
17
|
LocalReranker,
|
|
16
18
|
LocalSparseEmbedder,
|
|
@@ -23,7 +25,7 @@ from mcp.server.fastmcp import FastMCP
|
|
|
23
25
|
from .auth_sp import acquire_token
|
|
24
26
|
from .client_sp import download_file, make_client
|
|
25
27
|
from .crawl_sp import SPCrawler, resolve_root
|
|
26
|
-
from .settings_sp import APP_NAME, SPProfile, graph_base, home, index_root
|
|
28
|
+
from .settings_sp import APP_NAME, SPProfile, graph_base, home, index_root, workdir
|
|
27
29
|
|
|
28
30
|
mcp = FastMCP("sharepoint-knowledge")
|
|
29
31
|
|
|
@@ -126,7 +128,6 @@ def _scope(scope_handle: str) -> dict:
|
|
|
126
128
|
@mcp.tool()
|
|
127
129
|
def status() -> dict:
|
|
128
130
|
"""Report setup readiness — profile present, token reachable, models."""
|
|
129
|
-
models = home() / "models"
|
|
130
131
|
try:
|
|
131
132
|
profile = SPProfile.load()
|
|
132
133
|
try:
|
|
@@ -149,13 +150,19 @@ def status() -> dict:
|
|
|
149
150
|
except AccessError as e:
|
|
150
151
|
cfg["auth"] = str(e)
|
|
151
152
|
configured = False
|
|
153
|
+
from confluence_knowledge.health import health_checks
|
|
154
|
+
checks = health_checks(home(), workdir(), APP_NAME, "sharepoint-knowledge",
|
|
155
|
+
index_root=index_root())
|
|
156
|
+
checks.append({
|
|
157
|
+
"flag": "creds_valid", "ok": configured,
|
|
158
|
+
"detail": cfg.get("auth") if configured
|
|
159
|
+
else cfg.get("auth") or "no profile",
|
|
160
|
+
"remediation": None if configured
|
|
161
|
+
else "sharepoint-knowledge setup (re-sign-in)"})
|
|
152
162
|
return {
|
|
153
163
|
"configured": configured,
|
|
154
164
|
"profile": cfg,
|
|
155
|
-
"
|
|
156
|
-
"reranker_model_ready": (models / "bge-reranker-v2-m3-ONNX").exists()
|
|
157
|
-
or (models / "bge-reranker-base-ONNX").exists(),
|
|
158
|
-
"sparse_model_ready": (models / "fastembed").exists(),
|
|
165
|
+
"checks": checks,
|
|
159
166
|
"models_loaded": _models_ready.is_set() and _EMBEDDER is not None,
|
|
160
167
|
"index_root": str(index_root()),
|
|
161
168
|
"live_scopes": sorted(_scopes),
|
{sharepoint_knowledge-0.2.0 → sharepoint_knowledge-0.2.2}/src/sharepoint_knowledge.egg-info/PKG-INFO
RENAMED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sharepoint-knowledge
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.2
|
|
4
4
|
Summary: SharePoint connector for the grounded-Q&A engine — site pages + document libraries, Entra device-code sign-in, local models, cited answers
|
|
5
5
|
License: Apache-2.0
|
|
6
6
|
Project-URL: Homepage, https://github.com/nkunal1992/agents
|
|
7
7
|
Requires-Python: >=3.11
|
|
8
8
|
Description-Content-Type: text/markdown
|
|
9
|
-
Requires-Dist: confluence-knowledge[files]>=0.5.
|
|
9
|
+
Requires-Dist: confluence-knowledge[files]>=0.5.1
|
|
10
10
|
Requires-Dist: msal>=1.31
|
|
11
11
|
Requires-Dist: httpx>=0.27
|
|
12
12
|
Requires-Dist: mcp>=1.8
|
|
13
13
|
Provides-Extra: models
|
|
14
|
-
Requires-Dist: confluence-knowledge[models]>=0.5.
|
|
14
|
+
Requires-Dist: confluence-knowledge[models]>=0.5.2; extra == "models"
|
|
15
15
|
Provides-Extra: dev
|
|
16
16
|
Requires-Dist: pytest>=8.0; extra == "dev"
|
|
17
17
|
Requires-Dist: ruff>=0.5; extra == "dev"
|
|
File without changes
|
|
File without changes
|
{sharepoint_knowledge-0.2.0 → sharepoint_knowledge-0.2.2}/src/sharepoint_knowledge/__init__.py
RENAMED
|
File without changes
|
{sharepoint_knowledge-0.2.0 → sharepoint_knowledge-0.2.2}/src/sharepoint_knowledge/auth_sp.py
RENAMED
|
File without changes
|
{sharepoint_knowledge-0.2.0 → sharepoint_knowledge-0.2.2}/src/sharepoint_knowledge/client_sp.py
RENAMED
|
File without changes
|
{sharepoint_knowledge-0.2.0 → sharepoint_knowledge-0.2.2}/src/sharepoint_knowledge/settings_sp.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sharepoint_knowledge-0.2.0 → sharepoint_knowledge-0.2.2}/tests/test_agent_doc_consistency.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|