| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
test(omi-cli): tests package init Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> | 5 个月前 | |
Add hosted MCP setup and local Omi CLI agent access (#7684) * Add agent-friendly Omi overview * Add Agents settings setup surface * Tighten Hermes agent setup guidance * Humanize Agents settings copy * Simplify generic agent setup * Collapse Agents setup to one prompt * Move agent setup into Apps * Simplify agent setup prompt * Add local agent MCP server * Start local MCP server from desktop app * Describe hosted and local Omi MCP setup * Copy local Omi access in agent setup * Allow rotating local agent MCP token * Add agent MCP connection checks * Add agent connection reset and test controls * Harden agent MCP setup and memory filters * Default agent memories to recent first * Polish agent setup sheet UX * Improve local agent MCP context tools * Fix yolo desktop backend URL packaging * Humanize agent setup copy * Add local Omi CLI agent access * Humanize agent setup copy * Tighten agent prompt and ignore local build artifacts * Polish agent setup icon and buttons * Keep agents robot icon on title * Clarify Omi agent skill discovery * Guard agent task writes * Address agent access PR review * Declare CLI click dependency * Improve local CLI agent JSON output * Prepare desktop agent runtime consistently * Block mutating read-only SQL CTEs | 4 个月前 | |
[Bounty proposal] fix(cli): validate date bounds and harden action-item payload handling ($25 proposed) (#20008) * fix(cli): validate date bounds and harden action-item payload handling * fix(cli): remove extra EOF blank line for diff hygiene * fix(cli): normalize mixed datetime timezones and add diagnostic warning for non-list envelopes --------- Co-authored-by: Lakshayjit Singh <24bai70225@cuchd.in> | 17 小时前 | |
fix(cli): strip lone surrogates from rendered action-item notes (#20680) action_items_to_markdown renders each action item and the whole document into strings, then writes them with write_text(..., encoding="utf-8"). json.loads accepts an escaped lone surrogate such as "\ud800" from a malformed export, so the code point reached the rendered note verbatim and the write raised UnicodeEncodeError, losing the whole export. conversations_to_sqlite, conversations_to_markdown and memories_to_markdown already drop these code points at their render boundary; this brings the action-items recipe in line. Both render returns now go through one helper, so the single-item renderer and the document renderer are both covered. | 14 天前 | |
sdks: add opml export recipe for action items (#19006) * feat: add action_items_to_opml.py * feat: add action_items_opml.md * feat: add test_action_items_to_opml.py * fix(python-cli): align opml recipe with schema, move tests to tests/ - Update due date extraction to prioritize due_at - Remove category field to match actual schema - Modernize datetime to datetime.now(timezone.utc) - Move test suite to sdks/python-cli/tests/ - Add action_items_opml.md entry to examples/README.md * fix(tests): correct relative import path for opml recipe - Fix recipe_path in test_action_items_to_opml.py to reference examples/ directory - Use sys.executable in CLI execution tests for consistent cross-platform execution | 14 天前 | |
fix(cli): strip lone surrogates before Org syntax guards run (#20681) Stripping only at the payload boundary left a leading surrogate invisible to heading_text, which then skipped its escaping; removing the surrogate afterwards exposed bare Org syntax such as a "[#A]" priority cookie or a [2026-09-25] agenda timestamp. The strip now happens in one_line, before callers inspect the text, and the payload-level strip stays as a backstop. | 14 天前 | |
fix(cli): coerce loosely typed records and sanitize surrogates in action_items_to_sqlite ( bounty proposal) (#20574) * fix(cli): coerce loosely typed records and sanitize surrogates in action_items_to_sqlite * fix(cli): serialize list values as JSON in text() | 14 天前 | |
fix(cli): strip lone surrogates before todo.txt syntax guards run (#20682) Stripping only at the payload boundary left a leading surrogate invisible to task_text, which then skipped its escaping; removing the surrogate afterwards exposed a bare "x " and exported an open item as completed. The strip now happens in one_line, before callers inspect the text, and the payload-level strip stays as a backstop. | 14 天前 | |
fix(cli): keep config load and webhook target reports the same on Windows (#22314) * fix(cli): keep config load and webhook target reports the same on Windows The Python CLI's Windows job has been red on main since #22007 and #22159. Both failures are real differences in what Windows users get: - config.load() relied on open() raising NotADirectoryError when a regular file sits where a parent directory should be. Windows raises FileNotFoundError for that path, so it loaded as a clean first run and save()'s overwrite guard stayed unarmed. Check for a non-directory parent explicitly and record the same error on every OS. - omi app webhook verify printed resolved addresses with str(), and CPython 3.12.10 (the Windows runner's Python) renders ::ffff:100.64.0.1 as ::ffff:6440:1. Spell IPv4-mapped addresses out so the report names the address the same way on every Python. New tests reproduce the Windows open() error and the older str() so the Linux jobs cover both. Adds failure class FC-host-specific-primitive-shape. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * ci: run with ci:full Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> | 18 小时前 | |
fix(cli): guard ask command against non-dict payloads and malformed sources (#18605) Co-authored-by: Lakshayjit Singh <24bai70225@cuchd.in> | 25 天前 | |
fix(cli): reject non-ASCII characters in developer API keys (#20406) * fix(cli): reject non-ASCII characters in developer API keys validate_api_key_format now rejects keys containing non-ASCII characters with a clear UsageError before any network round-trip, matching the issue repro (key with a CJK character passes prefix+length checks today). * chore(cli): declare Failure-Class for preflight * fix(cli): reject whitespace and control characters in developer API keys Follows the non-ASCII rejection from 33f01d16d4: a key with an interior space or a control byte still slipped through isascii()+length checks and failed late at the HTTP verification round-trip. The backend pattern is omi_dev_ + 32 hex chars, so printable-ASCII-only is the correct client-side contract. * chore: re-run Hygiene after restoring Failure-Class declaration --------- Co-authored-by: 1132dadf <1132dadf@users.noreply.github.com> | 16 天前 | |
fix(cli): browser login stores the OAuth session — chat is reachable again (#21529) * fix(cli): browser login stores the OAuth session — chat is reachable again omi auth login --browser minted a developer API key and stored it as auth_method='api_key' — but 'omi chat' gates on auth_method == 'oauth', so every user who signed in through the only supported flow got 'Chat requires browser sign-in' and could never reach chat. Store the OAuth session (id_token + refresh_token, auth_method='oauth') so chat passes its gate, and keep the minted developer key in profile.api_key for the /v1/dev/* endpoints that need it. The session still authenticates POST /v1/dev/keys once to mint that key — the api_key field just now carries it alongside the oauth tokens instead of replacing them. Resolves #21223. * fix(cli): dual-credential profile picks the bearer per path family Two blocking regressions from review: - _build_headers sent the OAuth id_token on every request, so /v1/dev/user/* (get_api_key_auth) 401'd for browser-login users — the minted dev key was stored but never sent. - refresh-token rotation rewrote the profile without api_key, wiping the minted key on the first refresh. _bearer_headers_for() overrides Authorization per request: dev key for /v1/dev/user/*, ID token elsewhere (/v2/*, dev-keys mint). api_key profiles are unchanged. Adds the client-level header test the review asked for + a rotation-preservation test. --------- Co-authored-by: Yggdrasil <yggdrasilworld@users.noreply.github.com> | 4 天前 | |
feat(cli): stream Omi chat with shared history and task commands (#20685) * feat(cli): add streaming terminal chat * test(cli): harden terminal chat stream and reset output | 14 天前 | |
fix(python-cli): allow clearing an action item due date (#13110) Verification: 133 tests passed; repository preflight and synthetic CLI smoke passed. Failure-Class: none | 30 天前 | |
fix(cli): send the dev key to GET /v1/dev/key so browser login completes (#22216) auth login --browser mints a Developer API key and then verifies it with GET /v1/dev/key, the key describing itself. That route depends on get_api_key_auth and accepts only an omi_dev_ bearer, but the per-route credential pick from #21529 sent the dev key to /v1/dev/user/* only and the Firebase ID token everywhere else. The probe answered 401 ("Malformed Developer API key"), auth login read that as a bad key and cleared the session it had just stored: every browser login ended in "Authentication failed" with an empty profile. Treat GET /v1/dev/key like the /v1/dev/user family. /v2/*, /v1/action-items and POST /v1/dev/keys keep the ID token. | 17 小时前 | |
fix(cli): reject malformed URLs in config set (#19689) `omi config set` currently leaks a raw ValueError for `http://[` (instead of a clean UsageError), accepts lazily-validated ports such as `http://example.test:abc` and `https://example.test:65536`, and saves an authority without a hostname like `http://:47778`. Force url split validation (`.port` / `.hostname` access) so all three classes fail with the existing UsageError, and add regression tests plus an IPv6 positive case. Addresses #18904 Co-authored-by: Feng Ce <1132dadf@users.noreply.github.com> | 17 小时前 | |
fix: escape config status values in CLI output (#12977) * fix: escape config status values in Rich output * test: cover literal Rich config status values | 1 个月前 | |
fix(cli): validate conversation text/language and escape console output (#20986) Co-authored-by: I-Am-Finite <resercmichael@gmail.com> | 10 天前 | |
fix(cli): conversation list --limit silently truncated above 100/25 (#13950) (#13955) * fix(cli/backend): bump conversation list page cap 25/100 → 500/1000 Sync CLI server_page_size with backend limit so large --limit requests paginate correctly without silent truncation. Maintainer review: hygiene was red on stale branch; rebased on latest main, reduced diff to minimal cap bump. * fix(test): update conversation limit assertions to match new 1000/500 caps Review feedback from aryanorastar: test_pagination_is_clamped_before_firestore still asserted old values (100/25) after the limit raise to 1000/500. * fix(test): update CLI pagination tests for raised 1000/500 server caps After #13950 raised server page caps (100→1000, 25→500), all CLI requests within --limit max (200) now fit in a single server request. Updated all test_conversation_list_paging assertions to match: - Single-request path for limit <= cap - No auto-pagination for short server responses - Renamed continues_on_short_page → returns_what_server_gives * ci: re-trigger hygiene check * docs: add Failure-Class declaration to PR body * docs: fix Failure-Class declaration format * docs: fix Failure-Class declaration to exact format * fix(cli/backend): unify conversation list cap at 200 (matches CLI --limit max) Addresses aryanorastar's review concern: the previous 500/1000 caps made CLI pagination dead code (CLI --limit max=200 < server_page_size=500) and raised the transcript cap 20x (25→500) without clear API policy justification. New behavior: - Backend: unified cap of 200 (was 25/100, was briefly 500/1000) - CLI: server_page_size = 200 (matches backend, pagination is live) - Fixes #13950: --limit 200 now returns 200 (was silently truncated to 100) - Modest increase: 100→200 (2x) and 25→200 (8x) for transcripts - Pagination loop is no longer dead code Failure-Class: FC-negotiated-hint-as-hard-limit | 17 天前 | |
fix(python-cli): claim export paths atomically so overwrite=False cannot clobber (#21447) * fix(python-cli): claim export paths atomically so overwrite=False cannot clobber * test(python-cli): pin atomic export-path claiming | 5 天前 | |
fix(cli): strip lone surrogates from rendered conversation notes (#20673) * fix(cli): strip lone surrogates from rendered conversation notes conversations_to_markdown renders a conversation into one Markdown string and writes it with write_text(..., encoding="utf-8"). json.loads accepts an escaped lone surrogate such as "\ud800" from a malformed export, so the code point reached the rendered note verbatim and the write raised UnicodeEncodeError, losing the whole conversation. conversations_to_sqlite already drops these code points at its coercion boundary; this brings the Markdown sibling in line. Scalars are sanitized before json.dumps as well, because escaping a surrogate as \uD800 is a forbidden YAML code point that makes the frontmatter unparsable, and the strip at the render boundary covers the body text for every caller. * fix(cli): sanitize conversation date before frontmatter serialization | 14 天前 | |
fix(cli): keep conversation Markdown export UTF-8 under legacy stdio (#21033) * fix: preserve UTF-8 conversation exports through legacy stdio Declare the exporter input and progress-output encoding independently of the host locale. Cover file and BOM stdin input through the real entry point under ASCII and CP1252 streams. * fix: normalize Markdown export PR files to LF | 9 天前 | |
fix(cli): coerce loosely typed records in conversations_to_sqlite ($25 bounty proposal) (#20330) * fix(cli): coerce loosely typed records in conversations_to_sqlite The structured summary and text fields of a conversation export are not schema-validated upstream, so one malformed record aborted the whole SQLite import and every valid conversation in the page was lost. - guard the non-dict "structured" value instead of calling .get() on it - coerce dict/list/scalar fields to storable text via a text() helper - drop unpaired surrogates so values stay UTF-8 encodable - route unparseable and non-string timestamps through text() Coerce rather than reject, matching conversations_to_markdown.py, which already guards the non-dict structured case. * fix(cli): strip surrogates from ids and drop them instead of replacing Three defects found in review of the loosely-typed-record hardening: - strip_surrogates() used errors="replace", which substitutes "?" for an unpaired surrogate and silently alters the imported text, contradicting its own docstring. errors="ignore" removes the code point as documented. - rows_from() bound the id via str(conv_id) without sanitising it, so a lone surrogate in "id" still raised UnicodeEncodeError at executemany. The id is now passed through strip_surrogates like every other field. - utc_stamp() opened with `if not value`, dropping falsy non-string timestamps (0, False, [], {}) as NULL before text() could store them, contradicting the documented "stored as text rather than dropped". The guard now matches None and "" specifically. Adds regression tests for all three: the surrogate test asserts the "?" is absent, the id test asserts the row imports and re-encodes, and the timestamp test pins 0/False/[]/{} to their text form. All three fail against the previous implementation. | 17 天前 | |
feat(python-cli): conversations -> TSV export recipe (#19310) (#19339) * feat(python-cli): conversations -> TSV export recipe (#19310) * docs(python-cli): align conversations_to_tsv comments and docstrings to English (#19310) --------- Co-authored-by: shuoYun114 <38515713+shuoYun114@users.noreply.github.com> | 17 小时前 | |
fix(cli): accept ISO datetime offsets and fractional seconds (#12974) * fix(cli): accept ISO datetime offsets and fractions Preserve explicit timezone offsets and fractional seconds across all ten conversation and action-item datetime options. Retain date-only and naive inputs. Regression: 30 failures before, 61 focused passes after; full CLI suite 189 passed, 1 platform skip. Fixes #12966. AI assistance: OpenAI Codex prepared and tested this change with the account owner's authorization. * test(cli): assert datetime errors on stderr Address PR #12974 review: inspect the dedicated error stream and place datetime usage documentation before Development. Reproduced the prior failure on Click 8.1.8/Typer 0.15.4. After correction, full CLI suites: 189 passed, 1 Windows-only skip on both that pair and Click 8.5.0/Typer 0.25.1. Black and local/CI preflight pass; shallow-history guard skip remains documented. Failure-Class: none AI assistance: OpenAI Codex prepared and tested this revision with the account owner's authorization. | 1 个月前 | |
fix(cli): keep delete prompts off stdout in --json mode (#22217) The CLI README promises that in --json mode nothing but JSON is written to stdout. The six prompted deletes (memory, conversation, action item, goal, config profile, local task) call typer.confirm without err=, so without --yes the prompt went to stdout and a caller parsing it as JSON got a decode error instead of a clean abort. omi chat clear already passes err=ctx.renderer.json_mode; do the same for the deletes. The existing declined-prompt test ran this case for the four resources but never looked at stdout; it now asserts stdout stays empty, and a new test covers the profile and local task deletes. | 18 小时前 | |
fix(cli): treat DELETE as an ambiguous write in the retry predicate (#19020) _may_retry() and the four outcome-unknown guards consulted only {"POST", "PATCH"}, so DELETE was treated as replay-safe. A DELETE whose response was lost (ReadTimeout) or that returned a 5xx was retried to the attempt budget even though the server may already have removed the resource, and an exhausted ambiguous DELETE surfaced a plain "Server error (500)" instead of the "outcome unknown" contract the caller needs in order to decide whether to re-check the resource. Introduce one shared _AMBIGUOUS_WRITE_METHODS = frozenset({"POST", "PATCH", "DELETE"}) and consult it at all six guard sites, so a newly added non-idempotent verb cannot be retried by omission. Adds tests/test_delete_retry_safety.py (5 cases): an ambiguous DELETE is not replayed on ReadTimeout or on 500 (single attempt asserted) and still retries on ConnectError/ConnectTimeout/PoolTimeout. Failure-Class: new (FC-ambiguous-write-replayed-on-lost-response) | 21 天前 | |
fix(python-cli): reject non-finite goal values before requests (#18603) Co-authored-by: shuoYun114 <38515713+shuoYun114@users.noreply.github.com> | 25 天前 | |
fix(python-cli): allow clearing a goal unit (#13104) Add --clear-unit to preserve omitted/set/null PATCH semantics. Reject conflicting unit flags before HTTP. Regression tests cover request bodies and main() JSON errors. Validation: 135 passed, 1 Windows-only skip; installed CLI loopback smoke passed; make preflight passed (12 checks). Failure-Class: none | 1 个月前 | |
feat(python-cli): goals -> Markdown checklist tree export recipe (\ bounty proposal) (#20439) * feat(cli): add goals to markdown checklist recipe and test suite * fix(python-cli): address code review feedback on goals markdown recipe - Update CLI docstring and recipe docs to include --include-inactive --limit 100 flags - Add OverflowError protection in safe_float for large integer conversions - Harden descending goals with missing current_value to 0% progress and uncompleted - Require completed status for qualitative goals (target == min_value) to reach 100% - Unwrap single-goal dictionary candidate wrappers in extract_goals - Parse subtask completion flags with defensive is_truthy helper against 'false' strings - Clarify official Omi API success_criteria support in recipe documentation - Use precise line-anchored regex assertions for frontmatter counts in unit tests - Add regression tests covering overflow, descending goals, qualitative goals, and string booleans * style(sdks/python-cli): format goals markdown recipe with black --------- Co-authored-by: shuoYun114 <38515713+shuoYun114@users.noreply.github.com> | 17 小时前 | |
fix(cli): reject non-finite JSON numbers before HTTP serialization (#13300) (#13307) Reject NaN, Infinity, -Infinity, and overflow floats in CLI commands before passing to HTTP serializers. Document finite JSON requirement in README. Co-authored-by: CreamPle <CreamPle@users.noreply.github.com> Co-authored-by: vvv7zmmf7t-sketch <300803302+vvv7zmmf7t-sketch@users.noreply.github.com> | 1 个月前 | |
fix(cli): map deeply nested JSON RecursionError to ValueError (#13521) Closes #13507 Co-authored-by: Nukey <Nukeys@users.noreply.github.com> | 1 个月前 | |
fix(python-cli): reject lone surrogates in JSON input before HTTP encoding (#13389) - Validate decoded strings and dict keys in load_json_input for UTF-8 encodability. - Prevent unhandled UnicodeEncodeError inside httpx request serializer when lone surrogates are supplied. - Add focused test suite in test_json_input_unicode.py covering root, keys, nested structures, and byte inputs. | 1 个月前 | |
fix(cli): tolerate a missing scopes field and prove the legacy fallback contract - verify_key uses credential.get("scopes") so a partially deployed backend that omits the field yields unknown scopes and the legacy probe/warning path applies instead of a KeyError crash. - test_login_older_backend_fallback now asserts the verified candidate key is actually persisted (store-only-after-verification). - New 401-fallback rejection test: the memories probe is the only auth gate on a legacy backend, so its 401 must exit 2 and leave the saved config unchanged. Verification: pytest tests/test_auth_api_key.py tests/test_key_info.py — 30 passed. | 17 天前 | |
fix(cli): keep on-device and exact-text hits in search-screen JSON (#22303) * fix(cli): keep on-device and exact-text hits in search-screen JSON `omi --json local search-screen` only parsed result lines that end in "similarity: <score>", which Desktop prints on its Gemini route. Its on-device route labels hits "hybrid: keyword|vector|both" and its exact-text fallback "match: text". Desktop takes the on-device route whenever on-device embeddings are on and for every plan without cloud screen vectors, so JSON mode returned no results there: the hits stayed only in the raw text and the CLI ran its exact SQL fallback as if the search had found nothing. Accept either label. Each result keeps `similarity` (null when Desktop gives no score) and gains `matched_by` (null on the Gemini route). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * ci: run with ci:full Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> | 18 小时前 | |
fix(cli): enforce utf-8 encoding for screenshot text outputs (#13084) In `sdks/python-cli/omi_cli/commands/local.py`, `_write_screenshot_result()` invoked `output.write_text()` using the system default encoding. On Windows locales with legacy non-UTF-8 code pages, saving OCR text or metadata containing multilingual characters raises `UnicodeEncodeError`. Explicitly specify `encoding="utf-8"` on all `write_text()` calls in `_write_screenshot_result()`. Fixes #13072 | 1 个月前 | |
fix(python-cli): return nonzero for Desktop SQL failures (#13427) * fix(python-cli): return nonzero for Desktop SQL failures Map the exact execute_sql failure result from Desktop to CliError so both local SQL entry points exit 1 while successful empty results and SQL-like column headings remain data. Tests: 57 focused tests passed. The full Python CLI suite reports 348 passed, 1 skipped, and the same unrelated API-key login failure on pristine current main. Preflight: 12 selected local checks passed with the repository Python 3.11 toolchain. Failure-Class: none * docs(python-cli): narrow local SQL exit-code contract Document the exact execute_sql result that triggers exit code 1, matching the existing implementation and regression coverage. Verification after rebasing: 59 focused tests passed; full CLI suite 380 passed, 1 skipped. PR preflight and draft-body validation passed. * docs(python-cli): align exit-code table with SQL contract Include the specific Desktop SQL failure in the exit-code 1 row so the table agrees with the exact-message explanation below it. Production code and regression tests are unchanged. Verification: 59 focused local CLI tests passed. | 1 个月前 | |
fix(cli): apply --timeout to local Desktop API calls too (#22735) make_local_client never forwarded the global --timeout, so every `omi local` command silently ran on the client default while the flag's help and the README promised a per-operation bound. Build the httpx timeout once in AppContext and pass it to both clients. Amp-Thread-ID: https://ampcode.com/threads/T-01a154a6-835d-760f-b1e8-7c1f11b08015 Co-authored-by: Amp <amp@ampcode.com> | 1 小时前 | |
fix(python-cli): escape local task IDs and screenshot paths in success messages (#18629) Co-authored-by: joelwoolley2025-prog <joelwoolley2025-prog@users.noreply.github.com> | 25 天前 | |
feat(python-cli): memories batch pipeline for JSONL and CSV (#19349) * feat(python-cli): memories batch pipeline for JSONL and CSV * docs(python-cli): align memories_pipeline comments to English and link bounty #18526 --------- Co-authored-by: shuoYun114 <38515713+shuoYun114@users.noreply.github.com> | 17 小时前 | |
fix(cli): strip lone surrogates from rendered memory notes (#20677) memories_to_markdown renders each memory and the whole document as strings, then writes them with write_text(..., encoding="utf-8"). json.loads accepts an escaped lone surrogate such as "\ud800" from a malformed export, so the code point reached the rendered note verbatim and the write raised UnicodeEncodeError, losing the whole export. conversations_to_sqlite and conversations_to_markdown already drop these code points at their render boundary; this brings the memories recipe in line. All three render returns now go through one helper, so the grouped-directory writer and the single-file writer are both covered. | 14 天前 | |
fix(cli): don't treat a short non-final memory page as end-of-data (#13677) omi memory get pages through /v1/dev/user/memories in chunks of 100 and stopped as soon as a page came back with fewer than 100 items, assuming that meant end-of-data. The dev API's uncategorized-memories branch (backend/routers/developer.py) applies limit/offset on the raw store read and only afterwards drops malformed records that fail CleanerMemory validation, so a non-final page can legitimately come back short. The CLI's short-page heuristic then reported a real, later-page memory as not found. Fix: keep paging at the next offset regardless of page length; only an actually empty page means end-of-data. Matches the existing paging test for full pages (test_memory_get_found_in_later_page). Failure-Class: FC-raw-page-limit-before-visibility-filter Tested: sdks/python-cli full suite (`pytest -q`), 71 passed / 1 skipped, including new test_memory_get_continues_after_short_filtered_page which asserts the CLI makes a second request at offset=100 and still finds the target memory. Reported in #13676 by @kaanarici with a ready patch + regression test; verified the root cause against current backend/routers/developer.py and applied the same fix. | 1 个月前 | |
fix(cli): rebase list-ID unshorten onto current main (#13530) Closes #13039 Failure-Class: none Co-authored-by: Nukey <Nukeys@users.noreply.github.com> | 1 个月前 | |
fix(cli): restore Click and Windows locale compatibility (#9767) * fix(cli): pin Typer before vendored Click * test(cli): read OpenAPI contract as UTF-8 --------- Co-authored-by: 491034170 <142008960+491034170@users.noreply.github.com> | 3 个月前 | |
fix(cli): render scalar and mixed JSON arrays in pretty mode (#13566) * fix(cli): render scalar and mixed JSON arrays in pretty mode Pretty emit sent every list to _emit_table, which requires mapping rows, so valid string or number arrays crashed. Coerce list items through the existing coalesce_rows helper first. JSON mode is unchanged. Co-authored-by: Cursor <cursoragent@cursor.com> * test(cli): assert mixed-array pretty output includes mapping cells Tighten scalar-array checks to preserve token order, and require the mixed list to render both the value column and the nested mapping key. Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: Da7em-T <328307673+Da7em-T@users.noreply.github.com> Co-authored-by: Cursor <cursoragent@cursor.com> | 1 个月前 | |
fix(cli): strip whitespace and reject padded dot segments in path_segment (#22245) Co-authored-by: raz <rmalka05@gmail.com> | 18 小时前 | |
fix(cli): escape resource IDs in Rich markup success messages (#17338) * fix(cli): escape resource IDs in Rich markup success messages Failure-Class: none * fix(cli): escape resource IDs in all create success messages * chore: restore LF line endings * fix(cli): resolve Python 3.10 syntax error by removing nested double quotes in f-strings * fix(cli): escape status output in conversation queue message | 20 天前 | |
fix: escape Rich fragments in CLI status messages (#13088) * fix(cli): escape config status values * fix(cli): escape auth status fragments * test(cli): cover markup-like status fragments * fix(cli): escape pretty error message fragments * test(cli): cover markup in pretty error output * fix(cli): keep auth error payloads raw in json mode * test(cli): preserve raw json auth error details * chore: restore trailing newline in config command * chore: restore trailing newline in auth command * test(cli): align auth escaping regressions with current main | 1 个月前 | |
fix(python-cli): apply the requested time window to exact screen search (#13109) Verification: 132 tests passed; repository preflight and synthetic CLI smoke passed. Failure-Class: none | 30 天前 | |
fix(python-cli): preserve SQL rows with status-like column names (#15962) * fix(python-cli): preserve SQL rows with status-like column names Validate complete SQL tables before interpreting status prefixes. Refs BasedHardware/omi#15961 Failure-Class: none * chore: preserve LF line endings * test(python-cli): cover SQL status-like headings | 26 天前 | |
Supersedes #13107: fix(python-cli): preserve ambiguous SQL table output (#14608) * fix(python-cli): preserve ambiguous SQL table output Verification: 134 tests passed; repository preflight and synthetic CLI smoke passed. Failure-Class: none * fix(python-cli): rebase ambiguous-table guards onto current main Carry-forward fixes from the cherry-pick rebase: keep main's blank-line-aware data-line extraction (the picked guard block re-derived data_lines from non_empty and clobbered it) and drop the duplicated row-count check. The duplicate-column and truncation-notice fallbacks now sit on top of main's width guard unchanged. Co-authored-by: Maximus657 <xar.maks@gmail.com> Failure-Class: none --------- Co-authored-by: Maximus657 <xar.maks@gmail.com> Co-authored-by: omiagent[bot] <4625930+omiagent[bot]@users.noreply.github.com> Co-authored-by: David Zhang <david@scalingforever.com> | 25 天前 | |
fix(cli): avoid replaying writes after ambiguous failures (#12972) * fix(cli): avoid replaying writes after ambiguous failures Validated 138 CLI tests on Windows with Python 3.13, including 9 new retry-safety cases. Offline reproduction and policy discussion: BasedHardware/omi#12962. Local manifest checks passed; historical ratchet skipped in shallow clone. Backend bootstrap is unavailable because webrtcvad requires Microsoft C++ Build Tools; no backend paths changed. * fix(cli): preserve diagnostics for failed writes Failure-Class: none --------- Co-authored-by: Jarvis <jarvis@clawd.bot> | 1 个月前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 5 个月前 | ||
| 4 个月前 | ||
| 17 小时前 | ||
| 14 天前 | ||
| 14 天前 | ||
| 14 天前 | ||
| 14 天前 | ||
| 14 天前 | ||
| 18 小时前 | ||
| 25 天前 | ||
| 16 天前 | ||
| 4 天前 | ||
| 14 天前 | ||
| 30 天前 | ||
| 17 小时前 | ||
| 17 小时前 | ||
| 1 个月前 | ||
| 10 天前 | ||
| 17 天前 | ||
| 5 天前 | ||
| 14 天前 | ||
| 9 天前 | ||
| 17 天前 | ||
| 17 小时前 | ||
| 1 个月前 | ||
| 18 小时前 | ||
| 21 天前 | ||
| 25 天前 | ||
| 1 个月前 | ||
| 17 小时前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 17 天前 | ||
| 18 小时前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 小时前 | ||
| 25 天前 | ||
| 17 小时前 | ||
| 14 天前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 3 个月前 | ||
| 1 个月前 | ||
| 18 小时前 | ||
| 20 天前 | ||
| 1 个月前 | ||
| 30 天前 | ||
| 26 天前 | ||
| 25 天前 | ||
| 1 个月前 |