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.
Files changed (302) hide show
  1. package/README.md +1 -1
  2. package/dist/agent/agent.js +9 -5
  3. package/dist/agent/agent.js.map +1 -1
  4. package/dist/agent/agentLoop.js +7 -3
  5. package/dist/agent/agentLoop.js.map +1 -1
  6. package/dist/agent/checkpoint.js +2 -2
  7. package/dist/agent/checkpoint.js.map +1 -1
  8. package/dist/agent/commandPost.js +3 -3
  9. package/dist/agent/commandPost.js.map +1 -1
  10. package/dist/agent/goalProposer.js +2 -2
  11. package/dist/agent/goalProposer.js.map +1 -1
  12. package/dist/agent/goals.js +3 -3
  13. package/dist/agent/goals.js.map +1 -1
  14. package/dist/agent/peerAdvise.js +1 -1
  15. package/dist/agent/peerAdvise.js.map +1 -1
  16. package/dist/agent/planner.js +4 -4
  17. package/dist/agent/planner.js.map +1 -1
  18. package/dist/agent/userProfile.js +2 -2
  19. package/dist/agent/userProfile.js.map +1 -1
  20. package/dist/cli/doctor.js +33 -0
  21. package/dist/cli/doctor.js.map +1 -1
  22. package/dist/cli/onboard.js +4 -4
  23. package/dist/cli/onboard.js.map +1 -1
  24. package/dist/config/config.js +3 -3
  25. package/dist/config/config.js.map +1 -1
  26. package/dist/config/schema.js +8 -1
  27. package/dist/config/schema.js.map +1 -1
  28. package/dist/gateway/routes/adminRouter.js +500 -0
  29. package/dist/gateway/routes/adminRouter.js.map +1 -0
  30. package/dist/gateway/routes/agents.js +231 -0
  31. package/dist/gateway/routes/agents.js.map +1 -0
  32. package/dist/gateway/routes/agentsRouter.js +32 -0
  33. package/dist/gateway/routes/agentsRouter.js.map +1 -0
  34. package/dist/gateway/routes/checkpoints.js +41 -0
  35. package/dist/gateway/routes/checkpoints.js.map +1 -0
  36. package/dist/gateway/routes/commandPost.js +755 -0
  37. package/dist/gateway/routes/commandPost.js.map +1 -0
  38. package/dist/gateway/routes/companies.js +166 -0
  39. package/dist/gateway/routes/companies.js.map +1 -0
  40. package/dist/gateway/routes/files.js +295 -0
  41. package/dist/gateway/routes/files.js.map +1 -0
  42. package/dist/gateway/routes/hardwareRouter.js +151 -0
  43. package/dist/gateway/routes/hardwareRouter.js.map +1 -0
  44. package/dist/gateway/routes/mcpRouter.js +88 -0
  45. package/dist/gateway/routes/mcpRouter.js.map +1 -0
  46. package/dist/gateway/routes/mesh.js +464 -0
  47. package/dist/gateway/routes/mesh.js.map +1 -0
  48. package/dist/gateway/routes/metricsRouter.js +131 -0
  49. package/dist/gateway/routes/metricsRouter.js.map +1 -0
  50. package/dist/gateway/routes/organism.js +82 -0
  51. package/dist/gateway/routes/organism.js.map +1 -0
  52. package/dist/gateway/routes/paperclip.js +101 -0
  53. package/dist/gateway/routes/paperclip.js.map +1 -0
  54. package/dist/gateway/routes/sessions.js +227 -0
  55. package/dist/gateway/routes/sessions.js.map +1 -0
  56. package/dist/gateway/routes/skills.js +295 -0
  57. package/dist/gateway/routes/skills.js.map +1 -0
  58. package/dist/gateway/routes/socialRouter.js +145 -0
  59. package/dist/gateway/routes/socialRouter.js.map +1 -0
  60. package/dist/gateway/routes/systemRouter.js +220 -0
  61. package/dist/gateway/routes/systemRouter.js.map +1 -0
  62. package/dist/gateway/routes/teamsRecipes.js +297 -0
  63. package/dist/gateway/routes/teamsRecipes.js.map +1 -0
  64. package/dist/gateway/routes/tests.js +401 -0
  65. package/dist/gateway/routes/tests.js.map +1 -0
  66. package/dist/gateway/routes/traces.js +33 -0
  67. package/dist/gateway/routes/traces.js.map +1 -0
  68. package/dist/gateway/routes/voiceRouter.js +770 -0
  69. package/dist/gateway/routes/voiceRouter.js.map +1 -0
  70. package/dist/gateway/routes/watchRouter.js +131 -0
  71. package/dist/gateway/routes/watchRouter.js.map +1 -0
  72. package/dist/gateway/server.js +1179 -7379
  73. package/dist/gateway/server.js.map +1 -1
  74. package/dist/mcp/registry.js +2 -2
  75. package/dist/mcp/registry.js.map +1 -1
  76. package/dist/memory/episodic.js +2 -2
  77. package/dist/memory/episodic.js.map +1 -1
  78. package/dist/memory/learning.js +3 -3
  79. package/dist/memory/learning.js.map +1 -1
  80. package/dist/memory/memory.js +3 -3
  81. package/dist/memory/memory.js.map +1 -1
  82. package/dist/organism/drives.js +2 -2
  83. package/dist/organism/drives.js.map +1 -1
  84. package/dist/providers/errorTaxonomy.js +13 -0
  85. package/dist/providers/errorTaxonomy.js.map +1 -1
  86. package/dist/providers/ollama.js +3 -1
  87. package/dist/providers/ollama.js.map +1 -1
  88. package/dist/providers/openai_compat.js +4 -3
  89. package/dist/providers/openai_compat.js.map +1 -1
  90. package/dist/providers/router.js +13 -0
  91. package/dist/providers/router.js.map +1 -1
  92. package/dist/safety/fixOscillation.js +15 -0
  93. package/dist/safety/fixOscillation.js.map +1 -1
  94. package/dist/safety/killSwitch.js +2 -2
  95. package/dist/safety/killSwitch.js.map +1 -1
  96. package/dist/safety/selfRepair.js +7 -3
  97. package/dist/safety/selfRepair.js.map +1 -1
  98. package/dist/skills/builtin/agent_debate.js +2 -2
  99. package/dist/skills/builtin/agent_debate.js.map +1 -1
  100. package/dist/skills/builtin/apply_patch.js +3 -3
  101. package/dist/skills/builtin/apply_patch.js.map +1 -1
  102. package/dist/skills/builtin/shell.js +2 -2
  103. package/dist/skills/builtin/shell.js.map +1 -1
  104. package/dist/skills/builtin/voice_control.js +49 -0
  105. package/dist/skills/builtin/voice_control.js.map +1 -0
  106. package/dist/skills/builtin/widget_gallery.js +6 -1
  107. package/dist/skills/builtin/widget_gallery.js.map +1 -1
  108. package/dist/skills/registry.js +15 -4
  109. package/dist/skills/registry.js.map +1 -1
  110. package/dist/storage/JsonStorage.js +4 -4
  111. package/dist/storage/JsonStorage.js.map +1 -1
  112. package/dist/utils/constants.js +1 -1
  113. package/dist/utils/constants.js.map +1 -1
  114. package/dist/utils/helpers.js +3 -1
  115. package/dist/utils/helpers.js.map +1 -1
  116. package/dist/utils/lifecycle.js +86 -0
  117. package/dist/utils/lifecycle.js.map +1 -0
  118. package/dist/voice/bridge.js +136 -0
  119. package/dist/voice/bridge.js.map +1 -0
  120. package/docs/COO-MASTER-PLAN-2026-05-02.md +474 -0
  121. package/docs/HANDOFF/2026-04-29.md +141 -0
  122. package/docs/HANDOFF-2026-04-30.md +144 -0
  123. package/docs/HANDOFF-2026-05-03.md +114 -0
  124. package/docs/adr/2026-04-29-widget-pipeline-traceability.md +49 -0
  125. package/docs/agent-memory/README.md +45 -0
  126. package/docs/agent-memory/commands.md +100 -0
  127. package/docs/agent-memory/context-tree.md +101 -0
  128. package/docs/agent-memory/current-state.md +54 -0
  129. package/docs/agent-memory/decisions.md +78 -0
  130. package/docs/agent-memory/known-issues.md +76 -0
  131. package/docs/agent-memory/reflections.md +52 -0
  132. package/docs/agent-memory/skills-candidates.md +80 -0
  133. package/docs/superpowers/plans/2026-04-29-comprehensive-audit.md +256 -0
  134. package/docs/superpowers/plans/2026-04-29-comprehensive-test-plan.md +396 -0
  135. package/docs/superpowers/plans/2026-04-29-fix-all-prs.md +251 -0
  136. package/docs/superpowers/plans/2026-04-29-gitnexus-gap-remediation.md +969 -0
  137. package/package.json +5 -2
  138. package/ui/dist/assets/{AuditPanel-CM6Wg9hO.js → AuditPanel-VzSndmDN.js} +2 -2
  139. package/ui/dist/assets/{AutonomyPanel-CESx3ANg.js → AutonomyPanel-BiFouzAV.js} +2 -2
  140. package/ui/dist/assets/AutopilotPanel-fjOfM668.js +1 -0
  141. package/ui/dist/assets/{AutoresearchPanel-DR47NqT5.js → AutoresearchPanel-CVCxzAH3.js} +2 -2
  142. package/ui/dist/assets/BackupPanel-CHVTG--q.js +1 -0
  143. package/ui/dist/assets/{BrowserPanel-C15x9bLn.js → BrowserPanel-D5mvMKFU.js} +2 -2
  144. package/ui/dist/assets/CPActivity-B12mt35m.js +1 -0
  145. package/ui/dist/assets/CPAgentDetail-DsdShc-1.js +1 -0
  146. package/ui/dist/assets/CPAgents-j_7C-oQV.js +1 -0
  147. package/ui/dist/assets/CPApprovals-BShKSX9X.js +1 -0
  148. package/ui/dist/assets/CPCosts-CKPlhBDs.js +1 -0
  149. package/ui/dist/assets/CPDashboard-11c0nkxK.js +1 -0
  150. package/ui/dist/assets/CPFiles-BhLEOnXy.js +1 -0
  151. package/ui/dist/assets/CPGoals-Bi3t1b2P.js +1 -0
  152. package/ui/dist/assets/CPInbox-Bbr7khp6.js +11 -0
  153. package/ui/dist/assets/CPIssueDetail-DSdgNK8r.js +1 -0
  154. package/ui/dist/assets/CPIssues-DDEVKhX6.js +1 -0
  155. package/ui/dist/assets/CPLayout-DgPOfyGv.js +17 -0
  156. package/ui/dist/assets/CPOrg-Df73RrRJ.js +8 -0
  157. package/ui/dist/assets/CPRuns-ByioAz8w.js +1 -0
  158. package/ui/dist/assets/{CPSocial-nb-j7sOE.js → CPSocial-Dlnr_w1X.js} +2 -2
  159. package/ui/dist/assets/ChannelsPanel-DQjQCTK5.js +1 -0
  160. package/ui/dist/assets/CheckpointsPanel-C4vKjlAJ.js +1 -0
  161. package/ui/dist/assets/CommandPostHub-C9pp5Giq.js +24 -0
  162. package/ui/dist/assets/CronPanel-C6bzUfrD.js +1 -0
  163. package/ui/dist/assets/DaemonPanel-BA5Tb_UO.js +1 -0
  164. package/ui/dist/assets/{DataTable-B2Ma8hfi.js → DataTable-CH7IYJJh.js} +1 -1
  165. package/ui/dist/assets/{EmptyState-CcKyk5Yn.js → EmptyState-jU6yNDnF.js} +1 -1
  166. package/ui/dist/assets/{EvalHarnessPanel-BqtMc1ZM.js → EvalHarnessPanel-DnYqredY.js} +2 -2
  167. package/ui/dist/assets/EvalPanel-ChO7CD1r.js +1 -0
  168. package/ui/dist/assets/{FilesPanel-3QKvrWPo.js → FilesPanel-CaUkv2is.js} +2 -2
  169. package/ui/dist/assets/FleetPanel-DC_5uj0N.js +1 -0
  170. package/ui/dist/assets/{HomelabPanel-DhrjTX9m.js → HomelabPanel-CE5PGRpL.js} +2 -2
  171. package/ui/dist/assets/InfraView-C-uSlvb9.js +2 -0
  172. package/ui/dist/assets/InlineEditableField-BMQjiE6-.js +1 -0
  173. package/ui/dist/assets/Input-Bu_b3qmY.js +1 -0
  174. package/ui/dist/assets/IntegrationsPanel-DsYpAq43.js +1 -0
  175. package/ui/dist/assets/IntelligenceView-DUdIO1K7.js +2 -0
  176. package/ui/dist/assets/LearningPanel-UpQZC-mA.js +1 -0
  177. package/ui/dist/assets/LogsPanel-ClXJ4fcr.js +1 -0
  178. package/ui/dist/assets/McpPanel-JKgtIERQ.js +1 -0
  179. package/ui/dist/assets/{MemoryGraphPanel-Bzvjmzvk.js → MemoryGraphPanel-Bo2OrvA6.js} +2 -2
  180. package/ui/dist/assets/MemoryWikiPanel-BqJ1AmYm.js +11 -0
  181. package/ui/dist/assets/{MeshPanel-C3LJSlht.js → MeshPanel-BJVGYvwk.js} +2 -2
  182. package/ui/dist/assets/Modal-CAAooiZU.js +1 -0
  183. package/ui/dist/assets/NvidiaPanel-BtCg3G4w.js +1 -0
  184. package/ui/dist/assets/OrganismPanel-DgrTTzcF.js +1 -0
  185. package/ui/dist/assets/OverviewPanel-rVav1Hox.js +1 -0
  186. package/ui/dist/assets/{PageHeader-BimceqQo.js → PageHeader-CnZtP8ek.js} +1 -1
  187. package/ui/dist/assets/PaperclipPanel-C-FKdhiF.js +1 -0
  188. package/ui/dist/assets/{PersonasPanel-L1j78p6H.js → PersonasPanel-BmlxokfB.js} +1 -1
  189. package/ui/dist/assets/RecipesPanel-BNKKChis.js +1 -0
  190. package/ui/dist/assets/SecurityPanel-I7JRHiNy.js +1 -0
  191. package/ui/dist/assets/SelfImprovePanel-u9h0Lt3p.js +1 -0
  192. package/ui/dist/assets/{SelfProposalsPanel-lNmiDThB.js → SelfProposalsPanel-DKl9iBjM.js} +2 -2
  193. package/ui/dist/assets/SessionsPanel-BhRiWI_g.js +1 -0
  194. package/ui/dist/assets/{SessionsTab-JQbltWww.js → SessionsTab-Bk08wyeY.js} +1 -1
  195. package/ui/dist/assets/SettingsPanel-haLfmG2k.js +1 -0
  196. package/ui/dist/assets/SettingsView--gi3fxI8.js +2 -0
  197. package/ui/dist/assets/{SkeletonLoader-atQtpcF5.js → SkeletonLoader-B5v09EF_.js} +1 -1
  198. package/ui/dist/assets/{SkillsPanel-DlFs2ih7.js → SkillsPanel-BlAHFLcQ.js} +1 -1
  199. package/ui/dist/assets/SomaView-CExtS3zw.js +5 -0
  200. package/ui/dist/assets/{StatCard-DciE_Iqc.js → StatCard-BIsyMybM.js} +1 -1
  201. package/ui/dist/assets/{StatusBadge-BtfSPoW2.js → StatusBadge-D5nU7El8.js} +1 -1
  202. package/ui/dist/assets/Tabs-BBYZrBI8.js +1 -0
  203. package/ui/dist/assets/TeamsPanel-LPXJg823.js +1 -0
  204. package/ui/dist/assets/TelemetryPanel-EqpRBmOI.js +1 -0
  205. package/ui/dist/assets/TitanCanvas-BCbWnLMd.js +985 -0
  206. package/ui/dist/assets/ToolsView-CeP0Zz-N.js +2 -0
  207. package/ui/dist/assets/{Tooltip-70UK0E2I.js → Tooltip-BSO2XVpF.js} +1 -1
  208. package/ui/dist/assets/TraceViewer-BKI7o5B0.js +1 -0
  209. package/ui/dist/assets/TrainingPanel-c-RhjdE1.js +1 -0
  210. package/ui/dist/assets/VoiceOverlay-D-gc58b0.js +27 -0
  211. package/ui/dist/assets/VramPanel-C6xc7zgd.js +1 -0
  212. package/ui/dist/assets/{WatchView-C-sGFpVy.js → WatchView-dqBVCVH0.js} +1 -1
  213. package/ui/dist/assets/WorkTab-CBoLNrTM.js +1 -0
  214. package/ui/dist/assets/{WorkflowsPanel-CvgQU1xI.js → WorkflowsPanel-BAnSTOYe.js} +2 -2
  215. package/ui/dist/assets/approvalHeadline-DB9SgR-9.js +1 -0
  216. package/ui/dist/assets/{arrow-left-DwqHtJiU.js → arrow-left-5chqas7J.js} +1 -1
  217. package/ui/dist/assets/briefcase-D4vLzudp.js +6 -0
  218. package/ui/dist/assets/{chart-column-BtNO6sRy.js → chart-column-CdFlBpoP.js} +1 -1
  219. package/ui/dist/assets/check-Bpm1IONe.js +6 -0
  220. package/ui/dist/assets/chevron-down-D7OLjvuD.js +6 -0
  221. package/ui/dist/assets/chevron-right-aQEw2mUW.js +6 -0
  222. package/ui/dist/assets/chevron-up-C5g6pEj8.js +6 -0
  223. package/ui/dist/assets/{circle-check-big-DZRE_MbN.js → circle-check-big-fPhEdP88.js} +1 -1
  224. package/ui/dist/assets/clock-CTsgP_Sn.js +6 -0
  225. package/ui/dist/assets/{dollar-sign-aVG3a5eL.js → dollar-sign-CudFVYFc.js} +1 -1
  226. package/ui/dist/assets/{download-BxiWJU4G.js → download-DZRxDn67.js} +1 -1
  227. package/ui/dist/assets/external-link-BZ0y_Ahx.js +6 -0
  228. package/ui/dist/assets/{eye-off-CkgfFYhm.js → eye-off-BmJF0YYx.js} +1 -1
  229. package/ui/dist/assets/folder-DA43TRCm.js +11 -0
  230. package/ui/dist/assets/{funnel-PkLdxKyC.js → funnel-J3mULzrz.js} +1 -1
  231. package/ui/dist/assets/{git-branch-BM-Gw95X.js → git-branch-oHibJqDq.js} +1 -1
  232. package/ui/dist/assets/{index-D0RJ8701.css → index-BR0vfkIi.css} +1 -1
  233. package/ui/dist/assets/{index-CahJbWSR.js → index-DzwowwSI.js} +20 -20
  234. package/ui/dist/assets/{layers-BuGf4FIJ.js → layers-DsyEyu7z.js} +1 -1
  235. package/ui/dist/assets/{legacy-CR6o4t-y.js → legacy-8ITl64sV.js} +1 -1
  236. package/ui/dist/assets/{lightbulb-n8gc_XAL.js → lightbulb-C54Ske-p.js} +1 -1
  237. package/ui/dist/assets/list-todo-Cnd4rdoK.js +6 -0
  238. package/ui/dist/assets/loader-circle-1YOBsoQp.js +6 -0
  239. package/ui/dist/assets/network-DbGDAdrn.js +6 -0
  240. package/ui/dist/assets/{pause-DCV52koX.js → pause-CYhO_uQo.js} +1 -1
  241. package/ui/dist/assets/{play-CcJ9BnCh.js → play-DVY9c5Ck.js} +1 -1
  242. package/ui/dist/assets/{plug-CfWBXfCl.js → plug-BcXjlPUL.js} +1 -1
  243. package/ui/dist/assets/plus-Csu2v9GN.js +6 -0
  244. package/ui/dist/assets/{proxy-CzZDfLmm.js → proxy-DxS2_9D7.js} +1 -1
  245. package/ui/dist/assets/rotate-ccw-Co-_W04j.js +6 -0
  246. package/ui/dist/assets/save-Btx-kpoW.js +6 -0
  247. package/ui/dist/assets/search-0hXTwEZR.js +6 -0
  248. package/ui/dist/assets/send-TEpapzQR.js +6 -0
  249. package/ui/dist/assets/shield-check-DjBJXZUr.js +6 -0
  250. package/ui/dist/assets/{square-DJpUhlxi.js → square-OweUvjP-.js} +1 -1
  251. package/ui/dist/assets/{target-DWcmM_9m.js → target-BRW80Xer.js} +1 -1
  252. package/ui/dist/assets/terminal-BtiqJ628.js +16 -0
  253. package/ui/dist/assets/{toggle-right-YusFQ69L.js → toggle-right-CKtSrl28.js} +1 -1
  254. package/ui/dist/assets/{trash-2-CK7yQ55V.js → trash-2-DgWrHVax.js} +1 -1
  255. package/ui/dist/assets/{trending-up-DGjFyubC.js → trending-up-MpIrE4j6.js} +1 -1
  256. package/ui/dist/assets/{trophy-uQv_NgDB.js → trophy-CECuZNhX.js} +1 -1
  257. package/ui/dist/assets/users-dZgv4ePG.js +16 -0
  258. package/ui/dist/assets/wrench-CDz3xYve.js +11 -0
  259. package/ui/dist/index.html +2 -2
  260. package/ui/dist/assets/AutopilotPanel-DtEet1hJ.js +0 -1
  261. package/ui/dist/assets/BackupPanel-BGP8p3l3.js +0 -1
  262. package/ui/dist/assets/CPAgents-DYUtPzSq.js +0 -1
  263. package/ui/dist/assets/CPDashboard-Bf0-SyCh.js +0 -6
  264. package/ui/dist/assets/CPFiles-CxgxjQcO.js +0 -1
  265. package/ui/dist/assets/CPGoals-BsmCMTvT.js +0 -1
  266. package/ui/dist/assets/CPInbox-tMSbmQ9H.js +0 -11
  267. package/ui/dist/assets/ChannelsPanel-DP5C2OKd.js +0 -1
  268. package/ui/dist/assets/CheckpointsPanel-DlranVLZ.js +0 -1
  269. package/ui/dist/assets/CommandPostHub-BgxIa4Ev.js +0 -29
  270. package/ui/dist/assets/CronPanel-LoT5yKwJ.js +0 -1
  271. package/ui/dist/assets/DaemonPanel-DBGMqaE_.js +0 -1
  272. package/ui/dist/assets/EvalPanel-Bc33j0pN.js +0 -1
  273. package/ui/dist/assets/FleetPanel-CSsXuQYj.js +0 -1
  274. package/ui/dist/assets/InfraView-CR6HyrL6.js +0 -2
  275. package/ui/dist/assets/InlineEditableField-CnvF-yFR.js +0 -1
  276. package/ui/dist/assets/Input-GTHp2Rkr.js +0 -1
  277. package/ui/dist/assets/IntegrationsPanel-CymCRE3T.js +0 -1
  278. package/ui/dist/assets/IntelligenceView-C1IHxJRC.js +0 -2
  279. package/ui/dist/assets/LearningPanel-DOCES3lH.js +0 -1
  280. package/ui/dist/assets/LogsPanel-BLnAqEaZ.js +0 -1
  281. package/ui/dist/assets/McpPanel-ChUzmr3z.js +0 -1
  282. package/ui/dist/assets/MemoryWikiPanel-Dwk3Aqwd.js +0 -11
  283. package/ui/dist/assets/NvidiaPanel-CeZK_-CV.js +0 -1
  284. package/ui/dist/assets/OrganismPanel-BB6YOiQV.js +0 -1
  285. package/ui/dist/assets/OverviewPanel-BmtBhQnv.js +0 -1
  286. package/ui/dist/assets/PaperclipPanel-C-brgwA3.js +0 -1
  287. package/ui/dist/assets/RecipesPanel-34lCfynJ.js +0 -1
  288. package/ui/dist/assets/SecurityPanel-CBTPWLj6.js +0 -1
  289. package/ui/dist/assets/SelfImprovePanel-BrPbFHhG.js +0 -1
  290. package/ui/dist/assets/SessionsPanel-DAEYIn83.js +0 -1
  291. package/ui/dist/assets/SettingsPanel-CzRROAYQ.js +0 -1
  292. package/ui/dist/assets/SettingsView-CN7ii2uw.js +0 -2
  293. package/ui/dist/assets/SomaView-Ba642Oqb.js +0 -5
  294. package/ui/dist/assets/TeamsPanel-DKQ5z2Qe.js +0 -1
  295. package/ui/dist/assets/TelemetryPanel-B6KAc55Q.js +0 -1
  296. package/ui/dist/assets/TitanCanvas-C-s0A-lv.js +0 -1092
  297. package/ui/dist/assets/ToolsView-Dei0KMP0.js +0 -2
  298. package/ui/dist/assets/TraceViewer-BniolyBx.js +0 -1
  299. package/ui/dist/assets/TrainingPanel-Bz4CTPGW.js +0 -1
  300. package/ui/dist/assets/VoiceOverlay-CmNCrLcd.js +0 -37
  301. package/ui/dist/assets/VramPanel-Xh_OtRDR.js +0 -1
  302. package/ui/dist/assets/WorkTab-BjLNmgIK.js +0 -1
@@ -0,0 +1,231 @@
1
+ #!/usr/bin/env node
2
+ import { Router } from "express";
3
+ import logger from "../../utils/logger.js";
4
+ import { loadConfig } from "../../config/config.js";
5
+ import {
6
+ initAutopilot,
7
+ stopAutopilot,
8
+ runAutopilotNow,
9
+ getAutopilotStatus,
10
+ getRunHistory,
11
+ setAutopilotDryRun
12
+ } from "../../agent/autopilot.js";
13
+ import {
14
+ listGoals,
15
+ createGoal,
16
+ getGoal,
17
+ deleteGoal,
18
+ updateGoal,
19
+ completeSubtask,
20
+ addSubtask,
21
+ dedupeGoalsBulk
22
+ } from "../../agent/goals.js";
23
+ import {
24
+ getDaemonStatus,
25
+ pauseDaemonManual,
26
+ resumeDaemon,
27
+ titanEvents
28
+ } from "../../agent/daemon.js";
29
+ const COMPONENT = "AgentsRouter";
30
+ const DAEMON_SSE_EVENTS = [
31
+ "daemon:started",
32
+ "daemon:stopped",
33
+ "daemon:paused",
34
+ "daemon:resumed",
35
+ "daemon:heartbeat",
36
+ "goal:subtask:ready",
37
+ "health:ollama:down",
38
+ "health:ollama:degraded",
39
+ "cron:stuck",
40
+ "initiative:start",
41
+ "initiative:complete",
42
+ "initiative:no_progress",
43
+ "initiative:tool_call",
44
+ "initiative:tool_result",
45
+ "initiative:round"
46
+ ];
47
+ function createLifecycleRouter() {
48
+ const router = Router();
49
+ router.get("/autopilot/status", (_req, res) => {
50
+ res.json(getAutopilotStatus());
51
+ });
52
+ router.get("/autopilot/history", (req, res) => {
53
+ const limit = parseInt(req.query.limit, 10) || 30;
54
+ res.json(getRunHistory(limit));
55
+ });
56
+ router.post("/autopilot/run", async (req, res) => {
57
+ try {
58
+ const dryRun = typeof req.body?.dryRun === "boolean" ? req.body.dryRun : void 0;
59
+ const result = await runAutopilotNow({ dryRun });
60
+ res.json(result);
61
+ } catch (e) {
62
+ logger.error(COMPONENT, `Endpoint error: ${e.message}`);
63
+ res.status(500).json({ error: "Something went wrong on our end. Please try again in a moment." });
64
+ }
65
+ });
66
+ router.post("/autopilot/toggle", (req, res) => {
67
+ try {
68
+ const cfg = loadConfig();
69
+ const enable = typeof req.body.enabled === "boolean" ? req.body.enabled : !cfg.autopilot.enabled;
70
+ const dryRun = typeof req.body.dryRun === "boolean" ? req.body.dryRun : void 0;
71
+ cfg.autopilot.enabled = enable;
72
+ if (typeof dryRun === "boolean") {
73
+ cfg.autopilot.dryRun = dryRun;
74
+ setAutopilotDryRun(dryRun);
75
+ }
76
+ if (enable) {
77
+ initAutopilot(cfg);
78
+ } else {
79
+ stopAutopilot();
80
+ }
81
+ const status = getAutopilotStatus();
82
+ res.json({ enabled: enable, dryRun: status.dryRun });
83
+ } catch (e) {
84
+ logger.error(COMPONENT, `Endpoint error: ${e.message}`);
85
+ res.status(500).json({ error: "Something went wrong on our end. Please try again in a moment." });
86
+ }
87
+ });
88
+ router.get("/goals", (_req, res) => {
89
+ res.json({ goals: listGoals() });
90
+ });
91
+ router.post("/goals", (req, res) => {
92
+ const { title, description, subtasks, priority, tags, force } = req.body;
93
+ if (!title) {
94
+ res.status(400).json({ error: "title is required" });
95
+ return;
96
+ }
97
+ try {
98
+ const goal = createGoal({
99
+ title,
100
+ description: description || "",
101
+ subtasks: subtasks || [],
102
+ priority,
103
+ tags,
104
+ force: !!force
105
+ });
106
+ res.status(201).json({ goal });
107
+ } catch (err) {
108
+ res.status(429).json({ error: err.message });
109
+ }
110
+ });
111
+ router.get("/goals/dedupe", (_req, res) => {
112
+ const result = dedupeGoalsBulk();
113
+ res.status(200).json({ success: true, ...result });
114
+ });
115
+ router.get("/goals/:id", (req, res) => {
116
+ const goal = getGoal(req.params.id);
117
+ if (!goal) {
118
+ res.status(404).json({ error: "Goal not found" });
119
+ return;
120
+ }
121
+ res.json({ goal });
122
+ });
123
+ router.delete("/goals/:id", (req, res) => {
124
+ const deleted = deleteGoal(req.params.id);
125
+ if (!deleted) {
126
+ res.status(404).json({ error: "Goal not found" });
127
+ return;
128
+ }
129
+ res.json({ deleted: true });
130
+ });
131
+ router.patch("/goals/:id", (req, res) => {
132
+ const updated = updateGoal(req.params.id, req.body || {});
133
+ if (!updated) {
134
+ res.status(404).json({ error: "Goal not found" });
135
+ return;
136
+ }
137
+ res.json({ goal: updated });
138
+ });
139
+ router.post("/goals/:id/subtasks", (req, res) => {
140
+ const { title, description } = req.body;
141
+ if (!title) {
142
+ res.status(400).json({ error: "title is required" });
143
+ return;
144
+ }
145
+ const subtask = addSubtask(req.params.id, title, description || "");
146
+ if (!subtask) {
147
+ res.status(404).json({ error: "Goal not found" });
148
+ return;
149
+ }
150
+ res.status(201).json({ subtask });
151
+ });
152
+ router.post("/goals/:id/subtasks/:sid/complete", (req, res) => {
153
+ const ok = completeSubtask(req.params.id, req.params.sid, req.body.result || "Completed via UI");
154
+ if (!ok) {
155
+ res.status(404).json({ error: "Goal or subtask not found" });
156
+ return;
157
+ }
158
+ res.json({ completed: true });
159
+ });
160
+ router.post("/goals/:id/subtasks/:sid/retry", async (req, res) => {
161
+ const { retrySubtask } = await import("../../agent/goals.js");
162
+ const ok = retrySubtask(req.params.id, req.params.sid);
163
+ if (!ok) {
164
+ res.status(404).json({ error: "Goal or subtask not found" });
165
+ return;
166
+ }
167
+ res.json({ retried: true });
168
+ });
169
+ router.patch("/goals/:id/subtasks/:sid", async (req, res) => {
170
+ const { updateSubtask } = await import("../../agent/goals.js");
171
+ const { title, description } = req.body || {};
172
+ const ok = updateSubtask(req.params.id, req.params.sid, { title, description });
173
+ if (!ok) {
174
+ res.status(404).json({ error: "Goal or subtask not found" });
175
+ return;
176
+ }
177
+ res.json({ updated: true });
178
+ });
179
+ router.get("/daemon/status", (_req, res) => {
180
+ res.json(getDaemonStatus());
181
+ });
182
+ router.post("/daemon/stop", (_req, res) => {
183
+ pauseDaemonManual();
184
+ res.json({ paused: true });
185
+ });
186
+ router.post("/daemon/resume", (_req, res) => {
187
+ resumeDaemon();
188
+ res.json({ resumed: true });
189
+ });
190
+ router.get("/daemon/stream", (req, res) => {
191
+ res.writeHead(200, {
192
+ "Content-Type": "text/event-stream",
193
+ "Cache-Control": "no-cache",
194
+ Connection: "keep-alive",
195
+ "X-Accel-Buffering": "no"
196
+ });
197
+ const onEvent = (event, data) => {
198
+ try {
199
+ res.write(`event: ${event}
200
+ data: ${JSON.stringify(data)}
201
+
202
+ `);
203
+ } catch {
204
+ }
205
+ };
206
+ const events = DAEMON_SSE_EVENTS;
207
+ const listeners = /* @__PURE__ */ new Map();
208
+ for (const evt of events) {
209
+ const handler = (data) => onEvent(evt, data);
210
+ listeners.set(evt, handler);
211
+ titanEvents.on(evt, handler);
212
+ }
213
+ const keepalive = setInterval(() => {
214
+ try {
215
+ res.write(": keepalive\n\n");
216
+ } catch {
217
+ }
218
+ }, 15e3);
219
+ req.on("close", () => {
220
+ clearInterval(keepalive);
221
+ for (const [evt, handler] of listeners) {
222
+ titanEvents.removeListener(evt, handler);
223
+ }
224
+ });
225
+ });
226
+ return router;
227
+ }
228
+ export {
229
+ createLifecycleRouter
230
+ };
231
+ //# sourceMappingURL=agents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/gateway/routes/agents.ts"],"sourcesContent":["/**\n * Agents Router (Lifecycle)\n *\n * Extracted from gateway/server.ts.\n * Consolidates autopilot, goals, and daemon routes.\n */\n\nimport { Router, type Request, type Response } from 'express';\nimport logger from '../../utils/logger.js';\nimport { loadConfig } from '../../config/config.js';\n\n// Autopilot\nimport {\n initAutopilot,\n stopAutopilot,\n runAutopilotNow,\n getAutopilotStatus,\n getRunHistory,\n setAutopilotDryRun,\n} from '../../agent/autopilot.js';\n\n// Goals\nimport {\n listGoals,\n createGoal,\n getGoal,\n deleteGoal,\n updateGoal,\n completeSubtask,\n addSubtask,\n dedupeGoalsBulk,\n} from '../../agent/goals.js';\n\n// Daemon\nimport {\n getDaemonStatus,\n pauseDaemonManual,\n resumeDaemon,\n titanEvents,\n} from '../../agent/daemon.js';\n\nconst COMPONENT = 'AgentsRouter';\n\nconst DAEMON_SSE_EVENTS = ['daemon:started', 'daemon:stopped', 'daemon:paused', 'daemon:resumed',\n 'daemon:heartbeat', 'goal:subtask:ready', 'health:ollama:down',\n 'health:ollama:degraded', 'cron:stuck',\n 'initiative:start', 'initiative:complete', 'initiative:no_progress',\n 'initiative:tool_call', 'initiative:tool_result', 'initiative:round'];\n\nexport function createLifecycleRouter(): Router {\n const router = Router();\n\n // ── Autopilot ───────────────────────────────────────────────\n router.get('/autopilot/status', (_req, res) => {\n res.json(getAutopilotStatus());\n });\n\n router.get('/autopilot/history', (req, res) => {\n const limit = parseInt(req.query.limit as string, 10) || 30;\n res.json(getRunHistory(limit));\n });\n\n router.post('/autopilot/run', async (req, res) => {\n try {\n const dryRun = typeof req.body?.dryRun === 'boolean' ? req.body.dryRun : undefined;\n const result = await runAutopilotNow({ dryRun });\n res.json(result);\n } catch (e) {\n logger.error(COMPONENT, `Endpoint error: ${(e as Error).message}`); res.status(500).json({ error: 'Something went wrong on our end. Please try again in a moment.' });\n }\n });\n\n router.post('/autopilot/toggle', (req, res) => {\n try {\n const cfg = loadConfig();\n const enable = typeof req.body.enabled === 'boolean' ? req.body.enabled : !cfg.autopilot.enabled;\n const dryRun = typeof req.body.dryRun === 'boolean' ? req.body.dryRun : undefined;\n\n cfg.autopilot.enabled = enable;\n if (typeof dryRun === 'boolean') {\n (cfg.autopilot as Record<string, unknown>).dryRun = dryRun;\n setAutopilotDryRun(dryRun);\n }\n\n if (enable) {\n initAutopilot(cfg);\n } else {\n stopAutopilot();\n }\n const status = getAutopilotStatus();\n res.json({ enabled: enable, dryRun: status.dryRun });\n } catch (e) {\n logger.error(COMPONENT, `Endpoint error: ${(e as Error).message}`); res.status(500).json({ error: 'Something went wrong on our end. Please try again in a moment.' });\n }\n });\n\n // ── Goals API ─────────────────────────────────────────────\n\n router.get('/goals', (_req, res) => {\n res.json({ goals: listGoals() });\n });\n\n router.post('/goals', (req, res) => {\n const { title, description, subtasks, priority, tags, force } = req.body;\n if (!title) { res.status(400).json({ error: 'title is required' }); return; }\n try {\n const goal = createGoal({\n title,\n description: description || '',\n subtasks: subtasks || [],\n priority,\n tags,\n force: !!force,\n });\n res.status(201).json({ goal });\n } catch (err) {\n res.status(429).json({ error: (err as Error).message });\n }\n });\n\n router.get('/goals/dedupe', (_req, res) => {\n const result = dedupeGoalsBulk();\n res.status(200).json({ success: true, ...result });\n });\n\n router.get('/goals/:id', (req, res) => {\n const goal = getGoal(req.params.id);\n if (!goal) { res.status(404).json({ error: 'Goal not found' }); return; }\n res.json({ goal });\n });\n\n router.delete('/goals/:id', (req, res) => {\n const deleted = deleteGoal(req.params.id);\n if (!deleted) { res.status(404).json({ error: 'Goal not found' }); return; }\n res.json({ deleted: true });\n });\n\n // v4.3.1: update a goal's top-level fields (status, priority, title, description, etc.).\n // Previously the only way to pause a stuck goal was to hand-edit ~/.titan/goals.json and\n // restart the gateway — which is what we did on Titan PC to clear 3 failed Upwork goals.\n // This endpoint closes that gap so the UI \"pause\" action works end-to-end.\n router.patch('/goals/:id', (req, res) => {\n const updated = updateGoal(req.params.id, req.body || {});\n if (!updated) { res.status(404).json({ error: 'Goal not found' }); return; }\n res.json({ goal: updated });\n });\n\n router.post('/goals/:id/subtasks', (req, res) => {\n const { title, description } = req.body;\n if (!title) { res.status(400).json({ error: 'title is required' }); return; }\n const subtask = addSubtask(req.params.id, title, description || '');\n if (!subtask) { res.status(404).json({ error: 'Goal not found' }); return; }\n res.status(201).json({ subtask });\n });\n\n router.post('/goals/:id/subtasks/:sid/complete', (req, res) => {\n const ok = completeSubtask(req.params.id, req.params.sid, req.body.result || 'Completed via UI');\n if (!ok) { res.status(404).json({ error: 'Goal or subtask not found' }); return; }\n res.json({ completed: true });\n });\n\n // v4.1: retry a failed subtask — resets status, clears error, zeros retries.\n router.post('/goals/:id/subtasks/:sid/retry', async (req, res) => {\n const { retrySubtask } = await import('../../agent/goals.js');\n const ok = retrySubtask(req.params.id, req.params.sid);\n if (!ok) { res.status(404).json({ error: 'Goal or subtask not found' }); return; }\n res.json({ retried: true });\n });\n\n // v4.1: edit a subtask's title/description.\n router.patch('/goals/:id/subtasks/:sid', async (req, res) => {\n const { updateSubtask } = await import('../../agent/goals.js');\n const { title, description } = req.body || {};\n const ok = updateSubtask(req.params.id, req.params.sid, { title, description });\n if (!ok) { res.status(404).json({ error: 'Goal or subtask not found' }); return; }\n res.json({ updated: true });\n });\n\n // ── Daemon API ────────────────────────────────────────────\n\n router.get('/daemon/status', (_req, res) => {\n res.json(getDaemonStatus());\n });\n\n router.post('/daemon/stop', (_req, res) => {\n pauseDaemonManual();\n res.json({ paused: true });\n });\n\n router.post('/daemon/resume', (_req, res) => {\n resumeDaemon();\n res.json({ resumed: true });\n });\n\n router.get('/daemon/stream', (req, res) => {\n res.writeHead(200, {\n 'Content-Type': 'text/event-stream',\n 'Cache-Control': 'no-cache',\n Connection: 'keep-alive',\n 'X-Accel-Buffering': 'no',\n });\n\n const onEvent = (event: string, data: unknown) => {\n try { res.write(`event: ${event}\\ndata: ${JSON.stringify(data)}\\n\\n`); } catch { /* client gone */ }\n };\n\n const events = DAEMON_SSE_EVENTS;\n\n // Store per-client listener references so we only remove THIS client's listeners on disconnect\n const listeners = new Map<string, (data: unknown) => void>();\n for (const evt of events) {\n const handler = (data: unknown) => onEvent(evt, data);\n listeners.set(evt, handler);\n titanEvents.on(evt, handler);\n }\n\n const keepalive = setInterval(() => {\n try { res.write(': keepalive\\n\\n'); } catch { /* client gone */ }\n }, 15_000);\n\n req.on('close', () => {\n clearInterval(keepalive);\n for (const [evt, handler] of listeners) {\n titanEvents.removeListener(evt, handler);\n }\n });\n });\n\n return router;\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,32 @@
1
+ #!/usr/bin/env node
2
+ import { Router } from "express";
3
+ import { listAgents, spawnAgent, stopAgent, getAgentCapacity } from "../../agent/multiAgent.js";
4
+ function createAgentsRouter() {
5
+ const router = Router();
6
+ router.get("/agents", (_req, res) => {
7
+ res.json({ agents: listAgents(), capacity: getAgentCapacity() });
8
+ });
9
+ router.post("/agents/spawn", (req, res) => {
10
+ const { name, model, systemPrompt } = req.body;
11
+ if (!name) {
12
+ res.status(400).json({ error: "name is required" });
13
+ return;
14
+ }
15
+ const result = spawnAgent({ name, model, systemPrompt });
16
+ res.json(result);
17
+ });
18
+ router.post("/agents/stop", (req, res) => {
19
+ const { agentId } = req.body;
20
+ if (!agentId) {
21
+ res.status(400).json({ error: "agentId is required" });
22
+ return;
23
+ }
24
+ const result = stopAgent(agentId);
25
+ res.json(result);
26
+ });
27
+ return router;
28
+ }
29
+ export {
30
+ createAgentsRouter
31
+ };
32
+ //# sourceMappingURL=agentsRouter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/gateway/routes/agentsRouter.ts"],"sourcesContent":["/**\n * Agents Router\n *\n * Extracted from gateway/server.ts.\n * Consolidates multi-agent list/spawn/stop routes.\n */\n\nimport { Router } from 'express';\nimport { listAgents, spawnAgent, stopAgent, getAgentCapacity } from '../../agent/multiAgent.js';\n\nexport function createAgentsRouter(): Router {\n const router = Router();\n\n router.get('/agents', (_req, res) => {\n res.json({ agents: listAgents(), capacity: getAgentCapacity() });\n });\n\n router.post('/agents/spawn', (req, res) => {\n const { name, model, systemPrompt } = req.body;\n if (!name) { res.status(400).json({ error: 'name is required' }); return; }\n const result = spawnAgent({ name, model, systemPrompt });\n res.json(result);\n });\n\n router.post('/agents/stop', (req, res) => {\n const { agentId } = req.body;\n if (!agentId) { res.status(400).json({ error: 'agentId is required' }); return; }\n const result = stopAgent(agentId);\n res.json(result);\n });\n\n return router;\n}\n"],"mappings":";AAOA,SAAS,cAAc;AACvB,SAAS,YAAY,YAAY,WAAW,wBAAwB;AAE7D,SAAS,qBAA6B;AAC3C,QAAM,SAAS,OAAO;AAEtB,SAAO,IAAI,WAAW,CAAC,MAAM,QAAQ;AACnC,QAAI,KAAK,EAAE,QAAQ,WAAW,GAAG,UAAU,iBAAiB,EAAE,CAAC;AAAA,EACjE,CAAC;AAED,SAAO,KAAK,iBAAiB,CAAC,KAAK,QAAQ;AACzC,UAAM,EAAE,MAAM,OAAO,aAAa,IAAI,IAAI;AAC1C,QAAI,CAAC,MAAM;AAAE,UAAI,OAAO,GAAG,EAAE,KAAK,EAAE,OAAO,mBAAmB,CAAC;AAAG;AAAA,IAAQ;AAC1E,UAAM,SAAS,WAAW,EAAE,MAAM,OAAO,aAAa,CAAC;AACvD,QAAI,KAAK,MAAM;AAAA,EACjB,CAAC;AAED,SAAO,KAAK,gBAAgB,CAAC,KAAK,QAAQ;AACxC,UAAM,EAAE,QAAQ,IAAI,IAAI;AACxB,QAAI,CAAC,SAAS;AAAE,UAAI,OAAO,GAAG,EAAE,KAAK,EAAE,OAAO,sBAAsB,CAAC;AAAG;AAAA,IAAQ;AAChF,UAAM,SAAS,UAAU,OAAO;AAChC,QAAI,KAAK,MAAM;AAAA,EACjB,CAAC;AAED,SAAO;AACT;","names":[]}
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/env node
2
+ import { Router } from "express";
3
+ function createCheckpointsRouter() {
4
+ const router = Router();
5
+ router.get("/", async (_req, res) => {
6
+ try {
7
+ const { listCheckpoints } = await import("../../agent/checkpoint.js");
8
+ res.json({ checkpoints: listCheckpoints() });
9
+ } catch {
10
+ res.json({ checkpoints: [] });
11
+ }
12
+ });
13
+ router.get("/:sessionId", async (req, res) => {
14
+ try {
15
+ const round = req.query.round ? parseInt(req.query.round, 10) : void 0;
16
+ const { loadCheckpoint } = await import("../../agent/checkpoint.js");
17
+ const cp = loadCheckpoint(req.params.sessionId, round);
18
+ if (!cp) {
19
+ res.status(404).json({ error: "Checkpoint not found" });
20
+ return;
21
+ }
22
+ res.json(cp);
23
+ } catch {
24
+ res.status(500).json({ error: "Checkpoint unavailable" });
25
+ }
26
+ });
27
+ router.delete("/:sessionId", async (req, res) => {
28
+ try {
29
+ const { clearCheckpoints } = await import("../../agent/checkpoint.js");
30
+ clearCheckpoints(req.params.sessionId);
31
+ res.json({ ok: true });
32
+ } catch {
33
+ res.status(500).json({ error: "Checkpoint unavailable" });
34
+ }
35
+ });
36
+ return router;
37
+ }
38
+ export {
39
+ createCheckpointsRouter
40
+ };
41
+ //# sourceMappingURL=checkpoints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/gateway/routes/checkpoints.ts"],"sourcesContent":["import { Router } from 'express';\n\nexport function createCheckpointsRouter(): Router {\n const router = Router();\n\n router.get('/', async (_req, res) => {\n try {\n const { listCheckpoints } = await import('../../agent/checkpoint.js');\n res.json({ checkpoints: listCheckpoints() });\n } catch { res.json({ checkpoints: [] }); }\n });\n\n router.get('/:sessionId', async (req, res) => {\n try {\n const round = req.query.round ? parseInt(req.query.round as string, 10) : undefined;\n const { loadCheckpoint } = await import('../../agent/checkpoint.js');\n const cp = loadCheckpoint(req.params.sessionId, round);\n if (!cp) { res.status(404).json({ error: 'Checkpoint not found' }); return; }\n res.json(cp);\n } catch { res.status(500).json({ error: 'Checkpoint unavailable' }); }\n });\n\n router.delete('/:sessionId', async (req, res) => {\n try {\n const { clearCheckpoints } = await import('../../agent/checkpoint.js');\n clearCheckpoints(req.params.sessionId);\n res.json({ ok: true });\n } catch { res.status(500).json({ error: 'Checkpoint unavailable' }); }\n });\n\n return router;\n}\n"],"mappings":";AAAA,SAAS,cAAc;AAEhB,SAAS,0BAAkC;AAChD,QAAM,SAAS,OAAO;AAEtB,SAAO,IAAI,KAAK,OAAO,MAAM,QAAQ;AACnC,QAAI;AACF,YAAM,EAAE,gBAAgB,IAAI,MAAM,OAAO,2BAA2B;AACpE,UAAI,KAAK,EAAE,aAAa,gBAAgB,EAAE,CAAC;AAAA,IAC7C,QAAQ;AAAE,UAAI,KAAK,EAAE,aAAa,CAAC,EAAE,CAAC;AAAA,IAAG;AAAA,EAC3C,CAAC;AAED,SAAO,IAAI,eAAe,OAAO,KAAK,QAAQ;AAC5C,QAAI;AACF,YAAM,QAAQ,IAAI,MAAM,QAAQ,SAAS,IAAI,MAAM,OAAiB,EAAE,IAAI;AAC1E,YAAM,EAAE,eAAe,IAAI,MAAM,OAAO,2BAA2B;AACnE,YAAM,KAAK,eAAe,IAAI,OAAO,WAAW,KAAK;AACrD,UAAI,CAAC,IAAI;AAAE,YAAI,OAAO,GAAG,EAAE,KAAK,EAAE,OAAO,uBAAuB,CAAC;AAAG;AAAA,MAAQ;AAC5E,UAAI,KAAK,EAAE;AAAA,IACb,QAAQ;AAAE,UAAI,OAAO,GAAG,EAAE,KAAK,EAAE,OAAO,yBAAyB,CAAC;AAAA,IAAG;AAAA,EACvE,CAAC;AAED,SAAO,OAAO,eAAe,OAAO,KAAK,QAAQ;AAC/C,QAAI;AACF,YAAM,EAAE,iBAAiB,IAAI,MAAM,OAAO,2BAA2B;AACrE,uBAAiB,IAAI,OAAO,SAAS;AACrC,UAAI,KAAK,EAAE,IAAI,KAAK,CAAC;AAAA,IACvB,QAAQ;AAAE,UAAI,OAAO,GAAG,EAAE,KAAK,EAAE,OAAO,yBAAyB,CAAC;AAAA,IAAG;AAAA,EACvE,CAAC;AAED,SAAO;AACT;","names":[]}