notte 0.0.dev0__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.
Files changed (306) hide show
  1. notte-0.0.dev0/.dockerignore +5 -0
  2. notte-0.0.dev0/.env.example +31 -0
  3. notte-0.0.dev0/.github/release.yml +8 -0
  4. notte-0.0.dev0/.github/scripts/translate_readme.py +52 -0
  5. notte-0.0.dev0/.github/workflows/benchmark.yml +67 -0
  6. notte-0.0.dev0/.github/workflows/pypi-release.yml +71 -0
  7. notte-0.0.dev0/.github/workflows/slack-monitor.yml +76 -0
  8. notte-0.0.dev0/.github/workflows/test-cicd.yml +93 -0
  9. notte-0.0.dev0/.github/workflows/translate-readme.yml +47 -0
  10. notte-0.0.dev0/.gitignore +179 -0
  11. notte-0.0.dev0/.pre-commit-config.yaml +33 -0
  12. notte-0.0.dev0/.python-version +1 -0
  13. notte-0.0.dev0/.vscode/extensions.json +6 -0
  14. notte-0.0.dev0/.vscode/settings.json +38 -0
  15. notte-0.0.dev0/Dockerfile +82 -0
  16. notte-0.0.dev0/LICENSE +201 -0
  17. notte-0.0.dev0/PKG-INFO +244 -0
  18. notte-0.0.dev0/README.md +227 -0
  19. notte-0.0.dev0/build.sh +31 -0
  20. notte-0.0.dev0/docs/CONTRIBUTING.md +21 -0
  21. notte-0.0.dev0/docs/archives/20250307_README.md +210 -0
  22. notte-0.0.dev0/docs/gifs/v1.gif +0 -0
  23. notte-0.0.dev0/docs/gifs/v2.gif +0 -0
  24. notte-0.0.dev0/docs/gifs/v3.gif +0 -0
  25. notte-0.0.dev0/docs/logo/banner.png +0 -0
  26. notte-0.0.dev0/docs/logo/bgd.png +0 -0
  27. notte-0.0.dev0/docs/run_notte_with_external_browsers.md +24 -0
  28. notte-0.0.dev0/docs/run_ollama_local_models.md +51 -0
  29. notte-0.0.dev0/docs/scraping_tutorial.md +111 -0
  30. notte-0.0.dev0/docs/sdk_tutorial.md +90 -0
  31. notte-0.0.dev0/docs/setup.md +21 -0
  32. notte-0.0.dev0/examples/__init__.py +0 -0
  33. notte-0.0.dev0/examples/benchmark_params.toml +28 -0
  34. notte-0.0.dev0/examples/benchmarks.md +81 -0
  35. notte-0.0.dev0/examples/cli_agent.py +25 -0
  36. notte-0.0.dev0/examples/leetcode_agent.py +36 -0
  37. notte-0.0.dev0/examples/notifier_agent.py +57 -0
  38. notte-0.0.dev0/examples/vault_agent.py +42 -0
  39. notte-0.0.dev0/makefile +57 -0
  40. notte-0.0.dev0/packages/notte-agent/README.md +0 -0
  41. notte-0.0.dev0/packages/notte-agent/pyproject.toml +22 -0
  42. notte-0.0.dev0/packages/notte-agent/src/notte_agent/README.md +58 -0
  43. notte-0.0.dev0/packages/notte-agent/src/notte_agent/__init__.py +7 -0
  44. notte-0.0.dev0/packages/notte-agent/src/notte_agent/common/__init__.py +0 -0
  45. notte-0.0.dev0/packages/notte-agent/src/notte_agent/common/base.py +14 -0
  46. notte-0.0.dev0/packages/notte-agent/src/notte_agent/common/captcha_detector.py +87 -0
  47. notte-0.0.dev0/packages/notte-agent/src/notte_agent/common/config.py +219 -0
  48. notte-0.0.dev0/packages/notte-agent/src/notte_agent/common/conversation.py +246 -0
  49. notte-0.0.dev0/packages/notte-agent/src/notte_agent/common/notifier.py +55 -0
  50. notte-0.0.dev0/packages/notte-agent/src/notte_agent/common/parser.py +78 -0
  51. notte-0.0.dev0/packages/notte-agent/src/notte_agent/common/perception.py +21 -0
  52. notte-0.0.dev0/packages/notte-agent/src/notte_agent/common/prompt.py +15 -0
  53. notte-0.0.dev0/packages/notte-agent/src/notte_agent/common/safe_executor.py +100 -0
  54. notte-0.0.dev0/packages/notte-agent/src/notte_agent/common/trajectory_history.py +100 -0
  55. notte-0.0.dev0/packages/notte-agent/src/notte_agent/common/types.py +41 -0
  56. notte-0.0.dev0/packages/notte-agent/src/notte_agent/common/validator.py +90 -0
  57. notte-0.0.dev0/packages/notte-agent/src/notte_agent/falco/__init__.py +0 -0
  58. notte-0.0.dev0/packages/notte-agent/src/notte_agent/falco/agent.py +343 -0
  59. notte-0.0.dev0/packages/notte-agent/src/notte_agent/falco/perception.py +83 -0
  60. notte-0.0.dev0/packages/notte-agent/src/notte_agent/falco/prompt.py +132 -0
  61. notte-0.0.dev0/packages/notte-agent/src/notte_agent/falco/prompts/system_prompt_multi_actions.md +107 -0
  62. notte-0.0.dev0/packages/notte-agent/src/notte_agent/falco/prompts/system_prompt_single_action.md +107 -0
  63. notte-0.0.dev0/packages/notte-agent/src/notte_agent/falco/trajectory_history.py +42 -0
  64. notte-0.0.dev0/packages/notte-agent/src/notte_agent/falco/types.py +132 -0
  65. notte-0.0.dev0/packages/notte-agent/src/notte_agent/gufo/__init__.py +0 -0
  66. notte-0.0.dev0/packages/notte-agent/src/notte_agent/gufo/agent.py +180 -0
  67. notte-0.0.dev0/packages/notte-agent/src/notte_agent/gufo/parser.py +79 -0
  68. notte-0.0.dev0/packages/notte-agent/src/notte_agent/gufo/perception.py +53 -0
  69. notte-0.0.dev0/packages/notte-agent/src/notte_agent/gufo/prompt.py +61 -0
  70. notte-0.0.dev0/packages/notte-agent/src/notte_agent/gufo/system.md +8 -0
  71. notte-0.0.dev0/packages/notte-agent/src/notte_agent/main.py +77 -0
  72. notte-0.0.dev0/packages/notte-agent/src/notte_agent/py.typed +0 -0
  73. notte-0.0.dev0/packages/notte-browser/README.md +5 -0
  74. notte-0.0.dev0/packages/notte-browser/pyproject.toml +26 -0
  75. notte-0.0.dev0/packages/notte-browser/src/notte_browser/__init__.py +3 -0
  76. notte-0.0.dev0/packages/notte-browser/src/notte_browser/controller.py +220 -0
  77. notte-0.0.dev0/packages/notte-browser/src/notte_browser/dom/__init__.py +0 -0
  78. notte-0.0.dev0/packages/notte-browser/src/notte_browser/dom/buildDomNode.js +516 -0
  79. notte-0.0.dev0/packages/notte-browser/src/notte_browser/dom/csspaths.py +155 -0
  80. notte-0.0.dev0/packages/notte-browser/src/notte_browser/dom/dropdown_menu.py +162 -0
  81. notte-0.0.dev0/packages/notte-browser/src/notte_browser/dom/id_generation.py +39 -0
  82. notte-0.0.dev0/packages/notte-browser/src/notte_browser/dom/locate.py +80 -0
  83. notte-0.0.dev0/packages/notte-browser/src/notte_browser/dom/parsing.py +158 -0
  84. notte-0.0.dev0/packages/notte-browser/src/notte_browser/dom/pipe.py +13 -0
  85. notte-0.0.dev0/packages/notte-browser/src/notte_browser/dom/types.py +465 -0
  86. notte-0.0.dev0/packages/notte-browser/src/notte_browser/dom/wait_for_page_update.py +132 -0
  87. notte-0.0.dev0/packages/notte-browser/src/notte_browser/errors.py +268 -0
  88. notte-0.0.dev0/packages/notte-browser/src/notte_browser/playwright.py +209 -0
  89. notte-0.0.dev0/packages/notte-browser/src/notte_browser/py.typed +0 -0
  90. notte-0.0.dev0/packages/notte-browser/src/notte_browser/rendering/__init__.py +0 -0
  91. notte-0.0.dev0/packages/notte-browser/src/notte_browser/rendering/interaction_only.py +125 -0
  92. notte-0.0.dev0/packages/notte-browser/src/notte_browser/rendering/json.py +47 -0
  93. notte-0.0.dev0/packages/notte-browser/src/notte_browser/rendering/markdown.py +71 -0
  94. notte-0.0.dev0/packages/notte-browser/src/notte_browser/rendering/pipe.py +87 -0
  95. notte-0.0.dev0/packages/notte-browser/src/notte_browser/rendering/pruning.py +124 -0
  96. notte-0.0.dev0/packages/notte-browser/src/notte_browser/resolution.py +118 -0
  97. notte-0.0.dev0/packages/notte-browser/src/notte_browser/scraping/__init__.py +0 -0
  98. notte-0.0.dev0/packages/notte-browser/src/notte_browser/scraping/llm_scraping.py +60 -0
  99. notte-0.0.dev0/packages/notte-browser/src/notte_browser/scraping/pipe.py +140 -0
  100. notte-0.0.dev0/packages/notte-browser/src/notte_browser/scraping/schema.py +145 -0
  101. notte-0.0.dev0/packages/notte-browser/src/notte_browser/scraping/simple.py +21 -0
  102. notte-0.0.dev0/packages/notte-browser/src/notte_browser/session.py +482 -0
  103. notte-0.0.dev0/packages/notte-browser/src/notte_browser/tagging/__init__.py +0 -0
  104. notte-0.0.dev0/packages/notte-browser/src/notte_browser/tagging/action/__init__.py +0 -0
  105. notte-0.0.dev0/packages/notte-browser/src/notte_browser/tagging/action/base.py +26 -0
  106. notte-0.0.dev0/packages/notte-browser/src/notte_browser/tagging/action/llm_taging/__init__.py +0 -0
  107. notte-0.0.dev0/packages/notte-browser/src/notte_browser/tagging/action/llm_taging/base.py +130 -0
  108. notte-0.0.dev0/packages/notte-browser/src/notte_browser/tagging/action/llm_taging/filtering.py +34 -0
  109. notte-0.0.dev0/packages/notte-browser/src/notte_browser/tagging/action/llm_taging/listing.py +146 -0
  110. notte-0.0.dev0/packages/notte-browser/src/notte_browser/tagging/action/llm_taging/parser.py +348 -0
  111. notte-0.0.dev0/packages/notte-browser/src/notte_browser/tagging/action/llm_taging/pipe.py +216 -0
  112. notte-0.0.dev0/packages/notte-browser/src/notte_browser/tagging/action/llm_taging/validation.py +40 -0
  113. notte-0.0.dev0/packages/notte-browser/src/notte_browser/tagging/action/pipe.py +75 -0
  114. notte-0.0.dev0/packages/notte-browser/src/notte_browser/tagging/action/simple/__init__.py +0 -0
  115. notte-0.0.dev0/packages/notte-browser/src/notte_browser/tagging/action/simple/pipe.py +71 -0
  116. notte-0.0.dev0/packages/notte-browser/src/notte_browser/tagging/page.py +35 -0
  117. notte-0.0.dev0/packages/notte-browser/src/notte_browser/vault.py +56 -0
  118. notte-0.0.dev0/packages/notte-browser/src/notte_browser/window.py +370 -0
  119. notte-0.0.dev0/packages/notte-core/README.md +0 -0
  120. notte-0.0.dev0/packages/notte-core/pyproject.toml +38 -0
  121. notte-0.0.dev0/packages/notte-core/src/notte_core/__init__.py +32 -0
  122. notte-0.0.dev0/packages/notte-core/src/notte_core/actions/__init__.py +0 -0
  123. notte-0.0.dev0/packages/notte-core/src/notte_core/actions/base.py +314 -0
  124. notte-0.0.dev0/packages/notte-core/src/notte_core/actions/space.py +106 -0
  125. notte-0.0.dev0/packages/notte-core/src/notte_core/browser/__init__.py +0 -0
  126. notte-0.0.dev0/packages/notte-core/src/notte_core/browser/dom_tree.py +602 -0
  127. notte-0.0.dev0/packages/notte-core/src/notte_core/browser/node_type.py +393 -0
  128. notte-0.0.dev0/packages/notte-core/src/notte_core/browser/observation.py +64 -0
  129. notte-0.0.dev0/packages/notte-core/src/notte_core/browser/snapshot.py +100 -0
  130. notte-0.0.dev0/packages/notte-core/src/notte_core/common/__init__.py +0 -0
  131. notte-0.0.dev0/packages/notte-core/src/notte_core/common/config.py +30 -0
  132. notte-0.0.dev0/packages/notte-core/src/notte_core/common/logging.py +21 -0
  133. notte-0.0.dev0/packages/notte-core/src/notte_core/common/resource.py +68 -0
  134. notte-0.0.dev0/packages/notte-core/src/notte_core/common/telemetry.py +125 -0
  135. notte-0.0.dev0/packages/notte-core/src/notte_core/common/tracer.py +190 -0
  136. notte-0.0.dev0/packages/notte-core/src/notte_core/controller/__init__.py +0 -0
  137. notte-0.0.dev0/packages/notte-core/src/notte_core/controller/actions.py +344 -0
  138. notte-0.0.dev0/packages/notte-core/src/notte_core/controller/proxy.py +156 -0
  139. notte-0.0.dev0/packages/notte-core/src/notte_core/controller/space.py +177 -0
  140. notte-0.0.dev0/packages/notte-core/src/notte_core/credentials/__init__.py +0 -0
  141. notte-0.0.dev0/packages/notte-core/src/notte_core/credentials/base.py +660 -0
  142. notte-0.0.dev0/packages/notte-core/src/notte_core/credentials/types.py +100 -0
  143. notte-0.0.dev0/packages/notte-core/src/notte_core/data/__init__.py +0 -0
  144. notte-0.0.dev0/packages/notte-core/src/notte_core/data/space.py +104 -0
  145. notte-0.0.dev0/packages/notte-core/src/notte_core/errors/__init__.py +0 -0
  146. notte-0.0.dev0/packages/notte-core/src/notte_core/errors/actions.py +59 -0
  147. notte-0.0.dev0/packages/notte-core/src/notte_core/errors/base.py +86 -0
  148. notte-0.0.dev0/packages/notte-core/src/notte_core/errors/llm.py +55 -0
  149. notte-0.0.dev0/packages/notte-core/src/notte_core/errors/processing.py +85 -0
  150. notte-0.0.dev0/packages/notte-core/src/notte_core/errors/provider.py +80 -0
  151. notte-0.0.dev0/packages/notte-core/src/notte_core/errors/validation.py +31 -0
  152. notte-0.0.dev0/packages/notte-core/src/notte_core/llms/__init__.py +0 -0
  153. notte-0.0.dev0/packages/notte-core/src/notte_core/llms/config/endpoints.csv +9 -0
  154. notte-0.0.dev0/packages/notte-core/src/notte_core/llms/engine.py +272 -0
  155. notte-0.0.dev0/packages/notte-core/src/notte_core/llms/logging.py +79 -0
  156. notte-0.0.dev0/packages/notte-core/src/notte_core/llms/prompt.py +67 -0
  157. notte-0.0.dev0/packages/notte-core/src/notte_core/llms/prompts/action-listing/anthropic/user.md +126 -0
  158. notte-0.0.dev0/packages/notte-core/src/notte_core/llms/prompts/action-listing/optim/user.md +128 -0
  159. notte-0.0.dev0/packages/notte-core/src/notte_core/llms/prompts/action-listing/simple/user.md +26 -0
  160. notte-0.0.dev0/packages/notte-core/src/notte_core/llms/prompts/action-listing-incr/user.md +135 -0
  161. notte-0.0.dev0/packages/notte-core/src/notte_core/llms/prompts/data-extraction/all_data/user.md +178 -0
  162. notte-0.0.dev0/packages/notte-core/src/notte_core/llms/prompts/data-extraction/only_main_content/user.md +157 -0
  163. notte-0.0.dev0/packages/notte-core/src/notte_core/llms/prompts/data-extraction/two_sections/user.md +48 -0
  164. notte-0.0.dev0/packages/notte-core/src/notte_core/llms/prompts/data-extraction/user.md +86 -0
  165. notte-0.0.dev0/packages/notte-core/src/notte_core/llms/prompts/debug-failing-action-exec/user.md +55 -0
  166. notte-0.0.dev0/packages/notte-core/src/notte_core/llms/prompts/document-category/base/user.md +58 -0
  167. notte-0.0.dev0/packages/notte-core/src/notte_core/llms/prompts/document-category/optim/user.md +38 -0
  168. notte-0.0.dev0/packages/notte-core/src/notte_core/llms/prompts/extract-json-schema/multi-entity/system.md +42 -0
  169. notte-0.0.dev0/packages/notte-core/src/notte_core/llms/prompts/extract-json-schema/multi-entity/user.md +1 -0
  170. notte-0.0.dev0/packages/notte-core/src/notte_core/llms/prompts/extract-without-json-schema/system.md +40 -0
  171. notte-0.0.dev0/packages/notte-core/src/notte_core/llms/prompts/extract-without-json-schema/user.md +1 -0
  172. notte-0.0.dev0/packages/notte-core/src/notte_core/llms/prompts/generate-json-schema/system.md +25 -0
  173. notte-0.0.dev0/packages/notte-core/src/notte_core/llms/prompts/generate-json-schema/user.md +1 -0
  174. notte-0.0.dev0/packages/notte-core/src/notte_core/llms/service.py +121 -0
  175. notte-0.0.dev0/packages/notte-core/src/notte_core/py.typed +0 -0
  176. notte-0.0.dev0/packages/notte-core/src/notte_core/utils/__init__.py +0 -0
  177. notte-0.0.dev0/packages/notte-core/src/notte_core/utils/code.py +22 -0
  178. notte-0.0.dev0/packages/notte-core/src/notte_core/utils/image.py +118 -0
  179. notte-0.0.dev0/packages/notte-core/src/notte_core/utils/platform.py +13 -0
  180. notte-0.0.dev0/packages/notte-core/src/notte_core/utils/pydantic_schema.py +98 -0
  181. notte-0.0.dev0/packages/notte-core/src/notte_core/utils/singleton.py +13 -0
  182. notte-0.0.dev0/packages/notte-core/src/notte_core/utils/url.py +89 -0
  183. notte-0.0.dev0/packages/notte-core/src/notte_core/utils/webp_replay.py +124 -0
  184. notte-0.0.dev0/packages/notte-eval/README.md +0 -0
  185. notte-0.0.dev0/packages/notte-eval/pyproject.toml +118 -0
  186. notte-0.0.dev0/packages/notte-eval/src/notte_eval/__init__.py +3 -0
  187. notte-0.0.dev0/packages/notte-eval/src/notte_eval/agent_handlers/__init__.py +58 -0
  188. notte-0.0.dev0/packages/notte-eval/src/notte_eval/agent_handlers/browseruse.py +201 -0
  189. notte-0.0.dev0/packages/notte-eval/src/notte_eval/agent_handlers/browseruse_api.py +147 -0
  190. notte-0.0.dev0/packages/notte-eval/src/notte_eval/agent_handlers/convergence.py +185 -0
  191. notte-0.0.dev0/packages/notte-eval/src/notte_eval/agent_handlers/falco.py +238 -0
  192. notte-0.0.dev0/packages/notte-eval/src/notte_eval/agent_handlers/mock.py +35 -0
  193. notte-0.0.dev0/packages/notte-eval/src/notte_eval/data/__init__.py +0 -0
  194. notte-0.0.dev0/packages/notte-eval/src/notte_eval/data/eval.py +204 -0
  195. notte-0.0.dev0/packages/notte-eval/src/notte_eval/data/gaia/GAIA_webvoyager.jsonl +90 -0
  196. notte-0.0.dev0/packages/notte-eval/src/notte_eval/data/load_data.py +97 -0
  197. notte-0.0.dev0/packages/notte-eval/src/notte_eval/data/scratch/proxy.jsonl +9 -0
  198. notte-0.0.dev0/packages/notte-eval/src/notte_eval/data/webvoyager/archive/WebVoyager_data.jsonl +643 -0
  199. notte-0.0.dev0/packages/notte-eval/src/notte_eval/data/webvoyager/archive/WebVoyager_data_short.jsonl +96 -0
  200. notte-0.0.dev0/packages/notte-eval/src/notte_eval/data/webvoyager/archive/WebVoyager_data_simple.jsonl +30 -0
  201. notte-0.0.dev0/packages/notte-eval/src/notte_eval/data/webvoyager/archive/WebVoyager_data_single.jsonl +1 -0
  202. notte-0.0.dev0/packages/notte-eval/src/notte_eval/data/webvoyager/archive/webvoyager_excluded.jsonl +55 -0
  203. notte-0.0.dev0/packages/notte-eval/src/notte_eval/data/webvoyager/convert.py +23 -0
  204. notte-0.0.dev0/packages/notte-eval/src/notte_eval/data/webvoyager/webvoyager.jsonl +643 -0
  205. notte-0.0.dev0/packages/notte-eval/src/notte_eval/data/webvoyager/webvoyager_convergence.jsonl +601 -0
  206. notte-0.0.dev0/packages/notte-eval/src/notte_eval/data/webvoyager/webvoyager_excluded.jsonl +54 -0
  207. notte-0.0.dev0/packages/notte-eval/src/notte_eval/data/webvoyager/webvoyager_simple.jsonl +30 -0
  208. notte-0.0.dev0/packages/notte-eval/src/notte_eval/data/webvoyager/webvoyager_single.jsonl +1 -0
  209. notte-0.0.dev0/packages/notte-eval/src/notte_eval/evaluators/__init__.py +26 -0
  210. notte-0.0.dev0/packages/notte-eval/src/notte_eval/evaluators/evaluator.py +31 -0
  211. notte-0.0.dev0/packages/notte-eval/src/notte_eval/evaluators/webvoyager.py +109 -0
  212. notte-0.0.dev0/packages/notte-eval/src/notte_eval/patcher.py +189 -0
  213. notte-0.0.dev0/packages/notte-eval/src/notte_eval/py.typed +0 -0
  214. notte-0.0.dev0/packages/notte-eval/src/notte_eval/run.py +398 -0
  215. notte-0.0.dev0/packages/notte-eval/src/notte_eval/task_types.py +98 -0
  216. notte-0.0.dev0/packages/notte-integrations/README.md +0 -0
  217. notte-0.0.dev0/packages/notte-integrations/pyproject.toml +33 -0
  218. notte-0.0.dev0/packages/notte-integrations/src/notte_integrations/__init__.py +3 -0
  219. notte-0.0.dev0/packages/notte-integrations/src/notte_integrations/api/fastapi.py +34 -0
  220. notte-0.0.dev0/packages/notte-integrations/src/notte_integrations/credentials/README.md +37 -0
  221. notte-0.0.dev0/packages/notte-integrations/src/notte_integrations/credentials/__init__.py +0 -0
  222. notte-0.0.dev0/packages/notte-integrations/src/notte_integrations/credentials/hashicorp/__init__.py +0 -0
  223. notte-0.0.dev0/packages/notte-integrations/src/notte_integrations/credentials/hashicorp/docker-compose.yml +15 -0
  224. notte-0.0.dev0/packages/notte-integrations/src/notte_integrations/credentials/hashicorp/vault.py +174 -0
  225. notte-0.0.dev0/packages/notte-integrations/src/notte_integrations/notifiers/README.md +129 -0
  226. notte-0.0.dev0/packages/notte-integrations/src/notte_integrations/notifiers/__init__.py +0 -0
  227. notte-0.0.dev0/packages/notte-integrations/src/notte_integrations/notifiers/discord.py +41 -0
  228. notte-0.0.dev0/packages/notte-integrations/src/notte_integrations/notifiers/mail.py +67 -0
  229. notte-0.0.dev0/packages/notte-integrations/src/notte_integrations/notifiers/slack.py +25 -0
  230. notte-0.0.dev0/packages/notte-integrations/src/notte_integrations/py.typed +0 -0
  231. notte-0.0.dev0/packages/notte-integrations/src/notte_integrations/sessions/__init__.py +0 -0
  232. notte-0.0.dev0/packages/notte-integrations/src/notte_integrations/sessions/anchor.py +57 -0
  233. notte-0.0.dev0/packages/notte-integrations/src/notte_integrations/sessions/browserbase.py +82 -0
  234. notte-0.0.dev0/packages/notte-integrations/src/notte_integrations/sessions/cdp_session.py +77 -0
  235. notte-0.0.dev0/packages/notte-integrations/src/notte_integrations/sessions/steel.py +53 -0
  236. notte-0.0.dev0/packages/notte-sdk/README.md +0 -0
  237. notte-0.0.dev0/packages/notte-sdk/pyproject.toml +21 -0
  238. notte-0.0.dev0/packages/notte-sdk/src/notte_sdk/__init__.py +7 -0
  239. notte-0.0.dev0/packages/notte-sdk/src/notte_sdk/client.py +50 -0
  240. notte-0.0.dev0/packages/notte-sdk/src/notte_sdk/endpoints/__init__.py +0 -0
  241. notte-0.0.dev0/packages/notte-sdk/src/notte_sdk/endpoints/agents.py +504 -0
  242. notte-0.0.dev0/packages/notte-sdk/src/notte_sdk/endpoints/base.py +247 -0
  243. notte-0.0.dev0/packages/notte-sdk/src/notte_sdk/endpoints/page.py +215 -0
  244. notte-0.0.dev0/packages/notte-sdk/src/notte_sdk/endpoints/personas.py +285 -0
  245. notte-0.0.dev0/packages/notte-sdk/src/notte_sdk/endpoints/sessions.py +542 -0
  246. notte-0.0.dev0/packages/notte-sdk/src/notte_sdk/endpoints/vaults.py +83 -0
  247. notte-0.0.dev0/packages/notte-sdk/src/notte_sdk/errors.py +40 -0
  248. notte-0.0.dev0/packages/notte-sdk/src/notte_sdk/py.typed +0 -0
  249. notte-0.0.dev0/packages/notte-sdk/src/notte_sdk/types.py +851 -0
  250. notte-0.0.dev0/packages/notte-sdk/src/notte_sdk/vault.py +68 -0
  251. notte-0.0.dev0/packages/notte-sdk/src/notte_sdk/websockets/__init__.py +0 -0
  252. notte-0.0.dev0/packages/notte-sdk/src/notte_sdk/websockets/recording.py +106 -0
  253. notte-0.0.dev0/pyproject.toml +94 -0
  254. notte-0.0.dev0/src/notte/__init__.py +8 -0
  255. notte-0.0.dev0/src/notte/py.typed +0 -0
  256. notte-0.0.dev0/tests/__init__.py +0 -0
  257. notte-0.0.dev0/tests/actions/__init__.py +0 -0
  258. notte-0.0.dev0/tests/actions/test_execution.py +56 -0
  259. notte-0.0.dev0/tests/actions/test_parsing.py +191 -0
  260. notte-0.0.dev0/tests/browser/__init__.py +0 -0
  261. notte-0.0.dev0/tests/browser/test_clipboard_isolation.py +130 -0
  262. notte-0.0.dev0/tests/browser/test_context.py +260 -0
  263. notte-0.0.dev0/tests/browser/test_node_type.py +436 -0
  264. notte-0.0.dev0/tests/code/test_code.py +78 -0
  265. notte-0.0.dev0/tests/config/test_agent_config.py +92 -0
  266. notte-0.0.dev0/tests/config/test_cli_config.py +42 -0
  267. notte-0.0.dev0/tests/config/test_config.py +38 -0
  268. notte-0.0.dev0/tests/config/test_env_config.py +94 -0
  269. notte-0.0.dev0/tests/conftest.py +28 -0
  270. notte-0.0.dev0/tests/integration/__init__.py +0 -0
  271. notte-0.0.dev0/tests/integration/sdk/__init__.py +0 -0
  272. notte-0.0.dev0/tests/integration/sdk/test_cdp.py +16 -0
  273. notte-0.0.dev0/tests/integration/sdk/test_recording_ws.py +45 -0
  274. notte-0.0.dev0/tests/integration/sdk/test_scraping.py +77 -0
  275. notte-0.0.dev0/tests/integration/sdk/test_sessions.py +32 -0
  276. notte-0.0.dev0/tests/integration/sdk/test_vault.py +48 -0
  277. notte-0.0.dev0/tests/integration/test_basic_scripts.py +40 -0
  278. notte-0.0.dev0/tests/integration/test_e2e.py +80 -0
  279. notte-0.0.dev0/tests/integration/test_resolution.py +204 -0
  280. notte-0.0.dev0/tests/integration/test_special_actions.py +125 -0
  281. notte-0.0.dev0/tests/integration/test_webvoyager_resolution.py +15 -0
  282. notte-0.0.dev0/tests/integration/test_webvoyager_scripts.py +90 -0
  283. notte-0.0.dev0/tests/llms/__init__.py +0 -0
  284. notte-0.0.dev0/tests/llms/test_action_listing_prompt_discrepancies.py +156 -0
  285. notte-0.0.dev0/tests/llms/test_engine.py +91 -0
  286. notte-0.0.dev0/tests/llms/test_extract_data_prompt_discrepancies.py +148 -0
  287. notte-0.0.dev0/tests/llms/test_prompt.py +68 -0
  288. notte-0.0.dev0/tests/mock/__init__.py +0 -0
  289. notte-0.0.dev0/tests/mock/mock_browser.py +214 -0
  290. notte-0.0.dev0/tests/mock/mock_env.py +54 -0
  291. notte-0.0.dev0/tests/mock/mock_service.py +43 -0
  292. notte-0.0.dev0/tests/pipe/__init__.py +0 -0
  293. notte-0.0.dev0/tests/pipe/action/__init__.py +0 -0
  294. notte-0.0.dev0/tests/pipe/action/test_listing.py +170 -0
  295. notte-0.0.dev0/tests/pipe/action/test_main.py +221 -0
  296. notte-0.0.dev0/tests/pipe/preprocessing/__init__.py +0 -0
  297. notte-0.0.dev0/tests/sdk/__init__.py +0 -0
  298. notte-0.0.dev0/tests/sdk/test_client.py +367 -0
  299. notte-0.0.dev0/tests/sdk/test_dict_types.py +164 -0
  300. notte-0.0.dev0/tests/sdk/test_openapi_spec.py +10 -0
  301. notte-0.0.dev0/tests/sdk/test_types.py +280 -0
  302. notte-0.0.dev0/tests/test_session.py +120 -0
  303. notte-0.0.dev0/tests/utils/__init__.py +0 -0
  304. notte-0.0.dev0/tests/utils/test_image.py +27 -0
  305. notte-0.0.dev0/tests/utils/test_url.py +53 -0
  306. notte-0.0.dev0/uv.lock +5318 -0
@@ -0,0 +1,5 @@
1
+ .git
2
+ .gitignore
3
+ .venv
4
+ .vscode
5
+ .vscodeignore
@@ -0,0 +1,31 @@
1
+ # #############################
2
+ # ######### SDK CONFIG ########
3
+ # #############################
4
+
5
+ # Notte SDK configuration
6
+ # -> Cloud hosted sessions & notte API
7
+ NOTTE_API_URL=api.notte.cc
8
+ NOTTE_API_KEY=
9
+
10
+
11
+ # #############################
12
+ # ######### LOCAL DEV #########
13
+ # #############################
14
+
15
+ # Set your provider API keys (only one provider is required but we advise to set more to bypass rate limits)
16
+ OPENAI_API_KEY=
17
+ ANTHROPIC_API_KEY=
18
+ GROQ_API_KEY=
19
+ CEREBRAS_API_KEY=
20
+ DEEPSEEK_API_KEY=
21
+ GEMINI_API_KEY=
22
+
23
+ # #############################
24
+ # ######### TELEMETRY #########
25
+ # #############################
26
+
27
+ # Enable or disable telemetry collection
28
+ # We use PostHog for telemetry collection. The data is completely anonymized and
29
+ # contains no personally identifiable information.
30
+ # Set to 'false' to disable telemetry collection
31
+ ANONYMIZED_TELEMETRY=true
@@ -0,0 +1,8 @@
1
+ changelog:
2
+ categories:
3
+ - title: What's Changed
4
+ labels:
5
+ - '*'
6
+ - title: New Contributors
7
+ labels:
8
+ - 'first-time-contributor'
@@ -0,0 +1,52 @@
1
+ import os
2
+
3
+ from openai import OpenAI
4
+ from openai.types.chat import ChatCompletion
5
+
6
+ client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
7
+
8
+ with open("README.md", "r") as f:
9
+ readme_content: str = f.read()
10
+
11
+ languages: list[str] = ["mandarin chinese", "spanish", "hindi", "russian", "bengali"]
12
+
13
+ for lang in languages:
14
+ response: ChatCompletion = client.chat.completions.create(
15
+ model="gpt-4",
16
+ messages=[
17
+ {
18
+ "role": "system",
19
+ "content": f"""You are a professional translator. Your task is to translate the following markdown text to {lang} with the following strict requirements:
20
+
21
+ 1. Maintain EXACTLY the same markdown structure and formatting:
22
+ - Keep all headers (#, ##, ###) at the same level
23
+ - Preserve all code blocks (```) and their language specifications
24
+ - Keep all links [text](url) in the same format
25
+ - Maintain all lists (ordered and unordered) with the same indentation
26
+ - Preserve all tables with the same structure
27
+ - Keep all inline code (`code`) in the same format
28
+ - Maintain all blockquotes (>)
29
+ - Preserve all horizontal rules (---)
30
+
31
+ 2. Translation rules:
32
+ - Only translate the text content, not the markdown syntax
33
+ - Keep all URLs unchanged
34
+ - Keep all code examples unchanged
35
+ - Keep all technical terms in English if they are commonly used in {lang}
36
+ - Maintain the same line breaks and paragraph structure
37
+ - Do not add or remove any sections
38
+ - Do not modify the document structure in any way
39
+
40
+ 3. Output:
41
+ - Return only the translated markdown text
42
+ - Do not include any explanations or notes
43
+ - Ensure the output is valid markdown that renders exactly like the original""",
44
+ },
45
+ {"role": "user", "content": readme_content},
46
+ ],
47
+ )
48
+
49
+ translated_content: str = response.choices[0].message.content
50
+
51
+ with open(f"docs/readmes/{lang}.md", "w") as f:
52
+ _ = f.write(translated_content)
@@ -0,0 +1,67 @@
1
+ name: benchmark
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ inputs:
6
+ config:
7
+ description: "Full toml config"
8
+ required: true
9
+ default: '[RunParameters]\nn_jobs = 3\ntries_per_task = 1\nevaluator = \"None\"\ncapture_logging = true\n[RunParameters.task_set]\nname = \"WebVoyagerSimple\"\n[Falco]\nuse_vision = false\nheadless = true\nmodel = \"cerebras/llama-3.3-70b\"\nmax_steps = 20\nhistory_type = \"short_observations_with_short_data\"\npool = \"None\"'
10
+ concurrency:
11
+ group: >-
12
+ ${{ github.workflow }}-${{ github.ref }}-
13
+ ${{ github.event.inputs.config }}
14
+ cancel-in-progress: true
15
+
16
+ env:
17
+ PYTHON_VERSION: "3.11"
18
+ CACHE_TYPE: "pip"
19
+
20
+ jobs:
21
+ run-benchmark:
22
+ runs-on: ubuntu-latest
23
+ timeout-minutes: 180
24
+ steps:
25
+ - uses: actions/checkout@v4
26
+
27
+ - name: Set environment variables
28
+ run: |
29
+ echo "CEREBRAS_API_KEY=${{ secrets.CEREBRAS_API_KEY_CICD }}" >> $GITHUB_ENV
30
+ echo "OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY_CICD }}" >> $GITHUB_ENV
31
+
32
+ - name: Set up Python
33
+ uses: actions/setup-python@v5
34
+ with:
35
+ python-version: ${{ env.PYTHON_VERSION }}
36
+ cache: ${{ env.CACHE_TYPE }}
37
+
38
+ - name: Install dependencies
39
+ run: |
40
+ python -m pip install --upgrade pip
41
+ pip install pre-commit pytest mypy pytest-asyncio pytest-mock
42
+ pip install -e .
43
+ pip install types-requests types-beautifulsoup4 types-regex types-chevron pandas tabulate cloudpickle
44
+ patchright install --with-deps chromium
45
+
46
+ - name: Create config.toml file
47
+ run: |
48
+ printf "%s" "${{ github.event.inputs.config }}" > config.toml
49
+
50
+ - name: Debug config.toml content
51
+ run: |
52
+ cat config.toml
53
+
54
+ - name: Run benchmark unit tests
55
+ run: pytest tests/integration/test_e2e.py --capture=no -p no:asyncio --config config.toml
56
+
57
+ - name: Upload md results as step summary
58
+ if: always()
59
+ run: cat dist/results.html >> $GITHUB_STEP_SUMMARY
60
+
61
+ - name: Upload Logs / Results
62
+ if: always()
63
+ uses: actions/upload-artifact@v4
64
+ with:
65
+ name: benchmark-results
66
+ path: |
67
+ dist/*
@@ -0,0 +1,71 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - "v*"
7
+
8
+ concurrency:
9
+ group: ${{ github.workflow }}-${{ github.ref }}
10
+ cancel-in-progress: true
11
+
12
+ env:
13
+ CACHE_TYPE: "pip"
14
+
15
+ jobs:
16
+ build:
17
+ if: startsWith(github.ref, 'refs/tags/v')
18
+ name: Build python dist
19
+ runs-on: ubuntu-latest
20
+
21
+ steps:
22
+ - uses: actions/checkout@v4
23
+ with:
24
+ persist-credentials: false
25
+
26
+ - name: Install uv
27
+ uses: astral-sh/setup-uv@v5
28
+ with:
29
+ enable-cache: true
30
+ cache-dependency-glob: "uv.lock"
31
+
32
+ - name: Set up Python
33
+ uses: actions/setup-python@v5
34
+ with:
35
+ python-version-file: ".python-version"
36
+ cache: ${{ env.CACHE_TYPE }}
37
+
38
+ - name: Store the distribution packages
39
+ uses: actions/upload-artifact@v4
40
+ with:
41
+ name: python-package-distributions
42
+ path: dist/
43
+
44
+ # - name: Publish to TestPyPI
45
+ # run: uv publish testpypi --token ${{ secrets.TEST_PYPI_API_TOKEN }}
46
+
47
+ # - name: Install the package from TestPyPI
48
+ # run: |
49
+ # uv venv test-pypi
50
+ # source test-pypi/bin/activate
51
+ # uv pip install notte==${{ github.ref_name }} --default-index testpypi
52
+
53
+ - name: Build and Publish to PyPI
54
+ env:
55
+ UV_PUBLISH_TOKEN: ${{ secrets.UV_PUBLISH_TOKEN }}
56
+ run: bash build.sh ${{ github.ref_name }} publish
57
+
58
+
59
+ - name: Wait for 2 minutes
60
+ run: sleep 120
61
+
62
+ - name: Install the package from PyPI
63
+ run: |
64
+ uv venv pypi
65
+ source pypi/bin/activate
66
+ uv pip install notte==${{ github.ref_name }}
67
+ uv pip show notte
68
+ uv pip show notte-core
69
+ uv pip show notte-sdk
70
+ uv pip show notte-browser
71
+ uv pip show notte-agent
@@ -0,0 +1,76 @@
1
+ name: slack monitor
2
+ on:
3
+ issues:
4
+ types: [opened, edited, closed]
5
+ pull_request:
6
+ types: [opened, edited, closed]
7
+ issue_comment:
8
+ types: [created]
9
+ pull_request_review:
10
+ types: [submitted]
11
+ jobs:
12
+ slack_notification:
13
+ runs-on: ubuntu-latest
14
+ steps:
15
+ - name: Check if user is external
16
+ id: check_user
17
+ run: |
18
+ actor="${{ github.actor }}"
19
+ team_members=("andreakiro" "giordano-lucas" "leo-notte" "jose-notte" "coderabbitai[bot]")
20
+ is_external="true"
21
+ for member in "${team_members[@]}"; do
22
+ if [[ "$actor" == "$member" ]]; then
23
+ is_external="false"
24
+ break
25
+ fi
26
+ done
27
+ echo "is_external=$is_external" >> $GITHUB_OUTPUT
28
+
29
+ - name: Set action type
30
+ id: set_action_type
31
+ run: |
32
+ EVENT="${{ github.event_name }}"
33
+ ACTION="${{ github.event.action }}"
34
+
35
+ if [[ "$EVENT" == "issues" && "$ACTION" == "opened" ]]; then
36
+ echo "action_label=issue-opened" >> $GITHUB_OUTPUT
37
+ elif [[ "$EVENT" == "issues" && "$ACTION" == "closed" ]]; then
38
+ echo "action_label=issue-closed" >> $GITHUB_OUTPUT
39
+ elif [[ "$EVENT" == "issues" && "$ACTION" == "edited" ]]; then
40
+ echo "action_label=issue-edited" >> $GITHUB_OUTPUT
41
+ elif [[ "$EVENT" == "pull_request" && "$ACTION" == "opened" ]]; then
42
+ echo "action_label=pr-opened" >> $GITHUB_OUTPUT
43
+ elif [[ "$EVENT" == "pull_request" && "$ACTION" == "closed" ]]; then
44
+ echo "action_label=pr-closed" >> $GITHUB_OUTPUT
45
+ elif [[ "$EVENT" == "pull_request" && "$ACTION" == "edited" ]]; then
46
+ echo "action_label=pr-edited" >> $GITHUB_OUTPUT
47
+ elif [[ "$EVENT" == "issue_comment" ]]; then
48
+ echo "action_label=commented" >> $GITHUB_OUTPUT
49
+ elif [[ "$EVENT" == "pull_request_review" ]]; then
50
+ echo "action_label=reviewed" >> $GITHUB_OUTPUT
51
+ else
52
+ echo "action_label=$EVENT-$ACTION" >> $GITHUB_OUTPUT
53
+ fi
54
+
55
+ - name: Generate timestamp
56
+ id: timestamp
57
+ run: echo "timestamp=$(date +%s)" >> $GITHUB_OUTPUT
58
+
59
+ - name: Format payload
60
+ id: format_payload
61
+ run: |
62
+ EVENT_BODY="${{ github.event.issue.body || github.event.pull_request.body || github.event.comment.body || github.event.review.body || '' }}"
63
+ ESCAPED_BODY=$(echo "$EVENT_BODY" | sed 's/"/\\"/g' | sed 's/$/\\n/g' | tr -d '\n')
64
+ echo "formatted_body=$ESCAPED_BODY" >> $GITHUB_OUTPUT
65
+
66
+ - name: Send Slack Notification if External
67
+ if: steps.check_user.outputs.is_external == 'true'
68
+ uses: slackapi/slack-github-action@v1.24.0
69
+ with:
70
+ payload: |
71
+ {
72
+ "username": "GitHub Activity (${{ steps.timestamp.outputs.timestamp }})",
73
+ "text": "Opensource user activity `${{ steps.set_action_type.outputs.action_label }}` by <https://github.com/${{ github.actor }}|@${{ github.actor }}>\n${{ github.event.issue.title || github.event.pull_request.title || 'Comment' }}\n${{ steps.format_payload.outputs.formatted_body }}\n${{ github.event.issue.html_url || github.event.pull_request.html_url || github.event.comment.html_url || github.event.review.html_url }}"
74
+ }
75
+ env:
76
+ SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
@@ -0,0 +1,93 @@
1
+ name: cicd
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ pull_request:
8
+ branches:
9
+ - main
10
+
11
+ concurrency:
12
+ group: ${{ github.workflow }}-${{ github.ref }}
13
+ cancel-in-progress: true
14
+
15
+ env:
16
+ CACHE_TYPE: "pip"
17
+ NOTTE_API_KEY: ${{ secrets.NOTTE_API_KEY }}
18
+ GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
19
+
20
+ jobs:
21
+ tests:
22
+ runs-on: ubuntu-latest
23
+ timeout-minutes: 15
24
+ steps:
25
+ - uses: actions/checkout@v4
26
+
27
+ - name: Verify environment variables
28
+ run: |
29
+ if [ -z "$NOTTE_API_KEY" ]; then
30
+ echo "NOTTE_API_KEY is not set"
31
+ exit 1
32
+ fi
33
+ if [ -z "$GEMINI_API_KEY" ]; then
34
+ echo "GEMINI_API_KEY is not set"
35
+ exit 1
36
+ fi
37
+ echo "Environment variables are set"
38
+
39
+
40
+ - name: Install uv
41
+ uses: astral-sh/setup-uv@v5
42
+ with:
43
+ enable-cache: true
44
+ cache-dependency-glob: "uv.lock"
45
+
46
+ - name: Set up Python
47
+ uses: actions/setup-python@v5
48
+ with:
49
+ python-version-file: ".python-version"
50
+ cache: ${{ env.CACHE_TYPE }}
51
+
52
+ - name: Cache patchright
53
+ id: cache-patchright
54
+ uses: actions/cache@v4
55
+ with:
56
+ path: |
57
+ ~/.cache/ms-playwright
58
+ ~/.cache/patchright
59
+ ~/.local/share/patchright
60
+ ${{ github.workspace }}/.patchright
61
+ key: ${{ runner.os }}-patchright-${{ hashFiles('**/pyproject.toml') }}-playwright1155-ffmpeg1011-v1
62
+ restore-keys: |
63
+ ${{ runner.os }}-patchright-${{ hashFiles('**/pyproject.toml') }}-playwright1155-ffmpeg1011-
64
+ ${{ runner.os }}-patchright-
65
+
66
+ - name: Cache pre-commit
67
+ id: cache-pre-commit
68
+ uses: actions/cache@v4
69
+ with:
70
+ path: ~/.cache/pre-commit
71
+ key: ${{ runner.os }}-pre-commit-${{ hashFiles('.pre-commit-config.yaml', '**/pyproject.toml') }}-v1
72
+ restore-keys: |
73
+ ${{ runner.os }}-pre-commit-
74
+
75
+ - name: Install dependencies
76
+ run: uv sync --dev --all-extras
77
+
78
+ - name: Install patchright
79
+ if: steps.cache-patchright.outputs.cache-hit != 'true'
80
+ run: |
81
+ echo "Cache miss - installing patchright"
82
+ uv run patchright install --with-deps chromium --only-shell
83
+
84
+ - name: Install pre-commit
85
+ if: steps.cache-pre-commit.outputs.cache-hit != 'true'
86
+ run: uv run pre-commit install --install-hooks
87
+
88
+ - name: Run pre-commit
89
+ run: uv run --active pre-commit run --all-files
90
+
91
+ - name: Run unit tests
92
+ run: |
93
+ uv run pytest tests --ignore=tests/integration/test_resolution.py --ignore=tests/integration/test_webvoyager_resolution.py --ignore=tests/browser/test_pool.py --ignore=tests/integration/test_e2e.py --ignore=tests/integration/test_webvoyager_scripts.py --durations=10
@@ -0,0 +1,47 @@
1
+ name: translates readme
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ paths:
8
+ - "README.md"
9
+
10
+ jobs:
11
+ translate:
12
+ runs-on: ubuntu-latest
13
+ steps:
14
+ - uses: actions/checkout@v4
15
+
16
+ - name: Set up Python
17
+ uses: actions/setup-python@v5
18
+ with:
19
+ python-version: "3.11"
20
+
21
+ - name: Install dependencies
22
+ run: |
23
+ python -m pip install --upgrade pip
24
+ pip install openai
25
+
26
+ - name: Check if README was modified
27
+ id: check-readme
28
+ run: |
29
+ git diff --name-only HEAD~1 HEAD | grep -q "README.md"
30
+ echo "readme_changed=$?" >> $GITHUB_OUTPUT
31
+
32
+ - name: Translate README
33
+ if: steps.check-readme.outputs.readme_changed == '0'
34
+ env:
35
+ OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
36
+ run: |
37
+ mkdir -p docs/readmes
38
+ python .github/scripts/translate_readme.py
39
+
40
+ - name: Commit and push translations
41
+ if: steps.check-readme.outputs.readme_changed == '0'
42
+ run: |
43
+ git config --local user.email "action@github.com"
44
+ git config --local user.name "GitHub Action"
45
+ git add docs/readmes/
46
+ git commit -m "Update translated READMEs"
47
+ git push
@@ -0,0 +1,179 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ share/python-wheels/
24
+ *.egg-info/
25
+ .installed.cfg
26
+ *.egg
27
+ MANIFEST
28
+
29
+ # PyInstaller
30
+ # Usually these files are written by a python script from a template
31
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
32
+ *.manifest
33
+ *.spec
34
+
35
+ # Installer logs
36
+ pip-log.txt
37
+ pip-delete-this-directory.txt
38
+
39
+ # Unit test / coverage reports
40
+ htmlcov/
41
+ .tox/
42
+ .nox/
43
+ .coverage
44
+ .coverage.*
45
+ .cache
46
+ nosetests.xml
47
+ coverage.xml
48
+ *.cover
49
+ *.py,cover
50
+ .hypothesis/
51
+ .pytest_cache/
52
+ cover/
53
+
54
+ # Translations
55
+ *.mo
56
+ *.pot
57
+
58
+ # Django stuff:
59
+ *.log
60
+ local_settings.py
61
+ db.sqlite3
62
+ db.sqlite3-journal
63
+
64
+ # Flask stuff:
65
+ instance/
66
+ .webassets-cache
67
+
68
+ # Scrapy stuff:
69
+ .scrapy
70
+
71
+ # Sphinx documentation
72
+ docs/_build/
73
+
74
+ # PyBuilder
75
+ .pybuilder/
76
+ target/
77
+
78
+ # Jupyter Notebook
79
+ .ipynb_checkpoints
80
+
81
+ # IPython
82
+ profile_default/
83
+ ipython_config.py
84
+
85
+ # pyenv
86
+ # For a library or package, you might want to ignore these files since the code is
87
+ # intended to run in multiple environments; otherwise, check them in:
88
+ # .python-version
89
+
90
+ # pipenv
91
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
92
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
93
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
94
+ # install all needed dependencies.
95
+ #Pipfile.lock
96
+
97
+ # UV
98
+ # Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
99
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
100
+ # commonly ignored for libraries.
101
+ #uv.lock
102
+
103
+ # poetry
104
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
105
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
106
+ # commonly ignored for libraries.
107
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
108
+ #poetry.lock
109
+
110
+ # pdm
111
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
112
+ #pdm.lock
113
+ # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
114
+ # in version control.
115
+ # https://pdm.fming.dev/latest/usage/project/#working-with-version-control
116
+ .pdm.toml
117
+ .pdm-python
118
+ .pdm-build/
119
+
120
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
121
+ __pypackages__/
122
+
123
+ # Celery stuff
124
+ celerybeat-schedule
125
+ celerybeat.pid
126
+
127
+ # SageMath parsed files
128
+ *.sage.py
129
+
130
+ # Environments
131
+ .env
132
+ .venv
133
+ env/
134
+ venv/
135
+ ENV/
136
+ env.bak/
137
+ venv.bak/
138
+
139
+ # Spyder project settings
140
+ .spyderproject
141
+ .spyproject
142
+
143
+ # Rope project settings
144
+ .ropeproject
145
+
146
+ # mkdocs documentation
147
+ /site
148
+
149
+ # mypy
150
+ .mypy_cache/
151
+ .dmypy.json
152
+ dmypy.json
153
+
154
+ # Pyre type checker
155
+ .pyre/
156
+
157
+ # pytype static type analyzer
158
+ .pytype/
159
+
160
+ # Cython debug symbols
161
+ cython_debug/
162
+
163
+ # PyCharm
164
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
165
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
166
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
167
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
168
+ #.idea/
169
+
170
+ ignore.*
171
+ llm_usage.jsonl
172
+ llm_parsing_error.jsonl
173
+ traces/
174
+
175
+ **/__pycache__/**
176
+ .DS_Store
177
+ **/.DS_Store
178
+ old
179
+ notebook
@@ -0,0 +1,33 @@
1
+ repos:
2
+ - repo: https://github.com/astral-sh/ruff-pre-commit
3
+ # Ruff version.
4
+ rev: v0.9.7
5
+ hooks:
6
+ # Run the linter.
7
+ - id: ruff
8
+ types_or: [ python, pyi ]
9
+ args: [ --fix ]
10
+ # Run the formatter.
11
+ - id: ruff-format
12
+ types_or: [ python, pyi ]
13
+
14
+ - repo: https://github.com/DetachHead/basedpyright-pre-commit-mirror
15
+ rev: 1.27.1
16
+ hooks:
17
+ - id: basedpyright
18
+ args: ["--project", "."]
19
+ verbose: true
20
+
21
+ - repo: https://github.com/Yelp/detect-secrets
22
+ rev: v1.5.0
23
+ hooks:
24
+ - id: detect-secrets
25
+ exclude: ^(.*/README\.md|.*/pyproject\.toml|docs/archives/20250307_README\.md|README\.md)$
26
+
27
+ - repo: https://github.com/pre-commit/pre-commit-hooks
28
+ rev: v5.0.0
29
+ hooks:
30
+ - id: trailing-whitespace
31
+ - id: end-of-file-fixer
32
+ - id: check-yaml
33
+ - id: check-json
@@ -0,0 +1 @@
1
+ 3.11
@@ -0,0 +1,6 @@
1
+ {
2
+ "recommendations": [
3
+ "detachhead.basedpyright",
4
+ "mikoz.black-py"
5
+ ]
6
+ }