nyxora 26.7.9 → 26.7.22

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 (326) hide show
  1. package/CHANGELOG.md +174 -1
  2. package/README.md +25 -11
  3. package/SUPPORT.md +18 -0
  4. package/bin/nyxora.mjs +37 -0
  5. package/dist/launcher.js +7 -1
  6. package/dist/packages/core/src/agent/cronManager.js +55 -14
  7. package/dist/packages/core/src/agent/llmProvider.js +130 -17
  8. package/dist/packages/core/src/agent/nyxDaemon.js +1 -1
  9. package/dist/packages/core/src/agent/osAgent.js +550 -148
  10. package/dist/packages/core/src/agent/projectAnalyzer.js +282 -0
  11. package/dist/packages/core/src/agent/promptBuilder.js +505 -213
  12. package/dist/packages/core/src/agent/reasoning.js +189 -241
  13. package/dist/packages/core/src/agent/transactionManager.js +7 -0
  14. package/dist/packages/core/src/agent/web3Agent.js +314 -68
  15. package/dist/packages/core/src/channels/telegram.js +563 -424
  16. package/dist/packages/core/src/gateway/chat.js +2 -2
  17. package/dist/packages/core/src/gateway/cli.js +25 -4
  18. package/dist/packages/core/src/gateway/server.js +413 -35
  19. package/dist/packages/core/src/gateway/setup.js +2 -0
  20. package/dist/packages/core/src/gateway/tracker.js +10 -4
  21. package/dist/packages/core/src/memory/logger.js +181 -25
  22. package/dist/packages/core/src/memory/reflection.js +33 -12
  23. package/dist/packages/core/src/memory/trajectoryLogger.js +89 -0
  24. package/dist/packages/core/src/system/agentskills.js +6 -0
  25. package/dist/packages/core/src/system/plugins/SystemWorkspacePlugin.js +74 -7
  26. package/dist/packages/core/src/system/plugins/createSkill.js +2 -2
  27. package/dist/packages/core/src/system/skillExtractor.js +24 -43
  28. package/dist/packages/core/src/system/skills/browseWeb.js +18 -6
  29. package/dist/packages/core/src/system/skills/computerUse.js +185 -0
  30. package/dist/packages/core/src/system/skills/createAgentSkill.js +12 -14
  31. package/dist/packages/core/src/system/skills/delegateSubagent.js +80 -0
  32. package/dist/packages/core/src/system/skills/editFile.js +1 -1
  33. package/dist/packages/core/src/system/skills/executeShell.js +68 -3
  34. package/dist/packages/core/src/system/skills/executeShellPTY.js +141 -0
  35. package/dist/packages/core/src/system/skills/generateImage.js +71 -21
  36. package/dist/packages/core/src/system/skills/readFile.js +1 -1
  37. package/dist/packages/core/src/system/skills/searchFiles.js +175 -0
  38. package/dist/packages/core/src/system/skills/searchWeb.js +319 -41
  39. package/dist/packages/core/src/system/skills/todoTool.js +160 -0
  40. package/dist/packages/core/src/system/skills/writeFile.js +1 -1
  41. package/dist/packages/core/src/utils/contextSummarizer.js +215 -82
  42. package/dist/packages/core/src/utils/historySanitizer.js +182 -30
  43. package/dist/packages/core/src/utils/llmUtils.js +1 -0
  44. package/dist/packages/core/src/utils/streamSimulator.js +32 -4
  45. package/dist/packages/core/src/web3/aggregator/providers/ArbitrumBridgeProvider.js +91 -12
  46. package/dist/packages/core/src/web3/aggregator/providers/KyberSwapProvider.js +1 -1
  47. package/dist/packages/core/src/web3/aggregator/providers/LifiProvider.js +1 -1
  48. package/dist/packages/core/src/web3/aggregator/providers/OneInchProvider.js +1 -1
  49. package/dist/packages/core/src/web3/aggregator/providers/OpenOceanProvider.js +1 -1
  50. package/dist/packages/core/src/web3/aggregator/providers/RelayProvider.js +1 -1
  51. package/dist/packages/core/src/web3/aggregator/providers/ZeroXProvider.js +1 -1
  52. package/dist/packages/core/src/web3/skills/bridgeToken.js +1 -1
  53. package/dist/packages/core/src/web3/skills/checkPortfolio.js +1 -1
  54. package/dist/packages/core/src/web3/skills/checkSecurity.js +31 -9
  55. package/dist/packages/core/src/web3/skills/getBalance.js +1 -1
  56. package/dist/packages/core/src/web3/skills/getTrendingTokens.js +29 -2
  57. package/dist/packages/core/src/web3/skills/getTxHistory.js +28 -17
  58. package/dist/packages/core/src/web3/skills/marketAnalysis.js +43 -9
  59. package/dist/packages/core/src/web3/utils/chains.js +4 -0
  60. package/dist/packages/core/src/web3/utils/rpcEngine.js +10 -0
  61. package/dist/packages/core/src/web3/utils/tokens.js +6 -0
  62. package/dist/packages/core/src/web3/utils/vaultClient.js +2 -2
  63. package/dist/packages/policy/src/engine.js +260 -0
  64. package/dist/packages/policy/src/index.js +17 -0
  65. package/dist/packages/policy/src/server.js +9 -248
  66. package/dist/packages/signer/src/NyxoraSigner.js +24 -1
  67. package/launcher.ts +7 -2
  68. package/package.json +103 -8
  69. package/packages/core/package.json +9 -3
  70. package/packages/core/playbooks/autonomous-ai-agents/nyxora-agent/SKILL.md +0 -8
  71. package/packages/core/playbooks/productivity/notion/SKILL.md +9 -10
  72. package/packages/core/src/agent/cronManager.ts +65 -18
  73. package/packages/core/src/agent/llmProvider.ts +130 -18
  74. package/packages/core/src/agent/nyxDaemon.ts +1 -1
  75. package/packages/core/src/agent/osAgent.ts +589 -152
  76. package/packages/core/src/agent/projectAnalyzer.ts +310 -0
  77. package/packages/core/src/agent/promptBuilder.ts +517 -203
  78. package/packages/core/src/agent/reasoning.ts +189 -243
  79. package/packages/core/src/agent/transactionManager.ts +6 -0
  80. package/packages/core/src/agent/web3Agent.ts +341 -74
  81. package/packages/core/src/channels/telegram.ts +575 -468
  82. package/packages/core/src/channels/telegram.ts.bak +708 -0
  83. package/packages/core/src/config/parser.ts +7 -0
  84. package/packages/core/src/gateway/chat.ts +2 -2
  85. package/packages/core/src/gateway/cli.ts +27 -3
  86. package/packages/core/src/gateway/server.ts +411 -33
  87. package/packages/core/src/gateway/server.ts.bak +1480 -0
  88. package/packages/core/src/gateway/setup.ts +2 -0
  89. package/packages/core/src/gateway/tracker.ts +10 -3
  90. package/packages/core/src/memory/logger.ts +185 -29
  91. package/packages/core/src/memory/logger.ts.bak +517 -0
  92. package/packages/core/src/memory/reflection.ts +37 -15
  93. package/packages/core/src/memory/trajectoryLogger.ts +56 -0
  94. package/packages/core/src/system/agentskills.ts +6 -0
  95. package/packages/core/src/system/plugins/SystemWorkspacePlugin.ts +76 -7
  96. package/packages/core/src/system/plugins/createSkill.ts +2 -2
  97. package/packages/core/src/system/skillExtractor.ts +24 -44
  98. package/packages/core/src/system/skills/browseWeb.ts +20 -6
  99. package/packages/core/src/system/skills/computerUse.ts +152 -0
  100. package/packages/core/src/system/skills/createAgentSkill.ts +12 -14
  101. package/packages/core/src/system/skills/delegateSubagent.ts +49 -0
  102. package/packages/core/src/system/skills/editFile.ts +1 -1
  103. package/packages/core/src/system/skills/executeShell.ts +67 -5
  104. package/packages/core/src/system/skills/executeShellPTY.ts +112 -0
  105. package/packages/core/src/system/skills/generateImage.ts +84 -27
  106. package/packages/core/src/system/skills/readFile.ts +1 -1
  107. package/packages/core/src/system/skills/searchFiles.ts +189 -0
  108. package/packages/core/src/system/skills/searchWeb.ts +326 -45
  109. package/packages/core/src/system/skills/todoTool.ts +191 -0
  110. package/packages/core/src/system/skills/writeFile.ts +1 -1
  111. package/packages/core/src/utils/contextSummarizer.ts +247 -88
  112. package/packages/core/src/utils/historySanitizer.ts +187 -25
  113. package/packages/core/src/utils/llmUtils.ts +1 -0
  114. package/packages/core/src/utils/streamSimulator.ts +41 -4
  115. package/packages/core/src/web3/aggregator/providers/ArbitrumBridgeProvider.ts +61 -13
  116. package/packages/core/src/web3/aggregator/providers/KyberSwapProvider.ts +1 -1
  117. package/packages/core/src/web3/aggregator/providers/LifiProvider.ts +1 -1
  118. package/packages/core/src/web3/aggregator/providers/OneInchProvider.ts +1 -1
  119. package/packages/core/src/web3/aggregator/providers/OpenOceanProvider.ts +1 -1
  120. package/packages/core/src/web3/aggregator/providers/RelayProvider.ts +1 -1
  121. package/packages/core/src/web3/aggregator/providers/ZeroXProvider.ts +1 -1
  122. package/packages/core/src/web3/skills/bridgeToken.ts +1 -1
  123. package/packages/core/src/web3/skills/checkPortfolio.ts +1 -1
  124. package/packages/core/src/web3/skills/checkSecurity.ts +31 -10
  125. package/packages/core/src/web3/skills/getBalance.ts +1 -1
  126. package/packages/core/src/web3/skills/getTrendingTokens.ts +33 -2
  127. package/packages/core/src/web3/skills/getTxHistory.ts +33 -15
  128. package/packages/core/src/web3/skills/marketAnalysis.ts +46 -7
  129. package/packages/core/src/web3/utils/chains.ts +4 -1
  130. package/packages/core/src/web3/utils/rpcEngine.ts +6 -0
  131. package/packages/core/src/web3/utils/tokens.ts +6 -0
  132. package/packages/core/src/web3/utils/vaultClient.ts +2 -2
  133. package/packages/dashboard/dist/assets/index-AGu4iXxs.css +1 -0
  134. package/packages/dashboard/dist/assets/index-C-jQzkzL.js +87 -0
  135. package/packages/dashboard/dist/index.html +2 -2
  136. package/packages/dashboard/dist/robinhood.png +0 -0
  137. package/packages/dashboard/dist/robinhood.svg +0 -0
  138. package/packages/dashboard/package.json +7 -2
  139. package/packages/mcp-server/package.json +4 -1
  140. package/packages/ml-engine/main.py +2 -1
  141. package/packages/ml-engine/requirements.txt +3 -0
  142. package/packages/ml-engine/routers/background_review.py +3 -3
  143. package/packages/ml-engine/routers/market.py +18 -0
  144. package/packages/ml-engine/routers/memory.py +50 -0
  145. package/packages/ml-engine/routers/memory_writer.py +4 -4
  146. package/packages/ml-engine/routers/os_agent.py +423 -0
  147. package/packages/nyxora-ink/ambient.d.ts +92 -0
  148. package/packages/nyxora-ink/dist/entry-exports.js +14294 -0
  149. package/packages/nyxora-ink/index.d.ts +41 -0
  150. package/packages/nyxora-ink/index.js +1 -0
  151. package/packages/nyxora-ink/package.json +59 -0
  152. package/packages/nyxora-ink/text-input.d.ts +2 -0
  153. package/packages/nyxora-ink/text-input.js +1 -0
  154. package/packages/policy/package.json +21 -4
  155. package/packages/policy/src/engine.ts +288 -0
  156. package/packages/policy/src/index.ts +1 -0
  157. package/packages/policy/src/server.ts +9 -278
  158. package/packages/signer/package.json +5 -2
  159. package/packages/signer/src/NyxoraSigner.ts +24 -2
  160. package/packages/tui/dist/app/createGatewayEventHandler.js +728 -0
  161. package/packages/tui/dist/app/createSlashHandler.js +114 -0
  162. package/packages/tui/dist/app/delegationStore.js +47 -0
  163. package/packages/tui/dist/app/gatewayContext.js +13 -0
  164. package/packages/tui/dist/app/gatewayRecovery.js +19 -0
  165. package/packages/tui/dist/app/inputSelectionStore.js +4 -0
  166. package/packages/tui/dist/app/interfaces.js +6 -0
  167. package/packages/tui/dist/app/overlayStore.js +56 -0
  168. package/packages/tui/dist/app/petFlashStore.js +16 -0
  169. package/packages/tui/dist/app/scroll.js +44 -0
  170. package/packages/tui/dist/app/setupHandoff.js +28 -0
  171. package/packages/tui/dist/app/slash/commands/billing.js +248 -0
  172. package/packages/tui/dist/app/slash/commands/core.js +534 -0
  173. package/packages/tui/dist/app/slash/commands/credits.js +44 -0
  174. package/packages/tui/dist/app/slash/commands/debug.js +40 -0
  175. package/packages/tui/dist/app/slash/commands/ops.js +531 -0
  176. package/packages/tui/dist/app/slash/commands/session.js +481 -0
  177. package/packages/tui/dist/app/slash/commands/setup.js +16 -0
  178. package/packages/tui/dist/app/slash/registry.js +18 -0
  179. package/packages/tui/dist/app/slash/types.js +1 -0
  180. package/packages/tui/dist/app/spawnHistoryStore.js +117 -0
  181. package/packages/tui/dist/app/submissionCore.js +80 -0
  182. package/packages/tui/dist/app/turnController.js +802 -0
  183. package/packages/tui/dist/app/turnStore.js +44 -0
  184. package/packages/tui/dist/app/uiStore.js +36 -0
  185. package/packages/tui/dist/app/useComposerState.js +264 -0
  186. package/packages/tui/dist/app/useConfigSync.js +203 -0
  187. package/packages/tui/dist/app/useInputHandlers.js +483 -0
  188. package/packages/tui/dist/app/useLongRunToolCharms.js +46 -0
  189. package/packages/tui/dist/app/useMainApp.js +851 -0
  190. package/packages/tui/dist/app/usePet.js +219 -0
  191. package/packages/tui/dist/app/useSessionLifecycle.js +268 -0
  192. package/packages/tui/dist/app/useSubmission.js +238 -0
  193. package/packages/tui/dist/app.js +11 -0
  194. package/packages/tui/dist/banner.js +55 -0
  195. package/packages/tui/dist/components/activeSessionSwitcher.js +503 -0
  196. package/packages/tui/dist/components/agentsOverlay.js +443 -0
  197. package/packages/tui/dist/components/appChrome.js +425 -0
  198. package/packages/tui/dist/components/appLayout.js +189 -0
  199. package/packages/tui/dist/components/appOverlays.js +76 -0
  200. package/packages/tui/dist/components/billingOverlay.js +375 -0
  201. package/packages/tui/dist/components/branding.js +143 -0
  202. package/packages/tui/dist/components/fpsOverlay.js +18 -0
  203. package/packages/tui/dist/components/helpHint.js +17 -0
  204. package/packages/tui/dist/components/journey.js +286 -0
  205. package/packages/tui/dist/components/markdown.js +722 -0
  206. package/packages/tui/dist/components/maskedPrompt.js +8 -0
  207. package/packages/tui/dist/components/messageLine.js +98 -0
  208. package/packages/tui/dist/components/modelPicker.js +368 -0
  209. package/packages/tui/dist/components/overlayControls.js +26 -0
  210. package/packages/tui/dist/components/overlayScrollbar.js +41 -0
  211. package/packages/tui/dist/components/petPicker.js +97 -0
  212. package/packages/tui/dist/components/petSprite.js +49 -0
  213. package/packages/tui/dist/components/pluginsHub.js +127 -0
  214. package/packages/tui/dist/components/prompts.js +133 -0
  215. package/packages/tui/dist/components/queuedMessages.js +20 -0
  216. package/packages/tui/dist/components/skillsHub.js +161 -0
  217. package/packages/tui/dist/components/streamingAssistant.js +59 -0
  218. package/packages/tui/dist/components/streamingMarkdown.js +140 -0
  219. package/packages/tui/dist/components/textInput.js +1080 -0
  220. package/packages/tui/dist/components/themed.js +8 -0
  221. package/packages/tui/dist/components/thinking.js +501 -0
  222. package/packages/tui/dist/components/todoPanel.js +36 -0
  223. package/packages/tui/dist/config/env.js +56 -0
  224. package/packages/tui/dist/config/limits.js +22 -0
  225. package/packages/tui/dist/config/timing.js +13 -0
  226. package/packages/tui/dist/content/charms.js +1 -0
  227. package/packages/tui/dist/content/faces.js +17 -0
  228. package/packages/tui/dist/content/fortunes.js +25 -0
  229. package/packages/tui/dist/content/hotkeys.js +34 -0
  230. package/packages/tui/dist/content/placeholders.js +11 -0
  231. package/packages/tui/dist/content/setup.js +14 -0
  232. package/packages/tui/dist/content/verbs.js +37 -0
  233. package/packages/tui/dist/domain/blockLayout.js +95 -0
  234. package/packages/tui/dist/domain/details.js +53 -0
  235. package/packages/tui/dist/domain/messages.js +59 -0
  236. package/packages/tui/dist/domain/paths.js +27 -0
  237. package/packages/tui/dist/domain/providers.js +7 -0
  238. package/packages/tui/dist/domain/roles.js +6 -0
  239. package/packages/tui/dist/domain/slash.js +43 -0
  240. package/packages/tui/dist/domain/usage.js +1 -0
  241. package/packages/tui/dist/domain/viewport.js +33 -0
  242. package/packages/tui/dist/entry.js +124 -0
  243. package/packages/tui/dist/gatewayClient.js +634 -0
  244. package/packages/tui/dist/gatewayTypes.js +1 -0
  245. package/packages/tui/dist/hooks/useCompletion.js +82 -0
  246. package/packages/tui/dist/hooks/useGitBranch.js +54 -0
  247. package/packages/tui/dist/hooks/useInputHistory.js +8 -0
  248. package/packages/tui/dist/hooks/useQueue.js +53 -0
  249. package/packages/tui/dist/hooks/useVirtualHistory.js +416 -0
  250. package/packages/tui/dist/index.js +55 -0
  251. package/packages/tui/dist/lib/circularBuffer.js +39 -0
  252. package/packages/tui/dist/lib/clipboard.js +137 -0
  253. package/packages/tui/dist/lib/editor.js +57 -0
  254. package/packages/tui/dist/lib/editor.test.js +54 -0
  255. package/packages/tui/dist/lib/emoji.js +45 -0
  256. package/packages/tui/dist/lib/externalCli.js +7 -0
  257. package/packages/tui/dist/lib/externalLink.js +335 -0
  258. package/packages/tui/dist/lib/forceTruecolor.js +46 -0
  259. package/packages/tui/dist/lib/fpsStore.js +32 -0
  260. package/packages/tui/dist/lib/fuzzy.js +129 -0
  261. package/packages/tui/dist/lib/fuzzy.test.js +88 -0
  262. package/packages/tui/dist/lib/gracefulExit.js +36 -0
  263. package/packages/tui/dist/lib/history.js +65 -0
  264. package/packages/tui/dist/lib/inputMetrics.js +158 -0
  265. package/packages/tui/dist/lib/liveProgress.js +51 -0
  266. package/packages/tui/dist/lib/liveProgress.test.js +85 -0
  267. package/packages/tui/dist/lib/mathUnicode.js +685 -0
  268. package/packages/tui/dist/lib/memory.js +159 -0
  269. package/packages/tui/dist/lib/memory.test.js +135 -0
  270. package/packages/tui/dist/lib/memoryMonitor.js +130 -0
  271. package/packages/tui/dist/lib/messages.js +3 -0
  272. package/packages/tui/dist/lib/messages.test.js +21 -0
  273. package/packages/tui/dist/lib/openExternalUrl.js +133 -0
  274. package/packages/tui/dist/lib/openExternalUrl.test.js +162 -0
  275. package/packages/tui/dist/lib/osc52.js +49 -0
  276. package/packages/tui/dist/lib/parentLog.js +53 -0
  277. package/packages/tui/dist/lib/perfPane.js +90 -0
  278. package/packages/tui/dist/lib/platform.js +309 -0
  279. package/packages/tui/dist/lib/precisionWheel.js +21 -0
  280. package/packages/tui/dist/lib/prompt.js +23 -0
  281. package/packages/tui/dist/lib/reasoning.js +40 -0
  282. package/packages/tui/dist/lib/resizeCoalescer.js +46 -0
  283. package/packages/tui/dist/lib/resizeCoalescer.test.js +65 -0
  284. package/packages/tui/dist/lib/rpc.js +33 -0
  285. package/packages/tui/dist/lib/starmapPalette.js +104 -0
  286. package/packages/tui/dist/lib/subagentTree.js +284 -0
  287. package/packages/tui/dist/lib/syntax.js +89 -0
  288. package/packages/tui/dist/lib/terminalModes.js +42 -0
  289. package/packages/tui/dist/lib/terminalParity.js +44 -0
  290. package/packages/tui/dist/lib/terminalSetup.js +317 -0
  291. package/packages/tui/dist/lib/termux.js +24 -0
  292. package/packages/tui/dist/lib/text.js +258 -0
  293. package/packages/tui/dist/lib/text.test.js +39 -0
  294. package/packages/tui/dist/lib/todo.js +2 -0
  295. package/packages/tui/dist/lib/todo.test.js +18 -0
  296. package/packages/tui/dist/lib/viewportStore.js +82 -0
  297. package/packages/tui/dist/lib/virtualHeights.js +113 -0
  298. package/packages/tui/dist/lib/wheelAccel.js +139 -0
  299. package/packages/tui/dist/protocol/interpolation.js +2 -0
  300. package/packages/tui/dist/protocol/paste.js +1 -0
  301. package/packages/tui/dist/theme.js +396 -0
  302. package/packages/tui/dist/types.js +1 -0
  303. package/packages/tui/package.json +28 -0
  304. package/scripts/install-ml-engine.mjs +72 -0
  305. package/dist/packages/core/src/gateway/discordAdapter.js +0 -81
  306. package/dist/packages/core/src/gateway/telegram.js +0 -282
  307. package/dist/packages/core/src/plugin/registry.test.js +0 -38
  308. package/dist/packages/core/src/system/skills/analyzeDocument.js +0 -145
  309. package/dist/packages/core/src/system/skills/gitManager.js +0 -91
  310. package/dist/packages/core/src/system/skills/notionWorkspace.js +0 -80
  311. package/dist/packages/core/src/system/skills/xManager.js +0 -78
  312. package/dist/packages/core/src/utils/formatter.test.js +0 -40
  313. package/packages/core/playbooks/web3/onchainkit/assets/templates/basic-app/.env.local.example +0 -20
  314. package/packages/dashboard/dist/assets/index-Dg9eiK4h.css +0 -1
  315. package/packages/dashboard/dist/assets/index-LAS2_trL.js +0 -26
  316. package/packages/ml-engine/__pycache__/config.cpython-313.pyc +0 -0
  317. package/packages/ml-engine/__pycache__/main.cpython-313.pyc +0 -0
  318. package/packages/ml-engine/routers/__pycache__/__init__.cpython-313.pyc +0 -0
  319. package/packages/ml-engine/routers/__pycache__/background_review.cpython-313.pyc +0 -0
  320. package/packages/ml-engine/routers/__pycache__/cognitive.cpython-313.pyc +0 -0
  321. package/packages/ml-engine/routers/__pycache__/critic.cpython-313.pyc +0 -0
  322. package/packages/ml-engine/routers/__pycache__/llm.cpython-313.pyc +0 -0
  323. package/packages/ml-engine/routers/__pycache__/market.cpython-313.pyc +0 -0
  324. package/packages/ml-engine/routers/__pycache__/memory.cpython-313.pyc +0 -0
  325. package/packages/ml-engine/routers/__pycache__/memory_writer.cpython-313.pyc +0 -0
  326. package/packages/ml-engine/routers/__pycache__/skill_manager.cpython-313.pyc +0 -0
package/CHANGELOG.md CHANGED
@@ -2,7 +2,180 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
- The format is based on [Keep a Changelog](https://keepashangelog.com/en/1.0.0/),
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
6
+
7
+ ## [26.7.21]
8
+ ### Dashboard Features & UI
9
+ - **Control Panel Expansion**: Engineered 4 brand new native dashboard menus (`Memory`, `Security`, `Wallets`, `Workflows`) transforming the dashboard into a full-fledged agent control panel.
10
+ - **Backend API Integration**: Fully connected the new UI to real-time Nyxora Core APIs. The interface now dynamically fetches and manages state for episodic memory (`/api/memory`), security policies (`/api/policy`), EVM wallet and multi-chain portfolio (`/api/wallet`, `/api/portfolio`), and automated playbooks (`/api/playbooks`).
11
+ - **Global Localization**: Ensured all new dashboard components are strictly in English to support the global user base natively.
12
+ - **Design System Consistency**: Applied the modern, unified `overview-container` styling across all new pages, featuring consistent glassmorphism effects, responsive card grids, and proper token alignments. Unified the toggle switch design in `Workflows.tsx` to match the custom iOS-style pill toggle used across other menus (e.g., `Skills.tsx`).
13
+ - **Playbook Editor (CRUD)**: Implemented full CRUD capabilities in the Workflows menu. Users can now directly create, edit, toggle, and delete scenarios via an integrated Markdown editor modal, with automatic local saving to `~/.nyxora/playbooks/`.
14
+ - **Memory Document RAG Upload**: Upgraded the Memory UI with a document upload feature. Connected the Node.js gateway to Python ML Engine's new `/memory/document` RAG endpoint, allowing seamless PDF/TXT/MD file chunking and vectorization using `pypdf`.
15
+ - **Wallet Security Enhancement**: Completely removed the raw Private Key display and toggle component from the Wallets UI to ensure maximum operational security.
16
+ - **Bug Fix**: Resolved a critical render crash in `Workflows.tsx` caused by a missing lucide-react import (`RefreshCw`), and cleaned up obsolete Episodic Memory fetch logic from the Logs menu.
17
+
18
+ ### AI Memory & RAG Engine
19
+ - **Native Document Ingestion**: Introduced a new `/document` endpoint in the Python ML Engine. The system now autonomously parses, chunks, and vectorizes user-uploaded documents (PDF, TXT, MD) utilizing Langchain (`PyPDFLoader`, `RecursiveCharacterTextSplitter`).
20
+ - **Episodic Memory Sync**: Ingested document chunks are strictly categorized as `DOCUMENT` and seamlessly synchronized into both the SQLite episodic database and the local ChromaDB vector store for instant RAG retrieval.
21
+
22
+ ### Desktop & Dashboard UI
23
+ - **Sidebar State Fix**: Resolved a visual bug in the SvelteKit Desktop app where active chat sessions remained highlighted even while the global Search modal was open.
24
+ - **Dashboard Cleanup**: Removed deprecated components (e.g., `DefiKeys.tsx`) and optimized settings panels across the React dashboard.
25
+
26
+ ## [26.7.20]
27
+ ### Desktop App MVP: UI/UX & Architecture Overhaul
28
+ - **Premium Interface Scaling**: Completely redesigned the Settings modal dimensions for desktop viewing. Expanded the modal wrapper to `w-[92vw]` with a maximum width of `1400px`, and removed legacy mobile constraints (`max-w-3xl`) from all submenu components (Agent Profile, LLM Engine, etc.) to utilize the full horizontal workspace natively.
29
+ - **Scroll Hierarchy Fixes**: Resolved a severe UX issue where scrolling inside long submenus (like Playbooks) would scroll the entire modal out of view. Enforced a strict height constraint (`h-[72vh]`) and `min-h-0` on inner containers, allowing localized, independent scrolling within the content pane.
30
+ - **Svelte 5 Reactivity Migration**: Refactored legacy Svelte 4 `<svelte:component>` dynamic imports within `SettingsModal.svelte`. Replaced them with modern Svelte 5 `{@const}` tags to eliminate compile-time deprecation warnings and ensure full compatibility with the new Runes architecture.
31
+ - **Asset Pipeline Synchronization**: Fixed pervasive `404 Not Found` errors for network/router icons (1inch, LiFi, CoinGecko, 0x) in the Desktop app by properly synchronizing the `public/routers/` directory from the Dashboard into the Desktop's `static/routers/` distribution folder.
32
+
33
+ ### Desktop App MVP: Core Features Porting
34
+ - **Voice Mode & File Upload**: Successfully ported Dashboard Web features to the SvelteKit Desktop app. The chat composer now fully supports **Voice Mode** (via Web Speech API for TTS/STT) and **File Upload** (document analysis via `/api/upload`).
35
+ - **Advanced Risk Policies**: Integrated missing risk settings into the Desktop `Risk & Policy` menu, including **Daily Spend Limit**, **Strictly Avoid Memecoins** toggle, and **Allowed Contracts Whitelist**.
36
+ - **Auto-Lock Session (Idle Timeout)**: Added global idle timeout protection to the Desktop app. Users can configure auto-lock (15, 30, or 60 minutes) in `Security & Privacy`. Once locked, a glassmorphism overlay blocks the UI until authorized via the terminal (`nyxora unlock`).
37
+
38
+ ### Desktop Bug Fixes & Semantic Alignment
39
+ - **Settings Auto-Save Illusion (Critical Fix)**: Fixed a severe UX logic flaw where settings were retained in memory even if the user cancelled/closed the modal. Introduced an explicit **Save Configuration** and **Cancel** button mechanism. The settings modal now safely fetches a fresh configuration state from the backend upon closing, guaranteeing that unsaved edits are flawlessly discarded.
40
+ - **Semantic Text Refinement**: Updated Desktop wording in the Security tab from "Dashboard Access" to "App Access" to accurately reflect the native application environment.
41
+
42
+ ### Frontend Architecture & Core Refactoring
43
+ - **SvelteKit Migration (Desktop)**: Overhauled the native desktop interface by migrating from React to SvelteKit. Unified the component design system under `packages/desktop/src/lib/components`.
44
+ - **State Management**: Upgraded from React hooks to native Svelte Stores (`stores/app.ts`, `stores/wallet.ts`) for seamless state propagation.
45
+ - **Core Integrations**: Updated `osAgent.ts`, `llmProvider.ts`, and `logger.ts` to seamlessly plug into the new architectural layout.
46
+
47
+ ## [26.7.19]
48
+ ### Web3 & Market Intelligence
49
+ - **Super-Report & AI Financial Advisor**: Merged GoPlus Security data directly into the `analyze_market` tool to eliminate duplicate API requests. The LLM now receives a comprehensive dataset including Liquidity, 24h Volume, Pool Age, Holder Concentration (real-time from GoPlus), and smart contract security status (Honeypot, Taxes) in a single unified execution.
50
+ - **Advisor Persona Nudge**: Injected a "Sharp Crypto Financial Advisor" persona into the LLM's system note. The AI is now instructed to actively evaluate the combined fundamental and security metrics to provide concrete, strategic recommendations (e.g., Quick Flip, Hold, DCA, Avoid) rather than just passively reciting numbers.
51
+
52
+ ### Agent Intelligence & Context Engine
53
+ - **Gen-AI Execution & Discipline Upgrade**: Completely overhauled `promptBuilder.ts` by injecting advanced cognitive discipline instructions (including *Execution Bias* and *Output Directives*). The AI is now significantly more proactive in utilizing tools, highly resilient to failures (*varies strategy* instead of giving up), and responds with a strict, senior-developer brevity (*anti-loop*, *anti-repetition*).
54
+ - **Date/Time Context Optimization**: Removed deprecated instructions that forced the LLM to execute a terminal command to check the current time. The system datetime context is now dynamically injected during prompt building, allowing the AI to read it instantly from memory. This saves unnecessary tool calls and reduces API quota consumption.
55
+
56
+ ### Architecture & Memory Unification
57
+ - **Memory Fragmentation Cleanup**: Resolved a cross-language memory storage architectural conflict. Previously, the Node.js core wrote explicit preferences to `.nyxora/data/user.md` while the Python ML Engine wrote inferred narrative memories to `.nyxora/memory/USER.md`, creating severe overwrite risks on case-insensitive operating systems (Windows/Mac).
58
+ - **ML Engine Refactor**: Modified Python endpoints to exclusively read and write to the `data` directory. AI-generated narrative files have been systematically renamed to `narrative_user.md` and `narrative_memory.md` to cleanly separate them from explicit user profiles.
59
+ - **LLM Prompt Header Clarification**: Updated memory injection headers in the Node.js `system prompt` to be strictly descriptive (`EXPLICIT USER PREFERENCES` vs `AI INFERRED USER NARRATIVE`), eliminating LLM context confusion.
60
+
61
+ ### Bug Fixes & Stability
62
+ - **Tool Loop Limit Expansion**: Increased the `MAX_TURNS` threshold in `osAgent.ts` from 10 to 30. This empowers the agent to autonomously execute significantly longer chained processes and complex coding refactors without being prematurely interrupted by system limits.
63
+ - **System Nudge UI Leak Remediation**: Prevented internal error logs from leaking into the user interface. When the LLM hallucinates or enters a prolonged *Silent Stop* that exhausts the Nudge tolerance, the agent no longer spews raw logs (`{"level":"error"}`). Instead, it gracefully intercepts the failure and returns a polite fallback response to the user.
64
+
65
+ ## [26.7.18]
66
+ ### NPM Global Installation Fixes
67
+ - **Drastic Installation Size Reduction**: Moved UI and Desktop build tools (`electron-builder`, `vite`, `tailwindcss`, `react`, etc.) from `dependencies` to `devDependencies` in the root `package.json`. This ensures global installations (`npm install -g nyxora`) are lightweight and fast.
68
+ - **Removed Deprecation Warnings**: By moving `electron-builder` to `devDependencies`, end-users will no longer see deprecation warnings from legacy upstream dependencies (`inflight`, `rimraf@2`, `glob@7`) during global installation.
69
+ - **Documentation Update**: Removed the `nyxora desktop` command from public CLI documentation, as this command is designed exclusively for local development and standalone distribution, not for global NPM installations.
70
+
71
+ ### Core Agent Enhancements
72
+ - **Robust Context Compression**: Overhauled the context summarizer to eliminate silent API errors (HTTP 400) during long sessions. Introduced `Boundary Snapping` to guarantee that LLM tool calls and tool responses are never split during truncation. Implemented `Soft Archiving` in the SQLite `messages` table, allowing the UI to transparently render the entire conversation history while keeping the LLM context efficiently compressed.
73
+
74
+ ## [26.7.17]
75
+ ### NPM Global Publishing & Monorepo Enhancements
76
+ - **Global `npm install` Support**: Merged `packages/desktop` dependencies (`react`, `electron`, `vite`, etc.) into the root `package.json`. This ensures that when users run `npm install -g nyxora`, all dependencies required for the Desktop MVP are installed gracefully without causing read-only permission errors in the global directory.
77
+ - **ML Engine Auto-Setup (`postinstall`)**: Engineered `scripts/install-ml-engine.js` and hooked it into NPM's `postinstall` lifecycle. The framework now automatically spins up an isolated Python virtual environment at `~/.nyxora/ml-engine/venv` and installs all AI dependencies in the background during global installation.
78
+ - **CLI Desktop Hardening**: Stripped out the dynamic `npm install` mechanism from the `nyxora desktop` command, relying entirely on the new robust global dependency resolution to prevent `EACCES` permission errors for end-users.
79
+
80
+ ## [26.7.16]
81
+ ### Architecture Upgrade
82
+ - **Docker Sandbox Execution (`run_terminal_command`)**: Upgraded terminal execution tool to support an isolated environment (`envType: "docker"`). When enabled, commands run inside an ephemeral Docker container (default: `python:3.11-slim`), safely sandboxing code execution and file manipulation from the host OS.
83
+ - **Trajectory Generation (`TrajectoryLogger`)**: Implemented automated dataset generation. The agent loop now hooks into `TrajectoryLogger` to save execution histories as JSONL files (`~/.nyxora/trajectories.jsonl`). Trajectories are formatted with `<tool_call>` and `<tool_response>` tags, ready for next-gen tool-calling model fine-tuning.
84
+ - **Subagent Delegation (`delegate_subagent`)**: Empowered the core agent with the ability to recursively spawn isolated clone instances. Using the new `delegate_subagent` skill, the agent can dispatch long-running or complex tasks in parallel without polluting the main context window.
85
+ - **Terminal User Interface (TUI)**: Developed a native TUI using `blessed` for non-GUI / VPS users. Features a multi-pane layout (Chat, Active Tools, Subagents) and utilizes SSE streaming to render real-time LLM responses identically to the Web Dashboard. Launch via `nyxora tui`.
86
+
87
+ ### Features & Platform Expansion
88
+ - **Nyxora Desktop MVP**: Successfully engineered and launched a native, standalone Desktop Application using Electron, Vite, and React.
89
+ - The desktop client seamlessly mirrors the sleek aesthetic of the web dashboard while providing a native OS-level experience.
90
+ - Introduced the new `nyxora desktop` CLI command. Running this command autonomously fetches dependencies, builds the renderer, and launches the Electron wrapper.
91
+ - **Zero-Touch Daemon Sync**: Implemented an intelligent lifecycle manager within the Electron main process. The app autonomously bootstraps the Nyxora background daemon (`nyxora start`) upon launch and securely tears it down when closed.
92
+ - **Race Condition & Auth Security Fix**: Engineered a robust asynchronous waiting mechanism and internal Vite proxy (`vite.config.ts`) to flawlessly synchronize the `runtime.token` injection between the backend daemon and the frontend UI, completely eradicating startup race conditions and CORS origin blocks.
93
+
94
+ ### Self-Learning & Continuous Improvement
95
+ - **Proactive Tool-Iteration Trigger**: Refactored the core agent loop (`osAgent.ts`) to proactively trigger the background review engine (`ml-engine`) after every 10 tool iterations, rather than waiting for an arbitrary session end or a 3-minute idle timeout.
96
+ - **Aggressive Skill Creation**: Upgraded the `_COMBINED_REVIEW_PROMPT` in `ml-engine` to explicitly command the AI to be highly active in creating and patching skills. Frustration and user corrections are now treated as "FIRST-CLASS skill signals".
97
+ - **Deep Context Window**: Expanded the history payload sent to the background review engine from 30 messages to 100 messages, ensuring the background reviewer has the complete context of long debugging struggles.
98
+ - **UI Learning Notifications**: The core gateway now awaits the background review's execution result. When the AI successfully creates or patches a skill, a `💾 Self-improvement review` system message is automatically injected into the chat UI, providing immediate transparency that the agent is learning.
99
+ - **Persistent System Corrections**: Upgraded the Reflection Engine's schema (`reflection.ts`) to extract and permanently store `system_correction` memories. The AI now actively remembers explicit user rules regarding tool limitations or preferred workflows across all future sessions.
100
+ - **UI Tool Status Sanitization**: Fixed a visual bug where raw JSON tool arguments and execution states were leaking into the chat interface. Upgraded `getToolLabel` (`osAgent.ts`) to aggressively truncate tool outputs and provide clean status indicators.
101
+
102
+ ## [26.7.15]
103
+ ### Bug Fixes
104
+
105
+ #### Sudo Command Refused by LLM
106
+ - **Root Cause**: The `[SUDO & PACKAGE INSTALL STRATEGY]` section in `promptBuilder.ts` was written before `run_terminal_command_pty` existed. It told the LLM "this tool runs in a NON-INTERACTIVE shell" and instructed it to tell the user to run sudo manually — causing the LLM to refuse all sudo commands.
107
+ - **Fix (`promptBuilder.ts`)**: Rewrote the SUDO section. LLM now knows it has two terminal tools (`run_terminal_command` for non-interactive, `run_terminal_command_pty` for sudo/interactive), is instructed to ALWAYS use PTY for sudo, and is explicitly told it is "FULLY CAPABLE of running sudo commands." Password injection from `config.yaml → security.sudo_password` is handled automatically by the PTY tool.
108
+
109
+ #### LLM Output Repetition Loop
110
+ - **Root Cause**: When the LLM was corrected by the user (e.g., after giving wrong sports results), it entered an uncertain state and looped — echoing the same phrase in multiple rephrasings within a single response (e.g., "gue kabarin hasilnya kalo mau, gue kabarin hasilnya begitu selesai, gue kabarin aja kabarin aja...").
111
+ - **Fix #1 (`llmProvider.ts`)**: Added `frequency_penalty: 0.6` and `presence_penalty: 0.3` to all `OpenAIAdapter.chat()` and `.stream()` calls. These parameters suppress token-level repetition at the API level, effective for all OpenAI-compatible providers (Groq, OpenRouter, xAI, Mistral, DeepSeek, etc.).
112
+ - **Fix #2 (`promptBuilder.ts`)**: Added `[ANTI-REPETITION]` rule to the universal discipline prompt: LLM is instructed to never repeat the same phrase, clause, or sentence more than once per response — if it catches itself echoing, it must STOP immediately.
113
+
114
+ #### Search Inaccuracy / Hallucination on Factual Queries
115
+ - **Root Cause (5 bugs identified)**:
116
+ 1. Temporal keyword `"tadi"` (and others: `kemarin`, `besok`, `pagi ini`, etc.) not detected → date not injected → search engine returned mixed results from multiple years.
117
+ 2. LLM frequently ignored `depth=2` instruction in tool description → only snippets fetched → scores/data in article body never reached LLM context.
118
+ 3. No `isFactualQuery` detection → sport/news/journal queries not auto-upgraded to `depth=2`.
119
+ 4. No rule forbidding LLM from filling data gaps using training memory after an ambiguous search result.
120
+ 5. No source citation enforcement → LLM gave hallucinated facts without accountability.
121
+ - **Fix #1 (`searchWeb.ts`)**: Expanded `isTimeSensitive` detection with 15+ new Indonesian/English temporal keywords (`tadi`, `kemarin`, `besok`, `malam ini`, `pagi ini`, `sore ini`, `minggu ini`, `bulan ini`, `baru saja`, `habis`, `sudah selesai`, `yesterday`, `tomorrow`, `this week`, `recent`, `breaking`). Added proper date arithmetic for `kemarin`/`yesterday` (now−1 day) and `besok`/`tomorrow` (now+1 day).
122
+ - **Fix #2 (`searchWeb.ts`)**: Added `isFactualQuery` detector covering sports (skor, hasil, pertandingan, piala, liga, klasemen), news (berita, kejadian), journals (jurnal, penelitian, paper, studi), and finance (harga, saham, inflasi). Factual queries auto-upgrade to `effectiveDepth = Math.max(depth, 2)` regardless of LLM's depth argument.
123
+ - **Fix #3 (`searchWeb.ts`)**: Added `[SEARCH_CONFIDENCE: HIGH/MEDIUM/LOW]` signal to all search outputs. Confidence is derived from how many top-3 articles were successfully scraped. If `LOW` on a factual/temporal query, an explicit warning is injected into the tool result instructing the LLM to admit data unavailability instead of guessing.
124
+ - **Fix #4 (`promptBuilder.ts`)**: Replaced `<web_search_accuracy>` section with stronger `[GROUNDED ANSWERS ONLY]` rule: after calling `search_web`, answers must be based strictly on search results. If `[SEARCH_CONFIDENCE: LOW]` or the specific fact is absent, LLM must say "Gue belum nemu data yang spesifik dari search" — never fill gaps from training memory for 2024–2026 events.
125
+ - **Fix #5 (`promptBuilder.ts`)**: Added `[SOURCE CITATION]` enforcement: when stating any specific fact (score, result, date, statistic), LLM must include the source URL.
126
+ ## [26.7.14]
127
+ ### Agent Identity & Execution Discipline Overhaul
128
+ - **Semantic Intent Router Refactor (`reasoning.ts`)**: Upgraded the intent router to utilize a strict \`CLASSIFICATION MATRIX\` and Context Hierarchy Rules. This completely eradicates intent misclassification between Web3 and OS workflows, especially during context-switching.
129
+ - **Agent Identity Compression (`promptBuilder.ts`)**: Consolidated verbose \`[CRITICAL EXECUTION RULES]\` into 5 high-impact, token-efficient mandates (e.g., OUTPUT RESTRICTION, THINKING GATE, HARD HARDENING) to maximize model attention retention.
130
+ - **Strict Real-World Facts Guardrail**: Introduced mandatory \`search_web\` requirements for sports scores, schedules, and real-world news to completely eliminate LLM hallucination on dynamic data.
131
+ - **Anti-Silent Stop / Interactive Execution Flow (`promptBuilder.ts`)**: Replaced standard tool-call enforcements with \`[INTERACTIVE EXECUTION FLOW]\`. The agent is now permitted exactly one short conversational sentence before a tool call (both on success and recovery paths), but is strictly forbidden from ending its turn without attaching the corrected tool payload. This cures the "Silent Stop" / "Promise Without Action" bug while maintaining a natural, conversational UX.
132
+ - **Force Action User Correction (`osAgent.ts`)**: Refactored the User Correction Detectors to intercept scoldings with a \`[CRITICAL INTERCEPT: USER CORRECTION]\` signal. The LLM is now forced to fetch fresh ground-truth data via tools instead of endlessly apologizing and recycling stale context.
133
+
134
+ ### UI/UX & Quality of Life
135
+ - **Import Project Workflow Redesign**: Relocated the "Import Project" button from the main navigation sidebar into the "Workspaces" section header. The action is now represented by an intuitive `+` icon that perfectly scales with the slightly enlarged `0.85rem` section text, achieving a significantly cleaner UI layout while keeping workspace management centralized.
136
+
137
+ ### Performance — LLM Response Speed Optimization
138
+
139
+ #### Cold Start Latency Fix
140
+ - **Non-Blocking DeFi Aggregator Discovery** (`server.ts`): `aggregatorRegistry.autoDiscover()` was previously `await`-ed synchronously before `app.listen()`, blocking the entire server startup by 2–5 seconds while it probed external DeFi providers. Refactored to `setImmediate()` fire-and-forget so the server starts accepting LLM requests immediately after plugins are loaded, with provider discovery happening in the background.
141
+ - **ML Engine Fetch Timeout** (`promptBuilder.ts`): All 3 network calls to the local Python ML Engine (`/memory/rag`, `/memory/narrative`, `/skills/list`) previously had no timeout. During cold start, when the ML Engine is still booting, these calls would hang for up to 2 minutes waiting for a TCP connection. Added `AbortSignal.timeout(1500)` to each fetch — if the ML Engine is not ready, calls fail in ≤1.5s and return empty strings gracefully, keeping the first LLM response fast.
142
+
143
+ #### Per-Request Latency Optimization
144
+ - **Parallel Volatile Prompt Parts** (`promptBuilder.ts`): `buildEpisodicMemories()` and `buildNarrativeMemories()` were called sequentially (`await` one, then `await` the other). Refactored to `Promise.all([...])` — both network calls now run concurrently, saving ~300–600ms per request.
145
+ - **Parallel Narrative + Skills Fetch** (`promptBuilder.ts`): Inside `buildNarrativeMemories()`, the `/memory/narrative` and `/skills/list` fetches were also sequential. Parallelized with `Promise.all()`.
146
+ - **TTL Cache for Narrative Memory & Skills** (`promptBuilder.ts`): Added a 30-second in-memory TTL cache for narrative memory and skills list. These change only when the user explicitly saves something — re-fetching on every message was wasteful. Cache hit returns instantly with zero network overhead.
147
+ - **5-Second Build Cache** (`promptBuilder.ts`): Added a short-lived cache keyed by `agentType + userInput[:80]`. Prevents double-building the system prompt when the router warm-up and the agent's own `getSystemPrompt()` call happen within 5 seconds of each other.
148
+ - **Parallel LLM Router + System Prompt Warm-Up** (`reasoning.ts`): For messages that don't match any keyword (triggering the LLM semantic router), the router call and the OS system prompt pre-build now run **simultaneously** via `Promise.all()`. Since `'os'` is the most common fallback, its system prompt is pre-warmed into the 5s build cache while the router is deciding — making the router's latency effectively invisible to the user. Applies to both sync and stream paths.
149
+ - **Static Import for `historySanitizer`** (`osAgent.ts`, `web3Agent.ts`): Dynamic `require('../utils/historySanitizer')` inside function bodies (4 occurrences across 2 files) replaced with static ES `import` at the top of each file.
150
+
151
+ ## [26.7.12]
152
+ ### Features
153
+ - **TTY Support for Interactive Commands**: Introduced a new tool `run_terminal_command_pty` implemented using `node-pty` to handle interactive shell commands (like `vim`, `nano`, and REPLs). Nyxora can now automatically execute `sudo` commands by securely injecting a password from `~/.nyxora/config/config.yaml`.
154
+ - **Tool Selection Safeguards**: Implemented a defense system (Clearer Descriptions and Runtime Auto-Detection) to help the LLM choose the correct terminal tool and gracefully fail if `sudo` is used with the non-PTY tool.
155
+
156
+ ### Performance
157
+ - **Context Compression Optimization**: Refactored the agent loop to move context summarization (`compressHistory`) to a one-time operation before the loop starts, reducing redundant LLM calls by up to 66% and improving response time by ~33%.
158
+
159
+ ## [26.7.11]
160
+ ### Bug Fixes & Stability
161
+ - **Ghost Daemon & Stale Transactions Fix**: Resolved a critical issue where the `Nyx Daemon` leaked into the interactive CLI chat due to a static top-level import in `cli.ts`. Replaced with a dynamic import to keep the CLI environment pure. Additionally, overhauled the SQLite transaction manager by introducing a 3-minute transaction timeout (previously there was no expiration), and implemented an `auto-cleanup` mechanism that forcefully purges (`failed`) all stale pending transactions upon daemon startup to prevent persistent "ghost" transaction prompts after forced system shutdowns.
162
+
163
+ ## [26.7.10]
164
+ ### Web3 Integrations
165
+ - **Robinhood Chain Support**: Officially integrated `Robinhood Chain` (Mainnet) and `Robinhood Testnet` support natively via `viem` `v2.55.0` upgrade. Added seamless RPC mappings, updated the dashboard network selectors with official SVG branding, and ensured high-frequency trading capabilities in the Signer remain stable.
166
+
167
+ ### Core Architecture & Routing
168
+ - **Deterministic Intent Fast-Path**: Bypassed the LLM semantic router for short confirmation phrases. Messages containing global confirmation keywords (e.g., "yes", "sure", "proceed") now deterministically inherit the strict contextual boundary (`os` or `web3`) of the Assistant's previous permission request, completely eradicating routing hallucinations.
169
+ - **Global Codebase Standardization**: Refactored hardcoded regional slang from the routing logic into a comprehensive, professional English-first `CONFIRM_WORDS` array, natively supporting global users while retaining common localized confirmations as secondary fallbacks.
170
+
171
+ ### Fallback Execution Engine
172
+ - **Native `<execute_bash>` Support**: Enhanced the `osAgent` and `web3Agent` Fallback Parsers to autonomously intercept and parse `<execute_bash>` and `<execute>` XML tags. This restores full execution capability for open-weight models that instinctively utilize these tags instead of strict JSON tool calls.
173
+ - **Display Sanitization Hardening**: Appended `execute_bash` and `execute` to the automated UI Sanitizer `tagsToRemove` registry. Raw bash execution blocks hallucinated by the LLM are now stripped at the edge layer before streaming to Telegram or the Dashboard.
174
+
175
+ ### Web3 Signer SDK & Execution Guardrails
176
+ - **Receipt Waiter Integration (Anti-False-Positive)**: Remediated a severe "Fire-and-Forget" architectural bug in `NyxoraSigner.ts` where broadcasted transactions were immediately reported as successful to the LLM regardless of actual on-chain finality. The Signer now strictly executes a `waitForTransactionReceipt` hook (capped at a 20-second timeout).
177
+ - **Revert Detection**: If a transaction reverts on-chain (e.g., due to strict MEV slippage or gas exhaustion), the Signer violently rejects the promise with `reverted`, preventing the AI from falsely declaring success.
178
+ - **Pending Timeout Grace**: If the blockchain experiences congestion and fails to confirm within the 20-second window, the system falls back gracefully by returning `"Transaction broadcasted (Pending receipt)"` to ensure the 30-second Policy Engine HTTP timeout is never triggered, allowing the AI to report accurate pending status.
6
179
 
7
180
  ## [26.7.9]
8
181
  ### Features & Architecture
package/README.md CHANGED
@@ -2,14 +2,15 @@
2
2
  **Your Personal Web3 Assistant.**
3
3
 
4
4
 
5
- [![Status: Prototype](https://img.shields.io/badge/Status-Prototype-orange.svg)](#)
5
+ [![Status: Alpha](https://img.shields.io/badge/Status-Alpha-orange.svg?style=for-the-badge)](#)
6
+ [![Donate on DeBank](https://img.shields.io/badge/DONATE-DEBANK-FE7E41?style=for-the-badge&logo=ethereum&logoColor=white)](https://debank.com/profile/0xe5c21f46993c67cfe04fcf1579486d390be7b535)
6
7
 
7
- [![MCP Supported](https://img.shields.io/badge/MCP-Supported-blue.svg)](#)
8
- [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
9
- [![Security: Defense-in-Depth](https://img.shields.io/badge/Security-Defense--in--Depth-blue.svg)](#️-advanced-security-threat-model)
10
- [![Execution: Cryptographic Approval](https://img.shields.io/badge/Execution-Cryptographic--Approval-orange.svg)](#️-advanced-security-threat-model)
11
- [![Privacy: Local-Only Keys](https://img.shields.io/badge/Privacy-Local--Only--Keys-success.svg)](#️-advanced-security-threat-model)
12
- [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://makeapullrequest.com)
8
+ [![MCP Supported](https://img.shields.io/badge/MCP-Supported-blue.svg?style=for-the-badge)](#)
9
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?style=for-the-badge)](https://opensource.org/licenses/MIT)
10
+ [![Security: Defense-in-Depth](https://img.shields.io/badge/Security-Defense--in--Depth-blue.svg?style=for-the-badge)](#️-advanced-security-threat-model)
11
+ [![Execution: Cryptographic Approval](https://img.shields.io/badge/Execution-Cryptographic--Approval-orange.svg?style=for-the-badge)](#️-advanced-security-threat-model)
12
+ [![Privacy: Local-Only Keys](https://img.shields.io/badge/Privacy-Local--Only--Keys-success.svg?style=for-the-badge)](#️-advanced-security-threat-model)
13
+ [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=for-the-badge)](https://makeapullrequest.com)
13
14
 
14
15
  Nyxora is a **secure, non-custodial runtime infrastructure for autonomous onchain agents** built with a robust Monorepo architecture (Node.js & React). Designed for autonomous workflows with a premium Utility-Centric dark-themed UI and strict client-side key isolation.
15
16
 
@@ -96,7 +97,9 @@ It operates under a **Zero-Trust, Defense-in-Depth Cryptographically Bound Human
96
97
 
97
98
  ### 💻 OS & Web2 Skills (Off-Chain)
98
99
  * **Google Workspace Automation 🚀**: Transform Nyxora into your ultimate personal assistant. The agent can read your latest Gmail inbox, check your Google Calendar, extract text from Google Docs, and even append expense/trading logs directly to your Google Sheets.
99
- * **System Automation & Full OS Access**: Instruct the agent to read/write local files, run terminal commands, and browse the web natively.
100
+ * **System Automation & Full OS Access**: Instruct the agent to read/write local files, run interactive terminal commands (with secure `sudo` password auto-injection), and browse the web natively.
101
+ * **Docker Sandbox Execution**: Safely run untrusted code and manipulate files inside an isolated, ephemeral Docker container environment to protect your host OS.
102
+ * **Recursive Subagent Delegation**: Dispatch long-running or highly complex tasks to isolated clone subagents that run in parallel without clogging your main conversational context window.
100
103
  * **Automated Excel Reporting**: Instruct the agent to compile its Web3 portfolio or transaction history findings and autonomously generate beautiful `.xlsx` spreadsheet reports saved directly to your local machine.
101
104
  * **Unstoppable Synergy**: Combine both engines with a single prompt. Example: *"Read the latest presale token email from my Gmail, automatically set a Take Profit limit order on Uniswap, and log the execution result to my Google Sheets."*
102
105
  * **Autonomous Skill Synthesizing (`skillExtractor.ts`)**: Instruct the AI to learn a new workflow, and it will autonomously write the Node.js execution logic and schema, saving it locally as a custom skill following the **`agentskills.io`** standard!
@@ -136,7 +139,7 @@ graph TD
136
139
  User["User / External Client"]:::external
137
140
 
138
141
  Dashboard["Dashboard (UI)<br/>Port 5173"]:::ui
139
- MCP["MCP Server<br/>Port 3001"]:::ui
142
+ MCP["MCP Server<br/>(Stdio / JSON-RPC)"]:::ui
140
143
 
141
144
  Core["Core LLM Runtime<br/>Port 3000<br/>(NLP Parsing, Routing, Agent Logic)"]:::core
142
145
 
@@ -185,7 +188,7 @@ To dive deeper into the technical details of our Zero-Knowledge security archite
185
188
  ## 🚀 Quick Start & Installation
186
189
 
187
190
  ### Prerequisites
188
- Nyxora requires **Node.js 18+** and **Python 3.10+** (for the ML Cognitive Engine) to be installed on your system.
191
+ Nyxora requires **Node.js 22+** and **Python 3.10+** (for the ML Cognitive Engine) to be installed on your system.
189
192
 
190
193
  ### Option 1: One-Line Installation (Recommended)
191
194
  The fastest way to install Nyxora is via our smart installation wrapper. This script automatically prepares Node.js (if missing) and securely fetches the Nyxora daemon directly from the NPM Registry. *(Note: You must have Python 3.10+ pre-installed on your system, as this script only handles Node.js dependencies).*
@@ -207,6 +210,8 @@ If you already have Node.js installed, you can natively install Nyxora globally
207
210
  # Install globally
208
211
  npm install -g nyxora
209
212
 
213
+ > 💡 **ML Engine Setup**: When you run `npm install -g nyxora`, the Python ML Engine dependencies are automatically installed via the `postinstall` script. Requires Python 3.10+.
214
+
210
215
  # Run the interactive setup wizard
211
216
  # (Automatically validates Node.js & Python 3.10+ requirements, configures API Keys, Wallet, and ML Environment)
212
217
  nyxora setup
@@ -216,6 +221,12 @@ nyxora start
216
221
 
217
222
  # Open the interactive UI dashboard
218
223
  nyxora dashboard
224
+
225
+ # 🖥️ Open the interactive Terminal UI (for VPS/CLI users)
226
+ nyxora tui
227
+
228
+ # 💬 Chat interactively via the terminal
229
+ nyxora chat
219
230
  ```
220
231
 
221
232
  ### Option 2: Local Development (Source Code)
@@ -228,7 +239,7 @@ cd Nyxora
228
239
  # 1. Install Dependencies
229
240
  npm install
230
241
 
231
- # 2. Build the Core, MCP Server, and Dashboard UI
242
+ # 2. Build the Core, TUI, MCP Server, and Dashboard UI
232
243
  npm run build
233
244
 
234
245
  # 3. Interactive Setup Wizard (Will also install Python ML requirements via pip)
@@ -236,6 +247,9 @@ npm run setup
236
247
 
237
248
  # 4. Start the Application (Spawns Node.js Core and Python FastAPI sidecar)
238
249
  npm start
250
+
251
+ # 5. (Optional) Run the Desktop App locally
252
+ npm run desktop
239
253
  ```
240
254
 
241
255
  *(If you are actively developing and modifying the source code, use `npm run dev` to enable hot-reloading for the frontend and backend).*
package/SUPPORT.md ADDED
@@ -0,0 +1,18 @@
1
+ # Support Nyxora Protocol
2
+
3
+ Nyxora is an open-source initiative built on the belief that powerful, zero-trust Web3 AI infrastructure should be accessible to everyone. We dedicate countless hours to research, continuous development, and maintaining this ecosystem to ensure it remains secure and cutting-edge.
4
+
5
+ If Nyxora has brought value to you, your projects, or your organization, consider supporting our ongoing development. While completely optional, your contribution plays a vital role in helping us cover infrastructure costs, fund security audits, and dedicate more time to shipping new features.
6
+
7
+ ### How to Contribute
8
+
9
+ We gratefully accept community support via any EVM-compatible network (Ethereum, Arbitrum, Optimism, Polygon, Binance Smart Chain, etc.).
10
+
11
+ **EVM Address:**
12
+ `0xE5c21F46993C67CFe04FCF1579486D390Be7B535`
13
+
14
+ > 🔗 **[View & Donate via DeBank](https://debank.com/profile/0xe5c21f46993c67cfe04fcf1579486d390be7b535)**
15
+
16
+ *Every contribution, no matter the size, is deeply appreciated and directly fuels the future of autonomous Web3 AI.*
17
+
18
+ Thank you for being an amazing part of the Nyxora journey! 🌌
package/bin/nyxora.mjs CHANGED
@@ -362,6 +362,8 @@ async function serveMcp() {
362
362
  await new Promise(resolve => child.on('close', resolve));
363
363
  }
364
364
 
365
+
366
+
365
367
  async function main() {
366
368
  switch(command) {
367
369
  case 'doctor': await runDoctor(); break;
@@ -379,6 +381,41 @@ async function main() {
379
381
  case 'clean-logs': await cleanLogs(); break;
380
382
  case 'autostart': await autostart(process.argv[3]); break;
381
383
  case 'mcp': await serveMcp(); break;
384
+
385
+ case 'desktop': {
386
+ const desktopPkg = path.join(projectRoot, 'packages/desktop/package.json');
387
+ const desktopDist = path.join(projectRoot, 'packages/desktop/dist-electron');
388
+ if (!fs.existsSync(desktopPkg) || !fs.existsSync(desktopDist)) {
389
+ console.error('❌ Desktop app is not available in the npm package.');
390
+ console.error(' The Desktop app must be built from source.');
391
+ console.error(' Clone the repo and run: git clone https://github.com/nyxoraAI/Nyxora && cd Nyxora && npm install && npm run desktop');
392
+ process.exit(1);
393
+ }
394
+ const { default: open } = await import('open');
395
+ await open(desktopDist);
396
+ break;
397
+ }
398
+
399
+ case 'tui': {
400
+ // Spawn pre-compiled TUI directly using Node.
401
+ // We must avoid wrappers like `npx` or `npm run` which spawn subshells
402
+ // and break TTY inheritance, causing Ink to think it's not a TTY (which makes it invisible).
403
+ const tuiDist = path.join(projectRoot, 'packages/tui/dist/index.js');
404
+ if (!fs.existsSync(tuiDist)) {
405
+ console.error('❌ TUI is not available (missing compiled output).');
406
+ console.error(' If you installed from npm, try: npm install -g nyxora@latest');
407
+ console.error(' If running from source: npm run build');
408
+ process.exit(1);
409
+ }
410
+
411
+ const childTui = spawn('node', [tuiDist], {
412
+ cwd: path.join(projectRoot, 'packages/tui'),
413
+ stdio: 'inherit',
414
+ env: { ...process.env }
415
+ });
416
+ await new Promise(resolve => childTui.on('close', resolve));
417
+ break;
418
+ }
382
419
  case '-v':
383
420
  case '--v':
384
421
  case '--version':
package/dist/launcher.js CHANGED
@@ -66,6 +66,11 @@ const spawnService = (name, command, args, env, inheritStdio = false, cwd) => {
66
66
  }
67
67
  crashCount++;
68
68
  if (crashCount > 5) {
69
+ if (name === 'ML Engine') {
70
+ console.error(`[Launcher] ML Engine crashed 5 times. Disabling it to prevent system shutdown.`);
71
+ isShuttingDown = true;
72
+ return;
73
+ }
69
74
  console.error(`[Launcher] FATAL: ${name} crashed 5 times in 1 minute. Initiating emergency shutdown.`);
70
75
  isShuttingDown = true;
71
76
  try {
@@ -147,7 +152,8 @@ setTimeout(() => {
147
152
  const IS_WINDOWS_LAUNCHER = process.platform === 'win32';
148
153
  const pythonBinDir = IS_WINDOWS_LAUNCHER ? 'Scripts' : 'bin';
149
154
  const pythonExe = IS_WINDOWS_LAUNCHER ? 'python.exe' : 'python';
150
- const pythonPath = path_1.default.join(process.env.HOME || process.env.USERPROFILE || '', '.nyxora', 'ml-engine', 'venv', pythonBinDir, pythonExe);
155
+ const defaultPythonPath = path_1.default.join(process.env.HOME || process.env.USERPROFILE || '', '.nyxora', 'ml-engine', 'venv', pythonBinDir, pythonExe);
156
+ const pythonPath = process.env.ML_ENGINE_PYTHON_PATH || defaultPythonPath;
151
157
  if (fs_1.default.existsSync(pythonPath)) {
152
158
  let mlDir = path_1.default.join(__dirnameResolved, 'packages', 'ml-engine');
153
159
  if (!fs_1.default.existsSync(mlDir))
@@ -42,11 +42,55 @@ const parser_1 = require("../config/parser");
42
42
  const telegram_1 = require("../channels/telegram");
43
43
  const crypto_1 = require("crypto");
44
44
  const picocolors_1 = __importDefault(require("picocolors"));
45
+ const fs_1 = __importDefault(require("fs"));
46
+ const paths_1 = require("../config/paths");
47
+ const CRON_PERSIST_FILE = (0, paths_1.getPath)('cron_jobs.json');
48
+ function loadPersistedJobs() {
49
+ try {
50
+ if (fs_1.default.existsSync(CRON_PERSIST_FILE)) {
51
+ const raw = fs_1.default.readFileSync(CRON_PERSIST_FILE, 'utf-8');
52
+ return JSON.parse(raw);
53
+ }
54
+ }
55
+ catch (e) {
56
+ console.warn(picocolors_1.default.yellow('[Cron] Failed to load persisted jobs, starting fresh.'));
57
+ }
58
+ return [];
59
+ }
60
+ function savePersistedJobs(jobs) {
61
+ try {
62
+ const data = Array.from(jobs.values()).map(j => ({
63
+ id: j.id,
64
+ expression: j.expression,
65
+ prompt: j.prompt,
66
+ createdAt: j.createdAt
67
+ }));
68
+ fs_1.default.writeFileSync(CRON_PERSIST_FILE, JSON.stringify(data, null, 2), 'utf-8');
69
+ }
70
+ catch (e) {
71
+ console.error(picocolors_1.default.red('[Cron] Failed to persist jobs:'), e);
72
+ }
73
+ }
45
74
  class CronManager {
46
75
  jobs = new Map();
47
- addJob(expression, prompt, sessionId) {
48
- const id = (0, crypto_1.randomUUID)();
49
- // Validate expression
76
+ constructor() {
77
+ // Restore jobs from disk on startup
78
+ const persisted = loadPersistedJobs();
79
+ if (persisted.length > 0) {
80
+ console.log(picocolors_1.default.cyan(`[Cron] Restoring ${persisted.length} persisted job(s) from disk...`));
81
+ for (const saved of persisted) {
82
+ try {
83
+ this._scheduleJob(saved.id, saved.expression, saved.prompt, saved.createdAt);
84
+ console.log(picocolors_1.default.green(`[Cron] ✓ Restored job ${saved.id} (${saved.expression})`));
85
+ }
86
+ catch (e) {
87
+ console.warn(picocolors_1.default.yellow(`[Cron] ✗ Skipped invalid job ${saved.id}: ${e.message}`));
88
+ }
89
+ }
90
+ }
91
+ }
92
+ _scheduleJob(id, expression, prompt, createdAt) {
93
+ // Validate expression first
50
94
  try {
51
95
  new croner_1.Cron(expression);
52
96
  }
@@ -56,11 +100,8 @@ class CronManager {
56
100
  const task = new croner_1.Cron(expression, async () => {
57
101
  console.log(picocolors_1.default.cyan(`[Cron] Executing job ${id}: "${prompt}"`));
58
102
  try {
59
- // Dynamically import processUserInput to avoid circular dependencies
60
103
  const { processUserInput } = await Promise.resolve().then(() => __importStar(require('./reasoning')));
61
- // Execute the prompt as a background system task
62
- const response = await processUserInput(prompt, 'system', undefined, sessionId || `cron-${id}`);
63
- // Push notification to Telegram if configured
104
+ const response = await processUserInput(prompt, 'system', undefined, `cron-${id}`);
64
105
  const config = (0, parser_1.loadConfig)();
65
106
  if (config.integrations?.telegram?.enabled && config.integrations?.telegram?.authorized_chat_id) {
66
107
  const message = `🤖 *AI Scheduled Report*\n\n${response}`;
@@ -75,13 +116,12 @@ class CronManager {
75
116
  }
76
117
  }
77
118
  });
78
- this.jobs.set(id, {
79
- id,
80
- expression,
81
- prompt,
82
- task,
83
- createdAt: Date.now()
84
- });
119
+ this.jobs.set(id, { id, expression, prompt, task, createdAt });
120
+ }
121
+ addJob(expression, prompt, sessionId) {
122
+ const id = (0, crypto_1.randomUUID)();
123
+ this._scheduleJob(id, expression, prompt, Date.now());
124
+ savePersistedJobs(this.jobs);
85
125
  console.log(picocolors_1.default.green(`[Cron] Scheduled new job ${id} with expression '${expression}'`));
86
126
  return id;
87
127
  }
@@ -90,6 +130,7 @@ class CronManager {
90
130
  if (job) {
91
131
  job.task.stop();
92
132
  this.jobs.delete(id);
133
+ savePersistedJobs(this.jobs);
93
134
  console.log(picocolors_1.default.yellow(`[Cron] Removed job ${id}`));
94
135
  return true;
95
136
  }