claude-chrome-parallel 2.2.2 → 3.0.0

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 (72) hide show
  1. package/README.md +352 -45
  2. package/dist/cdp/client.d.ts +30 -3
  3. package/dist/cdp/client.d.ts.map +1 -1
  4. package/dist/cdp/client.js +75 -6
  5. package/dist/cdp/client.js.map +1 -1
  6. package/dist/cdp/connection-pool.d.ts +5 -1
  7. package/dist/cdp/connection-pool.d.ts.map +1 -1
  8. package/dist/cdp/connection-pool.js +7 -1
  9. package/dist/cdp/connection-pool.js.map +1 -1
  10. package/dist/chrome/launcher.d.ts +2 -0
  11. package/dist/chrome/launcher.d.ts.map +1 -1
  12. package/dist/chrome/launcher.js +13 -0
  13. package/dist/chrome/launcher.js.map +1 -1
  14. package/dist/cli/index.js +7 -0
  15. package/dist/cli/index.js.map +1 -1
  16. package/dist/config/global.d.ts +18 -0
  17. package/dist/config/global.d.ts.map +1 -0
  18. package/dist/config/global.js +24 -0
  19. package/dist/config/global.js.map +1 -0
  20. package/dist/config/index.d.ts +1 -0
  21. package/dist/config/index.d.ts.map +1 -1
  22. package/dist/config/index.js +1 -0
  23. package/dist/config/index.js.map +1 -1
  24. package/dist/index.js +20 -1
  25. package/dist/index.js.map +1 -1
  26. package/dist/orchestration/state-manager.d.ts +117 -0
  27. package/dist/orchestration/state-manager.d.ts.map +1 -0
  28. package/dist/orchestration/state-manager.js +435 -0
  29. package/dist/orchestration/state-manager.js.map +1 -0
  30. package/dist/orchestration/workflow-engine.d.ts +96 -0
  31. package/dist/orchestration/workflow-engine.d.ts.map +1 -0
  32. package/dist/orchestration/workflow-engine.js +326 -0
  33. package/dist/orchestration/workflow-engine.js.map +1 -0
  34. package/dist/session-manager.d.ts +62 -18
  35. package/dist/session-manager.d.ts.map +1 -1
  36. package/dist/session-manager.js +274 -100
  37. package/dist/session-manager.js.map +1 -1
  38. package/dist/tools/computer.d.ts.map +1 -1
  39. package/dist/tools/computer.js +49 -3
  40. package/dist/tools/computer.js.map +1 -1
  41. package/dist/tools/index.d.ts.map +1 -1
  42. package/dist/tools/index.js +13 -1
  43. package/dist/tools/index.js.map +1 -1
  44. package/dist/tools/navigate.d.ts.map +1 -1
  45. package/dist/tools/navigate.js +91 -8
  46. package/dist/tools/navigate.js.map +1 -1
  47. package/dist/tools/orchestration.d.ts +6 -0
  48. package/dist/tools/orchestration.d.ts.map +1 -0
  49. package/dist/tools/orchestration.js +436 -0
  50. package/dist/tools/orchestration.js.map +1 -0
  51. package/dist/tools/tabs-context.d.ts.map +1 -1
  52. package/dist/tools/tabs-context.js +42 -23
  53. package/dist/tools/tabs-context.js.map +1 -1
  54. package/dist/tools/tabs-create.d.ts +1 -1
  55. package/dist/tools/tabs-create.d.ts.map +1 -1
  56. package/dist/tools/tabs-create.js +30 -6
  57. package/dist/tools/tabs-create.js.map +1 -1
  58. package/dist/tools/worker-create.d.ts +7 -0
  59. package/dist/tools/worker-create.d.ts.map +1 -0
  60. package/dist/tools/worker-create.js +62 -0
  61. package/dist/tools/worker-create.js.map +1 -0
  62. package/dist/tools/worker-delete.d.ts +6 -0
  63. package/dist/tools/worker-delete.d.ts.map +1 -0
  64. package/dist/tools/worker-delete.js +80 -0
  65. package/dist/tools/worker-delete.js.map +1 -0
  66. package/dist/tools/worker-list.d.ts +6 -0
  67. package/dist/tools/worker-list.d.ts.map +1 -0
  68. package/dist/tools/worker-list.js +67 -0
  69. package/dist/tools/worker-list.js.map +1 -0
  70. package/dist/types/session.d.ts +35 -2
  71. package/dist/types/session.d.ts.map +1 -1
  72. package/package.json +2 -1
@@ -0,0 +1,326 @@
1
+ "use strict";
2
+ /**
3
+ * Workflow Engine - Executes parallel browser workflows
4
+ * Manages worker lifecycle and result aggregation
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.WorkflowEngine = void 0;
8
+ exports.getWorkflowEngine = getWorkflowEngine;
9
+ const session_manager_1 = require("../session-manager");
10
+ const state_manager_1 = require("./state-manager");
11
+ class WorkflowEngine {
12
+ sessionManager = (0, session_manager_1.getSessionManager)();
13
+ stateManager = (0, state_manager_1.getOrchestrationStateManager)();
14
+ /**
15
+ * Initialize a new workflow
16
+ * Creates workers, tabs, and scratchpads
17
+ */
18
+ async initWorkflow(sessionId, workflow) {
19
+ const orchestrationId = `orch-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
20
+ const workers = [];
21
+ // Create workers and tabs for each step
22
+ for (const step of workflow.steps) {
23
+ // Create isolated worker
24
+ const worker = await this.sessionManager.createWorker(sessionId, {
25
+ id: step.workerId,
26
+ name: step.workerName,
27
+ });
28
+ // Create tab in worker context
29
+ const { targetId } = await this.sessionManager.createTarget(sessionId, step.url, worker.id);
30
+ workers.push({
31
+ workerId: worker.id,
32
+ workerName: step.workerName,
33
+ tabId: targetId,
34
+ task: step.task,
35
+ });
36
+ }
37
+ // Initialize orchestration state
38
+ await this.stateManager.initOrchestration(orchestrationId, workflow.name, workers);
39
+ console.error(`[WorkflowEngine] Initialized workflow ${orchestrationId} with ${workers.length} workers`);
40
+ return {
41
+ orchestrationId,
42
+ workers: workers.map(w => ({
43
+ workerId: w.workerId,
44
+ workerName: w.workerName,
45
+ tabId: w.tabId,
46
+ })),
47
+ };
48
+ }
49
+ /**
50
+ * Update worker progress
51
+ */
52
+ async updateWorkerProgress(workerName, update) {
53
+ if (update.status || update.iteration !== undefined || update.extractedData !== undefined) {
54
+ await this.stateManager.updateWorkerState(workerName, {
55
+ status: update.status,
56
+ iteration: update.iteration,
57
+ extractedData: update.extractedData,
58
+ });
59
+ }
60
+ if (update.action && update.result) {
61
+ await this.stateManager.addProgressEntry(workerName, update.action, update.result, update.error);
62
+ }
63
+ }
64
+ /**
65
+ * Mark worker as complete
66
+ * Note: This method prevents double-counting by checking the previous worker status
67
+ */
68
+ async completeWorker(workerName, status, resultSummary, extractedData) {
69
+ await this.stateManager.updateWorkerState(workerName, {
70
+ status,
71
+ extractedData,
72
+ });
73
+ // Update orchestration state
74
+ const orch = await this.stateManager.readOrchestrationState();
75
+ if (orch) {
76
+ const workerIdx = orch.workers.findIndex(w => w.workerName === workerName);
77
+ if (workerIdx !== -1) {
78
+ const previousStatus = orch.workers[workerIdx].status;
79
+ const wasAlreadyCompleted = previousStatus === 'SUCCESS' || previousStatus === 'PARTIAL' || previousStatus === 'FAIL';
80
+ orch.workers[workerIdx].status = status;
81
+ orch.workers[workerIdx].resultSummary = resultSummary;
82
+ // Only update counters if the worker wasn't already in a completed state
83
+ // This prevents double-counting when completeWorker is called multiple times
84
+ if (!wasAlreadyCompleted) {
85
+ if (status === 'SUCCESS' || status === 'PARTIAL') {
86
+ orch.completedWorkers++;
87
+ }
88
+ if (status === 'FAIL') {
89
+ orch.failedWorkers++;
90
+ }
91
+ }
92
+ else {
93
+ // If status changed from one completed state to another, adjust counters
94
+ const wasCompleted = previousStatus === 'SUCCESS' || previousStatus === 'PARTIAL';
95
+ const wasFailed = previousStatus === 'FAIL';
96
+ const isNowCompleted = status === 'SUCCESS' || status === 'PARTIAL';
97
+ const isNowFailed = status === 'FAIL';
98
+ if (wasCompleted && isNowFailed) {
99
+ orch.completedWorkers--;
100
+ orch.failedWorkers++;
101
+ }
102
+ else if (wasFailed && isNowCompleted) {
103
+ orch.failedWorkers--;
104
+ orch.completedWorkers++;
105
+ }
106
+ // If both were completed or both were failed, no change needed
107
+ }
108
+ // Check if all workers are done
109
+ const allDone = orch.workers.every(w => w.status === 'SUCCESS' || w.status === 'PARTIAL' || w.status === 'FAIL');
110
+ if (allDone) {
111
+ if (orch.failedWorkers === orch.workers.length) {
112
+ orch.status = 'FAILED';
113
+ }
114
+ else if (orch.failedWorkers > 0) {
115
+ orch.status = 'PARTIAL';
116
+ }
117
+ else {
118
+ orch.status = 'COMPLETED';
119
+ }
120
+ }
121
+ else {
122
+ orch.status = 'RUNNING';
123
+ }
124
+ await this.stateManager.writeOrchestrationState(orch);
125
+ }
126
+ }
127
+ }
128
+ /**
129
+ * Get current orchestration status
130
+ */
131
+ async getOrchestrationStatus() {
132
+ return this.stateManager.readOrchestrationState();
133
+ }
134
+ /**
135
+ * Get all worker states
136
+ */
137
+ async getAllWorkerStates() {
138
+ return this.stateManager.getAllWorkerStates();
139
+ }
140
+ /**
141
+ * Get worker state by name
142
+ */
143
+ async getWorkerState(workerName) {
144
+ return this.stateManager.readWorkerState(workerName);
145
+ }
146
+ /**
147
+ * Collect final results from all workers
148
+ */
149
+ async collectResults() {
150
+ const orch = await this.stateManager.readOrchestrationState();
151
+ if (!orch)
152
+ return null;
153
+ const workerResults = [];
154
+ const workerStates = await this.stateManager.getAllWorkerStates();
155
+ for (const state of workerStates) {
156
+ workerResults.push({
157
+ workerId: state.workerId,
158
+ workerName: state.workerName,
159
+ tabId: state.tabId,
160
+ status: state.status === 'SUCCESS' ? 'SUCCESS'
161
+ : state.status === 'PARTIAL' ? 'PARTIAL'
162
+ : 'FAIL',
163
+ resultSummary: `${state.status}: ${state.iteration} iterations`,
164
+ dataExtracted: state.extractedData,
165
+ iterations: state.iteration,
166
+ errors: state.errors,
167
+ });
168
+ }
169
+ const completedCount = workerResults.filter(r => r.status === 'SUCCESS' || r.status === 'PARTIAL').length;
170
+ const failedCount = workerResults.filter(r => r.status === 'FAIL').length;
171
+ const duration = Date.now() - orch.createdAt;
172
+ return {
173
+ orchestrationId: orch.orchestrationId,
174
+ status: orch.status === 'COMPLETED' ? 'COMPLETED'
175
+ : orch.status === 'PARTIAL' ? 'PARTIAL'
176
+ : 'FAILED',
177
+ workerResults,
178
+ completedCount,
179
+ failedCount,
180
+ duration,
181
+ };
182
+ }
183
+ /**
184
+ * Cleanup workflow resources
185
+ */
186
+ async cleanupWorkflow(sessionId) {
187
+ // Get all workers from orchestration state
188
+ const orch = await this.stateManager.readOrchestrationState();
189
+ if (!orch)
190
+ return;
191
+ // Delete workers (which closes tabs and contexts)
192
+ for (const worker of orch.workers) {
193
+ try {
194
+ await this.sessionManager.deleteWorker(sessionId, worker.workerId);
195
+ }
196
+ catch {
197
+ // Worker might already be deleted
198
+ }
199
+ }
200
+ // Cleanup state files
201
+ await this.stateManager.cleanup();
202
+ console.error(`[WorkflowEngine] Cleaned up workflow resources`);
203
+ }
204
+ /**
205
+ * Generate worker agent prompt for Background Task
206
+ */
207
+ generateWorkerPrompt(workerId, workerName, tabId, task, successCriteria) {
208
+ return `## Chrome-Sisyphus Worker Agent
209
+
210
+ You are an autonomous browser automation worker. Execute your assigned task completely before returning.
211
+
212
+ ### Configuration
213
+ - Worker ID: ${workerId}
214
+ - Worker Name: ${workerName}
215
+ - Tab ID: ${tabId}
216
+ - Scratchpad: .agent/chrome-sisyphus/worker-${workerName}.md
217
+
218
+ ### Your Task
219
+ ${task}
220
+
221
+ ### Success Criteria
222
+ ${successCriteria}
223
+
224
+ ---
225
+
226
+ ## CRITICAL RULES
227
+
228
+ 1. **ALWAYS include tabId="${tabId}" in EVERY MCP tool call**
229
+ 2. **Update scratchpad after EVERY action using Write tool**
230
+ 3. **Maximum 5 iterations**
231
+ 4. **Return compressed result only - NO screenshots or full DOM**
232
+
233
+ ---
234
+
235
+ ## Available MCP Tools
236
+
237
+ ### Navigation
238
+ mcp__chrome-parallel__navigate
239
+ - url: string (required)
240
+ - tabId: "${tabId}" (required)
241
+
242
+ ### Interaction
243
+ mcp__chrome-parallel__computer
244
+ - action: "left_click" | "type" | "screenshot" | "scroll" | "key"
245
+ - tabId: "${tabId}" (required)
246
+ - coordinate: [x, y] (for clicks)
247
+ - text: string (for typing)
248
+
249
+ ### Page Reading
250
+ mcp__chrome-parallel__read_page
251
+ - tabId: "${tabId}" (required)
252
+ - filter: "interactive" | "all"
253
+
254
+ ### Element Finding
255
+ mcp__chrome-parallel__find
256
+ - query: string (natural language)
257
+ - tabId: "${tabId}" (required)
258
+
259
+ ### Form Input
260
+ mcp__chrome-parallel__form_input
261
+ - ref: string (element reference from find/read_page)
262
+ - value: string | boolean | number
263
+ - tabId: "${tabId}" (required)
264
+
265
+ ### JavaScript Execution
266
+ mcp__chrome-parallel__javascript_tool
267
+ - action: "javascript_exec"
268
+ - text: string (JS code)
269
+ - tabId: "${tabId}" (required)
270
+
271
+ ---
272
+
273
+ ## Execution Algorithm (Ralph Loop)
274
+
275
+ for iteration in 1..5:
276
+ 1. Assess current state (read page or check scratchpad)
277
+ 2. Decide next action
278
+ 3. Execute MCP tool with tabId="${tabId}"
279
+ 4. Update scratchpad with Write tool
280
+ 5. Check if success criteria met -> if yes, return SUCCESS
281
+
282
+ ---
283
+
284
+ ## Final Output Format
285
+
286
+ When done, your LAST message MUST contain:
287
+
288
+ ---RESULT---
289
+ {
290
+ "status": "SUCCESS" | "PARTIAL" | "FAIL",
291
+ "workerName": "${workerName}",
292
+ "resultSummary": "Brief summary (max 100 chars)",
293
+ "dataExtracted": {
294
+ // Your extracted data here
295
+ },
296
+ "scratchpadPath": ".agent/chrome-sisyphus/worker-${workerName}.md",
297
+ "iterations": 3,
298
+ "errors": [],
299
+ "EXIT_SIGNAL": true
300
+ }
301
+ ---END---
302
+
303
+ ---
304
+
305
+ ## Error Handling
306
+
307
+ | Error | Strategy |
308
+ |-------|----------|
309
+ | Element not found | Try find with different query |
310
+ | Page timeout | Refresh and retry |
311
+ | Captcha | Report FAIL |
312
+ | Network error | Wait 2s, retry |
313
+
314
+ Now begin your task. Navigate to the target site and complete the assigned work.`;
315
+ }
316
+ }
317
+ exports.WorkflowEngine = WorkflowEngine;
318
+ // Singleton instance
319
+ let workflowEngineInstance = null;
320
+ function getWorkflowEngine() {
321
+ if (!workflowEngineInstance) {
322
+ workflowEngineInstance = new WorkflowEngine();
323
+ }
324
+ return workflowEngineInstance;
325
+ }
326
+ //# sourceMappingURL=workflow-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-engine.js","sourceRoot":"","sources":["../../src/orchestration/workflow-engine.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,9 @@
1
1
  /**
2
2
  * Session Manager - Manages lifecycle of parallel Claude Code sessions
3
+ * Supports multiple Workers within a single session for parallel browser operations
3
4
  */
4
5
  import { Page } from 'puppeteer-core';
5
- import { Session, SessionInfo, SessionCreateOptions, SessionEvent } from './types/session';
6
+ import { Session, SessionInfo, SessionCreateOptions, SessionEvent, Worker, WorkerInfo, WorkerCreateOptions } from './types/session';
6
7
  import { CDPClient } from './cdp/client';
7
8
  import { PoolStats } from './cdp/connection-pool';
8
9
  export interface SessionManagerConfig {
@@ -14,12 +15,15 @@ export interface SessionManagerConfig {
14
15
  autoCleanup?: boolean;
15
16
  /** Maximum number of sessions (default: 100) */
16
17
  maxSessions?: number;
17
- /** Use connection pool for page management (default: true) */
18
+ /** Maximum workers per session (default: 20) */
19
+ maxWorkersPerSession?: number;
20
+ /** Use connection pool for page management (default: false for worker isolation) */
18
21
  useConnectionPool?: boolean;
19
22
  }
20
23
  export interface SessionManagerStats {
21
24
  activeSessions: number;
22
25
  totalTargets: number;
26
+ totalWorkers: number;
23
27
  totalSessionsCreated: number;
24
28
  totalSessionsCleaned: number;
25
29
  uptime: number;
@@ -29,7 +33,7 @@ export interface SessionManagerStats {
29
33
  }
30
34
  export declare class SessionManager {
31
35
  private sessions;
32
- private targetToSession;
36
+ private targetToWorker;
33
37
  private cdpClient;
34
38
  private connectionPool;
35
39
  private queueManager;
@@ -66,7 +70,7 @@ export declare class SessionManager {
66
70
  */
67
71
  ensureConnected(): Promise<void>;
68
72
  /**
69
- * Create a new session
73
+ * Create a new session with a default worker
70
74
  */
71
75
  createSession(options?: SessionCreateOptions): Promise<Session>;
72
76
  /**
@@ -82,7 +86,7 @@ export declare class SessionManager {
82
86
  */
83
87
  touchSession(sessionId: string): void;
84
88
  /**
85
- * Delete a session and clean up resources
89
+ * Delete a session and clean up all workers
86
90
  */
87
91
  deleteSession(sessionId: string): Promise<void>;
88
92
  /**
@@ -94,36 +98,80 @@ export declare class SessionManager {
94
98
  */
95
99
  cleanupAllSessions(): Promise<number>;
96
100
  /**
97
- * Create a new page/target for a session
101
+ * Create a new worker within a session
102
+ * Each worker has its own isolated browser context (cookies, localStorage, etc.)
98
103
  */
99
- createTarget(sessionId: string, url?: string): Promise<{
104
+ createWorker(sessionId: string, options?: WorkerCreateOptions): Promise<Worker>;
105
+ /**
106
+ * Get a worker by ID
107
+ */
108
+ getWorker(sessionId: string, workerId: string): Worker | undefined;
109
+ /**
110
+ * Get or create a worker
111
+ */
112
+ getOrCreateWorker(sessionId: string, workerId?: string): Promise<Worker>;
113
+ /**
114
+ * List all workers in a session
115
+ */
116
+ getWorkers(sessionId: string): WorkerInfo[];
117
+ /**
118
+ * Delete a worker and its resources
119
+ */
120
+ deleteWorker(sessionId: string, workerId: string): Promise<void>;
121
+ /**
122
+ * Internal worker deletion (also used for cleanup)
123
+ */
124
+ private deleteWorkerInternal;
125
+ /**
126
+ * Create a new page/target for a worker
127
+ * @param sessionId Session ID
128
+ * @param url Optional URL to navigate to
129
+ * @param workerId Optional worker ID (uses default worker if not specified)
130
+ */
131
+ createTarget(sessionId: string, url?: string, workerId?: string): Promise<{
100
132
  targetId: string;
101
133
  page: Page;
134
+ workerId: string;
102
135
  }>;
136
+ /**
137
+ * Check if a target is still valid (page not closed)
138
+ */
139
+ isTargetValid(targetId: string): Promise<boolean>;
103
140
  /**
104
141
  * Get page for a target
142
+ * @param sessionId Session ID
143
+ * @param targetId Target/Tab ID
144
+ * @param workerId Optional worker ID for validation
105
145
  */
106
- getPage(sessionId: string, targetId: string): Promise<Page | null>;
146
+ getPage(sessionId: string, targetId: string, workerId?: string): Promise<Page | null>;
107
147
  /**
108
- * Get all pages for a session
148
+ * Get all pages for a worker
109
149
  */
110
- getSessionPages(sessionId: string): Promise<Page[]>;
150
+ getWorkerPages(sessionId: string, workerId: string): Promise<Page[]>;
111
151
  /**
112
- * Get target IDs for a session
152
+ * Get target IDs for a session (all workers)
113
153
  */
114
154
  getSessionTargetIds(sessionId: string): string[];
115
155
  /**
116
- * Validate target ownership
156
+ * Get target IDs for a specific worker
157
+ */
158
+ getWorkerTargetIds(sessionId: string, workerId: string): string[];
159
+ /**
160
+ * Validate target ownership (legacy method, checks session only)
117
161
  */
118
162
  validateTargetOwnership(sessionId: string, targetId: string): boolean;
163
+ /**
164
+ * Get the worker ID that owns a target
165
+ */
166
+ getTargetWorkerId(targetId: string): string | undefined;
119
167
  /**
120
168
  * Execute a CDP command through the session's queue
121
169
  */
122
170
  executeCDP<T = unknown>(sessionId: string, targetId: string, method: string, params?: Record<string, unknown>): Promise<T>;
123
171
  /**
124
- * Remove a target from a session
172
+ * Handle target closed event
125
173
  */
126
- removeTarget(sessionId: string, targetId: string): Promise<void>;
174
+ onTargetClosed(targetId: string): void;
127
175
  /**
128
176
  * Get session info (for serialization)
129
177
  */
@@ -132,10 +180,6 @@ export declare class SessionManager {
132
180
  * Get all session infos
133
181
  */
134
182
  getAllSessionInfos(): SessionInfo[];
135
- /**
136
- * Handle target closed event
137
- */
138
- onTargetClosed(targetId: string): void;
139
183
  /**
140
184
  * Add event listener
141
185
  */
@@ -1 +1 @@
1
- {"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../src/session-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../src/session-manager.ts"],"names":[],"mappings":"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"}