actoviq-agent-sdk 0.4.7 → 0.4.8

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 (258) hide show
  1. package/CHANGELOG.md +17 -1
  2. package/README-zh.md +8 -5
  3. package/README.md +9 -6
  4. package/assets/actoviq-icon.png +0 -0
  5. package/dist/src/browser/actoviqBrowserSession.d.ts +137 -0
  6. package/dist/src/browser/actoviqBrowserSession.d.ts.map +1 -0
  7. package/dist/src/browser/actoviqBrowserSession.js +623 -0
  8. package/dist/src/browser/actoviqBrowserSession.js.map +1 -0
  9. package/dist/src/browser/actoviqBrowserTools.d.ts +80 -0
  10. package/dist/src/browser/actoviqBrowserTools.d.ts.map +1 -0
  11. package/dist/src/browser/actoviqBrowserTools.js +177 -0
  12. package/dist/src/browser/actoviqBrowserTools.js.map +1 -0
  13. package/dist/src/browser/browserSettings.d.ts +8 -0
  14. package/dist/src/browser/browserSettings.d.ts.map +1 -0
  15. package/dist/src/browser/browserSettings.js +47 -0
  16. package/dist/src/browser/browserSettings.js.map +1 -0
  17. package/dist/src/cli/actoviq-react.js +144 -4
  18. package/dist/src/cli/actoviq-react.js.map +1 -1
  19. package/dist/src/computer/actoviqComputerUse.d.ts.map +1 -1
  20. package/dist/src/computer/actoviqComputerUse.js +226 -40
  21. package/dist/src/computer/actoviqComputerUse.js.map +1 -1
  22. package/dist/src/computer/e2bComputerUse.d.ts +57 -0
  23. package/dist/src/computer/e2bComputerUse.d.ts.map +1 -0
  24. package/dist/src/computer/e2bComputerUse.js +401 -0
  25. package/dist/src/computer/e2bComputerUse.js.map +1 -0
  26. package/dist/src/config/agentProfiles.d.ts +8 -1
  27. package/dist/src/config/agentProfiles.d.ts.map +1 -1
  28. package/dist/src/config/agentProfiles.js +86 -4
  29. package/dist/src/config/agentProfiles.js.map +1 -1
  30. package/dist/src/config/projectSessionDirectory.d.ts +22 -0
  31. package/dist/src/config/projectSessionDirectory.d.ts.map +1 -1
  32. package/dist/src/config/projectSessionDirectory.js +512 -46
  33. package/dist/src/config/projectSessionDirectory.js.map +1 -1
  34. package/dist/src/config/resolveRuntimeConfig.d.ts.map +1 -1
  35. package/dist/src/config/resolveRuntimeConfig.js +12 -7
  36. package/dist/src/config/resolveRuntimeConfig.js.map +1 -1
  37. package/dist/src/gui/actoviqGui.d.ts +3 -0
  38. package/dist/src/gui/actoviqGui.d.ts.map +1 -1
  39. package/dist/src/gui/actoviqGui.js +7247 -997
  40. package/dist/src/gui/actoviqGui.js.map +1 -1
  41. package/dist/src/gui/electronMain.js +21 -4
  42. package/dist/src/gui/electronMain.js.map +1 -1
  43. package/dist/src/gui/externalCliAgentMonitor.d.ts +15 -0
  44. package/dist/src/gui/externalCliAgentMonitor.d.ts.map +1 -0
  45. package/dist/src/gui/externalCliAgentMonitor.js +133 -0
  46. package/dist/src/gui/externalCliAgentMonitor.js.map +1 -0
  47. package/dist/src/gui/projectWorkbench.d.ts +2 -0
  48. package/dist/src/gui/projectWorkbench.d.ts.map +1 -1
  49. package/dist/src/gui/projectWorkbench.js +66 -1
  50. package/dist/src/gui/projectWorkbench.js.map +1 -1
  51. package/dist/src/gui/transcript/clientBundle.d.ts.map +1 -1
  52. package/dist/src/gui/transcript/clientBundle.js +157 -17
  53. package/dist/src/gui/transcript/clientBundle.js.map +1 -1
  54. package/dist/src/gui/transcript/parts.d.ts.map +1 -1
  55. package/dist/src/gui/transcript/parts.js +28 -0
  56. package/dist/src/gui/transcript/parts.js.map +1 -1
  57. package/dist/src/index.d.ts +36 -3
  58. package/dist/src/index.d.ts.map +1 -1
  59. package/dist/src/index.js +22 -2
  60. package/dist/src/index.js.map +1 -1
  61. package/dist/src/parity/actoviqBridgeSdk.d.ts +13 -1
  62. package/dist/src/parity/actoviqBridgeSdk.d.ts.map +1 -1
  63. package/dist/src/parity/actoviqBridgeSdk.js +1022 -83
  64. package/dist/src/parity/actoviqBridgeSdk.js.map +1 -1
  65. package/dist/src/parity/bridgeConfigs.d.ts +15 -0
  66. package/dist/src/parity/bridgeConfigs.d.ts.map +1 -1
  67. package/dist/src/parity/bridgeConfigs.js +112 -3
  68. package/dist/src/parity/bridgeConfigs.js.map +1 -1
  69. package/dist/src/parity/bridgeEventAdapter.d.ts +5 -1
  70. package/dist/src/parity/bridgeEventAdapter.d.ts.map +1 -1
  71. package/dist/src/parity/bridgeEventAdapter.js +65 -12
  72. package/dist/src/parity/bridgeEventAdapter.js.map +1 -1
  73. package/dist/src/parity/bridgeExecResolver.d.ts +10 -11
  74. package/dist/src/parity/bridgeExecResolver.d.ts.map +1 -1
  75. package/dist/src/parity/bridgeExecResolver.js +40 -23
  76. package/dist/src/parity/bridgeExecResolver.js.map +1 -1
  77. package/dist/src/parity/bridgeProcessTree.d.ts +3 -0
  78. package/dist/src/parity/bridgeProcessTree.d.ts.map +1 -0
  79. package/dist/src/parity/bridgeProcessTree.js +83 -0
  80. package/dist/src/parity/bridgeProcessTree.js.map +1 -0
  81. package/dist/src/parity/bridgeProviders.d.ts +16 -2
  82. package/dist/src/parity/bridgeProviders.d.ts.map +1 -1
  83. package/dist/src/parity/bridgeProviders.js +482 -100
  84. package/dist/src/parity/bridgeProviders.js.map +1 -1
  85. package/dist/src/parity/codewhaleRuntimeAdapter.d.ts +18 -0
  86. package/dist/src/parity/codewhaleRuntimeAdapter.d.ts.map +1 -0
  87. package/dist/src/parity/codewhaleRuntimeAdapter.js +350 -0
  88. package/dist/src/parity/codewhaleRuntimeAdapter.js.map +1 -0
  89. package/dist/src/parity/crushManagedClient.d.ts +84 -0
  90. package/dist/src/parity/crushManagedClient.d.ts.map +1 -0
  91. package/dist/src/parity/crushManagedClient.js +978 -0
  92. package/dist/src/parity/crushManagedClient.js.map +1 -0
  93. package/dist/src/parity/crushSessionHistory.d.ts +53 -0
  94. package/dist/src/parity/crushSessionHistory.d.ts.map +1 -0
  95. package/dist/src/parity/crushSessionHistory.js +358 -0
  96. package/dist/src/parity/crushSessionHistory.js.map +1 -0
  97. package/dist/src/parity/externalCliAuth.d.ts +23 -0
  98. package/dist/src/parity/externalCliAuth.d.ts.map +1 -0
  99. package/dist/src/parity/externalCliAuth.js +268 -0
  100. package/dist/src/parity/externalCliAuth.js.map +1 -0
  101. package/dist/src/parity/externalCliRuntimeManager.d.ts +138 -0
  102. package/dist/src/parity/externalCliRuntimeManager.d.ts.map +1 -0
  103. package/dist/src/parity/externalCliRuntimeManager.js +527 -0
  104. package/dist/src/parity/externalCliRuntimeManager.js.map +1 -0
  105. package/dist/src/parity/externalCliSessions.d.ts +90 -0
  106. package/dist/src/parity/externalCliSessions.d.ts.map +1 -0
  107. package/dist/src/parity/externalCliSessions.js +1436 -0
  108. package/dist/src/parity/externalCliSessions.js.map +1 -0
  109. package/dist/src/parity/reasonixAcpSession.d.ts +35 -0
  110. package/dist/src/parity/reasonixAcpSession.d.ts.map +1 -0
  111. package/dist/src/parity/reasonixAcpSession.js +472 -0
  112. package/dist/src/parity/reasonixAcpSession.js.map +1 -0
  113. package/dist/src/parity/reasonixManagedClient.d.ts +56 -0
  114. package/dist/src/parity/reasonixManagedClient.d.ts.map +1 -0
  115. package/dist/src/parity/reasonixManagedClient.js +293 -0
  116. package/dist/src/parity/reasonixManagedClient.js.map +1 -0
  117. package/dist/src/parity/reasonixSessionParser.d.ts +50 -0
  118. package/dist/src/parity/reasonixSessionParser.d.ts.map +1 -0
  119. package/dist/src/parity/reasonixSessionParser.js +440 -0
  120. package/dist/src/parity/reasonixSessionParser.js.map +1 -0
  121. package/dist/src/plugins/githubPlugin.d.ts +64 -0
  122. package/dist/src/plugins/githubPlugin.d.ts.map +1 -0
  123. package/dist/src/plugins/githubPlugin.js +261 -0
  124. package/dist/src/plugins/githubPlugin.js.map +1 -0
  125. package/dist/src/plugins/kimiWebBridgePlugin.d.ts +32 -0
  126. package/dist/src/plugins/kimiWebBridgePlugin.d.ts.map +1 -0
  127. package/dist/src/plugins/kimiWebBridgePlugin.js +214 -0
  128. package/dist/src/plugins/kimiWebBridgePlugin.js.map +1 -0
  129. package/dist/src/plugins/managedPluginCatalog.d.ts +47 -0
  130. package/dist/src/plugins/managedPluginCatalog.d.ts.map +1 -0
  131. package/dist/src/plugins/managedPluginCatalog.js +399 -0
  132. package/dist/src/plugins/managedPluginCatalog.js.map +1 -0
  133. package/dist/src/plugins/managedPluginHealth.d.ts +9 -0
  134. package/dist/src/plugins/managedPluginHealth.d.ts.map +1 -0
  135. package/dist/src/plugins/managedPluginHealth.js +149 -0
  136. package/dist/src/plugins/managedPluginHealth.js.map +1 -0
  137. package/dist/src/plugins/managedPluginRuntime.d.ts +14 -0
  138. package/dist/src/plugins/managedPluginRuntime.d.ts.map +1 -0
  139. package/dist/src/plugins/managedPluginRuntime.js +331 -0
  140. package/dist/src/plugins/managedPluginRuntime.js.map +1 -0
  141. package/dist/src/plugins/ocrPlugin.d.ts +46 -0
  142. package/dist/src/plugins/ocrPlugin.d.ts.map +1 -0
  143. package/dist/src/plugins/ocrPlugin.js +464 -0
  144. package/dist/src/plugins/ocrPlugin.js.map +1 -0
  145. package/dist/src/provider/client.d.ts +7 -1
  146. package/dist/src/provider/client.d.ts.map +1 -1
  147. package/dist/src/provider/client.js +61 -6
  148. package/dist/src/provider/client.js.map +1 -1
  149. package/dist/src/provider/openai-client.d.ts.map +1 -1
  150. package/dist/src/provider/openai-client.js +49 -3
  151. package/dist/src/provider/openai-client.js.map +1 -1
  152. package/dist/src/runtime/actoviqAgentExecutions.d.ts +85 -0
  153. package/dist/src/runtime/actoviqAgentExecutions.d.ts.map +1 -0
  154. package/dist/src/runtime/actoviqAgentExecutions.js +479 -0
  155. package/dist/src/runtime/actoviqAgentExecutions.js.map +1 -0
  156. package/dist/src/runtime/actoviqAgents.d.ts +15 -12
  157. package/dist/src/runtime/actoviqAgents.d.ts.map +1 -1
  158. package/dist/src/runtime/actoviqAgents.js +15 -0
  159. package/dist/src/runtime/actoviqAgents.js.map +1 -1
  160. package/dist/src/runtime/actoviqBackgroundTasks.d.ts +17 -2
  161. package/dist/src/runtime/actoviqBackgroundTasks.d.ts.map +1 -1
  162. package/dist/src/runtime/actoviqBackgroundTasks.js +291 -104
  163. package/dist/src/runtime/actoviqBackgroundTasks.js.map +1 -1
  164. package/dist/src/runtime/actoviqCompact.d.ts.map +1 -1
  165. package/dist/src/runtime/actoviqCompact.js +10 -75
  166. package/dist/src/runtime/actoviqCompact.js.map +1 -1
  167. package/dist/src/runtime/actoviqSkills.d.ts +14 -1
  168. package/dist/src/runtime/actoviqSkills.d.ts.map +1 -1
  169. package/dist/src/runtime/actoviqSkills.js +27 -2
  170. package/dist/src/runtime/actoviqSkills.js.map +1 -1
  171. package/dist/src/runtime/agentClient.d.ts +16 -2
  172. package/dist/src/runtime/agentClient.d.ts.map +1 -1
  173. package/dist/src/runtime/agentClient.js +745 -207
  174. package/dist/src/runtime/agentClient.js.map +1 -1
  175. package/dist/src/runtime/agentExecution.d.ts +196 -0
  176. package/dist/src/runtime/agentExecution.d.ts.map +1 -0
  177. package/dist/src/runtime/agentExecution.js +360 -0
  178. package/dist/src/runtime/agentExecution.js.map +1 -0
  179. package/dist/src/runtime/agentRuntimeDiscovery.d.ts +8 -2
  180. package/dist/src/runtime/agentRuntimeDiscovery.d.ts.map +1 -1
  181. package/dist/src/runtime/agentRuntimeDiscovery.js +30 -18
  182. package/dist/src/runtime/agentRuntimeDiscovery.js.map +1 -1
  183. package/dist/src/runtime/conversationEngine.d.ts +2 -1
  184. package/dist/src/runtime/conversationEngine.d.ts.map +1 -1
  185. package/dist/src/runtime/conversationEngine.js +66 -50
  186. package/dist/src/runtime/conversationEngine.js.map +1 -1
  187. package/dist/src/runtime/externalSkillCatalog.d.ts +107 -0
  188. package/dist/src/runtime/externalSkillCatalog.d.ts.map +1 -0
  189. package/dist/src/runtime/externalSkillCatalog.js +895 -0
  190. package/dist/src/runtime/externalSkillCatalog.js.map +1 -0
  191. package/dist/src/runtime/externalSkillPreferences.d.ts +25 -0
  192. package/dist/src/runtime/externalSkillPreferences.d.ts.map +1 -0
  193. package/dist/src/runtime/externalSkillPreferences.js +132 -0
  194. package/dist/src/runtime/externalSkillPreferences.js.map +1 -0
  195. package/dist/src/runtime/externalSkillRuntime.d.ts +31 -0
  196. package/dist/src/runtime/externalSkillRuntime.d.ts.map +1 -0
  197. package/dist/src/runtime/externalSkillRuntime.js +129 -0
  198. package/dist/src/runtime/externalSkillRuntime.js.map +1 -0
  199. package/dist/src/runtime/sessionTurnCoordinator.d.ts +2 -2
  200. package/dist/src/runtime/sessionTurnCoordinator.js +2 -2
  201. package/dist/src/storage/agentExecutionStore.d.ts +31 -0
  202. package/dist/src/storage/agentExecutionStore.d.ts.map +1 -0
  203. package/dist/src/storage/agentExecutionStore.js +413 -0
  204. package/dist/src/storage/agentExecutionStore.js.map +1 -0
  205. package/dist/src/storage/backgroundTaskStore.d.ts +5 -0
  206. package/dist/src/storage/backgroundTaskStore.d.ts.map +1 -1
  207. package/dist/src/storage/backgroundTaskStore.js +79 -3
  208. package/dist/src/storage/backgroundTaskStore.js.map +1 -1
  209. package/dist/src/storage/sessionStore.d.ts +8 -0
  210. package/dist/src/storage/sessionStore.d.ts.map +1 -1
  211. package/dist/src/storage/sessionStore.js +134 -18
  212. package/dist/src/storage/sessionStore.js.map +1 -1
  213. package/dist/src/team/teamGraphLayout.d.ts +53 -1
  214. package/dist/src/team/teamGraphLayout.d.ts.map +1 -1
  215. package/dist/src/team/teamGraphLayout.js +127 -1
  216. package/dist/src/team/teamGraphLayout.js.map +1 -1
  217. package/dist/src/team/teamGraphScaffold.d.ts.map +1 -1
  218. package/dist/src/team/teamGraphScaffold.js +31 -0
  219. package/dist/src/team/teamGraphScaffold.js.map +1 -1
  220. package/dist/src/team/teamGraphV3.d.ts +1 -0
  221. package/dist/src/team/teamGraphV3.d.ts.map +1 -1
  222. package/dist/src/team/teamGraphV3.js +24 -5
  223. package/dist/src/team/teamGraphV3.js.map +1 -1
  224. package/dist/src/team/teamPropose.d.ts +19 -0
  225. package/dist/src/team/teamPropose.d.ts.map +1 -0
  226. package/dist/src/team/teamPropose.js +126 -0
  227. package/dist/src/team/teamPropose.js.map +1 -0
  228. package/dist/src/tools/actoviqCoreTools.d.ts.map +1 -1
  229. package/dist/src/tools/actoviqCoreTools.js +3 -1
  230. package/dist/src/tools/actoviqCoreTools.js.map +1 -1
  231. package/dist/src/tools/exaSearch.d.ts +56 -0
  232. package/dist/src/tools/exaSearch.d.ts.map +1 -0
  233. package/dist/src/tools/exaSearch.js +170 -0
  234. package/dist/src/tools/exaSearch.js.map +1 -0
  235. package/dist/src/tools/tavilySearch.d.ts +34 -1
  236. package/dist/src/tools/tavilySearch.d.ts.map +1 -1
  237. package/dist/src/tools/tavilySearch.js +69 -54
  238. package/dist/src/tools/tavilySearch.js.map +1 -1
  239. package/dist/src/tools/todo/TodoWriteTool.d.ts +1 -1
  240. package/dist/src/tui/actoviqTui.d.ts +3 -1
  241. package/dist/src/tui/actoviqTui.d.ts.map +1 -1
  242. package/dist/src/tui/actoviqTui.js +1208 -92
  243. package/dist/src/tui/actoviqTui.js.map +1 -1
  244. package/dist/src/types.d.ts +223 -14
  245. package/dist/src/types.d.ts.map +1 -1
  246. package/dist/src/types.js.map +1 -1
  247. package/dist/src/ui/agentExecutionView.d.ts +111 -0
  248. package/dist/src/ui/agentExecutionView.d.ts.map +1 -0
  249. package/dist/src/ui/agentExecutionView.js +442 -0
  250. package/dist/src/ui/agentExecutionView.js.map +1 -0
  251. package/dist/src/ui/commandSurface.d.ts +2 -0
  252. package/dist/src/ui/commandSurface.d.ts.map +1 -1
  253. package/dist/src/ui/commandSurface.js +38 -3
  254. package/dist/src/ui/commandSurface.js.map +1 -1
  255. package/dist/src/workflow-v2/localIsolatedProcessExecutor.d.ts.map +1 -1
  256. package/dist/src/workflow-v2/localIsolatedProcessExecutor.js +6 -2
  257. package/dist/src/workflow-v2/localIsolatedProcessExecutor.js.map +1 -1
  258. package/package.json +35 -7
@@ -0,0 +1,623 @@
1
+ import { existsSync, mkdirSync, realpathSync } from 'node:fs';
2
+ import path from 'node:path';
3
+ const BROWSER_CLOSE_TIMEOUT_MS = 10_000;
4
+ const INTERACTIVE_SELECTOR = [
5
+ 'a[href]',
6
+ 'button',
7
+ 'input:not([type="hidden"])',
8
+ 'textarea',
9
+ 'select',
10
+ 'summary',
11
+ '[role="button"]',
12
+ '[role="link"]',
13
+ '[role="textbox"]',
14
+ '[role="checkbox"]',
15
+ '[role="radio"]',
16
+ '[role="menuitem"]',
17
+ '[role="tab"]',
18
+ '[contenteditable="true"]',
19
+ ].join(',');
20
+ /** Browser-side helpers as source strings so tsx/esbuild never inject __name into page.evaluate. */
21
+ const SNAPSHOT_ELEMENTS_SOURCE = `function snapshotElements(args) {
22
+ var selector = args.selector;
23
+ var max = args.max;
24
+ function isVisible(el) {
25
+ var style = window.getComputedStyle(el);
26
+ if (style.display === 'none' || style.visibility === 'hidden' || style.opacity === '0') return false;
27
+ var rect = el.getBoundingClientRect();
28
+ return rect.width > 0 && rect.height > 0;
29
+ }
30
+ var nodes = Array.prototype.slice.call(document.querySelectorAll(selector)).filter(isVisible);
31
+ var old = document.querySelectorAll('[data-actoviq-idx]');
32
+ for (var i = 0; i < old.length; i++) old[i].removeAttribute('data-actoviq-idx');
33
+ var limited = nodes.slice(0, max);
34
+ return limited.map(function (el, index) {
35
+ el.setAttribute('data-actoviq-idx', String(index));
36
+ var type = (el.getAttribute('type') || '').trim().toLowerCase();
37
+ var autocomplete = (el.getAttribute('autocomplete') || '').trim().toLowerCase();
38
+ var autocompleteTokens = autocomplete.split(/\\s+/).filter(Boolean);
39
+ var sensitive = type === 'password' || autocompleteTokens.some(function (token) {
40
+ return token === 'current-password' ||
41
+ token === 'new-password' ||
42
+ token === 'one-time-code' ||
43
+ token.indexOf('cc-') === 0;
44
+ });
45
+ var rawValue = el.value == null ? '' : String(el.value);
46
+ var name =
47
+ el.getAttribute('aria-label') ||
48
+ el.getAttribute('name') ||
49
+ el.getAttribute('placeholder') ||
50
+ ((el.innerText || el.textContent || '').trim().slice(0, 80)) ||
51
+ el.getAttribute('title') ||
52
+ '';
53
+ return {
54
+ index: index,
55
+ tag: el.tagName.toLowerCase(),
56
+ role: el.getAttribute('role') || el.tagName.toLowerCase(),
57
+ name: name,
58
+ type: type || undefined,
59
+ value: !sensitive && rawValue ? rawValue.slice(0, 120) : undefined,
60
+ hasValue: sensitive ? rawValue.length > 0 : undefined,
61
+ href: el.href || undefined,
62
+ };
63
+ });
64
+ }`;
65
+ const EXTRACT_TEXT_SOURCE = `function extractText() {
66
+ var root = document.body || document.documentElement;
67
+ return ((root && root.innerText) || '').replace(/\\n{3,}/g, '\\n\\n').trim().slice(0, 20000);
68
+ }`;
69
+ const EVAL_EXPR_SOURCE = `function evalExpression(expr) {
70
+ return eval(expr);
71
+ }`;
72
+ function isPathInside(root, target) {
73
+ const relative = path.relative(root, target);
74
+ return relative === ''
75
+ || (!path.isAbsolute(relative) && relative !== '..' && !relative.startsWith(`..${path.sep}`));
76
+ }
77
+ function nearestExistingPath(candidate) {
78
+ let current = candidate;
79
+ while (!existsSync(current)) {
80
+ const parent = path.dirname(current);
81
+ if (parent === current)
82
+ return current;
83
+ current = parent;
84
+ }
85
+ return current;
86
+ }
87
+ export function resolveBrowserScreenshotPath(workspaceDir, requestedPath) {
88
+ const workspaceRoot = realpathSync.native(path.resolve(workspaceDir));
89
+ const target = path.resolve(workspaceRoot, requestedPath);
90
+ if (target === workspaceRoot || !isPathInside(workspaceRoot, target)) {
91
+ throw new Error(`Browser screenshot path must stay inside the workspace: ${requestedPath}`);
92
+ }
93
+ const canonicalAncestor = realpathSync.native(nearestExistingPath(target));
94
+ if (!isPathInside(workspaceRoot, canonicalAncestor)) {
95
+ throw new Error(`Browser screenshot path resolves outside the workspace: ${requestedPath}`);
96
+ }
97
+ if (existsSync(target)) {
98
+ const canonicalTarget = realpathSync.native(target);
99
+ if (!isPathInside(workspaceRoot, canonicalTarget)) {
100
+ throw new Error(`Browser screenshot path resolves outside the workspace: ${requestedPath}`);
101
+ }
102
+ }
103
+ return target;
104
+ }
105
+ function pageFunction(source, name) {
106
+ // Construct in Node so the browser receives a plain function without __name helpers.
107
+ // eslint-disable-next-line no-new-func
108
+ return new Function(`${source}; return ${name};`)();
109
+ }
110
+ export class ActoviqBrowserSession {
111
+ options;
112
+ playwright = null;
113
+ browser = null;
114
+ context = null;
115
+ tabs = [];
116
+ activeTabId = null;
117
+ nextTabSeq = 1;
118
+ launched = false;
119
+ ownership = null;
120
+ closeInFlight = null;
121
+ guardedPages = new Map();
122
+ navigationViolations = new Map();
123
+ constructor(options = {}) {
124
+ this.options = {
125
+ headless: options.headless ?? true,
126
+ defaultTimeoutMs: options.defaultTimeoutMs ?? 30_000,
127
+ ...options,
128
+ };
129
+ }
130
+ async ensureReady() {
131
+ if (this.launched && this.context)
132
+ return;
133
+ // A previous attempt may have left half-initialized browser handles.
134
+ if (this.browser || this.context || this.ownership) {
135
+ await this.closeOwnedResources().catch(() => undefined);
136
+ }
137
+ try {
138
+ this.playwright = await loadPlaywright();
139
+ const timeout = this.options.defaultTimeoutMs;
140
+ if (this.options.cdpUrl?.trim()) {
141
+ this.browser = await this.playwright.chromium.connectOverCDP(this.options.cdpUrl.trim());
142
+ this.ownership = 'cdp';
143
+ const contexts = this.browser.contexts();
144
+ this.context = contexts[0] ?? (await this.browser.newContext({
145
+ viewport: this.options.viewport ?? { width: 1280, height: 800 },
146
+ }));
147
+ }
148
+ else if (this.options.userDataDir?.trim()) {
149
+ const userDataDir = path.resolve(this.options.userDataDir.trim());
150
+ mkdirSync(userDataDir, { recursive: true });
151
+ const launcher = channelLauncher(this.playwright, this.options.channel);
152
+ this.context = await launcher.launchPersistentContext(userDataDir, {
153
+ headless: this.options.headless,
154
+ viewport: this.options.viewport ?? { width: 1280, height: 800 },
155
+ channel: this.options.channel === 'chromium' ? undefined : this.options.channel,
156
+ });
157
+ this.browser = this.context.browser();
158
+ this.ownership = 'persistent';
159
+ }
160
+ else {
161
+ const launcher = channelLauncher(this.playwright, this.options.channel);
162
+ this.browser = await launcher.launch({
163
+ headless: this.options.headless,
164
+ channel: this.options.channel === 'chromium' ? undefined : this.options.channel,
165
+ });
166
+ this.context = await this.browser.newContext({
167
+ viewport: this.options.viewport ?? { width: 1280, height: 800 },
168
+ });
169
+ this.ownership = 'isolated';
170
+ }
171
+ this.context.setDefaultTimeout(timeout);
172
+ this.context.on('page', (page) => {
173
+ this.trackPage(page);
174
+ });
175
+ for (const page of this.context.pages()) {
176
+ this.trackPage(page);
177
+ }
178
+ if (this.tabs.length === 0) {
179
+ const page = await this.context.newPage();
180
+ this.trackPage(page);
181
+ }
182
+ if (!this.activeTabId) {
183
+ this.activeTabId = this.tabs[0]?.id ?? null;
184
+ }
185
+ this.launched = true;
186
+ }
187
+ catch (error) {
188
+ await this.closeOwnedResources().catch(() => undefined);
189
+ throw error;
190
+ }
191
+ }
192
+ async navigate(url, opts = {}) {
193
+ this.assertNavigableUrl(url);
194
+ await this.ensureReady();
195
+ const tab = opts.newTab ? await this.openTab() : this.requireActiveTab();
196
+ await this.runWithNavigationGuard(tab.page, () => tab.page.goto(url, { waitUntil: 'domcontentloaded' }), { checkBefore: false });
197
+ this.activeTabId = tab.id;
198
+ return {
199
+ tabId: tab.id,
200
+ url: tab.page.url(),
201
+ title: await tab.page.title(),
202
+ };
203
+ }
204
+ async goBack() {
205
+ await this.ensureReady();
206
+ const tab = this.requireActiveTab();
207
+ await this.runWithNavigationGuard(tab.page, () => tab.page.goBack({ waitUntil: 'domcontentloaded' }).catch(() => undefined));
208
+ return { url: tab.page.url(), title: await tab.page.title() };
209
+ }
210
+ async wait(ms) {
211
+ await this.ensureReady();
212
+ const page = this.requireActiveTab().page;
213
+ await this.runWithNavigationGuard(page, () => page.waitForTimeout(Math.min(Math.max(ms, 0), 60_000)));
214
+ }
215
+ async snapshot(opts = {}) {
216
+ await this.ensureReady();
217
+ const tab = this.requireActiveTab();
218
+ const maxElements = opts.maxElements ?? 120;
219
+ const elements = await this.runWithNavigationGuard(tab.page, () => tab.page.evaluate(pageFunction(SNAPSHOT_ELEMENTS_SOURCE, 'snapshotElements'), { selector: INTERACTIVE_SELECTOR, max: maxElements }));
220
+ return {
221
+ url: tab.page.url(),
222
+ title: await tab.page.title(),
223
+ tabs: await this.tabsDetailed(),
224
+ elements: elements,
225
+ truncated: elements.length >= maxElements,
226
+ };
227
+ }
228
+ async click(target) {
229
+ await this.ensureReady();
230
+ const tab = this.requireActiveTab();
231
+ if (typeof target.index === 'number') {
232
+ await this.ensureIndexed(tab.page);
233
+ await this.runWithNavigationGuard(tab.page, () => tab.page.click(`[data-actoviq-idx="${target.index}"]`));
234
+ return { ok: true };
235
+ }
236
+ if (typeof target.x === 'number' && typeof target.y === 'number') {
237
+ await this.runWithNavigationGuard(tab.page, () => tab.page.mouse.click(target.x, target.y));
238
+ return { ok: true };
239
+ }
240
+ throw new Error('browser_click requires index or x/y coordinates.');
241
+ }
242
+ async type(input) {
243
+ await this.ensureReady();
244
+ const tab = this.requireActiveTab();
245
+ await this.ensureIndexed(tab.page);
246
+ const locator = tab.page.locator(`[data-actoviq-idx="${input.index}"]`);
247
+ await this.runWithNavigationGuard(tab.page, async () => {
248
+ if (input.clear !== false) {
249
+ await locator.fill(input.text);
250
+ }
251
+ else {
252
+ await locator.click();
253
+ await tab.page.keyboard.type(input.text);
254
+ }
255
+ if (input.submit) {
256
+ await tab.page.keyboard.press('Enter');
257
+ }
258
+ });
259
+ return { ok: true };
260
+ }
261
+ async press(keys) {
262
+ await this.ensureReady();
263
+ const page = this.requireActiveTab().page;
264
+ await this.runWithNavigationGuard(page, () => page.keyboard.press(keys));
265
+ return { ok: true };
266
+ }
267
+ async scroll(input) {
268
+ await this.ensureReady();
269
+ const tab = this.requireActiveTab();
270
+ const pages = Math.min(Math.max(input.pages ?? 1, 1), 10);
271
+ if (typeof input.index === 'number') {
272
+ await this.ensureIndexed(tab.page);
273
+ await this.runWithNavigationGuard(tab.page, () => tab.page.locator(`[data-actoviq-idx="${input.index}"]`).scrollIntoViewIfNeeded());
274
+ return { ok: true };
275
+ }
276
+ const delta = (input.direction === 'down' ? 1 : -1) * pages * 800;
277
+ await this.runWithNavigationGuard(tab.page, () => tab.page.mouse.wheel(0, delta));
278
+ return { ok: true };
279
+ }
280
+ async screenshot(opts = {}) {
281
+ await this.ensureReady();
282
+ const tab = this.requireActiveTab();
283
+ if (opts.path?.trim()) {
284
+ const out = resolveBrowserScreenshotPath(this.options.workspaceDir ?? process.cwd(), opts.path.trim());
285
+ mkdirSync(path.dirname(out), { recursive: true });
286
+ await this.runWithNavigationGuard(tab.page, () => tab.page.screenshot({ path: out, fullPage: opts.fullPage === true }));
287
+ return { path: out };
288
+ }
289
+ const buffer = await this.runWithNavigationGuard(tab.page, () => tab.page.screenshot({ fullPage: opts.fullPage === true, type: 'png' }));
290
+ return { base64: buffer.toString('base64') };
291
+ }
292
+ listTabs() {
293
+ return this.tabs.map((tab) => {
294
+ const currentUrl = tab.page.url();
295
+ let safeUrl = 'about:blank';
296
+ try {
297
+ this.assertManagedPageUrl(currentUrl);
298
+ safeUrl = currentUrl;
299
+ }
300
+ catch {
301
+ // Avoid exposing a local/disallowed URL through the synchronous helper.
302
+ }
303
+ return {
304
+ id: tab.id,
305
+ url: safeUrl,
306
+ title: '',
307
+ active: tab.id === this.activeTabId,
308
+ };
309
+ });
310
+ }
311
+ async tabsDetailed() {
312
+ await this.ensureReady();
313
+ const out = [];
314
+ for (const tab of this.tabs) {
315
+ await this.enforceAllowedPage(tab.page);
316
+ out.push({
317
+ id: tab.id,
318
+ url: tab.page.url(),
319
+ title: await tab.page.title().catch(() => ''),
320
+ active: tab.id === this.activeTabId,
321
+ });
322
+ }
323
+ return out;
324
+ }
325
+ async switchTab(tabId) {
326
+ await this.ensureReady();
327
+ const tab = this.tabs.find((item) => item.id === tabId);
328
+ if (!tab)
329
+ throw new Error(`Unknown tab id: ${tabId}`);
330
+ await this.enforceAllowedPage(tab.page);
331
+ this.activeTabId = tab.id;
332
+ await tab.page.bringToFront().catch(() => undefined);
333
+ return { ok: true, tabId };
334
+ }
335
+ async closeTab(tabId) {
336
+ await this.ensureReady();
337
+ const id = tabId ?? this.activeTabId;
338
+ if (!id)
339
+ throw new Error('No active browser tab to close.');
340
+ const idx = this.tabs.findIndex((item) => item.id === id);
341
+ if (idx < 0)
342
+ throw new Error(`Unknown tab id: ${id}`);
343
+ const removed = this.tabs[idx];
344
+ this.tabs.splice(idx, 1);
345
+ await removed.page.close({ runBeforeUnload: false }).catch(() => undefined);
346
+ if (this.activeTabId === id) {
347
+ this.activeTabId = this.tabs[Math.max(0, idx - 1)]?.id ?? null;
348
+ }
349
+ if (this.tabs.length === 0 && this.context) {
350
+ const page = await this.context.newPage();
351
+ this.trackPage(page);
352
+ this.activeTabId = this.tabs[0]?.id ?? null;
353
+ }
354
+ return { ok: true, closed: id };
355
+ }
356
+ async extract() {
357
+ await this.ensureReady();
358
+ const tab = this.requireActiveTab();
359
+ const text = await this.runWithNavigationGuard(tab.page, () => tab.page.evaluate(pageFunction(EXTRACT_TEXT_SOURCE, 'extractText')));
360
+ return {
361
+ url: tab.page.url(),
362
+ title: await tab.page.title(),
363
+ text,
364
+ };
365
+ }
366
+ async evaluate(expression) {
367
+ await this.ensureReady();
368
+ const tab = this.requireActiveTab();
369
+ const result = await this.runWithNavigationGuard(tab.page, () => tab.page.evaluate(pageFunction(EVAL_EXPR_SOURCE, 'evalExpression'), expression));
370
+ return { result };
371
+ }
372
+ close() {
373
+ if (this.closeInFlight)
374
+ return this.closeInFlight;
375
+ this.closeInFlight = this.closeOwnedResources().finally(() => {
376
+ this.closeInFlight = null;
377
+ });
378
+ return this.closeInFlight;
379
+ }
380
+ async closeOwnedResources() {
381
+ const context = this.context;
382
+ const browser = this.browser;
383
+ const ownership = this.ownership;
384
+ const failures = [];
385
+ try {
386
+ // A CDP context belongs to the user's already-running browser. Never close it.
387
+ if (context && ownership !== 'cdp') {
388
+ await withTimeout(context.close(), BROWSER_CLOSE_TIMEOUT_MS, 'Timed out while closing the Playwright browser context.').catch((error) => {
389
+ failures.push(toError(error));
390
+ });
391
+ }
392
+ // For a CDP connection Browser.close() disconnects this Playwright client.
393
+ if (browser?.isConnected()) {
394
+ await withTimeout(browser.close(), BROWSER_CLOSE_TIMEOUT_MS, 'Timed out while disconnecting the Playwright browser.').catch((error) => {
395
+ failures.push(toError(error));
396
+ });
397
+ }
398
+ }
399
+ finally {
400
+ // Always clear session bookkeeping, even when Playwright close/disconnect
401
+ // fails. Leaving launched/context set after a partial teardown lets later
402
+ // ensureReady() short-circuit onto a dead browser.
403
+ this.tabs = [];
404
+ this.activeTabId = null;
405
+ this.context = null;
406
+ this.browser = null;
407
+ this.ownership = null;
408
+ this.launched = false;
409
+ this.guardedPages.clear();
410
+ this.navigationViolations.clear();
411
+ }
412
+ if (failures.length > 0) {
413
+ throw new Error(`Failed to close the browser session: ${failures.map((error) => error.message).join('; ')}`, { cause: failures[0] });
414
+ }
415
+ }
416
+ async openTab() {
417
+ await this.ensureReady();
418
+ const page = await this.context.newPage();
419
+ return this.trackPage(page);
420
+ }
421
+ trackPage(page) {
422
+ const existing = this.tabs.find((tab) => tab.page === page);
423
+ if (existing)
424
+ return existing;
425
+ const id = `t${this.nextTabSeq++}`;
426
+ const tab = { id, page };
427
+ this.tabs.push(tab);
428
+ page.on('close', () => {
429
+ this.tabs = this.tabs.filter((item) => item.id !== id);
430
+ this.guardedPages.delete(page);
431
+ this.navigationViolations.delete(page);
432
+ if (this.activeTabId === id) {
433
+ this.activeTabId = this.tabs[0]?.id ?? null;
434
+ }
435
+ });
436
+ page.on('framenavigated', (frame) => {
437
+ this.onTrackedFrameNavigated(page, frame);
438
+ });
439
+ if (!this.activeTabId)
440
+ this.activeTabId = id;
441
+ return tab;
442
+ }
443
+ requireActiveTab() {
444
+ const tab = this.tabs.find((item) => item.id === this.activeTabId) ?? this.tabs[0];
445
+ if (!tab)
446
+ throw new Error('No browser tab is open. Call browser_navigate first.');
447
+ this.activeTabId = tab.id;
448
+ return tab;
449
+ }
450
+ async ensureIndexed(page) {
451
+ await this.enforceAllowedPage(page);
452
+ const count = await page.locator('[data-actoviq-idx]').count();
453
+ if (count === 0) {
454
+ await this.snapshot();
455
+ }
456
+ }
457
+ assertNavigableUrl(url) {
458
+ let parsed;
459
+ try {
460
+ parsed = new URL(url);
461
+ }
462
+ catch {
463
+ throw new Error(`Invalid URL: ${url}`);
464
+ }
465
+ if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {
466
+ throw new Error(`Navigation blocked: protocol ${parsed.protocol || '(none)'} is not allowed. Only http: and https: URLs are supported.`);
467
+ }
468
+ const allowed = this.options.allowedDomains?.filter(Boolean) ?? [];
469
+ if (allowed.length === 0)
470
+ return;
471
+ const hostname = parsed.hostname.toLowerCase();
472
+ const ok = allowed.some((rule) => {
473
+ const trimmed = rule.trim().toLowerCase();
474
+ let normalized = '';
475
+ try {
476
+ normalized = new URL(/^[a-z][a-z\d+.-]*:\/\//i.test(trimmed) ? trimmed : `http://${trimmed}`).hostname.toLowerCase();
477
+ }
478
+ catch {
479
+ return false;
480
+ }
481
+ if (!normalized)
482
+ return false;
483
+ return hostname === normalized || hostname.endsWith(`.${normalized}`);
484
+ });
485
+ if (!ok) {
486
+ throw new Error(`Navigation blocked: ${hostname} is not in allowedDomains (${allowed.join(', ')}).`);
487
+ }
488
+ }
489
+ assertManagedPageUrl(url) {
490
+ if (url === 'about:blank')
491
+ return;
492
+ this.assertNavigableUrl(url);
493
+ }
494
+ onTrackedFrameNavigated(page, frame) {
495
+ if ((this.guardedPages.get(page) ?? 0) <= 0)
496
+ return;
497
+ if (frame !== page.mainFrame())
498
+ return;
499
+ try {
500
+ this.assertManagedPageUrl(frame.url());
501
+ }
502
+ catch (error) {
503
+ this.scheduleNavigationRecovery(page, toError(error));
504
+ }
505
+ }
506
+ scheduleNavigationRecovery(page, error) {
507
+ const existing = this.navigationViolations.get(page);
508
+ if (existing)
509
+ return existing;
510
+ const violation = {
511
+ error,
512
+ recovery: Promise.resolve().then(async () => {
513
+ if (page.isClosed() || page.url() === 'about:blank')
514
+ return;
515
+ await page.goto('about:blank', {
516
+ waitUntil: 'commit',
517
+ timeout: Math.min(this.options.defaultTimeoutMs, 5_000),
518
+ }).catch(() => undefined);
519
+ }),
520
+ };
521
+ this.navigationViolations.set(page, violation);
522
+ return violation;
523
+ }
524
+ async enforceAllowedPage(page) {
525
+ if (page.isClosed())
526
+ return;
527
+ const pending = this.navigationViolations.get(page);
528
+ if (pending) {
529
+ await pending.recovery;
530
+ this.navigationViolations.delete(page);
531
+ throw pending.error;
532
+ }
533
+ try {
534
+ this.assertManagedPageUrl(page.url());
535
+ }
536
+ catch (error) {
537
+ const violation = this.scheduleNavigationRecovery(page, toError(error));
538
+ await violation.recovery;
539
+ this.navigationViolations.delete(page);
540
+ throw violation.error;
541
+ }
542
+ }
543
+ armNavigationGuard(page) {
544
+ this.guardedPages.set(page, (this.guardedPages.get(page) ?? 0) + 1);
545
+ }
546
+ disarmNavigationGuard(page) {
547
+ const count = this.guardedPages.get(page) ?? 0;
548
+ if (count <= 1) {
549
+ this.guardedPages.delete(page);
550
+ }
551
+ else {
552
+ this.guardedPages.set(page, count - 1);
553
+ }
554
+ }
555
+ async runWithNavigationGuard(page, operation, options = {}) {
556
+ if (options.checkBefore !== false) {
557
+ await this.enforceAllowedPage(page);
558
+ }
559
+ const pagesBefore = new Set(this.tabs.map((tab) => tab.page));
560
+ this.armNavigationGuard(page);
561
+ let result;
562
+ let operationError;
563
+ try {
564
+ result = await operation();
565
+ }
566
+ catch (error) {
567
+ operationError = error;
568
+ }
569
+ let guardError;
570
+ try {
571
+ await this.enforceAllowedPage(page);
572
+ for (const tab of this.tabs) {
573
+ if (!pagesBefore.has(tab.page)) {
574
+ await this.enforceAllowedPage(tab.page);
575
+ }
576
+ }
577
+ }
578
+ catch (error) {
579
+ guardError = error;
580
+ }
581
+ finally {
582
+ this.disarmNavigationGuard(page);
583
+ }
584
+ if (guardError)
585
+ throw guardError;
586
+ if (operationError)
587
+ throw operationError;
588
+ return result;
589
+ }
590
+ }
591
+ function toError(error) {
592
+ return error instanceof Error ? error : new Error(String(error));
593
+ }
594
+ async function withTimeout(promise, timeoutMs, message) {
595
+ let timer;
596
+ try {
597
+ return await Promise.race([
598
+ promise,
599
+ new Promise((_resolve, reject) => {
600
+ timer = setTimeout(() => reject(new Error(message)), timeoutMs);
601
+ timer.unref?.();
602
+ }),
603
+ ]);
604
+ }
605
+ finally {
606
+ if (timer)
607
+ clearTimeout(timer);
608
+ }
609
+ }
610
+ async function loadPlaywright() {
611
+ try {
612
+ return await import('playwright');
613
+ }
614
+ catch (error) {
615
+ throw new Error('Playwright is required for browser-use tools. Install it with `npm i playwright` and run `npx playwright install chromium`.', { cause: error });
616
+ }
617
+ }
618
+ function channelLauncher(pw, channel) {
619
+ if (channel === 'chrome' || channel === 'msedge')
620
+ return pw.chromium;
621
+ return pw.chromium;
622
+ }
623
+ //# sourceMappingURL=actoviqBrowserSession.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actoviqBrowserSession.js","sourceRoot":"","sources":["../../../src/browser/actoviqBrowserSession.ts"],"names":[],"mappings":"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"}