mirror of
https://github.com/PR0M3TH3AN/SeedPass.git
synced 2026-11-08 22:02:24 +00:00
feat: add semantic index scaffolding, cli/api surfaces, and tui tree nav polish
This commit is contained in:
1 parent
7c9b6253b2
commit
165e2db204
16 files changed
+1087
-67
No files matched your search
+64
-1
@@ -63,7 +63,7 @@ from seedpass.core.agent_recovery import (
|
||||
verify_recovery_drills,
|
||||
)
|
||||
from seedpass.core.high_risk_partition_store import load_partition_entry
|
||||
from seedpass.core.api import UtilityService
|
||||
from seedpass.core.api import SemanticIndexService, UtilityService
|
||||
|
||||
_RATE_LIMIT = int(os.getenv("SEEDPASS_RATE_LIMIT", "100"))
|
||||
_RATE_WINDOW = int(os.getenv("SEEDPASS_RATE_WINDOW", "60"))
|
||||
@@ -218,6 +218,10 @@ def _require_unlocked(request: Request) -> None:
|
||||
raise HTTPException(status_code=423, detail="Vault is locked")
|
||||
|
||||
|
||||
def _semantic_service(request: Request) -> SemanticIndexService:
|
||||
return SemanticIndexService(_get_pm(request))
|
||||
|
||||
|
||||
def _validate_encryption_path(request: Request, path: Path) -> Path:
|
||||
"""Validate and normalize ``path`` within the active fingerprint directory.
|
||||
|
||||
@@ -1406,6 +1410,65 @@ def set_secret_mode(
|
||||
return {"status": "ok"}
|
||||
|
||||
|
||||
@app.get("/api/v1/semantic/status")
|
||||
def semantic_status(
|
||||
request: Request, authorization: str | None = Header(None)
|
||||
) -> dict[str, Any]:
|
||||
_check_token(request, authorization)
|
||||
_require_unlocked(request)
|
||||
return _semantic_service(request).status()
|
||||
|
||||
|
||||
@app.post("/api/v1/semantic/build")
|
||||
def semantic_build(
|
||||
request: Request, authorization: str | None = Header(None)
|
||||
) -> dict[str, Any]:
|
||||
_check_token(request, authorization)
|
||||
_require_unlocked(request)
|
||||
return _semantic_service(request).build()
|
||||
|
||||
|
||||
@app.post("/api/v1/semantic/rebuild")
|
||||
def semantic_rebuild(
|
||||
request: Request, authorization: str | None = Header(None)
|
||||
) -> dict[str, Any]:
|
||||
_check_token(request, authorization)
|
||||
_require_unlocked(request)
|
||||
return _semantic_service(request).rebuild()
|
||||
|
||||
|
||||
@app.post("/api/v1/semantic/search")
|
||||
def semantic_search(
|
||||
request: Request,
|
||||
data: dict[str, Any],
|
||||
authorization: str | None = Header(None),
|
||||
) -> dict[str, Any]:
|
||||
_check_token(request, authorization)
|
||||
_require_unlocked(request)
|
||||
query = str(data.get("query", "")).strip()
|
||||
if not query:
|
||||
raise HTTPException(status_code=400, detail="Missing query")
|
||||
k = int(data.get("k", 10))
|
||||
kind_raw = data.get("kind")
|
||||
kind = str(kind_raw).strip() if kind_raw is not None else None
|
||||
results = _semantic_service(request).search(query, k=max(1, k), kind=kind)
|
||||
return {"results": results}
|
||||
|
||||
|
||||
@app.post("/api/v1/semantic/config")
|
||||
def semantic_config(
|
||||
request: Request,
|
||||
data: dict[str, Any],
|
||||
authorization: str | None = Header(None),
|
||||
) -> dict[str, Any]:
|
||||
_check_token(request, authorization)
|
||||
_require_unlocked(request)
|
||||
if "enabled" not in data:
|
||||
raise HTTPException(status_code=400, detail="Missing enabled")
|
||||
payload = _semantic_service(request).set_enabled(bool(data.get("enabled")))
|
||||
return {"enabled": bool(payload.get("enabled", False))}
|
||||
|
||||
|
||||
@app.get("/api/v1/fingerprint")
|
||||
def list_fingerprints(
|
||||
request: Request, authorization: str | None = Header(None)
|
||||
|
||||
Reference in new issue
Block a user