Summary
PiDeck 会递归扫描以下目录中的所有 .jsonl 文件:
当 pi-subagents 启动子代理时,会在以下位置生成用于观测和审计的 transcript:
~/.pi/agent/sessions/<encoded-cwd>/subagent-artifacts/<run-id>_<agent>_0_transcript.jsonl
这些 transcript 并不是 Pi 会话文件,但 PiDeck 仍会将它们加入会话列表。原因可能是 PiDeck 的扫描器:
- 递归收集会话目录下的所有
.jsonl 文件;
- 创建 catalog 记录前,没有验证文件是否包含有效的 Pi session header;
- transcript 中恰好包含
cwd、message.role、消息内容和模型等字段,因此能够被摘要解析器识别成“看起来正常”的会话。
结果是:运行子代理后,会话侧边栏中会多出若干会话,标题通常类似:
[prompt redacted]; live Prompt A…
但这些条目无法作为正常 Pi 会话打开或恢复。
这看起来是 PiDeck 的递归会话扫描器与 pi-subagents transcript artifact 之间的格式/命名空间冲突。
Steps to reproduce
-
安装并启动 PiDeck。
-
打开一个项目并开始普通 Pi 会话。
-
通过 pi-subagents 启动一个子代理,例如 worker、scout 或 reviewer。
-
等待子代理开始运行或运行完成。
-
等待 PiDeck 刷新或重新扫描会话列表。
-
观察侧边栏中新增的会话条目。
-
检查该条目的文件路径,可以看到它指向类似以下文件:
C:\Users\<user>\.pi\agent\sessions\--<encoded-cwd>--\subagent-artifacts\<run-id>_worker_0_transcript.jsonl
-
尝试打开、恢复或继续该会话。
重复运行子代理后,会话列表中会不断增加类似的无效条目。
Expected behavior
PiDeck 应当只索引有效的 Pi session JSONL 文件。
至少应验证文件的第一条有效 JSON 记录满足:
firstEntry.type === "session" && typeof firstEntry.id === "string"
以下目录中的非会话 artifact 不应显示在会话列表中:
真正的嵌套子代理会话,例如:
<parent-session-stem>/<run-id>/run-0/session.jsonl
包含有效的 Pi session header,因此仍可根据产品设计正常索引或分组显示。
Actual behavior
PiDeck 会将 *_transcript.jsonl 文件作为 active session 加入会话列表。
Transcript 的第一条记录类似:
{
"version": 1,
"recordType": "message",
"source": "foreground",
"runId": "<redacted>",
"agent": "worker",
"cwd": "<project-path>",
"sourceEventType": "initial_prompt",
"role": "user",
"message": {
"role": "user",
"content": [
{
"type": "text",
"text": "[prompt redacted]; live Prompt Audit only."
}
]
}
}
它并不包含 Pi 会话所需的 header:
{
"type": "session",
"version": 3,
"id": "<session-id>",
"timestamp": "<timestamp>",
"cwd": "<project-path>"
}
PiDeck 可以从 transcript 中提取足够的信息并将其显示在侧边栏中,但在真正恢复会话时,会把该路径作为 --session 参数传给 Pi,而 Pi 会因为文件不是有效 session 而拒绝加载。
在当前受影响的环境中,session-catalog.json 中共有 64 条记录,其中 13 条指向:
subagent-artifacts/*_transcript.jsonl
OS
Windows 10 专业工作站版,10.0.19045.6456,x64
Node.js version
v24.14.1
pi version
0.84.2
Logs or screenshots
- **PiDeck:**0.7.1
- **pi-subagents:**0.53.0
- **运行环境:**Windows Native,非 WSL
没有在 PiDeck 应用日志中找到明确的 `Session file is not valid` 错误记录,但从文件格式可以稳定复现该问题
Summary
PiDeck 会递归扫描以下目录中的所有
.jsonl文件:当
pi-subagents启动子代理时,会在以下位置生成用于观测和审计的 transcript:这些 transcript 并不是 Pi 会话文件,但 PiDeck 仍会将它们加入会话列表。原因可能是 PiDeck 的扫描器:
.jsonl文件;cwd、message.role、消息内容和模型等字段,因此能够被摘要解析器识别成“看起来正常”的会话。结果是:运行子代理后,会话侧边栏中会多出若干会话,标题通常类似:
但这些条目无法作为正常 Pi 会话打开或恢复。
这看起来是 PiDeck 的递归会话扫描器与
pi-subagentstranscript artifact 之间的格式/命名空间冲突。Steps to reproduce
安装并启动 PiDeck。
打开一个项目并开始普通 Pi 会话。
通过
pi-subagents启动一个子代理,例如worker、scout或reviewer。等待子代理开始运行或运行完成。
等待 PiDeck 刷新或重新扫描会话列表。
观察侧边栏中新增的会话条目。
检查该条目的文件路径,可以看到它指向类似以下文件:
尝试打开、恢复或继续该会话。
重复运行子代理后,会话列表中会不断增加类似的无效条目。
Expected behavior
PiDeck 应当只索引有效的 Pi session JSONL 文件。
至少应验证文件的第一条有效 JSON 记录满足:
以下目录中的非会话 artifact 不应显示在会话列表中:
真正的嵌套子代理会话,例如:
包含有效的 Pi session header,因此仍可根据产品设计正常索引或分组显示。
Actual behavior
PiDeck 会将
*_transcript.jsonl文件作为 active session 加入会话列表。Transcript 的第一条记录类似:
{ "version": 1, "recordType": "message", "source": "foreground", "runId": "<redacted>", "agent": "worker", "cwd": "<project-path>", "sourceEventType": "initial_prompt", "role": "user", "message": { "role": "user", "content": [ { "type": "text", "text": "[prompt redacted]; live Prompt Audit only." } ] } }它并不包含 Pi 会话所需的 header:
{ "type": "session", "version": 3, "id": "<session-id>", "timestamp": "<timestamp>", "cwd": "<project-path>" }PiDeck 可以从 transcript 中提取足够的信息并将其显示在侧边栏中,但在真正恢复会话时,会把该路径作为
--session参数传给 Pi,而 Pi 会因为文件不是有效 session 而拒绝加载。在当前受影响的环境中,
session-catalog.json中共有 64 条记录,其中 13 条指向:OS
Windows 10 专业工作站版,10.0.19045.6456,x64
Node.js version
v24.14.1
pi version
0.84.2
Logs or screenshots