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.
- {code_aide-1.7.1 → code_aide-1.7.3}/PKG-INFO +4 -1
- {code_aide-1.7.1 → code_aide-1.7.3}/README.md +3 -0
- {code_aide-1.7.1 → code_aide-1.7.3}/src/code_aide/__init__.py +1 -1
- {code_aide-1.7.1 → code_aide-1.7.3}/src/code_aide/commands_tools.py +85 -0
- {code_aide-1.7.1 → code_aide-1.7.3}/src/code_aide/entry.py +6 -0
- {code_aide-1.7.1 → code_aide-1.7.3}/.github/workflows/ci.yml +0 -0
- {code_aide-1.7.1 → code_aide-1.7.3}/.github/workflows/publish.yml +0 -0
- {code_aide-1.7.1 → code_aide-1.7.3}/.gitignore +0 -0
- {code_aide-1.7.1 → code_aide-1.7.3}/.gitlab-ci.yml +0 -0
- {code_aide-1.7.1 → code_aide-1.7.3}/.pre-commit-config.yaml +0 -0
- {code_aide-1.7.1 → code_aide-1.7.3}/AGENTS.md +0 -0
- {code_aide-1.7.1 → code_aide-1.7.3}/CLAUDE.md +0 -0
- {code_aide-1.7.1 → code_aide-1.7.3}/LICENSE +0 -0
- {code_aide-1.7.1 → code_aide-1.7.3}/TODO.md +0 -0
- {code_aide-1.7.1 → code_aide-1.7.3}/pyproject.toml +0 -0
- {code_aide-1.7.1 → code_aide-1.7.3}/specs/auto-migrate-deprecated-installs.md +0 -0
- {code_aide-1.7.1 → code_aide-1.7.3}/specs/claude-native-installer-migration.md +0 -0
- {code_aide-1.7.1 → code_aide-1.7.3}/specs/missing-coding-llm-cli-tools.md +0 -0
- {code_aide-1.7.1 → code_aide-1.7.3}/specs/pre-commit-uv-setup.md +0 -0
- {code_aide-1.7.1 → code_aide-1.7.3}/specs/remove-bundled-version-baseline.md +0 -0
- {code_aide-1.7.1 → code_aide-1.7.3}/src/code_aide/__main__.py +0 -0
- {code_aide-1.7.1 → code_aide-1.7.3}/src/code_aide/commands_actions.py +0 -0
- {code_aide-1.7.1 → code_aide-1.7.3}/src/code_aide/config.py +0 -0
- {code_aide-1.7.1 → code_aide-1.7.3}/src/code_aide/console.py +0 -0
- {code_aide-1.7.1 → code_aide-1.7.3}/src/code_aide/constants.py +0 -0
- {code_aide-1.7.1 → code_aide-1.7.3}/src/code_aide/data/tools.json +0 -0
- {code_aide-1.7.1 → code_aide-1.7.3}/src/code_aide/detection.py +0 -0
- {code_aide-1.7.1 → code_aide-1.7.3}/src/code_aide/install.py +0 -0
- {code_aide-1.7.1 → code_aide-1.7.3}/src/code_aide/operations.py +0 -0
- {code_aide-1.7.1 → code_aide-1.7.3}/src/code_aide/prereqs.py +0 -0
- {code_aide-1.7.1 → code_aide-1.7.3}/src/code_aide/status.py +0 -0
- {code_aide-1.7.1 → code_aide-1.7.3}/src/code_aide/versions.py +0 -0
- {code_aide-1.7.1 → code_aide-1.7.3}/tests/test_commands_actions.py +0 -0
- {code_aide-1.7.1 → code_aide-1.7.3}/tests/test_commands_tools.py +0 -0
- {code_aide-1.7.1 → code_aide-1.7.3}/tests/test_config.py +0 -0
- {code_aide-1.7.1 → code_aide-1.7.3}/tests/test_console.py +0 -0
- {code_aide-1.7.1 → code_aide-1.7.3}/tests/test_constants.py +0 -0
- {code_aide-1.7.1 → code_aide-1.7.3}/tests/test_detection.py +0 -0
- {code_aide-1.7.1 → code_aide-1.7.3}/tests/test_install.py +0 -0
- {code_aide-1.7.1 → code_aide-1.7.3}/tests/test_operations.py +0 -0
- {code_aide-1.7.1 → code_aide-1.7.3}/tests/test_status.py +0 -0
- {code_aide-1.7.1 → code_aide-1.7.3}/tests/test_versions.py +0 -0
- {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.
|
|
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
|
|
|
@@ -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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|