tianxincode 1.0.43 → 1.0.45
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/modules/ai/agents/dream/prompts/init.txt +21 -0
- package/package.json +1 -1
- package/scripts/copy-txt.js +2 -0
- package/web/dist/assets/{AiLogsView-D4q7SeY_.js → AiLogsView-CGChYsCu.js} +1 -1
- package/web/dist/assets/{ConfirmDialog-BG4cU7oU.js → ConfirmDialog-i764Fe1J.js} +1 -1
- package/web/dist/assets/{CustomActionsView-DTvj_4OE.js → CustomActionsView-DK90gPZQ.js} +1 -1
- package/web/dist/assets/DevWorkflowView-Dlx87j1J.css +1 -0
- package/web/dist/assets/DevWorkflowView-DrB-43Yj.js +32 -0
- package/web/dist/assets/{DevWorkflowViewApp-CPTC7cf7.css → DevWorkflowViewApp-Dh8RmDTn.css} +1 -1
- package/web/dist/assets/{DevWorkflowViewApp-D8czrLj2.js → DevWorkflowViewApp-_HnmCVhK.js} +14 -3
- package/web/dist/assets/{GitChanges-DxJT8Ng9.js → GitChanges-SeV5YkQj.js} +1 -1
- package/web/dist/assets/{GitChangesApp-DGRKqsrc.js → GitChangesApp-DKYWSFuu.js} +1 -1
- package/web/dist/assets/{Layout-CIntssMR.js → Layout-Dac-0iLp.js} +1 -1
- package/web/dist/assets/{TasksView-DuTglEsf.js → TasksView-Czet5EAj.js} +1 -1
- package/web/dist/assets/{TerminalView-RG937_-M.js → TerminalView-D0lsGhmz.js} +1 -1
- package/web/dist/assets/{WikiView-wDIfjQT_.js → WikiView-Dv89zXYv.js} +1 -1
- package/web/dist/assets/{cssMode-DAdY-5X0.js → cssMode-DMbMrSuH.js} +1 -1
- package/web/dist/assets/{deployView-OlhJU698.js → deployView-3xv4omoq.js} +1 -1
- package/web/dist/assets/{fileZihao-Bm-uB2BS.js → fileZihao-BtiZhQPu.js} +1 -1
- package/web/dist/assets/{freemarker2-OIgEfGdK.js → freemarker2-SNlo5J8Q.js} +1 -1
- package/web/dist/assets/{handlebars-CwUrtebj.js → handlebars-BpK8If7E.js} +1 -1
- package/web/dist/assets/{html-DplPIfs6.js → html-nEQAifNW.js} +1 -1
- package/web/dist/assets/{htmlMode-BpbIfVaE.js → htmlMode-DEqGTpB2.js} +1 -1
- package/web/dist/assets/{index-D4xhVePW.css → index-BBtbYgnN.css} +1 -1
- package/web/dist/assets/{index-Dtkc_ka-.js → index-Ch_-1SCN.js} +170 -168
- package/web/dist/assets/{javascript-B_eZzRqF.js → javascript-BwcOXj_g.js} +1 -1
- package/web/dist/assets/{jsonMode-9MZfSMtt.js → jsonMode-53JPwHSr.js} +1 -1
- package/web/dist/assets/{liquid-Q68k40m8.js → liquid-V_os1vrB.js} +1 -1
- package/web/dist/assets/{mdx-BH-rWx_x.js → mdx-CPetceIt.js} +1 -1
- package/web/dist/assets/{python-DvT3SN5P.js → python-CMN0i-H4.js} +1 -1
- package/web/dist/assets/{razor-C2wZYTc7.js → razor-BNIl4Aha.js} +1 -1
- package/web/dist/assets/{tsMode-Cm8eLc0y.js → tsMode-DIXOnfbq.js} +1 -1
- package/web/dist/assets/{typescript-B5qDQjhx.js → typescript-eB2uDNeR.js} +1 -1
- package/web/dist/assets/{xml-CZxclJkM.js → xml-BsumxOS3.js} +1 -1
- package/web/dist/assets/{yaml-BAVixhgZ.js → yaml-CzHP1b1B.js} +1 -1
- package/web/dist/index.html +2 -2
- package/web/dist/assets/DevWorkflowView-BjUv5lsU.js +0 -16
- package/web/dist/assets/DevWorkflowView-Cc_t3ltj.css +0 -1
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
你是 txcode 高级项目分析师,请对项目深入分析,了解项目的技术栈、架构和核心规范。
|
|
2
|
+
|
|
3
|
+
按以下格式在.txcode/project/生成PROJECT.md:
|
|
4
|
+
|
|
5
|
+
## 项目概述
|
|
6
|
+
[一句话描述:项目名称 + 核心功能 + 主要技术栈]
|
|
7
|
+
|
|
8
|
+
## 目录结构
|
|
9
|
+
[关键目录及其用途]
|
|
10
|
+
|
|
11
|
+
## 常用命令
|
|
12
|
+
- 构建:[命令]
|
|
13
|
+
- 测试:[命令]
|
|
14
|
+
- 启动:[命令]
|
|
15
|
+
|
|
16
|
+
## 注意事项
|
|
17
|
+
- [必须避免的操作]
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
**使用说明**:AGENTS.md 保持在 150 行以内,AI 会在每次任务时读取此文件。如内容超出,请拆分为多个文档并在上方建立索引。
|
package/package.json
CHANGED
package/scripts/copy-txt.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as x,a as n}from"./index-
|
|
1
|
+
import{n as x,a as n}from"./index-Ch_-1SCN.js";const c=[{key:"ai_call_logs",name:"AI 日志",icon:"fa-solid fa-robot text-xs"}],p={name:"AiLogsView",data(){return{logTypes:c,selectedLogType:c[0],logs:[],page:1,pageSize:20,total:0,totalPages:1,sessions:[],loading:!1,filters:{callType:"",sessionId:"",startTime:"",endTime:""}}},async created(){await this.loadSessions(),await this.loadLogs()},methods:{async loadSessions(){try{const s=await n.getSessions(100,0);this.sessions=s.data||[]}catch(s){console.error("Load sessions failed:",s)}},selectLogType(s){this.selectedLogType=s,this.resetFilters()},async loadLogs(){this.loading=!0;try{const s=await n.getAiCallLogs(this.page,this.pageSize);let t=s.data.rows||[];if(this.filters.callType&&(t=t.filter(e=>e.call_type===this.filters.callType)),this.filters.sessionId&&(t=t.filter(e=>e.session_id&&e.session_id.includes(this.filters.sessionId))),this.filters.startTime){const e=new Date(this.filters.startTime).getTime();t=t.filter(l=>new Date(l.request_time).getTime()>=e)}if(this.filters.endTime){const e=new Date(this.filters.endTime).getTime();t=t.filter(l=>new Date(l.request_time).getTime()<=e)}this.logs=t,this.total=s.data.total,this.totalPages=s.data.totalPages}catch(s){console.error("Load logs failed:",s),this.logs=[]}finally{this.loading=!1}},resetFilters(){this.filters.callType="",this.filters.sessionId="",this.filters.startTime="",this.filters.endTime="",this.page=1,this.loadLogs()},async prevPage(){this.page>1&&(this.page--,await this.loadLogs())},async nextPage(){this.page<this.totalPages&&(this.page++,await this.loadLogs())},formatTime(s){return s?new Date(s).toLocaleString("zh-CN"):"-"},getSessionTitle(s){if(!s)return"-";const t=this.sessions.find(e=>e.id===s);return t?t.title:s.substring(0,8)},formatDuration(s){return s?s<1e3?`${s}ms`:`${(s/1e3).toFixed(2)}s`:"0ms"}}};var b=function(){var l,d;var t=this,e=t._self._c;return e("div",{staticClass:"flex-1 flex overflow-hidden"},[e("aside",{staticClass:"w-[260px] bg-sidebar border-r border-border flex flex-col shrink-0"},[t._m(0),e("div",{staticClass:"flex-1 overflow-y-auto py-1"},t._l(t.logTypes,function(a){var i;return e("div",{key:a.key,staticClass:"flex items-center gap-2 px-3 py-1.5 cursor-pointer text-sm",class:((i=t.selectedLogType)==null?void 0:i.key)===a.key?"bg-active text-white border-l-2 border-accent":"text-textMuted hover:text-white hover:bg-white/5 border-l-2 border-transparent",on:{click:function(r){return t.selectLogType(a)}}},[e("i",{class:a.icon}),e("span",{staticClass:"truncate"},[t._v(t._s(a.name))])])}),0)]),e("main",{staticClass:"flex-1 flex flex-col min-w-0 bg-[#1e1e1e]"},[e("div",{staticClass:"px-4 py-3 border-b border-border bg-sidebar"},[e("div",{staticClass:"flex items-center gap-4 mb-3"},[e("div",{staticClass:"flex items-center gap-2"},[e("i",{class:(l=t.selectedLogType)==null?void 0:l.icon}),e("span",{staticClass:"text-white font-medium"},[t._v(t._s((d=t.selectedLogType)==null?void 0:d.name))])]),e("span",{staticClass:"text-xs text-textMuted"},[t._v(t._s(t.total)+" 条记录")])]),e("div",{staticClass:"flex items-center gap-4 flex-wrap"},[e("div",{staticClass:"flex items-center gap-2"},[e("label",{staticClass:"text-xs text-textMuted"},[t._v("调用类型:")]),e("select",{directives:[{name:"model",rawName:"v-model",value:t.filters.callType,expression:"filters.callType"}],staticClass:"bg-black/20 border border-white/10 text-white text-xs px-2 py-1 rounded",on:{change:[function(a){var i=Array.prototype.filter.call(a.target.options,function(r){return r.selected}).map(function(r){var o="_value"in r?r._value:r.value;return o});t.$set(t.filters,"callType",a.target.multiple?i:i[0])},t.loadLogs]}},[e("option",{attrs:{value:""}},[t._v("全部")]),e("option",{attrs:{value:"tool_call"}},[t._v("工具调用")]),e("option",{attrs:{value:"normal"}},[t._v("普通对话")])])]),e("div",{staticClass:"flex items-center gap-2"},[e("label",{staticClass:"text-xs text-textMuted"},[t._v("会话:")]),e("select",{directives:[{name:"model",rawName:"v-model",value:t.filters.sessionId,expression:"filters.sessionId"}],staticClass:"bg-black/20 border border-white/10 text-white text-xs px-2 py-1 rounded",on:{change:[function(a){var i=Array.prototype.filter.call(a.target.options,function(r){return r.selected}).map(function(r){var o="_value"in r?r._value:r.value;return o});t.$set(t.filters,"sessionId",a.target.multiple?i:i[0])},t.loadLogs]}},[e("option",{attrs:{value:""}},[t._v("全部会话")]),t._l(t.sessions,function(a){return e("option",{key:a.id,domProps:{value:a.id}},[t._v(t._s(a.title))])})],2)]),e("div",{staticClass:"flex items-center gap-2"},[e("label",{staticClass:"text-xs text-textMuted"},[t._v("开始时间:")]),e("input",{directives:[{name:"model",rawName:"v-model",value:t.filters.startTime,expression:"filters.startTime"}],staticClass:"bg-black/20 border border-white/10 text-white text-xs px-2 py-1 rounded",attrs:{type:"datetime-local"},domProps:{value:t.filters.startTime},on:{change:t.loadLogs,input:function(a){a.target.composing||t.$set(t.filters,"startTime",a.target.value)}}})]),e("div",{staticClass:"flex items-center gap-2"},[e("label",{staticClass:"text-xs text-textMuted"},[t._v("结束时间:")]),e("input",{directives:[{name:"model",rawName:"v-model",value:t.filters.endTime,expression:"filters.endTime"}],staticClass:"bg-black/20 border border-white/10 text-white text-xs px-2 py-1 rounded",attrs:{type:"datetime-local"},domProps:{value:t.filters.endTime},on:{change:t.loadLogs,input:function(a){a.target.composing||t.$set(t.filters,"endTime",a.target.value)}}})]),e("button",{staticClass:"px-3 py-1 bg-accent text-white text-xs rounded hover:bg-accent/80",on:{click:t.loadLogs}},[t._v(" 查询 ")]),e("button",{staticClass:"px-3 py-1 text-textMuted text-xs rounded hover:bg-white/10",on:{click:t.resetFilters}},[t._v(" 重置 ")])])]),e("div",{staticClass:"flex-1 overflow-auto p-4"},[e("table",{staticClass:"w-full text-sm"},[t._m(1),e("tbody",[t._l(t.logs,function(a){return e("tr",{key:a.id,staticClass:"hover:bg-white/5"},[e("td",{staticClass:"px-3 py-2 text-gray-300 border-b border-border/30"},[t._v(t._s(a.id))]),e("td",{staticClass:"px-3 py-2 text-gray-300 border-b border-border/30"},[t._v(t._s(t.formatTime(a.request_time)))]),e("td",{staticClass:"px-3 py-2 border-b border-border/30"},[e("span",{staticClass:"text-xs px-2 py-0.5 rounded",class:a.call_type==="tool_call"?"bg-blue-500/20 text-blue-400":"bg-green-500/20 text-green-400"},[t._v(" "+t._s(a.call_type==="tool_call"?"工具调用":"普通对话")+" ")])]),e("td",{staticClass:"px-3 py-2 text-gray-300 border-b border-border/30"},[t._v(t._s(a.model_name))]),e("td",{staticClass:"px-3 py-2 text-gray-300 border-b border-border/30"},[t._v(t._s(t.formatDuration(a.duration_ms)))]),e("td",{staticClass:"px-3 py-2 text-gray-300 border-b border-border/30"},[t._v(t._s(a.input_tokens||0))]),e("td",{staticClass:"px-3 py-2 text-gray-300 border-b border-border/30"},[t._v(t._s(a.output_tokens||0))]),e("td",{staticClass:"px-3 py-2 text-gray-300 border-b border-border/30"},[t._v("$"+t._s((a.cost||0).toFixed(4)))]),e("td",{staticClass:"px-3 py-2 text-gray-300 border-b border-border/30 truncate max-w-[150px]",attrs:{title:a.session_id}},[t._v(t._s(t.getSessionTitle(a.session_id)))])])}),t.logs.length===0?e("tr",[e("td",{staticClass:"px-3 py-8 text-center text-textMuted",attrs:{colspan:"9"}},[t._v("暂无数据")])]):t._e()],2)])]),e("div",{staticClass:"flex items-center justify-between px-4 py-2 border-t border-border bg-sidebar"},[e("span",{staticClass:"text-xs text-textMuted"},[t._v("共 "+t._s(t.total)+" 条")]),e("div",{staticClass:"flex items-center gap-2"},[e("button",{staticClass:"px-2 py-1 text-xs text-textMuted hover:text-white disabled:opacity-30 disabled:cursor-not-allowed",attrs:{disabled:t.page<=1},on:{click:t.prevPage}},[e("i",{staticClass:"fa-solid fa-chevron-left"}),t._v(" 上一页 ")]),e("span",{staticClass:"text-xs text-textMuted"},[t._v(t._s(t.page)+" / "+t._s(t.totalPages||1))]),e("button",{staticClass:"px-2 py-1 text-xs text-textMuted hover:text-white disabled:opacity-30 disabled:cursor-not-allowed",attrs:{disabled:t.page>=t.totalPages},on:{click:t.nextPage}},[t._v(" 下一页 "),e("i",{staticClass:"fa-solid fa-chevron-right"})])])])])])},f=[function(){var s=this,t=s._self._c;return t("div",{staticClass:"flex border-b border-border text-xs uppercase font-bold text-textMuted"},[t("div",{staticClass:"px-4 py-2 border-b-2 border-accent text-white flex items-center gap-2"},[t("i",{staticClass:"fa-solid fa-list"}),s._v(" 日志 ")])])},function(){var s=this,t=s._self._c;return t("thead",{staticClass:"bg-sidebar sticky top-0"},[t("tr",[t("th",{staticClass:"px-3 py-2 text-left text-xs font-bold text-textMuted uppercase border-b border-border"},[s._v("ID")]),t("th",{staticClass:"px-3 py-2 text-left text-xs font-bold text-textMuted uppercase border-b border-border"},[s._v("时间")]),t("th",{staticClass:"px-3 py-2 text-left text-xs font-bold text-textMuted uppercase border-b border-border"},[s._v("类型")]),t("th",{staticClass:"px-3 py-2 text-left text-xs font-bold text-textMuted uppercase border-b border-border"},[s._v("模型")]),t("th",{staticClass:"px-3 py-2 text-left text-xs font-bold text-textMuted uppercase border-b border-border"},[s._v("耗时")]),t("th",{staticClass:"px-3 py-2 text-left text-xs font-bold text-textMuted uppercase border-b border-border"},[s._v("输入Token")]),t("th",{staticClass:"px-3 py-2 text-left text-xs font-bold text-textMuted uppercase border-b border-border"},[s._v("输出Token")]),t("th",{staticClass:"px-3 py-2 text-left text-xs font-bold text-textMuted uppercase border-b border-border"},[s._v("费用")]),t("th",{staticClass:"px-3 py-2 text-left text-xs font-bold text-textMuted uppercase border-b border-border"},[s._v("会话ID")])])])}],u=x(p,b,f,!1,null,null);const _=u.exports;export{_ as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n}from"./index-
|
|
1
|
+
import{n}from"./index-Ch_-1SCN.js";const r={name:"ConfirmDialog",props:{visible:{type:Boolean,default:!1},message:{type:String,default:""}}};var i=function(){var e=this,t=e._self._c;return e.visible?t("div",{staticClass:"fixed inset-0 bg-black/50 flex items-center justify-center z-50"},[t("div",{staticClass:"bg-sidebar border border-border rounded p-4 w-96"},[t("p",{staticClass:"text-gray-200 text-sm mb-4"},[e._v(e._s(e.message))]),t("div",{staticClass:"flex justify-end gap-2"},[t("button",{staticClass:"px-3 py-1 text-xs text-gray-400 hover:text-white",on:{click:function(s){return e.$emit("cancel")}}},[e._v("取消")]),t("button",{staticClass:"px-3 py-1 text-xs bg-red-600 text-white rounded hover:bg-red-700",on:{click:function(s){return e.$emit("confirm")}}},[e._v("确定")])])])]):e._e()},a=[],o=n(r,i,a,!1,null,null);const d=o.exports;export{d as C};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as d,a as n}from"./index-
|
|
1
|
+
import{n as d,a as n}from"./index-Ch_-1SCN.js";const u={name:"CustomActionsView",data(){return{actions:[],currentType:"design",showDialog:!1,isEditing:!1,currentAction:null,form:{action_type:"design",name:"",prompt:"",auto_send:!1,sort_order:0},actionTypes:[{value:"design",label:"方案设计"},{value:"code",label:"代码生成"},{value:"test",label:"测试验收"}]}},computed:{filteredActions(){return this.actions.filter(s=>s.action_type===this.currentType)}},async created(){await this.loadActions();const s=this.$route.query.type;s&&["design","code","test"].includes(s)&&(this.currentType=s)},methods:{async loadActions(){try{const s=await n.getCustomActions();this.actions=s.data||[]}catch(s){console.error("Load actions failed:",s),this.$message.error("加载动作失败")}},selectType(s){this.currentType=s},getCountByType(s){return this.actions.filter(t=>t.action_type===s).length},openCreateDialog(){this.isEditing=!1,this.form={action_type:this.currentType,name:"",prompt:"",auto_send:!1,sort_order:0},this.showDialog=!0},openEditDialog(s){this.isEditing=!0,this.currentAction=s,this.form={action_type:s.action_type,name:s.name,prompt:s.prompt,auto_send:!!s.auto_send,sort_order:s.sort_order||0},this.showDialog=!0},closeDialog(){this.showDialog=!1,this.currentAction=null},async saveAction(){if(!this.form.name||!this.form.prompt){this.$message.error("请填写必填项");return}try{this.isEditing&&this.currentAction?(await n.updateCustomAction(this.currentAction.id,this.form),this.$message.success("动作已更新")):(await n.createCustomAction(this.form),this.$message.success("动作已创建")),this.closeDialog(),await this.loadActions()}catch(s){this.$message.error("保存失败: "+s.message)}},async deleteAction(s){if(confirm(`确定删除动作 "${s.name}" 吗?`))try{await n.deleteCustomAction(s.id),this.$message.success("动作已删除"),await this.loadActions()}catch(t){this.$message.error("删除失败: "+t.message)}},getTypeLabel(s){return{design:"方案设计",code:"代码生成",test:"测试验收"}[s]||s}}};var p=function(){var t=this,e=t._self._c;return e("div",{staticClass:"flex-1 flex overflow-hidden bg-[#1e1e1e]"},[e("div",{staticClass:"w-48 border-r border-border bg-sidebar shrink-0 flex flex-col"},[t._m(0),e("div",{staticClass:"flex-1 overflow-auto py-2"},t._l(t.actionTypes,function(r){return e("div",{key:r.value,staticClass:"px-4 py-2 cursor-pointer flex items-center justify-between",class:t.currentType===r.value?"bg-accent/20 text-accent":"text-textMuted hover:bg-white/5",on:{click:function(a){return t.selectType(r.value)}}},[e("span",{staticClass:"text-sm"},[t._v(t._s(r.label))]),e("span",{staticClass:"text-xs opacity-60"},[t._v("("+t._s(t.getCountByType(r.value))+")")])])}),0)]),e("div",{staticClass:"flex-1 flex flex-col overflow-hidden"},[e("div",{staticClass:"px-4 py-3 border-b border-border bg-sidebar shrink-0"},[e("div",{staticClass:"flex items-center justify-between"},[e("div",{staticClass:"flex items-center gap-2"},[e("i",{staticClass:"fa-solid fa-bolt text-accent"}),e("span",{staticClass:"text-white font-medium"},[t._v("自定义动作")]),e("span",{staticClass:"text-xs text-textMuted"},[t._v("("+t._s(t.getTypeLabel(t.currentType))+")")]),e("span",{staticClass:"text-xs text-textMuted"},[t._v(t._s(t.filteredActions.length)+" 个动作")])]),e("button",{staticClass:"px-3 py-1 bg-accent text-white text-xs rounded hover:bg-accent/80",on:{click:t.openCreateDialog}},[e("i",{staticClass:"fa-solid fa-plus mr-1"}),t._v(" 新增动作 ")])])]),e("div",{staticClass:"flex-1 overflow-auto p-4"},[e("table",{staticClass:"w-full text-sm"},[t._m(1),e("tbody",[t._l(t.filteredActions,function(r){return e("tr",{key:r.id,staticClass:"hover:bg-white/5"},[e("td",{staticClass:"px-3 py-2 border-b border-border/30 text-gray-200"},[t._v(t._s(r.name))]),e("td",{staticClass:"px-3 py-2 border-b border-border/30 text-gray-300 max-w-[300px] truncate",attrs:{title:r.prompt}},[t._v(t._s(r.prompt))]),e("td",{staticClass:"px-3 py-2 border-b border-border/30"},[r.auto_send?e("span",{staticClass:"text-xs px-2 py-0.5 rounded bg-green-500/20 text-green-400"},[t._v("是")]):e("span",{staticClass:"text-xs px-2 py-0.5 rounded bg-gray-500/20 text-gray-400"},[t._v("否")])]),e("td",{staticClass:"px-3 py-2 border-b border-border/30 text-gray-300"},[t._v(t._s(r.sort_order))]),e("td",{staticClass:"px-3 py-2 border-b border-border/30"},[e("div",{staticClass:"flex items-center gap-2"},[e("button",{staticClass:"text-xs px-2 py-1 text-blue-400 hover:bg-blue-500/20 rounded",on:{click:function(a){return t.openEditDialog(r)}}},[t._v("编辑")]),e("button",{staticClass:"text-xs px-2 py-1 text-red-400 hover:bg-red-500/20 rounded",on:{click:function(a){return t.deleteAction(r)}}},[t._v("删除")])])])])}),t.filteredActions.length===0?e("tr",[e("td",{staticClass:"px-3 py-8 text-center text-textMuted",attrs:{colspan:"5"}},[t._v('暂无动作,点击"新增动作"创建')])]):t._e()],2)])])]),t.showDialog?e("div",{staticClass:"fixed inset-0 bg-black/50 flex items-center justify-center z-50"},[e("div",{staticClass:"bg-sidebar border border-border rounded-lg w-[500px] max-h-[80vh] overflow-auto"},[e("div",{staticClass:"px-4 py-3 border-b border-border flex items-center justify-between"},[e("h3",{staticClass:"text-white font-medium"},[t._v(t._s(t.isEditing?"编辑动作":"新增动作"))]),e("button",{staticClass:"text-textMuted hover:text-white text-sm",on:{click:t.closeDialog}},[t._v("关闭")])]),e("div",{staticClass:"p-4 space-y-4"},[e("div",[t._m(2),e("select",{directives:[{name:"model",rawName:"v-model",value:t.form.action_type,expression:"form.action_type"}],staticClass:"w-full bg-black/20 border border-white/10 text-white text-sm px-3 py-2 rounded",attrs:{disabled:t.isEditing},on:{change:function(r){var a=Array.prototype.filter.call(r.target.options,function(o){return o.selected}).map(function(o){var l="_value"in o?o._value:o.value;return l});t.$set(t.form,"action_type",r.target.multiple?a:a[0])}}},[e("option",{attrs:{value:"design"}},[t._v("方案设计")]),e("option",{attrs:{value:"code"}},[t._v("代码生成")]),e("option",{attrs:{value:"test"}},[t._v("测试验收")])])]),e("div",[t._m(3),e("input",{directives:[{name:"model",rawName:"v-model",value:t.form.name,expression:"form.name"}],staticClass:"w-full bg-black/20 border border-white/10 text-white text-sm px-3 py-2 rounded",attrs:{type:"text",placeholder:"按钮显示名称"},domProps:{value:t.form.name},on:{input:function(r){r.target.composing||t.$set(t.form,"name",r.target.value)}}})]),e("div",[t._m(4),e("textarea",{directives:[{name:"model",rawName:"v-model",value:t.form.prompt,expression:"form.prompt"}],staticClass:"w-full bg-black/20 border border-white/10 text-white text-sm px-3 py-2 rounded resize-none",attrs:{rows:"4",placeholder:"点击按钮后填入输入框的内容"},domProps:{value:t.form.prompt},on:{input:function(r){r.target.composing||t.$set(t.form,"prompt",r.target.value)}}})]),e("div",[e("label",{staticClass:"block text-xs text-textMuted mb-1"},[t._v("排序")]),e("input",{directives:[{name:"model",rawName:"v-model.number",value:t.form.sort_order,expression:"form.sort_order",modifiers:{number:!0}}],staticClass:"w-full bg-black/20 border border-white/10 text-white text-sm px-3 py-2 rounded",attrs:{type:"number",placeholder:"数字越小越靠前"},domProps:{value:t.form.sort_order},on:{input:function(r){r.target.composing||t.$set(t.form,"sort_order",t._n(r.target.value))},blur:function(r){return t.$forceUpdate()}}})]),e("div",{staticClass:"flex items-center gap-2"},[e("input",{directives:[{name:"model",rawName:"v-model",value:t.form.auto_send,expression:"form.auto_send"}],staticClass:"accent-accent",attrs:{type:"checkbox",id:"autoSend"},domProps:{checked:Array.isArray(t.form.auto_send)?t._i(t.form.auto_send,null)>-1:t.form.auto_send},on:{change:function(r){var a=t.form.auto_send,o=r.target,l=!!o.checked;if(Array.isArray(a)){var c=null,i=t._i(a,c);o.checked?i<0&&t.$set(t.form,"auto_send",a.concat([c])):i>-1&&t.$set(t.form,"auto_send",a.slice(0,i).concat(a.slice(i+1)))}else t.$set(t.form,"auto_send",l)}}}),e("label",{staticClass:"text-xs text-textMuted",attrs:{for:"autoSend"}},[t._v("点击后自动发送(无需手动确认)")])])]),e("div",{staticClass:"px-4 py-3 border-t border-border flex justify-end gap-2"},[e("button",{staticClass:"px-4 py-1 text-textMuted text-sm rounded hover:bg-white/10",on:{click:t.closeDialog}},[t._v("取消")]),e("button",{staticClass:"px-4 py-1 bg-accent text-white text-sm rounded hover:bg-accent/80",on:{click:t.saveAction}},[t._v(" "+t._s(t.isEditing?"保存":"创建")+" ")])])])]):t._e()])},x=[function(){var s=this,t=s._self._c;return t("div",{staticClass:"px-4 py-3 border-b border-border"},[t("span",{staticClass:"text-white text-sm font-medium"},[s._v("类型")])])},function(){var s=this,t=s._self._c;return t("thead",{staticClass:"bg-sidebar sticky top-0"},[t("tr",[t("th",{staticClass:"px-3 py-2 text-left text-xs font-bold text-textMuted uppercase border-b border-border"},[s._v("名称")]),t("th",{staticClass:"px-3 py-2 text-left text-xs font-bold text-textMuted uppercase border-b border-border"},[s._v("提示词")]),t("th",{staticClass:"px-3 py-2 text-left text-xs font-bold text-textMuted uppercase border-b border-border"},[s._v("自动发送")]),t("th",{staticClass:"px-3 py-2 text-left text-xs font-bold text-textMuted uppercase border-b border-border"},[s._v("排序")]),t("th",{staticClass:"px-3 py-2 text-left text-xs font-bold text-textMuted uppercase border-b border-border"},[s._v("操作")])])])},function(){var s=this,t=s._self._c;return t("label",{staticClass:"block text-xs text-textMuted mb-1"},[s._v("类型 "),t("span",{staticClass:"text-red-400"},[s._v("*")])])},function(){var s=this,t=s._self._c;return t("label",{staticClass:"block text-xs text-textMuted mb-1"},[s._v("名称 "),t("span",{staticClass:"text-red-400"},[s._v("*")])])},function(){var s=this,t=s._self._c;return t("label",{staticClass:"block text-xs text-textMuted mb-1"},[s._v("提示词 "),t("span",{staticClass:"text-red-400"},[s._v("*")])])}],m=d(u,p,x,!1,null,null);const f=m.exports;export{f as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.workflow-sidebar[data-v-d95049e3]{width:280px;background:#2d2d2d;border-right:1px solid #1e1e1e;display:flex;flex-direction:column;flex-shrink:0}.sidebar-header[data-v-d95049e3]{padding:16px;border-bottom:1px solid #1e1e1e}.sidebar-header h3[data-v-d95049e3]{font-size:14px;color:#84848a;margin-bottom:12px}.sidebar-header .el-select[data-v-d95049e3]{width:100%;margin-bottom:8px}.project-display-row[data-v-d95049e3]{display:flex;justify-content:space-between;gap:8px;margin-bottom:8px;padding:8px 10px;background:#ffffff0a;border:1px solid #3f3f46;border-radius:6px}.project-display-row .label[data-v-d95049e3]{color:#84848a;font-size:12px}.project-display-row .value[data-v-d95049e3]{color:#d4d4d8;font-size:12px;max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.step-list[data-v-d95049e3]{flex:1;overflow-y:auto;padding:16px}.step-item[data-v-d95049e3]{display:flex;align-items:center;gap:12px;padding:14px 16px;border-radius:8px;margin-bottom:8px;cursor:pointer;transition:all .2s;border:1px solid transparent}.step-item[data-v-d95049e3]:hover{background:#ffffff0d}.step-item.active[data-v-d95049e3]{background:#409eff26;border-color:#409eff}.step-item.completed .step-icon[data-v-d95049e3]{background:#22c55e}.step-item.active .step-icon[data-v-d95049e3]{background:#409eff}.step-icon[data-v-d95049e3]{width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:14px;color:#fff;flex-shrink:0}.step-info[data-v-d95049e3]{flex:1}.step-title[data-v-d95049e3]{font-size:14px;font-weight:500;margin-bottom:2px;color:#f4f4f5}.step-desc[data-v-d95049e3]{font-size:12px;color:#84848a}.step-status[data-v-d95049e3]{font-size:14px}.step1-container[data-v-4d22db92]{height:100%;padding:24px;overflow:hidden}.step1-main[data-v-4d22db92]{max-width:600px;margin:0 auto}.panel-section[data-v-4d22db92]{background:#121212;border:1px solid #1e1e1e;border-radius:8px;overflow:hidden}.panel-section-header[data-v-4d22db92]{background:#121212;border-bottom:1px solid #1e1e1e;padding:12px 16px;font-size:14px;font-weight:500;display:flex;align-items:center;justify-content:space-between;color:#f4f4f5}.panel-section-header .el-button[data-v-4d22db92]{padding:4px 8px;font-size:12px}.panel-section-body[data-v-4d22db92]{padding:24px}.form-hint[data-v-4d22db92]{font-size:12px;color:#84848a;margin-top:8px}.form-hint code[data-v-4d22db92]{background:#18191b;padding:2px 6px;border-radius:4px;font-family:ui-monospace,monospace;color:#409eff}.flex[data-v-4d22db92]{display:flex}.gap-2[data-v-4d22db92]{gap:8px}.discuss-container[data-v-fe6cd6b0]{flex:1;display:flex;flex-direction:column;overflow:hidden;min-height:0}.discuss-dropdown[data-v-fe6cd6b0]{position:relative;flex-shrink:0;border-bottom:1px solid #1e1e1e}.dropdown-trigger[data-v-fe6cd6b0]{display:flex;align-items:center;justify-content:space-between;padding:10px 16px;cursor:pointer;color:#f4f4f5;font-size:13px}.dropdown-trigger[data-v-fe6cd6b0]:hover{background:#1a1a1a}.dropdown-title[data-v-fe6cd6b0]{font-weight:500}.dropdown-trigger .el-icon-arrow-down[data-v-fe6cd6b0]{transition:transform .2s;font-size:12px;color:#84848a}.dropdown-trigger .el-icon-arrow-down.rotated[data-v-fe6cd6b0]{transform:rotate(180deg)}.dropdown-menu[data-v-fe6cd6b0]{position:absolute;top:100%;left:0;right:0;background:#1a1a1a;border:1px solid #1e1e1e;border-top:none;z-index:100;max-height:240px;overflow-y:auto}.dropdown-item[data-v-fe6cd6b0]{display:flex;align-items:center;justify-content:space-between;padding:8px 16px;cursor:pointer;color:#d4d4d8;font-size:13px}.dropdown-item[data-v-fe6cd6b0]:hover{background:#252525}.dropdown-item.active[data-v-fe6cd6b0]{background:#1a3a5c}.dropdown-item.add-item[data-v-fe6cd6b0]{border-top:1px solid #1e1e1e;color:#60a5fa;justify-content:flex-start;gap:6px}.item-title[data-v-fe6cd6b0]{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.item-actions[data-v-fe6cd6b0]{flex-shrink:0;margin-left:8px;position:relative}.menu-trigger[data-v-fe6cd6b0]{cursor:pointer;color:#84848a;padding:2px 6px;border-radius:4px}.menu-trigger[data-v-fe6cd6b0]:hover{background:#333;color:#f4f4f5}.menu-actions[data-v-fe6cd6b0]{display:flex;flex-direction:column;min-width:80px}.menu-popup[data-v-fe6cd6b0]{position:absolute;right:0;top:100%;background:#1a1a1a;border:1px solid #333;border-radius:6px;box-shadow:0 4px 12px #0006;z-index:200;min-width:100px;overflow:hidden}.menu-item[data-v-fe6cd6b0]{padding:6px 12px;cursor:pointer;font-size:13px;color:#d4d4d8}.menu-item[data-v-fe6cd6b0]:hover{background:#252525}.menu-item.danger[data-v-fe6cd6b0]{color:#ef4444}.empty-discuss[data-v-fe6cd6b0]{flex:1;display:flex;align-items:center;justify-content:center}.empty-card[data-v-fe6cd6b0]{display:flex;flex-direction:column;align-items:center;gap:12px;padding:32px 48px;border:2px dashed #3f3f46;border-radius:12px;cursor:pointer;transition:all .2s}.empty-card[data-v-fe6cd6b0]:hover{border-color:#60a5fa;background:#60a5fa0d}.empty-card i[data-v-fe6cd6b0]{font-size:36px;color:#60a5fa}.empty-card p[data-v-fe6cd6b0]{font-size:16px;color:#f4f4f5;margin:0}.empty-card span[data-v-fe6cd6b0]{font-size:13px;color:#84848a}.chat-messages[data-v-fe6cd6b0]{flex:1;overflow-y:auto;padding:0 16px 16px;font-size:14px;line-height:1.6}.empty-state[data-v-fe6cd6b0]{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;color:#84848a}.empty-state i[data-v-fe6cd6b0]{font-size:48px;margin-bottom:16px;opacity:.5}.todos-list[data-v-fe6cd6b0]{margin-bottom:16px;color:#d4d4d8}.todo-item[data-v-fe6cd6b0]{display:flex;align-items:center;gap:8px;padding:2px 0}.user-question[data-v-fe6cd6b0]{color:#60a5fa;font-weight:700;border:1px solid #60a5fa;padding:15px;margin:15px;border-radius:10px;display:inline-block;max-width:80%;text-align:left}.ai-thought[data-v-fe6cd6b0]{color:#d4d4d8;margin-bottom:16px}.log-mute[data-v-fe6cd6b0]{color:#84848a;margin-bottom:16px;white-space:pre}.tool-success[data-v-fe6cd6b0]{color:#22c55e}.tool-fail[data-v-fe6cd6b0]{color:#ef4444}.tool-input[data-v-fe6cd6b0]{color:#60a5fa;margin-left:8px}.build-info[data-v-fe6cd6b0]{color:#84848a;display:flex;align-items:center;gap:8px;margin-bottom:16px}.chat-input-area[data-v-fe6cd6b0]{padding:12px 16px;background:#121212;border-top:1px solid #1e1e1e;flex-shrink:0}.input-row[data-v-fe6cd6b0]{display:flex;gap:12px;align-items:flex-end}.input-row .input-area[data-v-fe6cd6b0]{flex:1}.input-row .input-actions[data-v-fe6cd6b0]{display:flex;flex-direction:column;gap:8px;align-items:flex-end}.status-bar[data-v-fe6cd6b0]{display:flex;gap:8px;align-items:center;padding:6px 16px;font-size:12px;color:#84848a;border-top:1px solid #1e1e1e;flex-shrink:0;flex-wrap:wrap;background:#0a0a09}.status-bar .separator[data-v-fe6cd6b0]{color:#3f3f46}.status-ready[data-v-fe6cd6b0]{color:#22c55e}.status-thinking[data-v-fe6cd6b0]{color:#60a5fa}.thinking-spinner[data-v-fe6cd6b0]{display:inline-block;width:12px;height:12px;border:2px solid #60a5fa;border-top-color:transparent;border-radius:50%;animation:spin-fe6cd6b0 .8s linear infinite}@keyframes spin-fe6cd6b0{to{transform:rotate(360deg)}}.model-selector[data-v-fe6cd6b0]{cursor:pointer}.model-selector[data-v-fe6cd6b0]:hover{color:#60a5fa}.status-action[data-v-fe6cd6b0]{cursor:pointer}.status-action[data-v-fe6cd6b0]:hover{color:#60a5fa}.flex[data-v-fe6cd6b0]{display:flex}.justify-end[data-v-fe6cd6b0]{justify-content:flex-end}.step2-container[data-v-f7e60752]{height:100%;display:flex;flex-direction:column}.step2-main[data-v-f7e60752]{display:flex;flex:1;gap:16px;overflow:hidden;padding:16px}.editor-panel[data-v-f7e60752]{flex:1;min-width:300px;background:#121212;border:1px solid #1e1e1e;border-radius:8px;overflow:hidden;display:flex;flex-direction:column}.editor-header[data-v-f7e60752]{background:#121212;border-bottom:1px solid #1e1e1e;padding:12px 16px;font-size:13px;color:#84848a;display:flex;align-items:center;gap:8px}.editor-container[data-v-f7e60752]{flex:1;min-height:0}.chat-panel[data-v-f7e60752]{width:480px;background:#121212;border:1px solid #1e1e1e;border-radius:8px;overflow:hidden;display:flex;flex-direction:column;flex-shrink:0}.panel-header[data-v-f7e60752]{background:#121212;border-bottom:1px solid #1e1e1e;padding:12px 16px;font-size:14px;font-weight:500;color:#f4f4f5;flex-shrink:0}.panel-tabs[data-v-f7e60752]{display:flex;gap:0;padding:0}.panel-tab[data-v-f7e60752]{flex:1;text-align:center;padding:10px 16px;cursor:pointer;color:#84848a;font-size:13px;border-bottom:2px solid transparent;transition:all .2s;display:flex;align-items:center;justify-content:center;gap:6px}.panel-tab[data-v-f7e60752]:hover{color:#d4d4d8}.panel-tab.active[data-v-f7e60752]{color:#60a5fa;border-bottom-color:#60a5fa}.chat-messages[data-v-f7e60752]{flex:1;overflow-y:auto;padding:0 16px 16px;font-size:14px;line-height:1.6}.empty-state[data-v-f7e60752]{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;color:#84848a}.empty-state i[data-v-f7e60752]{font-size:48px;margin-bottom:16px;opacity:.5}.todos-list[data-v-f7e60752]{margin-bottom:16px;color:#d4d4d8}.todo-item[data-v-f7e60752]{display:flex;align-items:center;gap:8px;padding:2px 0}.user-question[data-v-f7e60752]{color:#60a5fa;font-weight:700;border:1px solid #60a5fa;padding:15px;margin:15px;border-radius:10px;display:inline-block;max-width:80%;text-align:left}.ai-thought[data-v-f7e60752]{color:#d4d4d8;margin-bottom:16px}.log-mute[data-v-f7e60752]{color:#84848a;margin-bottom:16px;white-space:pre}.tool-success[data-v-f7e60752]{color:#22c55e}.tool-fail[data-v-f7e60752]{color:#ef4444}.tool-input[data-v-f7e60752]{color:#60a5fa;margin-left:8px}.build-info[data-v-f7e60752]{color:#84848a;display:flex;align-items:center;gap:8px;margin-bottom:16px}.chat-input-area[data-v-f7e60752]{padding:12px 16px;background:#121212;border-top:1px solid #1e1e1e}.input-row[data-v-f7e60752]{display:flex;gap:12px;align-items:flex-end}.input-row .input-area[data-v-f7e60752]{flex:1}.input-row .input-actions[data-v-f7e60752]{display:flex;flex-direction:column;gap:8px;align-items:flex-end}.status-bar[data-v-f7e60752]{display:flex;gap:8px;align-items:center;padding:6px 16px;font-size:12px;color:#84848a;border-top:1px solid #1e1e1e;flex-shrink:0;flex-wrap:wrap;background:#0a0a09}.status-bar .separator[data-v-f7e60752]{color:#3f3f46}.status-ready[data-v-f7e60752]{color:#22c55e}.status-thinking[data-v-f7e60752]{color:#60a5fa}.thinking-spinner[data-v-f7e60752]{display:inline-block;width:12px;height:12px;border:2px solid #60a5fa;border-top-color:transparent;border-radius:50%;animation:spin-f7e60752 .8s linear infinite}@keyframes spin-f7e60752{to{transform:rotate(360deg)}}.model-selector[data-v-f7e60752]{cursor:pointer}.model-selector[data-v-f7e60752]:hover{color:#60a5fa}.status-action[data-v-f7e60752]{cursor:pointer}.status-action[data-v-f7e60752]:hover{color:#60a5fa}.step3-container[data-v-d2adcfdd]{height:100%;display:flex;flex-direction:column}.step3-main[data-v-d2adcfdd]{display:flex;flex:1;overflow:hidden;padding:16px}.code-chat-panel[data-v-d2adcfdd]{flex:1;background:#121212;border:1px solid #1e1e1e;border-radius:8px;overflow:hidden;display:flex;flex-direction:column}.panel-header[data-v-d2adcfdd]{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background:#121212;border-bottom:1px solid #1e1e1e;flex-shrink:0}.panel-header span[data-v-d2adcfdd]{font-size:14px;font-weight:500;color:#f4f4f5}.header-actions[data-v-d2adcfdd]{display:flex;gap:8px}.chat-messages[data-v-d2adcfdd]{flex:1;overflow-y:auto;padding:16px;font-size:14px;line-height:1.6}.empty-state[data-v-d2adcfdd]{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;color:#84848a}.empty-state i[data-v-d2adcfdd]{font-size:48px;margin-bottom:16px;opacity:.5}.todos-list[data-v-d2adcfdd]{margin-bottom:16px;color:#d4d4d8}.todo-item[data-v-d2adcfdd]{display:flex;align-items:center;gap:8px;padding:2px 0}.user-question[data-v-d2adcfdd]{color:#60a5fa;font-weight:700;border:1px solid #60a5fa;padding:15px;margin:15px;border-radius:10px;display:inline-block;max-width:80%;text-align:left}.ai-thought[data-v-d2adcfdd]{color:#d4d4d8;margin-bottom:16px}.log-mute[data-v-d2adcfdd]{color:#84848a;margin-bottom:16px;white-space:pre}.tool-success[data-v-d2adcfdd]{color:#22c55e}.tool-fail[data-v-d2adcfdd]{color:#ef4444}.tool-input[data-v-d2adcfdd]{color:#60a5fa;margin-left:8px}.build-info[data-v-d2adcfdd]{color:#84848a;display:flex;align-items:center;gap:8px;margin-bottom:16px}.chat-input-area[data-v-d2adcfdd]{padding:12px 16px;background:#121212;border-top:1px solid #1e1e1e}.input-row[data-v-d2adcfdd]{display:flex;gap:12px;align-items:flex-end}.input-row .input-area[data-v-d2adcfdd]{flex:1}.input-row .input-actions[data-v-d2adcfdd]{display:flex;flex-direction:column;gap:8px;align-items:flex-end}.status-bar[data-v-d2adcfdd]{display:flex;gap:8px;align-items:center;padding:6px 16px;font-size:12px;color:#84848a;border-top:1px solid #1e1e1e;flex-shrink:0;flex-wrap:wrap;background:#0a0a09}.status-bar .separator[data-v-d2adcfdd]{color:#3f3f46}.status-ready[data-v-d2adcfdd]{color:#22c55e}.status-thinking[data-v-d2adcfdd]{color:#60a5fa}.thinking-spinner[data-v-d2adcfdd]{display:inline-block;width:12px;height:12px;border:2px solid #60a5fa;border-top-color:transparent;border-radius:50%;animation:spin-d2adcfdd .8s linear infinite}@keyframes spin-d2adcfdd{to{transform:rotate(360deg)}}.model-selector[data-v-d2adcfdd]{cursor:pointer}.model-selector[data-v-d2adcfdd]:hover{color:#60a5fa}.devlog-panel[data-v-d2adcfdd]{width:400px;background:#121212;border:1px solid #1e1e1e;border-radius:8px;overflow:hidden;display:flex;flex-direction:column;margin-left:16px}.devlog-panel .panel-header[data-v-d2adcfdd]{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background:#121212;border-bottom:1px solid #1e1e1e}.devlog-panel .panel-header span[data-v-d2adcfdd]{font-size:14px;font-weight:500;color:#f4f4f5}.devlog-content[data-v-d2adcfdd]{flex:1;overflow-y:auto;padding:16px;font-size:14px;line-height:1.6;color:#d4d4d8}.step4-container[data-v-a9a8b79e]{height:100%;display:flex;flex-direction:column}.step4-main[data-v-a9a8b79e]{display:flex;flex:1;overflow:hidden;padding:16px}.code-chat-panel[data-v-a9a8b79e]{flex:1;background:#121212;border:1px solid #1e1e1e;border-radius:8px;overflow:hidden;display:flex;flex-direction:column}.panel-header[data-v-a9a8b79e]{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background:#121212;border-bottom:1px solid #1e1e1e;flex-shrink:0}.panel-header span[data-v-a9a8b79e]{font-size:14px;font-weight:500;color:#f4f4f5}.chat-messages[data-v-a9a8b79e]{flex:1;overflow-y:auto;padding:16px;font-size:14px;line-height:1.6}.empty-state[data-v-a9a8b79e]{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;color:#84848a}.empty-state i[data-v-a9a8b79e]{font-size:48px;margin-bottom:16px;opacity:.5}.todos-list[data-v-a9a8b79e]{margin-bottom:16px;color:#d4d4d8}.todo-item[data-v-a9a8b79e]{display:flex;align-items:center;gap:8px;padding:2px 0}.user-question[data-v-a9a8b79e]{color:#60a5fa;font-weight:700;border:1px solid #60a5fa;padding:15px;margin:15px;border-radius:10px;display:inline-block;max-width:80%;text-align:left}.ai-thought[data-v-a9a8b79e]{color:#d4d4d8;margin-bottom:16px}.log-mute[data-v-a9a8b79e]{color:#84848a;margin-bottom:16px;white-space:pre}.tool-success[data-v-a9a8b79e]{color:#22c55e}.tool-fail[data-v-a9a8b79e]{color:#ef4444}.tool-input[data-v-a9a8b79e]{color:#60a5fa;margin-left:8px}.build-info[data-v-a9a8b79e]{color:#84848a;display:flex;align-items:center;gap:8px;margin-bottom:16px}.chat-input-area[data-v-a9a8b79e]{padding:12px 16px;background:#121212;border-top:1px solid #1e1e1e}.input-row[data-v-a9a8b79e]{display:flex;gap:12px;align-items:flex-end}.input-row .input-area[data-v-a9a8b79e]{flex:1}.input-row .input-actions[data-v-a9a8b79e]{display:flex;flex-direction:column;gap:8px;align-items:flex-end}.status-bar[data-v-a9a8b79e]{display:flex;gap:8px;align-items:center;padding:6px 16px;font-size:12px;color:#84848a;border-top:1px solid #1e1e1e;flex-shrink:0;flex-wrap:wrap;background:#0a0a09}.status-bar .separator[data-v-a9a8b79e]{color:#3f3f46}.status-ready[data-v-a9a8b79e]{color:#22c55e}.status-thinking[data-v-a9a8b79e]{color:#60a5fa}.thinking-spinner[data-v-a9a8b79e]{display:inline-block;width:12px;height:12px;border:2px solid #60a5fa;border-top-color:transparent;border-radius:50%;animation:spin-a9a8b79e .8s linear infinite}@keyframes spin-a9a8b79e{to{transform:rotate(360deg)}}.model-selector[data-v-a9a8b79e]{cursor:pointer}.model-selector[data-v-a9a8b79e]:hover{color:#60a5fa}.dev-workflow-view[data-v-21c96963]{display:flex;height:100%;overflow:hidden;background:#0a0a09}.main-content[data-v-21c96963]{flex:1;display:flex;flex-direction:column;overflow:hidden}.panel-header[data-v-21c96963]{background:#121212;border-bottom:1px solid #1e1e1e;padding:12px 24px;display:flex;align-items:center;justify-content:space-between;flex-shrink:0}.panel-title[data-v-21c96963]{font-size:16px;font-weight:500;color:#f4f4f5}.panel-actions[data-v-21c96963]{display:flex;gap:12px}.step-content[data-v-21c96963]{flex:1;overflow:hidden}.status-bar[data-v-21c96963]{background:#121212;border-top:1px solid #1e1e1e;padding:8px 24px;font-size:12px;color:#84848a;display:flex;align-items:center;justify-content:space-between;flex-shrink:0}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import{n as d,R as g,S as m,M as f,g as p,a as n,s as C,b as v,F as _,C as y,e as w,K as $,c as I}from"./index-Ch_-1SCN.js";const D={name:"WorkflowSidebar",props:{categories:{type:Array,default:()=>[]},projects:{type:Object,default:()=>{}},currentCategory:{type:String,default:""},currentProject:{type:String,default:""},currentStep:{type:Number,default:1},isLoading:{type:Boolean,default:!1}},data(){return{selectedCategory:"",selectedProject:"",steps:[{id:1,title:"新建需求",desc:"创建新的需求项目",icon:"el-icon-folder-add"},{id:2,title:"方案设计",desc:"编写需求方案",icon:"el-icon-edit"},{id:3,title:"代码生成",desc:"根据方案生成代码",icon:"el-icon-document"},{id:4,title:"测试验收",desc:"测试验证功能",icon:"el-icon-s-check"}]}},computed:{hasAnyProject(){return Object.keys(this.projects||{}).length>0},visibleSteps(){return this.hasAnyProject?this.steps:this.steps.filter(e=>e.id===1)}},watch:{currentCategory(e){this.selectedCategory=e},currentProject(e){this.selectedProject=e}},methods:{onCategoryChange(e){this.selectedProject="",this.$emit("category-change",e)},onProjectChange(e){this.$emit("project-change",e)},onStepClick(e){this.$emit("step-change",e)},isStepCompleted(e){var i;if(!this.currentProject)return!1;const s=`${this.currentCategory}/${this.currentProject}`,t=this.projects[s];return((i=t==null?void 0:t.stepStatus)==null?void 0:i[e])===!0}}};var M=function(){var s=this,t=s._self._c;return t("div",{staticClass:"workflow-sidebar"},[t("div",{staticClass:"sidebar-header"},[t("h3",[s._v("当前项目")]),t("div",{staticClass:"project-display-row"},[t("span",{staticClass:"label"},[s._v("大类")]),t("span",{staticClass:"value"},[s._v(s._s(s.currentCategory||"-"))])]),t("div",{staticClass:"project-display-row"},[t("span",{staticClass:"label"},[s._v("需求")]),t("span",{staticClass:"value"},[s._v(s._s(s.currentProject||"-"))])])]),t("div",{staticClass:"step-list"},s._l(s.visibleSteps,function(i){return t("div",{key:i.id,class:["step-item",{active:s.currentStep===i.id,completed:s.isStepCompleted(i.id)}],on:{click:function(a){return s.onStepClick(i.id)}}},[t("div",{staticClass:"step-icon"},[t("i",{class:i.icon})]),t("div",{staticClass:"step-info"},[t("div",{staticClass:"step-title"},[s._v(s._s(i.title))]),t("div",{staticClass:"step-desc"},[s._v(s._s(i.desc))])]),t("div",{staticClass:"step-status"},[s.isStepCompleted(i.id)?t("i",{staticClass:"el-icon-circle-check",staticStyle:{color:"#22c55e"}}):s._e()])])}),0)])},P=[],T=d(D,M,P,!1,null,"d95049e3");const x=T.exports,j={name:"Step1NewReq",props:{categories:{type:Array,default:()=>[]},projects:{type:Object,default:()=>({})},basePath:{type:String,default:""},currentCategory:{type:String,default:""},currentProject:{type:String,default:""}},data(){return{selectedCategory:"",selectedProject:"",dialogVisible:!1,dialogInput:"",requirementDialogVisible:!1,requirementDialogInput:""}},computed:{existingRequirementList(){if(!this.selectedCategory)return[];const e=`${this.selectedCategory}/`;return Object.keys(this.projects).filter(s=>s.startsWith(e)).map(s=>s.split("/")[1]).sort()}},watch:{currentCategory:{immediate:!0,handler(e){this.selectedCategory=e||""}},currentProject:{immediate:!0,handler(e){this.selectedProject=e||""}},selectedCategory(e){e||(this.selectedProject="")},existingRequirementList(e){this.selectedProject&&(!Array.isArray(e)||e.length===0||e.includes(this.selectedProject)||(this.selectedProject=""))}},methods:{onCategoryChange(){this.selectedProject="",this.$emit("category-change",this.selectedCategory||""),this.$emit("project-change","")},onProjectChange(){this.$emit("project-change",this.selectedProject||"")},showCreateRequirementDialog(){if(!this.selectedCategory){this.$message.warning("请先选择大类");return}this.requirementDialogInput="",this.requirementDialogVisible=!0},handleCreateRequirementConfirm(){const e=this.requirementDialogInput.trim();if(!e){this.$message.warning("需求名称不能为空");return}if(this.existingRequirementList.includes(e)){this.$message.warning("该需求已存在");return}this.$emit("create-requirement",{category:this.selectedCategory,name:e}),this.requirementDialogVisible=!1},showCreateCategoryDialog(){this.dialogInput="",this.dialogVisible=!0},handleDialogConfirm(){const e=this.dialogInput.trim();if(!e){this.$message.warning("名称不能为空");return}this.$emit("create-category",e),this.dialogVisible=!1}}};var V=function(){var s=this,t=s._self._c;return t("div",{staticClass:"step1-container"},[t("div",{staticClass:"step1-main"},[t("div",{staticClass:"panel-section"},[s._m(0),t("div",{staticClass:"panel-section-body"},[t("el-form",{attrs:{"label-position":"top",size:"small"}},[t("el-form-item",{attrs:{label:"所属大类"}},[t("div",{staticClass:"flex gap-2"},[t("el-select",{staticStyle:{flex:"1"},attrs:{placeholder:"请选择大类"},on:{change:s.onCategoryChange},model:{value:s.selectedCategory,callback:function(i){s.selectedCategory=i},expression:"selectedCategory"}},s._l(s.categories,function(i){return t("el-option",{key:i,attrs:{label:i,value:i}})}),1),t("el-button",{on:{click:s.showCreateCategoryDialog}},[t("i",{staticClass:"el-icon-plus"}),s._v(" 新建 ")])],1)]),t("el-form-item",{attrs:{label:"选择需求"}},[t("div",{staticClass:"flex gap-2"},[t("el-select",{staticStyle:{flex:"1"},attrs:{placeholder:"选择已有需求目录",disabled:!s.selectedCategory},on:{change:s.onProjectChange},model:{value:s.selectedProject,callback:function(i){s.selectedProject=i},expression:"selectedProject"}},s._l(s.existingRequirementList,function(i){return t("el-option",{key:i,attrs:{label:i,value:i}})}),1),t("el-button",{attrs:{disabled:!s.selectedCategory},on:{click:s.showCreateRequirementDialog}},[t("i",{staticClass:"el-icon-plus"}),s._v(" 新建 ")])],1)]),t("div",{staticClass:"form-hint",staticStyle:{color:"#84848a"}},[s._v(" "+s._s(s.selectedCategory?"可直接选择已有需求,或点击“新建”创建需求目录":"请先选择大类")+" ")])],1)],1)])]),t("el-dialog",{attrs:{title:"新建大类",visible:s.dialogVisible,width:"400px"},on:{"update:visible":function(i){s.dialogVisible=i}}},[t("el-form",[t("el-form-item",{attrs:{label:"大类名称"}},[t("el-input",{attrs:{placeholder:"输入大类名称"},model:{value:s.dialogInput,callback:function(i){s.dialogInput=i},expression:"dialogInput"}})],1)],1),t("span",{attrs:{slot:"footer"},slot:"footer"},[t("el-button",{on:{click:function(i){s.dialogVisible=!1}}},[s._v("取消")]),t("el-button",{attrs:{type:"primary"},on:{click:s.handleDialogConfirm}},[s._v("确定")])],1)],1),t("el-dialog",{attrs:{title:"新建需求",visible:s.requirementDialogVisible,width:"400px"},on:{"update:visible":function(i){s.requirementDialogVisible=i}}},[t("el-form",[t("el-form-item",{attrs:{label:"需求目录名称"}},[t("el-input",{attrs:{placeholder:"输入需求名称,如:用户管理"},model:{value:s.requirementDialogInput,callback:function(i){s.requirementDialogInput=i},expression:"requirementDialogInput"}})],1)],1),t("span",{attrs:{slot:"footer"},slot:"footer"},[t("el-button",{on:{click:function(i){s.requirementDialogVisible=!1}}},[s._v("取消")]),t("el-button",{attrs:{type:"primary"},on:{click:s.handleCreateRequirementConfirm}},[s._v("确定")])],1)],1)],1)},q=[function(){var e=this,s=e._self._c;return s("div",{staticClass:"panel-section-header"},[s("span",[s("i",{staticClass:"el-icon-folder-add"}),e._v(" 创建新需求")])])}],B=d(j,V,q,!1,null,"4d22db92");const F=B.exports,R={name:"DesignDiscuss",components:{ModelSelectDialog:f,SkillSelectDialog:m,ResizableTextarea:g},props:{category:{type:String,default:""},name:{type:String,default:""},reqBasePath:{type:String,default:""}},data(){return{discussions:[],currentDiscussion:null,dropdownOpen:!1,activeMenuId:null,renamingId:null,renameTitle:"",deleteDialogVisible:!1,deleteTarget:null,logItems:[],inputMessage:"",disabled:!1,stopping:!1,promptTokens:0,modelName:"",modelSelectVisible:!1,skillSelectVisible:!1,sessionStatus:"idle",wsUnsubscribe:null}},computed:{specFilePath(){return!this.category||!this.name?"":`${this.reqBasePath}/${this.category}/${this.name}/${this.name}_方案.md`},sessionFilePath(){return!this.category||!this.name?"":`${this.reqBasePath}/${this.category}/${this.name}/session.json`}},watch:{category:{handler(){this.loadData()}},name:{handler(){this.loadData()}}},async mounted(){document.addEventListener("mousedown",this.onDocumentMouseDown),await this.loadData(),await this.loadDefaultModel()},beforeDestroy(){document.removeEventListener("mousedown",this.onDocumentMouseDown),this.wsUnsubscribe&&this.wsUnsubscribe()},methods:{handleKeydown(e){if(e.key==="Enter")if(e.ctrlKey){const s=e.target,t=s.selectionStart,i=s.selectionEnd,a=this.inputMessage;this.inputMessage=a.substring(0,t)+`
|
|
2
|
+
`+a.substring(i),this.$nextTick(()=>{s.selectionStart=s.selectionEnd=t+1})}else e.preventDefault(),this.sendMessage()},onDocumentMouseDown(e){this.activeMenuId&&!e.target.closest(".item-actions")&&(this.activeMenuId=null),this.dropdownOpen&&!e.target.closest(".discuss-dropdown")&&(this.dropdownOpen=!1)},async loadData(){await this.loadDiscussions()},async loadDiscussions(){if(!this.category||!this.name){this.discussions=[],this.currentDiscussion=null;return}try{const e=await n.getFileContent(this.sessionFilePath);if(e&&e.content){const s=JSON.parse(e.content);this.discussions=s.designDiscussions||[]}else this.discussions=[];this.discussions.length>0&&!this.currentDiscussion&&await this.switchDiscussion(this.discussions[0])}catch(e){console.error("Load discussions failed:",e),this.discussions=[],this.currentDiscussion=null}},async saveDiscussions(){if(!(!this.category||!this.name))try{const e=await n.getFileContent(this.sessionFilePath);let s={};e&&e.content&&(s=JSON.parse(e.content)),s.designDiscussions=this.discussions,await n.writeFile(this.sessionFilePath,JSON.stringify(s,null,2))}catch(e){console.error("Save discussions failed:",e)}},async createDiscussion(){var e,s,t,i;try{const a=`探讨${this.discussions.length+1}`,o=await n.createSession(a),r={id:((e=o.data)==null?void 0:e.id)||((s=o.data)==null?void 0:s.sessionId)||Date.now().toString(),sessionId:((t=o.data)==null?void 0:t.id)||((i=o.data)==null?void 0:i.sessionId),title:a,createdAt:new Date().toISOString()};this.discussions.push(r),await this.saveDiscussions(),this.dropdownOpen=!1,await this.switchDiscussion(r)}catch(a){console.error("Create discussion failed:",a),this.$message.error("创建探讨失败")}},async switchDiscussion(e){this.wsUnsubscribe&&(this.wsUnsubscribe(),this.wsUnsubscribe=null),this.currentDiscussion=e,this.dropdownOpen=!1,this.activeMenuId=null,this.logItems=[],this.inputMessage="",this.disabled=!1,this.stopping=!1,this.promptTokens=0,this.sessionStatus="idle",e&&e.sessionId&&(await this.loadMessages(),this.subscribeSession())},startRename(e){this.activeMenuId=null,this.$prompt("请输入新名称","重命名探讨",{confirmButtonText:"确定",cancelButtonText:"取消",inputValue:e.title}).then(async({value:s})=>{s&&s.trim()&&(e.title=s.trim(),await this.saveDiscussions())}).catch(()=>{})},confirmDelete(e){this.activeMenuId=null,this.deleteTarget=e,this.deleteDialogVisible=!0},async doDelete(){const e=this.deleteTarget;if(this.deleteDialogVisible=!1,this.deleteTarget=null,!!e)try{await n.deleteSession(e.sessionId);const s=this.discussions.findIndex(t=>t.id===e.id);s!==-1&&this.discussions.splice(s,1),await this.saveDiscussions(),this.currentDiscussion&&this.currentDiscussion.id===e.id&&(this.discussions.length>0?await this.switchDiscussion(this.discussions[0]):(this.wsUnsubscribe&&(this.wsUnsubscribe(),this.wsUnsubscribe=null),this.currentDiscussion=null,this.logItems=[],this.promptTokens=0,this.sessionStatus="idle"))}catch(s){console.error("Delete discussion failed:",s),this.$message.error("删除探讨失败")}},async sendMessage(){const e=this.inputMessage.trim();if(!e||this.disabled)return;if(!this.currentDiscussion||!this.currentDiscussion.sessionId){this.$message.error("会话不存在,请刷新页面");return}this.wsUnsubscribe||this.subscribeSession();const s=`方案路径:${this.specFilePath}
|
|
3
|
+
|
|
4
|
+
这个是对这个方案的探讨 你只需要回答用户的问题即可 不需要修改方案 也不要修改代码
|
|
5
|
+
|
|
6
|
+
用户输入: ${e}`;this.inputMessage="",this.disabled=!0,this.stopping=!1,this.logItems.push({type:"chat",content:e}),this.scrollChatToBottom(!0),n.sessionWsSend(this.currentDiscussion.sessionId,"chat",{message:s,sessionId:this.currentDiscussion.sessionId,modelName:this.modelName||void 0})},stopChat(){!this.currentDiscussion||!this.currentDiscussion.sessionId||this.stopping||(this.stopping=!0,n.sessionWsSend(this.currentDiscussion.sessionId,"stop",{sessionId:this.currentDiscussion.sessionId}))},subscribeSession(){!this.currentDiscussion||!this.currentDiscussion.sessionId||(this.wsUnsubscribe&&this.wsUnsubscribe(),this.wsUnsubscribe=n.wsSubscribe(this.currentDiscussion.sessionId,{running_sessions:e=>{const t=((e==null?void 0:e.runningSessionIds)||[]).includes(this.currentDiscussion.sessionId);this.sessionStatus=t?"processing":"idle",this.disabled=t},todos:e=>{e!=null&&e.todos&&this.logItems.push({type:"todos",todos:e.todos}),this.scrollChatToBottom()},step:e=>{var s;this.logItems.push({type:"step",thought:e.thought,toolCalls:e.toolCalls,success:e.success}),(s=e.usage)!=null&&s.promptTokens&&(this.promptTokens=e.usage.promptTokens),this.scrollChatToBottom()},compact:e=>{this.logItems.push({type:"system",content:`【压缩完成】${e.summary||""}`}),this.loadMessages()},done:e=>{var s;this.disabled=!1,this.stopping=!1,this.sessionStatus="completed",e!=null&&e.modelName&&(this.modelName=e.modelName),(s=e==null?void 0:e.usage)!=null&&s.promptTokens&&(this.promptTokens=e.usage.promptTokens),e!=null&&e.response&&this.logItems.push({type:"think",content:e.response}),this.scrollChatToBottom()},stopped:()=>{this.disabled=!1,this.stopping=!1,this.sessionStatus="idle",this.logItems.push({type:"think",content:"【已停止】"}),this.scrollChatToBottom()},error:e=>{this.$message.error((e==null?void 0:e.error)||"发生错误"),this.disabled=!1,this.stopping=!1,this.sessionStatus="idle"}}))},scrollChatToBottom(e=!1){const s=C(this.$refs.messagesContainer);this.$nextTick(()=>{v(this.$refs.messagesContainer,{force:e,prevSnapshot:s})})},async loadMessages(){if(!(!this.currentDiscussion||!this.currentDiscussion.sessionId))try{const e=await n.getMessages(this.currentDiscussion.sessionId);this.logItems=e.data||[],this.scrollChatToBottom(!0)}catch(e){console.error("Load messages failed:",e)}},async loadDefaultModel(){var e;try{const s=await n.getConfig("defaultModel");(e=s.data)!=null&&e.value&&(this.modelName=s.data.value)}catch(s){console.error("Load default model failed:",s)}},openModelSelector(){this.modelSelectVisible=!0},onModelSelected(e){const s=e.name.split("/");this.modelName=s.length>2?s.slice(1).join("/"):e.name,n.setConfig("defaultModel",this.modelName)},openSkillSelect(){this.skillSelectVisible=!0},onSkillSelected(e){const s=`[${e}] `,t=this.inputMessage.lastIndexOf("[");t!==-1&&this.inputMessage.slice(t).match(/^\[[\w-]+\] /)?this.inputMessage=this.inputMessage.slice(0,t)+s:this.inputMessage=s+this.inputMessage,this.skillSelectVisible=!1},getTodoStatusIcon(e){return{completed:"✅",in_progress:"🔄",pending:"⬜",cancelled:"❌"}[e]||"⬜"},formatInput(e,s){try{const t=JSON.parse(s);return e==="bash"||e==="execute_bash"?t.command+(t.workdir?` (${t.workdir})`:""):e==="read_file"?t.file_path+(t.offset?`:${t.offset}`:""):e==="edit_file"||e==="write_file"?t.file_path:e==="glob"||e==="find_files"?t.pattern+(t.directory?` (${t.directory})`:""):e==="grep"||e==="search_content"?`"${t.pattern}" (${t.directory||""})`:s}catch{return s}},renderMarkdown(e){return e?p(e):""}}};var L=function(){var s=this,t=s._self._c;return t("div",{staticClass:"discuss-container"},[s.discussions.length>0?t("div",{staticClass:"discuss-dropdown"},[t("div",{staticClass:"dropdown-trigger",on:{click:function(i){s.dropdownOpen=!s.dropdownOpen}}},[t("span",{staticClass:"dropdown-title"},[s._v(s._s(s.currentDiscussion?s.currentDiscussion.title:"选择探讨"))]),t("i",{staticClass:"el-icon-arrow-down",class:{rotated:s.dropdownOpen}})]),s.dropdownOpen?t("div",{staticClass:"dropdown-menu"},[s._l(s.discussions,function(i){return t("div",{key:i.id,staticClass:"dropdown-item",class:{active:s.currentDiscussion&&s.currentDiscussion.id===i.id}},[t("span",{staticClass:"item-title",on:{click:function(a){return s.switchDiscussion(i)}}},[s._v(s._s(i.title))]),t("span",{staticClass:"item-actions",on:{click:function(a){a.stopPropagation()}}},[t("span",{staticClass:"menu-trigger",on:{click:function(a){a.stopPropagation(),s.activeMenuId=s.activeMenuId===i.id?null:i.id}}},[s._v("⋮")]),s.activeMenuId===i.id?t("div",{staticClass:"menu-popup"},[t("div",{staticClass:"menu-item",on:{click:function(a){return a.stopPropagation(),s.startRename(i)}}},[s._v("重命名")]),t("div",{staticClass:"menu-item danger",on:{click:function(a){return a.stopPropagation(),s.confirmDelete(i)}}},[s._v("删除")])]):s._e()])])}),t("div",{staticClass:"dropdown-item add-item",on:{click:s.createDiscussion}},[t("i",{staticClass:"el-icon-plus"}),s._v(" 新建探讨 ")])],2):s._e()]):s._e(),!s.currentDiscussion&&s.discussions.length===0?t("div",{staticClass:"empty-discuss"},[t("div",{staticClass:"empty-card",on:{click:s.createDiscussion}},[t("i",{staticClass:"el-icon-chat-dot-round"}),t("p",[s._v("新建探讨")]),t("span",[s._v("点击创建第一个方案探讨会话")])])]):s._e(),s.currentDiscussion?[t("div",{ref:"messagesContainer",staticClass:"chat-messages"},[s.logItems.length?s._e():t("div",{staticClass:"empty-state"},[t("i",{staticClass:"el-icon-chat-dot-round"}),t("p",[s._v("与AI探讨方案内容,不会修改方案文件")])]),s._l(s.logItems,function(i,a){return[i.type==="todos"?t("div",{staticClass:"todos-list"},s._l(i.todos,function(o,r){return t("div",{key:r,staticClass:"todo-item"},[t("span",{staticClass:"todo-status"},[s._v(s._s(s.getTodoStatusIcon(o.status)))]),t("span",{staticClass:"todo-name"},[s._v(s._s(o.name))])])}),0):s._e(),i.type==="chat"?t("div",{staticClass:"flex justify-end"},[t("div",{staticClass:"user-question"},[s._v(s._s(i.content))])]):i.type==="system"?t("div",{staticClass:"system-message",domProps:{innerHTML:s._s(s.renderMarkdown(i.content))}}):i.type==="step"?[i.thought?t("div",{staticClass:"ai-thought",domProps:{innerHTML:s._s(s.renderMarkdown(i.thought))}}):s._e(),s._l(i.toolCalls,function(o,r){return t("div",{key:r,staticClass:"log-mute"},[t("span",{class:i.success!==!1?"tool-success":"tool-fail"},[s._v(" "+s._s(i.success!==!1?"✓":"✗")+" ")]),s._v(" "+s._s(o.function.name)+" "),o.function.arguments?t("span",{staticClass:"tool-input"},[s._v(s._s(s.formatInput(o.function.name,o.function.arguments)))]):s._e()])})]:i.type==="think"?t("div",{staticClass:"ai-thought",domProps:{innerHTML:s._s(s.renderMarkdown(i.content))}}):s._e()]}),s.modelName?t("div",{staticClass:"build-info"},[t("span",{staticClass:"icon"},[s._v("▣")]),s._v(" Build · "+s._s(s.modelName)+" ")]):s._e()],2),t("div",{staticClass:"chat-input-area"},[t("div",{staticClass:"input-row"},[t("ResizableTextarea",{staticClass:"input-area",attrs:{rows:5,placeholder:"输入探讨内容... (Enter 发送, Ctrl+Enter 换行)",disabled:s.disabled&&!s.stopping},nativeOn:{keydown:function(i){return!i.type.indexOf("key")&&s._k(i.keyCode,"enter",13,i.key,"Enter")?null:s.handleKeydown.apply(null,arguments)}},model:{value:s.inputMessage,callback:function(i){s.inputMessage=i},expression:"inputMessage"}}),t("div",{staticClass:"input-actions"},[s.disabled&&!s.stopping?t("el-button",{staticClass:"stop-btn",attrs:{type:"danger"},on:{click:s.stopChat}},[s._v(" ■ 停止 ")]):s.stopping?t("el-button",{staticClass:"stop-btn",attrs:{type:"info",disabled:""}},[s._v(" 停止中... ")]):t("el-button",{staticClass:"send-btn",attrs:{type:"primary",disabled:!s.inputMessage.trim()},on:{click:s.sendMessage}},[s._v(" 发送 ")])],1)],1)]),t("div",{staticClass:"status-bar"},[t("span",{class:s.sessionStatus==="processing"?"status-thinking":"status-ready"},[s.sessionStatus==="processing"?t("span",{staticClass:"thinking-spinner"}):s._e(),s._v(" "+s._s(s.sessionStatus==="processing"?"思考中":"✓ 就绪")+" ")]),t("span",{staticClass:"separator"},[s._v("|")]),t("span",{staticClass:"model-selector",on:{click:s.openModelSelector,mousedown:function(i){i.preventDefault()}}},[s._v(" 模型:"+s._s(s.modelName||"-")+" ▾ ")]),t("span",{staticClass:"separator"},[s._v("|")]),t("span",[s._v("会话:"+s._s(s.currentDiscussion.sessionId?s.currentDiscussion.sessionId.slice(0,8):"--------"))]),t("span",{staticClass:"separator"},[s._v("|")]),t("span",[s._v("token:"+s._s(s.promptTokens||0))]),t("span",{staticClass:"separator"},[s._v("|")]),t("span",{staticClass:"status-action",on:{click:s.openSkillSelect,mousedown:function(i){i.preventDefault()}}},[s._v("选择Skill")])])]:s._e(),t("el-dialog",{attrs:{visible:s.deleteDialogVisible,title:"确认删除",width:"360px","close-on-click-modal":!1},on:{"update:visible":function(i){s.deleteDialogVisible=i}}},[t("p",[s._v("确定要删除探讨「"+s._s(s.deleteTarget?s.deleteTarget.title:"")+"」吗?此操作不可恢复。")]),t("span",{attrs:{slot:"footer"},slot:"footer"},[t("el-button",{on:{click:function(i){s.deleteDialogVisible=!1}}},[s._v("取消")]),t("el-button",{attrs:{type:"danger"},on:{click:s.doDelete}},[s._v("删除")])],1)]),t("ModelSelectDialog",{attrs:{visible:s.modelSelectVisible,"current-model":s.modelName},on:{"update:visible":function(i){s.modelSelectVisible=i},select:s.onModelSelected}}),t("SkillSelectDialog",{attrs:{visible:s.skillSelectVisible},on:{"update:visible":function(i){s.skillSelectVisible=i},select:s.onSkillSelected,close:function(i){s.skillSelectVisible=!1}}})],2)},N=[],O=d(R,L,N,!1,null,"fe6cd6b0");const E=O.exports,A={name:"Step2Design",components:{ModelSelectDialog:f,CommandDialog:y,FileSelectDialog:_,SkillSelectDialog:m,ResizableTextarea:g,DesignDiscuss:E},props:{category:{type:String,default:""},name:{type:String,default:""},reqBasePath:{type:String,default:""}},data(){return{editor:null,specContent:"",inputMessage:"",disabled:!1,stopping:!1,promptTokens:0,logItems:[],modelName:"",modelSelectVisible:!1,commandDialogVisible:!1,fileSelectVisible:!1,skillSelectVisible:!1,sessionId:"",sessionStatus:"idle",customActions:[],chatTab:"assistant",parentInfo:null}},computed:{specFilePath(){return!this.category||!this.name?"等待选择需求...":`${this.reqBasePath}/${this.category}/${this.name}/${this.name}_方案.md`}},watch:{category:{handler(){this.loadData()}},name:{handler(){this.loadData()}},reqBasePath:{handler(e){e&&this.loadData()}}},async mounted(){this.initMonacoEditor(),await this.loadData(),await this.loadDefaultModel(),await this.loadCustomActions(),n.ws.init()},beforeDestroy(){this.editor&&(this.editor.dispose(),this.editor=null),this.wsUnsubscribe&&this.wsUnsubscribe()},methods:{handleKeydown(e){if(e.key==="Enter")if(e.ctrlKey){const s=e.target,t=s.selectionStart,i=s.selectionEnd,a=this.inputMessage;this.inputMessage=a.substring(0,t)+`
|
|
7
|
+
`+a.substring(i),this.$nextTick(()=>{s.selectionStart=s.selectionEnd=t+1})}else e.preventDefault(),this.sendMessage()},async loadData(){this.reqBasePath&&await Promise.all([this.loadSpec(),this.loadSession()])},async loadSpec(){if(!this.category||!this.name){this.specContent=`# 选择或创建需求项目开始设计
|
|
8
|
+
`,this.syncEditorContent(this.specContent);return}try{const e=this.specFilePath,s=await n.getFileContent(e);this.specContent=s.content||"",this.syncEditorContent(this.specContent)}catch(e){console.error("Load spec failed:",e),this.specContent="",this.syncEditorContent("")}},async loadSession(){if(!this.category||!this.name){this.sessionId="",this.$emit("update:sessionId",""),this.parentInfo=null;return}try{const e=`${this.reqBasePath}/${this.category}/${this.name}/session.json`,s=await n.getFileContent(e);if(s&&s.content){const t=JSON.parse(s.content);this.sessionId=t.designSessionId||"",this.parentInfo=t.parent||null}else this.sessionId="",this.parentInfo=null;this.$emit("update:sessionId",this.sessionId),this.sessionId?(await this.loadMessages(),this.subscribeSession()):this.logItems=[]}catch(e){console.error("Load session failed:",e),this.sessionId="",this.$emit("update:sessionId",""),this.parentInfo=null,this.logItems=[]}},syncEditorContent(e){if(!this.editor||e===void 0||e===null)return;const s=String(e);this.editor.getValue()!==s&&this.editor.setValue(s)},initMonacoEditor(){this.editor||this.$nextTick(()=>{this.createEditor()})},createEditor(){this.editor||(this.editor=w.create(this.$refs.editorContainer,{value:this.specContent||`# 选择或创建需求项目开始设计
|
|
9
|
+
`,language:"markdown",theme:"vs-dark",fontSize:14,fontFamily:"ui-monospace, SFMono-Regular, 'JetBrains Mono', Menlo, Monaco, Consolas, monospace",minimap:{enabled:!1},lineNumbers:"on",wordWrap:"on",scrollBeyondLastLine:!1,automaticLayout:!0,padding:{top:16}}),this.editor.addCommand($.CtrlCmd|I.KeyS,()=>{this.saveSpec()}),this.syncEditorContent(this.specContent))},saveSpec(){if(!this.editor)return;const e=this.editor.getValue();this.$emit("save-spec",e)},async sendMessage(){const e=this.inputMessage.trim();if(!e||this.disabled)return;if(!this.sessionId){this.$message.error("会话不存在,请刷新页面");return}this.wsUnsubscribe||this.subscribeSession();let s="";this.logItems.length===0&&this.parentInfo&&(s=`
|
|
10
|
+
|
|
11
|
+
注意:当前方案是「${this.parentInfo.name}」的子方案,请参考父方案内容。父方案路径:${this.parentInfo.specPath}`);const t=`先在 ${this.specFilePath} 生成方案,先不要修改代码。${s}
|
|
12
|
+
|
|
13
|
+
用户输入: ${e}`;this.inputMessage="",this.disabled=!0,this.stopping=!1,this.logItems.push({type:"chat",content:e}),this.scrollChatToBottom(!0),n.sessionWsSend(this.sessionId,"chat",{message:t,sessionId:this.sessionId,modelName:this.modelName||void 0})},stopChat(){!this.sessionId||this.stopping||(this.stopping=!0,n.sessionWsSend(this.sessionId,"stop",{sessionId:this.sessionId}))},subscribeSession(){this.sessionId&&(this.wsUnsubscribe&&this.wsUnsubscribe(),this.wsUnsubscribe=n.wsSubscribe(this.sessionId,{running_sessions:e=>{const t=((e==null?void 0:e.runningSessionIds)||[]).includes(this.sessionId);this.sessionStatus=t?"processing":"idle",this.disabled=t},todos:e=>{var s;console.log("[Step2Design] WS todos event, todos count:",(s=e==null?void 0:e.todos)==null?void 0:s.length),e!=null&&e.todos&&this.logItems.push({type:"todos",todos:e.todos}),this.scrollChatToBottom()},step:e=>{var s,t;console.log("[Step2Design] WS step event, has thought:",!!e.thought,"toolCalls:",(s=e==null?void 0:e.toolCalls)==null?void 0:s.length),this.logItems.push({type:"step",thought:e.thought,toolCalls:e.toolCalls,success:e.success}),(t=e.usage)!=null&&t.promptTokens&&(this.promptTokens=e.usage.promptTokens),this.scrollChatToBottom()},compact:e=>{this.logItems.push({type:"system",content:`【压缩完成】${e.summary||""}`}),this.loadMessages()},done:e=>{var s;console.log("[Step2Design] WS done event"),this.disabled=!1,this.stopping=!1,this.sessionStatus="completed",e!=null&&e.modelName&&(this.modelName=e.modelName),(s=e==null?void 0:e.usage)!=null&&s.promptTokens&&(this.promptTokens=e.usage.promptTokens),e!=null&&e.response&&this.logItems.push({type:"think",content:e.response}),this.$emit("spec-updated"),this.scrollChatToBottom()},stopped:()=>{console.log("[Step2Design] WS stopped event"),this.disabled=!1,this.stopping=!1,this.sessionStatus="idle",this.logItems.push({type:"think",content:"【已停止】"}),this.scrollChatToBottom()},error:e=>{this.$message.error((e==null?void 0:e.error)||"发生错误"),this.disabled=!1,this.stopping=!1,this.sessionStatus="idle"}}))},scrollChatToBottom(e=!1){const s=C(this.$refs.messagesContainer);console.log("[Step2Design] scrollChatToBottom called, force:",e,"snap:",JSON.stringify(s)),this.$nextTick(()=>{v(this.$refs.messagesContainer,{force:e,prevSnapshot:s})})},async loadMessages(){if(this.sessionId)try{const e=await n.getMessages(this.sessionId);this.logItems=e.data||[],this.scrollChatToBottom(!0)}catch(e){console.error("Load messages failed:",e)}},async loadDefaultModel(){var e;try{const s=await n.getConfig("defaultModel");(e=s.data)!=null&&e.value&&(this.modelName=s.data.value)}catch(s){console.error("Load default model failed:",s)}},openModelSelector(){this.modelSelectVisible=!0},onModelSelected(e){const s=e.name.split("/");this.modelName=s.length>2?s.slice(1).join("/"):e.name,n.setConfig("defaultModel",this.modelName)},openCommandDialog(){this.commandDialogVisible=!0},handleExecuteCommand(e){this.inputMessage=e+" ",this.$nextTick(()=>{const s=this.$el.querySelector(".input-area textarea");s&&s.focus()})},openFileSelect(){this.fileSelectVisible=!0},onFileSelected(e){const s=this.inputMessage.lastIndexOf("@");s!==-1?this.inputMessage=this.inputMessage.slice(0,s)+e+" ":this.inputMessage+=e+" ",this.cancelFileSelect()},cancelFileSelect(){this.fileSelectVisible=!1},openSkillSelect(){this.skillSelectVisible=!0},onSkillSelected(e){const s=`[${e}] `,t=this.inputMessage.lastIndexOf("[");t!==-1&&this.inputMessage.slice(t).match(/^\[[\w-]+\] /)?this.inputMessage=this.inputMessage.slice(0,t)+s:this.inputMessage=s+this.inputMessage,this.cancelSkillSelect()},cancelSkillSelect(){this.skillSelectVisible=!1},getTodoStatusIcon(e){return{completed:"✅",in_progress:"🔄",pending:"⬜",cancelled:"❌"}[e]||"⬜"},formatInput(e,s){try{const t=JSON.parse(s);return e==="bash"||e==="execute_bash"?t.command+(t.workdir?` (${t.workdir})`:""):e==="read_file"?t.file_path+(t.offset?`:${t.offset}`:""):e==="edit_file"||e==="write_file"?t.file_path:e==="glob"||e==="find_files"?t.pattern+(t.directory?` (${t.directory})`:""):e==="grep"||e==="search_content"?`"${t.pattern}" (${t.directory||""})`:s}catch{return s}},renderMarkdown(e){return e?p(e):""},openCustomActions(){window.open("/#/views/pc/custom-actions","_blank")},async loadCustomActions(){try{const e=await n.getCustomActions("design");this.customActions=e.data||[]}catch(e){console.error("Load custom actions failed:",e)}},executeCustomAction(e){this.inputMessage=e.prompt,this.$nextTick(()=>{const s=this.$el.querySelector(".input-area textarea");s&&s.focus(),e.auto_send&&this.sendMessage()})}}};var W=function(){var s=this,t=s._self._c;return t("div",{staticClass:"step2-container"},[t("div",{staticClass:"step2-main"},[t("div",{staticClass:"editor-panel"},[t("div",{staticClass:"editor-header"},[t("i",{staticClass:"el-icon-document"}),t("span",[s._v(s._s(s.specFilePath))])]),t("div",{ref:"editorContainer",staticClass:"editor-container"})]),t("div",{staticClass:"chat-panel"},[t("div",{staticClass:"panel-header panel-tabs"},[t("div",{staticClass:"panel-tab",class:{active:s.chatTab==="assistant"},on:{click:function(i){s.chatTab="assistant"}}},[t("i",{staticClass:"el-icon-chat-dot-round"}),s._v(" AI生成方案 ")]),t("div",{staticClass:"panel-tab",class:{active:s.chatTab==="discuss"},on:{click:function(i){s.chatTab="discuss"}}},[t("i",{staticClass:"el-icon-chat-dot-square"}),s._v(" AI方案交流 ")])]),s.chatTab==="assistant"?[t("div",{ref:"messagesContainer",staticClass:"chat-messages"},[s.logItems.length?s._e():t("div",{staticClass:"empty-state"},[t("i",{staticClass:"el-icon-chat-dot-round"}),t("p",[s._v("输入需求描述,AI将协助您完善方案")])]),s._l(s.logItems,function(i,a){return[i.type==="todos"?t("div",{staticClass:"todos-list"},s._l(i.todos,function(o,r){return t("div",{key:r,staticClass:"todo-item"},[t("span",{staticClass:"todo-status"},[s._v(s._s(s.getTodoStatusIcon(o.status)))]),t("span",{staticClass:"todo-name"},[s._v(s._s(o.name))])])}),0):s._e(),i.type==="chat"?t("div",{staticClass:"flex justify-end"},[t("div",{staticClass:"user-question"},[s._v(s._s(i.content))])]):i.type==="system"?t("div",{staticClass:"system-message",domProps:{innerHTML:s._s(s.renderMarkdown(i.content))}}):i.type==="step"?[i.thought?t("div",{staticClass:"ai-thought",domProps:{innerHTML:s._s(s.renderMarkdown(i.thought))}}):s._e(),s._l(i.toolCalls,function(o,r){return t("div",{key:r,staticClass:"log-mute"},[t("span",{class:i.success!==!1?"tool-success":"tool-fail"},[s._v(" "+s._s(i.success!==!1?"✓":"✗")+" ")]),s._v(" "+s._s(o.function.name)+" "),o.function.arguments?t("span",{staticClass:"tool-input"},[s._v(s._s(s.formatInput(o.function.name,o.function.arguments)))]):s._e()])})]:i.type==="think"?t("div",{staticClass:"ai-thought",domProps:{innerHTML:s._s(s.renderMarkdown(i.content))}}):s._e()]}),s.modelName?t("div",{staticClass:"build-info"},[t("span",{staticClass:"icon"},[s._v("▣")]),s._v(" Build · "+s._s(s.modelName)+" ")]):s._e()],2),t("div",{staticClass:"chat-input-area"},[t("div",{staticClass:"input-row"},[t("ResizableTextarea",{staticClass:"input-area",attrs:{rows:5,placeholder:"输入消息... (Enter 发送, Ctrl+Enter 换行, @ 选择文件)",disabled:s.disabled&&!s.stopping},nativeOn:{keydown:function(i){return!i.type.indexOf("key")&&s._k(i.keyCode,"enter",13,i.key,"Enter")?null:s.handleKeydown.apply(null,arguments)}},model:{value:s.inputMessage,callback:function(i){s.inputMessage=i},expression:"inputMessage"}}),t("div",{staticClass:"input-actions"},[s._l(s.customActions,function(i){return t("el-button",{key:i.id,attrs:{type:"info",size:"small",disabled:s.disabled},on:{click:function(a){return s.executeCustomAction(i)}}},[s._v(" "+s._s(i.name)+" ")])}),s.disabled&&!s.stopping?t("el-button",{staticClass:"stop-btn",attrs:{type:"danger"},on:{click:s.stopChat}},[s._v(" ■ 停止 ")]):s.stopping?t("el-button",{staticClass:"stop-btn",attrs:{type:"info",disabled:""}},[s._v(" 停止中... ")]):t("el-button",{staticClass:"send-btn",attrs:{type:"primary",disabled:!s.inputMessage.trim()},on:{click:s.sendMessage}},[s._v(" 发送 ")])],2)],1)]),t("div",{staticClass:"status-bar"},[t("span",{class:s.sessionStatus==="processing"?"status-thinking":"status-ready"},[s.sessionStatus==="processing"?t("span",{staticClass:"thinking-spinner"}):s._e(),s._v(" "+s._s(s.sessionStatus==="processing"?"思考中":"✓ 就绪")+" ")]),t("span",{staticClass:"separator"},[s._v("|")]),t("span",{staticClass:"model-selector",on:{click:s.openModelSelector,mousedown:function(i){i.preventDefault()}}},[s._v(" 模型:"+s._s(s.modelName||"-")+" ▾ ")]),t("span",{staticClass:"separator"},[s._v("|")]),t("span",[s._v("会话:"+s._s(s.sessionId?s.sessionId.slice(0,8):"--------"))]),t("span",{staticClass:"separator"},[s._v("|")]),t("span",[s._v("token:"+s._s(s.promptTokens||0))]),t("span",{staticClass:"separator"},[s._v("|")]),t("span",{staticClass:"status-action",on:{click:s.openCommandDialog,mousedown:function(i){i.preventDefault()}}},[s._v("命令")]),t("span",{staticClass:"separator"},[s._v("|")]),t("span",{staticClass:"status-action",on:{click:s.openFileSelect,mousedown:function(i){i.preventDefault()}}},[s._v("选择文件")]),t("span",{staticClass:"separator"},[s._v("|")]),t("span",{staticClass:"status-action",on:{click:s.openSkillSelect,mousedown:function(i){i.preventDefault()}}},[s._v("选择Skill")])])]:s._e(),s.chatTab==="discuss"?t("DesignDiscuss",{attrs:{category:s.category,name:s.name,reqBasePath:s.reqBasePath}}):s._e()],2)]),t("ModelSelectDialog",{attrs:{visible:s.modelSelectVisible,"current-model":s.modelName},on:{"update:visible":function(i){s.modelSelectVisible=i},select:s.onModelSelected}}),t("CommandDialog",{attrs:{visible:s.commandDialogVisible},on:{"update:visible":function(i){s.commandDialogVisible=i},execute:s.handleExecuteCommand}}),t("FileSelectDialog",{attrs:{visible:s.fileSelectVisible},on:{"update:visible":function(i){s.fileSelectVisible=i},select:s.onFileSelected,close:s.cancelFileSelect}}),t("SkillSelectDialog",{attrs:{visible:s.skillSelectVisible},on:{"update:visible":function(i){s.skillSelectVisible=i},select:s.onSkillSelected,close:s.cancelSkillSelect}})],1)},U=[],K=d(A,W,U,!1,null,"f7e60752");const J=K.exports,z={name:"Step3CodeGen",components:{ModelSelectDialog:f,CommandDialog:y,FileSelectDialog:_,SkillSelectDialog:m,ResizableTextarea:g},props:{category:{type:String,default:""},name:{type:String,default:""},reqBasePath:{type:String,default:""}},data(){return{inputMessage:"",disabled:!1,stopping:!1,promptTokens:0,dotAnimation:"",dotInterval:null,dots:["⠋","⠙","⠹","⠸","⠼","⠴","⠦","⠧"],logItems:[],modelName:"",modelSelectVisible:!1,commandDialogVisible:!1,fileSelectVisible:!1,skillSelectVisible:!1,sessionId:"",sessionStatus:"idle",customActions:[],devLogContent:"",devLogLoading:!1}},computed:{specFilePath(){return!this.category||!this.name?"":`${this.reqBasePath}/${this.category}/${this.name}/${this.name}_方案.md`},renderedDevLog(){return this.devLogContent?p(this.devLogContent):'<p style="color: #84848a;">暂无记录</p>'}},watch:{category:{handler(){this.loadSession()}},name:{handler(){this.loadSession()}}},async mounted(){await this.loadSession(),await this.loadDefaultModel(),await this.loadCustomActions(),n.ws.init()},beforeDestroy(){this.dotInterval&&clearInterval(this.dotInterval),this.wsUnsubscribe&&this.wsUnsubscribe()},methods:{handleKeydown(e){if(e.key==="Enter")if(e.ctrlKey){const s=e.target,t=s.selectionStart,i=s.selectionEnd,a=this.inputMessage;this.inputMessage=a.substring(0,t)+`
|
|
14
|
+
`+a.substring(i),this.$nextTick(()=>{s.selectionStart=s.selectionEnd=t+1})}else e.preventDefault(),this.sendMessage()},async loadSession(){if(!this.category||!this.name){this.sessionId="",this.$emit("update:sessionId","");return}try{const e=`${this.reqBasePath}/${this.category}/${this.name}/session.json`,s=await n.getFileContent(e);if(s&&s.content){const t=JSON.parse(s.content);this.sessionId=t.codeSessionId||""}else this.sessionId="";this.$emit("update:sessionId",this.sessionId),this.sessionId?(await this.loadMessages(),this.subscribeSession()):this.logItems=[]}catch(e){console.error("Load session failed:",e),this.sessionId="",this.$emit("update:sessionId",""),this.logItems=[]}},insertGenerateCommand(){this.specFilePath&&(this.inputMessage=`根据 ${this.specFilePath} 方案开发相应功能,先不要修改方案文档。`)},async sendMessage(){const e=this.inputMessage.trim();if(!(!e||this.disabled)){if(!this.sessionId){this.$message.error("会话不存在,请刷新页面");return}this.wsUnsubscribe||this.subscribeSession(),this.inputMessage="",this.disabled=!0,this.stopping=!1,this.logItems.push({type:"chat",content:e}),this.scrollChatToBottom(!0),n.sessionWsSend(this.sessionId,"chat",{message:e,sessionId:this.sessionId,modelName:this.modelName||void 0,enableDevLog:!0})}},stopChat(){!this.sessionId||this.stopping||(this.stopping=!0,n.sessionWsSend(this.sessionId,"stop",{sessionId:this.sessionId}))},subscribeSession(){this.sessionId&&(this.wsUnsubscribe&&this.wsUnsubscribe(),this.wsUnsubscribe=n.wsSubscribe(this.sessionId,{running_sessions:e=>{const t=((e==null?void 0:e.runningSessionIds)||[]).includes(this.sessionId);this.sessionStatus=t?"processing":"idle",this.disabled=t},todos:e=>{e!=null&&e.todos&&this.logItems.push({type:"todos",todos:e.todos}),this.scrollChatToBottom()},step:e=>{var s;this.logItems.push({type:"step",thought:e.thought,toolCalls:e.toolCalls,success:e.success}),(s=e.usage)!=null&&s.promptTokens&&(this.promptTokens=e.usage.promptTokens),this.scrollChatToBottom()},compact:e=>{this.logItems.push({type:"system",content:`【压缩完成】${e.summary||""}`}),this.loadMessages()},done:e=>{var s;this.disabled=!1,this.stopping=!1,this.sessionStatus="completed",e!=null&&e.modelName&&(this.modelName=e.modelName),(s=e==null?void 0:e.usage)!=null&&s.promptTokens&&(this.promptTokens=e.usage.promptTokens),e!=null&&e.response&&this.logItems.push({type:"think",content:e.response}),this.loadDevLog(),this.scrollChatToBottom()},stopped:()=>{this.disabled=!1,this.stopping=!1,this.sessionStatus="idle",this.logItems.push({type:"think",content:"【已停止】"}),this.scrollChatToBottom()},error:e=>{this.$message.error((e==null?void 0:e.error)||"发生错误"),this.disabled=!1,this.stopping=!1,this.sessionStatus="idle"}}))},scrollChatToBottom(e=!1){const s=C(this.$refs.messagesContainer);console.log("[Step3CodeGen] scrollChatToBottom called, force:",e,"snap:",JSON.stringify(s)),this.$nextTick(()=>{v(this.$refs.messagesContainer,{force:e,prevSnapshot:s})})},async loadMessages(){if(this.sessionId)try{const e=await n.getMessages(this.sessionId);this.logItems=e.data||[],this.scrollChatToBottom(!0)}catch(e){console.error("Load messages failed:",e)}},async loadDefaultModel(){var e;try{const s=await n.getConfig("defaultModel");(e=s.data)!=null&&e.value&&(this.modelName=s.data.value)}catch(s){console.error("Load default model failed:",s)}},openModelSelector(){this.modelSelectVisible=!0},onModelSelected(e){const s=e.name.split("/");this.modelName=s.length>2?s.slice(1).join("/"):e.name,n.setConfig("defaultModel",this.modelName)},openCommandDialog(){this.commandDialogVisible=!0},handleExecuteCommand(e){this.inputMessage=e+" ",this.$nextTick(()=>{const s=this.$el.querySelector(".input-area textarea");s&&s.focus()})},openFileSelect(){this.fileSelectVisible=!0},onFileSelected(e){const s=this.inputMessage.lastIndexOf("@");s!==-1?this.inputMessage=this.inputMessage.slice(0,s)+e+" ":this.inputMessage+=e+" ",this.cancelFileSelect()},cancelFileSelect(){this.fileSelectVisible=!1},openSkillSelect(){this.skillSelectVisible=!0},onSkillSelected(e){const s=`[${e}] `,t=this.inputMessage.lastIndexOf("[");t!==-1&&this.inputMessage.slice(t).match(/^\[[\w-]+\] /)?this.inputMessage=this.inputMessage.slice(0,t)+s:this.inputMessage=s+this.inputMessage,this.cancelSkillSelect()},cancelSkillSelect(){this.skillSelectVisible=!1},getTodoStatusIcon(e){return{completed:"✅",in_progress:"🔄",pending:"⬜",cancelled:"❌"}[e]||"⬜"},formatInput(e,s){try{const t=JSON.parse(s);return e==="bash"||e==="execute_bash"?t.command+(t.workdir?` (${t.workdir})`:""):e==="read_file"?t.file_path+(t.offset?`:${t.offset}`:""):e==="edit_file"||e==="write_file"?t.file_path:e==="glob"||e==="find_files"?t.pattern+(t.directory?` (${t.directory})`:""):e==="grep"||e==="search_content"?`"${t.pattern}" (${t.directory||""})`:s}catch{return s}},renderMarkdown(e){return e?p(e):""},async loadCustomActions(){try{const e=await n.getCustomActions("code");this.customActions=e.data||[]}catch(e){console.error("Load custom actions failed:",e),this.customActions=[]}},executeCustomAction(e){this.inputMessage=e.prompt,this.$nextTick(()=>{const s=this.$el.querySelector(".input-area textarea");s&&s.focus(),e.auto_send&&this.sendMessage()})},openCustomActions(){window.open("/#/views/pc/custom-actions","_blank")},async loadDevLog(){var e;if(this.sessionId){this.devLogLoading=!0;try{const t=await(await fetch(`/api/devlog?sessionId=${this.sessionId}`)).json();t.success&&(this.devLogContent=((e=t.data)==null?void 0:e.content)||"")}catch(s){console.error("加载开发日志失败:",s)}finally{this.devLogLoading=!1}}},async refreshDevLog(){await this.loadDevLog()}}};var H=function(){var s=this,t=s._self._c;return t("div",{staticClass:"step3-container"},[t("div",{staticClass:"step3-main"},[t("div",{staticClass:"code-chat-panel"},[t("div",{staticClass:"panel-header"},[s._m(0),t("div",{staticClass:"header-actions"},[t("el-button",{attrs:{type:"primary",size:"small",disabled:s.disabled},on:{click:s.insertGenerateCommand}},[t("i",{staticClass:"el-icon-document"}),s._v(" 根据方案生成代码 ")]),t("el-button",{attrs:{type:"warning",size:"small"},on:{click:s.openCustomActions}},[t("i",{staticClass:"el-icon-setting"}),s._v(" 动作配置 ")])],1)]),t("div",{ref:"messagesContainer",staticClass:"chat-messages"},[s.logItems.length?s._e():t("div",{staticClass:"empty-state"},[t("i",{staticClass:"el-icon-chat-dot-round"}),t("p",[s._v("点击上方按钮或输入需求生成代码")])]),s._l(s.logItems,function(i,a){return[i.type==="todos"?t("div",{staticClass:"todos-list"},s._l(i.todos,function(o,r){return t("div",{key:r,staticClass:"todo-item"},[t("span",{staticClass:"todo-status"},[s._v(s._s(s.getTodoStatusIcon(o.status)))]),t("span",{staticClass:"todo-name"},[s._v(s._s(o.name))])])}),0):s._e(),i.type==="chat"?t("div",{staticClass:"flex justify-end"},[t("div",{staticClass:"user-question"},[s._v(s._s(i.content))])]):i.type==="think"?t("div",{staticClass:"ai-thought",domProps:{innerHTML:s._s(s.renderMarkdown(i.content))}}):i.type==="system"?t("div",{staticClass:"system-message",domProps:{innerHTML:s._s(s.renderMarkdown(i.content))}}):i.type==="step"?[i.thought?t("div",{staticClass:"ai-thought",domProps:{innerHTML:s._s(s.renderMarkdown(i.thought))}}):s._e(),s._l(i.toolCalls,function(o,r){return t("div",{key:r,staticClass:"log-mute"},[t("span",{class:i.success!==!1?"tool-success":"tool-fail"},[s._v(" "+s._s(i.success!==!1?"✓":"✗")+" ")]),s._v(" "+s._s(o.function.name)+" "),o.function.arguments?t("span",{staticClass:"tool-input"},[s._v(s._s(s.formatInput(o.function.name,o.function.arguments)))]):s._e()])})]:s._e()]}),s.modelName?t("div",{staticClass:"build-info"},[t("span",{staticClass:"icon"},[s._v("▣")]),s._v(" Build · "+s._s(s.modelName)+" ")]):s._e()],2),t("div",{staticClass:"chat-input-area"},[t("div",{staticClass:"input-row"},[t("ResizableTextarea",{staticClass:"input-area",attrs:{rows:5,placeholder:"输入代码修改要求... (Enter 发送, Ctrl+Enter 换行, @ 选择文件)",disabled:s.disabled&&!s.stopping},nativeOn:{keydown:function(i){return!i.type.indexOf("key")&&s._k(i.keyCode,"enter",13,i.key,"Enter")?null:s.handleKeydown.apply(null,arguments)}},model:{value:s.inputMessage,callback:function(i){s.inputMessage=i},expression:"inputMessage"}}),t("div",{staticClass:"input-actions"},[s._l(s.customActions,function(i){return t("el-button",{key:i.id,attrs:{type:"info",size:"small",disabled:s.disabled},on:{click:function(a){return s.executeCustomAction(i)}}},[s._v(" "+s._s(i.name)+" ")])}),s.disabled&&!s.stopping?t("el-button",{staticClass:"stop-btn",attrs:{type:"danger"},on:{click:s.stopChat}},[s._v(" ■ 停止 ")]):s.stopping?t("el-button",{staticClass:"stop-btn",attrs:{type:"info",disabled:""}},[s._v(" 停止中... ")]):t("el-button",{staticClass:"send-btn",attrs:{type:"primary",disabled:!s.inputMessage.trim()},on:{click:s.sendMessage}},[s._v(" 发送 ")])],2)],1)]),t("div",{staticClass:"status-bar"},[t("span",{class:s.sessionStatus==="processing"?"status-thinking":"status-ready"},[s.sessionStatus==="processing"?t("span",{staticClass:"thinking-spinner"}):s._e(),s._v(" "+s._s(s.sessionStatus==="processing"?"思考中":"✓ 就绪")+" ")]),t("span",{staticClass:"separator"},[s._v("|")]),t("span",{staticClass:"model-selector",on:{click:s.openModelSelector,mousedown:function(i){i.preventDefault()}}},[s._v(" 模型:"+s._s(s.modelName||"-")+" ▾ ")]),t("span",{staticClass:"separator"},[s._v("|")]),t("span",[s._v("会话:"+s._s(s.sessionId?s.sessionId.slice(0,8):"--------"))]),t("span",{staticClass:"separator"},[s._v("|")]),t("span",[s._v("token:"+s._s(s.promptTokens||0))]),t("span",{staticClass:"separator"},[s._v("|")]),t("span",{staticClass:"status-action",on:{click:s.openCommandDialog,mousedown:function(i){i.preventDefault()}}},[s._v("命令")]),t("span",{staticClass:"separator"},[s._v("|")]),t("span",{staticClass:"status-action",on:{click:s.openFileSelect,mousedown:function(i){i.preventDefault()}}},[s._v("选择文件")]),t("span",{staticClass:"separator"},[s._v("|")]),t("span",{staticClass:"status-action",on:{click:s.openSkillSelect,mousedown:function(i){i.preventDefault()}}},[s._v("选择Skill")])])]),t("div",{staticClass:"devlog-panel"},[t("div",{staticClass:"panel-header"},[s._m(1),t("el-button",{attrs:{size:"small"},on:{click:s.refreshDevLog}},[t("i",{staticClass:"el-icon-refresh"}),s._v(" 刷新 ")])],1),t("div",{staticClass:"devlog-content",domProps:{innerHTML:s._s(s.renderedDevLog)}})])]),t("ModelSelectDialog",{attrs:{visible:s.modelSelectVisible,"current-model":s.modelName},on:{"update:visible":function(i){s.modelSelectVisible=i},select:s.onModelSelected}}),t("CommandDialog",{attrs:{visible:s.commandDialogVisible},on:{"update:visible":function(i){s.commandDialogVisible=i},execute:s.handleExecuteCommand}}),t("FileSelectDialog",{attrs:{visible:s.fileSelectVisible},on:{"update:visible":function(i){s.fileSelectVisible=i},select:s.onFileSelected,close:s.cancelFileSelect}}),t("SkillSelectDialog",{attrs:{visible:s.skillSelectVisible},on:{"update:visible":function(i){s.skillSelectVisible=i},select:s.onSkillSelected,close:s.cancelSkillSelect}})],1)},G=[function(){var e=this,s=e._self._c;return s("span",[s("i",{staticClass:"el-icon-code"}),e._v(" 代码生成对话")])},function(){var e=this,s=e._self._c;return s("span",[s("i",{staticClass:"el-icon-document"}),e._v(" 开发记录")])}],X=d(z,H,G,!1,null,"d2adcfdd");const Q=X.exports,Y={name:"Step4Test",components:{ModelSelectDialog:f,CommandDialog:y,FileSelectDialog:_,SkillSelectDialog:m,ResizableTextarea:g},props:{category:{type:String,default:""},name:{type:String,default:""},reqBasePath:{type:String,default:""}},data(){return{inputMessage:"",disabled:!1,stopping:!1,promptTokens:0,dotAnimation:"",dotInterval:null,dots:["⠋","⠙","⠹","⠸","⠼","⠴","⠦","⠧"],logItems:[],modelName:"",modelSelectVisible:!1,commandDialogVisible:!1,fileSelectVisible:!1,skillSelectVisible:!1,sessionId:"",sessionStatus:"idle",customActions:[]}},computed:{specFilePath(){return!this.category||!this.name?"":`${this.reqBasePath}/${this.category}/${this.name}/${this.name}_方案.md`}},watch:{category:{handler(){this.loadSession()}},name:{handler(){this.loadSession()}}},async mounted(){await this.loadSession(),await this.loadDefaultModel(),await this.loadCustomActions(),n.ws.init()},beforeDestroy(){this.dotInterval&&clearInterval(this.dotInterval),this.wsUnsubscribe&&this.wsUnsubscribe()},methods:{handleKeydown(e){if(e.key==="Enter")if(e.ctrlKey){const s=e.target,t=s.selectionStart,i=s.selectionEnd,a=this.inputMessage;this.inputMessage=a.substring(0,t)+`
|
|
15
|
+
`+a.substring(i),this.$nextTick(()=>{s.selectionStart=s.selectionEnd=t+1})}else e.preventDefault(),this.sendMessage()},async loadSession(){if(!this.category||!this.name){this.sessionId="",this.$emit("update:sessionId","");return}try{const e=`${this.reqBasePath}/${this.category}/${this.name}/session.json`,s=await n.getFileContent(e);if(s&&s.content){const t=JSON.parse(s.content);this.sessionId=t.testSessionId||""}else this.sessionId="";this.$emit("update:sessionId",this.sessionId),this.sessionId?(await this.loadMessages(),this.subscribeSession()):this.logItems=[]}catch(e){console.error("Load session failed:",e),this.sessionId="",this.$emit("update:sessionId",""),this.logItems=[]}},insertTestCommand(){this.specFilePath&&(this.inputMessage=`根据 ${this.specFilePath} 方案测试相应功能是否实现。`)},async sendMessage(){const e=this.inputMessage.trim();if(!(!e||this.disabled)){if(!this.sessionId){this.$message.error("会话不存在,请刷新页面");return}this.wsUnsubscribe||this.subscribeSession(),this.inputMessage="",this.disabled=!0,this.stopping=!1,this.logItems.push({type:"chat",content:e}),this.scrollChatToBottom(!0),n.sessionWsSend(this.sessionId,"chat",{message:e,sessionId:this.sessionId,modelName:this.modelName||void 0})}},stopChat(){!this.sessionId||this.stopping||(this.stopping=!0,n.sessionWsSend(this.sessionId,"stop",{sessionId:this.sessionId}))},subscribeSession(){this.sessionId&&(this.wsUnsubscribe&&this.wsUnsubscribe(),this.wsUnsubscribe=n.wsSubscribe(this.sessionId,{running_sessions:e=>{const t=((e==null?void 0:e.runningSessionIds)||[]).includes(this.sessionId);this.sessionStatus=t?"processing":"idle",this.disabled=t},todos:e=>{e!=null&&e.todos&&this.logItems.push({type:"todos",todos:e.todos}),this.scrollChatToBottom()},step:e=>{var s;this.logItems.push({type:"step",thought:e.thought,toolCalls:e.toolCalls,success:e.success}),(s=e.usage)!=null&&s.promptTokens&&(this.promptTokens=e.usage.promptTokens),this.scrollChatToBottom()},compact:e=>{this.logItems.push({type:"system",content:`【压缩完成】${e.summary||""}`}),this.loadMessages()},done:e=>{var s;this.disabled=!1,this.stopping=!1,this.sessionStatus="completed",e!=null&&e.modelName&&(this.modelName=e.modelName),(s=e==null?void 0:e.usage)!=null&&s.promptTokens&&(this.promptTokens=e.usage.promptTokens),e!=null&&e.response&&this.logItems.push({type:"think",content:e.response}),this.scrollChatToBottom()},stopped:()=>{this.disabled=!1,this.stopping=!1,this.sessionStatus="idle",this.logItems.push({type:"think",content:"【已停止】"}),this.scrollChatToBottom()},error:e=>{this.$message.error((e==null?void 0:e.error)||"发生错误"),this.disabled=!1,this.stopping=!1,this.sessionStatus="idle"}}))},scrollChatToBottom(e=!1){const s=C(this.$refs.messagesContainer);console.log("[Step4Test] scrollChatToBottom called, force:",e,"snap:",JSON.stringify(s)),this.$nextTick(()=>{v(this.$refs.messagesContainer,{force:e,prevSnapshot:s})})},async loadMessages(){if(this.sessionId)try{const e=await n.getMessages(this.sessionId);this.logItems=e.data||[],this.scrollChatToBottom(!0)}catch(e){console.error("Load messages failed:",e)}},async loadDefaultModel(){var e;try{const s=await n.getConfig("defaultModel");(e=s.data)!=null&&e.value&&(this.modelName=s.data.value)}catch(s){console.error("Load default model failed:",s)}},openModelSelector(){this.modelSelectVisible=!0},onModelSelected(e){const s=e.name.split("/");this.modelName=s.length>2?s.slice(1).join("/"):e.name,n.setConfig("defaultModel",this.modelName)},openCommandDialog(){this.commandDialogVisible=!0},handleExecuteCommand(e){this.inputMessage=e+" ",this.$nextTick(()=>{const s=this.$el.querySelector(".input-area textarea");s&&s.focus()})},openFileSelect(){this.fileSelectVisible=!0},onFileSelected(e){const s=this.inputMessage.lastIndexOf("@");s!==-1?this.inputMessage=this.inputMessage.slice(0,s)+e+" ":this.inputMessage+=e+" ",this.cancelFileSelect()},cancelFileSelect(){this.fileSelectVisible=!1},openSkillSelect(){this.skillSelectVisible=!0},onSkillSelected(e){const s=`[${e}] `,t=this.inputMessage.lastIndexOf("[");t!==-1&&this.inputMessage.slice(t).match(/^\[[\w-]+\] /)?this.inputMessage=this.inputMessage.slice(0,t)+s:this.inputMessage=s+this.inputMessage,this.cancelSkillSelect()},cancelSkillSelect(){this.skillSelectVisible=!1},getTodoStatusIcon(e){return{completed:"✅",in_progress:"🔄",pending:"⬜",cancelled:"❌"}[e]||"⬜"},formatInput(e,s){try{const t=JSON.parse(s);return e==="bash"||e==="execute_bash"?t.command+(t.workdir?` (${t.workdir})`:""):e==="read_file"?t.file_path+(t.offset?`:${t.offset}`:""):e==="edit_file"||e==="write_file"?t.file_path:e==="glob"||e==="find_files"?t.pattern+(t.directory?` (${t.directory})`:""):e==="grep"||e==="search_content"?`"${t.pattern}" (${t.directory||""})`:s}catch{return s}},renderMarkdown(e){return e?p(e):""},async loadCustomActions(){try{const e=await n.getCustomActions("test");this.customActions=e.data||[]}catch(e){console.error("Load custom actions failed:",e),this.customActions=[]}},executeCustomAction(e){this.inputMessage=e.prompt,this.$nextTick(()=>{const s=this.$el.querySelector(".input-area textarea");s&&s.focus(),e.auto_send&&this.sendMessage()})}}};var Z=function(){var s=this,t=s._self._c;return t("div",{staticClass:"step4-container"},[t("div",{staticClass:"step4-main"},[t("div",{staticClass:"code-chat-panel"},[t("div",{staticClass:"panel-header"},[s._m(0),t("el-button",{attrs:{type:"primary",size:"small",disabled:s.disabled},on:{click:s.insertTestCommand}},[t("i",{staticClass:"el-icon-s-claim"}),s._v(" 根据方案测试 ")])],1),t("div",{ref:"messagesContainer",staticClass:"chat-messages"},[s.logItems.length?s._e():t("div",{staticClass:"empty-state"},[t("i",{staticClass:"el-icon-chat-dot-round"}),t("p",[s._v("点击上方按钮或输入测试要求进行验收")])]),s._l(s.logItems,function(i,a){return[i.type==="todos"?t("div",{staticClass:"todos-list"},s._l(i.todos,function(o,r){return t("div",{key:r,staticClass:"todo-item"},[t("span",{staticClass:"todo-status"},[s._v(s._s(s.getTodoStatusIcon(o.status)))]),t("span",{staticClass:"todo-name"},[s._v(s._s(o.name))])])}),0):s._e(),i.type==="chat"?t("div",{staticClass:"flex justify-end"},[t("div",{staticClass:"user-question"},[s._v(s._s(i.content))])]):i.type==="think"?t("div",{staticClass:"ai-thought",domProps:{innerHTML:s._s(s.renderMarkdown(i.content))}}):i.type==="system"?t("div",{staticClass:"system-message",domProps:{innerHTML:s._s(s.renderMarkdown(i.content))}}):i.type==="step"?[i.thought?t("div",{staticClass:"ai-thought",domProps:{innerHTML:s._s(s.renderMarkdown(i.thought))}}):s._e(),s._l(i.toolCalls,function(o,r){return t("div",{key:r,staticClass:"log-mute"},[t("span",{class:i.success!==!1?"tool-success":"tool-fail"},[s._v(" "+s._s(i.success!==!1?"✓":"✗")+" ")]),s._v(" "+s._s(o.function.name)+" "),o.function.arguments?t("span",{staticClass:"tool-input"},[s._v(s._s(s.formatInput(o.function.name,o.function.arguments)))]):s._e()])})]:s._e()]}),s.modelName?t("div",{staticClass:"build-info"},[t("span",{staticClass:"icon"},[s._v("▣")]),s._v(" Build · "+s._s(s.modelName)+" ")]):s._e()],2),t("div",{staticClass:"chat-input-area"},[t("div",{staticClass:"input-row"},[t("ResizableTextarea",{staticClass:"input-area",attrs:{rows:5,placeholder:"输入测试要求... (Enter 发送, Ctrl+Enter 换行, @ 选择文件)",disabled:s.disabled&&!s.stopping},nativeOn:{keydown:function(i){return!i.type.indexOf("key")&&s._k(i.keyCode,"enter",13,i.key,"Enter")?null:s.handleKeydown.apply(null,arguments)}},model:{value:s.inputMessage,callback:function(i){s.inputMessage=i},expression:"inputMessage"}}),t("div",{staticClass:"input-actions"},[s._l(s.customActions,function(i){return t("el-button",{key:i.id,attrs:{type:"info",size:"small",disabled:s.disabled},on:{click:function(a){return s.executeCustomAction(i)}}},[s._v(" "+s._s(i.name)+" ")])}),s.disabled&&!s.stopping?t("el-button",{staticClass:"stop-btn",attrs:{type:"danger"},on:{click:s.stopChat}},[s._v(" ■ 停止 ")]):s.stopping?t("el-button",{staticClass:"stop-btn",attrs:{type:"info",disabled:""}},[s._v(" 停止中... ")]):t("el-button",{staticClass:"send-btn",attrs:{type:"primary",disabled:!s.inputMessage.trim()},on:{click:s.sendMessage}},[s._v(" 发送 ")])],2)],1)]),t("div",{staticClass:"status-bar"},[t("span",{class:s.sessionStatus==="processing"?"status-thinking":"status-ready"},[s.sessionStatus==="processing"?t("span",{staticClass:"thinking-spinner"}):s._e(),s._v(" "+s._s(s.sessionStatus==="processing"?"思考中":"✓ 就绪")+" ")]),t("span",{staticClass:"separator"},[s._v("|")]),t("span",{staticClass:"model-selector",on:{click:s.openModelSelector,mousedown:function(i){i.preventDefault()}}},[s._v(" 模型:"+s._s(s.modelName||"-")+" ▾ ")]),t("span",{staticClass:"separator"},[s._v("|")]),t("span",[s._v("会话:"+s._s(s.sessionId?s.sessionId.slice(0,8):"--------"))]),t("span",{staticClass:"separator"},[s._v("|")]),t("span",[s._v("token:"+s._s(s.promptTokens||0))]),t("span",{staticClass:"separator"},[s._v("|")]),t("span",{staticClass:"status-action",on:{click:s.openCommandDialog,mousedown:function(i){i.preventDefault()}}},[s._v("命令")]),t("span",{staticClass:"separator"},[s._v("|")]),t("span",{staticClass:"status-action",on:{click:s.openFileSelect,mousedown:function(i){i.preventDefault()}}},[s._v("选择文件")]),t("span",{staticClass:"separator"},[s._v("|")]),t("span",{staticClass:"status-action",on:{click:s.openSkillSelect,mousedown:function(i){i.preventDefault()}}},[s._v("选择Skill")])])])]),t("ModelSelectDialog",{attrs:{visible:s.modelSelectVisible,"current-model":s.modelName},on:{"update:visible":function(i){s.modelSelectVisible=i},select:s.onModelSelected}}),t("CommandDialog",{attrs:{visible:s.commandDialogVisible},on:{"update:visible":function(i){s.commandDialogVisible=i},execute:s.handleExecuteCommand}}),t("FileSelectDialog",{attrs:{visible:s.fileSelectVisible},on:{"update:visible":function(i){s.fileSelectVisible=i},select:s.onFileSelected,close:s.cancelFileSelect}}),t("SkillSelectDialog",{attrs:{visible:s.skillSelectVisible},on:{"update:visible":function(i){s.skillSelectVisible=i},select:s.onSkillSelected,close:s.cancelSkillSelect}})],1)},ss=[function(){var e=this,s=e._self._c;return s("span",[s("i",{staticClass:"el-icon-s-check"}),e._v(" 测试验收对话")])}],es=d(Y,Z,ss,!1,null,"a9a8b79e");const ts=es.exports,is={name:"SubSchemeDialog",props:{visible:{type:Boolean,default:!1},category:{type:String,default:""},parentName:{type:String,default:""},defaultName:{type:String,default:""}},data(){return{name:""}},watch:{visible(e){e&&(this.name=this.defaultName)}},methods:{handleVisibleChange(e){this.$emit("update:visible",e)},handleClose(){this.$emit("cancel")},onConfirm(){const e=this.name.trim();e&&(this.$emit("confirm",e),this.$emit("update:visible",!1))},onCancel(){this.$emit("cancel"),this.$emit("update:visible",!1)}}};var ns=function(){var s=this,t=s._self._c;return t("el-dialog",{attrs:{visible:s.visible,title:"新建子方案",width:"420px"},on:{"update:visible":s.handleVisibleChange,close:s.handleClose}},[t("el-form",{attrs:{"label-width":"80px"}},[t("el-form-item",{attrs:{label:"方案名称"}},[t("el-input",{attrs:{placeholder:"请输入子方案名称"},nativeOn:{keyup:function(i){return!i.type.indexOf("key")&&s._k(i.keyCode,"enter",13,i.key,"Enter")?null:s.onConfirm.apply(null,arguments)}},model:{value:s.name,callback:function(i){s.name=i},expression:"name"}})],1),t("el-form-item",{attrs:{label:"所属大类"}},[t("span",[s._v(s._s(s.category))])]),t("el-form-item",{attrs:{label:"父方案"}},[t("span",[s._v(s._s(s.parentName))])])],1),t("span",{attrs:{slot:"footer"},slot:"footer"},[t("el-button",{on:{click:s.onCancel}},[s._v("取消")]),t("el-button",{attrs:{type:"primary",disabled:!s.name.trim()},on:{click:s.onConfirm}},[s._v("确认")])],1)],1)},os=[],as=d(is,ns,os,!1,null,null);const rs=as.exports,ls={name:"DevWorkflowView",components:{WorkflowSidebar:x,Step1NewReq:F,Step2Design:J,Step3CodeGen:Q,Step4Test:ts,SubSchemeDialog:rs},props:{sidebarVisible:{type:Boolean,default:!0}},data(){return{currentCategory:"",currentProject:"",currentStep:1,categories:[],projects:{},reqBasePath:"",isLoadingProjects:!1,designSessionId:"",codeSessionId:"",testSessionId:"",taskStatus:"idle",unsubRunning:null,subSchemeDialogVisible:!1,subSchemeDefaultName:""}},computed:{projectKey(){return!this.currentCategory||!this.currentProject?"":`${this.currentCategory}/${this.currentProject}`},hasSelectedProject(){return!!this.currentProject},stepTitle(){return{1:"新建需求",2:"方案设计",3:"代码生成",4:"测试验收"}[this.currentStep]||""},statusText(){return this.projectKey?`步骤 ${this.currentStep} / 4`:"就绪"}},created(){var a,o,r;const e=(a=this.$route.query)==null?void 0:a.category,s=(o=this.$route.query)==null?void 0:o.project,t=parseInt((r=this.$route.query)==null?void 0:r.step)||1,i=!!(e&&s);this.loadCategories(),i?(this.currentCategory=e,this.currentProject=s,this.currentStep=t):this.loadState()},mounted(){console.log("[DevWorkflow][mounted] subscribing to running_sessions"),n.ws.init(),this.unsubRunning=n.ws.on("running_sessions",e=>{var t;const s=((t=e.data)==null?void 0:t.runningSessionIds)||[];console.log("[DevWorkflow][ws] running_sessions event:",s),this.updateTaskStatus(s)})},beforeDestroy(){this.unsubRunning&&(this.unsubRunning(),this.unsubRunning=null)},watch:{currentProject(){this.updateTitle()},taskStatus(){this.updateTitle()}},methods:{updateDesignSessionId(e){console.log("[DevWorkflow][sessionId] design:",e),this.designSessionId=e},updateCodeSessionId(e){console.log("[DevWorkflow][sessionId] code:",e),this.codeSessionId=e},updateTestSessionId(e){console.log("[DevWorkflow][sessionId] test:",e),this.testSessionId=e},updateTaskStatus(e){const s=[this.designSessionId,this.codeSessionId,this.testSessionId].filter(Boolean);if(console.log("[DevWorkflow][taskStatus] mySessions:",s,"runningIds:",e),s.length===0){console.log("[DevWorkflow][taskStatus] -> idle (no sessions)"),this.taskStatus="idle";return}const t=s.some(i=>e.includes(i));console.log("[DevWorkflow][taskStatus] isRunning:",t,"prevStatus:",this.taskStatus),t?(console.log("[DevWorkflow][taskStatus] -> running"),this.taskStatus="running"):this.taskStatus==="running"&&(console.log("[DevWorkflow][taskStatus] -> completed"),this.taskStatus="completed")},updateTitle(){var t;const e=((t=this.$route.meta)==null?void 0:t.title)||"软件研发";if(!this.currentProject){document.title=`${e} - TXCode`;return}let s="";this.taskStatus==="running"?s="⏳ ":this.taskStatus==="completed"&&(s="✅ "),console.log("[DevWorkflow][updateTitle] status:",this.taskStatus,"title:",`${s}${this.currentProject} · ${e} - TXCode`),document.title=`${s}${this.currentProject} · ${e} - TXCode`},async loadState(){try{const s=(await n.getWorkflowState()).data;s&&(this.currentCategory=s.currentCategory||"",this.currentProject=s.currentProject||"",this.currentStep=s.currentStep||1)}catch(e){console.error("Load workflow state failed:",e)}},async saveState(){try{await n.updateWorkflowState(this.currentCategory,this.currentProject,this.currentStep)}catch(e){console.error("Save workflow state failed:",e)}},async loadCategories(){var e,s;try{const t=await n.getCwd();this.reqBasePath=((e=t.data)==null?void 0:e.basePath)||"";const a=((s=(await n.browseFilesystem(this.reqBasePath)).data)==null?void 0:s.items)||[];this.categories=a.filter(o=>o.is_directory).map(o=>o.name),this.categories.sort(),this.currentCategory&&this.categories.includes(this.currentCategory)&&await this.loadProjectsForCategory(this.currentCategory)}catch(t){console.error("Load categories failed:",t),this.categories=[]}},async loadProjectsForCategory(e){var s;if(e){this.isLoadingProjects=!0;try{const t=`${this.reqBasePath}/${e}`,a=((s=(await n.browseFilesystem(t)).data)==null?void 0:s.items)||[];this.projects={},a.filter(o=>o.is_directory).forEach(o=>{const r=`${e}/${o.name}`;this.projects[r]={name:o.name,stepStatus:{}}})}catch(t){console.error("Load projects failed:",t)}finally{this.isLoadingProjects=!1}}},async onCategoryChange(e){this.currentCategory=e,this.currentProject="",this.currentStep=1,e?await this.loadProjectsForCategory(e):this.projects={}},onProjectChange(e){this.currentProject=e,!this.currentProject&&this.currentStep>1&&(this.currentStep=1)},onStepChange(e){!this.currentProject&&e>1||(this.currentStep=e)},async createCategory(e){if(this.categories.includes(e)){this.$message.warning("大类已存在");return}try{const s=`${this.reqBasePath}/${e}`;await n.createDirectory(s),this.categories.push(e),this.categories.sort(),this.$message.success(`大类「${e}」创建成功`)}catch(s){console.error("Create category failed:",s),this.$message.error("创建大类失败")}},async renameCategory({oldName:e,newName:s}){if(this.categories.includes(s)){this.$message.warning("名称已存在");return}try{const t=`${this.reqBasePath}/${e}`;await n.renameFile(t,s);const i=this.categories.indexOf(e);i>-1&&(this.categories[i]=s),this.categories.sort(),this.currentCategory===e&&(this.currentCategory=s,await this.loadProjectsForCategory(s)),await this.saveState(),this.$message.success(`已重命名为「${s}」`)}catch(t){console.error("Rename category failed:",t),this.$message.error("重命名大类失败")}},async deleteCategory(e){try{const s=`${this.reqBasePath}/${e}`;await n.deleteFile(s),this.categories=this.categories.filter(t=>t!==e),this.currentCategory===e&&(this.currentCategory="",this.currentProject="",this.currentStep=1,this.projects={}),await this.saveState(),this.$message.success(`大类「${e}」已删除`)}catch(s){console.error("Delete category failed:",s),this.$message.error("删除大类失败")}},async createRequirement({category:e,name:s}){var o,r,u;if(this.projects[s]){this.$message.warning("需求已存在");return}try{const l=`${this.reqBasePath}/${e}/${s}`;await n.createDirectory(l)}catch(l){console.error("Create requirement directory failed:",l)}const t=`# ${s}方案
|
|
16
|
+
|
|
17
|
+
> 所属大类:${e}
|
|
18
|
+
|
|
19
|
+
## 业务目标
|
|
20
|
+
|
|
21
|
+
## 功能点
|
|
22
|
+
|
|
23
|
+
`;try{const l=`${this.reqBasePath}/${e}/${s}/${s}_方案.md`;await n.writeFile(l,t)}catch(l){console.error("Write spec file failed:",l)}let i={designSessionId:"",codeSessionId:"",testSessionId:""};try{const[l,h,c]=await Promise.all([n.createSession(`workflow:${e}/${s}:design`),n.createSession(`workflow:${e}/${s}:code`),n.createSession(`workflow:${e}/${s}:test`)]);i={designSessionId:((o=l.data)==null?void 0:o.id)||"",codeSessionId:((r=h.data)==null?void 0:r.id)||"",testSessionId:((u=c.data)==null?void 0:u.id)||""};const S=`${this.reqBasePath}/${e}/${s}/session.json`;await n.writeFile(S,JSON.stringify(i,null,2))}catch(l){console.error("Create sessions failed:",l)}const a=`${e}/${s}`;this.$set(this.projects,a,{name:s,stepStatus:{}}),this.currentCategory=e,this.currentProject=s,this.$message.success(`需求「${s}」创建成功`),this.$nextTick(()=>{this.currentStep=2})},async createSubScheme(){var s;if(!this.currentProject||!this.currentCategory){this.$message.warning("请先选择一个方案");return}const e=this.currentProject;try{const t=`${this.reqBasePath}/${this.currentCategory}`,a=((s=(await n.browseFilesystem(t)).data)==null?void 0:s.items)||[];let o=0;const r=new RegExp(`^${this.escapeRegex(e)}_(\\d+)$`);a.filter(l=>l.is_directory).forEach(l=>{const h=l.name.match(r);if(h){const c=parseInt(h[1],10);c>o&&(o=c)}});const u=String(o+1).padStart(2,"0");this.subSchemeDefaultName=`${e}_${u}`,this.subSchemeDialogVisible=!0}catch(t){console.error("Browse category failed:",t),this.$message.error("获取子方案列表失败")}},escapeRegex(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")},async onSubSchemeConfirm(e){var u,l,h;this.subSchemeDialogVisible=!1;const s=this.currentProject,t=this.currentCategory;try{const c=`${this.reqBasePath}/${t}/${e}`;await n.createDirectory(c)}catch(c){console.error("Create sub-scheme directory failed:",c),this.$message.error("创建子方案目录失败");return}const i=`${this.reqBasePath}/${t}/${s}/${s}_方案.md`,a=`# ${e}_方案
|
|
24
|
+
|
|
25
|
+
> 所属大类:${t}
|
|
26
|
+
> 父方案:[../${s}/${s}_方案.md](../${s}/${s}_方案.md)
|
|
27
|
+
|
|
28
|
+
## 业务目标
|
|
29
|
+
|
|
30
|
+
## 功能点
|
|
31
|
+
|
|
32
|
+
`;try{const c=`${this.reqBasePath}/${t}/${e}/${e}_方案.md`;await n.writeFile(c,a)}catch(c){console.error("Write spec file failed:",c)}let o={designSessionId:"",codeSessionId:"",testSessionId:""};try{const[c,S,b]=await Promise.all([n.createSession(`workflow:${t}/${e}:design`),n.createSession(`workflow:${t}/${e}:code`),n.createSession(`workflow:${t}/${e}:test`)]);o={designSessionId:((u=c.data)==null?void 0:u.id)||"",codeSessionId:((l=S.data)==null?void 0:l.id)||"",testSessionId:((h=b.data)==null?void 0:h.id)||"",parent:{name:s,specPath:i}};const k=`${this.reqBasePath}/${t}/${e}/session.json`;await n.writeFile(k,JSON.stringify(o,null,2))}catch(c){console.error("Create sessions failed:",c)}const r=`${t}/${e}`;this.$set(this.projects,r,{name:e,stepStatus:{}}),this.$message.success(`子方案「${e}」创建成功`),window.open(`#/views/pc/devWorkflow?category=${encodeURIComponent(t)}&project=${encodeURIComponent(e)}&step=2`,"_blank")},async onSaveSpec(e){if(!this.projectKey)return;const s=`${this.reqBasePath}/${this.currentCategory}/${this.currentProject}/${this.currentProject}_方案.md`;try{await n.writeFile(s,e),this.$message.success("方案已保存")}catch(t){console.error("Save spec failed:",t),this.$message.error("保存方案失败")}},saveSpec(){this.$refs.step2Ref&&this.$refs.step2Ref.saveSpec()},async refreshSpec(){var e;(e=this.$refs.step2Ref)!=null&&e.loadSpec&&await this.$refs.step2Ref.loadSpec(),this.$message.success("方案已刷新")}}};var cs=function(){var s=this,t=s._self._c;return t("div",{staticClass:"dev-workflow-view"},[t("WorkflowSidebar",{ref:"sidebar",attrs:{categories:s.categories,projects:s.projects,"current-category":s.currentCategory,"current-project":s.currentProject,"current-step":s.currentStep,"is-loading":s.isLoadingProjects},on:{"category-change":s.onCategoryChange,"project-change":s.onProjectChange,"step-change":s.onStepChange,"delete-category":s.deleteCategory,"rename-category":s.renameCategory}}),t("div",{staticClass:"main-content"},[t("div",{staticClass:"panel-header"},[t("span",{staticClass:"panel-title"},[s._v(s._s(s.stepTitle))]),t("div",{staticClass:"panel-actions"},[s.currentStep===2?[t("el-button",{attrs:{type:"primary",plain:""},on:{click:s.saveSpec}},[t("i",{staticClass:"el-icon-save"}),s._v(" 保存方案 ")]),t("el-button",{attrs:{type:"info",plain:""},on:{click:s.refreshSpec}},[t("i",{staticClass:"el-icon-refresh"}),s._v(" 刷新方案 ")]),t("el-button",{attrs:{type:"success",plain:"",disabled:!s.currentProject},on:{click:s.createSubScheme}},[t("i",{staticClass:"el-icon-plus"}),s._v(" 新建子方案 ")])]:s._e()],2)]),t("div",{staticClass:"step-content"},[t("Step1NewReq",{directives:[{name:"show",rawName:"v-show",value:s.currentStep===1,expression:"currentStep === 1"}],attrs:{categories:s.categories,projects:s.projects,"base-path":s.reqBasePath,"current-category":s.currentCategory,"current-project":s.currentProject},on:{"category-change":s.onCategoryChange,"project-change":s.onProjectChange,"create-category":s.createCategory,"create-requirement":s.createRequirement}}),s.currentStep===2&&s.hasSelectedProject?t("Step2Design",{ref:"step2Ref",attrs:{category:s.currentCategory,name:s.currentProject,"req-base-path":s.reqBasePath},on:{"update:sessionId":s.updateDesignSessionId,"save-spec":s.onSaveSpec,"spec-updated":s.refreshSpec}}):s._e(),s.currentStep===3&&s.hasSelectedProject?t("Step3CodeGen",{ref:"step3Ref",attrs:{category:s.currentCategory,name:s.currentProject,"req-base-path":s.reqBasePath},on:{"update:sessionId":s.updateCodeSessionId}}):s._e(),s.currentStep===4&&s.hasSelectedProject?t("Step4Test",{ref:"step4Ref",attrs:{category:s.currentCategory,name:s.currentProject,"req-base-path":s.reqBasePath},on:{"update:sessionId":s.updateTestSessionId}}):s._e(),t("SubSchemeDialog",{attrs:{visible:s.subSchemeDialogVisible,category:s.currentCategory,"parent-name":s.currentProject,"default-name":s.subSchemeDefaultName},on:{"update:visible":function(i){s.subSchemeDialogVisible=i},confirm:s.onSubSchemeConfirm,cancel:function(i){s.subSchemeDialogVisible=!1}}})],1),t("div",{staticClass:"status-bar"},[t("span",[t("i",{staticClass:"el-icon-info"}),s._v(" "+s._s(s.statusText)+" ")]),t("span",[s._v(s._s(s.projectKey||"未选择项目"))])])])],1)},ds=[],us=d(ls,cs,ds,!1,null,"21c96963");const ps=us.exports;export{ps as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.workflow-step-bar[data-v-1cf39c0c]{display:flex;background:var(--bg-secondary, #121212);border-bottom:1px solid var(--border-color, #27272a);padding:8px 16px;gap:8px}.step-item[data-v-1cf39c0c]{display:flex;align-items:center;gap:8px;padding:8px 16px;border-radius:8px;cursor:pointer;color:#52525b;transition:all .2s}.step-item.active[data-v-1cf39c0c]{color:#a1a1aa}.step-item.current[data-v-1cf39c0c]{background:var(--accent, #3b82f6);color:#fff}.step-number[data-v-1cf39c0c]{width:24px;height:24px;border-radius:50%;background:var(--bg-tertiary, #18191b);display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:600}.step-item.current .step-number[data-v-1cf39c0c]{background:#fff3}.step-label[data-v-1cf39c0c]{font-size:14px}.step1-req[data-v-ff2d2605]{height:100%;display:flex;flex-direction:column;background:#0a0a09}.section-header[data-v-ff2d2605]{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;font-size:14px;font-weight:500;color:#f4f4f5}.category-section[data-v-ff2d2605]{background:#121212}.category-list[data-v-ff2d2605]{display:flex;flex-wrap:wrap;gap:8px;padding:0 16px 16px}.category-item[data-v-ff2d2605]{display:flex;align-items:center;gap:6px;padding:8px 16px;background:#1e1e1e;border-radius:20px;font-size:13px;color:#a1a1aa;cursor:pointer;transition:all .2s}.category-item[data-v-ff2d2605]:hover{background:#27272a;color:#f4f4f5}.category-item.active[data-v-ff2d2605]{background:#3b82f6;color:#fff}.category-item.add-btn[data-v-ff2d2605]{background:transparent;border:1px dashed #3f3f46}.category-item.add-btn[data-v-ff2d2605]:hover{border-color:#3b82f6;color:#3b82f6}.divider[data-v-ff2d2605]{height:1px;background:#27272a}.project-section[data-v-ff2d2605]{flex:1;display:flex;flex-direction:column;overflow:hidden}.project-list[data-v-ff2d2605]{flex:1;overflow-y:auto;padding:0 16px 16px}.project-item[data-v-ff2d2605]{display:flex;align-items:center;justify-content:space-between;padding:14px 16px;background:#121212;border-radius:8px;margin-bottom:8px;cursor:pointer;transition:all .2s}.project-item[data-v-ff2d2605]:hover{background:#1e1e1e}.project-info[data-v-ff2d2605]{display:flex;align-items:center;gap:10px;color:#f4f4f5;font-size:14px}.project-info i[data-v-ff2d2605]{color:#3b82f6}.project-item>i[data-v-ff2d2605]{color:#52525b;font-size:12px}.empty-hint[data-v-ff2d2605]{text-align:center;color:#52525b;font-size:13px;padding:32px 0}.btn-primary[data-v-ff2d2605]{display:flex;align-items:center;gap:4px;padding:6px 12px;background:#3b82f6;color:#fff;border:none;border-radius:6px;font-size:12px;cursor:pointer;transition:all .2s}.btn-primary[data-v-ff2d2605]:hover{background:#2563eb}.btn-primary[data-v-ff2d2605]:disabled{background:#27272a;color:#52525b;cursor:not-allowed}.dialog-overlay[data-v-ff2d2605]{position:fixed;top:0;left:0;right:0;bottom:0;background:#000000b3;display:flex;align-items:center;justify-content:center;z-index:1000;padding:20px}.dialog[data-v-ff2d2605]{width:100%;max-width:320px;background:#18181b;border-radius:12px;overflow:hidden}.dialog-header[data-v-ff2d2605]{display:flex;align-items:center;justify-content:space-between;padding:16px;border-bottom:1px solid #27272a;font-size:15px;font-weight:500;color:#f4f4f5}.close-btn[data-v-ff2d2605]{background:none;border:none;color:#71717a;font-size:18px;cursor:pointer}.dialog-body[data-v-ff2d2605]{padding:16px}.dialog-body input[data-v-ff2d2605]{width:100%;padding:12px;background:#0a0a09;border:1px solid #27272a;border-radius:8px;color:#f4f4f5;font-size:14px;outline:none}.dialog-body input[data-v-ff2d2605]:focus{border-color:#3b82f6}.dialog-footer[data-v-ff2d2605]{display:flex;gap:12px;padding:16px;border-top:1px solid #27272a}.btn-cancel[data-v-ff2d2605],.btn-confirm[data-v-ff2d2605]{flex:1;padding:10px;border-radius:8px;font-size:14px;cursor:pointer;transition:all .2s}.btn-cancel[data-v-ff2d2605]{background:#27272a;border:none;color:#a1a1aa}.btn-cancel[data-v-ff2d2605]:hover{background:#3f3f46}.btn-confirm[data-v-ff2d2605]{background:#3b82f6;border:none;color:#fff}.btn-confirm[data-v-ff2d2605]:hover{background:#2563eb}.step2-design[data-v-1372dbb7]{height:100%;display:flex;flex-direction:column;background:#0a0a09}.mode-tabs[data-v-1372dbb7]{display:flex;background:#121212;border-bottom:1px solid #27272a;flex-shrink:0}.tab-btn[data-v-1372dbb7]{flex:1;display:flex;align-items:center;justify-content:center;gap:6px;padding:12px;background:none;border:none;color:#84848a;font-size:14px;cursor:pointer;transition:all .2s}.tab-btn.active[data-v-1372dbb7]{color:#3b82f6;border-bottom:2px solid #3b82f6}.chat-mode[data-v-1372dbb7],.spec-mode[data-v-1372dbb7]{flex:1;display:flex;flex-direction:column;overflow:hidden}.chat-toolbar[data-v-1372dbb7]{display:flex;align-items:center;gap:8px;padding:8px 16px;background:#121212;border-bottom:1px solid #27272a;flex-shrink:0}.model-name[data-v-1372dbb7]{flex:1;color:#3b82f6;font-size:13px;cursor:pointer}.chat-area[data-v-1372dbb7]{flex:1;overflow-y:auto;padding:16px;display:flex;flex-direction:column;gap:12px}.message[data-v-1372dbb7]{display:flex;flex-direction:column;max-width:85%}.message.user[data-v-1372dbb7]{align-self:flex-end}.message.assistant[data-v-1372dbb7]{align-self:flex-start}.message-bubble[data-v-1372dbb7]{padding:12px 14px;border-radius:14px;font-size:14px;line-height:1.5;word-break:break-word}.message.user .message-bubble[data-v-1372dbb7]{background:#3b82f6;color:#fff;border-bottom-right-radius:4px}.message.assistant .message-bubble[data-v-1372dbb7]{background:#121212;border:1px solid #27272a;border-bottom-left-radius:4px;color:#d4d4d8}.message.assistant.thinking .message-bubble[data-v-1372dbb7]{background:linear-gradient(135deg,#121212,#18191b)}.message-bubble.system[data-v-1372dbb7]{font-style:italic;color:#a1a1aa}.step-block[data-v-1372dbb7]{display:flex;flex-direction:column;gap:8px}.tool-log[data-v-1372dbb7]{font-size:12px;color:#84848a;padding:8px 12px;background:#18191b;border-radius:6px;font-family:ui-monospace,monospace;display:flex;align-items:center;gap:8px}.tool-success[data-v-1372dbb7]{color:#22c55e}.tool-fail[data-v-1372dbb7]{color:#ef4444}.tool-name[data-v-1372dbb7]{color:#3b82f6}.tool-args[data-v-1372dbb7]{color:#84848a}.todo-list[data-v-1372dbb7]{background:#121212;border:1px solid #27272a;border-radius:10px;padding:10px 14px}.todo-item[data-v-1372dbb7]{display:flex;align-items:center;gap:10px;padding:6px 0;font-size:13px;color:#d4d4d8}.todo-item[data-v-1372dbb7]:not(:last-child){border-bottom:1px solid #27272a}.todo-status[data-v-1372dbb7]{width:20px;height:20px;display:flex;align-items:center;justify-content:center;font-size:12px}.empty-state[data-v-1372dbb7]{flex:1;display:flex;align-items:center;justify-content:center;color:#52525b;font-size:14px;min-height:100px}.input-area[data-v-1372dbb7]{display:flex;gap:10px;padding:12px 16px;background:#121212;border-top:1px solid #27272a;flex-shrink:0}.input-wrapper[data-v-1372dbb7]{flex:1}.input-field[data-v-1372dbb7]{width:100%;min-height:44px;max-height:100px;padding:10px 14px;background:#0a0a09;border:1px solid #27272a;border-radius:20px;color:#f4f4f5;font-size:14px;resize:none;outline:none}.input-field[data-v-1372dbb7]:focus{border-color:#3b82f6}.input-field[data-v-1372dbb7]::-moz-placeholder{color:#52525b}.input-field[data-v-1372dbb7]::placeholder{color:#52525b}.send-btn[data-v-1372dbb7]{width:44px;height:44px;background:#3b82f6;border:none;border-radius:50%;color:#fff;font-size:16px;cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0}.send-btn[data-v-1372dbb7]:disabled{background:#27272a;color:#52525b;cursor:not-allowed}.stop-btn[data-v-1372dbb7]{background:#ef4444}.status-bar[data-v-1372dbb7]{display:flex;align-items:center;justify-content:space-between;padding:6px 16px;background:#121212;border-top:1px solid #27272a;font-size:11px;color:#84848a;flex-shrink:0}.status-indicator[data-v-1372dbb7]{display:flex;align-items:center;gap:6px}.status-dot[data-v-1372dbb7]{width:6px;height:6px;border-radius:50%;background:#22c55e}.status-dot.processing[data-v-1372dbb7]{background:#ef4444;animation:pulse-1372dbb7 1.5s infinite}.status-processing[data-v-1372dbb7]{color:#ef4444}.status-ready[data-v-1372dbb7]{color:#22c55e}@keyframes pulse-1372dbb7{0%,to{opacity:1}50%{opacity:.4}}.spec-tabs[data-v-1372dbb7]{display:flex;background:#121212;border-bottom:1px solid #27272a;flex-shrink:0}.spec-tab-btn[data-v-1372dbb7]{flex:1;display:flex;align-items:center;justify-content:center;gap:6px;padding:10px;background:none;border:none;color:#84848a;font-size:13px;cursor:pointer}.spec-tab-btn.active[data-v-1372dbb7]{color:#3b82f6;border-bottom:2px solid #3b82f6}.editor-area[data-v-1372dbb7]{flex:1;display:flex;flex-direction:column;overflow:hidden}.editor-toolbar[data-v-1372dbb7]{display:flex;padding:8px 16px;background:#121212;border-bottom:1px solid #27272a;flex-shrink:0}.toolbar-btn[data-v-1372dbb7]{display:flex;align-items:center;gap:4px;padding:6px 12px;background:#18191b;color:#d4d4d8;border:1px solid #27272a;border-radius:6px;font-size:12px;cursor:pointer}.toolbar-btn.primary[data-v-1372dbb7]{background:#3b82f6;color:#fff;border-color:#3b82f6}.markdown-editor[data-v-1372dbb7]{flex:1;width:100%;padding:16px;background:#121212;border:none;color:#f4f4f5;font-size:14px;font-family:ui-monospace,monospace;line-height:1.6;resize:none;outline:none}.preview-area[data-v-1372dbb7]{flex:1;overflow-y:auto;padding:16px;background:#121212}.preview-content[data-v-1372dbb7]{color:#d4d4d8;font-size:14px;line-height:1.7}.preview-content[data-v-1372dbb7] h1,.preview-content[data-v-1372dbb7] h2,.preview-content[data-v-1372dbb7] h3{color:#f4f4f5;margin:16px 0 8px}.preview-content[data-v-1372dbb7] code{background:#27272a;padding:2px 6px;border-radius:4px;font-size:13px}.preview-content[data-v-1372dbb7] pre{background:#1e1e1e;padding:12px;border-radius:8px;overflow-x:auto}.drawer-overlay[data-v-1372dbb7]{position:fixed;top:0;left:0;right:0;bottom:0;background:#00000080;opacity:0;visibility:hidden;transition:all .3s;z-index:999}.drawer-overlay.show[data-v-1372dbb7]{opacity:1;visibility:visible}.model-drawer[data-v-1372dbb7],.command-drawer[data-v-1372dbb7]{position:fixed;bottom:0;left:0;right:0;max-width:430px;margin:0 auto;background:#121212;border-radius:16px 16px 0 0;transform:translateY(100%);transition:transform .3s ease;z-index:1000;max-height:60vh;display:flex;flex-direction:column}.model-drawer.show[data-v-1372dbb7],.command-drawer.show[data-v-1372dbb7]{transform:translateY(0)}.drawer-header[data-v-1372dbb7]{padding:16px;border-bottom:1px solid #27272a;display:flex;align-items:center;justify-content:space-between;flex-shrink:0}.drawer-title[data-v-1372dbb7]{font-size:16px;font-weight:500;color:#f4f4f5}.drawer-close[data-v-1372dbb7]{width:32px;height:32px;border-radius:50%;background:#18191b;border:none;color:#84848a;font-size:14px;cursor:pointer;display:flex;align-items:center;justify-content:center}.command-list[data-v-1372dbb7]{flex:1;overflow-y:auto;padding:8px 0}.command-item[data-v-1372dbb7]{display:flex;align-items:center;padding:14px 16px;gap:12px;transition:background .2s;cursor:pointer}.command-item[data-v-1372dbb7]:active{background:#18191b}.command-item.active[data-v-1372dbb7]{background:#3b82f61a}.command-icon[data-v-1372dbb7]{width:40px;height:40px;background:#18191b;border-radius:10px;display:flex;align-items:center;justify-content:center;color:#3b82f6;flex-shrink:0}.command-item.active .command-icon[data-v-1372dbb7]{background:#3b82f6;color:#fff}.command-info[data-v-1372dbb7]{flex:1;min-width:0}.command-name[data-v-1372dbb7]{font-size:14px;font-weight:500;color:#f4f4f5;margin-bottom:4px}.command-desc[data-v-1372dbb7]{font-size:12px;color:#84848a}.message-bubble[data-v-1372dbb7] p{margin:0 0 10px}.message-bubble[data-v-1372dbb7] p:last-child{margin-bottom:0}.message-bubble[data-v-1372dbb7] code{background:#18191b;padding:2px 6px;border-radius:4px;font-family:monospace}.step3-code[data-v-4f825433]{height:100%;display:flex;flex-direction:column;background:#0a0a09}.chat-toolbar[data-v-4f825433]{display:flex;align-items:center;gap:8px;padding:8px 16px;background:#121212;border-bottom:1px solid #27272a;flex-shrink:0}.model-name[data-v-4f825433]{flex:1;color:#3b82f6;font-size:13px;cursor:pointer}.toolbar-btn[data-v-4f825433]{width:36px;height:36px;display:flex;align-items:center;justify-content:center;background:#18191b;border:1px solid #27272a;border-radius:8px;color:#d4d4d8;cursor:pointer;font-size:14px}.toolbar-btn[data-v-4f825433]:disabled{opacity:.5;cursor:not-allowed}.chat-area[data-v-4f825433]{flex:1;overflow-y:auto;padding:16px;display:flex;flex-direction:column;gap:12px}.empty-state[data-v-4f825433]{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#52525b;font-size:14px;min-height:100px}.empty-state i[data-v-4f825433]{font-size:48px;margin-bottom:12px;opacity:.5}.message[data-v-4f825433]{display:flex;flex-direction:column;max-width:85%}.message.user[data-v-4f825433]{align-self:flex-end}.message.assistant[data-v-4f825433]{align-self:flex-start}.message-bubble[data-v-4f825433]{padding:12px 14px;border-radius:14px;font-size:14px;line-height:1.5;word-break:break-word}.message.user .message-bubble[data-v-4f825433]{background:#3b82f6;color:#fff;border-bottom-right-radius:4px}.message.assistant .message-bubble[data-v-4f825433]{background:#121212;border:1px solid #27272a;border-bottom-left-radius:4px;color:#d4d4d8}.message.assistant.thinking .message-bubble[data-v-4f825433]{background:linear-gradient(135deg,#121212,#18191b)}.message-bubble.system[data-v-4f825433]{font-style:italic;color:#a1a1aa}.step-block[data-v-4f825433]{display:flex;flex-direction:column;gap:8px}.tool-log[data-v-4f825433]{font-size:12px;color:#84848a;padding:8px 12px;background:#18191b;border-radius:6px;font-family:ui-monospace,monospace;display:flex;align-items:center;gap:8px}.tool-success[data-v-4f825433]{color:#22c55e}.tool-fail[data-v-4f825433]{color:#ef4444}.tool-name[data-v-4f825433]{color:#3b82f6}.tool-args[data-v-4f825433]{color:#84848a}.todo-list[data-v-4f825433]{background:#121212;border:1px solid #27272a;border-radius:10px;padding:10px 14px}.todo-item[data-v-4f825433]{display:flex;align-items:center;gap:10px;padding:6px 0;font-size:13px;color:#d4d4d8}.todo-item[data-v-4f825433]:not(:last-child){border-bottom:1px solid #27272a}.todo-status[data-v-4f825433]{width:20px;height:20px;display:flex;align-items:center;justify-content:center;font-size:12px}.input-area[data-v-4f825433]{display:flex;gap:10px;padding:12px 16px;background:#121212;border-top:1px solid #27272a;flex-shrink:0}.input-wrapper[data-v-4f825433]{flex:1}.input-field[data-v-4f825433]{width:100%;min-height:44px;max-height:100px;padding:10px 14px;background:#0a0a09;border:1px solid #27272a;border-radius:20px;color:#f4f4f5;font-size:14px;resize:none;outline:none}.input-field[data-v-4f825433]:focus{border-color:#3b82f6}.input-field[data-v-4f825433]::-moz-placeholder{color:#52525b}.input-field[data-v-4f825433]::placeholder{color:#52525b}.send-btn[data-v-4f825433]{width:44px;height:44px;background:#3b82f6;border:none;border-radius:50%;color:#fff;font-size:16px;cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0}.send-btn[data-v-4f825433]:disabled{background:#27272a;color:#52525b;cursor:not-allowed}.stop-btn[data-v-4f825433]{background:#ef4444}.status-bar[data-v-4f825433]{display:flex;align-items:center;justify-content:space-between;padding:6px 16px;background:#121212;border-top:1px solid #27272a;font-size:11px;color:#84848a;flex-shrink:0}.status-indicator[data-v-4f825433]{display:flex;align-items:center;gap:6px}.status-dot[data-v-4f825433]{width:6px;height:6px;border-radius:50%;background:#22c55e}.status-dot.processing[data-v-4f825433]{background:#ef4444;animation:pulse-4f825433 1.5s infinite}@keyframes pulse-4f825433{0%,to{opacity:1}50%{opacity:.4}}.drawer-overlay[data-v-4f825433]{position:fixed;top:0;left:0;right:0;bottom:0;background:#00000080;opacity:0;visibility:hidden;transition:all .3s;z-index:999}.drawer-overlay.show[data-v-4f825433]{opacity:1;visibility:visible}.model-drawer[data-v-4f825433],.command-drawer[data-v-4f825433]{position:fixed;bottom:0;left:0;right:0;max-width:430px;margin:0 auto;background:#121212;border-radius:16px 16px 0 0;transform:translateY(100%);transition:transform .3s ease;z-index:1000;max-height:60vh;display:flex;flex-direction:column}.model-drawer.show[data-v-4f825433],.command-drawer.show[data-v-4f825433]{transform:translateY(0)}.drawer-header[data-v-4f825433]{padding:16px;border-bottom:1px solid #27272a;display:flex;align-items:center;justify-content:space-between;flex-shrink:0}.drawer-title[data-v-4f825433]{font-size:16px;font-weight:500;color:#f4f4f5}.drawer-close[data-v-4f825433]{width:32px;height:32px;border-radius:50%;background:#18191b;border:none;color:#84848a;font-size:14px;cursor:pointer;display:flex;align-items:center;justify-content:center}.command-list[data-v-4f825433]{flex:1;overflow-y:auto;padding:8px 0}.command-item[data-v-4f825433]{display:flex;align-items:center;padding:14px 16px;gap:12px;transition:background .2s;cursor:pointer}.command-item[data-v-4f825433]:active{background:#18191b}.command-item.active[data-v-4f825433]{background:#3b82f61a}.command-icon[data-v-4f825433]{width:40px;height:40px;background:#18191b;border-radius:10px;display:flex;align-items:center;justify-content:center;color:#3b82f6;flex-shrink:0}.command-item.active .command-icon[data-v-4f825433]{background:#3b82f6;color:#fff}.command-info[data-v-4f825433]{flex:1;min-width:0}.command-name[data-v-4f825433]{font-size:14px;font-weight:500;color:#f4f4f5;margin-bottom:4px}.command-desc[data-v-4f825433]{font-size:12px;color:#84848a}.message-bubble[data-v-4f825433] p{margin:0 0 10px}.message-bubble[data-v-4f825433] p:last-child{margin-bottom:0}.message-bubble[data-v-4f825433] code{background:#18191b;padding:2px 6px;border-radius:4px;font-family:monospace}.step4-test[data-v-63c253f0]{height:100%;display:flex;flex-direction:column;background:#0a0a09}.chat-toolbar[data-v-63c253f0]{display:flex;align-items:center;gap:8px;padding:8px 16px;background:#121212;border-bottom:1px solid #27272a;flex-shrink:0}.model-name[data-v-63c253f0]{flex:1;color:#3b82f6;font-size:13px;cursor:pointer}.toolbar-btn[data-v-63c253f0]{width:36px;height:36px;display:flex;align-items:center;justify-content:center;background:#18191b;border:1px solid #27272a;border-radius:8px;color:#d4d4d8;cursor:pointer;font-size:14px}.toolbar-btn[data-v-63c253f0]:disabled{opacity:.5;cursor:not-allowed}.chat-area[data-v-63c253f0]{flex:1;overflow-y:auto;padding:16px;display:flex;flex-direction:column;gap:12px}.empty-state[data-v-63c253f0]{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#52525b;font-size:14px;min-height:100px}.empty-state i[data-v-63c253f0]{font-size:48px;margin-bottom:12px;opacity:.5}.message[data-v-63c253f0]{display:flex;flex-direction:column;max-width:85%}.message.user[data-v-63c253f0]{align-self:flex-end}.message.assistant[data-v-63c253f0]{align-self:flex-start}.message-bubble[data-v-63c253f0]{padding:12px 14px;border-radius:14px;font-size:14px;line-height:1.5;word-break:break-word}.message.user .message-bubble[data-v-63c253f0]{background:#3b82f6;color:#fff;border-bottom-right-radius:4px}.message.assistant .message-bubble[data-v-63c253f0]{background:#121212;border:1px solid #27272a;border-bottom-left-radius:4px;color:#d4d4d8}.message.assistant.thinking .message-bubble[data-v-63c253f0]{background:linear-gradient(135deg,#121212,#18191b)}.message-bubble.system[data-v-63c253f0]{font-style:italic;color:#a1a1aa}.step-block[data-v-63c253f0]{display:flex;flex-direction:column;gap:8px}.tool-log[data-v-63c253f0]{font-size:12px;color:#84848a;padding:8px 12px;background:#18191b;border-radius:6px;font-family:ui-monospace,monospace;display:flex;align-items:center;gap:8px}.tool-success[data-v-63c253f0]{color:#22c55e}.tool-fail[data-v-63c253f0]{color:#ef4444}.tool-name[data-v-63c253f0]{color:#3b82f6}.tool-args[data-v-63c253f0]{color:#84848a}.todo-list[data-v-63c253f0]{background:#121212;border:1px solid #27272a;border-radius:10px;padding:10px 14px}.todo-item[data-v-63c253f0]{display:flex;align-items:center;gap:10px;padding:6px 0;font-size:13px;color:#d4d4d8}.todo-item[data-v-63c253f0]:not(:last-child){border-bottom:1px solid #27272a}.todo-status[data-v-63c253f0]{width:20px;height:20px;display:flex;align-items:center;justify-content:center;font-size:12px}.input-area[data-v-63c253f0]{display:flex;gap:10px;padding:12px 16px;background:#121212;border-top:1px solid #27272a;flex-shrink:0}.input-wrapper[data-v-63c253f0]{flex:1}.input-field[data-v-63c253f0]{width:100%;min-height:44px;max-height:100px;padding:10px 14px;background:#0a0a09;border:1px solid #27272a;border-radius:20px;color:#f4f4f5;font-size:14px;resize:none;outline:none}.input-field[data-v-63c253f0]:focus{border-color:#3b82f6}.input-field[data-v-63c253f0]::-moz-placeholder{color:#52525b}.input-field[data-v-63c253f0]::placeholder{color:#52525b}.send-btn[data-v-63c253f0]{width:44px;height:44px;background:#3b82f6;border:none;border-radius:50%;color:#fff;font-size:16px;cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0}.send-btn[data-v-63c253f0]:disabled{background:#27272a;color:#52525b;cursor:not-allowed}.stop-btn[data-v-63c253f0]{background:#ef4444}.status-bar[data-v-63c253f0]{display:flex;align-items:center;justify-content:space-between;padding:6px 16px;background:#121212;border-top:1px solid #27272a;font-size:11px;color:#84848a;flex-shrink:0}.status-indicator[data-v-63c253f0]{display:flex;align-items:center;gap:6px}.status-dot[data-v-63c253f0]{width:6px;height:6px;border-radius:50%;background:#22c55e}.status-dot.processing[data-v-63c253f0]{background:#ef4444;animation:pulse-63c253f0 1.5s infinite}@keyframes pulse-63c253f0{0%,to{opacity:1}50%{opacity:.4}}.drawer-overlay[data-v-63c253f0]{position:fixed;top:0;left:0;right:0;bottom:0;background:#00000080;opacity:0;visibility:hidden;transition:all .3s;z-index:999}.drawer-overlay.show[data-v-63c253f0]{opacity:1;visibility:visible}.model-drawer[data-v-63c253f0],.command-drawer[data-v-63c253f0]{position:fixed;bottom:0;left:0;right:0;max-width:430px;margin:0 auto;background:#121212;border-radius:16px 16px 0 0;transform:translateY(100%);transition:transform .3s ease;z-index:1000;max-height:60vh;display:flex;flex-direction:column}.model-drawer.show[data-v-63c253f0],.command-drawer.show[data-v-63c253f0]{transform:translateY(0)}.drawer-header[data-v-63c253f0]{padding:16px;border-bottom:1px solid #27272a;display:flex;align-items:center;justify-content:space-between;flex-shrink:0}.drawer-title[data-v-63c253f0]{font-size:16px;font-weight:500;color:#f4f4f5}.drawer-close[data-v-63c253f0]{width:32px;height:32px;border-radius:50%;background:#18191b;border:none;color:#84848a;font-size:14px;cursor:pointer;display:flex;align-items:center;justify-content:center}.command-list[data-v-63c253f0]{flex:1;overflow-y:auto;padding:8px 0}.command-item[data-v-63c253f0]{display:flex;align-items:center;padding:14px 16px;gap:12px;transition:background .2s;cursor:pointer}.command-item[data-v-63c253f0]:active{background:#18191b}.command-item.active[data-v-63c253f0]{background:#3b82f61a}.command-icon[data-v-63c253f0]{width:40px;height:40px;background:#18191b;border-radius:10px;display:flex;align-items:center;justify-content:center;color:#3b82f6;flex-shrink:0}.command-item.active .command-icon[data-v-63c253f0]{background:#3b82f6;color:#fff}.command-info[data-v-63c253f0]{flex:1;min-width:0}.command-name[data-v-63c253f0]{font-size:14px;font-weight:500;color:#f4f4f5;margin-bottom:4px}.command-desc[data-v-63c253f0]{font-size:12px;color:#84848a}.message-bubble[data-v-63c253f0] p{margin:0 0 10px}.message-bubble[data-v-63c253f0] p:last-child{margin-bottom:0}.message-bubble[data-v-63c253f0] code{background:#18191b;padding:2px 6px;border-radius:4px;font-family:monospace}.dev-workflow-view[data-v-af782b5c]{height:100%;display:flex;flex-direction:column;background:#0a0a09}.step-content[data-v-af782b5c]{flex:1;overflow:hidden}.status-bar[data-v-af782b5c]{padding:10px 16px;background:#121212;border-top:1px solid #27272a;font-size:12px;color:#84848a;text-align:center}
|
|
1
|
+
.workflow-step-bar[data-v-1cf39c0c]{display:flex;background:var(--bg-secondary, #121212);border-bottom:1px solid var(--border-color, #27272a);padding:8px 16px;gap:8px}.step-item[data-v-1cf39c0c]{display:flex;align-items:center;gap:8px;padding:8px 16px;border-radius:8px;cursor:pointer;color:#52525b;transition:all .2s}.step-item.active[data-v-1cf39c0c]{color:#a1a1aa}.step-item.current[data-v-1cf39c0c]{background:var(--accent, #3b82f6);color:#fff}.step-number[data-v-1cf39c0c]{width:24px;height:24px;border-radius:50%;background:var(--bg-tertiary, #18191b);display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:600}.step-item.current .step-number[data-v-1cf39c0c]{background:#fff3}.step-label[data-v-1cf39c0c]{font-size:14px}.step1-req[data-v-ff2d2605]{height:100%;display:flex;flex-direction:column;background:#0a0a09}.section-header[data-v-ff2d2605]{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;font-size:14px;font-weight:500;color:#f4f4f5}.category-section[data-v-ff2d2605]{background:#121212}.category-list[data-v-ff2d2605]{display:flex;flex-wrap:wrap;gap:8px;padding:0 16px 16px}.category-item[data-v-ff2d2605]{display:flex;align-items:center;gap:6px;padding:8px 16px;background:#1e1e1e;border-radius:20px;font-size:13px;color:#a1a1aa;cursor:pointer;transition:all .2s}.category-item[data-v-ff2d2605]:hover{background:#27272a;color:#f4f4f5}.category-item.active[data-v-ff2d2605]{background:#3b82f6;color:#fff}.category-item.add-btn[data-v-ff2d2605]{background:transparent;border:1px dashed #3f3f46}.category-item.add-btn[data-v-ff2d2605]:hover{border-color:#3b82f6;color:#3b82f6}.divider[data-v-ff2d2605]{height:1px;background:#27272a}.project-section[data-v-ff2d2605]{flex:1;display:flex;flex-direction:column;overflow:hidden}.project-list[data-v-ff2d2605]{flex:1;overflow-y:auto;padding:0 16px 16px}.project-item[data-v-ff2d2605]{display:flex;align-items:center;justify-content:space-between;padding:14px 16px;background:#121212;border-radius:8px;margin-bottom:8px;cursor:pointer;transition:all .2s}.project-item[data-v-ff2d2605]:hover{background:#1e1e1e}.project-info[data-v-ff2d2605]{display:flex;align-items:center;gap:10px;color:#f4f4f5;font-size:14px}.project-info i[data-v-ff2d2605]{color:#3b82f6}.project-item>i[data-v-ff2d2605]{color:#52525b;font-size:12px}.empty-hint[data-v-ff2d2605]{text-align:center;color:#52525b;font-size:13px;padding:32px 0}.btn-primary[data-v-ff2d2605]{display:flex;align-items:center;gap:4px;padding:6px 12px;background:#3b82f6;color:#fff;border:none;border-radius:6px;font-size:12px;cursor:pointer;transition:all .2s}.btn-primary[data-v-ff2d2605]:hover{background:#2563eb}.btn-primary[data-v-ff2d2605]:disabled{background:#27272a;color:#52525b;cursor:not-allowed}.dialog-overlay[data-v-ff2d2605]{position:fixed;top:0;left:0;right:0;bottom:0;background:#000000b3;display:flex;align-items:center;justify-content:center;z-index:1000;padding:20px}.dialog[data-v-ff2d2605]{width:100%;max-width:320px;background:#18181b;border-radius:12px;overflow:hidden}.dialog-header[data-v-ff2d2605]{display:flex;align-items:center;justify-content:space-between;padding:16px;border-bottom:1px solid #27272a;font-size:15px;font-weight:500;color:#f4f4f5}.close-btn[data-v-ff2d2605]{background:none;border:none;color:#71717a;font-size:18px;cursor:pointer}.dialog-body[data-v-ff2d2605]{padding:16px}.dialog-body input[data-v-ff2d2605]{width:100%;padding:12px;background:#0a0a09;border:1px solid #27272a;border-radius:8px;color:#f4f4f5;font-size:14px;outline:none}.dialog-body input[data-v-ff2d2605]:focus{border-color:#3b82f6}.dialog-footer[data-v-ff2d2605]{display:flex;gap:12px;padding:16px;border-top:1px solid #27272a}.btn-cancel[data-v-ff2d2605],.btn-confirm[data-v-ff2d2605]{flex:1;padding:10px;border-radius:8px;font-size:14px;cursor:pointer;transition:all .2s}.btn-cancel[data-v-ff2d2605]{background:#27272a;border:none;color:#a1a1aa}.btn-cancel[data-v-ff2d2605]:hover{background:#3f3f46}.btn-confirm[data-v-ff2d2605]{background:#3b82f6;border:none;color:#fff}.btn-confirm[data-v-ff2d2605]:hover{background:#2563eb}.step2-design[data-v-f76fd17f]{height:100%;display:flex;flex-direction:column;background:#0a0a09}.mode-tabs[data-v-f76fd17f]{display:flex;background:#121212;border-bottom:1px solid #27272a;flex-shrink:0}.tab-btn[data-v-f76fd17f]{flex:1;display:flex;align-items:center;justify-content:center;gap:6px;padding:12px;background:none;border:none;color:#84848a;font-size:14px;cursor:pointer;transition:all .2s}.tab-btn.active[data-v-f76fd17f]{color:#3b82f6;border-bottom:2px solid #3b82f6}.chat-mode[data-v-f76fd17f],.spec-mode[data-v-f76fd17f]{flex:1;display:flex;flex-direction:column;overflow:hidden}.chat-toolbar[data-v-f76fd17f]{display:flex;align-items:center;gap:8px;padding:8px 16px;background:#121212;border-bottom:1px solid #27272a;flex-shrink:0}.model-name[data-v-f76fd17f]{flex:1;color:#3b82f6;font-size:13px;cursor:pointer}.chat-area[data-v-f76fd17f]{flex:1;overflow-y:auto;padding:16px;display:flex;flex-direction:column;gap:12px}.message[data-v-f76fd17f]{display:flex;flex-direction:column;max-width:85%}.message.user[data-v-f76fd17f]{align-self:flex-end}.message.assistant[data-v-f76fd17f]{align-self:flex-start}.message-bubble[data-v-f76fd17f]{padding:12px 14px;border-radius:14px;font-size:14px;line-height:1.5;word-break:break-word}.message.user .message-bubble[data-v-f76fd17f]{background:#3b82f6;color:#fff;border-bottom-right-radius:4px}.message.assistant .message-bubble[data-v-f76fd17f]{background:#121212;border:1px solid #27272a;border-bottom-left-radius:4px;color:#d4d4d8}.message.assistant.thinking .message-bubble[data-v-f76fd17f]{background:linear-gradient(135deg,#121212,#18191b)}.message-bubble.system[data-v-f76fd17f]{font-style:italic;color:#a1a1aa}.step-block[data-v-f76fd17f]{display:flex;flex-direction:column;gap:8px}.tool-log[data-v-f76fd17f]{font-size:12px;color:#84848a;padding:8px 12px;background:#18191b;border-radius:6px;font-family:ui-monospace,monospace;display:flex;align-items:center;gap:8px}.tool-success[data-v-f76fd17f]{color:#22c55e}.tool-fail[data-v-f76fd17f]{color:#ef4444}.tool-name[data-v-f76fd17f]{color:#3b82f6}.tool-args[data-v-f76fd17f]{color:#84848a}.todo-list[data-v-f76fd17f]{background:#121212;border:1px solid #27272a;border-radius:10px;padding:10px 14px}.todo-item[data-v-f76fd17f]{display:flex;align-items:center;gap:10px;padding:6px 0;font-size:13px;color:#d4d4d8}.todo-item[data-v-f76fd17f]:not(:last-child){border-bottom:1px solid #27272a}.todo-status[data-v-f76fd17f]{width:20px;height:20px;display:flex;align-items:center;justify-content:center;font-size:12px}.empty-state[data-v-f76fd17f]{flex:1;display:flex;align-items:center;justify-content:center;color:#52525b;font-size:14px;min-height:100px}.input-area[data-v-f76fd17f]{display:flex;gap:10px;padding:12px 16px;background:#121212;border-top:1px solid #27272a;flex-shrink:0}.input-wrapper[data-v-f76fd17f]{flex:1}.input-field[data-v-f76fd17f]{width:100%;min-height:44px;max-height:100px;padding:10px 14px;background:#0a0a09;border:1px solid #27272a;border-radius:20px;color:#f4f4f5;font-size:14px;resize:none;outline:none}.input-field[data-v-f76fd17f]:focus{border-color:#3b82f6}.input-field[data-v-f76fd17f]::-moz-placeholder{color:#52525b}.input-field[data-v-f76fd17f]::placeholder{color:#52525b}.send-btn[data-v-f76fd17f]{width:44px;height:44px;background:#3b82f6;border:none;border-radius:50%;color:#fff;font-size:16px;cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0}.send-btn[data-v-f76fd17f]:disabled{background:#27272a;color:#52525b;cursor:not-allowed}.stop-btn[data-v-f76fd17f]{background:#ef4444}.status-bar[data-v-f76fd17f]{display:flex;align-items:center;justify-content:space-between;padding:6px 16px;background:#121212;border-top:1px solid #27272a;font-size:11px;color:#84848a;flex-shrink:0}.status-indicator[data-v-f76fd17f]{display:flex;align-items:center;gap:6px}.status-dot[data-v-f76fd17f]{width:6px;height:6px;border-radius:50%;background:#22c55e}.status-dot.processing[data-v-f76fd17f]{background:#ef4444;animation:pulse-f76fd17f 1.5s infinite}.status-processing[data-v-f76fd17f]{color:#ef4444}.status-ready[data-v-f76fd17f]{color:#22c55e}@keyframes pulse-f76fd17f{0%,to{opacity:1}50%{opacity:.4}}.spec-tabs[data-v-f76fd17f]{display:flex;background:#121212;border-bottom:1px solid #27272a;flex-shrink:0}.spec-tab-btn[data-v-f76fd17f]{flex:1;display:flex;align-items:center;justify-content:center;gap:6px;padding:10px;background:none;border:none;color:#84848a;font-size:13px;cursor:pointer}.spec-tab-btn.active[data-v-f76fd17f]{color:#3b82f6;border-bottom:2px solid #3b82f6}.editor-area[data-v-f76fd17f]{flex:1;display:flex;flex-direction:column;overflow:hidden}.editor-toolbar[data-v-f76fd17f]{display:flex;padding:8px 16px;background:#121212;border-bottom:1px solid #27272a;flex-shrink:0}.toolbar-btn[data-v-f76fd17f]{display:flex;align-items:center;gap:4px;padding:6px 12px;background:#18191b;color:#d4d4d8;border:1px solid #27272a;border-radius:6px;font-size:12px;cursor:pointer}.toolbar-btn.primary[data-v-f76fd17f]{background:#3b82f6;color:#fff;border-color:#3b82f6}.markdown-editor[data-v-f76fd17f]{flex:1;width:100%;padding:16px;background:#121212;border:none;color:#f4f4f5;font-size:14px;font-family:ui-monospace,monospace;line-height:1.6;resize:none;outline:none}.preview-area[data-v-f76fd17f]{flex:1;overflow-y:auto;padding:16px;background:#121212}.preview-content[data-v-f76fd17f]{color:#d4d4d8;font-size:14px;line-height:1.7}.preview-content[data-v-f76fd17f] h1,.preview-content[data-v-f76fd17f] h2,.preview-content[data-v-f76fd17f] h3{color:#f4f4f5;margin:16px 0 8px}.preview-content[data-v-f76fd17f] code{background:#27272a;padding:2px 6px;border-radius:4px;font-size:13px}.preview-content[data-v-f76fd17f] pre{background:#1e1e1e;padding:12px;border-radius:8px;overflow-x:auto}.drawer-overlay[data-v-f76fd17f]{position:fixed;top:0;left:0;right:0;bottom:0;background:#00000080;opacity:0;visibility:hidden;transition:all .3s;z-index:999}.drawer-overlay.show[data-v-f76fd17f]{opacity:1;visibility:visible}.model-drawer[data-v-f76fd17f],.command-drawer[data-v-f76fd17f]{position:fixed;bottom:0;left:0;right:0;max-width:430px;margin:0 auto;background:#121212;border-radius:16px 16px 0 0;transform:translateY(100%);transition:transform .3s ease;z-index:1000;max-height:60vh;display:flex;flex-direction:column}.model-drawer.show[data-v-f76fd17f],.command-drawer.show[data-v-f76fd17f]{transform:translateY(0)}.drawer-header[data-v-f76fd17f]{padding:16px;border-bottom:1px solid #27272a;display:flex;align-items:center;justify-content:space-between;flex-shrink:0}.drawer-title[data-v-f76fd17f]{font-size:16px;font-weight:500;color:#f4f4f5}.drawer-close[data-v-f76fd17f]{width:32px;height:32px;border-radius:50%;background:#18191b;border:none;color:#84848a;font-size:14px;cursor:pointer;display:flex;align-items:center;justify-content:center}.command-list[data-v-f76fd17f]{flex:1;overflow-y:auto;padding:8px 0}.command-item[data-v-f76fd17f]{display:flex;align-items:center;padding:14px 16px;gap:12px;transition:background .2s;cursor:pointer}.command-item[data-v-f76fd17f]:active{background:#18191b}.command-item.active[data-v-f76fd17f]{background:#3b82f61a}.command-icon[data-v-f76fd17f]{width:40px;height:40px;background:#18191b;border-radius:10px;display:flex;align-items:center;justify-content:center;color:#3b82f6;flex-shrink:0}.command-item.active .command-icon[data-v-f76fd17f]{background:#3b82f6;color:#fff}.command-info[data-v-f76fd17f]{flex:1;min-width:0}.command-name[data-v-f76fd17f]{font-size:14px;font-weight:500;color:#f4f4f5;margin-bottom:4px}.command-desc[data-v-f76fd17f]{font-size:12px;color:#84848a}.message-bubble[data-v-f76fd17f] p{margin:0 0 10px}.message-bubble[data-v-f76fd17f] p:last-child{margin-bottom:0}.message-bubble[data-v-f76fd17f] code{background:#18191b;padding:2px 6px;border-radius:4px;font-family:monospace}.step3-code[data-v-4f825433]{height:100%;display:flex;flex-direction:column;background:#0a0a09}.chat-toolbar[data-v-4f825433]{display:flex;align-items:center;gap:8px;padding:8px 16px;background:#121212;border-bottom:1px solid #27272a;flex-shrink:0}.model-name[data-v-4f825433]{flex:1;color:#3b82f6;font-size:13px;cursor:pointer}.toolbar-btn[data-v-4f825433]{width:36px;height:36px;display:flex;align-items:center;justify-content:center;background:#18191b;border:1px solid #27272a;border-radius:8px;color:#d4d4d8;cursor:pointer;font-size:14px}.toolbar-btn[data-v-4f825433]:disabled{opacity:.5;cursor:not-allowed}.chat-area[data-v-4f825433]{flex:1;overflow-y:auto;padding:16px;display:flex;flex-direction:column;gap:12px}.empty-state[data-v-4f825433]{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#52525b;font-size:14px;min-height:100px}.empty-state i[data-v-4f825433]{font-size:48px;margin-bottom:12px;opacity:.5}.message[data-v-4f825433]{display:flex;flex-direction:column;max-width:85%}.message.user[data-v-4f825433]{align-self:flex-end}.message.assistant[data-v-4f825433]{align-self:flex-start}.message-bubble[data-v-4f825433]{padding:12px 14px;border-radius:14px;font-size:14px;line-height:1.5;word-break:break-word}.message.user .message-bubble[data-v-4f825433]{background:#3b82f6;color:#fff;border-bottom-right-radius:4px}.message.assistant .message-bubble[data-v-4f825433]{background:#121212;border:1px solid #27272a;border-bottom-left-radius:4px;color:#d4d4d8}.message.assistant.thinking .message-bubble[data-v-4f825433]{background:linear-gradient(135deg,#121212,#18191b)}.message-bubble.system[data-v-4f825433]{font-style:italic;color:#a1a1aa}.step-block[data-v-4f825433]{display:flex;flex-direction:column;gap:8px}.tool-log[data-v-4f825433]{font-size:12px;color:#84848a;padding:8px 12px;background:#18191b;border-radius:6px;font-family:ui-monospace,monospace;display:flex;align-items:center;gap:8px}.tool-success[data-v-4f825433]{color:#22c55e}.tool-fail[data-v-4f825433]{color:#ef4444}.tool-name[data-v-4f825433]{color:#3b82f6}.tool-args[data-v-4f825433]{color:#84848a}.todo-list[data-v-4f825433]{background:#121212;border:1px solid #27272a;border-radius:10px;padding:10px 14px}.todo-item[data-v-4f825433]{display:flex;align-items:center;gap:10px;padding:6px 0;font-size:13px;color:#d4d4d8}.todo-item[data-v-4f825433]:not(:last-child){border-bottom:1px solid #27272a}.todo-status[data-v-4f825433]{width:20px;height:20px;display:flex;align-items:center;justify-content:center;font-size:12px}.input-area[data-v-4f825433]{display:flex;gap:10px;padding:12px 16px;background:#121212;border-top:1px solid #27272a;flex-shrink:0}.input-wrapper[data-v-4f825433]{flex:1}.input-field[data-v-4f825433]{width:100%;min-height:44px;max-height:100px;padding:10px 14px;background:#0a0a09;border:1px solid #27272a;border-radius:20px;color:#f4f4f5;font-size:14px;resize:none;outline:none}.input-field[data-v-4f825433]:focus{border-color:#3b82f6}.input-field[data-v-4f825433]::-moz-placeholder{color:#52525b}.input-field[data-v-4f825433]::placeholder{color:#52525b}.send-btn[data-v-4f825433]{width:44px;height:44px;background:#3b82f6;border:none;border-radius:50%;color:#fff;font-size:16px;cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0}.send-btn[data-v-4f825433]:disabled{background:#27272a;color:#52525b;cursor:not-allowed}.stop-btn[data-v-4f825433]{background:#ef4444}.status-bar[data-v-4f825433]{display:flex;align-items:center;justify-content:space-between;padding:6px 16px;background:#121212;border-top:1px solid #27272a;font-size:11px;color:#84848a;flex-shrink:0}.status-indicator[data-v-4f825433]{display:flex;align-items:center;gap:6px}.status-dot[data-v-4f825433]{width:6px;height:6px;border-radius:50%;background:#22c55e}.status-dot.processing[data-v-4f825433]{background:#ef4444;animation:pulse-4f825433 1.5s infinite}@keyframes pulse-4f825433{0%,to{opacity:1}50%{opacity:.4}}.drawer-overlay[data-v-4f825433]{position:fixed;top:0;left:0;right:0;bottom:0;background:#00000080;opacity:0;visibility:hidden;transition:all .3s;z-index:999}.drawer-overlay.show[data-v-4f825433]{opacity:1;visibility:visible}.model-drawer[data-v-4f825433],.command-drawer[data-v-4f825433]{position:fixed;bottom:0;left:0;right:0;max-width:430px;margin:0 auto;background:#121212;border-radius:16px 16px 0 0;transform:translateY(100%);transition:transform .3s ease;z-index:1000;max-height:60vh;display:flex;flex-direction:column}.model-drawer.show[data-v-4f825433],.command-drawer.show[data-v-4f825433]{transform:translateY(0)}.drawer-header[data-v-4f825433]{padding:16px;border-bottom:1px solid #27272a;display:flex;align-items:center;justify-content:space-between;flex-shrink:0}.drawer-title[data-v-4f825433]{font-size:16px;font-weight:500;color:#f4f4f5}.drawer-close[data-v-4f825433]{width:32px;height:32px;border-radius:50%;background:#18191b;border:none;color:#84848a;font-size:14px;cursor:pointer;display:flex;align-items:center;justify-content:center}.command-list[data-v-4f825433]{flex:1;overflow-y:auto;padding:8px 0}.command-item[data-v-4f825433]{display:flex;align-items:center;padding:14px 16px;gap:12px;transition:background .2s;cursor:pointer}.command-item[data-v-4f825433]:active{background:#18191b}.command-item.active[data-v-4f825433]{background:#3b82f61a}.command-icon[data-v-4f825433]{width:40px;height:40px;background:#18191b;border-radius:10px;display:flex;align-items:center;justify-content:center;color:#3b82f6;flex-shrink:0}.command-item.active .command-icon[data-v-4f825433]{background:#3b82f6;color:#fff}.command-info[data-v-4f825433]{flex:1;min-width:0}.command-name[data-v-4f825433]{font-size:14px;font-weight:500;color:#f4f4f5;margin-bottom:4px}.command-desc[data-v-4f825433]{font-size:12px;color:#84848a}.message-bubble[data-v-4f825433] p{margin:0 0 10px}.message-bubble[data-v-4f825433] p:last-child{margin-bottom:0}.message-bubble[data-v-4f825433] code{background:#18191b;padding:2px 6px;border-radius:4px;font-family:monospace}.step4-test[data-v-63c253f0]{height:100%;display:flex;flex-direction:column;background:#0a0a09}.chat-toolbar[data-v-63c253f0]{display:flex;align-items:center;gap:8px;padding:8px 16px;background:#121212;border-bottom:1px solid #27272a;flex-shrink:0}.model-name[data-v-63c253f0]{flex:1;color:#3b82f6;font-size:13px;cursor:pointer}.toolbar-btn[data-v-63c253f0]{width:36px;height:36px;display:flex;align-items:center;justify-content:center;background:#18191b;border:1px solid #27272a;border-radius:8px;color:#d4d4d8;cursor:pointer;font-size:14px}.toolbar-btn[data-v-63c253f0]:disabled{opacity:.5;cursor:not-allowed}.chat-area[data-v-63c253f0]{flex:1;overflow-y:auto;padding:16px;display:flex;flex-direction:column;gap:12px}.empty-state[data-v-63c253f0]{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#52525b;font-size:14px;min-height:100px}.empty-state i[data-v-63c253f0]{font-size:48px;margin-bottom:12px;opacity:.5}.message[data-v-63c253f0]{display:flex;flex-direction:column;max-width:85%}.message.user[data-v-63c253f0]{align-self:flex-end}.message.assistant[data-v-63c253f0]{align-self:flex-start}.message-bubble[data-v-63c253f0]{padding:12px 14px;border-radius:14px;font-size:14px;line-height:1.5;word-break:break-word}.message.user .message-bubble[data-v-63c253f0]{background:#3b82f6;color:#fff;border-bottom-right-radius:4px}.message.assistant .message-bubble[data-v-63c253f0]{background:#121212;border:1px solid #27272a;border-bottom-left-radius:4px;color:#d4d4d8}.message.assistant.thinking .message-bubble[data-v-63c253f0]{background:linear-gradient(135deg,#121212,#18191b)}.message-bubble.system[data-v-63c253f0]{font-style:italic;color:#a1a1aa}.step-block[data-v-63c253f0]{display:flex;flex-direction:column;gap:8px}.tool-log[data-v-63c253f0]{font-size:12px;color:#84848a;padding:8px 12px;background:#18191b;border-radius:6px;font-family:ui-monospace,monospace;display:flex;align-items:center;gap:8px}.tool-success[data-v-63c253f0]{color:#22c55e}.tool-fail[data-v-63c253f0]{color:#ef4444}.tool-name[data-v-63c253f0]{color:#3b82f6}.tool-args[data-v-63c253f0]{color:#84848a}.todo-list[data-v-63c253f0]{background:#121212;border:1px solid #27272a;border-radius:10px;padding:10px 14px}.todo-item[data-v-63c253f0]{display:flex;align-items:center;gap:10px;padding:6px 0;font-size:13px;color:#d4d4d8}.todo-item[data-v-63c253f0]:not(:last-child){border-bottom:1px solid #27272a}.todo-status[data-v-63c253f0]{width:20px;height:20px;display:flex;align-items:center;justify-content:center;font-size:12px}.input-area[data-v-63c253f0]{display:flex;gap:10px;padding:12px 16px;background:#121212;border-top:1px solid #27272a;flex-shrink:0}.input-wrapper[data-v-63c253f0]{flex:1}.input-field[data-v-63c253f0]{width:100%;min-height:44px;max-height:100px;padding:10px 14px;background:#0a0a09;border:1px solid #27272a;border-radius:20px;color:#f4f4f5;font-size:14px;resize:none;outline:none}.input-field[data-v-63c253f0]:focus{border-color:#3b82f6}.input-field[data-v-63c253f0]::-moz-placeholder{color:#52525b}.input-field[data-v-63c253f0]::placeholder{color:#52525b}.send-btn[data-v-63c253f0]{width:44px;height:44px;background:#3b82f6;border:none;border-radius:50%;color:#fff;font-size:16px;cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0}.send-btn[data-v-63c253f0]:disabled{background:#27272a;color:#52525b;cursor:not-allowed}.stop-btn[data-v-63c253f0]{background:#ef4444}.status-bar[data-v-63c253f0]{display:flex;align-items:center;justify-content:space-between;padding:6px 16px;background:#121212;border-top:1px solid #27272a;font-size:11px;color:#84848a;flex-shrink:0}.status-indicator[data-v-63c253f0]{display:flex;align-items:center;gap:6px}.status-dot[data-v-63c253f0]{width:6px;height:6px;border-radius:50%;background:#22c55e}.status-dot.processing[data-v-63c253f0]{background:#ef4444;animation:pulse-63c253f0 1.5s infinite}@keyframes pulse-63c253f0{0%,to{opacity:1}50%{opacity:.4}}.drawer-overlay[data-v-63c253f0]{position:fixed;top:0;left:0;right:0;bottom:0;background:#00000080;opacity:0;visibility:hidden;transition:all .3s;z-index:999}.drawer-overlay.show[data-v-63c253f0]{opacity:1;visibility:visible}.model-drawer[data-v-63c253f0],.command-drawer[data-v-63c253f0]{position:fixed;bottom:0;left:0;right:0;max-width:430px;margin:0 auto;background:#121212;border-radius:16px 16px 0 0;transform:translateY(100%);transition:transform .3s ease;z-index:1000;max-height:60vh;display:flex;flex-direction:column}.model-drawer.show[data-v-63c253f0],.command-drawer.show[data-v-63c253f0]{transform:translateY(0)}.drawer-header[data-v-63c253f0]{padding:16px;border-bottom:1px solid #27272a;display:flex;align-items:center;justify-content:space-between;flex-shrink:0}.drawer-title[data-v-63c253f0]{font-size:16px;font-weight:500;color:#f4f4f5}.drawer-close[data-v-63c253f0]{width:32px;height:32px;border-radius:50%;background:#18191b;border:none;color:#84848a;font-size:14px;cursor:pointer;display:flex;align-items:center;justify-content:center}.command-list[data-v-63c253f0]{flex:1;overflow-y:auto;padding:8px 0}.command-item[data-v-63c253f0]{display:flex;align-items:center;padding:14px 16px;gap:12px;transition:background .2s;cursor:pointer}.command-item[data-v-63c253f0]:active{background:#18191b}.command-item.active[data-v-63c253f0]{background:#3b82f61a}.command-icon[data-v-63c253f0]{width:40px;height:40px;background:#18191b;border-radius:10px;display:flex;align-items:center;justify-content:center;color:#3b82f6;flex-shrink:0}.command-item.active .command-icon[data-v-63c253f0]{background:#3b82f6;color:#fff}.command-info[data-v-63c253f0]{flex:1;min-width:0}.command-name[data-v-63c253f0]{font-size:14px;font-weight:500;color:#f4f4f5;margin-bottom:4px}.command-desc[data-v-63c253f0]{font-size:12px;color:#84848a}.message-bubble[data-v-63c253f0] p{margin:0 0 10px}.message-bubble[data-v-63c253f0] p:last-child{margin-bottom:0}.message-bubble[data-v-63c253f0] code{background:#18191b;padding:2px 6px;border-radius:4px;font-family:monospace}.dialog-overlay[data-v-d31752c1]{position:fixed;top:0;left:0;right:0;bottom:0;background:#00000080;opacity:0;visibility:hidden;transition:all .3s;z-index:1000}.dialog-overlay.show[data-v-d31752c1]{opacity:1;visibility:visible}.dialog-sheet[data-v-d31752c1]{position:fixed;bottom:0;left:0;right:0;background:#121212;border-radius:16px 16px 0 0;transform:translateY(100%);transition:transform .3s ease;z-index:1001;max-width:430px;margin:0 auto}.dialog-sheet.show[data-v-d31752c1]{transform:translateY(0)}.dialog-header[data-v-d31752c1]{padding:16px;border-bottom:1px solid #27272a;display:flex;align-items:center;justify-content:space-between}.dialog-title[data-v-d31752c1]{font-size:16px;font-weight:500;color:#f4f4f5}.dialog-close[data-v-d31752c1]{width:32px;height:32px;border-radius:50%;background:#18191b;border:none;color:#84848a;font-size:14px;cursor:pointer;display:flex;align-items:center;justify-content:center}.dialog-body[data-v-d31752c1]{padding:16px}.form-group[data-v-d31752c1]{margin-bottom:16px}.form-group label[data-v-d31752c1]{display:block;font-size:13px;color:#84848a;margin-bottom:6px}.form-input[data-v-d31752c1]{width:100%;padding:10px 14px;background:#0a0a09;border:1px solid #27272a;border-radius:8px;color:#f4f4f5;font-size:14px;outline:none;box-sizing:border-box}.form-input[data-v-d31752c1]:focus{border-color:#3b82f6}.form-text[data-v-d31752c1]{color:#d4d4d8;font-size:14px;padding:10px 0}.dialog-actions[data-v-d31752c1]{display:flex;gap:12px;padding:16px;border-top:1px solid #27272a}.dialog-actions button[data-v-d31752c1]{flex:1;padding:12px;border-radius:8px;font-size:14px;cursor:pointer;border:none}.btn-cancel[data-v-d31752c1]{background:#18191b;color:#d4d4d8}.btn-confirm[data-v-d31752c1]{background:#3b82f6;color:#fff}.btn-confirm[data-v-d31752c1]:disabled{background:#27272a;color:#52525b;cursor:not-allowed}.dev-workflow-view[data-v-a8b9d6a2]{height:100%;display:flex;flex-direction:column;background:#0a0a09}.step-toolbar[data-v-a8b9d6a2]{display:flex;justify-content:flex-end;padding:8px 16px;background:#121212;border-bottom:1px solid #27272a;flex-shrink:0}.btn-sub-scheme[data-v-a8b9d6a2]{display:flex;align-items:center;gap:6px;padding:8px 16px;background:#22c55e;color:#fff;border:none;border-radius:6px;font-size:13px;cursor:pointer}.step-content[data-v-a8b9d6a2]{flex:1;overflow:hidden}.status-bar[data-v-a8b9d6a2]{padding:10px 16px;background:#121212;border-top:1px solid #27272a;font-size:12px;color:#84848a;text-align:center}
|