UNPKG

sensai

Version:

Because even AI needs a master

152 lines (151 loc) 6.49 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "default", { enumerable: true, get: function() { return _default; } }); const _react = /*#__PURE__*/ _interop_require_wildcard(require("react")); const _constants = require("../../constants"); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interop_require_wildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = { __proto__: null }; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for(var key in obj){ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } const _default = async (mode, port)=>{ const { render, Box, Text, Newline, useInput, useStdout } = await import("ink"); const { default: TextInput } = await import("ink-text-input"); const { default: Spinner } = await import("ink-spinner"); const Welcome = ()=>{ const { stdout } = useStdout(); return /*#__PURE__*/ _react.default.createElement(Box, { flexDirection: "column" }, /*#__PURE__*/ _react.default.createElement(Box, { borderStyle: "round", borderColor: "magenta", alignSelf: "flex-start" }, /*#__PURE__*/ _react.default.createElement(Text, null, " ", /*#__PURE__*/ _react.default.createElement(Text, { color: "magenta", bold: true }, "✱"), " ", "Welcome to ", /*#__PURE__*/ _react.default.createElement(Text, { bold: true }, "Sensai"), /*#__PURE__*/ _react.default.createElement(Newline, null), /*#__PURE__*/ _react.default.createElement(Newline, null), " ", /*#__PURE__*/ _react.default.createElement(Text, { color: "gray" }, "mode:"), " ", /*#__PURE__*/ _react.default.createElement(Text, { color: "brightWhite" }, mode), " ", /*#__PURE__*/ _react.default.createElement(Newline, null), " ", /*#__PURE__*/ _react.default.createElement(Text, { color: "gray" }, "dev:"), " ", /*#__PURE__*/ _react.default.createElement(Text, { color: "brightWhite" }, "http://localhost:", port, "/api"), " ", /*#__PURE__*/ _react.default.createElement(Newline, null), " ", /*#__PURE__*/ _react.default.createElement(Text, { color: "gray" }, "cwd: ", process.cwd(), " ")))); }; const AgentInput = ()=>{ const [isThinking, setIsThinking] = (0, _react.useState)(false); const [logs, setLogs] = (0, _react.useState)([]); const [input, setInput] = (0, _react.useState)(""); const [showShortcuts, setShowShortcuts] = (0, _react.useState)(false); const sendMessage = async (message)=>{ setIsThinking(true); try { const response = await fetch(`http://localhost:${port}/api`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ prompt: message }) }); setIsThinking(false); for await (const chunk of response.body){ const data = new TextDecoder().decode(chunk); setLogs((prevLogs)=>{ const arr = [ ...prevLogs ]; const last = arr.pop() || ""; return [ ...arr, last + data ]; }); } } catch (error) { setIsThinking(false); } }; useInput((inputKey, key)=>{ if (key.return) { setInput(""); sendMessage(input); } }); return /*#__PURE__*/ _react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/ _react.default.createElement(Box, { flexDirection: "column", padding: 1 }, /*#__PURE__*/ _react.default.createElement(Box, { flexDirection: "column" }, logs.map((log, index)=>/*#__PURE__*/ _react.default.createElement(Text, { key: index }, log)))), /*#__PURE__*/ _react.default.createElement(Box, { flexDirection: "column" }, /*#__PURE__*/ _react.default.createElement(Box, { borderStyle: "round", borderColor: "cyan" }, /*#__PURE__*/ _react.default.createElement(Text, { color: "brightWhite" }, " ", isThinking ? /*#__PURE__*/ _react.default.createElement(Spinner, { type: "dots" }) : ">", " "), /*#__PURE__*/ _react.default.createElement(TextInput, { value: input, onChange: (char)=>{ const isQuestionMark = char === "?"; if (!isQuestionMark) setInput(char); setShowShortcuts(isQuestionMark); }, placeholder: isThinking ? "Thinking..." : "Type something..." })))); }; render(/*#__PURE__*/ _react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/ _react.default.createElement(Welcome, null), mode === _constants.SENSAI_MODE.AGENT && /*#__PURE__*/ _react.default.createElement(AgentInput, null))); };