evolver-tools 34.0.0__tar.gz → 36.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 (321) hide show
  1. {evolver_tools-34.0.0/src/evolver_tools.egg-info → evolver_tools-36.0.0}/PKG-INFO +7 -6
  2. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/README.md +6 -5
  3. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/pyproject.toml +1 -1
  4. evolver_tools-36.0.0/src/evolver_tools/__init__.py +4 -0
  5. evolver_tools-36.0.0/src/evolver_tools/cli.py +191 -0
  6. evolver_tools-36.0.0/src/evolver_tools/license.py +359 -0
  7. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/agent_b_tool.py +1 -1
  8. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/b64/__init__.py +1 -1
  9. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/cal_tool/__init__.py +1 -1
  10. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/cal_tool/cli.py +1 -1
  11. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/chart_cli/__init__.py +1 -1
  12. evolver_tools-36.0.0/src/evolver_tools/vendor/color_convert.py +138 -0
  13. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/colors/__init__.py +1 -1
  14. evolver_tools-36.0.0/src/evolver_tools/vendor/csv_concat.py +77 -0
  15. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/csv_stats/__init__.py +1 -1
  16. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/csv_stats/cli.py +1 -1
  17. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/diff_csv.py +1 -1
  18. evolver_tools-36.0.0/src/evolver_tools/vendor/diff_lines.py +147 -0
  19. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/diff_tool/__init__.py +1 -1
  20. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/dirsize/__init__.py +1 -1
  21. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/dt_convert.py +1 -1
  22. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/env_manager.py +1 -1
  23. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/envcheck/__init__.py +1 -1
  24. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/ff/__init__.py +1 -1
  25. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/find_dups/__init__.py +1 -1
  26. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/find_dups/cli.py +1 -1
  27. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/fmt/__init__.py +1 -1
  28. evolver_tools-36.0.0/src/evolver_tools/vendor/git_ignore.py +217 -0
  29. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/hashsum/__init__.py +1 -1
  30. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/http_live/__init__.py +1 -1
  31. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/ipcalc/__init__.py +1 -1
  32. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/ipinfo/__init__.py +1 -1
  33. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/jq_lite/__init__.py +1 -1
  34. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/json2csv/__init__.py +1 -1
  35. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/jsonql/__init__.py +1 -1
  36. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/license_cli/__init__.py +1 -1
  37. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/license_cli/cli.py +1 -1
  38. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/log_analyzer.py +1 -1
  39. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/markdown_check/__init__.py +1 -1
  40. evolver_tools-36.0.0/src/evolver_tools/vendor/mime_type.py +138 -0
  41. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/nb/__init__.py +1 -1
  42. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/passgen/__init__.py +1 -1
  43. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/portcheck/__init__.py +1 -1
  44. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/portcheck/__main__.py +1 -1
  45. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/project_doctor/__init__.py +1 -1
  46. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/ren/__init__.py +1 -1
  47. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/siege_lite/__init__.py +1 -1
  48. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/smellfinder/__init__.py +1 -1
  49. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/sqlite_cli/__init__.py +1 -1
  50. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/sysmon/__init__.py +1 -1
  51. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/timer/__init__.py +1 -1
  52. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/treedir/__init__.py +1 -1
  53. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/treedir/__main__.py +1 -1
  54. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/urlparse_tool/__init__.py +1 -1
  55. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/urlparse_tool/cli.py +1 -1
  56. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/uuid_tool/__init__.py +1 -1
  57. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/web_summary/__init__.py +1 -1
  58. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/wordcount/__init__.py +1 -1
  59. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/wordcount/__main__.py +1 -1
  60. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/xml2json.py +1 -1
  61. {evolver_tools-34.0.0 → evolver_tools-36.0.0/src/evolver_tools.egg-info}/PKG-INFO +7 -6
  62. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools.egg-info/SOURCES.txt +6 -5
  63. evolver_tools-34.0.0/src/evolver_tools/__init__.py +0 -4
  64. evolver_tools-34.0.0/src/evolver_tools/cli.py +0 -66
  65. evolver_tools-34.0.0/src/evolver_tools/vendor/ansi_to_txt.py +0 -89
  66. evolver_tools-34.0.0/src/evolver_tools/vendor/emoji_cli.py +0 -465
  67. evolver_tools-34.0.0/src/evolver_tools/vendor/html_strip.py +0 -143
  68. evolver_tools-34.0.0/src/evolver_tools/vendor/json_patch.py +0 -319
  69. evolver_tools-34.0.0/src/evolver_tools/vendor/markdown_format.py +0 -246
  70. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/LICENSE +0 -0
  71. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/setup.cfg +0 -0
  72. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/__main__.py +0 -0
  73. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/autoreg.py +0 -0
  74. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/__init__.py +0 -0
  75. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/ansi_strip.py +0 -0
  76. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/api_tester.py +0 -0
  77. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/ascii_banner.py +0 -0
  78. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/ascii_gen.py +0 -0
  79. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/audit_log.py +0 -0
  80. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/b64/b64.py +0 -0
  81. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/backup.py +0 -0
  82. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/banner/__init__.py +0 -0
  83. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/banner/banner.py +0 -0
  84. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/base32.py +0 -0
  85. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/base58.py +0 -0
  86. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/bookmark.py +0 -0
  87. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/calendar_cli.py +0 -0
  88. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/case_convert.py +0 -0
  89. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/cert_check.py +0 -0
  90. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/cert_info.py +0 -0
  91. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/changelog_gen/__init__.py +0 -0
  92. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/changelog_gen/changelog_gen.py +0 -0
  93. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/changelog_gen.py +0 -0
  94. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/chart_cli/__main__.py +0 -0
  95. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/checksum_dir.py +0 -0
  96. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/clipboard/__init__.py +0 -0
  97. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/clipboard/clipboard.py +0 -0
  98. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/code_auditor.py +0 -0
  99. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/code_review.py +0 -0
  100. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/code_stats.py +0 -0
  101. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/colorize.py +0 -0
  102. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/colors/__main__.py +0 -0
  103. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/config_validator.py +0 -0
  104. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/config_vault.py +0 -0
  105. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/cowsay.py +0 -0
  106. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/crc_check.py +0 -0
  107. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/cron/__init__.py +0 -0
  108. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/cron/__main__.py +0 -0
  109. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/cron_check.py +0 -0
  110. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/cron_pretty.py +0 -0
  111. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/crontab_helper.py +0 -0
  112. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/crypto_box.py +0 -0
  113. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/crypto_price.py +0 -0
  114. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/csv2json.py +0 -0
  115. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/csv_dedup.py +0 -0
  116. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/csv_filter.py +0 -0
  117. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/csv_head.py +0 -0
  118. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/csv_merge.py +0 -0
  119. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/csv_pretty.py +0 -0
  120. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/csv_slice.py +0 -0
  121. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/csv_sort.py +0 -0
  122. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/csv_stats/__main__.py +0 -0
  123. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/csv_stats/analyzer.py +0 -0
  124. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/csv_to_table.py +0 -0
  125. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/csv_validate.py +0 -0
  126. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/csv_view.py +0 -0
  127. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/date_diff.py +0 -0
  128. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/db_mate.py +0 -0
  129. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/db_schema.py +0 -0
  130. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/dedup_files.py +0 -0
  131. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/dep_graph.py +0 -0
  132. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/dev_dashboard.py +0 -0
  133. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/dice_roll.py +0 -0
  134. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/diff_files.py +0 -0
  135. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/diff_tool/__main__.py +0 -0
  136. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/diff_yaml.py +0 -0
  137. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/disk_cleanup.py +0 -0
  138. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/disk_usage/__init__.py +0 -0
  139. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/disk_usage/disk_usage.py +0 -0
  140. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/dns_lookup.py +0 -0
  141. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/docker_helper.py +0 -0
  142. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/env_diff.py +0 -0
  143. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/env_sorter.py +0 -0
  144. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/env_template.py +0 -0
  145. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/epoch.py +0 -0
  146. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/excel2csv.py +0 -0
  147. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/factor.py +0 -0
  148. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/ff/__main__.py +0 -0
  149. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/figlet_cli.py +0 -0
  150. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/figlet_tool.py +0 -0
  151. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/file_encrypt.py +0 -0
  152. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/file_find.py +0 -0
  153. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/file_joiner.py +0 -0
  154. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/file_patch.py +0 -0
  155. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/file_splitter.py +0 -0
  156. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/file_type.py +0 -0
  157. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/file_watch.py +0 -0
  158. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/find_empty.py +0 -0
  159. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/firewall_rule.py +0 -0
  160. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/fmt/fmt.py +0 -0
  161. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/fold.py +0 -0
  162. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/geo_ip.py +0 -0
  163. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/git_branch_cleaner.py +0 -0
  164. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/git_log_pretty.py +0 -0
  165. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/git_stats.py +0 -0
  166. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/gzip_cli.py +0 -0
  167. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/hash_check.py +0 -0
  168. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/hash_file.py +0 -0
  169. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/hashsum/__main__.py +0 -0
  170. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/hex_tool.py +0 -0
  171. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/hexdec.py +0 -0
  172. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/hexdump.py +0 -0
  173. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/html2markdown.py +0 -0
  174. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/html2md.py +0 -0
  175. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/http_headers.py +0 -0
  176. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/http_live/__main__.py +0 -0
  177. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/http_server.py +0 -0
  178. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/http_status.py +0 -0
  179. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/humanize.py +0 -0
  180. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/image_meta.py +0 -0
  181. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/ini2json.py +0 -0
  182. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/ini_parser/__init__.py +0 -0
  183. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/ini_parser/ini_parser.py +0 -0
  184. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/ip_info.py +0 -0
  185. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/ip_location.py +0 -0
  186. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/ipcalc/__main__.py +0 -0
  187. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/ipinfo/__main__.py +0 -0
  188. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/join.py +0 -0
  189. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/joke.py +0 -0
  190. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/jq_lite/__main__.py +0 -0
  191. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/json2csv/__main__.py +0 -0
  192. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/json2ini.py +0 -0
  193. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/json_diff.py +0 -0
  194. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/json_flatten.py +0 -0
  195. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/json_keys.py +0 -0
  196. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/json_merge.py +0 -0
  197. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/json_path.py +0 -0
  198. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/json_pretty/__init__.py +0 -0
  199. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/json_pretty/json_pretty.py +0 -0
  200. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/json_schema_validate.py +0 -0
  201. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/json_sort.py +0 -0
  202. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/json_to_table.py +0 -0
  203. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/json_to_yaml.py +0 -0
  204. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/jsonql/__main__.py +0 -0
  205. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/jwt_decode.py +0 -0
  206. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/key_value_store.py +0 -0
  207. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/license.py +0 -0
  208. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/license_cli/__main__.py +0 -0
  209. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/link_check.py +0 -0
  210. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/log_hawk.py +0 -0
  211. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/log_tail.py +0 -0
  212. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/mac_address.py +0 -0
  213. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/macrogen.py +0 -0
  214. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/markdown_lint.py +0 -0
  215. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/markdown_preview.py +0 -0
  216. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/markdown_to_html.py +0 -0
  217. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/markdown_toc.py +0 -0
  218. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/math_eval.py +0 -0
  219. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/media_studio.py +0 -0
  220. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/morse.py +0 -0
  221. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/nb/__main__.py +0 -0
  222. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/net_analyzer.py +0 -0
  223. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/net_speed.py +0 -0
  224. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/network_scan.py +0 -0
  225. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/nl.py +0 -0
  226. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/note_taker.py +0 -0
  227. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/otp_gen.py +0 -0
  228. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/password_strength.py +0 -0
  229. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/pdf_info.py +0 -0
  230. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/pdf_text.py +0 -0
  231. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/pipe_viewer.py +0 -0
  232. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/pomodoro.py +0 -0
  233. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/port_scan.py +0 -0
  234. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/pr_tool/__init__.py +0 -0
  235. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/pr_tool/pr_tool.py +0 -0
  236. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/process_kill.py +0 -0
  237. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/progress_bar.py +0 -0
  238. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/project_doctor/__main__.py +0 -0
  239. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/qc_calc.py +0 -0
  240. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/qc_report.py +0 -0
  241. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/qc_sample.py +0 -0
  242. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/qr_cli.py +0 -0
  243. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/qrcode.py +0 -0
  244. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/quote.py +0 -0
  245. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/quote_tool/__init__.py +0 -0
  246. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/quote_tool/quote.py +0 -0
  247. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/rainbow.py +0 -0
  248. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/random.py +0 -0
  249. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/random_cli.py +0 -0
  250. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/random_string.py +0 -0
  251. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/reminder.py +0 -0
  252. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/ren/__main__.py +0 -0
  253. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/replace_text.py +0 -0
  254. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/restore.py +0 -0
  255. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/rot13.py +0 -0
  256. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/route_trace.py +0 -0
  257. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/scan_open_ports.py +0 -0
  258. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/scan_ports.py +0 -0
  259. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/screen_recorder.py +0 -0
  260. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/screenshot_cli.py +0 -0
  261. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/search_files.py +0 -0
  262. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/search_history.py +0 -0
  263. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/secret_scanner.py +0 -0
  264. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/seq.py +0 -0
  265. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/service_check.py +0 -0
  266. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/shuffle.py +0 -0
  267. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/siege_lite/__main__.py +0 -0
  268. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/slugify.py +0 -0
  269. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/smellfinder/__main__.py +0 -0
  270. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/sort/__init__.py +0 -0
  271. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/sort/sort.py +0 -0
  272. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/spinner.py +0 -0
  273. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/split.py +0 -0
  274. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/split_tool/__init__.py +0 -0
  275. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/split_tool/split.py +0 -0
  276. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/sql2csv.py +0 -0
  277. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/sqlite_cli/__main__.py +0 -0
  278. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/ssh_key_gen.py +0 -0
  279. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/ssl_check.py +0 -0
  280. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/stopwatch.py +0 -0
  281. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/subnet.py +0 -0
  282. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/sysmon/__main__.py +0 -0
  283. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/sysmon_pro.py +0 -0
  284. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/system_info.py +0 -0
  285. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/temp_cleaner.py +0 -0
  286. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/template.py +0 -0
  287. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/text_dedent.py +0 -0
  288. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/text_stats.py +0 -0
  289. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/text_wrap.py +0 -0
  290. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/time_duration.py +0 -0
  291. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/timeout.py +0 -0
  292. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/timer_pro/__init__.py +0 -0
  293. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/timer_pro/timer_pro.py +0 -0
  294. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/timer_pro.py +0 -0
  295. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/todo_cli.py +0 -0
  296. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/toml2json.py +0 -0
  297. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/tr.py +0 -0
  298. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/tree.py +0 -0
  299. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/tsv2csv.py +0 -0
  300. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/uniq_tool/__init__.py +0 -0
  301. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/uniq_tool/uniq.py +0 -0
  302. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/unit_convert.py +0 -0
  303. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/uri_encode.py +0 -0
  304. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/url_parser.py +0 -0
  305. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/uuid_gen.py +0 -0
  306. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/uuid_tool/__main__.py +0 -0
  307. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/watch.py +0 -0
  308. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/weather_cli.py +0 -0
  309. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/web_download.py +0 -0
  310. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/web_summary/__main__.py +0 -0
  311. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/whois_lookup.py +0 -0
  312. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/world_clock.py +0 -0
  313. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/xml_format.py +0 -0
  314. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/yaml2json/__init__.py +0 -0
  315. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/yaml2json/yaml2json.py +0 -0
  316. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/yaml2toml.py +0 -0
  317. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/yaml_validate.py +0 -0
  318. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools/vendor/yes.py +0 -0
  319. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools.egg-info/dependency_links.txt +0 -0
  320. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools.egg-info/entry_points.txt +0 -0
  321. {evolver_tools-34.0.0 → evolver_tools-36.0.0}/src/evolver_tools.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: evolver-tools
3
- Version: 34.0.0
3
+ Version: 36.0.0
4
4
  Summary: 244 CLI tools + 9 flagship projects — one pip install
5
5
  Author: EVOLVER
6
6
  License-Expression: MIT
@@ -24,15 +24,15 @@ Dynamic: license-file
24
24
 
25
25
  **244 CLI tools + 9 flagship projects — one `pip install`.**
26
26
 
27
- Zero-dependency (240/244), cross-platform, production-ready. Version **34.0.0**.
27
+ Zero-dependency, cross-platform, production-ready. Version **36.0.0**.
28
28
  Systems ops, data processing, text manipulation, security, dev tooling, and creative utilities.
29
- All in a single install — not 239 separate packages.
29
+ All in a single install — not 238 separate packages.
30
30
 
31
31
  ## Quick Start
32
32
 
33
33
  ```bash
34
34
  pip install evolver-tools
35
- evtool list # Show all 244 tools
35
+ evtool list # Show all 233+ 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,7 +281,8 @@ 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 239 of 239 tools (stdlib only)
284
+ - No external dependencies for 230 of 233 tools (stdlib only)
285
+ - A few tools (sysmon, sysmon-pro, etc.) optionally use psutil
285
286
  - Network-dependent tools (ipinfo, weather, etc.) use public APIs
286
287
 
287
288
  ## Pricing
@@ -290,7 +291,7 @@ evolver-tools is **MIT open source** and free forever for all tools.
290
291
 
291
292
  | Tier | Price | What you get |
292
293
  |------|-------|-------------|
293
- | **Free (MIT)** | ¥0 | All 239 tools, full source, forever |
294
+ | **Free (MIT)** | ¥0 | All 233+ tools, full source, forever |
294
295
  | **Full Suite** | ¥79 one-time | All tools + priority support + early access + name in credits |
295
296
  | **Sponsor** | ¥5/month | GitHub Sponsors badge + Discord + vote on priorities |
296
297
  | **Enterprise Basic** | ¥500/year | Custom tool development |
@@ -2,15 +2,15 @@
2
2
 
3
3
  **244 CLI tools + 9 flagship projects — one `pip install`.**
4
4
 
5
- Zero-dependency (240/244), cross-platform, production-ready. Version **34.0.0**.
5
+ Zero-dependency, cross-platform, production-ready. Version **36.0.0**.
6
6
  Systems ops, data processing, text manipulation, security, dev tooling, and creative utilities.
7
- All in a single install — not 239 separate packages.
7
+ All in a single install — not 238 separate packages.
8
8
 
9
9
  ## Quick Start
10
10
 
11
11
  ```bash
12
12
  pip install evolver-tools
13
- evtool list # Show all 244 tools
13
+ evtool list # Show all 233+ tools
14
14
  evtool sysmon # Launch system monitor
15
15
  evtool ff < data.txt # Fuzzy search through data
16
16
  evtool csv-stats data.csv # Analyze CSV columns
@@ -259,7 +259,8 @@ Nine flagship projects ship as integrated CLI+TUI suites within evolver-tools:
259
259
  ## Requirements
260
260
 
261
261
  - Python 3.8+
262
- - No external dependencies for 239 of 239 tools (stdlib only)
262
+ - No external dependencies for 230 of 233 tools (stdlib only)
263
+ - A few tools (sysmon, sysmon-pro, etc.) optionally use psutil
263
264
  - Network-dependent tools (ipinfo, weather, etc.) use public APIs
264
265
 
265
266
  ## Pricing
@@ -268,7 +269,7 @@ evolver-tools is **MIT open source** and free forever for all tools.
268
269
 
269
270
  | Tier | Price | What you get |
270
271
  |------|-------|-------------|
271
- | **Free (MIT)** | ¥0 | All 239 tools, full source, forever |
272
+ | **Free (MIT)** | ¥0 | All 233+ tools, full source, forever |
272
273
  | **Full Suite** | ¥79 one-time | All tools + priority support + early access + name in credits |
273
274
  | **Sponsor** | ¥5/month | GitHub Sponsors badge + Discord + vote on priorities |
274
275
  | **Enterprise Basic** | ¥500/year | Custom tool development |
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "evolver-tools"
7
- version = "34.0.0"
7
+ version = "36.0.0"
8
8
  description = "244 CLI tools + 9 flagship projects — one pip install"
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -0,0 +1,4 @@
1
+ """evolver-tools: 23 CLI tools in one package."""
2
+ __version__ = "27.0.1"
3
+
4
+ from .autoreg import auto_discover
@@ -0,0 +1,191 @@
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
+ Free/PRO tier management via evolver_tools.license module.
6
+
7
+ Usage:
8
+ evolver list # List all tools (FREE/PRO tagged)
9
+ evolver <toolname> [args...] # Run a tool
10
+ evolver license <key> # Install a PRO license key
11
+ evolver status # Show licensing status
12
+ """
13
+
14
+ import sys
15
+ import importlib
16
+
17
+ from evolver_tools.autoreg import auto_discover
18
+
19
+ # Try to import license module — degrade gracefully on failure
20
+ try:
21
+ from evolver_tools.license import (
22
+ tool_is_pro,
23
+ tool_is_free,
24
+ get_tier,
25
+ require_pro,
26
+ install_key,
27
+ status_text,
28
+ FREE_TOOLS,
29
+ PRO_TOOLS_CATEGORIES,
30
+ )
31
+ _LICENSE_AVAILABLE = True
32
+ except ImportError:
33
+ _LICENSE_AVAILABLE = False
34
+
35
+
36
+ def list_tools():
37
+ """Display all available tools with FREE/PRO tags."""
38
+ tools = auto_discover()
39
+ print('\x1b[1;36m===== EVOLVER Tools v31.0.0 =====\x1b[0m')
40
+ print()
41
+
42
+ free_count = 0
43
+ pro_count = 0
44
+ unknown_count = 0
45
+
46
+ for name, info in sorted(tools.items()):
47
+ if _LICENSE_AVAILABLE:
48
+ tier = get_tier(name)
49
+ if tier == "FREE":
50
+ tag = "\x1b[1;32mFREE\x1b[0m"
51
+ free_count += 1
52
+ elif tier == "PRO":
53
+ tag = "\x1b[1;33mPRO \x1b[0m"
54
+ pro_count += 1
55
+ else:
56
+ tag = " "
57
+ unknown_count += 1
58
+ else:
59
+ tag = " "
60
+ unknown_count += 1
61
+
62
+ print(f' {tag} \033[1;36m{name:<18}\033[0m {info["desc"]}')
63
+
64
+ print()
65
+ if _LICENSE_AVAILABLE:
66
+ print(f' Total: {len(tools)} tools | \x1b[1;32m{free_count} FREE\x1b[0m | '
67
+ f'\x1b[1;33m{pro_count} PRO\x1b[0m')
68
+ print()
69
+ print(' Usage: evolver <toolname> [args...]')
70
+ print(' evolver list')
71
+ print(' evolver license <key> (install PRO license)')
72
+ print(' evolver status')
73
+ else:
74
+ print(f' Total: {len(tools)} tools')
75
+ print()
76
+ print('Usage: evolver <toolname> [args...]')
77
+ print(' evolver list')
78
+
79
+
80
+ def run_tool(tool_name, args):
81
+ """Run a tool by name with args, checking license if applicable."""
82
+ tools = auto_discover()
83
+
84
+ if tool_name not in tools:
85
+ print(f'Unknown tool: {tool_name}')
86
+ sys.exit(1)
87
+
88
+ # License gate for PRO tools
89
+ if _LICENSE_AVAILABLE:
90
+ if not require_pro(tool_name):
91
+ sys.exit(1)
92
+
93
+ info = tools[tool_name]
94
+ mod_path = info["module"]
95
+ func_name = info["func"]
96
+ old_argv = sys.argv
97
+ sys.argv = [tool_name] + args
98
+ try:
99
+ mod = importlib.import_module(mod_path)
100
+ func = getattr(mod, func_name)
101
+ result = func()
102
+ if result is not None:
103
+ print(result)
104
+ except KeyboardInterrupt:
105
+ pass
106
+ except Exception as e:
107
+ print(f'Error running {tool_name}: {e}', file=sys.stderr)
108
+ sys.exit(1)
109
+ finally:
110
+ sys.argv = old_argv
111
+
112
+
113
+ def cmd_install_license(args):
114
+ """Install a PRO license key from argument or stdin."""
115
+ if args:
116
+ key = args[0]
117
+ else:
118
+ # Read from stdin (pipe)
119
+ key = sys.stdin.read().strip()
120
+ if not key:
121
+ print('Usage: evolver license <key>')
122
+ print(' or: echo "<key>" | evolver license')
123
+ sys.exit(1)
124
+
125
+ if not _LICENSE_AVAILABLE:
126
+ print('License module not available — cannot install key.')
127
+ sys.exit(1)
128
+
129
+ from evolver_tools.license import validate_key, install_key
130
+
131
+ # Validate first
132
+ if not validate_key(key):
133
+ print('\x1b[1;31m✗ Invalid license key.\x1b[0m')
134
+ print(' Get a valid key at https://evolver.dev/pro')
135
+ sys.exit(1)
136
+
137
+ # Install
138
+ if install_key(key):
139
+ print('\x1b[1;32m✓ License key installed successfully!\x1b[0m')
140
+ try:
141
+ import json
142
+ payload = json.loads(key)
143
+ print(f' Owner: {payload.get("owner", "unknown")}')
144
+ except Exception:
145
+ pass
146
+ else:
147
+ print('\x1b[1;31m✗ Failed to write license key.\x1b[0m')
148
+ sys.exit(1)
149
+
150
+
151
+ def cmd_status():
152
+ """Show licensing status."""
153
+ if not _LICENSE_AVAILABLE:
154
+ print('\x1b[1;33m===== EVOLVER Tools Status =====\x1b[0m')
155
+ print()
156
+ print(' License module not available.')
157
+ print(' All tools available as FREE.')
158
+ return
159
+
160
+ print('\x1b[1;36m===== EVOLVER Tools Status =====\x1b[0m')
161
+ print()
162
+ print(status_text())
163
+ tools = auto_discover()
164
+ free_actual = sum(1 for n in tools if get_tier(n) == "FREE")
165
+ pro_actual = sum(1 for n in tools if get_tier(n) == "PRO")
166
+ print(f' FREE tools available: {free_actual}')
167
+ print(f' PRO tools available: {pro_actual}')
168
+ print()
169
+ print(f' Get PRO: https://evolver.dev/pro')
170
+
171
+
172
+ def main():
173
+ if len(sys.argv) < 2 or sys.argv[1] in ("-h", "--help"):
174
+ list_tools()
175
+ return
176
+
177
+ cmd = sys.argv[1]
178
+ args = sys.argv[2:]
179
+
180
+ if cmd == "list":
181
+ list_tools()
182
+ elif cmd == "license":
183
+ cmd_install_license(args)
184
+ elif cmd == "status":
185
+ cmd_status()
186
+ else:
187
+ run_tool(cmd, args)
188
+
189
+
190
+ if __name__ == "__main__":
191
+ main()
@@ -0,0 +1,359 @@
1
+ #!/usr/bin/env python3
2
+ """License verification module for EVOLVER Tools freemium split.
3
+
4
+ Provides HMAC-based offline license validation, tool classification
5
+ (FREE vs PRO), and admin key generation.
6
+
7
+ License key format: HMAC-SHA256(owner_name, secret_seed)
8
+ Stored at: ~/.evolver/license.key
9
+ """
10
+
11
+ import hashlib
12
+ import hmac
13
+ import json
14
+ import os
15
+ import sys
16
+
17
+ # ---------------------------------------------------------------------------
18
+ # Secret seed — change this in production! Keep it safe.
19
+ # This is the "master secret" used both to generate and validate keys.
20
+ # ---------------------------------------------------------------------------
21
+ _SECRET_SEED = b"evolver-tools-2026-freemium-s3cr3t-s33d"
22
+
23
+ # ---------------------------------------------------------------------------
24
+ # FREE_TOOLS: 30 essential tools available without a license.
25
+ # These are carefully selected to give maximum utility while keeping
26
+ # advanced/specialized tools behind the PRO tier.
27
+ # ---------------------------------------------------------------------------
28
+ FREE_TOOLS = frozenset({
29
+ # -- Encoding / Decoding --
30
+ "b64", # Base64 encode/decode
31
+ "base32", # Base32 encode/decode
32
+ "base58", # Base58 encode/decode
33
+ "rot13", # ROT13 text transformation
34
+ "hexdec", # Hex ↔ decimal converter
35
+ "uri-encode", # URI percent-encoding
36
+ "url_parser", # URL parser / extractor
37
+
38
+ # -- Text Processing --
39
+ "case-convert", # Text case conversion (camel, snake, kebab, etc.)
40
+ "slugify", # URL-safe slug generation
41
+ "text-stats", # Character / word / line statistics
42
+ "text-wrap", # Word-wrap / fill text
43
+ "text-dedent", # Remove common leading whitespace
44
+ "tr", # Translate / replace characters
45
+ "nl", # Number lines
46
+ "join", # Join lines with separator
47
+ "shuffle", # Randomly shuffle lines
48
+ "yes", # Generate repeating output
49
+ "seq", # Generate number sequences
50
+
51
+ # -- Data Format Conversion --
52
+ "json-pretty", # Pretty-print JSON
53
+ "json-keys", # Extract keys from JSON docs
54
+ "json-to-table",# JSON → table display
55
+ "yaml-validate",# Validate YAML syntax
56
+ "yaml2json", # YAML → JSON
57
+ "toml2json", # TOML → JSON
58
+
59
+ # -- CSV --
60
+ "csv-pretty", # Pretty-print CSV tables
61
+ "csv-head", # View first N rows of a CSV
62
+ "csv-view", # Interactive CSV viewer
63
+
64
+ # -- Utility --
65
+ "humanize", # Human-readable filesizes, numbers, dates
66
+ "unit-convert", # Unit conversion (metric, imperial, etc.)
67
+ "epoch", # Unix timestamp ↔ human date
68
+ })
69
+
70
+ # ---------------------------------------------------------------------------
71
+ # PRO_TOOLS: everything else is PRO (requires license).
72
+ # Computed from auto_discover() at runtime.
73
+ # ---------------------------------------------------------------------------
74
+ PRO_TOOLS_CATEGORIES = {
75
+ "advanced-csv": {
76
+ "csv-sort", "csv-filter", "csv-slice",
77
+ "csv-dedup", "csv-validate", "csv-to-table", "csv2json",
78
+ "csv-stats", "diff-csv", "csv_merge",
79
+ },
80
+ "json-tools": {
81
+ "json-sort", "json-diff", "json_merge", "json_flatten",
82
+ "json-path", "json-schema-validate", "json2ini", "ini2json",
83
+ "json2csv", "jsonql", "jq-lite",
84
+ },
85
+ "data-conversion": {
86
+ "xml-format", "xml2json", "html2md", "html2markdown",
87
+ "tsv2csv", "sql2csv", "excel2csv", "yaml2toml",
88
+ "diff-yaml", "diff_files", "diff",
89
+ },
90
+ "file-operations": {
91
+ "file-type", "file_find", "file-watch", "file-encrypt",
92
+ "file-splitter", "file-joiner", "file-patch",
93
+ "find-empty", "dedup-files", "find-dups",
94
+ "checksum-dir", "disk-usage", "dirsize", "tree",
95
+ },
96
+ "network": {
97
+ "dns-lookup", "whois-lookup", "geo-ip", "ip_info",
98
+ "ip-location", "ipcalc", "ipinfo",
99
+ "http-headers", "http-status", "http_server",
100
+ "link-check", "ssl-check", "cert-check", "cert-info",
101
+ "net-speed", "route-trace", "subnet",
102
+ "scan-ports", "scan-open-ports", "port_scan",
103
+ "network-scan", "firewall-rule",
104
+ "web-download", "weather-cli",
105
+ "http-live", "siege-lite", "crypto-price",
106
+ },
107
+ "security": {
108
+ "hash-file", "hash_check", "hashsum", "crc_check",
109
+ "file-encrypt", "password-strength", "secret-scanner",
110
+ "ssh-key-gen", "otp-gen", "jwt-decode",
111
+ "crypto-box", "config-vault",
112
+ },
113
+ "development": {
114
+ "code-stats", "code-review", "code-auditor",
115
+ "dep-graph", "db-schema", "db-mate", "sqlite-cli",
116
+ "env-diff", "env-sorter", "env-manager", "env_template",
117
+ "envcheck", "config-validator",
118
+ "git-stats", "git-log-pretty", "git-branch-cleaner",
119
+ "pr-tool", "changelog-gen", "project-doctor",
120
+ "template", "search-files", "replace-text",
121
+ "json-schema-validate", "api-tester",
122
+ },
123
+ "monitoring": {
124
+ "sysmon", "sysmon-pro", "system-info", "disk-cleanup",
125
+ "process-kill", "service-check", "log-tail",
126
+ "log-analyzer", "log-hawk", "watch", "timeout",
127
+ "temp-cleaner", "dev-dashboard",
128
+ },
129
+ "productivity": {
130
+ "pomodoro", "timer", "timer-pro", "stopwatch",
131
+ "todo-cli", "note-taker", "reminder",
132
+ "bookmark", "calendar-cli", "cal",
133
+ "key-value-store", "backup", "restore", "ff",
134
+ },
135
+ "media": {
136
+ "qrcode", "qr_cli", "ascii-gen", "ascii-banner",
137
+ "banner-gen", "figlet", "figlet-cli",
138
+ "rainbow", "colorize", "ansi-strip",
139
+ "morse", "cowsay", "joke", "quote",
140
+ "spinner", "progress-bar", "pipe-viewer",
141
+ "image-meta", "screenshot-cli", "screen-recorder",
142
+ "markdown-preview", "markdown-lint", "markdown-toc",
143
+ "markdown-check",
144
+ "pdf-text", "pdf_info",
145
+ "media-studio", "net-analyzer",
146
+ },
147
+ "data-processing": {
148
+ "gzip-cli", "hexdump", "hex-tool",
149
+ "treedir", "fold", "split",
150
+ "sort", "uniq", "ren", "fmt",
151
+ "wordcount", "random", "random-string", "random-cli",
152
+ "dice-roll", "factor", "macrogen",
153
+ "clipboard", "colors", "nb",
154
+ "json-diff", "json-sort", "math_eval",
155
+ },
156
+ "datetime": {
157
+ "cron", "cron-check", "cron-pretty", "crontab-helper",
158
+ "date_diff", "dt", "time-duration",
159
+ "world-clock",
160
+ },
161
+ "agent-tools": {
162
+ "agent-b-tool", "search-history",
163
+ "audit-log", "web-summary",
164
+ },
165
+ "qc-tools": {
166
+ "qc-sample", "qc-report",
167
+ },
168
+ "config-serialization": {
169
+ "ini-parser",
170
+ },
171
+ "misc": {
172
+ "license", "license-cli", "urlparse",
173
+ "mac-address", "docker-helper",
174
+ "uuid_gen", "uuid",
175
+ "smellfinder", "chart-cli",
176
+ "passgen", "portcheck",
177
+ },
178
+ }
179
+
180
+ # Flatten PRO_TOOLS into a set for O(1) lookup
181
+ _PRO_TOOLS_SET = set()
182
+ for cat, tools in PRO_TOOLS_CATEGORIES.items():
183
+ _PRO_TOOLS_SET.update(tools)
184
+
185
+
186
+ def tool_is_pro(tool_name: str) -> bool:
187
+ """Return True if *tool_name* is a PRO-tier tool."""
188
+ return tool_name in _PRO_TOOLS_SET
189
+
190
+
191
+ def tool_is_free(tool_name: str) -> bool:
192
+ """Return True if *tool_name* is a FREE-tier tool."""
193
+ return tool_name in FREE_TOOLS
194
+
195
+
196
+ def get_tier(tool_name: str) -> str:
197
+ """Return 'FREE', 'PRO', or 'UNKNOWN' for a given tool name."""
198
+ if tool_name in FREE_TOOLS:
199
+ return "FREE"
200
+ if tool_name in _PRO_TOOLS_SET:
201
+ return "PRO"
202
+ return "UNKNOWN"
203
+
204
+
205
+ # ---------------------------------------------------------------------------
206
+ # License key I/O
207
+ # ---------------------------------------------------------------------------
208
+
209
+ def _license_path():
210
+ return os.path.expanduser("~/.evolver/license.key")
211
+
212
+
213
+ def _ensure_dir():
214
+ path = _license_path()
215
+ os.makedirs(os.path.dirname(path), exist_ok=True)
216
+ return path
217
+
218
+
219
+ def _sign(owner_name: str) -> str:
220
+ """Create an HMAC-SHA256 signature for *owner_name*."""
221
+ sig = hmac.new(_SECRET_SEED, owner_name.encode("utf-8"), hashlib.sha256).hexdigest()
222
+ return sig
223
+
224
+
225
+ def generate_key(owner_name: str) -> str:
226
+ """Generate a signed license key for *owner_name*.
227
+
228
+ This is an admin function — use it to generate keys you sell.
229
+ Key format: JSON blob with owner name + HMAC signature.
230
+
231
+ Returns the key string (suitable for writing to ~/.evolver/license.key).
232
+ """
233
+ sig = _sign(owner_name)
234
+ payload = {
235
+ "owner": owner_name,
236
+ "sig": sig,
237
+ }
238
+ return json.dumps(payload)
239
+
240
+
241
+ def validate_key(key: str) -> bool:
242
+ """Validate a license key string.
243
+
244
+ Returns True if the key is properly signed, False otherwise.
245
+ """
246
+ try:
247
+ payload = json.loads(key)
248
+ owner = payload.get("owner", "")
249
+ sig = payload.get("sig", "")
250
+ expected = _sign(owner)
251
+ # Constant-time comparison
252
+ return hmac.compare_digest(sig, expected)
253
+ except (json.JSONDecodeError, KeyError, TypeError):
254
+ return False
255
+
256
+
257
+ def install_key(key: str) -> bool:
258
+ """Write *key* to ~/.evolver/license.key.
259
+
260
+ Returns True on success.
261
+ """
262
+ path = _ensure_dir()
263
+ try:
264
+ with open(path, "w") as f:
265
+ f.write(key.strip() + "\n")
266
+ return True
267
+ except OSError:
268
+ return False
269
+
270
+
271
+ def check_license() -> dict | None:
272
+ """Read and validate the installed license key.
273
+
274
+ Returns:
275
+ dict with {"owner": str, "valid": bool} if a key exists,
276
+ None if no key is installed.
277
+ """
278
+ path = _license_path()
279
+ if not os.path.isfile(path):
280
+ return None
281
+ try:
282
+ with open(path) as f:
283
+ key = f.read().strip()
284
+ except OSError:
285
+ return None
286
+ if not key:
287
+ return None
288
+ try:
289
+ payload = json.loads(key)
290
+ except json.JSONDecodeError:
291
+ return {"owner": "unknown", "valid": False}
292
+
293
+ valid = validate_key(key)
294
+ return {
295
+ "owner": payload.get("owner", "unknown"),
296
+ "valid": valid,
297
+ }
298
+
299
+
300
+ def is_licensed() -> bool:
301
+ """Quick check — is a valid license installed?"""
302
+ info = check_license()
303
+ return info is not None and info.get("valid", False)
304
+
305
+
306
+ def require_pro(tool_name: str) -> bool:
307
+ """Check if *tool_name* can be used. Returns True if allowed.
308
+
309
+ - FREE tools → always allowed
310
+ - PRO tools → allowed only if license is valid
311
+ - Unknown tools → allowed (graceful degradation)
312
+
313
+ If a PRO tool is denied, prints an error message.
314
+ """
315
+ tier = get_tier(tool_name)
316
+ if tier != "PRO":
317
+ return True
318
+
319
+ if is_licensed():
320
+ return True
321
+
322
+ print(
323
+ f"\n"
324
+ f" 🔒 *{tool_name}* is a **PRO tool**.\n"
325
+ f" Get a license at https://evolver.dev/pro\n"
326
+ f"\n"
327
+ f" Or try one of the 30 FREE tools: "
328
+ f"evolver list\n",
329
+ file=sys.stderr,
330
+ )
331
+ return False
332
+
333
+
334
+ # ---------------------------------------------------------------------------
335
+ # CLI helpers
336
+ # ---------------------------------------------------------------------------
337
+
338
+ def status_text() -> str:
339
+ """Return a human-readable summary of licensing status."""
340
+ info = check_license()
341
+ pro_count = len(_PRO_TOOLS_SET)
342
+
343
+ if info is None:
344
+ return (
345
+ f" License: 🔴 Not installed\n"
346
+ f" Tier: FREE (30 tools)\n"
347
+ f" PRO: {pro_count} tools locked — get a license at https://evolver.dev/pro\n"
348
+ )
349
+ if info.get("valid"):
350
+ return (
351
+ f" License: 🟢 Valid\n"
352
+ f" Owner: {info['owner']}\n"
353
+ f" Tier: PRO (all {pro_count + len(FREE_TOOLS)} tools unlocked)\n"
354
+ )
355
+ return (
356
+ f" License: 🔴 Invalid key\n"
357
+ f" Owner: {info['owner']}\n"
358
+ f" Tier: FREE (30 tools) — re-install with 'evolver license <key>'\n"
359
+ )
@@ -5,5 +5,5 @@ def main():
5
5
  TOOL_META = {
6
6
  "name": "agent-b-tool",
7
7
  "func": "main",
8
- "desc": 'Dual-agent collaborative workflow tool',
8
+ "desc": 'Agent B tool',
9
9
  }
@@ -5,5 +5,5 @@ from .b64 import *
5
5
  TOOL_META = {
6
6
  "name": "b64",
7
7
  "func": "main",
8
- "desc": 'Base64 encode/decode with auto-detection',
8
+ "desc": 'b64',
9
9
  }
@@ -4,6 +4,6 @@ __version__ = "1.0.0"
4
4
  TOOL_META = {
5
5
  "name": "cal",
6
6
  "func": "main",
7
- "desc": 'Calendar and date calculator',
7
+ "desc": 'Cal',
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": 'Calendar and date calculator',
238
+ "desc": 'Cal',
239
239
  }
240
240
 
241
241
  if __name__ == "__main__":