evolver-tools 36.0.0__tar.gz → 37.0.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 (331) hide show
  1. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/PKG-INFO +24 -9
  2. evolver_tools-36.0.0/src/evolver_tools.egg-info/PKG-INFO → evolver_tools-37.0.0/README.md +22 -29
  3. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/pyproject.toml +2 -2
  4. evolver_tools-37.0.0/src/evolver_tools/__init__.py +4 -0
  5. evolver_tools-37.0.0/src/evolver_tools/cli.py +66 -0
  6. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/agent_b_tool.py +1 -1
  7. evolver_tools-37.0.0/src/evolver_tools/vendor/ansi_to_html.py +122 -0
  8. evolver_tools-37.0.0/src/evolver_tools/vendor/ansi_to_txt.py +89 -0
  9. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/b64/__init__.py +1 -1
  10. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/cal_tool/__init__.py +1 -1
  11. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/cal_tool/cli.py +1 -1
  12. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/chart_cli/__init__.py +1 -1
  13. evolver_tools-37.0.0/src/evolver_tools/vendor/chrono.py +275 -0
  14. evolver_tools-37.0.0/src/evolver_tools/vendor/color_convert.py +135 -0
  15. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/colors/__init__.py +1 -1
  16. evolver_tools-37.0.0/src/evolver_tools/vendor/csv_concat.py +57 -0
  17. evolver_tools-37.0.0/src/evolver_tools/vendor/csv_schema.py +174 -0
  18. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/csv_stats/__init__.py +1 -1
  19. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/csv_stats/cli.py +1 -1
  20. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/diff_csv.py +1 -1
  21. evolver_tools-37.0.0/src/evolver_tools/vendor/diff_lines.py +166 -0
  22. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/diff_tool/__init__.py +1 -1
  23. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/dirsize/__init__.py +1 -1
  24. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/dt_convert.py +1 -1
  25. evolver_tools-37.0.0/src/evolver_tools/vendor/emoji_cli.py +465 -0
  26. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/env_manager.py +1 -1
  27. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/envcheck/__init__.py +1 -1
  28. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/ff/__init__.py +1 -1
  29. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/find_dups/__init__.py +1 -1
  30. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/find_dups/cli.py +1 -1
  31. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/fmt/__init__.py +1 -1
  32. evolver_tools-37.0.0/src/evolver_tools/vendor/git_ignore.py +207 -0
  33. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/hashsum/__init__.py +1 -1
  34. evolver_tools-37.0.0/src/evolver_tools/vendor/html_strip.py +143 -0
  35. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/http_live/__init__.py +1 -1
  36. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/ipcalc/__init__.py +1 -1
  37. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/ipinfo/__init__.py +1 -1
  38. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/jq_lite/__init__.py +1 -1
  39. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/json2csv/__init__.py +1 -1
  40. evolver_tools-37.0.0/src/evolver_tools/vendor/json_patch.py +319 -0
  41. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/jsonql/__init__.py +1 -1
  42. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/license_cli/__init__.py +1 -1
  43. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/license_cli/cli.py +1 -1
  44. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/log_analyzer.py +1 -1
  45. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/markdown_check/__init__.py +1 -1
  46. evolver_tools-37.0.0/src/evolver_tools/vendor/markdown_format.py +246 -0
  47. evolver_tools-37.0.0/src/evolver_tools/vendor/merge_json.py +87 -0
  48. evolver_tools-37.0.0/src/evolver_tools/vendor/mime_type.py +113 -0
  49. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/nb/__init__.py +1 -1
  50. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/passgen/__init__.py +1 -1
  51. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/portcheck/__init__.py +1 -1
  52. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/portcheck/__main__.py +1 -1
  53. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/project_doctor/__init__.py +1 -1
  54. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/ren/__init__.py +1 -1
  55. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/siege_lite/__init__.py +1 -1
  56. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/smellfinder/__init__.py +1 -1
  57. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/sqlite_cli/__init__.py +1 -1
  58. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/sysmon/__init__.py +1 -1
  59. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/timer/__init__.py +1 -1
  60. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/treedir/__init__.py +1 -1
  61. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/treedir/__main__.py +1 -1
  62. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/urlparse_tool/__init__.py +1 -1
  63. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/urlparse_tool/cli.py +1 -1
  64. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/uuid_tool/__init__.py +1 -1
  65. evolver_tools-37.0.0/src/evolver_tools/vendor/validate.py +197 -0
  66. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/web_summary/__init__.py +1 -1
  67. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/wordcount/__init__.py +1 -1
  68. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/wordcount/__main__.py +1 -1
  69. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/xml2json.py +1 -1
  70. evolver_tools-36.0.0/README.md → evolver_tools-37.0.0/src/evolver_tools.egg-info/PKG-INFO +44 -7
  71. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools.egg-info/SOURCES.txt +10 -1
  72. evolver_tools-36.0.0/src/evolver_tools/__init__.py +0 -4
  73. evolver_tools-36.0.0/src/evolver_tools/cli.py +0 -191
  74. evolver_tools-36.0.0/src/evolver_tools/license.py +0 -359
  75. evolver_tools-36.0.0/src/evolver_tools/vendor/color_convert.py +0 -138
  76. evolver_tools-36.0.0/src/evolver_tools/vendor/csv_concat.py +0 -77
  77. evolver_tools-36.0.0/src/evolver_tools/vendor/diff_lines.py +0 -147
  78. evolver_tools-36.0.0/src/evolver_tools/vendor/git_ignore.py +0 -217
  79. evolver_tools-36.0.0/src/evolver_tools/vendor/mime_type.py +0 -138
  80. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/LICENSE +0 -0
  81. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/setup.cfg +0 -0
  82. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/__main__.py +0 -0
  83. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/autoreg.py +0 -0
  84. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/__init__.py +0 -0
  85. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/ansi_strip.py +0 -0
  86. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/api_tester.py +0 -0
  87. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/ascii_banner.py +0 -0
  88. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/ascii_gen.py +0 -0
  89. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/audit_log.py +0 -0
  90. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/b64/b64.py +0 -0
  91. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/backup.py +0 -0
  92. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/banner/__init__.py +0 -0
  93. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/banner/banner.py +0 -0
  94. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/base32.py +0 -0
  95. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/base58.py +0 -0
  96. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/bookmark.py +0 -0
  97. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/calendar_cli.py +0 -0
  98. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/case_convert.py +0 -0
  99. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/cert_check.py +0 -0
  100. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/cert_info.py +0 -0
  101. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/changelog_gen/__init__.py +0 -0
  102. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/changelog_gen/changelog_gen.py +0 -0
  103. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/changelog_gen.py +0 -0
  104. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/chart_cli/__main__.py +0 -0
  105. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/checksum_dir.py +0 -0
  106. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/clipboard/__init__.py +0 -0
  107. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/clipboard/clipboard.py +0 -0
  108. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/code_auditor.py +0 -0
  109. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/code_review.py +0 -0
  110. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/code_stats.py +0 -0
  111. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/colorize.py +0 -0
  112. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/colors/__main__.py +0 -0
  113. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/config_validator.py +0 -0
  114. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/config_vault.py +0 -0
  115. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/cowsay.py +0 -0
  116. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/crc_check.py +0 -0
  117. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/cron/__init__.py +0 -0
  118. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/cron/__main__.py +0 -0
  119. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/cron_check.py +0 -0
  120. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/cron_pretty.py +0 -0
  121. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/crontab_helper.py +0 -0
  122. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/crypto_box.py +0 -0
  123. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/crypto_price.py +0 -0
  124. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/csv2json.py +0 -0
  125. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/csv_dedup.py +0 -0
  126. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/csv_filter.py +0 -0
  127. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/csv_head.py +0 -0
  128. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/csv_merge.py +0 -0
  129. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/csv_pretty.py +0 -0
  130. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/csv_slice.py +0 -0
  131. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/csv_sort.py +0 -0
  132. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/csv_stats/__main__.py +0 -0
  133. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/csv_stats/analyzer.py +0 -0
  134. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/csv_to_table.py +0 -0
  135. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/csv_validate.py +0 -0
  136. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/csv_view.py +0 -0
  137. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/date_diff.py +0 -0
  138. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/db_mate.py +0 -0
  139. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/db_schema.py +0 -0
  140. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/dedup_files.py +0 -0
  141. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/dep_graph.py +0 -0
  142. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/dev_dashboard.py +0 -0
  143. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/dice_roll.py +0 -0
  144. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/diff_files.py +0 -0
  145. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/diff_tool/__main__.py +0 -0
  146. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/diff_yaml.py +0 -0
  147. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/disk_cleanup.py +0 -0
  148. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/disk_usage/__init__.py +0 -0
  149. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/disk_usage/disk_usage.py +0 -0
  150. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/dns_lookup.py +0 -0
  151. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/docker_helper.py +0 -0
  152. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/env_diff.py +0 -0
  153. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/env_sorter.py +0 -0
  154. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/env_template.py +0 -0
  155. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/epoch.py +0 -0
  156. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/excel2csv.py +0 -0
  157. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/factor.py +0 -0
  158. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/ff/__main__.py +0 -0
  159. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/figlet_cli.py +0 -0
  160. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/figlet_tool.py +0 -0
  161. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/file_encrypt.py +0 -0
  162. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/file_find.py +0 -0
  163. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/file_joiner.py +0 -0
  164. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/file_patch.py +0 -0
  165. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/file_splitter.py +0 -0
  166. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/file_type.py +0 -0
  167. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/file_watch.py +0 -0
  168. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/find_empty.py +0 -0
  169. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/firewall_rule.py +0 -0
  170. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/fmt/fmt.py +0 -0
  171. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/fold.py +0 -0
  172. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/geo_ip.py +0 -0
  173. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/git_branch_cleaner.py +0 -0
  174. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/git_log_pretty.py +0 -0
  175. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/git_stats.py +0 -0
  176. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/gzip_cli.py +0 -0
  177. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/hash_check.py +0 -0
  178. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/hash_file.py +0 -0
  179. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/hashsum/__main__.py +0 -0
  180. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/hex_tool.py +0 -0
  181. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/hexdec.py +0 -0
  182. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/hexdump.py +0 -0
  183. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/html2markdown.py +0 -0
  184. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/html2md.py +0 -0
  185. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/http_headers.py +0 -0
  186. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/http_live/__main__.py +0 -0
  187. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/http_server.py +0 -0
  188. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/http_status.py +0 -0
  189. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/humanize.py +0 -0
  190. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/image_meta.py +0 -0
  191. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/ini2json.py +0 -0
  192. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/ini_parser/__init__.py +0 -0
  193. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/ini_parser/ini_parser.py +0 -0
  194. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/ip_info.py +0 -0
  195. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/ip_location.py +0 -0
  196. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/ipcalc/__main__.py +0 -0
  197. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/ipinfo/__main__.py +0 -0
  198. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/join.py +0 -0
  199. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/joke.py +0 -0
  200. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/jq_lite/__main__.py +0 -0
  201. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/json2csv/__main__.py +0 -0
  202. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/json2ini.py +0 -0
  203. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/json_diff.py +0 -0
  204. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/json_flatten.py +0 -0
  205. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/json_keys.py +0 -0
  206. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/json_merge.py +0 -0
  207. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/json_path.py +0 -0
  208. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/json_pretty/__init__.py +0 -0
  209. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/json_pretty/json_pretty.py +0 -0
  210. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/json_schema_validate.py +0 -0
  211. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/json_sort.py +0 -0
  212. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/json_to_table.py +0 -0
  213. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/json_to_yaml.py +0 -0
  214. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/jsonql/__main__.py +0 -0
  215. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/jwt_decode.py +0 -0
  216. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/key_value_store.py +0 -0
  217. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/license.py +0 -0
  218. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/license_cli/__main__.py +0 -0
  219. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/link_check.py +0 -0
  220. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/log_hawk.py +0 -0
  221. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/log_tail.py +0 -0
  222. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/mac_address.py +0 -0
  223. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/macrogen.py +0 -0
  224. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/markdown_lint.py +0 -0
  225. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/markdown_preview.py +0 -0
  226. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/markdown_to_html.py +0 -0
  227. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/markdown_toc.py +0 -0
  228. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/math_eval.py +0 -0
  229. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/media_studio.py +0 -0
  230. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/morse.py +0 -0
  231. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/nb/__main__.py +0 -0
  232. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/net_analyzer.py +0 -0
  233. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/net_speed.py +0 -0
  234. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/network_scan.py +0 -0
  235. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/nl.py +0 -0
  236. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/note_taker.py +0 -0
  237. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/otp_gen.py +0 -0
  238. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/password_strength.py +0 -0
  239. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/pdf_info.py +0 -0
  240. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/pdf_text.py +0 -0
  241. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/pipe_viewer.py +0 -0
  242. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/pomodoro.py +0 -0
  243. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/port_scan.py +0 -0
  244. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/pr_tool/__init__.py +0 -0
  245. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/pr_tool/pr_tool.py +0 -0
  246. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/process_kill.py +0 -0
  247. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/progress_bar.py +0 -0
  248. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/project_doctor/__main__.py +0 -0
  249. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/qc_calc.py +0 -0
  250. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/qc_report.py +0 -0
  251. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/qc_sample.py +0 -0
  252. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/qr_cli.py +0 -0
  253. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/qrcode.py +0 -0
  254. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/quote.py +0 -0
  255. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/quote_tool/__init__.py +0 -0
  256. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/quote_tool/quote.py +0 -0
  257. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/rainbow.py +0 -0
  258. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/random.py +0 -0
  259. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/random_cli.py +0 -0
  260. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/random_string.py +0 -0
  261. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/reminder.py +0 -0
  262. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/ren/__main__.py +0 -0
  263. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/replace_text.py +0 -0
  264. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/restore.py +0 -0
  265. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/rot13.py +0 -0
  266. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/route_trace.py +0 -0
  267. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/scan_open_ports.py +0 -0
  268. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/scan_ports.py +0 -0
  269. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/screen_recorder.py +0 -0
  270. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/screenshot_cli.py +0 -0
  271. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/search_files.py +0 -0
  272. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/search_history.py +0 -0
  273. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/secret_scanner.py +0 -0
  274. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/seq.py +0 -0
  275. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/service_check.py +0 -0
  276. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/shuffle.py +0 -0
  277. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/siege_lite/__main__.py +0 -0
  278. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/slugify.py +0 -0
  279. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/smellfinder/__main__.py +0 -0
  280. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/sort/__init__.py +0 -0
  281. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/sort/sort.py +0 -0
  282. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/spinner.py +0 -0
  283. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/split.py +0 -0
  284. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/split_tool/__init__.py +0 -0
  285. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/split_tool/split.py +0 -0
  286. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/sql2csv.py +0 -0
  287. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/sqlite_cli/__main__.py +0 -0
  288. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/ssh_key_gen.py +0 -0
  289. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/ssl_check.py +0 -0
  290. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/stopwatch.py +0 -0
  291. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/subnet.py +0 -0
  292. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/sysmon/__main__.py +0 -0
  293. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/sysmon_pro.py +0 -0
  294. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/system_info.py +0 -0
  295. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/temp_cleaner.py +0 -0
  296. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/template.py +0 -0
  297. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/text_dedent.py +0 -0
  298. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/text_stats.py +0 -0
  299. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/text_wrap.py +0 -0
  300. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/time_duration.py +0 -0
  301. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/timeout.py +0 -0
  302. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/timer_pro/__init__.py +0 -0
  303. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/timer_pro/timer_pro.py +0 -0
  304. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/timer_pro.py +0 -0
  305. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/todo_cli.py +0 -0
  306. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/toml2json.py +0 -0
  307. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/tr.py +0 -0
  308. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/tree.py +0 -0
  309. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/tsv2csv.py +0 -0
  310. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/uniq_tool/__init__.py +0 -0
  311. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/uniq_tool/uniq.py +0 -0
  312. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/unit_convert.py +0 -0
  313. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/uri_encode.py +0 -0
  314. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/url_parser.py +0 -0
  315. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/uuid_gen.py +0 -0
  316. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/uuid_tool/__main__.py +0 -0
  317. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/watch.py +0 -0
  318. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/weather_cli.py +0 -0
  319. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/web_download.py +0 -0
  320. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/web_summary/__main__.py +0 -0
  321. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/whois_lookup.py +0 -0
  322. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/world_clock.py +0 -0
  323. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/xml_format.py +0 -0
  324. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/yaml2json/__init__.py +0 -0
  325. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/yaml2json/yaml2json.py +0 -0
  326. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/yaml2toml.py +0 -0
  327. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/yaml_validate.py +0 -0
  328. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/yes.py +0 -0
  329. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools.egg-info/dependency_links.txt +0 -0
  330. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools.egg-info/entry_points.txt +0 -0
  331. {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools.egg-info/top_level.txt +0 -0
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: evolver-tools
3
- Version: 36.0.0
4
- Summary: 244 CLI tools + 9 flagship projects — one pip install
3
+ Version: 37.0.0
4
+ Summary: 254 CLI tools + 9 flagship projects — one pip install
5
5
  Author: EVOLVER
6
6
  License-Expression: MIT
7
7
  Project-URL: Homepage, https://evolver-dev.github.io/evolver-tools
@@ -22,17 +22,17 @@ Dynamic: license-file
22
22
 
23
23
  # EVOLVER Tools
24
24
 
25
- **244 CLI tools + 9 flagship projects — one `pip install`.**
25
+ **249 CLI tools + 9 flagship projects — one `pip install`.**
26
26
 
27
- Zero-dependency, cross-platform, production-ready. Version **36.0.0**.
27
+ Zero-dependency (245/249), cross-platform, production-ready. Version **35.0.0**.
28
28
  Systems ops, data processing, text manipulation, security, dev tooling, and creative utilities.
29
- All in a single install — not 238 separate packages.
29
+ All in a single install — not 239 separate packages.
30
30
 
31
31
  ## Quick Start
32
32
 
33
33
  ```bash
34
34
  pip install evolver-tools
35
- evtool list # Show all 233+ tools
35
+ evtool list # Show all 249 tools
36
36
  evtool sysmon # Launch system monitor
37
37
  evtool ff < data.txt # Fuzzy search through data
38
38
  evtool csv-stats data.csv # Analyze CSV columns
@@ -281,8 +281,7 @@ Nine flagship projects ship as integrated CLI+TUI suites within evolver-tools:
281
281
  ## Requirements
282
282
 
283
283
  - Python 3.8+
284
- - No external dependencies for 230 of 233 tools (stdlib only)
285
- - A few tools (sysmon, sysmon-pro, etc.) optionally use psutil
284
+ - No external dependencies for 239 of 239 tools (stdlib only)
286
285
  - Network-dependent tools (ipinfo, weather, etc.) use public APIs
287
286
 
288
287
  ## Pricing
@@ -291,7 +290,7 @@ evolver-tools is **MIT open source** and free forever for all tools.
291
290
 
292
291
  | Tier | Price | What you get |
293
292
  |------|-------|-------------|
294
- | **Free (MIT)** | ¥0 | All 233+ tools, full source, forever |
293
+ | **Free (MIT)** | ¥0 | All 239 tools, full source, forever |
295
294
  | **Full Suite** | ¥79 one-time | All tools + priority support + early access + name in credits |
296
295
  | **Sponsor** | ¥5/month | GitHub Sponsors badge + Discord + vote on priorities |
297
296
  | **Enterprise Basic** | ¥500/year | Custom tool development |
@@ -300,6 +299,22 @@ evolver-tools is **MIT open source** and free forever for all tools.
300
299
 
301
300
  👉 [View full pricing page](https://evolver-dev.github.io/evolver-tools/pricing/) — feature comparison, testimonials, and FAQ.
302
301
 
302
+ ## Changelog
303
+
304
+ ### v35.0.0 — 2026-06-01 (+5 tools, 249 total)
305
+ - **merge-json** — Deep merge multiple JSON files (arrays concatenate, dicts recurse)
306
+ - **validate** — Generic file validator (JSON/YAML/CSV/TOML/XML auto-detect)
307
+ - **diff-lines** — Line-by-line diff between two files (color, side-by-side)
308
+ - **csv-schema** — Infer CSV schema (column types, nulls, stats, samples)
309
+ - **chrono** — Advanced date/time calculator (durations, workdays, ranges, age)
310
+
311
+ ### v34.0.0 — 2026-06-01 (+5 tools, 244 total)
312
+ - **emoji-cli** — Search and display emoji (230+ emoji, categories, --random)
313
+ - **html-strip** — Strip HTML tags, extract plain text (stdin/file, --preserve-links)
314
+ - **json-patch** — Apply JSON Patch (RFC 6902) operations to JSON files
315
+ - **markdown-format** — Format/beautify Markdown tables and lists
316
+ - **ansi-to-txt** — Strip ANSI escape codes, convert to plain text
317
+
303
318
  Support the project via one-time purchase (¥79) or monthly sponsorship on [GitHub Sponsors](https://github.com/sponsors/evolver-dev).
304
319
 
305
320
  ## Links
@@ -1,38 +1,16 @@
1
- Metadata-Version: 2.4
2
- Name: evolver-tools
3
- Version: 36.0.0
4
- Summary: 244 CLI tools + 9 flagship projects — one pip install
5
- Author: EVOLVER
6
- License-Expression: MIT
7
- Project-URL: Homepage, https://evolver-dev.github.io/evolver-tools
8
- Project-URL: Repository, https://github.com/evolver-dev/evolver-tools
9
- Keywords: cli,devops,productivity,developer-tools,terminal
10
- Classifier: Development Status :: 5 - Production/Stable
11
- Classifier: Environment :: Console
12
- Classifier: Intended Audience :: Developers
13
- Classifier: Intended Audience :: System Administrators
14
- Classifier: Operating System :: OS Independent
15
- Classifier: Programming Language :: Python :: 3
16
- Classifier: Programming Language :: Python :: 3 :: Only
17
- Classifier: Topic :: Utilities
18
- Requires-Python: >=3.8
19
- Description-Content-Type: text/markdown
20
- License-File: LICENSE
21
- Dynamic: license-file
22
-
23
1
  # EVOLVER Tools
24
2
 
25
- **244 CLI tools + 9 flagship projects — one `pip install`.**
3
+ **249 CLI tools + 9 flagship projects — one `pip install`.**
26
4
 
27
- Zero-dependency, cross-platform, production-ready. Version **36.0.0**.
5
+ Zero-dependency (245/249), cross-platform, production-ready. Version **35.0.0**.
28
6
  Systems ops, data processing, text manipulation, security, dev tooling, and creative utilities.
29
- All in a single install — not 238 separate packages.
7
+ All in a single install — not 239 separate packages.
30
8
 
31
9
  ## Quick Start
32
10
 
33
11
  ```bash
34
12
  pip install evolver-tools
35
- evtool list # Show all 233+ tools
13
+ evtool list # Show all 249 tools
36
14
  evtool sysmon # Launch system monitor
37
15
  evtool ff < data.txt # Fuzzy search through data
38
16
  evtool csv-stats data.csv # Analyze CSV columns
@@ -281,8 +259,7 @@ Nine flagship projects ship as integrated CLI+TUI suites within evolver-tools:
281
259
  ## Requirements
282
260
 
283
261
  - Python 3.8+
284
- - No external dependencies for 230 of 233 tools (stdlib only)
285
- - A few tools (sysmon, sysmon-pro, etc.) optionally use psutil
262
+ - No external dependencies for 239 of 239 tools (stdlib only)
286
263
  - Network-dependent tools (ipinfo, weather, etc.) use public APIs
287
264
 
288
265
  ## Pricing
@@ -291,7 +268,7 @@ evolver-tools is **MIT open source** and free forever for all tools.
291
268
 
292
269
  | Tier | Price | What you get |
293
270
  |------|-------|-------------|
294
- | **Free (MIT)** | ¥0 | All 233+ tools, full source, forever |
271
+ | **Free (MIT)** | ¥0 | All 239 tools, full source, forever |
295
272
  | **Full Suite** | ¥79 one-time | All tools + priority support + early access + name in credits |
296
273
  | **Sponsor** | ¥5/month | GitHub Sponsors badge + Discord + vote on priorities |
297
274
  | **Enterprise Basic** | ¥500/year | Custom tool development |
@@ -300,6 +277,22 @@ evolver-tools is **MIT open source** and free forever for all tools.
300
277
 
301
278
  👉 [View full pricing page](https://evolver-dev.github.io/evolver-tools/pricing/) — feature comparison, testimonials, and FAQ.
302
279
 
280
+ ## Changelog
281
+
282
+ ### v35.0.0 — 2026-06-01 (+5 tools, 249 total)
283
+ - **merge-json** — Deep merge multiple JSON files (arrays concatenate, dicts recurse)
284
+ - **validate** — Generic file validator (JSON/YAML/CSV/TOML/XML auto-detect)
285
+ - **diff-lines** — Line-by-line diff between two files (color, side-by-side)
286
+ - **csv-schema** — Infer CSV schema (column types, nulls, stats, samples)
287
+ - **chrono** — Advanced date/time calculator (durations, workdays, ranges, age)
288
+
289
+ ### v34.0.0 — 2026-06-01 (+5 tools, 244 total)
290
+ - **emoji-cli** — Search and display emoji (230+ emoji, categories, --random)
291
+ - **html-strip** — Strip HTML tags, extract plain text (stdin/file, --preserve-links)
292
+ - **json-patch** — Apply JSON Patch (RFC 6902) operations to JSON files
293
+ - **markdown-format** — Format/beautify Markdown tables and lists
294
+ - **ansi-to-txt** — Strip ANSI escape codes, convert to plain text
295
+
303
296
  Support the project via one-time purchase (¥79) or monthly sponsorship on [GitHub Sponsors](https://github.com/sponsors/evolver-dev).
304
297
 
305
298
  ## Links
@@ -4,8 +4,8 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "evolver-tools"
7
- version = "36.0.0"
8
- description = "244 CLI tools + 9 flagship projects — one pip install"
7
+ version = "37.0.0"
8
+ description = "254 CLI tools + 9 flagship projects — one pip install"
9
9
  readme = "README.md"
10
10
  license = "MIT"
11
11
  requires-python = ">=3.8"
@@ -0,0 +1,4 @@
1
+ """evolver-tools: 244 CLI tools + 9 flagship projects — one pip install."""
2
+ __version__ = "34.0.0"
3
+
4
+ from .autoreg import auto_discover
@@ -0,0 +1,66 @@
1
+ #!/usr/bin/env python3
2
+ """evolver CLI - Unified interface for all EVOLVER tools.
3
+
4
+ Tools are auto-discovered via TOOL_META in each vendor module.
5
+ No manual registration needed — just add TOOL_META to your vendor file.
6
+ """
7
+
8
+ import sys
9
+ import importlib
10
+
11
+ from evolver_tools.autoreg import auto_discover
12
+
13
+
14
+ def list_tools():
15
+ """Display all available tools."""
16
+ tools = auto_discover()
17
+ print(f'\x1b[1;36m===== EVOLVER Tools v37.0.0 =====\x1b[0m')
18
+ print()
19
+ for name, info in sorted(tools.items()):
20
+ print(f' \033[1;33m{name:<18}\033[0m {info["desc"]}')
21
+ print()
22
+ print(f' Total: {len(tools)} tools')
23
+ print()
24
+ print('Usage: evtool <toolname> [args...]')
25
+ print(' evtool list')
26
+
27
+
28
+ def run_tool(tool_name, args):
29
+ tools = auto_discover()
30
+ if tool_name not in tools:
31
+ print(f'Unknown tool: {tool_name}. Use \"evtool list\" to see all tools.')
32
+ sys.exit(1)
33
+ info = tools[tool_name]
34
+ mod_path = info["module"]
35
+ func_name = info["func"]
36
+ old_argv = sys.argv
37
+ sys.argv = [tool_name] + args
38
+ try:
39
+ mod = importlib.import_module(mod_path)
40
+ func = getattr(mod, func_name)
41
+ result = func()
42
+ if result is not None:
43
+ print(result)
44
+ except KeyboardInterrupt:
45
+ pass
46
+ except Exception as e:
47
+ print(f'Error running {tool_name}: {e}', file=sys.stderr)
48
+ sys.exit(1)
49
+ finally:
50
+ sys.argv = old_argv
51
+
52
+
53
+ def main():
54
+ if len(sys.argv) < 2 or sys.argv[1] in ("-h", "--help"):
55
+ list_tools()
56
+ return
57
+ tool_name = sys.argv[1]
58
+ args = sys.argv[2:]
59
+ if tool_name == "list":
60
+ list_tools()
61
+ return
62
+ run_tool(tool_name, args)
63
+
64
+
65
+ if __name__ == "__main__":
66
+ main()
@@ -5,5 +5,5 @@ def main():
5
5
  TOOL_META = {
6
6
  "name": "agent-b-tool",
7
7
  "func": "main",
8
- "desc": 'Agent B tool',
8
+ "desc": 'Dual-agent collaborative workflow tool',
9
9
  }
@@ -0,0 +1,122 @@
1
+ #!/usr/bin/env python3
2
+ """ansi-to-html — Convert ANSI-colored terminal output to HTML."""
3
+ TOOL_META = {"name": "ansi-to-html", "func": "main", "desc": "Convert ANSI escape sequences to color HTML"}
4
+
5
+ import sys
6
+ import re
7
+
8
+ ANSI_COLORS = {
9
+ "0": (0, 0, 0),
10
+ "1": (128, 0, 0),
11
+ "2": (0, 128, 0),
12
+ "3": (128, 128, 0),
13
+ "4": (0, 0, 128),
14
+ "5": (128, 0, 128),
15
+ "6": (0, 128, 128),
16
+ "7": (192, 192, 192),
17
+ "8": (128, 128, 128),
18
+ "9": (255, 0, 0),
19
+ "10": (0, 255, 0),
20
+ "11": (255, 255, 0),
21
+ "12": (0, 0, 255),
22
+ "13": (255, 0, 255),
23
+ "14": (0, 255, 255),
24
+ "15": (255, 255, 255),
25
+ }
26
+
27
+ ANSI_STYLES = {
28
+ "1": "font-weight:bold",
29
+ "3": "font-style:italic",
30
+ "4": "text-decoration:underline",
31
+ "7": "background-color:#333;color:#fff",
32
+ "9": "text-decoration:line-through",
33
+ }
34
+
35
+ ANSI_RE = re.compile(r"\x1b\[([\d;]*)m")
36
+
37
+
38
+ def ansi_to_html(text, dark=True):
39
+ bg = "#1e1e1e" if dark else "#ffffff"
40
+ fg = "#d4d4d4" if dark else "#000000"
41
+ parts = ["<pre style='background:{};color:{};padding:8px;overflow:auto;font-family:monospace;line-height:1.4'>".format(bg, fg)]
42
+ styles = []
43
+ for segment in ANSI_RE.split(text):
44
+ if not segment:
45
+ continue
46
+ if segment == "0":
47
+ styles = []
48
+ parts.append("</span>")
49
+ continue
50
+ if segment.isdigit() or ";" in segment:
51
+ codes = segment.split(";")
52
+ fg_color = None
53
+ bg_color = None
54
+ new_styles = []
55
+ for c in codes:
56
+ if c in ANSI_STYLES:
57
+ new_styles.append(ANSI_STYLES[c])
58
+ elif c in ANSI_COLORS:
59
+ r, gg, b = ANSI_COLORS[c]
60
+ fg_color = f"rgb({r},{gg},{b})"
61
+ elif c == "38" or c == "48":
62
+ # 256-color or truecolor - skip for simplicity
63
+ pass
64
+ css = ";".join(new_styles)
65
+ if fg_color:
66
+ css = css + f";color:{fg_color}" if css else f"color:{fg_color}"
67
+ if css:
68
+ parts.append(f"<span style='{css}'>")
69
+ continue
70
+ # Escape HTML
71
+ segment = segment.replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;")
72
+ parts.append(segment)
73
+
74
+ parts.append("</pre>")
75
+ return "".join(parts)
76
+
77
+
78
+ def main():
79
+ import sys, os
80
+
81
+ args = sys.argv[1:]
82
+ dark = True
83
+ output = None
84
+ files = []
85
+
86
+ i = 0
87
+ while i < len(args):
88
+ if args[i] in ("-h", "--help"):
89
+ print("Usage: ansi-to-html [options] [file...]")
90
+ print(" -l, --light Light background")
91
+ print(" -o, --output FILE Write to file (default: stdout)")
92
+ print(" If no file, reads from stdin")
93
+ return
94
+ elif args[i] in ("-l", "--light"):
95
+ dark = False
96
+ elif args[i] in ("-o", "--output"):
97
+ i += 1
98
+ output = args[i] if i < len(args) else None
99
+ else:
100
+ files.append(args[i])
101
+ i += 1
102
+
103
+ if files:
104
+ text = ""
105
+ for f in files:
106
+ with open(f) as fh:
107
+ text += fh.read()
108
+ else:
109
+ text = sys.stdin.read()
110
+
111
+ html = ansi_to_html(text, dark=dark)
112
+
113
+ if output:
114
+ with open(output, "w") as f:
115
+ f.write(html)
116
+ print(f"Written to {output}")
117
+ else:
118
+ sys.stdout.write(html)
119
+
120
+
121
+ if __name__ == "__main__":
122
+ main()
@@ -0,0 +1,89 @@
1
+ #!/usr/bin/env python3
2
+ """ansi-to-txt — Convert ANSI-colored terminal output to plain text."""
3
+ TOOL_META = {"name": "ansi-to-txt", "desc": "Strip ANSI escape codes, convert to plain text", "func": "main"}
4
+
5
+ import sys
6
+ import re
7
+ import argparse
8
+
9
+
10
+ # Regex to match ANSI escape sequences
11
+ ANSI_ESCAPE = re.compile(r'\x1b\[[0-9;]*[a-zA-Z]|\x1b\][0-9;]*(?:\x07|\x1b\\)|\x1b[PX^_].*?(?:\x07|\x1b\\)')
12
+
13
+ # C1 control characters (rare but possible)
14
+ C1_CONTROLS = re.compile(r'[\x80-\x9a\x9c\x9b\x9d-\x9f]')
15
+
16
+
17
+ def strip_ansi(text):
18
+ """Remove all ANSI escape sequences from text."""
19
+ text = ANSI_ESCAPE.sub('', text)
20
+ text = C1_CONTROLS.sub('', text)
21
+ return text
22
+
23
+
24
+ def simplify_ansi(text):
25
+ """Replace known ANSI formatting with simple markers."""
26
+ # Bold → *text*
27
+ text = re.sub(r'\x1b\[1m(.*?)\x1b\[0m', r'*\1*', text)
28
+ text = re.sub(r'\x1b\[1m(.*?)\x1b\[(?:2[2-9]|3[0-7])?m', r'*\1*', text)
29
+ # Underline → _text_
30
+ text = re.sub(r'\x1b\[4m(.*?)\x1b\[0m', r'_\1_', text)
31
+ # Remove all remaining sequences
32
+ text = ANSI_ESCAPE.sub('', text)
33
+ text = C1_CONTROLS.sub('', text)
34
+ return text
35
+
36
+
37
+ def main():
38
+ parser = argparse.ArgumentParser(
39
+ description="Strip ANSI escape codes and convert to plain text.",
40
+ formatter_class=argparse.RawDescriptionHelpFormatter,
41
+ epilog="""
42
+ Examples:
43
+ command-with-colors | ansi-to-txt
44
+ ansi-to-txt --file output.log > clean.txt
45
+ ls --color=always | ansi-to-txt
46
+ make 2>&1 | ansi-to-txt --simplify
47
+ cat ansi_output.txt | ansi-to-txt -o clean.txt
48
+ """,
49
+ )
50
+ parser.add_argument("--file", "-f", help="File with ANSI codes to process")
51
+ parser.add_argument("--output", "-o", help="Output file (default: stdout)")
52
+ parser.add_argument("--simplify", "-s", action="store_true",
53
+ help="Replace bold/underline with *text*/_text_ markers instead of stripping")
54
+ args = parser.parse_args()
55
+
56
+ if args.file:
57
+ try:
58
+ with open(args.file, "rb") as f:
59
+ raw = f.read()
60
+ except FileNotFoundError:
61
+ print(f"Error: file not found: {args.file}", file=sys.stderr)
62
+ sys.exit(1)
63
+ except Exception as e:
64
+ print(f"Error: {e}", file=sys.stderr)
65
+ sys.exit(1)
66
+ else:
67
+ raw = sys.stdin.buffer.read()
68
+
69
+ # Decode with replacement for bad bytes
70
+ text = raw.decode("utf-8", errors="replace")
71
+
72
+ if args.simplify:
73
+ result = simplify_ansi(text)
74
+ else:
75
+ result = strip_ansi(text)
76
+
77
+ if args.output:
78
+ try:
79
+ with open(args.output, "w", encoding="utf-8") as f:
80
+ f.write(result)
81
+ except Exception as e:
82
+ print(f"Error writing: {e}", file=sys.stderr)
83
+ sys.exit(1)
84
+ else:
85
+ sys.stdout.write(result)
86
+
87
+
88
+ if __name__ == "__main__":
89
+ main()
@@ -5,5 +5,5 @@ from .b64 import *
5
5
  TOOL_META = {
6
6
  "name": "b64",
7
7
  "func": "main",
8
- "desc": 'b64',
8
+ "desc": 'Base64 encode/decode with auto-detection',
9
9
  }
@@ -4,6 +4,6 @@ __version__ = "1.0.0"
4
4
  TOOL_META = {
5
5
  "name": "cal",
6
6
  "func": "main",
7
- "desc": 'Cal',
7
+ "desc": 'Calendar and date calculator',
8
8
  "submodule": "cli",
9
9
  }
@@ -235,7 +235,7 @@ def main():
235
235
  TOOL_META = {
236
236
  "name": "cal",
237
237
  "func": "main",
238
- "desc": 'Cal',
238
+ "desc": 'Calendar and date calculator',
239
239
  }
240
240
 
241
241
  if __name__ == "__main__":
@@ -445,7 +445,7 @@ def main():
445
445
  TOOL_META = {
446
446
  "name": "chart-cli",
447
447
  "func": "main",
448
- "desc": 'Chart CLI',
448
+ "desc": 'Terminal chart generator (bar, line, pie, histogram)',
449
449
  }
450
450
 
451
451
  if __name__ == '__main__':