MProcs 9.0__tar.gz → 9.1__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 (229) hide show
  1. {mprocs-9.0/src/MProcs.egg-info → mprocs-9.1}/PKG-INFO +5 -5
  2. {mprocs-9.0 → mprocs-9.1}/README.md +4 -4
  3. {mprocs-9.0 → mprocs-9.1}/pyproject.toml +2 -2
  4. {mprocs-9.0 → mprocs-9.1}/src/MProcs/__init__.py +1 -1
  5. {mprocs-9.0 → mprocs-9.1}/src/MProcs/scripts/tui.py +292 -103
  6. {mprocs-9.0 → mprocs-9.1}/src/MProcs/scripts/version_checker.py +1 -1
  7. {mprocs-9.0 → mprocs-9.1/src/MProcs.egg-info}/PKG-INFO +5 -5
  8. {mprocs-9.0 → mprocs-9.1}/LICENSE +0 -0
  9. {mprocs-9.0 → mprocs-9.1}/MANIFEST.in +0 -0
  10. {mprocs-9.0 → mprocs-9.1}/setup.cfg +0 -0
  11. {mprocs-9.0 → mprocs-9.1}/src/MProcs/__main__.py +0 -0
  12. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/__init__.py +0 -0
  13. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/LICENSE +0 -0
  14. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/__init__.py +0 -0
  15. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/__init__.py +0 -0
  16. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/agent.py +0 -0
  17. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/ai_image.py +0 -0
  18. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/data/acadlist.json +0 -0
  19. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/data/ahb.json +0 -0
  20. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/data/bible1.json +0 -0
  21. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/data/biology1.json +0 -0
  22. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/data/chemistry1.json +0 -0
  23. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/data/chi_chars.json +0 -0
  24. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/data/degrees1.json +0 -0
  25. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/data/dhammapada1.json +0 -0
  26. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/data/diction.json +0 -0
  27. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/data/fcci.json +0 -0
  28. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/data/hospitals.json +0 -0
  29. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/data/jamo.json +0 -0
  30. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/data/katakana.json +0 -0
  31. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/data/koran1.json +0 -0
  32. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/data/legal_terms1.json +0 -0
  33. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/data/lexicon.json +0 -0
  34. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/data/medicals1.json +0 -0
  35. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/data/mims.json +0 -0
  36. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/data/proverbs.json +0 -0
  37. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/data/psychology1.json +0 -0
  38. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/data/science1.json +0 -0
  39. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/data/strains.json +0 -0
  40. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/data/themed/acadlist.json +0 -0
  41. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/data/themed/ahb.json +0 -0
  42. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/data/themed/bible1.json +0 -0
  43. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/data/themed/biology1.json +0 -0
  44. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/data/themed/chemistry1.json +0 -0
  45. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/data/themed/chi_chars.json +0 -0
  46. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/data/themed/degrees1.json +0 -0
  47. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/data/themed/dhammapada1.json +0 -0
  48. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/data/themed/diction.json +0 -0
  49. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/data/themed/fcci.json +0 -0
  50. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/data/themed/hospitals.json +0 -0
  51. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/data/themed/jamo.json +0 -0
  52. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/data/themed/katakana.json +0 -0
  53. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/data/themed/koran1.json +0 -0
  54. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/data/themed/legal_terms1.json +0 -0
  55. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/data/themed/medicals1.json +0 -0
  56. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/data/themed/mims.json +0 -0
  57. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/data/themed/proverbs.json +0 -0
  58. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/data/themed/psychology1.json +0 -0
  59. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/data/themed/science1.json +0 -0
  60. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/data/themed/strains.json +0 -0
  61. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/data/themed/tracks.json +0 -0
  62. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/data/themed/verses1.json +0 -0
  63. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/data/tracks.json +0 -0
  64. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/data/verses1.json +0 -0
  65. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/data_loader.py +0 -0
  66. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/deepseek_ai.py +0 -0
  67. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/drills.py +0 -0
  68. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/ghostwrite.py +0 -0
  69. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/gwf.py +0 -0
  70. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/keys.py +0 -0
  71. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/lexicon.py +0 -0
  72. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/lpro.py +0 -0
  73. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/lpro_s.py +0 -0
  74. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/main.py +0 -0
  75. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/ops.py +0 -0
  76. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/program.py +0 -0
  77. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/scmpy.py +0 -0
  78. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/session.py +0 -0
  79. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/theme.py +0 -0
  80. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/tui.py +0 -0
  81. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/version_checker.py +0 -0
  82. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/flu0/scripts/wrappers.py +0 -0
  83. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/LICENSE +0 -0
  84. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/__init__.py +0 -0
  85. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/__init__.py +0 -0
  86. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/agent.py +0 -0
  87. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/ai_image.py +0 -0
  88. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/data/acadlist.json +0 -0
  89. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/data/ahb.json +0 -0
  90. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/data/bible1.json +0 -0
  91. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/data/biology1.json +0 -0
  92. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/data/chemistry1.json +0 -0
  93. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/data/chi_chars.json +0 -0
  94. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/data/degrees1.json +0 -0
  95. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/data/dhammapada1.json +0 -0
  96. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/data/diction.json +0 -0
  97. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/data/fcci.json +0 -0
  98. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/data/hospitals.json +0 -0
  99. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/data/jamo.json +0 -0
  100. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/data/katakana.json +0 -0
  101. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/data/koran1.json +0 -0
  102. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/data/legal_terms1.json +0 -0
  103. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/data/medicals1.json +0 -0
  104. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/data/mims.json +0 -0
  105. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/data/proverbs.json +0 -0
  106. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/data/psychology1.json +0 -0
  107. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/data/science1.json +0 -0
  108. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/data/strains.json +0 -0
  109. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/data/themed/acadlist.json +0 -0
  110. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/data/themed/ahb.json +0 -0
  111. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/data/themed/bible1.json +0 -0
  112. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/data/themed/biology1.json +0 -0
  113. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/data/themed/chemistry1.json +0 -0
  114. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/data/themed/chi_chars.json +0 -0
  115. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/data/themed/degrees1.json +0 -0
  116. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/data/themed/dhammapada1.json +0 -0
  117. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/data/themed/diction.json +0 -0
  118. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/data/themed/fcci.json +0 -0
  119. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/data/themed/hospitals.json +0 -0
  120. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/data/themed/jamo.json +0 -0
  121. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/data/themed/katakana.json +0 -0
  122. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/data/themed/koran1.json +0 -0
  123. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/data/themed/legal_terms1.json +0 -0
  124. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/data/themed/medicals1.json +0 -0
  125. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/data/themed/mims.json +0 -0
  126. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/data/themed/proverbs.json +0 -0
  127. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/data/themed/psychology1.json +0 -0
  128. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/data/themed/science1.json +0 -0
  129. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/data/themed/strains.json +0 -0
  130. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/data/themed/tracks.json +0 -0
  131. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/data/themed/verses1.json +0 -0
  132. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/data/tracks.json +0 -0
  133. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/data/verses1.json +0 -0
  134. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/data_loader.py +0 -0
  135. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/deepseek_ai.py +0 -0
  136. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/gwf.py +0 -0
  137. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/keys.py +0 -0
  138. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/lpro.py +0 -0
  139. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/lpro_s.py +0 -0
  140. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/main.py +0 -0
  141. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/scmpy.py +0 -0
  142. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/session.py +0 -0
  143. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/theme.py +0 -0
  144. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/tui.py +0 -0
  145. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/version_checker.py +0 -0
  146. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/hmptunnel/scripts/wrappers.py +0 -0
  147. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/polyhistor/LICENSE +0 -0
  148. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/polyhistor/__init__.py +0 -0
  149. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/polyhistor/__main__.py +0 -0
  150. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/polyhistor/agent.py +0 -0
  151. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/polyhistor/app.py +0 -0
  152. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/polyhistor/content/__init__.py +0 -0
  153. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/polyhistor/content/almanac.py +0 -0
  154. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/polyhistor/content/domains.py +0 -0
  155. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/polyhistor/content/domains_applied.py +0 -0
  156. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/polyhistor/content/encyclopedia.py +0 -0
  157. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/polyhistor/content/lexicon.py +0 -0
  158. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/polyhistor/content/people.py +0 -0
  159. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/polyhistor/content/sources.py +0 -0
  160. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/polyhistor/content/timeline.py +0 -0
  161. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/polyhistor/data/acadlist.json +0 -0
  162. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/polyhistor/data/ahb.json +0 -0
  163. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/polyhistor/data/bible1.json +0 -0
  164. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/polyhistor/data/biology1.json +0 -0
  165. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/polyhistor/data/chemistry1.json +0 -0
  166. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/polyhistor/data/chi_chars.json +0 -0
  167. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/polyhistor/data/degrees1.json +0 -0
  168. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/polyhistor/data/dhammapada1.json +0 -0
  169. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/polyhistor/data/diction.json +0 -0
  170. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/polyhistor/data/diction_raw.json +0 -0
  171. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/polyhistor/data/fcci.json +0 -0
  172. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/polyhistor/data/hospitals.json +0 -0
  173. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/polyhistor/data/jamo.json +0 -0
  174. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/polyhistor/data/katakana.json +0 -0
  175. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/polyhistor/data/koran1.json +0 -0
  176. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/polyhistor/data/legal_terms1.json +0 -0
  177. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/polyhistor/data/manifest.json +0 -0
  178. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/polyhistor/data/medicals1.json +0 -0
  179. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/polyhistor/data/mims.json +0 -0
  180. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/polyhistor/data/proverbs.json +0 -0
  181. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/polyhistor/data/psychology1.json +0 -0
  182. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/polyhistor/data/science1.json +0 -0
  183. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/polyhistor/data/verses1.json +0 -0
  184. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/polyhistor/data_loader.py +0 -0
  185. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/polyhistor/knowledge.py +0 -0
  186. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/polyhistor/py.typed +0 -0
  187. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/polyhistor/technica.py +0 -0
  188. {mprocs-9.0 → mprocs-9.1}/src/MProcs/modules/polyhistor/theme.py +0 -0
  189. {mprocs-9.0 → mprocs-9.1}/src/MProcs/scripts/__init__.py +0 -0
  190. {mprocs-9.0 → mprocs-9.1}/src/MProcs/scripts/ai_image.py +0 -0
  191. {mprocs-9.0 → mprocs-9.1}/src/MProcs/scripts/data/acadlist.json +0 -0
  192. {mprocs-9.0 → mprocs-9.1}/src/MProcs/scripts/data/ahb.json +0 -0
  193. {mprocs-9.0 → mprocs-9.1}/src/MProcs/scripts/data/bible1.json +0 -0
  194. {mprocs-9.0 → mprocs-9.1}/src/MProcs/scripts/data/biology1.json +0 -0
  195. {mprocs-9.0 → mprocs-9.1}/src/MProcs/scripts/data/chemistry1.json +0 -0
  196. {mprocs-9.0 → mprocs-9.1}/src/MProcs/scripts/data/chi_chars.json +0 -0
  197. {mprocs-9.0 → mprocs-9.1}/src/MProcs/scripts/data/degrees1.json +0 -0
  198. {mprocs-9.0 → mprocs-9.1}/src/MProcs/scripts/data/dhammapada1.json +0 -0
  199. {mprocs-9.0 → mprocs-9.1}/src/MProcs/scripts/data/diction.json +0 -0
  200. {mprocs-9.0 → mprocs-9.1}/src/MProcs/scripts/data/fcci.json +0 -0
  201. {mprocs-9.0 → mprocs-9.1}/src/MProcs/scripts/data/hospitals.json +0 -0
  202. {mprocs-9.0 → mprocs-9.1}/src/MProcs/scripts/data/jamo.json +0 -0
  203. {mprocs-9.0 → mprocs-9.1}/src/MProcs/scripts/data/katakana.json +0 -0
  204. {mprocs-9.0 → mprocs-9.1}/src/MProcs/scripts/data/koran1.json +0 -0
  205. {mprocs-9.0 → mprocs-9.1}/src/MProcs/scripts/data/legal_terms1.json +0 -0
  206. {mprocs-9.0 → mprocs-9.1}/src/MProcs/scripts/data/medicals1.json +0 -0
  207. {mprocs-9.0 → mprocs-9.1}/src/MProcs/scripts/data/mims.json +0 -0
  208. {mprocs-9.0 → mprocs-9.1}/src/MProcs/scripts/data/proverbs.json +0 -0
  209. {mprocs-9.0 → mprocs-9.1}/src/MProcs/scripts/data/psychology1.json +0 -0
  210. {mprocs-9.0 → mprocs-9.1}/src/MProcs/scripts/data/science1.json +0 -0
  211. {mprocs-9.0 → mprocs-9.1}/src/MProcs/scripts/data/strains.json +0 -0
  212. {mprocs-9.0 → mprocs-9.1}/src/MProcs/scripts/data/tracks.json +0 -0
  213. {mprocs-9.0 → mprocs-9.1}/src/MProcs/scripts/data/verses1.json +0 -0
  214. {mprocs-9.0 → mprocs-9.1}/src/MProcs/scripts/data_loader.py +0 -0
  215. {mprocs-9.0 → mprocs-9.1}/src/MProcs/scripts/deepseek_ai.py +0 -0
  216. {mprocs-9.0 → mprocs-9.1}/src/MProcs/scripts/gwf.py +0 -0
  217. {mprocs-9.0 → mprocs-9.1}/src/MProcs/scripts/keys.py +0 -0
  218. {mprocs-9.0 → mprocs-9.1}/src/MProcs/scripts/lpro.py +0 -0
  219. {mprocs-9.0 → mprocs-9.1}/src/MProcs/scripts/lpro_s.py +0 -0
  220. {mprocs-9.0 → mprocs-9.1}/src/MProcs/scripts/main.py +0 -0
  221. {mprocs-9.0 → mprocs-9.1}/src/MProcs/scripts/native.py +0 -0
  222. {mprocs-9.0 → mprocs-9.1}/src/MProcs/scripts/scmpy.py +0 -0
  223. {mprocs-9.0 → mprocs-9.1}/src/MProcs/scripts/session.py +0 -0
  224. {mprocs-9.0 → mprocs-9.1}/src/MProcs/scripts/wrappers.py +0 -0
  225. {mprocs-9.0 → mprocs-9.1}/src/MProcs.egg-info/SOURCES.txt +0 -0
  226. {mprocs-9.0 → mprocs-9.1}/src/MProcs.egg-info/dependency_links.txt +0 -0
  227. {mprocs-9.0 → mprocs-9.1}/src/MProcs.egg-info/entry_points.txt +0 -0
  228. {mprocs-9.0 → mprocs-9.1}/src/MProcs.egg-info/requires.txt +0 -0
  229. {mprocs-9.0 → mprocs-9.1}/src/MProcs.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: MProcs
3
- Version: 9.0
3
+ Version: 9.1
4
4
  Summary: MProcs // Terminal Suite - MProcs, POLYHISTOR, FLU0 and JADE//WIRE in one launcher
5
5
  Author-email: tderk <usvu.tech@gmail.com>
6
6
  License: MIT
@@ -19,7 +19,7 @@ Dynamic: license-file
19
19
 
20
20
  Derived from NeonBunny. A Life program by tderk, originally LPro.py and Destiny [2024].
21
21
 
22
- ## MProcs // Terminal Suite (11.0 / app 9.0)
22
+ ## MProcs // Terminal Suite (11.0 / app 9.1)
23
23
 
24
24
  MProcs is now a single, self-contained launcher for every terminal in the
25
25
  suite. Nothing is looked up on PyPI, nothing is downloaded at startup, and the
@@ -151,7 +151,7 @@ Fix applied vs. original PyPI sdist: moved `dependencies = ["requests","ddgs"]`
151
151
  ```bash
152
152
  # from this directory (/home/kredt/BDCS/MProcs)
153
153
  pip install --upgrade build twine
154
- python -m build # creates dist/mprocs-9.0.tar.gz + .whl
154
+ python -m build # creates dist/mprocs-9.1.tar.gz + .whl
155
155
  # or
156
156
  pip wheel . --no-deps
157
157
  pip install dist/mprocs-*.whl # test install
@@ -287,7 +287,7 @@ Display full article from source header? (enter header/title/id or n): agent-tra
287
287
  terminal summary.
288
288
  - `MProcs --list`, `MProcs --version` and `MProcs --help` are available without
289
289
  starting the TUI.
290
- - `pyproject.toml` application version `9.0` (suite version `11.0`); package data includes every terminal data
290
+ - `pyproject.toml` application version `9.1` (suite version `11.0`); package data includes every terminal data
291
291
  directory.
292
292
 
293
293
  **Layout:** `src/MProcs/modules/{polyhistor,flu0,hmptunnel}`.
@@ -343,7 +343,7 @@ PASSED.
343
343
  between blank lines.
344
344
  - **Wording:** removed previous integration labels from the UI, package description and
345
345
  documentation.
346
- - **Versions:** MProcs `11.0`; application package `9.0`.
346
+ - **Versions:** MProcs `11.0`; application package `9.1`.
347
347
 
348
348
  **Verified:** 256-colour POLYHISTOR output and spacing, FLU0/JADE//WIRE boards
349
349
  with rails/frame, both GWFs, nested Esc/Ctrl-G navigation, update screen and
@@ -2,7 +2,7 @@
2
2
 
3
3
  Derived from NeonBunny. A Life program by tderk, originally LPro.py and Destiny [2024].
4
4
 
5
- ## MProcs // Terminal Suite (11.0 / app 9.0)
5
+ ## MProcs // Terminal Suite (11.0 / app 9.1)
6
6
 
7
7
  MProcs is now a single, self-contained launcher for every terminal in the
8
8
  suite. Nothing is looked up on PyPI, nothing is downloaded at startup, and the
@@ -134,7 +134,7 @@ Fix applied vs. original PyPI sdist: moved `dependencies = ["requests","ddgs"]`
134
134
  ```bash
135
135
  # from this directory (/home/kredt/BDCS/MProcs)
136
136
  pip install --upgrade build twine
137
- python -m build # creates dist/mprocs-9.0.tar.gz + .whl
137
+ python -m build # creates dist/mprocs-9.1.tar.gz + .whl
138
138
  # or
139
139
  pip wheel . --no-deps
140
140
  pip install dist/mprocs-*.whl # test install
@@ -270,7 +270,7 @@ Display full article from source header? (enter header/title/id or n): agent-tra
270
270
  terminal summary.
271
271
  - `MProcs --list`, `MProcs --version` and `MProcs --help` are available without
272
272
  starting the TUI.
273
- - `pyproject.toml` application version `9.0` (suite version `11.0`); package data includes every terminal data
273
+ - `pyproject.toml` application version `9.1` (suite version `11.0`); package data includes every terminal data
274
274
  directory.
275
275
 
276
276
  **Layout:** `src/MProcs/modules/{polyhistor,flu0,hmptunnel}`.
@@ -326,7 +326,7 @@ PASSED.
326
326
  between blank lines.
327
327
  - **Wording:** removed previous integration labels from the UI, package description and
328
328
  documentation.
329
- - **Versions:** MProcs `11.0`; application package `9.0`.
329
+ - **Versions:** MProcs `11.0`; application package `9.1`.
330
330
 
331
331
  **Verified:** 256-colour POLYHISTOR output and spacing, FLU0/JADE//WIRE boards
332
332
  with rails/frame, both GWFs, nested Esc/Ctrl-G navigation, update screen and
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "MProcs"
7
- version = "9.0"
7
+ version = "9.1"
8
8
  description = "MProcs // Terminal Suite - MProcs, POLYHISTOR, FLU0 and JADE//WIRE in one launcher"
9
9
  requires-python = ">=3.8"
10
10
  readme = "README.md"
@@ -23,7 +23,7 @@ gwf = "MProcs.scripts.gwf:run"
23
23
 
24
24
  [tool.mprocs]
25
25
  version = "11.0"
26
- app-version = "9.0"
26
+ app-version = "9.1"
27
27
 
28
28
  [project.optional-dependencies]
29
29
  dev = ["pytest", "black", "flake8"]
@@ -1,4 +1,4 @@
1
1
  """MProcs terminal suite."""
2
2
 
3
3
  __version__ = "11.0"
4
- __app_version__ = "9.0"
4
+ __app_version__ = "9.1"
@@ -1135,9 +1135,29 @@ class MProcsTUI:
1135
1135
  avail = max(0, w - rw - 1)
1136
1136
  lw = _str_width(left)
1137
1137
  if lw > avail:
1138
- left = left[:avail]
1138
+ candidates = [
1139
+ ' %s | %s (v%s) ' % (version_checker.PACKAGE_NAME,
1140
+ version_checker.MPROCS_VERSION,
1141
+ version_checker.PACKAGE_VERSION),
1142
+ ' %s | v%s ' % (version_checker.PACKAGE_NAME,
1143
+ version_checker.PACKAGE_VERSION),
1144
+ ' %s ' % version_checker.PACKAGE_NAME,
1145
+ ]
1146
+ for candidate in candidates:
1147
+ if _str_width(candidate) <= avail:
1148
+ left = candidate
1149
+ break
1150
+ else:
1151
+ left = left[:avail]
1152
+ lw = _str_width(left)
1153
+ if lw + 1 + rw > w:
1154
+ right = now.strftime('%H:%M')
1155
+ rw = _str_width(right)
1156
+ if lw + rw >= w:
1157
+ right = ''
1158
+ rw = 0
1139
1159
  std.addstr(0, 0, left, a)
1140
- if rw < w:
1160
+ if rw and rw < w:
1141
1161
  std.addstr(0, w - rw, right, a)
1142
1162
  std.move(1, 0)
1143
1163
  std.clrtoeol()
@@ -1455,33 +1475,82 @@ class MProcsTUI:
1455
1475
  except curses.error:
1456
1476
  break
1457
1477
 
1458
- def put(row, col, text, attr=0):
1478
+ def put(row, col, text, attr=0, limit=None):
1479
+ if row < 2 or row >= h or col < 0:
1480
+ return
1481
+ maxw = (limit if limit is not None else w) - col
1482
+ if maxw <= 0:
1483
+ return
1484
+ text = str(text)[:maxw]
1485
+ if not text:
1486
+ return
1459
1487
  try:
1460
- if row < 2 or row >= h or col < 0:
1461
- return
1462
- if col + _str_width(text) <= w:
1463
- std.addstr(row, col, text, attr)
1488
+ std.addstr(row, col, text, attr)
1464
1489
  except curses.error:
1465
1490
  pass
1466
1491
 
1467
- def clip_to(text, width):
1468
- return text[:max(0, width)]
1492
+ def wrap(text, width):
1493
+ width = max(1, int(width))
1494
+ words = str(text).split()
1495
+ if not words:
1496
+ return ['']
1497
+ lines = []
1498
+ current = ''
1499
+ for word in words:
1500
+ while len(word) > width:
1501
+ if current:
1502
+ lines.append(current)
1503
+ current = ''
1504
+ lines.append(word[:width])
1505
+ word = word[width:]
1506
+ trial = (current + ' ' + word).strip()
1507
+ if current and len(trial) > width:
1508
+ lines.append(current)
1509
+ current = word
1510
+ else:
1511
+ current = trial
1512
+ if current:
1513
+ lines.append(current)
1514
+ return lines or ['']
1469
1515
 
1470
- def clip(text):
1471
- return clip_to(text, w - 1)
1516
+ def clip(text, width):
1517
+ return str(text)[:max(0, int(width))]
1472
1518
 
1473
1519
  compact = h < 24
1474
- put(2, 0, clip(' %s ' % self.menu_title), curses.A_BOLD | curses.A_REVERSE)
1520
+ wide = w >= 100 and not compact
1521
+ panel_w = 0
1522
+ panel_x = 0
1523
+ menu_w = w - 1
1524
+ if wide:
1525
+ panel_w = min(46, max(28, w // 3))
1526
+ panel_x = w - panel_w - 2
1527
+ menu_w = panel_x - 2
1528
+
1529
+ title = ' MProcs // TERMINAL LAUNCHER '
1475
1530
  version = 'v%s ' % version_checker.PACKAGE_VERSION
1476
- put(2, max(0, w - len(version) - 1), version, curses.A_BOLD | curses.A_REVERSE)
1477
-
1531
+ if len(title) + len(version) + 2 > w:
1532
+ title = ' MProcs // LAUNCHER '
1533
+ if len(title) + len(version) + 2 > w:
1534
+ title = ' MProcs '
1535
+ if len(title) + len(version) + 2 > w:
1536
+ version = ''
1537
+ put(2, 0, title, curses.A_BOLD | curses.A_REVERSE)
1538
+ if version:
1539
+ put(2, max(0, w - len(version) - 1), version,
1540
+ curses.A_BOLD | curses.A_REVERSE)
1541
+
1542
+ start = 4
1478
1543
  if self.menu_depth == 0 and not compact and self.proverb:
1479
- # Root launcher: blank line, proverb, blank line.
1480
- quote = ' hmptunnel // PROVERBS: \u201c%s\u201d' % self.proverb
1481
- put(4, 0, clip(quote),
1482
- self._accent_attr('jade', bold=False) | curses.A_DIM)
1483
- start = 6
1484
- else:
1544
+ quote = 'hmptunnel // PROVERBS: \u201c%s\u201d' % self.proverb
1545
+ qlines = wrap(quote, max(8, w - 4))
1546
+ if 4 + len(qlines) + 1 <= h - 8:
1547
+ row = 4
1548
+ for line in qlines:
1549
+ put(row, 2, line,
1550
+ self._accent_attr('jade', bold=False) | curses.A_DIM)
1551
+ row += 1
1552
+ start = row + 1
1553
+ if start == 4:
1485
1554
  if self.menu_subtitle:
1486
1555
  subtitle = ' ' + self.menu_subtitle
1487
1556
  elif self.menu_depth == 0:
@@ -1490,109 +1559,229 @@ class MProcsTUI:
1490
1559
  else:
1491
1560
  subtitle = ''
1492
1561
  if subtitle:
1493
- put(3, 0, clip(subtitle), curses.A_DIM)
1494
- start = 4 if compact else 5
1562
+ slines = wrap(subtitle, max(8, w - 4))[:2]
1563
+ for i, line in enumerate(slines):
1564
+ put(3 + i, 0, line, curses.A_DIM)
1565
+ start = 3 + len(slines)
1566
+ else:
1567
+ start = 4
1568
+ if not compact:
1569
+ start = max(start, 5)
1570
+ start = max(3, min(start, h - 4))
1495
1571
 
1496
- rows = []
1572
+ physical = []
1573
+ ranges = {}
1497
1574
  current_group = None
1498
1575
  for idx, app in enumerate(self.apps):
1499
1576
  group = getattr(app, 'group', 'core')
1500
1577
  if group != current_group:
1501
- rows.append(('group', group))
1502
1578
  current_group = group
1503
- rows.append(('app', idx))
1504
-
1505
- slots = max(1, h - start - 3)
1506
- selected_pos = 0
1507
- for pos, (kind, payload) in enumerate(rows):
1508
- if kind == 'app' and payload == self.menu_index:
1509
- selected_pos = pos
1510
- break
1511
- offset = max(0, selected_pos - slots + 1) if len(rows) > slots else 0
1512
- visible = rows[offset:offset + slots]
1513
-
1514
- y = start
1515
- for kind, payload in visible:
1516
- if kind == 'group':
1517
- if payload == 'view' and self.menu_group_title:
1518
- title = self.menu_group_title
1579
+ if group == 'view' and self.menu_group_title:
1580
+ gtitle = self.menu_group_title
1519
1581
  else:
1520
- title = _GROUP_TITLES.get(payload, payload.upper())
1521
- label = ' \u2500\u2500 %s ' % title
1522
- fill = max(0, min(w - 1, 64) - len(label))
1523
- if payload == 'view':
1524
- accent = self.menu_accent
1525
- elif payload == 'core':
1526
- accent = 'gold'
1527
- else:
1528
- accent = 'jade'
1529
- put(y, 0, clip(label + '\u2500' * fill), self._accent_attr(accent))
1530
- y += 1
1531
- continue
1532
-
1533
- app = self.apps[payload]
1534
- selected = payload == self.menu_index
1535
- accent = getattr(app, 'accent', 'white')
1536
- shortcut = self._menu_shortcut(payload, app)
1582
+ gtitle = _GROUP_TITLES.get(group, group.upper())
1583
+ label = ' \u2500\u2500 %s ' % gtitle
1584
+ fill = max(0, menu_w - len(label))
1585
+ accent = (self.menu_accent if group == 'view'
1586
+ else ('gold' if group == 'core' else 'jade'))
1587
+ physical.append((None, clip(label + '\u2500' * fill, menu_w),
1588
+ self._accent_attr(accent)))
1537
1589
  if self.menu_depth:
1538
- name = getattr(app, 'display_name', None) or getattr(app, 'name', '') or ''
1590
+ name = (getattr(app, 'display_name', None)
1591
+ or getattr(app, 'name', '') or '')
1539
1592
  else:
1540
1593
  name = getattr(app, 'name', '') or ''
1541
1594
  detail = getattr(app, 'description', '') or getattr(app, 'tagline', '')
1542
- marker = '\u25b8' if selected else ' '
1595
+ shortcut = self._menu_shortcut(idx, app)
1596
+ marker = '\u25b8' if idx == self.menu_index else ' '
1543
1597
  prefix = ' %s %-2s ' % (marker, shortcut)
1544
- name_col = len(prefix)
1545
- name_width = max(4, min(22, w - name_col - 2))
1546
- name_field = name[:name_width].ljust(name_width)
1547
- line = prefix + name_field
1548
- tail_col = len(line)
1549
- avail = max(0, w - tail_col - 2)
1550
- detail = detail[:avail]
1551
- line += (' ' + detail) if detail else ''
1552
- if selected:
1553
- line = line[:max(1, w - 1)].ljust(max(1, w - 1))
1554
- put(y, 0, line, self._accent_attr(accent) | curses.A_REVERSE)
1598
+ indent = ' ' * len(prefix)
1599
+ name_width = max(4, menu_w - len(prefix))
1600
+ nlines = wrap(name, name_width)
1601
+ single = False
1602
+ if len(nlines) == 1 and detail:
1603
+ pad = min(22, name_width)
1604
+ if len(prefix) + pad + 2 + len(detail) <= menu_w:
1605
+ nlines = [nlines[0].ljust(pad)]
1606
+ single = True
1607
+ item_start = len(physical)
1608
+ for n, line in enumerate(nlines):
1609
+ text = (prefix if n == 0 else indent) + line
1610
+ physical.append((idx, clip(text, menu_w),
1611
+ self._accent_attr(getattr(app, 'accent', 'white'))))
1612
+ if detail:
1613
+ if single:
1614
+ physical[-1] = (idx, physical[-1][1] + ' ' + detail,
1615
+ physical[-1][2])
1616
+ else:
1617
+ dindent = ' ' * len(prefix)
1618
+ dlines = wrap(detail, max(4, menu_w - len(dindent)))
1619
+ if dlines and physical and physical[-1][0] == idx:
1620
+ last_text = physical[-1][1]
1621
+ if len(last_text) + 2 + len(dlines[0]) <= menu_w:
1622
+ physical[-1] = (idx, last_text + ' ' + dlines[0],
1623
+ physical[-1][2])
1624
+ dlines = dlines[1:]
1625
+ for line in dlines:
1626
+ physical.append((idx, clip(dindent + line, menu_w),
1627
+ curses.A_DIM))
1628
+ ranges[idx] = (item_start, len(physical) - 1)
1629
+
1630
+ if w < 80:
1631
+ hint = (' \u2191\u2193 \u00b7 Enter \u00b7 1-0/P/F/J \u00b7 '
1632
+ 'u update \u00b7 q quit')
1633
+ else:
1634
+ hint = (' \u2191\u2193 move \u00b7 Enter launch \u00b7 '
1635
+ '1-0/P/F/J/a-g \u00b7 u update \u00b7 '
1636
+ 'Esc/Ctrl-G launcher \u00b7 q quit')
1637
+ hint_lines = wrap(hint, max(8, w - 2))[:2]
1638
+
1639
+ if 0 <= self.menu_index < len(self.apps):
1640
+ sel = self.apps[self.menu_index]
1641
+ sel_title = (getattr(sel, 'display_name', None)
1642
+ or getattr(sel, 'title', None)
1643
+ or getattr(sel, 'name', ''))
1644
+ sel_detail = (getattr(sel, 'tagline', '')
1645
+ or getattr(sel, 'description', ''))
1646
+ if w < 70 or not sel_detail:
1647
+ status = ' ' + sel_title
1555
1648
  else:
1556
- put(y, 0, prefix)
1557
- put(y, name_col, name_field, self._accent_attr(accent))
1558
- if detail:
1559
- put(y, tail_col, ' ' + detail, curses.A_DIM)
1649
+ status = ' %s \u00b7 %s' % (sel_title, sel_detail)
1650
+ status_lines = wrap(status, max(8, w - 2))[:2]
1651
+ else:
1652
+ status_lines = []
1653
+
1654
+ hint_y = (h - 1) - len(hint_lines)
1655
+ status_y = hint_y - len(status_lines)
1656
+ update_y = None
1657
+ if self.menu_depth == 0 and not compact and h >= 25:
1658
+ update_y = status_y - 1
1659
+ content_bottom = (update_y - 1) if update_y is not None else (status_y - 1)
1660
+
1661
+ avail = max(1, content_bottom - start + 1)
1662
+ total = len(physical)
1663
+ if total <= avail:
1664
+ offset = 0
1665
+ else:
1666
+ s, e = ranges.get(self.menu_index, (0, 0))
1667
+ if e - s + 1 >= avail:
1668
+ offset = s
1669
+ else:
1670
+ offset = max(0, e - avail + 1)
1671
+ if offset > s:
1672
+ offset = s
1673
+ offset = max(0, min(offset, total - avail))
1674
+ visible = physical[offset:offset + avail]
1675
+
1676
+ y = start
1677
+ for idx, text, attr in visible:
1678
+ if idx is not None and idx == self.menu_index:
1679
+ line = text[:menu_w].ljust(max(1, menu_w))
1680
+ put(y, 0, line,
1681
+ self._accent_attr(getattr(self.apps[idx], 'accent', 'white'))
1682
+ | curses.A_REVERSE)
1683
+ else:
1684
+ put(y, 0, text, attr)
1560
1685
  y += 1
1561
1686
 
1562
- scroll = None
1563
- if len(rows) > slots:
1564
- scroll = ' %d-%d/%d ' % (offset + 1, min(offset + slots, len(rows)), len(rows))
1565
- if 0 <= self.menu_index < len(self.apps):
1687
+ if panel_w and 0 <= self.menu_index < len(self.apps):
1566
1688
  app = self.apps[self.menu_index]
1567
- title = (getattr(app, 'display_name', None)
1568
- or getattr(app, 'title', None)
1569
- or getattr(app, 'name', ''))
1570
- detail = (getattr(app, 'tagline', '')
1571
- or getattr(app, 'description', '') or 'ready')
1572
- status = ' %s \u00b7 %s' % (title, detail)
1573
- limit = w - 1 - (len(scroll) + 1 if scroll else 0)
1574
- if not compact:
1575
- put(h - 3, 0, clip_to(status, limit),
1576
- self._accent_attr(getattr(app, 'accent', 'white')))
1689
+ accent = getattr(app, 'accent', 'white')
1690
+ ptitle = (getattr(app, 'display_name', None)
1691
+ or getattr(app, 'title', None)
1692
+ or getattr(app, 'name', ''))
1693
+ pdetail = getattr(app, 'description', '') or getattr(app, 'tagline', '')
1694
+ if getattr(app, 'native_tui', False):
1695
+ kind = 'original TUI'
1696
+ elif getattr(app, 'is_submenu', False):
1697
+ kind = 'launcher board'
1698
+ elif getattr(app, 'group', '') == 'core':
1699
+ kind = 'MProcs core'
1700
+ else:
1701
+ kind = 'terminal'
1702
+ sep_x = panel_x - 1
1703
+ for row in range(start, max(start, content_bottom + 1)):
1704
+ put(row, sep_x, '\u2502', curses.A_DIM)
1705
+ py = start
1706
+ put(py, panel_x, 'SELECTED', curses.A_DIM)
1707
+ py += 2
1708
+ for line in wrap(ptitle, panel_w):
1709
+ if py > content_bottom:
1710
+ break
1711
+ put(py, panel_x, clip(line, panel_w),
1712
+ self._accent_attr(accent))
1713
+ py += 1
1714
+ for line in wrap(kind, panel_w):
1715
+ if py > content_bottom:
1716
+ break
1717
+ put(py, panel_x, clip(line, panel_w), curses.A_DIM)
1718
+ py += 1
1719
+ py += 1
1720
+ for line in wrap(pdetail, panel_w):
1721
+ if py > content_bottom - 4:
1722
+ break
1723
+ put(py, panel_x, clip(line, panel_w), curses.A_DIM)
1724
+ py += 1
1725
+ py += 1
1726
+ for label, value in (
1727
+ ('shortcut', self._menu_shortcut(self.menu_index, app)),
1728
+ ('group', getattr(app, 'group', 'core')),
1729
+ ):
1730
+ if py > content_bottom:
1731
+ break
1732
+ put(py, panel_x,
1733
+ clip('%-9s %s' % (label, value), panel_w), curses.A_DIM)
1734
+ py += 1
1735
+ sy = max(py + 1, content_bottom - 4)
1736
+ if sy <= content_bottom:
1737
+ put(sy, panel_x, 'SUITE', curses.A_DIM)
1738
+ sy += 1
1739
+ for line in (version_checker.MPROCS_VERSION,
1740
+ 'app ' + version_checker.PACKAGE_VERSION,
1741
+ '%d terminals' % len(self.root_apps)):
1742
+ if sy > content_bottom:
1743
+ break
1744
+ put(sy, panel_x, clip(line, panel_w), curses.A_DIM)
1745
+ sy += 1
1746
+ if sy <= content_bottom and self.update_available:
1747
+ put(sy, panel_x,
1748
+ clip('update v%s' % self.update_latest, panel_w),
1749
+ self._accent_attr('gold'))
1750
+
1751
+ scroll = None
1752
+ if total > avail:
1753
+ vis_items = [i for i, _, _ in visible if i is not None]
1754
+ if vis_items:
1755
+ scroll = ' %d-%d/%d ' % (min(vis_items) + 1,
1756
+ max(vis_items) + 1,
1757
+ len(self.apps))
1577
1758
  else:
1578
- put(h - 3, 0, clip_to(status, limit), curses.A_DIM)
1579
- last_row = start + max(0, len(visible) - 1)
1580
- if self.menu_depth == 0 and not compact and h - 4 > last_row:
1759
+ scroll = ' %d/%d ' % (self.menu_index + 1, len(self.apps))
1760
+
1761
+ status_attr = curses.A_DIM
1762
+ if 0 <= self.menu_index < len(self.apps):
1763
+ status_attr = self._accent_attr(
1764
+ getattr(self.apps[self.menu_index], 'accent', 'white'))
1765
+ for i, line in enumerate(status_lines):
1766
+ put(status_y + i, 0, clip(line, w - 1), status_attr)
1767
+ if scroll:
1768
+ put(status_y, max(0, w - len(scroll) - 1), scroll, curses.A_DIM)
1769
+
1770
+ if update_y is not None:
1581
1771
  if self.update_available:
1582
- update_line = ' u update available: v%s \u00b7 install / restart' % self.update_latest
1583
- put(h - 4, 0, clip(update_line), self._accent_attr('gold'))
1772
+ uline = (' u update available: v%s \u00b7 '
1773
+ 'install / restart' % self.update_latest)
1774
+ put(update_y, 0, clip(uline, w - 1), self._accent_attr('gold'))
1584
1775
  elif not self.update_check_done:
1585
- put(h - 4, 0, clip(' u checking for updates ...'), curses.A_DIM)
1776
+ put(update_y, 0, clip(' u checking for updates ...', w - 1),
1777
+ curses.A_DIM)
1586
1778
  else:
1587
- put(h - 4, 0, clip(' u check for updates / install / restart'), curses.A_DIM)
1588
- if scroll:
1589
- put(h - 3, max(0, w - len(scroll) - 1), scroll, curses.A_DIM)
1590
- if w < 80:
1591
- hint = ' \u2191\u2193 \u00b7 Enter \u00b7 1-0/P/F/J \u00b7 u update \u00b7 q quit'
1592
- else:
1593
- hint = (' \u2191\u2193 move \u00b7 Enter launch \u00b7 1-0/P/F/J/a-g \u00b7 '
1594
- 'u update \u00b7 Esc/Ctrl-G launcher \u00b7 q quit')
1595
- put(h - 2, 0, clip(hint), curses.A_DIM)
1779
+ put(update_y, 0,
1780
+ clip(' u check for updates / install / restart', w - 1),
1781
+ curses.A_DIM)
1782
+
1783
+ for i, line in enumerate(hint_lines):
1784
+ put(hint_y + i, 0, clip(line, w - 1), curses.A_DIM)
1596
1785
 
1597
1786
  def _draw_input(self):
1598
1787
  if self.menu_mode:
@@ -19,7 +19,7 @@ try:
19
19
  import importlib.metadata
20
20
  PACKAGE_VERSION = importlib.metadata.version(PACKAGE_NAME)
21
21
  except Exception:
22
- PACKAGE_VERSION = "9.0"
22
+ PACKAGE_VERSION = "9.1"
23
23
 
24
24
  _latest_version = None
25
25
  _update_available = False
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: MProcs
3
- Version: 9.0
3
+ Version: 9.1
4
4
  Summary: MProcs // Terminal Suite - MProcs, POLYHISTOR, FLU0 and JADE//WIRE in one launcher
5
5
  Author-email: tderk <usvu.tech@gmail.com>
6
6
  License: MIT
@@ -19,7 +19,7 @@ Dynamic: license-file
19
19
 
20
20
  Derived from NeonBunny. A Life program by tderk, originally LPro.py and Destiny [2024].
21
21
 
22
- ## MProcs // Terminal Suite (11.0 / app 9.0)
22
+ ## MProcs // Terminal Suite (11.0 / app 9.1)
23
23
 
24
24
  MProcs is now a single, self-contained launcher for every terminal in the
25
25
  suite. Nothing is looked up on PyPI, nothing is downloaded at startup, and the
@@ -151,7 +151,7 @@ Fix applied vs. original PyPI sdist: moved `dependencies = ["requests","ddgs"]`
151
151
  ```bash
152
152
  # from this directory (/home/kredt/BDCS/MProcs)
153
153
  pip install --upgrade build twine
154
- python -m build # creates dist/mprocs-9.0.tar.gz + .whl
154
+ python -m build # creates dist/mprocs-9.1.tar.gz + .whl
155
155
  # or
156
156
  pip wheel . --no-deps
157
157
  pip install dist/mprocs-*.whl # test install
@@ -287,7 +287,7 @@ Display full article from source header? (enter header/title/id or n): agent-tra
287
287
  terminal summary.
288
288
  - `MProcs --list`, `MProcs --version` and `MProcs --help` are available without
289
289
  starting the TUI.
290
- - `pyproject.toml` application version `9.0` (suite version `11.0`); package data includes every terminal data
290
+ - `pyproject.toml` application version `9.1` (suite version `11.0`); package data includes every terminal data
291
291
  directory.
292
292
 
293
293
  **Layout:** `src/MProcs/modules/{polyhistor,flu0,hmptunnel}`.
@@ -343,7 +343,7 @@ PASSED.
343
343
  between blank lines.
344
344
  - **Wording:** removed previous integration labels from the UI, package description and
345
345
  documentation.
346
- - **Versions:** MProcs `11.0`; application package `9.0`.
346
+ - **Versions:** MProcs `11.0`; application package `9.1`.
347
347
 
348
348
  **Verified:** 256-colour POLYHISTOR output and spacing, FLU0/JADE//WIRE boards
349
349
  with rails/frame, both GWFs, nested Esc/Ctrl-G navigation, update screen and
File without changes
File without changes
File without changes
File without changes