Skip to content

yutori 0.9.3

Choose a tag to compare

@ksk002 ksk002 released this 29 Aug 03:42
· 188 commits to main since this release
2db7e30

What's Changed

  • docs(README): add browse list and research list CLI examples by @dhruvbatra in #140
  • docs(llms.txt): add Navigator API section for coding agents by @dhruvbatra in #141
  • refactor: extract truncate_for_display CLI helper by @dhruvbatra in #142
  • fix: use datetime.now(timezone.utc) in make_run_id and correct action_items join by @dhruvbatra in #143
  • refactor: extract shared exception-to-returncode mapping in install_flow by @dhruvbatra in #144
  • refactor: extract make_json_response() test helper to dedupe mock-response boilerplate by @dhruvbatra in #145
  • refactor: extract make_status_response()/make_empty_response() test helpers by @dhruvbatra in #147
  • refactor: dedupe install_flow's private truncation helper into truncate_for_display by @dhruvbatra in #148
  • refactor: extract _completed_process() test helper to dedupe CompletedProcess boilerplate by @dhruvbatra in #149
  • refactor: extract _print_version() to dedupe CLI version output by @dhruvbatra in #150
  • refactor: migrate test_http.py to shared make_status_response fixture by @dhruvbatra in #151
  • refactor: migrate test_auth.py to shared httpx.Response mock fixtures by @dhruvbatra in #152
  • Remove make_empty_response, now redundant with make_status_response by @dhruvbatra in #153
  • refactor: extract BrowserAgentMixin to dedupe example agent boilerplate by @dhruvbatra in #155
  • refactor: dedupe _format_message_for_log into BrowserAgentMixin by @dhruvbatra in #156
  • refactor: extract make_mock_chat_completion() test helper to dedupe ChatCompletion boilerplate by @dhruvbatra in #154
  • refactor: dedupe _use_tmp_config fixture across test_auth.py test classes by @dhruvbatra in #157
  • refactor: consolidate run_interactive_command's triplicate except blocks by @dhruvbatra in #158
  • refactor(tests): rename _usage_fixtures.py to _client_fixtures.py by @dhruvbatra in #159
  • refactor(examples): extract shared llm_retry decorator by @dhruvbatra in #161
  • cleanup: drop redundant .keys() in dict iteration by @dhruvbatra in #160
  • refactor(tests): dedupe fake_which/fake_run_command closures in test_install_flow.py by @dhruvbatra in #162
  • refactor(tests): extract _invoke_cli helper to dedupe get_authenticated_client patch in test_cli.py by @dhruvbatra in #163
  • refactor(tests): extract shared OAuth callback scaffold in test_auth.py by @dhruvbatra in #165
  • refactor: unify _clip_image_url between examples/_common.py and replay.py by @dhruvbatra in #166
  • docs: fix stale function names in examples/README.md by @dhruvbatra in #164
  • refactor(tests): extract _tool_call/_tool_call_message helpers in test_navigator_replay.py by @dhruvbatra in #167
  • refactor(tests): extract mocked OpenAI/AsyncOpenAI client helpers by @dhruvbatra in #168
  • refactor(tests): extract CLIInstallState/SDKInstallPlan factories in test_install_flow.py by @dhruvbatra in #169
  • refactor(navigator): extract TrajectoryRecorder text I/O into shared helpers by @dhruvbatra in #170
  • refactor(tests): extract _invoke_login helper in test_cli_auth.py by @dhruvbatra in #171
  • refactor(cli): extract _slate_line helper for installer step-line markup by @dhruvbatra in #172
  • refactor(navigator): dedupe image-url/text block extraction in replay.py by @dhruvbatra in #173
  • refactor(tests): consolidate duplicate CLIInstallState factory in test_install_flow.py by @dhruvbatra in #174
  • refactor(examples): build Agent from Config.model_dump() in main() by @dhruvbatra in #175
  • refactor(examples): extract run_example_agent() shared main() tail by @dhruvbatra in #176
  • refactor(tests): extract _patched_callback_server() for OAuth callback scaffold by @dhruvbatra in #178
  • refactor(examples): extract shared n1 primitive-action dispatch by @dhruvbatra in #177
  • fix(examples): use UTC for memo filename timestamp in navigator_n1_memo by @dhruvbatra in #179
  • refactor(examples): extract _click_coordinates() for repeated coord-resolution by @dhruvbatra in #180
  • refactor(examples): dedupe primitive-action dispatch in navigator_n1_custom_tools.py by @dhruvbatra in #181
  • refactor(examples): dedupe identical _predict() across n1 example agents by @dhruvbatra in #182
  • refactor(examples): extract build_agent_arg_parser() for shared main() arg-parser setup by @dhruvbatra in #183
  • refactor(auth): dedupe registration-state message text between auth.py and install_flow.py by @dhruvbatra in #184
  • refactor(tests): extract require_examples_extra() for the loguru importorskip guard by @dhruvbatra in #185
  • refactor(examples): extract shared Agent init/run bookkeeping into BrowserAgentMixin by @dhruvbatra in #186
  • refactor(examples): extract shared predict/execute step loop into BrowserAgentMixin by @dhruvbatra in #187
  • refactor(examples): extract run_example_main() to dedupe main() across n1 examples by @dhruvbatra in #188
  • refactor(examples): extract shared browser-lifecycle run() body into BrowserAgentMixin by @dhruvbatra in #189
  • refactor(examples): extract shared _execute() body into BrowserAgentMixin by @dhruvbatra in #190
  • refactor(examples): extract shared _call_llm_with_tools() into BrowserAgentMixin by @dhruvbatra in #191
  • refactor(tests): parametrize run_interactive_command exception-mapping tests by @dhruvbatra in #192
  • refactor(examples): extract _init_common_agent_config() into BrowserAgentMixin by @dhruvbatra in #194
  • refactor(examples): extract shared _call_llm() request/replay body into BrowserAgentMixin by @dhruvbatra in #195
  • Extract shared BaseAgentConfig for n1 example scripts by @dhruvbatra in #196
  • refactor(tests): extract make_trimmable_messages() fixture for payload-trim tests by @dhruvbatra in #197
  • refactor(tests): extract make_call_llm_agent() shared by call_llm mixin tests by @dhruvbatra in #198
  • refactor(examples): extract _trim_request_messages() shared by navigator_n1/n1_5 by @dhruvbatra in #199
  • Extract _verification_failure() helper for repeated verification-failure handling by @dhruvbatra in #200
  • refactor(tests): extract patched_npx_install() for maybe_install_mcp* tests by @dhruvbatra in #201
  • refactor(examples): extract shared Agent.init into BrowserAgentMixin by @dhruvbatra in #202
  • refactor(examples): extract _navigate_and_finish() for n1.5 nav actions by @dhruvbatra in #203
  • refactor(tests): extract _image_message() into shared _client_fixtures by @dhruvbatra in #204
  • refactor(examples): extract _move_mouse_and_finish() for n1.5 mouse actions by @dhruvbatra in #205
  • refactor(examples): extract _move_with_modifier_held() for n1.5 click/scroll actions by @dhruvbatra in #206
  • refactor(examples): use payload.py's canonical default constants instead of hardcoded literals by @dhruvbatra in #207
  • refactor(examples): extract _press_key_and_finish() for n1.5 key_press/hold_key by @dhruvbatra in #208
  • refactor(examples): extract _find_record() helper in navigator_n1_memo.py by @dhruvbatra in #209
  • refactor(auth): consolidate getattr lazy-import dispatch to match n1 shim idiom by @dhruvbatra in #210
  • refactor(tests): cache install/uninstall script content via fixtures by @dhruvbatra in #211
  • refactor(cli): extract render_entity_table() shared by scouts/task list output by @dhruvbatra in #212
  • refactor(tests): add async_client fixture mirroring the sync client fixture by @dhruvbatra in #214
  • refactor(cli): extract list_and_render_tasks() shared by browse/research list by @dhruvbatra in #213
  • refactor(tests): drop redundant client = async_client alias in async client tests by @dhruvbatra in #215
  • refactor(tests): parametrize 401/403 auth-error tests in client test suites by @dhruvbatra in #216
  • refactor(tests): parametrize 400/500 API-error tests in test_client.py by @dhruvbatra in #217
  • refactor(examples): consolidate the four click-action branches in execute_n1_primitive_action by @dhruvbatra in #220
  • refactor(tests): parametrize 400/500 API-error test in test_async_client.py by @dhruvbatra in #219
  • refactor(tests): extract patch_async_http() for httpx.AsyncClient patching by @dhruvbatra in #221
  • refactor(tests): use shared client fixture in test_client.py by @dhruvbatra in #222
  • refactor(examples): dedupe navigation-settle pattern in execute_n1_primitive_action by @dhruvbatra in #223
  • fix(cli): catch APIConnectionError in cli_api_errors, not just httpx.HTTPError by @dhruvbatra in #224
  • refactor(tests): dedupe bash-function-body extraction in test_bash_scripts.py by @dhruvbatra in #225
  • refactor(navigator): use NAVIGATOR_N1_5_MODEL constant in loop.py Protocol stubs by @dhruvbatra in #226
  • refactor(chat): use NAVIGATOR_N1_5_MODEL constant for chat completions default by @dhruvbatra in #227
  • refactor(tests): use NAVIGATOR_N1_MODEL/NAVIGATOR_N1_5_MODEL constants in client tests by @dhruvbatra in #228
  • refactor(tests): use NAVIGATOR_N1_MODEL constant in remaining test fixtures by @dhruvbatra in #229
  • refactor(client): type exit/aexit params to match httpx's own signature by @dhruvbatra in #230
  • refactor(tests): use NAVIGATOR_N1_MODEL constant in test_navigator_replay.py by @dhruvbatra in #231
  • refactor(navigator): rename local html vars shadowing the html import in replay.py by @dhruvbatra in #232
  • refactor(cli): rename local version var shadowing the importlib.metadata import in install_flow.py by @dhruvbatra in #233
  • refactor(client): hoist duplicated require_api_key import to module level by @dhruvbatra in #234
  • refactor(cli): consolidate env-scoped executable lookup in install_flow by @dhruvbatra in #235
  • refactor(cli): extract inspect_cli_install's paired failure return by @dhruvbatra in #236
  • refactor(tests): extract _patched_successful_cli_inspect in test_install_flow by @dhruvbatra in #237
  • refactor(cli): hoist function-local imports to module level in commands/init.py by @dhruvbatra in #238
  • refactor(cli): hoist yutori.version import to module level in cli/main.py by @dhruvbatra in #239
  • refactor(cli): type the shared CLI client helpers as YutoriClient by @dhruvbatra in #240
  • refactor(http): type _BaseNamespace's client param as httpx.Client/AsyncClient by @dhruvbatra in #241
  • refactor(http): narrow _request's method param to a Literal of the four dispatched HTTP verbs by @dhruvbatra in #242
  • refactor(exceptions): type APIError.response as httpx.Response by @dhruvbatra in #243
  • refactor(http): type _request/_request_kwargs's params/json as dict[str, Any] | None by @dhruvbatra in #244
  • docs: document n2 CUA harness setup by @ksk002 in #245
  • docs: update SDK positioning and Navigator copy by @ksk002 in #246
  • docs: n2 README pass, retire n1 examples, add Daytona n2 example by @dhruvbatra in #248
  • docs: keep n1.5 in Navigator copy by @ksk002 in #247
  • docs(api.md): sync browsing.create params with today's docstring update by @dhruvbatra in #249
  • feat: add stable n2 computer-use SDK by @ksk002 in #250

New Contributors

Full Changelog: v0.8.1...v0.9.3