@clawos-dev/clawd 0.2.347 → 0.2.348

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/dist/cli.cjs CHANGED
@@ -6935,7 +6935,12 @@ var init_schemas = __esm({
6935
6935
  // 没选时 UI 拿它显示确切值,而不是「由 CC 决定」这种占位。
6936
6936
  resolvedEffort: external_exports.string().optional(),
6937
6937
  contextUsage: ContextUsageSchema.optional(),
6938
- contextWindowSize: external_exports.number().int().positive().optional()
6938
+ contextWindowSize: external_exports.number().int().positive().optional(),
6939
+ // AI 生成的会话标题(CC transcript 的 ai-title 行 / codex thread/name/updated 通知)。
6940
+ // 与用户手改的 label 分离:用户 Rename 只写 label,AI 只写 aiLabel,显示优先级
6941
+ // label > aiLabel——结构上杜绝「自动标题覆盖用户改名」。创建时 UI 把首行截断
6942
+ // 占位写进 SessionCreateArgs.aiLabel,之后由 meta_update 用真标题覆盖。
6943
+ aiLabel: external_exports.string().optional()
6939
6944
  };
6940
6945
  SessionMetaSchema = external_exports.object(sessionMetaShape);
6941
6946
  SelectOptionSchema = external_exports.object({
@@ -7358,6 +7363,9 @@ var init_schemas = __esm({
7358
7363
  cwd: external_exports.string().min(1).optional(),
7359
7364
  tool: external_exports.string().optional(),
7360
7365
  label: external_exports.string().optional(),
7366
+ // AI 标题的创建期占位(UI 传首行截断);正式值由 daemon 经 meta_update 投递,
7367
+ // session:update 不接受此字段(用户改名走 label)
7368
+ aiLabel: external_exports.string().optional(),
7361
7369
  model: external_exports.string().optional(),
7362
7370
  permissionMode: external_exports.string().optional(),
7363
7371
  effort: external_exports.string().optional(),
@@ -7382,6 +7390,9 @@ var init_schemas = __esm({
7382
7390
  tool: external_exports.string().min(1),
7383
7391
  toolSessionId: external_exports.string().min(1),
7384
7392
  label: external_exports.string().optional(),
7393
+ // 扫描派生的标题(ai-title / 首条消息截断)走这里——label 归用户手改专属,
7394
+ // 写 label 会把自动标题焊死在最高显示优先级、live 更新的 aiLabel 永远不显示
7395
+ aiLabel: external_exports.string().optional(),
7385
7396
  iconKey: external_exports.string().optional(),
7386
7397
  createdAt: external_exports.string().datetime(),
7387
7398
  updatedAt: external_exports.string().datetime(),
@@ -14686,6 +14697,13 @@ function parseClaudeObjectInner(obj) {
14686
14697
  if (typeof effort === "string" && effort.length > 0) {
14687
14698
  events.push({ kind: "meta_update", patch: { resolvedEffort: effort } });
14688
14699
  }
14700
+ if (type === "ai-title") {
14701
+ const title = obj.aiTitle;
14702
+ if (typeof title === "string" && title.length > 0) {
14703
+ events.push({ kind: "meta_update", patch: { aiLabel: title } });
14704
+ }
14705
+ return events;
14706
+ }
14689
14707
  if (type === "system" && subtype === "init") {
14690
14708
  const sid = obj.session_id;
14691
14709
  const model = obj.model;
@@ -44586,7 +44604,7 @@ function eqContextUsage(a, b2) {
44586
44604
  return a.inputTokens === b2.inputTokens && a.outputTokens === b2.outputTokens && a.cacheReadTokens === b2.cacheReadTokens && a.cacheCreateTokens === b2.cacheCreateTokens;
44587
44605
  }
44588
44606
  function shallowEqMeta(a, b2) {
44589
- return a.gitBranch === b2.gitBranch && a.resolvedModel === b2.resolvedModel && a.resolvedEffort === b2.resolvedEffort && a.contextWindowSize === b2.contextWindowSize && eqContextUsage(a.contextUsage, b2.contextUsage);
44607
+ return a.gitBranch === b2.gitBranch && a.resolvedModel === b2.resolvedModel && a.resolvedEffort === b2.resolvedEffort && a.contextWindowSize === b2.contextWindowSize && a.aiLabel === b2.aiLabel && eqContextUsage(a.contextUsage, b2.contextUsage);
44590
44608
  }
44591
44609
  function applyMetaUpdate(state, patch, deps) {
44592
44610
  const next = cloneState(state);
@@ -44983,6 +45001,8 @@ function applyCommand(state, command, deps) {
44983
45001
  contextWindowSize: _win,
44984
45002
  gitBranch: _branch,
44985
45003
  resolvedModel: _model,
45004
+ // aiLabel 是旧对话内容生成的标题,/clear 后属于不存在的话题,一并清掉
45005
+ aiLabel: _aiLabel,
44986
45006
  ...rest
44987
45007
  } = next.file;
44988
45008
  void _drop;
@@ -44990,6 +45010,7 @@ function applyCommand(state, command, deps) {
44990
45010
  void _win;
44991
45011
  void _branch;
44992
45012
  void _model;
45013
+ void _aiLabel;
44993
45014
  const nextFile = {
44994
45015
  ...rest,
44995
45016
  ...command.nextToolSessionId ? { toolSessionId: command.nextToolSessionId } : {},
@@ -46396,6 +46417,7 @@ var SessionManager = class {
46396
46417
  tool,
46397
46418
  toolSessionId,
46398
46419
  label: args.label,
46420
+ aiLabel: args.aiLabel,
46399
46421
  model: args.model,
46400
46422
  permissionMode: args.permissionMode,
46401
46423
  effort: args.effort,
@@ -46435,6 +46457,7 @@ var SessionManager = class {
46435
46457
  tool: args.tool,
46436
46458
  toolSessionId: args.toolSessionId,
46437
46459
  label: args.label,
46460
+ aiLabel: args.aiLabel,
46438
46461
  iconKey: args.iconKey,
46439
46462
  ownerPersonaId: args.ownerPersonaId,
46440
46463
  creatorPrincipalId,
@@ -49572,6 +49595,11 @@ function translateNotification(method, params) {
49572
49595
  return itemCompleted(rec(p2?.item));
49573
49596
  case "thread/tokenUsage/updated":
49574
49597
  return tokenUsage(rec(rec(p2?.tokenUsage)));
49598
+ // codex 自动生成的 thread 标题(实测 0.145:payload = { threadId, threadName })
49599
+ case "thread/name/updated": {
49600
+ const name = str(p2?.threadName);
49601
+ return name ? [{ kind: "meta_update", patch: { aiLabel: name } }] : [];
49602
+ }
49575
49603
  case "turn/completed":
49576
49604
  return turnCompleted(rec(p2?.turn));
49577
49605
  default:
@@ -58520,7 +58548,7 @@ function buildSessionHandlers(deps) {
58520
58548
  appendImportLedger(deps.dataDir, {
58521
58549
  sessionId: String(response.sessionId),
58522
58550
  tool: args.tool,
58523
- ...args.label ? { label: args.label } : {},
58551
+ ...args.label || args.aiLabel ? { label: args.label ?? args.aiLabel } : {},
58524
58552
  toolSessionId: args.toolSessionId,
58525
58553
  ...args.ownerPersonaId ? { ownerPersonaId: args.ownerPersonaId } : {}
58526
58554
  });
@@ -60199,7 +60227,7 @@ function computeMethodAccess(args) {
60199
60227
  }
60200
60228
 
60201
60229
  // src/version.ts
60202
- var version = "0.2.347".length > 0 ? "0.2.347" : "dev";
60230
+ var version = "0.2.348".length > 0 ? "0.2.348" : "dev";
60203
60231
 
60204
60232
  // src/cli-probe/probe.ts
60205
60233
  var fs59 = __toESM(require("fs"), 1);
@@ -22063,7 +22063,12 @@ var sessionMetaShape = {
22063
22063
  // 没选时 UI 拿它显示确切值,而不是「由 CC 决定」这种占位。
22064
22064
  resolvedEffort: external_exports.string().optional(),
22065
22065
  contextUsage: ContextUsageSchema.optional(),
22066
- contextWindowSize: external_exports.number().int().positive().optional()
22066
+ contextWindowSize: external_exports.number().int().positive().optional(),
22067
+ // AI 生成的会话标题(CC transcript 的 ai-title 行 / codex thread/name/updated 通知)。
22068
+ // 与用户手改的 label 分离:用户 Rename 只写 label,AI 只写 aiLabel,显示优先级
22069
+ // label > aiLabel——结构上杜绝「自动标题覆盖用户改名」。创建时 UI 把首行截断
22070
+ // 占位写进 SessionCreateArgs.aiLabel,之后由 meta_update 用真标题覆盖。
22071
+ aiLabel: external_exports.string().optional()
22067
22072
  };
22068
22073
  var SessionMetaSchema = external_exports.object(sessionMetaShape);
22069
22074
  var SelectOptionSchema = external_exports.object({
@@ -22486,6 +22491,9 @@ var SessionCreateArgs = external_exports.object({
22486
22491
  cwd: external_exports.string().min(1).optional(),
22487
22492
  tool: external_exports.string().optional(),
22488
22493
  label: external_exports.string().optional(),
22494
+ // AI 标题的创建期占位(UI 传首行截断);正式值由 daemon 经 meta_update 投递,
22495
+ // session:update 不接受此字段(用户改名走 label)
22496
+ aiLabel: external_exports.string().optional(),
22489
22497
  model: external_exports.string().optional(),
22490
22498
  permissionMode: external_exports.string().optional(),
22491
22499
  effort: external_exports.string().optional(),
@@ -22510,6 +22518,9 @@ var SessionImportExternalArgs = external_exports.object({
22510
22518
  tool: external_exports.string().min(1),
22511
22519
  toolSessionId: external_exports.string().min(1),
22512
22520
  label: external_exports.string().optional(),
22521
+ // 扫描派生的标题(ai-title / 首条消息截断)走这里——label 归用户手改专属,
22522
+ // 写 label 会把自动标题焊死在最高显示优先级、live 更新的 aiLabel 永远不显示
22523
+ aiLabel: external_exports.string().optional(),
22513
22524
  iconKey: external_exports.string().optional(),
22514
22525
  createdAt: external_exports.string().datetime(),
22515
22526
  updatedAt: external_exports.string().datetime(),
@@ -433,7 +433,9 @@ async function link(cand, icon, ownerPersonaId = '') {
433
433
  cwd: cand.cwd,
434
434
  tool: cand.tool,
435
435
  toolSessionId: cand.toolSessionId,
436
- label: cand.label || `${cand.tool} 会话`,
436
+ // 扫描派生的标题写 aiLabel 不写 label——label 归用户手改专属(写 label 会把
437
+ // 自动标题焊死在最高显示优先级,live 更新的 ai-title 永远不显示)
438
+ aiLabel: cand.label || `${cand.tool} 会话`,
437
439
  iconKey: icon,
438
440
  createdAt: isoOf(cand.createdMs),
439
441
  updatedAt: isoOf(cand.updatedMs),