Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
95 commits
Select commit Hold shift + click to select a range
d6368d7
fix(chat-input): correct auto-resize min/max heights and measurement
Midway65 Apr 4, 2026
4aebd25
fix(accordion): replace full DOM rebuild with targeted in-place updates
Midway65 Apr 4, 2026
7e26b3b
fix(chat-view): remove dead isRetry variable in handleStreamingUpdate
Midway65 Apr 4, 2026
607ec58
remove beta warning banner from chat window
Midway65 Apr 4, 2026
72abed8
add Chat Action Buttons — Copy, Insert, Append, Create File pill
Midway65 Apr 4, 2026
176db1e
fix: remove dead params from createTextBubble after copy button removal
Midway65 Apr 4, 2026
cf8dc23
fix(lint): rename unused bubble param to _bubble in createActionButtons
Midway65 Apr 4, 2026
85ea19b
fix(css): add pointer-events:none to invisible message action pill
Midway65 Apr 4, 2026
0222bdb
fix: move action buttons into existing pill, fix click-blocking
Midway65 Apr 4, 2026
87d8bb2
fix(css): explicit user-select:text on message content + 25% pill opa…
Midway65 Apr 4, 2026
1a01897
fix: move action pill into message header top-right, reduce transition
Midway65 Apr 4, 2026
938e6c3
fix(action-bar): prevent focus loss on Insert/Append button click
Midway65 Apr 4, 2026
e948c79
fix(action-bar): find open note when chat panel has workspace focus
Midway65 Apr 4, 2026
c56b166
fix(create-file-modal): correct inbox case, fix toggle not respected
Midway65 Apr 4, 2026
99864ff
custom/fork-id: rename plugin id and name to nucleus
Midway65 Apr 4, 2026
86fe1f0
merge: integrate upstream v5.6.2
Midway65 Apr 4, 2026
15d90a1
revert(fork-id): restore plugin id=nexus name=Nexus
Midway65 Apr 4, 2026
f47088f
merge: integrate upstream 5.6.3
Midway65 Apr 4, 2026
d4a8f16
merge: integrate upstream v5.6.4
Midway65 Apr 4, 2026
919049c
fix(schema): migration v12 — rebuild note/block embedding tables for …
Midway65 Apr 4, 2026
a85ff4f
fix(schema): fix vec0 dimension migration via native db.exec() path
Midway65 Apr 4, 2026
c77c799
fix(schema): add stub migrations v13-v16 and drop orphaned embedding_…
Midway65 Apr 4, 2026
00e9054
fix(schema): add migration v18 — recreate embedding_metadata without …
Midway65 Apr 4, 2026
dac9d6c
merge: integrate upstream 5.6.5
Midway65 Apr 5, 2026
d54af17
merge: integrate upstream v5.6.6
Midway65 Apr 5, 2026
ac0b83d
fix(schema): migration v19 — drop orphaned semantic_feedback and bloc…
Midway65 Apr 5, 2026
4e87963
fix(css): merge duplicate mobile rule, smooth copy-success transition
Midway65 Apr 5, 2026
17a5eb8
chore: remove dead ContentProcessor utility class
Midway65 Apr 5, 2026
852e895
feat(perplexity): G-C1 — remove stale models, update type literals
Midway65 Apr 5, 2026
6d19189
fix(perplexity): G-C2 — fix request body, remove dead tool code
Midway65 Apr 5, 2026
56f43bb
feat(perplexity): G-C3 — thread response metadata through streaming p…
Midway65 Apr 5, 2026
fba05b5
fix(perplexity): cast requestBody for stripUndefined TypeScript compa…
Midway65 Apr 5, 2026
e34e375
feat(perplexity): G-C4 — citations UI in chat bubble
Midway65 Apr 5, 2026
1bb4fa8
fix(http): use require() for node:https/http in Electron renderer
Midway65 Apr 5, 2026
ceee998
fix(perplexity): strip <think> blocks from display, set explicit max_…
Midway65 Apr 5, 2026
5475d66
fix(branch-nav): handleBranchSwitched fires after switch is done — ju…
Midway65 Apr 5, 2026
ff2b6c5
fix(branch-nav): make handleBranchSwitched a no-op to prevent double …
Midway65 Apr 5, 2026
8059edb
fix(storage): prevent JSONL bloat from streaming chunks; fix large-fi…
Midway65 Apr 5, 2026
3967166
fix(perplexity): placeholder for interrupted streams; raise max_token…
Midway65 Apr 5, 2026
a375a8a
fix(perplexity): increase streaming inactivity timeout from 120s to 300s
Midway65 Apr 5, 2026
5c1e4b7
fix(streaming): propagate timeout error to response stream; add diagn…
Midway65 Apr 5, 2026
147863f
diag(perplexity): log finish_reason and total content chars on stream…
Midway65 Apr 5, 2026
c7eb50b
fix(copy): use branch-aware content for copy action
Midway65 Apr 5, 2026
d3e41ce
revert(perplexity): remove all Work Stream C code (G-C1 through G-C4)
Midway65 Apr 5, 2026
11f9091
fix(context-bar): refresh on tab focus via active-leaf-change
Midway65 Apr 5, 2026
223db8b
merge: integrate upstream v5.6.7
Midway65 Apr 5, 2026
92687ed
fix(storage): delete conversation JSONL on delete; prune orphaned fil…
Midway65 Apr 5, 2026
af70463
fix(chat-header): reset title to 'Chat' when all conversations deleted
Midway65 Apr 5, 2026
dd65f6b
fix(conversation-list): F-01 cleanup timer + createEl for rename inputs
Midway65 Apr 6, 2026
0b2c719
fix(branch-header): F-02 skip re-render when context unchanged
Midway65 Apr 6, 2026
3c928fa
fix(message-bubble): F-03 clear loadingInterval before overwrite
Midway65 Apr 6, 2026
295969c
fix(dead-code): F-04 remove escapeHtml x2 + drop void on sync call
Midway65 Apr 6, 2026
2a2a80f
fix(context-bar): F-05 use Obsidian API idiom for class reset
Midway65 Apr 6, 2026
b436816
fix(conversation-manager): F-06 raise conversation list limit 50 -> 500
Midway65 Apr 6, 2026
9df5102
fix(chat-settings-modal): F-07 persist imageProvider/imageModel on save
Midway65 Apr 6, 2026
b9ef14c
fix(model-selection): F-08 replace hardcoded openai/gpt-4o fallback
Midway65 Apr 6, 2026
b697ab5
fix(provider-modal): F-09 await async save before showing Saved
Midway65 Apr 6, 2026
49a6e71
fix(css): F-10 CSS remediation — all 7 E08 items
Midway65 Apr 6, 2026
265ce88
fix(workspace): guard ws.name?.toLowerCase() in getWorkspaceByNameOrId
Midway65 Apr 6, 2026
07acb3f
fix(workspace): null-guard all ws.name string calls on DB records
Midway65 Apr 6, 2026
1937933
Update connectorContent
Midway65 Apr 6, 2026
2f52335
fix(workspace): G-W1+G-W4 — cheap restore + remove dead per-turn fetches
Midway65 Apr 6, 2026
f287fdc
fix(workspace): G-W2 — slim workspace header replaces full JSON blob …
Midway65 Apr 6, 2026
3b9ee3e
feat(workspace): G-W3 — first-message full context load, slim header …
Midway65 Apr 6, 2026
9b5be68
fix(workspace): G-W3 regression — preserve loadedWorkspaceData for su…
Midway65 Apr 6, 2026
996c578
fix(workspace): Bug 1 — remove context guard blocking 14/21 workspace…
Midway65 Apr 6, 2026
dc94b96
refactor(workspace): rename setWorkspaceContext → selectWorkspace, re…
Midway65 Apr 7, 2026
25ec9a6
Revert "refactor(workspace): rename setWorkspaceContext → selectWorks…
Midway65 Apr 7, 2026
699bd00
refactor(workspace): drop redundant context param from setWorkspaceCo…
Midway65 Apr 7, 2026
3c15007
fix(workspace): two code review corrections
Midway65 Apr 7, 2026
986eb38
fix(chat): prevent G-W3 flag from being consumed during initialization
Midway65 Apr 7, 2026
7d3583c
Revert "fix(chat): prevent G-W3 flag from being consumed during initi…
Midway65 Apr 7, 2026
19be351
Revert "fix(workspace): two code review corrections"
Midway65 Apr 7, 2026
224ece3
Revert "refactor(workspace): drop redundant context param from setWor…
Midway65 Apr 7, 2026
a2965b6
Reapply "refactor(workspace): rename setWorkspaceContext → selectWork…
Midway65 Apr 7, 2026
d7746f7
Revert "refactor(workspace): rename setWorkspaceContext → selectWorks…
Midway65 Apr 7, 2026
f98171a
Revert "fix(workspace): Bug 1 — remove context guard blocking 14/21 w…
Midway65 Apr 7, 2026
653e126
Revert "fix(workspace): G-W3 regression — preserve loadedWorkspaceDat…
Midway65 Apr 7, 2026
d663a1a
Revert "feat(workspace): G-W3 — first-message full context load, slim…
Midway65 Apr 7, 2026
24eaf7b
Revert "fix(workspace): G-W2 — slim workspace header replaces full JS…
Midway65 Apr 7, 2026
e127f59
Revert "fix(workspace): G-W1+G-W4 — cheap restore + remove dead per-t…
Midway65 Apr 7, 2026
6c4d34d
docs(schema): add fork migration numbering convention comment block
Midway65 Apr 7, 2026
fa1a918
merge: integrate upstream v5.6.8
Midway65 Apr 7, 2026
b6597b4
merge: integrate upstream v5.6.9
Midway65 Apr 7, 2026
0cf9943
merge: integrate upstream 5.6.10
Midway65 Apr 7, 2026
bc69732
chore(audit): branch congruence cleanup + add fork divergence registry
Midway65 Apr 7, 2026
858d7f3
docs(merge): add upstream merge plan for post-v5.6.10 PRs #111-#115
Midway65 Apr 7, 2026
d3b6fc4
docs(fork): annotate DROP decisions and merge target in fork_divergen…
Midway65 Apr 7, 2026
db8322b
merge: integrate upstream post-v5.6.10 (PRs #103, #106, #107, #112–#115)
Midway65 Apr 7, 2026
1f0571e
docs: sync conversation-list-pagination-search-plan status with upstream
Midway65 Apr 7, 2026
ad25c73
chore: regen connectorContent.ts post-deploy build
Midway65 Apr 7, 2026
2197cfc
docs(fork): update fork_divergence.md — reflect post-5.6.10 merge state
Midway65 Apr 7, 2026
8f05376
chore: reset connectorContent.ts to upstream pre-merge
Midway65 Apr 8, 2026
a65f513
merge: integrate upstream v5.7.1 (PRs #118, #119, #121)
Midway65 Apr 8, 2026
42b935f
docs(fork): update fork_divergence.md post-v5.7.1 merge
Midway65 Apr 8, 2026
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
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,16 @@ BCPs.md
CLAUDE.md

docs/*
!docs/fork_divergence.md
!docs/plans/
docs/plans/*
!docs/plans/*.md
!docs/research/
docs/research/*
!docs/research/*.md
!docs/review/
docs/review/*
!docs/review/*.md
!docs/mockups/
docs/mockups/*
!docs/mockups/*.html
Expand Down
116 changes: 116 additions & 0 deletions docs/fork_divergence.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
# Fork Divergence Registry

This file is the authoritative record of every file in `my-custom-branch` that intentionally
diverges from upstream (`ProfSynapse/nexus`). Load it at the start of every upstream merge
session to know which files require manual resolution and which can be auto-merged.

**Last audited against:** upstream/main HEAD (`f4e49fd3`) — PRs #118, #119, #121
**Audit date:** 2026-04-08
**Next merge target:** next upstream/main HEAD (watch for new PRs)

---

## Tier 1 — Always conflict on upstream merge

These files contain fork-specific additions that upstream will never have. Every upstream merge
requires manual resolution using the pattern: accept upstream base, then layer back the fork additions.

| File | Fork change | Resolution pattern |
|------|-------------|-------------------|
| `src/ui/chat/components/MessageBubble.ts` | Action bar: `import MessageActionBar`, `private actionBar` field, `appendActionBar()`, `cleanupActionBar()`, call sites in createElement/updateWithNewMessage/cleanup | Take upstream as base; layer back all action bar insertions; fix `createTextBubble` call back to 3-arg (upstream keeps reverting to 7-arg) |
| `src/ui/chat/components/factories/ToolBubbleFactory.ts` | `createTextBubble` is 3-param (onCopy/showCopyFeedback removed — action bar owns copy). **Note:** upstream base is 7-param but upstream has not changed this file — git auto-keeps our 3-param. The recurring risk is the **call site in MessageBubble.ts** — every merge where upstream touches MessageBubble risks reverting it to 7 args. Always check after merge and fix if needed. | Git auto-keeps 3-param; verify MessageBubble.ts call site is 3-arg |

**Fork-only files (no upstream counterpart — always rebase cleanly):**
- `src/ui/chat/components/MessageActionBar.ts`
- `src/ui/chat/components/CreateFileModal.ts`

---

## Tier 2 — Conflict only when upstream touches them

These files have fork additions that are self-contained. Upstream rarely touches them, but when
they do a conflict will occur. Resolution is always: take upstream base, then restore the fork block.

| File | Fork change | Fork block to restore |
|------|-------------|----------------------|
| `styles.css` | Sticky assistant header rule | CSS rule block labelled `/* fork: sticky assistant header */` |
| `src/ui/chat/builders/ChatLayoutBuilder.ts` | Banner removal (beta/experimental warning stripped) | Remove the banner call after taking upstream |
| `src/database/schema/SchemaMigrator.ts` | Convention comment + fork migrations v12–v19 | Comment block + all migrations numbered ≥ 20 (our convention: upstream ≤ 19, fork ≥ 20) |
| `src/database/adapters/HybridStorageAdapter.ts` | `pruneOrphanedConversationFiles()` runs on startup — **TEMPORARY**; remove once vault reports zero pruned files for several consecutive sessions. Also upstream touched this file in PR #119 and likely will again. | Re-insert `if (syncState) { await pruneOrphanedConversationFiles() }` block after `getSyncState` call, before rebuild/sync. Keep upstream's `initialized = true` block ABOVE it. |

---

## Tier 3 — Fork bug fixes (low conflict risk, but track for awareness)

These files contain fixes for bugs present in upstream or data-quality issues specific to this
installation. They are unlikely to conflict because upstream is not touching the same lines, but
they must be reviewed on each merge to ensure upstream hasn't shipped a conflicting fix.

### Null-safe `workspace.name` fixes
Upstream has a historical record with `name: null` that crashes `.toLowerCase()`. Fixed with
optional chaining. If upstream fixes this themselves, take their version and drop ours.

| File | Change |
|------|--------|
| `src/agents/searchManager/services/MemorySearchProcessor.ts` | `state.name?.toLowerCase()`, `workspace.name?.toLowerCase()` |
| `src/agents/toolManager/services/ToolBatchExecutionService.ts` | `workspace.name?.toLowerCase()` |
| `src/services/WorkspaceService.ts` | `(a.name ?? '').localeCompare(b.name ?? '')`, two `ws.name?.toLowerCase()` guards |

### JSONL data quality fixes
Fixes for streaming write amplification and large-file read limits. ConversationRepository now
uses upstream's tombstone approach (no fork divergence); pruning still needed for pre-tombstone orphans.

| File | Change |
|------|--------|
| `src/database/adapters/HybridStorageAdapter.ts` | `pruneOrphanedConversationFiles()` runs on startup to clean orphaned `.jsonl` files — **temporary**: remove once vault reports zero pruned files at startup for several consecutive sessions |
| `src/database/repositories/MessageRepository.ts` | Skips JSONL write during streaming states (`draft`/`streaming`) — prevents O(n²) storage growth |
| `src/database/storage/JSONLWriter.ts` | `readEventsStreaming()` fallback via Node.js readline for files >50 MB; `stat?.()` optional-chain safe for test environments |
| `eslint.config.mjs` | Added `JSONLWriter.ts` to `import/no-nodejs-modules` exceptions (uses `require('fs')`, `require('readline')`) |

### Schema / embedding fix

| File | Change |
|------|--------|
| `src/database/storage/SQLiteMaintenanceService.ts` | `fixVec0TableDimensions()` — drops and recreates `note_embeddings` / `block_embeddings` if they were created with `float[768]` (legacy Nomic era); no-op when dimensions correct |
| `src/database/storage/SQLiteCacheManager.ts` | Calls `getMaintenanceService().fixVec0TableDimensions()` after migrations in `initialize()` |

### Provider / HTTP fixes

| File | Change |
|------|--------|
| `src/settings/tabs/ProvidersTab.ts` | `onSave` simplified from IIFE `void (async () => {...})()` to direct `async` callback |
| `src/components/LLMProviderModal.ts` | `onSave` type widened to `void \| Promise<void>`; auto-save path awaits the callback with try/catch |

### UI / UX fixes

| File | Change |
|------|--------|
| `src/ui/chat/components/ContextProgressBar.ts` | Uses `removeAttribute('class') + addClass()` instead of `className =` (Obsidian API correctness) |
| `src/components/shared/ChatSettingsRenderer.ts` | Removed `void` from `this.syncWorkspacePrompt(value)` call |

**Retired entries (absorbed by upstream PR #119):**
- `ChatView.ts` — `active-leaf-change` handler: now in upstream's ChatView (line 607). No longer fork-divergent.
- `BranchHeader.ts` — JSDoc: BranchHeader ownership moved to `ChatBranchViewCoordinator`. No longer fork-divergent.

---

## Special case — connectorContent.ts

`src/utils/connectorContent.ts` is generated during build (timestamp in header). It should be
**reset to upstream before every merge** with:

```
git checkout upstream/main -- src/utils/connectorContent.ts
```

Do not treat timestamp-only diffs as fork divergences.

---

## How to use this file

1. Before each upstream merge, run: `git diff --name-status upstream/main..my-custom-branch`
2. Cross-reference each modified file against this registry
3. Files not listed here should match upstream exactly — investigate any that don't
4. After resolving conflicts, re-run the diff to confirm no unintended divergences remain
5. If new fork additions are made, add them to this file before committing
Loading