Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
153 commits
Select commit Hold shift + click to select a range
ef8325f
docs: move site under /magic-context with Obsidian theme
ualtinok Jun 12, 2026
2114c3c
docs: fix base-prefixed internal links and Discord invite
ualtinok Jun 12, 2026
ed893c4
mason: sqlite-vec research spike findings report
ualtinok Jun 12, 2026
c41353e
fix(ctx-search): rank-domain verbatim boost + IDF-weighted probes
ualtinok Jun 12, 2026
76b8c33
mason: add compartment chunk embeddings
ualtinok Jun 12, 2026
56a1a9e
mason: workspaces dashboard UI and Rust backend
ualtinok Jun 12, 2026
5720a64
fix(dashboard): workspace readiness cache must not pin a false verdict
ualtinok Jun 12, 2026
0271533
mason: implement plugin workspaces
ualtinok Jun 12, 2026
d2148f4
fix(dashboard): workspaces page double horizontal padding
ualtinok Jun 12, 2026
9ae6163
perf(embedding): retire p1_embedding compartment vector — chunk embed…
ualtinok Jun 13, 2026
9a91ac7
perf(embedding): stop driving compartment-chunk backfill from the dre…
ualtinok Jun 13, 2026
d06c3db
feat(embedding): /ctx-embed-history — backfill a session's chunk embe…
ualtinok Jun 13, 2026
9cc979c
fix(embedding): harden /ctx-embed-history drain (Oracle audit)
ualtinok Jun 13, 2026
8bc3116
fix(workspaces): close audit findings (workspace→single fold, empty-f…
ualtinok Jun 13, 2026
2402024
fix(#135): empty-text part sentinels break tool_use adjacency on gith…
ualtinok Jun 13, 2026
cdd17f8
plugin: refresh protected-tail snapshot at historian run time to prev…
tracycam Jun 12, 2026
a4e7ddb
fix(pi/workspaces): CAS workspace-fingerprint parity + ctx_search sou…
ualtinok Jun 13, 2026
4883f88
fix(#144): setup wizard — real model list, type-ahead picker, dry-run
ualtinok Jun 13, 2026
7d907ae
fix(cache): project-docs change no longer forces an m[0] fold
ualtinok Jun 13, 2026
1545b7b
docs: explain existing project onboarding
SSDWGG Jun 13, 2026
c4a5c8e
feat(workspaces): per-category memory sharing across members (plugin/Pi)
ualtinok Jun 13, 2026
002212c
feat(dashboard): per-card Save + per-category sharing for workspaces
ualtinok Jun 13, 2026
28dc6db
fix(pi): floor context pressure with Pi's live forward usage estimate
ualtinok Jun 13, 2026
44c995d
fix(dashboard): resolve pi/opencode model binaries via login shell + …
ualtinok Jun 13, 2026
937684d
fix(dashboard): polish workspaces shared-categories UI
ualtinok Jun 13, 2026
efe7cd2
fix(cache): freeze processed-image strip to cache-busting passes
ualtinok Jun 13, 2026
4ce3d73
feat(cache): fold the execute pass into a known m[0] hard-bust (OpenC…
ualtinok Jun 13, 2026
b924925
feat(cache): fold the execute pass into a known m[0] hard-bust (Pi pa…
ualtinok Jun 13, 2026
38d6198
chore(announcement): bump startup dialog to v0.24.0 (embed-history CT…
ualtinok Jun 13, 2026
17c4a2f
fix(workspaces): P0 — ctx_memory could mutate foreign memories in non…
ualtinok Jun 13, 2026
e70f2e5
docs(release-notes): draft v0.24.0 + dashboard-v0.6.0
ualtinok Jun 13, 2026
6fa1fe2
fix(cli+dashboard): P1 model discovery — no static fallback, bounded …
ualtinok Jun 13, 2026
b9c3be6
fix(pi): align ctx-memory workspace tests with the P0 category gate
ualtinok Jun 13, 2026
02b58c2
fix(pi): P1 — historian refreshes a stale protected-tail snapshot at …
ualtinok Jun 13, 2026
9134aa5
fix(embedding): P1 — scope compartment-chunk backfill to its real pro…
ualtinok Jun 13, 2026
5386309
fix: close 3 P1s from the fix-delta re-audit (merge gate, v36 seed, P…
ualtinok Jun 13, 2026
c4f7bec
docs(audit): correct A4 — primary merge now category-gated, dreamer k…
ualtinok Jun 13, 2026
d15916a
style(pi): biome format the merge-gate line + assert refusal in archi…
ualtinok Jun 13, 2026
a767c2e
release: v0.24.0
ualtinok Jun 13, 2026
ac5a619
dashboard: bump version to 0.6.0
ualtinok Jun 14, 2026
29ba7cd
fix(embedding): reject vectors when the endpoint serves a different m…
ualtinok Jun 14, 2026
528f25f
fix(embedding): window chunks at a 10% safety margin below max_input_…
ualtinok Jun 14, 2026
478d5dc
fix(nudge): scale Channel-1 severity by the working window, not the h…
ualtinok Jun 14, 2026
87f35f6
fix(nudge): exclude protected top-N tags from the reclaimable count
ualtinok Jun 14, 2026
c3bb227
fix(emergency-recovery): disarm a stuck flag when no runnable window;…
ualtinok Jun 14, 2026
1edb4a1
feat(tui): persist sidebar collapse + section/order prefs via shared …
ualtinok Jun 14, 2026
6c8c4ab
fix(cache): converge dropped-system-injection bytes so defer replay i…
ualtinok Jun 14, 2026
51fd299
docs: explain why token count stays high after the execute threshold
ualtinok Jun 14, 2026
7bee442
fix(#129): mark m[0]/m[1] history prepends synthetic so they don't su…
ualtinok Jun 14, 2026
f6efe7b
docs: v0.24.1 release notes
ualtinok Jun 14, 2026
56101ac
style: biome formatting for files committed without it this cycle
ualtinok Jun 14, 2026
79adebc
release: v0.24.1
ualtinok Jun 14, 2026
041b34e
docs: clarify existing project adoption (#147)
roian6 Jun 14, 2026
9fe9d40
fix(#128): degrade gracefully + doctor-detect a missing local embeddi…
ualtinok Jun 14, 2026
e8ece3a
feat(nudge): enable Channel 2 ceiling nudge for subagents
ualtinok Jun 15, 2026
ea1e69e
feat: add two-pass tool reclaim
ualtinok Jun 15, 2026
c923792
fix(nudge): mark the Channel-2 ceiling nudge synthetic so it skips th…
ualtinok Jun 15, 2026
00b05c8
feat(nudge): deliver Pi Channel-2 ceiling nudge as a hidden custom me…
ualtinok Jun 15, 2026
b2e50b6
fix(nudge): reframe ctx_reduce as deferred discard, not irreversible …
ualtinok Jun 15, 2026
2a600d8
fix(#151): normalize array-form SQLite binds for node:sqlite (Pi /ctx…
ualtinok Jun 15, 2026
62adc00
fix(prompt): allow dropping pasted noise in user messages, not the di…
ualtinok Jun 15, 2026
4a54d94
fix: one canonical [dropped §N§] placeholder for every message drop (…
ualtinok Jun 15, 2026
50d56dd
refactor: one canonical [dropped §N§] placeholder everywhere (kill [t…
ualtinok Jun 15, 2026
a0ed364
fix: release-audit batch — node:sqlite CI coverage, embedding-runtime…
ualtinok Jun 15, 2026
b8a4ed8
fix(#154,#152): cap + force-stop runaway hidden-agent tool loops
ualtinok Jun 15, 2026
2ee4e73
feat(ctx_expand): verbose range view + full by-id message recovery
ualtinok Jun 15, 2026
3fa063c
fix(cache): remove truncateErroredTools — watermark-gated first-trunc…
ualtinok Jun 15, 2026
7e642c9
fix(tags): strip dangling §N tags (improvised closer) instead of orph…
ualtinok Jun 15, 2026
1e09ce6
refactor(ctx_expand): address single-message recovery by ordinal, not…
ualtinok Jun 15, 2026
dbca8a4
fix(ctx_expand): strip structural noise from full message recovery
ualtinok Jun 15, 2026
8285ab9
feat(embed): resilient drain (retry + circuit-breaker) + coverage-sta…
ualtinok Jun 16, 2026
bd6747d
feat(embed): wire /ctx-embed command, auto-drain, and TUI dialogs
ualtinok Jun 16, 2026
abdd5ab
fix(review): restore mangled TUI import + docs from embed-command wiring
ualtinok Jun 16, 2026
a53546a
fix(announcement): gate server-side delivery off TUI so the dialog sh…
ualtinok Jun 16, 2026
d845d14
fix(embed): tiny per-call batch + timeout-aware retry; tidy stalled s…
ualtinok Jun 16, 2026
13b6ce8
fix(embed): Oracle audit — hot-path defer, partial-failure tracking, …
ualtinok Jun 16, 2026
6992185
fix(embed): start/pause show a dialog (clears stderr leak); pause no …
ualtinok Jun 16, 2026
8dfabae
diag(trigger): log boundary snapshot fields on the "unsummarized tail…
ualtinok Jun 16, 2026
1e14512
diag(trigger): also log boundary snapshot at the proactive-floor bail
ualtinok Jun 16, 2026
7449938
diag(boundary): instrument the index build to pin the eligible-tail u…
ualtinok Jun 16, 2026
d3d44f5
diag(boundary): instrument the live-prompt floor (the confirmed colla…
ualtinok Jun 16, 2026
35da4fd
Revert "diag(boundary): instrument the live-prompt floor (the confirm…
ualtinok Jun 16, 2026
c2181f8
Revert "diag(boundary): instrument the index build to pin the eligibl…
ualtinok Jun 16, 2026
d7f84cf
Revert "diag(trigger): also log boundary snapshot at the proactive-fl…
ualtinok Jun 16, 2026
5dd641b
Revert "diag(trigger): log boundary snapshot fields on the "unsummari…
ualtinok Jun 16, 2026
9d8c57c
fix(boundary): staleness-gate open tool arcs so an interrupted call c…
ualtinok Jun 16, 2026
baa7c2d
fix(boundary): unfreeze /ctx-recomp from a stale open tool arc too
ualtinok Jun 16, 2026
d7e10db
docs(release): v0.25.0 notes — add historian-stall fix headline + /ct…
ualtinok Jun 16, 2026
589a657
fix(scripts): pass tagId to createToolDropTarget in context-dump
ualtinok Jun 16, 2026
0925b8f
release: v0.25.0
ualtinok Jun 16, 2026
cfaeec6
fix(cache): drain pending ops on an m[0] HARD fold even while the his…
ualtinok Jun 16, 2026
bc292ea
docs: lean ARCHITECTURE.md + add the transform-pass-mechanics core (d…
ualtinok Jun 16, 2026
bb64568
fix(historian): bypass drain throttle during emergency until safe
ualtinok Jun 17, 2026
3f53726
feat(dashboard): context-scaled cache timeline with accurate severity
ualtinok Jun 17, 2026
a693968
fix: stabilize tagger init cache
ualtinok Jun 17, 2026
f54e6ba
feat: record transform decisions for cache attribution
ualtinok Jun 17, 2026
2a7bd1c
perf(plugin): memoize tool-owner fallback lookups
ualtinok Jun 17, 2026
540868c
fix(plugin): gate in-memory compartment tail precheck
ualtinok Jun 17, 2026
ee556e6
fix: resolve non-git project picker (#160) and Windows model dropdown…
ualtinok Jun 17, 2026
4055ddd
feat(embedding): per-purpose query_input_type for asymmetric models (…
ualtinok Jun 17, 2026
e25f93b
feat(dashboard): let the dashboard edit a memory's category (#158)
ualtinok Jun 17, 2026
10bf1c6
feat(cli): add doctor migrate-session to re-home a session to another…
ualtinok Jun 18, 2026
c71fa5b
perf(plugin): scope hot-path tag reads to the live wire
ualtinok Jun 18, 2026
e3d260e
fix(plugin): embed compartment summary when its raw span has no text
ualtinok Jun 18, 2026
14d483e
feat(dashboard): rebuild Cache Diagnostics on a per-session window model
ualtinok Jun 18, 2026
aae1ab2
fix(dashboard): color compartment strip by importance; show real proj…
ualtinok Jun 18, 2026
31c030c
perf(plugin): scan past tagless wire leaders when deriving the tag floor
ualtinok Jun 18, 2026
6b287a2
docs: dashboard v0.7.0 release notes
ualtinok Jun 18, 2026
eab6f04
dashboard: bump version to 0.7.0
ualtinok Jun 18, 2026
e82b478
fix(release): fail-fast dashboard release + harden cargo network
ualtinok Jun 18, 2026
796e7f8
perf(plugin): prime the compartment phase from the tail raw-message read
ualtinok Jun 18, 2026
f9a5147
perf(plugin): scope the cheap-gate tag-owner scan to the live wire
ualtinok Jun 18, 2026
9c6d4af
fix(agents): remove builtin fallback chain; surface durable historian…
ualtinok Jun 18, 2026
14d5bd1
docs: drop the removed builtin fallback chain
ualtinok Jun 18, 2026
58475a7
fix(tui): null-guard RecompProgressSection against reactive race (#168)
ualtinok Jun 18, 2026
3e2e46e
feat(historian): add historian.disallowed_tools for weak models (#166)
ualtinok Jun 18, 2026
94aefc8
fix(agents): strip Pi-only thinking_level from OpenCode agent overrid…
ualtinok Jun 18, 2026
4308802
test: account for historian.disallowed_tools default in config migrat…
ualtinok Jun 18, 2026
fed6c97
test(pi): account for historian.disallowed_tools default in config mi…
ualtinok Jun 18, 2026
cabf06d
fix(reasoning): gate typed reasoning clearing to canonical Anthropic …
ualtinok Jun 18, 2026
f66ed71
fix(pi/reasoning): empty cleared reasoning instead of "[cleared]" (#1…
ualtinok Jun 18, 2026
fd1ba2d
fix(pi/reasoning): empty cleared reasoning instead of "[cleared]" (#1…
ualtinok Jun 18, 2026
89a4746
style: biome formatting (release lint clean, no logic change)
ualtinok Jun 18, 2026
21ef95c
fix(release): close two P1 data-integrity gaps + announcement/docs fo…
ualtinok Jun 18, 2026
2b1315c
docs: v0.26.0 release notes
ualtinok Jun 18, 2026
d3b951b
release: v0.26.0
ualtinok Jun 18, 2026
57a98e3
chore(deps): bump esbuild and @remotion/cli (#170)
dependabot[bot] Jun 18, 2026
bfce553
chore(deps): bump ws and @remotion/cli (#171)
dependabot[bot] Jun 18, 2026
db7eae2
feat(config): memory.external schema — backend, recall sub-block, use…
Jun 11, 2026
5d0cbec
feat(memory): external memory backend (Hindsight) + creation tee
Jun 11, 2026
0f2bba1
fix(embedding): gate compartment P1 embedding on the embedding provid…
Jun 11, 2026
b7be664
feat(memory): session-start external recall — frozen snapshot, cache-…
Jun 11, 2026
dc35a0b
feat(memory): W2 corrective propagation + verify action + global-scop…
Jun 11, 2026
d9277ad
feat(status): external-memory section in ctx-status (W3)
Jun 11, 2026
4737cae
feat(core): child->parent session registry — root-session resolution …
Jun 11, 2026
53222fb
feat(tui): External Memory section in the status dialog
Jun 11, 2026
25167d7
fix(tui): detect local dev paths in tui.json magic-context entry
Jun 11, 2026
e39349f
fix(config): don't treat user config as untrusted project config
Jun 11, 2026
b7397c3
perf(models-dev): cache-first boot — seed from persisted cache, refre…
Jun 12, 2026
f83c068
fix(rebase): complete v0.24 resolution — embedding consumer shape, mi…
Jun 14, 2026
aae73ad
fix(memory): tighten external-recall embedding model-guard + regressi…
Jun 14, 2026
78bedb7
feat(pi): arm external-memory backend + ctx-memory tee/W2/verify/glob…
Jun 14, 2026
026b856
feat(pi): external-memory session recall + m[0]/m[1] render + ctx-sea…
Jun 14, 2026
cfccc86
style: apply biome lint fixes to external-memory wiring
Jun 14, 2026
2a8cd71
fix(pi): exclude external m[1] delta from pressure refold (cache parity)
Jun 14, 2026
a518920
fix(pi): render profile slice in external m[1] delta
Jun 14, 2026
c07b550
fix(memory): make external-recall model-guard test exercise real dedup
Jun 14, 2026
5b95697
docs(external-memory): document external memory backend (ARCHITECTURE…
Jun 16, 2026
d2e0a6f
docs(external-memory): clarify profile slice merges into user-profile…
Jun 16, 2026
db3213e
fix(db): eliminate 'database is locked' plugin-load failures
Jun 19, 2026
b462755
fix(concurrency): centralize write transactions with bounded SQLITE_B…
Jun 20, 2026
3688e25
fix(dashboard): classify memory.external in ConfigEditor coverage man…
Jun 20, 2026
1abddf6
fix(e2e): set busy_timeout in memory-injection seedMemory
Jun 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
52 changes: 52 additions & 0 deletions .alfonso/plans/workspaces-callsite-inventory.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# Workspaces call-site inventory (plugin side)

Generated from grep over `packages/plugin/src` and `packages/pi-plugin/src` for:
`getMemoriesByProject`, `getMaxMemoryId`, `getMemoryMutationsForRender`,
`getMaxMemoryMutationId`, `readNewMemoriesForM1`, `searchMemoriesFTS`, and
`getProjectMemoryEpoch`.

Test-only call sites are intentionally omitted below; they exercise the single-project primitives directly unless named as new workspace regressions.

## packages/plugin

| File:line | Call | Status | Justification |
| --- | --- | --- | --- |
| `src/hooks/magic-context/inject-compartments.ts:320` | `getMemoriesByProject` in legacy `prepareCompartmentInjection` | gated-single-identity | Legacy v1 compartment injection path uses the existing `memory_block_cache` contract. The m[0]/m[1] path below is the workspace-aware path; single-project bytes stay unchanged here. |
| `src/hooks/magic-context/inject-compartments.ts:870` | local `getMaxMemoryId` helper definition | gated-single-identity | Preserved for the byte-identity path. Workspace callers use `getMaxMemoryIdForProjects`. |
| `src/hooks/magic-context/inject-compartments.ts:900` | local `getProjectMemoryEpoch` helper definition | gated-single-identity | Preserved for the byte-identity path. Workspace HARD decisions compare `computeWorkspaceEpochFingerprint`. |
| `src/hooks/magic-context/inject-compartments.ts:925` | `getProjectMemoryEpoch` in `readCurrentM0SnapshotMarkers` | converted | Workspace marker also records `workspaceFingerprint`; `mustMaterialize` compares fingerprint when `identities.length > 1`, plain epoch otherwise. |
| `src/hooks/magic-context/inject-compartments.ts:933` | `getMaxMemoryId` in `readCurrentM0SnapshotMarkers` | converted | Workspace branch uses `getMaxMemoryIdForProjects(expandedIdentities)`, single branch calls original helper. |
| `src/hooks/magic-context/inject-compartments.ts:939` | `getMaxMemoryMutationId` in `readCurrentM0SnapshotMarkers` | converted | Workspace branch uses `getMaxMemoryMutationIdForProjects(expandedIdentities)`, single branch unchanged. |
| `src/hooks/magic-context/inject-compartments.ts:1501` | `getMemoriesByProject` in `materializeM0` | converted | Workspace branch reads `getMemoriesByProjects(expandedIdentities)` and applies source attribution/fair trim; single branch unchanged. |
| `src/hooks/magic-context/inject-compartments.ts:1589` | `getMaxMemoryId` in Phase-3 stale read | converted | Workspace branch uses union max; single branch unchanged. |
| `src/hooks/magic-context/inject-compartments.ts:1596` | `getMaxMemoryMutationId` in Phase-3 stale read | converted | Workspace branch uses union max; single branch unchanged. |
| `src/hooks/magic-context/inject-compartments.ts:1828` | `getMemoryMutationsForRender` in memory-updates | converted | Workspace branch uses `getMemoryMutationsForRenderByProjects(expandedIdentities)`, single branch unchanged. |
| `src/hooks/magic-context/inject-compartments.ts:1887` | `readNewMemoriesForM1` in `renderM1WithMetadata` | converted | Workspace branch uses `readNewMemoriesForM1Union(expandedIdentities)`, single branch unchanged. |
| `src/hooks/magic-context/inject-compartments.ts:2187` | `getMemoriesByProject` in `renderFreshM0NonPersisted` | converted | Workspace fallback reads union memories and applies attribution/fair trim; single fallback unchanged. |
| `src/features/magic-context/search.ts:392` | `searchMemoriesFTS` | converted | Workspace branch uses `searchMemoriesFTSUnion(expandedIdentities)`; single branch unchanged. |
| `src/features/magic-context/search.ts:516` | `getMemoriesByProject` | converted | Workspace branch uses `getMemoriesByProjects(expandedIdentities)`; single branch unchanged. |
| `src/tools/ctx-memory/tools.ts:376` | `getMemoriesByProject` for `list` | gated-single-identity | `list` remains a project-local/dreamer maintenance listing; requested widening is update/archive visibility. |
| `src/hooks/magic-context/m0-token-breakdown.ts:98` | `getMemoriesByProject` cold-start token estimate | gated-single-identity | Token sidebar falls back only before m[0] exists; materialized m[0] is measured from bytes. It is not a render/tool/search behavior path. |
| `src/hooks/magic-context/compartment-runner-incremental.ts:349` | `getMemoriesByProject` for historian prompt context | gated-single-identity | Historian memory extraction remains session-own-project scoped; workspace rendering/search/tool visibility does not change write/extraction scope. |
| `src/features/magic-context/memory/storage-memory.ts:534` | union helper calls `getMemoriesByProject` when arity=1 | gated-single-identity | Intentional byte-identity short-circuit. |
| `src/features/magic-context/memory/storage-memory-fts.ts:88` | union helper calls `searchMemoriesFTS` when arity=1 | gated-single-identity | Intentional byte-identity short-circuit. |
| `src/features/magic-context/storage-memory-mutation-log.ts:181` | union helper calls `getMemoryMutationsForRender` when arity=1 | gated-single-identity | Intentional byte-identity short-circuit. |
| `src/features/magic-context/storage-memory-mutation-log.ts:214` | union helper calls `getMaxMemoryMutationId` when arity=1 | gated-single-identity | Intentional byte-identity short-circuit. |

## packages/pi-plugin

| File:line | Call | Status | Justification |
| --- | --- | --- | --- |
| `src/inject-compartments-pi.ts:815` | `getMaxMemoryMutationId` in current markers | converted | Workspace branch uses `getMaxMemoryMutationIdForProjects(expandedIdentities)`, single branch unchanged. |
| `src/inject-compartments-pi.ts:976` | `getMemoriesByProject` in direct `renderM0Pi` | converted | Workspace branch uses `getMemoriesByProjects(expandedIdentities)` with source attribution/fair trim; single branch unchanged. |
| `src/inject-compartments-pi.ts:1145` | `getMemoriesByProject` in frozen m[0] inputs | converted | Workspace branch reads union memories in the frozen transaction; single branch unchanged. |
| `src/inject-compartments-pi.ts:1166` | `getMaxMemoryMutationId` in frozen markers | converted | Workspace branch uses union max; single branch unchanged. |
| `src/inject-compartments-pi.ts:1487` | `getMemoryMutationsForRender` in Pi memory-updates | converted | Workspace branch uses `getMemoryMutationsForRenderByProjects(expandedIdentities)`, single branch unchanged. |
| `src/inject-compartments-pi.ts:1586` | `getMemoriesByProject` for Pi new memories | converted | Workspace branch uses `readNewMemoriesForM1Union(expandedIdentities)`, single branch unchanged for byte identity. |
| `src/inject-compartments-pi.ts:2203` | `getMemoriesByProject` for result memory count | converted | Workspace branch counts `getMemoriesByProjects(expandedIdentities)`, single branch unchanged. |
| `src/tools/ctx-memory.ts:347` | `getMemoriesByProject` for `list` | gated-single-identity | `list` remains project-local maintenance; update/archive are widened to workspace visibility. |
| `src/pi-historian-runner.ts:426` | `getMemoriesByProject` in historian runner | gated-single-identity | Historian extraction/prompting remains session-own-project scoped; workspace visibility is render/search/tool-time only. |

## Definitions and tests

The primitive definitions (`storage-memory.ts`, `storage-memory-fts.ts`, `storage-memory-mutation-log.ts`) and their unit tests deliberately continue to call the single-project APIs. New union helpers have arity-1 short-circuits so un-workspaced callers keep the exact existing SQL/order/bytes.
14 changes: 14 additions & 0 deletions .alfonso/release-notes/dashboard-v0.6.0.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Dashboard v0.6.0

Adds the Workspaces panel and fixes model dropdowns for version-manager installs.

## New: Workspaces panel

Manage cross-project workspaces directly from the dashboard. Create a workspace, add member projects, and choose which memory categories members share with each other (Constraints only, by default). Edits are staged per card — add and remove members, toggle categories, then **Save** once, so the change applies as a single update instead of one per click.

Memories from other workspace members appear in each member session labelled by their source project. (Requires the v0.23.2 plugin, which owns the workspace schema; the panel degrades gracefully on older plugin versions.)

## Fixes

- **Model dropdowns were empty for version-manager installs.** If your `pi` or `opencode` binary is installed by a version manager (mise, nvm, fnm, volta, asdf), the dashboard couldn't find it — the desktop app doesn't inherit your shell `PATH` — so the model comboboxes came up empty. The dashboard now resolves the binary through your login shell (and known version-manager directories), bounded by a short timeout.
- **Workspaces panel layout** — corrected double padding on the panel and tidied the shared-categories checkboxes to match the dark theme; Save/Discard now appear only when there are unsaved edits.
43 changes: 43 additions & 0 deletions .alfonso/release-notes/dashboard-v0.7.0.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
## Magic Context Dashboard v0.7.0

### Cache Diagnostics, rebuilt

The Cache page now tracks each session in its own bounded window instead of a
shared global event pool, so the Recent Sessions cards show **per-session**
hit-ratio, event count, and bust count that no longer drift with how busy other
sessions are.

- **Per-session windows.** Pick how many recent events to keep per session
(200 / 400 / 600 / 800 / 1000); cards and the timeline both reflect exactly
that window.
- **Live, reliable refresh.** A 1-second loop re-lists sessions and fetches only
*new* events per session, so the Recent Sessions strip stays current without
the manual pause/unpause it sometimes needed before.
- **One-line strip.** Recent Sessions render as a single row of equal-width
cards; how many show adapts to the window width.

### Cache timeline

- **Context-scaled bars.** Bar height is the prompt size relative to the model's
context window, with an inner cached segment — so you can see the prompt grow
and drop across a session at a glance.
- **Accurate severity.** Cache health is judged by comparing each step's cached
read against what the previous step predicted, instead of a raw ratio that
false-warned on large file reads. Providers that don't report cache data show
as "unknown" rather than a misleading bust.
- **Magic-Context-attributed drops.** Drop markers correlate to the actual
scheduler decision recorded by the plugin (execute / materialize / emergency),
shown in a tooltip. The blue drop line is now clickable and jumps to the step.
- **Importance heat-map.** The compartment strip in the session view colors each
segment by its importance band (critical / high / medium / low) instead of a
meaningless rainbow.

### Memories & projects

- **Edit a memory's category** directly from the dashboard (#158).
- **Non-git projects** now appear in the project picker and filter their memories
correctly (#160).
- **Real project names.** Sessions that ran in a git repo with no remote/commit
no longer display as "/"; they show their actual directory.
- **Windows model dropdown** is populated for version-manager installs
(mise / nvm / fnm / volta / asdf) and via a PATH fallback (#149).
33 changes: 33 additions & 0 deletions .alfonso/release-notes/v0.24.0.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# v0.24.0

Adds cross-project workspaces and searchable session history, fixes a Pi context-overflow, and removes several prompt-cache busts.

## New: cross-project workspaces

Group related repositories (for example a set of microservices) into a **workspace** and share project memories across them. Member sessions see their own project's memories plus the memories other members choose to share — each one labelled by its source repo. Per-workspace checkboxes control *which* memory categories are shared (Constraints only, by default), so shared knowledge stays relevant and project-specific noise stays local.

Workspaces are managed from the dashboard (Workspaces panel): create a workspace, add member projects, pick the shared categories, and Save. A single project belongs to at most one workspace. Single-project users are completely unaffected — the rendered context is byte-identical to before.

## New: searchable session history

`ctx_search` can now find older discussion by **meaning**, not just keywords. Magic Context embeds each compacted history segment so the agent can recall what was discussed weeks ago even when it doesn't remember the exact wording.

New history is embedded automatically as the session grows. To make an **existing** session's older history searchable, run **`/ctx-embed-history`** once — it backfills that session's compacted history in the background while you keep working. (You'll also see a reminder in the startup dialog.)

Search ranking was improved alongside this: verbatim matches now rank correctly, and common acronyms no longer flood results.

## Fixes

- **Pi: sessions could overflow the model context while still reporting moderate usage.** Pi only refreshed its context measurement at the end of each turn, so a long tool-heavy turn could balloon the request past the model's window before the next measurement — the request was rejected even though the status line still read, say, 68%. Pi now floors its pressure with a live forward estimate (recomputed every step), so it sheds context *before* the request overflows. (OpenCode was never affected — it already measures per step.)

- **GitHub Copilot: `tool_use`/`tool_result` adjacency error on fresh sessions (#135).** Empty-content message markers that Anthropic silently drops were surviving onto the Copilot (openai-compatible) wire and breaking the required tool-call/result pairing. They're now stripped only for providers that drop them.

- **Fewer prompt-cache busts.** Three cases that were re-billing large prompt prefixes unnecessarily:
- Editing a project doc (`ARCHITECTURE.md` / `STRUCTURE.md`) no longer rebuilds the cached history baseline — the new content folds in on the next natural cache turn instead.
- A processed screenshot in an older message no longer loses its image data mid-conversation on a routine pass.
- When the cached history baseline *does* have to rebuild (a memory change, a model switch, idle timeout), any pending tool-output cleanup is now folded into that same rebuild instead of causing a second bust a moment later.

## Also in this release

- **Setup wizard (`npx @cortexkit/magic-context`)** now lists the models you actually have with type-ahead filtering, instead of a fixed recommendation list, and explains what the historian and dreamer do (neither needs a frontier model). Adds a `--dry-run` mode. (#144)
- **Protected-tail** snapshot is refreshed at history-summarization time, preventing a rare case where the summarizer could starve and stop reclaiming context.
23 changes: 23 additions & 0 deletions .alfonso/release-notes/v0.24.1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# v0.24.1

Patch release: a fix for session titles never generating, fewer cache busts, embedding-endpoint safety, calmer reduction reminders, and a persistent TUI sidebar.

## Fixes

- **Session titles generate again.** With the plugin enabled, a new session could keep the default `New session - <timestamp>` title forever (most visibly in non-git directories). Magic Context injects its compacted history as synthetic context messages, and those weren't flagged correctly, so OpenCode's auto-title step counted them as real user turns and skipped titling. The injected history is now marked synthetic — it still reaches the model, but no longer blocks the title. ([#129](https://github.com/cortexkit/magic-context/issues/129))

- **No embedding under the wrong model.** When a local OpenAI-compatible endpoint (LM Studio, Ollama) serves a *different* embedding model than the one you configured — e.g. a shared endpoint where another tool keeps a smaller model loaded — the returned vectors have a different dimensionality and don't belong in your index. Magic Context now checks the model the endpoint reports and refuses mismatched vectors instead of silently corrupting the store. A clear log line names what was requested vs. served.

- **Embedded history chunks no longer get truncated.** Chunks are now sized with a safety margin below the endpoint's input limit, so cross-tokenizer rounding can't push a chunk slightly over the limit and clip its tail.

- **Two more prompt-cache busts removed.** (1) A stuck overflow-recovery flag could keep forcing a session to behave as if it were at the emergency ceiling — re-running cleanup every turn — after a `/ctx-recomp` had already relieved the pressure; the flag now clears when there's nothing left to compact and on a successful recomp. (2) A dropped older message could flip between two equivalent placeholder forms across passes, changing one block of the prompt prefix and re-billing the tail; the two placeholder paths now agree byte-for-byte.

## Improvements

- **Quieter, better-calibrated reduction reminders.** The reminder that nudges the agent to drop spent tool output was over-firing — it measured against the wrong budget, so a modest pile triggered "urgent" on a large-context model. It now scales against the agent's actual working window, ignores output that can't be dropped yet (the protected recent window), and is worded as advisory rather than a directive. If the agent has already reduced enough, approaching the threshold no longer nags it.

- **Persistent TUI sidebar preferences.** The Magic Context sidebar can now remember its collapsed/expanded state across restarts, and you can reorder it, rename its header, or hide individual sections — via a shared `~/.config/opencode/tui-preferences.jsonc` file (one `magic-context` key). See the [TUI sidebar reference](https://docs.cortexkit.io/magic-context/reference/tui-sidebar/).

## Also in this release

- New documentation: **[why your token count can stay high after the execute threshold](https://docs.cortexkit.io/magic-context/concepts/context-reduction/#why-your-token-count-can-stay-high-after-the-threshold)** — the execute threshold compresses older conversation; tool outputs are reclaimed by `ctx_reduce` or the 85% safety net, not by the threshold itself.
Loading
Loading