@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 +32 -4
- package/dist/dispatch/mcp-server.cjs +12 -1
- package/dist/persona-defaults/persona-clawd-butler/.claude/skills/clawd-session-import/scripts/link-sessions.mjs +3 -1
- package/dist/share-ui/assets/{guest-M3W8_7kj.js → guest-D2HBeAD5.js} +3 -3
- package/dist/share-ui/guest.html +1 -1
- package/package.json +1 -1
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.
|
|
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
|
-
|
|
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),
|