titan-agent 6.3.0 → 6.3.1
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/utils/constants.js +1 -1
- package/dist/utils/constants.js.map +1 -1
- package/package.json +1 -1
- package/ui/dist/assets/{AuditPanel-BmFAKA7p.js → AuditPanel-TdDAyJUQ.js} +1 -1
- package/ui/dist/assets/{AutonomyPanel-BzuCEsiG.js → AutonomyPanel-B6EIpuFt.js} +1 -1
- package/ui/dist/assets/{AutopilotPanel-DA1vFEl4.js → AutopilotPanel-CLe14-eq.js} +1 -1
- package/ui/dist/assets/{AutoresearchPanel-BeUCXYtX.js → AutoresearchPanel-C14q_kh7.js} +1 -1
- package/ui/dist/assets/{BackupPanel-B6N1pfMT.js → BackupPanel-CoEbryip.js} +1 -1
- package/ui/dist/assets/{BrowserPanel-BGHaPi3O.js → BrowserPanel-CRTJOXQV.js} +1 -1
- package/ui/dist/assets/{CPActivity-BUSwjFj2.js → CPActivity-DjT8p5Dn.js} +1 -1
- package/ui/dist/assets/{CPAgentDetail-DlUEVujH.js → CPAgentDetail-CR1ciISN.js} +1 -1
- package/ui/dist/assets/{CPAgents-CnRmsSMo.js → CPAgents-DIYCdpQR.js} +1 -1
- package/ui/dist/assets/{CPApprovals-CXdkzebd.js → CPApprovals-DAKmaSkN.js} +1 -1
- package/ui/dist/assets/{CPCosts-CfcyIUZg.js → CPCosts-CCCh_VY0.js} +1 -1
- package/ui/dist/assets/{CPDashboard-DHlfE1mT.js → CPDashboard-CyKZGlHB.js} +1 -1
- package/ui/dist/assets/{CPFiles-DyV9vsjE.js → CPFiles-CI252ucO.js} +1 -1
- package/ui/dist/assets/{CPGoals-C17G2F0e.js → CPGoals-BtcgDUY5.js} +1 -1
- package/ui/dist/assets/{CPInbox-D5A3ja_Q.js → CPInbox-igQoKOuB.js} +1 -1
- package/ui/dist/assets/{CPIssueDetail-CoPv27Ll.js → CPIssueDetail-DD5iL5mT.js} +1 -1
- package/ui/dist/assets/{CPIssues-C9EdfW1J.js → CPIssues-C1XUjgdv.js} +1 -1
- package/ui/dist/assets/CPLayout-VXhuxAHd.js +2 -0
- package/ui/dist/assets/{CPOrg-DzoVDLKI.js → CPOrg-JyXp44DB.js} +1 -1
- package/ui/dist/assets/{CPRuns-BHAyFv0K.js → CPRuns-C-gZX28e.js} +1 -1
- package/ui/dist/assets/{CPSocial-CjHD8dKM.js → CPSocial-sMl4vqmX.js} +1 -1
- package/ui/dist/assets/{CPVoice-aybMotU5.js → CPVoice-BXTY3vl7.js} +1 -1
- package/ui/dist/assets/{ChannelsPanel-8KfvAEYM.js → ChannelsPanel-rF_yHmYD.js} +1 -1
- package/ui/dist/assets/{CheckpointsPanel-BCyLRLcg.js → CheckpointsPanel-DO0QSjuz.js} +1 -1
- package/ui/dist/assets/{CommandPostHub-Ce-mWsu2.js → CommandPostHub-BLnNTvBO.js} +3 -3
- package/ui/dist/assets/{CronPanel-A9JHvU_O.js → CronPanel-DELTcCV-.js} +1 -1
- package/ui/dist/assets/{DataTable-ol6IZMRj.js → DataTable-BmbYppBc.js} +1 -1
- package/ui/dist/assets/{DreamPanel-ZiOF8ybh.js → DreamPanel-B28qIraZ.js} +1 -1
- package/ui/dist/assets/{EmptyState-B1i1ZK0x.js → EmptyState-CxJGUl_w.js} +1 -1
- package/ui/dist/assets/{EvalHarnessPanel-DRGc1zbp.js → EvalHarnessPanel-DvI-dsqQ.js} +1 -1
- package/ui/dist/assets/{EvalPanel-B_fiFImG.js → EvalPanel-DKdn69V8.js} +1 -1
- package/ui/dist/assets/{FileViewer-D14G6MQq.js → FileViewer-Deg5Z7ng.js} +1 -1
- package/ui/dist/assets/{FilesPanel-BIsMoSfg.js → FilesPanel-DDRjQukY.js} +1 -1
- package/ui/dist/assets/{FleetPanel-CSjOOsbX.js → FleetPanel-eEudyOkP.js} +1 -1
- package/ui/dist/assets/{HomelabPanel-XHMxqiHu.js → HomelabPanel-Dov1f68P.js} +1 -1
- package/ui/dist/assets/InfraView-DgasEqoR.js +2 -0
- package/ui/dist/assets/{InlineEditableField-AOS-LBh_.js → InlineEditableField-4ZA-KEfv.js} +1 -1
- package/ui/dist/assets/{Input-CTK9oH9g.js → Input-C7lzcGqx.js} +1 -1
- package/ui/dist/assets/{IntegrationsPanel-BKuC_5El.js → IntegrationsPanel-BmnWsnvF.js} +1 -1
- package/ui/dist/assets/IntelligenceView-DXYSyS1a.js +2 -0
- package/ui/dist/assets/{LearningPanel-RpDaPvCj.js → LearningPanel-BsKhgbeS.js} +1 -1
- package/ui/dist/assets/{LogsPanel-9zIJP1Xv.js → LogsPanel-C-H_axtp.js} +1 -1
- package/ui/dist/assets/{McpPanel-CNE7MhDu.js → McpPanel-BizAlt2h.js} +1 -1
- package/ui/dist/assets/{MemoryGraphPanel-9DEsbOZF.js → MemoryGraphPanel-Qle7Bodz.js} +1 -1
- package/ui/dist/assets/{MemoryWikiPanel-CqNen9A6.js → MemoryWikiPanel-CKY4HY4k.js} +1 -1
- package/ui/dist/assets/{MeshPanel-Bq3pHHIT.js → MeshPanel-D35hLDX4.js} +1 -1
- package/ui/dist/assets/MissionCanvas-BU6dvWdk.js +72 -0
- package/ui/dist/assets/{MissionChat-BDqlCplQ.js → MissionChat-BCxqk708.js} +1 -1
- package/ui/dist/assets/{MissionLibrary-9SMdJnfa.js → MissionLibrary-DtovbHf7.js} +1 -1
- package/ui/dist/assets/{MissionStart-Cm7C3kyo.js → MissionStart-DQCW6cLo.js} +1 -1
- package/ui/dist/assets/{Modal-B9KCAwCK.js → Modal-CpcFi-Gm.js} +1 -1
- package/ui/dist/assets/{NvidiaPanel-CpGBj1sn.js → NvidiaPanel-Dwvf8UD2.js} +1 -1
- package/ui/dist/assets/{OrganismPanel-DBHyylxC.js → OrganismPanel-mhCf2syl.js} +1 -1
- package/ui/dist/assets/{OverviewPanel-DII4H_R7.js → OverviewPanel-DiOrl6LB.js} +1 -1
- package/ui/dist/assets/{PageHeader-Bzb_WXw0.js → PageHeader-CPfyiZIM.js} +1 -1
- package/ui/dist/assets/{PersonaProfilesPanel-CXZTZhjo.js → PersonaProfilesPanel-BvQlozzS.js} +1 -1
- package/ui/dist/assets/{PersonasPanel-BYbD8XiV.js → PersonasPanel-G5Jz55AB.js} +1 -1
- package/ui/dist/assets/{PhoneDeskPanel-Bol7fCCN.js → PhoneDeskPanel-Cx4wlgRT.js} +1 -1
- package/ui/dist/assets/{RecipesPanel-BRbXRcEn.js → RecipesPanel-DB6Kuo1a.js} +1 -1
- package/ui/dist/assets/{SecurityPanel-BR3BT7Rb.js → SecurityPanel-BcnpsElV.js} +1 -1
- package/ui/dist/assets/{SelfImprovePanel-BX9xYBxl.js → SelfImprovePanel-do5xDzc8.js} +1 -1
- package/ui/dist/assets/{SelfProposalsPanel-BOoDEAYp.js → SelfProposalsPanel-DM4B-HLa.js} +1 -1
- package/ui/dist/assets/{SessionsPanel-BICnNmn0.js → SessionsPanel-Bl8h6Bfu.js} +1 -1
- package/ui/dist/assets/{SessionsTab-X10FeDWA.js → SessionsTab-hihe8Dc7.js} +1 -1
- package/ui/dist/assets/{SettingsPanel-MuC32AXw.js → SettingsPanel-Cp8decIS.js} +1 -1
- package/ui/dist/assets/SettingsView-BZIgBz0P.js +2 -0
- package/ui/dist/assets/{SkeletonLoader-fwI4Z-f0.js → SkeletonLoader-DLzSaIMH.js} +1 -1
- package/ui/dist/assets/{SkillsPanel-CKFndekU.js → SkillsPanel-B0VL9cO1.js} +1 -1
- package/ui/dist/assets/{SomaView-Ch7WlmBy.js → SomaView-BejcfdMM.js} +1 -1
- package/ui/dist/assets/{StatCard-Bj2Q_4WS.js → StatCard-Bt-57DK2.js} +1 -1
- package/ui/dist/assets/{StatusBadge-NtdTQ8_L.js → StatusBadge-BE0SQNPu.js} +1 -1
- package/ui/dist/assets/{Tabs-CC9aTVuL.js → Tabs-dEteLxhl.js} +1 -1
- package/ui/dist/assets/{TeamsPanel-DjFcLsdR.js → TeamsPanel-7UwGxnbj.js} +1 -1
- package/ui/dist/assets/{TelemetryPanel-k7gJbZyS.js → TelemetryPanel-CqbkTW3V.js} +1 -1
- package/ui/dist/assets/{TitanCanvas-MzLkpZhp.js → TitanCanvas-RVuBEoV1.js} +4 -4
- package/ui/dist/assets/{ToolsView-DcxwuM2l.js → ToolsView-C97QnPeY.js} +2 -2
- package/ui/dist/assets/{Tooltip-CFYHfpgQ.js → Tooltip-BGe4ZrLD.js} +1 -1
- package/ui/dist/assets/{TraceViewer-BfLO9vwI.js → TraceViewer-CSj_fZou.js} +1 -1
- package/ui/dist/assets/{TrainingPanel-DUl6qChY.js → TrainingPanel-43gDnkVS.js} +1 -1
- package/ui/dist/assets/{VoiceOverlay-Dj_cR5_Y.js → VoiceOverlay-CvZcewVV.js} +1 -1
- package/ui/dist/assets/{VramPanel-th0_Eo8o.js → VramPanel-nadiVKRZ.js} +1 -1
- package/ui/dist/assets/{WatchView-DyGhpKbv.js → WatchView-CUGArdWk.js} +1 -1
- package/ui/dist/assets/{WorkTab-BG5VBljJ.js → WorkTab-iCDNyX60.js} +1 -1
- package/ui/dist/assets/{WorkflowsPanel-C1hVHqAc.js → WorkflowsPanel-Do5EOPQ-.js} +1 -1
- package/ui/dist/assets/{archive-C2_hAJXj.js → archive-96Jj-QYz.js} +1 -1
- package/ui/dist/assets/{arrow-left-DFCBXvKS.js → arrow-left-DvmiAV7y.js} +1 -1
- package/ui/dist/assets/{book-open-BgDKDGcH.js → book-open-DvAaokKW.js} +1 -1
- package/ui/dist/assets/{bot-C4ICYImG.js → bot-DFsTWhzD.js} +1 -1
- package/ui/dist/assets/{chart-column-BIFJOG_f.js → chart-column-BWW8khga.js} +1 -1
- package/ui/dist/assets/{check-CmCL8yzl.js → check-4bqUIREX.js} +1 -1
- package/ui/dist/assets/{chevron-right-U0Ujye5i.js → chevron-right-DhAaVOkv.js} +1 -1
- package/ui/dist/assets/{chevron-up-B6uSBxbj.js → chevron-up-DhONR6eV.js} +1 -1
- package/ui/dist/assets/{circle-check-big-BFw1nom4.js → circle-check-big-CrrpTfnZ.js} +1 -1
- package/ui/dist/assets/{circle-stop-DbtGpdaw.js → circle-stop-BOU58Urf.js} +1 -1
- package/ui/dist/assets/{clipboard-list-Dd3_U8cK.js → clipboard-list-GcIgVrYh.js} +1 -1
- package/ui/dist/assets/{clock-DpJIc30t.js → clock-D5MlrzQb.js} +1 -1
- package/ui/dist/assets/{dollar-sign-DlrOHVzA.js → dollar-sign-B9t2KmrG.js} +1 -1
- package/ui/dist/assets/{download-CZ5kTONh.js → download-DzgUP-io.js} +1 -1
- package/ui/dist/assets/{external-link-CX-GvMky.js → external-link--90_rW_r.js} +1 -1
- package/ui/dist/assets/{file-text-BtTsNJbB.js → file-text-C-9as3zm.js} +1 -1
- package/ui/dist/assets/{flask-conical-BaPYppKH.js → flask-conical-BJnD20AK.js} +1 -1
- package/ui/dist/assets/{folder-BOnpha2-.js → folder-BXotS0h-.js} +1 -1
- package/ui/dist/assets/{funnel-DaNi6kwp.js → funnel-BkW9zcis.js} +1 -1
- package/ui/dist/assets/{git-branch-gs6g9dSe.js → git-branch-D7pbvkyu.js} +1 -1
- package/ui/dist/assets/{index-Dbv5oKsp.js → index-DczEfArU.js} +2 -2
- package/ui/dist/assets/index-DmgXt1oB.css +1 -0
- package/ui/dist/assets/{layers-BKZz8iD1.js → layers-BgUh-m00.js} +1 -1
- package/ui/dist/assets/{legacy-DbwFsW2A.js → legacy-Wbf7An22.js} +1 -1
- package/ui/dist/assets/{lightbulb-DX6YLtPe.js → lightbulb-4Yox7P7Z.js} +1 -1
- package/ui/dist/assets/{list-todo-qdMNm4-Q.js → list-todo-JeleiL5r.js} +1 -1
- package/ui/dist/assets/{message-square-Cwo5FOho.js → message-square-C9bK5TAD.js} +1 -1
- package/ui/dist/assets/{mic-BzvwK4IS.js → mic-DwEnBcFd.js} +1 -1
- package/ui/dist/assets/{missions-CYlXuJED.js → missions-Jbe_PHaT.js} +1 -1
- package/ui/dist/assets/{network-Dt-RBtO_.js → network-BjQmrmO8.js} +1 -1
- package/ui/dist/assets/{pause-Do3XNLtx.js → pause-9vYiD-5Y.js} +1 -1
- package/ui/dist/assets/{pencil-DAGs9RFs.js → pencil-CygyIvE1.js} +1 -1
- package/ui/dist/assets/{play-CNElkzEq.js → play-7ImYx-M6.js} +1 -1
- package/ui/dist/assets/{plug-DCgrVnB8.js → plug-DXmJpsfC.js} +1 -1
- package/ui/dist/assets/{plus-BnsXhqXc.js → plus-LIrhsu2s.js} +1 -1
- package/ui/dist/assets/{proxy-BXHdgwrk.js → proxy-B72L9I2p.js} +1 -1
- package/ui/dist/assets/{radio-BPz7sHXW.js → radio-DN9FsrLZ.js} +1 -1
- package/ui/dist/assets/{refresh-cw-Cs4oDMNE.js → refresh-cw-DyPWslHB.js} +1 -1
- package/ui/dist/assets/{rotate-ccw-DSpsA3Wr.js → rotate-ccw-C7z7lzst.js} +1 -1
- package/ui/dist/assets/{save-BhGg2pZh.js → save-Bl0vY0Ur.js} +1 -1
- package/ui/dist/assets/{search-BtxlIgqN.js → search-DLl1kVch.js} +1 -1
- package/ui/dist/assets/{send-BzKTXI3q.js → send-BqZ0Qzz-.js} +1 -1
- package/ui/dist/assets/{server-B1gIgixS.js → server-DvPKxeOK.js} +1 -1
- package/ui/dist/assets/{shield-check-C39B-Wi3.js → shield-check-DMM8OpD5.js} +1 -1
- package/ui/dist/assets/{terminal-CubaeYlJ.js → terminal-DD6OAIa2.js} +1 -1
- package/ui/dist/assets/{test-tube-CYYLfFIz.js → test-tube-BoC1tTKm.js} +1 -1
- package/ui/dist/assets/{toggle-right-BQ3iDgLG.js → toggle-right-CrEdx-9K.js} +1 -1
- package/ui/dist/assets/{trash-2-CSxfLiVB.js → trash-2-Co50XYSn.js} +1 -1
- package/ui/dist/assets/{trending-up-DXxKT18Q.js → trending-up-SFD19agk.js} +1 -1
- package/ui/dist/assets/{trophy-osEOm2Vi.js → trophy-DLTd-oCR.js} +1 -1
- package/ui/dist/assets/{volume-2-C1OkTurz.js → volume-2-vQvjPYVu.js} +1 -1
- package/ui/dist/assets/{wifi-off-DAhvsjnD.js → wifi-off-DVwDeeLz.js} +1 -1
- package/ui/dist/index.html +2 -2
- package/ui/dist/sw.js +1 -1
- package/ui/dist/assets/CPLayout-CHrlktMs.js +0 -2
- package/ui/dist/assets/InfraView-DNYgRXkB.js +0 -2
- package/ui/dist/assets/IntelligenceView-BUKpVpDQ.js +0 -2
- package/ui/dist/assets/MissionCanvas-Ci0hbAF0.js +0 -69
- package/ui/dist/assets/SettingsView-Cv9IZqiU.js +0 -2
- package/ui/dist/assets/index-OZm1iJy9.css +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as a,j as e,b as _,aA as ye,i as ee,m as we,L as te,a8 as se,aB as Ne,aC as Se,aD as ke,aE as Ce,t as Ve,aF as Ee,aG as ae,aH as Te,aI as Le,a9 as Ue}from"./index-Dbv5oKsp.js";import"./Input-CTK9oH9g.js";import{P as Ae}from"./PageHeader-Bzb_WXw0.js";import{H as re}from"./Tooltip-CFYHfpgQ.js";import{C as Pe}from"./circle-check-big-BFw1nom4.js";import{M as B}from"./mic-BzvwK4IS.js";import{R as Ie}from"./refresh-cw-Cs4oDMNE.js";import{W as Me}from"./wifi-off-DAhvsjnD.js";import{D as Fe}from"./download-CZ5kTONh.js";import{P as $e}from"./play-CNElkzEq.js";import{S as Re}from"./save-BhGg2pZh.js";import"./clsx-B-dksMZM.js";import"./chevron-right-U0Ujye5i.js";const ce=[{id:"oak",label:"Oak",swatch:"linear-gradient(135deg, #6e4724, #482a13)"},{id:"walnut",label:"Walnut",swatch:"linear-gradient(135deg, #4a2e18, #2a1808)"},{id:"mahogany",label:"Mahogany",swatch:"linear-gradient(135deg, #5e2a1a, #38160c)"},{id:"white",label:"White",swatch:"linear-gradient(135deg, #f4f1ea, #ddd9ce)"}],H="titan-desk-theme";function Oe(){try{const r=localStorage.getItem(H);if(r==="oak"||r==="walnut"||r==="mahogany"||r==="white")return r}catch{}return"oak"}function De(r){try{localStorage.setItem(H,r)}catch{}}function _e({className:r}){const[f,p]=a.useState(Oe);a.useEffect(()=>{const n=h=>{if(h.key===H&&h.newValue){const x=h.newValue;ce.some(j=>j.id===x)&&p(x)}};return window.addEventListener("storage",n),()=>window.removeEventListener("storage",n)},[]);const C=a.useCallback(n=>{p(n),De(n),window.dispatchEvent(new CustomEvent("desk-theme",{detail:n}))},[]);return e.jsxs("div",{className:`flex items-center gap-2 ${r??""}`,children:[e.jsx("span",{className:"text-[10px] uppercase tracking-widest text-[#a89070]",children:"Desk"}),ce.map(n=>e.jsx("button",{type:"button",onClick:()=>C(n.id),title:n.label,className:`w-5 h-5 rounded-full border-2 transition-transform hover:scale-110 ${f===n.id?"border-[#c4a35a] scale-110":"border-transparent"}`,style:{background:n.swatch}},n.id))]})}const F=["ollama","lmstudio","localai"];function Be({ok:r}){return r?e.jsx("div",{className:"h-2 w-2 rounded-full bg-success shadow-[0_0_6px_rgba(34,197,94,0.4)]"}):e.jsx("div",{className:"h-2 w-2 rounded-full bg-border-light"})}function He({models:r,selectedModel:f,onSelect:p,onSwitch:C,currentModel:n}){const h=n.includes("/")?n.split("/")[0]:"",[x,j]=a.useState(h);a.useEffect(()=>{j(h)},[h]);const b=a.useMemo(()=>[...new Set(r.map(i=>i.provider))].sort((i,m)=>{const l=F.includes(i.toLowerCase()),k=F.includes(m.toLowerCase());return l&&!k?-1:!l&&k?1:i.localeCompare(m)}),[r]),S=a.useMemo(()=>r.filter(o=>o.provider===x),[r,x]),U=o=>{j(o);const i=r.filter(l=>l.provider===o),m=i.find(l=>l.id===n);m?p(m.id):i.length>0&&p(i[0].id)},$=f!==n,y=F.includes(x.toLowerCase());return e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-1.5 mb-1.5",children:[e.jsx("label",{className:"text-xs text-text-muted",children:"Provider"}),e.jsx(re,{title:"AI Provider",description:"The company or service that hosts the AI model. Local providers (Ollama, LM Studio) run on your machine. Cloud providers (Anthropic, OpenAI) run remotely and require an API key."})]}),e.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center gap-2",children:[e.jsx("select",{value:x,onChange:o=>U(o.target.value),className:"w-full rounded-lg border border-border bg-bg px-3 py-2.5 text-sm text-text outline-none transition-colors focus:border-accent min-h-[44px]",children:b.map(o=>{const i=F.includes(o.toLowerCase()),m=r.filter(l=>l.provider===o).length;return e.jsxs("option",{value:o,children:[i?`💻 ${o} (local)`:o," — ",m," model",m!==1?"s":""]},o)})}),y&&e.jsxs("span",{className:"flex items-center gap-1 whitespace-nowrap rounded bg-success/15 px-2 py-1 text-xs font-medium text-success self-start mt-0.5 sm:self-auto sm:mt-0",children:[e.jsx(Se,{className:"h-3 w-3"})," Local"]}),!y&&x&&e.jsxs("span",{className:"flex items-center gap-1 whitespace-nowrap rounded bg-accent/15 px-2 py-1 text-xs font-medium text-accent-hover self-start mt-0.5 sm:self-auto sm:mt-0",children:[e.jsx(ke,{className:"h-3 w-3"})," Cloud"]})]})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-1.5 mb-1.5",children:[e.jsx("label",{className:"text-xs text-text-muted",children:"Model"}),e.jsx(re,{title:"Model Selection",description:"The specific AI model TITAN uses to think and respond. Larger models are smarter but slower and cost more. You can switch anytime without losing conversation history."})]}),e.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-end gap-2 md:gap-3",children:[e.jsxs("select",{value:f,onChange:o=>p(o.target.value),className:"w-full rounded-lg border border-border bg-bg px-3 py-2.5 text-sm text-text outline-none transition-colors focus:border-accent min-h-[44px]",children:[S.map(o=>e.jsxs("option",{value:o.id,disabled:!o.available,children:[o.name,o.id===n?" (active)":"",o.available?"":" — unavailable"]},o.id)),S.length===0&&e.jsx("option",{disabled:!0,children:"No models for this provider"})]}),e.jsx("button",{onClick:C,disabled:!$,className:"rounded-lg bg-accent px-4 py-2.5 text-sm font-medium text-white transition-colors hover:bg-accent/80 disabled:opacity-50 min-h-[44px] w-full sm:w-auto active:scale-[0.98]",children:"Switch"})]})]}),e.jsxs("div",{className:"flex items-center gap-2 rounded-lg border border-border bg-bg px-3 py-2.5",children:[e.jsx("div",{className:"h-2 w-2 rounded-full bg-success animate-pulse flex-shrink-0"}),e.jsx("span",{className:"text-xs text-text-muted",children:"Active:"}),e.jsx("span",{className:"text-xs text-text-secondary font-mono overflow-x-auto scrollbar-thin",children:n||"None"})]})]})}function mt(){var X,Y,J;const[r,f]=a.useState(null),[p,C]=a.useState([]),[n,h]=a.useState(!0),[x,j]=a.useState(!1),[b,S]=a.useState(""),[U,$]=a.useState(null),[y,o]=a.useState(null),[i,m]=a.useState(!1),[l,k]=a.useState(""),[V,E]=a.useState("andrew"),[w,W]=a.useState("f5-tts"),[oe,q]=a.useState("http://localhost:5006"),[ne,T]=a.useState(["andrew"]),[We,qe]=a.useState(null),[Ke,ze]=a.useState(!1),[Ge,Qe]=a.useState(""),A=[{id:"f5-tts",name:"F5-TTS",desc:"Voice cloning with MLX (Apple Silicon)",defaultUrl:"http://localhost:5006",defaultVoices:["andrew"]}],[Xe,ie]=a.useState(null),[le,Ye]=a.useState(!1),[de,Je]=a.useState(""),[K,R]=a.useState([]),[z,G]=a.useState(!1),[v,xe]=a.useState(null),[L,me]=a.useState(null),[O,Q]=a.useState(!1),P=t=>{var s;return((s=t==null?void 0:t.agent)==null?void 0:s.model)??(t==null?void 0:t.model)??""};a.useEffect(()=>{(async()=>{try{const[s,c]=await Promise.all([se(),Ne()]);f(s),C(c),S(P(s));const d=(s==null?void 0:s.voice)??{};m(d.enabled??!1),k(d.livekitUrl??""),E(d.ttsVoice??"andrew"),W(d.ttsEngine??"f5-tts"),q(d.ttsUrl??"http://localhost:5006")}catch(s){const c=s instanceof Error?s.message:"Failed to load config";$(c),u("error",c)}finally{h(!1)}})()},[]),a.useEffect(()=>{(async()=>{var t;try{const s=await _("/api/voice/voices");if(s.ok){const c=await s.json();(t=c.voices)!=null&&t.length&&T(c.voices)}}catch{}})()},[]);const D=async()=>{Q(!0);try{const[t,s]=await Promise.allSettled([_("/api/voice/health").then(c=>c.json()),_("/api/voice/status").then(c=>c.json())]);t.status==="fulfilled"&&xe(t.value),s.status==="fulfilled"&&(me(s.value),s.value.livekitUrl&&!l&&k(s.value.livekitUrl))}catch{}Q(!1)};a.useEffect(()=>{n||D()},[n]),a.useEffect(()=>{i&&ye().then(t=>{var s;ie({installed:t.installed,running:t.running,voices:t.voices}),R(t.voices.map(c=>({name:c,hasTranscript:!1,sizeBytes:0}))),(s=t.voices)!=null&&s.length&&T(["andrew",...t.voices])}).catch(()=>{})},[i]);const ue=async()=>{const t=document.createElement("input");t.type="file",t.accept="audio/wav,audio/mp3,audio/mpeg,audio/flac,.wav,.mp3,.flac",t.onchange=async()=>{var g;const s=(g=t.files)==null?void 0:g[0];if(!s)return;const c=prompt('Name this voice (e.g., "robin", "jarvis"):',s.name.replace(/\.[^.]+$/,""));if(!c)return;const d=prompt("(Optional) Transcript of the audio — improves cloning quality:","")||"";G(!0);try{const N=await s.arrayBuffer(),I=btoa(String.fromCharCode(...new Uint8Array(N))),M=await Ee(c,I,d),ve=M!=null&&M.duration?` Duration: ${M.duration}s,`:"";u("success",`Voice "${c}" uploaded!${ve} preprocessed and normalized.`);const Z=await ae();R(Z.voices||[]),T(["default",...Z.voices.map(je=>je.name)]),E(c)}catch(N){u("error",N instanceof Error?N.message:"Failed to upload voice")}finally{G(!1)}},t.click()},pe=async t=>{try{u("success",`Generating preview for "${t}"...`);const s=["Hello, how can I help you today?","I am ready to assist you with anything you need.","Good morning. It is a pleasure to be of service."],c=s[Math.floor(Math.random()*s.length)],d=await Te(t,c),g=new Blob([d],{type:"audio/wav"}),N=URL.createObjectURL(g),I=new Audio(N);I.onended=()=>URL.revokeObjectURL(N),I.play()}catch(s){u("error",s instanceof Error?s.message:"Failed to preview voice")}},he=async t=>{if(confirm(`Delete voice "${t}"?`))try{await Le(t);const s=await ae();R(s.voices||[]),T(["andrew",...s.voices.map(c=>c.name)]),V===t&&E("default"),u("success",`Voice "${t}" deleted`)}catch(s){u("error",s instanceof Error?s.message:"Failed to delete voice")}},u=(t,s)=>{o({type:t,message:s}),setTimeout(()=>o(null),3e3)},be=async()=>{if(!(!b||b===P(r??{})))try{const t=p.find(c=>c.id===b);await Ce(b,t==null?void 0:t.provider),Ve("model_switched",{model:b,provider:t==null?void 0:t.provider});const s=await se();f(s),S(P(s)),u("success",`Switched to ${b}`)}catch(t){u("error",t instanceof Error?t.message:"Failed to switch model")}},ge=async()=>{var t,s,c,d;j(!0);try{const g=await Ue({voice:{enabled:i,livekitUrl:l,ttsVoice:V,ttsEngine:w,ttsUrl:oe||"http://localhost:5005",sttUrl:((t=r==null?void 0:r.voice)==null?void 0:t.sttUrl)??"http://localhost:48421",livekitApiKey:((s=r==null?void 0:r.voice)==null?void 0:s.livekitApiKey)??"",livekitApiSecret:((c=r==null?void 0:r.voice)==null?void 0:c.livekitApiSecret)??"",agentUrl:((d=r==null?void 0:r.voice)==null?void 0:d.agentUrl)??""}});f(g),u("success","Settings saved"),i&&D()}catch(g){u("error",g instanceof Error?g.message:"Failed to save settings")}finally{j(!1)}};if(n)return e.jsx("div",{className:"space-y-4",children:Array.from({length:3}).map((t,s)=>e.jsx("div",{className:"h-32 animate-pulse rounded-xl border border-border bg-bg-secondary"},s))});if(U)return e.jsxs("div",{className:"space-y-4",children:[e.jsx(Ae,{title:"Settings",breadcrumbs:[{label:"Admin",href:"/overview"},{label:"Settings"},{label:"Settings"}]}),e.jsxs("div",{className:"rounded-xl border border-error/50 bg-bg-secondary p-6",children:[e.jsxs("div",{className:"flex items-center gap-2 text-error",children:[e.jsx(ee,{className:"h-5 w-5"}),e.jsx("p",{className:"text-sm font-medium",children:"Failed to load settings"})]}),e.jsx("p",{className:"mt-2 text-sm text-text-secondary",children:U}),e.jsx("button",{onClick:()=>window.location.reload(),className:"mt-4 rounded-lg bg-bg-tertiary px-4 py-2 text-sm text-text hover:bg-border transition-colors",children:"Retry"})]})]});const fe=r?P(r):"";return e.jsxs("div",{className:"space-y-4 md:space-y-6",children:[e.jsx("h2",{className:"text-base md:text-lg font-semibold text-text",children:"Settings"}),e.jsx("div",{className:"rounded-lg border border-border bg-bg-secondary/50 px-3 py-2.5",children:e.jsx(_e,{})}),y&&e.jsxs("div",{className:`flex items-center gap-2 rounded-lg border px-3 md:px-4 py-2.5 md:py-2 text-[11px] md:text-sm ${y.type==="success"?"border-success/50 text-success":"border-error/50 text-error"}`,children:[y.type==="success"?e.jsx(Pe,{className:"h-4 w-4"}):e.jsx(ee,{className:"h-4 w-4"}),y.message]}),e.jsxs("div",{className:"rounded-xl border border-border bg-bg-secondary p-3 md:p-6",children:[e.jsx("h3",{className:"mb-3 md:mb-4 text-[11px] md:text-sm font-medium text-text-secondary",children:"Model"}),e.jsx(He,{models:p,selectedModel:b,onSelect:S,onSwitch:be,currentModel:fe})]}),e.jsxs("div",{className:"rounded-xl border border-border bg-bg-secondary p-3 md:p-6",children:[e.jsxs("div",{className:"mb-3 md:mb-4 flex items-center justify-between flex-wrap gap-2",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(B,{className:"h-4 w-4 text-accent-hover"}),e.jsx("h3",{className:"text-sm font-medium text-text-secondary",children:"Voice"}),e.jsx("span",{className:"rounded-full bg-accent/20 px-2 py-0.5 text-[9px] font-medium text-purple-light",children:((X=A.find(t=>t.id===w))==null?void 0:X.name)||w})]}),e.jsxs("button",{onClick:D,disabled:O,className:"flex items-center gap-1.5 rounded-md px-2 py-1 text-[10px] text-text-muted hover:bg-bg-tertiary hover:text-text-secondary transition-colors",children:[e.jsx(Ie,{className:`h-3 w-3 ${O?"animate-spin":""}`}),O?"Scanning...":"Scan Services"]})]}),e.jsxs("div",{className:"space-y-4",children:[v&&e.jsxs("div",{className:"rounded-lg border border-bg-tertiary bg-bg p-3",children:[e.jsx("p",{className:"mb-2 text-[10px] font-medium uppercase tracking-wider text-text-muted",children:"Service Discovery"}),e.jsx("div",{className:"grid grid-cols-2 gap-2",children:[{label:"LiveKit Server",ok:v.livekit},{label:"Voice Agent",ok:v.agent},{label:"STT",ok:v.stt},{label:`TTS (${((Y=A.find(t=>t.id===w))==null?void 0:Y.name)||"TTS"})`,ok:v.tts}].map(({label:t,ok:s})=>e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(Be,{ok:s}),e.jsx("span",{className:`text-xs ${s?"text-text-secondary":"text-text-muted"}`,children:t}),s&&e.jsx("span",{className:"text-[9px] text-success",children:"Online"})]},t))}),(L==null?void 0:L.available)!==void 0&&e.jsx("div",{className:"mt-2 flex items-center gap-2 border-t border-bg-tertiary pt-2",children:L.available?e.jsxs(e.Fragment,{children:[e.jsx(we,{className:"h-3.5 w-3.5 text-success"}),e.jsx("span",{className:"text-xs text-success",children:"Voice system ready"})]}):e.jsxs(e.Fragment,{children:[e.jsx(Me,{className:"h-3.5 w-3.5 text-text-muted"}),e.jsx("span",{className:"text-xs text-text-muted",children:L.reason||"Voice not available"})]})})]}),e.jsxs("label",{className:"flex items-center gap-3",children:[e.jsx("input",{type:"checkbox",checked:i,onChange:t=>m(t.target.checked),className:"h-4 w-4 rounded border-border accent-accent"}),e.jsx("span",{className:"text-sm text-text",children:"Enable Voice Chat"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"mb-2 block text-xs text-text-muted",children:"TTS Engine"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-2",children:A.map(t=>e.jsxs("button",{type:"button",onClick:()=>{W(t.id),q(t.defaultUrl),E(t.defaultVoices[0]||"default"),T(t.defaultVoices)},className:`rounded-lg border p-3 text-left transition-all min-h-[64px] active:scale-[0.98] sm:min-h-[56px] ${w===t.id?"border-accent bg-accent/10":"border-border hover:border-border-light"}`,children:[e.jsx("div",{className:"text-xs font-medium text-text",children:t.name}),e.jsx("div",{className:"mt-0.5 text-[10px] text-text-muted",children:t.desc})]},t.id))}),e.jsx("div",{className:"mt-3 rounded-xl border border-border bg-bg-secondary p-4 space-y-4",children:le?e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(te,{className:"h-4 w-4 text-accent2 animate-spin"}),e.jsx("span",{className:"text-sm font-medium text-text",children:"Installing F5-TTS..."})]}),e.jsx("div",{className:"rounded-lg bg-bg border border-bg-tertiary p-3",children:e.jsx("p",{className:"text-xs text-text-secondary font-mono break-all",children:de})})]}):e.jsxs("div",{className:"space-y-3",children:[e.jsx("div",{className:"flex items-center justify-between",children:e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:"w-2 h-2 rounded-full bg-success shadow-[0_0_6px_rgba(34,197,94,0.4)]"}),e.jsx("span",{className:"text-sm text-text",children:"F5-TTS Running"})]})}),e.jsxs("div",{className:"rounded-lg border border-bg-tertiary bg-bg p-3 space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("p",{className:"text-xs font-medium text-text-secondary",children:"Cloned Voices"}),e.jsxs("button",{onClick:ue,disabled:z,className:"flex items-center gap-1.5 rounded-lg px-3 py-1.5 text-xs font-medium text-accent2 border border-border hover:border-accent2/50 hover:bg-accent2/10 transition-colors disabled:opacity-50",children:[z?e.jsx(te,{className:"h-3 w-3 animate-spin"}):e.jsx(Fe,{className:"h-3 w-3 rotate-180"}),"Upload Voice"]})]}),e.jsx("p",{className:"text-[10px] text-text-muted leading-relaxed",children:"Upload 5-10 seconds of clear speech. No background noise or music. Adding a transcript significantly improves quality."}),K.length>0?e.jsx("div",{className:"space-y-1.5",children:K.map(t=>e.jsxs("div",{className:"flex items-center justify-between rounded-lg border border-bg-tertiary px-3 py-2",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(B,{className:"h-3.5 w-3.5 text-accent2"}),e.jsx("span",{className:"text-sm text-text capitalize",children:t.name}),e.jsxs("span",{className:"text-[9px] text-text-muted",children:[(t.sizeBytes/1024).toFixed(0),"KB"]}),t.hasTranscript&&e.jsx("span",{className:"rounded bg-success/15 px-1 py-0.5 text-[8px] text-success",children:"transcript"})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("button",{onClick:()=>pe(t.name),className:"text-text-muted hover:text-accent2 transition-colors",title:"Preview voice",children:e.jsx($e,{className:"h-3.5 w-3.5"})}),e.jsx("button",{onClick:()=>he(t.name),className:"text-text-muted hover:text-error transition-colors",title:"Delete voice",children:e.jsx("svg",{className:"h-3.5 w-3.5",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,children:e.jsx("path",{d:"M3 6h18M19 6v14a2 2 0 01-2 2H7a2 2 0 01-2-2V6m3 0V4a2 2 0 012-2h4a2 2 0 012 2v2"})})})]})]},t.name))}):e.jsx("p",{className:"text-xs text-text-muted",children:"No cloned voices yet. Upload a 5-10 second WAV reference to clone any voice."})]})]})})]}),e.jsxs("div",{children:[e.jsxs("label",{className:"mb-1 flex items-center gap-2 text-xs text-text-muted",children:["LiveKit URL",(v==null?void 0:v.livekit)&&e.jsx("span",{className:"rounded bg-success/15 px-1.5 py-0.5 text-[9px] font-medium text-success",children:"Connected"})]}),e.jsx("input",{value:l,onChange:t=>k(t.target.value),placeholder:"ws://localhost:7880",className:"w-full rounded-lg border border-border bg-bg px-3 py-2 text-sm text-text outline-none focus:border-accent"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"mb-2 block text-xs text-text-muted",children:"Voice"}),e.jsx("div",{className:"grid grid-cols-4 gap-2",children:ne.map(t=>e.jsx("button",{type:"button",onClick:()=>E(t),className:`rounded-lg border px-3 py-2 text-sm transition-all capitalize ${V===t?"border-accent bg-accent/10 text-text":"border-border text-text-secondary hover:border-border-light hover:text-text"}`,children:t},t))}),e.jsx("p",{className:"mt-2 text-xs text-text-muted",children:"F5-TTS voice cloning via MLX. Upload a 5-10 second reference audio to clone any voice."})]}),V&&e.jsxs("div",{className:"flex items-center gap-2 rounded-lg border border-border bg-bg px-3 py-2",children:[e.jsx(B,{className:"h-3.5 w-3.5 text-accent-hover"}),e.jsx("span",{className:"text-xs text-text-muted",children:"Selected:"}),e.jsx("span",{className:"text-xs font-mono text-text-secondary",children:V}),e.jsx("span",{className:"ml-auto rounded bg-accent/15 px-1.5 py-0.5 text-[9px] font-medium text-purple-light",children:((J=A.find(t=>t.id===w))==null?void 0:J.name)||w})]})]})]}),e.jsxs("button",{onClick:ge,disabled:x,className:"flex items-center gap-2 rounded-lg bg-accent px-4 py-2 text-sm font-medium text-white transition-colors hover:bg-accent/80 disabled:opacity-50",children:[e.jsx(Re,{className:"h-4 w-4"}),x?"Saving...":"Save Settings"]})]})}export{mt as default};
|
|
1
|
+
import{r as a,j as e,b as _,aA as ye,i as ee,m as we,L as te,a8 as se,aB as Ne,aC as Se,aD as ke,aE as Ce,t as Ve,aF as Ee,aG as ae,aH as Te,aI as Le,a9 as Ue}from"./index-DczEfArU.js";import"./Input-C7lzcGqx.js";import{P as Ae}from"./PageHeader-CPfyiZIM.js";import{H as re}from"./Tooltip-BGe4ZrLD.js";import{C as Pe}from"./circle-check-big-CrrpTfnZ.js";import{M as B}from"./mic-DwEnBcFd.js";import{R as Ie}from"./refresh-cw-DyPWslHB.js";import{W as Me}from"./wifi-off-DVwDeeLz.js";import{D as Fe}from"./download-DzgUP-io.js";import{P as $e}from"./play-7ImYx-M6.js";import{S as Re}from"./save-Bl0vY0Ur.js";import"./clsx-B-dksMZM.js";import"./chevron-right-DhAaVOkv.js";const ce=[{id:"oak",label:"Oak",swatch:"linear-gradient(135deg, #6e4724, #482a13)"},{id:"walnut",label:"Walnut",swatch:"linear-gradient(135deg, #4a2e18, #2a1808)"},{id:"mahogany",label:"Mahogany",swatch:"linear-gradient(135deg, #5e2a1a, #38160c)"},{id:"white",label:"White",swatch:"linear-gradient(135deg, #f4f1ea, #ddd9ce)"}],H="titan-desk-theme";function Oe(){try{const r=localStorage.getItem(H);if(r==="oak"||r==="walnut"||r==="mahogany"||r==="white")return r}catch{}return"oak"}function De(r){try{localStorage.setItem(H,r)}catch{}}function _e({className:r}){const[f,p]=a.useState(Oe);a.useEffect(()=>{const n=h=>{if(h.key===H&&h.newValue){const x=h.newValue;ce.some(j=>j.id===x)&&p(x)}};return window.addEventListener("storage",n),()=>window.removeEventListener("storage",n)},[]);const C=a.useCallback(n=>{p(n),De(n),window.dispatchEvent(new CustomEvent("desk-theme",{detail:n}))},[]);return e.jsxs("div",{className:`flex items-center gap-2 ${r??""}`,children:[e.jsx("span",{className:"text-[10px] uppercase tracking-widest text-[#a89070]",children:"Desk"}),ce.map(n=>e.jsx("button",{type:"button",onClick:()=>C(n.id),title:n.label,className:`w-5 h-5 rounded-full border-2 transition-transform hover:scale-110 ${f===n.id?"border-[#c4a35a] scale-110":"border-transparent"}`,style:{background:n.swatch}},n.id))]})}const F=["ollama","lmstudio","localai"];function Be({ok:r}){return r?e.jsx("div",{className:"h-2 w-2 rounded-full bg-success shadow-[0_0_6px_rgba(34,197,94,0.4)]"}):e.jsx("div",{className:"h-2 w-2 rounded-full bg-border-light"})}function He({models:r,selectedModel:f,onSelect:p,onSwitch:C,currentModel:n}){const h=n.includes("/")?n.split("/")[0]:"",[x,j]=a.useState(h);a.useEffect(()=>{j(h)},[h]);const b=a.useMemo(()=>[...new Set(r.map(i=>i.provider))].sort((i,m)=>{const l=F.includes(i.toLowerCase()),k=F.includes(m.toLowerCase());return l&&!k?-1:!l&&k?1:i.localeCompare(m)}),[r]),S=a.useMemo(()=>r.filter(o=>o.provider===x),[r,x]),U=o=>{j(o);const i=r.filter(l=>l.provider===o),m=i.find(l=>l.id===n);m?p(m.id):i.length>0&&p(i[0].id)},$=f!==n,y=F.includes(x.toLowerCase());return e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-1.5 mb-1.5",children:[e.jsx("label",{className:"text-xs text-text-muted",children:"Provider"}),e.jsx(re,{title:"AI Provider",description:"The company or service that hosts the AI model. Local providers (Ollama, LM Studio) run on your machine. Cloud providers (Anthropic, OpenAI) run remotely and require an API key."})]}),e.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center gap-2",children:[e.jsx("select",{value:x,onChange:o=>U(o.target.value),className:"w-full rounded-lg border border-border bg-bg px-3 py-2.5 text-sm text-text outline-none transition-colors focus:border-accent min-h-[44px]",children:b.map(o=>{const i=F.includes(o.toLowerCase()),m=r.filter(l=>l.provider===o).length;return e.jsxs("option",{value:o,children:[i?`💻 ${o} (local)`:o," — ",m," model",m!==1?"s":""]},o)})}),y&&e.jsxs("span",{className:"flex items-center gap-1 whitespace-nowrap rounded bg-success/15 px-2 py-1 text-xs font-medium text-success self-start mt-0.5 sm:self-auto sm:mt-0",children:[e.jsx(Se,{className:"h-3 w-3"})," Local"]}),!y&&x&&e.jsxs("span",{className:"flex items-center gap-1 whitespace-nowrap rounded bg-accent/15 px-2 py-1 text-xs font-medium text-accent-hover self-start mt-0.5 sm:self-auto sm:mt-0",children:[e.jsx(ke,{className:"h-3 w-3"})," Cloud"]})]})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-1.5 mb-1.5",children:[e.jsx("label",{className:"text-xs text-text-muted",children:"Model"}),e.jsx(re,{title:"Model Selection",description:"The specific AI model TITAN uses to think and respond. Larger models are smarter but slower and cost more. You can switch anytime without losing conversation history."})]}),e.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-end gap-2 md:gap-3",children:[e.jsxs("select",{value:f,onChange:o=>p(o.target.value),className:"w-full rounded-lg border border-border bg-bg px-3 py-2.5 text-sm text-text outline-none transition-colors focus:border-accent min-h-[44px]",children:[S.map(o=>e.jsxs("option",{value:o.id,disabled:!o.available,children:[o.name,o.id===n?" (active)":"",o.available?"":" — unavailable"]},o.id)),S.length===0&&e.jsx("option",{disabled:!0,children:"No models for this provider"})]}),e.jsx("button",{onClick:C,disabled:!$,className:"rounded-lg bg-accent px-4 py-2.5 text-sm font-medium text-white transition-colors hover:bg-accent/80 disabled:opacity-50 min-h-[44px] w-full sm:w-auto active:scale-[0.98]",children:"Switch"})]})]}),e.jsxs("div",{className:"flex items-center gap-2 rounded-lg border border-border bg-bg px-3 py-2.5",children:[e.jsx("div",{className:"h-2 w-2 rounded-full bg-success animate-pulse flex-shrink-0"}),e.jsx("span",{className:"text-xs text-text-muted",children:"Active:"}),e.jsx("span",{className:"text-xs text-text-secondary font-mono overflow-x-auto scrollbar-thin",children:n||"None"})]})]})}function mt(){var X,Y,J;const[r,f]=a.useState(null),[p,C]=a.useState([]),[n,h]=a.useState(!0),[x,j]=a.useState(!1),[b,S]=a.useState(""),[U,$]=a.useState(null),[y,o]=a.useState(null),[i,m]=a.useState(!1),[l,k]=a.useState(""),[V,E]=a.useState("andrew"),[w,W]=a.useState("f5-tts"),[oe,q]=a.useState("http://localhost:5006"),[ne,T]=a.useState(["andrew"]),[We,qe]=a.useState(null),[Ke,ze]=a.useState(!1),[Ge,Qe]=a.useState(""),A=[{id:"f5-tts",name:"F5-TTS",desc:"Voice cloning with MLX (Apple Silicon)",defaultUrl:"http://localhost:5006",defaultVoices:["andrew"]}],[Xe,ie]=a.useState(null),[le,Ye]=a.useState(!1),[de,Je]=a.useState(""),[K,R]=a.useState([]),[z,G]=a.useState(!1),[v,xe]=a.useState(null),[L,me]=a.useState(null),[O,Q]=a.useState(!1),P=t=>{var s;return((s=t==null?void 0:t.agent)==null?void 0:s.model)??(t==null?void 0:t.model)??""};a.useEffect(()=>{(async()=>{try{const[s,c]=await Promise.all([se(),Ne()]);f(s),C(c),S(P(s));const d=(s==null?void 0:s.voice)??{};m(d.enabled??!1),k(d.livekitUrl??""),E(d.ttsVoice??"andrew"),W(d.ttsEngine??"f5-tts"),q(d.ttsUrl??"http://localhost:5006")}catch(s){const c=s instanceof Error?s.message:"Failed to load config";$(c),u("error",c)}finally{h(!1)}})()},[]),a.useEffect(()=>{(async()=>{var t;try{const s=await _("/api/voice/voices");if(s.ok){const c=await s.json();(t=c.voices)!=null&&t.length&&T(c.voices)}}catch{}})()},[]);const D=async()=>{Q(!0);try{const[t,s]=await Promise.allSettled([_("/api/voice/health").then(c=>c.json()),_("/api/voice/status").then(c=>c.json())]);t.status==="fulfilled"&&xe(t.value),s.status==="fulfilled"&&(me(s.value),s.value.livekitUrl&&!l&&k(s.value.livekitUrl))}catch{}Q(!1)};a.useEffect(()=>{n||D()},[n]),a.useEffect(()=>{i&&ye().then(t=>{var s;ie({installed:t.installed,running:t.running,voices:t.voices}),R(t.voices.map(c=>({name:c,hasTranscript:!1,sizeBytes:0}))),(s=t.voices)!=null&&s.length&&T(["andrew",...t.voices])}).catch(()=>{})},[i]);const ue=async()=>{const t=document.createElement("input");t.type="file",t.accept="audio/wav,audio/mp3,audio/mpeg,audio/flac,.wav,.mp3,.flac",t.onchange=async()=>{var g;const s=(g=t.files)==null?void 0:g[0];if(!s)return;const c=prompt('Name this voice (e.g., "robin", "jarvis"):',s.name.replace(/\.[^.]+$/,""));if(!c)return;const d=prompt("(Optional) Transcript of the audio — improves cloning quality:","")||"";G(!0);try{const N=await s.arrayBuffer(),I=btoa(String.fromCharCode(...new Uint8Array(N))),M=await Ee(c,I,d),ve=M!=null&&M.duration?` Duration: ${M.duration}s,`:"";u("success",`Voice "${c}" uploaded!${ve} preprocessed and normalized.`);const Z=await ae();R(Z.voices||[]),T(["default",...Z.voices.map(je=>je.name)]),E(c)}catch(N){u("error",N instanceof Error?N.message:"Failed to upload voice")}finally{G(!1)}},t.click()},pe=async t=>{try{u("success",`Generating preview for "${t}"...`);const s=["Hello, how can I help you today?","I am ready to assist you with anything you need.","Good morning. It is a pleasure to be of service."],c=s[Math.floor(Math.random()*s.length)],d=await Te(t,c),g=new Blob([d],{type:"audio/wav"}),N=URL.createObjectURL(g),I=new Audio(N);I.onended=()=>URL.revokeObjectURL(N),I.play()}catch(s){u("error",s instanceof Error?s.message:"Failed to preview voice")}},he=async t=>{if(confirm(`Delete voice "${t}"?`))try{await Le(t);const s=await ae();R(s.voices||[]),T(["andrew",...s.voices.map(c=>c.name)]),V===t&&E("default"),u("success",`Voice "${t}" deleted`)}catch(s){u("error",s instanceof Error?s.message:"Failed to delete voice")}},u=(t,s)=>{o({type:t,message:s}),setTimeout(()=>o(null),3e3)},be=async()=>{if(!(!b||b===P(r??{})))try{const t=p.find(c=>c.id===b);await Ce(b,t==null?void 0:t.provider),Ve("model_switched",{model:b,provider:t==null?void 0:t.provider});const s=await se();f(s),S(P(s)),u("success",`Switched to ${b}`)}catch(t){u("error",t instanceof Error?t.message:"Failed to switch model")}},ge=async()=>{var t,s,c,d;j(!0);try{const g=await Ue({voice:{enabled:i,livekitUrl:l,ttsVoice:V,ttsEngine:w,ttsUrl:oe||"http://localhost:5005",sttUrl:((t=r==null?void 0:r.voice)==null?void 0:t.sttUrl)??"http://localhost:48421",livekitApiKey:((s=r==null?void 0:r.voice)==null?void 0:s.livekitApiKey)??"",livekitApiSecret:((c=r==null?void 0:r.voice)==null?void 0:c.livekitApiSecret)??"",agentUrl:((d=r==null?void 0:r.voice)==null?void 0:d.agentUrl)??""}});f(g),u("success","Settings saved"),i&&D()}catch(g){u("error",g instanceof Error?g.message:"Failed to save settings")}finally{j(!1)}};if(n)return e.jsx("div",{className:"space-y-4",children:Array.from({length:3}).map((t,s)=>e.jsx("div",{className:"h-32 animate-pulse rounded-xl border border-border bg-bg-secondary"},s))});if(U)return e.jsxs("div",{className:"space-y-4",children:[e.jsx(Ae,{title:"Settings",breadcrumbs:[{label:"Admin",href:"/overview"},{label:"Settings"},{label:"Settings"}]}),e.jsxs("div",{className:"rounded-xl border border-error/50 bg-bg-secondary p-6",children:[e.jsxs("div",{className:"flex items-center gap-2 text-error",children:[e.jsx(ee,{className:"h-5 w-5"}),e.jsx("p",{className:"text-sm font-medium",children:"Failed to load settings"})]}),e.jsx("p",{className:"mt-2 text-sm text-text-secondary",children:U}),e.jsx("button",{onClick:()=>window.location.reload(),className:"mt-4 rounded-lg bg-bg-tertiary px-4 py-2 text-sm text-text hover:bg-border transition-colors",children:"Retry"})]})]});const fe=r?P(r):"";return e.jsxs("div",{className:"space-y-4 md:space-y-6",children:[e.jsx("h2",{className:"text-base md:text-lg font-semibold text-text",children:"Settings"}),e.jsx("div",{className:"rounded-lg border border-border bg-bg-secondary/50 px-3 py-2.5",children:e.jsx(_e,{})}),y&&e.jsxs("div",{className:`flex items-center gap-2 rounded-lg border px-3 md:px-4 py-2.5 md:py-2 text-[11px] md:text-sm ${y.type==="success"?"border-success/50 text-success":"border-error/50 text-error"}`,children:[y.type==="success"?e.jsx(Pe,{className:"h-4 w-4"}):e.jsx(ee,{className:"h-4 w-4"}),y.message]}),e.jsxs("div",{className:"rounded-xl border border-border bg-bg-secondary p-3 md:p-6",children:[e.jsx("h3",{className:"mb-3 md:mb-4 text-[11px] md:text-sm font-medium text-text-secondary",children:"Model"}),e.jsx(He,{models:p,selectedModel:b,onSelect:S,onSwitch:be,currentModel:fe})]}),e.jsxs("div",{className:"rounded-xl border border-border bg-bg-secondary p-3 md:p-6",children:[e.jsxs("div",{className:"mb-3 md:mb-4 flex items-center justify-between flex-wrap gap-2",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(B,{className:"h-4 w-4 text-accent-hover"}),e.jsx("h3",{className:"text-sm font-medium text-text-secondary",children:"Voice"}),e.jsx("span",{className:"rounded-full bg-accent/20 px-2 py-0.5 text-[9px] font-medium text-purple-light",children:((X=A.find(t=>t.id===w))==null?void 0:X.name)||w})]}),e.jsxs("button",{onClick:D,disabled:O,className:"flex items-center gap-1.5 rounded-md px-2 py-1 text-[10px] text-text-muted hover:bg-bg-tertiary hover:text-text-secondary transition-colors",children:[e.jsx(Ie,{className:`h-3 w-3 ${O?"animate-spin":""}`}),O?"Scanning...":"Scan Services"]})]}),e.jsxs("div",{className:"space-y-4",children:[v&&e.jsxs("div",{className:"rounded-lg border border-bg-tertiary bg-bg p-3",children:[e.jsx("p",{className:"mb-2 text-[10px] font-medium uppercase tracking-wider text-text-muted",children:"Service Discovery"}),e.jsx("div",{className:"grid grid-cols-2 gap-2",children:[{label:"LiveKit Server",ok:v.livekit},{label:"Voice Agent",ok:v.agent},{label:"STT",ok:v.stt},{label:`TTS (${((Y=A.find(t=>t.id===w))==null?void 0:Y.name)||"TTS"})`,ok:v.tts}].map(({label:t,ok:s})=>e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(Be,{ok:s}),e.jsx("span",{className:`text-xs ${s?"text-text-secondary":"text-text-muted"}`,children:t}),s&&e.jsx("span",{className:"text-[9px] text-success",children:"Online"})]},t))}),(L==null?void 0:L.available)!==void 0&&e.jsx("div",{className:"mt-2 flex items-center gap-2 border-t border-bg-tertiary pt-2",children:L.available?e.jsxs(e.Fragment,{children:[e.jsx(we,{className:"h-3.5 w-3.5 text-success"}),e.jsx("span",{className:"text-xs text-success",children:"Voice system ready"})]}):e.jsxs(e.Fragment,{children:[e.jsx(Me,{className:"h-3.5 w-3.5 text-text-muted"}),e.jsx("span",{className:"text-xs text-text-muted",children:L.reason||"Voice not available"})]})})]}),e.jsxs("label",{className:"flex items-center gap-3",children:[e.jsx("input",{type:"checkbox",checked:i,onChange:t=>m(t.target.checked),className:"h-4 w-4 rounded border-border accent-accent"}),e.jsx("span",{className:"text-sm text-text",children:"Enable Voice Chat"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"mb-2 block text-xs text-text-muted",children:"TTS Engine"}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-2",children:A.map(t=>e.jsxs("button",{type:"button",onClick:()=>{W(t.id),q(t.defaultUrl),E(t.defaultVoices[0]||"default"),T(t.defaultVoices)},className:`rounded-lg border p-3 text-left transition-all min-h-[64px] active:scale-[0.98] sm:min-h-[56px] ${w===t.id?"border-accent bg-accent/10":"border-border hover:border-border-light"}`,children:[e.jsx("div",{className:"text-xs font-medium text-text",children:t.name}),e.jsx("div",{className:"mt-0.5 text-[10px] text-text-muted",children:t.desc})]},t.id))}),e.jsx("div",{className:"mt-3 rounded-xl border border-border bg-bg-secondary p-4 space-y-4",children:le?e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(te,{className:"h-4 w-4 text-accent2 animate-spin"}),e.jsx("span",{className:"text-sm font-medium text-text",children:"Installing F5-TTS..."})]}),e.jsx("div",{className:"rounded-lg bg-bg border border-bg-tertiary p-3",children:e.jsx("p",{className:"text-xs text-text-secondary font-mono break-all",children:de})})]}):e.jsxs("div",{className:"space-y-3",children:[e.jsx("div",{className:"flex items-center justify-between",children:e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:"w-2 h-2 rounded-full bg-success shadow-[0_0_6px_rgba(34,197,94,0.4)]"}),e.jsx("span",{className:"text-sm text-text",children:"F5-TTS Running"})]})}),e.jsxs("div",{className:"rounded-lg border border-bg-tertiary bg-bg p-3 space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("p",{className:"text-xs font-medium text-text-secondary",children:"Cloned Voices"}),e.jsxs("button",{onClick:ue,disabled:z,className:"flex items-center gap-1.5 rounded-lg px-3 py-1.5 text-xs font-medium text-accent2 border border-border hover:border-accent2/50 hover:bg-accent2/10 transition-colors disabled:opacity-50",children:[z?e.jsx(te,{className:"h-3 w-3 animate-spin"}):e.jsx(Fe,{className:"h-3 w-3 rotate-180"}),"Upload Voice"]})]}),e.jsx("p",{className:"text-[10px] text-text-muted leading-relaxed",children:"Upload 5-10 seconds of clear speech. No background noise or music. Adding a transcript significantly improves quality."}),K.length>0?e.jsx("div",{className:"space-y-1.5",children:K.map(t=>e.jsxs("div",{className:"flex items-center justify-between rounded-lg border border-bg-tertiary px-3 py-2",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(B,{className:"h-3.5 w-3.5 text-accent2"}),e.jsx("span",{className:"text-sm text-text capitalize",children:t.name}),e.jsxs("span",{className:"text-[9px] text-text-muted",children:[(t.sizeBytes/1024).toFixed(0),"KB"]}),t.hasTranscript&&e.jsx("span",{className:"rounded bg-success/15 px-1 py-0.5 text-[8px] text-success",children:"transcript"})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("button",{onClick:()=>pe(t.name),className:"text-text-muted hover:text-accent2 transition-colors",title:"Preview voice",children:e.jsx($e,{className:"h-3.5 w-3.5"})}),e.jsx("button",{onClick:()=>he(t.name),className:"text-text-muted hover:text-error transition-colors",title:"Delete voice",children:e.jsx("svg",{className:"h-3.5 w-3.5",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,children:e.jsx("path",{d:"M3 6h18M19 6v14a2 2 0 01-2 2H7a2 2 0 01-2-2V6m3 0V4a2 2 0 012-2h4a2 2 0 012 2v2"})})})]})]},t.name))}):e.jsx("p",{className:"text-xs text-text-muted",children:"No cloned voices yet. Upload a 5-10 second WAV reference to clone any voice."})]})]})})]}),e.jsxs("div",{children:[e.jsxs("label",{className:"mb-1 flex items-center gap-2 text-xs text-text-muted",children:["LiveKit URL",(v==null?void 0:v.livekit)&&e.jsx("span",{className:"rounded bg-success/15 px-1.5 py-0.5 text-[9px] font-medium text-success",children:"Connected"})]}),e.jsx("input",{value:l,onChange:t=>k(t.target.value),placeholder:"ws://localhost:7880",className:"w-full rounded-lg border border-border bg-bg px-3 py-2 text-sm text-text outline-none focus:border-accent"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"mb-2 block text-xs text-text-muted",children:"Voice"}),e.jsx("div",{className:"grid grid-cols-4 gap-2",children:ne.map(t=>e.jsx("button",{type:"button",onClick:()=>E(t),className:`rounded-lg border px-3 py-2 text-sm transition-all capitalize ${V===t?"border-accent bg-accent/10 text-text":"border-border text-text-secondary hover:border-border-light hover:text-text"}`,children:t},t))}),e.jsx("p",{className:"mt-2 text-xs text-text-muted",children:"F5-TTS voice cloning via MLX. Upload a 5-10 second reference audio to clone any voice."})]}),V&&e.jsxs("div",{className:"flex items-center gap-2 rounded-lg border border-border bg-bg px-3 py-2",children:[e.jsx(B,{className:"h-3.5 w-3.5 text-accent-hover"}),e.jsx("span",{className:"text-xs text-text-muted",children:"Selected:"}),e.jsx("span",{className:"text-xs font-mono text-text-secondary",children:V}),e.jsx("span",{className:"ml-auto rounded bg-accent/15 px-1.5 py-0.5 text-[9px] font-medium text-purple-light",children:((J=A.find(t=>t.id===w))==null?void 0:J.name)||w})]})]})]}),e.jsxs("button",{onClick:ge,disabled:x,className:"flex items-center gap-2 rounded-lg bg-accent px-4 py-2 text-sm font-medium text-white transition-colors hover:bg-accent/80 disabled:opacity-50",children:[e.jsx(Re,{className:"h-4 w-4"}),x?"Saving...":"Save Settings"]})]})}export{mt as default};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/SettingsPanel-Cp8decIS.js","assets/index-DczEfArU.js","assets/index-DmgXt1oB.css","assets/Input-C7lzcGqx.js","assets/clsx-B-dksMZM.js","assets/PageHeader-CPfyiZIM.js","assets/chevron-right-DhAaVOkv.js","assets/Tooltip-BGe4ZrLD.js","assets/circle-check-big-CrrpTfnZ.js","assets/mic-DwEnBcFd.js","assets/refresh-cw-DyPWslHB.js","assets/wifi-off-DVwDeeLz.js","assets/download-DzgUP-io.js","assets/play-7ImYx-M6.js","assets/save-Bl0vY0Ur.js","assets/SecurityPanel-BcnpsElV.js","assets/AuditPanel-TdDAyJUQ.js","assets/clipboard-list-GcIgVrYh.js","assets/funnel-BkW9zcis.js","assets/AutonomyPanel-B6EIpuFt.js","assets/rotate-ccw-C7z7lzst.js","assets/radio-DN9FsrLZ.js","assets/bot-DFsTWhzD.js","assets/server-DvPKxeOK.js","assets/network-BjQmrmO8.js","assets/message-square-C9bK5TAD.js","assets/TitanCanvas-RVuBEoV1.js","assets/chevron-up-DhONR6eV.js","assets/plus-LIrhsu2s.js","assets/file-text-C-9as3zm.js","assets/terminal-DD6OAIa2.js","assets/book-open-DvAaokKW.js","assets/pencil-CygyIvE1.js","assets/search-DLl1kVch.js","assets/send-BqZ0Qzz-.js","assets/flask-conical-BJnD20AK.js","assets/clock-D5MlrzQb.js","assets/archive-96Jj-QYz.js","assets/test-tube-BoC1tTKm.js","assets/VoiceOverlay-CvZcewVV.js","assets/volume-2-vQvjPYVu.js","assets/folder-BXotS0h-.js","assets/check-4bqUIREX.js","assets/shield-check-DMM8OpD5.js","assets/external-link--90_rW_r.js","assets/TitanCanvas-BfitWg9R.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{r as s,j as e,_ as i}from"./index-DczEfArU.js";import{c as o}from"./clsx-B-dksMZM.js";const r=s.lazy(()=>i(()=>import("./SettingsPanel-Cp8decIS.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]))),n=s.lazy(()=>i(()=>import("./SecurityPanel-BcnpsElV.js"),__vite__mapDeps([15,1,2,5,6]))),d=s.lazy(()=>i(()=>import("./AuditPanel-TdDAyJUQ.js"),__vite__mapDeps([16,1,2,17,10,18]))),c=s.lazy(()=>i(()=>import("./AutonomyPanel-B6EIpuFt.js"),__vite__mapDeps([19,1,2,14,8,10,20,21,22,23,24,13,25,26,27,28,29,30,31,32,33,34,9,35,36,37,38,39,6,40,41,42,43,44,11,45]))),x=[{id:"general",label:"General"},{id:"autonomy",label:"Autonomy"},{id:"security",label:"Security"},{id:"audit",label:"Audit Log"}];function _(){const[t,a]=s.useState("general");return e.jsxs("div",{className:"flex flex-col h-full",children:[e.jsxs("div",{className:"shrink-0 px-5 pt-4 pb-0",children:[e.jsx("h1",{className:"text-sm font-semibold text-text mb-3",children:"Settings"}),e.jsx("div",{className:"flex items-center gap-0.5 border-b border-border/50",children:x.map(l=>e.jsxs("button",{onClick:()=>a(l.id),className:o("px-3 py-2 text-xs font-medium transition-colors relative",t===l.id?"text-accent":"text-text-muted hover:text-text-secondary"),children:[l.label,t===l.id&&e.jsx("div",{className:"absolute bottom-0 left-1 right-1 h-[2px] bg-accent rounded-full"})]},l.id))})]}),e.jsx("div",{className:"flex-1 min-h-0 overflow-auto p-5",children:e.jsxs(s.Suspense,{fallback:e.jsx("div",{className:"skeleton-shimmer h-40 rounded-lg"}),children:[t==="general"&&e.jsx(r,{}),t==="autonomy"&&e.jsx(c,{}),t==="security"&&e.jsx(n,{}),t==="audit"&&e.jsx(d,{})]})})]})}export{_ as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{j as r}from"./index-
|
|
1
|
+
import{j as r}from"./index-DczEfArU.js";import{c as n}from"./clsx-B-dksMZM.js";const s={card:"h-28 rounded-xl border border-border",row:"h-12 rounded-lg",text:"h-4 rounded",metric:"h-24 rounded-xl border border-border"};function i({variant:e="card",count:o=1,className:d}){return r.jsx(r.Fragment,{children:Array.from({length:o},(a,t)=>r.jsx("div",{className:n("skeleton-shimmer",s[e],d)},t))})}export{i as S};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{c as j,r as s,ag as T,b as p,j as t}from"./index-
|
|
1
|
+
import{c as j,r as s,ag as T,b as p,j as t}from"./index-DczEfArU.js";import{P as I}from"./PageHeader-CPfyiZIM.js";import{S as $}from"./search-DLl1kVch.js";import{T as E}from"./trash-2-Co50XYSn.js";import{D as P}from"./download-DzgUP-io.js";import"./chevron-right-DhAaVOkv.js";/**
|
|
2
2
|
* @license lucide-react v0.513.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{r as i,b as n,j as e}from"./index-
|
|
1
|
+
import{r as i,b as n,j as e}from"./index-DczEfArU.js";import"./Input-C7lzcGqx.js";import{H as X}from"./Tooltip-BGe4ZrLD.js";import"./clsx-B-dksMZM.js";const p={purpose:"var(--soma-purpose)",hunger:"var(--soma-hunger)",curiosity:"var(--soma-curiosity)",safety:"var(--soma-safety)",social:"var(--soma-social)",rest:"var(--soma-rest)"},a={bgBase:"var(--theme-bg-base, var(--color-bg, #09090b))",bgGrain:"var(--theme-bg-grain, var(--color-bg-secondary, #18181b))",surface:"color-mix(in srgb, var(--theme-bg-grain, var(--color-bg-secondary, #18181b)) 88%, transparent)",surfaceSoft:"color-mix(in srgb, var(--theme-bg-grain, var(--color-bg-tertiary, #27272a)) 64%, transparent)",surfaceFaint:"color-mix(in srgb, var(--theme-bg-grain, var(--color-bg-tertiary, #27272a)) 42%, transparent)",border:"color-mix(in srgb, var(--theme-metal-dark, var(--color-border, #3f3f46)) 68%, transparent)",borderSoft:"color-mix(in srgb, var(--theme-metal-dark, var(--color-border, #3f3f46)) 42%, transparent)",metal:"var(--theme-metal, var(--color-border-light, #52525b))",ink:"var(--theme-paper-fg, var(--color-text, #fafafa))",inkSoft:"color-mix(in srgb, var(--theme-paper-fg, var(--color-text-secondary, #a1a1aa)) 72%, transparent)",paperFg:"var(--theme-paper-fg, var(--color-text-secondary, #a1a1aa))",accent:"var(--theme-accent, var(--color-accent, #6366f1))",warning:"var(--color-warning, #f59e0b)",success:"var(--color-success, #22c55e)",error:"var(--color-error, #ef4444)"},T={background:a.bgBase,color:a.ink},P={background:a.surface,border:`1px solid ${a.borderSoft}`,color:a.ink},$={color:a.ink},F={color:a.paperFg},Y={background:a.surfaceFaint,borderColor:a.borderSoft},Z={...P,borderRadius:10},ee={background:a.surfaceSoft,color:a.inkSoft},se={background:a.surface,borderColor:a.border,color:a.ink},x={borderColor:a.borderSoft};function ie(){var D,E;const[d,b]=i.useState(null),[C,I]=i.useState([]),[f,L]=i.useState([]),[j,M]=i.useState([]),[y,z]=i.useState(!1),[v,S]=i.useState(null),[m,_]=i.useState(null),[R,B]=i.useState(!1),[h,O]=i.useState(null),[A,k]=i.useState(null),l=i.useCallback((s,t="error")=>{O({message:s,type:t}),setTimeout(()=>O(null),4e3)},[]),c=i.useCallback(async()=>{try{const s=await n("/api/soma/state");if(s.ok){const t=await s.json();b(t),k(null)}else throw new Error(`${s.status} ${s.statusText}`)}catch(s){try{const t=await n("/api/watch/snapshot");if(t.ok){const o=await t.json();b({enabled:!0,timestamp:o.timestamp,drives:o.drives||[],totalPressure:o.totalPressure||0,dominantDrives:o.dominantDrives||[],message:"Showing live watch snapshot because Soma state is unavailable."}),k("using watch snapshot")}else throw new Error(`${t.status} ${t.statusText}`)}catch{b({enabled:!1,message:`Soma state is unavailable: ${s.message}`}),k(s.message)}}try{const s=await n("/api/soma/history?hours=24");if(s.ok){const t=await s.json();t.enabled&&I(t.history)}}catch{}try{const s=await n("/api/command-post/approvals?status=pending");if(s.ok){const t=await s.json();L(t.filter(o=>o.type==="soma_proposal"))}}catch{}try{const s=await n("/api/soma/advisories?limit=10");if(s.ok){const t=await s.json();M(t.advisories||[])}}catch{}},[]),W=i.useCallback(async()=>{z(!0);try{const s=await n("/api/soma/gift",{method:"POST",body:JSON.stringify({force:!0}),headers:{"Content-Type":"application/json"}});if(s.ok){const t=await s.json();l(t.message||"Soma is thinking about your gift…","success")}else l("Soma gift request failed.","error")}catch(s){l(s.message||"Gift request failed.","error")}finally{z(!1)}},[l]);i.useEffect(()=>{c();const s=setInterval(c,15e3),t=()=>c();return window.addEventListener("titan:soma:changed",t),()=>{clearInterval(s),window.removeEventListener("titan:soma:changed",t)}},[c]);const H=async s=>{try{const t=await n(`/api/command-post/approvals/${s}/approve`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({decidedBy:"board"})});if(!t.ok)throw new Error(`${t.status} ${t.statusText}`);c()}catch(t){l(`Approve failed: ${t.message}`)}},q=async s=>{try{const t=await n(`/api/command-post/approvals/${s}/reject`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({decidedBy:"board"})});if(!t.ok)throw new Error(`${t.status} ${t.statusText}`);c()}catch(t){l(`Reject failed: ${t.message}`)}},G=async()=>{if(!(!v||m===null)){B(!0);try{const s=await n("/api/soma/setpoints",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({[v]:m})});if(!s.ok)throw new Error(`${s.status} ${s.statusText}`);_(null),c()}catch(s){l(`Setpoint update failed: ${s.message}`)}B(!1)}},J=async(s,t)=>{try{const o=await n("/api/soma/weights",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({[s]:t})});if(!o.ok)throw new Error(`${o.status} ${o.statusText}`);c()}catch(o){l(`Weight update failed: ${o.message}`)}},V=async(s,t)=>{try{const o=await n(`/api/soma/drives/${s}/disable`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({disabled:t})});if(!o.ok)throw new Error(`${o.status} ${o.statusText}`);c()}catch(o){l(`Drive toggle failed: ${o.message}`)}};if(!d)return e.jsx("div",{className:"soma-page",style:T,children:e.jsxs("div",{className:"soma-page__content",children:[e.jsx("div",{className:"soma-page__title",style:$,children:"TITAN-Soma"}),e.jsx("div",{className:"soma-page__subtitle",style:F,children:"Loading organism state…"})]})});if(!d.enabled)return e.jsx("div",{className:"soma-page",style:T,children:e.jsxs("div",{className:"soma-page__content",style:{maxWidth:640},children:[e.jsx("div",{className:"soma-page__title",style:$,children:"TITAN-Soma"}),e.jsx("div",{className:"soma-page__subtitle",style:F,children:"Homeostatic digital organism"}),e.jsxs("div",{style:{marginTop:32,padding:24,...P,borderRadius:12},children:[e.jsx("div",{style:{fontSize:14,color:a.ink,marginBottom:12},children:d.message||"Soma is not enabled on this gateway."}),e.jsxs("div",{style:{fontSize:12,color:a.inkSoft,lineHeight:1.7},children:["To turn on the organism layer, edit ",e.jsx("code",{style:{background:a.surfaceSoft,padding:"2px 6px",borderRadius:4},children:"~/.titan/titan.json"})," and add:",e.jsx("pre",{style:{marginTop:12,padding:12,background:a.bgGrain,borderRadius:6,color:a.ink,fontSize:11},children:`{
|
|
2
2
|
"organism": {
|
|
3
3
|
"enabled": true
|
|
4
4
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{j as t}from"./index-
|
|
1
|
+
import{j as t}from"./index-DczEfArU.js";function r({title:m,value:d,icon:s,trend:e,subtitle:x}){return t.jsxs("div",{className:"rounded-xl border border-border bg-bg-secondary p-3 md:p-4 min-h-[100px]",children:[s&&t.jsx("div",{className:"mb-1.5 md:mb-2 text-text-muted",children:s}),t.jsx("p",{className:"text-[11px] md:text-sm text-text-secondary",children:m}),t.jsxs("div",{className:"mt-1 flex items-baseline gap-2",children:[t.jsx("span",{className:"text-xl md:text-2xl font-semibold text-text",children:d}),e&&t.jsx("span",{className:e==="up"?"text-xs md:text-sm text-success":"text-xs md:text-sm text-error",children:e==="up"?"↑":"↓"})]}),x&&t.jsx("p",{className:"mt-1 text-[10px] md:text-xs text-text-muted",children:x})]})}export{r as S};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{j as s}from"./index-
|
|
1
|
+
import{j as s}from"./index-DczEfArU.js";import{c as g}from"./clsx-B-dksMZM.js";const d={active:{bg:"bg-success/10",text:"text-success",dot:"bg-success"},running:{bg:"bg-success/10",text:"text-success",dot:"bg-success"},completed:{bg:"bg-success/10",text:"text-success",dot:"bg-success"},done:{bg:"bg-success/10",text:"text-success",dot:"bg-success"},succeeded:{bg:"bg-success/10",text:"text-success",dot:"bg-success"},enabled:{bg:"bg-success/10",text:"text-success",dot:"bg-success"},healthy:{bg:"bg-success/10",text:"text-success",dot:"bg-success"},approved:{bg:"bg-success/10",text:"text-success",dot:"bg-success"},connected:{bg:"bg-success/10",text:"text-success",dot:"bg-success"},in_progress:{bg:"bg-accent/10",text:"text-accent",dot:"bg-accent"},in_review:{bg:"bg-accent/10",text:"text-accent",dot:"bg-accent"},processing:{bg:"bg-accent/10",text:"text-accent",dot:"bg-accent"},training:{bg:"bg-accent/10",text:"text-accent",dot:"bg-accent"},deploying:{bg:"bg-accent/10",text:"text-accent",dot:"bg-accent"},warning:{bg:"bg-warning/10",text:"text-warning",dot:"bg-warning"},pending:{bg:"bg-warning/10",text:"text-warning",dot:"bg-warning"},queued:{bg:"bg-warning/10",text:"text-warning",dot:"bg-warning"},backlog:{bg:"bg-warning/10",text:"text-warning",dot:"bg-warning"},todo:{bg:"bg-warning/10",text:"text-warning",dot:"bg-warning"},error:{bg:"bg-error/10",text:"text-error",dot:"bg-error"},failed:{bg:"bg-error/10",text:"text-error",dot:"bg-error"},critical:{bg:"bg-error/10",text:"text-error",dot:"bg-error"},rejected:{bg:"bg-error/10",text:"text-error",dot:"bg-error"},blocked:{bg:"bg-error/10",text:"text-error",dot:"bg-error"},idle:{bg:"bg-text-muted/10",text:"text-text-muted",dot:"bg-text-muted"},disabled:{bg:"bg-text-muted/10",text:"text-text-muted",dot:"bg-text-muted"},stopped:{bg:"bg-text-muted/10",text:"text-text-muted",dot:"bg-text-muted"},paused:{bg:"bg-text-muted/10",text:"text-text-muted",dot:"bg-text-muted"},cancelled:{bg:"bg-text-muted/10",text:"text-text-muted",dot:"bg-text-muted"},unknown:{bg:"bg-text-muted/10",text:"text-text-muted",dot:"bg-text-muted"}},o={bg:"bg-text-muted/10",text:"text-text-muted",dot:"bg-text-muted"};function u(t){return d[t.toLowerCase().replace(/[- ]/g,"_")]??o}function m({status:t,variant:r="pill",size:c="sm",label:n,className:x}){const e=u(t),b=n??t.replace(/_/g," ");return r==="dot"?s.jsxs("span",{className:g("inline-flex items-center gap-1.5",x),children:[s.jsx("span",{className:g("rounded-full",e.dot,c==="sm"?"h-1.5 w-1.5":"h-2 w-2")}),s.jsx("span",{className:g(e.text,c==="sm"?"text-xs":"text-sm"),children:b})]}):s.jsx("span",{className:g("inline-flex items-center rounded-full font-medium capitalize",e.bg,e.text,c==="sm"?"px-2 py-0.5 text-xs":"px-2.5 py-1 text-xs",x),children:b})}export{m as S};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{j as t}from"./index-
|
|
1
|
+
import{j as t}from"./index-DczEfArU.js";import{c as r}from"./clsx-B-dksMZM.js";function i({tabs:n,activeTab:o,onChange:s,className:c}){return t.jsx("div",{className:r("flex gap-1 border-b border-border",c),children:n.map(e=>t.jsxs("button",{onClick:()=>s(e.id),className:r("flex items-center gap-1.5 px-3 py-2 text-sm font-medium transition-colors border-b-2 -mb-px",o===e.id?"border-accent text-accent":"border-transparent text-text-muted hover:text-text-secondary"),children:[e.icon,e.label,e.count!==void 0&&t.jsx("span",{className:r("ml-1 rounded-full px-1.5 py-0.5 text-[10px] font-medium",o===e.id?"bg-accent/15 text-accent":"bg-bg-tertiary text-text-muted"),children:e.count})]},e.id))})}export{i as T};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as t,bB as d,j as e,U as n,bC as o}from"./index-
|
|
1
|
+
import{r as t,bB as d,j as e,U as n,bC as o}from"./index-DczEfArU.js";import{P as x}from"./PageHeader-CPfyiZIM.js";import{R as f}from"./refresh-cw-DyPWslHB.js";import{T as h}from"./trash-2-Co50XYSn.js";import"./chevron-right-DhAaVOkv.js";function v(){const[l,c]=t.useState([]),[r,i]=t.useState(!0),a=t.useCallback(async()=>{i(!0);try{const s=await d();c(s.teams||[])}catch{}i(!1)},[]);t.useEffect(()=>{a()},[a]);const m=async s=>{if(confirm("Delete this team?"))try{await o(s),await a()}catch{}};return e.jsxs("div",{className:"space-y-4",children:[e.jsx(x,{title:"Team Hub",breadcrumbs:[{label:"Admin",href:"/overview"},{label:"Security"},{label:"Teams"}]}),e.jsx("div",{className:"flex gap-2",children:e.jsxs("button",{onClick:a,disabled:r,className:"flex items-center gap-2 px-3 py-2 rounded-lg bg-[#27272a] text-[#a1a1aa] text-sm font-medium hover:bg-[#3f3f46] disabled:opacity-50",children:[e.jsx(f,{className:`w-4 h-4 ${r?"animate-spin":""}`})," Refresh"]})}),e.jsx("div",{className:"space-y-2",children:l.map(s=>e.jsxs("div",{className:"flex items-center justify-between p-3 rounded-lg bg-[#0a0a0f] border border-[#27272a]",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(n,{className:"w-4 h-4 text-[#6366f1]"}),e.jsxs("div",{children:[e.jsx("div",{className:"text-sm text-[#e4e4e7]",children:s.name}),e.jsxs("div",{className:"text-xs text-[#52525b]",children:[s.members.length," members • ",s.description]})]})]}),e.jsx("button",{onClick:()=>m(s.id),className:"p-1.5 rounded-md bg-[#27272a] text-[#a1a1aa] hover:bg-[#3f3f46] hover:text-red-400",children:e.jsx(h,{className:"w-3.5 h-3.5"})})]},s.id))})]})}export{v as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as o,j as e,A as G,Z as S,C as B,B as x,h as T,bq as I,b6 as V,br as $,bs as q,bt as F,bu as U}from"./index-
|
|
1
|
+
import{r as o,j as e,A as G,Z as S,C as B,B as x,h as T,bq as I,b6 as V,br as $,bs as q,bt as F,bu as U}from"./index-DczEfArU.js";import{S as l}from"./StatCard-Bt-57DK2.js";import{C as W}from"./clock-D5MlrzQb.js";import{G as Z}from"./git-branch-D7pbvkyu.js";import{C as O}from"./chart-column-BWW8khga.js";import{S as _}from"./server-DvPKxeOK.js";function Y(){var m,u,h,g,j,p,v;const[s,C]=o.useState(null),[i,w]=o.useState(null),[a,M]=o.useState(null),[R,A]=o.useState(0),[L,P]=o.useState(0),[n,k]=o.useState(null),[D,E]=o.useState(!0);return o.useEffect(()=>{const t=async()=>{try{const[c,d,f,N,y,b]=await Promise.allSettled([I(),V(1),$(),q(100),F(100),U()]);c.status==="fulfilled"&&C(c.value),d.status==="fulfilled"&&w(d.value.stats),f.status==="fulfilled"&&M(f.value),N.status==="fulfilled"&&A((N.value.alerts||[]).length),y.status==="fulfilled"&&P((y.value.violations||[]).length),b.status==="fulfilled"&&k(b.value)}catch{}E(!1)};t();const r=setInterval(t,15e3);return()=>clearInterval(r)},[]),D?e.jsx("div",{className:"grid grid-cols-2 gap-4 lg:grid-cols-4",children:Array.from({length:8}).map((t,r)=>e.jsx("div",{className:"h-28 animate-pulse rounded-xl border border-border bg-bg-secondary"},r))}):e.jsxs("div",{className:"space-y-6",children:[e.jsx("h2",{className:"text-lg font-semibold text-text",children:"Telemetry & Monitoring"}),e.jsxs("div",{className:"grid grid-cols-2 gap-3 lg:grid-cols-4",children:[e.jsx(l,{title:"Total Requests",value:((m=s==null?void 0:s.totalRequests)==null?void 0:m.toLocaleString())??"0",icon:e.jsx(G,{className:"h-5 w-5"})}),e.jsx(l,{title:"Avg Latency",value:s!=null&&s.avgLatencyMs?`${Math.round(s.avgLatencyMs)}ms`:"—",icon:e.jsx(W,{className:"h-5 w-5"})}),e.jsx(l,{title:"Error Rate",value:(s==null?void 0:s.errorRate)!==void 0?`${(s.errorRate*100).toFixed(1)}%`:"0%",icon:e.jsx(S,{className:"h-5 w-5"})}),e.jsx(l,{title:"Total Tokens",value:(()=>{const t=s==null?void 0:s.totalTokens;return typeof t=="number"?t.toLocaleString():t&&typeof t=="object"?(t.total??(t.prompt??0)+(t.completion??0)).toLocaleString():"0"})(),icon:e.jsx(B,{className:"h-5 w-5"})})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-3 lg:grid-cols-4",children:[e.jsx(l,{title:"Traces",value:((u=i==null?void 0:i.totalTraces)==null?void 0:u.toString())??"0",icon:e.jsx(Z,{className:"h-5 w-5"})}),e.jsx(l,{title:"Avg Rounds/Task",value:((h=i==null?void 0:i.avgRounds)==null?void 0:h.toFixed(1))??"—",icon:e.jsx(O,{className:"h-5 w-5"})}),e.jsx(l,{title:"Soul Tasks",value:((g=a==null?void 0:a.totalTasks)==null?void 0:g.toString())??"0",icon:e.jsx(x,{className:"h-5 w-5"})}),e.jsx(l,{title:"Confidence",value:a!=null&&a.avgConfidence?`${Math.round(a.avgConfidence*100)}%`:"—",icon:e.jsx(x,{className:"h-5 w-5"})})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-3 lg:grid-cols-4",children:[e.jsx(l,{title:"Alerts",value:R.toString(),icon:e.jsx(T,{className:"h-5 w-5"})}),e.jsx(l,{title:"Guardrail Violations",value:L.toString(),icon:e.jsx(T,{className:"h-5 w-5"})}),e.jsx(l,{title:"Total Errors",value:((j=s==null?void 0:s.totalErrors)==null?void 0:j.toString())??"0",icon:e.jsx(S,{className:"h-5 w-5"})}),e.jsx(l,{title:"Learned Patterns",value:((v=(p=a==null?void 0:a.patterns)==null?void 0:p.length)==null?void 0:v.toString())??"0",icon:e.jsx(x,{className:"h-5 w-5"})})]}),n&&e.jsxs("div",{className:"rounded-xl border border-border bg-bg-secondary p-4",children:[e.jsxs("h3",{className:"text-sm font-medium text-text-secondary mb-3 flex items-center gap-2",children:[e.jsx(_,{className:"h-4 w-4"}),"System Profile"]}),e.jsxs("div",{className:"grid grid-cols-2 lg:grid-cols-4 gap-3 text-xs",children:[e.jsxs("div",{children:[e.jsx("span",{className:"text-text-muted",children:"OS"})," ",e.jsxs("span",{className:"text-text-secondary ml-1",children:[n.os," ",n.arch]})]}),e.jsxs("div",{children:[e.jsx("span",{className:"text-text-muted",children:"CPU"})," ",e.jsxs("span",{className:"text-text-secondary ml-1",children:[n.cpuCores,"c — ",n.cpuModel.split("@")[0].trim()]})]}),e.jsxs("div",{children:[e.jsx("span",{className:"text-text-muted",children:"RAM"})," ",e.jsxs("span",{className:"text-text-secondary ml-1",children:[Math.round(n.ramTotalMB/1024),"GB"]})]}),e.jsxs("div",{children:[e.jsx("span",{className:"text-text-muted",children:"GPU"})," ",e.jsx("span",{className:"text-text-secondary ml-1",children:n.gpuName})]}),e.jsxs("div",{children:[e.jsx("span",{className:"text-text-muted",children:"Node"})," ",e.jsx("span",{className:"text-text-secondary ml-1",children:n.nodeVersion})]}),e.jsxs("div",{children:[e.jsx("span",{className:"text-text-muted",children:"Install"})," ",e.jsx("span",{className:"text-text-secondary ml-1",children:n.installMethod})]}),e.jsxs("div",{children:[e.jsx("span",{className:"text-text-muted",children:"Version"})," ",e.jsx("span",{className:"text-text-secondary ml-1",children:n.version})]}),e.jsxs("div",{children:[e.jsx("span",{className:"text-text-muted",children:"ID"})," ",e.jsx("span",{className:"text-text-secondary ml-1 font-mono",children:n.installId.slice(0,8)})]})]})]}),(s==null?void 0:s.topTools)&&s.topTools.length>0&&e.jsxs("div",{children:[e.jsx("h3",{className:"text-sm font-medium text-text-secondary mb-3",children:"Top Tools"}),e.jsx("div",{className:"space-y-2",children:s.topTools.map((t,r)=>{const c=s.topTools[0].count,d=c>0?t.count/c*100:0;return e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("span",{className:"text-xs text-text-secondary w-24 truncate font-mono",children:t.tool}),e.jsx("div",{className:"flex-1 h-2 rounded-full bg-bg-tertiary overflow-hidden",children:e.jsx("div",{className:"h-full rounded-full bg-accent/60",style:{width:`${d}%`}})}),e.jsx("span",{className:"text-xs text-text-muted w-10 text-right",children:t.count})]},r)})})]}),(a==null?void 0:a.patterns)&&a.patterns.length>0&&e.jsxs("div",{children:[e.jsx("h3",{className:"text-sm font-medium text-text-secondary mb-3",children:"Learned Task Patterns"}),e.jsx("div",{className:"grid grid-cols-1 gap-2 lg:grid-cols-2",children:a.patterns.slice(0,8).map((t,r)=>e.jsxs("div",{className:"flex items-center justify-between px-3 py-2 rounded-lg bg-bg-secondary border border-border text-xs",children:[e.jsx("span",{className:"text-text-secondary",children:t.taskType}),e.jsxs("div",{className:"flex items-center gap-3 text-text-muted",children:[e.jsx("span",{className:"font-mono",children:t.bestStrategy}),e.jsxs("span",{children:[t.avgRounds.toFixed(1)," rounds"]}),e.jsxs("span",{className:t.successRate>=.7?"text-success":"text-warning",children:[Math.round(t.successRate*100),"%"]})]})]},r))})]})]})}export{Y as default};
|