@trenchwork/erosolar 1.1.16

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 (700) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +232 -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 +232 -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 +13 -0
  49. package/dist/capabilities/index.d.ts.map +1 -0
  50. package/dist/capabilities/index.js +18 -0
  51. package/dist/capabilities/index.js.map +1 -0
  52. package/dist/capabilities/kaliCapability.d.ts +14 -0
  53. package/dist/capabilities/kaliCapability.d.ts.map +1 -0
  54. package/dist/capabilities/kaliCapability.js +478 -0
  55. package/dist/capabilities/kaliCapability.js.map +1 -0
  56. package/dist/capabilities/mcpCapability.d.ts +7 -0
  57. package/dist/capabilities/mcpCapability.d.ts.map +1 -0
  58. package/dist/capabilities/mcpCapability.js +80 -0
  59. package/dist/capabilities/mcpCapability.js.map +1 -0
  60. package/dist/capabilities/memoryCapability.d.ts +10 -0
  61. package/dist/capabilities/memoryCapability.d.ts.map +1 -0
  62. package/dist/capabilities/memoryCapability.js +22 -0
  63. package/dist/capabilities/memoryCapability.js.map +1 -0
  64. package/dist/capabilities/notebookCapability.d.ts +6 -0
  65. package/dist/capabilities/notebookCapability.d.ts.map +1 -0
  66. package/dist/capabilities/notebookCapability.js +17 -0
  67. package/dist/capabilities/notebookCapability.js.map +1 -0
  68. package/dist/capabilities/searchCapability.d.ts +19 -0
  69. package/dist/capabilities/searchCapability.d.ts.map +1 -0
  70. package/dist/capabilities/searchCapability.js +29 -0
  71. package/dist/capabilities/searchCapability.js.map +1 -0
  72. package/dist/capabilities/skillCapability.d.ts +6 -0
  73. package/dist/capabilities/skillCapability.d.ts.map +1 -0
  74. package/dist/capabilities/skillCapability.js +17 -0
  75. package/dist/capabilities/skillCapability.js.map +1 -0
  76. package/dist/capabilities/todoCapability.d.ts +11 -0
  77. package/dist/capabilities/todoCapability.d.ts.map +1 -0
  78. package/dist/capabilities/todoCapability.js +22 -0
  79. package/dist/capabilities/todoCapability.js.map +1 -0
  80. package/dist/capabilities/toolManifest.d.ts +3 -0
  81. package/dist/capabilities/toolManifest.d.ts.map +1 -0
  82. package/dist/capabilities/toolManifest.js +163 -0
  83. package/dist/capabilities/toolManifest.js.map +1 -0
  84. package/dist/capabilities/toolRegistry.d.ts +25 -0
  85. package/dist/capabilities/toolRegistry.d.ts.map +1 -0
  86. package/dist/capabilities/toolRegistry.js +150 -0
  87. package/dist/capabilities/toolRegistry.js.map +1 -0
  88. package/dist/capabilities/unifiedCodingCapability.d.ts +62 -0
  89. package/dist/capabilities/unifiedCodingCapability.d.ts.map +1 -0
  90. package/dist/capabilities/unifiedCodingCapability.js +788 -0
  91. package/dist/capabilities/unifiedCodingCapability.js.map +1 -0
  92. package/dist/capabilities/webCapability.d.ts +23 -0
  93. package/dist/capabilities/webCapability.d.ts.map +1 -0
  94. package/dist/capabilities/webCapability.js +33 -0
  95. package/dist/capabilities/webCapability.js.map +1 -0
  96. package/dist/config.d.ts +25 -0
  97. package/dist/config.d.ts.map +1 -0
  98. package/dist/config.js +155 -0
  99. package/dist/config.js.map +1 -0
  100. package/dist/contracts/agent-profiles.schema.json +43 -0
  101. package/dist/contracts/agent-schemas.json +470 -0
  102. package/dist/contracts/models.schema.json +9 -0
  103. package/dist/contracts/module-schema.json +367 -0
  104. package/dist/contracts/schemas/agent-profile.schema.json +157 -0
  105. package/dist/contracts/schemas/agent-rules.schema.json +238 -0
  106. package/dist/contracts/schemas/agent-schemas.schema.json +528 -0
  107. package/dist/contracts/schemas/agent.schema.json +90 -0
  108. package/dist/contracts/schemas/tool-selection.schema.json +174 -0
  109. package/dist/contracts/tools.schema.json +42 -0
  110. package/dist/contracts/unified-schema.json +660 -0
  111. package/dist/contracts/v1/agent.d.ts +179 -0
  112. package/dist/contracts/v1/agent.d.ts.map +1 -0
  113. package/dist/contracts/v1/agent.js +8 -0
  114. package/dist/contracts/v1/agent.js.map +1 -0
  115. package/dist/contracts/v1/agentProfileManifest.d.ts +60 -0
  116. package/dist/contracts/v1/agentProfileManifest.d.ts.map +1 -0
  117. package/dist/contracts/v1/agentProfileManifest.js +9 -0
  118. package/dist/contracts/v1/agentProfileManifest.js.map +1 -0
  119. package/dist/contracts/v1/agentRules.d.ts +60 -0
  120. package/dist/contracts/v1/agentRules.d.ts.map +1 -0
  121. package/dist/contracts/v1/agentRules.js +10 -0
  122. package/dist/contracts/v1/agentRules.js.map +1 -0
  123. package/dist/contracts/v1/provider.d.ts +149 -0
  124. package/dist/contracts/v1/provider.d.ts.map +1 -0
  125. package/dist/contracts/v1/provider.js +7 -0
  126. package/dist/contracts/v1/provider.js.map +1 -0
  127. package/dist/contracts/v1/tool.d.ts +136 -0
  128. package/dist/contracts/v1/tool.d.ts.map +1 -0
  129. package/dist/contracts/v1/tool.js +7 -0
  130. package/dist/contracts/v1/tool.js.map +1 -0
  131. package/dist/contracts/v1/toolAccess.d.ts +43 -0
  132. package/dist/contracts/v1/toolAccess.d.ts.map +1 -0
  133. package/dist/contracts/v1/toolAccess.js +9 -0
  134. package/dist/contracts/v1/toolAccess.js.map +1 -0
  135. package/dist/core/agent.d.ts +320 -0
  136. package/dist/core/agent.d.ts.map +1 -0
  137. package/dist/core/agent.js +1627 -0
  138. package/dist/core/agent.js.map +1 -0
  139. package/dist/core/agentProfileManifest.d.ts +3 -0
  140. package/dist/core/agentProfileManifest.d.ts.map +1 -0
  141. package/dist/core/agentProfileManifest.js +188 -0
  142. package/dist/core/agentProfileManifest.js.map +1 -0
  143. package/dist/core/agentProfiles.d.ts +22 -0
  144. package/dist/core/agentProfiles.d.ts.map +1 -0
  145. package/dist/core/agentProfiles.js +35 -0
  146. package/dist/core/agentProfiles.js.map +1 -0
  147. package/dist/core/agentRegistry.d.ts +111 -0
  148. package/dist/core/agentRegistry.d.ts.map +1 -0
  149. package/dist/core/agentRegistry.js +229 -0
  150. package/dist/core/agentRegistry.js.map +1 -0
  151. package/dist/core/agentRulebook.d.ts +11 -0
  152. package/dist/core/agentRulebook.d.ts.map +1 -0
  153. package/dist/core/agentRulebook.js +136 -0
  154. package/dist/core/agentRulebook.js.map +1 -0
  155. package/dist/core/agentSchemaLoader.d.ts +131 -0
  156. package/dist/core/agentSchemaLoader.d.ts.map +1 -0
  157. package/dist/core/agentSchemaLoader.js +235 -0
  158. package/dist/core/agentSchemaLoader.js.map +1 -0
  159. package/dist/core/aiErrorFixer.d.ts +57 -0
  160. package/dist/core/aiErrorFixer.d.ts.map +1 -0
  161. package/dist/core/aiErrorFixer.js +214 -0
  162. package/dist/core/aiErrorFixer.js.map +1 -0
  163. package/dist/core/auth.d.ts +15 -0
  164. package/dist/core/auth.d.ts.map +1 -0
  165. package/dist/core/auth.js +291 -0
  166. package/dist/core/auth.js.map +1 -0
  167. package/dist/core/bashCommandGuidance.d.ts +16 -0
  168. package/dist/core/bashCommandGuidance.d.ts.map +1 -0
  169. package/dist/core/bashCommandGuidance.js +40 -0
  170. package/dist/core/bashCommandGuidance.js.map +1 -0
  171. package/dist/core/constants.d.ts +31 -0
  172. package/dist/core/constants.d.ts.map +1 -0
  173. package/dist/core/constants.js +62 -0
  174. package/dist/core/constants.js.map +1 -0
  175. package/dist/core/contextManager.d.ts +271 -0
  176. package/dist/core/contextManager.d.ts.map +1 -0
  177. package/dist/core/contextManager.js +1073 -0
  178. package/dist/core/contextManager.js.map +1 -0
  179. package/dist/core/contextWindow.d.ts +42 -0
  180. package/dist/core/contextWindow.d.ts.map +1 -0
  181. package/dist/core/contextWindow.js +123 -0
  182. package/dist/core/contextWindow.js.map +1 -0
  183. package/dist/core/customCommands.d.ts +19 -0
  184. package/dist/core/customCommands.d.ts.map +1 -0
  185. package/dist/core/customCommands.js +85 -0
  186. package/dist/core/customCommands.js.map +1 -0
  187. package/dist/core/errors/apiKeyErrors.d.ts +11 -0
  188. package/dist/core/errors/apiKeyErrors.d.ts.map +1 -0
  189. package/dist/core/errors/apiKeyErrors.js +159 -0
  190. package/dist/core/errors/apiKeyErrors.js.map +1 -0
  191. package/dist/core/errors/errorTypes.d.ts +111 -0
  192. package/dist/core/errors/errorTypes.d.ts.map +1 -0
  193. package/dist/core/errors/errorTypes.js +345 -0
  194. package/dist/core/errors/errorTypes.js.map +1 -0
  195. package/dist/core/errors/index.d.ts +50 -0
  196. package/dist/core/errors/index.d.ts.map +1 -0
  197. package/dist/core/errors/index.js +156 -0
  198. package/dist/core/errors/index.js.map +1 -0
  199. package/dist/core/errors/networkErrors.d.ts +14 -0
  200. package/dist/core/errors/networkErrors.d.ts.map +1 -0
  201. package/dist/core/errors/networkErrors.js +53 -0
  202. package/dist/core/errors/networkErrors.js.map +1 -0
  203. package/dist/core/errors/safetyValidator.d.ts +109 -0
  204. package/dist/core/errors/safetyValidator.d.ts.map +1 -0
  205. package/dist/core/errors/safetyValidator.js +271 -0
  206. package/dist/core/errors/safetyValidator.js.map +1 -0
  207. package/dist/core/errors.d.ts +4 -0
  208. package/dist/core/errors.d.ts.map +1 -0
  209. package/dist/core/errors.js +33 -0
  210. package/dist/core/errors.js.map +1 -0
  211. package/dist/core/finalResponseFormatter.d.ts +10 -0
  212. package/dist/core/finalResponseFormatter.d.ts.map +1 -0
  213. package/dist/core/finalResponseFormatter.js +14 -0
  214. package/dist/core/finalResponseFormatter.js.map +1 -0
  215. package/dist/core/guardrails.d.ts +146 -0
  216. package/dist/core/guardrails.d.ts.map +1 -0
  217. package/dist/core/guardrails.js +361 -0
  218. package/dist/core/guardrails.js.map +1 -0
  219. package/dist/core/hitl.d.ts +119 -0
  220. package/dist/core/hitl.d.ts.map +1 -0
  221. package/dist/core/hitl.js +387 -0
  222. package/dist/core/hitl.js.map +1 -0
  223. package/dist/core/hooks.d.ts +95 -0
  224. package/dist/core/hooks.d.ts.map +1 -0
  225. package/dist/core/hooks.js +239 -0
  226. package/dist/core/hooks.js.map +1 -0
  227. package/dist/core/index.d.ts +7 -0
  228. package/dist/core/index.d.ts.map +1 -0
  229. package/dist/core/index.js +7 -0
  230. package/dist/core/index.js.map +1 -0
  231. package/dist/core/inputProtection.d.ts +122 -0
  232. package/dist/core/inputProtection.d.ts.map +1 -0
  233. package/dist/core/inputProtection.js +422 -0
  234. package/dist/core/inputProtection.js.map +1 -0
  235. package/dist/core/modelDiscovery.d.ts +105 -0
  236. package/dist/core/modelDiscovery.d.ts.map +1 -0
  237. package/dist/core/modelDiscovery.js +768 -0
  238. package/dist/core/modelDiscovery.js.map +1 -0
  239. package/dist/core/multilinePasteHandler.d.ts +35 -0
  240. package/dist/core/multilinePasteHandler.d.ts.map +1 -0
  241. package/dist/core/multilinePasteHandler.js +81 -0
  242. package/dist/core/multilinePasteHandler.js.map +1 -0
  243. package/dist/core/preferences.d.ts +65 -0
  244. package/dist/core/preferences.d.ts.map +1 -0
  245. package/dist/core/preferences.js +305 -0
  246. package/dist/core/preferences.js.map +1 -0
  247. package/dist/core/providerKeys.d.ts +20 -0
  248. package/dist/core/providerKeys.d.ts.map +1 -0
  249. package/dist/core/providerKeys.js +40 -0
  250. package/dist/core/providerKeys.js.map +1 -0
  251. package/dist/core/refusalDetection.d.ts +2 -0
  252. package/dist/core/refusalDetection.d.ts.map +1 -0
  253. package/dist/core/refusalDetection.js +51 -0
  254. package/dist/core/refusalDetection.js.map +1 -0
  255. package/dist/core/resultVerification.d.ts +47 -0
  256. package/dist/core/resultVerification.d.ts.map +1 -0
  257. package/dist/core/resultVerification.js +126 -0
  258. package/dist/core/resultVerification.js.map +1 -0
  259. package/dist/core/schemaValidator.d.ts +49 -0
  260. package/dist/core/schemaValidator.d.ts.map +1 -0
  261. package/dist/core/schemaValidator.js +234 -0
  262. package/dist/core/schemaValidator.js.map +1 -0
  263. package/dist/core/secretStore.d.ts +48 -0
  264. package/dist/core/secretStore.d.ts.map +1 -0
  265. package/dist/core/secretStore.js +268 -0
  266. package/dist/core/secretStore.js.map +1 -0
  267. package/dist/core/sessionStorage.d.ts +10 -0
  268. package/dist/core/sessionStorage.d.ts.map +1 -0
  269. package/dist/core/sessionStorage.js +46 -0
  270. package/dist/core/sessionStorage.js.map +1 -0
  271. package/dist/core/sessionStore.d.ts +35 -0
  272. package/dist/core/sessionStore.d.ts.map +1 -0
  273. package/dist/core/sessionStore.js +191 -0
  274. package/dist/core/sessionStore.js.map +1 -0
  275. package/dist/core/shutdown.d.ts +34 -0
  276. package/dist/core/shutdown.d.ts.map +1 -0
  277. package/dist/core/shutdown.js +186 -0
  278. package/dist/core/shutdown.js.map +1 -0
  279. package/dist/core/sudoPasswordManager.d.ts +52 -0
  280. package/dist/core/sudoPasswordManager.d.ts.map +1 -0
  281. package/dist/core/sudoPasswordManager.js +115 -0
  282. package/dist/core/sudoPasswordManager.js.map +1 -0
  283. package/dist/core/taskCompletionDetector.d.ts +117 -0
  284. package/dist/core/taskCompletionDetector.d.ts.map +1 -0
  285. package/dist/core/taskCompletionDetector.js +532 -0
  286. package/dist/core/taskCompletionDetector.js.map +1 -0
  287. package/dist/core/testFailureMonitor.d.ts +67 -0
  288. package/dist/core/testFailureMonitor.d.ts.map +1 -0
  289. package/dist/core/testFailureMonitor.js +262 -0
  290. package/dist/core/testFailureMonitor.js.map +1 -0
  291. package/dist/core/toolPreconditions.d.ts +34 -0
  292. package/dist/core/toolPreconditions.d.ts.map +1 -0
  293. package/dist/core/toolPreconditions.js +242 -0
  294. package/dist/core/toolPreconditions.js.map +1 -0
  295. package/dist/core/toolRuntime.d.ts +192 -0
  296. package/dist/core/toolRuntime.d.ts.map +1 -0
  297. package/dist/core/toolRuntime.js +460 -0
  298. package/dist/core/toolRuntime.js.map +1 -0
  299. package/dist/core/types/utilityTypes.d.ts +183 -0
  300. package/dist/core/types/utilityTypes.d.ts.map +1 -0
  301. package/dist/core/types/utilityTypes.js +273 -0
  302. package/dist/core/types/utilityTypes.js.map +1 -0
  303. package/dist/core/types.d.ts +334 -0
  304. package/dist/core/types.d.ts.map +1 -0
  305. package/dist/core/types.js +76 -0
  306. package/dist/core/types.js.map +1 -0
  307. package/dist/core/updateChecker.d.ts +148 -0
  308. package/dist/core/updateChecker.d.ts.map +1 -0
  309. package/dist/core/updateChecker.js +599 -0
  310. package/dist/core/updateChecker.js.map +1 -0
  311. package/dist/core/usageTracker.d.ts +11 -0
  312. package/dist/core/usageTracker.d.ts.map +1 -0
  313. package/dist/core/usageTracker.js +128 -0
  314. package/dist/core/usageTracker.js.map +1 -0
  315. package/dist/headless/interactiveShell.d.ts +22 -0
  316. package/dist/headless/interactiveShell.d.ts.map +1 -0
  317. package/dist/headless/interactiveShell.js +2100 -0
  318. package/dist/headless/interactiveShell.js.map +1 -0
  319. package/dist/leanAgent.d.ts +73 -0
  320. package/dist/leanAgent.d.ts.map +1 -0
  321. package/dist/leanAgent.js +177 -0
  322. package/dist/leanAgent.js.map +1 -0
  323. package/dist/plugins/index.d.ts +49 -0
  324. package/dist/plugins/index.d.ts.map +1 -0
  325. package/dist/plugins/index.js +104 -0
  326. package/dist/plugins/index.js.map +1 -0
  327. package/dist/plugins/providers/anthropic/index.d.ts +9 -0
  328. package/dist/plugins/providers/anthropic/index.d.ts.map +1 -0
  329. package/dist/plugins/providers/anthropic/index.js +48 -0
  330. package/dist/plugins/providers/anthropic/index.js.map +1 -0
  331. package/dist/plugins/providers/deepseek/index.d.ts +11 -0
  332. package/dist/plugins/providers/deepseek/index.d.ts.map +1 -0
  333. package/dist/plugins/providers/deepseek/index.js +54 -0
  334. package/dist/plugins/providers/deepseek/index.js.map +1 -0
  335. package/dist/plugins/providers/index.d.ts +2 -0
  336. package/dist/plugins/providers/index.d.ts.map +1 -0
  337. package/dist/plugins/providers/index.js +17 -0
  338. package/dist/plugins/providers/index.js.map +1 -0
  339. package/dist/plugins/providers/openai/index.d.ts +10 -0
  340. package/dist/plugins/providers/openai/index.d.ts.map +1 -0
  341. package/dist/plugins/providers/openai/index.js +47 -0
  342. package/dist/plugins/providers/openai/index.js.map +1 -0
  343. package/dist/plugins/providers/xai/index.d.ts +10 -0
  344. package/dist/plugins/providers/xai/index.d.ts.map +1 -0
  345. package/dist/plugins/providers/xai/index.js +47 -0
  346. package/dist/plugins/providers/xai/index.js.map +1 -0
  347. package/dist/plugins/tools/agentSpawning/agentSpawningPlugin.d.ts +10 -0
  348. package/dist/plugins/tools/agentSpawning/agentSpawningPlugin.d.ts.map +1 -0
  349. package/dist/plugins/tools/agentSpawning/agentSpawningPlugin.js +110 -0
  350. package/dist/plugins/tools/agentSpawning/agentSpawningPlugin.js.map +1 -0
  351. package/dist/plugins/tools/bash/localBashPlugin.d.ts +3 -0
  352. package/dist/plugins/tools/bash/localBashPlugin.d.ts.map +1 -0
  353. package/dist/plugins/tools/bash/localBashPlugin.js +14 -0
  354. package/dist/plugins/tools/bash/localBashPlugin.js.map +1 -0
  355. package/dist/plugins/tools/edit/editPlugin.d.ts +9 -0
  356. package/dist/plugins/tools/edit/editPlugin.d.ts.map +1 -0
  357. package/dist/plugins/tools/edit/editPlugin.js +15 -0
  358. package/dist/plugins/tools/edit/editPlugin.js.map +1 -0
  359. package/dist/plugins/tools/enhancedGit/enhancedGitPlugin.d.ts +3 -0
  360. package/dist/plugins/tools/enhancedGit/enhancedGitPlugin.d.ts.map +1 -0
  361. package/dist/plugins/tools/enhancedGit/enhancedGitPlugin.js +9 -0
  362. package/dist/plugins/tools/enhancedGit/enhancedGitPlugin.js.map +1 -0
  363. package/dist/plugins/tools/filesystem/localFilesystemPlugin.d.ts +3 -0
  364. package/dist/plugins/tools/filesystem/localFilesystemPlugin.d.ts.map +1 -0
  365. package/dist/plugins/tools/filesystem/localFilesystemPlugin.js +14 -0
  366. package/dist/plugins/tools/filesystem/localFilesystemPlugin.js.map +1 -0
  367. package/dist/plugins/tools/gitHistory/gitHistoryPlugin.d.ts +3 -0
  368. package/dist/plugins/tools/gitHistory/gitHistoryPlugin.d.ts.map +1 -0
  369. package/dist/plugins/tools/gitHistory/gitHistoryPlugin.js +9 -0
  370. package/dist/plugins/tools/gitHistory/gitHistoryPlugin.js.map +1 -0
  371. package/dist/plugins/tools/index.d.ts +3 -0
  372. package/dist/plugins/tools/index.d.ts.map +1 -0
  373. package/dist/plugins/tools/index.js +3 -0
  374. package/dist/plugins/tools/index.js.map +1 -0
  375. package/dist/plugins/tools/integrity/integrityPlugin.d.ts +3 -0
  376. package/dist/plugins/tools/integrity/integrityPlugin.d.ts.map +1 -0
  377. package/dist/plugins/tools/integrity/integrityPlugin.js +31 -0
  378. package/dist/plugins/tools/integrity/integrityPlugin.js.map +1 -0
  379. package/dist/plugins/tools/kali/kaliPlugin.d.ts +3 -0
  380. package/dist/plugins/tools/kali/kaliPlugin.d.ts.map +1 -0
  381. package/dist/plugins/tools/kali/kaliPlugin.js +10 -0
  382. package/dist/plugins/tools/kali/kaliPlugin.js.map +1 -0
  383. package/dist/plugins/tools/mcp/mcpClient.d.ts +49 -0
  384. package/dist/plugins/tools/mcp/mcpClient.d.ts.map +1 -0
  385. package/dist/plugins/tools/mcp/mcpClient.js +112 -0
  386. package/dist/plugins/tools/mcp/mcpClient.js.map +1 -0
  387. package/dist/plugins/tools/mcp/mcpPlugin.d.ts +3 -0
  388. package/dist/plugins/tools/mcp/mcpPlugin.d.ts.map +1 -0
  389. package/dist/plugins/tools/mcp/mcpPlugin.js +10 -0
  390. package/dist/plugins/tools/mcp/mcpPlugin.js.map +1 -0
  391. package/dist/plugins/tools/nodeDefaults.d.ts +13 -0
  392. package/dist/plugins/tools/nodeDefaults.d.ts.map +1 -0
  393. package/dist/plugins/tools/nodeDefaults.js +37 -0
  394. package/dist/plugins/tools/nodeDefaults.js.map +1 -0
  395. package/dist/plugins/tools/orchestration/orchestrationPlugin.d.ts +3 -0
  396. package/dist/plugins/tools/orchestration/orchestrationPlugin.d.ts.map +1 -0
  397. package/dist/plugins/tools/orchestration/orchestrationPlugin.js +340 -0
  398. package/dist/plugins/tools/orchestration/orchestrationPlugin.js.map +1 -0
  399. package/dist/plugins/tools/registry.d.ts +22 -0
  400. package/dist/plugins/tools/registry.d.ts.map +1 -0
  401. package/dist/plugins/tools/registry.js +58 -0
  402. package/dist/plugins/tools/registry.js.map +1 -0
  403. package/dist/plugins/tools/search/localSearchPlugin.d.ts +3 -0
  404. package/dist/plugins/tools/search/localSearchPlugin.d.ts.map +1 -0
  405. package/dist/plugins/tools/search/localSearchPlugin.js +14 -0
  406. package/dist/plugins/tools/search/localSearchPlugin.js.map +1 -0
  407. package/dist/plugins/tools/skills/skillPlugin.d.ts +3 -0
  408. package/dist/plugins/tools/skills/skillPlugin.d.ts.map +1 -0
  409. package/dist/plugins/tools/skills/skillPlugin.js +27 -0
  410. package/dist/plugins/tools/skills/skillPlugin.js.map +1 -0
  411. package/dist/plugins/tools/todo/todoPlugin.d.ts +3 -0
  412. package/dist/plugins/tools/todo/todoPlugin.d.ts.map +1 -0
  413. package/dist/plugins/tools/todo/todoPlugin.js +10 -0
  414. package/dist/plugins/tools/todo/todoPlugin.js.map +1 -0
  415. package/dist/providers/baseProvider.d.ts +148 -0
  416. package/dist/providers/baseProvider.d.ts.map +1 -0
  417. package/dist/providers/baseProvider.js +284 -0
  418. package/dist/providers/baseProvider.js.map +1 -0
  419. package/dist/providers/openaiChatCompletionsProvider.d.ts +64 -0
  420. package/dist/providers/openaiChatCompletionsProvider.d.ts.map +1 -0
  421. package/dist/providers/openaiChatCompletionsProvider.js +1018 -0
  422. package/dist/providers/openaiChatCompletionsProvider.js.map +1 -0
  423. package/dist/providers/providerFactory.d.ts +22 -0
  424. package/dist/providers/providerFactory.d.ts.map +1 -0
  425. package/dist/providers/providerFactory.js +25 -0
  426. package/dist/providers/providerFactory.js.map +1 -0
  427. package/dist/providers/resilientProvider.d.ts +103 -0
  428. package/dist/providers/resilientProvider.d.ts.map +1 -0
  429. package/dist/providers/resilientProvider.js +468 -0
  430. package/dist/providers/resilientProvider.js.map +1 -0
  431. package/dist/runtime/agentController.d.ts +121 -0
  432. package/dist/runtime/agentController.d.ts.map +1 -0
  433. package/dist/runtime/agentController.js +739 -0
  434. package/dist/runtime/agentController.js.map +1 -0
  435. package/dist/runtime/agentHost.d.ts +61 -0
  436. package/dist/runtime/agentHost.d.ts.map +1 -0
  437. package/dist/runtime/agentHost.js +158 -0
  438. package/dist/runtime/agentHost.js.map +1 -0
  439. package/dist/runtime/agentSession.d.ts +49 -0
  440. package/dist/runtime/agentSession.d.ts.map +1 -0
  441. package/dist/runtime/agentSession.js +218 -0
  442. package/dist/runtime/agentSession.js.map +1 -0
  443. package/dist/runtime/agentSpawningWiring.d.ts +23 -0
  444. package/dist/runtime/agentSpawningWiring.d.ts.map +1 -0
  445. package/dist/runtime/agentSpawningWiring.js +119 -0
  446. package/dist/runtime/agentSpawningWiring.js.map +1 -0
  447. package/dist/runtime/agentWorkerPool.d.ts +167 -0
  448. package/dist/runtime/agentWorkerPool.d.ts.map +1 -0
  449. package/dist/runtime/agentWorkerPool.js +435 -0
  450. package/dist/runtime/agentWorkerPool.js.map +1 -0
  451. package/dist/runtime/node.d.ts +7 -0
  452. package/dist/runtime/node.d.ts.map +1 -0
  453. package/dist/runtime/node.js +56 -0
  454. package/dist/runtime/node.js.map +1 -0
  455. package/dist/runtime/universal.d.ts +18 -0
  456. package/dist/runtime/universal.d.ts.map +1 -0
  457. package/dist/runtime/universal.js +21 -0
  458. package/dist/runtime/universal.js.map +1 -0
  459. package/dist/shell/autoExecutor.d.ts +70 -0
  460. package/dist/shell/autoExecutor.d.ts.map +1 -0
  461. package/dist/shell/autoExecutor.js +320 -0
  462. package/dist/shell/autoExecutor.js.map +1 -0
  463. package/dist/shell/commandRegistry.d.ts +122 -0
  464. package/dist/shell/commandRegistry.d.ts.map +1 -0
  465. package/dist/shell/commandRegistry.js +355 -0
  466. package/dist/shell/commandRegistry.js.map +1 -0
  467. package/dist/shell/composableMessage.d.ts +178 -0
  468. package/dist/shell/composableMessage.d.ts.map +1 -0
  469. package/dist/shell/composableMessage.js +384 -0
  470. package/dist/shell/composableMessage.js.map +1 -0
  471. package/dist/shell/liveStatus.d.ts +27 -0
  472. package/dist/shell/liveStatus.d.ts.map +1 -0
  473. package/dist/shell/liveStatus.js +53 -0
  474. package/dist/shell/liveStatus.js.map +1 -0
  475. package/dist/shell/systemPrompt.d.ts +12 -0
  476. package/dist/shell/systemPrompt.d.ts.map +1 -0
  477. package/dist/shell/systemPrompt.js +16 -0
  478. package/dist/shell/systemPrompt.js.map +1 -0
  479. package/dist/shell/vimMode.d.ts +66 -0
  480. package/dist/shell/vimMode.d.ts.map +1 -0
  481. package/dist/shell/vimMode.js +435 -0
  482. package/dist/shell/vimMode.js.map +1 -0
  483. package/dist/tools/bashTools.d.ts +11 -0
  484. package/dist/tools/bashTools.d.ts.map +1 -0
  485. package/dist/tools/bashTools.js +779 -0
  486. package/dist/tools/bashTools.js.map +1 -0
  487. package/dist/tools/diffUtils.d.ts +43 -0
  488. package/dist/tools/diffUtils.d.ts.map +1 -0
  489. package/dist/tools/diffUtils.js +607 -0
  490. package/dist/tools/diffUtils.js.map +1 -0
  491. package/dist/tools/editTools.d.ts +29 -0
  492. package/dist/tools/editTools.d.ts.map +1 -0
  493. package/dist/tools/editTools.js +792 -0
  494. package/dist/tools/editTools.js.map +1 -0
  495. package/dist/tools/fileChangeTracker.d.ts +47 -0
  496. package/dist/tools/fileChangeTracker.d.ts.map +1 -0
  497. package/dist/tools/fileChangeTracker.js +154 -0
  498. package/dist/tools/fileChangeTracker.js.map +1 -0
  499. package/dist/tools/fileReadTracker.d.ts +69 -0
  500. package/dist/tools/fileReadTracker.d.ts.map +1 -0
  501. package/dist/tools/fileReadTracker.js +213 -0
  502. package/dist/tools/fileReadTracker.js.map +1 -0
  503. package/dist/tools/fileTools.d.ts +3 -0
  504. package/dist/tools/fileTools.d.ts.map +1 -0
  505. package/dist/tools/fileTools.js +389 -0
  506. package/dist/tools/fileTools.js.map +1 -0
  507. package/dist/tools/grepTools.d.ts +3 -0
  508. package/dist/tools/grepTools.d.ts.map +1 -0
  509. package/dist/tools/grepTools.js +128 -0
  510. package/dist/tools/grepTools.js.map +1 -0
  511. package/dist/tools/heliaControl.d.ts +51 -0
  512. package/dist/tools/heliaControl.d.ts.map +1 -0
  513. package/dist/tools/heliaControl.js +93 -0
  514. package/dist/tools/heliaControl.js.map +1 -0
  515. package/dist/tools/hitlTools.d.ts +7 -0
  516. package/dist/tools/hitlTools.d.ts.map +1 -0
  517. package/dist/tools/hitlTools.js +185 -0
  518. package/dist/tools/hitlTools.js.map +1 -0
  519. package/dist/tools/localExplore.d.ts +38 -0
  520. package/dist/tools/localExplore.d.ts.map +1 -0
  521. package/dist/tools/localExplore.js +30 -0
  522. package/dist/tools/localExplore.js.map +1 -0
  523. package/dist/tools/memoryTools.d.ts +20 -0
  524. package/dist/tools/memoryTools.d.ts.map +1 -0
  525. package/dist/tools/memoryTools.js +180 -0
  526. package/dist/tools/memoryTools.js.map +1 -0
  527. package/dist/tools/notebookTools.d.ts +20 -0
  528. package/dist/tools/notebookTools.d.ts.map +1 -0
  529. package/dist/tools/notebookTools.js +140 -0
  530. package/dist/tools/notebookTools.js.map +1 -0
  531. package/dist/tools/searchTools.d.ts +12 -0
  532. package/dist/tools/searchTools.d.ts.map +1 -0
  533. package/dist/tools/searchTools.js +413 -0
  534. package/dist/tools/searchTools.js.map +1 -0
  535. package/dist/tools/skillTools.d.ts +24 -0
  536. package/dist/tools/skillTools.d.ts.map +1 -0
  537. package/dist/tools/skillTools.js +140 -0
  538. package/dist/tools/skillTools.js.map +1 -0
  539. package/dist/tools/todoTools.d.ts +24 -0
  540. package/dist/tools/todoTools.d.ts.map +1 -0
  541. package/dist/tools/todoTools.js +101 -0
  542. package/dist/tools/todoTools.js.map +1 -0
  543. package/dist/tools/webTools.d.ts +26 -0
  544. package/dist/tools/webTools.d.ts.map +1 -0
  545. package/dist/tools/webTools.js +332 -0
  546. package/dist/tools/webTools.js.map +1 -0
  547. package/dist/ui/RenderGate.d.ts +83 -0
  548. package/dist/ui/RenderGate.d.ts.map +1 -0
  549. package/dist/ui/RenderGate.js +138 -0
  550. package/dist/ui/RenderGate.js.map +1 -0
  551. package/dist/ui/animatedStatus.d.ts +140 -0
  552. package/dist/ui/animatedStatus.d.ts.map +1 -0
  553. package/dist/ui/animatedStatus.js +480 -0
  554. package/dist/ui/animatedStatus.js.map +1 -0
  555. package/dist/ui/animation/AnimationScheduler.d.ts +197 -0
  556. package/dist/ui/animation/AnimationScheduler.d.ts.map +1 -0
  557. package/dist/ui/animation/AnimationScheduler.js +440 -0
  558. package/dist/ui/animation/AnimationScheduler.js.map +1 -0
  559. package/dist/ui/codeHighlighter.d.ts +6 -0
  560. package/dist/ui/codeHighlighter.d.ts.map +1 -0
  561. package/dist/ui/codeHighlighter.js +855 -0
  562. package/dist/ui/codeHighlighter.js.map +1 -0
  563. package/dist/ui/designSystem.d.ts +26 -0
  564. package/dist/ui/designSystem.d.ts.map +1 -0
  565. package/dist/ui/designSystem.js +114 -0
  566. package/dist/ui/designSystem.js.map +1 -0
  567. package/dist/ui/errorFormatter.d.ts +64 -0
  568. package/dist/ui/errorFormatter.d.ts.map +1 -0
  569. package/dist/ui/errorFormatter.js +316 -0
  570. package/dist/ui/errorFormatter.js.map +1 -0
  571. package/dist/ui/globalWriteLock.d.ts +63 -0
  572. package/dist/ui/globalWriteLock.d.ts.map +1 -0
  573. package/dist/ui/globalWriteLock.js +173 -0
  574. package/dist/ui/globalWriteLock.js.map +1 -0
  575. package/dist/ui/index.d.ts +31 -0
  576. package/dist/ui/index.d.ts.map +1 -0
  577. package/dist/ui/index.js +49 -0
  578. package/dist/ui/index.js.map +1 -0
  579. package/dist/ui/ink/App.d.ts +39 -0
  580. package/dist/ui/ink/App.d.ts.map +1 -0
  581. package/dist/ui/ink/App.js +9 -0
  582. package/dist/ui/ink/App.js.map +1 -0
  583. package/dist/ui/ink/ChatStatic.d.ts +29 -0
  584. package/dist/ui/ink/ChatStatic.d.ts.map +1 -0
  585. package/dist/ui/ink/ChatStatic.js +14 -0
  586. package/dist/ui/ink/ChatStatic.js.map +1 -0
  587. package/dist/ui/ink/InkPromptController.d.ts +282 -0
  588. package/dist/ui/ink/InkPromptController.d.ts.map +1 -0
  589. package/dist/ui/ink/InkPromptController.js +508 -0
  590. package/dist/ui/ink/InkPromptController.js.map +1 -0
  591. package/dist/ui/ink/Prompt.d.ts +31 -0
  592. package/dist/ui/ink/Prompt.d.ts.map +1 -0
  593. package/dist/ui/ink/Prompt.js +197 -0
  594. package/dist/ui/ink/Prompt.js.map +1 -0
  595. package/dist/ui/ink/StatusLine.d.ts +25 -0
  596. package/dist/ui/ink/StatusLine.d.ts.map +1 -0
  597. package/dist/ui/ink/StatusLine.js +11 -0
  598. package/dist/ui/ink/StatusLine.js.map +1 -0
  599. package/dist/ui/ink/adapter.d.ts +58 -0
  600. package/dist/ui/ink/adapter.d.ts.map +1 -0
  601. package/dist/ui/ink/adapter.js +113 -0
  602. package/dist/ui/ink/adapter.js.map +1 -0
  603. package/dist/ui/interrupts/InterruptManager.d.ts +157 -0
  604. package/dist/ui/interrupts/InterruptManager.d.ts.map +1 -0
  605. package/dist/ui/interrupts/InterruptManager.js +501 -0
  606. package/dist/ui/interrupts/InterruptManager.js.map +1 -0
  607. package/dist/ui/layout.d.ts +27 -0
  608. package/dist/ui/layout.d.ts.map +1 -0
  609. package/dist/ui/layout.js +184 -0
  610. package/dist/ui/layout.js.map +1 -0
  611. package/dist/ui/outputMode.d.ts +58 -0
  612. package/dist/ui/outputMode.d.ts.map +1 -0
  613. package/dist/ui/outputMode.js +179 -0
  614. package/dist/ui/outputMode.js.map +1 -0
  615. package/dist/ui/overlay/OverlayManager.d.ts +105 -0
  616. package/dist/ui/overlay/OverlayManager.d.ts.map +1 -0
  617. package/dist/ui/overlay/OverlayManager.js +304 -0
  618. package/dist/ui/overlay/OverlayManager.js.map +1 -0
  619. package/dist/ui/premiumComponents.d.ts +54 -0
  620. package/dist/ui/premiumComponents.d.ts.map +1 -0
  621. package/dist/ui/premiumComponents.js +241 -0
  622. package/dist/ui/premiumComponents.js.map +1 -0
  623. package/dist/ui/richText.d.ts +13 -0
  624. package/dist/ui/richText.d.ts.map +1 -0
  625. package/dist/ui/richText.js +444 -0
  626. package/dist/ui/richText.js.map +1 -0
  627. package/dist/ui/telemetry/ResponseTracker.d.ts +22 -0
  628. package/dist/ui/telemetry/ResponseTracker.d.ts.map +1 -0
  629. package/dist/ui/telemetry/ResponseTracker.js +60 -0
  630. package/dist/ui/telemetry/ResponseTracker.js.map +1 -0
  631. package/dist/ui/telemetry/UITelemetry.d.ts +181 -0
  632. package/dist/ui/telemetry/UITelemetry.d.ts.map +1 -0
  633. package/dist/ui/telemetry/UITelemetry.js +446 -0
  634. package/dist/ui/telemetry/UITelemetry.js.map +1 -0
  635. package/dist/ui/textHighlighter.d.ts +83 -0
  636. package/dist/ui/textHighlighter.d.ts.map +1 -0
  637. package/dist/ui/textHighlighter.js +267 -0
  638. package/dist/ui/textHighlighter.js.map +1 -0
  639. package/dist/ui/theme.d.ts +351 -0
  640. package/dist/ui/theme.d.ts.map +1 -0
  641. package/dist/ui/theme.js +434 -0
  642. package/dist/ui/theme.js.map +1 -0
  643. package/dist/ui/toolDisplay.d.ts +221 -0
  644. package/dist/ui/toolDisplay.d.ts.map +1 -0
  645. package/dist/ui/toolDisplay.js +1654 -0
  646. package/dist/ui/toolDisplay.js.map +1 -0
  647. package/dist/ui/uiConstants.d.ts +253 -0
  648. package/dist/ui/uiConstants.d.ts.map +1 -0
  649. package/dist/ui/uiConstants.js +437 -0
  650. package/dist/ui/uiConstants.js.map +1 -0
  651. package/dist/utils/analytics.d.ts +2 -0
  652. package/dist/utils/analytics.d.ts.map +1 -0
  653. package/dist/utils/analytics.js +51 -0
  654. package/dist/utils/analytics.js.map +1 -0
  655. package/dist/utils/askUserPrompt.d.ts +21 -0
  656. package/dist/utils/askUserPrompt.d.ts.map +1 -0
  657. package/dist/utils/askUserPrompt.js +87 -0
  658. package/dist/utils/askUserPrompt.js.map +1 -0
  659. package/dist/utils/asyncUtils.d.ts +95 -0
  660. package/dist/utils/asyncUtils.d.ts.map +1 -0
  661. package/dist/utils/asyncUtils.js +286 -0
  662. package/dist/utils/asyncUtils.js.map +1 -0
  663. package/dist/utils/debugLogger.d.ts +6 -0
  664. package/dist/utils/debugLogger.d.ts.map +1 -0
  665. package/dist/utils/debugLogger.js +39 -0
  666. package/dist/utils/debugLogger.js.map +1 -0
  667. package/dist/utils/errorUtils.d.ts +12 -0
  668. package/dist/utils/errorUtils.d.ts.map +1 -0
  669. package/dist/utils/errorUtils.js +83 -0
  670. package/dist/utils/errorUtils.js.map +1 -0
  671. package/dist/utils/frontmatter.d.ts +10 -0
  672. package/dist/utils/frontmatter.d.ts.map +1 -0
  673. package/dist/utils/frontmatter.js +78 -0
  674. package/dist/utils/frontmatter.js.map +1 -0
  675. package/dist/utils/packageInfo.d.ts +14 -0
  676. package/dist/utils/packageInfo.d.ts.map +1 -0
  677. package/dist/utils/packageInfo.js +45 -0
  678. package/dist/utils/packageInfo.js.map +1 -0
  679. package/dist/utils/planFormatter.d.ts +34 -0
  680. package/dist/utils/planFormatter.d.ts.map +1 -0
  681. package/dist/utils/planFormatter.js +141 -0
  682. package/dist/utils/planFormatter.js.map +1 -0
  683. package/dist/utils/securityUtils.d.ts +145 -0
  684. package/dist/utils/securityUtils.d.ts.map +1 -0
  685. package/dist/utils/securityUtils.js +507 -0
  686. package/dist/utils/securityUtils.js.map +1 -0
  687. package/dist/utils/statusReporter.d.ts +6 -0
  688. package/dist/utils/statusReporter.d.ts.map +1 -0
  689. package/dist/utils/statusReporter.js +26 -0
  690. package/dist/utils/statusReporter.js.map +1 -0
  691. package/dist/workspace.d.ts +8 -0
  692. package/dist/workspace.d.ts.map +1 -0
  693. package/dist/workspace.js +135 -0
  694. package/dist/workspace.js.map +1 -0
  695. package/dist/workspace.validator.d.ts +49 -0
  696. package/dist/workspace.validator.d.ts.map +1 -0
  697. package/dist/workspace.validator.js +215 -0
  698. package/dist/workspace.validator.js.map +1 -0
  699. package/package.json +135 -0
  700. package/scripts/postinstall.cjs +58 -0
@@ -0,0 +1,140 @@
1
+ /**
2
+ * Skills — Claude-Code-parity skill registry.
3
+ *
4
+ * A skill is a markdown file that documents a reusable approach
5
+ * (e.g., "simplify", "security-review", "init-project") with
6
+ * frontmatter metadata. The agent invokes a skill via
7
+ * `Skill({ name })`, which loads the skill body and returns it as
8
+ * the tool result. The model then follows the instructions inline.
9
+ *
10
+ * Storage layout (priority order — both load, project takes precedence):
11
+ * <workingDir>/.erosolar/skills/<skill-name>/SKILL.md
12
+ * ~/.erosolar/skills/<skill-name>/SKILL.md
13
+ *
14
+ * Frontmatter:
15
+ * ---
16
+ * name: simplify
17
+ * description: Review changed code for reuse and quality.
18
+ * ---
19
+ *
20
+ * Body — instructions, examples, anything markdown.
21
+ */
22
+ import { existsSync, readFileSync, readdirSync, statSync } from 'node:fs';
23
+ import { homedir } from 'node:os';
24
+ import { join } from 'node:path';
25
+ import { parseFrontmatter } from '../utils/frontmatter.js';
26
+ function skillDirs(workingDir) {
27
+ return [
28
+ join(workingDir, '.erosolar', 'skills'),
29
+ join(homedir(), '.erosolar', 'skills'),
30
+ ];
31
+ }
32
+ /**
33
+ * Discover skills from disk. Project-local skills override
34
+ * user-global ones with the same name. Each entry must be either
35
+ * `<name>/SKILL.md` (folder form) or `<name>.md` (flat form).
36
+ */
37
+ function loadSkills(workingDir) {
38
+ const out = new Map();
39
+ // Visit user-global FIRST so project-local can overwrite.
40
+ for (const dir of [...skillDirs(workingDir)].reverse()) {
41
+ if (!existsSync(dir))
42
+ continue;
43
+ let entries;
44
+ try {
45
+ entries = readdirSync(dir);
46
+ }
47
+ catch {
48
+ continue;
49
+ }
50
+ for (const entry of entries) {
51
+ const entryPath = join(dir, entry);
52
+ let mdPath = null;
53
+ try {
54
+ const st = statSync(entryPath);
55
+ if (st.isDirectory()) {
56
+ const candidate = join(entryPath, 'SKILL.md');
57
+ if (existsSync(candidate))
58
+ mdPath = candidate;
59
+ }
60
+ else if (st.isFile() && entry.toLowerCase().endsWith('.md')) {
61
+ mdPath = entryPath;
62
+ }
63
+ }
64
+ catch {
65
+ continue;
66
+ }
67
+ if (!mdPath)
68
+ continue;
69
+ let raw;
70
+ try {
71
+ raw = readFileSync(mdPath, 'utf-8');
72
+ }
73
+ catch {
74
+ continue;
75
+ }
76
+ const { attributes, body } = parseFrontmatter(raw);
77
+ const name = (attributes.name ?? entry.replace(/\.md$/i, '').replace(/[\\/]/g, '_')).trim();
78
+ if (!name)
79
+ continue;
80
+ const description = (attributes.description ?? '').trim() || '(no description)';
81
+ out.set(name, { name, description, body: body.trim(), source: mdPath });
82
+ }
83
+ }
84
+ return out;
85
+ }
86
+ export function createSkillTools(workingDir) {
87
+ return [
88
+ {
89
+ name: 'list_skills',
90
+ description: 'List available agent skills (reusable prompts/playbooks loaded from `.erosolar/skills/`). Each skill has a name + one-line description; load one with the `Skill` tool to read its full body.',
91
+ parameters: { type: 'object', properties: {}, additionalProperties: false },
92
+ handler: async () => {
93
+ const skills = loadSkills(workingDir);
94
+ if (skills.size === 0) {
95
+ return 'No skills installed. Add one at .erosolar/skills/<name>/SKILL.md (with a `name:` and `description:` in frontmatter).';
96
+ }
97
+ const lines = [`Skills (${skills.size}):`];
98
+ for (const s of [...skills.values()].sort((a, b) => a.name.localeCompare(b.name))) {
99
+ lines.push(` - ${s.name} — ${s.description}`);
100
+ }
101
+ return lines.join('\n');
102
+ },
103
+ },
104
+ {
105
+ name: 'Skill',
106
+ description: 'Load a named skill\'s body (a markdown playbook). The returned text is instructions for the agent to follow for this turn. Use list_skills FIRST to discover what\'s installed. Skills express reusable approaches — "simplify", "security-review", etc. — so you don\'t have to re-prompt the same workflow each turn.',
107
+ parameters: {
108
+ type: 'object',
109
+ properties: {
110
+ name: { type: 'string', description: 'Skill name (matching the `name:` frontmatter or directory name).' },
111
+ },
112
+ required: ['name'],
113
+ additionalProperties: false,
114
+ },
115
+ handler: async (args) => {
116
+ const name = String(args['name'] ?? '').trim();
117
+ if (!name)
118
+ return 'Error: name is required.';
119
+ const skills = loadSkills(workingDir);
120
+ const skill = skills.get(name);
121
+ if (!skill) {
122
+ const available = [...skills.keys()].sort().join(', ') || '(none installed)';
123
+ return `Skill not found: ${name}. Available: ${available}`;
124
+ }
125
+ if (!skill.body) {
126
+ return `Skill ${name} has no body.`;
127
+ }
128
+ return [
129
+ `# Skill: ${skill.name}`,
130
+ skill.description,
131
+ '',
132
+ '---',
133
+ '',
134
+ skill.body,
135
+ ].join('\n');
136
+ },
137
+ },
138
+ ];
139
+ }
140
+ //# sourceMappingURL=skillTools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skillTools.js","sourceRoot":"","sources":["../../src/tools/skillTools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * TodoWrite tool — Claude-Code-parity task list.
3
+ *
4
+ * The agent uses TodoWrite to track multi-step work. Each call
5
+ * REPLACES the entire list (not append) so the agent owns the full
6
+ * state each turn. The list is rendered via formatPlan and is
7
+ * surfaced to the user as scrollback so they see what the agent is
8
+ * planning vs. completing.
9
+ *
10
+ * State is kept per-process (CLI = single process), so a session-long
11
+ * todo list persists across turns until the agent rewrites it.
12
+ */
13
+ import type { ToolDefinition } from '../core/toolRuntime.js';
14
+ import { type PlanStatus } from '../utils/planFormatter.js';
15
+ interface Todo {
16
+ content: string;
17
+ status: PlanStatus;
18
+ activeForm?: string;
19
+ }
20
+ export declare function getCurrentTodos(): readonly Todo[];
21
+ export declare function clearCurrentTodos(): void;
22
+ export declare function createTodoTools(): ToolDefinition[];
23
+ export {};
24
+ //# sourceMappingURL=todoTools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"todoTools.d.ts","sourceRoot":"","sources":["../../src/tools/todoTools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAc,KAAK,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAExE,UAAU,IAAI;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,UAAU,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAQD,wBAAgB,eAAe,IAAI,SAAS,IAAI,EAAE,CAEjD;AACD,wBAAgB,iBAAiB,IAAI,IAAI,CAExC;AAqBD,wBAAgB,eAAe,IAAI,cAAc,EAAE,CAuDlD"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * TodoWrite tool — Claude-Code-parity task list.
3
+ *
4
+ * The agent uses TodoWrite to track multi-step work. Each call
5
+ * REPLACES the entire list (not append) so the agent owns the full
6
+ * state each turn. The list is rendered via formatPlan and is
7
+ * surfaced to the user as scrollback so they see what the agent is
8
+ * planning vs. completing.
9
+ *
10
+ * State is kept per-process (CLI = single process), so a session-long
11
+ * todo list persists across turns until the agent rewrites it.
12
+ */
13
+ import { formatPlan } from '../utils/planFormatter.js';
14
+ /**
15
+ * Module-scoped state. CLI runs one process per session; the list
16
+ * stays in memory until the process exits or the agent rewrites it.
17
+ */
18
+ let CURRENT_TODOS = [];
19
+ export function getCurrentTodos() {
20
+ return CURRENT_TODOS;
21
+ }
22
+ export function clearCurrentTodos() {
23
+ CURRENT_TODOS = [];
24
+ }
25
+ function normalize(input) {
26
+ if (!Array.isArray(input))
27
+ return [];
28
+ const out = [];
29
+ for (const item of input) {
30
+ if (!item || typeof item !== 'object')
31
+ continue;
32
+ const rec = item;
33
+ const content = typeof rec['content'] === 'string' ? rec['content'].trim() : '';
34
+ if (!content)
35
+ continue;
36
+ const rawStatus = typeof rec['status'] === 'string' ? rec['status'].toLowerCase() : 'pending';
37
+ const status = rawStatus === 'completed' ? 'completed'
38
+ : rawStatus === 'in_progress' || rawStatus === 'in-progress' ? 'in_progress'
39
+ : 'pending';
40
+ const activeForm = typeof rec['activeForm'] === 'string' ? rec['activeForm'].trim() : undefined;
41
+ out.push({ content, status, ...(activeForm ? { activeForm } : {}) });
42
+ }
43
+ return out;
44
+ }
45
+ export function createTodoTools() {
46
+ return [
47
+ {
48
+ name: 'TodoWrite',
49
+ description: [
50
+ 'Create or replace the agent\'s working task list. Use proactively for any',
51
+ 'multi-step task (3+ distinct steps). Pass the COMPLETE list every time —',
52
+ 'each call replaces the previous list. Mark a task `in_progress` BEFORE',
53
+ 'starting it and `completed` IMMEDIATELY after, before moving to the next.',
54
+ 'The list shows the user what the agent is planning vs. what\'s done.',
55
+ ].join(' '),
56
+ parameters: {
57
+ type: 'object',
58
+ properties: {
59
+ todos: {
60
+ type: 'array',
61
+ description: 'The full task list. Replaces the previous one entirely.',
62
+ items: {
63
+ type: 'object',
64
+ properties: {
65
+ content: { type: 'string', description: 'Imperative task title (e.g. "Fix the auth bug").' },
66
+ status: {
67
+ type: 'string',
68
+ enum: ['pending', 'in_progress', 'completed'],
69
+ description: 'Current state. Exactly one task should be in_progress at a time.',
70
+ },
71
+ activeForm: {
72
+ type: 'string',
73
+ description: 'Present-continuous form shown while in_progress (e.g. "Fixing the auth bug"). Optional.',
74
+ },
75
+ },
76
+ required: ['content', 'status'],
77
+ },
78
+ },
79
+ },
80
+ required: ['todos'],
81
+ additionalProperties: false,
82
+ },
83
+ handler: async (args) => {
84
+ const todos = normalize(args['todos']);
85
+ CURRENT_TODOS = todos;
86
+ // Soft validation: at most one in_progress at a time.
87
+ const inProgressCount = todos.filter((t) => t.status === 'in_progress').length;
88
+ const validationNote = inProgressCount > 1
89
+ ? `\n Warning: ${inProgressCount} tasks are in_progress — only one should be active at a time.`
90
+ : '';
91
+ const planItems = todos.map((t) => ({
92
+ step: t.status === 'in_progress' && t.activeForm ? t.activeForm : t.content,
93
+ status: t.status,
94
+ }));
95
+ const formatted = formatPlan(planItems, { heading: 'Updated Plan' });
96
+ return `${formatted}${validationNote}`;
97
+ },
98
+ },
99
+ ];
100
+ }
101
+ //# sourceMappingURL=todoTools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"todoTools.js","sourceRoot":"","sources":["../../src/tools/todoTools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Web Tools - Web search and content extraction capabilities
3
+ *
4
+ * Provides:
5
+ * - WebSearch: Search the web using Tavily
6
+ * - WebExtract: Extract and summarize content from URLs
7
+ */
8
+ import type { ToolDefinition } from '../core/toolRuntime.js';
9
+ interface TavilySearchResult {
10
+ title: string;
11
+ url: string;
12
+ content: string;
13
+ score?: number;
14
+ published_date?: string;
15
+ }
16
+ interface TavilySearchResponse {
17
+ results: TavilySearchResult[];
18
+ answer?: string;
19
+ query: string;
20
+ }
21
+ /**
22
+ * Create web tools for search and extraction.
23
+ */
24
+ export declare function createWebTools(): ToolDefinition[];
25
+ export type { TavilySearchResponse };
26
+ //# sourceMappingURL=webTools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webTools.d.ts","sourceRoot":"","sources":["../../src/tools/webTools.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAI7D,UAAU,kBAAkB;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,UAAU,oBAAoB;IAC5B,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AASD;;GAEG;AACH,wBAAgB,cAAc,IAAI,cAAc,EAAE,CA+JjD;AAmMD,YAAY,EAAE,oBAAoB,EAAE,CAAC"}
@@ -0,0 +1,332 @@
1
+ /**
2
+ * Web Tools - Web search and content extraction capabilities
3
+ *
4
+ * Provides:
5
+ * - WebSearch: Search the web using Tavily
6
+ * - WebExtract: Extract and summarize content from URLs
7
+ */
8
+ import { getSecretValue } from '../core/secretStore.js';
9
+ import { buildError } from '../core/errors.js';
10
+ /**
11
+ * Create web tools for search and extraction.
12
+ */
13
+ export function createWebTools() {
14
+ return [
15
+ {
16
+ name: 'WebSearch',
17
+ description: 'Search the web for current/up-to-date information using Tavily. Use proactively for news, events, recent releases, library docs that may have changed, or any time-sensitive lookup. Works out of the box via the Erosolar-hosted proxy; set TAVILY_API_KEY for unlimited use.',
18
+ parameters: {
19
+ type: 'object',
20
+ properties: {
21
+ query: {
22
+ type: 'string',
23
+ description: 'The search query',
24
+ },
25
+ maxResults: {
26
+ type: 'number',
27
+ description: 'Maximum number of results to return (default: 5, max: 10)',
28
+ },
29
+ searchDepth: {
30
+ type: 'string',
31
+ enum: ['basic', 'advanced'],
32
+ description: 'Search depth: basic (fast) or advanced (thorough). Default: basic',
33
+ },
34
+ includeAnswer: {
35
+ type: 'boolean',
36
+ description: 'Include AI-generated answer summary. Default: true',
37
+ },
38
+ },
39
+ required: ['query'],
40
+ additionalProperties: false,
41
+ },
42
+ handler: async (args) => {
43
+ const query = args['query'];
44
+ if (typeof query !== 'string' || !query.trim()) {
45
+ return 'Error: query is required';
46
+ }
47
+ const maxResults = Math.min(typeof args['maxResults'] === 'number' ? args['maxResults'] : 5, 10);
48
+ const searchDepth = args['searchDepth'] === 'advanced' ? 'advanced' : 'basic';
49
+ const includeAnswer = args['includeAnswer'] !== false;
50
+ try {
51
+ const tavilyKey = getSecretValue('TAVILY_API_KEY');
52
+ if (tavilyKey) {
53
+ return await searchTavily(query, tavilyKey, { maxResults, searchDepth, includeAnswer });
54
+ }
55
+ // No local key — fall back to the Erosolar-hosted Tavily proxy so
56
+ // the agent can search proactively out of the box. Counts against
57
+ // the operator's Tavily quota; users wanting unlimited can set
58
+ // TAVILY_API_KEY locally.
59
+ return await searchTavilyViaProxy(query, { maxResults, searchDepth, includeAnswer });
60
+ }
61
+ catch (error) {
62
+ return buildError('WebSearch', error, { query });
63
+ }
64
+ },
65
+ },
66
+ {
67
+ name: 'WebExtract',
68
+ description: 'Extract and summarize content from one or more URLs using Tavily. Use after WebSearch when you need the full content of a specific page (docs, articles, GitHub issues). Requires TAVILY_API_KEY.',
69
+ parameters: {
70
+ type: 'object',
71
+ properties: {
72
+ urls: {
73
+ type: 'array',
74
+ items: { type: 'string' },
75
+ description: 'URLs to extract content from (max 5)',
76
+ },
77
+ url: {
78
+ type: 'string',
79
+ description: 'Single URL to extract content from (alternative to urls array)',
80
+ },
81
+ },
82
+ additionalProperties: false,
83
+ },
84
+ handler: async (args) => {
85
+ let urls = [];
86
+ if (Array.isArray(args['urls'])) {
87
+ urls = args['urls'].filter((u) => typeof u === 'string');
88
+ }
89
+ else if (typeof args['url'] === 'string') {
90
+ urls = [args['url']];
91
+ }
92
+ if (urls.length === 0) {
93
+ return 'Error: at least one URL is required';
94
+ }
95
+ // Limit to 5 URLs
96
+ urls = urls.slice(0, 5);
97
+ const tavilyKey = getSecretValue('TAVILY_API_KEY');
98
+ if (!tavilyKey) {
99
+ return 'WebExtract requires TAVILY_API_KEY to be configured. Use /secrets set TAVILY_API_KEY to configure.';
100
+ }
101
+ try {
102
+ return await extractTavily(urls, tavilyKey);
103
+ }
104
+ catch (error) {
105
+ return buildError('WebExtract', error, { urls: urls.join(', ') });
106
+ }
107
+ },
108
+ },
109
+ {
110
+ name: 'WebFetch',
111
+ description: 'Fetch the raw content of a single URL via HTTP GET. Returns the response body as text (HTML/JSON/plain). Use this when you need the LITERAL page content (e.g., reading a specific docs page, fetching a JSON API). For research / "what does the web say about X" queries, use WebSearch instead — Tavily returns clean summaries.',
112
+ parameters: {
113
+ type: 'object',
114
+ properties: {
115
+ url: { type: 'string', description: 'Absolute http(s):// URL to fetch.' },
116
+ maxBytes: { type: 'number', description: 'Cap the response at this many bytes (default 200_000, max 2_000_000).' },
117
+ },
118
+ required: ['url'],
119
+ additionalProperties: false,
120
+ },
121
+ handler: async (args) => {
122
+ const url = args['url']?.trim();
123
+ if (!url)
124
+ return 'Error: url is required.';
125
+ if (!/^https?:\/\//i.test(url))
126
+ return 'Error: url must start with http:// or https://.';
127
+ const requestedCap = typeof args['maxBytes'] === 'number' ? args['maxBytes'] : 200_000;
128
+ const cap = Math.max(1024, Math.min(2_000_000, requestedCap));
129
+ try {
130
+ // 30s upper bound — long enough for slow doc sites, short
131
+ // enough that the user doesn't watch a stalled spinner.
132
+ const controller = new AbortController();
133
+ const timer = setTimeout(() => controller.abort(), 30_000);
134
+ const res = await fetch(url, {
135
+ redirect: 'follow',
136
+ signal: controller.signal,
137
+ headers: { 'User-Agent': 'erosolar-coder/WebFetch' },
138
+ }).finally(() => clearTimeout(timer));
139
+ if (!res.ok) {
140
+ return `Error: HTTP ${res.status} ${res.statusText} fetching ${url}`;
141
+ }
142
+ const ctype = res.headers.get('content-type') || 'unknown';
143
+ const buf = await res.arrayBuffer();
144
+ const truncated = buf.byteLength > cap;
145
+ const slice = truncated ? buf.slice(0, cap) : buf;
146
+ // Decode as UTF-8. Binary content will look like garbage —
147
+ // we're optimizing for HTML/text/JSON which dominates web
148
+ // fetching.
149
+ const text = new TextDecoder('utf-8', { fatal: false }).decode(slice);
150
+ const headerLines = [
151
+ `[WebFetch ${url}]`,
152
+ `Status: ${res.status} Content-Type: ${ctype} Size: ${buf.byteLength} bytes${truncated ? ` (truncated to ${cap})` : ''}`,
153
+ '',
154
+ ];
155
+ return headerLines.join('\n') + text;
156
+ }
157
+ catch (error) {
158
+ if (error.name === 'AbortError') {
159
+ return `Error: WebFetch timed out (30s) for ${url}`;
160
+ }
161
+ return buildError('WebFetch', error, { url });
162
+ }
163
+ },
164
+ },
165
+ ];
166
+ }
167
+ // Erosolar's hosted Tavily proxy (AWS API Gateway → Lambda). Lets the CLI
168
+ // search out of the box for users who haven't set TAVILY_API_KEY locally;
169
+ // counts against the operator's Tavily quota.
170
+ const EROSOLAR_TAVILY_PROXY_URL = 'https://cfqeqx4lt9.execute-api.us-east-1.amazonaws.com/api/tavilySearch';
171
+ /**
172
+ * Fallback for users without a local TAVILY_API_KEY: hit the Erosolar
173
+ * server-side proxy which uses the operator's key. Returns the same
174
+ * markdown shape as `searchTavily`. Errors propagate as a string for the
175
+ * tool harness to surface without crashing the agent loop.
176
+ */
177
+ async function searchTavilyViaProxy(query, options) {
178
+ const controller = new AbortController();
179
+ const timer = setTimeout(() => controller.abort(), 30_000);
180
+ try {
181
+ const res = await fetch(EROSOLAR_TAVILY_PROXY_URL, {
182
+ method: 'POST',
183
+ headers: { 'Content-Type': 'application/json' },
184
+ body: JSON.stringify({
185
+ query,
186
+ maxResults: options.maxResults,
187
+ depth: options.searchDepth,
188
+ includeAnswer: options.includeAnswer,
189
+ }),
190
+ signal: controller.signal,
191
+ });
192
+ if (!res.ok) {
193
+ const text = await res.text().catch(() => '');
194
+ if (res.status === 503) {
195
+ return 'WebSearch is temporarily unavailable on the Erosolar proxy. Set TAVILY_API_KEY locally with `/secrets set TAVILY_API_KEY` for unlimited use.';
196
+ }
197
+ throw new Error(`Erosolar Tavily proxy error: ${res.status} ${text.slice(0, 300)}`);
198
+ }
199
+ const data = (await res.json());
200
+ return formatTavilyResults(data, 'Tavily (via Erosolar)');
201
+ }
202
+ catch (error) {
203
+ if (error instanceof Error && error.name === 'AbortError') {
204
+ throw new Error('WebSearch via Erosolar proxy timed out after 30 seconds');
205
+ }
206
+ throw error;
207
+ }
208
+ finally {
209
+ clearTimeout(timer);
210
+ }
211
+ }
212
+ /**
213
+ * Search using Tavily API (recommended provider)
214
+ */
215
+ async function searchTavily(query, apiKey, options) {
216
+ const controller = new AbortController();
217
+ const timeout = setTimeout(() => controller.abort(), 24 * 60 * 60 * 1000); // 24 hour timeout
218
+ try {
219
+ const response = await fetch('https://api.tavily.com/search', {
220
+ method: 'POST',
221
+ headers: {
222
+ 'Content-Type': 'application/json',
223
+ },
224
+ body: JSON.stringify({
225
+ api_key: apiKey,
226
+ query,
227
+ search_depth: options.searchDepth,
228
+ include_answer: options.includeAnswer,
229
+ max_results: options.maxResults,
230
+ }),
231
+ signal: controller.signal,
232
+ });
233
+ if (!response.ok) {
234
+ const text = await response.text();
235
+ throw new Error(`Tavily API error: ${response.status} ${text}`);
236
+ }
237
+ const data = (await response.json());
238
+ return formatTavilyResults(data, 'Tavily');
239
+ }
240
+ catch (error) {
241
+ if (error instanceof Error && error.name === 'AbortError') {
242
+ throw new Error('Tavily search timed out after 30 seconds');
243
+ }
244
+ throw error;
245
+ }
246
+ finally {
247
+ clearTimeout(timeout);
248
+ }
249
+ }
250
+ /**
251
+ * Extract content using Tavily Extract API
252
+ */
253
+ async function extractTavily(urls, apiKey) {
254
+ const response = await fetch('https://api.tavily.com/extract', {
255
+ method: 'POST',
256
+ headers: {
257
+ 'Content-Type': 'application/json',
258
+ },
259
+ body: JSON.stringify({
260
+ api_key: apiKey,
261
+ urls,
262
+ }),
263
+ });
264
+ if (!response.ok) {
265
+ const text = await response.text();
266
+ throw new Error(`Tavily Extract API error: ${response.status} ${text}`);
267
+ }
268
+ const data = (await response.json());
269
+ return formatExtractResults(data);
270
+ }
271
+ /**
272
+ * Format Tavily search results with enhanced markdown formatting
273
+ */
274
+ function formatTavilyResults(data, provider) {
275
+ const lines = [`[WebSearch via ${provider}]`, ''];
276
+ if (data.answer) {
277
+ lines.push('**Summary:**', data.answer, '');
278
+ }
279
+ if (!data.results || data.results.length === 0) {
280
+ lines.push('No results found.');
281
+ return lines.join('\n');
282
+ }
283
+ if (data.results.length > 0) {
284
+ lines.push('**Search Results:**');
285
+ lines.push('');
286
+ for (let i = 0; i < data.results.length; i++) {
287
+ const result = data.results[i];
288
+ // Format as numbered list with clickable title link
289
+ lines.push(`${i + 1}. **[${result.title}](${result.url})**`);
290
+ if (result.content) {
291
+ const snippet = result.content.length > 300
292
+ ? result.content.slice(0, 300) + '...'
293
+ : result.content;
294
+ lines.push(` ${snippet}`);
295
+ }
296
+ if (result.published_date) {
297
+ lines.push(` *Published: ${result.published_date}*`);
298
+ }
299
+ lines.push('');
300
+ }
301
+ }
302
+ return lines.join('\n');
303
+ }
304
+ /**
305
+ * Format Tavily extract results with enhanced markdown formatting
306
+ */
307
+ function formatExtractResults(data) {
308
+ const lines = ['[WebExtract via Tavily]', ''];
309
+ if (!data.results || data.results.length === 0) {
310
+ lines.push('No content extracted.');
311
+ return lines.join('\n');
312
+ }
313
+ for (let i = 0; i < data.results.length; i++) {
314
+ const result = data.results[i];
315
+ lines.push(`### Source ${i + 1}: [${result.url}](${result.url})`);
316
+ lines.push('');
317
+ if (result.raw_content) {
318
+ // Truncate very long content
319
+ const content = result.raw_content.length > 5000
320
+ ? result.raw_content.slice(0, 5000) + '\n\n*[Content truncated...]*'
321
+ : result.raw_content;
322
+ lines.push(content);
323
+ }
324
+ lines.push('');
325
+ if (i < data.results.length - 1) {
326
+ lines.push('---');
327
+ lines.push('');
328
+ }
329
+ }
330
+ return lines.join('\n');
331
+ }
332
+ //# sourceMappingURL=webTools.js.map