oc-retry-guard 插件(严重错误自动重试·事不过三2分钟周期)+ 会话面板 v11 排版(日期降序+sessionID)

- 新增 oc-retry-guard.ts:http.response 钩子读 body 识别 finish reason 类错误,
  命中后按 2分钟窗口/最多3次 计数,自动用缓存 body 追加 nudge 重发同端点并替换 response;
  超 3 次或超 120s 自动归零,事不过三后 STOP。
- tui.js 会话选择器 v11:从按项目分组改为全局按 time.updated 降序,title 末尾加 [sessionID前8位]。
- sync_wsl.py ITEMS 增加 oc-retry-guard 同步项。
This commit is contained in:
ypshidifu
2026-10-19 09:24:20 +08:00
parent 2f91a612bb
commit fcf188bf28
3 changed files with 266 additions and 18 deletions
+17 -18
View File
@@ -732,27 +732,26 @@ export default Plugin.define({
return
}
const grouped = new Map()
for (const session of visible) {
const name = projectDisplayName(session, projectMap)
const list = grouped.get(name) ?? []
list.push(session)
grouped.set(name, list)
// v11 排版(2026-10-19 用户明令):
// ① 全部会话按日期从近到远排序(不再按项目分组 + 按项目字母序)
// ② title 里插入 session ID(短前缀 8 字符,避免整行被 ID 挤爆)
const visibleSorted = visible.sort(
(a, b) => ((b.time?.updated ?? 0) - (a.time?.updated ?? 0)),
)
const shortID = (id) => {
const s = String(id || "")
return s.length > 12 ? s.slice(0, 8) + "…" : s
}
for (const list of grouped.values()) {
list.sort((a, b) => (b.time?.updated ?? 0) - (a.time?.updated ?? 0))
}
const orderedProjects = [...grouped.keys()].sort((a, b) => a.localeCompare(b))
const options = orderedProjects.flatMap((project) =>
grouped.get(project).map((session) => ({
title: `${project} ${
session.time?.updated ? formatDateTime(session.time.updated) : "未知时间"
} │ ${session.title || "无标题"}`,
const options = visibleSorted.map((session) => {
const project = projectDisplayName(session, projectMap)
const ts = session.time?.updated ? formatDateTime(session.time.updated) : "未知时间"
const idTag = shortID(session.id)
return {
title: `${project} ${ts} │ ${session.title || "无标题"} [${idTag}]`,
value: session.id,
category: project,
})),
)
}
})
log("[oc-session-all] picker options built: " + options.length)
const selected = await context.ui.dialog.select({