rp 0.1.1370__tar.gz → 0.1.1372__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.
- {rp-0.1.1370 → rp-0.1.1372}/PKG-INFO +1 -1
- {rp-0.1.1370 → rp-0.1.1372}/rp/misc/claude_bash.sh +1 -1
- rp-0.1.1372/rp/misc/claude_panel.py +314 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/r.py +21 -0
- rp-0.1.1372/rp/version.py +1 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp.egg-info/PKG-INFO +1 -1
- {rp-0.1.1370 → rp-0.1.1372}/rp.egg-info/SOURCES.txt +1 -0
- rp-0.1.1372/version.py +1 -0
- rp-0.1.1370/rp/version.py +0 -1
- rp-0.1.1370/version.py +0 -1
- {rp-0.1.1370 → rp-0.1.1372}/.gitignore +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/.idea/QuickPython.iml +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/.idea/QuickPython.time +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/.idea/encodings.xml +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/.idea/inspectionProfiles/Project_Default.xml +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/.idea/misc.xml +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/.idea/modules.xml +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/.idea/vcs.xml +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/.idea/workspace.xml +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/.publish.sh.un~ +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/.setup.py.un~ +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/.update_module_paths.py.un~ +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/LICENSE.txt +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/README +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/Scrap +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/aoisdasd +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/increment_version.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/oijio +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/publish.sh +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/pyqtconsoletest.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/__main__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/documentation.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/Pyperclip.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/debug_comment.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/draw_code_minimap.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/graveyard.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/parso/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/parso/_compatibility.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/parso/cache.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/parso/file_io.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/parso/grammar.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/parso/normalizer.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/parso/parser.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/parso/pgen2/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/parso/pgen2/generator.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/parso/pgen2/grammar_parser.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/parso/python/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/parso/python/diff.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/parso/python/errors.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/parso/python/grammar26.txt +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/parso/python/grammar27.txt +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/parso/python/grammar310.txt +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/parso/python/grammar311.txt +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/parso/python/grammar312.txt +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/parso/python/grammar33.txt +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/parso/python/grammar34.txt +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/parso/python/grammar35.txt +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/parso/python/grammar36.txt +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/parso/python/grammar37.txt +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/parso/python/grammar38.txt +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/parso/python/grammar39.txt +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/parso/python/parser.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/parso/python/pep8.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/parso/python/prefix.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/parso/python/token.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/parso/python/tokenize.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/parso/python/tree.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/parso/tree.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/parso/utils.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/peepdis/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/peepdis/core.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/peepdis/datastructures.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/peepdis/legacy.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/peepdis/preferences.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/powerpoint_converter.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/profile_vim_plugins.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyflann/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyflann/bindings/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyflann/bindings/flann_ctypes.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyflann/exceptions.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyflann/index.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyflann/io/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyflann/io/binary_dataset.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyflann/io/dat_dataset.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyflann/io/dataset.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyflann/io/hdf5_dataset.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyflann/io/npy_dataset.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyflann/util/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyflann/util/weave_tools.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/__version__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/app.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/cli.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/cli_utils.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/config/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/config/config.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/config/config_error.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/config/config_parser.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/config/config_transformer.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/config/validators/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/config/validators/options.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/logging.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/model/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/model/autocomplete/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/model/autocomplete/autocomplete_listener.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/model/common/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/model/common/jsonpath/JSONPathLexer.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/model/common/jsonpath/JSONPathListener.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/model/common/jsonpath/JSONPathParser.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/model/common/jsonpath/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/model/io/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/model/io/datasource.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/model/model.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/service/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/service/client.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/service/dispatcher.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/common/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/common/popup.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/common/selectable_text.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/components/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/components/autocomplete_popup/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/components/autocomplete_popup/autocomplete_popup.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/components/autocomplete_popup/autocomplete_popup_keymapper.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/components/help_bar/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/components/help_bar/help_bar.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/components/help_page/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/components/help_page/detailed_help_page.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/components/json_browser/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/components/json_browser/json_browser.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/components/json_browser/json_browser_keymapper.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/components/query_bar/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/components/query_bar/query_bar.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/components/query_bar/query_bar_keymapper.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/json_lib/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/json_lib/array/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/json_lib/array/array_end_node.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/json_lib/array/array_end_widget.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/json_lib/array/array_node.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/json_lib/array/array_start_widget.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/json_lib/array/array_unexpanded_widget.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/json_lib/json_composite_end_node.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/json_lib/json_composite_node.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/json_lib/json_listbox.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/json_lib/json_listwalker.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/json_lib/json_simple_node.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/json_lib/json_widget.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/json_lib/node_factory.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/json_lib/object/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/json_lib/object/object_end_node.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/json_lib/object/object_end_widget.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/json_lib/object/object_node.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/json_lib/object/object_start_widget.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/json_lib/object/object_unexpanded_widget.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/json_lib/primitive/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/json_lib/primitive/base.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/json_lib/primitive/boolean.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/json_lib/primitive/generic.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/json_lib/primitive/integer.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/json_lib/primitive/null.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/json_lib/primitive/numeric.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/json_lib/primitive/string.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/json_lib/selector/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/keymapper/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/keymapper/abstract_component_keymapper.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/keymapper/keymapper.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/keymapper/keymapper_config.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/keymapper/keymapper_config_parser.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/theme/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/theme/theme.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/theme/theme_config.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/theme/theme_config_parser.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/view_config.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/view_frame.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pyfx/view/view_manager.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pynput_recorder.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pypi_inspection.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/pytorch_module_explorer.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/refactor/string_format/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/refactor/string_format/format_to_fstring_converter.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/refactor/string_format/fstring_converter.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/refactor/string_format/test_format_to_fstring_converter.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/refactor/string_format/test_fstring_converter.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/rp_black_macchiato.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/stamp_tensor.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/stdin_python_highlighter.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/tetris/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/tetris/__main__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/tetris/graphics/graphics/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/tetris/graphics/graphics/canvas.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/tetris/graphics/graphics/colors.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/tetris/graphics/graphics/console.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/tetris/graphics/graphics/funcs.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/tetris/graphics/graphics/nbinput.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/tetris/graphics/graphics/shapes.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/tetris/graphics/graphics/sprite.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/tetris/letters.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/tetris/tetrisShapes.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/timg/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/timg/__main__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/timg/argparser.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/timg/meta.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/timg/methods/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/timg/methods/ansi.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/timg/methods/ansi_methods.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/timg/methods/ascii.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/timg/methods/method.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/timg/methods/sixel.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/timg/renderer.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/torch_hooks.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/torch_tools.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/tracetraptest.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/tweenline.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/libs/webeval_dataset.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/list_of_modules.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/misc/Todo +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/misc/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/misc/blm.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/misc/chainsaw.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/misc/death_of_the_mind.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/misc/flappy.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/misc/mario.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/misc/matrix.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/misc/mpi_untitled.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/misc/py2048.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/misc/pychess.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/misc/rp_logo.svg +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/misc/rp_mpi.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/misc/ryan_zshrc.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/misc/shotgun.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/misc/skia_trail_interactive_paint_demo.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/misc/snake.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/misc/sudoku.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/misc/tetris.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/misc/trans.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/application.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/auto_suggest.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/buffer.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/buffer_mapping.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/cache.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/clipboard/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/clipboard/base.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/clipboard/in_memory.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/clipboard/pyperclip.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/completion.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/contrib/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/contrib/completers/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/contrib/completers/base.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/contrib/completers/filesystem.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/contrib/completers/system.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/contrib/regular_languages/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/contrib/regular_languages/compiler.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/contrib/regular_languages/completion.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/contrib/regular_languages/lexer.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/contrib/regular_languages/regex_parser.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/contrib/regular_languages/validation.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/contrib/telnet/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/contrib/telnet/application.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/contrib/telnet/log.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/contrib/telnet/protocol.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/contrib/telnet/server.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/contrib/validators/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/contrib/validators/base.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/document.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/enums.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/eventloop/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/eventloop/asyncio_base.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/eventloop/asyncio_posix.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/eventloop/asyncio_win32.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/eventloop/base.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/eventloop/callbacks.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/eventloop/inputhook.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/eventloop/posix.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/eventloop/posix_utils.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/eventloop/select.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/eventloop/utils.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/eventloop/win32.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/filters/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/filters/base.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/filters/cli.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/filters/types.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/filters/utils.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/history.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/input.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/interface.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/key_binding/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/key_binding/bindings/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/key_binding/bindings/basic.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/key_binding/bindings/completion.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/key_binding/bindings/emacs.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/key_binding/bindings/named_commands.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/key_binding/bindings/scroll.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/key_binding/bindings/vi.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/key_binding/defaults.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/key_binding/digraphs.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/key_binding/input_processor.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/key_binding/manager.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/key_binding/registry.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/key_binding/vi_state.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/keys.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/layout/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/layout/containers.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/layout/controls.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/layout/dimension.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/layout/lexers.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/layout/margins.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/layout/menus.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/layout/mouse_handlers.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/layout/processors.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/layout/prompt.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/layout/screen.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/layout/toolbars.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/layout/untitled.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/layout/utils.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/mouse_events.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/output.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/reactive.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/renderer.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/search_state.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/selection.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/shortcuts.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/styles/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/styles/base.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/styles/defaults.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/styles/from_dict.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/styles/from_pygments.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/styles/utils.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/terminal/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/terminal/conemu_output.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/terminal/vt100_input.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/terminal/vt100_output.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/terminal/win32_input.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/terminal/win32_output.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/token.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/utils.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/validation.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/prompt_toolkit/win32_types.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/rp_ptpython/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/rp_ptpython/__main__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/rp_ptpython/ast_selection.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/rp_ptpython/async_analyzer_base.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/rp_ptpython/async_jedi_highlighter.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/rp_ptpython/backslash_commands.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/rp_ptpython/bash_completer.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/rp_ptpython/bash_extract.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/rp_ptpython/bash_inline.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/rp_ptpython/bash_rename.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/rp_ptpython/bash_selection.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/rp_ptpython/completer.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/rp_ptpython/completer_old.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/rp_ptpython/completion_ranker.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/rp_ptpython/completion_schema.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/rp_ptpython/completion_types.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/rp_ptpython/eventloop.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/rp_ptpython/filters.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/rp_ptpython/history_browser.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/rp_ptpython/ipython.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/rp_ptpython/jedi_highlighter.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/rp_ptpython/jedi_lexer.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/rp_ptpython/jedi_utils.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/rp_ptpython/key_bindings.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/rp_ptpython/layout.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/rp_ptpython/patch_linecache.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/rp_ptpython/path_completer_utils.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/rp_ptpython/prompt_style.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/rp_ptpython/python_input.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/rp_ptpython/r_iterm_comm.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/rp_ptpython/refactor_extract.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/rp_ptpython/refactor_inline.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/rp_ptpython/refactor_move.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/rp_ptpython/refactor_move_bash.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/rp_ptpython/refactor_rename.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/rp_ptpython/repl.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/rp_ptpython/rp_ptpdb/__init__.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/rp_ptpython/rp_ptpdb/commands.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/rp_ptpython/rp_ptpdb/completers.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/rp_ptpython/rp_ptpdb/completion_hints.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/rp_ptpython/rp_ptpdb/grammar.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/rp_ptpython/rp_ptpdb/key_bindings.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/rp_ptpython/rp_ptpdb/layout.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/rp_ptpython/rp_ptpdb/style.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/rp_ptpython/rp_ptpdb/toolbars.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/rp_ptpython/selection_utils.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/rp_ptpython/style.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/rp_ptpython/testable_keybindings.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/rp_ptpython/treesitter_selection.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/rp_ptpython/treesitter_semantic.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/rp_ptpython/unreachable_detector.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/rp_ptpython/utils.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/rp_ptpython/validator.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/ryan_vimrc.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp/web_evaluator.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp.egg-info/dependency_links.txt +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp.egg-info/entry_points.txt +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp.egg-info/requires.txt +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/rp.egg-info/top_level.txt +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/setup.cfg +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/setup.py +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/untitled.c +0 -0
- {rp-0.1.1370 → rp-0.1.1372}/update_module_paths.py +0 -0
|
@@ -14,7 +14,7 @@ ARCHIVE_WINDOW="ARCHIVE"
|
|
|
14
14
|
PANEL_WINDOW="PANEL"
|
|
15
15
|
ARCHIVE_DIR="/tmp/claude_bash_archive"
|
|
16
16
|
PANEL_SCRIPT="$(dirname "$0")/claude_panel.py"
|
|
17
|
-
PYTHON_BIN="
|
|
17
|
+
PYTHON_BIN="$RP_SYS_EXECUTABLE"
|
|
18
18
|
EMOJIS="🔴🟠🟡🟢🔵🟣🟤⚫⚪🩶🩷🩵❤️🧡💛💚💙💜🖤🤍🤎💗💖💝💘🍎🍊🍋🍏🫐🍇🍓🍒🍑🥭🍍🥝🌶️🥕🌽🥦🍆🫑🔥🌊🌿🌸🌺🌻🌼🌷💐🌈☀️⭐🌙💫✨⚡💎🔮🎈🎀🧊❄️🎯🎨🎭🎪🎠🎡🎢🏀🏈⚽🎾🎱🧩🪁🛸🚀💊🧬🦠🔬🧪🎵🎶🔔💡🔦🏮🪔🎃👾🤖👽🦋🐝🐞🌵🍄🌴🥀🪷🪻"
|
|
19
19
|
BASH_BIN="/bin/bash"
|
|
20
20
|
|
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Textual-based panel for managing ClaudeSH tmux processes.
|
|
4
|
+
Displays active processes with CPU/memory graphs, allows kill/goto actions.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import subprocess
|
|
8
|
+
from collections import deque
|
|
9
|
+
from dataclasses import dataclass, field
|
|
10
|
+
|
|
11
|
+
from textual.app import App, ComposeResult
|
|
12
|
+
from textual.binding import Binding
|
|
13
|
+
from textual.containers import ScrollableContainer, Horizontal
|
|
14
|
+
from textual.widgets import Button, Static, Header, Footer
|
|
15
|
+
|
|
16
|
+
SESSION = "ClaudeSh"
|
|
17
|
+
ARCHIVE_WINDOW = "ARCHIVE"
|
|
18
|
+
PANEL_WINDOW = "PANEL"
|
|
19
|
+
CPU_HISTORY_LEN = 20
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def run_cmd(cmd: list[str]) -> str:
|
|
23
|
+
try:
|
|
24
|
+
return subprocess.check_output(cmd, stderr=subprocess.DEVNULL, text=True).strip()
|
|
25
|
+
except subprocess.CalledProcessError:
|
|
26
|
+
return ""
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def get_tmux_windows() -> list[tuple[str, str]]:
|
|
30
|
+
"""Return list of (window_name, window_id) for ClaudeSH session."""
|
|
31
|
+
out = run_cmd(["tmux", "list-windows", "-t", SESSION, "-F", "#{window_name} #{window_id}"])
|
|
32
|
+
if not out:
|
|
33
|
+
return []
|
|
34
|
+
result = []
|
|
35
|
+
for line in out.splitlines():
|
|
36
|
+
parts = line.split(" ", 1)
|
|
37
|
+
if len(parts) == 2:
|
|
38
|
+
result.append((parts[0], parts[1]))
|
|
39
|
+
return result
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def extract_pid_from_name(name: str) -> int | None:
|
|
43
|
+
"""Extract trailing digits from window name as PID."""
|
|
44
|
+
digits = ""
|
|
45
|
+
for c in reversed(name):
|
|
46
|
+
if c.isdigit():
|
|
47
|
+
digits = c + digits
|
|
48
|
+
else:
|
|
49
|
+
break
|
|
50
|
+
return int(digits) if digits else None
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def get_process_stats(pid: int) -> tuple[str, float, float, str]:
|
|
54
|
+
"""Return (command, cpu_percent, memory_mb, elapsed) for a process."""
|
|
55
|
+
# Get stats separately to avoid parsing issues with command containing spaces
|
|
56
|
+
pid_str = str(pid)
|
|
57
|
+
command = run_cmd(["ps", "-o", "command=", "-p", pid_str])
|
|
58
|
+
stats = run_cmd(["ps", "-o", "%cpu=,rss=,etime=", "-p", pid_str])
|
|
59
|
+
if not stats:
|
|
60
|
+
return command, 0.0, 0.0, ""
|
|
61
|
+
parts = stats.split()
|
|
62
|
+
if len(parts) >= 3:
|
|
63
|
+
try:
|
|
64
|
+
cpu = float(parts[0])
|
|
65
|
+
mem_mb = float(parts[1]) / 1024
|
|
66
|
+
elapsed = parts[2].strip()
|
|
67
|
+
return command, cpu, mem_mb, elapsed
|
|
68
|
+
except ValueError:
|
|
69
|
+
pass
|
|
70
|
+
return command, 0.0, 0.0, ""
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def kill_process(pid: int):
|
|
74
|
+
"""Kill a process by PID."""
|
|
75
|
+
subprocess.run(["kill", "-9", str(pid)], check=False)
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def goto_window(window_id: str):
|
|
79
|
+
"""Switch to a tmux window."""
|
|
80
|
+
run_cmd(["tmux", "select-window", "-t", window_id])
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
@dataclass
|
|
84
|
+
class ProcessInfo:
|
|
85
|
+
pid: int
|
|
86
|
+
window_id: str
|
|
87
|
+
emoji: str
|
|
88
|
+
command: str = ""
|
|
89
|
+
elapsed: str = ""
|
|
90
|
+
cpu_history: deque = field(default_factory=lambda: deque(maxlen=CPU_HISTORY_LEN))
|
|
91
|
+
cpu_pct: float = 0.0
|
|
92
|
+
memory_mb: float = 0.0
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
class CpuGraph(Static):
|
|
96
|
+
"""Mini sparkline graph for CPU usage with percentage."""
|
|
97
|
+
|
|
98
|
+
def __init__(self, proc: ProcessInfo, **kwargs):
|
|
99
|
+
super().__init__(**kwargs)
|
|
100
|
+
self.proc = proc
|
|
101
|
+
|
|
102
|
+
def render(self) -> str:
|
|
103
|
+
blocks = "▁▂▃▄▅▆▇█"
|
|
104
|
+
if not self.proc.cpu_history:
|
|
105
|
+
graph = "▁" * CPU_HISTORY_LEN
|
|
106
|
+
else:
|
|
107
|
+
max_val = max(self.proc.cpu_history) or 100
|
|
108
|
+
graph = "".join(
|
|
109
|
+
blocks[min(int(v / max_val * 7), 7)] for v in self.proc.cpu_history
|
|
110
|
+
).ljust(CPU_HISTORY_LEN, "▁")
|
|
111
|
+
return f"{graph} {self.proc.cpu_pct:5.1f}%"
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
class MemoryBar(Static):
|
|
115
|
+
"""Memory usage bar."""
|
|
116
|
+
|
|
117
|
+
def __init__(self, proc: ProcessInfo, **kwargs):
|
|
118
|
+
super().__init__(**kwargs)
|
|
119
|
+
self.proc = proc
|
|
120
|
+
|
|
121
|
+
def render(self) -> str:
|
|
122
|
+
filled = min(int(self.proc.memory_mb / 1024 * 10), 10)
|
|
123
|
+
bar = "█" * filled + "░" * (10 - filled)
|
|
124
|
+
return f"[{bar}] {self.proc.memory_mb:.0f}MB"
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
class ProcessRow(Static):
|
|
128
|
+
"""A row displaying one process with controls."""
|
|
129
|
+
|
|
130
|
+
DEFAULT_CSS = """
|
|
131
|
+
ProcessRow {
|
|
132
|
+
height: auto;
|
|
133
|
+
padding: 1;
|
|
134
|
+
border: solid $primary;
|
|
135
|
+
margin-bottom: 1;
|
|
136
|
+
}
|
|
137
|
+
ProcessRow:focus {
|
|
138
|
+
border: double $accent;
|
|
139
|
+
background: $surface-lighten-1;
|
|
140
|
+
}
|
|
141
|
+
ProcessRow .row-header { height: 3; width: 100%; }
|
|
142
|
+
ProcessRow .pid-label { width: 20; }
|
|
143
|
+
ProcessRow .elapsed { width: 15; color: $accent; }
|
|
144
|
+
ProcessRow .command-display { height: 1; padding-left: 2; color: $text-muted; }
|
|
145
|
+
ProcessRow .stats-row { height: 1; width: 100%; margin-top: 1; }
|
|
146
|
+
ProcessRow .cpu-label { width: 5; color: $success; }
|
|
147
|
+
ProcessRow .cpu-graph { width: 28; color: $success; }
|
|
148
|
+
ProcessRow .mem-label { width: 5; color: $warning; }
|
|
149
|
+
ProcessRow .mem-bar { width: 25; color: $warning; }
|
|
150
|
+
ProcessRow Button { min-width: 10; height: 3; }
|
|
151
|
+
ProcessRow .kill-btn { margin-left: 2; }
|
|
152
|
+
ProcessRow .goto-btn { margin-left: 1; }
|
|
153
|
+
"""
|
|
154
|
+
|
|
155
|
+
can_focus = True
|
|
156
|
+
|
|
157
|
+
def __init__(self, proc: ProcessInfo, **kwargs):
|
|
158
|
+
super().__init__(**kwargs)
|
|
159
|
+
self.proc = proc
|
|
160
|
+
|
|
161
|
+
def compose(self) -> ComposeResult:
|
|
162
|
+
with Horizontal(classes="row-header"):
|
|
163
|
+
yield Static(f"{self.proc.emoji} PID {self.proc.pid}", classes="pid-label")
|
|
164
|
+
yield Static(f"⏱ {self.proc.elapsed}", classes="elapsed", id=f"elapsed-{self.proc.pid}")
|
|
165
|
+
yield Button("✕ Kill", id=f"kill-{self.proc.pid}", classes="kill-btn", variant="error")
|
|
166
|
+
yield Button("→ Go", id=f"goto-{self.proc.pid}", classes="goto-btn", variant="primary")
|
|
167
|
+
|
|
168
|
+
yield Static(f" {self.proc.command[:150] or '(no command)'}", classes="command-display")
|
|
169
|
+
|
|
170
|
+
with Horizontal(classes="stats-row"):
|
|
171
|
+
yield Static("CPU:", classes="cpu-label")
|
|
172
|
+
yield CpuGraph(self.proc, classes="cpu-graph", id=f"cpu-{self.proc.pid}")
|
|
173
|
+
yield Static(" MEM:", classes="mem-label")
|
|
174
|
+
yield MemoryBar(self.proc, classes="mem-bar", id=f"mem-{self.proc.pid}")
|
|
175
|
+
|
|
176
|
+
def on_button_pressed(self, event: Button.Pressed) -> None:
|
|
177
|
+
btn_id = event.button.id or ""
|
|
178
|
+
if btn_id.startswith("kill-"):
|
|
179
|
+
kill_process(self.proc.pid)
|
|
180
|
+
self.app.refresh_processes()
|
|
181
|
+
elif btn_id.startswith("goto-"):
|
|
182
|
+
goto_window(self.proc.window_id)
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
class ClaudePanel(App):
|
|
186
|
+
"""Main panel application for ClaudeSH process management."""
|
|
187
|
+
|
|
188
|
+
TITLE = "ClaudeSH Panel"
|
|
189
|
+
CSS = """
|
|
190
|
+
Screen { background: $surface; }
|
|
191
|
+
#container { height: 100%; }
|
|
192
|
+
#no-processes { text-align: center; padding: 5; color: $text-muted; }
|
|
193
|
+
"""
|
|
194
|
+
|
|
195
|
+
BINDINGS = [
|
|
196
|
+
Binding("q", "quit", "Quit"),
|
|
197
|
+
Binding("r", "refresh", "Refresh"),
|
|
198
|
+
Binding("j", "next", "Next", show=False),
|
|
199
|
+
Binding("k", "prev", "Prev", show=False),
|
|
200
|
+
Binding("down", "next", "Next"),
|
|
201
|
+
Binding("up", "prev", "Prev"),
|
|
202
|
+
Binding("x", "kill_focused", "Kill"),
|
|
203
|
+
Binding("g", "goto_focused", "Go To"),
|
|
204
|
+
Binding("enter", "goto_focused", "Go To", show=False),
|
|
205
|
+
]
|
|
206
|
+
|
|
207
|
+
def __init__(self):
|
|
208
|
+
super().__init__()
|
|
209
|
+
self.processes: dict[int, ProcessInfo] = {}
|
|
210
|
+
self._ui_built = False
|
|
211
|
+
|
|
212
|
+
def compose(self) -> ComposeResult:
|
|
213
|
+
yield Header()
|
|
214
|
+
yield ScrollableContainer(id="container")
|
|
215
|
+
yield Footer()
|
|
216
|
+
|
|
217
|
+
def on_mount(self) -> None:
|
|
218
|
+
self.call_after_refresh(self.refresh_processes)
|
|
219
|
+
self.set_interval(1.0, self.update_stats)
|
|
220
|
+
self.set_interval(2.0, self.refresh_processes)
|
|
221
|
+
|
|
222
|
+
def refresh_processes(self) -> None:
|
|
223
|
+
"""Refresh the list of processes from tmux."""
|
|
224
|
+
try:
|
|
225
|
+
windows = get_tmux_windows()
|
|
226
|
+
current_pids = set(self.processes.keys())
|
|
227
|
+
new_pids = set()
|
|
228
|
+
|
|
229
|
+
for name, wid in windows:
|
|
230
|
+
if name in (ARCHIVE_WINDOW, PANEL_WINDOW):
|
|
231
|
+
continue
|
|
232
|
+
pid = extract_pid_from_name(name)
|
|
233
|
+
if pid is None:
|
|
234
|
+
continue
|
|
235
|
+
new_pids.add(pid)
|
|
236
|
+
|
|
237
|
+
if pid not in self.processes:
|
|
238
|
+
emoji = name[0] if name else "?"
|
|
239
|
+
cmd, cpu, mem, elapsed = get_process_stats(pid)
|
|
240
|
+
self.processes[pid] = ProcessInfo(
|
|
241
|
+
pid=pid, window_id=wid, emoji=emoji,
|
|
242
|
+
command=cmd, elapsed=elapsed, cpu_pct=cpu, memory_mb=mem,
|
|
243
|
+
)
|
|
244
|
+
|
|
245
|
+
for pid in current_pids - new_pids:
|
|
246
|
+
del self.processes[pid]
|
|
247
|
+
|
|
248
|
+
if new_pids != current_pids or not self._ui_built:
|
|
249
|
+
self._ui_built = True
|
|
250
|
+
self.rebuild_ui()
|
|
251
|
+
except Exception:
|
|
252
|
+
pass
|
|
253
|
+
|
|
254
|
+
def rebuild_ui(self) -> None:
|
|
255
|
+
"""Rebuild the process list UI."""
|
|
256
|
+
try:
|
|
257
|
+
container = self.query_one("#container", ScrollableContainer)
|
|
258
|
+
container.remove_children()
|
|
259
|
+
|
|
260
|
+
if not self.processes:
|
|
261
|
+
container.mount(Static("No active processes", id="no-processes"))
|
|
262
|
+
else:
|
|
263
|
+
for pid in sorted(self.processes.keys()):
|
|
264
|
+
container.mount(ProcessRow(self.processes[pid], id=f"row-{pid}"))
|
|
265
|
+
rows = self.query("ProcessRow")
|
|
266
|
+
if rows:
|
|
267
|
+
rows.first().focus()
|
|
268
|
+
except Exception:
|
|
269
|
+
pass
|
|
270
|
+
|
|
271
|
+
def update_stats(self) -> None:
|
|
272
|
+
"""Update CPU/memory/elapsed stats for all processes."""
|
|
273
|
+
try:
|
|
274
|
+
for pid, proc in list(self.processes.items()):
|
|
275
|
+
_, cpu, mem, elapsed = get_process_stats(pid)
|
|
276
|
+
proc.cpu_history.append(cpu)
|
|
277
|
+
proc.cpu_pct = cpu
|
|
278
|
+
proc.memory_mb = mem
|
|
279
|
+
proc.elapsed = elapsed
|
|
280
|
+
|
|
281
|
+
try:
|
|
282
|
+
self.query_one(f"#cpu-{pid}").refresh()
|
|
283
|
+
self.query_one(f"#mem-{pid}").refresh()
|
|
284
|
+
self.query_one(f"#elapsed-{pid}", Static).update(f"⏱ {elapsed}")
|
|
285
|
+
except Exception:
|
|
286
|
+
pass
|
|
287
|
+
except Exception:
|
|
288
|
+
pass
|
|
289
|
+
|
|
290
|
+
def action_refresh(self) -> None:
|
|
291
|
+
self.refresh_processes()
|
|
292
|
+
|
|
293
|
+
def action_next(self) -> None:
|
|
294
|
+
self.screen.focus_next("ProcessRow")
|
|
295
|
+
|
|
296
|
+
def action_prev(self) -> None:
|
|
297
|
+
self.screen.focus_previous("ProcessRow")
|
|
298
|
+
|
|
299
|
+
def action_kill_focused(self) -> None:
|
|
300
|
+
if isinstance(self.focused, ProcessRow):
|
|
301
|
+
kill_process(self.focused.proc.pid)
|
|
302
|
+
self.refresh_processes()
|
|
303
|
+
|
|
304
|
+
def action_goto_focused(self) -> None:
|
|
305
|
+
if isinstance(self.focused, ProcessRow):
|
|
306
|
+
goto_window(self.focused.proc.window_id)
|
|
307
|
+
|
|
308
|
+
|
|
309
|
+
def main():
|
|
310
|
+
ClaudePanel().run()
|
|
311
|
+
|
|
312
|
+
|
|
313
|
+
if __name__ == "__main__":
|
|
314
|
+
main()
|
|
@@ -50865,6 +50865,27 @@ def _run_bashtop():
|
|
|
50865
50865
|
#Run it!
|
|
50866
50866
|
os.system('bashtop')
|
|
50867
50867
|
|
|
50868
|
+
|
|
50869
|
+
def _run_voicething():
|
|
50870
|
+
'''A voice to text program see https://github.com/RyannDaGreat/voicething'''
|
|
50871
|
+
git_import('voicething')
|
|
50872
|
+
|
|
50873
|
+
import rp.git.voicething.voice_thing as voice_thing_module
|
|
50874
|
+
voice_thing_file=voice_thing_module.__file__
|
|
50875
|
+
requirements_file=with_file_name(voice_thing_file,'requirements.txt',keep_extension=False)
|
|
50876
|
+
check_pip_requirements(requirements_file)
|
|
50877
|
+
|
|
50878
|
+
command = shlex.join(
|
|
50879
|
+
[
|
|
50880
|
+
sys.executable,
|
|
50881
|
+
get_absolute_path(voice_thing_file),
|
|
50882
|
+
]
|
|
50883
|
+
)
|
|
50884
|
+
|
|
50885
|
+
tmux_kill_session("VoiceThing", strict=False)
|
|
50886
|
+
yaml = tmuxp_create_session_yaml({"VoiceThing": command}, session_name="VoiceThing")
|
|
50887
|
+
tmuxp_launch_session_from_yaml(yaml,attach=True)
|
|
50888
|
+
|
|
50868
50889
|
def _disable_terminal_mouse_reporting():
|
|
50869
50890
|
"""
|
|
50870
50891
|
Disables terminal mouse reporting/tracking modes that can cause
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1372
|
rp-0.1.1372/version.py
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1372
|
rp-0.1.1370/rp/version.py
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
1370
|
rp-0.1.1370/version.py
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
1370
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|