scitex 2.14.0__py3-none-any.whl → 2.15.3__py3-none-any.whl
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.
- scitex/__init__.py +71 -17
- scitex/_env_loader.py +156 -0
- scitex/_mcp_resources/__init__.py +37 -0
- scitex/_mcp_resources/_cheatsheet.py +135 -0
- scitex/_mcp_resources/_figrecipe.py +138 -0
- scitex/_mcp_resources/_formats.py +102 -0
- scitex/_mcp_resources/_modules.py +337 -0
- scitex/_mcp_resources/_session.py +149 -0
- scitex/_mcp_tools/__init__.py +4 -0
- scitex/_mcp_tools/audio.py +66 -0
- scitex/_mcp_tools/diagram.py +11 -95
- scitex/_mcp_tools/introspect.py +210 -0
- scitex/_mcp_tools/plt.py +260 -305
- scitex/_mcp_tools/scholar.py +74 -0
- scitex/_mcp_tools/social.py +27 -0
- scitex/_mcp_tools/template.py +24 -0
- scitex/_mcp_tools/writer.py +17 -210
- scitex/ai/_gen_ai/_PARAMS.py +10 -7
- scitex/ai/classification/reporters/_SingleClassificationReporter.py +45 -1603
- scitex/ai/classification/reporters/_mixins/__init__.py +36 -0
- scitex/ai/classification/reporters/_mixins/_constants.py +67 -0
- scitex/ai/classification/reporters/_mixins/_cv_summary.py +387 -0
- scitex/ai/classification/reporters/_mixins/_feature_importance.py +119 -0
- scitex/ai/classification/reporters/_mixins/_metrics.py +275 -0
- scitex/ai/classification/reporters/_mixins/_plotting.py +179 -0
- scitex/ai/classification/reporters/_mixins/_reports.py +153 -0
- scitex/ai/classification/reporters/_mixins/_storage.py +160 -0
- scitex/ai/classification/timeseries/_TimeSeriesSlidingWindowSplit.py +30 -1550
- scitex/ai/classification/timeseries/_sliding_window_core.py +467 -0
- scitex/ai/classification/timeseries/_sliding_window_plotting.py +369 -0
- scitex/audio/README.md +40 -36
- scitex/audio/__init__.py +129 -61
- scitex/audio/_branding.py +185 -0
- scitex/audio/_mcp/__init__.py +32 -0
- scitex/audio/_mcp/handlers.py +59 -6
- scitex/audio/_mcp/speak_handlers.py +238 -0
- scitex/audio/_relay.py +225 -0
- scitex/audio/_tts.py +18 -10
- scitex/audio/engines/base.py +17 -10
- scitex/audio/engines/elevenlabs_engine.py +7 -2
- scitex/audio/mcp_server.py +228 -75
- scitex/canvas/README.md +1 -1
- scitex/canvas/editor/_dearpygui/__init__.py +25 -0
- scitex/canvas/editor/_dearpygui/_editor.py +147 -0
- scitex/canvas/editor/_dearpygui/_handlers.py +476 -0
- scitex/canvas/editor/_dearpygui/_panels/__init__.py +17 -0
- scitex/canvas/editor/_dearpygui/_panels/_control.py +119 -0
- scitex/canvas/editor/_dearpygui/_panels/_element_controls.py +190 -0
- scitex/canvas/editor/_dearpygui/_panels/_preview.py +43 -0
- scitex/canvas/editor/_dearpygui/_panels/_sections.py +390 -0
- scitex/canvas/editor/_dearpygui/_plotting.py +187 -0
- scitex/canvas/editor/_dearpygui/_rendering.py +504 -0
- scitex/canvas/editor/_dearpygui/_selection.py +295 -0
- scitex/canvas/editor/_dearpygui/_state.py +93 -0
- scitex/canvas/editor/_dearpygui/_utils.py +61 -0
- scitex/canvas/editor/flask_editor/_core/__init__.py +27 -0
- scitex/canvas/editor/flask_editor/_core/_bbox_extraction.py +200 -0
- scitex/canvas/editor/flask_editor/_core/_editor.py +173 -0
- scitex/canvas/editor/flask_editor/_core/_export_helpers.py +353 -0
- scitex/canvas/editor/flask_editor/_core/_routes_basic.py +190 -0
- scitex/canvas/editor/flask_editor/_core/_routes_export.py +332 -0
- scitex/canvas/editor/flask_editor/_core/_routes_panels.py +252 -0
- scitex/canvas/editor/flask_editor/_core/_routes_save.py +218 -0
- scitex/canvas/editor/flask_editor/_core.py +25 -1684
- scitex/canvas/editor/flask_editor/templates/__init__.py +32 -70
- scitex/cli/__init__.py +38 -43
- scitex/cli/audio.py +160 -41
- scitex/cli/capture.py +133 -20
- scitex/cli/introspect.py +488 -0
- scitex/cli/main.py +200 -109
- scitex/cli/mcp.py +60 -34
- scitex/cli/plt.py +414 -0
- scitex/cli/repro.py +15 -8
- scitex/cli/resource.py +15 -8
- scitex/cli/scholar/__init__.py +154 -8
- scitex/cli/scholar/_crossref_scitex.py +296 -0
- scitex/cli/scholar/_fetch.py +25 -3
- scitex/cli/social.py +355 -0
- scitex/cli/stats.py +136 -11
- scitex/cli/template.py +129 -12
- scitex/cli/tex.py +15 -8
- scitex/cli/writer.py +49 -299
- scitex/cloud/__init__.py +41 -2
- scitex/config/README.md +1 -1
- scitex/config/__init__.py +16 -2
- scitex/config/_env_registry.py +256 -0
- scitex/context/__init__.py +22 -0
- scitex/dev/__init__.py +20 -1
- scitex/diagram/__init__.py +42 -19
- scitex/diagram/mcp_server.py +13 -125
- scitex/gen/__init__.py +50 -14
- scitex/gen/_list_packages.py +4 -4
- scitex/introspect/__init__.py +82 -0
- scitex/introspect/_call_graph.py +303 -0
- scitex/introspect/_class_hierarchy.py +163 -0
- scitex/introspect/_core.py +41 -0
- scitex/introspect/_docstring.py +131 -0
- scitex/introspect/_examples.py +113 -0
- scitex/introspect/_imports.py +271 -0
- scitex/{gen/_inspect_module.py → introspect/_list_api.py} +48 -56
- scitex/introspect/_mcp/__init__.py +41 -0
- scitex/introspect/_mcp/handlers.py +233 -0
- scitex/introspect/_members.py +155 -0
- scitex/introspect/_resolve.py +89 -0
- scitex/introspect/_signature.py +131 -0
- scitex/introspect/_source.py +80 -0
- scitex/introspect/_type_hints.py +172 -0
- scitex/io/_save.py +1 -2
- scitex/io/bundle/README.md +1 -1
- scitex/logging/_formatters.py +19 -9
- scitex/mcp_server.py +98 -5
- scitex/os/__init__.py +4 -0
- scitex/{gen → os}/_check_host.py +4 -5
- scitex/plt/__init__.py +245 -550
- scitex/plt/_subplots/_AxisWrapperMixins/_SeabornMixin/_wrappers.py +5 -10
- scitex/plt/docs/EXTERNAL_PACKAGE_BRANDING.md +149 -0
- scitex/plt/gallery/README.md +1 -1
- scitex/plt/utils/_hitmap/__init__.py +82 -0
- scitex/plt/utils/_hitmap/_artist_extraction.py +343 -0
- scitex/plt/utils/_hitmap/_color_application.py +346 -0
- scitex/plt/utils/_hitmap/_color_conversion.py +121 -0
- scitex/plt/utils/_hitmap/_constants.py +40 -0
- scitex/plt/utils/_hitmap/_hitmap_core.py +334 -0
- scitex/plt/utils/_hitmap/_path_extraction.py +357 -0
- scitex/plt/utils/_hitmap/_query.py +113 -0
- scitex/plt/utils/_hitmap.py +46 -1616
- scitex/plt/utils/_metadata/__init__.py +80 -0
- scitex/plt/utils/_metadata/_artists/__init__.py +25 -0
- scitex/plt/utils/_metadata/_artists/_base.py +195 -0
- scitex/plt/utils/_metadata/_artists/_collections.py +356 -0
- scitex/plt/utils/_metadata/_artists/_extract.py +57 -0
- scitex/plt/utils/_metadata/_artists/_images.py +80 -0
- scitex/plt/utils/_metadata/_artists/_lines.py +261 -0
- scitex/plt/utils/_metadata/_artists/_patches.py +247 -0
- scitex/plt/utils/_metadata/_artists/_text.py +106 -0
- scitex/plt/utils/_metadata/_csv.py +416 -0
- scitex/plt/utils/_metadata/_detect.py +225 -0
- scitex/plt/utils/_metadata/_legend.py +127 -0
- scitex/plt/utils/_metadata/_rounding.py +117 -0
- scitex/plt/utils/_metadata/_verification.py +202 -0
- scitex/schema/README.md +1 -1
- scitex/scholar/__init__.py +8 -0
- scitex/scholar/_mcp/crossref_handlers.py +265 -0
- scitex/scholar/core/Scholar.py +63 -1700
- scitex/scholar/core/_mixins/__init__.py +36 -0
- scitex/scholar/core/_mixins/_enrichers.py +270 -0
- scitex/scholar/core/_mixins/_library_handlers.py +100 -0
- scitex/scholar/core/_mixins/_loaders.py +103 -0
- scitex/scholar/core/_mixins/_pdf_download.py +375 -0
- scitex/scholar/core/_mixins/_pipeline.py +312 -0
- scitex/scholar/core/_mixins/_project_handlers.py +125 -0
- scitex/scholar/core/_mixins/_savers.py +69 -0
- scitex/scholar/core/_mixins/_search.py +103 -0
- scitex/scholar/core/_mixins/_services.py +88 -0
- scitex/scholar/core/_mixins/_url_finding.py +105 -0
- scitex/scholar/crossref_scitex.py +367 -0
- scitex/scholar/docs/EXTERNAL_PACKAGE_BRANDING.md +149 -0
- scitex/scholar/examples/00_run_all.sh +120 -0
- scitex/scholar/jobs/_executors.py +27 -3
- scitex/scholar/pdf_download/ScholarPDFDownloader.py +38 -416
- scitex/scholar/pdf_download/_cli.py +154 -0
- scitex/scholar/pdf_download/strategies/__init__.py +11 -8
- scitex/scholar/pdf_download/strategies/manual_download_fallback.py +80 -3
- scitex/scholar/pipelines/ScholarPipelineBibTeX.py +73 -121
- scitex/scholar/pipelines/ScholarPipelineParallel.py +80 -138
- scitex/scholar/pipelines/ScholarPipelineSingle.py +43 -63
- scitex/scholar/pipelines/_single_steps.py +71 -36
- scitex/scholar/storage/_LibraryManager.py +97 -1695
- scitex/scholar/storage/_mixins/__init__.py +30 -0
- scitex/scholar/storage/_mixins/_bibtex_handlers.py +128 -0
- scitex/scholar/storage/_mixins/_library_operations.py +218 -0
- scitex/scholar/storage/_mixins/_metadata_conversion.py +226 -0
- scitex/scholar/storage/_mixins/_paper_saving.py +456 -0
- scitex/scholar/storage/_mixins/_resolution.py +376 -0
- scitex/scholar/storage/_mixins/_storage_helpers.py +121 -0
- scitex/scholar/storage/_mixins/_symlink_handlers.py +226 -0
- scitex/security/README.md +3 -3
- scitex/session/README.md +1 -1
- scitex/session/__init__.py +26 -7
- scitex/session/_decorator.py +1 -1
- scitex/sh/README.md +1 -1
- scitex/sh/__init__.py +7 -4
- scitex/social/__init__.py +155 -0
- scitex/social/docs/EXTERNAL_PACKAGE_BRANDING.md +149 -0
- scitex/stats/_mcp/_handlers/__init__.py +31 -0
- scitex/stats/_mcp/_handlers/_corrections.py +113 -0
- scitex/stats/_mcp/_handlers/_descriptive.py +78 -0
- scitex/stats/_mcp/_handlers/_effect_size.py +106 -0
- scitex/stats/_mcp/_handlers/_format.py +94 -0
- scitex/stats/_mcp/_handlers/_normality.py +110 -0
- scitex/stats/_mcp/_handlers/_posthoc.py +224 -0
- scitex/stats/_mcp/_handlers/_power.py +247 -0
- scitex/stats/_mcp/_handlers/_recommend.py +102 -0
- scitex/stats/_mcp/_handlers/_run_test.py +279 -0
- scitex/stats/_mcp/_handlers/_stars.py +48 -0
- scitex/stats/_mcp/handlers.py +19 -1171
- scitex/stats/auto/_stat_style.py +175 -0
- scitex/stats/auto/_style_definitions.py +411 -0
- scitex/stats/auto/_styles.py +22 -620
- scitex/stats/descriptive/__init__.py +11 -8
- scitex/stats/descriptive/_ci.py +39 -0
- scitex/stats/power/_power.py +15 -4
- scitex/str/__init__.py +2 -1
- scitex/str/_title_case.py +63 -0
- scitex/template/README.md +1 -1
- scitex/template/__init__.py +25 -10
- scitex/template/_code_templates.py +147 -0
- scitex/template/_mcp/handlers.py +81 -0
- scitex/template/_mcp/tool_schemas.py +55 -0
- scitex/template/_templates/__init__.py +51 -0
- scitex/template/_templates/audio.py +233 -0
- scitex/template/_templates/canvas.py +312 -0
- scitex/template/_templates/capture.py +268 -0
- scitex/template/_templates/config.py +43 -0
- scitex/template/_templates/diagram.py +294 -0
- scitex/template/_templates/io.py +107 -0
- scitex/template/_templates/module.py +53 -0
- scitex/template/_templates/plt.py +202 -0
- scitex/template/_templates/scholar.py +267 -0
- scitex/template/_templates/session.py +130 -0
- scitex/template/_templates/session_minimal.py +43 -0
- scitex/template/_templates/session_plot.py +67 -0
- scitex/template/_templates/session_stats.py +77 -0
- scitex/template/_templates/stats.py +323 -0
- scitex/template/_templates/writer.py +296 -0
- scitex/template/clone_writer_directory.py +5 -5
- scitex/ui/_backends/_email.py +10 -2
- scitex/ui/_backends/_webhook.py +5 -1
- scitex/web/_search_pubmed.py +10 -6
- scitex/writer/README.md +1 -1
- scitex/writer/__init__.py +43 -34
- scitex/writer/_mcp/handlers.py +11 -744
- scitex/writer/_mcp/tool_schemas.py +5 -335
- scitex-2.15.3.dist-info/METADATA +667 -0
- {scitex-2.14.0.dist-info → scitex-2.15.3.dist-info}/RECORD +241 -120
- scitex/canvas/editor/flask_editor/templates/_scripts.py +0 -4933
- scitex/canvas/editor/flask_editor/templates/_styles.py +0 -1658
- scitex/diagram/_compile.py +0 -312
- scitex/diagram/_diagram.py +0 -355
- scitex/diagram/_mcp/__init__.py +0 -4
- scitex/diagram/_mcp/handlers.py +0 -400
- scitex/diagram/_mcp/tool_schemas.py +0 -157
- scitex/diagram/_presets.py +0 -173
- scitex/diagram/_schema.py +0 -182
- scitex/diagram/_split.py +0 -278
- scitex/gen/_ci.py +0 -12
- scitex/gen/_title_case.py +0 -89
- scitex/plt/_mcp/__init__.py +0 -4
- scitex/plt/_mcp/_handlers_annotation.py +0 -102
- scitex/plt/_mcp/_handlers_figure.py +0 -195
- scitex/plt/_mcp/_handlers_plot.py +0 -252
- scitex/plt/_mcp/_handlers_style.py +0 -219
- scitex/plt/_mcp/handlers.py +0 -74
- scitex/plt/_mcp/tool_schemas.py +0 -497
- scitex/plt/mcp_server.py +0 -231
- scitex/scholar/examples/SUGGESTIONS.md +0 -865
- scitex/scholar/examples/dev.py +0 -38
- scitex-2.14.0.dist-info/METADATA +0 -1238
- /scitex/{gen → context}/_detect_environment.py +0 -0
- /scitex/{gen → context}/_get_notebook_path.py +0 -0
- /scitex/{gen/_shell.py → sh/_shell_legacy.py} +0 -0
- {scitex-2.14.0.dist-info → scitex-2.15.3.dist-info}/WHEEL +0 -0
- {scitex-2.14.0.dist-info → scitex-2.15.3.dist-info}/entry_points.txt +0 -0
- {scitex-2.14.0.dist-info → scitex-2.15.3.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# Timestamp: 2025-01-20
|
|
3
|
+
# File: /home/ywatanabe/proj/scitex-code/src/scitex/_mcp_tools/introspect.py
|
|
4
|
+
|
|
5
|
+
"""Introspection module tools for FastMCP unified server."""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
import json
|
|
10
|
+
from typing import Optional
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def _json(data: dict) -> str:
|
|
14
|
+
return json.dumps(data, indent=2, default=str)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def register_introspect_tools(mcp) -> None:
|
|
18
|
+
"""Register introspection tools with FastMCP server."""
|
|
19
|
+
# IPython-style tools (primary)
|
|
20
|
+
|
|
21
|
+
@mcp.tool()
|
|
22
|
+
async def introspect_q(
|
|
23
|
+
dotted_path: str,
|
|
24
|
+
include_defaults: bool = True,
|
|
25
|
+
include_annotations: bool = True,
|
|
26
|
+
) -> str:
|
|
27
|
+
"""[introspect] Get function/class signature (like IPython's func?)."""
|
|
28
|
+
from scitex.introspect._mcp.handlers import q_handler
|
|
29
|
+
|
|
30
|
+
result = await q_handler(
|
|
31
|
+
dotted_path=dotted_path,
|
|
32
|
+
include_defaults=include_defaults,
|
|
33
|
+
include_annotations=include_annotations,
|
|
34
|
+
)
|
|
35
|
+
return _json(result)
|
|
36
|
+
|
|
37
|
+
@mcp.tool()
|
|
38
|
+
async def introspect_qq(
|
|
39
|
+
dotted_path: str,
|
|
40
|
+
max_lines: Optional[int] = None,
|
|
41
|
+
include_decorators: bool = True,
|
|
42
|
+
) -> str:
|
|
43
|
+
"""[introspect] Get source code of a Python object (like IPython's func??)."""
|
|
44
|
+
from scitex.introspect._mcp.handlers import qq_handler
|
|
45
|
+
|
|
46
|
+
result = await qq_handler(
|
|
47
|
+
dotted_path=dotted_path,
|
|
48
|
+
max_lines=max_lines,
|
|
49
|
+
include_decorators=include_decorators,
|
|
50
|
+
)
|
|
51
|
+
return _json(result)
|
|
52
|
+
|
|
53
|
+
@mcp.tool()
|
|
54
|
+
async def introspect_dir(
|
|
55
|
+
dotted_path: str,
|
|
56
|
+
filter: str = "public",
|
|
57
|
+
kind: Optional[str] = None,
|
|
58
|
+
include_inherited: bool = False,
|
|
59
|
+
) -> str:
|
|
60
|
+
"""[introspect] List members of module/class (like dir()). filter: all|public|private|dunder."""
|
|
61
|
+
from scitex.introspect._mcp.handlers import dir_handler
|
|
62
|
+
|
|
63
|
+
result = await dir_handler(
|
|
64
|
+
dotted_path=dotted_path,
|
|
65
|
+
filter=filter,
|
|
66
|
+
kind=kind,
|
|
67
|
+
include_inherited=include_inherited,
|
|
68
|
+
)
|
|
69
|
+
return _json(result)
|
|
70
|
+
|
|
71
|
+
@mcp.tool()
|
|
72
|
+
async def introspect_api(
|
|
73
|
+
dotted_path: str,
|
|
74
|
+
max_depth: int = 5,
|
|
75
|
+
docstring: bool = False,
|
|
76
|
+
root_only: bool = False,
|
|
77
|
+
) -> str:
|
|
78
|
+
"""[introspect] List the API tree of a module recursively."""
|
|
79
|
+
from scitex.introspect._mcp.handlers import list_api_handler
|
|
80
|
+
|
|
81
|
+
result = await list_api_handler(
|
|
82
|
+
dotted_path=dotted_path,
|
|
83
|
+
max_depth=max_depth,
|
|
84
|
+
docstring=docstring,
|
|
85
|
+
root_only=root_only,
|
|
86
|
+
)
|
|
87
|
+
return _json(result)
|
|
88
|
+
|
|
89
|
+
@mcp.tool()
|
|
90
|
+
async def introspect_docstring(
|
|
91
|
+
dotted_path: str,
|
|
92
|
+
format: str = "raw",
|
|
93
|
+
) -> str:
|
|
94
|
+
"""[introspect] Get docstring of a Python object. format: raw|parsed|summary."""
|
|
95
|
+
from scitex.introspect._mcp.handlers import docstring_handler
|
|
96
|
+
|
|
97
|
+
result = await docstring_handler(
|
|
98
|
+
dotted_path=dotted_path,
|
|
99
|
+
format=format,
|
|
100
|
+
)
|
|
101
|
+
return _json(result)
|
|
102
|
+
|
|
103
|
+
@mcp.tool()
|
|
104
|
+
async def introspect_exports(dotted_path: str) -> str:
|
|
105
|
+
"""[introspect] Get __all__ exports of a module."""
|
|
106
|
+
from scitex.introspect._mcp.handlers import exports_handler
|
|
107
|
+
|
|
108
|
+
result = await exports_handler(dotted_path=dotted_path)
|
|
109
|
+
return _json(result)
|
|
110
|
+
|
|
111
|
+
@mcp.tool()
|
|
112
|
+
async def introspect_examples(
|
|
113
|
+
dotted_path: str,
|
|
114
|
+
search_paths: Optional[str] = None,
|
|
115
|
+
max_results: int = 10,
|
|
116
|
+
) -> str:
|
|
117
|
+
"""[introspect] Find usage examples in tests/examples directories."""
|
|
118
|
+
from scitex.introspect._mcp.handlers import examples_handler
|
|
119
|
+
|
|
120
|
+
# Parse search_paths if provided as comma-separated string
|
|
121
|
+
paths_list = None
|
|
122
|
+
if search_paths:
|
|
123
|
+
paths_list = [p.strip() for p in search_paths.split(",")]
|
|
124
|
+
|
|
125
|
+
result = await examples_handler(
|
|
126
|
+
dotted_path=dotted_path,
|
|
127
|
+
search_paths=paths_list,
|
|
128
|
+
max_results=max_results,
|
|
129
|
+
)
|
|
130
|
+
return _json(result)
|
|
131
|
+
|
|
132
|
+
# Advanced introspection tools
|
|
133
|
+
|
|
134
|
+
@mcp.tool()
|
|
135
|
+
async def introspect_class_hierarchy(
|
|
136
|
+
dotted_path: str,
|
|
137
|
+
include_builtins: bool = False,
|
|
138
|
+
max_depth: int = 10,
|
|
139
|
+
) -> str:
|
|
140
|
+
"""[introspect] Get class inheritance hierarchy (MRO + subclasses)."""
|
|
141
|
+
from scitex.introspect._mcp.handlers import class_hierarchy_handler
|
|
142
|
+
|
|
143
|
+
result = await class_hierarchy_handler(
|
|
144
|
+
dotted_path=dotted_path,
|
|
145
|
+
include_builtins=include_builtins,
|
|
146
|
+
max_depth=max_depth,
|
|
147
|
+
)
|
|
148
|
+
return _json(result)
|
|
149
|
+
|
|
150
|
+
@mcp.tool()
|
|
151
|
+
async def introspect_type_hints(
|
|
152
|
+
dotted_path: str,
|
|
153
|
+
include_extras: bool = True,
|
|
154
|
+
) -> str:
|
|
155
|
+
"""[introspect] Get detailed type hint analysis for function/class."""
|
|
156
|
+
from scitex.introspect._mcp.handlers import type_hints_handler
|
|
157
|
+
|
|
158
|
+
result = await type_hints_handler(
|
|
159
|
+
dotted_path=dotted_path,
|
|
160
|
+
include_extras=include_extras,
|
|
161
|
+
)
|
|
162
|
+
return _json(result)
|
|
163
|
+
|
|
164
|
+
@mcp.tool()
|
|
165
|
+
async def introspect_imports(
|
|
166
|
+
dotted_path: str,
|
|
167
|
+
categorize: bool = True,
|
|
168
|
+
) -> str:
|
|
169
|
+
"""[introspect] Get all imports from a module (AST-based static analysis)."""
|
|
170
|
+
from scitex.introspect._mcp.handlers import imports_handler
|
|
171
|
+
|
|
172
|
+
result = await imports_handler(
|
|
173
|
+
dotted_path=dotted_path,
|
|
174
|
+
categorize=categorize,
|
|
175
|
+
)
|
|
176
|
+
return _json(result)
|
|
177
|
+
|
|
178
|
+
@mcp.tool()
|
|
179
|
+
async def introspect_dependencies(
|
|
180
|
+
dotted_path: str,
|
|
181
|
+
recursive: bool = False,
|
|
182
|
+
max_depth: int = 3,
|
|
183
|
+
) -> str:
|
|
184
|
+
"""[introspect] Get module dependencies (what it imports)."""
|
|
185
|
+
from scitex.introspect._mcp.handlers import dependencies_handler
|
|
186
|
+
|
|
187
|
+
result = await dependencies_handler(
|
|
188
|
+
dotted_path=dotted_path,
|
|
189
|
+
recursive=recursive,
|
|
190
|
+
max_depth=max_depth,
|
|
191
|
+
)
|
|
192
|
+
return _json(result)
|
|
193
|
+
|
|
194
|
+
@mcp.tool()
|
|
195
|
+
async def introspect_call_graph(
|
|
196
|
+
dotted_path: str,
|
|
197
|
+
max_depth: int = 2,
|
|
198
|
+
timeout_seconds: int = 10,
|
|
199
|
+
internal_only: bool = True,
|
|
200
|
+
) -> str:
|
|
201
|
+
"""[introspect] Get function call graph (with timeout protection)."""
|
|
202
|
+
from scitex.introspect._mcp.handlers import call_graph_handler
|
|
203
|
+
|
|
204
|
+
result = await call_graph_handler(
|
|
205
|
+
dotted_path=dotted_path,
|
|
206
|
+
max_depth=max_depth,
|
|
207
|
+
timeout_seconds=timeout_seconds,
|
|
208
|
+
internal_only=internal_only,
|
|
209
|
+
)
|
|
210
|
+
return _json(result)
|