sensai
Version:
Because even AI needs a master
152 lines (151 loc) • 7.68 kB
JavaScript
;
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();
});