- Initialize materialSource via WritingFormProvider initialMaterialSource prop
- Don't clear selectedNotebookId/selectedDocumentIds on source switch when studioToken is set
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace useEffect-based approach with synchronous effectiveMaterialSource
derived value to avoid first-render flash and timing issues.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Auto-switch materialSource to 'notebook' on mount when initialNotebookId is set
- Replace material source dropdown with static label when studioToken is present
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- NotebookAIWritingPage reads `token` from URL, fetches space data from
notebook-token API (search_space_id, doc_ids, user_token) and space
name from searchspaces API; keep-alive ping every 50s resets Redis TTL
- Pass user_token as studioToken through AIWritingPage → AIWritingLayout
→ WritingFormPanel → AIWritingPanel → AIWritingForm to skip
getTokenByEmail when studio token is already available
- useStudioNotebooks accepts enabled flag; useNotebookSources accepts
overrideToken to bypass the internal token fetch
- AIWritingForm hides notebook selector when studioToken is provided
(notebook is pre-locked) and pre-selects initialDocumentIds
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add document-upload-popup.tsx with tabs for B系统/A系统/Y系统/XWT/upload
- Add network-actor.tsx for XWT search tab
- Add empty.tsx for empty state
- Refactor SourcesDialog: left panel becomes single "上传来源" button that opens new popup
- Wire DocumentUploadDialogProvider around StudioNotebookDetailPage
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Reuses the full middleware chain (ToolErrorHandlingMiddleware,
LLMErrorHandlingMiddleware, etc.) so tool errors like 'already exists'
and invalid SKILL.md are converted to ToolMessages by the middleware,
not silently swallowed or crashing the review task.
Implements SkillReviewMiddleware that hooks into after_agent to call
maybe_start_review() as a background task after each agent turn, without
blocking the HTTP response. Exceptions are caught and logged only.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Revert skill settings to vertical list layout with pinned sorting
- Default leaderboard range 30d -> 7d, hide stats while report generating
- Reframe leaderboard report prompt as user-behavior analysis (cache v5)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>