@zhushanwen/pi-rename-session 0.10.0 → 0.11.0

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zhushanwen/pi-rename-session",
3
- "version": "0.10.0",
3
+ "version": "0.11.0",
4
4
  "type": "module",
5
5
  "main": "index.ts",
6
6
  "taiji": {
@@ -33,9 +33,9 @@
33
33
  "pi-package"
34
34
  ],
35
35
  "dependencies": {
36
- "@zhushanwen/pi-ext-guards": "0.4.2",
37
- "@zhushanwen/pi-extension-logger": "0.6.1",
38
- "@zhushanwen/pi-llm-shared": "0.11.0"
36
+ "@zhushanwen/pi-ext-guards": "0.4.3",
37
+ "@zhushanwen/pi-extension-logger": "0.6.2",
38
+ "@zhushanwen/pi-llm-shared": "0.11.1"
39
39
  },
40
40
  "devDependencies": {
41
41
  "@vitest/coverage-v8": "^4.1.9",
@@ -48,9 +48,9 @@
48
48
  "vitest.config.ts"
49
49
  ],
50
50
  "peerDependencies": {
51
- "@earendil-works/pi-coding-agent": "^0.84.4",
52
- "@earendil-works/pi-ai": "^0.84.4",
53
- "typebox": "*"
51
+ "@earendil-works/pi-coding-agent": "^1.0.0",
52
+ "@earendil-works/pi-ai": "^1.0.0",
53
+ "typebox": "1.3.27"
54
54
  },
55
55
  "peerDependenciesMeta": {
56
56
  "@earendil-works/pi-coding-agent": {
@@ -826,7 +826,7 @@ describe("rename_session 工具注册与 execute 守卫(D3)", () => {
826
826
  expect(setup.registerToolMock).not.toHaveBeenCalled();
827
827
  });
828
828
 
829
- it("TC-T4: execute 时 live mode 非 agent-tool(load 是 agent-tool、运行中切走)→ isError(经 throw,pi 0.84.4 实装契约),文案含恢复动作指引", async () => {
829
+ it("TC-T4: execute 时 live mode 非 agent-tool(load 是 agent-tool、运行中切走)→ isError(经 throw,pi 1.0.0 实装契约),文案含恢复动作指引", async () => {
830
830
  setupWithMode(AGENT_TOOL_CONFIG); // load 时注册
831
831
  const tool = setup.registeredTool as RegisteredRenameTool;
832
832
 
@@ -469,7 +469,7 @@ describe("callRenameLLM", () => {
469
469
  );
470
470
  });
471
471
 
472
- it("传给 callLLM 的 opts:model/systemPrompt(<200)/maxTokens=2048/timeoutMs=30000/signal/sessionId/无 tools,messages 三段式", async () => {
472
+ it("传给 callLLM 的 opts:model/systemPrompt(<200)/maxTokens=2048/不传 timeoutMs/signal/sessionId/无 tools,messages 三段式", async () => {
473
473
  vi.mocked(resolveModel).mockReturnValue(STUB_MODEL);
474
474
  vi.mocked(callLLM).mockResolvedValue({ ok: true, content: "标题" });
475
475
  await callRenameLLM(createCtx(), BASE_CONFIG, FINAL_MESSAGE);
@@ -480,7 +480,7 @@ describe("callRenameLLM", () => {
480
480
  systemPrompt: string;
481
481
  messages: { role: string; content: { type: string; text: string }[] }[];
482
482
  maxTokens: number;
483
- timeoutMs: number;
483
+ timeoutMs?: number;
484
484
  signal: AbortSignal;
485
485
  sessionId: string;
486
486
  tools?: unknown;
@@ -490,8 +490,8 @@ describe("callRenameLLM", () => {
490
490
  expect(callOpts.systemPrompt.length).toBeLessThan(200);
491
491
  // 输出预算覆盖 thinking+标题(reasoning 模型 thinking 600-1500 tokens 计入预算,64 必截断)
492
492
  expect(callOpts.maxTokens).toBe(2048);
493
- // 固定 30s 超时(超时归一 ok:false 走静默跳过)
494
- expect(callOpts.timeoutMs).toBe(30000);
493
+ // 不传超时(ADR-0122:无包内超时兜底,失败直报)
494
+ expect(callOpts.timeoutMs).toBeUndefined();
495
495
  expect(callOpts.signal).toBeInstanceOf(AbortSignal);
496
496
  expect(callOpts.sessionId).toBe("test-session-id");
497
497
  // 三段式:user(prompt) + assistant(finalText) + user(instruction)
package/src/index.ts CHANGED
@@ -64,9 +64,11 @@ const RENAME_TOOL_SUBAGENT_GUARD_MESSAGE =
64
64
  * 子进程同样加载本 extension(全局 mode=agent-tool 时 subagent 也注册本工具),
65
65
  * 子会话是临时产物不参与 rename 体系,与 message_end / turn_end 两入口同语义。
66
66
  * - execute 内 live 读 config 守卫:mode !== "agent-tool"(mode 切走后本工具残留在
67
- * 已存活 session 的工具清单——pi 无 unregisterTool)→ throw isError(pi 0.84.4 实装:
68
- * execute 正常返回的 isError 字段被丢弃,isError 状态只能经 throw 产生,
69
- * agent-loop.js executePreparedToolCall catch → createErrorToolResult(message))。
67
+ * 已存活 session 的工具清单——pi 无 unregisterTool)→ throw isError(pi 1.0.0 实装:
68
+ * execute 抛出经 pi-agent-core agent-loop.js executePreparedToolCall 外层 catch 统一转
69
+ * isError:true 的 error tool result〔:581-588 createErrorToolResult(message)〕;统一
70
+ * throw 为纪律选择(单一错误路径),非「返回值 isError 失效」——1.0.0 起返回值上的
71
+ * isError 标记同样被尊重〔:579〕)。
70
72
  * - cleanTitle 空值同样 throw isError(空白/纯标点标题不可落库)。
71
73
  * - 非空直接 pi.setSessionName,不走 getSessionName() 防覆盖守卫——agent 显式调用
72
74
  * 是「代表用户的意图」,语义等同 GUI 手动 rename,允许覆盖任何既有名(含自动名/语义名)。
package/src/llm.ts CHANGED
@@ -154,10 +154,7 @@ export function buildTitleMessages(
154
154
  return messages;
155
155
  }
156
156
 
157
- // ──────────────────────── debug 证据链 + 超时 ────────────────────────
158
-
159
- /** rename LLM 超时(固定值:实测 2048 预算下独立调用 5-12.5s,30s 约 2.4x+ 余量;超时归一 ok:false 静默跳过)。 */
160
- const RENAME_TIMEOUT_MS = 30_000;
157
+ // ──────────────────────── debug 证据链 ────────────────────────
161
158
 
162
159
  /** title empty warn 的 raw 预览上限(Unicode 码点数;预览是 LLM 标题候选,非对话原文)。 */
163
160
  const TITLE_EMPTY_RAW_PREVIEW_CODE_POINTS = 100;
@@ -308,12 +305,10 @@ export async function callRenameLLM(
308
305
  // 输出预算必须覆盖「thinking + 标题」两部分:thinking 计入 maxTokens 的模型
309
306
  //(StepFun step-5-preview 实测 thinking 600-1500 tokens 且不可禁用/不可压低,
310
307
  // reasoning_effort/thinking 参数均被无视)在 64 预算下正文必然截断为空。
311
- // 2048 = 实测最大总输出 843 tokens 的 2.4x 余量;不给 4096+ 是因为最坏满额时长
312
- //(4096 ÷ 67 tok/s ≈ 61s)远超 30s 超时线。截断发生时空标题 warn 带 stopReason=length 留痕,
308
+ // 2048 = 实测最大总输出 843 tokens 的 2.4x 余量。截断发生时空标题 warn 带 stopReason=length 留痕,
313
309
  // 该 warn 累积出现即上调本常量的数据信号。maxTokens 是截断上限非预扣额度,按实际用量计费。
314
310
  maxTokens: 2048,
315
- // 固定 30s 超时(网络抖动归一为 ok:false 走静默跳过,不悬挂 fire-and-forget promise)
316
- timeoutMs: RENAME_TIMEOUT_MS,
311
+ // 不传 timeoutMs(ADR-0122:不设包内超时兜底,LLM 挂死由上层失败直报;调用方显式超时走 llm-shared C2 通道)
317
312
  // 档位按「该模型自己的 supportedLevels」判定(pi-ai 数据驱动,本层不自持词表):
318
313
  // 配置写了该模型不支持的档位 → 留痕并按「不传档位」处理(不静默换成别的档)。
319
314
  // llm-shared 内部会把 "off" 映射为不传 reasoning(provider 默认)。