@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,739 @@
1
+ import { createNodeRuntime } from './node.js';
2
+ import { AGENT_CONTRACT_VERSION } from '../contracts/v1/agent.js';
3
+ import { logDebug } from '../utils/debugLogger.js';
4
+ import { isFallbackEligibleError, getFallbackReason } from '../providers/resilientProvider.js';
5
+ import { getConfiguredProviders, getLatestModelForProvider } from '../core/modelDiscovery.js';
6
+ import { hitlEvents } from '../core/hitl.js';
7
+ class EventStream {
8
+ queue = [];
9
+ pending = null;
10
+ closed = false;
11
+ failure = null;
12
+ push(value) {
13
+ if (this.closed || this.failure) {
14
+ return;
15
+ }
16
+ if (this.pending) {
17
+ this.pending.resolve({ value, done: false });
18
+ this.pending = null;
19
+ return;
20
+ }
21
+ this.queue.push(value);
22
+ }
23
+ close() {
24
+ if (this.closed || this.failure) {
25
+ return;
26
+ }
27
+ this.closed = true;
28
+ if (this.pending) {
29
+ this.pending.resolve({ value: undefined, done: true });
30
+ this.pending = null;
31
+ }
32
+ }
33
+ fail(error) {
34
+ if (this.closed || this.failure) {
35
+ return;
36
+ }
37
+ this.failure = error;
38
+ this.closed = true; // Mark as closed to prevent new pending promises
39
+ if (this.pending) {
40
+ this.pending.reject(error);
41
+ this.pending = null;
42
+ }
43
+ }
44
+ next() {
45
+ if (this.queue.length) {
46
+ const value = this.queue.shift();
47
+ return Promise.resolve({ value, done: false });
48
+ }
49
+ if (this.failure) {
50
+ const error = this.failure;
51
+ this.failure = null;
52
+ return Promise.reject(error);
53
+ }
54
+ if (this.closed) {
55
+ return Promise.resolve({ value: undefined, done: true });
56
+ }
57
+ return new Promise((resolve, reject) => {
58
+ this.pending = { resolve, reject };
59
+ });
60
+ }
61
+ return() {
62
+ this.close();
63
+ return Promise.resolve({ value: undefined, done: true });
64
+ }
65
+ throw(error) {
66
+ const err = error instanceof Error ? error : new Error(String(error));
67
+ this.fail(err);
68
+ return Promise.reject(err);
69
+ }
70
+ [Symbol.asyncIterator]() {
71
+ return this;
72
+ }
73
+ }
74
+ function mergeToolObservers(primary, secondary) {
75
+ if (!secondary) {
76
+ return primary;
77
+ }
78
+ return {
79
+ onToolStart(call) {
80
+ primary.onToolStart?.(call);
81
+ secondary.onToolStart?.(call);
82
+ },
83
+ onToolResult(call, output) {
84
+ primary.onToolResult?.(call, output);
85
+ secondary.onToolResult?.(call, output);
86
+ },
87
+ onToolProgress(call, progress) {
88
+ primary.onToolProgress?.(call, progress);
89
+ secondary.onToolProgress?.(call, progress);
90
+ },
91
+ onToolError(call, error) {
92
+ primary.onToolError?.(call, error);
93
+ secondary.onToolError?.(call, error);
94
+ },
95
+ onCacheHit(call) {
96
+ primary.onCacheHit?.(call);
97
+ secondary.onCacheHit?.(call);
98
+ },
99
+ onToolWarning(call, warning) {
100
+ primary.onToolWarning?.(call, warning);
101
+ secondary.onToolWarning?.(call, warning);
102
+ },
103
+ };
104
+ }
105
+ function createControllerToolObserver(ref) {
106
+ const emit = (event) => {
107
+ ref.current?.push(event);
108
+ };
109
+ const timestamp = () => Date.now();
110
+ return {
111
+ onToolStart(call) {
112
+ emit({
113
+ type: 'tool.start',
114
+ timestamp: timestamp(),
115
+ toolName: call.name,
116
+ toolCallId: call.id,
117
+ parameters: { ...call.arguments },
118
+ });
119
+ },
120
+ onToolResult(call, output) {
121
+ emit({
122
+ type: 'tool.complete',
123
+ timestamp: timestamp(),
124
+ toolName: call.name,
125
+ toolCallId: call.id,
126
+ result: output,
127
+ });
128
+ },
129
+ onToolError(call, error) {
130
+ emit({
131
+ type: 'tool.error',
132
+ timestamp: timestamp(),
133
+ toolName: call.name,
134
+ toolCallId: call.id,
135
+ error,
136
+ });
137
+ },
138
+ };
139
+ }
140
+ export async function createAgentController(options, additionalObserver) {
141
+ const sinkRef = { current: null };
142
+ const observer = createControllerToolObserver(sinkRef);
143
+ const runtime = await createNodeRuntime({
144
+ profile: options.profile,
145
+ workspaceContext: options.workspaceContext,
146
+ workingDir: options.workingDir,
147
+ env: options.env,
148
+ toolObserver: mergeToolObservers(observer, additionalObserver),
149
+ additionalModules: options.modules,
150
+ });
151
+ const controller = new AgentController({ runtime, sinkRef, externalCallbacks: options.callbacks });
152
+ // Register the parallel-sub-agent tool now that the controller
153
+ // exists — the tool handler resolves the provider lazily via the
154
+ // controller's current selection, so it stays in sync with model
155
+ // switches the user makes mid-session.
156
+ try {
157
+ const { wireAgentSpawning } = await import('./agentSpawningWiring.js');
158
+ wireAgentSpawning({
159
+ session: runtime.session,
160
+ workingDir: options.workingDir,
161
+ getSelection: () => controller.getSelection(),
162
+ });
163
+ }
164
+ catch (err) {
165
+ // Non-fatal: spawning is an optional capability. Surface the
166
+ // failure for diagnostics but don't block CLI startup.
167
+ logDebug?.('agent-spawning wiring failed: ' + (err instanceof Error ? err.message : String(err)));
168
+ }
169
+ return controller;
170
+ }
171
+ export class AgentController {
172
+ session;
173
+ sinkRef;
174
+ externalCallbacks;
175
+ activeSink = null;
176
+ agent = null;
177
+ cachedHistory = [];
178
+ selection;
179
+ /** Set of providers that have failed with non-retryable errors in this session */
180
+ failedProviders = new Set();
181
+ /** Maximum fallback attempts per send() call */
182
+ static MAX_FALLBACK_ATTEMPTS = 3;
183
+ activeTimeout = null;
184
+ inflightReject = null;
185
+ constructor(dependencies) {
186
+ this.session = dependencies.runtime.session;
187
+ this.sinkRef = dependencies.sinkRef;
188
+ this.externalCallbacks = dependencies.externalCallbacks;
189
+ this.selection = this.buildInitialSelection();
190
+ }
191
+ buildInitialSelection() {
192
+ const config = this.session.profileConfig;
193
+ return {
194
+ provider: config.provider,
195
+ model: config.model,
196
+ temperature: config.temperature,
197
+ maxTokens: config.maxTokens,
198
+ systemPrompt: config.systemPrompt,
199
+ };
200
+ }
201
+ /**
202
+ * Live read of the current model selection. Used by the
203
+ * agent-spawning wiring so sub-agents inherit whatever model the
204
+ * user has currently chosen, even if they switched mid-session.
205
+ */
206
+ getSelection() {
207
+ return this.selection;
208
+ }
209
+ ensureAgent() {
210
+ if (this.agent) {
211
+ return this.agent;
212
+ }
213
+ const agent = this.session.createAgent(this.selection, this.createAgentCallbacks(), undefined, {
214
+ explainEdits: true,
215
+ });
216
+ if (this.cachedHistory.length) {
217
+ agent.loadHistory(this.cachedHistory);
218
+ }
219
+ this.agent = agent;
220
+ return agent;
221
+ }
222
+ createAgentCallbacks() {
223
+ return {
224
+ onRequestReceived: (requestPreview) => {
225
+ // Signal to UI that request was received - let model handle natural acknowledgment
226
+ // Don't emit verbatim echo - it's redundant and the model's response should acknowledge contextually
227
+ this.externalCallbacks?.onRequestReceived?.(requestPreview);
228
+ },
229
+ onAssistantMessage: (content, metadata) => {
230
+ this.handleAssistantMessage(content, metadata);
231
+ this.externalCallbacks?.onAssistantMessage?.(content, metadata);
232
+ },
233
+ onStreamChunk: (chunk, type) => {
234
+ if (type === 'content') {
235
+ // Content chunks go to message.delta for streaming display
236
+ this.emitDelta(chunk, false);
237
+ }
238
+ else if (type === 'reasoning') {
239
+ // Reasoning chunks go to reasoning event for thought display
240
+ this.emitReasoning(chunk);
241
+ }
242
+ // Pass all chunks to external callbacks
243
+ this.externalCallbacks?.onStreamChunk?.(chunk, type);
244
+ },
245
+ onUsage: (usage) => {
246
+ this.emitUsage(usage);
247
+ this.externalCallbacks?.onUsage?.(usage);
248
+ },
249
+ onContextPruned: (removedCount, stats) => {
250
+ this.externalCallbacks?.onContextPruned?.(removedCount, stats);
251
+ },
252
+ onContextSquishing: (message) => {
253
+ this.externalCallbacks?.onContextSquishing?.(message);
254
+ },
255
+ onContextRecovery: (attempt, maxAttempts, message) => {
256
+ this.externalCallbacks?.onContextRecovery?.(attempt, maxAttempts, message);
257
+ },
258
+ onContinueAfterRecovery: () => {
259
+ this.externalCallbacks?.onContinueAfterRecovery?.();
260
+ },
261
+ onMultilinePaste: (summary, metadata) => {
262
+ this.externalCallbacks?.onMultilinePaste?.(summary, metadata);
263
+ },
264
+ onEditExplanation: (payload) => {
265
+ this.handleEditExplanation(payload);
266
+ this.externalCallbacks?.onEditExplanation?.(payload);
267
+ },
268
+ onRetrying: (attempt, maxAttempts, error) => {
269
+ // Emit delta event to show retry status
270
+ this.emitDelta(`[Retrying ${attempt}/${maxAttempts}: ${error.message}]`, false);
271
+ this.externalCallbacks?.onRetrying?.(attempt, maxAttempts, error);
272
+ },
273
+ // onBeforeFirstToolCall not needed - model's reasoning is now emitted as thought events
274
+ };
275
+ }
276
+ /**
277
+ * Check if content looks like garbage/leaked reasoning fragments.
278
+ * Returns true if the content should be filtered out.
279
+ * NOTE: Keep this minimal to avoid suppressing legitimate short responses.
280
+ */
281
+ isGarbageContent(content) {
282
+ const trimmed = content.trim();
283
+ if (!trimmed)
284
+ return true;
285
+ // Only filter pure punctuation/markdown artifacts
286
+ if (/^[)\]}>*`'".:,!?|│┃─━═\s]+$/.test(trimmed))
287
+ return true;
288
+ // Just newlines or whitespace
289
+ if (/^[\s\n\r]+$/.test(trimmed))
290
+ return true;
291
+ // Removed aggressive short fragment filtering - was suppressing legitimate content
292
+ return false;
293
+ }
294
+ emitDelta(content, isFinal) {
295
+ if (!content?.trim()) {
296
+ return;
297
+ }
298
+ // Filter out garbage/leaked reasoning fragments
299
+ if (this.isGarbageContent(content)) {
300
+ return;
301
+ }
302
+ this.activeSink?.push({
303
+ type: 'message.delta',
304
+ timestamp: Date.now(),
305
+ content,
306
+ isFinal,
307
+ });
308
+ }
309
+ emitError(message) {
310
+ this.activeSink?.push({
311
+ type: 'error',
312
+ timestamp: Date.now(),
313
+ error: message,
314
+ });
315
+ }
316
+ emitReasoning(content) {
317
+ if (!content?.trim()) {
318
+ return;
319
+ }
320
+ // Filter out garbage/leaked formatting fragments in reasoning too
321
+ if (this.isGarbageContent(content)) {
322
+ return;
323
+ }
324
+ this.activeSink?.push({
325
+ type: 'reasoning',
326
+ timestamp: Date.now(),
327
+ content,
328
+ });
329
+ }
330
+ emitUsage(usage) {
331
+ if (!usage) {
332
+ return;
333
+ }
334
+ this.activeSink?.push({
335
+ type: 'usage',
336
+ timestamp: Date.now(),
337
+ inputTokens: usage.inputTokens,
338
+ outputTokens: usage.outputTokens,
339
+ totalTokens: usage.totalTokens,
340
+ });
341
+ }
342
+ handleEditExplanation(payload) {
343
+ if (!this.activeSink) {
344
+ return;
345
+ }
346
+ if (!payload.explanation?.trim()) {
347
+ return;
348
+ }
349
+ this.activeSink.push({
350
+ type: 'edit.explanation',
351
+ timestamp: Date.now(),
352
+ content: payload.explanation,
353
+ files: payload.files,
354
+ toolName: payload.toolName,
355
+ toolCallId: payload.toolCallId,
356
+ });
357
+ }
358
+ handleAssistantMessage(content, metadata) {
359
+ if (!this.activeSink) {
360
+ return;
361
+ }
362
+ if (!content.trim()) {
363
+ return;
364
+ }
365
+ if (metadata.suppressDisplay) {
366
+ return;
367
+ }
368
+ if (!metadata.isFinal) {
369
+ this.emitDelta(content, false);
370
+ return;
371
+ }
372
+ const elapsedMs = metadata.elapsedMs ?? 0;
373
+ this.activeSink.push({
374
+ type: 'message.complete',
375
+ timestamp: Date.now(),
376
+ content,
377
+ elapsedMs,
378
+ });
379
+ this.emitUsage(metadata.usage ?? null);
380
+ }
381
+ updateCachedHistory() {
382
+ if (this.agent) {
383
+ this.cachedHistory = this.agent.getHistory();
384
+ }
385
+ }
386
+ cancel(reason) {
387
+ if (!this.activeSink) {
388
+ return;
389
+ }
390
+ const error = new Error(reason ?? 'Run cancelled');
391
+ try {
392
+ this.agent?.cancel?.(reason);
393
+ }
394
+ catch {
395
+ // ignore cancellation errors
396
+ }
397
+ this.rejectInflight(error);
398
+ this.activeSink.fail(error);
399
+ this.activeSink = null;
400
+ this.sinkRef.current = null;
401
+ this.clearActiveTimeout();
402
+ }
403
+ clearActiveTimeout() {
404
+ if (this.activeTimeout) {
405
+ clearTimeout(this.activeTimeout);
406
+ this.activeTimeout = null;
407
+ }
408
+ }
409
+ rejectInflight(error) {
410
+ if (this.inflightReject) {
411
+ this.inflightReject(error);
412
+ this.inflightReject = null;
413
+ }
414
+ }
415
+ async *send(message) {
416
+ if (this.activeSink) {
417
+ throw new Error('Agent runtime is already processing a message. Please wait for the current run to finish.');
418
+ }
419
+ // Reset failed providers at the start of each new message
420
+ // (providers might have recovered, quotas might have reset, etc.)
421
+ this.failedProviders.clear();
422
+ let fallbackAttempts = 0;
423
+ // Retry loop for fallback handling
424
+ while (fallbackAttempts < AgentController.MAX_FALLBACK_ATTEMPTS) {
425
+ const agent = this.ensureAgent();
426
+ const sink = new EventStream();
427
+ this.activeSink = sink;
428
+ this.sinkRef.current = sink;
429
+ sink.push({ type: 'message.start', timestamp: Date.now() });
430
+ const timeoutMsRaw = process.env['EROSOLAR_AGENT_RUN_TIMEOUT_MS'];
431
+ const parsed = timeoutMsRaw ? Number(timeoutMsRaw) : NaN;
432
+ const effectiveTimeoutMs = !Number.isNaN(parsed) && parsed > 0 && parsed < 24 * 60 * 60 * 1000
433
+ ? parsed
434
+ : 24 * 60 * 60 * 1000;
435
+ // The run-timeout must NOT count user think-time at HITL prompts.
436
+ // We track when a HITL prompt is open, freeze the deadline while open,
437
+ // and reschedule from the remaining-budget when it closes. This way a
438
+ // configured run-timeout (e.g. EROSOLAR_AGENT_RUN_TIMEOUT_MS=120000)
439
+ // still bounds model+tool work, but a slow human never aborts the run.
440
+ let remainingMs = effectiveTimeoutMs;
441
+ let armedAt = null;
442
+ const fireTimeout = () => {
443
+ const err = new Error(`Run timed out after ${effectiveTimeoutMs}ms`);
444
+ this.rejectInflight(err);
445
+ sink.fail(err);
446
+ try {
447
+ this.agent?.cancel?.('timeout');
448
+ }
449
+ catch {
450
+ // ignore
451
+ }
452
+ };
453
+ const arm = () => {
454
+ if (this.activeTimeout || remainingMs <= 0)
455
+ return;
456
+ armedAt = Date.now();
457
+ this.activeTimeout = setTimeout(fireTimeout, remainingMs);
458
+ };
459
+ const disarm = () => {
460
+ if (!this.activeTimeout)
461
+ return;
462
+ clearTimeout(this.activeTimeout);
463
+ this.activeTimeout = null;
464
+ if (armedAt !== null) {
465
+ remainingMs = Math.max(0, remainingMs - (Date.now() - armedAt));
466
+ armedAt = null;
467
+ }
468
+ };
469
+ const onPromptOpen = () => disarm();
470
+ const onPromptClose = () => arm();
471
+ hitlEvents.on('prompt-open', onPromptOpen);
472
+ hitlEvents.on('prompt-close', onPromptClose);
473
+ const detachHitlListeners = () => {
474
+ hitlEvents.removeListener('prompt-open', onPromptOpen);
475
+ hitlEvents.removeListener('prompt-close', onPromptClose);
476
+ };
477
+ arm();
478
+ let caughtError = null;
479
+ let fallbackSucceeded = false;
480
+ let cancelRun = null;
481
+ const cancelPromise = new Promise((_, reject) => {
482
+ cancelRun = reject;
483
+ });
484
+ this.inflightReject = (error) => {
485
+ cancelRun?.(error);
486
+ };
487
+ const run = Promise.race([
488
+ agent.send(message, true),
489
+ cancelPromise,
490
+ ])
491
+ .then(() => {
492
+ this.updateCachedHistory();
493
+ this.clearActiveTimeout();
494
+ sink.close();
495
+ })
496
+ .catch(async (error) => {
497
+ const errorObj = error instanceof Error ? error : new Error(String(error));
498
+ caughtError = errorObj;
499
+ this.clearActiveTimeout();
500
+ const cancelled = /cancel/i.test(errorObj.message);
501
+ const timedOut = /timed out/i.test(errorObj.message);
502
+ if (cancelled || timedOut) {
503
+ this.emitError(errorObj.message);
504
+ sink.fail(errorObj);
505
+ return;
506
+ }
507
+ // Check if this error is eligible for fallback
508
+ if (isFallbackEligibleError(error) && fallbackAttempts < AgentController.MAX_FALLBACK_ATTEMPTS - 1) {
509
+ logDebug(`[AgentController] Fallback-eligible error detected: ${errorObj.message}`);
510
+ fallbackSucceeded = await this.attemptFallback(errorObj);
511
+ if (fallbackSucceeded) {
512
+ // Close this sink without error - we'll retry with new provider
513
+ sink.close();
514
+ return;
515
+ }
516
+ }
517
+ // Not fallback-eligible or no fallback available - emit error and fail
518
+ this.emitError(errorObj.message);
519
+ sink.fail(errorObj);
520
+ })
521
+ .finally(() => {
522
+ this.clearActiveTimeout();
523
+ detachHitlListeners();
524
+ this.inflightReject = null;
525
+ if (this.activeSink === sink) {
526
+ this.activeSink = null;
527
+ this.sinkRef.current = null;
528
+ }
529
+ });
530
+ try {
531
+ for await (const event of sink) {
532
+ yield event;
533
+ }
534
+ }
535
+ finally {
536
+ await run;
537
+ }
538
+ // If we successfully fell back, increment counter and continue loop
539
+ if (fallbackSucceeded && caughtError) {
540
+ fallbackAttempts++;
541
+ logDebug(`[AgentController] Retrying with fallback provider (attempt ${fallbackAttempts}/${AgentController.MAX_FALLBACK_ATTEMPTS})`);
542
+ continue;
543
+ }
544
+ // No fallback happened or it failed - exit loop
545
+ break;
546
+ }
547
+ }
548
+ async switchModel(config) {
549
+ this.updateCachedHistory();
550
+ this.agent = null;
551
+ this.selection = {
552
+ provider: config.provider,
553
+ model: config.model,
554
+ temperature: config.temperature,
555
+ maxTokens: config.maxTokens,
556
+ systemPrompt: this.selection.systemPrompt,
557
+ };
558
+ this.session.updateToolContext(this.selection);
559
+ }
560
+ getCapabilities() {
561
+ const tools = this.session.toolRuntime.listProviderTools();
562
+ const manifestTools = tools.map((tool) => ({
563
+ name: tool.name,
564
+ description: tool.description,
565
+ category: 'general',
566
+ }));
567
+ return {
568
+ contractVersion: AGENT_CONTRACT_VERSION,
569
+ profile: this.session.profile,
570
+ model: this.toModelConfig(this.selection),
571
+ tools: manifestTools,
572
+ features: ['streaming', 'tool-calls'],
573
+ };
574
+ }
575
+ registerToolSuite(suiteId, suite) {
576
+ this.session.toolRuntime.registerSuite({ ...suite, id: suiteId });
577
+ }
578
+ unregisterToolSuite(suiteId) {
579
+ this.session.toolRuntime.unregisterSuite(suiteId);
580
+ }
581
+ getHistory() {
582
+ if (this.agent) {
583
+ return this.agent.getHistory();
584
+ }
585
+ return [...this.cachedHistory];
586
+ }
587
+ clearHistory() {
588
+ this.cachedHistory = [];
589
+ this.agent?.clearHistory();
590
+ }
591
+ /**
592
+ * Check if the controller is currently processing a message.
593
+ */
594
+ isProcessing() {
595
+ return this.activeSink !== null;
596
+ }
597
+ /**
598
+ * Force-clear any lingering active state. Use this before starting a new
599
+ * operation (like a complex reasoning task) to ensure clean state.
600
+ * This will close any active sink without waiting for completion.
601
+ */
602
+ forceReset() {
603
+ if (this.activeSink) {
604
+ try {
605
+ this.activeSink.close();
606
+ }
607
+ catch {
608
+ // Ignore errors - sink may already be closed
609
+ }
610
+ this.activeSink = null;
611
+ this.sinkRef.current = null;
612
+ }
613
+ }
614
+ /**
615
+ * Sanitize history by fixing orphaned tool calls (tool_calls without corresponding tool results).
616
+ * This can happen when a run is interrupted mid-tool-execution.
617
+ * We add placeholder error results for any orphaned tool calls to keep history valid.
618
+ */
619
+ sanitizeHistory() {
620
+ const history = this.getHistory();
621
+ if (history.length === 0)
622
+ return;
623
+ const sanitized = [];
624
+ for (let i = 0; i < history.length; i++) {
625
+ const msg = history[i];
626
+ sanitized.push(msg);
627
+ // Check if this is an assistant message with tool_calls
628
+ if (msg.role === 'assistant' && msg.toolCalls?.length) {
629
+ // Look ahead for tool results
630
+ const toolCallIds = new Set(msg.toolCalls.map(tc => tc.id));
631
+ let nextIdx = i + 1;
632
+ // Consume any following tool messages
633
+ while (nextIdx < history.length && history[nextIdx].role === 'tool') {
634
+ const toolMsg = history[nextIdx];
635
+ if (toolMsg.toolCallId) {
636
+ toolCallIds.delete(toolMsg.toolCallId);
637
+ }
638
+ sanitized.push(history[nextIdx]);
639
+ nextIdx++;
640
+ }
641
+ // Add placeholder results for any orphaned tool calls
642
+ for (const orphanedId of toolCallIds) {
643
+ const orphanedCall = msg.toolCalls.find(tc => tc.id === orphanedId);
644
+ const toolName = orphanedCall?.name ?? 'unknown';
645
+ sanitized.push({
646
+ role: 'tool',
647
+ name: toolName,
648
+ toolCallId: orphanedId,
649
+ content: `[Interrupted: ${toolName} execution was cancelled]`,
650
+ });
651
+ }
652
+ // Skip the tool messages we already processed
653
+ i = nextIdx - 1;
654
+ }
655
+ }
656
+ // Update both cached history and agent history
657
+ this.cachedHistory = sanitized;
658
+ if (this.agent) {
659
+ this.agent.loadHistory(sanitized);
660
+ }
661
+ }
662
+ toModelConfig(selection) {
663
+ return {
664
+ provider: selection.provider,
665
+ model: selection.model,
666
+ temperature: selection.temperature,
667
+ maxTokens: selection.maxTokens,
668
+ };
669
+ }
670
+ /**
671
+ * Find the next available provider for fallback.
672
+ * Excludes providers that have already failed in this session.
673
+ */
674
+ findFallbackProvider() {
675
+ const configured = getConfiguredProviders();
676
+ const currentProvider = this.selection.provider;
677
+ // Provider preference order (excluding current and failed)
678
+ // deepseek-v4-pro is default, grok (xai) is backup
679
+ const preferenceOrder = ['deepseek', 'xai'];
680
+ for (const providerId of preferenceOrder) {
681
+ // Skip current provider and already failed providers
682
+ if (providerId === currentProvider || this.failedProviders.has(providerId)) {
683
+ continue;
684
+ }
685
+ // Check if this provider is configured
686
+ const provider = configured.find(p => p.id === providerId);
687
+ if (provider) {
688
+ const model = getLatestModelForProvider(providerId);
689
+ if (model) {
690
+ return { provider: providerId, model };
691
+ }
692
+ }
693
+ }
694
+ return null;
695
+ }
696
+ /**
697
+ * Emit a provider fallback event
698
+ */
699
+ emitFallbackEvent(fromProvider, fromModel, toProvider, toModel, reason, error) {
700
+ this.activeSink?.push({
701
+ type: 'provider.fallback',
702
+ timestamp: Date.now(),
703
+ fromProvider,
704
+ fromModel,
705
+ toProvider,
706
+ toModel,
707
+ reason,
708
+ error,
709
+ });
710
+ }
711
+ /**
712
+ * Attempt to switch to a fallback provider
713
+ */
714
+ async attemptFallback(error) {
715
+ const fallback = this.findFallbackProvider();
716
+ if (!fallback) {
717
+ logDebug('[AgentController] No fallback provider available');
718
+ return false;
719
+ }
720
+ const reason = getFallbackReason(error);
721
+ const fromProvider = this.selection.provider;
722
+ const fromModel = this.selection.model;
723
+ // Mark current provider as failed
724
+ this.failedProviders.add(fromProvider);
725
+ // Emit fallback event
726
+ this.emitFallbackEvent(fromProvider, fromModel, fallback.provider, fallback.model, reason, error.message);
727
+ logDebug(`[AgentController] Falling back from ${fromProvider}/${fromModel} to ${fallback.provider}/${fallback.model}: ${reason}`);
728
+ // Switch to fallback provider
729
+ await this.switchModel({
730
+ provider: fallback.provider,
731
+ model: fallback.model,
732
+ });
733
+ return true;
734
+ }
735
+ getToolSuites() {
736
+ return this.session.toolSuites;
737
+ }
738
+ }
739
+ //# sourceMappingURL=agentController.js.map