grasp-sdk 0.1.8__tar.gz → 0.1.10__tar.gz

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.

Potentially problematic release.


This version of grasp-sdk might be problematic. Click here for more details.

Files changed (32) hide show
  1. {grasp_sdk-0.1.8/grasp_sdk.egg-info → grasp_sdk-0.1.10}/PKG-INFO +6 -1
  2. {grasp_sdk-0.1.8 → grasp_sdk-0.1.10}/README.md +5 -0
  3. {grasp_sdk-0.1.8 → grasp_sdk-0.1.10}/example_usage.py +2 -2
  4. {grasp_sdk-0.1.8 → grasp_sdk-0.1.10}/grasp_sdk/__init__.py +1 -1
  5. {grasp_sdk-0.1.8 → grasp_sdk-0.1.10}/grasp_sdk/services/browser.py +28 -37
  6. {grasp_sdk-0.1.8 → grasp_sdk-0.1.10}/grasp_sdk/services/sandbox.py +7 -0
  7. {grasp_sdk-0.1.8 → grasp_sdk-0.1.10/grasp_sdk.egg-info}/PKG-INFO +6 -1
  8. {grasp_sdk-0.1.8 → grasp_sdk-0.1.10}/grasp_sdk.egg-info/SOURCES.txt +0 -4
  9. grasp_sdk-0.1.10/grasp_sdk.egg-info/top_level.txt +4 -0
  10. {grasp_sdk-0.1.8 → grasp_sdk-0.1.10}/pyproject.toml +1 -1
  11. grasp_sdk-0.1.8/grasp_sdk/sandbox/bootstrap-chrome-stable.mjs +0 -69
  12. grasp_sdk-0.1.8/grasp_sdk/sandbox/chrome-stable.mjs +0 -424
  13. grasp_sdk-0.1.8/grasp_sdk/sandbox/chromium.mjs +0 -395
  14. grasp_sdk-0.1.8/grasp_sdk/sandbox/http-proxy.mjs +0 -324
  15. grasp_sdk-0.1.8/grasp_sdk.egg-info/top_level.txt +0 -2
  16. {grasp_sdk-0.1.8 → grasp_sdk-0.1.10}/MANIFEST.in +0 -0
  17. {grasp_sdk-0.1.8 → grasp_sdk-0.1.10}/build_and_publish.py +0 -0
  18. {grasp_sdk-0.1.8 → grasp_sdk-0.1.10}/grasp_sdk/models/__init__.py +0 -0
  19. {grasp_sdk-0.1.8 → grasp_sdk-0.1.10}/grasp_sdk/services/__init__.py +0 -0
  20. {grasp_sdk-0.1.8 → grasp_sdk-0.1.10}/grasp_sdk/utils/__init__.py +0 -0
  21. {grasp_sdk-0.1.8 → grasp_sdk-0.1.10}/grasp_sdk/utils/auth.py +0 -0
  22. {grasp_sdk-0.1.8 → grasp_sdk-0.1.10}/grasp_sdk/utils/config.py +0 -0
  23. {grasp_sdk-0.1.8 → grasp_sdk-0.1.10}/grasp_sdk/utils/logger.py +0 -0
  24. {grasp_sdk-0.1.8 → grasp_sdk-0.1.10}/grasp_sdk.egg-info/dependency_links.txt +0 -0
  25. {grasp_sdk-0.1.8 → grasp_sdk-0.1.10}/grasp_sdk.egg-info/entry_points.txt +0 -0
  26. {grasp_sdk-0.1.8 → grasp_sdk-0.1.10}/grasp_sdk.egg-info/not-zip-safe +0 -0
  27. {grasp_sdk-0.1.8 → grasp_sdk-0.1.10}/grasp_sdk.egg-info/requires.txt +0 -0
  28. {grasp_sdk-0.1.8 → grasp_sdk-0.1.10}/py.typed +0 -0
  29. {grasp_sdk-0.1.8 → grasp_sdk-0.1.10}/requirements.txt +0 -0
  30. {grasp_sdk-0.1.8 → grasp_sdk-0.1.10}/setup.cfg +0 -0
  31. {grasp_sdk-0.1.8 → grasp_sdk-0.1.10}/setup.py +0 -0
  32. {grasp_sdk-0.1.8 → grasp_sdk-0.1.10}/test_install.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: grasp_sdk
3
- Version: 0.1.8
3
+ Version: 0.1.10
4
4
  Summary: Python SDK for Grasp E2B - Browser automation and sandbox management
5
5
  Home-page: https://github.com/grasp-team/grasp-e2b
6
6
  Author: Grasp Team
@@ -308,6 +308,11 @@ MIT License - see the [LICENSE](../LICENSE) file for details.
308
308
 
309
309
  ## 📋 Release History
310
310
 
311
+ ### v0.1.10 (2025-01-27)
312
+ - Bug fixes and improvements
313
+ - Enhanced stability
314
+ - Updated dependencies
315
+
311
316
  ### v0.1.4 (2025-01-27)
312
317
  - Version synchronization update
313
318
  - Package metadata improvements
@@ -261,6 +261,11 @@ MIT License - see the [LICENSE](../LICENSE) file for details.
261
261
 
262
262
  ## 📋 Release History
263
263
 
264
+ ### v0.1.10 (2025-01-27)
265
+ - Bug fixes and improvements
266
+ - Enhanced stability
267
+ - Updated dependencies
268
+
264
269
  ### v0.1.4 (2025-01-27)
265
270
  - Version synchronization update
266
271
  - Package metadata improvements
@@ -33,10 +33,10 @@ async def main():
33
33
 
34
34
  async with GraspServer({
35
35
  # 'key': api_key,
36
- # 'type': 'chrome-stable',
36
+ 'type': 'chrome-stable',
37
37
  # 'headless': False,
38
38
  # 'adblock': True,
39
- # 'debug': True,
39
+ 'debug': True,
40
40
  'timeout': 3600000, # 容器最长运行1小时(最大值可以为一天 86400000)
41
41
  }) as connection:
42
42
 
@@ -24,7 +24,7 @@ from .models import (
24
24
  SandboxStatus,
25
25
  )
26
26
 
27
- __version__ = "0.1.8"
27
+ __version__ = "0.1.10"
28
28
  __author__ = "Grasp Team"
29
29
  __email__ = "team@grasp.dev"
30
30
 
@@ -147,7 +147,7 @@ class BrowserService:
147
147
  # except FileNotFoundError:
148
148
  # raise RuntimeError(f'Browser script not found: {script_path}')
149
149
 
150
- playwright_script = '/home/user/http-proxy.mjs'
150
+ playwright_script = '/home/user/http-proxy.js'
151
151
 
152
152
  # Prepare script options
153
153
  from ..models import IScriptOptions
@@ -156,7 +156,7 @@ class BrowserService:
156
156
  'background': True,
157
157
  'nohup': not self.sandbox_service.is_debug,
158
158
  'timeoutMs': 0,
159
- 'preCommand': '' if self.config['headless'] else 'xvfb-run -a -s "-screen 0 1280x1024x24" '
159
+ 'preCommand': ''
160
160
  }
161
161
 
162
162
  # Run the Playwright script in background
@@ -226,7 +226,7 @@ class BrowserService:
226
226
  Raises:
227
227
  RuntimeError: If CDP server fails to become ready within timeout
228
228
  """
229
- delay_ms = 100
229
+ delay_ms = 50
230
230
  max_attempts = self.config['launchTimeout'] // delay_ms
231
231
 
232
232
  for attempt in range(1, max_attempts + 1):
@@ -240,40 +240,31 @@ class BrowserService:
240
240
  )
241
241
 
242
242
  # Check if CDP endpoint is responding
243
- options: ICommandOptions = {
244
- 'timeout': 0,
245
- 'inBackground': False
246
- }
247
- result = await self.sandbox_service.run_command(
248
- f'curl -s https://{host}/json/version',
249
- options,
250
- True,
251
- )
252
-
253
- if (
254
- getattr(result, 'exit_code', None) == 0 and
255
- 'Browser' in getattr(result, 'stdout', '')
256
- ):
257
- stdout_content = getattr(result, 'stdout', '')
258
- metadata = json.loads(stdout_content)
259
-
260
- # Update URLs for external access
261
- ws_url = metadata['webSocketDebuggerUrl'].replace(
262
- 'ws://', 'wss://'
263
- ).replace(
264
- f'localhost:9222', host
265
- )
266
-
267
- http_url = f'https://{host}'
268
-
269
- connection = CDPConnection(
270
- ws_url=ws_url,
271
- http_url=http_url,
272
- port=9222
273
- )
274
-
275
- self.logger.info(f'CDP server is ready (metadata: {metadata})')
276
- return connection
243
+ async with aiohttp.ClientSession() as session:
244
+ async with session.get(f'https://{host}/json/version') as response:
245
+ if response.status == 200:
246
+ response_text = await response.text()
247
+ if 'Browser' in response_text:
248
+ stdout_content = response_text
249
+ metadata = json.loads(stdout_content)
250
+
251
+ # Update URLs for external access
252
+ ws_url = metadata['webSocketDebuggerUrl'].replace(
253
+ 'ws://', 'wss://'
254
+ ).replace(
255
+ f'localhost:9222', host
256
+ )
257
+
258
+ http_url = f'https://{host}'
259
+
260
+ connection = CDPConnection(
261
+ ws_url=ws_url,
262
+ http_url=http_url,
263
+ port=9222
264
+ )
265
+
266
+ self.logger.info(f'CDP server is ready (metadata: {metadata})')
267
+ return connection
277
268
 
278
269
  except Exception as error:
279
270
  self.logger.debug(
@@ -145,10 +145,17 @@ class SandboxService:
145
145
  self.logger.info('Creating Grasp sandbox', {
146
146
  'templateId': template_id,
147
147
  })
148
+
149
+ domain = 'e2b.app'
150
+ if api_key.startswith('sk_'):
151
+ domain = 'sandbox.novita.ai'
152
+ template_id = f'{template_id}-novita'
153
+
148
154
  # Use Sandbox constructor directly (e2b SDK 1.5.3+)
149
155
  self.sandbox = await AsyncSandbox.create(
150
156
  template=template_id,
151
157
  api_key=api_key,
158
+ domain=domain,
152
159
  timeout=self.config['timeout'] // 1000, # Convert ms to seconds
153
160
  envs=envs,
154
161
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: grasp_sdk
3
- Version: 0.1.8
3
+ Version: 0.1.10
4
4
  Summary: Python SDK for Grasp E2B - Browser automation and sandbox management
5
5
  Home-page: https://github.com/grasp-team/grasp-e2b
6
6
  Author: Grasp Team
@@ -308,6 +308,11 @@ MIT License - see the [LICENSE](../LICENSE) file for details.
308
308
 
309
309
  ## 📋 Release History
310
310
 
311
+ ### v0.1.10 (2025-01-27)
312
+ - Bug fixes and improvements
313
+ - Enhanced stability
314
+ - Updated dependencies
315
+
311
316
  ### v0.1.4 (2025-01-27)
312
317
  - Version synchronization update
313
318
  - Package metadata improvements
@@ -30,10 +30,6 @@ grasp_sdk.egg-info/not-zip-safe
30
30
  grasp_sdk.egg-info/requires.txt
31
31
  grasp_sdk.egg-info/top_level.txt
32
32
  grasp_sdk/models/__init__.py
33
- grasp_sdk/sandbox/bootstrap-chrome-stable.mjs
34
- grasp_sdk/sandbox/chrome-stable.mjs
35
- grasp_sdk/sandbox/chromium.mjs
36
- grasp_sdk/sandbox/http-proxy.mjs
37
33
  grasp_sdk/services/__init__.py
38
34
  grasp_sdk/services/browser.py
39
35
  grasp_sdk/services/sandbox.py
@@ -0,0 +1,4 @@
1
+ dist
2
+ examples
3
+ grasp_sdk
4
+ output
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "grasp_sdk"
7
- version = "0.1.8"
7
+ version = "0.1.10"
8
8
  authors = [
9
9
  {name = "Grasp Team", email = "team@grasp.com"},
10
10
  ]
@@ -1,69 +0,0 @@
1
- import { spawn } from 'child_process';
2
-
3
- // const asblockPlugin = '/home/user/.config/google-chrome/Default/Extensions/adblock';
4
-
5
- const args = [
6
- '--no-sandbox',
7
- '--disable-setuid-sandbox',
8
- '--disable-dev-shm-usage',
9
- '--disable-gpu',
10
- '--disable-software-rasterizer',
11
- '--user-data-dir=/home/user/.browser-context'
12
- ];
13
-
14
- args.push(
15
- // 避免缓存积累影响性能
16
- '--disable-application-cache',
17
-
18
- // 关闭所有硬件加速特性,防止 GPU 相关崩溃
19
- '--disable-accelerated-2d-canvas',
20
- '--disable-accelerated-video-decode',
21
-
22
- // 禁用后台渲染,减少无关资源消耗
23
- '--disable-background-timer-throttling',
24
- '--disable-backgrounding-occluded-windows',
25
- '--disable-renderer-backgrounding',
26
-
27
- // 避免过度日志影响性能
28
- '--disable-logging',
29
-
30
- // 禁用不必要的多媒体解码
31
- '--mute-audio',
32
-
33
- // 避免崩溃时弹窗
34
- '--no-default-browser-check',
35
- '--no-first-run',
36
- '--headless=new',
37
- );
38
-
39
- args.push(
40
- `--remote-debugging-port=9222`,
41
- '--remote-debugging-address=0.0.0.0',
42
- 'about:blank',
43
- );
44
-
45
- const chromePath = '/usr/bin/google-chrome';
46
-
47
- // 启动 Chrome 并启用远程调试
48
- const chrome = spawn(chromePath, args, {
49
- env: { ...process.env, DISPLAY: ':99' }
50
- });
51
-
52
- chrome.stdout.on('data', (data) => {
53
- console.log(`stdout: ${data}`);
54
- });
55
-
56
- chrome.stderr.on('data', (data) => {
57
- console.error(`stderr: ${data}`);
58
- });
59
-
60
- chrome.on('close', (code) => {
61
- console.log(`Chrome process exited with code ${code}`);
62
- });
63
-
64
- console.log('Browser launched and ready...');
65
-
66
- // 保持进程不退出,并监听中止信号
67
- process.stdin.resume();
68
- process.on('SIGINT', () => process.exit());
69
- process.on('SIGTERM', () => process.exit());