UNPKG

sensai

Version:

Because even AI needs a master

152 lines (151 loc) 7.68 kB
#!/usr/bin/env node "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "default", { enumerable: true, get: function() { return _default; } }); const _commander = /*#__PURE__*/ _interop_require_wildcard(require("commander")); const _react = /*#__PURE__*/ _interop_require_wildcard(require("react")); 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; } // CLI Component const terminal = async ()=>{ const { render, Box, Text, Newline, useInput } = await import('ink'); const { default: TextInput } = await import('ink-text-input'); const Welcome = ()=>{ 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" }, "agent"), ' ', /*#__PURE__*/ _react.default.createElement(Newline, null), /*#__PURE__*/ _react.default.createElement(Newline, null), ' ', /*#__PURE__*/ _react.default.createElement(Text, { color: "gray" }, "dev:"), ' ', /*#__PURE__*/ _react.default.createElement(Text, { color: "brightWhite" }, "http://localhost:3030/api"), ' ', /*#__PURE__*/ _react.default.createElement(Newline, null), ' ', /*#__PURE__*/ _react.default.createElement(Text, { color: "gray" }, "doc:"), ' ', /*#__PURE__*/ _react.default.createElement(Text, { color: "brightWhite" }, "http://localhost:3030/doc"), ' ', /*#__PURE__*/ _react.default.createElement(Newline, null), ' ', /*#__PURE__*/ _react.default.createElement(Text, { color: "gray" }, "cwd: ", process.cwd(), ' '))), /*#__PURE__*/ _react.default.createElement(Box, { padding: 1 }, /*#__PURE__*/ _react.default.createElement(Text, { color: "gray" }, "Tips for getting started:", /*#__PURE__*/ _react.default.createElement(Newline, null), /*#__PURE__*/ _react.default.createElement(Newline, null), "1. /help for help", /*#__PURE__*/ _react.default.createElement(Newline, null), "2. Use Sensai to help with file analysis, editing, bash commands and git", /*#__PURE__*/ _react.default.createElement(Newline, null), "3. Be as specific as you would with another engineer for the best results", /*#__PURE__*/ _react.default.createElement(Newline, null), "4. /deploy to deploy"))); }; const CLI = ()=>{ const [logs, setLogs] = (0, _react.useState)([]); const [input, setInput] = (0, _react.useState)(''); const [showShortcuts, setShowShortcuts] = (0, _react.useState)(false); // useInput((inputKey, key) => { // if (key.return) { // setLogs((prevLogs) => [...prevLogs, input]); // setInput(''); // } else if (key.backspace) { // setInput((prevInput) => prevInput.slice(0, -1)); // } else { // setInput((prevInput) => prevInput + inputKey); // } // }); useInput((inputKey, key)=>{ if (key.return) { setInput(''); setLogs((prevLogs)=>[ ...prevLogs, 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, { flexDirection: "column" }, /*#__PURE__*/ _react.default.createElement(Text, null, "command output"))), /*#__PURE__*/ _react.default.createElement(Box, { flexDirection: "column", marginTop: 1 }, /*#__PURE__*/ _react.default.createElement(Box, { borderStyle: "round", borderColor: "cyan" }, /*#__PURE__*/ _react.default.createElement(Text, { color: "brightWhite" }, " > "), /*#__PURE__*/ _react.default.createElement(TextInput, { value: input, onChange: (char)=>{ const isQuestionMark = char === '?'; if (!isQuestionMark) setInput(char); setShowShortcuts(isQuestionMark); }, placeholder: 'Try "build"' })), /*#__PURE__*/ _react.default.createElement(Box, null, showShortcuts ? /*#__PURE__*/ _react.default.createElement(Text, { color: "gray" }, ' ', "! for bash mode double tap esc to undo", /*#__PURE__*/ _react.default.createElement(Newline, null), ' ', "/ for commands shift + tab to auto-accept edits", /*#__PURE__*/ _react.default.createElement(Newline, null)) : /*#__PURE__*/ _react.default.createElement(Text, { color: "gray" }, " ? for shortcuts"), /*#__PURE__*/ _react.default.createElement(Text, null, ' ', /*#__PURE__*/ _react.default.createElement(Newline, null), '')))); }; render(/*#__PURE__*/ _react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/ _react.default.createElement(Welcome, null), /*#__PURE__*/ _react.default.createElement(CLI, null))); }; const _default = new _commander.Command().command('tmp').description('Interactive CLI with Claude-like interface').action(async ()=>{ await terminal(); });