explorbot 0.0.1

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 (329) hide show
  1. package/LICENSE +94 -0
  2. package/README.md +267 -0
  3. package/assets/sample-files/sample.docx +0 -0
  4. package/assets/sample-files/sample.mp3 +0 -0
  5. package/assets/sample-files/sample.mp4 +0 -0
  6. package/assets/sample-files/sample.pdf +21 -0
  7. package/assets/sample-files/sample.png +0 -0
  8. package/assets/sample-files/sample.xlsx +0 -0
  9. package/assets/sample-files/sample.zip +0 -0
  10. package/dist/assets/sample-files/sample.docx +0 -0
  11. package/dist/assets/sample-files/sample.mp3 +0 -0
  12. package/dist/assets/sample-files/sample.mp4 +0 -0
  13. package/dist/assets/sample-files/sample.pdf +21 -0
  14. package/dist/assets/sample-files/sample.png +0 -0
  15. package/dist/assets/sample-files/sample.xlsx +0 -0
  16. package/dist/assets/sample-files/sample.zip +0 -0
  17. package/dist/bin/explorbot-cli.js +683 -0
  18. package/dist/bin/explorbot-cli.js.map +1 -0
  19. package/dist/boat/api-tester/bin/apibot-cli.js +5 -0
  20. package/dist/boat/api-tester/bin/apibot-cli.js.map +1 -0
  21. package/dist/boat/api-tester/example/apibot.config.js +31 -0
  22. package/dist/boat/api-tester/example/apibot.config.js.map +1 -0
  23. package/dist/boat/api-tester/src/ai/chief/styles.js +13 -0
  24. package/dist/boat/api-tester/src/ai/chief/styles.js.map +1 -0
  25. package/dist/boat/api-tester/src/ai/chief.js +301 -0
  26. package/dist/boat/api-tester/src/ai/chief.js.map +1 -0
  27. package/dist/boat/api-tester/src/ai/curler-tools.js +263 -0
  28. package/dist/boat/api-tester/src/ai/curler-tools.js.map +1 -0
  29. package/dist/boat/api-tester/src/ai/curler.js +271 -0
  30. package/dist/boat/api-tester/src/ai/curler.js.map +1 -0
  31. package/dist/boat/api-tester/src/api-client.js +26 -0
  32. package/dist/boat/api-tester/src/api-client.js.map +1 -0
  33. package/dist/boat/api-tester/src/apibot.js +166 -0
  34. package/dist/boat/api-tester/src/apibot.js.map +1 -0
  35. package/dist/boat/api-tester/src/cli.js +262 -0
  36. package/dist/boat/api-tester/src/cli.js.map +1 -0
  37. package/dist/boat/api-tester/src/config.js +159 -0
  38. package/dist/boat/api-tester/src/config.js.map +1 -0
  39. package/dist/prompts/audit-rules.md +124 -0
  40. package/dist/rules/chief/general.md +11 -0
  41. package/dist/rules/chief/styles/curious.md +12 -0
  42. package/dist/rules/chief/styles/hacker.md +19 -0
  43. package/dist/rules/chief/styles/normal.md +11 -0
  44. package/dist/rules/chief/styles/psycho.md +17 -0
  45. package/dist/rules/navigator/multiple-locator.md +47 -0
  46. package/dist/rules/navigator/output.md +69 -0
  47. package/dist/rules/navigator/verification-actions.md +122 -0
  48. package/dist/rules/navigator/verification-output.md +53 -0
  49. package/dist/rules/planner/styles/curious.md +39 -0
  50. package/dist/rules/planner/styles/normal.md +21 -0
  51. package/dist/rules/planner/styles/psycho.md +14 -0
  52. package/dist/rules/researcher/list-element.md +11 -0
  53. package/dist/rules/researcher/screenshot-ui-map.md +30 -0
  54. package/dist/rules/researcher/section-ui-map.md +18 -0
  55. package/dist/rules/researcher/ui-map-table.md +18 -0
  56. package/dist/src/action-result.js +574 -0
  57. package/dist/src/action-result.js.map +1 -0
  58. package/dist/src/action.js +388 -0
  59. package/dist/src/action.js.map +1 -0
  60. package/dist/src/activity.js +86 -0
  61. package/dist/src/activity.js.map +1 -0
  62. package/dist/src/ai/agent.js +2 -0
  63. package/dist/src/ai/agent.js.map +1 -0
  64. package/dist/src/ai/bosun.js +443 -0
  65. package/dist/src/ai/bosun.js.map +1 -0
  66. package/dist/src/ai/captain/idle-mode.js +102 -0
  67. package/dist/src/ai/captain/idle-mode.js.map +1 -0
  68. package/dist/src/ai/captain/mixin.js +11 -0
  69. package/dist/src/ai/captain/mixin.js.map +1 -0
  70. package/dist/src/ai/captain/test-mode.js +251 -0
  71. package/dist/src/ai/captain/test-mode.js.map +1 -0
  72. package/dist/src/ai/captain/web-mode.js +124 -0
  73. package/dist/src/ai/captain/web-mode.js.map +1 -0
  74. package/dist/src/ai/captain.js +442 -0
  75. package/dist/src/ai/captain.js.map +1 -0
  76. package/dist/src/ai/conversation.js +176 -0
  77. package/dist/src/ai/conversation.js.map +1 -0
  78. package/dist/src/ai/experience-compactor.js +232 -0
  79. package/dist/src/ai/experience-compactor.js.map +1 -0
  80. package/dist/src/ai/fisherman-tools.js +154 -0
  81. package/dist/src/ai/fisherman-tools.js.map +1 -0
  82. package/dist/src/ai/fisherman.js +184 -0
  83. package/dist/src/ai/fisherman.js.map +1 -0
  84. package/dist/src/ai/historian.js +384 -0
  85. package/dist/src/ai/historian.js.map +1 -0
  86. package/dist/src/ai/navigator.js +493 -0
  87. package/dist/src/ai/navigator.js.map +1 -0
  88. package/dist/src/ai/pilot.js +684 -0
  89. package/dist/src/ai/pilot.js.map +1 -0
  90. package/dist/src/ai/planner/session-dedup.js +28 -0
  91. package/dist/src/ai/planner/session-dedup.js.map +1 -0
  92. package/dist/src/ai/planner/styles.js +15 -0
  93. package/dist/src/ai/planner/styles.js.map +1 -0
  94. package/dist/src/ai/planner/subpages.js +118 -0
  95. package/dist/src/ai/planner/subpages.js.map +1 -0
  96. package/dist/src/ai/planner.js +486 -0
  97. package/dist/src/ai/planner.js.map +1 -0
  98. package/dist/src/ai/provider.js +540 -0
  99. package/dist/src/ai/provider.js.map +1 -0
  100. package/dist/src/ai/quartermaster.js +210 -0
  101. package/dist/src/ai/quartermaster.js.map +1 -0
  102. package/dist/src/ai/researcher/cache.js +95 -0
  103. package/dist/src/ai/researcher/cache.js.map +1 -0
  104. package/dist/src/ai/researcher/coordinates.js +210 -0
  105. package/dist/src/ai/researcher/coordinates.js.map +1 -0
  106. package/dist/src/ai/researcher/deep-analysis.js +364 -0
  107. package/dist/src/ai/researcher/deep-analysis.js.map +1 -0
  108. package/dist/src/ai/researcher/fingerprint-worker.js +46 -0
  109. package/dist/src/ai/researcher/fingerprint-worker.js.map +1 -0
  110. package/dist/src/ai/researcher/focus.js +37 -0
  111. package/dist/src/ai/researcher/focus.js.map +1 -0
  112. package/dist/src/ai/researcher/locators.js +242 -0
  113. package/dist/src/ai/researcher/locators.js.map +1 -0
  114. package/dist/src/ai/researcher/mixin.js +3 -0
  115. package/dist/src/ai/researcher/mixin.js.map +1 -0
  116. package/dist/src/ai/researcher/parser.js +160 -0
  117. package/dist/src/ai/researcher/parser.js.map +1 -0
  118. package/dist/src/ai/researcher/research-result.js +110 -0
  119. package/dist/src/ai/researcher/research-result.js.map +1 -0
  120. package/dist/src/ai/researcher.js +776 -0
  121. package/dist/src/ai/researcher.js.map +1 -0
  122. package/dist/src/ai/rules.js +368 -0
  123. package/dist/src/ai/rules.js.map +1 -0
  124. package/dist/src/ai/task-agent.js +110 -0
  125. package/dist/src/ai/task-agent.js.map +1 -0
  126. package/dist/src/ai/tester.js +840 -0
  127. package/dist/src/ai/tester.js.map +1 -0
  128. package/dist/src/ai/tools.js +980 -0
  129. package/dist/src/ai/tools.js.map +1 -0
  130. package/dist/src/api/api-client.js +91 -0
  131. package/dist/src/api/api-client.js.map +1 -0
  132. package/dist/src/api/request-result.js +177 -0
  133. package/dist/src/api/request-result.js.map +1 -0
  134. package/dist/src/api/request-store.js +109 -0
  135. package/dist/src/api/request-store.js.map +1 -0
  136. package/dist/src/api/spec-reader.js +148 -0
  137. package/dist/src/api/spec-reader.js.map +1 -0
  138. package/dist/src/api/xhr-capture.js +91 -0
  139. package/dist/src/api/xhr-capture.js.map +1 -0
  140. package/dist/src/browser-server.js +67 -0
  141. package/dist/src/browser-server.js.map +1 -0
  142. package/dist/src/command-handler.js +363 -0
  143. package/dist/src/command-handler.js.map +1 -0
  144. package/dist/src/commands/add-rule-command.js +52 -0
  145. package/dist/src/commands/add-rule-command.js.map +1 -0
  146. package/dist/src/commands/base-command.js +14 -0
  147. package/dist/src/commands/base-command.js.map +1 -0
  148. package/dist/src/commands/clean-command.js +67 -0
  149. package/dist/src/commands/clean-command.js.map +1 -0
  150. package/dist/src/commands/context-aria-command.js +18 -0
  151. package/dist/src/commands/context-aria-command.js.map +1 -0
  152. package/dist/src/commands/context-command.js +57 -0
  153. package/dist/src/commands/context-command.js.map +1 -0
  154. package/dist/src/commands/context-data-command.js +25 -0
  155. package/dist/src/commands/context-data-command.js.map +1 -0
  156. package/dist/src/commands/context-experience-command.js +41 -0
  157. package/dist/src/commands/context-experience-command.js.map +1 -0
  158. package/dist/src/commands/context-html-command.js +26 -0
  159. package/dist/src/commands/context-html-command.js.map +1 -0
  160. package/dist/src/commands/context-knowledge-command.js +36 -0
  161. package/dist/src/commands/context-knowledge-command.js.map +1 -0
  162. package/dist/src/commands/debug-command.js +12 -0
  163. package/dist/src/commands/debug-command.js.map +1 -0
  164. package/dist/src/commands/drill-command.js +29 -0
  165. package/dist/src/commands/drill-command.js.map +1 -0
  166. package/dist/src/commands/exit-command.js +26 -0
  167. package/dist/src/commands/exit-command.js.map +1 -0
  168. package/dist/src/commands/explore-command.js +124 -0
  169. package/dist/src/commands/explore-command.js.map +1 -0
  170. package/dist/src/commands/freesail-command.js +84 -0
  171. package/dist/src/commands/freesail-command.js.map +1 -0
  172. package/dist/src/commands/help-command.js +7 -0
  173. package/dist/src/commands/help-command.js.map +1 -0
  174. package/dist/src/commands/index.js +63 -0
  175. package/dist/src/commands/index.js.map +1 -0
  176. package/dist/src/commands/knows-command.js +54 -0
  177. package/dist/src/commands/knows-command.js.map +1 -0
  178. package/dist/src/commands/learn-command.js +35 -0
  179. package/dist/src/commands/learn-command.js.map +1 -0
  180. package/dist/src/commands/navigate-command.js +16 -0
  181. package/dist/src/commands/navigate-command.js.map +1 -0
  182. package/dist/src/commands/path-command.js +70 -0
  183. package/dist/src/commands/path-command.js.map +1 -0
  184. package/dist/src/commands/plan-clear-command.js +13 -0
  185. package/dist/src/commands/plan-clear-command.js.map +1 -0
  186. package/dist/src/commands/plan-command.js +36 -0
  187. package/dist/src/commands/plan-command.js.map +1 -0
  188. package/dist/src/commands/plan-edit-command.js +8 -0
  189. package/dist/src/commands/plan-edit-command.js.map +1 -0
  190. package/dist/src/commands/plan-load-command.js +16 -0
  191. package/dist/src/commands/plan-load-command.js.map +1 -0
  192. package/dist/src/commands/plan-reload-command.js +23 -0
  193. package/dist/src/commands/plan-reload-command.js.map +1 -0
  194. package/dist/src/commands/plan-save-command.js +22 -0
  195. package/dist/src/commands/plan-save-command.js.map +1 -0
  196. package/dist/src/commands/research-command.js +38 -0
  197. package/dist/src/commands/research-command.js.map +1 -0
  198. package/dist/src/commands/start-command.js +12 -0
  199. package/dist/src/commands/start-command.js.map +1 -0
  200. package/dist/src/commands/status-command.js +19 -0
  201. package/dist/src/commands/status-command.js.map +1 -0
  202. package/dist/src/commands/test-command.js +85 -0
  203. package/dist/src/commands/test-command.js.map +1 -0
  204. package/dist/src/components/ActivityPane.js +55 -0
  205. package/dist/src/components/ActivityPane.js.map +1 -0
  206. package/dist/src/components/AddKnowledge.js +122 -0
  207. package/dist/src/components/AddKnowledge.js.map +1 -0
  208. package/dist/src/components/AddRule.js +117 -0
  209. package/dist/src/components/AddRule.js.map +1 -0
  210. package/dist/src/components/App.js +313 -0
  211. package/dist/src/components/App.js.map +1 -0
  212. package/dist/src/components/Autocomplete.js +43 -0
  213. package/dist/src/components/Autocomplete.js.map +1 -0
  214. package/dist/src/components/InputPane.js +207 -0
  215. package/dist/src/components/InputPane.js.map +1 -0
  216. package/dist/src/components/InputReadline.js +598 -0
  217. package/dist/src/components/InputReadline.js.map +1 -0
  218. package/dist/src/components/LogPane.js +123 -0
  219. package/dist/src/components/LogPane.js.map +1 -0
  220. package/dist/src/components/PlanEditor.js +126 -0
  221. package/dist/src/components/PlanEditor.js.map +1 -0
  222. package/dist/src/components/PlanPane.js +51 -0
  223. package/dist/src/components/PlanPane.js.map +1 -0
  224. package/dist/src/components/SessionTimer.js +26 -0
  225. package/dist/src/components/SessionTimer.js.map +1 -0
  226. package/dist/src/components/StateTransitionPane.js +107 -0
  227. package/dist/src/components/StateTransitionPane.js.map +1 -0
  228. package/dist/src/components/StatusPane.js +37 -0
  229. package/dist/src/components/StatusPane.js.map +1 -0
  230. package/dist/src/components/TaskPane.js +96 -0
  231. package/dist/src/components/TaskPane.js.map +1 -0
  232. package/dist/src/components/Welcome.js +52 -0
  233. package/dist/src/components/Welcome.js.map +1 -0
  234. package/dist/src/components/WelcomeChecklist.js +96 -0
  235. package/dist/src/components/WelcomeChecklist.js.map +1 -0
  236. package/dist/src/components/WelcomeCommands.js +61 -0
  237. package/dist/src/components/WelcomeCommands.js.map +1 -0
  238. package/dist/src/components/autocomplete-store.js +22 -0
  239. package/dist/src/components/autocomplete-store.js.map +1 -0
  240. package/dist/src/components/parse-keypress.js +174 -0
  241. package/dist/src/components/parse-keypress.js.map +1 -0
  242. package/dist/src/config.js +249 -0
  243. package/dist/src/config.js.map +1 -0
  244. package/dist/src/execution-controller.js +92 -0
  245. package/dist/src/execution-controller.js.map +1 -0
  246. package/dist/src/experience-tracker.js +294 -0
  247. package/dist/src/experience-tracker.js.map +1 -0
  248. package/dist/src/explorbot.js +348 -0
  249. package/dist/src/explorbot.js.map +1 -0
  250. package/dist/src/explorer.js +611 -0
  251. package/dist/src/explorer.js.map +1 -0
  252. package/dist/src/index.js +56 -0
  253. package/dist/src/index.js.map +1 -0
  254. package/dist/src/knowledge-tracker.js +184 -0
  255. package/dist/src/knowledge-tracker.js.map +1 -0
  256. package/dist/src/observability.js +126 -0
  257. package/dist/src/observability.js.map +1 -0
  258. package/dist/src/reporter.js +185 -0
  259. package/dist/src/reporter.js.map +1 -0
  260. package/dist/src/state-manager.js +427 -0
  261. package/dist/src/state-manager.js.map +1 -0
  262. package/dist/src/stats.js +44 -0
  263. package/dist/src/stats.js.map +1 -0
  264. package/dist/src/test-plan.js +343 -0
  265. package/dist/src/test-plan.js.map +1 -0
  266. package/dist/src/utils/aria.js +588 -0
  267. package/dist/src/utils/aria.js.map +1 -0
  268. package/dist/src/utils/code-extractor.js +21 -0
  269. package/dist/src/utils/code-extractor.js.map +1 -0
  270. package/dist/src/utils/context-formatter.js +205 -0
  271. package/dist/src/utils/context-formatter.js.map +1 -0
  272. package/dist/src/utils/error-page.js +19 -0
  273. package/dist/src/utils/error-page.js.map +1 -0
  274. package/dist/src/utils/expandable.js +35 -0
  275. package/dist/src/utils/expandable.js.map +1 -0
  276. package/dist/src/utils/hooks-runner.js +77 -0
  277. package/dist/src/utils/hooks-runner.js.map +1 -0
  278. package/dist/src/utils/html-diff.js +734 -0
  279. package/dist/src/utils/html-diff.js.map +1 -0
  280. package/dist/src/utils/html.js +1163 -0
  281. package/dist/src/utils/html.js.map +1 -0
  282. package/dist/src/utils/logger.js +465 -0
  283. package/dist/src/utils/logger.js.map +1 -0
  284. package/dist/src/utils/loop.js +126 -0
  285. package/dist/src/utils/loop.js.map +1 -0
  286. package/dist/src/utils/markdown-parser.js +117 -0
  287. package/dist/src/utils/markdown-parser.js.map +1 -0
  288. package/dist/src/utils/markdown-query.js +393 -0
  289. package/dist/src/utils/markdown-query.js.map +1 -0
  290. package/dist/src/utils/markdown-terminal.js +40 -0
  291. package/dist/src/utils/markdown-terminal.js.map +1 -0
  292. package/dist/src/utils/research-parser.js +2 -0
  293. package/dist/src/utils/research-parser.js.map +1 -0
  294. package/dist/src/utils/retry.js +55 -0
  295. package/dist/src/utils/retry.js.map +1 -0
  296. package/dist/src/utils/rules-loader.js +104 -0
  297. package/dist/src/utils/rules-loader.js.map +1 -0
  298. package/dist/src/utils/strings.js +14 -0
  299. package/dist/src/utils/strings.js.map +1 -0
  300. package/dist/src/utils/test-plan-markdown.js +301 -0
  301. package/dist/src/utils/test-plan-markdown.js.map +1 -0
  302. package/dist/src/utils/throttle.js +16 -0
  303. package/dist/src/utils/throttle.js.map +1 -0
  304. package/dist/src/utils/unique-names.js +13 -0
  305. package/dist/src/utils/unique-names.js.map +1 -0
  306. package/dist/src/utils/url-matcher.js +48 -0
  307. package/dist/src/utils/url-matcher.js.map +1 -0
  308. package/dist/src/utils/web-element.js +131 -0
  309. package/dist/src/utils/web-element.js.map +1 -0
  310. package/dist/src/utils/xpath.js +110 -0
  311. package/dist/src/utils/xpath.js.map +1 -0
  312. package/package.json +119 -0
  313. package/prompts/audit-rules.md +124 -0
  314. package/rules/chief/general.md +11 -0
  315. package/rules/chief/styles/curious.md +12 -0
  316. package/rules/chief/styles/hacker.md +19 -0
  317. package/rules/chief/styles/normal.md +11 -0
  318. package/rules/chief/styles/psycho.md +17 -0
  319. package/rules/navigator/multiple-locator.md +47 -0
  320. package/rules/navigator/output.md +69 -0
  321. package/rules/navigator/verification-actions.md +122 -0
  322. package/rules/navigator/verification-output.md +53 -0
  323. package/rules/planner/styles/curious.md +39 -0
  324. package/rules/planner/styles/normal.md +21 -0
  325. package/rules/planner/styles/psycho.md +14 -0
  326. package/rules/researcher/list-element.md +11 -0
  327. package/rules/researcher/screenshot-ui-map.md +30 -0
  328. package/rules/researcher/section-ui-map.md +18 -0
  329. package/rules/researcher/ui-map-table.md +18 -0
@@ -0,0 +1,540 @@
1
+ import { LangfuseSpanProcessor } from '@langfuse/otel';
2
+ import { NodeSDK } from '@opentelemetry/sdk-node';
3
+ import { generateObject, generateText } from 'ai';
4
+ import { clearActivity, setActivity } from "../activity.js";
5
+ import { RulesLoader } from "../utils/rules-loader.js";
6
+ import { executionController } from "../execution-controller.js";
7
+ import { Observability } from "../observability.js";
8
+ import { Stats } from "../stats.js";
9
+ import { createDebug, tag } from '../utils/logger.js';
10
+ import { withRetry } from '../utils/retry.js';
11
+ import { Conversation } from './conversation.js';
12
+ const debugLog = createDebug('explorbot:provider');
13
+ const promptLog = createDebug('explorbot:provider:out');
14
+ const responseLog = createDebug('explorbot:provider:in');
15
+ class AiError extends Error {
16
+ }
17
+ export class ContextLengthError extends Error {
18
+ }
19
+ export class Provider {
20
+ config;
21
+ telemetryEnabled = false;
22
+ otelSdk = null;
23
+ defaultRetryOptions = {
24
+ maxAttempts: 3,
25
+ baseDelay: 10,
26
+ maxDelay: 10000,
27
+ retryCondition: (error) => {
28
+ return ((error.name === 'AI_APICallError' ||
29
+ error.message.includes('timeout') ||
30
+ error.message.includes('network') ||
31
+ error.message.includes('rate limit') ||
32
+ error.message.includes('AI request timeout') ||
33
+ error.message.includes('schema') ||
34
+ error.message.includes('No object generated') ||
35
+ error.message.includes('No response text') ||
36
+ error.message.includes('validate JSON')) &&
37
+ !error.message.includes('output truncated at maxTokens'));
38
+ },
39
+ };
40
+ static CONTEXT_LENGTH_PATTERNS = ['reduce the length', 'context length', 'maximum context', 'token limit', 'too many tokens', 'max_tokens', 'context_length_exceeded', 'output truncated at maxtokens'];
41
+ lastConversation = null;
42
+ constructor(config) {
43
+ if (!config?.model) {
44
+ throw new AiError('AI model is not configured. Set ai.model in your config file.');
45
+ }
46
+ this.config = config;
47
+ this.initLangfuse();
48
+ }
49
+ getModelName(model) {
50
+ return model?.modelId || model?.model || 'unknown';
51
+ }
52
+ async validateConnection() {
53
+ try {
54
+ await generateText({
55
+ model: this.config.model,
56
+ prompt: 'hi',
57
+ maxTokens: 1,
58
+ });
59
+ }
60
+ catch (error) {
61
+ throw new AiError(`AI connection failed: ${error.message}`);
62
+ }
63
+ }
64
+ getModelForAgent(agentName) {
65
+ if (!agentName) {
66
+ return this.config.model;
67
+ }
68
+ const agentConfig = this.config.agents?.[agentName];
69
+ return agentConfig?.model || this.config.model;
70
+ }
71
+ getAgenticModel(agentName) {
72
+ if (agentName) {
73
+ const agentConfig = this.config.agents?.[agentName];
74
+ if (agentConfig?.model)
75
+ return agentConfig.model;
76
+ }
77
+ return this.config.agenticModel || this.config.model;
78
+ }
79
+ getSystemPromptForAgent(agentName, currentUrl) {
80
+ const agentConfig = this.config.agents?.[agentName];
81
+ const parts = [];
82
+ if (agentConfig?.rules && currentUrl) {
83
+ const rulesText = RulesLoader.loadRules(agentName, agentConfig.rules, currentUrl);
84
+ if (rulesText)
85
+ parts.push(rulesText);
86
+ }
87
+ if (agentConfig?.systemPrompt)
88
+ parts.push(agentConfig.systemPrompt);
89
+ return parts.length > 0 ? parts.join('\n\n') : undefined;
90
+ }
91
+ getProviderOptionsForAgent(agentName) {
92
+ const agentConfig = this.config.agents?.[agentName];
93
+ return agentConfig?.providerOptions;
94
+ }
95
+ getRetryOptions(options = {}) {
96
+ return {
97
+ ...this.defaultRetryOptions,
98
+ maxAttempts: options.maxRetries || this.defaultRetryOptions.maxAttempts,
99
+ };
100
+ }
101
+ mergeProviderOptions(config, agentName) {
102
+ if (!agentName)
103
+ return config;
104
+ const agentOptions = this.getProviderOptionsForAgent(agentName);
105
+ if (!agentOptions)
106
+ return config;
107
+ return {
108
+ ...config,
109
+ providerOptions: { ...config.providerOptions, ...agentOptions },
110
+ };
111
+ }
112
+ initLangfuse() {
113
+ const langfuseConfig = this.config.langfuse;
114
+ const publicKey = langfuseConfig?.publicKey || process.env.LANGFUSE_PUBLIC_KEY;
115
+ const secretKey = langfuseConfig?.secretKey || process.env.LANGFUSE_SECRET_KEY;
116
+ const baseUrl = langfuseConfig?.baseUrl || process.env.LANGFUSE_BASE_URL || process.env.LANGFUSE_HOST;
117
+ const enabled = langfuseConfig?.enabled ?? Boolean(publicKey && secretKey);
118
+ if (!enabled || !publicKey || !secretKey) {
119
+ return;
120
+ }
121
+ const processor = new LangfuseSpanProcessor({
122
+ publicKey,
123
+ secretKey,
124
+ baseUrl,
125
+ });
126
+ this.otelSdk = new NodeSDK({
127
+ spanProcessors: [processor],
128
+ instrumentations: [],
129
+ });
130
+ void this.otelSdk.start();
131
+ this.telemetryEnabled = true;
132
+ }
133
+ getTelemetry(options) {
134
+ if (!this.telemetryEnabled) {
135
+ return undefined;
136
+ }
137
+ const runTelemetry = Observability.getTelemetry();
138
+ if (!options.experimental_telemetry) {
139
+ return runTelemetry || { isEnabled: true };
140
+ }
141
+ if (!runTelemetry) {
142
+ return options.experimental_telemetry;
143
+ }
144
+ return {
145
+ ...runTelemetry,
146
+ ...options.experimental_telemetry,
147
+ metadata: {
148
+ ...runTelemetry.metadata,
149
+ ...options.experimental_telemetry.metadata,
150
+ },
151
+ };
152
+ }
153
+ startConversation(systemMessage, agentName, model) {
154
+ const resolvedModel = model || this.getModelForAgent(agentName);
155
+ return new Conversation([
156
+ {
157
+ role: 'system',
158
+ content: systemMessage,
159
+ },
160
+ ], resolvedModel);
161
+ }
162
+ async invokeConversation(conversation, tools, options = {}) {
163
+ const response = tools ? await this.generateWithTools(conversation.messages, conversation.model, tools, options) : await this.chat(conversation.messages, conversation.model, options);
164
+ const responseMessages = response.response?.messages || [];
165
+ if (responseMessages.length > 0) {
166
+ conversation.messages.push(...responseMessages);
167
+ tag('debug').log('Added', responseMessages.length, 'messages from response');
168
+ }
169
+ else {
170
+ conversation.addAssistantText(response.text || '');
171
+ }
172
+ this.lastConversation = conversation;
173
+ const toolCalls = response.toolCalls || [];
174
+ const toolResults = response.toolResults || [];
175
+ const toolExecutions = toolCalls.map((call, index) => ({
176
+ toolName: call.toolName || '',
177
+ input: call.input,
178
+ output: toolResults[index]?.output,
179
+ wasSuccessful: toolResults[index]?.output?.success || false,
180
+ }));
181
+ return { conversation, response, toolExecutions };
182
+ }
183
+ async chat(messages, model, options = {}) {
184
+ const modelName = this.getModelName(model);
185
+ setActivity(`🤖 Asking ${modelName}`, 'ai');
186
+ promptLog(`Using model: ${modelName}`);
187
+ const telemetry = this.getTelemetry(options);
188
+ const config = this.mergeProviderOptions({
189
+ maxTokens: 16384,
190
+ ...(this.config.config || {}),
191
+ ...options,
192
+ ...(telemetry ? { experimental_telemetry: telemetry } : {}),
193
+ model,
194
+ abortSignal: executionController.getAbortSignal(),
195
+ }, options.agentName);
196
+ promptLog(messages[messages.length - 1].content);
197
+ try {
198
+ const response = await withRetry(async () => {
199
+ const result = await generateText({ messages, ...config });
200
+ if (!result.text) {
201
+ debugLog(result);
202
+ if (result.finishReason === 'length') {
203
+ throw new ContextLengthError('AI response empty: output truncated at maxTokens. Increase maxTokens in config or use a model with higher output capacity.');
204
+ }
205
+ throw new Error('No response text from AI');
206
+ }
207
+ if (result.finishReason === 'length') {
208
+ debugLog('finishReason=length, response may be truncated');
209
+ }
210
+ return result;
211
+ }, this.getRetryOptions(options));
212
+ clearActivity();
213
+ responseLog(response.text);
214
+ if (response.usage) {
215
+ Stats.recordTokens(options.agentName || 'unknown', modelName, {
216
+ input: response.usage.promptTokens || 0,
217
+ output: response.usage.completionTokens || 0,
218
+ total: response.usage.totalTokens || 0,
219
+ });
220
+ }
221
+ return response;
222
+ }
223
+ catch (error) {
224
+ clearActivity();
225
+ if (error?.name === 'AbortError')
226
+ throw error;
227
+ if (error instanceof ContextLengthError)
228
+ throw error;
229
+ if (Provider.isContextLengthError(error)) {
230
+ const reduced = this.tryReduceMessages(messages, options._contextRetryLevel || 0);
231
+ if (reduced) {
232
+ tag('warning').log('Context length exceeded, retrying with reduced messages...');
233
+ return this.chat(reduced.messages, model, { ...options, _contextRetryLevel: reduced.nextLevel });
234
+ }
235
+ throw new ContextLengthError(error.message || error.toString());
236
+ }
237
+ tag('error').log(error.message || error.toString());
238
+ throw new AiError(error.message || error.toString());
239
+ }
240
+ }
241
+ async generateWithTools(messages, model, tools, options = {}) {
242
+ const modelName = this.getModelName(model);
243
+ setActivity(`🤖 Asking ${modelName} with dynamic tools`, 'ai');
244
+ promptLog(`Using model: ${modelName}`);
245
+ const toolNames = Object.keys(tools || {});
246
+ tag('debug').log(`Tools enabled: [${toolNames.join(', ')}]`);
247
+ promptLog('Available tools:', toolNames);
248
+ promptLog(messages[messages.length - 1].content);
249
+ const telemetry = this.getTelemetry(options);
250
+ const config = this.mergeProviderOptions({
251
+ tools,
252
+ maxTokens: 16384,
253
+ maxToolRoundtrips: options.maxToolRoundtrips ?? 5,
254
+ toolChoice: 'auto',
255
+ ...(this.config.config || {}),
256
+ ...options,
257
+ ...(telemetry ? { experimental_telemetry: telemetry } : {}),
258
+ model,
259
+ abortSignal: executionController.getAbortSignal(),
260
+ }, options.agentName);
261
+ try {
262
+ const response = await withRetry(async () => {
263
+ const timeout = config.timeout || 30000;
264
+ return (await Promise.race([
265
+ generateText({
266
+ messages,
267
+ ...config,
268
+ }),
269
+ new Promise((_, reject) => setTimeout(() => reject(new Error('AI request timeout')), timeout)),
270
+ ]));
271
+ }, this.getRetryOptions(options));
272
+ clearActivity();
273
+ // Log tool usage summary
274
+ if (response.toolCalls && response.toolCalls.length > 0) {
275
+ responseLog(response.toolCalls);
276
+ response.toolCalls.forEach((call, index) => {
277
+ tag('debug').log(`${call.toolName} > ${Object.values(call?.input || []).join(', ')}`);
278
+ });
279
+ }
280
+ responseLog(response.text);
281
+ if (response.usage) {
282
+ Stats.recordTokens(options.agentName || 'unknown', modelName, {
283
+ input: response.usage.promptTokens || 0,
284
+ output: response.usage.completionTokens || 0,
285
+ total: response.usage.totalTokens || 0,
286
+ });
287
+ }
288
+ return response;
289
+ }
290
+ catch (error) {
291
+ clearActivity();
292
+ if (error?.message?.includes('Tool choice is required')) {
293
+ tag('warning').log('Model completed without calling a tool, returning empty result');
294
+ return { text: '', toolCalls: [], toolResults: [], response: { messages: [] }, usage: null };
295
+ }
296
+ if (error?.name === 'AbortError')
297
+ throw error;
298
+ if (error instanceof ContextLengthError)
299
+ throw error;
300
+ if (Provider.isContextLengthError(error)) {
301
+ const reduced = this.tryReduceMessages(messages, options._contextRetryLevel || 0);
302
+ if (reduced) {
303
+ tag('warning').log('Context length exceeded, retrying with reduced messages...');
304
+ return this.generateWithTools(reduced.messages, model, tools, { ...options, _contextRetryLevel: reduced.nextLevel });
305
+ }
306
+ throw new ContextLengthError(error.message || error.toString());
307
+ }
308
+ if (error.constructor?.name === 'AI_APICallError') {
309
+ responseLog(error.message);
310
+ throw new AiError(error.message);
311
+ }
312
+ throw error;
313
+ }
314
+ }
315
+ async generateObject(messages, schema, model, options = {}) {
316
+ const modelToUse = model || this.config.model;
317
+ const modelName = this.getModelName(modelToUse);
318
+ setActivity(`🤖 Asking ${modelName} for structured output`, 'ai');
319
+ promptLog(`Using model: ${modelName}`);
320
+ const telemetry = this.getTelemetry(options);
321
+ const config = this.mergeProviderOptions({
322
+ schema,
323
+ ...(this.config.config || {}),
324
+ ...options,
325
+ ...(telemetry ? { experimental_telemetry: telemetry } : {}),
326
+ model: modelToUse,
327
+ abortSignal: executionController.getAbortSignal(),
328
+ }, options.agentName);
329
+ try {
330
+ promptLog(messages[messages.length - 1].content);
331
+ const response = await withRetry(async () => {
332
+ const timeout = config.timeout || 30000;
333
+ return (await Promise.race([
334
+ generateObject({
335
+ messages,
336
+ ...config,
337
+ }),
338
+ new Promise((_, reject) => setTimeout(() => reject(new Error('AI request timeout')), timeout)),
339
+ ]));
340
+ }, this.getRetryOptions(options));
341
+ clearActivity();
342
+ responseLog(response.object);
343
+ if (response.usage) {
344
+ Stats.recordTokens(options.agentName || 'unknown', modelName, {
345
+ input: response.usage.promptTokens || 0,
346
+ output: response.usage.completionTokens || 0,
347
+ total: response.usage.totalTokens || 0,
348
+ });
349
+ }
350
+ return response;
351
+ }
352
+ catch (error) {
353
+ clearActivity();
354
+ if (error?.name === 'AbortError')
355
+ throw error;
356
+ if (error instanceof ContextLengthError)
357
+ throw error;
358
+ if (Provider.isContextLengthError(error)) {
359
+ const reduced = this.tryReduceMessages(messages, options._contextRetryLevel || 0);
360
+ if (reduced) {
361
+ tag('warning').log('Context length exceeded, retrying with reduced messages...');
362
+ return this.generateObject(reduced.messages, schema, model, { ...options, _contextRetryLevel: reduced.nextLevel });
363
+ }
364
+ throw new ContextLengthError(error.message || error.toString());
365
+ }
366
+ throw new AiError(error.message || error.toString());
367
+ }
368
+ }
369
+ static isContextLengthError(error) {
370
+ const msg = (error?.message || error?.toString() || '').toLowerCase();
371
+ return Provider.CONTEXT_LENGTH_PATTERNS.some((p) => msg.includes(p));
372
+ }
373
+ static trimMessagesForRetry(messages) {
374
+ const tagRegex = /<(\w[\w-]*)>([\s\S]*?)<\/\1>/g;
375
+ let didTrim = false;
376
+ const trimmed = messages.map((msg, idx) => {
377
+ if (typeof msg.content === 'string') {
378
+ const newContent = msg.content.replace(tagRegex, (match, tagName, content) => {
379
+ if (content.length > 2000) {
380
+ didTrim = true;
381
+ return `<${tagName}>${content.substring(0, Math.floor(content.length / 2))}\n[...trimmed...]</${tagName}>`;
382
+ }
383
+ return match;
384
+ });
385
+ return { ...msg, content: newContent };
386
+ }
387
+ if (msg.role === 'tool' && Array.isArray(msg.content) && idx < messages.length - 3) {
388
+ const newContent = msg.content.map((part) => {
389
+ if (part.type !== 'tool-result' || !part.output)
390
+ return part;
391
+ const output = part.output?.type === 'json' ? part.output.value : part.output;
392
+ if (!output || typeof output !== 'object')
393
+ return part;
394
+ const json = JSON.stringify(output);
395
+ if (json.length < 2000)
396
+ return part;
397
+ didTrim = true;
398
+ const trimmedOutput = { success: output.success, action: output.action, trimmed: true };
399
+ return { ...part, output: part.output?.type === 'json' ? { type: 'json', value: trimmedOutput } : trimmedOutput };
400
+ });
401
+ return { ...msg, content: newContent };
402
+ }
403
+ return msg;
404
+ });
405
+ return didTrim ? trimmed : null;
406
+ }
407
+ static compactMessagesForRetry(messages) {
408
+ if (messages.length <= 5)
409
+ return null;
410
+ const head = messages[0];
411
+ let tailStart = messages.length - 4;
412
+ if (messages[tailStart]?.role === 'tool' && tailStart > 1) {
413
+ tailStart--;
414
+ }
415
+ const tail = messages.slice(tailStart);
416
+ const middle = messages.slice(1, tailStart);
417
+ if (middle.length === 0)
418
+ return null;
419
+ const executions = new Conversation(middle).getToolExecutions();
420
+ const toolStats = new Map();
421
+ const urls = new Set();
422
+ const failedAttempts = [];
423
+ for (const exec of executions) {
424
+ const stats = toolStats.get(exec.toolName) || { total: 0, success: 0, fail: 0 };
425
+ stats.total++;
426
+ if (exec.wasSuccessful)
427
+ stats.success++;
428
+ else
429
+ stats.fail++;
430
+ toolStats.set(exec.toolName, stats);
431
+ const url = exec.output?.url || exec.output?.pageDiff?.currentUrl;
432
+ if (url)
433
+ urls.add(url);
434
+ if (!exec.wasSuccessful && failedAttempts.length < 10) {
435
+ const inputLabel = exec.input ? Object.values(exec.input)[0] : '';
436
+ const errorMsg = exec.output?.message || exec.output?.error || 'failed';
437
+ failedAttempts.push(`- ${exec.toolName}("${inputLabel}"): ${errorMsg}`);
438
+ }
439
+ }
440
+ let lastUserText = '';
441
+ for (let i = middle.length - 1; i >= 0; i--) {
442
+ if (middle[i].role === 'user' && typeof middle[i].content === 'string') {
443
+ lastUserText = middle[i].content;
444
+ break;
445
+ }
446
+ }
447
+ const lines = [`[Previous conversation compacted - ${middle.length} messages summarized]`];
448
+ if (toolStats.size > 0) {
449
+ lines.push('', 'Actions performed:');
450
+ for (const [name, stats] of toolStats) {
451
+ lines.push(`- ${name}: ${stats.total} calls (${stats.success} successful${stats.fail > 0 ? `, ${stats.fail} failed` : ''})`);
452
+ }
453
+ }
454
+ if (urls.size > 0) {
455
+ lines.push('', `Pages visited: ${[...urls].join(', ')}`);
456
+ }
457
+ if (failedAttempts.length > 0) {
458
+ lines.push('', 'Failed attempts:', ...failedAttempts);
459
+ }
460
+ if (lastUserText) {
461
+ const truncated = lastUserText.length > 1000 ? `${lastUserText.substring(0, 1000)}...` : lastUserText;
462
+ lines.push('', 'Last context before compaction:', truncated);
463
+ }
464
+ const summary = { role: 'user', content: lines.join('\n') };
465
+ return [head, summary, ...tail];
466
+ }
467
+ tryReduceMessages(messages, retryLevel) {
468
+ if (retryLevel >= 2)
469
+ return null;
470
+ if (retryLevel === 0) {
471
+ const trimmed = Provider.trimMessagesForRetry(messages);
472
+ if (trimmed)
473
+ return { messages: trimmed, nextLevel: 1 };
474
+ }
475
+ const compacted = Provider.compactMessagesForRetry(messages);
476
+ if (compacted)
477
+ return { messages: compacted, nextLevel: 2 };
478
+ return null;
479
+ }
480
+ async processImage(prompt, image) {
481
+ if (!this.config.visionModel) {
482
+ throw new Error('Vision model not configured. Please set ai.visionModel in your config.');
483
+ }
484
+ setActivity(`🤖 Processing image with ${this.config.visionModel}`, 'ai');
485
+ const imageData = `data:image/png;base64,${image.toString()}`;
486
+ const messages = [
487
+ {
488
+ role: 'user',
489
+ content: [
490
+ {
491
+ type: 'text',
492
+ text: prompt,
493
+ },
494
+ {
495
+ type: 'image',
496
+ image: imageData,
497
+ },
498
+ ],
499
+ },
500
+ ];
501
+ const telemetry = this.getTelemetry({});
502
+ const config = {
503
+ maxTokens: 16384,
504
+ ...(this.config.config || {}),
505
+ ...(telemetry ? { experimental_telemetry: telemetry } : {}),
506
+ model: this.config.visionModel,
507
+ abortSignal: executionController.getAbortSignal(),
508
+ };
509
+ try {
510
+ promptLog(`Processing image with prompt: ${prompt}`);
511
+ const response = await withRetry(async () => {
512
+ return await generateText({
513
+ messages,
514
+ ...config,
515
+ });
516
+ }, this.getRetryOptions());
517
+ clearActivity();
518
+ responseLog(response.text);
519
+ if (response.usage) {
520
+ Stats.recordTokens('vision', this.getModelName(this.config.visionModel), {
521
+ input: response.usage.promptTokens || 0,
522
+ output: response.usage.completionTokens || 0,
523
+ total: response.usage.totalTokens || 0,
524
+ });
525
+ }
526
+ return response;
527
+ }
528
+ catch (error) {
529
+ clearActivity();
530
+ if (error?.name === 'AbortError')
531
+ throw error;
532
+ throw new AiError(error.message || error.toString());
533
+ }
534
+ }
535
+ hasVision() {
536
+ return this.config.visionModel !== undefined;
537
+ }
538
+ }
539
+ export { AiError, Provider as AIProvider };
540
+ //# sourceMappingURL=provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/ai/provider.ts"],"names":[],"mappings":"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"}