Merge pull request #9625 from spencerbull/t3code/add-perplexity-ai-app
Add the Perplexity desktop app to Install > AI
(cherry picked from commit f1b065c292)
(cherry picked from commit 680930915eaba8c3741980c56ad160a40c50bcb9)
This commit is contained in:
1 parent
27594ba3f5
commit
6cb5396dc7
7 files changed
+153
-3
No files matched your search
@@ -516,5 +516,5 @@ assert(
|
||||
JS
|
||||
|
||||
font_charset=$(fc-query --format='%{charset}' "$ROOT/default/fonts/omarchy/omarchy.ttf")
|
||||
[[ $font_charset == *"e900-e908 e90a e90c"* ]] || fail "Omarchy icon font includes every custom menu glyph"
|
||||
[[ $font_charset == *"e900-e908 e90a-e90c"* ]] || fail "Omarchy icon font includes every custom menu glyph"
|
||||
pass "Omarchy icon font includes the official agent marks"
|
||||
@@ -15,6 +15,22 @@ printf 'drop:%s\n' "$*" >>"$TEST_LOG"
|
||||
SCRIPT
|
||||
chmod +x "$tmp_dir/bin/omarchy-pkg-drop"
|
||||
|
||||
# omarchy-remove-ai-perplexity asks through gum whether the user's data goes
|
||||
# too. The stub answers "no" unless a test says otherwise and logs the call: a
|
||||
# real gum would hang the run, and one that answered "yes" on its own would be
|
||||
# the data loss the default-no exists to prevent. It logs to its own file
|
||||
# because the OpenClaw section below greps TEST_LOG to prove gum was never
|
||||
# reached, and the pty runs here call it on purpose.
|
||||
cat >"$tmp_dir/bin/gum" <<'SCRIPT'
|
||||
#!/bin/bash
|
||||
printf 'gum:%s\n' "$*" >>"$TEST_GUM_LOG"
|
||||
exit "${TEST_GUM_STATUS:-1}"
|
||||
SCRIPT
|
||||
chmod +x "$tmp_dir/bin/gum"
|
||||
|
||||
export TEST_GUM_LOG="$tmp_dir/gum-log"
|
||||
touch "$TEST_GUM_LOG"
|
||||
|
||||
export TEST_LOG="$tmp_dir/log"
|
||||
export PATH="$tmp_dir/bin:$PATH"
|
||||
|
||||
@@ -38,6 +54,88 @@ for kept in .grok .claude.json .npm .local/share/opencode; do
|
||||
done
|
||||
pass "T3 Code removal keeps the agent state it bootstrapped"
|
||||
|
||||
# Perplexity's other products (the CLI, Comet) share the perplexity-* prefix;
|
||||
# the desktop app owns only its rpc-server runtime and Electron caches. The
|
||||
# logins, vault, and flags are the user's and only go when a terminal said so.
|
||||
seed_perplexity() {
|
||||
fresh_home
|
||||
mkdir -p "$HOME/.config/Perplexity" "$HOME/.cache/Perplexity" \
|
||||
"$HOME/.cache/perplexity-rpc-server" "$HOME/.local/share/perplexity-rpc-server" \
|
||||
"$HOME/.local/state/perplexity" "$HOME/.cache/perplexity-personal-computer-poc"
|
||||
touch "$HOME/.config/perplexity-flags.conf"
|
||||
}
|
||||
|
||||
# </dev/null pins stdin off a terminal, so this run exercises the
|
||||
# non-interactive path no matter where the suite itself is running.
|
||||
seed_perplexity
|
||||
"$ROOT/bin/omarchy-remove-ai-perplexity" </dev/null >/dev/null
|
||||
|
||||
for gone in .cache/Perplexity .cache/perplexity-rpc-server .local/share/perplexity-rpc-server; do
|
||||
[[ ! -e $HOME/$gone ]] || fail "Perplexity removal deletes the app's runtime and caches" "$gone"
|
||||
done
|
||||
pass "Perplexity removal deletes the app's runtime and caches"
|
||||
|
||||
for kept in .config/Perplexity .local/state/perplexity .config/perplexity-flags.conf .cache/perplexity-personal-computer-poc; do
|
||||
[[ -e $HOME/$kept ]] || fail "Perplexity removal keeps the user's data and other products' caches" "$kept"
|
||||
done
|
||||
pass "Perplexity removal keeps the user's data and other products' caches"
|
||||
|
||||
grep -qx 'drop:perplexity' "$TEST_LOG" || fail "Perplexity removal drops the perplexity package"
|
||||
pass "Perplexity removal drops the perplexity package"
|
||||
|
||||
# Without a terminal there is nobody to ask, so gum must not even be reached:
|
||||
# one that answered "yes" on its own would be a data loss.
|
||||
! grep -q '^gum:' "$TEST_GUM_LOG" || fail "Perplexity removal keeps the user's data unasked when there is no terminal"
|
||||
pass "Perplexity removal keeps the user's data unasked when there is no terminal"
|
||||
|
||||
# script(1) puts the remover on a pty, the only way -t 0 answers true in a
|
||||
# test; the stubbed gum then supplies the answer.
|
||||
seed_perplexity
|
||||
script -qec "'$ROOT/bin/omarchy-remove-ai-perplexity'" /dev/null >/dev/null 2>&1
|
||||
|
||||
[[ -d $HOME/.config/Perplexity && -d $HOME/.local/state/perplexity && -f $HOME/.config/perplexity-flags.conf ]] ||
|
||||
fail "Perplexity removal keeps the user's data when the answer is no"
|
||||
pass "Perplexity removal keeps the user's data when the answer is no"
|
||||
|
||||
# The stub answers "no" on its own, so only the logged arguments prove the
|
||||
# real gum would not default to yes on a bare Enter.
|
||||
grep -q '^gum:confirm --default=false ' "$TEST_GUM_LOG" ||
|
||||
fail "Perplexity removal asks with the destructive answer defaulted off"
|
||||
pass "Perplexity removal asks with the destructive answer defaulted off"
|
||||
|
||||
# A partial install has no user data to measure; du failing must not abort
|
||||
# the removal between the package and the prompt.
|
||||
seed_perplexity
|
||||
rm -rf "$HOME/.config/Perplexity" "$HOME/.local/state/perplexity"
|
||||
script -qec "'$ROOT/bin/omarchy-remove-ai-perplexity'" /dev/null >/dev/null 2>&1 ||
|
||||
fail "Perplexity removal survives user-data directories that are already gone"
|
||||
pass "Perplexity removal survives user-data directories that are already gone"
|
||||
|
||||
# gum draws its prompt on stderr; with stderr redirected the question would be
|
||||
# invisible, so the remover must keep the data instead of blocking on it.
|
||||
seed_perplexity
|
||||
gum_calls_before=$(wc -l <"$TEST_GUM_LOG")
|
||||
script -qec "'$ROOT/bin/omarchy-remove-ai-perplexity' 2>/dev/null" /dev/null >/dev/null 2>&1 ||
|
||||
fail "Perplexity removal completes when stderr is not a terminal"
|
||||
[[ -d $HOME/.config/Perplexity ]] && (( $(wc -l <"$TEST_GUM_LOG") == gum_calls_before )) ||
|
||||
fail "Perplexity removal keeps the user's data unasked when stderr is not a terminal"
|
||||
pass "Perplexity removal keeps the user's data unasked when stderr is not a terminal"
|
||||
|
||||
seed_perplexity
|
||||
TEST_GUM_STATUS=0 script -qec "'$ROOT/bin/omarchy-remove-ai-perplexity'" /dev/null >/dev/null 2>&1
|
||||
|
||||
for gone in .config/Perplexity .local/state/perplexity .config/perplexity-flags.conf; do
|
||||
[[ ! -e $HOME/$gone ]] || fail "Perplexity removal deletes the user's data on an explicit yes" "$gone"
|
||||
done
|
||||
pass "Perplexity removal deletes the user's data on an explicit yes"
|
||||
|
||||
# Without HOME the rm -rf paths would degrade to /-rooted ones; -u makes that a
|
||||
# refusal instead.
|
||||
if env -u HOME "$ROOT/bin/omarchy-remove-ai-perplexity" </dev/null >/dev/null 2>&1; then
|
||||
fail "Perplexity removal refuses to run without HOME"
|
||||
fi
|
||||
pass "Perplexity removal refuses to run without HOME"
|
||||
|
||||
# OpenClaw's gateway unit and web app launcher are the app's own; the agent
|
||||
# state in ~/.openclaw is the user's. systemctl and openclaw are stubbed so the
|
||||
# sandbox never reaches the real user manager or a real gateway.
|
||||
|
||||
Reference in new issue
Block a user