ripperdoc 0.2.9__tar.gz → 0.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/PKG-INFO +55 -17
  2. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/README.md +46 -15
  3. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/pyproject.toml +6 -2
  4. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/__init__.py +1 -1
  5. ripperdoc-0.3.0/ripperdoc/cli/cli.py +651 -0
  6. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/commands/__init__.py +6 -0
  7. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/commands/agents_cmd.py +128 -5
  8. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/commands/clear_cmd.py +8 -0
  9. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/commands/doctor_cmd.py +29 -0
  10. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/commands/exit_cmd.py +1 -0
  11. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/commands/memory_cmd.py +2 -1
  12. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/commands/models_cmd.py +63 -7
  13. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/commands/resume_cmd.py +5 -0
  14. ripperdoc-0.3.0/ripperdoc/cli/commands/skills_cmd.py +103 -0
  15. ripperdoc-0.3.0/ripperdoc/cli/commands/stats_cmd.py +244 -0
  16. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/commands/status_cmd.py +10 -0
  17. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/commands/tasks_cmd.py +6 -3
  18. ripperdoc-0.3.0/ripperdoc/cli/commands/themes_cmd.py +139 -0
  19. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/ui/file_mention_completer.py +63 -13
  20. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/ui/helpers.py +6 -3
  21. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/ui/interrupt_handler.py +34 -0
  22. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/ui/panels.py +14 -8
  23. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/ui/rich_ui.py +737 -47
  24. ripperdoc-0.3.0/ripperdoc/cli/ui/spinner.py +148 -0
  25. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/ui/thinking_spinner.py +1 -2
  26. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/ui/tool_renderers.py +10 -9
  27. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/ui/wizard.py +24 -19
  28. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/core/agents.py +14 -3
  29. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/core/config.py +238 -6
  30. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/core/default_tools.py +91 -10
  31. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/core/hooks/events.py +4 -0
  32. ripperdoc-0.3.0/ripperdoc/core/hooks/llm_callback.py +58 -0
  33. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/core/hooks/manager.py +6 -0
  34. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/core/permissions.py +160 -9
  35. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/core/providers/openai.py +84 -28
  36. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/core/query.py +489 -87
  37. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/core/query_utils.py +17 -14
  38. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/core/skills.py +1 -0
  39. ripperdoc-0.3.0/ripperdoc/core/theme.py +298 -0
  40. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/core/tool.py +15 -5
  41. ripperdoc-0.3.0/ripperdoc/protocol/__init__.py +14 -0
  42. ripperdoc-0.3.0/ripperdoc/protocol/models.py +300 -0
  43. ripperdoc-0.3.0/ripperdoc/protocol/stdio.py +1453 -0
  44. ripperdoc-0.3.0/ripperdoc/tools/background_shell.py +605 -0
  45. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/tools/bash_tool.py +117 -22
  46. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/tools/file_edit_tool.py +228 -50
  47. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/tools/file_read_tool.py +154 -3
  48. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/tools/file_write_tool.py +53 -11
  49. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/tools/grep_tool.py +98 -8
  50. ripperdoc-0.3.0/ripperdoc/tools/lsp_tool.py +609 -0
  51. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/tools/multi_edit_tool.py +26 -3
  52. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/tools/skill_tool.py +52 -1
  53. ripperdoc-0.3.0/ripperdoc/tools/task_tool.py +854 -0
  54. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/conversation_compaction.py +1 -1
  55. ripperdoc-0.3.0/ripperdoc/utils/file_watch.py +350 -0
  56. ripperdoc-0.3.0/ripperdoc/utils/image_utils.py +125 -0
  57. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/log.py +30 -3
  58. ripperdoc-0.3.0/ripperdoc/utils/lsp.py +812 -0
  59. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/mcp.py +80 -18
  60. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/message_formatting.py +7 -4
  61. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/messages.py +198 -33
  62. ripperdoc-0.3.0/ripperdoc/utils/pending_messages.py +50 -0
  63. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/permissions/shell_command_validation.py +3 -3
  64. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/permissions/tool_permission_utils.py +180 -15
  65. ripperdoc-0.3.0/ripperdoc/utils/platform.py +198 -0
  66. ripperdoc-0.3.0/ripperdoc/utils/session_heatmap.py +242 -0
  67. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/session_history.py +2 -2
  68. ripperdoc-0.3.0/ripperdoc/utils/session_stats.py +294 -0
  69. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/shell_utils.py +8 -5
  70. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/todo.py +0 -6
  71. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc.egg-info/PKG-INFO +55 -17
  72. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc.egg-info/SOURCES.txt +28 -4
  73. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc.egg-info/requires.txt +11 -1
  74. ripperdoc-0.3.0/tests/test_background_notifications.py +57 -0
  75. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/tests/test_background_shell_shutdown.py +7 -7
  76. ripperdoc-0.3.0/tests/test_background_shell_status.py +33 -0
  77. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/tests/test_cli_commands.py +10 -3
  78. ripperdoc-0.3.0/tests/test_cli_stdin.py +43 -0
  79. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/tests/test_config.py +0 -1
  80. ripperdoc-0.3.0/tests/test_file_edit_tool.py +705 -0
  81. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/tests/test_file_mention_completer.py +3 -3
  82. ripperdoc-0.3.0/tests/test_git_utils.py +527 -0
  83. ripperdoc-0.3.0/tests/test_hooks.py +2292 -0
  84. ripperdoc-0.3.0/tests/test_interrupt_handler.py +505 -0
  85. ripperdoc-0.3.0/tests/test_pending_messages.py +110 -0
  86. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/tests/test_permissions.py +101 -1
  87. ripperdoc-0.3.0/tests/test_platform.py +362 -0
  88. ripperdoc-0.3.0/tests/test_rich_ui_suggestions.py +20 -0
  89. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/tests/test_shell_permissions.py +295 -8
  90. ripperdoc-0.3.0/tests/test_shell_utils.py +423 -0
  91. ripperdoc-0.3.0/tests/test_utils.py +1097 -0
  92. ripperdoc-0.2.9/ripperdoc/cli/cli.py +0 -323
  93. ripperdoc-0.2.9/ripperdoc/cli/ui/spinner.py +0 -73
  94. ripperdoc-0.2.9/ripperdoc/sdk/__init__.py +0 -9
  95. ripperdoc-0.2.9/ripperdoc/sdk/client.py +0 -333
  96. ripperdoc-0.2.9/ripperdoc/tools/background_shell.py +0 -390
  97. ripperdoc-0.2.9/ripperdoc/tools/task_tool.py +0 -380
  98. ripperdoc-0.2.9/ripperdoc/utils/file_watch.py +0 -141
  99. ripperdoc-0.2.9/tests/test_sdk.py +0 -46
  100. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/LICENSE +0 -0
  101. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/__main__.py +0 -0
  102. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/__init__.py +0 -0
  103. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/commands/base.py +0 -0
  104. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/commands/compact_cmd.py +0 -0
  105. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/commands/config_cmd.py +0 -0
  106. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/commands/context_cmd.py +0 -0
  107. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/commands/cost_cmd.py +0 -0
  108. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/commands/help_cmd.py +0 -0
  109. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/commands/hooks_cmd.py +0 -0
  110. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/commands/mcp_cmd.py +0 -0
  111. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/commands/permissions_cmd.py +0 -0
  112. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/commands/todos_cmd.py +0 -0
  113. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/commands/tools_cmd.py +0 -0
  114. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/ui/__init__.py +0 -0
  115. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/ui/context_display.py +0 -0
  116. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/ui/message_display.py +0 -0
  117. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/ui/provider_options.py +0 -0
  118. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/core/__init__.py +0 -0
  119. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/core/commands.py +0 -0
  120. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/core/custom_commands.py +0 -0
  121. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/core/hooks/__init__.py +0 -0
  122. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/core/hooks/config.py +0 -0
  123. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/core/hooks/executor.py +0 -0
  124. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/core/hooks/integration.py +0 -0
  125. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/core/providers/__init__.py +0 -0
  126. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/core/providers/anthropic.py +0 -0
  127. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/core/providers/base.py +0 -0
  128. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/core/providers/gemini.py +0 -0
  129. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/core/system_prompt.py +0 -0
  130. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/tools/__init__.py +0 -0
  131. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/tools/ask_user_question_tool.py +0 -0
  132. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/tools/bash_output_tool.py +0 -0
  133. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/tools/dynamic_mcp_tool.py +0 -0
  134. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/tools/enter_plan_mode_tool.py +0 -0
  135. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/tools/exit_plan_mode_tool.py +0 -0
  136. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/tools/glob_tool.py +0 -0
  137. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/tools/kill_bash_tool.py +0 -0
  138. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/tools/ls_tool.py +0 -0
  139. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/tools/mcp_tools.py +0 -0
  140. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/tools/notebook_edit_tool.py +0 -0
  141. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/tools/todo_tool.py +0 -0
  142. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/tools/tool_search_tool.py +0 -0
  143. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/__init__.py +0 -0
  144. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/bash_constants.py +0 -0
  145. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/bash_output_utils.py +0 -0
  146. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/coerce.py +0 -0
  147. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/context_length_errors.py +0 -0
  148. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/exit_code_handlers.py +0 -0
  149. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/git_utils.py +0 -0
  150. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/json_utils.py +0 -0
  151. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/memory.py +0 -0
  152. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/message_compaction.py +0 -0
  153. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/output_utils.py +0 -0
  154. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/path_ignore.py +0 -0
  155. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/path_utils.py +0 -0
  156. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/permissions/__init__.py +0 -0
  157. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/permissions/path_validation_utils.py +0 -0
  158. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/prompt.py +0 -0
  159. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/safe_get_cwd.py +0 -0
  160. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/sandbox_utils.py +0 -0
  161. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/session_usage.py +0 -0
  162. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/shell_token_utils.py +0 -0
  163. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/token_estimation.py +0 -0
  164. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc.egg-info/dependency_links.txt +0 -0
  165. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc.egg-info/entry_points.txt +0 -0
  166. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc.egg-info/top_level.txt +0 -0
  167. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/setup.cfg +0 -0
  168. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/setup.py +0 -0
  169. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/tests/test_compact.py +0 -0
  170. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/tests/test_context_length_errors.py +0 -0
  171. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/tests/test_context_limits.py +0 -0
  172. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/tests/test_custom_commands.py +0 -0
  173. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/tests/test_hooks_cmd.py +0 -0
  174. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/tests/test_mcp_config.py +0 -0
  175. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/tests/test_messages.py +0 -0
  176. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/tests/test_output_utils.py +0 -0
  177. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/tests/test_path_ignore.py +0 -0
  178. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/tests/test_query_abort.py +0 -0
  179. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/tests/test_skills.py +0 -0
  180. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/tests/test_todo.py +0 -0
  181. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/tests/test_tool_search.py +0 -0
  182. {ripperdoc-0.2.9 → ripperdoc-0.3.0}/tests/test_tools.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ripperdoc
3
- Version: 0.2.9
3
+ Version: 0.3.0
4
4
  Summary: AI-powered terminal assistant for coding tasks
5
5
  Author: Ripperdoc Team
6
6
  License: Apache-2.0
@@ -23,16 +23,23 @@ Requires-Dist: python-dotenv>=1.0.0
23
23
  Requires-Dist: aiofiles>=23.0.0
24
24
  Requires-Dist: prompt-toolkit>=3.0.0
25
25
  Requires-Dist: PyYAML>=6.0.0
26
- Requires-Dist: mcp[cli]>=1.22.0
26
+ Requires-Dist: mcp[cli]>=1.25.0
27
27
  Requires-Dist: json_repair>=0.54.2
28
28
  Requires-Dist: tiktoken>=0.7.0
29
29
  Requires-Dist: google-genai>=0.3.0
30
+ Requires-Dist: charset-normalizer>=3.0.0
30
31
  Provides-Extra: dev
31
32
  Requires-Dist: pytest>=7.0.0; extra == "dev"
32
33
  Requires-Dist: pytest-asyncio>=0.21.0; extra == "dev"
33
34
  Requires-Dist: mypy>=1.0.0; extra == "dev"
34
35
  Requires-Dist: black>=23.0.0; extra == "dev"
35
36
  Requires-Dist: ruff>=0.1.0; extra == "dev"
37
+ Provides-Extra: anthropic
38
+ Requires-Dist: anthropic>=0.39.0; extra == "anthropic"
39
+ Provides-Extra: openai
40
+ Requires-Dist: openai>=1.0.0; extra == "openai"
41
+ Provides-Extra: gemini
42
+ Requires-Dist: google-genai>=0.3.0; extra == "gemini"
36
43
  Dynamic: license-file
37
44
 
38
45
  <div align="center">
@@ -93,27 +100,22 @@ pip install git+https://github.com/quantmew/ripperdoc.git
93
100
  Or install from source:
94
101
  ```bash
95
102
  # Clone the repository
96
- git clone <repository-url>
97
- cd Ripperdoc
103
+ git clone https://github.com/quantmew/ripperdoc.git
104
+ cd ripperdoc
98
105
 
99
106
  # Install from source
100
107
  pip install -e .
101
108
  ```
102
109
 
103
- ### Configuration
104
110
 
105
- Set your API key as an environment variable:
106
- ```bash
107
- export OPENAI_API_KEY="your-api-key-here"
108
- # or for Anthropic Claude
109
- export ANTHROPIC_API_KEY="your-api-key-here"
110
- ```
111
111
 
112
112
  ## Usage
113
113
 
114
114
  ### Interactive Mode (Recommended)
115
115
  ```bash
116
116
  ripperdoc
117
+ # or use the short alias
118
+ rd
117
119
  ```
118
120
 
119
121
  This launches an interactive session where you can:
@@ -122,6 +124,13 @@ This launches an interactive session where you can:
122
124
  - Execute commands
123
125
  - Navigate and explore files
124
126
 
127
+ **Options:**
128
+ - `--yolo` - Skip permission prompts (safe mode is on by default)
129
+ - `--model <model_name>` - Specify a model (e.g., `claude-sonnet-4-20250514`, `gpt-4o`)
130
+ - `--tools <tool_list>` - Filter available tools (comma-separated, or "" for none)
131
+ - `--no-mcp` - Disable MCP server integration
132
+ - `--verbose` - Enable verbose logging
133
+
125
134
  ### Python SDK (headless)
126
135
 
127
136
  Use Ripperdoc without the terminal UI via the new Python SDK. See [docs/SDK_USAGE.md](docs/SDK_USAGE.md) for examples of the one-shot `query` helper and the session-based `RipperdocClient`. 中文指南见 [docs/SDK_USAGE_CN.md](docs/SDK_USAGE_CN.md)。
@@ -137,38 +146,67 @@ See the [examples/](examples/) directory for complete SDK usage examples.
137
146
 
138
147
  ### Safe Mode Permissions
139
148
 
140
- Safe mode is the default. Use `--unsafe` to skip permission prompts. Choose `a`/`always` to allow a tool for the current session (not persisted across sessions).
149
+ Safe mode is enabled by default. When prompted:
150
+ - Type `y` or `yes` to allow a single operation
151
+ - Type `a` or `always` to allow all operations of that type for the session
152
+ - Type `n` or `no` to deny the operation
153
+
154
+ Use `--yolo` flag to skip all permission prompts:
155
+ ```bash
156
+ ripperdoc --yolo
157
+ ```
141
158
 
142
159
  ### Agent Skills
143
160
 
144
161
  Extend Ripperdoc with reusable Skill bundles:
145
162
 
146
- - Personal skills live in `~/.ripperdoc/skills/<skill-name>/SKILL.md`
147
- - Project skills live in `.ripperdoc/skills/<skill-name>/SKILL.md` and can be checked into git
148
- - Each `SKILL.md` starts with YAML frontmatter (`name`, `description`, optional `allowed-tools`, `model`, `max-thinking-tokens`, `disable-model-invocation`) followed by the instructions; add supporting files alongside it
149
- - Model and max-thinking-token hints from skills are applied automatically for the rest of the session after you load them with the `Skill` tool
150
- - Ripperdoc exposes skill names/descriptions in the system prompt and loads full content on demand via the `Skill` tool
163
+ - **Personal skills**: `~/.ripperdoc/skills/<skill-name>/SKILL.md`
164
+ - **Project skills**: `.ripperdoc/skills/<skill-name>/SKILL.md` (can be checked into git)
165
+ - Each `SKILL.md` starts with YAML frontmatter:
166
+ - `name` - Skill identifier
167
+ - `description` - What the skill does
168
+ - `allowed-tools` (optional) - Restrict which tools the skill can use
169
+ - `model` (optional) - Suggest a specific model for this skill
170
+ - `max-thinking-tokens` (optional) - Control thinking budget
171
+ - `disable-model-invocation` (optional) - Use skill without calling the model
172
+ - Add supporting files alongside `SKILL.md` as needed
173
+ - Skills are auto-discovered and loaded on demand via the `Skill` tool
174
+
175
+ **Built-in skills:** PDF manipulation (`pdf`), PowerPoint (`pptx`), Excel (`xlsx`)
151
176
 
152
177
  ## Examples
153
178
 
154
179
  ### Code Analysis
155
180
  ```
156
181
  > Can you explain what this function does?
182
+ > Find all references to the `parse_config` function
157
183
  ```
158
184
 
159
185
  ### File Operations
160
186
  ```
161
187
  > Read the main.py file and suggest improvements
188
+ > Create a new component called UserProfile.tsx
189
+ > Update all imports to use the new package structure
162
190
  ```
163
191
 
164
192
  ### Code Generation
165
193
  ```
166
194
  > Create a new Python script that implements a REST API client
195
+ > Generate unit tests for the auth module
196
+ > Add error handling to the database connection code
167
197
  ```
168
198
 
169
199
  ### Project Navigation
170
200
  ```
171
201
  > Show me all the Python files in the project
202
+ > Find where the user authentication logic is implemented
203
+ > List all API endpoints in the project
204
+ ```
205
+
206
+ ### MCP Integration
207
+ ```
208
+ > What MCP servers are available?
209
+ > Query the context7 documentation for React hooks
172
210
  ```
173
211
 
174
212
  ## Development
@@ -56,27 +56,22 @@ pip install git+https://github.com/quantmew/ripperdoc.git
56
56
  Or install from source:
57
57
  ```bash
58
58
  # Clone the repository
59
- git clone <repository-url>
60
- cd Ripperdoc
59
+ git clone https://github.com/quantmew/ripperdoc.git
60
+ cd ripperdoc
61
61
 
62
62
  # Install from source
63
63
  pip install -e .
64
64
  ```
65
65
 
66
- ### Configuration
67
66
 
68
- Set your API key as an environment variable:
69
- ```bash
70
- export OPENAI_API_KEY="your-api-key-here"
71
- # or for Anthropic Claude
72
- export ANTHROPIC_API_KEY="your-api-key-here"
73
- ```
74
67
 
75
68
  ## Usage
76
69
 
77
70
  ### Interactive Mode (Recommended)
78
71
  ```bash
79
72
  ripperdoc
73
+ # or use the short alias
74
+ rd
80
75
  ```
81
76
 
82
77
  This launches an interactive session where you can:
@@ -85,6 +80,13 @@ This launches an interactive session where you can:
85
80
  - Execute commands
86
81
  - Navigate and explore files
87
82
 
83
+ **Options:**
84
+ - `--yolo` - Skip permission prompts (safe mode is on by default)
85
+ - `--model <model_name>` - Specify a model (e.g., `claude-sonnet-4-20250514`, `gpt-4o`)
86
+ - `--tools <tool_list>` - Filter available tools (comma-separated, or "" for none)
87
+ - `--no-mcp` - Disable MCP server integration
88
+ - `--verbose` - Enable verbose logging
89
+
88
90
  ### Python SDK (headless)
89
91
 
90
92
  Use Ripperdoc without the terminal UI via the new Python SDK. See [docs/SDK_USAGE.md](docs/SDK_USAGE.md) for examples of the one-shot `query` helper and the session-based `RipperdocClient`. 中文指南见 [docs/SDK_USAGE_CN.md](docs/SDK_USAGE_CN.md)。
@@ -100,38 +102,67 @@ See the [examples/](examples/) directory for complete SDK usage examples.
100
102
 
101
103
  ### Safe Mode Permissions
102
104
 
103
- Safe mode is the default. Use `--unsafe` to skip permission prompts. Choose `a`/`always` to allow a tool for the current session (not persisted across sessions).
105
+ Safe mode is enabled by default. When prompted:
106
+ - Type `y` or `yes` to allow a single operation
107
+ - Type `a` or `always` to allow all operations of that type for the session
108
+ - Type `n` or `no` to deny the operation
109
+
110
+ Use `--yolo` flag to skip all permission prompts:
111
+ ```bash
112
+ ripperdoc --yolo
113
+ ```
104
114
 
105
115
  ### Agent Skills
106
116
 
107
117
  Extend Ripperdoc with reusable Skill bundles:
108
118
 
109
- - Personal skills live in `~/.ripperdoc/skills/<skill-name>/SKILL.md`
110
- - Project skills live in `.ripperdoc/skills/<skill-name>/SKILL.md` and can be checked into git
111
- - Each `SKILL.md` starts with YAML frontmatter (`name`, `description`, optional `allowed-tools`, `model`, `max-thinking-tokens`, `disable-model-invocation`) followed by the instructions; add supporting files alongside it
112
- - Model and max-thinking-token hints from skills are applied automatically for the rest of the session after you load them with the `Skill` tool
113
- - Ripperdoc exposes skill names/descriptions in the system prompt and loads full content on demand via the `Skill` tool
119
+ - **Personal skills**: `~/.ripperdoc/skills/<skill-name>/SKILL.md`
120
+ - **Project skills**: `.ripperdoc/skills/<skill-name>/SKILL.md` (can be checked into git)
121
+ - Each `SKILL.md` starts with YAML frontmatter:
122
+ - `name` - Skill identifier
123
+ - `description` - What the skill does
124
+ - `allowed-tools` (optional) - Restrict which tools the skill can use
125
+ - `model` (optional) - Suggest a specific model for this skill
126
+ - `max-thinking-tokens` (optional) - Control thinking budget
127
+ - `disable-model-invocation` (optional) - Use skill without calling the model
128
+ - Add supporting files alongside `SKILL.md` as needed
129
+ - Skills are auto-discovered and loaded on demand via the `Skill` tool
130
+
131
+ **Built-in skills:** PDF manipulation (`pdf`), PowerPoint (`pptx`), Excel (`xlsx`)
114
132
 
115
133
  ## Examples
116
134
 
117
135
  ### Code Analysis
118
136
  ```
119
137
  > Can you explain what this function does?
138
+ > Find all references to the `parse_config` function
120
139
  ```
121
140
 
122
141
  ### File Operations
123
142
  ```
124
143
  > Read the main.py file and suggest improvements
144
+ > Create a new component called UserProfile.tsx
145
+ > Update all imports to use the new package structure
125
146
  ```
126
147
 
127
148
  ### Code Generation
128
149
  ```
129
150
  > Create a new Python script that implements a REST API client
151
+ > Generate unit tests for the auth module
152
+ > Add error handling to the database connection code
130
153
  ```
131
154
 
132
155
  ### Project Navigation
133
156
  ```
134
157
  > Show me all the Python files in the project
158
+ > Find where the user authentication logic is implemented
159
+ > List all API endpoints in the project
160
+ ```
161
+
162
+ ### MCP Integration
163
+ ```
164
+ > What MCP servers are available?
165
+ > Query the context7 documentation for React hooks
135
166
  ```
136
167
 
137
168
  ## Development
@@ -32,10 +32,11 @@ dependencies = [
32
32
  "aiofiles>=23.0.0",
33
33
  "prompt-toolkit>=3.0.0",
34
34
  "PyYAML>=6.0.0",
35
- "mcp[cli]>=1.22.0",
35
+ "mcp[cli]>=1.25.0", # Fixed stdio_client async generator cleanup issue
36
36
  "json_repair>=0.54.2",
37
37
  "tiktoken>=0.7.0",
38
38
  "google-genai>=0.3.0",
39
+ "charset-normalizer>=3.0.0",
39
40
  ]
40
41
 
41
42
  [project.optional-dependencies]
@@ -46,6 +47,9 @@ dev = [
46
47
  "black>=23.0.0",
47
48
  "ruff>=0.1.0",
48
49
  ]
50
+ anthropic = ["anthropic>=0.39.0"]
51
+ openai = ["openai>=1.0.0"]
52
+ gemini = ["google-genai>=0.3.0"]
49
53
 
50
54
  [project.scripts]
51
55
  ripperdoc = "ripperdoc.cli.cli:main"
@@ -68,7 +72,7 @@ warn_return_any = true
68
72
  warn_unused_configs = true
69
73
  disallow_untyped_defs = true
70
74
  files = ["ripperdoc"]
71
- exclude = ["^tests/"]
75
+ exclude = ["^tests/", "^setup\\.py$"]
72
76
 
73
77
  [tool.ruff]
74
78
  line-length = 100
@@ -1,3 +1,3 @@
1
1
  """Ripperdoc - AI-powered coding agent."""
2
2
 
3
- __version__ = "0.2.9"
3
+ __version__ = "0.3.0"