@nex-ai/nex 0.1.64 → 0.2.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 (523) hide show
  1. package/README.md +236 -231
  2. package/bin/nex-mcp.js +50 -0
  3. package/bin/nex.js +53 -0
  4. package/package.json +9 -36
  5. package/dist/agent/adoption.d.ts +0 -23
  6. package/dist/agent/adoption.js +0 -87
  7. package/dist/agent/adoption.js.map +0 -1
  8. package/dist/agent/gossip.d.ts +0 -17
  9. package/dist/agent/gossip.js +0 -48
  10. package/dist/agent/gossip.js.map +0 -1
  11. package/dist/agent/loop.d.ts +0 -59
  12. package/dist/agent/loop.js +0 -389
  13. package/dist/agent/loop.js.map +0 -1
  14. package/dist/agent/queues.d.ts +0 -16
  15. package/dist/agent/queues.js +0 -44
  16. package/dist/agent/queues.js.map +0 -1
  17. package/dist/agent/session-store.d.ts +0 -21
  18. package/dist/agent/session-store.js +0 -96
  19. package/dist/agent/session-store.js.map +0 -1
  20. package/dist/agent/templates.d.ts +0 -5
  21. package/dist/agent/templates.js +0 -55
  22. package/dist/agent/templates.js.map +0 -1
  23. package/dist/agent/tools.d.ts +0 -25
  24. package/dist/agent/tools.js +0 -238
  25. package/dist/agent/tools.js.map +0 -1
  26. package/dist/agent/types.d.ts +0 -59
  27. package/dist/agent/types.js +0 -5
  28. package/dist/agent/types.js.map +0 -1
  29. package/dist/calendar/scheduler.d.ts +0 -32
  30. package/dist/calendar/scheduler.js +0 -178
  31. package/dist/calendar/scheduler.js.map +0 -1
  32. package/dist/calendar/store.d.ts +0 -15
  33. package/dist/calendar/store.js +0 -50
  34. package/dist/calendar/store.js.map +0 -1
  35. package/dist/calendar/types.d.ts +0 -17
  36. package/dist/calendar/types.js +0 -5
  37. package/dist/calendar/types.js.map +0 -1
  38. package/dist/chat/channel.d.ts +0 -20
  39. package/dist/chat/channel.js +0 -84
  40. package/dist/chat/channel.js.map +0 -1
  41. package/dist/chat/message-store.d.ts +0 -18
  42. package/dist/chat/message-store.js +0 -82
  43. package/dist/chat/message-store.js.map +0 -1
  44. package/dist/chat/router.d.ts +0 -17
  45. package/dist/chat/router.js +0 -65
  46. package/dist/chat/router.js.map +0 -1
  47. package/dist/chat/suggested-responses.d.ts +0 -6
  48. package/dist/chat/suggested-responses.js +0 -99
  49. package/dist/chat/suggested-responses.js.map +0 -1
  50. package/dist/chat/types.d.ts +0 -28
  51. package/dist/chat/types.js +0 -5
  52. package/dist/chat/types.js.map +0 -1
  53. package/dist/cli.d.ts +0 -5
  54. package/dist/cli.js +0 -20
  55. package/dist/cli.js.map +0 -1
  56. package/dist/commands/attribute.d.ts +0 -4
  57. package/dist/commands/attribute.js +0 -75
  58. package/dist/commands/attribute.js.map +0 -1
  59. package/dist/commands/config-cmd.d.ts +0 -4
  60. package/dist/commands/config-cmd.js +0 -53
  61. package/dist/commands/config-cmd.js.map +0 -1
  62. package/dist/commands/context.d.ts +0 -4
  63. package/dist/commands/context.js +0 -167
  64. package/dist/commands/context.js.map +0 -1
  65. package/dist/commands/dispatch.d.ts +0 -44
  66. package/dist/commands/dispatch.js +0 -1550
  67. package/dist/commands/dispatch.js.map +0 -1
  68. package/dist/commands/graph.d.ts +0 -5
  69. package/dist/commands/graph.js +0 -77
  70. package/dist/commands/graph.js.map +0 -1
  71. package/dist/commands/init.d.ts +0 -49
  72. package/dist/commands/init.js +0 -319
  73. package/dist/commands/init.js.map +0 -1
  74. package/dist/commands/insight.d.ts +0 -4
  75. package/dist/commands/insight.js +0 -39
  76. package/dist/commands/insight.js.map +0 -1
  77. package/dist/commands/integrate.d.ts +0 -4
  78. package/dist/commands/integrate.js +0 -361
  79. package/dist/commands/integrate.js.map +0 -1
  80. package/dist/commands/list-job.d.ts +0 -4
  81. package/dist/commands/list-job.js +0 -41
  82. package/dist/commands/list-job.js.map +0 -1
  83. package/dist/commands/list.d.ts +0 -4
  84. package/dist/commands/list.js +0 -148
  85. package/dist/commands/list.js.map +0 -1
  86. package/dist/commands/note.d.ts +0 -4
  87. package/dist/commands/note.js +0 -77
  88. package/dist/commands/note.js.map +0 -1
  89. package/dist/commands/object.d.ts +0 -4
  90. package/dist/commands/object.js +0 -78
  91. package/dist/commands/object.js.map +0 -1
  92. package/dist/commands/parse-input.d.ts +0 -5
  93. package/dist/commands/parse-input.js +0 -37
  94. package/dist/commands/parse-input.js.map +0 -1
  95. package/dist/commands/record.d.ts +0 -4
  96. package/dist/commands/record.js +0 -126
  97. package/dist/commands/record.js.map +0 -1
  98. package/dist/commands/register.d.ts +0 -4
  99. package/dist/commands/register.js +0 -23
  100. package/dist/commands/register.js.map +0 -1
  101. package/dist/commands/relationship.d.ts +0 -4
  102. package/dist/commands/relationship.js +0 -80
  103. package/dist/commands/relationship.js.map +0 -1
  104. package/dist/commands/scan.d.ts +0 -4
  105. package/dist/commands/scan.js +0 -107
  106. package/dist/commands/scan.js.map +0 -1
  107. package/dist/commands/search.d.ts +0 -4
  108. package/dist/commands/search.js +0 -62
  109. package/dist/commands/search.js.map +0 -1
  110. package/dist/commands/session.d.ts +0 -4
  111. package/dist/commands/session.js +0 -31
  112. package/dist/commands/session.js.map +0 -1
  113. package/dist/commands/setup.d.ts +0 -25
  114. package/dist/commands/setup.js +0 -580
  115. package/dist/commands/setup.js.map +0 -1
  116. package/dist/commands/task.d.ts +0 -4
  117. package/dist/commands/task.js +0 -140
  118. package/dist/commands/task.js.map +0 -1
  119. package/dist/commands/workspace.d.ts +0 -8
  120. package/dist/commands/workspace.js +0 -251
  121. package/dist/commands/workspace.js.map +0 -1
  122. package/dist/index.d.ts +0 -9
  123. package/dist/index.js +0 -142
  124. package/dist/index.js.map +0 -1
  125. package/dist/lib/capture-filter.d.ts +0 -9
  126. package/dist/lib/capture-filter.js +0 -14
  127. package/dist/lib/capture-filter.js.map +0 -1
  128. package/dist/lib/client.d.ts +0 -20
  129. package/dist/lib/client.js +0 -160
  130. package/dist/lib/client.js.map +0 -1
  131. package/dist/lib/config.d.ts +0 -35
  132. package/dist/lib/config.js +0 -96
  133. package/dist/lib/config.js.map +0 -1
  134. package/dist/lib/context-format.d.ts +0 -7
  135. package/dist/lib/context-format.js +0 -21
  136. package/dist/lib/context-format.js.map +0 -1
  137. package/dist/lib/errors.d.ts +0 -18
  138. package/dist/lib/errors.js +0 -30
  139. package/dist/lib/errors.js.map +0 -1
  140. package/dist/lib/file-scanner.d.ts +0 -38
  141. package/dist/lib/file-scanner.js +0 -188
  142. package/dist/lib/file-scanner.js.map +0 -1
  143. package/dist/lib/graph-html.d.ts +0 -59
  144. package/dist/lib/graph-html.js +0 -859
  145. package/dist/lib/graph-html.js.map +0 -1
  146. package/dist/lib/installers.d.ts +0 -80
  147. package/dist/lib/installers.js +0 -602
  148. package/dist/lib/installers.js.map +0 -1
  149. package/dist/lib/integrations.d.ts +0 -23
  150. package/dist/lib/integrations.js +0 -25
  151. package/dist/lib/integrations.js.map +0 -1
  152. package/dist/lib/output.d.ts +0 -7
  153. package/dist/lib/output.js +0 -70
  154. package/dist/lib/output.js.map +0 -1
  155. package/dist/lib/platform-detect.d.ts +0 -23
  156. package/dist/lib/platform-detect.js +0 -359
  157. package/dist/lib/platform-detect.js.map +0 -1
  158. package/dist/lib/project-config.d.ts +0 -53
  159. package/dist/lib/project-config.js +0 -151
  160. package/dist/lib/project-config.js.map +0 -1
  161. package/dist/lib/prompt.d.ts +0 -15
  162. package/dist/lib/prompt.js +0 -213
  163. package/dist/lib/prompt.js.map +0 -1
  164. package/dist/lib/rate-limiter.d.ts +0 -13
  165. package/dist/lib/rate-limiter.js +0 -49
  166. package/dist/lib/rate-limiter.js.map +0 -1
  167. package/dist/lib/recall-filter.d.ts +0 -5
  168. package/dist/lib/recall-filter.js +0 -24
  169. package/dist/lib/recall-filter.js.map +0 -1
  170. package/dist/lib/session-store.d.ts +0 -15
  171. package/dist/lib/session-store.js +0 -62
  172. package/dist/lib/session-store.js.map +0 -1
  173. package/dist/lib/tui.d.ts +0 -57
  174. package/dist/lib/tui.js +0 -247
  175. package/dist/lib/tui.js.map +0 -1
  176. package/dist/lib/workspace-registry.d.ts +0 -47
  177. package/dist/lib/workspace-registry.js +0 -240
  178. package/dist/lib/workspace-registry.js.map +0 -1
  179. package/dist/mcp/channel.d.ts +0 -24
  180. package/dist/mcp/channel.js +0 -198
  181. package/dist/mcp/channel.js.map +0 -1
  182. package/dist/mcp/client.d.ts +0 -20
  183. package/dist/mcp/client.js +0 -131
  184. package/dist/mcp/client.js.map +0 -1
  185. package/dist/mcp/config.d.ts +0 -19
  186. package/dist/mcp/config.js +0 -48
  187. package/dist/mcp/config.js.map +0 -1
  188. package/dist/mcp/context-files.d.ts +0 -9
  189. package/dist/mcp/context-files.js +0 -90
  190. package/dist/mcp/context-files.js.map +0 -1
  191. package/dist/mcp/file-manifest.d.ts +0 -27
  192. package/dist/mcp/file-manifest.js +0 -68
  193. package/dist/mcp/file-manifest.js.map +0 -1
  194. package/dist/mcp/file-scanner.d.ts +0 -17
  195. package/dist/mcp/file-scanner.js +0 -77
  196. package/dist/mcp/file-scanner.js.map +0 -1
  197. package/dist/mcp/index.d.ts +0 -2
  198. package/dist/mcp/index.js +0 -51
  199. package/dist/mcp/index.js.map +0 -1
  200. package/dist/mcp/rate-limiter.d.ts +0 -14
  201. package/dist/mcp/rate-limiter.js +0 -60
  202. package/dist/mcp/rate-limiter.js.map +0 -1
  203. package/dist/mcp/server.d.ts +0 -6
  204. package/dist/mcp/server.js +0 -44
  205. package/dist/mcp/server.js.map +0 -1
  206. package/dist/mcp/session-store.d.ts +0 -16
  207. package/dist/mcp/session-store.js +0 -70
  208. package/dist/mcp/session-store.js.map +0 -1
  209. package/dist/mcp/tools/context.d.ts +0 -3
  210. package/dist/mcp/tools/context.js +0 -65
  211. package/dist/mcp/tools/context.js.map +0 -1
  212. package/dist/mcp/tools/insights.d.ts +0 -3
  213. package/dist/mcp/tools/insights.js +0 -24
  214. package/dist/mcp/tools/insights.js.map +0 -1
  215. package/dist/mcp/tools/integrations.d.ts +0 -3
  216. package/dist/mcp/tools/integrations.js +0 -27
  217. package/dist/mcp/tools/integrations.js.map +0 -1
  218. package/dist/mcp/tools/lists.d.ts +0 -3
  219. package/dist/mcp/tools/lists.js +0 -101
  220. package/dist/mcp/tools/lists.js.map +0 -1
  221. package/dist/mcp/tools/notes.d.ts +0 -3
  222. package/dist/mcp/tools/notes.js +0 -52
  223. package/dist/mcp/tools/notes.js.map +0 -1
  224. package/dist/mcp/tools/notifications.d.ts +0 -3
  225. package/dist/mcp/tools/notifications.js +0 -53
  226. package/dist/mcp/tools/notifications.js.map +0 -1
  227. package/dist/mcp/tools/records.d.ts +0 -3
  228. package/dist/mcp/tools/records.js +0 -74
  229. package/dist/mcp/tools/records.js.map +0 -1
  230. package/dist/mcp/tools/register.d.ts +0 -3
  231. package/dist/mcp/tools/register.js +0 -41
  232. package/dist/mcp/tools/register.js.map +0 -1
  233. package/dist/mcp/tools/relationships.d.ts +0 -3
  234. package/dist/mcp/tools/relationships.js +0 -47
  235. package/dist/mcp/tools/relationships.js.map +0 -1
  236. package/dist/mcp/tools/scan.d.ts +0 -3
  237. package/dist/mcp/tools/scan.js +0 -37
  238. package/dist/mcp/tools/scan.js.map +0 -1
  239. package/dist/mcp/tools/schema.d.ts +0 -3
  240. package/dist/mcp/tools/schema.js +0 -108
  241. package/dist/mcp/tools/schema.js.map +0 -1
  242. package/dist/mcp/tools/search.d.ts +0 -3
  243. package/dist/mcp/tools/search.js +0 -8
  244. package/dist/mcp/tools/search.js.map +0 -1
  245. package/dist/mcp/tools/tasks.d.ts +0 -3
  246. package/dist/mcp/tools/tasks.js +0 -88
  247. package/dist/mcp/tools/tasks.js.map +0 -1
  248. package/dist/mcp/workspace-data-dir.d.ts +0 -2
  249. package/dist/mcp/workspace-data-dir.js +0 -28
  250. package/dist/mcp/workspace-data-dir.js.map +0 -1
  251. package/dist/orchestration/budget.d.ts +0 -32
  252. package/dist/orchestration/budget.js +0 -72
  253. package/dist/orchestration/budget.js.map +0 -1
  254. package/dist/orchestration/executor.d.ts +0 -59
  255. package/dist/orchestration/executor.js +0 -197
  256. package/dist/orchestration/executor.js.map +0 -1
  257. package/dist/orchestration/router.d.ts +0 -30
  258. package/dist/orchestration/router.js +0 -98
  259. package/dist/orchestration/router.js.map +0 -1
  260. package/dist/orchestration/templates.d.ts +0 -11
  261. package/dist/orchestration/templates.js +0 -99
  262. package/dist/orchestration/templates.js.map +0 -1
  263. package/dist/orchestration/types.d.ts +0 -58
  264. package/dist/orchestration/types.js +0 -7
  265. package/dist/orchestration/types.js.map +0 -1
  266. package/dist/plugin/auto-capture.d.ts +0 -11
  267. package/dist/plugin/auto-capture.js +0 -135
  268. package/dist/plugin/auto-capture.js.map +0 -1
  269. package/dist/plugin/auto-recall-worker.d.ts +0 -2
  270. package/dist/plugin/auto-recall-worker.js +0 -74
  271. package/dist/plugin/auto-recall-worker.js.map +0 -1
  272. package/dist/plugin/auto-recall.d.ts +0 -11
  273. package/dist/plugin/auto-recall.js +0 -186
  274. package/dist/plugin/auto-recall.js.map +0 -1
  275. package/dist/plugin/auto-register.d.ts +0 -10
  276. package/dist/plugin/auto-register.js +0 -81
  277. package/dist/plugin/auto-register.js.map +0 -1
  278. package/dist/plugin/auto-scan.d.ts +0 -10
  279. package/dist/plugin/auto-scan.js +0 -54
  280. package/dist/plugin/auto-scan.js.map +0 -1
  281. package/dist/plugin/auto-session-start.d.ts +0 -14
  282. package/dist/plugin/auto-session-start.js +0 -156
  283. package/dist/plugin/auto-session-start.js.map +0 -1
  284. package/dist/plugin/capture-filter.d.ts +0 -21
  285. package/dist/plugin/capture-filter.js +0 -32
  286. package/dist/plugin/capture-filter.js.map +0 -1
  287. package/dist/plugin/config.d.ts +0 -61
  288. package/dist/plugin/config.js +0 -182
  289. package/dist/plugin/config.js.map +0 -1
  290. package/dist/plugin/context-files.d.ts +0 -23
  291. package/dist/plugin/context-files.js +0 -103
  292. package/dist/plugin/context-files.js.map +0 -1
  293. package/dist/plugin/context-format.d.ts +0 -18
  294. package/dist/plugin/context-format.js +0 -34
  295. package/dist/plugin/context-format.js.map +0 -1
  296. package/dist/plugin/file-manifest.d.ts +0 -27
  297. package/dist/plugin/file-manifest.js +0 -68
  298. package/dist/plugin/file-manifest.js.map +0 -1
  299. package/dist/plugin/file-scanner.d.ts +0 -19
  300. package/dist/plugin/file-scanner.js +0 -90
  301. package/dist/plugin/file-scanner.js.map +0 -1
  302. package/dist/plugin/nex-client.d.ts +0 -50
  303. package/dist/plugin/nex-client.js +0 -129
  304. package/dist/plugin/nex-client.js.map +0 -1
  305. package/dist/plugin/rate-limiter.d.ts +0 -26
  306. package/dist/plugin/rate-limiter.js +0 -65
  307. package/dist/plugin/rate-limiter.js.map +0 -1
  308. package/dist/plugin/recall-cache.d.ts +0 -41
  309. package/dist/plugin/recall-cache.js +0 -195
  310. package/dist/plugin/recall-cache.js.map +0 -1
  311. package/dist/plugin/recall-filter.d.ts +0 -13
  312. package/dist/plugin/recall-filter.js +0 -39
  313. package/dist/plugin/recall-filter.js.map +0 -1
  314. package/dist/plugin/session-store.d.ts +0 -23
  315. package/dist/plugin/session-store.js +0 -73
  316. package/dist/plugin/session-store.js.map +0 -1
  317. package/dist/plugin/workspace-data-dir.d.ts +0 -2
  318. package/dist/plugin/workspace-data-dir.js +0 -31
  319. package/dist/plugin/workspace-data-dir.js.map +0 -1
  320. package/dist/tui/agent-colors.d.ts +0 -19
  321. package/dist/tui/agent-colors.js +0 -34
  322. package/dist/tui/agent-colors.js.map +0 -1
  323. package/dist/tui/app.d.ts +0 -14
  324. package/dist/tui/app.js +0 -181
  325. package/dist/tui/app.js.map +0 -1
  326. package/dist/tui/channel-colors.d.ts +0 -16
  327. package/dist/tui/channel-colors.js +0 -43
  328. package/dist/tui/channel-colors.js.map +0 -1
  329. package/dist/tui/components/agent-card.d.ts +0 -11
  330. package/dist/tui/components/agent-card.js +0 -40
  331. package/dist/tui/components/agent-card.js.map +0 -1
  332. package/dist/tui/components/banner.d.ts +0 -44
  333. package/dist/tui/components/banner.js +0 -130
  334. package/dist/tui/components/banner.js.map +0 -1
  335. package/dist/tui/components/channel-colors.d.ts +0 -21
  336. package/dist/tui/components/channel-colors.js +0 -53
  337. package/dist/tui/components/channel-colors.js.map +0 -1
  338. package/dist/tui/components/channel-message.d.ts +0 -53
  339. package/dist/tui/components/channel-message.js +0 -66
  340. package/dist/tui/components/channel-message.js.map +0 -1
  341. package/dist/tui/components/chat-input.d.ts +0 -11
  342. package/dist/tui/components/chat-input.js +0 -19
  343. package/dist/tui/components/chat-input.js.map +0 -1
  344. package/dist/tui/components/data-table.d.ts +0 -11
  345. package/dist/tui/components/data-table.js +0 -47
  346. package/dist/tui/components/data-table.js.map +0 -1
  347. package/dist/tui/components/error-box.d.ts +0 -11
  348. package/dist/tui/components/error-box.js +0 -59
  349. package/dist/tui/components/error-box.js.map +0 -1
  350. package/dist/tui/components/help-screen.d.ts +0 -3
  351. package/dist/tui/components/help-screen.js +0 -63
  352. package/dist/tui/components/help-screen.js.map +0 -1
  353. package/dist/tui/components/index.d.ts +0 -17
  354. package/dist/tui/components/index.js +0 -10
  355. package/dist/tui/components/index.js.map +0 -1
  356. package/dist/tui/components/inline-confirm.d.ts +0 -14
  357. package/dist/tui/components/inline-confirm.js +0 -13
  358. package/dist/tui/components/inline-confirm.js.map +0 -1
  359. package/dist/tui/components/inline-select.d.ts +0 -21
  360. package/dist/tui/components/inline-select.js +0 -20
  361. package/dist/tui/components/inline-select.js.map +0 -1
  362. package/dist/tui/components/markdown.d.ts +0 -6
  363. package/dist/tui/components/markdown.js +0 -179
  364. package/dist/tui/components/markdown.js.map +0 -1
  365. package/dist/tui/components/mention-autocomplete.d.ts +0 -79
  366. package/dist/tui/components/mention-autocomplete.js +0 -250
  367. package/dist/tui/components/mention-autocomplete.js.map +0 -1
  368. package/dist/tui/components/message-list.d.ts +0 -18
  369. package/dist/tui/components/message-list.js +0 -29
  370. package/dist/tui/components/message-list.js.map +0 -1
  371. package/dist/tui/components/picker.d.ts +0 -16
  372. package/dist/tui/components/picker.js +0 -32
  373. package/dist/tui/components/picker.js.map +0 -1
  374. package/dist/tui/components/progress-steps.d.ts +0 -13
  375. package/dist/tui/components/progress-steps.js +0 -21
  376. package/dist/tui/components/progress-steps.js.map +0 -1
  377. package/dist/tui/components/slack/compose.d.ts +0 -27
  378. package/dist/tui/components/slack/compose.js +0 -147
  379. package/dist/tui/components/slack/compose.js.map +0 -1
  380. package/dist/tui/components/slack/layout.d.ts +0 -36
  381. package/dist/tui/components/slack/layout.js +0 -96
  382. package/dist/tui/components/slack/layout.js.map +0 -1
  383. package/dist/tui/components/slack/messages.d.ts +0 -72
  384. package/dist/tui/components/slack/messages.js +0 -177
  385. package/dist/tui/components/slack/messages.js.map +0 -1
  386. package/dist/tui/components/slack/quick-switcher.d.ts +0 -33
  387. package/dist/tui/components/slack/quick-switcher.js +0 -98
  388. package/dist/tui/components/slack/quick-switcher.js.map +0 -1
  389. package/dist/tui/components/slack/sidebar-types.d.ts +0 -65
  390. package/dist/tui/components/slack/sidebar-types.js +0 -7
  391. package/dist/tui/components/slack/sidebar-types.js.map +0 -1
  392. package/dist/tui/components/slack/sidebar.d.ts +0 -46
  393. package/dist/tui/components/slack/sidebar.js +0 -52
  394. package/dist/tui/components/slack/sidebar.js.map +0 -1
  395. package/dist/tui/components/slack/thread-panel.d.ts +0 -45
  396. package/dist/tui/components/slack/thread-panel.js +0 -47
  397. package/dist/tui/components/slack/thread-panel.js.map +0 -1
  398. package/dist/tui/components/slash-autocomplete.d.ts +0 -83
  399. package/dist/tui/components/slash-autocomplete.js +0 -233
  400. package/dist/tui/components/slash-autocomplete.js.map +0 -1
  401. package/dist/tui/components/spinner.d.ts +0 -17
  402. package/dist/tui/components/spinner.js +0 -30
  403. package/dist/tui/components/spinner.js.map +0 -1
  404. package/dist/tui/components/status-bar.d.ts +0 -23
  405. package/dist/tui/components/status-bar.js +0 -55
  406. package/dist/tui/components/status-bar.js.map +0 -1
  407. package/dist/tui/components/success-box.d.ts +0 -7
  408. package/dist/tui/components/success-box.js +0 -10
  409. package/dist/tui/components/success-box.js.map +0 -1
  410. package/dist/tui/components/tool-indicator.d.ts +0 -12
  411. package/dist/tui/components/tool-indicator.js +0 -18
  412. package/dist/tui/components/tool-indicator.js.map +0 -1
  413. package/dist/tui/components/viewport.d.ts +0 -9
  414. package/dist/tui/components/viewport.js +0 -24
  415. package/dist/tui/components/viewport.js.map +0 -1
  416. package/dist/tui/generative/bindings.d.ts +0 -27
  417. package/dist/tui/generative/bindings.js +0 -152
  418. package/dist/tui/generative/bindings.js.map +0 -1
  419. package/dist/tui/generative/registry.d.ts +0 -19
  420. package/dist/tui/generative/registry.js +0 -31
  421. package/dist/tui/generative/registry.js.map +0 -1
  422. package/dist/tui/generative/renderer.d.ts +0 -24
  423. package/dist/tui/generative/renderer.js +0 -160
  424. package/dist/tui/generative/renderer.js.map +0 -1
  425. package/dist/tui/generative/types.d.ts +0 -68
  426. package/dist/tui/generative/types.js +0 -7
  427. package/dist/tui/generative/types.js.map +0 -1
  428. package/dist/tui/hooks/use-cancellable.d.ts +0 -28
  429. package/dist/tui/hooks/use-cancellable.js +0 -51
  430. package/dist/tui/hooks/use-cancellable.js.map +0 -1
  431. package/dist/tui/hooks/use-streaming.d.ts +0 -44
  432. package/dist/tui/hooks/use-streaming.js +0 -105
  433. package/dist/tui/hooks/use-streaming.js.map +0 -1
  434. package/dist/tui/index.d.ts +0 -4
  435. package/dist/tui/index.js +0 -7
  436. package/dist/tui/index.js.map +0 -1
  437. package/dist/tui/keybindings.d.ts +0 -25
  438. package/dist/tui/keybindings.js +0 -277
  439. package/dist/tui/keybindings.js.map +0 -1
  440. package/dist/tui/register-views.d.ts +0 -8
  441. package/dist/tui/register-views.js +0 -122
  442. package/dist/tui/register-views.js.map +0 -1
  443. package/dist/tui/router.d.ts +0 -29
  444. package/dist/tui/router.js +0 -87
  445. package/dist/tui/router.js.map +0 -1
  446. package/dist/tui/services/agent-service.d.ts +0 -58
  447. package/dist/tui/services/agent-service.js +0 -197
  448. package/dist/tui/services/agent-service.js.map +0 -1
  449. package/dist/tui/services/calendar-service.d.ts +0 -31
  450. package/dist/tui/services/calendar-service.js +0 -133
  451. package/dist/tui/services/calendar-service.js.map +0 -1
  452. package/dist/tui/services/chat-service.d.ts +0 -28
  453. package/dist/tui/services/chat-service.js +0 -91
  454. package/dist/tui/services/chat-service.js.map +0 -1
  455. package/dist/tui/services/orchestration-service.d.ts +0 -42
  456. package/dist/tui/services/orchestration-service.js +0 -153
  457. package/dist/tui/services/orchestration-service.js.map +0 -1
  458. package/dist/tui/slash-commands.d.ts +0 -106
  459. package/dist/tui/slash-commands.js +0 -1421
  460. package/dist/tui/slash-commands.js.map +0 -1
  461. package/dist/tui/store.d.ts +0 -96
  462. package/dist/tui/store.js +0 -120
  463. package/dist/tui/store.js.map +0 -1
  464. package/dist/tui/theme.d.ts +0 -40
  465. package/dist/tui/theme.js +0 -39
  466. package/dist/tui/theme.js.map +0 -1
  467. package/dist/tui/tui-context.d.ts +0 -22
  468. package/dist/tui/tui-context.js +0 -17
  469. package/dist/tui/tui-context.js.map +0 -1
  470. package/dist/tui/views/agent-list.d.ts +0 -8
  471. package/dist/tui/views/agent-list.js +0 -11
  472. package/dist/tui/views/agent-list.js.map +0 -1
  473. package/dist/tui/views/ask-chat.d.ts +0 -9
  474. package/dist/tui/views/ask-chat.js +0 -40
  475. package/dist/tui/views/ask-chat.js.map +0 -1
  476. package/dist/tui/views/calendar.d.ts +0 -15
  477. package/dist/tui/views/calendar.js +0 -29
  478. package/dist/tui/views/calendar.js.map +0 -1
  479. package/dist/tui/views/chat.d.ts +0 -18
  480. package/dist/tui/views/chat.js +0 -28
  481. package/dist/tui/views/chat.js.map +0 -1
  482. package/dist/tui/views/generative.d.ts +0 -14
  483. package/dist/tui/views/generative.js +0 -37
  484. package/dist/tui/views/generative.js.map +0 -1
  485. package/dist/tui/views/help.d.ts +0 -6
  486. package/dist/tui/views/help.js +0 -9
  487. package/dist/tui/views/help.js.map +0 -1
  488. package/dist/tui/views/home-screen.d.ts +0 -67
  489. package/dist/tui/views/home-screen.js +0 -192
  490. package/dist/tui/views/home-screen.js.map +0 -1
  491. package/dist/tui/views/home.d.ts +0 -33
  492. package/dist/tui/views/home.js +0 -60
  493. package/dist/tui/views/home.js.map +0 -1
  494. package/dist/tui/views/index.d.ts +0 -20
  495. package/dist/tui/views/index.js +0 -11
  496. package/dist/tui/views/index.js.map +0 -1
  497. package/dist/tui/views/insights.d.ts +0 -19
  498. package/dist/tui/views/insights.js +0 -46
  499. package/dist/tui/views/insights.js.map +0 -1
  500. package/dist/tui/views/orchestration.d.ts +0 -18
  501. package/dist/tui/views/orchestration.js +0 -73
  502. package/dist/tui/views/orchestration.js.map +0 -1
  503. package/dist/tui/views/record-detail.d.ts +0 -10
  504. package/dist/tui/views/record-detail.js +0 -22
  505. package/dist/tui/views/record-detail.js.map +0 -1
  506. package/dist/tui/views/record-list.d.ts +0 -15
  507. package/dist/tui/views/record-list.js +0 -22
  508. package/dist/tui/views/record-list.js.map +0 -1
  509. package/dist/tui/views/slack-channel-header.d.ts +0 -15
  510. package/dist/tui/views/slack-channel-header.js +0 -16
  511. package/dist/tui/views/slack-channel-header.js.map +0 -1
  512. package/dist/tui/views/slack-home.d.ts +0 -21
  513. package/dist/tui/views/slack-home.js +0 -572
  514. package/dist/tui/views/slack-home.js.map +0 -1
  515. package/dist/tui/views/stream.d.ts +0 -16
  516. package/dist/tui/views/stream.js +0 -210
  517. package/dist/tui/views/stream.js.map +0 -1
  518. package/dist/tui/views/task-board.d.ts +0 -21
  519. package/dist/tui/views/task-board.js +0 -33
  520. package/dist/tui/views/task-board.js.map +0 -1
  521. package/dist/tui/views/timeline.d.ts +0 -17
  522. package/dist/tui/views/timeline.js +0 -24
  523. package/dist/tui/views/timeline.js.map +0 -1
@@ -1,198 +0,0 @@
1
- /**
2
- * Nex Channel — pushes daily digests and proactive notifications
3
- * into active Claude Code sessions via the Channels API.
4
- *
5
- * Fetches notification preferences and pending notifications from
6
- * the Nex API. Frequency is controlled server-side via the
7
- * notifications/preferences endpoint.
8
- */
9
- import { existsSync, readFileSync, writeFileSync, mkdirSync } from "node:fs";
10
- import { homedir } from "node:os";
11
- import { join } from "node:path";
12
- // ---------------------------------------------------------------------------
13
- // Constants
14
- // ---------------------------------------------------------------------------
15
- const STATE_DIR = join(homedir(), ".nex");
16
- const DIGEST_STATE_PATH = join(STATE_DIR, "channel-state.json");
17
- /** How often to check whether a daily digest is due (1 hour). */
18
- const DIGEST_CHECK_INTERVAL_MS = 60 * 60 * 1000;
19
- /** Minimum gap between daily digests (24 hours). */
20
- const DIGEST_COOLDOWN_MS = 24 * 60 * 60 * 1000;
21
- /** Default notification polling interval if API doesn't specify one (15 minutes). */
22
- const DEFAULT_NOTIFY_INTERVAL_MS = 15 * 60 * 1000;
23
- /** Override: set via NEX_NOTIFY_INTERVAL_MINUTES env var (e.g. "1" for 1m). */
24
- const NOTIFY_INTERVAL_OVERRIDE_MS = process.env.NEX_NOTIFY_INTERVAL_MINUTES
25
- ? Math.max(1, parseInt(process.env.NEX_NOTIFY_INTERVAL_MINUTES, 10)) * 60 * 1000
26
- : 0;
27
- /** Delay before the first checks after startup (10 seconds). */
28
- const INITIAL_DELAY_MS = 10_000;
29
- // ---------------------------------------------------------------------------
30
- // Digest state (local — digest is client-initiated)
31
- // ---------------------------------------------------------------------------
32
- function loadDigestState() {
33
- try {
34
- if (existsSync(DIGEST_STATE_PATH)) {
35
- const data = JSON.parse(readFileSync(DIGEST_STATE_PATH, "utf-8"));
36
- return { lastDigestAt: data.lastDigestAt ?? 0 };
37
- }
38
- }
39
- catch {
40
- // Corrupted or unreadable — start fresh
41
- }
42
- return { lastDigestAt: 0 };
43
- }
44
- function saveDigestState(state) {
45
- try {
46
- if (!existsSync(STATE_DIR))
47
- mkdirSync(STATE_DIR, { recursive: true });
48
- writeFileSync(DIGEST_STATE_PATH, JSON.stringify(state));
49
- }
50
- catch {
51
- // Best-effort
52
- }
53
- }
54
- // ---------------------------------------------------------------------------
55
- // Push helper
56
- // ---------------------------------------------------------------------------
57
- async function pushChannelEvent(server, content, meta = {}) {
58
- try {
59
- await server.notification({
60
- method: "notifications/claude/channel",
61
- params: { content, meta },
62
- });
63
- console.error(`[nex-channel] pushed ${meta.type || "event"} (${content.length} chars)`);
64
- }
65
- catch (err) {
66
- console.error("[nex-channel] push failed:", err.message);
67
- }
68
- }
69
- // ---------------------------------------------------------------------------
70
- // Fetch preferences from API
71
- // ---------------------------------------------------------------------------
72
- async function fetchPreferences(client) {
73
- try {
74
- return (await client.get("/v1/notifications/preferences"));
75
- }
76
- catch (err) {
77
- console.error("[nex-channel] failed to fetch preferences:", err.message);
78
- return {};
79
- }
80
- }
81
- // ---------------------------------------------------------------------------
82
- // Digest logic (client-initiated, local state)
83
- // ---------------------------------------------------------------------------
84
- async function checkDigest(server, client, state) {
85
- const now = Date.now();
86
- if (now - state.lastDigestAt < DIGEST_COOLDOWN_MS)
87
- return;
88
- try {
89
- const result = (await client.post("/v1/context/ask", {
90
- query: "Provide a comprehensive daily digest: summarize all key context " +
91
- "collected in the last 24 hours, including important updates, new " +
92
- "relationships, deal changes, upcoming events, and any actionable " +
93
- "items. Be specific with names, dates, and numbers.",
94
- }));
95
- if (result.answer && result.answer.trim().length > 0) {
96
- await pushChannelEvent(server, result.answer, {
97
- type: "daily_digest",
98
- period: "24h",
99
- });
100
- state.lastDigestAt = now;
101
- saveDigestState(state);
102
- }
103
- }
104
- catch (err) {
105
- console.error("[nex-channel] digest check failed:", err);
106
- }
107
- }
108
- // ---------------------------------------------------------------------------
109
- // Proactive notification logic (polls /v1/notifications/feed)
110
- // ---------------------------------------------------------------------------
111
- /** Track the last seen sent_at so we only fetch new items. */
112
- let lastFeedCheckAt;
113
- async function checkNotifications(server, client) {
114
- try {
115
- const params = new URLSearchParams({ limit: "10" });
116
- if (lastFeedCheckAt)
117
- params.set("since", lastFeedCheckAt);
118
- const result = (await client.get(`/v1/notifications/feed?${params.toString()}`));
119
- const items = result.items ?? [];
120
- if (items.length === 0)
121
- return;
122
- // Update cursor to the most recent sent_at
123
- for (const item of items) {
124
- if (item.sent_at && (!lastFeedCheckAt || item.sent_at > lastFeedCheckAt)) {
125
- lastFeedCheckAt = item.sent_at;
126
- }
127
- }
128
- // Format feed items into a readable summary
129
- const lines = [];
130
- for (const item of items) {
131
- if (item.content?.important_items) {
132
- for (const ci of item.content.important_items) {
133
- lines.push(`- [important] ${ci.title}${ci.context ? ` — ${ci.context}` : ""}`);
134
- }
135
- }
136
- if (item.content?.entity_changes) {
137
- for (const ci of item.content.entity_changes) {
138
- lines.push(`- [change] ${ci.title}${ci.context ? ` — ${ci.context}` : ""}`);
139
- }
140
- }
141
- }
142
- if (lines.length === 0)
143
- return;
144
- await pushChannelEvent(server, lines.join("\n"), {
145
- type: "proactive_notification",
146
- count: String(items.length),
147
- });
148
- }
149
- catch (err) {
150
- console.error("[nex-channel] notification check failed:", err);
151
- }
152
- }
153
- // ---------------------------------------------------------------------------
154
- // Scheduling with setTimeout chains (allows dynamic interval)
155
- // ---------------------------------------------------------------------------
156
- function scheduleDigestLoop(server, client, state) {
157
- const run = async () => {
158
- await checkDigest(server, client, state);
159
- setTimeout(run, DIGEST_CHECK_INTERVAL_MS);
160
- };
161
- setTimeout(run, INITIAL_DELAY_MS);
162
- }
163
- function scheduleNotificationLoop(server, client, intervalMs) {
164
- const run = async () => {
165
- await checkNotifications(server, client);
166
- // Re-fetch preferences each cycle to pick up frequency changes
167
- const prefs = await fetchPreferences(client);
168
- const nextInterval = NOTIFY_INTERVAL_OVERRIDE_MS ||
169
- (prefs.frequency_minutes ?? intervalMs / 60_000) * 60_000;
170
- setTimeout(run, nextInterval);
171
- };
172
- setTimeout(run, INITIAL_DELAY_MS + 5_000); // stagger slightly after digest
173
- }
174
- // ---------------------------------------------------------------------------
175
- // Entry point
176
- // ---------------------------------------------------------------------------
177
- /**
178
- * Start the Nex notification channel. Call this after the MCP server
179
- * has connected to its transport.
180
- *
181
- * Fetches notification preferences from the API to determine polling
182
- * frequency. Digest state is kept locally (client-initiated).
183
- */
184
- export async function startChannel(server, client) {
185
- if (!client.isAuthenticated)
186
- return;
187
- // Fetch initial preferences
188
- const prefs = await fetchPreferences(client);
189
- const intervalMs = NOTIFY_INTERVAL_OVERRIDE_MS ||
190
- (prefs.frequency_minutes ?? DEFAULT_NOTIFY_INTERVAL_MS / 60_000) * 60_000;
191
- // Digest uses local state (client-initiated)
192
- const digestState = loadDigestState();
193
- scheduleDigestLoop(server, client, digestState);
194
- // Notifications use API-backed state and server-controlled frequency
195
- scheduleNotificationLoop(server, client, intervalMs);
196
- console.error(`[nex-channel] started (digest: 24h, notifications: ${intervalMs / 60_000}m)`);
197
- }
198
- //# sourceMappingURL=channel.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"channel.js","sourceRoot":"","sources":["../../src/mcp/channel.ts"],"names":[],"mappings":"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"}
@@ -1,20 +0,0 @@
1
- export declare class NexApiError extends Error {
2
- status: number;
3
- statusText: string;
4
- body: unknown;
5
- constructor(status: number, statusText: string, body: unknown);
6
- }
7
- export declare class NexApiClient {
8
- private apiKey;
9
- constructor(apiKey?: string);
10
- get isAuthenticated(): boolean;
11
- setApiKey(key: string): void;
12
- private requireAuth;
13
- private request;
14
- register(email: string, name?: string, companyName?: string, source?: string): Promise<unknown>;
15
- get(path: string): Promise<unknown>;
16
- post(path: string, body?: unknown): Promise<unknown>;
17
- put(path: string, body?: unknown): Promise<unknown>;
18
- patch(path: string, body?: unknown): Promise<unknown>;
19
- delete(path: string): Promise<unknown>;
20
- }
@@ -1,131 +0,0 @@
1
- import { loadConfig } from "./config.js";
2
- function getBaseUrl() {
3
- const config = loadConfig();
4
- const base = process.env.NEX_API_BASE_URL || config.base_url || config.dev_url || "https://app.nex.ai";
5
- return `${base.replace(/\/+$/, "")}/api/developers`;
6
- }
7
- function getRegisterUrl() {
8
- const config = loadConfig();
9
- const base = process.env.NEX_API_BASE_URL || config.base_url || config.dev_url || "https://app.nex.ai";
10
- return `${base.replace(/\/+$/, "")}/api/v1/agents/register`;
11
- }
12
- export class NexApiError extends Error {
13
- status;
14
- statusText;
15
- body;
16
- constructor(status, statusText, body) {
17
- super(`Nex API error ${status}: ${statusText}`);
18
- this.status = status;
19
- this.statusText = statusText;
20
- this.body = body;
21
- this.name = "NexApiError";
22
- }
23
- }
24
- export class NexApiClient {
25
- apiKey;
26
- constructor(apiKey) {
27
- this.apiKey = apiKey;
28
- }
29
- get isAuthenticated() {
30
- return this.apiKey !== undefined && this.apiKey.length > 0;
31
- }
32
- setApiKey(key) {
33
- this.apiKey = key;
34
- }
35
- requireAuth() {
36
- if (!this.isAuthenticated) {
37
- throw new NexApiError(401, "Not registered", {
38
- message: "No API key configured. Call the 'register' tool first with your email to get an API key.",
39
- });
40
- }
41
- }
42
- async request(method, path, body) {
43
- this.requireAuth();
44
- const url = `${getBaseUrl()}${path}`;
45
- const headers = {
46
- Authorization: `Bearer ${this.apiKey}`,
47
- "X-Nex-Source": "mcp",
48
- };
49
- if (body !== undefined) {
50
- headers["Content-Type"] = "application/json";
51
- }
52
- const res = await fetch(url, {
53
- method,
54
- headers,
55
- body: body !== undefined ? JSON.stringify(body) : undefined,
56
- signal: AbortSignal.timeout(120_000),
57
- });
58
- if (res.status === 401 || res.status === 403) {
59
- throw new NexApiError(res.status, res.statusText, {
60
- message: "API key expired or invalid. Run 'nex register --email <email>' to get a new key.",
61
- });
62
- }
63
- if (!res.ok) {
64
- let errorBody;
65
- try {
66
- errorBody = await res.json();
67
- }
68
- catch {
69
- errorBody = await res.text();
70
- }
71
- throw new NexApiError(res.status, res.statusText, errorBody);
72
- }
73
- const text = await res.text();
74
- if (!text)
75
- return {};
76
- try {
77
- return JSON.parse(text);
78
- }
79
- catch {
80
- return { message: text };
81
- }
82
- }
83
- async register(email, name, companyName, source) {
84
- const body = {
85
- email,
86
- source: source ?? "mcp",
87
- };
88
- if (name !== undefined)
89
- body.name = name;
90
- if (companyName !== undefined)
91
- body.company_name = companyName;
92
- const res = await fetch(getRegisterUrl(), {
93
- method: "POST",
94
- headers: { "Content-Type": "application/json" },
95
- body: JSON.stringify(body),
96
- signal: AbortSignal.timeout(120_000),
97
- });
98
- if (!res.ok) {
99
- let errorBody;
100
- try {
101
- errorBody = await res.json();
102
- }
103
- catch {
104
- errorBody = await res.text();
105
- }
106
- throw new NexApiError(res.status, res.statusText, errorBody);
107
- }
108
- const data = await res.json();
109
- const apiKey = data.api_key;
110
- if (typeof apiKey === "string" && apiKey.length > 0) {
111
- this.apiKey = apiKey;
112
- }
113
- return data;
114
- }
115
- async get(path) {
116
- return this.request("GET", path);
117
- }
118
- async post(path, body) {
119
- return this.request("POST", path, body);
120
- }
121
- async put(path, body) {
122
- return this.request("PUT", path, body);
123
- }
124
- async patch(path, body) {
125
- return this.request("PATCH", path, body);
126
- }
127
- async delete(path) {
128
- return this.request("DELETE", path);
129
- }
130
- }
131
- //# sourceMappingURL=client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/mcp/client.ts"],"names":[],"mappings":"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"}
@@ -1,19 +0,0 @@
1
- declare const CONFIG_PATH: string;
2
- interface NexMcpConfig {
3
- api_key?: string;
4
- base_url?: string;
5
- dev_url?: string;
6
- workspace_id?: string;
7
- workspace_slug?: string;
8
- [key: string]: unknown;
9
- }
10
- export declare function loadConfig(): NexMcpConfig;
11
- export declare function saveConfig(config: NexMcpConfig): void;
12
- interface WorkspaceCredentials {
13
- api_key?: string;
14
- [key: string]: unknown;
15
- }
16
- export declare function loadWorkspaceCredentials(): WorkspaceCredentials;
17
- export declare function loadApiKey(): string | undefined;
18
- export declare function persistRegistration(data: Record<string, unknown>): void;
19
- export { CONFIG_PATH };
@@ -1,48 +0,0 @@
1
- import { readFileSync, writeFileSync, mkdirSync } from "node:fs";
2
- import { homedir } from "node:os";
3
- import { join, dirname } from "node:path";
4
- import { workspaceDataDir } from "./workspace-data-dir.js";
5
- const CONFIG_PATH = join(homedir(), ".nex", "config.json");
6
- export function loadConfig() {
7
- try {
8
- const raw = readFileSync(CONFIG_PATH, "utf-8");
9
- return JSON.parse(raw);
10
- }
11
- catch {
12
- return {};
13
- }
14
- }
15
- export function saveConfig(config) {
16
- mkdirSync(dirname(CONFIG_PATH), { recursive: true });
17
- writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2) + "\n", "utf-8");
18
- }
19
- export function loadWorkspaceCredentials() {
20
- try {
21
- const credPath = join(workspaceDataDir(), "credentials.json");
22
- const raw = readFileSync(credPath, "utf-8");
23
- return JSON.parse(raw);
24
- }
25
- catch {
26
- return {};
27
- }
28
- }
29
- export function loadApiKey() {
30
- // NEX_API_KEY env → workspace credentials → legacy config → undefined
31
- return (process.env.NEX_API_KEY ||
32
- loadWorkspaceCredentials().api_key ||
33
- loadConfig().api_key ||
34
- undefined);
35
- }
36
- export function persistRegistration(data) {
37
- const existing = loadConfig();
38
- if (typeof data.api_key === "string")
39
- existing.api_key = data.api_key;
40
- if (typeof data.workspace_id === "string" || typeof data.workspace_id === "number") {
41
- existing.workspace_id = String(data.workspace_id);
42
- }
43
- if (typeof data.workspace_slug === "string")
44
- existing.workspace_slug = data.workspace_slug;
45
- saveConfig(existing);
46
- }
47
- export { CONFIG_PATH };
48
- //# sourceMappingURL=config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/mcp/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;AAW3D,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAiB,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAoB;IAC7C,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;AAC9E,CAAC;AAOD,MAAM,UAAU,wBAAwB;IACtC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE,EAAE,kBAAkB,CAAC,CAAC;QAC9D,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAyB,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,sEAAsE;IACtE,OAAO,CACL,OAAO,CAAC,GAAG,CAAC,WAAW;QACvB,wBAAwB,EAAE,CAAC,OAAO;QAClC,UAAU,EAAE,CAAC,OAAO;QACpB,SAAS,CACV,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAA6B;IAC/D,MAAM,QAAQ,GAAG,UAAU,EAAE,CAAC;IAC9B,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ;QAAE,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;IACtE,IAAI,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ,IAAI,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;QACnF,QAAQ,CAAC,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACpD,CAAC;IACD,IAAI,OAAO,IAAI,CAAC,cAAc,KAAK,QAAQ;QAAE,QAAQ,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;IAC3F,UAAU,CAAC,QAAQ,CAAC,CAAC;AACvB,CAAC;AAED,OAAO,EAAE,WAAW,EAAE,CAAC"}
@@ -1,9 +0,0 @@
1
- import type { NexApiClient } from "./client.js";
2
- import type { RateLimiter } from "./rate-limiter.js";
3
- export interface ContextFilesResult {
4
- ingested: number;
5
- skipped: number;
6
- errors: number;
7
- files: string[];
8
- }
9
- export declare function ingestContextFiles(client: NexApiClient, rateLimiter: RateLimiter, cwd: string): Promise<ContextFilesResult>;
@@ -1,90 +0,0 @@
1
- /**
2
- * Ingests Claude Code context files (CLAUDE.md + memory files) into Nex.
3
- *
4
- * Reads from both global and project-level locations:
5
- * - ~/.claude/CLAUDE.md (global instructions)
6
- * - {cwd}/CLAUDE.md (project instructions)
7
- * - ~/.claude/projects/{project-key}/memory/*.md (memory files)
8
- *
9
- * Uses the file manifest for change detection — unchanged files are skipped.
10
- */
11
- import { existsSync, readdirSync, statSync, readFileSync } from "node:fs";
12
- import { join, extname, basename } from "node:path";
13
- import { homedir } from "node:os";
14
- import { readManifest, writeManifest, isChanged, markIngested } from "./file-manifest.js";
15
- const CLAUDE_DIR = join(homedir(), ".claude");
16
- const INGEST_TIMEOUT_MS = 10_000;
17
- const MAX_FILE_SIZE = 100_000;
18
- function projectKey(cwd) {
19
- return cwd.replace(/\//g, "-");
20
- }
21
- function collectContextFiles(cwd) {
22
- const files = [];
23
- const key = projectKey(cwd);
24
- const globalClaude = join(CLAUDE_DIR, "CLAUDE.md");
25
- if (existsSync(globalClaude)) {
26
- files.push({ path: globalClaude, contextTag: "claude-md:global" });
27
- }
28
- const projectClaude = join(cwd, "CLAUDE.md");
29
- if (existsSync(projectClaude)) {
30
- files.push({ path: projectClaude, contextTag: "claude-md:project" });
31
- }
32
- const memoryDir = join(CLAUDE_DIR, "projects", key, "memory");
33
- if (existsSync(memoryDir)) {
34
- try {
35
- const entries = readdirSync(memoryDir, { withFileTypes: true });
36
- for (const entry of entries) {
37
- if (!entry.isFile())
38
- continue;
39
- if (extname(entry.name).toLowerCase() !== ".md")
40
- continue;
41
- const fullPath = join(memoryDir, entry.name);
42
- const name = basename(entry.name, ".md");
43
- files.push({ path: fullPath, contextTag: `claude-memory:${name}` });
44
- }
45
- }
46
- catch {
47
- // memoryDir unreadable — skip
48
- }
49
- }
50
- return files;
51
- }
52
- export async function ingestContextFiles(client, rateLimiter, cwd) {
53
- const result = { ingested: 0, skipped: 0, errors: 0, files: [] };
54
- const manifest = readManifest();
55
- const candidates = collectContextFiles(cwd);
56
- let dirty = false;
57
- for (const { path, contextTag } of candidates) {
58
- try {
59
- const stat = statSync(path);
60
- if (!isChanged(path, stat, manifest)) {
61
- result.skipped++;
62
- continue;
63
- }
64
- if (!rateLimiter.canProceed()) {
65
- process.stderr.write("[nex-context-files] Rate limited — stopping context file ingest\n");
66
- result.skipped += candidates.length - result.ingested - result.skipped - result.errors;
67
- break;
68
- }
69
- let content = readFileSync(path, "utf-8");
70
- if (content.length > MAX_FILE_SIZE) {
71
- content = content.slice(0, MAX_FILE_SIZE) + "\n[...truncated]";
72
- }
73
- await client.post("/v1/context/text", { content, context: contextTag });
74
- rateLimiter.recordRequest();
75
- markIngested(path, stat, contextTag, manifest);
76
- result.ingested++;
77
- result.files.push(contextTag);
78
- dirty = true;
79
- }
80
- catch (err) {
81
- process.stderr.write(`[nex-context-files] Failed to ingest ${contextTag}: ${err instanceof Error ? err.message : String(err)}\n`);
82
- result.errors++;
83
- }
84
- }
85
- if (dirty) {
86
- writeManifest(manifest);
87
- }
88
- return result;
89
- }
90
- //# sourceMappingURL=context-files.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"context-files.js","sourceRoot":"","sources":["../../src/mcp/context-files.ts"],"names":[],"mappings":"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"}
@@ -1,27 +0,0 @@
1
- /**
2
- * Persistent file manifest — tracks which files have been ingested
3
- * using mtime + size as change detection.
4
- *
5
- * Stored at <workspaceDataDir>/file-scan-manifest.json.
6
- */
7
- import { type Stats } from "node:fs";
8
- export interface FileManifestEntry {
9
- mtime: number;
10
- size: number;
11
- ingestedAt: number;
12
- context: string;
13
- }
14
- export interface FileManifest {
15
- version: 1;
16
- lastScanAt?: number;
17
- files: Record<string, FileManifestEntry>;
18
- }
19
- export declare function readManifest(): FileManifest;
20
- export declare function writeManifest(manifest: FileManifest): void;
21
- export declare function isChanged(path: string, stat: Stats, manifest: FileManifest): boolean;
22
- export declare function markIngested(path: string, stat: Stats, context: string, manifest: FileManifest): void;
23
- /**
24
- * Record that a full scan completed at this moment.
25
- */
26
- export declare function markScanned(manifest: FileManifest): void;
27
- export declare function isScanFresh(manifest: FileManifest, windowMs?: number): boolean;
@@ -1,68 +0,0 @@
1
- /**
2
- * Persistent file manifest — tracks which files have been ingested
3
- * using mtime + size as change detection.
4
- *
5
- * Stored at <workspaceDataDir>/file-scan-manifest.json.
6
- */
7
- import { readFileSync, writeFileSync, mkdirSync } from "node:fs";
8
- import { join } from "node:path";
9
- import { workspaceDataDir } from "./workspace-data-dir.js";
10
- function dataDir() {
11
- return workspaceDataDir();
12
- }
13
- function manifestPath() {
14
- return join(dataDir(), "file-scan-manifest.json");
15
- }
16
- export function readManifest() {
17
- try {
18
- const raw = readFileSync(manifestPath(), "utf-8");
19
- const data = JSON.parse(raw);
20
- if (data && data.version === 1 && data.files) {
21
- return data;
22
- }
23
- return { version: 1, files: {} };
24
- }
25
- catch {
26
- return { version: 1, files: {} };
27
- }
28
- }
29
- export function writeManifest(manifest) {
30
- try {
31
- mkdirSync(dataDir(), { recursive: true });
32
- writeFileSync(manifestPath(), JSON.stringify(manifest, null, 2), "utf-8");
33
- }
34
- catch {
35
- // Best-effort — if we can't write, next scan re-ingests
36
- }
37
- }
38
- export function isChanged(path, stat, manifest) {
39
- const entry = manifest.files[path];
40
- if (!entry)
41
- return true;
42
- return entry.mtime !== stat.mtimeMs || entry.size !== stat.size;
43
- }
44
- export function markIngested(path, stat, context, manifest) {
45
- manifest.files[path] = {
46
- mtime: stat.mtimeMs,
47
- size: stat.size,
48
- ingestedAt: Date.now(),
49
- context,
50
- };
51
- }
52
- /**
53
- * Record that a full scan completed at this moment.
54
- */
55
- export function markScanned(manifest) {
56
- manifest.lastScanAt = Date.now();
57
- }
58
- /**
59
- * Check if a scan completed recently (within the given window).
60
- * Default window: 1 hour.
61
- */
62
- const DEFAULT_SCAN_FRESHNESS_MS = 60 * 60 * 1000; // 1 hour
63
- export function isScanFresh(manifest, windowMs = DEFAULT_SCAN_FRESHNESS_MS) {
64
- if (!manifest.lastScanAt)
65
- return false;
66
- return Date.now() - manifest.lastScanAt < windowMs;
67
- }
68
- //# sourceMappingURL=file-manifest.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"file-manifest.js","sourceRoot":"","sources":["../../src/mcp/file-manifest.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAc,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,SAAS,OAAO;IACd,OAAO,gBAAgB,EAAE,CAAC;AAC5B,CAAC;AAED,SAAS,YAAY;IACnB,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,yBAAyB,CAAC,CAAC;AACpD,CAAC;AAeD,MAAM,UAAU,YAAY;IAC1B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,YAAY,EAAE,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC7C,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACnC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,QAAsB;IAClD,IAAI,CAAC;QACH,SAAS,CAAC,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,aAAa,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC5E,CAAC;IAAC,MAAM,CAAC;QACP,wDAAwD;IAC1D,CAAC;AACH,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,IAAW,EAAE,QAAsB;IACzE,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,OAAO,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,IAAW,EAAE,OAAe,EAAE,QAAsB;IAC7F,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG;QACrB,KAAK,EAAE,IAAI,CAAC,OAAO;QACnB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE;QACtB,OAAO;KACR,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,QAAsB;IAChD,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AACnC,CAAC;AAED;;;GAGG;AACH,MAAM,yBAAyB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,SAAS;AAE3D,MAAM,UAAU,WAAW,CAAC,QAAsB,EAAE,QAAQ,GAAG,yBAAyB;IACtF,IAAI,CAAC,QAAQ,CAAC,UAAU;QAAE,OAAO,KAAK,CAAC;IACvC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,UAAU,GAAG,QAAQ,CAAC;AACrD,CAAC"}