Skip to content

perf(pi): 缓存超限包结果并回收会话临时目录 - #3524

Open
lizzjin wants to merge 11 commits into
makecindy:mainfrom
lizzjin:codex/issue-3468
Open

perf(pi): 缓存超限包结果并回收会话临时目录#3524
lizzjin wants to merge 11 commits into
makecindy:mainfrom
lizzjin:codex/issue-3468

Conversation

@lizzjin

@lizzjin lizzjin commented Aug 27, 2026

Copy link
Copy Markdown
Contributor

这次改了什么

摘要

缓存 Pi 包检查与可选快照的确定性超限结果,减少新会话重复遍历、复制和指纹计算;为本地会话临时目录增加进程实例身份及有界后台回收,并补充脱敏启动阶段耗时日志。

本轮合入主干 ac1435b88,解决与 #3614 的四个文件冲突。保留主干的 Pi 原生包权威语义:已安装且未显式停用的包继续由 Pi 原生加载,Cindy 分析结果仅作为提示,不得因超限、未知格式或分析失败阻断原生包。普通启动只请求带关联 ID 的分析元数据,不恢复每会话包快照复制。

变更类型

  • feat 新功能
  • fix 缺陷修复
  • refactor / perf 重构或性能优化
  • docs / test / chore 文档、测试或工程维护
  • 其他:

范围

  • 关联 Issue / 需求:Closes 新建 PI 会话会重复 snapshot 大型 Pi 包并复制 rg.exe,新会话变慢40秒且残留堆积 #3468
  • 本 PR 包含:
    • 按来源、安装身份与快照根记录确定性 package-scope 超限结果;6 小时后允许重检,安装身份变化或显式包操作也可清除旧结果。
    • aggregate-scope 与 duration 超限不进入跨会话永久负缓存;已有 v3 状态迁移时保留停用偏好及有效批准元数据。
    • 原生 mutation 成功后先发布运行期失效边界,再清理分析缓存;辅助元数据失败不改判 Pi 原生命令结果。
    • package list、inspection、compatibility、fingerprint、snapshot,以及 MCP ready、spawn、RPC ready、首次模型请求的结构化脱敏耗时记录。
    • 本地 config-home v2 owner marker、v1 兼容、PID 复用识别;8 项/250ms 分轮后台扫描和 1 秒有界异步进程探针。
    • Windows 符号链接测试夹具及 OAuth 测试 helper 的回调错误传播修复。
    • 同步子代理复制 bridge 的路径到主干新目录 internal-extensions,修复沿用旧 extensions 路径导致的 ENOENT;原有只读工具面和权限门保持不变。
  • 明确不包含:
    • 不修改 Pi 原生包的启用规则;不新增包审批层。
    • 不使用全局共享或硬链接 ripgrep;继续保留每会话私有副本。
    • 不自动删除 markerless 遗留目录,无法证明 owner 已失活时保留目录。
    • 不改变远程 config-home 生命周期,不修改服务端、UI 或跨端协议。
  • 用户可见变化:包分析超限后无需每次启动重复扫描;可证明失活的本地会话目录可被后台回收;分析告警不阻断 Pi 原生包加载。
  • 是否存在 breaking change:无。

UI 变化

不涉及:相对最新主干仅修改 Desktop main、maker-core 和测试,不改变界面、交互或 UI 文案。

  • 引用的设计规范:不涉及。

怎么验证的

自动验证

  • pnpm --filter desktop exec vitest run src/main/maker-host/__tests__/pi-package-store-security.test.ts:160 passed,3 项按现有条件跳过。
  • pnpm --filter @cindy/maker-core exec vitest run 定向执行 pi-startsession-cleanuppi-provider-routingpi-subagent-runs:272 passed,3 项按现有条件跳过。
  • 真实 Pi 集成定向重跑 xAI 路由、子代理执行、子代理只读边界和 BYOM 子代理路由:4 passed。子代理源码合同测试:40 passed;foreground 测试现有 Windows 跳过条件保留。
  • 首轮全量门禁的 4 个失败已定位:本地 Pi 0.83.0 与主干固定的 0.84.4 不匹配,以及内部扩展目录重命名后子代理仍复制旧路径。按 latest.json 的 SHA256 校验并安装固定运行时,修正路径后上述 4 项已全部通过;未跳过或弱化失败断言。
  • pnpm --filter <包名> run --if-present typecheck:desktop、mobile、@cindy/anthropic-compat-proxy、@cindy/anthropic-responses-bridge、@cindy/responses-chat-bridge 共 5 个实际脚本通过;其余 8 个受影响包无 typecheck 脚本,记为不适用。
  • git diff --cached --check ac1435b88 通过;真实 PR 提交范围 DCO 检查通过,新合并提交使用 git commit -s
  • 最终 pnpm test:unit:related:自动选择 full,27 个工作区全部通过;test runner 437 passed、8 skipped,另 6 个工作区按仓库清单无可收集单测记为不适用。未另外重复执行 pnpm test:unit。当前快照与 5 项实际 typecheck 的验证凭据一致。

手工验证

本轮在 Windows x64 验证。核对四个冲突文件和完整 PR diff,确认保留主干原生包发现、显式停用、失败清理和运行期失效流程,以及本 PR 的缓存失效、跨进程共享、回收预算和脱敏日志。

未执行的验证

  • 未执行真实 npm:context-mode 冷启动 benchmark。
  • 未在 macOS / Linux 实机验证;相关平台分支由单元测试覆盖,新提交的 CI 状态以实际运行结果为准。
  • 不涉及 UI 双模式目检。

风险

风险分类

  • 无已知风险
  • SQLite / migration
  • system prompt
  • 协议兼容
  • 权限 / 安全 / 用户数据
  • 存量插件兼容(批准状态 / 指纹 / manifest 校验 / 安装布局 / 包格式)
  • 原生层 / fingerprint / OTA
  • 跨平台差异
  • 其他:Pi 包分析缓存失效及本地临时目录回收

影响与回滚

  • 影响 Desktop Pi 分析元数据和本地 config-home;不改 .cindy 插件产品实现、数据库 schema、模型路由、prompt 内容或远程协议。
  • 负缓存仅影响 Cindy 分析,原生包仍由 Pi 加载;来源、安装身份及重试期限控制失效。包命令和开关仍有显式恢复路径。
  • 保留 v1 marker;markerless、进程身份不确定、探针失败或超时均不回收。清理不进入新会话启动关键路径,原始 session ID 不写入 marker。
  • 整体 revert 本 PR 可回滚;包内容、凭证与用户停用偏好不作为可丢弃缓存清理。
  • 原有维护者确认门仍适用;此次只更新原 PR,不执行合并。

提交前检查

  • 已 review 完整 diff
  • 每个新 commit 使用 DCO 签名,无共同作者 trailer
  • 已说明 UI 不涉及
  • 未提交凭证、令牌或授权文件
  • 已确认本次无需新增用户文档
  • 本轮提交前门禁完成后更新验证结果

Signed-off-by: lizzjin <lizzjin37@gmail.com>
@lizzjin
lizzjin requested a review from a team as a code owner August 27, 2026 11:19

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 091b2cdda7

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread apps/desktop/src/main/maker-host/pi-package-store.ts
Comment thread apps/desktop/src/main/maker-host/pi-package-store.ts Outdated
@greptile-apps

greptile-apps Bot commented Aug 27, 2026

Copy link
Copy Markdown

Greptile Summary

此 PR 为 Pi 包的确定性超限结果增加跨会话缓存,并为本地会话临时目录引入带进程实例身份的回收机制,同时补充启动阶段耗时日志。

  • 将 package inspection/snapshot 超限状态迁移到按安装身份记录的 v4 持久化格式
  • 在 Pi 启动链路中关联 package、MCP、spawn、RPC ready 与首个模型请求耗时
  • 为本地 config home 增加 v2 owner marker、PID 复用识别和保守的遗留目录扫描
  • 更新 OAuth、跨平台符号链接、包安全及会话清理测试

Confidence Score: 4/5

合并前应修复 Pi 包负缓存无法因深层内容变化而失效的问题,否则已修复的包仍可能跨会话持续被禁用。

新的 installation identity 只覆盖根目录元数据与 package.json,而被缓存的 entries/bytes 超限可以由更深层的资源文件触发,因此同一路径下的内容修复不一定触发重新检查。

Files Needing Attention: apps/desktop/src/main/maker-host/pi-package-store.ts

Important Files Changed

Filename Overview
apps/desktop/src/main/maker-host/pi-package-store.ts 新增确定性超限负缓存和启动计时,但安装身份无法感知 package.json 之外的深层内容修复。
packages/maker-core/src/agents/pi/index.ts 新增本地 config-home owner marker、保守回收、清理重试及 Pi 启动阶段计时,未确认阻塞性缺陷。
apps/desktop/src/main/process-monitor/agent-scan.ts 新增无缓存的全系统进程快照及 Cindy 管理 Pi 进程识别,用于遗留目录回收决策。
apps/desktop/src/main/maker-host/pi-host.ts 将主进程的 fresh process scan 注入 Pi 本地遗留 config-home 回收判定。
packages/maker-core/src/agents/pi/pi-subagent-runs.ts 导出既有进程实例启动时间与存活检查,供 config-home owner 判定复用。

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart LR
  A[列出 Pi 包] --> B[计算安装身份]
  B --> C{命中持久化超限缓存?}
  C -->|是| D[跳过遍历并禁用包]
  C -->|否| E[检查与快照]
  E -->|确定性超限| F[持久化 inspection-limit]
  E -->|成功| G[加载受管资源]
  F --> D
Loading
Prompt To Fix All With AI
### Issue 1
apps/desktop/src/main/maker-host/pi-package-store.ts:401-437
**负缓存身份失效不完整**

当本地包因深层 skills、prompts 或 extensions 的条目数或元数据字节数超限后,仅修改或删除这些深层文件不会改变由根目录 stat 和 `package.json` 构成的 `installationIdentity`。后续会话会继续复用 `inspection-limit` 并跳过遍历,导致已经缩小或修复的包仍持续被禁用,直至执行包 mutation 或修改 `package.json`---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Reviews (1): Last reviewed commit: "perf(pi): cache package limits and recla..." | Re-trigger Greptile

Comment thread apps/desktop/src/main/maker-host/pi-package-store.ts
Signed-off-by: lizzjin <lizzjin37@gmail.com>
Signed-off-by: lizzjin <lizzjin37@gmail.com>
@lizzjin

lizzjin commented Aug 27, 2026

Copy link
Copy Markdown
Contributor Author

补充本轮 review 修复与验证(commit ab5b6ac39):

  • package-scope 的确定性负缓存增加 6 小时有界重试;manifest 不变但深层 skill / prompt / extension 内容缩减后,不会被永久禁用。
  • 缺少 retry metadata 的旧 v4 负缓存会在升级后立即重试一次。
  • aggregate-scope 预算耗尽仍在当前会话 fail-closed,但不再跨会话持久化到后续健康包。
  • 两条 Windows 测试把 fixture 与 spy 参数统一到 canonical realpath namespace,兼容 8.3 / 长路径混用。

新增回归覆盖:

  • 深层 package 内容缩减后的有界恢复;
  • aggregate 跳过不持久化,并证明下一会话健康包恢复;
  • 旧 v4 entry 兼容;
  • Windows canonical path spy 命中。

最新提交前验证:

  • pnpm test:unit:related:Desktop、lizi-mcps、maker-core、orca-workflow 全部 PASS;
  • pnpm --filter desktop run --if-present typecheck:PASS;
  • pnpm --filter @cindy/maker-core run --if-present typecheck:该 package 无 typecheck script,按规则自动跳过;
  • pnpm check:dco:PASS(2 个签名提交,1 个 merge commit 豁免);
  • git diff --check:PASS;
  • 最终 Standards / Spec 双轴复核:无剩余必修 finding。

maker-core 指标补充:未修改 system prompt、prompt 拼接顺序、tool / MCP schema、translator、模型路由、usage 计量或逐 token event loop;影响限于新会话启动资源装配与结构化 timing。未执行真实 npm:context-mode 冷启动 benchmark,macOS / Linux 仍由 CI 与平台测试覆盖。

@MagicLizi

Copy link
Copy Markdown
Contributor

@lizzjin 👋 这个 PR 还有 3 条 review conversation 没 resolve(apps/desktop/src/main/maker-host/pi-package-store.ts),auto-review 因此暂时跳过、没法继续审查 / 合并。

如果你已经按评论改完或回应了,请到对应 thread 上点 Resolve conversation;全部 resolve 后,下一轮 auto-review 会自动重新审查这个 PR。

@MagicLizi MagicLizi added awaiting-discussion 等待维护者讨论(review-pr) touches:core 改动碰到架构核心路径(review-pr 自动维护,仅展示) touches:large-diff 改动量较大(review-pr 自动维护,仅展示) touches:plugin-base 改动碰到插件基座(review-pr 自动维护,仅展示) labels Aug 27, 2026

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: ab5b6ac39d

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread packages/maker-core/src/agents/pi/index.ts Outdated
@MagicLizi

Copy link
Copy Markdown
Contributor

这条 PR 被维护者确认门拦住,需要维护者在 PR 上 Approve 后才能继续合并流程。

当前在拦的是 插件基座ghostOauthFlow.test.ts 的改动会按插件基座规则处理(影响全部已装插件的兼容口径,测试文件不豁免)。另外还有 Pi 包检查结果跨会话缓存、以及本地会话临时目录回收相关的核心路径大改动。

请维护者在讨论 issue 里看范围后,直接在本 PR Approve;若要改,请 Request Changes。作者这边先不用反复请求 review——球不在你手里。

讨论 issue:#3527

Signed-off-by: lizzjin <lizzjin37@gmail.com>

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 40e62cba61

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread apps/desktop/src/main/maker-host/pi-package-store.ts Outdated
Comment thread packages/maker-core/src/agents/pi/index.ts Outdated
Signed-off-by: lizzjin <lizzjin37@gmail.com>

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: b65a38b3ef

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread packages/maker-core/src/agents/pi/index.ts Outdated
@MagicLizi

Copy link
Copy Markdown
Contributor

@lizzjin 👋 这个 PR 还有 1 条 review conversation 没 resolve(packages/maker-core/src/agents/pi/index.ts),auto-review 因此暂时跳过、没法继续审查 / 合并。

如果你已经按评论改完或回应了,请到对应 thread 上点 Resolve conversation;全部 resolve 后,下一轮 auto-review 会自动重新审查这个 PR。

Signed-off-by: lizzjin <lizzjin37@gmail.com>
Signed-off-by: lizzjin <lizzjin37@gmail.com>
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Aug 29, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-08-29T08:49:16.098766Z 77d0958 New commits
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@MagicLizi

Copy link
Copy Markdown
Contributor

@lizzjin 👋 这个 PR 目前与 main 有合并冲突,auto-review 因此暂时跳过、没法继续审查 / 合并。

请在本地 merge 最新的 origin/main 解决冲突后推送;冲突解除后,下一轮 auto-review 会自动重新处理这个 PR。

Preserve native Pi package loading alongside advisory limit caching and bounded config-home cleanup. Align subagent bridge staging with the internal-extensions directory.

Signed-off-by: lizzjin <lizzjin37@gmail.com>
@lizzjin

lizzjin commented Aug 31, 2026

Copy link
Copy Markdown
Contributor Author

@MagicLizi 已解决与 main 的冲突并更新 PR(e852df855),本地测试已通过。

@MagicLizi

Copy link
Copy Markdown
Contributor

@lizzjin 👋 这个 PR 目前与 main 有合并冲突,auto-review 因此暂时跳过、没法继续审查 / 合并。

请在本地 merge 最新的 origin/main 解决冲突后推送;冲突解除后,下一轮 auto-review 会自动重新处理这个 PR。

Signed-off-by: lizzjin <lizzjin37@gmail.com>
@lizzjin

lizzjin commented Sep 1, 2026

Copy link
Copy Markdown
Contributor Author

@MagicLizi 已合入当前最新 main(3b3d0cfa)并解决冲突,PR head 已更新为 2d30f10。GitHub 已重算为 MERGEABLE;本地 related-unit、Desktop/Mobile typecheck 与 DCO 均通过。

Signed-off-by: lizzjin <lizzjin37@gmail.com>
Signed-off-by: lizzjin <lizzjin37@gmail.com>
@MagicLizi

Copy link
Copy Markdown
Contributor

@lizzjin 👋 这个 PR 目前与 main 有合并冲突,auto-review 因此暂时跳过、没法继续审查 / 合并。

请在本地 merge 最新的 origin/main 解决冲突后推送;冲突解除后,下一轮 auto-review 会自动重新处理这个 PR。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

awaiting-discussion 等待维护者讨论(review-pr) touches:core 改动碰到架构核心路径(review-pr 自动维护,仅展示) touches:large-diff 改动量较大(review-pr 自动维护,仅展示) touches:plugin-base 改动碰到插件基座(review-pr 自动维护,仅展示)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

新建 PI 会话会重复 snapshot 大型 Pi 包并复制 rg.exe,新会话变慢40秒且残留堆积

2 participants