pyb-ts
Version:
PYB-CLI - Minimal AI Agent with multi-model support and CLI interface
91 lines (90 loc) • 2.92 kB
JavaScript
import { Box, Text } from "ink";
import * as React from "react";
import { z } from "zod";
import { FallbackToolUseRejectedMessage } from "@components/FallbackToolUseRejectedMessage";
import { getTheme } from "@utils/theme";
import { DESCRIPTION, PROMPT } from "./prompt.js";
import { OutputLine } from "@tools/BashTool/OutputLine";
const inputSchema = z.object({}).passthrough();
const MCPTool = {
async isEnabled() {
return true;
},
isReadOnly() {
return false;
},
isConcurrencySafe() {
return false;
},
// Overridden in mcpClient.ts
name: "mcp",
// Overridden in mcpClient.ts
async description() {
return DESCRIPTION;
},
// Overridden in mcpClient.ts
async prompt() {
return PROMPT;
},
inputSchema,
// Overridden in mcpClient.ts
async *call() {
yield {
type: "result",
data: "",
resultForAssistant: ""
};
},
needsPermissions() {
return true;
},
renderToolUseMessage(input) {
return Object.entries(input).map(([key, value]) => `${key}: ${JSON.stringify(value)}`).join(", ");
},
// Overridden in mcpClient.ts
userFacingName: () => "mcp",
renderToolUseRejectedMessage() {
return /* @__PURE__ */ React.createElement(FallbackToolUseRejectedMessage, null);
},
renderToolResultMessage(output) {
const verbose = false;
if (Array.isArray(output)) {
return /* @__PURE__ */ React.createElement(Box, { flexDirection: "column" }, output.map((item, i) => {
if (item.type === "image") {
return /* @__PURE__ */ React.createElement(
Box,
{
key: i,
justifyContent: "space-between",
overflowX: "hidden",
width: "100%"
},
/* @__PURE__ */ React.createElement(Box, { flexDirection: "row" }, /* @__PURE__ */ React.createElement(Text, null, "\xA0\xA0\uFFFD\uFFFD?\xA0"), /* @__PURE__ */ React.createElement(Text, null, "[Image]"))
);
}
const lines2 = item.text.split("\n").length;
return /* @__PURE__ */ React.createElement(
OutputLine,
{
key: i,
content: item.text,
lines: lines2,
verbose
}
);
}));
}
if (!output) {
return /* @__PURE__ */ React.createElement(Box, { justifyContent: "space-between", overflowX: "hidden", width: "100%" }, /* @__PURE__ */ React.createElement(Box, { flexDirection: "row" }, /* @__PURE__ */ React.createElement(Text, null, "\xA0\xA0\uFFFD\uFFFD?\xA0"), /* @__PURE__ */ React.createElement(Text, { color: getTheme().secondaryText }, "(No content)")));
}
const lines = output.split("\n").length;
return /* @__PURE__ */ React.createElement(OutputLine, { content: output, lines, verbose });
},
renderResultForAssistant(content) {
return content;
}
};
export {
MCPTool
};
//# sourceMappingURL=MCPTool.js.map