767 Commits

Author SHA1 Message Date
pewdiepie-archdaemon 1aa3af750f Adjust serve preset and memory field offsets 2026-06-27 22:15:07 +00:00
pewdiepie-archdaemon 20f5fa905d Align runtime note with serve presets 2026-06-27 22:13:20 +00:00
pewdiepie-archdaemon d33e3fd6f5 Move core serve memory fields further left 2026-06-27 22:11:18 +00:00
pewdiepie-archdaemon 59c2cbe405 Move core serve memory fields farther left 2026-06-27 22:10:15 +00:00
pewdiepie-archdaemon 80b287ee56 Move core serve memory fields left 2026-06-27 22:09:14 +00:00
pewdiepie-archdaemon 97f8b3bcd3 Add icons to cookbook engine filter 2026-06-27 22:01:23 +00:00
pewdiepie-archdaemon 6d31cfcf4c Move vllm block size left again 2026-06-27 21:55:53 +00:00
pewdiepie-archdaemon 91a94cf00a Move vllm block size left 2026-06-27 21:54:18 +00:00
pewdiepie-archdaemon 7d3f8d6527 Move vllm attention farther right 2026-06-27 21:49:35 +00:00
pewdiepie-archdaemon 3abe4f75b7 Lower CPU llama memory row 2026-06-27 21:48:19 +00:00
pewdiepie-archdaemon 60e13cf8db Adjust CPU llama row and VRAM readout 2026-06-27 21:45:04 +00:00
pewdiepie-archdaemon c288fb9f4a Match launch command hover surface 2026-06-27 21:42:06 +00:00
pewdiepie-archdaemon d46b08d8c6 Darken cookbook launch command 2026-06-27 21:39:26 +00:00
pewdiepie-archdaemon 4db0feed10 Nudge vllm attention field right 2026-06-27 21:38:34 +00:00
pewdiepie-archdaemon 46e01b49f4 Increase llama mode toggle height 2026-06-27 21:37:11 +00:00
pewdiepie-archdaemon eb51935074 Lower stabilized llama advanced block 2026-06-27 21:34:37 +00:00
pewdiepie-archdaemon c0ee638fcc Stabilize llama advanced row spacing 2026-06-27 21:33:13 +00:00
pewdiepie-archdaemon edf06a8048 Tighten llama memory row gap again 2026-06-27 21:31:00 +00:00
pewdiepie-archdaemon 5bc3a69251 Tighten llama memory row gap 2026-06-27 21:29:19 +00:00
pewdiepie-archdaemon a193e6b815 Tighten first llama advanced row gap 2026-06-27 21:28:14 +00:00
pewdiepie-archdaemon 7fe55a2942 Fine tune llama advanced spacing 2026-06-27 21:25:37 +00:00
pewdiepie-archdaemon 0c53672ae9 Adjust llama advanced top spacing 2026-06-27 21:23:39 +00:00
pewdiepie-archdaemon 1eebfb862e Lower cookbook serve top row 2026-06-27 21:20:27 +00:00
pewdiepie-archdaemon 0ee2e0069f Tint Ollama engine icon 2026-06-27 21:18:15 +00:00
pewdiepie-archdaemon c157553fb7 Refine llama advanced row spacing 2026-06-27 21:17:24 +00:00
pewdiepie-archdaemon cbc5d6c341 Simplify llama MTP token input 2026-06-27 21:14:21 +00:00
pewdiepie-archdaemon a0f6f27ff7 Nudge llama advanced rows right 2026-06-27 21:13:20 +00:00
pewdiepie-archdaemon 4ced5da463 Tighten llama advanced vertical spacing 2026-06-27 21:12:12 +00:00
pewdiepie-archdaemon 3b7e6bb3fd Nudge vllm attention field 2026-06-27 21:11:18 +00:00
pewdiepie-archdaemon 277879beec Tighten llama advanced rows further 2026-06-27 21:10:38 +00:00
pewdiepie-archdaemon d45543abaa Tighten llama advanced rows 2026-06-27 21:07:57 +00:00
pewdiepie-archdaemon 448ed1b4e9 Limit cookbook spacing change to advanced tab 2026-06-27 21:05:07 +00:00
pewdiepie-archdaemon 912a4e2ba7 Color cookbook context fit notes 2026-06-27 21:02:10 +00:00
pewdiepie-archdaemon 424ebfa5cb Raise unified llama context estimate 2026-06-27 20:56:57 +00:00
pewdiepie-archdaemon f177d38c62 Clamp unified llama context estimate 2026-06-27 20:52:31 +00:00
pewdiepie-archdaemon 6d78f6f7f7 Add cookbook empty scan buttons 2026-06-27 20:48:24 +00:00
pewdiepie-archdaemon e9446f41c0 Register email auto translate task 2026-06-27 20:43:56 +00:00
Arpit 2d194b26b9 fix(notes): allow inline editing of checklist items (#4832)
* Refresh README screenshot

* fix(notes): allow inline editing of checklist items

* fix(notes): delete checklist item if inline edit is empty

* fix(notes): use debounce for text click to bypass toggle on double click

* fix(notes): use Edit button exclusively for inline edit to avoid UX delay on toggle

---------

Co-authored-by: pewdiepie-archdaemon <pewdiepie-archdaemon@users.noreply.github.com>
2026-06-27 17:37:28 +02:00
pewdiepie-archdaemon 1e4d06e6c5 Reduce cookbook startup polling 2026-06-27 13:50:21 +00:00
pewdiepie-archdaemon 4ab68b6566 Polish mobile UI and editor workflows 2026-06-27 13:05:44 +00:00
Rishi Sharma e1481218e9 feat: add dismiss (×) button to all toast notifications (#1355) (#1755)
* feat: add dismiss (×) button to all toast notifications (#1355)

* Refresh README presentation

* fix: reset pointer-events on toast dismiss button click

Action toasts set pointer-events:auto on #toast for their clickable
button, but the × close-button handler only cleared the auto-hide timer
without resetting pointer-events. This left an invisible fixed overlay
blocking clicks in the top-right area after manual dismissal.

- Add pointerEvents reset in both showToast and showError close handlers
- Add DOM behavior tests for pointer-events across all toast types

---------

Co-authored-by: pewdiepie-archdaemon <pewdiepie-archdaemon@users.noreply.github.com>
2026-06-26 14:02:35 +01:00
Hinode e86791702b fix: group selection drop-downs recreation and repopulation logic (#3424)
* fix: include in-memory templates in group participant character list

_getCharacterList() only fetched user templates from the /api/presets/templates
endpoint. When a character was just created in the Character tab, the async
auto-save to the templates API might not have completed by the time the Group
tab loaded its participant dropdown — causing newly created characters to be
missing.

Now also merges the in-memory userTemplates array from presets.js as a
fallback. These are updated as soon as the async save completes (via the
loadUserTemplates callback), so they bridge the gap between character creation
and API persistence.

Fixes #3207

* fix: optimistic userTemplates update on character save

Update the in-memory userTemplates array immediately when saveCustomPreset()
succeeds, before the fire-and-forget templates API POST completes. This
bridges the timing gap where _getCharacterList() calls getUserTemplates()
and gets stale data because loadUserTemplates() hasn't been triggered yet.

* test: verify group participant dropdown merges in-memory templates

Source-level guards for the #3207 fix:
- group.js imports and calls getUserTemplates() to merge in-memory templates
- presets.js exports getUserTemplates and does optimistic in-memory update on save

5 tests ensuring the fix can't be silently reverted.

* fix: generate client-side id for optimistic update, return shallow copy from getUserTemplates

1. New characters now get a 'user-<hex>' id immediately on save, matching
   the server's convention (uuid.uuid4().hex[:8]). Previously the id was ''
   which the merge guard in _getCharacterList filtered as falsy.

2. getUserTemplates() now returns [...userTemplates] so callers cannot
   accidentally mutate module state.

* fix(group.js): fix selection drop-downs behavior

- add an identifier to the selection drop-downs
  based on what type it is.
- fix behavior of continuously adding a row
  when a user clicks the "Group" tab button.
- fix behavior of not repopulating existing
  selection drop-downs whenever a user
  clicks the "Group" tab button.

* fix(#3207): remove duplicate of latest persona

- fix the duplication of the latest persona
  or character being shown in selection
  drop-downs.
- remove unnecessary blocks of code in
  `_getCharacterList()`
- add functionality to show error toast if saving
  a preset template/character fails.
- add functionality to revert optimistic update
  of preset template/character if saving fails.

* chore(group.js,preset.js): fix test & format errors

remove trailing whitespaces in lines 230 and 232
in /static/group.js

add back the expected syntax from
tests/test_group_character_dropdown.py

* fix(presets.js,group.js): fix runtime errors

as stated in a comment by @alteixeira20,
runtime errors exist for the applied fixes.

fixes:

- missing ending `]`
  querySelectorAll("select.preset-input[data-selection-type=character")
  in `group.js`
- spelling error in `modelSelection.vale` in `group.js`
- fix the ordering logic error in optimistic rollback where `Object.assign` is called first before the clone happens in `saveCustomPreset` in `presets.js`.
- add tests for the cloning logic bug with the same format as previous tests by checking the order of LOC in `tests/test_group_character_dropdown.py`.

---------

Co-authored-by: michaelxer <michaelxer@users.noreply.github.com>
Co-authored-by: Alexandre Teixeira <111787685+alteixeira20@users.noreply.github.com>
2026-06-26 13:35:25 +01:00
Dividesbyzer0 d5810e220e fix(cookbook): treat local Windows as Windows for serve commands (#3975)
* fix(cookbook): prefer native llama-server on local Windows

* fix(cookbook): harden local llama-server launch commands

* fix(cookbook): build serve commands for selected target
2026-06-26 13:13:01 +01:00
Kenny Van de Maele 39080917ce fix(ui): route tasks.js + skills.js dropdowns through topPortalZ() (#4768)
Fixes #4767. #4724 routed 16 body-portaled dropdowns through the shared
topPortalZ() helper so they always render just above the currently-raised tool
modal, but two were missed and still used a hardcoded z-index, so they hit the
same #4720 bug once a modal's bring-to-front counter climbed past the literal:

  - tasks.js _showTaskDropdown(): inline z-index:100000 on .task-dropdown
  - skills.js kebab menu (.skill-kebab-menu): z-index:100002 in style.css

Both now set zIndex from topPortalZ() after they are appended to the body,
matching the other migrated sites. The dead CSS z-index on .skill-kebab-menu is
removed (the inline value always wins). test_portal_dropdown_z_js.py gains a
source guard asserting both files use topPortalZ() and that no hardcoded
100000/100002 portal literal survives in either file or style.css.
2026-06-24 22:29:36 +02:00
Samy 070360d549 fix(cookbook): only block model launch on real port collisions (#4760)
* Fix #4507: only block model launch on real port collisions

Quick-run hardcoded port 8000 and never called _nextAvailablePort(), so
every launch collided. Both pre-launch guards (serve panel + quick-run)
were count-based and fired regardless of port.

- quick-run now auto-assigns a free port (8080 for llama.cpp)
- both guards parse the new port and only prompt on a real overlap,
  stopping only the colliding serve
- dialog reports the actual port instead of a hardcoded 8000

* refactor(cookbook): share _taskPort for port parsing; auto-assign llama.cpp port

Addresses review on #4760:
- _taskPort regex now matches --port= as well as --port (space)
- _nextAvailablePort and both launch guards reuse _taskPort instead of inline regex
- quick-run llama.cpp no longer pins 8080, so two can run concurrently

* fix(cookbook): _taskPort also parses -p; add port-parsing tests

Addresses review on #4760:
- _taskPort now matches -p <n> too, so it's the complete single reader
  (was missing the short flag that other readers already handle)
- add tests/test_cookbook_port_parsing_js.py covering the port forms,
  shared-reader reuse, and llama.cpp auto-assign

* test(cookbook): extract pure port helpers and test behavior

Addresses review on #4760: the prior tests only asserted source strings.
- extract portOf() and nextFreePort() into static/js/cookbookPorts.js
- cookbookRunning.js imports them; _taskPort and _nextAvailablePort delegate
- tests run the helpers via node and assert real behavior: all port forms
  (--port, --port=, -p, -p=), next-free-port skipping taken ports, and the
  same-port-clash / different-port-coexist outcome

---------

Co-authored-by: samy <samy@odysseus.boukouro.com>
2026-06-24 19:44:09 +02:00
pewdiepie-archdaemon 21d6e62179 Fix calendar recurrence controls 2026-06-24 11:11:07 +00:00
Joel Alejandro Escareño Fernández d23b501f3c feat(discovery): detect llama.cpp servers and label local providers (#4729)
* feat(discovery): detect llama.cpp servers and label local providers

Scan port 8080 (llama-server) and 11435 (APFEL) during discovery, fingerprint
llama.cpp via its native /props endpoint, and label well-known local serving
ports (8080 llama.cpp, 8000 vLLM, 1234 LM Studio, 11434 Ollama) consistently
in both the Python provider helper and the JS endpoint UI. Adds a llama.cpp
hint to the /setup slash command.

* fix(discovery): don't infer the serving tool from the port alone

Per review: vLLM, SGLang, llama.cpp and plain OpenAI-compatible servers all
share 8000/8080, so labeling by port mislabels real setups (a vLLM box on 8080
shown as llama.cpp). Drop the port->tool assertions from _provider_label and
providerLabel; the authoritative signal is the /props fingerprint done during
discovery, which is unchanged. Loopback now reads a neutral 'local endpoint' /
'Local'. Tests updated to assert the neutral labels.
2026-06-23 23:39:56 +02:00
Jakub Grula b921e9121a feat: Allow admins to choose if they want to share defaults (#4752)
* First bare fix

* Adding the option toggle

* toggle function fix

* Final fix, added missing /auth/

* Extended toggle text & added tests

* Comments change

* Description toggle change

* br tag fix

* description change based on suggestion
2026-06-23 23:06:45 +02:00
Skoh 4c090b268d feat(ui): add toggle for padding around chat area (#4691) 2026-06-23 22:20:17 +02:00
Max Hsu e82a09cf44 fix(chat): strip executed email tool fences from the live stream (#3993) (#4275)
* fix(chat): strip executed email tool fences from the live stream (#3993)

The backend strips every fenced tool block from persisted text (the regex in
src/tool_parsing.py is built from the full TOOL_TAGS set, which includes the
email tools), so a reloaded session renders cleanly. The live frontend path
uses a separate hardcoded EXEC_FENCE_RE in static/js/chatRenderer.js that only
listed web_search/read_file/write_file/create_document/edit_document/
update_document — so executed email tool fences (list_emails, etc.) lingered as
raw code blocks in the live assistant bubble until the user reloaded.

Add the nine email tool tags to EXEC_FENCE_RE so the live render settles into
the same clean layout as the history reload. bash/python stay excluded on
purpose: those are languages a user may legitimately have asked the model to
show as code, not tool invocations.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* refactor(chat): single-source live exec-fence tool list from TOOL_TAGS (#3993)

Per review: EXEC_FENCE_RE was a second, hand-maintained copy of the
executable-tool list, so any tool not in it — and every future tool added to
TOOL_TAGS — would leave its executed fence lingering in the live bubble until
reload (the original #3993 bug, recurring one tool at a time).

EXEC_FENCE_RE is now built from an explicit EXEC_TOOL_TAGS list that mirrors
TOOL_TAGS (src/agent_tools/__init__.py) minus bash/python, which stay excluded
as legitimate code-example languages. A new regression test
(test_exec_fence_re_covers_all_executable_tools) extracts both lists from
source and fails if they drift, so the whole class is caught in CI instead of
by a user — the "minimum acceptable middle ground" from the review, made exact
(set equality, not just coverage).

Verified: pytest tests/test_live_strip_email_tool_fences.py (5 passed);
node --check static/js/chatRenderer.js; and a node run of the built regex
confirms email/generate_image/manage_memory/ls fences strip while
bash/python/sh are preserved.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* refactor(chat): build live exec-fence list from /api/tools at runtime (#3993)

Make TOOL_TAGS the single source for live exec-fence stripping. chatRenderer.js
no longer hard-codes a tool list; it fetches the backend's authoritative set
once from GET /api/tools (sorted(TOOL_TAGS)) and builds EXEC_FENCE_RE from it at
load, minus bash/python. No second list to drift, and a future tool added to
TOOL_TAGS is covered automatically — without touching the streaming path.

Until the fetch resolves EXEC_FENCE_RE is null and exec fences aren't stripped
(a sub-second window before the first stream); the backend already strips
persisted history, so a reload always renders clean.

Drop test_exec_fence_re_covers_all_executable_tools (no hand-maintained list to
guard) and add source-level guards: the frontend keeps no hard-coded list and
fetches /api/tools, and the endpoint serves the full sorted(TOOL_TAGS).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVCKth4g8pWh7pwFDVm4iL

* fix(chat): warn on /api/tools fetch failure instead of swallowing it (#3993)

A fresh-context review flagged that loadExecFenceRegex's catch silently
discarded errors: if the one-shot fetch fails, EXEC_FENCE_RE stays null for the
whole session and live exec fences go unstripped until reload, with zero signal.
console.warn it, and correct the comment to describe the failure mode honestly
(was understated as just a sub-second startup window).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVCKth4g8pWh7pwFDVm4iL

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-23 14:12:32 +02:00