mirror of
https://bitbucket.org/siakitem/my-pi.git
synced 2026-08-28 08:35:57 +00:00
feat: add lsp and auto-permissions stack
This commit is contained in:
@@ -12,6 +12,12 @@
|
||||
- `context-mode`:加载上游 Pi adapter 与 skills,提供 `ctx_*` 工具、隔离式大输出处理和会话连续性。
|
||||
- `extensions/codegraph.ts`:通过隔离的 `pi-mcp-adapter` 配置连接机器现有的 `codegraph serve --mcp`,只暴露 `codegraph_explore`。
|
||||
- `extensions/permission-system.ts`:在权限扩展注册前,将 `config/pi-permission-system.json` 同步为全局权威配置。
|
||||
- `extensions/lsp.ts`:部署 Kotlin/JDT LS 全局配置并加载 `pi-lsp`。
|
||||
- `extensions/auto-permissions.ts`:部署 contextual Bash guardian 规则并加载 `pi-auto-permissions`。
|
||||
- `pi-lsp@0.1.7`:提供声明式 LSP 接入;组合包配置 `kotlin-lsp --stdio` 与 `jdtls`。
|
||||
- `pi-hermes-memory@0.9.6`:提供持久记忆、会话搜索、后台学习和 secret scanning,默认使用 policy-only 模式。
|
||||
- `@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`。
|
||||
|
||||
## 当前职责与默认行为
|
||||
@@ -26,7 +32,13 @@
|
||||
- CodeGraph MCP 使用 `keep-alive` 并只直接暴露 `codegraph_explore`;命令缺失、项目未初始化或连接失败时不得阻止其他扩展加载。
|
||||
- `pi-context-view` 只观察上下文占用,不参与压缩策略。
|
||||
- Codex fast mode 只为符合条件的 `openai-codex-responses` 请求设置 priority service tier,由 `/fast-mode` 在会话内控制。
|
||||
- 权限策略默认允许常规工具,允许 FFF 工具;拒绝 Bash 直搜,敏感凭据路径拒绝,外部目录、Git 写操作、破坏性系统操作、网络和安装操作询问。
|
||||
- 权限策略默认允许常规工具,允许 FFF 工具;拒绝 Bash 直搜和敏感凭据路径,外部目录、文件/系统/网络高风险操作与普通 MCP 调用由 `pi-permission-system` 询问。
|
||||
- `pi-auto-permissions` 不是 Codex 式全工具审批层:它只监听 `bash` 及名称以 `.bash` 结尾的工具,只复核自身 `config.json` 中正则命中的命令;它不处理 `read`、`write`、`edit`、MCP、Skill、路径或外部目录权限,也不接收或批准 `pi-permission-system` 产生的 `ask`。
|
||||
- 两个权限扩展是彼此独立的 `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` 配置,但不安装这两个系统可执行文件。
|
||||
- Codex 远程压缩只对 `openai-codex` 生效,默认在 turn boundary 达到 90% 时触发;Hermes Memory 默认使用 policy-only 模式。
|
||||
|
||||
## 修改边界
|
||||
|
||||
@@ -34,6 +46,7 @@
|
||||
- 保留原项目的 `LICENSE`、版权信息和必要的来源说明。
|
||||
- 扩展运行目录中的 `config.json`、日志、构建产物、覆盖率目录和依赖目录属于本地状态,不应提交;`config/pi-permission-system.json` 是组合包的权威源配置,必须提交并维护。
|
||||
- 外部 Pi 扩展依赖必须在根 `package.json` 中使用精确版本,并更新根 `package-lock.json`;不要用仓库级 `.pi/settings.json` 代替组合包依赖。
|
||||
- 需要原生构建的依赖只按锁定版本加入根 `allowScripts`;当前仅允许 Hermes Memory 所需的 `better-sqlite3`,不得批量批准其他 install scripts。
|
||||
- Pi 核心包只作为宿主 peer dependencies,不得在组合包内再安装或打包一套 Pi runtime;保留根 `.npmrc` 的 peer 安装策略。
|
||||
- 上游仅作为参考来源。同步上游改动时先核对本仓库已有修改,再按明确范围移植;不要直接覆盖本地实现。
|
||||
- 未经明确要求,不执行发布、提交、推送或安装到用户 Pi 运行目录等外部写操作。
|
||||
|
||||
@@ -8,7 +8,11 @@
|
||||
- `pi-mcp-adapter@2.26.0`:只用于把机器现有的 CodeGraph MCP Server 接入为 `codegraph_explore`。
|
||||
- `pi-context-view@0.4.2`:查看上下文占用。
|
||||
- `@firstpick/pi-extension-codex-fast-mode@0.1.1`:为 Codex provider 提供会话级 `/fast-mode`。
|
||||
- `@gotgenes/pi-permission-system@26.2.1`:加载组合包自带的权限基线。
|
||||
- `pi-lsp@0.1.7`:为 Kotlin 和 Java 提供 LSP 诊断、跳转与符号工具。
|
||||
- `pi-hermes-memory@0.9.6`:提供持久记忆、会话搜索和 secret scanning。
|
||||
- `@ogulcancelik/pi-codex-compaction@0.1.3`:为 `openai-codex` 提供原生远程压缩。
|
||||
- `@ogulcancelik/pi-auto-permissions@0.1.3`:按当前对话自动复核受控 Bash 操作。
|
||||
- `@gotgenes/pi-permission-system@26.2.1`:负责工具、路径、MCP、硬拒绝和兜底权限基线。
|
||||
|
||||
## 安装
|
||||
|
||||
@@ -21,6 +25,10 @@ pi install git:git@bitbucket.org:siakitem/my-pi.git
|
||||
根 `package.json` 使用精确版本,`package-lock.json` 固定完整依赖树。不要再用项目级
|
||||
`.pi/settings.json` 重复安装这些扩展,否则同一扩展可能被加载两次。
|
||||
|
||||
Hermes Memory 的 SQLite search 依赖 `better-sqlite3` 原生模块;根包只在 `allowScripts` 中
|
||||
精确放行当前锁定版本的构建脚本。若升级 Hermes 或 `better-sqlite3`,必须同步核对并更新该精确
|
||||
版本,不能把其他依赖的 install scripts 一并放行。
|
||||
|
||||
默认配置不需要系统 `rtk` CLI。只有以后在 `/rtk` 中主动开启
|
||||
`RTK command rewriting` 时,才需要另外安装 `rtk` 可执行文件。
|
||||
|
||||
@@ -80,13 +88,61 @@ codegraph status
|
||||
- 搜索边界:直接通过 Bash 调用 `rg`、`grep`、`find`、`fd`、`git grep` 拒绝,统一走 FFF。
|
||||
- 路径与凭据:外部目录询问;环境文件、SSH/GPG、云凭据、Keychain 和 Pi 认证文件拒绝;
|
||||
`.env.example` 作为无密钥模板允许。
|
||||
- Git:状态、diff、日志、对象查看等只读命令允许;其他 Git 命令询问。
|
||||
- 系统与破坏性操作:删除、移动、权限修改、提权、进程控制、磁盘和系统服务操作询问。
|
||||
- 网络与安装:SSH、文件传输、下载和包安装/卸载询问。
|
||||
- Git:状态、diff、日志、对象查看等只读命令允许;其他 Git 命令交给 Auto Permissions。
|
||||
- Bash 变更操作:Git 非只读操作和包管理操作交给 Auto Permissions;文件变更、系统操作、
|
||||
网络访问和环境导出继续由权限基线询问。
|
||||
- MCP 与 Skill:列举 MCP 状态允许,调用其他 MCP 工具询问;本地 Skill 加载允许。
|
||||
|
||||
`permissionReviewLog` 已开启,后续可依据真实命中记录继续收敛规则。
|
||||
|
||||
### Auto Permissions 与权限基线的边界
|
||||
|
||||
`extensions/auto-permissions.ts` 会先部署
|
||||
`config/pi-auto-permissions.json`,再注册 contextual guardian。它只复核配置命中的 Bash
|
||||
命令,并根据当前对话返回自动允许、要求修正或请求用户确认。
|
||||
|
||||
两个权限扩展是并列的 `tool_call` gate,不存在“`pi-permission-system` 的 `ask` 自动转发给
|
||||
Auto Permissions”的机制。若同一命令在两边都配置为询问,会产生两层独立审批。因此组合包
|
||||
不再在旧权限配置中重复声明 Git 非只读操作与包管理的 Bash `ask` 规则;旧扩展仍独占以下边界:
|
||||
|
||||
- `deny`:Bash 直搜、敏感凭据路径等硬拒绝不会被 guardian 绕过。
|
||||
- `ask`:外部目录、`.git/*` 路径、文件/系统/网络/环境操作和普通 MCP 调用仍走旧权限 UI。
|
||||
- Auto Permissions:只处理其正则命中的 Bash 命令。高风险操作始终回落到用户确认;中风险操作
|
||||
只有在当前用户消息明确授权且满足约束时才自动批准。guardian 使用 raw shell regex,故只接管
|
||||
这两类能获得明确收益的命令;现有解析器继续保护高风险类别。
|
||||
|
||||
配置选择 `widget` 展示,不替换当前 Bash renderer;guardian 默认复用当前 Pi model,并以 low
|
||||
reasoning effort 运行。项目受信任时,根 `AGENTS.md` 可作为约束证据,但不能单独授权操作。
|
||||
|
||||
### Kotlin 与 Java LSP
|
||||
|
||||
`extensions/lsp.ts` 会把 `config/lsp.json` 部署到全局 `~/.pi/agent/lsp.json`,其中启用:
|
||||
|
||||
- `kotlin-lsp --stdio`:匹配 `.kt`、`.kts`。
|
||||
- `jdtls`:匹配 `.java`;官方 wrapper 会按当前项目工作目录选择 cache data 目录。
|
||||
|
||||
两者按 Gradle、Maven 或 Git marker 定位项目根,忽略常见构建输出,并为大型 Android/Gradle
|
||||
项目预留 120 秒启动时间。`pi-lsp` 只负责接入,不安装 language server 可执行文件;使用前需
|
||||
确保 `kotlin-lsp` 和 `jdtls` 位于启动 Pi 的 `PATH`。Kotlin 官方 Homebrew 安装方式为:
|
||||
|
||||
```bash
|
||||
brew install JetBrains/utils/kotlin-lsp
|
||||
```
|
||||
|
||||
JDT LS 需要 Java 21 或更高版本;可使用带 `jdtls` wrapper 的官方发行包或系统包。
|
||||
|
||||
### Hermes Memory
|
||||
|
||||
Hermes Memory 使用上游默认的 `policy-only` 模式:不把完整记忆直接注入每轮上下文,由工具按需
|
||||
搜索;同时启用后台复核、自动 consolidation、session search 和 secret scanning。首次需要检索
|
||||
旧会话时运行 `/memory-index-sessions`。
|
||||
|
||||
### Codex 原生远程压缩
|
||||
|
||||
远程压缩只对 `openai-codex/openai-codex-responses` 生效,使用上游默认配置:在 turn boundary
|
||||
达到 90% 上下文占用时触发,并写入 Pi 原生 compaction boundary。失败时保持原历史且不静默
|
||||
回退到文本摘要;checkpoint 与创建它的 Codex model 绑定。
|
||||
|
||||
### Codex fast mode
|
||||
|
||||
该扩展只在 `openai-codex` provider 的 Responses 请求上加入
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
{
|
||||
"version": 1,
|
||||
"servers": [
|
||||
{
|
||||
"id": "kotlin-lsp",
|
||||
"enabled": true,
|
||||
"include": ["**/*.kt", "**/*.kts"],
|
||||
"exclude": ["**/.gradle/**", "**/build/**"],
|
||||
"rootMarkers": [
|
||||
"settings.gradle.kts",
|
||||
"settings.gradle",
|
||||
"pom.xml",
|
||||
"build.gradle.kts",
|
||||
"build.gradle",
|
||||
".git"
|
||||
],
|
||||
"bin": "kotlin-lsp",
|
||||
"args": ["--stdio"],
|
||||
"cwd": "{root}",
|
||||
"languageIdByExtension": {
|
||||
".kt": "kotlin",
|
||||
".kts": "kotlin"
|
||||
},
|
||||
"startupTimeoutMs": 120000,
|
||||
"diagnosticsWaitMs": 3000,
|
||||
"initializationOptions": {},
|
||||
"settings": {}
|
||||
},
|
||||
{
|
||||
"id": "jdtls",
|
||||
"enabled": true,
|
||||
"include": ["**/*.java"],
|
||||
"exclude": ["**/.gradle/**", "**/build/**", "**/target/**"],
|
||||
"rootMarkers": [
|
||||
"settings.gradle.kts",
|
||||
"settings.gradle",
|
||||
"pom.xml",
|
||||
"build.gradle.kts",
|
||||
"build.gradle",
|
||||
".git"
|
||||
],
|
||||
"bin": "jdtls",
|
||||
"args": [],
|
||||
"cwd": "{root}",
|
||||
"languageIdByExtension": {
|
||||
".java": "java"
|
||||
},
|
||||
"startupTimeoutMs": 120000,
|
||||
"diagnosticsWaitMs": 3000,
|
||||
"initializationOptions": {},
|
||||
"settings": {}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"enabled": true,
|
||||
"reviewEvidence": {
|
||||
"projectInstructions": true
|
||||
},
|
||||
"ui": {
|
||||
"enabled": true,
|
||||
"resultDisplayMs": 2500,
|
||||
"placement": "widget"
|
||||
},
|
||||
"rules": [
|
||||
{
|
||||
"pattern": "\\bgit\\s+(?!(?:status|diff|log|show|rev-parse|ls-files|grep)\\b)(?!branch(?:\\s+--show-current[^\\r\\n;&|]*)?\\s*(?:$|[;&|]))(?!remote\\s+(?:-v|get-url)\\b)",
|
||||
"flags": "i",
|
||||
"level": "guarded",
|
||||
"group": "git",
|
||||
"label": "Git mutation or network operation"
|
||||
},
|
||||
{
|
||||
"pattern": "(?:^|[\\n;&|])\\s*(?:(?:npm|pnpm|bun)\\s+(?:install|add|uninstall|update)\\b|pip3?\\s+install\\b|brew\\s+(?:install|uninstall)\\b)",
|
||||
"flags": "i",
|
||||
"level": "guarded",
|
||||
"group": "packages",
|
||||
"label": "Package installation or removal"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -43,7 +43,6 @@
|
||||
"grep*": "deny",
|
||||
"find*": "deny",
|
||||
"fd*": "deny",
|
||||
"git *": "ask",
|
||||
"git status*": "allow",
|
||||
"git diff*": "allow",
|
||||
"git log*": "allow",
|
||||
@@ -82,17 +81,6 @@
|
||||
"rsync *": "ask",
|
||||
"curl *": "ask",
|
||||
"wget *": "ask",
|
||||
"npm install*": "ask",
|
||||
"npm uninstall*": "ask",
|
||||
"npm update*": "ask",
|
||||
"pnpm add*": "ask",
|
||||
"pnpm install*": "ask",
|
||||
"bun add*": "ask",
|
||||
"bun install*": "ask",
|
||||
"pip install*": "ask",
|
||||
"pip3 install*": "ask",
|
||||
"brew install*": "ask",
|
||||
"brew uninstall*": "ask",
|
||||
"printenv*": "ask"
|
||||
},
|
||||
"mcp": {
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
import autoPermissionsExtension from "../node_modules/@ogulcancelik/pi-auto-permissions/index.ts";
|
||||
import { getAgentDir, type ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
||||
import { mkdirSync, readFileSync, renameSync, writeFileSync } from "node:fs";
|
||||
import { dirname, join } from "node:path";
|
||||
import { fileURLToPath } from "node:url";
|
||||
|
||||
const BUNDLE_CONFIG_PATH = fileURLToPath(new URL("../config/pi-auto-permissions.json", import.meta.url));
|
||||
|
||||
function deployBundleAutoPermissionsConfig(): void {
|
||||
const targetPath = join(getAgentDir(), "pi-auto-permissions", "config.json");
|
||||
const bundledConfig = readFileSync(BUNDLE_CONFIG_PATH, "utf8");
|
||||
|
||||
try {
|
||||
if (readFileSync(targetPath, "utf8") === bundledConfig) return;
|
||||
} catch {
|
||||
// Missing or unreadable target: replace it with the bundle-owned baseline.
|
||||
}
|
||||
|
||||
mkdirSync(dirname(targetPath), { recursive: true });
|
||||
const temporaryPath = `${targetPath}.my-pi.tmp`;
|
||||
writeFileSync(temporaryPath, bundledConfig, "utf8");
|
||||
renameSync(temporaryPath, targetPath);
|
||||
}
|
||||
|
||||
/** Deploy contextual Bash review policy before registering auto-permissions. */
|
||||
export default function bundledAutoPermissionsExtension(pi: ExtensionAPI): void {
|
||||
deployBundleAutoPermissionsConfig();
|
||||
autoPermissionsExtension(pi);
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
import lspExtension from "../node_modules/pi-lsp/extensions/pi-lsp/index.ts";
|
||||
import { getAgentDir, type ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
||||
import { readFileSync, renameSync, writeFileSync } from "node:fs";
|
||||
import { join } from "node:path";
|
||||
import { fileURLToPath } from "node:url";
|
||||
|
||||
const BUNDLE_CONFIG_PATH = fileURLToPath(new URL("../config/lsp.json", import.meta.url));
|
||||
|
||||
function deployBundleLspConfig(): void {
|
||||
const targetPath = join(getAgentDir(), "lsp.json");
|
||||
const bundledConfig = readFileSync(BUNDLE_CONFIG_PATH, "utf8");
|
||||
|
||||
try {
|
||||
if (readFileSync(targetPath, "utf8") === bundledConfig) return;
|
||||
} catch {
|
||||
// Missing or unreadable target: replace it with the bundle-owned baseline.
|
||||
}
|
||||
|
||||
const temporaryPath = `${targetPath}.my-pi.tmp`;
|
||||
writeFileSync(temporaryPath, bundledConfig, "utf8");
|
||||
renameSync(temporaryPath, targetPath);
|
||||
}
|
||||
|
||||
/** Deploy the bundle-owned LSP config before registering pi-lsp. */
|
||||
export default function bundledLspExtension(pi: ExtensionAPI): void {
|
||||
deployBundleLspConfig();
|
||||
lspExtension(pi);
|
||||
}
|
||||
Generated
+164
@@ -11,8 +11,12 @@
|
||||
"@ff-labs/pi-fff": "0.10.5",
|
||||
"@firstpick/pi-extension-codex-fast-mode": "0.1.1",
|
||||
"@gotgenes/pi-permission-system": "26.2.1",
|
||||
"@ogulcancelik/pi-auto-permissions": "0.1.3",
|
||||
"@ogulcancelik/pi-codex-compaction": "0.1.3",
|
||||
"context-mode": "1.0.169",
|
||||
"pi-context-view": "0.4.2",
|
||||
"pi-hermes-memory": "0.9.6",
|
||||
"pi-lsp": "0.1.7",
|
||||
"pi-mcp-adapter": "2.26.0"
|
||||
},
|
||||
"engines": {
|
||||
@@ -63,6 +67,19 @@
|
||||
"node": ">= 20.12.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@earendil-works/pi-tui": {
|
||||
"version": "0.80.10",
|
||||
"resolved": "https://registry.npmjs.org/@earendil-works/pi-tui/-/pi-tui-0.80.10.tgz",
|
||||
"integrity": "sha512-c2JO29PbhKPEQ6fgHQKAl0WhwuFqzWfzspMmP+8B5tpDuP+0mvarRbKKg8gq4b+pQx/QX+6aVS4ko7deoyjQjg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"get-east-asian-width": "1.6.0",
|
||||
"marked": "18.0.5"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=22.19.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@ff-labs/fff-bin-android-arm64": {
|
||||
"version": "0.10.5",
|
||||
"resolved": "https://registry.npmjs.org/@ff-labs/fff-bin-android-arm64/-/fff-bin-android-arm64-0.10.5.tgz",
|
||||
@@ -624,6 +641,35 @@
|
||||
"node": ">= 10"
|
||||
}
|
||||
},
|
||||
"node_modules/@ogulcancelik/pi-auto-permissions": {
|
||||
"version": "0.1.3",
|
||||
"resolved": "https://registry.npmjs.org/@ogulcancelik/pi-auto-permissions/-/pi-auto-permissions-0.1.3.tgz",
|
||||
"integrity": "sha512-C46K4Xf3tQQqYpHS8Svh/VXiaiyGU2E6L6otHclDzxPFW64eofet6TwJtjSBr3tIUXHofPJCRW4tayRjj/cf3Q==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=22.19.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@earendil-works/pi-ai": ">=0.80.7",
|
||||
"@earendil-works/pi-coding-agent": ">=0.80.7",
|
||||
"@earendil-works/pi-tui": ">=0.80.7",
|
||||
"typebox": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@ogulcancelik/pi-codex-compaction": {
|
||||
"version": "0.1.3",
|
||||
"resolved": "https://registry.npmjs.org/@ogulcancelik/pi-codex-compaction/-/pi-codex-compaction-0.1.3.tgz",
|
||||
"integrity": "sha512-1cI0D7TBlXe6aGI1EZePeo/ogST1rPx3zX0xblUjdUTiiHeeIRHyCkWIe5eRjg1FYi1rdfG5wB5YD0AKnKFHZA==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=22.19.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@earendil-works/pi-ai": ">=0.80.10",
|
||||
"@earendil-works/pi-coding-agent": ">=0.80.10",
|
||||
"@earendil-works/pi-tui": ">=0.80.10"
|
||||
}
|
||||
},
|
||||
"node_modules/@pkgr/core": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.2.tgz",
|
||||
@@ -865,6 +911,18 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/ansi-regex": {
|
||||
"version": "6.3.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.3.0.tgz",
|
||||
"integrity": "sha512-WpDfL7NO6j7tH88IDBNVdUJxDh9nmCteAVW9dsep846XdwF4naCBK+/tGLX3KJgcpgMRXCFlTM2hKGoK9FsdrQ==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/chalk/ansi-regex?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/base64-js": {
|
||||
"version": "1.5.1",
|
||||
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
|
||||
@@ -1541,6 +1599,18 @@
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/get-east-asian-width": {
|
||||
"version": "1.6.0",
|
||||
"resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.6.0.tgz",
|
||||
"integrity": "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/get-intrinsic": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
|
||||
@@ -1796,6 +1866,18 @@
|
||||
"integrity": "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==",
|
||||
"license": "BSD-2-Clause"
|
||||
},
|
||||
"node_modules/marked": {
|
||||
"version": "18.0.5",
|
||||
"resolved": "https://registry.npmjs.org/marked/-/marked-18.0.5.tgz",
|
||||
"integrity": "sha512-S6GcvALHg6K4ohtu4E7x0a1AqhAjp6cV8KhLSyN9qVapnzJkusVBxZRcIU9AeYsbe6P1hKDusSbEOzGyyuce6w==",
|
||||
"license": "MIT",
|
||||
"bin": {
|
||||
"marked": "bin/marked.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 20"
|
||||
}
|
||||
},
|
||||
"node_modules/math-intrinsics": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
|
||||
@@ -2036,6 +2118,39 @@
|
||||
"@earendil-works/pi-tui": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/pi-hermes-memory": {
|
||||
"version": "0.9.6",
|
||||
"resolved": "https://registry.npmjs.org/pi-hermes-memory/-/pi-hermes-memory-0.9.6.tgz",
|
||||
"integrity": "sha512-tCPGzRk5Wcsb9LgBEcd5QYKZXLmI4N+9BUwC0JyHzHSMV6uCO73058Bk8+BRzvR2Lbpk2oUlg6NylueCegURLw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@earendil-works/pi-tui": "^0.80.2",
|
||||
"better-sqlite3": "^12.9.0",
|
||||
"strip-ansi": "7.2.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@earendil-works/pi-ai": ">=0.80.1",
|
||||
"@earendil-works/pi-coding-agent": ">=0.80.1"
|
||||
}
|
||||
},
|
||||
"node_modules/pi-lsp": {
|
||||
"version": "0.1.7",
|
||||
"resolved": "https://registry.npmjs.org/pi-lsp/-/pi-lsp-0.1.7.tgz",
|
||||
"integrity": "sha512-bEmxw2pZ3lUh5LDJFCShnmjbCltmSZLOp6neIl+sWEfOEwMBi6IdOoQ2W00Fdc+k8i2Sw17p7XGElykWmDQOkg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"vscode-jsonrpc": "^8.2.1",
|
||||
"vscode-languageserver-protocol": "^3.17.5"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=20"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@earendil-works/pi-coding-agent": "*",
|
||||
"@earendil-works/pi-tui": "*",
|
||||
"typebox": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/pi-mcp-adapter": {
|
||||
"version": "2.26.0",
|
||||
"resolved": "https://registry.npmjs.org/pi-mcp-adapter/-/pi-mcp-adapter-2.26.0.tgz",
|
||||
@@ -2604,6 +2719,21 @@
|
||||
"safe-buffer": "~5.2.0"
|
||||
}
|
||||
},
|
||||
"node_modules/strip-ansi": {
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz",
|
||||
"integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"ansi-regex": "^6.2.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/chalk/strip-ansi?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/strip-json-comments": {
|
||||
"version": "5.0.3",
|
||||
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.3.tgz",
|
||||
@@ -2780,6 +2910,40 @@
|
||||
"node": ">= 0.8"
|
||||
}
|
||||
},
|
||||
"node_modules/vscode-jsonrpc": {
|
||||
"version": "8.2.1",
|
||||
"resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.1.tgz",
|
||||
"integrity": "sha512-kdjOSJ2lLIn7r1rtrMbbNCHjyMPfRnowdKjBQ+mGq6NAW5QY2bEZC/khaC5OR8svbbjvLEaIXkOq45e2X9BIbQ==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=14.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/vscode-languageserver-protocol": {
|
||||
"version": "3.18.2",
|
||||
"resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.18.2.tgz",
|
||||
"integrity": "sha512-XRyDbT0Pp3sSNti3JmxVEUMySWCSi1hhM+/KUlCy1hV1zmrqpM1OwO12EAki8blhmLuIMpaJrYbo0OzGVfK2Qg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"vscode-jsonrpc": "9.0.1",
|
||||
"vscode-languageserver-types": "3.18.0"
|
||||
}
|
||||
},
|
||||
"node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc": {
|
||||
"version": "9.0.1",
|
||||
"resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-9.0.1.tgz",
|
||||
"integrity": "sha512-rfuA6T75H6m5EkbhtEPzre9pT0HPcDI2MMy4+nPFIBks5J8JBAUHD4tRYSgaBOijIEC7SRkC1kKyXTLqbmh9jw==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=14.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/vscode-languageserver-types": {
|
||||
"version": "3.18.0",
|
||||
"resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.18.0.tgz",
|
||||
"integrity": "sha512-8TsGPNMIMiiBdkORgRSvLjuiEIiAFtO+KssmYWxQ+uSVvlf7RjK8YKCOjPzZ+YA04jXEV7+7LvkSmHkhpNS99g==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/web-tree-sitter": {
|
||||
"version": "0.26.12",
|
||||
"resolved": "https://registry.npmjs.org/web-tree-sitter/-/web-tree-sitter-0.26.12.tgz",
|
||||
|
||||
+13
-2
@@ -21,8 +21,12 @@
|
||||
"./pi-rtk-optimizer/index.ts",
|
||||
"./node_modules/context-mode/build/adapters/pi/extension.js",
|
||||
"./extensions/codegraph.ts",
|
||||
"./extensions/lsp.ts",
|
||||
"./node_modules/pi-context-view/src/index.ts",
|
||||
"./node_modules/@firstpick/pi-extension-codex-fast-mode/index.ts",
|
||||
"./node_modules/pi-hermes-memory/src/index.ts",
|
||||
"./node_modules/@ogulcancelik/pi-codex-compaction/index.ts",
|
||||
"./extensions/auto-permissions.ts",
|
||||
"./extensions/permission-system.ts"
|
||||
],
|
||||
"skills": [
|
||||
@@ -33,9 +37,13 @@
|
||||
"@ff-labs/pi-fff": "0.10.5",
|
||||
"@firstpick/pi-extension-codex-fast-mode": "0.1.1",
|
||||
"@gotgenes/pi-permission-system": "26.2.1",
|
||||
"@ogulcancelik/pi-auto-permissions": "0.1.3",
|
||||
"@ogulcancelik/pi-codex-compaction": "0.1.3",
|
||||
"context-mode": "1.0.169",
|
||||
"pi-mcp-adapter": "2.26.0",
|
||||
"pi-context-view": "0.4.2"
|
||||
"pi-context-view": "0.4.2",
|
||||
"pi-hermes-memory": "0.9.6",
|
||||
"pi-lsp": "0.1.7",
|
||||
"pi-mcp-adapter": "2.26.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@earendil-works/pi-coding-agent": "*",
|
||||
@@ -55,5 +63,8 @@
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=22.19.0"
|
||||
},
|
||||
"allowScripts": {
|
||||
"better-sqlite3@12.11.1": true
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user