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.
Files changed (21) hide show
  1. {sharepoint_knowledge-0.2.0 → sharepoint_knowledge-0.2.2}/PKG-INFO +3 -3
  2. {sharepoint_knowledge-0.2.0 → sharepoint_knowledge-0.2.2}/pyproject.toml +3 -3
  3. {sharepoint_knowledge-0.2.0 → sharepoint_knowledge-0.2.2}/src/sharepoint_knowledge/cli_sp.py +11 -1
  4. {sharepoint_knowledge-0.2.0 → sharepoint_knowledge-0.2.2}/src/sharepoint_knowledge/crawl_sp.py +13 -1
  5. {sharepoint_knowledge-0.2.0 → sharepoint_knowledge-0.2.2}/src/sharepoint_knowledge/server_sp.py +14 -7
  6. {sharepoint_knowledge-0.2.0 → sharepoint_knowledge-0.2.2}/src/sharepoint_knowledge.egg-info/PKG-INFO +3 -3
  7. {sharepoint_knowledge-0.2.0 → sharepoint_knowledge-0.2.2}/src/sharepoint_knowledge.egg-info/requires.txt +2 -2
  8. {sharepoint_knowledge-0.2.0 → sharepoint_knowledge-0.2.2}/README.md +0 -0
  9. {sharepoint_knowledge-0.2.0 → sharepoint_knowledge-0.2.2}/setup.cfg +0 -0
  10. {sharepoint_knowledge-0.2.0 → sharepoint_knowledge-0.2.2}/src/sharepoint_knowledge/__init__.py +0 -0
  11. {sharepoint_knowledge-0.2.0 → sharepoint_knowledge-0.2.2}/src/sharepoint_knowledge/auth_sp.py +0 -0
  12. {sharepoint_knowledge-0.2.0 → sharepoint_knowledge-0.2.2}/src/sharepoint_knowledge/client_sp.py +0 -0
  13. {sharepoint_knowledge-0.2.0 → sharepoint_knowledge-0.2.2}/src/sharepoint_knowledge/settings_sp.py +0 -0
  14. {sharepoint_knowledge-0.2.0 → sharepoint_knowledge-0.2.2}/src/sharepoint_knowledge.egg-info/SOURCES.txt +0 -0
  15. {sharepoint_knowledge-0.2.0 → sharepoint_knowledge-0.2.2}/src/sharepoint_knowledge.egg-info/dependency_links.txt +0 -0
  16. {sharepoint_knowledge-0.2.0 → sharepoint_knowledge-0.2.2}/src/sharepoint_knowledge.egg-info/entry_points.txt +0 -0
  17. {sharepoint_knowledge-0.2.0 → sharepoint_knowledge-0.2.2}/src/sharepoint_knowledge.egg-info/top_level.txt +0 -0
  18. {sharepoint_knowledge-0.2.0 → sharepoint_knowledge-0.2.2}/tests/test_agent_doc_consistency.py +0 -0
  19. {sharepoint_knowledge-0.2.0 → sharepoint_knowledge-0.2.2}/tests/test_client_sp.py +0 -0
  20. {sharepoint_knowledge-0.2.0 → sharepoint_knowledge-0.2.2}/tests/test_crawl_sp.py +0 -0
  21. {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.0
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.0
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.0; extra == "models"
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.0"
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.0",
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.0",
21
+ "confluence-knowledge[models]>=0.5.2",
22
22
  ]
23
23
  dev = [
24
24
  "pytest>=8.0",
@@ -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))
@@ -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 EMBED_MODEL_ID as _MODEL_ID
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}")
@@ -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
- "embedding_model_ready": (models / "bge-m3").exists(),
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),
@@ -1,17 +1,17 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sharepoint-knowledge
3
- Version: 0.2.0
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.0
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.0; extra == "models"
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"
@@ -1,4 +1,4 @@
1
- confluence-knowledge[files]>=0.5.0
1
+ confluence-knowledge[files]>=0.5.1
2
2
  msal>=1.31
3
3
  httpx>=0.27
4
4
  mcp>=1.8
@@ -12,4 +12,4 @@ openpyxl>=3.1
12
12
  pypdf>=5.0
13
13
 
14
14
  [models]
15
- confluence-knowledge[models]>=0.5.0
15
+ confluence-knowledge[models]>=0.5.2