titan-agent 5.4.2 → 5.5.6
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/README.md +1 -1
- package/dist/agent/agent.js +9 -5
- package/dist/agent/agent.js.map +1 -1
- package/dist/agent/agentLoop.js +7 -3
- package/dist/agent/agentLoop.js.map +1 -1
- package/dist/agent/checkpoint.js +2 -2
- package/dist/agent/checkpoint.js.map +1 -1
- package/dist/agent/commandPost.js +3 -3
- package/dist/agent/commandPost.js.map +1 -1
- package/dist/agent/goalProposer.js +2 -2
- package/dist/agent/goalProposer.js.map +1 -1
- package/dist/agent/goals.js +3 -3
- package/dist/agent/goals.js.map +1 -1
- package/dist/agent/peerAdvise.js +1 -1
- package/dist/agent/peerAdvise.js.map +1 -1
- package/dist/agent/planner.js +4 -4
- package/dist/agent/planner.js.map +1 -1
- package/dist/agent/userProfile.js +2 -2
- package/dist/agent/userProfile.js.map +1 -1
- package/dist/cli/doctor.js +33 -0
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/onboard.js +4 -4
- package/dist/cli/onboard.js.map +1 -1
- package/dist/config/config.js +3 -3
- package/dist/config/config.js.map +1 -1
- package/dist/config/schema.js +8 -1
- package/dist/config/schema.js.map +1 -1
- package/dist/gateway/routes/adminRouter.js +500 -0
- package/dist/gateway/routes/adminRouter.js.map +1 -0
- package/dist/gateway/routes/agents.js +231 -0
- package/dist/gateway/routes/agents.js.map +1 -0
- package/dist/gateway/routes/agentsRouter.js +32 -0
- package/dist/gateway/routes/agentsRouter.js.map +1 -0
- package/dist/gateway/routes/checkpoints.js +41 -0
- package/dist/gateway/routes/checkpoints.js.map +1 -0
- package/dist/gateway/routes/commandPost.js +755 -0
- package/dist/gateway/routes/commandPost.js.map +1 -0
- package/dist/gateway/routes/companies.js +166 -0
- package/dist/gateway/routes/companies.js.map +1 -0
- package/dist/gateway/routes/files.js +295 -0
- package/dist/gateway/routes/files.js.map +1 -0
- package/dist/gateway/routes/hardwareRouter.js +151 -0
- package/dist/gateway/routes/hardwareRouter.js.map +1 -0
- package/dist/gateway/routes/mcpRouter.js +88 -0
- package/dist/gateway/routes/mcpRouter.js.map +1 -0
- package/dist/gateway/routes/mesh.js +464 -0
- package/dist/gateway/routes/mesh.js.map +1 -0
- package/dist/gateway/routes/metricsRouter.js +131 -0
- package/dist/gateway/routes/metricsRouter.js.map +1 -0
- package/dist/gateway/routes/organism.js +82 -0
- package/dist/gateway/routes/organism.js.map +1 -0
- package/dist/gateway/routes/paperclip.js +101 -0
- package/dist/gateway/routes/paperclip.js.map +1 -0
- package/dist/gateway/routes/sessions.js +227 -0
- package/dist/gateway/routes/sessions.js.map +1 -0
- package/dist/gateway/routes/skills.js +295 -0
- package/dist/gateway/routes/skills.js.map +1 -0
- package/dist/gateway/routes/socialRouter.js +145 -0
- package/dist/gateway/routes/socialRouter.js.map +1 -0
- package/dist/gateway/routes/systemRouter.js +220 -0
- package/dist/gateway/routes/systemRouter.js.map +1 -0
- package/dist/gateway/routes/teamsRecipes.js +297 -0
- package/dist/gateway/routes/teamsRecipes.js.map +1 -0
- package/dist/gateway/routes/tests.js +401 -0
- package/dist/gateway/routes/tests.js.map +1 -0
- package/dist/gateway/routes/traces.js +33 -0
- package/dist/gateway/routes/traces.js.map +1 -0
- package/dist/gateway/routes/voiceRouter.js +770 -0
- package/dist/gateway/routes/voiceRouter.js.map +1 -0
- package/dist/gateway/routes/watchRouter.js +131 -0
- package/dist/gateway/routes/watchRouter.js.map +1 -0
- package/dist/gateway/server.js +1179 -7379
- package/dist/gateway/server.js.map +1 -1
- package/dist/mcp/registry.js +2 -2
- package/dist/mcp/registry.js.map +1 -1
- package/dist/memory/episodic.js +2 -2
- package/dist/memory/episodic.js.map +1 -1
- package/dist/memory/learning.js +3 -3
- package/dist/memory/learning.js.map +1 -1
- package/dist/memory/memory.js +3 -3
- package/dist/memory/memory.js.map +1 -1
- package/dist/organism/drives.js +2 -2
- package/dist/organism/drives.js.map +1 -1
- package/dist/providers/errorTaxonomy.js +13 -0
- package/dist/providers/errorTaxonomy.js.map +1 -1
- package/dist/providers/ollama.js +3 -1
- package/dist/providers/ollama.js.map +1 -1
- package/dist/providers/openai_compat.js +4 -3
- package/dist/providers/openai_compat.js.map +1 -1
- package/dist/providers/router.js +13 -0
- package/dist/providers/router.js.map +1 -1
- package/dist/safety/fixOscillation.js +15 -0
- package/dist/safety/fixOscillation.js.map +1 -1
- package/dist/safety/killSwitch.js +2 -2
- package/dist/safety/killSwitch.js.map +1 -1
- package/dist/safety/selfRepair.js +7 -3
- package/dist/safety/selfRepair.js.map +1 -1
- package/dist/skills/builtin/agent_debate.js +2 -2
- package/dist/skills/builtin/agent_debate.js.map +1 -1
- package/dist/skills/builtin/apply_patch.js +3 -3
- package/dist/skills/builtin/apply_patch.js.map +1 -1
- package/dist/skills/builtin/shell.js +2 -2
- package/dist/skills/builtin/shell.js.map +1 -1
- package/dist/skills/builtin/voice_control.js +49 -0
- package/dist/skills/builtin/voice_control.js.map +1 -0
- package/dist/skills/builtin/widget_gallery.js +6 -1
- package/dist/skills/builtin/widget_gallery.js.map +1 -1
- package/dist/skills/registry.js +15 -4
- package/dist/skills/registry.js.map +1 -1
- package/dist/storage/JsonStorage.js +4 -4
- package/dist/storage/JsonStorage.js.map +1 -1
- package/dist/utils/constants.js +1 -1
- package/dist/utils/constants.js.map +1 -1
- package/dist/utils/helpers.js +3 -1
- package/dist/utils/helpers.js.map +1 -1
- package/dist/utils/lifecycle.js +86 -0
- package/dist/utils/lifecycle.js.map +1 -0
- package/dist/voice/bridge.js +136 -0
- package/dist/voice/bridge.js.map +1 -0
- package/docs/COO-MASTER-PLAN-2026-05-02.md +474 -0
- package/docs/HANDOFF/2026-04-29.md +141 -0
- package/docs/HANDOFF-2026-04-30.md +144 -0
- package/docs/HANDOFF-2026-05-03.md +114 -0
- package/docs/adr/2026-04-29-widget-pipeline-traceability.md +49 -0
- package/docs/agent-memory/README.md +45 -0
- package/docs/agent-memory/commands.md +100 -0
- package/docs/agent-memory/context-tree.md +101 -0
- package/docs/agent-memory/current-state.md +54 -0
- package/docs/agent-memory/decisions.md +78 -0
- package/docs/agent-memory/known-issues.md +76 -0
- package/docs/agent-memory/reflections.md +52 -0
- package/docs/agent-memory/skills-candidates.md +80 -0
- package/docs/superpowers/plans/2026-04-29-comprehensive-audit.md +256 -0
- package/docs/superpowers/plans/2026-04-29-comprehensive-test-plan.md +396 -0
- package/docs/superpowers/plans/2026-04-29-fix-all-prs.md +251 -0
- package/docs/superpowers/plans/2026-04-29-gitnexus-gap-remediation.md +969 -0
- package/package.json +5 -2
- package/ui/dist/assets/{AuditPanel-CM6Wg9hO.js → AuditPanel-VzSndmDN.js} +2 -2
- package/ui/dist/assets/{AutonomyPanel-CESx3ANg.js → AutonomyPanel-BiFouzAV.js} +2 -2
- package/ui/dist/assets/AutopilotPanel-fjOfM668.js +1 -0
- package/ui/dist/assets/{AutoresearchPanel-DR47NqT5.js → AutoresearchPanel-CVCxzAH3.js} +2 -2
- package/ui/dist/assets/BackupPanel-CHVTG--q.js +1 -0
- package/ui/dist/assets/{BrowserPanel-C15x9bLn.js → BrowserPanel-D5mvMKFU.js} +2 -2
- package/ui/dist/assets/CPActivity-B12mt35m.js +1 -0
- package/ui/dist/assets/CPAgentDetail-DsdShc-1.js +1 -0
- package/ui/dist/assets/CPAgents-j_7C-oQV.js +1 -0
- package/ui/dist/assets/CPApprovals-BShKSX9X.js +1 -0
- package/ui/dist/assets/CPCosts-CKPlhBDs.js +1 -0
- package/ui/dist/assets/CPDashboard-11c0nkxK.js +1 -0
- package/ui/dist/assets/CPFiles-BhLEOnXy.js +1 -0
- package/ui/dist/assets/CPGoals-Bi3t1b2P.js +1 -0
- package/ui/dist/assets/CPInbox-Bbr7khp6.js +11 -0
- package/ui/dist/assets/CPIssueDetail-DSdgNK8r.js +1 -0
- package/ui/dist/assets/CPIssues-DDEVKhX6.js +1 -0
- package/ui/dist/assets/CPLayout-DgPOfyGv.js +17 -0
- package/ui/dist/assets/CPOrg-Df73RrRJ.js +8 -0
- package/ui/dist/assets/CPRuns-ByioAz8w.js +1 -0
- package/ui/dist/assets/{CPSocial-nb-j7sOE.js → CPSocial-Dlnr_w1X.js} +2 -2
- package/ui/dist/assets/ChannelsPanel-DQjQCTK5.js +1 -0
- package/ui/dist/assets/CheckpointsPanel-C4vKjlAJ.js +1 -0
- package/ui/dist/assets/CommandPostHub-C9pp5Giq.js +24 -0
- package/ui/dist/assets/CronPanel-C6bzUfrD.js +1 -0
- package/ui/dist/assets/DaemonPanel-BA5Tb_UO.js +1 -0
- package/ui/dist/assets/{DataTable-B2Ma8hfi.js → DataTable-CH7IYJJh.js} +1 -1
- package/ui/dist/assets/{EmptyState-CcKyk5Yn.js → EmptyState-jU6yNDnF.js} +1 -1
- package/ui/dist/assets/{EvalHarnessPanel-BqtMc1ZM.js → EvalHarnessPanel-DnYqredY.js} +2 -2
- package/ui/dist/assets/EvalPanel-ChO7CD1r.js +1 -0
- package/ui/dist/assets/{FilesPanel-3QKvrWPo.js → FilesPanel-CaUkv2is.js} +2 -2
- package/ui/dist/assets/FleetPanel-DC_5uj0N.js +1 -0
- package/ui/dist/assets/{HomelabPanel-DhrjTX9m.js → HomelabPanel-CE5PGRpL.js} +2 -2
- package/ui/dist/assets/InfraView-C-uSlvb9.js +2 -0
- package/ui/dist/assets/InlineEditableField-BMQjiE6-.js +1 -0
- package/ui/dist/assets/Input-Bu_b3qmY.js +1 -0
- package/ui/dist/assets/IntegrationsPanel-DsYpAq43.js +1 -0
- package/ui/dist/assets/IntelligenceView-DUdIO1K7.js +2 -0
- package/ui/dist/assets/LearningPanel-UpQZC-mA.js +1 -0
- package/ui/dist/assets/LogsPanel-ClXJ4fcr.js +1 -0
- package/ui/dist/assets/McpPanel-JKgtIERQ.js +1 -0
- package/ui/dist/assets/{MemoryGraphPanel-Bzvjmzvk.js → MemoryGraphPanel-Bo2OrvA6.js} +2 -2
- package/ui/dist/assets/MemoryWikiPanel-BqJ1AmYm.js +11 -0
- package/ui/dist/assets/{MeshPanel-C3LJSlht.js → MeshPanel-BJVGYvwk.js} +2 -2
- package/ui/dist/assets/Modal-CAAooiZU.js +1 -0
- package/ui/dist/assets/NvidiaPanel-BtCg3G4w.js +1 -0
- package/ui/dist/assets/OrganismPanel-DgrTTzcF.js +1 -0
- package/ui/dist/assets/OverviewPanel-rVav1Hox.js +1 -0
- package/ui/dist/assets/{PageHeader-BimceqQo.js → PageHeader-CnZtP8ek.js} +1 -1
- package/ui/dist/assets/PaperclipPanel-C-FKdhiF.js +1 -0
- package/ui/dist/assets/{PersonasPanel-L1j78p6H.js → PersonasPanel-BmlxokfB.js} +1 -1
- package/ui/dist/assets/RecipesPanel-BNKKChis.js +1 -0
- package/ui/dist/assets/SecurityPanel-I7JRHiNy.js +1 -0
- package/ui/dist/assets/SelfImprovePanel-u9h0Lt3p.js +1 -0
- package/ui/dist/assets/{SelfProposalsPanel-lNmiDThB.js → SelfProposalsPanel-DKl9iBjM.js} +2 -2
- package/ui/dist/assets/SessionsPanel-BhRiWI_g.js +1 -0
- package/ui/dist/assets/{SessionsTab-JQbltWww.js → SessionsTab-Bk08wyeY.js} +1 -1
- package/ui/dist/assets/SettingsPanel-haLfmG2k.js +1 -0
- package/ui/dist/assets/SettingsView--gi3fxI8.js +2 -0
- package/ui/dist/assets/{SkeletonLoader-atQtpcF5.js → SkeletonLoader-B5v09EF_.js} +1 -1
- package/ui/dist/assets/{SkillsPanel-DlFs2ih7.js → SkillsPanel-BlAHFLcQ.js} +1 -1
- package/ui/dist/assets/SomaView-CExtS3zw.js +5 -0
- package/ui/dist/assets/{StatCard-DciE_Iqc.js → StatCard-BIsyMybM.js} +1 -1
- package/ui/dist/assets/{StatusBadge-BtfSPoW2.js → StatusBadge-D5nU7El8.js} +1 -1
- package/ui/dist/assets/Tabs-BBYZrBI8.js +1 -0
- package/ui/dist/assets/TeamsPanel-LPXJg823.js +1 -0
- package/ui/dist/assets/TelemetryPanel-EqpRBmOI.js +1 -0
- package/ui/dist/assets/TitanCanvas-BCbWnLMd.js +985 -0
- package/ui/dist/assets/ToolsView-CeP0Zz-N.js +2 -0
- package/ui/dist/assets/{Tooltip-70UK0E2I.js → Tooltip-BSO2XVpF.js} +1 -1
- package/ui/dist/assets/TraceViewer-BKI7o5B0.js +1 -0
- package/ui/dist/assets/TrainingPanel-c-RhjdE1.js +1 -0
- package/ui/dist/assets/VoiceOverlay-D-gc58b0.js +27 -0
- package/ui/dist/assets/VramPanel-C6xc7zgd.js +1 -0
- package/ui/dist/assets/{WatchView-C-sGFpVy.js → WatchView-dqBVCVH0.js} +1 -1
- package/ui/dist/assets/WorkTab-CBoLNrTM.js +1 -0
- package/ui/dist/assets/{WorkflowsPanel-CvgQU1xI.js → WorkflowsPanel-BAnSTOYe.js} +2 -2
- package/ui/dist/assets/approvalHeadline-DB9SgR-9.js +1 -0
- package/ui/dist/assets/{arrow-left-DwqHtJiU.js → arrow-left-5chqas7J.js} +1 -1
- package/ui/dist/assets/briefcase-D4vLzudp.js +6 -0
- package/ui/dist/assets/{chart-column-BtNO6sRy.js → chart-column-CdFlBpoP.js} +1 -1
- package/ui/dist/assets/check-Bpm1IONe.js +6 -0
- package/ui/dist/assets/chevron-down-D7OLjvuD.js +6 -0
- package/ui/dist/assets/chevron-right-aQEw2mUW.js +6 -0
- package/ui/dist/assets/chevron-up-C5g6pEj8.js +6 -0
- package/ui/dist/assets/{circle-check-big-DZRE_MbN.js → circle-check-big-fPhEdP88.js} +1 -1
- package/ui/dist/assets/clock-CTsgP_Sn.js +6 -0
- package/ui/dist/assets/{dollar-sign-aVG3a5eL.js → dollar-sign-CudFVYFc.js} +1 -1
- package/ui/dist/assets/{download-BxiWJU4G.js → download-DZRxDn67.js} +1 -1
- package/ui/dist/assets/external-link-BZ0y_Ahx.js +6 -0
- package/ui/dist/assets/{eye-off-CkgfFYhm.js → eye-off-BmJF0YYx.js} +1 -1
- package/ui/dist/assets/folder-DA43TRCm.js +11 -0
- package/ui/dist/assets/{funnel-PkLdxKyC.js → funnel-J3mULzrz.js} +1 -1
- package/ui/dist/assets/{git-branch-BM-Gw95X.js → git-branch-oHibJqDq.js} +1 -1
- package/ui/dist/assets/{index-D0RJ8701.css → index-BR0vfkIi.css} +1 -1
- package/ui/dist/assets/{index-CahJbWSR.js → index-DzwowwSI.js} +20 -20
- package/ui/dist/assets/{layers-BuGf4FIJ.js → layers-DsyEyu7z.js} +1 -1
- package/ui/dist/assets/{legacy-CR6o4t-y.js → legacy-8ITl64sV.js} +1 -1
- package/ui/dist/assets/{lightbulb-n8gc_XAL.js → lightbulb-C54Ske-p.js} +1 -1
- package/ui/dist/assets/list-todo-Cnd4rdoK.js +6 -0
- package/ui/dist/assets/loader-circle-1YOBsoQp.js +6 -0
- package/ui/dist/assets/network-DbGDAdrn.js +6 -0
- package/ui/dist/assets/{pause-DCV52koX.js → pause-CYhO_uQo.js} +1 -1
- package/ui/dist/assets/{play-CcJ9BnCh.js → play-DVY9c5Ck.js} +1 -1
- package/ui/dist/assets/{plug-CfWBXfCl.js → plug-BcXjlPUL.js} +1 -1
- package/ui/dist/assets/plus-Csu2v9GN.js +6 -0
- package/ui/dist/assets/{proxy-CzZDfLmm.js → proxy-DxS2_9D7.js} +1 -1
- package/ui/dist/assets/rotate-ccw-Co-_W04j.js +6 -0
- package/ui/dist/assets/save-Btx-kpoW.js +6 -0
- package/ui/dist/assets/search-0hXTwEZR.js +6 -0
- package/ui/dist/assets/send-TEpapzQR.js +6 -0
- package/ui/dist/assets/shield-check-DjBJXZUr.js +6 -0
- package/ui/dist/assets/{square-DJpUhlxi.js → square-OweUvjP-.js} +1 -1
- package/ui/dist/assets/{target-DWcmM_9m.js → target-BRW80Xer.js} +1 -1
- package/ui/dist/assets/terminal-BtiqJ628.js +16 -0
- package/ui/dist/assets/{toggle-right-YusFQ69L.js → toggle-right-CKtSrl28.js} +1 -1
- package/ui/dist/assets/{trash-2-CK7yQ55V.js → trash-2-DgWrHVax.js} +1 -1
- package/ui/dist/assets/{trending-up-DGjFyubC.js → trending-up-MpIrE4j6.js} +1 -1
- package/ui/dist/assets/{trophy-uQv_NgDB.js → trophy-CECuZNhX.js} +1 -1
- package/ui/dist/assets/users-dZgv4ePG.js +16 -0
- package/ui/dist/assets/wrench-CDz3xYve.js +11 -0
- package/ui/dist/index.html +2 -2
- package/ui/dist/assets/AutopilotPanel-DtEet1hJ.js +0 -1
- package/ui/dist/assets/BackupPanel-BGP8p3l3.js +0 -1
- package/ui/dist/assets/CPAgents-DYUtPzSq.js +0 -1
- package/ui/dist/assets/CPDashboard-Bf0-SyCh.js +0 -6
- package/ui/dist/assets/CPFiles-CxgxjQcO.js +0 -1
- package/ui/dist/assets/CPGoals-BsmCMTvT.js +0 -1
- package/ui/dist/assets/CPInbox-tMSbmQ9H.js +0 -11
- package/ui/dist/assets/ChannelsPanel-DP5C2OKd.js +0 -1
- package/ui/dist/assets/CheckpointsPanel-DlranVLZ.js +0 -1
- package/ui/dist/assets/CommandPostHub-BgxIa4Ev.js +0 -29
- package/ui/dist/assets/CronPanel-LoT5yKwJ.js +0 -1
- package/ui/dist/assets/DaemonPanel-DBGMqaE_.js +0 -1
- package/ui/dist/assets/EvalPanel-Bc33j0pN.js +0 -1
- package/ui/dist/assets/FleetPanel-CSsXuQYj.js +0 -1
- package/ui/dist/assets/InfraView-CR6HyrL6.js +0 -2
- package/ui/dist/assets/InlineEditableField-CnvF-yFR.js +0 -1
- package/ui/dist/assets/Input-GTHp2Rkr.js +0 -1
- package/ui/dist/assets/IntegrationsPanel-CymCRE3T.js +0 -1
- package/ui/dist/assets/IntelligenceView-C1IHxJRC.js +0 -2
- package/ui/dist/assets/LearningPanel-DOCES3lH.js +0 -1
- package/ui/dist/assets/LogsPanel-BLnAqEaZ.js +0 -1
- package/ui/dist/assets/McpPanel-ChUzmr3z.js +0 -1
- package/ui/dist/assets/MemoryWikiPanel-Dwk3Aqwd.js +0 -11
- package/ui/dist/assets/NvidiaPanel-CeZK_-CV.js +0 -1
- package/ui/dist/assets/OrganismPanel-BB6YOiQV.js +0 -1
- package/ui/dist/assets/OverviewPanel-BmtBhQnv.js +0 -1
- package/ui/dist/assets/PaperclipPanel-C-brgwA3.js +0 -1
- package/ui/dist/assets/RecipesPanel-34lCfynJ.js +0 -1
- package/ui/dist/assets/SecurityPanel-CBTPWLj6.js +0 -1
- package/ui/dist/assets/SelfImprovePanel-BrPbFHhG.js +0 -1
- package/ui/dist/assets/SessionsPanel-DAEYIn83.js +0 -1
- package/ui/dist/assets/SettingsPanel-CzRROAYQ.js +0 -1
- package/ui/dist/assets/SettingsView-CN7ii2uw.js +0 -2
- package/ui/dist/assets/SomaView-Ba642Oqb.js +0 -5
- package/ui/dist/assets/TeamsPanel-DKQ5z2Qe.js +0 -1
- package/ui/dist/assets/TelemetryPanel-B6KAc55Q.js +0 -1
- package/ui/dist/assets/TitanCanvas-C-s0A-lv.js +0 -1092
- package/ui/dist/assets/ToolsView-Dei0KMP0.js +0 -2
- package/ui/dist/assets/TraceViewer-BniolyBx.js +0 -1
- package/ui/dist/assets/TrainingPanel-Bz4CTPGW.js +0 -1
- package/ui/dist/assets/VoiceOverlay-CmNCrLcd.js +0 -37
- package/ui/dist/assets/VramPanel-Xh_OtRDR.js +0 -1
- package/ui/dist/assets/WorkTab-BjLNmgIK.js +0 -1
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/SkillsPanel-DlFs2ih7.js","assets/index-CahJbWSR.js","assets/index-D0RJ8701.css","assets/PageHeader-BimceqQo.js","assets/VoiceOverlay-CmNCrLcd.js","assets/TitanCanvas-C-s0A-lv.js","assets/TitanCanvas-BfitWg9R.css","assets/trash-2-CK7yQ55V.js","assets/download-BxiWJU4G.js","assets/McpPanel-ChUzmr3z.js","assets/plug-CfWBXfCl.js","assets/IntegrationsPanel-CymCRE3T.js","assets/circle-check-big-DZRE_MbN.js","assets/eye-off-CkgfFYhm.js","assets/ChannelsPanel-DP5C2OKd.js","assets/MeshPanel-C3LJSlht.js","assets/DataTable-B2Ma8hfi.js","assets/EvalHarnessPanel-BqtMc1ZM.js","assets/layers-BuGf4FIJ.js","assets/trending-up-DGjFyubC.js","assets/play-CcJ9BnCh.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{r as l,j as e,n,_ as t}from"./index-CahJbWSR.js";const o=l.lazy(()=>t(()=>import("./SkillsPanel-DlFs2ih7.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8]))),r=l.lazy(()=>t(()=>import("./McpPanel-ChUzmr3z.js"),__vite__mapDeps([9,1,2,10,5,4,6,7]))),c=l.lazy(()=>t(()=>import("./IntegrationsPanel-CymCRE3T.js"),__vite__mapDeps([11,1,2,10,12,13,5,4,6]))),d=l.lazy(()=>t(()=>import("./ChannelsPanel-DP5C2OKd.js"),__vite__mapDeps([14,1,2,3,4,5,6,12,13]))),x=l.lazy(()=>t(()=>import("./MeshPanel-C3LJSlht.js"),__vite__mapDeps([15,1,2,16,5,4,6]))),m=l.lazy(()=>t(()=>import("./EvalHarnessPanel-BqtMc1ZM.js"),__vite__mapDeps([17,1,2,18,5,4,6,19,20,12]))),_=[{id:"skills",label:"Skills"},{id:"mcp",label:"MCP Servers"},{id:"integrations",label:"Integrations"},{id:"channels",label:"Channels"},{id:"mesh",label:"Mesh Network"},{id:"evals",label:"Eval Harness"}];function p(){const[s,i]=l.useState("skills");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:"Tools & Connections"}),e.jsx("div",{className:"flex items-center gap-0.5 border-b border-border/50",children:_.map(a=>e.jsxs("button",{onClick:()=>i(a.id),className:n("px-3 py-2 text-xs font-medium transition-colors relative",s===a.id?"text-accent":"text-text-muted hover:text-text-secondary"),children:[a.label,s===a.id&&e.jsx("div",{className:"absolute bottom-0 left-1 right-1 h-[2px] bg-accent rounded-full"})]},a.id))})]}),e.jsx("div",{className:"flex-1 min-h-0 overflow-auto p-5",children:e.jsxs(l.Suspense,{fallback:e.jsx("div",{className:"skeleton-shimmer h-40 rounded-lg"}),children:[s==="skills"&&e.jsx(o,{}),s==="mcp"&&e.jsx(r,{}),s==="integrations"&&e.jsx(c,{}),s==="channels"&&e.jsx(d,{}),s==="mesh"&&e.jsx(x,{}),s==="evals"&&e.jsx(m,{})]})})]})}export{p as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as d,j as e,A as f,h as j,T as y,f as T,p as E,bh as $}from"./index-CahJbWSR.js";import{T as I}from"./trending-up-DGjFyubC.js";import{W as w,C as z,a as L}from"./TitanCanvas-C-s0A-lv.js";import{G as v}from"./git-branch-BM-Gw95X.js";import{C as A}from"./chart-column-BtNO6sRy.js";import{A as F}from"./arrow-left-DwqHtJiU.js";import"./VoiceOverlay-CmNCrLcd.js";function R(c){const a=c.toLowerCase();return a.includes("rate limit")||a.includes("too many requests")||a.includes("429")?{category:"Rate Limit",severity:"rate_limit",icon:"⏱️"}:a.includes("timeout")||a.includes("etimedout")||a.includes("econnreset")?{category:"Timeout",severity:"timeout",icon:"⏳"}:a.includes("auth")||a.includes("unauthorized")||a.includes("403")||a.includes("401")?{category:"Auth / Permission",severity:"permanent",icon:"🔒"}:a.includes("not found")||a.includes("404")||a.includes("enoent")?{category:"Not Found",severity:"permanent",icon:"❓"}:a.includes("context")||a.includes("too long")||a.includes("max tokens")?{category:"Context Overflow",severity:"permanent",icon:"📄"}:a.includes("quota")||a.includes("insufficient")||a.includes("exceeded")?{category:"Quota Exceeded",severity:"permanent",icon:"💰"}:a.includes("network")||a.includes("econnrefused")||a.includes("dns")?{category:"Network",severity:"transient",icon:"🌐"}:a.includes("empty")||a.includes("no response")?{category:"Empty Response",severity:"transient",icon:"👻"}:a.includes("format")||a.includes("json")||a.includes("parse")?{category:"Format Error",severity:"transient",icon:"🔧"}:{category:"Unknown",severity:"unknown",icon:"❓"}}const D={transient:"text-warning bg-warning/10 border-warning/20",permanent:"text-error bg-error/10 border-error/20",timeout:"text-cyan bg-cyan/10 border-cyan/20",rate_limit:"text-orange-400 bg-orange-400/10 border-orange-400/20",unknown:"text-text-muted bg-bg-tertiary border-border"};function B({traces:c,stats:a}){const l=d.useMemo(()=>c.filter(s=>s.status==="failed"&&s.error),[c]),x=d.useMemo(()=>{const s=new Map;for(const r of l){if(!r.error)continue;const{category:o,severity:i,icon:u}=R(r.error),p=s.get(o);p?(p.count++,p.examples.length<3&&p.examples.push(r.error)):s.set(o,{count:1,severity:i,icon:u,examples:[r.error]})}return Array.from(s.entries()).sort((r,o)=>o[1].count-r[1].count)},[l]),h=d.useMemo(()=>{const s=new Map;for(const r of c)for(const o of r.toolCalls){const i=s.get(o.tool)||{success:0,fail:0};o.success?i.success++:i.fail++,s.set(o.tool,i)}return Array.from(s.entries()).map(([r,{success:o,fail:i}])=>{const u=o+i;return{tool:r,success:o,fail:i,total:u,rate:u>0?Math.round(i/u*100):0}}).sort((r,o)=>o.fail-r.fail)},[c]),m=c.length,n=m>0?Math.round(l.length/m*100):0;return e.jsxs("div",{className:"space-y-4",children:[e.jsx("div",{className:"grid grid-cols-2 sm:grid-cols-4 gap-3",children:[{icon:f,label:"Total",value:m,color:"text-accent"},{icon:j,label:"Failed",value:l.length,color:"text-error"},{icon:I,label:"Fail Rate",value:`${n}%`,color:n>20?"text-error":n>5?"text-warning":"text-success"},{icon:y,label:"Categories",value:x.length,color:"text-orange-400"}].map(s=>e.jsxs("div",{className:"bg-bg-secondary border border-border rounded-xl p-4",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[e.jsx(s.icon,{size:14,className:s.color}),e.jsx("span",{className:"text-[10px] text-text-muted uppercase tracking-wider",children:s.label})]}),e.jsx("div",{className:"text-2xl font-bold text-text",children:s.value})]},s.label))}),x.length>0&&e.jsxs("div",{className:"bg-bg-secondary border border-border rounded-xl overflow-hidden",children:[e.jsxs("div",{className:"flex items-center gap-2 px-4 py-2.5 border-b border-border",children:[e.jsx(y,{size:14,className:"text-error"}),e.jsx("span",{className:"text-xs font-medium text-text-secondary",children:"Hermes Error Taxonomy"})]}),e.jsx("div",{className:"divide-y divide-border",children:x.map(([s,r])=>e.jsxs("div",{className:"px-4 py-3",children:[e.jsxs("div",{className:"flex items-center justify-between mb-1",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-sm",children:r.icon}),e.jsx("span",{className:"text-[12px] font-medium text-text-secondary",children:s}),e.jsx("span",{className:`text-[9px] px-1.5 py-0.5 rounded border capitalize ${D[r.severity]}`,children:r.severity})]}),e.jsxs("span",{className:"text-[11px] text-text-muted",children:[r.count," occurrence",r.count===1?"":"s"]})]}),r.examples.length>0&&e.jsx("div",{className:"space-y-0.5 mt-1.5",children:r.examples.map((o,i)=>e.jsx("div",{className:"text-[10px] text-text-muted font-mono truncate pl-5",children:o},i))})]},s))})]}),h.length>0&&e.jsxs("div",{className:"bg-bg-secondary border border-border rounded-xl overflow-hidden",children:[e.jsxs("div",{className:"flex items-center gap-2 px-4 py-2.5 border-b border-border",children:[e.jsx(w,{size:14,className:"text-accent"}),e.jsx("span",{className:"text-xs font-medium text-text-secondary",children:"Tool Failure Rates"})]}),e.jsx("div",{className:"divide-y divide-border",children:h.slice(0,15).map(s=>{const r=s.total>0?Math.round(s.fail/s.total*100):0;return e.jsxs("div",{className:"px-4 py-2 flex items-center gap-3",children:[e.jsx("span",{className:"text-[11px] text-text-secondary font-mono w-32 truncate",children:s.tool}),e.jsx("div",{className:"flex-1 h-1.5 bg-bg rounded-full overflow-hidden",children:e.jsx("div",{className:`h-full rounded-full ${r>50?"bg-error":r>10?"bg-warning":"bg-success"}`,style:{width:`${r}%`}})}),e.jsxs("div",{className:"text-[10px] text-text-muted w-20 text-right tabular-nums",children:[s.fail,"/",s.total," (",r,"%)"]})]},s.tool)})})]}),x.length===0&&h.every(s=>s.fail===0)&&e.jsxs("div",{className:"flex flex-col items-center justify-center py-12 text-text-muted text-xs",children:[e.jsx(T,{size:24,className:"mb-2 text-success opacity-60"}),"No errors detected in recent traces"]})]})}function J(){const[c,a]=d.useState([]),[l,x]=d.useState(null),[h,m]=d.useState(!0),[n,s]=d.useState(null),[r,o]=d.useState(""),[i,u]=d.useState("all"),p=async()=>{try{const t=await E(100);a(t.traces||[]),x(t.stats||null)}catch{}m(!1)};d.useEffect(()=>{p();const t=setInterval(p,1e4);return()=>clearInterval(t)},[]);const N=d.useMemo(()=>{let t=c;if(i!=="all"&&(t=t.filter(g=>g.status===i)),r.trim()){const g=r.toLowerCase();t=t.filter(b=>b.message.toLowerCase().includes(g)||b.sessionId.toLowerCase().includes(g)||b.traceId.toLowerCase().includes(g)||b.toolCalls.some(S=>S.tool.toLowerCase().includes(g)))}return t},[c,i,r]),k=c.filter(t=>t.status==="failed"),M=(l==null?void 0:l.avgDurationMs)??0,C=(l==null?void 0:l.topTools)??[];return h?e.jsxs("div",{className:"space-y-3",children:[e.jsx("div",{className:"grid grid-cols-4 gap-3",children:[1,2,3,4].map(t=>e.jsx("div",{className:"h-20 rounded-xl bg-bg-secondary animate-pulse"},t))}),e.jsx("div",{className:"space-y-2",children:[1,2,3,4,5].map(t=>e.jsx("div",{className:"h-14 rounded-lg bg-bg-secondary animate-pulse"},t))})]}):n?e.jsx(q,{trace:n,onBack:()=>s(null)}):e.jsxs("div",{className:"space-y-4",children:[e.jsx("div",{className:"grid grid-cols-2 sm:grid-cols-4 gap-3",children:[{icon:v,label:"Traces",value:(l==null?void 0:l.totalTraces)??0,sub:"in memory",color:"text-accent"},{icon:f,label:"Running",value:(l==null?void 0:l.running)??0,sub:"active now",color:"text-cyan"},{icon:j,label:"Failed",value:k.length,sub:`${c.length>0?Math.round(k.length/c.length*100):0}% rate`,color:"text-error"},{icon:z,label:"Avg Duration",value:`${M}ms`,sub:`${(l==null?void 0:l.avgRounds)??0} avg rounds`,color:"text-warning"}].map(t=>e.jsxs("div",{className:"bg-bg-secondary border border-border rounded-xl p-4",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[e.jsx(t.icon,{size:14,className:t.color}),e.jsx("span",{className:"text-[10px] text-text-muted uppercase tracking-wider",children:t.label})]}),e.jsx("div",{className:"text-2xl font-bold text-text",children:t.value}),t.sub&&e.jsx("div",{className:"text-[11px] text-text-muted mt-1",children:t.sub})]},t.label))}),e.jsx(B,{traces:c,stats:l}),C.length>0&&e.jsxs("div",{className:"bg-bg-secondary border border-border rounded-xl p-4",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx(A,{size:14,className:"text-accent"}),e.jsx("span",{className:"text-xs font-medium text-text-secondary",children:"Top Tools"})]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:C.slice(0,8).map(t=>e.jsxs("span",{className:"text-[11px] px-2 py-1 rounded-full bg-bg border border-border text-text-secondary",children:[t.tool," ",e.jsxs("span",{className:"text-text-muted",children:["(",t.count,")"]})]},t.tool))})]}),e.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[e.jsxs("div",{className:"relative flex-1 min-w-[200px]",children:[e.jsx(L,{size:14,className:"absolute left-2.5 top-1/2 -translate-y-1/2 text-text-muted"}),e.jsx("input",{value:r,onChange:t=>o(t.target.value),placeholder:"Search traces, sessions, tools...",className:"w-full bg-bg-secondary border border-border rounded-lg pl-8 pr-3 py-2 text-[12px] text-text placeholder-text-muted focus:outline-none focus:border-accent"})]}),e.jsx("div",{className:"flex gap-1",children:["all","running","completed","failed"].map(t=>e.jsx("button",{onClick:()=>u(t),className:`px-2.5 py-1.5 text-[10px] rounded-lg capitalize transition-colors ${i===t?"bg-accent text-white":"bg-bg-secondary text-text-muted hover:text-text"}`,children:t},t))})]}),e.jsxs("div",{className:"bg-bg-secondary border border-border rounded-2xl overflow-hidden",children:[e.jsx("div",{className:"flex items-center justify-between px-4 py-2.5 border-b border-border",children:e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(v,{size:14,className:"text-accent"}),e.jsx("span",{className:"text-[13px] font-medium text-text-secondary",children:"Execution Traces"}),e.jsx("span",{className:"text-[10px] text-text-muted",children:N.length})]})}),e.jsx("div",{className:"divide-y divide-border max-h-[500px] overflow-y-auto",children:N.length===0?e.jsxs("div",{className:"flex flex-col items-center justify-center py-12 text-text-muted text-xs",children:[e.jsx(v,{size:24,className:"mb-2 opacity-40"}),c.length===0?"No traces captured yet":"No traces match your filters"]}):N.map(t=>e.jsxs("button",{onClick:()=>s(t),className:"w-full text-left px-4 py-3 hover:bg-bg-secondary/30 transition-colors",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[t.status==="running"?e.jsx(f,{size:14,className:"text-cyan animate-pulse shrink-0"}):t.status==="completed"?e.jsx(T,{size:14,className:"text-success shrink-0"}):e.jsx(j,{size:14,className:"text-error shrink-0"}),e.jsx("p",{className:"text-[12px] text-text-secondary truncate flex-1",children:t.message}),e.jsx("span",{className:"text-[10px] text-text-muted shrink-0 tabular-nums",children:t.totalMs?`${t.totalMs}ms`:"..."})]}),e.jsxs("div",{className:"flex gap-3 mt-1 text-[10px] text-text-muted ml-6",children:[e.jsxs("span",{children:[t.toolCalls.length," tools"]}),e.jsxs("span",{children:[t.rounds," rounds"]}),t.model&&e.jsx("span",{children:t.model.split("/").pop()}),t.error&&e.jsx("span",{className:"text-error truncate max-w-[200px]",children:t.error})]})]},t.traceId))})]})]})}function q({trace:c,onBack:a}){const[l,x]=d.useState(null),[h,m]=d.useState(!0);d.useEffect(()=>{let s=!0;return $(c.traceId).then(r=>{s&&x(r)}).catch(()=>{s&&x(c)}).finally(()=>{s&&m(!1)}),()=>{s=!1}},[c.traceId,c]);const n=l||c;return e.jsxs("div",{className:"space-y-4",children:[e.jsxs("button",{onClick:a,className:"flex items-center gap-1 text-[11px] text-text-muted hover:text-text transition-colors",children:[e.jsx(F,{size:12})," Back to traces"]}),e.jsxs("div",{className:"bg-bg-secondary border border-border rounded-xl p-4",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[n.status==="running"?e.jsx(f,{size:16,className:"text-cyan animate-pulse"}):n.status==="completed"?e.jsx(T,{size:16,className:"text-success"}):e.jsx(j,{size:16,className:"text-error"}),e.jsx("span",{className:`text-xs font-semibold capitalize ${n.status==="completed"?"text-success":n.status==="failed"?"text-error":"text-cyan"}`,children:n.status})]}),e.jsx("p",{className:"text-sm text-text mb-2",children:n.message}),e.jsxs("div",{className:"flex flex-wrap gap-3 text-[11px] text-text-muted",children:[e.jsxs("span",{children:["ID: ",e.jsx("span",{className:"font-mono text-text-secondary",children:n.traceId.slice(0,12)})]}),e.jsxs("span",{children:["Session: ",e.jsx("span",{className:"font-mono text-text-secondary",children:n.sessionId.slice(0,12)})]}),n.totalMs&&e.jsxs("span",{children:[n.totalMs,"ms"]}),e.jsxs("span",{children:[n.rounds," rounds"]}),n.model&&e.jsx("span",{children:n.model}),n.tokens&&e.jsxs("span",{children:[n.tokens.prompt," prompt / ",n.tokens.completion," completion"]})]})]}),n.spans.length>0&&e.jsxs("div",{className:"bg-bg-secondary border border-border rounded-xl p-4",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx(z,{size:14,className:"text-accent"}),e.jsx("span",{className:"text-xs font-medium text-text-secondary",children:"Timeline"})]}),e.jsx("div",{className:"space-y-2",children:n.spans.map((s,r)=>e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"w-16 text-[10px] text-text-muted text-right tabular-nums",children:s.durationMs!==void 0?`${s.durationMs}ms`:"..."}),e.jsx("div",{className:"w-1.5 h-1.5 rounded-full bg-accent shrink-0"}),e.jsx("span",{className:"text-[11px] text-text-secondary font-mono",children:s.name}),s.data&&Object.keys(s.data).length>0&&e.jsx("span",{className:"text-[10px] text-text-muted truncate max-w-[200px]",children:JSON.stringify(s.data).slice(0,60)})]},r))})]}),n.toolCalls.length>0&&e.jsxs("div",{className:"bg-bg-secondary border border-border rounded-xl p-4",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx(w,{size:14,className:"text-accent"}),e.jsx("span",{className:"text-xs font-medium text-text-secondary",children:"Tool Calls"})]}),e.jsx("div",{className:"space-y-2",children:n.toolCalls.map((s,r)=>e.jsxs("div",{className:"flex items-center gap-3 px-2.5 py-2 rounded-lg bg-bg border border-border",children:[e.jsx(w,{size:12,className:s.success?"text-success shrink-0":"text-error shrink-0"}),e.jsx("span",{className:"text-[11px] text-text-secondary font-mono",children:s.tool}),e.jsxs("span",{className:"text-[10px] text-text-muted",children:[s.durationMs,"ms"]}),e.jsxs("span",{className:"text-[10px] text-text-muted",children:["round ",s.round]}),!s.success&&e.jsx("span",{className:"text-[10px] text-error ml-auto",children:"failed"})]},r))})]}),n.error&&e.jsxs("div",{className:"bg-error/5 border border-error/20 rounded-xl p-4",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[e.jsx(y,{size:14,className:"text-error"}),e.jsx("span",{className:"text-xs font-semibold text-error",children:"Error"})]}),e.jsx("div",{className:"text-[11px] text-text-secondary font-mono whitespace-pre-wrap",children:n.error})]})]})}export{J as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as t,aK as o,aL as m,j as e}from"./index-CahJbWSR.js";import{P as g}from"./PageHeader-BimceqQo.js";import{R as b,e as p}from"./TitanCanvas-C-s0A-lv.js";import{D as f}from"./download-BxiWJU4G.js";import"./VoiceOverlay-CmNCrLcd.js";function w(){const[a,d]=t.useState(null),[n,c]=t.useState([]),[i,l]=t.useState(!0),r=t.useCallback(async()=>{l(!0);try{const[s,x]=await Promise.all([o(),m()]);d(s),c(x.runs||[])}catch{}l(!1)},[]);return t.useEffect(()=>{r()},[r]),e.jsxs("div",{className:"space-y-4",children:[e.jsx(g,{title:"Training Dashboard",breadcrumbs:[{label:"Admin",href:"/overview"},{label:"Intelligence"},{label:"Training"}]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsxs("button",{onClick:r,disabled:i,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(b,{className:`w-4 h-4 ${i?"animate-spin":""}`})," Refresh"]}),e.jsxs("a",{href:"/api/training/export",download:!0,className:"flex items-center gap-2 px-3 py-2 rounded-lg bg-[#27272a] text-[#a1a1aa] text-sm font-medium hover:bg-[#3f3f46]",children:[e.jsx(f,{className:"w-4 h-4"})," Export"]})]}),a&&e.jsxs("div",{className:"grid grid-cols-3 gap-3",children:[e.jsxs("div",{className:"p-3 rounded-lg bg-[#0a0a0f] border border-[#27272a]",children:[e.jsx("div",{className:"text-xs text-[#52525b]",children:"Entries"}),e.jsx("div",{className:"text-lg font-semibold text-[#e4e4e7]",children:a.entries})]}),e.jsxs("div",{className:"p-3 rounded-lg bg-[#0a0a0f] border border-[#27272a]",children:[e.jsx("div",{className:"text-xs text-[#52525b]",children:"Size (bytes)"}),e.jsx("div",{className:"text-lg font-semibold text-[#e4e4e7]",children:a.sizeBytes})]}),e.jsxs("div",{className:"p-3 rounded-lg bg-[#0a0a0f] border border-[#27272a]",children:[e.jsx("div",{className:"text-xs text-[#52525b]",children:"Last Capture"}),e.jsx("div",{className:"text-lg font-semibold text-[#e4e4e7]",children:a.lastCapture?new Date(a.lastCapture).toLocaleString():"—"})]})]}),e.jsx("div",{className:"space-y-2",children:n.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(p,{className:`w-4 h-4 ${s.status==="running"?"text-amber-400":s.status==="completed"?"text-emerald-400":"text-red-400"}`}),e.jsxs("div",{children:[e.jsxs("div",{className:"text-sm text-[#e4e4e7]",children:[s.type," — ",s.id.slice(0,8)]}),e.jsxs("div",{className:"text-xs text-[#52525b]",children:[s.examplesProcessed," examples • ",s.status]})]})]}),e.jsx("div",{className:"text-xs text-[#52525b]",children:new Date(s.startedAt).toLocaleDateString()})]},s.id))})]})}export{w as default};
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import{c as G,r as e,j as n,b as ue,k as $e,X as De,F as Pe}from"./index-CahJbWSR.js";/**
|
|
2
|
-
* @license lucide-react v0.513.0 - ISC
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the ISC license.
|
|
5
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
6
|
-
*/const Ue=[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]],Fe=G("chevron-down",Ue);/**
|
|
7
|
-
* @license lucide-react v0.513.0 - ISC
|
|
8
|
-
*
|
|
9
|
-
* This source code is licensed under the ISC license.
|
|
10
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
11
|
-
*/const Be=[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]],ze=G("chevron-right",Be);/**
|
|
12
|
-
* @license lucide-react v0.513.0 - ISC
|
|
13
|
-
*
|
|
14
|
-
* This source code is licensed under the ISC license.
|
|
15
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
16
|
-
*/const qe=[["line",{x1:"2",x2:"22",y1:"2",y2:"22",key:"a6p6uj"}],["path",{d:"M18.89 13.23A7.12 7.12 0 0 0 19 12v-2",key:"80xlxr"}],["path",{d:"M5 10v2a7 7 0 0 0 12 5",key:"p2k8kg"}],["path",{d:"M15 9.34V5a3 3 0 0 0-5.68-1.33",key:"1gzdoj"}],["path",{d:"M9 9v3a3 3 0 0 0 5.12 2.12",key:"r2i35w"}],["line",{x1:"12",x2:"12",y1:"19",y2:"22",key:"x3vr5v"}]],Je=G("mic-off",qe);/**
|
|
17
|
-
* @license lucide-react v0.513.0 - ISC
|
|
18
|
-
*
|
|
19
|
-
* This source code is licensed under the ISC license.
|
|
20
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
21
|
-
*/const He=[["path",{d:"M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3Z",key:"131961"}],["path",{d:"M19 10v2a7 7 0 0 1-14 0v-2",key:"1vc78b"}],["line",{x1:"12",x2:"12",y1:"19",y2:"22",key:"x3vr5v"}]],Xe=G("mic",He);/**
|
|
22
|
-
* @license lucide-react v0.513.0 - ISC
|
|
23
|
-
*
|
|
24
|
-
* This source code is licensed under the ISC license.
|
|
25
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
26
|
-
*/const Qe=[["path",{d:"M10.1 13.9a14 14 0 0 0 3.732 2.668 1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2 18 18 0 0 1-12.728-5.272",key:"1wngk7"}],["path",{d:"M22 2 2 22",key:"y4kqgn"}],["path",{d:"M4.76 13.582A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 .244.473",key:"10hv5p"}]],Ze=G("phone-off",Qe);/**
|
|
27
|
-
* @license lucide-react v0.513.0 - ISC
|
|
28
|
-
*
|
|
29
|
-
* This source code is licensed under the ISC license.
|
|
30
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
31
|
-
*/const Ge=[["path",{d:"M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z",key:"uqj9uw"}],["path",{d:"M16 9a5 5 0 0 1 0 6",key:"1q6k2b"}],["path",{d:"M19.364 18.364a9 9 0 0 0 0-12.728",key:"ijwkga"}]],We=G("volume-2",Ge);function Ye({messages:u=[],isListening:f=!1}){const i=e.useRef(null);return e.useEffect(()=>{i.current&&(i.current.scrollTop=i.current.scrollHeight)},[u.length]),n.jsxs("div",{ref:i,className:"w-full max-w-lg overflow-y-auto rounded-xl backdrop-blur",style:{maxHeight:300,backgroundColor:"rgba(24, 24, 27, 0.5)",padding:"1rem"},children:[u.length===0&&!f&&n.jsx("p",{className:"text-center text-sm text-text-muted",children:"Start speaking to begin the conversation"}),n.jsx("div",{className:"flex flex-col gap-2",children:u.map(s=>n.jsx("div",{className:`flex ${s.role==="user"?"justify-end":"justify-start"}`,children:n.jsx("div",{className:"max-w-[80%] rounded-lg px-3 py-2 text-sm",style:{backgroundColor:s.role==="user"?"var(--color-accent)":"var(--color-bg-tertiary)",color:"var(--color-text)"},children:s.text})},s.id))}),f&&n.jsxs("div",{className:"mt-3 flex items-center gap-2",children:[n.jsx("span",{className:"inline-block h-2 w-2 rounded-full",style:{backgroundColor:"var(--color-accent)",animation:"listeningPulse 1s ease-in-out infinite"}}),n.jsx("span",{className:"text-xs text-text-secondary",children:"Listening..."}),n.jsx("style",{children:`
|
|
32
|
-
@keyframes listeningPulse {
|
|
33
|
-
0%, 100% { opacity: 1; transform: scale(1); }
|
|
34
|
-
50% { opacity: 0.4; transform: scale(0.8); }
|
|
35
|
-
}
|
|
36
|
-
`})]})]})}const Ce={default:{name:"Default",description:"F5-TTS base voice",gradient:"radial-gradient(circle at 35% 35%, #c084fc, #a855f7, #7c3aed)",glow:"#a855f7"}},re=[{gradient:"radial-gradient(circle at 35% 35%, #93c5fd, #3b82f6, #1d4ed8)",glow:"#3b82f6"},{gradient:"radial-gradient(circle at 35% 35%, #fbbf24, #f59e0b, #b45309)",glow:"#f59e0b"},{gradient:"radial-gradient(circle at 35% 35%, #5eead4, #14b8a6, #0f766e)",glow:"#14b8a6"},{gradient:"radial-gradient(circle at 35% 35%, #fda4af, #fb7185, #e11d48)",glow:"#fb7185"},{gradient:"radial-gradient(circle at 35% 35%, #a5b4fc, #818cf8, #4f46e5)",glow:"#818cf8"},{gradient:"radial-gradient(circle at 35% 35%, #fdba74, #f97316, #c2410c)",glow:"#f97316"},{gradient:"radial-gradient(circle at 35% 35%, #86efac, #22c55e, #15803d)",glow:"#22c55e"},{gradient:"radial-gradient(circle at 35% 35%, #67e8f9, #22d3ee, #0891b2)",glow:"#22d3ee"}];function de(u){return u.map((f,i)=>{const s=Ce[f];if(s)return{id:f,...s};const j=re[i%re.length],E=f.charAt(0).toUpperCase()+f.slice(1);return{id:f,name:E,description:"Cloned voice",gradient:j.gradient,glow:j.glow}})}function le(u){const f=Ce[u];if(f)return{name:f.name,glow:f.glow};const i=re.findIndex((j,E)=>E===u.length%re.length),s=re[i>=0?i:0];return{name:u.charAt(0).toUpperCase()+u.slice(1),glow:s.glow}}function Ke({currentVoice:u,onSelect:f,onPreview:i}){const[s,j]=e.useState([]),[E,A]=e.useState(!0),[m,V]=e.useState(0),[x,B]=e.useState(!1),[I,R]=e.useState(0),M=e.useRef(0),_=e.useRef(null);e.useEffect(()=>{(async()=>{var l;A(!0);try{const y=await ue("/api/voice/voices");if(y.ok){const S=await y.json(),g=(l=S.voices)!=null&&l.length?S.voices:["default"],$=de(g);if(j($),u){const oe=$.findIndex(W=>W.id===u);oe>=0&&V(oe)}}else j(de(["default"]))}catch{j(de(["default"]))}finally{A(!1)}})()},[]);const p=s[m]||s[0],T=e.useCallback(l=>{V(Math.max(0,Math.min(s.length-1,l)))},[s.length]),L=e.useCallback(()=>T(m-1),[m,T]),N=e.useCallback(()=>T(m+1),[m,T]);e.useEffect(()=>{const l=y=>{y.key==="ArrowLeft"&&L(),y.key==="ArrowRight"&&N(),y.key==="Enter"&&f(s[m].id)};return window.addEventListener("keydown",l),()=>window.removeEventListener("keydown",l)},[m,L,N,f,s]);const z=l=>{B(!0),M.current=l.clientX,R(0)},O=l=>{x&&R(l.clientX-M.current)},b=()=>{x&&(B(!1),I>60?L():I<-60&&N(),R(0))};return E||s.length===0?n.jsxs("div",{className:"flex flex-col items-center justify-center h-full select-none",children:[n.jsx("div",{className:"w-8 h-8 border-2 border-accent border-t-transparent rounded-full animate-spin mb-4"}),n.jsx("p",{className:"text-sm text-text-muted",children:"Loading voices..."})]}):n.jsxs("div",{className:"flex flex-col items-center justify-center h-full select-none",children:[n.jsx("h2",{className:"text-xl font-semibold text-text mb-2",children:"Choose a voice"}),n.jsx("p",{className:"text-sm text-text-muted mb-10",children:s.length>1?`${s.length} cloned voices available`:"Swipe or use arrow keys"}),n.jsxs("div",{ref:_,className:"relative flex items-center justify-center w-full",style:{height:280,touchAction:"pan-y"},onPointerDown:z,onPointerMove:O,onPointerUp:b,onPointerLeave:b,children:[m>0&&n.jsx("button",{onClick:L,className:"absolute left-4 z-10 rounded-full p-2 text-text-muted hover:text-text hover:bg-bg-tertiary transition-colors",children:n.jsx($e,{size:28})}),n.jsx("div",{className:"relative",style:{width:220,height:220},children:s.map((l,y)=>{const S=y-m,g=y===m,$=x?I*.3:0;return n.jsxs("div",{className:"absolute inset-0 transition-all",style:{transitionDuration:x?"0ms":"400ms",transitionTimingFunction:"cubic-bezier(0.4, 0, 0.2, 1)",transform:`translateX(${S*260+$}px) scale(${g?1:.7})`,opacity:Math.abs(S)>1?0:g?1:.4,zIndex:g?10:1,pointerEvents:g?"auto":"none"},children:[n.jsx("div",{className:"absolute inset-0 rounded-full blur-2xl transition-opacity duration-500",style:{background:l.glow,opacity:g?.3:0,transform:"scale(1.2)"}}),n.jsx("div",{className:"w-full h-full rounded-full shadow-2xl",style:{background:l.gradient,boxShadow:g?`0 0 60px ${l.glow}40`:"none"}}),n.jsx("div",{className:"absolute rounded-full",style:{top:"12%",left:"18%",width:"35%",height:"35%",background:"radial-gradient(circle, rgba(255,255,255,0.4) 0%, transparent 70%)"}})]},l.id)})}),m<s.length-1&&n.jsx("button",{onClick:N,className:"absolute right-4 z-10 rounded-full p-2 text-text-muted hover:text-text hover:bg-bg-tertiary transition-colors",children:n.jsx(ze,{size:28})})]}),n.jsxs("div",{className:"mt-8 text-center",children:[n.jsx("h3",{className:"text-2xl font-bold text-text mb-1",children:p.name}),n.jsx("p",{className:"text-sm text-text-secondary",children:p.description})]}),i&&n.jsxs("button",{onClick:()=>i(p.id),className:"mt-4 flex items-center gap-2 rounded-full px-4 py-2 text-xs font-medium text-text-secondary hover:text-text hover:bg-bg-tertiary transition-colors",children:[n.jsx(We,{size:14}),"Preview"]}),n.jsx("div",{className:"flex items-center gap-2 mt-6",children:s.map((l,y)=>n.jsx("button",{onClick:()=>T(y),className:"rounded-full transition-all duration-300",style:{width:y===m?10:6,height:y===m?10:6,backgroundColor:y===m?p.glow:"var(--color-border)",boxShadow:y===m?`0 0 8px ${p.glow}80`:"none"}},l.id))}),n.jsxs("button",{onClick:()=>f(p.id),className:"mt-10 w-72 rounded-full py-3.5 text-base font-semibold transition-all duration-200",style:{background:`linear-gradient(135deg, ${p.glow}30, ${p.glow}15)`,border:`1px solid ${p.glow}40`,color:"var(--color-text)"},onMouseEnter:l=>{l.currentTarget.style.background=`linear-gradient(135deg, ${p.glow}50, ${p.glow}25)`,l.currentTarget.style.boxShadow=`0 0 20px ${p.glow}30`},onMouseLeave:l=>{l.currentTarget.style.background=`linear-gradient(135deg, ${p.glow}30, ${p.glow}15)`,l.currentTarget.style.boxShadow="none"},children:["Start with ",p.name]})]})}de(["default"]);const et="/ollama",tt="kimi-k2.6:cloud";function nt(u,f){const i=[];i.push({role:"system",content:f});for(const s of u)s.role==="framework"?i.push({role:"user",content:s.content}):i.push({role:s.role,content:s.content});return i}async function rt(u,f,i,s){var R,M,_,p,T,L,N,z,O;const j=(s==null?void 0:s.model)||tt,E=nt(u,f),A=await fetch(`${et}/api/chat`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:j,messages:E,stream:!0}),signal:s!=null&&s.signal?AbortSignal.any([s.signal,AbortSignal.timeout(12e4)]):AbortSignal.timeout(12e4)});if(!A.ok){const b=await A.text().catch(()=>A.statusText);throw new Error(`Ollama error ${A.status}: ${b}`)}if(!A.body)throw new Error("No response body from Ollama");const m=A.body.getReader(),V=new TextDecoder;let x="",B="",I="";try{for(;;){const{done:b,value:l}=await m.read();if(b)break;x+=V.decode(l,{stream:!0});const y=x.split(`
|
|
37
|
-
`);x=y.pop()||"";for(const S of y)if(S.trim())try{const g=JSON.parse(S);if((R=g.message)!=null&&R.thinking&&(I+=g.message.thinking,(M=i.onThinking)==null||M.call(i,g.message.thinking)),(_=g.message)!=null&&_.content&&(B+=g.message.content,i.onToken(g.message.content)),g.done){(p=i.onDone)==null||p.call(i,{totalDuration:g.total_duration||0,promptTokens:g.prompt_eval_count||0,evalTokens:g.eval_count||0});return}}catch{}}if(x+=V.decode(),x.trim())try{const b=JSON.parse(x.trim());if((T=b.message)!=null&&T.content&&i.onToken(b.message.content),(L=b.message)!=null&&L.thinking&&((N=i.onThinking)==null||N.call(i,b.message.thinking)),b.done){(z=i.onDone)==null||z.call(i,{totalDuration:b.total_duration||0,promptTokens:b.prompt_eval_count||0,evalTokens:b.eval_count||0});return}}catch{}(O=i.onDone)==null||O.call(i,{totalDuration:0,promptTokens:0,evalTokens:0})}finally{m.releaseLock()}}let ot=0;const ye=()=>`voice-msg-${Date.now()}-${++ot}`,je=u=>u.replace(/<(?:laugh|chuckle|sigh|cough|sniffle|groan|yawn|gasp)>/gi,"").replace(/\s{2,}/g," ").trim(),Ae=u=>u.replace(/```[\s\S]*?```/g,"").replace(/\*\*(.*?)\*\*/g,"$1").replace(/\*(.*?)\*/g,"$1").replace(/^#+\s+/gm,"").replace(/^[-*]\s+/gm,"").replace(/\n{2,}/g," ").trim(),Se=u=>u.replace(/(?:Let me |I'll |I will |I'm going to )(?:use|call|check|run|invoke|execute|try)(?: the)? \w[\w_]*(?: tool)?(?:\s+(?:to|for|and)\b[^.!?]*)?[.!]?\s*/gi,"").replace(/\b(?:Using|Calling|Running|Checking|Invoking|Executing) (?:the )?\w[\w_]*(?: tool)?(?:\s+(?:to|for)\b[^.!?]*)?[.!]?\s*/gi,"").replace(/\b\w[\w_]*(?:_\w+)+\b/g,"").replace(/\s{2,}/g," ").trim();function st({onClose:u}){const[f,i]=e.useState(!1),s=localStorage.getItem("titan-voice")||"",[j,E]=e.useState(s?"active":"picking"),[A,m]=e.useState(s),V=e.useRef(s),[x,B]=e.useState(!1),[I,R]=e.useState(!1),[M,_]=e.useState(!1),[p,T]=e.useState(!1),[L,N]=e.useState([]),[z,O]=e.useState(0),[b,l]=e.useState(""),[y,S]=e.useState(null),[g,$]=e.useState(!1),[oe,W]=e.useState([]),C=e.useRef(null),Y=e.useRef(null),we=e.useRef(null),se=e.useRef(null),U=e.useRef(null),q=e.useRef(""),ae=e.useRef(0);e.useRef(void 0);const J=e.useRef(null),D=e.useRef(null),F=e.useRef(null),K=e.useRef(null),H=e.useRef(null),ve=e.useRef(0),X=e.useRef(!1),fe=e.useRef(null);e.useRef(typeof navigator<"u"&&/iPad|iPhone|iPod/.test(navigator.userAgent));const ge=e.useCallback(t=>new Promise(async r=>{var o,h;const a=F.current;if(a&&a.state!=="closed")try{a.state==="suspended"&&await a.resume();const w=await(await fetch(t)).arrayBuffer(),v=await a.decodeAudioData(w);try{(o=K.current)==null||o.stop()}catch{}const k=a.createBufferSource();k.buffer=v,k.connect(a.destination),K.current=k,k.onended=()=>{URL.revokeObjectURL(t),r()},k.start(0);try{(h=C.current)==null||h.stop()}catch{}console.log("[Voice] Playing via Web Audio API");return}catch(c){console.warn("[Voice] Web Audio failed:",c)}try{const c=D.current||new Audio;D.current=c,c.setAttribute("playsinline",""),c.setAttribute("autoplay",""),J.current=c,c.onplay=()=>{var w;try{(w=C.current)==null||w.stop()}catch{}},c.onended=()=>{URL.revokeObjectURL(t),r()},c.onerror=w=>{console.warn("[Voice] Audio element error:",w),URL.revokeObjectURL(t),r()},c.src=t,await c.play(),console.log("[Voice] Playing via Audio element")}catch(c){console.warn("[Voice] Audio element play failed:",c),URL.revokeObjectURL(t),r()}}),[]),ee=e.useRef(!1),he=e.useRef(!1),Q=e.useRef("picking");e.useEffect(()=>{ee.current=x},[x]),e.useEffect(()=>{he.current=M},[M]),e.useEffect(()=>{Q.current=j},[j]),e.useEffect(()=>{(async()=>{var t;try{const r=await ue("/api/voice/voices");if(r.ok){const a=await r.json();if((t=a.voices)!=null&&t.length){if(W(a.voices),s&&!a.voices.includes(s)){const o=a.voices[0];m(o),V.current=o,localStorage.setItem("titan-voice",o)}}else W(["default"])}}catch{W(["default"])}})()},[]),e.useEffect(()=>{requestAnimationFrame(()=>i(!0))},[]),e.useEffect(()=>()=>{var t,r,a,o;Q.current="picking";try{(t=C.current)==null||t.stop()}catch{}C.current=null,(r=se.current)==null||r.getTracks().forEach(h=>h.stop()),(a=Y.current)==null||a.close(),(o=H.current)==null||o.abort(),U.current&&clearTimeout(U.current),fe.current&&(clearInterval(fe.current),fe.current=null),cancelAnimationFrame(ae.current),cancelAnimationFrame(ve.current)},[]),e.useEffect(()=>{if(!g)return;const t=()=>$(!1),r=setTimeout(()=>document.addEventListener("click",t),0);return()=>{clearTimeout(r),document.removeEventListener("click",t)}},[g]);const te=e.useCallback(async()=>{var t;try{let r=function(){c.getByteFrequencyData(w);let v=0;for(let d=0;d<w.length;d++)v+=w[d];const k=v/w.length/255;O(k),ae.current=requestAnimationFrame(r)};if(!((t=navigator.mediaDevices)!=null&&t.getUserMedia)){console.warn("[Voice] getUserMedia not available — may need HTTPS on mobile");return}const a=await navigator.mediaDevices.getUserMedia({audio:{echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0}});se.current=a;let o=Y.current;(!o||o.state==="closed")&&(o=new(window.AudioContext||window.webkitAudioContext)),o.state==="suspended"&&await o.resume(),Y.current=o;const h=o.createMediaStreamSource(a),c=o.createAnalyser();c.fftSize=256,c.smoothingTimeConstant=.8,h.connect(c),we.current=c;const w=new Uint8Array(c.frequencyBinCount);ae.current=requestAnimationFrame(r)}catch(r){console.error("Mic access denied:",r)}},[]),ce=e.useCallback(()=>{var t,r;cancelAnimationFrame(ae.current),cancelAnimationFrame(ve.current),(t=se.current)==null||t.getTracks().forEach(a=>a.stop()),(r=Y.current)==null||r.close(),se.current=null,Y.current=null,we.current=null,O(0)},[]),me=e.useCallback(()=>{var a;const t=window.SpeechRecognition||window.webkitSpeechRecognition;if(!t){console.error("Speech recognition not supported");return}try{(a=C.current)==null||a.stop()}catch{}const r=new t;r.continuous=!0,r.interimResults=!0,r.lang="en-US",r.onresult=o=>{if(he.current)return;let h="",c="";for(let w=o.resultIndex;w<o.results.length;w++){const v=o.results[w];v[0].confidence>0&&v[0].confidence<.5||(v.isFinal?c+=v[0].transcript:h+=v[0].transcript)}if(h&&l(h),c){q.current+=c,l(""),U.current&&clearTimeout(U.current);const v=q.current.trim().split(/\s+/).length<10?400:700;U.current=setTimeout(()=>{const k=q.current.trim();k&&(q.current="",Re(k))},v)}},r.onend=()=>{if(!ee.current&&!he.current&&Q.current==="active")try{r.start()}catch{}R(!1)},r.onstart=()=>{R(!0)},r.onerror=o=>{console.error("Speech recognition error:",o.error),o.error==="not-allowed"?(S("Mic access denied — check browser permissions"),R(!1)):o.error==="network"?(S("Speech recognition network error"),setTimeout(()=>{if(!ee.current&&Q.current==="active")try{r.start()}catch{}},2e3)):o.error==="audio-capture"?(S("Mic not available — is another app using it?"),R(!1)):o.error!=="no-speech"&&console.error("STT error:",o.error)},C.current=r;try{r.start()}catch{}},[]),ie=e.useCallback(()=>{var r;try{(r=K.current)==null||r.stop()}catch{}K.current=null;const t=J.current;t&&(t.pause(),t.src="",J.current=null),"speechSynthesis"in window&&window.speechSynthesis.cancel(),_(!1),O(0)},[]);e.useEffect(()=>{if(s&&j==="active"){try{new Audio("data:audio/wav;base64,UklGRiQAAABXQVZFZm10IBAAAAABAAEARKwAAIhYAQACABAAZGF0YQAAAAA=").play().catch(()=>{})}catch{}te(),me()}},[]),e.useCallback(()=>{const t=[];let r=0,a=!1,o=!1,h=null,c=null;const w=setInterval(()=>{a||O(.3+Math.random()*.4)},100),v=()=>{clearInterval(w),O(0)},k=()=>{if(a){v();return}if(r<t.length){const d=t[r++];ge(d).then(()=>k()).catch(()=>k())}else o?(v(),h&&h()):c=k};return{push(d){if(t.push(d),c){const Z=c;c=null,Z()}},finish(){if(o=!0,c){const d=c;c=null,d()}},start(d){h=d,k()},cancel(){var d;a=!0;try{(d=K.current)==null||d.stop()}catch{}J.current&&(J.current.pause(),J.current.src=""),v()},get length(){return t.length}}},[]);const Re=e.useCallback(async t=>{var c,w,v,k;if(X.current)return;X.current=!0,ie(),(c=H.current)==null||c.abort(),N(d=>[...d,{id:ye(),role:"user",text:t}]),T(!0),R(!1),S(null);try{(w=C.current)==null||w.stop()}catch{}const r=new AbortController;H.current=r;const a=V.current||"default";let o="",h="";try{const d=L.map(P=>({role:P.role,content:P.text,timestamp:(P.id,Date.now())}));await rt([...d,{role:"user",content:t,timestamp:Date.now()}],"You are TITAN, a helpful AI assistant. Keep responses concise and natural for voice conversation. Use short sentences.",{onToken:P=>{h+=P;const ke=Se(je(Ae(h)));o?N(pe=>pe.map(xe=>xe.id===o?{...xe,text:ke}:xe)):(o=ye(),N(pe=>[...pe,{id:o,role:"assistant",text:ke}])),T(!1)}},{signal:r.signal});const Z=Se(je(Ae(h)));if(!Z){X.current=!1;try{(v=C.current)==null||v.start()}catch{}return}_(!0);const ne=await fetch("/api/voice/preview",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({text:Z.slice(0,500),voice:a}),signal:AbortSignal.timeout(12e4)});if(!ne.ok)throw new Error(`F5-TTS error: ${ne.status}`);const Ie=await ne.blob(),_e=URL.createObjectURL(Ie);await ge(_e),_(!1),O(0),q.current="",setTimeout(()=>{var P;if(X.current=!1,!ee.current&&Q.current==="active")try{(P=C.current)==null||P.start()}catch{}},500)}catch(d){if((d==null?void 0:d.name)==="AbortError"&&!H.current)return;const Z=(d==null?void 0:d.name)==="AbortError"?"Request timed out":"Connection error";S(Z),setTimeout(()=>S(null),4e3),console.error("Voice processing error:",d),N(ne=>[...ne,{id:ye(),role:"assistant",text:"Sorry, something went wrong."}]),T(!1),_(!1),q.current="",X.current=!1;try{(k=C.current)==null||k.start()}catch{}}},[ie,ge,L]),Te=e.useCallback(async t=>{m(t),V.current=t,localStorage.setItem("titan-voice",t);try{await ue("/api/config",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({voice:{ttsVoice:t}})})}catch{}if(E("active"),!F.current||F.current.state==="closed"){const r=window.AudioContext||window.webkitAudioContext;F.current=new r}F.current.state==="suspended"&&F.current.resume().catch(()=>{});try{const r=F.current,a=r.createBuffer(1,1,22050),o=r.createBufferSource();o.buffer=a,o.connect(r.destination),o.start(0)}catch{}D.current||(D.current=new Audio,D.current.preload="auto"),te(),me()},[te,me]),Ne=e.useCallback(t=>{m(t),V.current=t,localStorage.setItem("titan-voice",t),$(!1),ue("/api/config",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({voice:{ttsVoice:t}})}).catch(()=>{})},[]),Me=e.useCallback(async t=>{try{const r=await fetch("/api/voice/preview",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({text:"Hey! I'm TITAN, your AI assistant.",voice:t})});if(!r.ok)return;const a=await r.blob(),o=URL.createObjectURL(a),h=D.current||new Audio,c=()=>{URL.revokeObjectURL(o),h.src=""};h.onended=c,h.onerror=c,h.play()}catch{}},[]),be=e.useCallback(()=>{var t,r;i(!1),Q.current="picking",E("picking"),(t=H.current)==null||t.abort(),H.current=null;try{(r=C.current)==null||r.stop()}catch{}C.current=null,ie(),ce(),U.current&&clearTimeout(U.current),X.current=!1,setTimeout(u,200)},[u,ce,ie]),Le=e.useCallback(()=>{B(t=>{var a,o;const r=!t;if(ee.current=r,r){try{(a=C.current)==null||a.stop()}catch{}ce(),R(!1)}else{te();try{(o=C.current)==null||o.start()}catch{}}return r})},[te,ce]),Oe=M?"assistant":p?"thinking":I?"user":"idle",Ee=x?"Muted":M?"TITAN is speaking...":p?"Thinking...":I?b?`"${b}"`:"Listening...":"Connected",Ve=M?"var(--color-purple-light)":p?"var(--color-warning)":I?"var(--color-cyan)":"var(--color-text-muted)";return n.jsxs(n.Fragment,{children:[n.jsx("audio",{ref:t=>{t&&!D.current&&(D.current=t)},autoPlay:!0,playsInline:!0,style:{position:"absolute",width:0,height:0,opacity:0}}),n.jsxs("div",{className:"fixed inset-0 z-50 flex flex-col items-center justify-center backdrop-blur-sm transition-all duration-200",style:{backgroundColor:"rgba(9, 9, 11, 0.95)",opacity:f?1:0,transform:f?"scale(1)":"scale(0.95)"},children:[n.jsx("button",{onClick:be,className:"absolute right-6 top-6 rounded-full p-2 transition-colors hover:bg-bg-tertiary z-20 text-text-secondary",children:n.jsx(De,{className:"h-6 w-6"})}),j==="picking"&&n.jsx("div",{className:"w-full h-full",children:n.jsx(Ke,{currentVoice:A||void 0,onSelect:Te,onPreview:Me})}),j==="active"&&n.jsxs(n.Fragment,{children:[n.jsxs("div",{className:"mb-6 text-center",children:[n.jsx("div",{className:"text-base font-medium mb-0.5 transition-colors duration-500 max-w-md truncate px-4",style:{color:Ve},children:Ee}),y&&n.jsx("div",{className:"text-xs font-medium mt-1 animate-pulse text-error",children:y}),n.jsxs("div",{className:"relative mt-2",children:[n.jsxs("button",{onClick:()=>$(t=>!t),className:"inline-flex items-center gap-1.5 rounded-full px-3 py-1 text-xs font-medium transition-colors hover:bg-bg-tertiary",style:{color:le(A||"tara").glow},children:[n.jsx("span",{className:"inline-block w-2 h-2 rounded-full",style:{backgroundColor:le(A||"tara").glow}}),le(A||"tara").name,n.jsx(Fe,{className:"h-3 w-3"})]}),g&&n.jsx("div",{className:"absolute left-1/2 -translate-x-1/2 mt-1 rounded-xl border border-bg-tertiary bg-bg-secondary/95 backdrop-blur-sm p-1.5 shadow-xl z-30",style:{minWidth:180},children:oe.map(t=>{const r=le(t),a=t===(A||"tara");return n.jsxs("button",{onClick:()=>Ne(t),className:"flex items-center gap-2.5 w-full rounded-lg px-3 py-2 text-left text-sm transition-colors hover:bg-bg-tertiary",style:{color:a?r.glow:"var(--color-text-secondary)"},children:[n.jsx("span",{className:"w-2.5 h-2.5 rounded-full flex-shrink-0",style:{backgroundColor:r.glow,boxShadow:a?`0 0 8px ${r.glow}60`:"none"}}),n.jsx("span",{className:"font-medium",children:r.name}),a&&n.jsx("span",{className:"ml-auto text-xs opacity-60",children:"✓"})]},t)})})]})]}),n.jsx(Pe,{audioLevel:x?0:z,speaker:x?"idle":Oe,size:260}),n.jsx("div",{className:"mt-8 w-full max-w-lg px-4",children:n.jsx(Ye,{messages:L,isListening:I&&!x})}),n.jsxs("div",{className:"absolute bottom-12 flex items-center gap-6",children:[n.jsx("button",{onClick:Le,className:"rounded-full p-4 transition-colors",style:{backgroundColor:x?"var(--color-error)":"var(--color-bg-tertiary)",color:"var(--color-text)"},title:x?"Unmute":"Mute",children:x?n.jsx(Je,{className:"h-6 w-6"}):n.jsx(Xe,{className:"h-6 w-6"})}),n.jsx("button",{onClick:be,className:"rounded-full p-4 transition-colors",style:{backgroundColor:"var(--color-error)",color:"var(--color-text)"},title:"End call",children:n.jsx(Ze,{className:"h-6 w-6"})})]})]})]})]})}const ct=Object.freeze(Object.defineProperty({__proto__:null,VoiceOverlay:st},Symbol.toStringTag,{value:"Module"}));export{ze as C,Xe as M,st as V,Fe as a,ct as b};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as t,aP as c,j as e,C as n,M as x}from"./index-CahJbWSR.js";import{P as m}from"./PageHeader-BimceqQo.js";import{R as o}from"./TitanCanvas-C-s0A-lv.js";import"./VoiceOverlay-CmNCrLcd.js";function g(){const[s,r]=t.useState(null),[l,i]=t.useState(!0),d=t.useCallback(async()=>{i(!0);try{const a=await c();r(a)}catch{}i(!1)},[]);return t.useEffect(()=>{d()},[d]),e.jsxs("div",{className:"space-y-4",children:[e.jsx(m,{title:"VRAM Monitor",breadcrumbs:[{label:"Admin",href:"/overview"},{label:"Infra"},{label:"VRAM"}]}),e.jsx("div",{className:"flex gap-2",children:e.jsxs("button",{onClick:d,disabled:l,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(o,{className:`w-4 h-4 ${l?"animate-spin":""}`})," Refresh"]})}),(s==null?void 0:s.gpu)&&e.jsxs("div",{className:"p-3 rounded-lg bg-[#0a0a0f] border border-[#27272a]",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[e.jsx(n,{className:"w-4 h-4 text-[#6366f1]"}),e.jsx("span",{className:"text-sm font-medium text-[#e4e4e7]",children:s.gpu.gpuName}),e.jsxs("span",{className:"text-xs text-[#52525b]",children:["(",s.gpu.vendor,")"]})]}),e.jsxs("div",{className:"grid grid-cols-3 gap-2 text-xs",children:[e.jsxs("div",{className:"p-2 rounded bg-[#27272a]/50",children:[e.jsx("div",{className:"text-[#52525b]",children:"Total"}),e.jsxs("div",{className:"text-[#e4e4e7]",children:[(s.gpu.totalMB/1024).toFixed(1)," GB"]})]}),e.jsxs("div",{className:"p-2 rounded bg-[#27272a]/50",children:[e.jsx("div",{className:"text-[#52525b]",children:"Used"}),e.jsxs("div",{className:"text-[#e4e4e7]",children:[(s.gpu.usedMB/1024).toFixed(1)," GB"]})]}),e.jsxs("div",{className:"p-2 rounded bg-[#27272a]/50",children:[e.jsx("div",{className:"text-[#52525b]",children:"Free"}),e.jsxs("div",{className:"text-[#e4e4e7]",children:[(s.gpu.freeMB/1024).toFixed(1)," GB"]})]})]}),e.jsx("div",{className:"mt-2 h-2 rounded-full bg-[#27272a] overflow-hidden",children:e.jsx("div",{className:"h-full bg-[#6366f1] rounded-full",style:{width:`${s.gpu.usedMB/s.gpu.totalMB*100}%`}})})]}),s&&s.activeLeases.length>0&&e.jsxs("div",{className:"space-y-2",children:[e.jsx("div",{className:"text-sm font-medium text-[#e4e4e7]",children:"Active Leases"}),s.activeLeases.map(a=>e.jsxs("div",{className:"flex items-center justify-between p-2 rounded-lg bg-[#0a0a0f] border border-[#27272a]",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(x,{className:"w-3.5 h-3.5 text-[#6366f1]"}),e.jsx("span",{className:"text-xs text-[#e4e4e7]",children:a.service})]}),e.jsxs("span",{className:"text-xs text-[#52525b]",children:[(a.reservedMB/1024).toFixed(1)," GB"]})]},a.id))]})]})}export{g as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as o,j as e,X as L,b as S,f as J,b7 as q}from"./index-CahJbWSR.js";import{A as D,m as $}from"./proxy-CzZDfLmm.js";import{E as K,q as B,P as U}from"./TitanCanvas-C-s0A-lv.js";import{P as F}from"./play-CcJ9BnCh.js";import{T as M}from"./trash-2-CK7yQ55V.js";import{P as _}from"./pause-DCV52koX.js";import"./VoiceOverlay-CmNCrLcd.js";function V({open:a,approval:s,onClose:l}){var N,k,w;const[c,n]=o.useState(null),[p,r]=o.useState(!1),[y,m]=o.useState(!1),u=(N=s==null?void 0:s.payload)==null?void 0:N.goalId;if(o.useEffect(()=>{if(!a||!u){n(null),m(!1);return}let b=!1;const C=async()=>{try{const f=await S(`/api/goals/${u}`);if(!f.ok){b||(m(!0),r(!1));return}const h=await f.json();if(b)return;n(h.goal||h),m(!1),r(!1)}catch{b||(m(!0),r(!1))}};r(!0),C();const d=setInterval(C,5e3);return()=>{b=!0,clearInterval(d)}},[a,u]),o.useEffect(()=>{if(!a)return;const b=C=>{C.key==="Escape"&&l()};return window.addEventListener("keydown",b),()=>window.removeEventListener("keydown",b)},[a,l]),!s)return null;const j=s.title||((k=s.payload)==null?void 0:k.title)||"Approval",x=(w=s.payload)==null?void 0:w.rationale;return e.jsx(D,{children:a&&e.jsxs(e.Fragment,{children:[e.jsx($.div,{initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},transition:{duration:.18},onClick:l,style:{position:"fixed",inset:0,background:"rgba(0, 0, 0, 0.55)",backdropFilter:"blur(4px)",WebkitBackdropFilter:"blur(4px)",zIndex:99}},"backdrop"),e.jsxs($.aside,{initial:{x:"100%"},animate:{x:0},exit:{x:"100%"},transition:{duration:.28,ease:[.32,.72,0,1]},style:{position:"fixed",top:0,right:0,bottom:0,width:"min(540px, 100vw)",background:"rgba(10, 12, 20, 0.96)",backdropFilter:"blur(24px)",WebkitBackdropFilter:"blur(24px)",borderLeft:"1px solid rgba(167, 139, 250, 0.15)",display:"flex",flexDirection:"column",zIndex:100,color:"#f8f9fc",boxShadow:"-20px 0 60px rgba(0,0,0,0.5)"},role:"dialog","aria-modal":"true",children:[e.jsxs("div",{style:{padding:"20px 24px",borderBottom:"1px solid rgba(255,255,255,0.06)",display:"flex",alignItems:"flex-start",gap:12},children:[e.jsxs("div",{style:{flex:1,minWidth:0},children:[e.jsx("div",{style:{fontSize:10,textTransform:"uppercase",letterSpacing:"0.15em",color:"rgba(255,255,255,0.35)",fontWeight:600,marginBottom:6},children:"Proposal"}),e.jsx("div",{style:{fontSize:17,fontWeight:600,lineHeight:1.3,marginBottom:6},children:j}),e.jsx("div",{style:{fontSize:11,color:"rgba(255,255,255,0.35)"},children:e.jsx(G,{status:s.status})})]}),e.jsx("button",{onClick:l,"aria-label":"Close",style:{background:"transparent",border:0,color:"rgba(255,255,255,0.55)",cursor:"pointer",padding:6,borderRadius:8},children:e.jsx(L,{size:18})})]}),e.jsxs("div",{style:{flex:1,overflowY:"auto",padding:"20px 24px"},children:[x&&e.jsx(z,{label:"Why this",children:e.jsx("div",{style:{fontSize:13,color:"rgba(255,255,255,0.75)",lineHeight:1.5},children:x})}),!u&&s.status==="pending"&&e.jsx(z,{label:"Status",children:e.jsx("div",{style:{fontSize:13,color:"rgba(251, 191, 36, 0.9)"},children:"Waiting for approval. Once approved, a goal will be created and TITAN will start working on it."})}),!u&&s.status==="rejected"&&e.jsx(z,{label:"Status",children:e.jsx("div",{style:{fontSize:13,color:"rgba(255,255,255,0.5)"},children:"Rejected. No work started."})}),u&&e.jsxs(e.Fragment,{children:[p&&!c&&e.jsx(z,{label:"Progress",children:e.jsx("div",{style:{fontSize:13,color:"rgba(255,255,255,0.4)"},children:"Loading goal…"})}),y&&e.jsx(z,{label:"Progress",children:e.jsx("div",{style:{fontSize:13,color:"rgba(255,255,255,0.4)"},children:"Goal linked to this approval wasn't found (may have been deleted)."})}),c&&e.jsx(X,{goal:c})]})]}),e.jsxs("div",{style:{padding:"14px 24px",borderTop:"1px solid rgba(255,255,255,0.06)",display:"flex",gap:10},children:[u&&e.jsxs("a",{href:"/command-post",onClick:b=>{b.preventDefault(),window.location.hash="#watch",l()},style:{display:"inline-flex",alignItems:"center",gap:6,padding:"8px 14px",borderRadius:8,background:"rgba(167, 139, 250, 0.12)",color:"#c4b5fd",fontSize:12,fontWeight:500,textDecoration:"none",cursor:"pointer"},children:[e.jsx(K,{size:12})," Watch live"]}),e.jsx("button",{onClick:l,style:{padding:"8px 14px",borderRadius:8,background:"rgba(255,255,255,0.04)",border:0,color:"rgba(255,255,255,0.55)",fontSize:12,cursor:"pointer"},children:"Close"})]})]},"panel")]})})}function X({goal:a}){const s=a.subtasks||[],l=s.filter(r=>r.status==="done"||r.status==="skipped").length,c=s.filter(r=>r.status==="failed").length,n=s.filter(r=>r.status==="running").length,p=s.length?l/s.length*100:a.progress||0;return e.jsxs(e.Fragment,{children:[e.jsxs(z,{label:"Progress",children:[e.jsxs("div",{style:{marginBottom:10},children:[e.jsxs("div",{style:{display:"flex",justifyContent:"space-between",fontSize:12,marginBottom:6},children:[e.jsxs("span",{style:{color:"rgba(255,255,255,0.6)"},children:[l," / ",s.length," complete"]}),e.jsxs("span",{style:{color:"rgba(255,255,255,0.4)",fontVariantNumeric:"tabular-nums"},children:[p.toFixed(0),"%"]})]}),e.jsx("div",{style:{height:6,borderRadius:3,background:"rgba(255,255,255,0.04)",overflow:"hidden"},children:e.jsx("div",{style:{width:`${p}%`,height:"100%",background:c>0?"linear-gradient(to right, #34d399, #fbbf24)":"var(--color-emerald)",transition:"width 0.5s"}})})]}),e.jsxs("div",{style:{fontSize:11,color:"rgba(255,255,255,0.4)",display:"flex",gap:12},children:[e.jsx(G,{status:a.status}),n>0&&e.jsxs("span",{children:["· ",n," running"]}),c>0&&e.jsxs("span",{style:{color:"rgba(239, 68, 68, 0.9)"},children:["· ",c," failed"]})]})]}),s.length>0&&e.jsx(z,{label:"Subtasks",children:e.jsx("div",{style:{display:"flex",flexDirection:"column",gap:8},children:s.map(r=>e.jsx(Y,{goalId:a.id,subtask:r},r.id))})})]})}function Y({goalId:a,subtask:s}){const l=O(s.status),c=s.status==="running",[n,p]=o.useState(!1),r=async()=>{p(!0);try{await S(`/api/goals/${a}/subtasks/${s.id}/retry`,{method:"POST"})}catch(m){alert(`Retry failed: ${m.message}`)}p(!1)},y=async()=>{p(!0);try{await S(`/api/goals/${a}/subtasks/${s.id}/complete`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({result:"Marked complete from Command Post"})})}catch(m){alert(`Mark-done failed: ${m.message}`)}p(!1)};return e.jsxs("div",{style:{padding:"10px 12px",borderRadius:8,background:"rgba(255,255,255,0.02)",borderLeft:`2px solid ${l}`,fontSize:12},children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10,marginBottom:s.error||s.result?6:0},children:[e.jsx("span",{style:{width:8,height:8,borderRadius:"50%",background:l,boxShadow:`0 0 ${c?10:5}px ${l}`,animation:c?"subtask-pulse 1.4s ease-in-out infinite":"none",flexShrink:0}}),e.jsx("span",{style:{flex:1,color:"rgba(255,255,255,0.85)",lineHeight:1.4},children:s.title}),s.status==="failed"&&e.jsx("button",{onClick:r,disabled:n,title:"Reset + retry",style:{background:"transparent",border:0,padding:4,borderRadius:4,color:"#fbbf24",cursor:"pointer",opacity:n?.4:.8},children:e.jsx(B,{size:12})}),s.status==="pending"&&e.jsx("button",{onClick:y,disabled:n,title:"Mark done",style:{background:"transparent",border:0,padding:4,borderRadius:4,color:"var(--color-emerald)",cursor:"pointer",opacity:n?.4:.8},children:e.jsx(J,{size:12})}),e.jsx("span",{style:{fontSize:10,textTransform:"uppercase",letterSpacing:"0.1em",color:l,fontWeight:600,flexShrink:0},children:s.status})]}),s.error&&e.jsx("div",{style:{fontSize:11,color:"rgba(239, 68, 68, 0.85)",padding:"6px 8px",borderRadius:6,background:"rgba(239, 68, 68, 0.06)",marginLeft:18},children:s.error}),s.result&&s.status==="done"&&e.jsxs("div",{style:{fontSize:11,color:"rgba(255,255,255,0.55)",lineHeight:1.4,marginLeft:18,marginTop:4},children:[s.result.slice(0,240),s.result.length>240?"…":""]}),e.jsx("style",{children:"@keyframes subtask-pulse { 0%,100% { opacity: 1; } 50% { opacity: 0.35; } }"})]})}function G({status:a}){const s=O(a);return e.jsx("span",{style:{display:"inline-block",padding:"2px 8px",borderRadius:999,background:`${s}15`,color:s,fontSize:10,fontWeight:600,textTransform:"uppercase",letterSpacing:"0.1em"},children:a})}function O(a){switch(a){case"done":case"completed":case"approved":case"active":return"var(--color-emerald)";case"running":return"var(--color-cyan)";case"failed":case"rejected":return"var(--color-error)";case"skipped":return"var(--color-text-secondary)";case"pending":case"paused":return"#fbbf24";default:return"#9ca3af"}}function z({label:a,children:s}){return e.jsxs("div",{style:{marginBottom:20},children:[e.jsx("div",{style:{fontSize:10,textTransform:"uppercase",letterSpacing:"0.15em",color:"rgba(255,255,255,0.35)",fontWeight:600,marginBottom:8},children:a}),s]})}function oe(){const[a,s]=o.useState([]),[l,c]=o.useState(!0),[n,p]=o.useState(null),[r,y]=o.useState(null),[m,u]=o.useState(!1),[j,x]=o.useState(null),[N,k]=o.useState(null),{toast:w}=q(),b=async()=>{try{const t=await S("/api/goals");if(t.ok){const i=await t.json();s(i.goals||[])}}catch{}},C=async t=>{k(t.id);const i=t.status==="paused"?"active":"paused";try{await S(`/api/goals/${t.id}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({status:i})}),await b()}catch(g){w("error",`Update failed: ${g.message}`)}k(null)},d=async t=>{k(t.id);try{await S(`/api/goals/${t.id}`,{method:"DELETE"}),await b()}catch(i){w("error",`Delete failed: ${i.message}`)}k(null),x(null)},f=async t=>{k(t.id);try{const i=(t.subtasks||[]).filter(g=>g.status==="failed");for(const g of i)await S(`/api/goals/${t.id}/subtasks/${g.id}/retry`,{method:"POST"});t.status!=="active"&&await S(`/api/goals/${t.id}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({status:"active"})}),await b()}catch(i){w("error",`Restart failed: ${i.message}`)}k(null)};o.useEffect(()=>{let t=!0;const i=async()=>{try{const v=await S("/api/goals");if(!v.ok)return;const T=await v.json();if(!t)return;s(T.goals||[]),c(!1)}catch{}};i();const g=setInterval(i,1e4);return()=>{t=!1,clearInterval(g)}},[]),o.useEffect(()=>{const t=localStorage.getItem("titan-token")||localStorage.getItem("titan_token")||"",i=`/api/watch/stream${t?`?token=${encodeURIComponent(t)}`:""}`,g=new EventSource(i);return g.onmessage=v=>{try{const T=JSON.parse(v.data);if(T.type!=="event")return;if(T.topic==="initiative:start"||T.topic==="initiative:round"){const I=T.raw||{};y({goalTitle:I.goalTitle||"",subtaskTitle:I.subtaskTitle||"",round:I.round,maxRounds:I.maxRounds})}(T.topic==="initiative:complete"||T.topic==="initiative:no_progress")&&y(null)}catch{}},g.onerror=()=>{},()=>g.close()},[]);const h=o.useMemo(()=>a.filter(t=>t.status==="active").sort((t,i)=>(t.priority||5)-(i.priority||5)),[a]),A=o.useMemo(()=>a.filter(t=>t.status==="paused"),[a]),P=o.useMemo(()=>a.filter(t=>t.status==="completed").sort((t,i)=>(i.completedAt||i.updatedAt||"").localeCompare(t.completedAt||t.updatedAt||"")).slice(0,5),[a]),R=o.useMemo(()=>{const t=[];for(const i of h){const g=new Set((i.subtasks||[]).filter(v=>v.status==="done"||v.status==="skipped").map(v=>v.id));for(const v of i.subtasks||[]){if(v.status!=="pending")continue;(v.dependsOn||[]).every(H=>g.has(H))&&t.push({goal:i,subtask:v})}}return t},[h]),W=o.useMemo(()=>{const t=[];for(const i of a)if(!(i.status!=="active"&&i.status!=="paused"))for(const g of i.subtasks||[])g.status==="failed"&&t.push({goal:i,subtask:g});return t.slice(0,5)},[a]);return l?e.jsx("div",{className:"flex items-center justify-center h-64 text-sm text-text-muted",children:"Loading work…"}):e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"text-[11px] text-text-muted",children:[a.filter(t=>t.status==="active").length," active · ",a.filter(t=>t.status==="paused").length," paused · ",a.filter(t=>t.status==="completed").length," completed"]}),e.jsxs("button",{onClick:()=>u(!0),className:"flex items-center gap-1.5 px-3 py-1.5 text-[12px] font-medium rounded-lg bg-indigo-600 text-white hover:bg-indigo-500 transition-colors",children:[e.jsx(U,{size:13})," New goal"]})]}),e.jsx(E,{label:"Now",count:r?1:0,children:e.jsx(D,{mode:"wait",children:r?e.jsxs($.div,{initial:{opacity:0,y:-4},animate:{opacity:1,y:0},exit:{opacity:0},transition:{duration:.25},className:"p-4 rounded-xl border border-cyan-500/20 bg-cyan-500/[0.04]",children:[e.jsxs("div",{className:"flex items-center gap-3 mb-2",children:[e.jsx("span",{className:"w-2.5 h-2.5 rounded-full bg-cyan-400 animate-pulse",style:{boxShadow:"0 0 12px #22d3ee"}}),e.jsx("span",{className:"text-[11px] text-cyan-300 uppercase tracking-wider font-semibold",children:"executing"}),r.round&&r.maxRounds&&e.jsxs("span",{className:"text-[11px] text-text-muted",children:["round ",r.round,"/",r.maxRounds]})]}),e.jsx("div",{className:"text-[15px] font-medium text-white/95 mb-1",children:r.subtaskTitle||"(unnamed subtask)"}),r.goalTitle&&e.jsxs("div",{className:"text-[11px] text-text-muted",children:["in goal: ",r.goalTitle]})]},`${r.goalTitle}-${r.subtaskTitle}`):e.jsxs($.div,{initial:{opacity:0},animate:{opacity:1},className:"p-6 rounded-xl border border-border text-center",children:[e.jsx("div",{className:"text-[13px] text-text-muted",children:"Nothing running right now."}),e.jsx("div",{className:"text-[11px] text-text-muted mt-1",children:R.length>0?`${R.length} task${R.length===1?"":"s"} queued — TITAN will start within 10 seconds`:h.length>0?`${h.length} goal${h.length===1?"":"s"} active — waiting for driver to begin`:"No work in queue. Approve a proposal from the Inbox to get started."})]},"idle")})}),R.length>0&&e.jsx(E,{label:"Up next",count:R.length,children:e.jsx("div",{className:"space-y-2",children:R.slice(0,3).map(({goal:t,subtask:i},g)=>e.jsxs("div",{onClick:()=>p(t),className:"flex items-center gap-3 p-3 rounded-lg bg-bg-secondary/30 border border-border/30 hover:bg-bg-secondary cursor-pointer transition-colors",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-amber-400/60"}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("div",{className:"text-[13px] text-white/85 truncate",children:i.title}),e.jsx("div",{className:"text-[11px] text-text-muted truncate",children:t.title})]}),g===0&&e.jsx("span",{className:"text-[10px] text-cyan-300/70 uppercase tracking-wider",children:"next"})]},`${t.id}-${i.id}`))})}),e.jsx(E,{label:"Active goals",count:h.length,children:h.length===0?e.jsx("div",{className:"p-6 rounded-xl border border-border text-center text-[12px] text-text-muted",children:"No active goals. TITAN is idle. (Soma may propose one shortly.)"}):e.jsx("div",{className:"space-y-2",children:h.map(t=>e.jsx(Z,{goal:t,busy:N===t.id,onClick:()=>p(t),onPauseToggle:()=>C(t),onDelete:()=>x(t),onRestart:()=>f(t)},t.id))})}),P.length>0&&e.jsx(E,{label:"Recently done",count:P.length,children:e.jsx("div",{className:"space-y-2",children:P.map(t=>e.jsxs("div",{onClick:()=>p(t),className:"flex items-center gap-3 p-3 rounded-lg bg-emerald-500/[0.03] border border-emerald-500/10 hover:bg-emerald-500/[0.06] cursor-pointer",children:[e.jsx("span",{className:"text-emerald-400",children:"✓"}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("div",{className:"text-[13px] text-white/85 truncate",children:t.title}),e.jsxs("div",{className:"text-[11px] text-text-muted",children:["completed ",ee(t.completedAt||t.updatedAt)]})]})]},t.id))})}),(A.length>0||W.length>0)&&e.jsx(E,{label:"Needs attention",count:A.length+W.length,children:e.jsxs("div",{className:"space-y-2",children:[A.map(t=>e.jsxs("div",{className:"flex items-center gap-3 p-3 rounded-lg bg-amber-500/[0.03] border border-amber-500/15 hover:bg-amber-500/[0.06]",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-amber-400"}),e.jsxs("div",{className:"flex-1 min-w-0 cursor-pointer",onClick:()=>p(t),children:[e.jsx("div",{className:"text-[13px] text-white/85 truncate",children:t.title}),e.jsx("div",{className:"text-[11px] text-text-muted",children:"paused"})]}),e.jsx("button",{onClick:i=>{i.stopPropagation(),C(t)},disabled:N===t.id,title:"Resume",className:"p-1.5 rounded hover:bg-bg-tertiary text-emerald-400/70 hover:text-emerald-400 disabled:opacity-40",children:e.jsx(F,{size:12})}),e.jsx("button",{onClick:i=>{i.stopPropagation(),x(t)},disabled:N===t.id,title:"Delete",className:"p-1.5 rounded hover:bg-bg-tertiary text-text-muted hover:text-red-400 disabled:opacity-40",children:e.jsx(M,{size:12})})]},t.id)),W.map(({goal:t,subtask:i})=>e.jsxs("div",{onClick:()=>p(t),className:"flex items-start gap-3 p-3 rounded-lg bg-red-500/[0.03] border border-red-500/15 hover:bg-red-500/[0.06] cursor-pointer",children:[e.jsx("span",{className:"text-red-400 mt-0.5",children:"✗"}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("div",{className:"text-[13px] text-white/85 truncate",children:i.title}),e.jsxs("div",{className:"text-[11px] text-text-muted truncate",children:["in ",t.title]}),i.error&&e.jsx("div",{className:"text-[11px] text-red-300/70 mt-1 truncate",children:i.error})]})]},`${t.id}-${i.id}`))]})}),e.jsx(V,{open:n!==null,approval:n?{id:n.id,title:n.title,status:n.status,payload:{goalId:n.id,title:n.title,description:n.description,rationale:n.description}}:null,onClose:()=>p(null)}),e.jsx(Q,{open:m,onClose:()=>u(!1),onCreated:async()=>{u(!1),await b()}}),e.jsx(D,{children:j&&e.jsx($.div,{initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},style:{position:"fixed",inset:0,background:"rgba(0,0,0,0.7)",backdropFilter:"blur(6px)",zIndex:200,display:"flex",alignItems:"center",justifyContent:"center"},onClick:()=>x(null),children:e.jsxs($.div,{initial:{scale:.96,y:8},animate:{scale:1,y:0},exit:{scale:.96,y:8},onClick:t=>t.stopPropagation(),style:{background:"rgba(15, 17, 26, 0.98)",border:"1px solid rgba(239, 68, 68, 0.25)",borderRadius:16,padding:24,maxWidth:440,width:"calc(100% - 32px)",color:"#f8f9fc"},children:[e.jsx("div",{className:"text-[16px] font-semibold mb-2",children:"Delete this goal?"}),e.jsx("div",{className:"text-[13px] text-white/55 mb-1",children:j.title}),e.jsxs("div",{className:"text-[11px] text-text-muted mb-5",children:["All ",(j.subtasks||[]).length," subtasks will be removed. Can't undo."]}),e.jsxs("div",{className:"flex gap-2 justify-end",children:[e.jsx("button",{onClick:()=>x(null),className:"px-4 py-2 rounded-lg text-[12px] text-text-secondary hover:bg-bg-tertiary",children:"Cancel"}),e.jsx("button",{onClick:()=>d(j),disabled:N===j.id,className:"px-4 py-2 rounded-lg text-[12px] font-medium bg-red-600 text-white hover:bg-red-500 disabled:opacity-50",children:"Delete goal"})]})]})})})]})}function Q({open:a,onClose:s,onCreated:l}){const[c,n]=o.useState(""),[p,r]=o.useState(""),[y,m]=o.useState([]),[u,j]=o.useState(""),[x,N]=o.useState(!1),[k,w]=o.useState(null);o.useEffect(()=>{a||(n(""),r(""),m([]),j(""),w(null))},[a]),o.useEffect(()=>{if(!a)return;const d=f=>{f.key==="Escape"&&s()};return window.addEventListener("keydown",d),()=>window.removeEventListener("keydown",d)},[a,s]);const b=()=>{const d=u.trim();d&&(m(f=>[...f,d]),j(""))},C=async()=>{if(!c.trim()){w("Title is required");return}N(!0),w(null);try{const d={title:c.trim(),description:p.trim()||c.trim(),subtasks:y.map(h=>({title:h,description:h}))},f=await S("/api/goals",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(d)});if(!f.ok){const h=await f.text().catch(()=>"");throw new Error(h||`HTTP ${f.status}`)}l()}catch(d){w(d.message)}N(!1)};return e.jsx(D,{children:a&&e.jsx($.div,{initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},style:{position:"fixed",inset:0,background:"rgba(0,0,0,0.7)",backdropFilter:"blur(6px)",zIndex:200,display:"flex",alignItems:"center",justifyContent:"center",padding:16},onClick:s,children:e.jsxs($.div,{initial:{scale:.96,y:8},animate:{scale:1,y:0},exit:{scale:.96,y:8},onClick:d=>d.stopPropagation(),style:{background:"rgba(15, 17, 26, 0.98)",border:"1px solid rgba(99, 102, 241, 0.25)",borderRadius:16,padding:24,maxWidth:520,width:"100%",color:"#f8f9fc"},children:[e.jsxs("div",{className:"flex items-center justify-between mb-5",children:[e.jsx("h2",{className:"text-[16px] font-semibold",children:"New goal"}),e.jsx("button",{onClick:s,className:"text-white/55 hover:text-text p-1",children:e.jsx(L,{size:18})})]}),e.jsx("label",{className:"text-[10px] uppercase tracking-wider text-text-muted font-semibold block mb-1.5",children:"Title"}),e.jsx("input",{value:c,onChange:d=>n(d.target.value),placeholder:"Build the Polymarket monitor",autoFocus:!0,className:"w-full bg-bg-tertiary border border-border rounded-lg px-3 py-2 text-[14px] text-white/95 placeholder-white/25 focus:outline-none focus:border-indigo-500/50 mb-4"}),e.jsx("label",{className:"text-[10px] uppercase tracking-wider text-text-muted font-semibold block mb-1.5",children:"Description (optional)"}),e.jsx("textarea",{value:p,onChange:d=>r(d.target.value),placeholder:"What should TITAN accomplish? Why?",rows:3,className:"w-full bg-bg-tertiary border border-border rounded-lg px-3 py-2 text-[13px] text-white/85 placeholder-white/25 focus:outline-none focus:border-indigo-500/50 resize-none mb-4"}),e.jsx("label",{className:"text-[10px] uppercase tracking-wider text-text-muted font-semibold block mb-1.5",children:"Subtasks (optional)"}),e.jsx("div",{className:"space-y-1.5 mb-2",children:y.map((d,f)=>e.jsxs("div",{className:"flex items-center gap-2 px-3 py-1.5 rounded-lg bg-bg-tertiary/30 border border-border/50",children:[e.jsxs("span",{className:"text-[11px] text-text-muted tabular-nums",children:[f+1,"."]}),e.jsx("span",{className:"flex-1 text-[12px] text-text",children:d}),e.jsx("button",{onClick:()=>m(h=>h.filter((A,P)=>P!==f)),className:"text-text-muted hover:text-red-400","aria-label":"Remove",children:e.jsx(L,{size:12})})]},f))}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{value:u,onChange:d=>j(d.target.value),onKeyDown:d=>{d.key==="Enter"&&(d.preventDefault(),b())},placeholder:"Add a subtask (press Enter)",className:"flex-1 bg-bg-tertiary border border-border rounded-lg px-3 py-1.5 text-[12px] text-white/85 placeholder-white/25 focus:outline-none focus:border-indigo-500/50"}),e.jsx("button",{onClick:b,disabled:!u.trim(),className:"px-3 rounded-lg text-[12px] bg-bg-tertiary text-text-secondary hover:bg-bg-tertiary disabled:opacity-30",children:"Add"})]}),y.length===0&&e.jsx("p",{className:"text-[10px] text-text-muted italic mt-2",children:"Leaving subtasks empty is fine — TITAN can plan them itself."}),k&&e.jsx("div",{className:"mt-4 p-2 rounded-lg bg-red-500/[0.08] border border-red-500/20 text-[12px] text-red-300",children:k}),e.jsxs("div",{className:"flex gap-2 justify-end mt-6",children:[e.jsx("button",{onClick:s,className:"px-4 py-2 rounded-lg text-[12px] text-text-secondary hover:bg-bg-tertiary",children:"Cancel"}),e.jsx("button",{onClick:C,disabled:x||!c.trim(),className:"px-4 py-2 rounded-lg text-[12px] font-medium bg-indigo-600 text-white hover:bg-indigo-500 disabled:opacity-50",children:x?"Creating…":"Create goal"})]})]})})})}function Z({goal:a,busy:s,onClick:l,onPauseToggle:c,onDelete:n,onRestart:p}){const r=a.subtasks||[],y=r.filter(x=>x.status==="done"||x.status==="skipped").length,m=r.filter(x=>x.status==="running").length,u=r.filter(x=>x.status==="failed").length,j=r.length?y/r.length*100:a.progress||0;return e.jsxs("div",{className:"group p-3 rounded-lg bg-bg-secondary/30 border border-border/50 hover:bg-bg-secondary transition-colors",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3 mb-1.5",children:[e.jsx("div",{onClick:l,className:"flex-1 min-w-0 cursor-pointer",children:e.jsx("div",{className:"text-[13px] text-text truncate font-medium",children:a.title})}),e.jsxs("span",{className:"text-[10px] text-text-muted flex-shrink-0 tabular-nums",children:[y,"/",r.length]}),e.jsxs("div",{className:"flex items-center gap-0.5 flex-shrink-0",children:[u>0&&e.jsx("button",{onClick:x=>{x.stopPropagation(),p()},disabled:s,title:`Retry ${u} failed subtask${u===1?"":"s"}`,className:"p-1.5 rounded hover:bg-bg-tertiary text-amber-300/70 hover:text-amber-300 disabled:opacity-40",children:e.jsx(B,{size:12})}),e.jsx("button",{onClick:x=>{x.stopPropagation(),c()},disabled:s,title:a.status==="paused"?"Resume":"Pause",className:"p-1.5 rounded hover:bg-bg-tertiary text-text-muted hover:text-text disabled:opacity-40",children:a.status==="paused"?e.jsx(F,{size:12}):e.jsx(_,{size:12})}),e.jsx("button",{onClick:x=>{x.stopPropagation(),n()},disabled:s,title:"Delete",className:"p-1.5 rounded hover:bg-bg-tertiary text-text-muted hover:text-red-400 disabled:opacity-40",children:e.jsx(M,{size:12})})]})]}),e.jsx("div",{className:"h-1 rounded-full bg-bg-tertiary overflow-hidden mb-2 cursor-pointer",onClick:l,children:e.jsx("div",{className:"h-full transition-all duration-500",style:{width:`${j}%`,background:u>0?"linear-gradient(to right, #34d399, #fbbf24)":"var(--color-emerald)"}})}),e.jsxs("div",{className:"flex items-center gap-3 text-[11px] text-text-muted cursor-pointer",onClick:l,children:[m>0&&e.jsxs("span",{className:"text-cyan-300/80",children:["▶ ",m," running"]}),u>0&&e.jsxs("span",{className:"text-red-300/80",children:["✗ ",u," failed"]}),m===0&&u===0&&r.length>0&&e.jsxs("span",{children:[r.length-y," pending"]}),r.length===0&&e.jsx("span",{className:"italic text-text-muted",children:"no subtasks yet"})]})]})}function E({label:a,count:s,children:l}){return e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx("h3",{className:"text-[11px] uppercase tracking-wider text-text-muted font-semibold",children:a}),s!==void 0&&s>0&&e.jsx("span",{className:"text-[10px] text-text-muted tabular-nums",children:s})]}),l]})}function ee(a){if(!a)return"";const s=Date.parse(a);if(isNaN(s))return"";const l=Math.max(0,Math.floor((Date.now()-s)/1e3));if(l<60)return`${l}s ago`;const c=Math.floor(l/60);if(c<60)return`${c}m ago`;const n=Math.floor(c/60);return n<24?`${n}h ago`:`${Math.floor(n/24)}d ago`}export{oe as default};
|