claude-jacked 0.3.0__py3-none-any.whl → 0.3.1__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.
- {claude_jacked-0.3.0.dist-info → claude_jacked-0.3.1.dist-info}/METADATA +1 -1
- {claude_jacked-0.3.0.dist-info → claude_jacked-0.3.1.dist-info}/RECORD +7 -7
- jacked/__init__.py +1 -1
- jacked/cli.py +17 -16
- {claude_jacked-0.3.0.dist-info → claude_jacked-0.3.1.dist-info}/WHEEL +0 -0
- {claude_jacked-0.3.0.dist-info → claude_jacked-0.3.1.dist-info}/entry_points.txt +0 -0
- {claude_jacked-0.3.0.dist-info → claude_jacked-0.3.1.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: claude-jacked
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.1
|
|
4
4
|
Summary: Smart reviewers, commands, and session search for Claude Code
|
|
5
5
|
Project-URL: Homepage, https://github.com/jackneil/claude-jacked
|
|
6
6
|
Project-URL: Repository, https://github.com/jackneil/claude-jacked
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
jacked/__init__.py,sha256
|
|
2
|
-
jacked/cli.py,sha256=
|
|
1
|
+
jacked/__init__.py,sha256=-nf4gLXaGd9gIAXz2-AaiIdFt1gZbXGDalP0jHTTOFo,1276
|
|
2
|
+
jacked/cli.py,sha256=Uw4Dk0GjMgVzA7vc6w6wBfNeCr3CjbcyeyR9PJvrGbg,51636
|
|
3
3
|
jacked/client.py,sha256=7N4GdjcG8OXfmjUfprlUOJTkyrPyqF1OBstAsplNSa8,18151
|
|
4
4
|
jacked/config.py,sha256=DeC1no5rFsvlb6JaU2PzLyyhI4DaJrxrsfqVugWuC4Q,8606
|
|
5
5
|
jacked/index_write_tracker.py,sha256=E1zVqyZTQdHenp_vXL-gWPvLBo18Ar703_0MI9Cst8U,8679
|
|
@@ -26,8 +26,8 @@ jacked/data/commands/techdebt.md,sha256=jSdfMN1Kvz6vmsnWw9sCMFpKA8r87e9nDHrE-qsM
|
|
|
26
26
|
jacked/data/hooks/security_gatekeeper.py,sha256=nhiT4X-8zBhjG-i1hKgQzoXNE3NOnekTYGDlns72iXk,14083
|
|
27
27
|
jacked/data/rules/jacked_behaviors.md,sha256=x1qzdj3DLmkhv5TVAdNyIpAdjBGz7IUdXSrko94LOOw,1449
|
|
28
28
|
jacked/data/skills/jacked/SKILL.md,sha256=IEMp-PfWlu5rmS1R5HHblUX1CGwzno2gtO4yQ2cMAg4,5488
|
|
29
|
-
claude_jacked-0.3.
|
|
30
|
-
claude_jacked-0.3.
|
|
31
|
-
claude_jacked-0.3.
|
|
32
|
-
claude_jacked-0.3.
|
|
33
|
-
claude_jacked-0.3.
|
|
29
|
+
claude_jacked-0.3.1.dist-info/METADATA,sha256=dCRRqhE9GYB3Z9wl8PdUYDYr2-o5jXCTQAt1Bnuew0Q,22091
|
|
30
|
+
claude_jacked-0.3.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
31
|
+
claude_jacked-0.3.1.dist-info/entry_points.txt,sha256=52JDhetd7OsE9iJryGrQIL3PWhum_QCeLuTeQ9-CTqQ,43
|
|
32
|
+
claude_jacked-0.3.1.dist-info/licenses/LICENSE,sha256=m8NmsH7P5G4VH3VyHWPQUTl2weuNTh1-eaH0RbUcn3k,1066
|
|
33
|
+
claude_jacked-0.3.1.dist-info/RECORD,,
|
jacked/__init__.py
CHANGED
jacked/cli.py
CHANGED
|
@@ -59,8 +59,8 @@ def _require_search(command_name: str) -> bool:
|
|
|
59
59
|
except ImportError:
|
|
60
60
|
console.print(f"[red]Error:[/red] '{command_name}' requires the search extra.")
|
|
61
61
|
console.print('\nInstall it with:')
|
|
62
|
-
console.print(' [bold]pip install "claude-jacked[search]"[/bold]')
|
|
63
|
-
console.print(' [bold]pipx install "claude-jacked[search]"[/bold]')
|
|
62
|
+
console.print(' [bold]pip install "claude-jacked\[search]"[/bold]')
|
|
63
|
+
console.print(' [bold]pipx install "claude-jacked\[search]"[/bold]')
|
|
64
64
|
return False
|
|
65
65
|
|
|
66
66
|
|
|
@@ -94,7 +94,7 @@ def index(session: Optional[str], repo: Optional[str]):
|
|
|
94
94
|
else:
|
|
95
95
|
console.print("[red]Error:[/red] 'index' requires the search extra.")
|
|
96
96
|
console.print('\nInstall it with:')
|
|
97
|
-
console.print(' [bold]pip install "claude-jacked[search]"[/bold]')
|
|
97
|
+
console.print(' [bold]pip install "claude-jacked\[search]"[/bold]')
|
|
98
98
|
sys.exit(1)
|
|
99
99
|
|
|
100
100
|
from jacked.indexer import SessionIndexer
|
|
@@ -753,7 +753,7 @@ def _behavioral_rules_end_marker() -> str:
|
|
|
753
753
|
return "# end-jacked-behaviors"
|
|
754
754
|
|
|
755
755
|
|
|
756
|
-
def _install_behavioral_rules(claude_md_path: Path):
|
|
756
|
+
def _install_behavioral_rules(claude_md_path: Path, force: bool = False):
|
|
757
757
|
"""Install behavioral rules into CLAUDE.md with marker boundaries.
|
|
758
758
|
|
|
759
759
|
- Show rules before writing, require confirmation
|
|
@@ -807,7 +807,7 @@ def _install_behavioral_rules(claude_md_path: Path):
|
|
|
807
807
|
# Version upgrade needed
|
|
808
808
|
console.print("\n[bold]Behavioral rules update available:[/bold]")
|
|
809
809
|
console.print(f"[dim]{rules_text}[/dim]")
|
|
810
|
-
if not click.confirm("Update behavioral rules in CLAUDE.md?"):
|
|
810
|
+
if not force and not click.confirm("Update behavioral rules in CLAUDE.md?"):
|
|
811
811
|
console.print("[yellow][-][/yellow] Skipped behavioral rules update")
|
|
812
812
|
return
|
|
813
813
|
|
|
@@ -838,7 +838,7 @@ def _install_behavioral_rules(claude_md_path: Path):
|
|
|
838
838
|
# Fresh install - show and confirm
|
|
839
839
|
console.print("\n[bold]Proposed behavioral rules for ~/.claude/CLAUDE.md:[/bold]")
|
|
840
840
|
console.print(f"[dim]{rules_text}[/dim]")
|
|
841
|
-
if not click.confirm("Add these behavioral rules to your global CLAUDE.md?"):
|
|
841
|
+
if not force and not click.confirm("Add these behavioral rules to your global CLAUDE.md?"):
|
|
842
842
|
console.print("[yellow][-][/yellow] Skipped behavioral rules")
|
|
843
843
|
return
|
|
844
844
|
|
|
@@ -1032,7 +1032,8 @@ def _remove_security_hook(settings_path: Path) -> bool:
|
|
|
1032
1032
|
@click.option("--search", is_flag=True, help="Install session indexing hook (requires [search] extra)")
|
|
1033
1033
|
@click.option("--security", is_flag=True, help="Install security gatekeeper hook (requires [security] extra)")
|
|
1034
1034
|
@click.option("--no-rules", is_flag=True, help="Skip behavioral rules in CLAUDE.md")
|
|
1035
|
-
|
|
1035
|
+
@click.option("--force", "-f", is_flag=True, help="Overwrite existing agents/commands without prompting")
|
|
1036
|
+
def install(sounds: bool, search: bool, security: bool, no_rules: bool, force: bool):
|
|
1036
1037
|
"""Auto-install skill, agents, commands, and optional hooks.
|
|
1037
1038
|
|
|
1038
1039
|
Base install: agents, commands, behavioral rules, /jacked skill.
|
|
@@ -1109,7 +1110,7 @@ def install(sounds: bool, search: bool, security: bool, no_rules: bool):
|
|
|
1109
1110
|
else:
|
|
1110
1111
|
console.print(f"[yellow][-][/yellow] Stop hook already configured")
|
|
1111
1112
|
else:
|
|
1112
|
-
console.print("[dim][-][/dim] Skipping session indexing hook (install [search] extra to enable)")
|
|
1113
|
+
console.print("[dim][-][/dim] Skipping session indexing hook (install \[search] extra to enable)")
|
|
1113
1114
|
|
|
1114
1115
|
# Copy skill file with Python path templating
|
|
1115
1116
|
# Claude Code expects skills in subdirectories with SKILL.md
|
|
@@ -1140,8 +1141,8 @@ def install(sounds: bool, search: bool, security: bool, no_rules: bool):
|
|
|
1140
1141
|
if src_content == dst_content:
|
|
1141
1142
|
skipped += 1
|
|
1142
1143
|
continue # Same content, skip silently
|
|
1143
|
-
# Different content - ask before overwriting
|
|
1144
|
-
if not click.confirm(f"Agent '{agent_file.name}' exists with different content. Overwrite?"):
|
|
1144
|
+
# Different content - ask before overwriting (unless --force)
|
|
1145
|
+
if not force and not click.confirm(f"Agent '{agent_file.name}' exists with different content. Overwrite?"):
|
|
1145
1146
|
console.print(f"[yellow][-][/yellow] Skipped {agent_file.name}")
|
|
1146
1147
|
continue
|
|
1147
1148
|
shutil.copy(agent_file, dst_file)
|
|
@@ -1168,8 +1169,8 @@ def install(sounds: bool, search: bool, security: bool, no_rules: bool):
|
|
|
1168
1169
|
if src_content == dst_content:
|
|
1169
1170
|
skipped += 1
|
|
1170
1171
|
continue # Same content, skip silently
|
|
1171
|
-
# Different content - ask before overwriting
|
|
1172
|
-
if not click.confirm(f"Command '{cmd_file.name}' exists with different content. Overwrite?"):
|
|
1172
|
+
# Different content - ask before overwriting (unless --force)
|
|
1173
|
+
if not force and not click.confirm(f"Command '{cmd_file.name}' exists with different content. Overwrite?"):
|
|
1173
1174
|
console.print(f"[yellow][-][/yellow] Skipped {cmd_file.name}")
|
|
1174
1175
|
continue
|
|
1175
1176
|
shutil.copy(cmd_file, dst_file)
|
|
@@ -1194,7 +1195,7 @@ def install(sounds: bool, search: bool, security: bool, no_rules: bool):
|
|
|
1194
1195
|
# Install behavioral rules in CLAUDE.md (default on, --no-rules to skip)
|
|
1195
1196
|
if not no_rules:
|
|
1196
1197
|
claude_md_path = home / ".claude" / "CLAUDE.md"
|
|
1197
|
-
_install_behavioral_rules(claude_md_path)
|
|
1198
|
+
_install_behavioral_rules(claude_md_path, force=force)
|
|
1198
1199
|
|
|
1199
1200
|
console.print("\n[bold]Installation complete![/bold]")
|
|
1200
1201
|
console.print("\n[yellow]IMPORTANT: Restart Claude Code for new commands to take effect![/yellow]")
|
|
@@ -1223,9 +1224,9 @@ def install(sounds: bool, search: bool, security: bool, no_rules: bool):
|
|
|
1223
1224
|
console.print(" 4. Use '/jacked <description>' to search past sessions")
|
|
1224
1225
|
else:
|
|
1225
1226
|
console.print("\nOptional extras:")
|
|
1226
|
-
console.print(' pip install "claude-jacked[search]" # Session search via Qdrant')
|
|
1227
|
-
console.print(' pip install "claude-jacked[security]" # Auto-approve safe Bash commands')
|
|
1228
|
-
console.print(' pip install "claude-jacked[all]" # Everything')
|
|
1227
|
+
console.print(' pip install "claude-jacked\[search]" # Session search via Qdrant')
|
|
1228
|
+
console.print(' pip install "claude-jacked\[security]" # Auto-approve safe Bash commands')
|
|
1229
|
+
console.print(' pip install "claude-jacked\[all]" # Everything')
|
|
1229
1230
|
|
|
1230
1231
|
|
|
1231
1232
|
@main.command()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|