@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 +276 -246
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +276 -246
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
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:
|
|
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
|
] });
|