ripperdoc 0.2.7__py3-none-any.whl → 0.2.9__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 (87) hide show
  1. ripperdoc/__init__.py +1 -1
  2. ripperdoc/cli/cli.py +33 -115
  3. ripperdoc/cli/commands/__init__.py +70 -6
  4. ripperdoc/cli/commands/agents_cmd.py +6 -3
  5. ripperdoc/cli/commands/clear_cmd.py +1 -4
  6. ripperdoc/cli/commands/config_cmd.py +1 -1
  7. ripperdoc/cli/commands/context_cmd.py +3 -2
  8. ripperdoc/cli/commands/doctor_cmd.py +18 -4
  9. ripperdoc/cli/commands/help_cmd.py +11 -1
  10. ripperdoc/cli/commands/hooks_cmd.py +610 -0
  11. ripperdoc/cli/commands/models_cmd.py +26 -9
  12. ripperdoc/cli/commands/permissions_cmd.py +57 -37
  13. ripperdoc/cli/commands/resume_cmd.py +6 -4
  14. ripperdoc/cli/commands/status_cmd.py +4 -4
  15. ripperdoc/cli/commands/tasks_cmd.py +8 -4
  16. ripperdoc/cli/ui/file_mention_completer.py +64 -8
  17. ripperdoc/cli/ui/interrupt_handler.py +3 -4
  18. ripperdoc/cli/ui/message_display.py +5 -3
  19. ripperdoc/cli/ui/panels.py +13 -10
  20. ripperdoc/cli/ui/provider_options.py +247 -0
  21. ripperdoc/cli/ui/rich_ui.py +196 -77
  22. ripperdoc/cli/ui/spinner.py +25 -1
  23. ripperdoc/cli/ui/tool_renderers.py +8 -2
  24. ripperdoc/cli/ui/wizard.py +215 -0
  25. ripperdoc/core/agents.py +9 -3
  26. ripperdoc/core/config.py +49 -12
  27. ripperdoc/core/custom_commands.py +412 -0
  28. ripperdoc/core/default_tools.py +11 -2
  29. ripperdoc/core/hooks/__init__.py +99 -0
  30. ripperdoc/core/hooks/config.py +301 -0
  31. ripperdoc/core/hooks/events.py +535 -0
  32. ripperdoc/core/hooks/executor.py +496 -0
  33. ripperdoc/core/hooks/integration.py +344 -0
  34. ripperdoc/core/hooks/manager.py +745 -0
  35. ripperdoc/core/permissions.py +40 -8
  36. ripperdoc/core/providers/anthropic.py +548 -68
  37. ripperdoc/core/providers/gemini.py +70 -5
  38. ripperdoc/core/providers/openai.py +60 -5
  39. ripperdoc/core/query.py +140 -39
  40. ripperdoc/core/query_utils.py +2 -0
  41. ripperdoc/core/skills.py +9 -3
  42. ripperdoc/core/system_prompt.py +4 -2
  43. ripperdoc/core/tool.py +9 -5
  44. ripperdoc/sdk/client.py +2 -2
  45. ripperdoc/tools/ask_user_question_tool.py +5 -3
  46. ripperdoc/tools/background_shell.py +2 -1
  47. ripperdoc/tools/bash_output_tool.py +1 -1
  48. ripperdoc/tools/bash_tool.py +30 -20
  49. ripperdoc/tools/dynamic_mcp_tool.py +29 -8
  50. ripperdoc/tools/enter_plan_mode_tool.py +1 -1
  51. ripperdoc/tools/exit_plan_mode_tool.py +1 -1
  52. ripperdoc/tools/file_edit_tool.py +8 -4
  53. ripperdoc/tools/file_read_tool.py +9 -5
  54. ripperdoc/tools/file_write_tool.py +9 -5
  55. ripperdoc/tools/glob_tool.py +3 -2
  56. ripperdoc/tools/grep_tool.py +3 -2
  57. ripperdoc/tools/kill_bash_tool.py +1 -1
  58. ripperdoc/tools/ls_tool.py +1 -1
  59. ripperdoc/tools/mcp_tools.py +13 -10
  60. ripperdoc/tools/multi_edit_tool.py +8 -7
  61. ripperdoc/tools/notebook_edit_tool.py +7 -4
  62. ripperdoc/tools/skill_tool.py +1 -1
  63. ripperdoc/tools/task_tool.py +5 -4
  64. ripperdoc/tools/todo_tool.py +2 -2
  65. ripperdoc/tools/tool_search_tool.py +3 -2
  66. ripperdoc/utils/conversation_compaction.py +11 -7
  67. ripperdoc/utils/file_watch.py +8 -2
  68. ripperdoc/utils/json_utils.py +2 -1
  69. ripperdoc/utils/mcp.py +11 -3
  70. ripperdoc/utils/memory.py +4 -2
  71. ripperdoc/utils/message_compaction.py +21 -7
  72. ripperdoc/utils/message_formatting.py +11 -7
  73. ripperdoc/utils/messages.py +105 -66
  74. ripperdoc/utils/path_ignore.py +38 -12
  75. ripperdoc/utils/permissions/path_validation_utils.py +2 -1
  76. ripperdoc/utils/permissions/shell_command_validation.py +427 -91
  77. ripperdoc/utils/safe_get_cwd.py +2 -1
  78. ripperdoc/utils/session_history.py +13 -6
  79. ripperdoc/utils/todo.py +2 -1
  80. ripperdoc/utils/token_estimation.py +6 -1
  81. {ripperdoc-0.2.7.dist-info → ripperdoc-0.2.9.dist-info}/METADATA +24 -3
  82. ripperdoc-0.2.9.dist-info/RECORD +123 -0
  83. ripperdoc-0.2.7.dist-info/RECORD +0 -113
  84. {ripperdoc-0.2.7.dist-info → ripperdoc-0.2.9.dist-info}/WHEEL +0 -0
  85. {ripperdoc-0.2.7.dist-info → ripperdoc-0.2.9.dist-info}/entry_points.txt +0 -0
  86. {ripperdoc-0.2.7.dist-info → ripperdoc-0.2.9.dist-info}/licenses/LICENSE +0 -0
  87. {ripperdoc-0.2.7.dist-info → ripperdoc-0.2.9.dist-info}/top_level.txt +0 -0
@@ -23,7 +23,8 @@ def safe_get_cwd() -> str:
23
23
  except (OSError, RuntimeError, ValueError) as exc:
24
24
  logger.warning(
25
25
  "[safe_get_cwd] Failed to resolve cwd: %s: %s",
26
- type(exc).__name__, exc,
26
+ type(exc).__name__,
27
+ exc,
27
28
  )
28
29
  return get_original_cwd()
29
30
 
@@ -104,13 +104,15 @@ class SessionHistory:
104
104
  except (json.JSONDecodeError, KeyError, TypeError, ValueError) as exc:
105
105
  logger.debug(
106
106
  "[session_history] Failed to parse session history line: %s: %s",
107
- type(exc).__name__, exc,
107
+ type(exc).__name__,
108
+ exc,
108
109
  )
109
110
  continue
110
111
  except (OSError, IOError) as exc:
111
112
  logger.warning(
112
113
  "Failed to load seen IDs from session: %s: %s",
113
- type(exc).__name__, exc,
114
+ type(exc).__name__,
115
+ exc,
114
116
  extra={"session_id": self.session_id, "path": str(self.path)},
115
117
  )
116
118
  return
@@ -142,7 +144,8 @@ class SessionHistory:
142
144
  # Avoid crashing the UI if logging fails
143
145
  logger.warning(
144
146
  "Failed to append message to session log: %s: %s",
145
- type(exc).__name__, exc,
147
+ type(exc).__name__,
148
+ exc,
146
149
  extra={"session_id": self.session_id, "path": str(self.path)},
147
150
  )
148
151
  return
@@ -163,7 +166,8 @@ def list_session_summaries(project_path: Path) -> List[SessionSummary]:
163
166
  except (OSError, IOError, json.JSONDecodeError) as exc:
164
167
  logger.warning(
165
168
  "Failed to load session summary: %s: %s",
166
- type(exc).__name__, exc,
169
+ type(exc).__name__,
170
+ exc,
167
171
  extra={"path": str(jsonl_path)},
168
172
  )
169
173
  continue
@@ -250,13 +254,16 @@ def load_session_messages(project_path: Path, session_id: str) -> List[Conversat
250
254
  except (json.JSONDecodeError, KeyError, TypeError, ValueError) as exc:
251
255
  logger.debug(
252
256
  "[session_history] Failed to deserialize message in session %s: %s: %s",
253
- session_id, type(exc).__name__, exc,
257
+ session_id,
258
+ type(exc).__name__,
259
+ exc,
254
260
  )
255
261
  continue
256
262
  except (OSError, IOError) as exc:
257
263
  logger.warning(
258
264
  "Failed to load session messages: %s: %s",
259
- type(exc).__name__, exc,
265
+ type(exc).__name__,
266
+ exc,
260
267
  extra={"session_id": session_id, "path": str(path)},
261
268
  )
262
269
  return []
ripperdoc/utils/todo.py CHANGED
@@ -86,7 +86,8 @@ def load_todos(project_root: Optional[Path] = None) -> List[TodoItem]:
86
86
  except (json.JSONDecodeError, OSError, IOError, UnicodeDecodeError) as exc:
87
87
  logger.warning(
88
88
  "Failed to load todos from disk: %s: %s",
89
- type(exc).__name__, exc,
89
+ type(exc).__name__,
90
+ exc,
90
91
  extra={"path": str(path)},
91
92
  )
92
93
  return []
@@ -14,7 +14,12 @@ try: # pragma: no cover - optional dependency
14
14
  import tiktoken # type: ignore
15
15
 
16
16
  _TIKTOKEN_ENCODING = tiktoken.get_encoding("cl100k_base")
17
- except (ImportError, ModuleNotFoundError, OSError, RuntimeError): # pragma: no cover - runtime fallback
17
+ except (
18
+ ImportError,
19
+ ModuleNotFoundError,
20
+ OSError,
21
+ RuntimeError,
22
+ ): # pragma: no cover - runtime fallback
18
23
  pass
19
24
 
20
25
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ripperdoc
3
- Version: 0.2.7
3
+ Version: 0.2.9
4
4
  Summary: AI-powered terminal assistant for coding tasks
5
5
  Author: Ripperdoc Team
6
6
  License: Apache-2.0
@@ -35,9 +35,28 @@ Requires-Dist: black>=23.0.0; extra == "dev"
35
35
  Requires-Dist: ruff>=0.1.0; extra == "dev"
36
36
  Dynamic: license-file
37
37
 
38
- # Ripperdoc - AI-Powered Terminal Assistant
38
+ <div align="center">
39
39
 
40
- Ripperdoc is an AI-powered terminal assistant for coding tasks, providing an interactive interface for AI-assisted development, file management, and command execution.
40
+ # Ripperdoc
41
+
42
+ _an open-source, extensible AI coding agent that runs in your terminal_
43
+
44
+ <p align="center">
45
+ <a href="https://opensource.org/licenses/Apache-2.0">
46
+ <img src="https://img.shields.io/badge/License-Apache_2.0-blue.svg">
47
+ </a>
48
+ <a href="https://www.python.org/downloads/">
49
+ <img src="https://img.shields.io/badge/python-3.10+-blue.svg">
50
+ </a>
51
+ <a href="https://github.com/quantmew/ripperdoc/stargazers">
52
+ <img src="https://img.shields.io/github/stars/quantmew/ripperdoc.svg" alt="GitHub stars">
53
+ </a>
54
+ </p>
55
+ </div>
56
+
57
+ Ripperdoc is your on-machine AI coding assistant, similar to [Claude Code](https://claude.com/claude-code), [Codex](https://github.com/openai/codex), [Gemini CLI](https://github.com/google-gemini/gemini-cli), [Aider](https://github.com/paul-gauthier/aider), and [Goose](https://github.com/block/goose). It can write code, refactor projects, execute shell commands, and manage files - all through natural language conversations in your terminal.
58
+
59
+ Designed for maximum flexibility, Ripperdoc works with **any LLM** (Anthropic Claude, OpenAI, DeepSeek, local models via OpenAI-compatible APIs), supports **custom hooks** to intercept and control tool execution, and offers both an interactive CLI and a **Python SDK** for headless automation.
41
60
 
42
61
  [中文文档](README_CN.md) | [Contributing](CONTRIBUTING.md) | [Documentation](docs/)
43
62
 
@@ -60,6 +79,8 @@ Ripperdoc is an AI-powered terminal assistant for coding tasks, providing an int
60
79
  - **MCP Server Support** - Integration with Model Context Protocol servers
61
80
  - **Session Management** - Persistent session history and usage tracking
62
81
  - **Jupyter Notebook Support** - Edit .ipynb files directly
82
+ - **Hooks System** - Execute custom scripts at lifecycle events with decision control
83
+ - **Custom Commands** - Define reusable slash commands with parameter substitution
63
84
 
64
85
  ## Installation
65
86
 
@@ -0,0 +1,123 @@
1
+ ripperdoc/__init__.py,sha256=byWZLSwiJLpDsuaMe8M0HKTrEKcgffzCd6PGUkDvk7c,66
2
+ ripperdoc/__main__.py,sha256=1Avq2MceBfwUlNsfasC8n4dqVL_V56Bl3DRsnY4_Nxk,370
3
+ ripperdoc/cli/__init__.py,sha256=03wf6gXBcEgXJrDJS-W_5BEG_DdJ_ep7CxQFPML-73g,35
4
+ ripperdoc/cli/cli.py,sha256=s-jR23j7stf-BleLvGJRBYAWqPESdf4fcGj_g4HVKus,11381
5
+ ripperdoc/cli/commands/__init__.py,sha256=pINc_mUWj1D3bXrR6lzhWAAJFAyUTlDWba8OJpZIiXs,4651
6
+ ripperdoc/cli/commands/agents_cmd.py,sha256=3kVebe7F3Uo0GWVGELt8xnv9CRdjDiXSPANGAospHXQ,10486
7
+ ripperdoc/cli/commands/base.py,sha256=4KUjxCM04MwbSMUKVNEBph_jeAKPI8b5MHsUFoz7l5g,386
8
+ ripperdoc/cli/commands/clear_cmd.py,sha256=Ahfbse0-OPG99fcSaQK9NLNxPDHtvGirB1vFWhFTDUY,354
9
+ ripperdoc/cli/commands/compact_cmd.py,sha256=uR_nB1OX7cUL1TOJoefwdO31Qfyjd0nZSSttErqUxbA,473
10
+ ripperdoc/cli/commands/config_cmd.py,sha256=QcFYOOmNFSHmw6K2vY_wfKrYXi8PSzz6koJFREJoF_c,884
11
+ ripperdoc/cli/commands/context_cmd.py,sha256=tM8o2ZfX-axFYaFLsWOTSER_Yevk3ANr2numHfuh2UE,5232
12
+ ripperdoc/cli/commands/cost_cmd.py,sha256=yD9LSqgxVvYNTDPnEHxugjyLWcmbtH5dXim7DIW9zXc,2822
13
+ ripperdoc/cli/commands/doctor_cmd.py,sha256=K3bea4DHb34twx_lr_iyPpxdTGvmx4OewGGfKpXSM-Y,7170
14
+ ripperdoc/cli/commands/exit_cmd.py,sha256=B0CNKQos2eRC4LSjizLdKsFYzFfwRkrUur6Afu3Fh9M,334
15
+ ripperdoc/cli/commands/help_cmd.py,sha256=jyK6U2bsGEIwFpu08slVHKfxRyS3oblnRXdqSgU_W4w,978
16
+ ripperdoc/cli/commands/hooks_cmd.py,sha256=-ixQhKb1CX2c7_2zDdAqXV9ThnMf31UH3a9UBERD9mw,21026
17
+ ripperdoc/cli/commands/mcp_cmd.py,sha256=ZCnswx0TIiaiUUsIX7NpHaLZLZtvlUhBnN12s_ZtPCA,2424
18
+ ripperdoc/cli/commands/memory_cmd.py,sha256=gDvRr_-U1gMrOdC3OvujYLL5_CUgyZpwaJdytRP5CBM,6549
19
+ ripperdoc/cli/commands/models_cmd.py,sha256=ZuFekqIgO56XYrOWM3my4PyP6Q4YwO05HyZ0eENNL4I,16424
20
+ ripperdoc/cli/commands/permissions_cmd.py,sha256=aIMIvmt78nB2Q-Qa5ojqClUOsPRcoyeDIuhOJX8xg2k,11559
21
+ ripperdoc/cli/commands/resume_cmd.py,sha256=QQL3tQgv5Ae2SRyt4KoCuSPBKR5Ws3LFj-KhcssEtT0,4151
22
+ ripperdoc/cli/commands/status_cmd.py,sha256=Sqm8-5Q-3gui2relPHA99z2R50ft1mkf2QnqvKlDtVM,5535
23
+ ripperdoc/cli/commands/tasks_cmd.py,sha256=M-LuowiRt4xSzvIv_m5-h9KTi5o3KvdV9k2VQBqyuYM,8867
24
+ ripperdoc/cli/commands/todos_cmd.py,sha256=7Q0B1NVqGtB3R29ndbn4m0VQQm-YQ7d4Wlk7vJ7dLQI,1848
25
+ ripperdoc/cli/commands/tools_cmd.py,sha256=3cMi0vN4mAUhpKqJtRgNvZfcKzRPaMs_pkYYXlyvSSU,384
26
+ ripperdoc/cli/ui/__init__.py,sha256=TxSzTYdITlrYmYVfins_w_jzPqqWRpqky5u1ikwvmtM,43
27
+ ripperdoc/cli/ui/context_display.py,sha256=3ezdtHVwltkPQ5etYwfqUh-fjnpPu8B3P81UzrdHxZs,10020
28
+ ripperdoc/cli/ui/file_mention_completer.py,sha256=PYfcauxhU4NkLsNP-fGeBhZQFzUeKoDC5FO4S4pC1LU,11650
29
+ ripperdoc/cli/ui/helpers.py,sha256=DmgMMouyQdesjQ5RsErwsRCKVdWiDJnpqJjv90a3neE,2545
30
+ ripperdoc/cli/ui/interrupt_handler.py,sha256=mZAZhBXID6_NR03K8fSjPDDjtTScy182VFBbVHamcoM,5914
31
+ ripperdoc/cli/ui/message_display.py,sha256=W9VlRCpMykkamxphej5LHgmU-P4YaBfm9HPdIKlFKpg,10573
32
+ ripperdoc/cli/ui/panels.py,sha256=lzgg7kP8nzJKqGFjE-0UVbr9a1YZ0i2XlkUy6-LcLnk,1875
33
+ ripperdoc/cli/ui/provider_options.py,sha256=Ic30K1ev8w2oEcha4IjDYSoxw1tyCVB4hLoQpS_Y_5E,8369
34
+ ripperdoc/cli/ui/rich_ui.py,sha256=Ep884Vgvui64I3QRzwR8tUqB9iQGFnOpyup_nIEDMhY,48864
35
+ ripperdoc/cli/ui/spinner.py,sha256=Qavm98n5CEGKA01pgSSjHiFkqd3PgzoZdZAm7vYHrgk,2092
36
+ ripperdoc/cli/ui/thinking_spinner.py,sha256=9Et5EqPChfkmkiOO8w1OPs8t-sHaisgjn9A__kEYLyg,2824
37
+ ripperdoc/cli/ui/tool_renderers.py,sha256=tWXFyHOHz-kryoidra5RL-h9K8nbjrTBZ9o_thIgRho,11220
38
+ ripperdoc/cli/ui/wizard.py,sha256=L__1kIbySlyUkd4RKreOLkKC12z9O9vE9ZJN_QfLyDg,7055
39
+ ripperdoc/core/__init__.py,sha256=UemJCA-Y8df1466AX-YbRFj071zKajmqO1mi40YVW2g,40
40
+ ripperdoc/core/agents.py,sha256=cGRdUeOiYUeJbZqxxURa6drXHOuMrmyt2Dwgl_nAhjc,20045
41
+ ripperdoc/core/commands.py,sha256=NXCkljYbAP4dDoRy-_3semFNWxG4YAk9q82u8FTKH60,835
42
+ ripperdoc/core/config.py,sha256=ZzLlAqcQ-_RqcxdIGDEaYiLwowpT3gTbKAFOHWQx6Uk,22059
43
+ ripperdoc/core/custom_commands.py,sha256=2BMYiBq15FDjl3aOa3styN6nARyfU7xFAb4ly2Vsp-w,14254
44
+ ripperdoc/core/default_tools.py,sha256=6IZjEo56b8nyW-0I6ye9C3svoK6Tjnlc4gB5eL_PILM,3165
45
+ ripperdoc/core/permissions.py,sha256=4cwPiPVTXVOMfrl9WxO1akAcLiHr9aWmhCZtfrrgB-c,11026
46
+ ripperdoc/core/query.py,sha256=9gCIXt8mlVFtA0rzkWaYqC-8nFhfU0OTlWfg5lQVNPg,42726
47
+ ripperdoc/core/query_utils.py,sha256=xF9_vcqVSKANd9gwbk7aIG0t4a_f6R0m78-p3j5vkyI,24923
48
+ ripperdoc/core/skills.py,sha256=cco9vpQxg_5HCKp64k6TtN01NaWbvWef2A9olbpTZaU,10366
49
+ ripperdoc/core/system_prompt.py,sha256=d3GNCsJ_mdIojpWg1Wc0gRDC_gzRDI5G4tQN_gxhRdo,26752
50
+ ripperdoc/core/tool.py,sha256=7CUAEcoztTm211GCFiv3wYEb-rbIKut_tA92Oz5ueNo,7855
51
+ ripperdoc/core/hooks/__init__.py,sha256=xw7VJQu1ZB0ENHVqL5xtruBnP3d0FNgrBH6NTL2xYgg,2735
52
+ ripperdoc/core/hooks/config.py,sha256=wE_eMHDZu9-yHGyJ45ySL1_l2yx7B8i4jiThs78W6Zc,10085
53
+ ripperdoc/core/hooks/events.py,sha256=bgk0Ie06ZmKdmAx_NeLkMOQj556LtfC-xDLPMiBQAQ0,18168
54
+ ripperdoc/core/hooks/executor.py,sha256=3MdiCdc4Bn2xHcTlRT72BajrgAZ5roKck0NBnO4Re0c,16781
55
+ ripperdoc/core/hooks/integration.py,sha256=IzkOSpaMjC397zKdKO1jTR0uyzOet-eCwPLuXwTYOts,11082
56
+ ripperdoc/core/hooks/manager.py,sha256=11CVV3GHbVETNCw5hYG_Fn-CgSHP-PncBdmuqlvKso8,24607
57
+ ripperdoc/core/providers/__init__.py,sha256=yevsHF0AUI4b6Wiq_401NXewJ3dqe8LUUtQm0TLPPNQ,1911
58
+ ripperdoc/core/providers/anthropic.py,sha256=B967szN1Thc0K1Iv8TvKWcVKktCevBmShftupVag8pk,28551
59
+ ripperdoc/core/providers/base.py,sha256=HNOa3_XWszu6DbI8BYixxV0hnZb9qZ_FU4uinFVRHjU,9271
60
+ ripperdoc/core/providers/gemini.py,sha256=Fs-dShsmIVBFfz-jg4fBjvQyrxVnZ5yx4ALcES-l5Sg,27089
61
+ ripperdoc/core/providers/openai.py,sha256=DKt4VLiLBwhrqOkKBjafI4Eq-eIwSHJPnaMzMuse9yQ,23126
62
+ ripperdoc/sdk/__init__.py,sha256=aDSgI4lcCDs9cV3bxNmEEV3SuYx2aCd4VnUjs6H-R7E,213
63
+ ripperdoc/sdk/client.py,sha256=yRa5QRTqax5ko0mQBsh0UCo74VqYT0SxjWV73UmuQUQ,11357
64
+ ripperdoc/tools/__init__.py,sha256=RBFz0DDnztDXMqv_zRxFHVY-ez2HYcncx8zh_y-BX6w,42
65
+ ripperdoc/tools/ask_user_question_tool.py,sha256=ZWg5xAdeaRoR98KvvPuKmJH4L2dgzH87VXM4dxKcqBE,15478
66
+ ripperdoc/tools/background_shell.py,sha256=yPwh1zvQVU4uk-lXqg0fL4JJyY-s96sA4qpYK9jlRT8,12866
67
+ ripperdoc/tools/bash_output_tool.py,sha256=cC5dDmKYmkOTsLCXCcTYgc0loVWtmRobPn0C-I6qO-o,3379
68
+ ripperdoc/tools/bash_tool.py,sha256=EMXfA3WXCveOyx-XJU19oG_lz-HwBY_Y3QmR_xSIxCU,43211
69
+ ripperdoc/tools/dynamic_mcp_tool.py,sha256=kxxWhp6pP9N8fK3ubu5fHQYQv7aSwxcnaa3C9ZsBbOU,15879
70
+ ripperdoc/tools/enter_plan_mode_tool.py,sha256=LNQv43uWkohiQTYQdsrKbpAfQSJNE_FJ9Y6AM_ckjng,7976
71
+ ripperdoc/tools/exit_plan_mode_tool.py,sha256=XxhEih5EUrcscvkRA9lel54XoVIhl_cCL2xcvMJjtVA,5756
72
+ ripperdoc/tools/file_edit_tool.py,sha256=8o31c2QiFVXyxjyBnFHsXc8XZjkh2_j3tWP6U2WpM0Q,13826
73
+ ripperdoc/tools/file_read_tool.py,sha256=TGhb91dzQFwKUlRIANybfSBXrkQq_MAeazJmYB_Py60,7454
74
+ ripperdoc/tools/file_write_tool.py,sha256=g-fJWqoIdOjMqpNBcTAkRaMtC502QGnG5Eu-qE3nF20,7106
75
+ ripperdoc/tools/glob_tool.py,sha256=eZG4fzahjJsSM8NdmTiVl5nBfDQK7egPg6P7cqOM_1Y,5948
76
+ ripperdoc/tools/grep_tool.py,sha256=ng2vJjMnkhY9ZukKrKTYLAHI0ZqzmooEuaNe6gdocr0,14141
77
+ ripperdoc/tools/kill_bash_tool.py,sha256=_jwnJVCPe8uXZTJd7myh4hWCD-eBuB2XDaYwRCmNSsI,4625
78
+ ripperdoc/tools/ls_tool.py,sha256=JWQucgNOLjrGZwM7imu3GWe5YFwXxdXGoaBr50wDZCQ,15367
79
+ ripperdoc/tools/mcp_tools.py,sha256=BVz8MJhijNnHq1J2LLkZS89wp_pwwnOytH1HYcfkFqQ,23085
80
+ ripperdoc/tools/multi_edit_tool.py,sha256=Kq8kQ-j-kUgJWpx2OMSUjbjiFoiSaBLaYdg0avoZM0k,17607
81
+ ripperdoc/tools/notebook_edit_tool.py,sha256=Y2XkQB4WDbSWeCsO3Ybnsrbcxki99aOv3o23jZ5D1Hw,14445
82
+ ripperdoc/tools/skill_tool.py,sha256=TIUiUzL69mrKXFTais2YOssAwWnS5dwfK2_JFMG4xsY,7701
83
+ ripperdoc/tools/task_tool.py,sha256=UVfhfebsehFVijp30agP3UwhnE2ImY6FKzbjto3hpLM,18345
84
+ ripperdoc/tools/todo_tool.py,sha256=eIwF-s1117DrXJ4yXUMwkNs1gfKYNF2OlWzkJAXDzmk,20001
85
+ ripperdoc/tools/tool_search_tool.py,sha256=AeY-tFtWr2IAHTCEnG9kvsRRBqrBd-PJ96oUnFKa3Vs,13890
86
+ ripperdoc/utils/__init__.py,sha256=gdso60znB2hsYZ_YZBKVcuOY3QVfoqD2wHQ4pvr5lSw,37
87
+ ripperdoc/utils/bash_constants.py,sha256=KNn8bzB6nVU5jid9jvjiH4FAu8pP3DZONJ-OknJypAQ,1641
88
+ ripperdoc/utils/bash_output_utils.py,sha256=3Cf5wKJzRbUesmCNy5HtXIBtv0Z2BxklTfFHJ9q1T3w,1210
89
+ ripperdoc/utils/coerce.py,sha256=KOPb4KR4p32nwHWG_6GsGHeVZunJyYc2YhC5DLmEZO8,1015
90
+ ripperdoc/utils/context_length_errors.py,sha256=oyDVr_ME_6j97TLwVZ8bDMb6ISGQx6wEHrY7ckc0GuA,7714
91
+ ripperdoc/utils/conversation_compaction.py,sha256=GcRJat9i3IAGWerEAdCJzVryiFxQ-3_Q5oXvvMTXZsE,18344
92
+ ripperdoc/utils/exit_code_handlers.py,sha256=QtO1iDxVAb8Xp03D6_QixPoJC-RQlcp3ssIo_rm4two,7973
93
+ ripperdoc/utils/file_watch.py,sha256=TxdVLNfbOHPb4Lv4IDfjOYjVxyNx1lbFQSofGVlO4sU,4114
94
+ ripperdoc/utils/git_utils.py,sha256=Hq-Zx-KPyX4lp_i8ozhic15LyYdX_IfCRm-EyoFu59A,9047
95
+ ripperdoc/utils/json_utils.py,sha256=Bx1pHHu5r7GtvCqFHM3K9EoknFAtYOaCqTn9RN-5qBA,757
96
+ ripperdoc/utils/log.py,sha256=mieFMPxiv-M87bB-dgiY8D5WMxQbjVKJdsrW8QvCui8,6138
97
+ ripperdoc/utils/mcp.py,sha256=92PMrGOzAWoqKGIiWBX2nNO-wkyQ-lgchmdlQ8Oo3zs,19548
98
+ ripperdoc/utils/memory.py,sha256=J_kucw1BBnHQ1qG2_ZzdNysKvS1lrpuMtB5wxJDmXZU,8033
99
+ ripperdoc/utils/message_compaction.py,sha256=FwYxjWc0B7IlzT1VPEyfhwEl8rXbDi37utbEbS5qGWw,22577
100
+ ripperdoc/utils/message_formatting.py,sha256=Yye9TW1JyIKMgjtgn8f8HwM6GeYMTYUL4uxSOX9YLIY,7728
101
+ ripperdoc/utils/messages.py,sha256=eUNA8Av1kf_tVrArkUn0nxHm2OfsBZ-NLGOBH2dTsxw,23771
102
+ ripperdoc/utils/output_utils.py,sha256=R3wqFh9Dko_GK00Exx7XI0DnnldRWMsxZypYX5y6SJo,7448
103
+ ripperdoc/utils/path_ignore.py,sha256=5VOk075Ef9Wz9LhAWjFQuXJfnypxTD0w9cZVoTGko2M,17882
104
+ ripperdoc/utils/path_utils.py,sha256=C45Q3OeXnj-0FVEtvf_tdG5922XB6HthUzlUCvfc17Y,1626
105
+ ripperdoc/utils/prompt.py,sha256=zICNEsA_OtKx8t3zo9tHLXXu6G5K8rPO3jFLKz4j5tg,560
106
+ ripperdoc/utils/safe_get_cwd.py,sha256=lYxFJAN7lomoLwTAfMZtyOueotuvhC8TN84NtrPKj1E,827
107
+ ripperdoc/utils/sandbox_utils.py,sha256=G91P8dw2VFcCiCpjXZ4LvzbAPiO8REqMhw39eI5Z4dU,1123
108
+ ripperdoc/utils/session_history.py,sha256=67RKV6eiX16FYYRR851MBFjgezkyP95LnllNZazWwcU,9704
109
+ ripperdoc/utils/session_usage.py,sha256=p8_s46zDTzV1qzP4HR4PuZmLeJvSfq9mG_Y5rCnRYyA,3213
110
+ ripperdoc/utils/shell_token_utils.py,sha256=SduoSU-RERJdM_7gBn0urr5UXtl4XOpPgydBd2fwzWg,2500
111
+ ripperdoc/utils/shell_utils.py,sha256=t-neFPy_VhEmWZ79J7hh1ULBEdX116Rb9_pnXvir1Jw,5235
112
+ ripperdoc/utils/todo.py,sha256=6siiBz3R5iC7arONolPVxwmM68K5o_N-qIdv2bFeTZo,7051
113
+ ripperdoc/utils/token_estimation.py,sha256=qPQbeUwVlafEjzsXw6qMo0hd4Vjb1gCUMAPBouYUASI,1066
114
+ ripperdoc/utils/permissions/__init__.py,sha256=33FfOaDLepxJSkp0RLvTdVu7qBXuEcnOoTHFbEtFOt0,653
115
+ ripperdoc/utils/permissions/path_validation_utils.py,sha256=KOegjWaph8tXU7aqwQXRAxFEzrmRuPvdLb36J1QIPDQ,5772
116
+ ripperdoc/utils/permissions/shell_command_validation.py,sha256=tEp0sJoijYdy0stLdYxekCxGlGhPTTd46lRrWaY7w-I,33280
117
+ ripperdoc/utils/permissions/tool_permission_utils.py,sha256=6Fdu9-dMKhLsUExjEjoS0EUeRpEVN5UkqyseIC05YmM,9207
118
+ ripperdoc-0.2.9.dist-info/licenses/LICENSE,sha256=bRv9UhBor6GhnQDj12RciDcRfu0R7sB-lqCy1sWF75c,9242
119
+ ripperdoc-0.2.9.dist-info/METADATA,sha256=iGPG4ABTUQcIYplaFNlYh9-tMDY9RQDucfxnipJyjtM,7474
120
+ ripperdoc-0.2.9.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
121
+ ripperdoc-0.2.9.dist-info/entry_points.txt,sha256=79aohFxFPJmrQ3-Mhain04vb3EWpuc0EyzvDDUnwAu4,81
122
+ ripperdoc-0.2.9.dist-info/top_level.txt,sha256=u8LbdTr1a-laHgCO0Utl_R3QGFUhLxWelCDnP2ZgpCU,10
123
+ ripperdoc-0.2.9.dist-info/RECORD,,
@@ -1,113 +0,0 @@
1
- ripperdoc/__init__.py,sha256=2df2ZNxyMS77y0lZ3scL-6v6-11pxxJtRAwIs2hHfG8,66
2
- ripperdoc/__main__.py,sha256=1Avq2MceBfwUlNsfasC8n4dqVL_V56Bl3DRsnY4_Nxk,370
3
- ripperdoc/cli/__init__.py,sha256=03wf6gXBcEgXJrDJS-W_5BEG_DdJ_ep7CxQFPML-73g,35
4
- ripperdoc/cli/cli.py,sha256=ECbi5Rm8prKkNtiv4P191ftSMEMSwYIG2LKC5IJXyIk,14140
5
- ripperdoc/cli/commands/__init__.py,sha256=rSB7hmuMRBfqYCxuUMsdb3-8mloKQyfOTinXU3wm3Uo,2414
6
- ripperdoc/cli/commands/agents_cmd.py,sha256=YDE9oIXPmsPyvkHhq95aXxnneN3PqZ1ZOtcn26cXeO8,10438
7
- ripperdoc/cli/commands/base.py,sha256=4KUjxCM04MwbSMUKVNEBph_jeAKPI8b5MHsUFoz7l5g,386
8
- ripperdoc/cli/commands/clear_cmd.py,sha256=FDZ0W34VxGyLhLiU4TzukHCyElqsnLwkCmfKJqLfFAQ,366
9
- ripperdoc/cli/commands/compact_cmd.py,sha256=uR_nB1OX7cUL1TOJoefwdO31Qfyjd0nZSSttErqUxbA,473
10
- ripperdoc/cli/commands/config_cmd.py,sha256=ebIQk7zUFv353liWfbBSSfPiOaaCR7rQsd_eTw7nsvY,884
11
- ripperdoc/cli/commands/context_cmd.py,sha256=6Yrz3_Oa2NwEsZo4tLK_PFFYP0Vq-amQCMBomSVFmBo,5220
12
- ripperdoc/cli/commands/cost_cmd.py,sha256=yD9LSqgxVvYNTDPnEHxugjyLWcmbtH5dXim7DIW9zXc,2822
13
- ripperdoc/cli/commands/doctor_cmd.py,sha256=q_PO1mnknRysVG7uopiqDWvkIIcvRX2i-JWgfKN-0gQ,7052
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=ZCnswx0TIiaiUUsIX7NpHaLZLZtvlUhBnN12s_ZtPCA,2424
17
- ripperdoc/cli/commands/memory_cmd.py,sha256=gDvRr_-U1gMrOdC3OvujYLL5_CUgyZpwaJdytRP5CBM,6549
18
- ripperdoc/cli/commands/models_cmd.py,sha256=p6IeV_K9BjOahmtqmI2Gu7xsqRagVsIPYy7FEeuKQWQ,16135
19
- ripperdoc/cli/commands/permissions_cmd.py,sha256=3ERLLYTLUFW7jV7uo29i6SmLxrizpK4LXayLrPZbB1U,10827
20
- ripperdoc/cli/commands/resume_cmd.py,sha256=Z1jptNhub2WepKL-XPmd8KfDEvU90qjdtpVUajuAZgQ,4122
21
- ripperdoc/cli/commands/status_cmd.py,sha256=yM_c_GgoAL7CMH_ucGSwUhlbHggxYuvCEb4AXtpN-8s,5534
22
- ripperdoc/cli/commands/tasks_cmd.py,sha256=QrRF9MKg6LIH9BQz5E39KKdrwMiI3HTvI-c14aM7BU0,8815
23
- ripperdoc/cli/commands/todos_cmd.py,sha256=7Q0B1NVqGtB3R29ndbn4m0VQQm-YQ7d4Wlk7vJ7dLQI,1848
24
- ripperdoc/cli/commands/tools_cmd.py,sha256=3cMi0vN4mAUhpKqJtRgNvZfcKzRPaMs_pkYYXlyvSSU,384
25
- ripperdoc/cli/ui/__init__.py,sha256=TxSzTYdITlrYmYVfins_w_jzPqqWRpqky5u1ikwvmtM,43
26
- ripperdoc/cli/ui/context_display.py,sha256=3ezdtHVwltkPQ5etYwfqUh-fjnpPu8B3P81UzrdHxZs,10020
27
- ripperdoc/cli/ui/file_mention_completer.py,sha256=rFVNgTUulZYUZpBq9rnK7bOPp8_NnFokSm2zS3AmCTY,8951
28
- ripperdoc/cli/ui/helpers.py,sha256=DmgMMouyQdesjQ5RsErwsRCKVdWiDJnpqJjv90a3neE,2545
29
- ripperdoc/cli/ui/interrupt_handler.py,sha256=bHYBbReu8uzVkHj1kEnL09ILt6b1hdc4iK76ZVT4t84,5922
30
- ripperdoc/cli/ui/message_display.py,sha256=vMOCX8KUPP5P1CSHyZgojj69AyIZAk-Czlcgx-gOSvc,10367
31
- ripperdoc/cli/ui/panels.py,sha256=204DvcXwye75dkSiwpE0lGb7u0SnRLLXd0jY9kT84NU,1753
32
- ripperdoc/cli/ui/rich_ui.py,sha256=yk0ZS7xGzw_NGDOEMvT99XSpHdwVWhprupkaEBxv7Q4,43941
33
- ripperdoc/cli/ui/spinner.py,sha256=XsPRwJ-70InLX9Qw50CEgSHn5oKA5PFIue8Un4edhUk,1449
34
- ripperdoc/cli/ui/thinking_spinner.py,sha256=9Et5EqPChfkmkiOO8w1OPs8t-sHaisgjn9A__kEYLyg,2824
35
- ripperdoc/cli/ui/tool_renderers.py,sha256=gVuZM083Nys9KWYAFTdmr1vpJm7ardqNhyUZx7KkL6s,11170
36
- ripperdoc/core/__init__.py,sha256=UemJCA-Y8df1466AX-YbRFj071zKajmqO1mi40YVW2g,40
37
- ripperdoc/core/agents.py,sha256=3glBiVM8e9NruCQGYl4inQ6Lt7jWb7C4S44YQXRWWl8,19930
38
- ripperdoc/core/commands.py,sha256=NXCkljYbAP4dDoRy-_3semFNWxG4YAk9q82u8FTKH60,835
39
- ripperdoc/core/config.py,sha256=fuzXTSSpPFIkzgZJW-tOf18cNeemrot64ihO4cdM79g,20979
40
- ripperdoc/core/default_tools.py,sha256=fHmqIlPIE9qGwmgeYYw-QepKRoQLMhclnCv6Qahews0,3090
41
- ripperdoc/core/permissions.py,sha256=_WLWE7Kq-Z5j3zEDAPr8JqdT0fz2oFqNs18NL0qoeWQ,9768
42
- ripperdoc/core/query.py,sha256=wpeQEJGTNwqp5Vvu9KoF-y1sZ-TOx_-xGaNwcDJYhfc,38729
43
- ripperdoc/core/query_utils.py,sha256=-lBRL5oAV0p6p6LukpFfBZKEcRdztbzCNOt51pEsKBM,24776
44
- ripperdoc/core/skills.py,sha256=XkMt3WPT2_0xfx2qQhEnBbwJ0121aRFmuXLckw3MtVU,10251
45
- ripperdoc/core/system_prompt.py,sha256=smhuRfzbvhfzNsQ3D89Mucll16u_40VWpOzKS0kJPFQ,26724
46
- ripperdoc/core/tool.py,sha256=Hnnt7FYBGlD6lyAr9XhDgp_LfcP7o3yapzd7t6FPlBE,7813
47
- ripperdoc/core/providers/__init__.py,sha256=yevsHF0AUI4b6Wiq_401NXewJ3dqe8LUUtQm0TLPPNQ,1911
48
- ripperdoc/core/providers/anthropic.py,sha256=XNv_LhQTBrsFN5dB5rdYrNikBQ6Qq4sEu_PxukJXuks,10257
49
- ripperdoc/core/providers/base.py,sha256=HNOa3_XWszu6DbI8BYixxV0hnZb9qZ_FU4uinFVRHjU,9271
50
- ripperdoc/core/providers/gemini.py,sha256=3U69Gh6hiL8QWsf-nawZJTfh5oeZP5DAmXYDfWtrEQE,24786
51
- ripperdoc/core/providers/openai.py,sha256=FiNTCBtFpq0i0K6S0OyC-F-0HssSWJE6jrH3xRsPzD4,20981
52
- ripperdoc/sdk/__init__.py,sha256=aDSgI4lcCDs9cV3bxNmEEV3SuYx2aCd4VnUjs6H-R7E,213
53
- ripperdoc/sdk/client.py,sha256=aNnFs8pE2IUslXcHEtEUtkCHrDztAtq9moddjlOVxZs,11357
54
- ripperdoc/tools/__init__.py,sha256=RBFz0DDnztDXMqv_zRxFHVY-ez2HYcncx8zh_y-BX6w,42
55
- ripperdoc/tools/ask_user_question_tool.py,sha256=QgzmIDVR-wdlLf9fSiVPbRm_8tSaIlGJhuuRYOCGiUU,15446
56
- ripperdoc/tools/background_shell.py,sha256=HangGLwN4iy-udo02zUZF3QRPIqOa7sVDesbv2wL9Js,12854
57
- ripperdoc/tools/bash_output_tool.py,sha256=ljIOzTOnkbQfe3jExlhpUlMiLT6HpeD-1QI-D1CwHh8,3379
58
- ripperdoc/tools/bash_tool.py,sha256=eiPgyvY7m52xT6JxbFQ_4n3Qk6RZ0yQK5ZMgQMc8QpQ,42669
59
- ripperdoc/tools/dynamic_mcp_tool.py,sha256=GERh7qT1mPVivFUIhlFxPNRUwOGNw5CmCnymEwQ-7vk,15662
60
- ripperdoc/tools/enter_plan_mode_tool.py,sha256=FYjm_TmBL55pY4GdP7t0ISlqg-Qe3DwpIt-2weL1S4s,7976
61
- ripperdoc/tools/exit_plan_mode_tool.py,sha256=3smkwGLTITem5fgA8catSSRay_a1OGQrjs8JF1zDdUQ,5756
62
- ripperdoc/tools/file_edit_tool.py,sha256=pF4ZCBFq3vy2DukxGZjBGoyVJIRH-7UY4A-TpFegzdA,13768
63
- ripperdoc/tools/file_read_tool.py,sha256=eGr1C5xPe22TXrJOU7zwXGDjBqAajtYKn6aiIG-KRBs,7413
64
- ripperdoc/tools/file_write_tool.py,sha256=SUsFvLVvCwegxEDhL8xpppNRlSl_Hcc1xwNR35FbMqU,7044
65
- ripperdoc/tools/glob_tool.py,sha256=oy1S-MrQl57X_wpNXcqXyE4oHI3kmpOQoTYavx3mzEg,5932
66
- ripperdoc/tools/grep_tool.py,sha256=n_YNKg8w63JgVJVpg7Qakj75JrymeKByNoapl8IS05U,14125
67
- ripperdoc/tools/kill_bash_tool.py,sha256=36F8w2Rm1IVQitwOAwS-D8NTnyQdWfKWIam44qlXErk,4625
68
- ripperdoc/tools/ls_tool.py,sha256=x0nw7F5cWjKK7Vb66nqdg9djgupPpCTwPAqd5rZlMUs,15367
69
- ripperdoc/tools/mcp_tools.py,sha256=P0wbk_WRUD_MVkLDpMjttjQ13nje8Zc-mR3ud94QqZ0,23018
70
- ripperdoc/tools/multi_edit_tool.py,sha256=ndCb-OlHQRqlrGElZ_q5QOTibZqW9uDp6e4ctOPNLbU,17579
71
- ripperdoc/tools/notebook_edit_tool.py,sha256=FOgx0RtZnD1zZCUv5vsXS531ep26ABXaNsRhh0ZU4Uc,14393
72
- ripperdoc/tools/skill_tool.py,sha256=vquTDL8ZihGvgP6U6EswOm5IjQYFHwxIiLzlzCEWrVw,7701
73
- ripperdoc/tools/task_tool.py,sha256=EcUAaWY3aTTZawE84wvk2LyHSNU7nXAbpeDoOjU4_K0,18325
74
- ripperdoc/tools/todo_tool.py,sha256=9LpU5PZpnXacvtcY41z6qeFow8n15uCtk9ELBUAFCtI,20001
75
- ripperdoc/tools/tool_search_tool.py,sha256=97v_5Epbr-qeltrCtJkwB73weegcF_TE8TeuqATXl3g,13870
76
- ripperdoc/utils/__init__.py,sha256=gdso60znB2hsYZ_YZBKVcuOY3QVfoqD2wHQ4pvr5lSw,37
77
- ripperdoc/utils/bash_constants.py,sha256=KNn8bzB6nVU5jid9jvjiH4FAu8pP3DZONJ-OknJypAQ,1641
78
- ripperdoc/utils/bash_output_utils.py,sha256=3Cf5wKJzRbUesmCNy5HtXIBtv0Z2BxklTfFHJ9q1T3w,1210
79
- ripperdoc/utils/coerce.py,sha256=KOPb4KR4p32nwHWG_6GsGHeVZunJyYc2YhC5DLmEZO8,1015
80
- ripperdoc/utils/context_length_errors.py,sha256=oyDVr_ME_6j97TLwVZ8bDMb6ISGQx6wEHrY7ckc0GuA,7714
81
- ripperdoc/utils/conversation_compaction.py,sha256=-yRGL2oVweYPNUZljMRH0xMeMeVN_R_vJ4G_wcEcpyg,18338
82
- ripperdoc/utils/exit_code_handlers.py,sha256=QtO1iDxVAb8Xp03D6_QixPoJC-RQlcp3ssIo_rm4two,7973
83
- ripperdoc/utils/file_watch.py,sha256=CoUIcLuS-VcfxotuxFkel5KpNluMmLGJKDzx26MG3yY,4039
84
- ripperdoc/utils/git_utils.py,sha256=Hq-Zx-KPyX4lp_i8ozhic15LyYdX_IfCRm-EyoFu59A,9047
85
- ripperdoc/utils/json_utils.py,sha256=e12eMpWlLDniHZVg7zdOkXw5wBZhnjhVtDm8tpBEOjk,741
86
- ripperdoc/utils/log.py,sha256=mieFMPxiv-M87bB-dgiY8D5WMxQbjVKJdsrW8QvCui8,6138
87
- ripperdoc/utils/mcp.py,sha256=xszG3kDrlctVVZvXOHr7wgndthpu-AwMySSwpnaHFGc,19445
88
- ripperdoc/utils/memory.py,sha256=KNB8Eoobl0vgIEh6phXKtGmDUct7_DNQH-F6Il4KRDQ,8009
89
- ripperdoc/utils/message_compaction.py,sha256=ydTtMqo09ds1qTneJrHaFroZ4UtmzzXlXHErPm7ZY5E,22370
90
- ripperdoc/utils/message_formatting.py,sha256=M-2zEkjNEiLyda9x4S0-xyIBSsVOQS3eTzbIE3K7G_Q,7492
91
- ripperdoc/utils/messages.py,sha256=OrUK758mmUx2_u_hE5RFLJMp8VeDy-crLGVADwgFO3c,21665
92
- ripperdoc/utils/output_utils.py,sha256=R3wqFh9Dko_GK00Exx7XI0DnnldRWMsxZypYX5y6SJo,7448
93
- ripperdoc/utils/path_ignore.py,sha256=2THb4h__cnFz_mZoR6gchDFiIirxSvsbcEKONJhiAQQ,17607
94
- ripperdoc/utils/path_utils.py,sha256=C45Q3OeXnj-0FVEtvf_tdG5922XB6HthUzlUCvfc17Y,1626
95
- ripperdoc/utils/prompt.py,sha256=zICNEsA_OtKx8t3zo9tHLXXu6G5K8rPO3jFLKz4j5tg,560
96
- ripperdoc/utils/safe_get_cwd.py,sha256=IvG8dIJd2tC5_glUsfeWXkpcF1EHzdkjFtuUGJd669w,815
97
- ripperdoc/utils/sandbox_utils.py,sha256=G91P8dw2VFcCiCpjXZ4LvzbAPiO8REqMhw39eI5Z4dU,1123
98
- ripperdoc/utils/session_history.py,sha256=SQ3HusavKtbVyx6V-KPCXbQtTm_rcVuL-qjwv_iNS7Y,9568
99
- ripperdoc/utils/session_usage.py,sha256=p8_s46zDTzV1qzP4HR4PuZmLeJvSfq9mG_Y5rCnRYyA,3213
100
- ripperdoc/utils/shell_token_utils.py,sha256=SduoSU-RERJdM_7gBn0urr5UXtl4XOpPgydBd2fwzWg,2500
101
- ripperdoc/utils/shell_utils.py,sha256=t-neFPy_VhEmWZ79J7hh1ULBEdX116Rb9_pnXvir1Jw,5235
102
- ripperdoc/utils/todo.py,sha256=6aj3-AuKaY93bzljsIpvZlM_O8CPgnRROSLEEgzaMHU,7039
103
- ripperdoc/utils/token_estimation.py,sha256=t98_zC95CZaA95A-1yu9H4p9r_IOjelspl2qqBLVyf8,1047
104
- ripperdoc/utils/permissions/__init__.py,sha256=33FfOaDLepxJSkp0RLvTdVu7qBXuEcnOoTHFbEtFOt0,653
105
- ripperdoc/utils/permissions/path_validation_utils.py,sha256=FWbb21Hwgb9gUPu_WtA14w99UUojVQLVz5HByormoUs,5760
106
- ripperdoc/utils/permissions/shell_command_validation.py,sha256=94ylqoDUiTF4v4wEiVS35jFJakyaSxdIFqYKumPTrGk,21205
107
- ripperdoc/utils/permissions/tool_permission_utils.py,sha256=6Fdu9-dMKhLsUExjEjoS0EUeRpEVN5UkqyseIC05YmM,9207
108
- ripperdoc-0.2.7.dist-info/licenses/LICENSE,sha256=bRv9UhBor6GhnQDj12RciDcRfu0R7sB-lqCy1sWF75c,9242
109
- ripperdoc-0.2.7.dist-info/METADATA,sha256=WRYXCFZZWO1HLnvzwoqeD1KdlhSZ0gNPE5rnkHDsaNc,6218
110
- ripperdoc-0.2.7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
111
- ripperdoc-0.2.7.dist-info/entry_points.txt,sha256=79aohFxFPJmrQ3-Mhain04vb3EWpuc0EyzvDDUnwAu4,81
112
- ripperdoc-0.2.7.dist-info/top_level.txt,sha256=u8LbdTr1a-laHgCO0Utl_R3QGFUhLxWelCDnP2ZgpCU,10
113
- ripperdoc-0.2.7.dist-info/RECORD,,