victor-coding 0.7.1__tar.gz → 0.13.0__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.
- {victor_coding-0.7.1 → victor_coding-0.13.0}/LICENSE +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/PKG-INFO +11 -12
- {victor_coding-0.7.1 → victor_coding-0.13.0}/README.md +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/pyproject.toml +25 -37
- {victor_coding-0.7.1 → victor_coding-0.13.0}/tests/test_api_router_provider.py +2 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/tests/test_coding_capabilities.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/tests/test_coding_vertical_rl.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/tests/test_coding_vertical_teams.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/tests/test_coding_vertical_workflows.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/tests/test_enhanced_integration.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/tests/test_extension_cache.py +4 -2
- victor_coding-0.13.0/tests/test_framework_lsp_adapter.py +198 -0
- victor_coding-0.13.0/tests/test_graph_backend_marker.py +70 -0
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/__init__.py +20 -5
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/assistant.py +44 -4
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/capabilities.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/codebase/__init__.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/codebase/architecture_analyzer.py +4 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/codebase/ccg_builder.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/codebase/chunker.py +1 -1
- victor_coding-0.13.0/victor_coding/codebase/embeddings/__init__.py +56 -0
- victor_coding-0.13.0/victor_coding/codebase/embeddings/base.py +247 -0
- victor_coding-0.13.0/victor_coding/codebase/embeddings/chunker.py +466 -0
- victor_coding-0.13.0/victor_coding/codebase/embeddings/lancedb_provider.py +418 -0
- victor_coding-0.13.0/victor_coding/codebase/embeddings/models.py +530 -0
- victor_coding-0.13.0/victor_coding/codebase/embeddings/proximadb_provider.py +615 -0
- victor_coding-0.13.0/victor_coding/codebase/embeddings/registry.py +140 -0
- victor_coding-0.13.0/victor_coding/codebase/graph/__init__.py +31 -0
- victor_coding-0.13.0/victor_coding/codebase/graph/protocol.py +110 -0
- victor_coding-0.13.0/victor_coding/codebase/graph/registry.py +61 -0
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/codebase/ignore_patterns.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/codebase/indexer.py +103 -77
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/codebase/query_expander.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/codebase/symbol_store.py +5 -2
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/codebase/tree_sitter_analysis.py +89 -6
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/codebase/tree_sitter_extractor.py +6 -4
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/codebase/tree_sitter_manager.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/codebase/tree_sitter_service.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/codebase/unified_extractor.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/codebase_analyzer.py +47 -11
- victor_coding-0.13.0/victor_coding/compat/settings.py +113 -0
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/completion/__init__.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/completion/manager.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/completion/protocol.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/completion/provider.py +1 -1
- victor_coding-0.13.0/victor_coding/completion/providers/__init__.py +25 -0
- victor_coding-0.13.0/victor_coding/completion/providers/ai.py +409 -0
- victor_coding-0.13.0/victor_coding/completion/providers/lsp.py +313 -0
- victor_coding-0.13.0/victor_coding/completion/providers/snippet.py +532 -0
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/completion/registry.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/composed_chains.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/conversation_enhanced.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/coverage/__init__.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/coverage/manager.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/coverage/parser.py +2 -2
- victor_coding-0.13.0/victor_coding/coverage/parsers/__init__.py +40 -0
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/coverage/protocol.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/coverage/visualizer.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/docgen/__init__.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/docgen/formatter.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/docgen/manager.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/docgen/parser.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/docgen/protocol.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/editing/__init__.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/editing/editor.py +10 -3
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/enrichment.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/escape_hatches.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/handlers.py +4 -2
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/languages/__init__.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/languages/base.py +11 -2
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/languages/manager.py +1 -1
- victor_coding-0.13.0/victor_coding/languages/plugins/__init__.py +130 -0
- victor_coding-0.13.0/victor_coding/languages/plugins/additional.py +3541 -0
- victor_coding-0.13.0/victor_coding/languages/plugins/config.py +319 -0
- victor_coding-0.13.0/victor_coding/languages/plugins/cpp.py +462 -0
- victor_coding-0.13.0/victor_coding/languages/plugins/go.py +296 -0
- victor_coding-0.13.0/victor_coding/languages/plugins/java.py +372 -0
- victor_coding-0.13.0/victor_coding/languages/plugins/javascript.py +372 -0
- victor_coding-0.13.0/victor_coding/languages/plugins/python.py +379 -0
- victor_coding-0.13.0/victor_coding/languages/plugins/rust.py +750 -0
- victor_coding-0.13.0/victor_coding/languages/plugins/typescript.py +378 -0
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/languages/registry.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/languages/tiers.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/lsp/__init__.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/lsp/client.py +83 -3
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/lsp/config.py +1 -1
- victor_coding-0.13.0/victor_coding/lsp/framework_adapter.py +134 -0
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/lsp/manager.py +21 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/middleware.py +8 -3
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/mode_config.py +1 -1
- victor_coding-0.13.0/victor_coding/native/__init__.py +132 -0
- victor_coding-0.13.0/victor_coding/performance/__init__.py +87 -0
- victor_coding-0.13.0/victor_coding/performance/factory.py +377 -0
- victor_coding-0.13.0/victor_coding/performance/protocols.py +350 -0
- victor_coding-0.13.0/victor_coding/performance/registry.py +456 -0
- victor_coding-0.13.0/victor_coding/performance/service_provider.py +181 -0
- victor_coding-0.13.0/victor_coding/performance/settings.py +234 -0
- victor_coding-0.13.0/victor_coding/performance/wrappers.py +408 -0
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/prompts.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/protocols.py +5 -17
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/refactor/__init__.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/refactor/analyzer.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/refactor/manager.py +5 -2
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/refactor/protocol.py +1 -1
- victor_coding-0.13.0/victor_coding/refactor/transforms/__init__.py +36 -0
- victor_coding-0.13.0/victor_coding/refactor/transforms/base.py +285 -0
- victor_coding-0.13.0/victor_coding/refactor/transforms/extract.py +464 -0
- victor_coding-0.13.0/victor_coding/refactor/transforms/rename.py +234 -0
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/review/__init__.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/review/analyzers.py +6 -6
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/review/manager.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/review/protocol.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/review/rules.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/rl/__init__.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/rl/config.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/rl/hooks.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/safety.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/safety_enhanced.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/service_provider.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/teams/__init__.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/teams/personas.py +4 -2
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/teams/specs.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/testgen/__init__.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/testgen/analyzer.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/testgen/generator.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/testgen/manager.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/testgen/protocol.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/tool_dependencies.py +1 -1
- victor_coding-0.13.0/victor_coding/tools/__init__.py +0 -0
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/tools/code_executor_tool.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/tools/code_intelligence_tool.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/tools/code_search_tool.py +80 -245
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/tools/graph_tool.py +48 -23
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/workflows/__init__.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/workflows/bugfix.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/workflows/feature.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/workflows/provider.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/workflows/review.py +1 -1
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding.egg-info/PKG-INFO +11 -12
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding.egg-info/SOURCES.txt +42 -0
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding.egg-info/requires.txt +6 -6
- {victor_coding-0.7.1 → victor_coding-0.13.0}/setup.cfg +0 -0
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/api/__init__.py +0 -0
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/api/router_provider.py +0 -0
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/codebase/symbol_extractor.py +0 -0
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/codebase/symbol_resolver.py +0 -0
- {victor_coding-0.7.1/victor_coding/tools → victor_coding-0.13.0/victor_coding/compat}/__init__.py +0 -0
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/plugin.py +0 -0
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding/skills.py +0 -0
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding.egg-info/dependency_links.txt +0 -0
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding.egg-info/entry_points.txt +0 -0
- {victor_coding-0.7.1 → victor_coding-0.13.0}/victor_coding.egg-info/top_level.txt +0 -0
|
@@ -175,7 +175,7 @@
|
|
|
175
175
|
|
|
176
176
|
END OF TERMS AND CONDITIONS
|
|
177
177
|
|
|
178
|
-
Copyright 2025 Vijaykumar Singh <
|
|
178
|
+
Copyright 2025 Vijaykumar Singh <vijay@anvaiops.com>
|
|
179
179
|
|
|
180
180
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
181
181
|
you may not use this file except in compliance with the License.
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: victor-coding
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.13.0
|
|
4
4
|
Summary: Coding vertical for Victor AI - Software development, debugging, and code generation
|
|
5
|
-
Author-email: Vijaykumar Singh <
|
|
6
|
-
Maintainer-email: Vijaykumar Singh <
|
|
5
|
+
Author-email: Vijaykumar Singh <vijay@anvaiops.com>
|
|
6
|
+
Maintainer-email: Vijaykumar Singh <vijay@anvaiops.com>
|
|
7
7
|
License: Apache-2.0
|
|
8
8
|
Project-URL: Homepage, https://github.com/vjsingh1984/victor-coding
|
|
9
9
|
Project-URL: Repository, https://github.com/vjsingh1984/victor-coding
|
|
@@ -13,34 +13,33 @@ Keywords: victor,vertical,coding,development,debugging,refactoring
|
|
|
13
13
|
Classifier: Development Status :: 4 - Beta
|
|
14
14
|
Classifier: Intended Audience :: Developers
|
|
15
15
|
Classifier: Programming Language :: Python :: 3
|
|
16
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
17
16
|
Classifier: Programming Language :: Python :: 3.12
|
|
18
17
|
Classifier: Topic :: Software Development
|
|
19
|
-
Requires-Python: >=3.
|
|
18
|
+
Requires-Python: >=3.12
|
|
20
19
|
Description-Content-Type: text/markdown
|
|
21
20
|
License-File: LICENSE
|
|
22
21
|
Requires-Dist: victor-contracts[yaml]<1.0,>=0.6.0
|
|
23
|
-
Requires-Dist: numpy<2.3,>=1.24
|
|
24
22
|
Requires-Dist: victor-codegraph[treesitter]>=0.1.0
|
|
25
23
|
Requires-Dist: defusedxml<1.0,>=0.7
|
|
26
24
|
Provides-Extra: runtime
|
|
27
|
-
Requires-Dist: victor-ai<1.0,>=0.6
|
|
25
|
+
Requires-Dist: victor-ai<1.0,>=0.7.6; extra == "runtime"
|
|
28
26
|
Provides-Extra: native
|
|
29
27
|
Provides-Extra: proximadb
|
|
30
|
-
Requires-Dist: proximadb<0.
|
|
28
|
+
Requires-Dist: proximadb<0.5,>=0.4.1; extra == "proximadb"
|
|
31
29
|
Provides-Extra: codegraph
|
|
32
30
|
Requires-Dist: victor-codegraph<1.0,>=0.1.0; extra == "codegraph"
|
|
33
31
|
Provides-Extra: dev
|
|
32
|
+
Requires-Dist: numpy<2.6,>=1.24; extra == "dev"
|
|
34
33
|
Requires-Dist: pytest>=8.0; extra == "dev"
|
|
35
34
|
Requires-Dist: pytest-asyncio>=0.23; extra == "dev"
|
|
36
35
|
Requires-Dist: pytest-cov>=4.1; extra == "dev"
|
|
37
36
|
Requires-Dist: pytest-xdist>=3.0; extra == "dev"
|
|
38
37
|
Requires-Dist: pytest-benchmark>=5.0; extra == "dev"
|
|
39
|
-
Requires-Dist: black==26.
|
|
38
|
+
Requires-Dist: black==26.10.0; extra == "dev"
|
|
40
39
|
Requires-Dist: ruff>=0.5; extra == "dev"
|
|
41
|
-
Requires-Dist: mypy
|
|
40
|
+
Requires-Dist: mypy==2.4.0; extra == "dev"
|
|
42
41
|
Provides-Extra: native-dev
|
|
43
|
-
Requires-Dist: maturin<2.0,>=1.
|
|
42
|
+
Requires-Dist: maturin<2.0,>=1.10; extra == "native-dev"
|
|
44
43
|
Dynamic: license-file
|
|
45
44
|
|
|
46
45
|
# victor-coding
|
|
@@ -106,4 +105,4 @@ Apache License 2.0 - see [LICENSE](LICENSE) for details.
|
|
|
106
105
|
|
|
107
106
|
- **Victor AI**: https://github.com/vijay-singh/codingagent
|
|
108
107
|
- **Documentation**: https://docs.victor.dev/verticals/coding
|
|
109
|
-
- **Victor Registry**: https://github.com/
|
|
108
|
+
- **Victor Registry**: https://github.com/anvai-labs/victor-registry
|
|
@@ -61,4 +61,4 @@ Apache License 2.0 - see [LICENSE](LICENSE) for details.
|
|
|
61
61
|
|
|
62
62
|
- **Victor AI**: https://github.com/vijay-singh/codingagent
|
|
63
63
|
- **Documentation**: https://docs.victor.dev/verticals/coding
|
|
64
|
-
- **Victor Registry**: https://github.com/
|
|
64
|
+
- **Victor Registry**: https://github.com/anvai-labs/victor-registry
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
[build-system]
|
|
2
2
|
requires = [
|
|
3
|
-
"setuptools>=
|
|
3
|
+
"setuptools>=83.0.0",
|
|
4
4
|
"wheel",
|
|
5
5
|
]
|
|
6
6
|
build-backend = "setuptools.build_meta"
|
|
7
7
|
|
|
8
8
|
[project]
|
|
9
9
|
name = "victor-coding"
|
|
10
|
-
version = "0.
|
|
10
|
+
version = "0.13.0"
|
|
11
11
|
description = "Coding vertical for Victor AI - Software development, debugging, and code generation"
|
|
12
12
|
readme = "README.md"
|
|
13
|
-
requires-python = ">=3.
|
|
13
|
+
requires-python = ">=3.12"
|
|
14
14
|
license = {text = "Apache-2.0"}
|
|
15
15
|
authors = [
|
|
16
|
-
{ name = "Vijaykumar Singh", email = "
|
|
16
|
+
{ name = "Vijaykumar Singh", email = "vijay@anvaiops.com" },
|
|
17
17
|
]
|
|
18
18
|
maintainers = [
|
|
19
|
-
{ name = "Vijaykumar Singh", email = "
|
|
19
|
+
{ name = "Vijaykumar Singh", email = "vijay@anvaiops.com" },
|
|
20
20
|
]
|
|
21
21
|
keywords = [
|
|
22
22
|
"victor",
|
|
@@ -30,32 +30,29 @@ classifiers = [
|
|
|
30
30
|
"Development Status :: 4 - Beta",
|
|
31
31
|
"Intended Audience :: Developers",
|
|
32
32
|
"Programming Language :: Python :: 3",
|
|
33
|
-
"Programming Language :: Python :: 3.11",
|
|
34
33
|
"Programming Language :: Python :: 3.12",
|
|
35
34
|
"Topic :: Software Development",
|
|
36
35
|
]
|
|
37
36
|
dependencies = [
|
|
38
37
|
"victor-contracts[yaml]>=0.6.0,<1.0", # Definition-layer contract for external verticals
|
|
39
|
-
"numpy>=1.24,<2.3", # Required by victor.storage.embeddings; numba-compatible
|
|
40
38
|
"victor-codegraph[treesitter]>=0.1.0", # Shared code->CPG chunker (ADR-014); [treesitter] supplies the grammars the delegation parses JS/Go/TS/Rust with
|
|
41
39
|
"defusedxml>=0.7,<1.0", # XXE-hardened XML parsing for coverage reports
|
|
42
40
|
]
|
|
43
41
|
|
|
44
42
|
[project.optional-dependencies]
|
|
45
43
|
runtime = [
|
|
46
|
-
"victor-ai>=0.6
|
|
44
|
+
"victor-ai>=0.7.6,<1.0", # Runtime support - optional, contract-first architecture
|
|
47
45
|
]
|
|
48
46
|
native = [
|
|
49
|
-
#
|
|
50
|
-
#
|
|
51
|
-
# or build with: maturin develop --release
|
|
47
|
+
# Compatibility extra. Build the separate distribution from ./native;
|
|
48
|
+
# see native/README.md. Installing this empty extra does not build Rust.
|
|
52
49
|
]
|
|
53
50
|
# ProximaDB embedding provider (optional backend).
|
|
54
51
|
# Imported lazily with graceful ImportError fallback in
|
|
55
52
|
# victor_coding/codebase/embeddings/proximadb_provider.py. Pin kept identical
|
|
56
53
|
# to victor-ai's proximadb extra so the backend version stays aligned.
|
|
57
54
|
proximadb = [
|
|
58
|
-
"proximadb>=0.
|
|
55
|
+
"proximadb>=0.4.1,<0.5",
|
|
59
56
|
]
|
|
60
57
|
# Shared code->CPG chunker (ADR-014). Opt-in: when installed AND
|
|
61
58
|
# VICTOR_CODING_USE_CODEGRAPH=1, CodeChunker delegates to it. Published on PyPI
|
|
@@ -64,17 +61,18 @@ codegraph = [
|
|
|
64
61
|
"victor-codegraph>=0.1.0,<1.0",
|
|
65
62
|
]
|
|
66
63
|
dev = [
|
|
64
|
+
"numpy>=1.24,<2.6", # Synthetic embeddings in indexer tests
|
|
67
65
|
"pytest>=8.0",
|
|
68
66
|
"pytest-asyncio>=0.23",
|
|
69
67
|
"pytest-cov>=4.1",
|
|
70
68
|
"pytest-xdist>=3.0",
|
|
71
69
|
"pytest-benchmark>=5.0",
|
|
72
|
-
"black==26.
|
|
70
|
+
"black==26.10.0",
|
|
73
71
|
"ruff>=0.5",
|
|
74
|
-
"mypy
|
|
72
|
+
"mypy==2.4.0",
|
|
75
73
|
]
|
|
76
74
|
native-dev = [
|
|
77
|
-
"maturin>=1.
|
|
75
|
+
"maturin>=1.10,<2.0", # Build Rust extensions
|
|
78
76
|
]
|
|
79
77
|
|
|
80
78
|
[project.urls]
|
|
@@ -142,36 +140,26 @@ coding-hooks = "victor_coding.protocols:CodingHookProvider"
|
|
|
142
140
|
[project.entry-points."victor.compaction.providers"]
|
|
143
141
|
coding-compaction = "victor_coding.protocols:CodingCompactionProvider"
|
|
144
142
|
|
|
145
|
-
[tool.setuptools]
|
|
146
|
-
packages
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
"victor_coding.lsp",
|
|
156
|
-
"victor_coding.refactor",
|
|
157
|
-
"victor_coding.review",
|
|
158
|
-
"victor_coding.rl",
|
|
159
|
-
"victor_coding.teams",
|
|
160
|
-
"victor_coding.testgen",
|
|
161
|
-
"victor_coding.tools",
|
|
162
|
-
"victor_coding.workflows",
|
|
163
|
-
]
|
|
143
|
+
[tool.setuptools.packages.find]
|
|
144
|
+
# Auto-discover all `victor_coding*` subpackages. An explicit `packages` list
|
|
145
|
+
# here previously omitted nested subpackages (languages.plugins,
|
|
146
|
+
# codebase.embeddings, codebase.graph, compat, completion.providers,
|
|
147
|
+
# coverage.parsers, native, performance, refactor.transforms), which silently
|
|
148
|
+
# broke the published wheel (ModuleNotFoundError) while editable installs
|
|
149
|
+
# worked — because the whole source tree is on sys.path under `-e`.
|
|
150
|
+
# Discovery makes the wheel match the source tree by construction.
|
|
151
|
+
include = ["victor_coding*"]
|
|
152
|
+
exclude = ["tests*", "docs*", "native*"]
|
|
164
153
|
|
|
165
154
|
[tool.black]
|
|
166
155
|
line-length = 100
|
|
167
156
|
target-version = [
|
|
168
|
-
"py311",
|
|
169
157
|
"py312",
|
|
170
158
|
]
|
|
171
159
|
|
|
172
160
|
[tool.ruff]
|
|
173
161
|
line-length = 100
|
|
174
|
-
target-version = "
|
|
162
|
+
target-version = "py312"
|
|
175
163
|
|
|
176
164
|
[tool.ruff.lint]
|
|
177
165
|
select = ["E", "W", "F", "B", "C4"]
|
|
@@ -196,5 +184,5 @@ ignore = [
|
|
|
196
184
|
"__init__.py" = ["F401"]
|
|
197
185
|
"tests/**/*.py" = ["B017", "B018", "E741", "F841"]
|
|
198
186
|
[tool.mypy]
|
|
199
|
-
python_version = "3.
|
|
187
|
+
python_version = "3.12"
|
|
200
188
|
warn_return_any = true
|
|
@@ -22,7 +22,8 @@ else:
|
|
|
22
22
|
get_fastapi_router_provider = None
|
|
23
23
|
|
|
24
24
|
pytestmark = pytest.mark.skipif(
|
|
25
|
-
not FASTAPI_AVAILABLE,
|
|
25
|
+
not FASTAPI_AVAILABLE,
|
|
26
|
+
reason="FastAPI not installed. Install with: pip install fastapi",
|
|
26
27
|
)
|
|
27
28
|
|
|
28
29
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2025 Vijaykumar Singh <
|
|
1
|
+
# Copyright 2025 Vijaykumar Singh <vijay@anvaiops.com>
|
|
2
2
|
#
|
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
4
|
# you may not use this file except in compliance with the License.
|
|
@@ -655,7 +655,9 @@ class TestVerticalLoaderObservabilityEvents:
|
|
|
655
655
|
assert "stats" in data
|
|
656
656
|
|
|
657
657
|
@pytest.mark.asyncio
|
|
658
|
-
async def test_discover_verticals_async_concurrent_cache_hit_telemetry_is_correct(
|
|
658
|
+
async def test_discover_verticals_async_concurrent_cache_hit_telemetry_is_correct(
|
|
659
|
+
self,
|
|
660
|
+
):
|
|
659
661
|
"""Concurrent async discovery should report one miss and one cache hit."""
|
|
660
662
|
loader = VerticalLoader()
|
|
661
663
|
emitted = []
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
# Copyright 2026 Vijaykumar Singh <vijay@anvaiops.com>
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
|
|
6
|
+
"""Tests for the framework LSP adapter (victor-coding → FEP-0019 activation).
|
|
7
|
+
|
|
8
|
+
The adapter bridges victor-coding's ``LSPConnectionPool`` (display dicts +
|
|
9
|
+
``victor_contracts`` types) to the LSP shape the FEP-0019 framework runtime
|
|
10
|
+
duck-types, so the diagnostic middleware + symbol context provider activate.
|
|
11
|
+
Uses a mock pool (no live language server).
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
from __future__ import annotations
|
|
15
|
+
|
|
16
|
+
from types import SimpleNamespace
|
|
17
|
+
from typing import List
|
|
18
|
+
|
|
19
|
+
import pytest
|
|
20
|
+
|
|
21
|
+
from victor_contracts.lsp_runtime import (
|
|
22
|
+
Diagnostic,
|
|
23
|
+
DiagnosticSeverity,
|
|
24
|
+
DocumentSymbol,
|
|
25
|
+
Position,
|
|
26
|
+
Range,
|
|
27
|
+
SymbolKind,
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def _ds(name: str, kind: SymbolKind, children=None, detail=None) -> DocumentSymbol:
|
|
32
|
+
r = Range(start=Position(line=1, character=0), end=Position(line=9, character=0))
|
|
33
|
+
sel = Range(start=Position(line=1, character=6), end=Position(line=1, character=6))
|
|
34
|
+
return DocumentSymbol(
|
|
35
|
+
name=name,
|
|
36
|
+
kind=kind,
|
|
37
|
+
range=r,
|
|
38
|
+
selection_range=sel,
|
|
39
|
+
detail=detail,
|
|
40
|
+
children=children or [],
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
class _MockPool:
|
|
45
|
+
"""Stand-in for LSPConnectionPool returning controlled data."""
|
|
46
|
+
|
|
47
|
+
def __init__(self, symbols=None):
|
|
48
|
+
self._symbols = symbols or []
|
|
49
|
+
self.calls: List[tuple] = []
|
|
50
|
+
|
|
51
|
+
async def open_document(self, file_path: str, text=None) -> bool:
|
|
52
|
+
self.calls.append(("open_document", file_path))
|
|
53
|
+
return True
|
|
54
|
+
|
|
55
|
+
async def update_document(self, file_path: str, text: str) -> bool:
|
|
56
|
+
self.calls.append(("update_document", file_path))
|
|
57
|
+
return True
|
|
58
|
+
|
|
59
|
+
def close_document(self, file_path: str) -> None:
|
|
60
|
+
self.calls.append(("close_document", file_path))
|
|
61
|
+
|
|
62
|
+
def get_diagnostics(self, file_path: str):
|
|
63
|
+
# Match the pool's real shape: severity as STRING, line 1-indexed.
|
|
64
|
+
return [
|
|
65
|
+
{
|
|
66
|
+
"line": 41,
|
|
67
|
+
"character": 5,
|
|
68
|
+
"message": "undefined name 'foo'",
|
|
69
|
+
"severity": "error",
|
|
70
|
+
"source": "pyright",
|
|
71
|
+
"code": None,
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"line": 8,
|
|
75
|
+
"character": 0,
|
|
76
|
+
"message": "unused import",
|
|
77
|
+
"severity": "warning",
|
|
78
|
+
"source": "ruff",
|
|
79
|
+
"code": "F401",
|
|
80
|
+
},
|
|
81
|
+
]
|
|
82
|
+
|
|
83
|
+
async def get_document_symbols(self, file_path: str):
|
|
84
|
+
self.calls.append(("get_document_symbols", file_path))
|
|
85
|
+
return self._symbols
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def _adapter(pool=None):
|
|
89
|
+
from victor_coding.lsp.framework_adapter import FrameworkLSPAdapter
|
|
90
|
+
|
|
91
|
+
return FrameworkLSPAdapter(pool or _MockPool())
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
class TestDiagnosticsConversion:
|
|
95
|
+
def test_severity_name_to_enum_and_line_zero_indexed(self):
|
|
96
|
+
adapter = _adapter()
|
|
97
|
+
diags = adapter.get_diagnostics("a.py")
|
|
98
|
+
assert len(diags) == 2
|
|
99
|
+
assert all(isinstance(d, Diagnostic) for d in diags)
|
|
100
|
+
# "error" -> ERROR(1), line 41 (1-indexed) -> 40
|
|
101
|
+
assert diags[0].severity == DiagnosticSeverity.ERROR
|
|
102
|
+
assert int(diags[0].severity) == 1
|
|
103
|
+
assert diags[0].range.start.line == 40
|
|
104
|
+
assert diags[0].range.start.character == 5
|
|
105
|
+
assert diags[0].message == "undefined name 'foo'"
|
|
106
|
+
assert diags[0].source == "pyright"
|
|
107
|
+
# "warning" -> WARNING(2)
|
|
108
|
+
assert diags[1].severity == DiagnosticSeverity.WARNING
|
|
109
|
+
assert int(diags[1].severity) == 2
|
|
110
|
+
assert diags[1].code == "F401"
|
|
111
|
+
|
|
112
|
+
def test_unknown_severity_defaults_to_error(self):
|
|
113
|
+
pool = _MockPool()
|
|
114
|
+
pool.get_diagnostics = lambda fp: [
|
|
115
|
+
{"line": 1, "character": 0, "message": "x", "severity": "bogus"}
|
|
116
|
+
]
|
|
117
|
+
diags = _adapter(pool).get_diagnostics("a.py")
|
|
118
|
+
assert diags[0].severity == DiagnosticSeverity.ERROR
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
class TestDocumentSymbols:
|
|
122
|
+
@pytest.mark.asyncio
|
|
123
|
+
async def test_symbols_returned_as_contracts_types(self):
|
|
124
|
+
pool = _MockPool(
|
|
125
|
+
symbols=[
|
|
126
|
+
_ds(
|
|
127
|
+
"SessionManager",
|
|
128
|
+
SymbolKind.CLASS,
|
|
129
|
+
detail="(store)",
|
|
130
|
+
children=[
|
|
131
|
+
_ds("__init__", SymbolKind.CONSTRUCTOR),
|
|
132
|
+
_ds("validate", SymbolKind.METHOD),
|
|
133
|
+
],
|
|
134
|
+
),
|
|
135
|
+
_ds("TOP_LEVEL_CONST", SymbolKind.CONSTANT),
|
|
136
|
+
]
|
|
137
|
+
)
|
|
138
|
+
symbols = await _adapter(pool).get_document_symbols("a.py")
|
|
139
|
+
assert len(symbols) == 2
|
|
140
|
+
assert all(isinstance(s, DocumentSymbol) for s in symbols)
|
|
141
|
+
# kind is an IntEnum — the framework reads it as int.
|
|
142
|
+
assert symbols[0].name == "SessionManager"
|
|
143
|
+
assert int(symbols[0].kind) == int(SymbolKind.CLASS)
|
|
144
|
+
assert symbols[0].detail == "(store)"
|
|
145
|
+
assert len(symbols[0].children) == 2
|
|
146
|
+
assert int(symbols[0].children[0].kind) == int(SymbolKind.CONSTRUCTOR)
|
|
147
|
+
|
|
148
|
+
@pytest.mark.asyncio
|
|
149
|
+
async def test_empty_symbols(self):
|
|
150
|
+
symbols = await _adapter().get_document_symbols("a.py")
|
|
151
|
+
assert symbols == []
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
class TestPassthrough:
|
|
155
|
+
@pytest.mark.asyncio
|
|
156
|
+
async def test_open_and_update_delegate_to_pool(self):
|
|
157
|
+
pool = _MockPool()
|
|
158
|
+
adapter = _adapter(pool)
|
|
159
|
+
assert await adapter.open_document("a.py", "x = 1") is True
|
|
160
|
+
assert await adapter.update_document("a.py", "x = 2") is True
|
|
161
|
+
adapter.close_document("a.py")
|
|
162
|
+
names = [c[0] for c in pool.calls]
|
|
163
|
+
assert names == ["open_document", "update_document", "close_document"]
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
class TestGetLspWiring:
|
|
167
|
+
def test_coding_assistant_get_lsp_returns_adapter(self):
|
|
168
|
+
from victor_coding.assistant import CodingAssistant
|
|
169
|
+
from victor_coding.lsp.framework_adapter import FrameworkLSPAdapter
|
|
170
|
+
|
|
171
|
+
cap = CodingAssistant.get_lsp()
|
|
172
|
+
assert isinstance(cap, FrameworkLSPAdapter)
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
class TestEndToEndActivation:
|
|
176
|
+
"""The real CodingAssistant flows through the framework's apply_lsp."""
|
|
177
|
+
|
|
178
|
+
def test_apply_lsp_wires_coding_assistant_capability(self):
|
|
179
|
+
from victor.framework.step_handlers import FrameworkStepHandler
|
|
180
|
+
|
|
181
|
+
from victor_coding.assistant import CodingAssistant
|
|
182
|
+
from victor_coding.lsp.framework_adapter import FrameworkLSPAdapter
|
|
183
|
+
|
|
184
|
+
class _Recorder:
|
|
185
|
+
def __init__(self) -> None:
|
|
186
|
+
self.set_calls: list = []
|
|
187
|
+
|
|
188
|
+
def set_lsp(self, capability) -> None:
|
|
189
|
+
self.set_calls.append(capability)
|
|
190
|
+
|
|
191
|
+
orch = _Recorder()
|
|
192
|
+
context = SimpleNamespace()
|
|
193
|
+
result = SimpleNamespace(add_info=lambda *a, **k: None, add_warning=lambda *a, **k: None)
|
|
194
|
+
|
|
195
|
+
FrameworkStepHandler().apply_lsp(orch, CodingAssistant, context, result)
|
|
196
|
+
|
|
197
|
+
assert len(orch.set_calls) == 1
|
|
198
|
+
assert isinstance(orch.set_calls[0], FrameworkLSPAdapter)
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# Copyright 2026 Vijaykumar Singh <vijay@anvaiops.com>
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
"""The graph tool and index shim must honor `.victor/graph_backend`.
|
|
16
|
+
|
|
17
|
+
Previously: the `graph` tool probed project.db's sqlite tables (dropping the
|
|
18
|
+
tool from the LLM schema on marker'd repos whose graph lives elsewhere) and
|
|
19
|
+
hardcoded SqliteGraphStore; the indexer accepted `graph_store_name` and
|
|
20
|
+
silently dropped it; the shim defaulted to sqlite. A repo flipped to another
|
|
21
|
+
backend got sqlite everywhere.
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
from pathlib import Path
|
|
25
|
+
|
|
26
|
+
from victor_coding.tools.graph_tool import (
|
|
27
|
+
_project_graph_has_data,
|
|
28
|
+
_resolved_graph_backend,
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def _mark(tmp_path: Path, backend: str) -> Path:
|
|
33
|
+
marker_dir = tmp_path / ".victor"
|
|
34
|
+
marker_dir.mkdir(exist_ok=True)
|
|
35
|
+
(marker_dir / "graph_backend").write_text(backend)
|
|
36
|
+
return tmp_path
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def test_resolved_backend_reads_marker(tmp_path: Path):
|
|
40
|
+
assert _resolved_graph_backend(tmp_path) == "sqlite"
|
|
41
|
+
_mark(tmp_path, "proxima")
|
|
42
|
+
assert _resolved_graph_backend(tmp_path) == "proxima"
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def test_has_data_advertises_tool_on_marked_repos(tmp_path: Path):
|
|
46
|
+
# A proxima-marked repo must not be probed via project.db's sqlite
|
|
47
|
+
# tables (which are legitimately empty there) — the tool stays
|
|
48
|
+
# advertised and the load path constructs the real store.
|
|
49
|
+
_mark(tmp_path, "proxima")
|
|
50
|
+
assert _project_graph_has_data(tmp_path) is True
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def test_shim_default_is_auto():
|
|
54
|
+
import inspect
|
|
55
|
+
|
|
56
|
+
from victor_coding.codebase.graph.registry import create_graph_store
|
|
57
|
+
|
|
58
|
+
sig = inspect.signature(create_graph_store)
|
|
59
|
+
assert sig.parameters["name"].default == "auto"
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def test_indexer_threads_graph_store_name():
|
|
63
|
+
import inspect
|
|
64
|
+
|
|
65
|
+
from victor_coding.codebase.indexer import CodebaseIndex
|
|
66
|
+
|
|
67
|
+
src = inspect.getsource(CodebaseIndex.__init__)
|
|
68
|
+
assert (
|
|
69
|
+
'name=graph_store_name or "auto"' in src
|
|
70
|
+
), "graph_store_name must reach create_graph_store, not be dropped"
|
|
@@ -74,7 +74,10 @@ _EXPORTS = {
|
|
|
74
74
|
"CodingPlugin": ("victor_coding.plugin", "CodingPlugin"),
|
|
75
75
|
"plugin": ("victor_coding.plugin", "plugin"),
|
|
76
76
|
"CodingMiddleware": ("victor_coding.middleware", "CodingMiddleware"),
|
|
77
|
-
"CodeCorrectionMiddleware": (
|
|
77
|
+
"CodeCorrectionMiddleware": (
|
|
78
|
+
"victor_coding.middleware",
|
|
79
|
+
"CodeCorrectionMiddleware",
|
|
80
|
+
),
|
|
78
81
|
"CodingSafetyExtension": ("victor_coding.safety", "CodingSafetyExtension"),
|
|
79
82
|
"EnhancedCodingSafetyExtension": (
|
|
80
83
|
"victor_coding.safety_enhanced",
|
|
@@ -87,10 +90,22 @@ _EXPORTS = {
|
|
|
87
90
|
"CodingSafetyRules": ("victor_coding.safety_enhanced", "CodingSafetyRules"),
|
|
88
91
|
"CodingContext": ("victor_coding.conversation_enhanced", "CodingContext"),
|
|
89
92
|
"CodingPromptContributor": ("victor_coding.prompts", "CodingPromptContributor"),
|
|
90
|
-
"CodingModeConfigProvider": (
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
93
|
+
"CodingModeConfigProvider": (
|
|
94
|
+
"victor_coding.mode_config",
|
|
95
|
+
"CodingModeConfigProvider",
|
|
96
|
+
),
|
|
97
|
+
"CodingServiceProvider": (
|
|
98
|
+
"victor_coding.service_provider",
|
|
99
|
+
"CodingServiceProvider",
|
|
100
|
+
),
|
|
101
|
+
"CodingCapabilityProvider": (
|
|
102
|
+
"victor_coding.capabilities",
|
|
103
|
+
"CodingCapabilityProvider",
|
|
104
|
+
),
|
|
105
|
+
"get_coding_capabilities": (
|
|
106
|
+
"victor_coding.capabilities",
|
|
107
|
+
"get_coding_capabilities",
|
|
108
|
+
),
|
|
94
109
|
"create_coding_capability_loader": (
|
|
95
110
|
"victor_coding.capabilities",
|
|
96
111
|
"create_coding_capability_loader",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2025 Vijaykumar Singh <
|
|
1
|
+
# Copyright 2025 Vijaykumar Singh <vijay@anvaiops.com>
|
|
2
2
|
#
|
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
4
|
# you may not use this file except in compliance with the License.
|
|
@@ -109,6 +109,31 @@ class CodingAssistant(VerticalBase):
|
|
|
109
109
|
|
|
110
110
|
return list(CODING_SKILLS)
|
|
111
111
|
|
|
112
|
+
@classmethod
|
|
113
|
+
def get_lsp(cls):
|
|
114
|
+
"""Expose victor-coding's LSP capability to the framework (FEP-0019).
|
|
115
|
+
|
|
116
|
+
Returns a ``FrameworkLSPAdapter`` over the shared ``LSPConnectionPool``.
|
|
117
|
+
The framework duck-types ``orchestrator.lsp``, and
|
|
118
|
+
``FrameworkStepHandler.apply_lsp`` routes this object to
|
|
119
|
+
``orchestrator.set_lsp`` during integration, activating the diagnostic
|
|
120
|
+
middleware (Phases 1+2) and the symbol-context provider (Phase 3).
|
|
121
|
+
Returns ``None`` if the pool/adapter cannot be built.
|
|
122
|
+
"""
|
|
123
|
+
try:
|
|
124
|
+
from victor_coding.lsp.framework_adapter import FrameworkLSPAdapter
|
|
125
|
+
from victor_coding.lsp.manager import get_lsp_manager
|
|
126
|
+
|
|
127
|
+
return FrameworkLSPAdapter(get_lsp_manager())
|
|
128
|
+
except Exception:
|
|
129
|
+
import logging
|
|
130
|
+
|
|
131
|
+
logging.getLogger(__name__).debug(
|
|
132
|
+
"victor-coding LSP capability unavailable; FEP-0019 chain stays dormant",
|
|
133
|
+
exc_info=True,
|
|
134
|
+
)
|
|
135
|
+
return None
|
|
136
|
+
|
|
112
137
|
# =========================================================================
|
|
113
138
|
# Phase 3: Framework Capabilities
|
|
114
139
|
# =========================================================================
|
|
@@ -224,14 +249,24 @@ You have access to 45+ tools. Use them efficiently to accomplish tasks."""
|
|
|
224
249
|
"INITIAL": StageDefinition(
|
|
225
250
|
name="INITIAL",
|
|
226
251
|
description="Understanding the coding request",
|
|
227
|
-
tools={
|
|
252
|
+
tools={
|
|
253
|
+
ToolNames.READ,
|
|
254
|
+
ToolNames.LS,
|
|
255
|
+
ToolNames.OVERVIEW,
|
|
256
|
+
ToolNames.GREP,
|
|
257
|
+
},
|
|
228
258
|
keywords=["what", "how", "explain", "where", "show me"],
|
|
229
259
|
next_stages={"PLANNING", "READING"},
|
|
230
260
|
),
|
|
231
261
|
"PLANNING": StageDefinition(
|
|
232
262
|
name="PLANNING",
|
|
233
263
|
description="Planning the implementation approach",
|
|
234
|
-
tools={
|
|
264
|
+
tools={
|
|
265
|
+
ToolNames.GREP,
|
|
266
|
+
ToolNames.PLAN,
|
|
267
|
+
ToolNames.OVERVIEW,
|
|
268
|
+
ToolNames.READ,
|
|
269
|
+
},
|
|
235
270
|
keywords=["plan", "approach", "design", "architecture", "strategy"],
|
|
236
271
|
next_stages={"READING", "EXECUTION"},
|
|
237
272
|
),
|
|
@@ -252,7 +287,12 @@ You have access to 45+ tools. Use them efficiently to accomplish tasks."""
|
|
|
252
287
|
"ANALYSIS": StageDefinition(
|
|
253
288
|
name="ANALYSIS",
|
|
254
289
|
description="Analyzing code structure and dependencies",
|
|
255
|
-
tools={
|
|
290
|
+
tools={
|
|
291
|
+
ToolNames.LSP,
|
|
292
|
+
ToolNames.SYMBOL,
|
|
293
|
+
ToolNames.REFS,
|
|
294
|
+
ToolNames.OVERVIEW,
|
|
295
|
+
},
|
|
256
296
|
keywords=["analyze", "review", "understand", "why", "how does"],
|
|
257
297
|
next_stages={"EXECUTION", "PLANNING"},
|
|
258
298
|
),
|