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.
Files changed (740) hide show
  1. imas_codex-5.0.0rc1/.claude/agents/facility-explorer.md +65 -0
  2. imas_codex-5.0.0rc1/.claude/agents/graph-querier.md +58 -0
  3. imas_codex-5.0.0rc1/.claude/settings.json +21 -0
  4. imas_codex-5.0.0rc1/.claude/skills/facility-access.md +86 -0
  5. imas_codex-5.0.0rc1/.claude/skills/graph-queries.md +60 -0
  6. imas_codex-5.0.0rc1/.claude/skills/mapping-workflow.md +67 -0
  7. imas_codex-5.0.0rc1/.claude/skills/schema-summary.md +123 -0
  8. imas_codex-5.0.0rc1/.cursor/mcp.json +12 -0
  9. imas_codex-5.0.0rc1/.dockerignore +57 -0
  10. imas_codex-5.0.0rc1/.github/agents/develop.agent.md +41 -0
  11. imas_codex-5.0.0rc1/.github/agents/explore.agent.md +48 -0
  12. imas_codex-5.0.0rc1/.github/agents/graph.agent.md +58 -0
  13. imas_codex-5.0.0rc1/.github/agents/ingest.agent.md +50 -0
  14. imas_codex-5.0.0rc1/.github/prompts/commit.prompt.md +33 -0
  15. imas_codex-5.0.0rc1/.github/prompts/gaps.prompt.md +143 -0
  16. imas_codex-5.0.0rc1/.github/prompts/mcp_tool.prompt.md +20 -0
  17. imas_codex-5.0.0rc1/.github/prompts/plan_remote_agent.prompt.md +10 -0
  18. imas_codex-5.0.0rc1/.github/prompts/update-plan.prompt.md +66 -0
  19. imas_codex-5.0.0rc1/.github/workflows/benchmark.yml +362 -0
  20. imas_codex-5.0.0rc1/.github/workflows/container-cleanup.yml +113 -0
  21. imas_codex-5.0.0rc1/.github/workflows/docker-build-push.yml +243 -0
  22. imas_codex-5.0.0rc1/.github/workflows/graph-quality.yml +217 -0
  23. imas_codex-5.0.0rc1/.github/workflows/release.yml +93 -0
  24. imas_codex-5.0.0rc1/.github/workflows/test.yml +154 -0
  25. imas_codex-5.0.0rc1/.gitignore +88 -0
  26. imas_codex-5.0.0rc1/.gitleaks.toml +7 -0
  27. imas_codex-5.0.0rc1/.nojekyll +0 -0
  28. imas_codex-5.0.0rc1/.pre-commit-config.yaml +34 -0
  29. imas_codex-5.0.0rc1/.vscode/instructions.json +10 -0
  30. imas_codex-5.0.0rc1/.vscode/mcp.json +10 -0
  31. imas_codex-5.0.0rc1/.vscode/settings.json +67 -0
  32. imas_codex-5.0.0rc1/.vscode/toolsets.jsonc +100 -0
  33. imas_codex-5.0.0rc1/AGENTS.md +875 -0
  34. imas_codex-5.0.0rc1/CLAUDE.md +29 -0
  35. imas_codex-5.0.0rc1/DOCKER.md +369 -0
  36. imas_codex-5.0.0rc1/Dockerfile +228 -0
  37. imas_codex-5.0.0rc1/Makefile +114 -0
  38. imas_codex-5.0.0rc1/PKG-INFO +1094 -0
  39. imas_codex-5.0.0rc1/README.md +1024 -0
  40. imas_codex-5.0.0rc1/WIKI_SCRAPING_SETUP.md +329 -0
  41. imas_codex-5.0.0rc1/__main__.py +128 -0
  42. imas_codex-5.0.0rc1/agents/README.md +86 -0
  43. imas_codex-5.0.0rc1/agents/develop.md +52 -0
  44. imas_codex-5.0.0rc1/agents/explore.md +263 -0
  45. imas_codex-5.0.0rc1/agents/graph.md +140 -0
  46. imas_codex-5.0.0rc1/agents/ingest.md +131 -0
  47. imas_codex-5.0.0rc1/agents/onboard.md +412 -0
  48. imas_codex-5.0.0rc1/asv.conf.json +32 -0
  49. imas_codex-5.0.0rc1/benchmarks/README.md +81 -0
  50. imas_codex-5.0.0rc1/benchmarks/__init__.py +7 -0
  51. imas_codex-5.0.0rc1/benchmarks/bench_embeddings.py +80 -0
  52. imas_codex-5.0.0rc1/benchmarks/bench_graph_queries.py +132 -0
  53. imas_codex-5.0.0rc1/benchmarks/bench_mcp_facility_tools.py +132 -0
  54. imas_codex-5.0.0rc1/benchmarks/bench_mcp_imas_tools.py +133 -0
  55. imas_codex-5.0.0rc1/benchmarks/bench_mcp_search.py +105 -0
  56. imas_codex-5.0.0rc1/benchmarks/bench_memory.py +64 -0
  57. imas_codex-5.0.0rc1/benchmarks/bench_query_builder.py +64 -0
  58. imas_codex-5.0.0rc1/benchmarks/bench_server_startup.py +52 -0
  59. imas_codex-5.0.0rc1/benchmarks/bench_subsystems.py +130 -0
  60. imas_codex-5.0.0rc1/benchmarks/benchmark_runner.py +194 -0
  61. imas_codex-5.0.0rc1/benchmarks/conftest_bench.py +87 -0
  62. imas_codex-5.0.0rc1/docker-compose.yml +74 -0
  63. imas_codex-5.0.0rc1/docker-entrypoint.sh +68 -0
  64. imas_codex-5.0.0rc1/docs/README.md +20 -0
  65. imas_codex-5.0.0rc1/docs/api/REPL_API.md +375 -0
  66. imas_codex-5.0.0rc1/docs/architecture/cocos-validation.md +419 -0
  67. imas_codex-5.0.0rc1/docs/architecture/cocos.md +230 -0
  68. imas_codex-5.0.0rc1/docs/architecture/discovery.md +555 -0
  69. imas_codex-5.0.0rc1/docs/architecture/facility-access.md +680 -0
  70. imas_codex-5.0.0rc1/docs/architecture/graph-profiles.md +209 -0
  71. imas_codex-5.0.0rc1/docs/architecture/graph.md +214 -0
  72. imas_codex-5.0.0rc1/docs/architecture/ids-mapping.md +227 -0
  73. imas_codex-5.0.0rc1/docs/architecture/imas_dd.md +89 -0
  74. imas_codex-5.0.0rc1/docs/architecture/keyring.md +314 -0
  75. imas_codex-5.0.0rc1/docs/architecture/llamaindex-agents.md +97 -0
  76. imas_codex-5.0.0rc1/docs/architecture/mdsplus.md +101 -0
  77. imas_codex-5.0.0rc1/docs/architecture/services.md +213 -0
  78. imas_codex-5.0.0rc1/docs/architecture/signals.md +341 -0
  79. imas_codex-5.0.0rc1/docs/architecture/wiki.md +193 -0
  80. imas_codex-5.0.0rc1/docs/images/imas_dd_evolution.png +0 -0
  81. imas_codex-5.0.0rc1/docs/images/jet_component_overview.png +0 -0
  82. imas_codex-5.0.0rc1/docs/images/jet_composite_geometry.png +0 -0
  83. imas_codex-5.0.0rc1/docs/images/jet_epoch_evolution.png +0 -0
  84. imas_codex-5.0.0rc1/docs/images/jet_epoch_summary.png +0 -0
  85. imas_codex-5.0.0rc1/docs/images/jet_evolution.gif +0 -0
  86. imas_codex-5.0.0rc1/docs/images/jet_limiter_comparison.png +0 -0
  87. imas_codex-5.0.0rc1/docs/images/jet_limiter_contours.png +0 -0
  88. imas_codex-5.0.0rc1/docs/images/jet_limiter_epochs.png +0 -0
  89. imas_codex-5.0.0rc1/docs/images/jet_machine_description_poloidal.png +0 -0
  90. imas_codex-5.0.0rc1/docs/images/jet_magnetics_evolution.png +0 -0
  91. imas_codex-5.0.0rc1/docs/images/jet_passive_circuit_evolution.png +0 -0
  92. imas_codex-5.0.0rc1/docs/images/jet_pf_coil_evolution.png +0 -0
  93. imas_codex-5.0.0rc1/docs/images/jet_poloidal_p68613.png +0 -0
  94. imas_codex-5.0.0rc1/docs/images/jet_poloidal_p79854.png +0 -0
  95. imas_codex-5.0.0rc1/docs/images/jet_poloidal_p89440.png +0 -0
  96. imas_codex-5.0.0rc1/docs/images/jet_wall_limiter_evolution.png +0 -0
  97. imas_codex-5.0.0rc1/docs/zellij-quickstart.md +212 -0
  98. imas_codex-5.0.0rc1/env.example +47 -0
  99. imas_codex-5.0.0rc1/hatch_build_hooks.py +367 -0
  100. imas_codex-5.0.0rc1/imas_codex/__init__.py +160 -0
  101. imas_codex-5.0.0rc1/imas_codex/__main__.py +38 -0
  102. imas_codex-5.0.0rc1/imas_codex/cli/README.md +62 -0
  103. imas_codex-5.0.0rc1/imas_codex/cli/__init__.py +95 -0
  104. imas_codex-5.0.0rc1/imas_codex/cli/compute.py +609 -0
  105. imas_codex-5.0.0rc1/imas_codex/cli/config_cli.py +606 -0
  106. imas_codex-5.0.0rc1/imas_codex/cli/credentials.py +581 -0
  107. imas_codex-5.0.0rc1/imas_codex/cli/discover/__init__.py +477 -0
  108. imas_codex-5.0.0rc1/imas_codex/cli/discover/code.py +351 -0
  109. imas_codex-5.0.0rc1/imas_codex/cli/discover/common.py +489 -0
  110. imas_codex-5.0.0rc1/imas_codex/cli/discover/documents.py +266 -0
  111. imas_codex-5.0.0rc1/imas_codex/cli/discover/paths.py +763 -0
  112. imas_codex-5.0.0rc1/imas_codex/cli/discover/signals.py +429 -0
  113. imas_codex-5.0.0rc1/imas_codex/cli/discover/wiki.py +1213 -0
  114. imas_codex-5.0.0rc1/imas_codex/cli/embed.py +755 -0
  115. imas_codex-5.0.0rc1/imas_codex/cli/facilities.py +95 -0
  116. imas_codex-5.0.0rc1/imas_codex/cli/graph/__init__.py +95 -0
  117. imas_codex-5.0.0rc1/imas_codex/cli/graph/data.py +1210 -0
  118. imas_codex-5.0.0rc1/imas_codex/cli/graph/registry.py +932 -0
  119. imas_codex-5.0.0rc1/imas_codex/cli/graph/server.py +473 -0
  120. imas_codex-5.0.0rc1/imas_codex/cli/graph_progress.py +319 -0
  121. imas_codex-5.0.0rc1/imas_codex/cli/host.py +1592 -0
  122. imas_codex-5.0.0rc1/imas_codex/cli/imas_dd.py +1188 -0
  123. imas_codex-5.0.0rc1/imas_codex/cli/llm_cli.py +879 -0
  124. imas_codex-5.0.0rc1/imas_codex/cli/logging.py +638 -0
  125. imas_codex-5.0.0rc1/imas_codex/cli/map.py +962 -0
  126. imas_codex-5.0.0rc1/imas_codex/cli/release.py +382 -0
  127. imas_codex-5.0.0rc1/imas_codex/cli/rich_output.py +51 -0
  128. imas_codex-5.0.0rc1/imas_codex/cli/serve.py +93 -0
  129. imas_codex-5.0.0rc1/imas_codex/cli/services.py +1617 -0
  130. imas_codex-5.0.0rc1/imas_codex/cli/shutdown.py +307 -0
  131. imas_codex-5.0.0rc1/imas_codex/cli/tools.py +615 -0
  132. imas_codex-5.0.0rc1/imas_codex/cli/tunnel.py +1014 -0
  133. imas_codex-5.0.0rc1/imas_codex/cli/utils.py +184 -0
  134. imas_codex-5.0.0rc1/imas_codex/cli/wiki.py +343 -0
  135. imas_codex-5.0.0rc1/imas_codex/clusters/__init__.py +30 -0
  136. imas_codex-5.0.0rc1/imas_codex/clusters/clustering.py +270 -0
  137. imas_codex-5.0.0rc1/imas_codex/clusters/config.py +78 -0
  138. imas_codex-5.0.0rc1/imas_codex/clusters/extractor.py +927 -0
  139. imas_codex-5.0.0rc1/imas_codex/clusters/hierarchical.py +284 -0
  140. imas_codex-5.0.0rc1/imas_codex/clusters/label_cache.py +554 -0
  141. imas_codex-5.0.0rc1/imas_codex/clusters/labeler.py +332 -0
  142. imas_codex-5.0.0rc1/imas_codex/clusters/models.py +311 -0
  143. imas_codex-5.0.0rc1/imas_codex/clusters/preprocessing.py +136 -0
  144. imas_codex-5.0.0rc1/imas_codex/clusters/search.py +486 -0
  145. imas_codex-5.0.0rc1/imas_codex/cocos/__init__.py +52 -0
  146. imas_codex-5.0.0rc1/imas_codex/cocos/calculator.py +433 -0
  147. imas_codex-5.0.0rc1/imas_codex/cocos/loaders.py +208 -0
  148. imas_codex-5.0.0rc1/imas_codex/cocos/transforms.py +80 -0
  149. imas_codex-5.0.0rc1/imas_codex/config/README.md +500 -0
  150. imas_codex-5.0.0rc1/imas_codex/config/discovery_config.py +584 -0
  151. imas_codex-5.0.0rc1/imas_codex/config/facilities/iter.yaml +137 -0
  152. imas_codex-5.0.0rc1/imas_codex/config/facilities/jet.yaml +815 -0
  153. imas_codex-5.0.0rc1/imas_codex/config/facilities/jt-60sa.yaml +262 -0
  154. imas_codex-5.0.0rc1/imas_codex/config/facilities/tcv.yaml +293 -0
  155. imas_codex-5.0.0rc1/imas_codex/config/graph.yaml +40 -0
  156. imas_codex-5.0.0rc1/imas_codex/config/hosts.yaml +46 -0
  157. imas_codex-5.0.0rc1/imas_codex/config/litellm_config.yaml +65 -0
  158. imas_codex-5.0.0rc1/imas_codex/config/patterns/discovery.yaml +28 -0
  159. imas_codex-5.0.0rc1/imas_codex/config/patterns/exclude.yaml +290 -0
  160. imas_codex-5.0.0rc1/imas_codex/config/patterns/file_types.yaml +126 -0
  161. imas_codex-5.0.0rc1/imas_codex/config/patterns/scoring/base.yaml +65 -0
  162. imas_codex-5.0.0rc1/imas_codex/config/patterns/scoring/data_systems.yaml +132 -0
  163. imas_codex-5.0.0rc1/imas_codex/config/patterns/scoring/physics.yaml +178 -0
  164. imas_codex-5.0.0rc1/imas_codex/config/prompt_caching.yaml +10 -0
  165. imas_codex-5.0.0rc1/imas_codex/config/remote_tools.yaml +270 -0
  166. imas_codex-5.0.0rc1/imas_codex/config/services/imas-codex-db.service +60 -0
  167. imas_codex-5.0.0rc1/imas_codex/config/services/imas-codex-embed-tunnel.service +38 -0
  168. imas_codex-5.0.0rc1/imas_codex/config/services/imas-codex-embed.service +46 -0
  169. imas_codex-5.0.0rc1/imas_codex/core/__init__.py +1 -0
  170. imas_codex-5.0.0rc1/imas_codex/core/clusters.py +637 -0
  171. imas_codex-5.0.0rc1/imas_codex/core/data_model.py +243 -0
  172. imas_codex-5.0.0rc1/imas_codex/core/exclusions.py +136 -0
  173. imas_codex-5.0.0rc1/imas_codex/core/extractors/__init__.py +21 -0
  174. imas_codex-5.0.0rc1/imas_codex/core/extractors/base.py +176 -0
  175. imas_codex-5.0.0rc1/imas_codex/core/extractors/coordinate_extractor.py +50 -0
  176. imas_codex-5.0.0rc1/imas_codex/core/extractors/identifier_extractor.py +299 -0
  177. imas_codex-5.0.0rc1/imas_codex/core/extractors/metadata_extractor.py +220 -0
  178. imas_codex-5.0.0rc1/imas_codex/core/extractors/physics_extractor.py +26 -0
  179. imas_codex-5.0.0rc1/imas_codex/core/extractors/semantic_extractor.py +85 -0
  180. imas_codex-5.0.0rc1/imas_codex/core/extractors/validation_extractor.py +41 -0
  181. imas_codex-5.0.0rc1/imas_codex/core/paths.py +33 -0
  182. imas_codex-5.0.0rc1/imas_codex/core/physics_categorization.py +133 -0
  183. imas_codex-5.0.0rc1/imas_codex/core/progress_monitor.py +414 -0
  184. imas_codex-5.0.0rc1/imas_codex/core/unit_loader.py +115 -0
  185. imas_codex-5.0.0rc1/imas_codex/core/xml_parser.py +693 -0
  186. imas_codex-5.0.0rc1/imas_codex/core/xml_utils.py +205 -0
  187. imas_codex-5.0.0rc1/imas_codex/dd_accessor.py +385 -0
  188. imas_codex-5.0.0rc1/imas_codex/definitions/README.md +132 -0
  189. imas_codex-5.0.0rc1/imas_codex/definitions/__init__.py +38 -0
  190. imas_codex-5.0.0rc1/imas_codex/definitions/clusters/__init__.py +33 -0
  191. imas_codex-5.0.0rc1/imas_codex/definitions/clusters/concepts.yaml +616 -0
  192. imas_codex-5.0.0rc1/imas_codex/definitions/clusters/data_types.yaml +96 -0
  193. imas_codex-5.0.0rc1/imas_codex/definitions/clusters/labels.json +52262 -0
  194. imas_codex-5.0.0rc1/imas_codex/definitions/clusters/mapping_relevance.yaml +56 -0
  195. imas_codex-5.0.0rc1/imas_codex/definitions/clusters/proposed_terms.json +8399 -0
  196. imas_codex-5.0.0rc1/imas_codex/definitions/clusters/tags.yaml +151 -0
  197. imas_codex-5.0.0rc1/imas_codex/definitions/physics/__init__.py +11 -0
  198. imas_codex-5.0.0rc1/imas_codex/definitions/physics/domains.yaml +345 -0
  199. imas_codex-5.0.0rc1/imas_codex/definitions/physics/ids_domains.json +156 -0
  200. imas_codex-5.0.0rc1/imas_codex/discovery/README.md +655 -0
  201. imas_codex-5.0.0rc1/imas_codex/discovery/__init__.py +81 -0
  202. imas_codex-5.0.0rc1/imas_codex/discovery/base/__init__.py +204 -0
  203. imas_codex-5.0.0rc1/imas_codex/discovery/base/claims.py +214 -0
  204. imas_codex-5.0.0rc1/imas_codex/discovery/base/embed_worker.py +819 -0
  205. imas_codex-5.0.0rc1/imas_codex/discovery/base/engine.py +223 -0
  206. imas_codex-5.0.0rc1/imas_codex/discovery/base/executor.py +309 -0
  207. imas_codex-5.0.0rc1/imas_codex/discovery/base/facility.py +464 -0
  208. imas_codex-5.0.0rc1/imas_codex/discovery/base/grouping.py +300 -0
  209. imas_codex-5.0.0rc1/imas_codex/discovery/base/image.py +805 -0
  210. imas_codex-5.0.0rc1/imas_codex/discovery/base/imas_patterns.py +303 -0
  211. imas_codex-5.0.0rc1/imas_codex/discovery/base/llm.py +914 -0
  212. imas_codex-5.0.0rc1/imas_codex/discovery/base/progress.py +2256 -0
  213. imas_codex-5.0.0rc1/imas_codex/discovery/base/reset.py +430 -0
  214. imas_codex-5.0.0rc1/imas_codex/discovery/base/scoring.py +202 -0
  215. imas_codex-5.0.0rc1/imas_codex/discovery/base/services.py +965 -0
  216. imas_codex-5.0.0rc1/imas_codex/discovery/base/state.py +104 -0
  217. imas_codex-5.0.0rc1/imas_codex/discovery/base/supervision.py +1143 -0
  218. imas_codex-5.0.0rc1/imas_codex/discovery/base/transfer.py +753 -0
  219. imas_codex-5.0.0rc1/imas_codex/discovery/code/__init__.py +43 -0
  220. imas_codex-5.0.0rc1/imas_codex/discovery/code/enrichment.py +240 -0
  221. imas_codex-5.0.0rc1/imas_codex/discovery/code/graph_ops.py +901 -0
  222. imas_codex-5.0.0rc1/imas_codex/discovery/code/parallel.py +492 -0
  223. imas_codex-5.0.0rc1/imas_codex/discovery/code/progress.py +1145 -0
  224. imas_codex-5.0.0rc1/imas_codex/discovery/code/scanner.py +717 -0
  225. imas_codex-5.0.0rc1/imas_codex/discovery/code/scorer.py +651 -0
  226. imas_codex-5.0.0rc1/imas_codex/discovery/code/state.py +65 -0
  227. imas_codex-5.0.0rc1/imas_codex/discovery/code/workers.py +1140 -0
  228. imas_codex-5.0.0rc1/imas_codex/discovery/documents/__init__.py +30 -0
  229. imas_codex-5.0.0rc1/imas_codex/discovery/documents/pipeline.py +155 -0
  230. imas_codex-5.0.0rc1/imas_codex/discovery/documents/scanner.py +389 -0
  231. imas_codex-5.0.0rc1/imas_codex/discovery/documents/workers.py +439 -0
  232. imas_codex-5.0.0rc1/imas_codex/discovery/mdsplus/__init__.py +16 -0
  233. imas_codex-5.0.0rc1/imas_codex/discovery/mdsplus/enrichment.py +169 -0
  234. imas_codex-5.0.0rc1/imas_codex/discovery/mdsplus/epochs.py +146 -0
  235. imas_codex-5.0.0rc1/imas_codex/discovery/mdsplus/graph_ops.py +2063 -0
  236. imas_codex-5.0.0rc1/imas_codex/discovery/mdsplus/pipeline.py +214 -0
  237. imas_codex-5.0.0rc1/imas_codex/discovery/mdsplus/state.py +47 -0
  238. imas_codex-5.0.0rc1/imas_codex/discovery/mdsplus/tdi_linkage.py +165 -0
  239. imas_codex-5.0.0rc1/imas_codex/discovery/mdsplus/workers.py +383 -0
  240. imas_codex-5.0.0rc1/imas_codex/discovery/paths/__init__.py +67 -0
  241. imas_codex-5.0.0rc1/imas_codex/discovery/paths/enrichment.py +638 -0
  242. imas_codex-5.0.0rc1/imas_codex/discovery/paths/frontier.py +3477 -0
  243. imas_codex-5.0.0rc1/imas_codex/discovery/paths/models.py +424 -0
  244. imas_codex-5.0.0rc1/imas_codex/discovery/paths/orcid.py +407 -0
  245. imas_codex-5.0.0rc1/imas_codex/discovery/paths/parallel.py +3313 -0
  246. imas_codex-5.0.0rc1/imas_codex/discovery/paths/progress.py +1627 -0
  247. imas_codex-5.0.0rc1/imas_codex/discovery/paths/scanner.py +599 -0
  248. imas_codex-5.0.0rc1/imas_codex/discovery/paths/scorer.py +681 -0
  249. imas_codex-5.0.0rc1/imas_codex/discovery/paths/users.py +375 -0
  250. imas_codex-5.0.0rc1/imas_codex/discovery/signals/README.md +276 -0
  251. imas_codex-5.0.0rc1/imas_codex/discovery/signals/__init__.py +42 -0
  252. imas_codex-5.0.0rc1/imas_codex/discovery/signals/models.py +261 -0
  253. imas_codex-5.0.0rc1/imas_codex/discovery/signals/parallel.py +5209 -0
  254. imas_codex-5.0.0rc1/imas_codex/discovery/signals/progress.py +1055 -0
  255. imas_codex-5.0.0rc1/imas_codex/discovery/signals/scanners/__init__.py +51 -0
  256. imas_codex-5.0.0rc1/imas_codex/discovery/signals/scanners/base.py +265 -0
  257. imas_codex-5.0.0rc1/imas_codex/discovery/signals/scanners/device_xml.py +2827 -0
  258. imas_codex-5.0.0rc1/imas_codex/discovery/signals/scanners/edas.py +284 -0
  259. imas_codex-5.0.0rc1/imas_codex/discovery/signals/scanners/imas.py +109 -0
  260. imas_codex-5.0.0rc1/imas_codex/discovery/signals/scanners/jpf.py +282 -0
  261. imas_codex-5.0.0rc1/imas_codex/discovery/signals/scanners/mdsplus.py +486 -0
  262. imas_codex-5.0.0rc1/imas_codex/discovery/signals/scanners/ppf.py +370 -0
  263. imas_codex-5.0.0rc1/imas_codex/discovery/signals/scanners/tdi.py +173 -0
  264. imas_codex-5.0.0rc1/imas_codex/discovery/signals/scanners/wiki.py +474 -0
  265. imas_codex-5.0.0rc1/imas_codex/discovery/signals/tdi.py +607 -0
  266. imas_codex-5.0.0rc1/imas_codex/discovery/static/__init__.py +1 -0
  267. imas_codex-5.0.0rc1/imas_codex/discovery/static/graph_ops.py +11 -0
  268. imas_codex-5.0.0rc1/imas_codex/discovery/static/parallel.py +226 -0
  269. imas_codex-5.0.0rc1/imas_codex/discovery/static/state.py +44 -0
  270. imas_codex-5.0.0rc1/imas_codex/discovery/static/workers.py +775 -0
  271. imas_codex-5.0.0rc1/imas_codex/discovery/wiki/__init__.py +125 -0
  272. imas_codex-5.0.0rc1/imas_codex/discovery/wiki/adapters.py +3370 -0
  273. imas_codex-5.0.0rc1/imas_codex/discovery/wiki/auth.py +914 -0
  274. imas_codex-5.0.0rc1/imas_codex/discovery/wiki/config.py +154 -0
  275. imas_codex-5.0.0rc1/imas_codex/discovery/wiki/confluence.py +1293 -0
  276. imas_codex-5.0.0rc1/imas_codex/discovery/wiki/entity_extraction.py +433 -0
  277. imas_codex-5.0.0rc1/imas_codex/discovery/wiki/excel.py +346 -0
  278. imas_codex-5.0.0rc1/imas_codex/discovery/wiki/graph_ops.py +1886 -0
  279. imas_codex-5.0.0rc1/imas_codex/discovery/wiki/image.py +48 -0
  280. imas_codex-5.0.0rc1/imas_codex/discovery/wiki/keycloak.py +271 -0
  281. imas_codex-5.0.0rc1/imas_codex/discovery/wiki/mediawiki.py +1363 -0
  282. imas_codex-5.0.0rc1/imas_codex/discovery/wiki/models.py +597 -0
  283. imas_codex-5.0.0rc1/imas_codex/discovery/wiki/monitor.py +791 -0
  284. imas_codex-5.0.0rc1/imas_codex/discovery/wiki/parallel.py +1279 -0
  285. imas_codex-5.0.0rc1/imas_codex/discovery/wiki/pipeline.py +2469 -0
  286. imas_codex-5.0.0rc1/imas_codex/discovery/wiki/prefetch.py +84 -0
  287. imas_codex-5.0.0rc1/imas_codex/discovery/wiki/progress.py +1648 -0
  288. imas_codex-5.0.0rc1/imas_codex/discovery/wiki/scoring.py +1040 -0
  289. imas_codex-5.0.0rc1/imas_codex/discovery/wiki/scraper.py +527 -0
  290. imas_codex-5.0.0rc1/imas_codex/discovery/wiki/state.py +855 -0
  291. imas_codex-5.0.0rc1/imas_codex/discovery/wiki/workers.py +2024 -0
  292. imas_codex-5.0.0rc1/imas_codex/embeddings/__init__.py +44 -0
  293. imas_codex-5.0.0rc1/imas_codex/embeddings/cache.py +201 -0
  294. imas_codex-5.0.0rc1/imas_codex/embeddings/client.py +351 -0
  295. imas_codex-5.0.0rc1/imas_codex/embeddings/config.py +139 -0
  296. imas_codex-5.0.0rc1/imas_codex/embeddings/description.py +132 -0
  297. imas_codex-5.0.0rc1/imas_codex/embeddings/embed.py +109 -0
  298. imas_codex-5.0.0rc1/imas_codex/embeddings/embeddings.py +183 -0
  299. imas_codex-5.0.0rc1/imas_codex/embeddings/encoder.py +779 -0
  300. imas_codex-5.0.0rc1/imas_codex/embeddings/openrouter_client.py +156 -0
  301. imas_codex-5.0.0rc1/imas_codex/embeddings/openrouter_embed.py +594 -0
  302. imas_codex-5.0.0rc1/imas_codex/embeddings/readiness.py +253 -0
  303. imas_codex-5.0.0rc1/imas_codex/embeddings/resilience.py +179 -0
  304. imas_codex-5.0.0rc1/imas_codex/embeddings/server.py +786 -0
  305. imas_codex-5.0.0rc1/imas_codex/graph/README.md +226 -0
  306. imas_codex-5.0.0rc1/imas_codex/graph/__init__.py +109 -0
  307. imas_codex-5.0.0rc1/imas_codex/graph/_ensure_models.py +106 -0
  308. imas_codex-5.0.0rc1/imas_codex/graph/build_dd.py +3589 -0
  309. imas_codex-5.0.0rc1/imas_codex/graph/client.py +968 -0
  310. imas_codex-5.0.0rc1/imas_codex/graph/dd_enrichment.py +893 -0
  311. imas_codex-5.0.0rc1/imas_codex/graph/dd_graph_ops.py +466 -0
  312. imas_codex-5.0.0rc1/imas_codex/graph/dd_identifier_enrichment.py +404 -0
  313. imas_codex-5.0.0rc1/imas_codex/graph/dd_ids_enrichment.py +523 -0
  314. imas_codex-5.0.0rc1/imas_codex/graph/dd_progress.py +258 -0
  315. imas_codex-5.0.0rc1/imas_codex/graph/dd_workers.py +1087 -0
  316. imas_codex-5.0.0rc1/imas_codex/graph/dirs.py +322 -0
  317. imas_codex-5.0.0rc1/imas_codex/graph/domain_queries.py +704 -0
  318. imas_codex-5.0.0rc1/imas_codex/graph/formatters.py +95 -0
  319. imas_codex-5.0.0rc1/imas_codex/graph/ghcr.py +624 -0
  320. imas_codex-5.0.0rc1/imas_codex/graph/health.py +137 -0
  321. imas_codex-5.0.0rc1/imas_codex/graph/meta.py +267 -0
  322. imas_codex-5.0.0rc1/imas_codex/graph/neo4j_ops.py +839 -0
  323. imas_codex-5.0.0rc1/imas_codex/graph/profiles.py +627 -0
  324. imas_codex-5.0.0rc1/imas_codex/graph/query_builder.py +236 -0
  325. imas_codex-5.0.0rc1/imas_codex/graph/remote.py +1243 -0
  326. imas_codex-5.0.0rc1/imas_codex/graph/schema.py +792 -0
  327. imas_codex-5.0.0rc1/imas_codex/graph/schema_context.py +287 -0
  328. imas_codex-5.0.0rc1/imas_codex/graph/temp_neo4j.py +354 -0
  329. imas_codex-5.0.0rc1/imas_codex/graph_analyzer.py +287 -0
  330. imas_codex-5.0.0rc1/imas_codex/ids/__init__.py +21 -0
  331. imas_codex-5.0.0rc1/imas_codex/ids/assembler.py +566 -0
  332. imas_codex-5.0.0rc1/imas_codex/ids/codegen.py +409 -0
  333. imas_codex-5.0.0rc1/imas_codex/ids/graph_ops.py +490 -0
  334. imas_codex-5.0.0rc1/imas_codex/ids/mapping.py +1791 -0
  335. imas_codex-5.0.0rc1/imas_codex/ids/models.py +559 -0
  336. imas_codex-5.0.0rc1/imas_codex/ids/progress.py +418 -0
  337. imas_codex-5.0.0rc1/imas_codex/ids/recipes/jet/pf_active.yaml +87 -0
  338. imas_codex-5.0.0rc1/imas_codex/ids/tools.py +959 -0
  339. imas_codex-5.0.0rc1/imas_codex/ids/transforms.py +166 -0
  340. imas_codex-5.0.0rc1/imas_codex/ids/validation.py +945 -0
  341. imas_codex-5.0.0rc1/imas_codex/ids/workers.py +967 -0
  342. imas_codex-5.0.0rc1/imas_codex/ingestion/__init__.py +61 -0
  343. imas_codex-5.0.0rc1/imas_codex/ingestion/chunkers.py +197 -0
  344. imas_codex-5.0.0rc1/imas_codex/ingestion/extractors/__init__.py +21 -0
  345. imas_codex-5.0.0rc1/imas_codex/ingestion/extractors/ids.py +50 -0
  346. imas_codex-5.0.0rc1/imas_codex/ingestion/extractors/mdsplus.py +152 -0
  347. imas_codex-5.0.0rc1/imas_codex/ingestion/extractors/units.py +101 -0
  348. imas_codex-5.0.0rc1/imas_codex/ingestion/graph.py +543 -0
  349. imas_codex-5.0.0rc1/imas_codex/ingestion/pipeline.py +584 -0
  350. imas_codex-5.0.0rc1/imas_codex/ingestion/queue.py +276 -0
  351. imas_codex-5.0.0rc1/imas_codex/ingestion/readers/__init__.py +22 -0
  352. imas_codex-5.0.0rc1/imas_codex/ingestion/readers/remote.py +313 -0
  353. imas_codex-5.0.0rc1/imas_codex/ingestion/search.py +92 -0
  354. imas_codex-5.0.0rc1/imas_codex/llm/README.md +216 -0
  355. imas_codex-5.0.0rc1/imas_codex/llm/__init__.py +14 -0
  356. imas_codex-5.0.0rc1/imas_codex/llm/prompt_loader.py +1176 -0
  357. imas_codex-5.0.0rc1/imas_codex/llm/prompts/__init__.py +5 -0
  358. imas_codex-5.0.0rc1/imas_codex/llm/prompts/clusters/labeler.md +54 -0
  359. imas_codex-5.0.0rc1/imas_codex/llm/prompts/code/scorer.md +107 -0
  360. imas_codex-5.0.0rc1/imas_codex/llm/prompts/code/triage.md +129 -0
  361. imas_codex-5.0.0rc1/imas_codex/llm/prompts/discovery/data_access.md +291 -0
  362. imas_codex-5.0.0rc1/imas_codex/llm/prompts/discovery/enricher.md +41 -0
  363. imas_codex-5.0.0rc1/imas_codex/llm/prompts/discovery/roots.md +268 -0
  364. imas_codex-5.0.0rc1/imas_codex/llm/prompts/discovery/static-enricher.md +100 -0
  365. imas_codex-5.0.0rc1/imas_codex/llm/prompts/exploration/facility.md +113 -0
  366. imas_codex-5.0.0rc1/imas_codex/llm/prompts/imas/enrichment.md +73 -0
  367. imas_codex-5.0.0rc1/imas_codex/llm/prompts/imas/identifier_enrichment.md +54 -0
  368. imas_codex-5.0.0rc1/imas_codex/llm/prompts/imas/ids_enrichment.md +74 -0
  369. imas_codex-5.0.0rc1/imas_codex/llm/prompts/mapping/assembly.md +41 -0
  370. imas_codex-5.0.0rc1/imas_codex/llm/prompts/mapping/assembly_system.md +112 -0
  371. imas_codex-5.0.0rc1/imas_codex/llm/prompts/mapping/signal_mapping.md +127 -0
  372. imas_codex-5.0.0rc1/imas_codex/llm/prompts/mapping/signal_mapping_system.md +96 -0
  373. imas_codex-5.0.0rc1/imas_codex/llm/prompts/mapping/target_assignment.md +57 -0
  374. imas_codex-5.0.0rc1/imas_codex/llm/prompts/mapping/target_assignment_system.md +62 -0
  375. imas_codex-5.0.0rc1/imas_codex/llm/prompts/mapping/validation.md +63 -0
  376. imas_codex-5.0.0rc1/imas_codex/llm/prompts/paths/scorer.md +192 -0
  377. imas_codex-5.0.0rc1/imas_codex/llm/prompts/paths/triage.md +190 -0
  378. imas_codex-5.0.0rc1/imas_codex/llm/prompts/shared/completion.md +29 -0
  379. imas_codex-5.0.0rc1/imas_codex/llm/prompts/shared/safety.md +38 -0
  380. imas_codex-5.0.0rc1/imas_codex/llm/prompts/shared/schema/cluster-label-output.md +21 -0
  381. imas_codex-5.0.0rc1/imas_codex/llm/prompts/shared/schema/cluster-vocabularies.md +25 -0
  382. imas_codex-5.0.0rc1/imas_codex/llm/prompts/shared/schema/diagnostic-categories.md +15 -0
  383. imas_codex-5.0.0rc1/imas_codex/llm/prompts/shared/schema/dimension-calibration.md +20 -0
  384. imas_codex-5.0.0rc1/imas_codex/llm/prompts/shared/schema/discovery-categories.md +25 -0
  385. imas_codex-5.0.0rc1/imas_codex/llm/prompts/shared/schema/document-scoring-output.md +23 -0
  386. imas_codex-5.0.0rc1/imas_codex/llm/prompts/shared/schema/file-scoring-output.md +22 -0
  387. imas_codex-5.0.0rc1/imas_codex/llm/prompts/shared/schema/image-caption-output.md +28 -0
  388. imas_codex-5.0.0rc1/imas_codex/llm/prompts/shared/schema/path-purposes.md +26 -0
  389. imas_codex-5.0.0rc1/imas_codex/llm/prompts/shared/schema/physics-domains.md +14 -0
  390. imas_codex-5.0.0rc1/imas_codex/llm/prompts/shared/schema/score-dimensions.md +21 -0
  391. imas_codex-5.0.0rc1/imas_codex/llm/prompts/shared/schema/score-output.md +28 -0
  392. imas_codex-5.0.0rc1/imas_codex/llm/prompts/shared/schema/scoring-output.md +22 -0
  393. imas_codex-5.0.0rc1/imas_codex/llm/prompts/shared/schema/wiki-purposes.md +30 -0
  394. imas_codex-5.0.0rc1/imas_codex/llm/prompts/shared/schema/wiki-scoring-output.md +23 -0
  395. imas_codex-5.0.0rc1/imas_codex/llm/prompts/shared/tools.md +51 -0
  396. imas_codex-5.0.0rc1/imas_codex/llm/prompts/signals/enrichment.md +471 -0
  397. imas_codex-5.0.0rc1/imas_codex/llm/prompts/signals/individualization.md +77 -0
  398. imas_codex-5.0.0rc1/imas_codex/llm/prompts/signals/source_unwind.md +54 -0
  399. imas_codex-5.0.0rc1/imas_codex/llm/prompts/wiki/document-scorer.md +124 -0
  400. imas_codex-5.0.0rc1/imas_codex/llm/prompts/wiki/image-captioner.md +154 -0
  401. imas_codex-5.0.0rc1/imas_codex/llm/prompts/wiki/scorer.md +125 -0
  402. imas_codex-5.0.0rc1/imas_codex/llm/prompts/wiki/scout.md +58 -0
  403. imas_codex-5.0.0rc1/imas_codex/llm/search_formatters.py +1375 -0
  404. imas_codex-5.0.0rc1/imas_codex/llm/search_tools.py +1549 -0
  405. imas_codex-5.0.0rc1/imas_codex/llm/server.py +2913 -0
  406. imas_codex-5.0.0rc1/imas_codex/mappings/__init__.py +295 -0
  407. imas_codex-5.0.0rc1/imas_codex/mdsplus/__init__.py +54 -0
  408. imas_codex-5.0.0rc1/imas_codex/mdsplus/batch_discovery.py +810 -0
  409. imas_codex-5.0.0rc1/imas_codex/mdsplus/extraction.py +1053 -0
  410. imas_codex-5.0.0rc1/imas_codex/mdsplus/ingestion.py +48 -0
  411. imas_codex-5.0.0rc1/imas_codex/mdsplus/static.py +50 -0
  412. imas_codex-5.0.0rc1/imas_codex/models/constants.py +130 -0
  413. imas_codex-5.0.0rc1/imas_codex/models/context_models.py +108 -0
  414. imas_codex-5.0.0rc1/imas_codex/models/error_models.py +20 -0
  415. imas_codex-5.0.0rc1/imas_codex/models/physics_models.py +153 -0
  416. imas_codex-5.0.0rc1/imas_codex/models/request_models.py +379 -0
  417. imas_codex-5.0.0rc1/imas_codex/models/result_models.py +479 -0
  418. imas_codex-5.0.0rc1/imas_codex/models/structure_models.py +40 -0
  419. imas_codex-5.0.0rc1/imas_codex/providers.py +30 -0
  420. imas_codex-5.0.0rc1/imas_codex/remote/__init__.py +96 -0
  421. imas_codex-5.0.0rc1/imas_codex/remote/executor.py +1373 -0
  422. imas_codex-5.0.0rc1/imas_codex/remote/locations.py +320 -0
  423. imas_codex-5.0.0rc1/imas_codex/remote/python.py +687 -0
  424. imas_codex-5.0.0rc1/imas_codex/remote/scripts/__init__.py +31 -0
  425. imas_codex-5.0.0rc1/imas_codex/remote/scripts/check_edas.py +161 -0
  426. imas_codex-5.0.0rc1/imas_codex/remote/scripts/check_jpf.py +106 -0
  427. imas_codex-5.0.0rc1/imas_codex/remote/scripts/check_mdsplus_tdi.py +96 -0
  428. imas_codex-5.0.0rc1/imas_codex/remote/scripts/check_ppf.py +147 -0
  429. imas_codex-5.0.0rc1/imas_codex/remote/scripts/check_signals.py +138 -0
  430. imas_codex-5.0.0rc1/imas_codex/remote/scripts/check_signals_batch.py +376 -0
  431. imas_codex-5.0.0rc1/imas_codex/remote/scripts/discover_files.py +296 -0
  432. imas_codex-5.0.0rc1/imas_codex/remote/scripts/enrich_directories.py +394 -0
  433. imas_codex-5.0.0rc1/imas_codex/remote/scripts/enrich_files.py +200 -0
  434. imas_codex-5.0.0rc1/imas_codex/remote/scripts/enumerate_edas.py +139 -0
  435. imas_codex-5.0.0rc1/imas_codex/remote/scripts/enumerate_jpf.py +164 -0
  436. imas_codex-5.0.0rc1/imas_codex/remote/scripts/enumerate_mdsplus_tdi.py +187 -0
  437. imas_codex-5.0.0rc1/imas_codex/remote/scripts/enumerate_ppf.py +143 -0
  438. imas_codex-5.0.0rc1/imas_codex/remote/scripts/extract_static_tree.py +216 -0
  439. imas_codex-5.0.0rc1/imas_codex/remote/scripts/extract_tdi_signals.py +650 -0
  440. imas_codex-5.0.0rc1/imas_codex/remote/scripts/extract_tree.py +240 -0
  441. imas_codex-5.0.0rc1/imas_codex/remote/scripts/extract_units.py +249 -0
  442. imas_codex-5.0.0rc1/imas_codex/remote/scripts/get_user_info.py +179 -0
  443. imas_codex-5.0.0rc1/imas_codex/remote/scripts/parse_device_xml.py +347 -0
  444. imas_codex-5.0.0rc1/imas_codex/remote/scripts/parse_greens_table.py +124 -0
  445. imas_codex-5.0.0rc1/imas_codex/remote/scripts/parse_jec2020.py +357 -0
  446. imas_codex-5.0.0rc1/imas_codex/remote/scripts/parse_magnetics_config.py +337 -0
  447. imas_codex-5.0.0rc1/imas_codex/remote/scripts/parse_mcfg_sensors.py +254 -0
  448. imas_codex-5.0.0rc1/imas_codex/remote/scripts/parse_pf_coil_turns.py +92 -0
  449. imas_codex-5.0.0rc1/imas_codex/remote/scripts/scan_directories.py +573 -0
  450. imas_codex-5.0.0rc1/imas_codex/remote/scripts/scan_files.py +261 -0
  451. imas_codex-5.0.0rc1/imas_codex/remote/serialization.py +114 -0
  452. imas_codex-5.0.0rc1/imas_codex/remote/ssh_worker.py +902 -0
  453. imas_codex-5.0.0rc1/imas_codex/remote/tools.py +1050 -0
  454. imas_codex-5.0.0rc1/imas_codex/remote/tunnel.py +630 -0
  455. imas_codex-5.0.0rc1/imas_codex/resource_path_accessor.py +156 -0
  456. imas_codex-5.0.0rc1/imas_codex/resources/.gitkeep +4 -0
  457. imas_codex-5.0.0rc1/imas_codex/schemas/__init__.py +8 -0
  458. imas_codex-5.0.0rc1/imas_codex/schemas/common.yaml +857 -0
  459. imas_codex-5.0.0rc1/imas_codex/schemas/facility.yaml +3938 -0
  460. imas_codex-5.0.0rc1/imas_codex/schemas/facility_config.yaml +1446 -0
  461. imas_codex-5.0.0rc1/imas_codex/schemas/imas_dd.yaml +983 -0
  462. imas_codex-5.0.0rc1/imas_codex/schemas/physics_domains.yaml +345 -0
  463. imas_codex-5.0.0rc1/imas_codex/schemas/task_groups.yaml +58 -0
  464. imas_codex-5.0.0rc1/imas_codex/search/__init__.py +24 -0
  465. imas_codex-5.0.0rc1/imas_codex/search/cache.py +130 -0
  466. imas_codex-5.0.0rc1/imas_codex/search/decorators/__init__.py +46 -0
  467. imas_codex-5.0.0rc1/imas_codex/search/decorators/cache.py +205 -0
  468. imas_codex-5.0.0rc1/imas_codex/search/decorators/error_handling.py +353 -0
  469. imas_codex-5.0.0rc1/imas_codex/search/decorators/mcp_tool.py +35 -0
  470. imas_codex-5.0.0rc1/imas_codex/search/decorators/performance.py +248 -0
  471. imas_codex-5.0.0rc1/imas_codex/search/decorators/tool_recommendations.py +285 -0
  472. imas_codex-5.0.0rc1/imas_codex/search/decorators/validation.py +141 -0
  473. imas_codex-5.0.0rc1/imas_codex/search/document_store.py +1488 -0
  474. imas_codex-5.0.0rc1/imas_codex/search/engines/__init__.py +20 -0
  475. imas_codex-5.0.0rc1/imas_codex/search/engines/base_engine.py +167 -0
  476. imas_codex-5.0.0rc1/imas_codex/search/engines/hybrid_engine.py +207 -0
  477. imas_codex-5.0.0rc1/imas_codex/search/engines/lexical_engine.py +439 -0
  478. imas_codex-5.0.0rc1/imas_codex/search/engines/semantic_engine.py +194 -0
  479. imas_codex-5.0.0rc1/imas_codex/search/fuzzy_matcher.py +187 -0
  480. imas_codex-5.0.0rc1/imas_codex/search/search_strategy.py +564 -0
  481. imas_codex-5.0.0rc1/imas_codex/search/semantic_search.py +290 -0
  482. imas_codex-5.0.0rc1/imas_codex/search/services/__init__.py +14 -0
  483. imas_codex-5.0.0rc1/imas_codex/search/services/search_service.py +251 -0
  484. imas_codex-5.0.0rc1/imas_codex/search/tool_suggestions.py +158 -0
  485. imas_codex-5.0.0rc1/imas_codex/services/__init__.py +17 -0
  486. imas_codex-5.0.0rc1/imas_codex/services/base.py +12 -0
  487. imas_codex-5.0.0rc1/imas_codex/services/document.py +50 -0
  488. imas_codex-5.0.0rc1/imas_codex/services/response.py +126 -0
  489. imas_codex-5.0.0rc1/imas_codex/services/search_configuration.py +76 -0
  490. imas_codex-5.0.0rc1/imas_codex/settings.py +602 -0
  491. imas_codex-5.0.0rc1/imas_codex/structure/structure_analyzer.py +492 -0
  492. imas_codex-5.0.0rc1/imas_codex/tools/__init__.py +168 -0
  493. imas_codex-5.0.0rc1/imas_codex/tools/base.py +147 -0
  494. imas_codex-5.0.0rc1/imas_codex/tools/graph_search.py +2048 -0
  495. imas_codex-5.0.0rc1/imas_codex/tools/identifiers_tool.py +319 -0
  496. imas_codex-5.0.0rc1/imas_codex/tools/list_tool.py +446 -0
  497. imas_codex-5.0.0rc1/imas_codex/tools/overview_tool.py +506 -0
  498. imas_codex-5.0.0rc1/imas_codex/tools/utils.py +117 -0
  499. imas_codex-5.0.0rc1/imas_codex/tools/version_tool.py +144 -0
  500. imas_codex-5.0.0rc1/imas_codex/units/__init__.py +110 -0
  501. imas_codex-5.0.0rc1/imas_codex/units/data_dictionary_unit_aliases.txt +14 -0
  502. imas_codex-5.0.0rc1/nginx.conf +29 -0
  503. imas_codex-5.0.0rc1/plans/README.md +49 -0
  504. imas_codex-5.0.0rc1/plans/STRATEGY.md +278 -0
  505. imas_codex-5.0.0rc1/plans/features/codex-imas-gap-closure.md +613 -0
  506. imas_codex-5.0.0rc1/plans/features/dd-version-and-tool-filtering.md +480 -0
  507. imas_codex-5.0.0rc1/plans/features/dynamic-tool-registration.md +196 -0
  508. imas_codex-5.0.0rc1/plans/features/error-metadata-filtering.md +440 -0
  509. imas_codex-5.0.0rc1/plans/features/identifier-ids-enrichment.md +329 -0
  510. imas_codex-5.0.0rc1/plans/features/ids-properties-population.md +286 -0
  511. imas_codex-5.0.0rc1/plans/features/imas-tool-quality.md +337 -0
  512. imas_codex-5.0.0rc1/plans/features/mapping-search-enrichment.md +1014 -0
  513. imas_codex-5.0.0rc1/plans/features/release-benchmark-pipeline.md +740 -0
  514. imas_codex-5.0.0rc1/plans/features/shared-tool-consolidation.md +322 -0
  515. imas_codex-5.0.0rc1/plans/features/staged-mapping-pipeline.md +287 -0
  516. imas_codex-5.0.0rc1/plans/features/target-routing-generalization.md +278 -0
  517. imas_codex-5.0.0rc1/plans/features/unified-server.md +329 -0
  518. imas_codex-5.0.0rc1/plans/gpu-cluster-scoping.md +135 -0
  519. imas_codex-5.0.0rc1/pyproject.toml +451 -0
  520. imas_codex-5.0.0rc1/scripts/__init__.py +1 -0
  521. imas_codex-5.0.0rc1/scripts/benchmark_embedding.py +313 -0
  522. imas_codex-5.0.0rc1/scripts/benchmark_serialization.py +358 -0
  523. imas_codex-5.0.0rc1/scripts/benchmark_ssh_throughput.py +724 -0
  524. imas_codex-5.0.0rc1/scripts/build_clusters.py +183 -0
  525. imas_codex-5.0.0rc1/scripts/build_database.py +153 -0
  526. imas_codex-5.0.0rc1/scripts/build_embeddings.py +340 -0
  527. imas_codex-5.0.0rc1/scripts/build_models.py +507 -0
  528. imas_codex-5.0.0rc1/scripts/build_path_map.py +379 -0
  529. imas_codex-5.0.0rc1/scripts/build_schemas.py +148 -0
  530. imas_codex-5.0.0rc1/scripts/dd_version.py +633 -0
  531. imas_codex-5.0.0rc1/scripts/gen_physics_domains.py +148 -0
  532. imas_codex-5.0.0rc1/scripts/gen_schema_context.py +223 -0
  533. imas_codex-5.0.0rc1/scripts/gen_schema_reference.py +201 -0
  534. imas_codex-5.0.0rc1/scripts/ingest_all_trees.sh +130 -0
  535. imas_codex-5.0.0rc1/scripts/ingest_mdsplus.py +358 -0
  536. imas_codex-5.0.0rc1/scripts/install_apptainer.sh +63 -0
  537. imas_codex-5.0.0rc1/scripts/map_ids_domains.py +401 -0
  538. imas_codex-5.0.0rc1/scripts/model_comparison_study.py +1063 -0
  539. imas_codex-5.0.0rc1/scripts/plot_jet_composite_geometry.py +536 -0
  540. imas_codex-5.0.0rc1/scripts/plot_jet_epoch_evolution.py +1072 -0
  541. imas_codex-5.0.0rc1/scripts/plot_jet_limiter_epochs.py +238 -0
  542. imas_codex-5.0.0rc1/scripts/plot_jet_poloidal.py +485 -0
  543. imas_codex-5.0.0rc1/scripts/query_signal_sources.py +48 -0
  544. imas_codex-5.0.0rc1/scripts/rebuild_graph.py +648 -0
  545. imas_codex-5.0.0rc1/scripts/run_performance_baseline.py +168 -0
  546. imas_codex-5.0.0rc1/scripts/setup_neo4j_apptainer.sh +199 -0
  547. imas_codex-5.0.0rc1/scripts/test_prompt_caching.py +495 -0
  548. imas_codex-5.0.0rc1/slurm/codex-embed.sh +50 -0
  549. imas_codex-5.0.0rc1/tests/clusters/__init__.py +0 -0
  550. imas_codex-5.0.0rc1/tests/clusters/test_cluster_search.py +302 -0
  551. imas_codex-5.0.0rc1/tests/clusters/test_clustering.py +272 -0
  552. imas_codex-5.0.0rc1/tests/clusters/test_extractor.py +441 -0
  553. imas_codex-5.0.0rc1/tests/clusters/test_label_cache.py +405 -0
  554. imas_codex-5.0.0rc1/tests/clusters/test_labeler.py +165 -0
  555. imas_codex-5.0.0rc1/tests/clusters/test_preprocessing.py +218 -0
  556. imas_codex-5.0.0rc1/tests/cocos/test_calculator.py +346 -0
  557. imas_codex-5.0.0rc1/tests/cocos/test_loaders.py +91 -0
  558. imas_codex-5.0.0rc1/tests/cocos/test_transforms.py +81 -0
  559. imas_codex-5.0.0rc1/tests/config/__init__.py +0 -0
  560. imas_codex-5.0.0rc1/tests/config/test_facility_config_compliance.py +418 -0
  561. imas_codex-5.0.0rc1/tests/conftest.py +399 -0
  562. imas_codex-5.0.0rc1/tests/core/__init__.py +1 -0
  563. imas_codex-5.0.0rc1/tests/core/extractors/__init__.py +1 -0
  564. imas_codex-5.0.0rc1/tests/core/extractors/test_base.py +264 -0
  565. imas_codex-5.0.0rc1/tests/core/extractors/test_extractors.py +394 -0
  566. imas_codex-5.0.0rc1/tests/core/extractors/test_identifier_extractor.py +306 -0
  567. imas_codex-5.0.0rc1/tests/core/test_build_hash.py +123 -0
  568. imas_codex-5.0.0rc1/tests/core/test_clear_dd.py +234 -0
  569. imas_codex-5.0.0rc1/tests/core/test_cli.py +200 -0
  570. imas_codex-5.0.0rc1/tests/core/test_clusters.py +964 -0
  571. imas_codex-5.0.0rc1/tests/core/test_dd_accessor.py +469 -0
  572. imas_codex-5.0.0rc1/tests/core/test_ghcr.py +268 -0
  573. imas_codex-5.0.0rc1/tests/core/test_graph_analyzer.py +313 -0
  574. imas_codex-5.0.0rc1/tests/core/test_graph_cli_package.py +116 -0
  575. imas_codex-5.0.0rc1/tests/core/test_graph_dirs.py +235 -0
  576. imas_codex-5.0.0rc1/tests/core/test_graph_profiles.py +251 -0
  577. imas_codex-5.0.0rc1/tests/core/test_neo4j_ops.py +125 -0
  578. imas_codex-5.0.0rc1/tests/core/test_paths.py +37 -0
  579. imas_codex-5.0.0rc1/tests/core/test_physics_categorization.py +204 -0
  580. imas_codex-5.0.0rc1/tests/core/test_progress_monitor.py +170 -0
  581. imas_codex-5.0.0rc1/tests/core/test_resource_accessors.py +255 -0
  582. imas_codex-5.0.0rc1/tests/core/test_settings.py +294 -0
  583. imas_codex-5.0.0rc1/tests/core/test_temp_neo4j.py +53 -0
  584. imas_codex-5.0.0rc1/tests/core/test_tunnel_cli.py +115 -0
  585. imas_codex-5.0.0rc1/tests/core/test_xml_parser.py +681 -0
  586. imas_codex-5.0.0rc1/tests/core/test_xml_utils.py +205 -0
  587. imas_codex-5.0.0rc1/tests/discovery/__init__.py +2 -0
  588. imas_codex-5.0.0rc1/tests/discovery/test_code_pipeline.py +1452 -0
  589. imas_codex-5.0.0rc1/tests/discovery/test_context_quality.py +239 -0
  590. imas_codex-5.0.0rc1/tests/discovery/test_device_xml_scanner.py +2780 -0
  591. imas_codex-5.0.0rc1/tests/discovery/test_diagnostics.py +495 -0
  592. imas_codex-5.0.0rc1/tests/discovery/test_enrichment_context.py +466 -0
  593. imas_codex-5.0.0rc1/tests/discovery/test_facility_config.py +131 -0
  594. imas_codex-5.0.0rc1/tests/discovery/test_imas_patterns.py +352 -0
  595. imas_codex-5.0.0rc1/tests/discovery/test_logging_utils.py +406 -0
  596. imas_codex-5.0.0rc1/tests/discovery/test_mdsplus_epochs.py +157 -0
  597. imas_codex-5.0.0rc1/tests/discovery/test_mdsplus_scanner.py +507 -0
  598. imas_codex-5.0.0rc1/tests/discovery/test_parallel.py +679 -0
  599. imas_codex-5.0.0rc1/tests/discovery/test_paths_progress.py +744 -0
  600. imas_codex-5.0.0rc1/tests/discovery/test_pipeline_phase.py +120 -0
  601. imas_codex-5.0.0rc1/tests/discovery/test_progress_builders.py +904 -0
  602. imas_codex-5.0.0rc1/tests/discovery/test_reset.py +179 -0
  603. imas_codex-5.0.0rc1/tests/discovery/test_scanners.py +143 -0
  604. imas_codex-5.0.0rc1/tests/discovery/test_scorer.py +415 -0
  605. imas_codex-5.0.0rc1/tests/discovery/test_scoring_models.py +248 -0
  606. imas_codex-5.0.0rc1/tests/discovery/test_signal_checking.py +779 -0
  607. imas_codex-5.0.0rc1/tests/discovery/test_signals_pipeline.py +1511 -0
  608. imas_codex-5.0.0rc1/tests/discovery/test_signals_progress.py +776 -0
  609. imas_codex-5.0.0rc1/tests/discovery/test_static_parallel.py +509 -0
  610. imas_codex-5.0.0rc1/tests/discovery/test_supervised_loop.py +649 -0
  611. imas_codex-5.0.0rc1/tests/discovery/test_tdi_linkage.py +137 -0
  612. imas_codex-5.0.0rc1/tests/discovery/test_transfer.py +100 -0
  613. imas_codex-5.0.0rc1/tests/discovery/test_tree_pipeline.py +208 -0
  614. imas_codex-5.0.0rc1/tests/discovery/test_worker_section.py +166 -0
  615. imas_codex-5.0.0rc1/tests/embeddings/__init__.py +1 -0
  616. imas_codex-5.0.0rc1/tests/embeddings/test_cache.py +376 -0
  617. imas_codex-5.0.0rc1/tests/embeddings/test_embedding_encoder.py +87 -0
  618. imas_codex-5.0.0rc1/tests/embeddings/test_embeddings.py +502 -0
  619. imas_codex-5.0.0rc1/tests/embeddings/test_embeddings_deferred.py +48 -0
  620. imas_codex-5.0.0rc1/tests/embeddings/test_encoder.py +600 -0
  621. imas_codex-5.0.0rc1/tests/embeddings/test_model_comparison.py +250 -0
  622. imas_codex-5.0.0rc1/tests/embeddings/test_openrouter_embed.py +387 -0
  623. imas_codex-5.0.0rc1/tests/embeddings/test_readiness.py +408 -0
  624. imas_codex-5.0.0rc1/tests/embeddings/test_remote.py +131 -0
  625. imas_codex-5.0.0rc1/tests/features/__init__.py +0 -0
  626. imas_codex-5.0.0rc1/tests/features/test_analysis.py +118 -0
  627. imas_codex-5.0.0rc1/tests/features/test_search.py +209 -0
  628. imas_codex-5.0.0rc1/tests/graph/__init__.py +12 -0
  629. imas_codex-5.0.0rc1/tests/graph/conftest.py +189 -0
  630. imas_codex-5.0.0rc1/tests/graph/test_build_dd_clusters.py +21 -0
  631. imas_codex-5.0.0rc1/tests/graph/test_data_quality.py +259 -0
  632. imas_codex-5.0.0rc1/tests/graph/test_dd_aux_streaming.py +207 -0
  633. imas_codex-5.0.0rc1/tests/graph/test_dd_build.py +1130 -0
  634. imas_codex-5.0.0rc1/tests/graph/test_dd_enrichment.py +277 -0
  635. imas_codex-5.0.0rc1/tests/graph/test_dd_graph_ops.py +57 -0
  636. imas_codex-5.0.0rc1/tests/graph/test_dd_identifier_enrichment.py +232 -0
  637. imas_codex-5.0.0rc1/tests/graph/test_dd_ids_enrichment.py +250 -0
  638. imas_codex-5.0.0rc1/tests/graph/test_dd_progress.py +93 -0
  639. imas_codex-5.0.0rc1/tests/graph/test_dd_worker_aux_order.py +82 -0
  640. imas_codex-5.0.0rc1/tests/graph/test_domain_queries.py +333 -0
  641. imas_codex-5.0.0rc1/tests/graph/test_formatters.py +72 -0
  642. imas_codex-5.0.0rc1/tests/graph/test_identifier_enrichment.py +68 -0
  643. imas_codex-5.0.0rc1/tests/graph/test_neo4j_resilience.py +101 -0
  644. imas_codex-5.0.0rc1/tests/graph/test_node_category.py +118 -0
  645. imas_codex-5.0.0rc1/tests/graph/test_private_fields.py +90 -0
  646. imas_codex-5.0.0rc1/tests/graph/test_query_builder.py +259 -0
  647. imas_codex-5.0.0rc1/tests/graph/test_referential_integrity.py +228 -0
  648. imas_codex-5.0.0rc1/tests/graph/test_schema_compliance.py +363 -0
  649. imas_codex-5.0.0rc1/tests/graph/test_schema_context.py +289 -0
  650. imas_codex-5.0.0rc1/tests/graph/test_structural.py +150 -0
  651. imas_codex-5.0.0rc1/tests/graph_mcp/__init__.py +5 -0
  652. imas_codex-5.0.0rc1/tests/graph_mcp/conftest.py +478 -0
  653. imas_codex-5.0.0rc1/tests/graph_mcp/test_docker_embedded.py +247 -0
  654. imas_codex-5.0.0rc1/tests/graph_mcp/test_fixture_graph.py +189 -0
  655. imas_codex-5.0.0rc1/tests/graph_mcp/test_graph_search.py +836 -0
  656. imas_codex-5.0.0rc1/tests/graph_mcp/test_incremental_clusters.py +136 -0
  657. imas_codex-5.0.0rc1/tests/graph_mcp/test_tool_registration.py +46 -0
  658. imas_codex-5.0.0rc1/tests/graph_mcp/test_version_tool.py +45 -0
  659. imas_codex-5.0.0rc1/tests/ids/__init__.py +0 -0
  660. imas_codex-5.0.0rc1/tests/ids/fixtures/tcv_pf_active_80000_extraction.json +50 -0
  661. imas_codex-5.0.0rc1/tests/ids/test_assembler.py +296 -0
  662. imas_codex-5.0.0rc1/tests/ids/test_e2e_codegen.py +507 -0
  663. imas_codex-5.0.0rc1/tests/ids/test_graph_ops.py +223 -0
  664. imas_codex-5.0.0rc1/tests/ids/test_mapping_e2e.py +1928 -0
  665. imas_codex-5.0.0rc1/tests/ids/test_mapping_formatters.py +231 -0
  666. imas_codex-5.0.0rc1/tests/ids/test_mapping_pipeline.py +1093 -0
  667. imas_codex-5.0.0rc1/tests/ids/test_transforms.py +188 -0
  668. imas_codex-5.0.0rc1/tests/ids/test_validation.py +609 -0
  669. imas_codex-5.0.0rc1/tests/ingestion/__init__.py +0 -0
  670. imas_codex-5.0.0rc1/tests/ingestion/test_chunkers.py +194 -0
  671. imas_codex-5.0.0rc1/tests/ingestion/test_extraction.py +274 -0
  672. imas_codex-5.0.0rc1/tests/ingestion/test_mdsplus_extractor.py +234 -0
  673. imas_codex-5.0.0rc1/tests/ingestion/test_search.py +183 -0
  674. imas_codex-5.0.0rc1/tests/ingestion/test_static_tree.py +212 -0
  675. imas_codex-5.0.0rc1/tests/integration/__init__.py +0 -0
  676. imas_codex-5.0.0rc1/tests/integration/test_enrichment_integration.py +238 -0
  677. imas_codex-5.0.0rc1/tests/integration/test_signals_e2e.py +366 -0
  678. imas_codex-5.0.0rc1/tests/integration/test_workflows.py +165 -0
  679. imas_codex-5.0.0rc1/tests/llm/__init__.py +0 -0
  680. imas_codex-5.0.0rc1/tests/llm/test_dd_version_reports.py +72 -0
  681. imas_codex-5.0.0rc1/tests/llm/test_imas_dd_formatters.py +135 -0
  682. imas_codex-5.0.0rc1/tests/llm/test_search_tools.py +1713 -0
  683. imas_codex-5.0.0rc1/tests/llm/test_serialization.py +76 -0
  684. imas_codex-5.0.0rc1/tests/mappings/__init__.py +1 -0
  685. imas_codex-5.0.0rc1/tests/mappings/test_path_map.py +211 -0
  686. imas_codex-5.0.0rc1/tests/search/__init__.py +1 -0
  687. imas_codex-5.0.0rc1/tests/search/decorators/__init__.py +1 -0
  688. imas_codex-5.0.0rc1/tests/search/decorators/test_cache.py +245 -0
  689. imas_codex-5.0.0rc1/tests/search/decorators/test_error_handling.py +257 -0
  690. imas_codex-5.0.0rc1/tests/search/decorators/test_performance.py +295 -0
  691. imas_codex-5.0.0rc1/tests/search/decorators/test_tool_recommendations.py +277 -0
  692. imas_codex-5.0.0rc1/tests/search/engines/__init__.py +1 -0
  693. imas_codex-5.0.0rc1/tests/search/engines/test_hybrid_engine.py +206 -0
  694. imas_codex-5.0.0rc1/tests/search/engines/test_lexical_engine.py +207 -0
  695. imas_codex-5.0.0rc1/tests/search/engines/test_semantic_engine.py +121 -0
  696. imas_codex-5.0.0rc1/tests/search/test_cache.py +97 -0
  697. imas_codex-5.0.0rc1/tests/search/test_document_store.py +582 -0
  698. imas_codex-5.0.0rc1/tests/search/test_fuzzy_matcher.py +170 -0
  699. imas_codex-5.0.0rc1/tests/search/test_search_strategy.py +389 -0
  700. imas_codex-5.0.0rc1/tests/search/test_semantic_search.py +477 -0
  701. imas_codex-5.0.0rc1/tests/search/test_tool_suggestions.py +96 -0
  702. imas_codex-5.0.0rc1/tests/services/__init__.py +1 -0
  703. imas_codex-5.0.0rc1/tests/services/test_base.py +14 -0
  704. imas_codex-5.0.0rc1/tests/services/test_document.py +83 -0
  705. imas_codex-5.0.0rc1/tests/services/test_response.py +167 -0
  706. imas_codex-5.0.0rc1/tests/services/test_search_configuration.py +100 -0
  707. imas_codex-5.0.0rc1/tests/services/test_search_mode.py +270 -0
  708. imas_codex-5.0.0rc1/tests/test_cli.py +510 -0
  709. imas_codex-5.0.0rc1/tests/test_imas_search_remediation.py +961 -0
  710. imas_codex-5.0.0rc1/tests/tools/__init__.py +0 -0
  711. imas_codex-5.0.0rc1/tests/tools/test_clusters.py +110 -0
  712. imas_codex-5.0.0rc1/tests/tools/test_dd_version_and_error_fields.py +111 -0
  713. imas_codex-5.0.0rc1/tests/tools/test_dd_version_filtering.py +562 -0
  714. imas_codex-5.0.0rc1/tests/tools/test_graph_search_structure_semantics.py +77 -0
  715. imas_codex-5.0.0rc1/tests/tools/test_identifiers_tool.py +315 -0
  716. imas_codex-5.0.0rc1/tests/tools/test_list_tool.py +530 -0
  717. imas_codex-5.0.0rc1/tests/tools/test_overview_tool.py +185 -0
  718. imas_codex-5.0.0rc1/tests/tools/test_tools.py +147 -0
  719. imas_codex-5.0.0rc1/tests/tools/test_utils.py +186 -0
  720. imas_codex-5.0.0rc1/tests/wiki/__init__.py +1 -0
  721. imas_codex-5.0.0rc1/tests/wiki/conftest.py +499 -0
  722. imas_codex-5.0.0rc1/tests/wiki/test_adapters_unit.py +340 -0
  723. imas_codex-5.0.0rc1/tests/wiki/test_entity_extraction.py +425 -0
  724. imas_codex-5.0.0rc1/tests/wiki/test_excel.py +382 -0
  725. imas_codex-5.0.0rc1/tests/wiki/test_graph_ops_unit.py +369 -0
  726. imas_codex-5.0.0rc1/tests/wiki/test_image_extraction.py +237 -0
  727. imas_codex-5.0.0rc1/tests/wiki/test_pipeline.py +269 -0
  728. imas_codex-5.0.0rc1/tests/wiki/test_prefetch.py +116 -0
  729. imas_codex-5.0.0rc1/tests/wiki/test_progress.py +146 -0
  730. imas_codex-5.0.0rc1/tests/wiki/test_progress_display.py +430 -0
  731. imas_codex-5.0.0rc1/tests/wiki/test_scoring.py +186 -0
  732. imas_codex-5.0.0rc1/tests/wiki/test_scoring_functions.py +561 -0
  733. imas_codex-5.0.0rc1/tests/wiki/test_scraper.py +336 -0
  734. imas_codex-5.0.0rc1/tests/wiki/test_state.py +252 -0
  735. imas_codex-5.0.0rc1/tests/wiki/test_static_html_adapter.py +371 -0
  736. imas_codex-5.0.0rc1/tests/wiki/test_twiki_adapter.py +305 -0
  737. imas_codex-5.0.0rc1/tests/wiki/test_twiki_raw_adapter.py +378 -0
  738. imas_codex-5.0.0rc1/tests/wiki/test_twiki_static_adapter.py +193 -0
  739. imas_codex-5.0.0rc1/tests/wiki/test_workers.py +549 -0
  740. 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,12 @@
1
+ {
2
+ "mcpServers": {
3
+ "codex": {
4
+ "command": "uv",
5
+ "args": ["run", "imas-codex", "serve", "agents"]
6
+ },
7
+ "imas": {
8
+ "url": "https://imas-dd.iter.org/mcp",
9
+ "type": "http"
10
+ }
11
+ }
12
+ }
@@ -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.