clio-kit 2.10.0__tar.gz → 2.10.2__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.
- {clio_kit-2.10.0 → clio_kit-2.10.2}/PKG-INFO +2 -2
- {clio_kit-2.10.0 → clio_kit-2.10.2}/README.md +1 -1
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/adios/server.json +1 -1
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/arxiv/server.json +1 -1
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/chronolog/server.json +1 -1
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/compression/server.json +1 -1
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/darshan/server.json +1 -1
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/geo/server.json +1 -1
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/geojson/server.json +1 -1
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/hdf5/server.json +1 -1
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/jarvis/.claude-plugin/plugin.json +1 -1
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/jarvis/pyproject.toml +1 -1
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/jarvis/server.json +2 -2
- clio_kit-2.10.2/clio-kit-mcp-servers/jarvis/src/jarvis_mcp/artifact_content.py +184 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/jarvis/src/jarvis_mcp/artifacts.py +178 -1
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/jarvis/src/jarvis_mcp/capabilities/__init__.py +2 -2
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/jarvis/src/jarvis_mcp/capabilities/jarvis_handler.py +28 -1
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/jarvis/src/jarvis_mcp/models/artifact_documents.py +23 -2
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/jarvis/uv.lock +1 -38
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/lmod/server.json +1 -1
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/ndp/server.json +1 -1
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/node-hardware/server.json +1 -1
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/pandas/server.json +1 -1
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/parallel-sort/server.json +1 -1
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/paraview/server.json +1 -1
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/parquet/server.json +1 -1
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/plot/server.json +1 -1
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/sac/server.json +1 -1
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/scientific-catalog/server.json +1 -1
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/seismic/server.json +1 -1
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/slurm/server.json +1 -1
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/spack/server.json +1 -1
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/terrain/server.json +1 -1
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/web/server.json +1 -1
- {clio_kit-2.10.0 → clio_kit-2.10.2}/mcp-server-versions.toml +2 -2
- {clio_kit-2.10.0 → clio_kit-2.10.2}/pyproject.toml +1 -1
- {clio_kit-2.10.0 → clio_kit-2.10.2}/src/clio_kit/_mcp_contracts/index.json +23 -5
- clio_kit-2.10.2/src/clio_kit/_mcp_contracts/jarvis-user-v3.7.1.json +3893 -0
- clio_kit-2.10.2/src/clio_kit/_mcp_contracts/jarvis-user-v3.7.json +3891 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/src/clio_kit/env_cache.py +45 -118
- clio_kit-2.10.2/src/clio_kit/environment_locks.py +150 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/src/clio_kit/mcp_contracts.py +4 -2
- {clio_kit-2.10.0 → clio_kit-2.10.2}/.gitignore +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/LICENSE +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-agentic-search/README.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-agentic-search/pyproject.toml +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-agentic-search/src/clio_agentic_search/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-agentic-search/src/clio_agentic_search/api/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-agentic-search/src/clio_agentic_search/api/app.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-agentic-search/src/clio_agentic_search/cli/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-agentic-search/src/clio_agentic_search/cli/main.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-agentic-search/src/clio_agentic_search/connectors/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-agentic-search/src/clio_agentic_search/connectors/filesystem/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-agentic-search/src/clio_agentic_search/connectors/filesystem/connector.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-agentic-search/src/clio_agentic_search/connectors/graph_store/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-agentic-search/src/clio_agentic_search/connectors/graph_store/connector.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-agentic-search/src/clio_agentic_search/connectors/kv_log_store/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-agentic-search/src/clio_agentic_search/connectors/kv_log_store/connector.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-agentic-search/src/clio_agentic_search/connectors/object_store/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-agentic-search/src/clio_agentic_search/connectors/object_store/connector.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-agentic-search/src/clio_agentic_search/connectors/vector_store/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-agentic-search/src/clio_agentic_search/connectors/vector_store/connector.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-agentic-search/src/clio_agentic_search/core/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-agentic-search/src/clio_agentic_search/core/connectors.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-agentic-search/src/clio_agentic_search/core/namespace_config.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-agentic-search/src/clio_agentic_search/core/namespace_registry.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-agentic-search/src/clio_agentic_search/core/seeding.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-agentic-search/src/clio_agentic_search/evals/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-agentic-search/src/clio_agentic_search/evals/quality_gate.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-agentic-search/src/clio_agentic_search/evals/scientific.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-agentic-search/src/clio_agentic_search/indexing/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-agentic-search/src/clio_agentic_search/indexing/lexical.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-agentic-search/src/clio_agentic_search/indexing/scientific.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-agentic-search/src/clio_agentic_search/indexing/text_features.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-agentic-search/src/clio_agentic_search/jobs.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-agentic-search/src/clio_agentic_search/models/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-agentic-search/src/clio_agentic_search/models/contracts.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-agentic-search/src/clio_agentic_search/retrieval/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-agentic-search/src/clio_agentic_search/retrieval/ann.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-agentic-search/src/clio_agentic_search/retrieval/capabilities.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-agentic-search/src/clio_agentic_search/retrieval/coordinator.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-agentic-search/src/clio_agentic_search/retrieval/rerank.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-agentic-search/src/clio_agentic_search/retrieval/scientific.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-agentic-search/src/clio_agentic_search/retry.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-agentic-search/src/clio_agentic_search/storage/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-agentic-search/src/clio_agentic_search/storage/contracts.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-agentic-search/src/clio_agentic_search/storage/duckdb_store.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-agentic-search/src/clio_agentic_search/tasks.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-agentic-search/src/clio_agentic_search/telemetry/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-agentic-search/uv.lock +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-clients/wrp_bin/README.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/adios/.claude-plugin/plugin.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/adios/.mcp.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/adios/README.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/adios/docs/adios_setup.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/adios/docs/basic_install.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/adios/docs/example_uses.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/adios/pyproject.toml +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/adios/sample_data/data1.bp/data.0 +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/adios/sample_data/data1.bp/md.0 +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/adios/sample_data/data1.bp/md.idx +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/adios/sample_data/data1.bp/mmd.0 +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/adios/sample_data/data2.bp/data.0 +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/adios/sample_data/data2.bp/md.0 +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/adios/sample_data/data2.bp/md.idx +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/adios/sample_data/data2.bp/mmd.0 +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/adios/sample_data/data3.bp/data.0 +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/adios/sample_data/data3.bp/md.0 +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/adios/sample_data/data3.bp/md.idx +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/adios/sample_data/data3.bp/mmd.0 +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/adios/sample_data/data4.bp/data.0 +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/adios/sample_data/data4.bp/md.0 +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/adios/sample_data/data4.bp/md.idx +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/adios/sample_data/data4.bp/mmd.0 +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/adios/src/adios_mcp/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/adios/src/adios_mcp/implementation/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/adios/src/adios_mcp/implementation/bp5_attributes.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/adios/src/adios_mcp/implementation/bp5_inspect_variables.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/adios/src/adios_mcp/implementation/bp5_inspect_variables_at_step.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/adios/src/adios_mcp/implementation/bp5_list.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/adios/src/adios_mcp/implementation/bp5_read_variable_at_step.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/adios/src/adios_mcp/mcp_handlers.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/adios/src/adios_mcp/server.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/adios/uv.lock +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/arxiv/.claude-plugin/plugin.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/arxiv/.mcp.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/arxiv/README.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/arxiv/demo.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/arxiv/docs/basic_install.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/arxiv/pyproject.toml +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/arxiv/src/arxiv_mcp/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/arxiv/src/arxiv_mcp/capabilities/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/arxiv/src/arxiv_mcp/capabilities/arxiv_base.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/arxiv/src/arxiv_mcp/capabilities/category_search.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/arxiv/src/arxiv_mcp/capabilities/date_search.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/arxiv/src/arxiv_mcp/capabilities/download_paper.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/arxiv/src/arxiv_mcp/capabilities/export_utils.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/arxiv/src/arxiv_mcp/capabilities/paper_details.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/arxiv/src/arxiv_mcp/capabilities/text_search.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/arxiv/src/arxiv_mcp/mcp_handlers.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/arxiv/src/arxiv_mcp/server.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/arxiv/uv.lock +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/chronolog/.claude-plugin/plugin.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/chronolog/.mcp.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/chronolog/README.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/chronolog/assets/mcp-client.png +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/chronolog/assets/mcp-clientstartchronolog.png +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/chronolog/assets/mcp-retievecopilot.png +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/chronolog/assets/mcp-retrieve-diseasepred.png +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/chronolog/docs/Chronolog_setup.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/chronolog/pyproject.toml +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/chronolog/src/chronomcp/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/chronolog/src/chronomcp/capabilities/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/chronolog/src/chronomcp/capabilities/record_handler.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/chronolog/src/chronomcp/capabilities/retrieve_handler.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/chronolog/src/chronomcp/capabilities/start_handler.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/chronolog/src/chronomcp/capabilities/stop_handler.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/chronolog/src/chronomcp/reader_script/CMakeLists.txt +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/chronolog/src/chronomcp/reader_script/HDF5ArchiveReadingAgent.h +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/chronolog/src/chronomcp/reader_script/reader.cpp +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/chronolog/src/chronomcp/server.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/chronolog/src/chronomcp/utils/config.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/chronolog/src/chronomcp/utils/helpers.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/chronolog/uv.lock +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/compression/.claude-plugin/plugin.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/compression/.mcp.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/compression/README.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/compression/data/sample_data.csv +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/compression/data/sample_log.txt +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/compression/pyproject.toml +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/compression/pytest.ini +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/compression/src/compression_mcp/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/compression/src/compression_mcp/capabilities/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/compression/src/compression_mcp/capabilities/compression_base.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/compression/src/compression_mcp/mcp_handlers.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/compression/src/compression_mcp/server.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/compression/uv.lock +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/darshan/.claude-plugin/plugin.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/darshan/.mcp.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/darshan/README.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/darshan/pyproject.toml +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/darshan/src/darshan_mcp/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/darshan/src/darshan_mcp/capabilities/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/darshan/src/darshan_mcp/capabilities/darshan_parser.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/darshan/src/darshan_mcp/server.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/darshan/uv.lock +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/geo/.claude-plugin/plugin.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/geo/.mcp.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/geo/README.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/geo/pyproject.toml +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/geo/src/geo_mcp/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/geo/src/geo_mcp/implementation/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/geo/src/geo_mcp/implementation/arcgis.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/geo/src/geo_mcp/implementation/geocode.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/geo/src/geo_mcp/implementation/map_render.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/geo/src/geo_mcp/implementation/overlap.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/geo/src/geo_mcp/implementation/proximity.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/geo/src/geo_mcp/server.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/geo/uv.lock +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/geojson/.claude-plugin/plugin.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/geojson/.mcp.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/geojson/README.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/geojson/pyproject.toml +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/geojson/src/geojson_mcp/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/geojson/src/geojson_mcp/implementation/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/geojson/src/geojson_mcp/implementation/inspect.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/geojson/src/geojson_mcp/server.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/geojson/uv.lock +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/hdf5/.claude-plugin/plugin.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/hdf5/.mcp.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/hdf5/README.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/hdf5/TESTING.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/hdf5/docs/ARCHITECTURE.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/hdf5/docs/EXAMPLES.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/hdf5/docs/MIGRATION.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/hdf5/docs/TOOLS.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/hdf5/docs/TRANSPORTS.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/hdf5/examples/README.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/hdf5/examples/create_demo_data.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/hdf5/examples/demo_script.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/hdf5/pyproject.toml +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/hdf5/src/hdf5_mcp/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/hdf5/src/hdf5_mcp/config.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/hdf5/src/hdf5_mcp/resources.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/hdf5/src/hdf5_mcp/server.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/hdf5/src/hdf5_mcp/utils.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/hdf5/uv.lock +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/jarvis/.mcp.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/jarvis/README.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/jarvis/docs/GUIDE.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/jarvis/docs/assets/Screenshot 2025-05-15 160800.png +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/jarvis/docs/assets/Screenshot 2025-05-15 162219.png +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/jarvis/docs/assets/Screenshot 2025-05-15 162322.png +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/jarvis/docs/assets/Screenshot 2025-05-15 162545.png +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/jarvis/docs/assets/Screenshot 2025-05-15 162922.png +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/jarvis/docs/assets/Screenshot 2025-05-15 163023.png +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/jarvis/docs/assets/Screenshot 2025-05-15 163516.png +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/jarvis/docs/assets/Screenshot 2025-05-15 163651.png +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/jarvis/docs/assets/Screenshot 2025-05-15 163759.png +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/jarvis/docs/basic_install.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/jarvis/requirements.txt +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/jarvis/scripts/live_ares_semantic_mcp_probe.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/jarvis/src/jarvis_mcp/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/jarvis/src/jarvis_mcp/admin_server.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/jarvis/src/jarvis_mcp/models/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/jarvis/src/jarvis_mcp/models/_base.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/jarvis/src/jarvis_mcp/models/compat.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/jarvis/src/jarvis_mcp/models/datasets.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/jarvis/src/jarvis_mcp/models/describe.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/jarvis/src/jarvis_mcp/models/execution.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/jarvis/src/jarvis_mcp/models/packages.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/jarvis/src/jarvis_mcp/models/progress.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/jarvis/src/jarvis_mcp/models/service_runtime.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/jarvis/src/jarvis_mcp/package_discovery.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/jarvis/src/jarvis_mcp/progress.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/jarvis/src/jarvis_mcp/server.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/jarvis/src/jarvis_mcp/user_server.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/jarvis/src/jarvis_mcp/windows_job.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/lmod/.claude-plugin/plugin.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/lmod/.mcp.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/lmod/README.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/lmod/pyproject.toml +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/lmod/src/lmod_mcp/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/lmod/src/lmod_mcp/capabilities/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/lmod/src/lmod_mcp/capabilities/lmod_handler.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/lmod/src/lmod_mcp/server.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/lmod/uv.lock +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/ndp/.claude-plugin/plugin.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/ndp/.mcp.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/ndp/README.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/ndp/docs/mcp_development_guide.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/ndp/docs/ndp_api.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/ndp/docs/ndp_docs.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/ndp/pyproject.toml +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/ndp/src/ndp_mcp/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/ndp/src/ndp_mcp/server.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/ndp/uv.lock +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/node-hardware/.claude-plugin/plugin.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/node-hardware/.mcp.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/node-hardware/README.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/node-hardware/pyproject.toml +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/capabilities/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/capabilities/cpu_info.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/capabilities/disk_info.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/capabilities/gpu_info.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/capabilities/hardware_summary.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/capabilities/memory_info.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/capabilities/network_info.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/capabilities/performance_monitor.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/capabilities/process_info.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/capabilities/remote_node_info.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/capabilities/sensor_info.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/capabilities/system_info.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/capabilities/utils.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/mcp_handlers.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/server.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/utils/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/utils/output_formatter.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/node-hardware/uv.lock +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/pandas/.claude-plugin/plugin.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/pandas/.mcp.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/pandas/README.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/pandas/example_script/create_sample_data.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/pandas/pyproject.toml +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/pandas/pytest.ini +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/pandas/src/pandas_mcp/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/pandas/src/pandas_mcp/implementation/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/pandas/src/pandas_mcp/implementation/csv_profiling.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/pandas/src/pandas_mcp/implementation/data_cleaning.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/pandas/src/pandas_mcp/implementation/data_io.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/pandas/src/pandas_mcp/implementation/data_profiling.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/pandas/src/pandas_mcp/implementation/filtering.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/pandas/src/pandas_mcp/implementation/memory_optimization.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/pandas/src/pandas_mcp/implementation/output_formatter.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/pandas/src/pandas_mcp/implementation/pandas_statistics.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/pandas/src/pandas_mcp/implementation/time_series.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/pandas/src/pandas_mcp/implementation/transformations.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/pandas/src/pandas_mcp/implementation/validation.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/pandas/src/pandas_mcp/mcp_handlers.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/pandas/src/pandas_mcp/server.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/pandas/uv.lock +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/parallel-sort/.claude-plugin/plugin.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/parallel-sort/.mcp.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/parallel-sort/README.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/parallel-sort/USAGE_GUIDE.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/parallel-sort/pyproject.toml +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/parallel-sort/pytest.ini +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/parallel-sort/src/parallel_sort_mcp/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/parallel-sort/src/parallel_sort_mcp/implementation/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/parallel-sort/src/parallel_sort_mcp/implementation/export_handler.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/parallel-sort/src/parallel_sort_mcp/implementation/filter_handler.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/parallel-sort/src/parallel_sort_mcp/implementation/parallel_processor.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/parallel-sort/src/parallel_sort_mcp/implementation/pattern_detection.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/parallel-sort/src/parallel_sort_mcp/implementation/sort_handler.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/parallel-sort/src/parallel_sort_mcp/implementation/statistics_handler.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/parallel-sort/src/parallel_sort_mcp/mcp_handlers.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/parallel-sort/src/parallel_sort_mcp/server.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/parallel-sort/uv.lock +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/paraview/.claude-plugin/plugin.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/paraview/.mcp.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/paraview/LICENSE +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/paraview/README.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/paraview/USAGE_README.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/paraview/prompt.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/paraview/pyproject.toml +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/paraview/pytest.ini +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/paraview/requirements.txt +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/paraview/scripts/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/paraview/scripts/automate_setup.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/paraview/scripts/build_paraview.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/paraview/scripts/configure_paraview.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/paraview/scripts/install_deps.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/paraview/scripts/installation_example.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/paraview/scripts/launch_gui.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/paraview/scripts/launch_server.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/paraview/scripts/test_installation.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/paraview/src/paraview_mcp/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/paraview/src/paraview_mcp/implementation/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/paraview/src/paraview_mcp/implementation/paraview_capabilities.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/paraview/src/paraview_mcp/server.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/paraview/src/paraview_mcp/viz.html +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/paraview/uv.lock +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/parquet/.claude-plugin/plugin.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/parquet/.mcp.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/parquet/README.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/parquet/data/data.csv +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/parquet/data/huge_log.txt +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/parquet/data/small_log.txt +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/parquet/data/weather_data.parquet +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/parquet/datasets/batch_1.parquet +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/parquet/datasets/batch_large_strings.parquet +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/parquet/evaluation.xml +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/parquet/images/compress.png +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/parquet/images/getResource.png +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/parquet/images/listResources.png +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/parquet/images/listTools.png +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/parquet/images/pandas.png +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/parquet/images/parquet.png +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/parquet/images/sort.png +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/parquet/images/tests.png +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/parquet/pyproject.toml +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/parquet/pytest.ini +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/parquet/src/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/parquet/src/parquet_mcp/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/parquet/src/parquet_mcp/capabilities/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/parquet/src/parquet_mcp/capabilities/parquet_handler.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/parquet/src/parquet_mcp/server.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/parquet/uv.lock +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/plot/.claude-plugin/plugin.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/plot/.mcp.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/plot/README.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/plot/data/sample_data.csv +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/plot/data/temperature.csv +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/plot/pyproject.toml +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/plot/pytest.ini +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/plot/src/plot_mcp/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/plot/src/plot_mcp/implementation/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/plot/src/plot_mcp/implementation/plot_capabilities.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/plot/src/plot_mcp/server.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/plot/uv.lock +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/sac/.claude-plugin/plugin.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/sac/.mcp.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/sac/README.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/sac/pyproject.toml +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/sac/src/sac_mcp/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/sac/src/sac_mcp/implementation/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/sac/src/sac_mcp/implementation/analysis.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/sac/src/sac_mcp/implementation/sac_io.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/sac/src/sac_mcp/server.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/sac/uv.lock +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/scientific-catalog/.claude-plugin/plugin.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/scientific-catalog/.mcp.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/scientific-catalog/README.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/scientific-catalog/pyproject.toml +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/scientific-catalog/src/scientific_catalog_mcp/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/scientific-catalog/src/scientific_catalog_mcp/backend.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/scientific-catalog/src/scientific_catalog_mcp/models.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/scientific-catalog/src/scientific_catalog_mcp/server.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/scientific-catalog/uv.lock +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/seismic/.claude-plugin/plugin.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/seismic/.mcp.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/seismic/README.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/seismic/pyproject.toml +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/seismic/src/seismic_mcp/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/seismic/src/seismic_mcp/implementation/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/seismic/src/seismic_mcp/implementation/analysis.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/seismic/src/seismic_mcp/implementation/catalog_io.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/seismic/src/seismic_mcp/implementation/plotting.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/seismic/src/seismic_mcp/server.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/seismic/uv.lock +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/slurm/.claude-plugin/plugin.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/slurm/.mcp.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/slurm/README.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/slurm/docs/MCP_SERVER_GUIDE.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/slurm/docs/agent-contract-v3.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/slurm/docs/basic_install.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/slurm/docs/run.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/slurm/docs/slurm_installation/NATIVE_SLURM_SUCCESS_REPORT.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/slurm/docs/slurm_installation/SLURM_INSTALLATION_GUIDE.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/slurm/docs/slurm_installation/final_verification.sh +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/slurm/docs/slurm_installation/install_slurm.sh +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/slurm/docs/slurm_installation/parallel_job.sh +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/slurm/docs/slurm_installation/quick_native_test.sh +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/slurm/docs/slurm_installation/slurm.conf +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/slurm/docs/slurm_installation/slurm_config.conf +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/slurm/example_scripts/README.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/slurm/example_scripts/SLURM_SCRIPT_GENERATION_PROMPT.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/slurm/example_scripts/array_job.sh +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/slurm/example_scripts/data_processing.sh +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/slurm/example_scripts/generate_slurm_script.sh +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/slurm/example_scripts/hello_world.sh +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/slurm/example_scripts/long_simulation.sh +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/slurm/example_scripts/python_computation.sh +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/slurm/logs/README.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/slurm/pyproject.toml +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/slurm/pytest.ini +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/slurm/src/slurm_mcp/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/slurm/src/slurm_mcp/agent_contract.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/slurm/src/slurm_mcp/implementation/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/slurm/src/slurm_mcp/implementation/array_jobs.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/slurm/src/slurm_mcp/implementation/cluster_info.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/slurm/src/slurm_mcp/implementation/job_cancellation.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/slurm/src/slurm_mcp/implementation/job_details.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/slurm/src/slurm_mcp/implementation/job_listing.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/slurm/src/slurm_mcp/implementation/job_output.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/slurm/src/slurm_mcp/implementation/job_status.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/slurm/src/slurm_mcp/implementation/job_submission.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/slurm/src/slurm_mcp/implementation/node_allocation.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/slurm/src/slurm_mcp/implementation/node_info.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/slurm/src/slurm_mcp/implementation/queue_info.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/slurm/src/slurm_mcp/implementation/slurm_handler.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/slurm/src/slurm_mcp/implementation/utils.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/slurm/src/slurm_mcp/mcp_handlers.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/slurm/src/slurm_mcp/server.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/slurm/uv.lock +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/spack/.claude-plugin/plugin.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/spack/.mcp.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/spack/README.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/spack/pyproject.toml +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/spack/src/spack_mcp/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/spack/src/spack_mcp/admin_server.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/spack/src/spack_mcp/backend.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/spack/src/spack_mcp/server.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/spack/src/spack_mcp/user_server.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/spack/src/spack_mcp/windows_job.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/spack/uv.lock +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/terrain/.claude-plugin/plugin.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/terrain/.mcp.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/terrain/README.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/terrain/pyproject.toml +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/terrain/src/terrain_mcp/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/terrain/src/terrain_mcp/implementation/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/terrain/src/terrain_mcp/implementation/_common.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/terrain/src/terrain_mcp/implementation/dem.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/terrain/src/terrain_mcp/implementation/errors.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/terrain/src/terrain_mcp/implementation/pointcloud.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/terrain/src/terrain_mcp/server.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/terrain/uv.lock +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/web/.claude-plugin/plugin.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/web/.mcp.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/web/README.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/web/docs/web_tools.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/web/pyproject.toml +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/web/src/web_mcp/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/web/src/web_mcp/config.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/web/src/web_mcp/document_service.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/web/src/web_mcp/fetch.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/web/src/web_mcp/fetch_utils.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/web/src/web_mcp/search.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/web/src/web_mcp/searxng.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/web/src/web_mcp/server.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/web/src/web_mcp/task_runtime.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-mcp-servers/web/uv.lock +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-website/README.md +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-website/src/components/HomepageFeatures/index.js +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-website/src/components/HomepageFeatures/styles.module.css +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-website/src/components/MCPDetail/index.js +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-website/src/components/MCPDetail/styles.module.css +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-website/src/components/MCPShowcase/index.js +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-website/src/components/MCPShowcase/styles.module.css +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-website/src/css/custom.css +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-website/src/data/mcpData.js +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-website/src/pages/index.js +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/clio-kit-website/src/pages/index.module.css +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/src/clio_kit/__init__.py +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/src/clio_kit/_mcp_contracts/jarvis-user-v3.1.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/src/clio_kit/_mcp_contracts/jarvis-user-v3.2.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/src/clio_kit/_mcp_contracts/jarvis-user-v3.3.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/src/clio_kit/_mcp_contracts/jarvis-user-v3.4.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/src/clio_kit/_mcp_contracts/jarvis-user-v3.5.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/src/clio_kit/_mcp_contracts/jarvis-user-v3.6.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/src/clio_kit/_mcp_contracts/jarvis-user-v3.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/src/clio_kit/_mcp_contracts/scientific-catalog-user-v1.1.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/src/clio_kit/_mcp_contracts/scientific-catalog-user-v1.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/src/clio_kit/_mcp_contracts/slurm-user-v3.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/src/clio_kit/_mcp_contracts/spack-user-v2.1.json +0 -0
- {clio_kit-2.10.0 → clio_kit-2.10.2}/src/clio_kit/_mcp_contracts/spack-user-v2.json +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: clio-kit
|
|
3
|
-
Version: 2.10.
|
|
3
|
+
Version: 2.10.2
|
|
4
4
|
Summary: CLIO Kit - MCP Servers, Clients, and Tools for AI Agents
|
|
5
5
|
Project-URL: Homepage, https://github.com/iowarp/clio-kit
|
|
6
6
|
Project-URL: Repository, https://github.com/iowarp/clio-kit
|
|
@@ -276,7 +276,7 @@ distinct `not_installed` semantic, while real Spack failures remain errors.
|
|
|
276
276
|
| **`geo`** | 2.2.3 | Geospatial | Render GeoJSON vector layers with basemaps | `clio-kit mcp-server geo` |
|
|
277
277
|
| **`geojson`** | 2.2.3 | Geospatial | Inspect, validate, and summarize GeoJSON | `clio-kit mcp-server geojson` |
|
|
278
278
|
| **`hdf5`** | 2.2.3 | Data I/O | HPC-optimized scientific data with 27 tools, AI insights, caching, streaming | `clio-kit mcp-server hdf5` |
|
|
279
|
-
| **`jarvis`** | 3.
|
|
279
|
+
| **`jarvis`** | 3.7.1 | Workflow | Durable pipeline, bounded package discovery, progress, artifact, and service-runtime management | `clio-kit mcp-server jarvis` |
|
|
280
280
|
| **`lmod`** | 2.2.3 | Environment | Environment module management | `clio-kit mcp-server lmod` |
|
|
281
281
|
| **`ndp`** | 2.2.3 | Data Protocol | Search and discover datasets across CKAN instances | `clio-kit mcp-server ndp` |
|
|
282
282
|
| **`node-hardware`** | 2.2.3 | System | System hardware information | `clio-kit mcp-server node-hardware` |
|
|
@@ -250,7 +250,7 @@ distinct `not_installed` semantic, while real Spack failures remain errors.
|
|
|
250
250
|
| **`geo`** | 2.2.3 | Geospatial | Render GeoJSON vector layers with basemaps | `clio-kit mcp-server geo` |
|
|
251
251
|
| **`geojson`** | 2.2.3 | Geospatial | Inspect, validate, and summarize GeoJSON | `clio-kit mcp-server geojson` |
|
|
252
252
|
| **`hdf5`** | 2.2.3 | Data I/O | HPC-optimized scientific data with 27 tools, AI insights, caching, streaming | `clio-kit mcp-server hdf5` |
|
|
253
|
-
| **`jarvis`** | 3.
|
|
253
|
+
| **`jarvis`** | 3.7.1 | Workflow | Durable pipeline, bounded package discovery, progress, artifact, and service-runtime management | `clio-kit mcp-server jarvis` |
|
|
254
254
|
| **`lmod`** | 2.2.3 | Environment | Environment module management | `clio-kit mcp-server lmod` |
|
|
255
255
|
| **`ndp`** | 2.2.3 | Data Protocol | Search and discover datasets across CKAN instances | `clio-kit mcp-server ndp` |
|
|
256
256
|
| **`node-hardware`** | 2.2.3 | System | System hardware information | `clio-kit mcp-server node-hardware` |
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"name": "io.github.iowarp/jarvis-mcp",
|
|
4
4
|
"title": "CLIO Jarvis",
|
|
5
5
|
"description": "JARVIS-CD MCP with a compact user pipeline contract and explicit admin compatibility profiles",
|
|
6
|
-
"version": "3.
|
|
6
|
+
"version": "3.7.1",
|
|
7
7
|
"repository": {
|
|
8
8
|
"url": "https://github.com/iowarp/clio-kit",
|
|
9
9
|
"source": "github"
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
{
|
|
13
13
|
"registryType": "pypi",
|
|
14
14
|
"identifier": "clio-kit",
|
|
15
|
-
"version": "2.10.
|
|
15
|
+
"version": "2.10.2",
|
|
16
16
|
"transport": {
|
|
17
17
|
"type": "stdio"
|
|
18
18
|
},
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
"""Bounded inline content reads for JARVIS-owned ``role="log"`` artifacts.
|
|
2
|
+
|
|
3
|
+
Companion to :mod:`jarvis_mcp.artifacts`, which owns artifact snapshot
|
|
4
|
+
validation and paging: that module's artifact page is a content-free
|
|
5
|
+
manifest by design (identity, role, state, location only). This module adds
|
|
6
|
+
one narrow, additive capability on top of it -- reading a bounded tail of a
|
|
7
|
+
log artifact's own file -- kept in its own module rather than appended to
|
|
8
|
+
either ``artifacts.py`` or the already-oversized ``jarvis_handler.py`` (see
|
|
9
|
+
``scripts/check_file_size.py``'s per-file ratchet).
|
|
10
|
+
|
|
11
|
+
A failed execution's own generated logs are the single most useful thing an
|
|
12
|
+
agent can read after a terminal failure. Only ``role="log"`` artifacts are
|
|
13
|
+
eligible: this is a deliberate, narrow scope, not a general remote-file-read
|
|
14
|
+
primitive.
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
from __future__ import annotations
|
|
18
|
+
|
|
19
|
+
from collections.abc import Mapping
|
|
20
|
+
from pathlib import Path
|
|
21
|
+
from typing import Any, cast
|
|
22
|
+
|
|
23
|
+
ARTIFACT_MAX_CONTENT_BYTES = 64 * 1024
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class ArtifactContentError(RuntimeError):
|
|
27
|
+
"""One artifact's bounded inline content could not be resolved or read.
|
|
28
|
+
|
|
29
|
+
Always caught per-artifact by :func:`artifact_with_content` -- a single
|
|
30
|
+
unreadable log must never fail the whole bounded page.
|
|
31
|
+
"""
|
|
32
|
+
|
|
33
|
+
def __init__(self, code: str, message: str) -> None:
|
|
34
|
+
"""Create a stable per-artifact content error."""
|
|
35
|
+
super().__init__(message)
|
|
36
|
+
self.code = code
|
|
37
|
+
self.message = message
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def artifact_with_content(
|
|
41
|
+
item: dict[str, Any],
|
|
42
|
+
*,
|
|
43
|
+
execution_root: Path | None,
|
|
44
|
+
max_bytes: int,
|
|
45
|
+
) -> dict[str, Any]:
|
|
46
|
+
"""Return one page item enriched with a bounded inline content read.
|
|
47
|
+
|
|
48
|
+
Scoped to ``role="log"`` artifacts only -- this is a narrow, bounded log
|
|
49
|
+
reader, not a general remote-file-read primitive. Every other artifact,
|
|
50
|
+
and every log artifact whose content genuinely could not be resolved,
|
|
51
|
+
gets a typed ``content_error`` -- the caller always sees why, never a
|
|
52
|
+
silent gap where content might have been.
|
|
53
|
+
"""
|
|
54
|
+
enriched = dict(item)
|
|
55
|
+
role = item.get("role")
|
|
56
|
+
if role != "log":
|
|
57
|
+
enriched.update(
|
|
58
|
+
content=None,
|
|
59
|
+
content_truncated=False,
|
|
60
|
+
content_bytes_read=0,
|
|
61
|
+
content_error=(
|
|
62
|
+
f"artifact role {role!r} is not eligible for inline content "
|
|
63
|
+
'(role must be "log")'
|
|
64
|
+
),
|
|
65
|
+
)
|
|
66
|
+
return enriched
|
|
67
|
+
location = item.get("location")
|
|
68
|
+
if not isinstance(location, dict):
|
|
69
|
+
enriched.update(
|
|
70
|
+
content=None,
|
|
71
|
+
content_truncated=False,
|
|
72
|
+
content_bytes_read=0,
|
|
73
|
+
content_error="log artifact has no location to read content from",
|
|
74
|
+
)
|
|
75
|
+
return enriched
|
|
76
|
+
try:
|
|
77
|
+
path = resolve_artifact_path(location, execution_root=execution_root)
|
|
78
|
+
text, truncated, bytes_read = read_artifact_tail(path, max_bytes=max_bytes)
|
|
79
|
+
except ArtifactContentError as exc:
|
|
80
|
+
enriched.update(
|
|
81
|
+
content=None,
|
|
82
|
+
content_truncated=False,
|
|
83
|
+
content_bytes_read=0,
|
|
84
|
+
content_error=exc.message,
|
|
85
|
+
)
|
|
86
|
+
return enriched
|
|
87
|
+
enriched.update(
|
|
88
|
+
content=text,
|
|
89
|
+
content_truncated=truncated,
|
|
90
|
+
content_bytes_read=bytes_read,
|
|
91
|
+
content_error=None,
|
|
92
|
+
)
|
|
93
|
+
return enriched
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def execution_root_from_record(record_document: Mapping[str, Any]) -> Path | None:
|
|
97
|
+
"""Resolve one execution's own root directory from its durable metadata.
|
|
98
|
+
|
|
99
|
+
Grounded, not guessed: ``pipeline_snapshot_path`` is written by JARVIS-CD
|
|
100
|
+
itself as ``execution_root / "runtime"`` for every execution (see
|
|
101
|
+
``jarvis_cd.core.pipeline.Pipeline._launch``, which also places
|
|
102
|
+
``stdout.log``/``stderr.log`` directly under that same ``execution_root``
|
|
103
|
+
-- this is the one durable field already present on every record that
|
|
104
|
+
names it, so no path is invented here. Falls back to ``script_path``
|
|
105
|
+
(present instead of ``pipeline_snapshot_path`` for scheduler-submitted
|
|
106
|
+
executions -- see the terminal execution-output declaration path) when
|
|
107
|
+
the primary field is absent or malformed. Returns ``None`` (never a
|
|
108
|
+
guess) when neither field resolves; callers must treat that as
|
|
109
|
+
"execution-scoped content is not resolvable for this record", not retry
|
|
110
|
+
with a fabricated path.
|
|
111
|
+
"""
|
|
112
|
+
metadata = record_document.get("metadata")
|
|
113
|
+
if not isinstance(metadata, Mapping):
|
|
114
|
+
return None
|
|
115
|
+
for key in ("pipeline_snapshot_path", "script_path"):
|
|
116
|
+
raw_path = metadata.get(key)
|
|
117
|
+
if not isinstance(raw_path, str) or not raw_path.strip():
|
|
118
|
+
continue
|
|
119
|
+
candidate = Path(raw_path)
|
|
120
|
+
if candidate.name:
|
|
121
|
+
return candidate.parent
|
|
122
|
+
return None
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
def resolve_artifact_path(
|
|
126
|
+
location: Mapping[str, Any],
|
|
127
|
+
*,
|
|
128
|
+
execution_root: Path | None,
|
|
129
|
+
) -> Path:
|
|
130
|
+
"""Resolve one already-validated artifact location to a real filesystem path.
|
|
131
|
+
|
|
132
|
+
``execution_path`` locations were validated on the way in
|
|
133
|
+
(``artifacts.py::_validate_execution_path``) to contain no
|
|
134
|
+
``..``/absolute component, so joining them onto ``execution_root`` can
|
|
135
|
+
never escape it. ``cluster_path`` locations are already validated
|
|
136
|
+
absolute paths on this same host -- ``jarvis_mcp`` runs co-located with
|
|
137
|
+
the execution it is reporting on, so this is a local read, never a
|
|
138
|
+
second network hop.
|
|
139
|
+
"""
|
|
140
|
+
kind = location["kind"]
|
|
141
|
+
value = cast(str, location["value"])
|
|
142
|
+
if kind == "cluster_path":
|
|
143
|
+
return Path(value)
|
|
144
|
+
if kind == "execution_path":
|
|
145
|
+
if execution_root is None:
|
|
146
|
+
raise ArtifactContentError(
|
|
147
|
+
"jarvis_artifact_execution_root_unavailable",
|
|
148
|
+
"this execution's own root directory could not be resolved, "
|
|
149
|
+
"so its relative log path cannot be read",
|
|
150
|
+
)
|
|
151
|
+
return execution_root / value
|
|
152
|
+
raise ArtifactContentError(
|
|
153
|
+
"jarvis_artifact_content_unsupported_location",
|
|
154
|
+
f"artifact location kind {kind!r} does not support inline content",
|
|
155
|
+
)
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
def read_artifact_tail(path: Path, *, max_bytes: int) -> tuple[str, bool, int]:
|
|
159
|
+
"""Read up to ``max_bytes`` from the END of one file (tail semantics).
|
|
160
|
+
|
|
161
|
+
A log's most recent lines -- the ones nearest a crash -- are read, not
|
|
162
|
+
its head. Decoded permissively (``errors="replace"``): a partially
|
|
163
|
+
written multi-byte sequence at the tail boundary must not turn a
|
|
164
|
+
genuinely useful read into a hard failure.
|
|
165
|
+
"""
|
|
166
|
+
try:
|
|
167
|
+
size = path.stat().st_size
|
|
168
|
+
except OSError as exc:
|
|
169
|
+
raise ArtifactContentError(
|
|
170
|
+
"jarvis_artifact_content_unreadable",
|
|
171
|
+
f"artifact file could not be read: {exc}",
|
|
172
|
+
) from exc
|
|
173
|
+
truncated = size > max_bytes
|
|
174
|
+
offset = max(0, size - max_bytes)
|
|
175
|
+
try:
|
|
176
|
+
with path.open("rb") as handle:
|
|
177
|
+
handle.seek(offset)
|
|
178
|
+
raw = handle.read(max_bytes)
|
|
179
|
+
except OSError as exc:
|
|
180
|
+
raise ArtifactContentError(
|
|
181
|
+
"jarvis_artifact_content_unreadable",
|
|
182
|
+
f"artifact file could not be read: {exc}",
|
|
183
|
+
) from exc
|
|
184
|
+
return raw.decode("utf-8", errors="replace"), truncated, len(raw)
|
|
@@ -13,11 +13,21 @@ import hashlib
|
|
|
13
13
|
import json
|
|
14
14
|
import math
|
|
15
15
|
import re
|
|
16
|
+
import stat
|
|
17
|
+
import time
|
|
16
18
|
from collections.abc import Mapping
|
|
17
|
-
from pathlib import PurePosixPath
|
|
19
|
+
from pathlib import Path, PurePosixPath
|
|
18
20
|
from typing import Any, cast
|
|
19
21
|
from urllib.parse import urlsplit
|
|
20
22
|
|
|
23
|
+
# Content-reading (``ArtifactContentError``/``artifact_with_content``) lives
|
|
24
|
+
# in ``artifact_content.py``, not here: this module owns snapshot VALIDATION
|
|
25
|
+
# and paging; that one owns the bounded, ``role="log"``-only file read
|
|
26
|
+
# layered on top of a page's results.
|
|
27
|
+
from jarvis_mcp.artifact_content import (
|
|
28
|
+
ARTIFACT_MAX_CONTENT_BYTES,
|
|
29
|
+
artifact_with_content,
|
|
30
|
+
)
|
|
21
31
|
|
|
22
32
|
ARTIFACT_SNAPSHOT_SCHEMA = "jarvis.execution.artifacts.v1"
|
|
23
33
|
ARTIFACT_EVENT_SCHEMA = "jarvis.artifact.v1"
|
|
@@ -55,6 +65,7 @@ _ARTIFACT_ROLES = {
|
|
|
55
65
|
"intermediate",
|
|
56
66
|
"output",
|
|
57
67
|
"log",
|
|
68
|
+
"frame",
|
|
58
69
|
"checkpoint",
|
|
59
70
|
"provenance",
|
|
60
71
|
"validation",
|
|
@@ -87,6 +98,28 @@ _OPTIONAL_EVENT_FIELDS = {
|
|
|
87
98
|
"checksum",
|
|
88
99
|
"message",
|
|
89
100
|
}
|
|
101
|
+
MAX_EXECUTION_OUTPUT_FILES = 64
|
|
102
|
+
_EXECUTION_OUTPUT_TRUNCATION_SCHEMA = "jarvis.execution-output-truncation.v1"
|
|
103
|
+
_EXECUTION_OUTPUT_CONTROL_FILES = frozenset({"submit.slurm"})
|
|
104
|
+
_EXECUTION_OUTPUT_ROLE_BY_SUFFIX = {
|
|
105
|
+
".err": "log",
|
|
106
|
+
".log": "log",
|
|
107
|
+
".out": "log",
|
|
108
|
+
".bp": "frame",
|
|
109
|
+
".dcd": "frame",
|
|
110
|
+
".dump": "frame",
|
|
111
|
+
".h5": "frame",
|
|
112
|
+
".hdf5": "frame",
|
|
113
|
+
".lammpstrj": "frame",
|
|
114
|
+
".nc": "frame",
|
|
115
|
+
".npy": "frame",
|
|
116
|
+
".npz": "frame",
|
|
117
|
+
".pdb": "frame",
|
|
118
|
+
".vti": "frame",
|
|
119
|
+
".vtk": "frame",
|
|
120
|
+
".vtu": "frame",
|
|
121
|
+
".xyz": "frame",
|
|
122
|
+
}
|
|
90
123
|
|
|
91
124
|
|
|
92
125
|
class ArtifactSnapshotError(RuntimeError):
|
|
@@ -110,6 +143,119 @@ class ArtifactQueryError(RuntimeError):
|
|
|
110
143
|
self.retryable = retryable
|
|
111
144
|
|
|
112
145
|
|
|
146
|
+
def execution_output_artifact_events(
|
|
147
|
+
execution_root: Path,
|
|
148
|
+
*,
|
|
149
|
+
execution_id: str,
|
|
150
|
+
observed_at_epoch: float | None = None,
|
|
151
|
+
) -> tuple[list[dict[str, Any]], dict[str, object] | None]:
|
|
152
|
+
"""Declare bounded regular files directly under one terminal execution root.
|
|
153
|
+
|
|
154
|
+
Discovery is deliberately shallow: the execution root is listed once and
|
|
155
|
+
nested directories are never traversed. File contents are hashed for
|
|
156
|
+
identity, but never embedded in the returned manifest.
|
|
157
|
+
"""
|
|
158
|
+
if not execution_root.is_dir():
|
|
159
|
+
return [], None
|
|
160
|
+
observed = time.time() if observed_at_epoch is None else observed_at_epoch
|
|
161
|
+
candidates: list[Path] = []
|
|
162
|
+
for path in sorted(execution_root.iterdir(), key=lambda item: item.name):
|
|
163
|
+
try:
|
|
164
|
+
path_stat = path.lstat()
|
|
165
|
+
except OSError:
|
|
166
|
+
continue
|
|
167
|
+
if (
|
|
168
|
+
path.name.startswith(".")
|
|
169
|
+
or path.name in _EXECUTION_OUTPUT_CONTROL_FILES
|
|
170
|
+
or stat.S_ISLNK(path_stat.st_mode)
|
|
171
|
+
or not stat.S_ISREG(path_stat.st_mode)
|
|
172
|
+
):
|
|
173
|
+
continue
|
|
174
|
+
candidates.append(path)
|
|
175
|
+
|
|
176
|
+
events: list[dict[str, Any]] = []
|
|
177
|
+
for sequence, path in enumerate(candidates[:MAX_EXECUTION_OUTPUT_FILES], start=1):
|
|
178
|
+
digest, size = _hash_regular_file(path)
|
|
179
|
+
relative_path = path.relative_to(execution_root).as_posix()
|
|
180
|
+
role = _EXECUTION_OUTPUT_ROLE_BY_SUFFIX.get(path.suffix.lower(), "output")
|
|
181
|
+
artifact_id = (
|
|
182
|
+
"art_"
|
|
183
|
+
+ hashlib.sha256(f"{execution_id}:{relative_path}".encode()).hexdigest()
|
|
184
|
+
)
|
|
185
|
+
events.append(
|
|
186
|
+
{
|
|
187
|
+
"schema_version": ARTIFACT_EVENT_SCHEMA,
|
|
188
|
+
"package_name": "jarvis.execution",
|
|
189
|
+
"package_id": "jarvis.execution",
|
|
190
|
+
"execution_id": execution_id,
|
|
191
|
+
"artifact_id": artifact_id,
|
|
192
|
+
"logical_name": relative_path,
|
|
193
|
+
"kind": "execution-file",
|
|
194
|
+
"role": role,
|
|
195
|
+
"structure": "file",
|
|
196
|
+
"ownership": "execution",
|
|
197
|
+
"state": "finalized",
|
|
198
|
+
"location": {"kind": "execution_path", "value": relative_path},
|
|
199
|
+
"size_bytes": size,
|
|
200
|
+
"checksum": f"sha256:{digest}",
|
|
201
|
+
"revision": 1,
|
|
202
|
+
"sequence": sequence,
|
|
203
|
+
"observed_at_epoch": observed,
|
|
204
|
+
"metadata": {"discovery": "execution-root-direct-file"},
|
|
205
|
+
}
|
|
206
|
+
)
|
|
207
|
+
|
|
208
|
+
truncation = None
|
|
209
|
+
if len(candidates) > MAX_EXECUTION_OUTPUT_FILES:
|
|
210
|
+
truncation = {
|
|
211
|
+
"schema_version": _EXECUTION_OUTPUT_TRUNCATION_SCHEMA,
|
|
212
|
+
"limit": MAX_EXECUTION_OUTPUT_FILES,
|
|
213
|
+
"observed_count": len(candidates),
|
|
214
|
+
"omitted_count": len(candidates) - MAX_EXECUTION_OUTPUT_FILES,
|
|
215
|
+
}
|
|
216
|
+
events.append(
|
|
217
|
+
{
|
|
218
|
+
"schema_version": ARTIFACT_EVENT_SCHEMA,
|
|
219
|
+
"package_name": "jarvis.execution",
|
|
220
|
+
"package_id": "jarvis.execution",
|
|
221
|
+
"execution_id": execution_id,
|
|
222
|
+
"artifact_id": "art_"
|
|
223
|
+
+ hashlib.sha256(
|
|
224
|
+
f"{execution_id}:execution-output-truncation".encode()
|
|
225
|
+
).hexdigest(),
|
|
226
|
+
"logical_name": "__execution-output-truncation__",
|
|
227
|
+
"kind": "execution-output-truncation",
|
|
228
|
+
"role": "validation",
|
|
229
|
+
"structure": "file",
|
|
230
|
+
"ownership": "execution",
|
|
231
|
+
"state": "failed",
|
|
232
|
+
"revision": 1,
|
|
233
|
+
"sequence": len(events) + 1,
|
|
234
|
+
"observed_at_epoch": observed,
|
|
235
|
+
"message": "execution output file declaration cap exceeded",
|
|
236
|
+
"metadata": truncation,
|
|
237
|
+
}
|
|
238
|
+
)
|
|
239
|
+
return events, truncation
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
def _hash_regular_file(path: Path) -> tuple[str, int]:
|
|
243
|
+
"""Hash one stable regular file without retaining its content."""
|
|
244
|
+
digest = hashlib.sha256()
|
|
245
|
+
size = 0
|
|
246
|
+
with path.open("rb") as stream:
|
|
247
|
+
before = path.stat()
|
|
248
|
+
while chunk := stream.read(1024 * 1024):
|
|
249
|
+
digest.update(chunk)
|
|
250
|
+
size += len(chunk)
|
|
251
|
+
after = path.stat()
|
|
252
|
+
if not stat.S_ISREG(before.st_mode) or not stat.S_ISREG(after.st_mode):
|
|
253
|
+
raise RuntimeError("execution output changed from a regular file")
|
|
254
|
+
if before.st_size != size or after.st_size != size:
|
|
255
|
+
raise RuntimeError("execution output changed while hashing")
|
|
256
|
+
return digest.hexdigest(), size
|
|
257
|
+
|
|
258
|
+
|
|
113
259
|
def artifact_snapshot_document(
|
|
114
260
|
snapshot: object,
|
|
115
261
|
*,
|
|
@@ -194,12 +340,24 @@ def artifact_query_page(
|
|
|
194
340
|
artifact_id: str | None = None,
|
|
195
341
|
page_size: int = ARTIFACT_DEFAULT_PAGE_SIZE,
|
|
196
342
|
cursor: str | None = None,
|
|
343
|
+
content_max_bytes: int | None = None,
|
|
344
|
+
execution_root: Path | None = None,
|
|
197
345
|
) -> dict[str, Any]:
|
|
198
346
|
"""Filter and page one previously validated native artifact snapshot.
|
|
199
347
|
|
|
200
348
|
Cursors bind the exact filters and a digest of the filtered producer
|
|
201
349
|
snapshot. A changed artifact, execution state, or terminal flag makes an
|
|
202
350
|
existing cursor stale instead of silently shifting an offset-based page.
|
|
351
|
+
|
|
352
|
+
``content_max_bytes`` is a response-enrichment knob, not a filter: it is
|
|
353
|
+
deliberately excluded from the cursor's filter digest so a cursor minted
|
|
354
|
+
without it stays valid on a follow-up call that requests it (or vice
|
|
355
|
+
versa). When set, every ``role="log"`` artifact in the returned page gets
|
|
356
|
+
a bounded tail read of its own file (``content``/``content_truncated``/
|
|
357
|
+
``content_bytes_read``); every other artifact, and every log artifact
|
|
358
|
+
whose content could not be resolved, gets a typed ``content_error``
|
|
359
|
+
instead -- never a silent omission, never a page-wide failure for one
|
|
360
|
+
unreadable file.
|
|
203
361
|
"""
|
|
204
362
|
_validate_query_filters(
|
|
205
363
|
package_id=package_id,
|
|
@@ -207,6 +365,7 @@ def artifact_query_page(
|
|
|
207
365
|
state=state,
|
|
208
366
|
artifact_id=artifact_id,
|
|
209
367
|
page_size=page_size,
|
|
368
|
+
content_max_bytes=content_max_bytes,
|
|
210
369
|
)
|
|
211
370
|
filters = {
|
|
212
371
|
"package_id": package_id,
|
|
@@ -309,6 +468,13 @@ def artifact_query_page(
|
|
|
309
468
|
filter_digest=filter_digest,
|
|
310
469
|
snapshot_digest=snapshot_digest,
|
|
311
470
|
)
|
|
471
|
+
if content_max_bytes is not None:
|
|
472
|
+
page = [
|
|
473
|
+
artifact_with_content(
|
|
474
|
+
item, execution_root=execution_root, max_bytes=content_max_bytes
|
|
475
|
+
)
|
|
476
|
+
for item in page
|
|
477
|
+
]
|
|
312
478
|
return {
|
|
313
479
|
"producer_schema_version": snapshot["schema_version"],
|
|
314
480
|
"pipeline_id": snapshot["pipeline_id"],
|
|
@@ -329,7 +495,18 @@ def _validate_query_filters(
|
|
|
329
495
|
state: str | None,
|
|
330
496
|
artifact_id: str | None,
|
|
331
497
|
page_size: int,
|
|
498
|
+
content_max_bytes: int | None = None,
|
|
332
499
|
) -> None:
|
|
500
|
+
if content_max_bytes is not None and (
|
|
501
|
+
isinstance(content_max_bytes, bool)
|
|
502
|
+
or not isinstance(content_max_bytes, int)
|
|
503
|
+
or not 1 <= content_max_bytes <= ARTIFACT_MAX_CONTENT_BYTES
|
|
504
|
+
):
|
|
505
|
+
raise ArtifactQueryError(
|
|
506
|
+
"jarvis_artifact_content_max_bytes_invalid",
|
|
507
|
+
f"JARVIS artifact content_max_bytes must be between 1 and "
|
|
508
|
+
f"{ARTIFACT_MAX_CONTENT_BYTES}",
|
|
509
|
+
)
|
|
333
510
|
if package_id is not None:
|
|
334
511
|
try:
|
|
335
512
|
_validate_text(package_id, field="package_id filter", maximum=256)
|
|
@@ -3,12 +3,12 @@ Jarvis MCP Server
|
|
|
3
3
|
|
|
4
4
|
Jarvis-CD MCP - Pipeline Management for High-Performance Computing with comprehensive workflow operations
|
|
5
5
|
|
|
6
|
-
Version: 3.
|
|
6
|
+
Version: 3.7.1
|
|
7
7
|
Author: IoWarp Team - Gnosis Research Center
|
|
8
8
|
License: BSD-3-Clause
|
|
9
9
|
"""
|
|
10
10
|
|
|
11
|
-
__version__ = "3.
|
|
11
|
+
__version__ = "3.7.1"
|
|
12
12
|
__author__ = "IoWarp Team - Gnosis Research Center"
|
|
13
13
|
__email__ = "grc@illinoistech.edu"
|
|
14
14
|
__license__ = "BSD-3-Clause"
|
|
@@ -25,11 +25,13 @@ from uuid import uuid4
|
|
|
25
25
|
from fastapi import HTTPException
|
|
26
26
|
from fastmcp.exceptions import ToolError
|
|
27
27
|
|
|
28
|
+
from jarvis_mcp.artifact_content import execution_root_from_record
|
|
28
29
|
from jarvis_mcp.artifacts import (
|
|
29
30
|
ArtifactQueryError,
|
|
30
31
|
ArtifactSnapshotError,
|
|
31
32
|
artifact_query_page,
|
|
32
33
|
artifact_snapshot_document,
|
|
34
|
+
execution_output_artifact_events,
|
|
33
35
|
)
|
|
34
36
|
from jarvis_mcp.progress import (
|
|
35
37
|
NativeProgressExecution,
|
|
@@ -37,7 +39,6 @@ from jarvis_mcp.progress import (
|
|
|
37
39
|
progress_snapshot_document,
|
|
38
40
|
)
|
|
39
41
|
|
|
40
|
-
|
|
41
42
|
RUNTIME_METADATA_SCHEMA = "jarvis.runtime.v1"
|
|
42
43
|
RUNTIME_ERROR_SCHEMA = "jarvis.error.v1"
|
|
43
44
|
RUN_RESULT_SCHEMA = "clio-kit.jarvis-run.v1"
|
|
@@ -891,6 +892,25 @@ async def get_execution(
|
|
|
891
892
|
expected_execution_id=validated_execution,
|
|
892
893
|
expected_pipeline_id=validated_pipeline,
|
|
893
894
|
)
|
|
895
|
+
if artifact_snapshot is not None and record_document["terminal"]:
|
|
896
|
+
execution_root = execution_root_from_record(record_document)
|
|
897
|
+
if execution_root is not None:
|
|
898
|
+
discovered, _truncation = execution_output_artifact_events(
|
|
899
|
+
execution_root,
|
|
900
|
+
execution_id=validated_execution,
|
|
901
|
+
)
|
|
902
|
+
if discovered:
|
|
903
|
+
artifact_snapshot = artifact_snapshot_document(
|
|
904
|
+
{
|
|
905
|
+
**artifact_snapshot,
|
|
906
|
+
"artifacts": [
|
|
907
|
+
*artifact_snapshot["artifacts"],
|
|
908
|
+
*discovered,
|
|
909
|
+
],
|
|
910
|
+
},
|
|
911
|
+
expected_execution_id=validated_execution,
|
|
912
|
+
expected_pipeline_id=validated_pipeline,
|
|
913
|
+
)
|
|
894
914
|
handle_document = _execution_handle_document(
|
|
895
915
|
getattr(record, "handle", None),
|
|
896
916
|
expected_execution_id=validated_execution,
|
|
@@ -923,6 +943,7 @@ async def get_execution(
|
|
|
923
943
|
if artifacts is not None:
|
|
924
944
|
if artifact_snapshot is None:
|
|
925
945
|
raise RuntimeError("JARVIS artifact query omitted its snapshot")
|
|
946
|
+
content_max_bytes = artifacts.get("content_max_bytes")
|
|
926
947
|
artifact_page = artifact_query_page(
|
|
927
948
|
artifact_snapshot,
|
|
928
949
|
package_id=artifacts.get("package_id"),
|
|
@@ -931,6 +952,12 @@ async def get_execution(
|
|
|
931
952
|
artifact_id=artifacts.get("artifact_id"),
|
|
932
953
|
page_size=artifacts.get("page_size", 50),
|
|
933
954
|
cursor=artifacts.get("cursor"),
|
|
955
|
+
content_max_bytes=content_max_bytes,
|
|
956
|
+
execution_root=(
|
|
957
|
+
execution_root_from_record(record_document)
|
|
958
|
+
if content_max_bytes is not None
|
|
959
|
+
else None
|
|
960
|
+
),
|
|
934
961
|
)
|
|
935
962
|
query_submit, query_wait = _execution_query_flags(record_document)
|
|
936
963
|
runtime_metadata = _runtime_metadata_from_documents(
|