UNPKG

giga-code

Version:

A personal AI CLI assistant powered by Grok for local development.

214 lines 12.6 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); const react_1 = __importStar(require("react")); const ink_1 = require("ink"); const prompts_1 = require("../../utils/prompts"); function PromptsList({ onClose, onSelectPrompt, selectedPrompt }) { const [prompts, setPrompts] = (0, react_1.useState)([]); const [allOptions, setAllOptions] = (0, react_1.useState)([]); const [selectedIndex, setSelectedIndex] = (0, react_1.useState)(0); const [showContent, setShowContent] = (0, react_1.useState)(false); const [justSelected, setJustSelected] = (0, react_1.useState)(null); const [showSuccessMessage, setShowSuccessMessage] = (0, react_1.useState)(false); (0, react_1.useEffect)(() => { const promptsData = (0, prompts_1.loadPrompts)(); setPrompts(promptsData); // Create options list with "None" option first, then all prompts const noneOption = { name: "GIGA (Default)", content: "Use default GIGA assistant prompt with file editing and coding tools", dateAdded: new Date().toISOString(), isNone: true }; const options = [noneOption, ...promptsData]; setAllOptions(options); // Set initial selected index based on current selected prompt if (selectedPrompt) { const promptIndex = promptsData.findIndex(p => p.name === selectedPrompt); if (promptIndex !== -1) { setSelectedIndex(promptIndex + 1); // +1 because None is first } } else { setSelectedIndex(0); // None is selected } }, [selectedPrompt]); (0, ink_1.useInput)((inputChar, key) => { if (key.ctrl && inputChar === "c") { onClose(); return; } if (key.escape) { if (showContent) { setShowContent(false); } else { onClose(); } return; } if (!showContent) { if (key.upArrow) { setSelectedIndex(prev => prev === 0 ? Math.max(0, allOptions.length - 1) : prev - 1); return; } if (key.downArrow) { setSelectedIndex(prev => allOptions.length === 0 ? 0 : (prev + 1) % allOptions.length); return; } if (key.return) { if (allOptions.length > 0 && selectedIndex < allOptions.length) { // Select this prompt const selected = allOptions[selectedIndex]; const promptName = 'isNone' in selected && selected.isNone ? null : selected.name; setJustSelected(promptName); setShowSuccessMessage(true); if (onSelectPrompt) { onSelectPrompt(promptName); } // Show success message briefly then close setTimeout(() => { onClose(); }, 1000); } return; } if (inputChar === ' ') { // Space to select if (allOptions.length > 0 && selectedIndex < allOptions.length) { const selected = allOptions[selectedIndex]; const promptName = 'isNone' in selected && selected.isNone ? null : selected.name; setJustSelected(promptName); setShowSuccessMessage(true); if (onSelectPrompt) { onSelectPrompt(promptName); } // Show success message briefly then close setTimeout(() => { onClose(); }, 1000); } return; } if (inputChar === 'v' || inputChar === 'V') { // 'v' to view content if (allOptions.length > 0 && selectedIndex < allOptions.length) { setShowContent(true); } return; } } }); if (showSuccessMessage) { const selectedName = justSelected || "GIGA (Default)"; return (react_1.default.createElement(ink_1.Box, { flexDirection: "column", paddingX: 2, paddingY: 1 }, react_1.default.createElement(ink_1.Text, { color: "green" }, "\u2705 System Prompt Changed!"), react_1.default.createElement(ink_1.Box, { marginBottom: 1, borderStyle: "round", borderColor: "green", paddingX: 1 }, react_1.default.createElement(ink_1.Text, { color: "green" }, "Now using: ", selectedName)), react_1.default.createElement(ink_1.Box, { marginTop: 1 }, react_1.default.createElement(ink_1.Text, { color: "gray", dimColor: true }, "Closing...")))); } if (allOptions.length <= 1) { // Only "GIGA" option exists return (react_1.default.createElement(ink_1.Box, { flexDirection: "column", paddingX: 2, paddingY: 1 }, react_1.default.createElement(ink_1.Text, { color: "yellow" }, "\uD83C\uDFAF Select System Prompt"), react_1.default.createElement(ink_1.Box, { marginBottom: 1 }, react_1.default.createElement(ink_1.Text, { color: "gray" }, "No custom prompts added. Using default GIGA assistant.")), react_1.default.createElement(ink_1.Box, { flexDirection: "column", marginBottom: 1 }, react_1.default.createElement(ink_1.Box, { borderStyle: "round", borderColor: "green", paddingX: 1 }, react_1.default.createElement(ink_1.Text, { color: "green" }, "\u25CF GIGA (Default)"))), react_1.default.createElement(ink_1.Box, { flexDirection: "column", marginTop: 1 }, react_1.default.createElement(ink_1.Text, { color: "gray", dimColor: true }, "\u2022 Press Space or Enter to confirm"), react_1.default.createElement(ink_1.Text, { color: "gray", dimColor: true }, "\u2022 Use /add-prompt to add custom system prompts"), react_1.default.createElement(ink_1.Text, { color: "gray", dimColor: true }, "\u2022 Custom prompts completely replace GIGA"), react_1.default.createElement(ink_1.Text, { color: "gray", dimColor: true }, "\u2022 Press Esc to close")))); } if (showContent) { const selectedOption = allOptions[selectedIndex]; const contentLines = selectedOption.content.split('\n'); return (react_1.default.createElement(ink_1.Box, { flexDirection: "column", paddingX: 2, paddingY: 1 }, react_1.default.createElement(ink_1.Text, { color: "yellow" }, "\uD83D\uDCDD Prompt: ", selectedOption.name), react_1.default.createElement(ink_1.Box, { marginBottom: 1 }, react_1.default.createElement(ink_1.Text, { color: "gray" }, 'isNone' in selectedOption && selectedOption.isNone ? "Default system prompt" : `Added: ${new Date(selectedOption.dateAdded).toLocaleDateString()}`)), react_1.default.createElement(ink_1.Box, { flexDirection: "column", borderStyle: "round", borderColor: "blue", paddingX: 1, marginBottom: 1, minHeight: 15 }, contentLines.map((line, index) => (react_1.default.createElement(ink_1.Text, { key: index }, line)))), react_1.default.createElement(ink_1.Box, { flexDirection: "column", marginTop: 1 }, react_1.default.createElement(ink_1.Text, { color: "gray", dimColor: true }, "\u2022 Press Space or Enter to select this prompt"), react_1.default.createElement(ink_1.Text, { color: "gray", dimColor: true }, "\u2022 Press Esc to go back to prompt list")))); } return (react_1.default.createElement(ink_1.Box, { flexDirection: "column", paddingX: 2, paddingY: 1 }, react_1.default.createElement(ink_1.Text, { color: "yellow" }, "\uD83C\uDFAF Select System Prompt"), react_1.default.createElement(ink_1.Box, { marginBottom: 1 }, react_1.default.createElement(ink_1.Text, { color: "gray" }, "Current: ", selectedPrompt || "GIGA (Default)")), react_1.default.createElement(ink_1.Box, { flexDirection: "column", marginBottom: 1 }, allOptions.map((option, index) => { const isSelected = index === selectedIndex; const isCurrentlyActive = selectedPrompt === option.name || (!selectedPrompt && 'isNone' in option && option.isNone); const dateAdded = 'isNone' in option && option.isNone ? "Default" : new Date(option.dateAdded).toLocaleDateString(); const preview = option.content.length > 80 ? option.content.substring(0, 80) + "..." : option.content; // Color coding: green for currently active, blue for selected, gray for others let borderColor = "gray"; let textColor = "white"; if (isCurrentlyActive) { borderColor = "green"; textColor = "green"; } else if (isSelected) { borderColor = "blue"; textColor = "blue"; } return (react_1.default.createElement(ink_1.Box, { key: option.name, borderStyle: "round", borderColor: borderColor, paddingX: 1, marginBottom: 1 }, react_1.default.createElement(ink_1.Box, { flexDirection: "column", width: "100%" }, react_1.default.createElement(ink_1.Box, null, react_1.default.createElement(ink_1.Box, { width: 25 }, react_1.default.createElement(ink_1.Text, { color: textColor }, isCurrentlyActive ? "● " : isSelected ? "▶ " : "○ ", option.name)), react_1.default.createElement(ink_1.Box, { flexGrow: 1 }, react_1.default.createElement(ink_1.Text, { color: "gray", dimColor: true }, dateAdded))), react_1.default.createElement(ink_1.Box, { marginTop: 1 }, react_1.default.createElement(ink_1.Text, { color: "gray", dimColor: true }, preview.replace(/\n/g, ' ')))))); })), react_1.default.createElement(ink_1.Box, { flexDirection: "column", marginTop: 1 }, react_1.default.createElement(ink_1.Text, { color: "gray", dimColor: true }, "\u2022 Use \u2191/\u2193 arrows to navigate"), react_1.default.createElement(ink_1.Text, { color: "gray", dimColor: true }, "\u2022 Press Space or Enter to select prompt"), react_1.default.createElement(ink_1.Text, { color: "gray", dimColor: true }, "\u2022 Press V to view full content"), react_1.default.createElement(ink_1.Text, { color: "gray", dimColor: true }, "\u2022 Custom prompts completely replace GIGA"), react_1.default.createElement(ink_1.Text, { color: "green", dimColor: true }, "\u2022 Green = Currently active prompt"), react_1.default.createElement(ink_1.Text, { color: "blue", dimColor: true }, "\u2022 Blue = Currently selected option"), react_1.default.createElement(ink_1.Text, { color: "gray", dimColor: true }, "\u2022 Press Esc to close")))); } exports.default = PromptsList; //# sourceMappingURL=prompts-list.js.map