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.
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/PKG-INFO +55 -17
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/README.md +46 -15
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/pyproject.toml +6 -2
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/__init__.py +1 -1
- ripperdoc-0.3.0/ripperdoc/cli/cli.py +651 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/commands/__init__.py +6 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/commands/agents_cmd.py +128 -5
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/commands/clear_cmd.py +8 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/commands/doctor_cmd.py +29 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/commands/exit_cmd.py +1 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/commands/memory_cmd.py +2 -1
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/commands/models_cmd.py +63 -7
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/commands/resume_cmd.py +5 -0
- ripperdoc-0.3.0/ripperdoc/cli/commands/skills_cmd.py +103 -0
- ripperdoc-0.3.0/ripperdoc/cli/commands/stats_cmd.py +244 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/commands/status_cmd.py +10 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/commands/tasks_cmd.py +6 -3
- ripperdoc-0.3.0/ripperdoc/cli/commands/themes_cmd.py +139 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/ui/file_mention_completer.py +63 -13
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/ui/helpers.py +6 -3
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/ui/interrupt_handler.py +34 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/ui/panels.py +14 -8
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/ui/rich_ui.py +737 -47
- ripperdoc-0.3.0/ripperdoc/cli/ui/spinner.py +148 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/ui/thinking_spinner.py +1 -2
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/ui/tool_renderers.py +10 -9
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/ui/wizard.py +24 -19
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/core/agents.py +14 -3
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/core/config.py +238 -6
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/core/default_tools.py +91 -10
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/core/hooks/events.py +4 -0
- ripperdoc-0.3.0/ripperdoc/core/hooks/llm_callback.py +58 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/core/hooks/manager.py +6 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/core/permissions.py +160 -9
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/core/providers/openai.py +84 -28
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/core/query.py +489 -87
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/core/query_utils.py +17 -14
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/core/skills.py +1 -0
- ripperdoc-0.3.0/ripperdoc/core/theme.py +298 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/core/tool.py +15 -5
- ripperdoc-0.3.0/ripperdoc/protocol/__init__.py +14 -0
- ripperdoc-0.3.0/ripperdoc/protocol/models.py +300 -0
- ripperdoc-0.3.0/ripperdoc/protocol/stdio.py +1453 -0
- ripperdoc-0.3.0/ripperdoc/tools/background_shell.py +605 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/tools/bash_tool.py +117 -22
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/tools/file_edit_tool.py +228 -50
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/tools/file_read_tool.py +154 -3
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/tools/file_write_tool.py +53 -11
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/tools/grep_tool.py +98 -8
- ripperdoc-0.3.0/ripperdoc/tools/lsp_tool.py +609 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/tools/multi_edit_tool.py +26 -3
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/tools/skill_tool.py +52 -1
- ripperdoc-0.3.0/ripperdoc/tools/task_tool.py +854 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/conversation_compaction.py +1 -1
- ripperdoc-0.3.0/ripperdoc/utils/file_watch.py +350 -0
- ripperdoc-0.3.0/ripperdoc/utils/image_utils.py +125 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/log.py +30 -3
- ripperdoc-0.3.0/ripperdoc/utils/lsp.py +812 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/mcp.py +80 -18
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/message_formatting.py +7 -4
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/messages.py +198 -33
- ripperdoc-0.3.0/ripperdoc/utils/pending_messages.py +50 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/permissions/shell_command_validation.py +3 -3
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/permissions/tool_permission_utils.py +180 -15
- ripperdoc-0.3.0/ripperdoc/utils/platform.py +198 -0
- ripperdoc-0.3.0/ripperdoc/utils/session_heatmap.py +242 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/session_history.py +2 -2
- ripperdoc-0.3.0/ripperdoc/utils/session_stats.py +294 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/shell_utils.py +8 -5
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/todo.py +0 -6
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc.egg-info/PKG-INFO +55 -17
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc.egg-info/SOURCES.txt +28 -4
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc.egg-info/requires.txt +11 -1
- ripperdoc-0.3.0/tests/test_background_notifications.py +57 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/tests/test_background_shell_shutdown.py +7 -7
- ripperdoc-0.3.0/tests/test_background_shell_status.py +33 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/tests/test_cli_commands.py +10 -3
- ripperdoc-0.3.0/tests/test_cli_stdin.py +43 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/tests/test_config.py +0 -1
- ripperdoc-0.3.0/tests/test_file_edit_tool.py +705 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/tests/test_file_mention_completer.py +3 -3
- ripperdoc-0.3.0/tests/test_git_utils.py +527 -0
- ripperdoc-0.3.0/tests/test_hooks.py +2292 -0
- ripperdoc-0.3.0/tests/test_interrupt_handler.py +505 -0
- ripperdoc-0.3.0/tests/test_pending_messages.py +110 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/tests/test_permissions.py +101 -1
- ripperdoc-0.3.0/tests/test_platform.py +362 -0
- ripperdoc-0.3.0/tests/test_rich_ui_suggestions.py +20 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/tests/test_shell_permissions.py +295 -8
- ripperdoc-0.3.0/tests/test_shell_utils.py +423 -0
- ripperdoc-0.3.0/tests/test_utils.py +1097 -0
- ripperdoc-0.2.9/ripperdoc/cli/cli.py +0 -323
- ripperdoc-0.2.9/ripperdoc/cli/ui/spinner.py +0 -73
- ripperdoc-0.2.9/ripperdoc/sdk/__init__.py +0 -9
- ripperdoc-0.2.9/ripperdoc/sdk/client.py +0 -333
- ripperdoc-0.2.9/ripperdoc/tools/background_shell.py +0 -390
- ripperdoc-0.2.9/ripperdoc/tools/task_tool.py +0 -380
- ripperdoc-0.2.9/ripperdoc/utils/file_watch.py +0 -141
- ripperdoc-0.2.9/tests/test_sdk.py +0 -46
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/LICENSE +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/__main__.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/__init__.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/commands/base.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/commands/compact_cmd.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/commands/config_cmd.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/commands/context_cmd.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/commands/cost_cmd.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/commands/help_cmd.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/commands/hooks_cmd.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/commands/mcp_cmd.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/commands/permissions_cmd.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/commands/todos_cmd.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/commands/tools_cmd.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/ui/__init__.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/ui/context_display.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/ui/message_display.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/cli/ui/provider_options.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/core/__init__.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/core/commands.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/core/custom_commands.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/core/hooks/__init__.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/core/hooks/config.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/core/hooks/executor.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/core/hooks/integration.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/core/providers/__init__.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/core/providers/anthropic.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/core/providers/base.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/core/providers/gemini.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/core/system_prompt.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/tools/__init__.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/tools/ask_user_question_tool.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/tools/bash_output_tool.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/tools/dynamic_mcp_tool.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/tools/enter_plan_mode_tool.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/tools/exit_plan_mode_tool.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/tools/glob_tool.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/tools/kill_bash_tool.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/tools/ls_tool.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/tools/mcp_tools.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/tools/notebook_edit_tool.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/tools/todo_tool.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/tools/tool_search_tool.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/__init__.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/bash_constants.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/bash_output_utils.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/coerce.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/context_length_errors.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/exit_code_handlers.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/git_utils.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/json_utils.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/memory.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/message_compaction.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/output_utils.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/path_ignore.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/path_utils.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/permissions/__init__.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/permissions/path_validation_utils.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/prompt.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/safe_get_cwd.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/sandbox_utils.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/session_usage.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/shell_token_utils.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc/utils/token_estimation.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc.egg-info/dependency_links.txt +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc.egg-info/entry_points.txt +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/ripperdoc.egg-info/top_level.txt +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/setup.cfg +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/setup.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/tests/test_compact.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/tests/test_context_length_errors.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/tests/test_context_limits.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/tests/test_custom_commands.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/tests/test_hooks_cmd.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/tests/test_mcp_config.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/tests/test_messages.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/tests/test_output_utils.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/tests/test_path_ignore.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/tests/test_query_abort.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/tests/test_skills.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/tests/test_todo.py +0 -0
- {ripperdoc-0.2.9 → ripperdoc-0.3.0}/tests/test_tool_search.py +0 -0
- {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.
|
|
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.
|
|
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
|
|
97
|
-
cd
|
|
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
|
|
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
|
|
147
|
-
- Project skills
|
|
148
|
-
- Each `SKILL.md` starts with YAML frontmatter
|
|
149
|
-
-
|
|
150
|
-
-
|
|
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
|
|
60
|
-
cd
|
|
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
|
|
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
|
|
110
|
-
- Project skills
|
|
111
|
-
- Each `SKILL.md` starts with YAML frontmatter
|
|
112
|
-
-
|
|
113
|
-
-
|
|
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.
|
|
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
|