logggai
Version:
AI-powered CLI for transforming your development work into professional content
157 lines • 5.34 kB
JavaScript
"use strict";
// TODO: Factoriser prompts, AI, publication, contextes pour post/sync
Object.defineProperty(exports, "__esModule", { value: true });
exports.syncProjectFlow = syncProjectFlow;
exports.promptForAIEnhance = promptForAIEnhance;
exports.promptForPromptStyle = promptForPromptStyle;
exports.generateCommitContent = generateCommitContent;
exports.handleSocialPublishing = handleSocialPublishing;
const inquirer_1 = require("inquirer");
const chalk = require("chalk");
const api_1 = require("./api");
async function syncProjectFlow(options) {
// À compléter
}
async function promptForAIEnhance(commit) {
const { useAI } = await inquirer_1.default.prompt([
{
type: 'confirm',
name: 'useAI',
message: 'With AI enhancement for this commit?',
default: true
}
]);
return useAI;
}
async function promptForPromptStyle() {
// Fetch available prompts from API
let prompts = [];
try {
const data = await api_1.apiClient.getPrompts();
prompts = data.prompts || [];
}
catch (err) {
prompts = [];
}
if (!prompts.length) {
return null;
}
const { promptId } = await inquirer_1.default.prompt([
{
type: 'list',
name: 'promptId',
message: 'Choose AI prompt style:',
choices: prompts.map((p) => ({ name: p.name, value: p.id }))
}
]);
return promptId;
}
async function generateCommitContent(commit, useAI, promptId) {
let content = commit.message;
if (useAI && promptId) {
// Générer avec AI
try {
const aiResult = await api_1.apiClient.createPost({
title: commit.message,
content: commit.message,
useAI: true,
promptId
});
content = aiResult?.post?.content || commit.message;
}
catch (err) {
console.log(chalk.default.red('AI generation failed, using original message.'));
content = commit.message;
}
}
// Harmonisation UX : proposer choix d'édition (inline ou éditeur)
const { editMode } = await inquirer_1.default.prompt([
{
type: 'list',
name: 'editMode',
message: 'How would you like to edit the generated content?',
choices: [
{ name: 'Type directly here', value: 'inline' },
{ name: 'Open in editor (nano/vim/VS Code)', value: 'editor' }
],
default: 'inline'
}
]);
let editedContent = content;
if (editMode === 'inline') {
const { inlineContent } = await inquirer_1.default.prompt([
{
type: 'input',
name: 'inlineContent',
message: 'Edit content:',
default: content,
validate: (input) => {
if (!input.trim()) {
return 'Content is required';
}
if (input.length > 8000) {
return 'Content is too long (max 8k characters)';
}
return true;
}
}
]);
editedContent = inlineContent;
}
else {
// Proposer le choix de l'éditeur
const { editor } = await inquirer_1.default.prompt([
{
type: 'list',
name: 'editor',
message: 'Choose your editor:',
choices: [
{ name: 'nano (simple and beginner-friendly)', value: 'nano' },
{ name: 'VS Code (if installed)', value: 'code --wait' },
{ name: 'vim (advanced)', value: 'vim' },
{ name: 'System default', value: null }
],
default: 'nano'
}
]);
// Sauvegarder l'éditeur système original
const originalEditor = process.env.EDITOR;
if (editor) {
process.env.EDITOR = editor;
}
try {
const { editorContent } = await inquirer_1.default.prompt([
{
type: 'editor',
name: 'editorContent',
message: 'Edit generated content (save & close editor to continue):',
default: content,
validate: (input) => {
if (!input.trim()) {
return 'Content is required';
}
if (input.length > 8000) {
return 'Content is too long (max 8k characters)';
}
return true;
}
}
]);
editedContent = editorContent;
}
finally {
// Restaurer l'éditeur système original
if (originalEditor) {
process.env.EDITOR = originalEditor;
}
else {
delete process.env.EDITOR;
}
}
}
return editedContent;
}
async function handleSocialPublishing(postIds) {
// À compléter : publication sur intégrations sociales
}
//# sourceMappingURL=sync-helpers.js.map