This commit consolidates a large set of host-mode security and UX fixes across backend and frontend. Security / execution model: - Make permission/execution mode switches apply immediately (no deferred pending-only behavior). - Keep runtime mode change notices durable and visible via user-message guidance path. - Add explicit runtime message source taxonomy support and persistence: user / presend / guidance / notify / sub_agent / background_command. - Ensure guidance/notify insertion is batched per tool-cycle so mid-run inserts are committed together. - Separate notify from guidance semantics for mode-change notices. - Add direct-mode auto-fallback handling visibility on frontend. Approval and command gating: - Align run_command approval pre-check logic with docker behavior for approval/auto_approval modes in host execution paths. - Keep approval retry flow and final-result semantics intact when permission errors trigger approval. - Externalize forbidden command keyword list into JSON config: config/forbidden_commands.json. - Update forbidden command rejection message to user-facing wording: 用户不允许执行包含“... ”的指令. Prompt/runtime guidance: - Refine execution-mode runtime rule text to avoid endless workaround loops: one safe alternative first, then request switching to direct mode when truly required. Chat rendering / message UX: - Prevent injected guidance/notify user-messages from incorrectly triggering assistant work header/timer chain. - Restore correct visibility after history reload while preserving runtime-source behavior. - Update user-header icon/label rendering by message source: - guidance -> 引导 + navigation icon - notify/sub_agent/background_command -> 通知 + bell icon - user/presend -> keep normal user header. - Add new icons: static/icons/navigation.svg, static/icons/bell.svg. Approval panel UX: - Convert desktop approval panel from layout-compress sidebar to overlay + blur sheet. - Fix panel transition behavior (remove unintended vertical motion; use dedicated desktop overlay transition). - Improve approval result display: - decision and reason split lines, - green/red status styling, - multiline reason rendering, - auto-collapse delay adjusted to 3s. Execution mode TTL feedback: - When direct mode auto-expires to sandbox, frontend menu state is updated from status snapshot. - Show non-auto-dismiss warning toast to explicitly notify auto-fallback. Misc consistency updates: - Execution mode label text cleanup in composer. - Runtime notice wording normalization (权限模式修改为..., 执行环境修改为...). Build/test notes: - Frontend rebuilt after UI changes. - Smoke tests passed for server refactor path.
79 lines
3.5 KiB
YAML
79 lines
3.5 KiB
YAML
- generic [ref=e1]:
|
|
- generic [ref=e3]:
|
|
- heading "React + Shadow DOM Complex Test" [level=1] [ref=e4]
|
|
- generic [ref=e5]:
|
|
- heading "1. Shadow DOM Web Component" [level=2] [ref=e6]
|
|
- generic [ref=e8]:
|
|
- generic [ref=e9]: Shadow DOM Content
|
|
- generic:
|
|
- paragraph [ref=e10]: Slotted content from React
|
|
- button "React Button Inside Shadow DOM" [ref=e11]
|
|
- generic [ref=e12]:
|
|
- heading "2. Recursive Component Tree" [level=2] [ref=e13]
|
|
- generic [ref=e14]:
|
|
- generic [ref=e15] [cursor=pointer]:
|
|
- generic [ref=e16]: ▼
|
|
- generic [ref=e17]: Node Level 1
|
|
- generic [ref=e18]:
|
|
- generic [ref=e19]:
|
|
- generic [ref=e20] [cursor=pointer]:
|
|
- generic [ref=e21]: ▼
|
|
- generic [ref=e22]: Node Level 2
|
|
- generic [ref=e23]:
|
|
- generic [ref=e25] [cursor=pointer]:
|
|
- generic [ref=e26]: ▶
|
|
- generic [ref=e27]: Node Level 3
|
|
- generic [ref=e29] [cursor=pointer]:
|
|
- generic [ref=e30]: ▶
|
|
- generic [ref=e31]: Node Level 3
|
|
- generic [ref=e33] [cursor=pointer]:
|
|
- generic [ref=e34]: ▶
|
|
- generic [ref=e35]: Node Level 3
|
|
- generic [ref=e36]:
|
|
- generic [ref=e37] [cursor=pointer]:
|
|
- generic [ref=e38]: ▼
|
|
- generic [ref=e39]: Node Level 2
|
|
- generic [ref=e40]:
|
|
- generic [ref=e42] [cursor=pointer]:
|
|
- generic [ref=e43]: ▶
|
|
- generic [ref=e44]: Node Level 3
|
|
- generic [ref=e46] [cursor=pointer]:
|
|
- generic [ref=e47]: ▶
|
|
- generic [ref=e48]: Node Level 3
|
|
- generic [ref=e50] [cursor=pointer]:
|
|
- generic [ref=e51]: ▶
|
|
- generic [ref=e52]: Node Level 3
|
|
- generic [ref=e53]:
|
|
- generic [ref=e54] [cursor=pointer]:
|
|
- generic [ref=e55]: ▼
|
|
- generic [ref=e56]: Node Level 2
|
|
- generic [ref=e57]:
|
|
- generic [ref=e59] [cursor=pointer]:
|
|
- generic [ref=e60]: ▶
|
|
- generic [ref=e61]: Node Level 3
|
|
- generic [ref=e63] [cursor=pointer]:
|
|
- generic [ref=e64]: ▶
|
|
- generic [ref=e65]: Node Level 3
|
|
- generic [ref=e67] [cursor=pointer]:
|
|
- generic [ref=e68]: ▶
|
|
- generic [ref=e69]: Node Level 3
|
|
- generic [ref=e70]:
|
|
- heading "3. React Portal" [level=2] [ref=e71]
|
|
- button "Open Portal Modal" [active] [ref=e72] [cursor=pointer]
|
|
- generic [ref=e73]:
|
|
- heading "4. Dynamic Iframe" [level=2] [ref=e74]
|
|
- iframe [ref=e75]:
|
|
- generic [active] [ref=f1e1]:
|
|
- heading "Nested Iframe Content" [level=3] [ref=f1e2]
|
|
- button "Click Me" [ref=f1e3] [cursor=pointer]
|
|
- paragraph [ref=f1e4]: This content lives in an isolated iframe context.
|
|
- generic [ref=e76]:
|
|
- heading "5. Dynamic Component Injection" [level=2] [ref=e77]
|
|
- button "Add Random Component" [ref=e78] [cursor=pointer]
|
|
- generic [ref=e79]:
|
|
- heading "6. Context Providers Stack" [level=2] [ref=e80]
|
|
- generic [ref=e81]: Deeply nested context providers
|
|
- generic [ref=e83]:
|
|
- heading "Portal Content" [level=2] [ref=e84]
|
|
- paragraph [ref=e85]: This is rendered outside the normal React tree using createPortal.
|
|
- button "Close Portal" [ref=e86] [cursor=pointer] |