gongzhiyong and Claude Sonnet 4.6
397c2c1124
feat: Gen-UI卡片error态 + ToolCallStatus失败状态 + 骨架屏loading
...
Deploy LangGraph Server to Azure Web App / build-and-deploy (push) Failing after 16s
Deploy LangGraph UI to Azure Static Web Apps / build-and-deploy (push) Failing after 40s
- 4个Gen-UI卡片增加errorMessage prop,错误时显示红色提示块,空结果时边框变红
- ToolCallStatus新增failedToolIds prop,失败时显示XCircle红色图标+失败文案
- main.tsx从tool messages status===error派生failedToolIds并传入ToolCallStatus
- ToolCallRow展开无uiItem时显示animate-pulse骨架屏占位
- LoadExternalComponent外包animate-in fade-in过渡动画
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com >
2026-04-11 21:59:12 +08:00
gongzhiyong and Claude Sonnet 4.6
2430fd2174
fix(P1): ticket UUID mapping + sandbox/ticket/search fallback improvements
...
Deploy LangGraph Server to Azure Web App / build-and-deploy (push) Failing after 21s
Deploy LangGraph UI to Azure Static Web Apps / build-and-deploy (push) Failing after 42s
- Fix ticket_detail UUID resolution: use find() to match ticketNumber instead of tickets[0]
- Add sandbox fallback hint in coder tool-executor catch block
- Add ticket_list empty result friendly hint with suggestions
- Add google_search auto-supplement with Jina when results < 3
- Enhance enterprise tool-executor general catch with fallback_hint
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com >
2026-04-11 21:57:56 +08:00
gongzhiyong and Claude Sonnet 4.6
979e900a17
feat(prompt): 4个Agent system prompt追加工具失败处理规范
...
Deploy LangGraph Server to Azure Web App / build-and-deploy (push) Has been cancelled
Deploy LangGraph UI to Azure Static Web Apps / build-and-deploy (push) Has been cancelled
在 enterprise/coder/searcher/writer 的 agent.ts 中,
为 SYSTEM_PROMPT 追加"工具失败处理规范"段落,
指导 LLM 在工具调用失败时给出中文友好提示和替代建议,
不暴露技术报错细节。
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com >
2026-04-11 21:57:42 +08:00
gongzhiyong and Claude Sonnet 4.6
4ad169e891
fix(P0): Daytona sandbox use process/execute endpoint + add sourceType to writer doc_edit/translate
...
Deploy LangGraph Server to Azure Web App / build-and-deploy (push) Failing after 16s
Deploy LangGraph UI to Azure Static Web Apps / build-and-deploy (push) Failing after 51s
- Fix Daytona code execution endpoint from process/code-run (404) to process/execute
- Fix request body format to {command} with language-aware shell wrapping
- Add missing sourceType/confidence props to writer doc_edit and doc_translate ui.push
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com >
2026-04-11 20:01:33 +08:00
gongzhiyong and Claude Sonnet 4.6
0e92444112
feat: prompt optimization — intent routing, source annotation, enterprise output template
...
Deploy LangGraph Server to Azure Web App / build-and-deploy (push) Failing after 13s
Deploy LangGraph UI to Azure Static Web Apps / build-and-deploy (push) Has been cancelled
- supervisor router: intent-based routing (no longer keyword-dependent)
- enterprise/searcher/writer/coder agents: source annotation [内部知识][工单数据][网络搜索][模型推断]
- enterprise agent: enterprise output template (结论→依据→建议→下一步)
- enterprise agent: cross-source synthesis prompt for multi-tool results
- writer agent: proactive enterprise closure actions (report generation hints)
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com >
2026-04-11 20:00:21 +08:00
gongzhiyong and Claude Sonnet 4.6
8c5890d66a
feat: Task#2 ActionBar+SourceBadge+状态语言统一+长消息分层
...
Deploy LangGraph Server to Azure Web App / build-and-deploy (push) Failing after 19s
Deploy LangGraph UI to Azure Static Web Apps / build-and-deploy (push) Failing after 43s
- 新增 ActionBar 组件:快速操作按钮,通过 soc:prefill-input 事件填充输入框
- 新增 SourceBadge 组件:数据来源标注(内部知识库/工单系统/外部搜索/代码执行)
- 4个 Gen-UI 卡片集成 ActionBar 和 SourceBadge
- main.tsx 添加 soc:prefill-input 事件监听
- ToolCallStatus 状态文案统一为中文(正在xxx.../已完成·xxx)
- MessageBubble 长消息(>800字)显示摘要+展开全文按钮
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com >
2026-04-11 19:59:24 +08:00
gongzhiyong and Claude Sonnet 4.6
e16b4ce92e
fix: P0/P1/P2 + sourceType/confidence + kb fallback + report_generate
...
Deploy LangGraph UI to Azure Static Web Apps / build-and-deploy (push) Has been cancelled
Deploy LangGraph Server to Azure Web App / build-and-deploy (push) Has been cancelled
- Daytona: fix /workspace→/sandbox + toolbox proxy exec endpoint
- KB Agent: timeout 15s→45s, exponential retry (3x, 1s/2s/4s)
- ticket_detail: auto-resolve TK-xxxx ticketNumber to UUID
- retry.ts: add exponential backoff support
- All ui.push(): add sourceType + confidence fields
- kb_search: fallback to google_search on failure with error card
- writer: add report_generate tool with structured Markdown template
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com >
2026-04-11 19:59:13 +08:00
gongzhiyong and Claude Opus 4.6
b8fcc50d73
feat: optimize prompts — intent-based routing, source annotation, enterprise output format
...
Deploy LangGraph Server to Azure Web App / build-and-deploy (push) Failing after 27s
Deploy LangGraph UI to Azure Static Web Apps / build-and-deploy (push) Failing after 44s
- Supervisor router: rewrite to intent-based routing instead of tool-name matching
- Enterprise agent: add structured source annotation ([内部知识]/[工单数据]/[网络搜索]/[模型推断])
- Enterprise agent: add enterprise-style output format (结论/依据/建议) for responses >200 chars
- Enterprise agent: add multi-source synthesis guidelines for cross-tool analysis
- Writer agent: add enterprise document closure prompts (auto-suggest reports after queries)
- Supervisor index: update ALL_TOOL_DESCRIPTIONS to match intent-based approach
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-04-11 19:57:55 +08:00
gongzhiyong and Claude Opus 4.6
ba59259458
docs: 产品 Agent MD 写入 8 项优化方案评审结果
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-11 19:14:33 +08:00
gongzhiyong and Claude Opus 4.6
d6946be6c0
docs: 产品验收测试报告 — 97.2% 通过率,评分 8.0/10
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-11 14:45:02 +08:00
gongzhiyong and Claude Opus 4.6
a41f2fbf44
feat: P1 滚动到底部浮动按钮
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-11 14:44:14 +08:00
gongzhiyong and Claude Opus 4.6
dd70cadcc1
feat: P0 前端交互完善 + 测试报告更新
...
- ToolCallStatus 组件增强
- main.tsx P0 交互改进(textarea/光标/编辑消息)
- 更新测试报告:9/12 通过,3 个外部服务问题
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-11 14:42:56 +08:00
gongzhiyong and Claude Opus 4.6
86cfa317b6
feat: ChatGPT Enterprise 对标优化 — Prompt 重构 + 前端 P0 交互 + 错误处理
...
- 重构所有 Agent System Prompt,参考 ChatGPT 风格:自然对话、匹配用户沟通风格、避免翻译腔
- Router 路由规则结构化,新增 Decision Rules 和分组示例,提升路由准确率
- 前端 P0:textarea 多行输入 + Shift+Enter 换行、流式打字光标动画、编辑已发送消息
- 新增 ToolCallStatus 组件、process-attachment 文件处理节点、retry 重试工具
- 工具调用错误响应友好化(formatToolError 中文提示)
- Enterprise tool descriptions 增加使用场景说明
- 上下文截断提示改为中文
- 新增 soc-product-agent 产品经理 Agent 定义
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-11 14:35:45 +08:00
gongzhiyong
6400d85027
fix: use direct host IP http://192.168.30.30:2024 for LangGraph API
Deploy LangGraph Server to Azure Web App / build-and-deploy (push) Failing after 28s
Deploy LangGraph UI to Azure Static Web Apps / build-and-deploy (push) Failing after 37s
2026-04-11 13:36:37 +08:00
gongzhiyong
216650837a
fix: use window.location.origin as fallback URL for Vite proxy in Docker
Deploy LangGraph Server to Azure Web App / build-and-deploy (push) Failing after 12s
Deploy LangGraph UI to Azure Static Web Apps / build-and-deploy (push) Failing after 51s
2026-04-11 12:49:26 +08:00
gongzhiyong and Claude Sonnet 4.6
a505e441ad
feat: file upload + context compression + fix maxTokens
...
Deploy LangGraph Server to Azure Web App / build-and-deploy (push) Failing after 16s
Deploy LangGraph UI to Azure Static Web Apps / build-and-deploy (push) Failing after 49s
- Add file-service.ts: Azure Blob upload + PDF/Excel/image parsing
- Add truncate-messages.ts: context compression for long conversations
- Fix maxTokens: flash 500→2000, auto 2048→4096, pro 4096→8192
- Integrate truncateMessages in general-input and router nodes
- Add @azure/storage-blob, pdf-parse, xlsx dependencies
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-11 12:31:55 +08:00
gongzhiyong
9b5b98f675
feat: add FileUploadButton and FileAttachmentPreview components
Deploy LangGraph Server to Azure Web App / build-and-deploy (push) Failing after 20s
Deploy LangGraph UI to Azure Static Web Apps / build-and-deploy (push) Has been cancelled
2026-04-11 12:31:24 +08:00
gongzhiyong
d878135443
fix: Vite proxy for Docker — frontend routes API through same-origin proxy to langgraph-dev:2024
Deploy LangGraph Server to Azure Web App / build-and-deploy (push) Failing after 12s
Deploy LangGraph UI to Azure Static Web Apps / build-and-deploy (push) Failing after 1m7s
2026-04-11 12:28:52 +08:00
gongzhiyong and Claude Opus 4.6
3eb70fec59
fix: coder agent must always call code_execute, never return plain text code
...
Deploy LangGraph Server to Azure Web App / build-and-deploy (push) Failing after 20s
Deploy LangGraph UI to Azure Static Web Apps / build-and-deploy (push) Failing after 39s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-11 11:03:50 +08:00
gongzhiyong and Claude Opus 4.6
e4760ca66e
fix: CanvasPanel returns null when no doc, no longer occupies space
...
Deploy LangGraph Server to Azure Web App / build-and-deploy (push) Failing after 23s
Deploy LangGraph UI to Azure Static Web Apps / build-and-deploy (push) Failing after 44s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-11 02:24:11 +08:00
gongzhiyong and Claude Opus 4.6
8a5d1c0ea9
fix: router coder/writer distinction + writer must use doc_create tool
...
Deploy LangGraph Server to Azure Web App / build-and-deploy (push) Failing after 26s
Deploy LangGraph UI to Azure Static Web Apps / build-and-deploy (push) Failing after 42s
- Router prompt now clearly distinguishes "写代码" (execute code → coder)
from "写文档" (create document → writer)
- Writer prompt strengthened to always use doc_create, never plain text
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-11 02:20:22 +08:00
gongzhiyong and Claude Opus 4.6
77e64d945e
feat: Phase 2 - Deep Search, Code Interpreter, Writer agents + CanvasPanel
...
Deploy LangGraph Server to Azure Web App / build-and-deploy (push) Failing after 22s
Deploy LangGraph UI to Azure Static Web Apps / build-and-deploy (push) Failing after 43s
- Add searcher agent with Jina deep search + KB search tools
- Add coder agent with Daytona sandbox code execution
- Add writer agent with canvas document creation/editing tools
- Integrate all sub-agents into supervisor router
- Add CanvasPanel drawer UI component for document rendering
- Refactor enterprise tools into shared soc-client module
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-11 01:52:10 +08:00
gongzhiyong and Claude Sonnet 4.6
08add81409
feat: Phase 2 - CanvasPanel drawer + sidebar search & date groups
...
- Add CanvasPanel.tsx: right-side 480px drawer, renders markdown via
MessageBubble or code via SyntaxHighlighter, with Copy/Download/Close
header; listens to window 'open-canvas' CustomEvent dispatched by Gen-UI cards
- Update ThreadSidebar.tsx: add search input below new-chat button with
live filtering; group filtered threads by date (今天/昨天/本周/更早)
with section headings; internal state only, Props interface unchanged
- Update main.tsx: import CanvasPanel, add canvasDoc state, register
open-canvas event listener on mount, render CanvasPanel alongside
the main chat column inside a flex-row wrapper
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-11 01:48:25 +08:00
gongzhiyong and Claude Opus 4.6
251c6586f4
feat: Phase 1 — ReAct loop + Markdown rendering + Docker deployment
...
Deploy LangGraph Server to Azure Web App / build-and-deploy (push) Failing after 26s
Deploy LangGraph UI to Azure Static Web Apps / build-and-deploy (push) Failing after 1m52s
Backend:
- Enterprise Agent refactored from single-round to ReAct multi-turn loop
- New agent.ts (LLM decision node) + tool-executor.ts (tool execution + Gen-UI)
- tool-defs.ts extracted for shared tool schemas
- MAX_ITERATIONS=6 safeguard against infinite loops
Frontend:
- MessageBubble: Markdown + code highlighting + LaTeX + tables
- ThemeToggle: light/dark/system theme cycling
- chart-result Gen-UI card: recharts bar/line/pie/area charts
Infrastructure:
- Docker Compose (lightweight): only LangGraph + Frontend, Azure cloud for PG/Redis/Blob
- Dockerfiles for dev (hot reload) and prod
- Makefile with dev/prod/down/logs commands
- Updated CLAUDE.md and agent definitions for LangGraph.js architecture
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-11 01:29:56 +08:00
gongzhiyong and Claude Sonnet 4.6
3263b15554
perf(deploy): pre-install node_modules in CI and enable always-on to fix slow cold start
...
- CI now runs pnpm install and includes node_modules in the zip artifact
- startup.sh simplified: removed pnpm install fallback, uses direct bin path instead of npx
- Azure Web App always-on enabled to prevent cold starts
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com >
2026-04-10 15:55:38 +08:00
gongzhiyong and Claude Sonnet 4.6
370726c811
fix(deploy): use Azure-injected PORT instead of hardcoded 2024
...
- startup.sh now reads ${PORT:-8080} so Azure App Service can inject
the correct port via its PORT environment variable
- Removed obsolete deploy-backend.yml and deploy-frontend.yml workflows
(old Python backend and Next.js frontend pipelines)
- Removed WEBSITES_PORT=2024 from soc-langgraph Azure config
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com >
2026-04-10 15:49:56 +08:00
gongzhiyong and Claude Opus 4.6
b30cb0e758
fix: add .npmrc and CUSTOM_BUILD_COMMAND to resolve Oryx npm peer dep conflict
...
Oryx runs `npm install` which fails on peer dependency conflicts between
@assistant-ui/react@^0.8.0 and @assistant-ui/react-syntax-highlighter@^0.7.2.
Adding .npmrc with legacy-peer-deps=true and CUSTOM_BUILD_COMMAND for pnpm.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-10 13:36:30 +08:00
gongzhiyong and Claude Opus 4.6
45685e8b4a
fix: resolve Web App startup timeout — exclude node_modules from zip, add startup.sh, increase timeout to 600s
...
- Remove node_modules from deploy zip (302MB -> ~1MB), let Oryx build on Azure
- Add startup.sh: creates .env/.langgraph_api prereqs, installs pnpm, runs langgraphjs dev
- Azure config: WEBSITES_CONTAINER_START_TIME_LIMIT=600, SCM_DO_BUILD_DURING_DEPLOYMENT=true, ENABLE_ORYX_BUILD=true, PRE_BUILD_COMMAND="npm install -g pnpm@10"
- Delete auto-generated main_soc-langgraph.yml (conflicts with deploy-langgraph.yml)
- Enable Always On to avoid cold starts
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-10 06:17:47 +08:00
Fasthei
092c6fe600
Add or update the Azure App Service build and deployment workflow config
2026-04-10 06:12:14 +08:00
gongzhiyong and Claude Opus 4.6
32f83d714e
refactor: migrate LangGraph server from Container App to Azure Web App
...
## Changes
- Delete Dockerfile and .dockerignore (no longer needed)
- Rewrite deploy-langgraph.yml: zip deploy to Web App (not ACR build)
- Update deploy-langgraph-ui.yml: VITE_LANGGRAPH_URL → soc-langgraph.azurewebsites.net
## Azure Resources
- CREATED: soc-langgraph Web App (Node.js 20, B1 Linux, southeastasia)
- CREATED: soc-langgraph-plan (App Service Plan, B1, southeastasia)
- DELETED: soc-langgraph Container App
- DELETED: soc-cae Container App Environment
- DELETED: socsocacr ACR
- All env vars migrated to Web App
- Startup: npx langgraphjs dev --host 0.0.0.0 --port 2024 --no-browser
- WEBSITES_PORT=2024
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-10 05:47:32 +08:00
gongzhiyong
4a485a9c5b
fix(dockerfile): pre-create .langgraph_api to prevent tsx watch restart loop
2026-04-10 05:23:07 +08:00
gongzhiyong
3d35ca43be
fix(dockerfile): create empty .env file — langgraphjs dev requires it to exist
2026-04-10 05:05:17 +08:00
gongzhiyong
df2b72c53c
fix(dockerfile): explicit port binding for Container App health probe
2026-04-10 04:54:47 +08:00
gongzhiyong
f8a73e461c
fix(ci): point app_location directly to langgraph/dist for SWA upload
2026-04-10 04:44:57 +08:00
gongzhiyong
14a7e79792
fix(ci): use pnpm vite build then SWA upload from repo root with langgraph/dist
2026-04-10 04:43:02 +08:00
gongzhiyong
3edeafa062
fix(ci): let SWA action handle Vite build instead of manual pnpm build
2026-04-10 04:40:14 +08:00
gongzhiyong
f43d239e6c
fix(main.tsx): cast message prop to any in LoadExternalComponent
2026-04-10 04:37:21 +08:00
gongzhiyong
8d30e0cca0
fix(main.tsx): rename UIMessage→UIMsgLocal to avoid SDK type conflict
2026-04-10 04:35:15 +08:00
gongzhiyong
4f75b65d52
fix(main.tsx): add type field to local UIMessage type
2026-04-10 04:32:06 +08:00
gongzhiyong
844aaa8dcc
fix(main.tsx): resolve TypeScript errors — UIMessage type, role→type, ComponentMap cast
2026-04-10 04:28:28 +08:00
gongzhiyong and Claude Sonnet 4.6
7a3cc140b0
refactor: replace SOC system with LangGraph.js gen-ui — full cleanup
...
## Removed (old SOC system)
- backend/ — Python FastAPI + LangGraph Python ReAct agent
- frontend/ — Next.js Gemini-style UI
- config/, doc/ — old documentation
- .github/workflows/deploy-backend.yml
- .github/workflows/deploy-frontend.yml
## Added (new LangGraph.js system)
- langgraph/src/agent/enterprise/ — enterprise agent with 6 tools
- kb_search → KnowledgeResultCard
- ticket_list/detail → TicketSummaryCard / TicketDetailCard
- web_search (Jina Search+Reader) → SearchResultCard
- sandbox_run (Daytona REST) → SandboxResultCard
- langgraph/src/agent-uis/enterprise/ — UI card components
- .github/workflows/deploy-langgraph-ui.yml — Vite SPA → Azure Static Web App
## Azure Resources
- soc-backend webapp: DELETED
- soc-frontend Static Web App (eastasia): DELETED
- soc-langgraph-ui Static Web App (eastasia): CREATED
URL: salmon-mushroom-0d8872e00.7.azurestaticapps.net
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com >
2026-04-10 04:23:51 +08:00
gongzhiyong and Claude Sonnet 4.6
645f1ecaae
feat(langgraph): add enterprise UI card components and implement main.tsx Chat entry
...
- Create 5 enterprise UI card components under src/agent-uis/enterprise/:
knowledge-result, ticket-summary, ticket-detail, search-result, sandbox-result
- Update ComponentMap in src/agent-uis/index.tsx to replace () => null placeholders
with real component imports
- Implement src/main.tsx with useStream + LoadExternalComponent for full Chat UI,
connecting to LangGraph agent with VITE_LANGGRAPH_URL env var
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com >
2026-04-10 04:23:32 +08:00
gongzhiyong
b621fbae92
fix(langgraph): add missing pnpm-lock.yaml for Docker build
2026-04-10 04:04:27 +08:00
gongzhiyong and Claude Sonnet 4.6
ac388b3c07
feat: add langgraph/ — LangGraph.js gen-ui server with CI/CD to Azure Container App
...
## Azure Resources Created
- ACR: socsocacr.azurecr.io (Operation, southeastasia)
- Container App Environment: soc-cae (Operation, southeastasia)
- Container App: soc-langgraph (Operation, southeastasia, port 2024)
- Scale: 0-2 replicas, 0.5 vCPU / 1GB
- Registry: socsocacr.azurecr.io (system-assigned managed identity)
- OIDC: oidc-msi-8ac6 granted Contributor on Operation resource group
## What's included
- Full langgraphjs-gen-ui-examples codebase under langgraph/
- Dockerfile: node:20-slim + pnpm, exposes port 2024
- .dockerignore, .gitignore
- GitHub Actions: .github/workflows/deploy-langgraph.yml
- Trigger: push to main, paths langgraph/**
- Uses az acr build (cloud build, no local Docker needed)
- Deploys to soc-langgraph Container App
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com >
2026-04-10 04:01:06 +08:00
gongzhiyong and Claude Sonnet 4.6
c6ca9dc126
fix: restore workspace components accidentally dropped from git index
...
workspace/ files existed on disk but were not included in previous
incremental commit, causing git to record them as deleted. Re-adding
all workspace card components, AgentWorkspace, ActivityTimeline, and
WorkspaceCardRenderer to properly track them.
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com >
2026-04-10 03:09:41 +08:00
gongzhiyong and Claude Sonnet 4.6
47921d1a45
fix: resolve 6 gen-ui issues — timeline completeness, regen sync, localStorage persistence
...
## Fixes
- [#3 ] Status events now add/update a status ActivityNode in timeline (upsertWsStatusNode)
- [#4 ] Done callback adds done node; error callback adds error node + sets session.status="error"
- [#5 ] handleRegenerate fully synced with workspace: status/tool/card/done/error all handled
- [#1 ][#2 ] localStorage persistence: completed/error sessions auto-saved, lazy-loaded on demand
- [#1 ] handleSelectConversation preloads workspace sessions from localStorage for history messages
- Refactored completeWsSession to include done ActivityNode in timeline
- Added errorWsSession, upsertWsStatusNode, saveWsToStorage, loadWsFromStorage helpers
## Known limitation
- [#7 ] workspace_card merge:true not yet used by backend (all cards are append-only for now)
- History workspace recovery depends on localStorage (browser-local, not cross-device)
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com >
2026-04-10 03:08:23 +08:00
gongzhiyong and Claude Sonnet 4.6
0a2b339550
feat: implement Generative UI — Agent Workspace + workspace_card SSE protocol
...
## Backend
- Add workspace_card SSE event protocol: {id, name, props, merge}
- Add _extract_llm_text / _maybe_emit_workspace_card helpers in chat.py
- Refactor all tools to dual-output format: {llm_text, ui: {name, props}}
- kb_search → KnowledgeResultCard
- ticket_list/detail → TicketSummaryCard / TicketDetailCard
- web_search → SearchResultCard
- generate_document → DocumentResultCard
- sandbox_run → SandboxResultCard
- Update SYSTEM_PROMPT: instruct LLM not to repeat tool data (UI shows it)
## Frontend
- Three-column layout: sidebar + chat + Agent Workspace (360px right panel)
- WorkspaceSession state model with ActivityNode + WorkspaceCard
- New components/workspace/: AgentWorkspace, ActivityTimeline, WorkspaceCardRenderer
- 6 card components: Knowledge/Ticket/Search/Document/Sandbox/ErrorCard
- GeminiChat: workspace state management, SSE routing for workspace_card events
- GeminiMessage: replace TracePanel with lightweight activity summary line
- lib/api.ts: add WorkspaceSession/ActivityNode/WorkspaceCard types
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com >
2026-04-10 02:57:09 +08:00
gongzhiyong and Claude Sonnet 4.6
1ad75a3602
fix: prevent duplicate AI message when switching conversations during stream
...
Two bugs caused the same AI response to appear twice:
1. handleSelectConversation would fetch conversation history even while
a stream was in progress (isLoading). If the fetch resolved mid-stream,
fetchConversation overwrote the conversation messages unconditionally,
writing the server-persisted AI message (with a real UUID) alongside the
still-streaming client-side message (with a temp ID), producing a duplicate.
Fix: guard the fetch with !isLoading, and add a second check inside the
.then callback so setConversations only writes history if the messages
array is still empty (protects against slow-resolving network requests).
2. onDone in streamChat could theoretically be called a second time if the
ReadableStream completed without a "done" SSE event. Fix: call
reader.cancel() immediately after onDone so the while loop exits cleanly.
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com >
2026-04-09 22:58:47 +08:00
gongzhiyong and Claude Sonnet 4.6
d86d9b8b32
fix(backend): handle MCP tool output format and read_url list input
...
- Add _extract_output_str() to unwrap MCP ToolMessage content objects
instead of calling str() on the raw object
- Handle read_url url param when LLM passes a list instead of a string
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com >
2026-04-09 22:46:58 +08:00
gongzhiyong and Claude Sonnet 4.6
ac843da725
feat: add Google Serper search tool alongside Jina MCP
...
- Add langchain-community dependency for GoogleSerperAPIWrapper
- Add serper_api_key to config with default key
- Create app/tools/serper.py with async serper_search tool
- Register "serper" key in tools/__init__.py (independent from "search"/Jina MCP)
- Add tool title and input/output summaries in chat.py
- Set SERPER_API_KEY on Azure App Service (Operation resource group)
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com >
2026-04-09 21:11:22 +08:00