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.
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/PKG-INFO +24 -9
- evolver_tools-36.0.0/src/evolver_tools.egg-info/PKG-INFO → evolver_tools-37.0.0/README.md +22 -29
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/pyproject.toml +2 -2
- evolver_tools-37.0.0/src/evolver_tools/__init__.py +4 -0
- evolver_tools-37.0.0/src/evolver_tools/cli.py +66 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/agent_b_tool.py +1 -1
- evolver_tools-37.0.0/src/evolver_tools/vendor/ansi_to_html.py +122 -0
- evolver_tools-37.0.0/src/evolver_tools/vendor/ansi_to_txt.py +89 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/b64/__init__.py +1 -1
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/cal_tool/__init__.py +1 -1
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/cal_tool/cli.py +1 -1
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/chart_cli/__init__.py +1 -1
- evolver_tools-37.0.0/src/evolver_tools/vendor/chrono.py +275 -0
- evolver_tools-37.0.0/src/evolver_tools/vendor/color_convert.py +135 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/colors/__init__.py +1 -1
- evolver_tools-37.0.0/src/evolver_tools/vendor/csv_concat.py +57 -0
- evolver_tools-37.0.0/src/evolver_tools/vendor/csv_schema.py +174 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/csv_stats/__init__.py +1 -1
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/csv_stats/cli.py +1 -1
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/diff_csv.py +1 -1
- evolver_tools-37.0.0/src/evolver_tools/vendor/diff_lines.py +166 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/diff_tool/__init__.py +1 -1
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/dirsize/__init__.py +1 -1
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/dt_convert.py +1 -1
- evolver_tools-37.0.0/src/evolver_tools/vendor/emoji_cli.py +465 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/env_manager.py +1 -1
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/envcheck/__init__.py +1 -1
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/ff/__init__.py +1 -1
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/find_dups/__init__.py +1 -1
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/find_dups/cli.py +1 -1
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/fmt/__init__.py +1 -1
- evolver_tools-37.0.0/src/evolver_tools/vendor/git_ignore.py +207 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/hashsum/__init__.py +1 -1
- evolver_tools-37.0.0/src/evolver_tools/vendor/html_strip.py +143 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/http_live/__init__.py +1 -1
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/ipcalc/__init__.py +1 -1
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/ipinfo/__init__.py +1 -1
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/jq_lite/__init__.py +1 -1
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/json2csv/__init__.py +1 -1
- evolver_tools-37.0.0/src/evolver_tools/vendor/json_patch.py +319 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/jsonql/__init__.py +1 -1
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/license_cli/__init__.py +1 -1
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/license_cli/cli.py +1 -1
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/log_analyzer.py +1 -1
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/markdown_check/__init__.py +1 -1
- evolver_tools-37.0.0/src/evolver_tools/vendor/markdown_format.py +246 -0
- evolver_tools-37.0.0/src/evolver_tools/vendor/merge_json.py +87 -0
- evolver_tools-37.0.0/src/evolver_tools/vendor/mime_type.py +113 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/nb/__init__.py +1 -1
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/passgen/__init__.py +1 -1
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/portcheck/__init__.py +1 -1
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/portcheck/__main__.py +1 -1
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/project_doctor/__init__.py +1 -1
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/ren/__init__.py +1 -1
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/siege_lite/__init__.py +1 -1
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/smellfinder/__init__.py +1 -1
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/sqlite_cli/__init__.py +1 -1
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/sysmon/__init__.py +1 -1
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/timer/__init__.py +1 -1
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/treedir/__init__.py +1 -1
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/treedir/__main__.py +1 -1
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/urlparse_tool/__init__.py +1 -1
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/urlparse_tool/cli.py +1 -1
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/uuid_tool/__init__.py +1 -1
- evolver_tools-37.0.0/src/evolver_tools/vendor/validate.py +197 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/web_summary/__init__.py +1 -1
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/wordcount/__init__.py +1 -1
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/wordcount/__main__.py +1 -1
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/xml2json.py +1 -1
- evolver_tools-36.0.0/README.md → evolver_tools-37.0.0/src/evolver_tools.egg-info/PKG-INFO +44 -7
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools.egg-info/SOURCES.txt +10 -1
- evolver_tools-36.0.0/src/evolver_tools/__init__.py +0 -4
- evolver_tools-36.0.0/src/evolver_tools/cli.py +0 -191
- evolver_tools-36.0.0/src/evolver_tools/license.py +0 -359
- evolver_tools-36.0.0/src/evolver_tools/vendor/color_convert.py +0 -138
- evolver_tools-36.0.0/src/evolver_tools/vendor/csv_concat.py +0 -77
- evolver_tools-36.0.0/src/evolver_tools/vendor/diff_lines.py +0 -147
- evolver_tools-36.0.0/src/evolver_tools/vendor/git_ignore.py +0 -217
- evolver_tools-36.0.0/src/evolver_tools/vendor/mime_type.py +0 -138
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/LICENSE +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/setup.cfg +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/__main__.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/autoreg.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/__init__.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/ansi_strip.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/api_tester.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/ascii_banner.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/ascii_gen.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/audit_log.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/b64/b64.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/backup.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/banner/__init__.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/banner/banner.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/base32.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/base58.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/bookmark.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/calendar_cli.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/case_convert.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/cert_check.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/cert_info.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/changelog_gen/__init__.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/changelog_gen/changelog_gen.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/changelog_gen.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/chart_cli/__main__.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/checksum_dir.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/clipboard/__init__.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/clipboard/clipboard.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/code_auditor.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/code_review.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/code_stats.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/colorize.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/colors/__main__.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/config_validator.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/config_vault.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/cowsay.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/crc_check.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/cron/__init__.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/cron/__main__.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/cron_check.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/cron_pretty.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/crontab_helper.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/crypto_box.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/crypto_price.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/csv2json.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/csv_dedup.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/csv_filter.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/csv_head.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/csv_merge.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/csv_pretty.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/csv_slice.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/csv_sort.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/csv_stats/__main__.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/csv_stats/analyzer.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/csv_to_table.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/csv_validate.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/csv_view.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/date_diff.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/db_mate.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/db_schema.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/dedup_files.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/dep_graph.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/dev_dashboard.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/dice_roll.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/diff_files.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/diff_tool/__main__.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/diff_yaml.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/disk_cleanup.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/disk_usage/__init__.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/disk_usage/disk_usage.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/dns_lookup.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/docker_helper.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/env_diff.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/env_sorter.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/env_template.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/epoch.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/excel2csv.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/factor.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/ff/__main__.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/figlet_cli.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/figlet_tool.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/file_encrypt.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/file_find.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/file_joiner.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/file_patch.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/file_splitter.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/file_type.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/file_watch.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/find_empty.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/firewall_rule.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/fmt/fmt.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/fold.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/geo_ip.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/git_branch_cleaner.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/git_log_pretty.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/git_stats.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/gzip_cli.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/hash_check.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/hash_file.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/hashsum/__main__.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/hex_tool.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/hexdec.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/hexdump.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/html2markdown.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/html2md.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/http_headers.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/http_live/__main__.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/http_server.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/http_status.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/humanize.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/image_meta.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/ini2json.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/ini_parser/__init__.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/ini_parser/ini_parser.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/ip_info.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/ip_location.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/ipcalc/__main__.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/ipinfo/__main__.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/join.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/joke.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/jq_lite/__main__.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/json2csv/__main__.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/json2ini.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/json_diff.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/json_flatten.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/json_keys.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/json_merge.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/json_path.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/json_pretty/__init__.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/json_pretty/json_pretty.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/json_schema_validate.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/json_sort.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/json_to_table.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/json_to_yaml.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/jsonql/__main__.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/jwt_decode.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/key_value_store.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/license.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/license_cli/__main__.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/link_check.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/log_hawk.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/log_tail.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/mac_address.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/macrogen.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/markdown_lint.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/markdown_preview.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/markdown_to_html.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/markdown_toc.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/math_eval.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/media_studio.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/morse.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/nb/__main__.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/net_analyzer.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/net_speed.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/network_scan.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/nl.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/note_taker.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/otp_gen.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/password_strength.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/pdf_info.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/pdf_text.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/pipe_viewer.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/pomodoro.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/port_scan.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/pr_tool/__init__.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/pr_tool/pr_tool.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/process_kill.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/progress_bar.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/project_doctor/__main__.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/qc_calc.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/qc_report.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/qc_sample.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/qr_cli.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/qrcode.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/quote.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/quote_tool/__init__.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/quote_tool/quote.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/rainbow.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/random.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/random_cli.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/random_string.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/reminder.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/ren/__main__.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/replace_text.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/restore.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/rot13.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/route_trace.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/scan_open_ports.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/scan_ports.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/screen_recorder.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/screenshot_cli.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/search_files.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/search_history.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/secret_scanner.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/seq.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/service_check.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/shuffle.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/siege_lite/__main__.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/slugify.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/smellfinder/__main__.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/sort/__init__.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/sort/sort.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/spinner.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/split.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/split_tool/__init__.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/split_tool/split.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/sql2csv.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/sqlite_cli/__main__.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/ssh_key_gen.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/ssl_check.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/stopwatch.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/subnet.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/sysmon/__main__.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/sysmon_pro.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/system_info.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/temp_cleaner.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/template.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/text_dedent.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/text_stats.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/text_wrap.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/time_duration.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/timeout.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/timer_pro/__init__.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/timer_pro/timer_pro.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/timer_pro.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/todo_cli.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/toml2json.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/tr.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/tree.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/tsv2csv.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/uniq_tool/__init__.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/uniq_tool/uniq.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/unit_convert.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/uri_encode.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/url_parser.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/uuid_gen.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/uuid_tool/__main__.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/watch.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/weather_cli.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/web_download.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/web_summary/__main__.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/whois_lookup.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/world_clock.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/xml_format.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/yaml2json/__init__.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/yaml2json/yaml2json.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/yaml2toml.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/yaml_validate.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools/vendor/yes.py +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools.egg-info/dependency_links.txt +0 -0
- {evolver_tools-36.0.0 → evolver_tools-37.0.0}/src/evolver_tools.egg-info/entry_points.txt +0 -0
- {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:
|
|
4
|
-
Summary:
|
|
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
|
-
**
|
|
25
|
+
**249 CLI tools + 9 flagship projects — one `pip install`.**
|
|
26
26
|
|
|
27
|
-
Zero-dependency, cross-platform, production-ready. Version **
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
**
|
|
3
|
+
**249 CLI tools + 9 flagship projects — one `pip install`.**
|
|
26
4
|
|
|
27
|
-
Zero-dependency, cross-platform, production-ready. Version **
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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 = "
|
|
8
|
-
description = "
|
|
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,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()
|
|
@@ -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("&", "&").replace("<", "<").replace(">", ">")
|
|
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()
|