intuned-runtime 1.0.0__py3-none-any.whl → 1.1.1__py3-none-any.whl

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 (82) hide show
  1. intuned_cli/__init__.py +40 -0
  2. intuned_cli/commands/__init__.py +18 -0
  3. intuned_cli/commands/attempt_api_command.py +51 -0
  4. intuned_cli/commands/attempt_authsession_check_command.py +38 -0
  5. intuned_cli/commands/attempt_authsession_command.py +12 -0
  6. intuned_cli/commands/attempt_authsession_create_command.py +44 -0
  7. intuned_cli/commands/attempt_command.py +12 -0
  8. intuned_cli/commands/command.py +26 -0
  9. intuned_cli/commands/deploy_command.py +47 -0
  10. intuned_cli/commands/init_command.py +21 -0
  11. intuned_cli/commands/run_api_command.py +69 -0
  12. intuned_cli/commands/run_authsession_command.py +12 -0
  13. intuned_cli/commands/run_authsession_create_command.py +50 -0
  14. intuned_cli/commands/run_authsession_update_command.py +52 -0
  15. intuned_cli/commands/run_authsession_validate_command.py +49 -0
  16. intuned_cli/commands/run_command.py +12 -0
  17. intuned_cli/constants/__init__.py +1 -0
  18. intuned_cli/constants/readme.py +134 -0
  19. intuned_cli/controller/__test__/__init__.py +0 -0
  20. intuned_cli/controller/__test__/test_api.py +529 -0
  21. intuned_cli/controller/__test__/test_authsession.py +907 -0
  22. intuned_cli/controller/api.py +212 -0
  23. intuned_cli/controller/authsession.py +458 -0
  24. intuned_cli/controller/deploy.py +352 -0
  25. intuned_cli/controller/init.py +97 -0
  26. intuned_cli/types.py +33 -0
  27. intuned_cli/utils/api_helpers.py +32 -0
  28. intuned_cli/utils/auth_session_helpers.py +57 -0
  29. intuned_cli/utils/backend.py +5 -0
  30. intuned_cli/utils/confirmation.py +0 -0
  31. intuned_cli/utils/console.py +6 -0
  32. intuned_cli/utils/error.py +27 -0
  33. intuned_cli/utils/exclusions.py +40 -0
  34. intuned_cli/utils/get_auth_parameters.py +18 -0
  35. intuned_cli/utils/import_function.py +15 -0
  36. intuned_cli/utils/timeout.py +25 -0
  37. {cli → intuned_internal_cli}/__init__.py +1 -1
  38. {cli → intuned_internal_cli}/commands/__init__.py +2 -0
  39. {cli → intuned_internal_cli}/commands/ai_source/deploy.py +1 -1
  40. {cli → intuned_internal_cli}/commands/browser/save_state.py +2 -2
  41. {cli → intuned_internal_cli}/commands/project/auth_session/load.py +2 -2
  42. {cli → intuned_internal_cli}/commands/project/type_check.py +39 -32
  43. intuned_internal_cli/commands/root.py +15 -0
  44. {intuned_runtime-1.0.0.dist-info → intuned_runtime-1.1.1.dist-info}/METADATA +5 -1
  45. intuned_runtime-1.1.1.dist-info/RECORD +99 -0
  46. intuned_runtime-1.1.1.dist-info/entry_points.txt +4 -0
  47. runtime/__init__.py +2 -1
  48. runtime/backend_functions/_call_backend_function.py +0 -5
  49. runtime/browser/__init__.py +5 -2
  50. runtime/browser/helpers.py +21 -0
  51. runtime/browser/launch_browser.py +31 -0
  52. runtime/browser/launch_camoufox.py +61 -0
  53. runtime/browser/launch_chromium.py +64 -61
  54. runtime/browser/storage_state.py +11 -12
  55. runtime/env.py +4 -0
  56. runtime/errors/run_api_errors.py +14 -10
  57. runtime/run/playwright_constructs.py +6 -5
  58. runtime/run/pydantic_encoder.py +15 -0
  59. runtime/run/run_api.py +5 -4
  60. runtime/types/run_types.py +16 -0
  61. intuned_runtime-1.0.0.dist-info/RECORD +0 -58
  62. intuned_runtime-1.0.0.dist-info/entry_points.txt +0 -3
  63. {cli → intuned_internal_cli}/commands/ai_source/__init__.py +0 -0
  64. {cli → intuned_internal_cli}/commands/ai_source/ai_source.py +0 -0
  65. {cli → intuned_internal_cli}/commands/browser/__init__.py +0 -0
  66. {cli → intuned_internal_cli}/commands/init.py +0 -0
  67. {cli → intuned_internal_cli}/commands/project/__init__.py +0 -0
  68. {cli → intuned_internal_cli}/commands/project/auth_session/__init__.py +0 -0
  69. {cli → intuned_internal_cli}/commands/project/auth_session/check.py +0 -0
  70. {cli → intuned_internal_cli}/commands/project/auth_session/create.py +0 -0
  71. {cli → intuned_internal_cli}/commands/project/project.py +0 -0
  72. {cli → intuned_internal_cli}/commands/project/run.py +0 -0
  73. {cli → intuned_internal_cli}/commands/project/run_interface.py +0 -0
  74. {cli → intuned_internal_cli}/commands/project/upgrade.py +0 -0
  75. {cli → intuned_internal_cli}/commands/publish_packages.py +0 -0
  76. {cli → intuned_internal_cli}/logger.py +0 -0
  77. {cli → intuned_internal_cli}/utils/ai_source_project.py +0 -0
  78. {cli → intuned_internal_cli}/utils/code_tree.py +0 -0
  79. {cli → intuned_internal_cli}/utils/run_apis.py +0 -0
  80. {cli → intuned_internal_cli}/utils/unix_socket.py +0 -0
  81. {intuned_runtime-1.0.0.dist-info → intuned_runtime-1.1.1.dist-info}/LICENSE +0 -0
  82. {intuned_runtime-1.0.0.dist-info → intuned_runtime-1.1.1.dist-info}/WHEEL +0 -0
@@ -1,31 +1,15 @@
1
+ import asyncio
1
2
  import json
3
+ import logging
2
4
  import os
3
- import tempfile
4
5
  from contextlib import asynccontextmanager
5
- from os.path import join
6
6
  from typing import Any
7
- from typing import Optional
8
- from typing import Literal
9
- import logging
10
- import aiofiles
11
- from playwright.async_api import async_playwright
12
- from playwright.async_api import Browser
13
- from playwright.async_api import ProxySettings
14
7
 
15
- logger = logging.getLogger(__name__)
8
+ import anyio
16
9
 
10
+ from .helpers import get_proxy_env
17
11
 
18
- def get_proxy_env() -> Optional[ProxySettings]:
19
- server = os.getenv("PROXY_SERVER")
20
- username = os.getenv("PROXY_USERNAME")
21
- password = os.getenv("PROXY_PASSWORD")
22
- if server is None or username is None or password is None:
23
- return None
24
- return {
25
- "server": server,
26
- "username": username,
27
- "password": password,
28
- }
12
+ logger = logging.getLogger(__name__)
29
13
 
30
14
 
31
15
  chromium_launch_args_to_ignore = [
@@ -64,12 +48,12 @@ chromium_launch_args_to_ignore = [
64
48
 
65
49
  async def create_user_dir_with_preferences():
66
50
  # Create a temporary directory
67
- playwright_temp_dir = tempfile.mkdtemp(prefix="pw-")
68
- user_dir = join(playwright_temp_dir, "userdir")
69
- default_dir = join(user_dir, "Default")
51
+ playwright_temp_dir = anyio.Path(await anyio.mkdtemp(prefix="pw-"))
52
+ user_dir = playwright_temp_dir / "userdir"
53
+ default_dir = user_dir / "Default"
70
54
 
71
55
  # Create the default directory recursively
72
- os.makedirs(default_dir, exist_ok=True)
56
+ await default_dir.mkdir(parents=True, exist_ok=True)
73
57
 
74
58
  # Preferences data
75
59
  preferences = {
@@ -79,10 +63,10 @@ async def create_user_dir_with_preferences():
79
63
  }
80
64
 
81
65
  # Write preferences to file
82
- async with aiofiles.open(join(default_dir, "Preferences"), mode="w") as f:
66
+ async with await (default_dir / "Preferences").open("w") as f:
83
67
  await f.write(json.dumps(preferences))
84
68
 
85
- return os.path.abspath(user_dir)
69
+ return await user_dir.absolute(), await playwright_temp_dir.absolute()
86
70
 
87
71
 
88
72
  extra_args = [
@@ -95,7 +79,9 @@ extra_args = [
95
79
  "--disable-blink-features=AutomationControlled",
96
80
  ]
97
81
 
98
- default_user_agent = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36"
82
+ default_user_agent = (
83
+ "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36"
84
+ )
99
85
 
100
86
 
101
87
  @asynccontextmanager
@@ -105,13 +91,17 @@ async def launch_chromium(
105
91
  cdp_address: str | None = None,
106
92
  **kwargs: Any,
107
93
  ):
94
+ from playwright.async_api import async_playwright
95
+ from playwright.async_api import Browser
96
+
108
97
  async with async_playwright() as playwright:
109
98
  if cdp_address is not None:
110
99
  browser: Browser = await playwright.chromium.connect_over_cdp(cdp_address)
111
100
  context = browser.contexts[0]
112
- dir = None
101
+ user_preferences_dir = None
102
+ dir_to_clean = None
113
103
  else:
114
- dir = await create_user_dir_with_preferences()
104
+ user_preferences_dir, dir_to_clean = await create_user_dir_with_preferences()
115
105
  if kwargs.get("proxy") is None:
116
106
  proxy_env = get_proxy_env()
117
107
  else:
@@ -126,7 +116,7 @@ async def launch_chromium(
126
116
  extra_args.append("--headless=new")
127
117
 
128
118
  context = await playwright.chromium.launch_persistent_context(
129
- dir,
119
+ os.fspath(user_preferences_dir),
130
120
  headless=headless,
131
121
  viewport=viewport,
132
122
  proxy=proxy_env,
@@ -138,9 +128,19 @@ async def launch_chromium(
138
128
  context.set_default_timeout(timeout * 1000)
139
129
 
140
130
  async def remove_dir_after_close(*_: Any, **__: Any) -> None:
141
- if not dir:
131
+ if not dir_to_clean:
142
132
  return
143
- os.system(f"rm -rf {os.path.realpath(dir)}")
133
+ if not await dir_to_clean.exists():
134
+ return
135
+
136
+ process = await asyncio.create_subprocess_exec(
137
+ "rm",
138
+ "-rf",
139
+ os.fspath(dir_to_clean), # Using subprocess to remove the directory
140
+ stdout=asyncio.subprocess.DEVNULL,
141
+ stderr=asyncio.subprocess.DEVNULL,
142
+ )
143
+ await process.wait()
144
144
 
145
145
  context.once("close", remove_dir_after_close)
146
146
  yield context, context.pages[0]
@@ -149,31 +149,25 @@ async def launch_chromium(
149
149
  async def dangerous_launch_chromium(
150
150
  headless: bool = True,
151
151
  timeout: int = 10,
152
- web_socket: str | None = None,
153
152
  cdp_url: str | None = None,
154
- connection_method: Literal["ws", "cdp"] | None = None,
153
+ port: int | None = None,
155
154
  **kwargs: Any,
156
155
  ):
156
+ from playwright.async_api import async_playwright
157
+ from playwright.async_api import Browser
158
+
157
159
  playwright = await async_playwright().start()
158
- if web_socket is not None and connection_method == "ws":
159
- logging.info(f"Connecting to ws: {web_socket}")
160
- browser: Browser = await playwright.chromium.connect(web_socket)
161
- browser.on("disconnected", lambda: logging.info("Browser Session disconnected"))
162
- await browser.new_context(
163
- viewport={"width": 1280, "height": 800}, user_agent=default_user_agent
164
- )
165
- context = browser.contexts[0]
166
- dir = None
167
- elif cdp_url is not None and connection_method == "cdp":
160
+ if cdp_url is not None:
168
161
  logging.info(f"Connecting to cdp: {cdp_url}")
169
162
  browser: Browser = await playwright.chromium.connect_over_cdp(cdp_url)
170
- browser.on("disconnected", lambda: logging.info("Browser Session disconnected"))
163
+ browser.on("disconnected", lambda _: logging.info("Browser Session disconnected"))
171
164
  context = browser.contexts[0]
172
- dir = None
173
- elif web_socket is None and cdp_url is None and connection_method is None:
165
+ user_preferences_dir = None
166
+ dir_to_clean = None
167
+ else:
174
168
  logging.info("Launching local browser")
175
- dir = await create_user_dir_with_preferences()
176
- logging.info(f"Using user data directory: {dir}")
169
+ user_preferences_dir, dir_to_clean = await create_user_dir_with_preferences()
170
+ logging.info(f"Using user data directory: {user_preferences_dir}")
177
171
  if kwargs.get("proxy") is None:
178
172
  proxy_env = get_proxy_env()
179
173
  else:
@@ -187,8 +181,11 @@ async def dangerous_launch_chromium(
187
181
  chromium_launch_args_to_ignore.append("--headless")
188
182
  extra_args.append("--headless=new")
189
183
 
184
+ if port:
185
+ extra_args.append(f"--remote-debugging-port={port}")
186
+
190
187
  context = await playwright.chromium.launch_persistent_context(
191
- dir,
188
+ os.fspath(user_preferences_dir),
192
189
  headless=headless,
193
190
  viewport=viewport,
194
191
  proxy=proxy_env,
@@ -197,16 +194,22 @@ async def dangerous_launch_chromium(
197
194
  args=extra_args,
198
195
  **kwargs,
199
196
  )
200
- else:
201
- raise ValueError(
202
- "You have to provide method if you are launching a remote browser with ws or cdp"
203
- )
204
- context.set_default_timeout(timeout * 1000)
197
+ context.set_default_timeout(timeout * 1000)
205
198
 
206
- async def remove_dir_after_close(*_: Any, **__: Any) -> None:
207
- if not dir:
208
- return
209
- os.system(f"rm -rf {os.path.realpath(dir)}")
199
+ async def remove_dir_after_close(*_: Any, **__: Any) -> None:
200
+ if not dir_to_clean:
201
+ return
202
+ if not await dir_to_clean.exists():
203
+ return
210
204
 
211
- context.once("close", remove_dir_after_close)
205
+ process = await asyncio.create_subprocess_exec(
206
+ "rm",
207
+ "-rf",
208
+ os.fspath(dir_to_clean), # Using subprocess to remove the directory
209
+ stdout=asyncio.subprocess.DEVNULL,
210
+ stderr=asyncio.subprocess.DEVNULL,
211
+ )
212
+ await process.wait()
213
+
214
+ context.once("close", remove_dir_after_close)
212
215
  return playwright, context
@@ -1,23 +1,22 @@
1
1
  from typing import Any
2
+ from typing import TYPE_CHECKING
2
3
 
3
- from playwright.async_api import BrowserContext
4
- from playwright.async_api import Error as PlaywrightError
4
+ if TYPE_CHECKING:
5
+ from playwright.async_api import BrowserContext
6
+
7
+ import logging
5
8
 
6
9
  from ..types.run_types import Cookie
7
10
  from ..types.run_types import Origin
8
11
  from ..types.run_types import SessionStorageOrigin
9
12
  from ..types.run_types import StorageState
10
13
 
11
- import logging
12
-
13
14
  logger = logging.getLogger(__name__)
14
15
 
15
16
 
16
- async def set_storage_state(context: BrowserContext, state: StorageState):
17
+ async def set_storage_state(context: "BrowserContext", state: StorageState):
17
18
  # Add cookies if they exist
18
- await context.add_cookies(
19
- [cookie.model_dump(by_alias=True) for cookie in state.cookies]
20
- ) # type: ignore
19
+ await context.add_cookies([cookie.model_dump(by_alias=True) for cookie in state.cookies]) # type: ignore
21
20
 
22
21
  # Apply localStorage for each origin
23
22
  page = await context.new_page()
@@ -67,7 +66,9 @@ async def set_storage_state(context: BrowserContext, state: StorageState):
67
66
  await page.close()
68
67
 
69
68
 
70
- async def get_storage_state(context: BrowserContext) -> StorageState:
69
+ async def get_storage_state(context: "BrowserContext") -> StorageState:
70
+ from playwright.async_api import Error as PlaywrightError
71
+
71
72
  storage_state = await context.storage_state()
72
73
  cookies = storage_state.get("cookies") or []
73
74
  origins = storage_state.get("origins") or []
@@ -92,9 +93,7 @@ async def get_storage_state(context: BrowserContext) -> StorageState:
92
93
  session_storage.append(SessionStorageOrigin(**session_data))
93
94
  except PlaywrightError as e:
94
95
  if "SecurityError" in e.message:
95
- logger.warning(
96
- f"Could not get storage state for page due '{page.url}' to security error."
97
- )
96
+ logger.warning(f"Could not get storage state for page due '{page.url}' to security error.")
98
97
  continue
99
98
  raise e
100
99
 
runtime/env.py CHANGED
@@ -11,3 +11,7 @@ def get_project_id():
11
11
 
12
12
  def get_functions_domain():
13
13
  return os.environ.get("FUNCTIONS_DOMAIN")
14
+
15
+
16
+ def get_browser_type():
17
+ return os.environ.get("BROWSER_TYPE")
@@ -66,22 +66,30 @@ class AutomationNotCoroutineError(RunApiError):
66
66
 
67
67
 
68
68
  class AutomationError(RunApiError):
69
- def __init__(self, exception: BaseException):
69
+ _error: BaseException
70
+
71
+ def __init__(self, error: BaseException):
70
72
  # Get all public attributes of the exception
71
- error_props = {key: str(value) for key, value in exception.__dict__.items() if not key.startswith("_")}
73
+ error_props = {key: str(value) for key, value in error.__dict__.items() if not key.startswith("_")}
72
74
 
73
75
  super().__init__(
74
- str(exception),
76
+ str(error),
75
77
  "AutomationError",
76
78
  )
77
79
 
80
+ self._error = error
81
+
78
82
  self.details = {
79
83
  "error_props": error_props,
80
- "error_type": exception.__class__.__name__,
81
- "name": exception.__class__.__name__,
82
- "message": str(exception),
84
+ "error_type": error.__class__.__name__,
85
+ "name": error.__class__.__name__,
86
+ "message": str(error),
83
87
  }
84
88
 
89
+ @property
90
+ def error(self) -> BaseException:
91
+ return self._error
92
+
85
93
 
86
94
  class AutomationTimeoutError(RunApiError):
87
95
  def __init__(self):
@@ -111,10 +119,6 @@ class InternalInvalidInputError(RunApiError):
111
119
  def __init__(self, message: str, details: Any | None = None):
112
120
  super().__init__(
113
121
  f"Internal error: {message}. Please report this issue to the Intuned team.",
114
- RunApiResponse(
115
- status_code=500,
116
- response={"error": "Internal error", "message": f"Internal error: {message}"},
117
- ),
118
122
  "InternalInvalidInputError",
119
123
  )
120
124
  self.details = details
@@ -1,18 +1,19 @@
1
1
  from contextlib import asynccontextmanager
2
+ from typing import TYPE_CHECKING
2
3
 
3
- from playwright.async_api import ProxySettings
4
-
5
- from ..browser import launch_chromium
4
+ if TYPE_CHECKING:
5
+ from playwright.async_api import ProxySettings
6
+ from ..browser import launch_browser
6
7
 
7
8
 
8
9
  @asynccontextmanager
9
10
  async def get_production_playwright_constructs(
10
- proxy: ProxySettings | None = None,
11
+ proxy: "ProxySettings | None" = None,
11
12
  headless: bool = False,
12
13
  *,
13
14
  cdp_address: str | None = None,
14
15
  ):
15
- async with launch_chromium(headless=headless, cdp_address=cdp_address, proxy=proxy) as (context, page):
16
+ async with launch_browser(headless=headless, cdp_address=cdp_address, proxy=proxy) as (context, page):
16
17
  try:
17
18
  yield context, page
18
19
  finally:
@@ -0,0 +1,15 @@
1
+ import json
2
+ from typing import Any
3
+ from typing import override
4
+
5
+ from pydantic import BaseModel
6
+
7
+
8
+ class PydanticEncoder(json.JSONEncoder):
9
+ @override
10
+ def default(self, o: Any):
11
+ if isinstance(o, BaseModel):
12
+ return o.model_dump(
13
+ by_alias=True,
14
+ )
15
+ return super().default(o)
runtime/run/run_api.py CHANGED
@@ -31,7 +31,7 @@ from ..errors import AutomationError
31
31
  from ..errors import AutomationNotCoroutineError
32
32
  from ..errors import NoAutomationInApiError
33
33
  from .playwright_constructs import get_production_playwright_constructs
34
- from .playwright_constructs import ProxySettings
34
+ from .pydantic_encoder import PydanticEncoder
35
35
 
36
36
 
37
37
  def import_function_from_api_dir(
@@ -111,7 +111,9 @@ async def run_api(
111
111
  parameters: RunApiParameters,
112
112
  *,
113
113
  import_function: ImportFunction | None = None,
114
- ):
114
+ ) -> RunAutomationSuccessResult:
115
+ from playwright.async_api import ProxySettings
116
+
115
117
  trace_started: bool = False
116
118
 
117
119
  headless = False
@@ -145,7 +147,6 @@ async def run_api(
145
147
  context=context,
146
148
  state=state,
147
149
  )
148
-
149
150
  import_function = import_function or (
150
151
  lambda file_path, name=None: import_function_from_api_dir(
151
152
  file_path=file_path, automation_function_name=name
@@ -181,7 +182,7 @@ async def run_api(
181
182
  else:
182
183
  automation_result = await automation_coroutine_with_page(parameters.automation_function.params)
183
184
  try:
184
- json.dumps(automation_result)
185
+ json.dumps(automation_result, cls=PydanticEncoder)
185
186
  except TypeError as e:
186
187
  raise AutomationError(TypeError("Result is not JSON serializable")) from e
187
188
 
@@ -5,6 +5,7 @@ from typing import List
5
5
  from typing import Literal
6
6
  from typing import Optional
7
7
  from typing import Union
8
+ from urllib.parse import urlparse
8
9
 
9
10
  from pydantic import BaseModel
10
11
  from pydantic import ConfigDict
@@ -24,6 +25,21 @@ class ProxyConfig(CamelBaseModel):
24
25
  username: str
25
26
  password: str
26
27
 
28
+ @classmethod
29
+ def parse_from_str(cls, proxy_str: str) -> "ProxyConfig":
30
+ parts = urlparse(proxy_str)
31
+ username = parts.username or ""
32
+ password = parts.password or ""
33
+ hostname = parts.hostname or ""
34
+ port = f":{parts.port}" if parts.port else ""
35
+ domain = f"{parts.scheme}://{hostname}{port}"
36
+
37
+ return ProxyConfig(
38
+ server=domain,
39
+ username=username,
40
+ password=password,
41
+ )
42
+
27
43
 
28
44
  class SameSite(str, Enum):
29
45
  STRICT = "Strict"
@@ -1,58 +0,0 @@
1
- cli/__init__.py,sha256=QvTM82L3VLVOFGpu_bziWupgwjsAgv07u6o_gUwO3z0,1314
2
- cli/commands/__init__.py,sha256=QF-zy-iOZXY-9m-1O-JjWnugjulgJtsODtnkhvlNKq8,944
3
- cli/commands/ai_source/__init__.py,sha256=lg7owgcK8owNn2a4VBUP9RKxzFsLruhtnnQV0F_z6pc,149
4
- cli/commands/ai_source/ai_source.py,sha256=2woQtCmhxKvLfEz832eUoCT9gMsuSvEE6rMnHSYXC7w,138
5
- cli/commands/ai_source/deploy.py,sha256=XVN_alilwIaoVniuSpE8RkAveuaB3MaUtsRjIcpQTXo,2440
6
- cli/commands/browser/__init__.py,sha256=AuVbvh7aSBTFKYvewXZyPoIvfBTe2uHiPcnaAkzapas,95
7
- cli/commands/browser/save_state.py,sha256=eHKfvBfeFR_U9VQbsjOnIZjWepyDjNn9NL3naDYWP2s,841
8
- cli/commands/init.py,sha256=8rWBenWZfwNtLxOBqhEMbOATyQNEnmDUmrFJ1xBGyxI,4384
9
- cli/commands/project/__init__.py,sha256=t97wvhSenerYRdbSeCKXqHASA6EWA3lc1hnRhF9baOE,734
10
- cli/commands/project/auth_session/__init__.py,sha256=gt7mlaW6xmqAc_4-pfF_FiecsR51C6fqCaq_NFbcbwA,300
11
- cli/commands/project/auth_session/check.py,sha256=AFILp7m34nAO_RD3IfRpuJm5Zh0wnCRtBXqIrerdbwo,4565
12
- cli/commands/project/auth_session/create.py,sha256=r-eYu3uLUo2mzF836CbVgu4oBzcIIDekzzFwwekxmg0,3374
13
- cli/commands/project/auth_session/load.py,sha256=UUvg9Vyj15xiR44XlJzojLoFm5esv-o4E3qA3JqnBsE,1201
14
- cli/commands/project/project.py,sha256=_MSh6Xor2Cbh-ItifwgOPq_BP8UDuKB7S6w796FULKQ,137
15
- cli/commands/project/run.py,sha256=FDYYkU24aURYbljyYLFo8wLF-nvb86EVr9gMEjAfeE0,12274
16
- cli/commands/project/run_interface.py,sha256=4RyR8WZriIF7Va4z1wt-q6zZDQOI31n62Ho2dyimzUY,8717
17
- cli/commands/project/type_check.py,sha256=3BKMqTzJ73_J-RYrjba7Yv2mM_VzHR0gnXQEg_Us7JA,3384
18
- cli/commands/project/upgrade.py,sha256=XmkZLflM4O-mwvhwcswlZpazRotwi3xesLgE0Zz8fTI,3061
19
- cli/commands/publish_packages.py,sha256=sijkaG7_s0I1EWgLekGy1qm8Aqi_gYY8poXbMX0B6Yw,10505
20
- cli/logger.py,sha256=bZK3q-KUdGxk_qzDb6pn-n0LOhKJvi6a9p8oSwZtq3s,594
21
- cli/utils/ai_source_project.py,sha256=xUCM6p3i1XN4bJbuQz8LCzeI4BwqAdSvCl_vwDAEi0k,831
22
- cli/utils/code_tree.py,sha256=1wfxZoQ5kRCfqs2SEPAicbAIPTiD6P1LxSuwYu_eeaI,2790
23
- cli/utils/run_apis.py,sha256=Zee4zkgt9R8XY1XCGzj2Nc4zJ3jlRz1xnO493wotuWw,4690
24
- cli/utils/unix_socket.py,sha256=UISmkJMHrir5iBLUm6vxC3uzTGIFyOk_wa0C9LUw4Cc,1889
25
- runtime/__init__.py,sha256=wgS7k3f10LBbjSYJdjKeKUptizNw6OrBgNx-ECT5Ox8,124
26
- runtime/backend_functions/__init__.py,sha256=j2EaK4FK8bmdFtqc5FxtFwx1KhIn_7qKPChrrAhJI3s,119
27
- runtime/backend_functions/_call_backend_function.py,sha256=sER0op3vE9EVEB5-ZNwpGraxrqkFh5ZgOIV2B5fgmg4,3028
28
- runtime/backend_functions/get_auth_session_parameters.py,sha256=pOvB7XiWpphEuBpazdKALw9EWgBU1PeY3gkzBfVLpkc,869
29
- runtime/browser/__init__.py,sha256=9Nqf-80l1F7KGjy2pYBC5S5SeEXJ4YJ4Dl71hi_GWdI,132
30
- runtime/browser/launch_chromium.py,sha256=sML_XpjmlMf5QpuqMGeaS42D43pAXWKswm2q-3a2jAM,7459
31
- runtime/browser/storage_state.py,sha256=AmiHMfWbFVr7XUEYXoaWWZH4pXGdPv4wTNPXunm19rA,3591
32
- runtime/context/__init__.py,sha256=hg8ejm4bJy4tNkwmZ9lKgYJx6bU7OgOdBS684Uv5XGg,73
33
- runtime/context/context.py,sha256=pl_0x77_d5CiAznz1qGSk6o9cW-msNvlCt-2eFoMKlA,1739
34
- runtime/env.py,sha256=h4BJI-XVSZKgtTxjkzj2HsyN3DlY5Ml9GZqeH4CKDE8,238
35
- runtime/errors/__init__.py,sha256=oqiBSvT_yFLQ3hG0AbCUA3WYFaxkTDVkDMSy59xvBCo,688
36
- runtime/errors/auth_session_errors.py,sha256=6b4XTI8UCDHDPX4jEA8_HyrNUp4VZ1TrEA8DRh6Z3rM,228
37
- runtime/errors/run_api_errors.py,sha256=etqS18ZxDzr30qUezG6D8gcH0Yc1XNtQ8GMkUZx3Rmw,3400
38
- runtime/errors/trace_errors.py,sha256=Lzfo0sH3zGaWz1kn5DHcAXQMn3aR2y2bnauj6xP1LYE,110
39
- runtime/helpers/__init__.py,sha256=jozYPKHgZJ7Na5U1Wjt83egzjPATMZ_OMInEI6swSbY,234
40
- runtime/helpers/extend_payload.py,sha256=towZF08WTpTTDBL4AV1bUU3XpKAQHEB66kGUfTICDe0,246
41
- runtime/helpers/extend_timeout.py,sha256=KjfSLEUrqoz7v00rhnPAKq2OmUzEzcv-eQ3M8c2U46s,348
42
- runtime/helpers/get_auth_session_parameters.py,sha256=7bopGhJ7vjKAn_UxnHSAah-k2rVOPbq0zi9FQOOCFds,472
43
- runtime/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
44
- runtime/run/__init__.py,sha256=zxMYVb7hn147YTrhMLsrcX6-KTd71HLrYHstJOWeWXQ,52
45
- runtime/run/intuned_settings.py,sha256=vy2-ktEzUfUp5Z90dp3l7jPKHNjgB-8GSMDgAY-rYaU,1074
46
- runtime/run/playwright_constructs.py,sha256=kOa95d4m4DTcIDKq_QajBs-9FkPz5yZFcsafLtx5288,519
47
- runtime/run/run_api.py,sha256=88u91YS5-m_aGwQnNfeN7Mszm1MRfOmciCpzuAXjdoI,8853
48
- runtime/run/traces.py,sha256=fKzh11LqV47ujgq_9I2tdp-dgld566wffWaHwU_4gis,1123
49
- runtime/types/__init__.py,sha256=IJkDfqsau8F8R_j8TO6j-JwW4ElQr6aU6LNaWRehg5U,401
50
- runtime/types/payload.py,sha256=sty8HgDEn3nJbZrwEOMCXyuG7_ICGDwlBIIWSON5ABY,124
51
- runtime/types/run_types.py,sha256=_ZoW0rv4VnjqVwVxJBWsdh0S5toppNL3AfL456rn5yM,4076
52
- runtime_helpers/__init__.py,sha256=XBrEiE9yNC8Lgn8NgIkqNXbI6e4ap237E83Zj_nlhCQ,249
53
- runtime_helpers/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
54
- intuned_runtime-1.0.0.dist-info/LICENSE,sha256=9LIjQdgyU_ptzNIfItNCR7VmEHqYnrY1f1XwOreKFI0,3714
55
- intuned_runtime-1.0.0.dist-info/METADATA,sha256=i6-dbJpG78FttN_tw7HgA3qd_fE99cHW7bkASh2z16o,5134
56
- intuned_runtime-1.0.0.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
57
- intuned_runtime-1.0.0.dist-info/entry_points.txt,sha256=4VXmTtVfaolAgt2owC9QF1bQpzCVv6Qh_cqW6ZGpftw,35
58
- intuned_runtime-1.0.0.dist-info/RECORD,,
@@ -1,3 +0,0 @@
1
- [console_scripts]
2
- intuned=cli:run
3
-
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes