redgit 1.3.1__tar.gz → 1.3.2__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 (82) hide show
  1. {redgit-1.3.1/redgit.egg-info → redgit-1.3.2}/PKG-INFO +2 -2
  2. {redgit-1.3.1 → redgit-1.3.2}/README.md +1 -1
  3. {redgit-1.3.1 → redgit-1.3.2}/pyproject.toml +2 -1
  4. redgit-1.3.2/redgit/__init__.py +1 -0
  5. {redgit-1.3.1 → redgit-1.3.2}/redgit/cli.py +9 -7
  6. redgit-1.3.2/redgit/commands/backup.py +168 -0
  7. {redgit-1.3.1 → redgit-1.3.2}/redgit/commands/ci.py +2 -2
  8. {redgit-1.3.1 → redgit-1.3.2}/redgit/commands/config.py +6 -6
  9. {redgit-1.3.1 → redgit-1.3.2}/redgit/commands/daily.py +4 -4
  10. {redgit-1.3.1 → redgit-1.3.2}/redgit/commands/init.py +2 -2
  11. {redgit-1.3.1 → redgit-1.3.2}/redgit/commands/integration.py +4 -4
  12. {redgit-1.3.1 → redgit-1.3.2}/redgit/commands/notify.py +1 -1
  13. {redgit-1.3.1 → redgit-1.3.2}/redgit/commands/plugin.py +2 -2
  14. {redgit-1.3.1 → redgit-1.3.2}/redgit/commands/poker.py +1 -1
  15. {redgit-1.3.1 → redgit-1.3.2}/redgit/commands/propose.py +1006 -471
  16. {redgit-1.3.1 → redgit-1.3.2}/redgit/commands/push.py +465 -28
  17. {redgit-1.3.1 → redgit-1.3.2}/redgit/commands/quality.py +21 -13
  18. {redgit-1.3.1 → redgit-1.3.2}/redgit/commands/scout.py +385 -2
  19. {redgit-1.3.1 → redgit-1.3.2}/redgit/commands/tap.py +7 -7
  20. {redgit-1.3.1 → redgit-1.3.2}/redgit/commands/tunnel.py +1 -1
  21. {redgit-1.3.1 → redgit-1.3.2}/redgit/commands/webhook.py +4 -4
  22. redgit-1.3.2/redgit/core/common/__init__.py +52 -0
  23. redgit-1.3.2/redgit/core/common/backup.py +330 -0
  24. {redgit-1.3.1/redgit/core → redgit-1.3.2/redgit/core/common}/gitops.py +121 -17
  25. {redgit-1.3.1/redgit/core → redgit-1.3.2/redgit/core/common}/llm.py +125 -4
  26. {redgit-1.3.1/redgit/core → redgit-1.3.2/redgit/core/common}/prompt.py +67 -7
  27. redgit-1.3.2/redgit/core/daily/__init__.py +9 -0
  28. {redgit-1.3.1 → redgit-1.3.2}/redgit/core/poker/ai_voter.py +2 -2
  29. redgit-1.3.2/redgit/core/propose/__init__.py +61 -0
  30. redgit-1.3.2/redgit/core/propose/analysis.py +500 -0
  31. redgit-1.3.2/redgit/core/propose/commit.py +169 -0
  32. redgit-1.3.2/redgit/core/propose/display.py +507 -0
  33. redgit-1.3.2/redgit/core/quality/__init__.py +29 -0
  34. {redgit-1.3.1/redgit/core → redgit-1.3.2/redgit/core/quality}/semgrep.py +31 -6
  35. {redgit-1.3.1 → redgit-1.3.2}/redgit/core/scout/__init__.py +289 -9
  36. redgit-1.3.2/redgit/core/tap/__init__.py +25 -0
  37. redgit-1.3.1/redgit/core/tap.py → redgit-1.3.2/redgit/core/tap/manager.py +1 -1
  38. redgit-1.3.2/redgit/core/webhook/__init__.py +16 -0
  39. {redgit-1.3.1 → redgit-1.3.2}/redgit/integrations/base.py +7 -5
  40. {redgit-1.3.1 → redgit-1.3.2}/redgit/integrations/registry.py +2 -2
  41. {redgit-1.3.1 → redgit-1.3.2}/redgit/plugins/registry.py +1 -1
  42. redgit-1.3.2/redgit/prompts/commit/multi_task.md +77 -0
  43. {redgit-1.3.1 → redgit-1.3.2}/redgit/utils/formatting.py +1 -1
  44. {redgit-1.3.1 → redgit-1.3.2}/redgit/utils/notifications.py +1 -1
  45. {redgit-1.3.1 → redgit-1.3.2/redgit.egg-info}/PKG-INFO +2 -2
  46. {redgit-1.3.1 → redgit-1.3.2}/redgit.egg-info/SOURCES.txt +23 -11
  47. redgit-1.3.1/redgit/__init__.py +0 -1
  48. {redgit-1.3.1 → redgit-1.3.2}/LICENSE +0 -0
  49. {redgit-1.3.1 → redgit-1.3.2}/redgit/commands/__init__.py +0 -0
  50. {redgit-1.3.1/redgit/core → redgit-1.3.2/redgit/core/common}/config.py +0 -0
  51. {redgit-1.3.1/redgit/core → redgit-1.3.2/redgit/core/common}/constants.py +0 -0
  52. {redgit-1.3.1/redgit/core → redgit-1.3.2/redgit/core/common}/llm_providers.json +0 -0
  53. /redgit-1.3.1/redgit/core/daily_state.py → /redgit-1.3.2/redgit/core/daily/state.py +0 -0
  54. {redgit-1.3.1 → redgit-1.3.2}/redgit/core/poker/__init__.py +0 -0
  55. {redgit-1.3.1 → redgit-1.3.2}/redgit/core/poker/client.py +0 -0
  56. {redgit-1.3.1 → redgit-1.3.2}/redgit/core/poker/server.py +0 -0
  57. {redgit-1.3.1 → redgit-1.3.2}/redgit/core/poker/session.py +0 -0
  58. {redgit-1.3.1 → redgit-1.3.2}/redgit/core/poker/ui.py +0 -0
  59. {redgit-1.3.1 → redgit-1.3.2}/redgit/core/scout/team.py +0 -0
  60. {redgit-1.3.1/redgit/core → redgit-1.3.2/redgit/core/webhook}/actions.py +0 -0
  61. /redgit-1.3.1/redgit/core/webhook.py → /redgit-1.3.2/redgit/core/webhook/server.py +0 -0
  62. {redgit-1.3.1 → redgit-1.3.2}/redgit/integrations/__init__.py +0 -0
  63. {redgit-1.3.1 → redgit-1.3.2}/redgit/plugins/__init__.py +0 -0
  64. {redgit-1.3.1 → redgit-1.3.2}/redgit/plugins/base.py +0 -0
  65. {redgit-1.3.1 → redgit-1.3.2}/redgit/prompts/__init__.py +0 -0
  66. {redgit-1.3.1 → redgit-1.3.2}/redgit/prompts/commit/default.md +0 -0
  67. {redgit-1.3.1 → redgit-1.3.2}/redgit/prompts/commit/minimal.md +0 -0
  68. {redgit-1.3.1 → redgit-1.3.2}/redgit/prompts/commit/task_filtered.md +0 -0
  69. {redgit-1.3.1 → redgit-1.3.2}/redgit/prompts/daily/default.md +0 -0
  70. {redgit-1.3.1 → redgit-1.3.2}/redgit/prompts/quality/default.md +0 -0
  71. {redgit-1.3.1 → redgit-1.3.2}/redgit/splash.py +0 -0
  72. {redgit-1.3.1 → redgit-1.3.2}/redgit/utils/__init__.py +0 -0
  73. {redgit-1.3.1 → redgit-1.3.2}/redgit/utils/console.py +0 -0
  74. {redgit-1.3.1 → redgit-1.3.2}/redgit/utils/dependency.py +0 -0
  75. {redgit-1.3.1 → redgit-1.3.2}/redgit/utils/editor.py +0 -0
  76. {redgit-1.3.1 → redgit-1.3.2}/redgit/utils/logging.py +0 -0
  77. {redgit-1.3.1 → redgit-1.3.2}/redgit/utils/security.py +0 -0
  78. {redgit-1.3.1 → redgit-1.3.2}/redgit.egg-info/dependency_links.txt +0 -0
  79. {redgit-1.3.1 → redgit-1.3.2}/redgit.egg-info/entry_points.txt +0 -0
  80. {redgit-1.3.1 → redgit-1.3.2}/redgit.egg-info/requires.txt +0 -0
  81. {redgit-1.3.1 → redgit-1.3.2}/redgit.egg-info/top_level.txt +0 -0
  82. {redgit-1.3.1 → redgit-1.3.2}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: redgit
3
- Version: 1.3.1
3
+ Version: 1.3.2
4
4
  Summary: AI-powered Git workflow assistant with task management integration
5
5
  Author-email: Your Name <your.email@example.com>
6
6
  License-Expression: MIT
@@ -40,7 +40,7 @@ Requires-Dist: websockets>=12.0; extra == "poker"
40
40
  Dynamic: license-file
41
41
 
42
42
  <p align="center">
43
- <img src="https://raw.githubusercontent.com/ertiz82/redgit/main/assets/logo.svg?v=1.3.0" alt="RedGit Logo" width="400"/>
43
+ <img src="https://raw.githubusercontent.com/ertiz82/redgit/main/assets/logo.svg?v=1.3.2" alt="RedGit Logo" width="400"/>
44
44
  </p>
45
45
 
46
46
  <p align="center">
@@ -1,5 +1,5 @@
1
1
  <p align="center">
2
- <img src="https://raw.githubusercontent.com/ertiz82/redgit/main/assets/logo.svg?v=1.3.0" alt="RedGit Logo" width="400"/>
2
+ <img src="https://raw.githubusercontent.com/ertiz82/redgit/main/assets/logo.svg?v=1.3.2" alt="RedGit Logo" width="400"/>
3
3
  </p>
4
4
 
5
5
  <p align="center">
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "redgit"
7
- version = "1.3.1"
7
+ version = "1.3.2"
8
8
  description = "AI-powered Git workflow assistant with task management integration"
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -64,6 +64,7 @@ include = ["redgit*"]
64
64
  [tool.setuptools.package-data]
65
65
  redgit = [
66
66
  "core/*.json",
67
+ "core/common/*.json",
67
68
  "integrations/*.json",
68
69
  "prompts/**/*.md"
69
70
  ]
@@ -0,0 +1 @@
1
+ __version__ = "1.3.2"
@@ -21,6 +21,7 @@ from redgit.commands.scout import scout_app
21
21
  from redgit.commands.webhook import webhook_app
22
22
  from redgit.commands.tunnel import tunnel_app
23
23
  from redgit.commands.poker import poker_app
24
+ from redgit.commands.backup import app as backup_app
24
25
 
25
26
 
26
27
  def version_callback(value: bool):
@@ -67,12 +68,13 @@ app.add_typer(scout_app, name="scout")
67
68
  app.add_typer(webhook_app, name="webhook")
68
69
  app.add_typer(tunnel_app, name="tunnel")
69
70
  app.add_typer(poker_app, name="poker")
71
+ app.add_typer(backup_app, name="backup")
70
72
 
71
73
 
72
74
  def _load_plugin_commands():
73
75
  """Dynamically load commands from enabled plugins."""
74
76
  try:
75
- from redgit.core.config import ConfigManager
77
+ from redgit.core.common.config import ConfigManager
76
78
  from redgit.plugins.registry import get_enabled_plugin_commands, get_all_plugin_shortcuts
77
79
 
78
80
  config = ConfigManager().load()
@@ -99,13 +101,13 @@ def _load_plugin_commands():
99
101
 
100
102
 
101
103
  def _load_integration_commands():
102
- """Dynamically load commands from active integrations."""
104
+ """Dynamically load commands from installed integrations."""
103
105
  try:
104
- from redgit.core.config import ConfigManager
105
- from redgit.integrations.registry import get_active_integration_commands
106
+ from redgit.integrations.registry import get_all_integration_commands
106
107
 
107
- config = ConfigManager().load()
108
- commands = get_active_integration_commands(config)
108
+ # Load commands for ALL installed integrations (not just active ones)
109
+ # This allows `rg jira`, `rg gitlab` etc. to work regardless of activation
110
+ commands = get_all_integration_commands()
109
111
 
110
112
  for name, cmd_app in commands.items():
111
113
  app.add_typer(cmd_app, name=name)
@@ -117,7 +119,7 @@ def _load_integration_commands():
117
119
  def _setup_logging():
118
120
  """Set up logging based on config."""
119
121
  try:
120
- from redgit.core.config import ConfigManager
122
+ from redgit.core.common.config import ConfigManager
121
123
 
122
124
  config_manager = ConfigManager()
123
125
  logging_config = config_manager.get_logging_config()
@@ -0,0 +1,168 @@
1
+ """
2
+ Backup command for RedGit.
3
+
4
+ Provides CLI interface for managing working tree backups.
5
+ """
6
+
7
+ import typer
8
+ from rich.console import Console
9
+ from rich.table import Table
10
+
11
+ from ..core.common.backup import BackupManager
12
+ from ..core.common.gitops import GitOps
13
+
14
+ app = typer.Typer(help="Manage working tree backups")
15
+ console = Console()
16
+
17
+
18
+ @app.command("list")
19
+ def list_cmd():
20
+ """List all backups."""
21
+ try:
22
+ gitops = GitOps()
23
+ except Exception:
24
+ gitops = None
25
+
26
+ backup_manager = BackupManager(gitops)
27
+ backups = backup_manager.list_backups()
28
+
29
+ if not backups:
30
+ console.print("[yellow]No backups found.[/yellow]")
31
+ return
32
+
33
+ table = Table(title="RG Backups")
34
+ table.add_column("ID", style="cyan")
35
+ table.add_column("Date", style="dim")
36
+ table.add_column("Branch")
37
+ table.add_column("Files")
38
+ table.add_column("Status", style="bold")
39
+
40
+ for backup in backups:
41
+ status = backup.get("status", "unknown")
42
+ status_color = {
43
+ "created": "yellow",
44
+ "completed": "green",
45
+ "failed": "red",
46
+ "restored": "blue"
47
+ }.get(status, "white")
48
+
49
+ table.add_row(
50
+ backup.get("id", "?"),
51
+ backup.get("created_at", "")[:19],
52
+ backup.get("base_branch", "?"),
53
+ str(len(backup.get("files", []))),
54
+ f"[{status_color}]{status}[/{status_color}]"
55
+ )
56
+
57
+ console.print(table)
58
+
59
+
60
+ @app.command("restore")
61
+ def restore_cmd(
62
+ backup_id: str = typer.Argument("latest", help="Backup ID or 'latest'")
63
+ ):
64
+ """Restore working tree from backup."""
65
+ try:
66
+ gitops = GitOps()
67
+ except Exception:
68
+ gitops = None
69
+
70
+ backup_manager = BackupManager(gitops)
71
+
72
+ # Check if backup exists
73
+ backup = backup_manager.get_backup(backup_id)
74
+ if not backup:
75
+ console.print(f"[red]Backup not found: {backup_id}[/red]")
76
+ raise typer.Exit(1)
77
+
78
+ console.print(f"[yellow]Restoring backup: {backup.get('id', backup_id)}...[/yellow]")
79
+ console.print(f" Branch: {backup.get('base_branch', '?')}")
80
+ console.print(f" Files: {len(backup.get('files', []))}")
81
+
82
+ try:
83
+ manifest = backup_manager.restore_backup(backup_id)
84
+ console.print("\n[green]✓ Backup restored successfully![/green]")
85
+ console.print("\n[dim]Run 'git status' to see restored files.[/dim]")
86
+ except Exception as e:
87
+ console.print(f"\n[red]Error restoring backup: {e}[/red]")
88
+ raise typer.Exit(1)
89
+
90
+
91
+ @app.command("show")
92
+ def show_cmd(
93
+ backup_id: str = typer.Argument("latest", help="Backup ID or 'latest'")
94
+ ):
95
+ """Show backup details."""
96
+ try:
97
+ gitops = GitOps()
98
+ except Exception:
99
+ gitops = None
100
+
101
+ backup_manager = BackupManager(gitops)
102
+ manifest = backup_manager.get_backup(backup_id)
103
+
104
+ if not manifest:
105
+ console.print(f"[red]Backup not found: {backup_id}[/red]")
106
+ raise typer.Exit(1)
107
+
108
+ status = manifest.get("status", "unknown")
109
+ status_color = {
110
+ "created": "yellow",
111
+ "completed": "green",
112
+ "failed": "red",
113
+ "restored": "blue"
114
+ }.get(status, "white")
115
+
116
+ console.print(f"\n[bold cyan]Backup: {manifest.get('id', '?')}[/bold cyan]\n")
117
+ console.print(f" Created: {manifest.get('created_at', '?')}")
118
+ console.print(f" Command: {manifest.get('command', '?')}")
119
+ console.print(f" Branch: {manifest.get('base_branch', '?')}")
120
+ console.print(f" Commit: {manifest.get('head_commit', '?')}")
121
+ console.print(f" Status: [{status_color}]{status}[/{status_color}]")
122
+
123
+ if manifest.get("error"):
124
+ console.print(f"\n [red]Error: {manifest['error']}[/red]")
125
+
126
+ files = manifest.get("files", [])
127
+ console.print(f"\n Files ({len(files)}):")
128
+ for f in files[:15]:
129
+ staged = "[S]" if f.get("staged") else " "
130
+ status_char = f.get("status", "M")
131
+ # Support both "file" and "path" keys
132
+ file_path = f.get("file") or f.get("path", "?")
133
+ console.print(f" {staged} {status_char} {file_path}")
134
+
135
+ if len(files) > 15:
136
+ console.print(f" ... and {len(files) - 15} more")
137
+
138
+
139
+ @app.command("cleanup")
140
+ def cleanup_cmd(
141
+ keep: int = typer.Option(5, "--keep", "-k", help="Number of backups to keep")
142
+ ):
143
+ """Remove old backups, keep N most recent."""
144
+ try:
145
+ gitops = GitOps()
146
+ except Exception:
147
+ gitops = None
148
+
149
+ backup_manager = BackupManager(gitops)
150
+
151
+ before = len(backup_manager.list_backups())
152
+ backup_manager.cleanup_old_backups(keep=keep)
153
+ after = len(backup_manager.list_backups())
154
+
155
+ removed = before - after
156
+ if removed > 0:
157
+ console.print(f"[green]✓ Removed {removed} old backup(s). Keeping {after}.[/green]")
158
+ else:
159
+ console.print(f"[dim]No backups to remove. Total: {after}[/dim]")
160
+
161
+
162
+ # Default command (when just 'rg backup' is called)
163
+ @app.callback(invoke_without_command=True)
164
+ def main(ctx: typer.Context):
165
+ """Manage working tree backups."""
166
+ if ctx.invoked_subcommand is None:
167
+ # Default to list
168
+ list_cmd()
@@ -15,8 +15,8 @@ from typing import Optional, List
15
15
  from rich.console import Console
16
16
  from rich.table import Table
17
17
 
18
- from ..core.config import ConfigManager
19
- from ..core.gitops import GitOps
18
+ from ..core.common.config import ConfigManager
19
+ from ..core.common.gitops import GitOps
20
20
  from ..integrations.registry import get_cicd, get_integrations_by_type, IntegrationType
21
21
 
22
22
  console = Console()
@@ -18,7 +18,7 @@ from rich.tree import Tree
18
18
  import yaml
19
19
  import os
20
20
 
21
- from ..core.config import ConfigManager, CONFIG_PATH, DEFAULT_NOTIFICATIONS, DEFAULT_QUALITY
21
+ from ..core.common.config import ConfigManager, CONFIG_PATH, DEFAULT_NOTIFICATIONS, DEFAULT_QUALITY
22
22
 
23
23
  console = Console()
24
24
  config_app = typer.Typer(help="View and modify configuration")
@@ -300,7 +300,7 @@ def reset_cmd(
300
300
  console.print(f"[green]Reset '{section}' to defaults[/green]")
301
301
 
302
302
  elif section == "workflow":
303
- from ..core.config import DEFAULT_WORKFLOW
303
+ from ..core.common.config import DEFAULT_WORKFLOW
304
304
  if not force and not Confirm.ask(f"Reset '{section}' to defaults?", default=True):
305
305
  return
306
306
 
@@ -580,8 +580,8 @@ def export_prompt_cmd(
580
580
  rg config export-prompt quality # Export quality analysis prompt
581
581
  """
582
582
  from pathlib import Path
583
- from ..core.prompt import BUILTIN_PROMPTS_DIR
584
- from ..core.config import RETGIT_DIR
583
+ from ..core.common.prompt import BUILTIN_PROMPTS_DIR
584
+ from ..core.common.config import RETGIT_DIR
585
585
  from ..plugins.registry import get_plugin_by_name, get_builtin_plugins
586
586
  from ..integrations.registry import get_all_integrations
587
587
 
@@ -750,8 +750,8 @@ def export_prompt_cmd(
750
750
  def list_prompts_cmd():
751
751
  """List available prompt templates."""
752
752
  from pathlib import Path
753
- from ..core.prompt import BUILTIN_PROMPTS_DIR
754
- from ..core.config import RETGIT_DIR
753
+ from ..core.common.prompt import BUILTIN_PROMPTS_DIR
754
+ from ..core.common.config import RETGIT_DIR
755
755
  from ..plugins.registry import get_builtin_plugins
756
756
  from ..integrations.registry import get_all_integrations
757
757
 
@@ -12,10 +12,10 @@ from rich.console import Console
12
12
  from rich.panel import Panel
13
13
  from rich.table import Table
14
14
 
15
- from ..core.config import ConfigManager, RETGIT_DIR
16
- from ..core.daily_state import DailyStateManager
17
- from ..core.gitops import GitOps, NotAGitRepoError
18
- from ..core.llm import LLMClient
15
+ from ..core.common.config import ConfigManager, RETGIT_DIR
16
+ from ..core.daily.state import DailyStateManager
17
+ from ..core.common.gitops import GitOps, NotAGitRepoError
18
+ from ..core.common.llm import LLMClient
19
19
 
20
20
  console = Console()
21
21
 
@@ -3,8 +3,8 @@ import subprocess
3
3
  import typer
4
4
  from pathlib import Path
5
5
 
6
- from ..core.config import ConfigManager, RETGIT_DIR
7
- from ..core.llm import load_providers, check_provider_available
6
+ from ..core.common.config import ConfigManager, RETGIT_DIR
7
+ from ..core.common.llm import load_providers, check_provider_available
8
8
  from ..plugins.registry import detect_project_type, get_builtin_plugins
9
9
 
10
10
  # Package source directories
@@ -2,7 +2,7 @@ import json
2
2
  import typer
3
3
  from pathlib import Path
4
4
 
5
- from ..core.config import ConfigManager
5
+ from ..core.common.config import ConfigManager
6
6
  from ..integrations.registry import (
7
7
  get_builtin_integrations,
8
8
  get_all_integrations,
@@ -46,7 +46,7 @@ def _get_installed_integrations() -> set:
46
46
  - Global directory: ~/.redgit/integrations/
47
47
  - Project directory: .redgit/integrations/
48
48
  """
49
- from ..core.config import GLOBAL_INTEGRATIONS_DIR
49
+ from ..core.common.config import GLOBAL_INTEGRATIONS_DIR
50
50
 
51
51
  installed = set()
52
52
 
@@ -139,7 +139,7 @@ def list_cmd(
139
139
 
140
140
  # Show available from taps
141
141
  if all_integrations:
142
- from ..core.tap import TapManager
142
+ from ..core.tap.manager import TapManager
143
143
 
144
144
  tap_mgr = TapManager()
145
145
  tap_integrations = tap_mgr.get_all_integrations(include_installed=True)
@@ -466,7 +466,7 @@ def update_cmd(
466
466
  force: bool = typer.Option(False, "--force", "-f", help="Force reinstall even if up to date")
467
467
  ):
468
468
  """Update installed integrations from taps"""
469
- from ..core.tap import TapManager, find_item_in_taps
469
+ from ..core.tap.manager import TapManager, find_item_in_taps
470
470
  from .tap import install_from_tap
471
471
 
472
472
  tap_mgr = TapManager()
@@ -13,7 +13,7 @@ Usage:
13
13
  import typer
14
14
  from typing import Optional
15
15
 
16
- from ..core.config import ConfigManager
16
+ from ..core.common.config import ConfigManager
17
17
  from ..integrations.registry import get_notification, get_integrations_by_type, IntegrationType
18
18
 
19
19
 
@@ -1,7 +1,7 @@
1
1
  import typer
2
2
  from pathlib import Path
3
3
 
4
- from ..core.config import ConfigManager, GLOBAL_PLUGINS_DIR
4
+ from ..core.common.config import ConfigManager, GLOBAL_PLUGINS_DIR
5
5
  from ..plugins.registry import get_all_plugins
6
6
 
7
7
  plugin_app = typer.Typer(help="Plugin management")
@@ -52,7 +52,7 @@ def list_cmd(
52
52
 
53
53
  # Show available from taps
54
54
  if all_plugins:
55
- from ..core.tap import TapManager
55
+ from ..core.tap.manager import TapManager
56
56
 
57
57
  tap_mgr = TapManager()
58
58
  tap_plugins = tap_mgr.get_all_plugins(include_installed=True)
@@ -13,7 +13,7 @@ from rich.panel import Panel
13
13
  from rich.prompt import Prompt, IntPrompt, Confirm
14
14
  from rich.table import Table
15
15
 
16
- from ..core.config import ConfigManager
16
+ from ..core.common.config import ConfigManager
17
17
  from ..utils.dependency import ensure_websockets, show_websockets_install_help
18
18
  from ..integrations.registry import get_task_management, get_tunnel_integration
19
19