Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Empty file.
Binary file added .pnpm-store/v11/index.db
Binary file not shown.
67 changes: 66 additions & 1 deletion apps/web/src/components/MemorySection.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -302,6 +302,8 @@ export function MemorySection() {
// fetch on mount + live SSE updates merged by id so phase transitions
// (running → success) replace the row in place.
const [extractions, setExtractions] = useState<MemoryExtractionRecord[]>([]);
const [pendingExtractionDeleteId, setPendingExtractionDeleteId] = useState<string | null>(null);
const [isDeletingExtraction, setIsDeletingExtraction] = useState(false);

const fireFlash = useCallback((kind: FlashKind) => {
setFlash({ kind, key: Date.now() });
Expand Down Expand Up @@ -593,6 +595,17 @@ export function MemorySection() {
}
}, [reloadExtractions]);

const onConfirmDeleteExtraction = useCallback(async () => {
if (!pendingExtractionDeleteId) return;
setIsDeletingExtraction(true);
try {
await onDeleteExtraction(pendingExtractionDeleteId);
Comment thread
itsbryanman marked this conversation as resolved.
setPendingExtractionDeleteId(null);
} finally {
setIsDeletingExtraction(false);
}
}, [onDeleteExtraction, pendingExtractionDeleteId]);

const onClearExtractions = useCallback(async () => {
if (!window.confirm(t('settings.memoryExtractionsClearConfirm'))) return;
setExtractions([]);
Expand Down Expand Up @@ -1150,7 +1163,7 @@ export function MemorySection() {
<button
type="button"
className="ghost memory-extraction-delete"
onClick={() => void onDeleteExtraction(record.id)}
onClick={() => setPendingExtractionDeleteId(record.id)}
title={t('settings.memoryExtractionDelete')}
aria-label={t('settings.memoryExtractionDelete')}
style={{ marginLeft: 'auto', padding: '2px 6px' }}
Expand Down Expand Up @@ -1207,6 +1220,58 @@ export function MemorySection() {
})}
</ul>
)}
{pendingExtractionDeleteId ? (
<div
className="modal-backdrop"
role="presentation"
onClick={() => {
if (isDeletingExtraction) return;
setPendingExtractionDeleteId(null);
}}
>
<div
className="modal modal-confirm"
role="dialog"
aria-modal="true"
aria-labelledby="delete-extraction-history-item-title"
aria-describedby="delete-extraction-history-item-body"
onKeyDown={(e) => {
if (e.key !== 'Escape' || isDeletingExtraction) return;
setPendingExtractionDeleteId(null);
}}
onClick={(e) => e.stopPropagation()}
>
<h2 id="delete-extraction-history-item-title">
{t('settings.memoryExtractionDeleteConfirmTitle')}
</h2>
<p
id="delete-extraction-history-item-body"
className="modal-confirm-message"
>
{t('settings.memoryExtractionDeleteConfirmBody')}
</p>
<div className="row">
<button
type="button"
className="ghost"
onClick={() => setPendingExtractionDeleteId(null)}
disabled={isDeletingExtraction}
>
{t('common.cancel')}
</button>
<button
type="button"
className="primary danger"
onClick={() => void onConfirmDeleteExtraction()}
disabled={isDeletingExtraction}
autoFocus
>
{isDeletingExtraction ? t('settings.memoryExtractionDeleting') : t('common.delete')}
</button>
</div>
</div>
</div>
) : null}
</details>

<details className="library-group memory-collapsible-card">
Expand Down
5 changes: 4 additions & 1 deletion apps/web/src/i18n/locales/ar.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1369,7 +1369,10 @@ export const ar: Dict = {
'settings.memoryNoProviderBannerTitle': 'LLM memory extraction is not running',
'settings.memoryNoProviderBannerBody': 'No API key found for the memory extractor. Add an OpenAI key under Media providers, or set ANTHROPIC_API_KEY / OPENAI_API_KEY in the environment, to enable LLM-driven extraction. Heuristic regex extraction is still active.',
'settings.memoryExtractionProviderOverride': 'memory settings',
'settings.memoryExtractionDelete': 'Delete',
'settings.memoryExtractionDelete': 'حذف',
'settings.memoryExtractionDeleting': 'جارٍ الحذف…',
'settings.memoryExtractionDeleteConfirmTitle': 'هل تريد حذف هذا العنصر؟',
'settings.memoryExtractionDeleteConfirmBody': 'سيؤدي هذا الإجراء إلى إزالة سجل محفوظات الاستخراج هذا نهائيًا. لا يمكن التراجع عن هذا الإجراء.',
'settings.memoryExtractionsClear': 'Clear',
'settings.memoryExtractionsClearTitle': 'Clear all extraction history',
'settings.libraryInstall': 'تثبيت',
Expand Down
5 changes: 4 additions & 1 deletion apps/web/src/i18n/locales/de.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1307,7 +1307,10 @@ export const de: Dict = {
'settings.memoryNoProviderBannerTitle': 'LLM memory extraction is not running',
'settings.memoryNoProviderBannerBody': 'No API key found for the memory extractor. Add an OpenAI key under Media providers, or set ANTHROPIC_API_KEY / OPENAI_API_KEY in the environment, to enable LLM-driven extraction. Heuristic regex extraction is still active.',
'settings.memoryExtractionProviderOverride': 'memory settings',
'settings.memoryExtractionDelete': 'Delete',
'settings.memoryExtractionDelete': 'Löschen',
'settings.memoryExtractionDeleting': 'Wird gelöscht…',
'settings.memoryExtractionDeleteConfirmTitle': 'Diesen Verlaufseintrag löschen?',
'settings.memoryExtractionDeleteConfirmBody': 'Dieser Eintrag in der Extraktionshistorie wird dauerhaft entfernt. Diese Aktion kann nicht rückgängig gemacht werden.',
'settings.memoryExtractionsClear': 'Clear',
'settings.memoryExtractionsClearTitle': 'Clear all extraction history',
'settings.libraryInstall': 'Installieren',
Expand Down
3 changes: 3 additions & 0 deletions apps/web/src/i18n/locales/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1994,6 +1994,9 @@ export const en: Dict = {
'settings.memoryExtractionWritten': 'written',
'settings.memoryExtractionDuration': 'in',
'settings.memoryExtractionDelete': 'Delete',
'settings.memoryExtractionDeleting': 'Deleting…',
'settings.memoryExtractionDeleteConfirmTitle': 'Delete extraction history item?',
'settings.memoryExtractionDeleteConfirmBody': 'This will permanently remove this extraction history record. This action cannot be undone.',
'settings.memoryExtractionsClear': 'Clear',
'settings.memoryExtractionsClearTitle': 'Clear all extraction history',
'settings.memoryExtractionsClearConfirm':
Expand Down
5 changes: 4 additions & 1 deletion apps/web/src/i18n/locales/es-ES.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1258,7 +1258,10 @@ export const esES: Dict = {
'settings.memoryNoProviderBannerTitle': 'LLM memory extraction is not running',
'settings.memoryNoProviderBannerBody': 'No API key found for the memory extractor. Add an OpenAI key under Media providers, or set ANTHROPIC_API_KEY / OPENAI_API_KEY in the environment, to enable LLM-driven extraction. Heuristic regex extraction is still active.',
'settings.memoryExtractionProviderOverride': 'memory settings',
'settings.memoryExtractionDelete': 'Delete',
'settings.memoryExtractionDelete': 'Eliminar',
'settings.memoryExtractionDeleting': 'Eliminando…',
'settings.memoryExtractionDeleteConfirmTitle': '¿Eliminar este elemento?',
'settings.memoryExtractionDeleteConfirmBody': 'Esta acción eliminará permanentemente este registro del historial de extracción. No se puede deshacer.',
'settings.memoryExtractionsClear': 'Clear',
'settings.memoryExtractionsClearTitle': 'Clear all extraction history',
'settings.libraryInstall': 'Instalar',
Expand Down
5 changes: 4 additions & 1 deletion apps/web/src/i18n/locales/fa.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1412,7 +1412,10 @@ export const fa: Dict = {
'settings.memoryNoProviderBannerTitle': 'LLM memory extraction is not running',
'settings.memoryNoProviderBannerBody': 'No API key found for the memory extractor. Add an OpenAI key under Media providers, or set ANTHROPIC_API_KEY / OPENAI_API_KEY in the environment, to enable LLM-driven extraction. Heuristic regex extraction is still active.',
'settings.memoryExtractionProviderOverride': 'memory settings',
'settings.memoryExtractionDelete': 'Delete',
'settings.memoryExtractionDelete': 'حذف',
'settings.memoryExtractionDeleting': 'در حال حذف…',
'settings.memoryExtractionDeleteConfirmTitle': 'این مورد حذف شود؟',
'settings.memoryExtractionDeleteConfirmBody': 'این اقدام این رکورد تاریخچه استخراج را برای همیشه حذف می‌کند. این عمل قابل بازگشت نیست.',
'settings.memoryExtractionsClear': 'Clear',
'settings.memoryExtractionsClearTitle': 'Clear all extraction history',
'settings.libraryInstall': 'نصب',
Expand Down
3 changes: 3 additions & 0 deletions apps/web/src/i18n/locales/fr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1370,6 +1370,9 @@ export const fr: Dict = {
'settings.memoryNoProviderBannerBody': 'Aucune clé API trouvée pour l’extracteur de mémoire. Ajoutez une clé OpenAI dans les fournisseurs de médias, ou définissez ANTHROPIC_API_KEY / OPENAI_API_KEY dans l’environnement pour activer l’extraction par LLM. L’extraction heuristique par regex reste active.',
'settings.memoryExtractionProviderOverride': 'réglages mémoire',
'settings.memoryExtractionDelete': 'Supprimer',
'settings.memoryExtractionDeleting': 'Suppression…',
'settings.memoryExtractionDeleteConfirmTitle': 'Supprimer cet élément ?',
'settings.memoryExtractionDeleteConfirmBody': 'Cette action supprimera définitivement cet enregistrement. Elle est irréversible.',
'settings.memoryExtractionsClear': 'Effacer',
'settings.memoryExtractionsClearTitle': 'Effacer tout l’historique d’extraction',
'settings.libraryInstall': 'Installer',
Expand Down
5 changes: 4 additions & 1 deletion apps/web/src/i18n/locales/hu.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1379,7 +1379,10 @@ export const hu: Dict = {
'settings.memoryNoProviderBannerTitle': 'LLM memory extraction is not running',
'settings.memoryNoProviderBannerBody': 'No API key found for the memory extractor. Add an OpenAI key under Media providers, or set ANTHROPIC_API_KEY / OPENAI_API_KEY in the environment, to enable LLM-driven extraction. Heuristic regex extraction is still active.',
'settings.memoryExtractionProviderOverride': 'memory settings',
'settings.memoryExtractionDelete': 'Delete',
'settings.memoryExtractionDelete': 'Törlés',
'settings.memoryExtractionDeleting': 'Törlés…',
'settings.memoryExtractionDeleteConfirmTitle': 'Törli ezt az elemet?',
'settings.memoryExtractionDeleteConfirmBody': 'Ez a művelet véglegesen eltávolítja ezt a kinyerési előzményrekordot. Ez nem vonható vissza.',
'settings.memoryExtractionsClear': 'Clear',
'settings.memoryExtractionsClearTitle': 'Clear all extraction history',
'settings.libraryInstall': 'Telepítés',
Expand Down
5 changes: 4 additions & 1 deletion apps/web/src/i18n/locales/id.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1489,7 +1489,10 @@ export const id: Dict = {
'settings.memoryNoProviderBannerTitle': 'LLM memory extraction is not running',
'settings.memoryNoProviderBannerBody': 'No API key found for the memory extractor. Add an OpenAI key under Media providers, or set ANTHROPIC_API_KEY / OPENAI_API_KEY in the environment, to enable LLM-driven extraction. Heuristic regex extraction is still active.',
'settings.memoryExtractionProviderOverride': 'memory settings',
'settings.memoryExtractionDelete': 'Delete',
'settings.memoryExtractionDelete': 'Hapus',
'settings.memoryExtractionDeleting': 'Menghapus…',
'settings.memoryExtractionDeleteConfirmTitle': 'Hapus item ini?',
'settings.memoryExtractionDeleteConfirmBody': 'Tindakan ini akan menghapus rekaman riwayat ekstraksi ini secara permanen. Tindakan ini tidak dapat dibatalkan.',
'settings.memoryExtractionsClear': 'Clear',
'settings.memoryExtractionsClearTitle': 'Clear all extraction history',
'settings.libraryInstall': 'Instal',
Expand Down
3 changes: 3 additions & 0 deletions apps/web/src/i18n/locales/it.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1249,6 +1249,9 @@ export const it: Dict = {
'settings.memoryNoProviderBannerBody': 'Nessuna chiave API trovata per l\'estrattore di memoria. Aggiungi una chiave OpenAI sotto Provider di media, o imposta ANTHROPIC_API_KEY / OPENAI_API_KEY nell\'ambiente, per abilitare l\'estrazione guidata da LLM. L\'estrazione euristica regex è ancora attiva.',
'settings.memoryExtractionProviderOverride': 'impostazioni memoria',
'settings.memoryExtractionDelete': 'Elimina',
'settings.memoryExtractionDeleting': 'Eliminazione…',
'settings.memoryExtractionDeleteConfirmTitle': 'Eliminare questo elemento?',
'settings.memoryExtractionDeleteConfirmBody': 'Questa azione rimuoverà definitivamente questo record della cronologia di estrazione. Non può essere annullata.',
'settings.memoryExtractionsClear': 'Cancella',
'settings.memoryExtractionsClearTitle': 'Cancella tutta la cronologia di estrazione',
'settings.libraryInstall': 'Installa',
Expand Down
5 changes: 4 additions & 1 deletion apps/web/src/i18n/locales/ja.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1306,7 +1306,10 @@ export const ja: Dict = {
'settings.memoryNoProviderBannerTitle': 'LLM memory extraction is not running',
'settings.memoryNoProviderBannerBody': 'No API key found for the memory extractor. Add an OpenAI key under Media providers, or set ANTHROPIC_API_KEY / OPENAI_API_KEY in the environment, to enable LLM-driven extraction. Heuristic regex extraction is still active.',
'settings.memoryExtractionProviderOverride': 'memory settings',
'settings.memoryExtractionDelete': 'Delete',
'settings.memoryExtractionDelete': '削除',
'settings.memoryExtractionDeleting': '削除中…',
'settings.memoryExtractionDeleteConfirmTitle': 'この項目を削除しますか?',
'settings.memoryExtractionDeleteConfirmBody': 'この操作により、この抽出履歴レコードは完全に削除されます。元に戻すことはできません。',
'settings.memoryExtractionsClear': 'Clear',
'settings.memoryExtractionsClearTitle': 'Clear all extraction history',
'settings.libraryInstall': 'インストール',
Expand Down
5 changes: 4 additions & 1 deletion apps/web/src/i18n/locales/ko.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1419,7 +1419,10 @@ export const ko: Dict = {
'settings.memoryNoProviderBannerTitle': 'LLM memory extraction is not running',
'settings.memoryNoProviderBannerBody': 'No API key found for the memory extractor. Add an OpenAI key under Media providers, or set ANTHROPIC_API_KEY / OPENAI_API_KEY in the environment, to enable LLM-driven extraction. Heuristic regex extraction is still active.',
'settings.memoryExtractionProviderOverride': 'memory settings',
'settings.memoryExtractionDelete': 'Delete',
'settings.memoryExtractionDelete': '삭제',
'settings.memoryExtractionDeleting': '삭제 중…',
'settings.memoryExtractionDeleteConfirmTitle': '이 항목을 삭제하시겠습니까?',
'settings.memoryExtractionDeleteConfirmBody': '이 작업은 이 추출 기록을 영구적으로 삭제합니다. 되돌릴 수 없습니다.',
'settings.memoryExtractionsClear': 'Clear',
'settings.memoryExtractionsClearTitle': 'Clear all extraction history',
'settings.libraryInstall': '설치',
Expand Down
5 changes: 4 additions & 1 deletion apps/web/src/i18n/locales/pl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1369,7 +1369,10 @@ export const pl: Dict = {
'settings.memoryNoProviderBannerTitle': 'LLM memory extraction is not running',
'settings.memoryNoProviderBannerBody': 'No API key found for the memory extractor. Add an OpenAI key under Media providers, or set ANTHROPIC_API_KEY / OPENAI_API_KEY in the environment, to enable LLM-driven extraction. Heuristic regex extraction is still active.',
'settings.memoryExtractionProviderOverride': 'memory settings',
'settings.memoryExtractionDelete': 'Delete',
'settings.memoryExtractionDelete': 'Usuń',
'settings.memoryExtractionDeleting': 'Usuwanie…',
'settings.memoryExtractionDeleteConfirmTitle': 'Usunąć ten element?',
'settings.memoryExtractionDeleteConfirmBody': 'Ta operacja trwale usunie ten wpis historii ekstrakcji. Nie można jej cofnąć.',
'settings.memoryExtractionsClear': 'Clear',
'settings.memoryExtractionsClearTitle': 'Clear all extraction history',
'settings.libraryInstall': 'Zainstaluj',
Expand Down
5 changes: 4 additions & 1 deletion apps/web/src/i18n/locales/pt-BR.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1410,7 +1410,10 @@ export const ptBR: Dict = {
'settings.memoryNoProviderBannerTitle': 'LLM memory extraction is not running',
'settings.memoryNoProviderBannerBody': 'No API key found for the memory extractor. Add an OpenAI key under Media providers, or set ANTHROPIC_API_KEY / OPENAI_API_KEY in the environment, to enable LLM-driven extraction. Heuristic regex extraction is still active.',
'settings.memoryExtractionProviderOverride': 'memory settings',
'settings.memoryExtractionDelete': 'Delete',
'settings.memoryExtractionDelete': 'Excluir',
'settings.memoryExtractionDeleting': 'Excluindo…',
'settings.memoryExtractionDeleteConfirmTitle': 'Excluir este item?',
'settings.memoryExtractionDeleteConfirmBody': 'Esta ação removerá permanentemente este registro do histórico de extração. Não é possível desfazer.',
'settings.memoryExtractionsClear': 'Clear',
'settings.memoryExtractionsClearTitle': 'Clear all extraction history',
'settings.libraryInstall': 'Instalar',
Expand Down
5 changes: 4 additions & 1 deletion apps/web/src/i18n/locales/ru.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1410,7 +1410,10 @@ export const ru: Dict = {
'settings.memoryNoProviderBannerTitle': 'LLM memory extraction is not running',
'settings.memoryNoProviderBannerBody': 'No API key found for the memory extractor. Add an OpenAI key under Media providers, or set ANTHROPIC_API_KEY / OPENAI_API_KEY in the environment, to enable LLM-driven extraction. Heuristic regex extraction is still active.',
'settings.memoryExtractionProviderOverride': 'memory settings',
'settings.memoryExtractionDelete': 'Delete',
'settings.memoryExtractionDelete': 'Удалить',
'settings.memoryExtractionDeleting': 'Удаление…',
'settings.memoryExtractionDeleteConfirmTitle': 'Удалить этот элемент?',
'settings.memoryExtractionDeleteConfirmBody': 'Это действие навсегда удалит эту запись из истории извлечения. Отменить его нельзя.',
'settings.memoryExtractionsClear': 'Clear',
'settings.memoryExtractionsClearTitle': 'Clear all extraction history',
'settings.libraryInstall': 'Установить',
Expand Down
5 changes: 4 additions & 1 deletion apps/web/src/i18n/locales/tr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1356,7 +1356,10 @@ export const tr: Dict = {
'settings.memoryNoProviderBannerTitle': 'LLM memory extraction is not running',
'settings.memoryNoProviderBannerBody': 'No API key found for the memory extractor. Add an OpenAI key under Media providers, or set ANTHROPIC_API_KEY / OPENAI_API_KEY in the environment, to enable LLM-driven extraction. Heuristic regex extraction is still active.',
'settings.memoryExtractionProviderOverride': 'memory settings',
'settings.memoryExtractionDelete': 'Delete',
'settings.memoryExtractionDelete': 'Sil',
'settings.memoryExtractionDeleting': 'Siliniyor…',
'settings.memoryExtractionDeleteConfirmTitle': 'Bu öğe silinsin mi?',
'settings.memoryExtractionDeleteConfirmBody': 'Bu işlem bu çıkarım geçmişi kaydını kalıcı olarak kaldırır. Bu işlem geri alınamaz.',
'settings.memoryExtractionsClear': 'Clear',
'settings.memoryExtractionsClearTitle': 'Clear all extraction history',
'settings.libraryInstall': 'Yükle',
Expand Down
5 changes: 4 additions & 1 deletion apps/web/src/i18n/locales/uk.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1411,7 +1411,10 @@ export const uk: Dict = {
'settings.memoryNoProviderBannerTitle': 'LLM memory extraction is not running',
'settings.memoryNoProviderBannerBody': 'No API key found for the memory extractor. Add an OpenAI key under Media providers, or set ANTHROPIC_API_KEY / OPENAI_API_KEY in the environment, to enable LLM-driven extraction. Heuristic regex extraction is still active.',
'settings.memoryExtractionProviderOverride': 'memory settings',
'settings.memoryExtractionDelete': 'Delete',
'settings.memoryExtractionDelete': 'Видалити',
'settings.memoryExtractionDeleting': 'Видалення…',
'settings.memoryExtractionDeleteConfirmTitle': 'Видалити цей елемент?',
'settings.memoryExtractionDeleteConfirmBody': 'Ця дія назавжди видалить цей запис історії вилучення. Її не можна скасувати.',
'settings.memoryExtractionsClear': 'Clear',
'settings.memoryExtractionsClearTitle': 'Clear all extraction history',
'settings.libraryInstall': 'Встановити',
Expand Down
Loading