tide-commander 1.66.2 → 1.68.0
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/assets/{BossLogsModal-0wLAFY8o.js → BossLogsModal-BAAom9o2.js} +1 -1
- package/dist/assets/{BossSpawnModal-KmlORzV6.js → BossSpawnModal-toDplDkF.js} +1 -1
- package/dist/assets/{ControlsModal-D6AByCGe.js → ControlsModal-D03U6gmX.js} +1 -1
- package/dist/assets/{DockerLogsModal-Bp1jShxL.js → DockerLogsModal-BNSsrzrl.js} +1 -1
- package/dist/assets/{EmbeddedEditor-BfzqmAfy.js → EmbeddedEditor-BYhdfoCE.js} +1 -1
- package/dist/assets/{GmailOAuthSetup-BkryQqkx.js → GmailOAuthSetup-myZ2ZrcR.js} +1 -1
- package/dist/assets/{GoogleOAuthSetup-D7GJc_Tp.js → GoogleOAuthSetup-CcXj76ys.js} +1 -1
- package/dist/assets/{IframeModal-TBl1nkE6.js → IframeModal-Dz7GP3Cv.js} +1 -1
- package/dist/assets/{IntegrationsPanel-CrC-7s3C.js → IntegrationsPanel-BcuHSs4k.js} +2 -2
- package/dist/assets/{LogViewerModal-BUx5t5A_.js → LogViewerModal-xUgsZ9ej.js} +1 -1
- package/dist/assets/{MonitoringModal-CdEBDhPs.js → MonitoringModal-C2Y2xSlC.js} +1 -1
- package/dist/assets/{PM2LogsModal-CiW5DbV7.js → PM2LogsModal-_jrHQUo9.js} +1 -1
- package/dist/assets/{RestoreArchivedAreaModal-CCyZo3as.js → RestoreArchivedAreaModal-ChVg52z-.js} +1 -1
- package/dist/assets/{Scene2DCanvas-CARFRp4q.js → Scene2DCanvas-B3W853kK.js} +1 -1
- package/dist/assets/{SceneManager-BWNzLSKo.js → SceneManager-B18djKZB.js} +1 -1
- package/dist/assets/SkillsPanel-H1LGmiQa.js +28 -0
- package/dist/assets/SpawnModal-C6jHLOqe.js +1 -0
- package/dist/assets/{SubordinateAssignmentModal-BAF7cWaT.js → SubordinateAssignmentModal-D7SFd1PQ.js} +1 -1
- package/dist/assets/{TriggerManagerPanel-C9J_KbGA.js → TriggerManagerPanel-BHydg20p.js} +1 -1
- package/dist/assets/{WorkflowEditorPanel-DjTG4lQ1.js → WorkflowEditorPanel-CV2Uyz3q.js} +1 -1
- package/dist/assets/{index-BMiK5Kho.js → index-6yiJ4K77.js} +5 -5
- package/dist/assets/{index-L84OBSoD.js → index-9QRHHhjy.js} +1 -1
- package/dist/assets/index-BUHCV_MS.js +1 -0
- package/dist/assets/index-Bymy4ZcD.js +1 -0
- package/dist/assets/index-C46pFKRu.js +1 -0
- package/dist/assets/{index-CPfO9E2Z.js → index-CSfdM2wC.js} +2 -2
- package/dist/assets/index-CbwV9efF.css +1 -0
- package/dist/assets/index-CvN92QjN.js +1 -0
- package/dist/assets/{index-DTYriM_K.js → index-DGiQZp-V.js} +27 -27
- package/dist/assets/{index-94gPt5fm.js → index-DajufGc7.js} +3 -3
- package/dist/assets/main-Cqo-Awpr.js +200 -0
- package/dist/assets/main-PqjE2LNi.css +1 -0
- package/dist/assets/{web-DpoaoQc0.js → web-C8dPHvwd.js} +1 -1
- package/dist/assets/{web-ojhnBPVV.js → web-Df6f3cdZ.js} +1 -1
- package/dist/index.html +2 -2
- package/dist/locales/en/common.json +4 -2
- package/dist/locales/es/common.json +4 -2
- package/dist/src/packages/server/claude/runner/restart-policy.js +13 -14
- package/dist/src/packages/server/claude/runner.js +96 -22
- package/dist/src/packages/server/codex/backend.js +22 -5
- package/package.json +6 -5
- package/dist/assets/SkillsPanel-LFXR0iy0.js +0 -28
- package/dist/assets/SpawnModal-BPlf3wKM.js +0 -1
- package/dist/assets/index-BGEtbFfN.js +0 -1
- package/dist/assets/index-BOj1gGma.js +0 -1
- package/dist/assets/index-CvRDWTQl.js +0 -1
- package/dist/assets/main-CYGaAWMo.css +0 -1
- package/dist/assets/main-DeBWAhnp.js +0 -199
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import{u as Pe,bK as Qe,z as Ze,r as i,h as Me,j as e,s as v,bL as eo,bM as oo,bN as so,aI as Ie,l as D,k as Ae,aq as ro,a3 as ao,ar as to,bO as P,N as io,aw as Ne,I as lo,av as Oe}from"./main-Cqo-Awpr.js";import"./vendor-react--Eh9ivFN.js";import"./vendor-three-Chj50gSY.js";const co=[{value:"scout",labelKey:"tools:skills.classScout",descriptionKey:"tools:skills.classScoutDesc"},{value:"builder",labelKey:"tools:skills.classBuilder",descriptionKey:"tools:skills.classBuilderDesc"},{value:"debugger",labelKey:"tools:skills.classDebugger",descriptionKey:"tools:skills.classDebuggerDesc"},{value:"architect",labelKey:"tools:skills.classArchitect",descriptionKey:"tools:skills.classArchitectDesc"},{value:"warrior",labelKey:"tools:skills.classWarrior",descriptionKey:"tools:skills.classWarriorDesc"},{value:"support",labelKey:"tools:skills.classSupport",descriptionKey:"tools:skills.classSupportDesc"},{value:"boss",labelKey:"tools:skills.classBoss",descriptionKey:"tools:skills.classBossDesc"}],no=[{labelKey:"tools:skills.toolReadFiles",value:"Read"},{labelKey:"tools:skills.toolWriteFiles",value:"Write"},{labelKey:"tools:skills.toolEditFiles",value:"Edit"},{labelKey:"tools:skills.toolRunBash",value:"Bash"},{labelKey:"tools:skills.toolGitCommands",value:"Bash(git:*)"},{labelKey:"tools:skills.toolNpmCommands",value:"Bash(npm:*)"},{labelKey:"tools:skills.toolDockerCommands",value:"Bash(docker:*)"},{labelKey:"tools:skills.toolKubectlCommands",value:"Bash(kubectl:*)"},{labelKey:"tools:skills.toolSearchFiles",value:"Grep"},{labelKey:"tools:skills.toolGlobFiles",value:"Glob"},{labelKey:"tools:skills.toolWebFetch",value:"WebFetch"},{labelKey:"tools:skills.toolWebSearch",value:"WebSearch"}],yo=`## Instructions
|
|
2
|
+
|
|
3
|
+
Describe step-by-step instructions for this skill here.
|
|
4
|
+
|
|
5
|
+
1. First step
|
|
6
|
+
2. Second step
|
|
7
|
+
3. Third step
|
|
8
|
+
|
|
9
|
+
## Examples
|
|
10
|
+
|
|
11
|
+
Show concrete examples of using this skill.
|
|
12
|
+
|
|
13
|
+
### Example 1
|
|
14
|
+
\`\`\`bash
|
|
15
|
+
# Example command
|
|
16
|
+
\`\`\`
|
|
17
|
+
|
|
18
|
+
## Safety Checks
|
|
19
|
+
|
|
20
|
+
- List important safety considerations
|
|
21
|
+
- Warn about destructive operations
|
|
22
|
+
`;function mo({isOpen:l,onClose:d,skillId:s}){const{t:a}=Pe(["tools","common"]),c=Qe(s??null),k=Ze(),n=!!c,y=(c==null?void 0:c.builtin)===!0,[b,g]=i.useState(""),[h,p]=i.useState(""),[S,A]=i.useState(""),[w,q]=i.useState(""),[j,B]=i.useState([]),[N,Q]=i.useState(""),[T,M]=i.useState([]),[O,z]=i.useState([]),[H,W]=i.useState(!0),[K,U]=i.useState(!1),L=i.useRef(null),$=i.useRef(null);i.useEffect(()=>{l&&(c?(g(c.name),p(c.slug),A(c.description),q(c.content||""),B(c.allowedTools||[]),M(c.assignedAgentIds||[]),z(c.assignedAgentClasses||[]),W(c.enabled)):(g(a("tools:skills.newSkillDefault")),p(""),A(""),q(yo),B([]),M([]),z([]),W(!0)),Q(""),U(!1),setTimeout(()=>{var t;return(t=L.current)==null?void 0:t.focus()},100))},[l,c]),i.useEffect(()=>{if(!n&&b){const t=b.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"").substring(0,64);p(t)}},[b,n]);const Z=t=>{if(t.preventDefault(),y&&s){v.updateSkill(s,{assignedAgentIds:T,assignedAgentClasses:O,enabled:H}),d();return}if(!b.trim()||!S.trim())return;const u={name:b.trim(),slug:h.trim()||b.toLowerCase().replace(/[^a-z0-9]+/g,"-"),description:S.trim(),content:w.trim(),allowedTools:j,assignedAgentIds:T,assignedAgentClasses:O,enabled:H};if(n&&s){if(c&&(c.name!==u.name||c.description!==u.description||c.content!==u.content||c.enabled!==u.enabled||JSON.stringify(c.allowedTools)!==JSON.stringify(u.allowedTools))&&!confirm(a("tools:skills.updateSkillConfirm")))return;v.updateSkill(s,u)}else v.createSkill(u);d()},ee=()=>{s&&confirm(a("tools:skills.deleteSkillConfirm"))&&(v.deleteSkill(s),d())},oe=t=>{j.includes(t)?B(j.filter(u=>u!==t)):B([...j,t])},_=()=>{N.trim()&&!j.includes(N.trim())&&(B([...j,N.trim()]),Q(""))},le=t=>{O.includes(t)?z(O.filter(u=>u!==t)):z([...O,t])},Y=t=>{T.includes(t)?M(T.filter(u=>u!==t)):M([...T,t])},f=k.filter(t=>t.class!=="boss"),{handleMouseDown:X,handleClick:C}=Me(d);return l?e.jsx("div",{className:"modal-overlay visible",onMouseDown:X,onClick:C,children:e.jsxs("div",{className:"modal skill-editor-modal",style:{maxWidth:"700px",maxHeight:"90vh"},children:[e.jsxs("div",{className:"modal-header",children:[e.jsxs("span",{children:[a(n?y?"tools:skills.viewBuiltInSkill":"tools:skills.editSkill":"tools:skills.createSkill"),y&&e.jsx("span",{style:{fontSize:"10px",background:"var(--accent-cyan)",color:"var(--bg-primary)",padding:"2px 6px",borderRadius:"3px",fontWeight:600,marginLeft:"8px"},children:a("tools:skills.builtIn")})]}),n&&!y&&e.jsx("button",{type:"button",className:"btn btn-danger btn-sm",onClick:ee,style:{marginLeft:"auto",marginRight:"12px"},children:a("common:buttons.delete")})]}),e.jsxs("form",{onSubmit:Z,children:[e.jsxs("div",{className:"modal-body",style:{maxHeight:"70vh",overflowY:"auto"},children:[y&&e.jsx("div",{style:{background:"rgba(139, 233, 253, 0.1)",border:"1px solid var(--accent-cyan)",borderRadius:"6px",padding:"10px 12px",marginBottom:"16px",fontSize:"12px",color:"var(--accent-cyan)"},children:a("tools:skills.builtInNotice")}),e.jsxs("div",{className:"form-section",children:[e.jsx("label",{className:"form-label",children:a("tools:skills.nameRequired")}),e.jsx("input",{ref:L,type:"text",className:"form-input",value:b,onChange:t=>g(t.target.value),placeholder:a("tools:skills.skillNamePlaceholder"),required:!0,disabled:y,style:y?{opacity:.7,cursor:"not-allowed"}:void 0})]}),e.jsxs("div",{className:"form-section",children:[e.jsx("label",{className:"form-label",children:a("tools:skills.slugLabel")}),e.jsx("input",{type:"text",className:"form-input",value:h,onChange:t=>p(t.target.value),placeholder:a("tools:skills.slugPlaceholder"),style:{fontFamily:"monospace",fontSize:"12px",...y?{opacity:.7,cursor:"not-allowed"}:{}},disabled:y}),e.jsx("small",{className:"form-hint",children:a("tools:skills.slugHint")})]}),e.jsxs("div",{className:"form-section",children:[e.jsx("label",{className:"form-label",children:a("tools:skills.descriptionRequired")}),e.jsx("textarea",{className:"form-input",value:S,onChange:t=>A(t.target.value),placeholder:a("tools:skills.skillDescPlaceholder"),rows:3,required:!0,style:{resize:"vertical",...y?{opacity:.7,cursor:"not-allowed"}:{}},disabled:y}),e.jsx("small",{className:"form-hint",children:a("tools:skills.descriptionHint")})]}),e.jsxs("div",{className:"form-section",children:[e.jsx("label",{className:"form-label",children:a("tools:skills.instructionsMarkdown")}),e.jsx("textarea",{ref:$,className:"form-input",value:w,onChange:t=>q(t.target.value),placeholder:a("tools:skills.skillContentPlaceholder"),rows:12,style:{fontFamily:"monospace",fontSize:"12px",resize:"vertical",minHeight:"200px",...y?{opacity:.7,cursor:"not-allowed"}:{}},disabled:y})]}),e.jsxs("div",{className:"form-section",children:[e.jsx("label",{className:"form-label",children:a("tools:skills.allowedTools")}),y?e.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:"4px",opacity:.7},children:j.length>0?j.map(t=>e.jsx("span",{style:{background:"var(--bg-tertiary)",padding:"2px 8px",borderRadius:"4px",fontSize:"11px"},children:t},t)):e.jsx("span",{style:{fontSize:"12px",color:"var(--text-muted)"},children:a("tools:skills.noSpecificTools")})}):e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"tool-presets",style:{display:"flex",flexWrap:"wrap",gap:"6px",marginBottom:"8px"},children:no.map(t=>e.jsx("button",{type:"button",className:`btn btn-sm ${j.includes(t.value)?"btn-primary":"btn-secondary"}`,onClick:()=>oe(t.value),style:{fontSize:"11px",padding:"4px 8px"},children:a(t.labelKey)},t.value))}),e.jsxs("div",{style:{display:"flex",gap:"8px"},children:[e.jsx("input",{type:"text",className:"form-input",value:N,onChange:t=>Q(t.target.value),placeholder:a("tools:skills.customToolPlaceholder"),style:{flex:1,fontSize:"12px"},onKeyDown:t=>{t.key==="Enter"&&(t.preventDefault(),_())}}),e.jsx("button",{type:"button",className:"btn btn-secondary btn-sm",onClick:_,children:a("common:buttons.add")})]}),j.length>0&&e.jsx("div",{style:{marginTop:"8px",display:"flex",flexWrap:"wrap",gap:"4px"},children:j.map(t=>e.jsxs("span",{className:"tag",style:{background:"var(--bg-tertiary)",padding:"2px 8px",borderRadius:"4px",fontSize:"11px",cursor:"pointer"},onClick:()=>oe(t),title:a("tools:skills.clickToRemove"),children:[t," ×"]},t))})]})]}),e.jsxs("div",{className:"form-section",children:[e.jsx("label",{className:"form-label",children:a("tools:skills.assignToClasses")}),e.jsx("small",{className:"form-hint",style:{display:"block",marginBottom:"8px"},children:a("tools:skills.allAgentsOfClasses")}),e.jsx("div",{style:{display:"grid",gridTemplateColumns:"repeat(2, 1fr)",gap:"6px"},children:co.map(t=>e.jsxs("button",{type:"button",className:`btn btn-sm ${O.includes(t.value)?"btn-primary":"btn-secondary"}`,onClick:()=>le(t.value),style:{fontSize:"11px",padding:"6px 8px",textAlign:"left"},children:[e.jsx("strong",{children:a(t.labelKey)}),e.jsxs("span",{style:{opacity:.7,marginLeft:"4px"},children:["- ",a(t.descriptionKey)]})]},t.value))})]}),f.length>0&&e.jsxs("div",{className:"form-section",children:[e.jsx("label",{className:"form-label",children:a("tools:skills.assignToAgents")}),e.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:"6px"},children:f.map(t=>e.jsxs("button",{type:"button",className:`btn btn-sm ${T.includes(t.id)?"btn-primary":"btn-secondary"}`,onClick:()=>Y(t.id),style:{fontSize:"11px",padding:"4px 8px"},children:[t.name,e.jsxs("span",{style:{opacity:.6,marginLeft:"4px"},children:["(",t.class,")"]})]},t.id))})]}),e.jsxs("div",{className:"form-section",children:[e.jsxs("button",{type:"button",className:"btn btn-secondary btn-sm",onClick:()=>U(!K),style:{marginBottom:"8px"},children:[a(K?"common:buttons2.hide":"common:buttons2.show")," ",a("tools:skills.advancedOptions")]}),K&&e.jsxs("div",{style:{marginTop:"8px"},children:[e.jsxs("label",{className:"form-label",style:{display:"flex",alignItems:"center",gap:"8px"},children:[e.jsx("input",{type:"checkbox",checked:H,onChange:t=>W(t.target.checked)}),a("tools:skills.skillEnabled")]}),e.jsx("small",{className:"form-hint",children:a("tools:skills.disabledSkillsHint")})]})]})]}),e.jsxs("div",{className:"modal-footer",children:[e.jsx("button",{type:"button",className:"btn btn-secondary",onClick:d,children:a(y?"common:buttons.close":"common:buttons.cancel")}),!y&&e.jsx("button",{type:"submit",className:"btn btn-primary",children:a(n?"common:buttons2.saveChanges":"tools:skills.createSkill")}),y&&e.jsx("button",{type:"submit",className:"btn btn-primary",children:a("tools:skills.saveAssignments")})]})]})]})}):null}const Re=[{emoji:"😀",keywords:["grin","happy","smile","face"],category:"Smileys"},{emoji:"😃",keywords:["happy","smile","joy","face"],category:"Smileys"},{emoji:"😄",keywords:["happy","smile","laugh","face"],category:"Smileys"},{emoji:"😁",keywords:["grin","happy","teeth","face"],category:"Smileys"},{emoji:"😅",keywords:["sweat","nervous","laugh","relief"],category:"Smileys"},{emoji:"😂",keywords:["laugh","cry","joy","tears","lol"],category:"Smileys"},{emoji:"🤣",keywords:["laugh","rolling","lol","rofl"],category:"Smileys"},{emoji:"😊",keywords:["blush","smile","happy","shy"],category:"Smileys"},{emoji:"😇",keywords:["angel","innocent","halo","saint"],category:"Smileys"},{emoji:"🙂",keywords:["smile","slight","face"],category:"Smileys"},{emoji:"😉",keywords:["wink","flirt","face"],category:"Smileys"},{emoji:"😌",keywords:["relieved","calm","peaceful"],category:"Smileys"},{emoji:"😍",keywords:["love","heart","eyes","crush"],category:"Smileys"},{emoji:"🥰",keywords:["love","hearts","adore","affection"],category:"Smileys"},{emoji:"😘",keywords:["kiss","love","heart","blow"],category:"Smileys"},{emoji:"😎",keywords:["cool","sunglasses","awesome"],category:"Smileys"},{emoji:"🤓",keywords:["nerd","geek","glasses","smart"],category:"Smileys"},{emoji:"🧐",keywords:["monocle","thinking","curious","inspect"],category:"Smileys"},{emoji:"🤔",keywords:["think","hmm","wonder","ponder"],category:"Smileys"},{emoji:"🤨",keywords:["raised","eyebrow","skeptic","suspicious"],category:"Smileys"},{emoji:"😐",keywords:["neutral","meh","blank","straight"],category:"Smileys"},{emoji:"😑",keywords:["expressionless","annoyed","unamused"],category:"Smileys"},{emoji:"😶",keywords:["silent","mute","speechless","quiet"],category:"Smileys"},{emoji:"🙄",keywords:["eyeroll","annoyed","whatever","bored"],category:"Smileys"},{emoji:"😏",keywords:["smirk","smug","sly","flirt"],category:"Smileys"},{emoji:"😣",keywords:["persevere","struggle","frustrated"],category:"Smileys"},{emoji:"😥",keywords:["sad","disappointed","relieved"],category:"Smileys"},{emoji:"😮",keywords:["surprised","wow","shock","gasp"],category:"Smileys"},{emoji:"🤯",keywords:["mind","blown","exploding","shock"],category:"Smileys"},{emoji:"😱",keywords:["scream","fear","scared","horror"],category:"Smileys"},{emoji:"😴",keywords:["sleep","tired","zzz","snore"],category:"Smileys"},{emoji:"🤤",keywords:["drool","hungry","yummy","want"],category:"Smileys"},{emoji:"😷",keywords:["mask","sick","ill","covid"],category:"Smileys"},{emoji:"🤒",keywords:["sick","fever","thermometer","ill"],category:"Smileys"},{emoji:"🤢",keywords:["nauseous","sick","green","ill"],category:"Smileys"},{emoji:"🤮",keywords:["vomit","sick","puke","gross"],category:"Smileys"},{emoji:"😈",keywords:["devil","evil","smiling","mischief","horns"],category:"Smileys"},{emoji:"👿",keywords:["devil","angry","evil","imp"],category:"Smileys"},{emoji:"💀",keywords:["skull","death","dead","skeleton"],category:"Smileys"},{emoji:"☠️",keywords:["skull","crossbones","death","pirate","danger"],category:"Smileys"},{emoji:"👻",keywords:["ghost","spirit","spooky","halloween"],category:"Smileys"},{emoji:"👽",keywords:["alien","ufo","extraterrestrial","space"],category:"Smileys"},{emoji:"🤖",keywords:["robot","bot","ai","android","machine"],category:"Smileys"},{emoji:"💩",keywords:["poop","poo","shit","crap"],category:"Smileys"},{emoji:"🎃",keywords:["pumpkin","halloween","jack","lantern"],category:"Smileys"},{emoji:"👑",keywords:["crown","king","queen","royal","boss","leader"],category:"People"},{emoji:"🎖️",keywords:["medal","military","honor","badge","award"],category:"People"},{emoji:"🦸",keywords:["hero","superhero","super","power"],category:"People"},{emoji:"🦸♂️",keywords:["hero","superhero","man","male"],category:"People"},{emoji:"🦸♀️",keywords:["hero","superhero","woman","female"],category:"People"},{emoji:"🦹",keywords:["villain","super","evil","hero"],category:"People"},{emoji:"🧙",keywords:["wizard","mage","magic","sorcerer"],category:"People"},{emoji:"🧙♂️",keywords:["wizard","mage","magic","man"],category:"People"},{emoji:"🧙♀️",keywords:["witch","mage","magic","woman"],category:"People"},{emoji:"🥷",keywords:["ninja","stealth","silent","assassin"],category:"People"},{emoji:"👨💻",keywords:["developer","programmer","coder","tech","man"],category:"People"},{emoji:"👩💻",keywords:["developer","programmer","coder","tech","woman"],category:"People"},{emoji:"🧑💻",keywords:["developer","programmer","coder","tech"],category:"People"},{emoji:"👨🔬",keywords:["scientist","research","lab","man"],category:"People"},{emoji:"👩🔬",keywords:["scientist","research","lab","woman"],category:"People"},{emoji:"👨🚀",keywords:["astronaut","space","rocket","man"],category:"People"},{emoji:"👩🚀",keywords:["astronaut","space","rocket","woman"],category:"People"},{emoji:"👨🎨",keywords:["artist","painter","creative","man"],category:"People"},{emoji:"👩🎨",keywords:["artist","painter","creative","woman"],category:"People"},{emoji:"👨🏫",keywords:["teacher","professor","instructor","man"],category:"People"},{emoji:"👩🏫",keywords:["teacher","professor","instructor","woman"],category:"People"},{emoji:"👨⚕️",keywords:["doctor","health","medical","man"],category:"People"},{emoji:"👩⚕️",keywords:["doctor","health","medical","woman"],category:"People"},{emoji:"👨🍳",keywords:["chef","cook","kitchen","man"],category:"People"},{emoji:"👩🍳",keywords:["chef","cook","kitchen","woman"],category:"People"},{emoji:"👨🔧",keywords:["mechanic","repair","fix","man"],category:"People"},{emoji:"👩🔧",keywords:["mechanic","repair","fix","woman"],category:"People"},{emoji:"👷",keywords:["construction","worker","builder","hard","hat"],category:"People"},{emoji:"💂",keywords:["guard","soldier","protect","security"],category:"People"},{emoji:"🕵️",keywords:["detective","spy","investigate","search","sleuth"],category:"People"},{emoji:"👮",keywords:["police","cop","officer","law"],category:"People"},{emoji:"🧝",keywords:["elf","fantasy","magic"],category:"People"},{emoji:"🧛",keywords:["vampire","dracula","dark","night"],category:"People"},{emoji:"🧟",keywords:["zombie","undead","dead"],category:"People"},{emoji:"🧞",keywords:["genie","magic","wish","lamp"],category:"People"},{emoji:"🧜",keywords:["mermaid","merman","sea","ocean"],category:"People"},{emoji:"🧚",keywords:["fairy","magic","fantasy","wings"],category:"People"},{emoji:"👼",keywords:["angel","baby","cherub","innocent"],category:"People"},{emoji:"🎅",keywords:["santa","christmas","claus","holiday"],category:"People"},{emoji:"🤴",keywords:["prince","royal","king","crown"],category:"People"},{emoji:"👸",keywords:["princess","royal","queen","crown"],category:"People"},{emoji:"🤵",keywords:["groom","tuxedo","suit","formal"],category:"People"},{emoji:"👰",keywords:["bride","wedding","veil","marriage"],category:"People"},{emoji:"🎭",keywords:["theater","mask","drama","acting","perform"],category:"People"},{emoji:"👾",keywords:["alien","monster","game","invader","space"],category:"People"},{emoji:"👤",keywords:["person","user","silhouette","profile"],category:"People"},{emoji:"👥",keywords:["people","users","group","team","silhouettes"],category:"People"},{emoji:"👋",keywords:["wave","hello","hi","bye","hand"],category:"Gestures"},{emoji:"🤚",keywords:["hand","raised","stop","back"],category:"Gestures"},{emoji:"✋",keywords:["hand","stop","high","five"],category:"Gestures"},{emoji:"🖐️",keywords:["hand","fingers","splayed","five"],category:"Gestures"},{emoji:"👌",keywords:["ok","perfect","good","nice"],category:"Gestures"},{emoji:"🤌",keywords:["pinched","italian","hand","chef"],category:"Gestures"},{emoji:"✌️",keywords:["peace","victory","two","fingers"],category:"Gestures"},{emoji:"🤞",keywords:["crossed","fingers","luck","hope"],category:"Gestures"},{emoji:"🤟",keywords:["love","you","rock","hand"],category:"Gestures"},{emoji:"🤘",keywords:["rock","metal","horns","hand"],category:"Gestures"},{emoji:"👍",keywords:["thumbs","up","good","like","yes","approve"],category:"Gestures"},{emoji:"👎",keywords:["thumbs","down","bad","dislike","no"],category:"Gestures"},{emoji:"👊",keywords:["fist","punch","bump","power"],category:"Gestures"},{emoji:"✊",keywords:["fist","raised","power","solidarity"],category:"Gestures"},{emoji:"🤛",keywords:["fist","left","bump"],category:"Gestures"},{emoji:"🤜",keywords:["fist","right","bump"],category:"Gestures"},{emoji:"👏",keywords:["clap","applause","bravo","hands"],category:"Gestures"},{emoji:"🙌",keywords:["hands","raised","celebration","hooray"],category:"Gestures"},{emoji:"🤝",keywords:["handshake","deal","agreement","shake"],category:"Gestures"},{emoji:"🙏",keywords:["pray","please","thanks","hope","namaste"],category:"Gestures"},{emoji:"💪",keywords:["muscle","strong","flex","bicep","arm"],category:"Gestures"},{emoji:"🦾",keywords:["robot","arm","prosthetic","mechanical"],category:"Gestures"},{emoji:"🖕",keywords:["middle","finger","rude","angry"],category:"Gestures"},{emoji:"☝️",keywords:["point","up","finger","one"],category:"Gestures"},{emoji:"👆",keywords:["point","up","finger","backhand"],category:"Gestures"},{emoji:"👇",keywords:["point","down","finger","backhand"],category:"Gestures"},{emoji:"👈",keywords:["point","left","finger","backhand"],category:"Gestures"},{emoji:"👉",keywords:["point","right","finger","backhand"],category:"Gestures"},{emoji:"👁️",keywords:["eye","see","look","watch","vision"],category:"Gestures"},{emoji:"👀",keywords:["eyes","look","see","watch","stare"],category:"Gestures"},{emoji:"👅",keywords:["tongue","taste","lick"],category:"Gestures"},{emoji:"👄",keywords:["lips","mouth","kiss"],category:"Gestures"},{emoji:"🧠",keywords:["brain","mind","think","smart","intelligence"],category:"Gestures"},{emoji:"🗣️",keywords:["speak","talk","head","voice","speech"],category:"Gestures"},{emoji:"❤️",keywords:["red","heart","love","like"],category:"Hearts"},{emoji:"🧡",keywords:["orange","heart","love","warm"],category:"Hearts"},{emoji:"💛",keywords:["yellow","heart","love","friendship"],category:"Hearts"},{emoji:"💚",keywords:["green","heart","love","support","health"],category:"Hearts"},{emoji:"💙",keywords:["blue","heart","love","trust"],category:"Hearts"},{emoji:"💜",keywords:["purple","heart","love"],category:"Hearts"},{emoji:"🖤",keywords:["black","heart","dark","love"],category:"Hearts"},{emoji:"🤍",keywords:["white","heart","pure","love"],category:"Hearts"},{emoji:"🤎",keywords:["brown","heart","love"],category:"Hearts"},{emoji:"💔",keywords:["broken","heart","sad","love"],category:"Hearts"},{emoji:"❤️🔥",keywords:["heart","fire","passion","love"],category:"Hearts"},{emoji:"❤️🩹",keywords:["heart","mending","healing","love"],category:"Hearts"},{emoji:"💕",keywords:["hearts","two","love","couple"],category:"Hearts"},{emoji:"💞",keywords:["hearts","revolving","love"],category:"Hearts"},{emoji:"💓",keywords:["heart","beating","love","alive"],category:"Hearts"},{emoji:"💗",keywords:["heart","growing","love","pink"],category:"Hearts"},{emoji:"💖",keywords:["heart","sparkle","love","pink"],category:"Hearts"},{emoji:"💝",keywords:["heart","ribbon","gift","love","valentine"],category:"Hearts"},{emoji:"💘",keywords:["heart","arrow","cupid","love"],category:"Hearts"},{emoji:"💌",keywords:["letter","love","envelope","mail"],category:"Hearts"},{emoji:"💋",keywords:["kiss","lips","love","lipstick"],category:"Hearts"},{emoji:"🫶",keywords:["heart","hands","love","care"],category:"Hearts"},{emoji:"🐶",keywords:["dog","puppy","pet","cute"],category:"Animals"},{emoji:"🐱",keywords:["cat","kitten","pet","cute"],category:"Animals"},{emoji:"🐭",keywords:["mouse","rat","rodent","cute"],category:"Animals"},{emoji:"🐹",keywords:["hamster","pet","rodent","cute"],category:"Animals"},{emoji:"🐰",keywords:["rabbit","bunny","pet","cute"],category:"Animals"},{emoji:"🦊",keywords:["fox","clever","cunning","red"],category:"Animals"},{emoji:"🐻",keywords:["bear","grizzly","brown","strong"],category:"Animals"},{emoji:"🐼",keywords:["panda","bear","bamboo","cute","china"],category:"Animals"},{emoji:"🐨",keywords:["koala","australia","cute","bear"],category:"Animals"},{emoji:"🐯",keywords:["tiger","cat","stripe","fierce"],category:"Animals"},{emoji:"🦁",keywords:["lion","king","roar","cat","pride"],category:"Animals"},{emoji:"🐮",keywords:["cow","moo","farm","milk"],category:"Animals"},{emoji:"🐷",keywords:["pig","oink","farm","pork"],category:"Animals"},{emoji:"🐸",keywords:["frog","toad","ribbit","green"],category:"Animals"},{emoji:"🐵",keywords:["monkey","ape","banana","primate"],category:"Animals"},{emoji:"🙈",keywords:["monkey","see","no","evil","cover"],category:"Animals"},{emoji:"🙉",keywords:["monkey","hear","no","evil","cover"],category:"Animals"},{emoji:"🙊",keywords:["monkey","speak","no","evil","cover"],category:"Animals"},{emoji:"🐔",keywords:["chicken","hen","bird","farm"],category:"Animals"},{emoji:"🐧",keywords:["penguin","bird","ice","cold","linux"],category:"Animals"},{emoji:"🐦",keywords:["bird","fly","tweet","chirp"],category:"Animals"},{emoji:"🐤",keywords:["chick","baby","bird","chicken"],category:"Animals"},{emoji:"🦆",keywords:["duck","bird","quack","water"],category:"Animals"},{emoji:"🦅",keywords:["eagle","bird","fly","america","soar"],category:"Animals"},{emoji:"🦉",keywords:["owl","bird","night","wise","hoot"],category:"Animals"},{emoji:"🦇",keywords:["bat","vampire","night","fly"],category:"Animals"},{emoji:"🐺",keywords:["wolf","howl","wild","pack"],category:"Animals"},{emoji:"🐗",keywords:["boar","pig","wild","tusk"],category:"Animals"},{emoji:"🐴",keywords:["horse","pony","ride","stable"],category:"Animals"},{emoji:"🦄",keywords:["unicorn","horse","magic","fantasy","rainbow"],category:"Animals"},{emoji:"🐝",keywords:["bee","honey","buzz","insect","busy"],category:"Animals"},{emoji:"🐛",keywords:["bug","caterpillar","insect","debug","worm"],category:"Animals"},{emoji:"🦋",keywords:["butterfly","insect","transform","beautiful"],category:"Animals"},{emoji:"🐌",keywords:["snail","slow","shell","slug"],category:"Animals"},{emoji:"🐞",keywords:["ladybug","beetle","insect","luck"],category:"Animals"},{emoji:"🐜",keywords:["ant","insect","small","work","colony"],category:"Animals"},{emoji:"🦗",keywords:["cricket","grasshopper","insect","jump"],category:"Animals"},{emoji:"🕷️",keywords:["spider","web","insect","creepy"],category:"Animals"},{emoji:"🦂",keywords:["scorpion","sting","desert","danger"],category:"Animals"},{emoji:"🐢",keywords:["turtle","tortoise","slow","shell"],category:"Animals"},{emoji:"🐍",keywords:["snake","serpent","slither","python"],category:"Animals"},{emoji:"🦎",keywords:["lizard","reptile","gecko"],category:"Animals"},{emoji:"🐉",keywords:["dragon","fire","fantasy","chinese"],category:"Animals"},{emoji:"🐲",keywords:["dragon","face","fantasy","chinese"],category:"Animals"},{emoji:"🦖",keywords:["trex","dinosaur","rex","prehistoric"],category:"Animals"},{emoji:"🦕",keywords:["dinosaur","sauropod","prehistoric","long"],category:"Animals"},{emoji:"🐙",keywords:["octopus","sea","tentacle","squid"],category:"Animals"},{emoji:"🦑",keywords:["squid","sea","tentacle","calamari"],category:"Animals"},{emoji:"🦐",keywords:["shrimp","sea","prawn","seafood"],category:"Animals"},{emoji:"🦀",keywords:["crab","sea","pinch","seafood"],category:"Animals"},{emoji:"🐡",keywords:["blowfish","puffer","fish","sea"],category:"Animals"},{emoji:"🐠",keywords:["fish","tropical","sea","aquarium"],category:"Animals"},{emoji:"🐟",keywords:["fish","sea","swimming","aquatic"],category:"Animals"},{emoji:"🐬",keywords:["dolphin","sea","smart","flipper"],category:"Animals"},{emoji:"🐳",keywords:["whale","sea","spout","ocean"],category:"Animals"},{emoji:"🦈",keywords:["shark","sea","jaws","danger"],category:"Animals"},{emoji:"🦭",keywords:["seal","sea","cute","ocean"],category:"Animals"},{emoji:"🐊",keywords:["crocodile","alligator","reptile","swamp"],category:"Animals"},{emoji:"🦧",keywords:["orangutan","ape","primate","monkey"],category:"Animals"},{emoji:"🦍",keywords:["gorilla","ape","primate","strong"],category:"Animals"},{emoji:"🐘",keywords:["elephant","big","trunk","africa"],category:"Animals"},{emoji:"🦏",keywords:["rhino","rhinoceros","horn","africa"],category:"Animals"},{emoji:"🦛",keywords:["hippo","hippopotamus","water","africa"],category:"Animals"},{emoji:"🐪",keywords:["camel","desert","hump","dromedary"],category:"Animals"},{emoji:"🦒",keywords:["giraffe","tall","neck","spots"],category:"Animals"},{emoji:"🦓",keywords:["zebra","stripes","horse","africa"],category:"Animals"},{emoji:"🦘",keywords:["kangaroo","australia","jump","pouch"],category:"Animals"},{emoji:"🦬",keywords:["bison","buffalo","america","wild"],category:"Animals"},{emoji:"🐃",keywords:["buffalo","water","ox","farm"],category:"Animals"},{emoji:"🦌",keywords:["deer","stag","antler","forest"],category:"Animals"},{emoji:"🦙",keywords:["llama","alpaca","wool","peru"],category:"Animals"},{emoji:"🦥",keywords:["sloth","slow","lazy","sleep"],category:"Animals"},{emoji:"🦦",keywords:["otter","sea","cute","swim"],category:"Animals"},{emoji:"🦨",keywords:["skunk","stink","smell","stripe"],category:"Animals"},{emoji:"🦡",keywords:["badger","honey","dig","stripe"],category:"Animals"},{emoji:"🐾",keywords:["paw","prints","pet","animal","dog","cat"],category:"Animals"},{emoji:"🦠",keywords:["microbe","virus","bacteria","bug","germ"],category:"Animals"},{emoji:"🌲",keywords:["tree","evergreen","pine","forest","christmas"],category:"Nature"},{emoji:"🌳",keywords:["tree","deciduous","forest","nature"],category:"Nature"},{emoji:"🌴",keywords:["palm","tree","beach","tropical"],category:"Nature"},{emoji:"🌵",keywords:["cactus","desert","plant","prickly"],category:"Nature"},{emoji:"🌱",keywords:["seedling","plant","grow","sprout"],category:"Nature"},{emoji:"🌿",keywords:["herb","plant","green","leaf"],category:"Nature"},{emoji:"☘️",keywords:["shamrock","clover","irish","luck"],category:"Nature"},{emoji:"🍀",keywords:["clover","four","leaf","luck"],category:"Nature"},{emoji:"🍁",keywords:["maple","leaf","fall","autumn","canada"],category:"Nature"},{emoji:"🍂",keywords:["fallen","leaf","fall","autumn"],category:"Nature"},{emoji:"🍃",keywords:["leaf","fluttering","wind","blow"],category:"Nature"},{emoji:"🌸",keywords:["cherry","blossom","flower","spring","japan"],category:"Nature"},{emoji:"💐",keywords:["bouquet","flowers","gift","arrangement"],category:"Nature"},{emoji:"🌷",keywords:["tulip","flower","spring","netherlands"],category:"Nature"},{emoji:"🌹",keywords:["rose","flower","love","romantic"],category:"Nature"},{emoji:"🥀",keywords:["wilted","flower","dead","sad"],category:"Nature"},{emoji:"🌺",keywords:["hibiscus","flower","tropical","hawaii"],category:"Nature"},{emoji:"🌻",keywords:["sunflower","flower","sun","yellow"],category:"Nature"},{emoji:"🌼",keywords:["blossom","flower","yellow","daisy"],category:"Nature"},{emoji:"☀️",keywords:["sun","sunny","bright","day","light"],category:"Weather"},{emoji:"🌤️",keywords:["sun","cloud","partly","cloudy"],category:"Weather"},{emoji:"⛅",keywords:["sun","cloud","partly","cloudy"],category:"Weather"},{emoji:"🌥️",keywords:["cloud","sun","behind","mostly"],category:"Weather"},{emoji:"☁️",keywords:["cloud","cloudy","weather","sky"],category:"Weather"},{emoji:"🌦️",keywords:["rain","sun","cloud","shower"],category:"Weather"},{emoji:"🌧️",keywords:["rain","cloud","rainy","weather"],category:"Weather"},{emoji:"⛈️",keywords:["thunder","storm","rain","lightning"],category:"Weather"},{emoji:"🌩️",keywords:["lightning","cloud","storm","thunder"],category:"Weather"},{emoji:"🌨️",keywords:["snow","cloud","snowy","winter"],category:"Weather"},{emoji:"❄️",keywords:["snow","ice","cold","freeze","winter","flake"],category:"Weather"},{emoji:"💨",keywords:["wind","blow","dash","fast","air"],category:"Weather"},{emoji:"🌪️",keywords:["tornado","cyclone","twister","storm"],category:"Weather"},{emoji:"🌫️",keywords:["fog","foggy","mist","hazy"],category:"Weather"},{emoji:"🌈",keywords:["rainbow","color","pride","spectrum"],category:"Weather"},{emoji:"⚡",keywords:["lightning","electric","power","energy","fast","bolt","thunder"],category:"Weather"},{emoji:"🔥",keywords:["fire","flame","hot","burn","lit"],category:"Weather"},{emoji:"💧",keywords:["water","drop","liquid","wet"],category:"Weather"},{emoji:"🌊",keywords:["wave","ocean","sea","water","surf"],category:"Weather"},{emoji:"🌙",keywords:["moon","night","crescent","dark","sleep"],category:"Weather"},{emoji:"🌛",keywords:["moon","first","quarter","face"],category:"Weather"},{emoji:"🌜",keywords:["moon","last","quarter","face"],category:"Weather"},{emoji:"🌝",keywords:["moon","full","face","bright"],category:"Weather"},{emoji:"🌞",keywords:["sun","face","bright","happy"],category:"Weather"},{emoji:"⭐",keywords:["star","yellow","favorite","best"],category:"Weather"},{emoji:"🌟",keywords:["star","glow","bright","shiny"],category:"Weather"},{emoji:"✨",keywords:["sparkle","star","shine","magic","new"],category:"Weather"},{emoji:"💫",keywords:["dizzy","star","circle","shooting"],category:"Weather"},{emoji:"☄️",keywords:["comet","meteor","space","shooting","star"],category:"Weather"},{emoji:"🍎",keywords:["apple","red","fruit","healthy"],category:"Food"},{emoji:"🍏",keywords:["apple","green","fruit","healthy"],category:"Food"},{emoji:"🍐",keywords:["pear","fruit","green"],category:"Food"},{emoji:"🍊",keywords:["orange","fruit","citrus","tangerine"],category:"Food"},{emoji:"🍋",keywords:["lemon","citrus","sour","yellow"],category:"Food"},{emoji:"🍌",keywords:["banana","fruit","yellow","monkey"],category:"Food"},{emoji:"🍉",keywords:["watermelon","fruit","summer","red"],category:"Food"},{emoji:"🍇",keywords:["grapes","fruit","wine","purple"],category:"Food"},{emoji:"🍓",keywords:["strawberry","fruit","berry","red"],category:"Food"},{emoji:"🫐",keywords:["blueberry","fruit","berry","blue"],category:"Food"},{emoji:"🍒",keywords:["cherry","cherries","fruit","red"],category:"Food"},{emoji:"🍑",keywords:["peach","fruit","butt","emoji"],category:"Food"},{emoji:"🥭",keywords:["mango","fruit","tropical","yellow"],category:"Food"},{emoji:"🍍",keywords:["pineapple","fruit","tropical"],category:"Food"},{emoji:"🥥",keywords:["coconut","tropical","brown"],category:"Food"},{emoji:"🥝",keywords:["kiwi","fruit","green"],category:"Food"},{emoji:"🍅",keywords:["tomato","vegetable","red"],category:"Food"},{emoji:"🥑",keywords:["avocado","green","guacamole"],category:"Food"},{emoji:"🥕",keywords:["carrot","vegetable","orange"],category:"Food"},{emoji:"🌽",keywords:["corn","maize","vegetable","yellow"],category:"Food"},{emoji:"🌶️",keywords:["pepper","hot","spicy","chili"],category:"Food"},{emoji:"🥒",keywords:["cucumber","pickle","vegetable"],category:"Food"},{emoji:"🥬",keywords:["lettuce","leafy","green","salad"],category:"Food"},{emoji:"🥦",keywords:["broccoli","vegetable","green"],category:"Food"},{emoji:"🧄",keywords:["garlic","spice","cooking"],category:"Food"},{emoji:"🧅",keywords:["onion","vegetable","cry"],category:"Food"},{emoji:"🥔",keywords:["potato","vegetable","fries"],category:"Food"},{emoji:"🍞",keywords:["bread","loaf","toast","carb"],category:"Food"},{emoji:"🥐",keywords:["croissant","bread","french","pastry"],category:"Food"},{emoji:"🥖",keywords:["baguette","bread","french"],category:"Food"},{emoji:"🥨",keywords:["pretzel","snack","twisted"],category:"Food"},{emoji:"🧀",keywords:["cheese","dairy","yellow"],category:"Food"},{emoji:"🥚",keywords:["egg","breakfast","chicken"],category:"Food"},{emoji:"🍳",keywords:["cooking","egg","frying","pan"],category:"Food"},{emoji:"🥞",keywords:["pancakes","breakfast","stack"],category:"Food"},{emoji:"🧇",keywords:["waffle","breakfast","belgian"],category:"Food"},{emoji:"🥓",keywords:["bacon","meat","breakfast","pork"],category:"Food"},{emoji:"🍔",keywords:["burger","hamburger","food","fast"],category:"Food"},{emoji:"🍟",keywords:["fries","french","food","fast"],category:"Food"},{emoji:"🍕",keywords:["pizza","food","italian","slice"],category:"Food"},{emoji:"🌭",keywords:["hotdog","food","fast","sausage"],category:"Food"},{emoji:"🥪",keywords:["sandwich","food","bread","lunch"],category:"Food"},{emoji:"🌮",keywords:["taco","mexican","food"],category:"Food"},{emoji:"🌯",keywords:["burrito","mexican","food","wrap"],category:"Food"},{emoji:"🥗",keywords:["salad","healthy","green","vegetable"],category:"Food"},{emoji:"🍜",keywords:["noodle","ramen","soup","bowl"],category:"Food"},{emoji:"🍝",keywords:["spaghetti","pasta","italian","noodle"],category:"Food"},{emoji:"🍣",keywords:["sushi","japanese","fish","rice"],category:"Food"},{emoji:"🍱",keywords:["bento","box","japanese","lunch"],category:"Food"},{emoji:"🍛",keywords:["curry","rice","indian","food"],category:"Food"},{emoji:"🍲",keywords:["pot","food","stew","soup"],category:"Food"},{emoji:"🥘",keywords:["paella","food","pan","spanish"],category:"Food"},{emoji:"🍿",keywords:["popcorn","movie","snack","cinema"],category:"Food"},{emoji:"🧂",keywords:["salt","spice","seasoning"],category:"Food"},{emoji:"🍦",keywords:["ice","cream","cone","dessert","cold"],category:"Food"},{emoji:"🍧",keywords:["shaved","ice","dessert","cold"],category:"Food"},{emoji:"🍨",keywords:["ice","cream","dessert","cold"],category:"Food"},{emoji:"🍩",keywords:["donut","doughnut","dessert","sweet"],category:"Food"},{emoji:"🍪",keywords:["cookie","dessert","sweet","chocolate"],category:"Food"},{emoji:"🎂",keywords:["cake","birthday","dessert","celebration"],category:"Food"},{emoji:"🍰",keywords:["cake","slice","shortcake","dessert"],category:"Food"},{emoji:"🧁",keywords:["cupcake","dessert","sweet","muffin"],category:"Food"},{emoji:"🥧",keywords:["pie","dessert","apple","thanksgiving"],category:"Food"},{emoji:"🍫",keywords:["chocolate","bar","sweet","candy"],category:"Food"},{emoji:"🍬",keywords:["candy","sweet","sugar"],category:"Food"},{emoji:"🍭",keywords:["lollipop","candy","sweet"],category:"Food"},{emoji:"☕",keywords:["coffee","hot","drink","cafe","java"],category:"Food"},{emoji:"🍵",keywords:["tea","hot","drink","green"],category:"Food"},{emoji:"🥤",keywords:["cup","straw","drink","soda"],category:"Food"},{emoji:"🧃",keywords:["juice","box","drink","kid"],category:"Food"},{emoji:"🧊",keywords:["ice","cube","cold","freeze"],category:"Food"},{emoji:"🍺",keywords:["beer","mug","drink","alcohol"],category:"Food"},{emoji:"🍻",keywords:["beer","cheers","drink","alcohol","mugs"],category:"Food"},{emoji:"🥂",keywords:["champagne","cheers","celebration","wine"],category:"Food"},{emoji:"🍷",keywords:["wine","glass","drink","alcohol","red"],category:"Food"},{emoji:"🥃",keywords:["whiskey","glass","drink","alcohol","tumbler"],category:"Food"},{emoji:"🍸",keywords:["cocktail","drink","martini","alcohol"],category:"Food"},{emoji:"🍹",keywords:["tropical","drink","cocktail","alcohol"],category:"Food"},{emoji:"🔍",keywords:["search","magnify","find","look","scout","explore","investigate"],category:"Tools"},{emoji:"🔎",keywords:["search","magnify","find","look","right"],category:"Tools"},{emoji:"🔨",keywords:["hammer","build","tool","construct","builder"],category:"Tools"},{emoji:"🪓",keywords:["axe","chop","wood","lumberjack"],category:"Tools"},{emoji:"⛏️",keywords:["pick","mining","dig","tool"],category:"Tools"},{emoji:"⚒️",keywords:["hammer","pick","mining","build"],category:"Tools"},{emoji:"🛠️",keywords:["tools","build","repair","fix","hammer","wrench"],category:"Tools"},{emoji:"🔧",keywords:["wrench","fix","repair","tool","mechanic"],category:"Tools"},{emoji:"🪛",keywords:["screwdriver","tool","fix","repair"],category:"Tools"},{emoji:"🔩",keywords:["bolt","nut","screw","hardware"],category:"Tools"},{emoji:"⚙️",keywords:["gear","settings","config","cog","machine"],category:"Tools"},{emoji:"🗜️",keywords:["clamp","compress","tool","vise"],category:"Tools"},{emoji:"⚖️",keywords:["scale","balance","justice","law","weigh"],category:"Tools"},{emoji:"🔗",keywords:["link","chain","connect","url"],category:"Tools"},{emoji:"⛓️",keywords:["chain","link","connect","locked"],category:"Tools"},{emoji:"🧰",keywords:["toolbox","tools","repair","box"],category:"Tools"},{emoji:"🧲",keywords:["magnet","attract","magnetic"],category:"Tools"},{emoji:"⚔️",keywords:["sword","battle","fight","warrior","combat","crossed"],category:"Tools"},{emoji:"🗡️",keywords:["dagger","knife","sword","blade","weapon"],category:"Tools"},{emoji:"🛡️",keywords:["shield","protect","defense","guard","security"],category:"Tools"},{emoji:"🏹",keywords:["bow","arrow","archer","hunt"],category:"Tools"},{emoji:"🔪",keywords:["knife","cut","blade","kitchen"],category:"Tools"},{emoji:"💣",keywords:["bomb","explode","danger","boom"],category:"Tools"},{emoji:"🧨",keywords:["dynamite","explosive","firecracker","boom"],category:"Tools"},{emoji:"🪃",keywords:["boomerang","throw","return","australia"],category:"Tools"},{emoji:"🔫",keywords:["gun","pistol","water","toy"],category:"Tools"},{emoji:"✂️",keywords:["scissors","cut","trim","snip"],category:"Tools"},{emoji:"📌",keywords:["pin","push","tack","mark","location"],category:"Tools"},{emoji:"📍",keywords:["pin","location","map","place"],category:"Tools"},{emoji:"📎",keywords:["paperclip","clip","attach","office"],category:"Tools"},{emoji:"🖊️",keywords:["pen","write","ink","sign"],category:"Tools"},{emoji:"✏️",keywords:["pencil","write","draw","edit"],category:"Tools"},{emoji:"✒️",keywords:["pen","nib","write","black"],category:"Tools"},{emoji:"🖍️",keywords:["crayon","draw","color","art"],category:"Tools"},{emoji:"📝",keywords:["memo","note","write","document","edit"],category:"Tools"},{emoji:"📋",keywords:["clipboard","list","task","checklist"],category:"Tools"},{emoji:"🔐",keywords:["lock","key","secure","closed"],category:"Tools"},{emoji:"🔒",keywords:["lock","closed","secure","padlock"],category:"Tools"},{emoji:"🔓",keywords:["unlock","open","padlock"],category:"Tools"},{emoji:"🔑",keywords:["key","lock","password","access"],category:"Tools"},{emoji:"🗝️",keywords:["key","old","vintage","lock"],category:"Tools"},{emoji:"💻",keywords:["laptop","computer","pc","mac","code","work"],category:"Tech"},{emoji:"🖥️",keywords:["desktop","computer","monitor","screen","pc"],category:"Tech"},{emoji:"🖨️",keywords:["printer","print","paper","office"],category:"Tech"},{emoji:"⌨️",keywords:["keyboard","type","input","computer"],category:"Tech"},{emoji:"🖱️",keywords:["mouse","click","computer","cursor"],category:"Tech"},{emoji:"🖲️",keywords:["trackball","mouse","computer","input"],category:"Tech"},{emoji:"💽",keywords:["disk","minidisk","computer","storage"],category:"Tech"},{emoji:"💾",keywords:["floppy","disk","save","storage","data"],category:"Tech"},{emoji:"💿",keywords:["cd","disk","music","data"],category:"Tech"},{emoji:"📀",keywords:["dvd","disk","movie","data"],category:"Tech"},{emoji:"📱",keywords:["phone","mobile","smartphone","cell","iphone"],category:"Tech"},{emoji:"📲",keywords:["phone","call","incoming","mobile"],category:"Tech"},{emoji:"☎️",keywords:["phone","telephone","call","old"],category:"Tech"},{emoji:"📞",keywords:["phone","receiver","call","talk"],category:"Tech"},{emoji:"📟",keywords:["pager","beeper","old","retro"],category:"Tech"},{emoji:"📠",keywords:["fax","machine","office","old"],category:"Tech"},{emoji:"🔋",keywords:["battery","power","charge","energy"],category:"Tech"},{emoji:"🔌",keywords:["plug","electric","power","connect"],category:"Tech"},{emoji:"💡",keywords:["bulb","light","idea","bright","lamp"],category:"Tech"},{emoji:"🔦",keywords:["flashlight","light","torch","bright"],category:"Tech"},{emoji:"🕯️",keywords:["candle","light","flame","wax"],category:"Tech"},{emoji:"📡",keywords:["satellite","antenna","signal","dish"],category:"Tech"},{emoji:"🛰️",keywords:["satellite","space","orbit","signal"],category:"Tech"},{emoji:"🧭",keywords:["compass","navigate","direction","north"],category:"Tech"},{emoji:"🗺️",keywords:["map","world","travel","navigate","explore"],category:"Tech"},{emoji:"🧪",keywords:["test","tube","science","lab","experiment","chemistry"],category:"Tech"},{emoji:"🔬",keywords:["microscope","science","lab","research","biology"],category:"Tech"},{emoji:"🔭",keywords:["telescope","space","astronomy","star","observe"],category:"Tech"},{emoji:"📐",keywords:["ruler","triangle","architect","design","measure","math"],category:"Tech"},{emoji:"📏",keywords:["ruler","measure","straight","length"],category:"Tech"},{emoji:"🧬",keywords:["dna","gene","biology","science","helix"],category:"Tech"},{emoji:"💉",keywords:["syringe","needle","medicine","vaccine","inject"],category:"Tech"},{emoji:"💊",keywords:["pill","medicine","drug","pharmacy","health"],category:"Tech"},{emoji:"🩹",keywords:["bandage","heal","fix","patch","medical"],category:"Tech"},{emoji:"🩺",keywords:["stethoscope","doctor","medical","health"],category:"Tech"},{emoji:"⚗️",keywords:["alembic","chemistry","science","distill"],category:"Tech"},{emoji:"🚗",keywords:["car","auto","vehicle","drive"],category:"Transport"},{emoji:"🚕",keywords:["taxi","cab","car","ride"],category:"Transport"},{emoji:"🚙",keywords:["suv","car","vehicle","sport"],category:"Transport"},{emoji:"🚌",keywords:["bus","vehicle","public","transit"],category:"Transport"},{emoji:"🚎",keywords:["trolley","bus","electric","transit"],category:"Transport"},{emoji:"🏎️",keywords:["racing","car","fast","formula"],category:"Transport"},{emoji:"🚓",keywords:["police","car","cop","patrol"],category:"Transport"},{emoji:"🚑",keywords:["ambulance","emergency","medical","hospital"],category:"Transport"},{emoji:"🚒",keywords:["fire","truck","engine","emergency"],category:"Transport"},{emoji:"🚐",keywords:["minibus","van","vehicle","transit"],category:"Transport"},{emoji:"🛻",keywords:["pickup","truck","vehicle"],category:"Transport"},{emoji:"🚚",keywords:["truck","delivery","vehicle","moving"],category:"Transport"},{emoji:"🚛",keywords:["truck","semi","trailer","haul"],category:"Transport"},{emoji:"🚜",keywords:["tractor","farm","vehicle","agriculture"],category:"Transport"},{emoji:"🏍️",keywords:["motorcycle","racing","bike","sport"],category:"Transport"},{emoji:"🛵",keywords:["scooter","motor","vespa","moped"],category:"Transport"},{emoji:"🚲",keywords:["bicycle","bike","cycle","pedal"],category:"Transport"},{emoji:"🛴",keywords:["scooter","kick","ride"],category:"Transport"},{emoji:"🚂",keywords:["train","locomotive","steam","rail"],category:"Transport"},{emoji:"🚃",keywords:["train","railway","car","wagon"],category:"Transport"},{emoji:"🚄",keywords:["train","high","speed","bullet","shinkansen"],category:"Transport"},{emoji:"🚅",keywords:["train","bullet","high","speed"],category:"Transport"},{emoji:"🚆",keywords:["train","railway","transit"],category:"Transport"},{emoji:"🚇",keywords:["metro","subway","underground","train"],category:"Transport"},{emoji:"🚈",keywords:["train","light","rail","transit"],category:"Transport"},{emoji:"✈️",keywords:["airplane","plane","fly","travel","flight"],category:"Transport"},{emoji:"🛫",keywords:["airplane","departure","takeoff","fly"],category:"Transport"},{emoji:"🛬",keywords:["airplane","arrival","landing","fly"],category:"Transport"},{emoji:"🛩️",keywords:["plane","small","airplane","fly"],category:"Transport"},{emoji:"🚁",keywords:["helicopter","chopper","fly","hover"],category:"Transport"},{emoji:"🛸",keywords:["ufo","alien","spaceship","flying","saucer"],category:"Transport"},{emoji:"🚀",keywords:["rocket","launch","space","fast","ship","startup"],category:"Transport"},{emoji:"🛶",keywords:["canoe","boat","paddle","kayak"],category:"Transport"},{emoji:"⛵",keywords:["sailboat","boat","sail","wind"],category:"Transport"},{emoji:"🚤",keywords:["speedboat","boat","fast","water"],category:"Transport"},{emoji:"🛥️",keywords:["motorboat","boat","yacht"],category:"Transport"},{emoji:"🛳️",keywords:["ship","cruise","passenger","boat"],category:"Transport"},{emoji:"⛴️",keywords:["ferry","boat","ship","transport"],category:"Transport"},{emoji:"🚢",keywords:["ship","boat","cruise","ocean"],category:"Transport"},{emoji:"⚓",keywords:["anchor","ship","boat","dock"],category:"Transport"},{emoji:"🚧",keywords:["construction","barrier","road","block"],category:"Transport"},{emoji:"🚦",keywords:["traffic","light","signal","stop","go"],category:"Transport"},{emoji:"🚥",keywords:["traffic","light","horizontal","signal"],category:"Transport"},{emoji:"🗼",keywords:["tower","tokyo","japan","landmark"],category:"Transport"},{emoji:"🗽",keywords:["statue","liberty","usa","new","york"],category:"Transport"},{emoji:"🗿",keywords:["moai","statue","easter","island"],category:"Transport"},{emoji:"📦",keywords:["box","package","delivery","ship","container"],category:"Objects"},{emoji:"🎁",keywords:["gift","present","wrap","birthday"],category:"Objects"},{emoji:"💎",keywords:["diamond","gem","jewel","precious","crystal"],category:"Objects"},{emoji:"🔮",keywords:["crystal","ball","magic","fortune","predict"],category:"Objects"},{emoji:"🏆",keywords:["trophy","win","champion","prize","gold","first"],category:"Objects"},{emoji:"🥇",keywords:["gold","medal","first","winner","best"],category:"Objects"},{emoji:"🥈",keywords:["silver","medal","second","winner"],category:"Objects"},{emoji:"🥉",keywords:["bronze","medal","third","winner"],category:"Objects"},{emoji:"🏅",keywords:["medal","sports","award","winner"],category:"Objects"},{emoji:"🎖️",keywords:["medal","military","honor","badge"],category:"Objects"},{emoji:"🎯",keywords:["target","bullseye","aim","goal","dart"],category:"Objects"},{emoji:"🎰",keywords:["slot","machine","casino","gamble","lucky"],category:"Objects"},{emoji:"🎲",keywords:["dice","game","roll","random","chance"],category:"Objects"},{emoji:"🎮",keywords:["game","controller","video","play","console"],category:"Objects"},{emoji:"🕹️",keywords:["joystick","game","arcade","control"],category:"Objects"},{emoji:"🎨",keywords:["art","palette","paint","color","creative"],category:"Objects"},{emoji:"🖼️",keywords:["picture","frame","art","painting"],category:"Objects"},{emoji:"🎬",keywords:["clapper","movie","film","action","cinema"],category:"Objects"},{emoji:"📷",keywords:["camera","photo","picture","photograph"],category:"Objects"},{emoji:"📸",keywords:["camera","flash","photo","selfie"],category:"Objects"},{emoji:"📹",keywords:["video","camera","record","film"],category:"Objects"},{emoji:"🎥",keywords:["movie","camera","film","cinema"],category:"Objects"},{emoji:"📺",keywords:["tv","television","screen","watch"],category:"Objects"},{emoji:"📻",keywords:["radio","music","broadcast","listen"],category:"Objects"},{emoji:"🎤",keywords:["microphone","mic","sing","karaoke","voice"],category:"Objects"},{emoji:"🎧",keywords:["headphones","music","listen","audio"],category:"Objects"},{emoji:"🎵",keywords:["music","note","song","melody"],category:"Objects"},{emoji:"🎶",keywords:["music","notes","song","melody"],category:"Objects"},{emoji:"🎹",keywords:["piano","keys","music","instrument"],category:"Objects"},{emoji:"🎸",keywords:["guitar","music","rock","instrument"],category:"Objects"},{emoji:"🎺",keywords:["trumpet","music","brass","instrument"],category:"Objects"},{emoji:"🥁",keywords:["drum","music","beat","percussion"],category:"Objects"},{emoji:"🎻",keywords:["violin","music","string","instrument"],category:"Objects"},{emoji:"📚",keywords:["books","library","read","study"],category:"Objects"},{emoji:"📖",keywords:["book","open","read","study"],category:"Objects"},{emoji:"📕",keywords:["book","closed","red","read"],category:"Objects"},{emoji:"📗",keywords:["book","green","read"],category:"Objects"},{emoji:"📘",keywords:["book","blue","read"],category:"Objects"},{emoji:"📙",keywords:["book","orange","read"],category:"Objects"},{emoji:"📓",keywords:["notebook","write","journal"],category:"Objects"},{emoji:"📒",keywords:["ledger","notebook","write"],category:"Objects"},{emoji:"📃",keywords:["page","document","curl","paper"],category:"Objects"},{emoji:"📄",keywords:["document","page","paper","file"],category:"Objects"},{emoji:"📰",keywords:["newspaper","news","press","paper"],category:"Objects"},{emoji:"🗞️",keywords:["newspaper","rolled","news","paper"],category:"Objects"},{emoji:"📑",keywords:["bookmark","tabs","page","marker"],category:"Objects"},{emoji:"🔖",keywords:["bookmark","mark","page","save"],category:"Objects"},{emoji:"🏷️",keywords:["label","tag","price","sale"],category:"Objects"},{emoji:"✉️",keywords:["envelope","letter","mail","email"],category:"Objects"},{emoji:"📧",keywords:["email","e-mail","mail","message"],category:"Objects"},{emoji:"📨",keywords:["envelope","incoming","mail","receive"],category:"Objects"},{emoji:"📩",keywords:["envelope","arrow","mail","outgoing"],category:"Objects"},{emoji:"📤",keywords:["outbox","sent","mail","tray"],category:"Objects"},{emoji:"📥",keywords:["inbox","receive","mail","tray"],category:"Objects"},{emoji:"📪",keywords:["mailbox","closed","mail","post"],category:"Objects"},{emoji:"📫",keywords:["mailbox","raised","mail","post"],category:"Objects"},{emoji:"📬",keywords:["mailbox","open","mail","post"],category:"Objects"},{emoji:"📭",keywords:["mailbox","lowered","mail","post"],category:"Objects"},{emoji:"📮",keywords:["postbox","mail","post","letter"],category:"Objects"},{emoji:"🗳️",keywords:["ballot","box","vote","election"],category:"Objects"},{emoji:"🛒",keywords:["cart","shopping","trolley","buy"],category:"Objects"},{emoji:"⏰",keywords:["alarm","clock","time","wake"],category:"Objects"},{emoji:"⏱️",keywords:["stopwatch","timer","time","race"],category:"Objects"},{emoji:"⏲️",keywords:["timer","clock","time","countdown"],category:"Objects"},{emoji:"🕰️",keywords:["clock","mantelpiece","time","antique"],category:"Objects"},{emoji:"⌛",keywords:["hourglass","done","time","sand"],category:"Objects"},{emoji:"⏳",keywords:["hourglass","flowing","time","sand"],category:"Objects"},{emoji:"🔔",keywords:["bell","notification","alert","ring"],category:"Objects"},{emoji:"🔕",keywords:["bell","mute","silent","notification"],category:"Objects"},{emoji:"📣",keywords:["megaphone","cheering","announcement"],category:"Objects"},{emoji:"📢",keywords:["loudspeaker","announcement","public"],category:"Objects"},{emoji:"🔊",keywords:["speaker","volume","loud","sound"],category:"Objects"},{emoji:"🔉",keywords:["speaker","volume","medium","sound"],category:"Objects"},{emoji:"🔈",keywords:["speaker","volume","low","sound"],category:"Objects"},{emoji:"🔇",keywords:["mute","speaker","silent","sound"],category:"Objects"},{emoji:"🗑️",keywords:["trash","bin","garbage","delete","waste"],category:"Objects"},{emoji:"❤️",keywords:["heart","red","love"],category:"Symbols"},{emoji:"✅",keywords:["check","yes","done","complete","success","green"],category:"Symbols"},{emoji:"❌",keywords:["cross","no","wrong","delete","red","x"],category:"Symbols"},{emoji:"❎",keywords:["cross","mark","no","square"],category:"Symbols"},{emoji:"➕",keywords:["plus","add","more","positive"],category:"Symbols"},{emoji:"➖",keywords:["minus","subtract","less","negative"],category:"Symbols"},{emoji:"➗",keywords:["divide","division","math"],category:"Symbols"},{emoji:"✖️",keywords:["multiply","x","cross","math"],category:"Symbols"},{emoji:"💯",keywords:["hundred","perfect","score","full"],category:"Symbols"},{emoji:"💢",keywords:["anger","angry","symbol","mad"],category:"Symbols"},{emoji:"💥",keywords:["boom","collision","explosion","crash"],category:"Symbols"},{emoji:"💫",keywords:["dizzy","star","circle","shooting"],category:"Symbols"},{emoji:"💦",keywords:["sweat","droplets","water","splash"],category:"Symbols"},{emoji:"💨",keywords:["dash","running","wind","fast"],category:"Symbols"},{emoji:"🕳️",keywords:["hole","black","empty","void"],category:"Symbols"},{emoji:"💬",keywords:["speech","bubble","talk","comment","chat"],category:"Symbols"},{emoji:"👁️🗨️",keywords:["eye","speech","witness","see"],category:"Symbols"},{emoji:"🗨️",keywords:["speech","bubble","left","talk"],category:"Symbols"},{emoji:"🗯️",keywords:["anger","bubble","right","mad"],category:"Symbols"},{emoji:"💭",keywords:["thought","bubble","think","idea"],category:"Symbols"},{emoji:"💤",keywords:["zzz","sleep","tired","snore"],category:"Symbols"},{emoji:"🔷",keywords:["diamond","blue","shape","rhombus"],category:"Symbols"},{emoji:"🔶",keywords:["diamond","orange","shape","rhombus"],category:"Symbols"},{emoji:"🔹",keywords:["diamond","blue","small","shape"],category:"Symbols"},{emoji:"🔸",keywords:["diamond","orange","small","shape"],category:"Symbols"},{emoji:"🔺",keywords:["triangle","red","up","shape"],category:"Symbols"},{emoji:"🔻",keywords:["triangle","red","down","shape"],category:"Symbols"},{emoji:"◾",keywords:["square","black","medium","shape"],category:"Symbols"},{emoji:"◽",keywords:["square","white","medium","shape"],category:"Symbols"},{emoji:"▪️",keywords:["square","black","small","shape"],category:"Symbols"},{emoji:"▫️",keywords:["square","white","small","shape"],category:"Symbols"},{emoji:"⬛",keywords:["square","black","large","shape"],category:"Symbols"},{emoji:"⬜",keywords:["square","white","large","shape"],category:"Symbols"},{emoji:"🟥",keywords:["square","red","shape","color"],category:"Symbols"},{emoji:"🟧",keywords:["square","orange","shape","color"],category:"Symbols"},{emoji:"🟨",keywords:["square","yellow","shape","color"],category:"Symbols"},{emoji:"🟩",keywords:["square","green","shape","color"],category:"Symbols"},{emoji:"🟦",keywords:["square","blue","shape","color"],category:"Symbols"},{emoji:"🟪",keywords:["square","purple","shape","color"],category:"Symbols"},{emoji:"🟫",keywords:["square","brown","shape","color"],category:"Symbols"},{emoji:"⭕",keywords:["circle","red","hollow","ring"],category:"Symbols"},{emoji:"🔘",keywords:["radio","button","circle","select"],category:"Symbols"},{emoji:"🔴",keywords:["circle","red","dot","round"],category:"Symbols"},{emoji:"🟠",keywords:["circle","orange","dot","round"],category:"Symbols"},{emoji:"🟡",keywords:["circle","yellow","dot","round"],category:"Symbols"},{emoji:"🟢",keywords:["circle","green","dot","round"],category:"Symbols"},{emoji:"🔵",keywords:["circle","blue","dot","round"],category:"Symbols"},{emoji:"🟣",keywords:["circle","purple","dot","round"],category:"Symbols"},{emoji:"🟤",keywords:["circle","brown","dot","round"],category:"Symbols"},{emoji:"⚫",keywords:["circle","black","dot","round"],category:"Symbols"},{emoji:"⚪",keywords:["circle","white","dot","round"],category:"Symbols"},{emoji:"💠",keywords:["diamond","dot","cute","flower","shape"],category:"Symbols"},{emoji:"🔳",keywords:["square","button","white","outline"],category:"Symbols"},{emoji:"🔲",keywords:["square","button","black","outline"],category:"Symbols"},{emoji:"⭐",keywords:["star","yellow","favorite","best"],category:"Symbols"},{emoji:"🌟",keywords:["star","glow","bright","shiny"],category:"Symbols"},{emoji:"✨",keywords:["sparkle","star","shine","magic","new"],category:"Symbols"},{emoji:"⁉️",keywords:["question","exclamation","interrobang","what"],category:"Symbols"},{emoji:"❓",keywords:["question","mark","red","what"],category:"Symbols"},{emoji:"❔",keywords:["question","mark","white","what"],category:"Symbols"},{emoji:"❗",keywords:["exclamation","mark","red","important"],category:"Symbols"},{emoji:"❕",keywords:["exclamation","mark","white","important"],category:"Symbols"},{emoji:"‼️",keywords:["exclamation","double","bang","important"],category:"Symbols"},{emoji:"⚠️",keywords:["warning","caution","alert","danger"],category:"Symbols"},{emoji:"🚫",keywords:["prohibited","no","forbidden","ban","stop"],category:"Symbols"},{emoji:"🔞",keywords:["eighteen","adult","nsfw","age"],category:"Symbols"},{emoji:"📵",keywords:["phone","no","prohibited","mobile"],category:"Symbols"},{emoji:"🔃",keywords:["arrows","clockwise","cycle","rotate"],category:"Symbols"},{emoji:"🔄",keywords:["arrows","counterclockwise","cycle","refresh","reload"],category:"Symbols"},{emoji:"🔙",keywords:["back","arrow","return","previous"],category:"Symbols"},{emoji:"🔚",keywords:["end","arrow","finish","last"],category:"Symbols"},{emoji:"🔛",keywords:["on","arrow","mark","top"],category:"Symbols"},{emoji:"🔜",keywords:["soon","arrow","coming","next"],category:"Symbols"},{emoji:"🔝",keywords:["top","arrow","up","first"],category:"Symbols"},{emoji:"⬆️",keywords:["arrow","up","north","direction"],category:"Symbols"},{emoji:"⬇️",keywords:["arrow","down","south","direction"],category:"Symbols"},{emoji:"⬅️",keywords:["arrow","left","west","direction"],category:"Symbols"},{emoji:"➡️",keywords:["arrow","right","east","direction"],category:"Symbols"},{emoji:"↗️",keywords:["arrow","northeast","up","right"],category:"Symbols"},{emoji:"↘️",keywords:["arrow","southeast","down","right"],category:"Symbols"},{emoji:"↙️",keywords:["arrow","southwest","down","left"],category:"Symbols"},{emoji:"↖️",keywords:["arrow","northwest","up","left"],category:"Symbols"},{emoji:"↕️",keywords:["arrow","up","down","vertical"],category:"Symbols"},{emoji:"↔️",keywords:["arrow","left","right","horizontal"],category:"Symbols"},{emoji:"🔀",keywords:["shuffle","random","crossed","arrows"],category:"Symbols"},{emoji:"🔁",keywords:["repeat","loop","arrows","cycle"],category:"Symbols"},{emoji:"🔂",keywords:["repeat","one","single","loop"],category:"Symbols"},{emoji:"▶️",keywords:["play","arrow","forward","start"],category:"Symbols"},{emoji:"⏩",keywords:["fast","forward","skip","double"],category:"Symbols"},{emoji:"⏭️",keywords:["next","track","skip","forward"],category:"Symbols"},{emoji:"⏯️",keywords:["play","pause","toggle"],category:"Symbols"},{emoji:"◀️",keywords:["reverse","back","left","arrow"],category:"Symbols"},{emoji:"⏪",keywords:["rewind","back","fast","double"],category:"Symbols"},{emoji:"⏮️",keywords:["previous","track","skip","back"],category:"Symbols"},{emoji:"⏸️",keywords:["pause","stop","hold","double"],category:"Symbols"},{emoji:"⏹️",keywords:["stop","square","end"],category:"Symbols"},{emoji:"⏺️",keywords:["record","circle","red","dot"],category:"Symbols"},{emoji:"🎦",keywords:["cinema","movie","film","camera"],category:"Symbols"},{emoji:"🔅",keywords:["dim","low","brightness","sun"],category:"Symbols"},{emoji:"🔆",keywords:["bright","high","brightness","sun"],category:"Symbols"},{emoji:"📶",keywords:["signal","strength","antenna","bars"],category:"Symbols"},{emoji:"📳",keywords:["vibration","mode","phone","silent"],category:"Symbols"},{emoji:"📴",keywords:["off","phone","mobile","silent"],category:"Symbols"},{emoji:"♀️",keywords:["female","woman","venus","gender"],category:"Symbols"},{emoji:"♂️",keywords:["male","man","mars","gender"],category:"Symbols"},{emoji:"⚧️",keywords:["transgender","symbol","gender"],category:"Symbols"},{emoji:"♻️",keywords:["recycle","environment","green","eco"],category:"Symbols"},{emoji:"⚜️",keywords:["fleur","de","lis","scout","french"],category:"Symbols"},{emoji:"🔱",keywords:["trident","emblem","poseidon","anchor"],category:"Symbols"},{emoji:"📛",keywords:["name","badge","tag","id"],category:"Symbols"},{emoji:"🔰",keywords:["beginner","japanese","symbol","new"],category:"Symbols"},{emoji:"⭕",keywords:["circle","o","round","ring"],category:"Symbols"},{emoji:"✅",keywords:["check","mark","button","yes"],category:"Symbols"},{emoji:"☑️",keywords:["check","box","vote","ballot"],category:"Symbols"},{emoji:"✔️",keywords:["check","mark","heavy","done"],category:"Symbols"},{emoji:"©️",keywords:["copyright","c","ip","legal"],category:"Symbols"},{emoji:"®️",keywords:["registered","r","trademark","legal"],category:"Symbols"},{emoji:"™️",keywords:["trademark","tm","brand","legal"],category:"Symbols"},{emoji:"#️⃣",keywords:["hashtag","number","pound","key"],category:"Symbols"},{emoji:"*️⃣",keywords:["asterisk","star","key"],category:"Symbols"},{emoji:"0️⃣",keywords:["zero","number","0","keycap"],category:"Symbols"},{emoji:"1️⃣",keywords:["one","number","1","keycap"],category:"Symbols"},{emoji:"2️⃣",keywords:["two","number","2","keycap"],category:"Symbols"},{emoji:"3️⃣",keywords:["three","number","3","keycap"],category:"Symbols"},{emoji:"4️⃣",keywords:["four","number","4","keycap"],category:"Symbols"},{emoji:"5️⃣",keywords:["five","number","5","keycap"],category:"Symbols"},{emoji:"6️⃣",keywords:["six","number","6","keycap"],category:"Symbols"},{emoji:"7️⃣",keywords:["seven","number","7","keycap"],category:"Symbols"},{emoji:"8️⃣",keywords:["eight","number","8","keycap"],category:"Symbols"},{emoji:"9️⃣",keywords:["nine","number","9","keycap"],category:"Symbols"},{emoji:"🔟",keywords:["ten","number","10","keycap"],category:"Symbols"},{emoji:"🅰️",keywords:["a","letter","blood","type"],category:"Symbols"},{emoji:"🆎",keywords:["ab","blood","type","letter"],category:"Symbols"},{emoji:"🅱️",keywords:["b","letter","blood","type"],category:"Symbols"},{emoji:"🆑",keywords:["cl","clear","button"],category:"Symbols"},{emoji:"🆒",keywords:["cool","word","button"],category:"Symbols"},{emoji:"🆓",keywords:["free","word","button"],category:"Symbols"},{emoji:"ℹ️",keywords:["info","information","help"],category:"Symbols"},{emoji:"🆔",keywords:["id","identity","button"],category:"Symbols"},{emoji:"Ⓜ️",keywords:["m","circle","metro","letter"],category:"Symbols"},{emoji:"🆕",keywords:["new","word","button"],category:"Symbols"},{emoji:"🆖",keywords:["ng","no","good","button"],category:"Symbols"},{emoji:"🅾️",keywords:["o","letter","blood","type"],category:"Symbols"},{emoji:"🆗",keywords:["ok","word","button","yes"],category:"Symbols"},{emoji:"🅿️",keywords:["p","parking","letter","button"],category:"Symbols"},{emoji:"🆘",keywords:["sos","help","emergency","button"],category:"Symbols"},{emoji:"🆙",keywords:["up","word","button","exclamation"],category:"Symbols"},{emoji:"🆚",keywords:["vs","versus","against","button"],category:"Symbols"},{emoji:"🏁",keywords:["checkered","flag","race","finish"],category:"Flags"},{emoji:"🚩",keywords:["flag","triangular","red","post"],category:"Flags"},{emoji:"🎌",keywords:["flags","crossed","japanese","celebration"],category:"Flags"},{emoji:"🏴",keywords:["flag","black","waving"],category:"Flags"},{emoji:"🏳️",keywords:["flag","white","surrender","peace"],category:"Flags"},{emoji:"🏳️🌈",keywords:["rainbow","flag","pride","lgbtq","gay"],category:"Flags"},{emoji:"🏳️⚧️",keywords:["transgender","flag","pride","trans"],category:"Flags"},{emoji:"🏴☠️",keywords:["pirate","flag","jolly","roger","skull"],category:"Flags"},{emoji:"🇺🇸",keywords:["usa","america","flag","united","states"],category:"Flags"},{emoji:"🇬🇧",keywords:["uk","britain","england","flag","united","kingdom"],category:"Flags"},{emoji:"🇨🇦",keywords:["canada","flag","maple"],category:"Flags"},{emoji:"🇦🇺",keywords:["australia","flag","aussie"],category:"Flags"},{emoji:"🇯🇵",keywords:["japan","flag","japanese"],category:"Flags"},{emoji:"🇰🇷",keywords:["korea","south","flag","korean"],category:"Flags"},{emoji:"🇨🇳",keywords:["china","flag","chinese"],category:"Flags"},{emoji:"🇮🇳",keywords:["india","flag","indian"],category:"Flags"},{emoji:"🇩🇪",keywords:["germany","flag","german"],category:"Flags"},{emoji:"🇫🇷",keywords:["france","flag","french"],category:"Flags"},{emoji:"🇮🇹",keywords:["italy","flag","italian"],category:"Flags"},{emoji:"🇪🇸",keywords:["spain","flag","spanish"],category:"Flags"},{emoji:"🇧🇷",keywords:["brazil","flag","brazilian"],category:"Flags"},{emoji:"🇲🇽",keywords:["mexico","flag","mexican"],category:"Flags"},{emoji:"🇷🇺",keywords:["russia","flag","russian"],category:"Flags"},{emoji:"🇳🇱",keywords:["netherlands","flag","dutch","holland"],category:"Flags"},{emoji:"🇸🇪",keywords:["sweden","flag","swedish"],category:"Flags"},{emoji:"🇳🇴",keywords:["norway","flag","norwegian"],category:"Flags"},{emoji:"🇵🇱",keywords:["poland","flag","polish"],category:"Flags"},{emoji:"🇺🇦",keywords:["ukraine","flag","ukrainian"],category:"Flags"}],go=Re.reduce((l,d)=>(l[d.category]||(l[d.category]=[]),l[d.category].push(d),l),{}),po=["Smileys","People","Gestures","Hearts","Animals","Nature","Weather","Food","Tools","Tech","Transport","Objects","Symbols","Flags"];function ko({value:l,onChange:d}){const[s,a]=i.useState(!1),[c,k]=i.useState(""),n=i.useRef(null);i.useEffect(()=>{function g(h){n.current&&!n.current.contains(h.target)&&a(!1)}return document.addEventListener("mousedown",g),()=>document.removeEventListener("mousedown",g)},[]);const y=i.useMemo(()=>{const g=c.trim().toLowerCase();if(!g)return po.map(p=>({category:p,emojis:go[p]||[]})).filter(p=>p.emojis.length>0);const h=Re.filter(p=>p.keywords.some(S=>S.includes(g))||p.emoji===g);return h.length?[{category:"Results",emojis:h}]:[]},[c]),b=g=>{d(g),a(!1),k("")};return e.jsxs("div",{ref:n,className:"emoji-picker-container",children:[e.jsxs("div",{className:"emoji-picker-input-wrapper",children:[e.jsx("input",{type:"text",className:"form-input emoji-picker-input",value:l,onChange:g=>d(g.target.value),placeholder:"🚀",onClick:()=>a(!0),style:{textAlign:"center",fontSize:"18px",paddingRight:"32px"}}),e.jsx("button",{type:"button",className:"emoji-picker-toggle",onClick:()=>a(!s),title:"Browse emojis",children:"▼"})]}),s&&e.jsxs("div",{className:"emoji-picker-dropdown",children:[e.jsx("div",{className:"emoji-picker-search",children:e.jsx("input",{type:"text",className:"form-input",placeholder:"Search emojis...",value:c,onChange:g=>k(g.target.value),autoFocus:!0})}),e.jsx("div",{className:"emoji-picker-grid-container",children:y.length===0?e.jsx("div",{className:"emoji-picker-empty",children:"No emojis found"}):y.map(({category:g,emojis:h})=>e.jsxs("div",{className:"emoji-picker-category",children:[e.jsx("div",{className:"emoji-picker-category-label",children:g}),e.jsx("div",{className:"emoji-picker-grid",children:h.map((p,S)=>e.jsx("button",{type:"button",className:`emoji-picker-item ${l===p.emoji?"selected":""}`,onClick:()=>b(p.emoji),title:p.keywords.slice(0,3).join(", "),children:p.emoji},`${p.emoji}-${S}`))})]},g))})]})]})}async function uo(l){return new Promise((d,s)=>{const a=new FileReader;a.onload=async c=>{var n;const k=(n=c.target)==null?void 0:n.result;if(!k){s(new Error("Failed to read file"));return}try{const y=await wo(k);d(y)}catch(y){s(y)}},a.onerror=()=>{s(new Error("Failed to read file"))},a.readAsArrayBuffer(l)})}async function wo(l){return new Promise((d,s)=>{const a=new DataView(l);if(String.fromCharCode(a.getUint8(0),a.getUint8(1),a.getUint8(2),a.getUint8(3))!=="glTF"){s(new Error("Invalid GLB file: missing glTF magic number"));return}const k=new eo,n=new oo;n.setDecoderPath("https://www.gstatic.com/draco/versioned/decoders/1.5.7/"),k.setDRACOLoader(n),k.setMeshoptDecoder(so);const y=new Blob([l],{type:"model/gltf-binary"}),b=URL.createObjectURL(y);k.load(b,g=>{URL.revokeObjectURL(b),n.dispose();const h=g.animations.map(p=>p.name);h.sort((p,S)=>p.localeCompare(S)),d(h)},void 0,g=>{URL.revokeObjectURL(b),n.dispose();const h=g instanceof Error?g.message:"Unknown error";s(new Error(`Failed to parse GLB: ${h}`))})})}async function jo(l){return new Promise(d=>{if(!l.name.toLowerCase().endsWith(".glb")){d(!1);return}const s=new FileReader;s.onload=a=>{var y;const c=(y=a.target)==null?void 0:y.result;if(!c||c.byteLength<4){d(!1);return}const k=new DataView(c),n=String.fromCharCode(k.getUint8(0),k.getUint8(1),k.getUint8(2),k.getUint8(3));d(n==="glTF")},s.onerror=()=>{d(!1)},s.readAsArrayBuffer(l.slice(0,4))})}function ho(l){return l<1024?`${l} B`:l<1024*1024?`${(l/1024).toFixed(1)} KB`:`${(l/(1024*1024)).toFixed(1)} MB`}async function ze(l,d){const s=Ie(),a=await fetch(D(`/api/custom-class-icons/${l}`),{method:"POST",headers:{"Content-Type":d.type||"image/png","X-Filename":encodeURIComponent(d.name),...s?{"X-Auth-Token":s}:{}},body:d});if(!a.ok){const c=await a.json().catch(()=>({error:a.statusText}));throw new Error(c.error||`Upload failed: ${a.statusText}`)}return a.json()}async function bo(l){const d=Ie(),s=await fetch(D(`/api/custom-class-icons/${l}`),{method:"DELETE",headers:{...d?{"X-Auth-Token":d}:{}}});if(!s.ok)throw new Error(`Failed to delete class icon: ${s.statusText}`)}function fo(l){return l.startsWith("/api/")?Ae(D(l)):Ae(D(`/api/custom-class-icons/${l}`))}function xo(l){return l.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"").substring(0,64)}function Fo({isOpen:l,onClose:d}){const{t:s}=Pe(["tools","common"]),a=ro(),c=ao(),k=to(),[n,y]=i.useState("skills"),[b,g]=i.useState(null),[h,p]=i.useState(!1),[S,A]=i.useState(!1),[w,q]=i.useState(null),[j,B]=i.useState(""),[N,Q]=i.useState(""),[T,M]=i.useState(""),[O,z]=i.useState(""),[H,W]=i.useState("#4a9eff"),[K,U]=i.useState(""),[L,$]=i.useState("character-male-a.glb"),[Z,ee]=i.useState([]),[oe,_]=i.useState(""),[le,Y]=i.useState(!1),[f,X]=i.useState(null),[C,t]=i.useState([]),[u,I]=i.useState({}),[R,ce]=i.useState(1),[se,de]=i.useState(0),[re,ye]=i.useState(0),[ae,me]=i.useState(0),[ge,ue]=i.useState(!1),[we,E]=i.useState(null),pe=i.useRef(null),[ne,te]=i.useState(null),[je,ie]=i.useState(null),he=i.useRef(null),Ee=i.useCallback(()=>A(!1),[]),{handleMouseDown:Be,handleClick:We}=Me(Ee),V=i.useMemo(()=>{const o=P.findIndex(r=>r.file===L);return o>=0?o:0},[L]),Le=i.useMemo(()=>P[V]||P[0],[V]),be=i.useCallback(o=>{const r=o==="prev"?(V-1+P.length)%P.length:(V+1)%P.length;$(P[r].file)},[V]),fe=[...a.filter(o=>{if(!j)return!0;const r=j.toLowerCase();return o.name.toLowerCase().includes(r)||o.description.toLowerCase().includes(r)||o.slug.toLowerCase().includes(r)})].sort((o,r)=>o.enabled!==r.enabled?o.enabled?-1:1:o.name.localeCompare(r.name)),xe=k.filter(o=>{if(!N)return!0;const r=N.toLowerCase();return o.name.toLowerCase().includes(r)||o.description.toLowerCase().includes(r)||o.id.toLowerCase().includes(r)}),Ge=()=>{g(null),p(!0)},De=o=>{g(o),p(!0)},qe=o=>{v.updateSkill(o.id,{enabled:!o.enabled})},He=o=>{const r=[];return o.assignedAgentClasses.length>0&&r.push(s("tools:skills.classCount",{count:o.assignedAgentClasses.length})),o.assignedAgentIds.length>0&&r.push(s("tools:skills.agentCount",{count:o.assignedAgentIds.length})),r.length===0?s("tools:skills.notAssigned"):r.join(", ")},ve=o=>{if(!o.enabled)return 0;const r=new Set;for(const m of c.values())o.assignedAgentClasses.includes(m.class)&&r.add(m.id);for(const m of o.assignedAgentIds)r.add(m);return r.size},Ke=()=>{const o=["#4a9eff","#50fa7b","#ff79c6","#bd93f9","#ffb86c","#8be9fd","#f1fa8c","#ff5555","#6272a4","#44475a","#00d4aa","#ff6b6b","#4ecdc4","#45b7d1","#96ceb4","#ffeaa7","#dfe6e9","#a29bfe","#fd79a8","#00b894"];return o[Math.floor(Math.random()*o.length)]},Ue=()=>{q(null),M(""),z(""),W(Ke()),U(""),$("character-male-a.glb"),ee([]),_(""),Y(!1),X(null),t([]),I({}),ce(1),de(0),ye(0),me(0),E(null),te(null),ie(null),A(!0)},$e=o=>{var m,G,F;const r=k.find(J=>J.id===o);r&&(q(o),M(r.name),z(r.icon),W(r.color),U(r.description),$(r.model||"character-male-a.glb"),ee(r.defaultSkillIds||[]),_(r.instructions||""),Y(!!r.customModelPath),X(null),t(r.availableAnimations||[]),I(r.animationMapping||{}),ce(r.modelScale||1),de(((m=r.modelOffset)==null?void 0:m.x)||0),ye(((G=r.modelOffset)==null?void 0:G.y)||0),me(((F=r.modelOffset)==null?void 0:F.z)||0),E(null),te(null),ie(r.iconPath?fo(r.iconPath):null),A(!0))},_e=async()=>{const o={name:T,icon:O||"🔷",color:H,description:K,defaultSkillIds:Z,instructions:oe||void 0,modelScale:R!==1?R:void 0,modelOffset:se!==0||re!==0||ae!==0?{x:se,y:re,z:ae}:void 0,animationMapping:Object.keys(u).length>0?u:void 0,availableAnimations:C.length>0?C:void 0};if(le||(o.model=L,o.customModelPath=void 0),w){if(v.updateCustomAgentClass(w,o),f&&await Se(w),ne)try{const r=await ze(w,ne);v.updateCustomAgentClass(w,{iconPath:r.iconPath})}catch(r){console.error("Failed to upload class icon:",r)}}else{v.createCustomAgentClass(o);const r=xo(T);if(f&&(await new Promise(m=>setTimeout(m,100)),await Se(r)),ne){await new Promise(m=>setTimeout(m,f?0:100));try{const m=await ze(r,ne);v.updateCustomAgentClass(r,{iconPath:m.iconPath})}catch(m){console.error("Failed to upload class icon:",m)}}}A(!1)},Se=async o=>{if(f){ue(!0),E(null);try{const r=await Oe(D(`/api/custom-models/upload/${o}`),{method:"POST",headers:{"Content-Type":"application/octet-stream","X-Filename":f.name},body:f});if(!r.ok){const m=await r.json();throw new Error(m.error||s("tools:skills.uploadFailed"))}v.updateCustomAgentClass(o,{availableAnimations:C,animationMapping:u,modelScale:R!==1?R:void 0})}catch(r){E(r.message||s("tools:skills.failedToUploadModel")),console.error("Model upload error:",r)}finally{ue(!1)}}},Ye=async o=>{var G;const r=(G=o.target.files)==null?void 0:G[0];if(!r)return;if(E(null),!await jo(r)){E(s("tools:skills.invalidGlbFile"));return}if(r.size>50*1024*1024){E(s("tools:skills.fileTooLarge"));return}try{const F=await uo(r);X(r),t(F),Y(!0);const J={},ke=F.map(x=>x.toLowerCase()),Te=ke.findIndex(x=>x.includes("idle")||x==="static");Te>=0&&(J.idle=F[Te]);const Ce=ke.findIndex(x=>x.includes("walk")||x.includes("run"));Ce>=0&&(J.walk=F[Ce]);const Fe=ke.findIndex(x=>x.includes("work")||x.includes("action")||x.includes("attack")||x.includes("jump"));Fe>=0&&(J.working=F[Fe]),I(J)}catch(F){E(F.message||s("tools:skills.failedToParseModel")),console.error("Model parse error:",F)}o.target.value=""},Xe=async()=>{if(w)try{await Oe(D(`/api/custom-models/${w}`),{method:"DELETE"})}catch(o){console.error("Failed to delete model:",o)}Y(!1),X(null),t([]),I({}),ce(1),$("character-male-a.glb")},Ve=o=>{window.confirm(s("tools:skills.deleteClassConfirm"))&&v.deleteCustomAgentClass(o)},Je=o=>{ee(r=>r.includes(o)?r.filter(m=>m!==o):[...r,o])};return l?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"panel-overlay",onClick:d}),e.jsxs("div",{className:"skills-panel side-panel",children:[e.jsxs("div",{className:"panel-header",children:[e.jsx("h3",{children:s(n==="skills"?"tools:skills.title":"tools:skills.agentClasses")}),n==="skills"?e.jsx("button",{className:"btn btn-sm btn-primary",onClick:Ge,children:s("tools:skills.newSkill")}):e.jsx("button",{className:"btn btn-sm btn-primary",onClick:Ue,children:s("tools:skills.newClass")}),e.jsx("button",{className:"panel-close",onClick:d,children:"×"})]}),e.jsxs("div",{className:"panel-tabs",style:{display:"flex",borderBottom:"1px solid var(--border-color)",padding:"0 16px"},children:[e.jsxs("button",{className:`panel-tab ${n==="skills"?"active":""}`,onClick:()=>y("skills"),style:{padding:"8px 16px",background:"transparent",border:"none",borderBottom:n==="skills"?"2px solid var(--accent-blue)":"2px solid transparent",color:n==="skills"?"var(--text-primary)":"var(--text-secondary)",cursor:"pointer",fontWeight:n==="skills"?600:400},children:[s("tools:skills.title")," (",a.length,")"]}),e.jsxs("button",{className:`panel-tab ${n==="classes"?"active":""}`,onClick:()=>y("classes"),style:{padding:"8px 16px",background:"transparent",border:"none",borderBottom:n==="classes"?"2px solid var(--accent-blue)":"2px solid transparent",color:n==="classes"?"var(--text-primary)":"var(--text-secondary)",cursor:"pointer",fontWeight:n==="classes"?600:400},children:[s("tools:skills.agentClasses")," (",k.length,")"]})]}),n==="skills"&&e.jsx("div",{className:"panel-search",style:{padding:"12px 16px 12px"},children:e.jsx("input",{type:"text",className:"form-input",placeholder:s("tools:skills.searchSkills"),value:j,onChange:o=>B(o.target.value),style:{width:"100%"}})}),n==="classes"&&e.jsx("div",{className:"panel-search",style:{padding:"12px 16px 12px"},children:e.jsx("input",{type:"text",className:"form-input",placeholder:s("tools:skills.searchClasses"),value:N,onChange:o=>Q(o.target.value),style:{width:"100%"}})}),e.jsx("div",{className:"panel-content",style:{flex:1,overflowY:"auto",padding:"0 16px"},children:n==="skills"?fe.length===0?e.jsx("div",{className:"empty-state",style:{textAlign:"center",padding:"40px 20px",opacity:.6},children:j?e.jsx("p",{children:s("tools:skills.noClassesMatch",{query:j})}):e.jsxs(e.Fragment,{children:[e.jsx("p",{children:s("tools:skills.noSkillsDefined")}),e.jsx("p",{style:{fontSize:"12px",marginTop:"8px"},children:s("tools:skills.createSkillsHint")})]})}):e.jsx("div",{className:"skills-list",style:{display:"flex",flexDirection:"column",gap:"8px"},children:fe.map(o=>e.jsxs("div",{className:`skill-card ${o.enabled?"":"disabled"}`,style:{background:"var(--bg-secondary)",borderRadius:"8px",padding:"12px",border:"1px solid var(--border-color)",opacity:o.enabled?1:.6,cursor:"pointer"},onClick:()=>De(o.id),children:[e.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"flex-start"},children:[e.jsxs("div",{style:{flex:1},children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[e.jsx("span",{style:{fontWeight:600,fontSize:"14px"},children:o.name}),o.builtin&&e.jsx("span",{style:{fontSize:"10px",background:"linear-gradient(135deg, var(--accent-cyan), var(--accent-purple))",color:"#fff",padding:"3px 8px",borderRadius:"10px",fontWeight:700,textTransform:"uppercase",letterSpacing:"0.5px",boxShadow:"0 2px 4px rgba(139, 233, 253, 0.3)"},children:s("tools:skills.builtIn")}),!o.enabled&&e.jsx("span",{style:{fontSize:"10px",background:"var(--bg-tertiary)",padding:"2px 6px",borderRadius:"3px"},children:s("tools:skills.disabled")})]}),e.jsxs("div",{style:{fontSize:"11px",color:"var(--text-secondary)",fontFamily:"monospace"},children:["/",o.slug]})]}),e.jsx("button",{className:"btn btn-sm btn-secondary",onClick:r=>{r.stopPropagation(),qe(o)},style:{fontSize:"10px",padding:"4px 8px"},children:o.enabled?s("tools:skills.disable"):s("tools:skills.enable")})]}),e.jsx("p",{style:{fontSize:"12px",color:"var(--text-secondary)",margin:"8px 0",lineHeight:1.4,display:"-webkit-box",WebkitLineClamp:2,WebkitBoxOrient:"vertical",overflow:"hidden"},children:o.description}),e.jsxs("div",{style:{display:"flex",gap:"12px",fontSize:"11px",color:"var(--text-secondary)"},children:[o.builtin&&e.jsx("span",{style:{color:"var(--accent-cyan)"},title:s("tools:skills.builtInTideCommander"),children:"Tide Commander"}),e.jsx("span",{title:s("tools:skills.assignedTo"),children:He(o)}),o.allowedTools.length>0&&e.jsx("span",{title:s("tools:skills.allowedToolsTitle"),children:s("tools:skills.toolCount",{count:o.allowedTools.length})}),o.enabled&&ve(o)>0&&e.jsx("span",{style:{color:"var(--accent-green)"},children:s("tools:skills.activeOnAgents",{count:ve(o)})})]})]},o.id))}):k.length===0?e.jsxs("div",{className:"empty-state",style:{textAlign:"center",padding:"40px 20px",opacity:.6},children:[e.jsx("p",{children:s("tools:skills.noCustomClasses")}),e.jsx("p",{style:{fontSize:"12px",marginTop:"8px"},children:s("tools:skills.createClassesHint")})]}):xe.length===0?e.jsx("div",{className:"empty-state",style:{textAlign:"center",padding:"40px 20px",opacity:.6},children:e.jsx("p",{children:s("tools:skills.noClassesMatch",{query:N})})}):e.jsx("div",{className:"classes-list",style:{display:"flex",flexDirection:"column",gap:"8px",paddingTop:"12px"},children:xe.map(o=>{var r;return e.jsxs("div",{className:"class-card",style:{background:"var(--bg-secondary)",borderRadius:"8px",padding:"12px",border:`1px solid ${o.color}40`,cursor:"pointer"},onClick:()=>$e(o.id),children:[e.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"flex-start"},children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"10px"},children:[e.jsx("div",{style:{width:"36px",height:"36px",borderRadius:"8px",background:`${o.color}20`,display:"flex",alignItems:"center",justifyContent:"center",fontSize:"18px"},children:e.jsx(io,{classId:o.id,size:18})}),e.jsxs("div",{children:[e.jsx("div",{style:{fontWeight:600,fontSize:"14px"},children:o.name}),e.jsxs("div",{style:{fontSize:"11px",color:"var(--text-secondary)"},children:[s("tools:skills.model"),": ",((r=P.find(m=>m.file===o.model))==null?void 0:r.name)||o.model||"Male A"]})]})]}),e.jsx("button",{className:"btn btn-sm btn-secondary",onClick:m=>{m.stopPropagation(),Ve(o.id)},style:{fontSize:"10px",padding:"4px 8px",color:"var(--accent-red)"},children:s("common:buttons.delete")})]}),e.jsx("p",{style:{fontSize:"12px",color:"var(--text-secondary)",margin:"8px 0 0",lineHeight:1.4},children:o.description||s("tools:skills.noDescription")}),e.jsxs("div",{style:{marginTop:"8px",fontSize:"11px",color:"var(--text-secondary)",display:"flex",gap:"12px"},children:[o.defaultSkillIds.length>0&&e.jsx("span",{children:s("tools:skills.defaultSkillCount",{count:o.defaultSkillIds.length})}),o.instructions&&e.jsx("span",{style:{color:"var(--accent-cyan)"},children:s("tools:skills.hasInstructions")})]})]},o.id)})})}),e.jsx("div",{className:"panel-footer",style:{padding:"12px 16px",borderTop:"1px solid var(--border-color)"},children:e.jsx("div",{style:{fontSize:"11px",color:"var(--text-secondary)"},children:n==="skills"?e.jsxs(e.Fragment,{children:[s("tools:skills.total",{count:a.length}),a.filter(o=>o.enabled).length!==a.length&&e.jsxs("span",{children:[" (",s("tools:skills.enabled",{enabledCount:a.filter(o=>o.enabled).length}),")"]})]}):e.jsx(e.Fragment,{children:s("tools:skills.customClassesCount",{count:k.length})})})})]}),e.jsx(mo,{isOpen:h,onClose:()=>p(!1),skillId:b}),S&&e.jsx("div",{className:"modal-overlay visible",onMouseDown:Be,onClick:We,children:e.jsxs("div",{className:"modal skill-editor-modal",children:[e.jsx("div",{className:"modal-header",children:s(w?"tools:skills.editAgentClass":"tools:skills.createAgentClass")}),e.jsxs("div",{className:"modal-body",style:{padding:"16px"},children:[e.jsxs("div",{className:"form-section",style:{marginBottom:"12px"},children:[e.jsx("label",{className:"form-label",children:s("common:labels.name")}),e.jsx("input",{type:"text",className:"form-input",value:T,onChange:o=>M(o.target.value),placeholder:s("tools:skills.classNamePlaceholder")})]}),e.jsxs("div",{className:"form-section",style:{marginBottom:"16px"},children:[e.jsx("label",{className:"form-label",children:s("tools:skills.characterModel")}),e.jsx("input",{ref:pe,type:"file",accept:".glb",onChange:Ye,style:{display:"none"}}),le?e.jsxs(e.Fragment,{children:[e.jsxs("div",{style:{padding:"12px",background:"var(--bg-tertiary)",borderRadius:"8px",border:"1px solid var(--accent-cyan)"},children:[e.jsx("div",{style:{display:"flex",justifyContent:"center",marginBottom:"12px"},children:e.jsx(Ne,{customModelFile:f||void 0,customModelUrl:!f&&w?D(`/api/custom-models/${w}`):void 0,modelScale:R,modelOffset:{x:se,y:re,z:ae},idleAnimation:u.idle!==void 0?u.idle:"",width:120,height:150})}),e.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:"12px"},children:[e.jsxs("div",{children:[e.jsx("div",{style:{fontSize:"12px",fontWeight:500,color:"var(--accent-cyan)"},children:s("tools:skills.customModel")}),e.jsx("div",{style:{fontSize:"11px",color:"var(--text-secondary)",marginTop:"2px"},children:f?`${f.name} (${ho(f.size)})`:s("tools:skills.uploaded")})]}),e.jsx("button",{type:"button",onClick:Xe,style:{padding:"4px 8px",background:"transparent",border:"1px solid var(--accent-red)",borderRadius:"4px",color:"var(--accent-red)",cursor:"pointer",fontSize:"10px"},children:s("tools:skills.removeModel")})]}),e.jsxs("div",{style:{marginBottom:"12px"},children:[e.jsxs("label",{style:{fontSize:"11px",color:"var(--text-secondary)",display:"block",marginBottom:"4px"},children:[s("tools:skills.modelScale"),": ",R.toFixed(3),"x"]}),e.jsx("input",{type:"range",min:"0",max:"100",step:"1",value:Math.log(R/.01)/Math.log(1e4)*100,onChange:o=>{const r=parseFloat(o.target.value),m=.01*Math.pow(1e4,r/100);ce(Math.round(m*1e3)/1e3)},style:{width:"100%"}}),e.jsxs("div",{style:{display:"flex",justifyContent:"space-between",fontSize:"9px",color:"var(--text-muted)",marginTop:"2px"},children:[e.jsx("span",{children:"0.01x"}),e.jsx("span",{children:"1x"}),e.jsx("span",{children:"100x"})]})]}),e.jsxs("div",{style:{marginBottom:"12px"},children:[e.jsxs("label",{style:{fontSize:"11px",color:"var(--text-secondary)",display:"block",marginBottom:"4px"},children:[s("tools:skills.positionOffsetX"),": ",se.toFixed(2)]}),e.jsx("input",{type:"range",min:"-1",max:"1",step:"0.01",value:se,onChange:o=>de(parseFloat(o.target.value)),style:{width:"100%"}})]}),e.jsxs("div",{style:{marginBottom:"12px"},children:[e.jsxs("label",{style:{fontSize:"11px",color:"var(--text-secondary)",display:"block",marginBottom:"4px"},children:[s("tools:skills.positionOffsetY"),": ",re.toFixed(2)]}),e.jsx("input",{type:"range",min:"-1",max:"1",step:"0.01",value:re,onChange:o=>ye(parseFloat(o.target.value)),style:{width:"100%"}})]}),e.jsxs("div",{style:{marginBottom:"12px"},children:[e.jsxs("label",{style:{fontSize:"11px",color:"var(--text-secondary)",display:"block",marginBottom:"4px"},children:[s("tools:skills.positionOffsetZ"),": ",ae.toFixed(2)]}),e.jsx("input",{type:"range",min:"-3",max:"3",step:"0.01",value:ae,onChange:o=>me(parseFloat(o.target.value)),style:{width:"100%"}})]}),C.length>0&&e.jsxs("div",{children:[e.jsxs("div",{style:{fontSize:"11px",color:"var(--text-secondary)",marginBottom:"8px"},children:[s("tools:skills.animationMapping")," (",s("tools:skills.detected",{count:C.length}),")"]}),e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"8px",marginBottom:"6px"},children:[e.jsxs("span",{style:{fontSize:"11px",color:"var(--text-primary)",width:"60px"},children:[s("tools:skills.idle"),":"]}),e.jsxs("select",{value:u.idle||"",onChange:o=>I(r=>({...r,idle:o.target.value||void 0})),style:{flex:1,padding:"4px 8px",background:"var(--bg-secondary)",border:"1px solid var(--border-color)",borderRadius:"4px",color:"var(--text-primary)",fontSize:"11px"},children:[e.jsx("option",{value:"",children:s("tools:skills.none")}),C.map(o=>e.jsx("option",{value:o,children:o},o))]})]}),e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"8px",marginBottom:"6px"},children:[e.jsxs("span",{style:{fontSize:"11px",color:"var(--text-primary)",width:"60px"},children:[s("tools:skills.walk"),":"]}),e.jsxs("select",{value:u.walk||"",onChange:o=>I(r=>({...r,walk:o.target.value||void 0})),style:{flex:1,padding:"4px 8px",background:"var(--bg-secondary)",border:"1px solid var(--border-color)",borderRadius:"4px",color:"var(--text-primary)",fontSize:"11px"},children:[e.jsx("option",{value:"",children:s("tools:skills.none")}),C.map(o=>e.jsx("option",{value:o,children:o},o))]})]}),e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[e.jsxs("span",{style:{fontSize:"11px",color:"var(--text-primary)",width:"60px"},children:[s("tools:skills.working"),":"]}),e.jsxs("select",{value:u.working||"",onChange:o=>I(r=>({...r,working:o.target.value||void 0})),style:{flex:1,padding:"4px 8px",background:"var(--bg-secondary)",border:"1px solid var(--border-color)",borderRadius:"4px",color:"var(--text-primary)",fontSize:"11px"},children:[e.jsx("option",{value:"",children:s("tools:skills.noneBounce")}),C.map(o=>e.jsx("option",{value:o,children:o},o))]})]})]}),C.length===0&&e.jsx("div",{style:{fontSize:"11px",color:"var(--text-muted)",fontStyle:"italic"},children:s("tools:skills.noAnimations")})]}),e.jsx("button",{type:"button",onClick:()=>{var o;return(o=pe.current)==null?void 0:o.click()},style:{width:"100%",marginTop:"8px",padding:"6px 12px",background:"var(--bg-secondary)",border:"1px solid var(--border-color)",borderRadius:"6px",color:"var(--text-secondary)",cursor:"pointer",fontSize:"11px"},children:s("tools:skills.replaceModel")})]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",gap:"12px",padding:"12px",background:"var(--bg-tertiary)",borderRadius:"8px",border:"1px solid var(--border-color)"},children:[e.jsx("button",{type:"button",onClick:()=>be("prev"),style:{width:"36px",height:"36px",borderRadius:"50%",border:"1px solid var(--border-color)",background:"var(--bg-secondary)",color:"var(--text-primary)",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",fontSize:"18px"},children:"‹"}),e.jsxs("div",{style:{textAlign:"center"},children:[e.jsx(Ne,{modelFile:L,width:120,height:150}),e.jsx("div",{style:{marginTop:"8px",fontSize:"12px",fontWeight:500,color:"var(--text-primary)"},children:Le.name}),e.jsxs("div",{style:{fontSize:"10px",color:"var(--text-secondary)",marginTop:"2px"},children:[V+1," / ",P.length]})]}),e.jsx("button",{type:"button",onClick:()=>be("next"),style:{width:"36px",height:"36px",borderRadius:"50%",border:"1px solid var(--border-color)",background:"var(--bg-secondary)",color:"var(--text-primary)",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",fontSize:"18px"},children:"›"})]}),e.jsx("button",{type:"button",onClick:()=>{var o;return(o=pe.current)==null?void 0:o.click()},style:{width:"100%",marginTop:"8px",padding:"8px 12px",background:"var(--bg-secondary)",border:"1px dashed var(--border-color)",borderRadius:"6px",color:"var(--text-secondary)",cursor:"pointer",fontSize:"12px"},children:s("tools:skills.uploadCustomModel")})]}),we&&e.jsx("div",{style:{marginTop:"8px",padding:"8px",background:"rgba(255, 85, 85, 0.1)",border:"1px solid var(--accent-red)",borderRadius:"4px",fontSize:"11px",color:"var(--accent-red)"},children:we})]}),e.jsxs("div",{style:{display:"flex",gap:"12px",marginBottom:"12px"},children:[e.jsxs("div",{className:"form-section",style:{flex:"0 0 80px"},children:[e.jsx("label",{className:"form-label",children:s("tools:skills.icon")}),je?e.jsxs("div",{className:"class-icon-preview-container",children:[e.jsx("img",{src:je,alt:"Class icon",className:"class-icon-preview-img"}),e.jsx("button",{className:"class-icon-preview-remove",onClick:()=>{if(te(null),ie(null),w){const o=k.find(r=>r.id===w);o!=null&&o.iconPath&&bo(w).then(()=>{v.updateCustomAgentClass(w,{iconPath:void 0})}).catch(r=>console.error("Failed to delete class icon:",r))}},title:"Remove icon",children:"×"})]}):e.jsx(ko,{value:O,onChange:o=>{z(o),te(null),ie(null)}})]}),e.jsxs("div",{className:"form-section",style:{flex:"0 0 auto",display:"flex",flexDirection:"column",justifyContent:"flex-end"},children:[e.jsx("input",{ref:he,type:"file",accept:"image/png,image/jpeg,image/gif,image/webp,image/svg+xml",style:{display:"none"},onChange:o=>{var m;const r=(m=o.target.files)==null?void 0:m[0];if(r){te(r),z("");const G=URL.createObjectURL(r);ie(G)}o.target.value=""}}),e.jsxs("button",{className:"class-icon-upload-btn",onClick:()=>{var o;return(o=he.current)==null?void 0:o.click()},title:"Upload custom icon",children:[e.jsx("span",{className:"class-icon-upload-icon",children:"+"}),e.jsx("span",{className:"class-icon-upload-label",children:"IMG"})]})]}),e.jsxs("div",{className:"form-section",style:{flex:1},children:[e.jsx("label",{className:"form-label",children:s("tools:skills.color")}),e.jsx("input",{type:"color",value:H,onChange:o=>W(o.target.value),style:{width:"100%",height:"36px",padding:"2px",cursor:"pointer"}})]})]}),e.jsxs("div",{className:"form-section",style:{marginBottom:"12px"},children:[e.jsx("label",{className:"form-label",children:s("common:labels.description")}),e.jsx("input",{type:"text",className:"form-input",value:K,onChange:o=>U(o.target.value),placeholder:s("tools:skills.classDescriptionPlaceholder")})]}),e.jsxs("div",{className:"form-section",style:{marginBottom:"12px"},children:[e.jsx("label",{className:"form-label",children:s("tools:skills.defaultSkillsLabel")}),e.jsx("p",{className:"form-hint",style:{fontSize:"11px",color:"var(--text-secondary)",marginBottom:"8px"},children:s("tools:skills.defaultSkillsHint")}),e.jsx("div",{style:{maxHeight:"120px",overflowY:"auto",border:"1px solid var(--border-color)",borderRadius:"6px",padding:"8px"},children:a.filter(o=>o.enabled).length===0?e.jsx("div",{style:{color:"var(--text-muted)",fontSize:"12px",textAlign:"center",padding:"12px"},children:s("tools:skills.noEnabledSkills")}):a.filter(o=>o.enabled).map(o=>e.jsxs("div",{onClick:()=>Je(o.id),style:{display:"flex",alignItems:"center",gap:"8px",padding:"6px 8px",borderRadius:"4px",cursor:"pointer",background:Z.includes(o.id)?"rgba(80, 250, 123, 0.15)":"transparent"},children:[e.jsx("span",{style:{width:"16px",color:"var(--dracula-green)"},children:Z.includes(o.id)?e.jsx(lo,{name:"check",size:12}):null}),e.jsx("span",{style:{fontSize:"13px"},children:o.name})]},o.id))})]}),e.jsxs("div",{className:"form-section",children:[e.jsx("label",{className:"form-label",children:s("tools:skills.instructionsLabel")}),e.jsx("p",{className:"form-hint",style:{fontSize:"11px",color:"var(--text-secondary)",marginBottom:"8px"},children:s("tools:skills.instructionsHint")}),e.jsx("textarea",{className:"form-input",value:oe,onChange:o=>_(o.target.value),placeholder:`# Agent Instructions
|
|
23
|
+
|
|
24
|
+
You are a specialized agent...
|
|
25
|
+
|
|
26
|
+
## Guidelines
|
|
27
|
+
- Follow these rules...
|
|
28
|
+
- Use best practices...`,style:{minHeight:"150px",resize:"vertical",fontFamily:"monospace",fontSize:"12px",lineHeight:"1.5"}})]})]}),e.jsxs("div",{className:"modal-footer",style:{display:"flex",gap:"8px",justifyContent:"flex-end",padding:"12px 16px",borderTop:"1px solid var(--border-color)"},children:[e.jsx("button",{className:"btn btn-secondary",onClick:()=>A(!1),disabled:ge,children:s("common:buttons.cancel")}),e.jsx("button",{className:"btn btn-primary",onClick:_e,disabled:!T.trim()||ge,children:s(ge?"tools:skills.uploading":w?"common:buttons2.saveChanges":"tools:skills.createClass")})]})]})})]}):null}export{Fo as SkillsPanel};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{u as Ve,aq as Ze,ar as es,as as ss,at as as,r as t,C as ye,S as ne,au as te,A as Ae,l as le,av as ns,s as S,h as ts,j as s,aw as ls,N as De,ax as x,ay as os,az as oe,I as ie,ab as T,a9 as K,aA as is,aa as ce,aB as cs,E as rs}from"./main-Cqo-Awpr.js";import"./vendor-react--Eh9ivFN.js";import"./vendor-three-Chj50gSY.js";function Ee(r,g){const b=g.filter(C=>!r.has(C));return b.length===0?`${g[Math.floor(Math.random()*g.length)]}-${Date.now()%1e3}`:b[Math.floor(Math.random()*b.length)]}function us({isOpen:r,onClose:g,onSpawnStart:b,onSpawnEnd:C,spawnPosition:Ie,spawnAreaId:N}){const{t:a}=Ve(["terminal","common"]),P=Ze(),p=es(),re=ss(),H=re.length>0?re:as,[m,v]=t.useState(""),[M,F]=t.useState(()=>ye(ne.LAST_CWD)),[i,k]=t.useState("scout"),[de,E]=t.useState(!1),[Le,z]=t.useState(!1),[pe,J]=t.useState(!1),[me,ue]=t.useState(""),[y,Y]=t.useState([]),[A,R]=t.useState(null),[_e,he]=t.useState(!1),[I,we]=t.useState(""),[h,$e]=t.useState(""),[U,Te]=t.useState(!1),[q,Pe]=t.useState("bypass"),[o,X]=t.useState("claude"),[j,L]=t.useState({fullAuto:!0,sandbox:"workspace-write",approvalMode:"on-request",search:!1}),[xe,Q]=t.useState(new Set),[V,fe]=t.useState("opus[1m]"),[Z,ge]=t.useState("xHigh"),[ee,Fe]=t.useState("gpt-5.3-codex"),[se,ze]=t.useState("minimax/MiniMax-M1-80k"),[je,Re]=t.useState(""),[D,Ue]=t.useState(""),O=t.useRef(null),Ne=t.useRef(!1),_=t.useCallback(()=>{window.__spawnModalAreaContext=null},[]),w=t.useMemo(()=>P.filter(e=>e.enabled),[P]),qe=["full-notifications","streaming-exec","task-label","report-task-to-boss","agent-tracking","send-message-to-agent"];t.useEffect(()=>{if(r&&!Ne.current){if(w.length>0){const l=w.filter(c=>qe.includes(c.slug)).map(c=>c.id);l.length>0&&Q(new Set(l))}const n=ye(ne.DEFAULT_AGENT_CLASS);if(n==="random"){const c=[...Object.keys(cs),...p.map(u=>u.id)];k(c[Math.floor(Math.random()*c.length)])}else k(n||"scout")}Ne.current=r},[r,w,p]);const ve=t.useMemo(()=>{if(!D.trim())return w;const e=D.toLowerCase();return w.filter(n=>n.name.toLowerCase().includes(e)||n.description.toLowerCase().includes(e)||n.slug.toLowerCase().includes(e))},[w,D]),Oe=t.useCallback(e=>{Q(n=>{const l=new Set(n);return l.has(e)?l.delete(e):l.add(e),l})},[]);t.useMemo(()=>w.filter(e=>e.assignedAgentClasses.includes(i)),[w,i]);const We=t.useMemo(()=>{var n;const e=p.find(l=>l.id===i);return(n=e==null?void 0:e.defaultSkillIds)!=null&&n.length?P.filter(l=>e.defaultSkillIds.includes(l.id)):[]},[p,i,P]),Se=t.useMemo(()=>{if(!I.trim())return y;const e=I.toLowerCase();return y.filter(n=>n.sessionId.toLowerCase().includes(e)||n.projectPath.toLowerCase().includes(e)||n.firstMessage&&n.firstMessage.toLowerCase().includes(e))},[y,I]),W=t.useMemo(()=>{if(!h.trim())return p;const e=h.toLowerCase();return p.filter(n=>n.name.toLowerCase().includes(e)||n.description.toLowerCase().includes(e)||n.id.toLowerCase().includes(e))},[p,h]),B=t.useMemo(()=>{if(!h.trim())return te;const e=h.toLowerCase();return te.filter(n=>{const l=Ae[n.id];return n.name.toLowerCase().includes(e)||n.id.toLowerCase().includes(e)||l.description.toLowerCase().includes(e)})},[h]);t.useEffect(()=>{if(!r||!h.trim())return;const e=[...W.map(n=>n.id),...B.map(n=>n.id)];e.length===1&&e[0]!==i&&k(e[0])},[r,h,W,B,i]);const d=t.useMemo(()=>p.find(e=>e.id===i),[p,i]),Be=t.useMemo(()=>{if(d!=null&&d.model)return d.model},[d]),Ge=t.useMemo(()=>{if(d!=null&&d.customModelPath)return le(`/api/custom-models/${d.id}`)},[d]),Ke=d==null?void 0:d.modelScale,He=t.useMemo(()=>d?"scout":i,[i,d]),G=t.useCallback(async e=>{he(!0);try{const n=e?le(`/api/agents/claude-sessions?cwd=${encodeURIComponent(e)}`):le("/api/agents/claude-sessions"),c=await(await ns(n)).json();Y(c.sessions||[])}catch(n){console.error("Failed to fetch sessions:",n),Y([])}finally{he(!1)}},[]);t.useEffect(()=>{r?G(M||void 0):(Y([]),R(null),we(""))},[r,G]),t.useEffect(()=>{if(!r)return;const e=setTimeout(()=>{G(M||void 0),R(null)},300);return()=>clearTimeout(e)},[M,r,G]),t.useEffect(()=>{if(!r||!N)return;const e=S.getState().areas.get(N);if(e!=null&&e.directories&&e.directories.length>0){F(e.directories[0]);return}const n=Array.from(S.getState().agents.values()).filter(f=>{var $;return(($=S.getAreaForAgent(f.id))==null?void 0:$.id)===N&&f.cwd});if(n.length===0)return;const l=new Map;for(const f of n)l.set(f.cwd,(l.get(f.cwd)||0)+1);let c="",u=0;for(const[f,$]of l)$>u&&(c=f,u=$);c&&F(c)},[r,N]),t.useEffect(()=>{if(r){const e=new Set(Array.from(S.getState().agents.values()).map(u=>u.name)),n=Ee(e,H),l=p.find(u=>u.id===i),c=l?`${l.name} ${n}`:n;v(c),O.current&&(O.current.focus(),O.current.select())}},[r,H]),t.useEffect(()=>{if(!r)return;const e=p.find(n=>n.id===i);if(e){const n=p.find(l=>m.startsWith(l.name+" "));if(n){const l=m.substring(n.name.length+1);v(`${e.name} ${l}`)}else v(`${e.name} ${m}`)}else{const n=p.find(l=>m.startsWith(l.name+" "));if(n){const l=m.substring(n.name.length+1);v(l)}}},[i]),t.useEffect(()=>{i==="boss"&&fe("claude-opus-4-7")},[i]);const Je=()=>{var c;console.log("[SpawnModal] handleSpawn called"),z(!1);const e=A&&((c=y.find(u=>u.sessionId===A))==null?void 0:c.projectPath)||M;if(console.log("[SpawnModal] Effective CWD:",e),console.log("[SpawnModal] Agent name:",m),console.log("[SpawnModal] Agent class:",i),console.log("[SpawnModal] Permission mode:",q),console.log("[SpawnModal] Provider:",o),console.log("[SpawnModal] Use Chrome:",U),console.log("[SpawnModal] Session ID:",A||"none"),!e.trim()){console.error("[SpawnModal] Empty CWD, showing error"),z(!0);return}if(!m.trim()){console.log("[SpawnModal] Empty name, regenerating");const u=new Set(Array.from(S.getState().agents.values()).map(f=>f.name));v(Ee(u,H));return}rs(ne.LAST_CWD,e),E(!0),b();const n=Array.from(xe),l=je.trim()||void 0;console.log("[SpawnModal] Calling store.spawnAgent with:",{name:m.trim(),class:i,cwd:e.trim(),sessionId:A||void 0,useChrome:o==="claude"?U:!1,permissionMode:q,provider:o,codexConfig:o==="codex"?j:void 0,codexModel:o==="codex"?ee:void 0,opencodeModel:o==="opencode"?se:void 0,initialSkillIds:n,model:o==="claude"?V:void 0,customInstructions:l?`${l.length} chars`:void 0,spawnAreaId:N||void 0}),window.__spawnModalAreaContext=N?{areaId:N}:null,S.spawnAgent(m.trim(),i,e.trim(),Ie||void 0,A||void 0,o==="claude"?U:!1,q,n,o,o==="codex"?j:void 0,o==="codex"?ee:void 0,o==="claude"?V:void 0,l,o==="claude"?Z:void 0,o==="opencode"?se:void 0)},be=()=>{console.log("[SpawnModal] Agent creation successful"),E(!1),v(""),Q(new Set),_(),C(),g()},Ce=()=>{console.error("[SpawnModal] Agent creation failed"),E(!1),z(!0),_(),C()},Me=e=>{console.log("[SpawnModal] Directory not found:",e),E(!1),ue(e),J(!0),C()},ke=()=>{J(!1),E(!0),b(),S.createDirectoryAndSpawn(me,m.trim(),i)},ae=()=>{J(!1),ue(""),_()};t.useEffect(()=>(window.__spawnModalSuccess=be,window.__spawnModalError=Ce,window.__spawnModalDirNotFound=Me,()=>{_(),delete window.__spawnModalSuccess,delete window.__spawnModalError,delete window.__spawnModalDirNotFound}),[m,i,be,Ce,Me,_]);const{handleMouseDown:Ye,handleClick:Xe}=ts(g),Qe=e=>{e.key==="Escape"&&g()};return!r&&!pe?null:pe?s.jsx("div",{className:"modal-overlay visible",onClick:ae,onKeyDown:e=>{e.key==="Escape"&&ae(),e.key==="Enter"&&ke()},children:s.jsxs("div",{className:"modal confirm-modal",onClick:e=>e.stopPropagation(),children:[s.jsx("div",{className:"modal-header",children:a("terminal:spawn.directoryNotFound")}),s.jsxs("div",{className:"modal-body confirm-modal-body",children:[s.jsx("p",{children:a("terminal:spawn.directoryNotExist")}),s.jsx("code",{className:"confirm-modal-path",children:me}),s.jsx("p",{children:a("terminal:spawn.wouldYouCreate")})]}),s.jsxs("div",{className:"modal-footer",children:[s.jsx("button",{className:"btn btn-secondary",onClick:ae,children:a("common:buttons.cancel")}),s.jsx("button",{className:"btn btn-primary",onClick:ke,autoFocus:!0,children:a("terminal:spawn.createDirectory")})]})]})}):s.jsx("div",{className:`modal-overlay ${r?"visible":""}`,onMouseDown:Ye,onClick:Xe,onKeyDown:Qe,children:s.jsxs("div",{className:"modal spawn-modal",children:[s.jsx("div",{className:"modal-header",children:a("terminal:spawn.deployTitle")}),s.jsxs("div",{className:"modal-body spawn-modal-body",children:[s.jsxs("div",{className:"spawn-top-section",children:[s.jsx("div",{className:"spawn-preview-compact",children:s.jsx(ls,{agentClass:He,modelFile:Be,customModelUrl:Ge,modelScale:Ke,width:100,height:120})}),s.jsxs("div",{className:"spawn-class-section",children:[s.jsx("div",{className:"spawn-class-label",children:a("terminal:spawn.agentClass")}),p.length+te.length>6&&s.jsx("input",{type:"text",className:"spawn-input class-search-input",placeholder:a("terminal:spawn.filterClasses"),value:h,onChange:e=>$e(e.target.value)}),s.jsxs("div",{className:"class-selector-inline",children:[W.map(e=>s.jsxs("button",{className:`class-chip ${i===e.id?"selected":""}`,onClick:()=>k(e.id),title:e.description,children:[s.jsx(De,{classId:e.id,size:18,className:"class-chip-icon"}),s.jsx("span",{className:"class-chip-name",children:e.name})]},e.id)),B.map(e=>{const n=Ae[e.id];return s.jsxs("button",{className:`class-chip ${i===e.id?"selected":""}`,onClick:()=>k(e.id),title:n.description,children:[s.jsx(De,{classId:e.id,size:18,className:"class-chip-icon"}),s.jsx("span",{className:"class-chip-name",children:e.name})]},e.id)}),h&&W.length===0&&B.length===0&&s.jsx("div",{className:"class-search-empty",children:a("terminal:spawn.noClassesMatch",{query:h})})]})]})]}),s.jsxs("div",{className:"spawn-form-section",children:[s.jsxs("div",{className:"spawn-form-row",children:[s.jsxs("div",{className:"spawn-field",children:[s.jsx("label",{className:"spawn-label",children:a("common:labels.name")}),s.jsx("input",{ref:O,type:"text",className:"spawn-input",placeholder:a("terminal:spawn.agentNamePlaceholder"),value:m,onChange:e=>v(e.target.value)})]}),s.jsxs("div",{className:"spawn-field spawn-field-wide",children:[s.jsxs("label",{className:"spawn-label",children:[a("terminal:spawn.workingDir"),s.jsx(x,{text:a("terminal:spawn.helpWorkingDir"),title:a("terminal:spawn.workingDir"),position:"top",size:"sm"})]}),s.jsx(os,{value:M,onChange:e=>{F(e),z(!1)},placeholder:a("terminal:spawn.workingDirPlaceholder"),className:`spawn-input ${Le?"error":""}`,directoriesOnly:!0})]})]}),s.jsxs("div",{className:"spawn-form-row",children:[s.jsxs("div",{className:"spawn-field",children:[s.jsxs("label",{className:"spawn-label",children:[a("terminal:spawn.selectRuntime"),s.jsx(x,{text:a("terminal:spawn.helpRuntime"),title:a("terminal:spawn.runtimeTitle"),position:"top",size:"sm"})]}),s.jsxs("div",{className:"spawn-select-row",children:[s.jsxs("button",{className:`spawn-select-btn ${o==="claude"?"selected":""}`,onClick:()=>X("claude"),title:a("terminal:spawn.useClaudeCli"),children:[s.jsx("img",{src:"/assets/claude.ico",alt:"Claude",className:"spawn-provider-icon"}),s.jsx("span",{children:"Claude"})]}),s.jsxs("button",{className:`spawn-select-btn ${o==="codex"?"selected":""}`,onClick:()=>X("codex"),title:a("terminal:spawn.useCodexCli"),children:[s.jsx("img",{src:"/assets/codex.ico",alt:"Codex",className:"spawn-provider-icon"}),s.jsx("span",{children:"Codex"})]}),s.jsxs("button",{className:`spawn-select-btn spawn-select-btn--opencode ${o==="opencode"?"selected":""}`,onClick:()=>X("opencode"),title:"Use OpenCode CLI (multi-provider)",children:[s.jsx("img",{src:"/assets/opencode.svg",alt:"OpenCode",className:"spawn-provider-icon"}),s.jsx("span",{children:"OpenCode"})]})]})]}),s.jsxs("div",{className:"spawn-field",children:[s.jsxs("label",{className:"spawn-label",children:[a("common:labels.permissions"),s.jsx(x,{text:a("terminal:spawn.helpPermission"),title:a("terminal:spawn.permissionMode"),position:"top",size:"sm"})]}),s.jsx("div",{className:"spawn-select-row",children:Object.keys(oe).map(e=>s.jsxs("button",{className:`spawn-select-btn ${q===e?"selected":""}`,onClick:()=>Pe(e),title:oe[e].description,children:[s.jsx("span",{children:s.jsx(ie,{name:e==="bypass"?"bolt":"lock",size:12})}),s.jsx("span",{children:oe[e].label})]},e))})]})]}),s.jsx("div",{className:"spawn-form-row",children:s.jsxs("div",{className:"spawn-field",children:[s.jsxs("label",{className:"spawn-label",children:[a("common:labels.model"),s.jsx(x,{text:a("terminal:spawn.helpModel"),title:a("terminal:spawn.modelTitle"),position:"top",size:"sm"})]}),o==="claude"?s.jsx("div",{className:"spawn-select-row spawn-select-row--wrap",children:Object.keys(T).filter(e=>!T[e].deprecated).map(e=>s.jsxs("button",{className:`spawn-select-btn ${V===e?"selected":""}`,onClick:()=>fe(e),title:T[e].description,children:[s.jsx("span",{children:T[e].icon}),s.jsx("span",{children:T[e].label})]},e))}):o==="codex"?s.jsx("div",{className:"spawn-select-row spawn-select-row--codex-models",children:Object.keys(K).map(e=>s.jsxs("button",{className:`spawn-select-btn ${ee===e?"selected":""}`,onClick:()=>Fe(e),title:K[e].description,children:[s.jsx("span",{children:K[e].icon}),s.jsx("span",{children:K[e].label})]},e))}):o==="opencode"?s.jsx(is,{value:se,onChange:ze,inputId:"spawn-opencode-model"}):s.jsx("div",{className:"spawn-inline-hint",children:a("terminal:spawn.chooseCodexModel")})]})}),s.jsxs("div",{className:"spawn-form-row",children:[o==="claude"&&s.jsxs("div",{className:"spawn-field",children:[s.jsx("label",{className:"spawn-label",children:"Effort"}),s.jsxs("div",{className:"spawn-select-row spawn-select-row--effort",children:[s.jsx("button",{className:`spawn-select-btn spawn-select-btn--compact ${Z===void 0?"selected":""}`,onClick:()=>ge(void 0),title:"Use default effort level",children:s.jsx("span",{children:"Default"})}),Object.keys(ce).map(e=>s.jsx("button",{className:`spawn-select-btn spawn-select-btn--compact ${Z===e?"selected":""}`,onClick:()=>ge(e),title:ce[e].description,children:s.jsx("span",{children:ce[e].label})},e))]})]}),s.jsxs("div",{className:"spawn-field",children:[s.jsx("label",{className:"spawn-label",children:a("terminal:spawn.browser")}),s.jsxs("label",{className:"spawn-checkbox",children:[s.jsx("input",{type:"checkbox",checked:U,onChange:e=>Te(e.target.checked),disabled:o!=="claude"}),s.jsxs("span",{children:[s.jsx(ie,{name:"globe",size:12})," ",a("terminal:spawn.chromeBrowser")]}),s.jsx(x,{text:a(o==="claude"?"terminal:spawn.helpChrome":"terminal:spawn.helpChromeDisabled"),title:a("terminal:spawn.chromeBrowser"),position:"top",size:"sm"})]})]})]}),o==="codex"&&s.jsxs("div",{className:"codex-config-section",children:[s.jsx("div",{className:"codex-config-title",children:a("terminal:spawn.codex.configuration")}),s.jsxs("div",{className:"codex-config-options",children:[s.jsxs("div",{className:"codex-option-group",children:[s.jsxs("label",{className:"spawn-checkbox",children:[s.jsx("input",{type:"checkbox",checked:j.fullAuto!==!1,onChange:e=>L(n=>({...n,fullAuto:e.target.checked}))}),s.jsx("span",{children:a("terminal:spawn.codex.fullAuto")}),s.jsx(x,{text:a("terminal:spawn.helpFullAuto"),title:a("terminal:spawn.fullAutoTitle"),position:"top",size:"sm"})]}),s.jsxs("label",{className:"spawn-checkbox",children:[s.jsx("input",{type:"checkbox",checked:!!j.search,onChange:e=>L(n=>({...n,search:e.target.checked}))}),s.jsx("span",{children:a("terminal:spawn.codex.search")}),s.jsx(x,{text:a("terminal:spawn.helpSearch"),title:a("terminal:spawn.searchTitle"),position:"top",size:"sm"})]})]}),j.fullAuto===!1&&s.jsxs("div",{className:"codex-option-group",children:[s.jsx("div",{className:"codex-option-header",children:a("terminal:spawn.codex.restrictions")}),s.jsxs("select",{className:"spawn-input codex-select",value:j.sandbox||"workspace-write",onChange:e=>L(n=>({...n,sandbox:e.target.value})),children:[s.jsxs("option",{value:"read-only",children:["📖 ",a("terminal:spawn.codex.sandboxReadOnly")]}),s.jsxs("option",{value:"workspace-write",children:["✏️ ",a("terminal:spawn.codex.sandboxWorkspaceWrite")]}),s.jsxs("option",{value:"danger-full-access",children:["⚡ ",a("terminal:spawn.codex.sandboxDangerFullAccess")]})]}),s.jsxs("select",{className:"spawn-input codex-select",value:j.approvalMode||"on-request",onChange:e=>L(n=>({...n,approvalMode:e.target.value})),children:[s.jsxs("option",{value:"untrusted",children:["🔒 ",a("terminal:spawn.codex.approvalsUntrusted")]}),s.jsxs("option",{value:"on-failure",children:["⚠️ ",a("terminal:spawn.codex.approvalsOnFailure")]}),s.jsxs("option",{value:"on-request",children:["🤔 ",a("terminal:spawn.codex.approvalsOnRequest")]}),s.jsxs("option",{value:"never",children:["✅ ",a("terminal:spawn.codex.approvalsNever")]})]})]}),s.jsxs("div",{className:"codex-option-group",children:[s.jsx("div",{className:"codex-option-header",children:a("terminal:spawn.codex.profile")}),s.jsx("input",{type:"text",className:"spawn-input codex-profile-input",placeholder:a("terminal:spawn.codex.profilePlaceholder"),value:j.profile||"",onChange:e=>L(n=>({...n,profile:e.target.value||void 0}))})]})]})]}),w.length>0&&s.jsxs("div",{className:"spawn-skills-section",children:[s.jsxs("label",{className:"spawn-label",children:[a("terminal:spawn.skills")," ",s.jsxs("span",{className:"spawn-label-hint",children:["(",a("common:labels.optional"),")"]}),s.jsx(x,{text:a("terminal:spawn.helpSkills"),title:a("terminal:spawn.skillsTitle"),position:"top",size:"sm"})]}),w.length>6&&s.jsx("input",{type:"text",className:"spawn-input skill-search-input",placeholder:a("terminal:spawn.filterSkills"),value:D,onChange:e=>Ue(e.target.value)}),s.jsxs("div",{className:"spawn-skills-inline",children:[ve.map(e=>{const n=xe.has(e.id);return We.some(c=>c.id===e.id)?null:s.jsxs("button",{className:`spawn-skill-chip ${n?"selected":""}`,onClick:()=>Oe(e.id),title:e.description,children:[n&&s.jsx("span",{className:"spawn-skill-check",children:s.jsx(ie,{name:"check",size:10})}),s.jsx("span",{children:e.name}),e.builtin&&s.jsx("span",{className:"spawn-skill-builtin",children:"TC"})]},e.id)}),D&&ve.length===0&&s.jsx("div",{className:"skill-search-empty",children:a("terminal:spawn.noSkillsMatch",{query:D})})]})]}),s.jsxs("div",{className:"spawn-custom-instructions-section",children:[s.jsxs("label",{className:"spawn-label",children:[a("terminal:spawn.customInstructions")," ",s.jsxs("span",{className:"spawn-label-hint",children:["(",a("common:labels.optional"),")"]}),s.jsx(x,{text:a("terminal:spawn.helpCustomInstructions"),title:a("terminal:spawn.customInstructions"),position:"top",size:"sm"})]}),s.jsx("textarea",{className:"spawn-input spawn-textarea",placeholder:a("terminal:spawn.customInstructionsPlaceholder"),value:je,onChange:e=>Re(e.target.value),rows:3})]}),s.jsxs("div",{className:"spawn-sessions-section",children:[s.jsxs("label",{className:"spawn-label",children:[a("terminal:spawn.linkSession")," ",s.jsxs("span",{className:"spawn-label-hint",children:["(",a("common:labels.optional"),")"]}),s.jsx(x,{text:a("terminal:spawn.helpLinkSession"),title:a("terminal:spawn.linkSessionTitle"),position:"top",size:"sm"})]}),y.length>0&&s.jsx("input",{type:"text",className:"spawn-input session-search-input",placeholder:a("terminal:spawn.searchSessions"),value:I,onChange:e=>we(e.target.value)}),s.jsx("div",{className:"sessions-list",children:_e?s.jsx("div",{className:"sessions-loading",children:a("terminal:spawn.loadingSessions")}):y.length===0?s.jsx("div",{className:"sessions-empty",children:a("terminal:spawn.noSessions")}):Se.length===0?s.jsx("div",{className:"sessions-empty",children:a("terminal:spawn.noSessionsMatch",{query:I})}):Se.map(e=>{const n=A===e.sessionId,l=Date.now()-new Date(e.lastModified).getTime(),c=l<6e4?a("common:time.justNow"):l<36e5?a("common:time.minutesAgo",{count:Math.floor(l/6e4)}):l<864e5?a("common:time.hoursAgo",{count:Math.floor(l/36e5)}):a("common:time.daysAgo",{count:Math.floor(l/864e5)});return s.jsxs("div",{className:`session-item ${n?"selected":""}`,onClick:()=>{n?R(null):(R(e.sessionId),F(e.projectPath))},children:[s.jsxs("div",{className:"session-item-header",children:[s.jsx("span",{className:"session-item-path",children:e.projectPath}),s.jsx("span",{className:"session-item-age",children:c})]}),s.jsx("div",{className:"session-item-preview",children:e.firstMessage||a("terminal:spawn.messagesCount",{count:e.messageCount})})]},e.sessionId)})})]})]})]}),s.jsxs("div",{className:"modal-footer",children:[s.jsx("button",{className:"btn btn-secondary",onClick:g,children:a("common:buttons.cancel")}),s.jsx("button",{className:"btn btn-primary",onClick:Je,disabled:de,children:a(de?"common:buttons.deploying":"common:buttons2.deploy")})]})]})})}export{us as SpawnModal};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{u as L,
|
|
1
|
+
import{u as L,a3 as $,_ as D,r as m,j as s,aC as v,N as S,I as g,s as J}from"./main-Cqo-Awpr.js";import"./vendor-react--Eh9ivFN.js";import"./vendor-three-Chj50gSY.js";function G({isOpen:l,bossId:r,onClose:o}){var j;const{t:a}=L(["terminal","common"]),f=$(),n=D(r),[i,c]=m.useState(new Set),[u,b]=m.useState(!1),d=Array.from(f.values()).filter(e=>e.class!=="boss"&&(!e.bossId||e.bossId===r));m.useEffect(()=>{l&&n&&c(new Set(n.subordinateIds||[]))},[l,n]);const y=()=>{b(!0),J.assignSubordinates(r,Array.from(i)),setTimeout(()=>{b(!1),o()},300)},A=e=>{const t=new Set(i);t.has(e)?t.delete(e):t.add(e),c(t)},C=()=>{c(new Set(d.map(e=>e.id)))},p=()=>{c(new Set)},w=e=>{e.target===e.currentTarget&&o()},k=e=>{e.key==="Escape"&&o()};if(!l||!n)return null;const E=v.boss,h=((j=n.subordinateIds)==null?void 0:j.length)||0,I=i.size,x=JSON.stringify([...n.subordinateIds||[]].sort())!==JSON.stringify([...i].sort());return s.jsx("div",{className:`modal-overlay ${l?"visible":""}`,onClick:w,onKeyDown:k,children:s.jsxs("div",{className:"modal subordinate-assignment-modal",children:[s.jsxs("div",{className:"modal-header",children:[s.jsx("span",{className:"boss-header-icon",style:{color:E.color},children:s.jsx(S,{agent:n,size:22})}),a("terminal:team.manageTeam"),": ",n.name]}),s.jsxs("div",{className:"modal-body subordinate-assignment-body",children:[s.jsxs("div",{className:"subordinate-assignment-info",children:[s.jsx("p",{children:a("terminal:team.selectAgents")}),s.jsxs("div",{className:"subordinate-assignment-actions",children:[s.jsx("button",{className:"btn btn-small",onClick:C,children:a("common:buttons.selectAll")}),s.jsx("button",{className:"btn btn-small",onClick:p,children:a("common:buttons.clearAll")})]})]}),s.jsx("div",{className:"subordinates-list",children:d.length===0?s.jsx("div",{className:"subordinates-empty",children:a("terminal:team.noAgentsAvailable")}):d.map(e=>{var N;const t=i.has(e.id),T=v[e.class],z=(N=n.subordinateIds)==null?void 0:N.includes(e.id);return s.jsxs("div",{className:`subordinate-item ${t?"selected":""}`,onClick:()=>A(e.id),children:[s.jsx("div",{className:"subordinate-checkbox",children:t?s.jsx(g,{name:"check",size:12}):null}),s.jsx("div",{className:"subordinate-icon",style:{color:T.color},children:s.jsx(S,{agent:e,size:18})}),s.jsxs("div",{className:"subordinate-info",children:[s.jsx("div",{className:"subordinate-name",children:e.name}),s.jsx("div",{className:"subordinate-class",children:e.class})]}),s.jsx("div",{className:`subordinate-status status-${e.status}`,children:e.status}),z&&s.jsx("div",{className:"subordinate-badge",children:a("common:status.current")})]},e.id)})}),s.jsx("div",{className:"subordinate-assignment-summary",children:x?s.jsxs("span",{className:"summary-changed",children:[h," ",s.jsx(g,{name:"arrow-right",size:11})," ",I," ",a("terminal:team.subordinates").toLowerCase()]}):s.jsxs("span",{className:"summary-unchanged",children:[h," ",a("terminal:team.subordinates").toLowerCase()]})})]}),s.jsxs("div",{className:"modal-footer",children:[s.jsx("button",{className:"btn btn-secondary",onClick:o,children:a("common:buttons.cancel")}),s.jsx("button",{className:"btn btn-boss",onClick:y,disabled:u||!x,children:a(u?"common:status.saving":"terminal:team.saveTeam")})]})]})})}export{G as SubordinateAssignmentModal};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{a3 as ce,r as n,av as h,l as p,j as e}from"./main-Cqo-Awpr.js";import"./vendor-react--Eh9ivFN.js";import"./vendor-three-Chj50gSY.js";const pe=[{value:"webhook",label:"Webhook"},{value:"cron",label:"Cron"},{value:"slack",label:"Slack"},{value:"email",label:"Email"},{value:"jira",label:"Jira"}],xe=[{value:"structural",label:"Structural",desc:"Field-based matching (fast, free)"},{value:"llm",label:"LLM",desc:"Semantic matching via LLM (flexible, costs tokens)"},{value:"hybrid",label:"Hybrid",desc:"Structural pre-filter + LLM (recommended)"}],he=[{value:"structural",label:"Structural"},{value:"llm",label:"LLM"}],w=()=>({name:"",description:"",type:"webhook",agentId:"",promptTemplate:"",enabled:!0,matchMode:"structural",extractionMode:"structural",config:{method:"POST"}});function fe({isOpen:C,onClose:E}){var H,U,_,W,J,$,V,G,X,q,Y,K;const T=ce(),[R,Q]=n.useState([]),[y,j]=n.useState("list"),[s,u]=n.useState(w()),[d,S]=n.useState(!1),[F,z]=n.useState(!1),[L,c]=n.useState(null),[O,Z]=n.useState([]),[g,ee]=n.useState(null),[k,te]=n.useState(`{
|
|
2
2
|
|
|
3
3
|
}`),[r,f]=n.useState(null),[B,I]=n.useState(!1),[N,P]=n.useState([]),x=n.useCallback(async()=>{try{const t=await h(p("/api/triggers"));if(t.ok){const a=await t.json();Q(a)}}catch(t){console.error("Failed to load triggers:",t)}},[]),v=n.useCallback(async t=>{try{const a=await h(p(`/api/triggers/${t}/events?limit=20`));if(a.ok){const i=await a.json();Z(i)}}catch(a){console.error("Failed to load trigger history:",a)}},[]);n.useEffect(()=>{C&&x()},[C,x]),n.useEffect(()=>{g&&v(g)},[g,v]);const le=n.useCallback(async()=>{z(!0),c(null);try{const t=d?p(`/api/triggers/${s.id}`):p("/api/triggers"),m=await h(t,{method:d?"PATCH":"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(s)});if(!m.ok){const de=await m.json();throw new Error(de.error||"Failed to save trigger")}await x(),j("list"),u(w()),S(!1)}catch(t){c(t instanceof Error?t.message:"Save failed")}finally{z(!1)}},[s,d,x]),ae=n.useCallback(async t=>{try{await h(p(`/api/triggers/${t}`),{method:"DELETE"}),await x()}catch(a){console.error("Failed to delete trigger:",a)}},[x]),se=n.useCallback(async t=>{try{await h(p(`/api/triggers/${t.id}`),{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({enabled:!t.enabled})}),await x()}catch(a){console.error("Failed to toggle trigger:",a)}},[x]),ie=n.useCallback(async t=>{try{await h(p(`/api/triggers/${t}/fire`),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({variables:{}})}),g===t&&await v(t)}catch(a){console.error("Failed to test fire trigger:",a)}},[g,v]),ne=n.useCallback(async()=>{if(s.id){I(!0),f(null);try{let t;try{t=JSON.parse(k)}catch{f({structuralMatch:void 0,extractedVariables:{},wouldFire:!1}),c("Invalid JSON payload");return}const a=await h(p(`/api/triggers/${s.id}/test-match`),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({payload:t})});if(a.ok){const i=await a.json();f(i),c(null)}else{const i=await a.json();c(i.error||"Test match failed")}}catch(t){c(t instanceof Error?t.message:"Test match failed")}finally{I(!1)}}},[s.id,k]),re=n.useCallback(async t=>{var a;try{const i=await h(p("/api/triggers/validate-cron"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({expression:t,timezone:((a=s.config)==null?void 0:a.timezone)||"UTC"})});if(i.ok){const m=await i.json();P(m.valid?m.nextFires:[])}}catch{P([])}},[s]),D=n.useCallback(t=>{t?(u({...t}),S(!0)):(u(w()),S(!1)),f(null),c(null),j("edit")},[]),o=n.useCallback((t,a)=>{u(i=>({...i,[t]:a}))},[]),b=n.useCallback((t,a)=>{u(i=>({...i,config:{...i.config,[t]:a}}))},[]),M=n.useCallback((t,a)=>{u(i=>({...i,llmMatch:{...i.llmMatch||{prompt:""},[t]:a}}))},[]),A=n.useCallback((t,a)=>{u(i=>({...i,llmExtract:{...i.llmExtract||{prompt:"",variables:[]},[t]:a}}))},[]),oe=n.useMemo(()=>Array.from(T.values()).map(t=>({id:t.id,name:t.name})),[T]);return C?e.jsx("div",{style:l.overlay,onClick:E,children:e.jsxs("div",{style:l.panel,onClick:t=>t.stopPropagation(),children:[e.jsxs("div",{style:l.header,children:[e.jsx("h2",{style:l.title,children:y==="list"?"Triggers":d?"Edit Trigger":"New Trigger"}),e.jsxs("div",{style:l.headerActions,children:[y==="list"&&e.jsx("button",{style:l.addBtn,onClick:()=>D(),children:"+ New Trigger"}),y==="edit"&&e.jsx("button",{style:l.backBtn,onClick:()=>{j("list"),f(null),c(null)},children:"Back"}),e.jsx("button",{style:l.closeBtn,onClick:E,children:"X"})]})]}),L&&e.jsx("div",{style:l.error,children:L}),y==="list"&&e.jsx("div",{style:l.content,children:R.length===0?e.jsx("div",{style:l.empty,children:"No triggers configured. Create one to get started."}):R.map(t=>{var a;return e.jsxs("div",{style:{...l.triggerCard,borderLeftColor:t.status==="error"?"#e74c3c":t.enabled?"#2ecc71":"#95a5a6"},onClick:()=>{ee(t.id),D(t)},children:[e.jsxs("div",{style:l.cardHeader,children:[e.jsxs("div",{style:l.cardTitle,children:[e.jsx("span",{style:l.typeTag,children:t.type}),e.jsx("span",{children:t.name}),t.matchMode!=="structural"&&e.jsx("span",{style:l.matchTag,children:t.matchMode})]}),e.jsxs("div",{style:l.cardActions,children:[e.jsx("button",{style:l.smallBtn,onClick:i=>{i.stopPropagation(),se(t)},children:t.enabled?"Disable":"Enable"}),e.jsx("button",{style:l.smallBtn,onClick:i=>{i.stopPropagation(),ie(t.id)},children:"Test Fire"}),e.jsx("button",{style:{...l.smallBtn,color:"#e74c3c"},onClick:i=>{i.stopPropagation(),ae(t.id)},children:"Delete"})]})]}),e.jsxs("div",{style:l.cardMeta,children:[e.jsxs("span",{children:["Agent: ",((a=T.get(t.agentId))==null?void 0:a.name)||t.agentId]}),e.jsxs("span",{children:["Fires: ",t.fireCount]}),t.lastFiredAt&&e.jsxs("span",{children:["Last: ",new Date(t.lastFiredAt).toLocaleString()]}),t.status==="error"&&t.lastError&&e.jsxs("span",{style:{color:"#e74c3c"},children:["Error: ",t.lastError]})]})]},t.id)})}),y==="edit"&&e.jsx("div",{style:l.content,children:e.jsxs("div",{style:l.form,children:[e.jsxs("div",{style:l.field,children:[e.jsx("label",{style:l.label,children:"Name"}),e.jsx("input",{style:l.input,value:s.name||"",onChange:t=>o("name",t.target.value),placeholder:"My Trigger"})]}),e.jsxs("div",{style:l.field,children:[e.jsx("label",{style:l.label,children:"Description"}),e.jsx("input",{style:l.input,value:s.description||"",onChange:t=>o("description",t.target.value),placeholder:"Optional description"})]}),e.jsxs("div",{style:l.row,children:[e.jsxs("div",{style:l.field,children:[e.jsx("label",{style:l.label,children:"Type"}),e.jsx("select",{style:l.select,value:s.type||"webhook",onChange:t=>{const a=t.target.value;o("type",a),a==="webhook"?o("config",{method:"POST"}):a==="cron"?o("config",{expression:"0 9 * * MON-FRI",timezone:"UTC"}):o("config",{})},children:pe.map(t=>e.jsx("option",{value:t.value,children:t.label},t.value))})]}),e.jsxs("div",{style:l.field,children:[e.jsx("label",{style:l.label,children:"Agent"}),e.jsxs("select",{style:l.select,value:s.agentId||"",onChange:t=>o("agentId",t.target.value),children:[e.jsx("option",{value:"",children:"Select agent..."}),oe.map(t=>e.jsx("option",{value:t.id,children:t.name},t.id))]})]})]}),e.jsxs("div",{style:l.field,children:[e.jsx("label",{style:l.label,children:"Prompt Template"}),e.jsx("textarea",{style:l.textarea,value:s.promptTemplate||"",onChange:t=>o("promptTemplate",t.target.value),placeholder:"Message sent to agent. Use {{variable}} for interpolation.",rows:4})]}),s.type==="webhook"&&e.jsxs("div",{style:l.section,children:[e.jsx("h4",{style:l.sectionTitle,children:"Webhook Config"}),e.jsxs("div",{style:l.row,children:[e.jsxs("div",{style:l.field,children:[e.jsx("label",{style:l.label,children:"Method"}),e.jsxs("select",{style:l.select,value:((H=s.config)==null?void 0:H.method)||"POST",onChange:t=>b("method",t.target.value),children:[e.jsx("option",{value:"POST",children:"POST"}),e.jsx("option",{value:"PUT",children:"PUT"})]})]}),e.jsxs("div",{style:l.field,children:[e.jsx("label",{style:l.label,children:"Secret (HMAC)"}),e.jsx("input",{style:l.input,type:"password",value:((U=s.config)==null?void 0:U.secret)||"",onChange:t=>b("secret",t.target.value||void 0),placeholder:"Optional HMAC secret"})]})]}),e.jsxs("div",{style:l.field,children:[e.jsx("label",{style:l.label,children:"Extract Fields (comma-separated JSON paths)"}),e.jsx("input",{style:l.input,value:((W=(_=s.config)==null?void 0:_.extractFields)==null?void 0:W.join(", "))||"",onChange:t=>b("extractFields",t.target.value.split(",").map(a=>a.trim()).filter(Boolean)),placeholder:"body.release_name, body.version"})]}),d&&s.id&&e.jsxs("div",{style:l.webhookUrl,children:[e.jsx("label",{style:l.label,children:"Webhook URL"}),e.jsx("code",{style:l.code,children:`${window.location.origin}/api/triggers/webhook/${s.id}`})]})]}),s.type==="cron"&&e.jsxs("div",{style:l.section,children:[e.jsx("h4",{style:l.sectionTitle,children:"Cron Config"}),e.jsxs("div",{style:l.row,children:[e.jsxs("div",{style:l.field,children:[e.jsx("label",{style:l.label,children:"Expression"}),e.jsx("input",{style:l.input,value:((J=s.config)==null?void 0:J.expression)||"",onChange:t=>{b("expression",t.target.value),t.target.value&&re(t.target.value)},placeholder:"0 9 * * MON-FRI"})]}),e.jsxs("div",{style:l.field,children:[e.jsx("label",{style:l.label,children:"Timezone"}),e.jsx("input",{style:l.input,value:(($=s.config)==null?void 0:$.timezone)||"UTC",onChange:t=>b("timezone",t.target.value),placeholder:"America/Mexico_City"})]})]}),N.length>0&&e.jsxs("div",{style:l.nextFires,children:[e.jsx("label",{style:l.label,children:"Next fires:"}),N.map((t,a)=>e.jsx("div",{style:l.nextFireItem,children:new Date(t).toLocaleString()},a))]})]}),e.jsxs("div",{style:l.section,children:[e.jsx("h4",{style:l.sectionTitle,children:"Match Mode"}),e.jsx("div",{style:l.modeSelector,children:xe.map(t=>e.jsxs("button",{style:{...l.modeBtn,...s.matchMode===t.value?l.modeBtnActive:{}},onClick:()=>o("matchMode",t.value),children:[e.jsx("strong",{children:t.label}),e.jsx("span",{style:l.modeDesc,children:t.desc})]},t.value))}),(s.matchMode==="llm"||s.matchMode==="hybrid")&&e.jsxs("div",{style:l.llmConfig,children:[e.jsxs("div",{style:l.field,children:[e.jsx("label",{style:l.label,children:"LLM Match Prompt"}),e.jsx("textarea",{style:l.textarea,value:((V=s.llmMatch)==null?void 0:V.prompt)||"",onChange:t=>M("prompt",t.target.value),placeholder:"Does this message request a release deployment?",rows:3})]}),e.jsxs("div",{style:l.row,children:[e.jsxs("div",{style:l.field,children:[e.jsx("label",{style:l.label,children:"Model"}),e.jsxs("select",{style:l.select,value:((G=s.llmMatch)==null?void 0:G.model)||"haiku",onChange:t=>M("model",t.target.value),children:[e.jsx("option",{value:"haiku",children:"Haiku (fast, cheap)"}),e.jsx("option",{value:"sonnet",children:"Sonnet (balanced)"}),e.jsx("option",{value:"opus",children:"Opus (powerful)"})]})]}),e.jsxs("div",{style:l.field,children:[e.jsx("label",{style:l.label,children:"Min Confidence"}),e.jsx("input",{style:l.input,type:"number",min:"0",max:"1",step:"0.1",value:((X=s.llmMatch)==null?void 0:X.minConfidence)??0,onChange:t=>M("minConfidence",parseFloat(t.target.value))})]})]})]})]}),e.jsxs("div",{style:l.section,children:[e.jsx("h4",{style:l.sectionTitle,children:"Extraction Mode"}),e.jsx("div",{style:l.row,children:he.map(t=>e.jsx("button",{style:{...l.modeBtn,...s.extractionMode===t.value?l.modeBtnActive:{}},onClick:()=>o("extractionMode",t.value),children:t.label},t.value))}),s.extractionMode==="llm"&&e.jsxs("div",{style:l.llmConfig,children:[e.jsxs("div",{style:l.field,children:[e.jsx("label",{style:l.label,children:"Extraction Instructions"}),e.jsx("textarea",{style:l.textarea,value:((q=s.llmExtract)==null?void 0:q.prompt)||"",onChange:t=>A("prompt",t.target.value),placeholder:"Extract: release version, affected systems, urgency",rows:3})]}),e.jsxs("div",{style:l.field,children:[e.jsx("label",{style:l.label,children:"Variable Names (comma-separated)"}),e.jsx("input",{style:l.input,value:((K=(Y=s.llmExtract)==null?void 0:Y.variables)==null?void 0:K.join(", "))||"",onChange:t=>A("variables",t.target.value.split(",").map(a=>a.trim()).filter(Boolean)),placeholder:"release_name, affected_systems, urgency"})]})]})]}),d&&e.jsxs("div",{style:l.section,children:[e.jsx("h4",{style:l.sectionTitle,children:"Test Match"}),e.jsxs("div",{style:l.field,children:[e.jsx("label",{style:l.label,children:"Sample Event Payload (JSON)"}),e.jsx("textarea",{style:l.textarea,value:k,onChange:t=>te(t.target.value),rows:4})]}),e.jsx("button",{style:l.testBtn,onClick:ne,disabled:B,children:B?"Testing...":"Test Match"}),r&&e.jsxs("div",{style:l.testResult,children:[e.jsx("div",{style:{...l.testResultHeader,color:r.wouldFire?"#2ecc71":"#e74c3c"},children:r.wouldFire?"WOULD FIRE":"WOULD NOT FIRE"}),r.structuralMatch!==void 0&&e.jsxs("div",{children:["Structural: ",r.structuralMatch?"Match":"No match"]}),r.llmMatch&&e.jsxs("div",{style:l.llmResult,children:[e.jsxs("div",{children:["LLM: ",r.llmMatch.match?"Match":"No match"]}),e.jsxs("div",{children:["Confidence: ",(r.llmMatch.confidence*100).toFixed(0),"%"]}),e.jsxs("div",{children:["Reason: ",r.llmMatch.reason]}),e.jsxs("div",{style:l.llmMeta,children:["Model: ",r.llmMatch.model," | Tokens: ",r.llmMatch.tokensUsed," | Latency: ",r.llmMatch.durationMs,"ms"]})]}),Object.keys(r.extractedVariables).length>0&&e.jsxs("div",{children:[e.jsx("div",{style:l.label,children:"Extracted Variables:"}),Object.entries(r.extractedVariables).map(([t,a])=>e.jsxs("div",{style:l.varRow,children:[e.jsx("code",{children:t}),": ",a]},t))]})]})]}),d&&O.length>0&&e.jsxs("div",{style:l.section,children:[e.jsx("h4",{style:l.sectionTitle,children:"Recent Fires"}),e.jsx("div",{style:l.historyList,children:O.map((t,a)=>{const i=t.llm_match_result?JSON.parse(t.llm_match_result):null;return e.jsxs("div",{style:l.historyItem,children:[e.jsxs("div",{style:l.historyHeader,children:[e.jsx("span",{style:{color:t.status==="delivered"?"#2ecc71":t.status==="failed"?"#e74c3c":"#f39c12"},children:t.status}),e.jsx("span",{children:new Date(t.fired_at).toLocaleString()}),t.duration_ms&&e.jsxs("span",{children:[t.duration_ms,"ms"]})]}),t.error&&e.jsx("div",{style:{color:"#e74c3c",fontSize:"12px"},children:t.error}),i&&e.jsxs("div",{style:l.llmMeta,children:["LLM: ",i.match?"match":"no match"," (",(i.confidence*100).toFixed(0),"%) - ",i.reason]})]},t.id||a)})})]}),e.jsxs("div",{style:l.actions,children:[e.jsx("button",{style:l.cancelBtn,onClick:()=>{j("list"),c(null)},children:"Cancel"}),e.jsx("button",{style:l.saveBtn,onClick:le,disabled:F||!s.name||!s.agentId,children:F?"Saving...":d?"Update":"Create"})]})]})})]})}):null}const l={overlay:{position:"fixed",top:0,left:0,right:0,bottom:0,background:"rgba(0,0,0,0.6)",display:"flex",alignItems:"center",justifyContent:"center",zIndex:1e3},panel:{background:"#1e1e2e",borderRadius:"12px",width:"680px",maxHeight:"85vh",display:"flex",flexDirection:"column",color:"#cdd6f4",boxShadow:"0 8px 32px rgba(0,0,0,0.4)"},header:{display:"flex",justifyContent:"space-between",alignItems:"center",padding:"16px 20px",borderBottom:"1px solid #313244"},title:{margin:0,fontSize:"18px",fontWeight:600},headerActions:{display:"flex",gap:"8px"},content:{overflow:"auto",padding:"16px 20px",flex:1},empty:{textAlign:"center",padding:"40px",color:"#6c7086"},error:{background:"#45252a",color:"#f38ba8",padding:"8px 20px",fontSize:"13px"},triggerCard:{background:"#181825",borderRadius:"8px",padding:"12px 16px",marginBottom:"8px",borderLeft:"3px solid",cursor:"pointer",transition:"background 0.15s"},cardHeader:{display:"flex",justifyContent:"space-between",alignItems:"center"},cardTitle:{display:"flex",alignItems:"center",gap:"8px",fontWeight:500},typeTag:{background:"#313244",padding:"2px 6px",borderRadius:"4px",fontSize:"11px",textTransform:"uppercase"},matchTag:{background:"#45475a",padding:"2px 6px",borderRadius:"4px",fontSize:"10px",color:"#a6e3a1"},cardActions:{display:"flex",gap:"6px"},cardMeta:{display:"flex",gap:"16px",marginTop:"8px",fontSize:"12px",color:"#6c7086"},form:{display:"flex",flexDirection:"column",gap:"12px"},field:{display:"flex",flexDirection:"column",gap:"4px",flex:1},row:{display:"flex",gap:"12px"},label:{fontSize:"12px",color:"#a6adc8",fontWeight:500},input:{background:"#313244",border:"1px solid #45475a",borderRadius:"6px",padding:"8px 10px",color:"#cdd6f4",fontSize:"13px",outline:"none"},select:{background:"#313244",border:"1px solid #45475a",borderRadius:"6px",padding:"8px 10px",color:"#cdd6f4",fontSize:"13px",outline:"none"},textarea:{background:"#313244",border:"1px solid #45475a",borderRadius:"6px",padding:"8px 10px",color:"#cdd6f4",fontSize:"13px",outline:"none",fontFamily:"monospace",resize:"vertical"},section:{borderTop:"1px solid #313244",paddingTop:"12px"},sectionTitle:{margin:"0 0 8px",fontSize:"14px",fontWeight:600,color:"#a6adc8"},modeSelector:{display:"flex",gap:"8px",marginBottom:"8px"},modeBtn:{flex:1,background:"#313244",border:"1px solid #45475a",borderRadius:"6px",padding:"8px",color:"#cdd6f4",cursor:"pointer",textAlign:"left",display:"flex",flexDirection:"column",gap:"2px",fontSize:"12px"},modeBtnActive:{borderColor:"#89b4fa",background:"#1e3a5f"},modeDesc:{fontSize:"10px",color:"#6c7086"},llmConfig:{background:"#181825",borderRadius:"6px",padding:"12px",display:"flex",flexDirection:"column",gap:"8px"},webhookUrl:{marginTop:"8px"},code:{background:"#313244",padding:"6px 10px",borderRadius:"4px",fontSize:"12px",display:"block",wordBreak:"break-all",color:"#89b4fa"},nextFires:{marginTop:"8px"},nextFireItem:{fontSize:"12px",color:"#a6e3a1",padding:"2px 0"},testBtn:{background:"#89b4fa",border:"none",borderRadius:"6px",padding:"8px 16px",color:"#1e1e2e",fontWeight:600,cursor:"pointer",fontSize:"13px"},testResult:{background:"#181825",borderRadius:"6px",padding:"12px",marginTop:"8px",fontSize:"13px",display:"flex",flexDirection:"column",gap:"6px"},testResultHeader:{fontWeight:700,fontSize:"14px"},llmResult:{display:"flex",flexDirection:"column",gap:"2px"},llmMeta:{fontSize:"11px",color:"#6c7086",marginTop:"2px"},varRow:{fontSize:"12px",padding:"2px 0"},historyList:{display:"flex",flexDirection:"column",gap:"6px",maxHeight:"200px",overflow:"auto"},historyItem:{background:"#181825",borderRadius:"4px",padding:"8px 10px",fontSize:"12px"},historyHeader:{display:"flex",justifyContent:"space-between",alignItems:"center"},actions:{display:"flex",justifyContent:"flex-end",gap:"8px",marginTop:"16px",paddingTop:"12px",borderTop:"1px solid #313244"},addBtn:{background:"#89b4fa",border:"none",borderRadius:"6px",padding:"6px 14px",color:"#1e1e2e",fontWeight:600,cursor:"pointer",fontSize:"13px"},backBtn:{background:"transparent",border:"1px solid #45475a",borderRadius:"6px",padding:"6px 14px",color:"#cdd6f4",cursor:"pointer",fontSize:"13px"},closeBtn:{background:"transparent",border:"none",color:"#6c7086",cursor:"pointer",fontSize:"16px",padding:"4px 8px"},smallBtn:{background:"transparent",border:"1px solid #45475a",borderRadius:"4px",padding:"3px 8px",color:"#cdd6f4",cursor:"pointer",fontSize:"11px"},saveBtn:{background:"#a6e3a1",border:"none",borderRadius:"6px",padding:"8px 20px",color:"#1e1e2e",fontWeight:600,cursor:"pointer",fontSize:"13px"},cancelBtn:{background:"transparent",border:"1px solid #45475a",borderRadius:"6px",padding:"8px 20px",color:"#cdd6f4",cursor:"pointer",fontSize:"13px"}};export{fe as TriggerManagerPanel,fe as default};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{r as x,
|
|
1
|
+
import{r as x,av as M,l as P,j as e,a3 as J}from"./main-Cqo-Awpr.js";import"./vendor-react--Eh9ivFN.js";import"./vendor-three-Chj50gSY.js";const H=[{id:"intake",name:"Intake",type:"action",description:"Gather CC details from the developer via Slack",action:{type:"agent_task",agentId:"",promptTemplate:`A developer has requested a new CC (Control de Cambios). Here is their message:
|
|
2
2
|
{{trigger.slack.message}}
|
|
3
3
|
From: {{trigger.slack.user}} (Slack ID: {{trigger.slack.userId}})
|
|
4
4
|
|