feat(permission): 实现 WebSocket 权限确认机制

重构权限系统,将终端 UI 代码从 core 模块移除,实现基于 WebSocket 的权限确认流程:

Core 模块清理:
- 删除 permission/prompt.ts 和 file-prompt.ts(终端交互)
- 删除 diff.ts 中的 chalk 渲染函数
- 删除 config.ts 中的 inquirer 交互
- 移除 chalk 依赖

Server 权限处理:
- 新增 permission/handler.ts,实现 WebSocket 权限请求/响应
- 更新 agent/adapter.ts 设置权限回调
- 更新 ws.ts 处理 permission_response 消息

Web 权限组件:
- 新增 PermissionDialog 组件,显示权限请求详情和 Diff
- 更新 useChat hook 管理权限状态
- 更新 Chat 页面集成权限弹窗
This commit is contained in:
2025-12-13 01:09:35 +08:00
parent 5d4afecd48
commit 1d69fd876d
20 changed files with 739 additions and 1560 deletions
+14
View File
@@ -11,6 +11,7 @@ import {
StreamingMessage,
TypingIndicator,
ChatInput,
PermissionDialog,
} from '@ai-assistant/ui';
interface ChatPageProps {
@@ -50,6 +51,9 @@ export function ChatPage({
streamingContent,
sendMessage,
cancelProcessing,
permissionRequest,
allowPermission,
denyPermission,
} = useChat({
sessionId,
onError: (error) => {
@@ -264,6 +268,16 @@ export function ChatPage({
disabled={!isConnected}
responsive={responsive}
/>
{/* Permission Dialog */}
{permissionRequest && (
<PermissionDialog
request={permissionRequest}
onAllow={(requestId, remember) => allowPermission(requestId, remember)}
onDeny={(requestId, remember) => denyPermission(requestId, remember)}
responsive={responsive}
/>
)}
</div>
);
}