@dahawa/hawa-code 2.3.0 → 2.3.2
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/cli.js +551 -551
- package/hands.js +469 -469
- package/package.json +1 -1
- package/webServer/app.js +1 -1
- package/webServer/style.css +2 -2
package/package.json
CHANGED
package/webServer/app.js
CHANGED
|
@@ -85,7 +85,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let n="<p>An error
|
|
|
85
85
|
`))),r&&!t&&We.default.createElement("div",{className:"expand-toggle",onClick:()=>l(!0)},"... ",c.length-30," more lines (click to expand)")),f&&We.default.createElement("pre",{className:"code-block stderr-block"},We.default.createElement("code",null,e.stderr)))}var ye=x(k(),1);function zv({data:e}){let[t,l]=(0,ye.useState)(!1);if(e.run_in_background)return ye.default.createElement("div",{className:"tool-result-detail tool-result-powershell"},ye.default.createElement("div",{className:"result-header"},ye.default.createElement("span",{className:"result-status status-info"},"Running in background")));let n=e.stdout&&e.stdout.trim(),a=e.stderr&&e.stderr.trim();if(!n&&!a&&!e.interrupted)return ye.default.createElement("div",{className:"tool-result-detail tool-result-powershell"},ye.default.createElement("div",{className:"result-header"},ye.default.createElement("span",{className:"result-status status-success"},"Done (no output)")));let s=n?e.stdout.split(`
|
|
86
86
|
`):[],i=t?s:s.slice(0,30),u=s.length>30;return ye.default.createElement("div",{className:"tool-result-detail tool-result-powershell"},ye.default.createElement("div",{className:"result-header"},e.interrupted?ye.default.createElement("span",{className:"result-status status-warn"},"Interrupted"):ye.default.createElement("span",{className:"result-status status-success"},"exit 0"),e.stdoutLines>0&&ye.default.createElement("span",{className:"tool-meta"},e.stdoutLines," lines")),n&&ye.default.createElement(ye.default.Fragment,null,ye.default.createElement("pre",{className:"code-block stdout-block"},ye.default.createElement("code",null,i.join(`
|
|
87
87
|
`))),u&&!t&&ye.default.createElement("div",{className:"expand-toggle",onClick:()=>l(!0)},"... ",s.length-30," more lines (click to expand)")),a&&ye.default.createElement("pre",{className:"code-block stderr-block"},ye.default.createElement("code",null,e.stderr)),e.interrupted&&ye.default.createElement("div",{className:"result-note"},"Command was aborted before completion"))}var ao=x(k(),1);function Ov({data:e}){let t=e.toolNames||[];return ao.default.createElement("div",{className:"tool-result-detail tool-result-toolloader"},ao.default.createElement("div",{className:"result-header"},ao.default.createElement("span",{className:"result-status status-success"},e.message||`Tools loaded: ${t.join(", ")}`)))}var so=x(k(),1);function Uv({data:e}){let l=e.message?.startsWith("<error>")?"status-error":"status-success";return so.default.createElement("div",{className:"tool-result-detail tool-result-toolunloader"},so.default.createElement("div",{className:"result-header"},so.default.createElement("span",{className:`result-status ${l}`},e.message||"Tools unloaded")))}var Sl=x(k(),1);function Dv({data:e}){return e.error?Sl.default.createElement("div",{className:"tool-result-detail tool-result-notebookedit"},Sl.default.createElement("div",{className:"result-header"},Sl.default.createElement("span",{className:"result-status status-error"},e.error))):Sl.default.createElement("div",{className:"tool-result-detail tool-result-notebookedit"},Sl.default.createElement("div",{className:"result-header"},Sl.default.createElement("span",{className:"result-status status-success"},e.edit_mode==="delete"?`Deleted cell ${e.cell_number}`:`${e.edit_mode==="insert"?"Inserted":"Updated"} cell ${e.cell_number}`)),Sl.default.createElement("pre",{className:"code-block"},Sl.default.createElement("code",null,e.new_source)))}var Il=x(k(),1);function wv({data:e}){return Il.default.createElement("div",{className:"tool-result-detail tool-result-websearch"},Il.default.createElement("div",{className:"result-header"},Il.default.createElement("span",{className:"result-status status-success"},"Found ",e.results.length," ",e.results.length===1?"result":"results")),e.summaryText&&Il.default.createElement("div",{className:"result-summary markdown-body"},e.summaryText),e.results.length>0&&Il.default.createElement("ul",{className:"result-list"},e.results.map((t,l)=>Il.default.createElement("li",{key:l},Il.default.createElement("a",{href:t.link,target:"_blank",rel:"noreferrer"},t.title)))))}var Nl=x(k(),1);function qv({data:e}){let[t,l]=(0,Nl.useState)(!1),n=e.aiAnalysis||"No content could be analyzed",a=n.length>400,s=t||!a?n:n.slice(0,400)+"...";return Nl.default.createElement("div",{className:"tool-result-detail tool-result-webfetch"},Nl.default.createElement("div",{className:"result-header"},Nl.default.createElement("span",{className:"result-status status-success"},"Content ",e.fromCache?"from cache":"fetched"," and analyzed"),Nl.default.createElement("span",{className:"tool-meta"},e.url)),Nl.default.createElement("div",{className:"result-content markdown-body",style:{whiteSpace:"pre-wrap"}},s),a&&!t&&Nl.default.createElement("div",{className:"expand-toggle",onClick:()=>l(!0)},"click to expand"))}var Qs=x(k(),1);function Hv({data:e}){return Qs.default.createElement("div",{className:"tool-result-detail tool-result-taskstop"},Qs.default.createElement("div",{className:"result-header"},Qs.default.createElement("span",{className:`result-status ${e.stopped?"status-success":"status-error"}`},e.message),Qs.default.createElement("span",{className:"tool-meta"},e.task_id," (",e.task_type,")")))}var en=x(k(),1);function bS(e){return e==="completed"?"\u2612":"\u2610"}function Bv({data:e}){let t=e.todos||[];return t.length===0?en.default.createElement("div",{className:"tool-result-detail tool-result-todowrite"},en.default.createElement("div",{className:"result-header"},en.default.createElement("span",{className:"result-status status-info"},"No todos currently"))):en.default.createElement("div",{className:"tool-result-detail tool-result-todowrite"},t.map((l,n)=>{let a=l.status==="completed",s=l.status==="in_progress";return en.default.createElement("div",{key:n,className:"todo-item"},en.default.createElement("span",{className:`todo-checkbox ${a?"completed":""}`},bS(l.status)),en.default.createElement("span",{className:`todo-content ${a?"completed":""} ${s?"in-progress":""}`},l.content))}))}var Xs=x(k(),1);function Lv({data:e}){return Xs.default.createElement("div",{className:"tool-result-detail tool-result-think"},Xs.default.createElement("div",{className:"result-header"},Xs.default.createElement("span",{className:"result-status status-success"},"Thought logged")),Xs.default.createElement("div",{className:"result-content"},e.thought))}var Xe=x(k(),1);function jv({data:e}){if(e.error)return Xe.default.createElement("div",{className:"tool-result-detail tool-result-askuserquestion"},Xe.default.createElement("div",{className:"result-header"},Xe.default.createElement("span",{className:"result-status status-error"},e.error)));if(e.cancelled)return Xe.default.createElement("div",{className:"tool-result-detail tool-result-askuserquestion"},Xe.default.createElement("div",{className:"result-header"},Xe.default.createElement("span",{className:"result-status status-warn"},"Question asking was cancelled")));let t=Object.entries(e.answers||{});return t.length===0?Xe.default.createElement("div",{className:"tool-result-detail tool-result-askuserquestion"},Xe.default.createElement("div",{className:"result-header"},Xe.default.createElement("span",{className:"result-status status-info"},"No answers provided by user"))):Xe.default.createElement("div",{className:"tool-result-detail tool-result-askuserquestion"},Xe.default.createElement("div",{className:"result-header"},Xe.default.createElement("span",{className:"result-status status-success"},"User answered questions")),Xe.default.createElement("ul",{className:"result-list"},t.map(([l,n],a)=>Xe.default.createElement("li",{key:a},Xe.default.createElement("strong",null,l)," \u2192 ",n))))}var Mn=x(k(),1);function Gv({data:e}){return e.error?Mn.default.createElement("div",{className:"tool-result-detail tool-result-enterplanmode"},Mn.default.createElement("div",{className:"result-header"},Mn.default.createElement("span",{className:"result-status status-error"},e.error))):Mn.default.createElement("div",{className:"tool-result-detail tool-result-enterplanmode"},Mn.default.createElement("div",{className:"result-header"},Mn.default.createElement("span",{className:`result-status ${e.approved?"status-success":"status-warn"}`},e.approved?"Entered plan mode":"User declined to enter plan mode")))}var Ct=x(k(),1);function Yv({data:e}){return e.error?Ct.default.createElement("div",{className:"tool-result-detail tool-result-exitplanmode"},Ct.default.createElement("div",{className:"result-header"},Ct.default.createElement("span",{className:"result-status status-error"},e.error))):e.cancelled||!e.approved?Ct.default.createElement("div",{className:"tool-result-detail tool-result-exitplanmode"},Ct.default.createElement("div",{className:"result-header"},Ct.default.createElement("span",{className:"result-status status-warn"},"Keep planning"))):Ct.default.createElement("div",{className:"tool-result-detail tool-result-exitplanmode"},Ct.default.createElement("div",{className:"result-header"},Ct.default.createElement("span",{className:"result-status status-success"},"User approved ",e.manualApproval?"manual approval":"auto-accept"," plan")),e.plan&&Ct.default.createElement("div",{className:"result-content markdown-body"},e.plan),e.planFilePath&&Ct.default.createElement("div",{className:"tool-meta"},"Plan saved to: ",e.planFilePath))}var Zs=x(k(),1);function Qv({data:e}){let t=e.message?.startsWith("Failed")||!e.worktreePath;return Zs.default.createElement("div",{className:"tool-result-detail tool-result-enterworktree"},Zs.default.createElement("div",{className:"result-header"},Zs.default.createElement("span",{className:`result-status ${t?"status-error":"status-success"}`},t?"Failed":"Created worktree")),Zs.default.createElement("div",{className:"result-content"},e.message))}var Ca=x(k(),1);function Xv({data:e}){let t=e.message?.startsWith("Error")||e.message?.startsWith("Cancelled");return Ca.default.createElement("div",{className:"tool-result-detail tool-result-exitworktree"},Ca.default.createElement("div",{className:"result-header"},Ca.default.createElement("span",{className:`result-status ${t?"status-error":"status-success"}`},t?"Failed":"Exited worktree"),Ca.default.createElement("span",{className:"tool-meta"},e.action)),Ca.default.createElement("div",{className:"result-content"},e.message))}var Vs=x(k(),1);function Zv({data:e}){let t=e.message?.startsWith("<error>");return Vs.default.createElement("div",{className:"tool-result-detail tool-result-slashcommand"},Vs.default.createElement("div",{className:"result-header"},Vs.default.createElement("span",{className:`result-status ${t?"status-error":"status-info"}`},'The "',e.commandWithArgs?.split(" ")[0],'" slash command is running')),t&&Vs.default.createElement("div",{className:"result-content"},e.message))}var Cn=x(k(),1);function Vv({data:e}){let t=e.message?.startsWith("<error>");return Cn.default.createElement("div",{className:"tool-result-detail tool-result-skill"},Cn.default.createElement("div",{className:"result-header"},Cn.default.createElement("span",{className:`result-status ${t?"status-error":"status-success"}`},t?"Skill error":e.fork?"Skill completed":"Successfully loaded skill"),Cn.default.createElement("span",{className:"tool-meta"},e.skillName)),!t&&e.baseDirectory&&Cn.default.createElement("div",{className:"tool-meta"},"Base directory: ",e.baseDirectory),t&&Cn.default.createElement("div",{className:"result-content"},e.message))}var io=x(k(),1);function Kv({data:e}){let t=e.message?.startsWith("Error");return io.default.createElement("div",{className:"tool-result-detail tool-result-croncreate"},io.default.createElement("div",{className:"result-header"},io.default.createElement("span",{className:`result-status ${t?"status-error":"status-success"}`},t?e.message:`Scheduled ${e.jobId} ${e.description}`)))}var uo=x(k(),1);function Jv({data:e}){return uo.default.createElement("div",{className:"tool-result-detail tool-result-crondelete"},uo.default.createElement("div",{className:"result-header"},uo.default.createElement("span",{className:`result-status ${e.success?"status-success":"status-warn"}`},e.message)))}var Gt=x(k(),1);function $v({data:e}){return!e.jobs||e.jobs.length===0?Gt.default.createElement("div",{className:"tool-result-detail tool-result-cronlist"},Gt.default.createElement("div",{className:"result-header"},Gt.default.createElement("span",{className:"result-status status-info"},"No cron jobs scheduled"))):Gt.default.createElement("div",{className:"tool-result-detail tool-result-cronlist"},Gt.default.createElement("div",{className:"result-header"},Gt.default.createElement("span",{className:"result-status status-success"},"Scheduled cron jobs")),Gt.default.createElement("ul",{className:"result-list"},e.jobs.map(t=>{let l=t.prompt.length>50?t.prompt.slice(0,50)+"...":t.prompt;return Gt.default.createElement("li",{key:t.id},Gt.default.createElement("code",null,t.id),": ",l," ",Gt.default.createElement("span",{className:"tool-meta"},"(",t.recurring?"recurring":"one-shot"," \xB7 ",t.description,")"))})))}var tn=x(k(),1);function Wv({data:e}){return tn.default.createElement("div",{className:"tool-result-detail tool-result-teamcreate"},tn.default.createElement("div",{className:"result-header"},tn.default.createElement("span",{className:"result-status status-success"},"Created team: ",e.name)),tn.default.createElement("div",{className:"result-content"},e.description&&tn.default.createElement("div",null,"Description: ",e.description),tn.default.createElement("div",null,"Lead: ",e.leadAgentId),tn.default.createElement("div",null,"Members: ",e.members?.length||0)))}var Ks=x(k(),1);function Pv({data:e}){return Ks.default.createElement("div",{className:"tool-result-detail tool-result-teamdelete"},Ks.default.createElement("div",{className:"result-header"},Ks.default.createElement("span",{className:`result-status ${e.success?"status-success":"status-error"}`},e.success?`Deleted team: ${e.teamName}`:`Failed to delete team: ${e.teamName}`)),!e.success&&Ks.default.createElement("div",{className:"result-content"},e.message))}var Js=x(k(),1);function Fv({data:e}){return Js.default.createElement("div",{className:"tool-result-detail tool-result-sendmessage"},Js.default.createElement("div",{className:"result-header"},Js.default.createElement("span",{className:`result-status ${e.success?"status-success":"status-error"}`},e.success?e.message:"Failed to send message")),!e.success&&Js.default.createElement("div",{className:"result-content"},e.message))}var ln=x(k(),1);function SS(e){let t=!1,l=!1;for(let n of Object.values(e))for(let a of n)a==="__tool_result__"?t=!0:l=!0;return{hasToolResult:t,hasInputFields:l}}function NS(e){return e==="__tool_result__"?"tool result":`input field "${e}"`}function Rv({data:e}){let t=e.action==="archive"?"Archived":"Unarchived",l=e.action==="archive"?e.archivedToolUseInputFields??{}:e.unarchivedToolUseInputFields??{},n=Object.keys(l).length,{hasToolResult:a,hasInputFields:s}=SS(l),i="tool result(s)";return a&&s?i="tool result(s) and input field(s)":s&&(i="input field(s)"),ln.default.createElement("div",{className:"tool-result-detail tool-result-messagearchiving"},ln.default.createElement("div",{className:"result-header"},ln.default.createElement("span",{className:"result-status status-success"},t," ",i," for ",n," tool use(s)")),Object.entries(l).map(([u,o])=>ln.default.createElement("div",{key:u,className:"result-fields"},ln.default.createElement("span",{className:"result-tool-use-id"},u,":"),o.map((f,c)=>ln.default.createElement("span",{key:`${f}-${c}`,className:"result-field"},c>0?", ":"",NS(f))))),e.action==="archive"&&e.summary&&ln.default.createElement("div",{className:"result-summary"},e.summary))}var V=x(k(),1);function Iv({data:e}){return V.default.createElement("div",{className:"tool-result-detail tool-result-memo"},(()=>{switch(e.action){case"write":{let{result:l}=e;return V.default.createElement(V.default.Fragment,null,V.default.createElement("div",{className:"result-header"},V.default.createElement("span",{className:`result-status ${l.success?"status-success":"status-error"}`},"\u23BF Memo ",l.success?"saved":"failed",": ",l.key),l.success&&l.savedChars!==void 0&&V.default.createElement("span",{className:"result-meta"},"(",l.savedChars," chars)")),!l.success&&l.error&&V.default.createElement("div",{className:"memo-error"},l.error))}case"read":{let{note:l}=e;return l?V.default.createElement(V.default.Fragment,null,V.default.createElement("div",{className:"result-header"},V.default.createElement("span",{className:"result-status status-success"},"\u23BF Memo read: ",l.key),V.default.createElement("span",{className:"result-meta"},l.summary)),V.default.createElement("div",{className:"memo-content"},l.content)):V.default.createElement("div",{className:"result-header"},V.default.createElement("span",{className:"result-status status-warn"},"\u23BF Memo not found"))}case"list":{let{notes:l}=e;return V.default.createElement(V.default.Fragment,null,V.default.createElement("div",{className:"result-header"},V.default.createElement("span",{className:"result-status status-info"},"\u23BF Memo list (",l.length," memos)")),l.length>0&&V.default.createElement("table",{className:"memo-table"},V.default.createElement("thead",null,V.default.createElement("tr",null,V.default.createElement("th",null,"#"),V.default.createElement("th",null,"Key"),V.default.createElement("th",null,"Summary"),V.default.createElement("th",null,"Updated"))),V.default.createElement("tbody",null,l.map((n,a)=>V.default.createElement("tr",{key:n.key},V.default.createElement("td",null,a+1),V.default.createElement("td",{className:"memo-key"},n.key),V.default.createElement("td",null,n.summary),V.default.createElement("td",{className:"memo-date"},n.updatedAt))))))}case"delete":{let{success:l,key:n}=e;return V.default.createElement("div",{className:"result-header"},V.default.createElement("span",{className:`result-status ${l?"status-success":"status-warn"}`},"\u23BF Memo ",l?"deleted":"not found",": ",n))}default:return null}})())}function ey({message:e}){let{toolName:t,toolData:l,isError:n,isRemote:a}=e.metadata||{},[s,i]=(0,H.useState)(!1),u=e.content,o=u.length>200,f=s||!o?u:u.substring(0,200)+"... (click to expand)",c=(0,H.useMemo)(()=>{try{return J.parse(f)}catch{return f}},[f]);if(n||!l)return H.default.createElement("div",{className:`message-item message-tool-result ${n?"error":""}`},H.default.createElement("div",{className:"result-content markdown-body",onClick:()=>o&&i(!s),style:{cursor:o?"pointer":"default"},dangerouslySetInnerHTML:{__html:c}}));let m=l;return m?.type==="mcp"?H.default.createElement("div",{className:`message-item message-tool-result${a?" remote":""}`},H.default.createElement(Mv,{data:m})):H.default.createElement("div",{className:`message-item message-tool-result${a?" remote":""}`},(()=>{switch(t){case"Read":return H.default.createElement(bv,{data:m});case"Edit":return H.default.createElement(Sv,{data:m});case"Write":return H.default.createElement(Nv,{data:m});case"Bash":return H.default.createElement(Tv,{data:m});case"Grep":return H.default.createElement(kv,{data:m});case"Glob":return H.default.createElement(xv,{data:m});case"Agent":return H.default.createElement(Ev,{data:m});case"LSP":return H.default.createElement(Av,{data:m});case"Cwd":return H.default.createElement(_v,{data:m});case"TaskOutput":return H.default.createElement(Cv,{data:m});case"PowerShell":return H.default.createElement(zv,{data:m});case"ToolLoader":return H.default.createElement(Ov,{data:m});case"ToolUnLoader":return H.default.createElement(Uv,{data:m});case"NotebookEdit":return H.default.createElement(Dv,{data:m});case"WebSearch":return H.default.createElement(wv,{data:m});case"WebFetch":return H.default.createElement(qv,{data:m});case"TaskStop":return H.default.createElement(Hv,{data:m});case"TodoWrite":return H.default.createElement(Bv,{data:m});case"Think":return H.default.createElement(Lv,{data:m});case"AskUserQuestion":return H.default.createElement(jv,{data:m});case"EnterPlanMode":return H.default.createElement(Gv,{data:m});case"ExitPlanMode":return H.default.createElement(Yv,{data:m});case"EnterWorktreeTool":return H.default.createElement(Qv,{data:m});case"ExitWorktreeTool":return H.default.createElement(Xv,{data:m});case"SlashCommand":return H.default.createElement(Zv,{data:m});case"Skill":return H.default.createElement(Vv,{data:m});case"CronCreate":return H.default.createElement(Kv,{data:m});case"CronDelete":return H.default.createElement(Jv,{data:m});case"CronList":return H.default.createElement($v,{data:m});case"TeamCreate":return H.default.createElement(Wv,{data:m});case"TeamDelete":return H.default.createElement(Pv,{data:m});case"SendMessage":return H.default.createElement(Fv,{data:m});case"MessageArchiving":return H.default.createElement(Rv,{data:m});case"Memo":return H.default.createElement(Iv,{data:m});default:return H.default.createElement("pre",{className:"tool-result-text"},e.content)}})())}J.setOptions({breaks:!0,gfm:!0});function ty({message:e,pendingUserResponses:t,sendUserResponse:l}){switch(e.messageType){case"user_text":return ge.default.createElement(TS,{content:e.content});case"assistant_text":return ge.default.createElement(kS,{content:e.content,metadata:e.metadata});case"assistant_thinking":return ge.default.createElement(xS,{content:e.content});case"tool_use":return ge.default.createElement(yv,{message:e,pendingUserResponses:t,sendUserResponse:l});case"tool_result":return ge.default.createElement(ey,{message:e});case"progress":return ge.default.createElement(ES,{content:e.content});case"error":return ge.default.createElement(AS,{content:e.content});default:return null}}function oo(e){return(0,ge.useMemo)(()=>{try{return J.parse(e)}catch{return e}},[e])}function TS({content:e}){let t=oo(e);return ge.default.createElement("div",{className:"message-item message-user"},ge.default.createElement("div",{className:"message-content markdown-body",dangerouslySetInnerHTML:{__html:t}}))}function kS({content:e,metadata:t}){let l=oo(e);return ge.default.createElement("div",{className:"message-item message-assistant"},ge.default.createElement("div",{className:"message-content markdown-body",dangerouslySetInnerHTML:{__html:l}}))}function xS({content:e}){let[t,l]=(0,ge.useState)(!1),n=oo(e);return ge.default.createElement("div",{className:"message-item message-thinking"},ge.default.createElement("details",{open:t,onToggle:a=>l(a.target.open)},ge.default.createElement("summary",null,"Thinking..."),t&&ge.default.createElement("div",{className:"message-content markdown-body",style:{marginTop:4},dangerouslySetInnerHTML:{__html:n}})))}function ES({content:e}){let t=oo(e);return ge.default.createElement("div",{className:"message-item message-progress"},ge.default.createElement("div",{className:"markdown-body",dangerouslySetInnerHTML:{__html:t}}))}function AS({content:e}){return ge.default.createElement("div",{className:"message-item message-error"},e)}var _S=new Set(["TaskCreate","TaskGet","TaskList","TaskUpdate","TodoWrite","TeamCreate"]),MS=new Set(["ToolLoader","ToolUnLoader","MessageArchiving"]);function CS(e,t){return!!(_S.has(e)||t!=="DAHAWA_DEBUG"&&MS.has(e))}var ly="*-* ",ny="<system-notification>";function uy(e,t={}){let{userType:l}=t,n=[],a=0,s=new Map;for(let i of e)if(i.type==="user"&&i.message?.content){let u=i.message.content;if(Array.isArray(u))for(let o of u)o.type==="tool_result"&&o.tool_use_id&&s.set(o.tool_use_id,o)}for(let i of e)if(!(!i||!i.type))switch(i.type){case"user":zS(i,s,n,()=>`msg_${a++}`);break;case"assistant":OS(i,s,e,n,()=>`msg_${a++}`,l);break;case"progress":US(i,n,()=>`msg_${a++}`);break}return n}function zS(e,t,l,n){let a=e.message?.content;if(a){if(typeof a=="string"){if(!a.trim())return;let s=a.trim();if(s.startsWith(ly)||s.startsWith(ny)||/<system-reminder>.*?<\/system-reminder>/s.test(s))return;let i=ay(s);l.push({id:n(),messageType:"user_text",content:i??s});return}if(Array.isArray(a)){for(let s of a)if(s.type==="text"){if(!s.text||s.text.trim()==="")continue;let i=s.text.trim();if(i.startsWith(ly)||i.startsWith(ny)||/<system-reminder>.*?<\/system-reminder>/s.test(i))continue;let u=ay(s.text);l.push({id:n(),messageType:"user_text",content:u??s.text})}}}}function ay(e){let t=sy(e,"command-message");if(!t)return null;let l=sy(e,"command-args");return`> /${t}${l?" "+l:""}`}function sy(e,t){if(!e.trim()||!t.trim())return null;let l=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return new RegExp(`<${l}(?:\\s+[^>]*)?>([\\s\\S]*?)<\\/${l}>`,"i").exec(e)?.[1]??null}function OS(e,t,l,n,a,s){let i=e.message?.content;if(!(!i||!Array.isArray(i)))for(let u of i)switch(u.type){case"text":if(u.text&&u.text.trim()){if(u.text.trim()==="No response requested.")break;n.push({id:a(),messageType:"assistant_text",content:u.text,metadata:{costUSD:e.costUSD,durationMs:e.durationMs}})}break;case"thinking":u.thinking&&u.thinking.trim()&&n.push({id:a(),messageType:"assistant_thinking",content:u.thinking,metadata:{isCollapsed:!0}});break;case"tool_use":{let o=u.id,f=u.name||"unknown_tool";if(CS(f,s))break;let{name:c,isRemote:m,displayName:r}=DS(f),d=r??c,h=o?t.has(o):!1;if(n.push({id:a(),messageType:"tool_use",content:c,metadata:{toolName:c,toolDisplayName:d,toolInput:BS(u.input),toolUseId:o,toolInputRaw:u.input,isRemote:m,isInProgress:!h}}),o&&t.has(o)){let y=t.get(o),E=HS(y),p=qS(l,o),v=f.startsWith("mcp_")&&!f.startsWith("mcp_hands_")?wS(y,d):p;n.push({id:a(),messageType:"tool_result",content:E,metadata:{toolName:c,toolDisplayName:d,toolUseId:o,isError:y.is_error||!1,toolData:v,isRemote:m}})}break}}}function US(e,t,l){let n=e.content?.message?.content;if(!(!n||!Array.isArray(n)))for(let a of n)a.type==="text"&&a.text&&a.text.trim()&&t.push({id:l(),messageType:"progress",content:a.text})}var iy={mcp_hands_Read:"Read",mcp_hands_Edit:"Edit",mcp_hands_Write:"Write",mcp_hands_Bash:"Bash",mcp_hands_Grep:"Grep",mcp_hands_Glob:"Glob",mcp_hands_LSP:"LSP",mcp_hands_NotebookEdit:"NotebookEdit",mcp_hands_TaskOutput:"TaskOutput",mcp_hands_TaskStop:"TaskStop",mcp_hands_PowerShell:"PowerShell"};function DS(e){if(iy[e]){let t=iy[e];return{name:t,isRemote:!0,displayName:`\u2601 ${t}`}}if(e.startsWith("mcp_hands_")){let t=e.slice(10);return{name:t,isRemote:!0,displayName:`\u2601 ${t}`}}if(e.startsWith("mcp_")){let t=e.slice(4),l=t.indexOf("_");if(l!==-1){let n=t.slice(0,l),a=t.slice(l+1);return{name:e,isRemote:!1,displayName:`${n}:${a}`}}}return{name:e,isRemote:!1}}function wS(e,t){return e?{type:"mcp",displayName:t,content:e.content??"",isError:e.is_error||!1}:{type:"mcp",displayName:t,content:"",isError:!1}}function qS(e,t){for(let l of e){if(!l.toolUseResult?.data)continue;let n=l.message?.content;if(!Array.isArray(n))continue;if(n.some(s=>s.type==="tool_result"&&s.tool_use_id===t))return l.toolUseResult.data}}function HS(e){if(!e)return"";let t=e.content;return t?typeof t=="string"?t:Array.isArray(t)?t.filter(l=>l.type==="text").map(l=>l.text||"").join(`
|
|
88
|
-
`):JSON.stringify(t):e.is_error?"[Error]":"[Empty result]"}function BS(e){if(!e)return"";let t=typeof e=="string"?e:JSON.stringify(e,null,2);return t.length>800?t.substring(0,800)+"...":t}function oy({rawMessages:e,autoScroll:t,userType:l,pendingUserResponses:n,sendUserResponse:a}){let s=(0,zt.useRef)(null),i=(0,zt.useRef)(!1),u=(0,zt.useMemo)(()=>uy(e,{userType:l}),[e,l]);(0,zt.useEffect)(()=>{t&&s.current&&!i.current&&(s.current.scrollTop=s.current.scrollHeight)},[u,t]);let o=()=>{if(!s.current)return;let{scrollTop:f,scrollHeight:c,clientHeight:m}=s.current,r=c-f-m<50;i.current=!r};return u.length===0?zt.default.createElement("div",{className:"message-list"},zt.default.createElement("div",{className:"empty-state"},"Waiting for messages...")):zt.default.createElement("div",{className:"message-list",ref:s,onScroll:o},u.map(f=>zt.default.createElement(ty,{key:f.id,message:f,pendingUserResponses:n,sendUserResponse:a})))}var Ze=x(k(),1);function ry({activeAgent:e,isLoading:t=!1,promptStatus:l,onSubmit:n,onInterrupt:a}){let[s,i]=(0,Ze.useState)(""),u=(0,Ze.useRef)(null),o=e==="main",f=o&&s.trim()!=="",c=o&&t,m=(0,Ze.useCallback)(()=>{let E=u.current;
|
|
88
|
+
`):JSON.stringify(t):e.is_error?"[Error]":"[Empty result]"}function BS(e){if(!e)return"";let t=typeof e=="string"?e:JSON.stringify(e,null,2);return t.length>800?t.substring(0,800)+"...":t}function oy({rawMessages:e,autoScroll:t,userType:l,pendingUserResponses:n,sendUserResponse:a}){let s=(0,zt.useRef)(null),i=(0,zt.useRef)(!1),u=(0,zt.useMemo)(()=>uy(e,{userType:l}),[e,l]);(0,zt.useEffect)(()=>{t&&s.current&&!i.current&&(s.current.scrollTop=s.current.scrollHeight)},[u,t]);let o=()=>{if(!s.current)return;let{scrollTop:f,scrollHeight:c,clientHeight:m}=s.current,r=c-f-m<50;i.current=!r};return u.length===0?zt.default.createElement("div",{className:"message-list"},zt.default.createElement("div",{className:"empty-state"},"Waiting for messages...")):zt.default.createElement("div",{className:"message-list",ref:s,onScroll:o},u.map(f=>zt.default.createElement(ty,{key:f.id,message:f,pendingUserResponses:n,sendUserResponse:a})))}var Ze=x(k(),1);function ry({activeAgent:e,isLoading:t=!1,promptStatus:l,onSubmit:n,onInterrupt:a}){let[s,i]=(0,Ze.useState)(""),u=(0,Ze.useRef)(null),o=e==="main",f=o&&s.trim()!=="",c=o&&t,m=(0,Ze.useCallback)(()=>{let E=u.current;if(!E)return;E.style.height="auto";let p=parseFloat(getComputedStyle(E).minHeight)||0;E.style.height=`${Math.min(Math.max(E.scrollHeight,p),200)}px`},[]);(0,Ze.useEffect)(()=>{m()},[s,m]);let r=E=>{E.key==="Enter"&&!E.shiftKey&&!E.nativeEvent.isComposing&&(E.preventDefault(),f&&(n(s),i("")))},d=()=>{f&&(n(s),i(""))},h=s.startsWith("!")?"bash":s.startsWith("/")?"command":"text",y=l?.status==="received"?"Received":l?.status==="queued"?"Queued":l?.status==="executing"?"Executing...":l?.status==="rejected"?l.message||"Rejected":l?.status==="completed"?"Completed":t&&o?"Agent is busy; prompt will be queued":null;return Ze.default.createElement("div",{className:"prompt-input-bar"},Ze.default.createElement("div",{className:"prompt-input-inner"},Ze.default.createElement("span",{className:`prompt-input-mode ${h}`},h==="bash"?"!":h==="command"?"/":null),Ze.default.createElement("textarea",{ref:u,className:"prompt-input-field",value:s,onChange:E=>i(E.target.value),onKeyDown:r,placeholder:o?t?"Agent is busy; your prompt will be queued...":"Type a prompt and press Enter...":"Switch to Main agent to type a prompt",disabled:!o,rows:3}),c?Ze.default.createElement("button",{className:"prompt-input-interrupt",onClick:a,type:"button"},"Interrupt"):Ze.default.createElement("button",{className:"prompt-input-send",onClick:d,disabled:!f,type:"button"},"Send")),y&&Ze.default.createElement("div",{className:`prompt-input-status ${l?.status}`},y))}var zn=x(k(),1);function cy({status:e,agents:t,messageCount:l,onToggleScroll:n}){let a=t.filter(s=>s.status==="running"||s.status==="started");return zn.default.createElement("div",{className:"status-bar"},zn.default.createElement("div",{className:"status-bar-left"},zn.default.createElement("span",null,"Agents: ",t.length," (",a.length," active)"),zn.default.createElement("span",null,"Messages: ",l)),zn.default.createElement("div",{className:"status-bar-right"},zn.default.createElement("span",null,"WS: ",e)))}var W=x(k(),1);var ht=x(k(),1);function fy(){let[e,t]=(0,ht.useState)(null),[l,n]=(0,ht.useState)(null),[a,s]=(0,ht.useState)(null),[i,u]=(0,ht.useState)(!0),[o,f]=(0,ht.useState)(null),c=(0,ht.useCallback)(async()=>{try{let[h,y,E]=await Promise.all([fetch("/api/settings"),fetch("/api/settings/sources"),fetch("/api/model-config")]);if(!h.ok)throw new Error(`Failed to load settings: ${h.status}`);if(!y.ok)throw new Error(`Failed to load settings sources: ${y.status}`);if(!E.ok)throw new Error(`Failed to load model config: ${E.status}`);let p=await h.json(),g=await y.json(),v=await E.json();t(p),n({user:g.user||{},project:g.project||{}}),s(v),f(null)}catch(h){f(h instanceof Error?h.message:"Failed to load settings")}finally{u(!1)}},[]);(0,ht.useEffect)(()=>{c();let h=()=>{c()};return window.addEventListener("settings:changed",h),()=>{window.removeEventListener("settings:changed",h)}},[c]);let m=(0,ht.useCallback)(async(h,y,E)=>{let p=await fetch(`/api/settings/${h}/${y}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({value:E})});if(!p.ok){let g=await p.json().catch(()=>({error:"Update failed"}));throw new Error(g.error||"Update failed")}await c()},[c]),r=(0,ht.useCallback)(async(h,y)=>{let E=await fetch(`/api/settings/${h}/${y}`,{method:"DELETE"});if(!E.ok){let p=await E.json().catch(()=>({error:"Reset failed"}));throw new Error(p.error||"Reset failed")}await c()},[c]),d=(0,ht.useCallback)(async h=>{let y=await fetch("/api/model-config",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(h)});if(!y.ok){let E=await y.json().catch(()=>({error:"Update model config failed",details:[]})),p=[E.error,...E.details||[]].filter(Boolean).join(`
|
|
89
89
|
`);throw new Error(p||"Update model config failed")}await c()},[c]);return{settings:e,sources:l,modelConfig:a,loading:i,error:o,updateSetting:m,resetSetting:r,updateModelConfig:d,refresh:c}}var se=x(k(),1);var ro=x(k(),1);function co({label:e,value:t,onChange:l}){return ro.default.createElement("div",{className:"setting-row"},ro.default.createElement("span",{className:"setting-label"},e),ro.default.createElement("button",{className:`setting-toggle ${t?"on":"off"}`,onClick:()=>l(!t)},t?"On":"Off"))}var $s=x(k(),1);function dy({label:e,value:t,options:l,onChange:n}){return $s.default.createElement("div",{className:"setting-row"},$s.default.createElement("span",{className:"setting-label"},e),$s.default.createElement("select",{className:"setting-select",value:t,onChange:a=>n(a.target.value)},l.map(a=>$s.default.createElement("option",{key:a,value:a},a))))}var fo=x(k(),1);function mo({label:e,value:t,onChange:l,placeholder:n}){return fo.default.createElement("div",{className:"setting-row"},fo.default.createElement("span",{className:"setting-label"},e),fo.default.createElement("input",{className:"setting-input",type:"text",value:t,placeholder:n,onChange:a=>l(a.target.value)}))}var po=x(k(),1);function go({label:e,value:t,onChange:l,min:n,max:a}){return po.default.createElement("div",{className:"setting-row"},po.default.createElement("span",{className:"setting-label"},e),po.default.createElement("input",{className:"setting-input",type:"number",value:t,min:n,max:a,onChange:s=>l(parseInt(s.target.value,10)||0)}))}var On=x(k(),1);function Un({label:e,value:t,fields:l,onChange:n}){let a=t||{},s=(i,u)=>{n({...a,[i]:u})};return On.default.createElement("div",{className:"setting-object"},On.default.createElement("h4",{className:"setting-object-title"},e),On.default.createElement("div",{className:"setting-object-fields"},l.map(i=>{let u=a[i.key];switch(i.type){case"boolean":return On.default.createElement(co,{key:i.key,label:i.label,value:!!u,onChange:o=>s(i.key,o)});case"number":return On.default.createElement(go,{key:i.key,label:i.label,value:typeof u=="number"?u:0,min:i.min,max:i.max,onChange:o=>s(i.key,o)});case"string":return On.default.createElement(mo,{key:i.key,label:i.label,value:typeof u=="string"?u:"",placeholder:i.placeholder,onChange:o=>s(i.key,o)});default:return null}})))}var Pt=x(k(),1);function my(e){return JSON.stringify(e??{},null,2)}function ho({label:e,value:t,onChange:l,rows:n=8,className:a}){let[s,i]=(0,Pt.useState)(()=>my(t)),[u,o]=(0,Pt.useState)(null);(0,Pt.useEffect)(()=>{i(my(t)),o(null)},[t]);let f=()=>{try{let c=JSON.parse(s);o(null),l(c)}catch(c){o(c instanceof Error?c.message:"Invalid JSON")}};return Pt.default.createElement("div",{className:`setting-json-editor ${a||""}`},Pt.default.createElement("label",{className:"setting-json-label"},e),Pt.default.createElement("textarea",{className:"setting-json-textarea",value:s,onChange:c=>i(c.target.value),onBlur:f,rows:n,spellCheck:!1}),u&&Pt.default.createElement("div",{className:"setting-json-error"},u))}var at=x(k(),1);function py(e){return Object.entries(e??{}).map(([t,l])=>({key:t,value:String(l??"")}))}function gy(e){let t={};for(let l of e){let n=l.key.trim();n&&(t[n]=l.value)}return t}function LS(e,t){let l=Object.keys(e),n=Object.keys(t);return l.length!==n.length?!1:l.every(a=>e[a]===t[a])}function hy({label:e,value:t,onChange:l}){let[n,a]=(0,at.useState)(()=>py(t));(0,at.useEffect)(()=>{a(py(t))},[t]);let s=gy(n),i=m=>{let r=gy(m);LS(s,r)||l(r),a(m)},u=(m,r)=>{let d=n.map((h,y)=>y===m?{...h,key:r}:h);i(d)},o=(m,r)=>{let d=n.map((h,y)=>y===m?{...h,value:r}:h);i(d)},f=()=>{a([...n,{key:"",value:""}])},c=m=>{let r=n.filter((d,h)=>h!==m);i(r)};return at.default.createElement("div",{className:"setting-key-value"},at.default.createElement("h4",{className:"setting-key-value-title"},e),at.default.createElement("div",{className:"setting-key-value-list"},n.map((m,r)=>at.default.createElement("div",{key:r,className:"setting-key-value-row"},at.default.createElement("input",{className:"setting-input setting-key-value-key",type:"text",value:m.key,placeholder:"KEY",onChange:d=>u(r,d.target.value)}),at.default.createElement("span",{className:"setting-key-value-separator"},"="),at.default.createElement("input",{className:"setting-input setting-key-value-value",type:"text",value:m.value,placeholder:"value",onChange:d=>o(r,d.target.value)}),at.default.createElement("button",{className:"setting-key-value-remove",onClick:()=>c(r),title:"Remove"},"\xD7")))),at.default.createElement("button",{className:"setting-key-value-add",onClick:f},"+ Add"))}var z=x(k(),1);function nn(e){return JSON.parse(JSON.stringify(e))}function vy(e){return!e||typeof e!="object"||Array.isArray(e)?{sources:{},routing:{}}:{sources:typeof e.sources=="object"&&!Array.isArray(e.sources)?e.sources:{},routing:typeof e.routing=="object"&&!Array.isArray(e.routing)?e.routing:{}}}function yy(e){return Array.isArray(e)?e.join(", "):""}function jS(e){return e.split(",").map(t=>t.trim()).filter(Boolean)}var GS=["anthropic","openai","openai-responses","gemini"];function za({label:e,children:t}){return z.default.createElement("div",{className:"model-config-field"},z.default.createElement("label",{className:"model-config-field-label"},e),z.default.createElement("div",{className:"model-config-field-input"},t))}function Nf({label:e,value:t,onChange:l,placeholder:n}){return z.default.createElement(za,{label:e},z.default.createElement("input",{className:"model-config-input",type:"text",value:t,placeholder:n,onChange:a=>l(a.target.value)}))}function YS({models:e,onChange:t}){let[l,n]=(0,z.useState)(yy(e));return(0,z.useEffect)(()=>{n(yy(e))},[e]),z.default.createElement(za,{label:"Models (comma separated)"},z.default.createElement("input",{className:"model-config-input",type:"text",value:l,placeholder:"model-a, model-b",onChange:a=>n(a.target.value),onBlur:a=>t(jS(a.target.value))}))}function QS({label:e,value:t,onChange:l,min:n}){return z.default.createElement(za,{label:e},z.default.createElement("input",{className:"model-config-input",type:"number",value:t,min:n,onChange:a=>l(parseInt(a.target.value,10)||0)}))}function by({value:e,onChange:t}){let[l,n]=(0,z.useState)("form"),a=vy(e),s=(r,d,h)=>{let y=nn(a);y.sources[r]||(y.sources[r]={base_url:"",auth_token:"",api_type:"anthropic",models:[]}),y.sources[r][d]=h,t(y)},i=()=>{let r=nn(a),d=1;for(;r.sources[`source${d}`];)d++;r.sources[`source${d}`]={base_url:"",auth_token:"",api_type:"anthropic",models:[]},t(r)},u=r=>{let d=nn(a);delete d.sources[r];for(let h of Object.keys(d.routing)){let y=h;d.routing[y]=(d.routing[y]||[]).filter(E=>E.source!==r)}t(d)},o=(r,d,h,y)=>{let E=nn(a);E.routing[r]||(E.routing[r]=[]);let p=E.routing[r];p[d]||(p[d]={source:"",model:""}),p[d][h]=y,t(E)},f=r=>{let d=nn(a);d.routing[r]||(d.routing[r]=[]),d.routing[r].push({source:"",model:"",weight:100}),t(d)},c=(r,d)=>{let h=nn(a);h.routing[r]&&h.routing[r].splice(d,1),t(h)};return z.default.createElement("div",{className:"model-config-setting"},z.default.createElement("div",{className:"model-config-tabs"},z.default.createElement("button",{className:`model-config-tab ${l==="form"?"active":""}`,onClick:()=>n("form")},"Form"),z.default.createElement("button",{className:`model-config-tab ${l==="json"?"active":""}`,onClick:()=>n("json")},"JSON")),l==="form"?z.default.createElement("div",{className:"model-config-form"},z.default.createElement("div",{className:"model-config-section"},z.default.createElement("h4",{className:"model-config-section-title"},"Sources"),Object.keys(a.sources).length===0&&z.default.createElement("div",{className:"model-config-empty"},"No sources configured"),Object.entries(a.sources).map(([r,d])=>z.default.createElement("div",{key:r,className:"model-config-card"},z.default.createElement("div",{className:"model-config-card-header"},z.default.createElement(Nf,{label:"Source Name",value:r,onChange:h=>{if(h===r||!h.trim())return;let y=nn(a);y.sources[h]=y.sources[r],delete y.sources[r];for(let E of Object.keys(y.routing)){let p=E;y.routing[p]=(y.routing[p]||[]).map(g=>g.source===r?{...g,source:h}:g)}t(y)}}),z.default.createElement("button",{className:"model-config-remove-button",onClick:()=>u(r)},"Remove")),z.default.createElement(Nf,{label:"Base URL",value:d.base_url||"",onChange:h=>s(r,"base_url",h),placeholder:"https://api.example.com"}),z.default.createElement(Nf,{label:"Auth Token",value:d.auth_token||"",onChange:h=>s(r,"auth_token",h),placeholder:"sk-..."}),z.default.createElement(za,{label:"API Type"},z.default.createElement("select",{className:"model-config-select",value:d.api_type||"anthropic",onChange:h=>s(r,"api_type",h.target.value)},GS.map(h=>z.default.createElement("option",{key:h,value:h},h)))),z.default.createElement(YS,{models:d.models,onChange:h=>s(r,"models",h)}))),z.default.createElement("button",{className:"model-config-add-button",onClick:i},"Add Source")),z.default.createElement("div",{className:"model-config-section"},z.default.createElement("h4",{className:"model-config-section-title"},"Routing"),["MODEL","SMALL_FAST_MODEL"].map(r=>z.default.createElement("div",{key:r,className:"model-config-routing-group"},z.default.createElement("h5",{className:"model-config-routing-type"},r),(a.routing[r]||[]).length===0&&z.default.createElement("div",{className:"model-config-empty"},"No routing items"),(a.routing[r]||[]).map((d,h)=>z.default.createElement("div",{key:h,className:"model-config-card"},z.default.createElement("div",{className:"model-config-card-row"},z.default.createElement(za,{label:"Source"},z.default.createElement("select",{className:"model-config-select",value:d.source||"",onChange:y=>{let E=y.target.value,p=nn(a);p.routing[r]||(p.routing[r]=[]);let g=p.routing[r];if(!g[h])g[h]={source:E,model:""};else{g[h].source=E;let v=p.sources[E]?.models||[];v.length>0&&!v.includes(g[h].model)?g[h].model=v[0]:v.length===0&&(g[h].model="")}t(p)}},z.default.createElement("option",{value:""},"Select source"),Object.keys(a.sources).map(y=>z.default.createElement("option",{key:y,value:y},y)))),z.default.createElement(za,{label:"Model"},z.default.createElement("select",{className:"model-config-select",value:d.model||"",onChange:y=>o(r,h,"model",y.target.value),disabled:!d.source||!a.sources[d.source]?.models?.length},z.default.createElement("option",{value:""},d.source?a.sources[d.source]?.models?.length?"Select model":"No models available":"Select source first"),(a.sources[d.source]?.models||[]).map(y=>z.default.createElement("option",{key:y,value:y},y)))),z.default.createElement(QS,{label:"Weight",value:typeof d.weight=="number"?d.weight:100,min:0,onChange:y=>o(r,h,"weight",y)}),z.default.createElement("button",{className:"model-config-remove-button",onClick:()=>c(r,h)},"Remove")))),z.default.createElement("button",{className:"model-config-add-button",onClick:()=>f(r)},"Add ",r," Route"))))):z.default.createElement("div",{className:"model-config-json-wrapper"},z.default.createElement(ho,{label:"Model Config (config.json)",value:a,onChange:r=>t(vy(r)),className:"model-config-json-editor"})))}var C=x(k(),1);var De=x(k(),1);async function Dn(e,t){let l=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}),n=await l.json().catch(()=>({error:"Request failed"}));if(!l.ok)throw new Error(n.error||`Request failed: ${l.status}`);return n}async function XS(e){let t=await fetch(e,{method:"DELETE"}),l=await t.json().catch(()=>({error:"Request failed"}));if(!t.ok)throw new Error(l.error||`Request failed: ${t.status}`);return l}function Sy(){let[e,t]=(0,De.useState)([]),[l,n]=(0,De.useState)([]),[a,s]=(0,De.useState)([]),[i,u]=(0,De.useState)(!0),[o,f]=(0,De.useState)(null),c=(0,De.useCallback)(async()=>{try{u(!0);let[v,b,T]=await Promise.all([fetch("/api/marketplaces"),fetch("/api/plugins"),fetch("/api/plugins/available")]);if(!v.ok)throw new Error(`Failed to load marketplaces: ${v.status}`);if(!b.ok)throw new Error(`Failed to load plugins: ${b.status}`);if(!T.ok)throw new Error(`Failed to load available plugins: ${T.status}`);let A=await v.json(),N=await b.json(),M=await T.json();t(A.marketplaces||[]),n(N.plugins||[]),s(M.available||[]),f(null)}catch(v){f(v instanceof Error?v.message:"Failed to load plugins")}finally{u(!1)}},[]);(0,De.useEffect)(()=>{c()},[c]);let m=(0,De.useCallback)(async v=>{let b=await Dn("/api/marketplaces",{source:v});return await c(),b.name},[c]),r=(0,De.useCallback)(async v=>{await XS(`/api/marketplaces/${encodeURIComponent(v)}`),await c()},[c]),d=(0,De.useCallback)(async v=>{let b=await Dn(`/api/marketplaces/${encodeURIComponent(v)}/update`,{});return await c(),{updated:b.updated||[],errors:b.errors||[]}},[c]),h=(0,De.useCallback)(async v=>{let b=await Dn("/api/plugins/install",{spec:v});return await c(),b.id},[c]),y=(0,De.useCallback)(async v=>{await Dn("/api/plugins/uninstall",{spec:v}),await c()},[c]),E=(0,De.useCallback)(async v=>{let b=await Dn("/api/plugins/update",{spec:v});return await c(),{updated:b.updated||[],errors:b.errors||[]}},[c]),p=(0,De.useCallback)(async v=>{await Dn("/api/plugins/enable",{spec:v}),await c()},[c]),g=(0,De.useCallback)(async v=>{await Dn("/api/plugins/disable",{spec:v}),await c()},[c]);return{marketplaces:e,plugins:l,available:a,loading:i,error:o,refresh:c,addMarketplace:m,removeMarketplace:r,updateMarketplace:d,installPlugin:h,uninstallPlugin:y,updatePlugin:E,enablePlugin:p,disablePlugin:g}}function Ny({value:e,onChange:t}){let{marketplaces:l,plugins:n,available:a,loading:s,error:i,addMarketplace:u,removeMarketplace:o,updateMarketplace:f,installPlugin:c,uninstallPlugin:m,updatePlugin:r,enablePlugin:d,disablePlugin:h}=Sy(),[y,E]=(0,C.useState)(""),[p,g]=(0,C.useState)(""),[v,b]=(0,C.useState)(null),[T,A]=(0,C.useState)(null),N=_=>{b(_),A(null)},M=_=>{A(_),b(null)},D=async()=>{if(y.trim())try{let _=await u(y.trim());E(""),M(_?`Added marketplace "${_}"`:"Marketplace added")}catch(_){N(_ instanceof Error?_.message:"Failed to add marketplace")}},q=async _=>{try{await o(_),M(`Removed marketplace "${_}"`)}catch(K){N(K instanceof Error?K.message:"Failed to remove marketplace")}},je=async _=>{try{let K=await f(_);K.errors.length>0?N(K.errors.join(`
|
|
90
90
|
`)):M(`Updated marketplace "${_}"`)}catch(K){N(K instanceof Error?K.message:"Failed to update marketplace")}},me=async _=>{let K=_??p;if(K.trim())try{let Ft=await c(K.trim());_||g(""),M(Ft?`Installed plugin "${Ft}"`:"Plugin installed")}catch(Ft){N(Ft instanceof Error?Ft.message:"Failed to install plugin")}},O=async _=>{try{await m(_),M(`Uninstalled plugin "${_}"`)}catch(K){N(K instanceof Error?K.message:"Failed to uninstall plugin")}},L=async _=>{try{let K=await r(_);K.errors.length>0?N(K.errors.join(`
|
|
91
91
|
`)):M(`Updated ${K.updated.length} plugin(s)`)}catch(K){N(K instanceof Error?K.message:"Failed to update plugin")}};return C.default.createElement("div",{className:"plugins-setting"},s&&C.default.createElement("div",{className:"setting-loading"},"Loading plugins..."),i&&C.default.createElement("div",{className:"setting-error"},i),v&&C.default.createElement("div",{className:"setting-error"},v),T&&C.default.createElement("div",{className:"setting-success"},T),C.default.createElement("div",{className:"plugins-section"},C.default.createElement(Un,{label:"Plugin Settings",value:e||{},fields:[{key:"pluginClaudeCompat",label:"Claude Code plugin compatibility",type:"boolean"},{key:"pluginAutoUpdate",label:"Auto update plugins",type:"boolean"},{key:"pluginAutoUpdateInterval",label:"Auto update interval (minutes)",type:"number",min:1},{key:"pluginSandboxHooks",label:"Sandbox plugin hooks",type:"boolean"}],onChange:t})),C.default.createElement("div",{className:"plugins-section"},C.default.createElement("h4",{className:"setting-section-subtitle"},"Marketplaces"),C.default.createElement("div",{className:"plugin-input-row"},C.default.createElement("input",{className:"setting-input plugin-input",type:"text",value:y,placeholder:"marketplace source (path, URL, or owner/repo)",onChange:_=>E(_.target.value),onKeyDown:_=>{_.key==="Enter"&&D()}})),C.default.createElement("div",{className:"plugin-actions-row"},C.default.createElement("button",{className:"setting-button-small",onClick:D,disabled:!y.trim()},"Add Marketplace")),C.default.createElement("div",{className:"plugins-list"},l.length===0&&!s&&C.default.createElement("div",{className:"setting-empty"},"No marketplaces registered."),l.map(_=>C.default.createElement("div",{key:_.name,className:"plugin-row"},C.default.createElement("div",{className:"plugin-info"},C.default.createElement("div",{className:"plugin-name"},_.name),C.default.createElement("div",{className:"plugin-meta"},_.type," \u2014 ",_.source)),C.default.createElement("div",{className:"plugin-actions"},C.default.createElement("button",{className:"setting-button-small",onClick:()=>je(_.name)},"Update"),C.default.createElement("button",{className:"setting-button-small",onClick:()=>q(_.name)},"Remove")))))),C.default.createElement("div",{className:"plugins-section"},C.default.createElement("h4",{className:"setting-section-subtitle"},"Available Plugins"),C.default.createElement("div",{className:"plugins-list"},a.length===0&&!s&&C.default.createElement("div",{className:"setting-empty"},"No available plugins."),a.map(_=>C.default.createElement("div",{key:`${_.plugin}@${_.marketplace}`,className:"plugin-row"},C.default.createElement("div",{className:"plugin-info"},C.default.createElement("div",{className:"plugin-name"},_.plugin),C.default.createElement("div",{className:"plugin-meta"},_.marketplace," \u2014 ",_.description||"No description")),C.default.createElement("div",{className:"plugin-actions"},C.default.createElement("button",{className:"setting-button-small",onClick:()=>me(`${_.plugin}@${_.marketplace}`)},"Install")))))),C.default.createElement("div",{className:"plugins-section"},C.default.createElement("h4",{className:"setting-section-subtitle"},"Installed Plugins"),C.default.createElement("div",{className:"plugin-input-row"},C.default.createElement("input",{className:"setting-input plugin-input",type:"text",value:p,placeholder:"plugin[@marketplace]",onChange:_=>g(_.target.value),onKeyDown:_=>{_.key==="Enter"&&me()}})),C.default.createElement("div",{className:"plugin-actions-row"},C.default.createElement("button",{className:"setting-button-small",onClick:me,disabled:!p.trim()},"Install"),C.default.createElement("button",{className:"setting-button-small",onClick:()=>L()},"Update All")),C.default.createElement("div",{className:"plugins-list"},n.length===0&&!s&&C.default.createElement("div",{className:"setting-empty"},"No plugins installed."),n.map(_=>C.default.createElement("div",{key:_.id,className:"plugin-row"},C.default.createElement("div",{className:"plugin-info"},C.default.createElement("div",{className:"plugin-name"},_.plugin),C.default.createElement("div",{className:"plugin-meta"},_.marketplace," \u2014 ",_.version," \u2014 ",_.enabled?"enabled":"disabled")),C.default.createElement("div",{className:"plugin-actions"},_.enabled?C.default.createElement("button",{className:"setting-button-small",onClick:()=>h(_.id)},"Disable"):C.default.createElement("button",{className:"setting-button-small",onClick:()=>d(_.id)},"Enable"),C.default.createElement("button",{className:"setting-button-small",onClick:()=>L(_.id)},"Update"),C.default.createElement("button",{className:"setting-button-small",onClick:()=>O(_.id)},"Uninstall")))))))}function Ty(e){return e===void 0?"undefined":e===null?"null":typeof e=="boolean"?e?"true":"false":typeof e=="string"?e:JSON.stringify(e,null,2)}function ky({label:e,keys:t,settings:l,modelConfig:n,onUpdate:a,onModelConfigUpdate:s}){let[i,u]=(0,se.useState)(new Set),o=c=>{u(m=>{let r=new Set(m);return r.has(c)?r.delete(c):r.add(c),r})},f=c=>{let m=l[c];switch(c){case"proxy":case"lazyTool":case"disableSuggestion":case"memo":case"messageArchiving":case"archiveToolUseInputs":return se.default.createElement(co,{label:c==="archiveToolUseInputs"?"Archive Tool Use Inputs":c,value:!!m,onChange:r=>a(c,r)});case"plugins":return se.default.createElement(Ny,{value:m||{},onChange:r=>a(c,r)});case"thinking":return se.default.createElement(dy,{label:c,value:m||"medium",options:["off","low","medium","high"],onChange:r=>a(c,r)});case"language":case"planDirectory":return se.default.createElement(mo,{label:c,value:m||"",placeholder:c==="planDirectory"?"/path/to/plan/directory":"auto",onChange:r=>a(c,r)});case"agentDepth":return se.default.createElement(go,{label:c,value:typeof m=="number"?m:1,min:1,max:5,onChange:r=>a(c,r)});case"webServer":return se.default.createElement(Un,{label:"Web Server",value:m||{},fields:[{key:"enabled",label:"Enabled",type:"boolean"},{key:"port",label:"Port",type:"number",min:1,max:65535},{key:"host",label:"Host",type:"string"}],onChange:r=>a(c,r)});case"autoMode":return se.default.createElement(Un,{label:"Auto Mode",value:m||{},fields:[{key:"enabled",label:"Enabled",type:"boolean"},{key:"model",label:"Model",type:"string"},{key:"maxConsecutiveDenials",label:"Max Consecutive Denials",type:"number",min:0},{key:"maxTotalDenials",label:"Max Total Denials",type:"number",min:0}],onChange:r=>a(c,r)});case"autoMemory":return se.default.createElement(Un,{label:"Auto Memory",value:m||{},fields:[{key:"enabled",label:"Enabled",type:"boolean"},{key:"minTokens",label:"Min Tokens",type:"number",min:0},{key:"minTurns",label:"Min Turns",type:"number",min:0},{key:"teamMemoryEnabled",label:"Team Memory Enabled",type:"boolean"}],onChange:r=>a(c,r)});case"autoDream":return se.default.createElement(Un,{label:"Auto Dream",value:m||{},fields:[{key:"enabled",label:"Enabled",type:"boolean"},{key:"minHours",label:"Min Hours",type:"number",min:0},{key:"minSessions",label:"Min Sessions",type:"number",min:0}],onChange:r=>a(c,r)});case"modelConfig":return se.default.createElement(by,{value:n||{sources:{},routing:{}},onChange:r=>s?.(r)});case"sandbox":case"sessionSummary":case"permissions":return se.default.createElement(ho,{label:c,value:m,onChange:r=>a(c,r)});case"env":return se.default.createElement(hy,{label:c,value:m||{},onChange:r=>a(c,r)});default:{let r=m!==null&&typeof m=="object",d=i.has(c);return se.default.createElement(se.default.Fragment,null,se.default.createElement("div",{className:"setting-row"},se.default.createElement("span",{className:"setting-key"},c),r?se.default.createElement("button",{className:"setting-expand-button",onClick:()=>o(c)},d?"Collapse":"Expand"):se.default.createElement("span",{className:"setting-value"},Ty(m))),r&&d&&se.default.createElement("pre",{className:"setting-json"},Ty(m)))}}};return se.default.createElement("div",{className:"setting-section"},se.default.createElement("h3",{className:"setting-section-title"},e),se.default.createElement("div",{className:"setting-list"},t.map(c=>se.default.createElement("div",{key:c,className:"setting-item"},f(c)))))}var xy=[{id:"general",label:"General",keys:["proxy","lazyTool","thinking","language","disableSuggestion","memo","messageArchiving","archiveToolUseInputs","planDirectory","agentDepth"]},{id:"plugins",label:"Plugins",keys:["plugins"]},{id:"webServer",label:"Web Server",keys:["webServer"]},{id:"auto",label:"Auto Mode",keys:["autoMode"]},{id:"memory",label:"Memory",keys:["autoMemory","autoDream"]},{id:"model",label:"Model Config",keys:["modelConfig"]},{id:"advanced",label:"Advanced",keys:["env","permissions","sandbox","sessionSummary"]}];function vo(e){return JSON.parse(JSON.stringify(e))}function Tf(e,t){return e===t?!0:typeof e!=typeof t||e===null||t===null?!1:typeof e=="object"?JSON.stringify(e)===JSON.stringify(t):!1}function Ey(e,t){let l=new Set([...Object.keys(e),...Object.keys(t)]);return Array.from(l).filter(n=>!Tf(e[n],t[n]))}function Ay({onClose:e}){let{settings:t,modelConfig:l,loading:n,error:a,updateSetting:s,updateModelConfig:i,refresh:u}=fy(),[o,f]=(0,W.useState)("general"),[c,m]=(0,W.useState)(null),[r,d]=(0,W.useState)(null),[h,y]=(0,W.useState)(!1),[E,p]=(0,W.useState)(null),[g,v]=(0,W.useState)(!1);(0,W.useEffect)(()=>{t&&c===null&&m(vo(t))},[t,c]),(0,W.useEffect)(()=>{l&&r===null&&d(vo(l))},[l,r]);let b=(me,O)=>{m(L=>L&&{...L,[me]:O}),v(!1)},T=me=>{d(me),v(!1)},A=async()=>{if(!t||!c)return;let me=Ey(t,c),O=l&&r&&!Tf(l,r);if(!(me.length===0&&!O)){y(!0),p(null),v(!1);try{for(let L of me)await s("project",L,c[L]);O&&r&&await i(r),await u(),m(null),d(null),v(!0)}catch(L){p(L instanceof Error?L.message:"Save failed")}finally{y(!1)}}},N=()=>{t&&m(vo(t)),l&&d(vo(l)),p(null),v(!1)};if(n)return W.default.createElement("div",{className:"settings-panel"},W.default.createElement("div",{className:"empty-state"},"Loading settings..."));if(a)return W.default.createElement("div",{className:"settings-panel"},W.default.createElement("div",{className:"settings-error"},W.default.createElement("div",{className:"settings-error-message"},a),W.default.createElement("button",{className:"settings-close-button",onClick:e},"Close")));if(!t||!c||!l||!r)return null;let M=xy.find(me=>me.id===o),D=Ey(t,c),q=l&&r&&!Tf(l,r),je=D.length>0||q;return W.default.createElement("div",{className:"settings-panel"},W.default.createElement("div",{className:"settings-header"},W.default.createElement("h2",{className:"settings-title"},"Settings"),W.default.createElement("div",{className:"settings-header-actions"},je&&W.default.createElement("button",{className:"settings-reset-button",onClick:N,disabled:h},"Reset"),W.default.createElement("button",{className:"settings-save-button",onClick:A,disabled:!je||h},h?"Saving...":"Save"),W.default.createElement("button",{className:"settings-close-button",onClick:e},"Close"))),E&&W.default.createElement("div",{className:"settings-save-error"},E.split(`
|
package/webServer/style.css
CHANGED
|
@@ -1748,7 +1748,7 @@ html, body {
|
|
|
1748
1748
|
|
|
1749
1749
|
.prompt-input-inner {
|
|
1750
1750
|
display: flex;
|
|
1751
|
-
align-items:
|
|
1751
|
+
align-items: center;
|
|
1752
1752
|
gap: 8px;
|
|
1753
1753
|
}
|
|
1754
1754
|
|
|
@@ -1785,7 +1785,7 @@ html, body {
|
|
|
1785
1785
|
line-height: 1.5;
|
|
1786
1786
|
resize: none;
|
|
1787
1787
|
overflow: hidden;
|
|
1788
|
-
min-height:
|
|
1788
|
+
min-height: 72px;
|
|
1789
1789
|
max-height: 200px;
|
|
1790
1790
|
}
|
|
1791
1791
|
|