Skip to content

🐛 Fix(AIDP): backport source inspection and pagination fixes to v2.8.1 - #4239

Merged
jeffwu-1999 merged 1 commit into
mainfrom
hotfix/v2.8.1-source-performance
Oct 28, 2026
Merged

jeffwu-1999 merged 1 commit into
mainfrom
hotfix/v2.8.1-source-performance

Conversation

@cj2026-bit

@cj2026-bit cj2026-bit commented Oct 28, 2026 •

Copy link
Copy Markdown
Collaborator

Problem

Chat source inspection stalls when repeated retrievals accumulate hundreds of results. Metadata layout measurements, eager detail rendering and repeated source derivation add work, while the panel mounts every card. AIDP catalog pages default to 10 records and leave incomplete four-column rows.

Fix

Backport the final changes from #4213 onto the v2.8.1 tag (30c5168452440dcf66c6785e1f478f9d2b4d3f4d) for main.

Head: 513cb6264e38ae45f0f03fb2566142c3619ec62c. Both source and target branches are in ModelEngine-Group/nexent.

  • Clip metadata summaries to two rows and render nested details/JSON on demand, preserving hover and pinned inspection.
  • Share message source snapshots, isolate panel actions, memoize cards and paginate sources/images at 20 per page. Both inline citations and the results summary remain usable; actual citation identities locate the selected page.
  • Deduplicate uncited historical images, avoid placeholder-index React keys, and isolate downloads/errors by message while preserving same-message card state.
  • Coalesce foreground pin/activity refreshes within the five-second freshness window. Preserve the v2.8.1 Workbench-only activity query/run-end scope; do not import develop's unrelated expansion to Agent-chat global polling.
  • Default the AIDP catalog to 12 with 12/24/48 options. Card/table switching retains the page, filters and records without a new list request.
  • Adapt existing tests only and consolidate the complete scope into one change record. No new frontend UT, Case IDs, Feature changes or performance helpers.

Verification

  • All seven current GitHub checks passed for the above head, including type checking, amd64/arm64 web builds and CodeQL.
  • Executed on this hotfix checkout: 26 selected existing frontend UT passed; the existing source identity and pagination Case scripts passed all 21 checks; AIDP catalog checks passed 6/7. The remaining unchanged deletion-modal test has the previously reproduced baseline failure (cancel button not found), so the full selected run is 53 passed / 1 failed, not a fully passing suite.
  • TypeScript, targeted ESLint (zero errors; five existing warnings), changed frontend format, copyright and whitespace checks passed.
  • Formal asset design validation passed. Unrelated baseline-generated Feature navigation drift was excluded from this PR.
  • Full implementation asset validation is blocked by a pre-existing v2.8.1 record: CHAT-AGENT-DETAIL-20261026 references the absent frontend/tests/workbench/ConversationResumeBranch.test.tsx. This hotfix does not add a UT or change that unrelated record to suppress the error.
  • Source files were ported without unrelated develop commits. At preparation time, main differed from the tag only by its subsequent VERSION update; this branch does not change VERSION.
  • Deployed this hotfix SHA to the local DEV deploy checkout and exercised a new persistent AIDP-shaped 300-source conversation. Both entry points, all 15 pages (300 unique keys), boundary/last/repeated citation selection, hover and full large-JSON equality passed. Five source open/close cycles added no API requests. Frontend and config/runtime/mock services remain running; data is retained.

Warm foreground measurements on the deployed hotfix:

Action Samples P50 P95 Maximum
Open results summary 20 230.4 ms 291.3 ms 297.2 ms
Open inline citation 20 217.8 ms 249.2 ms 353.1 ms
Switch between first/last source pages by citation 20 233.0 ms 283.6 ms 308.7 ms
Hover metadata, including its existing delay 10 232.6 ms 308.8 ms 308.8 ms

These are input-to-two-animation-frame approximations in development mode, not production SLOs. Earlier near-integral-second scheduling samples are retained separately. Foreground observation still includes long tasks (maximum 301 ms); the measurements do not establish that every page performance issue is resolved.

image

Backport the final changes from PR #4213 without unrelated develop commits. Preserve the v2.8.1 Workbench-only activity scope and maintain one consolidated change record.
@cj2026-bit cj2026-bit self-assigned this Oct 28, 2026
@jeffwu-1999
jeffwu-1999 merged commit 8f4422b into main Oct 28, 2026
7 checks passed
YehongPan added a commit that referenced this pull request Oct 31, 2026
* version file v2.8.1

* 🐛 Bugfix: 修复个人信息栏 API 秘钥复制结果带掩码星号的问题 (#4198) (#4240)

个人信息栏的展示与复制此前共用同一个 access_key,而数据库层已无条件掩码,

导致权限层虽判定 can_copy=True,复制出的仍是 nexent****11bb 形式的掩码值。

- token_db.list_tokens_by_user 新增 mask 开关(默认仍掩码),权限层显式取存储明文

- 权限层拆分展示值与可复制值:access_key 保持角色语义,新增 masked_access_key 供展示

- 统一复用 mask_access_key,create_token 同步返回 masked_access_key

- 前端展示用 masked_access_key、复制用 access_key,两者不再耦合

验证:test_token_db 27 passed、test_user_management_service 93 passed、

test_user_management_app 76 passed;活集群 ADMIN 可复制完整 key、USER/VIEWER 仍为掩码。

* fix(aidp): backport source performance and catalog pagination to v2.8.1 (#4239)

Backport the final changes from PR #4213 without unrelated develop commits. Preserve the v2.8.1 Workbench-only activity scope and maintain one consolidated change record.

* v2.8.2

* v2.8.3

Start the v2.8.3 hotfix line from the v2.8.2 release so follow-up bug
fixes can be collected before the version is handed back to main.

* feat(frontend): group MCP tools and unify description hover previews (#4261)

(cherry picked from commit 1c52331)

* fix(sql): 修复代理组内权限值的迁移脚本 (#4260)

* feat(frontend): separate homepage branding from browser tabs (#4255) (#4262)

* feat(frontend): separate homepage branding from browser tabs

Add optional localized homepage titles and independent logo uploads with system-logo fallback. Keep blank homepage titles empty and preserve legacy branding fields and upload aliases.

Keep browser tabs on system branding with a blank initial title and transparent favicon until the system logo loads. Remove competing metadata to prevent login and navigation resets. Keep homepage logos at a fixed size, clip the collapsed sidebar, and shift images right by 4px.

Validate with 33 component tests, 22 Node tests, formatting and copyright checks. Formal D4 execution remains blocked by the missing isolated test-home; full asset validation also has an existing missing ConversationResumeBranch UT reference.

* fix(frontend): initialize homepage title and adjust logo spacing

Default unconfigured localized homepage titles to Nexent while preserving legacy titles and explicitly cleared values across restarts. Seed the built-in locale defaults and move the homepage logo 2px left.

Add six startup regression variants and update branding test traceability. Validation: 33 component tests and 28 Node tests passed; formal runtime verification remains blocked by the missing isolated test-home.

* fix(frontend): clarify application and navigation branding labels

Use application logo/name and navigation logo/title in Chinese and English UI copy. Keep display-location annotations and explain application branding usage and navigation logo fallback.

Preserve existing implementation names, translation keys, stored settings and API contracts. Update accessible-name test selectors and traceability. Validation: 5 component tests, source-only TypeScript, formatting and copyright checks passed; existing formal runtime blockers remain.

* fix(frontend): show branding locations in hover hints

Move parenthesized display locations into small help buttons beside application and navigation branding labels. Support hover and keyboard focus while preserving usage text and existing configuration identifiers.

Validate with 8 component tests, source-only TypeScript, lint, formatting and copyright checks. Capture real browser evidence outside Git; existing formal runtime prerequisites remain unavailable.

---------


(cherry picked from commit 556cdbe)

Co-authored-by: JeffWu <45140512+jeffwu-1999@users.noreply.github.com>

* fix(agent): deduplicate execution history and add output compaction and recall (#4264)

* chore: bootstrap action history compaction review

* fix(agent): deduplicate execution history and add cached summary recall

* fix(agent): bound recalled output by remaining context

* fix(agent): expose history reader and load committed execution records

* test: align stream regression fixtures with execution history

* ci: sync unit workflow from develop without merging branch

* fix(agent): clarify runtime result ownership and align UT dependencies

* fix(ci): isolate test index and complete history regression coverage

* fix(agent): preserve host history reader, failure masking and standalone compaction

* fix(agent): retain fallback instructions before execution contract

* fix(context): retain legacy tool names and argument records

* 🐛 Bugfix: Forward-compatible streaming response for the northbound Chat API (#4271)

* feat(a2a): 将A2A代理调用超时时间调整为15分钟并统一配置 (#4265)

* feat(a2a): 将A2A代理调用超时时间调整为15分钟并统一配置

* ci(workflows): sync pipeline configs from develop

Port auto-unit-test.yml, nexent-daily-full-test.yml and sdk_publish.yml
from origin/develop to pick up runner label parameterization, uv managed
Python setup, Codecov CLI cache verification, e2e runner for daily full
test, and pip-based build for SDK publish.

Co-authored-by: Trae <noreply@trae.ai>
Generated-by: GLM-5.3-Flash

* build(deps): 同步 backend/sdk pyproject.toml 与 origin/develop 一致

- backend/pyproject.toml: CPU 索引定义、index-by-name 与索引策略、
  本地 SDK 路径映射、data-process 的 nexent[data_process,performance]、
  test 的 nexent[dev]、pytest 与 pytest-asyncio 版本约束
- sdk/pyproject.toml: 配套 uv 索引配置、pytest 固定 9.1.1、
  unstructured[all-docs] 固定 0.18.14、移除旧的 999.0.0 依赖覆盖

Co-authored-by: Trae <noreply@trae.ai>
Generated-by: glm-5.3-flash

* fix(test): 稳定化 docker 端口分配失败用例,兼容容器化 runner

test_start_container_find_port_failure 依赖 _is_running_in_docker()
返回 False 才会执行到 find_free_port;在容器化 runner 上该检测为
True,用例走了容器内分支导致断言失败。显式 patch 该检测为 False,
并补齐文件缺失的版权头。

* Chore(deploy): 调整 Dockerfile 中 sdk 复制和安装的顺序

为了让 uv sync 能通过 [tool.uv.sources] 正确解析本地 sdk,提前复制 sdk 目录;同时将 sdk 的性能 extras 安装移至后续步骤,避免依赖解析冲突。

---------

Co-authored-by: Trae <noreply@trae.ai>

* chore: remove local workspace files committed by mistake

The merge commit 12cca86 used 'git add -A' and swept local-only
artifacts into the tree: agent workspace data (.workbuddy), local
Elasticsearch/Redis runtime dirs, local deliverables, scratch commit
message files, release-note drafts, a local compose override, and two
local-only e2e case folders that no remote branch carries.

Remove them from the index (files stay on disk) and ignore them in
.gitignore so future merges cannot pick them up again.

* fix(backend): finish the A2A timeout migration onto refactored paths

Three leftovers from the merge still imported from the pre-refactor
modules and broke CI collection:

- backend/infrastructure/http/a2a.py imported the A2A timeout constant
  from consts.const; switch it to contracts.constants.environment.
- test_a2a_http_client.py did the same in two places.
- test_execution_result_read_db.py imported database.conversation_db;
  switch it to management.db.conversation.repository.

Also collapse the A2A_AGENT_INVOCATION_TIMEOUT_SECONDS assignment in
contracts/constants/environment.py to a single physical line: the
contracts architecture test requires one assignment per line for both
constant files.

Verified locally: a2a client/relation/ssl suites 48 passed when run
per file (the 12 cross-file failures reproduce on the develop baseline
too and are a pre-existing isolation issue, not from this change);
execution-result-read-db and contracts architecture suites pass.

* fix(test): give the background stream mock an observer

The merged _stream_agent_chunks attaches its run-local execution
history to agent_run_info.observer before iterating run chunks. The
real AgentRunInfo always carries an observer, but the background-stream
test built its SimpleNamespace without one, so every case failed with
AttributeError. Add a Mock observer to the fixture.

---------

Co-authored-by: MoeexT <yuwancumian666@outlook.com>
Co-authored-by: cj2026-bit <647646783@qq.com>
Co-authored-by: chase <byzhangxin11@126.com>
Co-authored-by: xuyaqi <xuyaqist@gmail.com>
Co-authored-by: charmingchi1 <71816192+charmingchi1@users.noreply.github.com>
Co-authored-by: bernard1234 <840646206@qq.com>
Co-authored-by: Jason Wang <56037774+JasonW404@users.noreply.github.com>
Co-authored-by: panyehong <91180085+YehongPan@users.noreply.github.com>
Co-authored-by: Trae <noreply@trae.ai>
YehongPan added a commit that referenced this pull request Nov 3, 2026
* version file v2.8.1

* 🐛 Bugfix: 修复个人信息栏 API 秘钥复制结果带掩码星号的问题 (#4198) (#4240)

个人信息栏的展示与复制此前共用同一个 access_key,而数据库层已无条件掩码,

导致权限层虽判定 can_copy=True,复制出的仍是 nexent****11bb 形式的掩码值。

- token_db.list_tokens_by_user 新增 mask 开关(默认仍掩码),权限层显式取存储明文

- 权限层拆分展示值与可复制值:access_key 保持角色语义,新增 masked_access_key 供展示

- 统一复用 mask_access_key,create_token 同步返回 masked_access_key

- 前端展示用 masked_access_key、复制用 access_key,两者不再耦合

验证:test_token_db 27 passed、test_user_management_service 93 passed、

test_user_management_app 76 passed;活集群 ADMIN 可复制完整 key、USER/VIEWER 仍为掩码。

* fix(aidp): backport source performance and catalog pagination to v2.8.1 (#4239)

Backport the final changes from PR #4213 without unrelated develop commits. Preserve the v2.8.1 Workbench-only activity scope and maintain one consolidated change record.

* v2.8.2

* v2.8.3

Start the v2.8.3 hotfix line from the v2.8.2 release so follow-up bug
fixes can be collected before the version is handed back to main.

* feat(frontend): group MCP tools and unify description hover previews (#4261)

(cherry picked from commit 1c52331)

* fix(sql): 修复代理组内权限值的迁移脚本 (#4260)

* feat(frontend): separate homepage branding from browser tabs (#4255) (#4262)

* feat(frontend): separate homepage branding from browser tabs

Add optional localized homepage titles and independent logo uploads with system-logo fallback. Keep blank homepage titles empty and preserve legacy branding fields and upload aliases.

Keep browser tabs on system branding with a blank initial title and transparent favicon until the system logo loads. Remove competing metadata to prevent login and navigation resets. Keep homepage logos at a fixed size, clip the collapsed sidebar, and shift images right by 4px.

Validate with 33 component tests, 22 Node tests, formatting and copyright checks. Formal D4 execution remains blocked by the missing isolated test-home; full asset validation also has an existing missing ConversationResumeBranch UT reference.

* fix(frontend): initialize homepage title and adjust logo spacing

Default unconfigured localized homepage titles to Nexent while preserving legacy titles and explicitly cleared values across restarts. Seed the built-in locale defaults and move the homepage logo 2px left.

Add six startup regression variants and update branding test traceability. Validation: 33 component tests and 28 Node tests passed; formal runtime verification remains blocked by the missing isolated test-home.

* fix(frontend): clarify application and navigation branding labels

Use application logo/name and navigation logo/title in Chinese and English UI copy. Keep display-location annotations and explain application branding usage and navigation logo fallback.

Preserve existing implementation names, translation keys, stored settings and API contracts. Update accessible-name test selectors and traceability. Validation: 5 component tests, source-only TypeScript, formatting and copyright checks passed; existing formal runtime blockers remain.

* fix(frontend): show branding locations in hover hints

Move parenthesized display locations into small help buttons beside application and navigation branding labels. Support hover and keyboard focus while preserving usage text and existing configuration identifiers.

Validate with 8 component tests, source-only TypeScript, lint, formatting and copyright checks. Capture real browser evidence outside Git; existing formal runtime prerequisites remain unavailable.

---------


(cherry picked from commit 556cdbe)

Co-authored-by: JeffWu <45140512+jeffwu-1999@users.noreply.github.com>

* fix(agent): deduplicate execution history and add output compaction and recall (#4264)

* chore: bootstrap action history compaction review

* fix(agent): deduplicate execution history and add cached summary recall

* fix(agent): bound recalled output by remaining context

* fix(agent): expose history reader and load committed execution records

* test: align stream regression fixtures with execution history

* ci: sync unit workflow from develop without merging branch

* fix(agent): clarify runtime result ownership and align UT dependencies

* fix(ci): isolate test index and complete history regression coverage

* fix(agent): preserve host history reader, failure masking and standalone compaction

* fix(agent): retain fallback instructions before execution contract

* fix(context): retain legacy tool names and argument records

* 🐛 Bugfix: Forward-compatible streaming response for the northbound Chat API (#4271)

* feat(a2a): 将A2A代理调用超时时间调整为15分钟并统一配置 (#4265)

* feat(a2a): 将A2A代理调用超时时间调整为15分钟并统一配置

* ci(workflows): sync pipeline configs from develop

Port auto-unit-test.yml, nexent-daily-full-test.yml and sdk_publish.yml
from origin/develop to pick up runner label parameterization, uv managed
Python setup, Codecov CLI cache verification, e2e runner for daily full
test, and pip-based build for SDK publish.

Co-authored-by: Trae <noreply@trae.ai>
Generated-by: GLM-5.3-Flash

* build(deps): 同步 backend/sdk pyproject.toml 与 origin/develop 一致

- backend/pyproject.toml: CPU 索引定义、index-by-name 与索引策略、
  本地 SDK 路径映射、data-process 的 nexent[data_process,performance]、
  test 的 nexent[dev]、pytest 与 pytest-asyncio 版本约束
- sdk/pyproject.toml: 配套 uv 索引配置、pytest 固定 9.1.1、
  unstructured[all-docs] 固定 0.18.14、移除旧的 999.0.0 依赖覆盖

Co-authored-by: Trae <noreply@trae.ai>
Generated-by: glm-5.3-flash

* fix(test): 稳定化 docker 端口分配失败用例,兼容容器化 runner

test_start_container_find_port_failure 依赖 _is_running_in_docker()
返回 False 才会执行到 find_free_port;在容器化 runner 上该检测为
True,用例走了容器内分支导致断言失败。显式 patch 该检测为 False,
并补齐文件缺失的版权头。

* Chore(deploy): 调整 Dockerfile 中 sdk 复制和安装的顺序

为了让 uv sync 能通过 [tool.uv.sources] 正确解析本地 sdk,提前复制 sdk 目录;同时将 sdk 的性能 extras 安装移至后续步骤,避免依赖解析冲突。

---------

Co-authored-by: Trae <noreply@trae.ai>

* fix(deploy): export offline images for the selected platform (#4277)

* fix(sql): backport automation migration simplification to v2.8.4 (#4283)

* Revert 4277 dev/fix offline image export platform (#4287)

* Revert "fix(deploy): export offline images for the selected platform (#4277)"

This reverts commit 6d619c7.

* 指定执行器版本

---------

Co-authored-by: MoeexT <yuwancumian666@outlook.com>
Co-authored-by: cj2026-bit <647646783@qq.com>
Co-authored-by: chase <byzhangxin11@126.com>
Co-authored-by: xuyaqi <xuyaqist@gmail.com>
Co-authored-by: charmingchi1 <71816192+charmingchi1@users.noreply.github.com>
Co-authored-by: bernard1234 <840646206@qq.com>
Co-authored-by: Jason Wang <56037774+JasonW404@users.noreply.github.com>
Co-authored-by: panyehong <91180085+YehongPan@users.noreply.github.com>
Co-authored-by: Trae <noreply@trae.ai>
Co-authored-by: hhhhsc701 <56435672+hhhhsc701@users.noreply.github.com>
Co-authored-by: DongJiBao2001 <120021235+DongJiBao2001@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants