Filehigh importancesource

UserToolErrorMessage.tsx

components/messages/UserToolResultMessage/UserToolErrorMessage.tsx

103
Lines
12222
Bytes
1
Exports
14
Imports
10
Keywords

What this is

This page documents one file from the repository and includes its full source so you can read it without leaving the docs site.

Beginner explanation

This file is one piece of the larger system. Its name, directory, imports, and exports show where it fits. Start by reading the exports and related files first.

How it is used

Start from the exports list and related files. Those are the easiest clues for where this file fits into the system.

Expert explanation

Architecturally, this file intersects with tool-system, ui-flow. It contains 103 lines, 14 detected imports, and 1 detected exports.

Important relationships

Detected exports

  • UserToolErrorMessage

Keywords

paramcontenttooltoolsverbosereactmessageresponseprogressmessagesformessageelseistranscriptmode

Detected imports

  • react/compiler-runtime
  • bun:bundle
  • @anthropic-ai/sdk/resources/index.mjs
  • react
  • ../../../constants/figures.js
  • ../../../ink.js
  • ../../../Tool.js
  • ../../../types/message.js
  • ../../../utils/messages.js
  • ../../FallbackToolUseErrorMessage.js
  • ../../InterruptedByUser.js
  • ../../MessageResponse.js
  • ./RejectedPlanMessage.js
  • ./RejectedToolUseMessage.js

Source notes

This page embeds the full file contents. Small or leaf files are still indexed honestly instead of being over-explained.

Open parent directory

Full source

import { c as _c } from "react/compiler-runtime";
import { feature } from 'bun:bundle';
import type { ToolResultBlockParam } from '@anthropic-ai/sdk/resources/index.mjs';
import * as React from 'react';
import { BULLET_OPERATOR } from '../../../constants/figures.js';
import { Text } from '../../../ink.js';
import { filterToolProgressMessages, type Tool, type Tools } from '../../../Tool.js';
import type { ProgressMessage } from '../../../types/message.js';
import { INTERRUPT_MESSAGE_FOR_TOOL_USE, isClassifierDenial, PLAN_REJECTION_PREFIX, REJECT_MESSAGE_WITH_REASON_PREFIX } from '../../../utils/messages.js';
import { FallbackToolUseErrorMessage } from '../../FallbackToolUseErrorMessage.js';
import { InterruptedByUser } from '../../InterruptedByUser.js';
import { MessageResponse } from '../../MessageResponse.js';
import { RejectedPlanMessage } from './RejectedPlanMessage.js';
import { RejectedToolUseMessage } from './RejectedToolUseMessage.js';
type Props = {
  progressMessagesForMessage: ProgressMessage[];
  tool?: Tool; // undefined when resuming an old conversation that uses an old tool
  tools: Tools;
  param: ToolResultBlockParam;
  verbose: boolean;
  isTranscriptMode?: boolean;
};
export function UserToolErrorMessage(t0) {
  const $ = _c(14);
  const {
    progressMessagesForMessage,
    tool,
    tools,
    param,
    verbose,
    isTranscriptMode
  } = t0;
  if (typeof param.content === "string" && param.content.includes(INTERRUPT_MESSAGE_FOR_TOOL_USE)) {
    let t1;
    if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
      t1 = <MessageResponse height={1}><InterruptedByUser /></MessageResponse>;
      $[0] = t1;
    } else {
      t1 = $[0];
    }
    return t1;
  }
  if (typeof param.content === "string" && param.content.startsWith(PLAN_REJECTION_PREFIX)) {
    let t1;
    if ($[1] !== param.content) {
      t1 = param.content.substring(PLAN_REJECTION_PREFIX.length);
      $[1] = param.content;
      $[2] = t1;
    } else {
      t1 = $[2];
    }
    const planContent = t1;
    let t2;
    if ($[3] !== planContent) {
      t2 = <RejectedPlanMessage plan={planContent} />;
      $[3] = planContent;
      $[4] = t2;
    } else {
      t2 = $[4];
    }
    return t2;
  }
  if (typeof param.content === "string" && param.content.startsWith(REJECT_MESSAGE_WITH_REASON_PREFIX)) {
    let t1;
    if ($[5] === Symbol.for("react.memo_cache_sentinel")) {
      t1 = <RejectedToolUseMessage />;
      $[5] = t1;
    } else {
      t1 = $[5];
    }
    return t1;
  }
  if (feature("TRANSCRIPT_CLASSIFIER") && typeof param.content === "string" && isClassifierDenial(param.content)) {
    let t1;
    if ($[6] === Symbol.for("react.memo_cache_sentinel")) {
      t1 = <MessageResponse height={1}><Text dimColor={true}>Denied by auto mode classifier {BULLET_OPERATOR} /feedback if incorrect</Text></MessageResponse>;
      $[6] = t1;
    } else {
      t1 = $[6];
    }
    return t1;
  }
  let t1;
  if ($[7] !== isTranscriptMode || $[8] !== param.content || $[9] !== progressMessagesForMessage || $[10] !== tool || $[11] !== tools || $[12] !== verbose) {
    t1 = tool?.renderToolUseErrorMessage?.(param.content, {
      progressMessagesForMessage: filterToolProgressMessages(progressMessagesForMessage),
      tools,
      verbose,
      isTranscriptMode
    }) ?? <FallbackToolUseErrorMessage result={param.content} verbose={verbose} />;
    $[7] = isTranscriptMode;
    $[8] = param.content;
    $[9] = progressMessagesForMessage;
    $[10] = tool;
    $[11] = tools;
    $[12] = verbose;
    $[13] = t1;
  } else {
    t1 = $[13];
  }
  return t1;
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmZWF0dXJlIiwiVG9vbFJlc3VsdEJsb2NrUGFyYW0iLCJSZWFjdCIsIkJVTExFVF9PUEVSQVRPUiIsIlRleHQiLCJmaWx0ZXJUb29sUHJvZ3Jlc3NNZXNzYWdlcyIsIlRvb2wiLCJUb29scyIsIlByb2dyZXNzTWVzc2FnZSIsIklOVEVSUlVQVF9NRVNTQUdFX0ZPUl9UT09MX1VTRSIsImlzQ2xhc3NpZmllckRlbmlhbCIsIlBMQU5fUkVKRUNUSU9OX1BSRUZJWCIsIlJFSkVDVF9NRVNTQUdFX1dJVEhfUkVBU09OX1BSRUZJWCIsIkZhbGxiYWNrVG9vbFVzZUVycm9yTWVzc2FnZSIsIkludGVycnVwdGVkQnlVc2VyIiwiTWVzc2FnZVJlc3BvbnNlIiwiUmVqZWN0ZWRQbGFuTWVzc2FnZSIsIlJlamVjdGVkVG9vbFVzZU1lc3NhZ2UiLCJQcm9wcyIsInByb2dyZXNzTWVzc2FnZXNGb3JNZXNzYWdlIiwidG9vbCIsInRvb2xzIiwicGFyYW0iLCJ2ZXJib3NlIiwiaXNUcmFuc2NyaXB0TW9kZSIsIlVzZXJUb29sRXJyb3JNZXNzYWdlIiwidDAiLCIkIiwiX2MiLCJjb250ZW50IiwiaW5jbHVkZXMiLCJ0MSIsIlN5bWJvbCIsImZvciIsInN0YXJ0c1dpdGgiLCJzdWJzdHJpbmciLCJsZW5ndGgiLCJwbGFuQ29udGVudCIsInQyIiwicmVuZGVyVG9vbFVzZUVycm9yTWVzc2FnZSJdLCJzb3VyY2VzIjpbIlVzZXJUb29sRXJyb3JNZXNzYWdlLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmZWF0dXJlIH0gZnJvbSAnYnVuOmJ1bmRsZSdcbmltcG9ydCB0eXBlIHsgVG9vbFJlc3VsdEJsb2NrUGFyYW0gfSBmcm9tICdAYW50aHJvcGljLWFpL3Nkay9yZXNvdXJjZXMvaW5kZXgubWpzJ1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBCVUxMRVRfT1BFUkFUT1IgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvZmlndXJlcy5qcydcbmltcG9ydCB7IFRleHQgfSBmcm9tICcuLi8uLi8uLi9pbmsuanMnXG5pbXBvcnQge1xuICBmaWx0ZXJUb29sUHJvZ3Jlc3NNZXNzYWdlcyxcbiAgdHlwZSBUb29sLFxuICB0eXBlIFRvb2xzLFxufSBmcm9tICcuLi8uLi8uLi9Ub29sLmpzJ1xuaW1wb3J0IHR5cGUgeyBQcm9ncmVzc01lc3NhZ2UgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9tZXNzYWdlLmpzJ1xuaW1wb3J0IHtcbiAgSU5URVJSVVBUX01FU1NBR0VfRk9SX1RPT0xfVVNFLFxuICBpc0NsYXNzaWZpZXJEZW5pYWwsXG4gIFBMQU5fUkVKRUNUSU9OX1BSRUZJWCxcbiAgUkVKRUNUX01FU1NBR0VfV0lUSF9SRUFTT05fUFJFRklYLFxufSBmcm9tICcuLi8uLi8uLi91dGlscy9tZXNzYWdlcy5qcydcbmltcG9ydCB7IEZhbGxiYWNrVG9vbFVzZUVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL0ZhbGxiYWNrVG9vbFVzZUVycm9yTWVzc2FnZS5qcydcbmltcG9ydCB7IEludGVycnVwdGVkQnlVc2VyIH0gZnJvbSAnLi4vLi4vSW50ZXJydXB0ZWRCeVVzZXIuanMnXG5pbXBvcnQgeyBNZXNzYWdlUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9NZXNzYWdlUmVzcG9uc2UuanMnXG5pbXBvcnQgeyBSZWplY3RlZFBsYW5NZXNzYWdlIH0gZnJvbSAnLi9SZWplY3RlZFBsYW5NZXNzYWdlLmpzJ1xuaW1wb3J0IHsgUmVqZWN0ZWRUb29sVXNlTWVzc2FnZSB9IGZyb20gJy4vUmVqZWN0ZWRUb29sVXNlTWVzc2FnZS5qcydcblxudHlwZSBQcm9wcyA9IHtcbiAgcHJvZ3Jlc3NNZXNzYWdlc0Zvck1lc3NhZ2U6IFByb2dyZXNzTWVzc2FnZVtdXG4gIHRvb2w/OiBUb29sIC8vIHVuZGVmaW5lZCB3aGVuIHJlc3VtaW5nIGFuIG9sZCBjb252ZXJzYXRpb24gdGhhdCB1c2VzIGFuIG9sZCB0b29sXG4gIHRvb2xzOiBUb29sc1xuICBwYXJhbTogVG9vbFJlc3VsdEJsb2NrUGFyYW1cbiAgdmVyYm9zZTogYm9vbGVhblxuICBpc1RyYW5zY3JpcHRNb2RlPzogYm9vbGVhblxufVxuXG5leHBvcnQgZnVuY3Rpb24gVXNlclRvb2xFcnJvck1lc3NhZ2Uoe1xuICBwcm9ncmVzc01lc3NhZ2VzRm9yTWVzc2FnZSxcbiAgdG9vbCxcbiAgdG9vbHMsXG4gIHBhcmFtLFxuICB2ZXJib3NlLFxuICBpc1RyYW5zY3JpcHRNb2RlLFxufTogUHJvcHMpOiBSZWFjdC5SZWFjdE5vZGUge1xuICBpZiAoXG4gICAgdHlwZW9mIHBhcmFtLmNvbnRlbnQgPT09ICdzdHJpbmcnICYmXG4gICAgcGFyYW0uY29udGVudC5pbmNsdWRlcyhJTlRFUlJVUFRfTUVTU0FHRV9GT1JfVE9PTF9VU0UpXG4gICkge1xuICAgIHJldHVybiAoXG4gICAgICA8TWVzc2FnZVJlc3BvbnNlIGhlaWdodD17MX0+XG4gICAgICAgIDxJbnRlcnJ1cHRlZEJ5VXNlciAvPlxuICAgICAgPC9NZXNzYWdlUmVzcG9uc2U+XG4gICAgKVxuICB9XG5cbiAgaWYgKFxuICAgIHR5cGVvZiBwYXJhbS5jb250ZW50ID09PSAnc3RyaW5nJyAmJlxuICAgIHBhcmFtLmNvbnRlbnQuc3RhcnRzV2l0aChQTEFOX1JFSkVDVElPTl9QUkVGSVgpXG4gICkge1xuICAgIC8vIEV4dHJhY3QgdGhlIHBsYW4gY29udGVudCBmcm9tIHRoZSBlcnJvciBtZXNzYWdlXG4gICAgY29uc3QgcGxhbkNvbnRlbnQgPSBwYXJhbS5jb250ZW50LnN1YnN0cmluZyhQTEFOX1JFSkVDVElPTl9QUkVGSVgubGVuZ3RoKVxuICAgIHJldHVybiA8UmVqZWN0ZWRQbGFuTWVzc2FnZSBwbGFuPXtwbGFuQ29udGVudH0gLz5cbiAgfVxuXG4gIGlmIChcbiAgICB0eXBlb2YgcGFyYW0uY29udGVudCA9PT0gJ3N0cmluZycgJiZcbiAgICBwYXJhbS5jb250ZW50LnN0YXJ0c1dpdGgoUkVKRUNUX01FU1NBR0VfV0lUSF9SRUFTT05fUFJFRklYKVxuICApIHtcbiAgICByZXR1cm4gPFJlamVjdGVkVG9vbFVzZU1lc3NhZ2UgLz5cbiAgfVxuXG4gIGlmIChcbiAgICBmZWF0dXJlKCdUUkFOU0NSSVBUX0NMQVNTSUZJRVInKSAmJlxuICAgIHR5cGVvZiBwYXJhbS5jb250ZW50ID09PSAnc3RyaW5nJyAmJlxuICAgIGlzQ2xhc3NpZmllckRlbmlhbChwYXJhbS5jb250ZW50KVxuICApIHtcbiAgICByZXR1cm4gKFxuICAgICAgPE1lc3NhZ2VSZXNwb25zZSBoZWlnaHQ9ezF9PlxuICAgICAgICA8VGV4dCBkaW1Db2xvcj5cbiAgICAgICAgICBEZW5pZWQgYnkgYXV0byBtb2RlIGNsYXNzaWZpZXIge0JVTExFVF9PUEVSQVRPUn0gL2ZlZWRiYWNrIGlmXG4gICAgICAgICAgaW5jb3JyZWN0XG4gICAgICAgIDwvVGV4dD5cbiAgICAgIDwvTWVzc2FnZVJlc3BvbnNlPlxuICAgIClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgdG9vbD8ucmVuZGVyVG9vbFVzZUVycm9yTWVzc2FnZT8uKHBhcmFtLmNvbnRlbnQsIHtcbiAgICAgIHByb2dyZXNzTWVzc2FnZXNGb3JNZXNzYWdlOiBmaWx0ZXJUb29sUHJvZ3Jlc3NNZXNzYWdlcyhcbiAgICAgICAgcHJvZ3Jlc3NNZXNzYWdlc0Zvck1lc3NhZ2UsXG4gICAgICApLFxuICAgICAgdG9vbHMsXG4gICAgICB2ZXJib3NlLFxuICAgICAgaXNUcmFuc2NyaXB0TW9kZSxcbiAgICB9KSA/PyAoXG4gICAgICA8RmFsbGJhY2tUb29sVXNlRXJyb3JNZXNzYWdlIHJlc3VsdD17cGFyYW0uY29udGVudH0gdmVyYm9zZT17dmVyYm9zZX0gLz5cbiAgICApXG4gIClcbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBLFNBQVNBLE9BQU8sUUFBUSxZQUFZO0FBQ3BDLGNBQWNDLG9CQUFvQixRQUFRLHVDQUF1QztBQUNqRixPQUFPLEtBQUtDLEtBQUssTUFBTSxPQUFPO0FBQzlCLFNBQVNDLGVBQWUsUUFBUSwrQkFBK0I7QUFDL0QsU0FBU0MsSUFB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