diff --git a/src/renderer/components/cowork/CoworkActivitySidebar.tsx b/src/renderer/components/cowork/CoworkActivitySidebar.tsx
index 736e5c8f..491d5f12 100644
--- a/src/renderer/components/cowork/CoworkActivitySidebar.tsx
+++ b/src/renderer/components/cowork/CoworkActivitySidebar.tsx
@@ -198,6 +198,11 @@ const ToolRow: React.FC<{ item: CoworkActivityToolItem }> = ({ item }) => (
{item.toolName}
+ {item.skillName && (
+
+ {item.skillName}
+
+ )}
{i18nService.t(statusLabelKey[item.status])}
diff --git a/src/renderer/utils/coworkActivity.ts b/src/renderer/utils/coworkActivity.ts
index fa50f863..903b8b6e 100644
--- a/src/renderer/utils/coworkActivity.ts
+++ b/src/renderer/utils/coworkActivity.ts
@@ -72,6 +72,7 @@ export interface CoworkActivityToolItem {
status: ActivityItemStatus;
timestamp: number;
filePath: string | null;
+ skillName: string | null;
}
export interface CoworkActivitySnapshot {
@@ -419,6 +420,11 @@ export function buildCoworkActivitySnapshot(
}
const filePath = extractPath(input);
+ const isSkillTool = normalized === 'skill';
+ const skillInputId = isSkillTool ? extractString(input, ['skill', 'skillId', 'skill_id', 'name']) : null;
+ const skillName = skillInputId
+ ? (skillById.get(skillInputId)?.name ?? skillInputId)
+ : null;
toolTimeline.push({
id: entry.toolUse.id,
toolName,
@@ -426,11 +432,21 @@ export function buildCoworkActivitySnapshot(
status,
timestamp: entry.toolUse.timestamp,
filePath,
+ skillName,
});
fileChanges.push(...buildFileChangeFromTool(entry));
}
- const activeTool = [...toolTimeline].reverse().find((item) => item.status === ActivityItemStatus.Running) ?? null;
+ const sessionDone = session.status === 'completed' || session.status === 'error';
+ const finalizeTimeline = (items: CoworkActivityToolItem[]): CoworkActivityToolItem[] =>
+ sessionDone
+ ? items.map((item) => item.status === ActivityItemStatus.Running
+ ? { ...item, status: ActivityItemStatus.Completed }
+ : item)
+ : items;
+ const activeTool = sessionDone
+ ? null
+ : ([...toolTimeline].reverse().find((item) => item.status === ActivityItemStatus.Running) ?? null);
const activitySkills = Array.from(activeSkillIds)
.map((id) => {
const skill = skillById.get(id);
@@ -447,6 +463,6 @@ export function buildCoworkActivitySnapshot(
fileChanges: fileChanges.sort((left, right) => right.timestamp - left.timestamp),
artifacts: Array.from(artifacts.values()).sort((left, right) => right.timestamp - left.timestamp),
activeTool,
- toolTimeline: toolTimeline.slice(-12).reverse(),
+ toolTimeline: finalizeTimeline(toolTimeline.slice(-12).reverse()),
};
}
diff --git a/src/renderer/utils/coworkStudio.test.ts b/src/renderer/utils/coworkStudio.test.ts
index 049c4913..6d3e1725 100644
--- a/src/renderer/utils/coworkStudio.test.ts
+++ b/src/renderer/utils/coworkStudio.test.ts
@@ -73,6 +73,7 @@ const makeActivity = (toolName?: string, summary?: string): CoworkActivitySnapsh
status: ActivityItemStatus.Running,
timestamp: 11,
filePath: null,
+ skillName: null,
}
: null,
toolTimeline: [],