@nexus-ai-nexoralabs/cli 0.1.0

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 (411) hide show
  1. package/.env.example +16 -0
  2. package/LICENSE +21 -0
  3. package/README.md +106 -0
  4. package/dist/api/index.d.ts +81 -0
  5. package/dist/api/index.d.ts.map +1 -0
  6. package/dist/api/index.js +224 -0
  7. package/dist/api/index.js.map +1 -0
  8. package/dist/chat/chatService.d.ts +49 -0
  9. package/dist/chat/chatService.d.ts.map +1 -0
  10. package/dist/chat/chatService.js +163 -0
  11. package/dist/chat/chatService.js.map +1 -0
  12. package/dist/chat/contextBuilder.d.ts +19 -0
  13. package/dist/chat/contextBuilder.d.ts.map +1 -0
  14. package/dist/chat/contextBuilder.js +43 -0
  15. package/dist/chat/contextBuilder.js.map +1 -0
  16. package/dist/chat/conversationService.d.ts +25 -0
  17. package/dist/chat/conversationService.d.ts.map +1 -0
  18. package/dist/chat/conversationService.js +55 -0
  19. package/dist/chat/conversationService.js.map +1 -0
  20. package/dist/chat/index.d.ts +6 -0
  21. package/dist/chat/index.d.ts.map +1 -0
  22. package/dist/chat/index.js +6 -0
  23. package/dist/chat/index.js.map +1 -0
  24. package/dist/chat/messageService.d.ts +18 -0
  25. package/dist/chat/messageService.d.ts.map +1 -0
  26. package/dist/chat/messageService.js +26 -0
  27. package/dist/chat/messageService.js.map +1 -0
  28. package/dist/chat/promptTemplates.d.ts +19 -0
  29. package/dist/chat/promptTemplates.d.ts.map +1 -0
  30. package/dist/chat/promptTemplates.js +32 -0
  31. package/dist/chat/promptTemplates.js.map +1 -0
  32. package/dist/cli/agentRunner.d.ts +126 -0
  33. package/dist/cli/agentRunner.d.ts.map +1 -0
  34. package/dist/cli/agentRunner.js +892 -0
  35. package/dist/cli/agentRunner.js.map +1 -0
  36. package/dist/cli/bin.d.ts +14 -0
  37. package/dist/cli/bin.d.ts.map +1 -0
  38. package/dist/cli/bin.js +20 -0
  39. package/dist/cli/bin.js.map +1 -0
  40. package/dist/cli/index.d.ts +3 -0
  41. package/dist/cli/index.d.ts.map +1 -0
  42. package/dist/cli/index.js +2 -0
  43. package/dist/cli/index.js.map +1 -0
  44. package/dist/cli/inputEngine.d.ts +76 -0
  45. package/dist/cli/inputEngine.d.ts.map +1 -0
  46. package/dist/cli/inputEngine.js +281 -0
  47. package/dist/cli/inputEngine.js.map +1 -0
  48. package/dist/cli/main.d.ts +9 -0
  49. package/dist/cli/main.d.ts.map +1 -0
  50. package/dist/cli/main.js +144 -0
  51. package/dist/cli/main.js.map +1 -0
  52. package/dist/cli/uiFormatters.d.ts +108 -0
  53. package/dist/cli/uiFormatters.d.ts.map +1 -0
  54. package/dist/cli/uiFormatters.js +925 -0
  55. package/dist/cli/uiFormatters.js.map +1 -0
  56. package/dist/common/logger.d.ts +13 -0
  57. package/dist/common/logger.d.ts.map +1 -0
  58. package/dist/common/logger.js +43 -0
  59. package/dist/common/logger.js.map +1 -0
  60. package/dist/config/firstRunHealthCheck.d.ts +50 -0
  61. package/dist/config/firstRunHealthCheck.d.ts.map +1 -0
  62. package/dist/config/firstRunHealthCheck.js +196 -0
  63. package/dist/config/firstRunHealthCheck.js.map +1 -0
  64. package/dist/config/firstRunService.d.ts +53 -0
  65. package/dist/config/firstRunService.d.ts.map +1 -0
  66. package/dist/config/firstRunService.js +93 -0
  67. package/dist/config/firstRunService.js.map +1 -0
  68. package/dist/config/index.d.ts +30 -0
  69. package/dist/config/index.d.ts.map +1 -0
  70. package/dist/config/index.js +65 -0
  71. package/dist/config/index.js.map +1 -0
  72. package/dist/config/productionPaths.d.ts +34 -0
  73. package/dist/config/productionPaths.d.ts.map +1 -0
  74. package/dist/config/productionPaths.js +95 -0
  75. package/dist/config/productionPaths.js.map +1 -0
  76. package/dist/config/workspaceService.d.ts +42 -0
  77. package/dist/config/workspaceService.d.ts.map +1 -0
  78. package/dist/config/workspaceService.js +218 -0
  79. package/dist/config/workspaceService.js.map +1 -0
  80. package/dist/desktop/appWindow.d.ts +21 -0
  81. package/dist/desktop/appWindow.d.ts.map +1 -0
  82. package/dist/desktop/appWindow.js +77 -0
  83. package/dist/desktop/appWindow.js.map +1 -0
  84. package/dist/desktop/main.d.ts +14 -0
  85. package/dist/desktop/main.d.ts.map +1 -0
  86. package/dist/desktop/main.js +90 -0
  87. package/dist/desktop/main.js.map +1 -0
  88. package/dist/desktop/preload.d.ts +14 -0
  89. package/dist/desktop/preload.d.ts.map +1 -0
  90. package/dist/desktop/preload.js +20 -0
  91. package/dist/desktop/preload.js.map +1 -0
  92. package/dist/intelligence/index.d.ts +33 -0
  93. package/dist/intelligence/index.d.ts.map +1 -0
  94. package/dist/intelligence/index.js +82 -0
  95. package/dist/intelligence/index.js.map +1 -0
  96. package/dist/intelligence/modelGateway.d.ts +35 -0
  97. package/dist/intelligence/modelGateway.d.ts.map +1 -0
  98. package/dist/intelligence/modelGateway.js +123 -0
  99. package/dist/intelligence/modelGateway.js.map +1 -0
  100. package/dist/intelligence/modelRegistry.d.ts +17 -0
  101. package/dist/intelligence/modelRegistry.d.ts.map +1 -0
  102. package/dist/intelligence/modelRegistry.js +87 -0
  103. package/dist/intelligence/modelRegistry.js.map +1 -0
  104. package/dist/intelligence/modelRouter.d.ts +76 -0
  105. package/dist/intelligence/modelRouter.d.ts.map +1 -0
  106. package/dist/intelligence/modelRouter.js +256 -0
  107. package/dist/intelligence/modelRouter.js.map +1 -0
  108. package/dist/intelligence/ollamaAdapter.d.ts +49 -0
  109. package/dist/intelligence/ollamaAdapter.d.ts.map +1 -0
  110. package/dist/intelligence/ollamaAdapter.js +197 -0
  111. package/dist/intelligence/ollamaAdapter.js.map +1 -0
  112. package/dist/intelligence/prototype/runPrototype.d.ts +14 -0
  113. package/dist/intelligence/prototype/runPrototype.d.ts.map +1 -0
  114. package/dist/intelligence/prototype/runPrototype.js +87 -0
  115. package/dist/intelligence/prototype/runPrototype.js.map +1 -0
  116. package/dist/intelligence/providers/embeddedInferenceProvider.d.ts +29 -0
  117. package/dist/intelligence/providers/embeddedInferenceProvider.d.ts.map +1 -0
  118. package/dist/intelligence/providers/embeddedInferenceProvider.js +162 -0
  119. package/dist/intelligence/providers/embeddedInferenceProvider.js.map +1 -0
  120. package/dist/intelligence/providers/index.d.ts +4 -0
  121. package/dist/intelligence/providers/index.d.ts.map +1 -0
  122. package/dist/intelligence/providers/index.js +4 -0
  123. package/dist/intelligence/providers/index.js.map +1 -0
  124. package/dist/intelligence/providers/inferenceProvider.d.ts +98 -0
  125. package/dist/intelligence/providers/inferenceProvider.d.ts.map +1 -0
  126. package/dist/intelligence/providers/inferenceProvider.js +9 -0
  127. package/dist/intelligence/providers/inferenceProvider.js.map +1 -0
  128. package/dist/intelligence/providers/ollamaInferenceProvider.d.ts +17 -0
  129. package/dist/intelligence/providers/ollamaInferenceProvider.d.ts.map +1 -0
  130. package/dist/intelligence/providers/ollamaInferenceProvider.js +103 -0
  131. package/dist/intelligence/providers/ollamaInferenceProvider.js.map +1 -0
  132. package/dist/intelligence/provisioning/hardwareDetector.d.ts +5 -0
  133. package/dist/intelligence/provisioning/hardwareDetector.d.ts.map +1 -0
  134. package/dist/intelligence/provisioning/hardwareDetector.js +48 -0
  135. package/dist/intelligence/provisioning/hardwareDetector.js.map +1 -0
  136. package/dist/intelligence/provisioning/index.d.ts +12 -0
  137. package/dist/intelligence/provisioning/index.d.ts.map +1 -0
  138. package/dist/intelligence/provisioning/index.js +12 -0
  139. package/dist/intelligence/provisioning/index.js.map +1 -0
  140. package/dist/intelligence/provisioning/modelDownloader.d.ts +22 -0
  141. package/dist/intelligence/provisioning/modelDownloader.d.ts.map +1 -0
  142. package/dist/intelligence/provisioning/modelDownloader.js +134 -0
  143. package/dist/intelligence/provisioning/modelDownloader.js.map +1 -0
  144. package/dist/intelligence/provisioning/modelManifest.d.ts +10 -0
  145. package/dist/intelligence/provisioning/modelManifest.d.ts.map +1 -0
  146. package/dist/intelligence/provisioning/modelManifest.js +72 -0
  147. package/dist/intelligence/provisioning/modelManifest.js.map +1 -0
  148. package/dist/intelligence/provisioning/modelSelector.d.ts +14 -0
  149. package/dist/intelligence/provisioning/modelSelector.d.ts.map +1 -0
  150. package/dist/intelligence/provisioning/modelSelector.js +40 -0
  151. package/dist/intelligence/provisioning/modelSelector.js.map +1 -0
  152. package/dist/intelligence/provisioning/modelStorage.d.ts +12 -0
  153. package/dist/intelligence/provisioning/modelStorage.d.ts.map +1 -0
  154. package/dist/intelligence/provisioning/modelStorage.js +66 -0
  155. package/dist/intelligence/provisioning/modelStorage.js.map +1 -0
  156. package/dist/intelligence/provisioning/modelUpdater.d.ts +29 -0
  157. package/dist/intelligence/provisioning/modelUpdater.d.ts.map +1 -0
  158. package/dist/intelligence/provisioning/modelUpdater.js +89 -0
  159. package/dist/intelligence/provisioning/modelUpdater.js.map +1 -0
  160. package/dist/intelligence/provisioning/modelVerifier.d.ts +16 -0
  161. package/dist/intelligence/provisioning/modelVerifier.d.ts.map +1 -0
  162. package/dist/intelligence/provisioning/modelVerifier.js +108 -0
  163. package/dist/intelligence/provisioning/modelVerifier.js.map +1 -0
  164. package/dist/intelligence/provisioning/nativeRuntime.d.ts +18 -0
  165. package/dist/intelligence/provisioning/nativeRuntime.d.ts.map +1 -0
  166. package/dist/intelligence/provisioning/nativeRuntime.js +78 -0
  167. package/dist/intelligence/provisioning/nativeRuntime.js.map +1 -0
  168. package/dist/intelligence/provisioning/platformDetector.d.ts +15 -0
  169. package/dist/intelligence/provisioning/platformDetector.d.ts.map +1 -0
  170. package/dist/intelligence/provisioning/platformDetector.js +40 -0
  171. package/dist/intelligence/provisioning/platformDetector.js.map +1 -0
  172. package/dist/intelligence/provisioning/setupState.d.ts +10 -0
  173. package/dist/intelligence/provisioning/setupState.d.ts.map +1 -0
  174. package/dist/intelligence/provisioning/setupState.js +59 -0
  175. package/dist/intelligence/provisioning/setupState.js.map +1 -0
  176. package/dist/intelligence/provisioning/types.d.ts +51 -0
  177. package/dist/intelligence/provisioning/types.d.ts.map +1 -0
  178. package/dist/intelligence/provisioning/types.js +2 -0
  179. package/dist/intelligence/provisioning/types.js.map +1 -0
  180. package/dist/intelligence/runtime/embeddedRuntimeAdapter.d.ts +26 -0
  181. package/dist/intelligence/runtime/embeddedRuntimeAdapter.d.ts.map +1 -0
  182. package/dist/intelligence/runtime/embeddedRuntimeAdapter.js +119 -0
  183. package/dist/intelligence/runtime/embeddedRuntimeAdapter.js.map +1 -0
  184. package/dist/intelligence/runtime/ollamaRuntimeAdapter.d.ts +28 -0
  185. package/dist/intelligence/runtime/ollamaRuntimeAdapter.d.ts.map +1 -0
  186. package/dist/intelligence/runtime/ollamaRuntimeAdapter.js +131 -0
  187. package/dist/intelligence/runtime/ollamaRuntimeAdapter.js.map +1 -0
  188. package/dist/intelligence/runtime/runtimeManager.d.ts +37 -0
  189. package/dist/intelligence/runtime/runtimeManager.d.ts.map +1 -0
  190. package/dist/intelligence/runtime/runtimeManager.js +168 -0
  191. package/dist/intelligence/runtime/runtimeManager.js.map +1 -0
  192. package/dist/intelligence/runtime/types.d.ts +56 -0
  193. package/dist/intelligence/runtime/types.d.ts.map +1 -0
  194. package/dist/intelligence/runtime/types.js +7 -0
  195. package/dist/intelligence/runtime/types.js.map +1 -0
  196. package/dist/knowledge/chunker.d.ts +18 -0
  197. package/dist/knowledge/chunker.d.ts.map +1 -0
  198. package/dist/knowledge/chunker.js +55 -0
  199. package/dist/knowledge/chunker.js.map +1 -0
  200. package/dist/knowledge/citationService.d.ts +26 -0
  201. package/dist/knowledge/citationService.d.ts.map +1 -0
  202. package/dist/knowledge/citationService.js +47 -0
  203. package/dist/knowledge/citationService.js.map +1 -0
  204. package/dist/knowledge/embeddings.d.ts +11 -0
  205. package/dist/knowledge/embeddings.d.ts.map +1 -0
  206. package/dist/knowledge/embeddings.js +28 -0
  207. package/dist/knowledge/embeddings.js.map +1 -0
  208. package/dist/knowledge/hybridSearch.d.ts +13 -0
  209. package/dist/knowledge/hybridSearch.d.ts.map +1 -0
  210. package/dist/knowledge/hybridSearch.js +38 -0
  211. package/dist/knowledge/hybridSearch.js.map +1 -0
  212. package/dist/knowledge/index.d.ts +25 -0
  213. package/dist/knowledge/index.d.ts.map +1 -0
  214. package/dist/knowledge/index.js +37 -0
  215. package/dist/knowledge/index.js.map +1 -0
  216. package/dist/knowledge/parsers.d.ts +20 -0
  217. package/dist/knowledge/parsers.d.ts.map +1 -0
  218. package/dist/knowledge/parsers.js +94 -0
  219. package/dist/knowledge/parsers.js.map +1 -0
  220. package/dist/knowledge/ragEngine.d.ts +24 -0
  221. package/dist/knowledge/ragEngine.d.ts.map +1 -0
  222. package/dist/knowledge/ragEngine.js +121 -0
  223. package/dist/knowledge/ragEngine.js.map +1 -0
  224. package/dist/knowledge/reranker.d.ts +10 -0
  225. package/dist/knowledge/reranker.d.ts.map +1 -0
  226. package/dist/knowledge/reranker.js +11 -0
  227. package/dist/knowledge/reranker.js.map +1 -0
  228. package/dist/knowledge/vectorStore.d.ts +22 -0
  229. package/dist/knowledge/vectorStore.d.ts.map +1 -0
  230. package/dist/knowledge/vectorStore.js +74 -0
  231. package/dist/knowledge/vectorStore.js.map +1 -0
  232. package/dist/main.d.ts +2 -0
  233. package/dist/main.d.ts.map +1 -0
  234. package/dist/main.js +113 -0
  235. package/dist/main.js.map +1 -0
  236. package/dist/orchestration/agentExecutionService.d.ts +29 -0
  237. package/dist/orchestration/agentExecutionService.d.ts.map +1 -0
  238. package/dist/orchestration/agentExecutionService.js +306 -0
  239. package/dist/orchestration/agentExecutionService.js.map +1 -0
  240. package/dist/orchestration/agentStateMachine.d.ts +29 -0
  241. package/dist/orchestration/agentStateMachine.d.ts.map +1 -0
  242. package/dist/orchestration/agentStateMachine.js +153 -0
  243. package/dist/orchestration/agentStateMachine.js.map +1 -0
  244. package/dist/orchestration/agentTaskService.d.ts +44 -0
  245. package/dist/orchestration/agentTaskService.d.ts.map +1 -0
  246. package/dist/orchestration/agentTaskService.js +168 -0
  247. package/dist/orchestration/agentTaskService.js.map +1 -0
  248. package/dist/orchestration/codingAgentDiscovery.d.ts +32 -0
  249. package/dist/orchestration/codingAgentDiscovery.d.ts.map +1 -0
  250. package/dist/orchestration/codingAgentDiscovery.js +148 -0
  251. package/dist/orchestration/codingAgentDiscovery.js.map +1 -0
  252. package/dist/orchestration/codingAgentService.d.ts +40 -0
  253. package/dist/orchestration/codingAgentService.d.ts.map +1 -0
  254. package/dist/orchestration/codingAgentService.js +319 -0
  255. package/dist/orchestration/codingAgentService.js.map +1 -0
  256. package/dist/orchestration/codingAgentTypes.d.ts +111 -0
  257. package/dist/orchestration/codingAgentTypes.d.ts.map +1 -0
  258. package/dist/orchestration/codingAgentTypes.js +32 -0
  259. package/dist/orchestration/codingAgentTypes.js.map +1 -0
  260. package/dist/orchestration/codingAgentVerifier.d.ts +34 -0
  261. package/dist/orchestration/codingAgentVerifier.d.ts.map +1 -0
  262. package/dist/orchestration/codingAgentVerifier.js +109 -0
  263. package/dist/orchestration/codingAgentVerifier.js.map +1 -0
  264. package/dist/orchestration/codingRepairService.d.ts +34 -0
  265. package/dist/orchestration/codingRepairService.d.ts.map +1 -0
  266. package/dist/orchestration/codingRepairService.js +120 -0
  267. package/dist/orchestration/codingRepairService.js.map +1 -0
  268. package/dist/orchestration/goalCompletionVerifier.d.ts +36 -0
  269. package/dist/orchestration/goalCompletionVerifier.d.ts.map +1 -0
  270. package/dist/orchestration/goalCompletionVerifier.js +165 -0
  271. package/dist/orchestration/goalCompletionVerifier.js.map +1 -0
  272. package/dist/orchestration/humanApprovalService.d.ts +89 -0
  273. package/dist/orchestration/humanApprovalService.d.ts.map +1 -0
  274. package/dist/orchestration/humanApprovalService.js +346 -0
  275. package/dist/orchestration/humanApprovalService.js.map +1 -0
  276. package/dist/orchestration/index.d.ts +47 -0
  277. package/dist/orchestration/index.d.ts.map +1 -0
  278. package/dist/orchestration/index.js +67 -0
  279. package/dist/orchestration/index.js.map +1 -0
  280. package/dist/orchestration/planner.d.ts +105 -0
  281. package/dist/orchestration/planner.d.ts.map +1 -0
  282. package/dist/orchestration/planner.js +692 -0
  283. package/dist/orchestration/planner.js.map +1 -0
  284. package/dist/orchestration/types.d.ts +109 -0
  285. package/dist/orchestration/types.d.ts.map +1 -0
  286. package/dist/orchestration/types.js +20 -0
  287. package/dist/orchestration/types.js.map +1 -0
  288. package/dist/preview/previewServer.d.ts +39 -0
  289. package/dist/preview/previewServer.d.ts.map +1 -0
  290. package/dist/preview/previewServer.js +228 -0
  291. package/dist/preview/previewServer.js.map +1 -0
  292. package/dist/preview/previewService.d.ts +43 -0
  293. package/dist/preview/previewService.d.ts.map +1 -0
  294. package/dist/preview/previewService.js +289 -0
  295. package/dist/preview/previewService.js.map +1 -0
  296. package/dist/preview/previewTypes.d.ts +35 -0
  297. package/dist/preview/previewTypes.d.ts.map +1 -0
  298. package/dist/preview/previewTypes.js +5 -0
  299. package/dist/preview/previewTypes.js.map +1 -0
  300. package/dist/storage/database.d.ts +12 -0
  301. package/dist/storage/database.d.ts.map +1 -0
  302. package/dist/storage/database.js +46 -0
  303. package/dist/storage/database.js.map +1 -0
  304. package/dist/storage/health.d.ts +17 -0
  305. package/dist/storage/health.d.ts.map +1 -0
  306. package/dist/storage/health.js +48 -0
  307. package/dist/storage/health.js.map +1 -0
  308. package/dist/storage/index.d.ts +45 -0
  309. package/dist/storage/index.d.ts.map +1 -0
  310. package/dist/storage/index.js +96 -0
  311. package/dist/storage/index.js.map +1 -0
  312. package/dist/storage/migration.d.ts +17 -0
  313. package/dist/storage/migration.d.ts.map +1 -0
  314. package/dist/storage/migration.js +354 -0
  315. package/dist/storage/migration.js.map +1 -0
  316. package/dist/storage/projectService.d.ts +19 -0
  317. package/dist/storage/projectService.d.ts.map +1 -0
  318. package/dist/storage/projectService.js +29 -0
  319. package/dist/storage/projectService.js.map +1 -0
  320. package/dist/storage/repositories/agentTaskRepository.d.ts +34 -0
  321. package/dist/storage/repositories/agentTaskRepository.d.ts.map +1 -0
  322. package/dist/storage/repositories/agentTaskRepository.js +128 -0
  323. package/dist/storage/repositories/agentTaskRepository.js.map +1 -0
  324. package/dist/storage/repositories/approvalRepository.d.ts +20 -0
  325. package/dist/storage/repositories/approvalRepository.d.ts.map +1 -0
  326. package/dist/storage/repositories/approvalRepository.js +116 -0
  327. package/dist/storage/repositories/approvalRepository.js.map +1 -0
  328. package/dist/storage/repositories/conversationRepository.d.ts +16 -0
  329. package/dist/storage/repositories/conversationRepository.d.ts.map +1 -0
  330. package/dist/storage/repositories/conversationRepository.js +50 -0
  331. package/dist/storage/repositories/conversationRepository.js.map +1 -0
  332. package/dist/storage/repositories/knowledgeRepository.d.ts +109 -0
  333. package/dist/storage/repositories/knowledgeRepository.d.ts.map +1 -0
  334. package/dist/storage/repositories/knowledgeRepository.js +177 -0
  335. package/dist/storage/repositories/knowledgeRepository.js.map +1 -0
  336. package/dist/storage/repositories/messageRepository.d.ts +13 -0
  337. package/dist/storage/repositories/messageRepository.d.ts.map +1 -0
  338. package/dist/storage/repositories/messageRepository.js +39 -0
  339. package/dist/storage/repositories/messageRepository.js.map +1 -0
  340. package/dist/storage/repositories/modelsRepository.d.ts +39 -0
  341. package/dist/storage/repositories/modelsRepository.d.ts.map +1 -0
  342. package/dist/storage/repositories/modelsRepository.js +92 -0
  343. package/dist/storage/repositories/modelsRepository.js.map +1 -0
  344. package/dist/storage/repositories/projectRepository.d.ts +14 -0
  345. package/dist/storage/repositories/projectRepository.d.ts.map +1 -0
  346. package/dist/storage/repositories/projectRepository.js +44 -0
  347. package/dist/storage/repositories/projectRepository.js.map +1 -0
  348. package/dist/storage/repositories/settingsRepository.d.ts +10 -0
  349. package/dist/storage/repositories/settingsRepository.d.ts.map +1 -0
  350. package/dist/storage/repositories/settingsRepository.js +27 -0
  351. package/dist/storage/repositories/settingsRepository.js.map +1 -0
  352. package/dist/storage/repositories/types.d.ts +56 -0
  353. package/dist/storage/repositories/types.d.ts.map +1 -0
  354. package/dist/storage/repositories/types.js +2 -0
  355. package/dist/storage/repositories/types.js.map +1 -0
  356. package/dist/tools/adapters/filesystemAdapter.d.ts +121 -0
  357. package/dist/tools/adapters/filesystemAdapter.d.ts.map +1 -0
  358. package/dist/tools/adapters/filesystemAdapter.js +808 -0
  359. package/dist/tools/adapters/filesystemAdapter.js.map +1 -0
  360. package/dist/tools/adapters/terminalAdapter.d.ts +67 -0
  361. package/dist/tools/adapters/terminalAdapter.d.ts.map +1 -0
  362. package/dist/tools/adapters/terminalAdapter.js +487 -0
  363. package/dist/tools/adapters/terminalAdapter.js.map +1 -0
  364. package/dist/tools/adapters/terminalCommandPolicy.d.ts +44 -0
  365. package/dist/tools/adapters/terminalCommandPolicy.d.ts.map +1 -0
  366. package/dist/tools/adapters/terminalCommandPolicy.js +422 -0
  367. package/dist/tools/adapters/terminalCommandPolicy.js.map +1 -0
  368. package/dist/tools/adapters/terminalTypes.d.ts +111 -0
  369. package/dist/tools/adapters/terminalTypes.d.ts.map +1 -0
  370. package/dist/tools/adapters/terminalTypes.js +26 -0
  371. package/dist/tools/adapters/terminalTypes.js.map +1 -0
  372. package/dist/tools/approvalGate.d.ts +24 -0
  373. package/dist/tools/approvalGate.d.ts.map +1 -0
  374. package/dist/tools/approvalGate.js +137 -0
  375. package/dist/tools/approvalGate.js.map +1 -0
  376. package/dist/tools/approvalPolicyEngine.d.ts +32 -0
  377. package/dist/tools/approvalPolicyEngine.d.ts.map +1 -0
  378. package/dist/tools/approvalPolicyEngine.js +141 -0
  379. package/dist/tools/approvalPolicyEngine.js.map +1 -0
  380. package/dist/tools/approvalTypes.d.ts +67 -0
  381. package/dist/tools/approvalTypes.d.ts.map +1 -0
  382. package/dist/tools/approvalTypes.js +23 -0
  383. package/dist/tools/approvalTypes.js.map +1 -0
  384. package/dist/tools/index.d.ts +72 -0
  385. package/dist/tools/index.d.ts.map +1 -0
  386. package/dist/tools/index.js +353 -0
  387. package/dist/tools/index.js.map +1 -0
  388. package/dist/tools/permissionEngine.d.ts +27 -0
  389. package/dist/tools/permissionEngine.d.ts.map +1 -0
  390. package/dist/tools/permissionEngine.js +130 -0
  391. package/dist/tools/permissionEngine.js.map +1 -0
  392. package/dist/tools/toolExecutor.d.ts +37 -0
  393. package/dist/tools/toolExecutor.d.ts.map +1 -0
  394. package/dist/tools/toolExecutor.js +440 -0
  395. package/dist/tools/toolExecutor.js.map +1 -0
  396. package/dist/tools/toolRegistry.d.ts +34 -0
  397. package/dist/tools/toolRegistry.d.ts.map +1 -0
  398. package/dist/tools/toolRegistry.js +92 -0
  399. package/dist/tools/toolRegistry.js.map +1 -0
  400. package/dist/tools/types.d.ts +82 -0
  401. package/dist/tools/types.d.ts.map +1 -0
  402. package/dist/tools/types.js +33 -0
  403. package/dist/tools/types.js.map +1 -0
  404. package/dist/ui/public/app.js +777 -0
  405. package/dist/ui/public/index.html +117 -0
  406. package/dist/ui/public/styles.css +413 -0
  407. package/dist/ui/server.d.ts +27 -0
  408. package/dist/ui/server.d.ts.map +1 -0
  409. package/dist/ui/server.js +373 -0
  410. package/dist/ui/server.js.map +1 -0
  411. package/package.json +63 -0
@@ -0,0 +1,289 @@
1
+ /**
2
+ * NEXUS AI — P7-H: Local Web Project Preview Service
3
+ *
4
+ * Coordinates latest completed task resolution, artifact discovery,
5
+ * workspace boundary validation, preview HTTP server lifecycle, and
6
+ * safe browser launching.
7
+ */
8
+ import * as fs from 'fs';
9
+ import * as path from 'path';
10
+ import { execFile } from 'child_process';
11
+ import { PreviewServer } from './previewServer.js';
12
+ import { Logger } from '../common/logger.js';
13
+ export class PreviewService {
14
+ taskRepo;
15
+ workspaceRoot;
16
+ server;
17
+ logger;
18
+ activeTask = null;
19
+ constructor(taskRepo, workspaceRoot, logLevel = 'info') {
20
+ this.taskRepo = taskRepo;
21
+ this.workspaceRoot = workspaceRoot;
22
+ this.logger = new Logger('PreviewService', logLevel);
23
+ this.server = new PreviewServer(logLevel);
24
+ }
25
+ /**
26
+ * Resolve latest completed task or specific task by ID.
27
+ */
28
+ resolveCompletedTask(taskId) {
29
+ if (taskId && taskId.trim()) {
30
+ const cleanId = taskId.trim();
31
+ const task = this.taskRepo.findById(cleanId);
32
+ if (task && task.state === 'completed') {
33
+ return task;
34
+ }
35
+ return null;
36
+ }
37
+ const completed = this.taskRepo.findByState('completed');
38
+ if (completed.length === 0) {
39
+ return null;
40
+ }
41
+ // Sort descending by completedAt or updatedAt or createdAt
42
+ completed.sort((a, b) => {
43
+ const tA = new Date(a.completedAt || a.updatedAt || a.createdAt).getTime();
44
+ const tB = new Date(b.completedAt || b.updatedAt || b.createdAt).getTime();
45
+ return tB - tA;
46
+ });
47
+ return completed[0];
48
+ }
49
+ /**
50
+ * Discover files and project entry point created by a completed task.
51
+ */
52
+ discoverArtifacts(task) {
53
+ const canonicalWorkspace = fs.realpathSync(path.resolve(this.workspaceRoot));
54
+ const createdFiles = [];
55
+ // 1. Inspect task plan steps if present
56
+ if (task.plan) {
57
+ try {
58
+ const planObj = typeof task.plan === 'string' ? JSON.parse(task.plan) : task.plan;
59
+ if (Array.isArray(planObj.steps)) {
60
+ for (const step of planObj.steps) {
61
+ if ((step.toolId === 'filesystem_write' || step.toolId === 'filesystem_edit') &&
62
+ step.params) {
63
+ const rel = step.params.relativePath || step.params.path;
64
+ if (rel && typeof rel === 'string') {
65
+ createdFiles.push(rel);
66
+ }
67
+ }
68
+ }
69
+ }
70
+ }
71
+ catch (err) {
72
+ this.logger.warn(`Failed to parse plan JSON for task '${task.id}'`, { error: String(err) });
73
+ }
74
+ }
75
+ // 2. Determine base directory candidate from created files
76
+ let projectDir = canonicalWorkspace;
77
+ let entryFile = 'index.html';
78
+ // Look for index.html among step file targets
79
+ const indexRel = createdFiles.find((f) => path.basename(f).toLowerCase() === 'index.html');
80
+ if (indexRel) {
81
+ const absIndex = path.resolve(canonicalWorkspace, indexRel);
82
+ projectDir = path.dirname(absIndex);
83
+ entryFile = path.basename(absIndex);
84
+ }
85
+ else if (createdFiles.length > 0) {
86
+ const firstAbs = path.resolve(canonicalWorkspace, createdFiles[0]);
87
+ const dirCandidate = path.dirname(firstAbs);
88
+ if (fs.existsSync(dirCandidate) && fs.statSync(dirCandidate).isDirectory()) {
89
+ projectDir = dirCandidate;
90
+ }
91
+ }
92
+ // Canonicalize projectDir
93
+ let canonicalProjectDir = canonicalWorkspace;
94
+ if (fs.existsSync(projectDir)) {
95
+ canonicalProjectDir = fs.realpathSync(projectDir);
96
+ }
97
+ // Security check: projectDir must be inside canonicalWorkspace
98
+ if (!canonicalProjectDir.startsWith(canonicalWorkspace)) {
99
+ canonicalProjectDir = canonicalWorkspace;
100
+ }
101
+ // Scan projectDir for existing files
102
+ const allProjectFiles = [];
103
+ let hasIndexHtml = false;
104
+ let hasWebFiles = false;
105
+ if (fs.existsSync(canonicalProjectDir)) {
106
+ const scanDir = (dir, base) => {
107
+ const items = fs.readdirSync(dir, { withFileTypes: true });
108
+ for (const item of items) {
109
+ const relPath = base ? `${base}/${item.name}` : item.name;
110
+ const fullPath = path.join(dir, item.name);
111
+ if (item.isDirectory() && !item.name.startsWith('.') && item.name !== 'node_modules') {
112
+ scanDir(fullPath, relPath);
113
+ }
114
+ else if (item.isFile()) {
115
+ allProjectFiles.push(relPath);
116
+ const lowerName = item.name.toLowerCase();
117
+ if (lowerName === 'index.html') {
118
+ hasIndexHtml = true;
119
+ }
120
+ if (lowerName.endsWith('.html') ||
121
+ lowerName.endsWith('.css') ||
122
+ lowerName.endsWith('.js')) {
123
+ hasWebFiles = true;
124
+ }
125
+ }
126
+ }
127
+ };
128
+ try {
129
+ scanDir(canonicalProjectDir, '');
130
+ }
131
+ catch (err) {
132
+ this.logger.warn(`Error scanning directory '${canonicalProjectDir}'`, { error: String(err) });
133
+ }
134
+ }
135
+ // Combine step created files and scanned files
136
+ const uniqueFiles = Array.from(new Set([...createdFiles, ...allProjectFiles]));
137
+ return {
138
+ projectDir: canonicalProjectDir,
139
+ entryFile,
140
+ files: uniqueFiles,
141
+ hasIndexHtml: hasIndexHtml || fs.existsSync(path.join(canonicalProjectDir, 'index.html')),
142
+ isWebProject: hasIndexHtml || hasWebFiles,
143
+ };
144
+ }
145
+ /**
146
+ * Launch preview for latest completed task or specified task ID.
147
+ */
148
+ async preview(taskId) {
149
+ const task = this.resolveCompletedTask(taskId);
150
+ if (!task) {
151
+ if (taskId) {
152
+ return {
153
+ success: false,
154
+ status: 'NO_COMPLETED_TASK',
155
+ message: `Task '${taskId}' is not a completed task or does not exist.`,
156
+ };
157
+ }
158
+ return {
159
+ success: false,
160
+ status: 'NO_COMPLETED_TASK',
161
+ message: 'No completed task is available to preview.',
162
+ };
163
+ }
164
+ const artifacts = this.discoverArtifacts(task);
165
+ if (!artifacts.isWebProject) {
166
+ return {
167
+ success: false,
168
+ status: 'NOT_WEB_PROJECT',
169
+ task,
170
+ artifactsSummary: artifacts.files,
171
+ message: `Latest task '${task.title}' does not contain a previewable web project.`,
172
+ };
173
+ }
174
+ if (!artifacts.hasIndexHtml) {
175
+ return {
176
+ success: false,
177
+ status: 'MISSING_INDEX',
178
+ task,
179
+ detectedFiles: artifacts.files,
180
+ message: 'No index.html entry point was found.',
181
+ };
182
+ }
183
+ // Ensure projectDir is inside workspace
184
+ const canonicalWorkspace = fs.realpathSync(path.resolve(this.workspaceRoot));
185
+ if (!artifacts.projectDir.startsWith(canonicalWorkspace)) {
186
+ return {
187
+ success: false,
188
+ status: 'ERROR',
189
+ task,
190
+ error: 'Security Error: Preview directory is outside workspace boundaries.',
191
+ };
192
+ }
193
+ try {
194
+ const serverInfo = await this.server.start(artifacts.projectDir, artifacts.entryFile || 'index.html');
195
+ this.activeTask = task;
196
+ // Automatically launch browser
197
+ await this.openBrowser(serverInfo.url);
198
+ return {
199
+ success: true,
200
+ status: 'LAUNCHED',
201
+ task,
202
+ serverInfo,
203
+ detectedFiles: artifacts.files,
204
+ };
205
+ }
206
+ catch (err) {
207
+ const msg = err instanceof Error ? err.message : String(err);
208
+ this.logger.error(`Failed to start preview server for task '${task.id}'`, { error: msg });
209
+ return {
210
+ success: false,
211
+ status: 'ERROR',
212
+ task,
213
+ error: `Failed to start preview server: ${msg}`,
214
+ };
215
+ }
216
+ }
217
+ /**
218
+ * Stop active preview server.
219
+ */
220
+ async stop() {
221
+ const info = this.server.getInfo();
222
+ if (!info) {
223
+ return {
224
+ success: true,
225
+ status: 'ALREADY_STOPPED',
226
+ message: 'No active preview server is currently running.',
227
+ };
228
+ }
229
+ await this.server.stop();
230
+ this.activeTask = null;
231
+ return {
232
+ success: true,
233
+ status: 'STOPPED',
234
+ message: 'Preview server stopped successfully.',
235
+ };
236
+ }
237
+ /**
238
+ * Get active preview status.
239
+ */
240
+ getStatus() {
241
+ const info = this.server.getInfo();
242
+ if (!info) {
243
+ return { active: false };
244
+ }
245
+ return {
246
+ active: true,
247
+ taskId: this.activeTask?.id,
248
+ taskTitle: this.activeTask?.title,
249
+ serverInfo: info,
250
+ };
251
+ }
252
+ /**
253
+ * Open local preview URL safely in default browser without shell injection risk.
254
+ */
255
+ async openBrowser(url) {
256
+ if (!url.startsWith('http://127.0.0.1:')) {
257
+ this.logger.warn(`Refusing to open non-loopback URL: '${url}'`);
258
+ return false;
259
+ }
260
+ return new Promise((resolve) => {
261
+ const platform = process.platform;
262
+ let command = '';
263
+ let args = [];
264
+ if (platform === 'win32') {
265
+ command = 'cmd.exe';
266
+ args = ['/c', 'start', '', url];
267
+ }
268
+ else if (platform === 'darwin') {
269
+ command = 'open';
270
+ args = [url];
271
+ }
272
+ else {
273
+ command = 'xdg-open';
274
+ args = [url];
275
+ }
276
+ execFile(command, args, (err) => {
277
+ if (err) {
278
+ this.logger.warn(`Browser open command returned error (non-fatal): ${err.message}`);
279
+ resolve(false);
280
+ }
281
+ else {
282
+ this.logger.info(`Browser launched for URL: ${url}`);
283
+ resolve(true);
284
+ }
285
+ });
286
+ });
287
+ }
288
+ }
289
+ //# sourceMappingURL=previewService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"previewService.js","sourceRoot":"","sources":["../../src/preview/previewService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * NEXUS AI — P7-H: Local Web Project Preview Types
3
+ */
4
+ import type { AgentTask } from '../storage/repositories/types.js';
5
+ export type PreviewResultStatus = 'LAUNCHED' | 'NO_COMPLETED_TASK' | 'NOT_WEB_PROJECT' | 'MISSING_INDEX' | 'STOPPED' | 'ALREADY_STOPPED' | 'ERROR';
6
+ export interface PreviewServerInfo {
7
+ port: number;
8
+ url: string;
9
+ projectDir: string;
10
+ entryFile: string;
11
+ }
12
+ export interface PreviewStatus {
13
+ active: boolean;
14
+ taskId?: string;
15
+ taskTitle?: string;
16
+ serverInfo?: PreviewServerInfo;
17
+ }
18
+ export interface DiscoveredArtifacts {
19
+ projectDir: string;
20
+ entryFile?: string;
21
+ files: string[];
22
+ hasIndexHtml: boolean;
23
+ isWebProject: boolean;
24
+ }
25
+ export interface PreviewResult {
26
+ success: boolean;
27
+ status: PreviewResultStatus;
28
+ task?: AgentTask;
29
+ serverInfo?: PreviewServerInfo;
30
+ detectedFiles?: string[];
31
+ artifactsSummary?: string[];
32
+ message?: string;
33
+ error?: string;
34
+ }
35
+ //# sourceMappingURL=previewTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"previewTypes.d.ts","sourceRoot":"","sources":["../../src/preview/previewTypes.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAElE,MAAM,MAAM,mBAAmB,GAC3B,UAAU,GACV,mBAAmB,GACnB,iBAAiB,GACjB,eAAe,GACf,SAAS,GACT,iBAAiB,GACjB,OAAO,CAAC;AAEZ,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAChC;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,mBAAmB,CAAC;IAC5B,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * NEXUS AI — P7-H: Local Web Project Preview Types
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=previewTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"previewTypes.js","sourceRoot":"","sources":["../../src/preview/previewTypes.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,12 @@
1
+ import type { Database as DatabaseType } from 'better-sqlite3';
2
+ import { LogLevel } from '../common/logger.js';
3
+ export declare class DatabaseConnection {
4
+ private databasePath;
5
+ private db;
6
+ private logger;
7
+ constructor(databasePath: string, logLevel?: LogLevel);
8
+ connect(): DatabaseType;
9
+ getDb(): DatabaseType;
10
+ close(): void;
11
+ }
12
+ //# sourceMappingURL=database.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/storage/database.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG/D,OAAO,EAAU,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEvD,qBAAa,kBAAkB;IAK3B,OAAO,CAAC,YAAY;IAJtB,OAAO,CAAC,EAAE,CAA6B;IACvC,OAAO,CAAC,MAAM,CAAS;gBAGb,YAAY,EAAE,MAAM,EAC5B,QAAQ,GAAE,QAAiB;IAK7B,OAAO,IAAI,YAAY;IAwBvB,KAAK,IAAI,YAAY;IAOrB,KAAK,IAAI,IAAI;CAOd"}
@@ -0,0 +1,46 @@
1
+ import Database from 'better-sqlite3';
2
+ import path from 'node:path';
3
+ import fs from 'node:fs';
4
+ import { Logger } from '../common/logger.js';
5
+ export class DatabaseConnection {
6
+ databasePath;
7
+ db = null;
8
+ logger;
9
+ constructor(databasePath, logLevel = 'info') {
10
+ this.databasePath = databasePath;
11
+ this.logger = new Logger('DatabaseConnection', logLevel);
12
+ }
13
+ connect() {
14
+ if (this.db) {
15
+ return this.db;
16
+ }
17
+ if (this.databasePath !== ':memory:') {
18
+ const dir = path.dirname(path.resolve(this.databasePath));
19
+ if (!fs.existsSync(dir)) {
20
+ fs.mkdirSync(dir, { recursive: true });
21
+ this.logger.info(`Created database directory at ${dir}`);
22
+ }
23
+ }
24
+ this.logger.info(`Connecting to SQLite database at ${this.databasePath}`);
25
+ this.db = new Database(this.databasePath);
26
+ // Apply performance & integrity pragmas
27
+ this.db.pragma('journal_mode = WAL');
28
+ this.db.pragma('foreign_keys = ON');
29
+ this.db.pragma('busy_timeout = 5000');
30
+ return this.db;
31
+ }
32
+ getDb() {
33
+ if (!this.db) {
34
+ return this.connect();
35
+ }
36
+ return this.db;
37
+ }
38
+ close() {
39
+ if (this.db) {
40
+ this.logger.info('Closing SQLite database connection');
41
+ this.db.close();
42
+ this.db = null;
43
+ }
44
+ }
45
+ }
46
+ //# sourceMappingURL=database.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/storage/database.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,EAAY,MAAM,qBAAqB,CAAC;AAEvD,MAAM,OAAO,kBAAkB;IAKnB;IAJF,EAAE,GAAwB,IAAI,CAAC;IAC/B,MAAM,CAAS;IAEvB,YACU,YAAoB,EAC5B,WAAqB,MAAM;QADnB,iBAAY,GAAZ,YAAY,CAAQ;QAG5B,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,oBAAoB,EAAE,QAAQ,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO;QACL,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC,EAAE,CAAC;QACjB,CAAC;QAED,IAAI,IAAI,CAAC,YAAY,KAAK,UAAU,EAAE,CAAC;YACrC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;YAC1D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBACvC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iCAAiC,GAAG,EAAE,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oCAAoC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QAC1E,IAAI,CAAC,EAAE,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAE1C,wCAAwC;QACxC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACrC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;QACpC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;QAEtC,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;QACxB,CAAC;QACD,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACZ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;YACvD,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;QACjB,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,17 @@
1
+ import type { Database } from 'better-sqlite3';
2
+ export interface DatabaseHealthDetails {
3
+ connected: boolean;
4
+ ping: boolean;
5
+ schemaVersion: number;
6
+ integrity: string;
7
+ databasePath: string;
8
+ diskSpaceAccessible: boolean;
9
+ }
10
+ export declare class DatabaseHealthCheck {
11
+ private db;
12
+ private databasePath;
13
+ private logger;
14
+ constructor(db: Database, databasePath: string);
15
+ check(schemaVersion: number): DatabaseHealthDetails;
16
+ }
17
+ //# sourceMappingURL=health.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/storage/health.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAK/C,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,OAAO,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,EAAE,OAAO,CAAC;CAC9B;AAED,qBAAa,mBAAmB;IAI5B,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,YAAY;IAJtB,OAAO,CAAC,MAAM,CAAqC;gBAGzC,EAAE,EAAE,QAAQ,EACZ,YAAY,EAAE,MAAM;IAG9B,KAAK,CAAC,aAAa,EAAE,MAAM,GAAG,qBAAqB;CAsCpD"}
@@ -0,0 +1,48 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { Logger } from '../common/logger.js';
4
+ export class DatabaseHealthCheck {
5
+ db;
6
+ databasePath;
7
+ logger = new Logger('DatabaseHealthCheck');
8
+ constructor(db, databasePath) {
9
+ this.db = db;
10
+ this.databasePath = databasePath;
11
+ }
12
+ check(schemaVersion) {
13
+ let connected = false;
14
+ let ping = false;
15
+ let integrity = 'unknown';
16
+ let diskSpaceAccessible = false;
17
+ try {
18
+ if (this.db) {
19
+ connected = true;
20
+ }
21
+ const pingRow = this.db.prepare('SELECT 1 as pingResult').get();
22
+ ping = pingRow?.pingResult === 1;
23
+ const integrityRow = this.db.prepare('PRAGMA quick_check').get();
24
+ if (integrityRow) {
25
+ integrity = Object.values(integrityRow)[0] || 'ok';
26
+ }
27
+ if (this.databasePath === ':memory:') {
28
+ diskSpaceAccessible = true;
29
+ }
30
+ else {
31
+ const dir = path.dirname(path.resolve(this.databasePath));
32
+ diskSpaceAccessible = fs.existsSync(dir);
33
+ }
34
+ }
35
+ catch (err) {
36
+ this.logger.error('Database health check failed', { error: String(err) });
37
+ }
38
+ return {
39
+ connected,
40
+ ping,
41
+ schemaVersion,
42
+ integrity,
43
+ databasePath: this.databasePath,
44
+ diskSpaceAccessible,
45
+ };
46
+ }
47
+ }
48
+ //# sourceMappingURL=health.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/storage/health.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAW7C,MAAM,OAAO,mBAAmB;IAIpB;IACA;IAJF,MAAM,GAAG,IAAI,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAEnD,YACU,EAAY,EACZ,YAAoB;QADpB,OAAE,GAAF,EAAE,CAAU;QACZ,iBAAY,GAAZ,YAAY,CAAQ;IAC3B,CAAC;IAEJ,KAAK,CAAC,aAAqB;QACzB,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI,IAAI,GAAG,KAAK,CAAC;QACjB,IAAI,SAAS,GAAG,SAAS,CAAC;QAC1B,IAAI,mBAAmB,GAAG,KAAK,CAAC;QAEhC,IAAI,CAAC;YACH,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;gBACZ,SAAS,GAAG,IAAI,CAAC;YACnB,CAAC;YAED,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC,GAAG,EAAwC,CAAC;YACtG,IAAI,GAAG,OAAO,EAAE,UAAU,KAAK,CAAC,CAAC;YAEjC,MAAM,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,GAAG,EAAwC,CAAC;YACvG,IAAI,YAAY,EAAE,CAAC;gBACjB,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;YACrD,CAAC;YAED,IAAI,IAAI,CAAC,YAAY,KAAK,UAAU,EAAE,CAAC;gBACrC,mBAAmB,GAAG,IAAI,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;gBAC1D,mBAAmB,GAAG,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC5E,CAAC;QAED,OAAO;YACL,SAAS;YACT,IAAI;YACJ,aAAa;YACb,SAAS;YACT,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,mBAAmB;SACpB,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,45 @@
1
+ import { type DatabaseHealthDetails } from './health.js';
2
+ import { ProjectRepository } from './repositories/projectRepository.js';
3
+ import { ConversationRepository } from './repositories/conversationRepository.js';
4
+ import { MessageRepository } from './repositories/messageRepository.js';
5
+ import { AgentTaskRepository } from './repositories/agentTaskRepository.js';
6
+ import { SettingsRepository } from './repositories/settingsRepository.js';
7
+ import { ModelsRepository } from './repositories/modelsRepository.js';
8
+ import { KnowledgeRepository } from './repositories/knowledgeRepository.js';
9
+ import { ApprovalRepository } from './repositories/approvalRepository.js';
10
+ import { LogLevel } from '../common/logger.js';
11
+ export interface SubsystemStatus {
12
+ name: string;
13
+ initialized: boolean;
14
+ status: 'ok' | 'degraded' | 'error';
15
+ message?: string;
16
+ details?: Record<string, unknown>;
17
+ }
18
+ export interface IStorageService {
19
+ initialize(): Promise<SubsystemStatus>;
20
+ getStatus(): SubsystemStatus;
21
+ }
22
+ export declare class StorageService implements IStorageService {
23
+ private databasePath;
24
+ private initialized;
25
+ private dbConn;
26
+ private db;
27
+ private migrationRunner;
28
+ private healthCheck;
29
+ private logger;
30
+ projects: ProjectRepository;
31
+ conversations: ConversationRepository;
32
+ messages: MessageRepository;
33
+ agentTasks: AgentTaskRepository;
34
+ settings: SettingsRepository;
35
+ models: ModelsRepository;
36
+ knowledge: KnowledgeRepository;
37
+ approvals: ApprovalRepository;
38
+ constructor(databasePath?: string, logLevel?: LogLevel);
39
+ initialize(): Promise<SubsystemStatus>;
40
+ getHealthDetails(): DatabaseHealthDetails | null;
41
+ getStatus(): SubsystemStatus;
42
+ close(): void;
43
+ }
44
+ export * from './projectService.js';
45
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAuB,KAAK,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,EAAU,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,IAAI,GAAG,UAAU,GAAG,OAAO,CAAC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,IAAI,OAAO,CAAC,eAAe,CAAC,CAAC;IACvC,SAAS,IAAI,eAAe,CAAC;CAC9B;AAED,qBAAa,cAAe,YAAW,eAAe;IAkBlD,OAAO,CAAC,YAAY;IAjBtB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,EAAE,CAA6B;IACvC,OAAO,CAAC,eAAe,CAAgC;IACvD,OAAO,CAAC,WAAW,CAAoC;IACvD,OAAO,CAAC,MAAM,CAAS;IAEhB,QAAQ,EAAG,iBAAiB,CAAC;IAC7B,aAAa,EAAG,sBAAsB,CAAC;IACvC,QAAQ,EAAG,iBAAiB,CAAC;IAC7B,UAAU,EAAG,mBAAmB,CAAC;IACjC,QAAQ,EAAG,kBAAkB,CAAC;IAC9B,MAAM,EAAG,gBAAgB,CAAC;IAC1B,SAAS,EAAG,mBAAmB,CAAC;IAChC,SAAS,EAAG,kBAAkB,CAAC;gBAG5B,YAAY,GAAE,MAA8B,EACpD,QAAQ,GAAE,QAAiB;IAMvB,UAAU,IAAI,OAAO,CAAC,eAAe,CAAC;IAgC5C,gBAAgB,IAAI,qBAAqB,GAAG,IAAI;IAQhD,SAAS,IAAI,eAAe;IAsB5B,KAAK,IAAI,IAAI;CAKd;AAED,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,96 @@
1
+ import { DatabaseConnection } from './database.js';
2
+ import { MigrationRunner } from './migration.js';
3
+ import { DatabaseHealthCheck } from './health.js';
4
+ import { ProjectRepository } from './repositories/projectRepository.js';
5
+ import { ConversationRepository } from './repositories/conversationRepository.js';
6
+ import { MessageRepository } from './repositories/messageRepository.js';
7
+ import { AgentTaskRepository } from './repositories/agentTaskRepository.js';
8
+ import { SettingsRepository } from './repositories/settingsRepository.js';
9
+ import { ModelsRepository } from './repositories/modelsRepository.js';
10
+ import { KnowledgeRepository } from './repositories/knowledgeRepository.js';
11
+ import { ApprovalRepository } from './repositories/approvalRepository.js';
12
+ import { Logger } from '../common/logger.js';
13
+ export class StorageService {
14
+ databasePath;
15
+ initialized = false;
16
+ dbConn;
17
+ db = null;
18
+ migrationRunner = null;
19
+ healthCheck = null;
20
+ logger;
21
+ projects;
22
+ conversations;
23
+ messages;
24
+ agentTasks;
25
+ settings;
26
+ models;
27
+ knowledge;
28
+ approvals;
29
+ constructor(databasePath = './data/nexus.sqlite', logLevel = 'info') {
30
+ this.databasePath = databasePath;
31
+ this.logger = new Logger('StorageService', logLevel);
32
+ this.dbConn = new DatabaseConnection(this.databasePath, logLevel);
33
+ }
34
+ async initialize() {
35
+ try {
36
+ this.db = this.dbConn.connect();
37
+ this.migrationRunner = new MigrationRunner(this.db);
38
+ this.migrationRunner.runMigrations();
39
+ this.projects = new ProjectRepository(this.db);
40
+ this.conversations = new ConversationRepository(this.db);
41
+ this.messages = new MessageRepository(this.db);
42
+ this.agentTasks = new AgentTaskRepository(this.db);
43
+ this.settings = new SettingsRepository(this.db);
44
+ this.models = new ModelsRepository(this.db);
45
+ this.knowledge = new KnowledgeRepository(this.db);
46
+ this.approvals = new ApprovalRepository(this.db);
47
+ this.healthCheck = new DatabaseHealthCheck(this.db, this.databasePath);
48
+ this.initialized = true;
49
+ this.logger.info('StorageService subsystem fully initialized with SQLite persistence');
50
+ return this.getStatus();
51
+ }
52
+ catch (err) {
53
+ this.logger.error('Failed to initialize StorageService', { error: String(err) });
54
+ this.initialized = false;
55
+ return {
56
+ name: 'StorageService',
57
+ initialized: false,
58
+ status: 'error',
59
+ message: `Initialization failed: ${String(err)}`,
60
+ };
61
+ }
62
+ }
63
+ getHealthDetails() {
64
+ if (!this.db || !this.healthCheck || !this.migrationRunner) {
65
+ return null;
66
+ }
67
+ const currentVersion = this.migrationRunner.getCurrentVersion();
68
+ return this.healthCheck.check(currentVersion);
69
+ }
70
+ getStatus() {
71
+ if (!this.initialized || !this.db) {
72
+ return {
73
+ name: 'StorageService',
74
+ initialized: false,
75
+ status: 'degraded',
76
+ message: 'Uninitialized',
77
+ };
78
+ }
79
+ const health = this.getHealthDetails();
80
+ const isOk = health?.connected && health?.ping && health?.integrity === 'ok';
81
+ return {
82
+ name: 'StorageService',
83
+ initialized: true,
84
+ status: isOk ? 'ok' : 'degraded',
85
+ message: isOk ? `SQLite engine ready (v${health?.schemaVersion})` : 'Database health degraded',
86
+ details: health ? health : undefined,
87
+ };
88
+ }
89
+ close() {
90
+ this.dbConn.close();
91
+ this.db = null;
92
+ this.initialized = false;
93
+ }
94
+ }
95
+ export * from './projectService.js';
96
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"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"}