From c21fca57dd0acd2efbde55b96fe8f816abdf6f12 Mon Sep 17 00:00:00 2001 From: altair823 Date: Sat, 9 May 2026 16:31:24 +0900 Subject: [PATCH] =?UTF-8?q?feat(v029):=20AiProviderSection=20AI=20?= =?UTF-8?q?=EC=9E=90=EB=8F=99=20=EC=B2=98=EB=A6=AC=20=ED=86=A0=EA=B8=80=20?= =?UTF-8?q?+=20OFF=20=EC=8B=9C=20=EC=95=88=EB=82=B4=EB=AC=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/settings/AiProviderSection.tsx | 28 +++++++++++++++ tests/unit/AiProviderSection.test.tsx | 36 +++++++++++++++++-- 2 files changed, 62 insertions(+), 2 deletions(-) diff --git a/src/renderer/inbox/components/settings/AiProviderSection.tsx b/src/renderer/inbox/components/settings/AiProviderSection.tsx index 7e64160..db68e77 100644 --- a/src/renderer/inbox/components/settings/AiProviderSection.tsx +++ b/src/renderer/inbox/components/settings/AiProviderSection.tsx @@ -10,6 +10,8 @@ export function AiProviderSection(): React.ReactElement { const [error, setError] = useState(null); const [saveResult, setSaveResult] = useState(null); const [recheckResult, setRecheckResult] = useState(null); + // v0.2.9 Cut B Task 15: AI 자동 처리 토글. + const [aiEnabled, setAiEnabledState] = useState(null); useEffect(() => { void (async () => { @@ -18,9 +20,16 @@ export function AiProviderSection(): React.ReactElement { setEndpoint(s.endpoint); setModel(s.model); } + const settings = await inboxApi.getSettings(); + setAiEnabledState(settings.ai_enabled ?? true); })(); }, []); + async function onToggleAi(checked: boolean): Promise { + await inboxApi.setAiEnabled(checked); + setAiEnabledState(checked); + } + async function onSave(): Promise { const r = endpointSchema.safeParse(endpoint); if (!r.success) { @@ -51,6 +60,25 @@ export function AiProviderSection(): React.ReactElement { return (
+ {/* v0.2.9 Cut B Task 15 — AI 자동 처리 토글 (가장 위, 스위치 의미가 가장 큰 결정) */} + {aiEnabled !== null && ( + + )} + {aiEnabled === false && ( +

+ 원문만 저장 모드. 메모의 제목/요약/태그가 자동 생성되지 않습니다.
+ + Ollama 설치 가이드 + +

+ )}