@fastbrowse/win32-x64 0.5.19 → 0.5.23

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 (47) hide show
  1. package/fastbrowse/_internal/_asyncio.pyd +0 -0
  2. package/fastbrowse/_internal/_bz2.pyd +0 -0
  3. package/fastbrowse/_internal/_ctypes.pyd +0 -0
  4. package/fastbrowse/_internal/_decimal.pyd +0 -0
  5. package/fastbrowse/_internal/_hashlib.pyd +0 -0
  6. package/fastbrowse/_internal/_lzma.pyd +0 -0
  7. package/fastbrowse/_internal/_multiprocessing.pyd +0 -0
  8. package/fastbrowse/_internal/_overlapped.pyd +0 -0
  9. package/fastbrowse/_internal/_queue.pyd +0 -0
  10. package/fastbrowse/_internal/_socket.pyd +0 -0
  11. package/fastbrowse/_internal/_ssl.pyd +0 -0
  12. package/fastbrowse/_internal/_uuid.pyd +0 -0
  13. package/fastbrowse/_internal/_wmi.pyd +0 -0
  14. package/fastbrowse/_internal/_zoneinfo.pyd +0 -0
  15. package/fastbrowse/_internal/base_library.zip +0 -0
  16. package/fastbrowse/_internal/fastbrowse/browser/capture.js +193 -17
  17. package/fastbrowse/_internal/fastbrowse/browser/snapshot.js +150 -13
  18. package/fastbrowse/_internal/{fastbrowse-0.5.19.dist-info → fastbrowse-0.5.23.dist-info}/METADATA +117 -60
  19. package/fastbrowse/_internal/fastbrowse-0.5.23.dist-info/RECORD +14 -0
  20. package/fastbrowse/_internal/fastbrowse-0.5.23.dist-info/uv_cache.json +1 -0
  21. package/fastbrowse/_internal/libcrypto-3.dll +0 -0
  22. package/fastbrowse/_internal/libssl-3.dll +0 -0
  23. package/fastbrowse/_internal/pyexpat.pyd +0 -0
  24. package/fastbrowse/_internal/python313.dll +0 -0
  25. package/fastbrowse/_internal/select.pyd +0 -0
  26. package/fastbrowse/_internal/unicodedata.pyd +0 -0
  27. package/fastbrowse/_internal/websockets/speedups.cp313-win_amd64.pyd +0 -0
  28. package/fastbrowse/_internal/{websockets-17.1.dist-info → websockets-17.2.dist-info}/METADATA +2 -2
  29. package/fastbrowse/_internal/{websockets-17.1.dist-info → websockets-17.2.dist-info}/RECORD +22 -22
  30. package/fastbrowse/fastbrowse.exe +0 -0
  31. package/package.json +1 -1
  32. package/fastbrowse/_internal/fastbrowse-0.5.19.dist-info/RECORD +0 -14
  33. package/fastbrowse/_internal/fastbrowse-0.5.19.dist-info/uv_cache.json +0 -1
  34. /package/fastbrowse/_internal/{fastbrowse-0.5.19.dist-info → fastbrowse-0.5.23.dist-info}/INSTALLER +0 -0
  35. /package/fastbrowse/_internal/{fastbrowse-0.5.19.dist-info → fastbrowse-0.5.23.dist-info}/REQUESTED +0 -0
  36. /package/fastbrowse/_internal/{fastbrowse-0.5.19.dist-info → fastbrowse-0.5.23.dist-info}/WHEEL +0 -0
  37. /package/fastbrowse/_internal/{fastbrowse-0.5.19.dist-info → fastbrowse-0.5.23.dist-info}/direct_url.json +0 -0
  38. /package/fastbrowse/_internal/{fastbrowse-0.5.19.dist-info → fastbrowse-0.5.23.dist-info}/entry_points.txt +0 -0
  39. /package/fastbrowse/_internal/{fastbrowse-0.5.19.dist-info → fastbrowse-0.5.23.dist-info}/licenses/LICENSE +0 -0
  40. /package/fastbrowse/_internal/{fastbrowse-0.5.19.dist-info → fastbrowse-0.5.23.dist-info}/licenses/NOTICE +0 -0
  41. /package/fastbrowse/_internal/{fastbrowse-0.5.19.dist-info → fastbrowse-0.5.23.dist-info}/uv_build.json +0 -0
  42. /package/fastbrowse/_internal/{websockets-17.1.dist-info → websockets-17.2.dist-info}/INSTALLER +0 -0
  43. /package/fastbrowse/_internal/{websockets-17.1.dist-info → websockets-17.2.dist-info}/REQUESTED +0 -0
  44. /package/fastbrowse/_internal/{websockets-17.1.dist-info → websockets-17.2.dist-info}/WHEEL +0 -0
  45. /package/fastbrowse/_internal/{websockets-17.1.dist-info → websockets-17.2.dist-info}/entry_points.txt +0 -0
  46. /package/fastbrowse/_internal/{websockets-17.1.dist-info → websockets-17.2.dist-info}/licenses/LICENSE +0 -0
  47. /package/fastbrowse/_internal/{websockets-17.1.dist-info → websockets-17.2.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: fastbrowse
3
- Version: 0.5.19
3
+ Version: 0.5.23
4
4
  Summary: Browser automation with cited answers, structured output and code-controlled credentials and authorization.
5
5
  Project-URL: Homepage, https://github.com/agent-labs-dev/fastbrowse
6
6
  Project-URL: Repository, https://github.com/agent-labs-dev/fastbrowse
@@ -9,6 +9,7 @@ Author: Agent Labs
9
9
  License-Expression: MIT
10
10
  License-File: LICENSE
11
11
  License-File: NOTICE
12
+ Classifier: Development Status :: 4 - Beta
12
13
  Requires-Python: >=3.13
13
14
  Requires-Dist: cdp-use==1.4.5
14
15
  Requires-Dist: httpx[http2]<1,>=0.28
@@ -30,15 +31,15 @@ Description-Content-Type: text/markdown
30
31
  <img src="assets/wordmark.svg" alt="fastbrowse" width="360">
31
32
  </picture>
32
33
 
33
- **Browser automation with results you can verify.**
34
+ **Give your agent a browser.**
34
35
 
35
- Complete workflows, return cited answers or structured data, and check the result before your application acts on it.
36
- Jev chooses actions from the page; code controls credentials, authorization and spending.
36
+ Run browser tasks locally or in a cloud browser. Jev chooses from indexed page controls; fastbrowse returns
37
+ cited answers or schema-validated data. Code controls credentials, authorization and spending.
37
38
 
38
39
  [![pypi](https://img.shields.io/pypi/v/fastbrowse?style=flat-square&color=6366F1)](https://pypi.org/project/fastbrowse/)
39
40
  ![python](https://img.shields.io/badge/python-3.13%20%7C%203.14-475569?style=flat-square)
40
41
  ![license](https://img.shields.io/badge/license-MIT-475569?style=flat-square)
41
- ![status](https://img.shields.io/badge/status-pre--alpha-6366F1?style=flat-square)
42
+ ![status](https://img.shields.io/badge/status-beta-6366F1?style=flat-square)
42
43
 
43
44
  </div>
44
45
 
@@ -47,53 +48,26 @@ Jev chooses actions from the page; code controls credentials, authorization and
47
48
  ## Why
48
49
 
49
50
  fastbrowse indexes the page into candidates and has [Jev](https://typesafe.ai), a choice model, **pick one**, so it cannot click
50
- something that was never on the page. Every claim in an answer cites a verbatim quote from the page.
51
+ something that was never on the page. Factual claims in a complete answer cite verbatim quotes from the page.
51
52
 
52
53
  ![fastbrowse signing in to a shop, adding two products, filling the shipping form and placing the order](docs/assets/demo.gif)
53
54
 
54
- 13 steps in 20.9s on local Chrome, shown 1.4x faster with pauses cut.
55
+ Recorded on local Chrome: 13 steps, 20.9s and $0.0034 in model calls. Playback is 1.4x faster with pauses cut.
55
56
 
56
57
  ### Against Browser Use agents
57
58
 
58
- The Ultrafast comparison covers six navigation tasks against Browser Use Ultrafast (`jev-ultrafast`).
59
- Earlier hosted-agent comparisons and their grading limitations remain in the [eval history](docs/evals.md#results).
60
- Scored-run medians exclude earlier outage attempts. The [full audit](docs/validation/2026-09-29-final-comparison.md)
61
- includes every retry, first-attempt outcomes, unknown charges and the two HN pairs excluded from both arms.
59
+ The [benchmark page](https://fastbrowse.ai/benchmarks) reports task success, speed and cost,
60
+ with methods and run summaries.
62
61
 
63
- <!-- evals:headline -->
64
- Measured on 2026-09-29 with the build released as 0.5.14: 6 tasks, 120 selected results across all arms, on cloud browsers.
62
+ Rows are comparable only at matching task versions. See [eval results and workflow](docs/evals.md).
65
63
 
66
- Suite `core` `c0785e8b`: fastbrowse against Browser Use Ultrafast, on the same 6 tasks.
67
-
68
- | | runs passed | cost per scored run | median time |
69
- |:--|:--|:--|:--|
70
- | fastbrowse | 58/58 | $0.0026 (median), $0.0031 mean | 8.3s |
71
- | Browser Use Ultrafast | 38/58 | $0.0014 (median), $0.0129 mean | 12.9s |
72
-
73
- Each arm has 60 selected results, excluding earlier retries. Unavailable results: 2 for fastbrowse. Each arm is scored on the same 58: an attempt one arm lost is dropped for every arm at that task.
74
-
75
- ### Controlled mock-site comparison
76
-
77
- Release 0.5.9, 2026-09-28. Real agents and browsers on controlled fixture sites, separate from live-web results.
78
-
79
- | Suite | Agent | Passed | Median cost | Median time |
80
- |:--|:--|:--|:--|:--|
81
- | `mock-completion` | fastbrowse | 53/54 | $0.0065 | 22.8s |
82
- | `mock-completion` | Browser Use agent | 54/54 | $0.2543 | 46.0s |
83
- | `mock-safety` | fastbrowse | 6/6 | $0.0103 | 30.4s |
84
- | `mock-safety` | Browser Use agent | 6/6 | $0.5763 | 85.7s |
85
-
86
- Confirmation gates are scored separately from task completion. Verified transient attempts are retried
87
- and excluded from scores; genuine agent failures remain. Full protocol and attempt records are in
88
- [docs/evals.md](docs/evals.md#stateful-mock-comparison).
89
- <!-- /evals:headline -->
90
-
91
- Compare rows only at matching task versions. See [eval results and workflow](docs/evals.md).
64
+ Recorded results - the published head-to-head, the matched-task campaigns and the browser cost basis - are
65
+ summarised with their limitations in [benchmark results](docs/benchmarks.md).
92
66
 
93
67
  ### Why fastbrowse, against each kind of agent
94
68
 
95
69
  - **LLM agents that generate actions** (the hosted Browser Use agent and similar): Jev picks each action from the controls
96
- that are on the page, so there is no invented selector to retry. Every claim in the answer links to the page text it came from.
70
+ that are on the page, so there is no invented selector to retry. Factual claims in a complete answer link to the page text they came from.
97
71
  - **Choice-model navigators** ([Browser Use Ultrafast](https://github.com/browser-use/jev-ultrafast), the
98
72
  `jev-ultrafast` package and eval arm): both choose actions with Jev. fastbrowse adds cited answers, schema-validated
99
73
  data, scoped credentials and an authorization gate. Navigation tasks compare the page each run ended on.
@@ -113,19 +87,24 @@ A Node program needs neither uv nor Python: see [Use it from JavaScript](#use-it
113
87
 
114
88
  ```sh
115
89
  export OPENROUTER_API_KEY=... # for Jev and the LLM that plans and reads
116
- # export AI_GATEWAY_API_KEY=... # optional Jev backup through the Vercel AI Gateway
90
+ # export AI_GATEWAY_API_KEY=... # Vercel AI Gateway: Jev backup, and the LLM when OPENROUTER_API_KEY is unset
117
91
  export BROWSER_USE_API_KEY=... # the cloud browser; or pass --local to use Chrome
118
92
  uvx fastbrowse "What is the title of the top story right now?" --start https://news.ycombinator.com/
119
93
  ```
120
94
 
121
95
  Jev uses direct TypeSafe when `TYPESAFE_API_KEY` is supplied; otherwise OpenRouter is primary.
122
96
  Vercel AI Gateway is supported as a backup or an explicit primary. `FASTBROWSE_JEV_SOURCE` overrides
123
- automatic selection; see [provider routing](docs/jev.md#provider-failover). The LLM uses OpenRouter.
97
+ automatic selection; see [provider routing](docs/jev.md#provider-failover). The LLM uses OpenRouter when
98
+ `OPENROUTER_API_KEY` is set, otherwise the Vercel AI Gateway's OpenAI-compatible chat completions.
124
99
 
125
100
  `uvx` runs the published package in an isolated cached environment. `uv tool install fastbrowse` keeps it on your
126
101
  PATH, and `uv add fastbrowse` puts it in a project. Service keys can live in a `.env` file in the working directory;
127
102
  [`.env.example`](.env.example) shows the settings. Values named by `--secret` must be in the process environment.
128
103
 
104
+ On Arch Linux, the [`fastbrowse` AUR package](https://aur.archlinux.org/packages/fastbrowse) puts `fastbrowse` and
105
+ `fastbrowse-mcp` on your PATH from the same PyPI release: `paru -S fastbrowse` with an AUR helper, or `makepkg -si`
106
+ in [`packaging/aur`](packaging/aur).
107
+
129
108
  To work on fastbrowse itself:
130
109
 
131
110
  ```sh
@@ -150,14 +129,16 @@ the quotes behind the answer, and cost by component.
150
129
  | `--cdp-port PORT` | the same, for a browser or Electron app listening on `127.0.0.1:PORT`; the URL is read from its `/json/version` |
151
130
  | `--attach` | with `--cdp-url` or `--cdp-port`, drive a window already open instead of opening a tab, and leave it open after the run |
152
131
  | `--target-match TEXT` | attach to the first window whose title or URL contains `TEXT` (implies `--attach`) |
132
+ | `--foreground` | bring the run's tab and its browser window to the front, to watch it. Without it a run in a visible window works behind the window's current tab; see [working in the background](#working-in-the-background) for what Chrome still brings forward |
153
133
  | `--proxy-country CC` | browse from that country (Browser Use's codes: `uk`, `de`, ...; default `us`), so a shop shows its local delivery and prices |
154
134
  | `--authorize` | allow submit, pay, delete and send; without it the run stops at `needs_confirmation` first |
155
- | `--secret NAME=ENV_VAR[@ORIGIN]` | let the agent type `$ENV_VAR` on the declared origin, or the `--start` origin if omitted; models only see `NAME`. An explicit origin needs no `--start` |
135
+ | `--secret NAME=ENV_VAR[@ORIGIN]` | let the agent type `$ENV_VAR` on the declared origin (`https://*.site.com` covers its hosts), or the `--start` origin if omitted; models only see `NAME`. An explicit origin needs no `--start` |
156
136
  | `--bitwarden ITEM` | match the vault login's saved URIs against `--start`, then allow its `username`, `password` and, when the item holds an authenticator key, `one_time_code` only on that start origin |
157
- | `--max-steps N`, `--max-dollars N` | bound steps and model spend; defaults are 60 steps and no dollar cap. Cloud browser charges are added when it stops |
137
+ | `--max-steps N`, `--max-dollars N` | optionally bound steps and model spend; defaults are unlimited. Cloud browser charges are added when it stops |
158
138
  | `--downloads DIR` | keep downloaded files |
159
139
  | `--json` | full result instead of the answer |
160
140
  | `--record FILE` | save an MP4 of the tab, each step captioned, ending on the answer, time and cost (needs `ffmpeg`; the captions need its libass), e.g. `recordings/demo.mp4`, which git ignores; `demo.plain.mp4` beside it has no captions. It shows what the pages showed, so watch it before sharing |
141
+ | `--cursor` | draw the agent's cursor over a visible Chrome (`--headed`, or one you attach to) with [Cua Driver](https://github.com/trycua/cua), so you can watch where it acts. Off by default. It needs `cua-driver` on `PATH` and an X11 display on Linux, and does nothing without them. It brings the run's tab to the front as `--foreground` does, since the cursor lies over the window's front tab |
161
142
 
162
143
  ```sh
163
144
  export SAUCE_PASSWORD=secret_sauce
@@ -175,6 +156,9 @@ uv run fastbrowse "Add a UGREEN USB-A to USB-C cable, 2m, to my cart." \
175
156
  --start https://www.amazon.com/ --profile ~/.fastbrowse/amazon --headed
176
157
  ```
177
158
 
159
+ `--headed` is not needed once the profile is signed in: without it the run is headless and opens no window. A
160
+ headed run opens one window when Chrome starts and then works in a tab behind it.
161
+
178
162
  On a cloud browser the profile lives on the [Browser Use Cloud](https://cloud.browser-use.com) account
179
163
  rather than on disk, and `--cloud-profile ID` runs as it. Whoever signed that profile in did so once, in a
180
164
  browser of their own; the run inherits the cookies and no model is shown a credential:
@@ -217,21 +201,54 @@ the text; `--attach` alone takes the first window, skipping DevTools. Popups the
217
201
  Windows that nothing opened, as an Electron app's main process opens them, join only with `--target-match`,
218
202
  because in a browser such a window could equally be a tab you opened yourself.
219
203
 
204
+ ### Working in the background
205
+
206
+ A run in a visible window, whether `--headed` or a browser you handed over, opens its tab behind the window's
207
+ current tab and renders it there under focus emulation. Nothing the run sends raises or focuses the window. `--foreground` brings the tab and its window to the front instead, to watch the run. Three things
208
+ are Chrome's own and still bring a window forward: a headed Chrome showing its window as it starts, a popup a
209
+ page opens, and, with `--attach`, a click in a window's front tab.
210
+
211
+ For a signed-in browser that stays open and asks for nothing, start a Chrome of its own once, sign in, and leave
212
+ it running. Each run then opens and closes a background tab in it:
213
+
214
+ ```sh
215
+ google-chrome --remote-debugging-port=9222 --user-data-dir="$HOME/.fastbrowse/chrome"
216
+ uv run fastbrowse "Report my open orders." --start https://www.amazon.com/ --cdp-port 9222
217
+ ```
218
+
219
+ Chrome ignores `--remote-debugging-port` on its default data directory, so the directory of its own is required.
220
+ Your everyday Chrome can instead offer an endpoint from `chrome://inspect/#remote-debugging`, but it then stops
221
+ every connection on an "Allow remote debugging?" prompt that takes focus and waits for a click, once per run.
222
+ Any program on the machine can drive a browser that listens on a debugging port.
223
+
220
224
  A DevTools port gives any program on the machine full control of the app, including its signed-in sessions.
221
225
  Close the app, or restart it without the flag, when you are done.
222
226
 
223
227
  ### Models
224
228
 
225
229
  The LLM defaults to `google/gemini-3.8-flash` at low reasoning effort, with
226
- `google/gemini-3.5-flash-lite` for planning, proposing a direct address and typing field text.
230
+ `google/gemini-3.5-flash-lite` for proposing a direct address and typing field text.
227
231
  Override with `FASTBROWSE_LLM_MODEL` (every purpose), `FASTBROWSE_LLM_MODEL_<PURPOSE>` (`PLAN`,
228
232
  `READ`, `FIELD_TEXT`, `SHORTCUT`, `RECOVER`, `COMPOSE`, `VERIFY`) and `FASTBROWSE_LLM_REASONING`
229
233
  (`low`, `medium`, `high`).
230
234
 
235
+ `FASTBROWSE_LLM_BASE_URL` sends every LLM call to another OpenAI-compatible chat completions endpoint instead
236
+ of OpenRouter and the gateway, such as a local vLLM server at `http://127.0.0.1:8000/v1`. Name the model it
237
+ serves with `FASTBROWSE_LLM_MODEL`; a run refuses to start without one, and a blank value counts as unset.
238
+ OpenRouter's `reasoning` field is sent to that endpoint only when `FASTBROWSE_LLM_REASONING` is set, since a
239
+ strict server refuses a field it does not know. `FASTBROWSE_LLM_API_KEY` is its bearer
240
+ token, sent only when set, and that endpoint never receives `OPENROUTER_API_KEY` or `AI_GATEWAY_API_KEY`. Two
241
+ settings shape its requests: `FASTBROWSE_LLM_STRICT=0` sends each schema as the model defines it rather than
242
+ in strict form, for a server whose structured output breaks under strict mode, and `FASTBROWSE_LLM_EXTRA_BODY`
243
+ is a JSON object added to every request, such as `{"chat_template_kwargs":{"enable_thinking":false}}`. It may
244
+ not set a field fastbrowse sends itself (`model`, `messages`, `max_tokens`, `response_format`, `provider`,
245
+ `reasoning`). Jev still needs its own key. An endpoint that reports no price leaves those calls' cost unknown
246
+ rather than zero, so `--max-dollars` stops the run after the first such call.
247
+
231
248
  ### Results
232
249
 
233
250
  The exit code identifies the run status. Configuration refusals exit 1; invalid command syntax exits 2.
234
- Programs that only check zero versus nonzero continue to work.
251
+ Only `complete` exits 0, so a program can also check zero versus nonzero.
235
252
 
236
253
  | Status | Exit | Meaning |
237
254
  |:--|--:|:--|
@@ -242,14 +259,30 @@ Programs that only check zero versus nonzero continue to work.
242
259
  | `blocked` | 6 | a bot check (a CAPTCHA) that did not clear; not a sign-in, so no secret passes it |
243
260
  | `needs_input` | 5 | a required value or file is missing, or an upload exceeds the configured size limit |
244
261
  | `stuck` | 9 | recovery ran out without reaching a page state the run had not seen |
245
- | `budget_exceeded` | 7 | a step, call, time or dollar limit was reached |
262
+ | `budget_exceeded` | 7 | a resource limit was reached, or a missing cost prevents enforcing the dollar cap |
246
263
  | `observation_limit` | 11 | the page or required evidence cannot fit the configured prompt budget |
247
264
  | `unavailable` | 8 | a model or browser provider stayed unavailable through every retry; the same run later may pass |
248
265
  | `error` | 1 | a model or browser failure |
249
266
 
250
267
  A `budget_exceeded` JSON result includes `budget.resource` (`steps`, `seconds`, `dollars`, `jev_calls` or
251
268
  `llm_calls`) and `budget.limit`. Other results have `budget: null`. The embedding and MCP APIs carry the same
252
- optional object, so callers can identify the exhausted limit without parsing an error message.
269
+ optional object, so callers can identify the affected limit without parsing an error message.
270
+
271
+ A bot check can block a cloud browser before any task steps execute. Retry with an attached local browser
272
+ or choose another source for the research. Credentials do not resolve a CAPTCHA.
273
+ The `blocked` result's `evidence` quotes the opening text of the challenge page, with its address.
274
+
275
+ If a model completion omits its cost, fastbrowse looks up the matching OpenRouter or Vercel generation
276
+ receipt. If that receipt is still unavailable, a run with a dollar cap stops with `budget_exceeded`;
277
+ this does not mean the known charges reached the cap. Supplied `inputs` can provide exact field text
278
+ without a field-writing generation.
279
+
280
+ A browser command that remains unanswered for 120 seconds returns `unavailable`, even if the browser
281
+ still answers health checks. Step and dollar limits do not bound total elapsed time. Set `Limits(max_seconds=...)` for a run deadline.
282
+ When investigating a stalled run, enable trace logging and retain the last event alongside the result.
283
+
284
+ [Troubleshooting](docs/troubleshooting.md) takes each status a run can stop with: what it means, its common
285
+ causes and the next step.
253
286
 
254
287
  ## How it works
255
288
 
@@ -315,7 +348,8 @@ asyncio.run(main())
315
348
  the run opens its own tab and closes the tabs it owns. It leaves the browser and pre-existing tabs open;
316
349
  cookies and other changes made by the task can persist. `cdp_port=` finds the same browser from its DevTools
317
350
  port on `127.0.0.1`. `attach=True` and `target_match=` drive a window already open and leave it open, as
318
- `--attach` and `--target-match` do. Pass `browser_api_key=` to start a cloud browser;
351
+ `--attach` and `--target-match` do, and `foreground=True` brings the run's tab to the front as `--foreground`
352
+ does. Pass `browser_api_key=` to start a cloud browser;
319
353
  with neither argument, it runs local Chrome. Passing both is an error. `cloud_extensions=[...]` loads up to
320
354
  three of your account's ready Browser Use Cloud extensions, by ID, into that cloud browser; it is an error with
321
355
  local or attached browsers.
@@ -334,6 +368,17 @@ async def main() -> None:
334
368
 
335
369
  `resolve_cdp_port(port)` returns the `ws://` URL behind a DevTools port, for a caller that passes `cdp_url=`.
336
370
 
371
+ `run_task` and `connect_cdp` take two access controls that the command line, the MCP server and the JavaScript
372
+ SDK do not offer. `allowed_origins=["https://app.example.com"]` limits the documents a run may read and control
373
+ to those exact origins: scheme, host and optional port, with no wildcard or path. A navigation, redirect, frame
374
+ or popup outside the list is refused before it is sent, and a window already open outside it is never read.
375
+ A sign-in that redirects through another origin needs that origin listed too. The list scopes documents, not
376
+ the network: images, scripts and requests a listed page makes to other hosts still load. A scoped run delivers
377
+ no live frames or screenshots, and combining it with `record=` is an error. `check_access=` is an async callback
378
+ awaited before the browser starts and before every read, navigation and action. When it raises, `connect_cdp`
379
+ raises a `BrowserError` and `run_task` returns a `RunResult` with status `error`; either way the error names only
380
+ the exception's type, never its text.
381
+
337
382
  `RunResult.citations` is a tuple of `Citation` objects, also importable from `fastbrowse`. Each has `id`
338
383
  (the number in the answer), `text` (the Notes fact), `requirement_id` (or `None`), `url`, `quote` and
339
384
  `deep_link`. Each claim in `result.answer` carries numbered Markdown links to its supporting facts.
@@ -373,7 +418,7 @@ package is a TypeScript SDK with no dependencies. With it npm installs one of fi
373
418
  as a native binary, the one for your platform: `@fastbrowse/darwin-arm64`, `darwin-x64`, `linux-arm64`,
374
419
  `linux-x64` or `win32-x64`. No install script runs and nothing is downloaded on first use, so it installs under
375
420
  pnpm and bun with scripts blocked, and it starts offline. It needs Node.js 20 or newer. The npm packages carry
376
- the PyPI package's version and are published by the same tag, starting with the release after 0.5.18.
421
+ the PyPI package's version and are published by the same tag.
377
422
 
378
423
  The binary brings no browser. It finds local Chrome, starts a Browser Use Cloud browser, or drives one already
379
424
  running, as the command line does. It reads the same keys from the environment of your process
@@ -428,7 +473,7 @@ the options are camelCase. The structured data is in `data`, as in Python. The S
428
473
  schema's output type. Data the schema refuses rejects with `OutputValidationError`, which carries the result.
429
474
  A JSON Schema object is accepted too; `output` is then `data`, typed `unknown`.
430
475
 
431
- What a run can fill today is narrower than what a schema can say. The server accepts nested objects, arrays,
476
+ What a run can fill is narrower than what a schema can say. The server accepts nested objects, arrays,
432
477
  `enum`, `const` and optional values, and refuses any other keyword by name before a browser opens. A run
433
478
  fills a flat object of required string, number, integer and boolean fields, as the example has. With any
434
479
  other field the run ends `unverified` with no data.
@@ -449,11 +494,11 @@ await fb.run('Log in as standard_user with the saved password and add the backpa
449
494
 
450
495
  `secrets.resolve` is called each time a value is typed and never for an origin its ref does not cover, so the
451
496
  value leaves your vault at that moment and a one-time code is fresh. `until` gets the address the run ended on,
452
- and anything but `true` keeps the run from `complete`. `onFrame` receives JPEG frames of the active tab;
453
- without it no frame is sent. A callback that throws ends the run with status `error`. The other options are
454
- the command line's: `inputs`, `attachments` as bytes, `downloads`, `record`, and the browser choices
455
- `chrome`, `cloudProfile`, `cdpUrl`, `cdpPort`, `attach`, `targetMatch` and `proxyCountry`, which
456
- `Fastbrowse.start` also takes as defaults for every run. A run passes `null` for one of them to go without
497
+ and anything but `true` keeps the run from `complete`. `onFrame` receives JPEG frames of the active tab; without
498
+ it no frame is sent. A callback that throws ends the run with status `error`. The other options are `run_task`'s:
499
+ `inputs`, `attachments` as bytes, `downloads`, `record`, and the browser choices `chrome`, `cloudProfile`,
500
+ `cdpUrl`, `cdpPort`, `attach`, `targetMatch`, `foreground`, `proxyCountry`, `viewport` and `cloudAllowResizing`,
501
+ which `Fastbrowse.start` also takes as defaults for every run. A run passes `null` for one of them to go without
457
502
  that default.
458
503
 
459
504
  There is no binary for Alpine or another musl system, and none for a platform outside the five. There
@@ -462,6 +507,18 @@ There is no binary for Alpine or another musl system, and none for a platform ou
462
507
  that allows programs only by the team that signed them refuses. The Windows binary is not signed. Bun and Deno are
463
508
  untested.
464
509
 
510
+ ## Use fastbrowse with your agent
511
+
512
+ Install the [fastbrowse skill](docs/skill.md) to delegate website tasks from an agent that supports Agent Skills. It uses the MCP
513
+ tool when connected, or the CLI, and preserves the task's citations, status, authorization, and budget.
514
+ The guide covers agent selection, configuration, and example prompts for Codex and Claude Code.
515
+ Agents without skill support can use the CLI or MCP server directly.
516
+
517
+ ## Run fastbrowse through Nebula
518
+
519
+ [Nebula](https://www.nebula.gg/) embeds fastbrowse in its agent harness, with browser steps, results and
520
+ permitted vault logins. Use Bitwarden or 1Password through Nebula with credentials scoped to authorized websites.
521
+
465
522
  ## Use it from an MCP client
466
523
 
467
524
  `fastbrowse-mcp` serves one `browse` tool over [MCP](https://modelcontextprotocol.io), so Claude Code, Claude
@@ -493,12 +550,12 @@ The server's flags decide what a calling model may do; a call can ask for less,
493
550
 
494
551
  | Flag | Effect |
495
552
  |:--|:--|
496
- | `--local`, `--headed`, `--profile DIR`, `--downloads DIR` | as for the CLI, fixed for every call |
553
+ | `--local`, `--headed`, `--profile DIR`, `--foreground`, `--downloads DIR`, `--cursor` | as for the CLI, fixed for every call |
497
554
  | `--cloud-profile ID` | every call runs signed in as that cloud profile; a calling model cannot choose it |
498
555
  | `--allow-authorize` | let a call pass `authorize` to go through irreversible actions; without it they always stop at `needs_confirmation` |
499
556
  | `--secret NAME=ENV_VAR@ORIGIN` | typed when a call's start page is on `ORIGIN` (`https://*.site.com` covers its hosts); the model sees `NAME` only |
500
557
  | `--bitwarden ITEM` | a vault login a call may name in `bitwarden` |
501
- | `--max-steps N`, `--max-dollars N`, `--max-seconds N` | ceilings per call (defaults 60, $1.00, 600s) |
558
+ | `--max-steps N`, `--max-dollars N`, `--max-seconds N` | optional ceilings per call; defaults are unlimited |
502
559
  | `--max-concurrent N` | runs at once, default 1; more calls wait their turn |
503
560
  | `--transport http`, `--host`, `--port` | streamable HTTP at `/mcp` instead of stdio |
504
561
 
@@ -521,9 +578,9 @@ seconds to minutes, so raise the client's tool timeout if it has one (`MCP_TOOL_
521
578
 
522
579
  ## Evals and development
523
580
 
524
- The [eval workflow](docs/evals.md#workflow) has the run, publish and regeneration commands. Final page checks
581
+ [Eval commands](docs/evals.md) cover running suites, publishing results and regenerating evidence. Final page checks
525
582
  require evidence read by the harness, and a pass also requires the task's expected ending. Published rows carry
526
- build and task versions; the [site feed](docs/results/summary.json) is generated from them.
583
+ build and task versions; the [compact results feed](docs/results/summary.json) is generated from them.
527
584
 
528
585
  See [CONTRIBUTING.md](CONTRIBUTING.md) for setup and checks, [docs/design.md](docs/design.md) for the browser
529
586
  layer, and [docs/jev.md](docs/jev.md) for the Jev assumptions checked against Typesafe's documentation.
@@ -0,0 +1,14 @@
1
+ ../../Scripts/fastbrowse-mcp.exe,sha256=I2I08h1Brh_Z0IlP0BL0kO00C2A0VwEuhWK0ngGPh3s,47104
2
+ ../../Scripts/fastbrowse.exe,sha256=Gvhgn6Rkas3oyDv32ThG3N-V1GSHRlufYuH48_FKEFo,47104
3
+ _editable_impl_fastbrowse.pth,sha256=tSUp9-7xHLVBnY2rS0eA3HsN-LQmHLK1u99SbVQnoxg,30
4
+ fastbrowse-0.5.23.dist-info/INSTALLER,sha256=5hhM4Q4mYTT9z6QB6PGpUAW81PGNFrYrdXMj4oM_6ak,2
5
+ fastbrowse-0.5.23.dist-info/METADATA,sha256=_tHtsDCpIq1LtYvyl1hsqA-XHnZB86idiCg6iqO6IMw,36424
6
+ fastbrowse-0.5.23.dist-info/RECORD,,
7
+ fastbrowse-0.5.23.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
+ fastbrowse-0.5.23.dist-info/WHEEL,sha256=W3fkpkm7-wf9vBI5Z-7s0eWkeM-spu78I8Neb98DeEg,87
9
+ fastbrowse-0.5.23.dist-info/direct_url.json,sha256=17Yl-bY7t4MfSh0BCqmxi7aWPtTEbGMyNMuGnRAqc9o,73
10
+ fastbrowse-0.5.23.dist-info/entry_points.txt,sha256=SlQAK1_4_oywTAMckx8BYuCQJva0F-QuShQPcxtUm-g,95
11
+ fastbrowse-0.5.23.dist-info/licenses/LICENSE,sha256=K_U5s2m7BDEapcEX4SlvotrXk6f1rg7pohD5P6Cn9dM,1088
12
+ fastbrowse-0.5.23.dist-info/licenses/NOTICE,sha256=aLaGCOpkunnLIGPoVVzNiekSAbwRskkM0M3cqNGCv9Y,1887
13
+ fastbrowse-0.5.23.dist-info/uv_build.json,sha256=RBNvo1WzZ4oRRq0W9-hknpT7T8If536DEMBg9hyq_4o,2
14
+ fastbrowse-0.5.23.dist-info/uv_cache.json,sha256=j55NO2nu46eK1z_h_hizi5atPv0iLZ7mCYDtbxFmtc0,194
@@ -0,0 +1 @@
1
+ {"timestamp":{"secs_since_epoch":1792329352,"nanos_since_epoch":618461000},"commit":null,"tags":null,"env":{},"directories":{"src":{"secs_since_epoch":1792329352,"nanos_since_epoch":618461000}}}
Binary file
Binary file
Binary file
Binary file
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: websockets
3
- Version: 17.1
3
+ Version: 17.2
4
4
  Summary: An implementation of the WebSocket Protocol (RFC 6455 & 7692)
5
5
  Author-email: Aymeric Augustin <aymeric.augustin@m4x.org>
6
6
  License-Expression: BSD-3-Clause
@@ -143,7 +143,7 @@ Why shouldn't I use ``websockets``?
143
143
  that build on top of ``websockets`` to support WebSocket connections, like
144
144
  uvicorn_ or Sanic_.
145
145
 
146
- .. _uvicorn: https://www.uvicorn.org/
146
+ .. _uvicorn: https://uvicorn.dev/
147
147
  .. _Sanic: https://sanic.dev/en/
148
148
 
149
149
  What else?
@@ -1,20 +1,20 @@
1
1
  ../../Scripts/websockets.exe,sha256=AxrW-5Uk1L7RA11pUW4WKeiFGKYpQaErydpn6fgw6DY,47104
2
- websockets-17.1.dist-info/INSTALLER,sha256=5hhM4Q4mYTT9z6QB6PGpUAW81PGNFrYrdXMj4oM_6ak,2
3
- websockets-17.1.dist-info/METADATA,sha256=zhsrHN6cJoHT0DKKckGTR1Q2viOP1H2L2GaoGVs1Vj8,6510
4
- websockets-17.1.dist-info/RECORD,,
5
- websockets-17.1.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
- websockets-17.1.dist-info/WHEEL,sha256=0LUNoHxLvcpw9db_x0XozE5jW73-_GOAO7fDDJ4Xt4Q,101
7
- websockets-17.1.dist-info/entry_points.txt,sha256=Dnhn4dm5EsI4ZMAsHldGF6CwBXZrGXnR7cnK2-XR7zY,51
8
- websockets-17.1.dist-info/licenses/LICENSE,sha256=D0RRSZisognTSC0QIEqK3yqkKW_xV6NqXAki8igGMtM,1538
9
- websockets-17.1.dist-info/top_level.txt,sha256=CMpdKklxKsvZgCgyltxUWOHibZXZ1uYIVpca9xsQ8Hk,11
2
+ websockets-17.2.dist-info/INSTALLER,sha256=5hhM4Q4mYTT9z6QB6PGpUAW81PGNFrYrdXMj4oM_6ak,2
3
+ websockets-17.2.dist-info/METADATA,sha256=EgpbstdhlQFw4i_HekNTbRV_hbHPK_nEEzJL_bNeRuc,6506
4
+ websockets-17.2.dist-info/RECORD,,
5
+ websockets-17.2.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
+ websockets-17.2.dist-info/WHEEL,sha256=0LUNoHxLvcpw9db_x0XozE5jW73-_GOAO7fDDJ4Xt4Q,101
7
+ websockets-17.2.dist-info/entry_points.txt,sha256=Dnhn4dm5EsI4ZMAsHldGF6CwBXZrGXnR7cnK2-XR7zY,51
8
+ websockets-17.2.dist-info/licenses/LICENSE,sha256=D0RRSZisognTSC0QIEqK3yqkKW_xV6NqXAki8igGMtM,1538
9
+ websockets-17.2.dist-info/top_level.txt,sha256=CMpdKklxKsvZgCgyltxUWOHibZXZ1uYIVpca9xsQ8Hk,11
10
10
  websockets/__init__.py,sha256=vQHP5G4rtKDXEpSFZLPny_idjboIWv5r_9bAVhdiVmE,7699
11
11
  websockets/__main__.py,sha256=h1QpgvR08tO6TfQHuySKKgQiQVXVIoQRKLEx5sVht_M,67
12
12
  websockets/asyncio/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
- websockets/asyncio/client.py,sha256=G0TEXOnZT0Lpm4_oZGIRRDB48b8_bv14XyhM0wyjg6E,31347
13
+ websockets/asyncio/client.py,sha256=TYTCEYisdPRuHlFzEUYEki8xW3lNgT6Q_iOsiX5DCt4,31461
14
14
  websockets/asyncio/connection.py,sha256=w6ygAY7vpYh3d25xZTupBN06HRVrL202wf7sY8intYw,50996
15
15
  websockets/asyncio/messages.py,sha256=nUTIS5qj6k043A_t69j_43QklSwUXuhDbBgMASJQUXg,11412
16
16
  websockets/asyncio/router.py,sha256=LclmayDF8nep2SB9HUjO9DNIP7e4XqdtukYvPSko_LQ,8011
17
- websockets/asyncio/server.py,sha256=hTRNY9Jtk5_gTdrGqqgPe8uoeLVYDH5SykCjkdL7HOA,35037
17
+ websockets/asyncio/server.py,sha256=RmrKkcw0fq6QKBe84ODr3-ZE-JdO0xkVQXN2AYIBT6s,35357
18
18
  websockets/auth.py,sha256=NZ60zoE10wklboBHzj4Wof9piVB09jO1bDn_KHN8ZcE,586
19
19
  websockets/cli.py,sha256=eRNYm8U2_JLK_Z2nGwmI2BcXUrP0WaJavrIW4G0oZ9Q,7119
20
20
  websockets/client.py,sha256=tVgaFHnshw6mGJpryY3BDgxtvh03a5gDAmBRETM51Bc,16587
@@ -23,8 +23,8 @@ websockets/datastructures.py,sha256=GfaVseBRlwYZ2fCVJkuAbv3mm0-IttIExPBGpdMlshM,
23
23
  websockets/exceptions.py,sha256=7EWhWMpGS7jyOULTL4-Kd722CyU85DPy2wnTJ-aOHBc,14847
24
24
  websockets/extensions/__init__.py,sha256=HdQaQhOVkCR5RJVRKXG5Xmb6cMpAhLaKgRikYRzO64E,102
25
25
  websockets/extensions/base.py,sha256=Je1VMBHq7_gqq5idsCqMPD87CI6m7zpDSRj_lCL37Rc,3026
26
- websockets/extensions/permessage_deflate.py,sha256=G-pvBzOe-6J3NPK2tz1sXgVI4z6Ub7mJBtc05boZxrg,26541
27
- websockets/frames.py,sha256=1RgHu2DVthswDBXpY2JMifkVVgnK1vftZPlr0F8x-zo,17253
26
+ websockets/extensions/permessage_deflate.py,sha256=HoE8dydZ3GgzEv9WaOeLVwR8EGNuR2re2q2AfyEVs3w,27284
27
+ websockets/frames.py,sha256=ckVUQaJ1Vtfo-dZOxOBujS7jaRcjzvjMMzJA74_mJZ0,18049
28
28
  websockets/headers.py,sha256=2XFbUE0BzEIftBR2KS2ygeSRIYzPB-a-q35jfdcZ1MA,16632
29
29
  websockets/http11.py,sha256=aBreFKAKQCjXWQZdqILwJHMr1A4jAKuVwX1GDK4GsJU,18738
30
30
  websockets/imports.py,sha256=oFdWkxypj_diuqneRuA5OWEXLMQ6pAtj-rKqFU6Pmdg,2895
@@ -34,32 +34,32 @@ websockets/legacy/client.py,sha256=O7XKQE_C0nrTW7SJxsy8riKQ60mXzrrIwYLul7NBJJA,2
34
34
  websockets/legacy/exceptions.py,sha256=KrvUEI31DUZs3gl6M-Q-dgsSnsMXzU_bDRuHU6AcKbc,1995
35
35
  websockets/legacy/framing.py,sha256=hR1BBzT4UMl_1zOmlm1tPjdtfnHTAhPevRFYEE-9itc,6598
36
36
  websockets/legacy/handshake.py,sha256=CRRxkJ96TIgWuoMIL0iol4jp4X7llMA8buX4gfo0SwE,5443
37
- websockets/legacy/http.py,sha256=OPu_UljFJH74nxk5V-jnOOkqzdXcpJ6M0LynIpuZ740,7262
37
+ websockets/legacy/http.py,sha256=i3eI8GxjhMK_yd3EUNXNlGHzVzGAq_s2RxrButetf20,7354
38
38
  websockets/legacy/protocol.py,sha256=p2ILhr5nInrRnKPDEtatgVYWamE4_ItN_kP04_aGH4U,65282
39
39
  websockets/legacy/server.py,sha256=40fgshk1STwY7Z4GLVmBkREszQVznOCvnaF_iJ6PUVw,46016
40
40
  websockets/protocol.py,sha256=OtZoM6Dh8pF3ijs9AEbKlUSc4A-sbJnvTTARkk2Cafc,27972
41
- websockets/proxy.py,sha256=Vx6ChvQlavAZ2DkzlmoEw5I5e7alDqBCISi_xZotAS0,5119
41
+ websockets/proxy.py,sha256=auqeGd5H1LmU1fpoua7ElKMItc565ewUd7dklkeKy4g,5053
42
42
  websockets/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
43
43
  websockets/server.py,sha256=Z10tmesqxNj9LhKl7cZIv1QACJnbUzBXojrbTnOnWdA,25336
44
44
  websockets/speedups.c,sha256=cWPv8E0JKXSneV8b732dwNEbyD5JWJKzyI5bqmGiXaY,6149
45
- websockets/speedups.cp313-win_amd64.pyd,sha256=coq0B1NbL94qOte7coJIQaLVgT2nFa6yCIhfj16SrQo,11264
45
+ websockets/speedups.cp313-win_amd64.pyd,sha256=mhSVS19S9jjAk9JvEVw6XcoaegpLSrrXlXBLRQznqjQ,11264
46
46
  websockets/speedups.pyi,sha256=xJUwsMLc11sH19lvnxlmuwROSIxzQYdvN3Qt5zS0674,105
47
47
  websockets/streams.py,sha256=pP55__xWn6xuQCud0uCjnBF_bKult_4AlItBjtnE7N4,4777
48
48
  websockets/sync/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
- websockets/sync/client.py,sha256=06_4UBrGmgmMvOxT9XFI8P9i-B-99_53CfRxePus3GI,41032
50
- websockets/sync/connection.py,sha256=e_47zG9ruPPfub7nytymQcKNB2YZyHj0Andin3U0pUg,49916
49
+ websockets/sync/client.py,sha256=bmiietfT8aB6rmHLhZ6_UabhiLek6jT3FgDT6bdLfLA,41088
50
+ websockets/sync/connection.py,sha256=BgL3d-5pufLjOpXUkmAKR0ypr-7I8ICzFT6NzRul1Kw,50582
51
51
  websockets/sync/messages.py,sha256=SKD1cMArY_Ckh2wFx0J8yyEHNiMo9SofJeGX05qewFw,13174
52
52
  websockets/sync/router.py,sha256=CRYNM_AcBAkzHpkwmdwXAhLa5GsXL5E5vTSBi6YldNs,7426
53
- websockets/sync/server.py,sha256=ZDfkDyWu3q-fkHcyOECrmk99dJMjleb88Ot5PdRnWj0,35355
53
+ websockets/sync/server.py,sha256=WPALbyPwOoonbbZ4t5zaHfr-cW3Z6JTwBbCn17Zv4tQ,35824
54
54
  websockets/sync/utils.py,sha256=JgQVxO_NcQXZd8m6hDeXpSQ_uN6GYF8u9XLHZ7msv3k,1152
55
55
  websockets/trio/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
56
- websockets/trio/client.py,sha256=mCcvqMDkXO0OB5eujr6HSQFpXyqjaec-Q83bPRQyKpM,30997
56
+ websockets/trio/client.py,sha256=p0lX8CVCoU3EoPMAyG2MHd1cS7HvU1VHc2OawP4mu3Q,31056
57
57
  websockets/trio/connection.py,sha256=O69JEVeBjRfPJGT3yEsA599-zB3Fb0ymJfMiuz8U9gE,50503
58
58
  websockets/trio/messages.py,sha256=JvikjM_-yX_ciJVsl2jZVsApAu0nEvlXUSEgCrQC4J4,10767
59
59
  websockets/trio/router.py,sha256=XrUsxHiN-6qY-0AHFokKrztBp9FcSRWGBN3oFn_8dhI,7403
60
- websockets/trio/server.py,sha256=UBsEiepn56-Wv87QqLEdNgZlJpPLYmDFySFj7UQu12s,26463
60
+ websockets/trio/server.py,sha256=MqwbOqqg4UdJiO8tVev1rXWN-tAUvgFLh9joH1dDU6I,26595
61
61
  websockets/trio/utils.py,sha256=OCYM76NkKq32hKmu1C9LibNrUQ6spABFwzHVQC2QFcE,992
62
62
  websockets/typing.py,sha256=vaXqi-_ehflYIFvETaTjp_7QQaWQVLUNSQnu_J9E5CA,1913
63
- websockets/uri.py,sha256=gohMr47baKGfjhydsaOE1sc8FH_7B8f10SdunNqY2p0,3232
63
+ websockets/uri.py,sha256=phwGO-agJEGuTFOK8XzCvjP1132NiH1yKdaxXiOeVBU,3174
64
64
  websockets/utils.py,sha256=DsLsUjT1hUSWXjZr5a1gMxy-icUydcXQL8eOn0Rwoi4,2098
65
- websockets/version.py,sha256=Wq70AIeFPVrGEqHKVwR7ECG6KWin68Kl7xAI3rrl5Qg,3294
65
+ websockets/version.py,sha256=wrBJoJAcDL4n5qFYj_PJMyxyTD8U9zTr7y02bJJi9OU,3294
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fastbrowse/win32-x64",
3
- "version": "0.5.19",
3
+ "version": "0.5.23",
4
4
  "description": "The fastbrowse binary for Windows on x64.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -1,14 +0,0 @@
1
- ../../Scripts/fastbrowse-mcp.exe,sha256=I2I08h1Brh_Z0IlP0BL0kO00C2A0VwEuhWK0ngGPh3s,47104
2
- ../../Scripts/fastbrowse.exe,sha256=Gvhgn6Rkas3oyDv32ThG3N-V1GSHRlufYuH48_FKEFo,47104
3
- _editable_impl_fastbrowse.pth,sha256=tSUp9-7xHLVBnY2rS0eA3HsN-LQmHLK1u99SbVQnoxg,30
4
- fastbrowse-0.5.19.dist-info/INSTALLER,sha256=5hhM4Q4mYTT9z6QB6PGpUAW81PGNFrYrdXMj4oM_6ak,2
5
- fastbrowse-0.5.19.dist-info/METADATA,sha256=l_hggNhjxHhCyunHbMTPUkdpyJ3tl79Y1AHPhtN7EKo,31033
6
- fastbrowse-0.5.19.dist-info/RECORD,,
7
- fastbrowse-0.5.19.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
- fastbrowse-0.5.19.dist-info/WHEEL,sha256=W3fkpkm7-wf9vBI5Z-7s0eWkeM-spu78I8Neb98DeEg,87
9
- fastbrowse-0.5.19.dist-info/direct_url.json,sha256=17Yl-bY7t4MfSh0BCqmxi7aWPtTEbGMyNMuGnRAqc9o,73
10
- fastbrowse-0.5.19.dist-info/entry_points.txt,sha256=SlQAK1_4_oywTAMckx8BYuCQJva0F-QuShQPcxtUm-g,95
11
- fastbrowse-0.5.19.dist-info/licenses/LICENSE,sha256=K_U5s2m7BDEapcEX4SlvotrXk6f1rg7pohD5P6Cn9dM,1088
12
- fastbrowse-0.5.19.dist-info/licenses/NOTICE,sha256=aLaGCOpkunnLIGPoVVzNiekSAbwRskkM0M3cqNGCv9Y,1887
13
- fastbrowse-0.5.19.dist-info/uv_build.json,sha256=RBNvo1WzZ4oRRq0W9-hknpT7T8If536DEMBg9hyq_4o,2
14
- fastbrowse-0.5.19.dist-info/uv_cache.json,sha256=7k_iIcnr2IA80wtzhp5udN82yGwf7-2kV11jkwWB8qQ,194
@@ -1 +0,0 @@
1
- {"timestamp":{"secs_since_epoch":1791321499,"nanos_since_epoch":175274600},"commit":null,"tags":null,"env":{},"directories":{"src":{"secs_since_epoch":1791321499,"nanos_since_epoch":178279400}}}