feat(profile): Settings toggle for nightly journal closeout

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-12 14:43:59 -04:00
parent 090b7d83dd
commit c663532fd4
+26
View File
@@ -582,6 +582,17 @@ function toggleProfileWorkDay(day: string) {
profile.value.work_schedule = { ...profile.value.work_schedule, days }
}
async function onToggleCloseout(enabled: boolean) {
journalConfig.value.closeout_enabled = enabled
try {
await saveJournalConfig(journalConfig.value)
toastStore.show(enabled ? 'Nightly closeout enabled' : 'Nightly closeout disabled')
} catch {
journalConfig.value.closeout_enabled = !enabled // revert UI on failure
toastStore.show('Failed to update closeout setting', 'error')
}
}
async function runConsolidate() {
consolidating.value = true
try {
@@ -600,6 +611,7 @@ const journalConfig = ref<JournalConfig>({
prep_hour: 5,
prep_minute: 0,
day_rollover_hour: 4,
closeout_enabled: true,
locations: { home: { label: 'Home', address: '' }, work: { label: 'Work', address: '' } },
temp_unit: 'C',
})
@@ -620,6 +632,7 @@ async function loadJournalConfig() {
prep_hour: cfg.prep_hour ?? 5,
prep_minute: cfg.prep_minute ?? 0,
day_rollover_hour: cfg.day_rollover_hour ?? 4,
closeout_enabled: cfg.closeout_enabled ?? true,
morning_end_hour: cfg.morning_end_hour,
midday_end_hour: cfg.midday_end_hour,
locations: {
@@ -1901,6 +1914,19 @@ function formatUserDate(iso: string): string {
The assistant observes patterns from your journal and chat conversations and builds a summary over time. The summary is included in the journal's system prompt so the daily prep can reference what it knows about you.
<span v-if="profile.observations_count > 0"> {{ profile.observations_count }} raw observation{{ profile.observations_count !== 1 ? 's' : '' }} stored.</span>
</p>
<label class="toggle-row" style="display:flex;align-items:center;gap:0.6rem;margin:0.5rem 0 0.75rem">
<input
type="checkbox"
:checked="journalConfig.closeout_enabled !== false"
@change="onToggleCloseout(($event.target as HTMLInputElement).checked)"
/>
<span>
<strong>Nightly closeout</strong>
<small style="display:block;color:var(--color-text-muted)">Extracts patterns from yesterday's journal at your day-rollover hour.</small>
</span>
</label>
<div v-if="profile.learned_summary" class="learned-summary">{{ profile.learned_summary }}</div>
<div v-else class="learned-empty">No learned summary yet. Observations accumulate from journal and chat conversations.</div>
<div class="actions" style="gap:0.5rem;flex-wrap:wrap">