Commit Graph
4849 Commits
Author SHA1 Message Date
Alex df41410772 Update roadmap to mark agent scheduling as complete 2026-06-15 14:48:06 +01:00
Alex f6a371be7d Merge pull request #2539 from arc53/admin-dashboard
feat: admin dashboard
2026-06-15 12:03:43 +01:00
Alex c772ebc60f fix: namespace 2026-06-15 11:44:02 +01:00
Alex 9a349401f4 feat: admin dashboard 2026-06-15 11:30:02 +01:00
Alex 49fb28acd3 Merge pull request #2538 from arc53/rbac-users
feat: admin role rbac
2026-06-14 23:08:37 +01:00
Alex 82cd7b7d49 fix: tests 2026-06-14 22:38:28 +01:00
Alex e38e660c83 fix: more dimmed shield 2026-06-14 22:30:17 +01:00
Alex 42678e95cd feat: admin role rbac 2026-06-14 21:36:07 +01:00
Manish Madan 044a5f7c23 Merge pull request #2445 from arc53/dependabot/npm_and_yarn/frontend/tailwind-merge-3.5.0
chore(deps): bump tailwind-merge from 3.4.0 to 3.6.0 in /frontend
2026-06-15 00:07:40 +05:30
dependabot[bot] 733d5496e3 chore(deps): bump tailwind-merge from 3.4.0 to 3.6.0 in /frontend
Bumps [tailwind-merge](https://github.com/dcastil/tailwind-merge) from 3.4.0 to 3.6.0.
- [Release notes](https://github.com/dcastil/tailwind-merge/releases)
- [Commits](https://github.com/dcastil/tailwind-merge/compare/v3.4.0...v3.6.0)

---
updated-dependencies:
- dependency-name: tailwind-merge
  dependency-version: 3.5.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-14 18:23:32 +00:00
Manish Madan f7a12db1c1 Merge pull request #2444 from arc53/dependabot/npm_and_yarn/frontend/lucide-react-1.14.0
chore(deps): bump lucide-react from 1.8.0 to 1.18.0 in /frontend
2026-06-14 23:52:08 +05:30
dependabot[bot] 9ad3d318d4 chore(deps): bump lucide-react from 1.8.0 to 1.18.0 in /frontend
Bumps [lucide-react](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react) from 1.8.0 to 1.18.0.
- [Release notes](https://github.com/lucide-icons/lucide/releases)
- [Commits](https://github.com/lucide-icons/lucide/commits/1.18.0/packages/lucide-react)

---
updated-dependencies:
- dependency-name: lucide-react
  dependency-version: 1.14.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-14 18:05:14 +00:00
Manish Madan e3940ff135 Merge pull request #2442 from arc53/dependabot/npm_and_yarn/frontend/reduxjs/toolkit-2.11.2
chore(deps): bump @reduxjs/toolkit from 2.10.1 to 2.12.0 in /frontend
2026-06-14 23:32:16 +05:30
dependabot[bot] d8fcaa4ac8 chore(deps): bump @reduxjs/toolkit from 2.10.1 to 2.12.0 in /frontend
Bumps [@reduxjs/toolkit](https://github.com/reduxjs/redux-toolkit) from 2.10.1 to 2.12.0.
- [Release notes](https://github.com/reduxjs/redux-toolkit/releases)
- [Commits](https://github.com/reduxjs/redux-toolkit/compare/v2.10.1...v2.12.0)

---
updated-dependencies:
- dependency-name: "@reduxjs/toolkit"
  dependency-version: 2.11.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-14 17:45:12 +00:00
Manish Madan 7a5010fa72 Merge pull request #2441 from arc53/dependabot/npm_and_yarn/frontend/tailwindcss-4.2.4
chore(deps-dev): bump tailwindcss from 4.2.4 to 4.3.1 in /frontend
2026-06-14 23:13:41 +05:30
dependabot[bot] 34ee252e94 chore(deps-dev): bump tailwindcss from 4.2.4 to 4.3.1 in /frontend
Bumps [tailwindcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss) from 4.2.4 to 4.3.1.
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.3.1/packages/tailwindcss)

---
updated-dependencies:
- dependency-name: tailwindcss
  dependency-version: 4.2.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-14 17:14:44 +00:00
Manish Madan dcc49dc62b Merge pull request #2440 from arc53/dependabot/npm_and_yarn/frontend/tailwindcss/postcss-4.2.4
chore(deps-dev): bump @tailwindcss/postcss from 4.2.2 to 4.2.4 in /frontend
2026-06-14 22:29:45 +05:30
Alex f176313dc0 Merge pull request #2537 from arc53/agent-exports
feat: agent import / export
2026-06-14 15:35:16 +01:00
Alex 88aeda945c fix: text adjustments in the UI agent export 2026-06-14 15:34:57 +01:00
Alex ee4abf1038 fix: keep agent published on update 2026-06-14 14:44:27 +01:00
Alex ab3337ced8 fix: stale numbers and slug reassignments 2026-06-14 14:24:18 +01:00
Alex 1342cb30d3 fix: icon 2 2026-06-14 11:44:45 +01:00
Alex 2d12d93cdd fix: better icon 2026-06-13 23:30:57 +01:00
Alex 3e968be6cc Merge origin/main into agent-exports; renumber agent-slug migration to 0019
main added migration 0018_tool_attempts_attribution (revises 0017_oidc_scim), which collided with the feature's 0018_agent_slug. Renumbered the agent-slug migration to 0019 (revises 0018_tool_attempts_attribution) so the Alembic chain stays linear (single head). Auto-merge was conflict-free — models.py, the frontend API layer, and all 7 locale files merged additively.
2026-06-13 14:42:50 +01:00
Alex f8e2fb715e Merge pull request #2534 from arc53/logs-and-anal-revamp
revamp analytics & logs — per-agent attribution, unified log timeline
2026-06-13 14:25:32 +01:00
Alex cd6f40471a fix: sanitise on request 2026-06-13 13:55:13 +01:00
Alex 5f29a384e2 feat: agent import / export 2026-06-13 13:31:46 +01:00
Pavel 9fb59785b2 Second fixes batch 2026-06-13 15:39:16 +04:00
Alex f8bb0002af Merge pull request #2536 from arc53/better-dropdown-prompt
feat: better prompt dropdown
2026-06-12 16:47:51 +01:00
Alex 73edd0da61 feat: better prompt dropdown 2026-06-12 16:35:58 +01:00
Pavel 59704b0f73 sec fixes 2026-06-12 18:19:15 +04:00
Alex b8dc9c223e Merge pull request #2533 from arc53/prompt-presets-revamp
Revamp default prompt presets, prompt templating, and tool naming
2026-06-11 21:06:06 +01:00
Alex b8eaa5a68d fix: mini tool call issues 2026-06-11 16:49:52 +01:00
Alex 636d4d35d1 feat(prompts): revamp preset prompts, tool naming, and prompt templating
Rewrite the default/creative/strict presets (classic + agentic) into
structured sections: grounding and cite-by-title guidance, insufficient-
context behavior, current date, respond-in-user-language, scoped mermaid
usage, an untrusted-content guardrail, and a conditional XML-tagged
document context block. A memory directory listing is injected at render
time via the template prefetch mechanism so the model starts oriented
without burning a tool call.

Fixes along the way:
- Agentic preset swap was dead code: _get_prompt_content cached the
  classic preset before create_agent's swap check ran, so agentic and
  research agents always got the classic preset. The swap now happens
  inside _get_prompt_content.
- Jinja autoescape corrupted document content in custom prompts
  (< -> &lt;); prompts are not HTML, autoescape is now off.
- Literal {summaries} leaked into the prompt when no docs were
  retrieved; the placeholder is now stripped.
- Agentic/research prompts referenced tool names from a dropped naming
  scheme (search_internal, reason_think); they now reference the real
  names (search, reason).
- The strict preset told the model to "be very creative and use your
  imagination" right after "never make up information".
- extract_tool_usages recorded intermediate attribute chains as
  bare-tool usages, which meant "run all actions" at prefetch; only
  maximal chains are recorded now.
- Headless runs retrieved docs but never rendered them into the
  prompt; the prompt is now rendered like the streaming path.
- Default tools were unreachable by name in prompt templates
  (prefetch results were keyed by synthetic id only); defaults now
  claim the name key unless an explicit row shadows it.

Tool layer: memory/notes/todo actions are namespaced (memory_view,
note_overwrite, todo_create, ...) with legacy unprefixed names still
accepted via prefix stripping; duplicate action names across tools are
disambiguated with the owning tool's name instead of numeric suffixes;
thin tool descriptions rewritten (brave, duckduckgo, telegram, ntfy,
cryptoprice, read_webpage, internal_search, think).

Docs are now wrapped per chunk in <document index>/<source>/<content>
tags for citation-by-title support.
2026-06-11 11:18:46 +01:00
Pavel 64e19f4d11 revamp analytics & logs — per-agent attribution, unified log timeline
- Move analytics endpoints to Postgres with agent filtering that matches both stamps (api_key for external traffic, agent_id for owner/headless)
- Add tool & schedule analytics, token grouping (model/agent/source) and side-channel toggle
- Merge chat/system/webhook/workflow/schedule events into one logs timeline with level/type/search filters
- Stamp user/agent on tool_call_attempts at propose time (migration 0018) and backfill via parent message
- Frontend: revamped Analytics charts and Logs page
2026-06-11 13:35:57 +04:00
Alex 10cc16eab0 Merge pull request #2530 from arc53/oidc-login
feat: oidc login
2026-06-10 17:36:36 +01:00
Alex 78c3fc1593 feat(frontend): top-right profile dropdown for OIDC sessions
Replace the OIDC user chip in the sidebar with an account avatar in the
top-right action bar (the existing UserButton placeholder). The avatar — a
brand-purple circle with the user's initial, or the IdP picture — opens a
popover showing name, email, and a sign-out action, reusing the existing
Avatar/Popover primitives with a hover ring. Renders only under
AUTH_TYPE=oidc.
2026-06-10 15:17:42 +01:00
Alex 321d88d5be fix(oidc): close re-review gaps in the hardening commit
Follow-up to the OIDC security hardening, from a max-effort re-review:

- Refresh now re-checks the denylist immediately before minting, against the
  (possibly remapped) identity but anchored on the original session `iat` — so a
  back-channel logout / SCIM deny that lands during the IdP grant, or one
  targeting the refreshed sub/sid, still blocks renewal instead of being escaped
  by the renewed token's fresh iat. Completes the watermark revocation fix.
- SCIM PUT `userName` immutability check is now case-insensitive, matching the
  case-insensitive list/create — a differently-cased userName echo no longer
  400s "userName is immutable" and blocks deprovision. Completes the SCIM
  case-insensitivity fix.
- Drop the unconditional state-cookie deletion on every callback exit: it let
  one tab's callback clear another in-flight tab's cookie, breaking concurrent
  logins. The cookie self-expires (max_age) and the Redis state is single-use,
  so the delete wasn't needed.

Tests added for the refresh revocation re-check and the case-insensitive PUT.
2026-06-10 14:15:32 +01:00
Alex a3d09e8890 fix(oidc): harden session security from PR review (CSRF, revocation, refresh)
Address the high/medium correctness findings on the OIDC/SCIM PR:

- Login CSRF / session fixation: bind `state` to a Secure/HttpOnly/SameSite=Lax
  cookie at login and require the callback to echo it, so a code+state captured
  from another browser can't silently sign a victim into the attacker's account.
- Require `exp` on session JWTs under AUTH_TYPE=oidc (require_exp), so an
  exp-less HS256 token signed with JWT_SECRET_KEY can't authenticate forever or
  outlive the denylist.
- Denylist now keys revocation on an `iat` watermark instead of a deletable
  flag: a fresh login (newer iat) self-supersedes a revocation without clearing
  it, so sessions revoked on other devices stay revoked. Drops the
  login/SCIM-reactivation denylist-clearing paths (allow_user/allow_idp_sub).
- Refresh: gate the disabled-account check on the post-grant identity (not just
  the old sub); attempt the IdP grant before consuming the refresh token and
  return a retryable 503 (restoring the token) on transient IdP errors instead
  of force-logging-out a live session.
- Gate the oidc blueprint at request time on AUTH_TYPE=oidc, so non-oidc
  deployments cleanly 404 these routes instead of 500-ing on an unset
  OIDC_ISSUER (mirrors SCIM_ENABLED).
- Surface revocation write failures: back-channel logout returns 502, and SCIM
  deactivation rolls back and returns 503, when the denylist write fails — so
  the IdP retries instead of recording a logout/deprovision that didn't revoke.
- Back-channel logout: require `jti`, run the replay check unconditionally, and
  reject stale `iat` beyond the replay-cache window.
- Make migration 0017 idempotent (IF NOT EXISTS) so re-apply can't wedge startup.
- SCIM userName matching is case-insensitive (caseExact=false) for the list
  filter and create-dedup.

Tests added/updated across test_oidc.py, test_scim.py, test_auth.py,
test_app_routes.py and the SCIM integration test.
2026-06-10 13:58:58 +01:00
Alex 496dfc42a0 Merge pull request #2531 from arc53/new-visibility
feat: visibility settings
2026-06-10 01:46:58 +01:00
Alex fc88d11594 fix: test 2026-06-10 01:46:26 +01:00
Alex 160736f075 feat: visibility settings 2026-06-10 01:40:53 +01:00
Alex 054f0f1b8b feat: oidc renewal, groups, logout, scim 2026-06-10 00:57:18 +01:00
Alex 8bc777a428 feat: oidc login 2026-06-09 23:24:44 +01:00
Alex f31910569f Merge pull request #2529 from arc53/fix-v1-continuation
feat: better tool call followup on compat mode
2026-06-09 19:08:30 +01:00
Alex 5d8187126d fix: tests 2026-06-09 19:08:15 +01:00
Alex 28d62f4199 feat: better tool call followup on compat mode 2026-06-09 18:20:14 +01:00
Alex 3ef973409e Merge pull request #2528 from arc53/conversation-visibility
feat: conv visibility
2026-06-09 00:30:50 +01:00
Alex 82bacfdb2b feat: conv visibility 2026-06-08 23:46:28 +01:00
Alex 6d4d96d12d Merge pull request #2527 from arc53/better-thread
Better thread
2026-06-08 22:41:50 +01:00