forked from NousResearch/hermes-agent
-
Notifications
You must be signed in to change notification settings - Fork 0
r34.0: merge upstream v2026.9.24 (Hermes 0.21.5) — fork semantics re-expressed, ledger #362
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
7877 commits
Select commit
Hold shift + click to select a range
ae80cb7
fix: import hermes_bootstrap first in the compute-host and hermes-too…
teknium1 1808488
fix: bootstrap the hermes-tools MCP server only when it runs as pytho…
teknium1 db0fe41
fix: bootstrap the compute host only as python -m; pin library import…
teknium1 d4212f7
fix: a nested os.environ write from an audit hook no longer drops out…
teknium1 37aad38
fix: an audit hook that writes os.environ on every event can no longe…
teknium1 a25cf4d
fix(providers): a provider registered after hermes_cli.models imports…
teknium1 1b7e8c4
fix(desktop): every settings row renders through one ListRow/ToggleRo…
OutThisLife 7d63f57
feat(sdk): export ListRow/ToggleRow so plugin panes lay out like core…
OutThisLife 0fb230b
fix(desktop): every Appearance row is a command-palette hit
OutThisLife 686c34d
feat(bot_desktop): ship Bot Screen on hosted images (-desktop tags)
IAvecilla 65d01a7
test: allowlist installable()'s sudo probe for the command-resolution…
teknium1 35b14ad
Merge pull request #120928 from NousResearch/bb/desktop-function-shor…
OutThisLife 771eb80
fix(tests): stop tui_gateway subagent snapshot fixture forking the li…
teknium1 fcd6e78
Merge pull request #120925 from NousResearch/bb/session-search-titles
OutThisLife c22b0a2
Merge pull request #120950 from NousResearch/bb/settings-row-consistency
OutThisLife e7cc383
fix: TUI auth fallback no longer crashes on `model: <id>` config shor…
teknium1 8ae1dc1
test: tui_gateway/test_protocol stops leaking _hermes_home and a fres…
teknium1 5dbbc9a
fix(cli): make plugin clone timeout configurable
helix4u 72d18ce
fix(plugins): subdirectory installs download only that folder
teknium1 d188a47
fix(desktop): plugin probe/install from a repo subfolder downloads on…
teknium1 11b0bcc
feat(desktop): index every hand-built settings row in the command pal…
OutThisLife 7135182
Merge pull request #121039 from NousResearch/bb/settings-search-manifest
OutThisLife 7de8728
Merge pull request #108345 from afourniernv/fix/relay-atof-cwd
jquesnelle 9835323
fix(agent/gemini): count thinking tokens in usage and cost
Maero47 a980c35
test(gemini): trim salvaged thinking-token tests to the two invariants
teknium1 2364cde
chore(contributors): map Maero47's commit email
teknium1 994074c
fix(desktop): retain provider setup connection and profile ownership
BearHuddleston 7213ebb
test(desktop): cover provider setup route lookup failures
BearHuddleston 690813b
fix(desktop): keep the Desktop route alias when the picker opens prov…
BearHuddleston 4340fa4
fix(desktop): pin provider setup readiness to an explicit connection
BearHuddleston db20d39
fix(desktop): keep provider readiness on the profile REST setup writes
teknium1 6fa17e8
test: trim salvage tests to invariants
teknium1 fec4920
test: restore picker alias handoff coverage
teknium1 03a7bf3
fix(gemini): wire response_format into native Gemini generationConfig
gabbyong b6d38fd
fix(gemini): drop JSON response_format alongside tools on pre-Gemini-…
teknium1 236aab3
fix(auxiliary): recognise Gemini's structured-output 400 wording
teknium1 04fa849
chore(contributors): map gabbyong's commit email
teknium1 a69f860
fix(desktop): keep image frames stable through delayed loads
BearHuddleston 39cca5f
fix(desktop): keep the pending generated-image frame when its result …
BearHuddleston 77bb695
fix(desktop): read explicitly local-owned media through the native br…
BearHuddleston 99d9b62
fix(desktop): drop stale tool-output image size overrides
BearHuddleston 81235c9
test: trim salvage tests to invariants
teknium1 4c6137f
fix(desktop): never upscale a cold chat image or shrink its portrait
teknium1 d113cfc
fix(desktop): remember the size of inline data-URL chat images
teknium1 06616b4
fix(desktop): collapse a broken chat image to one line
teknium1 51f8b7c
chore(desktop): neutral wording in the pixel_size comment
teknium1 ee8ffff
fix(desktop): keep a generated image visible after a remembered failure
teknium1 f6d0e0c
fix(desktop): restore the remote-owner image routing test
teknium1 6828ffa
fix(desktop): persist edit previews before tool-result flush
BearHuddleston caf1c38
fix(desktop): only an unresolved tool part claims a stored result
BearHuddleston 9579930
fix: consume prepared edit previews on every completion path
teknium1 f27a0a9
test: trim salvage tests to invariants
teknium1 444066b
fix: exclude display-only message fields from token estimates
teknium1 37e0ac0
fix(desktop): hold history reads behind reconnect replay
BearHuddleston 9e66418
test: trim salvage tests to invariants
teknium1 bb7788c
fix(desktop): let history reads proceed when the replay epoch changes
teknium1 32cf269
fix(desktop): settle a warm resume through activate when replay is lost
teknium1 1a0b6ff
fix(desktop): hold a reconnect re-resume behind its runtime's replay
teknium1 04b61d1
fix(desktop): ignore retired secondaries in the replay barrier
teknium1 4d58c3a
fix(desktop): re-check the replay barrier after a cold re-resume REST…
teknium1 716db85
test: restore replay-barrier fallback and background-sync coverage
teknium1 defb703
fix(desktop): don't let a closed secondary veto a runtime an open soc…
teknium1 58c896e
fmt(js): `npm run fix` on merge (#121111)
hermes-seaeye[bot] 074349f
Merge pull request #120790 from benbarclay/feat/desktop-external-brow…
OutThisLife a874cee
feat(desktop): expose composer draft API to plugins (host.composer)
Heybinshao 6b3c0de
fix(composer): gate active draft requests on isActive and acknowledge…
Heybinshao dcea97b
feat(desktop): add host.composer.focus(sessionId) to the plugin compo…
teknium1 9316197
docs(desktop-sdk): host.composer signatures, arbitration, consumer mi…
teknium1 ef70b36
fix(desktop): host.composer 'new' fails closed, single-owner draft re…
teknium1 78b1331
fix(desktop): collapse stale compression tips before nesting sidebar …
OutThisLife d78355c
fix(desktop): tag and preview Windows absolute paths (C:\, UNC)
OutThisLife 2a38b29
refactor(desktop): share isWindowsAbsolutePath with the attachment up…
OutThisLife 1bdc455
fix(desktop): keep the selected chat's workspace when entering a project
OutThisLife e7bcdcc
fix(cli): bound persistent_output replay to visible terminal height
f748481
fix(cli): refill only the viewport on redraw and erase it without CSI 2J
teknium1 d486536
fix(cli): a resize mid-stream repaints each transcript line once
teknium1 38f9764
fix(cli): size the resize replay for how the terminal re-wraps
teknium1 29b9d7a
fix(cli): measure the re-wrapped chrome as prompt_toolkit wrote it
teknium1 68b0f85
fix(cli): resize keeps each transcript row once on tmux and never los…
teknium1 0b8278d
fix(cli): a shrink refills the viewport on terminals that don't reflow
teknium1 9f288ba
fix(cli): treat GNU screen as a reflowing terminal
teknium1 1a36408
test: drop the _cprint hold test added for #95375
teknium1 6055214
test(e2e): (cli, resize_scrollback) passes plainly now that #95375 is…
teknium1 e389aa4
fix(cli): close resize-drag row loss and modal refill dups (#95375)
teknium1 9d1390f
fix(cli): settle before a mid-drag resize recovery; keep-above erase …
teknium1 764d5bf
fix(cli): hold resize-drag output 0.7 s before a recovery (#95375)
teknium1 a95242c
fix(cli): tmux with a generic TERM still counts as reflowing (#95375)
teknium1 0004e3a
refactor(cli): move the output-history row helpers out of the cli fac…
teknium1 6d57e9e
fix(cli): never aim the resize erase past chrome tmux clipped (#95375)
teknium1 71cca15
fix(compression): a compressor no attempt claimed is never judged stale
100yenadmin 9ec5640
test(compression): trim unclaimed-compressor coverage to two invariants
teknium1 748f039
feat(desktop): expose typed plugin settings gateway
zyz619963502zyz 21f6e35
docs(desktop): host.settings — teardown rule, declined keys, consumer…
teknium1 ab2c1cb
fix(desktop): host.settings refuses inherited keys instead of TypeErr…
teknium1 540442a
fix(desktop): label the settings sessions group 'Sessions', not 'Arch…
OutThisLife 0e69909
fix(desktop): don't warn about lost work when quitting a remote backend
OutThisLife 771b42e
fix(desktop): let the project folder picker create a new folder
OutThisLife b9b9476
fix(desktop): scroll the composer caret into view after paste and voi…
OutThisLife c0c7e95
fix(desktop): keep menu search focus while hovering rows
OutThisLife 0048071
fix(desktop): don't flash the profile-default effort before a resumed…
OutThisLife 174ea05
fix(desktop): keep popped-out pet on-screen after a monitor unplug
scottaki 32fbb5a
fix(desktop): never let a blank pet-overlay window capture clicks
scottaki 412d0b7
fix(desktop): keep the popped-out pet wholly inside a display work area
OutThisLife 75fef37
fix(desktop): clamp pet overlay drags and persist the clamped spot
OutThisLife 585e296
feat(desktop): session-list API and row-decoration slots for plugins
tobenwarrior 9d8ae38
feat(desktop): host.sessions.pin takes a drop index; reorder([]) rese…
teknium1 4f3426e
fix(desktop): host.sessions.reorder writes live ids; add reorderPinne…
teknium1 1ad2e8b
fix(desktop): avoid deprecated ASAR stat when resolving renderer
daresan ee6852c
fix(desktop): resolve the app icon from the unpacked dist before any …
jonpol01 dcf5728
test(desktop): pin that renderer and icon probes never stat inside ap…
OutThisLife 387298a
fix(desktop): drop the remaining stat probes on app.asar paths
OutThisLife d5c446e
fix(desktop): keep the bundle Dock icon in packaged macOS builds
OutThisLife 02b07ac
fix(desktop): re-read the sidebar when a same-route activation voids …
OutThisLife 2054ab9
fix(desktop): report failed primary session reads instead of empty sl…
OutThisLife 14a8a77
fix(desktop-update): stop launching a Chrome instance for the macOS u…
OutThisLife 9a2507e
fix(desktop): save hand-registered Cloud connections as oauth with a …
OutThisLife 0f9feda
fix(web): re-measure xterm once the bundled terminal font loads
OutThisLife 80e3063
fix(tts): keep local voices warm for tts.keep_warm_seconds after the …
OutThisLife 0641ee1
fix(tui-gateway): never park an idle /steer on the agent
OutThisLife 21cc8bf
fix(update): anchor discarded local commits before the diverged reset
Moep90 c7d2985
fix(install): keep dropped commits behind a rescue ref on the install…
OutThisLife db1ff59
fix(update): say how many commits the diverged reset drops and where …
OutThisLife 511b879
docs(update): document rescue refs for local commits on the target br…
OutThisLife 021530a
fix(delegation): re-offer completions orphaned by a dead owner while …
OutThisLife 02ed55e
fix(delegation): hand a dropped orphan offer back to the sweep
OutThisLife 3fa2123
fix(desktop): group messaging sidebar sections by profile when showin…
webtecnica bbba4d4
fix(desktop): group messaging platforms by gateway/profile owner in a…
OutThisLife 72b8502
fix(desktop): open the Nous sign-in dialog from Billing's logged-out …
OutThisLife 632a5cd
feat(desktop): sidebar nav visibility and order for plugins
tobenwarrior 7fba0e6
feat(desktop): sidebar nav prefs become a `sidebarNav.prefs` contribu…
teknium1 2553b86
fix(desktop): sidebarNav.prefs cannot hide the Plugins row; document …
teknium1 826e40c
fix(desktop): trim wrapper parens from raw URL autolinks
harjothkhara d51727f
refactor(desktop): single-pass unbalanced-paren trim in raw-URL autol…
harjothkhara ef9a5f9
fix(desktop): preserve matched URL parentheses
harjothkhara c882636
fix(desktop): raw-URL autolinker steps over markdown links (#49822)
OutThisLife 0c7c8b6
fix(project): keep task-scoped create/switch off the profile-global p…
a932f22
fix(project): report the calling session's project from desktop_proje…
OutThisLife 2b4a5a0
feat(desktop): model-pill label providers for plugins
tobenwarrior eecabbe
feat(desktop): memoise model-pill providers on primitives; cover comp…
teknium1 1b77007
docs(desktop-sdk): model-pill label providers — signatures, arbitrati…
teknium1 6b2c23a
fix(desktop): model-pill provider must return a string; non-strings f…
teknium1 3b8c77c
fmt(js): `npm run fix` on merge (#121210)
hermes-seaeye[bot] bd55633
feat(desktop): typed skills/toolsets/profiles bridge for plugins
tobenwarrior 488cd56
feat(desktop): move the capabilities bridge to sdk/bridge.ts; pluginD…
teknium1 7daf818
docs(desktop): capabilities bridge section; pluginDecisions documente…
teknium1 4cec3f8
fix(desktop): host.pluginDecisions hands out frozen copies, not the l…
teknium1 0717586
docs(gateway): drop the remaining whichever-home --replace claims
kshitijk4poor 9a27bcc
docs(gateway): --replace crosses homes only for an owner serving this…
kshitijk4poor 78fbbb0
fix(gateway): log the foreign-standalone-owner warning once per start
kshitijk4poor c564a85
test(gateway): make the lock-refusal tests' standalone checks real
kshitijk4poor fa4714c
refactor(gateway): trim the --replace ownership prose and reuse _migr…
kshitijk4poor 8d71403
feat(desktop): appearance-settings slot and the app's swatch grid for…
tobenwarrior 84ac69e
feat(desktop): keep ColorSwatches export as on main; document APPEARA…
teknium1 55c52f2
fix(desktop): appearance extras use the pane boundary and render on t…
teknium1 ff8c8f0
fix(desktop): rebuild a packaged app whose node-pty has no native binary
OutThisLife d9a44a0
fix(desktop): download Kanban attachments through authenticated gateway
jroest efafed5
fix(desktop): Kanban attachment download through the one gated resolver
OutThisLife 72bc2f6
fix(desktop): flag a failed cold-start sidebar read instead of report…
OutThisLife 620d388
fix(desktop): show retry in place of "No sessions yet" when the first…
OutThisLife db114c2
fix(update): diagnose SSH publickey / host-key fetch failures
OutThisLife edecebf
fix(bootstrap): show the update child's exit-2 refusal instead of "st…
OutThisLife f928860
fix(projects): CLI and pathless switches move the active project again
OutThisLife 3804baa
fix(tts): lease release reads the requesting profile's keep-warm window
OutThisLife 83ee4bc
fix(desktop): branches of a collapsed stale tip nest under the live tip
OutThisLife f003387
fix(desktop): pet overlay stays clickable on Linux and survives a rep…
OutThisLife d81db86
feat(desktop): sandboxed embed primitive for plugins
tobenwarrior a48557b
feat(desktop): trim SandboxedFrame tests to invariants; document the …
teknium1 8636d6a
style(desktop): blank lines before statements in sandboxed-frame test
teknium1 c2645ef
fix(desktop): SandboxedFrame takes an explicit prop allowlist, not if…
teknium1 d8814dc
fix(desktop): serve uvicorn on SelectorEventLoop on Windows despite u…
Finn763 355f5cb
test(desktop): run the serve loop-factory regression on the Windows lane
OutThisLife 44812b5
fix(desktop): branch long sessions without renderer transcript load
benjaminbrumbaugh 1c7ec93
fix(desktop): preserve branch compatibility with older gateways
benjaminbrumbaugh d95a6bc
fix(desktop): preserve message-level branch responses
benjaminbrumbaugh ecacf3d
fix(desktop): declare the branch methods in the typed gateway contract
OutThisLife 8034d49
feat(plugins): public event bridge for plugin backends
tobenwarrior 5fa1402
feat(plugins): plugin event names take a dotted hierarchy; ids are ca…
teknium1 00c9f3e
fix(plugins): desktop lint reads a new RegExp("<script…") pattern as …
teknium1 3593b63
docs(plugins): broadcast_plugin_event contract, delivery scope and rs…
teknium1 5765f8d
fix(plugins): desktop lint masks a new RegExp("<script…") only where …
teknium1 be59f04
fix(plugins): broadcast_plugin_event from the turn-isolation child re…
teknium1 d892451
fix(update): cap boot recovery retries and derive self-lock native mo…
OutThisLife 7ba3a71
fix(desktop): closing a tool tab in the chat's zone fronts the chat
OutThisLife d17f519
fix(desktop): profile backend env drops the launch profile's dotenv n…
OutThisLife 94dcb17
fix(desktop): isolate primary and pooled backend spawns from launch-p…
OutThisLife 03add1f
fix(desktop): keep root-only project chats out of Home
OutThisLife 0397efe
fix(desktop): every project session is reachable from the sidebar
OutThisLife 76c5bdc
fmt(js): `npm run fix` on merge (#121304)
hermes-seaeye[bot] eb4f92b
fix(dashboard): reject credential preview writeback
JoaoMarcos44 e3ef141
test(dashboard): cover secret preview boundaries
JoaoMarcos44 f8b66c7
fix(dashboard): make credential previews non-reusable
JoaoMarcos44 af4c928
fix(dashboard): reject legacy credential masks by shape, not equality
kshitijk4poor a7c6803
test(dashboard): fold preview-writeback coverage into two invariant t…
kshitijk4poor ea478da
fix(dashboard): treat any «redacted… value as a credential preview
kshitijk4poor b9a50dd
refactor(dashboard): hoist /api/env preview check out of the write th…
kshitijk4poor a7279d6
chore: map MarkTro1969 for salvage of #120557
kshitijk4poor aabb7a6
fix(agent): make compression stall fallback deterministic
MarkTro1969 f0672a0
refactor(compression): single stall-fallback ladder for every stall exit
kshitijk4poor 3bd93da
refactor(compression): sample the stall wait once, before the retry c…
kshitijk4poor 3028995
fix(compression): an in-place compaction never archives turns the com…
jonpol01 f53c0f6
fix(compression): a trailing held row without any stamp keeps the lea…
teknium1 1a632c3
fix(compression): a held row a merge rewrote does not bound the archive
jonpol01 4d58998
fix(compression): a here-N tail copy vouches for its row id only when…
kshitijk4poor a702791
test(cli): stop leaking a real MCP discovery thread from the TUI laun…
teknium1 43d3d4e
fix(journey): route memory edit/delete through MemoryStore._mutate
OutThisLife a88bef9
fix(config): stop the migration ladder rewriting unversioned configs
jonpol01 49aaa52
fix(config): keep v41 off the unversioned ladder and drop the stamp r…
kshitijk4poor 9232479
refactor(config): read the version stamp once and drop has_version_stamp
kshitijk4poor 19bd20f
test(config): tie LEGACY_KEY_STEPS to the migration ladder
kshitijk4poor 03584e4
test(docker): pin the non-mapping config.yaml boot path
kshitijk4poor 39682e3
fix(profiles): merge distributed cron jobs safely
JoaoMarcos44 439e3a3
test(profiles): cover cron distribution ownership
JoaoMarcos44 c2063cf
refactor(cron): move job-definition merge schema into cron/job_defini…
kshitijk4poor 0bf0e03
fix(profiles): narrow cron-merge error wrapper to the corrupt-store case
kshitijk4poor bb0650e
fix(profiles): reject an unschedulable shipped cron job before any fi…
kshitijk4poor ca1ef78
refactor(cron): own the store-import loop in cron/job_definition.py
kshitijk4poor b0aefcc
refactor(cron): gate imported schedule changes on is_job_runnable
kshitijk4poor b96e88b
fix(memory): pin a staged replace/remove to the entry the approver re…
jonpol01 3da1c59
fix(memory): refuse unpinned legacy replace/remove at approval
kshitijk4poor c013f1b
refactor(memory): dry-run the staged batch through apply_batch's own …
kshitijk4poor 5c3afee
refactor(memory): derive a payload's destructive ops in one place
kshitijk4poor 88dee3e
refactor(memory): derive batch receipts from the matched list
kshitijk4poor f97608f
chore: release v0.21.5 (2026.9.24)
teknium1 1320bfe
Merge upstream tag v2026.9.24 (f97608f178, Hermes 0.21.5) into main
100yenadmin 5aaac77
r34 merge: hermes_state lockguard + split — 4 files
100yenadmin 34c5e0a
r34 merge: profiles + config + managed scope + plugin selection — 12 …
100yenadmin 6c6e1b8
r34 merge: MCP runtime at the tag (checkpoint, no fork semantics) — 1…
100yenadmin 3503dba
r34 merge: MCP fleet unit (evaos_lease transport, lease config valida…
100yenadmin 7b37029
r34 merge: MCP desktop unit (native write approval, per-profile handl…
100yenadmin 8fdfaf1
r34 merge: tui_gateway (desktop_ui_protocol wire compat, session atta…
100yenadmin 96c3bfc
r34 merge: gateway run_* + platforms (clarify session key, voice capt…
100yenadmin a96714d
r34 merge: auth_codex + shared auth file — 6 files
100yenadmin 7073ba2
r34 merge: cron split + scheduler ownership + web_server — 5 files
100yenadmin 600bf6c
r34 merge: session search — 2 files
100yenadmin 0f4ecb4
r34 merge: apps/desktop (upstream desktop structure, evaOS managed-mo…
100yenadmin 1ef5753
r34 merge: the rest (fork docs restored to docs/, CI, tools, tests, R…
100yenadmin b61ee8c
Merge remote-tracking branch 'origin/main' into codex/r34.0-upstream-…
100yenadmin 0df2ea7
r34 merge: ledger (docs/r34-managed-delta.md) — 1 file
100yenadmin 7dd3d88
chore: map contributor emails
100yenadmin 77c71e1
r34 merge: PR CI fixes (managed boot overlay keeps support banners re…
100yenadmin bb3356a
ci: retrigger (GitHub internal startup error on run 36137803921, no j…
100yenadmin ac7cf78
r34 merge: CI load budgets for upstream's heavier agent suites (slice…
100yenadmin 19878db
r34 merge: upstream e2e jobs on standard runners (no larger runners i…
100yenadmin 23e1728
r34 merge: upstream e2e suites opt-in behind RUN_UPSTREAM_E2E until #…
100yenadmin b56c1a3
r34 merge: review round (RE-7 connection.request guard, plugin re-ent…
100yenadmin 2efd369
r34 merge: review round 2 (RE-7 connection.request to the requesting …
100yenadmin d00b0fe
r34 merge: review round 3 (RE-7 routing keyed on the requester's own …
100yenadmin 187948d
r34 merge: review round 4 (pure-TUI RE-7 test with a stale desktop se…
100yenadmin c348ccf
ci: retrigger (GitHub startup_failure on run 36163438185, no jobs cre…
100yenadmin 81659bb
ci: retrigger (run 36163707303: slice-4 and footguns timeouts, then a…
100yenadmin File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
The diff you're trying to view is too large. We only load the first 3000 changed files.
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.