feat: 增强聊天 UI 与终端配置

- 重构消息列表、思考块与工具调用块样式
- ChatContext 支持 agent 分段与 markdown 渲染优化
- 后端增加 PI 命令配置与 Web 终端改进
- 新增 run-backend.sh 启动脚本,忽略 backend/dist 构建产物
This commit is contained in:
2026-06-26 13:21:15 +08:00
parent bd2251e89a
commit 33717d742b
27 changed files with 803 additions and 475 deletions

View File

@@ -21,7 +21,7 @@ type terminalWSMessage struct {
}
// ServeWebTerminal attaches a PTY shell session to the websocket connection.
func ServeWebTerminal(conn *websocket.Conn, workDir string) error {
func ServeWebTerminal(conn *websocket.Conn, workDir, agentDir string) error {
abs, err := filepath.Abs(workDir)
if err != nil {
return fmt.Errorf("解析目录失败: %w", err)
@@ -34,15 +34,21 @@ func ServeWebTerminal(conn *websocket.Conn, workDir string) error {
return fmt.Errorf("不是有效目录: %s", abs)
}
envInject := map[string]string{
"TERM": "xterm-256color",
"COLORTERM": "truecolor",
}
if agentDir != "" {
envInject["SPROUTCLAW_CODING_AGENT_DIR"] = agentDir
envInject["PI_CODING_AGENT_DIR"] = agentDir
}
ptmx, err := crosspty.Start(crosspty.CommandConfig{
Argv: defaultShellArgv(),
Dir: abs,
Env: os.Environ(),
EnvInject: map[string]string{
"TERM": "xterm-256color",
"COLORTERM": "truecolor",
},
Size: crosspty.TermSize{Rows: 24, Cols: 80},
Argv: defaultShellArgv(),
Dir: abs,
Env: os.Environ(),
EnvInject: envInject,
Size: crosspty.TermSize{Rows: 24, Cols: 80},
})
if err != nil {
if err == crosspty.ErrConPTYNotSupported {