@trenchwork/erosolar 1.1.40

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 (600) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +225 -0
  3. package/agents/erosolar-code.rules.json +199 -0
  4. package/dist/bin/cliMode.d.ts +8 -0
  5. package/dist/bin/cliMode.d.ts.map +1 -0
  6. package/dist/bin/cliMode.js +20 -0
  7. package/dist/bin/cliMode.js.map +1 -0
  8. package/dist/bin/deepseek.d.ts +3 -0
  9. package/dist/bin/deepseek.d.ts.map +1 -0
  10. package/dist/bin/deepseek.js +203 -0
  11. package/dist/bin/deepseek.js.map +1 -0
  12. package/dist/bin/erosolar.d.ts +7 -0
  13. package/dist/bin/erosolar.d.ts.map +1 -0
  14. package/dist/bin/erosolar.js +7 -0
  15. package/dist/bin/erosolar.js.map +1 -0
  16. package/dist/bin/selfTest.d.ts +14 -0
  17. package/dist/bin/selfTest.d.ts.map +1 -0
  18. package/dist/bin/selfTest.js +298 -0
  19. package/dist/bin/selfTest.js.map +1 -0
  20. package/dist/capabilities/baseCapability.d.ts +72 -0
  21. package/dist/capabilities/baseCapability.d.ts.map +1 -0
  22. package/dist/capabilities/baseCapability.js +183 -0
  23. package/dist/capabilities/baseCapability.js.map +1 -0
  24. package/dist/capabilities/bashCapability.d.ts +13 -0
  25. package/dist/capabilities/bashCapability.d.ts.map +1 -0
  26. package/dist/capabilities/bashCapability.js +24 -0
  27. package/dist/capabilities/bashCapability.js.map +1 -0
  28. package/dist/capabilities/editCapability.d.ts +17 -0
  29. package/dist/capabilities/editCapability.d.ts.map +1 -0
  30. package/dist/capabilities/editCapability.js +27 -0
  31. package/dist/capabilities/editCapability.js.map +1 -0
  32. package/dist/capabilities/enhancedGitCapability.d.ts +7 -0
  33. package/dist/capabilities/enhancedGitCapability.d.ts.map +1 -0
  34. package/dist/capabilities/enhancedGitCapability.js +220 -0
  35. package/dist/capabilities/enhancedGitCapability.js.map +1 -0
  36. package/dist/capabilities/filesystemCapability.d.ts +13 -0
  37. package/dist/capabilities/filesystemCapability.d.ts.map +1 -0
  38. package/dist/capabilities/filesystemCapability.js +24 -0
  39. package/dist/capabilities/filesystemCapability.js.map +1 -0
  40. package/dist/capabilities/gitHistoryCapability.d.ts +6 -0
  41. package/dist/capabilities/gitHistoryCapability.d.ts.map +1 -0
  42. package/dist/capabilities/gitHistoryCapability.js +184 -0
  43. package/dist/capabilities/gitHistoryCapability.js.map +1 -0
  44. package/dist/capabilities/hitlCapability.d.ts +18 -0
  45. package/dist/capabilities/hitlCapability.d.ts.map +1 -0
  46. package/dist/capabilities/hitlCapability.js +29 -0
  47. package/dist/capabilities/hitlCapability.js.map +1 -0
  48. package/dist/capabilities/index.d.ts +11 -0
  49. package/dist/capabilities/index.d.ts.map +1 -0
  50. package/dist/capabilities/index.js +16 -0
  51. package/dist/capabilities/index.js.map +1 -0
  52. package/dist/capabilities/memoryCapability.d.ts +10 -0
  53. package/dist/capabilities/memoryCapability.d.ts.map +1 -0
  54. package/dist/capabilities/memoryCapability.js +22 -0
  55. package/dist/capabilities/memoryCapability.js.map +1 -0
  56. package/dist/capabilities/notebookCapability.d.ts +6 -0
  57. package/dist/capabilities/notebookCapability.d.ts.map +1 -0
  58. package/dist/capabilities/notebookCapability.js +17 -0
  59. package/dist/capabilities/notebookCapability.js.map +1 -0
  60. package/dist/capabilities/searchCapability.d.ts +19 -0
  61. package/dist/capabilities/searchCapability.d.ts.map +1 -0
  62. package/dist/capabilities/searchCapability.js +29 -0
  63. package/dist/capabilities/searchCapability.js.map +1 -0
  64. package/dist/capabilities/skillCapability.d.ts +6 -0
  65. package/dist/capabilities/skillCapability.d.ts.map +1 -0
  66. package/dist/capabilities/skillCapability.js +17 -0
  67. package/dist/capabilities/skillCapability.js.map +1 -0
  68. package/dist/capabilities/todoCapability.d.ts +11 -0
  69. package/dist/capabilities/todoCapability.d.ts.map +1 -0
  70. package/dist/capabilities/todoCapability.js +22 -0
  71. package/dist/capabilities/todoCapability.js.map +1 -0
  72. package/dist/capabilities/toolManifest.d.ts +3 -0
  73. package/dist/capabilities/toolManifest.d.ts.map +1 -0
  74. package/dist/capabilities/toolManifest.js +163 -0
  75. package/dist/capabilities/toolManifest.js.map +1 -0
  76. package/dist/capabilities/toolRegistry.d.ts +25 -0
  77. package/dist/capabilities/toolRegistry.d.ts.map +1 -0
  78. package/dist/capabilities/toolRegistry.js +150 -0
  79. package/dist/capabilities/toolRegistry.js.map +1 -0
  80. package/dist/capabilities/unifiedCodingCapability.d.ts +62 -0
  81. package/dist/capabilities/unifiedCodingCapability.d.ts.map +1 -0
  82. package/dist/capabilities/unifiedCodingCapability.js +790 -0
  83. package/dist/capabilities/unifiedCodingCapability.js.map +1 -0
  84. package/dist/capabilities/webCapability.d.ts +23 -0
  85. package/dist/capabilities/webCapability.d.ts.map +1 -0
  86. package/dist/capabilities/webCapability.js +33 -0
  87. package/dist/capabilities/webCapability.js.map +1 -0
  88. package/dist/config.d.ts +25 -0
  89. package/dist/config.d.ts.map +1 -0
  90. package/dist/config.js +184 -0
  91. package/dist/config.js.map +1 -0
  92. package/dist/contracts/agent-profiles.schema.json +43 -0
  93. package/dist/contracts/agent-schemas.json +470 -0
  94. package/dist/contracts/models.schema.json +9 -0
  95. package/dist/contracts/module-schema.json +367 -0
  96. package/dist/contracts/schemas/agent-profile.schema.json +157 -0
  97. package/dist/contracts/schemas/agent-rules.schema.json +238 -0
  98. package/dist/contracts/schemas/agent-schemas.schema.json +528 -0
  99. package/dist/contracts/schemas/agent.schema.json +90 -0
  100. package/dist/contracts/schemas/tool-selection.schema.json +174 -0
  101. package/dist/contracts/tools.schema.json +42 -0
  102. package/dist/contracts/unified-schema.json +660 -0
  103. package/dist/contracts/v1/agent.d.ts +179 -0
  104. package/dist/contracts/v1/agent.d.ts.map +1 -0
  105. package/dist/contracts/v1/agent.js +8 -0
  106. package/dist/contracts/v1/agent.js.map +1 -0
  107. package/dist/contracts/v1/agentProfileManifest.d.ts +60 -0
  108. package/dist/contracts/v1/agentProfileManifest.d.ts.map +1 -0
  109. package/dist/contracts/v1/agentProfileManifest.js +9 -0
  110. package/dist/contracts/v1/agentProfileManifest.js.map +1 -0
  111. package/dist/contracts/v1/agentRules.d.ts +60 -0
  112. package/dist/contracts/v1/agentRules.d.ts.map +1 -0
  113. package/dist/contracts/v1/agentRules.js +10 -0
  114. package/dist/contracts/v1/agentRules.js.map +1 -0
  115. package/dist/contracts/v1/provider.d.ts +149 -0
  116. package/dist/contracts/v1/provider.d.ts.map +1 -0
  117. package/dist/contracts/v1/provider.js +7 -0
  118. package/dist/contracts/v1/provider.js.map +1 -0
  119. package/dist/contracts/v1/tool.d.ts +136 -0
  120. package/dist/contracts/v1/tool.d.ts.map +1 -0
  121. package/dist/contracts/v1/tool.js +7 -0
  122. package/dist/contracts/v1/tool.js.map +1 -0
  123. package/dist/contracts/v1/toolAccess.d.ts +43 -0
  124. package/dist/contracts/v1/toolAccess.d.ts.map +1 -0
  125. package/dist/contracts/v1/toolAccess.js +9 -0
  126. package/dist/contracts/v1/toolAccess.js.map +1 -0
  127. package/dist/core/adversarial.d.ts +38 -0
  128. package/dist/core/adversarial.d.ts.map +1 -0
  129. package/dist/core/adversarial.js +106 -0
  130. package/dist/core/adversarial.js.map +1 -0
  131. package/dist/core/agent.d.ts +329 -0
  132. package/dist/core/agent.d.ts.map +1 -0
  133. package/dist/core/agent.js +1668 -0
  134. package/dist/core/agent.js.map +1 -0
  135. package/dist/core/agentProfileManifest.d.ts +3 -0
  136. package/dist/core/agentProfileManifest.d.ts.map +1 -0
  137. package/dist/core/agentProfileManifest.js +188 -0
  138. package/dist/core/agentProfileManifest.js.map +1 -0
  139. package/dist/core/agentProfiles.d.ts +22 -0
  140. package/dist/core/agentProfiles.d.ts.map +1 -0
  141. package/dist/core/agentProfiles.js +35 -0
  142. package/dist/core/agentProfiles.js.map +1 -0
  143. package/dist/core/agentRegistry.d.ts +111 -0
  144. package/dist/core/agentRegistry.d.ts.map +1 -0
  145. package/dist/core/agentRegistry.js +229 -0
  146. package/dist/core/agentRegistry.js.map +1 -0
  147. package/dist/core/agentRulebook.d.ts +11 -0
  148. package/dist/core/agentRulebook.d.ts.map +1 -0
  149. package/dist/core/agentRulebook.js +136 -0
  150. package/dist/core/agentRulebook.js.map +1 -0
  151. package/dist/core/agentSchemaLoader.d.ts +131 -0
  152. package/dist/core/agentSchemaLoader.d.ts.map +1 -0
  153. package/dist/core/agentSchemaLoader.js +235 -0
  154. package/dist/core/agentSchemaLoader.js.map +1 -0
  155. package/dist/core/aiErrorFixer.d.ts +57 -0
  156. package/dist/core/aiErrorFixer.d.ts.map +1 -0
  157. package/dist/core/aiErrorFixer.js +214 -0
  158. package/dist/core/aiErrorFixer.js.map +1 -0
  159. package/dist/core/bashCommandGuidance.d.ts +16 -0
  160. package/dist/core/bashCommandGuidance.d.ts.map +1 -0
  161. package/dist/core/bashCommandGuidance.js +40 -0
  162. package/dist/core/bashCommandGuidance.js.map +1 -0
  163. package/dist/core/constants.d.ts +31 -0
  164. package/dist/core/constants.d.ts.map +1 -0
  165. package/dist/core/constants.js +62 -0
  166. package/dist/core/constants.js.map +1 -0
  167. package/dist/core/contextManager.d.ts +271 -0
  168. package/dist/core/contextManager.d.ts.map +1 -0
  169. package/dist/core/contextManager.js +1073 -0
  170. package/dist/core/contextManager.js.map +1 -0
  171. package/dist/core/contextWindow.d.ts +42 -0
  172. package/dist/core/contextWindow.d.ts.map +1 -0
  173. package/dist/core/contextWindow.js +123 -0
  174. package/dist/core/contextWindow.js.map +1 -0
  175. package/dist/core/customCommands.d.ts +19 -0
  176. package/dist/core/customCommands.d.ts.map +1 -0
  177. package/dist/core/customCommands.js +85 -0
  178. package/dist/core/customCommands.js.map +1 -0
  179. package/dist/core/errors/apiKeyErrors.d.ts +11 -0
  180. package/dist/core/errors/apiKeyErrors.d.ts.map +1 -0
  181. package/dist/core/errors/apiKeyErrors.js +159 -0
  182. package/dist/core/errors/apiKeyErrors.js.map +1 -0
  183. package/dist/core/errors/errorTypes.d.ts +111 -0
  184. package/dist/core/errors/errorTypes.d.ts.map +1 -0
  185. package/dist/core/errors/errorTypes.js +345 -0
  186. package/dist/core/errors/errorTypes.js.map +1 -0
  187. package/dist/core/errors/index.d.ts +50 -0
  188. package/dist/core/errors/index.d.ts.map +1 -0
  189. package/dist/core/errors/index.js +156 -0
  190. package/dist/core/errors/index.js.map +1 -0
  191. package/dist/core/errors/networkErrors.d.ts +14 -0
  192. package/dist/core/errors/networkErrors.d.ts.map +1 -0
  193. package/dist/core/errors/networkErrors.js +53 -0
  194. package/dist/core/errors/networkErrors.js.map +1 -0
  195. package/dist/core/errors/safetyValidator.d.ts +109 -0
  196. package/dist/core/errors/safetyValidator.d.ts.map +1 -0
  197. package/dist/core/errors/safetyValidator.js +272 -0
  198. package/dist/core/errors/safetyValidator.js.map +1 -0
  199. package/dist/core/errors.d.ts +4 -0
  200. package/dist/core/errors.d.ts.map +1 -0
  201. package/dist/core/errors.js +33 -0
  202. package/dist/core/errors.js.map +1 -0
  203. package/dist/core/finalResponseFormatter.d.ts +10 -0
  204. package/dist/core/finalResponseFormatter.d.ts.map +1 -0
  205. package/dist/core/finalResponseFormatter.js +14 -0
  206. package/dist/core/finalResponseFormatter.js.map +1 -0
  207. package/dist/core/guardrails.d.ts +146 -0
  208. package/dist/core/guardrails.d.ts.map +1 -0
  209. package/dist/core/guardrails.js +361 -0
  210. package/dist/core/guardrails.js.map +1 -0
  211. package/dist/core/hitl.d.ts +119 -0
  212. package/dist/core/hitl.d.ts.map +1 -0
  213. package/dist/core/hitl.js +387 -0
  214. package/dist/core/hitl.js.map +1 -0
  215. package/dist/core/hooks.d.ts +95 -0
  216. package/dist/core/hooks.d.ts.map +1 -0
  217. package/dist/core/hooks.js +236 -0
  218. package/dist/core/hooks.js.map +1 -0
  219. package/dist/core/index.d.ts +7 -0
  220. package/dist/core/index.d.ts.map +1 -0
  221. package/dist/core/index.js +7 -0
  222. package/dist/core/index.js.map +1 -0
  223. package/dist/core/inputProtection.d.ts +122 -0
  224. package/dist/core/inputProtection.d.ts.map +1 -0
  225. package/dist/core/inputProtection.js +422 -0
  226. package/dist/core/inputProtection.js.map +1 -0
  227. package/dist/core/modelDiscovery.d.ts +105 -0
  228. package/dist/core/modelDiscovery.d.ts.map +1 -0
  229. package/dist/core/modelDiscovery.js +768 -0
  230. package/dist/core/modelDiscovery.js.map +1 -0
  231. package/dist/core/multilinePasteHandler.d.ts +35 -0
  232. package/dist/core/multilinePasteHandler.d.ts.map +1 -0
  233. package/dist/core/multilinePasteHandler.js +81 -0
  234. package/dist/core/multilinePasteHandler.js.map +1 -0
  235. package/dist/core/preferences.d.ts +67 -0
  236. package/dist/core/preferences.d.ts.map +1 -0
  237. package/dist/core/preferences.js +315 -0
  238. package/dist/core/preferences.js.map +1 -0
  239. package/dist/core/providerKeys.d.ts +20 -0
  240. package/dist/core/providerKeys.d.ts.map +1 -0
  241. package/dist/core/providerKeys.js +40 -0
  242. package/dist/core/providerKeys.js.map +1 -0
  243. package/dist/core/refusalDetection.d.ts +2 -0
  244. package/dist/core/refusalDetection.d.ts.map +1 -0
  245. package/dist/core/refusalDetection.js +51 -0
  246. package/dist/core/refusalDetection.js.map +1 -0
  247. package/dist/core/resultVerification.d.ts +47 -0
  248. package/dist/core/resultVerification.d.ts.map +1 -0
  249. package/dist/core/resultVerification.js +126 -0
  250. package/dist/core/resultVerification.js.map +1 -0
  251. package/dist/core/schemaValidator.d.ts +49 -0
  252. package/dist/core/schemaValidator.d.ts.map +1 -0
  253. package/dist/core/schemaValidator.js +234 -0
  254. package/dist/core/schemaValidator.js.map +1 -0
  255. package/dist/core/secretStore.d.ts +48 -0
  256. package/dist/core/secretStore.d.ts.map +1 -0
  257. package/dist/core/secretStore.js +266 -0
  258. package/dist/core/secretStore.js.map +1 -0
  259. package/dist/core/sessionStorage.d.ts +10 -0
  260. package/dist/core/sessionStorage.d.ts.map +1 -0
  261. package/dist/core/sessionStorage.js +46 -0
  262. package/dist/core/sessionStorage.js.map +1 -0
  263. package/dist/core/sessionStore.d.ts +35 -0
  264. package/dist/core/sessionStore.d.ts.map +1 -0
  265. package/dist/core/sessionStore.js +191 -0
  266. package/dist/core/sessionStore.js.map +1 -0
  267. package/dist/core/shutdown.d.ts +34 -0
  268. package/dist/core/shutdown.d.ts.map +1 -0
  269. package/dist/core/shutdown.js +186 -0
  270. package/dist/core/shutdown.js.map +1 -0
  271. package/dist/core/sudoPasswordManager.d.ts +52 -0
  272. package/dist/core/sudoPasswordManager.d.ts.map +1 -0
  273. package/dist/core/sudoPasswordManager.js +115 -0
  274. package/dist/core/sudoPasswordManager.js.map +1 -0
  275. package/dist/core/taskCompletionDetector.d.ts +117 -0
  276. package/dist/core/taskCompletionDetector.d.ts.map +1 -0
  277. package/dist/core/taskCompletionDetector.js +532 -0
  278. package/dist/core/taskCompletionDetector.js.map +1 -0
  279. package/dist/core/testFailureMonitor.d.ts +67 -0
  280. package/dist/core/testFailureMonitor.d.ts.map +1 -0
  281. package/dist/core/testFailureMonitor.js +262 -0
  282. package/dist/core/testFailureMonitor.js.map +1 -0
  283. package/dist/core/toolPreconditions.d.ts +34 -0
  284. package/dist/core/toolPreconditions.d.ts.map +1 -0
  285. package/dist/core/toolPreconditions.js +242 -0
  286. package/dist/core/toolPreconditions.js.map +1 -0
  287. package/dist/core/toolRuntime.d.ts +192 -0
  288. package/dist/core/toolRuntime.d.ts.map +1 -0
  289. package/dist/core/toolRuntime.js +477 -0
  290. package/dist/core/toolRuntime.js.map +1 -0
  291. package/dist/core/types/utilityTypes.d.ts +183 -0
  292. package/dist/core/types/utilityTypes.d.ts.map +1 -0
  293. package/dist/core/types/utilityTypes.js +273 -0
  294. package/dist/core/types/utilityTypes.js.map +1 -0
  295. package/dist/core/types.d.ts +334 -0
  296. package/dist/core/types.d.ts.map +1 -0
  297. package/dist/core/types.js +76 -0
  298. package/dist/core/types.js.map +1 -0
  299. package/dist/core/updateChecker.d.ts +148 -0
  300. package/dist/core/updateChecker.d.ts.map +1 -0
  301. package/dist/core/updateChecker.js +599 -0
  302. package/dist/core/updateChecker.js.map +1 -0
  303. package/dist/headless/interactiveShell.d.ts +39 -0
  304. package/dist/headless/interactiveShell.d.ts.map +1 -0
  305. package/dist/headless/interactiveShell.js +2052 -0
  306. package/dist/headless/interactiveShell.js.map +1 -0
  307. package/dist/headless/printMode.d.ts +17 -0
  308. package/dist/headless/printMode.d.ts.map +1 -0
  309. package/dist/headless/printMode.js +40 -0
  310. package/dist/headless/printMode.js.map +1 -0
  311. package/dist/leanAgent.d.ts +73 -0
  312. package/dist/leanAgent.d.ts.map +1 -0
  313. package/dist/leanAgent.js +177 -0
  314. package/dist/leanAgent.js.map +1 -0
  315. package/dist/plugins/index.d.ts +49 -0
  316. package/dist/plugins/index.d.ts.map +1 -0
  317. package/dist/plugins/index.js +104 -0
  318. package/dist/plugins/index.js.map +1 -0
  319. package/dist/plugins/providers/anthropic/index.d.ts +9 -0
  320. package/dist/plugins/providers/anthropic/index.d.ts.map +1 -0
  321. package/dist/plugins/providers/anthropic/index.js +48 -0
  322. package/dist/plugins/providers/anthropic/index.js.map +1 -0
  323. package/dist/plugins/providers/deepseek/index.d.ts +11 -0
  324. package/dist/plugins/providers/deepseek/index.d.ts.map +1 -0
  325. package/dist/plugins/providers/deepseek/index.js +59 -0
  326. package/dist/plugins/providers/deepseek/index.js.map +1 -0
  327. package/dist/plugins/providers/index.d.ts +2 -0
  328. package/dist/plugins/providers/index.d.ts.map +1 -0
  329. package/dist/plugins/providers/index.js +17 -0
  330. package/dist/plugins/providers/index.js.map +1 -0
  331. package/dist/plugins/providers/openai/index.d.ts +10 -0
  332. package/dist/plugins/providers/openai/index.d.ts.map +1 -0
  333. package/dist/plugins/providers/openai/index.js +47 -0
  334. package/dist/plugins/providers/openai/index.js.map +1 -0
  335. package/dist/plugins/providers/xai/index.d.ts +10 -0
  336. package/dist/plugins/providers/xai/index.d.ts.map +1 -0
  337. package/dist/plugins/providers/xai/index.js +47 -0
  338. package/dist/plugins/providers/xai/index.js.map +1 -0
  339. package/dist/plugins/tools/agentSpawning/agentSpawningPlugin.d.ts +10 -0
  340. package/dist/plugins/tools/agentSpawning/agentSpawningPlugin.d.ts.map +1 -0
  341. package/dist/plugins/tools/agentSpawning/agentSpawningPlugin.js +110 -0
  342. package/dist/plugins/tools/agentSpawning/agentSpawningPlugin.js.map +1 -0
  343. package/dist/plugins/tools/bash/localBashPlugin.d.ts +3 -0
  344. package/dist/plugins/tools/bash/localBashPlugin.d.ts.map +1 -0
  345. package/dist/plugins/tools/bash/localBashPlugin.js +14 -0
  346. package/dist/plugins/tools/bash/localBashPlugin.js.map +1 -0
  347. package/dist/plugins/tools/edit/editPlugin.d.ts +9 -0
  348. package/dist/plugins/tools/edit/editPlugin.d.ts.map +1 -0
  349. package/dist/plugins/tools/edit/editPlugin.js +15 -0
  350. package/dist/plugins/tools/edit/editPlugin.js.map +1 -0
  351. package/dist/plugins/tools/enhancedGit/enhancedGitPlugin.d.ts +3 -0
  352. package/dist/plugins/tools/enhancedGit/enhancedGitPlugin.d.ts.map +1 -0
  353. package/dist/plugins/tools/enhancedGit/enhancedGitPlugin.js +9 -0
  354. package/dist/plugins/tools/enhancedGit/enhancedGitPlugin.js.map +1 -0
  355. package/dist/plugins/tools/filesystem/localFilesystemPlugin.d.ts +3 -0
  356. package/dist/plugins/tools/filesystem/localFilesystemPlugin.d.ts.map +1 -0
  357. package/dist/plugins/tools/filesystem/localFilesystemPlugin.js +14 -0
  358. package/dist/plugins/tools/filesystem/localFilesystemPlugin.js.map +1 -0
  359. package/dist/plugins/tools/gitHistory/gitHistoryPlugin.d.ts +3 -0
  360. package/dist/plugins/tools/gitHistory/gitHistoryPlugin.d.ts.map +1 -0
  361. package/dist/plugins/tools/gitHistory/gitHistoryPlugin.js +9 -0
  362. package/dist/plugins/tools/gitHistory/gitHistoryPlugin.js.map +1 -0
  363. package/dist/plugins/tools/index.d.ts +3 -0
  364. package/dist/plugins/tools/index.d.ts.map +1 -0
  365. package/dist/plugins/tools/index.js +3 -0
  366. package/dist/plugins/tools/index.js.map +1 -0
  367. package/dist/plugins/tools/integrity/integrityPlugin.d.ts +3 -0
  368. package/dist/plugins/tools/integrity/integrityPlugin.d.ts.map +1 -0
  369. package/dist/plugins/tools/integrity/integrityPlugin.js +31 -0
  370. package/dist/plugins/tools/integrity/integrityPlugin.js.map +1 -0
  371. package/dist/plugins/tools/mcp/mcpPlugin.d.ts +3 -0
  372. package/dist/plugins/tools/mcp/mcpPlugin.d.ts.map +1 -0
  373. package/dist/plugins/tools/mcp/mcpPlugin.js +27 -0
  374. package/dist/plugins/tools/mcp/mcpPlugin.js.map +1 -0
  375. package/dist/plugins/tools/nodeDefaults.d.ts +13 -0
  376. package/dist/plugins/tools/nodeDefaults.d.ts.map +1 -0
  377. package/dist/plugins/tools/nodeDefaults.js +33 -0
  378. package/dist/plugins/tools/nodeDefaults.js.map +1 -0
  379. package/dist/plugins/tools/orchestration/orchestrationPlugin.d.ts +3 -0
  380. package/dist/plugins/tools/orchestration/orchestrationPlugin.d.ts.map +1 -0
  381. package/dist/plugins/tools/orchestration/orchestrationPlugin.js +340 -0
  382. package/dist/plugins/tools/orchestration/orchestrationPlugin.js.map +1 -0
  383. package/dist/plugins/tools/registry.d.ts +22 -0
  384. package/dist/plugins/tools/registry.d.ts.map +1 -0
  385. package/dist/plugins/tools/registry.js +58 -0
  386. package/dist/plugins/tools/registry.js.map +1 -0
  387. package/dist/plugins/tools/search/localSearchPlugin.d.ts +3 -0
  388. package/dist/plugins/tools/search/localSearchPlugin.d.ts.map +1 -0
  389. package/dist/plugins/tools/search/localSearchPlugin.js +14 -0
  390. package/dist/plugins/tools/search/localSearchPlugin.js.map +1 -0
  391. package/dist/plugins/tools/skills/skillPlugin.d.ts +3 -0
  392. package/dist/plugins/tools/skills/skillPlugin.d.ts.map +1 -0
  393. package/dist/plugins/tools/skills/skillPlugin.js +27 -0
  394. package/dist/plugins/tools/skills/skillPlugin.js.map +1 -0
  395. package/dist/plugins/tools/todo/todoPlugin.d.ts +3 -0
  396. package/dist/plugins/tools/todo/todoPlugin.d.ts.map +1 -0
  397. package/dist/plugins/tools/todo/todoPlugin.js +10 -0
  398. package/dist/plugins/tools/todo/todoPlugin.js.map +1 -0
  399. package/dist/providers/baseProvider.d.ts +148 -0
  400. package/dist/providers/baseProvider.d.ts.map +1 -0
  401. package/dist/providers/baseProvider.js +284 -0
  402. package/dist/providers/baseProvider.js.map +1 -0
  403. package/dist/providers/openaiChatCompletionsProvider.d.ts +70 -0
  404. package/dist/providers/openaiChatCompletionsProvider.d.ts.map +1 -0
  405. package/dist/providers/openaiChatCompletionsProvider.js +1043 -0
  406. package/dist/providers/openaiChatCompletionsProvider.js.map +1 -0
  407. package/dist/providers/providerFactory.d.ts +22 -0
  408. package/dist/providers/providerFactory.d.ts.map +1 -0
  409. package/dist/providers/providerFactory.js +25 -0
  410. package/dist/providers/providerFactory.js.map +1 -0
  411. package/dist/providers/resilientProvider.d.ts +103 -0
  412. package/dist/providers/resilientProvider.d.ts.map +1 -0
  413. package/dist/providers/resilientProvider.js +468 -0
  414. package/dist/providers/resilientProvider.js.map +1 -0
  415. package/dist/runtime/agentController.d.ts +121 -0
  416. package/dist/runtime/agentController.d.ts.map +1 -0
  417. package/dist/runtime/agentController.js +739 -0
  418. package/dist/runtime/agentController.js.map +1 -0
  419. package/dist/runtime/agentHost.d.ts +61 -0
  420. package/dist/runtime/agentHost.d.ts.map +1 -0
  421. package/dist/runtime/agentHost.js +158 -0
  422. package/dist/runtime/agentHost.js.map +1 -0
  423. package/dist/runtime/agentSession.d.ts +49 -0
  424. package/dist/runtime/agentSession.d.ts.map +1 -0
  425. package/dist/runtime/agentSession.js +218 -0
  426. package/dist/runtime/agentSession.js.map +1 -0
  427. package/dist/runtime/agentSpawningWiring.d.ts +23 -0
  428. package/dist/runtime/agentSpawningWiring.d.ts.map +1 -0
  429. package/dist/runtime/agentSpawningWiring.js +119 -0
  430. package/dist/runtime/agentSpawningWiring.js.map +1 -0
  431. package/dist/runtime/agentWorkerPool.d.ts +167 -0
  432. package/dist/runtime/agentWorkerPool.d.ts.map +1 -0
  433. package/dist/runtime/agentWorkerPool.js +435 -0
  434. package/dist/runtime/agentWorkerPool.js.map +1 -0
  435. package/dist/runtime/node.d.ts +7 -0
  436. package/dist/runtime/node.d.ts.map +1 -0
  437. package/dist/runtime/node.js +50 -0
  438. package/dist/runtime/node.js.map +1 -0
  439. package/dist/runtime/universal.d.ts +18 -0
  440. package/dist/runtime/universal.d.ts.map +1 -0
  441. package/dist/runtime/universal.js +21 -0
  442. package/dist/runtime/universal.js.map +1 -0
  443. package/dist/shell/autoExecutor.d.ts +70 -0
  444. package/dist/shell/autoExecutor.d.ts.map +1 -0
  445. package/dist/shell/autoExecutor.js +320 -0
  446. package/dist/shell/autoExecutor.js.map +1 -0
  447. package/dist/shell/commandRegistry.d.ts +122 -0
  448. package/dist/shell/commandRegistry.d.ts.map +1 -0
  449. package/dist/shell/commandRegistry.js +355 -0
  450. package/dist/shell/commandRegistry.js.map +1 -0
  451. package/dist/shell/composableMessage.d.ts +178 -0
  452. package/dist/shell/composableMessage.d.ts.map +1 -0
  453. package/dist/shell/composableMessage.js +384 -0
  454. package/dist/shell/composableMessage.js.map +1 -0
  455. package/dist/shell/liveStatus.d.ts +27 -0
  456. package/dist/shell/liveStatus.d.ts.map +1 -0
  457. package/dist/shell/liveStatus.js +53 -0
  458. package/dist/shell/liveStatus.js.map +1 -0
  459. package/dist/shell/systemPrompt.d.ts +12 -0
  460. package/dist/shell/systemPrompt.d.ts.map +1 -0
  461. package/dist/shell/systemPrompt.js +16 -0
  462. package/dist/shell/systemPrompt.js.map +1 -0
  463. package/dist/shell/vimMode.d.ts +66 -0
  464. package/dist/shell/vimMode.d.ts.map +1 -0
  465. package/dist/shell/vimMode.js +435 -0
  466. package/dist/shell/vimMode.js.map +1 -0
  467. package/dist/tools/bashTools.d.ts +11 -0
  468. package/dist/tools/bashTools.d.ts.map +1 -0
  469. package/dist/tools/bashTools.js +779 -0
  470. package/dist/tools/bashTools.js.map +1 -0
  471. package/dist/tools/diffUtils.d.ts +43 -0
  472. package/dist/tools/diffUtils.d.ts.map +1 -0
  473. package/dist/tools/diffUtils.js +607 -0
  474. package/dist/tools/diffUtils.js.map +1 -0
  475. package/dist/tools/editTools.d.ts +29 -0
  476. package/dist/tools/editTools.d.ts.map +1 -0
  477. package/dist/tools/editTools.js +792 -0
  478. package/dist/tools/editTools.js.map +1 -0
  479. package/dist/tools/fileChangeTracker.d.ts +47 -0
  480. package/dist/tools/fileChangeTracker.d.ts.map +1 -0
  481. package/dist/tools/fileChangeTracker.js +154 -0
  482. package/dist/tools/fileChangeTracker.js.map +1 -0
  483. package/dist/tools/fileReadTracker.d.ts +69 -0
  484. package/dist/tools/fileReadTracker.d.ts.map +1 -0
  485. package/dist/tools/fileReadTracker.js +213 -0
  486. package/dist/tools/fileReadTracker.js.map +1 -0
  487. package/dist/tools/fileTools.d.ts +3 -0
  488. package/dist/tools/fileTools.d.ts.map +1 -0
  489. package/dist/tools/fileTools.js +389 -0
  490. package/dist/tools/fileTools.js.map +1 -0
  491. package/dist/tools/grepTools.d.ts +3 -0
  492. package/dist/tools/grepTools.d.ts.map +1 -0
  493. package/dist/tools/grepTools.js +128 -0
  494. package/dist/tools/grepTools.js.map +1 -0
  495. package/dist/tools/hitlTools.d.ts +7 -0
  496. package/dist/tools/hitlTools.d.ts.map +1 -0
  497. package/dist/tools/hitlTools.js +185 -0
  498. package/dist/tools/hitlTools.js.map +1 -0
  499. package/dist/tools/localExplore.d.ts +38 -0
  500. package/dist/tools/localExplore.d.ts.map +1 -0
  501. package/dist/tools/localExplore.js +30 -0
  502. package/dist/tools/localExplore.js.map +1 -0
  503. package/dist/tools/memoryTools.d.ts +20 -0
  504. package/dist/tools/memoryTools.d.ts.map +1 -0
  505. package/dist/tools/memoryTools.js +180 -0
  506. package/dist/tools/memoryTools.js.map +1 -0
  507. package/dist/tools/notebookTools.d.ts +20 -0
  508. package/dist/tools/notebookTools.d.ts.map +1 -0
  509. package/dist/tools/notebookTools.js +140 -0
  510. package/dist/tools/notebookTools.js.map +1 -0
  511. package/dist/tools/searchTools.d.ts +12 -0
  512. package/dist/tools/searchTools.d.ts.map +1 -0
  513. package/dist/tools/searchTools.js +413 -0
  514. package/dist/tools/searchTools.js.map +1 -0
  515. package/dist/tools/skillTools.d.ts +24 -0
  516. package/dist/tools/skillTools.d.ts.map +1 -0
  517. package/dist/tools/skillTools.js +140 -0
  518. package/dist/tools/skillTools.js.map +1 -0
  519. package/dist/tools/todoTools.d.ts +24 -0
  520. package/dist/tools/todoTools.d.ts.map +1 -0
  521. package/dist/tools/todoTools.js +101 -0
  522. package/dist/tools/todoTools.js.map +1 -0
  523. package/dist/tools/webTools.d.ts +26 -0
  524. package/dist/tools/webTools.d.ts.map +1 -0
  525. package/dist/tools/webTools.js +383 -0
  526. package/dist/tools/webTools.js.map +1 -0
  527. package/dist/ui/ink/App.d.ts +42 -0
  528. package/dist/ui/ink/App.d.ts.map +1 -0
  529. package/dist/ui/ink/App.js +10 -0
  530. package/dist/ui/ink/App.js.map +1 -0
  531. package/dist/ui/ink/ChatStatic.d.ts +29 -0
  532. package/dist/ui/ink/ChatStatic.d.ts.map +1 -0
  533. package/dist/ui/ink/ChatStatic.js +14 -0
  534. package/dist/ui/ink/ChatStatic.js.map +1 -0
  535. package/dist/ui/ink/InkPromptController.d.ts +289 -0
  536. package/dist/ui/ink/InkPromptController.d.ts.map +1 -0
  537. package/dist/ui/ink/InkPromptController.js +552 -0
  538. package/dist/ui/ink/InkPromptController.js.map +1 -0
  539. package/dist/ui/ink/Menu.d.ts +21 -0
  540. package/dist/ui/ink/Menu.d.ts.map +1 -0
  541. package/dist/ui/ink/Menu.js +61 -0
  542. package/dist/ui/ink/Menu.js.map +1 -0
  543. package/dist/ui/ink/Prompt.d.ts +31 -0
  544. package/dist/ui/ink/Prompt.d.ts.map +1 -0
  545. package/dist/ui/ink/Prompt.js +197 -0
  546. package/dist/ui/ink/Prompt.js.map +1 -0
  547. package/dist/ui/ink/StatusLine.d.ts +21 -0
  548. package/dist/ui/ink/StatusLine.d.ts.map +1 -0
  549. package/dist/ui/ink/StatusLine.js +11 -0
  550. package/dist/ui/ink/StatusLine.js.map +1 -0
  551. package/dist/ui/theme.d.ts +351 -0
  552. package/dist/ui/theme.d.ts.map +1 -0
  553. package/dist/ui/theme.js +437 -0
  554. package/dist/ui/theme.js.map +1 -0
  555. package/dist/utils/analytics.d.ts +2 -0
  556. package/dist/utils/analytics.d.ts.map +1 -0
  557. package/dist/utils/analytics.js +51 -0
  558. package/dist/utils/analytics.js.map +1 -0
  559. package/dist/utils/asyncUtils.d.ts +95 -0
  560. package/dist/utils/asyncUtils.d.ts.map +1 -0
  561. package/dist/utils/asyncUtils.js +286 -0
  562. package/dist/utils/asyncUtils.js.map +1 -0
  563. package/dist/utils/debugLogger.d.ts +6 -0
  564. package/dist/utils/debugLogger.d.ts.map +1 -0
  565. package/dist/utils/debugLogger.js +39 -0
  566. package/dist/utils/debugLogger.js.map +1 -0
  567. package/dist/utils/errorUtils.d.ts +12 -0
  568. package/dist/utils/errorUtils.d.ts.map +1 -0
  569. package/dist/utils/errorUtils.js +83 -0
  570. package/dist/utils/errorUtils.js.map +1 -0
  571. package/dist/utils/frontmatter.d.ts +10 -0
  572. package/dist/utils/frontmatter.d.ts.map +1 -0
  573. package/dist/utils/frontmatter.js +78 -0
  574. package/dist/utils/frontmatter.js.map +1 -0
  575. package/dist/utils/packageInfo.d.ts +14 -0
  576. package/dist/utils/packageInfo.d.ts.map +1 -0
  577. package/dist/utils/packageInfo.js +45 -0
  578. package/dist/utils/packageInfo.js.map +1 -0
  579. package/dist/utils/planFormatter.d.ts +34 -0
  580. package/dist/utils/planFormatter.d.ts.map +1 -0
  581. package/dist/utils/planFormatter.js +141 -0
  582. package/dist/utils/planFormatter.js.map +1 -0
  583. package/dist/utils/securityUtils.d.ts +132 -0
  584. package/dist/utils/securityUtils.d.ts.map +1 -0
  585. package/dist/utils/securityUtils.js +324 -0
  586. package/dist/utils/securityUtils.js.map +1 -0
  587. package/dist/utils/statusReporter.d.ts +6 -0
  588. package/dist/utils/statusReporter.d.ts.map +1 -0
  589. package/dist/utils/statusReporter.js +26 -0
  590. package/dist/utils/statusReporter.js.map +1 -0
  591. package/dist/workspace.d.ts +8 -0
  592. package/dist/workspace.d.ts.map +1 -0
  593. package/dist/workspace.js +135 -0
  594. package/dist/workspace.js.map +1 -0
  595. package/dist/workspace.validator.d.ts +49 -0
  596. package/dist/workspace.validator.d.ts.map +1 -0
  597. package/dist/workspace.validator.js +215 -0
  598. package/dist/workspace.validator.js.map +1 -0
  599. package/package.json +123 -0
  600. package/scripts/postinstall.cjs +58 -0
@@ -0,0 +1,552 @@
1
+ /**
2
+ * InkPromptController — the CLI's prompt controller, backed by the Ink
3
+ * renderer. Constructed via createPromptController(); it is the only
4
+ * renderer the shell uses.
5
+ *
6
+ * Goal: satisfy every method that src/headless/interactiveShell.ts calls
7
+ * so the rest of the codebase doesn't notice the swap. Live methods
8
+ * (status, history, secret mode, menu) drive an Ink reconciler commit;
9
+ * decorative methods that don't yet have an Ink implementation are
10
+ * marked as TODOs and behave as no-ops, with the call recorded so
11
+ * future hardening can fill the gaps with real behaviour rather than
12
+ * silent drift.
13
+ *
14
+ * Renderer shim: interactiveShell.ts also calls a handful of methods
15
+ * directly via promptController.getRenderer() — addEvent, addOutputTap,
16
+ * captureInput, clearBuffer, setSecretMode, forceRender. We expose a
17
+ * facade implementing exactly those.
18
+ */
19
+ import { EventEmitter } from 'node:events';
20
+ /** Map RendererEventType (UnifiedUIRenderer) to ChatItem.kind. */
21
+ const EVENT_KIND_MAP = {
22
+ banner: 'banner',
23
+ system: 'system',
24
+ error: 'error',
25
+ response: 'assistant',
26
+ stream: 'assistant',
27
+ thought: 'system',
28
+ tool: 'tool',
29
+ 'tool-call': 'tool',
30
+ 'tool-result': 'tool',
31
+ raw: 'system',
32
+ streaming: 'system',
33
+ };
34
+ /**
35
+ * The minimal subset of the legacy UnifiedUIRenderer that
36
+ * interactiveShell.ts actually calls. Backed by Ink state under the
37
+ * hood. Method signatures match the legacy renderer exactly — the
38
+ * caller can't tell which implementation it's holding.
39
+ */
40
+ class InkRendererShim extends EventEmitter {
41
+ owner;
42
+ taps = new Set();
43
+ resolveCapture = null;
44
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
45
+ constructor(owner) {
46
+ super();
47
+ this.owner = owner;
48
+ }
49
+ addEvent(type, content) {
50
+ // Always feed the taps first — they observe the raw event stream
51
+ // even if the type is filtered out of the visible history.
52
+ for (const tap of this.taps) {
53
+ try {
54
+ tap(type, content);
55
+ }
56
+ catch { /* tap errors must not break rendering */ }
57
+ }
58
+ // Thoughts are the model's pre-response reasoning. Showing them as
59
+ // plain chat lines (which my previous map did) leaks "The user
60
+ // just said 'hi' — this is a greeting…" into the visible
61
+ // transcript right above the actual answer. Drop them from the
62
+ // chat surface; debug mode can re-enable later.
63
+ if (type === 'thought' || type === 'streaming')
64
+ return;
65
+ if (type === 'stream') {
66
+ // Coalesce streaming deltas into a single growing assistant
67
+ // message. Pre-fix this rendered "Hi How can I help you today"
68
+ // as one word per line because each delta became its own
69
+ // ChatItem. Now the in-progress message lives in
70
+ // owner._streamingText and renders in a non-Static slot above
71
+ // the prompt; on the next non-stream event (typically the
72
+ // 'response' completion) we commit it as a Static entry.
73
+ this.owner._appendStreamingDelta(content);
74
+ return;
75
+ }
76
+ if (type === 'response') {
77
+ // Streaming is finishing. Replace the in-progress text with the
78
+ // canonical final content (the streamed chunks may have lost
79
+ // formatting under markdown wrapping) and commit to history.
80
+ this.owner._commitStreaming(content);
81
+ return;
82
+ }
83
+ // Non-streaming events: a brand-new committed history entry. Also
84
+ // finalises any in-progress streaming message in case the model
85
+ // emitted a tool/system event between deltas.
86
+ this.owner._finalizeStreamingIfAny();
87
+ const kind = EVENT_KIND_MAP[type] ?? 'system';
88
+ this.owner._appendHistoryEntry({ id: `e-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`, kind, text: content });
89
+ }
90
+ addOutputTap(fn) {
91
+ this.taps.add(fn);
92
+ return () => { this.taps.delete(fn); };
93
+ }
94
+ /**
95
+ * Resolve the next user submission with the typed text. Used by the
96
+ * sudo-password capture flow in interactiveShell.ts.
97
+ *
98
+ * Implementation: stash a resolver, swap the prompt callbacks for one
99
+ * that resolves it, restore on submit. The owner runs setSecretMode
100
+ * around the call site.
101
+ */
102
+ captureInput(_opts = {}) {
103
+ return new Promise((resolve) => {
104
+ this.resolveCapture = resolve;
105
+ this.owner._installCaptureHandler((text) => {
106
+ const trim = _opts.trim !== false;
107
+ const value = trim ? text.trim() : text;
108
+ if (this.resolveCapture) {
109
+ const r = this.resolveCapture;
110
+ this.resolveCapture = null;
111
+ this.owner._restoreSubmitHandler();
112
+ if (_opts.resetBuffer !== false)
113
+ this.owner._setBuffer('');
114
+ r(value);
115
+ }
116
+ });
117
+ });
118
+ }
119
+ clearBuffer() {
120
+ this.owner._setBuffer('');
121
+ }
122
+ setSecretMode(enabled) {
123
+ this.owner._setSecretMode(enabled);
124
+ }
125
+ /** No-op. Ink owns its render loop; manual force is unnecessary. */
126
+ forceRender() { }
127
+ /** Shape parity with the legacy renderer; returns a fixed false. */
128
+ supportsInlinePanel() { return true; }
129
+ /**
130
+ * Used by interactiveShell.ts when re-rendering a tool result after
131
+ * the user expands it. Live update: append a new history entry with
132
+ * the expanded content.
133
+ */
134
+ expandLastToolResult() { return false; }
135
+ getCollapsedResultCount() { return 0; }
136
+ }
137
+ export class InkPromptController extends EventEmitter {
138
+ callbacks;
139
+ // ink module + App component imported lazily on start() so non-Ink
140
+ // codepaths don't pay the React parse cost.
141
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
142
+ inkRender = null;
143
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
144
+ React = null;
145
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
146
+ AppComponent = null;
147
+ inst = null;
148
+ shim = new InkRendererShim(this);
149
+ stdin;
150
+ stdout;
151
+ // In-progress assistant message — accumulates 'stream' deltas. While
152
+ // non-null it renders below <Static> in a regular Ink Box so the text
153
+ // grows in place. Committed to history on 'response' (or finalised
154
+ // when any non-stream event arrives mid-flight).
155
+ streamingText = '';
156
+ // ── live state ────────────────────────────────────────────────
157
+ statusMain = null;
158
+ statusOverride = null;
159
+ statusStreaming = null;
160
+ activityMessage = null;
161
+ mode = 'idle';
162
+ metaInfo = {};
163
+ history = [];
164
+ suggestions = [];
165
+ inlinePanel = null;
166
+ secretMode = false;
167
+ editMode = 'display-edits';
168
+ pinnedPrompt = null;
169
+ modeToggleState = {
170
+ autoMode: 'on',
171
+ autoContinueHotkey: '⌥G',
172
+ hitlMode: 'off',
173
+ hitlHotkey: '⌥V',
174
+ };
175
+ buffer = '';
176
+ // Set by InkRendererShim.captureInput — temporarily replaces onSubmit.
177
+ captureSubmit = null;
178
+ menuCallback = null;
179
+ menuItems = [];
180
+ menuTitle;
181
+ menuOpen = false;
182
+ started = false;
183
+ disposed = false;
184
+ constructor(stdin, stdout, callbacks) {
185
+ super();
186
+ this.stdin = stdin;
187
+ this.stdout = stdout;
188
+ this.callbacks = callbacks;
189
+ }
190
+ // ── lifecycle ─────────────────────────────────────────────────
191
+ /**
192
+ * Async start so the Ink + React modules can be loaded via dynamic
193
+ * import (the dist build emits ESM under `module: NodeNext`, where
194
+ * `require()` mixed with top-level await is a hard error in Node 22+).
195
+ * Call sites that go through createPromptController() should await
196
+ * .start(); the legacy controller's start() is sync, so the IPrompt
197
+ * interface defines start() as `void` and we coerce here.
198
+ */
199
+ start() { void this.startAsync(); }
200
+ async startAsync() {
201
+ if (this.started || this.disposed)
202
+ return;
203
+ this.started = true;
204
+ const [ink, react, appMod] = await Promise.all([
205
+ import('ink'),
206
+ import('react'),
207
+ import('./App.js'),
208
+ ]);
209
+ this.React = react;
210
+ this.AppComponent = appMod.App;
211
+ this.inkRender = ink.render;
212
+ this.inst = this.inkRender(this.buildTree(), {
213
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
214
+ stdin: this.stdin,
215
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
216
+ stdout: this.stdout,
217
+ // exitOnCtrlC=false so the host's onCtrlC callback fires first.
218
+ exitOnCtrlC: false,
219
+ });
220
+ }
221
+ stop() {
222
+ if (this.disposed)
223
+ return;
224
+ this.disposed = true;
225
+ this.started = false;
226
+ try {
227
+ this.inst?.unmount();
228
+ }
229
+ catch { /* ignore */ }
230
+ this.inst = null;
231
+ }
232
+ dispose() { this.stop(); }
233
+ /** Manual repaint hook — Ink owns its tick, so render/forceRender are coalesced into a rerender(). */
234
+ render() { this.rerender(); }
235
+ forceRender() { this.rerender(); }
236
+ handleResize() { }
237
+ /**
238
+ * Reset the chat surface (the shell's /clear). Ink's <Static> is
239
+ * append-only — it slices items from an internal index that only grows
240
+ * — so shrinking the history array cannot clear committed scrollback.
241
+ * The only correct reset is to unmount, clear the terminal while Ink is
242
+ * NOT mounted (so the escape can't desync a live render), and remount
243
+ * with empty history; the fresh <Static> restarts at index 0.
244
+ */
245
+ clearScreen() {
246
+ this.history = [];
247
+ this.streamingText = '';
248
+ if (this.inst && this.inkRender && this.React && this.AppComponent) {
249
+ try {
250
+ this.inst.unmount();
251
+ }
252
+ catch { /* ignore */ }
253
+ this.inst = null;
254
+ // \x1b[3J also drops scrollback so the cleared content can't be scrolled to.
255
+ try {
256
+ this.stdout.write('\x1b[2J\x1b[3J\x1b[H');
257
+ }
258
+ catch { /* ignore */ }
259
+ this.inst = this.inkRender(this.buildTree(), {
260
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
261
+ stdin: this.stdin,
262
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
263
+ stdout: this.stdout,
264
+ exitOnCtrlC: false,
265
+ });
266
+ }
267
+ else {
268
+ this.rerender();
269
+ }
270
+ }
271
+ // ── status / activity / streaming ─────────────────────────────
272
+ setStatusMessage(message) { this.statusMain = (message?.trim() || null); this.rerender(); }
273
+ setOverrideStatus(message) { this.statusOverride = (message?.trim() || null); this.rerender(); }
274
+ setStreamingLabel(label) { this.statusStreaming = (label?.trim() || null); this.rerender(); }
275
+ setStatusLine(status) {
276
+ if ('main' in status)
277
+ this.statusMain = status.main?.trim() || null;
278
+ if ('override' in status)
279
+ this.statusOverride = status.override?.trim() || null;
280
+ if ('streaming' in status)
281
+ this.statusStreaming = status.streaming?.trim() || null;
282
+ this.rerender();
283
+ }
284
+ clearAllStatus() {
285
+ this.statusMain = null;
286
+ this.statusOverride = null;
287
+ this.statusStreaming = null;
288
+ this.activityMessage = null;
289
+ this.rerender();
290
+ }
291
+ setActivityMessage(message) { this.activityMessage = message; this.rerender(); }
292
+ setStreaming(streaming) { this.mode = streaming ? 'streaming' : 'idle'; this.rerender(); }
293
+ getMode() { return this.mode; }
294
+ setContextUsage(percentage) {
295
+ if (percentage !== null) {
296
+ this.metaInfo.contextPercent = percentage;
297
+ this.rerender();
298
+ }
299
+ }
300
+ setMetaStatus(meta) {
301
+ if (typeof meta.elapsedSeconds === 'number' && Number.isFinite(meta.elapsedSeconds) && meta.elapsedSeconds >= 0) {
302
+ const m = Math.floor(meta.elapsedSeconds / 60);
303
+ const s = meta.elapsedSeconds % 60;
304
+ this.metaInfo.sessionTime = `${m}:${s < 10 ? '0' : ''}${s}`;
305
+ }
306
+ if (meta.tokensUsed != null && meta.tokenLimit != null) {
307
+ this.metaInfo.contextPercent = meta.tokenLimit > 0 ? Math.round((meta.tokensUsed / meta.tokenLimit) * 100) : 0;
308
+ }
309
+ this.rerender();
310
+ }
311
+ setModelContext(options) {
312
+ if (options.model !== undefined)
313
+ this.metaInfo.model = options.model || undefined;
314
+ if (options.provider !== undefined)
315
+ this.metaInfo.provider = options.provider || undefined;
316
+ this.rerender();
317
+ }
318
+ setChromeMeta(meta) {
319
+ if (meta.workspace !== undefined)
320
+ this.metaInfo.workspace = meta.workspace;
321
+ if (meta.directory !== undefined)
322
+ this.metaInfo.directory = meta.directory;
323
+ this.rerender();
324
+ }
325
+ // ── toggles ───────────────────────────────────────────────────
326
+ setModeToggles(options) {
327
+ this.modeToggleState = { ...this.modeToggleState, ...options };
328
+ this.rerender();
329
+ }
330
+ setDebugMode(enabled) { this.modeToggleState.debugEnabled = enabled; this.rerender(); }
331
+ toggleAutoContinue() {
332
+ this.modeToggleState.autoMode = this.modeToggleState.autoMode === 'off' ? 'on' : 'off';
333
+ this.rerender();
334
+ this.callbacks.onToggleAutoContinue?.();
335
+ }
336
+ getAutoMode() { return this.modeToggleState.autoMode; }
337
+ setAutoMode(mode) { this.modeToggleState.autoMode = mode; this.rerender(); }
338
+ toggleHITL() {
339
+ this.modeToggleState.hitlMode = this.modeToggleState.hitlMode === 'off' ? 'on' : 'off';
340
+ this.rerender();
341
+ this.callbacks.onToggleHITL?.();
342
+ }
343
+ getHITLMode() { return this.modeToggleState.hitlMode; }
344
+ getModeToggleState() { return this.modeToggleState; }
345
+ // ── inline panel / pinned prompt / menu / suggestions ──────
346
+ setAvailableCommands(commands) {
347
+ this.suggestions = commands.map((c) => ({ label: c.command, hint: c.description }));
348
+ this.rerender();
349
+ }
350
+ setInlinePanel(lines) { this.inlinePanel = [...lines]; this.rerender(); }
351
+ clearInlinePanel() { this.inlinePanel = null; this.rerender(); }
352
+ supportsInlinePanel() { return true; }
353
+ setPinnedPrompt(text) { this.pinnedPrompt = text; this.rerender(); }
354
+ getPinnedPrompt() { return this.pinnedPrompt; }
355
+ clearPinnedPrompt() { this.pinnedPrompt = null; this.rerender(); }
356
+ setMenu(items, options, callback) {
357
+ this.menuItems = items;
358
+ this.menuCallback = callback;
359
+ this.menuTitle = options.title;
360
+ this.menuOpen = true;
361
+ this.rerender();
362
+ }
363
+ closeMenu() { this.resolveMenu(null); }
364
+ isMenuActive() { return this.menuOpen; }
365
+ /** Close the menu and fire the stored callback exactly once. */
366
+ resolveMenu(item) {
367
+ if (!this.menuOpen)
368
+ return;
369
+ this.menuOpen = false;
370
+ const callback = this.menuCallback;
371
+ this.menuCallback = null;
372
+ this.menuItems = [];
373
+ this.menuTitle = undefined;
374
+ this.rerender();
375
+ if (callback) {
376
+ try {
377
+ callback(item);
378
+ }
379
+ catch { /* selection-handler errors must not break the UI */ }
380
+ }
381
+ }
382
+ // ── input buffer ──────────────────────────────────────────────
383
+ setSecretMode(enabled) { this.secretMode = enabled; this.rerender(); }
384
+ setEditMode(mode) { this.editMode = mode; this.callbacks.onEditModeChange?.(mode); }
385
+ applyEditMode(mode) { this.setEditMode(mode); }
386
+ getEditMode() { return this.editMode; }
387
+ /**
388
+ * The input buffer in the Ink path is owned by the Prompt component,
389
+ * not by this controller. We keep `this.buffer` as a snapshot for
390
+ * legacy callers asking for getBuffer/getCursor; updates flow when the
391
+ * Prompt's onSubmit / clear actions fire. setBuffer drives a new
392
+ * `initial` prop on the next mount.
393
+ */
394
+ getBuffer() { return this.buffer; }
395
+ getCursor() { return this.buffer.length; }
396
+ setBuffer(text, _cursorPos) { this.buffer = text; this.rerender(); }
397
+ clear() { this.buffer = ''; this.rerender(); }
398
+ // ── renderer facade ───────────────────────────────────────────
399
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
400
+ getRenderer() { return this.shim; }
401
+ // ── internal ──────────────────────────────────────────────────
402
+ /** Append history (used by the renderer shim's addEvent). */
403
+ _appendHistoryEntry(item) {
404
+ this.history = [...this.history, item];
405
+ this.rerender();
406
+ }
407
+ /**
408
+ * Streaming accumulators. Deltas append to streamingText, which App
409
+ * renders live as the dynamic region below ChatStatic (<Static>). The
410
+ * old duplication bug — partial text orphaned in scrollback when a
411
+ * Static item appended below it — cannot recur: ChatStatic is the ONLY
412
+ * Static node and renders first, so nothing Static ever appends below
413
+ * the live region, and _commitStreaming pushes history + clears
414
+ * streamingText in a single atomic rerender.
415
+ */
416
+ _appendStreamingDelta(delta) {
417
+ this.streamingText = (this.streamingText || '') + (delta || '');
418
+ this.rerender();
419
+ }
420
+ _commitStreaming(finalText) {
421
+ // The real delta path ends with addEvent('response', '\n') — the body
422
+ // lives in the accumulated streamingText, NOT in finalText. The
423
+ // non-delta path carries the full text in finalText with an empty
424
+ // streamingText. A tools run emits a "Next steps" addendum as a
425
+ // distinct response. So: commit the buffered body if present, then
426
+ // commit finalText when it is real and not a duplicate of the body.
427
+ const incoming = (finalText || '').trim();
428
+ const buffered = (this.streamingText || '').trim();
429
+ this.streamingText = '';
430
+ const additions = [];
431
+ if (buffered)
432
+ additions.push({ id: `r-${Date.now()}-b`, kind: 'assistant', text: buffered });
433
+ if (incoming && incoming !== buffered)
434
+ additions.push({ id: `r-${Date.now()}-c`, kind: 'assistant', text: incoming });
435
+ if (additions.length)
436
+ this.history = [...this.history, ...additions];
437
+ // Single rerender: ChatStatic gains the entries AND the live region
438
+ // (streamingMessage) goes null in the same commit — atomic swap, no
439
+ // duplicate of the streamed body in scrollback.
440
+ this.rerender();
441
+ }
442
+ _finalizeStreamingIfAny() {
443
+ if (!this.streamingText)
444
+ return;
445
+ const text = this.streamingText.trim();
446
+ this.streamingText = '';
447
+ if (text) {
448
+ this.history = [...this.history, { id: `r-${Date.now()}`, kind: 'assistant', text }];
449
+ }
450
+ // No rerender — the caller is about to push another history entry
451
+ // and rerender once. Avoid the double commit.
452
+ }
453
+ _setBuffer(text) { this.buffer = text; this.rerender(); }
454
+ _setSecretMode(enabled) { this.secretMode = enabled; this.rerender(); }
455
+ _installCaptureHandler(handler) { this.captureSubmit = handler; this.rerender(); }
456
+ _restoreSubmitHandler() { this.captureSubmit = null; this.rerender(); }
457
+ rerender() {
458
+ if (!this.inst)
459
+ return;
460
+ try {
461
+ this.inst.rerender(this.buildTree());
462
+ }
463
+ catch { /* swallow rerender races */ }
464
+ }
465
+ buildTree() {
466
+ const composedStatus = this.statusOverride
467
+ || (this.mode === 'streaming' ? this.statusStreaming : null)
468
+ || this.activityMessage
469
+ || this.statusMain;
470
+ const modeChips = this.formatModeChips();
471
+ return this.React.createElement(this.AppComponent, {
472
+ history: this.history,
473
+ streamingMessage: this.streamingText || null,
474
+ status: { message: composedStatus, modeMessage: modeChips, spinning: this.mode === 'streaming' || Boolean(this.activityMessage) },
475
+ suggestions: this.suggestions.length ? this.suggestions : undefined,
476
+ menu: this.menuOpen ? {
477
+ items: this.menuItems,
478
+ title: this.menuTitle,
479
+ onSelect: (item) => this.resolveMenu(item),
480
+ onCancel: () => this.resolveMenu(null),
481
+ } : undefined,
482
+ prompt: {
483
+ initial: this.buffer,
484
+ secret: this.secretMode,
485
+ onSubmit: (text) => {
486
+ if (this.captureSubmit) {
487
+ this.captureSubmit(text);
488
+ return;
489
+ }
490
+ // Commit the user's submitted text into history before
491
+ // dispatching to the host. The legacy renderer auto-emitted
492
+ // an 'addEvent("prompt", text)' on its own submit path; the
493
+ // Ink path didn't, so submitted prompts vanished from the
494
+ // chat surface. Symptom: user typed "hi", saw the agent
495
+ // respond, but their own "hi" was never in the transcript.
496
+ // Skip secret submissions (passwords) and slash commands —
497
+ // both are interpreted by the host, not user-visible
498
+ // history. Keeps history aligned with what the agent saw.
499
+ const trimmed = text.trim();
500
+ if (!this.secretMode && trimmed && !trimmed.startsWith('/')) {
501
+ this.history = [
502
+ ...this.history,
503
+ { id: `u-${Date.now()}`, kind: 'user', text: trimmed },
504
+ ];
505
+ }
506
+ this.buffer = '';
507
+ this.rerender();
508
+ this.callbacks.onSubmit(text);
509
+ },
510
+ onCancel: () => {
511
+ this.callbacks.onCtrlC?.({ hadBuffer: this.buffer.length > 0 });
512
+ this.callbacks.onInterrupt();
513
+ },
514
+ },
515
+ });
516
+ }
517
+ formatModeChips() {
518
+ const parts = [];
519
+ const meta = this.metaInfo;
520
+ if (meta.directory)
521
+ parts.push(`📁 ${meta.directory}`);
522
+ if (meta.model)
523
+ parts.push(`🧠 ${meta.model}${meta.provider ? ` · ${meta.provider}` : ''}`);
524
+ if (meta.contextPercent != null)
525
+ parts.push(`ctx ${meta.contextPercent}%`);
526
+ if (meta.sessionTime)
527
+ parts.push(`⏱ ${meta.sessionTime}`);
528
+ if (this.modeToggleState.autoMode === 'on')
529
+ parts.push('auto');
530
+ if (this.modeToggleState.hitlMode === 'on')
531
+ parts.push('HITL');
532
+ if (this.modeToggleState.debugEnabled)
533
+ parts.push('debug');
534
+ if (this.pinnedPrompt)
535
+ parts.push(`📌 ${this.pinnedPrompt.slice(0, 40)}`);
536
+ if (this.inlinePanel && this.inlinePanel.length > 0)
537
+ parts.push(this.inlinePanel.slice(0, 1).join(' '));
538
+ return parts.length ? parts.join(' · ') : null;
539
+ }
540
+ }
541
+ /**
542
+ * Factory — returns the Ink-backed controller. Ink is now the only
543
+ * renderer; the legacy UnifiedUIRenderer + PromptController have been
544
+ * removed. interactiveShell.ts exits early on non-TTY so Ink's
545
+ * raw-mode requirement is always satisfied here. Plain mode
546
+ * (NO_COLOR / TERM=dumb) still flows through Ink — Ink itself
547
+ * down-styles when colours are disabled.
548
+ */
549
+ export async function createPromptController(stdin, stdout, callbacks) {
550
+ return new InkPromptController(stdin, stdout, callbacks);
551
+ }
552
+ //# sourceMappingURL=InkPromptController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InkPromptController.js","sourceRoot":"","sources":["../../../src/ui/ink/InkPromptController.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Menu — interactive Ink selection list. The Ink path's only way to make
3
+ * a menu choice: arrow keys move the cursor, Enter selects, Escape /
4
+ * Ctrl+C cancels. Owns useInput while mounted; App renders it in place of
5
+ * the Prompt so the two never fight over keystrokes.
6
+ *
7
+ * Before this component existed, InkPromptController.setMenu only mapped
8
+ * items to passive suggestion labels and the selection callback was never
9
+ * invoked with a choice — /model and /secrets were unreachable in the Ink
10
+ * UI.
11
+ */
12
+ import React from 'react';
13
+ import type { MenuItem } from './InkPromptController.js';
14
+ export interface MenuProps {
15
+ items: MenuItem[];
16
+ title?: string;
17
+ onSelect: (item: MenuItem) => void;
18
+ onCancel: () => void;
19
+ }
20
+ export declare const Menu: React.FC<MenuProps>;
21
+ //# sourceMappingURL=Menu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Menu.d.ts","sourceRoot":"","sources":["../../../src/ui/ink/Menu.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAqB,MAAM,OAAO,CAAC;AAE1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEzD,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACnC,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AASD,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,CA2CpC,CAAC"}
@@ -0,0 +1,61 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * Menu — interactive Ink selection list. The Ink path's only way to make
4
+ * a menu choice: arrow keys move the cursor, Enter selects, Escape /
5
+ * Ctrl+C cancels. Owns useInput while mounted; App renders it in place of
6
+ * the Prompt so the two never fight over keystrokes.
7
+ *
8
+ * Before this component existed, InkPromptController.setMenu only mapped
9
+ * items to passive suggestion labels and the selection callback was never
10
+ * invoked with a choice — /model and /secrets were unreachable in the Ink
11
+ * UI.
12
+ */
13
+ import { useReducer } from 'react';
14
+ import { Box, Text, useInput } from 'ink';
15
+ function firstSelectable(items) {
16
+ const active = items.findIndex((i) => i.isActive && !i.disabled);
17
+ if (active >= 0)
18
+ return active;
19
+ const enabled = items.findIndex((i) => !i.disabled);
20
+ return enabled >= 0 ? enabled : 0;
21
+ }
22
+ export const Menu = ({ items, title, onSelect, onCancel }) => {
23
+ const [cursor, move] = useReducer((cur, dir) => {
24
+ if (items.length === 0)
25
+ return 0;
26
+ // Walk in `dir` until a non-disabled item is found; give up after a
27
+ // full loop so an all-disabled list doesn't spin forever.
28
+ let next = cur;
29
+ for (let i = 0; i < items.length; i++) {
30
+ next = (next + dir + items.length) % items.length;
31
+ if (!items[next]?.disabled)
32
+ return next;
33
+ }
34
+ return cur;
35
+ }, firstSelectable(items));
36
+ useInput((input, key) => {
37
+ if (key.upArrow) {
38
+ move(-1);
39
+ return;
40
+ }
41
+ if (key.downArrow) {
42
+ move(1);
43
+ return;
44
+ }
45
+ if (key.return) {
46
+ const item = items[cursor];
47
+ if (item && !item.disabled)
48
+ onSelect(item);
49
+ return;
50
+ }
51
+ if (key.escape || (key.ctrl && (input === 'c' || input === 'C'))) {
52
+ onCancel();
53
+ }
54
+ });
55
+ return (_jsxs(Box, { flexDirection: "column", children: [title ? _jsx(Text, { bold: true, children: title }) : null, items.map((item, i) => {
56
+ const selected = i === cursor;
57
+ const color = item.disabled ? 'gray' : selected ? 'cyan' : undefined;
58
+ return (_jsxs(Box, { children: [_jsxs(Text, { color: color, dimColor: item.disabled, inverse: selected && !item.disabled, children: [selected ? '▸ ' : ' ', item.label] }), item.description ? _jsxs(Text, { dimColor: true, children: [" ", item.description] }) : null] }, item.id));
59
+ })] }));
60
+ };
61
+ //# sourceMappingURL=Menu.js.map