Version not found. Please check the version and try again.

pi-lazy-panel 0.1.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.
Files changed (55) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +104 -0
  3. package/README.zh.md +104 -0
  4. package/docs/design.md +235 -0
  5. package/docs/keybindings.md +172 -0
  6. package/docs/keybindings.zh.md +172 -0
  7. package/package.json +67 -0
  8. package/src/actions/session-actions.ts +585 -0
  9. package/src/actions/tree-actions.ts +161 -0
  10. package/src/config/config.ts +155 -0
  11. package/src/config/keymap.ts +219 -0
  12. package/src/config/keys.ts +279 -0
  13. package/src/config/pi-settings.ts +54 -0
  14. package/src/constants.ts +48 -0
  15. package/src/data/changelog.ts +63 -0
  16. package/src/data/content.ts +178 -0
  17. package/src/data/search.ts +183 -0
  18. package/src/data/sessions.ts +148 -0
  19. package/src/data/tree-fold.ts +163 -0
  20. package/src/data/tree.ts +258 -0
  21. package/src/i18n/index.ts +103 -0
  22. package/src/i18n/locales/en.json +341 -0
  23. package/src/i18n/locales/zh.json +341 -0
  24. package/src/index.ts +155 -0
  25. package/src/types.ts +346 -0
  26. package/src/ui/app.ts +2892 -0
  27. package/src/ui/frame.ts +116 -0
  28. package/src/ui/mouse-input.ts +197 -0
  29. package/src/ui/mouse.ts +99 -0
  30. package/src/ui/panes/content-pane.ts +132 -0
  31. package/src/ui/panes/sessions-pane.ts +161 -0
  32. package/src/ui/panes/tree-pane.ts +152 -0
  33. package/src/ui/search-highlight.ts +108 -0
  34. package/src/ui/tree-lines.ts +111 -0
  35. package/src/ui/tree-outline.ts +80 -0
  36. package/src/ui/widgets/changelog-dialog.ts +196 -0
  37. package/src/ui/widgets/compact-dialog.ts +29 -0
  38. package/src/ui/widgets/confirm-dialog.ts +98 -0
  39. package/src/ui/widgets/export-dialog.ts +62 -0
  40. package/src/ui/widgets/footer.ts +117 -0
  41. package/src/ui/widgets/fork-dialog.ts +28 -0
  42. package/src/ui/widgets/help-overlay.ts +220 -0
  43. package/src/ui/widgets/import-dialog.ts +32 -0
  44. package/src/ui/widgets/input-dialog.ts +136 -0
  45. package/src/ui/widgets/label-dialog.ts +28 -0
  46. package/src/ui/widgets/new-session-dialog.ts +29 -0
  47. package/src/ui/widgets/prompt-bar.ts +92 -0
  48. package/src/ui/widgets/rename-dialog.ts +29 -0
  49. package/src/ui/widgets/restore-dialog.ts +60 -0
  50. package/src/ui/widgets/search-bar.ts +65 -0
  51. package/src/ui/widgets/select-dialog.ts +193 -0
  52. package/src/ui/widgets/session-info-dialog.ts +189 -0
  53. package/src/ui/widgets/tree-dialog.ts +293 -0
  54. package/src/utils/format.ts +83 -0
  55. package/src/utils/paths.ts +33 -0
@@ -0,0 +1,341 @@
1
+ {
2
+ "command": {
3
+ "description": "Open the lazygit-style session panel (sessions / tree / content)"
4
+ },
5
+ "mode": {
6
+ "normal": "NORMAL",
7
+ "search": "SEARCH",
8
+ "label": "LABEL",
9
+ "restore": "RESTORE",
10
+ "tree": "TREE",
11
+ "confirm": "CONFIRM",
12
+ "rename": "RENAME",
13
+ "info": "INFO",
14
+ "new": "NEW",
15
+ "fork": "FORK",
16
+ "clone": "CLONE",
17
+ "export": "EXPORT",
18
+ "import": "IMPORT",
19
+ "share": "SHARE",
20
+ "changelog": "CHANGELOG",
21
+ "compact": "COMPACT",
22
+ "visual": "VISUAL",
23
+ "preview": "PREVIEW"
24
+ },
25
+ "pane": {
26
+ "sessionsTitle": "SESSIONS",
27
+ "treeTitle": "TREE",
28
+ "contentTitle": "CONTENT",
29
+ "sessionsEmpty": "No sessions found.",
30
+ "treeEmpty": "No entries.",
31
+ "contentEmpty": "No messages.",
32
+ "emptySession": "(empty session)",
33
+ "msgs": "{{count}} msgs",
34
+ "selected": "{{count}} selected",
35
+ "messages": "{{count}} messages",
36
+ "selectSession": "Select a session.",
37
+ "loading": "Loading…",
38
+ "nothingToShow": "Nothing to show.",
39
+ "you": "YOU",
40
+ "assistant": "ASSISTANT"
41
+ },
42
+ "role": {
43
+ "user": "user",
44
+ "assistant": "assistant",
45
+ "tool": "tool"
46
+ },
47
+ "scope": {
48
+ "currentLong": "Current",
49
+ "currentShort": "Cur",
50
+ "allLong": "All",
51
+ "allShort": "All"
52
+ },
53
+ "sort": {
54
+ "recent": "recent",
55
+ "created": "created",
56
+ "title": "title",
57
+ "threaded": "threaded"
58
+ },
59
+ "filter": {
60
+ "default": "default",
61
+ "no-tools": "no-tools",
62
+ "user-only": "user-only",
63
+ "labeled": "labeled",
64
+ "all": "all"
65
+ },
66
+ "action": {
67
+ "focus-next": "Focus next pane",
68
+ "focus-prev": "Focus previous pane",
69
+ "focus-sessions": "Focus sessions pane",
70
+ "focus-tree": "Focus tree pane",
71
+ "focus-content": "Focus content pane",
72
+ "scope-current": "Scope: Current folder",
73
+ "scope-all": "Scope: All",
74
+ "help": "Toggle this help",
75
+ "quit": "Quit the panel",
76
+ "search": "Search in the focused pane",
77
+ "search-next": "Next search match",
78
+ "search-prev": "Previous search match",
79
+ "changelog": "Show pi's changelog (/changelog)",
80
+ "move-down": "Move cursor down",
81
+ "move-up": "Move cursor up",
82
+ "go-top": "Go to top",
83
+ "go-bottom": "Go to bottom",
84
+ "scroll-content-down": "Scroll content pane down",
85
+ "scroll-content-up": "Scroll content pane up",
86
+ "session-resume": "Resume session",
87
+ "session-delete": "Delete session(s)",
88
+ "session-rename": "Rename session",
89
+ "session-fork": "Fork session and open the fork",
90
+ "session-toggle-select": "Toggle multi-select",
91
+ "session-export": "Export to HTML / JSONL",
92
+ "session-import": "Import from JSONL",
93
+ "session-share": "Share as private GitHub Gist",
94
+ "session-clone": "Clone active branch to a new session",
95
+ "session-copy-last-reply": "Copy last assistant reply",
96
+ "session-compact": "Compact this conversation and open it (/compact)",
97
+ "session-sort": "Cycle sort: recent / created / title / threaded",
98
+ "session-new": "New session",
99
+ "session-info": "Session info",
100
+ "tree-restore": "Restore conversation to this node (asks about a branch summary)",
101
+ "tree-copy": "Copy node text",
102
+ "tree-label": "Add / edit label",
103
+ "tree-open": "Open the full tree dialog (search / filters live there)",
104
+ "tree-fold": "Fold / unfold the branch under the cursor (inside a branch: fold it and jump to its head)",
105
+ "tree-filter-default": "Filter: default (hide bookkeeping entries)",
106
+ "tree-filter-no-tools": "Filter: also hide tool results (toggle)",
107
+ "tree-filter-user": "Filter: user messages only (toggle)",
108
+ "tree-filter-labeled": "Filter: labeled entries only (toggle)",
109
+ "tree-filter-all": "Filter: show everything (toggle)",
110
+ "tree-dialog-close": "Close the tree dialog"
111
+ },
112
+ "helpGroup": {
113
+ "focus": "Focus previous / next pane",
114
+ "focusNumber": "Focus pane by number",
115
+ "scope": "Scope: current folder / all",
116
+ "searchStep": "Next / previous search match",
117
+ "topBottom": "Go to top / bottom",
118
+ "scrollContent": "Scroll content pane down / up",
119
+ "filters": "Filter: default / no tool results / user only / labeled only / all (t/u/l/a toggle back to default)"
120
+ },
121
+ "scopeTitle": {
122
+ "global": "Global",
123
+ "sessions": "Sessions pane",
124
+ "tree": "Tree pane",
125
+ "content": "Content pane",
126
+ "tree-dialog": "Tree dialog"
127
+ },
128
+ "help": {
129
+ "titlePrefix": "HELP",
130
+ "closeHint": "? / Esc close",
131
+ "scrollHint": "j/k scroll"
132
+ },
133
+ "footer": {
134
+ "search": "Search",
135
+ "help": "Help",
136
+ "focus-next": "Focus",
137
+ "scope-current": "Current",
138
+ "scope-all": "All",
139
+ "quit": "Quit",
140
+ "session-resume": "Resume",
141
+ "session-delete": "Delete",
142
+ "session-rename": "Rename",
143
+ "session-new": "New",
144
+ "session-fork": "Fork",
145
+ "session-clone": "Clone",
146
+ "session-copy-last-reply": "Copy reply",
147
+ "session-export": "Export",
148
+ "session-import": "Import",
149
+ "session-share": "Share",
150
+ "session-sort": "Sort",
151
+ "session-info": "Info",
152
+ "session-compact": "Compact",
153
+ "tree-restore": "Restore",
154
+ "tree-open": "Tree",
155
+ "tree-fold": "Fold",
156
+ "tree-label": "Label",
157
+ "tree-copy": "Copy",
158
+ "go-top": "Top",
159
+ "go-bottom": "Bottom",
160
+ "changelog": "Changelog"
161
+ },
162
+ "treeHint": {
163
+ "search": "search",
164
+ "move-down": "move",
165
+ "tree-restore": "restore",
166
+ "tree-fold": "fold",
167
+ "tree-copy": "copy",
168
+ "tree-label": "label",
169
+ "tree-filter-default": "filter",
170
+ "tree-dialog-close": "close"
171
+ },
172
+ "hint": {
173
+ "save": "save",
174
+ "cancel": "cancel",
175
+ "searchConfirm": "search",
176
+ "compact": "compact",
177
+ "compactDefault": "= default",
178
+ "removes": "removes",
179
+ "emptyKey": "empty",
180
+ "folderKey": "folder",
181
+ "move": "move",
182
+ "select": "select",
183
+ "back": "back",
184
+ "summarize": "summarize",
185
+ "export": "export",
186
+ "import": "import",
187
+ "create": "create",
188
+ "noName": "no name",
189
+ "defaultInside": "default name inside",
190
+ "choose": "choose",
191
+ "confirm": "confirm",
192
+ "copy": "copy",
193
+ "close": "close",
194
+ "scroll": "scroll",
195
+ "page": "page",
196
+ "topBottom": "top/bottom",
197
+ "backToList": "back to the list"
198
+ },
199
+ "dialog": {
200
+ "labelTitle": "Label",
201
+ "renameTitle": "Rename",
202
+ "newTitle": "New session",
203
+ "importTitle": "Import session",
204
+ "importSubject": "path to a .jsonl file",
205
+ "sessionInfoTitle": "Session Info",
206
+ "changelogTitle": "What's New",
207
+ "changelogLoading": "Loading changelog…",
208
+ "compactTitle": "Compact",
209
+ "treeTitle": "TREE",
210
+ "treeNoMatches": "No matches.",
211
+ "toSearch": "{{key}} to search",
212
+ "exportFormatTitle": "Export as",
213
+ "exportPathTitle": "Export to",
214
+ "exportHtml": "HTML whole tree, opens in a browser",
215
+ "exportJsonl": "JSONL active branch, can be imported again",
216
+ "restoreMenuTitle": "Summarize branch?",
217
+ "restoreNone": "No summary",
218
+ "restoreSummarize": "Summarize",
219
+ "restoreCustom": "Summarize with custom prompt",
220
+ "restoreCustomTitle": "Custom summarization instructions",
221
+ "forkTitle": "Fork before which message?"
222
+ },
223
+ "confirm": {
224
+ "yes": "Yes",
225
+ "no": "No",
226
+ "delete": "Delete session?",
227
+ "deleteN_one": "Delete {{count}} session?",
228
+ "deleteN_other": "Delete {{count}} sessions?",
229
+ "deleteSkipped": "current session skipped · {{subjects}}",
230
+ "clone": "Clone session?",
231
+ "fork": "Fork session?",
232
+ "share": "Upload as secret gist?",
233
+ "import": "Import and switch to it?",
234
+ "overwrite": "Overwrite file?"
235
+ },
236
+ "info": {
237
+ "name": "Name",
238
+ "model": "Model",
239
+ "messages": "Messages",
240
+ "tokens": "Tokens",
241
+ "cost": "Cost",
242
+ "created": "Created",
243
+ "updated": "Updated",
244
+ "path": "Path",
245
+ "id": "ID",
246
+ "none": "(none)",
247
+ "unknown": "(unknown)"
248
+ },
249
+ "search": {
250
+ "label": "Search: ",
251
+ "matches": "{{position}}/{{total}} matches",
252
+ "total": "{{total}} matches",
253
+ "none": "no matches"
254
+ },
255
+ "enter": {
256
+ "resume": "resume",
257
+ "restore": "restore",
258
+ "new": "new",
259
+ "fork": "fork",
260
+ "clone": "clone",
261
+ "import": "import",
262
+ "rename": "rename",
263
+ "export": "export",
264
+ "share": "share",
265
+ "compact": "compact"
266
+ },
267
+ "notify": {
268
+ "tuiOnly": "/{{command}} is only available in TUI mode"
269
+ },
270
+ "status": {
271
+ "loadingSessions": "loading sessions…",
272
+ "summarizing": "summarizing branch…",
273
+ "compacting": "compacting conversation…",
274
+ "compactUnavailable": "compact: actions unavailable",
275
+ "listFailed": "failed to list sessions: {{error}}",
276
+ "openFailed": "failed to open session: {{error}}",
277
+ "loadBranchFailed": "failed to load branch: {{error}}",
278
+ "reloadTreeFailed": "failed to reload tree: {{error}}",
279
+ "noActiveSearch": "no active search — press / first",
280
+ "noMatches": "no matches",
281
+ "noTreeNode": "no tree node selected",
282
+ "noSessionLoaded": "no session loaded",
283
+ "noSessionSelected": "no session selected",
284
+ "nothingToFold": "nothing to fold here",
285
+ "copyUnavailable": "copy: actions unavailable",
286
+ "copiedNode": "copied node text to clipboard",
287
+ "noTextToCopy": "selected entry has no text to copy",
288
+ "copyFailed": "copy failed: {{error}}",
289
+ "labelUnavailable": "label: actions unavailable",
290
+ "labelSet": "label set: {{label}}",
291
+ "labelRemoved": "label removed",
292
+ "labelFailed": "label failed: {{error}}",
293
+ "deleteUnavailable": "delete: actions unavailable",
294
+ "cannotDeleteActive": "Cannot delete the currently active session",
295
+ "deletingN": "deleting {{count}}…",
296
+ "deleting": "deleting…",
297
+ "deleteFailed": "delete failed: {{error}}",
298
+ "movedToTrash": "session moved to trash",
299
+ "deleted": "session deleted",
300
+ "sessionsDeleted_one": "{{count}} session deleted",
301
+ "sessionsDeleted_other": "{{count}} sessions deleted",
302
+ "batchDeletedFailed": "deleted {{deleted}}, {{failed}} failed — {{error}}",
303
+ "selectionCleared": "selection cleared",
304
+ "multiSelectRefused": "{{action}}: cannot act on multiple sessions (Esc clears the selection)",
305
+ "changelogUnavailable": "changelog: unavailable",
306
+ "changelogFailed": "changelog failed: {{error}}",
307
+ "renameUnavailable": "rename: actions unavailable",
308
+ "renameFailed": "rename failed: {{error}}",
309
+ "renamed": "renamed: {{name}}",
310
+ "nameRemoved": "name removed",
311
+ "newUnavailable": "new: actions unavailable",
312
+ "forkUnavailable": "fork: actions unavailable",
313
+ "forkFailed": "fork failed: {{error}}",
314
+ "noForkMessages": "No messages to fork from",
315
+ "cloneUnavailable": "clone: actions unavailable",
316
+ "copiedLastReply": "copied last reply",
317
+ "noReplyToCopy": "no assistant reply to copy",
318
+ "exportUnavailable": "export: actions unavailable",
319
+ "exporting": "exporting…",
320
+ "exportedTo": "exported to {{path}}",
321
+ "exportFailed": "export failed: {{error}}",
322
+ "importUnavailable": "import: actions unavailable",
323
+ "importNoFile": "import: no file given",
324
+ "sharing": "sharing…",
325
+ "shareUnavailable": "share: actions unavailable",
326
+ "shareFailed": "share failed: {{error}}",
327
+ "shareUrlCopied": "share URL copied: {{url}}",
328
+ "shared": "shared: {{url}}",
329
+ "sort": "sort: {{sort}}",
330
+ "sessionInfoUnavailable": "session info: unavailable",
331
+ "sessionInfoFailed": "session info failed: {{error}}",
332
+ "sessionInfoCannotRead": "session info failed: cannot read {{file}}",
333
+ "copiedSessionInfo": "copied session info to clipboard",
334
+ "resumeUnavailable": "resume: actions unavailable",
335
+ "restoreUnavailable": "restore: actions unavailable",
336
+ "working": "{{what}}…",
337
+ "workFailed": "{{what}} failed: {{error}}",
338
+ "notImplemented": "{{action}}: not implemented yet",
339
+ "pending": "pending: {{keys}}"
340
+ }
341
+ }
@@ -0,0 +1,341 @@
1
+ {
2
+ "command": {
3
+ "description": "打开 lazygit 风格的会话面板(会话 / 对话树 / 内容)"
4
+ },
5
+ "mode": {
6
+ "normal": "普通",
7
+ "search": "搜索",
8
+ "label": "标签",
9
+ "restore": "恢复",
10
+ "tree": "对话树",
11
+ "confirm": "确认",
12
+ "rename": "重命名",
13
+ "info": "信息",
14
+ "new": "新建",
15
+ "fork": "分叉",
16
+ "clone": "克隆",
17
+ "export": "导出",
18
+ "import": "导入",
19
+ "share": "分享",
20
+ "changelog": "更新日志",
21
+ "compact": "压缩",
22
+ "visual": "可视",
23
+ "preview": "预览"
24
+ },
25
+ "pane": {
26
+ "sessionsTitle": "会话",
27
+ "treeTitle": "对话树",
28
+ "contentTitle": "内容",
29
+ "sessionsEmpty": "没有找到会话。",
30
+ "treeEmpty": "没有条目。",
31
+ "contentEmpty": "没有消息。",
32
+ "emptySession": "(空会话)",
33
+ "msgs": "{{count}} 条消息",
34
+ "selected": "已选 {{count}} 个",
35
+ "messages": "{{count}} 条消息",
36
+ "selectSession": "请选择一个会话。",
37
+ "loading": "加载中…",
38
+ "nothingToShow": "没有可显示的内容。",
39
+ "you": "你",
40
+ "assistant": "AI助手"
41
+ },
42
+ "role": {
43
+ "user": "用户",
44
+ "assistant": "助手",
45
+ "tool": "工具"
46
+ },
47
+ "scope": {
48
+ "currentLong": "当前",
49
+ "currentShort": "当前",
50
+ "allLong": "全部",
51
+ "allShort": "全部"
52
+ },
53
+ "sort": {
54
+ "recent": "最近",
55
+ "created": "创建",
56
+ "title": "标题",
57
+ "threaded": "线程"
58
+ },
59
+ "filter": {
60
+ "default": "默认",
61
+ "no-tools": "无工具",
62
+ "user-only": "仅用户",
63
+ "labeled": "仅标签",
64
+ "all": "全部"
65
+ },
66
+ "action": {
67
+ "focus-next": "聚焦下一个面板",
68
+ "focus-prev": "聚焦上一个面板",
69
+ "focus-sessions": "聚焦会话面板",
70
+ "focus-tree": "聚焦对话树面板",
71
+ "focus-content": "聚焦内容面板",
72
+ "scope-current": "范围:当前目录",
73
+ "scope-all": "范围:全部",
74
+ "help": "开关此帮助",
75
+ "quit": "退出面板",
76
+ "search": "在当前面板内搜索",
77
+ "search-next": "下一个搜索匹配",
78
+ "search-prev": "上一个搜索匹配",
79
+ "changelog": "查看 pi 的更新日志(/changelog)",
80
+ "move-down": "光标下移",
81
+ "move-up": "光标上移",
82
+ "go-top": "跳到顶部",
83
+ "go-bottom": "跳到底部",
84
+ "scroll-content-down": "内容面板向下滚动",
85
+ "scroll-content-up": "内容面板向上滚动",
86
+ "session-resume": "恢复会话",
87
+ "session-delete": "删除会话",
88
+ "session-rename": "重命名会话",
89
+ "session-fork": "分叉会话并打开分叉",
90
+ "session-toggle-select": "切换多选",
91
+ "session-export": "导出为 HTML / JSONL",
92
+ "session-import": "从 JSONL 导入",
93
+ "session-share": "分享为私有 GitHub Gist",
94
+ "session-clone": "克隆当前分支到新会话",
95
+ "session-copy-last-reply": "复制最后一条 AI 回复",
96
+ "session-compact": "压缩当前对话并打开(/compact)",
97
+ "session-sort": "循环排序:最近 / 创建 / 标题 / 线程",
98
+ "session-new": "新建会话",
99
+ "session-info": "会话信息",
100
+ "tree-restore": "恢复对话到此节点(会询问分支摘要)",
101
+ "tree-copy": "复制节点文本",
102
+ "tree-label": "添加 / 编辑标签",
103
+ "tree-open": "打开完整对话树对话框(搜索 / 过滤在这里)",
104
+ "tree-fold": "折叠 / 展开光标所在分支(分支内:折叠并跳到段头)",
105
+ "tree-filter-default": "过滤:默认(隐藏记账条目)",
106
+ "tree-filter-no-tools": "过滤:同时隐藏工具结果(切换)",
107
+ "tree-filter-user": "过滤:仅用户消息(切换)",
108
+ "tree-filter-labeled": "过滤:仅带标签的条目(切换)",
109
+ "tree-filter-all": "过滤:显示全部(切换)",
110
+ "tree-dialog-close": "关闭对话树对话框"
111
+ },
112
+ "helpGroup": {
113
+ "focus": "聚焦上一个 / 下一个面板",
114
+ "focusNumber": "按编号聚焦面板",
115
+ "scope": "范围:当前目录 / 全部",
116
+ "searchStep": "下一个 / 上一个搜索匹配",
117
+ "topBottom": "跳到顶部 / 底部",
118
+ "scrollContent": "内容面板向下 / 向上滚动",
119
+ "filters": "过滤:默认 / 无工具结果 / 仅用户 / 仅标签 / 全部(t/u/l/a 再按回到默认)"
120
+ },
121
+ "scopeTitle": {
122
+ "global": "全局",
123
+ "sessions": "会话面板",
124
+ "tree": "对话树面板",
125
+ "content": "内容面板",
126
+ "tree-dialog": "对话树对话框"
127
+ },
128
+ "help": {
129
+ "titlePrefix": "帮助",
130
+ "closeHint": "? / Esc 关闭",
131
+ "scrollHint": "j/k 滚动"
132
+ },
133
+ "footer": {
134
+ "search": "搜索",
135
+ "help": "帮助",
136
+ "focus-next": "切换",
137
+ "scope-current": "当前",
138
+ "scope-all": "全部",
139
+ "quit": "退出",
140
+ "session-resume": "恢复",
141
+ "session-delete": "删除",
142
+ "session-rename": "重命名",
143
+ "session-new": "新建",
144
+ "session-fork": "分叉",
145
+ "session-clone": "克隆",
146
+ "session-copy-last-reply": "复制回复",
147
+ "session-export": "导出",
148
+ "session-import": "导入",
149
+ "session-share": "分享",
150
+ "session-sort": "排序",
151
+ "session-info": "信息",
152
+ "session-compact": "压缩",
153
+ "tree-restore": "恢复",
154
+ "tree-open": "对话树",
155
+ "tree-fold": "折叠",
156
+ "tree-label": "标签",
157
+ "tree-copy": "复制",
158
+ "go-top": "顶部",
159
+ "go-bottom": "底部",
160
+ "changelog": "更新日志"
161
+ },
162
+ "treeHint": {
163
+ "search": "搜索",
164
+ "move-down": "移动",
165
+ "tree-restore": "恢复",
166
+ "tree-fold": "折叠",
167
+ "tree-copy": "复制",
168
+ "tree-label": "标签",
169
+ "tree-filter-default": "过滤",
170
+ "tree-dialog-close": "关闭"
171
+ },
172
+ "hint": {
173
+ "save": "保存",
174
+ "cancel": "取消",
175
+ "searchConfirm": "搜索",
176
+ "compact": "压缩",
177
+ "compactDefault": "= 默认",
178
+ "removes": "清除",
179
+ "emptyKey": "空",
180
+ "folderKey": "目录",
181
+ "move": "移动",
182
+ "select": "选择",
183
+ "back": "返回",
184
+ "summarize": "总结",
185
+ "export": "导出",
186
+ "import": "导入",
187
+ "create": "创建",
188
+ "noName": "不命名",
189
+ "defaultInside": "在其中用默认名",
190
+ "choose": "选择",
191
+ "confirm": "确认",
192
+ "copy": "复制",
193
+ "close": "关闭",
194
+ "scroll": "滚动",
195
+ "page": "翻页",
196
+ "topBottom": "顶部/底部",
197
+ "backToList": "返回列表"
198
+ },
199
+ "dialog": {
200
+ "labelTitle": "标签",
201
+ "renameTitle": "重命名",
202
+ "newTitle": "新建会话",
203
+ "importTitle": "导入会话",
204
+ "importSubject": "输入 .jsonl 文件路径",
205
+ "sessionInfoTitle": "会话信息",
206
+ "changelogTitle": "更新日志",
207
+ "changelogLoading": "正在加载更新日志…",
208
+ "compactTitle": "压缩",
209
+ "treeTitle": "对话树",
210
+ "treeNoMatches": "没有匹配。",
211
+ "toSearch": "{{key}} 搜索",
212
+ "exportFormatTitle": "导出为",
213
+ "exportPathTitle": "导出到",
214
+ "exportHtml": "HTML 完整对话树,在浏览器中打开",
215
+ "exportJsonl": "JSONL 当前分支,可再次导入",
216
+ "restoreMenuTitle": "总结分支?",
217
+ "restoreNone": "不总结",
218
+ "restoreSummarize": "总结",
219
+ "restoreCustom": "用自定义提示总结",
220
+ "restoreCustomTitle": "自定义总结指令",
221
+ "forkTitle": "从哪条消息之前分叉?"
222
+ },
223
+ "confirm": {
224
+ "yes": "是",
225
+ "no": "否",
226
+ "delete": "删除会话?",
227
+ "deleteN_one": "删除 {{count}} 个会话?",
228
+ "deleteN_other": "删除 {{count}} 个会话?",
229
+ "deleteSkipped": "已跳过当前会话 · {{subjects}}",
230
+ "clone": "克隆会话?",
231
+ "fork": "分叉会话?",
232
+ "share": "上传为私有 Gist?",
233
+ "import": "导入并切换过去?",
234
+ "overwrite": "覆盖文件?"
235
+ },
236
+ "info": {
237
+ "name": "名称",
238
+ "model": "模型",
239
+ "messages": "消息数",
240
+ "tokens": "Token",
241
+ "cost": "费用",
242
+ "created": "创建时间",
243
+ "updated": "更新时间",
244
+ "path": "路径",
245
+ "id": "ID",
246
+ "none": "(无)",
247
+ "unknown": "(未知)"
248
+ },
249
+ "search": {
250
+ "label": "搜索: ",
251
+ "matches": "{{position}}/{{total}} 个匹配",
252
+ "total": "{{total}} 个匹配",
253
+ "none": "没有匹配"
254
+ },
255
+ "enter": {
256
+ "resume": "恢复",
257
+ "restore": "恢复",
258
+ "new": "新建",
259
+ "fork": "分叉",
260
+ "clone": "克隆",
261
+ "import": "导入",
262
+ "rename": "重命名",
263
+ "export": "导出",
264
+ "share": "分享",
265
+ "compact": "压缩"
266
+ },
267
+ "notify": {
268
+ "tuiOnly": "/{{command}} 仅在 TUI 模式下可用"
269
+ },
270
+ "status": {
271
+ "loadingSessions": "正在加载会话…",
272
+ "summarizing": "正在总结分支…",
273
+ "compacting": "正在压缩会话…",
274
+ "compactUnavailable": "压缩:操作不可用",
275
+ "listFailed": "加载会话列表失败:{{error}}",
276
+ "openFailed": "打开会话失败:{{error}}",
277
+ "loadBranchFailed": "加载分支失败:{{error}}",
278
+ "reloadTreeFailed": "重新加载对话树失败:{{error}}",
279
+ "noActiveSearch": "当前没有搜索 —— 请先按 /",
280
+ "noMatches": "没有匹配",
281
+ "noTreeNode": "没有选中的节点",
282
+ "noSessionLoaded": "没有已加载的会话",
283
+ "noSessionSelected": "没有选中的会话",
284
+ "nothingToFold": "这里没有可折叠的内容",
285
+ "copyUnavailable": "复制:操作不可用",
286
+ "copiedNode": "已复制节点文本到剪贴板",
287
+ "noTextToCopy": "选中的条目没有可复制的文本",
288
+ "copyFailed": "复制失败:{{error}}",
289
+ "labelUnavailable": "标签:操作不可用",
290
+ "labelSet": "已设置标签:{{label}}",
291
+ "labelRemoved": "已清除标签",
292
+ "labelFailed": "设置标签失败:{{error}}",
293
+ "deleteUnavailable": "删除:操作不可用",
294
+ "cannotDeleteActive": "无法删除当前正在使用的会话",
295
+ "deletingN": "正在删除 {{count}} 个…",
296
+ "deleting": "正在删除…",
297
+ "deleteFailed": "删除失败:{{error}}",
298
+ "movedToTrash": "会话已移到回收站",
299
+ "deleted": "会话已删除",
300
+ "sessionsDeleted_one": "已删除 {{count}} 个会话",
301
+ "sessionsDeleted_other": "已删除 {{count}} 个会话",
302
+ "batchDeletedFailed": "已删除 {{deleted}} 个,{{failed}} 个失败 —— {{error}}",
303
+ "selectionCleared": "已清空选择",
304
+ "multiSelectRefused": "{{action}}:不能对多个会话操作(按 Esc 清空选择)",
305
+ "changelogUnavailable": "更新日志:不可用",
306
+ "changelogFailed": "加载更新日志失败:{{error}}",
307
+ "renameUnavailable": "重命名:操作不可用",
308
+ "renameFailed": "重命名失败:{{error}}",
309
+ "renamed": "已重命名:{{name}}",
310
+ "nameRemoved": "已清除名称",
311
+ "newUnavailable": "新建:操作不可用",
312
+ "forkUnavailable": "分叉:操作不可用",
313
+ "forkFailed": "分叉失败:{{error}}",
314
+ "noForkMessages": "没有可供分叉的消息",
315
+ "cloneUnavailable": "克隆:操作不可用",
316
+ "copiedLastReply": "已复制最后一条回复",
317
+ "noReplyToCopy": "没有可复制的 AI 回复",
318
+ "exportUnavailable": "导出:操作不可用",
319
+ "exporting": "正在导出…",
320
+ "exportedTo": "已导出到 {{path}}",
321
+ "exportFailed": "导出失败:{{error}}",
322
+ "importUnavailable": "导入:操作不可用",
323
+ "importNoFile": "导入:未提供文件",
324
+ "sharing": "正在分享…",
325
+ "shareUnavailable": "分享:操作不可用",
326
+ "shareFailed": "分享失败:{{error}}",
327
+ "shareUrlCopied": "已复制分享链接:{{url}}",
328
+ "shared": "已分享:{{url}}",
329
+ "sort": "排序:{{sort}}",
330
+ "sessionInfoUnavailable": "会话信息:不可用",
331
+ "sessionInfoFailed": "加载会话信息失败:{{error}}",
332
+ "sessionInfoCannotRead": "加载会话信息失败:无法读取 {{file}}",
333
+ "copiedSessionInfo": "已复制会话信息到剪贴板",
334
+ "resumeUnavailable": "恢复:操作不可用",
335
+ "restoreUnavailable": "恢复:操作不可用",
336
+ "working": "{{what}}…",
337
+ "workFailed": "{{what}}失败:{{error}}",
338
+ "notImplemented": "{{action}}:尚未实现",
339
+ "pending": "待续按键:{{keys}}"
340
+ }
341
+ }