Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 35 additions & 0 deletions apps/app/src/components/thread/timeline/rows/Tool.stories.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,26 @@ const toolSearchTool: TimelineRow = toolRow({
durationMs: 105,
});

const nativeSkillTool: TimelineRow = toolRow({
id: "thr_skill_native:tool:toolu_skill_native",
threadId: "thr_skill_native",
turnId: "turn_skill_native_1",
sourceSeqStart: 1,
sourceSeqEnd: 2,
status: "completed",
callId: "toolu_skill_native",
toolName: "Skill",
toolArgs: { skill: "visual-qa-loop" },
output: "Skill loaded",
approvalStatus: null,
durationMs: 120,
presentation: {
label: { pending: "Loading skill", completed: "Loaded skill" },
icon: { glyph: "Zap" },
title: "visual-qa-loop",
},
});

const longOutputTool: TimelineRow = toolRow({
id: "thr_tool_long_output:tool:toolu_long_output",
threadId: "thr_tool_long_output",
Expand Down Expand Up @@ -435,3 +455,18 @@ export function SkillReads() {
</StoryCard>
);
}

export function NativeSkillCall() {
return (
<StoryCard>
<StoryRow
label="Claude native Skill call"
hint="provider presentation uses the established lightning glyph"
>
<TimelineStage>
<ThreadTimelineRows {...baseProps} timelineRows={[nativeSkillTool]} />
</TimelineStage>
</StoryRow>
</StoryCard>
);
}
13 changes: 13 additions & 0 deletions plugins/provider-claude-code/src/presentation.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -371,6 +371,19 @@ describe("claude item presentation", () => {
});
});

it("uses the established skill glyph for native Skill calls", () => {
const harness = createClaudeDeltaHarness();
const events = harness.translate(
toolUse("skill-1", "Skill", { skill: "debugging" }),
);

expect(presentationOf(startedItems(events)[0])).toEqual({
label: { pending: "Loading skill", completed: "Loaded skill" },
icon: { glyph: "Zap" },
title: "debugging",
});
});

it("maps MultiEdit and NotebookEdit to file changes with their own verbs", () => {
const harness = createClaudeDeltaHarness();
const events = harness.translate({
Expand Down
2 changes: 1 addition & 1 deletion plugins/provider-claude-code/src/presentation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ const BUILTIN_TOOL_PRESENTATIONS: Readonly<
},
Skill: {
label: { pending: "Loading skill", completed: "Loaded skill" },
glyph: "Puzzle",
glyph: "Zap",
titleField: "skill",
},
StructuredOutput: {
Expand Down
Loading