gea-program 0.88.0__tar.gz → 0.90.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 (446) hide show
  1. {gea_program-0.88.0/gea_program.egg-info → gea_program-0.90.0}/PKG-INFO +81 -4
  2. {gea_program-0.88.0 → gea_program-0.90.0}/README.md +80 -3
  3. {gea_program-0.88.0 → gea_program-0.90.0}/gea/__init__.py +1 -1
  4. {gea_program-0.88.0 → gea_program-0.90.0}/gea/__main__.py +124 -0
  5. {gea_program-0.88.0 → gea_program-0.90.0}/gea/acceptance_tests.py +439 -2
  6. gea_program-0.90.0/gea/benchmark.py +272 -0
  7. {gea_program-0.88.0 → gea_program-0.90.0}/gea/dysfunction.py +27 -9
  8. {gea_program-0.88.0 → gea_program-0.90.0}/gea/edr.py +73 -6
  9. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/IT_SECURITY.md +19 -1
  10. gea_program-0.90.0/gea/help/benchmark.md +13 -0
  11. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/driller.md +1 -1
  12. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/dysfunction.md +1 -1
  13. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/edr.md +3 -1
  14. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/install.md +2 -2
  15. gea_program-0.90.0/gea/help/mcp.md +15 -0
  16. gea_program-0.90.0/gea/help/public-data.md +15 -0
  17. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/reader.md +1 -1
  18. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/recorder.md +1 -1
  19. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/roadmap.md +1 -1
  20. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/tutorial/01-install.md +2 -2
  21. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/tutorial/13-drilling-pages.md +10 -8
  22. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/tutorial/19-dossier-reader.md +1 -1
  23. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/tutorial/20-admin.md +2 -1
  24. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/tutorial/22-updates.md +1 -1
  25. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/tutorial/23-vpn.md +1 -1
  26. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/tutorial/25-install-recorder.md +2 -2
  27. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/tutorial/29-driller-rig.md +1 -1
  28. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/tutorial.md +2 -2
  29. {gea_program-0.88.0 → gea_program-0.90.0}/gea/helplib.py +4 -1
  30. gea_program-0.90.0/gea/mcp_server.py +725 -0
  31. gea_program-0.90.0/gea/public_pad.py +603 -0
  32. {gea_program-0.88.0 → gea_program-0.90.0}/gea/rig_state.py +5 -2
  33. {gea_program-0.88.0 → gea_program-0.90.0}/gea/roadmap.py +26 -7
  34. {gea_program-0.88.0 → gea_program-0.90.0}/gea/service.py +36 -0
  35. {gea_program-0.88.0 → gea_program-0.90.0}/gea/web/app.html +82 -1
  36. {gea_program-0.88.0 → gea_program-0.90.0/gea_program.egg-info}/PKG-INFO +81 -4
  37. {gea_program-0.88.0 → gea_program-0.90.0}/gea_program.egg-info/SOURCES.txt +6 -0
  38. {gea_program-0.88.0 → gea_program-0.90.0}/pyproject.toml +1 -1
  39. {gea_program-0.88.0 → gea_program-0.90.0}/LICENSE +0 -0
  40. {gea_program-0.88.0 → gea_program-0.90.0}/gea/BENCH_TEST_PROTOCOL.md +0 -0
  41. {gea_program-0.88.0 → gea_program-0.90.0}/gea/accuracy_statement.py +0 -0
  42. {gea_program-0.88.0 → gea_program-0.90.0}/gea/alarm_engine.py +0 -0
  43. {gea_program-0.88.0 → gea_program-0.90.0}/gea/alerts.py +0 -0
  44. {gea_program-0.88.0 → gea_program-0.90.0}/gea/backup.py +0 -0
  45. {gea_program-0.88.0 → gea_program-0.90.0}/gea/bench.py +0 -0
  46. {gea_program-0.88.0 → gea_program-0.90.0}/gea/bit_seismic.py +0 -0
  47. {gea_program-0.88.0 → gea_program-0.90.0}/gea/blind_harness.py +0 -0
  48. {gea_program-0.88.0 → gea_program-0.90.0}/gea/calibration.py +0 -0
  49. {gea_program-0.88.0 → gea_program-0.90.0}/gea/casing_design.py +0 -0
  50. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/acex_lomonosov_age_depth_model.provenance.json +0 -0
  51. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/acex_lomonosov_age_depth_model.txt +0 -0
  52. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/agassiz77_canada_temperature.csv +0 -0
  53. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/agassiz77_canada_temperature.provenance.json +0 -0
  54. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/barbados_110_consolidation.provenance.json +0 -0
  55. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/barbados_110_consolidation.txt +0 -0
  56. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/bengal_u1452_grain_size.provenance.json +0 -0
  57. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/bengal_u1452_grain_size.txt +0 -0
  58. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/blake_164_methane_isotopes.provenance.json +0 -0
  59. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/blake_164_methane_isotopes.txt +0 -0
  60. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/chicxulub_m0077a_pwave_velocity.provenance.json +0 -0
  61. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/chicxulub_m0077a_pwave_velocity.txt +0 -0
  62. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/collingwood_1_28_ks_complete.las +0 -0
  63. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/collingwood_1_28_ks_complete.provenance.json +0 -0
  64. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/costa_rica_odp_friction_envelope.provenance.json +0 -0
  65. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/costa_rica_odp_friction_envelope.txt +0 -0
  66. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/dead_sea_5017_debrite_xrf_ms.provenance.json +0 -0
  67. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/dead_sea_5017_debrite_xrf_ms.txt +0 -0
  68. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/dsdp_504b_physical_properties.provenance.json +0 -0
  69. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/dsdp_504b_physical_properties.txt +0 -0
  70. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/dsdp_504b_sound_velocity.provenance.json +0 -0
  71. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/dsdp_504b_sound_velocity.txt +0 -0
  72. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/elgygytgyn_5011_turbidites.provenance.json +0 -0
  73. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/elgygytgyn_5011_turbidites.txt +0 -0
  74. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/epica_domec_co2_800kyr.provenance.json +0 -0
  75. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/epica_domec_co2_800kyr.txt +0 -0
  76. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/fram_909_organic_petrography.provenance.json +0 -0
  77. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/fram_909_organic_petrography.txt +0 -0
  78. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/gbr_325_coral_uth_ages.provenance.json +0 -0
  79. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/gbr_325_coral_uth_ages.txt +0 -0
  80. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/gisp2_greenland_temperature.csv +0 -0
  81. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/gisp2_greenland_temperature.provenance.json +0 -0
  82. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/gom_308_t2p_insitu.provenance.json +0 -0
  83. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/gom_308_t2p_insitu.txt +0 -0
  84. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/guaymas_385_dom_d13c.provenance.json +0 -0
  85. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/guaymas_385_dom_d13c.txt +0 -0
  86. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/hikurangi_u1520_friction_insitu.provenance.json +0 -0
  87. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/hikurangi_u1520_friction_insitu.txt +0 -0
  88. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/hydrate_ridge_204_ncr_hydrate.provenance.json +0 -0
  89. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/hydrate_ridge_204_ncr_hydrate.txt +0 -0
  90. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/iodp_u1324_pore_pressure.provenance.json +0 -0
  91. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/iodp_u1324_pore_pressure.txt +0 -0
  92. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/jfast_c0019_slow_slip_events.provenance.json +0 -0
  93. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/jfast_c0019_slow_slip_events.txt +0 -0
  94. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/kennetcook_2_p129_excerpt.las +0 -0
  95. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/kennetcook_2_p129_excerpt.provenance.json +0 -0
  96. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/ktb_hb_bhgm_density.dat +0 -0
  97. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/ktb_hb_bhgm_density.provenance.json +0 -0
  98. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/ktb_hb_complog_6020_excerpt.provenance.json +0 -0
  99. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/ktb_hb_complog_6020_excerpt.txt +0 -0
  100. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/ktb_hb_hlog246_temperature.dat +0 -0
  101. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/ktb_hb_hlog246_temperature.provenance.json +0 -0
  102. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/ktb_hb_rockmech_compress.dat +0 -0
  103. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/ktb_hb_rockmech_compress.provenance.json +0 -0
  104. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/ktb_hb_tvd_0_9080_excerpt.dat +0 -0
  105. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/ktb_hb_tvd_0_9080_excerpt.provenance.json +0 -0
  106. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/ktb_vb_rockmech_compress.dat +0 -0
  107. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/ktb_vb_rockmech_compress.provenance.json +0 -0
  108. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/ktb_vb_vlog251_temperature.dat +0 -0
  109. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/ktb_vb_vlog251_temperature.provenance.json +0 -0
  110. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/l06_06_nl_survey.csv +0 -0
  111. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/l06_06_nl_survey.provenance.json +0 -0
  112. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/l07_01_nl_excerpt.las +0 -0
  113. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/l07_01_nl_excerpt.provenance.json +0 -0
  114. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/mariana_1200_serpentinite_geochem.provenance.json +0 -0
  115. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/mariana_1200_serpentinite_geochem.txt +0 -0
  116. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/med_160_sapropels.provenance.json +0 -0
  117. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/med_160_sapropels.txt +0 -0
  118. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/nankai_megasplay_shear_strength.provenance.json +0 -0
  119. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/nankai_megasplay_shear_strength.txt +0 -0
  120. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/odp_1027b_thermal_conductivity.provenance.json +0 -0
  121. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/odp_1027b_thermal_conductivity.txt +0 -0
  122. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/odp_1027c_cork_temperature.provenance.json +0 -0
  123. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/odp_1027c_cork_temperature.txt +0 -0
  124. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/odp_1165b_thermal_conductivity.provenance.json +0 -0
  125. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/odp_1165b_thermal_conductivity.txt +0 -0
  126. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/odp_1274a_mantle_peridotite_mad.provenance.json +0 -0
  127. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/odp_1274a_mantle_peridotite_mad.txt +0 -0
  128. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/odp_504b_dike_elastic_moduli.provenance.json +0 -0
  129. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/odp_504b_dike_elastic_moduli.txt +0 -0
  130. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/odp_504b_leg137_borehole_fluids.provenance.json +0 -0
  131. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/odp_504b_leg137_borehole_fluids.txt +0 -0
  132. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/odp_735b_gabbro_elastic_moduli.provenance.json +0 -0
  133. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/odp_735b_gabbro_elastic_moduli.txt +0 -0
  134. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/peru_201_sulfate_reduction.provenance.json +0 -0
  135. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/peru_201_sulfate_reduction.txt +0 -0
  136. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/scorpio_e1_sa_excerpt.las +0 -0
  137. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/scorpio_e1_sa_excerpt.provenance.json +0 -0
  138. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/sumatra_362_cohesion.provenance.json +0 -0
  139. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/sumatra_362_cohesion.txt +0 -0
  140. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/university_6_17_no1_tx_excerpt.las +0 -0
  141. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/university_6_17_no1_tx_excerpt.provenance.json +0 -0
  142. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/ursa_308_xrd_mineralogy.provenance.json +0 -0
  143. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/ursa_308_xrd_mineralogy.txt +0 -0
  144. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/volve_15_9_19_sr_excerpt.las +0 -0
  145. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/volve_15_9_19_sr_excerpt.provenance.json +0 -0
  146. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/volve_15_9_19a_core_excerpt.csv +0 -0
  147. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/volve_15_9_19a_core_excerpt.provenance.json +0 -0
  148. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/volve_f12_f14_production_excerpt.csv +0 -0
  149. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/volve_f12_f14_production_excerpt.provenance.json +0 -0
  150. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/walvis_208_petm_carbonate.provenance.json +0 -0
  151. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/walvis_208_petm_carbonate.txt +0 -0
  152. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/woodlark_1109_rock_eval.provenance.json +0 -0
  153. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog/woodlark_1109_rock_eval.txt +0 -0
  154. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog_map.py +0 -0
  155. {gea_program-0.88.0 → gea_program-0.90.0}/gea/catalog_register.py +0 -0
  156. {gea_program-0.88.0 → gea_program-0.90.0}/gea/certificates.py +0 -0
  157. {gea_program-0.88.0 → gea_program-0.90.0}/gea/cli.py +0 -0
  158. {gea_program-0.88.0 → gea_program-0.90.0}/gea/client_reports.py +0 -0
  159. {gea_program-0.88.0 → gea_program-0.90.0}/gea/collision.py +0 -0
  160. {gea_program-0.88.0 → gea_program-0.90.0}/gea/config_versioning.py +0 -0
  161. {gea_program-0.88.0 → gea_program-0.90.0}/gea/conformance.py +0 -0
  162. {gea_program-0.88.0 → gea_program-0.90.0}/gea/control_room.py +0 -0
  163. {gea_program-0.88.0 → gea_program-0.90.0}/gea/correlation.py +0 -0
  164. {gea_program-0.88.0 → gea_program-0.90.0}/gea/dashboard.py +0 -0
  165. {gea_program-0.88.0 → gea_program-0.90.0}/gea/declarations.py +0 -0
  166. {gea_program-0.88.0 → gea_program-0.90.0}/gea/decline.py +0 -0
  167. {gea_program-0.88.0 → gea_program-0.90.0}/gea/deviation.py +0 -0
  168. {gea_program-0.88.0 → gea_program-0.90.0}/gea/dlis.py +0 -0
  169. {gea_program-0.88.0 → gea_program-0.90.0}/gea/dnp3.py +0 -0
  170. {gea_program-0.88.0 → gea_program-0.90.0}/gea/doctor.py +0 -0
  171. {gea_program-0.88.0 → gea_program-0.90.0}/gea/dossier.py +0 -0
  172. {gea_program-0.88.0 → gea_program-0.90.0}/gea/dossier_verify.py +0 -0
  173. {gea_program-0.88.0 → gea_program-0.90.0}/gea/downhole_engine.py +0 -0
  174. {gea_program-0.88.0 → gea_program-0.90.0}/gea/drift_monitor.py +0 -0
  175. {gea_program-0.88.0 → gea_program-0.90.0}/gea/drill_string.py +0 -0
  176. {gea_program-0.88.0 → gea_program-0.90.0}/gea/driller_link.py +0 -0
  177. {gea_program-0.88.0 → gea_program-0.90.0}/gea/earth_model.py +0 -0
  178. {gea_program-0.88.0 → gea_program-0.90.0}/gea/economics.py +0 -0
  179. {gea_program-0.88.0 → gea_program-0.90.0}/gea/ed25519.py +0 -0
  180. {gea_program-0.88.0 → gea_program-0.90.0}/gea/elevation.py +0 -0
  181. {gea_program-0.88.0 → gea_program-0.90.0}/gea/etp.py +0 -0
  182. {gea_program-0.88.0 → gea_program-0.90.0}/gea/etp12_schemas.json +0 -0
  183. {gea_program-0.88.0 → gea_program-0.90.0}/gea/example_register_map.json +0 -0
  184. {gea_program-0.88.0 → gea_program-0.90.0}/gea/fat_sat.py +0 -0
  185. {gea_program-0.88.0 → gea_program-0.90.0}/gea/field_pull.py +0 -0
  186. {gea_program-0.88.0 → gea_program-0.90.0}/gea/files.py +0 -0
  187. {gea_program-0.88.0 → gea_program-0.90.0}/gea/fixtures/README.md +0 -0
  188. {gea_program-0.88.0 → gea_program-0.90.0}/gea/fixtures/comcat_delaware_basin_2026-09.txt +0 -0
  189. {gea_program-0.88.0 → gea_program-0.90.0}/gea/fixtures/comcat_mahoning_1990-2026.txt +0 -0
  190. {gea_program-0.88.0 → gea_program-0.90.0}/gea/fixtures/comcat_youngstown_2011-2012.txt +0 -0
  191. {gea_program-0.88.0 → gea_program-0.90.0}/gea/fixtures/ne_110m_coastline.json +0 -0
  192. {gea_program-0.88.0 → gea_program-0.90.0}/gea/fluid.py +0 -0
  193. {gea_program-0.88.0 → gea_program-0.90.0}/gea/follower.py +0 -0
  194. {gea_program-0.88.0 → gea_program-0.90.0}/gea/forward_model.py +0 -0
  195. {gea_program-0.88.0 → gea_program-0.90.0}/gea/frac_hits.py +0 -0
  196. {gea_program-0.88.0 → gea_program-0.90.0}/gea/friction_priors.py +0 -0
  197. {gea_program-0.88.0 → gea_program-0.90.0}/gea/front.py +0 -0
  198. {gea_program-0.88.0 → gea_program-0.90.0}/gea/gamma.py +0 -0
  199. {gea_program-0.88.0 → gea_program-0.90.0}/gea/gauge_aging.py +0 -0
  200. {gea_program-0.88.0 → gea_program-0.90.0}/gea/gauge_specs.py +0 -0
  201. {gea_program-0.88.0 → gea_program-0.90.0}/gea/geodesy.py +0 -0
  202. {gea_program-0.88.0 → gea_program-0.90.0}/gea/geomag.py +0 -0
  203. {gea_program-0.88.0 → gea_program-0.90.0}/gea/gravity_reference.py +0 -0
  204. {gea_program-0.88.0 → gea_program-0.90.0}/gea/hartip.py +0 -0
  205. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/TESTER_GUIDE.md +0 -0
  206. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/alarms.md +0 -0
  207. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/alerts.md +0 -0
  208. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/audit-update.md +0 -0
  209. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/backup.md +0 -0
  210. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/bit-image.md +0 -0
  211. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/calibration.md +0 -0
  212. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/casing.md +0 -0
  213. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/catalog.md +0 -0
  214. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/charts.md +0 -0
  215. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/collision.md +0 -0
  216. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/company-sign-in.md +0 -0
  217. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/conformance.md +0 -0
  218. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/control-room.md +0 -0
  219. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/data-in.md +0 -0
  220. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/declare.md +0 -0
  221. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/decline.md +0 -0
  222. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/dlis.md +0 -0
  223. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/doctor.md +0 -0
  224. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/dossier.md +0 -0
  225. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/drift.md +0 -0
  226. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/drillstring.md +0 -0
  227. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/economics.md +0 -0
  228. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/etp.md +0 -0
  229. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/field-ports.md +0 -0
  230. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/files.md +0 -0
  231. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/fluid.md +0 -0
  232. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/frac-hits.md +0 -0
  233. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/front.md +0 -0
  234. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/historian.md +0 -0
  235. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/https.md +0 -0
  236. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/hydraulics.md +0 -0
  237. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/instruments.md +0 -0
  238. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/interval.md +0 -0
  239. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/invoice-check.md +0 -0
  240. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/map.md +0 -0
  241. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/month-end.md +0 -0
  242. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/notifications.md +0 -0
  243. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/opseis.md +0 -0
  244. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/osdu.md +0 -0
  245. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/pad-summary.md +0 -0
  246. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/patches.md +0 -0
  247. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/penetrator.md +0 -0
  248. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/plan.md +0 -0
  249. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/plume.md +0 -0
  250. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/pore-pressure.md +0 -0
  251. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/ppdm.md +0 -0
  252. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/quakeml.md +0 -0
  253. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/quality.md +0 -0
  254. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/records.md +0 -0
  255. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/report-history.md +0 -0
  256. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/rig-time.md +0 -0
  257. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/rocks.md +0 -0
  258. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/seedlink.md +0 -0
  259. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/seismic.md +0 -0
  260. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/setup.md +0 -0
  261. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/simulation.md +0 -0
  262. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/site.md +0 -0
  263. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/sites.md +0 -0
  264. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/slip.md +0 -0
  265. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/soak.md +0 -0
  266. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/sra.md +0 -0
  267. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/start.md +0 -0
  268. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/structure.md +0 -0
  269. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/tools.md +0 -0
  270. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/torque-drag.md +0 -0
  271. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/transients.md +0 -0
  272. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/tutorial/02-sign-in.md +0 -0
  273. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/tutorial/03-site.md +0 -0
  274. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/tutorial/04-add-well.md +0 -0
  275. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/tutorial/05-records.md +0 -0
  276. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/tutorial/06-well-page.md +0 -0
  277. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/tutorial/07-declare.md +0 -0
  278. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/tutorial/08-patches.md +0 -0
  279. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/tutorial/09-alarms.md +0 -0
  280. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/tutorial/10-control-room.md +0 -0
  281. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/tutorial/11-summary-month.md +0 -0
  282. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/tutorial/12-where-the-well-is.md +0 -0
  283. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/tutorial/14-production-pages.md +0 -0
  284. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/tutorial/15-seismic.md +0 -0
  285. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/tutorial/16-seismicity.md +0 -0
  286. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/tutorial/17-recorder-office.md +0 -0
  287. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/tutorial/18-reports.md +0 -0
  288. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/tutorial/21-upkeep.md +0 -0
  289. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/tutorial/24-the-box.md +0 -0
  290. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/tutorial/26-monitor.md +0 -0
  291. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/tutorial/27-mirror-vpn.md +0 -0
  292. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/tutorial/28-driller-office.md +0 -0
  293. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/upkeep.md +0 -0
  294. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/vibration.md +0 -0
  295. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/vpn.md +0 -0
  296. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/well-report.md +0 -0
  297. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/well-tests.md +0 -0
  298. {gea_program-0.88.0 → gea_program-0.90.0}/gea/help/well3d.md +0 -0
  299. {gea_program-0.88.0 → gea_program-0.90.0}/gea/housekeeping.py +0 -0
  300. {gea_program-0.88.0 → gea_program-0.90.0}/gea/hydraulics.py +0 -0
  301. {gea_program-0.88.0 → gea_program-0.90.0}/gea/icon.py +0 -0
  302. {gea_program-0.88.0 → gea_program-0.90.0}/gea/interval.py +0 -0
  303. {gea_program-0.88.0 → gea_program-0.90.0}/gea/inverse_engine.py +0 -0
  304. {gea_program-0.88.0 → gea_program-0.90.0}/gea/invoice_check.py +0 -0
  305. {gea_program-0.88.0 → gea_program-0.90.0}/gea/jobs.py +0 -0
  306. {gea_program-0.88.0 → gea_program-0.90.0}/gea/launcher.py +0 -0
  307. {gea_program-0.88.0 → gea_program-0.90.0}/gea/live_ports.py +0 -0
  308. {gea_program-0.88.0 → gea_program-0.90.0}/gea/loadtest.py +0 -0
  309. {gea_program-0.88.0 → gea_program-0.90.0}/gea/matplotlib_demo.py +0 -0
  310. {gea_program-0.88.0 → gea_program-0.90.0}/gea/modbus.py +0 -0
  311. {gea_program-0.88.0 → gea_program-0.90.0}/gea/modbus_rtu.py +0 -0
  312. {gea_program-0.88.0 → gea_program-0.90.0}/gea/model_card.py +0 -0
  313. {gea_program-0.88.0 → gea_program-0.90.0}/gea/month_end.py +0 -0
  314. {gea_program-0.88.0 → gea_program-0.90.0}/gea/mqtt_port.py +0 -0
  315. {gea_program-0.88.0 → gea_program-0.90.0}/gea/notify.py +0 -0
  316. {gea_program-0.88.0 → gea_program-0.90.0}/gea/oidc.py +0 -0
  317. {gea_program-0.88.0 → gea_program-0.90.0}/gea/oidc_mock.py +0 -0
  318. {gea_program-0.88.0 → gea_program-0.90.0}/gea/op_seismicity.py +0 -0
  319. {gea_program-0.88.0 → gea_program-0.90.0}/gea/opcua_port.py +0 -0
  320. {gea_program-0.88.0 → gea_program-0.90.0}/gea/operator_app.py +0 -0
  321. {gea_program-0.88.0 → gea_program-0.90.0}/gea/osdu.py +0 -0
  322. {gea_program-0.88.0 → gea_program-0.90.0}/gea/pad_summary.py +0 -0
  323. {gea_program-0.88.0 → gea_program-0.90.0}/gea/patches.py +0 -0
  324. {gea_program-0.88.0 → gea_program-0.90.0}/gea/pdf_report.py +0 -0
  325. {gea_program-0.88.0 → gea_program-0.90.0}/gea/penetrator.py +0 -0
  326. {gea_program-0.88.0 → gea_program-0.90.0}/gea/permits.py +0 -0
  327. {gea_program-0.88.0 → gea_program-0.90.0}/gea/piwebapi.py +0 -0
  328. {gea_program-0.88.0 → gea_program-0.90.0}/gea/plume.py +0 -0
  329. {gea_program-0.88.0 → gea_program-0.90.0}/gea/pore_pressure.py +0 -0
  330. {gea_program-0.88.0 → gea_program-0.90.0}/gea/ports.py +0 -0
  331. {gea_program-0.88.0 → gea_program-0.90.0}/gea/ppdm.py +0 -0
  332. {gea_program-0.88.0 → gea_program-0.90.0}/gea/profile_catalog.py +0 -0
  333. {gea_program-0.88.0 → gea_program-0.90.0}/gea/project.py +0 -0
  334. {gea_program-0.88.0 → gea_program-0.90.0}/gea/qt6_downhole_app.py +0 -0
  335. {gea_program-0.88.0 → gea_program-0.90.0}/gea/quakeml.py +0 -0
  336. {gea_program-0.88.0 → gea_program-0.90.0}/gea/reader.py +0 -0
  337. {gea_program-0.88.0 → gea_program-0.90.0}/gea/reader_app.py +0 -0
  338. {gea_program-0.88.0 → gea_program-0.90.0}/gea/reconciler.py +0 -0
  339. {gea_program-0.88.0 → gea_program-0.90.0}/gea/recorder_link.py +0 -0
  340. {gea_program-0.88.0 → gea_program-0.90.0}/gea/reference/IU_ANMO_10_BHZ_response.provenance.json +0 -0
  341. {gea_program-0.88.0 → gea_program-0.90.0}/gea/reference/IU_ANMO_10_BHZ_response.xml +0 -0
  342. {gea_program-0.88.0 → gea_program-0.90.0}/gea/reference/WMM2025.COF +0 -0
  343. {gea_program-0.88.0 → gea_program-0.90.0}/gea/reference/eia_henry_hub_daily.csv.gz +0 -0
  344. {gea_program-0.88.0 → gea_program-0.90.0}/gea/reference/eia_prices.provenance.json +0 -0
  345. {gea_program-0.88.0 → gea_program-0.90.0}/gea/reference/eia_wti_daily.csv.gz +0 -0
  346. {gea_program-0.88.0 → gea_program-0.90.0}/gea/reference/iscwsa_rev4_example.json +0 -0
  347. {gea_program-0.88.0 → gea_program-0.90.0}/gea/reference/iscwsa_rev5_example.json +0 -0
  348. {gea_program-0.88.0 → gea_program-0.90.0}/gea/reference/l0701_sonic_gr.las.gz +0 -0
  349. {gea_program-0.88.0 → gea_program-0.90.0}/gea/reference/l0701_sonic_gr.provenance.json +0 -0
  350. {gea_program-0.88.0 → gea_program-0.90.0}/gea/reference/libmseed_steim.provenance.json +0 -0
  351. {gea_program-0.88.0 → gea_program-0.90.0}/gea/reference/libmseed_steim1_4096.mseed +0 -0
  352. {gea_program-0.88.0 → gea_program-0.90.0}/gea/reference/libmseed_steim2_4096.mseed +0 -0
  353. {gea_program-0.88.0 → gea_program-0.90.0}/gea/reference/libmseed_steim2_512.mseed +0 -0
  354. {gea_program-0.88.0 → gea_program-0.90.0}/gea/reference/mahoning_example.json +0 -0
  355. {gea_program-0.88.0 → gea_program-0.90.0}/gea/reference/mud_motor_specs.json +0 -0
  356. {gea_program-0.88.0 → gea_program-0.90.0}/gea/reference/owsg_tool_models.json +0 -0
  357. {gea_program-0.88.0 → gea_program-0.90.0}/gea/reference/penetrator_ratings.json +0 -0
  358. {gea_program-0.88.0 → gea_program-0.90.0}/gea/reference/seismicity_protocols.json +0 -0
  359. {gea_program-0.88.0 → gea_program-0.90.0}/gea/reference/tool_sources.json +0 -0
  360. {gea_program-0.88.0 → gea_program-0.90.0}/gea/reference/us_outline.json +0 -0
  361. {gea_program-0.88.0 → gea_program-0.90.0}/gea/reference/us_outline.provenance.json +0 -0
  362. {gea_program-0.88.0 → gea_program-0.90.0}/gea/reference/volve_3d.provenance.json +0 -0
  363. {gea_program-0.88.0 → gea_program-0.90.0}/gea/reference/volve_f4_interpretation.las.gz +0 -0
  364. {gea_program-0.88.0 → gea_program-0.90.0}/gea/reference/volve_f4_logs.provenance.json +0 -0
  365. {gea_program-0.88.0 → gea_program-0.90.0}/gea/reference/volve_f4_lwd.las.gz +0 -0
  366. {gea_program-0.88.0 → gea_program-0.90.0}/gea/reference/volve_surfaces.json.gz +0 -0
  367. {gea_program-0.88.0 → gea_program-0.90.0}/gea/reference/volve_traj_F-10.xml.gz +0 -0
  368. {gea_program-0.88.0 → gea_program-0.90.0}/gea/reference/volve_traj_F-4.xml.gz +0 -0
  369. {gea_program-0.88.0 → gea_program-0.90.0}/gea/reference/volve_traj_F-5_12.25in.xml.gz +0 -0
  370. {gea_program-0.88.0 → gea_program-0.90.0}/gea/reference/volve_traj_F-5_17.5in.xml.gz +0 -0
  371. {gea_program-0.88.0 → gea_program-0.90.0}/gea/reference/volve_traj_F-5_36in.xml.gz +0 -0
  372. {gea_program-0.88.0 → gea_program-0.90.0}/gea/reference/volve_traj_F-5_8.5in.xml.gz +0 -0
  373. {gea_program-0.88.0 → gea_program-0.90.0}/gea/reference/volve_well_picks.csv.gz +0 -0
  374. {gea_program-0.88.0 → gea_program-0.90.0}/gea/report_history.py +0 -0
  375. {gea_program-0.88.0 → gea_program-0.90.0}/gea/rock_inventory.py +0 -0
  376. {gea_program-0.88.0 → gea_program-0.90.0}/gea/sample_record.py +0 -0
  377. {gea_program-0.88.0 → gea_program-0.90.0}/gea/sample_well_profile.csv +0 -0
  378. {gea_program-0.88.0 → gea_program-0.90.0}/gea/sbom.py +0 -0
  379. {gea_program-0.88.0 → gea_program-0.90.0}/gea/seedlink.py +0 -0
  380. {gea_program-0.88.0 → gea_program-0.90.0}/gea/segy.py +0 -0
  381. {gea_program-0.88.0 → gea_program-0.90.0}/gea/seismic.py +0 -0
  382. {gea_program-0.88.0 → gea_program-0.90.0}/gea/seismic_array.py +0 -0
  383. {gea_program-0.88.0 → gea_program-0.90.0}/gea/seismic_assoc.py +0 -0
  384. {gea_program-0.88.0 → gea_program-0.90.0}/gea/seismic_detect.py +0 -0
  385. {gea_program-0.88.0 → gea_program-0.90.0}/gea/seismic_film.py +0 -0
  386. {gea_program-0.88.0 → gea_program-0.90.0}/gea/seismic_harmonic.py +0 -0
  387. {gea_program-0.88.0 → gea_program-0.90.0}/gea/seismic_qc.py +0 -0
  388. {gea_program-0.88.0 → gea_program-0.90.0}/gea/seismic_response.py +0 -0
  389. {gea_program-0.88.0 → gea_program-0.90.0}/gea/seismic_signature.py +0 -0
  390. {gea_program-0.88.0 → gea_program-0.90.0}/gea/seismic_track.py +0 -0
  391. {gea_program-0.88.0 → gea_program-0.90.0}/gea/seismic_uncertainty.py +0 -0
  392. {gea_program-0.88.0 → gea_program-0.90.0}/gea/seismic_unlisted.py +0 -0
  393. {gea_program-0.88.0 → gea_program-0.90.0}/gea/seismic_watch.py +0 -0
  394. {gea_program-0.88.0 → gea_program-0.90.0}/gea/sensor_swap.py +0 -0
  395. {gea_program-0.88.0 → gea_program-0.90.0}/gea/series_cache.py +0 -0
  396. {gea_program-0.88.0 → gea_program-0.90.0}/gea/service_life.py +0 -0
  397. {gea_program-0.88.0 → gea_program-0.90.0}/gea/setup_checklist.py +0 -0
  398. {gea_program-0.88.0 → gea_program-0.90.0}/gea/shapefile.py +0 -0
  399. {gea_program-0.88.0 → gea_program-0.90.0}/gea/shell.py +0 -0
  400. {gea_program-0.88.0 → gea_program-0.90.0}/gea/shut_in.py +0 -0
  401. {gea_program-0.88.0 → gea_program-0.90.0}/gea/simulation.py +0 -0
  402. {gea_program-0.88.0 → gea_program-0.90.0}/gea/site_map.py +0 -0
  403. {gea_program-0.88.0 → gea_program-0.90.0}/gea/sla_report.py +0 -0
  404. {gea_program-0.88.0 → gea_program-0.90.0}/gea/slip.py +0 -0
  405. {gea_program-0.88.0 → gea_program-0.90.0}/gea/soak.py +0 -0
  406. {gea_program-0.88.0 → gea_program-0.90.0}/gea/sra.py +0 -0
  407. {gea_program-0.88.0 → gea_program-0.90.0}/gea/store_forward.py +0 -0
  408. {gea_program-0.88.0 → gea_program-0.90.0}/gea/strata_join.py +0 -0
  409. {gea_program-0.88.0 → gea_program-0.90.0}/gea/structure.py +0 -0
  410. {gea_program-0.88.0 → gea_program-0.90.0}/gea/supervisor.py +0 -0
  411. {gea_program-0.88.0 → gea_program-0.90.0}/gea/survey_cmd.py +0 -0
  412. {gea_program-0.88.0 → gea_program-0.90.0}/gea/survey_view.py +0 -0
  413. {gea_program-0.88.0 → gea_program-0.90.0}/gea/telemetry.py +0 -0
  414. {gea_program-0.88.0 → gea_program-0.90.0}/gea/timestamp.py +0 -0
  415. {gea_program-0.88.0 → gea_program-0.90.0}/gea/tls.py +0 -0
  416. {gea_program-0.88.0 → gea_program-0.90.0}/gea/tool_catalog.py +0 -0
  417. {gea_program-0.88.0 → gea_program-0.90.0}/gea/tool_library.py +0 -0
  418. {gea_program-0.88.0 → gea_program-0.90.0}/gea/tool_taxonomy.py +0 -0
  419. {gea_program-0.88.0 → gea_program-0.90.0}/gea/torque_drag.py +0 -0
  420. {gea_program-0.88.0 → gea_program-0.90.0}/gea/transient.py +0 -0
  421. {gea_program-0.88.0 → gea_program-0.90.0}/gea/tray.py +0 -0
  422. {gea_program-0.88.0 → gea_program-0.90.0}/gea/tutorial.py +0 -0
  423. {gea_program-0.88.0 → gea_program-0.90.0}/gea/updates.py +0 -0
  424. {gea_program-0.88.0 → gea_program-0.90.0}/gea/vibration.py +0 -0
  425. {gea_program-0.88.0 → gea_program-0.90.0}/gea/vpn.py +0 -0
  426. {gea_program-0.88.0 → gea_program-0.90.0}/gea/web/reader.html +0 -0
  427. {gea_program-0.88.0 → gea_program-0.90.0}/gea/well3d.py +0 -0
  428. {gea_program-0.88.0 → gea_program-0.90.0}/gea/well_assembler.py +0 -0
  429. {gea_program-0.88.0 → gea_program-0.90.0}/gea/well_records.py +0 -0
  430. {gea_program-0.88.0 → gea_program-0.90.0}/gea/well_report.py +0 -0
  431. {gea_program-0.88.0 → gea_program-0.90.0}/gea/well_test_validation.py +0 -0
  432. {gea_program-0.88.0 → gea_program-0.90.0}/gea/wellplan.py +0 -0
  433. {gea_program-0.88.0 → gea_program-0.90.0}/gea/wellpos.py +0 -0
  434. {gea_program-0.88.0 → gea_program-0.90.0}/gea/winident.py +0 -0
  435. {gea_program-0.88.0 → gea_program-0.90.0}/gea/wits0.py +0 -0
  436. {gea_program-0.88.0 → gea_program-0.90.0}/gea/witsml.py +0 -0
  437. {gea_program-0.88.0 → gea_program-0.90.0}/gea/workspace.py +0 -0
  438. {gea_program-0.88.0 → gea_program-0.90.0}/gea/workspaces.py +0 -0
  439. {gea_program-0.88.0 → gea_program-0.90.0}/gea/x25519.py +0 -0
  440. {gea_program-0.88.0 → gea_program-0.90.0}/gea/xlsx_read.py +0 -0
  441. {gea_program-0.88.0 → gea_program-0.90.0}/gea_program.egg-info/dependency_links.txt +0 -0
  442. {gea_program-0.88.0 → gea_program-0.90.0}/gea_program.egg-info/entry_points.txt +0 -0
  443. {gea_program-0.88.0 → gea_program-0.90.0}/gea_program.egg-info/requires.txt +0 -0
  444. {gea_program-0.88.0 → gea_program-0.90.0}/gea_program.egg-info/top_level.txt +0 -0
  445. {gea_program-0.88.0 → gea_program-0.90.0}/setup.cfg +0 -0
  446. {gea_program-0.88.0 → gea_program-0.90.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.88.0
3
+ Version: 0.90.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.88.0.exe`: GEA
850
+ it installed, every release also carries `GEA-Reader-Setup-0.90.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`.
@@ -1053,6 +1053,83 @@ followed. The thresholds are settings, each changed with its source. On a
1053
1053
  record still being written an event raises an alert once. The **Drilling
1054
1054
  alerts** tab, `gea dysfunction`, `gea help dysfunction`.
1055
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
+
1076
+ ### Benchmark
1077
+
1078
+ The wells of a pad against one another, and each against the best the pad
1079
+ has done. Every well with a drilling record is measured the same way from
1080
+ its own record - the footage, the days from its first stand to its last,
1081
+ feet per day, the rate on bottom, rotary and sliding, the median connection
1082
+ weight to weight, the trip speeds - and ranked on each count. Then each
1083
+ well is set against the pad's best: the well it would have been had every
1084
+ stretch of hole been drilled at the rate of whichever well was fastest
1085
+ through that stretch (300 ft or more of it), and every connection made in
1086
+ the pad's best quarter. The gap is hours the pad has already shown can be
1087
+ saved, on some well in that stretch - not a forecast, and not a cause: the
1088
+ bit, the motor, the mud and the hole size are not in the record. The
1089
+ **Benchmark** tab, `gea benchmark`, `gea help benchmark`; an assistant
1090
+ reads it as the `benchmark` tool.
1091
+
1092
+ ### Public data: a real pad
1093
+
1094
+ A pad anyone may check. The Utah FORGE project - the U.S. Department of
1095
+ Energy's geothermal field laboratory near Milford, Utah - publishes the
1096
+ rig recorders of five wells drilled through the same basin fill and
1097
+ granite between 2017 and 2023, under Creative Commons Attribution 4.0.
1098
+ `gea public-pad` turns those files into a site of its own, so the rig
1099
+ time, the roadmap, the drilling alerts and the benchmark run on real
1100
+ records before any client's. The program does not contain the files and
1101
+ does not fetch them: the site downloads them in a browser from the
1102
+ Geothermal Data Repository, names the folder, and the program checks each
1103
+ file against the size and the SHA-256 it had when this release was checked
1104
+ with it, converts the three layouts that are not the recorder's own
1105
+ export, attaches each well, and keeps on the record what was done to
1106
+ each - 16A(78)-32's bit depth is RECONSTRUCTED from the block and the
1107
+ slips and is marked so on every page. Every page and report of that site
1108
+ ends with the credit the licence asks for.
1109
+
1110
+ What this release made of them, on the five files as published:
1111
+
1112
+ | Well | Drilled, ft | Days | ft/day | On bottom, ft/h | Median connection, min |
1113
+ |---|---|---|---|---|---|
1114
+ | 58-32 (2017) | 6,288 | 43.5 | 145 | 15.9 | 14.4 |
1115
+ | 16A(78)-32 (2020) | 11,035 | 67.8 | 163 | 34.4 | 11.3 |
1116
+ | 56-32 (2021) | 9,232 | 19.0 | 487 | 46.6 | 7.5 |
1117
+ | 78B-32 (2021) | 9,372 | 29.1 | 322 | 84.7 | 7.7 |
1118
+ | 16B(78)-32 (2023) | 10,490 | 52.4 | 200 | 45.7 | 10.2 |
1119
+
1120
+ Against the pad's best the five wells spent 812 of their 1,256 on-bottom
1121
+ hours beyond it. The roadmap's own check on them is split - running nearer
1122
+ the window was the faster half on two wells and the slower on two - which
1123
+ is the page saying, of wells drilled six years apart in three hole sizes,
1124
+ that one well's parameters are not the next well's roadmap. The drilling
1125
+ alerts, replayed, find 27 motor stalls on the three wells whose records
1126
+ can show one, three falls in off-bottom pressure on 78B-32 that no trip followed
1127
+ and one on 58-32 that a trip out of the hole followed within twelve hours.
1128
+ Data: Utah FORGE, Energy & Geoscience Institute at the University of Utah,
1129
+ funded by the U.S. Department of Energy; Geothermal Data Repository,
1130
+ gdr.openei.org; CC BY 4.0. The **Public data** tab, `gea public-pad`,
1131
+ `gea help public-data`.
1132
+
1056
1133
  ### Plan vs actual and the survey tools
1057
1134
 
1058
1135
  Each well against its directional plan: at every survey station, how far
@@ -1717,7 +1794,7 @@ attaches the zips to the GitHub release of that tag.
1717
1794
 
1718
1795
  ### The Windows installer
1719
1796
 
1720
- Every release also carries `GEA-Program-Setup-0.88.0.exe` (for 0.88.0): the
1797
+ Every release also carries `GEA-Program-Setup-0.90.0.exe` (for 0.90.0): the
1721
1798
  same Windows kit installed like any Windows program, for the signed-in user
1722
1799
  alone and with no administrator rights (`%LOCALAPPDATA%\Programs\GEA-Program`).
1723
1800
  It asks for the site workspace (an existing one such as `C:\site` is used as
@@ -1736,7 +1813,7 @@ it, removes the program and leaves the workspace. Silent, for a site's
1736
1813
  software deployment:
1737
1814
 
1738
1815
  ```
1739
- GEA-Program-Setup-0.88.0.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /WORKSPACE="C:\site" /SITENAME="Pad 3" /TASKS="desktopicon"
1816
+ GEA-Program-Setup-0.90.0.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /WORKSPACE="C:\site" /SITENAME="Pad 3" /TASKS="desktopicon"
1740
1817
  ```
1741
1818
 
1742
1819
  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.88.0.exe`: GEA
811
+ it installed, every release also carries `GEA-Reader-Setup-0.90.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`.
@@ -1014,6 +1014,83 @@ followed. The thresholds are settings, each changed with its source. On a
1014
1014
  record still being written an event raises an alert once. The **Drilling
1015
1015
  alerts** tab, `gea dysfunction`, `gea help dysfunction`.
1016
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
+
1037
+ ### Benchmark
1038
+
1039
+ The wells of a pad against one another, and each against the best the pad
1040
+ has done. Every well with a drilling record is measured the same way from
1041
+ its own record - the footage, the days from its first stand to its last,
1042
+ feet per day, the rate on bottom, rotary and sliding, the median connection
1043
+ weight to weight, the trip speeds - and ranked on each count. Then each
1044
+ well is set against the pad's best: the well it would have been had every
1045
+ stretch of hole been drilled at the rate of whichever well was fastest
1046
+ through that stretch (300 ft or more of it), and every connection made in
1047
+ the pad's best quarter. The gap is hours the pad has already shown can be
1048
+ saved, on some well in that stretch - not a forecast, and not a cause: the
1049
+ bit, the motor, the mud and the hole size are not in the record. The
1050
+ **Benchmark** tab, `gea benchmark`, `gea help benchmark`; an assistant
1051
+ reads it as the `benchmark` tool.
1052
+
1053
+ ### Public data: a real pad
1054
+
1055
+ A pad anyone may check. The Utah FORGE project - the U.S. Department of
1056
+ Energy's geothermal field laboratory near Milford, Utah - publishes the
1057
+ rig recorders of five wells drilled through the same basin fill and
1058
+ granite between 2017 and 2023, under Creative Commons Attribution 4.0.
1059
+ `gea public-pad` turns those files into a site of its own, so the rig
1060
+ time, the roadmap, the drilling alerts and the benchmark run on real
1061
+ records before any client's. The program does not contain the files and
1062
+ does not fetch them: the site downloads them in a browser from the
1063
+ Geothermal Data Repository, names the folder, and the program checks each
1064
+ file against the size and the SHA-256 it had when this release was checked
1065
+ with it, converts the three layouts that are not the recorder's own
1066
+ export, attaches each well, and keeps on the record what was done to
1067
+ each - 16A(78)-32's bit depth is RECONSTRUCTED from the block and the
1068
+ slips and is marked so on every page. Every page and report of that site
1069
+ ends with the credit the licence asks for.
1070
+
1071
+ What this release made of them, on the five files as published:
1072
+
1073
+ | Well | Drilled, ft | Days | ft/day | On bottom, ft/h | Median connection, min |
1074
+ |---|---|---|---|---|---|
1075
+ | 58-32 (2017) | 6,288 | 43.5 | 145 | 15.9 | 14.4 |
1076
+ | 16A(78)-32 (2020) | 11,035 | 67.8 | 163 | 34.4 | 11.3 |
1077
+ | 56-32 (2021) | 9,232 | 19.0 | 487 | 46.6 | 7.5 |
1078
+ | 78B-32 (2021) | 9,372 | 29.1 | 322 | 84.7 | 7.7 |
1079
+ | 16B(78)-32 (2023) | 10,490 | 52.4 | 200 | 45.7 | 10.2 |
1080
+
1081
+ Against the pad's best the five wells spent 812 of their 1,256 on-bottom
1082
+ hours beyond it. The roadmap's own check on them is split - running nearer
1083
+ the window was the faster half on two wells and the slower on two - which
1084
+ is the page saying, of wells drilled six years apart in three hole sizes,
1085
+ that one well's parameters are not the next well's roadmap. The drilling
1086
+ alerts, replayed, find 27 motor stalls on the three wells whose records
1087
+ can show one, three falls in off-bottom pressure on 78B-32 that no trip followed
1088
+ and one on 58-32 that a trip out of the hole followed within twelve hours.
1089
+ Data: Utah FORGE, Energy & Geoscience Institute at the University of Utah,
1090
+ funded by the U.S. Department of Energy; Geothermal Data Repository,
1091
+ gdr.openei.org; CC BY 4.0. The **Public data** tab, `gea public-pad`,
1092
+ `gea help public-data`.
1093
+
1017
1094
  ### Plan vs actual and the survey tools
1018
1095
 
1019
1096
  Each well against its directional plan: at every survey station, how far
@@ -1678,7 +1755,7 @@ attaches the zips to the GitHub release of that tag.
1678
1755
 
1679
1756
  ### The Windows installer
1680
1757
 
1681
- Every release also carries `GEA-Program-Setup-0.88.0.exe` (for 0.88.0): the
1758
+ Every release also carries `GEA-Program-Setup-0.90.0.exe` (for 0.90.0): the
1682
1759
  same Windows kit installed like any Windows program, for the signed-in user
1683
1760
  alone and with no administrator rights (`%LOCALAPPDATA%\Programs\GEA-Program`).
1684
1761
  It asks for the site workspace (an existing one such as `C:\site` is used as
@@ -1697,7 +1774,7 @@ it, removes the program and leaves the workspace. Silent, for a site's
1697
1774
  software deployment:
1698
1775
 
1699
1776
  ```
1700
- GEA-Program-Setup-0.88.0.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /WORKSPACE="C:\site" /SITENAME="Pad 3" /TASKS="desktopicon"
1777
+ GEA-Program-Setup-0.90.0.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /WORKSPACE="C:\site" /SITENAME="Pad 3" /TASKS="desktopicon"
1701
1778
  ```
1702
1779
 
1703
1780
  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.88.0"
126
+ __version__ = "0.90.0"
127
127
  __all__ = [
128
128
  "aging_rate", "rate_psi_yr", "accuracy_psi",
129
129
  "Sensor", "SimulatorConfig", "DownholeEngine",
@@ -677,6 +677,34 @@ def main(argv=None) -> int:
677
677
  p_os.add_argument("--actor", type=str, default="cli")
678
678
  p_os.add_argument("--json", action="store_true")
679
679
 
680
+ p_bm = sub.add_parser("benchmark", help="the wells of a pad against one another: feet per day, on-bottom rate, connections and trips ranked, and each well against the pad's best - every stretch at the rate of the fastest well through it")
681
+ p_bm.add_argument("--workspace", type=str, default=None, help="the workspace folder; without one the self-test runs")
682
+ p_bm.add_argument("--write", action="store_true", help="write reports/benchmark/benchmark.json, .md, .csv and stretches.csv")
683
+ p_bm.add_argument("--actor", type=str, default="cli")
684
+ p_bm.add_argument("--json", action="store_true")
685
+ p_pp = sub.add_parser("public-pad", help="a real pad from public data: the Utah FORGE wells' published rig recorders (CC BY 4.0) made into a site of their own - the files to get and where, checked against their sizes and hashes, converted and attached; the program fetches nothing")
686
+ p_pp.add_argument("--folder", type=str, default=None, help="the folder the downloaded files are in; with nothing else, lists each file and whether it is there. Without a folder the self-test runs (stand-ins in each published layout)")
687
+ p_pp.add_argument("--verify", action="store_true", help="hash each file that is there against the SHA-256 this release was checked with")
688
+ p_pp.add_argument("--build", action="store_true", help="make the site at --site from the files in --folder, or add to it the wells it does not have yet")
689
+ p_pp.add_argument("--site", type=str, default=None, help="--build: the folder the site's workspace is made in")
690
+ p_pp.add_argument("--list", action="store_true", help="list the dataset's files, sizes, hashes and where each is published, and exit")
691
+ p_pp.add_argument("--actor", type=str, default="cli")
692
+ p_pp.add_argument("--json", action="store_true")
693
+ 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")
694
+ 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)")
695
+ p_mc.add_argument("--allow", type=str, default=None, help="serve only these tools this run, comma-separated (never more than the site offers)")
696
+ p_mc.add_argument("--status", action="store_true", help="print the tools offered, how to start the server and the last calls, and exit")
697
+ 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")
698
+ p_mc.add_argument("--call", type=str, default=None, help="call one tool and print its answer, as an assistant would get it")
699
+ p_mc.add_argument("--well", type=str, default=None, help="--call: the well, by name or id")
700
+ p_mc.add_argument("--topic", type=str, default=None, help="--call help: the topic")
701
+ p_mc.add_argument("--json", action="store_true", help="--call: the page as JSON instead of its text")
702
+ p_mc.add_argument("--offer", type=str, default=None, help="settings: the tools the site offers, comma-separated (all: every tool)")
703
+ p_mc.add_argument("--max-chars", type=int, default=None, help="settings: the most characters one answer carries (default 40000)")
704
+ p_mc.add_argument("--source", type=str, default="", help="settings: who decided, and on what grounds")
705
+ 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")
706
+ p_mc.add_argument("--remove-from-claude-desktop", action="store_true", help="take it out again")
707
+ p_mc.add_argument("--actor", type=str, default="cli")
680
708
  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")
681
709
  p_al.add_argument("--workspace", type=str, required=True)
682
710
  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")
@@ -3560,6 +3588,102 @@ def main(argv=None) -> int:
3560
3588
  for v in f_["versions"][: (50 if a.family else 3)]:
3561
3589
  print(f" {v['utc']} {v.get('report_id') or ''} reports/{v['dir']}")
3562
3590
  return 0
3591
+ elif a.cmd == "benchmark":
3592
+ import json as _json
3593
+ from . import benchmark as _BM
3594
+ from .cli import _safe_stdout
3595
+ from .workspace import Workspace, WorkspaceError
3596
+ _safe_stdout()
3597
+ if not a.workspace:
3598
+ r = _BM.selftest()
3599
+ 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']}")
3600
+ return 0 if r["ok"] else 1
3601
+ try:
3602
+ ws = Workspace(a.workspace)
3603
+ if a.write:
3604
+ from . import __version__ as _ver90b
3605
+ r = _BM.write_report(ws, _ver90b, a.actor)
3606
+ print(f"written: {', '.join(r['files'])} under {r['folder']}")
3607
+ p = _BM.page(ws)
3608
+ except (_BM.BenchmarkError, WorkspaceError, ValueError, OSError) as e:
3609
+ raise SystemExit(f"benchmark: {e.args[0] if e.args else e}")
3610
+ print(_json.dumps(p, default=str) if a.json else _BM.text(p))
3611
+ return 0
3612
+ elif a.cmd == "public-pad":
3613
+ import json as _json
3614
+ from . import public_pad as _PP
3615
+ from .cli import _safe_stdout
3616
+ _safe_stdout()
3617
+ if not a.folder and not a.list:
3618
+ r = _PP.selftest()
3619
+ 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']}")
3620
+ return 0 if r["ok"] else 1
3621
+ try:
3622
+ if a.build:
3623
+ if not a.site:
3624
+ raise SystemExit("public-pad: --build needs --site, the folder the site is made in")
3625
+ last_ = {"t": ""}
3626
+
3627
+ def say_(d_):
3628
+ t_ = f"{d_.get('well', '')} {d_.get('step', '')}".strip()
3629
+ if t_ != last_["t"] and d_.get("step") != "done":
3630
+ last_["t"] = t_
3631
+ print(f" {d_.get('n', '')}/{d_.get('of', '')} {t_}", flush=True)
3632
+ r = _PP.build(a.folder, a.site, a.actor, verify=True, progress=say_)
3633
+ print(f"{r['name']} at {r['path']}: " + (f"added {', '.join(r['added'])}" if r["added"] else "nothing to add") + f"; it has {', '.join(r['wells'])}")
3634
+ for e_ in r["record"]["wells"]:
3635
+ for n_ in e_["notes"]:
3636
+ print(f" {e_['well']}: {n_}")
3637
+ return 0
3638
+ s_ = _PP.status(a.folder or "", verify=a.verify)
3639
+ except (_PP.PublicPadError, OSError) as e:
3640
+ raise SystemExit(f"public-pad: {e.args[0] if e.args else e}")
3641
+ print(_json.dumps(s_, default=str) if a.json else _PP.text(s_))
3642
+ return 0
3643
+ elif a.cmd == "mcp":
3644
+ import json as _json
3645
+ from . import mcp_server as _MC
3646
+ from .workspace import Workspace, WorkspaceError
3647
+ allow_ = [t_.strip() for t_ in a.allow.split(",") if t_.strip()] if a.allow else None
3648
+ if not a.workspace:
3649
+ r = _MC.selftest()
3650
+ 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']}")
3651
+ return 0 if r["ok"] else 1
3652
+ try:
3653
+ ws = Workspace(a.workspace)
3654
+ except WorkspaceError as e:
3655
+ print(f"mcp: {e}", file=sys.stderr) # the error stream: standard output is the protocol's
3656
+ return 2
3657
+ 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):
3658
+ return _MC.serve(ws, allow=allow_) # the server: nothing but protocol messages on standard output
3659
+ from .cli import _safe_stdout
3660
+ _safe_stdout()
3661
+ try:
3662
+ if a.offer or a.max_chars is not None:
3663
+ 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)
3664
+ print(f"offered: {', '.join(_MC.offered(ws))}; an answer carries {st_['max_chars']:,} characters at most")
3665
+ if a.add_to_claude_desktop or a.remove_from_claude_desktop:
3666
+ r = _MC.install_claude_desktop(ws, a.actor, remove=a.remove_from_claude_desktop)
3667
+ for d_ in r["done"]:
3668
+ 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")
3669
+ for d_ in r["skipped"]:
3670
+ print(f"not changed: {d_['path']} - {d_['why']}")
3671
+ if a.config:
3672
+ print(_json.dumps(_MC.client_config(ws.path, allow_), indent=2))
3673
+ if a.call:
3674
+ if a.call not in _MC.offered(ws, allow_):
3675
+ raise SystemExit(f"mcp: no tool {a.call!r} is offered; offered: {', '.join(_MC.offered(ws, allow_))}")
3676
+ args_ = {k: v for k, v in (("well", a.well), ("topic", a.topic)) if v is not None}
3677
+ if a.json:
3678
+ args_["json"] = True
3679
+ r = _MC.call_tool(ws, a.call, args_, _MC.settings(ws)["max_chars"])
3680
+ print(r["text"])
3681
+ return 1 if r["is_error"] else 0
3682
+ if a.status:
3683
+ print(_MC.text(_MC.page(ws)))
3684
+ except (_MC.ToolError, WorkspaceError, OSError) as e:
3685
+ raise SystemExit(f"mcp: {e.args[0] if e.args else e}")
3686
+ return 0
3563
3687
  elif a.cmd == "alerts":
3564
3688
  import json as _json
3565
3689
  from . import alerts as _AL