dsh-ssh-tui 0.5.4 → 0.5.5

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.
@@ -6,8 +6,10 @@
6
6
  import { existsSync } from 'node:fs';
7
7
  import { rm } from 'node:fs/promises';
8
8
  import { dirname, isAbsolute } from 'node:path';
9
+ import { inspectPersistenceSession, listPersistenceHeaders, persistenceLocate, } from './dsh-compat.js';
9
10
  import { t } from './i18n/index.js';
10
11
  import { listAttachableHosts } from './session-lock.js';
12
+ import { indexEntryMatchesStat, loadSessionIndex, PICKER_PRIORITY_COUNT, pruneSessionIndex, saveSessionIndex, sessionArtifactStat, sessionIndexPath, } from './session-index.js';
11
13
  /** Last path segment for the footer chip (`\root\genshin\srv` → `srv`). */
12
14
  export function sessionCwdLabel(cwd) {
13
15
  const raw = cwd.trim();
@@ -88,7 +90,7 @@ function isBlankSession(hasUserInput, hasReply) {
88
90
  /** Delete one session's on-disk artifacts (log directory), best effort. */
89
91
  async function pruneSessionArtifacts(persistence, meta) {
90
92
  try {
91
- const location = persistence.locate(meta);
93
+ const location = persistenceLocate(persistence, meta);
92
94
  if (location?.path !== undefined && location.path !== '') {
93
95
  await rm(dirname(location.path), { recursive: true, force: true });
94
96
  }
@@ -99,6 +101,34 @@ async function pruneSessionArtifacts(persistence, meta) {
99
101
  }
100
102
  /** Upper bound on one inspection batch, so the picker never fans out unbounded. */
101
103
  const INSPECT_BATCH_SIZE = 30;
104
+ function toResumable(item) {
105
+ const { hasUserInput: _hasUserInput, hasReply: _hasReply, ...rest } = item;
106
+ return rest;
107
+ }
108
+ function indexFromInspected(item, stat) {
109
+ return {
110
+ id: item.id,
111
+ label: item.label,
112
+ updatedAt: item.updatedAt,
113
+ cwd: item.cwd,
114
+ hasUserInput: item.hasUserInput,
115
+ hasReply: item.hasReply,
116
+ ...(item.unreadable === true ? { unreadable: true } : {}),
117
+ mtimeMs: stat.mtimeMs,
118
+ size: stat.size,
119
+ };
120
+ }
121
+ function inspectedFromIndex(entry) {
122
+ return {
123
+ id: entry.id,
124
+ label: entry.label,
125
+ updatedAt: entry.updatedAt,
126
+ cwd: entry.cwd,
127
+ hasUserInput: entry.hasUserInput,
128
+ hasReply: entry.hasReply,
129
+ ...(entry.unreadable === true ? { unreadable: true } : {}),
130
+ };
131
+ }
102
132
  /**
103
133
  * List resumable top-level sessions, newest first.
104
134
  *
@@ -113,21 +143,78 @@ const INSPECT_BATCH_SIZE = 30;
113
143
  * hosts first, then readable logs, then unreadable).
114
144
  */
115
145
  export async function listResumableSessions(persistence, currentId, listHosts = listAttachableHosts) {
116
- const headers = await persistence.list();
146
+ const listing = await listResumableSessionsProgressive(persistence, currentId, { listHosts });
147
+ return listing.complete;
148
+ }
149
+ /**
150
+ * List resumable sessions, painting the recent page first.
151
+ *
152
+ * `onUpdate` fires after the priority page (cached + newest logs) and again
153
+ * after each later inspect batch. Unchanged logs reuse `$DSH_HOME/tui-session-index.json`.
154
+ */
155
+ export async function listResumableSessionsProgressive(persistence, currentId, options = {}) {
156
+ const listHosts = options.listHosts ?? listAttachableHosts;
157
+ const indexPath = options.indexPath
158
+ ?? process.env.DSH_TUI_SESSION_INDEX
159
+ ?? sessionIndexPath();
160
+ const priorityCount = options.priorityCount ?? PICKER_PRIORITY_COUNT;
161
+ const headers = await listPersistenceHeaders(persistence);
117
162
  const candidates = headers
118
163
  .filter(meta => meta.id !== currentId
119
164
  && meta.cwd !== undefined
120
165
  && meta.origin !== 'subagent'
121
166
  && (meta.delegationDepth ?? 0) === 0)
122
167
  .sort((a, b) => b.createdAt - a.createdAt);
168
+ const [index, hosts] = await Promise.all([
169
+ loadSessionIndex(indexPath),
170
+ listHosts(),
171
+ ]);
172
+ const keepIds = new Set(candidates.map(meta => String(meta.id)));
173
+ const indexSizeBefore = index.size;
174
+ pruneSessionIndex(index, keepIds);
175
+ let indexDirty = index.size !== indexSizeBefore;
176
+ const sketchFromHeader = (meta) => {
177
+ const cached = index.get(String(meta.id));
178
+ const stat = sessionArtifactStat(persistence, meta);
179
+ if (stat.size > 0 && indexEntryMatchesStat(cached, stat) && cached !== undefined) {
180
+ return inspectedFromIndex(cached);
181
+ }
182
+ return {
183
+ id: meta.id,
184
+ label: cached?.label && cached.label !== '' ? cached.label : meta.id,
185
+ updatedAt: cached?.updatedAt ?? meta.createdAt,
186
+ cwd: meta.cwd ?? cached?.cwd ?? '',
187
+ hasUserInput: cached?.hasUserInput ?? true,
188
+ hasReply: cached?.hasReply ?? true,
189
+ };
190
+ };
191
+ const sketched = candidates.map(meta => toResumable(sketchFromHeader(meta)));
192
+ const sketchedById = new Map(sketched.map(item => [item.id, item]));
193
+ for (const host of hosts) {
194
+ if (host.sessionId === currentId)
195
+ continue;
196
+ const attach = { pid: host.lock.pid, sock: host.sock, state: host.lock.state };
197
+ const existing = sketchedById.get(host.sessionId);
198
+ if (existing !== undefined) {
199
+ existing.attach = attach;
200
+ continue;
201
+ }
202
+ sketched.unshift({
203
+ id: host.sessionId,
204
+ label: host.sessionId,
205
+ updatedAt: Date.parse(host.lock.startedAt) || Date.now(),
206
+ cwd: '',
207
+ attach,
208
+ });
209
+ }
210
+ options.onUpdate?.({ sessions: sketched, pending: true });
123
211
  const inspectCandidate = async (meta) => {
124
212
  try {
125
- const inspection = await persistence.inspect(meta.id);
126
- const firstUserMessage = inspection.events.find((event) => event.type === 'user/message'
127
- && event.data.source.kind === 'user');
213
+ const inspection = await inspectPersistenceSession(persistence, meta.id);
214
+ const firstUserMessage = inspection.events.find(event => isUserMessageEvent(event));
128
215
  const firstUserText = firstUserMessage === undefined
129
216
  ? undefined
130
- : Array.from(firstUserMessage.data.content
217
+ : Array.from((firstUserMessage.data?.content ?? [])
131
218
  .map((block) => {
132
219
  const candidate = block;
133
220
  return candidate.type === 'text' && typeof candidate.text === 'string' ? candidate.text : '';
@@ -142,7 +229,8 @@ export async function listResumableSessions(persistence, currentId, listHosts =
142
229
  const title = titleEvent === undefined
143
230
  ? undefined
144
231
  : titleEvent.data.title;
145
- const updatedAt = inspection.events.at(-1)?.time ?? meta.createdAt;
232
+ const last = inspection.events.at(-1);
233
+ const updatedAt = last?.time ?? meta.createdAt;
146
234
  return {
147
235
  id: meta.id,
148
236
  // The persisted generated title first: the web session list shows the
@@ -175,78 +263,115 @@ export async function listResumableSessions(persistence, currentId, listHosts =
175
263
  };
176
264
  }
177
265
  };
178
- // Headers only carry creation time. Inspect in bounded batches so a large
179
- // store cannot fan out unbounded, but do not stop after a fixed count —
180
- // the picker filters and scrolls, so older real conversations must stay
181
- // reachable. Recent empty boot rows are pruned instead of listed.
182
- const inspected = [];
183
- for (let offset = 0; offset < candidates.length; offset += INSPECT_BATCH_SIZE) {
184
- const batch = candidates.slice(offset, offset + INSPECT_BATCH_SIZE);
185
- const settled = await Promise.all(batch.map(async (meta) => ({ meta, item: await inspectCandidate(meta) })));
186
- for (const { meta, item } of settled) {
187
- // Unreadable logs stay visible regardless; a readable blank (a boot
188
- // that died before any input or reply) gets deleted so the raw id
189
- // never shows up as resumable again.
190
- if (item.unreadable !== true && isBlankSession(item.hasUserInput, item.hasReply)) {
191
- void pruneSessionArtifacts(persistence, meta);
192
- continue;
193
- }
194
- inspected.push(item);
266
+ const resolveCandidate = async (meta) => {
267
+ const stat = sessionArtifactStat(persistence, meta);
268
+ const cached = index.get(String(meta.id));
269
+ // Fingerprint 0/0 means locate/stat failed: never treat that as a hit.
270
+ if (stat.size > 0 && indexEntryMatchesStat(cached, stat) && cached !== undefined) {
271
+ return inspectedFromIndex(cached);
195
272
  }
196
- }
197
- const resumable = inspected.filter(item => item.hasUserInput || item.unreadable === true);
198
- const hosts = await listHosts();
199
- const byId = new Map(resumable.map(item => [item.id, item]));
200
- for (const host of hosts) {
201
- if (host.sessionId === currentId)
202
- continue;
203
- const attach = { pid: host.lock.pid, sock: host.sock, state: host.lock.state };
204
- // A live Host whose session never saw input nor a reply is a crashed
205
- // boot: stop it, remove its artifacts, and keep it out of the picker.
206
- let blankLive = false;
207
- let liveHasUserInput = true;
208
- try {
209
- const inspection = await persistence.inspect(host.sessionId);
210
- const hasInput = inspection.events.some(event => isUserMessageEvent(event));
211
- blankLive = isBlankSession(hasInput, sessionHasReply(inspection.events));
212
- liveHasUserInput = hasInput;
273
+ const item = await inspectCandidate(meta);
274
+ if (item.unreadable !== true && isBlankSession(item.hasUserInput, item.hasReply)) {
275
+ index.delete(String(meta.id));
276
+ indexDirty = true;
277
+ void pruneSessionArtifacts(persistence, meta);
278
+ return undefined;
213
279
  }
214
- catch {
215
- // No durable log: the Host booted and never did anything.
216
- blankLive = true;
217
- liveHasUserInput = false;
280
+ if (stat.size > 0) {
281
+ index.set(String(meta.id), indexFromInspected(item, stat));
282
+ indexDirty = true;
218
283
  }
219
- if (blankLive) {
284
+ return item;
285
+ };
286
+ const inspected = [];
287
+ const blankLiveIds = new Set();
288
+ const extraLive = new Map();
289
+ const mergeHosts = async (items) => {
290
+ const resumable = items.filter(item => item.hasUserInput || item.unreadable === true);
291
+ const byId = new Map(resumable.map(item => [item.id, item]));
292
+ for (const host of hosts) {
293
+ if (host.sessionId === currentId || blankLiveIds.has(host.sessionId))
294
+ continue;
295
+ const attach = { pid: host.lock.pid, sock: host.sock, state: host.lock.state };
296
+ const existing = byId.get(host.sessionId) ?? extraLive.get(host.sessionId);
297
+ if (existing !== undefined) {
298
+ existing.attach = attach;
299
+ if (!byId.has(host.sessionId)) {
300
+ resumable.push(existing);
301
+ byId.set(host.sessionId, existing);
302
+ }
303
+ continue;
304
+ }
305
+ // A live Host whose session never saw input nor a reply is a crashed
306
+ // boot: stop it, remove its artifacts, and keep it out of the picker.
307
+ let blankLive = false;
308
+ let liveHasUserInput = true;
220
309
  try {
221
- process.kill(attach.pid, 'SIGTERM');
310
+ const inspection = await inspectPersistenceSession(persistence, host.sessionId);
311
+ const hasInput = inspection.events.some(event => isUserMessageEvent(event));
312
+ blankLive = isBlankSession(hasInput, sessionHasReply(inspection.events));
313
+ liveHasUserInput = hasInput;
222
314
  }
223
- catch { /* already gone */ }
224
- const header = candidates.find(candidate => candidate.id === host.sessionId);
225
- if (header !== undefined)
226
- void pruneSessionArtifacts(persistence, header);
227
- continue;
315
+ catch {
316
+ blankLive = true;
317
+ liveHasUserInput = false;
318
+ }
319
+ if (blankLive) {
320
+ blankLiveIds.add(host.sessionId);
321
+ try {
322
+ process.kill(attach.pid, 'SIGTERM');
323
+ }
324
+ catch { /* already gone */ }
325
+ const header = candidates.find(candidate => candidate.id === host.sessionId);
326
+ if (header !== undefined)
327
+ void pruneSessionArtifacts(persistence, header);
328
+ continue;
329
+ }
330
+ const injected = {
331
+ id: host.sessionId,
332
+ label: host.sessionId,
333
+ updatedAt: Date.parse(host.lock.startedAt) || Date.now(),
334
+ cwd: '',
335
+ hasUserInput: liveHasUserInput,
336
+ hasReply: true,
337
+ attach,
338
+ };
339
+ extraLive.set(host.sessionId, injected);
340
+ resumable.push(injected);
341
+ byId.set(host.sessionId, injected);
228
342
  }
229
- const existing = byId.get(host.sessionId);
230
- if (existing !== undefined) {
231
- existing.attach = attach;
232
- continue;
343
+ resumable.sort((a, b) => (a.attach === undefined ? 1 : 0) - (b.attach === undefined ? 1 : 0)
344
+ || (a.unreadable === true ? 1 : 0) - (b.unreadable === true ? 1 : 0)
345
+ || b.updatedAt - a.updatedAt);
346
+ return resumable;
347
+ };
348
+ const emit = async (pending) => {
349
+ const listed = (await mergeHosts(inspected)).map(toResumable);
350
+ options.onUpdate?.({ sessions: listed, pending });
351
+ return listed;
352
+ };
353
+ // Newest page first so the picker can paint before older logs are parsed.
354
+ const priority = candidates.slice(0, Math.max(0, priorityCount));
355
+ const rest = candidates.slice(priority.length);
356
+ const first = await Promise.all(priority.map(async (meta) => ({ meta, item: await resolveCandidate(meta) })));
357
+ for (const { item } of first) {
358
+ if (item !== undefined)
359
+ inspected.push(item);
360
+ }
361
+ await emit(rest.length > 0);
362
+ for (let offset = 0; offset < rest.length; offset += INSPECT_BATCH_SIZE) {
363
+ const batch = rest.slice(offset, offset + INSPECT_BATCH_SIZE);
364
+ const settled = await Promise.all(batch.map(async (meta) => ({ meta, item: await resolveCandidate(meta) })));
365
+ for (const { item } of settled) {
366
+ if (item !== undefined)
367
+ inspected.push(item);
233
368
  }
234
- const injected = {
235
- id: host.sessionId,
236
- label: host.sessionId,
237
- updatedAt: Date.parse(host.lock.startedAt) || Date.now(),
238
- cwd: '',
239
- hasUserInput: liveHasUserInput,
240
- hasReply: true,
241
- attach,
242
- };
243
- resumable.push(injected);
244
- byId.set(host.sessionId, injected);
369
+ await emit(offset + INSPECT_BATCH_SIZE < rest.length);
245
370
  }
246
- // Attachable live hosts first, then readable logs, then unreadable.
247
- resumable.sort((a, b) => (a.attach === undefined ? 1 : 0) - (b.attach === undefined ? 1 : 0)
248
- || (a.unreadable === true ? 1 : 0) - (b.unreadable === true ? 1 : 0)
249
- || b.updatedAt - a.updatedAt);
250
- return resumable.map(({ hasUserInput: _hasUserInput, ...rest }) => rest);
371
+ const complete = (await mergeHosts(inspected)).map(toResumable);
372
+ if (indexDirty)
373
+ await saveSessionIndex(indexPath, index);
374
+ options.onUpdate?.({ sessions: complete, pending: false });
375
+ return { sessions: complete, pending: false, complete };
251
376
  }
252
377
  //# sourceMappingURL=session-list.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-list.js","sourceRoot":"","sources":["../src/session-list.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-list.js","sourceRoot":"","sources":["../src/session-list.ts"],"names":[],"mappings":"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"}