Skip to content

fix(agent): make referenced sessions readable via Proma CLI#1293

Open
ErlichLiu wants to merge 1 commit into
mainfrom
fix/session-reference-cli
Open

fix(agent): make referenced sessions readable via Proma CLI#1293
ErlichLiu wants to merge 1 commit into
mainfrom
fix/session-reference-cli

Conversation

@ErlichLiu

Copy link
Copy Markdown
Collaborator

问题

显式 &session: 引用此前只把会话元数据(id / title / updatedAt / History path)注入 prompt,是否读取历史完全交给模型自行判断,指令也是条件式的「需要时再读」。Pi runtime 又设置了 noSkills: true,只对显式 skillMentions/skill: 展开 Skill,因此提示词里提到的 session-cleaner 从未真正展开。

结果是 Agent 可能只依据标题和元数据作答,而不读取被引用会话的正文。开发模式还有一个额外缺口:未打包时 CLI 判定为不可用,提示退回裸 proma 或直接读原始 JSONL,而 CLI 默认读 ~/.proma 而非 ~/.proma-dev

方案

保持「CLI 是 Agent 读取会话历史的唯一入口」,但由宿主保障引用可发现:

  • 引用块注入由 @proma/session-core 生成的受限 turn 地图(最多 16 个 turn),并给出可直接执行的 info / outline / export 命令
  • 指令改为强制语义:回答、总结、继续执行或决策依赖被引用会话内容时,必须先通过 CLI 读取相关 turn,不得仅凭标题、元数据或地图回答
  • JSONL 超过 2 MiB 时跳过宿主侧扫描,只注入渐进读取指引,避免主进程为生成地图同步读取超大历史
  • 地图预览做 XML 转义,避免历史文本破坏 prompt 标签结构
  • Pi runtime 在存在会话引用时自动把 session-cleaner 合并进 skillMentions,首轮与流式追加消息两条路径都覆盖
  • 开发模式改用 bun <repo>/apps/cli/src/index.ts --dev 运行源码 CLI,避免误读正式版会话库

解析逻辑仍然只有一份真源:宿主地图和 CLI 都走 @proma/session-core,主进程不新增 JSONL 解析。

测试

新增 agent-session-context-prompt.test.ts,覆盖同工作区引用的地图与 CLI 指令、跨工作区排除、超大会话不被宿主扫描、Pi 合并 session-cleaner;并在 agent-runtime-env.test.ts 补充打包版 PROMA_CLIPATH 注入断言。

bun test ./apps/electron/src/main/lib/agent-session-context-prompt.test.ts \
  ./apps/electron/src/main/lib/agent-runtime-env.test.ts \
  ./apps/electron/src/main/lib/adapters/pi-agent-bash.test.ts \
  ./packages/session-core/src/session-core.test.ts
# 26 pass / 0 fail
  • TypeScript 检查通过(tsc --noEmit --project apps/electron/tsconfig.json
  • 主进程 esbuild bundle 通过

未验证:未启动 Electron 开发环境做人工端到端点检,也未在 Windows / WSL 上实测开发模式 CLI 前缀。

Made with Proma · GitHub

显式 &session: 引用此前只注入会话元数据,读取历史完全交给模型自行判断,Pi runtime 又不会展开 session-cleaner,导致 Agent 可能只依据标题作答。

- 引用块改为注入由 @proma/session-core 生成的受限 turn 地图(最多 16 个 turn),并给出可直接执行的 info/outline/export 命令
- 明确要求回答依赖被引用会话正文时必须先用 CLI 读取,不得仅凭元数据或地图回答
- JSONL 超过 2 MiB 时跳过宿主侧扫描,只注入渐进读取指引,避免主进程同步读超大历史
- 地图预览做 XML 转义,避免历史文本破坏 prompt 标签结构
- Pi runtime 在存在会话引用时自动合并 session-cleaner 到 skillMentions(首轮与流式追加消息两条路径)
- 开发模式改用 bun 运行源码 CLI 并带 --dev,避免误读 ~/.proma 而非 ~/.proma-dev

Made-with: Proma
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant