Commit graph

769 commits

Author SHA1 Message Date
yakamoz221
08b24b8499 feat(memory-graph): Milestone 3 polish — legend, isolate, keyboard nav
- Collapsible legend: click "Legend" to expand/collapse (caret rotates,
  pointer-events re-enabled now that the legend has something clickable).
- "Isolate connected component" detail-panel action: a pure
  _componentNodeIds() BFS (undirected, no DOM dependency) feeds into
  _applyFilters() alongside the existing category filter, with a toggle
  button and a banner reporting how many memories are shown. Clears on
  background click and on every graph reload.
- Keyboard shortcuts: `f` focuses the search box; arrow keys cycle
  selection through the currently visible (filter-respecting) nodes and
  re-center the camera. Both guarded against firing while typing or
  while the modal is minimized.
- MODULE_SUMMARY.md: documented the memoryGraph.js module.
2026-07-31 00:49:59 +03:00
yakamoz221
3681be1834 feat(memory): add Memory Graph View frontend (Milestone 2)
Cytoscape.js-based interactive graph over the memory system's
derived edges (similarity/session/manual), following the repo's
no-bundler vendoring and lazy-modal conventions.

- static/js/memoryGraph.js: modal shell, lazy Cytoscape load, fetch +
  client-side filter/search, node/edge styling with dark/light theme
  support via CSS custom properties, node selection + neighborhood
  highlighting, link-mode manual relationship editing, detail panel
  (pin/edit/delete/link management), demo-data fallback.
- static/lib/cytoscape.min.js: vendored 3.34.0 (MIT) via npm pack.
- static/index.html, static/app.js, static/js/init.js: "Memory Graph"
  nav item (mirrors the Calendar entry), privilege gating
  (can_manage_memory), Customize-UI visibility entry, /memory-graph
  deep link.
- static/style.css: .memory-graph-* block, appended only.

Visually verified end-to-end against a real seeded dataset (render,
node click + neighborhood highlight, detail panel, inline edit,
search, category filters, similarity slider, link-mode create,
theme switch) — fixed two bugs found in that pass along the way:
the detail panel's `hidden` class was never removed on selection,
and search left stale selection-highlight opacity masking matches.
2026-07-31 00:49:59 +03:00
RaresKeY
25c9e735ef
fix(email): open settings after OAuth callback (#5803)
Some checks failed
CodeQL / Analyze (actions) (push) Has been cancelled
CodeQL / Analyze (javascript-typescript) (push) Has been cancelled
CodeQL / Analyze (python) (push) Has been cancelled
ci / docker publish / build (amd64) (push) Has been cancelled
ci / docker publish / build (arm64) (push) Has been cancelled
ci / docker publish / merge manifest + tag (push) Has been cancelled
2026-07-30 14:57:07 +01:00
RaresKeY
28c333e647
fix(email): preserve OAuth SMTP security (#5802) 2026-07-30 12:24:39 +01:00
Husam
578312200a
fix(markdown): restore extracted blocks verbatim so $& and $$ survive (#5768)
The placeholder-restore pass in mdToHtml put code, math, mermaid and
allowed-HTML blocks back with a string replacement, so String.replace read
`$&`, `` $` ``, `$'` and `$$` in the *replacement* as substitution patterns.
A fenced block containing them rendered corrupted: `$&` re-inserted the
placeholder (`perl -pe 's/world/$& again/'` became
`s/world/___CODE_BLOCK_0___amp; again/`), `` $` `` and `$'` spliced in the
surrounding document, and `$$` collapsed to a single `$`.

Pass a function replacer at all four sites, matching the inline-code site
below them, which was already fixed this way. A function's return value is
inserted verbatim with no `$` interpretation.

The inline-code comment claimed `echo $1` would be read as a back-reference;
with a string search value there are no capture groups, so `$1` is already
literal. Reworded to name the four sequences that do corrupt.

Fixes #5663
2026-07-30 10:48:31 +01:00
pewdiepie-archdaemon
d8a2059df8 Merge verified Odysseus fixes
Some checks failed
CodeQL / Analyze (actions) (push) Has been cancelled
CodeQL / Analyze (javascript-typescript) (push) Has been cancelled
CodeQL / Analyze (python) (push) Has been cancelled
ci / docker publish / build (amd64) (push) Has been cancelled
ci / docker publish / build (arm64) (push) Has been cancelled
ci / docker publish / merge manifest + tag (push) Has been cancelled
2026-07-23 14:49:02 +00:00
RaresKeY
d49629fa14 fix(reminders): support OAuth SMTP accounts (#5649) 2026-07-22 16:03:35 +02:00
RaresKeY
cc4c7f4263 chore: update repository URLs after organization transfer (#5622) 2026-07-20 16:43:47 +02:00
RaresKeY
b9cafd67a1 feat(models): define capability schema and readers (#2739)
* feat(models): define capability schema and readers

* fix(models): harden Google catalog probing

Restrict native catalog probing to the Gemini host, keep provider keys out of request URLs, filter non-chat model resources, and preserve the manual refresh default in the built-in Google add flow.
2026-07-18 09:40:58 +01:00
Astarte
bff38a4406 fix(cleanup): update MODULE_SUMMARY and remove dead MEMORY_DOC paths (#4411) (#5160)
* docs: update static/js/MODULE_SUMMARY.md to reflect current ES6 frontend

Rewrite the stale module summary to match the current no-build,
ES6-module frontend architecture. Adds coverage of app.js orchestration,
the chat/SSE pipeline (chat.js, chatStream.js, chatRenderer.js,
streamingRenderer.js), new subsystems (research/, compare/, document
streaming, cookbook*, skills.js), and removes the obsolete <script> load
order assumptions.

* cleanup: remove dead MEMORY_DOC / memory_doc paths (closes #4411)

Removes the unused MEMORY_DOC constant and the matching DataConfig
memory_doc field / set_data_paths entry. No runtime code imports or
references these paths, so this is a no-behavior-change dead-code
cleanup under the storage-architecture tracker #4377.
2026-07-11 17:06:19 +01:00
falabellamichael
c2d2075833 fix(stabilization): harden attachment lifecycle and agent guard signals (#5420)
* fix: harden stabilization attachment and agent guards

* fix(uploads): preserve durable references during cleanup

* fix(uploads): close cleanup and compaction races
2026-07-11 15:14:14 +01:00
mashallow
d02565ce32 fix(markdown): stop currency dollars rendering as KaTeX inline math (#5132) 2026-07-11 14:45:57 +01:00
RaresKeY
b3432873fb fix(email): clear bulk selection on context change (#5229) 2026-07-11 14:12:12 +01:00
DL Techy
e5ef8cf4bf fix(chat): Expand user chat bubble edit textbox width (#3963)
* fix(chat): Expand user chat bubble edit textbox width

- Update user chat bubble width from `fit-content` to `85%` to ensure consistency with the AI chat bubble edit textbox width.

* style(chat): Refine user message bubble width logic

- Change general bubble width to `fit-content`
- Set width to 85% specifically for user messages containing a `textarea`
2026-07-11 13:52:14 +01:00
Afonso Coutinho
a6efea5486 fix: _matchesCombo crashes on non-string keybind from server (#2049) 2026-07-11 03:15:19 +01:00
pewdiepie-archdaemon
c42609755f Stabilize local dev merge
Align regression tests with the current Odysseus behavior after merging origin/dev into local main.

- keep phone/name-only contacts valid and cover null email without crashes

- pin explicit web-search false form submission in chat.js

- update Cookbook dependency/download completion tests for combined live + persisted output

- expose SGLang OS package repair hints from backend diagnosis

- treat MLX and MLX-community repos as servable on Apple Metal while keeping CUDA behavior unchanged

- keep desktop new-chat coverage on the shared preferred-model helper

- remove a hardcoded crop overlay portal z-index literal

- include the local agent-loop cleanup that removes the old manage_notes reminder repair shim

Verified with: docker run --rm -v /home/pewds/odysseus-cookbook-fresh:/app -w /app odysseus-cookbook-fresh-odysseus python3 -m pytest -q (4515 passed, 4 skipped).
2026-07-07 01:15:20 +00:00
pewdiepie-archdaemon
4c24d5d9a6 Merge remote-tracking branch 'origin/dev'
# Conflicts:
#	routes/contacts_routes.py
2026-07-07 00:51:34 +00:00
pewdiepie-archdaemon
a1a14bd5c9 Checkpoint Odysseus local update 2026-07-07 00:50:07 +00:00
Ocean Bennett
37aeefc260 fix(security): sanitize email rich body render path (#5212) 2026-07-04 23:21:18 +02:00
pewdiepie-archdaemon
2fb3a316fd Hide untagged reasoning dumps in chat 2026-07-03 03:59:42 +00:00
pewdiepie-archdaemon
25ba07a5b1 Open documents from native tool outputs 2026-07-03 02:20:23 +00:00
pewdiepie-archdaemon
ac55f170ce Add AI edit command box to gallery editor 2026-07-03 02:13:45 +00:00
pewdiepie-archdaemon
7f833ee9d2 Add bulk email attachment downloads 2026-07-03 01:15:40 +00:00
pewdiepie-archdaemon
5bcd22873f Fix stale streams and cookbook task controls 2026-07-03 00:45:43 +00:00
Moniz
c9e5def29e fix(mobile): stack the model-comparison grid into one column on phones (#4979)
The comparison grid hard-codes 2-4 equal columns with no phone breakpoint, so at
390px two models get ~178px columns and four get ~88px columns. Each column is a
full scrolling chat, so content is unreadably over-wrapped and clipped. On
phones (<=768px), stack the panes into a single scrollable column. Desktop is
unaffected.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-02 17:28:23 +02:00
holden093
9d07400b80 fix(ui): prevent race condition in default chat model dropdown init (#5024)
Setting epSel.value triggered an async change event whose handler
called refreshModels('') — wiping the correct model selection that
refreshModels(settings.default_model) had just applied moments earlier.
The dropdown silently fell back to the alphabetically-first model
(deepseek-v4-flash instead of qwen-3.6-35B-A3B).

Moved the change listener registration to after the settings block
so the async change event fires before any listener exists. The
utility and teacher sections already followed this pattern.
2026-07-02 17:05:55 +02:00
pewdiepie-archdaemon
2918ef71ea Support mobile enter for queued agent prompts 2026-07-01 14:42:52 +00:00
pewdiepie-archdaemon
246b8d88f0 Show fallback model in picker 2026-07-01 13:53:51 +00:00
pewdiepie-archdaemon
22e0c717eb Fix merged test regressions 2026-07-01 11:12:55 +00:00
pewdiepie-archdaemon
5a0e4e4b3f Repair document tool args and metrics cleanup 2026-07-01 10:15:45 +00:00
pewdiepie-archdaemon
1933201117 Merge remote-tracking branch 'origin/dev'
# Conflicts:
#	routes/document_routes.py
2026-07-01 10:11:22 +00:00
pewdiepie-archdaemon
0b4ef7187f Stabilize chat and cookbook workflows 2026-07-01 10:09:25 +00:00
RaresKeY
354853906a fix(agent): preserve bare email tool parity (#5075) 2026-06-30 19:20:56 +01:00
pewdiepie-archdaemon
39335b7bed Hide font size in markdown preview 2026-06-30 13:57:07 +00:00
pewdiepie-archdaemon
e32eb03d7c Preserve HTML email quote history 2026-06-30 12:48:47 +00:00
pewdiepie-archdaemon
2c0406c3e3 Fallback model picker to available model 2026-06-30 11:56:36 +00:00
pewdiepie-archdaemon
6708fab831 Keep email composer open during fast edits 2026-06-30 11:54:34 +00:00
pewdiepie-archdaemon
a094426242 Speed up email composer typing 2026-06-30 11:49:20 +00:00
pewdiepie-archdaemon
c374c6e028 Preserve quoted email history during AI edits 2026-06-30 10:52:25 +00:00
pewdiepie-archdaemon
a1b317df87 Write email replies into open composer 2026-06-30 10:48:08 +00:00
pewdiepie-archdaemon
7887d86537 Merge remote-tracking branch 'origin/dev' 2026-06-30 10:26:46 +00:00
pewdiepie-archdaemon
e4e181aabb Move task start-now pill up 2026-06-30 10:25:53 +00:00
pewdiepie-archdaemon
1f1a5460ca Fix task activity scrolling and background spam 2026-06-30 08:16:19 +00:00
pewdiepie-archdaemon
3468503bd3 Show thumbnails on past research cards 2026-06-30 08:00:01 +00:00
pewdiepie-archdaemon
affc8b1c37 Improve document agent streaming and chat metrics 2026-06-30 05:14:41 +00:00
pewdiepie-archdaemon
81193dca85 Add hover labels to mini sidebar buttons 2026-06-30 03:26:55 +00:00
pewdiepie-archdaemon
f351555537 Auto scan cookbook hardware when cache is missing 2026-06-30 02:55:25 +00:00
pewdiepie-archdaemon
0b56c064ee Pause background tasks while Odysseus is active 2026-06-30 02:12:30 +00:00
pewdiepie-archdaemon
38e345d476 Gate email auto translate behind active chat 2026-06-30 02:08:57 +00:00
pewdiepie-archdaemon
edbc9131b7 Fix incognito agent mode and cookbook tmux preview 2026-06-30 01:47:48 +00:00