ripperdoc 0.2.2__py3-none-any.whl → 0.2.4__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.
- ripperdoc/__init__.py +1 -1
- ripperdoc/cli/cli.py +9 -2
- ripperdoc/cli/commands/agents_cmd.py +8 -4
- ripperdoc/cli/commands/context_cmd.py +3 -3
- ripperdoc/cli/commands/cost_cmd.py +5 -0
- ripperdoc/cli/commands/doctor_cmd.py +12 -4
- ripperdoc/cli/commands/memory_cmd.py +6 -13
- ripperdoc/cli/commands/models_cmd.py +36 -6
- ripperdoc/cli/commands/resume_cmd.py +4 -2
- ripperdoc/cli/commands/status_cmd.py +1 -1
- ripperdoc/cli/ui/rich_ui.py +135 -2
- ripperdoc/cli/ui/thinking_spinner.py +128 -0
- ripperdoc/core/agents.py +174 -6
- ripperdoc/core/config.py +9 -1
- ripperdoc/core/default_tools.py +6 -0
- ripperdoc/core/providers/__init__.py +47 -0
- ripperdoc/core/providers/anthropic.py +147 -0
- ripperdoc/core/providers/base.py +236 -0
- ripperdoc/core/providers/gemini.py +496 -0
- ripperdoc/core/providers/openai.py +253 -0
- ripperdoc/core/query.py +337 -141
- ripperdoc/core/query_utils.py +65 -24
- ripperdoc/core/system_prompt.py +67 -61
- ripperdoc/core/tool.py +12 -3
- ripperdoc/sdk/client.py +12 -1
- ripperdoc/tools/ask_user_question_tool.py +433 -0
- ripperdoc/tools/background_shell.py +104 -18
- ripperdoc/tools/bash_tool.py +33 -13
- ripperdoc/tools/enter_plan_mode_tool.py +223 -0
- ripperdoc/tools/exit_plan_mode_tool.py +150 -0
- ripperdoc/tools/file_edit_tool.py +13 -0
- ripperdoc/tools/file_read_tool.py +16 -0
- ripperdoc/tools/file_write_tool.py +13 -0
- ripperdoc/tools/glob_tool.py +5 -1
- ripperdoc/tools/ls_tool.py +14 -10
- ripperdoc/tools/mcp_tools.py +113 -4
- ripperdoc/tools/multi_edit_tool.py +12 -0
- ripperdoc/tools/notebook_edit_tool.py +12 -0
- ripperdoc/tools/task_tool.py +88 -5
- ripperdoc/tools/todo_tool.py +1 -3
- ripperdoc/tools/tool_search_tool.py +8 -4
- ripperdoc/utils/file_watch.py +134 -0
- ripperdoc/utils/git_utils.py +36 -38
- ripperdoc/utils/json_utils.py +1 -2
- ripperdoc/utils/log.py +3 -4
- ripperdoc/utils/mcp.py +49 -10
- ripperdoc/utils/memory.py +1 -3
- ripperdoc/utils/message_compaction.py +5 -11
- ripperdoc/utils/messages.py +9 -13
- ripperdoc/utils/output_utils.py +1 -3
- ripperdoc/utils/prompt.py +17 -0
- ripperdoc/utils/session_usage.py +7 -0
- ripperdoc/utils/shell_utils.py +159 -0
- ripperdoc/utils/token_estimation.py +33 -0
- {ripperdoc-0.2.2.dist-info → ripperdoc-0.2.4.dist-info}/METADATA +3 -1
- ripperdoc-0.2.4.dist-info/RECORD +99 -0
- ripperdoc-0.2.2.dist-info/RECORD +0 -86
- {ripperdoc-0.2.2.dist-info → ripperdoc-0.2.4.dist-info}/WHEEL +0 -0
- {ripperdoc-0.2.2.dist-info → ripperdoc-0.2.4.dist-info}/entry_points.txt +0 -0
- {ripperdoc-0.2.2.dist-info → ripperdoc-0.2.4.dist-info}/licenses/LICENSE +0 -0
- {ripperdoc-0.2.2.dist-info → ripperdoc-0.2.4.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"]
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"""Shared token estimation utilities."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import math
|
|
6
|
+
|
|
7
|
+
from ripperdoc.utils.log import get_logger
|
|
8
|
+
|
|
9
|
+
logger = get_logger()
|
|
10
|
+
|
|
11
|
+
# Optional: use tiktoken for accurate counts when available.
|
|
12
|
+
try: # pragma: no cover - optional dependency
|
|
13
|
+
import tiktoken # type: ignore
|
|
14
|
+
|
|
15
|
+
_TIKTOKEN_ENCODING = tiktoken.get_encoding("cl100k_base")
|
|
16
|
+
except Exception: # pragma: no cover - runtime fallback
|
|
17
|
+
_TIKTOKEN_ENCODING = None
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def estimate_tokens(text: str) -> int:
|
|
21
|
+
"""Estimate token count, preferring tiktoken when available."""
|
|
22
|
+
if not text:
|
|
23
|
+
return 0
|
|
24
|
+
if _TIKTOKEN_ENCODING:
|
|
25
|
+
try:
|
|
26
|
+
return len(_TIKTOKEN_ENCODING.encode(text))
|
|
27
|
+
except Exception:
|
|
28
|
+
logger.debug("[token_estimation] tiktoken encode failed; falling back to heuristic")
|
|
29
|
+
# Heuristic: ~4 characters per token
|
|
30
|
+
return max(1, math.ceil(len(text) / 4))
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
__all__ = ["estimate_tokens"]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ripperdoc
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.4
|
|
4
4
|
Summary: AI-powered terminal assistant for coding tasks
|
|
5
5
|
Author: Ripperdoc Team
|
|
6
6
|
License: Apache-2.0
|
|
@@ -25,6 +25,8 @@ Requires-Dist: prompt-toolkit>=3.0.0
|
|
|
25
25
|
Requires-Dist: PyYAML>=6.0.0
|
|
26
26
|
Requires-Dist: mcp[cli]>=1.22.0
|
|
27
27
|
Requires-Dist: json_repair>=0.54.2
|
|
28
|
+
Requires-Dist: tiktoken>=0.7.0
|
|
29
|
+
Requires-Dist: google-genai>=0.3.0
|
|
28
30
|
Provides-Extra: dev
|
|
29
31
|
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
30
32
|
Requires-Dist: pytest-asyncio>=0.21.0; extra == "dev"
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
ripperdoc/__init__.py,sha256=cIeXlodbjB7z1VygS4LMKBWB7lVrewhglDA7hgBcEGY,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=ri3DbieAG-SqzvgLg8eOKg0t6_IQS4Itp1fOLn4pNAs,4369
|
|
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=fGh33f1G-g1oLVxbKz7p8scDX_F3uTl7chFvF2niG2w,53292
|
|
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=Qj9Kr6dx86rStqKGBVrGR8TC3MYhlxc8y2-3JtzeAxs,19629
|
|
32
|
+
ripperdoc/core/commands.py,sha256=NXCkljYbAP4dDoRy-_3semFNWxG4YAk9q82u8FTKH60,835
|
|
33
|
+
ripperdoc/core/config.py,sha256=DRPi8uzfBmRKefcqlRKLDf4zYYsj0sxF42ROUZ10GN8,15709
|
|
34
|
+
ripperdoc/core/default_tools.py,sha256=x5qVT7UL5ISxcmzWO_tp8lFAeB9BlrmKNZKp1D3dVO4,2859
|
|
35
|
+
ripperdoc/core/permissions.py,sha256=qWaVIaps9Ht0M4jgDk9J0gDErptvf6jzEZ2t48lZ_1I,9187
|
|
36
|
+
ripperdoc/core/query.py,sha256=mY8DNeDYBUKSLLkDJEu8CiAaHQ7W5G26B-gRvBT9gjE,29513
|
|
37
|
+
ripperdoc/core/query_utils.py,sha256=UEbK2LVQx0ChljtG11yd5Yi8F80JbAxucFgLD-E9-qM,22974
|
|
38
|
+
ripperdoc/core/system_prompt.py,sha256=jbt-yoriW-E15QuiewjM1t0WTMW_MZdbM-ZJ6-5wxV4,26575
|
|
39
|
+
ripperdoc/core/tool.py,sha256=jT1y3cKyQ-KEoNnJ2HfWFDvMn0W8nj8kJ0WIFyNSKKA,7442
|
|
40
|
+
ripperdoc/core/providers/__init__.py,sha256=yevsHF0AUI4b6Wiq_401NXewJ3dqe8LUUtQm0TLPPNQ,1911
|
|
41
|
+
ripperdoc/core/providers/anthropic.py,sha256=m8sRWXrcdqzg6yh2rIZETWXtQQK8dsIfjhDvAORUPzE,5635
|
|
42
|
+
ripperdoc/core/providers/base.py,sha256=f4n7XJEw_B9j0Mlsus4jaBbM74xtYlAbQ1UaVMfQtz4,8218
|
|
43
|
+
ripperdoc/core/providers/gemini.py,sha256=HeAnM5m_DreOVZplc6bfugunDYiN3rAmPzWQG77zvIw,19548
|
|
44
|
+
ripperdoc/core/providers/openai.py,sha256=gAXUs-6l9-750gpdEa5Fp3P6ABrn-NC7hkN5iW4joAI,10760
|
|
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/ask_user_question_tool.py,sha256=gRMhUzZr3-LABNrBG-o2Necou0i7rZ3eoWJ-RZ035Mg,15373
|
|
49
|
+
ripperdoc/tools/background_shell.py,sha256=8MFYEcjDN3LwT0w_th_7eRjZQokc887DxOmJripgO-M,12419
|
|
50
|
+
ripperdoc/tools/bash_output_tool.py,sha256=ljIOzTOnkbQfe3jExlhpUlMiLT6HpeD-1QI-D1CwHh8,3379
|
|
51
|
+
ripperdoc/tools/bash_tool.py,sha256=s4FrJTqC_bIN7gqBtbBUr9gt11LsVmWWkplp1ljlzmw,37461
|
|
52
|
+
ripperdoc/tools/enter_plan_mode_tool.py,sha256=jv7DLSa0GrnXepSblqvVhyTvftVi5qB1nZzjszB7jqc,7950
|
|
53
|
+
ripperdoc/tools/exit_plan_mode_tool.py,sha256=2P270UlOFgKemQxapXRApUoprp-3gMsG__3Tvni7QrA,5702
|
|
54
|
+
ripperdoc/tools/file_edit_tool.py,sha256=3fLBcXpwX_SumZRiP-1TJ1qIfWA-AQF88Ji_MCI1Ldo,11871
|
|
55
|
+
ripperdoc/tools/file_read_tool.py,sha256=kKdhj6BXIyKCSxbB063BDAKNjAd36xtTUH-fixWhwHE,6721
|
|
56
|
+
ripperdoc/tools/file_write_tool.py,sha256=fxh4qUGNqby7iFWuADImF4AyOAskMTzqC7CZLHCqcpo,5296
|
|
57
|
+
ripperdoc/tools/glob_tool.py,sha256=e7yS1RvE3VJw5aOwoEPk8fLUSUr6mUmFsi8u8_3TV9Y,5856
|
|
58
|
+
ripperdoc/tools/grep_tool.py,sha256=LfLpPmqD9CIPk6kFYDDmIcykj7uN0xoKtyodc2412FA,8340
|
|
59
|
+
ripperdoc/tools/kill_bash_tool.py,sha256=36F8w2Rm1IVQitwOAwS-D8NTnyQdWfKWIam44qlXErk,4625
|
|
60
|
+
ripperdoc/tools/ls_tool.py,sha256=RlaTciHmjgNFopzUEOJjBp1NqNYhr8F1VIekRgqDwSg,15249
|
|
61
|
+
ripperdoc/tools/mcp_tools.py,sha256=aXcCvYdYtslTYbBytfdUDyTvyBrjrzfR_tALGtLUutg,35565
|
|
62
|
+
ripperdoc/tools/multi_edit_tool.py,sha256=63xircd2ovrk9n1YJ8tfkLDFLvSRFtWAJh3aURmELcE,15829
|
|
63
|
+
ripperdoc/tools/notebook_edit_tool.py,sha256=zGFLRoIUCYEQUUcAiV4izJ09YFKUjaY2zGUJAjucq8c,12656
|
|
64
|
+
ripperdoc/tools/task_tool.py,sha256=98U5LjavkTneYgxzqRlYe2rXd9cOPnK_dkS3rL9IpL8,18288
|
|
65
|
+
ripperdoc/tools/todo_tool.py,sha256=QqgWW7LjylD8nmeeO_rkgjnzs8o1O-UVDD-rXObcVuE,19954
|
|
66
|
+
ripperdoc/tools/tool_search_tool.py,sha256=YmSGCviaHiMmYghmPO0Km6ZOI5kkQrjz7qb3G_EFjiI,13763
|
|
67
|
+
ripperdoc/utils/__init__.py,sha256=gdso60znB2hsYZ_YZBKVcuOY3QVfoqD2wHQ4pvr5lSw,37
|
|
68
|
+
ripperdoc/utils/bash_constants.py,sha256=KNn8bzB6nVU5jid9jvjiH4FAu8pP3DZONJ-OknJypAQ,1641
|
|
69
|
+
ripperdoc/utils/bash_output_utils.py,sha256=3Cf5wKJzRbUesmCNy5HtXIBtv0Z2BxklTfFHJ9q1T3w,1210
|
|
70
|
+
ripperdoc/utils/exit_code_handlers.py,sha256=QtO1iDxVAb8Xp03D6_QixPoJC-RQlcp3ssIo_rm4two,7973
|
|
71
|
+
ripperdoc/utils/file_watch.py,sha256=idleNFevHctDSJd23d4Y25XdJooFRpgepOcOEmp9pDg,3970
|
|
72
|
+
ripperdoc/utils/git_utils.py,sha256=Hq-Zx-KPyX4lp_i8ozhic15LyYdX_IfCRm-EyoFu59A,9047
|
|
73
|
+
ripperdoc/utils/json_utils.py,sha256=Ayv4h0aafTbzhpoN4FMPaBxLx9MfoK2PuOVd1_52-k0,706
|
|
74
|
+
ripperdoc/utils/log.py,sha256=98JbVkZQd2OsFo789pgf9q96D6A5IcyT5ubzrPAEoWs,6176
|
|
75
|
+
ripperdoc/utils/mcp.py,sha256=DXEG7uNRIl7R-KHZwFMH7VzwGARthrMEJk4viKKVEg4,18284
|
|
76
|
+
ripperdoc/utils/memory.py,sha256=gRhVTRaCo0YOQeXm1i-sndnTku7qhTB-PSYdFD0OzxU,7872
|
|
77
|
+
ripperdoc/utils/message_compaction.py,sha256=aTUogewd337-AW6hG8EL-UGoC11o_PzcDHQ-QzmuSdw,24802
|
|
78
|
+
ripperdoc/utils/messages.py,sha256=8iRolxS6VoJtcaFU41tzKSdsfBSJMXMGUnUTLXKkfnw,17334
|
|
79
|
+
ripperdoc/utils/output_utils.py,sha256=R3wqFh9Dko_GK00Exx7XI0DnnldRWMsxZypYX5y6SJo,7448
|
|
80
|
+
ripperdoc/utils/path_utils.py,sha256=C45Q3OeXnj-0FVEtvf_tdG5922XB6HthUzlUCvfc17Y,1626
|
|
81
|
+
ripperdoc/utils/prompt.py,sha256=BV87KXX4aPdv63zsZdtD169ZAqat5wxltgUCcN1vIuk,523
|
|
82
|
+
ripperdoc/utils/safe_get_cwd.py,sha256=hZXQ1oJBCXuk1QBmmfqgDsr1icVOAfGSxABp032GauI,716
|
|
83
|
+
ripperdoc/utils/sandbox_utils.py,sha256=G91P8dw2VFcCiCpjXZ4LvzbAPiO8REqMhw39eI5Z4dU,1123
|
|
84
|
+
ripperdoc/utils/session_history.py,sha256=Z-stx88yaWzJ5iqOLCeS_z8gg1G4w6j4OMoff9r7JvA,7965
|
|
85
|
+
ripperdoc/utils/session_usage.py,sha256=p8_s46zDTzV1qzP4HR4PuZmLeJvSfq9mG_Y5rCnRYyA,3213
|
|
86
|
+
ripperdoc/utils/shell_token_utils.py,sha256=SduoSU-RERJdM_7gBn0urr5UXtl4XOpPgydBd2fwzWg,2500
|
|
87
|
+
ripperdoc/utils/shell_utils.py,sha256=t-neFPy_VhEmWZ79J7hh1ULBEdX116Rb9_pnXvir1Jw,5235
|
|
88
|
+
ripperdoc/utils/todo.py,sha256=ejWd42AAVT15GJvCqb21GERSIbsdY-bwZDNnst4xebQ,6903
|
|
89
|
+
ripperdoc/utils/token_estimation.py,sha256=I_uQOME1P5cs2biSHA0l9KFEcUdXNpfOA4TZsGGR6Os,931
|
|
90
|
+
ripperdoc/utils/permissions/__init__.py,sha256=-1aKvRC05kuvLacbeu7w1W5ANamOTAho4Y0lY2vz0W0,522
|
|
91
|
+
ripperdoc/utils/permissions/path_validation_utils.py,sha256=jWcvBWUOgiEOncn_b2Fz7FBJL3XiPlyPQhNT4ZJ7p10,5681
|
|
92
|
+
ripperdoc/utils/permissions/shell_command_validation.py,sha256=BkK-wEwAuJPoC4XIx2Zj6MF3gXcWReozIwigXgib0z0,2446
|
|
93
|
+
ripperdoc/utils/permissions/tool_permission_utils.py,sha256=6Fdu9-dMKhLsUExjEjoS0EUeRpEVN5UkqyseIC05YmM,9207
|
|
94
|
+
ripperdoc-0.2.4.dist-info/licenses/LICENSE,sha256=bRv9UhBor6GhnQDj12RciDcRfu0R7sB-lqCy1sWF75c,9242
|
|
95
|
+
ripperdoc-0.2.4.dist-info/METADATA,sha256=r4bibfz7mwDvRftnoPP0UCNaITNjnIZxHP5Xbbs-ulE,5428
|
|
96
|
+
ripperdoc-0.2.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
97
|
+
ripperdoc-0.2.4.dist-info/entry_points.txt,sha256=79aohFxFPJmrQ3-Mhain04vb3EWpuc0EyzvDDUnwAu4,81
|
|
98
|
+
ripperdoc-0.2.4.dist-info/top_level.txt,sha256=u8LbdTr1a-laHgCO0Utl_R3QGFUhLxWelCDnP2ZgpCU,10
|
|
99
|
+
ripperdoc-0.2.4.dist-info/RECORD,,
|
ripperdoc-0.2.2.dist-info/RECORD
DELETED
|
@@ -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,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|