claude-jacked 0.3.0__tar.gz → 0.3.1__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 (46) hide show
  1. {claude_jacked-0.3.0 → claude_jacked-0.3.1}/PKG-INFO +1 -1
  2. {claude_jacked-0.3.0 → claude_jacked-0.3.1}/jacked/__init__.py +1 -1
  3. {claude_jacked-0.3.0 → claude_jacked-0.3.1}/jacked/cli.py +17 -16
  4. {claude_jacked-0.3.0 → claude_jacked-0.3.1}/pyproject.toml +1 -1
  5. {claude_jacked-0.3.0 → claude_jacked-0.3.1}/.claude/settings.local.json +0 -0
  6. {claude_jacked-0.3.0 → claude_jacked-0.3.1}/.github/workflows/publish.yml +0 -0
  7. {claude_jacked-0.3.0 → claude_jacked-0.3.1}/.gitignore +0 -0
  8. {claude_jacked-0.3.0 → claude_jacked-0.3.1}/LICENSE +0 -0
  9. {claude_jacked-0.3.0 → claude_jacked-0.3.1}/README.md +0 -0
  10. {claude_jacked-0.3.0 → claude_jacked-0.3.1}/design/session_indexing_improvements.md +0 -0
  11. {claude_jacked-0.3.0 → claude_jacked-0.3.1}/docs/DESIGN.md +0 -0
  12. {claude_jacked-0.3.0 → claude_jacked-0.3.1}/install.sh +0 -0
  13. {claude_jacked-0.3.0 → claude_jacked-0.3.1}/jacked/client.py +0 -0
  14. {claude_jacked-0.3.0 → claude_jacked-0.3.1}/jacked/config.py +0 -0
  15. {claude_jacked-0.3.0 → claude_jacked-0.3.1}/jacked/data/agents/code-simplicity-reviewer.md +0 -0
  16. {claude_jacked-0.3.0 → claude_jacked-0.3.1}/jacked/data/agents/defensive-error-handler.md +0 -0
  17. {claude_jacked-0.3.0 → claude_jacked-0.3.1}/jacked/data/agents/double-check-reviewer.md +0 -0
  18. {claude_jacked-0.3.0 → claude_jacked-0.3.1}/jacked/data/agents/git-pr-workflow-manager.md +0 -0
  19. {claude_jacked-0.3.0 → claude_jacked-0.3.1}/jacked/data/agents/issue-pr-coordinator.md +0 -0
  20. {claude_jacked-0.3.0 → claude_jacked-0.3.1}/jacked/data/agents/pr-workflow-checker.md +0 -0
  21. {claude_jacked-0.3.0 → claude_jacked-0.3.1}/jacked/data/agents/readme-maintainer.md +0 -0
  22. {claude_jacked-0.3.0 → claude_jacked-0.3.1}/jacked/data/agents/test-coverage-engineer.md +0 -0
  23. {claude_jacked-0.3.0 → claude_jacked-0.3.1}/jacked/data/agents/test-coverage-improver.md +0 -0
  24. {claude_jacked-0.3.0 → claude_jacked-0.3.1}/jacked/data/agents/wiki-documentation-architect.md +0 -0
  25. {claude_jacked-0.3.0 → claude_jacked-0.3.1}/jacked/data/commands/audit-rules.md +0 -0
  26. {claude_jacked-0.3.0 → claude_jacked-0.3.1}/jacked/data/commands/dc.md +0 -0
  27. {claude_jacked-0.3.0 → claude_jacked-0.3.1}/jacked/data/commands/learn.md +0 -0
  28. {claude_jacked-0.3.0 → claude_jacked-0.3.1}/jacked/data/commands/pr.md +0 -0
  29. {claude_jacked-0.3.0 → claude_jacked-0.3.1}/jacked/data/commands/redo.md +0 -0
  30. {claude_jacked-0.3.0 → claude_jacked-0.3.1}/jacked/data/commands/techdebt.md +0 -0
  31. {claude_jacked-0.3.0 → claude_jacked-0.3.1}/jacked/data/hooks/security_gatekeeper.py +0 -0
  32. {claude_jacked-0.3.0 → claude_jacked-0.3.1}/jacked/data/rules/jacked_behaviors.md +0 -0
  33. {claude_jacked-0.3.0 → claude_jacked-0.3.1}/jacked/data/skills/jacked/SKILL.md +0 -0
  34. {claude_jacked-0.3.0 → claude_jacked-0.3.1}/jacked/index_write_tracker.py +0 -0
  35. {claude_jacked-0.3.0 → claude_jacked-0.3.1}/jacked/indexer.py +0 -0
  36. {claude_jacked-0.3.0 → claude_jacked-0.3.1}/jacked/retriever.py +0 -0
  37. {claude_jacked-0.3.0 → claude_jacked-0.3.1}/jacked/searcher.py +0 -0
  38. {claude_jacked-0.3.0 → claude_jacked-0.3.1}/jacked/transcript.py +0 -0
  39. {claude_jacked-0.3.0 → claude_jacked-0.3.1}/tests/__init__.py +0 -0
  40. {claude_jacked-0.3.0 → claude_jacked-0.3.1}/tests/conftest.py +0 -0
  41. {claude_jacked-0.3.0 → claude_jacked-0.3.1}/tests/debugging/test_gatekeeper.py +0 -0
  42. {claude_jacked-0.3.0 → claude_jacked-0.3.1}/tests/test_config.py +0 -0
  43. {claude_jacked-0.3.0 → claude_jacked-0.3.1}/tests/test_index_write_tracker.py +0 -0
  44. {claude_jacked-0.3.0 → claude_jacked-0.3.1}/tests/test_indexer_incremental.py +0 -0
  45. {claude_jacked-0.3.0 → claude_jacked-0.3.1}/tests/test_transcript.py +0 -0
  46. {claude_jacked-0.3.0 → claude_jacked-0.3.1}/uninstall.sh +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: claude-jacked
3
- Version: 0.3.0
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
@@ -8,7 +8,7 @@ Install extras for additional features:
8
8
  pip install "claude-jacked[all]" — everything
9
9
  """
10
10
 
11
- __version__ = "0.3.0"
11
+ __version__ = "0.3.1"
12
12
 
13
13
 
14
14
  def _qdrant_available() -> bool:
@@ -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
- def install(sounds: bool, search: bool, security: bool, no_rules: bool):
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()
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "claude-jacked"
7
- version = "0.3.0"
7
+ version = "0.3.1"
8
8
  description = "Smart reviewers, commands, and session search for Claude Code"
9
9
  readme = "README.md"
10
10
  license = "MIT"
File without changes
File without changes
File without changes
File without changes