erosolar-cli 1.7.415 → 1.7.416

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 (972) hide show
  1. package/dist/StringUtils.d.ts +8 -0
  2. package/dist/StringUtils.d.ts.map +1 -0
  3. package/dist/StringUtils.js +11 -0
  4. package/dist/StringUtils.js.map +1 -0
  5. package/dist/adapters/browser/index.d.ts +12 -0
  6. package/dist/adapters/browser/index.d.ts.map +1 -0
  7. package/dist/adapters/browser/index.js +11 -0
  8. package/dist/adapters/browser/index.js.map +1 -0
  9. package/dist/adapters/node/index.d.ts +17 -0
  10. package/dist/adapters/node/index.d.ts.map +1 -0
  11. package/dist/adapters/node/index.js +35 -0
  12. package/dist/adapters/node/index.js.map +1 -0
  13. package/dist/adapters/remote/index.d.ts +13 -0
  14. package/dist/adapters/remote/index.d.ts.map +1 -0
  15. package/dist/adapters/remote/index.js +20 -0
  16. package/dist/adapters/remote/index.js.map +1 -0
  17. package/dist/adapters/types.d.ts +14 -0
  18. package/dist/adapters/types.d.ts.map +1 -0
  19. package/dist/adapters/types.js +2 -0
  20. package/dist/adapters/types.js.map +1 -0
  21. package/dist/bin/erosolar.d.ts +9 -0
  22. package/dist/bin/erosolar.d.ts.map +1 -0
  23. package/dist/bin/erosolar.js +93 -0
  24. package/dist/bin/erosolar.js.map +1 -0
  25. package/dist/bin/selfTest.d.ts +14 -0
  26. package/dist/bin/selfTest.d.ts.map +1 -0
  27. package/dist/bin/selfTest.js +304 -0
  28. package/dist/bin/selfTest.js.map +1 -0
  29. package/dist/browser/BrowserSessionManager.d.ts +307 -0
  30. package/dist/browser/BrowserSessionManager.d.ts.map +1 -0
  31. package/dist/browser/BrowserSessionManager.js +713 -0
  32. package/dist/browser/BrowserSessionManager.js.map +1 -0
  33. package/dist/capabilities/advancedTestGenerationCapability.d.ts +17 -0
  34. package/dist/capabilities/advancedTestGenerationCapability.d.ts.map +1 -0
  35. package/dist/capabilities/advancedTestGenerationCapability.js +28 -0
  36. package/dist/capabilities/advancedTestGenerationCapability.js.map +1 -0
  37. package/dist/capabilities/agentSpawningCapability.d.ts +6 -0
  38. package/dist/capabilities/agentSpawningCapability.d.ts.map +1 -0
  39. package/dist/capabilities/agentSpawningCapability.js +168 -0
  40. package/dist/capabilities/agentSpawningCapability.js.map +1 -0
  41. package/dist/capabilities/askUserCapability.d.ts +21 -0
  42. package/dist/capabilities/askUserCapability.d.ts.map +1 -0
  43. package/dist/capabilities/askUserCapability.js +155 -0
  44. package/dist/capabilities/askUserCapability.js.map +1 -0
  45. package/dist/capabilities/bashCapability.d.ts +13 -0
  46. package/dist/capabilities/bashCapability.d.ts.map +1 -0
  47. package/dist/capabilities/bashCapability.js +24 -0
  48. package/dist/capabilities/bashCapability.js.map +1 -0
  49. package/dist/capabilities/browserAutomationCapability.d.ts +37 -0
  50. package/dist/capabilities/browserAutomationCapability.d.ts.map +1 -0
  51. package/dist/capabilities/browserAutomationCapability.js +49 -0
  52. package/dist/capabilities/browserAutomationCapability.js.map +1 -0
  53. package/dist/capabilities/buildCapability.d.ts +24 -0
  54. package/dist/capabilities/buildCapability.d.ts.map +1 -0
  55. package/dist/capabilities/buildCapability.js +25 -0
  56. package/dist/capabilities/buildCapability.js.map +1 -0
  57. package/dist/capabilities/cloudCapability.d.ts +13 -0
  58. package/dist/capabilities/cloudCapability.d.ts.map +1 -0
  59. package/dist/capabilities/cloudCapability.js +38 -0
  60. package/dist/capabilities/cloudCapability.js.map +1 -0
  61. package/dist/capabilities/codeAnalysisCapability.d.ts +13 -0
  62. package/dist/capabilities/codeAnalysisCapability.d.ts.map +1 -0
  63. package/dist/capabilities/codeAnalysisCapability.js +24 -0
  64. package/dist/capabilities/codeAnalysisCapability.js.map +1 -0
  65. package/dist/capabilities/codeGenerationCapability.d.ts +13 -0
  66. package/dist/capabilities/codeGenerationCapability.d.ts.map +1 -0
  67. package/dist/capabilities/codeGenerationCapability.js +25 -0
  68. package/dist/capabilities/codeGenerationCapability.js.map +1 -0
  69. package/dist/capabilities/codeQualityCapability.d.ts +13 -0
  70. package/dist/capabilities/codeQualityCapability.d.ts.map +1 -0
  71. package/dist/capabilities/codeQualityCapability.js +25 -0
  72. package/dist/capabilities/codeQualityCapability.js.map +1 -0
  73. package/dist/capabilities/dependencySecurityCapability.d.ts +13 -0
  74. package/dist/capabilities/dependencySecurityCapability.d.ts.map +1 -0
  75. package/dist/capabilities/dependencySecurityCapability.js +24 -0
  76. package/dist/capabilities/dependencySecurityCapability.js.map +1 -0
  77. package/dist/capabilities/devCapability.d.ts +13 -0
  78. package/dist/capabilities/devCapability.d.ts.map +1 -0
  79. package/dist/capabilities/devCapability.js +24 -0
  80. package/dist/capabilities/devCapability.js.map +1 -0
  81. package/dist/capabilities/editCapability.d.ts +17 -0
  82. package/dist/capabilities/editCapability.d.ts.map +1 -0
  83. package/dist/capabilities/editCapability.js +27 -0
  84. package/dist/capabilities/editCapability.js.map +1 -0
  85. package/dist/capabilities/emailCapability.d.ts +12 -0
  86. package/dist/capabilities/emailCapability.d.ts.map +1 -0
  87. package/dist/capabilities/emailCapability.js +22 -0
  88. package/dist/capabilities/emailCapability.js.map +1 -0
  89. package/dist/capabilities/enhancedCodeIntelligenceCapability.d.ts +17 -0
  90. package/dist/capabilities/enhancedCodeIntelligenceCapability.d.ts.map +1 -0
  91. package/dist/capabilities/enhancedCodeIntelligenceCapability.js +28 -0
  92. package/dist/capabilities/enhancedCodeIntelligenceCapability.js.map +1 -0
  93. package/dist/capabilities/enhancedDevWorkflowCapability.d.ts +17 -0
  94. package/dist/capabilities/enhancedDevWorkflowCapability.d.ts.map +1 -0
  95. package/dist/capabilities/enhancedDevWorkflowCapability.js +28 -0
  96. package/dist/capabilities/enhancedDevWorkflowCapability.js.map +1 -0
  97. package/dist/capabilities/enhancedGitCapability.d.ts +7 -0
  98. package/dist/capabilities/enhancedGitCapability.d.ts.map +1 -0
  99. package/dist/capabilities/enhancedGitCapability.js +220 -0
  100. package/dist/capabilities/enhancedGitCapability.js.map +1 -0
  101. package/dist/capabilities/filesystemCapability.d.ts +13 -0
  102. package/dist/capabilities/filesystemCapability.d.ts.map +1 -0
  103. package/dist/capabilities/filesystemCapability.js +24 -0
  104. package/dist/capabilities/filesystemCapability.js.map +1 -0
  105. package/dist/capabilities/frontendTestingCapability.d.ts +13 -0
  106. package/dist/capabilities/frontendTestingCapability.d.ts.map +1 -0
  107. package/dist/capabilities/frontendTestingCapability.js +28 -0
  108. package/dist/capabilities/frontendTestingCapability.js.map +1 -0
  109. package/dist/capabilities/globCapability.d.ts +17 -0
  110. package/dist/capabilities/globCapability.d.ts.map +1 -0
  111. package/dist/capabilities/globCapability.js +27 -0
  112. package/dist/capabilities/globCapability.js.map +1 -0
  113. package/dist/capabilities/index.d.ts +26 -0
  114. package/dist/capabilities/index.d.ts.map +1 -0
  115. package/dist/capabilities/index.js +26 -0
  116. package/dist/capabilities/index.js.map +1 -0
  117. package/dist/capabilities/interactionCapability.d.ts +12 -0
  118. package/dist/capabilities/interactionCapability.d.ts.map +1 -0
  119. package/dist/capabilities/interactionCapability.js +22 -0
  120. package/dist/capabilities/interactionCapability.js.map +1 -0
  121. package/dist/capabilities/learnCapability.d.ts +22 -0
  122. package/dist/capabilities/learnCapability.d.ts.map +1 -0
  123. package/dist/capabilities/learnCapability.js +37 -0
  124. package/dist/capabilities/learnCapability.js.map +1 -0
  125. package/dist/capabilities/mcpCapability.d.ts +6 -0
  126. package/dist/capabilities/mcpCapability.d.ts.map +1 -0
  127. package/dist/capabilities/mcpCapability.js +19 -0
  128. package/dist/capabilities/mcpCapability.js.map +1 -0
  129. package/dist/capabilities/notebookCapability.d.ts +17 -0
  130. package/dist/capabilities/notebookCapability.d.ts.map +1 -0
  131. package/dist/capabilities/notebookCapability.js +27 -0
  132. package/dist/capabilities/notebookCapability.js.map +1 -0
  133. package/dist/capabilities/performanceMonitoringCapability.d.ts +108 -0
  134. package/dist/capabilities/performanceMonitoringCapability.d.ts.map +1 -0
  135. package/dist/capabilities/performanceMonitoringCapability.js +176 -0
  136. package/dist/capabilities/performanceMonitoringCapability.js.map +1 -0
  137. package/dist/capabilities/planningCapability.d.ts +16 -0
  138. package/dist/capabilities/planningCapability.d.ts.map +1 -0
  139. package/dist/capabilities/planningCapability.js +26 -0
  140. package/dist/capabilities/planningCapability.js.map +1 -0
  141. package/dist/capabilities/refactoringCapability.d.ts +13 -0
  142. package/dist/capabilities/refactoringCapability.d.ts.map +1 -0
  143. package/dist/capabilities/refactoringCapability.js +25 -0
  144. package/dist/capabilities/refactoringCapability.js.map +1 -0
  145. package/dist/capabilities/repoChecksCapability.d.ts +10 -0
  146. package/dist/capabilities/repoChecksCapability.d.ts.map +1 -0
  147. package/dist/capabilities/repoChecksCapability.js +24 -0
  148. package/dist/capabilities/repoChecksCapability.js.map +1 -0
  149. package/dist/capabilities/searchCapability.d.ts +13 -0
  150. package/dist/capabilities/searchCapability.d.ts.map +1 -0
  151. package/dist/capabilities/searchCapability.js +24 -0
  152. package/dist/capabilities/searchCapability.js.map +1 -0
  153. package/dist/capabilities/skillCapability.d.ts +3 -0
  154. package/dist/capabilities/skillCapability.d.ts.map +1 -0
  155. package/dist/capabilities/skillCapability.js +77 -0
  156. package/dist/capabilities/skillCapability.js.map +1 -0
  157. package/dist/capabilities/taskManagementCapability.d.ts +12 -0
  158. package/dist/capabilities/taskManagementCapability.d.ts.map +1 -0
  159. package/dist/capabilities/taskManagementCapability.js +22 -0
  160. package/dist/capabilities/taskManagementCapability.js.map +1 -0
  161. package/dist/capabilities/testingCapability.d.ts +13 -0
  162. package/dist/capabilities/testingCapability.d.ts.map +1 -0
  163. package/dist/capabilities/testingCapability.js +25 -0
  164. package/dist/capabilities/testingCapability.js.map +1 -0
  165. package/dist/capabilities/todoCapability.d.ts +19 -0
  166. package/dist/capabilities/todoCapability.d.ts.map +1 -0
  167. package/dist/capabilities/todoCapability.js +169 -0
  168. package/dist/capabilities/todoCapability.js.map +1 -0
  169. package/dist/capabilities/toolManifest.d.ts +3 -0
  170. package/dist/capabilities/toolManifest.d.ts.map +1 -0
  171. package/dist/capabilities/toolManifest.js +160 -0
  172. package/dist/capabilities/toolManifest.js.map +1 -0
  173. package/dist/capabilities/toolRegistry.d.ts +24 -0
  174. package/dist/capabilities/toolRegistry.d.ts.map +1 -0
  175. package/dist/capabilities/toolRegistry.js +150 -0
  176. package/dist/capabilities/toolRegistry.js.map +1 -0
  177. package/dist/capabilities/validationCapability.d.ts +13 -0
  178. package/dist/capabilities/validationCapability.d.ts.map +1 -0
  179. package/dist/capabilities/validationCapability.js +24 -0
  180. package/dist/capabilities/validationCapability.js.map +1 -0
  181. package/dist/capabilities/webCapability.d.ts +12 -0
  182. package/dist/capabilities/webCapability.d.ts.map +1 -0
  183. package/dist/capabilities/webCapability.js +22 -0
  184. package/dist/capabilities/webCapability.js.map +1 -0
  185. package/dist/config.d.ts +25 -0
  186. package/dist/config.d.ts.map +1 -0
  187. package/dist/config.js +140 -0
  188. package/dist/config.js.map +1 -0
  189. package/dist/contracts/v1/agent.d.ts +147 -0
  190. package/dist/contracts/v1/agent.d.ts.map +1 -0
  191. package/dist/contracts/v1/agent.js +8 -0
  192. package/dist/contracts/v1/agent.js.map +1 -0
  193. package/dist/contracts/v1/agentProfileManifest.d.ts +60 -0
  194. package/dist/contracts/v1/agentProfileManifest.d.ts.map +1 -0
  195. package/dist/contracts/v1/agentProfileManifest.js +9 -0
  196. package/dist/contracts/v1/agentProfileManifest.js.map +1 -0
  197. package/dist/contracts/v1/agentRules.d.ts +60 -0
  198. package/dist/contracts/v1/agentRules.d.ts.map +1 -0
  199. package/dist/contracts/v1/agentRules.js +10 -0
  200. package/dist/contracts/v1/agentRules.js.map +1 -0
  201. package/dist/contracts/v1/provider.d.ts +149 -0
  202. package/dist/contracts/v1/provider.d.ts.map +1 -0
  203. package/dist/contracts/v1/provider.js +7 -0
  204. package/dist/contracts/v1/provider.js.map +1 -0
  205. package/dist/contracts/v1/tool.d.ts +136 -0
  206. package/dist/contracts/v1/tool.d.ts.map +1 -0
  207. package/dist/contracts/v1/tool.js +7 -0
  208. package/dist/contracts/v1/tool.js.map +1 -0
  209. package/dist/contracts/v1/toolAccess.d.ts +43 -0
  210. package/dist/contracts/v1/toolAccess.d.ts.map +1 -0
  211. package/dist/contracts/v1/toolAccess.js +9 -0
  212. package/dist/contracts/v1/toolAccess.js.map +1 -0
  213. package/dist/core/LazyLoader.d.ts +129 -0
  214. package/dist/core/LazyLoader.d.ts.map +1 -0
  215. package/dist/core/LazyLoader.js +240 -0
  216. package/dist/core/LazyLoader.js.map +1 -0
  217. package/dist/core/agent.d.ts +153 -0
  218. package/dist/core/agent.d.ts.map +1 -0
  219. package/dist/core/agent.js +881 -0
  220. package/dist/core/agent.js.map +1 -0
  221. package/dist/core/agentProfileManifest.d.ts +3 -0
  222. package/dist/core/agentProfileManifest.d.ts.map +1 -0
  223. package/dist/core/agentProfileManifest.js +188 -0
  224. package/dist/core/agentProfileManifest.js.map +1 -0
  225. package/dist/core/agentProfiles.d.ts +22 -0
  226. package/dist/core/agentProfiles.d.ts.map +1 -0
  227. package/dist/core/agentProfiles.js +35 -0
  228. package/dist/core/agentProfiles.js.map +1 -0
  229. package/dist/core/agentRulebook.d.ts +11 -0
  230. package/dist/core/agentRulebook.d.ts.map +1 -0
  231. package/dist/core/agentRulebook.js +136 -0
  232. package/dist/core/agentRulebook.js.map +1 -0
  233. package/dist/core/agentSchemaLoader.d.ts +131 -0
  234. package/dist/core/agentSchemaLoader.d.ts.map +1 -0
  235. package/dist/core/agentSchemaLoader.js +234 -0
  236. package/dist/core/agentSchemaLoader.js.map +1 -0
  237. package/dist/core/aiErrorFixer.d.ts +70 -0
  238. package/dist/core/aiErrorFixer.d.ts.map +1 -0
  239. package/dist/core/aiErrorFixer.js +402 -0
  240. package/dist/core/aiErrorFixer.js.map +1 -0
  241. package/dist/core/alphaZeroEngine.d.ts +269 -0
  242. package/dist/core/alphaZeroEngine.d.ts.map +1 -0
  243. package/dist/core/alphaZeroEngine.js +523 -0
  244. package/dist/core/alphaZeroEngine.js.map +1 -0
  245. package/dist/core/alphaZeroModular.d.ts +186 -0
  246. package/dist/core/alphaZeroModular.d.ts.map +1 -0
  247. package/dist/core/alphaZeroModular.js +755 -0
  248. package/dist/core/alphaZeroModular.js.map +1 -0
  249. package/dist/core/alphaZeroOrchestrator.d.ts +140 -0
  250. package/dist/core/alphaZeroOrchestrator.d.ts.map +1 -0
  251. package/dist/core/alphaZeroOrchestrator.js +418 -0
  252. package/dist/core/alphaZeroOrchestrator.js.map +1 -0
  253. package/dist/core/checkpoint.d.ts +76 -0
  254. package/dist/core/checkpoint.d.ts.map +1 -0
  255. package/dist/core/checkpoint.js +278 -0
  256. package/dist/core/checkpoint.js.map +1 -0
  257. package/dist/core/cliTestHarness.d.ts +200 -0
  258. package/dist/core/cliTestHarness.d.ts.map +1 -0
  259. package/dist/core/cliTestHarness.js +549 -0
  260. package/dist/core/cliTestHarness.js.map +1 -0
  261. package/dist/core/contextManager.d.ts +265 -0
  262. package/dist/core/contextManager.d.ts.map +1 -0
  263. package/dist/core/contextManager.js +1060 -0
  264. package/dist/core/contextManager.js.map +1 -0
  265. package/dist/core/contextWindow.d.ts +42 -0
  266. package/dist/core/contextWindow.d.ts.map +1 -0
  267. package/dist/core/contextWindow.js +123 -0
  268. package/dist/core/contextWindow.js.map +1 -0
  269. package/dist/core/costTracker.d.ts +87 -0
  270. package/dist/core/costTracker.d.ts.map +1 -0
  271. package/dist/core/costTracker.js +285 -0
  272. package/dist/core/costTracker.js.map +1 -0
  273. package/dist/core/customCommands.d.ts +19 -0
  274. package/dist/core/customCommands.d.ts.map +1 -0
  275. package/dist/core/customCommands.js +84 -0
  276. package/dist/core/customCommands.js.map +1 -0
  277. package/dist/core/errors/apiKeyErrors.d.ts +11 -0
  278. package/dist/core/errors/apiKeyErrors.d.ts.map +1 -0
  279. package/dist/core/errors/apiKeyErrors.js +159 -0
  280. package/dist/core/errors/apiKeyErrors.js.map +1 -0
  281. package/dist/core/errors/errorTypes.d.ts +111 -0
  282. package/dist/core/errors/errorTypes.d.ts.map +1 -0
  283. package/dist/core/errors/errorTypes.js +348 -0
  284. package/dist/core/errors/errorTypes.js.map +1 -0
  285. package/dist/core/errors/errorUtils.d.ts +87 -0
  286. package/dist/core/errors/errorUtils.d.ts.map +1 -0
  287. package/dist/core/errors/errorUtils.js +158 -0
  288. package/dist/core/errors/errorUtils.js.map +1 -0
  289. package/dist/core/errors/safetyValidator.d.ts +71 -0
  290. package/dist/core/errors/safetyValidator.d.ts.map +1 -0
  291. package/dist/core/errors/safetyValidator.js +302 -0
  292. package/dist/core/errors/safetyValidator.js.map +1 -0
  293. package/dist/core/errors.d.ts +4 -0
  294. package/dist/core/errors.d.ts.map +1 -0
  295. package/dist/core/errors.js +33 -0
  296. package/dist/core/errors.js.map +1 -0
  297. package/dist/core/failureRecovery.d.ts +122 -0
  298. package/dist/core/failureRecovery.d.ts.map +1 -0
  299. package/dist/core/failureRecovery.js +477 -0
  300. package/dist/core/failureRecovery.js.map +1 -0
  301. package/dist/core/hooks.d.ts +113 -0
  302. package/dist/core/hooks.d.ts.map +1 -0
  303. package/dist/core/hooks.js +267 -0
  304. package/dist/core/hooks.js.map +1 -0
  305. package/dist/core/intelligentTestFlows.d.ts +126 -0
  306. package/dist/core/intelligentTestFlows.d.ts.map +1 -0
  307. package/dist/core/intelligentTestFlows.js +678 -0
  308. package/dist/core/intelligentTestFlows.js.map +1 -0
  309. package/dist/core/isolatedVerifier.d.ts +40 -0
  310. package/dist/core/isolatedVerifier.d.ts.map +1 -0
  311. package/dist/core/isolatedVerifier.js +129 -0
  312. package/dist/core/isolatedVerifier.js.map +1 -0
  313. package/dist/core/learningPersistence.d.ts +145 -0
  314. package/dist/core/learningPersistence.d.ts.map +1 -0
  315. package/dist/core/learningPersistence.js +477 -0
  316. package/dist/core/learningPersistence.js.map +1 -0
  317. package/dist/core/memorySystem.d.ts +67 -0
  318. package/dist/core/memorySystem.d.ts.map +1 -0
  319. package/dist/core/memorySystem.js +334 -0
  320. package/dist/core/memorySystem.js.map +1 -0
  321. package/dist/core/metricsTracker.d.ts +157 -0
  322. package/dist/core/metricsTracker.d.ts.map +1 -0
  323. package/dist/core/metricsTracker.js +273 -0
  324. package/dist/core/metricsTracker.js.map +1 -0
  325. package/dist/core/modelDiscovery.d.ts +101 -0
  326. package/dist/core/modelDiscovery.d.ts.map +1 -0
  327. package/dist/core/modelDiscovery.js +780 -0
  328. package/dist/core/modelDiscovery.js.map +1 -0
  329. package/dist/core/multilinePasteHandler.d.ts +35 -0
  330. package/dist/core/multilinePasteHandler.d.ts.map +1 -0
  331. package/dist/core/multilinePasteHandler.js +80 -0
  332. package/dist/core/multilinePasteHandler.js.map +1 -0
  333. package/dist/core/offsecAlphaZero.d.ts +56 -0
  334. package/dist/core/offsecAlphaZero.d.ts.map +1 -0
  335. package/dist/core/offsecAlphaZero.js +395 -0
  336. package/dist/core/offsecAlphaZero.js.map +1 -0
  337. package/dist/core/outputStyles.d.ts +48 -0
  338. package/dist/core/outputStyles.d.ts.map +1 -0
  339. package/dist/core/outputStyles.js +270 -0
  340. package/dist/core/outputStyles.js.map +1 -0
  341. package/dist/core/performanceMonitor.d.ts +124 -0
  342. package/dist/core/performanceMonitor.d.ts.map +1 -0
  343. package/dist/core/performanceMonitor.js +192 -0
  344. package/dist/core/performanceMonitor.js.map +1 -0
  345. package/dist/core/preferences.d.ts +67 -0
  346. package/dist/core/preferences.d.ts.map +1 -0
  347. package/dist/core/preferences.js +314 -0
  348. package/dist/core/preferences.js.map +1 -0
  349. package/dist/core/responseVerifier.d.ts +98 -0
  350. package/dist/core/responseVerifier.d.ts.map +1 -0
  351. package/dist/core/responseVerifier.js +509 -0
  352. package/dist/core/responseVerifier.js.map +1 -0
  353. package/dist/core/resultVerification.d.ts +141 -0
  354. package/dist/core/resultVerification.d.ts.map +1 -0
  355. package/dist/core/resultVerification.js +482 -0
  356. package/dist/core/resultVerification.js.map +1 -0
  357. package/dist/core/schemaValidator.d.ts +44 -0
  358. package/dist/core/schemaValidator.d.ts.map +1 -0
  359. package/dist/core/schemaValidator.js +155 -0
  360. package/dist/core/schemaValidator.js.map +1 -0
  361. package/dist/core/secretStore.d.ts +48 -0
  362. package/dist/core/secretStore.d.ts.map +1 -0
  363. package/dist/core/secretStore.js +367 -0
  364. package/dist/core/secretStore.js.map +1 -0
  365. package/dist/core/securityAssessment.d.ts +91 -0
  366. package/dist/core/securityAssessment.d.ts.map +1 -0
  367. package/dist/core/securityAssessment.js +580 -0
  368. package/dist/core/securityAssessment.js.map +1 -0
  369. package/dist/core/selfEvolution.d.ts +155 -0
  370. package/dist/core/selfEvolution.d.ts.map +1 -0
  371. package/dist/core/selfEvolution.js +1000 -0
  372. package/dist/core/selfEvolution.js.map +1 -0
  373. package/dist/core/selfImprovement.d.ts +141 -0
  374. package/dist/core/selfImprovement.d.ts.map +1 -0
  375. package/dist/core/selfImprovement.js +700 -0
  376. package/dist/core/selfImprovement.js.map +1 -0
  377. package/dist/core/sessionStore.d.ts +35 -0
  378. package/dist/core/sessionStore.d.ts.map +1 -0
  379. package/dist/core/sessionStore.js +189 -0
  380. package/dist/core/sessionStore.js.map +1 -0
  381. package/dist/core/testUtils.d.ts +121 -0
  382. package/dist/core/testUtils.d.ts.map +1 -0
  383. package/dist/core/testUtils.js +235 -0
  384. package/dist/core/testUtils.js.map +1 -0
  385. package/dist/core/types/utilityTypes.d.ts +192 -0
  386. package/dist/core/types/utilityTypes.d.ts.map +1 -0
  387. package/dist/core/types/utilityTypes.js +272 -0
  388. package/dist/core/types/utilityTypes.js.map +1 -0
  389. package/dist/core/types.d.ts +306 -0
  390. package/dist/core/types.d.ts.map +1 -0
  391. package/dist/core/types.js +76 -0
  392. package/dist/core/types.js.map +1 -0
  393. package/dist/core/validationRunner.d.ts +106 -0
  394. package/dist/core/validationRunner.d.ts.map +1 -0
  395. package/dist/core/validationRunner.js +888 -0
  396. package/dist/core/validationRunner.js.map +1 -0
  397. package/dist/core/verification.d.ts +137 -0
  398. package/dist/core/verification.d.ts.map +1 -0
  399. package/dist/core/verification.js +323 -0
  400. package/dist/core/verification.js.map +1 -0
  401. package/dist/headless/headlessApp.d.ts +5 -0
  402. package/dist/headless/headlessApp.d.ts.map +1 -0
  403. package/dist/headless/headlessApp.js +210 -0
  404. package/dist/headless/headlessApp.js.map +1 -0
  405. package/dist/intelligence/codeIntelligence.d.ts +118 -0
  406. package/dist/intelligence/codeIntelligence.d.ts.map +1 -0
  407. package/dist/intelligence/codeIntelligence.js +552 -0
  408. package/dist/intelligence/codeIntelligence.js.map +1 -0
  409. package/dist/intelligence/docGenerator.d.ts +86 -0
  410. package/dist/intelligence/docGenerator.d.ts.map +1 -0
  411. package/dist/intelligence/docGenerator.js +564 -0
  412. package/dist/intelligence/docGenerator.js.map +1 -0
  413. package/dist/intelligence/index.d.ts +51 -0
  414. package/dist/intelligence/index.d.ts.map +1 -0
  415. package/dist/intelligence/index.js +253 -0
  416. package/dist/intelligence/index.js.map +1 -0
  417. package/dist/intelligence/refactoring.d.ts +50 -0
  418. package/dist/intelligence/refactoring.d.ts.map +1 -0
  419. package/dist/intelligence/refactoring.js +354 -0
  420. package/dist/intelligence/refactoring.js.map +1 -0
  421. package/dist/intelligence/testGenerator.d.ts +74 -0
  422. package/dist/intelligence/testGenerator.d.ts.map +1 -0
  423. package/dist/intelligence/testGenerator.js +483 -0
  424. package/dist/intelligence/testGenerator.js.map +1 -0
  425. package/dist/mcp/config.d.ts +8 -0
  426. package/dist/mcp/config.d.ts.map +1 -0
  427. package/dist/mcp/config.js +252 -0
  428. package/dist/mcp/config.js.map +1 -0
  429. package/dist/mcp/sseClient.d.ts +34 -0
  430. package/dist/mcp/sseClient.d.ts.map +1 -0
  431. package/dist/mcp/sseClient.js +327 -0
  432. package/dist/mcp/sseClient.js.map +1 -0
  433. package/dist/mcp/stdioClient.d.ts +24 -0
  434. package/dist/mcp/stdioClient.d.ts.map +1 -0
  435. package/dist/mcp/stdioClient.js +179 -0
  436. package/dist/mcp/stdioClient.js.map +1 -0
  437. package/dist/mcp/toolBridge.d.ts +12 -0
  438. package/dist/mcp/toolBridge.d.ts.map +1 -0
  439. package/dist/mcp/toolBridge.js +117 -0
  440. package/dist/mcp/toolBridge.js.map +1 -0
  441. package/dist/mcp/types.d.ts +60 -0
  442. package/dist/mcp/types.d.ts.map +1 -0
  443. package/dist/mcp/types.js +2 -0
  444. package/dist/mcp/types.js.map +1 -0
  445. package/dist/plugins/index.d.ts +49 -0
  446. package/dist/plugins/index.d.ts.map +1 -0
  447. package/dist/plugins/index.js +114 -0
  448. package/dist/plugins/index.js.map +1 -0
  449. package/dist/plugins/providers/anthropic/index.d.ts +11 -0
  450. package/dist/plugins/providers/anthropic/index.d.ts.map +1 -0
  451. package/dist/plugins/providers/anthropic/index.js +38 -0
  452. package/dist/plugins/providers/anthropic/index.js.map +1 -0
  453. package/dist/plugins/providers/deepseek/index.d.ts +11 -0
  454. package/dist/plugins/providers/deepseek/index.d.ts.map +1 -0
  455. package/dist/plugins/providers/deepseek/index.js +52 -0
  456. package/dist/plugins/providers/deepseek/index.js.map +1 -0
  457. package/dist/plugins/providers/google/index.d.ts +11 -0
  458. package/dist/plugins/providers/google/index.d.ts.map +1 -0
  459. package/dist/plugins/providers/google/index.js +40 -0
  460. package/dist/plugins/providers/google/index.js.map +1 -0
  461. package/dist/plugins/providers/index.d.ts +2 -0
  462. package/dist/plugins/providers/index.d.ts.map +1 -0
  463. package/dist/plugins/providers/index.js +20 -0
  464. package/dist/plugins/providers/index.js.map +1 -0
  465. package/dist/plugins/providers/ollama/index.d.ts +21 -0
  466. package/dist/plugins/providers/ollama/index.d.ts.map +1 -0
  467. package/dist/plugins/providers/ollama/index.js +69 -0
  468. package/dist/plugins/providers/ollama/index.js.map +1 -0
  469. package/dist/plugins/providers/openai/index.d.ts +12 -0
  470. package/dist/plugins/providers/openai/index.d.ts.map +1 -0
  471. package/dist/plugins/providers/openai/index.js +39 -0
  472. package/dist/plugins/providers/openai/index.js.map +1 -0
  473. package/dist/plugins/providers/xai/index.d.ts +11 -0
  474. package/dist/plugins/providers/xai/index.d.ts.map +1 -0
  475. package/dist/plugins/providers/xai/index.js +39 -0
  476. package/dist/plugins/providers/xai/index.js.map +1 -0
  477. package/dist/plugins/tools/agentSpawning/agentSpawningPlugin.d.ts +3 -0
  478. package/dist/plugins/tools/agentSpawning/agentSpawningPlugin.d.ts.map +1 -0
  479. package/dist/plugins/tools/agentSpawning/agentSpawningPlugin.js +9 -0
  480. package/dist/plugins/tools/agentSpawning/agentSpawningPlugin.js.map +1 -0
  481. package/dist/plugins/tools/bash/localBashPlugin.d.ts +3 -0
  482. package/dist/plugins/tools/bash/localBashPlugin.d.ts.map +1 -0
  483. package/dist/plugins/tools/bash/localBashPlugin.js +14 -0
  484. package/dist/plugins/tools/bash/localBashPlugin.js.map +1 -0
  485. package/dist/plugins/tools/browser/browserAutomationPlugin.d.ts +14 -0
  486. package/dist/plugins/tools/browser/browserAutomationPlugin.d.ts.map +1 -0
  487. package/dist/plugins/tools/browser/browserAutomationPlugin.js +26 -0
  488. package/dist/plugins/tools/browser/browserAutomationPlugin.js.map +1 -0
  489. package/dist/plugins/tools/checks/localRepoChecksPlugin.d.ts +3 -0
  490. package/dist/plugins/tools/checks/localRepoChecksPlugin.d.ts.map +1 -0
  491. package/dist/plugins/tools/checks/localRepoChecksPlugin.js +14 -0
  492. package/dist/plugins/tools/checks/localRepoChecksPlugin.js.map +1 -0
  493. package/dist/plugins/tools/cloud/cloudPlugin.d.ts +3 -0
  494. package/dist/plugins/tools/cloud/cloudPlugin.d.ts.map +1 -0
  495. package/dist/plugins/tools/cloud/cloudPlugin.js +14 -0
  496. package/dist/plugins/tools/cloud/cloudPlugin.js.map +1 -0
  497. package/dist/plugins/tools/codeAnalysis/codeAnalysisPlugin.d.ts +3 -0
  498. package/dist/plugins/tools/codeAnalysis/codeAnalysisPlugin.d.ts.map +1 -0
  499. package/dist/plugins/tools/codeAnalysis/codeAnalysisPlugin.js +14 -0
  500. package/dist/plugins/tools/codeAnalysis/codeAnalysisPlugin.js.map +1 -0
  501. package/dist/plugins/tools/codeQuality/codeQualityPlugin.d.ts +3 -0
  502. package/dist/plugins/tools/codeQuality/codeQualityPlugin.d.ts.map +1 -0
  503. package/dist/plugins/tools/codeQuality/codeQualityPlugin.js +14 -0
  504. package/dist/plugins/tools/codeQuality/codeQualityPlugin.js.map +1 -0
  505. package/dist/plugins/tools/dependency/dependencyPlugin.d.ts +3 -0
  506. package/dist/plugins/tools/dependency/dependencyPlugin.d.ts.map +1 -0
  507. package/dist/plugins/tools/dependency/dependencyPlugin.js +12 -0
  508. package/dist/plugins/tools/dependency/dependencyPlugin.js.map +1 -0
  509. package/dist/plugins/tools/development/devPlugin.d.ts +3 -0
  510. package/dist/plugins/tools/development/devPlugin.d.ts.map +1 -0
  511. package/dist/plugins/tools/development/devPlugin.js +14 -0
  512. package/dist/plugins/tools/development/devPlugin.js.map +1 -0
  513. package/dist/plugins/tools/edit/editPlugin.d.ts +9 -0
  514. package/dist/plugins/tools/edit/editPlugin.d.ts.map +1 -0
  515. package/dist/plugins/tools/edit/editPlugin.js +15 -0
  516. package/dist/plugins/tools/edit/editPlugin.js.map +1 -0
  517. package/dist/plugins/tools/email/emailPlugin.d.ts +3 -0
  518. package/dist/plugins/tools/email/emailPlugin.d.ts.map +1 -0
  519. package/dist/plugins/tools/email/emailPlugin.js +12 -0
  520. package/dist/plugins/tools/email/emailPlugin.js.map +1 -0
  521. package/dist/plugins/tools/enhancedGit/enhancedGitPlugin.d.ts +3 -0
  522. package/dist/plugins/tools/enhancedGit/enhancedGitPlugin.d.ts.map +1 -0
  523. package/dist/plugins/tools/enhancedGit/enhancedGitPlugin.js +9 -0
  524. package/dist/plugins/tools/enhancedGit/enhancedGitPlugin.js.map +1 -0
  525. package/dist/plugins/tools/filesystem/localFilesystemPlugin.d.ts +3 -0
  526. package/dist/plugins/tools/filesystem/localFilesystemPlugin.d.ts.map +1 -0
  527. package/dist/plugins/tools/filesystem/localFilesystemPlugin.js +14 -0
  528. package/dist/plugins/tools/filesystem/localFilesystemPlugin.js.map +1 -0
  529. package/dist/plugins/tools/frontendTesting/frontendTestingPlugin.d.ts +3 -0
  530. package/dist/plugins/tools/frontendTesting/frontendTestingPlugin.d.ts.map +1 -0
  531. package/dist/plugins/tools/frontendTesting/frontendTestingPlugin.js +14 -0
  532. package/dist/plugins/tools/frontendTesting/frontendTestingPlugin.js.map +1 -0
  533. package/dist/plugins/tools/glob/globPlugin.d.ts +9 -0
  534. package/dist/plugins/tools/glob/globPlugin.d.ts.map +1 -0
  535. package/dist/plugins/tools/glob/globPlugin.js +15 -0
  536. package/dist/plugins/tools/glob/globPlugin.js.map +1 -0
  537. package/dist/plugins/tools/index.d.ts +3 -0
  538. package/dist/plugins/tools/index.d.ts.map +1 -0
  539. package/dist/plugins/tools/index.js +3 -0
  540. package/dist/plugins/tools/index.js.map +1 -0
  541. package/dist/plugins/tools/interaction/interactionPlugin.d.ts +3 -0
  542. package/dist/plugins/tools/interaction/interactionPlugin.d.ts.map +1 -0
  543. package/dist/plugins/tools/interaction/interactionPlugin.js +12 -0
  544. package/dist/plugins/tools/interaction/interactionPlugin.js.map +1 -0
  545. package/dist/plugins/tools/learn/learnPlugin.d.ts +3 -0
  546. package/dist/plugins/tools/learn/learnPlugin.d.ts.map +1 -0
  547. package/dist/plugins/tools/learn/learnPlugin.js +14 -0
  548. package/dist/plugins/tools/learn/learnPlugin.js.map +1 -0
  549. package/dist/plugins/tools/mcp/mcpPlugin.d.ts +3 -0
  550. package/dist/plugins/tools/mcp/mcpPlugin.d.ts.map +1 -0
  551. package/dist/plugins/tools/mcp/mcpPlugin.js +9 -0
  552. package/dist/plugins/tools/mcp/mcpPlugin.js.map +1 -0
  553. package/dist/plugins/tools/nodeDefaults.d.ts +2 -0
  554. package/dist/plugins/tools/nodeDefaults.d.ts.map +1 -0
  555. package/dist/plugins/tools/nodeDefaults.js +65 -0
  556. package/dist/plugins/tools/nodeDefaults.js.map +1 -0
  557. package/dist/plugins/tools/notebook/notebookPlugin.d.ts +9 -0
  558. package/dist/plugins/tools/notebook/notebookPlugin.d.ts.map +1 -0
  559. package/dist/plugins/tools/notebook/notebookPlugin.js +15 -0
  560. package/dist/plugins/tools/notebook/notebookPlugin.js.map +1 -0
  561. package/dist/plugins/tools/planning/planningPlugin.d.ts +9 -0
  562. package/dist/plugins/tools/planning/planningPlugin.d.ts.map +1 -0
  563. package/dist/plugins/tools/planning/planningPlugin.js +15 -0
  564. package/dist/plugins/tools/planning/planningPlugin.js.map +1 -0
  565. package/dist/plugins/tools/refactoring/refactoringPlugin.d.ts +3 -0
  566. package/dist/plugins/tools/refactoring/refactoringPlugin.d.ts.map +1 -0
  567. package/dist/plugins/tools/refactoring/refactoringPlugin.js +12 -0
  568. package/dist/plugins/tools/refactoring/refactoringPlugin.js.map +1 -0
  569. package/dist/plugins/tools/registry.d.ts +22 -0
  570. package/dist/plugins/tools/registry.d.ts.map +1 -0
  571. package/dist/plugins/tools/registry.js +58 -0
  572. package/dist/plugins/tools/registry.js.map +1 -0
  573. package/dist/plugins/tools/search/localSearchPlugin.d.ts +3 -0
  574. package/dist/plugins/tools/search/localSearchPlugin.d.ts.map +1 -0
  575. package/dist/plugins/tools/search/localSearchPlugin.js +14 -0
  576. package/dist/plugins/tools/search/localSearchPlugin.js.map +1 -0
  577. package/dist/plugins/tools/skills/skillPlugin.d.ts +3 -0
  578. package/dist/plugins/tools/skills/skillPlugin.d.ts.map +1 -0
  579. package/dist/plugins/tools/skills/skillPlugin.js +9 -0
  580. package/dist/plugins/tools/skills/skillPlugin.js.map +1 -0
  581. package/dist/plugins/tools/taskManagement/taskManagementPlugin.d.ts +3 -0
  582. package/dist/plugins/tools/taskManagement/taskManagementPlugin.d.ts.map +1 -0
  583. package/dist/plugins/tools/taskManagement/taskManagementPlugin.js +12 -0
  584. package/dist/plugins/tools/taskManagement/taskManagementPlugin.js.map +1 -0
  585. package/dist/plugins/tools/testing/testingPlugin.d.ts +3 -0
  586. package/dist/plugins/tools/testing/testingPlugin.d.ts.map +1 -0
  587. package/dist/plugins/tools/testing/testingPlugin.js +12 -0
  588. package/dist/plugins/tools/testing/testingPlugin.js.map +1 -0
  589. package/dist/plugins/tools/validation/validationPlugin.d.ts +3 -0
  590. package/dist/plugins/tools/validation/validationPlugin.d.ts.map +1 -0
  591. package/dist/plugins/tools/validation/validationPlugin.js +14 -0
  592. package/dist/plugins/tools/validation/validationPlugin.js.map +1 -0
  593. package/dist/plugins/tools/web/webPlugin.d.ts +3 -0
  594. package/dist/plugins/tools/web/webPlugin.d.ts.map +1 -0
  595. package/dist/plugins/tools/web/webPlugin.js +12 -0
  596. package/dist/plugins/tools/web/webPlugin.js.map +1 -0
  597. package/dist/providers/anthropicProvider.d.ts +41 -0
  598. package/dist/providers/anthropicProvider.d.ts.map +1 -0
  599. package/dist/providers/anthropicProvider.js +446 -0
  600. package/dist/providers/anthropicProvider.js.map +1 -0
  601. package/dist/providers/googleProvider.d.ts +36 -0
  602. package/dist/providers/googleProvider.d.ts.map +1 -0
  603. package/dist/providers/googleProvider.js +312 -0
  604. package/dist/providers/googleProvider.js.map +1 -0
  605. package/dist/providers/openaiChatCompletionsProvider.d.ts +43 -0
  606. package/dist/providers/openaiChatCompletionsProvider.d.ts.map +1 -0
  607. package/dist/providers/openaiChatCompletionsProvider.js +475 -0
  608. package/dist/providers/openaiChatCompletionsProvider.js.map +1 -0
  609. package/dist/providers/openaiResponsesProvider.d.ts +38 -0
  610. package/dist/providers/openaiResponsesProvider.d.ts.map +1 -0
  611. package/dist/providers/openaiResponsesProvider.js +364 -0
  612. package/dist/providers/openaiResponsesProvider.js.map +1 -0
  613. package/dist/providers/providerFactory.d.ts +18 -0
  614. package/dist/providers/providerFactory.d.ts.map +1 -0
  615. package/dist/providers/providerFactory.js +25 -0
  616. package/dist/providers/providerFactory.js.map +1 -0
  617. package/dist/providers/resilientProvider.d.ts +94 -0
  618. package/dist/providers/resilientProvider.d.ts.map +1 -0
  619. package/dist/providers/resilientProvider.js +370 -0
  620. package/dist/providers/resilientProvider.js.map +1 -0
  621. package/dist/runtime/agentController.d.ts +65 -0
  622. package/dist/runtime/agentController.d.ts.map +1 -0
  623. package/dist/runtime/agentController.js +353 -0
  624. package/dist/runtime/agentController.js.map +1 -0
  625. package/dist/runtime/agentHost.d.ts +61 -0
  626. package/dist/runtime/agentHost.d.ts.map +1 -0
  627. package/dist/runtime/agentHost.js +156 -0
  628. package/dist/runtime/agentHost.js.map +1 -0
  629. package/dist/runtime/agentSession.d.ts +40 -0
  630. package/dist/runtime/agentSession.d.ts.map +1 -0
  631. package/dist/runtime/agentSession.js +205 -0
  632. package/dist/runtime/agentSession.js.map +1 -0
  633. package/dist/runtime/browser.d.ts +7 -0
  634. package/dist/runtime/browser.d.ts.map +1 -0
  635. package/dist/runtime/browser.js +10 -0
  636. package/dist/runtime/browser.js.map +1 -0
  637. package/dist/runtime/cloud.d.ts +7 -0
  638. package/dist/runtime/cloud.d.ts.map +1 -0
  639. package/dist/runtime/cloud.js +10 -0
  640. package/dist/runtime/cloud.js.map +1 -0
  641. package/dist/runtime/node.d.ts +8 -0
  642. package/dist/runtime/node.d.ts.map +1 -0
  643. package/dist/runtime/node.js +11 -0
  644. package/dist/runtime/node.js.map +1 -0
  645. package/dist/runtime/universal.d.ts +21 -0
  646. package/dist/runtime/universal.d.ts.map +1 -0
  647. package/dist/runtime/universal.js +29 -0
  648. package/dist/runtime/universal.js.map +1 -0
  649. package/dist/shell/autoExecutor.d.ts +70 -0
  650. package/dist/shell/autoExecutor.d.ts.map +1 -0
  651. package/dist/shell/autoExecutor.js +288 -0
  652. package/dist/shell/autoExecutor.js.map +1 -0
  653. package/dist/shell/composableMessage.d.ts +183 -0
  654. package/dist/shell/composableMessage.d.ts.map +1 -0
  655. package/dist/shell/composableMessage.js +420 -0
  656. package/dist/shell/composableMessage.js.map +1 -0
  657. package/dist/shell/fileChangeTracker.d.ts +39 -0
  658. package/dist/shell/fileChangeTracker.d.ts.map +1 -0
  659. package/dist/shell/fileChangeTracker.js +64 -0
  660. package/dist/shell/fileChangeTracker.js.map +1 -0
  661. package/dist/shell/interactiveShell.d.ts.map +1 -1
  662. package/dist/shell/interactiveShell.js +15 -4
  663. package/dist/shell/interactiveShell.js.map +1 -1
  664. package/dist/shell/liveStatus.d.ts +30 -0
  665. package/dist/shell/liveStatus.d.ts.map +1 -0
  666. package/dist/shell/liveStatus.js +102 -0
  667. package/dist/shell/liveStatus.js.map +1 -0
  668. package/dist/shell/shellApp.d.ts +19 -0
  669. package/dist/shell/shellApp.d.ts.map +1 -0
  670. package/dist/shell/shellApp.js +408 -0
  671. package/dist/shell/shellApp.js.map +1 -0
  672. package/dist/shell/taskCompletionDetector.d.ts +106 -0
  673. package/dist/shell/taskCompletionDetector.d.ts.map +1 -0
  674. package/dist/shell/taskCompletionDetector.js +402 -0
  675. package/dist/shell/taskCompletionDetector.js.map +1 -0
  676. package/dist/shell/terminalInput.d.ts +620 -0
  677. package/dist/shell/terminalInput.d.ts.map +1 -0
  678. package/dist/shell/terminalInput.js +2647 -0
  679. package/dist/shell/terminalInput.js.map +1 -0
  680. package/dist/shell/terminalInputAdapter.d.ts +266 -0
  681. package/dist/shell/terminalInputAdapter.d.ts.map +1 -0
  682. package/dist/shell/terminalInputAdapter.js +406 -0
  683. package/dist/shell/terminalInputAdapter.js.map +1 -0
  684. package/dist/shell/vimMode.d.ts +66 -0
  685. package/dist/shell/vimMode.d.ts.map +1 -0
  686. package/dist/shell/vimMode.js +434 -0
  687. package/dist/shell/vimMode.js.map +1 -0
  688. package/dist/skills/skillRepository.d.ts +103 -0
  689. package/dist/skills/skillRepository.d.ts.map +1 -0
  690. package/dist/skills/skillRepository.js +237 -0
  691. package/dist/skills/skillRepository.js.map +1 -0
  692. package/dist/skills/types.d.ts +37 -0
  693. package/dist/skills/types.d.ts.map +1 -0
  694. package/dist/skills/types.js +2 -0
  695. package/dist/skills/types.js.map +1 -0
  696. package/dist/subagents/agentConfig.d.ts +27 -0
  697. package/dist/subagents/agentConfig.d.ts.map +1 -0
  698. package/dist/subagents/agentConfig.js +89 -0
  699. package/dist/subagents/agentConfig.js.map +1 -0
  700. package/dist/subagents/agentRegistry.d.ts +33 -0
  701. package/dist/subagents/agentRegistry.d.ts.map +1 -0
  702. package/dist/subagents/agentRegistry.js +162 -0
  703. package/dist/subagents/agentRegistry.js.map +1 -0
  704. package/dist/subagents/parallelAgentManager.d.ts +99 -0
  705. package/dist/subagents/parallelAgentManager.d.ts.map +1 -0
  706. package/dist/subagents/parallelAgentManager.js +248 -0
  707. package/dist/subagents/parallelAgentManager.js.map +1 -0
  708. package/dist/subagents/taskRunner.d.ts +34 -0
  709. package/dist/subagents/taskRunner.d.ts.map +1 -0
  710. package/dist/subagents/taskRunner.js +459 -0
  711. package/dist/subagents/taskRunner.js.map +1 -0
  712. package/dist/tools/advancedTestGenerationTools.d.ts +21 -0
  713. package/dist/tools/advancedTestGenerationTools.d.ts.map +1 -0
  714. package/dist/tools/advancedTestGenerationTools.js +301 -0
  715. package/dist/tools/advancedTestGenerationTools.js.map +1 -0
  716. package/dist/tools/backgroundBashTools.d.ts +21 -0
  717. package/dist/tools/backgroundBashTools.d.ts.map +1 -0
  718. package/dist/tools/backgroundBashTools.js +215 -0
  719. package/dist/tools/backgroundBashTools.js.map +1 -0
  720. package/dist/tools/browserAutomationTools.d.ts +23 -0
  721. package/dist/tools/browserAutomationTools.d.ts.map +1 -0
  722. package/dist/tools/browserAutomationTools.js +916 -0
  723. package/dist/tools/browserAutomationTools.js.map +1 -0
  724. package/dist/tools/buildTools.d.ts +9 -0
  725. package/dist/tools/buildTools.d.ts.map +1 -0
  726. package/dist/tools/buildTools.js +344 -0
  727. package/dist/tools/buildTools.js.map +1 -0
  728. package/dist/tools/cloudTools.d.ts +49 -0
  729. package/dist/tools/cloudTools.d.ts.map +1 -0
  730. package/dist/tools/cloudTools.js +1258 -0
  731. package/dist/tools/cloudTools.js.map +1 -0
  732. package/dist/tools/code-quality-dashboard.d.ts +57 -0
  733. package/dist/tools/code-quality-dashboard.d.ts.map +1 -0
  734. package/dist/tools/code-quality-dashboard.js +218 -0
  735. package/dist/tools/code-quality-dashboard.js.map +1 -0
  736. package/dist/tools/codeAnalysisTools.d.ts +74 -0
  737. package/dist/tools/codeAnalysisTools.d.ts.map +1 -0
  738. package/dist/tools/codeAnalysisTools.js +664 -0
  739. package/dist/tools/codeAnalysisTools.js.map +1 -0
  740. package/dist/tools/codeGenerationTools.d.ts +3 -0
  741. package/dist/tools/codeGenerationTools.d.ts.map +1 -0
  742. package/dist/tools/codeGenerationTools.js +439 -0
  743. package/dist/tools/codeGenerationTools.js.map +1 -0
  744. package/dist/tools/codeQualityTools.d.ts +3 -0
  745. package/dist/tools/codeQualityTools.d.ts.map +1 -0
  746. package/dist/tools/codeQualityTools.js +296 -0
  747. package/dist/tools/codeQualityTools.js.map +1 -0
  748. package/dist/tools/dependencyTools.d.ts +3 -0
  749. package/dist/tools/dependencyTools.d.ts.map +1 -0
  750. package/dist/tools/dependencyTools.js +283 -0
  751. package/dist/tools/dependencyTools.js.map +1 -0
  752. package/dist/tools/devTools.d.ts +10 -0
  753. package/dist/tools/devTools.d.ts.map +1 -0
  754. package/dist/tools/devTools.js +2125 -0
  755. package/dist/tools/devTools.js.map +1 -0
  756. package/dist/tools/diffUtils.d.ts +36 -0
  757. package/dist/tools/diffUtils.d.ts.map +1 -0
  758. package/dist/tools/diffUtils.js +528 -0
  759. package/dist/tools/diffUtils.js.map +1 -0
  760. package/dist/tools/editTools.d.ts +29 -0
  761. package/dist/tools/editTools.d.ts.map +1 -0
  762. package/dist/tools/editTools.js +419 -0
  763. package/dist/tools/editTools.js.map +1 -0
  764. package/dist/tools/emailTools.d.ts +21 -0
  765. package/dist/tools/emailTools.d.ts.map +1 -0
  766. package/dist/tools/emailTools.js +449 -0
  767. package/dist/tools/emailTools.js.map +1 -0
  768. package/dist/tools/enhancedCodeIntelligenceTools.d.ts +27 -0
  769. package/dist/tools/enhancedCodeIntelligenceTools.d.ts.map +1 -0
  770. package/dist/tools/enhancedCodeIntelligenceTools.js +418 -0
  771. package/dist/tools/enhancedCodeIntelligenceTools.js.map +1 -0
  772. package/dist/tools/enhancedDevWorkflowTools.d.ts +15 -0
  773. package/dist/tools/enhancedDevWorkflowTools.d.ts.map +1 -0
  774. package/dist/tools/enhancedDevWorkflowTools.js +303 -0
  775. package/dist/tools/enhancedDevWorkflowTools.js.map +1 -0
  776. package/dist/tools/fileTools.d.ts +3 -0
  777. package/dist/tools/fileTools.d.ts.map +1 -0
  778. package/dist/tools/fileTools.js +334 -0
  779. package/dist/tools/fileTools.js.map +1 -0
  780. package/dist/tools/frontendTestingTools.d.ts +35 -0
  781. package/dist/tools/frontendTestingTools.d.ts.map +1 -0
  782. package/dist/tools/frontendTestingTools.js +1254 -0
  783. package/dist/tools/frontendTestingTools.js.map +1 -0
  784. package/dist/tools/globTools.d.ts +15 -0
  785. package/dist/tools/globTools.d.ts.map +1 -0
  786. package/dist/tools/globTools.js +174 -0
  787. package/dist/tools/globTools.js.map +1 -0
  788. package/dist/tools/grepTools.d.ts +19 -0
  789. package/dist/tools/grepTools.d.ts.map +1 -0
  790. package/dist/tools/grepTools.js +358 -0
  791. package/dist/tools/grepTools.js.map +1 -0
  792. package/dist/tools/interactionTools.d.ts +13 -0
  793. package/dist/tools/interactionTools.d.ts.map +1 -0
  794. package/dist/tools/interactionTools.js +171 -0
  795. package/dist/tools/interactionTools.js.map +1 -0
  796. package/dist/tools/learnTools.d.ts +164 -0
  797. package/dist/tools/learnTools.d.ts.map +1 -0
  798. package/dist/tools/learnTools.js +2102 -0
  799. package/dist/tools/learnTools.js.map +1 -0
  800. package/dist/tools/localExplore.d.ts +225 -0
  801. package/dist/tools/localExplore.d.ts.map +1 -0
  802. package/dist/tools/localExplore.js +1291 -0
  803. package/dist/tools/localExplore.js.map +1 -0
  804. package/dist/tools/notebookEditTools.d.ts +15 -0
  805. package/dist/tools/notebookEditTools.d.ts.map +1 -0
  806. package/dist/tools/notebookEditTools.js +197 -0
  807. package/dist/tools/notebookEditTools.js.map +1 -0
  808. package/dist/tools/planningTools.d.ts +21 -0
  809. package/dist/tools/planningTools.d.ts.map +1 -0
  810. package/dist/tools/planningTools.js +185 -0
  811. package/dist/tools/planningTools.js.map +1 -0
  812. package/dist/tools/refactoringTools.d.ts +3 -0
  813. package/dist/tools/refactoringTools.d.ts.map +1 -0
  814. package/dist/tools/refactoringTools.js +294 -0
  815. package/dist/tools/refactoringTools.js.map +1 -0
  816. package/dist/tools/repoChecksTools.d.ts +3 -0
  817. package/dist/tools/repoChecksTools.d.ts.map +1 -0
  818. package/dist/tools/repoChecksTools.js +161 -0
  819. package/dist/tools/repoChecksTools.js.map +1 -0
  820. package/dist/tools/searchTools.d.ts +3 -0
  821. package/dist/tools/searchTools.d.ts.map +1 -0
  822. package/dist/tools/searchTools.js +241 -0
  823. package/dist/tools/searchTools.js.map +1 -0
  824. package/dist/tools/skillTools.d.ts +8 -0
  825. package/dist/tools/skillTools.d.ts.map +1 -0
  826. package/dist/tools/skillTools.js +178 -0
  827. package/dist/tools/skillTools.js.map +1 -0
  828. package/dist/tools/softwareEngineeringTools.d.ts +7 -0
  829. package/dist/tools/softwareEngineeringTools.d.ts.map +1 -0
  830. package/dist/tools/softwareEngineeringTools.js +338 -0
  831. package/dist/tools/softwareEngineeringTools.js.map +1 -0
  832. package/dist/tools/taskManagementTools.d.ts +10 -0
  833. package/dist/tools/taskManagementTools.d.ts.map +1 -0
  834. package/dist/tools/taskManagementTools.js +157 -0
  835. package/dist/tools/taskManagementTools.js.map +1 -0
  836. package/dist/tools/testingTools.d.ts +3 -0
  837. package/dist/tools/testingTools.d.ts.map +1 -0
  838. package/dist/tools/testingTools.js +233 -0
  839. package/dist/tools/testingTools.js.map +1 -0
  840. package/dist/tools/validationTools.d.ts +7 -0
  841. package/dist/tools/validationTools.d.ts.map +1 -0
  842. package/dist/tools/validationTools.js +344 -0
  843. package/dist/tools/validationTools.js.map +1 -0
  844. package/dist/tools/webTools.d.ts +3 -0
  845. package/dist/tools/webTools.d.ts.map +1 -0
  846. package/dist/tools/webTools.js +502 -0
  847. package/dist/tools/webTools.js.map +1 -0
  848. package/dist/ui/ShellUIAdapter.d.ts +194 -0
  849. package/dist/ui/ShellUIAdapter.d.ts.map +1 -0
  850. package/dist/ui/ShellUIAdapter.js +1069 -0
  851. package/dist/ui/ShellUIAdapter.js.map +1 -0
  852. package/dist/ui/UnifiedUIController.d.ts +82 -0
  853. package/dist/ui/UnifiedUIController.d.ts.map +1 -0
  854. package/dist/ui/UnifiedUIController.js +207 -0
  855. package/dist/ui/UnifiedUIController.js.map +1 -0
  856. package/dist/ui/animation/AnimationScheduler.d.ts +192 -0
  857. package/dist/ui/animation/AnimationScheduler.d.ts.map +1 -0
  858. package/dist/ui/animation/AnimationScheduler.js +432 -0
  859. package/dist/ui/animation/AnimationScheduler.js.map +1 -0
  860. package/dist/ui/codeHighlighter.d.ts +6 -0
  861. package/dist/ui/codeHighlighter.d.ts.map +1 -0
  862. package/dist/ui/codeHighlighter.js +855 -0
  863. package/dist/ui/codeHighlighter.js.map +1 -0
  864. package/dist/ui/compactRenderer.d.ts +139 -0
  865. package/dist/ui/compactRenderer.d.ts.map +1 -0
  866. package/dist/ui/compactRenderer.js +398 -0
  867. package/dist/ui/compactRenderer.js.map +1 -0
  868. package/dist/ui/designSystem.d.ts +26 -0
  869. package/dist/ui/designSystem.d.ts.map +1 -0
  870. package/dist/ui/designSystem.js +122 -0
  871. package/dist/ui/designSystem.js.map +1 -0
  872. package/dist/ui/display.d.ts +324 -0
  873. package/dist/ui/display.d.ts.map +1 -0
  874. package/dist/ui/display.js +1328 -0
  875. package/dist/ui/display.js.map +1 -0
  876. package/dist/ui/errorFormatter.d.ts +54 -0
  877. package/dist/ui/errorFormatter.d.ts.map +1 -0
  878. package/dist/ui/errorFormatter.js +251 -0
  879. package/dist/ui/errorFormatter.js.map +1 -0
  880. package/dist/ui/globalWriteLock.d.ts +38 -0
  881. package/dist/ui/globalWriteLock.d.ts.map +1 -0
  882. package/dist/ui/globalWriteLock.js +54 -0
  883. package/dist/ui/globalWriteLock.js.map +1 -0
  884. package/dist/ui/inPlaceUpdater.d.ts +181 -0
  885. package/dist/ui/inPlaceUpdater.d.ts.map +1 -0
  886. package/dist/ui/inPlaceUpdater.js +515 -0
  887. package/dist/ui/inPlaceUpdater.js.map +1 -0
  888. package/dist/ui/interrupts/InterruptManager.d.ts +142 -0
  889. package/dist/ui/interrupts/InterruptManager.d.ts.map +1 -0
  890. package/dist/ui/interrupts/InterruptManager.js +439 -0
  891. package/dist/ui/interrupts/InterruptManager.js.map +1 -0
  892. package/dist/ui/layout.d.ts +17 -0
  893. package/dist/ui/layout.d.ts.map +1 -0
  894. package/dist/ui/layout.js +140 -0
  895. package/dist/ui/layout.js.map +1 -0
  896. package/dist/ui/orchestration/StatusOrchestrator.d.ts +156 -0
  897. package/dist/ui/orchestration/StatusOrchestrator.d.ts.map +1 -0
  898. package/dist/ui/orchestration/StatusOrchestrator.js +406 -0
  899. package/dist/ui/orchestration/StatusOrchestrator.js.map +1 -0
  900. package/dist/ui/orchestration/UIUpdateCoordinator.d.ts +77 -0
  901. package/dist/ui/orchestration/UIUpdateCoordinator.d.ts.map +1 -0
  902. package/dist/ui/orchestration/UIUpdateCoordinator.js +265 -0
  903. package/dist/ui/orchestration/UIUpdateCoordinator.js.map +1 -0
  904. package/dist/ui/outputMode.d.ts +22 -0
  905. package/dist/ui/outputMode.d.ts.map +1 -0
  906. package/dist/ui/outputMode.js +40 -0
  907. package/dist/ui/outputMode.js.map +1 -0
  908. package/dist/ui/richText.d.ts +6 -0
  909. package/dist/ui/richText.d.ts.map +1 -0
  910. package/dist/ui/richText.js +391 -0
  911. package/dist/ui/richText.js.map +1 -0
  912. package/dist/ui/shortcutsHelp.d.ts +39 -0
  913. package/dist/ui/shortcutsHelp.d.ts.map +1 -0
  914. package/dist/ui/shortcutsHelp.js +152 -0
  915. package/dist/ui/shortcutsHelp.js.map +1 -0
  916. package/dist/ui/streamingFormatter.d.ts +21 -0
  917. package/dist/ui/streamingFormatter.d.ts.map +1 -0
  918. package/dist/ui/streamingFormatter.js +94 -0
  919. package/dist/ui/streamingFormatter.js.map +1 -0
  920. package/dist/ui/telemetry/ResponseTracker.d.ts +22 -0
  921. package/dist/ui/telemetry/ResponseTracker.d.ts.map +1 -0
  922. package/dist/ui/telemetry/ResponseTracker.js +60 -0
  923. package/dist/ui/telemetry/ResponseTracker.js.map +1 -0
  924. package/dist/ui/telemetry/UITelemetry.d.ts +181 -0
  925. package/dist/ui/telemetry/UITelemetry.d.ts.map +1 -0
  926. package/dist/ui/telemetry/UITelemetry.js +446 -0
  927. package/dist/ui/telemetry/UITelemetry.js.map +1 -0
  928. package/dist/ui/textHighlighter.d.ts +83 -0
  929. package/dist/ui/textHighlighter.d.ts.map +1 -0
  930. package/dist/ui/textHighlighter.js +267 -0
  931. package/dist/ui/textHighlighter.js.map +1 -0
  932. package/dist/ui/theme.d.ts +208 -0
  933. package/dist/ui/theme.d.ts.map +1 -0
  934. package/dist/ui/theme.js +249 -0
  935. package/dist/ui/theme.js.map +1 -0
  936. package/dist/ui/unified/index.d.ts +50 -0
  937. package/dist/ui/unified/index.d.ts.map +1 -0
  938. package/dist/ui/unified/index.js +77 -0
  939. package/dist/ui/unified/index.js.map +1 -0
  940. package/dist/ui/unified/layout.d.ts +12 -0
  941. package/dist/ui/unified/layout.d.ts.map +1 -0
  942. package/dist/ui/unified/layout.js +96 -0
  943. package/dist/ui/unified/layout.js.map +1 -0
  944. package/dist/ui/writeLock.d.ts +65 -0
  945. package/dist/ui/writeLock.d.ts.map +1 -0
  946. package/dist/ui/writeLock.js +114 -0
  947. package/dist/ui/writeLock.js.map +1 -0
  948. package/dist/utils/asyncUtils.d.ts +95 -0
  949. package/dist/utils/asyncUtils.d.ts.map +1 -0
  950. package/dist/utils/asyncUtils.js +286 -0
  951. package/dist/utils/asyncUtils.js.map +1 -0
  952. package/dist/utils/errorUtils.d.ts +16 -0
  953. package/dist/utils/errorUtils.d.ts.map +1 -0
  954. package/dist/utils/errorUtils.js +66 -0
  955. package/dist/utils/errorUtils.js.map +1 -0
  956. package/dist/utils/frontmatter.d.ts +10 -0
  957. package/dist/utils/frontmatter.d.ts.map +1 -0
  958. package/dist/utils/frontmatter.js +78 -0
  959. package/dist/utils/frontmatter.js.map +1 -0
  960. package/dist/utils/planFormatter.d.ts +34 -0
  961. package/dist/utils/planFormatter.d.ts.map +1 -0
  962. package/dist/utils/planFormatter.js +140 -0
  963. package/dist/utils/planFormatter.js.map +1 -0
  964. package/dist/workspace.d.ts +8 -0
  965. package/dist/workspace.d.ts.map +1 -0
  966. package/dist/workspace.js +107 -0
  967. package/dist/workspace.js.map +1 -0
  968. package/dist/workspace.validator.d.ts +49 -0
  969. package/dist/workspace.validator.d.ts.map +1 -0
  970. package/dist/workspace.validator.js +214 -0
  971. package/dist/workspace.validator.js.map +1 -0
  972. package/package.json +1 -1
@@ -0,0 +1,1328 @@
1
+ import { createSpinner } from 'nanospinner';
2
+ import { clearScreenDown, cursorTo } from 'node:readline';
3
+ import { theme, icons } from './theme.js';
4
+ import { formatRichContent, renderMessagePanel, renderMessageBody } from './richText.js';
5
+ import { getTerminalColumns } from './layout.js';
6
+ import { highlightError } from './textHighlighter.js';
7
+ import { renderSectionHeading } from './designSystem.js';
8
+ import { isPlainOutputMode } from './outputMode.js';
9
+ import { writeLock } from './writeLock.js';
10
+ import { renderStatusLine } from './unified/layout.js';
11
+ import { isStreamingMode } from './globalWriteLock.js';
12
+ /**
13
+ * Output lock to prevent race conditions during spinner/stream output.
14
+ * Ensures that spinner frames don't interleave with streamed content.
15
+ * Uses a simple lock mechanism suitable for Node.js single-threaded event loop.
16
+ */
17
+ class OutputLock {
18
+ static instance = null;
19
+ locked = false;
20
+ pendingCallbacks = [];
21
+ static getInstance() {
22
+ if (!OutputLock.instance) {
23
+ OutputLock.instance = new OutputLock();
24
+ }
25
+ return OutputLock.instance;
26
+ }
27
+ /**
28
+ * Synchronously check if output is locked (spinner is active).
29
+ * Used to prevent stream writes during spinner animation.
30
+ */
31
+ isLocked() {
32
+ return this.locked;
33
+ }
34
+ /**
35
+ * Lock output during spinner animation.
36
+ */
37
+ lock() {
38
+ this.locked = true;
39
+ }
40
+ /**
41
+ * Unlock output and process any pending callbacks.
42
+ */
43
+ unlock() {
44
+ this.locked = false;
45
+ // Process any pending writes
46
+ while (this.pendingCallbacks.length > 0) {
47
+ const callback = this.pendingCallbacks.shift();
48
+ if (callback) {
49
+ callback();
50
+ }
51
+ }
52
+ }
53
+ /**
54
+ * Execute a callback safely, queueing if output is locked.
55
+ */
56
+ safeWrite(callback) {
57
+ if (this.locked) {
58
+ this.pendingCallbacks.push(callback);
59
+ return;
60
+ }
61
+ callback();
62
+ }
63
+ }
64
+ /**
65
+ * Tracks line output to stdout for banner rewriting and cursor positioning.
66
+ * Instances are cached per stream to keep banner calculations consistent.
67
+ */
68
+ class StdoutLineTracker {
69
+ static instances = new WeakMap();
70
+ static getInstance(stream = process.stdout) {
71
+ const existing = StdoutLineTracker.instances.get(stream);
72
+ if (existing) {
73
+ return existing;
74
+ }
75
+ const tracker = new StdoutLineTracker(stream);
76
+ StdoutLineTracker.instances.set(stream, tracker);
77
+ return tracker;
78
+ }
79
+ linesWritten = 0;
80
+ suspended = false;
81
+ stream;
82
+ originalWrite;
83
+ constructor(stream) {
84
+ this.stream = stream;
85
+ this.originalWrite = stream.write.bind(stream);
86
+ this.patchStream();
87
+ }
88
+ get totalLines() {
89
+ return this.linesWritten;
90
+ }
91
+ /**
92
+ * Temporarily suspends line tracking while executing a function.
93
+ * Useful for rewriting content without incrementing line count.
94
+ */
95
+ withSuspended(fn) {
96
+ const wasSuspended = this.suspended;
97
+ this.suspended = true;
98
+ try {
99
+ return fn();
100
+ }
101
+ finally {
102
+ this.suspended = wasSuspended;
103
+ }
104
+ }
105
+ reset() {
106
+ this.linesWritten = 0;
107
+ }
108
+ patchStream() {
109
+ const tracker = this;
110
+ this.stream.write = function patched(chunk, encoding, callback) {
111
+ const actualEncoding = typeof encoding === 'function' ? undefined : encoding;
112
+ tracker.recordChunk(chunk, actualEncoding);
113
+ return tracker.originalWrite.call(this, chunk, encoding, callback);
114
+ };
115
+ }
116
+ recordChunk(chunk, encoding) {
117
+ if (this.suspended) {
118
+ return;
119
+ }
120
+ const text = this.chunkToString(chunk, encoding);
121
+ if (!text) {
122
+ return;
123
+ }
124
+ this.countNewlines(text);
125
+ }
126
+ countNewlines(text) {
127
+ for (const char of text) {
128
+ if (char === '\n') {
129
+ this.linesWritten += 1;
130
+ }
131
+ }
132
+ }
133
+ chunkToString(chunk, encoding) {
134
+ if (typeof chunk === 'string') {
135
+ return chunk;
136
+ }
137
+ if (chunk instanceof Uint8Array) {
138
+ const enc = encoding ?? 'utf8';
139
+ return Buffer.from(chunk).toString(enc);
140
+ }
141
+ return null;
142
+ }
143
+ }
144
+ // Display configuration constants
145
+ const DISPLAY_CONSTANTS = {
146
+ MIN_BANNER_WIDTH: 32,
147
+ MAX_BANNER_WIDTH: 120,
148
+ BANNER_PADDING: 4,
149
+ MIN_MESSAGE_WIDTH: 42,
150
+ MAX_MESSAGE_WIDTH: 110,
151
+ MESSAGE_PADDING: 4,
152
+ MIN_ACTION_WIDTH: 40,
153
+ MAX_ACTION_WIDTH: 90,
154
+ MIN_THOUGHT_WIDTH: 48,
155
+ MAX_THOUGHT_WIDTH: 96,
156
+ MIN_CONTENT_WIDTH: 10,
157
+ MIN_WRAP_WIDTH: 12,
158
+ SPINNER_INTERVAL: 80,
159
+ };
160
+ // Claude Code style spinner frames: ✻ as primary thinking indicator
161
+ // Alternates between ✻ and ◐ for visual interest
162
+ const SPINNER_FRAMES = ['✻', '◐', '✻', '◓', '✻', '◑', '✻', '◒'];
163
+ /**
164
+ * Display class manages all terminal UI output for the application.
165
+ *
166
+ * Architecture:
167
+ * - Per-stream line tracking via StdoutLineTracker for consistent banner updates
168
+ * - Output interceptor pattern for live update integration
169
+ * - Banner state management for in-place updates
170
+ * - Configurable width constraints via DISPLAY_CONSTANTS
171
+ *
172
+ * Claude Code Style Formatting:
173
+ * - ⏺ prefix for tool calls, actions, and thinking/reasoning
174
+ * - ⎿ prefix for results, details, and nested information
175
+ * - ─ horizontal separators for dividing sections (edit diffs, etc.)
176
+ * - > prefix for user prompts (handled in theme.ts formatUserPrompt)
177
+ * - Compact epsilon spinner: ∴, ε, ✻
178
+ *
179
+ * Key responsibilities:
180
+ * - Welcome banners and session information display
181
+ * - Message formatting (assistant, system, errors, warnings)
182
+ * - Spinner/thinking indicators
183
+ * - Action and sub-action formatting with tree-style prefixes
184
+ * - Text wrapping and layout management
185
+ *
186
+ * Error handling:
187
+ * - Graceful degradation for non-TTY environments
188
+ * - Input validation on public methods
189
+ * - Safe cursor manipulation with fallback
190
+ */
191
+ export class Display {
192
+ stdoutTracker;
193
+ outputStream;
194
+ errorStream;
195
+ activeSpinner = null;
196
+ outputInterceptors = new Set();
197
+ outputLock = OutputLock.getInstance();
198
+ spinnerFrames = [...SPINNER_FRAMES];
199
+ thinkingStartTime = null;
200
+ thinkingElapsedTimer = null;
201
+ thinkingBaseMessage = 'Thinking...';
202
+ pendingCarriageReturn = false;
203
+ // Streaming status line (Claude Code style - fixed at bottom using scroll region)
204
+ streamingStatusVisible = false;
205
+ scrollRegionActive = false;
206
+ savedCursorRow = 0;
207
+ constructor(stream = process.stdout, errorStream) {
208
+ this.outputStream = stream;
209
+ this.errorStream = errorStream ?? stream;
210
+ this.stdoutTracker = StdoutLineTracker.getInstance(stream);
211
+ }
212
+ registerOutputInterceptor(interceptor) {
213
+ if (!interceptor) {
214
+ return () => { };
215
+ }
216
+ this.outputInterceptors.add(interceptor);
217
+ return () => {
218
+ this.outputInterceptors.delete(interceptor);
219
+ };
220
+ }
221
+ /**
222
+ * Execute output with proper write lock coordination.
223
+ * All display output goes through this method to prevent race conditions.
224
+ *
225
+ * Behavior:
226
+ * - If write lock is already held, execute directly (we're in a protected context)
227
+ * - Otherwise acquire lock during output to prevent interleaving
228
+ * - Notifies interceptors before/after output for cursor positioning
229
+ */
230
+ withOutput(fn) {
231
+ // If lock is already held, execute directly - we're in a protected context
232
+ // This prevents queuing issues where content gets delayed
233
+ if (writeLock.isLocked()) {
234
+ this.notifyBeforeOutput();
235
+ try {
236
+ fn();
237
+ }
238
+ finally {
239
+ this.notifyAfterOutput();
240
+ }
241
+ return;
242
+ }
243
+ // Acquire lock during output to prevent interleaved writes
244
+ writeLock.withLock(() => {
245
+ this.notifyBeforeOutput();
246
+ try {
247
+ fn();
248
+ }
249
+ finally {
250
+ this.notifyAfterOutput();
251
+ }
252
+ }, 'display.withOutput');
253
+ }
254
+ notifyBeforeOutput() {
255
+ for (const interceptor of this.outputInterceptors) {
256
+ interceptor.beforeWrite?.();
257
+ }
258
+ }
259
+ notifyAfterOutput(content) {
260
+ const interceptors = Array.from(this.outputInterceptors);
261
+ for (let index = interceptors.length - 1; index >= 0; index -= 1) {
262
+ interceptors[index]?.afterWrite?.(content);
263
+ }
264
+ }
265
+ write(value, target = this.outputStream) {
266
+ // Write directly - this method is called from within locked contexts
267
+ // like withOutput(), so we don't need additional locking here.
268
+ // The globalWriteLock wrapper will handle coordination if needed.
269
+ try {
270
+ target.write(value);
271
+ }
272
+ catch {
273
+ // Ignore write failures to keep UI resilient
274
+ }
275
+ }
276
+ writeLine(value = '', target = this.outputStream) {
277
+ this.write(`${value}\n`, target);
278
+ }
279
+ /**
280
+ * Write raw content directly to output stream.
281
+ * For streaming output chunks - writes directly without locks during streaming mode.
282
+ *
283
+ * During streaming mode, content is written directly to stdout without any
284
+ * lock coordination. This ensures streaming content flows smoothly without
285
+ * being delayed by other UI components.
286
+ */
287
+ writeRaw(content) {
288
+ if (typeof content !== 'string' || !content) {
289
+ return;
290
+ }
291
+ const normalized = this.normalizeStreamingContent(content);
292
+ if (!normalized) {
293
+ return;
294
+ }
295
+ // During streaming, use withLock to prevent interleaving with escape codes.
296
+ // This ensures the before/write/after sequence is atomic.
297
+ if (isStreamingMode()) {
298
+ writeLock.withLock(() => {
299
+ this.notifyBeforeOutput();
300
+ try {
301
+ this.outputStream.write(normalized);
302
+ }
303
+ catch {
304
+ // Ignore write failures to keep UI resilient
305
+ }
306
+ finally {
307
+ this.notifyAfterOutput(normalized);
308
+ }
309
+ }, 'display.writeRaw.streaming');
310
+ return;
311
+ }
312
+ // Outside streaming mode, use locks to coordinate with other UI
313
+ writeLock.withLock(() => {
314
+ this.notifyBeforeOutput();
315
+ try {
316
+ this.write(normalized);
317
+ }
318
+ finally {
319
+ this.notifyAfterOutput(normalized);
320
+ }
321
+ }, 'display.writeRaw');
322
+ }
323
+ /**
324
+ * Normalize streaming chunks so progress-style carriage returns render cleanly.
325
+ * - Preserve CR-based rewrites instead of converting to newlines
326
+ * - Clear lines when rewriting to avoid leftover characters
327
+ * - Carry trailing CR across chunks so the next write can clear before drawing
328
+ */
329
+ normalizeStreamingContent(content) {
330
+ // Normalize CRLF first
331
+ let text = content.replace(/\r\n/g, '\n');
332
+ let result = '';
333
+ // If the previous chunk ended with a bare CR, clear the line before new text
334
+ if (this.pendingCarriageReturn) {
335
+ if (text.length === 0) {
336
+ return '';
337
+ }
338
+ if (text[0] !== '\n') {
339
+ result += '\r\x1b[K';
340
+ }
341
+ this.pendingCarriageReturn = false;
342
+ }
343
+ let trailingCarriageReturn = false;
344
+ for (let i = 0; i < text.length; i++) {
345
+ const char = text[i];
346
+ if (char === '\r') {
347
+ const next = text[i + 1];
348
+ if (next === '\n') {
349
+ // CRLF already normalized above; skip CR
350
+ continue;
351
+ }
352
+ const isLastChar = i === text.length - 1;
353
+ if (isLastChar) {
354
+ // Trailing CR: keep it so cursor is at column 0, but delay clearing
355
+ result += '\r';
356
+ trailingCarriageReturn = true;
357
+ }
358
+ else {
359
+ // In-place update: move to start and clear the line before new text
360
+ result += '\r\x1b[K';
361
+ }
362
+ continue;
363
+ }
364
+ result += char;
365
+ }
366
+ this.pendingCarriageReturn = trailingCarriageReturn;
367
+ return result;
368
+ }
369
+ /**
370
+ * Stream chunk helper - writes directly to stdout during streaming.
371
+ * This is the primary method for streaming AI responses.
372
+ */
373
+ stream(chunk) {
374
+ this.writeRaw(chunk);
375
+ }
376
+ /**
377
+ * Backward-compatible alias for stream().
378
+ */
379
+ writeStreamChunk(chunk) {
380
+ this.stream(chunk);
381
+ }
382
+ /**
383
+ * Get the output stream for direct access.
384
+ * Prefer writeRaw/writeStreamChunk for interceptor support.
385
+ */
386
+ getOutputStream() {
387
+ return this.outputStream;
388
+ }
389
+ /**
390
+ * Current number of lines written to stdout (tracked for positioning).
391
+ */
392
+ getTotalWrittenLines() {
393
+ return this.stdoutTracker.totalLines;
394
+ }
395
+ /**
396
+ * Number of lines at the top of the terminal that belong to the pinned banner.
397
+ * For integrated scroll-region layouts, banners are not pinned, so this is 0.
398
+ */
399
+ getPinnedHeaderLines() {
400
+ return 0;
401
+ }
402
+ getColumnWidth() {
403
+ if (typeof this.outputStream.columns === 'number' &&
404
+ Number.isFinite(this.outputStream.columns) &&
405
+ this.outputStream.columns > 0) {
406
+ return this.outputStream.columns;
407
+ }
408
+ return getTerminalColumns();
409
+ }
410
+ // Banner is now streamed by the shell - no storage needed
411
+ showThinking(message = 'Thinking…') {
412
+ // If we already have a spinner, just update its text instead of creating a new one
413
+ if (this.activeSpinner) {
414
+ this.thinkingBaseMessage = message;
415
+ this.activeSpinner.update({ text: message });
416
+ return;
417
+ }
418
+ // Lock output to prevent stream writes from interleaving with spinner frames
419
+ this.outputLock.lock();
420
+ // Track when thinking started for elapsed time display
421
+ this.thinkingStartTime = Date.now();
422
+ this.thinkingBaseMessage = message;
423
+ // Use Claude Code style spinner with ✻ as primary thinking indicator
424
+ this.activeSpinner = createSpinner(message, {
425
+ stream: this.outputStream,
426
+ spinner: {
427
+ interval: DISPLAY_CONSTANTS.SPINNER_INTERVAL,
428
+ frames: this.spinnerFrames,
429
+ },
430
+ }).start();
431
+ // Update spinner with elapsed time every second (Claude Code style)
432
+ this.thinkingElapsedTimer = setInterval(() => {
433
+ if (this.activeSpinner && this.thinkingStartTime) {
434
+ const elapsed = Math.floor((Date.now() - this.thinkingStartTime) / 1000);
435
+ if (elapsed > 0) {
436
+ const elapsedText = this.formatElapsedTime(elapsed);
437
+ this.activeSpinner.update({ text: `${this.thinkingBaseMessage} ${theme.ui.muted(`(${elapsedText})`)}` });
438
+ }
439
+ }
440
+ }, 1000);
441
+ }
442
+ /**
443
+ * Format elapsed seconds as human-readable time (e.g., "5s", "1m 23s")
444
+ */
445
+ formatElapsedTime(seconds) {
446
+ if (seconds < 60) {
447
+ return `${seconds}s`;
448
+ }
449
+ const mins = Math.floor(seconds / 60);
450
+ const secs = seconds % 60;
451
+ return secs > 0 ? `${mins}m ${secs}s` : `${mins}m`;
452
+ }
453
+ updateThinking(message) {
454
+ this.thinkingBaseMessage = message;
455
+ if (this.activeSpinner) {
456
+ // If we have elapsed time, include it in the update
457
+ if (this.thinkingStartTime) {
458
+ const elapsed = Math.floor((Date.now() - this.thinkingStartTime) / 1000);
459
+ if (elapsed > 0) {
460
+ const elapsedText = this.formatElapsedTime(elapsed);
461
+ this.activeSpinner.update({ text: `${message} ${theme.ui.muted(`(${elapsedText})`)}` });
462
+ return;
463
+ }
464
+ }
465
+ this.activeSpinner.update({ text: message });
466
+ }
467
+ else {
468
+ this.showThinking(message);
469
+ }
470
+ }
471
+ stopThinking(addNewLine = true) {
472
+ this.clearSpinnerIfActive(addNewLine);
473
+ }
474
+ /**
475
+ * Get current thinking elapsed time in milliseconds, or null if not thinking.
476
+ */
477
+ getThinkingElapsedMs() {
478
+ if (!this.thinkingStartTime) {
479
+ return null;
480
+ }
481
+ return Date.now() - this.thinkingStartTime;
482
+ }
483
+ isSpinnerActive() {
484
+ return this.activeSpinner !== null;
485
+ }
486
+ /**
487
+ * Check if output is currently locked (e.g., spinner is active).
488
+ * Used by external callers to coordinate output timing.
489
+ */
490
+ isOutputLocked() {
491
+ return this.outputLock.isLocked();
492
+ }
493
+ /**
494
+ * Execute a write callback safely, ensuring it doesn't interleave with spinner output.
495
+ * If spinner is active, the write will be queued until spinner stops.
496
+ */
497
+ safeWrite(callback) {
498
+ this.outputLock.safeWrite(callback);
499
+ }
500
+ /**
501
+ * Get terminal rows, with fallback
502
+ */
503
+ getTerminalRows() {
504
+ const stream = this.outputStream;
505
+ return stream.rows ?? 24;
506
+ }
507
+ /**
508
+ * Set up scroll region to reserve bottom line for status.
509
+ * This allows content to scroll while status stays fixed.
510
+ */
511
+ setupScrollRegion() {
512
+ if (this.scrollRegionActive || !this.isTTY()) {
513
+ return;
514
+ }
515
+ const rows = this.getTerminalRows();
516
+ // Reserve bottom 2 lines (separator + status)
517
+ // Set scroll region from row 1 to row (rows - 2)
518
+ this.outputStream.write(`\x1b[1;${rows - 2}r`);
519
+ // Move cursor to end of scroll region
520
+ this.outputStream.write(`\x1b[${rows - 2};1H`);
521
+ this.scrollRegionActive = true;
522
+ this.savedCursorRow = rows - 2;
523
+ }
524
+ /**
525
+ * Tear down scroll region and restore normal terminal.
526
+ */
527
+ teardownScrollRegion() {
528
+ if (!this.scrollRegionActive) {
529
+ return;
530
+ }
531
+ const rows = this.getTerminalRows();
532
+ // Reset scroll region to full screen
533
+ this.outputStream.write('\x1b[r');
534
+ // Clear the status lines at bottom
535
+ this.outputStream.write(`\x1b[${rows - 1};1H\x1b[2K`);
536
+ this.outputStream.write(`\x1b[${rows};1H\x1b[2K`);
537
+ // Move cursor back to where content was
538
+ this.outputStream.write(`\x1b[${this.savedCursorRow};1H`);
539
+ this.scrollRegionActive = false;
540
+ this.streamingStatusVisible = false;
541
+ }
542
+ /**
543
+ * Check if we're in a TTY (can use escape codes)
544
+ */
545
+ isTTY() {
546
+ const stream = this.outputStream;
547
+ return stream.isTTY === true;
548
+ }
549
+ /**
550
+ * Update the streaming status line (Claude Code style).
551
+ * When scroll region is active, updates the fixed status area at bottom.
552
+ * Call with null to clear the status line.
553
+ * Uses shared writeLock to prevent race conditions with other output.
554
+ */
555
+ updateStreamingStatus(status) {
556
+ // Use shared writeLock to coordinate with terminalInput and streaming output
557
+ writeLock.withLock(() => {
558
+ this.updateStreamingStatusInternal(status);
559
+ }, 'display.updateStreamingStatus');
560
+ }
561
+ /**
562
+ * Internal implementation of updateStreamingStatus (called with lock held)
563
+ * NOTE: During streaming, we do NOT write status lines to stdout to prevent
564
+ * race conditions with stream chunks. The status is tracked internally and
565
+ * the terminalInput's status message display handles showing it in the
566
+ * reserved input area, separate from the main content stream.
567
+ */
568
+ updateStreamingStatusInternal(status) {
569
+ if (!status) {
570
+ this.streamingStatusVisible = false;
571
+ return;
572
+ }
573
+ // Just track the status - don't write to stdout during streaming
574
+ this.streamingStatusVisible = true;
575
+ }
576
+ /**
577
+ * Check if streaming status is currently visible.
578
+ */
579
+ isStreamingStatusVisible() {
580
+ return this.streamingStatusVisible;
581
+ }
582
+ /**
583
+ * Check if scroll region is active.
584
+ */
585
+ isScrollRegionActive() {
586
+ return this.scrollRegionActive;
587
+ }
588
+ /**
589
+ * Clear streaming status and reset state.
590
+ */
591
+ clearStreamingStatus() {
592
+ this.streamingStatusVisible = false;
593
+ }
594
+ /**
595
+ * Display parallel agent status (Claude Code style).
596
+ * Shows a tree of running agents with their progress.
597
+ */
598
+ parallelAgentStatus(content) {
599
+ if (!content)
600
+ return;
601
+ // During streaming, write directly to output
602
+ this.withOutput(() => {
603
+ // Clear current line and write agent status
604
+ this.writeRaw('\r\x1b[K');
605
+ this.writeLine(content);
606
+ });
607
+ }
608
+ clearSpinnerIfActive(addNewLine = true) {
609
+ if (!this.activeSpinner) {
610
+ return;
611
+ }
612
+ // Clear the elapsed time update timer
613
+ if (this.thinkingElapsedTimer) {
614
+ clearInterval(this.thinkingElapsedTimer);
615
+ this.thinkingElapsedTimer = null;
616
+ }
617
+ this.thinkingStartTime = null;
618
+ const spinner = this.activeSpinner;
619
+ this.activeSpinner = null;
620
+ // Use stop() instead of clear() so nanospinner removes its SIGINT/SIGTERM listeners.
621
+ // clear() leaves the listeners attached, which triggers MaxListenersExceededWarning over time.
622
+ spinner.stop();
623
+ // Unlock output to process any pending writes
624
+ this.outputLock.unlock();
625
+ if (addNewLine) {
626
+ this.withOutput(() => {
627
+ this.writeLine();
628
+ });
629
+ }
630
+ }
631
+ showAssistantMessage(content, metadata) {
632
+ if (!content.trim()) {
633
+ return;
634
+ }
635
+ this.clearSpinnerIfActive();
636
+ const isThought = metadata?.isFinal === false;
637
+ const body = isThought ? this.buildClaudeStyleThought(content) : this.buildChatBox(content, metadata);
638
+ if (!body.trim()) {
639
+ return;
640
+ }
641
+ this.withOutput(() => {
642
+ this.writeLine(); // Ensure clean start for the box
643
+ this.writeLine(body);
644
+ this.writeLine();
645
+ });
646
+ }
647
+ showNarrative(content) {
648
+ if (!content.trim()) {
649
+ return;
650
+ }
651
+ this.showAssistantMessage(content, { isFinal: false });
652
+ }
653
+ showAction(text, status = 'info') {
654
+ if (!text.trim()) {
655
+ return;
656
+ }
657
+ this.clearSpinnerIfActive();
658
+ // Claude Code style: always use ⏺ prefix for actions
659
+ const icon = this.formatActionIcon(status);
660
+ this.withOutput(() => {
661
+ this.writeLine(this.wrapWithPrefix(text, `${icon} `));
662
+ });
663
+ }
664
+ showSubAction(text, status = 'info') {
665
+ if (!text.trim()) {
666
+ return;
667
+ }
668
+ this.clearSpinnerIfActive();
669
+ const prefersRich = text.includes('```');
670
+ let rendered = prefersRich ? this.buildRichSubActionLines(text, status) : this.buildWrappedSubActionLines(text, status);
671
+ if (!rendered.length && prefersRich) {
672
+ rendered = this.buildWrappedSubActionLines(text, status);
673
+ }
674
+ if (!rendered.length) {
675
+ return;
676
+ }
677
+ this.withOutput(() => {
678
+ this.writeLine(rendered.join('\n'));
679
+ this.writeLine();
680
+ });
681
+ }
682
+ buildWrappedSubActionLines(text, status) {
683
+ const lines = text.split('\n').map((line) => line.trimEnd());
684
+ while (lines.length && !lines[lines.length - 1]?.trim()) {
685
+ lines.pop();
686
+ }
687
+ if (!lines.length) {
688
+ return [];
689
+ }
690
+ const rendered = [];
691
+ for (let index = 0; index < lines.length; index += 1) {
692
+ const segment = lines[index] ?? '';
693
+ const isLast = index === lines.length - 1;
694
+ const { prefix, continuation } = this.buildSubActionPrefixes(status, isLast);
695
+ rendered.push(this.wrapWithPrefix(segment, prefix, { continuationPrefix: continuation }));
696
+ }
697
+ return rendered;
698
+ }
699
+ buildRichSubActionLines(text, status) {
700
+ const normalized = text.trim();
701
+ if (!normalized) {
702
+ return [];
703
+ }
704
+ const width = Math.max(DISPLAY_CONSTANTS.MIN_ACTION_WIDTH, Math.min(this.getColumnWidth(), DISPLAY_CONSTANTS.MAX_ACTION_WIDTH));
705
+ const samplePrefix = this.buildSubActionPrefixes(status, true).prefix;
706
+ const contentWidth = Math.max(DISPLAY_CONSTANTS.MIN_CONTENT_WIDTH, width - this.visibleLength(samplePrefix));
707
+ const blocks = formatRichContent(normalized, contentWidth);
708
+ if (!blocks.length) {
709
+ return [];
710
+ }
711
+ return blocks.map((line, index) => {
712
+ const isLast = index === blocks.length - 1;
713
+ const { prefix } = this.buildSubActionPrefixes(status, isLast);
714
+ if (!line.trim()) {
715
+ return prefix.trimEnd();
716
+ }
717
+ return `${prefix}${line}`;
718
+ });
719
+ }
720
+ showMessage(content, role = 'assistant') {
721
+ if (role === 'system') {
722
+ this.showSystemMessage(content);
723
+ }
724
+ else {
725
+ this.showAssistantMessage(content);
726
+ }
727
+ }
728
+ showSystemMessage(content) {
729
+ this.clearSpinnerIfActive();
730
+ const normalized = content.trim();
731
+ if (!normalized) {
732
+ return;
733
+ }
734
+ this.stream(`${normalized}\n\n`);
735
+ }
736
+ showError(message, error) {
737
+ this.clearSpinnerIfActive();
738
+ const details = this.formatErrorDetails(error);
739
+ const parts = [`${theme.error('✗')} ${message}`];
740
+ if (details) {
741
+ parts.push(` ${details}`);
742
+ }
743
+ this.stream(`${parts.join('\n')}\n`);
744
+ }
745
+ showWarning(message) {
746
+ this.clearSpinnerIfActive();
747
+ this.stream(`${theme.warning('!')} ${message}\n`);
748
+ }
749
+ showInfo(message) {
750
+ this.clearSpinnerIfActive();
751
+ this.stream(`${theme.info('ℹ')} ${message}\n`);
752
+ }
753
+ /**
754
+ * Show a success message with simple styling
755
+ */
756
+ showSuccess(message) {
757
+ this.clearSpinnerIfActive();
758
+ this.stream(`${theme.success('✓')} ${message}\n`);
759
+ }
760
+ /**
761
+ * Show a stylish progress indicator for long operations
762
+ */
763
+ showProgressBadge(label, current, total) {
764
+ const percentage = Math.round((current / total) * 100);
765
+ const barWidth = 20;
766
+ const filled = Math.round((current / total) * barWidth);
767
+ const empty = barWidth - filled;
768
+ const progressBar = `${'█'.repeat(filled)}${'░'.repeat(empty)}`;
769
+ const badge = `[${label}] ${progressBar} ${percentage}%`;
770
+ this.withOutput(() => {
771
+ this.write(`\r${theme.info(badge)}`);
772
+ if (current >= total) {
773
+ this.writeLine();
774
+ }
775
+ });
776
+ }
777
+ showStatusLine(status, elapsedMs, _context) {
778
+ this.clearSpinnerIfActive();
779
+ const normalized = status?.trim();
780
+ if (!normalized) {
781
+ return;
782
+ }
783
+ const elapsed = this.formatElapsed(elapsedMs);
784
+ const parts = [
785
+ { text: `${theme.success('✓')} ${normalized}`, tone: 'success' },
786
+ elapsed ? { text: `(${elapsed})`, tone: 'muted' } : null,
787
+ ].filter(Boolean);
788
+ const line = renderStatusLine(parts, this.getColumnWidth() - 2);
789
+ this.withOutput(() => {
790
+ this.writeLine(line);
791
+ });
792
+ }
793
+ showAvailableTools(_tools) {
794
+ // Hidden by default to match Claude Code style
795
+ // Tools are available but not listed verbosely on startup
796
+ // Parameter prefixed with underscore to indicate intentionally unused
797
+ }
798
+ /**
799
+ * Show a compact launch panel of slash commands with wrapped descriptions.
800
+ */
801
+ showCommandPalette(commands, options) {
802
+ if (!commands || commands.length === 0) {
803
+ return;
804
+ }
805
+ const panel = this.buildCommandPalette(commands, options);
806
+ if (!panel.trim()) {
807
+ return;
808
+ }
809
+ this.withOutput(() => {
810
+ this.writeLine();
811
+ this.writeLine(panel);
812
+ this.writeLine();
813
+ });
814
+ }
815
+ /**
816
+ * Show ready message with keyboard shortcuts hint (compact)
817
+ * Note: Commands are now shown in the banner, so this is a no-op
818
+ */
819
+ showReadyWithHints() {
820
+ // Commands hint is now included in the banner
821
+ }
822
+ /**
823
+ * Show available providers and their status on launch (compact inline)
824
+ */
825
+ showProvidersStatus(providers) {
826
+ const available = providers.filter(p => p.available);
827
+ if (available.length === 0) {
828
+ return;
829
+ }
830
+ // Claude Code style: don't show providers on startup, keep it minimal
831
+ }
832
+ /**
833
+ * Show unified status bar - Claude Code style (minimal)
834
+ * Note: No-op - status is shown in mode controls line
835
+ */
836
+ showUnifiedStatusBar(_providers) {
837
+ // No-op - banner is streamed as content, status shown in control bar
838
+ }
839
+ /**
840
+ * Show streaming header - no-op, banner is streamed as content
841
+ */
842
+ showStreamingHeader(_options) {
843
+ // No-op - banner is streamed as content by the shell
844
+ }
845
+ /**
846
+ * Show model commands help
847
+ */
848
+ showModelCommands() {
849
+ this.withOutput(() => {
850
+ this.writeLine(theme.ui.muted(`${icons.info} Model commands:`));
851
+ this.writeLine(theme.ui.muted(' /model <name> - Switch to a specific model'));
852
+ this.writeLine(theme.ui.muted(' /model - Show current model'));
853
+ this.writeLine(theme.ui.muted(' /providers - List all available providers'));
854
+ this.writeLine(theme.ui.muted(' /discover - Discover models from provider APIs'));
855
+ this.writeLine();
856
+ });
857
+ }
858
+ formatErrorDetails(error) {
859
+ if (!error) {
860
+ return null;
861
+ }
862
+ if (error instanceof Error) {
863
+ if (error.stack) {
864
+ return highlightError(error.stack);
865
+ }
866
+ return highlightError(error.message);
867
+ }
868
+ if (typeof error === 'string') {
869
+ return highlightError(error);
870
+ }
871
+ try {
872
+ return highlightError(JSON.stringify(error, null, 2));
873
+ }
874
+ catch {
875
+ return null;
876
+ }
877
+ }
878
+ showPlanningStep(step, index, total) {
879
+ // Validate inputs
880
+ if (!step?.trim()) {
881
+ return;
882
+ }
883
+ if (index < 1 || total < 1 || index > total) {
884
+ return;
885
+ }
886
+ const width = Math.max(DISPLAY_CONSTANTS.MIN_THOUGHT_WIDTH, Math.min(this.getColumnWidth(), DISPLAY_CONSTANTS.MAX_MESSAGE_WIDTH));
887
+ const heading = renderSectionHeading(`Plan ${index}/${total}`, {
888
+ subtitle: step,
889
+ icon: icons.arrow,
890
+ tone: 'info',
891
+ width,
892
+ });
893
+ this.withOutput(() => {
894
+ this.writeLine(heading);
895
+ });
896
+ }
897
+ clear() {
898
+ this.withOutput(() => {
899
+ try {
900
+ cursorTo(this.outputStream, 0, 0);
901
+ clearScreenDown(this.outputStream);
902
+ }
903
+ catch {
904
+ this.write('\x1Bc');
905
+ }
906
+ });
907
+ this.stdoutTracker.reset();
908
+ // Banner is streamed content - no re-render on clear
909
+ }
910
+ newLine() {
911
+ this.withOutput(() => {
912
+ this.writeLine();
913
+ });
914
+ }
915
+ // Legacy banner methods removed - banner is streamed as content by the shell
916
+ formatModelLabel(model) {
917
+ if (/gpt-5\.1-?codex/i.test(model)) {
918
+ return model;
919
+ }
920
+ if (/sonnet-4[-.]?5/i.test(model)) {
921
+ return 'Sonnet 4.5';
922
+ }
923
+ if (/opus-4[-.]?1/i.test(model)) {
924
+ return 'Opus 4.1';
925
+ }
926
+ if (/haiku-4[-.]?5/i.test(model)) {
927
+ return 'Haiku 4.5';
928
+ }
929
+ if (/gpt-5\.1/i.test(model)) {
930
+ return 'GPT-5.1';
931
+ }
932
+ if (/gpt-5-?pro/i.test(model)) {
933
+ return 'GPT-5 Pro';
934
+ }
935
+ if (/gpt-5-?mini/i.test(model)) {
936
+ return 'GPT-5 Mini';
937
+ }
938
+ if (/gpt-5-?nano/i.test(model)) {
939
+ return 'GPT-5 Nano';
940
+ }
941
+ return model;
942
+ }
943
+ compactPath(path, maxLen) {
944
+ if (!path) {
945
+ return '';
946
+ }
947
+ if (this.visibleLength(path) <= maxLen) {
948
+ return path;
949
+ }
950
+ const parts = path.split('/').filter(Boolean);
951
+ if (parts.length <= 2) {
952
+ return `${path.slice(0, Math.max(0, maxLen - 3))}...`;
953
+ }
954
+ return `${parts[0]}/.../${parts[parts.length - 1]}`;
955
+ }
956
+ buildChatBox(content, metadata) {
957
+ const normalized = content.trim();
958
+ if (!normalized) {
959
+ return '';
960
+ }
961
+ if (isPlainOutputMode()) {
962
+ const body = renderMessageBody(normalized, this.resolveMessageWidth());
963
+ const telemetry = this.formatTelemetryLine(metadata);
964
+ return telemetry ? `${body}\n${telemetry}` : body;
965
+ }
966
+ const width = this.resolveMessageWidth();
967
+ const panel = renderMessagePanel(normalized, {
968
+ width,
969
+ title: 'Assistant',
970
+ icon: icons.assistant,
971
+ accentColor: theme.assistant ?? theme.primary,
972
+ borderColor: theme.ui.border,
973
+ });
974
+ const telemetry = this.formatTelemetryLine(metadata);
975
+ if (!telemetry) {
976
+ return panel;
977
+ }
978
+ return `${panel}\n${telemetry}`;
979
+ }
980
+ resolveMessageWidth() {
981
+ const columns = this.getColumnWidth();
982
+ return Math.max(DISPLAY_CONSTANTS.MIN_MESSAGE_WIDTH, Math.min(columns - DISPLAY_CONSTANTS.MESSAGE_PADDING, DISPLAY_CONSTANTS.MAX_MESSAGE_WIDTH));
983
+ }
984
+ formatTelemetryLine(metadata) {
985
+ if (!metadata) {
986
+ return '';
987
+ }
988
+ const parts = [];
989
+ const elapsed = this.formatElapsed(metadata.elapsedMs);
990
+ if (elapsed) {
991
+ const elapsedLabel = theme.metrics?.elapsedLabel ?? theme.accent;
992
+ const elapsedValue = theme.metrics?.elapsedValue ?? theme.secondary;
993
+ parts.push(`${elapsedLabel('elapsed')} ${elapsedValue(elapsed)}`);
994
+ }
995
+ if (!parts.length) {
996
+ return '';
997
+ }
998
+ const separator = theme.ui.muted(' • ');
999
+ return ` ${parts.join(separator)}`;
1000
+ }
1001
+ formatElapsed(elapsedMs) {
1002
+ if (typeof elapsedMs !== 'number' || !Number.isFinite(elapsedMs) || elapsedMs < 0) {
1003
+ return null;
1004
+ }
1005
+ const totalSeconds = Math.max(0, Math.round(elapsedMs / 1000));
1006
+ const minutes = Math.floor(totalSeconds / 60);
1007
+ const seconds = totalSeconds % 60;
1008
+ if (minutes > 0) {
1009
+ return `${minutes}m ${seconds.toString().padStart(2, '0')}s`;
1010
+ }
1011
+ return `${seconds}s`;
1012
+ }
1013
+ buildCommandPalette(commands, options) {
1014
+ if (!commands.length) {
1015
+ return '';
1016
+ }
1017
+ const width = Math.max(DISPLAY_CONSTANTS.MIN_MESSAGE_WIDTH, Math.min(this.getColumnWidth() - 2, DISPLAY_CONSTANTS.MAX_MESSAGE_WIDTH));
1018
+ const indent = ' ';
1019
+ const grouped = this.groupPaletteCommands(commands);
1020
+ const commandWidth = this.computeCommandColumnWidth(commands, width, indent.length);
1021
+ const descWidth = Math.max(DISPLAY_CONSTANTS.MIN_WRAP_WIDTH, width - indent.length - commandWidth - 1);
1022
+ const title = options?.title ?? 'Slash commands';
1023
+ const intro = options?.intro ?? 'Describe a task or pick a command below:';
1024
+ const lines = [];
1025
+ lines.push(theme.gradient.primary(title));
1026
+ const introLines = this.wrapLine(intro, width);
1027
+ for (const line of introLines) {
1028
+ lines.push(theme.ui.muted(line));
1029
+ }
1030
+ lines.push('');
1031
+ grouped.forEach(({ category, items }, index) => {
1032
+ const label = this.formatPaletteCategory(category);
1033
+ if (label) {
1034
+ lines.push(theme.bold(label));
1035
+ }
1036
+ for (const item of items) {
1037
+ const wrappedDesc = this.wrapLine(item.description, descWidth);
1038
+ const paddedCommand = item.command.padEnd(commandWidth);
1039
+ const commandLabel = theme.primary(paddedCommand);
1040
+ const firstLine = wrappedDesc[0] ?? '';
1041
+ lines.push(`${indent}${commandLabel} ${this.colorizePaletteText(firstLine, item.tone)}`);
1042
+ for (const extra of wrappedDesc.slice(1)) {
1043
+ lines.push(`${indent}${' '.repeat(commandWidth)} ${this.colorizePaletteText(extra, item.tone)}`);
1044
+ }
1045
+ }
1046
+ if (index < grouped.length - 1) {
1047
+ lines.push('');
1048
+ }
1049
+ });
1050
+ return lines.join('\n').trimEnd();
1051
+ }
1052
+ groupPaletteCommands(commands) {
1053
+ const FALLBACK = 'other';
1054
+ const groups = new Map();
1055
+ for (const item of commands) {
1056
+ const key = (item.category ?? FALLBACK).toLowerCase();
1057
+ const bucket = groups.get(key) ?? [];
1058
+ bucket.push(item);
1059
+ groups.set(key, bucket);
1060
+ }
1061
+ const order = ['configuration', 'workspace', 'diagnostics', 'other'];
1062
+ const orderedKeys = [
1063
+ ...order.filter((key) => groups.has(key)),
1064
+ ...Array.from(groups.keys()).filter((key) => !order.includes(key)),
1065
+ ];
1066
+ return orderedKeys.map((category) => ({ category, items: groups.get(category) ?? [] }));
1067
+ }
1068
+ computeCommandColumnWidth(commands, totalWidth, indentWidth) {
1069
+ const longest = commands.reduce((max, item) => Math.max(max, this.visibleLength(item.command)), 0);
1070
+ const maxAllowed = Math.max(12, Math.min(longest + 2, Math.floor(totalWidth * 0.35)));
1071
+ const budget = Math.max(10, totalWidth - indentWidth - DISPLAY_CONSTANTS.MIN_WRAP_WIDTH);
1072
+ return Math.min(maxAllowed, budget);
1073
+ }
1074
+ formatPaletteCategory(category) {
1075
+ if (!category) {
1076
+ return 'Other';
1077
+ }
1078
+ switch (category.toLowerCase()) {
1079
+ case 'configuration':
1080
+ return 'Configuration';
1081
+ case 'workspace':
1082
+ return 'Workspace';
1083
+ case 'diagnostics':
1084
+ return 'Diagnostics';
1085
+ case 'other':
1086
+ return 'Other';
1087
+ default:
1088
+ return category[0]?.toUpperCase() + category.slice(1);
1089
+ }
1090
+ }
1091
+ colorizePaletteText(text, tone) {
1092
+ switch (tone) {
1093
+ case 'warn':
1094
+ return theme.warning(text);
1095
+ case 'success':
1096
+ return theme.success(text);
1097
+ case 'info':
1098
+ return theme.info(text);
1099
+ case 'muted':
1100
+ default:
1101
+ return theme.ui.muted(text);
1102
+ }
1103
+ }
1104
+ /**
1105
+ * Wraps text with a prefix on the first line and optional continuation prefix.
1106
+ * Handles multi-line text and word wrapping intelligently.
1107
+ */
1108
+ wrapWithPrefix(text, prefix, options) {
1109
+ if (!text) {
1110
+ return prefix.trimEnd();
1111
+ }
1112
+ const width = Math.max(DISPLAY_CONSTANTS.MIN_ACTION_WIDTH, Math.min(this.getColumnWidth(), DISPLAY_CONSTANTS.MAX_ACTION_WIDTH));
1113
+ const prefixWidth = this.visibleLength(prefix);
1114
+ const available = Math.max(DISPLAY_CONSTANTS.MIN_CONTENT_WIDTH, width - prefixWidth);
1115
+ const indent = typeof options?.continuationPrefix === 'string'
1116
+ ? options.continuationPrefix
1117
+ : ' '.repeat(Math.max(0, prefixWidth));
1118
+ const segments = text.split('\n');
1119
+ const lines = [];
1120
+ let usedPrefix = false;
1121
+ for (const segment of segments) {
1122
+ if (!segment.trim()) {
1123
+ if (usedPrefix) {
1124
+ lines.push(indent);
1125
+ }
1126
+ else {
1127
+ lines.push(prefix.trimEnd());
1128
+ usedPrefix = true;
1129
+ }
1130
+ continue;
1131
+ }
1132
+ const wrapped = this.wrapLine(segment.trim(), available);
1133
+ for (const line of wrapped) {
1134
+ lines.push(!usedPrefix ? `${prefix}${line}` : `${indent}${line}`);
1135
+ usedPrefix = true;
1136
+ }
1137
+ }
1138
+ return lines.join('\n');
1139
+ }
1140
+ resolveStatusColor(status) {
1141
+ switch (status) {
1142
+ case 'success':
1143
+ return theme.success;
1144
+ case 'error':
1145
+ return theme.error;
1146
+ case 'warning':
1147
+ return theme.warning;
1148
+ case 'pending':
1149
+ return theme.info;
1150
+ default:
1151
+ return theme.secondary;
1152
+ }
1153
+ }
1154
+ formatActionIcon(status) {
1155
+ const colorize = this.resolveStatusColor(status);
1156
+ return colorize(`${icons.action}`);
1157
+ }
1158
+ buildClaudeStyleThought(content, durationMs) {
1159
+ // Claude Code style: ∴ Thought for Xs or ✻ Thinking…
1160
+ const thinkingStyle = theme.thinking || {
1161
+ icon: theme.info,
1162
+ text: theme.ui.muted,
1163
+ border: theme.ui.border,
1164
+ label: theme.info,
1165
+ };
1166
+ const width = Math.min(this.getColumnWidth() - 4, 70);
1167
+ const lines = [];
1168
+ // Header: "∴ Thought for Xs" for completed, "✻ Thinking…" for active
1169
+ if (durationMs !== undefined) {
1170
+ const elapsed = this.formatElapsedTime(Math.floor(durationMs / 1000));
1171
+ lines.push(`${theme.info('∴')} Thought for ${elapsed}`);
1172
+ }
1173
+ else {
1174
+ lines.push(`${theme.info('✻')} ${thinkingStyle.label('Thinking…')}`);
1175
+ }
1176
+ // Parse and format the thinking content with simple indentation
1177
+ const contentLines = content.split('\n');
1178
+ const hasContent = contentLines.some(line => line.trim().length > 0);
1179
+ if (hasContent) {
1180
+ lines.push(''); // Visual gap between header and content
1181
+ }
1182
+ for (const line of contentLines) {
1183
+ const trimmed = line.replace(/\s+$/, '');
1184
+ if (!trimmed.trim()) {
1185
+ lines.push(''); // Preserve intentional blank lines inside the block
1186
+ continue;
1187
+ }
1188
+ const wrapped = this.wrapLine(trimmed, width - 4);
1189
+ for (const wrappedLine of wrapped) {
1190
+ lines.push(` ${thinkingStyle.text(wrappedLine)}`);
1191
+ }
1192
+ }
1193
+ return lines.join('\n');
1194
+ }
1195
+ /**
1196
+ * Show a thinking block with rich formatting (public method for external use)
1197
+ * @param content The thinking content to display
1198
+ * @param durationMs Optional duration in milliseconds to show "Thought for Xs"
1199
+ */
1200
+ showThinkingBlock(content, durationMs) {
1201
+ this.clearSpinnerIfActive();
1202
+ const block = this.buildClaudeStyleThought(content, durationMs);
1203
+ this.withOutput(() => {
1204
+ this.writeLine();
1205
+ this.writeLine(block);
1206
+ this.writeLine();
1207
+ this.writeLine(); // Extra newline for better visual separation
1208
+ });
1209
+ }
1210
+ buildSubActionPrefixes(status, isLast) {
1211
+ if (isLast) {
1212
+ const colorize = this.resolveStatusColor(status);
1213
+ // Claude Code style: use ⎿ for sub-action result/detail prefix
1214
+ return {
1215
+ prefix: ` ${colorize(icons.subaction)} `,
1216
+ continuation: ' ',
1217
+ };
1218
+ }
1219
+ const branch = theme.ui.muted('│');
1220
+ return {
1221
+ prefix: ` ${branch} `,
1222
+ continuation: ` ${branch} `,
1223
+ };
1224
+ }
1225
+ /**
1226
+ * Wraps a single line of text to fit within the specified width.
1227
+ * Intelligently handles word breaking and preserves spaces.
1228
+ */
1229
+ wrapLine(text, width) {
1230
+ // Handle edge cases
1231
+ if (width <= 0) {
1232
+ return [text];
1233
+ }
1234
+ if (!text) {
1235
+ return [''];
1236
+ }
1237
+ if (text.length <= width) {
1238
+ return [text];
1239
+ }
1240
+ const words = text.split(/\s+/).filter(Boolean);
1241
+ // If no words, chunk the entire text
1242
+ if (!words.length) {
1243
+ return this.chunkWord(text, width);
1244
+ }
1245
+ const lines = [];
1246
+ let current = '';
1247
+ for (const word of words) {
1248
+ const appendResult = this.tryAppendWord(current, word, width);
1249
+ if (appendResult.shouldFlush) {
1250
+ lines.push(current);
1251
+ }
1252
+ if (appendResult.chunks.length > 0) {
1253
+ // Word was too long and was chunked
1254
+ lines.push(...appendResult.chunks.slice(0, -1));
1255
+ current = appendResult.chunks[appendResult.chunks.length - 1] ?? '';
1256
+ }
1257
+ else {
1258
+ current = appendResult.newCurrent;
1259
+ }
1260
+ }
1261
+ if (current) {
1262
+ lines.push(current);
1263
+ }
1264
+ return lines.length ? lines : [''];
1265
+ }
1266
+ /**
1267
+ * Attempts to append a word to the current line.
1268
+ * Returns instructions on how to handle the word.
1269
+ */
1270
+ tryAppendWord(current, word, width) {
1271
+ if (!word) {
1272
+ return { shouldFlush: false, newCurrent: current, chunks: [] };
1273
+ }
1274
+ // Empty current line - start new line with word
1275
+ if (!current) {
1276
+ if (word.length <= width) {
1277
+ return { shouldFlush: false, newCurrent: word, chunks: [] };
1278
+ }
1279
+ // Word too long, need to chunk it
1280
+ return { shouldFlush: false, newCurrent: '', chunks: this.chunkWord(word, width) };
1281
+ }
1282
+ // Word fits on current line with space
1283
+ if (current.length + 1 + word.length <= width) {
1284
+ return { shouldFlush: false, newCurrent: `${current} ${word}`, chunks: [] };
1285
+ }
1286
+ // Word doesn't fit - flush current and start new line
1287
+ if (word.length <= width) {
1288
+ return { shouldFlush: true, newCurrent: word, chunks: [] };
1289
+ }
1290
+ // Word doesn't fit and is too long - flush current and chunk word
1291
+ return { shouldFlush: true, newCurrent: '', chunks: this.chunkWord(word, width) };
1292
+ }
1293
+ /**
1294
+ * Splits a long word into chunks that fit within the specified width.
1295
+ * Used when a single word is too long to fit on one line.
1296
+ */
1297
+ chunkWord(word, width) {
1298
+ if (width <= 0 || !word) {
1299
+ return word ? [word] : [''];
1300
+ }
1301
+ const chunks = [];
1302
+ for (let i = 0; i < word.length; i += width) {
1303
+ chunks.push(word.slice(i, i + width));
1304
+ }
1305
+ return chunks.length > 0 ? chunks : [''];
1306
+ }
1307
+ /**
1308
+ * Returns the visible length of a string, excluding ANSI escape codes.
1309
+ */
1310
+ visibleLength(value) {
1311
+ if (!value) {
1312
+ return 0;
1313
+ }
1314
+ return this.stripAnsi(value).length;
1315
+ }
1316
+ /**
1317
+ * Removes ANSI escape codes from a string to get the visible text.
1318
+ * Uses the standard ANSI escape sequence pattern.
1319
+ */
1320
+ stripAnsi(value) {
1321
+ if (!value) {
1322
+ return '';
1323
+ }
1324
+ return value.replace(/\u001B\[[0-?]*[ -/]*[@-~]/g, '');
1325
+ }
1326
+ }
1327
+ export const display = new Display();
1328
+ //# sourceMappingURL=display.js.map