Skip to content

Commit 0de84cd

Browse files
authored
Merge pull request #218 from beNative/codex/automatically-generate-node-title-with-ai
Auto-generate clipboard import titles when LLM connected
2 parents 39ac100 + 84d5b6a commit 0de84cd

1 file changed

Lines changed: 24 additions & 1 deletion

File tree

App.tsx

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import { IconProvider } from './contexts/IconContext';
3535
import { storageService } from './services/storageService';
3636
import { exportDocumentToFile } from './services/documentExportService';
3737
import { llmDiscoveryService } from './services/llmDiscoveryService';
38+
import { llmService } from './services/llmService';
3839
import { LOCAL_STORAGE_KEYS, DEFAULT_SETTINGS } from './constants';
3940
import { repository, type RepositoryStartupTiming } from './services/repository';
4041
import { DocumentNode } from './components/PromptTreeItem';
@@ -1725,6 +1726,28 @@ export const MainApp: React.FC = () => {
17251726
setDocumentView('editor');
17261727
setView('editor');
17271728

1729+
const shouldAutoGenerateTitle =
1730+
Boolean(settings.llmProviderUrl && settings.llmModelName) &&
1731+
settings.apiType !== 'unknown' &&
1732+
llmStatus === 'connected';
1733+
1734+
if (shouldAutoGenerateTitle) {
1735+
void (async () => {
1736+
try {
1737+
addLog('INFO', 'Auto-generating clipboard document title using local LLM.');
1738+
const generatedTitle = await llmService.generateTitle(text, settings, addLog);
1739+
const cleanedTitle = generatedTitle.trim();
1740+
if (cleanedTitle.length > 0) {
1741+
await updateItem(newDoc.id, { title: cleanedTitle });
1742+
addLog('INFO', `Applied AI-generated title "${cleanedTitle}" to clipboard document.`);
1743+
}
1744+
} catch (err) {
1745+
const message = err instanceof Error ? err.message : 'Unknown error';
1746+
addLog('ERROR', `Automatic title generation failed: ${message}`);
1747+
}
1748+
})();
1749+
}
1750+
17281751
const detectedLanguage = summary.languageHint ?? 'unknown';
17291752
const mimeDescriptor = mimeType ?? 'text/plain';
17301753
addLog(
@@ -1764,7 +1787,7 @@ export const MainApp: React.FC = () => {
17641787
message: `Something went wrong while importing from the clipboard: ${message}`,
17651788
});
17661789
}
1767-
}, [createDocumentFromClipboard, getParentIdForNewItem, ensureNodeVisible, activateDocumentTab, setSelectedIds, setLastClickedId, setActiveTemplateId, setDocumentView, setView, addLog]);
1790+
}, [createDocumentFromClipboard, getParentIdForNewItem, ensureNodeVisible, activateDocumentTab, setSelectedIds, setLastClickedId, setActiveTemplateId, setDocumentView, setView, addLog, settings, llmStatus, updateItem]);
17681791

17691792
const handleNewCodeFile = useCallback(async (filename: string) => {
17701793
addLog('INFO', `User action: Create New Code File with name "${filename}".`);

0 commit comments

Comments
 (0)