gea-program 0.87.0__tar.gz → 0.89.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (442) hide show
  1. {gea_program-0.87.0/gea_program.egg-info → gea_program-0.89.0}/PKG-INFO +55 -4
  2. {gea_program-0.87.0 → gea_program-0.89.0}/README.md +54 -3
  3. {gea_program-0.87.0 → gea_program-0.89.0}/gea/__init__.py +1 -1
  4. {gea_program-0.87.0 → gea_program-0.89.0}/gea/__main__.py +123 -0
  5. {gea_program-0.87.0 → gea_program-0.89.0}/gea/acceptance_tests.py +626 -0
  6. {gea_program-0.87.0 → gea_program-0.89.0}/gea/alerts.py +16 -1
  7. {gea_program-0.87.0 → gea_program-0.89.0}/gea/dossier.py +16 -1
  8. gea_program-0.89.0/gea/dysfunction.py +769 -0
  9. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/IT_SECURITY.md +14 -0
  10. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/alerts.md +1 -1
  11. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/driller.md +1 -1
  12. gea_program-0.89.0/gea/help/dysfunction.md +13 -0
  13. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/install.md +2 -2
  14. gea_program-0.89.0/gea/help/mcp.md +15 -0
  15. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/reader.md +1 -1
  16. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/recorder.md +1 -1
  17. gea_program-0.89.0/gea/help/roadmap.md +13 -0
  18. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/tutorial/01-install.md +2 -2
  19. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/tutorial/13-drilling-pages.md +10 -8
  20. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/tutorial/19-dossier-reader.md +1 -1
  21. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/tutorial/20-admin.md +2 -1
  22. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/tutorial/22-updates.md +1 -1
  23. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/tutorial/23-vpn.md +1 -1
  24. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/tutorial/25-install-recorder.md +2 -2
  25. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/tutorial/29-driller-rig.md +1 -1
  26. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/tutorial.md +2 -2
  27. {gea_program-0.87.0 → gea_program-0.89.0}/gea/helplib.py +4 -1
  28. gea_program-0.89.0/gea/mcp_server.py +718 -0
  29. {gea_program-0.87.0 → gea_program-0.89.0}/gea/notify.py +3 -1
  30. {gea_program-0.87.0 → gea_program-0.89.0}/gea/rig_state.py +3 -1
  31. gea_program-0.89.0/gea/roadmap.py +678 -0
  32. {gea_program-0.87.0 → gea_program-0.89.0}/gea/series_cache.py +52 -10
  33. {gea_program-0.87.0 → gea_program-0.89.0}/gea/service.py +35 -0
  34. {gea_program-0.87.0 → gea_program-0.89.0}/gea/web/app.html +119 -2
  35. {gea_program-0.87.0 → gea_program-0.89.0/gea_program.egg-info}/PKG-INFO +55 -4
  36. {gea_program-0.87.0 → gea_program-0.89.0}/gea_program.egg-info/SOURCES.txt +6 -0
  37. {gea_program-0.87.0 → gea_program-0.89.0}/pyproject.toml +1 -1
  38. {gea_program-0.87.0 → gea_program-0.89.0}/LICENSE +0 -0
  39. {gea_program-0.87.0 → gea_program-0.89.0}/gea/BENCH_TEST_PROTOCOL.md +0 -0
  40. {gea_program-0.87.0 → gea_program-0.89.0}/gea/accuracy_statement.py +0 -0
  41. {gea_program-0.87.0 → gea_program-0.89.0}/gea/alarm_engine.py +0 -0
  42. {gea_program-0.87.0 → gea_program-0.89.0}/gea/backup.py +0 -0
  43. {gea_program-0.87.0 → gea_program-0.89.0}/gea/bench.py +0 -0
  44. {gea_program-0.87.0 → gea_program-0.89.0}/gea/bit_seismic.py +0 -0
  45. {gea_program-0.87.0 → gea_program-0.89.0}/gea/blind_harness.py +0 -0
  46. {gea_program-0.87.0 → gea_program-0.89.0}/gea/calibration.py +0 -0
  47. {gea_program-0.87.0 → gea_program-0.89.0}/gea/casing_design.py +0 -0
  48. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/acex_lomonosov_age_depth_model.provenance.json +0 -0
  49. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/acex_lomonosov_age_depth_model.txt +0 -0
  50. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/agassiz77_canada_temperature.csv +0 -0
  51. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/agassiz77_canada_temperature.provenance.json +0 -0
  52. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/barbados_110_consolidation.provenance.json +0 -0
  53. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/barbados_110_consolidation.txt +0 -0
  54. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/bengal_u1452_grain_size.provenance.json +0 -0
  55. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/bengal_u1452_grain_size.txt +0 -0
  56. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/blake_164_methane_isotopes.provenance.json +0 -0
  57. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/blake_164_methane_isotopes.txt +0 -0
  58. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/chicxulub_m0077a_pwave_velocity.provenance.json +0 -0
  59. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/chicxulub_m0077a_pwave_velocity.txt +0 -0
  60. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/collingwood_1_28_ks_complete.las +0 -0
  61. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/collingwood_1_28_ks_complete.provenance.json +0 -0
  62. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/costa_rica_odp_friction_envelope.provenance.json +0 -0
  63. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/costa_rica_odp_friction_envelope.txt +0 -0
  64. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/dead_sea_5017_debrite_xrf_ms.provenance.json +0 -0
  65. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/dead_sea_5017_debrite_xrf_ms.txt +0 -0
  66. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/dsdp_504b_physical_properties.provenance.json +0 -0
  67. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/dsdp_504b_physical_properties.txt +0 -0
  68. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/dsdp_504b_sound_velocity.provenance.json +0 -0
  69. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/dsdp_504b_sound_velocity.txt +0 -0
  70. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/elgygytgyn_5011_turbidites.provenance.json +0 -0
  71. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/elgygytgyn_5011_turbidites.txt +0 -0
  72. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/epica_domec_co2_800kyr.provenance.json +0 -0
  73. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/epica_domec_co2_800kyr.txt +0 -0
  74. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/fram_909_organic_petrography.provenance.json +0 -0
  75. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/fram_909_organic_petrography.txt +0 -0
  76. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/gbr_325_coral_uth_ages.provenance.json +0 -0
  77. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/gbr_325_coral_uth_ages.txt +0 -0
  78. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/gisp2_greenland_temperature.csv +0 -0
  79. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/gisp2_greenland_temperature.provenance.json +0 -0
  80. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/gom_308_t2p_insitu.provenance.json +0 -0
  81. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/gom_308_t2p_insitu.txt +0 -0
  82. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/guaymas_385_dom_d13c.provenance.json +0 -0
  83. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/guaymas_385_dom_d13c.txt +0 -0
  84. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/hikurangi_u1520_friction_insitu.provenance.json +0 -0
  85. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/hikurangi_u1520_friction_insitu.txt +0 -0
  86. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/hydrate_ridge_204_ncr_hydrate.provenance.json +0 -0
  87. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/hydrate_ridge_204_ncr_hydrate.txt +0 -0
  88. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/iodp_u1324_pore_pressure.provenance.json +0 -0
  89. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/iodp_u1324_pore_pressure.txt +0 -0
  90. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/jfast_c0019_slow_slip_events.provenance.json +0 -0
  91. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/jfast_c0019_slow_slip_events.txt +0 -0
  92. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/kennetcook_2_p129_excerpt.las +0 -0
  93. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/kennetcook_2_p129_excerpt.provenance.json +0 -0
  94. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/ktb_hb_bhgm_density.dat +0 -0
  95. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/ktb_hb_bhgm_density.provenance.json +0 -0
  96. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/ktb_hb_complog_6020_excerpt.provenance.json +0 -0
  97. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/ktb_hb_complog_6020_excerpt.txt +0 -0
  98. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/ktb_hb_hlog246_temperature.dat +0 -0
  99. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/ktb_hb_hlog246_temperature.provenance.json +0 -0
  100. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/ktb_hb_rockmech_compress.dat +0 -0
  101. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/ktb_hb_rockmech_compress.provenance.json +0 -0
  102. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/ktb_hb_tvd_0_9080_excerpt.dat +0 -0
  103. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/ktb_hb_tvd_0_9080_excerpt.provenance.json +0 -0
  104. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/ktb_vb_rockmech_compress.dat +0 -0
  105. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/ktb_vb_rockmech_compress.provenance.json +0 -0
  106. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/ktb_vb_vlog251_temperature.dat +0 -0
  107. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/ktb_vb_vlog251_temperature.provenance.json +0 -0
  108. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/l06_06_nl_survey.csv +0 -0
  109. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/l06_06_nl_survey.provenance.json +0 -0
  110. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/l07_01_nl_excerpt.las +0 -0
  111. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/l07_01_nl_excerpt.provenance.json +0 -0
  112. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/mariana_1200_serpentinite_geochem.provenance.json +0 -0
  113. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/mariana_1200_serpentinite_geochem.txt +0 -0
  114. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/med_160_sapropels.provenance.json +0 -0
  115. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/med_160_sapropels.txt +0 -0
  116. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/nankai_megasplay_shear_strength.provenance.json +0 -0
  117. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/nankai_megasplay_shear_strength.txt +0 -0
  118. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/odp_1027b_thermal_conductivity.provenance.json +0 -0
  119. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/odp_1027b_thermal_conductivity.txt +0 -0
  120. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/odp_1027c_cork_temperature.provenance.json +0 -0
  121. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/odp_1027c_cork_temperature.txt +0 -0
  122. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/odp_1165b_thermal_conductivity.provenance.json +0 -0
  123. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/odp_1165b_thermal_conductivity.txt +0 -0
  124. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/odp_1274a_mantle_peridotite_mad.provenance.json +0 -0
  125. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/odp_1274a_mantle_peridotite_mad.txt +0 -0
  126. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/odp_504b_dike_elastic_moduli.provenance.json +0 -0
  127. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/odp_504b_dike_elastic_moduli.txt +0 -0
  128. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/odp_504b_leg137_borehole_fluids.provenance.json +0 -0
  129. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/odp_504b_leg137_borehole_fluids.txt +0 -0
  130. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/odp_735b_gabbro_elastic_moduli.provenance.json +0 -0
  131. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/odp_735b_gabbro_elastic_moduli.txt +0 -0
  132. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/peru_201_sulfate_reduction.provenance.json +0 -0
  133. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/peru_201_sulfate_reduction.txt +0 -0
  134. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/scorpio_e1_sa_excerpt.las +0 -0
  135. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/scorpio_e1_sa_excerpt.provenance.json +0 -0
  136. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/sumatra_362_cohesion.provenance.json +0 -0
  137. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/sumatra_362_cohesion.txt +0 -0
  138. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/university_6_17_no1_tx_excerpt.las +0 -0
  139. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/university_6_17_no1_tx_excerpt.provenance.json +0 -0
  140. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/ursa_308_xrd_mineralogy.provenance.json +0 -0
  141. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/ursa_308_xrd_mineralogy.txt +0 -0
  142. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/volve_15_9_19_sr_excerpt.las +0 -0
  143. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/volve_15_9_19_sr_excerpt.provenance.json +0 -0
  144. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/volve_15_9_19a_core_excerpt.csv +0 -0
  145. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/volve_15_9_19a_core_excerpt.provenance.json +0 -0
  146. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/volve_f12_f14_production_excerpt.csv +0 -0
  147. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/volve_f12_f14_production_excerpt.provenance.json +0 -0
  148. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/walvis_208_petm_carbonate.provenance.json +0 -0
  149. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/walvis_208_petm_carbonate.txt +0 -0
  150. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/woodlark_1109_rock_eval.provenance.json +0 -0
  151. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog/woodlark_1109_rock_eval.txt +0 -0
  152. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog_map.py +0 -0
  153. {gea_program-0.87.0 → gea_program-0.89.0}/gea/catalog_register.py +0 -0
  154. {gea_program-0.87.0 → gea_program-0.89.0}/gea/certificates.py +0 -0
  155. {gea_program-0.87.0 → gea_program-0.89.0}/gea/cli.py +0 -0
  156. {gea_program-0.87.0 → gea_program-0.89.0}/gea/client_reports.py +0 -0
  157. {gea_program-0.87.0 → gea_program-0.89.0}/gea/collision.py +0 -0
  158. {gea_program-0.87.0 → gea_program-0.89.0}/gea/config_versioning.py +0 -0
  159. {gea_program-0.87.0 → gea_program-0.89.0}/gea/conformance.py +0 -0
  160. {gea_program-0.87.0 → gea_program-0.89.0}/gea/control_room.py +0 -0
  161. {gea_program-0.87.0 → gea_program-0.89.0}/gea/correlation.py +0 -0
  162. {gea_program-0.87.0 → gea_program-0.89.0}/gea/dashboard.py +0 -0
  163. {gea_program-0.87.0 → gea_program-0.89.0}/gea/declarations.py +0 -0
  164. {gea_program-0.87.0 → gea_program-0.89.0}/gea/decline.py +0 -0
  165. {gea_program-0.87.0 → gea_program-0.89.0}/gea/deviation.py +0 -0
  166. {gea_program-0.87.0 → gea_program-0.89.0}/gea/dlis.py +0 -0
  167. {gea_program-0.87.0 → gea_program-0.89.0}/gea/dnp3.py +0 -0
  168. {gea_program-0.87.0 → gea_program-0.89.0}/gea/doctor.py +0 -0
  169. {gea_program-0.87.0 → gea_program-0.89.0}/gea/dossier_verify.py +0 -0
  170. {gea_program-0.87.0 → gea_program-0.89.0}/gea/downhole_engine.py +0 -0
  171. {gea_program-0.87.0 → gea_program-0.89.0}/gea/drift_monitor.py +0 -0
  172. {gea_program-0.87.0 → gea_program-0.89.0}/gea/drill_string.py +0 -0
  173. {gea_program-0.87.0 → gea_program-0.89.0}/gea/driller_link.py +0 -0
  174. {gea_program-0.87.0 → gea_program-0.89.0}/gea/earth_model.py +0 -0
  175. {gea_program-0.87.0 → gea_program-0.89.0}/gea/economics.py +0 -0
  176. {gea_program-0.87.0 → gea_program-0.89.0}/gea/ed25519.py +0 -0
  177. {gea_program-0.87.0 → gea_program-0.89.0}/gea/edr.py +0 -0
  178. {gea_program-0.87.0 → gea_program-0.89.0}/gea/elevation.py +0 -0
  179. {gea_program-0.87.0 → gea_program-0.89.0}/gea/etp.py +0 -0
  180. {gea_program-0.87.0 → gea_program-0.89.0}/gea/etp12_schemas.json +0 -0
  181. {gea_program-0.87.0 → gea_program-0.89.0}/gea/example_register_map.json +0 -0
  182. {gea_program-0.87.0 → gea_program-0.89.0}/gea/fat_sat.py +0 -0
  183. {gea_program-0.87.0 → gea_program-0.89.0}/gea/field_pull.py +0 -0
  184. {gea_program-0.87.0 → gea_program-0.89.0}/gea/files.py +0 -0
  185. {gea_program-0.87.0 → gea_program-0.89.0}/gea/fixtures/README.md +0 -0
  186. {gea_program-0.87.0 → gea_program-0.89.0}/gea/fixtures/comcat_delaware_basin_2026-09.txt +0 -0
  187. {gea_program-0.87.0 → gea_program-0.89.0}/gea/fixtures/comcat_mahoning_1990-2026.txt +0 -0
  188. {gea_program-0.87.0 → gea_program-0.89.0}/gea/fixtures/comcat_youngstown_2011-2012.txt +0 -0
  189. {gea_program-0.87.0 → gea_program-0.89.0}/gea/fixtures/ne_110m_coastline.json +0 -0
  190. {gea_program-0.87.0 → gea_program-0.89.0}/gea/fluid.py +0 -0
  191. {gea_program-0.87.0 → gea_program-0.89.0}/gea/follower.py +0 -0
  192. {gea_program-0.87.0 → gea_program-0.89.0}/gea/forward_model.py +0 -0
  193. {gea_program-0.87.0 → gea_program-0.89.0}/gea/frac_hits.py +0 -0
  194. {gea_program-0.87.0 → gea_program-0.89.0}/gea/friction_priors.py +0 -0
  195. {gea_program-0.87.0 → gea_program-0.89.0}/gea/front.py +0 -0
  196. {gea_program-0.87.0 → gea_program-0.89.0}/gea/gamma.py +0 -0
  197. {gea_program-0.87.0 → gea_program-0.89.0}/gea/gauge_aging.py +0 -0
  198. {gea_program-0.87.0 → gea_program-0.89.0}/gea/gauge_specs.py +0 -0
  199. {gea_program-0.87.0 → gea_program-0.89.0}/gea/geodesy.py +0 -0
  200. {gea_program-0.87.0 → gea_program-0.89.0}/gea/geomag.py +0 -0
  201. {gea_program-0.87.0 → gea_program-0.89.0}/gea/gravity_reference.py +0 -0
  202. {gea_program-0.87.0 → gea_program-0.89.0}/gea/hartip.py +0 -0
  203. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/TESTER_GUIDE.md +0 -0
  204. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/alarms.md +0 -0
  205. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/audit-update.md +0 -0
  206. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/backup.md +0 -0
  207. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/bit-image.md +0 -0
  208. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/calibration.md +0 -0
  209. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/casing.md +0 -0
  210. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/catalog.md +0 -0
  211. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/charts.md +0 -0
  212. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/collision.md +0 -0
  213. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/company-sign-in.md +0 -0
  214. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/conformance.md +0 -0
  215. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/control-room.md +0 -0
  216. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/data-in.md +0 -0
  217. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/declare.md +0 -0
  218. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/decline.md +0 -0
  219. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/dlis.md +0 -0
  220. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/doctor.md +0 -0
  221. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/dossier.md +0 -0
  222. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/drift.md +0 -0
  223. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/drillstring.md +0 -0
  224. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/economics.md +0 -0
  225. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/edr.md +0 -0
  226. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/etp.md +0 -0
  227. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/field-ports.md +0 -0
  228. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/files.md +0 -0
  229. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/fluid.md +0 -0
  230. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/frac-hits.md +0 -0
  231. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/front.md +0 -0
  232. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/historian.md +0 -0
  233. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/https.md +0 -0
  234. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/hydraulics.md +0 -0
  235. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/instruments.md +0 -0
  236. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/interval.md +0 -0
  237. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/invoice-check.md +0 -0
  238. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/map.md +0 -0
  239. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/month-end.md +0 -0
  240. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/notifications.md +0 -0
  241. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/opseis.md +0 -0
  242. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/osdu.md +0 -0
  243. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/pad-summary.md +0 -0
  244. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/patches.md +0 -0
  245. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/penetrator.md +0 -0
  246. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/plan.md +0 -0
  247. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/plume.md +0 -0
  248. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/pore-pressure.md +0 -0
  249. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/ppdm.md +0 -0
  250. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/quakeml.md +0 -0
  251. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/quality.md +0 -0
  252. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/records.md +0 -0
  253. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/report-history.md +0 -0
  254. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/rig-time.md +0 -0
  255. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/rocks.md +0 -0
  256. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/seedlink.md +0 -0
  257. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/seismic.md +0 -0
  258. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/setup.md +0 -0
  259. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/simulation.md +0 -0
  260. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/site.md +0 -0
  261. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/sites.md +0 -0
  262. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/slip.md +0 -0
  263. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/soak.md +0 -0
  264. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/sra.md +0 -0
  265. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/start.md +0 -0
  266. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/structure.md +0 -0
  267. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/tools.md +0 -0
  268. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/torque-drag.md +0 -0
  269. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/transients.md +0 -0
  270. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/tutorial/02-sign-in.md +0 -0
  271. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/tutorial/03-site.md +0 -0
  272. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/tutorial/04-add-well.md +0 -0
  273. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/tutorial/05-records.md +0 -0
  274. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/tutorial/06-well-page.md +0 -0
  275. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/tutorial/07-declare.md +0 -0
  276. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/tutorial/08-patches.md +0 -0
  277. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/tutorial/09-alarms.md +0 -0
  278. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/tutorial/10-control-room.md +0 -0
  279. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/tutorial/11-summary-month.md +0 -0
  280. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/tutorial/12-where-the-well-is.md +0 -0
  281. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/tutorial/14-production-pages.md +0 -0
  282. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/tutorial/15-seismic.md +0 -0
  283. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/tutorial/16-seismicity.md +0 -0
  284. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/tutorial/17-recorder-office.md +0 -0
  285. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/tutorial/18-reports.md +0 -0
  286. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/tutorial/21-upkeep.md +0 -0
  287. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/tutorial/24-the-box.md +0 -0
  288. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/tutorial/26-monitor.md +0 -0
  289. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/tutorial/27-mirror-vpn.md +0 -0
  290. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/tutorial/28-driller-office.md +0 -0
  291. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/upkeep.md +0 -0
  292. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/vibration.md +0 -0
  293. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/vpn.md +0 -0
  294. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/well-report.md +0 -0
  295. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/well-tests.md +0 -0
  296. {gea_program-0.87.0 → gea_program-0.89.0}/gea/help/well3d.md +0 -0
  297. {gea_program-0.87.0 → gea_program-0.89.0}/gea/housekeeping.py +0 -0
  298. {gea_program-0.87.0 → gea_program-0.89.0}/gea/hydraulics.py +0 -0
  299. {gea_program-0.87.0 → gea_program-0.89.0}/gea/icon.py +0 -0
  300. {gea_program-0.87.0 → gea_program-0.89.0}/gea/interval.py +0 -0
  301. {gea_program-0.87.0 → gea_program-0.89.0}/gea/inverse_engine.py +0 -0
  302. {gea_program-0.87.0 → gea_program-0.89.0}/gea/invoice_check.py +0 -0
  303. {gea_program-0.87.0 → gea_program-0.89.0}/gea/jobs.py +0 -0
  304. {gea_program-0.87.0 → gea_program-0.89.0}/gea/launcher.py +0 -0
  305. {gea_program-0.87.0 → gea_program-0.89.0}/gea/live_ports.py +0 -0
  306. {gea_program-0.87.0 → gea_program-0.89.0}/gea/loadtest.py +0 -0
  307. {gea_program-0.87.0 → gea_program-0.89.0}/gea/matplotlib_demo.py +0 -0
  308. {gea_program-0.87.0 → gea_program-0.89.0}/gea/modbus.py +0 -0
  309. {gea_program-0.87.0 → gea_program-0.89.0}/gea/modbus_rtu.py +0 -0
  310. {gea_program-0.87.0 → gea_program-0.89.0}/gea/model_card.py +0 -0
  311. {gea_program-0.87.0 → gea_program-0.89.0}/gea/month_end.py +0 -0
  312. {gea_program-0.87.0 → gea_program-0.89.0}/gea/mqtt_port.py +0 -0
  313. {gea_program-0.87.0 → gea_program-0.89.0}/gea/oidc.py +0 -0
  314. {gea_program-0.87.0 → gea_program-0.89.0}/gea/oidc_mock.py +0 -0
  315. {gea_program-0.87.0 → gea_program-0.89.0}/gea/op_seismicity.py +0 -0
  316. {gea_program-0.87.0 → gea_program-0.89.0}/gea/opcua_port.py +0 -0
  317. {gea_program-0.87.0 → gea_program-0.89.0}/gea/operator_app.py +0 -0
  318. {gea_program-0.87.0 → gea_program-0.89.0}/gea/osdu.py +0 -0
  319. {gea_program-0.87.0 → gea_program-0.89.0}/gea/pad_summary.py +0 -0
  320. {gea_program-0.87.0 → gea_program-0.89.0}/gea/patches.py +0 -0
  321. {gea_program-0.87.0 → gea_program-0.89.0}/gea/pdf_report.py +0 -0
  322. {gea_program-0.87.0 → gea_program-0.89.0}/gea/penetrator.py +0 -0
  323. {gea_program-0.87.0 → gea_program-0.89.0}/gea/permits.py +0 -0
  324. {gea_program-0.87.0 → gea_program-0.89.0}/gea/piwebapi.py +0 -0
  325. {gea_program-0.87.0 → gea_program-0.89.0}/gea/plume.py +0 -0
  326. {gea_program-0.87.0 → gea_program-0.89.0}/gea/pore_pressure.py +0 -0
  327. {gea_program-0.87.0 → gea_program-0.89.0}/gea/ports.py +0 -0
  328. {gea_program-0.87.0 → gea_program-0.89.0}/gea/ppdm.py +0 -0
  329. {gea_program-0.87.0 → gea_program-0.89.0}/gea/profile_catalog.py +0 -0
  330. {gea_program-0.87.0 → gea_program-0.89.0}/gea/project.py +0 -0
  331. {gea_program-0.87.0 → gea_program-0.89.0}/gea/qt6_downhole_app.py +0 -0
  332. {gea_program-0.87.0 → gea_program-0.89.0}/gea/quakeml.py +0 -0
  333. {gea_program-0.87.0 → gea_program-0.89.0}/gea/reader.py +0 -0
  334. {gea_program-0.87.0 → gea_program-0.89.0}/gea/reader_app.py +0 -0
  335. {gea_program-0.87.0 → gea_program-0.89.0}/gea/reconciler.py +0 -0
  336. {gea_program-0.87.0 → gea_program-0.89.0}/gea/recorder_link.py +0 -0
  337. {gea_program-0.87.0 → gea_program-0.89.0}/gea/reference/IU_ANMO_10_BHZ_response.provenance.json +0 -0
  338. {gea_program-0.87.0 → gea_program-0.89.0}/gea/reference/IU_ANMO_10_BHZ_response.xml +0 -0
  339. {gea_program-0.87.0 → gea_program-0.89.0}/gea/reference/WMM2025.COF +0 -0
  340. {gea_program-0.87.0 → gea_program-0.89.0}/gea/reference/eia_henry_hub_daily.csv.gz +0 -0
  341. {gea_program-0.87.0 → gea_program-0.89.0}/gea/reference/eia_prices.provenance.json +0 -0
  342. {gea_program-0.87.0 → gea_program-0.89.0}/gea/reference/eia_wti_daily.csv.gz +0 -0
  343. {gea_program-0.87.0 → gea_program-0.89.0}/gea/reference/iscwsa_rev4_example.json +0 -0
  344. {gea_program-0.87.0 → gea_program-0.89.0}/gea/reference/iscwsa_rev5_example.json +0 -0
  345. {gea_program-0.87.0 → gea_program-0.89.0}/gea/reference/l0701_sonic_gr.las.gz +0 -0
  346. {gea_program-0.87.0 → gea_program-0.89.0}/gea/reference/l0701_sonic_gr.provenance.json +0 -0
  347. {gea_program-0.87.0 → gea_program-0.89.0}/gea/reference/libmseed_steim.provenance.json +0 -0
  348. {gea_program-0.87.0 → gea_program-0.89.0}/gea/reference/libmseed_steim1_4096.mseed +0 -0
  349. {gea_program-0.87.0 → gea_program-0.89.0}/gea/reference/libmseed_steim2_4096.mseed +0 -0
  350. {gea_program-0.87.0 → gea_program-0.89.0}/gea/reference/libmseed_steim2_512.mseed +0 -0
  351. {gea_program-0.87.0 → gea_program-0.89.0}/gea/reference/mahoning_example.json +0 -0
  352. {gea_program-0.87.0 → gea_program-0.89.0}/gea/reference/mud_motor_specs.json +0 -0
  353. {gea_program-0.87.0 → gea_program-0.89.0}/gea/reference/owsg_tool_models.json +0 -0
  354. {gea_program-0.87.0 → gea_program-0.89.0}/gea/reference/penetrator_ratings.json +0 -0
  355. {gea_program-0.87.0 → gea_program-0.89.0}/gea/reference/seismicity_protocols.json +0 -0
  356. {gea_program-0.87.0 → gea_program-0.89.0}/gea/reference/tool_sources.json +0 -0
  357. {gea_program-0.87.0 → gea_program-0.89.0}/gea/reference/us_outline.json +0 -0
  358. {gea_program-0.87.0 → gea_program-0.89.0}/gea/reference/us_outline.provenance.json +0 -0
  359. {gea_program-0.87.0 → gea_program-0.89.0}/gea/reference/volve_3d.provenance.json +0 -0
  360. {gea_program-0.87.0 → gea_program-0.89.0}/gea/reference/volve_f4_interpretation.las.gz +0 -0
  361. {gea_program-0.87.0 → gea_program-0.89.0}/gea/reference/volve_f4_logs.provenance.json +0 -0
  362. {gea_program-0.87.0 → gea_program-0.89.0}/gea/reference/volve_f4_lwd.las.gz +0 -0
  363. {gea_program-0.87.0 → gea_program-0.89.0}/gea/reference/volve_surfaces.json.gz +0 -0
  364. {gea_program-0.87.0 → gea_program-0.89.0}/gea/reference/volve_traj_F-10.xml.gz +0 -0
  365. {gea_program-0.87.0 → gea_program-0.89.0}/gea/reference/volve_traj_F-4.xml.gz +0 -0
  366. {gea_program-0.87.0 → gea_program-0.89.0}/gea/reference/volve_traj_F-5_12.25in.xml.gz +0 -0
  367. {gea_program-0.87.0 → gea_program-0.89.0}/gea/reference/volve_traj_F-5_17.5in.xml.gz +0 -0
  368. {gea_program-0.87.0 → gea_program-0.89.0}/gea/reference/volve_traj_F-5_36in.xml.gz +0 -0
  369. {gea_program-0.87.0 → gea_program-0.89.0}/gea/reference/volve_traj_F-5_8.5in.xml.gz +0 -0
  370. {gea_program-0.87.0 → gea_program-0.89.0}/gea/reference/volve_well_picks.csv.gz +0 -0
  371. {gea_program-0.87.0 → gea_program-0.89.0}/gea/report_history.py +0 -0
  372. {gea_program-0.87.0 → gea_program-0.89.0}/gea/rock_inventory.py +0 -0
  373. {gea_program-0.87.0 → gea_program-0.89.0}/gea/sample_record.py +0 -0
  374. {gea_program-0.87.0 → gea_program-0.89.0}/gea/sample_well_profile.csv +0 -0
  375. {gea_program-0.87.0 → gea_program-0.89.0}/gea/sbom.py +0 -0
  376. {gea_program-0.87.0 → gea_program-0.89.0}/gea/seedlink.py +0 -0
  377. {gea_program-0.87.0 → gea_program-0.89.0}/gea/segy.py +0 -0
  378. {gea_program-0.87.0 → gea_program-0.89.0}/gea/seismic.py +0 -0
  379. {gea_program-0.87.0 → gea_program-0.89.0}/gea/seismic_array.py +0 -0
  380. {gea_program-0.87.0 → gea_program-0.89.0}/gea/seismic_assoc.py +0 -0
  381. {gea_program-0.87.0 → gea_program-0.89.0}/gea/seismic_detect.py +0 -0
  382. {gea_program-0.87.0 → gea_program-0.89.0}/gea/seismic_film.py +0 -0
  383. {gea_program-0.87.0 → gea_program-0.89.0}/gea/seismic_harmonic.py +0 -0
  384. {gea_program-0.87.0 → gea_program-0.89.0}/gea/seismic_qc.py +0 -0
  385. {gea_program-0.87.0 → gea_program-0.89.0}/gea/seismic_response.py +0 -0
  386. {gea_program-0.87.0 → gea_program-0.89.0}/gea/seismic_signature.py +0 -0
  387. {gea_program-0.87.0 → gea_program-0.89.0}/gea/seismic_track.py +0 -0
  388. {gea_program-0.87.0 → gea_program-0.89.0}/gea/seismic_uncertainty.py +0 -0
  389. {gea_program-0.87.0 → gea_program-0.89.0}/gea/seismic_unlisted.py +0 -0
  390. {gea_program-0.87.0 → gea_program-0.89.0}/gea/seismic_watch.py +0 -0
  391. {gea_program-0.87.0 → gea_program-0.89.0}/gea/sensor_swap.py +0 -0
  392. {gea_program-0.87.0 → gea_program-0.89.0}/gea/service_life.py +0 -0
  393. {gea_program-0.87.0 → gea_program-0.89.0}/gea/setup_checklist.py +0 -0
  394. {gea_program-0.87.0 → gea_program-0.89.0}/gea/shapefile.py +0 -0
  395. {gea_program-0.87.0 → gea_program-0.89.0}/gea/shell.py +0 -0
  396. {gea_program-0.87.0 → gea_program-0.89.0}/gea/shut_in.py +0 -0
  397. {gea_program-0.87.0 → gea_program-0.89.0}/gea/simulation.py +0 -0
  398. {gea_program-0.87.0 → gea_program-0.89.0}/gea/site_map.py +0 -0
  399. {gea_program-0.87.0 → gea_program-0.89.0}/gea/sla_report.py +0 -0
  400. {gea_program-0.87.0 → gea_program-0.89.0}/gea/slip.py +0 -0
  401. {gea_program-0.87.0 → gea_program-0.89.0}/gea/soak.py +0 -0
  402. {gea_program-0.87.0 → gea_program-0.89.0}/gea/sra.py +0 -0
  403. {gea_program-0.87.0 → gea_program-0.89.0}/gea/store_forward.py +0 -0
  404. {gea_program-0.87.0 → gea_program-0.89.0}/gea/strata_join.py +0 -0
  405. {gea_program-0.87.0 → gea_program-0.89.0}/gea/structure.py +0 -0
  406. {gea_program-0.87.0 → gea_program-0.89.0}/gea/supervisor.py +0 -0
  407. {gea_program-0.87.0 → gea_program-0.89.0}/gea/survey_cmd.py +0 -0
  408. {gea_program-0.87.0 → gea_program-0.89.0}/gea/survey_view.py +0 -0
  409. {gea_program-0.87.0 → gea_program-0.89.0}/gea/telemetry.py +0 -0
  410. {gea_program-0.87.0 → gea_program-0.89.0}/gea/timestamp.py +0 -0
  411. {gea_program-0.87.0 → gea_program-0.89.0}/gea/tls.py +0 -0
  412. {gea_program-0.87.0 → gea_program-0.89.0}/gea/tool_catalog.py +0 -0
  413. {gea_program-0.87.0 → gea_program-0.89.0}/gea/tool_library.py +0 -0
  414. {gea_program-0.87.0 → gea_program-0.89.0}/gea/tool_taxonomy.py +0 -0
  415. {gea_program-0.87.0 → gea_program-0.89.0}/gea/torque_drag.py +0 -0
  416. {gea_program-0.87.0 → gea_program-0.89.0}/gea/transient.py +0 -0
  417. {gea_program-0.87.0 → gea_program-0.89.0}/gea/tray.py +0 -0
  418. {gea_program-0.87.0 → gea_program-0.89.0}/gea/tutorial.py +0 -0
  419. {gea_program-0.87.0 → gea_program-0.89.0}/gea/updates.py +0 -0
  420. {gea_program-0.87.0 → gea_program-0.89.0}/gea/vibration.py +0 -0
  421. {gea_program-0.87.0 → gea_program-0.89.0}/gea/vpn.py +0 -0
  422. {gea_program-0.87.0 → gea_program-0.89.0}/gea/web/reader.html +0 -0
  423. {gea_program-0.87.0 → gea_program-0.89.0}/gea/well3d.py +0 -0
  424. {gea_program-0.87.0 → gea_program-0.89.0}/gea/well_assembler.py +0 -0
  425. {gea_program-0.87.0 → gea_program-0.89.0}/gea/well_records.py +0 -0
  426. {gea_program-0.87.0 → gea_program-0.89.0}/gea/well_report.py +0 -0
  427. {gea_program-0.87.0 → gea_program-0.89.0}/gea/well_test_validation.py +0 -0
  428. {gea_program-0.87.0 → gea_program-0.89.0}/gea/wellplan.py +0 -0
  429. {gea_program-0.87.0 → gea_program-0.89.0}/gea/wellpos.py +0 -0
  430. {gea_program-0.87.0 → gea_program-0.89.0}/gea/winident.py +0 -0
  431. {gea_program-0.87.0 → gea_program-0.89.0}/gea/wits0.py +0 -0
  432. {gea_program-0.87.0 → gea_program-0.89.0}/gea/witsml.py +0 -0
  433. {gea_program-0.87.0 → gea_program-0.89.0}/gea/workspace.py +0 -0
  434. {gea_program-0.87.0 → gea_program-0.89.0}/gea/workspaces.py +0 -0
  435. {gea_program-0.87.0 → gea_program-0.89.0}/gea/x25519.py +0 -0
  436. {gea_program-0.87.0 → gea_program-0.89.0}/gea/xlsx_read.py +0 -0
  437. {gea_program-0.87.0 → gea_program-0.89.0}/gea_program.egg-info/dependency_links.txt +0 -0
  438. {gea_program-0.87.0 → gea_program-0.89.0}/gea_program.egg-info/entry_points.txt +0 -0
  439. {gea_program-0.87.0 → gea_program-0.89.0}/gea_program.egg-info/requires.txt +0 -0
  440. {gea_program-0.87.0 → gea_program-0.89.0}/gea_program.egg-info/top_level.txt +0 -0
  441. {gea_program-0.87.0 → gea_program-0.89.0}/setup.cfg +0 -0
  442. {gea_program-0.87.0 → gea_program-0.89.0}/tests/test_acceptance.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gea-program
3
- Version: 0.87.0
3
+ Version: 0.89.0
4
4
  Summary: GEA-Program: downhole gauge monitoring - canonical measurement records, quality rules, drift evaluation with a re-fit change log, well-test validation, alarm management, model cards, store-and-forward, monthly SLA measurement, FAT/SAT protocols and a dashboard, generated from live objects in the client's reporting outline.
5
5
  Author: Daniel T. Murphy
6
6
  License: MPL-2.0
@@ -847,7 +847,7 @@ unsigned, the key hand-overs - and shows the reports as they were signed. A
847
847
  reader made from the workspace knows the site's key fingerprints, so it
848
848
  says whether a dossier is the site's; it allows no network request, and it
849
849
  leaves the trusted time-stamp to `verify_dossier.py`. For a client who wants
850
- it installed, every release also carries `GEA-Reader-Setup-0.87.0.exe`: GEA
850
+ it installed, every release also carries `GEA-Reader-Setup-0.89.0.exe`: GEA
851
851
  Reader as a Windows program of its own - its own icon and taskbar button,
852
852
  Check with GEA Reader on a dossier's right-click menu, fingerprints the client
853
853
  saves kept on that computer, nothing of GEA-Program. `gea help reader`.
@@ -1022,6 +1022,57 @@ of review and the front. Run by a person, kept with the hash of its inputs,
1022
1022
  marked stale when they change. Every figure a SIMULATION. The
1023
1023
  **Calibration** tab, `gea calibrate`, `gea help calibration`.
1024
1024
 
1025
+ ### Drilling roadmap
1026
+
1027
+ What the fastest stands on the pad were drilled with, stretch by stretch.
1028
+ Every well's drilling record is cut into stands of 100 ft; each stand goes
1029
+ into the stretch of hole it was drilled in - 1,000 ft of true vertical
1030
+ depth down to the heel, 1,000 ft along the hole beyond it, named for the
1031
+ mapped formation where the workspace has the tops and the well its
1032
+ elevation. In each stretch the fastest quarter of the stands is found, and
1033
+ the window is what those stands ran: the weight on bit, the rotary speed,
1034
+ the flow, the differential pressure, beside the well that was fastest
1035
+ there and what every other well ran through the same rock. Then the
1036
+ roadmap checks itself: each well is set against the roadmap made from the
1037
+ others, the half of its stands nearer the window against the farther half,
1038
+ stretch by stretch - so the page says whether running nearer the window
1039
+ went with drilling faster, or did not, before anyone drills the next well
1040
+ from it. The **Roadmap** tab, `gea roadmap`, `gea help roadmap`.
1041
+
1042
+ ### Drilling alerts
1043
+
1044
+ Three old driller's rules, written down so each is applied to every stand
1045
+ of every well the same way, and replayed over the whole of each record:
1046
+ the off-bottom pressure falling at a steady flow, connection after
1047
+ connection (a washout - or a pump, the mud or a nozzle; the trip finds
1048
+ which); the differential pressure spiking with the bit stopped (a motor
1049
+ stall); the pick-up and slack-off weight leaving their own trend (the hole
1050
+ getting tight). The page shows every reading, what each rule would have
1051
+ said and when, and what the rig did next - whether a trip out of the hole
1052
+ followed. The thresholds are settings, each changed with its source. On a
1053
+ record still being written an event raises an alert once. The **Drilling
1054
+ alerts** tab, `gea dysfunction`, `gea help dysfunction`.
1055
+
1056
+ ### Assistant access (MCP)
1057
+
1058
+ The site, readable by an assistant. `gea mcp` is a Model Context Protocol
1059
+ server: a chat program that speaks MCP - Claude Desktop, or any other
1060
+ client - starts it as its own child process and is given the program's
1061
+ pages as tools: the site and its wells, the rig time, the roadmap, the
1062
+ drilling alerts, torque and drag, hydraulics, the fluid balance, the plume,
1063
+ the front and their calibration, frac hits, the alerts, the audit log, the
1064
+ help. Each tool returns what the program itself computes, with its own
1065
+ labels - SIMULATION where it is one, "nothing declared" where nothing is -
1066
+ so the assistant's account of the site is the program's. It is local: no
1067
+ port is opened, the conversation is the child process's standard input and
1068
+ output. It is read-only: no tool declares, attaches, removes, writes a
1069
+ report or changes a setting. It is logged: every call is a line in the
1070
+ workspace. And the site chooses which pages are offered, because what a
1071
+ tool returns goes to whoever runs the model behind the assistant. Both
1072
+ eras of the protocol are spoken: the stateless revision 2026-07-28 and the
1073
+ `initialize` handshake of 2025-11-25 and earlier. The **Assistant access**
1074
+ tab (one button adds it to Claude Desktop), `gea mcp`, `gea help mcp`.
1075
+
1025
1076
  ### Plan vs actual and the survey tools
1026
1077
 
1027
1078
  Each well against its directional plan: at every survey station, how far
@@ -1686,7 +1737,7 @@ attaches the zips to the GitHub release of that tag.
1686
1737
 
1687
1738
  ### The Windows installer
1688
1739
 
1689
- Every release also carries `GEA-Program-Setup-0.87.0.exe` (for 0.87.0): the
1740
+ Every release also carries `GEA-Program-Setup-0.89.0.exe` (for 0.89.0): the
1690
1741
  same Windows kit installed like any Windows program, for the signed-in user
1691
1742
  alone and with no administrator rights (`%LOCALAPPDATA%\Programs\GEA-Program`).
1692
1743
  It asks for the site workspace (an existing one such as `C:\site` is used as
@@ -1705,7 +1756,7 @@ it, removes the program and leaves the workspace. Silent, for a site's
1705
1756
  software deployment:
1706
1757
 
1707
1758
  ```
1708
- GEA-Program-Setup-0.87.0.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /WORKSPACE="C:\site" /SITENAME="Pad 3" /TASKS="desktopicon"
1759
+ GEA-Program-Setup-0.89.0.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /WORKSPACE="C:\site" /SITENAME="Pad 3" /TASKS="desktopicon"
1709
1760
  ```
1710
1761
 
1711
1762
  The setup is built by Inno Setup 6 from `tools/installer.iss` in the same
@@ -808,7 +808,7 @@ unsigned, the key hand-overs - and shows the reports as they were signed. A
808
808
  reader made from the workspace knows the site's key fingerprints, so it
809
809
  says whether a dossier is the site's; it allows no network request, and it
810
810
  leaves the trusted time-stamp to `verify_dossier.py`. For a client who wants
811
- it installed, every release also carries `GEA-Reader-Setup-0.87.0.exe`: GEA
811
+ it installed, every release also carries `GEA-Reader-Setup-0.89.0.exe`: GEA
812
812
  Reader as a Windows program of its own - its own icon and taskbar button,
813
813
  Check with GEA Reader on a dossier's right-click menu, fingerprints the client
814
814
  saves kept on that computer, nothing of GEA-Program. `gea help reader`.
@@ -983,6 +983,57 @@ of review and the front. Run by a person, kept with the hash of its inputs,
983
983
  marked stale when they change. Every figure a SIMULATION. The
984
984
  **Calibration** tab, `gea calibrate`, `gea help calibration`.
985
985
 
986
+ ### Drilling roadmap
987
+
988
+ What the fastest stands on the pad were drilled with, stretch by stretch.
989
+ Every well's drilling record is cut into stands of 100 ft; each stand goes
990
+ into the stretch of hole it was drilled in - 1,000 ft of true vertical
991
+ depth down to the heel, 1,000 ft along the hole beyond it, named for the
992
+ mapped formation where the workspace has the tops and the well its
993
+ elevation. In each stretch the fastest quarter of the stands is found, and
994
+ the window is what those stands ran: the weight on bit, the rotary speed,
995
+ the flow, the differential pressure, beside the well that was fastest
996
+ there and what every other well ran through the same rock. Then the
997
+ roadmap checks itself: each well is set against the roadmap made from the
998
+ others, the half of its stands nearer the window against the farther half,
999
+ stretch by stretch - so the page says whether running nearer the window
1000
+ went with drilling faster, or did not, before anyone drills the next well
1001
+ from it. The **Roadmap** tab, `gea roadmap`, `gea help roadmap`.
1002
+
1003
+ ### Drilling alerts
1004
+
1005
+ Three old driller's rules, written down so each is applied to every stand
1006
+ of every well the same way, and replayed over the whole of each record:
1007
+ the off-bottom pressure falling at a steady flow, connection after
1008
+ connection (a washout - or a pump, the mud or a nozzle; the trip finds
1009
+ which); the differential pressure spiking with the bit stopped (a motor
1010
+ stall); the pick-up and slack-off weight leaving their own trend (the hole
1011
+ getting tight). The page shows every reading, what each rule would have
1012
+ said and when, and what the rig did next - whether a trip out of the hole
1013
+ followed. The thresholds are settings, each changed with its source. On a
1014
+ record still being written an event raises an alert once. The **Drilling
1015
+ alerts** tab, `gea dysfunction`, `gea help dysfunction`.
1016
+
1017
+ ### Assistant access (MCP)
1018
+
1019
+ The site, readable by an assistant. `gea mcp` is a Model Context Protocol
1020
+ server: a chat program that speaks MCP - Claude Desktop, or any other
1021
+ client - starts it as its own child process and is given the program's
1022
+ pages as tools: the site and its wells, the rig time, the roadmap, the
1023
+ drilling alerts, torque and drag, hydraulics, the fluid balance, the plume,
1024
+ the front and their calibration, frac hits, the alerts, the audit log, the
1025
+ help. Each tool returns what the program itself computes, with its own
1026
+ labels - SIMULATION where it is one, "nothing declared" where nothing is -
1027
+ so the assistant's account of the site is the program's. It is local: no
1028
+ port is opened, the conversation is the child process's standard input and
1029
+ output. It is read-only: no tool declares, attaches, removes, writes a
1030
+ report or changes a setting. It is logged: every call is a line in the
1031
+ workspace. And the site chooses which pages are offered, because what a
1032
+ tool returns goes to whoever runs the model behind the assistant. Both
1033
+ eras of the protocol are spoken: the stateless revision 2026-07-28 and the
1034
+ `initialize` handshake of 2025-11-25 and earlier. The **Assistant access**
1035
+ tab (one button adds it to Claude Desktop), `gea mcp`, `gea help mcp`.
1036
+
986
1037
  ### Plan vs actual and the survey tools
987
1038
 
988
1039
  Each well against its directional plan: at every survey station, how far
@@ -1647,7 +1698,7 @@ attaches the zips to the GitHub release of that tag.
1647
1698
 
1648
1699
  ### The Windows installer
1649
1700
 
1650
- Every release also carries `GEA-Program-Setup-0.87.0.exe` (for 0.87.0): the
1701
+ Every release also carries `GEA-Program-Setup-0.89.0.exe` (for 0.89.0): the
1651
1702
  same Windows kit installed like any Windows program, for the signed-in user
1652
1703
  alone and with no administrator rights (`%LOCALAPPDATA%\Programs\GEA-Program`).
1653
1704
  It asks for the site workspace (an existing one such as `C:\site` is used as
@@ -1666,7 +1717,7 @@ it, removes the program and leaves the workspace. Silent, for a site's
1666
1717
  software deployment:
1667
1718
 
1668
1719
  ```
1669
- GEA-Program-Setup-0.87.0.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /WORKSPACE="C:\site" /SITENAME="Pad 3" /TASKS="desktopicon"
1720
+ GEA-Program-Setup-0.89.0.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /WORKSPACE="C:\site" /SITENAME="Pad 3" /TASKS="desktopicon"
1670
1721
  ```
1671
1722
 
1672
1723
  The setup is built by Inno Setup 6 from `tools/installer.iss` in the same
@@ -123,7 +123,7 @@ from .profile_catalog import (
123
123
  read_pangaea_txt,
124
124
  )
125
125
 
126
- __version__ = "0.87.0"
126
+ __version__ = "0.89.0"
127
127
  __all__ = [
128
128
  "aging_rate", "rate_psi_yr", "accuracy_psi",
129
129
  "Sensor", "SimulatorConfig", "DownholeEngine",
@@ -628,6 +628,24 @@ def main(argv=None) -> int:
628
628
  p_cb.add_argument("--write", action="store_true", help="write reports/calibration/calibration.json and .md from the kept result")
629
629
  p_cb.add_argument("--actor", type=str, default="cli")
630
630
  p_cb.add_argument("--json", action="store_true")
631
+ p_rm = sub.add_parser("roadmap", help="the drilling roadmap: for every stretch of hole, the weight on bit, rotary speed, flow and differential pressure the fastest quarter of the stands on the pad's wells were drilled with, which well was fastest there, and each well checked against the roadmap made from the others")
632
+ p_rm.add_argument("--workspace", type=str, default=None, help="the workspace folder; without one the self-test runs (three labelled wells through rock with a known best weight and speed)")
633
+ p_rm.add_argument("--well", type=str, default=None, help="the well the next stand is given for (default: the well whose record ends last)")
634
+ p_rm.add_argument("--write", action="store_true", help="write reports/roadmap/roadmap.json, .md and .csv")
635
+ p_rm.add_argument("--actor", type=str, default="cli")
636
+ p_rm.add_argument("--json", action="store_true")
637
+ p_dy = sub.add_parser("dysfunction", help="drilling alerts replayed over each well's record: the off-bottom pressure falling at a steady flow (a washout), the differential pressure spiking with the bit stopped (a motor stall), the pick-up weight leaving its own trend (the hole getting tight) - what each rule would have said, when, and whether a trip followed")
638
+ p_dy.add_argument("--workspace", type=str, default=None, help="the workspace folder; without one the self-test runs (a labelled record with a washout, three stalls and a tightening hole put in, and a sound one)")
639
+ p_dy.add_argument("--washout-fall", type=float, default=None, help="settings: the fall in off-bottom pressure that flags a reading, as a fraction (default 0.06)")
640
+ p_dy.add_argument("--washout-min-psi", type=float, default=None, help="settings: and the least fall in psi (default 100)")
641
+ p_dy.add_argument("--stall-rise", type=float, default=None, help="settings: the rise in differential pressure over its median that is a stall, as a fraction (default 0.6)")
642
+ p_dy.add_argument("--stall-min-psi", type=float, default=None, help="settings: and the least rise in psi (default 300)")
643
+ p_dy.add_argument("--drag-sigma", type=float, default=None, help="settings: how many scatters off its trend a pick-up or slack-off weight is flagged at (default 3)")
644
+ p_dy.add_argument("--drag-min-klbf", type=float, default=None, help="settings: and the least distance in klbf (default 10)")
645
+ p_dy.add_argument("--source", type=str, default="", help="who set a changed setting and on what grounds")
646
+ p_dy.add_argument("--write", action="store_true", help="write reports/dysfunction/drilling_alerts.json, .md and events.csv")
647
+ p_dy.add_argument("--actor", type=str, default="cli")
648
+ p_dy.add_argument("--json", action="store_true")
631
649
  p_os = sub.add_parser("seismicity", help="operations and seismicity: each well's drilling, completion and disposal windows against the earthquake catalogue around it - the events during and after each, the levels a regulator's protocol would reach, and the rate during operations against the rest of the record; the Mahoning Valley worked example")
632
650
  p_os.add_argument("--workspace", type=str, default=None)
633
651
  p_os.add_argument("--scene", type=str, default=None, choices=("workspace", "mahoning"), help="your wells (the default with --workspace) or the public worked example")
@@ -659,6 +677,21 @@ def main(argv=None) -> int:
659
677
  p_os.add_argument("--actor", type=str, default="cli")
660
678
  p_os.add_argument("--json", action="store_true")
661
679
 
680
+ p_mc = sub.add_parser("mcp", help="the site, readable by an assistant: a Model Context Protocol server on standard input and output - local (no port), read-only (every tool reads one of the program's pages, none changes anything), logged; with --workspace alone it serves until its input closes")
681
+ p_mc.add_argument("--workspace", type=str, default=None, help="the workspace folder; without one the self-test runs (both eras of the protocol against a labelled site)")
682
+ p_mc.add_argument("--allow", type=str, default=None, help="serve only these tools this run, comma-separated (never more than the site offers)")
683
+ p_mc.add_argument("--status", action="store_true", help="print the tools offered, how to start the server and the last calls, and exit")
684
+ p_mc.add_argument("--config", action="store_true", help="print the entry an MCP client's configuration needs to start this site's server, and exit")
685
+ p_mc.add_argument("--call", type=str, default=None, help="call one tool and print its answer, as an assistant would get it")
686
+ p_mc.add_argument("--well", type=str, default=None, help="--call: the well, by name or id")
687
+ p_mc.add_argument("--topic", type=str, default=None, help="--call help: the topic")
688
+ p_mc.add_argument("--json", action="store_true", help="--call: the page as JSON instead of its text")
689
+ p_mc.add_argument("--offer", type=str, default=None, help="settings: the tools the site offers, comma-separated (all: every tool)")
690
+ p_mc.add_argument("--max-chars", type=int, default=None, help="settings: the most characters one answer carries (default 40000)")
691
+ p_mc.add_argument("--source", type=str, default="", help="settings: who decided, and on what grounds")
692
+ p_mc.add_argument("--add-to-claude-desktop", action="store_true", help="add this site's server to Claude Desktop's configuration on this computer, keeping every other entry and a dated copy of the file")
693
+ p_mc.add_argument("--remove-from-claude-desktop", action="store_true", help="take it out again")
694
+ p_mc.add_argument("--actor", type=str, default="cli")
662
695
  p_al = sub.add_parser("alerts", help="the program's alerts: earthquakes near operating wells and the protocol levels they reach, the earthquake watch going quiet, components due for service, penetrator checks outside their ratings, dossiers the workspace no longer matches")
663
696
  p_al.add_argument("--workspace", type=str, required=True)
664
697
  p_al.add_argument("--check", action="store_true", help="check the motors, penetrators and dossiers now, sending what began or cleared through the notification rules")
@@ -2832,6 +2865,52 @@ def main(argv=None) -> int:
2832
2865
  raise SystemExit(f"calibrate: {e.args[0] if e.args else e}")
2833
2866
  print(_json.dumps(p, default=str) if a.json else _CB.text(p))
2834
2867
  return 0
2868
+ elif a.cmd == "roadmap":
2869
+ import json as _json
2870
+ from . import roadmap as _RM
2871
+ from .cli import _safe_stdout
2872
+ from .workspace import Workspace, WorkspaceError
2873
+ _safe_stdout()
2874
+ if not a.workspace:
2875
+ r = _RM.selftest()
2876
+ print(_json.dumps(r, default=str) if a.json else "\n".join(f"{'PASS' if c['pass'] else 'FAIL'} {c['check']}: {c['value']}" for c in r["checks"]) + f"\n{'OK' if r['ok'] else 'FAILED'} - {r['label']}")
2877
+ return 0 if r["ok"] else 1
2878
+ try:
2879
+ ws = Workspace(a.workspace)
2880
+ if a.write:
2881
+ from . import __version__ as _ver88r
2882
+ r = _RM.write_report(ws, _ver88r, a.actor)
2883
+ print(f"written: {', '.join(r['files'])} under {r['folder']}")
2884
+ p = _RM.page(ws, a.well)
2885
+ except (_RM.RoadmapError, WorkspaceError, ValueError, OSError) as e:
2886
+ raise SystemExit(f"roadmap: {e.args[0] if e.args else e}")
2887
+ print(_json.dumps(p, default=str) if a.json else _RM.text(p))
2888
+ return 0
2889
+ elif a.cmd == "dysfunction":
2890
+ import json as _json
2891
+ from . import dysfunction as _DY
2892
+ from .cli import _safe_stdout
2893
+ from .workspace import Workspace, WorkspaceError
2894
+ _safe_stdout()
2895
+ if not a.workspace:
2896
+ r = _DY.selftest()
2897
+ print(_json.dumps(r, default=str) if a.json else "\n".join(f"{'PASS' if c['pass'] else 'FAIL'} {c['check']}: {c['value']}" for c in r["checks"]) + f"\n{'OK' if r['ok'] else 'FAILED'} - {r['label']}")
2898
+ return 0 if r["ok"] else 1
2899
+ try:
2900
+ ws = Workspace(a.workspace)
2901
+ kw_ = {"washout_fall": a.washout_fall, "washout_min_psi": a.washout_min_psi, "stall_rise": a.stall_rise, "stall_min_psi": a.stall_min_psi, "drag_sigma": a.drag_sigma, "drag_min_klbf": a.drag_min_klbf}
2902
+ if any(v is not None for v in kw_.values()):
2903
+ st_ = _DY.set_settings(ws, a.actor, a.source, **kw_)
2904
+ print("settings: " + ", ".join(f"{k} {st_[k]:g}" for k in _DY.DEFAULTS))
2905
+ if a.write:
2906
+ from . import __version__ as _ver88d
2907
+ r = _DY.write_report(ws, _ver88d, a.actor)
2908
+ print(f"written: {', '.join(r['files'])} under {r['folder']}")
2909
+ p = _DY.page(ws)
2910
+ except (_DY.DysfunctionError, WorkspaceError, ValueError, OSError) as e:
2911
+ raise SystemExit(f"dysfunction: {e.args[0] if e.args else e}")
2912
+ print(_json.dumps(p, default=str) if a.json else _DY.text(p))
2913
+ return 0
2835
2914
  elif a.cmd == "seismicity":
2836
2915
  import json as _json
2837
2916
  from . import op_seismicity as _OS
@@ -3496,6 +3575,50 @@ def main(argv=None) -> int:
3496
3575
  for v in f_["versions"][: (50 if a.family else 3)]:
3497
3576
  print(f" {v['utc']} {v.get('report_id') or ''} reports/{v['dir']}")
3498
3577
  return 0
3578
+ elif a.cmd == "mcp":
3579
+ import json as _json
3580
+ from . import mcp_server as _MC
3581
+ from .workspace import Workspace, WorkspaceError
3582
+ allow_ = [t_.strip() for t_ in a.allow.split(",") if t_.strip()] if a.allow else None
3583
+ if not a.workspace:
3584
+ r = _MC.selftest()
3585
+ print("\n".join(f"{'PASS' if c['pass'] else 'FAIL'} {c['check']}: {c['value']}" for c in r["checks"]) + f"\n{'OK' if r['ok'] else 'FAILED'} - {r['label']}")
3586
+ return 0 if r["ok"] else 1
3587
+ try:
3588
+ ws = Workspace(a.workspace)
3589
+ except WorkspaceError as e:
3590
+ print(f"mcp: {e}", file=sys.stderr) # the error stream: standard output is the protocol's
3591
+ return 2
3592
+ if not (a.status or a.config or a.call or a.offer or a.max_chars is not None or a.add_to_claude_desktop or a.remove_from_claude_desktop):
3593
+ return _MC.serve(ws, allow=allow_) # the server: nothing but protocol messages on standard output
3594
+ from .cli import _safe_stdout
3595
+ _safe_stdout()
3596
+ try:
3597
+ if a.offer or a.max_chars is not None:
3598
+ st_ = _MC.set_settings(ws, a.actor, (list(_MC.NAMES) if a.offer and a.offer.strip().lower() == "all" else a.offer), a.max_chars, a.source)
3599
+ print(f"offered: {', '.join(_MC.offered(ws))}; an answer carries {st_['max_chars']:,} characters at most")
3600
+ if a.add_to_claude_desktop or a.remove_from_claude_desktop:
3601
+ r = _MC.install_claude_desktop(ws, a.actor, remove=a.remove_from_claude_desktop)
3602
+ for d_ in r["done"]:
3603
+ print(f"{'taken out of' if r['removed'] else 'added to'} {d_['path']}" + (f" (as it was: {d_['backup']})" if d_["backup"] else "") + " - quit Claude Desktop and start it again")
3604
+ for d_ in r["skipped"]:
3605
+ print(f"not changed: {d_['path']} - {d_['why']}")
3606
+ if a.config:
3607
+ print(_json.dumps(_MC.client_config(ws.path, allow_), indent=2))
3608
+ if a.call:
3609
+ if a.call not in _MC.offered(ws, allow_):
3610
+ raise SystemExit(f"mcp: no tool {a.call!r} is offered; offered: {', '.join(_MC.offered(ws, allow_))}")
3611
+ args_ = {k: v for k, v in (("well", a.well), ("topic", a.topic)) if v is not None}
3612
+ if a.json:
3613
+ args_["json"] = True
3614
+ r = _MC.call_tool(ws, a.call, args_, _MC.settings(ws)["max_chars"])
3615
+ print(r["text"])
3616
+ return 1 if r["is_error"] else 0
3617
+ if a.status:
3618
+ print(_MC.text(_MC.page(ws)))
3619
+ except (_MC.ToolError, WorkspaceError, OSError) as e:
3620
+ raise SystemExit(f"mcp: {e.args[0] if e.args else e}")
3621
+ return 0
3499
3622
  elif a.cmd == "alerts":
3500
3623
  import json as _json
3501
3624
  from . import alerts as _AL