mirror of
https://bitbucket.org/siakitem/my-pi.git
synced 2026-08-28 06:45:59 +00:00
feat: add bundle install and uninstall scripts
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
# CodeGraph data files — local to each machine, not for committing.
|
||||
# Ignore everything in .codegraph/ except this file itself, so transient
|
||||
# files (the database, daemon.pid, sockets, logs) never show up in git.
|
||||
*
|
||||
!.gitignore
|
||||
@@ -1,6 +1,6 @@
|
||||
# 仓库说明
|
||||
|
||||
本仓库用于维护可通过一次 `pi install` 部署的个人 Pi 扩展组合包。根 `package.json` 是唯一安装入口;依赖、默认行为和必要配置必须由组合包自身声明或部署,不把安装后的手工配置作为默认流程。每个自维护扩展使用独立的顶层目录,扩展源码、测试和说明应保留在各自目录内。
|
||||
本仓库用于维护可通过一次 `pi install` 部署的个人 Pi 扩展组合包。根 `package.json` 是唯一的组合包安装入口;根 `install.sh` 和 `uninstall.sh` 只是对 `pi install` / `pi remove` 的便捷包装,不形成第二套部署机制。依赖、默认行为和必要配置必须由组合包自身声明或部署,不把安装后的手工配置作为默认流程。每个自维护扩展使用独立的顶层目录,扩展源码、测试和说明应保留在各自目录内。
|
||||
|
||||
## 当前扩展
|
||||
|
||||
@@ -19,6 +19,8 @@
|
||||
- `@ogulcancelik/pi-auto-permissions@0.1.3`:根据当前对话复核配置命中的 Bash 命令,不是全工具审批层。
|
||||
- `@ogulcancelik/pi-codex-compaction@0.1.3`:为 `openai-codex` 提供原生远程 compaction,默认阈值为 90%。
|
||||
- 根包还固定安装 `pi-context-view`、`@firstpick/pi-extension-codex-fast-mode` 和 `@gotgenes/pi-permission-system`。
|
||||
- `install.sh`:先安装根组合包,再交互检查 CodeGraph、Kotlin LSP、Java 21+ 和 JDT LS;缺失依赖只在用户明确选择 `Y` 后安装。
|
||||
- `uninstall.sh`:只移除根组合包,不卸载可能被其他项目共享的 CodeGraph、Kotlin LSP、JDT LS 或 Java。
|
||||
|
||||
## 当前职责与默认行为
|
||||
|
||||
@@ -28,7 +30,7 @@
|
||||
- `readCompaction.enabled`、`sourceCodeFilteringEnabled` 和 `smartTruncate.enabled` 当前均默认 `false`,源码读取保持原样。未经用户明确决定,不因节省上下文而改变这些默认值。
|
||||
- 若以后开启 read 压缩,优先考虑 `readCompaction + smartTruncate`,源码过滤仍独立评估;必须保留精确 `offset/limit` 读取、短文件和行锚点的完整性。
|
||||
- Context Mode 负责避免批量读取、命令研究和网页原始内容直接撑大上下文;FFF 仍负责精确字面搜索,RTK 仍处理未走 Context Mode 的普通输出。
|
||||
- CodeGraph 只配置 Pi 到外部 `codegraph` 命令的 MCP 连接。组合包不安装 CodeGraph,不执行 `codegraph init`,不创建或管理 `.codegraph/`,也不改动索引、更新或遥测设置。
|
||||
- CodeGraph 扩展只配置 Pi 到外部 `codegraph` 命令的 MCP 连接。根包安装本身不安装 CodeGraph;便捷脚本仅在组合包安装完成且用户明确选择 `Y` 后调用官方安装器。仓库不执行 `codegraph init`,不创建或管理 `.codegraph/`,也不改动索引、更新或遥测设置。
|
||||
- CodeGraph MCP 使用 `keep-alive` 并只直接暴露 `codegraph_explore`;命令缺失、项目未初始化或连接失败时不得阻止其他扩展加载。
|
||||
- `pi-context-view` 只观察上下文占用,不参与压缩策略。
|
||||
- Codex fast mode 只为符合条件的 `openai-codex-responses` 请求设置 priority service tier,由 `/fast-mode` 在会话内控制。
|
||||
@@ -37,8 +39,11 @@
|
||||
- 两个权限扩展是彼此独立的 `tool_call` gate。若同一 Bash 命令同时命中 Auto Permissions 规则和 `pi-permission-system` 的 `ask`,会依次经过两层审批,而不是把旧系统的请求转交给 guardian;配置时不得为同一 Bash 类别重复设置审批。
|
||||
- 当前只把 Git 非只读操作和包管理类 Bash 命令交给 `pi-auto-permissions` 根据用户上下文复核。低风险操作可自动允许;中风险操作仅在用户明确授权目标与约束时自动允许;高风险操作即使已有概括授权也必须回到用户确认。文件/系统/网络高风险操作继续由现有解析能力更强的 `pi-permission-system` 处理。
|
||||
- 将 Auto Permissions 规则配置为 `.*` 最多只能复核所有 Bash 命令,不能覆盖其他工具,并会为普通 Bash 调用增加额外模型请求、延迟和成本。若未来目标是让现有所有 `ask` 先经模型裁决,必须另行实现 `pi-permission-system` authorizer 集成,不能仅靠该 npm 包配置实现。
|
||||
- `pi-lsp` 使用组合包部署的 `kotlin-lsp --stdio` 与 `jdtls` 配置,但不安装这两个系统可执行文件。
|
||||
- `pi-lsp` 使用组合包部署的 `kotlin-lsp --stdio` 与 `jdtls` 配置,但根包安装本身不安装这两个系统可执行文件;便捷脚本可在用户逐项明确确认后通过 Homebrew 安装 Kotlin LSP、Java 21 和 JDT LS。
|
||||
- Codex 远程压缩只对 `openai-codex` 生效,默认在 turn boundary 达到 90% 时触发;Hermes Memory 默认使用 policy-only 模式。
|
||||
- `install.sh` 默认从 `git:git@bitbucket.org:siakitem/my-pi.git` 安装,并允许用 `PI_PACKAGE_SOURCE` 覆盖来源;组合包安装失败时立即停止,机器级依赖安装失败时继续检查其余依赖并最终返回非零状态。
|
||||
- CodeGraph 的可选安装使用官方远程安装脚本;Kotlin LSP、Java 21 和 JDT LS 的可选安装使用 Homebrew。没有 Homebrew 时保留已经完成的组合包安装并报告依赖安装失败。
|
||||
- `install.sh` 不检查默认不需要的 `rtk` CLI;`uninstall.sh` 使用同一个 `PI_PACKAGE_SOURCE` 规则调用 `pi remove`,且不删除共享机器级工具。
|
||||
|
||||
## 修改边界
|
||||
|
||||
@@ -49,7 +54,9 @@
|
||||
- 需要原生构建的依赖只按锁定版本加入根 `allowScripts`;当前仅允许 Hermes Memory 所需的 `better-sqlite3`,不得批量批准其他 install scripts。
|
||||
- Pi 核心包只作为宿主 peer dependencies,不得在组合包内再安装或打包一套 Pi runtime;保留根 `.npmrc` 的 peer 安装策略。
|
||||
- 上游仅作为参考来源。同步上游改动时先核对本仓库已有修改,再按明确范围移植;不要直接覆盖本地实现。
|
||||
- 未经明确要求,不执行发布、提交、推送或安装到用户 Pi 运行目录等外部写操作。
|
||||
- `install.sh` 和 `uninstall.sh` 必须保持 POSIX `sh` 兼容和可执行权限,并包含在根 `package.json` 的 `files` 中;修改脚本行为时同步更新 README 和本文件。
|
||||
- 机器级依赖安装必须保持逐项询问且默认拒绝,不得在没有用户明确确认的情况下自动安装;卸载不得顺带删除共享机器级工具。
|
||||
- 未经明确要求,不执行发布、提交、推送、运行安装/卸载脚本或安装到用户 Pi 运行目录等外部写操作。
|
||||
|
||||
## `pi-rtk-optimizer` 开发约定
|
||||
|
||||
@@ -65,6 +72,8 @@
|
||||
|
||||
组合包依赖或加载入口变化时,至少验证根 `npm install` 幂等、锁文件有效,以及全部扩展可在隔离的临时 Pi agent 目录加载。权限配置变化时使用当前固定版本的 `pi-permission-system` schema 校验,并验证包装入口部署后的文件与仓库源配置一致。
|
||||
|
||||
安装或卸载脚本变化时,至少运行 `sh -n install.sh`、`sh -n uninstall.sh` 和 ShellCheck,并核对脚本仍具有可执行权限、仍包含在根 `package.json` 的 `files` 中、README 描述与实际流程一致。涉及真实 `pi install`、`pi remove`、Homebrew 或远程 CodeGraph 安装器的端到端验证属于外部写操作,未经明确要求不得执行。
|
||||
|
||||
在 `pi-rtk-optimizer/` 内按改动范围选择最小充分验证:
|
||||
|
||||
- `npm run build`:TypeScript 转译检查。
|
||||
|
||||
@@ -14,14 +14,41 @@
|
||||
- `@ogulcancelik/pi-auto-permissions@0.1.3`:按当前对话自动复核受控 Bash 操作。
|
||||
- `@gotgenes/pi-permission-system@26.2.1`:负责工具、路径、MCP、硬拒绝和兜底权限基线。
|
||||
|
||||
## 安装
|
||||
## 安装与卸载
|
||||
|
||||
仓库推送后,通过 Git 源安装整个组合包:
|
||||
推荐从仓库检出目录运行安装脚本:
|
||||
|
||||
```bash
|
||||
./install.sh
|
||||
```
|
||||
|
||||
脚本会先执行:
|
||||
|
||||
```bash
|
||||
pi install git:git@bitbucket.org:siakitem/my-pi.git
|
||||
```
|
||||
|
||||
安装组合包成功后,脚本会检查 `codegraph`、`kotlin-lsp`、Java 21+ 和 `jdtls`。缺失的
|
||||
依赖会逐项显示 `[y/N]` 选项,仅在用户明确选择 `Y` 后安装。Kotlin、Java 和 JDT LS 的
|
||||
自动安装使用 Homebrew;如果机器没有 Homebrew,脚本会保留组合包安装结果并给出提示。
|
||||
`rtk` 只供默认关闭的命令改写使用,因此不会作为必装依赖检查。
|
||||
|
||||
也可以绕过脚本,直接运行上面的 `pi install` 命令,此时机器级 CLI 不会被检查。
|
||||
|
||||
卸载组合包:
|
||||
|
||||
```bash
|
||||
./uninstall.sh
|
||||
```
|
||||
|
||||
卸载脚本只调用 `pi remove`,不会删除 CodeGraph、Kotlin LSP、JDT LS 或 Java,因为这些
|
||||
机器级工具可能仍被其他项目使用。两个脚本都可通过 `PI_PACKAGE_SOURCE` 覆盖默认包源,
|
||||
例如在本地检出中测试:
|
||||
|
||||
```bash
|
||||
PI_PACKAGE_SOURCE="$PWD" ./install.sh
|
||||
```
|
||||
|
||||
根 `package.json` 使用精确版本,`package-lock.json` 固定完整依赖树。不要再用项目级
|
||||
`.pi/settings.json` 重复安装这些扩展,否则同一扩展可能被加载两次。
|
||||
|
||||
|
||||
Executable
+155
@@ -0,0 +1,155 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -u
|
||||
|
||||
PACKAGE_SOURCE=${PI_PACKAGE_SOURCE:-git:git@bitbucket.org:siakitem/my-pi.git}
|
||||
CODEGRAPH_INSTALL_URL=https://raw.githubusercontent.com/colbymchenry/codegraph/main/install.sh
|
||||
install_failed=0
|
||||
|
||||
say() {
|
||||
printf '%s\n' "$*"
|
||||
}
|
||||
|
||||
warn() {
|
||||
printf '警告: %s\n' "$*" >&2
|
||||
}
|
||||
|
||||
ask_to_install() {
|
||||
dependency=$1
|
||||
printf '未检测到 %s。是否现在安装?[y/N] ' "$dependency"
|
||||
if ! IFS= read -r answer; then
|
||||
answer=n
|
||||
fi
|
||||
case $answer in
|
||||
y|Y|yes|YES|Yes) return 0 ;;
|
||||
*) return 1 ;;
|
||||
esac
|
||||
}
|
||||
|
||||
require_brew() {
|
||||
if command -v brew >/dev/null 2>&1; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
warn "自动安装该依赖需要 Homebrew,但当前 PATH 中没有 brew。"
|
||||
warn "请先安装 Homebrew(https://brew.sh/),然后重新运行本脚本。"
|
||||
return 1
|
||||
}
|
||||
|
||||
record_install_failure() {
|
||||
warn "$1 安装失败;其余依赖仍会继续检查。"
|
||||
install_failed=1
|
||||
}
|
||||
|
||||
java_major_version() {
|
||||
java_version=$(java -version 2>&1 | awk -F '"' 'NR == 1 { print $2 }')
|
||||
case $java_version in
|
||||
1.*) java_version=${java_version#1.} ;;
|
||||
esac
|
||||
java_major=${java_version%%.*}
|
||||
case $java_major in
|
||||
''|*[!0-9]*) return 1 ;;
|
||||
*) printf '%s\n' "$java_major" ;;
|
||||
esac
|
||||
}
|
||||
|
||||
install_codegraph() {
|
||||
if ! command -v curl >/dev/null 2>&1; then
|
||||
warn "安装 CodeGraph 需要 curl。"
|
||||
return 1
|
||||
fi
|
||||
curl -fsSL "$CODEGRAPH_INSTALL_URL" | sh || return 1
|
||||
|
||||
# 官方安装器默认使用 ~/.local/bin;让本次检查立即看到新命令。
|
||||
if [ -d "$HOME/.local/bin" ]; then
|
||||
PATH="$HOME/.local/bin:$PATH"
|
||||
export PATH
|
||||
fi
|
||||
command -v codegraph >/dev/null 2>&1
|
||||
}
|
||||
|
||||
install_kotlin_lsp() {
|
||||
require_brew || return 1
|
||||
brew install JetBrains/utils/kotlin-lsp || return 1
|
||||
command -v kotlin-lsp >/dev/null 2>&1
|
||||
}
|
||||
|
||||
install_java_21() {
|
||||
require_brew || return 1
|
||||
brew install openjdk@21 || return 1
|
||||
java_home=$(brew --prefix openjdk@21 2>/dev/null) || return 1
|
||||
PATH="$java_home/bin:$PATH"
|
||||
export PATH
|
||||
installed_java_major=$(java_major_version || true)
|
||||
if [ -z "$installed_java_major" ] || [ "$installed_java_major" -lt 21 ]; then
|
||||
return 1
|
||||
fi
|
||||
say "已在本次安装流程中使用 $java_home/bin。若新终端仍找不到 Java,请把该目录加入 PATH。"
|
||||
}
|
||||
|
||||
install_jdtls() {
|
||||
require_brew || return 1
|
||||
brew install jdtls || return 1
|
||||
command -v jdtls >/dev/null 2>&1
|
||||
}
|
||||
|
||||
if ! command -v pi >/dev/null 2>&1; then
|
||||
warn "找不到 pi,无法安装组合包。请先安装 Pi 并确保 pi 位于 PATH。"
|
||||
exit 127
|
||||
fi
|
||||
|
||||
say "正在安装 Pi 组合包:$PACKAGE_SOURCE"
|
||||
if ! pi install "$PACKAGE_SOURCE"; then
|
||||
warn "pi install 执行失败,已停止后续依赖检查。"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
say "Pi 组合包安装完成,开始检查机器级 CLI 依赖。"
|
||||
|
||||
if command -v codegraph >/dev/null 2>&1; then
|
||||
say "✓ codegraph 已安装"
|
||||
elif ask_to_install "CodeGraph(提供 codegraph_explore)"; then
|
||||
install_codegraph || record_install_failure "CodeGraph"
|
||||
else
|
||||
say "- 已跳过 CodeGraph;codegraph_explore 将不可用。"
|
||||
fi
|
||||
|
||||
if command -v kotlin-lsp >/dev/null 2>&1; then
|
||||
say "✓ kotlin-lsp 已安装"
|
||||
elif ask_to_install "kotlin-lsp(Kotlin LSP)"; then
|
||||
install_kotlin_lsp || record_install_failure "kotlin-lsp"
|
||||
else
|
||||
say "- 已跳过 kotlin-lsp;Kotlin LSP 功能将不可用。"
|
||||
fi
|
||||
|
||||
java_ok=0
|
||||
if command -v java >/dev/null 2>&1; then
|
||||
java_major=$(java_major_version || true)
|
||||
if [ -n "$java_major" ] && [ "$java_major" -ge 21 ]; then
|
||||
java_ok=1
|
||||
say "✓ Java $java_major 已安装(满足 Java 21+)"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$java_ok" -eq 0 ]; then
|
||||
if ask_to_install "Java 21+(JDT LS 运行时)"; then
|
||||
if install_java_21; then
|
||||
java_ok=1
|
||||
else
|
||||
record_install_failure "Java 21+"
|
||||
fi
|
||||
else
|
||||
say "- 已跳过 Java 21+;JDT LS 可能无法启动。"
|
||||
fi
|
||||
fi
|
||||
|
||||
if command -v jdtls >/dev/null 2>&1; then
|
||||
say "✓ jdtls 已安装"
|
||||
elif ask_to_install "jdtls(Java LSP)"; then
|
||||
install_jdtls || record_install_failure "jdtls"
|
||||
else
|
||||
say "- 已跳过 jdtls;Java LSP 功能将不可用。"
|
||||
fi
|
||||
|
||||
say "依赖检查完成。RTK 命令改写默认关闭,因此未检查可选的 rtk CLI。"
|
||||
exit "$install_failed"
|
||||
@@ -12,6 +12,8 @@
|
||||
"extensions",
|
||||
"pi-rtk-optimizer",
|
||||
"config",
|
||||
"install.sh",
|
||||
"uninstall.sh",
|
||||
"README.md",
|
||||
"AGENTS.md"
|
||||
],
|
||||
|
||||
Executable
+14
@@ -0,0 +1,14 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -u
|
||||
|
||||
PACKAGE_SOURCE=${PI_PACKAGE_SOURCE:-git:git@bitbucket.org:siakitem/my-pi.git}
|
||||
|
||||
if ! command -v pi >/dev/null 2>&1; then
|
||||
printf '错误: 找不到 pi,无法卸载组合包。请确保 pi 位于 PATH。\n' >&2
|
||||
exit 127
|
||||
fi
|
||||
|
||||
printf '正在从 Pi 中移除组合包:%s\n' "$PACKAGE_SOURCE"
|
||||
pi remove "$PACKAGE_SOURCE"
|
||||
printf '%s\n' '组合包已移除。CodeGraph、Kotlin LSP、JDT LS 和 Java 均未卸载,因为它们可能仍被其他项目使用。'
|
||||
Reference in New Issue
Block a user