code-aide 1.18.0__tar.gz → 1.18.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 (66) hide show
  1. code_aide-1.18.2/CLAUDE.md +1 -0
  2. {code_aide-1.18.0 → code_aide-1.18.2}/PKG-INFO +1 -1
  3. {code_aide-1.18.0 → code_aide-1.18.2}/script-archive/amp-install.sh +9 -6
  4. {code_aide-1.18.0 → code_aide-1.18.2}/script-archive/claude-install.sh +62 -19
  5. {code_aide-1.18.0 → code_aide-1.18.2}/src/code_aide/__init__.py +1 -1
  6. {code_aide-1.18.0 → code_aide-1.18.2}/src/code_aide/data/tools.json +2 -2
  7. code_aide-1.18.0/CLAUDE.md +0 -1
  8. {code_aide-1.18.0 → code_aide-1.18.2}/.github/workflows/ci.yml +0 -0
  9. {code_aide-1.18.0 → code_aide-1.18.2}/.github/workflows/publish.yml +0 -0
  10. {code_aide-1.18.0 → code_aide-1.18.2}/.gitignore +0 -0
  11. {code_aide-1.18.0 → code_aide-1.18.2}/.gitlab-ci.yml +0 -0
  12. {code_aide-1.18.0 → code_aide-1.18.2}/.pre-commit-config.yaml +0 -0
  13. {code_aide-1.18.0 → code_aide-1.18.2}/AGENTS.md +0 -0
  14. {code_aide-1.18.0 → code_aide-1.18.2}/LICENSE +0 -0
  15. {code_aide-1.18.0 → code_aide-1.18.2}/Makefile +0 -0
  16. {code_aide-1.18.0 → code_aide-1.18.2}/README.md +0 -0
  17. {code_aide-1.18.0 → code_aide-1.18.2}/TODO.md +0 -0
  18. {code_aide-1.18.0 → code_aide-1.18.2}/pyproject.toml +0 -0
  19. {code_aide-1.18.0 → code_aide-1.18.2}/script-archive/README.md +0 -0
  20. {code_aide-1.18.0 → code_aide-1.18.2}/script-archive/antigravity-install.sh +0 -0
  21. {code_aide-1.18.0 → code_aide-1.18.2}/script-archive/cursor-install.sh +0 -0
  22. {code_aide-1.18.0 → code_aide-1.18.2}/specs/2026-05-03-qwen3.6-code-quality-analysis-original.md +0 -0
  23. {code_aide-1.18.0 → code_aide-1.18.2}/specs/2026-05-03-qwen3.6-code-quality-analysis.md +0 -0
  24. {code_aide-1.18.0 → code_aide-1.18.2}/specs/antigravity-cli-integration.md +0 -0
  25. {code_aide-1.18.0 → code_aide-1.18.2}/specs/auto-migrate-deprecated-installs.md +0 -0
  26. {code_aide-1.18.0 → code_aide-1.18.2}/specs/claude-native-installer-migration.md +0 -0
  27. {code_aide-1.18.0 → code_aide-1.18.2}/specs/missing-coding-llm-cli-tools.md +0 -0
  28. {code_aide-1.18.0 → code_aide-1.18.2}/specs/pre-commit-uv-setup.md +0 -0
  29. {code_aide-1.18.0 → code_aide-1.18.2}/specs/remove-bundled-version-baseline.md +0 -0
  30. {code_aide-1.18.0 → code_aide-1.18.2}/specs/unify-upgrade-eligibility-with-shared-evaluator.md +0 -0
  31. {code_aide-1.18.0 → code_aide-1.18.2}/src/code_aide/__main__.py +0 -0
  32. {code_aide-1.18.0 → code_aide-1.18.2}/src/code_aide/commands_actions.py +0 -0
  33. {code_aide-1.18.0 → code_aide-1.18.2}/src/code_aide/commands_tools.py +0 -0
  34. {code_aide-1.18.0 → code_aide-1.18.2}/src/code_aide/config.py +0 -0
  35. {code_aide-1.18.0 → code_aide-1.18.2}/src/code_aide/console.py +0 -0
  36. {code_aide-1.18.0 → code_aide-1.18.2}/src/code_aide/constants.py +0 -0
  37. {code_aide-1.18.0 → code_aide-1.18.2}/src/code_aide/detection.py +0 -0
  38. {code_aide-1.18.0 → code_aide-1.18.2}/src/code_aide/detection_types.py +0 -0
  39. {code_aide-1.18.0 → code_aide-1.18.2}/src/code_aide/entry.py +0 -0
  40. {code_aide-1.18.0 → code_aide-1.18.2}/src/code_aide/install.py +0 -0
  41. {code_aide-1.18.0 → code_aide-1.18.2}/src/code_aide/install_types.py +0 -0
  42. {code_aide-1.18.0 → code_aide-1.18.2}/src/code_aide/operation_handlers.py +0 -0
  43. {code_aide-1.18.0 → code_aide-1.18.2}/src/code_aide/operations.py +0 -0
  44. {code_aide-1.18.0 → code_aide-1.18.2}/src/code_aide/package_info.py +0 -0
  45. {code_aide-1.18.0 → code_aide-1.18.2}/src/code_aide/package_managers.py +0 -0
  46. {code_aide-1.18.0 → code_aide-1.18.2}/src/code_aide/prereqs.py +0 -0
  47. {code_aide-1.18.0 → code_aide-1.18.2}/src/code_aide/status.py +0 -0
  48. {code_aide-1.18.0 → code_aide-1.18.2}/src/code_aide/status_print.py +0 -0
  49. {code_aide-1.18.0 → code_aide-1.18.2}/src/code_aide/versions.py +0 -0
  50. {code_aide-1.18.0 → code_aide-1.18.2}/tests/test_commands_actions.py +0 -0
  51. {code_aide-1.18.0 → code_aide-1.18.2}/tests/test_commands_tools.py +0 -0
  52. {code_aide-1.18.0 → code_aide-1.18.2}/tests/test_config.py +0 -0
  53. {code_aide-1.18.0 → code_aide-1.18.2}/tests/test_console.py +0 -0
  54. {code_aide-1.18.0 → code_aide-1.18.2}/tests/test_constants.py +0 -0
  55. {code_aide-1.18.0 → code_aide-1.18.2}/tests/test_detection.py +0 -0
  56. {code_aide-1.18.0 → code_aide-1.18.2}/tests/test_entry.py +0 -0
  57. {code_aide-1.18.0 → code_aide-1.18.2}/tests/test_error_paths.py +0 -0
  58. {code_aide-1.18.0 → code_aide-1.18.2}/tests/test_install.py +0 -0
  59. {code_aide-1.18.0 → code_aide-1.18.2}/tests/test_install_types.py +0 -0
  60. {code_aide-1.18.0 → code_aide-1.18.2}/tests/test_operations.py +0 -0
  61. {code_aide-1.18.0 → code_aide-1.18.2}/tests/test_package_info.py +0 -0
  62. {code_aide-1.18.0 → code_aide-1.18.2}/tests/test_package_managers.py +0 -0
  63. {code_aide-1.18.0 → code_aide-1.18.2}/tests/test_prereqs.py +0 -0
  64. {code_aide-1.18.0 → code_aide-1.18.2}/tests/test_status.py +0 -0
  65. {code_aide-1.18.0 → code_aide-1.18.2}/tests/test_versions.py +0 -0
  66. {code_aide-1.18.0 → code_aide-1.18.2}/uv.lock +0 -0
@@ -0,0 +1 @@
1
+ @AGENTS.md
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: code-aide
3
- Version: 1.18.0
3
+ Version: 1.18.2
4
4
  Summary: Manage AI coding CLI tools (Claude, Antigravity, 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
@@ -347,6 +347,8 @@ install_amp_binary() {
347
347
  fi
348
348
 
349
349
  local binary_path="$BIN_DIR/$binary_name"
350
+ local staged_binary_path
351
+ staged_binary_path=$(mktemp "$BIN_DIR/tmp.XXXXXX")
350
352
  local checksum_path="$AMP_HOME/amp-install-checksum.txt"
351
353
 
352
354
  # Download checksum first
@@ -356,21 +358,22 @@ install_amp_binary() {
356
358
 
357
359
  if has_gzip_support; then
358
360
  # Download compressed binary and verify the decompressed bytes against checksum
359
- download_gzipped_file "${binary_url}.gz" "$binary_path" 'Amp binary'
361
+ download_gzipped_file "${binary_url}.gz" "$staged_binary_path" 'Amp binary'
360
362
  else
361
363
  warn "gzip not found; downloading uncompressed binary"
362
- download_file "$binary_url" "$binary_path" 'Amp binary'
364
+ download_file "$binary_url" "$staged_binary_path" 'Amp binary'
363
365
  fi
364
366
 
365
367
  # Verify checksum
366
- verify_checksum "$binary_path" "$expected_checksum"
368
+ verify_checksum "$staged_binary_path" "$expected_checksum"
367
369
 
368
370
  # Verify signature (optional, only if minisign is installed)
369
371
  # Disabled until release signing is enabled
370
- # verify_signature "$binary_path" "$minisign_signature_url"
372
+ # verify_signature "$staged_binary_path" "$minisign_signature_url"
371
373
 
372
- # Make executable
373
- chmod +x "$binary_path"
374
+ # Make executable before atomically replacing the installed binary
375
+ chmod 0755 "$staged_binary_path"
376
+ mv "$staged_binary_path" "$binary_path"
374
377
 
375
378
  # Clean up checksum file
376
379
  rm -f "$checksum_path"
@@ -55,6 +55,11 @@ if command -v jq >/dev/null 2>&1; then
55
55
  HAS_JQ=true
56
56
  fi
57
57
 
58
+ HAS_ZSTD=false
59
+ if command -v zstd >/dev/null 2>&1; then
60
+ HAS_ZSTD=true
61
+ fi
62
+
58
63
  # Download function that works with both curl and wget
59
64
  download_file() {
60
65
  local url="$1"
@@ -85,8 +90,9 @@ get_checksum_from_manifest() {
85
90
  # Normalize JSON to single line and extract checksum
86
91
  json=$(echo "$json" | tr -d '\n\r\t' | sed 's/ \+/ /g')
87
92
 
88
- # Extract checksum for platform using bash regex
89
- if [[ $json =~ \"$platform\"[^}]*\"checksum\"[[:space:]]*:[[:space:]]*\"([a-f0-9]{64})\" ]]; then
93
+ # Extract checksum for platform using bash regex. [^{}] keeps the match
94
+ # inside the platform's own object (manifest.zst.json nests a darwin bundle).
95
+ if [[ $json =~ \"$platform\"[[:space:]]*:[[:space:]]*[{][^{}]*\"checksum\"[[:space:]]*:[[:space:]]*\"([a-f0-9]{64})\" ]]; then
90
96
  echo "${BASH_REMATCH[1]}"
91
97
  return 0
92
98
  fi
@@ -94,6 +100,17 @@ get_checksum_from_manifest() {
94
100
  return 1
95
101
  }
96
102
 
103
+ get_size_from_manifest() {
104
+ local json="$1"
105
+ local platform="$2"
106
+ json=$(echo "$json" | tr -d '\n\r\t' | sed 's/ \+/ /g')
107
+ if [[ $json =~ \"$platform\"[[:space:]]*:[[:space:]]*[{][^{}]*\"size\"[[:space:]]*:[[:space:]]*([0-9]+) ]]; then
108
+ echo "${BASH_REMATCH[1]}"
109
+ return 0
110
+ fi
111
+ return 1
112
+ }
113
+
97
114
  # Detect platform
98
115
  case "$(uname -s)" in
99
116
  Darwin) os="darwin" ;;
@@ -144,8 +161,10 @@ manifest_json=$(download_file "$DOWNLOAD_BASE_URL/$version/manifest.json")
144
161
  # Use jq if available, otherwise fall back to pure bash parsing
145
162
  if [ "$HAS_JQ" = true ]; then
146
163
  checksum=$(echo "$manifest_json" | jq -r ".platforms[\"$platform\"].checksum // empty")
164
+ size=$(echo "$manifest_json" | jq -r ".platforms[\"$platform\"].size // empty")
147
165
  else
148
- checksum=$(get_checksum_from_manifest "$manifest_json" "$platform")
166
+ checksum=$(get_checksum_from_manifest "$manifest_json" "$platform" || true)
167
+ size=$(get_size_from_manifest "$manifest_json" "$platform" || true)
149
168
  fi
150
169
 
151
170
  # Validate checksum format (SHA256 = 64 hex characters)
@@ -154,25 +173,49 @@ if [ -z "$checksum" ] || [[ ! "$checksum" =~ ^[a-f0-9]{64}$ ]]; then
154
173
  exit 1
155
174
  fi
156
175
 
157
- # Download and verify
158
- binary_path="$DOWNLOAD_DIR/claude-$version-$platform"
159
- if ! download_file "$DOWNLOAD_BASE_URL/$version/$platform/claude" "$binary_path"; then
160
- echo "Download failed" >&2
161
- rm -f "$binary_path"
162
- exit 1
163
- fi
176
+ checksum_matches() {
177
+ local actual
178
+ if [ "$os" = "darwin" ]; then
179
+ actual=$(shasum -a 256 "$1" | cut -d' ' -f1)
180
+ else
181
+ actual=$(sha256sum "$1" | cut -d' ' -f1)
182
+ fi
183
+ [ "$actual" = "$2" ]
184
+ }
164
185
 
165
- # Pick the right checksum tool
166
- if [ "$os" = "darwin" ]; then
167
- actual=$(shasum -a 256 "$binary_path" | cut -d' ' -f1)
168
- else
169
- actual=$(sha256sum "$binary_path" | cut -d' ' -f1)
186
+ zst_checksum=""
187
+ if [ "$HAS_ZSTD" = true ] && [[ "$size" =~ ^[1-9][0-9]*$ ]]; then
188
+ zst_manifest_json=$(download_file "$DOWNLOAD_BASE_URL/$version/manifest.zst.json" 2>/dev/null || true)
189
+ if [ "$HAS_JQ" = true ]; then
190
+ zst_checksum=$(echo "$zst_manifest_json" | jq -r ".platforms[\"$platform\"].checksum // empty" 2>/dev/null || true)
191
+ else
192
+ zst_checksum=$(get_checksum_from_manifest "$zst_manifest_json" "$platform" || true)
193
+ fi
170
194
  fi
171
195
 
172
- if [ "$actual" != "$checksum" ]; then
173
- echo "Checksum verification failed" >&2
174
- rm -f "$binary_path"
175
- exit 1
196
+ binary_path="$DOWNLOAD_DIR/claude-$version-$platform"
197
+ verified=false
198
+ if [[ "$zst_checksum" =~ ^[a-f0-9]{64}$ ]]; then
199
+ if download_file "$DOWNLOAD_BASE_URL/$version/$platform/claude.zst" "$binary_path.zst" \
200
+ && checksum_matches "$binary_path.zst" "$zst_checksum"; then
201
+ zstd -d -q -c "$binary_path.zst" 2>/dev/null | head -c "$size" > "$binary_path" || true
202
+ if checksum_matches "$binary_path" "$checksum"; then
203
+ verified=true
204
+ fi
205
+ fi
206
+ rm -f "$binary_path.zst"
207
+ fi
208
+ if [ "$verified" = false ]; then
209
+ if ! download_file "$DOWNLOAD_BASE_URL/$version/$platform/claude" "$binary_path"; then
210
+ echo "Download failed" >&2
211
+ rm -f "$binary_path"
212
+ exit 1
213
+ fi
214
+ if ! checksum_matches "$binary_path" "$checksum"; then
215
+ echo "Checksum verification failed" >&2
216
+ rm -f "$binary_path"
217
+ exit 1
218
+ fi
176
219
  fi
177
220
 
178
221
  chmod +x "$binary_path"
@@ -1,3 +1,3 @@
1
1
  """code-aide - Manage AI coding CLI tools."""
2
2
 
3
- __version__ = "1.18.0"
3
+ __version__ = "1.18.2"
@@ -33,7 +33,7 @@
33
33
  "command": "claude",
34
34
  "install_type": "script",
35
35
  "install_url": "https://claude.ai/install.sh",
36
- "install_sha256": "cde4f1702d3b1695f92b73d26888364e17bca476e17f0fd676484c951d36c125",
36
+ "install_sha256": "3a68d3406cf674e17bed1733a4dcf37805e2e47d87417700007d7e1aa766a944",
37
37
  "version_url": "https://storage.googleapis.com/claude-code-dist-86c565f3-f756-42ad-8dfa-d59b1c096819/claude-code-releases/latest",
38
38
  "prerequisites": [],
39
39
  "min_node_version": null,
@@ -89,7 +89,7 @@
89
89
  "command": "amp",
90
90
  "install_type": "script",
91
91
  "install_url": "https://ampcode.com/install.sh",
92
- "install_sha256": "832d67ed6b6b4414a1578ec8064c258532703a7c4ff675bab7408a17d847c291",
92
+ "install_sha256": "07bea1669144a5191c873a61a3244266ca046557bff7123f0be41d0723592297",
93
93
  "install_script_path_prepend": [
94
94
  "~/.local/bin"
95
95
  ],
@@ -1 +0,0 @@
1
- See AGENTS.md for project instructions.
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