mirror of
https://github.com/hansjone/dsh-im-ops.git
synced 2026-10-12 20:23:21 +08:00
feat: IM session list relative time + /session N index binding
Local UX enhancements on top of upstream ce8b9e8:
- harness-client.mjs: add toEpochMs/sessionTimeMs, attach time to sessions
- workspace-command.mjs: /sessionlist relative time, /session N index binding
This commit is contained in:
parent
ce8b9e80e7
commit
3bc642bb82
2 changed files with 82 additions and 5 deletions
|
|
@ -40,6 +40,37 @@ function workspaceFromList(workspacePath, workspaceList) {
|
|||
return workspace;
|
||||
}
|
||||
|
||||
function toEpochMs(value) {
|
||||
if (typeof value === 'number' && Number.isFinite(value)) {
|
||||
return value < 1e12 ? value * 1000 : value;
|
||||
}
|
||||
if (typeof value === 'string' && value) {
|
||||
const parsed = Date.parse(value);
|
||||
if (!Number.isNaN(parsed)) return parsed;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
function sessionTimeMs(summary) {
|
||||
if (!summary || typeof summary !== 'object') return null;
|
||||
const candidates = [
|
||||
summary?.header?.lastActivityAt,
|
||||
summary?.header?.updatedAt,
|
||||
summary?.header?.createdAt,
|
||||
summary?.projections?.values?.lastActivityAt,
|
||||
summary?.projections?.values?.updatedAt,
|
||||
summary?.projections?.values?.createdAt,
|
||||
summary?.lastActivityAt,
|
||||
summary?.updatedAt,
|
||||
summary?.createdAt,
|
||||
];
|
||||
for (const value of candidates) {
|
||||
const ms = toEpochMs(value);
|
||||
if (ms !== null) return ms;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
function workspaceSessions(workspace, archivedSessionIds, sessionList) {
|
||||
if (!Array.isArray(sessionList?.items)) {
|
||||
throw new Error('Harness returned an invalid response for session.list');
|
||||
|
|
@ -54,7 +85,7 @@ function workspaceSessions(workspace, archivedSessionIds, sessionList) {
|
|||
sessions: workspace.sessionIds.map((sessionId) => {
|
||||
const summary = summaries.get(sessionId);
|
||||
const title = summary?.projections?.values?.title;
|
||||
return {
|
||||
const session = {
|
||||
sessionId,
|
||||
title: typeof title === 'string' ? title : null,
|
||||
archived: archived.has(sessionId),
|
||||
|
|
@ -62,6 +93,9 @@ function workspaceSessions(workspace, archivedSessionIds, sessionList) {
|
|||
origin: summary?.origin === 'subagent' ? 'subagent' : null,
|
||||
summaryAvailable: summary !== undefined,
|
||||
};
|
||||
const time = sessionTimeMs(summary);
|
||||
if (time !== null) session.time = time;
|
||||
return session;
|
||||
}),
|
||||
};
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue