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
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# Known Issues
|
|
2
|
+
|
|
3
|
+
> Bugs, broken things, workarounds, and suspicious behavior.
|
|
4
|
+
> Each entry is a typed memory.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Issue: npm test appears to hang
|
|
9
|
+
|
|
10
|
+
- **type:** BUG
|
|
11
|
+
- **date:** 2026-05-03
|
|
12
|
+
- **source:** KIMI-COO observation
|
|
13
|
+
- **confidence:** high
|
|
14
|
+
- **verified_by:** `npx vitest run --reporter=basic` completed successfully
|
|
15
|
+
- **content:** Running `npm test` (which uses default vitest reporter) appears to hang with no output. Root cause: test suite takes ~181s to complete, and the default command timeout is too short. The tests are NOT broken — they just take ~3 minutes.
|
|
16
|
+
- **workaround:** Use `npx vitest run --reporter=basic` or wait longer. For fast feedback, run `npx vitest run tests/unit/` (~8s).
|
|
17
|
+
- **review_after:** 2026-05-10
|
|
18
|
+
|
|
19
|
+
## Issue: Version mismatch between package.json and README
|
|
20
|
+
|
|
21
|
+
- **type:** BUG
|
|
22
|
+
- **date:** 2026-05-03
|
|
23
|
+
- **source:** KIMI-COO observation
|
|
24
|
+
- **confidence:** high
|
|
25
|
+
- **verified_by:** File read
|
|
26
|
+
- **content:** `package.json` says v5.5.3 but `README.md` says v5.4.3. Needs sync.
|
|
27
|
+
- **workaround:** None — cosmetic issue.
|
|
28
|
+
- **review_after:** Next release
|
|
29
|
+
|
|
30
|
+
## Issue: MacBook repo 1 commit ahead of origin
|
|
31
|
+
|
|
32
|
+
- **type:** RISK
|
|
33
|
+
- **date:** 2026-05-03
|
|
34
|
+
- **source:** KIMI-COO observation
|
|
35
|
+
- **confidence:** high
|
|
36
|
+
- **verified_by:** `git status` and `git log`
|
|
37
|
+
- **content:** MacBook `TITAN-main` has commit `95fbb07` (handoff doc) not present on origin or Titan PC. Risk of divergence.
|
|
38
|
+
- **workaround:** Push the commit or reset to origin/main.
|
|
39
|
+
- **review_after:** Next session
|
|
40
|
+
|
|
41
|
+
## Issue: titan-saas has uncommitted work on Titan PC
|
|
42
|
+
|
|
43
|
+
- **type:** RISK
|
|
44
|
+
- **date:** 2026-05-03
|
|
45
|
+
- **source:** KIMI-COO recon
|
|
46
|
+
- **confidence:** high
|
|
47
|
+
- **verified_by:** `ssh titan 'cd ~/titan-saas && git status'`
|
|
48
|
+
- **content:** Titan PC `~/titan-saas` has many modified files and untracked files. Risk of losing work if machine crashes or disk fails.
|
|
49
|
+
- **workaround:** Commit the work or decide to discard.
|
|
50
|
+
- **review_after:** Next session
|
|
51
|
+
|
|
52
|
+
## Issue: titan-synapse has uncommitted work on MacBook
|
|
53
|
+
|
|
54
|
+
- **type:** RISK
|
|
55
|
+
- **date:** 2026-05-03
|
|
56
|
+
- **source:** KIMI-COO recon
|
|
57
|
+
- **confidence:** high
|
|
58
|
+
- **verified_by:** `git status` in titan-synapse folder
|
|
59
|
+
- **content:** MacBook `~/Desktop/titan-synapse` has uncommitted Rust/Python changes.
|
|
60
|
+
- **workaround:** Commit the work or decide to discard.
|
|
61
|
+
- **review_after:** Next session
|
|
62
|
+
|
|
63
|
+
## Issue: Stale TITAN folders on Titan PC Desktop
|
|
64
|
+
|
|
65
|
+
- **type:** RISK
|
|
66
|
+
- **date:** 2026-05-03
|
|
67
|
+
- **source:** KIMI-COO recon
|
|
68
|
+
- **confidence:** medium
|
|
69
|
+
- **verified_by:** `ssh titan 'ls -la ~/Desktop/'`
|
|
70
|
+
- **content:** Titan PC Desktop has `TITAN`, `NewTitan22626`, `TITAN_GitHub`, `TITAN_Original_Project` — potentially stale copies that could confuse future work.
|
|
71
|
+
- **workaround:** Archive and delete after Tony confirms they're not needed.
|
|
72
|
+
- **review_after:** Next session
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
*Last updated: 2026-05-03 by KIMI-COO 🧠*
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Reflections
|
|
2
|
+
|
|
3
|
+
> Failure → root cause → rule to remember.
|
|
4
|
+
> Each entry is a typed memory.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Reflection: npm test "hang" was actually just slow
|
|
9
|
+
|
|
10
|
+
- **type:** REFLECTION
|
|
11
|
+
- **date:** 2026-05-03
|
|
12
|
+
- **context:** Running `npm test` on TITAN repo
|
|
13
|
+
- **what_failed:** Command appeared to hang with zero output. Had to SIGTERM kill it.
|
|
14
|
+
- **evidence:**
|
|
15
|
+
- First run: killed after ~2.5 min with no output
|
|
16
|
+
- Second run with verbose reporter: tests actually running, just taking time
|
|
17
|
+
- Final verification: `npx vitest run --reporter=basic` completed in 181.85s with 249 files passed, 6593 tests passed
|
|
18
|
+
- **root_cause:** Default command timeout was too short. TITAN's test suite loads 200+ modules and takes ~3 minutes to complete. The vitest fork pool with `--max-old-space-size=12288` takes time to initialize and run.
|
|
19
|
+
- **fix:** Use `npx vitest run --reporter=basic` for full suite, or `npx vitest run tests/unit/` for fast feedback (~8s).
|
|
20
|
+
- **verification:** ✅ Ran full suite successfully. 249 files, 6593 tests, 181.85s.
|
|
21
|
+
- **rule_to_remember:** "Tests hanging" on TITAN usually means "tests are slow, not broken." Always try verbose reporter and longer timeout before declaring a hang.
|
|
22
|
+
- **confidence:** high
|
|
23
|
+
|
|
24
|
+
## Reflection: Previous agent's handoff was accurate
|
|
25
|
+
|
|
26
|
+
- **type:** REFLECTION
|
|
27
|
+
- **date:** 2026-05-03
|
|
28
|
+
- **context:** Doubting the handoff doc's claim of "249/249 passing"
|
|
29
|
+
- **what_failed:** My skepticism about the handoff doc's test claims.
|
|
30
|
+
- **evidence:** Handoff said 249/249 files passing. I found `npm test` hanging. But after investigation, tests DO pass exactly as claimed.
|
|
31
|
+
- **root_cause:** I assumed "hang" meant "broken" without sufficient evidence. The handoff was from the same day and the agent had actually run the tests.
|
|
32
|
+
- **fix:** Verify before doubting. Run the command with different flags to understand behavior.
|
|
33
|
+
- **verification:** ✅ Tests pass as claimed.
|
|
34
|
+
- **rule_to_remember:** Previous agent handoffs are usually accurate. Verify claims with evidence before assuming they're wrong.
|
|
35
|
+
- **confidence:** high
|
|
36
|
+
|
|
37
|
+
## Reflection: Build is clean and fast
|
|
38
|
+
|
|
39
|
+
- **type:** REFLECTION
|
|
40
|
+
- **date:** 2026-05-03
|
|
41
|
+
- **context:** Uncertainty about whether MacBook could build TITAN
|
|
42
|
+
- **what_failed:** No evidence that `npm run build` worked on MacBook.
|
|
43
|
+
- **evidence:** `npm run build` completed in 371ms. `dist/cli/index.js` generated. `npm run typecheck` passed immediately.
|
|
44
|
+
- **root_cause:** Just hadn't tried it yet.
|
|
45
|
+
- **fix:** Run the build command.
|
|
46
|
+
- **verification:** ✅ Build and typecheck both pass.
|
|
47
|
+
- **rule_to_remember:** Don't assume the build is broken until you actually run it. TITAN's build is fast and reliable.
|
|
48
|
+
- **confidence:** high
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
*Last updated: 2026-05-03 by KIMI-COO 🧠*
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# Skill Candidates
|
|
2
|
+
|
|
3
|
+
> Workflows repeated 3+ times get drafted as skill candidates.
|
|
4
|
+
> Do not install or activate automatically. Save here for Tony review.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Skill Candidate: TITAN Test Runner
|
|
9
|
+
|
|
10
|
+
- **trigger_count:** 2 (need 1 more to promote)
|
|
11
|
+
- **name:** titan-test-runner
|
|
12
|
+
- **purpose:** Run TITAN tests with correct flags for speed and reliability.
|
|
13
|
+
- **trigger_phrase:** "run TITAN tests" or "test TITAN" or "npm test"
|
|
14
|
+
- **inputs:** test_subset (optional: 'unit', 'full', or specific file)
|
|
15
|
+
- **steps:**
|
|
16
|
+
1. Check if `vitest.config.ts` exists
|
|
17
|
+
2. If unit subset: `npx vitest run --reporter=basic tests/unit/` (~8s)
|
|
18
|
+
3. If full suite: `npx vitest run --reporter=basic` (~180s)
|
|
19
|
+
4. If specific file: `npx vitest run --reporter=verbose <file>`
|
|
20
|
+
- **safety_limits:**
|
|
21
|
+
- Never run with `--no-parallel` unless debugging
|
|
22
|
+
- Use `--reporter=basic` to avoid output buffer issues
|
|
23
|
+
- Set timeout to 300s for full suite
|
|
24
|
+
- **commands:**
|
|
25
|
+
- `npx vitest run --reporter=basic tests/unit/`
|
|
26
|
+
- `npx vitest run --reporter=basic`
|
|
27
|
+
- **verification:** Check exit code 0 and "Test Files X passed" in output.
|
|
28
|
+
- **rollback:** N/A — test command is read-only.
|
|
29
|
+
- **requires_tony_approval:** no
|
|
30
|
+
|
|
31
|
+
## Skill Candidate: TITAN Recon
|
|
32
|
+
|
|
33
|
+
- **trigger_count:** 1 (need 2 more to promote)
|
|
34
|
+
- **name:** titan-recon
|
|
35
|
+
- **purpose:** Map all TITAN-related folders, repos, and runtime data across machines.
|
|
36
|
+
- **trigger_phrase:** "where is TITAN" or "TITAN recon" or "find TITAN"
|
|
37
|
+
- **inputs:** machine (macbook, titan, or both)
|
|
38
|
+
- **steps:**
|
|
39
|
+
1. Run `find ~ -maxdepth 4` with TITAN-related patterns
|
|
40
|
+
2. Check `~/.gitnexus/registry.json`
|
|
41
|
+
3. For each repo found: `git status`, `git branch`, `git remote -v`
|
|
42
|
+
4. Check for `.titan` runtime folders
|
|
43
|
+
5. Look for marketing/docs files in home dir
|
|
44
|
+
- **safety_limits:**
|
|
45
|
+
- Exclude `node_modules`, `.git`, `.ssh`, keychain folders
|
|
46
|
+
- Never print secrets
|
|
47
|
+
- Read-only only
|
|
48
|
+
- **commands:**
|
|
49
|
+
- `find ~ -maxdepth 4 \( -iname "*titan*" -o -iname "*gitnexus*" \) ...`
|
|
50
|
+
- `cat ~/.gitnexus/registry.json`
|
|
51
|
+
- **verification:** Produces list of paths with git status for each.
|
|
52
|
+
- **rollback:** N/A — read-only.
|
|
53
|
+
- **requires_tony_approval:** no
|
|
54
|
+
|
|
55
|
+
## Skill Candidate: Repo Sync Check
|
|
56
|
+
|
|
57
|
+
- **trigger_count:** 1 (need 2 more to promote)
|
|
58
|
+
- **name:** titan-sync-check
|
|
59
|
+
- **purpose:** Compare MacBook and Titan PC repo states before syncing.
|
|
60
|
+
- **trigger_phrase:** "are we in sync" or "check sync" or "compare repos"
|
|
61
|
+
- **inputs:** repo_path_macbook, repo_path_titan_pc
|
|
62
|
+
- **steps:**
|
|
63
|
+
1. Get MacBook: `git log --oneline -5`, `git status`
|
|
64
|
+
2. Get Titan PC via ssh: `git log --oneline -5`, `git status`
|
|
65
|
+
3. Compare commit hashes
|
|
66
|
+
4. Check for uncommitted changes on both
|
|
67
|
+
5. Report divergence
|
|
68
|
+
- **safety_limits:**
|
|
69
|
+
- Read-only only
|
|
70
|
+
- Never push or pull without approval
|
|
71
|
+
- **commands:**
|
|
72
|
+
- `git log --oneline --graph --left-right --decorate origin/main...HEAD`
|
|
73
|
+
- `ssh titan 'cd /opt/TITAN && git log --oneline -5 && git status'`
|
|
74
|
+
- **verification:** Produces clear divergence report.
|
|
75
|
+
- **rollback:** N/A — read-only.
|
|
76
|
+
- **requires_tony_approval:** no
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
*Last updated: 2026-05-03 by KIMI-COO 🧠*
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
# TITAN v5.4.5 — Comprehensive Codebase Audit Report
|
|
2
|
+
|
|
3
|
+
> Generated from GitNexus knowledge graph analysis
|
|
4
|
+
> Date: 2026-04-29
|
|
5
|
+
> Commit: `7f5a6b7` (v5.4.5)
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Executive Summary
|
|
10
|
+
|
|
11
|
+
| Metric | Value | Risk |
|
|
12
|
+
|---|---|---|
|
|
13
|
+
| Total symbols | 29,559 | — |
|
|
14
|
+
| Gateway inline routes | **406** (was ~500+ before v5.4.5) | **HIGH** |
|
|
15
|
+
| Duplicate function names | 24× `ensureDir`, 23× `main` | **MEDIUM** |
|
|
16
|
+
| init/start/stop functions | 94 lifecycle functions across 37 files | **HIGH** |
|
|
17
|
+
| Widget compiler CDN dep | Loads Babel from unpkg.com | **CRITICAL** |
|
|
18
|
+
| Test-to-source ratio | 64% (248 tests / 383 source) | **MEDIUM** |
|
|
19
|
+
| UI/Server shared files | 10 files crossing boundary | **MEDIUM** |
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## CRITICAL Issues
|
|
24
|
+
|
|
25
|
+
### C1: Widget Compiler Loads Remote Babel CDN
|
|
26
|
+
|
|
27
|
+
**File:** `ui/src/space-agent/widgetCompiler.ts:12`
|
|
28
|
+
**Code:**
|
|
29
|
+
```typescript
|
|
30
|
+
script.src = 'https://unpkg.com/@babel/standalone@7.26.0/babel.min.js';
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
**Problem:** The `SandboxRuntime.ts` (lines 26-28) already loads React, ReactDOM, and Babel from **local paths** (`/react.development.js`, `/react-dom.development.js`, `/babel.min.js`). But the separate `widgetCompiler.ts` for the space-agent canvas loads Babel from a **third-party CDN**.
|
|
34
|
+
|
|
35
|
+
**Impact:**
|
|
36
|
+
- Offline/air-gapped deployments break completely
|
|
37
|
+
- Supply chain attack vector (unpkg.com compromise)
|
|
38
|
+
- Version drift (unpkg may serve a different patch than the self-hosted file)
|
|
39
|
+
- DNS/routing failure in restricted networks
|
|
40
|
+
|
|
41
|
+
**Fix:** Change to `script.src = '/babel.min.js';` to match the sandbox.
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
### C2: Gateway Still Monolithic (406 Inline Routes)
|
|
46
|
+
|
|
47
|
+
After extracting 4 sub-routers in v5.4.5, `src/gateway/server.ts` still contains **406 inline route handlers**. The largest remaining blocks:
|
|
48
|
+
|
|
49
|
+
| Route Prefix | Count | Status |
|
|
50
|
+
|---|---|---|
|
|
51
|
+
| `/api/command-post/*` | 64 | **NOT EXTRACTED** |
|
|
52
|
+
| `/api/voice/*` | 17 | NOT EXTRACTED |
|
|
53
|
+
| `/api/sessions/*` | 16 | NOT EXTRACTED |
|
|
54
|
+
| `/api/teams/*` | 14 | NOT EXTRACTED |
|
|
55
|
+
| `/api/files/*` | 12 | NOT EXTRACTED |
|
|
56
|
+
| `/api/goals/*` | 10 | NOT EXTRACTED |
|
|
57
|
+
| `/api/organism/*` | 9 | NOT EXTRACTED |
|
|
58
|
+
| `/api/mesh/*` | 9 | NOT EXTRACTED |
|
|
59
|
+
| `/api/drivers/*` | 9 | NOT EXTRACTED |
|
|
60
|
+
| `/api/tests/*` | 8 | NOT EXTRACTED |
|
|
61
|
+
| `/api/recipes/*` | 8 | NOT EXTRACTED |
|
|
62
|
+
| ... | ... | ... |
|
|
63
|
+
|
|
64
|
+
**Problem:** `startGateway()` is a 9,623-line function. It handles HTTP routes, WebSocket upgrades, auth, rate limiting, proxying, static serving, health checks, LLM request throttling, and shutdown — all in one file. This is the single biggest architectural risk in TITAN.
|
|
65
|
+
|
|
66
|
+
**Impact:**
|
|
67
|
+
- Any bug in one route can crash the entire gateway
|
|
68
|
+
- Impossible to unit test individual route groups
|
|
69
|
+
- No route-level middleware isolation
|
|
70
|
+
- Code review is impractical (10,000+ lines)
|
|
71
|
+
|
|
72
|
+
**Fix Priority:**
|
|
73
|
+
1. Extract `/api/command-post/*` (64 routes) — highest impact
|
|
74
|
+
2. Extract `/api/voice/*` and `/api/sessions/*`
|
|
75
|
+
3. Extract static/admin routes
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
### C3: No Unified Lifecycle Manager (94 Lifecycle Functions)
|
|
80
|
+
|
|
81
|
+
45 `init*` functions across 37 files:
|
|
82
|
+
```
|
|
83
|
+
initPool, initWakeupSystem, initAlerts, initAuditStore, initChecklist,
|
|
84
|
+
initAutopilot, initCommandPost, initDaemon, initHeartbeatScheduler,
|
|
85
|
+
initMonitors, initAgents, initBudget, initShadowRepo, initSoulState,
|
|
86
|
+
initOtel, initSlashCommands, initMcpServers, initGraph, initIdentity,
|
|
87
|
+
initLearning, initMemory, initVectors, initPlugins, initProviders,
|
|
88
|
+
initVault, initCronScheduler, initFileWatchers, initPopulation,
|
|
89
|
+
initModelSwitchTool, initPromptFiles, initBenchmarks, initProviders,
|
|
90
|
+
initWebBrowserTool, initPersistentWebhooks, initDevSkills, initNvidiaSkills,
|
|
91
|
+
initBuiltinSkills, initFileLogger, initVRAMOrchestrator, initWebGL,
|
|
92
|
+
initBuffers, initShaders, init, initSession
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
49 start/stop function pairs but no central registry:
|
|
96
|
+
```
|
|
97
|
+
startGateway ↔ stopGateway
|
|
98
|
+
startPaperclip ↔ stopPaperclip
|
|
99
|
+
startAutopilot ↔ stopAutopilot
|
|
100
|
+
startDaemon ↔ stopDaemon
|
|
101
|
+
startBridge ↔ stopBridge
|
|
102
|
+
startF5TTSHandler ↔ stopF5TTSHandler
|
|
103
|
+
startMonitor ↔ stopMonitor
|
|
104
|
+
startTunnel ↔ stopTunnel
|
|
105
|
+
startHeartbeat ↔ stopHeartbeat
|
|
106
|
+
startDiscovery ↔ stopDiscovery
|
|
107
|
+
...
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
**Problem:** `gracefulShutdown()` in `server.ts` closes the HTTP server and cleans intervals, but it does NOT:
|
|
111
|
+
- Stop the F5-TTS Python server (leaked process)
|
|
112
|
+
- Stop Paperclip sidecar (leaked child process)
|
|
113
|
+
- Stop mesh transport heartbeats (hanging WebSockets)
|
|
114
|
+
- Flush pending analytics events to PostHog
|
|
115
|
+
- Unload GPU VRAM leases
|
|
116
|
+
- Terminate the `TitanAgentBridge` Python process (new in v5.4.5)
|
|
117
|
+
|
|
118
|
+
**Impact:** Restarting TITAN on Titan PC with `pkill -f 'node dist/cli/index.js gateway'` leaves 3-5 zombie Python processes per restart. Over days this exhausts RAM.
|
|
119
|
+
|
|
120
|
+
**Fix:** Create a `LifecycleManager` that registers all startables and shuts them down in reverse dependency order.
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## HIGH Issues
|
|
125
|
+
|
|
126
|
+
### H1: Duplicate Function Names Break Traces
|
|
127
|
+
|
|
128
|
+
| Function | Count | Files |
|
|
129
|
+
|---|---|---|
|
|
130
|
+
| `ensureDir` | 24 | utils, memory, testing, safety, skills |
|
|
131
|
+
| `main` | 23 | scripts, tests, examples, server |
|
|
132
|
+
| `timeSince` | 20 | utils, ui, gateway |
|
|
133
|
+
| `load` | 16 | storage, config, memory, examples |
|
|
134
|
+
| `handler` | 14 | channels, gateway, mcp |
|
|
135
|
+
| `timeAgo` | 11 | ui, gateway |
|
|
136
|
+
| `register` | 10 | skills, channels, agent |
|
|
137
|
+
| `handleDelete` | 9 | ui, gateway |
|
|
138
|
+
| `makeConfig` | 8 | config, testing |
|
|
139
|
+
| `__init__` | 8 | python voice files |
|
|
140
|
+
|
|
141
|
+
**Problem:** GitNexus Process traces use function names as step labels. When 24 functions are all named `ensureDir`, the trace is `init → ensureDir → ensureDir → ensureDir` — useless for debugging. Impact analysis also fails because it can't determine WHICH `ensureDir` is being called.
|
|
142
|
+
|
|
143
|
+
**Fix:**
|
|
144
|
+
- Rename utility `ensureDir` to `mkdirIfNotExists`
|
|
145
|
+
- Rename script `main` to descriptive names (`runStressTest`, `startF5TTSServer`)
|
|
146
|
+
- Add `--name` uniqueness check to GitNexus analyzer
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
### H2: UI/Server Boundary Violations
|
|
151
|
+
|
|
152
|
+
Files imported by both frontend UI and backend server:
|
|
153
|
+
|
|
154
|
+
| File | Imported By Server? | Imported By UI? | Risk |
|
|
155
|
+
|---|---|---|---|
|
|
156
|
+
| `ui/src/space-agent/widgetCompiler.ts` | **YES** (types path) | YES | `document` API in node build |
|
|
157
|
+
| `ui/src/space-agent/useCanvasSSE.ts` | **YES** (types path) | YES | Hooks in server bundle |
|
|
158
|
+
| `ui/src/titan2/types.ts` | **YES** (gateway server) | YES | UI types leaked to server |
|
|
159
|
+
|
|
160
|
+
**Problem:** `server.ts` imports `../agent/company.js` but the graph shows it also pulls in UI-side modules through shared type paths. This bloats the server bundle and can cause runtime crashes when UI-only APIs (like `document`) are called server-side.
|
|
161
|
+
|
|
162
|
+
**Fix:** Create a `shared/types.ts` file for server-safe types only. Move UI-only types back to `ui/src/`.
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
### H3: Test Suite Unreliable at Scale
|
|
167
|
+
|
|
168
|
+
| Metric | Value |
|
|
169
|
+
|---|---|
|
|
170
|
+
| Test files | 248 |
|
|
171
|
+
| Total test lines | 88,289 |
|
|
172
|
+
| Source files | 383 |
|
|
173
|
+
| Test-to-source ratio | 64% |
|
|
174
|
+
| Tests excluded in CI | 1 (agent.test.ts — OOMs at >7GB) |
|
|
175
|
+
| Vitest heap (local) | 12 GB |
|
|
176
|
+
| Vitest heap (CI) | 4 GB |
|
|
177
|
+
|
|
178
|
+
**Problem:** The full suite times out or OOMs on CI. The workaround is to exclude heavy tests, which means CI doesn't actually test the full module graph. This creates a blind spot where refactoring `src/agent/agent.js` or `src/agent/agentLoop.ts` can break production without CI catching it.
|
|
179
|
+
|
|
180
|
+
**Fix:**
|
|
181
|
+
- Split `agent.test.ts` into unit tests (no module graph reload) and integration tests (mock providers)
|
|
182
|
+
- Add shard count detection: if CI runner has <8GB RAM, skip heavy tests automatically
|
|
183
|
+
- Run heavy tests nightly instead of per-PR
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## MEDIUM Issues
|
|
188
|
+
|
|
189
|
+
### M1: Gateway Route Count Still Growing
|
|
190
|
+
|
|
191
|
+
Before v5.4.5: ~500 inline routes
|
|
192
|
+
After v5.4.5: **406 inline routes** (only 94 extracted)
|
|
193
|
+
|
|
194
|
+
At the current pace (~4 routes extracted per release), it'll take 100+ releases to fully decompose the gateway. The `command-post` block (64 routes) alone should be a priority — it's larger than the entire extracted paperclip router.
|
|
195
|
+
|
|
196
|
+
### M2: Voice Bridge Process Leak Risk
|
|
197
|
+
|
|
198
|
+
The new `TitanAgentBridge` in v5.4.5 spawns a Python child process but:
|
|
199
|
+
- No process timeout (30s only for audio processing)
|
|
200
|
+
- No automatic cleanup on parent crash
|
|
201
|
+
- No PID tracking file
|
|
202
|
+
- Python process is not in `gracefulShutdown()`
|
|
203
|
+
|
|
204
|
+
If the Node gateway crashes, the Python voice agent becomes an orphan. Over time, these accumulate and cause the "Vitest OOM" symptom in production (not just tests).
|
|
205
|
+
|
|
206
|
+
### M3: Gateway Has 9,623 Lines in Single Function
|
|
207
|
+
|
|
208
|
+
`startGateway()` is the longest function in the graph:
|
|
209
|
+
```
|
|
210
|
+
Function: startGateway | src/gateway/server.ts | LOC: 9623
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
This is 15× longer than the second-longest function (`getMissionControlHTML` at 3,286 lines). No single function should exceed 500 lines — the cognitive load for maintainers is too high.
|
|
214
|
+
|
|
215
|
+
### M4: Caddyfile Has Hardcoded Configs
|
|
216
|
+
|
|
217
|
+
`Caddyfile` in repo root uses hardcoded port `:48420` and auth tokens. If TITAN needs to run on a different port or domain, this file must be manually edited and isn't templated.
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
## Recommended Fix Order
|
|
222
|
+
|
|
223
|
+
Based on blast radius, user impact, and GitNexus traceability:
|
|
224
|
+
|
|
225
|
+
| Priority | Issue | Effort | Impact |
|
|
226
|
+
|---|---|---|---|
|
|
227
|
+
| P0 | C1: Fix widgetCompiler.ts CDN → `/babel.min.js` | 1 line | **CRITICAL** — offline deployments break |
|
|
228
|
+
| P0 | C3: Add LifecycleManager for shutdown | 1 file | **CRITICAL** — zombie processes on Titan PC |
|
|
229
|
+
| P1 | C2: Extract `/api/command-post/*` (64 routes) | 200 lines | **HIGH** — largest route block |
|
|
230
|
+
| P1 | H1: Rename duplicate `ensureDir`/`main` | 50 files | **HIGH** — fixes GitNexus traces |
|
|
231
|
+
| P2 | H2: Separate UI/server types | 5 files | **MEDIUM** — prevents node/browser API leaks |
|
|
232
|
+
| P2 | M2: Add Python child process cleanup | 20 lines | **MEDIUM** — prevents memory leaks |
|
|
233
|
+
| P3 | H3: Split agent.test.ts into unit + integration | 1 file | **MEDIUM** — enables CI coverage |
|
|
234
|
+
| P3 | C2: Extract voice/sessions/teams routers | 3 files | **LOW** — already have pattern from paperclip |
|
|
235
|
+
|
|
236
|
+
---
|
|
237
|
+
|
|
238
|
+
## Appendix: Useful GitNexus Queries for Ongoing Monitoring
|
|
239
|
+
|
|
240
|
+
```bash
|
|
241
|
+
# Monitor gateway route count (should decrease over releases)
|
|
242
|
+
npm run gitnexus:cypher "MATCH (r:Route) RETURN COUNT(r)"
|
|
243
|
+
|
|
244
|
+
# Monitor function growth (should stay flat or decrease)
|
|
245
|
+
npm run gitnexus:cypher "MATCH (f:Function) RETURN COUNT(f)"
|
|
246
|
+
|
|
247
|
+
# Find new lifecycle functions added without cleanup
|
|
248
|
+
npm run gitnexus:cypher "MATCH (f:Function) WHERE f.name STARTS WITH 'start' AND NOT EXISTS { (f2:Function {name: REPLACE(f.name,'start','stop')}) } RETURN f.name, f.filePath"
|
|
249
|
+
|
|
250
|
+
# Find files crossing UI/server boundary
|
|
251
|
+
npm run gitnexus:cypher "MATCH (f:File) WHERE f.filePath CONTAINS 'ui/src/' AND EXISTS { (f2:File)-[:{type:'IMPORTS'}]->(f) WHERE f2.filePath CONTAINS 'src/' AND NOT f2.filePath CONTAINS 'ui/' } RETURN f.name, f.filePath"
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
*Report generated by OpenCode using GitNexus knowledge graph (29,559 symbols, 50,352 edges, v5.4.5)*
|