Commit Graph
82 Commits
Author SHA1 Message Date
yufeng dd33e5c1d6 feat(studio): configure user memory policies (#4975)
* feat(studio): configure user memory policies

* fix(studio): refresh user memory policies before editing
2026-09-14 09:59:09 +08:00
yufeng add229566c fix(studio): group agent session messages and improve chat readability (#4968)
* fix(studio): group agent session messages and improve chat readability

* feat(studio): refine sidebar icon system

* fix(studio): align session images with server format and localize errors

* fix(studio): unify active sidebar icon color
2026-09-13 11:25:10 +08:00
Jiajie - He/him/his 985bd1d7c7 fix: support hash characters in file paths and Markdown references (#4927)
* fix: support hash characters in file paths and Markdown references

* fix: preserve literal resource references and chunk-named files
2026-09-11 14:28:07 +08:00
chenyu a57d7f941a feat(tasks): show persisted execution events in Studio (#4864)
* feat(tasks): persist bounded execution events in task snapshots

* feat(tasks): expose execution history on detail requests

* test(tasks): cover persisted event ordering and durability

* test(tasks): verify event API ownership and opt-in responses

* feat(studio): define and format recorded task events

* fix(studio): replace synthetic logs with persisted task events

* chore(studio): add the task event query option

* feat(studio): localize execution events in English

* feat(studio): localize execution events in Chinese

* docs(tasks): document persisted execution events

* docs(tasks): document execution events in Chinese
2026-09-10 18:45:04 +08:00
chenyu 00e5e79da8 fix(studio): align pending labels and cover task page status / 统一等待文案并补齐任务页回归 (#4856)
* test(studio): cover task filtering after removing unused status helper

* fix(studio): align pending labels and cover task page status
2026-09-10 14:58:55 +08:00
LI c6cc46594a fix(web-studio): honor task API status instead of inventing pending (#4825)
* fix(web-studio): honor task API status instead of inventing pending

Pass status to GET /api/v1/tasks so filters apply before the limit, and stop reclassifying surplus running tasks as pending in Studio.

Fixes #4821

* chore: retrigger CI after unrelated fs_cp 409 flake
2026-09-09 11:37:53 +08:00
yufeng c834189c8f fix(web-studio): scope evolution settings to selected account (#4835)
* fix(web-studio): scope evolution settings to selected account

* fix(web-studio): hide confusing evolution target account label
2026-09-09 11:02:41 +08:00
yufeng c3977d9775 feat(web-studio): add Agent Experience module (#4716)
* feat(web-studio): add Agent Experience page with impact analysis

Add a new workspace page that surfaces experience memories distilled
from committed sessions and their application impact, powered by the
Agent Evolution HTTP API:

- List view (`/agent-experience`): experience files under
  `viking://user/<id>/memories/experiences` via `GET /api/v1/fs/ls`
  with keyword search, refresh, empty/loading/error states (a missing
  directory is treated as an empty list).
- Detail view (`/agent-experience/$experienceUri`): experience content
  rendered from `GET /api/v1/content/read`, plus an impact panel that
  queries `GET /api/v1/agent-evolution/experiences/outcomes` (stacked
  outcome distribution over the five fixed buckets) and
  `GET /api/v1/agent-evolution/experiences/trajectories` (paginated
  applied-trajectory list with load-more and a markdown preview sheet).
- Time-range presets (all / 7d / 30d) share UTC date bounds across the
  outcome and trajectory queries.
- Sidebar navigation entry, zh-CN/en translations, and unit tests for
  URI building, payload normalization, time ranges, and the router
  param round-trip.

* feat(web-studio): complete Agent Experience page features

Close the main gaps against the reference experience console and the
available OSS server APIs:

- Evolution settings: admin/root-only popover toggling the deployment
  Agent Evolution switch (GET/PUT /api/v1/admin/agent-evolution) with
  status hints, toasts, and hot-reload via query cache updates.
- Source trace tab on the detail page: outgoing experience relations
  (GET /api/v1/relations) listing the trajectories that generated and
  evolved the experience.
- List preview drawer: clicking a row (or its name) opens a quick
  markdown preview with a jump-to-impact action; the Impact button in
  the actions column navigates to the detail page.
- Per-row applied count: lazy trajectory totals (limit=1) shown in a
  new "Applied" column with a stable 60s cache.
- Updated badges: pre-visit snapshot via localStorage last-seen map so
  rows updated since the previous visit are highlighted.
- Custom time range: preset buttons plus a UTC date-range popover with
  inline validation (format + ordering), shared by the outcome and
  trajectory queries.
- Search keyword highlighting in the list, and an empty-state
  checklist (agent connected / new sessions / committed).
- Sessions cross-link: experience rows in the MemoryImpact sheet now
  link to the Agent Experience impact page.
- zh-CN/en translations for all new copy; unit tests for relation
  normalization, custom ranges, and last-seen tracking (207 total).

* fix(web-studio): align experience source trace API

* fix(web-studio): align Agent Experience APIs and previews

* feat(web-studio): paginate experiences and refine page layout

* feat(web-studio): switch users inline in identity menu

* fix(web-studio): guard evolution account scope and pagination loading
2026-09-07 16:55:47 +08:00
yufeng 41e40551f8 Revert "feat(web-studio): share user skills and switch users (#4706)" (#4771)
This reverts commit c25ed5147c.
2026-09-07 16:55:25 +08:00
yufeng c25ed5147c feat(web-studio): share user skills and switch users (#4706)
* feat(web-studio): share skills and switch users

* fix(web-studio): preserve skill card interaction

* fix(web-studio): use dropdown for user switching

* fix(web-studio): remove unused React import
2026-09-07 16:42:31 +08:00
Asurada 8267365314 fix(web-studio): refresh context tree after external deletion (#4573) 2026-09-02 21:37:33 +08:00
Xinmin Zeng d0959da52d fix(studio): defer routes until auth mode resolves (#4430) 2026-09-02 12:04:02 +08:00
Zayn Jarvis 30ef75ce02 fix(web-studio): render L0/L1 sidecar metadata (#4519) 2026-08-31 18:00:03 +08:00
Zayn JarvisandClaude Opus 5 303e117238 feat(web-studio): search modes, panel collapse, and structured JSONL rendering (#4470)
* feat(web-studio): search modes, panel collapse, and structured JSONL rendering

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C65Cb79Dvr5zLD6ib1T9Ew

* fix(web-studio): keep the palette one width across search and dir browsing

`/` and `//` put the palette into directory browsing, which was still using
the narrow layout, so the dialog resized whenever the query switched between
searching and browsing. Only the empty idle prompt stays narrow now.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C65Cb79Dvr5zLD6ib1T9Ew

---------

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-08-31 13:50:32 +08:00
yufeng 460f57c1a2 feat(web-studio): support trusted user switching (#4426)
* feat(web-studio): support trusted user switching

* fix(web-studio): support trusted switching without root key
2026-08-28 19:35:35 +08:00
Hao Zhe e7f2fe5190 fix(studio): prevent retrieval description label overlap (#4431) 2026-08-28 16:12:23 +08:00
Onefly 4738df667e fix(web-studio): make context tree keyboard-operable (#4301) 2026-08-27 10:19:17 +08:00
Axiomoth f926353e3e fix(i18n): 完善 Studio 简体中文界面文案 (#4297)
* fix(i18n): complete Simplified Chinese Studio copy

Signed-off-by: Axiomoth <alearner@splrad.com>

* fix(i18n): localize upload failure fallbacks

Signed-off-by: Axiomoth <alearner@splrad.com>

* fix(studio): preserve localized task errors

Signed-off-by: Axiomoth <alearner@splrad.com>

* fix(i18n): refine Studio labels and status output

Signed-off-by: Axiomoth <alearner@splrad.com>

* docs: refine Web Studio internationalization guide

Signed-off-by: Axiomoth <alearner@splrad.com>

* fix(studio): address localization review feedback

Signed-off-by: Axiomoth <alearner@splrad.com>

* fix(studio): translate retrieval labels

Signed-off-by: Axiomoth <alearner@splrad.com>

* fix(studio): address maintainer review feedback

Signed-off-by: Axiomoth <alearner@splrad.com>

* fix(web-studio): use theme-aware error colors

Signed-off-by: Axiomoth <alearner@splrad.com>

---------

Signed-off-by: Axiomoth <alearner@splrad.com>
2026-08-26 18:27:08 +08:00
yufeng 7b0dd5e29f fix(web-studio): support viking links in directory overviews (#4271)
* fix(web-studio): open viking links in directory overview

* fix(web-studio): preserve regular overview links
2026-08-24 19:53:22 +08:00
Axiomoth 6e944cc3e1 fix(studio): prevent token chart axis label clipping (#4105) 2026-08-22 09:37:44 +08:00
Axiomoth 69cad83737 fix(web-studio): avoid duplicate version prefix (#4203)
Signed-off-by: Axiomoth <alearner@splrad.com>
2026-08-22 08:50:58 +08:00
Hao Zhe a809a0aaef feat(studio): show error details in request logs (#4172)
* feat(studio): show error details in request logs

* fix(observability): harden audit error details
2026-08-21 11:57:08 +08:00
Hao Zhe 651f8fa2b5 fix(web-studio): respect task API limits (#4148)
* fix(web-studio): respect task API limits

* fix(web-studio): remove unsupported task time scope

* test(web-studio): pin task API limit
2026-08-20 19:35:05 +08:00
zgyandqin-ctx dc39985ad1 refactor: remove resource relation edges (#3956)
* refactor: remove resource relation edges

* fix: remove stale relation references

---------

Co-authored-by: qin-ctx <qinhaojie.exe@bytedance.com>
2026-08-19 17:54:29 +08:00
Zayn JarvisandClaude Opus 5 7f65f3ea2d chore(web-studio): remove dead code and the unused pnpm lockfile (#4077)
* chore(web-studio): remove dead code (unreachable files and unused exports)

Static sweep of web-studio/src for code no module reaches from the
main.tsx / routeTree.gen.ts entry graph, plus exported symbols nothing
references anywhere (including their own file and tests).

Deleted files:
- src/router.tsx — superseded by the inline createRouter in main.tsx
- src/lib/sessions/generate-title.ts — never called
- src/lib/sessions/types/session.ts — re-export barrel nobody imports
- src/components/ui/{breadcrumb,combobox,context-menu,input-group,progress}.tsx
  — shadcn primitives never added to any screen; re-addable via `shadcn add`

Removed unused exports (and the imports/constants they were the last
consumer of):
- lib/admin-options.ts: sortedAccounts
- lib/sessions/types/chat.ts: ChatState
- lib/sessions/types/message.ts: getTextContent, getToolParts, getContextParts
- routes/home/-lib/format.ts: formatDateKey, formatTimestamp
- routes/playground/-lib/types.ts: VikingEntryHandler
- routes/playground/-lib/utils.ts: buildBreadcrumbs
- routes/resources/-hooks/viking-fm.ts: usePrefetchVikingFsList, useVikingFind
- routes/resources/-lib/normalize.ts: sameUri, normalizeUriForDisplay
- routes/resources/-lib/upload.ts: getExtensionFromName

No behaviour change. `vite build` succeeds, `tsc --noEmit` output is
byte-identical to main, and `vitest run` shows the same pre-existing
19 failed files / 56 failed tests as main.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* chore(web-studio): drop the unused pnpm lockfile

Nothing in the repo installs web-studio with pnpm: `make build-studio`
runs `npm ci && npm run build`, and both setup-node steps in
`.github/workflows/_build.yml` cache on `web-studio/package-lock.json`.
No workflow reads `pnpm-lock.yaml`.

The file had also drifted out of sync with package.json — 24 specifiers
missing — so `pnpm install --frozen-lockfile` failed outright, which only
ever hurt someone reaching for pnpm locally.

Also drops the `pnpm.onlyBuiltDependencies` field: pnpm 11 no longer
reads it and warns when it is present.

package-lock.json stays as the single source of truth.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-08-18 14:00:11 +08:00
skloxoandskloxo 8acd645998 feat(web-studio): extract task-pipeline.ts SSOT for unified drawer and table rendering (#3828)
* feat(web-studio): extract task-pipeline.ts SSOT for unified drawer rendering

* feat(web-studio): include task stats, process queue stats cards and full UI components

---------

Co-authored-by: skloxo <skloxo@users.noreply.github.com>
2026-08-18 12:48:00 +08:00
Zonas Zhou 65ca438694 fix(web-studio): render raw HTML in Markdown preview with sanitization (#4046)
- Add rehype-raw and rehype-sanitize so raw HTML in Markdown renders while stripping scripts and other dangerous tags
- Give table cells full borders, center content both axes, and pass through colSpan / rowSpan
- Add file-preview-html tests covering raw HTML rendering, table attribute passthrough, and script stripping
2026-08-18 12:09:23 +08:00
Oneflyandqin-ctx 0fc2a2cb46 fix(web-studio): normalize service worker scope (#3963)
* fix(web-studio): normalize service worker scope

* test(web-studio): remove service worker unit tests

---------

Co-authored-by: qin-ctx <qinhaojie.exe@bytedance.com>
2026-08-13 14:26:20 +08:00
yufeng c54f724da2 feat(web-studio): improve resource import options (#3940)
* feat(web-studio): improve resource import options

* fix(web-studio): harden resource import flows

* fix(web-studio): harden resource import mode transitions

* docs(web-studio): remove resource import research notes

* fix(web-studio): address resource import review findings

* fix(web-studio): align resource import options with server

* fix(web-studio): expose unsupported TOS watch option

* refactor(web-studio): defer resource validation to server

* refactor(web-studio): centralize resource import requests

* fix(web-studio): 保留资源导入解析模式

* fix(web-studio): hide unfinished TOS import entry
2026-08-12 11:54:27 +08:00
yufeng cc5ba899d5 feat(web-studio): group skills by scope (#3931)
* feat(web-studio): 按作用域分组展示技能

* fix(web-studio): 完善技能详情交互
2026-08-11 18:09:57 +08:00
yufeng 668637f344 feat(web-studio): add account deletion workflow (#3912)
* feat(web-studio): add account deletion workflow

* fix(web-studio): address account deletion review
2026-08-10 16:00:45 +08:00
yufeng 42a7ff088a feat(web-studio): add scheduled resource sync management (#3909)
* feat(web-studio): add scheduled resource sync

* feat(web-studio): complete watch management workflow

* fix(web-studio): refine watch management workflow

* fix(web-studio): recover watch sync progress polling

* fix(web-studio): expose watch edit action
2026-08-10 14:56:10 +08:00
Ziyang Guo d94d133bef fix(studio): open Markdown links in resource preview (#3723) (#3726)
Route internal viking:// Markdown targets through the existing resource navigator instead of the attachment download endpoint. Preserve download fallback behavior for previews without a navigation callback and add a click regression test.

Test: NODE_OPTIONS='--localstorage-file=/tmp/openviking-vitest-localstorage' pnpm test\nTest: pnpm build
2026-08-07 19:54:18 +08:00
444cc87bf8 feat: OIDC and LDAP as new auth mode for OpenViking (#3708)
* feat: support oidc and ldap auth

* feat: support oidc and ldap auth

* fix: remove heima partner, clean up auth docs, add web-studio unsupported auth banner

- Remove heima from partner list in README (en/zh/ja)
- Remove unsupported env var references (OPENVIKING_AUTH_MODE, OPENVIKING_USERNAME,
  OPENVIKING_PASSWORD) from LDAP auth docs
- Remove temporary switch bash snippets from auth docs
- Fix ldap_password description
- Add web-studio unsupported-auth-mode banner for oidc/ldap servers

* fix: address OIDC/LDAP review comments on auth plugin design

Key changes driven by PR review:

- **Role mapping**: OIDC and LDAP external identities always resolve to
  USER role. Removed map_role() calls and group_membership-based role
  mapping. Admin access is gated by the root API key mechanism only.

- **LDAP credential extraction**: Removed query-parameter-based username/
  password extraction (security concern — passwords in URLs can leak via
  shell history, proxy logs, and monitoring). Clients must use Basic Auth
  header or form data.

- **OIDC identifier sanitization**: Auth0 and other providers may include
  characters like "|" in the `sub` claim. These are now replaced with "_"
  to produce valid OpenViking user identifiers.

- **Dead code removal**: Removed _extract_groups, memberof_attribute,
  require_root_api_key_for_admin, _initialize_api_key_manager, and
  get_request_context_checks from both plugins since they are no longer
  needed.

- **Docs**: Removed query-parameter curl example, memberof_attribute and
  require_root_api_key_for_admin config references.

Co-authored-by: TRAE CLI <noreply@bytedance.com>

* feat: support oidc and ldap auth

* feat: support oidc and ldap auth

* fix(auth): bind lazy OIDC imports at module scope

---------

Co-authored-by: TRAE CLI <noreply@bytedance.com>
Co-authored-by: qin-ctx <qinhaojie.exe@bytedance.com>
2026-08-06 12:36:37 +08:00
yufeng 2a2a674dee fix(web-studio): restore terminal history icon (#3735) 2026-08-04 19:09:41 +08:00
yufeng d59bdebb27 fix(web-studio): optimize large JSON previews (#3644) 2026-07-31 11:12:19 +08:00
Qin Haojie fd42b1ad92 feat(tasks): support task cancellation (#3577)
* feat(tasks): support task cancellation

* refactor(tasks): scope cancellation to current user

* feat(cli): support task cancellation

* refactor(tasks): make cancellation queue-aware

* refactor(tasks): simplify cancellation bookkeeping

* test: remove task cancellation coverage

* refactor(tasks): trim cancellation coordination

* fix(tasks): contain cancellation to owned work

* feat(tasks): persist resource source metadata

* fix(tasks): handle cancelled work consistently

* refactor(tasks): make completion queue-aware

* fix(tasks): persist terminal state before queue ack

* test(tasks): remove added lifecycle tests

* docs(tasks): document task cancellation
2026-07-30 20:34:27 +08:00
DuTao 6b416cd66d feat(bot): support image inputs in VikingBot Chat API (#3619)
* bot支持图片对话、去除Lite llm无效逻辑

* fix error

* clarify remote image URL validation
2026-07-30 14:00:48 +08:00
yufeng 291e9c580f feat(web-studio): enhance retrieval workflows and result inspection (#3576)
* feat(web-studio): add recall and advanced retrieval

* feat(web-studio): refine retrieval filters and result details

* fix(web-studio): harden retrieval interactions

* style(web-studio): refine dashboard panel sizing

* fix(web-studio): refine retrieval page behavior
2026-07-29 17:30:31 +08:00
yufeng c67222c3d4 fix(web-studio): standardize streamed event rendering (#3517)
* fix: render bot stream events consistently

* style: separate studio sidebar from content

* fix: standardize studio chat stream rendering

* fix: finalize chat on terminal response

* fix: complete reasoning fallback state

* fix: show agent session title

* style: consolidate playground panel controls

* fix: persist playground tree state

* style: improve session chat contrast

* fix: make session content width responsive

* feat: filter memory impact by type

* fix: widen memory impact drawer

* fix(web-studio): address streaming review feedback
2026-07-27 00:04:47 +09:00
yufeng feb51ffd05 fix(web-studio): preserve identity probe credential (#3509) 2026-07-24 22:14:45 +08:00
yufeng 0ac4b87b03 feat(web-studio): improve operational navigation and workflows (#3506)
* feat(web-studio): add operational navigation and views

* feat(web-studio): complete core management workflows

* feat(web-studio): show current user in header

* feat(web-studio): add task detail panel

* fix(web-studio): harden operational workflows

* fix(studio): widen navigation sidebar
2026-07-24 18:28:25 +08:00
DuTao 0ab85f450a feat(session): add turn-aware retention and reliable archive recovery (#3380)
* 优化OpenViking的 session compact逻辑,active message 改为turn,压缩 assistant,保留完整user。
详见RFC:https://github.com/volcengine/OpenViking/discussions/3330

* Vikingbot 使用 ov turn session

* fix pr comment

* 更新文档

* fix pr issue
2026-07-24 14:26:46 +08:00
yufeng feba7e78a2 feat(web-studio): add account switching and user management (#3500)
* feat(web-studio): add account switching and user management

* fix(web-studio): harden account identity switching
2026-07-24 14:03:43 +08:00
Jiahui Zhou 1c46d44fbc Fix/reindex preserve owners (#3096)
* fix: preserve reindex content owners

feat: allow trusted admin role assertion

feat: prune orphan vectors during reindex

fix: harden reindex memory body reads

feat: expose reindex prune options in clients

fix(cli): prefer workspace sdk for compat clients

fix: harden reindex prune orphans

* test: align reindex expectations after rebase
2026-07-14 20:38:30 +08:00
Zayn Jarvis cc0281ac70 fix(studio): sort limited listings by mtime (#3212)
* fix(studio): sort limited listings by mtime

* fix(client): forward ls ordering options
2026-07-13 16:17:02 +08:00
cd9add7a27 fix(feishu): surface permission errors clearly and keep users on page (#3032)
* fix(feishu): surface permission errors clearly and keep users on page

Map Feishu/Lark API failures to typed OpenViking errors with actionable hints, and keep Web Studio from treating HTTP 403 permission denials as session logout.

* fix(feishu): simplify API error mapping

* refactor(feishu): inline API error mapping

---------

Co-authored-by: wugj <wugj@g-bits.com>
Co-authored-by: qin-ctx <qinhaojie.exe@bytedance.com>
2026-07-07 19:55:43 +08:00
Evo fe3bdf4139 fix: treat studio dev mode as root (#3020) 2026-07-06 11:25:12 +08:00
Yangfan Wu b0533b55a7 fix(web-studio): clarify usage audit access requirements (#2955) 2026-07-03 16:34:22 +08:00
Zayn Jarvis 8109ecc56b fix(web-studio): send identity headers in /health identity probe (#2983)
In trusted mode, /health identity resolution requires X-OpenViking-Account
and X-OpenViking-User headers alongside X-API-Key. Without them, the
trusted auth plugin raises InvalidArgumentError, the exception is swallowed
by the health handler, and the response omits role/account_id/user_id —
so the studio falls back to connectionRole='unknown' and gates the admin
UI behind 'Usage/Audit 未初始化'.

Sending the headers is always safe: in api_key mode the server strips
them from the request scope; in trusted mode they are required.

Closes #2977 for the web-studio side.
2026-07-03 16:09:44 +08:00