openmausbot 0.1.96 → 0.1.98
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/ActivityPanel-H6D3SD39.js +1 -0
- package/dist/assets/BotSettingsDialog-Dqz_AiBZ.js +7 -0
- package/dist/assets/CloudBackendPicker-iezpJFpF.js +1 -0
- package/dist/assets/ComputerPanel-DZPj-IWu.js +1 -0
- package/dist/assets/DesktopViewer-utONms1p.js +5 -0
- package/dist/assets/InspectorPanel-OVaBVrzC.js +5 -0
- package/dist/assets/KeyboardShortcutsModal-gk9mvHj_.js +1 -0
- package/dist/assets/LocalVmWorkspace-DLIvd2kC.js +1 -0
- package/dist/assets/MacLocalControl-bJv8yiPB.js +1 -0
- package/dist/assets/NewBotDialog-1qGOAdUM.js +2 -0
- package/dist/assets/RemoteAgentSettingsPanel-DqKr0HkO.js +1 -0
- package/dist/assets/RoutinesPage-BM2D4qGi.js +1 -0
- package/dist/assets/RoutinesSection-Dny9ra-c.js +1 -0
- package/dist/assets/SettingsModal-gC6XJJmt.js +11 -0
- package/dist/assets/TeamMapPage-B6fuu4r_.js +8 -0
- package/dist/assets/TriggersPanel-j0qTP2CO.js +1 -0
- package/dist/assets/VisibilitySection-DT0FqPvu.js +12 -0
- package/dist/assets/WebhooksPanel--YQyCjKO.js +3 -0
- package/dist/assets/{abnfDiagram-O67JEVCF-Dkbd2hcj.js → abnfDiagram-O67JEVCF-BsjcFX0-.js} +1 -1
- package/dist/assets/activity-BxOkayvD.js +1 -0
- package/dist/assets/{arc-Duj5Coy2.js → arc-CJNA94c6.js} +1 -1
- package/dist/assets/architectureDiagram-NJMV4G6O-dz2ud7lP.js +36 -0
- package/dist/assets/{blockDiagram-BEXU5L5S-CWDlTpXe.js → blockDiagram-BEXU5L5S-ChBEALoR.js} +1 -1
- package/dist/assets/brain-CFZ7PEXc.js +1 -0
- package/dist/assets/{c4Diagram-YGBWAQC7-B0t15PDc.js → c4Diagram-YGBWAQC7-KZNRKDQe.js} +1 -1
- package/dist/assets/channel-WhFyujhZ.js +1 -0
- package/dist/assets/{chunk-2Q5K7J3B-BJSCL-HV.js → chunk-2Q5K7J3B-BLLwmCET.js} +1 -1
- package/dist/assets/{chunk-3FUC2YCW-D3_ILccd.js → chunk-3FUC2YCW-CQxyreBZ.js} +2 -2
- package/dist/assets/{chunk-5VM5RSS4-D3dmwT_S.js → chunk-5VM5RSS4-D6sFMW0u.js} +1 -1
- package/dist/assets/{chunk-GTNCS2PH-Br73HFPD.js → chunk-GTNCS2PH-BaZ1YgLF.js} +1 -1
- package/dist/assets/{chunk-GWA4HPMP-uSsjxubC.js → chunk-GWA4HPMP-CcalphmC.js} +1 -1
- package/dist/assets/{chunk-JWPE2WC7-C40VWFyr.js → chunk-JWPE2WC7-CSk8R3ve.js} +1 -1
- package/dist/assets/{chunk-NETBCI7D-D6WNNYwU.js → chunk-NETBCI7D-CTmLjA57.js} +1 -1
- package/dist/assets/{chunk-WEXAMYUT-DOEhq64P.js → chunk-WEXAMYUT-CM9Z77Ne.js} +1 -1
- package/dist/assets/{chunk-XXDRQBXY-BqJEi6Pi.js → chunk-XXDRQBXY-B1fxpMS2.js} +1 -1
- package/dist/assets/{classDiagram-v2-NBCMYWYE-ByU_GnxT.js → classDiagram-v2-NBCMYWYE-DCCyoLpj.js} +1 -1
- package/dist/assets/computer-control-NLov352p.js +1 -0
- package/dist/assets/cose-bilkent-JH36ORCC-KyImBKvE.js +1 -0
- package/dist/assets/{cynefin-OW5HDTMX-CZWO7aYj.js → cynefin-OW5HDTMX-fsZc6MGa.js} +1 -1
- package/dist/assets/{cynefinDiagram-VND7K2PF-C70-w0la.js → cynefinDiagram-VND7K2PF-CGmHsShB.js} +1 -1
- package/dist/assets/{dagre-6A5THRUB-CnhjhExB.js → dagre-6A5THRUB-Dah1h-CH.js} +1 -1
- package/dist/assets/{diagram-22UHCM2B-bnjWCNb4.js → diagram-22UHCM2B-BIu71OyV.js} +1 -1
- package/dist/assets/{diagram-3UASUU5V-A4uTWoFV.js → diagram-3UASUU5V-gxhUB_Mu.js} +1 -1
- package/dist/assets/{diagram-ATOU4E4O-Zi6m3NUl.js → diagram-ATOU4E4O-CBhusUBn.js} +1 -1
- package/dist/assets/{diagram-CDSNMT55-DtCcmd5k.js → diagram-CDSNMT55-BdPrc86x.js} +1 -1
- package/dist/assets/{diagram-MLGK6HIB-DofuETS3.js → diagram-MLGK6HIB-Clp110R_.js} +1 -1
- package/dist/assets/{diagram-MPIPVDR6-Dw2T9PuU.js → diagram-MPIPVDR6-DJKfbugw.js} +1 -1
- package/dist/assets/{ebnfDiagram-ZINNZB2B-DbrwPiem.js → ebnfDiagram-ZINNZB2B-DnsltoBu.js} +1 -1
- package/dist/assets/{elk-276RUBZZ-BvCt1dCb.js → elk-276RUBZZ-jWdq6gqH.js} +1 -1
- package/dist/assets/{erDiagram-OPXOYQCR-Y-QKqPnU.js → erDiagram-OPXOYQCR-DArPVf8u.js} +1 -1
- package/dist/assets/{flowDiagram-KWPJA3E3-CDkL1B5w.js → flowDiagram-KWPJA3E3-D2HZ-2f7.js} +1 -1
- package/dist/assets/ganttDiagram-FUAMR5RP--o0KIxEo.js +292 -0
- package/dist/assets/{gitGraphDiagram-X574FWY7-nL9iFTCv.js → gitGraphDiagram-X574FWY7-CsoXr2D7.js} +1 -1
- package/dist/assets/image-plus-BbVjGHin.js +1 -0
- package/dist/assets/index-BrPW5HDO.css +1 -0
- package/dist/assets/index-C3NqfdVU.js +585 -0
- package/dist/assets/{index-DreDnjOu.js → index-CJTp9JEp.js} +1 -1
- package/dist/assets/{infoDiagram-VRGFBTTK-C7aHjzsf.js → infoDiagram-VRGFBTTK-g-6lNp7r.js} +1 -1
- package/dist/assets/{ishikawaDiagram-OU5B5YK6-KUZsNBTh.js → ishikawaDiagram-OU5B5YK6-B1d6qVTV.js} +1 -1
- package/dist/assets/{journeyDiagram-ZHPQQLJL-CGUuodFl.js → journeyDiagram-ZHPQQLJL-BTPuiU6T.js} +1 -1
- package/dist/assets/{kanban-definition-PNTS6WVX-Cy6r868Z.js → kanban-definition-PNTS6WVX-bDDuRJvP.js} +1 -1
- package/dist/assets/{linear-Bl669148.js → linear-BVVKbEMy.js} +1 -1
- package/dist/assets/{mermaid.core-86Xqz5Mr.js → mermaid.core-JJdoKyKB.js} +5 -5
- package/dist/assets/{mindmap-definition-NLK3R4M7-G4DzHLrd.js → mindmap-definition-NLK3R4M7-B4aE3T0q.js} +1 -1
- package/dist/assets/module-DCUsy2BQ.js +3 -0
- package/dist/assets/page-visible-BBo_Zm8g.js +1 -0
- package/dist/assets/{pegDiagram-GJSIUBJH-K4eruzY0.js → pegDiagram-GJSIUBJH-DFKQWpR7.js} +1 -1
- package/dist/assets/{pieDiagram-5QR66LMP-DYdR9PPq.js → pieDiagram-5QR66LMP-Iv7OKVJi.js} +1 -1
- package/dist/assets/{quadrantDiagram-O4NWA36T-BCAh0nEy.js → quadrantDiagram-O4NWA36T-U2YnfwBk.js} +1 -1
- package/dist/assets/{railroadDiagram-XR7U4H2S-p0dGRc4g.js → railroadDiagram-XR7U4H2S-CuPy6RqM.js} +1 -1
- package/dist/assets/remote-desktop-panel-BNEj7tUx.js +1 -0
- package/dist/assets/{requirementDiagram-PLB6GJNP-tLeBG0aL.js → requirementDiagram-PLB6GJNP-bMI5AK7T.js} +1 -1
- package/dist/assets/{sankeyDiagram-IPEJSGJF-QRuN16rV.js → sankeyDiagram-IPEJSGJF-BKcFE2WQ.js} +1 -1
- package/dist/assets/{sequenceDiagram-PO4LG4MO-ueT1nVoa.js → sequenceDiagram-PO4LG4MO-Bn9q88kl.js} +1 -1
- package/dist/assets/{sizeCapture-INFHLROL-wRS2zWg2.js → sizeCapture-INFHLROL-Cvmdq9HD.js} +1 -1
- package/dist/assets/{stateDiagram-v2-GCMORJYK-CYzA_hE1.js → stateDiagram-v2-GCMORJYK-JJQYw3eQ.js} +1 -1
- package/dist/assets/{swimlanes-2SLR337P-kDnv6LMc.js → swimlanes-2SLR337P-BkSCBEwp.js} +1 -1
- package/dist/assets/swimlanesDiagram-TC7HE7FX-CmTirbVT.js +8 -0
- package/dist/assets/table-file.worker-KkMx-SNx.js +10 -0
- package/dist/assets/{timeline-definition-EJHVYXUP-D1y2UbbH.js → timeline-definition-EJHVYXUP-DsaM4GHr.js} +1 -1
- package/dist/assets/{usecaseDiagram-POWQR4AR-IqB4v9HX.js → usecaseDiagram-POWQR4AR-3FOwLq7B.js} +1 -1
- package/dist/assets/user-DcZBnAuv.js +1 -0
- package/dist/assets/{vennDiagram-UO4OBE2U-BEi7KYVF.js → vennDiagram-UO4OBE2U-DyNjJsKt.js} +1 -1
- package/dist/assets/{wardleyDiagram-VNRHLVJA-Dkybo-Yf.js → wardleyDiagram-VNRHLVJA-Y4ZMcnBC.js} +1 -1
- package/dist/assets/{xychartDiagram-PMCCYNJV-BAPFJLpg.js → xychartDiagram-PMCCYNJV-BXZpg955.js} +1 -1
- package/dist/index.html +2 -2
- package/dist-server/cloud-home-start.js +20 -9
- package/dist-server/container-mcp.js +8 -0
- package/dist-server/desktop-entry.mjs +54 -0
- package/dist-server/drivers/agents-proxy.js +26 -9
- package/dist-server/index.js +3734 -2360
- package/dist-server/openmausbot.js +1664 -1553
- package/dist-server/pair-cli.js +1664 -1553
- package/dist-server/permission-proxy.js +2 -4
- package/dist-server/server/atomic.js +70 -2
- package/dist-server/server/auto-approve.js +1 -1
- package/dist-server/server/auto-vm-claims.js +13 -1
- package/dist-server/server/automatic-recovery.js +1 -2
- package/dist-server/server/boat.js +68 -84
- package/dist-server/server/bot-overview.js +1 -1
- package/dist-server/server/browser-engine.js +38 -1
- package/dist-server/server/browser-live.js +112 -25
- package/dist-server/server/browser-runtime.js +31 -1
- package/dist-server/server/checkpoints.js +275 -44
- package/dist-server/server/cli-setup.js +3 -3
- package/dist-server/server/cloud-computer-tools.js +11 -4
- package/dist-server/server/cloud-home-start.js +4 -4
- package/dist-server/server/cloud-home.js +3 -9
- package/dist-server/server/cloud-owner.js +1 -1
- package/dist-server/server/computer-engine-removal.js +70 -0
- package/dist-server/server/computer-selection.js +18 -0
- package/dist-server/server/config.js +29 -12
- package/dist-server/server/connector-card-text.js +15 -0
- package/dist-server/server/connector-scope-hint.js +83 -0
- package/dist-server/server/default-model-selection.js +23 -14
- package/dist-server/server/delegations.js +11 -5
- package/dist-server/server/delta-context.js +6 -1
- package/dist-server/server/drivers/acp/core.js +11 -1
- package/dist-server/server/drivers/acp/grok.js +47 -5
- package/dist-server/server/drivers/acp/opencode-go.js +16 -21
- package/dist-server/server/drivers/agents-call.js +1 -1
- package/dist-server/server/drivers/agents-catalog.js +27 -7
- package/dist-server/server/drivers/agents-proxy.js +1 -0
- package/dist-server/server/drivers/builtIn.js +0 -2
- package/dist-server/server/drivers/chat-mcp-tools.js +5 -3
- package/dist-server/server/drivers/claude-login-auth.js +1 -1
- package/dist-server/server/drivers/claude.js +84 -41
- package/dist-server/server/drivers/codex-device-auth.js +27 -319
- package/dist-server/server/drivers/codex.js +2 -2
- package/dist-server/server/drivers/device-auth.js +342 -0
- package/dist-server/server/drivers/openai-chat.js +110 -10
- package/dist-server/server/drivers/pi.js +184 -49
- package/dist-server/server/fleet-agent.js +18 -5
- package/dist-server/server/harness/http.js +5 -2
- package/dist-server/server/harness/registry.js +19 -0
- package/dist-server/server/harness-capabilities.js +7 -4
- package/dist-server/server/hosted-models.js +3 -1
- package/dist-server/server/index.js +823 -333
- package/dist-server/server/key-rejections.js +57 -0
- package/dist-server/server/live-call.js +11 -6
- package/dist-server/server/managed-policy.js +1 -1
- package/dist-server/server/message-file.js +7 -4
- package/dist-server/server/model-catalog/presets.js +8 -0
- package/dist-server/server/peer-roster.js +10 -2
- package/dist-server/server/permission-proxy.js +4 -0
- package/dist-server/server/provider-key-check.js +5 -1
- package/dist-server/server/request-auth.js +1 -1
- package/dist-server/server/room-turn-end.js +15 -0
- package/dist-server/server/room-turn-timeout.js +28 -0
- package/dist-server/server/routes/live.js +3 -3
- package/dist-server/server/routes/thread-models.js +36 -0
- package/dist-server/server/routine-requests.js +1 -1
- package/dist-server/server/routines.js +3 -3
- package/dist-server/server/screen-frame-gate.js +1 -3
- package/dist-server/server/skills.js +3 -2
- package/dist-server/server/store.js +273 -61
- package/dist-server/server/surface.js +29 -49
- package/dist-server/server/system-prompt.js +10 -10
- package/dist-server/server/team-backup.js +19 -4
- package/dist-server/server/thread-model.js +25 -0
- package/dist-server/server/turn-continuation.js +168 -0
- package/dist-server/server/webhook-ingress.js +8 -3
- package/dist-server/server/webhooks.js +40 -5
- package/dist-server/server/workspace.js +1 -1
- package/dist-server/shared/ask-question.js +0 -70
- package/dist-server/shared/cloud-computer.js +4 -6
- package/dist-server/shared/credential-request.js +1 -1
- package/dist-server/shared/device-sign-in.js +57 -0
- package/dist-server/shared/failed-turn.js +1 -4
- package/dist-server/shared/place-view.js +409 -0
- package/dist-server/shared/team-backup.js +2 -0
- package/dist-server/shared/thread-model.js +13 -0
- package/dist-server/shared/tool-scope-support.js +1 -2
- package/dist-server/vps-container-mcp.js +8 -0
- package/dist-server/workspace-backup.worker.js +41 -22
- package/package.json +1 -1
- package/dist/assets/DesktopViewer-DsnA23KM.js +0 -5
- package/dist/assets/architectureDiagram-NJMV4G6O-uYUsDawP.js +0 -36
- package/dist/assets/channel-BZxwC-Gw.js +0 -1
- package/dist/assets/cose-bilkent-JH36ORCC-D-Uglxqq.js +0 -1
- package/dist/assets/ganttDiagram-FUAMR5RP-CKV5D2F6.js +0 -292
- package/dist/assets/index-Du7o6Dsf.js +0 -610
- package/dist/assets/index-KxG4bWSr.css +0 -1
- package/dist/assets/swimlanesDiagram-TC7HE7FX-C7voMDle.js +0 -8
- package/dist-server/server/drivers/boatagent.js +0 -443
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import{u as O,r as m,j as e,d as se,o as xe,aO as be,g as ie,bH as je,B as pe,T as Be,bI as Ee,c as K,bJ as Te,bK as ge,bL as Ge,bM as Je,bN as Ke,bO as Fe,Y as Pe,$ as He,bP as $,bQ as Y,bR as me,bS as re,bT as fe,bU as Ie,aE as oe,X as De,ac as Oe,bV as We,t as u,U as ne,bW as Ve,bX as ze,bY as Ue,q as Z,bZ as ve,b_ as $e,av as Le,bj as Ze,bD as qe,bE as Ye,b$ as _e,P as we,bb as Xe,aR as Ae,aS as Qe,c0 as ea,c1 as aa,a7 as na,a8 as ia,aK as ra,c2 as la,c3 as ta,c4 as sa,b1 as oa,b2 as da,c5 as ca,ah as ma,aG as ya,c6 as ua,c7 as ha,ak as xa,aj as pa,V as ba,c8 as ga}from"./index-C3NqfdVU.js";import{u as P}from"./RoutinesPage-BM2D4qGi.js";import{I as fa}from"./image-plus-BbVjGHin.js";import{C as va}from"./CloudBackendPicker-iezpJFpF.js";function Aa(a){const l="Use an HTTPS API base URL, or HTTP for a local router, without passwords, query parameters or fragments";let i;try{i=new URL(a.trim())}catch{throw new Error(l)}if(a.length>2048||i.username||i.password||i.search||i.hash)throw new Error(l);const n=i.hostname.toLowerCase(),r=/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/.exec(n),y=n==="localhost"||n.endsWith(".localhost")||n.endsWith(".local")||n==="host.docker.internal"||n==="host.containers.internal"||n==="[::1]"||/^\[f[cd][0-9a-f]{2}:/.test(n)||r&&(Number(r[1])===127||Number(r[1])===10||Number(r[1])===192&&Number(r[2])===168||Number(r[1])===172&&Number(r[2])>=16&&Number(r[2])<=31);if(i.protocol!=="https:"&&!(i.protocol==="http:"&&y))throw new Error(l);if(r&&(Number(r[1])===0||Number(r[1])===169&&Number(r[2])===254))throw new Error(l);return i.pathname=i.pathname.replace(/\/+$/,"").replace(/\/images\/generations$/,""),i.toString().replace(/\/+$/,"")}const Ce={openai:{label:"OpenAI",keyLabel:"OpenAI image API key",credential:"openaiImageApiKey"},xai:{label:"Grok (xAI)",keyLabel:"Grok API key",credential:"xaiApiKey"},custom:{label:"Custom",keyLabel:"Custom image API key",credential:"customImageApiKey"}},ee="w-full min-w-0 rounded-lg border border-hairline/40 bg-inset px-3 py-2 text-[12.5px] text-ink placeholder:text-ink-secondary focus:outline-none disabled:opacity-50",Ca="flex items-center justify-center gap-1.5 rounded-lg bg-control px-3 py-2 text-[12.5px] text-ink hover:bg-raised-hover disabled:opacity-50";function ka({botLabel:a,disabled:l,generating:i,onGenerate:n,onSavingChange:r}){const{state:y,dispatch:h}=O(),o=y.config?.imageGen,s=o?.provider??"openai",[d,g]=m.useState(null),[f,p]=m.useState(null),[b,B]=m.useState(null),[x,v]=m.useState(""),[D,C]=m.useState(""),[k,R]=m.useState(!1),[T,c]=m.useState(null),t=d??s,N=f??o?.customUrl??"",S=b??o?.customModel??"",A=Ce[t],L=l||i||k,z=t==="custom"?o?.customKeyConfigured===!0:t==="xai"?(o?.xaiConfigured??y.config?.xai?.configured)===!0:(o?.openaiConfigured??(s==="openai"&&o?.configured))===!0,I=t!==s||t==="custom"&&(N.trim()!==(o?.customUrl??"")||S.trim()!==(o?.customModel??""))||!!x.trim(),F=t===s&&o?.configured===!0;m.useEffect(()=>{v("")},[t]);const j=w=>{R(w),r(w)},H=async w=>{const G=await ie("/api/config",{method:"PUT",body:JSON.stringify(w)});h({type:"configStatus",config:G})},W=async w=>{const G=window.ogb?.setCredential?await window.ogb.setCredential(A.credential,w):await ie("/api/config",{method:"PUT",body:JSON.stringify(t==="xai"?{xai:{key:w}}:{imageGen:t==="custom"?{customApiKey:w}:{key:w}})});h({type:"configStatus",config:G}),v("")},X=async w=>{if(!L&&(g(w),v(""),p(null),B(null),c(null),w!=="custom")){j(!0);try{await H({imageGen:{provider:w}})}catch(G){c(G instanceof Error?G.message:String(G))}finally{g(null),j(!1)}}},M=async()=>{if(!(L||t==="custom"&&(!N.trim()||!S.trim()))&&!(t!=="custom"&&!x.trim())){j(!0),c(null);try{const w=t==="custom"?Aa(N.trim()):"",G=S.trim();if(t==="custom"&&(G.length>200||["\r",`
|
|
2
|
+
`,"\0"].some(Q=>G.includes(Q))))throw new Error("Use a model ID of at most 200 characters without control characters");x.trim()&&await W(x.trim()),t==="custom"&&(await H({imageGen:{provider:t,customUrl:w,customModel:G}}),g(null),p(null),B(null))}catch(w){c(w instanceof Error?w.message:String(w))}finally{j(!1)}}},E=async()=>{if(!L){j(!0),c(null);try{await W("")}catch(w){c(w instanceof Error?w.message:String(w))}finally{j(!1)}}},q=e.jsxs("div",{className:"space-y-2.5",children:[t==="custom"&&e.jsxs(e.Fragment,{children:[e.jsxs("label",{className:"block text-[11.5px] text-ink-secondary",children:["Base URL",e.jsx("input",{type:"url",value:N,disabled:L,onChange:w=>p(w.target.value),placeholder:"http://127.0.0.1:4000/v1",autoComplete:"off",className:`${ee} mt-1`})]}),e.jsxs("label",{className:"block text-[11.5px] text-ink-secondary",children:["Image model",e.jsx("input",{value:S,disabled:L,onChange:w=>B(w.target.value),placeholder:"Model ID from your image provider",autoComplete:"off",className:`${ee} mt-1`})]}),e.jsx("p",{className:"text-[11px] leading-relaxed text-ink-secondary",children:"OpenAI-compatible Images API. localhost refers to the OpenMausBot server, including when you open this page remotely."})]}),e.jsxs("label",{className:"block text-[11.5px] text-ink-secondary",children:[A.keyLabel,t==="custom"?" (optional)":"",e.jsx("input",{type:"password",value:x,disabled:L,onChange:w=>v(w.target.value),onKeyDown:w=>{w.key==="Enter"&&(w.preventDefault(),M())},placeholder:z?"Saved key · paste to replace":t==="custom"?"Leave blank for a keyless connection":"Paste API key",autoComplete:"off",className:`${ee} mt-1`})]}),t==="xai"&&e.jsx("p",{className:"text-[11px] leading-relaxed text-ink-secondary",children:"Shares the Grok API key in Settings. Changing or removing it also affects other Grok features."}),t==="custom"&&z&&e.jsx("p",{className:"text-[11px] leading-relaxed text-ink-secondary",children:"The saved custom key will be used. Remove it for a keyless connection."}),e.jsxs("div",{className:"flex items-center justify-end gap-2",children:[z&&e.jsx("button",{type:"button",onClick:()=>{E()},disabled:L,className:"mr-auto rounded-md py-1.5 text-[11.5px] text-ink-secondary hover:text-danger disabled:opacity-50",children:"Remove saved key"}),e.jsxs("button",{type:"button",onClick:()=>{M()},disabled:L||(t==="custom"?!N.trim()||!S.trim()||!I&&F:!x.trim()),className:Ca,children:[k?e.jsx(se,{size:13,className:"animate-spin"}):e.jsx(xe,{size:13}),t==="custom"?"Save connection":"Save key"]})]})]});return e.jsxs("div",{className:"mt-5 border-t border-hairline/40 pt-4",children:[e.jsxs("div",{className:"flex items-center gap-2 text-[13px] font-medium text-ink",children:[e.jsx(be,{size:14,className:"text-accent"})," Generate with AI"]}),e.jsxs("label",{className:"mt-3 block text-[11.5px] text-ink-secondary",children:["Image provider",e.jsx("select",{value:t,onChange:w=>{X(w.target.value)},disabled:L||!y.config,className:`${ee} mt-1`,children:Object.entries(Ce).map(([w,G])=>e.jsx("option",{value:w,children:G.label},w))})]}),e.jsxs("p",{className:"mt-1.5 text-[11px] leading-relaxed text-ink-secondary",children:[t==="openai"?"GPT Image 2 · low-quality square draft. Billed to your OpenAI API account.":t==="xai"?"Grok Imagine · API billing is separate from your Grok subscription.":"Connect a local router or image provider."," ","This connection is shared by all bot avatars."]}),F?e.jsxs("details",{className:"mt-3 rounded-lg border border-hairline/40 px-3 py-2",children:[e.jsx("summary",{className:"cursor-pointer text-[11.5px] text-ink-secondary",children:"Connection settings"}),e.jsx("div",{className:"mt-3",children:q})]},t):e.jsx("div",{className:"mt-3",children:q}),e.jsx("textarea",{value:D,disabled:L,onChange:w=>C(w.target.value.slice(0,400)),maxLength:400,placeholder:`Optional direction, e.g. “a calm navigator inspired by ${a}”`,"aria-label":"Avatar generation direction",className:`${ee} mt-3 min-h-[72px] resize-none`}),e.jsxs("div",{className:"mt-2 flex items-center justify-between gap-3",children:[e.jsxs("span",{className:"text-[11px] tabular-nums text-ink-secondary",children:[D.length,"/400"]}),e.jsxs("button",{type:"button",onClick:()=>{!L&&F&&!I&&(c(null),n(D.trim()))},disabled:L||!F||I,className:"flex items-center gap-1.5 rounded-lg bg-accent px-3 py-1.5 text-[12.5px] font-medium text-white hover:brightness-110 disabled:opacity-50",children:[i?e.jsx(se,{size:13,className:"animate-spin"}):e.jsx(be,{size:13}),i?"Generating…":"Generate avatar"]})]}),I&&e.jsx("p",{role:"status",className:"mt-2 text-[11px] text-ink-secondary",children:"Save your connection changes before generating."}),T&&e.jsx("div",{role:"alert",className:"mt-3 text-[12px] text-danger",children:T})]})}const ye=168;function Sa({bot:a,disabled:l,onPatch:i}){const n=me(a.avatarZoom??Y),r=re(a.avatarFocusX??$),y=re(a.avatarFocusY??$),h=n!==Y||r!==$||y!==$,o=m.useRef(null),s=p=>{l||p.button!==0||(p.currentTarget.setPointerCapture(p.pointerId),o.current={x:p.clientX,y:p.clientY,focusX:r,focusY:y,pointer:p.pointerId})},d=p=>{const b=o.current;!b||p.pointerId!==b.pointer||i({avatarFocusX:re(b.focusX-(p.clientX-b.x)/ye/n),avatarFocusY:re(b.focusY-(p.clientY-b.y)/ye/n)})},g=p=>{o.current?.pointer===p.pointerId&&(o.current=null)},f=p=>{l||p.deltaY===0||(p.preventDefault(),i({avatarZoom:me(n+(p.deltaY<0?.08:-.08))}))};return e.jsxs("div",{className:"py-3",children:[e.jsx("div",{className:"mx-auto w-fit cursor-grab touch-none active:cursor-grabbing",onPointerDown:s,onPointerMove:d,onPointerUp:g,onPointerCancel:g,onWheel:f,children:e.jsx(pe,{bot:a,size:ye,animated:!1,label:`${a.name} avatar preview`})}),e.jsxs("div",{className:"mb-1.5 mt-4 flex items-baseline justify-between",children:[e.jsx("span",{className:"text-[12px] font-medium uppercase tracking-[0.08em] text-ink-secondary",children:"Zoom"}),e.jsxs("span",{className:"tabular-nums text-[12px] text-ink-secondary",children:[Math.round(n*100),"%"]})]}),e.jsx("input",{type:"range",min:Y,max:fe,step:.01,value:n,disabled:l,"aria-label":"Zoom avatar","aria-valuemin":Y,"aria-valuemax":fe,"aria-valuenow":n,"aria-valuetext":`${Math.round(n*100)}%`,onChange:p=>i({avatarZoom:me(Number(p.target.value))}),className:"w-full accent-accent"}),e.jsxs("div",{className:"mt-1.5 flex items-center justify-between gap-3 text-[11.5px] text-ink-secondary",children:[e.jsx("span",{children:"Drag the picture to reposition it. Scroll to zoom."}),h&&e.jsx("button",{type:"button",disabled:l,onClick:()=>i({avatarZoom:Y,avatarFocusX:$,avatarFocusY:$}),className:"shrink-0 rounded-md px-2 py-1 text-ink hover:bg-control disabled:opacity-50",children:"Reset framing"})]})]})}const Ma={mascot:"Mascot",circle:"Circle",rounded:"Rounded",square:"Square"};function Na({bot:a,activeState:l,mascotMotion:i,onPatch:n}){const{flushBotPatches:r}=O(),{request:y,uploadAvatar:h}=P(),o=je(),s=m.useRef(null),[d,g]=m.useState(!1),[f,p]=m.useState(!1),[b,B]=m.useState(!1),[x,v]=m.useState(null),D=a.avatarCrop??"mascot",C=m.useRef(D);C.current=D;const k=d||b||f,R=async t=>{if(!(!t||k)){g(!0),v(null);try{const N=h?null:await Pe(t),S=h?await h(t):N?He(N.path):null;if(!S)throw new Error("The uploaded image could not be used as an avatar");const A=C.current;n({avatarUrl:S,avatarCrop:A==="mascot"?"circle":A,avatarZoom:Y,avatarFocusX:$,avatarFocusY:$})}catch(N){v(N instanceof Error?N.message:String(N))}finally{g(!1),s.current&&(s.current.value="")}}},T=()=>{v(null),n({avatarUrl:null,avatarCrop:"mascot",avatarZoom:Y,avatarFocusX:$,avatarFocusY:$})},c=async t=>{if(!k){B(!0),v(null);try{const N=C.current;await r(a.id);const S=await y(`/api/bots/${a.id}/avatar/generate`,{method:"POST",body:JSON.stringify({prompt:t.trim()})}),A=C.current;n({avatarUrl:S.avatarUrl,avatarCrop:A===N?S.bot.avatarCrop??"circle":A})}catch(N){v(N instanceof Error?N.message:String(N))}finally{B(!1)}}};return e.jsxs("div",{className:"overflow-hidden rounded-xl border border-hairline/40 bg-card",children:[e.jsxs("div",{className:"flex items-center justify-between border-b border-hairline/40 px-3 py-2.5",children:[e.jsx("span",{className:"rounded-lg bg-control px-3 py-1.5 text-[14px] font-medium text-ink",children:"Avatar"}),e.jsx("button",{disabled:k,onClick:()=>n({avatarCrop:"mascot",color:"green",mascotExpression:null,mascotBody:"cursor"}),className:"rounded-md px-2 py-1.5 text-[13px] text-ink-secondary hover:bg-control hover:text-ink disabled:opacity-50",children:"Reset mascot"})]}),e.jsxs("div",{className:"p-3",children:[!!o?.icons.length&&e.jsxs("div",{className:"mb-3 border-b border-hairline/40 pb-3",children:[e.jsxs("div",{className:"mb-2 text-[13px] font-medium text-ink-secondary",children:[o.name," icons"]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:o.icons.map(t=>e.jsx("button",{type:"button",disabled:k,title:t.name,"aria-label":`Use ${t.name} icon`,className:"flex size-12 items-center justify-center rounded-lg border border-hairline/40 hover:bg-control disabled:opacity-50",onClick:()=>{const N=Uint8Array.from(atob(t.image.slice(22)),S=>S.charCodeAt(0));R(new File([N],`${t.id}.png`,{type:"image/png"}))},children:e.jsx("img",{src:t.image,alt:"",className:"size-10 rounded-md object-contain"})},t.id))})]}),D!=="mascot"&&a.avatarUrl?e.jsx(Sa,{bot:a,disabled:k,onPatch:n}):e.jsx("div",{className:"flex justify-center py-3",children:e.jsx(pe,{bot:a,state:l,size:112,motion:i?.kind??"none",motionKey:i?.nonce??0})}),e.jsxs("div",{className:"mt-2 flex gap-2",children:[e.jsx("input",{ref:s,type:"file",accept:"image/png,image/jpeg,image/gif,image/webp",className:"sr-only",onChange:t=>{R(t.target.files?.[0])}}),e.jsxs("button",{type:"button",onClick:()=>s.current?.click(),disabled:k,className:"flex flex-1 items-center justify-center gap-1.5 rounded-lg bg-control px-3 py-2 text-[13px] text-ink hover:bg-raised-hover disabled:opacity-50",children:[d?e.jsx(se,{size:14,className:"animate-spin"}):e.jsx(fa,{size:14}),"Upload image"]}),a.avatarUrl&&e.jsx("button",{type:"button",onClick:T,disabled:k,"aria-label":"Remove custom avatar image",title:"Remove custom image",className:"flex size-10 items-center justify-center rounded-lg text-ink-secondary hover:bg-control hover:text-danger disabled:opacity-50",children:e.jsx(Be,{size:14})})]}),e.jsx("div",{className:"mt-1.5 text-[11.5px] text-ink-secondary",children:"PNG, JPEG, GIF, or WebP · up to 10 MB"}),e.jsx("div",{className:"mb-2 mt-4 text-[12px] font-medium uppercase tracking-[0.08em] text-ink-secondary",children:"Shape"}),e.jsx("div",{className:"grid grid-cols-4 overflow-hidden rounded-lg border border-hairline/40",children:Ee.map((t,N)=>e.jsx("button",{type:"button",disabled:k,"aria-pressed":D===t,onClick:()=>n({avatarCrop:t}),className:K("py-1.5 text-[12.5px] disabled:opacity-50",N>0&&"border-l border-hairline/40",D===t?"bg-control text-ink":"text-ink-secondary hover:bg-control/60 hover:text-ink"),children:Ma[t]},t))}),D==="mascot"&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"mb-2 mt-4 text-[12px] font-medium uppercase tracking-[0.08em] text-ink-secondary",children:"Expression"}),e.jsx("div",{className:"grid grid-cols-5 gap-2",children:Te.map(t=>e.jsx("button",{type:"button",disabled:k,"aria-pressed":l===t,onClick:()=>n({mascotExpression:t}),className:K("flex h-[58px] items-center justify-center rounded-xl bg-inset transition-colors hover:bg-control disabled:opacity-50",l===t&&"ring-2 ring-accent-border"),title:t,"aria-label":`Use ${t} expression`,children:e.jsx(ge,{color:a.color,bodyId:a.mascotBody??void 0,state:t,size:42,animated:!1})},t))}),e.jsx("div",{className:"mb-2 mt-4 text-[12px] font-medium uppercase tracking-[0.08em] text-ink-secondary",children:"Color"}),e.jsx("div",{className:"flex flex-wrap gap-2.5",children:Ge.map(t=>e.jsx("button",{type:"button",disabled:k,"aria-pressed":a.color===t,onClick:()=>n({color:t}),className:K("size-10 rounded-full border-2 border-transparent transition-transform hover:scale-110 disabled:opacity-50",a.color===t&&"ring-2 ring-accent-border ring-offset-2 ring-offset-card"),style:{backgroundColor:Je[t]},title:t,"aria-label":`Use ${t} mascot color`},t))}),e.jsx("div",{className:"mb-2 mt-4 text-[12px] font-medium uppercase tracking-[0.08em] text-ink-secondary",children:"Body"}),e.jsx("div",{className:"grid grid-cols-5 gap-1.5",children:Ke.map(t=>e.jsx("button",{type:"button",disabled:k,"aria-pressed":(a.mascotBody??"cursor")===t,"aria-label":`Use the ${Fe[t].name} body`,onClick:()=>n({mascotBody:t}),className:K("flex items-center justify-center rounded-lg py-1.5 disabled:opacity-50",(a.mascotBody??"cursor")===t?"bg-control text-ink":"text-ink-secondary hover:bg-control/60"),children:e.jsx(ge,{color:a.color,bodyId:t,size:34,animated:!1,trackPointer:!1})},t))})]}),e.jsx(ka,{botLabel:a.title||a.name,disabled:d,generating:b,onGenerate:c,onSavingChange:p}),x&&e.jsx("div",{role:"alert",className:"mt-3 text-[12px] text-danger",children:x})]})]})}function Ba({bot:a,onClose:l,inline:i=!1}){const n=m.useRef(null),r=m.useRef(l);r.current=l;const y=m.useCallback(()=>r.current(),[]);m.useEffect(()=>{const o=document.activeElement instanceof HTMLElement?document.activeElement:null;n.current?.focus();const s=d=>{if(d.key==="Escape"){d.preventDefault(),y();return}if(d.key!=="Tab")return;const g=[...n.current?.querySelectorAll('button:not([disabled]), [href], [tabindex]:not([tabindex="-1"])')??[]];if(g.length===0){d.preventDefault(),n.current?.focus();return}const f=g[0],p=g[g.length-1];d.shiftKey&&document.activeElement===f?(d.preventDefault(),p.focus()):!d.shiftKey&&document.activeElement===p&&(d.preventDefault(),f.focus())};return window.addEventListener("keydown",s),()=>{window.removeEventListener("keydown",s),o?.focus()}},[y]);const h=e.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/55 p-4 backdrop-blur-[2px] sm:p-6",onMouseDown:o=>o.target===o.currentTarget&&y(),children:e.jsxs("div",{ref:n,role:"dialog","aria-modal":"true","aria-labelledby":"bot-instructions-title",tabIndex:-1,className:"animate-pop-in flex max-h-[min(760px,calc(100dvh-2rem))] w-full max-w-[760px] flex-col overflow-hidden rounded-[24px] border border-hairline/50 bg-panel shadow-2xl shadow-black/50 outline-none",children:[e.jsxs("header",{className:"flex items-start justify-between gap-4 border-b border-hairline/40 px-6 pb-4 pt-6 sm:px-8 sm:pt-7",children:[e.jsxs("div",{className:"flex min-w-0 items-center gap-3",children:[e.jsx(pe,{bot:a,state:Ie(a.mascotExpression)??"idle",size:38,motion:"none",motionKey:0,animated:!1}),e.jsxs("div",{className:"min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-2 text-accent-text",children:[e.jsx(oe,{size:15}),e.jsx("span",{className:"text-[11px] font-semibold uppercase tracking-[0.08em]",children:"Bot instructions"})]}),e.jsx("h2",{id:"bot-instructions-title",className:"mt-0.5 truncate text-[20px] font-semibold tracking-[-0.01em] text-ink",children:a.name}),a.title&&e.jsx("p",{className:"mt-0.5 truncate text-[12.5px] text-ink-secondary",children:a.title})]})]}),e.jsx("button",{type:"button",onClick:y,"aria-label":"Close bot instructions",className:"flex size-9 shrink-0 items-center justify-center rounded-lg text-ink-secondary hover:bg-raised hover:text-ink",children:e.jsx(De,{size:19})})]}),e.jsx("div",{className:"min-h-0 flex-1 overflow-y-auto px-6 py-5 sm:px-8 sm:py-6",children:a.description.trim()?e.jsx("div",{className:"whitespace-pre-wrap break-words rounded-xl border border-hairline/50 bg-inset px-4 py-4 text-[13.5px] leading-6 text-ink",children:a.description}):e.jsxs("div",{className:"rounded-xl border border-dashed border-hairline bg-inset px-5 py-12 text-center",children:[e.jsx(oe,{size:22,className:"mx-auto text-ink-tertiary"}),e.jsx("p",{className:"mt-3 text-[13px] font-medium text-ink",children:"No instructions yet"}),e.jsx("p",{className:"mt-1 text-[12px] text-ink-secondary",children:"Add them from this bot’s profile."})]})}),e.jsxs("footer",{className:"flex items-center justify-between gap-4 border-t border-hairline/40 px-6 py-4 text-[11.5px] text-ink-secondary sm:px-8",children:[e.jsx("span",{children:"Included in this bot’s context on every turn."}),e.jsx("button",{type:"button",onClick:y,className:"rounded-lg bg-control px-3.5 py-2 text-[13px] font-medium text-ink hover:bg-raised-hover",children:"Done"})]})]})});return i?h:Oe.createPortal(h,document.body)}const V="w-full rounded-lg border border-hairline/40 bg-inset px-3 py-2.5 text-[15px] text-ink placeholder:text-ink-secondary focus:outline-none";function Da({label:a,children:l}){return m.createElement("label",{className:"block"},m.createElement("div",{className:"mb-1.5 text-[13px] text-ink-secondary"},a),l)}function La({bot:a}){const{request:l,draft:i}=P(),[n,r]=m.useState([]),y=a.installedPackage?.source==="org";m.useEffect(()=>{if(!y||i)return;let o=!1;return l("/api/org-library").then(s=>{o||r(s.installs??[])}).catch(()=>{}),()=>{o=!0}},[a.id,y,i]);const h=We(a.installedPackage,n);return h?e.jsxs("div",{className:"rounded-lg bg-inset px-3 py-2 text-[12px] text-ink-secondary",children:[e.jsx("div",{className:"truncate",children:h.line}),h.withdrawn&&e.jsx("div",{className:"mt-0.5 text-warning",children:h.withdrawn})]}):null}const ue=a=>(a??"").trim();function wa(a,l){const i=ue(a.section);return l.some(n=>n.id!==a.id&&!!n.chiefOfStaff&&(ue(n.section)===i||Array.isArray(n.managedSections)&&n.managedSections.some(r=>typeof r=="string"&&ue(r)===i)))}function J({bot:a,kind:l}){const{draft:i}=P(),{state:n}=O();return i||!wa(a,n.bots)?null:e.jsx("div",{className:"mt-1 text-[11.5px] leading-snug text-ink-secondary",children:u(l==="chief"?"botSettings.proposal.chief":"botSettings.proposal.owner")})}const Ra=JSON.parse('["Aaren","Aarika","Abagael","Abagail","Abbe","Abbey","Abbi","Abbie","Abby","Abbye","Abigael","Abigail","Abigale","Abra","Ada","Adah","Adaline","Adan","Adara","Adda","Addi","Addia","Addie","Addy","Adel","Adela","Adelaida","Adelaide","Adele","Adelheid","Adelice","Adelina","Adelind","Adeline","Adella","Adelle","Adena","Adey","Adi","Adiana","Adina","Adora","Adore","Adoree","Adorne","Adrea","Adria","Adriaens","Adrian","Adriana","Adriane","Adrianna","Adrianne","Adriena","Adrienne","Aeriel","Aeriela","Aeriell","Afton","Ag","Agace","Agata","Agatha","Agathe","Aggi","Aggie","Aggy","Agna","Agnella","Agnes","Agnese","Agnesse","Agneta","Agnola","Agretha","Aida","Aidan","Aigneis","Aila","Aile","Ailee","Aileen","Ailene","Ailey","Aili","Ailina","Ailis","Ailsun","Ailyn","Aime","Aimee","Aimil","Aindrea","Ainslee","Ainsley","Ainslie","Ajay","Alaine","Alameda","Alana","Alanah","Alane","Alanna","Alayne","Alberta","Albertina","Albertine","Albina","Alecia","Aleda","Aleece","Aleen","Alejandra","Alejandrina","Alena","Alene","Alessandra","Aleta","Alethea","Alex","Alexa","Alexandra","Alexandrina","Alexi","Alexia","Alexina","Alexine","Alexis","Alfi","Alfie","Alfreda","Alfy","Ali","Alia","Alica","Alice","Alicea","Alicia","Alida","Alidia","Alie","Alika","Alikee","Alina","Aline","Alis","Alisa","Alisha","Alison","Alissa","Alisun","Alix","Aliza","Alla","Alleen","Allegra","Allene","Alli","Allianora","Allie","Allina","Allis","Allison","Allissa","Allix","Allsun","Allx","Ally","Allyce","Allyn","Allys","Allyson","Alma","Almeda","Almeria","Almeta","Almira","Almire","Aloise","Aloisia","Aloysia","Alta","Althea","Alvera","Alverta","Alvina","Alvinia","Alvira","Alyce","Alyda","Alys","Alysa","Alyse","Alysia","Alyson","Alyss","Alyssa","Amabel","Amabelle","Amalea","Amalee","Amaleta","Amalia","Amalie","Amalita","Amalle","Amanda","Amandi","Amandie","Amandy","Amara","Amargo","Amata","Amber","Amberly","Ambur","Ame","Amelia","Amelie","Amelina","Ameline","Amelita","Ami","Amie","Amii","Amil","Amitie","Amity","Ammamaria","Amy","Amye","Ana","Anabal","Anabel","Anabella","Anabelle","Analiese","Analise","Anallese","Anallise","Anastasia","Anastasie","Anastassia","Anatola","Andee","Andeee","Anderea","Andi","Andie","Andra","Andrea","Andreana","Andree","Andrei","Andria","Andriana","Andriette","Andromache","Andy","Anestassia","Anet","Anett","Anetta","Anette","Ange","Angel","Angela","Angele","Angelia","Angelica","Angelika","Angelina","Angeline","Angelique","Angelita","Angelle","Angie","Angil","Angy","Ania","Anica","Anissa","Anita","Anitra","Anjanette","Anjela","Ann","Ann-Marie","Anna","Anna-Diana","Anna-Diane","Anna-Maria","Annabal","Annabel","Annabela","Annabell","Annabella","Annabelle","Annadiana","Annadiane","Annalee","Annaliese","Annalise","Annamaria","Annamarie","Anne","Anne-Corinne","Anne-Marie","Annecorinne","Anneliese","Annelise","Annemarie","Annetta","Annette","Anni","Annice","Annie","Annis","Annissa","Annmaria","Annmarie","Annnora","Annora","Anny","Anselma","Ansley","Anstice","Anthe","Anthea","Anthia","Anthiathia","Antoinette","Antonella","Antonetta","Antonia","Antonie","Antonietta","Antonina","Anya","Appolonia","April","Aprilette","Ara","Arabel","Arabela","Arabele","Arabella","Arabelle","Arda","Ardath","Ardeen","Ardelia","Ardelis","Ardella","Ardelle","Arden","Ardene","Ardenia","Ardine","Ardis","Ardisj","Ardith","Ardra","Ardyce","Ardys","Ardyth","Aretha","Ariadne","Ariana","Aridatha","Ariel","Ariela","Ariella","Arielle","Arlana","Arlee","Arleen","Arlen","Arlena","Arlene","Arleta","Arlette","Arleyne","Arlie","Arliene","Arlina","Arlinda","Arline","Arluene","Arly","Arlyn","Arlyne","Aryn","Ashely","Ashia","Ashien","Ashil","Ashla","Ashlan","Ashlee","Ashleigh","Ashlen","Ashley","Ashli","Ashlie","Ashly","Asia","Astra","Astrid","Astrix","Atalanta","Athena","Athene","Atlanta","Atlante","Auberta","Aubine","Aubree","Aubrette","Aubrey","Aubrie","Aubry","Audi","Audie","Audra","Audre","Audrey","Audrie","Audry","Audrye","Audy","Augusta","Auguste","Augustina","Augustine","Aundrea","Aura","Aurea","Aurel","Aurelea","Aurelia","Aurelie","Auria","Aurie","Aurilia","Aurlie","Auroora","Aurora","Aurore","Austin","Austina","Austine","Ava","Aveline","Averil","Averyl","Avie","Avis","Aviva","Avivah","Avril","Avrit","Ayn","Bab","Babara","Babb","Babbette","Babbie","Babette","Babita","Babs","Bambi","Bambie","Bamby","Barb","Barbabra","Barbara","Barbara-Anne","Barbaraanne","Barbe","Barbee","Barbette","Barbey","Barbi","Barbie","Barbra","Barby","Bari","Barrie","Barry","Basia","Bathsheba","Batsheva","Bea","Beatrice","Beatrisa","Beatrix","Beatriz","Bebe","Becca","Becka","Becki","Beckie","Becky","Bee","Beilul","Beitris","Bekki","Bel","Belia","Belicia","Belinda","Belita","Bell","Bella","Bellanca","Belle","Bellina","Belva","Belvia","Bendite","Benedetta","Benedicta","Benedikta","Benetta","Benita","Benni","Bennie","Benny","Benoite","Berenice","Beret","Berget","Berna","Bernadene","Bernadette","Bernadina","Bernadine","Bernardina","Bernardine","Bernelle","Bernete","Bernetta","Bernette","Berni","Bernice","Bernie","Bernita","Berny","Berri","Berrie","Berry","Bert","Berta","Berte","Bertha","Berthe","Berti","Bertie","Bertina","Bertine","Berty","Beryl","Beryle","Bess","Bessie","Bessy","Beth","Bethanne","Bethany","Bethena","Bethina","Betsey","Betsy","Betta","Bette","Bette-Ann","Betteann","Betteanne","Betti","Bettina","Bettine","Betty","Bettye","Beulah","Bev","Beverie","Beverlee","Beverley","Beverlie","Beverly","Bevvy","Bianca","Bianka","Bibbie","Bibby","Bibbye","Bibi","Biddie","Biddy","Bidget","Bili","Bill","Billi","Billie","Billy","Billye","Binni","Binnie","Binny","Bird","Birdie","Birgit","Birgitta","Blair","Blaire","Blake","Blakelee","Blakeley","Blanca","Blanch","Blancha","Blanche","Blinni","Blinnie","Blinny","Bliss","Blisse","Blithe","Blondell","Blondelle","Blondie","Blondy","Blythe","Bobbe","Bobbee","Bobbette","Bobbi","Bobbie","Bobby","Bobbye","Bobette","Bobina","Bobine","Bobinette","Bonita","Bonnee","Bonni","Bonnibelle","Bonnie","Bonny","Brana","Brandais","Brande","Brandea","Brandi","Brandice","Brandie","Brandise","Brandy","Breanne","Brear","Bree","Breena","Bren","Brena","Brenda","Brenn","Brenna","Brett","Bria","Briana","Brianna","Brianne","Bride","Bridget","Bridgette","Bridie","Brier","Brietta","Brigid","Brigida","Brigit","Brigitta","Brigitte","Brina","Briney","Brinn","Brinna","Briny","Brit","Brita","Britney","Britni","Britt","Britta","Brittan","Brittaney","Brittani","Brittany","Britte","Britteny","Brittne","Brittney","Brittni","Brook","Brooke","Brooks","Brunhilda","Brunhilde","Bryana","Bryn","Bryna","Brynn","Brynna","Brynne","Buffy","Bunni","Bunnie","Bunny","Cacilia","Cacilie","Cahra","Cairistiona","Caitlin","Caitrin","Cal","Calida","Calla","Calley","Calli","Callida","Callie","Cally","Calypso","Cam","Camala","Camel","Camella","Camellia","Cami","Camila","Camile","Camilla","Camille","Cammi","Cammie","Cammy","Candace","Candi","Candice","Candida","Candide","Candie","Candis","Candra","Candy","Caprice","Cara","Caralie","Caren","Carena","Caresa","Caressa","Caresse","Carey","Cari","Caria","Carie","Caril","Carilyn","Carin","Carina","Carine","Cariotta","Carissa","Carita","Caritta","Carla","Carlee","Carleen","Carlen","Carlene","Carley","Carlie","Carlin","Carlina","Carline","Carlita","Carlota","Carlotta","Carly","Carlye","Carlyn","Carlynn","Carlynne","Carma","Carmel","Carmela","Carmelia","Carmelina","Carmelita","Carmella","Carmelle","Carmen","Carmencita","Carmina","Carmine","Carmita","Carmon","Caro","Carol","Carol-Jean","Carola","Carolan","Carolann","Carole","Carolee","Carolin","Carolina","Caroline","Caroljean","Carolyn","Carolyne","Carolynn","Caron","Carree","Carri","Carrie","Carrissa","Carroll","Carry","Cary","Caryl","Caryn","Casandra","Casey","Casi","Casie","Cass","Cassandra","Cassandre","Cassandry","Cassaundra","Cassey","Cassi","Cassie","Cassondra","Cassy","Catarina","Cate","Caterina","Catha","Catharina","Catharine","Cathe","Cathee","Catherin","Catherina","Catherine","Cathi","Cathie","Cathleen","Cathlene","Cathrin","Cathrine","Cathryn","Cathy","Cathyleen","Cati","Catie","Catina","Catlaina","Catlee","Catlin","Catrina","Catriona","Caty","Caye","Cayla","Cecelia","Cecil","Cecile","Ceciley","Cecilia","Cecilla","Cecily","Ceil","Cele","Celene","Celesta","Celeste","Celestia","Celestina","Celestine","Celestyn","Celestyna","Celia","Celie","Celina","Celinda","Celine","Celinka","Celisse","Celka","Celle","Cesya","Chad","Chanda","Chandal","Chandra","Channa","Chantal","Chantalle","Charil","Charin","Charis","Charissa","Charisse","Charita","Charity","Charla","Charlean","Charleen","Charlena","Charlene","Charline","Charlot","Charlotta","Charlotte","Charmain","Charmaine","Charmane","Charmian","Charmine","Charmion","Charo","Charyl","Chastity","Chelsae","Chelsea","Chelsey","Chelsie","Chelsy","Cher","Chere","Cherey","Cheri","Cherianne","Cherice","Cherida","Cherie","Cherilyn","Cherilynn","Cherin","Cherise","Cherish","Cherlyn","Cherri","Cherrita","Cherry","Chery","Cherye","Cheryl","Cheslie","Chiarra","Chickie","Chicky","Chiquia","Chiquita","Chlo","Chloe","Chloette","Chloris","Chris","Chrissie","Chrissy","Christa","Christabel","Christabella","Christal","Christalle","Christan","Christean","Christel","Christen","Christi","Christian","Christiana","Christiane","Christie","Christin","Christina","Christine","Christy","Christye","Christyna","Chrysa","Chrysler","Chrystal","Chryste","Chrystel","Cicely","Cicily","Ciel","Cilka","Cinda","Cindee","Cindelyn","Cinderella","Cindi","Cindie","Cindra","Cindy","Cinnamon","Cissiee","Cissy","Clair","Claire","Clara","Clarabelle","Clare","Claresta","Clareta","Claretta","Clarette","Clarey","Clari","Claribel","Clarice","Clarie","Clarinda","Clarine","Clarissa","Clarisse","Clarita","Clary","Claude","Claudelle","Claudetta","Claudette","Claudia","Claudie","Claudina","Claudine","Clea","Clem","Clemence","Clementia","Clementina","Clementine","Clemmie","Clemmy","Cleo","Cleopatra","Clerissa","Clio","Clo","Cloe","Cloris","Clotilda","Clovis","Codee","Codi","Codie","Cody","Coleen","Colene","Coletta","Colette","Colleen","Collen","Collete","Collette","Collie","Colline","Colly","Con","Concettina","Conchita","Concordia","Conni","Connie","Conny","Consolata","Constance","Constancia","Constancy","Constanta","Constantia","Constantina","Constantine","Consuela","Consuelo","Cookie","Cora","Corabel","Corabella","Corabelle","Coral","Coralie","Coraline","Coralyn","Cordelia","Cordelie","Cordey","Cordi","Cordie","Cordula","Cordy","Coreen","Corella","Corenda","Corene","Coretta","Corette","Corey","Cori","Corie","Corilla","Corina","Corine","Corinna","Corinne","Coriss","Corissa","Corliss","Corly","Cornela","Cornelia","Cornelle","Cornie","Corny","Correna","Correy","Corri","Corrianne","Corrie","Corrina","Corrine","Corrinne","Corry","Cortney","Cory","Cosetta","Cosette","Costanza","Courtenay","Courtnay","Courtney","Crin","Cris","Crissie","Crissy","Crista","Cristabel","Cristal","Cristen","Cristi","Cristie","Cristin","Cristina","Cristine","Cristionna","Cristy","Crysta","Crystal","Crystie","Cthrine","Cyb","Cybil","Cybill","Cymbre","Cynde","Cyndi","Cyndia","Cyndie","Cyndy","Cynthea","Cynthia","Cynthie","Cynthy","Dacey","Dacia","Dacie","Dacy","Dael","Daffi","Daffie","Daffy","Dagmar","Dahlia","Daile","Daisey","Daisi","Daisie","Daisy","Dale","Dalenna","Dalia","Dalila","Dallas","Daloris","Damara","Damaris","Damita","Dana","Danell","Danella","Danette","Dani","Dania","Danica","Danice","Daniela","Daniele","Daniella","Danielle","Danika","Danila","Danit","Danita","Danna","Danni","Dannie","Danny","Dannye","Danya","Danyelle","Danyette","Daphene","Daphna","Daphne","Dara","Darb","Darbie","Darby","Darcee","Darcey","Darci","Darcie","Darcy","Darda","Dareen","Darell","Darelle","Dari","Daria","Darice","Darla","Darleen","Darlene","Darline","Darlleen","Daron","Darrelle","Darryl","Darsey","Darsie","Darya","Daryl","Daryn","Dasha","Dasi","Dasie","Dasya","Datha","Daune","Daveen","Daveta","Davida","Davina","Davine","Davita","Dawn","Dawna","Dayle","Dayna","Ddene","De","Deana","Deane","Deanna","Deanne","Deb","Debbi","Debbie","Debby","Debee","Debera","Debi","Debor","Debora","Deborah","Debra","Dede","Dedie","Dedra","Dee","Dee","Dee","Deeann","Deeanne","Deedee","Deena","Deerdre","Deeyn","Dehlia","Deidre","Deina","Deirdre","Del","Dela","Delcina","Delcine","Delia","Delila","Delilah","Delinda","Dell","Della","Delly","Delora","Delores","Deloria","Deloris","Delphine","Delphinia","Demeter","Demetra","Demetria","Demetris","Dena","Deni","Denice","Denise","Denna","Denni","Dennie","Denny","Deny","Denys","Denyse","Deonne","Desdemona","Desirae","Desiree","Desiri","Deva","Devan","Devi","Devin","Devina","Devinne","Devon","Devondra","Devonna","Devonne","Devora","Di","Diahann","Dian","Diana","Diandra","Diane","Diane-Marie","Dianemarie","Diann","Dianna","Dianne","Diannne","Didi","Dido","Diena","Dierdre","Dina","Dinah","Dinnie","Dinny","Dion","Dione","Dionis","Dionne","Dita","Dix","Dixie","Dniren","Dode","Dodi","Dodie","Dody","Doe","Doll","Dolley","Dolli","Dollie","Dolly","Dolores","Dolorita","Doloritas","Domeniga","Dominga","Domini","Dominica","Dominique","Dona","Donella","Donelle","Donetta","Donia","Donica","Donielle","Donna","Donnamarie","Donni","Donnie","Donny","Dora","Doralia","Doralin","Doralyn","Doralynn","Doralynne","Dore","Doreen","Dorelia","Dorella","Dorelle","Dorena","Dorene","Doretta","Dorette","Dorey","Dori","Doria","Dorian","Dorice","Dorie","Dorine","Doris","Dorisa","Dorise","Dorita","Doro","Dorolice","Dorolisa","Dorotea","Doroteya","Dorothea","Dorothee","Dorothy","Dorree","Dorri","Dorrie","Dorris","Dorry","Dorthea","Dorthy","Dory","Dosi","Dot","Doti","Dotti","Dottie","Dotty","Dre","Dreddy","Dredi","Drona","Dru","Druci","Drucie","Drucill","Drucy","Drusi","Drusie","Drusilla","Drusy","Dulce","Dulcea","Dulci","Dulcia","Dulciana","Dulcie","Dulcine","Dulcinea","Dulcy","Dulsea","Dusty","Dyan","Dyana","Dyane","Dyann","Dyanna","Dyanne","Dyna","Dynah","Eachelle","Eada","Eadie","Eadith","Ealasaid","Eartha","Easter","Eba","Ebba","Ebonee","Ebony","Eda","Eddi","Eddie","Eddy","Ede","Edee","Edeline","Eden","Edi","Edie","Edin","Edita","Edith","Editha","Edithe","Ediva","Edna","Edwina","Edy","Edyth","Edythe","Effie","Eileen","Eilis","Eimile","Eirena","Ekaterina","Elaina","Elaine","Elana","Elane","Elayne","Elberta","Elbertina","Elbertine","Eleanor","Eleanora","Eleanore","Electra","Eleen","Elena","Elene","Eleni","Elenore","Eleonora","Eleonore","Elfie","Elfreda","Elfrida","Elfrieda","Elga","Elianora","Elianore","Elicia","Elie","Elinor","Elinore","Elisa","Elisabet","Elisabeth","Elisabetta","Elise","Elisha","Elissa","Elita","Eliza","Elizabet","Elizabeth","Elka","Elke","Ella","Elladine","Elle","Ellen","Ellene","Ellette","Elli","Ellie","Ellissa","Elly","Ellyn","Ellynn","Elmira","Elna","Elnora","Elnore","Eloisa","Eloise","Elonore","Elora","Elsa","Elsbeth","Else","Elset","Elsey","Elsi","Elsie","Elsinore","Elspeth","Elsy","Elva","Elvera","Elvina","Elvira","Elwira","Elyn","Elyse","Elysee","Elysha","Elysia","Elyssa","Em","Ema","Emalee","Emalia","Emelda","Emelia","Emelina","Emeline","Emelita","Emelyne","Emera","Emilee","Emili","Emilia","Emilie","Emiline","Emily","Emlyn","Emlynn","Emlynne","Emma","Emmalee","Emmaline","Emmalyn","Emmalynn","Emmalynne","Emmeline","Emmey","Emmi","Emmie","Emmy","Emmye","Emogene","Emyle","Emylee","Engracia","Enid","Enrica","Enrichetta","Enrika","Enriqueta","Eolanda","Eolande","Eran","Erda","Erena","Erica","Ericha","Ericka","Erika","Erin","Erina","Erinn","Erinna","Erma","Ermengarde","Ermentrude","Ermina","Erminia","Erminie","Erna","Ernaline","Ernesta","Ernestine","Ertha","Eryn","Esma","Esmaria","Esme","Esmeralda","Essa","Essie","Essy","Esta","Estel","Estele","Estell","Estella","Estelle","Ester","Esther","Estrella","Estrellita","Ethel","Ethelda","Ethelin","Ethelind","Etheline","Ethelyn","Ethyl","Etta","Etti","Ettie","Etty","Eudora","Eugenia","Eugenie","Eugine","Eula","Eulalie","Eunice","Euphemia","Eustacia","Eva","Evaleen","Evangelia","Evangelin","Evangelina","Evangeline","Evania","Evanne","Eve","Eveleen","Evelina","Eveline","Evelyn","Evey","Evie","Evita","Evonne","Evvie","Evvy","Evy","Eyde","Eydie","Ezmeralda","Fae","Faina","Faith","Fallon","Fan","Fanchette","Fanchon","Fancie","Fancy","Fanechka","Fania","Fanni","Fannie","Fanny","Fanya","Fara","Farah","Farand","Farica","Farra","Farrah","Farrand","Faun","Faunie","Faustina","Faustine","Fawn","Fawne","Fawnia","Fay","Faydra","Faye","Fayette","Fayina","Fayre","Fayth","Faythe","Federica","Fedora","Felecia","Felicdad","Felice","Felicia","Felicity","Felicle","Felipa","Felisha","Felita","Feliza","Fenelia","Feodora","Ferdinanda","Ferdinande","Fern","Fernanda","Fernande","Fernandina","Ferne","Fey","Fiann","Fianna","Fidela","Fidelia","Fidelity","Fifi","Fifine","Filia","Filide","Filippa","Fina","Fiona","Fionna","Fionnula","Fiorenze","Fleur","Fleurette","Flo","Flor","Flora","Florance","Flore","Florella","Florence","Florencia","Florentia","Florenza","Florette","Flori","Floria","Florida","Florie","Florina","Florinda","Floris","Florri","Florrie","Florry","Flory","Flossi","Flossie","Flossy","Flss","Fran","Francene","Frances","Francesca","Francine","Francisca","Franciska","Francoise","Francyne","Frank","Frankie","Franky","Franni","Frannie","Franny","Frayda","Fred","Freda","Freddi","Freddie","Freddy","Fredelia","Frederica","Fredericka","Frederique","Fredi","Fredia","Fredra","Fredrika","Freida","Frieda","Friederike","Fulvia","Gabbey","Gabbi","Gabbie","Gabey","Gabi","Gabie","Gabriel","Gabriela","Gabriell","Gabriella","Gabrielle","Gabriellia","Gabrila","Gaby","Gae","Gael","Gail","Gale","Gale","Galina","Garland","Garnet","Garnette","Gates","Gavra","Gavrielle","Gay","Gaye","Gayel","Gayla","Gayle","Gayleen","Gaylene","Gaynor","Gelya","Gena","Gene","Geneva","Genevieve","Genevra","Genia","Genna","Genni","Gennie","Gennifer","Genny","Genovera","Genvieve","George","Georgeanna","Georgeanne","Georgena","Georgeta","Georgetta","Georgette","Georgia","Georgiana","Georgianna","Georgianne","Georgie","Georgina","Georgine","Geralda","Geraldine","Gerda","Gerhardine","Geri","Gerianna","Gerianne","Gerladina","Germain","Germaine","Germana","Gerri","Gerrie","Gerrilee","Gerry","Gert","Gerta","Gerti","Gertie","Gertrud","Gertruda","Gertrude","Gertrudis","Gerty","Giacinta","Giana","Gianina","Gianna","Gigi","Gilberta","Gilberte","Gilbertina","Gilbertine","Gilda","Gilemette","Gill","Gillan","Gilli","Gillian","Gillie","Gilligan","Gilly","Gina","Ginelle","Ginevra","Ginger","Ginni","Ginnie","Ginnifer","Ginny","Giorgia","Giovanna","Gipsy","Giralda","Gisela","Gisele","Gisella","Giselle","Giuditta","Giulia","Giulietta","Giustina","Gizela","Glad","Gladi","Gladys","Gleda","Glen","Glenda","Glenine","Glenn","Glenna","Glennie","Glennis","Glori","Gloria","Gloriana","Gloriane","Glory","Glyn","Glynda","Glynis","Glynnis","Gnni","Godiva","Golda","Goldarina","Goldi","Goldia","Goldie","Goldina","Goldy","Grace","Gracia","Gracie","Grata","Gratia","Gratiana","Gray","Grayce","Grazia","Greer","Greta","Gretal","Gretchen","Grete","Gretel","Grethel","Gretna","Gretta","Grier","Griselda","Grissel","Guendolen","Guenevere","Guenna","Guglielma","Gui","Guillema","Guillemette","Guinevere","Guinna","Gunilla","Gus","Gusella","Gussi","Gussie","Gussy","Gusta","Gusti","Gustie","Gusty","Gwen","Gwendolen","Gwendolin","Gwendolyn","Gweneth","Gwenette","Gwenneth","Gwenni","Gwennie","Gwenny","Gwenora","Gwenore","Gwyn","Gwyneth","Gwynne","Gypsy","Hadria","Hailee","Haily","Haleigh","Halette","Haley","Hali","Halie","Halimeda","Halley","Halli","Hallie","Hally","Hana","Hanna","Hannah","Hanni","Hannie","Hannis","Hanny","Happy","Harlene","Harley","Harli","Harlie","Harmonia","Harmonie","Harmony","Harri","Harrie","Harriet","Harriett","Harrietta","Harriette","Harriot","Harriott","Hatti","Hattie","Hatty","Hayley","Hazel","Heath","Heather","Heda","Hedda","Heddi","Heddie","Hedi","Hedvig","Hedvige","Hedwig","Hedwiga","Hedy","Heida","Heidi","Heidie","Helaina","Helaine","Helen","Helen-Elizabeth","Helena","Helene","Helenka","Helga","Helge","Helli","Heloise","Helsa","Helyn","Hendrika","Henka","Henrie","Henrieta","Henrietta","Henriette","Henryetta","Hephzibah","Hermia","Hermina","Hermine","Herminia","Hermione","Herta","Hertha","Hester","Hesther","Hestia","Hetti","Hettie","Hetty","Hilary","Hilda","Hildagard","Hildagarde","Hilde","Hildegaard","Hildegarde","Hildy","Hillary","Hilliary","Hinda","Holli","Hollie","Holly","Holly-Anne","Hollyanne","Honey","Honor","Honoria","Hope","Horatia","Hortense","Hortensia","Hulda","Hyacinth","Hyacintha","Hyacinthe","Hyacinthia","Hyacinthie","Hynda","Ianthe","Ibbie","Ibby","Ida","Idalia","Idalina","Idaline","Idell","Idelle","Idette","Ileana","Ileane","Ilene","Ilise","Ilka","Illa","Ilsa","Ilse","Ilysa","Ilyse","Ilyssa","Imelda","Imogen","Imogene","Imojean","Ina","Indira","Ines","Inesita","Inessa","Inez","Inga","Ingaberg","Ingaborg","Inge","Ingeberg","Ingeborg","Inger","Ingrid","Ingunna","Inna","Iolande","Iolanthe","Iona","Iormina","Ira","Irena","Irene","Irina","Iris","Irita","Irma","Isa","Isabel","Isabelita","Isabella","Isabelle","Isadora","Isahella","Iseabal","Isidora","Isis","Isobel","Issi","Issie","Issy","Ivett","Ivette","Ivie","Ivonne","Ivory","Ivy","Izabel","Jacenta","Jacinda","Jacinta","Jacintha","Jacinthe","Jackelyn","Jacki","Jackie","Jacklin","Jacklyn","Jackquelin","Jackqueline","Jacky","Jaclin","Jaclyn","Jacquelin","Jacqueline","Jacquelyn","Jacquelynn","Jacquenetta","Jacquenette","Jacquetta","Jacquette","Jacqui","Jacquie","Jacynth","Jada","Jade","Jaime","Jaimie","Jaine","Jami","Jamie","Jamima","Jammie","Jan","Jana","Janaya","Janaye","Jandy","Jane","Janean","Janeczka","Janeen","Janel","Janela","Janella","Janelle","Janene","Janenna","Janessa","Janet","Janeta","Janetta","Janette","Janeva","Janey","Jania","Janice","Janie","Janifer","Janina","Janine","Janis","Janith","Janka","Janna","Jannel","Jannelle","Janot","Jany","Jaquelin","Jaquelyn","Jaquenetta","Jaquenette","Jaquith","Jasmin","Jasmina","Jasmine","Jayme","Jaymee","Jayne","Jaynell","Jazmin","Jean","Jeana","Jeane","Jeanelle","Jeanette","Jeanie","Jeanine","Jeanna","Jeanne","Jeannette","Jeannie","Jeannine","Jehanna","Jelene","Jemie","Jemima","Jemimah","Jemmie","Jemmy","Jen","Jena","Jenda","Jenelle","Jeni","Jenica","Jeniece","Jenifer","Jeniffer","Jenilee","Jenine","Jenn","Jenna","Jennee","Jennette","Jenni","Jennica","Jennie","Jennifer","Jennilee","Jennine","Jenny","Jeralee","Jere","Jeri","Jermaine","Jerrie","Jerrilee","Jerrilyn","Jerrine","Jerry","Jerrylee","Jess","Jessa","Jessalin","Jessalyn","Jessamine","Jessamyn","Jesse","Jesselyn","Jessi","Jessica","Jessie","Jessika","Jessy","Jewel","Jewell","Jewelle","Jill","Jillana","Jillane","Jillayne","Jilleen","Jillene","Jilli","Jillian","Jillie","Jilly","Jinny","Jo","Jo","Ann","Jo-Ann","Jo-Anne","Joan","Joana","Joane","Joanie","Joann","Joanna","Joanne","Joannes","Jobey","Jobi","Jobie","Jobina","Joby","Jobye","Jobyna","Jocelin","Joceline","Jocelyn","Jocelyne","Jodee","Jodi","Jodie","Jody","Joeann","Joela","Joelie","Joell","Joella","Joelle","Joellen","Joelly","Joellyn","Joelynn","Joete","Joey","Johanna","Johannah","Johna","Johnath","Johnette","Johnna","Joice","Jojo","Jolee","Joleen","Jolene","Joletta","Joli","Jolie","Joline","Joly","Jolyn","Jolynn","Jonell","Joni","Jonie","Jonis","Jordain","Jordan","Jordana","Jordanna","Jorey","Jori","Jorie","Jorrie","Jorry","Joscelin","Josee","Josefa","Josefina","Josepha","Josephina","Josephine","Josey","Josi","Josie","Josselyn","Josy","Jourdan","Joy","Joya","Joyan","Joyann","Joyce","Joycelin","Joye","Jsandye","Juana","Juanita","Judi","Judie","Judith","Juditha","Judy","Judye","Juieta","Julee","Juli","Julia","Juliana","Juliane","Juliann","Julianna","Julianne","Julie","Julienne","Juliet","Julieta","Julietta","Juliette","Julina","Juline","Julissa","Julita","June","Junette","Junia","Junie","Junina","Justina","Justine","Justinn","Jyoti","Kacey","Kacie","Kacy","Kaela","Kai","Kaia","Kaila","Kaile","Kailey","Kaitlin","Kaitlyn","Kaitlynn","Kaja","Kakalina","Kala","Kaleena","Kali","Kalie","Kalila","Kalina","Kalinda","Kalindi","Kalli","Kally","Kameko","Kamila","Kamilah","Kamillah","Kandace","Kandy","Kania","Kanya","Kara","Kara-Lynn","Karalee","Karalynn","Kare","Karee","Karel","Karen","Karena","Kari","Karia","Karie","Karil","Karilynn","Karin","Karina","Karine","Kariotta","Karisa","Karissa","Karita","Karla","Karlee","Karleen","Karlen","Karlene","Karlie","Karlotta","Karlotte","Karly","Karlyn","Karmen","Karna","Karol","Karola","Karole","Karolina","Karoline","Karoly","Karon","Karrah","Karrie","Karry","Kary","Karyl","Karylin","Karyn","Kasey","Kass","Kassandra","Kassey","Kassi","Kassia","Kassie","Kat","Kata","Katalin","Kate","Katee","Katerina","Katerine","Katey","Kath","Katha","Katharina","Katharine","Katharyn","Kathe","Katherina","Katherine","Katheryn","Kathi","Kathie","Kathleen","Kathlin","Kathrine","Kathryn","Kathryne","Kathy","Kathye","Kati","Katie","Katina","Katine","Katinka","Katleen","Katlin","Katrina","Katrine","Katrinka","Katti","Kattie","Katuscha","Katusha","Katy","Katya","Kay","Kaycee","Kaye","Kayla","Kayle","Kaylee","Kayley","Kaylil","Kaylyn","Keeley","Keelia","Keely","Kelcey","Kelci","Kelcie","Kelcy","Kelila","Kellen","Kelley","Kelli","Kellia","Kellie","Kellina","Kellsie","Kelly","Kellyann","Kelsey","Kelsi","Kelsy","Kendra","Kendre","Kenna","Keri","Keriann","Kerianne","Kerri","Kerrie","Kerrill","Kerrin","Kerry","Kerstin","Kesley","Keslie","Kessia","Kessiah","Ketti","Kettie","Ketty","Kevina","Kevyn","Ki","Kiah","Kial","Kiele","Kiersten","Kikelia","Kiley","Kim","Kimberlee","Kimberley","Kimberli","Kimberly","Kimberlyn","Kimbra","Kimmi","Kimmie","Kimmy","Kinna","Kip","Kipp","Kippie","Kippy","Kira","Kirbee","Kirbie","Kirby","Kiri","Kirsten","Kirsteni","Kirsti","Kirstin","Kirstyn","Kissee","Kissiah","Kissie","Kit","Kitti","Kittie","Kitty","Kizzee","Kizzie","Klara","Klarika","Klarrisa","Konstance","Konstanze","Koo","Kora","Koral","Koralle","Kordula","Kore","Korella","Koren","Koressa","Kori","Korie","Korney","Korrie","Korry","Kris","Krissie","Krissy","Krista","Kristal","Kristan","Kriste","Kristel","Kristen","Kristi","Kristien","Kristin","Kristina","Kristine","Kristy","Kristyn","Krysta","Krystal","Krystalle","Krystle","Krystyna","Kyla","Kyle","Kylen","Kylie","Kylila","Kylynn","Kym","Kynthia","Kyrstin","La","Verne","Lacee","Lacey","Lacie","Lacy","Ladonna","Laetitia","Laina","Lainey","Lana","Lanae","Lane","Lanette","Laney","Lani","Lanie","Lanita","Lanna","Lanni","Lanny","Lara","Laraine","Lari","Larina","Larine","Larisa","Larissa","Lark","Laryssa","Latashia","Latia","Latisha","Latrena","Latrina","Laura","Lauraine","Laural","Lauralee","Laure","Lauree","Laureen","Laurel","Laurella","Lauren","Laurena","Laurene","Lauretta","Laurette","Lauri","Laurianne","Laurice","Laurie","Lauryn","Lavena","Laverna","Laverne","Lavina","Lavinia","Lavinie","Layla","Layne","Layney","Lea","Leah","Leandra","Leann","Leanna","Leanor","Leanora","Lebbie","Leda","Lee","Leeann","Leeanne","Leela","Leelah","Leena","Leesa","Leese","Legra","Leia","Leigh","Leigha","Leila","Leilah","Leisha","Lela","Lelah","Leland","Lelia","Lena","Lenee","Lenette","Lenka","Lenna","Lenora","Lenore","Leodora","Leoine","Leola","Leoline","Leona","Leonanie","Leone","Leonelle","Leonie","Leonora","Leonore","Leontine","Leontyne","Leora","Leshia","Lesley","Lesli","Leslie","Lesly","Lesya","Leta","Lethia","Leticia","Letisha","Letitia","Letizia","Letta","Letti","Lettie","Letty","Lexi","Lexie","Lexine","Lexis","Lexy","Leyla","Lezlie","Lia","Lian","Liana","Liane","Lianna","Lianne","Lib","Libbey","Libbi","Libbie","Libby","Licha","Lida","Lidia","Liesa","Lil","Lila","Lilah","Lilas","Lilia","Lilian","Liliane","Lilias","Lilith","Lilla","Lilli","Lillian","Lillis","Lilllie","Lilly","Lily","Lilyan","Lin","Lina","Lind","Linda","Lindi","Lindie","Lindsay","Lindsey","Lindsy","Lindy","Linea","Linell","Linet","Linette","Linn","Linnea","Linnell","Linnet","Linnie","Linzy","Lira","Lisa","Lisabeth","Lisbeth","Lise","Lisetta","Lisette","Lisha","Lishe","Lissa","Lissi","Lissie","Lissy","Lita","Liuka","Liv","Liva","Livia","Livvie","Livvy","Livvyy","Livy","Liz","Liza","Lizabeth","Lizbeth","Lizette","Lizzie","Lizzy","Loella","Lois","Loise","Lola","Loleta","Lolita","Lolly","Lona","Lonee","Loni","Lonna","Lonni","Lonnie","Lora","Lorain","Loraine","Loralee","Loralie","Loralyn","Loree","Loreen","Lorelei","Lorelle","Loren","Lorena","Lorene","Lorenza","Loretta","Lorette","Lori","Loria","Lorianna","Lorianne","Lorie","Lorilee","Lorilyn","Lorinda","Lorine","Lorita","Lorna","Lorne","Lorraine","Lorrayne","Lorri","Lorrie","Lorrin","Lorry","Lory","Lotta","Lotte","Lotti","Lottie","Lotty","Lou","Louella","Louisa","Louise","Louisette","Loutitia","Lu","Luce","Luci","Lucia","Luciana","Lucie","Lucienne","Lucila","Lucilia","Lucille","Lucina","Lucinda","Lucine","Lucita","Lucky","Lucretia","Lucy","Ludovika","Luella","Luelle","Luisa","Luise","Lula","Lulita","Lulu","Lura","Lurette","Lurleen","Lurlene","Lurline","Lusa","Luz","Lyda","Lydia","Lydie","Lyn","Lynda","Lynde","Lyndel","Lyndell","Lyndsay","Lyndsey","Lyndsie","Lyndy","Lynea","Lynelle","Lynett","Lynette","Lynn","Lynna","Lynne","Lynnea","Lynnell","Lynnelle","Lynnet","Lynnett","Lynnette","Lynsey","Lyssa","Mab","Mabel","Mabelle","Mable","Mada","Madalena","Madalyn","Maddalena","Maddi","Maddie","Maddy","Madel","Madelaine","Madeleine","Madelena","Madelene","Madelin","Madelina","Madeline","Madella","Madelle","Madelon","Madelyn","Madge","Madlen","Madlin","Madonna","Mady","Mae","Maegan","Mag","Magda","Magdaia","Magdalen","Magdalena","Magdalene","Maggee","Maggi","Maggie","Maggy","Mahala","Mahalia","Maia","Maible","Maiga","Maighdiln","Mair","Maire","Maisey","Maisie","Maitilde","Mala","Malanie","Malena","Malia","Malina","Malinda","Malinde","Malissa","Malissia","Mallissa","Mallorie","Mallory","Malorie","Malory","Malva","Malvina","Malynda","Mame","Mamie","Manda","Mandi","Mandie","Mandy","Manon","Manya","Mara","Marabel","Marcela","Marcelia","Marcella","Marcelle","Marcellina","Marcelline","Marchelle","Marci","Marcia","Marcie","Marcile","Marcille","Marcy","Mareah","Maren","Marena","Maressa","Marga","Margalit","Margalo","Margaret","Margareta","Margarete","Margaretha","Margarethe","Margaretta","Margarette","Margarita","Margaux","Marge","Margeaux","Margery","Marget","Margette","Margi","Margie","Margit","Margo","Margot","Margret","Marguerite","Margy","Mari","Maria","Mariam","Marian","Mariana","Mariann","Marianna","Marianne","Maribel","Maribelle","Maribeth","Marice","Maridel","Marie","Marie-Ann","Marie-Jeanne","Marieann","Mariejeanne","Mariel","Mariele","Marielle","Mariellen","Marietta","Mariette","Marigold","Marijo","Marika","Marilee","Marilin","Marillin","Marilyn","Marin","Marina","Marinna","Marion","Mariquilla","Maris","Marisa","Mariska","Marissa","Marita","Maritsa","Mariya","Marj","Marja","Marje","Marji","Marjie","Marjorie","Marjory","Marjy","Marketa","Marla","Marlane","Marleah","Marlee","Marleen","Marlena","Marlene","Marley","Marlie","Marline","Marlo","Marlyn","Marna","Marne","Marney","Marni","Marnia","Marnie","Marquita","Marrilee","Marris","Marrissa","Marsha","Marsiella","Marta","Martelle","Martguerita","Martha","Marthe","Marthena","Marti","Martica","Martie","Martina","Martita","Marty","Martynne","Mary","Marya","Maryann","Maryanna","Maryanne","Marybelle","Marybeth","Maryellen","Maryjane","Maryjo","Maryl","Marylee","Marylin","Marylinda","Marylou","Marylynne","Maryrose","Marys","Marysa","Masha","Matelda","Mathilda","Mathilde","Matilda","Matilde","Matti","Mattie","Matty","Maud","Maude","Maudie","Maura","Maure","Maureen","Maureene","Maurene","Maurine","Maurise","Maurita","Maurizia","Mavis","Mavra","Max","Maxi","Maxie","Maxine","Maxy","May","Maybelle","Maye","Mead","Meade","Meagan","Meaghan","Meara","Mechelle","Meg","Megan","Megen","Meggi","Meggie","Meggy","Meghan","Meghann","Mehetabel","Mei","Mel","Mela","Melamie","Melania","Melanie","Melantha","Melany","Melba","Melesa","Melessa","Melicent","Melina","Melinda","Melinde","Melisa","Melisande","Melisandra","Melisenda","Melisent","Melissa","Melisse","Melita","Melitta","Mella","Melli","Mellicent","Mellie","Mellisa","Mellisent","Melloney","Melly","Melodee","Melodie","Melody","Melonie","Melony","Melosa","Melva","Mercedes","Merci","Mercie","Mercy","Meredith","Meredithe","Meridel","Meridith","Meriel","Merilee","Merilyn","Meris","Merissa","Merl","Merla","Merle","Merlina","Merline","Merna","Merola","Merralee","Merridie","Merrie","Merrielle","Merrile","Merrilee","Merrili","Merrill","Merrily","Merry","Mersey","Meryl","Meta","Mia","Micaela","Michaela","Michaelina","Michaeline","Michaella","Michal","Michel","Michele","Michelina","Micheline","Michell","Michelle","Micki","Mickie","Micky","Midge","Mignon","Mignonne","Miguela","Miguelita","Mikaela","Mil","Mildred","Mildrid","Milena","Milicent","Milissent","Milka","Milli","Millicent","Millie","Millisent","Milly","Milzie","Mimi","Min","Mina","Minda","Mindy","Minerva","Minetta","Minette","Minna","Minnaminnie","Minne","Minni","Minnie","Minnnie","Minny","Minta","Miof","Mela","Miquela","Mira","Mirabel","Mirabella","Mirabelle","Miran","Miranda","Mireielle","Mireille","Mirella","Mirelle","Miriam","Mirilla","Mirna","Misha","Missie","Missy","Misti","Misty","Mitzi","Modesta","Modestia","Modestine","Modesty","Moina","Moira","Moll","Mollee","Molli","Mollie","Molly","Mommy","Mona","Monah","Monica","Monika","Monique","Mora","Moreen","Morena","Morgan","Morgana","Morganica","Morganne","Morgen","Moria","Morissa","Morna","Moselle","Moyna","Moyra","Mozelle","Muffin","Mufi","Mufinella","Muire","Mureil","Murial","Muriel","Murielle","Myra","Myrah","Myranda","Myriam","Myrilla","Myrle","Myrlene","Myrna","Myrta","Myrtia","Myrtice","Myrtie","Myrtle","Nada","Nadean","Nadeen","Nadia","Nadine","Nadiya","Nady","Nadya","Nalani","Nan","Nana","Nananne","Nance","Nancee","Nancey","Nanci","Nancie","Nancy","Nanete","Nanette","Nani","Nanice","Nanine","Nannette","Nanni","Nannie","Nanny","Nanon","Naoma","Naomi","Nara","Nari","Nariko","Nat","Nata","Natala","Natalee","Natalie","Natalina","Nataline","Natalya","Natasha","Natassia","Nathalia","Nathalie","Natividad","Natka","Natty","Neala","Neda","Nedda","Nedi","Neely","Neila","Neile","Neilla","Neille","Nelia","Nelie","Nell","Nelle","Nelli","Nellie","Nelly","Nerissa","Nerita","Nert","Nerta","Nerte","Nerti","Nertie","Nerty","Nessa","Nessi","Nessie","Nessy","Nesta","Netta","Netti","Nettie","Nettle","Netty","Nevsa","Neysa","Nichol","Nichole","Nicholle","Nicki","Nickie","Nicky","Nicol","Nicola","Nicole","Nicolea","Nicolette","Nicoli","Nicolina","Nicoline","Nicolle","Nikaniki","Nike","Niki","Nikki","Nikkie","Nikoletta","Nikolia","Nina","Ninetta","Ninette","Ninnetta","Ninnette","Ninon","Nissa","Nisse","Nissie","Nissy","Nita","Nixie","Noami","Noel","Noelani","Noell","Noella","Noelle","Noellyn","Noelyn","Noemi","Nola","Nolana","Nolie","Nollie","Nomi","Nona","Nonah","Noni","Nonie","Nonna","Nonnah","Nora","Norah","Norean","Noreen","Norene","Norina","Norine","Norma","Norri","Norrie","Norry","Novelia","Nydia","Nyssa","Octavia","Odele","Odelia","Odelinda","Odella","Odelle","Odessa","Odetta","Odette","Odilia","Odille","Ofelia","Ofella","Ofilia","Ola","Olenka","Olga","Olia","Olimpia","Olive","Olivette","Olivia","Olivie","Oliy","Ollie","Olly","Olva","Olwen","Olympe","Olympia","Olympie","Ondrea","Oneida","Onida","Oona","Opal","Opalina","Opaline","Ophelia","Ophelie","Ora","Oralee","Oralia","Oralie","Oralla","Oralle","Orel","Orelee","Orelia","Orelie","Orella","Orelle","Oriana","Orly","Orsa","Orsola","Ortensia","Otha","Othelia","Othella","Othilia","Othilie","Ottilie","Page","Paige","Paloma","Pam","Pamela","Pamelina","Pamella","Pammi","Pammie","Pammy","Pandora","Pansie","Pansy","Paola","Paolina","Papagena","Pat","Patience","Patrica","Patrice","Patricia","Patrizia","Patsy","Patti","Pattie","Patty","Paula","Paule","Pauletta","Paulette","Pauli","Paulie","Paulina","Pauline","Paulita","Pauly","Pavia","Pavla","Pearl","Pearla","Pearle","Pearline","Peg","Pegeen","Peggi","Peggie","Peggy","Pen","Penelopa","Penelope","Penni","Pennie","Penny","Pepi","Pepita","Peri","Peria","Perl","Perla","Perle","Perri","Perrine","Perry","Persis","Pet","Peta","Petra","Petrina","Petronella","Petronia","Petronilla","Petronille","Petunia","Phaedra","Phaidra","Phebe","Phedra","Phelia","Phil","Philipa","Philippa","Philippe","Philippine","Philis","Phillida","Phillie","Phillis","Philly","Philomena","Phoebe","Phylis","Phyllida","Phyllis","Phyllys","Phylys","Pia","Pier","Pierette","Pierrette","Pietra","Piper","Pippa","Pippy","Polly","Pollyanna","Pooh","Poppy","Portia","Pris","Prisca","Priscella","Priscilla","Prissie","Pru","Prudence","Prudi","Prudy","Prue","Queenie","Quentin","Querida","Quinn","Quinta","Quintana","Quintilla","Quintina","Rachael","Rachel","Rachele","Rachelle","Rae","Raeann","Raf","Rafa","Rafaela","Rafaelia","Rafaelita","Rahal","Rahel","Raina","Raine","Rakel","Ralina","Ramona","Ramonda","Rana","Randa","Randee","Randene","Randi","Randie","Randy","Ranee","Rani","Rania","Ranice","Ranique","Ranna","Raphaela","Raquel","Raquela","Rasia","Rasla","Raven","Ray","Raychel","Raye","Rayna","Raynell","Rayshell","Rea","Reba","Rebbecca","Rebe","Rebeca","Rebecca","Rebecka","Rebeka","Rebekah","Rebekkah","Ree","Reeba","Reena","Reeta","Reeva","Regan","Reggi","Reggie","Regina","Regine","Reiko","Reina","Reine","Remy","Rena","Renae","Renata","Renate","Rene","Renee","Renell","Renelle","Renie","Rennie","Reta","Retha","Revkah","Rey","Reyna","Rhea","Rheba","Rheta","Rhetta","Rhiamon","Rhianna","Rhianon","Rhoda","Rhodia","Rhodie","Rhody","Rhona","Rhonda","Riane","Riannon","Rianon","Rica","Ricca","Rici","Ricki","Rickie","Ricky","Riki","Rikki","Rina","Risa","Rita","Riva","Rivalee","Rivi","Rivkah","Rivy","Roana","Roanna","Roanne","Robbi","Robbie","Robbin","Robby","Robbyn","Robena","Robenia","Roberta","Robin","Robina","Robinet","Robinett","Robinetta","Robinette","Robinia","Roby","Robyn","Roch","Rochell","Rochella","Rochelle","Rochette","Roda","Rodi","Rodie","Rodina","Rois","Romola","Romona","Romonda","Romy","Rona","Ronalda","Ronda","Ronica","Ronna","Ronni","Ronnica","Ronnie","Ronny","Roobbie","Rora","Rori","Rorie","Rory","Ros","Rosa","Rosabel","Rosabella","Rosabelle","Rosaleen","Rosalia","Rosalie","Rosalind","Rosalinda","Rosalinde","Rosaline","Rosalyn","Rosalynd","Rosamond","Rosamund","Rosana","Rosanna","Rosanne","Rose","Roseann","Roseanna","Roseanne","Roselia","Roselin","Roseline","Rosella","Roselle","Rosemaria","Rosemarie","Rosemary","Rosemonde","Rosene","Rosetta","Rosette","Roshelle","Rosie","Rosina","Rosita","Roslyn","Rosmunda","Rosy","Row","Rowe","Rowena","Roxana","Roxane","Roxanna","Roxanne","Roxi","Roxie","Roxine","Roxy","Roz","Rozalie","Rozalin","Rozamond","Rozanna","Rozanne","Roze","Rozele","Rozella","Rozelle","Rozina","Rubetta","Rubi","Rubia","Rubie","Rubina","Ruby","Ruperta","Ruth","Ruthann","Ruthanne","Ruthe","Ruthi","Ruthie","Ruthy","Ryann","Rycca","Saba","Sabina","Sabine","Sabra","Sabrina","Sacha","Sada","Sadella","Sadie","Sadye","Saidee","Sal","Salaidh","Sallee","Salli","Sallie","Sally","Sallyann","Sallyanne","Saloma","Salome","Salomi","Sam","Samantha","Samara","Samaria","Sammy","Sande","Sandi","Sandie","Sandra","Sandy","Sandye","Sapphira","Sapphire","Sara","Sara-Ann","Saraann","Sarah","Sarajane","Saree","Sarena","Sarene","Sarette","Sari","Sarina","Sarine","Sarita","Sascha","Sasha","Sashenka","Saudra","Saundra","Savina","Sayre","Scarlet","Scarlett","Sean","Seana","Seka","Sela","Selena","Selene","Selestina","Selia","Selie","Selina","Selinda","Seline","Sella","Selle","Selma","Sena","Sephira","Serena","Serene","Shae","Shaina","Shaine","Shalna","Shalne","Shana","Shanda","Shandee","Shandeigh","Shandie","Shandra","Shandy","Shane","Shani","Shanie","Shanna","Shannah","Shannen","Shannon","Shanon","Shanta","Shantee","Shara","Sharai","Shari","Sharia","Sharity","Sharl","Sharla","Sharleen","Sharlene","Sharline","Sharon","Sharona","Sharron","Sharyl","Shaun","Shauna","Shawn","Shawna","Shawnee","Shay","Shayla","Shaylah","Shaylyn","Shaylynn","Shayna","Shayne","Shea","Sheba","Sheela","Sheelagh","Sheelah","Sheena","Sheeree","Sheila","Sheila-Kathryn","Sheilah","Shel","Shela","Shelagh","Shelba","Shelbi","Shelby","Shelia","Shell","Shelley","Shelli","Shellie","Shelly","Shena","Sher","Sheree","Sheri","Sherie","Sherill","Sherilyn","Sherline","Sherri","Sherrie","Sherry","Sherye","Sheryl","Shina","Shir","Shirl","Shirlee","Shirleen","Shirlene","Shirley","Shirline","Shoshana","Shoshanna","Siana","Sianna","Sib","Sibbie","Sibby","Sibeal","Sibel","Sibella","Sibelle","Sibilla","Sibley","Sibyl","Sibylla","Sibylle","Sidoney","Sidonia","Sidonnie","Sigrid","Sile","Sileas","Silva","Silvana","Silvia","Silvie","Simona","Simone","Simonette","Simonne","Sindee","Siobhan","Sioux","Siouxie","Sisely","Sisile","Sissie","Sissy","Siusan","Sofia","Sofie","Sondra","Sonia","Sonja","Sonni","Sonnie","Sonnnie","Sonny","Sonya","Sophey","Sophi","Sophia","Sophie","Sophronia","Sorcha","Sosanna","Stace","Stacee","Stacey","Staci","Stacia","Stacie","Stacy","Stafani","Star","Starla","Starlene","Starlin","Starr","Stefa","Stefania","Stefanie","Steffane","Steffi","Steffie","Stella","Stepha","Stephana","Stephani","Stephanie","Stephannie","Stephenie","Stephi","Stephie","Stephine","Stesha","Stevana","Stevena","Stoddard","Storm","Stormi","Stormie","Stormy","Sue","Suellen","Sukey","Suki","Sula","Sunny","Sunshine","Susan","Susana","Susanetta","Susann","Susanna","Susannah","Susanne","Susette","Susi","Susie","Susy","Suzann","Suzanna","Suzanne","Suzette","Suzi","Suzie","Suzy","Sybil","Sybila","Sybilla","Sybille","Sybyl","Sydel","Sydelle","Sydney","Sylvia","Tabatha","Tabbatha","Tabbi","Tabbie","Tabbitha","Tabby","Tabina","Tabitha","Taffy","Talia","Tallia","Tallie","Tallou","Tallulah","Tally","Talya","Talyah","Tamar","Tamara","Tamarah","Tamarra","Tamera","Tami","Tamiko","Tamma","Tammara","Tammi","Tammie","Tammy","Tamqrah","Tamra","Tana","Tandi","Tandie","Tandy","Tanhya","Tani","Tania","Tanitansy","Tansy","Tanya","Tara","Tarah","Tarra","Tarrah","Taryn","Tasha","Tasia","Tate","Tatiana","Tatiania","Tatum","Tawnya","Tawsha","Ted","Tedda","Teddi","Teddie","Teddy","Tedi","Tedra","Teena","TEirtza","Teodora","Tera","Teresa","Terese","Teresina","Teresita","Teressa","Teri","Teriann","Terra","Terri","Terrie","Terrijo","Terry","Terrye","Tersina","Terza","Tess","Tessa","Tessi","Tessie","Tessy","Thalia","Thea","Theadora","Theda","Thekla","Thelma","Theo","Theodora","Theodosia","Theresa","Therese","Theresina","Theresita","Theressa","Therine","Thia","Thomasa","Thomasin","Thomasina","Thomasine","Tiena","Tierney","Tiertza","Tiff","Tiffani","Tiffanie","Tiffany","Tiffi","Tiffie","Tiffy","Tilda","Tildi","Tildie","Tildy","Tillie","Tilly","Tim","Timi","Timmi","Timmie","Timmy","Timothea","Tina","Tine","Tiphani","Tiphanie","Tiphany","Tish","Tisha","Tobe","Tobey","Tobi","Toby","Tobye","Toinette","Toma","Tomasina","Tomasine","Tomi","Tommi","Tommie","Tommy","Toni","Tonia","Tonie","Tony","Tonya","Tonye","Tootsie","Torey","Tori","Torie","Torrie","Tory","Tova","Tove","Tracee","Tracey","Traci","Tracie","Tracy","Trenna","Tresa","Trescha","Tressa","Tricia","Trina","Trish","Trisha","Trista","Trix","Trixi","Trixie","Trixy","Truda","Trude","Trudey","Trudi","Trudie","Trudy","Trula","Tuesday","Twila","Twyla","Tybi","Tybie","Tyne","Ula","Ulla","Ulrica","Ulrika","Ulrikaumeko","Ulrike","Umeko","Una","Ursa","Ursala","Ursola","Ursula","Ursulina","Ursuline","Uta","Val","Valaree","Valaria","Vale","Valeda","Valencia","Valene","Valenka","Valentia","Valentina","Valentine","Valera","Valeria","Valerie","Valery","Valerye","Valida","Valina","Valli","Vallie","Vally","Valma","Valry","Van","Vanda","Vanessa","Vania","Vanna","Vanni","Vannie","Vanny","Vanya","Veda","Velma","Velvet","Venita","Venus","Vera","Veradis","Vere","Verena","Verene","Veriee","Verile","Verina","Verine","Verla","Verna","Vernice","Veronica","Veronika","Veronike","Veronique","Vevay","Vi","Vicki","Vickie","Vicky","Victoria","Vida","Viki","Vikki","Vikky","Vilhelmina","Vilma","Vin","Vina","Vinita","Vinni","Vinnie","Vinny","Viola","Violante","Viole","Violet","Violetta","Violette","Virgie","Virgina","Virginia","Virginie","Vita","Vitia","Vitoria","Vittoria","Viv","Viva","Vivi","Vivia","Vivian","Viviana","Vivianna","Vivianne","Vivie","Vivien","Viviene","Vivienne","Viviyan","Vivyan","Vivyanne","Vonni","Vonnie","Vonny","Vyky","Wallie","Wallis","Walliw","Wally","Waly","Wanda","Wandie","Wandis","Waneta","Wanids","Wenda","Wendeline","Wendi","Wendie","Wendy","Wendye","Wenona","Wenonah","Whitney","Wileen","Wilhelmina","Wilhelmine","Wilie","Willa","Willabella","Willamina","Willetta","Willette","Willi","Willie","Willow","Willy","Willyt","Wilma","Wilmette","Wilona","Wilone","Wilow","Windy","Wini","Winifred","Winna","Winnah","Winne","Winni","Winnie","Winnifred","Winny","Winona","Winonah","Wren","Wrennie","Wylma","Wynn","Wynne","Wynnie","Wynny","Xaviera","Xena","Xenia","Xylia","Xylina","Yalonda","Yasmeen","Yasmin","Yelena","Yetta","Yettie","Yetty","Yevette","Ynes","Ynez","Yoko","Yolanda","Yolande","Yolane","Yolanthe","Yoshi","Yoshiko","Yovonnda","Ysabel","Yvette","Yvonne","Zabrina","Zahara","Zandra","Zaneta","Zara","Zarah","Zaria","Zarla","Zea","Zelda","Zelma","Zena","Zenia","Zia","Zilvia","Zita","Zitella","Zoe","Zola","Zonda","Zondra","Zonnya","Zora","Zorah","Zorana","Zorina","Zorine","Zsa","Zsa","Zsazsa","Zulema","Zuzana"]'),ja=JSON.parse('["Aaron","Ab","Abba","Abbe","Abbey","Abbie","Abbot","Abbott","Abby","Abdel","Abdul","Abe","Abel","Abelard","Abeu","Abey","Abie","Abner","Abraham","Abrahan","Abram","Abramo","Abran","Ad","Adair","Adam","Adamo","Adams","Adan","Addie","Addison","Addy","Ade","Adelbert","Adham","Adlai","Adler","Ado","Adolf","Adolph","Adolphe","Adolpho","Adolphus","Adrian","Adriano","Adrien","Agosto","Aguie","Aguistin","Aguste","Agustin","Aharon","Ahmad","Ahmed","Ailbert","Akim","Aksel","Al","Alain","Alair","Alan","Aland","Alano","Alanson","Alard","Alaric","Alasdair","Alastair","Alasteir","Alaster","Alberik","Albert","Alberto","Albie","Albrecht","Alden","Aldin","Aldis","Aldo","Aldon","Aldous","Aldric","Aldrich","Aldridge","Aldus","Aldwin","Alec","Alejandro","Alejoa","Aleksandr","Alessandro","Alex","Alexander","Alexandr","Alexandre","Alexandro","Alexandros","Alexei","Alexio","Alexis","Alf","Alfie","Alfons","Alfonse","Alfonso","Alford","Alfred","Alfredo","Alfy","Algernon","Ali","Alic","Alick","Alisander","Alistair","Alister","Alix","Allan","Allard","Allayne","Allen","Alley","Alleyn","Allie","Allin","Allister","Allistir","Allyn","Aloin","Alon","Alonso","Alonzo","Aloysius","Alphard","Alphonse","Alphonso","Alric","Aluin","Aluino","Alva","Alvan","Alvie","Alvin","Alvis","Alvy","Alwin","Alwyn","Alyosha","Amble","Ambros","Ambrose","Ambrosi","Ambrosio","Ambrosius","Amby","Amerigo","Amery","Amory","Amos","Anatol","Anatole","Anatollo","Ancell","Anders","Anderson","Andie","Andonis","Andras","Andre","Andrea","Andreas","Andrej","Andres","Andrew","Andrey","Andris","Andros","Andrus","Andy","Ange","Angel","Angeli","Angelico","Angelo","Angie","Angus","Ansel","Ansell","Anselm","Anson","Anthony","Antin","Antoine","Anton","Antone","Antoni","Antonin","Antonino","Antonio","Antonius","Antons","Antony","Any","Ara","Araldo","Arch","Archaimbaud","Archambault","Archer","Archibald","Archibaldo","Archibold","Archie","Archy","Arel","Ari","Arie","Ariel","Arin","Ario","Aristotle","Arlan","Arlen","Arley","Arlin","Arman","Armand","Armando","Armin","Armstrong","Arnaldo","Arne","Arney","Arni","Arnie","Arnold","Arnoldo","Arnuad","Arny","Aron","Arri","Arron","Art","Artair","Arte","Artemas","Artemis","Artemus","Arther","Arthur","Artie","Artur","Arturo","Artus","Arty","Arv","Arvie","Arvin","Arvy","Asa","Ase","Ash","Ashbey","Ashby","Asher","Ashley","Ashlin","Ashton","Aube","Auberon","Aubert","Aubrey","Augie","August","Augustin","Augustine","Augusto","Augustus","Augy","Aurthur","Austen","Austin","Ave","Averell","Averil","Averill","Avery","Avictor","Avigdor","Avram","Avrom","Ax","Axe","Axel","Aylmar","Aylmer","Aymer","Bail","Bailey","Bailie","Baillie","Baily","Baird","Bald","Balduin","Baldwin","Bale","Ban","Bancroft","Bank","Banky","Bar","Barbabas","Barclay","Bard","Barde","Barn","Barnabas","Barnabe","Barnaby","Barnard","Barnebas","Barnett","Barney","Barnie","Barny","Baron","Barr","Barret","Barrett","Barri","Barrie","Barris","Barron","Barry","Bart","Bartel","Barth","Barthel","Bartholemy","Bartholomeo","Bartholomeus","Bartholomew","Bartie","Bartlet","Bartlett","Bartolemo","Bartolomeo","Barton","Bartram","Barty","Bary","Baryram","Base","Basil","Basile","Basilio","Basilius","Bastian","Bastien","Bat","Batholomew","Baudoin","Bax","Baxie","Baxter","Baxy","Bay","Bayard","Beale","Bealle","Bear","Bearnard","Beau","Beaufort","Beauregard","Beck","Beltran","Ben","Bendick","Bendicty","Bendix","Benedetto","Benedick","Benedict","Benedicto","Benedikt","Bengt","Beniamino","Benito","Benjamen","Benjamin","Benji","Benjie","Benjy","Benn","Bennett","Bennie","Benny","Benoit","Benson","Bent","Bentlee","Bentley","Benton","Benyamin","Ber","Berk","Berke","Berkeley","Berkie","Berkley","Berkly","Berky","Bern","Bernard","Bernardo","Bernarr","Berne","Bernhard","Bernie","Berny","Bert","Berti","Bertie","Berton","Bertram","Bertrand","Bertrando","Berty","Bev","Bevan","Bevin","Bevon","Bil","Bill","Billie","Billy","Bing","Bink","Binky","Birch","Birk","Biron","Bjorn","Blaine","Blair","Blake","Blane","Blayne","Bo","Bob","Bobbie","Bobby","Bogart","Bogey","Boigie","Bond","Bondie","Bondon","Bondy","Bone","Boniface","Boone","Boonie","Boony","Boot","Boote","Booth","Boothe","Bord","Borden","Bordie","Bordy","Borg","Boris","Bourke","Bowie","Boy","Boyce","Boycey","Boycie","Boyd","Brad","Bradan","Brade","Braden","Bradford","Bradley","Bradly","Bradney","Brady","Bram","Bran","Brand","Branden","Brander","Brandon","Brandtr","Brandy","Brandyn","Brannon","Brant","Brantley","Bren","Brendan","Brenden","Brendin","Brendis","Brendon","Brennan","Brennen","Brent","Bret","Brett","Brew","Brewer","Brewster","Brian","Briano","Briant","Brice","Brien","Brig","Brigg","Briggs","Brigham","Brion","Brit","Britt","Brnaba","Brnaby","Brock","Brockie","Brocky","Brod","Broddie","Broddy","Broderic","Broderick","Brodie","Brody","Brok","Bron","Bronnie","Bronny","Bronson","Brook","Brooke","Brooks","Brose","Bruce","Brucie","Bruis","Bruno","Bryan","Bryant","Bryanty","Bryce","Bryn","Bryon","Buck","Buckie","Bucky","Bud","Budd","Buddie","Buddy","Buiron","Burch","Burg","Burgess","Burk","Burke","Burl","Burlie","Burnaby","Burnard","Burr","Burt","Burtie","Burton","Burty","Butch","Byram","Byran","Byrann","Byrle","Byrom","Byron","Cad","Caddric","Caesar","Cal","Caldwell","Cale","Caleb","Calhoun","Callean","Calv","Calvin","Cam","Cameron","Camey","Cammy","Car","Carce","Care","Carey","Carl","Carleton","Carlie","Carlin","Carling","Carlo","Carlos","Carly","Carlyle","Carmine","Carney","Carny","Carolus","Carr","Carrol","Carroll","Carson","Cart","Carter","Carver","Cary","Caryl","Casar","Case","Casey","Cash","Caspar","Casper","Cass","Cassie","Cassius","Caz","Cazzie","Cchaddie","Cece","Cecil","Cecilio","Cecilius","Ced","Cedric","Cello","Cesar","Cesare","Cesaro","Chad","Chadd","Chaddie","Chaddy","Chadwick","Chaim","Chalmers","Chan","Chance","Chancey","Chandler","Chane","Chariot","Charles","Charley","Charlie","Charlton","Chas","Chase","Chaunce","Chauncey","Che","Chen","Ches","Chester","Cheston","Chet","Chev","Chevalier","Chevy","Chic","Chick","Chickie","Chicky","Chico","Chilton","Chip","Chris","Chrisse","Chrissie","Chrissy","Christian","Christiano","Christie","Christoffer","Christoforo","Christoper","Christoph","Christophe","Christopher","Christophorus","Christos","Christy","Chrisy","Chrotoem","Chucho","Chuck","Cirillo","Cirilo","Ciro","Claiborn","Claiborne","Clair","Claire","Clarance","Clare","Clarence","Clark","Clarke","Claudell","Claudian","Claudianus","Claudio","Claudius","Claus","Clay","Clayborn","Clayborne","Claybourne","Clayson","Clayton","Cleavland","Clem","Clemens","Clement","Clemente","Clementius","Clemmie","Clemmy","Cleon","Clerc","Cletis","Cletus","Cleve","Cleveland","Clevey","Clevie","Cliff","Clifford","Clim","Clint","Clive","Cly","Clyde","Clyve","Clywd","Cob","Cobb","Cobbie","Cobby","Codi","Codie","Cody","Cointon","Colan","Colas","Colby","Cole","Coleman","Colet","Colin","Collin","Colman","Colver","Con","Conan","Conant","Conn","Conney","Connie","Connor","Conny","Conrad","Conrade","Conrado","Conroy","Consalve","Constantin","Constantine","Constantino","Conway","Coop","Cooper","Corbet","Corbett","Corbie","Corbin","Corby","Cord","Cordell","Cordie","Cordy","Corey","Cori","Cornall","Cornelius","Cornell","Corney","Cornie","Corny","Correy","Corrie","Cort","Cortie","Corty","Cory","Cos","Cosimo","Cosme","Cosmo","Costa","Court","Courtnay","Courtney","Cozmo","Craggie","Craggy","Craig","Crawford","Creigh","Creight","Creighton","Crichton","Cris","Cristian","Cristiano","Cristobal","Crosby","Cross","Cull","Cullan","Cullen","Culley","Cullie","Cullin","Cully","Culver","Curcio","Curr","Curran","Currey","Currie","Curry","Curt","Curtice","Curtis","Cy","Cyril","Cyrill","Cyrille","Cyrillus","Cyrus","Darcy","Dael","Dag","Dagny","Dal","Dale","Dalis","Dall","Dallas","Dalli","Dallis","Dallon","Dalston","Dalt","Dalton","Dame","Damian","Damiano","Damien","Damon","Dan","Dana","Dane","Dani","Danie","Daniel","Dannel","Dannie","Danny","Dante","Danya","Dar","Darb","Darbee","Darby","Darcy","Dare","Daren","Darill","Darin","Dario","Darius","Darn","Darnall","Darnell","Daron","Darrel","Darrell","Darren","Darrick","Darrin","Darryl","Darwin","Daryl","Daryle","Dav","Dave","Daven","Davey","David","Davidde","Davide","Davidson","Davie","Davin","Davis","Davon","Davy","De","Witt","Dean","Deane","Decca","Deck","Del","Delainey","Delaney","Delano","Delbert","Dell","Delmar","Delmer","Delmor","Delmore","Demetre","Demetri","Demetris","Demetrius","Demott","Den","Dene","Denis","Dennet","Denney","Dennie","Dennis","Dennison","Denny","Denver","Denys","Der","Derby","Derek","Derick","Derk","Dermot","Derrek","Derrick","Derrik","Derril","Derron","Derry","Derward","Derwin","Des","Desi","Desmond","Desmund","Dev","Devin","Devland","Devlen","Devlin","Devy","Dew","Dewain","Dewey","Dewie","Dewitt","Dex","Dexter","Diarmid","Dick","Dickie","Dicky","Diego","Dieter","Dietrich","Dilan","Dill","Dillie","Dillon","Dilly","Dimitri","Dimitry","Dino","Dion","Dionisio","Dionysus","Dirk","Dmitri","Dolf","Dolph","Dom","Domenic","Domenico","Domingo","Dominic","Dominick","Dominik","Dominique","Don","Donal","Donall","Donalt","Donaugh","Donavon","Donn","Donnell","Donnie","Donny","Donovan","Dore","Dorey","Dorian","Dorie","Dory","Doug","Dougie","Douglas","Douglass","Dougy","Dov","Doy","Doyle","Drake","Drew","Dru","Drud","Drugi","Duane","Dud","Dudley","Duff","Duffie","Duffy","Dugald","Duke","Dukey","Dukie","Duky","Dun","Dunc","Duncan","Dunn","Dunstan","Dur","Durand","Durant","Durante","Durward","Dwain","Dwayne","Dwight","Dylan","Eadmund","Eal","Eamon","Earl","Earle","Earlie","Early","Earvin","Eb","Eben","Ebeneser","Ebenezer","Eberhard","Eberto","Ed","Edan","Edd","Eddie","Eddy","Edgar","Edgard","Edgardo","Edik","Edlin","Edmon","Edmund","Edouard","Edsel","Eduard","Eduardo","Eduino","Edvard","Edward","Edwin","Efrem","Efren","Egan","Egbert","Egon","Egor","El","Elbert","Elden","Eldin","Eldon","Eldredge","Eldridge","Eli","Elia","Elias","Elihu","Elijah","Eliot","Elisha","Ellary","Ellerey","Ellery","Elliot","Elliott","Ellis","Ellswerth","Ellsworth","Ellwood","Elmer","Elmo","Elmore","Elnar","Elroy","Elston","Elsworth","Elton","Elvin","Elvis","Elvyn","Elwin","Elwood","Elwyn","Ely","Em","Emanuel","Emanuele","Emelen","Emerson","Emery","Emile","Emilio","Emlen","Emlyn","Emmanuel","Emmerich","Emmery","Emmet","Emmett","Emmit","Emmott","Emmy","Emory","Engelbert","Englebert","Ennis","Enoch","Enos","Enrico","Enrique","Ephraim","Ephrayim","Ephrem","Erasmus","Erastus","Erek","Erhard","Erhart","Eric","Erich","Erick","Erie","Erik","Erin","Erl","Ermanno","Ermin","Ernest","Ernesto","Ernestus","Ernie","Ernst","Erny","Errick","Errol","Erroll","Erskine","Erv","ErvIn","Erwin","Esdras","Esme","Esra","Esteban","Estevan","Etan","Ethan","Ethe","Ethelbert","Ethelred","Etienne","Ettore","Euell","Eugen","Eugene","Eugenio","Eugenius","Eustace","Ev","Evan","Evelin","Evelyn","Even","Everard","Evered","Everett","Evin","Evyn","Ewan","Eward","Ewart","Ewell","Ewen","Ezechiel","Ezekiel","Ezequiel","Eziechiele","Ezra","Ezri","Fabe","Faber","Fabian","Fabiano","Fabien","Fabio","Fair","Fairfax","Fairleigh","Fairlie","Falito","Falkner","Far","Farlay","Farlee","Farleigh","Farley","Farlie","Farly","Farr","Farrel","Farrell","Farris","Faulkner","Fax","Federico","Fee","Felic","Felice","Felicio","Felike","Feliks","Felipe","Felix","Felizio","Feodor","Ferd","Ferdie","Ferdinand","Ferdy","Fergus","Ferguson","Fernando","Ferrel","Ferrell","Ferris","Fidel","Fidelio","Fidole","Field","Fielding","Fields","Filbert","Filberte","Filberto","Filip","Filippo","Filmer","Filmore","Fin","Findlay","Findley","Finlay","Finley","Finn","Fitz","Fitzgerald","Flem","Fleming","Flemming","Fletch","Fletcher","Flin","Flinn","Flint","Florian","Flory","Floyd","Flynn","Fons","Fonsie","Fonz","Fonzie","Forbes","Ford","Forest","Forester","Forrest","Forrester","Forster","Foss","Foster","Fowler","Fran","Francesco","Franchot","Francis","Francisco","Franciskus","Francklin","Francklyn","Francois","Frank","Frankie","Franklin","Franklyn","Franky","Frannie","Franny","Frans","Fransisco","Frants","Franz","Franzen","Frasco","Fraser","Frasier","Frasquito","Fraze","Frazer","Frazier","Fred","Freddie","Freddy","Fredek","Frederic","Frederich","Frederick","Frederico","Frederigo","Frederik","Fredric","Fredrick","Free","Freedman","Freeland","Freeman","Freemon","Fremont","Friedrich","Friedrick","Fritz","Fulton","Gabbie","Gabby","Gabe","Gabi","Gabie","Gabriel","Gabriele","Gabriello","Gaby","Gael","Gaelan","Gage","Gail","Gaile","Gal","Gale","Galen","Gallagher","Gallard","Galvan","Galven","Galvin","Gamaliel","Gan","Gannie","Gannon","Ganny","Gar","Garald","Gard","Gardener","Gardie","Gardiner","Gardner","Gardy","Gare","Garek","Gareth","Garey","Garfield","Garik","Garner","Garold","Garrard","Garrek","Garret","Garreth","Garrett","Garrick","Garrik","Garrot","Garrott","Garry","Garth","Garv","Garvey","Garvin","Garvy","Garwin","Garwood","Gary","Gaspar","Gaspard","Gasparo","Gasper","Gaston","Gaultiero","Gauthier","Gav","Gavan","Gaven","Gavin","Gawain","Gawen","Gay","Gayelord","Gayle","Gayler","Gaylor","Gaylord","Gearalt","Gearard","Gene","Geno","Geoff","Geoffrey","Geoffry","Georas","Geordie","Georg","George","Georges","Georgi","Georgie","Georgy","Gerald","Gerard","Gerardo","Gerek","Gerhard","Gerhardt","Geri","Gerick","Gerik","Germain","Germaine","Germayne","Gerome","Gerrard","Gerri","Gerrie","Gerry","Gery","Gherardo","Giacobo","Giacomo","Giacopo","Gian","Gianni","Giavani","Gib","Gibb","Gibbie","Gibby","Gideon","Giff","Giffard","Giffer","Giffie","Gifford","Giffy","Gil","Gilbert","Gilberto","Gilburt","Giles","Gill","Gilles","Ginger","Gino","Giordano","Giorgi","Giorgio","Giovanni","Giraldo","Giraud","Giselbert","Giulio","Giuseppe","Giustino","Giusto","Glen","Glenden","Glendon","Glenn","Glyn","Glynn","Godard","Godart","Goddard","Goddart","Godfree","Godfrey","Godfry","Godwin","Gonzales","Gonzalo","Goober","Goran","Goraud","Gordan","Gorden","Gordie","Gordon","Gordy","Gothart","Gottfried","Grace","Gradeigh","Gradey","Grady","Graehme","Graeme","Graham","Graig","Gram","Gran","Grange","Granger","Grannie","Granny","Grant","Grantham","Granthem","Grantley","Granville","Gray","Greg","Gregg","Greggory","Gregoire","Gregoor","Gregor","Gregorio","Gregorius","Gregory","Grenville","Griff","Griffie","Griffin","Griffith","Griffy","Gris","Griswold","Griz","Grove","Grover","Gualterio","Guglielmo","Guido","Guilbert","Guillaume","Guillermo","Gun","Gunar","Gunner","Guntar","Gunter","Gunther","Gus","Guss","Gustaf","Gustav","Gustave","Gustavo","Gustavus","Guthrey","Guthrie","Guthry","Guy","Had","Hadlee","Hadleigh","Hadley","Hadrian","Hagan","Hagen","Hailey","Haily","Hakeem","Hakim","Hal","Hale","Haleigh","Haley","Hall","Hallsy","Halsey","Halsy","Ham","Hamel","Hamid","Hamil","Hamilton","Hamish","Hamlen","Hamlin","Hammad","Hamnet","Hanan","Hank","Hans","Hansiain","Hanson","Harald","Harbert","Harcourt","Hardy","Harlan","Harland","Harlen","Harley","Harlin","Harman","Harmon","Harold","Haroun","Harp","Harper","Harris","Harrison","Harry","Hart","Hartley","Hartwell","Harv","Harvey","Harwell","Harwilll","Hasheem","Hashim","Haskel","Haskell","Haslett","Hastie","Hastings","Hasty","Haven","Hayden","Haydon","Hayes","Hayward","Haywood","Hayyim","Haze","Hazel","Hazlett","Heall","Heath","Hebert","Hector","Heindrick","Heinrick","Heinrik","Henderson","Hendrick","Hendrik","Henri","Henrik","Henry","Herb","Herbert","Herbie","Herby","Herc","Hercule","Hercules","Herculie","Heriberto","Herman","Hermann","Hermie","Hermon","Hermy","Hernando","Herold","Herrick","Hersch","Herschel","Hersh","Hershel","Herve","Hervey","Hew","Hewe","Hewet","Hewett","Hewie","Hewitt","Heywood","Hi","Hieronymus","Hilario","Hilarius","Hilary","Hill","Hillard","Hillary","Hillel","Hillery","Hilliard","Hillie","Hillier","Hilly","Hillyer","Hilton","Hinze","Hiram","Hirsch","Hobard","Hobart","Hobey","Hobie","Hodge","Hoebart","Hogan","Holden","Hollis","Holly","Holmes","Holt","Homer","Homere","Homerus","Horace","Horacio","Horatio","Horatius","Horst","Hort","Horten","Horton","Howard","Howey","Howie","Hoyt","Hube","Hubert","Huberto","Hubey","Hubie","Huey","Hugh","Hughie","Hugibert","Hugo","Hugues","Humbert","Humberto","Humfrey","Humfrid","Humfried","Humphrey","Hunfredo","Hunt","Hunter","Huntington","Huntlee","Huntley","Hurlee","Hurleigh","Hurley","Husain","Husein","Hussein","Hy","Hyatt","Hyman","Hymie","Iago","Iain","Ian","Ibrahim","Ichabod","Iggie","Iggy","Ignace","Ignacio","Ignacius","Ignatius","Ignaz","Ignazio","Igor","Ike","Ikey","Ilaire","Ilario","Immanuel","Ingamar","Ingar","Ingelbert","Ingemar","Inger","Inglebert","Inglis","Ingmar","Ingra","Ingram","Ingrim","Inigo","Inness","Innis","Iorgo","Iorgos","Iosep","Ira","Irv","Irvin","Irvine","Irving","Irwin","Irwinn","Isa","Isaac","Isaak","Isac","Isacco","Isador","Isadore","Isaiah","Isak","Isiahi","Isidor","Isidore","Isidoro","Isidro","Israel","Issiah","Itch","Ivan","Ivar","Ive","Iver","Ives","Ivor","Izaak","Izak","Izzy","Jabez","Jack","Jackie","Jackson","Jacky","Jacob","Jacobo","Jacques","Jae","Jaime","Jaimie","Jake","Jakie","Jakob","Jamaal","Jamal","James","Jameson","Jamesy","Jamey","Jamie","Jamil","Jamill","Jamison","Jammal","Jan","Janek","Janos","Jarad","Jard","Jareb","Jared","Jarib","Jarid","Jarrad","Jarred","Jarret","Jarrett","Jarrid","Jarrod","Jarvis","Jase","Jasen","Jason","Jasper","Jasun","Javier","Jay","Jaye","Jayme","Jaymie","Jayson","Jdavie","Jean","Jecho","Jed","Jedd","Jeddy","Jedediah","Jedidiah","Jeff","Jefferey","Jefferson","Jeffie","Jeffrey","Jeffry","Jeffy","Jehu","Jeno","Jens","Jephthah","Jerad","Jerald","Jeramey","Jeramie","Jere","Jereme","Jeremiah","Jeremias","Jeremie","Jeremy","Jermain","Jermaine","Jermayne","Jerome","Jeromy","Jerri","Jerrie","Jerrold","Jerrome","Jerry","Jervis","Jess","Jesse","Jessee","Jessey","Jessie","Jesus","Jeth","Jethro","Jim","Jimmie","Jimmy","Jo","Joachim","Joaquin","Job","Jock","Jocko","Jodi","Jodie","Jody","Joe","Joel","Joey","Johan","Johann","Johannes","John","Johnathan","Johnathon","Johnnie","Johnny","Johny","Jon","Jonah","Jonas","Jonathan","Jonathon","Jone","Jordan","Jordon","Jorgan","Jorge","Jory","Jose","Joseito","Joseph","Josh","Joshia","Joshua","Joshuah","Josiah","Josias","Jourdain","Jozef","Juan","Jud","Judah","Judas","Judd","Jude","Judon","Jule","Jules","Julian","Julie","Julio","Julius","Justen","Justin","Justinian","Justino","Justis","Justus","Kahaleel","Kahlil","Kain","Kaine","Kaiser","Kale","Kaleb","Kalil","Kalle","Kalvin","Kane","Kareem","Karel","Karim","Karl","Karlan","Karlens","Karlik","Karlis","Karney","Karoly","Kaspar","Kasper","Kayne","Kean","Keane","Kearney","Keary","Keefe","Keefer","Keelby","Keen","Keenan","Keene","Keir","Keith","Kelbee","Kelby","Kele","Kellby","Kellen","Kelley","Kelly","Kelsey","Kelvin","Kelwin","Ken","Kendal","Kendall","Kendell","Kendrick","Kendricks","Kenn","Kennan","Kennedy","Kenneth","Kennett","Kennie","Kennith","Kenny","Kenon","Kent","Kenton","Kenyon","Ker","Kerby","Kerk","Kermie","Kermit","Kermy","Kerr","Kerry","Kerwin","Kerwinn","Kev","Kevan","Keven","Kevin","Kevon","Khalil","Kiel","Kienan","Kile","Kiley","Kilian","Killian","Killie","Killy","Kim","Kimball","Kimbell","Kimble","Kin","Kincaid","King","Kingsley","Kingsly","Kingston","Kinnie","Kinny","Kinsley","Kip","Kipp","Kippar","Kipper","Kippie","Kippy","Kirby","Kirk","Kit","Klaus","Klemens","Klement","Kleon","Kliment","Knox","Koenraad","Konrad","Konstantin","Konstantine","Korey","Kort","Kory","Kris","Krisha","Krishna","Krishnah","Krispin","Kristian","Kristo","Kristofer","Kristoffer","Kristofor","Kristoforo","Kristopher","Kristos","Kurt","Kurtis","Ky","Kyle","Kylie","Laird","Lalo","Lamar","Lambert","Lammond","Lamond","Lamont","Lance","Lancelot","Land","Lane","Laney","Langsdon","Langston","Lanie","Lannie","Lanny","Larry","Lars","Laughton","Launce","Lauren","Laurence","Laurens","Laurent","Laurie","Lauritz","Law","Lawrence","Lawry","Lawton","Lay","Layton","Lazar","Lazare","Lazaro","Lazarus","Lee","Leeland","Lefty","Leicester","Leif","Leigh","Leighton","Lek","Leland","Lem","Lemar","Lemmie","Lemmy","Lemuel","Lenard","Lenci","Lennard","Lennie","Leo","Leon","Leonard","Leonardo","Leonerd","Leonhard","Leonid","Leonidas","Leopold","Leroi","Leroy","Les","Lesley","Leslie","Lester","Leupold","Lev","Levey","Levi","Levin","Levon","Levy","Lew","Lewes","Lewie","Lewiss","Lezley","Liam","Lief","Lin","Linc","Lincoln","Lind","Lindon","Lindsay","Lindsey","Lindy","Link","Linn","Linoel","Linus","Lion","Lionel","Lionello","Lisle","Llewellyn","Lloyd","Llywellyn","Lock","Locke","Lockwood","Lodovico","Logan","Lombard","Lon","Lonnard","Lonnie","Lonny","Lorant","Loren","Lorens","Lorenzo","Lorin","Lorne","Lorrie","Lorry","Lothaire","Lothario","Lou","Louie","Louis","Lovell","Lowe","Lowell","Lowrance","Loy","Loydie","Luca","Lucais","Lucas","Luce","Lucho","Lucian","Luciano","Lucias","Lucien","Lucio","Lucius","Ludovico","Ludvig","Ludwig","Luigi","Luis","Lukas","Luke","Lutero","Luther","Ly","Lydon","Lyell","Lyle","Lyman","Lyn","Lynn","Lyon","Mac","Mace","Mack","Mackenzie","Maddie","Maddy","Madison","Magnum","Mahmoud","Mahmud","Maison","Maje","Major","Mal","Malachi","Malchy","Malcolm","Mallory","Malvin","Man","Mandel","Manfred","Mannie","Manny","Mano","Manolo","Manuel","Mar","Marc","Marcel","Marcello","Marcellus","Marcelo","Marchall","Marco","Marcos","Marcus","Marijn","Mario","Marion","Marius","Mark","Markos","Markus","Marlin","Marlo","Marlon","Marlow","Marlowe","Marmaduke","Marsh","Marshal","Marshall","Mart","Martainn","Marten","Martie","Martin","Martino","Marty","Martyn","Marv","Marve","Marven","Marvin","Marwin","Mason","Massimiliano","Massimo","Mata","Mateo","Mathe","Mathew","Mathian","Mathias","Matias","Matt","Matteo","Matthaeus","Mattheus","Matthew","Matthias","Matthieu","Matthiew","Matthus","Mattias","Mattie","Matty","Maurice","Mauricio","Maurie","Maurise","Maurits","Maurizio","Maury","Max","Maxie","Maxim","Maximilian","Maximilianus","Maximilien","Maximo","Maxwell","Maxy","Mayer","Maynard","Mayne","Maynord","Mayor","Mead","Meade","Meier","Meir","Mel","Melvin","Melvyn","Menard","Mendel","Mendie","Mendy","Meredeth","Meredith","Merell","Merill","Merle","Merrel","Merrick","Merrill","Merry","Merv","Mervin","Merwin","Merwyn","Meryl","Meyer","Mic","Micah","Michael","Michail","Michal","Michale","Micheal","Micheil","Michel","Michele","Mick","Mickey","Mickie","Micky","Miguel","Mikael","Mike","Mikel","Mikey","Mikkel","Mikol","Mile","Miles","Mill","Millard","Miller","Milo","Milt","Miltie","Milton","Milty","Miner","Minor","Mischa","Mitch","Mitchael","Mitchel","Mitchell","Moe","Mohammed","Mohandas","Mohandis","Moise","Moises","Moishe","Monro","Monroe","Montague","Monte","Montgomery","Monti","Monty","Moore","Mord","Mordecai","Mordy","Morey","Morgan","Morgen","Morgun","Morie","Moritz","Morlee","Morley","Morly","Morrie","Morris","Morry","Morse","Mort","Morten","Mortie","Mortimer","Morton","Morty","Mose","Moses","Moshe","Moss","Mozes","Muffin","Muhammad","Munmro","Munroe","Murdoch","Murdock","Murray","Murry","Murvyn","My","Myca","Mycah","Mychal","Myer","Myles","Mylo","Myron","Myrvyn","Myrwyn","Nahum","Nap","Napoleon","Nappie","Nappy","Nat","Natal","Natale","Nataniel","Nate","Nathan","Nathanael","Nathanial","Nathaniel","Nathanil","Natty","Neal","Neale","Neall","Nealon","Nealson","Nealy","Ned","Neddie","Neddy","Neel","Nefen","Nehemiah","Neil","Neill","Neils","Nels","Nelson","Nero","Neron","Nester","Nestor","Nev","Nevil","Nevile","Neville","Nevin","Nevins","Newton","Nial","Niall","Niccolo","Nicholas","Nichole","Nichols","Nick","Nickey","Nickie","Nicko","Nickola","Nickolai","Nickolas","Nickolaus","Nicky","Nico","Nicol","Nicola","Nicolai","Nicolais","Nicolas","Nicolis","Niel","Niels","Nigel","Niki","Nikita","Nikki","Niko","Nikola","Nikolai","Nikolaos","Nikolas","Nikolaus","Nikolos","Nikos","Nil","Niles","Nils","Nilson","Niven","Noach","Noah","Noak","Noam","Nobe","Nobie","Noble","Noby","Noe","Noel","Nolan","Noland","Noll","Nollie","Nolly","Norbert","Norbie","Norby","Norman","Normand","Normie","Normy","Norrie","Norris","Norry","North","Northrop","Northrup","Norton","Nowell","Nye","Oates","Obadiah","Obadias","Obed","Obediah","Oberon","Obidiah","Obie","Oby","Octavius","Ode","Odell","Odey","Odie","Odo","Ody","Ogdan","Ogden","Ogdon","Olag","Olav","Ole","Olenolin","Olin","Oliver","Olivero","Olivier","Oliviero","Ollie","Olly","Olvan","Omar","Omero","Onfre","Onfroi","Onofredo","Oran","Orazio","Orbadiah","Oren","Orin","Orion","Orlan","Orland","Orlando","Orran","Orren","Orrin","Orson","Orton","Orv","Orville","Osbert","Osborn","Osborne","Osbourn","Osbourne","Osgood","Osmond","Osmund","Ossie","Oswald","Oswell","Otes","Othello","Otho","Otis","Otto","Owen","Ozzie","Ozzy","Pablo","Pace","Packston","Paco","Pacorro","Paddie","Paddy","Padget","Padgett","Padraic","Padraig","Padriac","Page","Paige","Pail","Pall","Palm","Palmer","Panchito","Pancho","Paolo","Papageno","Paquito","Park","Parke","Parker","Parnell","Parrnell","Parry","Parsifal","Pascal","Pascale","Pasquale","Pat","Pate","Paten","Patin","Paton","Patric","Patrice","Patricio","Patrick","Patrizio","Patrizius","Patsy","Patten","Pattie","Pattin","Patton","Patty","Paul","Paulie","Paulo","Pauly","Pavel","Pavlov","Paxon","Paxton","Payton","Peadar","Pearce","Pebrook","Peder","Pedro","Peirce","Pembroke","Pen","Penn","Pennie","Penny","Penrod","Pepe","Pepillo","Pepito","Perceval","Percival","Percy","Perice","Perkin","Pernell","Perren","Perry","Pete","Peter","Peterus","Petey","Petr","Peyter","Peyton","Phil","Philbert","Philip","Phillip","Phillipe","Phillipp","Phineas","Phip","Pierce","Pierre","Pierson","Pieter","Pietrek","Pietro","Piggy","Pincas","Pinchas","Pincus","Piotr","Pip","Pippo","Pooh","Port","Porter","Portie","Porty","Poul","Powell","Pren","Prent","Prentice","Prentiss","Prescott","Preston","Price","Prince","Prinz","Pryce","Puff","Purcell","Putnam","Putnem","Pyotr","Quent","Quentin","Quill","Quillan","Quincey","Quincy","Quinlan","Quinn","Quint","Quintin","Quinton","Quintus","Rab","Rabbi","Rabi","Rad","Radcliffe","Raddie","Raddy","Rafael","Rafaellle","Rafaello","Rafe","Raff","Raffaello","Raffarty","Rafferty","Rafi","Ragnar","Raimondo","Raimund","Raimundo","Rainer","Raleigh","Ralf","Ralph","Ram","Ramon","Ramsay","Ramsey","Rance","Rancell","Rand","Randal","Randall","Randell","Randi","Randie","Randolf","Randolph","Randy","Ransell","Ransom","Raoul","Raphael","Raul","Ravi","Ravid","Raviv","Rawley","Ray","Raymond","Raymund","Raynard","Rayner","Raynor","Read","Reade","Reagan","Reagen","Reamonn","Red","Redd","Redford","Reece","Reed","Rees","Reese","Reg","Regan","Regen","Reggie","Reggis","Reggy","Reginald","Reginauld","Reid","Reidar","Reider","Reilly","Reinald","Reinaldo","Reinaldos","Reinhard","Reinhold","Reinold","Reinwald","Rem","Remington","Remus","Renado","Renaldo","Renard","Renato","Renaud","Renault","Rene","Reube","Reuben","Reuven","Rex","Rey","Reynard","Reynold","Reynolds","Rhett","Rhys","Ric","Ricard","Ricardo","Riccardo","Rice","Rich","Richard","Richardo","Richart","Richie","Richmond","Richmound","Richy","Rick","Rickard","Rickert","Rickey","Ricki","Rickie","Ricky","Ricoriki","Rik","Rikki","Riley","Rinaldo","Ring","Ringo","Riobard","Riordan","Rip","Ripley","Ritchie","Roarke","Rob","Robb","Robbert","Robbie","Robby","Robers","Robert","Roberto","Robin","Robinet","Robinson","Rochester","Rock","Rockey","Rockie","Rockwell","Rocky","Rod","Rodd","Roddie","Roddy","Roderic","Roderich","Roderick","Roderigo","Rodge","Rodger","Rodney","Rodolfo","Rodolph","Rodolphe","Rodrick","Rodrigo","Rodrique","Rog","Roger","Rogerio","Rogers","Roi","Roland","Rolando","Roldan","Roley","Rolf","Rolfe","Rolland","Rollie","Rollin","Rollins","Rollo","Rolph","Roma","Romain","Roman","Romeo","Ron","Ronald","Ronnie","Ronny","Rooney","Roosevelt","Rorke","Rory","Rosco","Roscoe","Ross","Rossie","Rossy","Roth","Rourke","Rouvin","Rowan","Rowen","Rowland","Rowney","Roy","Royal","Royall","Royce","Rriocard","Rube","Ruben","Rubin","Ruby","Rudd","Ruddie","Ruddy","Rudie","Rudiger","Rudolf","Rudolfo","Rudolph","Rudy","Rudyard","Rufe","Rufus","Ruggiero","Rupert","Ruperto","Ruprecht","Rurik","Russ","Russell","Rustie","Rustin","Rusty","Rutger","Rutherford","Rutledge","Rutter","Ruttger","Ruy","Ryan","Ryley","Ryon","Ryun","Sal","Saleem","Salem","Salim","Salmon","Salomo","Salomon","Salomone","Salvador","Salvatore","Salvidor","Sam","Sammie","Sammy","Sampson","Samson","Samuel","Samuele","Sancho","Sander","Sanders","Sanderson","Sandor","Sandro","Sandy","Sanford","Sanson","Sansone","Sarge","Sargent","Sascha","Sasha","Saul","Sauncho","Saunder","Saunders","Saunderson","Saundra","Sauveur","Saw","Sawyer","Sawyere","Sax","Saxe","Saxon","Say","Sayer","Sayers","Sayre","Sayres","Scarface","Schuyler","Scot","Scott","Scotti","Scottie","Scotty","Seamus","Sean","Sebastian","Sebastiano","Sebastien","See","Selby","Selig","Serge","Sergeant","Sergei","Sergent","Sergio","Seth","Seumas","Seward","Seymour","Shadow","Shae","Shaine","Shalom","Shamus","Shanan","Shane","Shannan","Shannon","Shaughn","Shaun","Shaw","Shawn","Shay","Shayne","Shea","Sheff","Sheffie","Sheffield","Sheffy","Shelby","Shelden","Shell","Shelley","Shelton","Shem","Shep","Shepard","Shepherd","Sheppard","Shepperd","Sheridan","Sherlock","Sherlocke","Sherm","Sherman","Shermie","Shermy","Sherwin","Sherwood","Sherwynd","Sholom","Shurlock","Shurlocke","Shurwood","Si","Sibyl","Sid","Sidnee","Sidney","Siegfried","Siffre","Sig","Sigfrid","Sigfried","Sigismond","Sigismondo","Sigismund","Sigismundo","Sigmund","Sigvard","Silas","Silvain","Silvan","Silvano","Silvanus","Silvester","Silvio","Sim","Simeon","Simmonds","Simon","Simone","Sinclair","Sinclare","Siward","Skell","Skelly","Skip","Skipp","Skipper","Skippie","Skippy","Skipton","Sky","Skye","Skylar","Skyler","Slade","Sloan","Sloane","Sly","Smith","Smitty","Sol","Sollie","Solly","Solomon","Somerset","Son","Sonnie","Sonny","Spence","Spencer","Spense","Spenser","Spike","Stacee","Stacy","Staffard","Stafford","Staford","Stan","Standford","Stanfield","Stanford","Stanislas","Stanislaus","Stanislaw","Stanleigh","Stanley","Stanly","Stanton","Stanwood","Stavro","Stavros","Stearn","Stearne","Stefan","Stefano","Steffen","Stephan","Stephanus","Stephen","Sterling","Stern","Sterne","Steve","Steven","Stevie","Stevy","Steward","Stewart","Stillman","Stillmann","Stinky","Stirling","Stu","Stuart","Sullivan","Sully","Sumner","Sunny","Sutherlan","Sutherland","Sutton","Sven","Svend","Swen","Syd","Sydney","Sylas","Sylvan","Sylvester","Syman","Symon","Tab","Tabb","Tabbie","Tabby","Taber","Tabor","Tad","Tadd","Taddeo","Taddeusz","Tadeas","Tadeo","Tades","Tadio","Tailor","Tait","Taite","Talbert","Talbot","Tallie","Tally","Tam","Tamas","Tammie","Tammy","Tan","Tann","Tanner","Tanney","Tannie","Tanny","Tarrance","Tate","Taylor","Teador","Ted","Tedd","Teddie","Teddy","Tedie","Tedman","Tedmund","Temp","Temple","Templeton","Teodoor","Teodor","Teodorico","Teodoro","Terence","Terencio","Terrance","Terrel","Terrell","Terrence","Terri","Terrill","Terry","Thacher","Thaddeus","Thaddus","Thadeus","Thain","Thaine","Thane","Thatch","Thatcher","Thaxter","Thayne","Thebault","Thedric","Thedrick","Theo","Theobald","Theodor","Theodore","Theodoric","Thibaud","Thibaut","Thom","Thoma","Thomas","Thor","Thorin","Thorn","Thorndike","Thornie","Thornton","Thorny","Thorpe","Thorstein","Thorsten","Thorvald","Thurstan","Thurston","Tibold","Tiebold","Tiebout","Tiler","Tim","Timmie","Timmy","Timofei","Timoteo","Timothee","Timotheus","Timothy","Tirrell","Tito","Titos","Titus","Tobe","Tobiah","Tobias","Tobie","Tobin","Tobit","Toby","Tod","Todd","Toddie","Toddy","Toiboid","Tom","Tomas","Tomaso","Tome","Tomkin","Tomlin","Tommie","Tommy","Tonnie","Tony","Tore","Torey","Torin","Torr","Torrance","Torre","Torrence","Torrey","Torrin","Torry","Town","Towney","Townie","Townsend","Towny","Trace","Tracey","Tracie","Tracy","Traver","Travers","Travis","Travus","Trefor","Tremain","Tremaine","Tremayne","Trent","Trenton","Trev","Trevar","Trever","Trevor","Trey","Trip","Tripp","Tris","Tristam","Tristan","Troy","Trstram","Trueman","Trumaine","Truman","Trumann","Tuck","Tucker","Tuckie","Tucky","Tudor","Tull","Tulley","Tully","Turner","Ty","Tybalt","Tye","Tyler","Tymon","Tymothy","Tynan","Tyrone","Tyrus","Tyson","Udale","Udall","Udell","Ugo","Ulberto","Ulick","Ulises","Ulric","Ulrich","Ulrick","Ulysses","Umberto","Upton","Urbain","Urban","Urbano","Urbanus","Uri","Uriah","Uriel","Urson","Vachel","Vaclav","Vail","Val","Valdemar","Vale","Valentijn","Valentin","Valentine","Valentino","Valle","Van","Vance","Vanya","Vasili","Vasilis","Vasily","Vassili","Vassily","Vaughan","Vaughn","Verge","Vergil","Vern","Verne","Vernen","Verney","Vernon","Vernor","Vic","Vick","Victoir","Victor","Vidovic","Vidovik","Vin","Vince","Vincent","Vincents","Vincenty","Vincenz","Vinnie","Vinny","Vinson","Virge","Virgie","Virgil","Virgilio","Vite","Vito","Vittorio","Vlad","Vladamir","Vladimir","Von","Wade","Wadsworth","Wain","Wainwright","Wait","Waite","Waiter","Wake","Wakefield","Wald","Waldemar","Walden","Waldo","Waldon","Walker","Wallace","Wallache","Wallas","Wallie","Wallis","Wally","Walsh","Walt","Walther","Walton","Wang","Ward","Warde","Warden","Ware","Waring","Warner","Warren","Wash","Washington","Wat","Waverley","Waverly","Way","Waylan","Wayland","Waylen","Waylin","Waylon","Wayne","Web","Webb","Weber","Webster","Weidar","Weider","Welbie","Welby","Welch","Wells","Welsh","Wendall","Wendel","Wendell","Werner","Wernher","Wes","Wesley","West","Westbrook","Westbrooke","Westleigh","Westley","Weston","Weylin","Wheeler","Whit","Whitaker","Whitby","Whitman","Whitney","Whittaker","Wiatt","Wilbert","Wilbur","Wilburt","Wilden","Wildon","Wilek","Wiley","Wilfred","Wilfrid","Wilhelm","Will","Willard","Willdon","Willem","Willey","Willi","William","Willie","Willis","Willy","Wilmar","Wilmer","Wilt","Wilton","Win","Windham","Winfield","Winfred","Winifield","Winn","Winnie","Winny","Winslow","Winston","Winthrop","Wit","Wittie","Witty","Wolf","Wolfgang","Wolfie","Wolfy","Wood","Woodie","Woodman","Woodrow","Woody","Worden","Worth","Worthington","Worthy","Wright","Wyatan","Wyatt","Wye","Wylie","Wyn","Wyndham","Wynn","Xavier","Xenos","Xerxes","Xever","Ximenes","Ximenez","Xymenes","Yale","Yanaton","Yance","Yancey","Yancy","Yank","Yankee","Yard","Yardley","Yehudi","Yehudit","Yorgo","Yorgos","York","Yorke","Yorker","Yul","Yule","Yulma","Yuma","Yuri","Yurik","Yves","Yvon","Yvor","Zaccaria","Zach","Zacharia","Zachariah","Zacharias","Zacharie","Zachary","Zacherie","Zachery","Zack","Zackariah","Zak","Zane","Zared","Zeb","Zebadiah","Zebedee","Zebulen","Zebulon","Zechariah","Zed","Zedekiah","Zeke","Zelig","Zerk","Zollie","Zolly"]'),_=a=>a.trim().toLowerCase(),ke=a=>[...new Map(a.map(l=>[_(l),l.trim()])).values()],Se={female:ke(Ra),male:ke(ja)};function Ea(a,l,i){const n=new Set(i.map(_));n.add(_(l));let r=Se[a].filter(y=>!n.has(_(y)));return r.length||(r=Se[a].filter(y=>_(y)!==_(l))),r[Math.floor(Math.random()*r.length)]}function on({bot:a,patch:l,activeState:i,mascotMotion:n,namePlaceholder:r}){const[y,h]=m.useState(!1),{draft:o}=P(),{state:s}=O();return e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsx(Na,{bot:a,activeState:i,mascotMotion:n,onPatch:l}),e.jsx(La,{bot:a}),e.jsxs("div",{children:[e.jsxs("div",{className:"mb-1.5 flex flex-wrap items-center justify-between gap-x-3 gap-y-1",children:[e.jsx("label",{htmlFor:`bot-name-${a.id}`,className:"text-[13px] text-ink-secondary",children:"Name"}),o&&e.jsx("div",{className:"flex flex-wrap gap-1",children:["female","male"].map(d=>e.jsx("button",{type:"button",className:"rounded-md px-2 py-1 text-xs text-ink-secondary hover:bg-control hover:text-ink",onClick:()=>l({name:Ea(d,a.name,s.bots.map(g=>g.name))}),children:u(d==="female"?"newBot.randomFemaleName":"newBot.randomMaleName")},d))})]}),e.jsx(J,{bot:a,kind:"chief"}),e.jsx("input",{id:`bot-name-${a.id}`,className:V,maxLength:ne.name,value:a.name,placeholder:r,onChange:d=>l({name:d.target.value})})]}),e.jsxs(Da,{label:"Title",children:[e.jsx(J,{bot:a,kind:"chief"}),e.jsx("input",{className:V,maxLength:ne.title,placeholder:"Describe what your agent does",value:a.title,onChange:d=>l({title:d.target.value})})]}),e.jsxs("div",{className:"block",children:[e.jsxs("div",{className:"mb-1.5 flex items-center justify-between gap-3",children:[e.jsx("label",{htmlFor:`bot-instructions-${a.id}`,className:"text-[13px] text-ink-secondary",children:"Blurb"}),e.jsxs("button",{type:"button",onClick:()=>h(!0),className:"flex items-center gap-1.5 rounded-md px-1.5 py-1 text-[11.5px] font-medium text-accent-text hover:bg-accent/10",children:[e.jsx(oe,{size:12})," View full"]})]}),e.jsx(J,{bot:a,kind:"chief"}),e.jsx("textarea",{id:`bot-instructions-${a.id}`,className:K(V,"min-h-[72px] resize-y leading-relaxed"),maxLength:ne.description,placeholder:"One line on what this bot is for","aria-label":"Blurb",value:a.description,onChange:d=>l({description:d.target.value})}),e.jsxs("div",{className:"mt-1.5 flex items-start justify-between gap-3 text-[11px] text-ink-secondary",children:[e.jsx("span",{children:"Shown in rosters, on the phone, and to other bots. Standing instructions belong in Soul, which has room for a full document."}),a.description.length>3e3&&e.jsxs("span",{className:"shrink-0 tabular-nums",children:[a.description.length.toLocaleString()," / ",ne.description.toLocaleString()]})]})]}),y&&e.jsx(Ba,{bot:a,inline:o,onClose:()=>h(!1)})]})}function Re(a){return new TextEncoder().encode(a).length}function Ta(a,l=200){const i=a.trim().split(`
|
|
3
|
+
`)[0]??"",n=i.match(/^.*?[.!?](?=\s|$)/);return(n?n[0]:i).trim().slice(0,l)}function Ga(a,l){return Re(a)>l?null:{soul:a}}function Ja({bot:a,onPatch:l,simple:i}){const{dispatch:n,flushBotPatches:r}=O(),{request:y}=P(),h=ne.soul,[o,s]=m.useState(a.soul??""),[d,g]=m.useState(null),[f,p]=m.useState(!1);m.useEffect(()=>{s(a.soul??"")},[a.id,a.soul]);const b=()=>r(a.id).then(()=>y(`/api/bots/${a.id}/soul`)).then(k=>g(k)).catch(()=>g(null));m.useEffect(()=>{b()},[a.id,a.soulDrift,r]);const B=Re(o),x=B>h,v=k=>{s(k);const R=Ga(k,h);R&&l(R)},D=async k=>{if(!(f||!d?.revision||typeof d.fileText!="string")){p(!0);try{await r(a.id),await y(`/api/bots/${a.id}/soul/${k}`,{method:"POST",body:JSON.stringify({fileText:d.fileText,expectedRevision:d.revision})})}catch(R){n({type:"error",message:R instanceof Error?R.message:String(R)})}finally{await b(),p(!1)}}},C=a.description.length>400&&!(a.soul??"").trim();return e.jsxs("div",{className:"block",children:[e.jsxs("div",{className:"mb-1.5 flex items-center justify-between gap-3",children:[e.jsx("label",{htmlFor:`bot-soul-${a.id}`,className:i?"text-[12px] text-ink-secondary":"text-[13px] text-ink-secondary",children:i?i.label:"Standing instructions (SOUL.md)"}),!i&&C&&e.jsx("button",{type:"button",disabled:f,onClick:()=>l({soul:a.description,description:Ta(a.description)}),className:"rounded-md px-1.5 py-1 text-[11.5px] font-medium text-accent-text hover:bg-accent/10",children:"Move instructions into SOUL.md"})]}),d?.drift&&e.jsxs("div",{className:"mb-2 rounded-lg border border-amber-500/40 bg-amber-500/10 p-3 text-[12px] text-ink",children:[e.jsx("div",{className:"font-medium",children:"SOUL.md on disk was edited outside the app."}),e.jsxs("div",{className:"mt-1 text-ink-secondary",children:["The bot keeps using the saved version until you choose. File: ",e.jsx("span",{className:"break-all",children:d.file})]}),e.jsx("pre",{className:"mt-2 max-h-40 overflow-auto whitespace-pre-wrap rounded bg-control p-2 text-[11.5px]",children:d.fileText}),e.jsxs("div",{className:"mt-2 flex gap-2",children:[e.jsx("button",{type:"button",disabled:f,onClick:()=>{D("apply-file")},className:"rounded-lg bg-accent px-3 py-1.5 text-[12px] font-medium text-white hover:brightness-110 disabled:opacity-50",children:"Use the file"}),e.jsx("button",{type:"button",disabled:f,onClick:()=>{D("discard-file")},className:"rounded-lg bg-control px-3 py-1.5 text-[12px] text-ink hover:bg-raised-hover disabled:opacity-50",children:"Keep the saved version"})]})]}),e.jsx("textarea",{id:`bot-soul-${a.id}`,className:K(V,i?"min-h-[140px] resize-y rounded-xl text-[14px] leading-relaxed":"min-h-[220px] resize-y font-mono leading-relaxed",x&&"ring-2 ring-red-500/60"),placeholder:i?i.placeholder:"Who this bot is and the rules it never breaks. Keep it short; put step-by-step procedure into a skill.","aria-invalid":x||void 0,disabled:f,value:o,onChange:k=>v(k.target.value)}),(!i||x)&&e.jsxs("div",{className:"mt-1.5 flex items-start justify-between gap-3 text-[11px] text-ink-secondary",children:[e.jsx("span",{children:!i&&e.jsxs(e.Fragment,{children:["In this bot’s context on every turn.",d?.file?e.jsxs(e.Fragment,{children:[" Mirrored to ",e.jsx("span",{className:"break-all",children:d.file}),"."]}):null]})}),e.jsxs("span",{className:K("shrink-0 tabular-nums",x&&"font-medium text-red-500"),children:[B.toLocaleString()," / ",h.toLocaleString()," bytes",x?" — not saved":""]})]})]})}function dn({bot:a,patch:l}){return e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsx("p",{className:"text-[13px] leading-relaxed text-ink-secondary",children:"Who this bot is and the rules it never breaks. Always in its context."}),e.jsx(J,{bot:a,kind:"chief"}),e.jsx(Ja,{bot:a,onPatch:l})]})}function Ka({bot:a,onAdded:l}){const{request:i,draft:n}=P(),r=m.useRef(i);r.current=i;const[y,h]=m.useState(null),[o,s]=m.useState([]),[d,g]=m.useState(""),[f,p]=m.useState(""),b=m.useCallback(async x=>{try{const v=await r.current(`/api/org-library/skills?botId=${encodeURIComponent(a.id)}`);if(x?.())return;h(v.organization?.name??null),s(v.skills??[])}catch{x?.()||h(null)}},[a.id]);if(m.useEffect(()=>{if(n)return;let x=!1;return b(()=>x),()=>{x=!0}},[n,b]),n||!y||o.length===0)return null;const B=async x=>{g(`${x.installId}:${x.name}`),p("");try{await r.current("/api/org-library/skills",{method:"POST",body:JSON.stringify({botId:a.id,installId:x.installId,name:x.name})}),await b(),l()}catch(v){p(v instanceof Error?v.message:String(v))}finally{g("")}};return e.jsxs("div",{className:"rounded-xl bg-card p-4",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(Ve,{size:16,className:"text-ink-secondary"}),e.jsx("div",{className:"text-[15px] font-medium text-ink",children:u("orgLibrary.tab",{name:y})})]}),e.jsx("div",{className:"mt-1 text-[12px] leading-relaxed text-ink-secondary",children:u("orgLibrary.skillsHint")}),e.jsx("div",{className:"mt-3 divide-y divide-hairline/40 overflow-hidden rounded-lg border border-hairline/40",children:o.map(x=>e.jsxs("div",{className:"flex items-center gap-2 px-3 py-2.5",children:[e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("div",{className:"truncate font-mono text-[12.5px] text-ink",children:x.name}),e.jsx("div",{className:"mt-0.5 line-clamp-2 text-[11.5px] text-ink-secondary",children:x.description}),e.jsx("div",{className:"mt-0.5 truncate text-[10.5px] text-ink-secondary",children:u("orgLibrary.skillFrom",{package:x.packageName,release:x.release,publisher:x.publisher})})]}),x.added?e.jsxs("span",{className:"flex shrink-0 items-center gap-1 text-[12px] text-ink-secondary",children:[e.jsx(xe,{size:13,className:"text-success"}),u("orgLibrary.added")]}):e.jsx("button",{type:"button",disabled:d!=="",onClick:()=>{B(x)},"aria-label":u("orgLibrary.skillAddAria",{name:x.name}),className:"shrink-0 rounded-lg bg-control px-3 py-1.5 text-[12.5px] text-ink hover:bg-raised-hover disabled:opacity-50",children:d===`${x.installId}:${x.name}`?u("orgLibrary.adding"):u("orgLibrary.add")})]},`${x.installId}:${x.name}`))}),f&&e.jsx("div",{role:"alert",className:"mt-2 text-[12px] text-danger",children:f})]})}function Fa(a){const{request:l}=P(),[i,n]=m.useState([]),[r,y]=m.useState([]),[h,o]=m.useState([]),[s,d]=m.useState(""),[g,f]=m.useState([]),[p,b]=m.useState(!0),[B,x]=m.useState(""),[v,D]=m.useState(""),[C,k]=m.useState(null),R=m.useRef(!1),T=async A=>{try{const L=await l(`/api/bots/${a.id}/skills`);if(A?.())return;n(L.skills??[]),f(L.staged??[]),o(L.library??[]),y(L.assignedSkills??[]),d(""),D("")}catch(L){A?.()||D(L instanceof Error?L.message:"Could not load learned skills.")}finally{A?.()||b(!1)}};m.useEffect(()=>{let A=!1;return b(!0),k(null),T(()=>A),()=>{A=!0}},[a.id]);const c=async(A,L=!1)=>{const U=(await l(`/api/bots/${a.id}/skills`)).assignedSkills??r,I=L?U.filter(F=>F!==A):[...new Set([...U,A])];await l(`/api/bots/${a.id}/skills-library`,{method:"PUT",body:JSON.stringify({skills:I})}),await T()};return{skills:i,staged:g,loading:p,working:B,setWorking:x,error:v,setError:D,reviewing:C,setReviewing:k,refresh:T,toggle:async A=>{x(A.name),D("");try{if(A.origin==="library"&&A.enabled){await l(`/api/skills-library/${encodeURIComponent(A.name)}`,{method:"PATCH",body:JSON.stringify({enabled:!A.enabled})}),await T();return}if(!A.enabled){const L=await l(A.origin==="library"?`/api/skills-library/${encodeURIComponent(A.name)}`:`/api/bots/${a.id}/skills/${encodeURIComponent(A.name)}`);if(!L.text)throw new Error("The skill contents are unavailable; remove and import or learn it again.");k({skill:A,text:L.text});return}await l(`/api/bots/${a.id}/skills/${encodeURIComponent(A.name)}`,{method:"PATCH",body:JSON.stringify({enabled:!1})}),await T()}catch(L){D(L instanceof Error?L.message:"Could not update this skill.")}finally{x("")}},enableReviewed:async()=>{if(!C)return;const{skill:A}=C;x(A.name),D("");try{await l(A.origin==="library"?`/api/skills-library/${encodeURIComponent(A.name)}`:`/api/bots/${a.id}/skills/${encodeURIComponent(A.name)}`,{method:"PATCH",body:JSON.stringify({enabled:!0})}),k(null),await T()}catch(L){D(L instanceof Error?L.message:"Could not enable this skill.")}finally{x("")}},libraryPool:h,addFromLibrary:s,setAddFromLibrary:d,assignmentBusy:R,putAssignments:c,addToBot:async()=>{const A=s.trim();if(!(!A||R.current)){R.current=!0,x(A),D("");try{await c(A)}catch(L){D(L instanceof Error?L.message:"Could not assign that skill.")}finally{R.current=!1,x("")}}}}}function Pa({skill:a,text:l,error:i,working:n,onCancel:r,onEnable:y}){const h=m.useRef(null),o=m.useRef(r);return o.current=r,m.useEffect(()=>{const s=document.activeElement instanceof HTMLElement?document.activeElement:null,d=h.current,g=d?.parentElement?.closest('[role="dialog"]');d?.focus();const f=p=>{if(p.key==="Escape"&&(p.preventDefault(),n||o.current()),p.key!=="Tab"||!d)return;const b=d.querySelectorAll('button:not([disabled]), [tabindex="0"]'),B=b[0],x=b[b.length-1];!B||!x||(p.shiftKey&&(document.activeElement===B||document.activeElement===d)?(p.preventDefault(),x.focus()):!p.shiftKey&&document.activeElement===x&&(p.preventDefault(),B.focus()))};return window.addEventListener("keydown",f),()=>{window.removeEventListener("keydown",f),s&&s!==document.body&&s.isConnected?s.focus():g?.focus()}},[n]),e.jsx("div",{ref:h,tabIndex:-1,role:"dialog","aria-modal":"true","aria-labelledby":"skill-review-title",className:"fixed inset-0 z-[90] flex items-center justify-center bg-black/45 p-6",children:e.jsxs("div",{className:"flex max-h-[min(760px,90vh)] w-full max-w-2xl flex-col rounded-2xl bg-card p-5 shadow-2xl",children:[e.jsxs("div",{id:"skill-review-title",className:"text-[16px] font-semibold text-ink",children:["Review ",a.name," before enabling"]}),e.jsxs("div",{className:"mt-1 break-all text-[11.5px] text-ink-secondary",children:["Source: ",a.source]}),a.warnings.length>0&&e.jsx("div",{className:"mt-2 rounded-lg bg-warning/10 px-3 py-2 text-[11.5px] text-warning",children:a.warnings.join(" · ")}),e.jsx("pre",{tabIndex:0,"aria-label":`Full SKILL.md for ${a.name}`,className:"mt-3 min-h-0 flex-1 overflow-auto whitespace-pre-wrap break-words rounded-xl bg-inset p-3 font-mono text-[12px] leading-relaxed text-ink",children:l}),i&&e.jsx("div",{role:"alert",className:"mt-2 text-[12px] text-danger",children:i}),e.jsxs("div",{className:"mt-4 flex justify-end gap-2",children:[e.jsx("button",{type:"button",disabled:n,onClick:r,className:"rounded-lg px-4 py-2 text-[13px] font-medium text-ink-secondary hover:bg-raised disabled:opacity-40",children:"Cancel"}),e.jsx("button",{type:"button",disabled:n,onClick:y,className:"rounded-lg bg-accent px-4 py-2 text-[13px] font-semibold text-white disabled:opacity-40",children:"Enable reviewed skill"})]})]})})}function cn({bot:a}){const{request:l}=P(),{state:i}=O(),n=ze(i.config),r=Ue(i.config),{skills:y,staged:h,loading:o,working:s,setWorking:d,error:g,setError:f,reviewing:p,setReviewing:b,refresh:B,toggle:x,enableReviewed:v,libraryPool:D,addFromLibrary:C,setAddFromLibrary:k,assignmentBusy:R,putAssignments:T,addToBot:c}=Fa(a),[t,N]=m.useState(null),[S,A]=m.useState(""),[L,z]=m.useState(!1),[U,I]=m.useState(""),F=m.useRef(null),j=!!t;m.useEffect(()=>{if(!j)return;const M=document.activeElement instanceof HTMLElement?document.activeElement:null,E=F.current,q=E?.parentElement?.closest('[role="dialog"]');E?.focus();const w=G=>{if(G.key==="Escape"&&(G.preventDefault(),s||N(null)),G.key!=="Tab"||!E)return;const Q=E.querySelectorAll('button:not([disabled]), [tabindex="0"]'),de=Q[0],ce=Q[Q.length-1];!de||!ce||(G.shiftKey&&(document.activeElement===de||document.activeElement===E)?(G.preventDefault(),ce.focus()):!G.shiftKey&&document.activeElement===ce&&(G.preventDefault(),de.focus()))};return window.addEventListener("keydown",w),()=>{window.removeEventListener("keydown",w),M&&M!==document.body&&M.isConnected?M.focus():q?.focus()}},[j,s]),m.useEffect(()=>{N(null)},[a.id]);const H=async M=>{if(M.origin==="library"){if(R.current||!window.confirm(`Unassign “${M.name}” from this bot? The skill stays in the library.`))return;R.current=!0,d(M.name),f("");try{await T(M.name,!0)}catch(E){f(E instanceof Error?E.message:"Could not unassign that skill.")}finally{R.current=!1,d("")}return}if(window.confirm(`Remove the learned skill “${M.name}”?`)){d(M.name),f("");try{await l(`/api/bots/${a.id}/skills/${encodeURIComponent(M.name)}`,{method:"DELETE"}),await B()}catch(E){f(E instanceof Error?E.message:"Could not remove this skill.")}finally{d("")}}},W=async M=>{f("");try{const E=M.origin==="library"?await l(`/api/skills-library/${encodeURIComponent(M.name)}`):await l(`/api/bots/${a.id}/skills/${encodeURIComponent(M.name)}`);N({name:M.name,text:E.text??""})}catch(E){f(E instanceof Error?E.message:"Could not load this skill.")}},X=async()=>{const M=S.trim();if(M){z(!0),f(""),I("");try{const q=((await l(`/api/bots/${a.id}/skills`,{method:"POST",body:JSON.stringify({source:M})})).installed??[]).length;I(`Imported ${q} skill${q===1?"":"s"} — review and enable below.`),A(""),await B()}catch(E){f(E instanceof Error?E.message:"Could not import that skill.")}finally{z(!1)}}};return e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsxs("div",{className:"rounded-xl bg-card p-4",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(oe,{size:16,className:"text-ink-secondary"}),e.jsx("div",{className:"text-[15px] font-medium text-ink",children:"Learned skills"})]}),e.jsx("div",{className:"mt-1 text-[12px] leading-relaxed text-ink-secondary",children:n?u("skills.learned.hintOn"):u("skills.learned.hintOff")}),r?e.jsxs("div",{className:"mt-3 flex flex-col gap-1.5",children:[D.length>0?e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs("select",{"aria-label":"Add a skill from the library",value:C,disabled:!!s,onChange:M=>k(M.target.value),className:V+" truncate",children:[e.jsx("option",{value:"",children:"Add a skill from the library…"}),D.map(M=>e.jsx("option",{value:M.name,children:M.name},M.name))]}),e.jsx("button",{type:"button",disabled:!C||!!s,onClick:()=>{c()},className:"shrink-0 rounded-lg bg-control px-3 py-2 text-[13px] text-ink hover:bg-raised-hover disabled:opacity-50",children:"Add"})]}):e.jsx("div",{className:"text-[12px] text-ink-secondary",children:"Every skill in the library is already assigned to this bot."}),e.jsx("div",{className:"text-[11.5px] text-ink-secondary",children:"Import and manage library skills in Settings → Skills."})]}):e.jsxs(e.Fragment,{children:[e.jsxs("form",{className:"mt-3 flex items-center gap-2",onSubmit:M=>{M.preventDefault(),X()},children:[e.jsx("input",{className:V,placeholder:"owner/repo, https://github.com/…/SKILL.md, or https://skills.sh/…","aria-label":"Import a skill",value:S,onChange:M=>A(M.target.value)}),e.jsx("button",{type:"submit",disabled:L||!S.trim(),className:"shrink-0 rounded-lg bg-control px-3 py-2 text-[13px] text-ink hover:bg-raised-hover disabled:opacity-50",children:L?"Importing…":"Import"})]}),U&&e.jsx("div",{className:"mt-1 text-[12px] text-ink-secondary",children:U})]}),o?e.jsx("div",{className:"mt-3 text-[12px] text-ink-secondary",children:"Loading…"}):y.length===0?e.jsx("div",{className:"mt-3 rounded-lg bg-inset px-3 py-2 text-[12px] text-ink-secondary",children:"No installed skills yet."}):e.jsx("div",{className:"mt-3 divide-y divide-hairline/40 overflow-hidden rounded-lg border border-hairline/40",children:y.map(M=>e.jsxs("div",{className:"px-3 py-2.5",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs("button",{type:"button",onClick:()=>{W(M)},className:"min-w-0 flex-1 text-left",children:[e.jsx("div",{className:"truncate font-mono text-[12.5px] text-ink",children:M.name}),r&&e.jsx("span",{className:"ml-1.5 rounded bg-control px-1 py-px font-mono text-[9.5px] uppercase tracking-wide text-ink-secondary",children:M.origin==="library"?"library":"private"}),e.jsx("div",{className:"mt-0.5 line-clamp-2 text-[11.5px] text-ink-secondary",children:M.description}),e.jsx("div",{className:"mt-0.5 text-[10.5px] text-ink-secondary",children:"Used when the bot decides it's relevant"})]}),e.jsx(Z,{checked:M.enabled,"aria-label":`${M.enabled?"Disable":"Enable"} ${M.name}`,disabled:!!s,onClick:()=>{x(M)}}),e.jsx("button",{"aria-label":`Remove ${M.name}`,title:"Remove skill",disabled:!!s,onClick:()=>{H(M)},className:"flex size-8 shrink-0 items-center justify-center rounded-md text-ink-secondary hover:bg-danger/10 hover:text-danger disabled:opacity-40",children:e.jsx(Be,{size:15})})]}),e.jsxs("div",{className:"mt-1 truncate text-[10.5px] text-ink-secondary",title:M.source,children:["Source: ",M.source]}),M.warnings.length>0&&e.jsx("div",{className:"mt-1 text-[10.5px] text-warning",children:M.warnings.join(" · ")})]},M.name))}),h.length>0&&e.jsxs("div",{className:"mt-2 text-[11.5px] text-warning",children:[h.length," proposal",h.length===1?" is":"s are"," waiting for a decision in chat."]}),g&&e.jsx("div",{role:"alert",className:"mt-2 text-[12px] text-danger",children:g})]}),e.jsx(Ka,{bot:a,onAdded:()=>{B()}}),p&&e.jsx(Pa,{skill:p.skill,text:p.text,error:g,working:s===p.skill.name,onCancel:()=>b(null),onEnable:()=>{v()}}),t&&e.jsx("div",{ref:F,tabIndex:-1,role:"dialog","aria-modal":"true","aria-labelledby":"skill-view-title",className:"fixed inset-0 z-[90] flex items-center justify-center bg-black/45 p-6",children:e.jsxs("div",{className:"flex max-h-[min(760px,90vh)] w-full max-w-2xl flex-col rounded-2xl bg-card p-5 shadow-2xl",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsx("div",{id:"skill-view-title",className:"text-[16px] font-semibold text-ink",children:t.name}),e.jsx("button",{type:"button",onClick:()=>N(null),className:"rounded-md px-2 py-1 text-[13px] text-ink-secondary hover:bg-control hover:text-ink",children:"Close"})]}),e.jsx("pre",{tabIndex:0,"aria-label":`Full SKILL.md for ${t.name}`,className:"mt-3 min-h-0 flex-1 overflow-auto whitespace-pre-wrap break-words rounded-xl bg-inset p-3 font-mono text-[12px] leading-relaxed text-ink",children:t.text})]})})]})}const Ha={grok:"native-and-mcp",grokAgent:"native-and-mcp",piAgent:"native-and-mcp","openai-compat":"native-and-mcp",mistral:"native-and-mcp",minimax:"native-and-mcp",cerebras:"native-and-mcp",claudeAgent:"mcp",codex:"mcp",geminiAgent:"mcp",kimiAgent:"mcp",droidAgent:"mcp",cursorAgent:"mcp",opencodeGo:"mcp",qwenAgent:"mcp",hermesAgent:"mcp",customAcp:"mcp",antigravityAgent:"mcp"},le=a=>a.split(/\r?\n/).map(l=>l.trim()).filter(Boolean);function Ia({bot:a,engineKind:l}){const{request:i}=P(),n=ve(a.toolScope),r=n.ok?n.scope:void 0,[y,h]=m.useState(null),[o,s]=m.useState(!1),[d,g]=m.useState(null),f=m.useRef(!0),p=m.useRef(!1);m.useEffect(()=>(f.current=!0,()=>{f.current=!1}),[]);const b=y??{custom:a.toolScope!==void 0,onlyListed:r?.allow!==void 0,allow:r?.allow?.join(`
|
|
4
|
+
`)??"",deny:r?.deny?.join(`
|
|
5
|
+
`)??""},B=b.custom?{...b.onlyListed?{allow:le(b.allow)}:{},deny:le(b.deny)}:void 0,x=ve(B),v=Ha[l],C=b.custom&&(b.onlyListed||le(b.deny).length>0)&&v!=="native-and-mcp"&&(v!=="mcp"||$e(B)),k=c=>{h({...b,...c}),g(null)},R=async()=>{if(!(!y||a.busy||p.current||!x.ok)){p.current=!0,s(!0),g(null);try{await i(`/api/bots/${a.id}`,{method:"PATCH",body:JSON.stringify({toolScope:x.scope??null})}),f.current&&h(null)}catch(c){f.current&&g(c instanceof Error?c.message:String(c))}finally{p.current=!1,f.current&&s(!1)}}},T=l==="piAgent"?`native:read
|
|
6
|
+
native:edit
|
|
7
|
+
native:write`:l==="grokAgent"?`native:read_file
|
|
8
|
+
native:search_replace
|
|
9
|
+
native:write`:v==="mcp"?`native:*
|
|
10
|
+
mcp:mail:read_notes`:`native:ask_user
|
|
11
|
+
mcp:mail:read_notes`;return e.jsxs("div",{className:"rounded-xl bg-card p-4",children:[e.jsx("div",{className:"text-[15px] font-medium text-ink",children:u("botAccess.tools.title")}),e.jsx("p",{className:"mt-0.5 text-[13px] text-ink-secondary",children:u("botAccess.tools.description")}),e.jsx("p",{role:n.ok?"status":"alert",className:`mt-2 text-[12px] ${n.ok?"text-ink-secondary":"text-danger"}`,children:n.ok?r?.allow?.length===0?u("botAccess.tools.none"):r===void 0?u("botAccess.tools.all"):u("botAccess.tools.customSaved"):u("botAccess.tools.corrupt")}),e.jsxs("label",{className:"mt-3 block text-[13px] text-ink-secondary",children:[u("botAccess.tools.mode"),e.jsxs("select",{"aria-label":u("botAccess.tools.title"),disabled:o||!!a.busy,value:b.custom?"custom":"all",className:`${V} mt-1 text-[13px]`,onChange:c=>k({custom:c.target.value==="custom",onlyListed:b.custom?b.onlyListed:!0}),children:[e.jsx("option",{value:"all",children:u("botAccess.tools.all")}),e.jsx("option",{value:"custom",children:u("botAccess.tools.custom")})]})]}),b.custom&&e.jsxs("fieldset",{disabled:o||!!a.busy,className:"mt-3 flex flex-col gap-3",children:[e.jsxs("label",{className:"flex items-center gap-2 text-[13px] text-ink",children:[e.jsx("input",{type:"checkbox",checked:b.onlyListed,onChange:c=>k({onlyListed:c.target.checked})}),u("botAccess.tools.onlyListed")]}),e.jsxs("label",{className:"text-[13px] text-ink-secondary",children:[u("botAccess.tools.allow"),e.jsx("textarea",{"aria-label":u("botAccess.tools.allow"),disabled:!b.onlyListed,rows:3,spellCheck:!1,className:`${V} mt-1 font-mono text-[12px] disabled:opacity-50`,placeholder:T,value:b.allow,onChange:c=>k({allow:c.target.value})})]}),b.onlyListed&&le(b.allow).length===0&&e.jsx("p",{className:"text-[12px] text-ink-secondary",children:u("botAccess.tools.emptyHint")}),e.jsxs("label",{className:"text-[13px] text-ink-secondary",children:[u("botAccess.tools.exclude"),e.jsx("textarea",{"aria-label":u("botAccess.tools.exclude"),rows:2,spellCheck:!1,className:`${V} mt-1 font-mono text-[12px]`,placeholder:"mcp:mail:send",value:b.deny,onChange:c=>k({deny:c.target.value})})]}),e.jsx("p",{className:"text-[12px] text-ink-secondary",children:u("botAccess.tools.syntax")}),l==="grokAgent"&&e.jsx("p",{className:"text-[12px] text-ink-secondary",children:u("botAccess.tools.grok")})]}),C&&e.jsx("p",{role:"alert",className:"mt-2 text-[12px] text-danger",children:u(v==="mcp"?"botAccess.tools.nativeUnsupported":"botAccess.tools.unsupported")}),!x.ok&&e.jsx("p",{role:"alert",className:"mt-2 text-[12px] text-danger",children:x.error}),d&&e.jsx("p",{role:"alert",className:"mt-2 text-[12px] text-danger",children:d}),a.busy&&e.jsx("p",{className:"mt-2 text-[12px] text-ink-secondary",children:u("botAccess.tools.busy")}),e.jsxs("div",{className:"mt-3 flex flex-wrap items-center gap-3",children:[e.jsx("button",{type:"button",disabled:o||!!a.busy||!y||!x.ok,onClick:()=>{R()},className:"rounded-lg bg-control px-3 py-2 text-[13px] text-ink hover:bg-raised-hover disabled:opacity-50",children:u(o?"botAccess.tools.saving":"botAccess.tools.save")}),e.jsx("a",{href:"https://github.com/milind-soni/OpenMausBot/blob/main/docs/tool-selection.md",target:"_blank",rel:"noreferrer",className:"text-[12px] text-ink-secondary underline",children:u("botAccess.tools.examples")})]})]})}function Oa({bot:a}){const{request:l}=P(),{capabilities:i}=Le(),n=i.host.homeDir,[r,y]=m.useState(null),[h,o]=m.useState(null),[s,d]=m.useState(!1),g=!!window.ogb?.pickFolder,p=a.tasks?.find(v=>v.threadId===a.threadId)?.cwd,b=p!==void 0&&(p??void 0)!==a.cwd,B=async v=>{d(!0),o(null);try{await l(`/api/bots/${a.id}`,{method:"PATCH",body:JSON.stringify({cwd:v})}),y(null)}catch(D){o(D instanceof Error?D.message:String(D))}finally{d(!1)}},x=async()=>{const v=await window.ogb?.pickFolder?.(a.cwd);v&&B(v)};return e.jsxs("div",{className:"rounded-xl bg-card p-4",children:[e.jsx("div",{className:"text-[15px] font-medium text-ink",children:"Working folder"}),e.jsx("div",{className:"mt-0.5 text-[13px] text-ink-secondary",children:"Where this bot runs its shell and file tools."}),e.jsx(J,{bot:a,kind:"chief"}),g?e.jsxs("div",{className:"mt-3 flex items-center gap-2",children:[e.jsx("div",{className:"min-w-0 flex-1 truncate rounded-lg border border-hairline/40 bg-inset px-3 py-2 font-mono text-[12.5px] text-ink",title:a.cwd,children:a.cwd?Ae(a.cwd,n):e.jsx("span",{className:"text-ink-secondary",children:"Private bot folder"})}),e.jsxs("button",{onClick:()=>{x()},disabled:s,className:"flex shrink-0 items-center gap-1.5 rounded-lg bg-control px-3 py-2 text-[13px] text-ink hover:bg-raised-hover disabled:opacity-50",children:[e.jsx(Qe,{size:14})," Choose…"]}),a.cwd&&e.jsx("button",{onClick:()=>{B(null)},disabled:s,className:"shrink-0 rounded-lg px-2 py-2 text-[13px] text-ink-secondary hover:text-ink disabled:opacity-50",children:"Clear"})]}):e.jsxs("form",{className:"mt-3 flex items-center gap-2",onSubmit:v=>{v.preventDefault(),B((r??a.cwd??"").trim()||null)},children:[e.jsx("input",{className:K(V,"font-mono text-[12.5px]"),placeholder:"Private bot folder — or an absolute path",value:r??a.cwd??"",onChange:v=>y(v.target.value)}),e.jsx("button",{type:"submit",disabled:s||r===null,className:"shrink-0 rounded-lg bg-control px-3 py-2 text-[13px] text-ink hover:bg-raised-hover disabled:opacity-50",children:"Save"})]}),h&&e.jsx("div",{className:"mt-2 text-[12px] text-danger",children:h}),b&&e.jsxs("div",{className:"mt-2 text-[12px] text-ink-secondary",children:["New tasks start here. This task is pinned to ",p?e.jsx("span",{className:"font-mono",children:Ae(p,n)}):"the home folder"," — start a new task to use the new folder."]})]})}function Wa({bot:a,patch:l}){const{dispatch:i}=O(),{servers:n,error:r,refresh:y}=la(),h=new Set((n?ta(n,a.mcpServers):[]).map(g=>g.name)),o=a.mcpServers==null,s=g=>{if(!n||a.busy||r)return;const f=o?n.filter(b=>b.enabled).map(b=>b.name):[...a.mcpServers??[]],p=f.includes(g)?f.filter(b=>b!==g):[...f,g];l({mcpServers:p})},d=()=>{i({type:"toggleSettings",open:!1}),i({type:"togglePlugins",open:!0,surface:"mcp"})};return e.jsxs("div",{className:"rounded-xl bg-card p-4",children:[e.jsx("div",{className:"flex items-center justify-between gap-4",children:e.jsxs("div",{children:[e.jsx("div",{className:"text-[15px] font-medium text-ink",children:u("connectors.tab.mcp")}),e.jsx("div",{className:"mt-0.5 text-[13px] text-ink-secondary",children:u("botAccess.mcpDescription")}),e.jsx(J,{bot:a,kind:"owner"})]})}),r&&e.jsxs("div",{role:"alert",className:"mt-3 text-[12px] text-danger",children:[u("botAccess.mcpRefreshError")," ",e.jsx("button",{type:"button",onClick:()=>{y()},className:"underline",children:u("connectors.action.retry")})]}),n===null?!r&&e.jsx("div",{className:"mt-3 text-[12px] text-ink-secondary",children:u("mcp.loading")}):n.length===0?e.jsx("div",{className:"mt-3 rounded-lg bg-inset px-3 py-2 text-[12px] text-ink-secondary",children:u("botAccess.mcpEmpty")}):e.jsx("div",{className:"mt-3 divide-y divide-hairline/40 overflow-hidden rounded-lg border border-hairline/40",children:n.map(g=>e.jsxs("div",{className:"flex items-center justify-between gap-3 px-3 py-2",children:[e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("div",{className:"truncate font-mono text-[12.5px] text-ink",children:g.name}),!g.enabled&&e.jsx("div",{className:"text-[11.5px] text-ink-secondary",children:u("botAccess.mcpDisabled")})]}),e.jsx(Z,{checked:h.has(g.name),disabled:!g.enabled||!!a.busy||r,"aria-label":u("botAccess.mcpAllow",{name:g.name}),onClick:()=>s(g.name),className:"disabled:cursor-not-allowed"})]},g.name))}),e.jsxs("div",{className:"mt-3 flex items-center gap-2",children:[e.jsxs("button",{type:"button",onClick:d,className:"flex items-center gap-1.5 rounded-lg bg-control px-3 py-2 text-[13px] text-ink hover:bg-raised-hover",children:[e.jsx(we,{size:14})," ",u("botAccess.mcpAdd")]}),!o&&n&&n.length>0&&e.jsx("button",{type:"button",disabled:!!a.busy||r,onClick:()=>{!a.busy&&!r&&l({mcpServers:null})},className:"rounded-lg px-2 py-2 text-[13px] text-ink-secondary hover:text-ink disabled:opacity-50",children:u("botAccess.mcpUseAll")})]}),a.busy&&e.jsx("p",{className:"mt-2 text-[12px] text-ink-secondary",children:u("botAccess.mcpBusy")})]})}let te=null,ae=null;const Va=6e4;function Me(a=!1){return!a&&te&&Date.now()-te.at<Va?Promise.resolve(te.services):ae||(ae=ie("/api/connectors/tools").then(l=>{const i=l.services??{};return l.configured&&(te={at:Date.now(),services:i}),i}).finally(()=>{ae=null}),ae)}const za=["read","draft","send","modify","delete"],Ua={read:"botAccess.grants.verb.read",draft:"botAccess.grants.verb.draft",send:"botAccess.grants.verb.send",modify:"botAccess.grants.verb.modify",delete:"botAccess.grants.verb.delete"};function $a({bot:a,patch:l,slugs:i}){const[n,r]=m.useState(null),[y,h]=m.useState(""),[o,s]=m.useState(null),[d,g]=m.useState(null),[f,p]=m.useState({}),[b,B]=m.useState(null);m.useEffect(()=>{if(!n||o||d)return;let c=!1;return Me().then(t=>{c||s(t)}).catch(t=>{c||g(t instanceof Error?t.message:String(t))}),()=>{c=!0}},[n,o,d]);const x=a.connectorTools,v=x!=null,D=c=>{const t=x?.[c];return t&&t.tools!=="*"?t.tools:[]},C=(c,t)=>{const N=sa(x,c,t);N!==void 0&&l({connectorTools:N})},k=(c,t)=>{const N=D(c),S=N.includes(t)?N.filter(A=>A!==t):[...N,t];if(!S.length){C(c,null);return}if(p(A=>({...A,[c]:S})),!v){B({slug:c,tools:S});return}C(c,{tools:S})},R=c=>{if(!v){B({slug:c,tools:"*"});return}const t=D(c);t.length&&p(N=>({...N,[c]:t})),C(c,{tools:"*"})},T=c=>{const t=f[c];t&&t.length?C(c,{tools:t}):C(c,null)};return i.length?e.jsxs("div",{className:"mt-3",children:[e.jsx("div",{className:"text-[12px] font-medium text-ink",children:u("botAccess.grants.header")}),e.jsx("div",{className:"mt-0.5 text-[11.5px] text-ink-secondary",children:u("botAccess.grants.hint")}),e.jsx("div",{className:"mt-2 divide-y divide-hairline/40 overflow-hidden rounded-lg border border-hairline/40",children:i.map(c=>{const t=ea(x,c),N=n===c,S=x?.[c],A=t.level==="all"&&v&&S?.tools==="*",L=o?.[c]??[],z=D(c),U=y.trim().toLowerCase(),I=U?L.filter(j=>j.name.toLowerCase().includes(U)||(j.description??"").toLowerCase().includes(U)):L,F=new Map;for(const j of L){const H=aa(j.name);if(!H)continue;const W=F.get(H)??[];W.push(j.name),F.set(H,W)}return e.jsxs("div",{children:[e.jsxs("button",{type:"button","aria-expanded":N,onClick:()=>{r(N?null:c),h("")},className:"flex w-full items-center gap-2 px-3 py-2 text-left hover:bg-control/60",children:[N?e.jsx(na,{size:14,className:"shrink-0 text-ink-secondary"}):e.jsx(ia,{size:14,className:"shrink-0 text-ink-secondary"}),e.jsx("span",{className:"min-w-0 flex-1 truncate font-mono text-[12.5px] text-ink",children:c}),e.jsx("span",{className:"shrink-0 text-[11.5px] text-ink-secondary",children:t.editable?t.level==="all"?u("botAccess.grants.allTools"):t.level==="none"?u("botAccess.grants.noTools"):u("botAccess.grants.toolCount",{count:t.count}):u("botAccess.grants.custom")})]}),N&&e.jsx("div",{className:"border-t border-hairline/40 bg-inset/40 px-3 py-3",children:t.editable?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-1.5",children:[e.jsx("button",{type:"button",onClick:()=>A?T(c):R(c),className:K("rounded-full px-2.5 py-1 text-[11.5px] font-medium",A?"bg-accent/15 text-accent-text":"bg-control text-ink hover:bg-raised-hover"),children:u("botAccess.grants.allTools")}),v&&e.jsx("button",{type:"button",onClick:()=>l({connectorTools:null}),className:"rounded-full bg-control px-2.5 py-1 text-[11.5px] font-medium text-ink hover:bg-raised-hover",children:u("botAccess.grants.allApps")})]}),!v&&e.jsx("div",{className:"mt-2 text-[11px] leading-relaxed text-ink-secondary",children:u("botAccess.grants.firstGrantWarning")}),d?e.jsxs("div",{className:"mt-2 text-[11.5px] text-ink-secondary",children:[u("botAccess.grants.loadError")," ",e.jsx("button",{type:"button",className:"underline",onClick:()=>{g(null),s(null),Me(!0).then(()=>{}).catch(()=>{})},children:u("botAccess.grants.retry")})]}):o===null?e.jsx("div",{className:"mt-2 text-[11.5px] text-ink-secondary",children:u("botAccess.grants.loading")}):L.length===0?e.jsx("div",{className:"mt-2 text-[11.5px] text-ink-secondary",children:u("botAccess.grants.noListing")}):e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"mt-2 flex flex-wrap gap-1.5",children:za.filter(j=>F.has(j)).map(j=>{const H=F.get(j)??[];return e.jsxs("button",{type:"button",title:u("botAccess.grants.verbHint"),onClick:()=>{const W=[...new Set([...z,...H])];if(p(X=>({...X,[c]:W})),!v){B({slug:c,tools:W});return}C(c,{tools:W})},className:"rounded-full bg-control px-2.5 py-1 text-[11px] text-ink hover:bg-raised-hover",children:[u(Ua[j])," · ",H.length]},j)})}),e.jsx("input",{className:K(V,"mt-2"),placeholder:u("botAccess.grants.search"),"aria-label":u("botAccess.grants.search"),value:y,onChange:j=>h(j.target.value)}),e.jsxs("div",{className:"mt-2 max-h-64 space-y-0.5 overflow-y-auto",children:[I.map(j=>{const H=A||z.includes(j.name);return e.jsxs("label",{className:"flex cursor-pointer items-start gap-2 rounded-md px-1.5 py-1 hover:bg-control/60",children:[e.jsx("input",{type:"checkbox",checked:H,disabled:A,onChange:()=>k(c,j.name),className:"mt-0.5"}),e.jsxs("span",{className:"min-w-0 flex-1",children:[e.jsx("span",{className:"block truncate font-mono text-[11.5px] text-ink",title:j.name,children:j.name}),j.description&&e.jsx("span",{className:"block truncate text-[11px] text-ink-secondary",title:j.description,children:j.description})]})]},j.name)}),I.length===0&&e.jsx("div",{className:"px-1.5 py-2 text-[11.5px] text-ink-secondary",children:u("botAccess.grants.noMatches")})]})]})]}):e.jsx("div",{className:"text-[11.5px] leading-relaxed text-ink-secondary",children:u("botAccess.grants.uneditable")})})]},c)})}),e.jsx(ra,{open:b!==null,title:u("botAccess.grants.firstGrantTitle",{service:b?.slug??""}),body:u("botAccess.grants.firstGrantBody",{service:b?.slug??""}),confirmLabel:u("botAccess.grants.saveGrant"),onCancel:()=>B(null),onConfirm:()=>{const c=b;B(null),c&&C(c.slug,{tools:c.tools})}})]}):e.jsx("div",{className:"mt-3 text-[11.5px] text-ink-secondary",children:u("botAccess.grants.noApps")})}function mn({bot:a,derived:l}){const{draft:i}=P(),{state:n,dispatch:r}=O(),{patch:y,canUseConnectedApps:h,connectedAppsConfigured:o,connectedAppsEnabled:s,connectorGrantState:d,canUseBrowser:g,desktopBrowser:f,browserBlockedOnWindows:p,browserFeature:b,browserAllowed:B,browserEnabled:x}=l,v=n.config?.browserEngine?.installable===!0,{capabilities:D}=Le(),C=Ze(n.config,D.host?.platform??"other"),k=qe(Ye({bot:a,place:a.computer??"auto",seat:C,config:n.config,instances:n.instances})),[R,T]=m.useState(null);m.useEffect(()=>{let S=!1;return _e().then(A=>{S||T(A)}),()=>{S=!0}},[]);const c=n.webhooks.filter(S=>S.botId===a.id),t=a.alwaysAllow??[],N=R?.authoritative?Object.entries(R.services).filter(([,S])=>S.connected).map(([S])=>S):[];return e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsxs("div",{className:"rounded-xl bg-card p-4","data-testid":"access-works-on",children:[e.jsx("div",{className:"text-[15px] font-medium text-ink",children:u("access.worksOn",{name:a.name,short:k.short})}),e.jsx(J,{bot:a,kind:"owner"}),e.jsx("button",{type:"button",onClick:()=>{r({type:"toggleSettings",open:!1}),r({type:"toggleComputer",open:!0})},className:"mt-3 rounded-lg bg-control px-3 py-1.5 text-[13px] text-ink hover:bg-raised-hover",children:u("place.action.openComputerPanel")}),(!a.computer||a.computer==="cloud")&&!n.config?.cloudHome&&e.jsxs(e.Fragment,{children:[!a.computer&&e.jsxs("div",{className:"mt-3 rounded-lg bg-inset px-3 py-2.5 text-[11.5px] leading-relaxed text-ink-secondary",children:[e.jsx("span",{className:"font-medium text-ink",children:"Auto cloud preference."})," ","This chooses what Auto may reuse during a task; viewing settings does not create or wake a computer."]}),e.jsx(va,{value:a.cloudBackend??"box",onChange:S=>y({cloudBackend:S})}),!a.computer&&a.cloudBackend==="vps"&&e.jsxs("div",{className:"mt-3 flex items-center justify-between gap-4 rounded-lg bg-inset px-3 py-2.5",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"text-[13px] text-ink",children:"Start VPS automatically"}),e.jsx("div",{className:"mt-0.5 text-[11.5px] text-ink-secondary",children:"Allow Auto to create or wake this bot's managed container when needed."})]}),e.jsx(Z,{checked:!!a.autoStartVps,"aria-label":"Start VPS automatically",onClick:()=>y({autoStartVps:!a.autoStartVps})})]})]})]}),e.jsx(Oa,{bot:a}),e.jsxs("div",{className:"rounded-xl bg-card p-4",children:[e.jsxs("div",{className:"flex items-center justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-[15px] font-medium text-ink",children:"Connected apps"}),e.jsx("div",{className:"mt-0.5 text-[13px] text-ink-secondary",children:o?h?s?d==="partial"?"Tool access is tailored per app. Expand an app below to edit its tools.":d==="none"?"Every connected app is currently limited to no tools. Expand an app to grant tools.":"Let this bot use your connected Gmail, Calendar, Slack, and other apps.":"Keep your connected apps unavailable to this bot.":"This bot's current model cannot use connected apps.":"Connect apps in App Settings before giving this bot access."}),e.jsx(J,{bot:a,kind:"owner"})]}),e.jsx(Z,{checked:s,"aria-label":"Allow this bot to use connected apps",disabled:!s&&(!o||!h),onClick:()=>y({composio:!s}),title:!s&&!o?"Connect apps in App Settings first":!s&&!h?"This model cannot use connected apps":void 0,className:"disabled:cursor-not-allowed"})]}),s&&R?.authoritative&&e.jsxs(e.Fragment,{children:[!i&&e.jsx(Za,{connectedSlugs:N,scopes:a.connectorScopes,onChange:S=>y({connectorScopes:S})}),e.jsx($a,{bot:a,patch:y,slugs:N})]}),s&&o&&e.jsxs("button",{type:"button",onClick:()=>{r({type:"toggleSettings",open:!1}),r({type:"togglePlugins",open:!0,surface:"apps"})},className:"mt-3 flex items-center gap-1.5 rounded-lg bg-control px-3 py-2 text-[13px] text-ink hover:bg-raised-hover",children:[e.jsx(we,{size:14})," ",u("botAccess.connectApp")]})]}),e.jsx(Wa,{bot:a,patch:y}),e.jsx(Ia,{bot:a,engineKind:l.engine?.driverKind},a.id),e.jsxs("div",{className:"flex items-center justify-between gap-4 rounded-xl bg-card p-4",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-[15px] font-medium text-ink",children:"Browser"}),e.jsx("div",{className:"mt-0.5 text-[13px] text-ink-secondary",children:f?b?g?a.computer==="off"?"Works on is set to Off, so this bot has no browser. Choose another place in the Computer panel to give it one.":x?"This bot has its own browser with its own logins.":"Keep the built-in browser unavailable to this bot.":"This bot's current model cannot use the built-in browser.":"The built-in browser is switched off under App Settings → Computers.":p&&!v?"Not available on this Windows machine yet: install the browser engine with `openmausbot browser install`.":Xe(n.config)}),e.jsx(J,{bot:a,kind:"owner"})]}),e.jsx(Z,{checked:x&&a.computer!=="off","aria-label":"Give this bot a built-in browser",disabled:a.computer==="off"||!x&&(!f&&!v||!b||!g),onClick:()=>y({browser:!B}),title:a.computer==="off"?"Works on is set to Off, so this bot has no browser":void 0,className:"disabled:cursor-not-allowed"})]}),!i&&e.jsxs("div",{className:"rounded-xl bg-card p-4",children:[e.jsx("div",{className:"text-[15px] font-medium text-ink",children:"Webhooks"}),e.jsx("div",{className:"mt-0.5 text-[13px] text-ink-secondary",children:"Inbound triggers wired to this bot."}),e.jsx(J,{bot:a,kind:"owner"}),c.length===0?e.jsx("div",{className:"mt-3 rounded-lg bg-inset px-3 py-2 text-[12px] text-ink-secondary",children:"No webhooks for this bot."}):e.jsx("div",{className:"mt-3 divide-y divide-hairline/40 overflow-hidden rounded-lg border border-hairline/40",children:c.map(S=>e.jsxs("div",{className:"flex items-center justify-between gap-3 px-3 py-2",children:[e.jsx("span",{className:"min-w-0 flex-1 truncate text-[13px] text-ink",children:S.name}),e.jsx("span",{className:K("shrink-0 rounded-full px-2 py-0.5 text-[11px] font-medium",S.enabled?"bg-accent/15 text-accent-text":"bg-control text-ink-secondary"),children:S.enabled?"Active":"Paused"}),e.jsxs("span",{className:"shrink-0 text-[11.5px] tabular-nums text-ink-secondary",children:[S.deliveryCount," deliveries"]})]},S.id))})]}),!i&&e.jsxs("div",{className:"rounded-xl bg-card p-4",children:[e.jsx("div",{className:"text-[15px] font-medium text-ink",children:"Always allowed"}),e.jsx("div",{className:"mt-0.5 text-[13px] text-ink-secondary",children:"Tools this bot no longer asks about."}),e.jsx(J,{bot:a,kind:"owner"}),t.length===0?e.jsx("div",{className:"mt-3 rounded-lg bg-inset px-3 py-2 text-[12px] text-ink-secondary",children:"Nothing standing yet."}):e.jsx("div",{className:"mt-3 divide-y divide-hairline/40 overflow-hidden rounded-lg border border-hairline/40",children:t.map(S=>e.jsxs("div",{className:"flex items-center justify-between gap-3 px-3 py-2",children:[e.jsx("span",{className:"min-w-0 flex-1 truncate font-mono text-[12.5px] text-ink",children:S}),e.jsx("button",{type:"button","aria-label":`Remove ${S} from always allowed`,onClick:()=>y({alwaysAllow:t.filter(A=>A!==S)}),className:"shrink-0 rounded-md px-2 py-1 text-[12px] text-ink-secondary hover:bg-danger/10 hover:text-danger",children:"Remove"})]},S))})]})]})}function Za({connectedSlugs:a,scopes:l,onChange:i}){const n=l!==void 0,r=[...new Set([...a,...Object.keys(l?.apps??{})])].sort(),y=(h,o)=>{const s={...l?.apps};o?s[h]=o:delete s[h],i({apps:s})};return e.jsxs("div",{className:"mt-3",children:[e.jsxs("div",{className:"flex items-center justify-between gap-4",children:[e.jsx("div",{className:"text-[13px] text-ink-secondary",children:n?"Only the apps allowed below, at the level set for each. Everything else is off for this bot.":"No app-level limits. The tool grants below still apply."}),e.jsx(Z,{checked:n,"aria-label":"Limit this bot to specific apps",onClick:()=>i(n?null:{apps:{}})})]}),n&&e.jsxs("div",{className:"mt-2 flex flex-col divide-y divide-hairline/20 rounded-lg bg-inset",children:[!r.length&&e.jsx("div",{className:"px-3 py-2 text-[11.5px] text-ink-secondary",children:"No apps connected yet. Connect one, then allow it here."}),r.map(h=>e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3 px-3 py-1.5",children:[e.jsxs("span",{className:"min-w-0 text-[13px] text-ink",children:[h,!a.includes(h)&&e.jsx("span",{className:"ml-2 text-[10.5px] text-ink-secondary",children:"not connected"})]}),e.jsx("div",{className:"flex shrink-0 gap-0.5 rounded-md bg-card p-0.5",role:"group","aria-label":`${h} access`,children:[[null,"Off","This bot cannot use it."],["read","Read","Search, fetch, and list only."],["write","Read & write","Tool grants and sending limits still apply."]].map(([o,s,d])=>e.jsx("button",{type:"button",title:d,"aria-pressed":(l?.apps[h]??null)===o,onClick:()=>y(h,o),className:K("rounded px-2 py-0.5 text-[11.5px] font-medium",(l?.apps[h]??null)===o?"bg-raised text-ink":"text-ink-secondary hover:text-ink"),children:s},s))})]},h))]})]})}function yn({bot:a}){const{state:l,dispatch:i}=O(),{draft:n}=P(),r=l.instances.find(y=>y.instanceId===a.modelSelection.instanceId)?.capabilities?.modelVariants;return e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsxs("div",{className:"rounded-xl bg-card p-4",children:[e.jsx(oa,{bot:a,contained:!0,label:e.jsxs("div",{children:[e.jsx("div",{className:"text-[15px] font-medium text-ink",children:"Default model"}),e.jsx("div",{className:"mt-0.5 text-[13px] text-ink-secondary",children:n?"Starting model for the new bot and its threads.":"For groups and every thread that uses the bot's model. A thread keeps its own model only when you pick one in it."}),e.jsx(J,{bot:a,kind:"chief"})]})}),!n&&e.jsx(da,{bot:a,className:"mt-3"})]}),e.jsx(ca,{bot:a,className:"rounded-xl bg-card p-4",label:e.jsxs("div",{children:[e.jsx("div",{className:"text-[15px] font-medium text-ink",children:r?"Reasoning":"Effort"}),e.jsx("div",{className:"mt-0.5 text-[13px] text-ink-secondary",children:r?n?"Starting reasoning variant for the new bot.":"For groups and every thread that uses the bot's model.":`How hard this bot thinks in groups and every thread that uses its model${a.modelSelection.effort?"":" (Default: no level is sent)"}`}),e.jsx(J,{bot:a,kind:"chief"})]})}),!n&&e.jsx(qa,{bot:a,onChange:y=>i({type:"updateBot",botId:a.id,patch:{fallback:y}})})]})}function qa({bot:a,onChange:l}){const{state:i}=O(),n=a.fallback??[],r=i.instances.filter(o=>o.snapshot.state==="available"&&!!o.models.default.trim()&&o.instanceId!==a.modelSelection.instanceId&&!n.some(s=>s.instanceId===o.instanceId)),y=o=>i.instances.find(s=>s.instanceId===o)?.displayName??o,h=o=>{const s=i.instances.find(d=>d.instanceId===o);!s||!s.models.default.trim()||n.length>=5||!r.includes(s)||l([...n,{instanceId:o,model:s.models.default}])};return e.jsxs("div",{className:"rounded-xl bg-card p-4",children:[e.jsx("div",{className:"text-[15px] font-medium text-ink",children:"Backup models for this bot"}),e.jsx("div",{className:"mt-0.5 text-[13px] text-ink-secondary",children:"When Automatic recovery is enabled in App Settings, try these models in order only if the provider proves the request never started. Work that may have run is not replayed. Only that thread switches; bot defaults and other threads stay unchanged. Backup provider charges may apply."}),!i.config?.automaticRecovery?.enabled&&e.jsx("p",{className:"mt-2 text-[12px] text-ink-secondary",children:"Automatic recovery is off. This list stays inactive until you enable it in App Settings."}),n.length>0&&e.jsx("ol",{className:"mt-3 flex flex-col gap-1",children:n.map((o,s)=>e.jsxs("li",{className:"flex items-center gap-2 rounded-lg bg-inset px-3 py-1.5 text-[13px]",children:[e.jsxs("span",{className:"w-4 shrink-0 tabular-nums text-ink-secondary",children:[s+1,"."]}),e.jsx("span",{className:"min-w-0 flex-1 truncate text-ink",children:y(o.instanceId)}),e.jsx("span",{className:"shrink-0 truncate text-[11.5px] text-ink-secondary",children:o.model}),e.jsx("button",{type:"button",onClick:()=>l(n.filter(d=>d.instanceId!==o.instanceId)),"aria-label":`Remove ${y(o.instanceId)} from the fallback list`,className:"shrink-0 rounded p-0.5 text-ink-secondary hover:text-ink",children:e.jsx(De,{size:13})})]},o.instanceId))}),n.length<5&&e.jsx("div",{className:K("flex items-center gap-2",n.length>0?"mt-2":"mt-3"),children:e.jsxs("select",{value:"",onChange:o=>h(o.target.value),"aria-label":"Add a fallback engine",disabled:r.length===0,className:"rounded-lg border border-hairline/40 bg-inset px-2 py-1 text-[13px] text-ink disabled:opacity-50",children:[e.jsx("option",{value:"",children:r.length===0?"No other engine is available":"Add an engine…"}),r.map(o=>e.jsx("option",{value:o.instanceId,children:o.displayName},o.instanceId))]})})]})}const Ya=25,_a={policy:"ask",dailyCap:Ya};function Xa({name:a,ownTeam:l,teams:i,allowed:n,onSave:r}){const[y,h]=m.useState(n),o=[...new Set([...i,...n])].filter(d=>d!==l).sort(),s=JSON.stringify([...y].sort())!==JSON.stringify([...n].sort());return e.jsxs("details",{className:"mt-3 border-t border-hairline/40 pt-3",children:[e.jsx("summary",{className:"cursor-pointer text-[13px] font-medium text-ink",children:"Additional teams"}),e.jsxs("p",{className:"mt-2 text-[13px] leading-relaxed text-ink-secondary",children:["Let ",a," coordinate bots and propose setup changes in the teams you select. Your own team is already included. Other bots keep their permissions, and unrelated chat history stays private."]}),e.jsxs("fieldset",{className:"mt-3 flex max-h-52 flex-col gap-2 overflow-y-auto",children:[e.jsxs("legend",{className:"sr-only",children:["Teams ",a," can work with"]}),o.map(d=>e.jsxs("label",{className:"flex items-center gap-2 text-[13px] text-ink",children:[e.jsx("input",{type:"checkbox",className:"accent-accent",checked:y.includes(d),onChange:g=>h(f=>g.target.checked?[...f,d]:f.filter(p=>p!==d))}),d||"General"]},d)),!o.length&&e.jsx("p",{className:"text-[13px] text-ink-secondary",children:"Create another team to coordinate across teams."})]}),e.jsx("button",{type:"button",disabled:!s,onClick:()=>r(y),className:"mt-3 rounded-lg bg-accent px-3 py-1.5 text-[13px] font-medium text-white disabled:opacity-40",children:"Save team access"})]})}function un({bot:a,derived:l}){const{patch:i,engine:n,canCoordinate:r,approvalMode:y,trustedModesAvailable:h,sectionName:o,currentChief:s}=l,{state:d,dispatch:g}=O(),f=ma(),{draft:p}=P(),[b,B]=m.useState(null),[x,v]=m.useState(null),[D,C]=m.useState(!0),[k,R]=m.useState(null),T=c=>{if(!(a.busy||c===y)){if(c==="full"){C(!0),v(a.id);return}if(c==="auto"&&a.computer==="local"){B(a.id);return}i({approvalMode:c})}};return e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsxs("div",{className:K("rounded-xl border p-4",a.chiefOfStaff?"border-accent/40 bg-accent/10":"border-hairline/40 bg-card"),children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("span",{className:K("flex size-8 shrink-0 items-center justify-center rounded-lg",a.chiefOfStaff?"bg-accent text-white":"bg-control text-ink-secondary"),children:e.jsx(ya,{size:17})}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("div",{className:"text-[15px] font-medium text-ink",children:"Chief of Staff"}),e.jsxs("div",{className:"text-[11.5px] text-ink-secondary",children:["One for ",o]})]}),e.jsx(Z,{checked:!!a.chiefOfStaff,"aria-label":"Chief of Staff",disabled:!a.chiefOfStaff&&!r,onClick:()=>i({chiefOfStaff:!a.chiefOfStaff}),title:!a.chiefOfStaff&&!r?"This model cannot contact other bots":void 0,className:"disabled:cursor-not-allowed"})]}),e.jsx("div",{className:"mt-3 text-[13px] leading-relaxed text-ink-secondary",children:a.chiefOfStaff&&!r?"This bot still holds the role, but its current provider cannot contact teammates. Choose a provider that supports bot coordination.":a.chiefOfStaff?`This is the primary contact for ${o}. It can create and coordinate specialists in this team, then combine their work into one answer.`:r?s?`Make this bot the ${o} Chief and hand the role over from ${s.name}.`:`Make this bot the primary contact for the ${o} team.`:"Choose a provider that supports bot coordination."}),e.jsx(J,{bot:a,kind:"chief"}),a.chiefOfStaff&&e.jsx(Xa,{name:a.name,ownTeam:a.section?.trim()||"",teams:["",...d.sections??[],...[...d.bots,...d.groups].map(c=>c.section?.trim()||"")],allowed:a.managedSections??[],onSave:c=>i({managedSections:c,acknowledgePeerScope:!0})},a.id+JSON.stringify(a.managedSections??[])),a.chiefOfStaff&&e.jsx(J,{bot:a,kind:"owner"})]}),e.jsxs("div",{className:"flex items-center justify-between gap-4 rounded-xl bg-card p-4",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-[15px] font-medium text-ink",children:"Ask me before contacting other bots"}),e.jsx("div",{className:"mt-0.5 text-[13px] text-ink-secondary",children:a.approvePeerComms?"This bot will stop and ask before it reaches out to another bot.":"Let this bot talk to teammates on its own, without a confirmation step."}),e.jsx(J,{bot:a,kind:"owner"})]}),e.jsx(Z,{checked:!!a.approvePeerComms,"aria-label":"Ask me before contacting other bots",disabled:!a.approvePeerComms&&!r,onClick:()=>i({approvePeerComms:!a.approvePeerComms}),title:!a.approvePeerComms&&!r?"This model cannot contact other bots":void 0,className:"disabled:cursor-not-allowed"})]}),e.jsxs("div",{className:"rounded-xl bg-card p-4",children:[e.jsx("div",{className:"text-[15px] font-medium text-ink",children:"Approval level"}),e.jsx("div",{className:"mt-0.5 text-[13px] text-ink-secondary",children:p?"Default for the new bot's threads, routines and delegated work.":"Default for new threads, routines and delegated work. When enabling Full access, you can also apply it to every existing thread. Use Refresh permissions on a thread to apply the current level to that conversation."}),e.jsx(J,{bot:a,kind:"owner"}),e.jsx("div",{className:"mt-3",children:e.jsx(ua,{approvalMode:a.approvalMode,autoApprove:a.autoApprove,providerName:n?.displayName??a.name,driverKind:n?.driverKind??"",onSelect:T,menuDirection:"down",wide:!0,disabled:!!a.busy,trustedModesAvailable:h,onManageCommandAllowlist:!p&&f===!0?()=>R({botId:a.id,botName:a.name}):void 0})}),!p&&y==="full"&&h&&e.jsx("button",{type:"button",disabled:!!a.busy,className:"mt-3 text-[13px] text-accent hover:underline disabled:opacity-40",onClick:()=>{C(!0),v(a.id)},children:"Apply Full access to all threads"}),!p&&f===!0&&e.jsx("button",{type:"button",className:"mt-3 block text-[13px] text-accent hover:underline",onClick:()=>R({botId:a.id,botName:a.name}),children:u("commandAllowlist.manage")})]}),k&&e.jsx(ha,{...k,onClose:()=>R(null)},k.botId),!p&&e.jsx(Qa,{bot:a,onChange:c=>i({outbound:c})},a.id),e.jsx(xa,{open:b!==null,onCancel:()=>B(null),onConfirm:()=>{const c=b;B(null),c&&g({type:"updateBot",botId:c,patch:{approvalMode:"auto",acknowledgeLocalAuto:!0}})}}),e.jsx(pa,{open:x!==null,allThreads:D,onAllThreadsChange:p?void 0:C,onCancel:()=>v(null),onConfirm:()=>{const c=x;v(null),c&&g({type:"updateBot",botId:c,patch:{approvalMode:"full",confirmFullAccess:!0,applyToAllThreads:D}})}})]})}function Qa({bot:a,onChange:l}){const i=a.outbound??_a,[n,r]=m.useState(null),[y,h]=m.useState(String(i.dailyCap));m.useEffect(()=>{h(String(i.dailyCap))},[i.dailyCap]),m.useEffect(()=>{let s=!0;return fetch(`/api/bots/${a.id}/outbound`).then(d=>d.ok?d.json():null).then(d=>{s&&d&&typeof d.today=="number"&&r(d.today)}).catch(()=>{}),()=>{s=!1}},[a.id,a.outbound]);const o=()=>{const s=Number(y);if(!Number.isInteger(s)||s<1||s>1e3){h(String(i.dailyCap));return}s!==i.dailyCap&&l({policy:i.policy,dailyCap:s})};return e.jsxs("div",{className:"rounded-xl bg-card p-4",children:[e.jsx("div",{className:"text-[15px] font-medium text-ink",children:"Sending on your behalf"}),e.jsx("div",{className:"mt-0.5 text-[13px] text-ink-secondary",children:"Emails, messages, posts, invites, and payments through connected apps. Reading and drafting never count. This applies at every approval level, including Full access."}),e.jsx("div",{className:"mt-3 flex gap-1 rounded-lg bg-inset p-0.5",children:[["ask","Ask every time","Every send waits for your tap."],["allow","Allow a daily amount","Sends go out on their own, up to the cap below."]].map(([s,d,g])=>e.jsx("button",{title:g,type:"button","aria-pressed":i.policy===s,onClick:()=>{s!==i.policy&&l({policy:s,dailyCap:i.dailyCap})},className:K("flex-1 rounded-md px-2.5 py-1.5 text-[13px] font-medium",i.policy===s?"bg-raised text-ink":"text-ink-secondary hover:text-ink"),children:d},s))}),i.policy==="allow"&&e.jsxs("div",{className:"mt-3 flex flex-wrap items-center gap-3 text-[13px] text-ink-secondary",children:[e.jsxs("label",{className:"flex items-center gap-2",children:["Up to",e.jsx("input",{type:"number",min:1,max:1e3,value:y,onChange:s=>h(s.target.value),onBlur:o,onKeyDown:s=>{s.key==="Enter"&&s.target.blur()},"aria-label":"Daily outbound limit",className:"w-20 rounded-md bg-inset px-2 py-1 text-[13px] text-ink tabular-nums outline-none focus:ring-1 focus:ring-accent"}),"a day"]}),e.jsx("span",{className:"tabular-nums",children:n===null?"":`${n} of ${i.dailyCap} used today`})]})]})}function hn({bot:a,derived:l}){const{patch:i}=l,{draft:n}=P();return e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsx(ba,{bot:a,onPatch:i}),e.jsxs("div",{className:"flex items-center justify-between gap-4 rounded-xl bg-card p-4",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-[15px] font-medium text-ink",children:"Notifications"}),e.jsx("div",{className:"mt-0.5 text-[13px] text-ink-secondary",children:"Get notified when this agent finishes or needs input"})]}),e.jsx(Z,{checked:a.notifications,"aria-label":"Agent notifications",onClick:()=>{const r=!a.notifications;r&&!n&&ga(),i({notifications:r})}})]})]})}function Ne(a){return!a||a==="everyone"?{mode:"everyone",people:""}:a==="admins"?{mode:"admins",people:""}:{mode:"people",people:a.people.join(`
|
|
12
|
+
`)}}function en(a,l){if(a!=="people")return{ok:!0,visibility:a};const i=[...new Set(l.split(/[\s,;]+/).map(n=>n.trim().toLowerCase()).filter(Boolean))];return i.length?{ok:!0,visibility:{people:i}}:{ok:!1}}function he(a){return!a||a==="everyone"||a==="admins"?a??"everyone":JSON.stringify([...new Set(a.people.map(l=>l.trim().toLowerCase()))].sort())}function an(a,l,i){const n=he(a.visibility);return l.filter(r=>!r.dm&&r.memberIds.includes(a.id)&&(r.audienceFloor!==void 0&&he(r.audienceFloor)!==n||r.memberIds.some(y=>{const h=i.find(o=>o.id===y);return h!==void 0&&h.id!==a.id&&he(h.visibility)!==n}))).map(r=>({id:r.id,name:r.name}))}const nn=[{mode:"everyone",key:"botSettings.visibility.everyone"},{mode:"admins",key:"botSettings.visibility.admins"},{mode:"people",key:"botSettings.visibility.people"}];function xn({bot:a}){const{state:l}=O(),i=an(a,l.groups,l.bots),n=Ne(a.visibility),[r,y]=m.useState(n.mode),[h,o]=m.useState(n.people),[s,d]=m.useState(!1),[g,f]=m.useState(null),[p,b]=m.useState(null),B=r!==n.mode||r==="people"&&h.trim()!==n.people.trim(),x=JSON.stringify(a.visibility??"everyone");m.useEffect(()=>{const C=Ne(JSON.parse(x));y(C.mode),o(C.people)},[a.id,x]);const v=async C=>{d(!0),b(null);try{await ie(`/api/groups/${C}`,{method:"PATCH",body:JSON.stringify({resetAudience:!0})})}catch(k){b(k instanceof Error?k.message:String(k))}finally{d(!1)}},D=async()=>{const C=en(r,h);if(!C.ok){b(u("botSettings.visibility.needPeople"));return}d(!0),b(null),f(null);try{await ie(`/api/bots/${a.id}`,{method:"PATCH",body:JSON.stringify({visibility:C.visibility})}),f("saved")}catch(k){b(k instanceof Error?k.message:String(k))}finally{d(!1)}};return e.jsxs("div",{className:"flex flex-col gap-3 rounded-xl border border-hairline/40 bg-card p-4","data-bot-visibility":!0,children:[e.jsx("p",{className:"text-[12.5px] leading-relaxed text-ink-secondary",children:u("botSettings.visibility.subtitle")}),e.jsx("div",{role:"radiogroup","aria-label":u("botSettings.visibility.title"),className:"flex flex-col gap-1.5",children:nn.map(C=>e.jsxs("label",{className:"flex cursor-pointer items-center gap-2 text-[13px] text-ink",children:[e.jsx("input",{type:"radio",name:`visibility-${a.id}`,value:C.mode,checked:r===C.mode,disabled:s,onChange:()=>{y(C.mode),f(null),b(null)}}),u(C.key)]},C.mode))}),r==="people"&&e.jsxs("label",{className:"flex flex-col gap-1 text-[12px] text-ink-secondary",children:[u("botSettings.visibility.peopleLabel"),e.jsx("textarea",{value:h,onChange:C=>{o(C.target.value),f(null)},placeholder:u("botSettings.visibility.peoplePlaceholder"),rows:4,disabled:s,className:"rounded-lg border border-hairline/40 bg-inset px-3 py-2 font-mono text-[12.5px] text-ink placeholder:text-ink-secondary focus:outline-none"})]}),e.jsx("p",{className:"text-[11.5px] leading-relaxed text-ink-secondary",children:u("botSettings.visibility.rooms")}),i.length>0&&e.jsxs("div",{className:"flex flex-col gap-2 rounded-lg border border-warning/25 bg-warning/5 px-3 py-2 text-[12px] leading-relaxed text-ink-secondary","data-visibility-mixed-rooms":!0,children:[e.jsx("p",{children:u("botSettings.visibility.mixedRooms",{rooms:i.map(C=>JSON.stringify(C.name)).join(", ")})}),e.jsx("div",{className:"flex flex-wrap gap-2",children:i.map(C=>e.jsx("button",{type:"button",disabled:s,onClick:()=>{v(C.id)},className:"rounded-md bg-control px-2 py-1 text-[12px] text-ink hover:bg-control/70 disabled:opacity-50",children:u("botSettings.visibility.resetRoom",{room:JSON.stringify(C.name)})},C.id))})]}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs("button",{type:"button",onClick:()=>{D()},disabled:s||!B,className:K("flex items-center gap-1.5 rounded-lg bg-accent px-3 py-1.5 text-[12.5px] font-semibold text-white hover:brightness-110 disabled:opacity-50"),children:[s&&e.jsx(se,{size:13,className:"animate-spin"}),s?u("botSettings.visibility.saving"):u("botSettings.visibility.save")]}),g==="saved"&&!B&&e.jsxs("span",{role:"status",className:"flex items-center gap-1 text-[12px] text-success",children:[e.jsx(xe,{size:13}),u("botSettings.visibility.saved")]})]}),p&&e.jsx("p",{role:"alert",className:"text-[12px] text-danger",children:p})]})}export{mn as A,on as I,yn as M,un as P,dn as S,hn as V,cn as a,Ja as b,Pa as c,xn as d,V as i,Fa as u,en as v};
|