@deepseekdev/coder 1.0.74

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 (711) hide show
  1. package/LICENSE +21 -0
  2. package/agents/agi-code.rules.json +159 -0
  3. package/agents/general.rules.json +181 -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 +137 -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/lean.d.ts +9 -0
  17. package/dist/bin/lean.d.ts.map +1 -0
  18. package/dist/bin/lean.js +333 -0
  19. package/dist/bin/lean.js.map +1 -0
  20. package/dist/bin/selfTest.d.ts +14 -0
  21. package/dist/bin/selfTest.d.ts.map +1 -0
  22. package/dist/bin/selfTest.js +298 -0
  23. package/dist/bin/selfTest.js.map +1 -0
  24. package/dist/capabilities/baseCapability.d.ts +72 -0
  25. package/dist/capabilities/baseCapability.d.ts.map +1 -0
  26. package/dist/capabilities/baseCapability.js +183 -0
  27. package/dist/capabilities/baseCapability.js.map +1 -0
  28. package/dist/capabilities/bashCapability.d.ts +13 -0
  29. package/dist/capabilities/bashCapability.d.ts.map +1 -0
  30. package/dist/capabilities/bashCapability.js +24 -0
  31. package/dist/capabilities/bashCapability.js.map +1 -0
  32. package/dist/capabilities/editCapability.d.ts +17 -0
  33. package/dist/capabilities/editCapability.d.ts.map +1 -0
  34. package/dist/capabilities/editCapability.js +27 -0
  35. package/dist/capabilities/editCapability.js.map +1 -0
  36. package/dist/capabilities/enhancedGitCapability.d.ts +7 -0
  37. package/dist/capabilities/enhancedGitCapability.d.ts.map +1 -0
  38. package/dist/capabilities/enhancedGitCapability.js +220 -0
  39. package/dist/capabilities/enhancedGitCapability.js.map +1 -0
  40. package/dist/capabilities/filesystemCapability.d.ts +13 -0
  41. package/dist/capabilities/filesystemCapability.d.ts.map +1 -0
  42. package/dist/capabilities/filesystemCapability.js +24 -0
  43. package/dist/capabilities/filesystemCapability.js.map +1 -0
  44. package/dist/capabilities/gitHistoryCapability.d.ts +6 -0
  45. package/dist/capabilities/gitHistoryCapability.d.ts.map +1 -0
  46. package/dist/capabilities/gitHistoryCapability.js +160 -0
  47. package/dist/capabilities/gitHistoryCapability.js.map +1 -0
  48. package/dist/capabilities/hitlCapability.d.ts +18 -0
  49. package/dist/capabilities/hitlCapability.d.ts.map +1 -0
  50. package/dist/capabilities/hitlCapability.js +29 -0
  51. package/dist/capabilities/hitlCapability.js.map +1 -0
  52. package/dist/capabilities/index.d.ts +11 -0
  53. package/dist/capabilities/index.d.ts.map +1 -0
  54. package/dist/capabilities/index.js +13 -0
  55. package/dist/capabilities/index.js.map +1 -0
  56. package/dist/capabilities/searchCapability.d.ts +19 -0
  57. package/dist/capabilities/searchCapability.d.ts.map +1 -0
  58. package/dist/capabilities/searchCapability.js +29 -0
  59. package/dist/capabilities/searchCapability.js.map +1 -0
  60. package/dist/capabilities/toolManifest.d.ts +3 -0
  61. package/dist/capabilities/toolManifest.d.ts.map +1 -0
  62. package/dist/capabilities/toolManifest.js +163 -0
  63. package/dist/capabilities/toolManifest.js.map +1 -0
  64. package/dist/capabilities/toolRegistry.d.ts +25 -0
  65. package/dist/capabilities/toolRegistry.d.ts.map +1 -0
  66. package/dist/capabilities/toolRegistry.js +150 -0
  67. package/dist/capabilities/toolRegistry.js.map +1 -0
  68. package/dist/capabilities/unifiedCodingCapability.d.ts +48 -0
  69. package/dist/capabilities/unifiedCodingCapability.d.ts.map +1 -0
  70. package/dist/capabilities/unifiedCodingCapability.js +631 -0
  71. package/dist/capabilities/unifiedCodingCapability.js.map +1 -0
  72. package/dist/capabilities/webCapability.d.ts +23 -0
  73. package/dist/capabilities/webCapability.d.ts.map +1 -0
  74. package/dist/capabilities/webCapability.js +33 -0
  75. package/dist/capabilities/webCapability.js.map +1 -0
  76. package/dist/config.d.ts +25 -0
  77. package/dist/config.d.ts.map +1 -0
  78. package/dist/config.js +155 -0
  79. package/dist/config.js.map +1 -0
  80. package/dist/contracts/agent-profiles.schema.json +43 -0
  81. package/dist/contracts/agent-schemas.json +480 -0
  82. package/dist/contracts/models.schema.json +9 -0
  83. package/dist/contracts/module-schema.json +430 -0
  84. package/dist/contracts/schemas/agent-profile.schema.json +157 -0
  85. package/dist/contracts/schemas/agent-rules.schema.json +238 -0
  86. package/dist/contracts/schemas/agent-schemas.schema.json +528 -0
  87. package/dist/contracts/schemas/agent.schema.json +90 -0
  88. package/dist/contracts/schemas/tool-selection.schema.json +174 -0
  89. package/dist/contracts/tools.schema.json +82 -0
  90. package/dist/contracts/unified-schema.json +757 -0
  91. package/dist/contracts/v1/agent.d.ts +187 -0
  92. package/dist/contracts/v1/agent.d.ts.map +1 -0
  93. package/dist/contracts/v1/agent.js +8 -0
  94. package/dist/contracts/v1/agent.js.map +1 -0
  95. package/dist/contracts/v1/agentProfileManifest.d.ts +60 -0
  96. package/dist/contracts/v1/agentProfileManifest.d.ts.map +1 -0
  97. package/dist/contracts/v1/agentProfileManifest.js +9 -0
  98. package/dist/contracts/v1/agentProfileManifest.js.map +1 -0
  99. package/dist/contracts/v1/agentRules.d.ts +60 -0
  100. package/dist/contracts/v1/agentRules.d.ts.map +1 -0
  101. package/dist/contracts/v1/agentRules.js +10 -0
  102. package/dist/contracts/v1/agentRules.js.map +1 -0
  103. package/dist/contracts/v1/provider.d.ts +149 -0
  104. package/dist/contracts/v1/provider.d.ts.map +1 -0
  105. package/dist/contracts/v1/provider.js +7 -0
  106. package/dist/contracts/v1/provider.js.map +1 -0
  107. package/dist/contracts/v1/tool.d.ts +136 -0
  108. package/dist/contracts/v1/tool.d.ts.map +1 -0
  109. package/dist/contracts/v1/tool.js +7 -0
  110. package/dist/contracts/v1/tool.js.map +1 -0
  111. package/dist/contracts/v1/toolAccess.d.ts +43 -0
  112. package/dist/contracts/v1/toolAccess.d.ts.map +1 -0
  113. package/dist/contracts/v1/toolAccess.js +9 -0
  114. package/dist/contracts/v1/toolAccess.js.map +1 -0
  115. package/dist/core/agent.d.ts +320 -0
  116. package/dist/core/agent.d.ts.map +1 -0
  117. package/dist/core/agent.js +1627 -0
  118. package/dist/core/agent.js.map +1 -0
  119. package/dist/core/agentProfileManifest.d.ts +3 -0
  120. package/dist/core/agentProfileManifest.d.ts.map +1 -0
  121. package/dist/core/agentProfileManifest.js +188 -0
  122. package/dist/core/agentProfileManifest.js.map +1 -0
  123. package/dist/core/agentProfiles.d.ts +22 -0
  124. package/dist/core/agentProfiles.d.ts.map +1 -0
  125. package/dist/core/agentProfiles.js +35 -0
  126. package/dist/core/agentProfiles.js.map +1 -0
  127. package/dist/core/agentRulebook.d.ts +11 -0
  128. package/dist/core/agentRulebook.d.ts.map +1 -0
  129. package/dist/core/agentRulebook.js +136 -0
  130. package/dist/core/agentRulebook.js.map +1 -0
  131. package/dist/core/agentSchemaLoader.d.ts +131 -0
  132. package/dist/core/agentSchemaLoader.d.ts.map +1 -0
  133. package/dist/core/agentSchemaLoader.js +235 -0
  134. package/dist/core/agentSchemaLoader.js.map +1 -0
  135. package/dist/core/agiCore.d.ts +312 -0
  136. package/dist/core/agiCore.d.ts.map +1 -0
  137. package/dist/core/agiCore.js +1585 -0
  138. package/dist/core/agiCore.js.map +1 -0
  139. package/dist/core/aiErrorFixer.d.ts +57 -0
  140. package/dist/core/aiErrorFixer.d.ts.map +1 -0
  141. package/dist/core/aiErrorFixer.js +214 -0
  142. package/dist/core/aiErrorFixer.js.map +1 -0
  143. package/dist/core/bashCommandGuidance.d.ts +16 -0
  144. package/dist/core/bashCommandGuidance.d.ts.map +1 -0
  145. package/dist/core/bashCommandGuidance.js +40 -0
  146. package/dist/core/bashCommandGuidance.js.map +1 -0
  147. package/dist/core/constants.d.ts +31 -0
  148. package/dist/core/constants.d.ts.map +1 -0
  149. package/dist/core/constants.js +62 -0
  150. package/dist/core/constants.js.map +1 -0
  151. package/dist/core/contextManager.d.ts +271 -0
  152. package/dist/core/contextManager.d.ts.map +1 -0
  153. package/dist/core/contextManager.js +1073 -0
  154. package/dist/core/contextManager.js.map +1 -0
  155. package/dist/core/contextWindow.d.ts +42 -0
  156. package/dist/core/contextWindow.d.ts.map +1 -0
  157. package/dist/core/contextWindow.js +123 -0
  158. package/dist/core/contextWindow.js.map +1 -0
  159. package/dist/core/customCommands.d.ts +19 -0
  160. package/dist/core/customCommands.d.ts.map +1 -0
  161. package/dist/core/customCommands.js +85 -0
  162. package/dist/core/customCommands.js.map +1 -0
  163. package/dist/core/deepBugAnalyzer.d.ts +25 -0
  164. package/dist/core/deepBugAnalyzer.d.ts.map +1 -0
  165. package/dist/core/deepBugAnalyzer.js +44 -0
  166. package/dist/core/deepBugAnalyzer.js.map +1 -0
  167. package/dist/core/dynamicGuardrails.d.ts +207 -0
  168. package/dist/core/dynamicGuardrails.d.ts.map +1 -0
  169. package/dist/core/dynamicGuardrails.js +455 -0
  170. package/dist/core/dynamicGuardrails.js.map +1 -0
  171. package/dist/core/embeddingProviders.d.ts +80 -0
  172. package/dist/core/embeddingProviders.d.ts.map +1 -0
  173. package/dist/core/embeddingProviders.js +241 -0
  174. package/dist/core/embeddingProviders.js.map +1 -0
  175. package/dist/core/episodicMemory.d.ts +259 -0
  176. package/dist/core/episodicMemory.d.ts.map +1 -0
  177. package/dist/core/episodicMemory.js +834 -0
  178. package/dist/core/episodicMemory.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 +271 -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/flowProtection.d.ts +154 -0
  208. package/dist/core/flowProtection.d.ts.map +1 -0
  209. package/dist/core/flowProtection.js +439 -0
  210. package/dist/core/flowProtection.js.map +1 -0
  211. package/dist/core/gitWorktreeManager.d.ts +126 -0
  212. package/dist/core/gitWorktreeManager.d.ts.map +1 -0
  213. package/dist/core/gitWorktreeManager.js +403 -0
  214. package/dist/core/gitWorktreeManager.js.map +1 -0
  215. package/dist/core/global-macbook-access.d.ts +59 -0
  216. package/dist/core/global-macbook-access.d.ts.map +1 -0
  217. package/dist/core/global-macbook-access.js +101 -0
  218. package/dist/core/global-macbook-access.js.map +1 -0
  219. package/dist/core/guardrails.d.ts +146 -0
  220. package/dist/core/guardrails.d.ts.map +1 -0
  221. package/dist/core/guardrails.js +361 -0
  222. package/dist/core/guardrails.js.map +1 -0
  223. package/dist/core/hallucinationGuard.d.ts +57 -0
  224. package/dist/core/hallucinationGuard.d.ts.map +1 -0
  225. package/dist/core/hallucinationGuard.js +237 -0
  226. package/dist/core/hallucinationGuard.js.map +1 -0
  227. package/dist/core/hitl.d.ts +109 -0
  228. package/dist/core/hitl.d.ts.map +1 -0
  229. package/dist/core/hitl.js +371 -0
  230. package/dist/core/hitl.js.map +1 -0
  231. package/dist/core/hooks.d.ts +113 -0
  232. package/dist/core/hooks.d.ts.map +1 -0
  233. package/dist/core/hooks.js +364 -0
  234. package/dist/core/hooks.js.map +1 -0
  235. package/dist/core/hotReload.d.ts +154 -0
  236. package/dist/core/hotReload.d.ts.map +1 -0
  237. package/dist/core/hotReload.js +451 -0
  238. package/dist/core/hotReload.js.map +1 -0
  239. package/dist/core/hypothesisEngine.d.ts +27 -0
  240. package/dist/core/hypothesisEngine.d.ts.map +1 -0
  241. package/dist/core/hypothesisEngine.js +58 -0
  242. package/dist/core/hypothesisEngine.js.map +1 -0
  243. package/dist/core/index.d.ts +18 -0
  244. package/dist/core/index.d.ts.map +1 -0
  245. package/dist/core/index.js +40 -0
  246. package/dist/core/index.js.map +1 -0
  247. package/dist/core/initialExplorer.d.ts +53 -0
  248. package/dist/core/initialExplorer.d.ts.map +1 -0
  249. package/dist/core/initialExplorer.js +423 -0
  250. package/dist/core/initialExplorer.js.map +1 -0
  251. package/dist/core/inputProtection.d.ts +122 -0
  252. package/dist/core/inputProtection.d.ts.map +1 -0
  253. package/dist/core/inputProtection.js +422 -0
  254. package/dist/core/inputProtection.js.map +1 -0
  255. package/dist/core/liveGCPVerification.d.ts +41 -0
  256. package/dist/core/liveGCPVerification.d.ts.map +1 -0
  257. package/dist/core/liveGCPVerification.js +745 -0
  258. package/dist/core/liveGCPVerification.js.map +1 -0
  259. package/dist/core/modelDiscovery.d.ts +105 -0
  260. package/dist/core/modelDiscovery.d.ts.map +1 -0
  261. package/dist/core/modelDiscovery.js +768 -0
  262. package/dist/core/modelDiscovery.js.map +1 -0
  263. package/dist/core/multilinePasteHandler.d.ts +35 -0
  264. package/dist/core/multilinePasteHandler.d.ts.map +1 -0
  265. package/dist/core/multilinePasteHandler.js +81 -0
  266. package/dist/core/multilinePasteHandler.js.map +1 -0
  267. package/dist/core/parallelExecutor.d.ts +215 -0
  268. package/dist/core/parallelExecutor.d.ts.map +1 -0
  269. package/dist/core/parallelExecutor.js +584 -0
  270. package/dist/core/parallelExecutor.js.map +1 -0
  271. package/dist/core/preferences.d.ts +71 -0
  272. package/dist/core/preferences.d.ts.map +1 -0
  273. package/dist/core/preferences.js +341 -0
  274. package/dist/core/preferences.js.map +1 -0
  275. package/dist/core/productTestHarness.d.ts +46 -0
  276. package/dist/core/productTestHarness.d.ts.map +1 -0
  277. package/dist/core/productTestHarness.js +128 -0
  278. package/dist/core/productTestHarness.js.map +1 -0
  279. package/dist/core/providerKeys.d.ts +20 -0
  280. package/dist/core/providerKeys.d.ts.map +1 -0
  281. package/dist/core/providerKeys.js +40 -0
  282. package/dist/core/providerKeys.js.map +1 -0
  283. package/dist/core/resultVerification.d.ts +47 -0
  284. package/dist/core/resultVerification.d.ts.map +1 -0
  285. package/dist/core/resultVerification.js +126 -0
  286. package/dist/core/resultVerification.js.map +1 -0
  287. package/dist/core/revenueEnvValidator.d.ts +30 -0
  288. package/dist/core/revenueEnvValidator.d.ts.map +1 -0
  289. package/dist/core/revenueEnvValidator.js +244 -0
  290. package/dist/core/revenueEnvValidator.js.map +1 -0
  291. package/dist/core/schemaValidator.d.ts +49 -0
  292. package/dist/core/schemaValidator.d.ts.map +1 -0
  293. package/dist/core/schemaValidator.js +234 -0
  294. package/dist/core/schemaValidator.js.map +1 -0
  295. package/dist/core/secretStore.d.ts +48 -0
  296. package/dist/core/secretStore.d.ts.map +1 -0
  297. package/dist/core/secretStore.js +295 -0
  298. package/dist/core/secretStore.js.map +1 -0
  299. package/dist/core/selfUpgrade.d.ts +79 -0
  300. package/dist/core/selfUpgrade.d.ts.map +1 -0
  301. package/dist/core/selfUpgrade.js +92 -0
  302. package/dist/core/selfUpgrade.js.map +1 -0
  303. package/dist/core/sessionStorage.d.ts +10 -0
  304. package/dist/core/sessionStorage.d.ts.map +1 -0
  305. package/dist/core/sessionStorage.js +46 -0
  306. package/dist/core/sessionStorage.js.map +1 -0
  307. package/dist/core/sessionStore.d.ts +35 -0
  308. package/dist/core/sessionStore.d.ts.map +1 -0
  309. package/dist/core/sessionStore.js +191 -0
  310. package/dist/core/sessionStore.js.map +1 -0
  311. package/dist/core/shutdown.d.ts +34 -0
  312. package/dist/core/shutdown.d.ts.map +1 -0
  313. package/dist/core/shutdown.js +173 -0
  314. package/dist/core/shutdown.js.map +1 -0
  315. package/dist/core/sudoPasswordManager.d.ts +52 -0
  316. package/dist/core/sudoPasswordManager.d.ts.map +1 -0
  317. package/dist/core/sudoPasswordManager.js +115 -0
  318. package/dist/core/sudoPasswordManager.js.map +1 -0
  319. package/dist/core/taskCompletionDetector.d.ts +112 -0
  320. package/dist/core/taskCompletionDetector.d.ts.map +1 -0
  321. package/dist/core/taskCompletionDetector.js +469 -0
  322. package/dist/core/taskCompletionDetector.js.map +1 -0
  323. package/dist/core/testFailureMonitor.d.ts +67 -0
  324. package/dist/core/testFailureMonitor.d.ts.map +1 -0
  325. package/dist/core/testFailureMonitor.js +262 -0
  326. package/dist/core/testFailureMonitor.js.map +1 -0
  327. package/dist/core/toolPreconditions.d.ts +34 -0
  328. package/dist/core/toolPreconditions.d.ts.map +1 -0
  329. package/dist/core/toolPreconditions.js +242 -0
  330. package/dist/core/toolPreconditions.js.map +1 -0
  331. package/dist/core/toolRuntime.d.ts +185 -0
  332. package/dist/core/toolRuntime.d.ts.map +1 -0
  333. package/dist/core/toolRuntime.js +412 -0
  334. package/dist/core/toolRuntime.js.map +1 -0
  335. package/dist/core/types/utilityTypes.d.ts +183 -0
  336. package/dist/core/types/utilityTypes.d.ts.map +1 -0
  337. package/dist/core/types/utilityTypes.js +273 -0
  338. package/dist/core/types/utilityTypes.js.map +1 -0
  339. package/dist/core/types.d.ts +334 -0
  340. package/dist/core/types.d.ts.map +1 -0
  341. package/dist/core/types.js +76 -0
  342. package/dist/core/types.js.map +1 -0
  343. package/dist/core/unifiedOrchestrator.d.ts +47 -0
  344. package/dist/core/unifiedOrchestrator.d.ts.map +1 -0
  345. package/dist/core/unifiedOrchestrator.js +103 -0
  346. package/dist/core/unifiedOrchestrator.js.map +1 -0
  347. package/dist/core/unrestricted-mode.d.ts +42 -0
  348. package/dist/core/unrestricted-mode.d.ts.map +1 -0
  349. package/dist/core/unrestricted-mode.js +88 -0
  350. package/dist/core/unrestricted-mode.js.map +1 -0
  351. package/dist/core/updateChecker.d.ts +148 -0
  352. package/dist/core/updateChecker.d.ts.map +1 -0
  353. package/dist/core/updateChecker.js +593 -0
  354. package/dist/core/updateChecker.js.map +1 -0
  355. package/dist/headless/interactiveShell.d.ts +22 -0
  356. package/dist/headless/interactiveShell.d.ts.map +1 -0
  357. package/dist/headless/interactiveShell.js +4045 -0
  358. package/dist/headless/interactiveShell.js.map +1 -0
  359. package/dist/headless/quickMode.d.ts +26 -0
  360. package/dist/headless/quickMode.d.ts.map +1 -0
  361. package/dist/headless/quickMode.js +236 -0
  362. package/dist/headless/quickMode.js.map +1 -0
  363. package/dist/leanAgent.d.ts +73 -0
  364. package/dist/leanAgent.d.ts.map +1 -0
  365. package/dist/leanAgent.js +175 -0
  366. package/dist/leanAgent.js.map +1 -0
  367. package/dist/orchestration/index.d.ts +14 -0
  368. package/dist/orchestration/index.d.ts.map +1 -0
  369. package/dist/orchestration/index.js +12 -0
  370. package/dist/orchestration/index.js.map +1 -0
  371. package/dist/plugins/index.d.ts +49 -0
  372. package/dist/plugins/index.d.ts.map +1 -0
  373. package/dist/plugins/index.js +104 -0
  374. package/dist/plugins/index.js.map +1 -0
  375. package/dist/plugins/providers/anthropic/index.d.ts +9 -0
  376. package/dist/plugins/providers/anthropic/index.d.ts.map +1 -0
  377. package/dist/plugins/providers/anthropic/index.js +48 -0
  378. package/dist/plugins/providers/anthropic/index.js.map +1 -0
  379. package/dist/plugins/providers/deepseek/index.d.ts +11 -0
  380. package/dist/plugins/providers/deepseek/index.d.ts.map +1 -0
  381. package/dist/plugins/providers/deepseek/index.js +54 -0
  382. package/dist/plugins/providers/deepseek/index.js.map +1 -0
  383. package/dist/plugins/providers/index.d.ts +2 -0
  384. package/dist/plugins/providers/index.d.ts.map +1 -0
  385. package/dist/plugins/providers/index.js +17 -0
  386. package/dist/plugins/providers/index.js.map +1 -0
  387. package/dist/plugins/providers/openai/index.d.ts +10 -0
  388. package/dist/plugins/providers/openai/index.d.ts.map +1 -0
  389. package/dist/plugins/providers/openai/index.js +47 -0
  390. package/dist/plugins/providers/openai/index.js.map +1 -0
  391. package/dist/plugins/providers/xai/index.d.ts +10 -0
  392. package/dist/plugins/providers/xai/index.d.ts.map +1 -0
  393. package/dist/plugins/providers/xai/index.js +47 -0
  394. package/dist/plugins/providers/xai/index.js.map +1 -0
  395. package/dist/plugins/tools/agentSpawning/agentSpawningPlugin.d.ts +10 -0
  396. package/dist/plugins/tools/agentSpawning/agentSpawningPlugin.d.ts.map +1 -0
  397. package/dist/plugins/tools/agentSpawning/agentSpawningPlugin.js +110 -0
  398. package/dist/plugins/tools/agentSpawning/agentSpawningPlugin.js.map +1 -0
  399. package/dist/plugins/tools/bash/localBashPlugin.d.ts +3 -0
  400. package/dist/plugins/tools/bash/localBashPlugin.d.ts.map +1 -0
  401. package/dist/plugins/tools/bash/localBashPlugin.js +14 -0
  402. package/dist/plugins/tools/bash/localBashPlugin.js.map +1 -0
  403. package/dist/plugins/tools/edit/editPlugin.d.ts +9 -0
  404. package/dist/plugins/tools/edit/editPlugin.d.ts.map +1 -0
  405. package/dist/plugins/tools/edit/editPlugin.js +15 -0
  406. package/dist/plugins/tools/edit/editPlugin.js.map +1 -0
  407. package/dist/plugins/tools/enhancedGit/enhancedGitPlugin.d.ts +3 -0
  408. package/dist/plugins/tools/enhancedGit/enhancedGitPlugin.d.ts.map +1 -0
  409. package/dist/plugins/tools/enhancedGit/enhancedGitPlugin.js +9 -0
  410. package/dist/plugins/tools/enhancedGit/enhancedGitPlugin.js.map +1 -0
  411. package/dist/plugins/tools/filesystem/localFilesystemPlugin.d.ts +3 -0
  412. package/dist/plugins/tools/filesystem/localFilesystemPlugin.d.ts.map +1 -0
  413. package/dist/plugins/tools/filesystem/localFilesystemPlugin.js +14 -0
  414. package/dist/plugins/tools/filesystem/localFilesystemPlugin.js.map +1 -0
  415. package/dist/plugins/tools/gitHistory/gitHistoryPlugin.d.ts +3 -0
  416. package/dist/plugins/tools/gitHistory/gitHistoryPlugin.d.ts.map +1 -0
  417. package/dist/plugins/tools/gitHistory/gitHistoryPlugin.js +9 -0
  418. package/dist/plugins/tools/gitHistory/gitHistoryPlugin.js.map +1 -0
  419. package/dist/plugins/tools/index.d.ts +3 -0
  420. package/dist/plugins/tools/index.d.ts.map +1 -0
  421. package/dist/plugins/tools/index.js +3 -0
  422. package/dist/plugins/tools/index.js.map +1 -0
  423. package/dist/plugins/tools/integrity/integrityPlugin.d.ts +3 -0
  424. package/dist/plugins/tools/integrity/integrityPlugin.d.ts.map +1 -0
  425. package/dist/plugins/tools/integrity/integrityPlugin.js +31 -0
  426. package/dist/plugins/tools/integrity/integrityPlugin.js.map +1 -0
  427. package/dist/plugins/tools/mcp/mcpPlugin.d.ts +3 -0
  428. package/dist/plugins/tools/mcp/mcpPlugin.d.ts.map +1 -0
  429. package/dist/plugins/tools/mcp/mcpPlugin.js +27 -0
  430. package/dist/plugins/tools/mcp/mcpPlugin.js.map +1 -0
  431. package/dist/plugins/tools/nodeDefaults.d.ts +13 -0
  432. package/dist/plugins/tools/nodeDefaults.d.ts.map +1 -0
  433. package/dist/plugins/tools/nodeDefaults.js +31 -0
  434. package/dist/plugins/tools/nodeDefaults.js.map +1 -0
  435. package/dist/plugins/tools/orchestration/orchestrationPlugin.d.ts +3 -0
  436. package/dist/plugins/tools/orchestration/orchestrationPlugin.d.ts.map +1 -0
  437. package/dist/plugins/tools/orchestration/orchestrationPlugin.js +340 -0
  438. package/dist/plugins/tools/orchestration/orchestrationPlugin.js.map +1 -0
  439. package/dist/plugins/tools/registry.d.ts +22 -0
  440. package/dist/plugins/tools/registry.d.ts.map +1 -0
  441. package/dist/plugins/tools/registry.js +58 -0
  442. package/dist/plugins/tools/registry.js.map +1 -0
  443. package/dist/plugins/tools/search/localSearchPlugin.d.ts +3 -0
  444. package/dist/plugins/tools/search/localSearchPlugin.d.ts.map +1 -0
  445. package/dist/plugins/tools/search/localSearchPlugin.js +14 -0
  446. package/dist/plugins/tools/search/localSearchPlugin.js.map +1 -0
  447. package/dist/plugins/tools/skills/skillPlugin.d.ts +3 -0
  448. package/dist/plugins/tools/skills/skillPlugin.d.ts.map +1 -0
  449. package/dist/plugins/tools/skills/skillPlugin.js +27 -0
  450. package/dist/plugins/tools/skills/skillPlugin.js.map +1 -0
  451. package/dist/providers/baseProvider.d.ts +148 -0
  452. package/dist/providers/baseProvider.d.ts.map +1 -0
  453. package/dist/providers/baseProvider.js +284 -0
  454. package/dist/providers/baseProvider.js.map +1 -0
  455. package/dist/providers/openaiChatCompletionsProvider.d.ts +64 -0
  456. package/dist/providers/openaiChatCompletionsProvider.d.ts.map +1 -0
  457. package/dist/providers/openaiChatCompletionsProvider.js +1003 -0
  458. package/dist/providers/openaiChatCompletionsProvider.js.map +1 -0
  459. package/dist/providers/providerFactory.d.ts +22 -0
  460. package/dist/providers/providerFactory.d.ts.map +1 -0
  461. package/dist/providers/providerFactory.js +25 -0
  462. package/dist/providers/providerFactory.js.map +1 -0
  463. package/dist/providers/resilientProvider.d.ts +103 -0
  464. package/dist/providers/resilientProvider.d.ts.map +1 -0
  465. package/dist/providers/resilientProvider.js +462 -0
  466. package/dist/providers/resilientProvider.js.map +1 -0
  467. package/dist/runtime/agentController.d.ts +114 -0
  468. package/dist/runtime/agentController.d.ts.map +1 -0
  469. package/dist/runtime/agentController.js +707 -0
  470. package/dist/runtime/agentController.js.map +1 -0
  471. package/dist/runtime/agentHost.d.ts +61 -0
  472. package/dist/runtime/agentHost.d.ts.map +1 -0
  473. package/dist/runtime/agentHost.js +157 -0
  474. package/dist/runtime/agentHost.js.map +1 -0
  475. package/dist/runtime/agentSession.d.ts +45 -0
  476. package/dist/runtime/agentSession.d.ts.map +1 -0
  477. package/dist/runtime/agentSession.js +210 -0
  478. package/dist/runtime/agentSession.js.map +1 -0
  479. package/dist/runtime/agentWorkerPool.d.ts +167 -0
  480. package/dist/runtime/agentWorkerPool.d.ts.map +1 -0
  481. package/dist/runtime/agentWorkerPool.js +435 -0
  482. package/dist/runtime/agentWorkerPool.js.map +1 -0
  483. package/dist/runtime/node.d.ts +7 -0
  484. package/dist/runtime/node.d.ts.map +1 -0
  485. package/dist/runtime/node.js +25 -0
  486. package/dist/runtime/node.js.map +1 -0
  487. package/dist/runtime/universal.d.ts +18 -0
  488. package/dist/runtime/universal.d.ts.map +1 -0
  489. package/dist/runtime/universal.js +21 -0
  490. package/dist/runtime/universal.js.map +1 -0
  491. package/dist/shell/autoExecutor.d.ts +70 -0
  492. package/dist/shell/autoExecutor.d.ts.map +1 -0
  493. package/dist/shell/autoExecutor.js +320 -0
  494. package/dist/shell/autoExecutor.js.map +1 -0
  495. package/dist/shell/commandRegistry.d.ts +122 -0
  496. package/dist/shell/commandRegistry.d.ts.map +1 -0
  497. package/dist/shell/commandRegistry.js +398 -0
  498. package/dist/shell/commandRegistry.js.map +1 -0
  499. package/dist/shell/composableMessage.d.ts +178 -0
  500. package/dist/shell/composableMessage.d.ts.map +1 -0
  501. package/dist/shell/composableMessage.js +384 -0
  502. package/dist/shell/composableMessage.js.map +1 -0
  503. package/dist/shell/liveStatus.d.ts +27 -0
  504. package/dist/shell/liveStatus.d.ts.map +1 -0
  505. package/dist/shell/liveStatus.js +53 -0
  506. package/dist/shell/liveStatus.js.map +1 -0
  507. package/dist/shell/systemPrompt.d.ts +12 -0
  508. package/dist/shell/systemPrompt.d.ts.map +1 -0
  509. package/dist/shell/systemPrompt.js +16 -0
  510. package/dist/shell/systemPrompt.js.map +1 -0
  511. package/dist/shell/vimMode.d.ts +66 -0
  512. package/dist/shell/vimMode.d.ts.map +1 -0
  513. package/dist/shell/vimMode.js +435 -0
  514. package/dist/shell/vimMode.js.map +1 -0
  515. package/dist/tools/bashTools.d.ts +7 -0
  516. package/dist/tools/bashTools.d.ts.map +1 -0
  517. package/dist/tools/bashTools.js +773 -0
  518. package/dist/tools/bashTools.js.map +1 -0
  519. package/dist/tools/diffUtils.d.ts +43 -0
  520. package/dist/tools/diffUtils.d.ts.map +1 -0
  521. package/dist/tools/diffUtils.js +607 -0
  522. package/dist/tools/diffUtils.js.map +1 -0
  523. package/dist/tools/editTools.d.ts +29 -0
  524. package/dist/tools/editTools.d.ts.map +1 -0
  525. package/dist/tools/editTools.js +673 -0
  526. package/dist/tools/editTools.js.map +1 -0
  527. package/dist/tools/emailTools.d.ts +140 -0
  528. package/dist/tools/emailTools.d.ts.map +1 -0
  529. package/dist/tools/emailTools.js +793 -0
  530. package/dist/tools/emailTools.js.map +1 -0
  531. package/dist/tools/fileChangeTracker.d.ts +47 -0
  532. package/dist/tools/fileChangeTracker.d.ts.map +1 -0
  533. package/dist/tools/fileChangeTracker.js +154 -0
  534. package/dist/tools/fileChangeTracker.js.map +1 -0
  535. package/dist/tools/fileReadTracker.d.ts +69 -0
  536. package/dist/tools/fileReadTracker.d.ts.map +1 -0
  537. package/dist/tools/fileReadTracker.js +213 -0
  538. package/dist/tools/fileReadTracker.js.map +1 -0
  539. package/dist/tools/fileTools.d.ts +3 -0
  540. package/dist/tools/fileTools.d.ts.map +1 -0
  541. package/dist/tools/fileTools.js +333 -0
  542. package/dist/tools/fileTools.js.map +1 -0
  543. package/dist/tools/grepTools.d.ts +3 -0
  544. package/dist/tools/grepTools.d.ts.map +1 -0
  545. package/dist/tools/grepTools.js +128 -0
  546. package/dist/tools/grepTools.js.map +1 -0
  547. package/dist/tools/hitlTools.d.ts +7 -0
  548. package/dist/tools/hitlTools.d.ts.map +1 -0
  549. package/dist/tools/hitlTools.js +189 -0
  550. package/dist/tools/hitlTools.js.map +1 -0
  551. package/dist/tools/humanOpsTools.d.ts +3 -0
  552. package/dist/tools/humanOpsTools.d.ts.map +1 -0
  553. package/dist/tools/humanOpsTools.js +86 -0
  554. package/dist/tools/humanOpsTools.js.map +1 -0
  555. package/dist/tools/localExplore.d.ts +38 -0
  556. package/dist/tools/localExplore.d.ts.map +1 -0
  557. package/dist/tools/localExplore.js +30 -0
  558. package/dist/tools/localExplore.js.map +1 -0
  559. package/dist/tools/metaTools.d.ts +3 -0
  560. package/dist/tools/metaTools.d.ts.map +1 -0
  561. package/dist/tools/metaTools.js +148 -0
  562. package/dist/tools/metaTools.js.map +1 -0
  563. package/dist/tools/planningTools.d.ts +81 -0
  564. package/dist/tools/planningTools.d.ts.map +1 -0
  565. package/dist/tools/planningTools.js +370 -0
  566. package/dist/tools/planningTools.js.map +1 -0
  567. package/dist/tools/searchTools.d.ts +12 -0
  568. package/dist/tools/searchTools.d.ts.map +1 -0
  569. package/dist/tools/searchTools.js +363 -0
  570. package/dist/tools/searchTools.js.map +1 -0
  571. package/dist/tools/telemetryTools.d.ts +10 -0
  572. package/dist/tools/telemetryTools.d.ts.map +1 -0
  573. package/dist/tools/telemetryTools.js +9 -0
  574. package/dist/tools/telemetryTools.js.map +1 -0
  575. package/dist/tools/unifiedOps.d.ts +3 -0
  576. package/dist/tools/unifiedOps.d.ts.map +1 -0
  577. package/dist/tools/unifiedOps.js +57 -0
  578. package/dist/tools/unifiedOps.js.map +1 -0
  579. package/dist/tools/webTools.d.ts +26 -0
  580. package/dist/tools/webTools.d.ts.map +1 -0
  581. package/dist/tools/webTools.js +227 -0
  582. package/dist/tools/webTools.js.map +1 -0
  583. package/dist/ui/PromptController.d.ts +193 -0
  584. package/dist/ui/PromptController.d.ts.map +1 -0
  585. package/dist/ui/PromptController.js +394 -0
  586. package/dist/ui/PromptController.js.map +1 -0
  587. package/dist/ui/UnifiedUIRenderer.d.ts +843 -0
  588. package/dist/ui/UnifiedUIRenderer.d.ts.map +1 -0
  589. package/dist/ui/UnifiedUIRenderer.js +5711 -0
  590. package/dist/ui/UnifiedUIRenderer.js.map +1 -0
  591. package/dist/ui/animatedStatus.d.ts +140 -0
  592. package/dist/ui/animatedStatus.d.ts.map +1 -0
  593. package/dist/ui/animatedStatus.js +480 -0
  594. package/dist/ui/animatedStatus.js.map +1 -0
  595. package/dist/ui/animation/AnimationScheduler.d.ts +197 -0
  596. package/dist/ui/animation/AnimationScheduler.d.ts.map +1 -0
  597. package/dist/ui/animation/AnimationScheduler.js +440 -0
  598. package/dist/ui/animation/AnimationScheduler.js.map +1 -0
  599. package/dist/ui/codeHighlighter.d.ts +6 -0
  600. package/dist/ui/codeHighlighter.d.ts.map +1 -0
  601. package/dist/ui/codeHighlighter.js +855 -0
  602. package/dist/ui/codeHighlighter.js.map +1 -0
  603. package/dist/ui/designSystem.d.ts +26 -0
  604. package/dist/ui/designSystem.d.ts.map +1 -0
  605. package/dist/ui/designSystem.js +114 -0
  606. package/dist/ui/designSystem.js.map +1 -0
  607. package/dist/ui/errorFormatter.d.ts +64 -0
  608. package/dist/ui/errorFormatter.d.ts.map +1 -0
  609. package/dist/ui/errorFormatter.js +316 -0
  610. package/dist/ui/errorFormatter.js.map +1 -0
  611. package/dist/ui/globalWriteLock.d.ts +63 -0
  612. package/dist/ui/globalWriteLock.d.ts.map +1 -0
  613. package/dist/ui/globalWriteLock.js +173 -0
  614. package/dist/ui/globalWriteLock.js.map +1 -0
  615. package/dist/ui/index.d.ts +32 -0
  616. package/dist/ui/index.d.ts.map +1 -0
  617. package/dist/ui/index.js +54 -0
  618. package/dist/ui/index.js.map +1 -0
  619. package/dist/ui/interrupts/InterruptManager.d.ts +157 -0
  620. package/dist/ui/interrupts/InterruptManager.d.ts.map +1 -0
  621. package/dist/ui/interrupts/InterruptManager.js +501 -0
  622. package/dist/ui/interrupts/InterruptManager.js.map +1 -0
  623. package/dist/ui/layout.d.ts +27 -0
  624. package/dist/ui/layout.d.ts.map +1 -0
  625. package/dist/ui/layout.js +184 -0
  626. package/dist/ui/layout.js.map +1 -0
  627. package/dist/ui/outputMode.d.ts +44 -0
  628. package/dist/ui/outputMode.d.ts.map +1 -0
  629. package/dist/ui/outputMode.js +123 -0
  630. package/dist/ui/outputMode.js.map +1 -0
  631. package/dist/ui/overlay/OverlayManager.d.ts +105 -0
  632. package/dist/ui/overlay/OverlayManager.d.ts.map +1 -0
  633. package/dist/ui/overlay/OverlayManager.js +304 -0
  634. package/dist/ui/overlay/OverlayManager.js.map +1 -0
  635. package/dist/ui/premiumComponents.d.ts +54 -0
  636. package/dist/ui/premiumComponents.d.ts.map +1 -0
  637. package/dist/ui/premiumComponents.js +241 -0
  638. package/dist/ui/premiumComponents.js.map +1 -0
  639. package/dist/ui/richText.d.ts +13 -0
  640. package/dist/ui/richText.d.ts.map +1 -0
  641. package/dist/ui/richText.js +444 -0
  642. package/dist/ui/richText.js.map +1 -0
  643. package/dist/ui/telemetry/ResponseTracker.d.ts +22 -0
  644. package/dist/ui/telemetry/ResponseTracker.d.ts.map +1 -0
  645. package/dist/ui/telemetry/ResponseTracker.js +60 -0
  646. package/dist/ui/telemetry/ResponseTracker.js.map +1 -0
  647. package/dist/ui/telemetry/UITelemetry.d.ts +181 -0
  648. package/dist/ui/telemetry/UITelemetry.d.ts.map +1 -0
  649. package/dist/ui/telemetry/UITelemetry.js +446 -0
  650. package/dist/ui/telemetry/UITelemetry.js.map +1 -0
  651. package/dist/ui/textHighlighter.d.ts +83 -0
  652. package/dist/ui/textHighlighter.d.ts.map +1 -0
  653. package/dist/ui/textHighlighter.js +267 -0
  654. package/dist/ui/textHighlighter.js.map +1 -0
  655. package/dist/ui/theme.d.ts +364 -0
  656. package/dist/ui/theme.d.ts.map +1 -0
  657. package/dist/ui/theme.js +471 -0
  658. package/dist/ui/theme.js.map +1 -0
  659. package/dist/ui/toolDisplay.d.ts +221 -0
  660. package/dist/ui/toolDisplay.d.ts.map +1 -0
  661. package/dist/ui/toolDisplay.js +1654 -0
  662. package/dist/ui/toolDisplay.js.map +1 -0
  663. package/dist/ui/uiConstants.d.ts +288 -0
  664. package/dist/ui/uiConstants.d.ts.map +1 -0
  665. package/dist/ui/uiConstants.js +472 -0
  666. package/dist/ui/uiConstants.js.map +1 -0
  667. package/dist/utils/askUserPrompt.d.ts +21 -0
  668. package/dist/utils/askUserPrompt.d.ts.map +1 -0
  669. package/dist/utils/askUserPrompt.js +87 -0
  670. package/dist/utils/askUserPrompt.js.map +1 -0
  671. package/dist/utils/asyncUtils.d.ts +95 -0
  672. package/dist/utils/asyncUtils.d.ts.map +1 -0
  673. package/dist/utils/asyncUtils.js +286 -0
  674. package/dist/utils/asyncUtils.js.map +1 -0
  675. package/dist/utils/debugLogger.d.ts +6 -0
  676. package/dist/utils/debugLogger.d.ts.map +1 -0
  677. package/dist/utils/debugLogger.js +39 -0
  678. package/dist/utils/debugLogger.js.map +1 -0
  679. package/dist/utils/errorUtils.d.ts +12 -0
  680. package/dist/utils/errorUtils.d.ts.map +1 -0
  681. package/dist/utils/errorUtils.js +83 -0
  682. package/dist/utils/errorUtils.js.map +1 -0
  683. package/dist/utils/frontmatter.d.ts +10 -0
  684. package/dist/utils/frontmatter.d.ts.map +1 -0
  685. package/dist/utils/frontmatter.js +78 -0
  686. package/dist/utils/frontmatter.js.map +1 -0
  687. package/dist/utils/packageInfo.d.ts +14 -0
  688. package/dist/utils/packageInfo.d.ts.map +1 -0
  689. package/dist/utils/packageInfo.js +45 -0
  690. package/dist/utils/packageInfo.js.map +1 -0
  691. package/dist/utils/planFormatter.d.ts +34 -0
  692. package/dist/utils/planFormatter.d.ts.map +1 -0
  693. package/dist/utils/planFormatter.js +141 -0
  694. package/dist/utils/planFormatter.js.map +1 -0
  695. package/dist/utils/securityUtils.d.ts +132 -0
  696. package/dist/utils/securityUtils.d.ts.map +1 -0
  697. package/dist/utils/securityUtils.js +324 -0
  698. package/dist/utils/securityUtils.js.map +1 -0
  699. package/dist/utils/statusReporter.d.ts +6 -0
  700. package/dist/utils/statusReporter.d.ts.map +1 -0
  701. package/dist/utils/statusReporter.js +26 -0
  702. package/dist/utils/statusReporter.js.map +1 -0
  703. package/dist/workspace.d.ts +8 -0
  704. package/dist/workspace.d.ts.map +1 -0
  705. package/dist/workspace.js +135 -0
  706. package/dist/workspace.js.map +1 -0
  707. package/dist/workspace.validator.d.ts +49 -0
  708. package/dist/workspace.validator.d.ts.map +1 -0
  709. package/dist/workspace.validator.js +215 -0
  710. package/dist/workspace.validator.js.map +1 -0
  711. package/package.json +121 -0
@@ -0,0 +1,773 @@
1
+ import { spawn } from 'node:child_process';
2
+ import { mkdir } from 'node:fs/promises';
3
+ import { join } from 'node:path';
4
+ import { reportToolProgress } from '../core/toolRuntime.js';
5
+ import { validateBashCommand } from '../core/errors/safetyValidator.js';
6
+ import { analyzeBashFlow } from '../core/bashCommandGuidance.js';
7
+ import { buildError } from '../core/errors.js';
8
+ import { verifiedSuccess, verifiedFailure, analyzeOutput, OutputPatterns, createCommandCheck, } from '../core/resultVerification.js';
9
+ import { createErrorFixer } from '../core/aiErrorFixer.js';
10
+ import { logDebug } from '../utils/debugLogger.js';
11
+ import { createTestMonitor } from '../core/testFailureMonitor.js';
12
+ import { getSudoPassword, invalidateSudoPassword } from '../core/sudoPasswordManager.js';
13
+ // ANSI color codes for enhanced output
14
+ const ANSI_RESET = '\x1b[0m';
15
+ const ANSI_RED = '\x1b[31m';
16
+ const ANSI_GREEN = '\x1b[32m';
17
+ const ANSI_YELLOW = '\x1b[33m';
18
+ const ANSI_BLUE = '\x1b[34m';
19
+ const ANSI_CYAN = '\x1b[36m';
20
+ const ANSI_DIM = '\x1b[2m';
21
+ const ANSI_BOLD = '\x1b[1m';
22
+ const ANSI_RED_BOLD = '\x1b[1;31m';
23
+ const ANSI_GREEN_BOLD = '\x1b[1;32m';
24
+ const ANSI_YELLOW_BOLD = '\x1b[1;33m';
25
+ // ============================================================================
26
+ // Background Shell Manager (consolidated from backgroundBashTools.ts)
27
+ // ============================================================================
28
+ class BackgroundShell {
29
+ id;
30
+ command;
31
+ workingDir;
32
+ process;
33
+ outputBuffer = [];
34
+ errorBuffer = [];
35
+ lastReadPosition = 0;
36
+ isRunning = false;
37
+ exitCode;
38
+ constructor(id, command, workingDir) {
39
+ this.id = id;
40
+ this.command = command;
41
+ this.workingDir = workingDir;
42
+ }
43
+ start() {
44
+ this.process = spawn('bash', ['-c', this.command], {
45
+ cwd: this.workingDir,
46
+ stdio: ['ignore', 'pipe', 'pipe'],
47
+ });
48
+ this.isRunning = true;
49
+ this.process.stdout?.on('data', (data) => {
50
+ this.outputBuffer.push(data.toString());
51
+ });
52
+ this.process.stderr?.on('data', (data) => {
53
+ this.errorBuffer.push(data.toString());
54
+ });
55
+ this.process.on('exit', (code) => {
56
+ this.exitCode = code ?? 0;
57
+ this.isRunning = false;
58
+ });
59
+ }
60
+ getNewOutput(filter) {
61
+ const allOutput = this.outputBuffer.join('');
62
+ const newOutput = allOutput.substring(this.lastReadPosition);
63
+ this.lastReadPosition = allOutput.length;
64
+ const allError = this.errorBuffer.join('');
65
+ let stdout = newOutput;
66
+ if (filter) {
67
+ const lines = newOutput.split('\n');
68
+ stdout = lines.filter(line => filter.test(line)).join('\n');
69
+ }
70
+ return {
71
+ stdout,
72
+ stderr: allError,
73
+ status: this.isRunning ? 'running' : `exited with code ${this.exitCode}`,
74
+ };
75
+ }
76
+ kill() {
77
+ if (this.process) {
78
+ this.process.kill('SIGTERM');
79
+ setTimeout(() => {
80
+ if (this.process && !this.process.killed) {
81
+ this.process.kill('SIGKILL');
82
+ }
83
+ }, 5000);
84
+ }
85
+ }
86
+ }
87
+ class BackgroundShellManager {
88
+ shells = new Map();
89
+ nextId = 1;
90
+ createShell(command, workingDir) {
91
+ const shellId = `shell_${this.nextId++}`;
92
+ const shell = new BackgroundShell(shellId, command, workingDir);
93
+ this.shells.set(shellId, shell);
94
+ shell.start();
95
+ return shellId;
96
+ }
97
+ getShell(shellId) {
98
+ return this.shells.get(shellId);
99
+ }
100
+ killShell(shellId) {
101
+ const shell = this.shells.get(shellId);
102
+ if (shell) {
103
+ shell.kill();
104
+ this.shells.delete(shellId);
105
+ return true;
106
+ }
107
+ return false;
108
+ }
109
+ listShells() {
110
+ return Array.from(this.shells.keys());
111
+ }
112
+ }
113
+ // Global shell manager instance
114
+ const shellManager = new BackgroundShellManager();
115
+ async function execWithStreaming(command, options) {
116
+ const MAX_BUFFER_BYTES = 1_000_000; // ~1MB per stream to prevent OOM on chatty commands
117
+ return new Promise((resolve, reject) => {
118
+ const stdout = [];
119
+ const stderr = [];
120
+ let stdoutBytes = 0;
121
+ let stderrBytes = 0;
122
+ let stdoutTruncated = false;
123
+ let stderrTruncated = false;
124
+ let lineCount = 0;
125
+ let killed = false;
126
+ let earlyAbort = false;
127
+ let abortReason;
128
+ const child = spawn('bash', ['-c', command], {
129
+ cwd: options.cwd,
130
+ env: options.env,
131
+ stdio: ['ignore', 'pipe', 'pipe'],
132
+ });
133
+ const timeoutId = setTimeout(() => {
134
+ killed = true;
135
+ child.kill('SIGTERM');
136
+ setTimeout(() => child.kill('SIGKILL'), 1000);
137
+ }, options.timeout);
138
+ // Early abort function for test failures
139
+ const triggerEarlyAbort = (reason) => {
140
+ if (earlyAbort)
141
+ return; // Already aborting
142
+ earlyAbort = true;
143
+ abortReason = reason;
144
+ logDebug(`[Bash] Early abort triggered: ${reason}`);
145
+ reportToolProgress({
146
+ current: lineCount,
147
+ message: `⚡ Early abort: ${reason}`,
148
+ });
149
+ child.kill('SIGTERM');
150
+ setTimeout(() => {
151
+ if (!child.killed) {
152
+ child.kill('SIGKILL');
153
+ }
154
+ }, 2000);
155
+ };
156
+ const processLine = (line, isStderr) => {
157
+ lineCount++;
158
+ const trimmedLine = line.slice(0, 80);
159
+ reportToolProgress({
160
+ current: lineCount,
161
+ message: isStderr ? `stderr: ${trimmedLine}` : trimmedLine,
162
+ });
163
+ // Feed line to test monitor for real-time failure detection
164
+ if (options.testMonitor && !earlyAbort) {
165
+ const shouldAbort = options.testMonitor.processLine(line);
166
+ if (shouldAbort) {
167
+ const state = options.testMonitor.getState();
168
+ triggerEarlyAbort(state.abortReason || 'Test failures detected');
169
+ }
170
+ }
171
+ };
172
+ const appendChunk = (chunks, data, isStdout) => {
173
+ const byteLength = data.length;
174
+ const used = isStdout ? stdoutBytes : stderrBytes;
175
+ const available = MAX_BUFFER_BYTES - used;
176
+ if (available <= 0) {
177
+ if (isStdout)
178
+ stdoutTruncated = true;
179
+ else
180
+ stderrTruncated = true;
181
+ return;
182
+ }
183
+ const slice = byteLength > available ? data.subarray(0, available) : data;
184
+ chunks.push(slice.toString());
185
+ const consumed = slice.length; // Buffer length in bytes
186
+ if (isStdout) {
187
+ stdoutBytes += consumed;
188
+ if (byteLength > available)
189
+ stdoutTruncated = true;
190
+ }
191
+ else {
192
+ stderrBytes += consumed;
193
+ if (byteLength > available)
194
+ stderrTruncated = true;
195
+ }
196
+ };
197
+ let stdoutBuffer = '';
198
+ child.stdout?.on('data', (data) => {
199
+ const text = data.toString();
200
+ appendChunk(stdout, data, true);
201
+ stdoutBuffer += text;
202
+ if (stdoutBuffer.length > 4096) {
203
+ stdoutBuffer = stdoutBuffer.slice(-2048);
204
+ }
205
+ const lines = stdoutBuffer.split('\n');
206
+ stdoutBuffer = lines.pop() || '';
207
+ for (const line of lines) {
208
+ if (line.trim())
209
+ processLine(line, false);
210
+ }
211
+ });
212
+ let stderrBuffer = '';
213
+ child.stderr?.on('data', (data) => {
214
+ const text = data.toString();
215
+ appendChunk(stderr, data, false);
216
+ stderrBuffer += text;
217
+ if (stderrBuffer.length > 4096) {
218
+ stderrBuffer = stderrBuffer.slice(-2048);
219
+ }
220
+ const lines = stderrBuffer.split('\n');
221
+ stderrBuffer = lines.pop() || '';
222
+ for (const line of lines) {
223
+ if (line.trim())
224
+ processLine(line, true);
225
+ }
226
+ });
227
+ const buildOutput = (chunks, truncated) => {
228
+ const output = chunks.join('');
229
+ if (!truncated)
230
+ return output;
231
+ const limitKb = Math.round(MAX_BUFFER_BYTES / 1024);
232
+ const notice = `\n[output truncated after ${limitKb}KB to protect memory; rerun with narrower command to see full output]`;
233
+ return output ? `${output}${notice}` : notice.trim();
234
+ };
235
+ child.on('close', (code) => {
236
+ clearTimeout(timeoutId);
237
+ if (stdoutBuffer.trim())
238
+ processLine(stdoutBuffer, false);
239
+ if (stderrBuffer.trim())
240
+ processLine(stderrBuffer, true);
241
+ const stdoutText = buildOutput(stdout, stdoutTruncated);
242
+ const stderrText = buildOutput(stderr, stderrTruncated);
243
+ if (killed && !earlyAbort) {
244
+ reject({ killed: true, stdout: stdoutText, stderr: stderrText, code });
245
+ }
246
+ else {
247
+ const result = {
248
+ stdout: stdoutText,
249
+ stderr: stderrText,
250
+ exitCode: earlyAbort ? 1 : (code ?? 0),
251
+ };
252
+ if (earlyAbort && options.testMonitor) {
253
+ result.earlyAbort = true;
254
+ result.abortReason = abortReason;
255
+ result.abortMessage = options.testMonitor.formatAbortMessage();
256
+ }
257
+ resolve(result);
258
+ }
259
+ });
260
+ child.on('error', (error) => {
261
+ clearTimeout(timeoutId);
262
+ reject(error);
263
+ });
264
+ });
265
+ }
266
+ /**
267
+ * Execute a sudo command with password authentication
268
+ * Uses -S flag to read password from stdin
269
+ */
270
+ async function execSudoWithPassword(command, password, options) {
271
+ const MAX_BUFFER_BYTES = 1_000_000;
272
+ return new Promise((resolve, reject) => {
273
+ const stdout = [];
274
+ const stderr = [];
275
+ let stdoutBytes = 0;
276
+ let stderrBytes = 0;
277
+ let stdoutTruncated = false;
278
+ let stderrTruncated = false;
279
+ let lineCount = 0;
280
+ let killed = false;
281
+ let passwordSent = false;
282
+ // Use sudo -S to read password from stdin, -k to ignore cached credentials
283
+ // This ensures we always use our provided password
284
+ const sudoCommand = command.replace(/^\s*sudo\s+/, 'sudo -S ');
285
+ const child = spawn('bash', ['-c', sudoCommand], {
286
+ cwd: options.cwd,
287
+ env: options.env,
288
+ stdio: ['pipe', 'pipe', 'pipe'], // Connect stdin for password
289
+ });
290
+ const timeoutId = setTimeout(() => {
291
+ killed = true;
292
+ child.kill('SIGTERM');
293
+ setTimeout(() => child.kill('SIGKILL'), 1000);
294
+ }, options.timeout);
295
+ const processLine = (line, isStderr) => {
296
+ // Filter out password prompt from output
297
+ if (line.includes('[sudo] password') || line.includes('Password:')) {
298
+ return;
299
+ }
300
+ lineCount++;
301
+ const trimmedLine = line.slice(0, 80);
302
+ reportToolProgress({
303
+ current: lineCount,
304
+ message: isStderr ? `stderr: ${trimmedLine}` : trimmedLine,
305
+ });
306
+ };
307
+ const appendChunk = (chunks, data, isStdout) => {
308
+ const byteLength = data.length;
309
+ const used = isStdout ? stdoutBytes : stderrBytes;
310
+ const available = MAX_BUFFER_BYTES - used;
311
+ if (available <= 0) {
312
+ if (isStdout)
313
+ stdoutTruncated = true;
314
+ else
315
+ stderrTruncated = true;
316
+ return;
317
+ }
318
+ const slice = byteLength > available ? data.subarray(0, available) : data;
319
+ chunks.push(slice.toString());
320
+ const consumed = slice.length;
321
+ if (isStdout) {
322
+ stdoutBytes += consumed;
323
+ if (byteLength > available)
324
+ stdoutTruncated = true;
325
+ }
326
+ else {
327
+ stderrBytes += consumed;
328
+ if (byteLength > available)
329
+ stderrTruncated = true;
330
+ }
331
+ };
332
+ let stdoutBuffer = '';
333
+ child.stdout?.on('data', (data) => {
334
+ const text = data.toString();
335
+ appendChunk(stdout, data, true);
336
+ stdoutBuffer += text;
337
+ if (stdoutBuffer.length > 4096) {
338
+ stdoutBuffer = stdoutBuffer.slice(-2048);
339
+ }
340
+ const lines = stdoutBuffer.split('\n');
341
+ stdoutBuffer = lines.pop() || '';
342
+ for (const line of lines) {
343
+ if (line.trim())
344
+ processLine(line, false);
345
+ }
346
+ });
347
+ let stderrBuffer = '';
348
+ child.stderr?.on('data', (data) => {
349
+ const text = data.toString();
350
+ // Send password when sudo prompts for it
351
+ if (!passwordSent && (text.includes('[sudo] password') || text.includes('Password:'))) {
352
+ child.stdin?.write(password + '\n');
353
+ child.stdin?.end();
354
+ passwordSent = true;
355
+ reportToolProgress({ current: 0, message: '🔐 Authenticating with sudo...' });
356
+ return; // Don't add password prompt to output
357
+ }
358
+ // Filter password prompt lines from output
359
+ const filteredText = text.split('\n')
360
+ .filter(line => !line.includes('[sudo] password') && !line.includes('Password:'))
361
+ .join('\n');
362
+ if (filteredText) {
363
+ appendChunk(stderr, Buffer.from(filteredText), false);
364
+ stderrBuffer += filteredText;
365
+ if (stderrBuffer.length > 4096) {
366
+ stderrBuffer = stderrBuffer.slice(-2048);
367
+ }
368
+ const lines = stderrBuffer.split('\n');
369
+ stderrBuffer = lines.pop() || '';
370
+ for (const line of lines) {
371
+ if (line.trim())
372
+ processLine(line, true);
373
+ }
374
+ }
375
+ });
376
+ // Send password immediately after spawn for cases where prompt comes fast
377
+ setTimeout(() => {
378
+ if (!passwordSent && child.stdin?.writable) {
379
+ child.stdin?.write(password + '\n');
380
+ child.stdin?.end();
381
+ passwordSent = true;
382
+ }
383
+ }, 100);
384
+ const buildOutput = (chunks, truncated) => {
385
+ const output = chunks.join('');
386
+ // Filter out any remaining password-related lines
387
+ const filtered = output.split('\n')
388
+ .filter(line => !line.includes('[sudo] password') && !line.includes('Password:') && !line.includes('Sorry, try again'))
389
+ .join('\n');
390
+ if (!truncated)
391
+ return filtered;
392
+ const limitKb = Math.round(MAX_BUFFER_BYTES / 1024);
393
+ const notice = `\n[output truncated after ${limitKb}KB to protect memory]`;
394
+ return filtered ? `${filtered}${notice}` : notice.trim();
395
+ };
396
+ child.on('close', (code) => {
397
+ clearTimeout(timeoutId);
398
+ if (stdoutBuffer.trim())
399
+ processLine(stdoutBuffer, false);
400
+ if (stderrBuffer.trim())
401
+ processLine(stderrBuffer, true);
402
+ const stdoutText = buildOutput(stdout, stdoutTruncated);
403
+ const stderrText = buildOutput(stderr, stderrTruncated);
404
+ // Check for authentication failure
405
+ const combinedOutput = stdoutText + stderrText;
406
+ if (combinedOutput.includes('Sorry, try again') ||
407
+ combinedOutput.includes('incorrect password') ||
408
+ combinedOutput.includes('Authentication failure') ||
409
+ (code !== 0 && combinedOutput.includes('sudo:'))) {
410
+ // Invalid password - invalidate cache
411
+ invalidateSudoPassword();
412
+ }
413
+ if (killed) {
414
+ reject({ killed: true, stdout: stdoutText, stderr: stderrText, code });
415
+ }
416
+ else {
417
+ resolve({
418
+ stdout: stdoutText,
419
+ stderr: stderrText,
420
+ exitCode: code ?? 0,
421
+ });
422
+ }
423
+ });
424
+ child.on('error', (error) => {
425
+ clearTimeout(timeoutId);
426
+ reject(error);
427
+ });
428
+ });
429
+ }
430
+ // ============================================================================
431
+ // Utility Functions
432
+ // ============================================================================
433
+ // Keep the shell responsive while long commands run
434
+ function findGuiLauncher(_command) {
435
+ return null;
436
+ }
437
+ const errorFixerCache = new Map();
438
+ function getErrorFixer(workingDir) {
439
+ let fixer = errorFixerCache.get(workingDir);
440
+ if (!fixer) {
441
+ fixer = createErrorFixer({ workingDir });
442
+ errorFixerCache.set(workingDir, fixer);
443
+ }
444
+ return fixer;
445
+ }
446
+ /**
447
+ * Smart timeout detection based on command type
448
+ */
449
+ function getSmartTimeout(command) {
450
+ const cmd = command.toLowerCase().trim();
451
+ // Long-running commands that legitimately take time
452
+ if (cmd.includes('npm install') || cmd.includes('yarn install') || cmd.includes('pnpm install')) {
453
+ return 10 * 60 * 1000; // 10 minutes for package installs
454
+ }
455
+ if (cmd.includes('npm run build') || cmd.includes('yarn build') || cmd.includes('make')) {
456
+ return 10 * 60 * 1000; // 10 minutes for builds
457
+ }
458
+ if (cmd.includes('docker build') || cmd.includes('docker-compose')) {
459
+ return 15 * 60 * 1000; // 15 minutes for docker builds
460
+ }
461
+ if (cmd.includes('npm test') || cmd.includes('yarn test') || cmd.includes('pytest') || cmd.includes('jest')) {
462
+ return 10 * 60 * 1000; // 10 minutes for tests
463
+ }
464
+ if (cmd.includes('git clone') || cmd.includes('git fetch') || cmd.includes('git pull')) {
465
+ return 5 * 60 * 1000; // 5 minutes for git network ops
466
+ }
467
+ // Default timeout for most commands - prevents hung commands from blocking
468
+ return 2 * 60 * 1000; // 2 minutes default
469
+ }
470
+ const sandboxCache = new Map();
471
+ async function ensureSandboxPaths(workingDir) {
472
+ let pending = sandboxCache.get(workingDir);
473
+ if (!pending) {
474
+ pending = createSandboxPaths(workingDir);
475
+ sandboxCache.set(workingDir, pending);
476
+ }
477
+ return pending;
478
+ }
479
+ async function createSandboxPaths(workingDir) {
480
+ const root = join(workingDir, '.agi', 'shell-sandbox');
481
+ const home = join(root, 'home');
482
+ const cache = join(root, 'cache');
483
+ const config = join(root, 'config');
484
+ const data = join(root, 'data');
485
+ const tmp = join(root, 'tmp');
486
+ await Promise.all([home, cache, config, data, tmp].map((dir) => mkdir(dir, { recursive: true })));
487
+ return { root, home, cache, config, data, tmp };
488
+ }
489
+ /**
490
+ * Detect if a command needs access to the real home directory for cloud CLI credentials.
491
+ * Commands like firebase, gcloud, aws, az, kubectl require access to stored credentials.
492
+ */
493
+ function needsRealHome(command) {
494
+ const cloudCliPatterns = [
495
+ /\bfirebase\b/i, // Firebase CLI
496
+ /\bgcloud\b/i, // Google Cloud CLI
497
+ /\bgsutil\b/i, // Google Cloud Storage
498
+ /\baws\b/i, // AWS CLI
499
+ /\baz\b/i, // Azure CLI
500
+ /\bkubectl\b/i, // Kubernetes
501
+ /\bhelm\b/i, // Helm
502
+ /\bdocker\b/i, // Docker (for registry auth)
503
+ /\bnpm\s+publish\b/i, // npm publish (needs npm auth)
504
+ /\byarn\s+publish\b/i, // yarn publish
505
+ /\bpnpm\s+publish\b/i, // pnpm publish
506
+ /\bgh\b/i, // GitHub CLI
507
+ /\bvercel\b/i, // Vercel CLI
508
+ /\bnetlify\b/i, // Netlify CLI
509
+ /\bheroku\b/i, // Heroku CLI
510
+ /\bfly\b/i, // Fly.io CLI
511
+ /\bsupabase\b/i, // Supabase CLI
512
+ /\bwrangler\b/i, // Cloudflare Workers
513
+ ];
514
+ return cloudCliPatterns.some(pattern => pattern.test(command));
515
+ }
516
+ export async function buildSandboxEnv(workingDir, options) {
517
+ const envPreference = process.env['AGI_PRESERVE_HOME'];
518
+ // Preserve home if: env var set, option passed, or command needs cloud CLI credentials
519
+ const commandNeedsHome = options?.command ? needsRealHome(options.command) : false;
520
+ const preserveHome = envPreference === '1' ? true :
521
+ envPreference === '0' ? false :
522
+ Boolean(options?.preserveHome) || commandNeedsHome;
523
+ const paths = await ensureSandboxPaths(workingDir);
524
+ const env = {
525
+ ...process.env,
526
+ AGI_SANDBOX_ROOT: paths.root,
527
+ AGI_SANDBOX_HOME: paths.home,
528
+ AGI_SANDBOX_TMP: paths.tmp,
529
+ };
530
+ if (!preserveHome) {
531
+ env['HOME'] = paths.home;
532
+ env['XDG_CACHE_HOME'] = paths.cache;
533
+ env['XDG_CONFIG_HOME'] = paths.config;
534
+ env['XDG_DATA_HOME'] = paths.data;
535
+ }
536
+ // Always sandbox temp directories for safety
537
+ env['TMPDIR'] = paths.tmp;
538
+ env['TMP'] = paths.tmp;
539
+ env['TEMP'] = paths.tmp;
540
+ return env;
541
+ }
542
+ // ============================================================================
543
+ // Main Tool Factory
544
+ // ============================================================================
545
+ export function createBashTools(workingDir) {
546
+ return [
547
+ // Main bash execution tool
548
+ {
549
+ name: 'execute_bash',
550
+ description: 'Execute a bash command. Commands auto-timeout based on type. Use run_in_background: true for servers/watchers.',
551
+ parameters: {
552
+ type: 'object',
553
+ properties: {
554
+ command: { type: 'string', description: 'The bash command to execute' },
555
+ timeout: { type: 'number', description: 'Timeout in milliseconds (smart defaults apply)' },
556
+ run_in_background: { type: 'boolean', description: 'Run in background for long-running processes' },
557
+ },
558
+ required: ['command'],
559
+ },
560
+ handler: async (args) => {
561
+ const command = args['command'];
562
+ const runInBackground = args['run_in_background'] === true;
563
+ const userTimeout = args['timeout'];
564
+ const timeout = userTimeout ?? getSmartTimeout(command);
565
+ // Check if this is a sudo command
566
+ const isSudoCommand = /^\s*sudo\s+/i.test(command);
567
+ // Block commands that typically require passwords or interactive input (except sudo which we handle)
568
+ const interactiveCommands = /\b(passwd|su\s|login|ssh\s(?!-o)|sftp|ftp|mysql\s+-p|psql\s+-W)\b/i;
569
+ if (interactiveCommands.test(command)) {
570
+ return 'Skipped: Command requires interactive authentication. Use non-interactive alternatives.';
571
+ }
572
+ // Flow guidance (debug only - don't pollute chat)
573
+ const flowWarnings = analyzeBashFlow(command);
574
+ for (const warning of flowWarnings) {
575
+ const suffix = warning.suggestion ? ` — ${warning.suggestion}` : '';
576
+ logDebug(`[Bash Flow] ${warning.message}${suffix}`);
577
+ }
578
+ // Safety validation (informational only)
579
+ const validation = validateBashCommand(command);
580
+ if (!validation.valid) {
581
+ logDebug(`[Bash Safety] Command validation failed: ${validation.error?.message || 'Unknown error'}`);
582
+ }
583
+ // Safety warnings (debug only - don't pollute chat)
584
+ if (validation.warnings.length > 0) {
585
+ for (const warning of validation.warnings) {
586
+ logDebug(`[Bash Safety] WARNING: ${warning}`);
587
+ }
588
+ }
589
+ // GUI blocking check
590
+ const guiBlocked = findGuiLauncher(command);
591
+ if (guiBlocked) {
592
+ logDebug(`[Bash Safety] GUI launcher detected: ${guiBlocked}`);
593
+ }
594
+ // Background execution
595
+ if (runInBackground) {
596
+ const shellId = shellManager.createShell(command, workingDir);
597
+ return `Background shell started: ${shellId}\n\nUse BashOutput with bash_id="${shellId}" to monitor.\nUse KillShell with shell_id="${shellId}" to terminate.`;
598
+ }
599
+ // Foreground execution
600
+ const startTime = Date.now();
601
+ const usesRealHome = needsRealHome(command);
602
+ // Create test monitor for test commands to enable early abort on failures
603
+ const testMonitor = createTestMonitor(command);
604
+ if (testMonitor) {
605
+ logDebug(`[Bash] Test command detected, enabling failure monitoring with early abort`);
606
+ }
607
+ try {
608
+ const env = await buildSandboxEnv(workingDir, { command });
609
+ // Report sandbox status for visibility
610
+ const sandboxStatus = usesRealHome
611
+ ? `${ANSI_CYAN}🔓 Using real credentials (cloud CLI detected)${ANSI_RESET}`
612
+ : `${ANSI_DIM}🔒 Sandboxed environment${ANSI_RESET}`;
613
+ reportToolProgress({ current: 0, message: sandboxStatus });
614
+ let result;
615
+ // Handle sudo commands with password authentication
616
+ if (isSudoCommand) {
617
+ logDebug('[Bash] Sudo command detected, requesting password');
618
+ reportToolProgress({ current: 0, message: '🔐 Sudo command detected, requesting password...' });
619
+ const password = await getSudoPassword();
620
+ if (!password) {
621
+ return `${ANSI_YELLOW}Sudo command cancelled: No password provided.${ANSI_RESET}\n\nTo run this command, you need to provide your sudo password when prompted.`;
622
+ }
623
+ result = await execSudoWithPassword(command, password, { cwd: workingDir, timeout, env, testMonitor });
624
+ }
625
+ else {
626
+ result = await execWithStreaming(command, { cwd: workingDir, timeout, env, testMonitor });
627
+ }
628
+ const { stdout, stderr, exitCode, earlyAbort, abortMessage } = result;
629
+ const durationMs = Date.now() - startTime;
630
+ const combinedOutput = [stdout, stderr].filter(Boolean).join('\n');
631
+ // Handle early abort from test monitor - encourage replanning
632
+ if (earlyAbort && testMonitor) {
633
+ const state = testMonitor.getState();
634
+ const suggestions = [
635
+ 'REPLAN: Fix the identified issues before running tests again',
636
+ ...state.suggestions,
637
+ ];
638
+ return verifiedFailure(`${ANSI_YELLOW_BOLD}Test run aborted early - replan recommended${ANSI_RESET}`, `Command: ${command}\n\n${ANSI_YELLOW}The test run was stopped early to save time.${ANSI_RESET}\n\n` +
639
+ `${abortMessage || ''}\n\n` +
640
+ `${ANSI_DIM}Partial output:${ANSI_RESET}\n${combinedOutput || '(none)'}`, suggestions, [
641
+ { check: 'Early abort', passed: false, details: state.abortReason || 'Multiple test failures' },
642
+ { check: 'Failed tests', passed: false, details: `${state.failedTests.length} test file(s) failed` },
643
+ ], durationMs);
644
+ }
645
+ const commandLower = command.toLowerCase().trim();
646
+ let patterns = OutputPatterns.command;
647
+ if (commandLower.startsWith('git ') || commandLower === 'git')
648
+ patterns = OutputPatterns.git;
649
+ else if (commandLower.startsWith('npm ') || commandLower.startsWith('npx '))
650
+ patterns = OutputPatterns.npm;
651
+ const analysis = analyzeOutput(combinedOutput, patterns, exitCode);
652
+ const commandCheck = createCommandCheck('Command execution', exitCode, combinedOutput);
653
+ if (exitCode !== 0) {
654
+ const errorFixer = getErrorFixer(workingDir);
655
+ const aiErrors = errorFixer.analyzeOutput(combinedOutput, command);
656
+ const aiGuidance = aiErrors.length > 0 ? errorFixer.formatForAI(aiErrors) : '';
657
+ const suggestions = ['Review the error message', 'Fix the issue and retry'];
658
+ const firstError = aiErrors[0];
659
+ if (firstError?.suggestedFixes[0]) {
660
+ suggestions.unshift(`AI Suggestion: ${firstError.suggestedFixes[0].description}`);
661
+ }
662
+ // Add replan suggestion for test failures
663
+ if (testMonitor && testMonitor.getState().failedTests.length > 0) {
664
+ suggestions.unshift('REPLAN: Multiple test failures detected - consider fixing incrementally');
665
+ }
666
+ return verifiedFailure(`Command failed with exit code ${exitCode}`, `Command: ${command}\n\nOutput:\n${combinedOutput || '(none)'}${aiGuidance}`, suggestions, [commandCheck], durationMs);
667
+ }
668
+ if (analysis.isFailure) {
669
+ return verifiedFailure(`Command completed with exit code 0 but output indicates failure`, `Command: ${command}\n\n${ANSI_RED_BOLD}Output:${ANSI_RESET}\n${combinedOutput || '(no output)'}`, ['Review the error message in the output', 'Fix the underlying issue and retry'], [commandCheck, { check: 'Output analysis', passed: false, details: `Failure pattern: ${analysis.matchedPattern}` }], durationMs);
670
+ }
671
+ const envLabel = usesRealHome ? `${ANSI_CYAN}[real credentials]${ANSI_RESET}` : `${ANSI_DIM}[sandboxed]${ANSI_RESET}`;
672
+ return verifiedSuccess(combinedOutput.trim() ? `Command executed successfully ${envLabel}` : `Command executed successfully (no output) ${envLabel}`, `Command: ${command}${combinedOutput.trim() ? `\n\n${ANSI_GREEN_BOLD}Output:${ANSI_RESET}\n${combinedOutput}` : ''}`, [commandCheck, ...(analysis.isSuccess ? [{ check: 'Output analysis', passed: true, details: `Success pattern matched` }] : [])], durationMs);
673
+ }
674
+ catch (error) {
675
+ const execError = error;
676
+ const durationMs = Date.now() - startTime;
677
+ const exitCode = execError.code ?? 1;
678
+ const combinedError = [execError.stdout, execError.stderr, execError.message].filter(Boolean).join('\n');
679
+ if (execError.killed) {
680
+ return verifiedFailure(`Command timed out after ${timeout}ms`, `Command: ${command}\n\nPartial output:\n${combinedError || '(none)'}`, ['Increase timeout if command legitimately needs more time', 'Check if command is hanging'], [{ check: 'Timeout', passed: false, details: `Exceeded ${timeout}ms` }], durationMs);
681
+ }
682
+ const errorFixer = getErrorFixer(workingDir);
683
+ const aiErrors = errorFixer.analyzeOutput(combinedError, command);
684
+ const aiGuidance = aiErrors.length > 0 ? errorFixer.formatForAI(aiErrors) : '';
685
+ const suggestions = ['Review the error message', 'Fix the issue and retry'];
686
+ const firstError = aiErrors[0];
687
+ if (firstError?.suggestedFixes[0]) {
688
+ suggestions.unshift(`AI Suggestion: ${firstError.suggestedFixes[0].description}`);
689
+ }
690
+ return verifiedFailure(`Command failed with exit code ${exitCode}`, `Command: ${command}\n\nError output:\n${combinedError || '(none)'}${aiGuidance}`, suggestions, [createCommandCheck('Command execution', exitCode, combinedError)], durationMs);
691
+ }
692
+ },
693
+ },
694
+ // Background shell output retrieval
695
+ {
696
+ name: 'BashOutput',
697
+ description: 'Retrieve output from a running or completed background bash shell.',
698
+ parameters: {
699
+ type: 'object',
700
+ properties: {
701
+ bash_id: { type: 'string', description: 'The ID of the background shell' },
702
+ filter: { type: 'string', description: 'Optional regex to filter output lines' },
703
+ },
704
+ required: ['bash_id'],
705
+ additionalProperties: false,
706
+ },
707
+ handler: async (args) => {
708
+ const bashId = args['bash_id'];
709
+ const filterStr = args['filter'];
710
+ if (typeof bashId !== 'string' || !bashId.trim()) {
711
+ return 'Error: bash_id must be a non-empty string.';
712
+ }
713
+ try {
714
+ const shell = shellManager.getShell(bashId);
715
+ if (!shell) {
716
+ const available = shellManager.listShells();
717
+ return `Error: Shell "${bashId}" not found.\n\nAvailable: ${available.length > 0 ? available.join(', ') : 'none'}`;
718
+ }
719
+ const filter = filterStr && typeof filterStr === 'string' ? new RegExp(filterStr) : undefined;
720
+ const { stdout, stderr, status } = shell.getNewOutput(filter);
721
+ const parts = [`Shell: ${bashId}`, `Status: ${status}`];
722
+ if (stdout) {
723
+ parts.push('\n=== New Output ===');
724
+ parts.push(stdout);
725
+ }
726
+ if (stderr) {
727
+ parts.push('\n=== Errors ===');
728
+ parts.push(stderr);
729
+ }
730
+ if (!stdout && !stderr)
731
+ parts.push('\n(No new output)');
732
+ return parts.join('\n');
733
+ }
734
+ catch (error) {
735
+ return buildError('retrieving shell output', error, { bash_id: bashId });
736
+ }
737
+ },
738
+ },
739
+ // Kill background shell
740
+ {
741
+ name: 'KillShell',
742
+ description: 'Kill a running background bash shell by its ID.',
743
+ parameters: {
744
+ type: 'object',
745
+ properties: {
746
+ shell_id: { type: 'string', description: 'The ID of the background shell to kill' },
747
+ },
748
+ required: ['shell_id'],
749
+ additionalProperties: false,
750
+ },
751
+ handler: async (args) => {
752
+ const shellId = args['shell_id'];
753
+ if (typeof shellId !== 'string' || !shellId.trim()) {
754
+ return 'Error: shell_id must be a non-empty string.';
755
+ }
756
+ try {
757
+ const success = shellManager.killShell(shellId);
758
+ if (success) {
759
+ return `Shell "${shellId}" has been terminated.`;
760
+ }
761
+ else {
762
+ const available = shellManager.listShells();
763
+ return `Error: Shell "${shellId}" not found.\n\nAvailable: ${available.length > 0 ? available.join(', ') : 'none'}`;
764
+ }
765
+ }
766
+ catch (error) {
767
+ return buildError('killing shell', error, { shell_id: shellId });
768
+ }
769
+ },
770
+ },
771
+ ];
772
+ }
773
+ //# sourceMappingURL=bashTools.js.map