@deepseek-harness-tui/dsh-tui 0.7.1 → 0.7.2

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 (84) hide show
  1. package/README.md +6 -4
  2. package/bin/dsh-tui.js +37 -1
  3. package/cordis.patch.yml +10 -0
  4. package/lib/types/commands.js +1 -1
  5. package/lib/types/components/LoadedContextPanel.d.ts.map +1 -1
  6. package/lib/types/components/LoadedContextPanel.js +1 -1
  7. package/lib/types/components/design-system/ThemedText.d.ts +2 -2
  8. package/lib/types/components/design-system/ThemedText.d.ts.map +1 -1
  9. package/lib/types/components/design-system/ThemedText.js +1 -3
  10. package/lib/types/components/sessions/SessionListRow.d.ts +26 -0
  11. package/lib/types/components/sessions/SessionListRow.d.ts.map +1 -0
  12. package/lib/types/components/sessions/SessionListRow.js +35 -0
  13. package/lib/types/components/sessions/SessionPreview.d.ts +25 -0
  14. package/lib/types/components/sessions/SessionPreview.d.ts.map +1 -0
  15. package/lib/types/components/sessions/SessionPreview.js +60 -0
  16. package/lib/types/dsh-adapter/channel.d.ts +9 -4
  17. package/lib/types/dsh-adapter/channel.d.ts.map +1 -1
  18. package/lib/types/dsh-adapter/channel.js +31 -73
  19. package/lib/types/dsh-adapter/compat/index.d.ts +1 -1
  20. package/lib/types/dsh-adapter/compat/index.d.ts.map +1 -1
  21. package/lib/types/dsh-adapter/compat/index.js +1 -1
  22. package/lib/types/dsh-adapter/compat/sessionLog.d.ts +8 -0
  23. package/lib/types/dsh-adapter/compat/sessionLog.d.ts.map +1 -1
  24. package/lib/types/dsh-adapter/compat/sessionLog.js +1 -1
  25. package/lib/types/dsh-adapter/index.d.ts.map +1 -1
  26. package/lib/types/dsh-adapter/index.js +10 -1
  27. package/lib/types/dsh-adapter/packaged-presets.d.ts +22 -0
  28. package/lib/types/dsh-adapter/packaged-presets.d.ts.map +1 -0
  29. package/lib/types/dsh-adapter/packaged-presets.js +90 -0
  30. package/lib/types/dsh-adapter/plugin.d.ts.map +1 -1
  31. package/lib/types/dsh-adapter/plugin.js +46 -4
  32. package/lib/types/dsh-adapter/presets.d.ts +16 -0
  33. package/lib/types/dsh-adapter/presets.d.ts.map +1 -1
  34. package/lib/types/dsh-adapter/presets.js +23 -0
  35. package/lib/types/dsh-adapter/sessions/digest.d.ts +29 -0
  36. package/lib/types/dsh-adapter/sessions/digest.d.ts.map +1 -0
  37. package/lib/types/dsh-adapter/sessions/digest.js +224 -0
  38. package/lib/types/dsh-adapter/sessions/frames.d.ts +100 -0
  39. package/lib/types/dsh-adapter/sessions/frames.d.ts.map +1 -0
  40. package/lib/types/dsh-adapter/sessions/frames.js +246 -0
  41. package/lib/types/dsh-adapter/sessions/header.d.ts +50 -0
  42. package/lib/types/dsh-adapter/sessions/header.d.ts.map +1 -0
  43. package/lib/types/dsh-adapter/sessions/header.js +62 -0
  44. package/lib/types/dsh-adapter/sessions/index.d.ts +17 -0
  45. package/lib/types/dsh-adapter/sessions/index.d.ts.map +1 -0
  46. package/lib/types/dsh-adapter/sessions/index.js +15 -0
  47. package/lib/types/dsh-adapter/sessions/list.d.ts +41 -0
  48. package/lib/types/dsh-adapter/sessions/list.d.ts.map +1 -0
  49. package/lib/types/dsh-adapter/sessions/list.js +213 -0
  50. package/lib/types/dsh-adapter/sessions/store.d.ts +48 -0
  51. package/lib/types/dsh-adapter/sessions/store.d.ts.map +1 -0
  52. package/lib/types/dsh-adapter/sessions/store.js +164 -0
  53. package/lib/types/dsh-adapter/sessions/types.d.ts +142 -0
  54. package/lib/types/dsh-adapter/sessions/types.d.ts.map +1 -0
  55. package/lib/types/dsh-adapter/sessions/types.js +14 -0
  56. package/lib/types/i18n.d.ts +118 -14
  57. package/lib/types/i18n.d.ts.map +1 -1
  58. package/lib/types/i18n.js +36 -6
  59. package/lib/types/screens/Chat.d.ts +3 -2
  60. package/lib/types/screens/Chat.d.ts.map +1 -1
  61. package/lib/types/screens/Chat.js +28 -144
  62. package/lib/types/screens/SessionBrowser.d.ts +37 -0
  63. package/lib/types/screens/SessionBrowser.d.ts.map +1 -0
  64. package/lib/types/screens/SessionBrowser.js +437 -0
  65. package/lib/types/sessionHistory.d.ts +0 -8
  66. package/lib/types/sessionHistory.d.ts.map +1 -1
  67. package/lib/types/sessions/format.d.ts +117 -0
  68. package/lib/types/sessions/format.d.ts.map +1 -0
  69. package/lib/types/sessions/format.js +244 -0
  70. package/lib/types/sessions/view.d.ts +125 -0
  71. package/lib/types/sessions/view.d.ts.map +1 -0
  72. package/lib/types/sessions/view.js +222 -0
  73. package/package.json +6 -2
  74. package/presets/liangshen/.dsh-tui-managed.json +5 -0
  75. package/presets/liangshen/agent.cordis.yml +389 -0
  76. package/presets/liangshen/compaction-epoch.mjs +81 -0
  77. package/presets/liangshen/custom-bash.mjs +126 -0
  78. package/presets/liangshen/instruction-hint.mjs +181 -0
  79. package/presets/liangshen/preset.yml +3 -0
  80. package/presets/liangshen/skill-search.mjs +142 -0
  81. package/presets/liangshen/tool-bootstrap.mjs +300 -0
  82. package/lib/types/components/ResumePicker.d.ts +0 -26
  83. package/lib/types/components/ResumePicker.d.ts.map +0 -1
  84. package/lib/types/components/ResumePicker.js +0 -50
@@ -0,0 +1,142 @@
1
+ /**
2
+ * What the TUI knows about a persisted session before opening it.
3
+ *
4
+ * The shape here is the whole point of this feature. The picker used to run on
5
+ * `{ id, title, cwd, createdAt, updatedAt }`, and every defect it had was
6
+ * downstream of that: it could not tell a delegated sub-agent run from a
7
+ * conversation because it never carried the distinction, and it could not show
8
+ * why a row was labelled the way it was because the label arrived without its
9
+ * provenance. So the types below carry both — the kind as a closed sum, and
10
+ * every derived label together with the evidence that produced it.
11
+ *
12
+ * @module @deepseek-harness-tui/dsh-tui/sessions/types
13
+ */
14
+ /**
15
+ * What a persisted session *is*, decided once from its immutable header.
16
+ *
17
+ * A closed sum rather than a pair of booleans: `isSubagent`/`isFork` would
18
+ * admit a fourth, meaningless combination, and every reader would have to
19
+ * re-derive the precedence between them. Deciding once, here, is also the fix
20
+ * for the defect that started this work — `origin` and `parentSession` reached
21
+ * the picker and were dropped on the floor.
22
+ *
23
+ * The discriminator is `origin`, never `parentSession`. A `/rewind` fork
24
+ * carries `parentSession` and no `origin`, so filtering on lineage alone would
25
+ * silently hide the user's own rewound branches along with the sub-agents.
26
+ */
27
+ export type SessionKind =
28
+ /** A conversation the user started. */
29
+ {
30
+ readonly kind: 'root';
31
+ }
32
+ /**
33
+ * A `/rewind` fork: a real conversation that inherited a prefix of its
34
+ * parent's log. `parent` is what defines it, so it is never absent.
35
+ */
36
+ | {
37
+ readonly kind: 'fork';
38
+ readonly parent: string;
39
+ }
40
+ /**
41
+ * A delegated sub-agent run. `origin: 'subagent'` is the authority, so the
42
+ * lineage link is reported as it is found — a run whose header records no
43
+ * parent is still a sub-agent run.
44
+ */
45
+ | {
46
+ readonly kind: 'subagent';
47
+ readonly parent: string | undefined;
48
+ readonly depth: number;
49
+ };
50
+ /** Which evidence produced a session's display title. */
51
+ export type TitleSource =
52
+ /** A `session/title` event appended after the session's own opening — a rename. */
53
+ 'renamed'
54
+ /** The session's first `session/title`, written for it automatically. */
55
+ | 'auto'
56
+ /** No title event; the opening user prompt stands in. */
57
+ | 'prompt'
58
+ /** Nothing readable; the working directory's basename stands in. */
59
+ | 'fallback';
60
+ /**
61
+ * A display title and the evidence behind it.
62
+ *
63
+ * The source travels with the text because the UI consumes it: a `fallback`
64
+ * title is dimmed rather than presented as if the session were named that, and
65
+ * a reader who wonders why a row says `dsh-cc-tui` can be told. A source that
66
+ * nothing consumed would be decoration; this one changes what is rendered.
67
+ */
68
+ export interface SessionTitle {
69
+ readonly text: string;
70
+ readonly source: TitleSource;
71
+ }
72
+ /**
73
+ * Everything the browser shows for one session, and nothing that costs an
74
+ * unbounded read to learn.
75
+ *
76
+ * That second half is an invariant, not an accident: every field here comes
77
+ * from the persistence header, one `stat`, or a bounded window at one end of
78
+ * the log. A session's full statistics (turn counts, tool totals, token spend)
79
+ * require folding the entire event log, which is what the trajectory scene is
80
+ * for — the browser stays responsive on a 4 MB log because it never asks a
81
+ * question that big.
82
+ */
83
+ export interface SessionSummary {
84
+ readonly id: string;
85
+ readonly kind: SessionKind;
86
+ readonly title: SessionTitle;
87
+ /** Working directory recorded in the header; '' when it recorded none. */
88
+ readonly cwd: string;
89
+ readonly createdAt: number;
90
+ /**
91
+ * Last activity: the later of the log's own mtime and this install's
92
+ * last-used note. Both are lower bounds on "when this session was last
93
+ * touched" — the mtime catches writes by another client (dsh web appends to
94
+ * the same store), the note catches a resume this install performed. The
95
+ * later of two lower bounds is the best available answer, and unlike a
96
+ * composite value there is no risk of stitching halves from different
97
+ * origins: this is one scalar with two witnesses.
98
+ */
99
+ readonly updatedAt: number;
100
+ /** Log size in bytes; undefined when the backend owns no per-session file. */
101
+ readonly bytes: number | undefined;
102
+ /**
103
+ * Whether the log holds a user prompt at all.
104
+ *
105
+ * `list()` reports *materialized* sessions, not conversations: a session
106
+ * that only ever recorded its own boot policy is a real stored session with
107
+ * nothing to resume. Answering this is the consumer's job — the header does
108
+ * not promise it — and getting it wrong is why one empty row per launch used
109
+ * to accumulate in the picker.
110
+ */
111
+ readonly hasPrompt: boolean;
112
+ /** Agent preset the session was composed from, when the deployment records one. */
113
+ readonly agentPreset: string | undefined;
114
+ /** Model last seen in the log's trailing window, when one is recorded. */
115
+ readonly model: string | undefined;
116
+ /** Sub-agent label from the run's descriptor (`subagent` kind only). */
117
+ readonly label: string | undefined;
118
+ /** Git branch noted when this install last used the session. */
119
+ readonly branch: string | undefined;
120
+ /** How many sub-agent runs name this session as their parent. */
121
+ readonly childCount: number;
122
+ }
123
+ /**
124
+ * Facts a bounded read can recover from one session log.
125
+ *
126
+ * No "last event time" here on purpose: for an append-only log the file's
127
+ * mtime says the same thing, is already read for {@link SessionSummary.bytes},
128
+ * and needs no cache entry of its own.
129
+ */
130
+ export interface SessionDigest {
131
+ readonly title: SessionTitle | undefined;
132
+ readonly hasPrompt: boolean;
133
+ readonly model: string | undefined;
134
+ readonly label: string | undefined;
135
+ }
136
+ /** One exchange in the preview pane, newest last. */
137
+ export interface PreviewEntry {
138
+ readonly role: 'user' | 'assistant';
139
+ readonly text: string;
140
+ readonly at: number | undefined;
141
+ }
142
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/dsh-adapter/sessions/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,WAAW;AACrB,uCAAuC;AACrC;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE;AAC3B;;;GAGG;GACD;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AACpD;;;;GAIG;GACD;IACA,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;IACnC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACvB,CAAA;AAEH,yDAAyD;AACzD,MAAM,MAAM,WAAW;AACrB,mFAAmF;AACjF,SAAS;AACX,yEAAyE;GACvE,MAAM;AACR,yDAAyD;GACvD,QAAQ;AACV,oEAAoE;GAClE,UAAU,CAAA;AAEd;;;;;;;GAOG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;CAC7B;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;IAC1B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAA;IAC5B,0EAA0E;IAC1E,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B;;;;;;;;OAQG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,8EAA8E;IAC9E,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;IAClC;;;;;;;;OAQG;IACH,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;IAC3B,mFAAmF;IACnF,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAA;IACxC,0EAA0E;IAC1E,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;IAClC,wEAAwE;IACxE,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;IAClC,gEAAgE;IAChE,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;IACnC,iEAAiE;IACjE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAC5B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,SAAS,CAAA;IACxC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;CACnC;AAED,qDAAqD;AACrD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAAA;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,CAAA;CAChC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * What the TUI knows about a persisted session before opening it.
3
+ *
4
+ * The shape here is the whole point of this feature. The picker used to run on
5
+ * `{ id, title, cwd, createdAt, updatedAt }`, and every defect it had was
6
+ * downstream of that: it could not tell a delegated sub-agent run from a
7
+ * conversation because it never carried the distinction, and it could not show
8
+ * why a row was labelled the way it was because the label arrived without its
9
+ * provenance. So the types below carry both — the kind as a closed sum, and
10
+ * every derived label together with the evidence that produced it.
11
+ *
12
+ * @module @deepseek-harness-tui/dsh-tui/sessions/types
13
+ */
14
+ export {};
@@ -1171,14 +1171,6 @@ declare const dict: {
1171
1171
  readonly zh: "已恢复会话";
1172
1172
  readonly en: "Session resumed";
1173
1173
  };
1174
- readonly 'resume-more-above': {
1175
- readonly zh: "↑ 还有 {{n}} 条";
1176
- readonly en: "↑ {{n}} more";
1177
- };
1178
- readonly 'resume-more-below': {
1179
- readonly zh: "↓ 还有 {{n}} 条";
1180
- readonly en: "↓ {{n}} more";
1181
- };
1182
1174
  readonly 'resume-delete-confirm': {
1183
1175
  readonly zh: "删除「{{name}}」?会话日志将被永久移除。";
1184
1176
  readonly en: "Delete \"{{name}}\"? The session log is removed permanently.";
@@ -1199,10 +1191,6 @@ declare const dict: {
1199
1191
  readonly zh: "无法重命名会话「{{name}}」";
1200
1192
  readonly en: "Could not rename session {{name}}";
1201
1193
  };
1202
- readonly 'resume-hint-list': {
1203
- readonly zh: "**Enter** 恢复 · Esc 退出 · {{mod}}d 删除 · {{mod}}r 重命名";
1204
- readonly en: "**Enter** to confirm · Esc to exit · {{mod}}d to delete · {{mod}}r to rename";
1205
- };
1206
1194
  readonly 'resume-hint-delete': {
1207
1195
  readonly zh: "**Enter** 删除 · Esc 取消";
1208
1196
  readonly en: "**Enter** to delete · Esc to cancel";
@@ -1213,7 +1201,123 @@ declare const dict: {
1213
1201
  };
1214
1202
  readonly 'resume-title': {
1215
1203
  readonly zh: "恢复会话";
1216
- readonly en: "Resume";
1204
+ readonly en: "Resume session";
1205
+ };
1206
+ readonly 'session-loading': {
1207
+ readonly zh: "正在读取会话…";
1208
+ readonly en: "Reading sessions…";
1209
+ };
1210
+ readonly 'session-list-failed': {
1211
+ readonly zh: "无法读取会话列表 · {{err}}";
1212
+ readonly en: "Could not read the session list · {{err}}";
1213
+ };
1214
+ readonly 'session-resume-refused': {
1215
+ readonly zh: "无法恢复这个会话——原因已记录在对话里(模型正在工作时无法切换)";
1216
+ readonly en: "That session could not be resumed — the reason is in the conversation (switching is refused while the model is working)";
1217
+ };
1218
+ readonly 'session-resume-failed': {
1219
+ readonly zh: "恢复会话失败 · {{err}}";
1220
+ readonly en: "Resuming the session failed · {{err}}";
1221
+ };
1222
+ readonly 'session-when-now': {
1223
+ readonly zh: "刚刚";
1224
+ readonly en: "just now";
1225
+ };
1226
+ readonly 'session-when-minutes': {
1227
+ readonly zh: "{{n}} 分钟前";
1228
+ readonly en: "{{n}}m ago";
1229
+ };
1230
+ readonly 'session-when-hours': {
1231
+ readonly zh: "{{n}} 小时前";
1232
+ readonly en: "{{n}}h ago";
1233
+ };
1234
+ readonly 'session-when-days': {
1235
+ readonly zh: "{{n}} 天前";
1236
+ readonly en: "{{n}}d ago";
1237
+ };
1238
+ readonly 'session-when-date': {
1239
+ readonly zh: "{{month}} 月 {{day}} 日";
1240
+ readonly en: "{{month}}/{{day}}";
1241
+ };
1242
+ readonly 'session-children': {
1243
+ readonly zh: "{{n}} 个子运行";
1244
+ readonly en: "{{n}} runs";
1245
+ };
1246
+ readonly 'session-kind-root': {
1247
+ readonly zh: "对话";
1248
+ readonly en: "Conversation";
1249
+ };
1250
+ readonly 'session-kind-fork': {
1251
+ readonly zh: "回溯分支";
1252
+ readonly en: "Rewound branch";
1253
+ };
1254
+ readonly 'session-kind-subagent': {
1255
+ readonly zh: "子 agent 运行";
1256
+ readonly en: "Sub-agent run";
1257
+ };
1258
+ readonly 'session-project-unknown': {
1259
+ readonly zh: "(未记录目录)";
1260
+ readonly en: "(no directory recorded)";
1261
+ };
1262
+ readonly 'session-scope-all': {
1263
+ readonly zh: "全部项目";
1264
+ readonly en: "all projects";
1265
+ };
1266
+ readonly 'session-search-placeholder': {
1267
+ readonly zh: "输入以搜索 · {{scope}}";
1268
+ readonly en: "Type to search · {{scope}}";
1269
+ };
1270
+ readonly 'session-count-shown': {
1271
+ readonly zh: "{{n}} 个会话";
1272
+ readonly en: "{{n}} sessions";
1273
+ };
1274
+ readonly 'session-count-subagents': {
1275
+ readonly zh: "{{n}} 个子运行已折叠";
1276
+ readonly en: "{{n}} runs folded";
1277
+ };
1278
+ readonly 'session-count-empty': {
1279
+ readonly zh: "{{n}} 个空会话";
1280
+ readonly en: "{{n}} empty";
1281
+ };
1282
+ readonly 'session-clean-confirm': {
1283
+ readonly zh: "清理 {{n}} 个没有对话内容的会话?日志将被永久移除。";
1284
+ readonly en: "Remove {{n}} sessions that hold no conversation? Their logs are deleted permanently.";
1285
+ };
1286
+ readonly 'session-cleaned': {
1287
+ readonly zh: "已清理 {{n}} 个空会话";
1288
+ readonly en: "Removed {{n}} empty sessions";
1289
+ };
1290
+ readonly 'session-preview-times': {
1291
+ readonly zh: "创建于 {{created}} · 最后活动 {{updated}}";
1292
+ readonly en: "created {{created}} · last active {{updated}}";
1293
+ };
1294
+ readonly 'session-preview-loading': {
1295
+ readonly zh: "正在读取会话结尾…";
1296
+ readonly en: "Reading the end of this session…";
1297
+ };
1298
+ readonly 'session-preview-empty': {
1299
+ readonly zh: "这个会话没有可预览的往来消息";
1300
+ readonly en: "No exchanges to preview in this session";
1301
+ };
1302
+ readonly 'session-toggle-on': {
1303
+ readonly zh: "开";
1304
+ readonly en: "on";
1305
+ };
1306
+ readonly 'session-toggle-off': {
1307
+ readonly zh: "关";
1308
+ readonly en: "off";
1309
+ };
1310
+ readonly 'session-hint-list': {
1311
+ readonly zh: "**Enter** 恢复 · Tab 预览 · {{mod}}a 全部项目({{projects}}) · {{mod}}s 子运行({{runs}}) · {{mod}}b 本分支 · {{mod}}r 重命名 · {{mod}}d 删除 · {{mod}}x 清空壳 · Esc 退出";
1312
+ readonly en: "**Enter** resume · Tab preview · {{mod}}a all projects ({{projects}}) · {{mod}}s runs ({{runs}}) · {{mod}}b this branch · {{mod}}r rename · {{mod}}d delete · {{mod}}x clean · Esc exit";
1313
+ };
1314
+ readonly 'session-hint-list-mid': {
1315
+ readonly zh: "**Enter** 恢复 · Tab 预览 · {{mod}}a 全部项目 · {{mod}}s 子运行 · {{mod}}r 重命名 · {{mod}}d 删除 · Esc 退出";
1316
+ readonly en: "**Enter** resume · Tab preview · {{mod}}a projects · {{mod}}s runs · {{mod}}r rename · {{mod}}d delete · Esc exit";
1317
+ };
1318
+ readonly 'session-hint-list-short': {
1319
+ readonly zh: "**Enter** 恢复 · Tab 预览 · Esc 退出";
1320
+ readonly en: "**Enter** resume · Tab preview · Esc exit";
1217
1321
  };
1218
1322
  readonly 'hint-confirm-exit': {
1219
1323
  readonly zh: "**Enter** 确认 · Esc 退出";
@@ -1776,7 +1880,7 @@ declare const dict: {
1776
1880
  readonly zh: "切换工作状态指示器预设";
1777
1881
  };
1778
1882
  readonly 'cmd-desc-preset': {
1779
- readonly zh: "切换 Agent 预设(standard/code/minimal/cordis)";
1883
+ readonly zh: "切换 Agent 预设(含梁神模式)";
1780
1884
  };
1781
1885
  readonly 'cmd-desc-theme': {
1782
1886
  readonly zh: "切换配色主题(auto 跟随系统,或内置/自定义)";
@@ -1 +1 @@
1
- {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/i18n.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/i18n.ts"],"names":[],"mappings":"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"}
package/lib/types/i18n.js CHANGED
@@ -327,19 +327,49 @@ const dict = {
327
327
  'load-earlier': { zh: ' ↑ 加载更早消息(会话日志完整,/export 导出全文) ', en: ' ↑ load earlier messages (full session log; /export for full text) ' },
328
328
  'show-previous-messages': { zh: ' ctrl+e 显示前 {{n}} 条消息 ', en: ' ctrl+e to show {{n}} previous messages ' },
329
329
  'resume-none-in-cwd': { zh: '当前目录没有可恢复的历史会话', en: 'No resumable sessions in the current directory' },
330
- // ── components/ResumePicker.tsx + screens/Chat.tsx (/resume) ────────
330
+ // ── screens/SessionBrowser.tsx + screens/Chat.tsx (/resume) ─────────
331
331
  'resume-resumed': { zh: '已恢复会话', en: 'Session resumed' },
332
- 'resume-more-above': { zh: '↑ 还有 {{n}} 条', en: '↑ {{n}} more' },
333
- 'resume-more-below': { zh: '↓ 还有 {{n}} 条', en: '↓ {{n}} more' },
334
332
  'resume-delete-confirm': { zh: '删除「{{name}}」?会话日志将被永久移除。', en: 'Delete "{{name}}"? The session log is removed permanently.' },
335
333
  'resume-deleted': { zh: '已删除会话「{{name}}」', en: 'Deleted session {{name}}' },
336
334
  'resume-delete-failed': { zh: '无法删除会话「{{name}}」', en: 'Could not delete session {{name}}' },
337
335
  'resume-rename-placeholder': { zh: '新的会话名称…', en: 'New session name…' },
338
336
  'resume-rename-failed': { zh: '无法重命名会话「{{name}}」', en: 'Could not rename session {{name}}' },
339
- 'resume-hint-list': { zh: '**Enter** 恢复 · Esc 退出 · {{mod}}d 删除 · {{mod}}r 重命名', en: '**Enter** to confirm · Esc to exit · {{mod}}d to delete · {{mod}}r to rename' },
340
337
  'resume-hint-delete': { zh: '**Enter** 删除 · Esc 取消', en: '**Enter** to delete · Esc to cancel' },
341
338
  'resume-hint-rename': { zh: '**Enter** 保存 · Esc 取消', en: '**Enter** to save · Esc to cancel' },
342
- 'resume-title': { zh: '恢复会话', en: 'Resume' },
339
+ 'resume-title': { zh: '恢复会话', en: 'Resume session' },
340
+ // ── 会话浏览器:行、计数、筛选、预览 ───────────────────────────────
341
+ 'session-loading': { zh: '正在读取会话…', en: 'Reading sessions…' },
342
+ 'session-list-failed': { zh: '无法读取会话列表 · {{err}}', en: 'Could not read the session list · {{err}}' },
343
+ 'session-resume-refused': { zh: '无法恢复这个会话——原因已记录在对话里(模型正在工作时无法切换)', en: 'That session could not be resumed — the reason is in the conversation (switching is refused while the model is working)' },
344
+ 'session-resume-failed': { zh: '恢复会话失败 · {{err}}', en: 'Resuming the session failed · {{err}}' },
345
+ 'session-when-now': { zh: '刚刚', en: 'just now' },
346
+ 'session-when-minutes': { zh: '{{n}} 分钟前', en: '{{n}}m ago' },
347
+ 'session-when-hours': { zh: '{{n}} 小时前', en: '{{n}}h ago' },
348
+ 'session-when-days': { zh: '{{n}} 天前', en: '{{n}}d ago' },
349
+ 'session-when-date': { zh: '{{month}} 月 {{day}} 日', en: '{{month}}/{{day}}' },
350
+ 'session-children': { zh: '{{n}} 个子运行', en: '{{n}} runs' },
351
+ 'session-kind-root': { zh: '对话', en: 'Conversation' },
352
+ 'session-kind-fork': { zh: '回溯分支', en: 'Rewound branch' },
353
+ 'session-kind-subagent': { zh: '子 agent 运行', en: 'Sub-agent run' },
354
+ 'session-project-unknown': { zh: '(未记录目录)', en: '(no directory recorded)' },
355
+ 'session-scope-all': { zh: '全部项目', en: 'all projects' },
356
+ 'session-search-placeholder': { zh: '输入以搜索 · {{scope}}', en: 'Type to search · {{scope}}' },
357
+ 'session-count-shown': { zh: '{{n}} 个会话', en: '{{n}} sessions' },
358
+ 'session-count-subagents': { zh: '{{n}} 个子运行已折叠', en: '{{n}} runs folded' },
359
+ 'session-count-empty': { zh: '{{n}} 个空会话', en: '{{n}} empty' },
360
+ 'session-clean-confirm': { zh: '清理 {{n}} 个没有对话内容的会话?日志将被永久移除。', en: 'Remove {{n}} sessions that hold no conversation? Their logs are deleted permanently.' },
361
+ 'session-cleaned': { zh: '已清理 {{n}} 个空会话', en: 'Removed {{n}} empty sessions' },
362
+ 'session-preview-times': { zh: '创建于 {{created}} · 最后活动 {{updated}}', en: 'created {{created}} · last active {{updated}}' },
363
+ 'session-preview-loading': { zh: '正在读取会话结尾…', en: 'Reading the end of this session…' },
364
+ 'session-preview-empty': { zh: '这个会话没有可预览的往来消息', en: 'No exchanges to preview in this session' },
365
+ 'session-toggle-on': { zh: '开', en: 'on' },
366
+ 'session-toggle-off': { zh: '关', en: 'off' },
367
+ // Three widths of the same hint. The browser picks the widest that fits the
368
+ // terminal, because a hint that wraps costs the rows the list needs and can
369
+ // push its own tail off the bottom of the screen.
370
+ 'session-hint-list': { zh: '**Enter** 恢复 · Tab 预览 · {{mod}}a 全部项目({{projects}}) · {{mod}}s 子运行({{runs}}) · {{mod}}b 本分支 · {{mod}}r 重命名 · {{mod}}d 删除 · {{mod}}x 清空壳 · Esc 退出', en: '**Enter** resume · Tab preview · {{mod}}a all projects ({{projects}}) · {{mod}}s runs ({{runs}}) · {{mod}}b this branch · {{mod}}r rename · {{mod}}d delete · {{mod}}x clean · Esc exit' },
371
+ 'session-hint-list-mid': { zh: '**Enter** 恢复 · Tab 预览 · {{mod}}a 全部项目 · {{mod}}s 子运行 · {{mod}}r 重命名 · {{mod}}d 删除 · Esc 退出', en: '**Enter** resume · Tab preview · {{mod}}a projects · {{mod}}s runs · {{mod}}r rename · {{mod}}d delete · Esc exit' },
372
+ 'session-hint-list-short': { zh: '**Enter** 恢复 · Tab 预览 · Esc 退出', en: '**Enter** resume · Tab preview · Esc exit' },
343
373
  // ── picker 通用快捷键提示(整句本地化,zh 不用 "to" 结构;**段** 渲染为粗体主快捷键)─
344
374
  'hint-confirm-exit': { zh: '**Enter** 确认 · Esc 退出', en: '**Enter** to confirm · Esc to exit' },
345
375
  'hint-confirm-cancel': { zh: '**Enter** 确认 · Esc 取消', en: '**Enter** to confirm · Esc to cancel' },
@@ -505,7 +535,7 @@ const dict = {
505
535
  'cmd-desc-agents': { zh: '查看本会话的子代理' },
506
536
  // Model / display
507
537
  'cmd-desc-activity': { zh: '切换工作状态指示器预设' },
508
- 'cmd-desc-preset': { zh: '切换 Agent 预设(standard/code/minimal/cordis)' },
538
+ 'cmd-desc-preset': { zh: '切换 Agent 预设(含梁神模式)' },
509
539
  'cmd-desc-theme': { zh: '切换配色主题(auto 跟随系统,或内置/自定义)' },
510
540
  'cmd-desc-lang': { zh: '切换界面语言(en / zh)' },
511
541
  'cmd-desc-model': { zh: '查看当前模型' },
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import type { Channel } from '../dsh-adapter/channel.js';
2
+ import { type Channel } from '../dsh-adapter/channel.js';
3
3
  import type { QuestionStore } from '../dsh-adapter/questions.js';
4
4
  import { ApprovalStore } from '../dsh-adapter/approvals.js';
5
5
  export declare function Chat({ channel, questionStore, approvalStore, onExit, onUpdate, fullscreen, trajectorySeen: trajectorySeenProp, }: {
@@ -16,7 +16,8 @@ export declare function Chat({ channel, questionStore, approvalStore, onExit, on
16
16
  onUpdate?: () => void;
17
17
  /**
18
18
  * True when the host already wrapped this tree in `<AlternateScreen>`
19
- * (`fullscreen: true`). The trajectory scene needs this: entering the alt
19
+ * (`fullscreen: true`). Both full-screen surfaces need this — the trajectory
20
+ * scene and the session browser: entering the alt
20
21
  * screen a second time is harmless, but the inner unmount's DEC 1049 exit
21
22
  * would drop the whole app back to the main screen.
22
23
  */
@@ -1 +1 @@
1
- {"version":3,"file":"Chat.d.ts","sourceRoot":"","sources":["../../../src/screens/Chat.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAOzB,OAAO,KAAK,EAAE,OAAO,EAAuC,MAAM,2BAA2B,CAAA;AAC7F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAEhE,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AA2H3D,wBAAgB,IAAI,CAAC,EACnB,OAAO,EACP,aAAa,EACb,aAAa,EACb,MAAM,EACN,QAAQ,EACR,UAAkB,EAClB,cAAc,EAAE,kBAAkB,GACnC,EAAE;IACD,OAAO,EAAE,OAAO,CAAA;IAChB,aAAa,EAAE,aAAa,CAAA;IAC5B;;;;OAIG;IACH,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,wEAAwE;IACxE,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IACrB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB,qBA65DA"}
1
+ {"version":3,"file":"Chat.d.ts","sourceRoot":"","sources":["../../../src/screens/Chat.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAQzB,OAAO,EAAqB,KAAK,OAAO,EAAsD,MAAM,2BAA2B,CAAA;AAC/H,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAEhE,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AA0H3D,wBAAgB,IAAI,CAAC,EACnB,OAAO,EACP,aAAa,EACb,aAAa,EACb,MAAM,EACN,QAAQ,EACR,UAAkB,EAClB,cAAc,EAAE,kBAAkB,GACnC,EAAE;IACD,OAAO,EAAE,OAAO,CAAA;IAChB,aAAa,EAAE,aAAa,CAAA;IAC5B;;;;OAIG;IACH,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,wEAAwE;IACxE,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IACrB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB,qBAgzDA"}