minxg-beta 0.12.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 (265) hide show
  1. minxg_beta-0.12.1/LICENSE +21 -0
  2. minxg_beta-0.12.1/PKG-INFO +501 -0
  3. minxg_beta-0.12.1/README.md +456 -0
  4. minxg_beta-0.12.1/agent/__init__.py +5 -0
  5. minxg_beta-0.12.1/agent/conversation_loop.py +344 -0
  6. minxg_beta-0.12.1/agent/iteration_budget.py +56 -0
  7. minxg_beta-0.12.1/extensions/__init__.py +169 -0
  8. minxg_beta-0.12.1/extensions/builtin/__init__.py +1 -0
  9. minxg_beta-0.12.1/extensions/builtin/adb_ext/__init__.py +143 -0
  10. minxg_beta-0.12.1/extensions/builtin/files_ext/__init__.py +131 -0
  11. minxg_beta-0.12.1/extensions/builtin/hello.py +52 -0
  12. minxg_beta-0.12.1/extensions/builtin/list_ext.py +46 -0
  13. minxg_beta-0.12.1/extensions/builtin/root_ext/__init__.py +143 -0
  14. minxg_beta-0.12.1/extensions/import_wizard.py +524 -0
  15. minxg_beta-0.12.1/extensions/loader.py +368 -0
  16. minxg_beta-0.12.1/extensions/package_cli.py +348 -0
  17. minxg_beta-0.12.1/extensions/user/__init__.py +1 -0
  18. minxg_beta-0.12.1/extensions/zipscan/__init__.py +194 -0
  19. minxg_beta-0.12.1/gateway/__init__.py +14 -0
  20. minxg_beta-0.12.1/gateway/inference.py +168 -0
  21. minxg_beta-0.12.1/gateway/rag.py +143 -0
  22. minxg_beta-0.12.1/gateway/router.py +189 -0
  23. minxg_beta-0.12.1/gateway/runner.py +126 -0
  24. minxg_beta-0.12.1/gateway/server.py +669 -0
  25. minxg_beta-0.12.1/gateway/workspace.py +149 -0
  26. minxg_beta-0.12.1/minxg/__init__.py +156 -0
  27. minxg_beta-0.12.1/minxg/_config.py +36 -0
  28. minxg_beta-0.12.1/minxg/base.py +226 -0
  29. minxg_beta-0.12.1/minxg/cap/__init__.py +44 -0
  30. minxg_beta-0.12.1/minxg/cap/__main__.py +4 -0
  31. minxg_beta-0.12.1/minxg/cap/cli.py +84 -0
  32. minxg_beta-0.12.1/minxg/cap/manifest.py +160 -0
  33. minxg_beta-0.12.1/minxg/cap/registry.py +44 -0
  34. minxg_beta-0.12.1/minxg/cap/scanner.py +66 -0
  35. minxg_beta-0.12.1/minxg/cat/__init__.py +13 -0
  36. minxg_beta-0.12.1/minxg/cat/functor.py +213 -0
  37. minxg_beta-0.12.1/minxg/cat/monad.py +299 -0
  38. minxg_beta-0.12.1/minxg/cat/morphism.py +267 -0
  39. minxg_beta-0.12.1/minxg/cat/operators_cat.py +429 -0
  40. minxg_beta-0.12.1/minxg/cat/yoneda.py +129 -0
  41. minxg_beta-0.12.1/minxg/chaos/__init__.py +16 -0
  42. minxg_beta-0.12.1/minxg/chaos/bifurcation.py +68 -0
  43. minxg_beta-0.12.1/minxg/chaos/fractal.py +138 -0
  44. minxg_beta-0.12.1/minxg/chaos/ifs.py +94 -0
  45. minxg_beta-0.12.1/minxg/chaos/lyapunov.py +98 -0
  46. minxg_beta-0.12.1/minxg/chaos/maps.py +148 -0
  47. minxg_beta-0.12.1/minxg/chaos/operators_chaos.py +229 -0
  48. minxg_beta-0.12.1/minxg/contracts/__init__.py +31 -0
  49. minxg_beta-0.12.1/minxg/contracts/cell.py +61 -0
  50. minxg_beta-0.12.1/minxg/contracts/examples.py +20 -0
  51. minxg_beta-0.12.1/minxg/contracts/lifecycle.py +43 -0
  52. minxg_beta-0.12.1/minxg/contracts/port.py +53 -0
  53. minxg_beta-0.12.1/minxg/contracts/registry.py +97 -0
  54. minxg_beta-0.12.1/minxg/driver/__init__.py +37 -0
  55. minxg_beta-0.12.1/minxg/driver/engine.py +165 -0
  56. minxg_beta-0.12.1/minxg/driver/fields.py +80 -0
  57. minxg_beta-0.12.1/minxg/driver/operator.py +61 -0
  58. minxg_beta-0.12.1/minxg/driver/state.py +65 -0
  59. minxg_beta-0.12.1/minxg/fiber/__init__.py +14 -0
  60. minxg_beta-0.12.1/minxg/fiber/bundle.py +84 -0
  61. minxg_beta-0.12.1/minxg/fiber/connection.py +200 -0
  62. minxg_beta-0.12.1/minxg/fiber/frame.py +104 -0
  63. minxg_beta-0.12.1/minxg/fiber/operators_fiber.py +281 -0
  64. minxg_beta-0.12.1/minxg/fiber/section.py +105 -0
  65. minxg_beta-0.12.1/minxg/fiber/tangent.py +143 -0
  66. minxg_beta-0.12.1/minxg/five_pillars/aggregate/__init__.py +0 -0
  67. minxg_beta-0.12.1/minxg/five_pillars/aggregate/benchmark_tools.py +123 -0
  68. minxg_beta-0.12.1/minxg/five_pillars/aggregate/crypto_tools.py +194 -0
  69. minxg_beta-0.12.1/minxg/five_pillars/aggregate/data_tools.py +389 -0
  70. minxg_beta-0.12.1/minxg/five_pillars/aggregate/encoding_tools.py +122 -0
  71. minxg_beta-0.12.1/minxg/five_pillars/aggregate/i18n_tools.py +87 -0
  72. minxg_beta-0.12.1/minxg/five_pillars/aggregate/math_adv.py +616 -0
  73. minxg_beta-0.12.1/minxg/five_pillars/aggregate/ml_tools.py +222 -0
  74. minxg_beta-0.12.1/minxg/five_pillars/aggregate/template_tools.py +137 -0
  75. minxg_beta-0.12.1/minxg/five_pillars/aggregate/text_adv.py +796 -0
  76. minxg_beta-0.12.1/minxg/five_pillars/dispatch/__init__.py +0 -0
  77. minxg_beta-0.12.1/minxg/five_pillars/dispatch/adb_tools.py +278 -0
  78. minxg_beta-0.12.1/minxg/five_pillars/dispatch/dev_tools.py +166 -0
  79. minxg_beta-0.12.1/minxg/five_pillars/dispatch/go_client.py +217 -0
  80. minxg_beta-0.12.1/minxg/five_pillars/dispatch/limits_break.py +197 -0
  81. minxg_beta-0.12.1/minxg/five_pillars/dispatch/limits_lock.py +162 -0
  82. minxg_beta-0.12.1/minxg/five_pillars/dispatch/notify_tools.py +84 -0
  83. minxg_beta-0.12.1/minxg/five_pillars/dispatch/platform_registry.py +264 -0
  84. minxg_beta-0.12.1/minxg/five_pillars/dispatch/platform_tools.py +116 -0
  85. minxg_beta-0.12.1/minxg/five_pillars/dispatch/process_tools.py +108 -0
  86. minxg_beta-0.12.1/minxg/five_pillars/dispatch/root_tools.py +249 -0
  87. minxg_beta-0.12.1/minxg/five_pillars/dispatch/security_tools.py +151 -0
  88. minxg_beta-0.12.1/minxg/five_pillars/dispatch/sh_exec.py +89 -0
  89. minxg_beta-0.12.1/minxg/five_pillars/dispatch/sh_query.py +62 -0
  90. minxg_beta-0.12.1/minxg/five_pillars/dispatch/system.py +249 -0
  91. minxg_beta-0.12.1/minxg/five_pillars/io/__init__.py +0 -0
  92. minxg_beta-0.12.1/minxg/five_pillars/io/archive_tools.py +399 -0
  93. minxg_beta-0.12.1/minxg/five_pillars/io/cloud_tools.py +191 -0
  94. minxg_beta-0.12.1/minxg/five_pillars/io/db_tools.py +152 -0
  95. minxg_beta-0.12.1/minxg/five_pillars/io/fs_copy.py +211 -0
  96. minxg_beta-0.12.1/minxg/five_pillars/io/fs_io.py +174 -0
  97. minxg_beta-0.12.1/minxg/five_pillars/io/fs_search.py +175 -0
  98. minxg_beta-0.12.1/minxg/five_pillars/io/media_adv.py +390 -0
  99. minxg_beta-0.12.1/minxg/five_pillars/io/media_tools.py +197 -0
  100. minxg_beta-0.12.1/minxg/five_pillars/io/network.py +259 -0
  101. minxg_beta-0.12.1/minxg/five_pillars/io/network_adv.py +302 -0
  102. minxg_beta-0.12.1/minxg/five_pillars/io/web_search.py +203 -0
  103. minxg_beta-0.12.1/minxg/five_pillars/io/web_tools.py +241 -0
  104. minxg_beta-0.12.1/minxg/five_pillars/scalar/__init__.py +0 -0
  105. minxg_beta-0.12.1/minxg/five_pillars/scalar/color_tools.py +95 -0
  106. minxg_beta-0.12.1/minxg/five_pillars/scalar/core_native.py +721 -0
  107. minxg_beta-0.12.1/minxg/five_pillars/scalar/datetime_tools.py +108 -0
  108. minxg_beta-0.12.1/minxg/five_pillars/scalar/markdown_tools.py +78 -0
  109. minxg_beta-0.12.1/minxg/five_pillars/scalar/math_tools.py +181 -0
  110. minxg_beta-0.12.1/minxg/five_pillars/scalar/string_tools.py +120 -0
  111. minxg_beta-0.12.1/minxg/five_pillars/scalar/text_tools.py +167 -0
  112. minxg_beta-0.12.1/minxg/five_pillars/scalar/version_tools.py +60 -0
  113. minxg_beta-0.12.1/minxg/five_pillars/transform/__init__.py +0 -0
  114. minxg_beta-0.12.1/minxg/five_pillars/transform/ai_tools.py +285 -0
  115. minxg_beta-0.12.1/minxg/five_pillars/transform/events.py +183 -0
  116. minxg_beta-0.12.1/minxg/five_pillars/transform/hotreload.py +167 -0
  117. minxg_beta-0.12.1/minxg/five_pillars/transform/infinite_memory.py +443 -0
  118. minxg_beta-0.12.1/minxg/five_pillars/transform/persistence.py +312 -0
  119. minxg_beta-0.12.1/minxg/five_pillars/transform/rules.py +244 -0
  120. minxg_beta-0.12.1/minxg/five_pillars/transform/state_machine.py +146 -0
  121. minxg_beta-0.12.1/minxg/five_pillars/transform/state_session.py +156 -0
  122. minxg_beta-0.12.1/minxg/ga/__init__.py +17 -0
  123. minxg_beta-0.12.1/minxg/ga/algebra.py +301 -0
  124. minxg_beta-0.12.1/minxg/ga/multivector.py +431 -0
  125. minxg_beta-0.12.1/minxg/ga/operators_ga.py +268 -0
  126. minxg_beta-0.12.1/minxg/ga/rotor.py +252 -0
  127. minxg_beta-0.12.1/minxg/infogeo/__init__.py +21 -0
  128. minxg_beta-0.12.1/minxg/infogeo/connection.py +110 -0
  129. minxg_beta-0.12.1/minxg/infogeo/divergence.py +126 -0
  130. minxg_beta-0.12.1/minxg/infogeo/fisher.py +87 -0
  131. minxg_beta-0.12.1/minxg/infogeo/manifold.py +349 -0
  132. minxg_beta-0.12.1/minxg/infogeo/operators_ig.py +336 -0
  133. minxg_beta-0.12.1/minxg/lens/__init__.py +20 -0
  134. minxg_beta-0.12.1/minxg/lens/glossary.py +70 -0
  135. minxg_beta-0.12.1/minxg/lens/projector.py +104 -0
  136. minxg_beta-0.12.1/minxg/lossless/__init__.py +35 -0
  137. minxg_beta-0.12.1/minxg/lossless/bie.py +76 -0
  138. minxg_beta-0.12.1/minxg/lossless/codec.py +100 -0
  139. minxg_beta-0.12.1/minxg/lossless/skeleton.py +74 -0
  140. minxg_beta-0.12.1/minxg/operators.py +422 -0
  141. minxg_beta-0.12.1/minxg/polyglot/__init__.py +19 -0
  142. minxg_beta-0.12.1/minxg/polyglot/graph.py +73 -0
  143. minxg_beta-0.12.1/minxg/polyglot/languages.py +38 -0
  144. minxg_beta-0.12.1/minxg/polyglot/normalizer.py +161 -0
  145. minxg_beta-0.12.1/minxg/self_evolution/__init__.py +36 -0
  146. minxg_beta-0.12.1/minxg/self_evolution/failure_tour.py +84 -0
  147. minxg_beta-0.12.1/minxg/self_evolution/field_forge.py +105 -0
  148. minxg_beta-0.12.1/minxg/self_evolution/loop.py +131 -0
  149. minxg_beta-0.12.1/minxg/self_evolution/twin.py +76 -0
  150. minxg_beta-0.12.1/minxg/server.py +212 -0
  151. minxg_beta-0.12.1/minxg/topo/__init__.py +16 -0
  152. minxg_beta-0.12.1/minxg/topo/filtration.py +141 -0
  153. minxg_beta-0.12.1/minxg/topo/homology.py +139 -0
  154. minxg_beta-0.12.1/minxg/topo/mapper.py +159 -0
  155. minxg_beta-0.12.1/minxg/topo/operators_topo.py +414 -0
  156. minxg_beta-0.12.1/minxg/topo/persistence.py +202 -0
  157. minxg_beta-0.12.1/minxg/topo/simplicial.py +204 -0
  158. minxg_beta-0.12.1/minxg/twin/__init__.py +22 -0
  159. minxg_beta-0.12.1/minxg/twin/mapper.py +26 -0
  160. minxg_beta-0.12.1/minxg/twin/python_to_rust.py +308 -0
  161. minxg_beta-0.12.1/minxg/twin/rust_to_python.py +91 -0
  162. minxg_beta-0.12.1/minxg_beta.egg-info/PKG-INFO +501 -0
  163. minxg_beta-0.12.1/minxg_beta.egg-info/SOURCES.txt +263 -0
  164. minxg_beta-0.12.1/minxg_beta.egg-info/dependency_links.txt +1 -0
  165. minxg_beta-0.12.1/minxg_beta.egg-info/entry_points.txt +2 -0
  166. minxg_beta-0.12.1/minxg_beta.egg-info/requires.txt +21 -0
  167. minxg_beta-0.12.1/minxg_beta.egg-info/top_level.txt +7 -0
  168. minxg_beta-0.12.1/multiligua_cli/__init__.py +13 -0
  169. minxg_beta-0.12.1/multiligua_cli/banner.py +71 -0
  170. minxg_beta-0.12.1/multiligua_cli/doctor.py +324 -0
  171. minxg_beta-0.12.1/multiligua_cli/extensions/__init__.py +313 -0
  172. minxg_beta-0.12.1/multiligua_cli/extensions/tui.py +201 -0
  173. minxg_beta-0.12.1/multiligua_cli/extensions.py +38 -0
  174. minxg_beta-0.12.1/multiligua_cli/features.py +328 -0
  175. minxg_beta-0.12.1/multiligua_cli/file_selector.py +243 -0
  176. minxg_beta-0.12.1/multiligua_cli/gateway_cli.py +214 -0
  177. minxg_beta-0.12.1/multiligua_cli/i18n.py +211 -0
  178. minxg_beta-0.12.1/multiligua_cli/interactive.py +186 -0
  179. minxg_beta-0.12.1/multiligua_cli/logger.py +164 -0
  180. minxg_beta-0.12.1/multiligua_cli/main.py +665 -0
  181. minxg_beta-0.12.1/multiligua_cli/memory.py +482 -0
  182. minxg_beta-0.12.1/multiligua_cli/platforms.py +45 -0
  183. minxg_beta-0.12.1/multiligua_cli/providers.py +302 -0
  184. minxg_beta-0.12.1/multiligua_cli/setup.py +532 -0
  185. minxg_beta-0.12.1/multiligua_cli/syntax.py +371 -0
  186. minxg_beta-0.12.1/multiligua_cli/terminal_chat.py +200 -0
  187. minxg_beta-0.12.1/multiligua_cli/tui_chat.py +392 -0
  188. minxg_beta-0.12.1/multiligua_cli/utils.py +230 -0
  189. minxg_beta-0.12.1/multiligua_cli/wizard_ui.py +338 -0
  190. minxg_beta-0.12.1/multiling/__init__.py +34 -0
  191. minxg_beta-0.12.1/multiling/agent/__init__.py +25 -0
  192. minxg_beta-0.12.1/multiling/agent/agent.py +289 -0
  193. minxg_beta-0.12.1/multiling/agent/capability.py +140 -0
  194. minxg_beta-0.12.1/multiling/agent/reflection.py +246 -0
  195. minxg_beta-0.12.1/multiling/agent/role.py +148 -0
  196. minxg_beta-0.12.1/multiling/agent/session.py +208 -0
  197. minxg_beta-0.12.1/multiling/analytics/__init__.py +431 -0
  198. minxg_beta-0.12.1/multiling/analytics/tracker.py +15 -0
  199. minxg_beta-0.12.1/multiling/auth/__init__.py +371 -0
  200. minxg_beta-0.12.1/multiling/auth/tokens.py +29 -0
  201. minxg_beta-0.12.1/multiling/cache/__init__.py +275 -0
  202. minxg_beta-0.12.1/multiling/cache/lru.py +21 -0
  203. minxg_beta-0.12.1/multiling/cache/ttl.py +19 -0
  204. minxg_beta-0.12.1/multiling/cli_bootstrap.py +72 -0
  205. minxg_beta-0.12.1/multiling/config/__init__.py +567 -0
  206. minxg_beta-0.12.1/multiling/config/loader.py +20 -0
  207. minxg_beta-0.12.1/multiling/docs_generator.py +657 -0
  208. minxg_beta-0.12.1/multiling/ipc_server.py +700 -0
  209. minxg_beta-0.12.1/multiling/knowledge/__init__.py +558 -0
  210. minxg_beta-0.12.1/multiling/knowledge/base.py +23 -0
  211. minxg_beta-0.12.1/multiling/minxg_core.py +550 -0
  212. minxg_beta-0.12.1/multiling/model_tools.py +396 -0
  213. minxg_beta-0.12.1/multiling/orchestrator.py +1120 -0
  214. minxg_beta-0.12.1/multiling/pipeline/__init__.py +404 -0
  215. minxg_beta-0.12.1/multiling/pipeline/runner.py +18 -0
  216. minxg_beta-0.12.1/multiling/platform_cap.py +204 -0
  217. minxg_beta-0.12.1/multiling/profiler/__init__.py +413 -0
  218. minxg_beta-0.12.1/multiling/profiler/profile.py +26 -0
  219. minxg_beta-0.12.1/multiling/queue/__init__.py +346 -0
  220. minxg_beta-0.12.1/multiling/queue/fifo.py +13 -0
  221. minxg_beta-0.12.1/multiling/queue/priority.py +12 -0
  222. minxg_beta-0.12.1/multiling/scheduler/__init__.py +340 -0
  223. minxg_beta-0.12.1/multiling/scheduler/scheduler.py +26 -0
  224. minxg_beta-0.12.1/multiling/testing/__init__.py +372 -0
  225. minxg_beta-0.12.1/multiling/testing/fixtures.py +25 -0
  226. minxg_beta-0.12.1/multiling/toolsets.py +101 -0
  227. minxg_beta-0.12.1/multiling/vector/__init__.py +373 -0
  228. minxg_beta-0.12.1/multiling/vector/store.py +22 -0
  229. minxg_beta-0.12.1/multiling/workers_runner.py +64 -0
  230. minxg_beta-0.12.1/multiling/workflow/__init__.py +562 -0
  231. minxg_beta-0.12.1/multiling/workflow/engine.py +27 -0
  232. minxg_beta-0.12.1/pyproject.toml +136 -0
  233. minxg_beta-0.12.1/setup.cfg +4 -0
  234. minxg_beta-0.12.1/tests/test_01_geometric_algebra.py +65 -0
  235. minxg_beta-0.12.1/tests/test_02_category_theory.py +61 -0
  236. minxg_beta-0.12.1/tests/test_03_information_geometry.py +60 -0
  237. minxg_beta-0.12.1/tests/test_04_algebraic_topology.py +52 -0
  238. minxg_beta-0.12.1/tests/test_05_dynamical_systems.py +48 -0
  239. minxg_beta-0.12.1/tests/test_06_fiber_bundles.py +47 -0
  240. minxg_beta-0.12.1/tests/test_07_operator_registry.py +65 -0
  241. minxg_beta-0.12.1/tests/test_08_config.py +30 -0
  242. minxg_beta-0.12.1/tests/test_09_persistence.py +43 -0
  243. minxg_beta-0.12.1/tests/test_anti_loop.py +148 -0
  244. minxg_beta-0.12.1/tests/test_cap.py +149 -0
  245. minxg_beta-0.12.1/tests/test_cli_commands.py +312 -0
  246. minxg_beta-0.12.1/tests/test_driver.py +78 -0
  247. minxg_beta-0.12.1/tests/test_experimental_features.py +75 -0
  248. minxg_beta-0.12.1/tests/test_extensions.py +215 -0
  249. minxg_beta-0.12.1/tests/test_lens.py +63 -0
  250. minxg_beta-0.12.1/tests/test_lossless.py +70 -0
  251. minxg_beta-0.12.1/tests/test_memory_engine.py +150 -0
  252. minxg_beta-0.12.1/tests/test_platform_cap.py +59 -0
  253. minxg_beta-0.12.1/tests/test_polyglot.py +122 -0
  254. minxg_beta-0.12.1/tests/test_self_evolution.py +125 -0
  255. minxg_beta-0.12.1/tests/test_termux_notify.py +47 -0
  256. minxg_beta-0.12.1/tests/test_twin.py +110 -0
  257. minxg_beta-0.12.1/tools/__init__.py +5 -0
  258. minxg_beta-0.12.1/tools/cronjob_tools.py +286 -0
  259. minxg_beta-0.12.1/tools/delegate_tool.py +302 -0
  260. minxg_beta-0.12.1/tools/file_tools.py +415 -0
  261. minxg_beta-0.12.1/tools/registry.py +450 -0
  262. minxg_beta-0.12.1/tools/skill_manager_tool.py +199 -0
  263. minxg_beta-0.12.1/tools/system_tools.py +257 -0
  264. minxg_beta-0.12.1/tools/terminal_tool.py +219 -0
  265. minxg_beta-0.12.1/tools/web_tools.py +212 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 MINXG Authors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,501 @@
1
+ Metadata-Version: 2.4
2
+ Name: minxg-beta
3
+ Version: 0.12.1
4
+ Summary: MINXG — modular AI worker platform with a chat CLI, an OpenAI-compatible v1 gateway, opt-in extensions (ADB/ROOT/files), and a self-developed temporal driver engine. 306 mathematical operators (376 total across 11 categories). Pure Python.
5
+ Author: MINXG Authors
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/pineapple-ooo/MINXG-Beta
8
+ Project-URL: Documentation, https://github.com/pineapple-ooo/MINXG-Beta/blob/main/README.md
9
+ Project-URL: Repository, https://github.com/pineapple-ooo/MINXG-Beta
10
+ Project-URL: Issues, https://github.com/pineapple-ooo/MINXG-Beta/issues
11
+ Project-URL: Changelog, https://github.com/pineapple-ooo/MINXG-Beta/blob/main/CHANGELOG.md
12
+ Keywords: ai,orchestration,workers,operator,driver,five-pillars,self-evolution,lossless,polyglot,minxg
13
+ Classifier: Development Status :: 4 - Beta
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: License :: OSI Approved :: MIT License
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.11
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Programming Language :: Python :: 3.13
20
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
21
+ Requires-Python: >=3.11
22
+ Description-Content-Type: text/markdown
23
+ License-File: LICENSE
24
+ Requires-Dist: aiohttp>=3.9.0
25
+ Requires-Dist: cryptography>=41.0.0
26
+ Requires-Dist: PyYAML>=6.0.0
27
+ Requires-Dist: python-dotenv>=1.0.0
28
+ Requires-Dist: prometheus-client>=0.19.0
29
+ Requires-Dist: ujson>=5.9.0
30
+ Requires-Dist: zstandard>=0.22.0
31
+ Requires-Dist: xxhash>=3.4.0
32
+ Requires-Dist: orjson>=3.9.0
33
+ Requires-Dist: fastapi<1,>=0.104.0
34
+ Requires-Dist: uvicorn[standard]<1,>=0.24.0
35
+ Requires-Dist: rich>=13.0.0
36
+ Requires-Dist: readchar>=2.0.0
37
+ Requires-Dist: httpx[socks]>=0.27.0
38
+ Requires-Dist: croniter>=6.0.0
39
+ Provides-Extra: dev
40
+ Requires-Dist: pytest>=9.0.0; extra == "dev"
41
+ Requires-Dist: pytest-asyncio>=1.0.0; extra == "dev"
42
+ Requires-Dist: pytest-timeout>=2.4.0; extra == "dev"
43
+ Requires-Dist: ruff>=0.15.0; extra == "dev"
44
+ Dynamic: license-file
45
+
46
+ # MINXG
47
+
48
+ A modular AI worker platform with a built-in chat CLI, an OpenAI-compatible
49
+ v1 gateway, opt-in extensions (ADB / ROOT / files), and a self-developed
50
+ temporal driver engine — all in one Python package.
51
+
52
+ `pip install minxg-beta` drops you on Termux, Linux, macOS, and WSL
53
+ with a single `minxg` binary on `$PATH`. Workers are split across
54
+ five orthogonal operator planes (io, aggregate, scalar, transform,
55
+ dispatch), so editing one module never forces a full rebuild.
56
+ Pure Python — no compiled step required to install or run.
57
+
58
+ - This is the **v0.12.1** release. v0.12.1 closes every outstanding gap in the v0.12.0 surface: anti-loop guard, entropic multi-tier memory, per-platform tool cap, Termux notification hook, and the polyglot CMake build. It ships cold-start
59
+ hardening plus a polished setup wizard:
60
+
61
+ - `minxg` (no subcommand) now asks: chat CLI, start API gateway, or
62
+ run the setup wizard — instead of dropping straight into a TUI
63
+ shell.
64
+ - Setup wizard supports the OpenAI-standard `reasoning_effort` knob
65
+ (`xhigh` / `high` / `medium` / `low` / `minimal` / `none`) with
66
+ per-provider support maps (OpenAI supports all five, Anthropic
67
+ three, Gemini five, DeepSeek / Doubao / xAI four, etc.).
68
+ - Wizard menus strictly fit a single line per option — descriptions
69
+ are truncated to 28 chars so Termux 80-col screens stop spilling
70
+ one option across two terminal rows.
71
+ - Built-in extensions (`minxg-adb`, `minxg-root`, `minxg-files`)
72
+ ship opted-OUT. Users enable with `minxg ext add <slug>`. No
73
+ silent auto-attaching to whatever API happens to be on PATH.
74
+ - `cpp_core/CMakeLists.txt` link error fixed: `libminxg_core.so`
75
+ no longer crashes on `dlopen` with
76
+ `cannot locate symbol "minxg_slugify"` on Termux + Py3.13.
77
+ - `minxg model`: the AI provider registry was missing `name`,
78
+ `emoji`, and `description` for the second half of the providers,
79
+ crashing the setup wizard with `KeyError: 'emoji'`. All 32
80
+ providers are now normalised.
81
+ - `cpp_core/src/json_stringify.cpp` adds a flat C ABI over the C++
82
+ `json_fast` parser (re-parses per call so no `std::variant`
83
+ crosses the boundary on aarch64 Android, returns malloc'd buffers
84
+ freed via `cpp_json_free`). Exposed to Python through
85
+ `native_integration.CPPJsonNative` with a `JsonBuffer` lifetime
86
+ wrapper that holds the raw `c_void_p` pointer (the heap-corruption
87
+ footgun from using `c_char_p` is now memoralised at the top of the
88
+ class).
89
+ - `java_core/` ships a polyglot JVM-side daemon — line-oriented JSON
90
+ RPC on TCP, in-memory vector engine, knowledge graph, session
91
+ memory, persistent log — built with `javac` (no Maven/Gradle
92
+ required). Intended for users who already run a JVM and want a
93
+ hostable backend independent of the Python driver. Source-only;
94
+ build artefacts (`build/`, `*.jar`) stay out of git via the
95
+ existing `.gitignore`.
96
+ - Test suite now **exercises every CLI command** so a regression
97
+ that removes or renames a subcommand breaks CI (`tests/test_cli_commands.py`).
98
+ 130 → 161 unit tests. AddressSanitizer harness (`tests/asan_harness.c`,
99
+ `build_asan/libminxg_asan.so`) verifies zero leak / zero use-after-free
100
+ across every C API; the `.so` files in repo root and `c_core/*.o`
101
+ have been removed from git tracking (still ignored by `.gitignore`).
102
+ - Install script no longer probes for `adb` / `su`. ADB & ROOT ship
103
+ as opt-in extensions (`minxg ext add minxg-adb`,
104
+ `minxg ext add minxg-root`) so the install path is identical
105
+ on dev workstations and locked-down CI.
106
+
107
+ ## Install
108
+
109
+ The Python package's distribution name is **`minxg-beta`** and the
110
+ top-level import is **`minxg`**.
111
+
112
+ ### One-liner (any platform)
113
+
114
+ ```bash
115
+ curl -fsSL https://raw.githubusercontent.com/pineapple-ooo/MINXG-Beta/main/install.sh | bash
116
+ ```
117
+
118
+ That single command:
119
+ - detects your platform (Termux / Linux / macOS / WSL),
120
+ - clones the full repo to `~/.minxg-src`,
121
+ - pip-installs everything in editable mode so the `minxg` console
122
+ script lands on `$PATH`,
123
+ - compiles the optional C extensions if a compiler is present,
124
+ - prints a status table at the end.
125
+
126
+ Variants:
127
+
128
+ ```bash
129
+ # custom clone dir
130
+ MINXG_DIR=/opt/minxg curl -fsSL https://raw.githubusercontent.com/pineapple-ooo/MINXG-Beta/main/install.sh | bash
131
+
132
+ # explicit repo URL (when forking)
133
+ REPO_URL=https://github.com/you/minxg.git curl -fsSL https://raw.githubusercontent.com/pineapple-ooo/MINXG-Beta/main/install.sh | bash
134
+ ```
135
+
136
+ ### Local clone (developer)
137
+
138
+ ```bash
139
+ git clone https://github.com/<owner>/minxg.git
140
+ cd minxg
141
+ bash install.sh # picks up the existing clone, skips the git step
142
+
143
+ After install:
144
+
145
+ ```python
146
+ import minxg
147
+ print(minxg.VERSION) # "0.10.0"
148
+ print(minxg.detect_platform())
149
+ ```
150
+
151
+ Verified end-to-end on Termux/Android (`Python 3.13`) and Linux:
152
+ ```bash
153
+ $ pip install -e .
154
+ Successfully installed minxg-beta-0.10.0
155
+
156
+ $ python3 -c "import minxg; print(minxg.VERSION, len(minxg.__all__), 'workers;', minxg.TOTAL_MATHEMATICAL_OPERATORS, 'math ops')"
157
+ 0.10.0 55 workers; 306 math ops
158
+ ```
159
+
160
+ **PyPI publication is on the roadmap but not yet done.** Until the
161
+ package shows up on PyPI under the `minxg-beta` name, the source-
162
+ tree mode above is the supported install path.
163
+
164
+ The codebase has no compiled dependencies on install; everything in
165
+ `minxg/five_pillars/`, `minxg/driver/`, `minxg/contracts/`,
166
+ `minxg/self_evolution/`, `minxg/polyglot/`, `minxg/lossless/`,
167
+ `minxg/twin/`, `minxg/lens/`, and the six mathematical pillars is
168
+ pure Python. Fall-back to pure Python is implicit: when no native
169
+ library is found or `dlopen` fails, the Python implementation is
170
+ used. The Termux/Android pipeline runs end-to-end via the lazy
171
+ loader for `cryptography` and the project-root-anchored
172
+ `core_native._find_lib` walker.
173
+
174
+ ## Quick start
175
+
176
+ ```python
177
+ import minxg
178
+
179
+ print(minxg.VERSION)
180
+ print(minxg.detect_platform())
181
+
182
+ fs = minxg.FsIoWorker()
183
+ result = await fs.list_directory(path="/tmp")
184
+ ```
185
+
186
+ For the driver engine (substitute for a task graph):
187
+
188
+ ```python
189
+ from minxg.driver import State, DriverEngine, smoothing_field
190
+
191
+ state = State(payload={"x": 0.0, "v": 1.0})
192
+ engine = DriverEngine([smoothing_field(rate=0.4)])
193
+ end, report = engine.run(state, n_steps=24)
194
+ ```
195
+
196
+ For the lossless BIE round-trip codec:
197
+
198
+ ```python
199
+ from minxg.lossless import LosslessCodec
200
+
201
+ codec = LosslessCodec()
202
+ result = codec.compress(b"some payload") # wraps an MINSKE blob + CRC-32
203
+ back = codec.decompress(result.payload)
204
+ assert back == b"some payload" # byte-identical, not size-optimised
205
+ ```
206
+
207
+ This is a BIE (blade-decomposition) *byte-identical round-trip* — useful
208
+ as a structured representation of byte streams, not a competitor to
209
+ zstd/gzip. On random or low-redundancy inputs the encoded form is
210
+ larger than the source.
211
+
212
+ ## Five pillars
213
+
214
+ The 55 worker classes are organised along five orthogonal planes:
215
+
216
+ ```
217
+ minxg.five_pillars.scalar pure compute math / datetime / text / color
218
+ minxg.five_pillars.aggregate encoders crypto / encoding / ml / templates
219
+ minxg.five_pillars.io external surfaces fs / net / media / web / cloud
220
+ minxg.five_pillars.dispatch execution / limits system / sh / adb / root
221
+ minxg.five_pillars.transform state and events persistence / rules / ai
222
+ ```
223
+
224
+ Edit one worker, nothing else moves.
225
+
226
+ ## Self-developed subsystems
227
+
228
+ * `minxg.driver` — Temporal Operator-Field driver engine. Operators
229
+ are pure functions on a shared state manifold; advancing one step
230
+ is explicit Euler integration with adaptive sub-stepping on drift.
231
+ * `minxg.contracts` — Operator-Cell registry. Each Cell advertises
232
+ capabilities; replacing one Cell never touches the others.
233
+ * `minxg.self_evolution` — Closed-loop self-improvement. A bouncer
234
+ records engine failures, a forge hunts capable Cells from the
235
+ contracts registry, a twin engine validates a swap is drift-safe
236
+ before committing.
237
+ * `minxg.polyglot` — Multi-language source-to-graph normaliser.
238
+ Python uses real `ast`; Rust / JavaScript / Go / shell use
239
+ regex-based structural heuristics (not full parsers). All five
240
+ reduce to a single `OperatorGraph` with topological-order
241
+ edges — good enough for code-shape recognition, not a compiler
242
+ front-end.
243
+ * `minxg.lossless` — BIE-geometry byte-identical round-trip. Every
244
+ byte becomes a unit-sphere point; transitions between bytes
245
+ become blades; the curvature skeleton is what gets stored, with
246
+ a CRC-32 trailer guaranteeing byte-identical reconstruction.
247
+ Structurally interesting; output is typically *larger* than the
248
+ input on real-world data.
249
+ * `minxg.twin` — Python ↔ Rust RTL compiler. Source-equivalent twin
250
+ emitters cover if/elif/else, while/for-range, augmented assignments,
251
+ binop/compare expressions.
252
+ * `minxg.lens` — Reverse-docstring exporter. Render any one
253
+ description into EN / ZH / ZH-TW / JA / KO doc files + a glossary.
254
+
255
+ ## Mathematical pillars
256
+
257
+ Six categorical libraries ship with the package and register
258
+ **306 mathematical operator IDs** in 6 non-overlapping ranges on
259
+ import (376 operators total across all 11 categories; see
260
+ `OPERATORS.md`):
261
+
262
+ ```
263
+ minxg.ga 5000-5049 geometric algebra (47 ids)
264
+ minxg.cat 4000-4078 category theory (79 ids)
265
+ minxg.infogeo 7000-7050 information geometry (51 ids)
266
+ minxg.topo 8000-8052 algebraic topology (53 ids)
267
+ minxg.chaos 8500-8522 dynamical systems (23 ids)
268
+ minxg.fiber 6000-6052 fiber bundles (53 ids)
269
+ ```
270
+
271
+ ## Documentation
272
+
273
+ * `DEVELOPER.md` — full developer reference, one file
274
+ * `docs/ARCHITECTURE.md` — architecture diagrams and rationale
275
+ * `docs/DRIVER.md` — driver engine API and examples
276
+ * `docs/PILLARS.md` — one section per mathematical pillar
277
+
278
+ ## Command reference
279
+
280
+ The shipped CLI surface is small on purpose. Every subcommand and
281
+ flag below is exercised by `tests/test_cli_commands.py`; if you
282
+ rename or remove one of them, CI will fail.
283
+
284
+ ### Top-level commands
285
+
286
+ | command | what it does |
287
+ |--------------------|------------------------------------------------------------------------|
288
+ | `minxg` | Cold-start picker: chat CLI, OpenAI-compatible gateway, or setup. |
289
+ | `minxg setup` | Interactive setup wizard (run once; repeatable). |
290
+ | `minxg config` | Print current configuration (provider/model/key/etc.). |
291
+ | `minxg status` | Print system status (Python / platform / version). |
292
+ | `minxg tools` | List available toolsets and tool names. |
293
+ | `minxg help` | Pretty command cheatsheet. |
294
+ | `minxg model` | Without arg: re-launch setup. With `<NAME>`: one-shot set the model. |
295
+ | `minxg api <URL>` | One-shot set the API base URL. |
296
+ | `minxg key <KEY>` | One-shot set the API key. |
297
+ | `minxg lang [LC]` | Switch display language. Without arg: picker. With `<LC>`: one-shot. |
298
+ | `minxg gateway` | `start` / `stop` / `status` (default `status` when omitted). |
299
+ | `minxg doctor` | Twelve-row self-check; exit 0/1/2 = clean/fail/warn. |
300
+ | `minxg ext <a>...` | Manage extensions: `list`, `available`, `add`, `remove`, `info`, |
301
+ | | `enable`, `disable`. Run `minxg ext --help` for the full list. |
302
+
303
+ ### Global flags
304
+
305
+ | flag | effect |
306
+ |---------------------|----------------------------------------------------------------|
307
+ | `--version` | Print `multiligua_cli.__version__` and exit. |
308
+ | `-h`, `--help` | argparse-style help. |
309
+ | `-v`, `--verbose` | Raise logging level to DEBUG. |
310
+ | `--list-extensions` | Print every registered extension (name, source, priority, desc).|
311
+
312
+ ### Extension subcommands
313
+
314
+ ```text
315
+ minxg ext list # show active extensions
316
+ minxg ext available # show built-in opt-in slugs
317
+ minxg ext info <slug> # describe a slug
318
+ minxg ext add <slug|path> # install built-in or local package
319
+ minxg ext remove <name> # remove an installed extension
320
+ minxg ext enable <name> # enable without re-installing
321
+ minxg ext disable <name> # disable without removing
322
+ ```
323
+
324
+ The three built-in opt-in slugs are `minxg-adb`, `minxg-root`,
325
+ `minxg-files`. They install off-PATH tools; none of them silently
326
+ auto-attach to whatever binary happens to exist when `minxg` starts.
327
+
328
+ ### Examples
329
+
330
+ ```bash
331
+ # fresh install with public config
332
+ minxg setup
333
+ minxg config
334
+
335
+ # one-shots — no wizard
336
+ minxg model gpt-4o
337
+ minxg api https://api.openai.com/v1
338
+ minxg key $OPENAI_API_KEY
339
+
340
+ # start the gateway in the foreground
341
+ minxg gateway start --foreground
342
+
343
+ # discover extensions
344
+ minxg ext available
345
+ minxg ext info minxg-adb
346
+ minxg ext add minxg-adb # opt-in tool: not run during install
347
+ ```
348
+
349
+ ## Tutorials
350
+
351
+ ### A. First conversation in 60 seconds
352
+
353
+ ```bash
354
+ minxg setup # one wizard, picks provider + key
355
+ minxg config # confirm
356
+ minxg # TUI chat
357
+ ```
358
+
359
+ If your provider supports `reasoning_effort`, the wizard step
360
+ offers the OpenAI-standard ladder
361
+ `xhigh > high > medium > low > minimal > none`. Pick a value, then
362
+ the wizard persists it under `ai.reasoning_effort` in `config.yaml`.
363
+
364
+ ### B. Use `minxg` as an OpenAI-compatible backend for any client
365
+
366
+ Point your favourite client at the gateway:
367
+
368
+ ```bash
369
+ minxg gateway start # listens on 127.0.0.1:18080
370
+ # -d / --detach runs in background; --foreground stays attached
371
+
372
+ $EDITOR config.yaml # add base_url & api_key under ai:
373
+ minxg gateway status # shows /v1/models dump
374
+ ```
375
+
376
+ ```bash
377
+ curl http://127.0.0.1:18080/v1/chat/completions \
378
+ -H "Authorization: Bearer $(python -c "import yaml; print(yaml.safe_load(open('config.yaml'))['ai']['api_key'])")" \
379
+ -H "Content-Type: application/json" \
380
+ -d '{"model":"gpt-4o-mini","messages":[{"role":"user","content":"hi"}]}'
381
+ ```
382
+
383
+ ### C. Embed MINXG as a Python library
384
+
385
+ ```python
386
+ import minxg
387
+ print(minxg.VERSION) # "0.12.1"
388
+
389
+ # Driver engine: temporal operator-field
390
+ from minxg.driver import State, DriverEngine, smoothing_field
391
+ end, report = DriverEngine([smoothing_field(rate=0.4)]).run(
392
+ State(payload={"x": 0.0, "v": 1.0}), n_steps=24,
393
+ )
394
+
395
+ # Lossless BIE codec: byte-identical round-trip
396
+ from minxg.lossless import LosslessCodec
397
+ assert LosslessCodec().decompress(
398
+ LosslessCodec().compress(b"payload").payload
399
+ ) == b"payload"
400
+ ```
401
+
402
+ ### D. Add a private extension
403
+
404
+ ```python
405
+ # ~/.minxg_src/extensions/user/my_ext.py
406
+ from multiligua_cli.extensions import ExtensionModule
407
+ class MyExt(ExtensionModule):
408
+ NAME = "my-ext"
409
+ DESCRIPTION = "does one thing well"
410
+ EXTENSION_ENABLED = True
411
+ ```
412
+
413
+ ```bash
414
+ minxg ext add ./my_ext.py
415
+ minxg ext info my-ext
416
+ ```
417
+
418
+ ## Troubleshooting
419
+
420
+ | symptom | cause | fix |
421
+ |-------------------------------------------------------------------------|-------------------------------------------------------------|------------------------------------------------------------------|
422
+ | `minxg: command not found` after install | editable install put launcher under `~/.local/bin` not on PATH | `export PATH="$HOME/.local/bin:$PATH"` (or use the Termux site) |
423
+ | `dlopen ... cannot locate symbol "minxg_slugify"` on Termux + Py3.13 | old `cpp_core/CMakeLists.txt` link order | rebuild with the new cmake; `pip install -e .` after rebuild |
424
+ | `KeyError: 'emoji'` in setup wizard | provider registry entry missing fields | fixed in 0.11.0; pull latest |
425
+ | `Configuration missing; run minxg setup` | first run, `config.yaml` not created | run `minxg setup` |
426
+ | `OSError: dlopen failed: library not accessible for the namespace` | SELinux / sandbox blocks shared object load | copy the `.so` into syslib path, or use `LD_LIBRARY_PATH` |
427
+ | `RuntimeError: cannot locate symbol "ZSTD_compressBound"` | linker didn't pull libzstd | `pkg install libzstd`, then rebuild native |
428
+ | `minxg gateway start: Address already in use` | port collision | edit `gateway.port` in `config.yaml`, or stop the other process |
429
+ | `cryptography` import raises `Symbol not found` on Termux | ABI / arch mismatch in the binary wheel | `MINXG_NO_NATIVE=1 minxg ...` (forces pure-Python fallback) |
430
+ | `Provider "<name>" did you mean ...` | typo in `minxg model <name>` | re-run `minxg model` (lints the provider name) |
431
+
432
+ If `minxg doctor` exits non-zero, paste the full output in your bug
433
+ report — it lists `minxg.__all__`, the operator registry size, native
434
+ lib status, and config validation in a fixed-width table.
435
+
436
+ ### Enabling debug logs
437
+
438
+ ```bash
439
+ minxg -v setup # verbose flag
440
+ ```
441
+
442
+ The flag raises the root logger to DEBUG, useful for tracing
443
+ `extension discovery` and `provider normalisation` paths.
444
+
445
+ ## Experimental surface
446
+
447
+ Anything labelled `[EXPERIMENTAL]` is **not** part of the supported
448
+ CLI surface. Signatures may change, methods may no-op, and entire
449
+ classes may disappear between minor versions without changelog
450
+ notice. They live in the tree so contributors can find them; do not
451
+ build tooling on top of them and do not ingest them into the
452
+ stable TUI.
453
+
454
+ The current experimental exports are reachable through:
455
+
456
+ ```python
457
+ from multiligua_cli import features
458
+ print(features.list_experimental_exports())
459
+ ```
460
+
461
+ In this release (0.11.0) that yields:
462
+
463
+ ```
464
+ ['QuickFeedback', 'SessionManager', 'SHORTCUTS', 'SilentFeatures',
465
+ 'Spinner', 'THEMES', 'context_usage_bar', 'export_to_markdown',
466
+ 'get_silent', 'play_notification', 'role_color',
467
+ 'share_to_gist', 'welcome_animation']
468
+ ```
469
+
470
+ Notable specifics:
471
+
472
+ * `SilentFeatures.check_updates()` is a **stub** that returns
473
+ `None` — the update-check backend is unfinished.
474
+ * `SilentFeatures.keepalive_check()` does a 3-second HEAD against
475
+ `https://api.openai.com/v1/models` — it does *not* authenticate,
476
+ it only checks the endpoint is reachable.
477
+ * `SilentFeatures.optimize_memory_index()` requires
478
+ `~/.minxg/memory.db` to exist; if it doesn't, the call is a no-op.
479
+ * `SessionManager` / `QuickFeedback` are *not* wired into the TUI
480
+ (saved sessions / feedback are not currently surfaced in the
481
+ shipped chat UI).
482
+
483
+ The first time you call any of these, a WARNING is logged via the
484
+ `features` logger so the experimental status is visible at runtime:
485
+
486
+ ```text
487
+ WARNING features: EXPERIMENTAL feature SilentFeatures.disk_usage_report is not part of the stable CLI surface
488
+ ```
489
+
490
+ If you genuinely need one of these and would like it promoted to
491
+ stable, file an issue with the use-case — that's how a feature
492
+ graduates out of `features.py`.
493
+
494
+ ## See also
495
+
496
+ * `CHANGELOG.md` — per-version release notes
497
+ * `CONTRIBUTING`-style guidance lives in `DEVELOPER.md`
498
+
499
+ ## License
500
+
501
+ MIT. See `LICENSE`.