code-aide 1.7.1__tar.gz → 1.7.3__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 (43) hide show
  1. {code_aide-1.7.1 → code_aide-1.7.3}/PKG-INFO +4 -1
  2. {code_aide-1.7.1 → code_aide-1.7.3}/README.md +3 -0
  3. {code_aide-1.7.1 → code_aide-1.7.3}/src/code_aide/__init__.py +1 -1
  4. {code_aide-1.7.1 → code_aide-1.7.3}/src/code_aide/commands_tools.py +85 -0
  5. {code_aide-1.7.1 → code_aide-1.7.3}/src/code_aide/entry.py +6 -0
  6. {code_aide-1.7.1 → code_aide-1.7.3}/.github/workflows/ci.yml +0 -0
  7. {code_aide-1.7.1 → code_aide-1.7.3}/.github/workflows/publish.yml +0 -0
  8. {code_aide-1.7.1 → code_aide-1.7.3}/.gitignore +0 -0
  9. {code_aide-1.7.1 → code_aide-1.7.3}/.gitlab-ci.yml +0 -0
  10. {code_aide-1.7.1 → code_aide-1.7.3}/.pre-commit-config.yaml +0 -0
  11. {code_aide-1.7.1 → code_aide-1.7.3}/AGENTS.md +0 -0
  12. {code_aide-1.7.1 → code_aide-1.7.3}/CLAUDE.md +0 -0
  13. {code_aide-1.7.1 → code_aide-1.7.3}/LICENSE +0 -0
  14. {code_aide-1.7.1 → code_aide-1.7.3}/TODO.md +0 -0
  15. {code_aide-1.7.1 → code_aide-1.7.3}/pyproject.toml +0 -0
  16. {code_aide-1.7.1 → code_aide-1.7.3}/specs/auto-migrate-deprecated-installs.md +0 -0
  17. {code_aide-1.7.1 → code_aide-1.7.3}/specs/claude-native-installer-migration.md +0 -0
  18. {code_aide-1.7.1 → code_aide-1.7.3}/specs/missing-coding-llm-cli-tools.md +0 -0
  19. {code_aide-1.7.1 → code_aide-1.7.3}/specs/pre-commit-uv-setup.md +0 -0
  20. {code_aide-1.7.1 → code_aide-1.7.3}/specs/remove-bundled-version-baseline.md +0 -0
  21. {code_aide-1.7.1 → code_aide-1.7.3}/src/code_aide/__main__.py +0 -0
  22. {code_aide-1.7.1 → code_aide-1.7.3}/src/code_aide/commands_actions.py +0 -0
  23. {code_aide-1.7.1 → code_aide-1.7.3}/src/code_aide/config.py +0 -0
  24. {code_aide-1.7.1 → code_aide-1.7.3}/src/code_aide/console.py +0 -0
  25. {code_aide-1.7.1 → code_aide-1.7.3}/src/code_aide/constants.py +0 -0
  26. {code_aide-1.7.1 → code_aide-1.7.3}/src/code_aide/data/tools.json +0 -0
  27. {code_aide-1.7.1 → code_aide-1.7.3}/src/code_aide/detection.py +0 -0
  28. {code_aide-1.7.1 → code_aide-1.7.3}/src/code_aide/install.py +0 -0
  29. {code_aide-1.7.1 → code_aide-1.7.3}/src/code_aide/operations.py +0 -0
  30. {code_aide-1.7.1 → code_aide-1.7.3}/src/code_aide/prereqs.py +0 -0
  31. {code_aide-1.7.1 → code_aide-1.7.3}/src/code_aide/status.py +0 -0
  32. {code_aide-1.7.1 → code_aide-1.7.3}/src/code_aide/versions.py +0 -0
  33. {code_aide-1.7.1 → code_aide-1.7.3}/tests/test_commands_actions.py +0 -0
  34. {code_aide-1.7.1 → code_aide-1.7.3}/tests/test_commands_tools.py +0 -0
  35. {code_aide-1.7.1 → code_aide-1.7.3}/tests/test_config.py +0 -0
  36. {code_aide-1.7.1 → code_aide-1.7.3}/tests/test_console.py +0 -0
  37. {code_aide-1.7.1 → code_aide-1.7.3}/tests/test_constants.py +0 -0
  38. {code_aide-1.7.1 → code_aide-1.7.3}/tests/test_detection.py +0 -0
  39. {code_aide-1.7.1 → code_aide-1.7.3}/tests/test_install.py +0 -0
  40. {code_aide-1.7.1 → code_aide-1.7.3}/tests/test_operations.py +0 -0
  41. {code_aide-1.7.1 → code_aide-1.7.3}/tests/test_status.py +0 -0
  42. {code_aide-1.7.1 → code_aide-1.7.3}/tests/test_versions.py +0 -0
  43. {code_aide-1.7.1 → code_aide-1.7.3}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-aide
3
- Version: 1.7.1
3
+ Version: 1.7.3
4
4
  Summary: Manage AI coding CLI tools (Claude, Copilot, Cursor, Gemini, Amp, Codex)
5
5
  Project-URL: Homepage, https://github.com/dajobe/code-aide
6
6
  Project-URL: Repository, https://github.com/dajobe/code-aide
@@ -54,6 +54,9 @@ code-aide list
54
54
  # Show detailed status for installed tools
55
55
  code-aide status
56
56
 
57
+ # Show compact one-line-per-tool status
58
+ code-aide status -c
59
+
57
60
  # Install specific tools
58
61
  code-aide install claude gemini
59
62
 
@@ -28,6 +28,9 @@ code-aide list
28
28
  # Show detailed status for installed tools
29
29
  code-aide status
30
30
 
31
+ # Show compact one-line-per-tool status
32
+ code-aide status -c
33
+
31
34
  # Install specific tools
32
35
  code-aide install claude gemini
33
36
 
@@ -1,3 +1,3 @@
1
1
  """code-aide - Manage AI coding CLI tools."""
2
2
 
3
- __version__ = "1.7.1"
3
+ __version__ = "1.7.3"
@@ -101,8 +101,93 @@ def cmd_list(args: argparse.Namespace) -> None:
101
101
  )
102
102
 
103
103
 
104
+ def _short_install_method(method: str | None) -> str:
105
+ """Return a short label for an install method."""
106
+ labels = {
107
+ "brew_formula": "brew",
108
+ "brew_cask": "cask",
109
+ "npm": "npm",
110
+ "brew_npm": "brew-npm",
111
+ "system": "system",
112
+ "script": "script",
113
+ "direct_download": "download",
114
+ }
115
+ return labels.get(method or "", method or "unknown")
116
+
117
+
118
+ def _compact_version_status(
119
+ version: str | None, latest_version: str | None
120
+ ) -> tuple[str, str]:
121
+ """Return (version_str, status_indicator) for compact display."""
122
+ if not version:
123
+ return ("", "")
124
+ ver = extract_version_from_string(version) or version
125
+ if not latest_version:
126
+ return (ver, "")
127
+ if status_version_matches_latest(version, latest_version):
128
+ return (ver, f"{Colors.GREEN}ok{Colors.NC}")
129
+ if ver and version_is_newer(ver, latest_version):
130
+ return (ver, f"{Colors.YELLOW}newer{Colors.NC}")
131
+ return (ver, f"{Colors.YELLOW}old{Colors.NC}")
132
+
133
+
134
+ def cmd_status_compact() -> None:
135
+ """Show compact one-line-per-tool status."""
136
+ rows: list[tuple[str, str, str, str, str]] = []
137
+ for tool_name, tool_config in TOOLS.items():
138
+ name = tool_config["command"]
139
+ status = get_tool_status(tool_name, tool_config)
140
+
141
+ if not status["installed"]:
142
+ opt_in = not tool_config.get("default_install", True)
143
+ if opt_in:
144
+ state = "opt-in"
145
+ else:
146
+ state = f"{Colors.RED}missing{Colors.NC}"
147
+ rows.append((name, state, "", "", ""))
148
+ continue
149
+
150
+ tool_path = shutil.which(tool_config["command"]) or ""
151
+ install_info = detect_install_method(tool_name)
152
+ method = _short_install_method(install_info["method"])
153
+ latest_version = tool_config.get("latest_version")
154
+ ver, ver_status = _compact_version_status(status["version"], latest_version)
155
+
156
+ state = f"{Colors.GREEN}ok{Colors.NC}"
157
+ if ver_status:
158
+ state = ver_status
159
+
160
+ rows.append((name, state, ver, method, tool_path))
161
+
162
+ # Calculate column widths (ignoring ANSI escape codes)
163
+ import re
164
+
165
+ def visible_len(s: str) -> int:
166
+ return len(re.sub(r"\033\[[^m]*m", "", s))
167
+
168
+ headers = ("TOOL", "STATE", "VERSION", "VIA", "PATH")
169
+ widths = [len(h) for h in headers]
170
+ for row in rows:
171
+ for i, cell in enumerate(row):
172
+ widths[i] = max(widths[i], visible_len(cell))
173
+
174
+ def fmt_row(row: tuple[str, ...]) -> str:
175
+ parts = []
176
+ for i, cell in enumerate(row):
177
+ pad = widths[i] - visible_len(cell)
178
+ parts.append(cell + " " * pad)
179
+ return " ".join(parts).rstrip()
180
+
181
+ print(fmt_row(headers))
182
+ for row in rows:
183
+ print(fmt_row(row))
184
+
185
+
104
186
  def cmd_status(args: argparse.Namespace) -> None:
105
187
  """Handle status command."""
188
+ if getattr(args, "compact", False):
189
+ cmd_status_compact()
190
+ return
106
191
  print("AI Coding CLI Tools Status:")
107
192
  print("=" * 70)
108
193
  print()
@@ -34,6 +34,12 @@ def main() -> None:
34
34
  status_parser = subparsers.add_parser(
35
35
  "status", help="Show detailed status for installed tools"
36
36
  )
37
+ status_parser.add_argument(
38
+ "-c",
39
+ "--compact",
40
+ action="store_true",
41
+ help="Show compact one-line-per-tool status",
42
+ )
37
43
  status_parser.set_defaults(func=cmd_status)
38
44
 
39
45
  install_parser = subparsers.add_parser("install", help="Install tools")
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes