codrspot-processor-mcp 0.1.6__tar.gz → 0.1.7__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.
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/PKG-INFO +1 -1
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/pyproject.toml +1 -1
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer1_business/mcp/server.py +11 -2
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer1_business/mcp/tools.py +28 -11
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codrspot_processor_mcp.egg-info/PKG-INFO +1 -1
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/LICENSE +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/README.md +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/setup.cfg +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/__init__.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/__main__.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer1_business/__init__.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer1_business/allowed_scope_cache.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer1_business/api_client/__init__.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer1_business/api_client/lease_client.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer1_business/api_client/net_guard.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer1_business/api_client/promote_client.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer1_business/api_client/reasoning_client.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer1_business/api_client/registry_client.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer1_business/api_client/superkg_client.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer1_business/cli/__init__.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer1_business/cli/init.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer1_business/cli/main.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer1_business/cli/setup.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer1_business/config.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer1_business/git_utils.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer1_business/license/__init__.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer1_business/license/fingerprint.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer1_business/license/jwt_client.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer1_business/license/project_lock.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer1_business/local_registry.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer1_business/manifest/__init__.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer1_business/manifest/credentials.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer1_business/mcp/__init__.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer1_business/mcp/action_monitor.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer1_business/mcp/lifecycle.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer1_business/project_registry.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/__init__.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/condensation/__init__.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/condensation/ast_graph.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/condensation/bm25_store.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/condensation/chunking/__init__.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/condensation/chunking/ast_chunker.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/condensation/chunking/languages.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/condensation/embed_worker.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/condensation/embeddings.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/condensation/extract/__init__.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/condensation/extract/compactor.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/condensation/extract/providers/__init__.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/condensation/extract/providers/base.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/condensation/indexer.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/condensation/ppl/__init__.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/condensation/ppl/emitter.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/condensation/ppl/parser.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/condensation/qdrant_store.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/condensation/scanning/__init__.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/condensation/scanning/manifest_scanner.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/condensation/scanning/md_scanner.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/condensation/scanning/repo_mapper.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/condensation/session_vector_store.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/coupling/__init__.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/coupling/domain.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/coupling/graph.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/coupling/layer2_gate.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/coupling/projector.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/coupling/resolver.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/materialization/__init__.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/materialization/pipeline/__init__.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/materialization/pipeline/execute_semantic.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/materialization/pipeline/filesystem_reorg.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/materialization/pipeline/patch_generator.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/materialization/pipeline/patch_validator.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/materialization/semantic/__init__.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/materialization/semantic/anchors.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/materialization/semantic/applicability.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/materialization/semantic/edit_planner.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/materialization/semantic/materializer.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/materialization/semantic/merger.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/materialization/semantic/ops/__init__.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/materialization/semantic/ops/add_import.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/materialization/semantic/ops/append_argument.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/materialization/semantic/ops/insert_literal.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/materialization/semantic/ops/remove_import.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/materialization/semantic/ops/remove_statement_unique.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/materialization/semantic/ops/rename_symbol_local.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/materialization/semantic/region_resolver.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/materialization/semantic/synthesizer.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/materialization/semantic/target_locator.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/materialization/semantic/validator.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/materialization/snippet/__init__.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/materialization/snippet/assembler.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/materialization/snippet/loader.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/retrieval/__init__.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/retrieval/graph_walk.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/retrieval/hybrid.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/retrieval/rerank_worker.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/retrieval/reranker.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/watcher/__init__.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/layer2_tooling/watcher/fs_watcher.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codrspot_processor_mcp.egg-info/SOURCES.txt +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codrspot_processor_mcp.egg-info/dependency_links.txt +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codrspot_processor_mcp.egg-info/entry_points.txt +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codrspot_processor_mcp.egg-info/requires.txt +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codrspot_processor_mcp.egg-info/top_level.txt +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/contracts/__init__.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/contracts/dtos.py +0 -0
- {codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/contracts/ir.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: codrspot-processor-mcp
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.7
|
|
4
4
|
Summary: Local MCP server exposing codepreproc's code-context tools to Claude Code
|
|
5
5
|
Author-email: alexlqi <alexlqi@gmail.com>
|
|
6
6
|
License: Copyright (c) 2026 alexlqi (alexlqi@gmail.com)
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "codrspot-processor-mcp"
|
|
7
|
-
version = "0.1.
|
|
7
|
+
version = "0.1.7"
|
|
8
8
|
description = "Local MCP server exposing codepreproc's code-context tools to Claude Code"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.12,<3.13"
|
|
@@ -11,6 +11,7 @@ from logging.handlers import RotatingFileHandler
|
|
|
11
11
|
from pathlib import Path
|
|
12
12
|
from urllib.parse import urlparse
|
|
13
13
|
from urllib.request import url2pathname
|
|
14
|
+
from weakref import WeakKeyDictionary
|
|
14
15
|
|
|
15
16
|
# GitPython raises ImportError at import time if no `git` executable is on
|
|
16
17
|
# PATH; downgrade to a warning so a missing/unusual PATH doesn't take down
|
|
@@ -236,7 +237,15 @@ async def main() -> None:
|
|
|
236
237
|
snippet_loader=snippet_loader,
|
|
237
238
|
jwt_provider=_project_jwt_provider,
|
|
238
239
|
)
|
|
239
|
-
|
|
240
|
+
# Keyed by the session object itself (not id(session)): id() is only
|
|
241
|
+
# unique among objects simultaneously alive, and a plain dict here would
|
|
242
|
+
# let a garbage-collected session's id be reused by an unrelated later
|
|
243
|
+
# session, handing it a stale SessionState (active_project, cached
|
|
244
|
+
# per-project indexers, etc.) - which is how one project's file paths
|
|
245
|
+
# leaked into another project's map_context results. WeakKeyDictionary
|
|
246
|
+
# also evicts entries once a session is collected instead of growing
|
|
247
|
+
# unbounded for the life of the process.
|
|
248
|
+
sessions: "WeakKeyDictionary[object, SessionState]" = WeakKeyDictionary()
|
|
240
249
|
# NOTE (Phase 4/5 follow-up): once lease_client.lease_world_model() is called
|
|
241
250
|
# against a real deployed server, each SessionState should own a
|
|
242
251
|
# WorldModelLeaseGuard (mcp/lifecycle.py) populated from that response, and
|
|
@@ -554,7 +563,7 @@ async def main() -> None:
|
|
|
554
563
|
async def call_tool(name: str, arguments: dict | None) -> types.CallToolResult:
|
|
555
564
|
session = server.request_context.session
|
|
556
565
|
request_context = server.request_context
|
|
557
|
-
state = sessions.setdefault(
|
|
566
|
+
state = sessions.setdefault(session, SessionState())
|
|
558
567
|
root_uris = await resolve_session_roots(
|
|
559
568
|
session=session,
|
|
560
569
|
lifecycle_logger=lifecycle_logger,
|
|
@@ -467,7 +467,7 @@ class CodepreprocTools:
|
|
|
467
467
|
full_path.write_text(full_path.read_text(encoding="utf-8").replace("\n", "\r\n"), encoding="utf-8", newline="")
|
|
468
468
|
|
|
469
469
|
# Transactional SuperKG write: fires only after disk mutation succeeds
|
|
470
|
-
superkg_system_id,
|
|
470
|
+
superkg_system_id, superkg_error = await self._ensure_superkg_system(project)
|
|
471
471
|
if superkg_system_id:
|
|
472
472
|
plan = item.pack.semantic_plan
|
|
473
473
|
bld = bld_from_plan(plan) if plan else None
|
|
@@ -481,7 +481,12 @@ class CodepreprocTools:
|
|
|
481
481
|
bld=bld,
|
|
482
482
|
)
|
|
483
483
|
|
|
484
|
-
return {
|
|
484
|
+
return {
|
|
485
|
+
"applied": True,
|
|
486
|
+
"files_changed": touched,
|
|
487
|
+
"error": None,
|
|
488
|
+
"superkg_status": {"bootstrapped": superkg_system_id is not None, "error": superkg_error},
|
|
489
|
+
}
|
|
485
490
|
|
|
486
491
|
async def apply_filesystem_plan(self, session: SessionState, arguments: dict, monitor: ActionMonitor | None = None) -> dict:
|
|
487
492
|
payload = ApplyFilesystemPlanInput.model_validate(arguments)
|
|
@@ -539,7 +544,7 @@ class CodepreprocTools:
|
|
|
539
544
|
result = stats.model_dump(mode="json")
|
|
540
545
|
|
|
541
546
|
# Log indexing activity in SuperKG (fire-and-forget)
|
|
542
|
-
superkg_system_id,
|
|
547
|
+
superkg_system_id, superkg_error = await self._ensure_superkg_system(project)
|
|
543
548
|
if superkg_system_id:
|
|
544
549
|
await self.superkg.log_activity(
|
|
545
550
|
project_id=project.project_id,
|
|
@@ -554,6 +559,7 @@ class CodepreprocTools:
|
|
|
554
559
|
},
|
|
555
560
|
)
|
|
556
561
|
|
|
562
|
+
result["superkg_status"] = {"bootstrapped": superkg_system_id is not None, "error": superkg_error}
|
|
557
563
|
return result
|
|
558
564
|
|
|
559
565
|
async def project_status(self, session: SessionState, arguments: dict) -> dict:
|
|
@@ -563,6 +569,11 @@ class CodepreprocTools:
|
|
|
563
569
|
repo = Repo(project.root)
|
|
564
570
|
current_sha = get_current_sha(repo)
|
|
565
571
|
status = indexer.get_index_status()
|
|
572
|
+
# Attempt (not just read) bootstrap here, since this is the tool someone
|
|
573
|
+
# would naturally call to check why superkg_system_id/kg_snapshot are
|
|
574
|
+
# null - it must actually try and report the reason, not just echo the
|
|
575
|
+
# cached (possibly forever-null) field.
|
|
576
|
+
superkg_system_id, superkg_error = await self._ensure_superkg_system(project)
|
|
566
577
|
result: dict = {
|
|
567
578
|
"project": project.project_id,
|
|
568
579
|
"git_sha": current_sha,
|
|
@@ -573,11 +584,12 @@ class CodepreprocTools:
|
|
|
573
584
|
"llm_policy": session.policy_overrides.get(project.project_id, project.llm_policy),
|
|
574
585
|
"index_state": status["index_state"],
|
|
575
586
|
"last_index_error": status.get("last_index_error"),
|
|
576
|
-
"superkg_system_id":
|
|
587
|
+
"superkg_system_id": superkg_system_id,
|
|
588
|
+
"superkg_status": {"bootstrapped": superkg_system_id is not None, "error": superkg_error},
|
|
577
589
|
"kg_snapshot": None,
|
|
578
590
|
}
|
|
579
|
-
if
|
|
580
|
-
result["kg_snapshot"] = await self.superkg.get_snapshot(project.project_id,
|
|
591
|
+
if superkg_system_id:
|
|
592
|
+
result["kg_snapshot"] = await self.superkg.get_snapshot(project.project_id, superkg_system_id)
|
|
581
593
|
return result
|
|
582
594
|
|
|
583
595
|
async def search_context(self, session: SessionState, arguments: dict, monitor: ActionMonitor | None = None) -> dict:
|
|
@@ -607,7 +619,7 @@ class CodepreprocTools:
|
|
|
607
619
|
reranked = await self.reranker.rerank(payload.query, retrieved, top_k)
|
|
608
620
|
|
|
609
621
|
enrich_result: EnrichResult | None = None
|
|
610
|
-
superkg_system_id,
|
|
622
|
+
superkg_system_id, superkg_error = await self._ensure_superkg_system(project)
|
|
611
623
|
if superkg_system_id:
|
|
612
624
|
candidates = [
|
|
613
625
|
{"chunk_id": item.chunk.chunk_id, "file_path": item.chunk.file_path, "score": item.score}
|
|
@@ -655,6 +667,7 @@ class CodepreprocTools:
|
|
|
655
667
|
result["pattern_suggestions"] = enrich_result.pattern_suggestions
|
|
656
668
|
if enrich_result and enrich_result.warnings:
|
|
657
669
|
result["kg_warnings"] = enrich_result.warnings
|
|
670
|
+
result["superkg_status"] = {"bootstrapped": superkg_system_id is not None, "error": superkg_error}
|
|
658
671
|
return result
|
|
659
672
|
|
|
660
673
|
async def map_context(self, session: SessionState, arguments: dict, monitor: ActionMonitor | None = None) -> dict:
|
|
@@ -688,7 +701,7 @@ class CodepreprocTools:
|
|
|
688
701
|
reranked = await self.reranker.rerank(payload.query, retrieved, top_k)
|
|
689
702
|
|
|
690
703
|
enrich_result: EnrichResult | None = None
|
|
691
|
-
superkg_system_id,
|
|
704
|
+
superkg_system_id, superkg_error = await self._ensure_superkg_system(project)
|
|
692
705
|
if superkg_system_id:
|
|
693
706
|
candidates = [
|
|
694
707
|
{"chunk_id": item.chunk.chunk_id, "file_path": item.chunk.file_path, "score": item.score}
|
|
@@ -825,6 +838,7 @@ class CodepreprocTools:
|
|
|
825
838
|
map_result["pattern_suggestions"] = enrich_result.pattern_suggestions
|
|
826
839
|
if enrich_result.warnings:
|
|
827
840
|
map_result["kg_warnings"] = enrich_result.warnings
|
|
841
|
+
map_result["superkg_status"] = {"bootstrapped": superkg_system_id is not None, "error": superkg_error}
|
|
828
842
|
return map_result
|
|
829
843
|
|
|
830
844
|
async def generate_document(self, session: SessionState, arguments: dict, monitor: ActionMonitor | None = None) -> dict:
|
|
@@ -878,7 +892,7 @@ class CodepreprocTools:
|
|
|
878
892
|
|
|
879
893
|
# Enrich with SuperKG narrative context if available (fire-and-forget)
|
|
880
894
|
kg_narrative = ""
|
|
881
|
-
superkg_system_id,
|
|
895
|
+
superkg_system_id, superkg_error = await self._ensure_superkg_system(project)
|
|
882
896
|
if superkg_system_id:
|
|
883
897
|
kg_data = await self.superkg.get_context(project.project_id, superkg_system_id, mode="narrative")
|
|
884
898
|
if isinstance(kg_data, dict):
|
|
@@ -928,6 +942,7 @@ class CodepreprocTools:
|
|
|
928
942
|
"bytes_written": len(content.encode("utf-8")),
|
|
929
943
|
"chunks_used": len(all_chunks),
|
|
930
944
|
"llm_usage": usage.model_dump(mode="json"),
|
|
945
|
+
"superkg_status": {"bootstrapped": superkg_system_id is not None, "error": superkg_error},
|
|
931
946
|
}
|
|
932
947
|
|
|
933
948
|
async def generate_business_logic(self, session: SessionState, arguments: dict, monitor: ActionMonitor | None = None) -> dict:
|
|
@@ -982,7 +997,7 @@ class CodepreprocTools:
|
|
|
982
997
|
context_text = self._format_doc_context(all_chunks)
|
|
983
998
|
|
|
984
999
|
kg_narrative = ""
|
|
985
|
-
superkg_system_id,
|
|
1000
|
+
superkg_system_id, superkg_error = await self._ensure_superkg_system(project)
|
|
986
1001
|
if superkg_system_id:
|
|
987
1002
|
kg_data = await self.superkg.get_context(project.project_id, superkg_system_id, mode="narrative")
|
|
988
1003
|
if isinstance(kg_data, dict):
|
|
@@ -1029,6 +1044,7 @@ class CodepreprocTools:
|
|
|
1029
1044
|
"chunks_used": len(all_chunks),
|
|
1030
1045
|
"overwritten": full_path.exists(),
|
|
1031
1046
|
"llm_usage": usage.model_dump(mode="json"),
|
|
1047
|
+
"superkg_status": {"bootstrapped": superkg_system_id is not None, "error": superkg_error},
|
|
1032
1048
|
}
|
|
1033
1049
|
|
|
1034
1050
|
async def list_snippets(self, session: SessionState, arguments: dict) -> dict:
|
|
@@ -1256,7 +1272,7 @@ class CodepreprocTools:
|
|
|
1256
1272
|
if monitor is not None:
|
|
1257
1273
|
await monitor.stage("annotate", "generate_repo_map: enriqueciendo con KG y LLM")
|
|
1258
1274
|
|
|
1259
|
-
superkg_system_id,
|
|
1275
|
+
superkg_system_id, superkg_error = await self._ensure_superkg_system(project)
|
|
1260
1276
|
policy = session.policy_overrides.get(project.project_id, project.llm_policy)
|
|
1261
1277
|
annotator = RepoMapAnnotator(
|
|
1262
1278
|
router=self.llm_runtime.router,
|
|
@@ -1304,6 +1320,7 @@ class CodepreprocTools:
|
|
|
1304
1320
|
"project_id": project.project_id,
|
|
1305
1321
|
"output_path": str(output_path),
|
|
1306
1322
|
"stats": final_map["stats"],
|
|
1323
|
+
"superkg_status": {"bootstrapped": superkg_system_id is not None, "error": superkg_error},
|
|
1307
1324
|
**({"warnings": [f"LLM extraction failed for {len(failed_modules)} module(s), left empty: {failed_modules}"]} if failed_modules else {}),
|
|
1308
1325
|
}
|
|
1309
1326
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: codrspot-processor-mcp
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.7
|
|
4
4
|
Summary: Local MCP server exposing codepreproc's code-context tools to Claude Code
|
|
5
5
|
Author-email: alexlqi <alexlqi@gmail.com>
|
|
6
6
|
License: Copyright (c) 2026 alexlqi (alexlqi@gmail.com)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/__init__.py
RENAMED
|
File without changes
|
{codrspot_processor_mcp-0.1.6 → codrspot_processor_mcp-0.1.7}/src/codepreproc_client/__main__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|