imas-codex 5.0.0rc1__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.
- imas_codex-5.0.0rc1/.claude/agents/facility-explorer.md +65 -0
- imas_codex-5.0.0rc1/.claude/agents/graph-querier.md +58 -0
- imas_codex-5.0.0rc1/.claude/settings.json +21 -0
- imas_codex-5.0.0rc1/.claude/skills/facility-access.md +86 -0
- imas_codex-5.0.0rc1/.claude/skills/graph-queries.md +60 -0
- imas_codex-5.0.0rc1/.claude/skills/mapping-workflow.md +67 -0
- imas_codex-5.0.0rc1/.claude/skills/schema-summary.md +123 -0
- imas_codex-5.0.0rc1/.cursor/mcp.json +12 -0
- imas_codex-5.0.0rc1/.dockerignore +57 -0
- imas_codex-5.0.0rc1/.github/agents/develop.agent.md +41 -0
- imas_codex-5.0.0rc1/.github/agents/explore.agent.md +48 -0
- imas_codex-5.0.0rc1/.github/agents/graph.agent.md +58 -0
- imas_codex-5.0.0rc1/.github/agents/ingest.agent.md +50 -0
- imas_codex-5.0.0rc1/.github/prompts/commit.prompt.md +33 -0
- imas_codex-5.0.0rc1/.github/prompts/gaps.prompt.md +143 -0
- imas_codex-5.0.0rc1/.github/prompts/mcp_tool.prompt.md +20 -0
- imas_codex-5.0.0rc1/.github/prompts/plan_remote_agent.prompt.md +10 -0
- imas_codex-5.0.0rc1/.github/prompts/update-plan.prompt.md +66 -0
- imas_codex-5.0.0rc1/.github/workflows/benchmark.yml +362 -0
- imas_codex-5.0.0rc1/.github/workflows/container-cleanup.yml +113 -0
- imas_codex-5.0.0rc1/.github/workflows/docker-build-push.yml +243 -0
- imas_codex-5.0.0rc1/.github/workflows/graph-quality.yml +217 -0
- imas_codex-5.0.0rc1/.github/workflows/release.yml +93 -0
- imas_codex-5.0.0rc1/.github/workflows/test.yml +154 -0
- imas_codex-5.0.0rc1/.gitignore +88 -0
- imas_codex-5.0.0rc1/.gitleaks.toml +7 -0
- imas_codex-5.0.0rc1/.nojekyll +0 -0
- imas_codex-5.0.0rc1/.pre-commit-config.yaml +34 -0
- imas_codex-5.0.0rc1/.vscode/instructions.json +10 -0
- imas_codex-5.0.0rc1/.vscode/mcp.json +10 -0
- imas_codex-5.0.0rc1/.vscode/settings.json +67 -0
- imas_codex-5.0.0rc1/.vscode/toolsets.jsonc +100 -0
- imas_codex-5.0.0rc1/AGENTS.md +875 -0
- imas_codex-5.0.0rc1/CLAUDE.md +29 -0
- imas_codex-5.0.0rc1/DOCKER.md +369 -0
- imas_codex-5.0.0rc1/Dockerfile +228 -0
- imas_codex-5.0.0rc1/Makefile +114 -0
- imas_codex-5.0.0rc1/PKG-INFO +1094 -0
- imas_codex-5.0.0rc1/README.md +1024 -0
- imas_codex-5.0.0rc1/WIKI_SCRAPING_SETUP.md +329 -0
- imas_codex-5.0.0rc1/__main__.py +128 -0
- imas_codex-5.0.0rc1/agents/README.md +86 -0
- imas_codex-5.0.0rc1/agents/develop.md +52 -0
- imas_codex-5.0.0rc1/agents/explore.md +263 -0
- imas_codex-5.0.0rc1/agents/graph.md +140 -0
- imas_codex-5.0.0rc1/agents/ingest.md +131 -0
- imas_codex-5.0.0rc1/agents/onboard.md +412 -0
- imas_codex-5.0.0rc1/asv.conf.json +32 -0
- imas_codex-5.0.0rc1/benchmarks/README.md +81 -0
- imas_codex-5.0.0rc1/benchmarks/__init__.py +7 -0
- imas_codex-5.0.0rc1/benchmarks/bench_embeddings.py +80 -0
- imas_codex-5.0.0rc1/benchmarks/bench_graph_queries.py +132 -0
- imas_codex-5.0.0rc1/benchmarks/bench_mcp_facility_tools.py +132 -0
- imas_codex-5.0.0rc1/benchmarks/bench_mcp_imas_tools.py +133 -0
- imas_codex-5.0.0rc1/benchmarks/bench_mcp_search.py +105 -0
- imas_codex-5.0.0rc1/benchmarks/bench_memory.py +64 -0
- imas_codex-5.0.0rc1/benchmarks/bench_query_builder.py +64 -0
- imas_codex-5.0.0rc1/benchmarks/bench_server_startup.py +52 -0
- imas_codex-5.0.0rc1/benchmarks/bench_subsystems.py +130 -0
- imas_codex-5.0.0rc1/benchmarks/benchmark_runner.py +194 -0
- imas_codex-5.0.0rc1/benchmarks/conftest_bench.py +87 -0
- imas_codex-5.0.0rc1/docker-compose.yml +74 -0
- imas_codex-5.0.0rc1/docker-entrypoint.sh +68 -0
- imas_codex-5.0.0rc1/docs/README.md +20 -0
- imas_codex-5.0.0rc1/docs/api/REPL_API.md +375 -0
- imas_codex-5.0.0rc1/docs/architecture/cocos-validation.md +419 -0
- imas_codex-5.0.0rc1/docs/architecture/cocos.md +230 -0
- imas_codex-5.0.0rc1/docs/architecture/discovery.md +555 -0
- imas_codex-5.0.0rc1/docs/architecture/facility-access.md +680 -0
- imas_codex-5.0.0rc1/docs/architecture/graph-profiles.md +209 -0
- imas_codex-5.0.0rc1/docs/architecture/graph.md +214 -0
- imas_codex-5.0.0rc1/docs/architecture/ids-mapping.md +227 -0
- imas_codex-5.0.0rc1/docs/architecture/imas_dd.md +89 -0
- imas_codex-5.0.0rc1/docs/architecture/keyring.md +314 -0
- imas_codex-5.0.0rc1/docs/architecture/llamaindex-agents.md +97 -0
- imas_codex-5.0.0rc1/docs/architecture/mdsplus.md +101 -0
- imas_codex-5.0.0rc1/docs/architecture/services.md +213 -0
- imas_codex-5.0.0rc1/docs/architecture/signals.md +341 -0
- imas_codex-5.0.0rc1/docs/architecture/wiki.md +193 -0
- imas_codex-5.0.0rc1/docs/images/imas_dd_evolution.png +0 -0
- imas_codex-5.0.0rc1/docs/images/jet_component_overview.png +0 -0
- imas_codex-5.0.0rc1/docs/images/jet_composite_geometry.png +0 -0
- imas_codex-5.0.0rc1/docs/images/jet_epoch_evolution.png +0 -0
- imas_codex-5.0.0rc1/docs/images/jet_epoch_summary.png +0 -0
- imas_codex-5.0.0rc1/docs/images/jet_evolution.gif +0 -0
- imas_codex-5.0.0rc1/docs/images/jet_limiter_comparison.png +0 -0
- imas_codex-5.0.0rc1/docs/images/jet_limiter_contours.png +0 -0
- imas_codex-5.0.0rc1/docs/images/jet_limiter_epochs.png +0 -0
- imas_codex-5.0.0rc1/docs/images/jet_machine_description_poloidal.png +0 -0
- imas_codex-5.0.0rc1/docs/images/jet_magnetics_evolution.png +0 -0
- imas_codex-5.0.0rc1/docs/images/jet_passive_circuit_evolution.png +0 -0
- imas_codex-5.0.0rc1/docs/images/jet_pf_coil_evolution.png +0 -0
- imas_codex-5.0.0rc1/docs/images/jet_poloidal_p68613.png +0 -0
- imas_codex-5.0.0rc1/docs/images/jet_poloidal_p79854.png +0 -0
- imas_codex-5.0.0rc1/docs/images/jet_poloidal_p89440.png +0 -0
- imas_codex-5.0.0rc1/docs/images/jet_wall_limiter_evolution.png +0 -0
- imas_codex-5.0.0rc1/docs/zellij-quickstart.md +212 -0
- imas_codex-5.0.0rc1/env.example +47 -0
- imas_codex-5.0.0rc1/hatch_build_hooks.py +367 -0
- imas_codex-5.0.0rc1/imas_codex/__init__.py +160 -0
- imas_codex-5.0.0rc1/imas_codex/__main__.py +38 -0
- imas_codex-5.0.0rc1/imas_codex/cli/README.md +62 -0
- imas_codex-5.0.0rc1/imas_codex/cli/__init__.py +95 -0
- imas_codex-5.0.0rc1/imas_codex/cli/compute.py +609 -0
- imas_codex-5.0.0rc1/imas_codex/cli/config_cli.py +606 -0
- imas_codex-5.0.0rc1/imas_codex/cli/credentials.py +581 -0
- imas_codex-5.0.0rc1/imas_codex/cli/discover/__init__.py +477 -0
- imas_codex-5.0.0rc1/imas_codex/cli/discover/code.py +351 -0
- imas_codex-5.0.0rc1/imas_codex/cli/discover/common.py +489 -0
- imas_codex-5.0.0rc1/imas_codex/cli/discover/documents.py +266 -0
- imas_codex-5.0.0rc1/imas_codex/cli/discover/paths.py +763 -0
- imas_codex-5.0.0rc1/imas_codex/cli/discover/signals.py +429 -0
- imas_codex-5.0.0rc1/imas_codex/cli/discover/wiki.py +1213 -0
- imas_codex-5.0.0rc1/imas_codex/cli/embed.py +755 -0
- imas_codex-5.0.0rc1/imas_codex/cli/facilities.py +95 -0
- imas_codex-5.0.0rc1/imas_codex/cli/graph/__init__.py +95 -0
- imas_codex-5.0.0rc1/imas_codex/cli/graph/data.py +1210 -0
- imas_codex-5.0.0rc1/imas_codex/cli/graph/registry.py +932 -0
- imas_codex-5.0.0rc1/imas_codex/cli/graph/server.py +473 -0
- imas_codex-5.0.0rc1/imas_codex/cli/graph_progress.py +319 -0
- imas_codex-5.0.0rc1/imas_codex/cli/host.py +1592 -0
- imas_codex-5.0.0rc1/imas_codex/cli/imas_dd.py +1188 -0
- imas_codex-5.0.0rc1/imas_codex/cli/llm_cli.py +879 -0
- imas_codex-5.0.0rc1/imas_codex/cli/logging.py +638 -0
- imas_codex-5.0.0rc1/imas_codex/cli/map.py +962 -0
- imas_codex-5.0.0rc1/imas_codex/cli/release.py +382 -0
- imas_codex-5.0.0rc1/imas_codex/cli/rich_output.py +51 -0
- imas_codex-5.0.0rc1/imas_codex/cli/serve.py +93 -0
- imas_codex-5.0.0rc1/imas_codex/cli/services.py +1617 -0
- imas_codex-5.0.0rc1/imas_codex/cli/shutdown.py +307 -0
- imas_codex-5.0.0rc1/imas_codex/cli/tools.py +615 -0
- imas_codex-5.0.0rc1/imas_codex/cli/tunnel.py +1014 -0
- imas_codex-5.0.0rc1/imas_codex/cli/utils.py +184 -0
- imas_codex-5.0.0rc1/imas_codex/cli/wiki.py +343 -0
- imas_codex-5.0.0rc1/imas_codex/clusters/__init__.py +30 -0
- imas_codex-5.0.0rc1/imas_codex/clusters/clustering.py +270 -0
- imas_codex-5.0.0rc1/imas_codex/clusters/config.py +78 -0
- imas_codex-5.0.0rc1/imas_codex/clusters/extractor.py +927 -0
- imas_codex-5.0.0rc1/imas_codex/clusters/hierarchical.py +284 -0
- imas_codex-5.0.0rc1/imas_codex/clusters/label_cache.py +554 -0
- imas_codex-5.0.0rc1/imas_codex/clusters/labeler.py +332 -0
- imas_codex-5.0.0rc1/imas_codex/clusters/models.py +311 -0
- imas_codex-5.0.0rc1/imas_codex/clusters/preprocessing.py +136 -0
- imas_codex-5.0.0rc1/imas_codex/clusters/search.py +486 -0
- imas_codex-5.0.0rc1/imas_codex/cocos/__init__.py +52 -0
- imas_codex-5.0.0rc1/imas_codex/cocos/calculator.py +433 -0
- imas_codex-5.0.0rc1/imas_codex/cocos/loaders.py +208 -0
- imas_codex-5.0.0rc1/imas_codex/cocos/transforms.py +80 -0
- imas_codex-5.0.0rc1/imas_codex/config/README.md +500 -0
- imas_codex-5.0.0rc1/imas_codex/config/discovery_config.py +584 -0
- imas_codex-5.0.0rc1/imas_codex/config/facilities/iter.yaml +137 -0
- imas_codex-5.0.0rc1/imas_codex/config/facilities/jet.yaml +815 -0
- imas_codex-5.0.0rc1/imas_codex/config/facilities/jt-60sa.yaml +262 -0
- imas_codex-5.0.0rc1/imas_codex/config/facilities/tcv.yaml +293 -0
- imas_codex-5.0.0rc1/imas_codex/config/graph.yaml +40 -0
- imas_codex-5.0.0rc1/imas_codex/config/hosts.yaml +46 -0
- imas_codex-5.0.0rc1/imas_codex/config/litellm_config.yaml +65 -0
- imas_codex-5.0.0rc1/imas_codex/config/patterns/discovery.yaml +28 -0
- imas_codex-5.0.0rc1/imas_codex/config/patterns/exclude.yaml +290 -0
- imas_codex-5.0.0rc1/imas_codex/config/patterns/file_types.yaml +126 -0
- imas_codex-5.0.0rc1/imas_codex/config/patterns/scoring/base.yaml +65 -0
- imas_codex-5.0.0rc1/imas_codex/config/patterns/scoring/data_systems.yaml +132 -0
- imas_codex-5.0.0rc1/imas_codex/config/patterns/scoring/physics.yaml +178 -0
- imas_codex-5.0.0rc1/imas_codex/config/prompt_caching.yaml +10 -0
- imas_codex-5.0.0rc1/imas_codex/config/remote_tools.yaml +270 -0
- imas_codex-5.0.0rc1/imas_codex/config/services/imas-codex-db.service +60 -0
- imas_codex-5.0.0rc1/imas_codex/config/services/imas-codex-embed-tunnel.service +38 -0
- imas_codex-5.0.0rc1/imas_codex/config/services/imas-codex-embed.service +46 -0
- imas_codex-5.0.0rc1/imas_codex/core/__init__.py +1 -0
- imas_codex-5.0.0rc1/imas_codex/core/clusters.py +637 -0
- imas_codex-5.0.0rc1/imas_codex/core/data_model.py +243 -0
- imas_codex-5.0.0rc1/imas_codex/core/exclusions.py +136 -0
- imas_codex-5.0.0rc1/imas_codex/core/extractors/__init__.py +21 -0
- imas_codex-5.0.0rc1/imas_codex/core/extractors/base.py +176 -0
- imas_codex-5.0.0rc1/imas_codex/core/extractors/coordinate_extractor.py +50 -0
- imas_codex-5.0.0rc1/imas_codex/core/extractors/identifier_extractor.py +299 -0
- imas_codex-5.0.0rc1/imas_codex/core/extractors/metadata_extractor.py +220 -0
- imas_codex-5.0.0rc1/imas_codex/core/extractors/physics_extractor.py +26 -0
- imas_codex-5.0.0rc1/imas_codex/core/extractors/semantic_extractor.py +85 -0
- imas_codex-5.0.0rc1/imas_codex/core/extractors/validation_extractor.py +41 -0
- imas_codex-5.0.0rc1/imas_codex/core/paths.py +33 -0
- imas_codex-5.0.0rc1/imas_codex/core/physics_categorization.py +133 -0
- imas_codex-5.0.0rc1/imas_codex/core/progress_monitor.py +414 -0
- imas_codex-5.0.0rc1/imas_codex/core/unit_loader.py +115 -0
- imas_codex-5.0.0rc1/imas_codex/core/xml_parser.py +693 -0
- imas_codex-5.0.0rc1/imas_codex/core/xml_utils.py +205 -0
- imas_codex-5.0.0rc1/imas_codex/dd_accessor.py +385 -0
- imas_codex-5.0.0rc1/imas_codex/definitions/README.md +132 -0
- imas_codex-5.0.0rc1/imas_codex/definitions/__init__.py +38 -0
- imas_codex-5.0.0rc1/imas_codex/definitions/clusters/__init__.py +33 -0
- imas_codex-5.0.0rc1/imas_codex/definitions/clusters/concepts.yaml +616 -0
- imas_codex-5.0.0rc1/imas_codex/definitions/clusters/data_types.yaml +96 -0
- imas_codex-5.0.0rc1/imas_codex/definitions/clusters/labels.json +52262 -0
- imas_codex-5.0.0rc1/imas_codex/definitions/clusters/mapping_relevance.yaml +56 -0
- imas_codex-5.0.0rc1/imas_codex/definitions/clusters/proposed_terms.json +8399 -0
- imas_codex-5.0.0rc1/imas_codex/definitions/clusters/tags.yaml +151 -0
- imas_codex-5.0.0rc1/imas_codex/definitions/physics/__init__.py +11 -0
- imas_codex-5.0.0rc1/imas_codex/definitions/physics/domains.yaml +345 -0
- imas_codex-5.0.0rc1/imas_codex/definitions/physics/ids_domains.json +156 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/README.md +655 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/__init__.py +81 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/base/__init__.py +204 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/base/claims.py +214 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/base/embed_worker.py +819 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/base/engine.py +223 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/base/executor.py +309 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/base/facility.py +464 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/base/grouping.py +300 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/base/image.py +805 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/base/imas_patterns.py +303 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/base/llm.py +914 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/base/progress.py +2256 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/base/reset.py +430 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/base/scoring.py +202 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/base/services.py +965 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/base/state.py +104 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/base/supervision.py +1143 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/base/transfer.py +753 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/code/__init__.py +43 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/code/enrichment.py +240 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/code/graph_ops.py +901 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/code/parallel.py +492 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/code/progress.py +1145 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/code/scanner.py +717 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/code/scorer.py +651 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/code/state.py +65 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/code/workers.py +1140 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/documents/__init__.py +30 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/documents/pipeline.py +155 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/documents/scanner.py +389 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/documents/workers.py +439 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/mdsplus/__init__.py +16 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/mdsplus/enrichment.py +169 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/mdsplus/epochs.py +146 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/mdsplus/graph_ops.py +2063 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/mdsplus/pipeline.py +214 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/mdsplus/state.py +47 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/mdsplus/tdi_linkage.py +165 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/mdsplus/workers.py +383 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/paths/__init__.py +67 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/paths/enrichment.py +638 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/paths/frontier.py +3477 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/paths/models.py +424 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/paths/orcid.py +407 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/paths/parallel.py +3313 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/paths/progress.py +1627 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/paths/scanner.py +599 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/paths/scorer.py +681 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/paths/users.py +375 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/signals/README.md +276 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/signals/__init__.py +42 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/signals/models.py +261 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/signals/parallel.py +5209 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/signals/progress.py +1055 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/signals/scanners/__init__.py +51 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/signals/scanners/base.py +265 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/signals/scanners/device_xml.py +2827 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/signals/scanners/edas.py +284 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/signals/scanners/imas.py +109 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/signals/scanners/jpf.py +282 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/signals/scanners/mdsplus.py +486 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/signals/scanners/ppf.py +370 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/signals/scanners/tdi.py +173 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/signals/scanners/wiki.py +474 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/signals/tdi.py +607 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/static/__init__.py +1 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/static/graph_ops.py +11 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/static/parallel.py +226 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/static/state.py +44 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/static/workers.py +775 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/wiki/__init__.py +125 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/wiki/adapters.py +3370 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/wiki/auth.py +914 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/wiki/config.py +154 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/wiki/confluence.py +1293 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/wiki/entity_extraction.py +433 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/wiki/excel.py +346 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/wiki/graph_ops.py +1886 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/wiki/image.py +48 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/wiki/keycloak.py +271 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/wiki/mediawiki.py +1363 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/wiki/models.py +597 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/wiki/monitor.py +791 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/wiki/parallel.py +1279 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/wiki/pipeline.py +2469 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/wiki/prefetch.py +84 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/wiki/progress.py +1648 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/wiki/scoring.py +1040 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/wiki/scraper.py +527 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/wiki/state.py +855 -0
- imas_codex-5.0.0rc1/imas_codex/discovery/wiki/workers.py +2024 -0
- imas_codex-5.0.0rc1/imas_codex/embeddings/__init__.py +44 -0
- imas_codex-5.0.0rc1/imas_codex/embeddings/cache.py +201 -0
- imas_codex-5.0.0rc1/imas_codex/embeddings/client.py +351 -0
- imas_codex-5.0.0rc1/imas_codex/embeddings/config.py +139 -0
- imas_codex-5.0.0rc1/imas_codex/embeddings/description.py +132 -0
- imas_codex-5.0.0rc1/imas_codex/embeddings/embed.py +109 -0
- imas_codex-5.0.0rc1/imas_codex/embeddings/embeddings.py +183 -0
- imas_codex-5.0.0rc1/imas_codex/embeddings/encoder.py +779 -0
- imas_codex-5.0.0rc1/imas_codex/embeddings/openrouter_client.py +156 -0
- imas_codex-5.0.0rc1/imas_codex/embeddings/openrouter_embed.py +594 -0
- imas_codex-5.0.0rc1/imas_codex/embeddings/readiness.py +253 -0
- imas_codex-5.0.0rc1/imas_codex/embeddings/resilience.py +179 -0
- imas_codex-5.0.0rc1/imas_codex/embeddings/server.py +786 -0
- imas_codex-5.0.0rc1/imas_codex/graph/README.md +226 -0
- imas_codex-5.0.0rc1/imas_codex/graph/__init__.py +109 -0
- imas_codex-5.0.0rc1/imas_codex/graph/_ensure_models.py +106 -0
- imas_codex-5.0.0rc1/imas_codex/graph/build_dd.py +3589 -0
- imas_codex-5.0.0rc1/imas_codex/graph/client.py +968 -0
- imas_codex-5.0.0rc1/imas_codex/graph/dd_enrichment.py +893 -0
- imas_codex-5.0.0rc1/imas_codex/graph/dd_graph_ops.py +466 -0
- imas_codex-5.0.0rc1/imas_codex/graph/dd_identifier_enrichment.py +404 -0
- imas_codex-5.0.0rc1/imas_codex/graph/dd_ids_enrichment.py +523 -0
- imas_codex-5.0.0rc1/imas_codex/graph/dd_progress.py +258 -0
- imas_codex-5.0.0rc1/imas_codex/graph/dd_workers.py +1087 -0
- imas_codex-5.0.0rc1/imas_codex/graph/dirs.py +322 -0
- imas_codex-5.0.0rc1/imas_codex/graph/domain_queries.py +704 -0
- imas_codex-5.0.0rc1/imas_codex/graph/formatters.py +95 -0
- imas_codex-5.0.0rc1/imas_codex/graph/ghcr.py +624 -0
- imas_codex-5.0.0rc1/imas_codex/graph/health.py +137 -0
- imas_codex-5.0.0rc1/imas_codex/graph/meta.py +267 -0
- imas_codex-5.0.0rc1/imas_codex/graph/neo4j_ops.py +839 -0
- imas_codex-5.0.0rc1/imas_codex/graph/profiles.py +627 -0
- imas_codex-5.0.0rc1/imas_codex/graph/query_builder.py +236 -0
- imas_codex-5.0.0rc1/imas_codex/graph/remote.py +1243 -0
- imas_codex-5.0.0rc1/imas_codex/graph/schema.py +792 -0
- imas_codex-5.0.0rc1/imas_codex/graph/schema_context.py +287 -0
- imas_codex-5.0.0rc1/imas_codex/graph/temp_neo4j.py +354 -0
- imas_codex-5.0.0rc1/imas_codex/graph_analyzer.py +287 -0
- imas_codex-5.0.0rc1/imas_codex/ids/__init__.py +21 -0
- imas_codex-5.0.0rc1/imas_codex/ids/assembler.py +566 -0
- imas_codex-5.0.0rc1/imas_codex/ids/codegen.py +409 -0
- imas_codex-5.0.0rc1/imas_codex/ids/graph_ops.py +490 -0
- imas_codex-5.0.0rc1/imas_codex/ids/mapping.py +1791 -0
- imas_codex-5.0.0rc1/imas_codex/ids/models.py +559 -0
- imas_codex-5.0.0rc1/imas_codex/ids/progress.py +418 -0
- imas_codex-5.0.0rc1/imas_codex/ids/recipes/jet/pf_active.yaml +87 -0
- imas_codex-5.0.0rc1/imas_codex/ids/tools.py +959 -0
- imas_codex-5.0.0rc1/imas_codex/ids/transforms.py +166 -0
- imas_codex-5.0.0rc1/imas_codex/ids/validation.py +945 -0
- imas_codex-5.0.0rc1/imas_codex/ids/workers.py +967 -0
- imas_codex-5.0.0rc1/imas_codex/ingestion/__init__.py +61 -0
- imas_codex-5.0.0rc1/imas_codex/ingestion/chunkers.py +197 -0
- imas_codex-5.0.0rc1/imas_codex/ingestion/extractors/__init__.py +21 -0
- imas_codex-5.0.0rc1/imas_codex/ingestion/extractors/ids.py +50 -0
- imas_codex-5.0.0rc1/imas_codex/ingestion/extractors/mdsplus.py +152 -0
- imas_codex-5.0.0rc1/imas_codex/ingestion/extractors/units.py +101 -0
- imas_codex-5.0.0rc1/imas_codex/ingestion/graph.py +543 -0
- imas_codex-5.0.0rc1/imas_codex/ingestion/pipeline.py +584 -0
- imas_codex-5.0.0rc1/imas_codex/ingestion/queue.py +276 -0
- imas_codex-5.0.0rc1/imas_codex/ingestion/readers/__init__.py +22 -0
- imas_codex-5.0.0rc1/imas_codex/ingestion/readers/remote.py +313 -0
- imas_codex-5.0.0rc1/imas_codex/ingestion/search.py +92 -0
- imas_codex-5.0.0rc1/imas_codex/llm/README.md +216 -0
- imas_codex-5.0.0rc1/imas_codex/llm/__init__.py +14 -0
- imas_codex-5.0.0rc1/imas_codex/llm/prompt_loader.py +1176 -0
- imas_codex-5.0.0rc1/imas_codex/llm/prompts/__init__.py +5 -0
- imas_codex-5.0.0rc1/imas_codex/llm/prompts/clusters/labeler.md +54 -0
- imas_codex-5.0.0rc1/imas_codex/llm/prompts/code/scorer.md +107 -0
- imas_codex-5.0.0rc1/imas_codex/llm/prompts/code/triage.md +129 -0
- imas_codex-5.0.0rc1/imas_codex/llm/prompts/discovery/data_access.md +291 -0
- imas_codex-5.0.0rc1/imas_codex/llm/prompts/discovery/enricher.md +41 -0
- imas_codex-5.0.0rc1/imas_codex/llm/prompts/discovery/roots.md +268 -0
- imas_codex-5.0.0rc1/imas_codex/llm/prompts/discovery/static-enricher.md +100 -0
- imas_codex-5.0.0rc1/imas_codex/llm/prompts/exploration/facility.md +113 -0
- imas_codex-5.0.0rc1/imas_codex/llm/prompts/imas/enrichment.md +73 -0
- imas_codex-5.0.0rc1/imas_codex/llm/prompts/imas/identifier_enrichment.md +54 -0
- imas_codex-5.0.0rc1/imas_codex/llm/prompts/imas/ids_enrichment.md +74 -0
- imas_codex-5.0.0rc1/imas_codex/llm/prompts/mapping/assembly.md +41 -0
- imas_codex-5.0.0rc1/imas_codex/llm/prompts/mapping/assembly_system.md +112 -0
- imas_codex-5.0.0rc1/imas_codex/llm/prompts/mapping/signal_mapping.md +127 -0
- imas_codex-5.0.0rc1/imas_codex/llm/prompts/mapping/signal_mapping_system.md +96 -0
- imas_codex-5.0.0rc1/imas_codex/llm/prompts/mapping/target_assignment.md +57 -0
- imas_codex-5.0.0rc1/imas_codex/llm/prompts/mapping/target_assignment_system.md +62 -0
- imas_codex-5.0.0rc1/imas_codex/llm/prompts/mapping/validation.md +63 -0
- imas_codex-5.0.0rc1/imas_codex/llm/prompts/paths/scorer.md +192 -0
- imas_codex-5.0.0rc1/imas_codex/llm/prompts/paths/triage.md +190 -0
- imas_codex-5.0.0rc1/imas_codex/llm/prompts/shared/completion.md +29 -0
- imas_codex-5.0.0rc1/imas_codex/llm/prompts/shared/safety.md +38 -0
- imas_codex-5.0.0rc1/imas_codex/llm/prompts/shared/schema/cluster-label-output.md +21 -0
- imas_codex-5.0.0rc1/imas_codex/llm/prompts/shared/schema/cluster-vocabularies.md +25 -0
- imas_codex-5.0.0rc1/imas_codex/llm/prompts/shared/schema/diagnostic-categories.md +15 -0
- imas_codex-5.0.0rc1/imas_codex/llm/prompts/shared/schema/dimension-calibration.md +20 -0
- imas_codex-5.0.0rc1/imas_codex/llm/prompts/shared/schema/discovery-categories.md +25 -0
- imas_codex-5.0.0rc1/imas_codex/llm/prompts/shared/schema/document-scoring-output.md +23 -0
- imas_codex-5.0.0rc1/imas_codex/llm/prompts/shared/schema/file-scoring-output.md +22 -0
- imas_codex-5.0.0rc1/imas_codex/llm/prompts/shared/schema/image-caption-output.md +28 -0
- imas_codex-5.0.0rc1/imas_codex/llm/prompts/shared/schema/path-purposes.md +26 -0
- imas_codex-5.0.0rc1/imas_codex/llm/prompts/shared/schema/physics-domains.md +14 -0
- imas_codex-5.0.0rc1/imas_codex/llm/prompts/shared/schema/score-dimensions.md +21 -0
- imas_codex-5.0.0rc1/imas_codex/llm/prompts/shared/schema/score-output.md +28 -0
- imas_codex-5.0.0rc1/imas_codex/llm/prompts/shared/schema/scoring-output.md +22 -0
- imas_codex-5.0.0rc1/imas_codex/llm/prompts/shared/schema/wiki-purposes.md +30 -0
- imas_codex-5.0.0rc1/imas_codex/llm/prompts/shared/schema/wiki-scoring-output.md +23 -0
- imas_codex-5.0.0rc1/imas_codex/llm/prompts/shared/tools.md +51 -0
- imas_codex-5.0.0rc1/imas_codex/llm/prompts/signals/enrichment.md +471 -0
- imas_codex-5.0.0rc1/imas_codex/llm/prompts/signals/individualization.md +77 -0
- imas_codex-5.0.0rc1/imas_codex/llm/prompts/signals/source_unwind.md +54 -0
- imas_codex-5.0.0rc1/imas_codex/llm/prompts/wiki/document-scorer.md +124 -0
- imas_codex-5.0.0rc1/imas_codex/llm/prompts/wiki/image-captioner.md +154 -0
- imas_codex-5.0.0rc1/imas_codex/llm/prompts/wiki/scorer.md +125 -0
- imas_codex-5.0.0rc1/imas_codex/llm/prompts/wiki/scout.md +58 -0
- imas_codex-5.0.0rc1/imas_codex/llm/search_formatters.py +1375 -0
- imas_codex-5.0.0rc1/imas_codex/llm/search_tools.py +1549 -0
- imas_codex-5.0.0rc1/imas_codex/llm/server.py +2913 -0
- imas_codex-5.0.0rc1/imas_codex/mappings/__init__.py +295 -0
- imas_codex-5.0.0rc1/imas_codex/mdsplus/__init__.py +54 -0
- imas_codex-5.0.0rc1/imas_codex/mdsplus/batch_discovery.py +810 -0
- imas_codex-5.0.0rc1/imas_codex/mdsplus/extraction.py +1053 -0
- imas_codex-5.0.0rc1/imas_codex/mdsplus/ingestion.py +48 -0
- imas_codex-5.0.0rc1/imas_codex/mdsplus/static.py +50 -0
- imas_codex-5.0.0rc1/imas_codex/models/constants.py +130 -0
- imas_codex-5.0.0rc1/imas_codex/models/context_models.py +108 -0
- imas_codex-5.0.0rc1/imas_codex/models/error_models.py +20 -0
- imas_codex-5.0.0rc1/imas_codex/models/physics_models.py +153 -0
- imas_codex-5.0.0rc1/imas_codex/models/request_models.py +379 -0
- imas_codex-5.0.0rc1/imas_codex/models/result_models.py +479 -0
- imas_codex-5.0.0rc1/imas_codex/models/structure_models.py +40 -0
- imas_codex-5.0.0rc1/imas_codex/providers.py +30 -0
- imas_codex-5.0.0rc1/imas_codex/remote/__init__.py +96 -0
- imas_codex-5.0.0rc1/imas_codex/remote/executor.py +1373 -0
- imas_codex-5.0.0rc1/imas_codex/remote/locations.py +320 -0
- imas_codex-5.0.0rc1/imas_codex/remote/python.py +687 -0
- imas_codex-5.0.0rc1/imas_codex/remote/scripts/__init__.py +31 -0
- imas_codex-5.0.0rc1/imas_codex/remote/scripts/check_edas.py +161 -0
- imas_codex-5.0.0rc1/imas_codex/remote/scripts/check_jpf.py +106 -0
- imas_codex-5.0.0rc1/imas_codex/remote/scripts/check_mdsplus_tdi.py +96 -0
- imas_codex-5.0.0rc1/imas_codex/remote/scripts/check_ppf.py +147 -0
- imas_codex-5.0.0rc1/imas_codex/remote/scripts/check_signals.py +138 -0
- imas_codex-5.0.0rc1/imas_codex/remote/scripts/check_signals_batch.py +376 -0
- imas_codex-5.0.0rc1/imas_codex/remote/scripts/discover_files.py +296 -0
- imas_codex-5.0.0rc1/imas_codex/remote/scripts/enrich_directories.py +394 -0
- imas_codex-5.0.0rc1/imas_codex/remote/scripts/enrich_files.py +200 -0
- imas_codex-5.0.0rc1/imas_codex/remote/scripts/enumerate_edas.py +139 -0
- imas_codex-5.0.0rc1/imas_codex/remote/scripts/enumerate_jpf.py +164 -0
- imas_codex-5.0.0rc1/imas_codex/remote/scripts/enumerate_mdsplus_tdi.py +187 -0
- imas_codex-5.0.0rc1/imas_codex/remote/scripts/enumerate_ppf.py +143 -0
- imas_codex-5.0.0rc1/imas_codex/remote/scripts/extract_static_tree.py +216 -0
- imas_codex-5.0.0rc1/imas_codex/remote/scripts/extract_tdi_signals.py +650 -0
- imas_codex-5.0.0rc1/imas_codex/remote/scripts/extract_tree.py +240 -0
- imas_codex-5.0.0rc1/imas_codex/remote/scripts/extract_units.py +249 -0
- imas_codex-5.0.0rc1/imas_codex/remote/scripts/get_user_info.py +179 -0
- imas_codex-5.0.0rc1/imas_codex/remote/scripts/parse_device_xml.py +347 -0
- imas_codex-5.0.0rc1/imas_codex/remote/scripts/parse_greens_table.py +124 -0
- imas_codex-5.0.0rc1/imas_codex/remote/scripts/parse_jec2020.py +357 -0
- imas_codex-5.0.0rc1/imas_codex/remote/scripts/parse_magnetics_config.py +337 -0
- imas_codex-5.0.0rc1/imas_codex/remote/scripts/parse_mcfg_sensors.py +254 -0
- imas_codex-5.0.0rc1/imas_codex/remote/scripts/parse_pf_coil_turns.py +92 -0
- imas_codex-5.0.0rc1/imas_codex/remote/scripts/scan_directories.py +573 -0
- imas_codex-5.0.0rc1/imas_codex/remote/scripts/scan_files.py +261 -0
- imas_codex-5.0.0rc1/imas_codex/remote/serialization.py +114 -0
- imas_codex-5.0.0rc1/imas_codex/remote/ssh_worker.py +902 -0
- imas_codex-5.0.0rc1/imas_codex/remote/tools.py +1050 -0
- imas_codex-5.0.0rc1/imas_codex/remote/tunnel.py +630 -0
- imas_codex-5.0.0rc1/imas_codex/resource_path_accessor.py +156 -0
- imas_codex-5.0.0rc1/imas_codex/resources/.gitkeep +4 -0
- imas_codex-5.0.0rc1/imas_codex/schemas/__init__.py +8 -0
- imas_codex-5.0.0rc1/imas_codex/schemas/common.yaml +857 -0
- imas_codex-5.0.0rc1/imas_codex/schemas/facility.yaml +3938 -0
- imas_codex-5.0.0rc1/imas_codex/schemas/facility_config.yaml +1446 -0
- imas_codex-5.0.0rc1/imas_codex/schemas/imas_dd.yaml +983 -0
- imas_codex-5.0.0rc1/imas_codex/schemas/physics_domains.yaml +345 -0
- imas_codex-5.0.0rc1/imas_codex/schemas/task_groups.yaml +58 -0
- imas_codex-5.0.0rc1/imas_codex/search/__init__.py +24 -0
- imas_codex-5.0.0rc1/imas_codex/search/cache.py +130 -0
- imas_codex-5.0.0rc1/imas_codex/search/decorators/__init__.py +46 -0
- imas_codex-5.0.0rc1/imas_codex/search/decorators/cache.py +205 -0
- imas_codex-5.0.0rc1/imas_codex/search/decorators/error_handling.py +353 -0
- imas_codex-5.0.0rc1/imas_codex/search/decorators/mcp_tool.py +35 -0
- imas_codex-5.0.0rc1/imas_codex/search/decorators/performance.py +248 -0
- imas_codex-5.0.0rc1/imas_codex/search/decorators/tool_recommendations.py +285 -0
- imas_codex-5.0.0rc1/imas_codex/search/decorators/validation.py +141 -0
- imas_codex-5.0.0rc1/imas_codex/search/document_store.py +1488 -0
- imas_codex-5.0.0rc1/imas_codex/search/engines/__init__.py +20 -0
- imas_codex-5.0.0rc1/imas_codex/search/engines/base_engine.py +167 -0
- imas_codex-5.0.0rc1/imas_codex/search/engines/hybrid_engine.py +207 -0
- imas_codex-5.0.0rc1/imas_codex/search/engines/lexical_engine.py +439 -0
- imas_codex-5.0.0rc1/imas_codex/search/engines/semantic_engine.py +194 -0
- imas_codex-5.0.0rc1/imas_codex/search/fuzzy_matcher.py +187 -0
- imas_codex-5.0.0rc1/imas_codex/search/search_strategy.py +564 -0
- imas_codex-5.0.0rc1/imas_codex/search/semantic_search.py +290 -0
- imas_codex-5.0.0rc1/imas_codex/search/services/__init__.py +14 -0
- imas_codex-5.0.0rc1/imas_codex/search/services/search_service.py +251 -0
- imas_codex-5.0.0rc1/imas_codex/search/tool_suggestions.py +158 -0
- imas_codex-5.0.0rc1/imas_codex/services/__init__.py +17 -0
- imas_codex-5.0.0rc1/imas_codex/services/base.py +12 -0
- imas_codex-5.0.0rc1/imas_codex/services/document.py +50 -0
- imas_codex-5.0.0rc1/imas_codex/services/response.py +126 -0
- imas_codex-5.0.0rc1/imas_codex/services/search_configuration.py +76 -0
- imas_codex-5.0.0rc1/imas_codex/settings.py +602 -0
- imas_codex-5.0.0rc1/imas_codex/structure/structure_analyzer.py +492 -0
- imas_codex-5.0.0rc1/imas_codex/tools/__init__.py +168 -0
- imas_codex-5.0.0rc1/imas_codex/tools/base.py +147 -0
- imas_codex-5.0.0rc1/imas_codex/tools/graph_search.py +2048 -0
- imas_codex-5.0.0rc1/imas_codex/tools/identifiers_tool.py +319 -0
- imas_codex-5.0.0rc1/imas_codex/tools/list_tool.py +446 -0
- imas_codex-5.0.0rc1/imas_codex/tools/overview_tool.py +506 -0
- imas_codex-5.0.0rc1/imas_codex/tools/utils.py +117 -0
- imas_codex-5.0.0rc1/imas_codex/tools/version_tool.py +144 -0
- imas_codex-5.0.0rc1/imas_codex/units/__init__.py +110 -0
- imas_codex-5.0.0rc1/imas_codex/units/data_dictionary_unit_aliases.txt +14 -0
- imas_codex-5.0.0rc1/nginx.conf +29 -0
- imas_codex-5.0.0rc1/plans/README.md +49 -0
- imas_codex-5.0.0rc1/plans/STRATEGY.md +278 -0
- imas_codex-5.0.0rc1/plans/features/codex-imas-gap-closure.md +613 -0
- imas_codex-5.0.0rc1/plans/features/dd-version-and-tool-filtering.md +480 -0
- imas_codex-5.0.0rc1/plans/features/dynamic-tool-registration.md +196 -0
- imas_codex-5.0.0rc1/plans/features/error-metadata-filtering.md +440 -0
- imas_codex-5.0.0rc1/plans/features/identifier-ids-enrichment.md +329 -0
- imas_codex-5.0.0rc1/plans/features/ids-properties-population.md +286 -0
- imas_codex-5.0.0rc1/plans/features/imas-tool-quality.md +337 -0
- imas_codex-5.0.0rc1/plans/features/mapping-search-enrichment.md +1014 -0
- imas_codex-5.0.0rc1/plans/features/release-benchmark-pipeline.md +740 -0
- imas_codex-5.0.0rc1/plans/features/shared-tool-consolidation.md +322 -0
- imas_codex-5.0.0rc1/plans/features/staged-mapping-pipeline.md +287 -0
- imas_codex-5.0.0rc1/plans/features/target-routing-generalization.md +278 -0
- imas_codex-5.0.0rc1/plans/features/unified-server.md +329 -0
- imas_codex-5.0.0rc1/plans/gpu-cluster-scoping.md +135 -0
- imas_codex-5.0.0rc1/pyproject.toml +451 -0
- imas_codex-5.0.0rc1/scripts/__init__.py +1 -0
- imas_codex-5.0.0rc1/scripts/benchmark_embedding.py +313 -0
- imas_codex-5.0.0rc1/scripts/benchmark_serialization.py +358 -0
- imas_codex-5.0.0rc1/scripts/benchmark_ssh_throughput.py +724 -0
- imas_codex-5.0.0rc1/scripts/build_clusters.py +183 -0
- imas_codex-5.0.0rc1/scripts/build_database.py +153 -0
- imas_codex-5.0.0rc1/scripts/build_embeddings.py +340 -0
- imas_codex-5.0.0rc1/scripts/build_models.py +507 -0
- imas_codex-5.0.0rc1/scripts/build_path_map.py +379 -0
- imas_codex-5.0.0rc1/scripts/build_schemas.py +148 -0
- imas_codex-5.0.0rc1/scripts/dd_version.py +633 -0
- imas_codex-5.0.0rc1/scripts/gen_physics_domains.py +148 -0
- imas_codex-5.0.0rc1/scripts/gen_schema_context.py +223 -0
- imas_codex-5.0.0rc1/scripts/gen_schema_reference.py +201 -0
- imas_codex-5.0.0rc1/scripts/ingest_all_trees.sh +130 -0
- imas_codex-5.0.0rc1/scripts/ingest_mdsplus.py +358 -0
- imas_codex-5.0.0rc1/scripts/install_apptainer.sh +63 -0
- imas_codex-5.0.0rc1/scripts/map_ids_domains.py +401 -0
- imas_codex-5.0.0rc1/scripts/model_comparison_study.py +1063 -0
- imas_codex-5.0.0rc1/scripts/plot_jet_composite_geometry.py +536 -0
- imas_codex-5.0.0rc1/scripts/plot_jet_epoch_evolution.py +1072 -0
- imas_codex-5.0.0rc1/scripts/plot_jet_limiter_epochs.py +238 -0
- imas_codex-5.0.0rc1/scripts/plot_jet_poloidal.py +485 -0
- imas_codex-5.0.0rc1/scripts/query_signal_sources.py +48 -0
- imas_codex-5.0.0rc1/scripts/rebuild_graph.py +648 -0
- imas_codex-5.0.0rc1/scripts/run_performance_baseline.py +168 -0
- imas_codex-5.0.0rc1/scripts/setup_neo4j_apptainer.sh +199 -0
- imas_codex-5.0.0rc1/scripts/test_prompt_caching.py +495 -0
- imas_codex-5.0.0rc1/slurm/codex-embed.sh +50 -0
- imas_codex-5.0.0rc1/tests/clusters/__init__.py +0 -0
- imas_codex-5.0.0rc1/tests/clusters/test_cluster_search.py +302 -0
- imas_codex-5.0.0rc1/tests/clusters/test_clustering.py +272 -0
- imas_codex-5.0.0rc1/tests/clusters/test_extractor.py +441 -0
- imas_codex-5.0.0rc1/tests/clusters/test_label_cache.py +405 -0
- imas_codex-5.0.0rc1/tests/clusters/test_labeler.py +165 -0
- imas_codex-5.0.0rc1/tests/clusters/test_preprocessing.py +218 -0
- imas_codex-5.0.0rc1/tests/cocos/test_calculator.py +346 -0
- imas_codex-5.0.0rc1/tests/cocos/test_loaders.py +91 -0
- imas_codex-5.0.0rc1/tests/cocos/test_transforms.py +81 -0
- imas_codex-5.0.0rc1/tests/config/__init__.py +0 -0
- imas_codex-5.0.0rc1/tests/config/test_facility_config_compliance.py +418 -0
- imas_codex-5.0.0rc1/tests/conftest.py +399 -0
- imas_codex-5.0.0rc1/tests/core/__init__.py +1 -0
- imas_codex-5.0.0rc1/tests/core/extractors/__init__.py +1 -0
- imas_codex-5.0.0rc1/tests/core/extractors/test_base.py +264 -0
- imas_codex-5.0.0rc1/tests/core/extractors/test_extractors.py +394 -0
- imas_codex-5.0.0rc1/tests/core/extractors/test_identifier_extractor.py +306 -0
- imas_codex-5.0.0rc1/tests/core/test_build_hash.py +123 -0
- imas_codex-5.0.0rc1/tests/core/test_clear_dd.py +234 -0
- imas_codex-5.0.0rc1/tests/core/test_cli.py +200 -0
- imas_codex-5.0.0rc1/tests/core/test_clusters.py +964 -0
- imas_codex-5.0.0rc1/tests/core/test_dd_accessor.py +469 -0
- imas_codex-5.0.0rc1/tests/core/test_ghcr.py +268 -0
- imas_codex-5.0.0rc1/tests/core/test_graph_analyzer.py +313 -0
- imas_codex-5.0.0rc1/tests/core/test_graph_cli_package.py +116 -0
- imas_codex-5.0.0rc1/tests/core/test_graph_dirs.py +235 -0
- imas_codex-5.0.0rc1/tests/core/test_graph_profiles.py +251 -0
- imas_codex-5.0.0rc1/tests/core/test_neo4j_ops.py +125 -0
- imas_codex-5.0.0rc1/tests/core/test_paths.py +37 -0
- imas_codex-5.0.0rc1/tests/core/test_physics_categorization.py +204 -0
- imas_codex-5.0.0rc1/tests/core/test_progress_monitor.py +170 -0
- imas_codex-5.0.0rc1/tests/core/test_resource_accessors.py +255 -0
- imas_codex-5.0.0rc1/tests/core/test_settings.py +294 -0
- imas_codex-5.0.0rc1/tests/core/test_temp_neo4j.py +53 -0
- imas_codex-5.0.0rc1/tests/core/test_tunnel_cli.py +115 -0
- imas_codex-5.0.0rc1/tests/core/test_xml_parser.py +681 -0
- imas_codex-5.0.0rc1/tests/core/test_xml_utils.py +205 -0
- imas_codex-5.0.0rc1/tests/discovery/__init__.py +2 -0
- imas_codex-5.0.0rc1/tests/discovery/test_code_pipeline.py +1452 -0
- imas_codex-5.0.0rc1/tests/discovery/test_context_quality.py +239 -0
- imas_codex-5.0.0rc1/tests/discovery/test_device_xml_scanner.py +2780 -0
- imas_codex-5.0.0rc1/tests/discovery/test_diagnostics.py +495 -0
- imas_codex-5.0.0rc1/tests/discovery/test_enrichment_context.py +466 -0
- imas_codex-5.0.0rc1/tests/discovery/test_facility_config.py +131 -0
- imas_codex-5.0.0rc1/tests/discovery/test_imas_patterns.py +352 -0
- imas_codex-5.0.0rc1/tests/discovery/test_logging_utils.py +406 -0
- imas_codex-5.0.0rc1/tests/discovery/test_mdsplus_epochs.py +157 -0
- imas_codex-5.0.0rc1/tests/discovery/test_mdsplus_scanner.py +507 -0
- imas_codex-5.0.0rc1/tests/discovery/test_parallel.py +679 -0
- imas_codex-5.0.0rc1/tests/discovery/test_paths_progress.py +744 -0
- imas_codex-5.0.0rc1/tests/discovery/test_pipeline_phase.py +120 -0
- imas_codex-5.0.0rc1/tests/discovery/test_progress_builders.py +904 -0
- imas_codex-5.0.0rc1/tests/discovery/test_reset.py +179 -0
- imas_codex-5.0.0rc1/tests/discovery/test_scanners.py +143 -0
- imas_codex-5.0.0rc1/tests/discovery/test_scorer.py +415 -0
- imas_codex-5.0.0rc1/tests/discovery/test_scoring_models.py +248 -0
- imas_codex-5.0.0rc1/tests/discovery/test_signal_checking.py +779 -0
- imas_codex-5.0.0rc1/tests/discovery/test_signals_pipeline.py +1511 -0
- imas_codex-5.0.0rc1/tests/discovery/test_signals_progress.py +776 -0
- imas_codex-5.0.0rc1/tests/discovery/test_static_parallel.py +509 -0
- imas_codex-5.0.0rc1/tests/discovery/test_supervised_loop.py +649 -0
- imas_codex-5.0.0rc1/tests/discovery/test_tdi_linkage.py +137 -0
- imas_codex-5.0.0rc1/tests/discovery/test_transfer.py +100 -0
- imas_codex-5.0.0rc1/tests/discovery/test_tree_pipeline.py +208 -0
- imas_codex-5.0.0rc1/tests/discovery/test_worker_section.py +166 -0
- imas_codex-5.0.0rc1/tests/embeddings/__init__.py +1 -0
- imas_codex-5.0.0rc1/tests/embeddings/test_cache.py +376 -0
- imas_codex-5.0.0rc1/tests/embeddings/test_embedding_encoder.py +87 -0
- imas_codex-5.0.0rc1/tests/embeddings/test_embeddings.py +502 -0
- imas_codex-5.0.0rc1/tests/embeddings/test_embeddings_deferred.py +48 -0
- imas_codex-5.0.0rc1/tests/embeddings/test_encoder.py +600 -0
- imas_codex-5.0.0rc1/tests/embeddings/test_model_comparison.py +250 -0
- imas_codex-5.0.0rc1/tests/embeddings/test_openrouter_embed.py +387 -0
- imas_codex-5.0.0rc1/tests/embeddings/test_readiness.py +408 -0
- imas_codex-5.0.0rc1/tests/embeddings/test_remote.py +131 -0
- imas_codex-5.0.0rc1/tests/features/__init__.py +0 -0
- imas_codex-5.0.0rc1/tests/features/test_analysis.py +118 -0
- imas_codex-5.0.0rc1/tests/features/test_search.py +209 -0
- imas_codex-5.0.0rc1/tests/graph/__init__.py +12 -0
- imas_codex-5.0.0rc1/tests/graph/conftest.py +189 -0
- imas_codex-5.0.0rc1/tests/graph/test_build_dd_clusters.py +21 -0
- imas_codex-5.0.0rc1/tests/graph/test_data_quality.py +259 -0
- imas_codex-5.0.0rc1/tests/graph/test_dd_aux_streaming.py +207 -0
- imas_codex-5.0.0rc1/tests/graph/test_dd_build.py +1130 -0
- imas_codex-5.0.0rc1/tests/graph/test_dd_enrichment.py +277 -0
- imas_codex-5.0.0rc1/tests/graph/test_dd_graph_ops.py +57 -0
- imas_codex-5.0.0rc1/tests/graph/test_dd_identifier_enrichment.py +232 -0
- imas_codex-5.0.0rc1/tests/graph/test_dd_ids_enrichment.py +250 -0
- imas_codex-5.0.0rc1/tests/graph/test_dd_progress.py +93 -0
- imas_codex-5.0.0rc1/tests/graph/test_dd_worker_aux_order.py +82 -0
- imas_codex-5.0.0rc1/tests/graph/test_domain_queries.py +333 -0
- imas_codex-5.0.0rc1/tests/graph/test_formatters.py +72 -0
- imas_codex-5.0.0rc1/tests/graph/test_identifier_enrichment.py +68 -0
- imas_codex-5.0.0rc1/tests/graph/test_neo4j_resilience.py +101 -0
- imas_codex-5.0.0rc1/tests/graph/test_node_category.py +118 -0
- imas_codex-5.0.0rc1/tests/graph/test_private_fields.py +90 -0
- imas_codex-5.0.0rc1/tests/graph/test_query_builder.py +259 -0
- imas_codex-5.0.0rc1/tests/graph/test_referential_integrity.py +228 -0
- imas_codex-5.0.0rc1/tests/graph/test_schema_compliance.py +363 -0
- imas_codex-5.0.0rc1/tests/graph/test_schema_context.py +289 -0
- imas_codex-5.0.0rc1/tests/graph/test_structural.py +150 -0
- imas_codex-5.0.0rc1/tests/graph_mcp/__init__.py +5 -0
- imas_codex-5.0.0rc1/tests/graph_mcp/conftest.py +478 -0
- imas_codex-5.0.0rc1/tests/graph_mcp/test_docker_embedded.py +247 -0
- imas_codex-5.0.0rc1/tests/graph_mcp/test_fixture_graph.py +189 -0
- imas_codex-5.0.0rc1/tests/graph_mcp/test_graph_search.py +836 -0
- imas_codex-5.0.0rc1/tests/graph_mcp/test_incremental_clusters.py +136 -0
- imas_codex-5.0.0rc1/tests/graph_mcp/test_tool_registration.py +46 -0
- imas_codex-5.0.0rc1/tests/graph_mcp/test_version_tool.py +45 -0
- imas_codex-5.0.0rc1/tests/ids/__init__.py +0 -0
- imas_codex-5.0.0rc1/tests/ids/fixtures/tcv_pf_active_80000_extraction.json +50 -0
- imas_codex-5.0.0rc1/tests/ids/test_assembler.py +296 -0
- imas_codex-5.0.0rc1/tests/ids/test_e2e_codegen.py +507 -0
- imas_codex-5.0.0rc1/tests/ids/test_graph_ops.py +223 -0
- imas_codex-5.0.0rc1/tests/ids/test_mapping_e2e.py +1928 -0
- imas_codex-5.0.0rc1/tests/ids/test_mapping_formatters.py +231 -0
- imas_codex-5.0.0rc1/tests/ids/test_mapping_pipeline.py +1093 -0
- imas_codex-5.0.0rc1/tests/ids/test_transforms.py +188 -0
- imas_codex-5.0.0rc1/tests/ids/test_validation.py +609 -0
- imas_codex-5.0.0rc1/tests/ingestion/__init__.py +0 -0
- imas_codex-5.0.0rc1/tests/ingestion/test_chunkers.py +194 -0
- imas_codex-5.0.0rc1/tests/ingestion/test_extraction.py +274 -0
- imas_codex-5.0.0rc1/tests/ingestion/test_mdsplus_extractor.py +234 -0
- imas_codex-5.0.0rc1/tests/ingestion/test_search.py +183 -0
- imas_codex-5.0.0rc1/tests/ingestion/test_static_tree.py +212 -0
- imas_codex-5.0.0rc1/tests/integration/__init__.py +0 -0
- imas_codex-5.0.0rc1/tests/integration/test_enrichment_integration.py +238 -0
- imas_codex-5.0.0rc1/tests/integration/test_signals_e2e.py +366 -0
- imas_codex-5.0.0rc1/tests/integration/test_workflows.py +165 -0
- imas_codex-5.0.0rc1/tests/llm/__init__.py +0 -0
- imas_codex-5.0.0rc1/tests/llm/test_dd_version_reports.py +72 -0
- imas_codex-5.0.0rc1/tests/llm/test_imas_dd_formatters.py +135 -0
- imas_codex-5.0.0rc1/tests/llm/test_search_tools.py +1713 -0
- imas_codex-5.0.0rc1/tests/llm/test_serialization.py +76 -0
- imas_codex-5.0.0rc1/tests/mappings/__init__.py +1 -0
- imas_codex-5.0.0rc1/tests/mappings/test_path_map.py +211 -0
- imas_codex-5.0.0rc1/tests/search/__init__.py +1 -0
- imas_codex-5.0.0rc1/tests/search/decorators/__init__.py +1 -0
- imas_codex-5.0.0rc1/tests/search/decorators/test_cache.py +245 -0
- imas_codex-5.0.0rc1/tests/search/decorators/test_error_handling.py +257 -0
- imas_codex-5.0.0rc1/tests/search/decorators/test_performance.py +295 -0
- imas_codex-5.0.0rc1/tests/search/decorators/test_tool_recommendations.py +277 -0
- imas_codex-5.0.0rc1/tests/search/engines/__init__.py +1 -0
- imas_codex-5.0.0rc1/tests/search/engines/test_hybrid_engine.py +206 -0
- imas_codex-5.0.0rc1/tests/search/engines/test_lexical_engine.py +207 -0
- imas_codex-5.0.0rc1/tests/search/engines/test_semantic_engine.py +121 -0
- imas_codex-5.0.0rc1/tests/search/test_cache.py +97 -0
- imas_codex-5.0.0rc1/tests/search/test_document_store.py +582 -0
- imas_codex-5.0.0rc1/tests/search/test_fuzzy_matcher.py +170 -0
- imas_codex-5.0.0rc1/tests/search/test_search_strategy.py +389 -0
- imas_codex-5.0.0rc1/tests/search/test_semantic_search.py +477 -0
- imas_codex-5.0.0rc1/tests/search/test_tool_suggestions.py +96 -0
- imas_codex-5.0.0rc1/tests/services/__init__.py +1 -0
- imas_codex-5.0.0rc1/tests/services/test_base.py +14 -0
- imas_codex-5.0.0rc1/tests/services/test_document.py +83 -0
- imas_codex-5.0.0rc1/tests/services/test_response.py +167 -0
- imas_codex-5.0.0rc1/tests/services/test_search_configuration.py +100 -0
- imas_codex-5.0.0rc1/tests/services/test_search_mode.py +270 -0
- imas_codex-5.0.0rc1/tests/test_cli.py +510 -0
- imas_codex-5.0.0rc1/tests/test_imas_search_remediation.py +961 -0
- imas_codex-5.0.0rc1/tests/tools/__init__.py +0 -0
- imas_codex-5.0.0rc1/tests/tools/test_clusters.py +110 -0
- imas_codex-5.0.0rc1/tests/tools/test_dd_version_and_error_fields.py +111 -0
- imas_codex-5.0.0rc1/tests/tools/test_dd_version_filtering.py +562 -0
- imas_codex-5.0.0rc1/tests/tools/test_graph_search_structure_semantics.py +77 -0
- imas_codex-5.0.0rc1/tests/tools/test_identifiers_tool.py +315 -0
- imas_codex-5.0.0rc1/tests/tools/test_list_tool.py +530 -0
- imas_codex-5.0.0rc1/tests/tools/test_overview_tool.py +185 -0
- imas_codex-5.0.0rc1/tests/tools/test_tools.py +147 -0
- imas_codex-5.0.0rc1/tests/tools/test_utils.py +186 -0
- imas_codex-5.0.0rc1/tests/wiki/__init__.py +1 -0
- imas_codex-5.0.0rc1/tests/wiki/conftest.py +499 -0
- imas_codex-5.0.0rc1/tests/wiki/test_adapters_unit.py +340 -0
- imas_codex-5.0.0rc1/tests/wiki/test_entity_extraction.py +425 -0
- imas_codex-5.0.0rc1/tests/wiki/test_excel.py +382 -0
- imas_codex-5.0.0rc1/tests/wiki/test_graph_ops_unit.py +369 -0
- imas_codex-5.0.0rc1/tests/wiki/test_image_extraction.py +237 -0
- imas_codex-5.0.0rc1/tests/wiki/test_pipeline.py +269 -0
- imas_codex-5.0.0rc1/tests/wiki/test_prefetch.py +116 -0
- imas_codex-5.0.0rc1/tests/wiki/test_progress.py +146 -0
- imas_codex-5.0.0rc1/tests/wiki/test_progress_display.py +430 -0
- imas_codex-5.0.0rc1/tests/wiki/test_scoring.py +186 -0
- imas_codex-5.0.0rc1/tests/wiki/test_scoring_functions.py +561 -0
- imas_codex-5.0.0rc1/tests/wiki/test_scraper.py +336 -0
- imas_codex-5.0.0rc1/tests/wiki/test_state.py +252 -0
- imas_codex-5.0.0rc1/tests/wiki/test_static_html_adapter.py +371 -0
- imas_codex-5.0.0rc1/tests/wiki/test_twiki_adapter.py +305 -0
- imas_codex-5.0.0rc1/tests/wiki/test_twiki_raw_adapter.py +378 -0
- imas_codex-5.0.0rc1/tests/wiki/test_twiki_static_adapter.py +193 -0
- imas_codex-5.0.0rc1/tests/wiki/test_workers.py +549 -0
- imas_codex-5.0.0rc1/uv.lock +4125 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: facility-explorer
|
|
3
|
+
description: Explore remote fusion facilities via SSH. Use for signal enumeration, data access testing, and infrastructure discovery.
|
|
4
|
+
tools: Bash, Read, Grep
|
|
5
|
+
model: opus
|
|
6
|
+
permissionMode: acceptEdits
|
|
7
|
+
maxTurns: 30
|
|
8
|
+
memory: project
|
|
9
|
+
mcpServers:
|
|
10
|
+
- codex
|
|
11
|
+
skills:
|
|
12
|
+
- facility-access
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
You are a facility data expert for fusion research facilities.
|
|
16
|
+
|
|
17
|
+
## Capabilities
|
|
18
|
+
|
|
19
|
+
- SSH to remote facilities (tcv, jet, jt-60sa, iter)
|
|
20
|
+
- Enumerate MDSplus trees and signals
|
|
21
|
+
- Test data access patterns (MDSplus, TDI, PPF)
|
|
22
|
+
- Check signal availability at specific shots
|
|
23
|
+
- Write Python scripts to test data access hypotheses
|
|
24
|
+
|
|
25
|
+
## Rules
|
|
26
|
+
|
|
27
|
+
1. Never read project source code — work through SSH and MCP tools only
|
|
28
|
+
2. Track discoveries in your agent memory
|
|
29
|
+
3. Check facility excludes before disk-intensive operations:
|
|
30
|
+
```python
|
|
31
|
+
info = get_facility('tcv')
|
|
32
|
+
excludes = info.get('excludes', {})
|
|
33
|
+
```
|
|
34
|
+
4. When a command times out, persist the constraint immediately via `update_infrastructure()`
|
|
35
|
+
5. Use remote tools (rg, fd, tokei) over standard Unix commands
|
|
36
|
+
|
|
37
|
+
## Data Access Patterns
|
|
38
|
+
|
|
39
|
+
### MDSplus (TCV, JET)
|
|
40
|
+
```python
|
|
41
|
+
import MDSplus
|
|
42
|
+
tree = MDSplus.Tree('tcv_shot', 84000, 'readonly')
|
|
43
|
+
data = tree.getNode('\\RESULTS::LIUQE:I_P').data()
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### TDI Functions (TCV)
|
|
47
|
+
```python
|
|
48
|
+
import MDSplus
|
|
49
|
+
conn = MDSplus.Connection('tcvdata.epfl.ch')
|
|
50
|
+
conn.openTree('tcv_shot', 84000)
|
|
51
|
+
data = conn.get('tcv_eq("I_P")').data()
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### PPF (JET)
|
|
55
|
+
```python
|
|
56
|
+
import ppf
|
|
57
|
+
ppf.ppfgo(pulse=99000)
|
|
58
|
+
data, x, t, ier = ppf.ppfget(pulse=99000, dda='EFIT', dtype='Q95')
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Safety
|
|
62
|
+
|
|
63
|
+
- Always use read-only access modes
|
|
64
|
+
- Never modify data on remote facilities
|
|
65
|
+
- Respect rate limits on data servers
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: graph-querier
|
|
3
|
+
description: Query and persist data to the Neo4j knowledge graph. Use for any operation requiring Cypher queries, semantic search, or node creation.
|
|
4
|
+
tools: Bash, Read, Grep
|
|
5
|
+
model: opus
|
|
6
|
+
permissionMode: acceptEdits
|
|
7
|
+
maxTurns: 30
|
|
8
|
+
memory: project
|
|
9
|
+
mcpServers:
|
|
10
|
+
- codex
|
|
11
|
+
- imas-ddv4
|
|
12
|
+
skills:
|
|
13
|
+
- graph-queries
|
|
14
|
+
- schema-summary
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
You are a knowledge graph specialist for the imas-codex fusion data graph.
|
|
18
|
+
|
|
19
|
+
## Capabilities
|
|
20
|
+
|
|
21
|
+
- Execute Cypher queries via the codex MCP server (`query()`, `add_to_graph()`)
|
|
22
|
+
- Perform semantic search across vector indexes (`semantic_search()`)
|
|
23
|
+
- Create and update graph nodes (IMASMapping, MappingEvidence)
|
|
24
|
+
- Look up IMAS Data Dictionary paths via the imas-ddv4 MCP server
|
|
25
|
+
|
|
26
|
+
## Rules
|
|
27
|
+
|
|
28
|
+
1. Always project specific properties in Cypher (`RETURN n.id, n.name`), never full nodes
|
|
29
|
+
2. Use `UNWIND` for batch operations (never loop individual writes)
|
|
30
|
+
3. Track your findings in your agent memory
|
|
31
|
+
4. Never use `DETACH DELETE` without explicit confirmation
|
|
32
|
+
5. For re-embedding: update nodes in place, don't delete and recreate
|
|
33
|
+
|
|
34
|
+
## Common Queries
|
|
35
|
+
|
|
36
|
+
```cypher
|
|
37
|
+
-- Count nodes by label
|
|
38
|
+
MATCH (n) RETURN labels(n)[0] AS label, count(n) AS count ORDER BY count DESC
|
|
39
|
+
|
|
40
|
+
-- Find signals for a physics domain
|
|
41
|
+
MATCH (s:FacilitySignal {facility_id: $facility, physics_domain: $domain})
|
|
42
|
+
RETURN s.id, s.name, s.accessor LIMIT 20
|
|
43
|
+
|
|
44
|
+
-- Semantic search on descriptions
|
|
45
|
+
CALL db.index.vector.queryNodes($index, $k, $embedding)
|
|
46
|
+
YIELD node, score
|
|
47
|
+
RETURN node.id, node.description, score
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Schema Reference
|
|
51
|
+
|
|
52
|
+
See [agents/schema-reference.md](../../agents/schema-reference.md) for auto-generated node labels, properties, vector indexes, and relationships.
|
|
53
|
+
|
|
54
|
+
## Cost Awareness
|
|
55
|
+
|
|
56
|
+
- Prefer Cypher aggregations over Python post-processing
|
|
57
|
+
- Use `LIMIT` on exploratory queries
|
|
58
|
+
- Cache repeated lookups in variables
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"env": {
|
|
3
|
+
"CLAUDE_AUTOCOMPACT_PCT_OVERRIDE": "70"
|
|
4
|
+
},
|
|
5
|
+
"permissions": {
|
|
6
|
+
"allow": [
|
|
7
|
+
"Bash(ssh *)",
|
|
8
|
+
"Bash(uv run *)",
|
|
9
|
+
"Bash(rg *)",
|
|
10
|
+
"Bash(fd *)",
|
|
11
|
+
"Bash(eza *)",
|
|
12
|
+
"Bash(tokei *)",
|
|
13
|
+
"Bash(git *)",
|
|
14
|
+
"Bash(curl *)",
|
|
15
|
+
"Bash(litellm *)",
|
|
16
|
+
"mcp__codex__*",
|
|
17
|
+
"mcp__imas-ddv4__*",
|
|
18
|
+
"Read(.claude/**)"
|
|
19
|
+
]
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Facility Access Patterns
|
|
2
|
+
|
|
3
|
+
SSH access and data system patterns per facility.
|
|
4
|
+
|
|
5
|
+
## SSH Hosts
|
|
6
|
+
|
|
7
|
+
| Facility | SSH Alias | Data System | Reference Shot |
|
|
8
|
+
|----------|-----------|-------------|----------------|
|
|
9
|
+
| TCV | `tcv` | MDSplus + TDI | 84000 |
|
|
10
|
+
| JET | `jet` | MDSplus + PPF | 99000 |
|
|
11
|
+
| JT-60SA | `jt-60sa` | MDSplus | 30000 |
|
|
12
|
+
| ITER | `iter` | IMAS | N/A |
|
|
13
|
+
|
|
14
|
+
## Remote Tools
|
|
15
|
+
|
|
16
|
+
Always prefer these over standard Unix commands:
|
|
17
|
+
- `rg` over `grep -r` (pattern search)
|
|
18
|
+
- `fd` over `find` (file finder — **requires path argument on large FS**)
|
|
19
|
+
- `eza` over `ls -la` / `tree` (directory listing)
|
|
20
|
+
- `tokei` over `wc -l` (LOC by language)
|
|
21
|
+
|
|
22
|
+
Install on facility: `imas-codex tools install <facility>`
|
|
23
|
+
|
|
24
|
+
## TCV
|
|
25
|
+
|
|
26
|
+
### MDSplus Direct
|
|
27
|
+
```python
|
|
28
|
+
import MDSplus
|
|
29
|
+
tree = MDSplus.Tree('tcv_shot', 84000, 'readonly')
|
|
30
|
+
ip = tree.getNode('\\RESULTS::LIUQE:I_P').data()
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### TDI Functions
|
|
34
|
+
```python
|
|
35
|
+
import MDSplus
|
|
36
|
+
conn = MDSplus.Connection('tcvdata.epfl.ch')
|
|
37
|
+
conn.openTree('tcv_shot', 84000)
|
|
38
|
+
ip = conn.get('tcv_eq("I_P")').data()
|
|
39
|
+
time = conn.get('dim_of(tcv_eq("I_P"))').data()
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Key Trees
|
|
43
|
+
- `tcv_shot`: Raw diagnostic data
|
|
44
|
+
- `results`: Analysis code outputs (LIUQE, ASTRA, etc.)
|
|
45
|
+
- `atlas`: Magnetics and basic plasma params
|
|
46
|
+
|
|
47
|
+
### TDI Function Directory
|
|
48
|
+
`/usr/local/mdsplus/tdi/tcv/` — contains `.FUN` files
|
|
49
|
+
|
|
50
|
+
## JET
|
|
51
|
+
|
|
52
|
+
### PPF Access
|
|
53
|
+
```python
|
|
54
|
+
import ppf
|
|
55
|
+
ppf.ppfgo(pulse=99000)
|
|
56
|
+
data, x, t, ier = ppf.ppfget(pulse=99000, dda='EFIT', dtype='Q95')
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### MDSplus
|
|
60
|
+
```python
|
|
61
|
+
import MDSplus
|
|
62
|
+
conn = MDSplus.Connection('mdsjet.jet.uk')
|
|
63
|
+
conn.openTree('jet', 99000)
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### Key DDAs
|
|
67
|
+
- `EFIT`: Equilibrium reconstruction
|
|
68
|
+
- `KK3`: ECE diagnostic
|
|
69
|
+
- `HRTS`: High-res Thomson scattering
|
|
70
|
+
- `BOLO`: Bolometry
|
|
71
|
+
|
|
72
|
+
## JT-60SA
|
|
73
|
+
|
|
74
|
+
### MDSplus
|
|
75
|
+
```python
|
|
76
|
+
import MDSplus
|
|
77
|
+
tree = MDSplus.Tree('jt-60sa', 30000, 'readonly')
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Safety Rules
|
|
81
|
+
|
|
82
|
+
1. **Read-only**: Never modify remote data
|
|
83
|
+
2. **Check excludes first**: `get_facility('tcv')['excludes']`
|
|
84
|
+
3. **Timeout awareness**: Commands on `/work` or `/home` can hang on NFS
|
|
85
|
+
4. **fd needs path**: `fd -e py /specific/path` — never bare `fd` on large FS
|
|
86
|
+
5. **Persist timeouts**: If a path times out, immediately call `update_infrastructure()`
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Graph Query Patterns
|
|
2
|
+
|
|
3
|
+
Common Cypher patterns for the imas-codex Neo4j knowledge graph.
|
|
4
|
+
|
|
5
|
+
## Node Counts
|
|
6
|
+
```cypher
|
|
7
|
+
MATCH (n) RETURN labels(n)[0] AS label, count(n) AS count ORDER BY count DESC
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
## Facility Signals by Domain
|
|
11
|
+
```cypher
|
|
12
|
+
MATCH (s:FacilitySignal {facility_id: $facility})
|
|
13
|
+
WHERE s.physics_domain = $domain AND s.status = 'checked'
|
|
14
|
+
OPTIONAL MATCH (s)-[:DATA_ACCESS]->(da:DataAccess)
|
|
15
|
+
RETURN s.id, s.name, s.accessor, da.data_template
|
|
16
|
+
ORDER BY s.name
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Semantic Search + Link Traversal
|
|
20
|
+
```cypher
|
|
21
|
+
CALL db.index.vector.queryNodes($index, $k, $embedding)
|
|
22
|
+
YIELD node AS signal, score
|
|
23
|
+
MATCH (signal)-[:DATA_ACCESS]->(da:DataAccess)
|
|
24
|
+
OPTIONAL MATCH (signal)-[:HAS_DATA_SOURCE_NODE]->(dn:SignalNode)
|
|
25
|
+
<-[:SOURCE_PATH]-(m:IMASMapping)-[:TARGET_PATH]->(imas:IMASNode)
|
|
26
|
+
RETURN signal.id, signal.description, da.data_template,
|
|
27
|
+
collect(imas.id) AS imas_paths, score
|
|
28
|
+
ORDER BY score DESC
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## IMAS Mappings
|
|
32
|
+
```cypher
|
|
33
|
+
-- Create mapping (status lifecycle: proposed → endorsed → validated | rejected)
|
|
34
|
+
MERGE (m:IMASMapping {id: $id})
|
|
35
|
+
SET m += $props, m.status = 'proposed', m.proposed_at = datetime()
|
|
36
|
+
WITH m
|
|
37
|
+
MATCH (s:FacilitySignal {id: $signal_id})
|
|
38
|
+
MATCH (t:IMASNode {id: $imas_path_id})
|
|
39
|
+
MERGE (m)-[:MAPS_TO_SOURCE]->(s)
|
|
40
|
+
MERGE (m)-[:MAPS_TO_TARGET]->(t)
|
|
41
|
+
|
|
42
|
+
-- Find mappings needing validation
|
|
43
|
+
MATCH (m:IMASMapping {status: 'proposed', facility_id: $facility})
|
|
44
|
+
RETURN m.id, m.confidence, m.proposed_at
|
|
45
|
+
ORDER BY m.confidence DESC
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Batch Writes (UNWIND)
|
|
49
|
+
```cypher
|
|
50
|
+
UNWIND $items AS item
|
|
51
|
+
MERGE (n:Tool {id: item.id})
|
|
52
|
+
SET n += item
|
|
53
|
+
WITH n
|
|
54
|
+
MATCH (f:Facility {id: $facility})
|
|
55
|
+
MERGE (n)-[:AT_FACILITY]->(f)
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Vector Indexes
|
|
59
|
+
|
|
60
|
+
See [agents/schema-reference.md](../../agents/schema-reference.md) for the full list of vector indexes derived from the LinkML schema.
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# IMAS Mapping Workflow
|
|
2
|
+
|
|
3
|
+
How mappings connect facility signals to IMAS fields.
|
|
4
|
+
|
|
5
|
+
## Architecture
|
|
6
|
+
|
|
7
|
+
Three symmetric levels:
|
|
8
|
+
|
|
9
|
+
| Level | Source Side | Target Side |
|
|
10
|
+
|-------|-----------|-------------|
|
|
11
|
+
| Individual | `SignalNode` | `IMASNode` leaf (e.g., FLT_0D) |
|
|
12
|
+
| Group | `SignalSource` | `IMASNode` STRUCT_ARRAY |
|
|
13
|
+
| Collection | `IMASMapping` | `IDS` |
|
|
14
|
+
|
|
15
|
+
## Graph Structure
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
IMASMapping ──[:USES_SIGNAL_SOURCE]──▶ SignalSource ──[:MAPS_TO_IMAS {field props}]──▶ IMASNode
|
|
19
|
+
│ ▲
|
|
20
|
+
│ [:MEMBER_OF]
|
|
21
|
+
│ │
|
|
22
|
+
│ SignalNode / FacilitySignal
|
|
23
|
+
│
|
|
24
|
+
└──[:POPULATES {assembly props}]──▶ IMASNode (STRUCT_ARRAY root)
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Key Relationships
|
|
28
|
+
|
|
29
|
+
| Relationship | From → To | Purpose |
|
|
30
|
+
|---|---|---|
|
|
31
|
+
| `MAPS_TO_IMAS` | SignalSource/SignalNode → IMASNode | Field-level mapping with transform |
|
|
32
|
+
| `POPULATES` | IMASMapping → IMASNode (STRUCT_ARRAY) | Assembly section target with config |
|
|
33
|
+
| `USES_SIGNAL_SOURCE` | IMASMapping → SignalSource | Assembly sources |
|
|
34
|
+
| `MEMBER_OF` | SignalNode/FacilitySignal → SignalSource | Group membership |
|
|
35
|
+
| `HAS_EVIDENCE` | SignalSource → MappingEvidence | Evidence for group's mapping |
|
|
36
|
+
|
|
37
|
+
## MAPS_TO_IMAS Properties
|
|
38
|
+
|
|
39
|
+
| Property | Type | Purpose |
|
|
40
|
+
|----------|------|---------|
|
|
41
|
+
| `source_property` | string | Field on SignalNode to extract (e.g., "r", "z") |
|
|
42
|
+
| `transform_code` | string | Python expression with `value` as input |
|
|
43
|
+
| `units_in` | string | Source units |
|
|
44
|
+
| `units_out` | string | Target units |
|
|
45
|
+
| `status` | string | "validated" or "proposed" |
|
|
46
|
+
| `confidence` | float | 0.0-1.0 |
|
|
47
|
+
| `cocos_source` | integer | Source COCOS convention |
|
|
48
|
+
| `cocos_target` | integer | Target COCOS convention |
|
|
49
|
+
|
|
50
|
+
## Full Traversal Query
|
|
51
|
+
|
|
52
|
+
```cypher
|
|
53
|
+
MATCH (m:IMASMapping {id: $mapping_id})
|
|
54
|
+
-[t:POPULATES]->(root:IMASNode)
|
|
55
|
+
MATCH (root)<-[:HAS_PARENT*]-(leaf:IMASNode)
|
|
56
|
+
<-[map:MAPS_TO_IMAS]-(sg:SignalSource)
|
|
57
|
+
<-[:MEMBER_OF]-(n:SignalNode)
|
|
58
|
+
WHERE (m)-[:USES_SIGNAL_SOURCE]->(sg)
|
|
59
|
+
RETURN leaf.id, map.source_property, map.transform_code, n.path
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Key Checks
|
|
63
|
+
|
|
64
|
+
- **Units**: Must be pint-compatible. Use `pint.UnitRegistry()` to verify conversion.
|
|
65
|
+
- **Sign convention**: Check COCOS. TCV uses COCOS 17 for equilibrium.
|
|
66
|
+
- **Array shape**: IMAS expects specific dimension ordering (time last in many cases).
|
|
67
|
+
- **NaN handling**: Check for NaN/inf in source data before mapping.
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# Graph Schema Summary
|
|
2
|
+
|
|
3
|
+
Condensed schema for the imas-codex Neo4j knowledge graph.
|
|
4
|
+
|
|
5
|
+
**Before writing Cypher queries**, verify property names against this reference.
|
|
6
|
+
For the full schema (53 node types), see `agents/schema-reference.md` or call `get_graph_schema()`.
|
|
7
|
+
|
|
8
|
+
## Core Node Types
|
|
9
|
+
|
|
10
|
+
| Type | Key Fields | Description |
|
|
11
|
+
|------|-----------|-------------|
|
|
12
|
+
| Facility | id, name, machine | Root node per facility (tcv, jet, iter, jt-60sa) |
|
|
13
|
+
| FacilitySignal | id, physics_domain, accessor, status | Signal with access info |
|
|
14
|
+
| DataAccess | id, method_type, data_template, time_template | Code generation template |
|
|
15
|
+
| SignalNode | path, tree_name, node_type, description | MDSplus tree node |
|
|
16
|
+
| TDIFunction | id, name, supported_quantities | TDI accessor function |
|
|
17
|
+
| IMASNode | id (DD path), description, units | IMAS Data Dictionary path |
|
|
18
|
+
| IMASMapping | id, facility_id, physics_domain, status | IDS mapping orchestration node |
|
|
19
|
+
| MappingEvidence | id, evidence_type, content | Evidence supporting a mapping |
|
|
20
|
+
| WikiPage | id, url, title, status, score | Wiki documentation page |
|
|
21
|
+
| WikiChunk | id, **text**, embedding | Searchable wiki text chunk |
|
|
22
|
+
| CodeChunk | id, **text**, embedding | Searchable code chunk |
|
|
23
|
+
| Image | id, source_url, description, embedding | Visual resource from wiki/docs |
|
|
24
|
+
|
|
25
|
+
## WikiChunk Properties (complete)
|
|
26
|
+
|
|
27
|
+
| Property | Type | Notes |
|
|
28
|
+
|----------|------|-------|
|
|
29
|
+
| id | string | e.g. "tcv:Thomson:chunk_0" |
|
|
30
|
+
| wiki_page_id | string | Parent WikiPage ID |
|
|
31
|
+
| artifact_id | string | Parent WikiArtifact ID (for doc chunks) |
|
|
32
|
+
| facility_id | string | Facility filter |
|
|
33
|
+
| chunk_index | integer | Position in document (0-based) |
|
|
34
|
+
| section | string | Section heading |
|
|
35
|
+
| **text** | string | **The actual text content** |
|
|
36
|
+
| embedding | float[] | Vector for semantic search |
|
|
37
|
+
| mdsplus_paths_mentioned | string[] | e.g. ["\\ATLAS::IP"] |
|
|
38
|
+
| imas_paths_mentioned | string[] | e.g. ["equilibrium/time_slice/profiles_1d/psi"] |
|
|
39
|
+
| ppf_paths_mentioned | string[] | JET PPF paths |
|
|
40
|
+
| units_mentioned | string[] | e.g. ["eV", "Tesla"] |
|
|
41
|
+
| conventions_mentioned | string[] | e.g. ["COCOS 11"] |
|
|
42
|
+
| tool_mentions | string[] | e.g. ["tdiExecute", "ppfget"] |
|
|
43
|
+
|
|
44
|
+
## Canonical Query Patterns
|
|
45
|
+
|
|
46
|
+
### Wiki semantic search
|
|
47
|
+
```cypher
|
|
48
|
+
CALL db.index.vector.queryNodes('wiki_chunk_embedding', $k, $embedding)
|
|
49
|
+
YIELD node, score
|
|
50
|
+
MATCH (p:WikiPage)-[:HAS_CHUNK]->(node)
|
|
51
|
+
WHERE p.facility_id = $facility
|
|
52
|
+
RETURN p.title AS page_title, p.url AS url, node.text AS text, score
|
|
53
|
+
ORDER BY score DESC
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Wiki chunks for a path
|
|
57
|
+
```cypher
|
|
58
|
+
MATCH (wc:WikiChunk)-[:DOCUMENTS]->(t:SignalNode)
|
|
59
|
+
WHERE t.path CONTAINS $path
|
|
60
|
+
MATCH (wp:WikiPage)-[:HAS_CHUNK]->(wc)
|
|
61
|
+
RETURN wp.title AS page_title, wc.text AS text
|
|
62
|
+
LIMIT 5
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Signal semantic search
|
|
66
|
+
```cypher
|
|
67
|
+
CALL db.index.vector.queryNodes('facility_signal_desc_embedding', $k, $embedding)
|
|
68
|
+
YIELD node AS signal, score
|
|
69
|
+
MATCH (signal)-[:DATA_ACCESS]->(da:DataAccess)
|
|
70
|
+
OPTIONAL MATCH (signal)-[:HAS_DATA_SOURCE_NODE]->(dn:SignalNode)
|
|
71
|
+
RETURN signal.id, signal.description, da.data_template, score
|
|
72
|
+
ORDER BY score DESC
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Image search
|
|
76
|
+
```cypher
|
|
77
|
+
CALL db.index.vector.queryNodes('image_desc_embedding', $k, $embedding)
|
|
78
|
+
YIELD node, score
|
|
79
|
+
RETURN node.description, node.source_url, node.keywords, score
|
|
80
|
+
ORDER BY score DESC
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Vector Indexes
|
|
84
|
+
|
|
85
|
+
| Index | Node | Search By |
|
|
86
|
+
|-------|------|-----------|
|
|
87
|
+
| wiki_chunk_embedding | WikiChunk | Wiki text content |
|
|
88
|
+
| code_chunk_embedding | CodeChunk | Code content |
|
|
89
|
+
| image_desc_embedding | Image | Image description/caption |
|
|
90
|
+
| facility_signal_desc_embedding | FacilitySignal | Signal description |
|
|
91
|
+
| facility_path_desc_embedding | FacilityPath | Path description |
|
|
92
|
+
| imas_node_embedding | IMASNode | DD path description |
|
|
93
|
+
| signal_node_desc_embedding | SignalNode | Data node description |
|
|
94
|
+
| wiki_artifact_desc_embedding | WikiArtifact | Artifact description |
|
|
95
|
+
| cluster_embedding | IMASSemanticCluster | Cluster content |
|
|
96
|
+
|
|
97
|
+
## Key Relationships
|
|
98
|
+
|
|
99
|
+
| From | Relationship | To |
|
|
100
|
+
|------|-------------|-----|
|
|
101
|
+
| FacilitySignal | DATA_ACCESS | DataAccess |
|
|
102
|
+
| FacilitySignal | HAS_DATA_SOURCE_NODE | SignalNode |
|
|
103
|
+
| FacilitySignal | AT_FACILITY | Facility |
|
|
104
|
+
| SignalNode | AT_FACILITY | Facility |
|
|
105
|
+
| IMASMapping | AT_FACILITY | Facility |
|
|
106
|
+
| WikiChunk | HAS_CHUNK ← | WikiPage |
|
|
107
|
+
| WikiChunk | NEXT_CHUNK | WikiChunk |
|
|
108
|
+
| CodeChunk | HAS_CHUNK ← | CodeExample |
|
|
109
|
+
|
|
110
|
+
## Status Enums
|
|
111
|
+
|
|
112
|
+
| Type | States |
|
|
113
|
+
|------|--------|
|
|
114
|
+
| FacilitySignal | discovered → enriched → checked / skipped / failed |
|
|
115
|
+
| WikiPage | scanned → scored → ingested / skipped / failed |
|
|
116
|
+
| IMASMapping | proposed → endorsed / contested → validated / rejected |
|
|
117
|
+
|
|
118
|
+
## Physics Domains (PhysicsDomain enum)
|
|
119
|
+
|
|
120
|
+
equilibrium, magnetics, electron_density, electron_temperature,
|
|
121
|
+
ion_temperature, radiation, neutron, spectroscopy, mhd,
|
|
122
|
+
heating_current_drive, fueling, vacuum, wall, divertor,
|
|
123
|
+
current_drive, transport, turbulence, pedestal, core_profiles
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Multi-stage build optimization
|
|
2
|
+
# Keep .git for dynamic versioning but minimize other cache-busting files
|
|
3
|
+
|
|
4
|
+
# Python cache files
|
|
5
|
+
__pycache__/
|
|
6
|
+
*.pyc
|
|
7
|
+
*.pyo
|
|
8
|
+
*.pyd
|
|
9
|
+
.Python
|
|
10
|
+
|
|
11
|
+
# Virtual environments
|
|
12
|
+
.venv/
|
|
13
|
+
venv/
|
|
14
|
+
env/
|
|
15
|
+
|
|
16
|
+
# Testing
|
|
17
|
+
tests/
|
|
18
|
+
.pytest_cache/
|
|
19
|
+
.coverage
|
|
20
|
+
htmlcov/
|
|
21
|
+
|
|
22
|
+
# IDE files
|
|
23
|
+
.vscode/
|
|
24
|
+
.idea/
|
|
25
|
+
*.swp
|
|
26
|
+
*.swo
|
|
27
|
+
|
|
28
|
+
# OS specific
|
|
29
|
+
.DS_Store
|
|
30
|
+
Thumbs.db
|
|
31
|
+
|
|
32
|
+
# Build artifacts
|
|
33
|
+
dist/
|
|
34
|
+
build/
|
|
35
|
+
*.egg-info/
|
|
36
|
+
|
|
37
|
+
# Logs
|
|
38
|
+
*.log
|
|
39
|
+
|
|
40
|
+
# Documentation, plans, and tooling (not needed at runtime)
|
|
41
|
+
docs/
|
|
42
|
+
plans/
|
|
43
|
+
agents/
|
|
44
|
+
benchmarks/
|
|
45
|
+
slurm/
|
|
46
|
+
|
|
47
|
+
# File-based data artifacts (graph-native mode uses Neo4j)
|
|
48
|
+
*.pkl
|
|
49
|
+
*.npz
|
|
50
|
+
*.dump
|
|
51
|
+
|
|
52
|
+
# Git files - keep essential ones for dynamic versioning
|
|
53
|
+
# .git/objects/ # Keep objects for setuptools-scm
|
|
54
|
+
# .git/refs/ # Keep refs for setuptools-scm
|
|
55
|
+
.git/refs/remotes/
|
|
56
|
+
.git/logs/
|
|
57
|
+
.git/hooks/
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Develop
|
|
3
|
+
description: Code development with testing and git workflow guardrails
|
|
4
|
+
tools:
|
|
5
|
+
- standard
|
|
6
|
+
- codex/*
|
|
7
|
+
handoffs:
|
|
8
|
+
- label: Update Graph Schema
|
|
9
|
+
agent: graph
|
|
10
|
+
prompt: Update the knowledge graph schema based on the code changes.
|
|
11
|
+
send: false
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Develop Agent
|
|
15
|
+
|
|
16
|
+
You are a **development agent** with full editing capabilities but structured workflow guardrails. You have access to file editing, terminal commands, and testing tools.
|
|
17
|
+
|
|
18
|
+
## Your Role
|
|
19
|
+
|
|
20
|
+
- Implement features and fix bugs
|
|
21
|
+
- Run tests before committing
|
|
22
|
+
- Follow conventional commit format
|
|
23
|
+
- Use `ruff` for linting before commits
|
|
24
|
+
|
|
25
|
+
## Workflow
|
|
26
|
+
|
|
27
|
+
1. Make code changes with `editFiles`
|
|
28
|
+
2. Run `uv run ruff check --fix . && uv run ruff format .`
|
|
29
|
+
3. Run `uv run pytest` to verify
|
|
30
|
+
4. Stage specific files (never `git add -A`)
|
|
31
|
+
5. Commit with `uv run git commit -m 'type: description'`
|
|
32
|
+
|
|
33
|
+
## Restrictions
|
|
34
|
+
|
|
35
|
+
- Always run tests before committing
|
|
36
|
+
- Use single quotes for commit messages
|
|
37
|
+
- Stage files individually, not with `-A`
|
|
38
|
+
|
|
39
|
+
## Full Instructions
|
|
40
|
+
|
|
41
|
+
See [agents/develop.md](../../agents/develop.md) for complete development workflows, testing patterns, and commit conventions.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Explore
|
|
3
|
+
description: Remote facility exploration - SSH, file discovery, pattern search. Read-only access.
|
|
4
|
+
tools:
|
|
5
|
+
- codebase
|
|
6
|
+
- readFile
|
|
7
|
+
- listDirectory
|
|
8
|
+
- fileSearch
|
|
9
|
+
- textSearch
|
|
10
|
+
- fetch
|
|
11
|
+
- problems
|
|
12
|
+
- usages
|
|
13
|
+
- terminalLastCommand
|
|
14
|
+
- codex/*
|
|
15
|
+
handoffs:
|
|
16
|
+
- label: Queue for Ingestion
|
|
17
|
+
agent: Ingest
|
|
18
|
+
prompt: Queue the discovered source files for code ingestion.
|
|
19
|
+
send: false
|
|
20
|
+
- label: Persist to Graph
|
|
21
|
+
agent: Graph
|
|
22
|
+
prompt: Persist the exploration findings to the knowledge graph.
|
|
23
|
+
send: false
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
# Explore Agent
|
|
27
|
+
|
|
28
|
+
You are a **read-only exploration agent** for remote fusion facility discovery. You have access to the `codex` MCP server tools (`python`, `get_graph_schema`, `ingest_nodes`, `private`) but **no file editing capabilities**.
|
|
29
|
+
|
|
30
|
+
## Your Role
|
|
31
|
+
|
|
32
|
+
- **Check locality first** (`hostname`) before choosing execution method
|
|
33
|
+
- **Local facility**: Use terminal directly for single commands (`rg`, `fd`, `tokei`)
|
|
34
|
+
- **Remote facility**: Use direct SSH for single commands (`ssh facility "command"`)
|
|
35
|
+
- Use `python()` only for chained processing and graph operations
|
|
36
|
+
- Discover source files, MDSplus trees, analysis codes
|
|
37
|
+
- Track exploration progress with `FacilityPath` nodes
|
|
38
|
+
- Persist discoveries using `ingest_nodes()` and `private()`
|
|
39
|
+
|
|
40
|
+
## Restrictions
|
|
41
|
+
|
|
42
|
+
- **No file editing** - use handoffs to `develop` agent for code changes
|
|
43
|
+
- **No git operations** - exploration only
|
|
44
|
+
- **Read-only workspace access** - can search and read, not modify
|
|
45
|
+
|
|
46
|
+
## Full Instructions
|
|
47
|
+
|
|
48
|
+
See [agents/explore.md](../../agents/explore.md) for complete exploration workflows, SSH patterns, remote tool usage, and persistence checklists.
|