ripperdoc 0.2.2__py3-none-any.whl → 0.2.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. ripperdoc/__init__.py +1 -1
  2. ripperdoc/cli/cli.py +9 -2
  3. ripperdoc/cli/commands/agents_cmd.py +8 -4
  4. ripperdoc/cli/commands/cost_cmd.py +5 -0
  5. ripperdoc/cli/commands/doctor_cmd.py +12 -4
  6. ripperdoc/cli/commands/memory_cmd.py +6 -13
  7. ripperdoc/cli/commands/models_cmd.py +36 -6
  8. ripperdoc/cli/commands/resume_cmd.py +4 -2
  9. ripperdoc/cli/commands/status_cmd.py +1 -1
  10. ripperdoc/cli/ui/rich_ui.py +102 -2
  11. ripperdoc/cli/ui/thinking_spinner.py +128 -0
  12. ripperdoc/core/agents.py +13 -5
  13. ripperdoc/core/config.py +9 -1
  14. ripperdoc/core/providers/__init__.py +31 -0
  15. ripperdoc/core/providers/anthropic.py +136 -0
  16. ripperdoc/core/providers/base.py +187 -0
  17. ripperdoc/core/providers/gemini.py +172 -0
  18. ripperdoc/core/providers/openai.py +142 -0
  19. ripperdoc/core/query.py +331 -141
  20. ripperdoc/core/query_utils.py +64 -23
  21. ripperdoc/core/tool.py +5 -3
  22. ripperdoc/sdk/client.py +12 -1
  23. ripperdoc/tools/background_shell.py +54 -18
  24. ripperdoc/tools/bash_tool.py +33 -13
  25. ripperdoc/tools/file_edit_tool.py +13 -0
  26. ripperdoc/tools/file_read_tool.py +16 -0
  27. ripperdoc/tools/file_write_tool.py +13 -0
  28. ripperdoc/tools/glob_tool.py +5 -1
  29. ripperdoc/tools/ls_tool.py +14 -10
  30. ripperdoc/tools/multi_edit_tool.py +12 -0
  31. ripperdoc/tools/notebook_edit_tool.py +12 -0
  32. ripperdoc/tools/todo_tool.py +1 -3
  33. ripperdoc/tools/tool_search_tool.py +8 -4
  34. ripperdoc/utils/file_watch.py +134 -0
  35. ripperdoc/utils/git_utils.py +36 -38
  36. ripperdoc/utils/json_utils.py +1 -2
  37. ripperdoc/utils/log.py +3 -4
  38. ripperdoc/utils/memory.py +1 -3
  39. ripperdoc/utils/message_compaction.py +2 -6
  40. ripperdoc/utils/messages.py +9 -13
  41. ripperdoc/utils/output_utils.py +1 -3
  42. ripperdoc/utils/prompt.py +17 -0
  43. ripperdoc/utils/session_usage.py +7 -0
  44. ripperdoc/utils/shell_utils.py +159 -0
  45. {ripperdoc-0.2.2.dist-info → ripperdoc-0.2.3.dist-info}/METADATA +1 -1
  46. ripperdoc-0.2.3.dist-info/RECORD +95 -0
  47. ripperdoc-0.2.2.dist-info/RECORD +0 -86
  48. {ripperdoc-0.2.2.dist-info → ripperdoc-0.2.3.dist-info}/WHEEL +0 -0
  49. {ripperdoc-0.2.2.dist-info → ripperdoc-0.2.3.dist-info}/entry_points.txt +0 -0
  50. {ripperdoc-0.2.2.dist-info → ripperdoc-0.2.3.dist-info}/licenses/LICENSE +0 -0
  51. {ripperdoc-0.2.2.dist-info → ripperdoc-0.2.3.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,159 @@
1
+ """Shell detection helpers.
2
+
3
+ Selects a suitable interactive shell for running commands, preferring bash/zsh
4
+ over the system's /bin/sh default to ensure features like brace expansion.
5
+ On Windows, prefers Git Bash and falls back to cmd.exe if no bash is available.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ import os
11
+ import shutil
12
+ from typing import Iterable, List
13
+
14
+ from ripperdoc.utils.log import get_logger
15
+
16
+ logger = get_logger()
17
+
18
+ # Common locations to probe if shutil.which misses an otherwise standard path.
19
+ _COMMON_BIN_DIRS: tuple[str, ...] = ("/bin", "/usr/bin", "/usr/local/bin", "/opt/homebrew/bin")
20
+ _IS_WINDOWS = os.name == "nt"
21
+
22
+
23
+ def _is_executable(path: str) -> bool:
24
+ return bool(path) and os.path.isfile(path) and os.access(path, os.X_OK)
25
+
26
+
27
+ def _dedupe_preserve_order(items: Iterable[str]) -> list[str]:
28
+ seen = set()
29
+ ordered: list[str] = []
30
+ for item in items:
31
+ if item and item not in seen:
32
+ ordered.append(item)
33
+ seen.add(item)
34
+ return ordered
35
+
36
+
37
+ def _find_git_bash_windows() -> str | None:
38
+ env_path = os.environ.get("GIT_BASH_PATH") or os.environ.get("GITBASH")
39
+ if env_path and _is_executable(env_path):
40
+ return env_path
41
+
42
+ bash_in_path = shutil.which("bash")
43
+ if bash_in_path and "git" in bash_in_path.lower():
44
+ return bash_in_path
45
+
46
+ common = [
47
+ r"C:\Program Files\Git\bin\bash.exe",
48
+ r"C:\Program Files\Git\usr\bin\bash.exe",
49
+ r"C:\Program Files (x86)\Git\bin\bash.exe",
50
+ r"C:\Program Files (x86)\Git\usr\bin\bash.exe",
51
+ ]
52
+ for path in common:
53
+ if _is_executable(path):
54
+ return path
55
+ return None
56
+
57
+
58
+ def _windows_cmd_path() -> str | None:
59
+ comspec = os.environ.get("ComSpec")
60
+ if _is_executable(comspec or ""):
61
+ return comspec
62
+ which_cmd = shutil.which("cmd.exe") or shutil.which("cmd")
63
+ if which_cmd and _is_executable(which_cmd):
64
+ return which_cmd
65
+ system32 = os.path.join(os.environ.get("SystemRoot", r"C:\Windows"), "System32", "cmd.exe")
66
+ if _is_executable(system32):
67
+ return system32
68
+ return None
69
+
70
+
71
+ def find_suitable_shell() -> str:
72
+ """Return a best-effort shell path, preferring bash/zsh (Git Bash on Windows).
73
+
74
+ Priority on Unix:
75
+ 1) $SHELL if it's bash/zsh and executable
76
+ 2) bash/zsh from PATH
77
+ 3) bash/zsh in common bin directories
78
+
79
+ Priority on Windows:
80
+ 1) Git Bash (env override or known locations / PATH)
81
+ 2) cmd.exe as a last resort
82
+
83
+ Raises:
84
+ RuntimeError: if no suitable shell is found.
85
+ """
86
+
87
+ env_override = os.environ.get("RIPPERDOC_SHELL") or os.environ.get("RIPPERDOC_SHELL_PATH")
88
+ if env_override and _is_executable(env_override):
89
+ logger.debug("Using shell from RIPPERDOC_SHELL*: %s", env_override)
90
+ return env_override
91
+
92
+ current_shell = os.environ.get("SHELL", "")
93
+ current_is_bash = "bash" in current_shell
94
+ current_is_zsh = "zsh" in current_shell
95
+
96
+ if not _IS_WINDOWS:
97
+ if (current_is_bash or current_is_zsh) and _is_executable(current_shell):
98
+ logger.debug("Using SHELL from environment: %s", current_shell)
99
+ return current_shell
100
+
101
+ bash_path = shutil.which("bash") or ""
102
+ zsh_path = shutil.which("zsh") or ""
103
+ preferred_order = ["bash", "zsh"] if current_is_bash else ["zsh", "bash"]
104
+
105
+ candidates: list[str] = []
106
+ for name in preferred_order:
107
+ if name == "bash" and bash_path:
108
+ candidates.append(bash_path)
109
+ if name == "zsh" and zsh_path:
110
+ candidates.append(zsh_path)
111
+
112
+ for bin_dir in _COMMON_BIN_DIRS:
113
+ candidates.append(os.path.join(bin_dir, "bash"))
114
+ candidates.append(os.path.join(bin_dir, "zsh"))
115
+
116
+ for candidate in _dedupe_preserve_order(candidates):
117
+ if _is_executable(candidate):
118
+ logger.debug("Selected shell: %s", candidate)
119
+ return candidate
120
+
121
+ error_message = (
122
+ "No suitable shell found. Please install bash or zsh and ensure $SHELL is set. "
123
+ "Tried bash/zsh in PATH and common locations."
124
+ )
125
+ logger.error(error_message)
126
+ raise RuntimeError(error_message)
127
+
128
+ git_bash = _find_git_bash_windows()
129
+ if git_bash:
130
+ logger.debug("Using Git Bash: %s", git_bash)
131
+ return git_bash
132
+
133
+ cmd_path = _windows_cmd_path()
134
+ if cmd_path:
135
+ logger.warning("Falling back to cmd.exe; bash not found. Using: %s", cmd_path)
136
+ return cmd_path
137
+
138
+ error_message = (
139
+ "No suitable shell found on Windows. Install Git for Windows to provide bash "
140
+ "or ensure cmd.exe is available."
141
+ )
142
+ logger.error(error_message)
143
+ raise RuntimeError(error_message)
144
+
145
+
146
+ def build_shell_command(shell_path: str, command: str) -> List[str]:
147
+ """Build argv for running a command with the selected shell.
148
+
149
+ For bash/zsh (including Git Bash), use -lc to run as login shell.
150
+ For cmd.exe fallback, use /d /s /c.
151
+ """
152
+
153
+ lower = shell_path.lower()
154
+ if lower.endswith("cmd.exe") or lower.endswith("\\cmd"):
155
+ return [shell_path, "/d", "/s", "/c", command]
156
+ return [shell_path, "-lc", command]
157
+
158
+
159
+ __all__ = ["find_suitable_shell", "build_shell_command"]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ripperdoc
3
- Version: 0.2.2
3
+ Version: 0.2.3
4
4
  Summary: AI-powered terminal assistant for coding tasks
5
5
  Author: Ripperdoc Team
6
6
  License: Apache-2.0
@@ -0,0 +1,95 @@
1
+ ripperdoc/__init__.py,sha256=UNSvPbYxqTbZJseto7Btn4nFqfZkKezUBuwPQuI2yOk,66
2
+ ripperdoc/__main__.py,sha256=7oIFEXI2irIoZ_dhcMd3hCs4Dj8tmMBbwiVACAoeE-k,506
3
+ ripperdoc/cli/__init__.py,sha256=03wf6gXBcEgXJrDJS-W_5BEG_DdJ_ep7CxQFPML-73g,35
4
+ ripperdoc/cli/cli.py,sha256=fszg31t6QyWeBEM6PkoidpwamYXvYQScKCSSq8F8uHM,13043
5
+ ripperdoc/cli/commands/__init__.py,sha256=J13i7g-69PVLhO5IJH5OvVK0FJLIFj0b84mm33JvpcE,2329
6
+ ripperdoc/cli/commands/agents_cmd.py,sha256=Iq_sycFhLnEK8o1agdxy0yFXt38DhLIQoxETXM4aVRs,10183
7
+ ripperdoc/cli/commands/base.py,sha256=4KUjxCM04MwbSMUKVNEBph_jeAKPI8b5MHsUFoz7l5g,386
8
+ ripperdoc/cli/commands/clear_cmd.py,sha256=zSYT0Nn_htZzLWTTQ4E5KWHfRg0Q5CYvRO4e--7thBY,345
9
+ ripperdoc/cli/commands/compact_cmd.py,sha256=C_qdPTPdg1cOHdmODkaYoRusosgiqRK6c6KID_Gwq0k,330
10
+ ripperdoc/cli/commands/config_cmd.py,sha256=ebIQk7zUFv353liWfbBSSfPiOaaCR7rQsd_eTw7nsvY,884
11
+ ripperdoc/cli/commands/context_cmd.py,sha256=d0KiJyjbuDNXYlfSzVTFmxmkLXJZe3pUDg_Tt67OWqs,4359
12
+ ripperdoc/cli/commands/cost_cmd.py,sha256=yD9LSqgxVvYNTDPnEHxugjyLWcmbtH5dXim7DIW9zXc,2822
13
+ ripperdoc/cli/commands/doctor_cmd.py,sha256=JQVexktceKTBMml5MO-V86IsDsSqXcSA8igw2zf3Qpo,6655
14
+ ripperdoc/cli/commands/exit_cmd.py,sha256=B0CNKQos2eRC4LSjizLdKsFYzFfwRkrUur6Afu3Fh9M,334
15
+ ripperdoc/cli/commands/help_cmd.py,sha256=iz1vR-rmWsvvfzdebLiIWEWrcMZo5_Eb55_wLr4Ufno,508
16
+ ripperdoc/cli/commands/mcp_cmd.py,sha256=S0iQxclxqgbIxbKcC9oFrckLalzk-1eyAYwkfEZQsGU,2307
17
+ ripperdoc/cli/commands/memory_cmd.py,sha256=Wu8Mh72jBY_9A-hEnW430by0piSOOlGx9PJd4IdpVVs,6494
18
+ ripperdoc/cli/commands/models_cmd.py,sha256=WM4UYEISQkSOqquNIftzkciscqjaj8DNyq9Oa-b6CMU,14367
19
+ ripperdoc/cli/commands/resume_cmd.py,sha256=dJNZ44UvJImGKMrVrgiYw5NSK-vTUnp9GxduvIXtmf8,3013
20
+ ripperdoc/cli/commands/status_cmd.py,sha256=yM_c_GgoAL7CMH_ucGSwUhlbHggxYuvCEb4AXtpN-8s,5534
21
+ ripperdoc/cli/commands/tasks_cmd.py,sha256=lgVzN6_KFQGltb7bgn4Wwmkuq91H_mgzCrga67hgjT4,8292
22
+ ripperdoc/cli/commands/todos_cmd.py,sha256=7Q0B1NVqGtB3R29ndbn4m0VQQm-YQ7d4Wlk7vJ7dLQI,1848
23
+ ripperdoc/cli/commands/tools_cmd.py,sha256=3cMi0vN4mAUhpKqJtRgNvZfcKzRPaMs_pkYYXlyvSSU,384
24
+ ripperdoc/cli/ui/__init__.py,sha256=TxSzTYdITlrYmYVfins_w_jzPqqWRpqky5u1ikwvmtM,43
25
+ ripperdoc/cli/ui/context_display.py,sha256=3ezdtHVwltkPQ5etYwfqUh-fjnpPu8B3P81UzrdHxZs,10020
26
+ ripperdoc/cli/ui/helpers.py,sha256=TJCipP0neh-96ETQfGhusCJ4aWt5gLw1HZbI-3bWDpw,739
27
+ ripperdoc/cli/ui/rich_ui.py,sha256=Qs0rzd-P56Bkd6W7uHXjV2R3pCFAloZOwe2F6fds_L4,51991
28
+ ripperdoc/cli/ui/spinner.py,sha256=XsPRwJ-70InLX9Qw50CEgSHn5oKA5PFIue8Un4edhUk,1449
29
+ ripperdoc/cli/ui/thinking_spinner.py,sha256=9Et5EqPChfkmkiOO8w1OPs8t-sHaisgjn9A__kEYLyg,2824
30
+ ripperdoc/core/__init__.py,sha256=UemJCA-Y8df1466AX-YbRFj071zKajmqO1mi40YVW2g,40
31
+ ripperdoc/core/agents.py,sha256=kGVLTcXVwOwrRBvvC9E_tKaQJ5u-wChIYE2VqYMJx00,10348
32
+ ripperdoc/core/commands.py,sha256=NXCkljYbAP4dDoRy-_3semFNWxG4YAk9q82u8FTKH60,835
33
+ ripperdoc/core/config.py,sha256=DRPi8uzfBmRKefcqlRKLDf4zYYsj0sxF42ROUZ10GN8,15709
34
+ ripperdoc/core/default_tools.py,sha256=t8cLZBOVReF5hvmyhUTziUSnnDMyKDjS7YjuSd_yolw,2568
35
+ ripperdoc/core/permissions.py,sha256=qWaVIaps9Ht0M4jgDk9J0gDErptvf6jzEZ2t48lZ_1I,9187
36
+ ripperdoc/core/query.py,sha256=nxi8Q2JH2VHfCsb5FbwQ1k-ZObt2xeAqovsYQVJ9Yjc,29190
37
+ ripperdoc/core/query_utils.py,sha256=dmbuFM_PZOntBHBLkyzq0-OubH1z3GF_Nn80aChT_TA,22940
38
+ ripperdoc/core/system_prompt.py,sha256=QH7Wg8QqwzvAzjuBayr57w-BazqIQrHfuGvC2KqVkgI,24190
39
+ ripperdoc/core/tool.py,sha256=QEmkygAiXsBK3NBnJnL2NevrcgRpG83OIA0TAwuc7OQ,7027
40
+ ripperdoc/core/providers/__init__.py,sha256=CSqOeET3UowMQV3esmAHI7JfsyYV-m-C5vC6VutI-fY,888
41
+ ripperdoc/core/providers/anthropic.py,sha256=vqQfbGOGKpPEHVc7x4uJFE_nHtWCgiK65KGslVarJkU,5139
42
+ ripperdoc/core/providers/base.py,sha256=cwkWUvLzWxesKI-xzvj1STIlMPNgyKGvCBCLIpZgV9c,6604
43
+ ripperdoc/core/providers/gemini.py,sha256=aS93WBcLzk871DavETNmS5IYaodQEsVWbS19GhGBYOk,6409
44
+ ripperdoc/core/providers/openai.py,sha256=pYMeTQvmnAfT-BimnymDp_7zieNShkfd9573A4S0U7k,5594
45
+ ripperdoc/sdk/__init__.py,sha256=aDSgI4lcCDs9cV3bxNmEEV3SuYx2aCd4VnUjs6H-R7E,213
46
+ ripperdoc/sdk/client.py,sha256=gkduot4gvN1k41WVkHCpiuU7wGLL-SFG-KTTQrMomWc,10814
47
+ ripperdoc/tools/__init__.py,sha256=RBFz0DDnztDXMqv_zRxFHVY-ez2HYcncx8zh_y-BX6w,42
48
+ ripperdoc/tools/background_shell.py,sha256=1PEdlzOBzRKSOmzO_OViDMXcdXzW9grTzukGzRocYb0,10362
49
+ ripperdoc/tools/bash_output_tool.py,sha256=ljIOzTOnkbQfe3jExlhpUlMiLT6HpeD-1QI-D1CwHh8,3379
50
+ ripperdoc/tools/bash_tool.py,sha256=s4FrJTqC_bIN7gqBtbBUr9gt11LsVmWWkplp1ljlzmw,37461
51
+ ripperdoc/tools/file_edit_tool.py,sha256=3fLBcXpwX_SumZRiP-1TJ1qIfWA-AQF88Ji_MCI1Ldo,11871
52
+ ripperdoc/tools/file_read_tool.py,sha256=kKdhj6BXIyKCSxbB063BDAKNjAd36xtTUH-fixWhwHE,6721
53
+ ripperdoc/tools/file_write_tool.py,sha256=fxh4qUGNqby7iFWuADImF4AyOAskMTzqC7CZLHCqcpo,5296
54
+ ripperdoc/tools/glob_tool.py,sha256=e7yS1RvE3VJw5aOwoEPk8fLUSUr6mUmFsi8u8_3TV9Y,5856
55
+ ripperdoc/tools/grep_tool.py,sha256=LfLpPmqD9CIPk6kFYDDmIcykj7uN0xoKtyodc2412FA,8340
56
+ ripperdoc/tools/kill_bash_tool.py,sha256=36F8w2Rm1IVQitwOAwS-D8NTnyQdWfKWIam44qlXErk,4625
57
+ ripperdoc/tools/ls_tool.py,sha256=RlaTciHmjgNFopzUEOJjBp1NqNYhr8F1VIekRgqDwSg,15249
58
+ ripperdoc/tools/mcp_tools.py,sha256=ejofb2UEwH0r-ZAEvvq9nWvCgRGTAqiOws_X2T0YBU0,31263
59
+ ripperdoc/tools/multi_edit_tool.py,sha256=63xircd2ovrk9n1YJ8tfkLDFLvSRFtWAJh3aURmELcE,15829
60
+ ripperdoc/tools/notebook_edit_tool.py,sha256=zGFLRoIUCYEQUUcAiV4izJ09YFKUjaY2zGUJAjucq8c,12656
61
+ ripperdoc/tools/task_tool.py,sha256=bKvJy0hMJcY4MEmWDXqYH0CKfgMKEtaCO9UF9xdngc0,11983
62
+ ripperdoc/tools/todo_tool.py,sha256=QqgWW7LjylD8nmeeO_rkgjnzs8o1O-UVDD-rXObcVuE,19954
63
+ ripperdoc/tools/tool_search_tool.py,sha256=YmSGCviaHiMmYghmPO0Km6ZOI5kkQrjz7qb3G_EFjiI,13763
64
+ ripperdoc/utils/__init__.py,sha256=gdso60znB2hsYZ_YZBKVcuOY3QVfoqD2wHQ4pvr5lSw,37
65
+ ripperdoc/utils/bash_constants.py,sha256=KNn8bzB6nVU5jid9jvjiH4FAu8pP3DZONJ-OknJypAQ,1641
66
+ ripperdoc/utils/bash_output_utils.py,sha256=3Cf5wKJzRbUesmCNy5HtXIBtv0Z2BxklTfFHJ9q1T3w,1210
67
+ ripperdoc/utils/exit_code_handlers.py,sha256=QtO1iDxVAb8Xp03D6_QixPoJC-RQlcp3ssIo_rm4two,7973
68
+ ripperdoc/utils/file_watch.py,sha256=idleNFevHctDSJd23d4Y25XdJooFRpgepOcOEmp9pDg,3970
69
+ ripperdoc/utils/git_utils.py,sha256=Hq-Zx-KPyX4lp_i8ozhic15LyYdX_IfCRm-EyoFu59A,9047
70
+ ripperdoc/utils/json_utils.py,sha256=Ayv4h0aafTbzhpoN4FMPaBxLx9MfoK2PuOVd1_52-k0,706
71
+ ripperdoc/utils/log.py,sha256=98JbVkZQd2OsFo789pgf9q96D6A5IcyT5ubzrPAEoWs,6176
72
+ ripperdoc/utils/mcp.py,sha256=aIGmJLErQ1xRSzTj9Hm3ns2gW8oTvfrFBIukyNXaURk,17037
73
+ ripperdoc/utils/memory.py,sha256=gRhVTRaCo0YOQeXm1i-sndnTku7qhTB-PSYdFD0OzxU,7872
74
+ ripperdoc/utils/message_compaction.py,sha256=307IXnYqGYmj2iZUbfhNULj0BOVSlSTeOUg0Sik79EA,24797
75
+ ripperdoc/utils/messages.py,sha256=8iRolxS6VoJtcaFU41tzKSdsfBSJMXMGUnUTLXKkfnw,17334
76
+ ripperdoc/utils/output_utils.py,sha256=R3wqFh9Dko_GK00Exx7XI0DnnldRWMsxZypYX5y6SJo,7448
77
+ ripperdoc/utils/path_utils.py,sha256=C45Q3OeXnj-0FVEtvf_tdG5922XB6HthUzlUCvfc17Y,1626
78
+ ripperdoc/utils/prompt.py,sha256=BV87KXX4aPdv63zsZdtD169ZAqat5wxltgUCcN1vIuk,523
79
+ ripperdoc/utils/safe_get_cwd.py,sha256=hZXQ1oJBCXuk1QBmmfqgDsr1icVOAfGSxABp032GauI,716
80
+ ripperdoc/utils/sandbox_utils.py,sha256=G91P8dw2VFcCiCpjXZ4LvzbAPiO8REqMhw39eI5Z4dU,1123
81
+ ripperdoc/utils/session_history.py,sha256=Z-stx88yaWzJ5iqOLCeS_z8gg1G4w6j4OMoff9r7JvA,7965
82
+ ripperdoc/utils/session_usage.py,sha256=p8_s46zDTzV1qzP4HR4PuZmLeJvSfq9mG_Y5rCnRYyA,3213
83
+ ripperdoc/utils/shell_token_utils.py,sha256=SduoSU-RERJdM_7gBn0urr5UXtl4XOpPgydBd2fwzWg,2500
84
+ ripperdoc/utils/shell_utils.py,sha256=t-neFPy_VhEmWZ79J7hh1ULBEdX116Rb9_pnXvir1Jw,5235
85
+ ripperdoc/utils/todo.py,sha256=ejWd42AAVT15GJvCqb21GERSIbsdY-bwZDNnst4xebQ,6903
86
+ ripperdoc/utils/permissions/__init__.py,sha256=-1aKvRC05kuvLacbeu7w1W5ANamOTAho4Y0lY2vz0W0,522
87
+ ripperdoc/utils/permissions/path_validation_utils.py,sha256=jWcvBWUOgiEOncn_b2Fz7FBJL3XiPlyPQhNT4ZJ7p10,5681
88
+ ripperdoc/utils/permissions/shell_command_validation.py,sha256=BkK-wEwAuJPoC4XIx2Zj6MF3gXcWReozIwigXgib0z0,2446
89
+ ripperdoc/utils/permissions/tool_permission_utils.py,sha256=6Fdu9-dMKhLsUExjEjoS0EUeRpEVN5UkqyseIC05YmM,9207
90
+ ripperdoc-0.2.3.dist-info/licenses/LICENSE,sha256=bRv9UhBor6GhnQDj12RciDcRfu0R7sB-lqCy1sWF75c,9242
91
+ ripperdoc-0.2.3.dist-info/METADATA,sha256=0ko9dUoMiBntF-XdI7oD70VpbU7-GWpDBiZy_oAknq8,5362
92
+ ripperdoc-0.2.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
93
+ ripperdoc-0.2.3.dist-info/entry_points.txt,sha256=79aohFxFPJmrQ3-Mhain04vb3EWpuc0EyzvDDUnwAu4,81
94
+ ripperdoc-0.2.3.dist-info/top_level.txt,sha256=u8LbdTr1a-laHgCO0Utl_R3QGFUhLxWelCDnP2ZgpCU,10
95
+ ripperdoc-0.2.3.dist-info/RECORD,,
@@ -1,86 +0,0 @@
1
- ripperdoc/__init__.py,sha256=VVORpI3UmHW0atP8i4ThIdElrO8xDwVHSHveq6sUOco,66
2
- ripperdoc/__main__.py,sha256=7oIFEXI2irIoZ_dhcMd3hCs4Dj8tmMBbwiVACAoeE-k,506
3
- ripperdoc/cli/__init__.py,sha256=03wf6gXBcEgXJrDJS-W_5BEG_DdJ_ep7CxQFPML-73g,35
4
- ripperdoc/cli/cli.py,sha256=lm3d4JXaHoLxZ20HmkE38GfNChDyJMGR-5pSRPiZzEA,12843
5
- ripperdoc/cli/commands/__init__.py,sha256=J13i7g-69PVLhO5IJH5OvVK0FJLIFj0b84mm33JvpcE,2329
6
- ripperdoc/cli/commands/agents_cmd.py,sha256=nYB_JZI8YIuBflDFXkWZsNBGAMneBFf3IFM2gZLOKfI,10118
7
- ripperdoc/cli/commands/base.py,sha256=4KUjxCM04MwbSMUKVNEBph_jeAKPI8b5MHsUFoz7l5g,386
8
- ripperdoc/cli/commands/clear_cmd.py,sha256=zSYT0Nn_htZzLWTTQ4E5KWHfRg0Q5CYvRO4e--7thBY,345
9
- ripperdoc/cli/commands/compact_cmd.py,sha256=C_qdPTPdg1cOHdmODkaYoRusosgiqRK6c6KID_Gwq0k,330
10
- ripperdoc/cli/commands/config_cmd.py,sha256=ebIQk7zUFv353liWfbBSSfPiOaaCR7rQsd_eTw7nsvY,884
11
- ripperdoc/cli/commands/context_cmd.py,sha256=d0KiJyjbuDNXYlfSzVTFmxmkLXJZe3pUDg_Tt67OWqs,4359
12
- ripperdoc/cli/commands/cost_cmd.py,sha256=AoGRDDu48qsMGuS5zgScg_YdNqkwoj33D2PTh-1uZ34,2637
13
- ripperdoc/cli/commands/doctor_cmd.py,sha256=SW2f9Z6dQzeBTATqdByWRc1UE_w-132KsoKj8d9VPBY,6577
14
- ripperdoc/cli/commands/exit_cmd.py,sha256=B0CNKQos2eRC4LSjizLdKsFYzFfwRkrUur6Afu3Fh9M,334
15
- ripperdoc/cli/commands/help_cmd.py,sha256=iz1vR-rmWsvvfzdebLiIWEWrcMZo5_Eb55_wLr4Ufno,508
16
- ripperdoc/cli/commands/mcp_cmd.py,sha256=S0iQxclxqgbIxbKcC9oFrckLalzk-1eyAYwkfEZQsGU,2307
17
- ripperdoc/cli/commands/memory_cmd.py,sha256=W6-jteI_aajw7RaQzwGPWiGOBwfsZcWXKh2HLKsq9B8,6558
18
- ripperdoc/cli/commands/models_cmd.py,sha256=b6t8UUUTyu4Se_NhYbMDPvkDnWTephFEtOiFjY2oVrk,13080
19
- ripperdoc/cli/commands/resume_cmd.py,sha256=F99haT29dUHYlgrIYKk2cadSOTrwkLOEs_D2RotNZXI,2977
20
- ripperdoc/cli/commands/status_cmd.py,sha256=rAhHksegqdLGy551Hh22oVwR6ZSfkDvAPOjNiNQJ9_s,5494
21
- ripperdoc/cli/commands/tasks_cmd.py,sha256=lgVzN6_KFQGltb7bgn4Wwmkuq91H_mgzCrga67hgjT4,8292
22
- ripperdoc/cli/commands/todos_cmd.py,sha256=7Q0B1NVqGtB3R29ndbn4m0VQQm-YQ7d4Wlk7vJ7dLQI,1848
23
- ripperdoc/cli/commands/tools_cmd.py,sha256=3cMi0vN4mAUhpKqJtRgNvZfcKzRPaMs_pkYYXlyvSSU,384
24
- ripperdoc/cli/ui/__init__.py,sha256=TxSzTYdITlrYmYVfins_w_jzPqqWRpqky5u1ikwvmtM,43
25
- ripperdoc/cli/ui/context_display.py,sha256=3ezdtHVwltkPQ5etYwfqUh-fjnpPu8B3P81UzrdHxZs,10020
26
- ripperdoc/cli/ui/helpers.py,sha256=TJCipP0neh-96ETQfGhusCJ4aWt5gLw1HZbI-3bWDpw,739
27
- ripperdoc/cli/ui/rich_ui.py,sha256=sG1mXHembvDyu_AaokKsoZ23MRnG-GIeVtwBH2RSxpM,49829
28
- ripperdoc/cli/ui/spinner.py,sha256=XsPRwJ-70InLX9Qw50CEgSHn5oKA5PFIue8Un4edhUk,1449
29
- ripperdoc/core/__init__.py,sha256=UemJCA-Y8df1466AX-YbRFj071zKajmqO1mi40YVW2g,40
30
- ripperdoc/core/agents.py,sha256=-v2IkP3QbGtb5AwTT3WoWyWvlUCDieHFnG7vXNMQaZo,10320
31
- ripperdoc/core/commands.py,sha256=NXCkljYbAP4dDoRy-_3semFNWxG4YAk9q82u8FTKH60,835
32
- ripperdoc/core/config.py,sha256=L022fgD-yIUP3M-e3txZI1Qo3O1mOa9TP4a-zcXZU-I,15335
33
- ripperdoc/core/default_tools.py,sha256=t8cLZBOVReF5hvmyhUTziUSnnDMyKDjS7YjuSd_yolw,2568
34
- ripperdoc/core/permissions.py,sha256=qWaVIaps9Ht0M4jgDk9J0gDErptvf6jzEZ2t48lZ_1I,9187
35
- ripperdoc/core/query.py,sha256=25qQj3h8G5ad9PVSmrQaRCZf701F9bJL0NdeHlJ6N-w,23299
36
- ripperdoc/core/query_utils.py,sha256=dnBiYO0zvlsGDt09bb9ozItqLNGUDbI4JCH0pUDM8ns,21404
37
- ripperdoc/core/system_prompt.py,sha256=QH7Wg8QqwzvAzjuBayr57w-BazqIQrHfuGvC2KqVkgI,24190
38
- ripperdoc/core/tool.py,sha256=dIEBU4bvzD0oZMJ4fbvmTc3mMOWTjxfb12nRHRsalzg,6872
39
- ripperdoc/sdk/__init__.py,sha256=aDSgI4lcCDs9cV3bxNmEEV3SuYx2aCd4VnUjs6H-R7E,213
40
- ripperdoc/sdk/client.py,sha256=21f8viIh3BhSjXcI_MvgzfAcy7r289Thyhc_qgnQrB0,10556
41
- ripperdoc/tools/__init__.py,sha256=RBFz0DDnztDXMqv_zRxFHVY-ez2HYcncx8zh_y-BX6w,42
42
- ripperdoc/tools/background_shell.py,sha256=r0F67FoXGnT_QN-fQWQpsZCW-RoZmIaJGIuXX8Eu8nY,9352
43
- ripperdoc/tools/bash_output_tool.py,sha256=ljIOzTOnkbQfe3jExlhpUlMiLT6HpeD-1QI-D1CwHh8,3379
44
- ripperdoc/tools/bash_tool.py,sha256=XFvg66mU19OuH-h8wxOa_nu-ThtcwFCHFuO-rc_QXQ0,36698
45
- ripperdoc/tools/file_edit_tool.py,sha256=YX6ijp8huEtAR9jJiJzLnDmrJ5QUW2beyTTlZsrAhbA,11394
46
- ripperdoc/tools/file_read_tool.py,sha256=IZwRZACRMn8QNElN8T5quhrx1Wk7B1u4lglASR_WKKg,6109
47
- ripperdoc/tools/file_write_tool.py,sha256=BQgjaCp2UTe3sgDukoJQRVAFVfZdK1WG2eHMD3NuupM,4811
48
- ripperdoc/tools/glob_tool.py,sha256=2DtKo8WZgK9_X8WDTXcrfRPm1sCx89SOfnmwvInTsIM,5792
49
- ripperdoc/tools/grep_tool.py,sha256=LfLpPmqD9CIPk6kFYDDmIcykj7uN0xoKtyodc2412FA,8340
50
- ripperdoc/tools/kill_bash_tool.py,sha256=36F8w2Rm1IVQitwOAwS-D8NTnyQdWfKWIam44qlXErk,4625
51
- ripperdoc/tools/ls_tool.py,sha256=-ijEXqNZXeibz5gDkCQV5emQKI0rAwDgYtQNum05iro,15262
52
- ripperdoc/tools/mcp_tools.py,sha256=ejofb2UEwH0r-ZAEvvq9nWvCgRGTAqiOws_X2T0YBU0,31263
53
- ripperdoc/tools/multi_edit_tool.py,sha256=cTQjTovOJOs1fTeavFz14akm0NzNt16dsnoIIuvRI64,15360
54
- ripperdoc/tools/notebook_edit_tool.py,sha256=693wva_Y77Y43Z5OAORPHUs1AL3vzHV_SDYPVzyu37c,12150
55
- ripperdoc/tools/task_tool.py,sha256=bKvJy0hMJcY4MEmWDXqYH0CKfgMKEtaCO9UF9xdngc0,11983
56
- ripperdoc/tools/todo_tool.py,sha256=DgKiJAI3W5WflXqdB4R7bJRdvlg6zqEeZ6CZfH9Ohb8,19984
57
- ripperdoc/tools/tool_search_tool.py,sha256=pj26xBYBThuPioVYNB65wypwPVbGwKURxpd4p918ScI,13693
58
- ripperdoc/utils/__init__.py,sha256=gdso60znB2hsYZ_YZBKVcuOY3QVfoqD2wHQ4pvr5lSw,37
59
- ripperdoc/utils/bash_constants.py,sha256=KNn8bzB6nVU5jid9jvjiH4FAu8pP3DZONJ-OknJypAQ,1641
60
- ripperdoc/utils/bash_output_utils.py,sha256=3Cf5wKJzRbUesmCNy5HtXIBtv0Z2BxklTfFHJ9q1T3w,1210
61
- ripperdoc/utils/exit_code_handlers.py,sha256=QtO1iDxVAb8Xp03D6_QixPoJC-RQlcp3ssIo_rm4two,7973
62
- ripperdoc/utils/git_utils.py,sha256=o5ff99CQ5tqe8lgY0zd0f6I3Rb95LAvhv_yLKZCKrv0,9233
63
- ripperdoc/utils/json_utils.py,sha256=ZA77cDDd0smsIpEtKJk0cfaI6ZD88DyXjDm9bCsEAGc,711
64
- ripperdoc/utils/log.py,sha256=AT7EMl8Xh02aY3qRF2k1UpBhfAWbpXeNtuogcldBRPo,6099
65
- ripperdoc/utils/mcp.py,sha256=aIGmJLErQ1xRSzTj9Hm3ns2gW8oTvfrFBIukyNXaURk,17037
66
- ripperdoc/utils/memory.py,sha256=nBulG1KFTnmYBikcYruNV0qhNDi2gpI46dvB9URdi9I,7894
67
- ripperdoc/utils/message_compaction.py,sha256=pZY9wLlY46ZQq9zx5rOTzKa6sdoxokxr4w2IQsNI6wg,24857
68
- ripperdoc/utils/messages.py,sha256=yEvaO8O4FW2dy12qKWfY3u_jimkoS-nSUnfY5nC9gzw,17389
69
- ripperdoc/utils/output_utils.py,sha256=gAOfw_vZYjhv8qXb5U-r-rRTcidqDQShYWUgwiwCkGM,7470
70
- ripperdoc/utils/path_utils.py,sha256=C45Q3OeXnj-0FVEtvf_tdG5922XB6HthUzlUCvfc17Y,1626
71
- ripperdoc/utils/safe_get_cwd.py,sha256=hZXQ1oJBCXuk1QBmmfqgDsr1icVOAfGSxABp032GauI,716
72
- ripperdoc/utils/sandbox_utils.py,sha256=G91P8dw2VFcCiCpjXZ4LvzbAPiO8REqMhw39eI5Z4dU,1123
73
- ripperdoc/utils/session_history.py,sha256=Z-stx88yaWzJ5iqOLCeS_z8gg1G4w6j4OMoff9r7JvA,7965
74
- ripperdoc/utils/session_usage.py,sha256=iz4B9MRhPbwemo9-beeZ8axcpGEe0kEc-Jghlexd_xU,2961
75
- ripperdoc/utils/shell_token_utils.py,sha256=SduoSU-RERJdM_7gBn0urr5UXtl4XOpPgydBd2fwzWg,2500
76
- ripperdoc/utils/todo.py,sha256=ejWd42AAVT15GJvCqb21GERSIbsdY-bwZDNnst4xebQ,6903
77
- ripperdoc/utils/permissions/__init__.py,sha256=-1aKvRC05kuvLacbeu7w1W5ANamOTAho4Y0lY2vz0W0,522
78
- ripperdoc/utils/permissions/path_validation_utils.py,sha256=jWcvBWUOgiEOncn_b2Fz7FBJL3XiPlyPQhNT4ZJ7p10,5681
79
- ripperdoc/utils/permissions/shell_command_validation.py,sha256=BkK-wEwAuJPoC4XIx2Zj6MF3gXcWReozIwigXgib0z0,2446
80
- ripperdoc/utils/permissions/tool_permission_utils.py,sha256=6Fdu9-dMKhLsUExjEjoS0EUeRpEVN5UkqyseIC05YmM,9207
81
- ripperdoc-0.2.2.dist-info/licenses/LICENSE,sha256=bRv9UhBor6GhnQDj12RciDcRfu0R7sB-lqCy1sWF75c,9242
82
- ripperdoc-0.2.2.dist-info/METADATA,sha256=K73CYp36dc4bblx3lxqPaJkZK8BxxlATA1v0ARqACq8,5362
83
- ripperdoc-0.2.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
84
- ripperdoc-0.2.2.dist-info/entry_points.txt,sha256=79aohFxFPJmrQ3-Mhain04vb3EWpuc0EyzvDDUnwAu4,81
85
- ripperdoc-0.2.2.dist-info/top_level.txt,sha256=u8LbdTr1a-laHgCO0Utl_R3QGFUhLxWelCDnP2ZgpCU,10
86
- ripperdoc-0.2.2.dist-info/RECORD,,