diff options
Diffstat (limited to '.rules/changelog')
| -rw-r--r-- | .rules/changelog/2026-03/28/08.md | 8 | ||||
| -rw-r--r-- | .rules/changelog/2026-03/28/09.md | 13 | ||||
| -rw-r--r-- | .rules/changelog/2026-03/28/10.md | 15 | ||||
| -rw-r--r-- | .rules/changelog/2026-03/29/01.md | 30 |
4 files changed, 0 insertions, 66 deletions
diff --git a/.rules/changelog/2026-03/28/08.md b/.rules/changelog/2026-03/28/08.md deleted file mode 100644 index e5c93a4..0000000 --- a/.rules/changelog/2026-03/28/08.md +++ /dev/null @@ -1,8 +0,0 @@ -# Changelog — 2026-03-28 #08 - -## Split calendar plan into independent phase files - -- Split monolithic `.rules/plan/calendar.md` into 9 independent phase files (`calendar-phase-1.md` through `calendar-phase-9.md`). -- Each phase file is self-contained with status, dependencies, design spec, and implementation notes. -- Rewrote `calendar.md` as an overview document with a phase index table linking to all 9 files. -- Retained shared context (goal, reference analysis, storage structure, file lists, considerations, fork analysis) in the overview. diff --git a/.rules/changelog/2026-03/28/09.md b/.rules/changelog/2026-03/28/09.md deleted file mode 100644 index cadb738..0000000 --- a/.rules/changelog/2026-03/28/09.md +++ /dev/null @@ -1,13 +0,0 @@ -# Changelog — 2026-03-28 — 09 - -## Phase 1: Daily Note Manager - -### Added -- `src/calendar/daily-notes.ts` — Core daily note module with all Phase 1 functions: - - `getDailyNotePath` — computes `{rootFolder}/{YYYY}/{MM}/{DD}/{YYYY-MM-DD}.md` - - `getDailyNote` — vault lookup by computed path - - `createDailyNote` — creates folders and file, supports template with `{{date}}` replacement - - `openDailyNote` — get-or-create then open in workspace leaf - - `indexDailyNotes` — recursively scans root folder, returns `Map<"YYYY-MM-DD", TFile>` - - `getDateFromDailyNote` — reverse lookup: extracts date from TFile path -- `src/global.d.ts` — Global type declaration for `window.moment` (Obsidian provides moment at runtime but does not export types for it) diff --git a/.rules/changelog/2026-03/28/10.md b/.rules/changelog/2026-03/28/10.md deleted file mode 100644 index a5f6de0..0000000 --- a/.rules/changelog/2026-03/28/10.md +++ /dev/null @@ -1,15 +0,0 @@ -# Phase 2: Calendar State - -## Added -- `src/calendar/calendar-state.ts` — observable state container for the calendar view - -## Details -- `CalendarState` class with private fields: `displayedMonth`, `today`, `activeFileDate`, `noteIndex` -- Read-only getters for all state fields -- `subscribe(cb)` / unsubscribe pattern using a `Set<() => void>` -- `setDisplayedMonth(m)` — clones and normalizes to start-of-month -- `setActiveFile(file, rootFolder)` — delegates to `getDateFromDailyNote()` from Phase 1 -- `reindex(app, rootFolder)` — delegates to `indexDailyNotes()` from Phase 1 -- `tick()` — heartbeat that notifies only on day rollover -- `rootFolder` passed as parameter (not stored) for consistency across methods -- No framework dependencies; strict TypeScript, no `any` diff --git a/.rules/changelog/2026-03/29/01.md b/.rules/changelog/2026-03/29/01.md deleted file mode 100644 index 6d037c6..0000000 --- a/.rules/changelog/2026-03/29/01.md +++ /dev/null @@ -1,30 +0,0 @@ -# Chat History Persistence & Cross-Device Sync - -## New File: `src/chat-history.ts` -- Added `toPersistableMessages()` — filters ChatMessage[] to only user/assistant messages -- Added `toRuntimeMessages()` — converts persisted messages back to ChatMessage[] for LLM context -- Re-exports `PersistedMessage` type from settings - -## Modified: `src/settings.ts` -- Added `PersistedMessage` interface (role: user | assistant, content: string) -- Added `chatHistory: PersistedMessage[]` field to `AIPulseSettings` -- Chat history is stored in `data.json` via Obsidian's `loadData()`/`saveData()`, ensuring: - - Correct file path regardless of plugin folder name vs manifest ID - - Native Obsidian Sync support - - `onExternalSettingsChange()` fires automatically on sync - -## Modified: `src/chat-view.ts` -- On **open**: restores persisted chat history from `plugin.settings.chatHistory`, renders user messages as plain text and assistant messages as rendered markdown with wiki-link navigation -- On **message send**: debounced save (500ms) after user message and after assistant response completes -- On **close**: flushes pending save and cleans up debounce timer -- On **clear chat**: sets `chatHistory` to empty array and saves settings (syncs clear to all devices) -- Added `reloadChatHistory()` public method for external sync triggers; skips reload if streaming is active -- Added `saveChatHistoryDebounced()` with snapshot update to prevent false sync reloads -- Added `renderPersistedMessages()` to re-render history with markdown and wiki-link click handlers - -## Modified: `src/main.ts` -- Added `onExternalSettingsChange()` — reloads settings and checks for chat history changes when Obsidian Sync updates `data.json` -- Added `visibilitychange` DOM event listener — reloads settings from disk when the app regains focus (covers device switching) -- Added `checkChatHistorySync()` — snapshot-based change detection that reloads the chat view only when the persisted data differs from the known state -- Added `updateChatSnapshot()` — called after local saves and restores to prevent false sync triggers -- Added `buildChatSnapshot()` helper — lightweight string comparison using message count and last message content |
