@nexus-cortex/cli 4.26.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 (465) hide show
  1. package/.cortex/agents/AGENT_PROFILE_GUIDE.md +307 -0
  2. package/.cortex/agents/README.md +268 -0
  3. package/.cortex/agents/a-frontend-landing-page-designer.md +41 -0
  4. package/.cortex/agents/autoresearch-agent.md +49 -0
  5. package/.cortex/agents/code-reviewer.md +63 -0
  6. package/.cortex/agents/context-research.md +26 -0
  7. package/.cortex/agents/doc-writer.md +92 -0
  8. package/.cortex/agents/explore.md +63 -0
  9. package/.cortex/agents/new-model-api-integrator-analyst.md +41 -0
  10. package/.cortex/agents/plan.md +109 -0
  11. package/.cortex/agents/pr-architecture-reviewer.md +77 -0
  12. package/.cortex/agents/pr-code-quality.md +78 -0
  13. package/.cortex/agents/pr-implementer.md +50 -0
  14. package/.cortex/agents/pr-security-auditor.md +62 -0
  15. package/.cortex/agents/pr-test-writer.md +67 -0
  16. package/.cortex/agents/refactor.md +118 -0
  17. package/.cortex/agents/test-writer.md +72 -0
  18. package/.cortex/agents/web-researcher.md +72 -0
  19. package/.cortex/bench/tasks/sample-tasks.json +20 -0
  20. package/.cortex/commands/compare.md +14 -0
  21. package/.cortex/commands/deps.md +16 -0
  22. package/.cortex/commands/diff.md +14 -0
  23. package/.cortex/commands/explain.md +16 -0
  24. package/.cortex/commands/find-bug.md +13 -0
  25. package/.cortex/commands/profile.md +15 -0
  26. package/.cortex/commands/review.md +18 -0
  27. package/.cortex/commands/search.md +16 -0
  28. package/.cortex/commands/test.md +15 -0
  29. package/.cortex/permissions.dev.json +20 -0
  30. package/.cortex/permissions.example.json +71 -0
  31. package/.cortex/permissions.prod.json +63 -0
  32. package/.cortex/permissions.test.json +19 -0
  33. package/.cortex/skills/autoresearch/SKILL.md +77 -0
  34. package/.cortex/skills/autoresearch/personas/README.md +45 -0
  35. package/.cortex/skills/autoresearch/personas/aggressive-refactor.md +25 -0
  36. package/.cortex/skills/autoresearch/personas/creative.md +29 -0
  37. package/.cortex/skills/autoresearch/personas/perf-hunter.md +27 -0
  38. package/.cortex/skills/autoresearch/personas/precise.md +23 -0
  39. package/.cortex/skills/autoresearch/personas/root-cause.md +26 -0
  40. package/.cortex/skills/autoresearch/personas/security-auditor.md +29 -0
  41. package/.cortex/skills/autoresearch/personas/skeptic-reviewer.md +31 -0
  42. package/.cortex/skills/autoresearch/personas/test-first.md +25 -0
  43. package/.cortex/skills/best-of-n/SKILL.md +76 -0
  44. package/.cortex/skills/cortex/SKILL.md +834 -0
  45. package/.cortex/skills/cortex-bench/SKILL.md +354 -0
  46. package/.cortex/skills/docx/SKILL.md +83 -0
  47. package/.cortex/skills/pdf-documents/SKILL.md +297 -0
  48. package/.cortex/skills/pdf-documents/sections/01-image-acquisition.md +132 -0
  49. package/.cortex/skills/pdf-documents/sections/02-ai-image-generation.md +274 -0
  50. package/.cortex/skills/pdf-documents/sections/03-paper-sizes.md +89 -0
  51. package/.cortex/skills/pdf-documents/sections/04-design-system.md +549 -0
  52. package/.cortex/skills/pdf-documents/sections/05-css-print-rules.md +135 -0
  53. package/.cortex/skills/pdf-documents/sections/06-svg-charts.md +100 -0
  54. package/.cortex/skills/pdf-documents/sections/07-templates.md +224 -0
  55. package/.cortex/skills/pdf-documents/sections/08-scaled-output.md +164 -0
  56. package/.cortex/skills/pdf-documents/sections/09-preview-qa.md +66 -0
  57. package/.cortex/skills/pdf-documents/sections/10-reading-pdfs.md +499 -0
  58. package/.cortex/skills/pdf-documents/sections/11-form-filling.md +241 -0
  59. package/.cortex/skills/pptx/SKILL.md +90 -0
  60. package/.cortex/skills/resume-analyst/SKILL.md +373 -0
  61. package/.cortex/skills/verify-work/SKILL.md +74 -0
  62. package/.cortex/skills/xlsx/SKILL.md +101 -0
  63. package/.cortex/system-messages/messages/WORK_QUALITY.md +159 -0
  64. package/.cortex/system-messages/registry.json +18 -0
  65. package/LICENSE +202 -0
  66. package/NOTICE +2 -0
  67. package/README.md +13 -0
  68. package/bin/cortex.js +548 -0
  69. package/dist/agent-mode.d.ts +21 -0
  70. package/dist/agent-mode.d.ts.map +1 -0
  71. package/dist/agent-mode.js +511 -0
  72. package/dist/agent-mode.js.map +1 -0
  73. package/dist/client/CortexClient.d.ts +84 -0
  74. package/dist/client/CortexClient.d.ts.map +1 -0
  75. package/dist/client/CortexClient.js +163 -0
  76. package/dist/client/CortexClient.js.map +1 -0
  77. package/dist/commands/artifact/list.d.ts +15 -0
  78. package/dist/commands/artifact/list.d.ts.map +1 -0
  79. package/dist/commands/artifact/list.js +89 -0
  80. package/dist/commands/artifact/list.js.map +1 -0
  81. package/dist/commands/artifact/restart.d.ts +13 -0
  82. package/dist/commands/artifact/restart.d.ts.map +1 -0
  83. package/dist/commands/artifact/restart.js +56 -0
  84. package/dist/commands/artifact/restart.js.map +1 -0
  85. package/dist/commands/artifact/status.d.ts +13 -0
  86. package/dist/commands/artifact/status.d.ts.map +1 -0
  87. package/dist/commands/artifact/status.js +100 -0
  88. package/dist/commands/artifact/status.js.map +1 -0
  89. package/dist/commands/artifact/stop.d.ts +13 -0
  90. package/dist/commands/artifact/stop.d.ts.map +1 -0
  91. package/dist/commands/artifact/stop.js +50 -0
  92. package/dist/commands/artifact/stop.js.map +1 -0
  93. package/dist/commands/autoresearch/bench.d.ts +32 -0
  94. package/dist/commands/autoresearch/bench.d.ts.map +1 -0
  95. package/dist/commands/autoresearch/bench.js +123 -0
  96. package/dist/commands/autoresearch/bench.js.map +1 -0
  97. package/dist/commands/autoresearch/commandRunner.d.ts +35 -0
  98. package/dist/commands/autoresearch/commandRunner.d.ts.map +1 -0
  99. package/dist/commands/autoresearch/commandRunner.js +91 -0
  100. package/dist/commands/autoresearch/commandRunner.js.map +1 -0
  101. package/dist/commands/autoresearch/evaluate.d.ts +18 -0
  102. package/dist/commands/autoresearch/evaluate.d.ts.map +1 -0
  103. package/dist/commands/autoresearch/evaluate.js +117 -0
  104. package/dist/commands/autoresearch/evaluate.js.map +1 -0
  105. package/dist/commands/autoresearch/experiment.d.ts +38 -0
  106. package/dist/commands/autoresearch/experiment.d.ts.map +1 -0
  107. package/dist/commands/autoresearch/experiment.js +168 -0
  108. package/dist/commands/autoresearch/experiment.js.map +1 -0
  109. package/dist/commands/autoresearch/fix.d.ts +10 -0
  110. package/dist/commands/autoresearch/fix.d.ts.map +1 -0
  111. package/dist/commands/autoresearch/fix.js +86 -0
  112. package/dist/commands/autoresearch/fix.js.map +1 -0
  113. package/dist/commands/autoresearch/harnessProcess.d.ts +48 -0
  114. package/dist/commands/autoresearch/harnessProcess.d.ts.map +1 -0
  115. package/dist/commands/autoresearch/harnessProcess.js +140 -0
  116. package/dist/commands/autoresearch/harnessProcess.js.map +1 -0
  117. package/dist/commands/autoresearch/list.d.ts +6 -0
  118. package/dist/commands/autoresearch/list.d.ts.map +1 -0
  119. package/dist/commands/autoresearch/list.js +38 -0
  120. package/dist/commands/autoresearch/list.js.map +1 -0
  121. package/dist/commands/autoresearch/loop.d.ts +26 -0
  122. package/dist/commands/autoresearch/loop.d.ts.map +1 -0
  123. package/dist/commands/autoresearch/loop.js +242 -0
  124. package/dist/commands/autoresearch/loop.js.map +1 -0
  125. package/dist/commands/cache/metrics.d.ts +13 -0
  126. package/dist/commands/cache/metrics.d.ts.map +1 -0
  127. package/dist/commands/cache/metrics.js +77 -0
  128. package/dist/commands/cache/metrics.js.map +1 -0
  129. package/dist/commands/chat/AgenticChat.d.ts +39 -0
  130. package/dist/commands/chat/AgenticChat.d.ts.map +1 -0
  131. package/dist/commands/chat/AgenticChat.js +201 -0
  132. package/dist/commands/chat/AgenticChat.js.map +1 -0
  133. package/dist/commands/chat/renderers/CodeRenderer.d.ts +36 -0
  134. package/dist/commands/chat/renderers/CodeRenderer.d.ts.map +1 -0
  135. package/dist/commands/chat/renderers/CodeRenderer.js +85 -0
  136. package/dist/commands/chat/renderers/CodeRenderer.js.map +1 -0
  137. package/dist/commands/chat/renderers/ToolRenderer.d.ts +30 -0
  138. package/dist/commands/chat/renderers/ToolRenderer.d.ts.map +1 -0
  139. package/dist/commands/chat/renderers/ToolRenderer.js +93 -0
  140. package/dist/commands/chat/renderers/ToolRenderer.js.map +1 -0
  141. package/dist/commands/chat/single-message.d.ts +15 -0
  142. package/dist/commands/chat/single-message.d.ts.map +1 -0
  143. package/dist/commands/chat/single-message.js +85 -0
  144. package/dist/commands/chat/single-message.js.map +1 -0
  145. package/dist/commands/config/categories.d.ts +8 -0
  146. package/dist/commands/config/categories.d.ts.map +1 -0
  147. package/dist/commands/config/categories.js +75 -0
  148. package/dist/commands/config/categories.js.map +1 -0
  149. package/dist/commands/config/category.d.ts +8 -0
  150. package/dist/commands/config/category.d.ts.map +1 -0
  151. package/dist/commands/config/category.js +81 -0
  152. package/dist/commands/config/category.js.map +1 -0
  153. package/dist/commands/config/get.d.ts +9 -0
  154. package/dist/commands/config/get.d.ts.map +1 -0
  155. package/dist/commands/config/get.js +98 -0
  156. package/dist/commands/config/get.js.map +1 -0
  157. package/dist/commands/config/reset.d.ts +6 -0
  158. package/dist/commands/config/reset.d.ts.map +1 -0
  159. package/dist/commands/config/reset.js +68 -0
  160. package/dist/commands/config/reset.js.map +1 -0
  161. package/dist/commands/config/set.d.ts +6 -0
  162. package/dist/commands/config/set.d.ts.map +1 -0
  163. package/dist/commands/config/set.js +60 -0
  164. package/dist/commands/config/set.js.map +1 -0
  165. package/dist/commands/config/utils.d.ts +14 -0
  166. package/dist/commands/config/utils.d.ts.map +1 -0
  167. package/dist/commands/config/utils.js +54 -0
  168. package/dist/commands/config/utils.js.map +1 -0
  169. package/dist/commands/context/boundaries.d.ts +13 -0
  170. package/dist/commands/context/boundaries.d.ts.map +1 -0
  171. package/dist/commands/context/boundaries.js +45 -0
  172. package/dist/commands/context/boundaries.js.map +1 -0
  173. package/dist/commands/context/compact.d.ts +13 -0
  174. package/dist/commands/context/compact.d.ts.map +1 -0
  175. package/dist/commands/context/compact.js +41 -0
  176. package/dist/commands/context/compact.js.map +1 -0
  177. package/dist/commands/context/savings.d.ts +13 -0
  178. package/dist/commands/context/savings.d.ts.map +1 -0
  179. package/dist/commands/context/savings.js +49 -0
  180. package/dist/commands/context/savings.js.map +1 -0
  181. package/dist/commands/context/status.d.ts +13 -0
  182. package/dist/commands/context/status.d.ts.map +1 -0
  183. package/dist/commands/context/status.js +52 -0
  184. package/dist/commands/context/status.js.map +1 -0
  185. package/dist/commands/context/strategy.d.ts +13 -0
  186. package/dist/commands/context/strategy.d.ts.map +1 -0
  187. package/dist/commands/context/strategy.js +66 -0
  188. package/dist/commands/context/strategy.js.map +1 -0
  189. package/dist/commands/mcp/disable.d.ts +5 -0
  190. package/dist/commands/mcp/disable.d.ts.map +1 -0
  191. package/dist/commands/mcp/disable.js +26 -0
  192. package/dist/commands/mcp/disable.js.map +1 -0
  193. package/dist/commands/mcp/edit.d.ts +9 -0
  194. package/dist/commands/mcp/edit.d.ts.map +1 -0
  195. package/dist/commands/mcp/edit.js +62 -0
  196. package/dist/commands/mcp/edit.js.map +1 -0
  197. package/dist/commands/mcp/enable.d.ts +5 -0
  198. package/dist/commands/mcp/enable.d.ts.map +1 -0
  199. package/dist/commands/mcp/enable.js +27 -0
  200. package/dist/commands/mcp/enable.js.map +1 -0
  201. package/dist/commands/mcp/init.d.ts +9 -0
  202. package/dist/commands/mcp/init.d.ts.map +1 -0
  203. package/dist/commands/mcp/init.js +97 -0
  204. package/dist/commands/mcp/init.js.map +1 -0
  205. package/dist/commands/mcp/list.d.ts +6 -0
  206. package/dist/commands/mcp/list.d.ts.map +1 -0
  207. package/dist/commands/mcp/list.js +56 -0
  208. package/dist/commands/mcp/list.js.map +1 -0
  209. package/dist/commands/mcp/server.d.ts +6 -0
  210. package/dist/commands/mcp/server.d.ts.map +1 -0
  211. package/dist/commands/mcp/server.js +44 -0
  212. package/dist/commands/mcp/server.js.map +1 -0
  213. package/dist/commands/mcp/status.d.ts +6 -0
  214. package/dist/commands/mcp/status.d.ts.map +1 -0
  215. package/dist/commands/mcp/status.js +43 -0
  216. package/dist/commands/mcp/status.js.map +1 -0
  217. package/dist/commands/mcp/tools.d.ts +7 -0
  218. package/dist/commands/mcp/tools.d.ts.map +1 -0
  219. package/dist/commands/mcp/tools.js +82 -0
  220. package/dist/commands/mcp/tools.js.map +1 -0
  221. package/dist/commands/mcp/validate.d.ts +8 -0
  222. package/dist/commands/mcp/validate.d.ts.map +1 -0
  223. package/dist/commands/mcp/validate.js +121 -0
  224. package/dist/commands/mcp/validate.js.map +1 -0
  225. package/dist/commands/middleware/config.d.ts +13 -0
  226. package/dist/commands/middleware/config.d.ts.map +1 -0
  227. package/dist/commands/middleware/config.js +87 -0
  228. package/dist/commands/middleware/config.js.map +1 -0
  229. package/dist/commands/middleware/disable.d.ts +13 -0
  230. package/dist/commands/middleware/disable.d.ts.map +1 -0
  231. package/dist/commands/middleware/disable.js +50 -0
  232. package/dist/commands/middleware/disable.js.map +1 -0
  233. package/dist/commands/middleware/enable.d.ts +13 -0
  234. package/dist/commands/middleware/enable.d.ts.map +1 -0
  235. package/dist/commands/middleware/enable.js +50 -0
  236. package/dist/commands/middleware/enable.js.map +1 -0
  237. package/dist/commands/middleware/list.d.ts +13 -0
  238. package/dist/commands/middleware/list.d.ts.map +1 -0
  239. package/dist/commands/middleware/list.js +64 -0
  240. package/dist/commands/middleware/list.js.map +1 -0
  241. package/dist/commands/middleware/status.d.ts +13 -0
  242. package/dist/commands/middleware/status.d.ts.map +1 -0
  243. package/dist/commands/middleware/status.js +80 -0
  244. package/dist/commands/middleware/status.js.map +1 -0
  245. package/dist/commands/models/compare.d.ts +9 -0
  246. package/dist/commands/models/compare.d.ts.map +1 -0
  247. package/dist/commands/models/compare.js +76 -0
  248. package/dist/commands/models/compare.js.map +1 -0
  249. package/dist/commands/models/cost.d.ts +9 -0
  250. package/dist/commands/models/cost.d.ts.map +1 -0
  251. package/dist/commands/models/cost.js +64 -0
  252. package/dist/commands/models/cost.js.map +1 -0
  253. package/dist/commands/models/info.d.ts +9 -0
  254. package/dist/commands/models/info.d.ts.map +1 -0
  255. package/dist/commands/models/info.js +61 -0
  256. package/dist/commands/models/info.js.map +1 -0
  257. package/dist/commands/models/list.d.ts +6 -0
  258. package/dist/commands/models/list.d.ts.map +1 -0
  259. package/dist/commands/models/list.js +66 -0
  260. package/dist/commands/models/list.js.map +1 -0
  261. package/dist/commands/models/providers.d.ts +13 -0
  262. package/dist/commands/models/providers.d.ts.map +1 -0
  263. package/dist/commands/models/providers.js +45 -0
  264. package/dist/commands/models/providers.js.map +1 -0
  265. package/dist/commands/models/search.d.ts +10 -0
  266. package/dist/commands/models/search.d.ts.map +1 -0
  267. package/dist/commands/models/search.js +56 -0
  268. package/dist/commands/models/search.js.map +1 -0
  269. package/dist/commands/models/switch.d.ts +14 -0
  270. package/dist/commands/models/switch.d.ts.map +1 -0
  271. package/dist/commands/models/switch.js +67 -0
  272. package/dist/commands/models/switch.js.map +1 -0
  273. package/dist/commands/permissions/auto-approve.d.ts +13 -0
  274. package/dist/commands/permissions/auto-approve.d.ts.map +1 -0
  275. package/dist/commands/permissions/auto-approve.js +53 -0
  276. package/dist/commands/permissions/auto-approve.js.map +1 -0
  277. package/dist/commands/permissions/grant.d.ts +13 -0
  278. package/dist/commands/permissions/grant.d.ts.map +1 -0
  279. package/dist/commands/permissions/grant.js +46 -0
  280. package/dist/commands/permissions/grant.js.map +1 -0
  281. package/dist/commands/permissions/mode.d.ts +12 -0
  282. package/dist/commands/permissions/mode.d.ts.map +1 -0
  283. package/dist/commands/permissions/mode.js +61 -0
  284. package/dist/commands/permissions/mode.js.map +1 -0
  285. package/dist/commands/permissions/policies.d.ts +13 -0
  286. package/dist/commands/permissions/policies.d.ts.map +1 -0
  287. package/dist/commands/permissions/policies.js +47 -0
  288. package/dist/commands/permissions/policies.js.map +1 -0
  289. package/dist/commands/permissions/revoke.d.ts +13 -0
  290. package/dist/commands/permissions/revoke.d.ts.map +1 -0
  291. package/dist/commands/permissions/revoke.js +46 -0
  292. package/dist/commands/permissions/revoke.js.map +1 -0
  293. package/dist/commands/permissions/set.d.ts +13 -0
  294. package/dist/commands/permissions/set.d.ts.map +1 -0
  295. package/dist/commands/permissions/set.js +57 -0
  296. package/dist/commands/permissions/set.js.map +1 -0
  297. package/dist/commands/permissions/tools.d.ts +13 -0
  298. package/dist/commands/permissions/tools.d.ts.map +1 -0
  299. package/dist/commands/permissions/tools.js +50 -0
  300. package/dist/commands/permissions/tools.js.map +1 -0
  301. package/dist/commands/server/start.d.ts +11 -0
  302. package/dist/commands/server/start.d.ts.map +1 -0
  303. package/dist/commands/server/start.js +58 -0
  304. package/dist/commands/server/start.js.map +1 -0
  305. package/dist/commands/session/checkpoints.d.ts +6 -0
  306. package/dist/commands/session/checkpoints.d.ts.map +1 -0
  307. package/dist/commands/session/checkpoints.js +41 -0
  308. package/dist/commands/session/checkpoints.js.map +1 -0
  309. package/dist/commands/session/compact.d.ts +13 -0
  310. package/dist/commands/session/compact.d.ts.map +1 -0
  311. package/dist/commands/session/compact.js +56 -0
  312. package/dist/commands/session/compact.js.map +1 -0
  313. package/dist/commands/session/export.d.ts +6 -0
  314. package/dist/commands/session/export.d.ts.map +1 -0
  315. package/dist/commands/session/export.js +31 -0
  316. package/dist/commands/session/export.js.map +1 -0
  317. package/dist/commands/session/list.d.ts +7 -0
  318. package/dist/commands/session/list.d.ts.map +1 -0
  319. package/dist/commands/session/list.js +63 -0
  320. package/dist/commands/session/list.js.map +1 -0
  321. package/dist/commands/session/new.d.ts +8 -0
  322. package/dist/commands/session/new.d.ts.map +1 -0
  323. package/dist/commands/session/new.js +23 -0
  324. package/dist/commands/session/new.js.map +1 -0
  325. package/dist/commands/session/resume.d.ts +6 -0
  326. package/dist/commands/session/resume.d.ts.map +1 -0
  327. package/dist/commands/session/resume.js +32 -0
  328. package/dist/commands/session/resume.js.map +1 -0
  329. package/dist/commands/session/search.d.ts +10 -0
  330. package/dist/commands/session/search.d.ts.map +1 -0
  331. package/dist/commands/session/search.js +65 -0
  332. package/dist/commands/session/search.js.map +1 -0
  333. package/dist/commands/session/stats.d.ts +6 -0
  334. package/dist/commands/session/stats.d.ts.map +1 -0
  335. package/dist/commands/session/stats.js +58 -0
  336. package/dist/commands/session/stats.js.map +1 -0
  337. package/dist/commands/session/view.d.ts +6 -0
  338. package/dist/commands/session/view.d.ts.map +1 -0
  339. package/dist/commands/session/view.js +65 -0
  340. package/dist/commands/session/view.js.map +1 -0
  341. package/dist/commands/slash/CommandPalette.d.ts +60 -0
  342. package/dist/commands/slash/CommandPalette.d.ts.map +1 -0
  343. package/dist/commands/slash/CommandPalette.js +351 -0
  344. package/dist/commands/slash/CommandPalette.js.map +1 -0
  345. package/dist/commands/slash/SlashCommandParser.d.ts +11 -0
  346. package/dist/commands/slash/SlashCommandParser.d.ts.map +1 -0
  347. package/dist/commands/slash/SlashCommandParser.js +11 -0
  348. package/dist/commands/slash/SlashCommandParser.js.map +1 -0
  349. package/dist/commands/slash/SlashCommandRegistry.d.ts +11 -0
  350. package/dist/commands/slash/SlashCommandRegistry.d.ts.map +1 -0
  351. package/dist/commands/slash/SlashCommandRegistry.js +11 -0
  352. package/dist/commands/slash/SlashCommandRegistry.js.map +1 -0
  353. package/dist/commands/slash/index.d.ts +11 -0
  354. package/dist/commands/slash/index.d.ts.map +1 -0
  355. package/dist/commands/slash/index.js +13 -0
  356. package/dist/commands/slash/index.js.map +1 -0
  357. package/dist/commands/system-messages/list.d.ts +13 -0
  358. package/dist/commands/system-messages/list.d.ts.map +1 -0
  359. package/dist/commands/system-messages/list.js +54 -0
  360. package/dist/commands/system-messages/list.js.map +1 -0
  361. package/dist/commands/system-messages/reload.d.ts +13 -0
  362. package/dist/commands/system-messages/reload.d.ts.map +1 -0
  363. package/dist/commands/system-messages/reload.js +36 -0
  364. package/dist/commands/system-messages/reload.js.map +1 -0
  365. package/dist/commands/system-messages/view.d.ts +13 -0
  366. package/dist/commands/system-messages/view.d.ts.map +1 -0
  367. package/dist/commands/system-messages/view.js +52 -0
  368. package/dist/commands/system-messages/view.js.map +1 -0
  369. package/dist/commands/tmux/list.d.ts +13 -0
  370. package/dist/commands/tmux/list.d.ts.map +1 -0
  371. package/dist/commands/tmux/list.js +68 -0
  372. package/dist/commands/tmux/list.js.map +1 -0
  373. package/dist/commands/tools/info.d.ts +13 -0
  374. package/dist/commands/tools/info.d.ts.map +1 -0
  375. package/dist/commands/tools/info.js +82 -0
  376. package/dist/commands/tools/info.js.map +1 -0
  377. package/dist/commands/tools/list.d.ts +14 -0
  378. package/dist/commands/tools/list.d.ts.map +1 -0
  379. package/dist/commands/tools/list.js +67 -0
  380. package/dist/commands/tools/list.js.map +1 -0
  381. package/dist/config/ConfigManager.d.ts +40 -0
  382. package/dist/config/ConfigManager.d.ts.map +1 -0
  383. package/dist/config/ConfigManager.js +162 -0
  384. package/dist/config/ConfigManager.js.map +1 -0
  385. package/dist/config/extension.d.ts +12 -0
  386. package/dist/config/extension.d.ts.map +1 -0
  387. package/dist/config/extension.js +5 -0
  388. package/dist/config/extension.js.map +1 -0
  389. package/dist/config/settings.d.ts +42 -0
  390. package/dist/config/settings.d.ts.map +1 -0
  391. package/dist/config/settings.js +32 -0
  392. package/dist/config/settings.js.map +1 -0
  393. package/dist/index.d.ts +3 -0
  394. package/dist/index.d.ts.map +1 -0
  395. package/dist/index.js +883 -0
  396. package/dist/index.js.map +1 -0
  397. package/dist/orchestrator/OrchestratorClient.d.ts +385 -0
  398. package/dist/orchestrator/OrchestratorClient.d.ts.map +1 -0
  399. package/dist/orchestrator/OrchestratorClient.js +1195 -0
  400. package/dist/orchestrator/OrchestratorClient.js.map +1 -0
  401. package/dist/themes/DefaultTheme.d.ts +9 -0
  402. package/dist/themes/DefaultTheme.d.ts.map +1 -0
  403. package/dist/themes/DefaultTheme.js +29 -0
  404. package/dist/themes/DefaultTheme.js.map +1 -0
  405. package/dist/themes/MinimalTheme.d.ts +9 -0
  406. package/dist/themes/MinimalTheme.d.ts.map +1 -0
  407. package/dist/themes/MinimalTheme.js +29 -0
  408. package/dist/themes/MinimalTheme.js.map +1 -0
  409. package/dist/themes/Theme.interface.d.ts +36 -0
  410. package/dist/themes/Theme.interface.d.ts.map +1 -0
  411. package/dist/themes/Theme.interface.js +5 -0
  412. package/dist/themes/Theme.interface.js.map +1 -0
  413. package/dist/themes/ThemeManager.d.ts +63 -0
  414. package/dist/themes/ThemeManager.d.ts.map +1 -0
  415. package/dist/themes/ThemeManager.js +257 -0
  416. package/dist/themes/ThemeManager.js.map +1 -0
  417. package/dist/themes/colors.d.ts +108 -0
  418. package/dist/themes/colors.d.ts.map +1 -0
  419. package/dist/themes/colors.js +284 -0
  420. package/dist/themes/colors.js.map +1 -0
  421. package/dist/themes/createTheme.d.ts +40 -0
  422. package/dist/themes/createTheme.d.ts.map +1 -0
  423. package/dist/themes/createTheme.js +114 -0
  424. package/dist/themes/createTheme.js.map +1 -0
  425. package/dist/themes/themeDefinitions.d.ts +27 -0
  426. package/dist/themes/themeDefinitions.d.ts.map +1 -0
  427. package/dist/themes/themeDefinitions.js +244 -0
  428. package/dist/themes/themeDefinitions.js.map +1 -0
  429. package/dist/utils/CodeDiffRenderer.d.ts +124 -0
  430. package/dist/utils/CodeDiffRenderer.d.ts.map +1 -0
  431. package/dist/utils/CodeDiffRenderer.js +257 -0
  432. package/dist/utils/CodeDiffRenderer.js.map +1 -0
  433. package/dist/utils/MarkdownRenderer.d.ts +74 -0
  434. package/dist/utils/MarkdownRenderer.d.ts.map +1 -0
  435. package/dist/utils/MarkdownRenderer.js +260 -0
  436. package/dist/utils/MarkdownRenderer.js.map +1 -0
  437. package/dist/utils/MessageRenderer.d.ts +200 -0
  438. package/dist/utils/MessageRenderer.d.ts.map +1 -0
  439. package/dist/utils/MessageRenderer.js +283 -0
  440. package/dist/utils/MessageRenderer.js.map +1 -0
  441. package/dist/utils/ToolFormatter.d.ts +103 -0
  442. package/dist/utils/ToolFormatter.d.ts.map +1 -0
  443. package/dist/utils/ToolFormatter.js +357 -0
  444. package/dist/utils/ToolFormatter.js.map +1 -0
  445. package/dist/utils/boxDrawing.d.ts +23 -0
  446. package/dist/utils/boxDrawing.d.ts.map +1 -0
  447. package/dist/utils/boxDrawing.js +78 -0
  448. package/dist/utils/boxDrawing.js.map +1 -0
  449. package/dist/utils/checks.d.ts +9 -0
  450. package/dist/utils/checks.d.ts.map +1 -0
  451. package/dist/utils/checks.js +11 -0
  452. package/dist/utils/checks.js.map +1 -0
  453. package/dist/utils/events.d.ts +24 -0
  454. package/dist/utils/events.d.ts.map +1 -0
  455. package/dist/utils/events.js +17 -0
  456. package/dist/utils/events.js.map +1 -0
  457. package/dist/utils/formatters.d.ts +255 -0
  458. package/dist/utils/formatters.d.ts.map +1 -0
  459. package/dist/utils/formatters.js +361 -0
  460. package/dist/utils/formatters.js.map +1 -0
  461. package/dist/utils/math.d.ts +11 -0
  462. package/dist/utils/math.d.ts.map +1 -0
  463. package/dist/utils/math.js +13 -0
  464. package/dist/utils/math.js.map +1 -0
  465. package/package.json +82 -0
package/bin/cortex.js ADDED
@@ -0,0 +1,548 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * cortex — Natural language interface to the Nexus Cortex library
5
+ *
6
+ * Usage:
7
+ * cortex "Read package.json and tell me the version"
8
+ * cortex --model deepseek-v4-flash "Explain generics"
9
+ * cortex --resume abc123 "Continue from where we left off"
10
+ * cortex --new "Start a fresh conversation"
11
+ * cortex --json "Give me raw response"
12
+ * cortex --stats
13
+ * cortex --sessions
14
+ *
15
+ * Connects to a running Nexus Cortex server (default: localhost:4000).
16
+ * If no server is running, prints instructions to start one.
17
+ *
18
+ * Designed for:
19
+ * - Quick natural language queries from the shell
20
+ * - Agent-to-agent communication (invoke as a task tool)
21
+ * - Scripting and pipeline integration (--json mode)
22
+ * - Multi-turn conversations via session resume
23
+ */
24
+
25
+ import { spawn, spawnSync } from 'child_process';
26
+ import { fileURLToPath } from 'url';
27
+ import { dirname, join, resolve } from 'path';
28
+ import { existsSync, realpathSync } from 'fs';
29
+
30
+ const __cortex_filename = fileURLToPath(import.meta.url);
31
+ const __cortex_dirname = dirname(realpathSync(__cortex_filename));
32
+ const MONOREPO_ROOT = resolve(__cortex_dirname, '..', '..', '..');
33
+ const SERVER_ENTRY = join(MONOREPO_ROOT, 'packages', 'server', 'dist', 'index.js');
34
+
35
+ // Resolve CORTEX_ROOT (the install root holding the shipped .cortex scaffold —
36
+ // builtin agents/skills) when the user hasn't set it. Git clone → the monorepo
37
+ // root; npm install → this package's root, where prepack vendored the scaffold.
38
+ // Inherited by the spawned server, so AgentStore/SkillTool builtin tiers resolve.
39
+ const CLI_PKG_ROOT = resolve(__cortex_dirname, '..');
40
+ if (!process.env.CORTEX_ROOT) {
41
+ if (existsSync(join(MONOREPO_ROOT, '.cortex'))) process.env.CORTEX_ROOT = MONOREPO_ROOT;
42
+ else if (existsSync(join(CLI_PKG_ROOT, '.cortex'))) process.env.CORTEX_ROOT = CLI_PKG_ROOT;
43
+ }
44
+
45
+ const BASE_PORT = process.env.PORT || '4000';
46
+ const BASE_URL = process.env.CORTEX_URL || `http://localhost:${BASE_PORT}`;
47
+
48
+ let serverProcess = null;
49
+
50
+ // ── Argument parsing ──────────────────────────────────────────────
51
+
52
+ const args = process.argv.slice(2);
53
+
54
+ // ── Headless Commander delegation ─────────────────────────────────
55
+ // `cortex` is primarily the HTTP chat/PR client; the headless Commander program
56
+ // (autoresearch, models, message, mcp, config, …) lives in dist/index.js. If the
57
+ // first positional arg is one of those subcommands, hand the whole invocation off
58
+ // to it — this is what makes `cortex autoresearch experiment … --json` work on PATH
59
+ // (the auto-research container contract).
60
+ const COMMANDER_SUBCOMMANDS = new Set([
61
+ 'autoresearch', 'models', 'message', 'mcp', 'config', 'permissions', 'context',
62
+ 'tools', 'middleware', 'artifact', 'cache', 'system-messages', 'tmux',
63
+ ]);
64
+ const __firstPositional = args.find((a) => !a.startsWith('-'));
65
+ if (__firstPositional && COMMANDER_SUBCOMMANDS.has(__firstPositional)) {
66
+ const CLI_ENTRY = join(__cortex_dirname, '..', 'dist', 'index.js');
67
+ const res = spawnSync(process.execPath, [CLI_ENTRY, ...args], { stdio: 'inherit' });
68
+ process.exit(res.status ?? 0);
69
+ }
70
+
71
+ // `cortex agent "<task>"` (alias: `cortex run`) — an autonomous one-shot agent run.
72
+ // Same as the chat one-shot, but bundles the unattended defaults: auto-approve tools
73
+ // (YOLO), a fresh session, server self-stop on idle, and an optional --cwd to target a
74
+ // directory without `cd`. Defaults are applied after flag parsing (below).
75
+ let __agentMode = false;
76
+ {
77
+ const i = args.findIndex((a) => !a.startsWith('-'));
78
+ if (i !== -1 && (args[i] === 'agent' || args[i] === 'run')) {
79
+ __agentMode = true;
80
+ args.splice(i, 1); // drop the subcommand word; the rest is flags + the task
81
+ }
82
+ }
83
+
84
+ function hasFlag(name) {
85
+ const idx = args.indexOf(name);
86
+ if (idx !== -1) { args.splice(idx, 1); return true; }
87
+ return false;
88
+ }
89
+
90
+ function getFlagValue(name) {
91
+ const idx = args.indexOf(name);
92
+ if (idx !== -1 && idx + 1 < args.length) {
93
+ const val = args[idx + 1];
94
+ args.splice(idx, 2);
95
+ return val;
96
+ }
97
+ return null;
98
+ }
99
+
100
+ // Extract flags before consuming remaining args as prompt
101
+ const showHelp = hasFlag('--help') || hasFlag('-h');
102
+ const jsonOutput = hasFlag('--json');
103
+ let newSession = hasFlag('--new');
104
+ const showStats = hasFlag('--stats');
105
+ const showSessions = hasFlag('--sessions');
106
+ const doShutdown = hasFlag('--shutdown');
107
+ const showTmux = hasFlag('--tmux');
108
+ const quiet = hasFlag('--quiet') || hasFlag('-q');
109
+ const modelId = getFlagValue('--model') || getFlagValue('-m');
110
+ const resumeId = getFlagValue('--resume');
111
+ const prMode = getFlagValue('--pr');
112
+ const timeoutFlag = getFlagValue('--timeout');
113
+ let idleTimeoutFlag = getFlagValue('--idle-timeout');
114
+ const cwdFlag = getFlagValue('--cwd'); // `cortex agent` target directory
115
+ hasFlag('--yolo'); // accepted but redundant — agent auto-approves by default
116
+ const messageTimeoutMs = timeoutFlag ? parseInt(timeoutFlag, 10) : 600000; // 10 min default for messages
117
+ let prompt = args.join(' ').trim();
118
+
119
+ // Apply `cortex agent` autonomous defaults. Set BEFORE the server is auto-started so the
120
+ // spawned server inherits the cwd (project path) + YOLO env.
121
+ if (__agentMode) {
122
+ if (cwdFlag) {
123
+ try {
124
+ process.chdir(resolve(cwdFlag));
125
+ } catch (e) {
126
+ process.stderr.write(`[agent] --cwd: cannot enter ${cwdFlag}: ${e.message}\n`);
127
+ process.exit(1);
128
+ }
129
+ }
130
+ newSession = true; // each task is independent
131
+ if (idleTimeoutFlag === null) idleTimeoutFlag = '60'; // server self-stops; no orphan
132
+ // Headless autonomous runs have NO interactive approver — there is no human in the loop
133
+ // to say yes/no to a tool. So the agent auto-approves all tools (the practical reality of
134
+ // unattended operation). Disclosed up front; scope `cortex agent` to a throwaway / worktree
135
+ // / sandbox directory on a real repo. (A future opt-in "agent-safe" profile would hard-deny
136
+ // destructive ops instead of auto-approving — see research/future_ideas.)
137
+ process.env.YOLO = 'true';
138
+ process.stderr.write(
139
+ '[agent] autonomous: auto-approving all tools (headless has no interactive approver). ' +
140
+ 'Point it at a throwaway/worktree/sandbox dir if the files matter.\n',
141
+ );
142
+ }
143
+
144
+ // ── Help ──────────────────────────────────────────────────────────
145
+
146
+ if (showHelp) {
147
+ console.log(`
148
+ cortex — Natural language interface to the Nexus Cortex library
149
+
150
+ USAGE:
151
+ cortex "your prompt here" Send a message (continues current session)
152
+ cortex agent "<task>" Autonomous one-shot agent run (see below)
153
+ cortex --new "start fresh" Start new session, then send message
154
+ cortex --model MODEL_ID "prompt" Use a specific model
155
+ cortex --resume SESSION_ID "prompt" Resume a specific session
156
+ cortex --json "prompt" Output raw JSON response
157
+ cortex --stats Show current session stats
158
+ cortex --sessions List all sessions
159
+ cortex --quiet "prompt" Suppress session info, print only response
160
+ cortex --shutdown Stop the running server
161
+ cortex --idle-timeout 300 "prompt" Auto-shutdown server after 300s idle
162
+
163
+ AGENT (autonomous one-shot):
164
+ cortex agent "<task>" Run one autonomous agent task to completion, then exit.
165
+ cortex agent --cwd <dir> "<task>" Target a directory (no need to cd into it first).
166
+ Autonomous & unattended: auto-approves all tools
167
+ (headless has no interactive approver), starts a fresh
168
+ session, and self-stops the server on idle. On a real
169
+ repo, point it at a throwaway/worktree/sandbox dir.
170
+ Combine with --json for scripting/agent pipelines.
171
+ (alias: cortex run "<task>")
172
+
173
+ FLAGS:
174
+ --help, -h Show this help
175
+ --model, -m ID Model to use (overrides server default)
176
+ --new Start a fresh session before sending
177
+ --resume ID Resume a specific session by UUID
178
+ --json Output full JSON response (for scripting/agents)
179
+ --quiet, -q Response text only, no session info
180
+ --timeout MS Request timeout in ms (default: 600000 = 10 min)
181
+ --idle-timeout SECS Auto-shutdown server after N seconds of inactivity
182
+ --cwd DIR (agent) Run in DIR — the agent's file tools operate there
183
+ --shutdown Stop the running server and exit
184
+ --tmux List active tmux sessions with dashboard URLs
185
+ --stats Show current session statistics
186
+ --sessions List all saved sessions
187
+ --pr MODE PR management (review, list, create)
188
+
189
+ ENVIRONMENT:
190
+ CORTEX_URL Server URL (default: http://localhost:4000)
191
+ PORT Server port (default: 4000)
192
+ SERVER_IDLE_TIMEOUT Server auto-shutdown after N seconds idle (default: 0 = off)
193
+
194
+ EXAMPLES:
195
+ cortex "What is this project?"
196
+ cortex --model deepseek-v4-flash "Explain TypeScript generics"
197
+ cortex "Read package.json" && cortex "What was the version?"
198
+ cortex --json "list files" | jq '.toolUses[].name'
199
+ cortex --new "Let's start over"
200
+
201
+ PR MANAGEMENT:
202
+ cortex --pr review owner/repo 123 Review a PR with parallel agents
203
+ cortex --pr list owner/repo List open PRs
204
+ cortex --pr create owner/repo --branch feature-x Create PR from changes
205
+
206
+ AGENT TEAM USAGE:
207
+ The session ID printed after each response enables multi-turn workflows:
208
+
209
+ SESSION=$(cortex --quiet --json "Analyze test gaps" | jq -r '.sessionId')
210
+ cortex --resume $SESSION "Now fix the top priority gap"
211
+ cortex --resume $SESSION "Run the tests to verify"
212
+
213
+ SERVER:
214
+ Auto-starts a server if none is running. The server persists in the
215
+ background after cortex exits. Use --shutdown to stop it.
216
+ Use --idle-timeout to auto-stop the server after a period of inactivity.
217
+ `);
218
+ process.exit(0);
219
+ }
220
+
221
+ // ── HTTP helpers ──────────────────────────────────────────────────
222
+
223
+ async function isServerUp() {
224
+ try {
225
+ const resp = await fetch(`${BASE_URL}/health`, { signal: AbortSignal.timeout(2000) });
226
+ return resp.ok;
227
+ } catch { return false; }
228
+ }
229
+
230
+ async function shutdownServer() {
231
+ if (!(await isServerUp())) {
232
+ process.stderr.write(`[cortex] No server running on ${BASE_URL}\n`);
233
+ process.exit(0);
234
+ }
235
+ try {
236
+ await fetch(`${BASE_URL}/shutdown`, { method: 'POST', signal: AbortSignal.timeout(5000) });
237
+ process.stderr.write(`[cortex] Server shutdown requested\n`);
238
+ } catch {
239
+ process.stderr.write(`[cortex] Failed to reach server for shutdown\n`);
240
+ process.exit(1);
241
+ }
242
+ }
243
+
244
+ async function startServer() {
245
+ if (!existsSync(SERVER_ENTRY)) {
246
+ console.error(`Server not built. Run: npm run build`);
247
+ process.exit(1);
248
+ }
249
+ process.stderr.write(`[cortex] No server on ${BASE_URL} -- starting one...\n`);
250
+ const serverArgs = [SERVER_ENTRY];
251
+ if (idleTimeoutFlag) {
252
+ serverArgs.push('--idle-timeout', idleTimeoutFlag);
253
+ }
254
+ serverProcess = spawn('node', serverArgs, {
255
+ stdio: ['ignore', 'pipe', 'pipe'],
256
+ env: { ...process.env, PORT: BASE_PORT },
257
+ detached: true,
258
+ });
259
+ serverProcess.unref();
260
+
261
+ serverProcess.stderr.on('data', (chunk) => {
262
+ const line = chunk.toString();
263
+ if (line.includes('[ERROR]') || line.includes('Failed to start')) {
264
+ process.stderr.write(line);
265
+ }
266
+ });
267
+
268
+ // Wait for healthy (up to 15s)
269
+ for (let i = 0; i < 30; i++) {
270
+ await new Promise(r => setTimeout(r, 500));
271
+ if (await isServerUp()) {
272
+ process.stderr.write(`[cortex] Server ready on ${BASE_URL}\n`);
273
+ // The server is detached + unref'd so it persists on its own. Its piped
274
+ // stdio handles, however, keep THIS short-lived client's event loop alive
275
+ // — so after a one-shot the client would hang until killed. Unref the
276
+ // pipes so the client can exit cleanly once its request completes while
277
+ // the background server keeps running.
278
+ serverProcess.stdout?.unref?.();
279
+ serverProcess.stderr?.unref?.();
280
+ return;
281
+ }
282
+ }
283
+ console.error('[cortex] Server failed to start within 15s');
284
+ process.exit(1);
285
+ }
286
+
287
+ async function ensureServer() {
288
+ if (!(await isServerUp())) {
289
+ await startServer();
290
+ }
291
+ }
292
+
293
+ async function fetchJSON(path, options = {}, timeoutMs = 30000) {
294
+ try {
295
+ const resp = await fetch(`${BASE_URL}${path}`, {
296
+ headers: { 'Content-Type': 'application/json' },
297
+ signal: AbortSignal.timeout(timeoutMs),
298
+ ...options,
299
+ });
300
+ if (!resp.ok) {
301
+ const text = await resp.text();
302
+ throw new Error(`HTTP ${resp.status}: ${text}`);
303
+ }
304
+ return await resp.json();
305
+ } catch (err) {
306
+ if (err.name === 'TimeoutError' || err.name === 'AbortError') {
307
+ console.error(`Request timed out after ${(timeoutMs / 1000).toFixed(0)}s`);
308
+ process.exit(1);
309
+ }
310
+ if (err.cause?.code === 'ECONNREFUSED' || err.message?.includes('ECONNREFUSED')) {
311
+ console.error('[cortex] Lost connection to server at ' + BASE_URL);
312
+ process.exit(1);
313
+ }
314
+ throw err;
315
+ }
316
+ }
317
+
318
+ // ── Commands ──────────────────────────────────────────────────────
319
+
320
+ async function run() {
321
+ // --shutdown: stop the server and exit
322
+ if (doShutdown) {
323
+ await shutdownServer();
324
+ return;
325
+ }
326
+
327
+ await ensureServer();
328
+
329
+ // --tmux: list active tmux sessions (served by SandboxViewServer on port+1)
330
+ if (showTmux) {
331
+ try {
332
+ const viewPort = parseInt(BASE_PORT, 10) + 1;
333
+ const viewUrl = `http://localhost:${viewPort}`;
334
+ const tmuxResp = await fetch(`${viewUrl}/api/tmux/sessions`, {
335
+ signal: AbortSignal.timeout(10000),
336
+ });
337
+ if (!tmuxResp.ok) throw new Error(`HTTP ${tmuxResp.status}: ${await tmuxResp.text()}`);
338
+ const resp = await tmuxResp.json();
339
+ const sessions = resp.sessions || [];
340
+ if (jsonOutput) {
341
+ console.log(JSON.stringify(resp, null, 2));
342
+ return;
343
+ }
344
+ if (sessions.length === 0) {
345
+ console.log('[OK] No active tmux sessions');
346
+ return;
347
+ }
348
+ const dashboardBase = resp.dashboardUrl || `http://localhost:${viewPort}/tmux`;
349
+ console.log(`Tmux Sessions (${sessions.length}):\n`);
350
+ for (const s of sessions) {
351
+ const created = s.created ? new Date(s.created).toLocaleString() : '?';
352
+ const lastUsed = s.lastUsed ? new Date(s.lastUsed).toLocaleString() : '?';
353
+ const tag = s.recovered ? '[RECOVERED]' : '[ACTIVE]';
354
+ console.log(` ${tag} ${s.sessionId}`);
355
+ console.log(` Directory: ${s.workingDirectory || '?'}`);
356
+ console.log(` Created: ${created}`);
357
+ console.log(` Last Used: ${lastUsed}`);
358
+ if (s.recovered && s.recoveredAt) {
359
+ console.log(` Recovered: ${new Date(s.recoveredAt).toLocaleString()}`);
360
+ }
361
+ console.log(` Dashboard: ${dashboardBase}/${s.sessionId}`);
362
+ console.log('');
363
+ }
364
+ } catch (err) {
365
+ console.error(`[WARN] Failed to list tmux sessions: ${err.message}`);
366
+ process.exit(1);
367
+ }
368
+ return;
369
+ }
370
+
371
+ // --sessions: list all sessions
372
+ if (showSessions) {
373
+ const raw = await fetchJSON('/sessions');
374
+ const sessions = raw.sessions || raw; // handle {sessions:[...]} or bare array
375
+ if (jsonOutput) {
376
+ console.log(JSON.stringify(sessions, null, 2));
377
+ } else {
378
+ if (!Array.isArray(sessions) || sessions.length === 0) {
379
+ console.log('No sessions found.');
380
+ return;
381
+ }
382
+ console.log(`Sessions (${sessions.length}):\n`);
383
+ for (const s of sessions) {
384
+ const modified = s.lastModified || s.metadata?.lastModified;
385
+ const age = modified ? timeSince(new Date(modified)) : '?';
386
+ const msgs = s.messageCount || s.metadata?.messageCount || '?';
387
+ console.log(` ${s.sessionId.substring(0, 8)}... ${msgs} msgs ${age} ago`);
388
+ }
389
+ }
390
+ return;
391
+ }
392
+
393
+ // --stats: show current session stats
394
+ if (showStats) {
395
+ // Get sessions list to find the current one
396
+ const raw = await fetchJSON('/sessions');
397
+ const sessions = raw.sessions || raw;
398
+ if (!Array.isArray(sessions) || sessions.length === 0) {
399
+ console.log('No active session.');
400
+ return;
401
+ }
402
+ const current = sessions[0]; // most recent
403
+ try {
404
+ const stats = await fetchJSON(`/sessions/${current.sessionId}/stats`);
405
+ if (jsonOutput) {
406
+ console.log(JSON.stringify(stats, null, 2));
407
+ } else {
408
+ console.log(`Session: ${current.sessionId.substring(0, 8)}...`);
409
+ console.log(`Messages: ${stats.messageCount || '?'}`);
410
+ console.log(`Turns: ${stats.turnCount || '?'}`);
411
+ if (stats.tokenUsage) {
412
+ console.log(`Tokens: ${stats.tokenUsage.totalInput || 0} in / ${stats.tokenUsage.totalOutput || 0} out`);
413
+ }
414
+ if (stats.toolUsage) {
415
+ console.log(`Tool calls: ${stats.toolUsage.totalCalls || 0}`);
416
+ }
417
+ }
418
+ } catch (e) {
419
+ console.log(`Session: ${current.sessionId.substring(0, 8)}... (${current.messageCount || '?'} messages)`);
420
+ }
421
+ return;
422
+ }
423
+
424
+ // --pr: PR management shorthand
425
+ if (prMode) {
426
+ // Parse: --pr review owner/repo 123, --pr list owner/repo, --pr create owner/repo --branch feature-x
427
+ const mode = prMode; // review, list, create
428
+ const remaining = prompt.split(/\s+/);
429
+ const repo = remaining[0] || '';
430
+ const prNumber = remaining[1] || '';
431
+
432
+ if (mode === 'review' && repo && prNumber) {
433
+ prompt = `Use the PRAgent tool in review mode for repo "${repo}" PR #${prNumber}. Extract the diff and metadata, then dispatch parallel audit agents (security, quality, architecture) to review it. Synthesize their findings into a final review.`;
434
+ } else if (mode === 'list' && repo) {
435
+ prompt = `Use the PRAgent tool in list mode for repo "${repo}". Show all open PRs with their number, title, author, and review status.`;
436
+ } else if (mode === 'create' && repo) {
437
+ const branch = getFlagValue('--branch') || 'main';
438
+ prompt = `Use the WorkspaceManager tool to create a worktree for repo "${repo}" on branch "${branch}", then use the PRAgent tool in create mode to set up a PR workflow.`;
439
+ } else {
440
+ console.error('Usage: cortex --pr review owner/repo 123');
441
+ console.error(' cortex --pr list owner/repo');
442
+ console.error(' cortex --pr create owner/repo --branch feature-x');
443
+ process.exit(1);
444
+ }
445
+ }
446
+
447
+ // Need a prompt for message commands
448
+ if (!prompt) {
449
+ console.error('Usage: cortex "your prompt here"');
450
+ console.error(' cortex --help for more options');
451
+ process.exit(1);
452
+ }
453
+
454
+ // --new: create fresh session first
455
+ if (newSession) {
456
+ await fetchJSON('/sessions/new', { method: 'POST' });
457
+ if (!quiet) {
458
+ process.stderr.write('New session created.\n');
459
+ }
460
+ }
461
+
462
+ // --resume: switch to a specific session
463
+ if (resumeId) {
464
+ try {
465
+ const result = await fetchJSON(`/sessions/${resumeId}/load`, { method: 'POST' });
466
+ if (!quiet) {
467
+ process.stderr.write(`Resumed session ${resumeId.substring(0, 8)}... (${result.messageCount} messages)\n`);
468
+ }
469
+ } catch (err) {
470
+ process.stderr.write(`Failed to resume session ${resumeId}: ${err.message}\n`);
471
+ process.exit(1);
472
+ }
473
+ }
474
+
475
+ // Build the model ID - only set when user passed -m explicitly. When omitted,
476
+ // leave it out of the payload so the server can pick the session's current model
477
+ // (important on --resume: forcing a local fallback like "grok-4-1-fast-reasoning"
478
+ // would silently override the session's persisted model and break the
479
+ // previous_response_id chain on XAI Responses API sessions).
480
+ const health = await fetchJSON('/health');
481
+
482
+ const payload = {
483
+ messages: [{ role: 'user', content: prompt }],
484
+ };
485
+ if (modelId) {
486
+ payload.model = modelId;
487
+ }
488
+
489
+ const data = await fetchJSON('/v1/messages', {
490
+ method: 'POST',
491
+ body: JSON.stringify(payload),
492
+ }, messageTimeoutMs);
493
+
494
+ // --json: raw output
495
+ if (jsonOutput) {
496
+ // Inject sessionId for agent workflows
497
+ const raw = await fetchJSON('/sessions');
498
+ const sessions = raw.sessions || raw;
499
+ if (Array.isArray(sessions) && sessions.length > 0) {
500
+ data.sessionId = sessions[0].sessionId;
501
+ }
502
+ console.log(JSON.stringify(data, null, 2));
503
+ return;
504
+ }
505
+
506
+ // Extract text content
507
+ const text = (data.content || [])
508
+ .filter(b => b.type === 'text')
509
+ .map(b => b.text)
510
+ .join('\n');
511
+
512
+ // Print response
513
+ console.log(text);
514
+
515
+ // Print session info to stderr (unless --quiet)
516
+ if (!quiet) {
517
+ const usage = data.usage || {};
518
+ const tools = (data.toolUses || []).length;
519
+ const iterations = data.metadata?.toolCallIterations || 0;
520
+ const parts = [];
521
+ if (usage.inputTokens) parts.push(`${usage.inputTokens} in`);
522
+ if (usage.outputTokens) parts.push(`${usage.outputTokens} out`);
523
+ if (tools > 0) parts.push(`${tools} tool${tools > 1 ? 's' : ''}`);
524
+ if (iterations > 0) parts.push(`${iterations} iteration${iterations > 1 ? 's' : ''}`);
525
+ if (parts.length > 0) {
526
+ process.stderr.write(`\n[${parts.join(' | ')}]\n`);
527
+ }
528
+ }
529
+ }
530
+
531
+ // ── Utilities ─────────────────────────────────────────────────────
532
+
533
+ function timeSince(date) {
534
+ const seconds = Math.floor((Date.now() - date.getTime()) / 1000);
535
+ if (seconds < 60) return `${seconds}s`;
536
+ const minutes = Math.floor(seconds / 60);
537
+ if (minutes < 60) return `${minutes}m`;
538
+ const hours = Math.floor(minutes / 60);
539
+ if (hours < 24) return `${hours}h`;
540
+ return `${Math.floor(hours / 24)}d`;
541
+ }
542
+
543
+ // ── Entry point ───────────────────────────────────────────────────
544
+
545
+ run().catch(err => {
546
+ console.error(err.message || err);
547
+ process.exit(1);
548
+ });
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Agent Mode Entry Point
4
+ *
5
+ * This module is executed when the CLI is spawned as a sub-agent child process.
6
+ * It receives configuration via IPC, runs the agent task autonomously, and
7
+ * streams progress/results back to the parent process.
8
+ *
9
+ * Usage: This file is NOT called directly. It's spawned by SubAgentProcessManager
10
+ * via child_process.fork().
11
+ *
12
+ * Communication:
13
+ * - Parent sends IPCStartMessage to begin execution
14
+ * - Child streams IPCProgressMessage, IPCToolCallMessage, etc.
15
+ * - Child sends IPCCompletedMessage when done
16
+ *
17
+ * @module cli/agent-mode
18
+ * @version 1.0.0
19
+ */
20
+ export {};
21
+ //# sourceMappingURL=agent-mode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-mode.d.ts","sourceRoot":"","sources":["../src/agent-mode.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;GAiBG"}