@invergent/agent-chat-react 2.14.0 → 2.14.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.
package/dist/index.cjs CHANGED
@@ -1522,6 +1522,8 @@ var TOOL_ORB_STATES = {
1522
1522
  kb_read_page: "searching",
1523
1523
  search_files: "searching",
1524
1524
  list_files: "searching",
1525
+ skill_view: "searching",
1526
+ skills_list: "searching",
1525
1527
  research_memory: "searching",
1526
1528
  fetch_channel_messages: "searching",
1527
1529
  fetch_channel_file: "searching",
@@ -1600,7 +1602,6 @@ var SIMPLE_MODE_HIDDEN_TOOLS = /* @__PURE__ */ new Set([
1600
1602
  "search_files",
1601
1603
  "session_search",
1602
1604
  "skills_list",
1603
- "skill_view",
1604
1605
  "skill_manage",
1605
1606
  "process",
1606
1607
  "memory",
@@ -5259,6 +5260,273 @@ function WebSearchGroupBlock({ tcs }) {
5259
5260
  /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "mt-1 ml-5 space-y-0.5", children: tcs.map((tc) => /* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsx(WebSearchRow, { tc }) }, tc.id)) })
5260
5261
  ] });
5261
5262
  }
5263
+
5264
+ // src/components/chat/simple-labels.ts
5265
+ function stringField(args, key) {
5266
+ const value = args?.[key];
5267
+ return typeof value === "string" && value.length > 0 ? value : null;
5268
+ }
5269
+ function cancelledToolLabel(toolName) {
5270
+ const map = {
5271
+ terminal: "Command",
5272
+ execute_code: "Execute code",
5273
+ read_file: "Read",
5274
+ write_file: "Write",
5275
+ patch: "Patch",
5276
+ search_files: "Search files",
5277
+ list_files: "List files",
5278
+ web_search: "Web search",
5279
+ web_extract: "Web fetch",
5280
+ web_crawl: "Web crawl",
5281
+ session_search: "Session search",
5282
+ memory: "Memory",
5283
+ todo: "Todo",
5284
+ skills_list: "Skills",
5285
+ skill_view: "Skill",
5286
+ consult_expert: "Expert",
5287
+ delegate_task: "Delegate task",
5288
+ ask_user_question: "Ask User Question",
5289
+ process: "Process",
5290
+ create_artifact: "Create artifact",
5291
+ run_coding_agent: "Coding agent",
5292
+ code_run: "Coding agent",
5293
+ // ``Research memory`` reads as a noun ("memory of research") and
5294
+ // makes the shimmer awkward ("Running Research memory…"). The
5295
+ // one-liner renderer shows just ``Research`` as the label, so
5296
+ // mirror that here so the live shimmer matches the row that
5297
+ // replaces it on completion.
5298
+ research_memory: "Research",
5299
+ research_outline: "Research",
5300
+ generate_image: "image generation",
5301
+ generate_video: "video generation",
5302
+ // Arbor research-mission tools (the /auto-research coordinator loop).
5303
+ idea_tree: "Idea tree",
5304
+ dispatch_experiments: "Dispatch experiments",
5305
+ merge_experiment: "Merge experiment"
5306
+ };
5307
+ if (map[toolName]) return map[toolName];
5308
+ if (toolName.startsWith("mcp__")) return formatMcpToolLabel(toolName);
5309
+ return toolName;
5310
+ }
5311
+ function skillViewLabel(calls) {
5312
+ const args = calls.map((tc) => parseArgs(tc.args));
5313
+ const names = args.map((a) => stringField(a, "name") ?? stringField(a, "skill")).filter((name) => name !== null);
5314
+ if (names.length !== calls.length || names.length === 0) {
5315
+ return calls.length > 1 ? `Reading ${calls.length} skills` : "Reading a skill";
5316
+ }
5317
+ if (calls.length === 1) {
5318
+ const path = stringField(args[0] ?? null, "file_path");
5319
+ return path ? `Reading skill ${names[0]} \xB7 ${lastPathSegment(path)}` : `Reading skill ${names[0]}`;
5320
+ }
5321
+ return `Reading skills ${names.join(", ")}`;
5322
+ }
5323
+ function deriveSingleToolLabel(tc) {
5324
+ const name = cancelledToolLabel(tc.toolName);
5325
+ if (_HEADER_HIDES_DETAIL.has(tc.toolName)) {
5326
+ return _HEADER_GENERIC_VERB[tc.toolName] ?? name;
5327
+ }
5328
+ const detail = extractToolDetail(tc);
5329
+ return detail ? `${name} \xB7 ${detail}` : name;
5330
+ }
5331
+ var _HEADER_HIDES_DETAIL = /* @__PURE__ */ new Set([
5332
+ "terminal",
5333
+ "execute_code",
5334
+ "memory"
5335
+ ]);
5336
+ var _HEADER_GENERIC_VERB = {
5337
+ terminal: "Ran a command",
5338
+ execute_code: "Executed code",
5339
+ memory: "Updated memory"
5340
+ };
5341
+ function extractToolDetail(tc) {
5342
+ const args = parseArgs(tc.args);
5343
+ if (!args) return null;
5344
+ const stringArg = (key) => stringField(args, key);
5345
+ switch (tc.toolName) {
5346
+ case "read_file":
5347
+ case "write_file":
5348
+ case "patch":
5349
+ case "list_files": {
5350
+ const path = stringArg("path") ?? stringArg("file_path");
5351
+ return path ? lastPathSegment(path) : null;
5352
+ }
5353
+ // ``pattern`` is the query; ``path`` is the optional root to search
5354
+ // under. Reading ``path`` here labelled the search *directory* as
5355
+ // the query, and dropped the label entirely for the common
5356
+ // whole-workspace search that omits it.
5357
+ case "search_files":
5358
+ return stringArg("pattern") ?? stringArg("query");
5359
+ case "terminal": {
5360
+ const cmd = stringArg("command");
5361
+ return cmd ? truncate3(cmd, 40) : null;
5362
+ }
5363
+ case "execute_code": {
5364
+ const code3 = stringArg("code");
5365
+ return code3 ? truncate3(code3.split("\n")[0] ?? "", 40) : null;
5366
+ }
5367
+ case "web_search":
5368
+ case "web_crawl":
5369
+ return stringArg("query");
5370
+ case "web_extract": {
5371
+ const url = stringArg("url");
5372
+ if (!url) return null;
5373
+ try {
5374
+ return new URL(url).hostname.replace(/^www\./, "");
5375
+ } catch {
5376
+ return truncate3(url, 40);
5377
+ }
5378
+ }
5379
+ case "skill_view":
5380
+ case "skill_manage":
5381
+ return stringArg("name") ?? stringArg("skill");
5382
+ case "create_artifact":
5383
+ case "consult_expert":
5384
+ case "delegate_task":
5385
+ return stringArg("name") ?? stringArg("task") ?? stringArg("title");
5386
+ case "run_coding_agent":
5387
+ case "code_run": {
5388
+ const prompt = stringArg("prompt");
5389
+ return prompt ? truncate3(prompt, 60) : null;
5390
+ }
5391
+ case "idea_tree":
5392
+ return stringArg("action");
5393
+ case "dispatch_experiments": {
5394
+ const keys = args.node_keys;
5395
+ if (Array.isArray(keys) && keys.length > 0) {
5396
+ return truncate3(keys.map((k) => String(k)).join(", "), 40);
5397
+ }
5398
+ return stringArg("action");
5399
+ }
5400
+ case "merge_experiment":
5401
+ return stringArg("node_key") ?? stringArg("action");
5402
+ case "memory":
5403
+ return stringArg("action") ?? stringArg("key");
5404
+ case "research_memory": {
5405
+ const action = stringArg("action");
5406
+ if (action === "add") {
5407
+ const title = stringArg("title");
5408
+ if (title) return truncate3(title, 60);
5409
+ const url = stringArg("url");
5410
+ if (url) {
5411
+ try {
5412
+ return new URL(url).hostname.replace(/^www\./, "");
5413
+ } catch {
5414
+ return truncate3(url, 40);
5415
+ }
5416
+ }
5417
+ return null;
5418
+ }
5419
+ if (action === "retrieve") {
5420
+ return stringArg("query");
5421
+ }
5422
+ return action;
5423
+ }
5424
+ case "research_outline": {
5425
+ const action = stringArg("action");
5426
+ if (action === "set") {
5427
+ const outline = stringArg("outline");
5428
+ if (outline) {
5429
+ const sections = outline.split(/\r?\n/).filter((line) => /^#{2,6}\s+\S/.test(line)).length;
5430
+ if (sections > 0) {
5431
+ return `${sections} ${sections === 1 ? "section" : "sections"}`;
5432
+ }
5433
+ }
5434
+ return "outline";
5435
+ }
5436
+ return action;
5437
+ }
5438
+ default:
5439
+ return null;
5440
+ }
5441
+ }
5442
+ function lastPathSegment(path) {
5443
+ const cleaned = path.replace(/\/+$/, "");
5444
+ const idx = cleaned.lastIndexOf("/");
5445
+ return idx >= 0 ? cleaned.slice(idx + 1) : cleaned;
5446
+ }
5447
+ function truncate3(s, max) {
5448
+ return s.length > max ? `${s.slice(0, max - 1)}\u2026` : s;
5449
+ }
5450
+ function toolRowLabel(tc) {
5451
+ const detail = extractToolDetail(tc);
5452
+ switch (tc.toolName) {
5453
+ case "read_file":
5454
+ return detail ? `Read ${detail}` : "Read a file";
5455
+ case "write_file":
5456
+ return detail ? `Wrote ${detail}` : "Wrote a file";
5457
+ case "patch":
5458
+ return detail ? `Edited ${detail}` : "Edited a file";
5459
+ case "list_files":
5460
+ return detail ? `Listed ${detail}` : "Listed files";
5461
+ case "search_files": {
5462
+ if (!detail) return "Searched files";
5463
+ const target = stringField(parseArgs(tc.args), "target");
5464
+ return target === "files" || target === "find" ? `Looked for files named "${detail}"` : `Searched files for "${detail}"`;
5465
+ }
5466
+ case "terminal":
5467
+ return "Ran a command";
5468
+ case "execute_code":
5469
+ return "Executed code";
5470
+ case "web_search":
5471
+ return detail ? `Searched the web for "${detail}"` : "Searched the web";
5472
+ case "web_crawl":
5473
+ return detail ? `Crawled "${detail}"` : "Crawled the web";
5474
+ case "web_extract":
5475
+ return detail ? `Fetched ${detail}` : "Fetched a page";
5476
+ case "session_search":
5477
+ return detail ? `Searched session for "${detail}"` : "Searched session";
5478
+ case "skill_view":
5479
+ return skillViewLabel([tc]);
5480
+ case "skills_list":
5481
+ return "Listed available skills";
5482
+ case "skill_manage":
5483
+ return detail ? `Updated skill ${detail}` : "Managed skills";
5484
+ case "consult_expert":
5485
+ return detail ? `Consulted ${detail} expert` : "Consulted an expert";
5486
+ case "delegate_task":
5487
+ return detail ? `Delegated: ${detail}` : "Delegated a task";
5488
+ case "create_artifact":
5489
+ return detail ? `Created artifact "${detail}"` : "Created an artifact";
5490
+ case "memory":
5491
+ return detail ? `Memory ${detail}` : "Updated memory";
5492
+ case "todo":
5493
+ return detail ? `Todo ${detail}` : "Updated todo list";
5494
+ case "run_coding_agent":
5495
+ case "code_run": {
5496
+ const a = parseArgs(tc.args);
5497
+ const agent = a?.agent ?? (a?.provider === "openai" ? "codex" : a?.provider === "anthropic" ? "claude" : void 0);
5498
+ const name = agent === "codex" ? "Codex" : agent === "claude" ? "Claude Code" : "coding agent";
5499
+ return detail ? `${name}: ${detail}` : `Ran ${name}`;
5500
+ }
5501
+ case "research_memory": {
5502
+ const args = parseArgs(tc.args);
5503
+ const action = args?.action;
5504
+ if (action === "add") {
5505
+ return detail ? `Stored source "${detail}"` : "Stored a source";
5506
+ }
5507
+ if (action === "retrieve") {
5508
+ return detail ? `Retrieved sources for "${detail}"` : "Retrieved sources";
5509
+ }
5510
+ if (action === "list") {
5511
+ return "Listed sources";
5512
+ }
5513
+ return "Updated research memory";
5514
+ }
5515
+ case "research_outline": {
5516
+ const args = parseArgs(tc.args);
5517
+ const action = args?.action;
5518
+ if (action === "set") {
5519
+ return detail ? `Updated outline (${detail})` : "Updated outline";
5520
+ }
5521
+ if (action === "get") {
5522
+ return "Read outline";
5523
+ }
5524
+ return "Touched outline";
5525
+ }
5526
+ default:
5527
+ return cancelledToolLabel(tc.toolName);
5528
+ }
5529
+ }
5262
5530
  init_utils();
5263
5531
  var COLLAPSED_MAX_HEIGHT_PX = 160;
5264
5532
  var ChatMessage = react.memo(function ChatMessage2({
@@ -12132,48 +12400,6 @@ function OrphanSystemMarker({
12132
12400
  }
12133
12401
  return null;
12134
12402
  }
12135
- function cancelledToolLabel(toolName) {
12136
- const map = {
12137
- terminal: "Command",
12138
- execute_code: "Execute code",
12139
- read_file: "Read",
12140
- write_file: "Write",
12141
- patch: "Patch",
12142
- search_files: "Search files",
12143
- list_files: "List files",
12144
- web_search: "Web search",
12145
- web_extract: "Web fetch",
12146
- web_crawl: "Web crawl",
12147
- session_search: "Session search",
12148
- memory: "Memory",
12149
- todo: "Todo",
12150
- skills_list: "Skills",
12151
- skill_view: "Skill",
12152
- consult_expert: "Expert",
12153
- delegate_task: "Delegate task",
12154
- ask_user_question: "Ask User Question",
12155
- process: "Process",
12156
- create_artifact: "Create artifact",
12157
- run_coding_agent: "Coding agent",
12158
- code_run: "Coding agent",
12159
- // ``Research memory`` reads as a noun ("memory of research") and
12160
- // makes the shimmer awkward ("Running Research memory…"). The
12161
- // one-liner renderer shows just ``Research`` as the label, so
12162
- // mirror that here so the live shimmer matches the row that
12163
- // replaces it on completion.
12164
- research_memory: "Research",
12165
- research_outline: "Research",
12166
- generate_image: "image generation",
12167
- generate_video: "video generation",
12168
- // Arbor research-mission tools (the /auto-research coordinator loop).
12169
- idea_tree: "Idea tree",
12170
- dispatch_experiments: "Dispatch experiments",
12171
- merge_experiment: "Merge experiment"
12172
- };
12173
- if (map[toolName]) return map[toolName];
12174
- if (toolName.startsWith("mcp__")) return formatMcpToolLabel(toolName);
12175
- return toolName;
12176
- }
12177
12403
  function CancelledToolRow({ tc }) {
12178
12404
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1.5 text-sm", children: [
12179
12405
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-semibold text-foreground/60", children: cancelledToolLabel(tc.toolName) }),
@@ -12386,6 +12612,9 @@ function deriveIterationLabel(message) {
12386
12612
  if (calls.length === 0) {
12387
12613
  return message.reasoning ? "Thought through the problem" : null;
12388
12614
  }
12615
+ if (calls.every((tc) => tc.toolName === "skill_view")) {
12616
+ return skillViewLabel(calls);
12617
+ }
12389
12618
  if (calls.length === 1) {
12390
12619
  const tc = calls[0];
12391
12620
  return deriveSingleToolLabel(tc);
@@ -12398,131 +12627,6 @@ function deriveIterationLabel(message) {
12398
12627
  }
12399
12628
  return `Used ${calls.length} tools`;
12400
12629
  }
12401
- function deriveSingleToolLabel(tc) {
12402
- const name = cancelledToolLabel(tc.toolName);
12403
- if (_HEADER_HIDES_DETAIL.has(tc.toolName)) {
12404
- return _HEADER_GENERIC_VERB[tc.toolName] ?? name;
12405
- }
12406
- const detail = extractToolDetail(tc);
12407
- return detail ? `${name} \xB7 ${detail}` : name;
12408
- }
12409
- var _HEADER_HIDES_DETAIL = /* @__PURE__ */ new Set([
12410
- "terminal",
12411
- "execute_code",
12412
- "memory"
12413
- ]);
12414
- var _HEADER_GENERIC_VERB = {
12415
- terminal: "Ran a command",
12416
- execute_code: "Executed code",
12417
- memory: "Updated memory"
12418
- };
12419
- function extractToolDetail(tc) {
12420
- const args = parseArgs(tc.args);
12421
- if (!args) return null;
12422
- const stringArg = (key) => {
12423
- const v = args[key];
12424
- return typeof v === "string" && v.length > 0 ? v : null;
12425
- };
12426
- switch (tc.toolName) {
12427
- case "read_file":
12428
- case "write_file":
12429
- case "patch":
12430
- case "list_files":
12431
- case "search_files": {
12432
- const path = stringArg("path") ?? stringArg("file_path");
12433
- return path ? lastPathSegment(path) : null;
12434
- }
12435
- case "terminal": {
12436
- const cmd = stringArg("command");
12437
- return cmd ? truncate3(cmd, 40) : null;
12438
- }
12439
- case "execute_code": {
12440
- const code3 = stringArg("code");
12441
- return code3 ? truncate3(code3.split("\n")[0] ?? "", 40) : null;
12442
- }
12443
- case "web_search":
12444
- case "web_crawl":
12445
- return stringArg("query");
12446
- case "web_extract": {
12447
- const url = stringArg("url");
12448
- if (!url) return null;
12449
- try {
12450
- return new URL(url).hostname.replace(/^www\./, "");
12451
- } catch {
12452
- return truncate3(url, 40);
12453
- }
12454
- }
12455
- case "skill_view":
12456
- case "skill_manage":
12457
- return stringArg("name") ?? stringArg("skill");
12458
- case "create_artifact":
12459
- case "consult_expert":
12460
- case "delegate_task":
12461
- return stringArg("name") ?? stringArg("task") ?? stringArg("title");
12462
- case "run_coding_agent":
12463
- case "code_run": {
12464
- const prompt = stringArg("prompt");
12465
- return prompt ? truncate3(prompt, 60) : null;
12466
- }
12467
- case "idea_tree":
12468
- return stringArg("action");
12469
- case "dispatch_experiments": {
12470
- const keys = args.node_keys;
12471
- if (Array.isArray(keys) && keys.length > 0) {
12472
- return truncate3(keys.map((k) => String(k)).join(", "), 40);
12473
- }
12474
- return stringArg("action");
12475
- }
12476
- case "merge_experiment":
12477
- return stringArg("node_key") ?? stringArg("action");
12478
- case "memory":
12479
- return stringArg("action") ?? stringArg("key");
12480
- case "research_memory": {
12481
- const action = stringArg("action");
12482
- if (action === "add") {
12483
- const title = stringArg("title");
12484
- if (title) return truncate3(title, 60);
12485
- const url = stringArg("url");
12486
- if (url) {
12487
- try {
12488
- return new URL(url).hostname.replace(/^www\./, "");
12489
- } catch {
12490
- return truncate3(url, 40);
12491
- }
12492
- }
12493
- return null;
12494
- }
12495
- if (action === "retrieve") {
12496
- return stringArg("query");
12497
- }
12498
- return action;
12499
- }
12500
- case "research_outline": {
12501
- const action = stringArg("action");
12502
- if (action === "set") {
12503
- const outline = stringArg("outline");
12504
- if (outline) {
12505
- const sections = outline.split(/\r?\n/).filter((line) => /^#{2,6}\s+\S/.test(line)).length;
12506
- if (sections > 0) {
12507
- return `${sections} ${sections === 1 ? "section" : "sections"}`;
12508
- }
12509
- }
12510
- return "outline";
12511
- }
12512
- return action;
12513
- }
12514
- default:
12515
- return null;
12516
- }
12517
- }
12518
- function lastPathSegment(path) {
12519
- const cleaned = path.replace(/\/+$/, "");
12520
- const idx = cleaned.lastIndexOf("/");
12521
- return idx >= 0 ? cleaned.slice(idx + 1) : cleaned;
12522
- }
12523
- function truncate3(s, max) {
12524
- return s.length > max ? `${s.slice(0, max - 1)}\u2026` : s;
12525
- }
12526
12630
  function visibleToolCalls(message) {
12527
12631
  return (message.toolCalls ?? []).filter((tc) => {
12528
12632
  if (isHiddenSimpleTool(tc)) return false;
@@ -12543,6 +12647,9 @@ function liveIterationLabel(message) {
12543
12647
  (tc) => tc.status === "running" && !isHiddenSimpleTool(tc)
12544
12648
  );
12545
12649
  if (running.length === 0) return "Thinking\u2026";
12650
+ if (running.every((tc) => tc.toolName === "skill_view")) {
12651
+ return `${skillViewLabel(running)}\u2026`;
12652
+ }
12546
12653
  if (running.length === 1) {
12547
12654
  const tc = running[0];
12548
12655
  const name = cancelledToolLabel(tc.toolName);
@@ -12584,83 +12691,6 @@ var _TOOL_ROW_ICON = {
12584
12691
  function _toolRowIcon(toolName) {
12585
12692
  return _TOOL_ROW_ICON[toolName] ?? lucideReact.WrenchIcon;
12586
12693
  }
12587
- function _toolRowLabel(tc) {
12588
- const detail = extractToolDetail(tc);
12589
- switch (tc.toolName) {
12590
- case "read_file":
12591
- return detail ? `Read ${detail}` : "Read a file";
12592
- case "write_file":
12593
- return detail ? `Wrote ${detail}` : "Wrote a file";
12594
- case "patch":
12595
- return detail ? `Edited ${detail}` : "Edited a file";
12596
- case "list_files":
12597
- return detail ? `Listed ${detail}` : "Listed files";
12598
- case "search_files":
12599
- return detail ? `Searched files for "${detail}"` : "Searched files";
12600
- case "terminal":
12601
- return "Ran a command";
12602
- case "execute_code":
12603
- return "Executed code";
12604
- case "web_search":
12605
- return detail ? `Searched the web for "${detail}"` : "Searched the web";
12606
- case "web_crawl":
12607
- return detail ? `Crawled "${detail}"` : "Crawled the web";
12608
- case "web_extract":
12609
- return detail ? `Fetched ${detail}` : "Fetched a page";
12610
- case "session_search":
12611
- return detail ? `Searched session for "${detail}"` : "Searched session";
12612
- case "skill_view":
12613
- return detail ? `Read the ${detail} skill` : "Read a skill";
12614
- case "skills_list":
12615
- return "Listed available skills";
12616
- case "skill_manage":
12617
- return detail ? `Updated skill ${detail}` : "Managed skills";
12618
- case "consult_expert":
12619
- return detail ? `Consulted ${detail} expert` : "Consulted an expert";
12620
- case "delegate_task":
12621
- return detail ? `Delegated: ${detail}` : "Delegated a task";
12622
- case "create_artifact":
12623
- return detail ? `Created artifact "${detail}"` : "Created an artifact";
12624
- case "memory":
12625
- return detail ? `Memory ${detail}` : "Updated memory";
12626
- case "todo":
12627
- return detail ? `Todo ${detail}` : "Updated todo list";
12628
- case "run_coding_agent":
12629
- case "code_run": {
12630
- const a = parseArgs(tc.args);
12631
- const agent = a?.agent ?? (a?.provider === "openai" ? "codex" : a?.provider === "anthropic" ? "claude" : void 0);
12632
- const name = agent === "codex" ? "Codex" : agent === "claude" ? "Claude Code" : "coding agent";
12633
- return detail ? `${name}: ${detail}` : `Ran ${name}`;
12634
- }
12635
- case "research_memory": {
12636
- const args = parseArgs(tc.args);
12637
- const action = args?.action;
12638
- if (action === "add") {
12639
- return detail ? `Stored source "${detail}"` : "Stored a source";
12640
- }
12641
- if (action === "retrieve") {
12642
- return detail ? `Retrieved sources for "${detail}"` : "Retrieved sources";
12643
- }
12644
- if (action === "list") {
12645
- return "Listed sources";
12646
- }
12647
- return "Updated research memory";
12648
- }
12649
- case "research_outline": {
12650
- const args = parseArgs(tc.args);
12651
- const action = args?.action;
12652
- if (action === "set") {
12653
- return detail ? `Updated outline (${detail})` : "Updated outline";
12654
- }
12655
- if (action === "get") {
12656
- return "Read outline";
12657
- }
12658
- return "Touched outline";
12659
- }
12660
- default:
12661
- return cancelledToolLabel(tc.toolName);
12662
- }
12663
- }
12664
12694
  function SimpleDetailRow({ icon: Icon, children }) {
12665
12695
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-3 text-sm", children: [
12666
12696
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -12718,7 +12748,7 @@ function IterationExpanded({
12718
12748
  if (tc.toolName === "code_run") {
12719
12749
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pr-1", children: /* @__PURE__ */ jsxRuntime.jsx(CodeRunToolBlock, { tc, defaultOpen: true }) }, tc.id);
12720
12750
  }
12721
- return /* @__PURE__ */ jsxRuntime.jsx(SimpleDetailRow, { icon: _toolRowIcon(tc.toolName), children: /* @__PURE__ */ jsxRuntime.jsx("span", { children: _toolRowLabel(tc) }) }, tc.id);
12751
+ return /* @__PURE__ */ jsxRuntime.jsx(SimpleDetailRow, { icon: _toolRowIcon(tc.toolName), children: /* @__PURE__ */ jsxRuntime.jsx("span", { children: toolRowLabel(tc) }) }, tc.id);
12722
12752
  }),
12723
12753
  showDone && /* @__PURE__ */ jsxRuntime.jsx(SimpleDetailRow, { icon: lucideReact.CircleCheckIcon, children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-foreground", children: "Done" }) })
12724
12754
  ] });