claude-code-rust 0.14.1 → 0.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.
@@ -3,7 +3,7 @@ import { bridgeLogger, LOG_TARGETS } from "./logger.js";
3
3
  import { asRecordOrNull } from "./shared.js";
4
4
  import { applyTaskToolResult } from "./tasks.js";
5
5
  import { activeTaskIdForToolUse, linkTaskToolUse, unlinkTaskToolUse } from "./task_links.js";
6
- import { backgroundToolLaunchTaskIdFromResult, buildToolResultFields, createToolCall, } from "./tooling.js";
6
+ import { applyToolNonExecutionMetadata, backgroundToolLaunchTaskIdFromResult, buildToolResultFields, createToolCall, } from "./tooling.js";
7
7
  const TOOL_SUMMARY_TOOL_NAMES = new Set(["Agent", "Task", "WebSearch", "WebFetch", "ExitPlanMode"]);
8
8
  const TASK_LIFECYCLE_TOOL_NAMES = new Set(["Agent", "Task", "Monitor", "Workflow"]);
9
9
  function jsonSize(value) {
@@ -308,18 +308,19 @@ export function ensureToolCallVisible(session, toolUseId, toolName, input, paren
308
308
  emitInitialToolCall(session, toolCall);
309
309
  return toolCall;
310
310
  }
311
- export function emitToolResultUpdate(session, toolUseId, isError, rawContent, rawResult = rawContent, sourceMessageUuid) {
311
+ export function emitToolResultUpdate(session, toolUseId, isError, rawContent, rawResult = rawContent, sourceMessageUuid, nonExecutionMetadata) {
312
312
  const base = session.toolCalls.get(toolUseId);
313
313
  const baseToolName = toolNameFromMeta(base?.meta) ?? "";
314
314
  const fields = buildToolResultFields(isError, rawContent, base, rawResult, taskTitleContext(session, baseToolName, asRecordOrNull(base?.raw_input) ?? {}));
315
- if (!isError) {
315
+ applyToolNonExecutionMetadata(fields, nonExecutionMetadata);
316
+ if (!isError && !nonExecutionMetadata) {
316
317
  const taskId = backgroundToolLaunchTaskIdFromResult(baseToolName, rawResult, rawContent);
317
318
  if (taskId) {
318
319
  linkTaskToolUse(session, taskId, toolUseId);
319
320
  }
320
321
  }
321
322
  emitToolCallUpdate(session, toolUseId, fields, "result", sourceMessageUuid);
322
- applyTaskToolResult(session, toolUseId, isError, rawContent, rawResult);
323
+ applyTaskToolResult(session, toolUseId, isError || nonExecutionMetadata !== undefined, rawContent, rawResult);
323
324
  if (baseToolName === "Agent" || baseToolName === "Task") {
324
325
  const taskId = activeTaskIdForToolUse(session, toolUseId);
325
326
  if (taskId) {
@@ -528,7 +528,59 @@ function extractToolOutputMetadata(toolName, rawResult, rawContent) {
528
528
  }
529
529
  }
530
530
  }
531
- return metadata.bash || metadata.agent || metadata.web_fetch ? metadata : undefined;
531
+ if (toolName === "Skill") {
532
+ for (const candidate of candidates) {
533
+ if (candidate.background === true) {
534
+ metadata.skill = { background: true };
535
+ break;
536
+ }
537
+ }
538
+ }
539
+ return metadata.bash || metadata.agent || metadata.web_fetch || metadata.skill
540
+ ? metadata
541
+ : undefined;
542
+ }
543
+ export function parseToolNonExecutionMetadata(value) {
544
+ const byToolUseId = new Map();
545
+ if (!Array.isArray(value)) {
546
+ return byToolUseId;
547
+ }
548
+ for (const entry of value) {
549
+ const record = asRecordOrNull(entry);
550
+ const id = nonEmptyString(record?.id);
551
+ const kind = nonEmptyString(record?.non_execution_kind);
552
+ if (!id || !kind || byToolUseId.has(id)) {
553
+ continue;
554
+ }
555
+ const userFeedback = nonEmptyString(record?.user_feedback);
556
+ byToolUseId.set(id, {
557
+ kind,
558
+ ...(userFeedback ? { user_feedback: userFeedback } : {}),
559
+ });
560
+ }
561
+ return byToolUseId;
562
+ }
563
+ export function applyToolNonExecutionMetadata(fields, metadata) {
564
+ if (!metadata) {
565
+ return;
566
+ }
567
+ fields.output_metadata = {
568
+ ...(fields.output_metadata ?? {}),
569
+ non_execution: metadata,
570
+ };
571
+ switch (metadata.kind) {
572
+ case "user-rejected":
573
+ case "permission-rule":
574
+ case "automode-unavailable":
575
+ case "automode-parsing-error":
576
+ case "automode-blocked":
577
+ fields.status = "failed";
578
+ break;
579
+ case "cancelled":
580
+ case "interrupted":
581
+ fields.status = "killed";
582
+ break;
583
+ }
532
584
  }
533
585
  export function extractText(value) {
534
586
  if (typeof value === "string") {