@cats-inc/cats-platform 0.1.7 → 0.1.9
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.
- package/README.md +8 -8
- package/build/desktop/bootstrapPage.d.ts.map +1 -1
- package/build/desktop/bootstrapPage.js +5 -1
- package/build/desktop/bootstrapPage.js.map +1 -1
- package/build/desktop/cliInventoryProbe.d.ts.map +1 -1
- package/build/desktop/cliInventoryProbe.js +12 -0
- package/build/desktop/cliInventoryProbe.js.map +1 -1
- package/build/desktop/contracts.d.ts +1 -1
- package/build/desktop/contracts.d.ts.map +1 -1
- package/build/desktop/contracts.js +4 -0
- package/build/desktop/contracts.js.map +1 -1
- package/build/desktop/main.js +41 -9
- package/build/desktop/main.js.map +1 -1
- package/build/desktop/packaging.d.ts.map +1 -1
- package/build/desktop/packaging.js +62 -0
- package/build/desktop/packaging.js.map +1 -1
- package/build/desktop/setupAssets.d.ts.map +1 -1
- package/build/desktop/setupAssets.js +134 -0
- package/build/desktop/setupAssets.js.map +1 -1
- package/build/desktop/updateInstallHandoff.d.ts +14 -0
- package/build/desktop/updateInstallHandoff.d.ts.map +1 -1
- package/build/desktop/updateInstallHandoff.js +23 -0
- package/build/desktop/updateInstallHandoff.js.map +1 -1
- package/build/desktop/updateManager.d.ts.map +1 -1
- package/build/desktop/updateManager.js +8 -0
- package/build/desktop/updateManager.js.map +1 -1
- package/build/desktop/updaterAdapter.d.ts +16 -1
- package/build/desktop/updaterAdapter.d.ts.map +1 -1
- package/build/desktop/updaterAdapter.js +49 -2
- package/build/desktop/updaterAdapter.js.map +1 -1
- package/build/renderer/assets/{ActiveSessionPermissionChip-BRMLwkvf.js → ActiveSessionPermissionChip-Dl2UOFgh.js} +1 -1
- package/build/renderer/assets/{App-BM2nzo6s.js → App-C57f4p8k.js} +1 -1
- package/build/renderer/assets/{App-CVQAwCMi.js → App-CPqGDXVi.js} +1 -1
- package/build/renderer/assets/{App-Dl5FLaR_.js → App-ChvP0G9X.js} +1 -1
- package/build/renderer/assets/{WorkspaceAppRoutes-C3DUzdbj.js → WorkspaceAppRoutes-DYg2vnjz.js} +1 -1
- package/build/renderer/assets/{app-hP5h2jAt.js → app-DVN9Ghrk.js} +3 -3
- package/build/renderer/assets/{conversationSidebarRecentEntries-B-mNvfiy.js → conversationSidebarRecentEntries-XZVCnMLw.js} +1 -1
- package/build/renderer/assets/{useDraftSessionChips-DuXIoptW.js → useDraftSessionChips-By3XXabI.js} +1 -1
- package/build/renderer/index.html +1 -1
- package/build/server/shared/providerCatalog.d.ts +2 -2
- package/build/server/shared/providerCatalog.d.ts.map +1 -1
- package/build/server/shared/providerCatalogData.d.ts +11 -1
- package/build/server/shared/providerCatalogData.d.ts.map +1 -1
- package/build/server/shared/providerCatalogData.js +8 -0
- package/build/server/shared/providerCatalogData.js.map +1 -1
- package/build/server/shared/providerCatalogInstances.d.ts.map +1 -1
- package/build/server/shared/providerCatalogInstances.js +6 -0
- package/build/server/shared/providerCatalogInstances.js.map +1 -1
- package/package.json +6 -3
- package/scripts/README.md +51 -2
- package/scripts/linux/install-aider.sh +8 -0
- package/scripts/linux/install-cline.sh +8 -0
- package/scripts/linux/install-devin.sh +8 -0
- package/scripts/linux/install-grok.sh +8 -0
- package/scripts/linux/install-pi.sh +1 -1
- package/scripts/linux/node-cli-common.sh +43 -3
- package/scripts/linux/provider-cli-common.sh +162 -24
- package/scripts/linux/test-linux-package-smoke.sh +16 -0
- package/scripts/linux/upgrade-cli-tools.sh +2 -2
- package/scripts/macos/install-aider.sh +8 -0
- package/scripts/macos/install-cline.sh +8 -0
- package/scripts/macos/install-devin.sh +8 -0
- package/scripts/macos/install-grok.sh +8 -0
- package/scripts/macos/install-pi.sh +1 -1
- package/scripts/macos/node-cli-common.sh +43 -3
- package/scripts/macos/provider-cli-common.sh +162 -24
- package/scripts/macos/test-macos-package-smoke.sh +15 -0
- package/scripts/macos/upgrade-cli-tools.sh +2 -2
- package/scripts/windows/Check-WindowsSetupReadiness.ps1 +32 -1
- package/scripts/windows/Install-Aider.ps1 +368 -0
- package/scripts/windows/Install-Cline.ps1 +39 -0
- package/scripts/windows/Install-Devin.ps1 +385 -0
- package/scripts/windows/Install-Grok.ps1 +355 -0
- package/scripts/windows/Install-Pi.ps1 +1 -1
- package/scripts/windows/Test-WindowsInstallerSmoke.ps1 +23 -0
- package/scripts/windows/_NpmCliInstaller.ps1 +41 -0
|
@@ -50,6 +50,9 @@ platform_label() {
|
|
|
50
50
|
provider_display_name() {
|
|
51
51
|
case "$1" in
|
|
52
52
|
antigravity) printf '%s\n' 'Antigravity CLI' ;;
|
|
53
|
+
grok) printf '%s\n' 'Grok CLI' ;;
|
|
54
|
+
devin) printf '%s\n' 'Devin CLI' ;;
|
|
55
|
+
aider) printf '%s\n' 'Aider' ;;
|
|
53
56
|
claude) printf '%s\n' 'Claude Code CLI' ;;
|
|
54
57
|
cursor) printf '%s\n' 'Cursor Agent CLI' ;;
|
|
55
58
|
goose) printf '%s\n' 'Goose CLI' ;;
|
|
@@ -62,6 +65,9 @@ provider_display_name() {
|
|
|
62
65
|
provider_primary_command() {
|
|
63
66
|
case "$1" in
|
|
64
67
|
antigravity) printf '%s\n' 'agy' ;;
|
|
68
|
+
grok) printf '%s\n' 'grok' ;;
|
|
69
|
+
devin) printf '%s\n' 'devin' ;;
|
|
70
|
+
aider) printf '%s\n' 'aider' ;;
|
|
65
71
|
claude) printf '%s\n' 'claude' ;;
|
|
66
72
|
cursor) printf '%s\n' 'cursor-agent' ;;
|
|
67
73
|
goose) printf '%s\n' 'goose' ;;
|
|
@@ -90,6 +96,9 @@ provider_alias_target() {
|
|
|
90
96
|
provider_install_url() {
|
|
91
97
|
case "$1" in
|
|
92
98
|
antigravity) printf '%s\n' 'https://antigravity.google/cli/install.sh' ;;
|
|
99
|
+
grok) printf '%s\n' 'https://x.ai/cli/install.sh' ;;
|
|
100
|
+
devin) printf '%s\n' 'https://cli.devin.ai/install.sh' ;;
|
|
101
|
+
aider) printf '%s\n' 'https://aider.chat/install.sh' ;;
|
|
93
102
|
claude) printf '%s\n' 'https://claude.ai/install.sh' ;;
|
|
94
103
|
cursor) printf '%s\n' 'https://cursor.com/install' ;;
|
|
95
104
|
goose) printf '%s\n' 'https://github.com/block/goose/releases/download/stable/download_cli.sh' ;;
|
|
@@ -99,28 +108,25 @@ provider_install_url() {
|
|
|
99
108
|
esac
|
|
100
109
|
}
|
|
101
110
|
|
|
111
|
+
provider_install_dir() {
|
|
112
|
+
case "$1" in
|
|
113
|
+
grok) printf '%s\n' "$HOME/.grok/bin" ;;
|
|
114
|
+
*) printf '%s\n' "$HOME/.local/bin" ;;
|
|
115
|
+
esac
|
|
116
|
+
}
|
|
117
|
+
|
|
102
118
|
provider_binary_candidates() {
|
|
103
119
|
local platform="$1"
|
|
104
120
|
local provider="$2"
|
|
121
|
+
local install_dir
|
|
122
|
+
local primary_command
|
|
123
|
+
|
|
124
|
+
install_dir="$(provider_install_dir "$provider")"
|
|
125
|
+
primary_command="$(provider_primary_command "$provider")"
|
|
126
|
+
printf '%s\n' "$install_dir/$primary_command"
|
|
105
127
|
|
|
106
128
|
case "$provider" in
|
|
107
|
-
antigravity)
|
|
108
|
-
printf '%s\n' "$HOME/.local/bin/agy"
|
|
109
|
-
;;
|
|
110
|
-
claude)
|
|
111
|
-
printf '%s\n' "$HOME/.local/bin/claude"
|
|
112
|
-
;;
|
|
113
|
-
cursor)
|
|
114
|
-
printf '%s\n' "$HOME/.local/bin/cursor-agent"
|
|
115
|
-
;;
|
|
116
|
-
goose)
|
|
117
|
-
printf '%s\n' "$HOME/.local/bin/goose"
|
|
118
|
-
;;
|
|
119
|
-
junie)
|
|
120
|
-
printf '%s\n' "$HOME/.local/bin/junie"
|
|
121
|
-
;;
|
|
122
129
|
kiro)
|
|
123
|
-
printf '%s\n' "$HOME/.local/bin/kiro-cli"
|
|
124
130
|
printf '%s\n' '/usr/local/bin/kiro-cli'
|
|
125
131
|
printf '%s\n' '/opt/homebrew/bin/kiro-cli'
|
|
126
132
|
if [ "$platform" = 'macos' ]; then
|
|
@@ -169,11 +175,21 @@ prepend_path_if_missing() {
|
|
|
169
175
|
fi
|
|
170
176
|
}
|
|
171
177
|
|
|
172
|
-
|
|
178
|
+
ensure_provider_bin_path_export() {
|
|
173
179
|
local shell_rc="$1"
|
|
180
|
+
local provider="$2"
|
|
181
|
+
local install_dir
|
|
182
|
+
local path_export
|
|
183
|
+
|
|
184
|
+
install_dir="$(provider_install_dir "$provider")"
|
|
185
|
+
if [ "$provider" = 'grok' ]; then
|
|
186
|
+
path_export='export PATH="$HOME/.grok/bin:$PATH"'
|
|
187
|
+
else
|
|
188
|
+
path_export='export PATH="$HOME/.local/bin:$PATH"'
|
|
189
|
+
fi
|
|
174
190
|
append_line_if_missing "$shell_rc" '# Added by cats-platform self-hosted provider helpers' '# Added by cats-platform self-hosted provider helpers'
|
|
175
|
-
append_line_if_missing "$shell_rc"
|
|
176
|
-
prepend_path_if_missing "$
|
|
191
|
+
append_line_if_missing "$shell_rc" "$path_export" "$path_export"
|
|
192
|
+
prepend_path_if_missing "$install_dir"
|
|
177
193
|
}
|
|
178
194
|
|
|
179
195
|
rewrite_alias_line() {
|
|
@@ -263,6 +279,56 @@ provider_version_line() {
|
|
|
263
279
|
"$command_path" --version 2>&1 | head -1 || true
|
|
264
280
|
}
|
|
265
281
|
|
|
282
|
+
# Devin's official install.sh ends by launching the interactive `devin setup`
|
|
283
|
+
# wizard. Packaged setup runs non-interactively with no console a prompt can
|
|
284
|
+
# reach, so an unstripped installer would stall the step rather than fail.
|
|
285
|
+
#
|
|
286
|
+
# Verified against https://cli.devin.ai/install.sh on 2026-08-09: the file is
|
|
287
|
+
# 286 lines and its final line is
|
|
288
|
+
# "$VERSION_DIR/bin/$COMPILED_BIN_NAME" setup
|
|
289
|
+
# which is also the only line in the file ending in " setup".
|
|
290
|
+
#
|
|
291
|
+
# The helper neutralises exactly that line and refuses to run the script when
|
|
292
|
+
# the shape does not match, rather than executing an unrecognised installer on
|
|
293
|
+
# a guess. stdin from /dev/null stays as insurance for any prompt added earlier
|
|
294
|
+
# in the script.
|
|
295
|
+
run_devin_installer() {
|
|
296
|
+
local installer_path=''
|
|
297
|
+
local patched_path=''
|
|
298
|
+
local trailing_matches=0
|
|
299
|
+
local status=0
|
|
300
|
+
|
|
301
|
+
installer_path="$(mktemp)"
|
|
302
|
+
patched_path="$(mktemp)"
|
|
303
|
+
|
|
304
|
+
if ! curl -fsSL "$(provider_install_url devin)" -o "$installer_path"; then
|
|
305
|
+
rm -f "$installer_path" "$patched_path"
|
|
306
|
+
printf 'Failed to download the Devin installer.\n' >&2
|
|
307
|
+
return 1
|
|
308
|
+
fi
|
|
309
|
+
|
|
310
|
+
trailing_matches="$(grep -cE ' setup$' "$installer_path" || true)"
|
|
311
|
+
if [ "$trailing_matches" != '1' ]; then
|
|
312
|
+
rm -f "$installer_path" "$patched_path"
|
|
313
|
+
printf 'Refusing to run the Devin installer: expected exactly one interactive setup invocation, found %s. Install Devin with the upstream installer and report this.\n' \
|
|
314
|
+
"$trailing_matches" >&2
|
|
315
|
+
return 1
|
|
316
|
+
fi
|
|
317
|
+
|
|
318
|
+
# Restrict the edit to the final line so an unrelated match elsewhere can
|
|
319
|
+
# never be silently rewritten.
|
|
320
|
+
sed -e '$ s|^.* setup$|: skipped interactive devin setup|' "$installer_path" > "$patched_path"
|
|
321
|
+
if cmp -s "$installer_path" "$patched_path"; then
|
|
322
|
+
rm -f "$installer_path" "$patched_path"
|
|
323
|
+
printf 'Refusing to run the Devin installer: the interactive setup invocation is no longer the final line.\n' >&2
|
|
324
|
+
return 1
|
|
325
|
+
fi
|
|
326
|
+
|
|
327
|
+
bash "$patched_path" < /dev/null || status=$?
|
|
328
|
+
rm -f "$installer_path" "$patched_path"
|
|
329
|
+
return "$status"
|
|
330
|
+
}
|
|
331
|
+
|
|
266
332
|
run_remote_pipe_installer() {
|
|
267
333
|
local provider="$1"
|
|
268
334
|
shift
|
|
@@ -270,12 +336,15 @@ run_remote_pipe_installer() {
|
|
|
270
336
|
url="$(provider_install_url "$provider")"
|
|
271
337
|
|
|
272
338
|
case "$provider" in
|
|
273
|
-
antigravity)
|
|
339
|
+
antigravity|grok)
|
|
274
340
|
curl -fsSL "$url" | bash
|
|
275
341
|
;;
|
|
276
342
|
goose)
|
|
277
343
|
curl -fsSL "$url" | env CONFIGURE=false bash
|
|
278
344
|
;;
|
|
345
|
+
aider)
|
|
346
|
+
curl -LsSf "$url" | sh
|
|
347
|
+
;;
|
|
279
348
|
cursor)
|
|
280
349
|
curl "$url" -fsSL | bash
|
|
281
350
|
;;
|
|
@@ -349,6 +418,15 @@ run_provider_install_action() {
|
|
|
349
418
|
run_remote_pipe_installer "$provider"
|
|
350
419
|
fi
|
|
351
420
|
;;
|
|
421
|
+
grok)
|
|
422
|
+
run_remote_pipe_installer "$provider"
|
|
423
|
+
;;
|
|
424
|
+
devin)
|
|
425
|
+
run_devin_installer
|
|
426
|
+
;;
|
|
427
|
+
aider)
|
|
428
|
+
run_remote_pipe_installer "$provider"
|
|
429
|
+
;;
|
|
352
430
|
claude)
|
|
353
431
|
if [ "$action" = 'upgrade' ] && current_command="$(detect_provider_command "$platform" "$provider")"; then
|
|
354
432
|
"$current_command" update || true
|
|
@@ -399,6 +477,20 @@ __CATS_UNINSTALL_APPLIED=()
|
|
|
399
477
|
__CATS_UNINSTALL_WARNINGS=()
|
|
400
478
|
__CATS_UNINSTALL_REMAINING=''
|
|
401
479
|
|
|
480
|
+
# Steps the helper cannot perform for the user. Packaged Devin installs strip
|
|
481
|
+
# the installer's trailing interactive wizard, so authentication is always still
|
|
482
|
+
# owed after a successful install; a "ready" result must not imply otherwise.
|
|
483
|
+
provider_manual_steps() {
|
|
484
|
+
case "$1" in
|
|
485
|
+
devin)
|
|
486
|
+
printf '%s\n' 'Run devin auth login once to authenticate; packaged setup skips the interactive wizard. Check with devin auth status.'
|
|
487
|
+
;;
|
|
488
|
+
*)
|
|
489
|
+
:
|
|
490
|
+
;;
|
|
491
|
+
esac
|
|
492
|
+
}
|
|
493
|
+
|
|
402
494
|
uninstall_provider_native_paths() {
|
|
403
495
|
local platform="$1"
|
|
404
496
|
local provider="$2"
|
|
@@ -413,7 +505,7 @@ uninstall_provider_native_paths() {
|
|
|
413
505
|
local planned_paths=()
|
|
414
506
|
|
|
415
507
|
primary_command="$(provider_primary_command "$provider")"
|
|
416
|
-
if primary_path="$(command -v "$primary_command" 2>/dev/null)"; then
|
|
508
|
+
if [ "$provider" != 'grok' ] && primary_path="$(command -v "$primary_command" 2>/dev/null)"; then
|
|
417
509
|
case "$primary_path" in
|
|
418
510
|
"$HOME"/*) planned_paths+=("$primary_path") ;;
|
|
419
511
|
esac
|
|
@@ -447,6 +539,50 @@ UPNP_EOF
|
|
|
447
539
|
fi
|
|
448
540
|
fi
|
|
449
541
|
|
|
542
|
+
if [ "$provider" = 'grok' ]; then
|
|
543
|
+
extra="$(provider_install_dir "$provider")/agent"
|
|
544
|
+
if [ -e "$extra" ] || [ -L "$extra" ]; then
|
|
545
|
+
planned_paths+=("$extra")
|
|
546
|
+
fi
|
|
547
|
+
fi
|
|
548
|
+
|
|
549
|
+
# Devin's shim in ~/.local/bin points at a versioned tree; removing only the
|
|
550
|
+
# shim would leave every installed version behind.
|
|
551
|
+
if [ "$provider" = 'devin' ]; then
|
|
552
|
+
extra="${XDG_DATA_HOME:-$HOME/.local/share}/devin/cli"
|
|
553
|
+
case "$extra" in
|
|
554
|
+
"$HOME"/*)
|
|
555
|
+
if [ -d "$extra" ]; then
|
|
556
|
+
planned_paths+=("$extra")
|
|
557
|
+
fi
|
|
558
|
+
;;
|
|
559
|
+
esac
|
|
560
|
+
fi
|
|
561
|
+
|
|
562
|
+
# ~/.local/bin/aider is a uv tool shim, not the tool. Removing only the shim
|
|
563
|
+
# leaves aider-chat installed in the uv tool environment and the shim
|
|
564
|
+
# regenerable by any later `uv tool` command, so the tool is uninstalled
|
|
565
|
+
# through uv first and path removal only mops up what uv left behind.
|
|
566
|
+
#
|
|
567
|
+
# The uv binary itself is deliberately left in place: Aider's installer drops
|
|
568
|
+
# its own uv into ~/.local/bin, users commonly have another, and the helper
|
|
569
|
+
# cannot tell them apart. Removing a uv the user installed separately is a
|
|
570
|
+
# destructive false positive, so this warns instead (SPEC-112 PD4).
|
|
571
|
+
if [ "$provider" = 'aider' ]; then
|
|
572
|
+
if command -v uv >/dev/null 2>&1; then
|
|
573
|
+
if [ "$dry_run" = 'true' ]; then
|
|
574
|
+
__CATS_UNINSTALL_PLANNED+=("uv_tool_uninstall:aider-chat")
|
|
575
|
+
elif uv tool uninstall aider-chat >/dev/null 2>&1; then
|
|
576
|
+
__CATS_UNINSTALL_APPLIED+=("uv_tool_uninstalled:aider-chat")
|
|
577
|
+
else
|
|
578
|
+
__CATS_UNINSTALL_WARNINGS+=("uv_tool_uninstall_failed:aider-chat")
|
|
579
|
+
fi
|
|
580
|
+
else
|
|
581
|
+
__CATS_UNINSTALL_WARNINGS+=("uv_missing_aider_chat_may_remain")
|
|
582
|
+
fi
|
|
583
|
+
__CATS_UNINSTALL_WARNINGS+=("bundled_uv_left_in_place_provenance_unknown")
|
|
584
|
+
fi
|
|
585
|
+
|
|
450
586
|
for path in "${planned_paths[@]}"; do
|
|
451
587
|
__CATS_UNINSTALL_PLANNED+=("remove:$path")
|
|
452
588
|
done
|
|
@@ -683,7 +819,7 @@ run_native_provider_installer() {
|
|
|
683
819
|
fi
|
|
684
820
|
|
|
685
821
|
if [ "$force" = 'false' ] && [ "$upgrade" = 'false' ]; then
|
|
686
|
-
|
|
822
|
+
ensure_provider_bin_path_export "$shell_rc" "$provider"
|
|
687
823
|
ensure_provider_alias "$shell_rc" "$provider"
|
|
688
824
|
if [ "$emit_json" = 'true' ]; then
|
|
689
825
|
printf '{'
|
|
@@ -787,7 +923,7 @@ run_native_provider_installer() {
|
|
|
787
923
|
fi
|
|
788
924
|
applied_changes=("${planned_actions[@]}")
|
|
789
925
|
|
|
790
|
-
|
|
926
|
+
ensure_provider_bin_path_export "$shell_rc" "$provider"
|
|
791
927
|
ensure_provider_alias "$shell_rc" "$provider"
|
|
792
928
|
|
|
793
929
|
while [ $attempt -le 3 ]; do
|
|
@@ -811,7 +947,9 @@ run_native_provider_installer() {
|
|
|
811
947
|
printf '"warnings":'
|
|
812
948
|
json_string_array "${warnings[@]}"
|
|
813
949
|
printf ','
|
|
814
|
-
printf '"manualSteps":
|
|
950
|
+
printf '"manualSteps":'
|
|
951
|
+
json_string_array "$(provider_manual_steps "$provider")"
|
|
952
|
+
printf ','
|
|
815
953
|
printf '"interruptions":[]'
|
|
816
954
|
printf '}\n'
|
|
817
955
|
else
|
|
@@ -50,6 +50,10 @@ assert_file "${RESOURCES_ROOT}/desktop/setup-assets/macos/install-github-cli.sh"
|
|
|
50
50
|
assert_file "${RESOURCES_ROOT}/desktop/setup-assets/macos/setup-node-global-prefix.sh" 'bundled macOS npm prefix helper'
|
|
51
51
|
assert_file "${RESOURCES_ROOT}/desktop/setup-assets/macos/install-codex.sh" 'bundled macOS OpenAI Codex installer helper'
|
|
52
52
|
assert_file "${RESOURCES_ROOT}/desktop/setup-assets/macos/install-antigravity.sh" 'bundled macOS Antigravity installer helper'
|
|
53
|
+
assert_file "${RESOURCES_ROOT}/desktop/setup-assets/macos/install-grok.sh" 'bundled macOS Grok installer helper'
|
|
54
|
+
assert_file "${RESOURCES_ROOT}/desktop/setup-assets/macos/install-cline.sh" 'bundled macOS Cline installer helper'
|
|
55
|
+
assert_file "${RESOURCES_ROOT}/desktop/setup-assets/macos/install-devin.sh" 'bundled macOS Devin installer helper'
|
|
56
|
+
assert_file "${RESOURCES_ROOT}/desktop/setup-assets/macos/install-aider.sh" 'bundled macOS Aider installer helper'
|
|
53
57
|
assert_file "${RESOURCES_ROOT}/desktop/setup-assets/macos/install-copilot.sh" 'bundled macOS GitHub Copilot installer helper'
|
|
54
58
|
assert_file "${RESOURCES_ROOT}/desktop/setup-assets/macos/install-opencode.sh" 'bundled macOS OpenCode installer helper'
|
|
55
59
|
assert_file "${RESOURCES_ROOT}/desktop/setup-assets/macos/install-kilo.sh" 'bundled macOS Kilo Code installer helper'
|
|
@@ -66,6 +70,12 @@ assert_file "${RESOURCES_ROOT}/desktop/setup-assets/macos/node-cli-common.sh" 'b
|
|
|
66
70
|
assert_file "${RESOURCES_ROOT}/desktop/setup-assets/manifest.json" 'bundled setup-assets manifest'
|
|
67
71
|
assert_file "${PLAN_PATH}" 'bundled desktop packaging plan'
|
|
68
72
|
|
|
73
|
+
GROK_HELPER="${RESOURCES_ROOT}/desktop/setup-assets/macos/install-grok.sh"
|
|
74
|
+
bash "${GROK_HELPER}" --check --json >/dev/null
|
|
75
|
+
pass 'bundled macOS Grok helper check mode completed'
|
|
76
|
+
bash "${GROK_HELPER}" --force --dry-run --json >/dev/null
|
|
77
|
+
pass 'bundled macOS Grok helper dry-run mode completed'
|
|
78
|
+
|
|
69
79
|
node - <<'NODE' "${PLAN_PATH}"
|
|
70
80
|
const fs = require('node:fs');
|
|
71
81
|
|
|
@@ -89,10 +99,15 @@ assert(macTarget.installerFormats.includes('pkg'), 'macOS target includes pkg pa
|
|
|
89
99
|
assert(macTarget.artifacts.some((artifact) => artifact.id === 'macos-opencode-native-installer-script'), 'macOS target includes the bundled OpenCode installer asset');
|
|
90
100
|
assert(macTarget.artifacts.some((artifact) => artifact.id === 'macos-codex-native-installer-script'), 'macOS target includes the bundled OpenAI Codex installer asset');
|
|
91
101
|
assert(macTarget.artifacts.some((artifact) => artifact.id === 'macos-antigravity-native-installer-script'), 'macOS target includes the bundled Antigravity installer asset');
|
|
102
|
+
assert(macTarget.artifacts.some((artifact) => artifact.id === 'macos-grok-native-installer-script'), 'macOS target includes the bundled Grok installer asset');
|
|
103
|
+
assert(macTarget.artifacts.some((artifact) => artifact.id === 'macos-cline-native-installer-script'), 'macOS target includes the bundled Cline installer asset');
|
|
104
|
+
assert(macTarget.artifacts.some((artifact) => artifact.id === 'macos-devin-native-installer-script'), 'macOS target includes the bundled Devin installer asset');
|
|
105
|
+
assert(macTarget.artifacts.some((artifact) => artifact.id === 'macos-aider-native-installer-script'), 'macOS target includes the bundled Aider installer asset');
|
|
92
106
|
assert(macTarget.artifacts.some((artifact) => artifact.id === 'macos-setup-readiness-audit-script'), 'macOS target includes the bundled readiness audit asset');
|
|
93
107
|
assert(macTarget.artifacts.some((artifact) => artifact.id === 'macos-provider-cli-common-support-script'), 'macOS target includes the macOS provider helper asset');
|
|
94
108
|
assert(macTarget.artifacts.some((artifact) => artifact.id === 'macos-node-cli-common-support-script'), 'macOS target includes the macOS npm helper asset');
|
|
95
109
|
assert(plan.installer.providerSetup.localProviders.some((provider) => provider.id === 'kiro' && provider.platform === 'macos'), 'installer contract keeps Kiro in the macOS bundled local-provider rollout');
|
|
110
|
+
assert(plan.installer.providerSetup.localProviders.some((provider) => provider.id === 'cline' && provider.platform === 'macos'), 'installer contract keeps Cline in the macOS bundled local-provider rollout');
|
|
96
111
|
assert(plan.installer.providerSetup.helperCatalog.some((helper) => helper.id === 'macos-install-readiness-audit'), 'installer contract includes macOS readiness helper metadata');
|
|
97
112
|
assert(!plan.installer.providerSetup.helperCatalog.some((helper) => helper.id === 'windows-install-readiness-audit'), 'installer contract omits Windows-only helper metadata from the macOS package');
|
|
98
113
|
NODE
|
|
@@ -35,12 +35,12 @@ while [ $# -gt 0 ]; do
|
|
|
35
35
|
shift
|
|
36
36
|
done
|
|
37
37
|
|
|
38
|
-
for script_name in install-claude-code.sh install-antigravity.sh install-cursor-agent.sh install-goose.sh install-junie.sh install-kiro-cli.sh; do
|
|
38
|
+
for script_name in install-claude-code.sh install-antigravity.sh install-cursor-agent.sh install-devin.sh install-aider.sh install-goose.sh install-junie.sh install-kiro-cli.sh install-grok.sh; do
|
|
39
39
|
"$SCRIPT_DIR/$script_name" -Upgrade
|
|
40
40
|
done
|
|
41
41
|
|
|
42
42
|
if [ "$skip_node" = 'false' ]; then
|
|
43
|
-
for script_name in install-codex.sh install-copilot.sh install-opencode.sh install-kilo.sh install-auggie.sh install-pi.sh; do
|
|
43
|
+
for script_name in install-codex.sh install-copilot.sh install-opencode.sh install-kilo.sh install-auggie.sh install-pi.sh install-cline.sh; do
|
|
44
44
|
"$SCRIPT_DIR/$script_name" -upgrade
|
|
45
45
|
done
|
|
46
46
|
fi
|
|
@@ -72,6 +72,9 @@
|
|
|
72
72
|
.PARAMETER AntigravityInstallState
|
|
73
73
|
Override Antigravity CLI installation detection for deterministic tests.
|
|
74
74
|
|
|
75
|
+
.PARAMETER GrokInstallState
|
|
76
|
+
Override Grok CLI installation detection for deterministic tests.
|
|
77
|
+
|
|
75
78
|
.PARAMETER GooseInstallState
|
|
76
79
|
Override Goose installation detection for deterministic tests.
|
|
77
80
|
|
|
@@ -115,6 +118,8 @@ param(
|
|
|
115
118
|
[ValidateSet('auto', 'installed', 'missing')]
|
|
116
119
|
[string]$AntigravityInstallState = 'auto',
|
|
117
120
|
[ValidateSet('auto', 'installed', 'missing')]
|
|
121
|
+
[string]$GrokInstallState = 'auto',
|
|
122
|
+
[ValidateSet('auto', 'installed', 'missing')]
|
|
118
123
|
[string]$GooseInstallState = 'auto',
|
|
119
124
|
[ValidateSet('auto', 'authenticated', 'auth_required')]
|
|
120
125
|
[string]$GooseAuthState = 'auto',
|
|
@@ -352,6 +357,7 @@ $prefixHelperPath = Join-Path $PSScriptRoot 'Setup-NodeGlobalPrefix.ps1'
|
|
|
352
357
|
$claudeHelperPath = Join-Path $PSScriptRoot 'Install-ClaudeCode.ps1'
|
|
353
358
|
$cursorHelperPath = Join-Path $PSScriptRoot 'Install-CursorAgent.ps1'
|
|
354
359
|
$antigravityHelperPath = Join-Path $PSScriptRoot 'Install-Antigravity.ps1'
|
|
360
|
+
$grokHelperPath = Join-Path $PSScriptRoot 'Install-Grok.ps1'
|
|
355
361
|
$gooseHelperPath = Join-Path $PSScriptRoot 'Install-Goose.ps1'
|
|
356
362
|
$junieHelperPath = Join-Path $PSScriptRoot 'Install-Junie.ps1'
|
|
357
363
|
$kiroHelperPath = Join-Path $PSScriptRoot 'Install-KiroCli.ps1'
|
|
@@ -363,7 +369,8 @@ $NpmCliCatalog = @(
|
|
|
363
369
|
[pscustomobject]@{ Key = 'opencode'; ScriptName = 'Install-OpenCode.ps1'; PackageName = 'opencode-ai' },
|
|
364
370
|
[pscustomobject]@{ Key = 'kilo'; ScriptName = 'Install-KiloCli.ps1'; PackageName = '@kilocode/cli' },
|
|
365
371
|
[pscustomobject]@{ Key = 'auggie'; ScriptName = 'Install-Auggie.ps1'; PackageName = '@augmentcode/auggie' },
|
|
366
|
-
[pscustomobject]@{ Key = 'pi'; ScriptName = 'Install-Pi.ps1'; PackageName = '@
|
|
372
|
+
[pscustomobject]@{ Key = 'pi'; ScriptName = 'Install-Pi.ps1'; PackageName = '@earendil-works/pi-coding-agent' }
|
|
373
|
+
[pscustomobject]@{ Key = 'cline'; ScriptName = 'Install-Cline.ps1'; PackageName = 'cline' }
|
|
367
374
|
)
|
|
368
375
|
|
|
369
376
|
$prefixHelperArguments = @('-CheckOnly', '-Json')
|
|
@@ -470,6 +477,16 @@ if ($includeNativeProvidersEnabled) {
|
|
|
470
477
|
Arguments = $antigravityArguments
|
|
471
478
|
})
|
|
472
479
|
|
|
480
|
+
$grokArguments = @('-CheckOnly', '-Json')
|
|
481
|
+
if ($GrokInstallState -ne 'auto') {
|
|
482
|
+
$grokArguments += @('-InstallState', $GrokInstallState)
|
|
483
|
+
}
|
|
484
|
+
$helperInvocations.Add([pscustomobject]@{
|
|
485
|
+
Key = 'grok'
|
|
486
|
+
ScriptPath = $grokHelperPath
|
|
487
|
+
Arguments = $grokArguments
|
|
488
|
+
})
|
|
489
|
+
|
|
473
490
|
$gooseArguments = @('-CheckOnly', '-Json')
|
|
474
491
|
if ($GooseInstallState -ne 'auto') {
|
|
475
492
|
$gooseArguments += @('-InstallState', $GooseInstallState)
|
|
@@ -532,6 +549,7 @@ $prefixHelper = $helperResults['prefixHelper']
|
|
|
532
549
|
$claudeResult = if ($helperResults.ContainsKey('claude')) { $helperResults['claude'] } else { $null }
|
|
533
550
|
$cursorResult = if ($helperResults.ContainsKey('cursor')) { $helperResults['cursor'] } else { $null }
|
|
534
551
|
$antigravityResult = if ($helperResults.ContainsKey('antigravity')) { $helperResults['antigravity'] } else { $null }
|
|
552
|
+
$grokResult = if ($helperResults.ContainsKey('grok')) { $helperResults['grok'] } else { $null }
|
|
535
553
|
$gooseResult = if ($helperResults.ContainsKey('goose')) { $helperResults['goose'] } else { $null }
|
|
536
554
|
$junieResult = if ($helperResults.ContainsKey('junie')) { $helperResults['junie'] } else { $null }
|
|
537
555
|
$kiroResult = if ($helperResults.ContainsKey('kiro')) { $helperResults['kiro'] } else { $null }
|
|
@@ -617,6 +635,9 @@ if ($null -ne $cursorResult) {
|
|
|
617
635
|
if ($null -ne $antigravityResult) {
|
|
618
636
|
$statuses += $antigravityResult.status
|
|
619
637
|
}
|
|
638
|
+
if ($null -ne $grokResult) {
|
|
639
|
+
$statuses += $grokResult.status
|
|
640
|
+
}
|
|
620
641
|
if ($null -ne $gooseResult) {
|
|
621
642
|
$statuses += $gooseResult.status
|
|
622
643
|
}
|
|
@@ -666,6 +687,9 @@ if ($null -ne $cursorResult) {
|
|
|
666
687
|
if ($null -ne $antigravityResult -and $antigravityResult.status -eq 'not_installed') {
|
|
667
688
|
$plannedActions.Add('provider:install_antigravity_native')
|
|
668
689
|
}
|
|
690
|
+
if ($null -ne $grokResult -and $grokResult.status -eq 'not_installed') {
|
|
691
|
+
$plannedActions.Add('provider:install_grok_native')
|
|
692
|
+
}
|
|
669
693
|
if ($null -ne $gooseResult) {
|
|
670
694
|
if ($gooseResult.status -eq 'not_installed') {
|
|
671
695
|
$plannedActions.Add('provider:install_goose_native')
|
|
@@ -716,6 +740,11 @@ if ($null -ne $antigravityResult) {
|
|
|
716
740
|
$warnings.Add([string]$warning)
|
|
717
741
|
}
|
|
718
742
|
}
|
|
743
|
+
if ($null -ne $grokResult) {
|
|
744
|
+
foreach ($warning in $grokResult.warnings) {
|
|
745
|
+
$warnings.Add([string]$warning)
|
|
746
|
+
}
|
|
747
|
+
}
|
|
719
748
|
if ($null -ne $gooseResult) {
|
|
720
749
|
foreach ($warning in $gooseResult.warnings) {
|
|
721
750
|
$warnings.Add([string]$warning)
|
|
@@ -767,6 +796,7 @@ Add-InterruptionsFromResult -HelperResult $nativeCliPack
|
|
|
767
796
|
Add-InterruptionsFromResult -HelperResult $claudeResult
|
|
768
797
|
Add-InterruptionsFromResult -HelperResult $cursorResult
|
|
769
798
|
Add-InterruptionsFromResult -HelperResult $antigravityResult
|
|
799
|
+
Add-InterruptionsFromResult -HelperResult $grokResult
|
|
770
800
|
Add-InterruptionsFromResult -HelperResult $gooseResult
|
|
771
801
|
Add-InterruptionsFromResult -HelperResult $junieResult
|
|
772
802
|
Add-InterruptionsFromResult -HelperResult $kiroResult
|
|
@@ -815,6 +845,7 @@ $result = [pscustomobject]@{
|
|
|
815
845
|
claude = $claudeResult
|
|
816
846
|
cursor = $cursorResult
|
|
817
847
|
antigravity = $antigravityResult
|
|
848
|
+
grok = $grokResult
|
|
818
849
|
goose = $gooseResult
|
|
819
850
|
junie = $junieResult
|
|
820
851
|
kiro = $kiroResult
|