@monoes/monobrowse 1.0.1 → 1.0.3

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 (277) hide show
  1. package/dist/src/__tests__/output.test.d.ts +2 -0
  2. package/dist/src/__tests__/output.test.d.ts.map +1 -0
  3. package/dist/src/__tests__/output.test.js +54 -0
  4. package/dist/src/__tests__/output.test.js.map +1 -0
  5. package/dist/src/__tests__/ref-cache.test.d.ts +2 -0
  6. package/dist/src/__tests__/ref-cache.test.d.ts.map +1 -0
  7. package/dist/src/__tests__/ref-cache.test.js +109 -0
  8. package/dist/src/__tests__/ref-cache.test.js.map +1 -0
  9. package/dist/src/browser/action-builder/analyzer.d.ts +0 -1
  10. package/dist/src/browser/action-builder/analyzer.d.ts.map +1 -1
  11. package/dist/src/browser/action-builder/analyzer.js +43 -21
  12. package/dist/src/browser/action-builder/analyzer.js.map +1 -1
  13. package/dist/src/browser/action-builder/types.d.ts +0 -0
  14. package/dist/src/browser/action-builder/types.d.ts.map +0 -0
  15. package/dist/src/browser/action-builder/types.js +0 -0
  16. package/dist/src/browser/action-builder/types.js.map +0 -0
  17. package/dist/src/browser/actions.d.ts +0 -0
  18. package/dist/src/browser/actions.d.ts.map +0 -0
  19. package/dist/src/browser/actions.js +0 -0
  20. package/dist/src/browser/actions.js.map +0 -0
  21. package/dist/src/browser/adapters/gemini.d.ts +0 -0
  22. package/dist/src/browser/adapters/gemini.d.ts.map +0 -0
  23. package/dist/src/browser/adapters/gemini.js +0 -0
  24. package/dist/src/browser/adapters/gemini.js.map +0 -0
  25. package/dist/src/browser/adapters/google.d.ts +0 -0
  26. package/dist/src/browser/adapters/google.d.ts.map +0 -0
  27. package/dist/src/browser/adapters/google.js +0 -0
  28. package/dist/src/browser/adapters/google.js.map +0 -0
  29. package/dist/src/browser/adapters/index.d.ts +0 -0
  30. package/dist/src/browser/adapters/index.d.ts.map +0 -0
  31. package/dist/src/browser/adapters/index.js +0 -0
  32. package/dist/src/browser/adapters/index.js.map +0 -0
  33. package/dist/src/browser/adapters/instagram.d.ts +0 -0
  34. package/dist/src/browser/adapters/instagram.d.ts.map +0 -0
  35. package/dist/src/browser/adapters/instagram.js +0 -0
  36. package/dist/src/browser/adapters/instagram.js.map +0 -0
  37. package/dist/src/browser/adapters/linkedin.d.ts +0 -0
  38. package/dist/src/browser/adapters/linkedin.d.ts.map +0 -0
  39. package/dist/src/browser/adapters/linkedin.js +0 -0
  40. package/dist/src/browser/adapters/linkedin.js.map +0 -0
  41. package/dist/src/browser/adapters/microsoft.d.ts +0 -0
  42. package/dist/src/browser/adapters/microsoft.d.ts.map +0 -0
  43. package/dist/src/browser/adapters/microsoft.js +0 -0
  44. package/dist/src/browser/adapters/microsoft.js.map +0 -0
  45. package/dist/src/browser/adapters/x.d.ts +0 -0
  46. package/dist/src/browser/adapters/x.d.ts.map +0 -0
  47. package/dist/src/browser/adapters/x.js +0 -0
  48. package/dist/src/browser/adapters/x.js.map +0 -0
  49. package/dist/src/browser/batch.d.ts +0 -0
  50. package/dist/src/browser/batch.d.ts.map +0 -0
  51. package/dist/src/browser/batch.js +0 -0
  52. package/dist/src/browser/batch.js.map +0 -0
  53. package/dist/src/browser/browser.d.ts +0 -0
  54. package/dist/src/browser/browser.d.ts.map +0 -0
  55. package/dist/src/browser/browser.js +0 -0
  56. package/dist/src/browser/browser.js.map +0 -0
  57. package/dist/src/browser/cdp.d.ts +0 -0
  58. package/dist/src/browser/cdp.d.ts.map +0 -0
  59. package/dist/src/browser/cdp.js +0 -0
  60. package/dist/src/browser/cdp.js.map +0 -0
  61. package/dist/src/browser/console-log.d.ts +0 -0
  62. package/dist/src/browser/console-log.d.ts.map +0 -0
  63. package/dist/src/browser/console-log.js +0 -0
  64. package/dist/src/browser/console-log.js.map +0 -0
  65. package/dist/src/browser/dashboard/api-types.d.ts +0 -0
  66. package/dist/src/browser/dashboard/api-types.d.ts.map +0 -0
  67. package/dist/src/browser/dashboard/api-types.js +0 -0
  68. package/dist/src/browser/dashboard/api-types.js.map +0 -0
  69. package/dist/src/browser/dashboard/server.d.ts +12 -1
  70. package/dist/src/browser/dashboard/server.d.ts.map +1 -1
  71. package/dist/src/browser/dashboard/server.js +4 -198
  72. package/dist/src/browser/dashboard/server.js.map +1 -1
  73. package/dist/src/browser/dashboard/ui.html +0 -0
  74. package/dist/src/browser/dialog.d.ts +0 -0
  75. package/dist/src/browser/dialog.d.ts.map +0 -0
  76. package/dist/src/browser/dialog.js +0 -0
  77. package/dist/src/browser/dialog.js.map +0 -0
  78. package/dist/src/browser/emulation.d.ts +0 -0
  79. package/dist/src/browser/emulation.d.ts.map +0 -0
  80. package/dist/src/browser/emulation.js +0 -0
  81. package/dist/src/browser/emulation.js.map +0 -0
  82. package/dist/src/browser/find.d.ts +0 -0
  83. package/dist/src/browser/find.d.ts.map +0 -0
  84. package/dist/src/browser/find.js +0 -0
  85. package/dist/src/browser/find.js.map +0 -0
  86. package/dist/src/browser/har.d.ts +0 -0
  87. package/dist/src/browser/har.d.ts.map +0 -0
  88. package/dist/src/browser/har.js +0 -0
  89. package/dist/src/browser/har.js.map +0 -0
  90. package/dist/src/browser/index.d.ts +1 -0
  91. package/dist/src/browser/index.d.ts.map +1 -1
  92. package/dist/src/browser/index.js +1 -0
  93. package/dist/src/browser/index.js.map +1 -1
  94. package/dist/src/browser/network.d.ts +0 -0
  95. package/dist/src/browser/network.d.ts.map +0 -0
  96. package/dist/src/browser/network.js +0 -0
  97. package/dist/src/browser/network.js.map +0 -0
  98. package/dist/src/browser/pdf.d.ts +0 -0
  99. package/dist/src/browser/pdf.d.ts.map +0 -0
  100. package/dist/src/browser/pdf.js +0 -0
  101. package/dist/src/browser/pdf.js.map +0 -0
  102. package/dist/src/browser/profiler.d.ts +0 -0
  103. package/dist/src/browser/profiler.d.ts.map +0 -0
  104. package/dist/src/browser/profiler.js +0 -0
  105. package/dist/src/browser/profiler.js.map +0 -0
  106. package/dist/src/browser/record.d.ts +0 -0
  107. package/dist/src/browser/record.d.ts.map +0 -0
  108. package/dist/src/browser/record.js +0 -0
  109. package/dist/src/browser/record.js.map +0 -0
  110. package/dist/src/browser/ref-cache.d.ts +21 -0
  111. package/dist/src/browser/ref-cache.d.ts.map +1 -0
  112. package/dist/src/browser/ref-cache.js +70 -0
  113. package/dist/src/browser/ref-cache.js.map +1 -0
  114. package/dist/src/browser/screenshot.d.ts +0 -0
  115. package/dist/src/browser/screenshot.d.ts.map +0 -0
  116. package/dist/src/browser/screenshot.js +0 -0
  117. package/dist/src/browser/screenshot.js.map +0 -0
  118. package/dist/src/browser/session.d.ts +0 -0
  119. package/dist/src/browser/session.d.ts.map +0 -0
  120. package/dist/src/browser/session.js +0 -0
  121. package/dist/src/browser/session.js.map +0 -0
  122. package/dist/src/browser/snapshot.d.ts +0 -0
  123. package/dist/src/browser/snapshot.d.ts.map +0 -0
  124. package/dist/src/browser/snapshot.js +0 -0
  125. package/dist/src/browser/snapshot.js.map +0 -0
  126. package/dist/src/browser/storage.d.ts +0 -0
  127. package/dist/src/browser/storage.d.ts.map +0 -0
  128. package/dist/src/browser/storage.js +0 -0
  129. package/dist/src/browser/storage.js.map +0 -0
  130. package/dist/src/browser/tabs.d.ts +1 -1
  131. package/dist/src/browser/tabs.d.ts.map +1 -1
  132. package/dist/src/browser/tabs.js +20 -4
  133. package/dist/src/browser/tabs.js.map +1 -1
  134. package/dist/src/browser/trace.d.ts +0 -0
  135. package/dist/src/browser/trace.d.ts.map +0 -0
  136. package/dist/src/browser/trace.js +0 -0
  137. package/dist/src/browser/trace.js.map +0 -0
  138. package/dist/src/browser/types.d.ts +0 -0
  139. package/dist/src/browser/types.d.ts.map +0 -0
  140. package/dist/src/browser/types.js +0 -0
  141. package/dist/src/browser/types.js.map +0 -0
  142. package/dist/src/browser/vitals.d.ts +0 -0
  143. package/dist/src/browser/vitals.d.ts.map +0 -0
  144. package/dist/src/browser/vitals.js +0 -0
  145. package/dist/src/browser/vitals.js.map +0 -0
  146. package/dist/src/browser/wait.d.ts +0 -0
  147. package/dist/src/browser/wait.d.ts.map +0 -0
  148. package/dist/src/browser/wait.js +0 -0
  149. package/dist/src/browser/wait.js.map +0 -0
  150. package/dist/src/cli/action.d.ts +0 -0
  151. package/dist/src/cli/action.d.ts.map +1 -1
  152. package/dist/src/cli/action.js +92 -4
  153. package/dist/src/cli/action.js.map +1 -1
  154. package/dist/src/cli/commands.d.ts +0 -0
  155. package/dist/src/cli/commands.d.ts.map +1 -1
  156. package/dist/src/cli/commands.js +32 -6
  157. package/dist/src/cli/commands.js.map +1 -1
  158. package/dist/src/cli/output.d.ts +0 -0
  159. package/dist/src/cli/output.d.ts.map +0 -0
  160. package/dist/src/cli/output.js +0 -0
  161. package/dist/src/cli/output.js.map +0 -0
  162. package/dist/src/cli/platform.d.ts +0 -0
  163. package/dist/src/cli/platform.d.ts.map +0 -0
  164. package/dist/src/cli/platform.js +0 -0
  165. package/dist/src/cli/platform.js.map +0 -0
  166. package/dist/src/cli/types.d.ts +0 -0
  167. package/dist/src/cli/types.d.ts.map +0 -0
  168. package/dist/src/cli/types.js +0 -0
  169. package/dist/src/cli/types.js.map +0 -0
  170. package/dist/src/cli.d.ts +0 -0
  171. package/dist/src/cli.d.ts.map +0 -0
  172. package/dist/src/cli.js.map +0 -0
  173. package/dist/src/index.d.ts +0 -5
  174. package/dist/src/index.d.ts.map +1 -1
  175. package/dist/src/index.js +0 -16
  176. package/dist/src/index.js.map +1 -1
  177. package/dist/tsconfig.tsbuildinfo +1 -1
  178. package/package.json +6 -15
  179. package/src/__tests__/output.test.ts +62 -0
  180. package/src/__tests__/ref-cache.test.ts +134 -0
  181. package/src/browser/action-builder/analyzer.ts +41 -23
  182. package/src/browser/action-builder/types.ts +0 -0
  183. package/src/browser/actions.ts +0 -0
  184. package/src/browser/adapters/gemini.ts +0 -0
  185. package/src/browser/adapters/google.ts +0 -0
  186. package/src/browser/adapters/index.ts +0 -0
  187. package/src/browser/adapters/instagram.ts +0 -0
  188. package/src/browser/adapters/linkedin.ts +0 -0
  189. package/src/browser/adapters/microsoft.ts +0 -0
  190. package/src/browser/adapters/x.ts +0 -0
  191. package/src/browser/batch.ts +0 -0
  192. package/src/browser/browser.ts +0 -0
  193. package/src/browser/cdp.ts +0 -0
  194. package/src/browser/console-log.ts +0 -0
  195. package/src/browser/dashboard/api-types.ts +0 -0
  196. package/src/browser/dashboard/server.ts +16 -198
  197. package/src/browser/dashboard/ui.html +0 -0
  198. package/src/browser/dialog.ts +0 -0
  199. package/src/browser/emulation.ts +0 -0
  200. package/src/browser/find.ts +0 -0
  201. package/src/browser/har.ts +0 -0
  202. package/src/browser/index.ts +1 -0
  203. package/src/browser/network.ts +0 -0
  204. package/src/browser/pdf.ts +0 -0
  205. package/src/browser/profiler.ts +0 -0
  206. package/src/browser/record.ts +0 -0
  207. package/src/browser/ref-cache.ts +90 -0
  208. package/src/browser/screenshot.ts +0 -0
  209. package/src/browser/session.ts +0 -0
  210. package/src/browser/snapshot.ts +0 -0
  211. package/src/browser/storage.ts +0 -0
  212. package/src/browser/tabs.ts +36 -7
  213. package/src/browser/trace.ts +0 -0
  214. package/src/browser/types.ts +0 -0
  215. package/src/browser/vitals.ts +0 -0
  216. package/src/browser/wait.ts +0 -0
  217. package/src/cli/action.ts +91 -5
  218. package/src/cli/commands.ts +35 -6
  219. package/src/cli/output.ts +0 -0
  220. package/src/cli/platform.ts +0 -0
  221. package/src/cli/types.ts +0 -0
  222. package/src/cli.ts +0 -0
  223. package/src/index.ts +0 -20
  224. package/dist/package.json +0 -75
  225. package/dist/src/browser/playbook/browser-handlers.d.ts +0 -3
  226. package/dist/src/browser/playbook/browser-handlers.d.ts.map +0 -1
  227. package/dist/src/browser/playbook/browser-handlers.js +0 -377
  228. package/dist/src/browser/playbook/browser-handlers.js.map +0 -1
  229. package/dist/src/browser/playbook/builtin-handlers.d.ts +0 -3
  230. package/dist/src/browser/playbook/builtin-handlers.d.ts.map +0 -1
  231. package/dist/src/browser/playbook/builtin-handlers.js +0 -364
  232. package/dist/src/browser/playbook/builtin-handlers.js.map +0 -1
  233. package/dist/src/browser/playbook/index.d.ts +0 -3
  234. package/dist/src/browser/playbook/index.d.ts.map +0 -1
  235. package/dist/src/browser/playbook/index.js +0 -3
  236. package/dist/src/browser/playbook/index.js.map +0 -1
  237. package/dist/src/browser/playbook/store.d.ts +0 -8
  238. package/dist/src/browser/playbook/store.d.ts.map +0 -1
  239. package/dist/src/browser/playbook/store.js +0 -87
  240. package/dist/src/browser/playbook/store.js.map +0 -1
  241. package/dist/src/browser/workflow/builtin-handlers.d.ts +0 -3
  242. package/dist/src/browser/workflow/builtin-handlers.d.ts.map +0 -1
  243. package/dist/src/browser/workflow/builtin-handlers.js +0 -343
  244. package/dist/src/browser/workflow/builtin-handlers.js.map +0 -1
  245. package/dist/src/browser/workflow/engine.d.ts +0 -10
  246. package/dist/src/browser/workflow/engine.d.ts.map +0 -1
  247. package/dist/src/browser/workflow/engine.js +0 -174
  248. package/dist/src/browser/workflow/engine.js.map +0 -1
  249. package/dist/src/browser/workflow/expression.d.ts +0 -4
  250. package/dist/src/browser/workflow/expression.d.ts.map +0 -1
  251. package/dist/src/browser/workflow/expression.js +0 -89
  252. package/dist/src/browser/workflow/expression.js.map +0 -1
  253. package/dist/src/browser/workflow/index.d.ts +0 -6
  254. package/dist/src/browser/workflow/index.d.ts.map +0 -1
  255. package/dist/src/browser/workflow/index.js +0 -6
  256. package/dist/src/browser/workflow/index.js.map +0 -1
  257. package/dist/src/browser/workflow/store.d.ts +0 -8
  258. package/dist/src/browser/workflow/store.d.ts.map +0 -1
  259. package/dist/src/browser/workflow/store.js +0 -87
  260. package/dist/src/browser/workflow/store.js.map +0 -1
  261. package/dist/src/browser/workflow/types.d.ts +0 -62
  262. package/dist/src/browser/workflow/types.d.ts.map +0 -1
  263. package/dist/src/browser/workflow/types.js +0 -2
  264. package/dist/src/browser/workflow/types.js.map +0 -1
  265. package/dist/src/cli/playbook.d.ts +0 -3
  266. package/dist/src/cli/playbook.d.ts.map +0 -1
  267. package/dist/src/cli/playbook.js +0 -265
  268. package/dist/src/cli/playbook.js.map +0 -1
  269. package/dist/src/cli/workflow.d.ts +0 -2
  270. package/dist/src/cli/workflow.d.ts.map +0 -1
  271. package/dist/src/cli/workflow.js +0 -3
  272. package/dist/src/cli/workflow.js.map +0 -1
  273. package/src/browser/playbook/browser-handlers.ts +0 -449
  274. package/src/browser/playbook/builtin-handlers.ts +0 -400
  275. package/src/browser/playbook/index.ts +0 -2
  276. package/src/browser/playbook/store.ts +0 -87
  277. package/src/cli/playbook.ts +0 -280
@@ -1,364 +0,0 @@
1
- // Built-in node handlers registered for every `browse playbook run` invocation.
2
- //
3
- // action.http — fetch a URL (GET/POST/etc.) and put the response in item.data
4
- // action.save_file — write item data or binaryBase64 to a file on disk
5
- // action.log — console.log each item (useful for debugging playbooks)
6
- // action.gemini_image — generate image via Gemini web app (browser automation + session store)
7
- // or Imagen REST API (GEMINI_API_KEY), or mock mode
8
- import { writeFile, readFile, mkdir, chmod } from 'node:fs/promises';
9
- import { existsSync } from 'node:fs';
10
- import { dirname, join, resolve } from 'node:path';
11
- import { homedir } from 'node:os';
12
- /** Resolve a user-supplied path and assert it stays within the working directory. */
13
- function safeResolvePath(rawPath) {
14
- const cwd = process.cwd();
15
- const safePath = resolve(cwd, rawPath);
16
- if (safePath !== cwd && !safePath.startsWith(cwd + '/')) {
17
- throw new Error(`Path traversal blocked: "${rawPath}" resolves outside working directory`);
18
- }
19
- return safePath;
20
- }
21
- // ---------------------------------------------------------------------------
22
- // Session persistence (shared format with browse-platform.ts)
23
- // ---------------------------------------------------------------------------
24
- const SESSIONS_FILE = join(homedir(), '.monomind', 'sessions.json');
25
- async function loadStoredSession(platform) {
26
- if (!existsSync(SESSIONS_FILE))
27
- return null;
28
- try {
29
- const sessions = JSON.parse(await readFile(SESSIONS_FILE, 'utf-8'));
30
- return sessions.find(s => s.platform === platform) ?? null;
31
- }
32
- catch {
33
- return null;
34
- }
35
- }
36
- async function saveStoredSession(platform, cookies, userAgent, username) {
37
- let sessions = [];
38
- if (existsSync(SESSIONS_FILE)) {
39
- try {
40
- sessions = JSON.parse(await readFile(SESSIONS_FILE, 'utf-8'));
41
- }
42
- catch { /* start fresh */ }
43
- }
44
- const id = `${platform}:${username}`;
45
- const now = Date.now();
46
- const existing = sessions.findIndex(s => s.platform === platform);
47
- const entry = {
48
- id, platform, username, userAgent,
49
- cookies: JSON.stringify(cookies),
50
- createdAt: existing >= 0 ? sessions[existing].createdAt : now,
51
- lastUsedAt: now,
52
- };
53
- if (existing >= 0)
54
- sessions[existing] = entry;
55
- else
56
- sessions.push(entry);
57
- await mkdir(join(homedir(), '.monomind'), { recursive: true });
58
- await writeFile(SESSIONS_FILE, JSON.stringify(sessions, null, 2));
59
- await chmod(SESSIONS_FILE, 0o600);
60
- }
61
- // ---------------------------------------------------------------------------
62
- // Gemini browser automation
63
- // ---------------------------------------------------------------------------
64
- const GEMINI_IMAGE_CHECK = `
65
- (() => {
66
- const imgs = Array.from(document.querySelectorAll('img'));
67
- return imgs.some(img =>
68
- img.complete && img.naturalWidth > 200 && img.naturalHeight > 200 &&
69
- img.src && !img.src.includes('icon') && !img.src.includes('avatar') &&
70
- !img.src.includes('logo') && !img.src.includes('profile')
71
- );
72
- })()
73
- `;
74
- const GEMINI_IMAGE_SRC = `
75
- (() => {
76
- const imgs = Array.from(document.querySelectorAll('img'));
77
- const c = imgs.filter(img =>
78
- img.complete && img.naturalWidth > 200 && img.naturalHeight > 200 &&
79
- img.src && !img.src.includes('icon') && !img.src.includes('avatar') &&
80
- !img.src.includes('logo') && !img.src.includes('profile')
81
- );
82
- return c.length ? c[c.length - 1].src : '';
83
- })()
84
- `;
85
- // Generate an image via the Gemini web app, with session management.
86
- // Flow: connect → restore saved session → if not logged in, wait for user login → generate.
87
- // Returns the saved file path, or null if Chrome is not available.
88
- async function generateViaGeminiBrowser(prompt, outputPath, cdpPort) {
89
- let browser;
90
- try {
91
- browser = await import('../index.js');
92
- }
93
- catch {
94
- return null;
95
- }
96
- let conn;
97
- try {
98
- conn = await browser.connectToTarget(cdpPort);
99
- }
100
- catch {
101
- return null;
102
- }
103
- const { client, sessionId } = conn;
104
- const refs = new Map();
105
- try {
106
- // Restore stored Gemini session cookies before navigating
107
- const stored = await loadStoredSession('gemini');
108
- if (stored?.cookies) {
109
- try {
110
- const cookies = JSON.parse(stored.cookies);
111
- if (cookies.length > 0) {
112
- await browser.setCookies(client, sessionId, cookies);
113
- }
114
- }
115
- catch { /* ignore malformed cookies */ }
116
- }
117
- // Navigate to Gemini
118
- await browser.openUrl(client, sessionId, 'https://gemini.google.com/app');
119
- // Dismiss cookie consent if present
120
- const refs2 = new Map();
121
- const consentBtn = await browser.findByRole(client, sessionId, refs2, 'button', { name: 'Accept all' }).catch(() => null);
122
- if (consentBtn) {
123
- await browser.clickElement(client, sessionId, consentBtn);
124
- await new Promise(r => setTimeout(r, 1500));
125
- }
126
- // Check if logged in — .ql-editor only appears when authenticated
127
- let inputRef = await browser.findBySelector(client, sessionId, refs, '.ql-editor').catch(() => null);
128
- if (!inputRef) {
129
- // Not logged in — ask the user to authenticate
130
- console.log('');
131
- console.log('┌─────────────────────────────────────────────────────────┐');
132
- console.log('│ Gemini login required │');
133
- console.log('│ │');
134
- console.log('│ A browser window has been opened to Gemini. │');
135
- console.log('│ Please sign in with your Google account. │');
136
- console.log('│ │');
137
- console.log('│ The playbook will resume automatically after login. │');
138
- console.log('│ Waiting up to 5 minutes… │');
139
- console.log('└─────────────────────────────────────────────────────────┘');
140
- console.log('');
141
- // Navigate to Google sign-in
142
- await browser.openUrl(client, sessionId, 'https://accounts.google.com/signin/v2/identifier');
143
- // Wait up to 5 min for the user to complete login and land back on Gemini
144
- const loginDeadline = Date.now() + 5 * 60 * 1000;
145
- let loggedIn = false;
146
- while (Date.now() < loginDeadline) {
147
- await new Promise(r => setTimeout(r, 2000));
148
- const url = await browser.getCurrentUrl(client, sessionId).catch(() => '');
149
- if (url.includes('gemini.google.com')) {
150
- inputRef = await browser.findBySelector(client, sessionId, refs, '.ql-editor').catch(() => null);
151
- if (inputRef) {
152
- loggedIn = true;
153
- break;
154
- }
155
- }
156
- }
157
- if (!loggedIn) {
158
- console.log('[action.gemini_image] Login timeout. Run: monomind browse platform connect gemini');
159
- return null;
160
- }
161
- console.log('[action.gemini_image] Login detected! Saving session...');
162
- }
163
- // Save/refresh cookies after confirming login
164
- const liveCookies = await browser.getCookies(client, sessionId).catch(() => []);
165
- const userAgent = await browser.evaluateJs(client, sessionId, 'navigator.userAgent').catch(() => 'unknown');
166
- const username = await browser.evaluateJs(client, sessionId, "document.querySelector('.gb_A.gb_Sa')?.textContent?.trim() ?? 'gemini-user'").catch(() => 'gemini-user');
167
- await saveStoredSession('gemini', liveCookies, String(userAgent), String(username));
168
- // Ensure we're on the app page with the input visible
169
- if (!inputRef) {
170
- await browser.openUrl(client, sessionId, 'https://gemini.google.com/app');
171
- inputRef = await browser.findBySelector(client, sessionId, refs, '.ql-editor').catch(() => null);
172
- }
173
- if (!inputRef)
174
- return null;
175
- // Fill and submit the prompt
176
- await browser.fillElement(client, sessionId, inputRef, prompt);
177
- await new Promise(r => setTimeout(r, 300));
178
- await browser.pressKey(client, sessionId, 'Return');
179
- console.log('[action.gemini_image] Prompt submitted to Gemini, waiting for image...');
180
- // Poll up to 90s for generated image
181
- const deadline = Date.now() + 90_000;
182
- while (Date.now() < deadline) {
183
- const found = await browser.evaluateJs(client, sessionId, GEMINI_IMAGE_CHECK).catch(() => false);
184
- if (found)
185
- break;
186
- await new Promise(r => setTimeout(r, 500));
187
- }
188
- await mkdir(dirname(outputPath), { recursive: true });
189
- // Extract image URL and download
190
- const imgSrc = (await browser.evaluateJs(client, sessionId, GEMINI_IMAGE_SRC).catch(() => ''));
191
- if (imgSrc && (imgSrc.startsWith('https://') || imgSrc.startsWith('http://'))) {
192
- try {
193
- const resp = await fetch(imgSrc);
194
- if (resp.ok) {
195
- await writeFile(outputPath, Buffer.from(await resp.arrayBuffer()));
196
- console.log(`[action.gemini_image] Image saved → ${outputPath}`);
197
- return outputPath;
198
- }
199
- }
200
- catch { /* fall through to screenshot */ }
201
- }
202
- // Fallback: screenshot the response
203
- const screenshotPath = outputPath.replace(/\.(png|jpe?g|webp)$/i, '') + '-screenshot.png';
204
- const ss = await browser.captureScreenshot(client, sessionId, { path: screenshotPath, fullPage: true }).catch(() => null);
205
- if (ss) {
206
- console.log(`[action.gemini_image] Screenshot saved → ${ss.path}`);
207
- return ss.path;
208
- }
209
- return null;
210
- }
211
- finally {
212
- client.close();
213
- }
214
- }
215
- export function createBuiltinHandlers() {
216
- const handlers = new Map();
217
- // action.http
218
- // config: { url, method?, headers?, body?, responseField?, timeoutMs?, throwOnError? }
219
- // Puts { statusCode, body, json? } into item.data[responseField ?? 'response'].
220
- // throwOnError (default true): throws on 4xx/5xx responses.
221
- // timeoutMs (default 30000): abort the request after this many ms.
222
- handlers.set('action.http', async (items, config) => {
223
- const url = String(config['url'] ?? '');
224
- const method = String(config['method'] ?? 'GET').toUpperCase();
225
- const headers = config['headers'] ?? {};
226
- const body = config['body'] !== undefined ? JSON.stringify(config['body']) : undefined;
227
- const responseField = String(config['responseField'] ?? 'response');
228
- const timeoutMs = Number(config['timeoutMs'] ?? 30_000);
229
- const throwOnError = config['throwOnError'] !== false; // default true
230
- const controller = new AbortController();
231
- const timer = setTimeout(() => controller.abort(), timeoutMs);
232
- let res;
233
- try {
234
- res = await fetch(url, {
235
- method,
236
- headers: { 'Content-Type': 'application/json', ...headers },
237
- body: method !== 'GET' && method !== 'HEAD' ? body : undefined,
238
- signal: controller.signal,
239
- });
240
- }
241
- catch (err) {
242
- clearTimeout(timer);
243
- const msg = err instanceof Error && err.name === 'AbortError'
244
- ? `action.http: request timed out after ${timeoutMs}ms — ${url}`
245
- : `action.http: network error — ${err instanceof Error ? err.message : String(err)}`;
246
- throw new Error(msg);
247
- }
248
- clearTimeout(timer);
249
- const text = await res.text();
250
- let json;
251
- try {
252
- json = JSON.parse(text);
253
- }
254
- catch { /* not JSON — body is plain text or binary */ }
255
- if (throwOnError && !res.ok) {
256
- throw new Error(`action.http: HTTP ${res.status} ${res.statusText} — ${url}\n${text.slice(0, 500)}`);
257
- }
258
- return items.map(item => ({
259
- ...item,
260
- data: {
261
- ...item.data,
262
- [responseField]: { statusCode: res.status, body: text, json },
263
- },
264
- }));
265
- });
266
- // action.save_file
267
- // config: { path, content?, field?, encoding? }
268
- // Writes item.data[field] (or binaryBase64 decoded) to disk
269
- handlers.set('action.save_file', async (items, config) => {
270
- const results = [];
271
- for (const item of items) {
272
- const outPath = safeResolvePath(String(config['path'] ?? './output.txt'));
273
- const field = config['field'];
274
- const encoding = String(config['encoding'] ?? 'utf8');
275
- await mkdir(dirname(outPath), { recursive: true });
276
- if (item.binaryBase64) {
277
- await writeFile(outPath, Buffer.from(item.binaryBase64, 'base64'));
278
- }
279
- else {
280
- const content = field
281
- ? JSON.stringify(item.data[field] ?? '', null, 2)
282
- : (config['content'] ?? JSON.stringify(item.data, null, 2));
283
- await writeFile(outPath, content, encoding);
284
- }
285
- results.push({ ...item, data: { ...item.data, savedPath: outPath } });
286
- }
287
- return results;
288
- });
289
- // action.log
290
- // config: { label? }
291
- handlers.set('action.log', async (items, config) => {
292
- const label = String(config['label'] ?? 'action.log');
293
- for (const item of items) {
294
- console.log(`[${label}]`, JSON.stringify(item.data, null, 2));
295
- }
296
- return items;
297
- });
298
- // action.gemini_image
299
- // config: { prompt, cdpPort?, outputPath?, apiKey?, model?, aspectRatio? }
300
- // Priority: (1) Gemini web browser via CDP port 9222, (2) Imagen REST API, (3) mock
301
- handlers.set('action.gemini_image', async (items, config) => {
302
- const cdpPort = Number(config['cdpPort'] ?? process.env['GEMINI_CDP_PORT'] ?? 9222);
303
- const apiKey = String(config['apiKey'] ?? process.env['GEMINI_API_KEY'] ?? process.env['GOOGLE_API_KEY'] ?? '');
304
- const model = String(config['model'] ?? 'imagen-3.0-generate-001');
305
- const aspectRatio = String(config['aspectRatio'] ?? '1:1');
306
- const outputPath = config['outputPath'];
307
- const results = [];
308
- for (const item of items) {
309
- const prompt = String(config['prompt'] ?? item.data['prompt'] ?? '');
310
- const filePath = safeResolvePath(outputPath ?? `./output/gemini-image-${Date.now()}.png`);
311
- // Priority 1: Browser automation via authenticated Chrome session
312
- const browserPath = await generateViaGeminiBrowser(prompt, filePath, cdpPort);
313
- if (browserPath) {
314
- results.push({
315
- ...item,
316
- data: { ...item.data, prompt, generatedImagePath: browserPath, source: 'gemini-browser' },
317
- });
318
- continue;
319
- }
320
- // Priority 2: Gemini Imagen REST API
321
- if (apiKey) {
322
- console.log(`[action.gemini_image] Browser unavailable — trying Imagen REST API`);
323
- const url = `https://generativelanguage.googleapis.com/v1beta/models/${model}:predict?key=${apiKey}`;
324
- const res = await fetch(url, {
325
- method: 'POST',
326
- headers: { 'Content-Type': 'application/json' },
327
- body: JSON.stringify({
328
- instances: [{ prompt }],
329
- parameters: { sampleCount: 1, aspectRatio },
330
- }),
331
- });
332
- if (!res.ok)
333
- throw new Error(`Gemini Imagen API error ${res.status}: ${await res.text()}`);
334
- const data = await res.json();
335
- const prediction = data.predictions?.[0];
336
- if (!prediction?.bytesBase64Encoded)
337
- throw new Error('No image data in Gemini response');
338
- await mkdir(dirname(filePath), { recursive: true });
339
- await writeFile(filePath, Buffer.from(prediction.bytesBase64Encoded, 'base64'));
340
- results.push({
341
- ...item,
342
- data: { ...item.data, prompt, generatedImagePath: filePath, mimeType: prediction.mimeType ?? 'image/png', source: 'gemini-api' },
343
- binaryBase64: prediction.bytesBase64Encoded,
344
- });
345
- continue;
346
- }
347
- // Priority 3: Mock mode — no browser on port 9222 and no API key
348
- console.log(`[action.gemini_image] No browser on port ${cdpPort} and no API key — mock mode.`);
349
- console.log(` Prompt: "${prompt}"`);
350
- results.push({
351
- ...item,
352
- data: {
353
- ...item.data,
354
- prompt,
355
- mockMode: true,
356
- note: `Set GEMINI_CDP_PORT env var (default: 9222) for browser mode, or GEMINI_API_KEY for REST API`,
357
- },
358
- });
359
- }
360
- return results;
361
- });
362
- return handlers;
363
- }
364
- //# sourceMappingURL=builtin-handlers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"builtin-handlers.js","sourceRoot":"","sources":["../../../../src/browser/playbook/builtin-handlers.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- export * from './builtin-handlers.js';
2
- export * from './browser-handlers.js';
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/browser/playbook/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC"}
@@ -1,3 +0,0 @@
1
- export * from './builtin-handlers.js';
2
- export * from './browser-handlers.js';
3
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/browser/playbook/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC"}
@@ -1,8 +0,0 @@
1
- import type { PlaybookDef, RunRecord } from '@monoes/monoplaybook';
2
- import type { ActionDef } from '../action-builder/types.js';
3
- export declare function clearRunStore(): void;
4
- export declare function readPlaybook(filePath: string): Promise<PlaybookDef>;
5
- export declare function readAction(filePath: string): Promise<ActionDef>;
6
- export declare function writePlaybookRun(record: RunRecord): Promise<void>;
7
- export declare function listPlaybookRuns(playbookId?: string): Promise<RunRecord[]>;
8
- //# sourceMappingURL=store.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../../src/browser/playbook/store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAe5D,wBAAgB,aAAa,IAAI,IAAI,CAEpC;AAED,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAqBzE;AAoBD,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAerE;AAED,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAEvE;AAED,wBAAsB,gBAAgB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAGhF"}
@@ -1,87 +0,0 @@
1
- import { readFile } from 'node:fs/promises';
2
- // TODO: Upgrade to better-sqlite3 for persistence across process restarts.
3
- // Schema:
4
- // CREATE TABLE browse_runs (
5
- // id TEXT PRIMARY KEY, playbook_id TEXT, playbook_name TEXT,
6
- // status TEXT, started_at INTEGER, completed_at INTEGER,
7
- // items_processed INTEGER, items_total INTEGER, error TEXT
8
- // );
9
- // CREATE TABLE browse_sessions (
10
- // id TEXT PRIMARY KEY, platform TEXT, username TEXT,
11
- // cookies TEXT, user_agent TEXT, created_at INTEGER, last_used_at INTEGER
12
- // );
13
- const runStore = new Map();
14
- export function clearRunStore() {
15
- runStore.clear();
16
- }
17
- export async function readPlaybook(filePath) {
18
- let raw;
19
- try {
20
- raw = await readFile(filePath, 'utf-8');
21
- }
22
- catch {
23
- throw new Error(`Playbook file not found: ${filePath}`);
24
- }
25
- let def;
26
- try {
27
- def = JSON.parse(raw);
28
- }
29
- catch {
30
- throw new Error(`Invalid JSON in playbook file: ${filePath}`);
31
- }
32
- if (!isPlaybookDef(def)) {
33
- const w = def;
34
- if (typeof w?.['id'] !== 'string')
35
- throw new Error('Playbook missing required field: id');
36
- if (typeof w?.['name'] !== 'string')
37
- throw new Error('Playbook missing required field: name');
38
- if (!Array.isArray(w?.['nodes']))
39
- throw new Error('Playbook missing required field: nodes');
40
- throw new Error('Playbook missing required field: connections');
41
- }
42
- return def;
43
- }
44
- function validateAction(def) {
45
- if (typeof def !== 'object' || def === null)
46
- throw new Error('Action must be a JSON object');
47
- const a = def;
48
- if (typeof a['id'] !== 'string')
49
- throw new Error('Action missing required field: id');
50
- if (!Array.isArray(a['steps']))
51
- throw new Error('Action missing required field: steps');
52
- }
53
- function isPlaybookDef(def) {
54
- if (typeof def !== 'object' || def === null)
55
- return false;
56
- const w = def;
57
- return (typeof w['id'] === 'string' &&
58
- typeof w['name'] === 'string' &&
59
- Array.isArray(w['nodes']) &&
60
- Array.isArray(w['connections']));
61
- }
62
- export async function readAction(filePath) {
63
- let raw;
64
- try {
65
- raw = await readFile(filePath, 'utf-8');
66
- }
67
- catch {
68
- throw new Error(`Action file not found: ${filePath}`);
69
- }
70
- let def;
71
- try {
72
- def = JSON.parse(raw);
73
- }
74
- catch {
75
- throw new Error(`Invalid JSON in action file: ${filePath}`);
76
- }
77
- validateAction(def);
78
- return def;
79
- }
80
- export async function writePlaybookRun(record) {
81
- runStore.set(record.id, { ...record });
82
- }
83
- export async function listPlaybookRuns(playbookId) {
84
- const all = [...runStore.values()];
85
- return playbookId ? all.filter(r => r.playbookId === playbookId) : all;
86
- }
87
- //# sourceMappingURL=store.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../../../../src/browser/playbook/store.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import type { NodeHandler } from './engine.js';
2
- export declare function createBuiltinHandlers(): Map<string, NodeHandler>;
3
- //# sourceMappingURL=builtin-handlers.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"builtin-handlers.d.ts","sourceRoot":"","sources":["../../../../src/browser/workflow/builtin-handlers.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAuN/C,wBAAgB,qBAAqB,IAAI,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CA8IhE"}