ripperdoc 0.2.9__py3-none-any.whl → 0.3.0__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 (76) hide show
  1. ripperdoc/__init__.py +1 -1
  2. ripperdoc/cli/cli.py +379 -51
  3. ripperdoc/cli/commands/__init__.py +6 -0
  4. ripperdoc/cli/commands/agents_cmd.py +128 -5
  5. ripperdoc/cli/commands/clear_cmd.py +8 -0
  6. ripperdoc/cli/commands/doctor_cmd.py +29 -0
  7. ripperdoc/cli/commands/exit_cmd.py +1 -0
  8. ripperdoc/cli/commands/memory_cmd.py +2 -1
  9. ripperdoc/cli/commands/models_cmd.py +63 -7
  10. ripperdoc/cli/commands/resume_cmd.py +5 -0
  11. ripperdoc/cli/commands/skills_cmd.py +103 -0
  12. ripperdoc/cli/commands/stats_cmd.py +244 -0
  13. ripperdoc/cli/commands/status_cmd.py +10 -0
  14. ripperdoc/cli/commands/tasks_cmd.py +6 -3
  15. ripperdoc/cli/commands/themes_cmd.py +139 -0
  16. ripperdoc/cli/ui/file_mention_completer.py +63 -13
  17. ripperdoc/cli/ui/helpers.py +6 -3
  18. ripperdoc/cli/ui/interrupt_handler.py +34 -0
  19. ripperdoc/cli/ui/panels.py +14 -8
  20. ripperdoc/cli/ui/rich_ui.py +737 -47
  21. ripperdoc/cli/ui/spinner.py +93 -18
  22. ripperdoc/cli/ui/thinking_spinner.py +1 -2
  23. ripperdoc/cli/ui/tool_renderers.py +10 -9
  24. ripperdoc/cli/ui/wizard.py +24 -19
  25. ripperdoc/core/agents.py +14 -3
  26. ripperdoc/core/config.py +238 -6
  27. ripperdoc/core/default_tools.py +91 -10
  28. ripperdoc/core/hooks/events.py +4 -0
  29. ripperdoc/core/hooks/llm_callback.py +58 -0
  30. ripperdoc/core/hooks/manager.py +6 -0
  31. ripperdoc/core/permissions.py +160 -9
  32. ripperdoc/core/providers/openai.py +84 -28
  33. ripperdoc/core/query.py +489 -87
  34. ripperdoc/core/query_utils.py +17 -14
  35. ripperdoc/core/skills.py +1 -0
  36. ripperdoc/core/theme.py +298 -0
  37. ripperdoc/core/tool.py +15 -5
  38. ripperdoc/protocol/__init__.py +14 -0
  39. ripperdoc/protocol/models.py +300 -0
  40. ripperdoc/protocol/stdio.py +1453 -0
  41. ripperdoc/tools/background_shell.py +354 -139
  42. ripperdoc/tools/bash_tool.py +117 -22
  43. ripperdoc/tools/file_edit_tool.py +228 -50
  44. ripperdoc/tools/file_read_tool.py +154 -3
  45. ripperdoc/tools/file_write_tool.py +53 -11
  46. ripperdoc/tools/grep_tool.py +98 -8
  47. ripperdoc/tools/lsp_tool.py +609 -0
  48. ripperdoc/tools/multi_edit_tool.py +26 -3
  49. ripperdoc/tools/skill_tool.py +52 -1
  50. ripperdoc/tools/task_tool.py +539 -65
  51. ripperdoc/utils/conversation_compaction.py +1 -1
  52. ripperdoc/utils/file_watch.py +216 -7
  53. ripperdoc/utils/image_utils.py +125 -0
  54. ripperdoc/utils/log.py +30 -3
  55. ripperdoc/utils/lsp.py +812 -0
  56. ripperdoc/utils/mcp.py +80 -18
  57. ripperdoc/utils/message_formatting.py +7 -4
  58. ripperdoc/utils/messages.py +198 -33
  59. ripperdoc/utils/pending_messages.py +50 -0
  60. ripperdoc/utils/permissions/shell_command_validation.py +3 -3
  61. ripperdoc/utils/permissions/tool_permission_utils.py +180 -15
  62. ripperdoc/utils/platform.py +198 -0
  63. ripperdoc/utils/session_heatmap.py +242 -0
  64. ripperdoc/utils/session_history.py +2 -2
  65. ripperdoc/utils/session_stats.py +294 -0
  66. ripperdoc/utils/shell_utils.py +8 -5
  67. ripperdoc/utils/todo.py +0 -6
  68. {ripperdoc-0.2.9.dist-info → ripperdoc-0.3.0.dist-info}/METADATA +55 -17
  69. ripperdoc-0.3.0.dist-info/RECORD +136 -0
  70. {ripperdoc-0.2.9.dist-info → ripperdoc-0.3.0.dist-info}/WHEEL +1 -1
  71. ripperdoc/sdk/__init__.py +0 -9
  72. ripperdoc/sdk/client.py +0 -333
  73. ripperdoc-0.2.9.dist-info/RECORD +0 -123
  74. {ripperdoc-0.2.9.dist-info → ripperdoc-0.3.0.dist-info}/entry_points.txt +0 -0
  75. {ripperdoc-0.2.9.dist-info → ripperdoc-0.3.0.dist-info}/licenses/LICENSE +0 -0
  76. {ripperdoc-0.2.9.dist-info → ripperdoc-0.3.0.dist-info}/top_level.txt +0 -0
@@ -13,23 +13,27 @@ from rich import box
13
13
 
14
14
  from ripperdoc import __version__
15
15
  from ripperdoc.cli.ui.helpers import get_profile_for_pointer
16
+ from ripperdoc.core.theme import theme_color
16
17
 
17
18
 
18
19
  def create_welcome_panel() -> Panel:
19
20
  """Create a welcome panel for the CLI startup."""
20
- welcome_content = """
21
- [bold cyan]Welcome to Ripperdoc![/bold cyan]
21
+ primary = theme_color("primary")
22
+ muted = theme_color("text_secondary")
23
+
24
+ welcome_content = f"""
25
+ [bold {primary}]Welcome to Ripperdoc![/bold {primary}]
22
26
 
23
27
  Ripperdoc is an AI-powered coding assistant that helps with software development tasks.
24
28
  You can read files, edit code, run commands, and help with various programming tasks.
25
29
 
26
- [dim]Type your questions below. Press Ctrl+C to exit.[/dim]
30
+ [{muted}]Type your questions below. Press Ctrl+C twice to exit.[/{muted}]
27
31
  """
28
32
 
29
33
  return Panel(
30
34
  welcome_content,
31
35
  title=f"Ripperdoc v{__version__}",
32
- border_style="cyan",
36
+ border_style=theme_color("border"),
33
37
  box=box.ROUNDED,
34
38
  padding=(1, 2),
35
39
  )
@@ -41,11 +45,11 @@ def create_status_bar() -> Text:
41
45
  model_name = profile.model if profile else "Not configured"
42
46
 
43
47
  status_text = Text()
44
- status_text.append("Ripperdoc", style="bold cyan")
48
+ status_text.append("Ripperdoc", style=f"bold {theme_color('primary')}")
45
49
  status_text.append(" • ")
46
- status_text.append(model_name, style="dim")
50
+ status_text.append(model_name, style=theme_color("text_secondary"))
47
51
  status_text.append(" • ")
48
- status_text.append("Ready", style="green")
52
+ status_text.append("Ready", style=theme_color("secondary"))
49
53
 
50
54
  return status_text
51
55
 
@@ -55,8 +59,10 @@ def print_shortcuts(console: Console) -> None:
55
59
  pairs: List[Tuple[str, str]] = [
56
60
  ("? for shortcuts", "! for bash mode"),
57
61
  ("/ for commands", "@ for file mention"),
62
+ ("Alt+Enter for newline", "Enter to submit"),
58
63
  ]
59
- console.print("[dim]Shortcuts[/dim]")
64
+ muted = theme_color("text_secondary")
65
+ console.print(f"[{muted}]Shortcuts[/{muted}]")
60
66
  for left, right in pairs:
61
67
  left_text = f" {left}".ljust(32)
62
68
  right_text = f"{right}" if right else ""