feat: 新建任务改为右侧抽屉(45%宽)+ 支持上传文件写入描述

- 表单从居中弹窗(Dialog)换成右侧 Sheet,宽 45vw(窄屏全宽),整屏高度可
  滚动,长表单不再受弹窗高度限制;头/脚固定、中间字段区独立滚动。
- 高级参数(超时/心跳/首个意图)收进「高级设置」Collapsible 折叠,常用路径
  只露 描述/目标/LLM;描述与目标 textarea 加高(min-h-32)。
- 描述下方加「上传文件」组件(可多选):建任务前任务无 ID,新增上传
  scope=staging,文件落到 <workDir>/drafts/<draftId>/uploads/,后端返回绝对
  路径(chatAttachment.Abs),前端把绝对路径以提示词形式追加到描述末尾,供
  worker 用 Read/Bash 打开;再次上传追加到同一标记块。draftId 用
  crypto.randomUUID(非安全上下文降级),创建成功后清空。
This commit is contained in:
Autumn-27 committed 2026-08-18 09:01:56 -04:00
1 parent 683f5ee684
commit 6a5e7c1b84
4 files changed
+230 -109

No files matched your search

+2 -2
View File
@@ -318,8 +318,8 @@ export const api = {
chat: (message: string, task?: string, attachments?: ChatAttachment[]) =>
post<{ reply: string; mode: string }>(`/chat${tq(task)}`, { message, attachments }),
// 方式1 文件上传:落到会话/任务工作目录 uploads/,返回可供 agent Read 的相对路径。
chatUpload: async (scope: "task" | "session", id: string, files: File[]) => {
if (MOCK) return { attachments: files.map((f) => ({ name: f.name, path: `uploads/${f.name}`, size: f.size })) };
chatUpload: async (scope: "task" | "session" | "staging", id: string, files: File[]) => {
if (MOCK) return { attachments: files.map((f) => ({ name: f.name, path: `uploads/${f.name}`, size: f.size, abs: `/mock/${f.name}` })) };
const fd = new FormData();
for (const f of files) fd.append("file", f);
const token = getToken();
+1
View File
@@ -270,6 +270,7 @@ export interface ChatAttachment {
name: string;
path: string;
size: number;
abs?: string; // 绝对路径(scope=staging 暂存上传时返回;建任务前把它写进描述)
}
export interface Activity {