flextools-mcp 2.3.2__tar.gz → 2.4.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.
- {flextools_mcp-2.3.2/src/flextools_mcp.egg-info → flextools_mcp-2.4.0}/PKG-INFO +6 -2
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/README.md +2 -0
- flextools_mcp-2.4.0/VERSION +1 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/pyproject.toml +7 -2
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0/src/flextools_mcp.egg-info}/PKG-INFO +6 -2
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextools_mcp.egg-info/SOURCES.txt +15 -1
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextools_mcp.egg-info/requires.txt +3 -1
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/build_casting_index.py +3 -1
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/build_navigation_graph.py +5 -4
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/build_reverse_mapping.py +6 -5
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/config.py +14 -0
- flextools_mcp-2.4.0/src/flextoolsmcp/index/common_patterns_flexicon-v4.1.1.json +2866 -0
- flextools_mcp-2.4.0/src/flextoolsmcp/index/common_patterns_flexicon-v4.1.2.json +2866 -0
- flextools_mcp-2.3.2/src/flextoolsmcp/index/flexlibs/flexicon_api_v4.1.0.json → flextools_mcp-2.4.0/src/flextoolsmcp/index/flexlibs/flexicon_api_v4.1.2.json +105 -14
- flextools_mcp-2.4.0/src/flextoolsmcp/index/flexlibs/flexicon_lcm_bridge_v4.1.1.json +83642 -0
- flextools_mcp-2.4.0/src/flextoolsmcp/index/flexlibs/flexicon_lcm_bridge_v4.1.2.json +83642 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/index/flexlibs/flexlibs_api_v1.2.8.json +1 -1
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/index/liblcm/liblcm_api_v11.0.0.json +12 -7
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/index/reverse_mapping_liblcm-v11.0.0.json +16 -1
- flextools_mcp-2.4.0/src/flextoolsmcp/py.typed +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/response_utils.py +50 -14
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/server/handlers/admin.py +6 -8
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/server/handlers/execution.py +740 -109
- flextools_mcp-2.4.0/src/flextoolsmcp/server/handlers/op_telemetry.py +298 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/server/kernel.py +1 -1
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/server/models.py +8 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/server/project_discovery.py +49 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/server/response_keys.py +24 -1
- flextools_mcp-2.4.0/src/flextoolsmcp/server/response_models.py +352 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/server/session.py +102 -3
- flextools_mcp-2.4.0/src/flextoolsmcp/server/subprocess_helpers.py +131 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/server/tool_definitions.py +13 -1
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/server/validators.py +82 -1
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/server.py +33 -8
- flextools_mcp-2.4.0/tests/test_auto_fix.py +385 -0
- flextools_mcp-2.4.0/tests/test_issue42_session_identity.py +164 -0
- flextools_mcp-2.4.0/tests/test_issue47_auto_discovery.py +399 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/tests/test_mcp_tools.py +3 -1
- flextools_mcp-2.4.0/tests/test_op_telemetry.py +425 -0
- flextools_mcp-2.4.0/tests/test_response_contract.py +567 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/tests/test_script_certification.py +9 -0
- flextools_mcp-2.4.0/tests/test_startup_lock_sweep.py +111 -0
- flextools_mcp-2.4.0/tests/test_subprocess_tree_kill.py +136 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/tests/test_validator_casting_chains.py +9 -8
- flextools_mcp-2.4.0/tests/test_validator_cluster_fixes.py +403 -0
- flextools_mcp-2.3.2/VERSION +0 -1
- flextools_mcp-2.3.2/src/flextoolsmcp/server/subprocess_helpers.py +0 -80
- flextools_mcp-2.3.2/tests/test_validator_cluster_fixes.py +0 -171
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/LICENSE +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/MANIFEST.in +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/setup.cfg +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextools_mcp.egg-info/dependency_links.txt +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextools_mcp.egg-info/entry_points.txt +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextools_mcp.egg-info/top_level.txt +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/__init__.py +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/__main__.py +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/archive_old_versions.py +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/build_embeddings.py +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/casting_helpers.py +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/constants.py +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/extract_patterns.py +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/file_utils.py +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/flexicon_analyzer.py +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/index/casting_index_liblcm-v11.0.0.json +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/index/common_patterns_flexicon-v4.1.0.json +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/index/embeddings/embeddings.npy +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/index/embeddings/faiss.index +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/index/embeddings/metadata.json +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/index/flexlibs/flexicon_lcm_bridge_v4.1.0.json +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/index/flexlibs/flexlibs_lcm_bridge_v1.2.8.json +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/index/navigation_graph_liblcm-v11.0.0.json +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/json_utils.py +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/liblcm_extractor.py +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/refresh.py +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/server/__init__.py +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/server/constants.py +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/server/dispatch.py +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/server/handlers/__init__.py +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/server/handlers/_import_helper.py +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/server/handlers/api.py +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/server/handlers/catalog.py +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/server/handlers/discovery.py +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/server/handlers/equivalence.py +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/server/handlers/utils.py +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/server/headless_report.py +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/server/skeleton_storage.py +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/server/undo_subprocess.py +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/server/utils.py +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/server/versioning.py +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/src/flextoolsmcp/server/worked_examples.py +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/tests/test_async_locking.py +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/tests/test_canonical_intents.py +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/tests/test_cross_session_logging.py +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/tests/test_flexicon_operations.py +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/tests/test_flexicon_static_analysis.py +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/tests/test_info_message_cap.py +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/tests/test_project_discovery.py +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/tests/test_rejection_payloads.py +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/tests/test_retry_loop_detection.py +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/tests/test_skeleton_storage.py +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/tests/test_undo_wiring.py +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/tests/test_v1_3_0_upgrade.py +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/tests/test_validators.py +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/tests/test_version_detection.py +0 -0
- {flextools_mcp-2.3.2 → flextools_mcp-2.4.0}/tests/test_worked_examples.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: flextools-mcp
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.4.0
|
|
4
4
|
Summary: MCP server that gives AI assistants searchable LibLCM / FlexLibs / Flexicon API docs for writing FLExTools scripts.
|
|
5
5
|
Author-email: Matthew Lee <matthew_lee@sil.org>
|
|
6
6
|
License: MIT License
|
|
@@ -52,10 +52,12 @@ Requires-Dist: faiss-cpu>=1.7.4
|
|
|
52
52
|
Requires-Dist: pythonnet>=3.0.0
|
|
53
53
|
Requires-Dist: pydantic>=2.0.0
|
|
54
54
|
Requires-Dist: python-dotenv>=1.0.0
|
|
55
|
-
Requires-Dist: pyflexicon
|
|
55
|
+
Requires-Dist: pyflexicon<5,>=4.1
|
|
56
56
|
Provides-Extra: dev
|
|
57
57
|
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
58
58
|
Requires-Dist: pytest-asyncio>=0.21.0; extra == "dev"
|
|
59
|
+
Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
|
|
60
|
+
Requires-Dist: ruff>=0.4.0; extra == "dev"
|
|
59
61
|
Requires-Dist: pre-commit>=4.0.0; extra == "dev"
|
|
60
62
|
Dynamic: license-file
|
|
61
63
|
|
|
@@ -165,6 +167,8 @@ See [USAGE.md](USAGE.md) for workflows, tool reference, and examples.
|
|
|
165
167
|
|
|
166
168
|
### MCP Tools (16)
|
|
167
169
|
|
|
170
|
+
Tool responses follow a versioned envelope contract. See [docs/TOOL-CONTRACT.md](docs/TOOL-CONTRACT.md) for the full shape (success and error envelopes, all 16 error codes, and the deprecation timeline for the nested `error` object).
|
|
171
|
+
|
|
168
172
|
**Admin & Config:**
|
|
169
173
|
- `flextools_start` - Initialize session, set project and API mode
|
|
170
174
|
- `flextools_manage_config` - Get/set/delete persistent configuration
|
|
@@ -104,6 +104,8 @@ See [USAGE.md](USAGE.md) for workflows, tool reference, and examples.
|
|
|
104
104
|
|
|
105
105
|
### MCP Tools (16)
|
|
106
106
|
|
|
107
|
+
Tool responses follow a versioned envelope contract. See [docs/TOOL-CONTRACT.md](docs/TOOL-CONTRACT.md) for the full shape (success and error envelopes, all 16 error codes, and the deprecation timeline for the nested `error` object).
|
|
108
|
+
|
|
107
109
|
**Admin & Config:**
|
|
108
110
|
- `flextools_start` - Initialize session, set project and API mode
|
|
109
111
|
- `flextools_manage_config` - Get/set/delete persistent configuration
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
2.4.0
|
|
@@ -41,13 +41,15 @@ dependencies = [
|
|
|
41
41
|
"python-dotenv>=1.0.0",
|
|
42
42
|
# The deep FieldWorks wrapper the server generates scripts against. A floor
|
|
43
43
|
# (not a pin) so upgrading FLExToolsMCP re-resolves to the latest Flexicon.
|
|
44
|
-
"pyflexicon>=4.1
|
|
44
|
+
"pyflexicon>=4.1,<5",
|
|
45
45
|
]
|
|
46
46
|
|
|
47
47
|
[project.optional-dependencies]
|
|
48
48
|
dev = [
|
|
49
49
|
"pytest>=7.0.0",
|
|
50
50
|
"pytest-asyncio>=0.21.0",
|
|
51
|
+
"pytest-cov>=4.0.0",
|
|
52
|
+
"ruff>=0.4.0",
|
|
51
53
|
"pre-commit>=4.0.0",
|
|
52
54
|
]
|
|
53
55
|
|
|
@@ -75,4 +77,7 @@ where = ["src"]
|
|
|
75
77
|
# The indexed API documentation is bundled as package data so it is available
|
|
76
78
|
# after `pip install` / `uvx` with no separate download.
|
|
77
79
|
[tool.setuptools.package-data]
|
|
78
|
-
flextoolsmcp = ["index/**/*", "VERSION"]
|
|
80
|
+
flextoolsmcp = ["index/**/*", "VERSION", "py.typed"]
|
|
81
|
+
|
|
82
|
+
[tool.ruff.lint]
|
|
83
|
+
select = ["E9", "F63", "F7", "F82"]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: flextools-mcp
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.4.0
|
|
4
4
|
Summary: MCP server that gives AI assistants searchable LibLCM / FlexLibs / Flexicon API docs for writing FLExTools scripts.
|
|
5
5
|
Author-email: Matthew Lee <matthew_lee@sil.org>
|
|
6
6
|
License: MIT License
|
|
@@ -52,10 +52,12 @@ Requires-Dist: faiss-cpu>=1.7.4
|
|
|
52
52
|
Requires-Dist: pythonnet>=3.0.0
|
|
53
53
|
Requires-Dist: pydantic>=2.0.0
|
|
54
54
|
Requires-Dist: python-dotenv>=1.0.0
|
|
55
|
-
Requires-Dist: pyflexicon
|
|
55
|
+
Requires-Dist: pyflexicon<5,>=4.1
|
|
56
56
|
Provides-Extra: dev
|
|
57
57
|
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
58
58
|
Requires-Dist: pytest-asyncio>=0.21.0; extra == "dev"
|
|
59
|
+
Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
|
|
60
|
+
Requires-Dist: ruff>=0.4.0; extra == "dev"
|
|
59
61
|
Requires-Dist: pre-commit>=4.0.0; extra == "dev"
|
|
60
62
|
Dynamic: license-file
|
|
61
63
|
|
|
@@ -165,6 +167,8 @@ See [USAGE.md](USAGE.md) for workflows, tool reference, and examples.
|
|
|
165
167
|
|
|
166
168
|
### MCP Tools (16)
|
|
167
169
|
|
|
170
|
+
Tool responses follow a versioned envelope contract. See [docs/TOOL-CONTRACT.md](docs/TOOL-CONTRACT.md) for the full shape (success and error envelopes, all 16 error codes, and the deprecation timeline for the nested `error` object).
|
|
171
|
+
|
|
168
172
|
**Admin & Config:**
|
|
169
173
|
- `flextools_start` - Initialize session, set project and API mode
|
|
170
174
|
- `flextools_manage_config` - Get/set/delete persistent configuration
|
|
@@ -24,18 +24,23 @@ src/flextoolsmcp/file_utils.py
|
|
|
24
24
|
src/flextoolsmcp/flexicon_analyzer.py
|
|
25
25
|
src/flextoolsmcp/json_utils.py
|
|
26
26
|
src/flextoolsmcp/liblcm_extractor.py
|
|
27
|
+
src/flextoolsmcp/py.typed
|
|
27
28
|
src/flextoolsmcp/refresh.py
|
|
28
29
|
src/flextoolsmcp/response_utils.py
|
|
29
30
|
src/flextoolsmcp/server.py
|
|
30
31
|
src/flextoolsmcp/index/casting_index_liblcm-v11.0.0.json
|
|
31
32
|
src/flextoolsmcp/index/common_patterns_flexicon-v4.1.0.json
|
|
33
|
+
src/flextoolsmcp/index/common_patterns_flexicon-v4.1.1.json
|
|
34
|
+
src/flextoolsmcp/index/common_patterns_flexicon-v4.1.2.json
|
|
32
35
|
src/flextoolsmcp/index/navigation_graph_liblcm-v11.0.0.json
|
|
33
36
|
src/flextoolsmcp/index/reverse_mapping_liblcm-v11.0.0.json
|
|
34
37
|
src/flextoolsmcp/index/embeddings/embeddings.npy
|
|
35
38
|
src/flextoolsmcp/index/embeddings/faiss.index
|
|
36
39
|
src/flextoolsmcp/index/embeddings/metadata.json
|
|
37
|
-
src/flextoolsmcp/index/flexlibs/flexicon_api_v4.1.
|
|
40
|
+
src/flextoolsmcp/index/flexlibs/flexicon_api_v4.1.2.json
|
|
38
41
|
src/flextoolsmcp/index/flexlibs/flexicon_lcm_bridge_v4.1.0.json
|
|
42
|
+
src/flextoolsmcp/index/flexlibs/flexicon_lcm_bridge_v4.1.1.json
|
|
43
|
+
src/flextoolsmcp/index/flexlibs/flexicon_lcm_bridge_v4.1.2.json
|
|
39
44
|
src/flextoolsmcp/index/flexlibs/flexlibs_api_v1.2.8.json
|
|
40
45
|
src/flextoolsmcp/index/flexlibs/flexlibs_lcm_bridge_v1.2.8.json
|
|
41
46
|
src/flextoolsmcp/index/liblcm/liblcm_api_v11.0.0.json
|
|
@@ -47,6 +52,7 @@ src/flextoolsmcp/server/kernel.py
|
|
|
47
52
|
src/flextoolsmcp/server/models.py
|
|
48
53
|
src/flextoolsmcp/server/project_discovery.py
|
|
49
54
|
src/flextoolsmcp/server/response_keys.py
|
|
55
|
+
src/flextoolsmcp/server/response_models.py
|
|
50
56
|
src/flextoolsmcp/server/session.py
|
|
51
57
|
src/flextoolsmcp/server/skeleton_storage.py
|
|
52
58
|
src/flextoolsmcp/server/subprocess_helpers.py
|
|
@@ -64,19 +70,27 @@ src/flextoolsmcp/server/handlers/catalog.py
|
|
|
64
70
|
src/flextoolsmcp/server/handlers/discovery.py
|
|
65
71
|
src/flextoolsmcp/server/handlers/equivalence.py
|
|
66
72
|
src/flextoolsmcp/server/handlers/execution.py
|
|
73
|
+
src/flextoolsmcp/server/handlers/op_telemetry.py
|
|
67
74
|
src/flextoolsmcp/server/handlers/utils.py
|
|
68
75
|
tests/test_async_locking.py
|
|
76
|
+
tests/test_auto_fix.py
|
|
69
77
|
tests/test_canonical_intents.py
|
|
70
78
|
tests/test_cross_session_logging.py
|
|
71
79
|
tests/test_flexicon_operations.py
|
|
72
80
|
tests/test_flexicon_static_analysis.py
|
|
73
81
|
tests/test_info_message_cap.py
|
|
82
|
+
tests/test_issue42_session_identity.py
|
|
83
|
+
tests/test_issue47_auto_discovery.py
|
|
74
84
|
tests/test_mcp_tools.py
|
|
85
|
+
tests/test_op_telemetry.py
|
|
75
86
|
tests/test_project_discovery.py
|
|
76
87
|
tests/test_rejection_payloads.py
|
|
88
|
+
tests/test_response_contract.py
|
|
77
89
|
tests/test_retry_loop_detection.py
|
|
78
90
|
tests/test_script_certification.py
|
|
79
91
|
tests/test_skeleton_storage.py
|
|
92
|
+
tests/test_startup_lock_sweep.py
|
|
93
|
+
tests/test_subprocess_tree_kill.py
|
|
80
94
|
tests/test_undo_wiring.py
|
|
81
95
|
tests/test_v1_3_0_upgrade.py
|
|
82
96
|
tests/test_validator_casting_chains.py
|
|
@@ -20,8 +20,10 @@ from datetime import datetime, timezone
|
|
|
20
20
|
|
|
21
21
|
if __package__:
|
|
22
22
|
from .json_utils import sort_json_arrays
|
|
23
|
+
from .file_utils import get_index_dir
|
|
23
24
|
else:
|
|
24
25
|
from json_utils import sort_json_arrays
|
|
26
|
+
from file_utils import get_index_dir
|
|
25
27
|
|
|
26
28
|
|
|
27
29
|
# ============================================================
|
|
@@ -244,7 +246,7 @@ def find_latest_liblcm(liblcm_dir: Path) -> Optional[Tuple[Path, str]]:
|
|
|
244
246
|
|
|
245
247
|
def main():
|
|
246
248
|
"""Build and save the casting index."""
|
|
247
|
-
index_dir =
|
|
249
|
+
index_dir = get_index_dir()
|
|
248
250
|
liblcm_dir = index_dir / "liblcm"
|
|
249
251
|
|
|
250
252
|
# Find latest LibLCM version
|
|
@@ -21,10 +21,10 @@ from typing import Dict, List, Any, Set, Tuple, Optional
|
|
|
21
21
|
|
|
22
22
|
if __package__:
|
|
23
23
|
from .json_utils import sort_json_arrays
|
|
24
|
-
from .file_utils import get_project_root, load_json, save_json
|
|
24
|
+
from .file_utils import get_project_root, get_index_dir, load_json, save_json
|
|
25
25
|
else:
|
|
26
26
|
from json_utils import sort_json_arrays
|
|
27
|
-
from file_utils import get_project_root, load_json, save_json
|
|
27
|
+
from file_utils import get_project_root, get_index_dir, load_json, save_json
|
|
28
28
|
|
|
29
29
|
|
|
30
30
|
# ============================================================
|
|
@@ -389,7 +389,8 @@ def main():
|
|
|
389
389
|
args = parser.parse_args()
|
|
390
390
|
|
|
391
391
|
root = get_project_root()
|
|
392
|
-
|
|
392
|
+
index_dir = get_index_dir()
|
|
393
|
+
liblcm_dir = index_dir / "liblcm"
|
|
393
394
|
|
|
394
395
|
# Find latest LibLCM version
|
|
395
396
|
liblcm_path, liblcm_version = find_latest_liblcm(liblcm_dir)
|
|
@@ -403,7 +404,7 @@ def main():
|
|
|
403
404
|
output_path = root / args.output
|
|
404
405
|
else:
|
|
405
406
|
output_filename = f"navigation_graph_liblcm-v{liblcm_version}.json"
|
|
406
|
-
output_path =
|
|
407
|
+
output_path = index_dir / output_filename
|
|
407
408
|
|
|
408
409
|
# Build navigation graph
|
|
409
410
|
result = build_navigation_graph(liblcm_path)
|
|
@@ -25,11 +25,11 @@ from typing import Dict, List, Any, Set, Tuple, Optional
|
|
|
25
25
|
if __package__:
|
|
26
26
|
from .json_utils import sort_json_arrays
|
|
27
27
|
from .server.versioning import find_latest_versioned_api_file
|
|
28
|
-
from .file_utils import get_project_root, load_json, save_json
|
|
28
|
+
from .file_utils import get_project_root, get_index_dir, load_json, save_json
|
|
29
29
|
else:
|
|
30
30
|
from json_utils import sort_json_arrays
|
|
31
31
|
from server.versioning import find_latest_versioned_api_file
|
|
32
|
-
from file_utils import get_project_root, load_json, save_json
|
|
32
|
+
from file_utils import get_project_root, get_index_dir, load_json, save_json
|
|
33
33
|
|
|
34
34
|
|
|
35
35
|
# ============================================================
|
|
@@ -392,8 +392,9 @@ def main():
|
|
|
392
392
|
args = parser.parse_args()
|
|
393
393
|
|
|
394
394
|
root = get_project_root()
|
|
395
|
-
|
|
396
|
-
|
|
395
|
+
index_dir = get_index_dir()
|
|
396
|
+
flexlibs_dir = index_dir / "flexlibs"
|
|
397
|
+
liblcm_dir = index_dir / "liblcm"
|
|
397
398
|
|
|
398
399
|
# Find latest versioned API files
|
|
399
400
|
flexicon_path = find_latest_versioned_api_file(flexlibs_dir, "flexicon_api")
|
|
@@ -416,7 +417,7 @@ def main():
|
|
|
416
417
|
if version_match:
|
|
417
418
|
liblcm_version = version_match.group(1)
|
|
418
419
|
output_filename = f"reverse_mapping_liblcm-v{liblcm_version}.json"
|
|
419
|
-
output_path =
|
|
420
|
+
output_path = index_dir / output_filename
|
|
420
421
|
else:
|
|
421
422
|
output_path = root / args.output
|
|
422
423
|
|
|
@@ -19,6 +19,20 @@ from typing import Any, Dict, Optional
|
|
|
19
19
|
CONFIG_DIR = Path.home() / ".flextoolsmcp"
|
|
20
20
|
CONFIG_FILE = CONFIG_DIR / "config.json"
|
|
21
21
|
|
|
22
|
+
# ---------------------------------------------------------------------------
|
|
23
|
+
# Issue #46: Auto-fix kill switch
|
|
24
|
+
#
|
|
25
|
+
# auto_fix_enabled (dotted key "auto_fix_enabled") controls whether the server
|
|
26
|
+
# will attempt safe auto-apply of CASTING rewrites and TYPO corrections on
|
|
27
|
+
# read-only runs BEFORE rejecting the code. Write runs ALWAYS skip auto-fix.
|
|
28
|
+
#
|
|
29
|
+
# Default: True (on for read-only runs as per issue #46 spec).
|
|
30
|
+
# Override via: config_set("auto_fix_enabled", False) # disable globally
|
|
31
|
+
# RunModuleInput.auto_fix=True/False # per-call override
|
|
32
|
+
# ---------------------------------------------------------------------------
|
|
33
|
+
AUTO_FIX_ENABLED_KEY = "auto_fix_enabled"
|
|
34
|
+
AUTO_FIX_ENABLED_DEFAULT = True # on by default for read-only runs
|
|
35
|
+
|
|
22
36
|
# In-memory cache (loaded on first call, cleared on flush)
|
|
23
37
|
_config_cache: Optional[Dict[str, Any]] = None
|
|
24
38
|
|