@zhushanwen/pi-rename-session 0.9.2 → 0.9.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md
CHANGED
|
@@ -39,7 +39,7 @@ pi install npm:@zhushanwen/pi-rename-session
|
|
|
39
39
|
|---|---|---|---|
|
|
40
40
|
| `enabled` | `boolean` | `false` | 自动重命名开关(受 flag 文件覆盖,见下) |
|
|
41
41
|
| `model` | `ModelSelector` | `{ "type": "ref", "ref": "" }` | 标题生成模型,仅支持精确指定 `{type:"ref", ref:"provider/modelId"}`;**空 ref 跟随会话主模型**(开箱即用),非空但解析失败(配错)才静默跳过 |
|
|
42
|
-
| `mode` | `"first-prompt" \| "first-stop" \| "agent-tool"` | `"first-stop"` | 触发模式(三值互斥):首条请求即命名 / 首个成功 round 末命名(现状)/ agent 自主经 `rename_session` 工具命名。事件面每次事件 live 读(GUI 切换对活跃 session
|
|
42
|
+
| `mode` | `"first-prompt" \| "first-stop" \| "agent-tool"` | `"first-stop"` | 触发模式(三值互斥):首条请求即命名 / 首个成功 round 末命名(现状)/ agent 自主经 `rename_session` 工具命名。事件面每次事件 live 读(GUI 切换对活跃 session 的自动命名即时生效);工具注册面在 extension 工厂执行时求值(每 session 创建一次——taiji 每 session 一个 pi 进程;原生 pi CLI 同进程 /fork、/session 新建 session 亦重新求值),session 存活期内不回溯(pi 无 unregisterTool),切换后已存活 session 的残留工具由 execute 内 live mode 守卫拒绝并给恢复指引 |
|
|
43
43
|
| `maxTitleLength` | `number` | `50` | 标题最大长度(Unicode 码点数,须正整数) |
|
|
44
44
|
| `thinkingLevel` | `ModelThinkingLevel` | `"off"` | 标题 LLM 的 thinking 级别(`off` = 不传 reasoning,provider 默认) |
|
|
45
45
|
|
|
@@ -57,15 +57,15 @@ pi install npm:@zhushanwen/pi-rename-session
|
|
|
57
57
|
|
|
58
58
|
```
|
|
59
59
|
/auto-rename # 查看当前状态
|
|
60
|
-
/auto-rename on # 开启(创建 flag
|
|
61
|
-
/auto-rename off # 关闭(写 config.enabled=false + 删 flag
|
|
60
|
+
/auto-rename on # 开启(创建 flag 文件;enable 别名等效)
|
|
61
|
+
/auto-rename off # 关闭(写 config.enabled=false + 删 flag,双写同步;disable 别名等效)
|
|
62
62
|
```
|
|
63
63
|
|
|
64
64
|
## 工作原理
|
|
65
65
|
|
|
66
66
|
三个入口共用同一条落库管道(`callRenameLLM` → 防覆盖重查 → `setSessionName`),按 `mode` 分派:
|
|
67
67
|
|
|
68
|
-
1. **入口分派(事件面 live 读 mode)**:`message_end` 入口(first-prompt)过滤 `role === "user"`;`turn_end` 入口(first-stop)按下方流程;`agent-tool` 模式不激活自动命名逻辑(两 handler 常驻注册、命中即静默返回),改为 extension
|
|
68
|
+
1. **入口分派(事件面 live 读 mode)**:`message_end` 入口(first-prompt)过滤 `role === "user"`;`turn_end` 入口(first-stop)按下方流程;`agent-tool` 模式不激活自动命名逻辑(两 handler 常驻注册、命中即静默返回),改为 extension 工厂执行时(每 session 创建一次)注册 `rename_session` 工具。
|
|
69
69
|
2. **开关 + subagent 过滤**(自动路径共用):开关关闭(flag 不存在且 `enabled=false`)直接返回;session 路径含 `subagents` 段视为子进程 session,跳过。
|
|
70
70
|
3. **O(1) 快速路径(first-stop)**:只有 `stopReason === "stop"` 的 turn 才继续——**rename 一定在 round 末触发**(最终 turn 的 message 即最终 assistant 回复,final text 零遍历可得),不会在首个 iteration 中途命名。first-prompt 入口的对应守卫:首条 user 判定 = handler 执行时 `getEntries()` 中 user message 计数 === 0(pi 的 extension handler 先于该条 message 的 entries append 执行,本条即 session 首条 user;steering/follow-up 消息到达时首条已入 entries,天然不重复触发)。
|
|
71
71
|
4. **首 round 判定(first-stop)**:session entries 中成功(stop)assistant 回复数 === 1 才触发(后续 round 不重复 rename;error 轮的 assistant 回复不计数,延迟到下一个成功轮)。
|
|
@@ -95,7 +95,7 @@ rename 是 best-effort 副作用,任何失败静默跳过、绝不阻断 agent
|
|
|
95
95
|
|
|
96
96
|
所有日志经 `@zhushanwen/pi-extension-logger` 输出,两个通道:
|
|
97
97
|
|
|
98
|
-
- **appendEntry(session entry,常开)**:`logger.warn` / `logger.error` 写入 session JSONL 的 custom entry(`type: "custom"`、`customType: "rename-session:log"`),不进 LLM 上下文、不显 TUI。`data.message` 由 logger 自动补 `[rename-session]` 前缀,格式为 `msg + 结构化 data`(error 等详情在 entry `data.data` 字段,不冒号拼接进 message)。
|
|
98
|
+
- **appendEntry(session entry,常开)**:`logger.warn` / `logger.error` 写入 session JSONL 的 custom entry(`type: "custom"`、`customType: "rename-session:log"`),不进 LLM 上下文、不显 TUI。`data.message` 由 logger 自动补 `[rename-session]` 前缀,格式为 `msg + 结构化 data`(error 等详情在 entry `data.data` 字段,不冒号拼接进 message)。extension-logger 对同 key 重复文案有 60s 窗口 ×10 条限流(超限抑制,窗口过期后补一条聚合摘要;文案含变量值如 `count=<n>` 时 key 不同,不触及)。
|
|
99
99
|
- **文件日志(`TAIJI_AGENT_DEBUG=1` 时)**:`<agentDir>/logs/rename-session-<date>.log`。
|
|
100
100
|
|
|
101
101
|
下列 debug 日志(仅 `TAIJI_AGENT_DEBUG=1` 时经 `logger.warn` 发出)的**文案字面值是 E2E 断言硬契约**(断言对象 = appendEntry entry 的 message 内容;变更须同步 `e2e/` 场景脚本与单测):
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zhushanwen/pi-rename-session",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.4",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "index.ts",
|
|
6
6
|
"taiji": {
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"dependencies": {
|
|
36
36
|
"@zhushanwen/pi-ext-guards": "0.4.1",
|
|
37
37
|
"@zhushanwen/pi-extension-logger": "0.6.1",
|
|
38
|
-
"@zhushanwen/pi-llm-shared": "0.
|
|
38
|
+
"@zhushanwen/pi-llm-shared": "0.9.0"
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
41
41
|
"@vitest/coverage-v8": "^4.1.9",
|
|
@@ -11,7 +11,7 @@ description: "配置 @zhushanwen/pi-rename-session(会话自动重命名)时
|
|
|
11
11
|
|
|
12
12
|
`<agentDir>/config/rename-session-ext-config.json`
|
|
13
13
|
|
|
14
|
-
- `<agentDir>` = pi agent 目录(`PI_CODING_AGENT_DIR` 覆盖,默认 `~/.pi/agent`;taiji 隔离环境为 `~/.taiji/
|
|
14
|
+
- `<agentDir>` = pi agent 目录(`PI_CODING_AGENT_DIR` 覆盖,默认 `~/.pi/agent`;taiji 隔离环境为 `~/.taiji/agent`)
|
|
15
15
|
- 走 llm-shared 泛型 config(config/ 子目录 + getAgentDir 派生 + mtime+size 缓存 + 原子写)
|
|
16
16
|
- 文件缺失/坏 JSON 返回默认值,不抛错
|
|
17
17
|
|