mirror of
https://github.com/stablyai/orca.git
synced 2026-09-21 08:02:32 +00:00
* feat(github): bind projects to a specific gh account Adds per-project `Repo.ghAccount` so repo-scoped gh calls (create-worktree issue/PR search, work items, hosted-review reads and mutations) run as the bound account via ephemeral child-env token injection instead of the globally active gh login. Multi-account resolution is capability-gated (gh >= 2.40) and fails closed when the bound account or host is unavailable; Project View stays ambient by design. Repository settings gains a section for selecting or clearing a keyring-backed account (shadcn `Select`), with mixed-version "not enforced" handling for older remote runtimes. Attached `-Rhost/owner/repo` forms are covered by the host-drift guard and its tests; es/ja/ko/zh catalogs carry the section's strings. `getLocalProjectGhExecOptions` centralizes the binding lookup so every gh execution path picks it up, including the Electron `hostedReview:*` handlers that previously stayed on the ambient login. `gh auth token` (a keyring read) is exempt from the rate-limit breaker gate so a tripped bucket cannot turn a bound-token resolve into a false "unavailable". The `ghAccount` update field and the two binding RPC methods live in the shared RPC params contract; the generated catalog is regenerated. Fixes #13612 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012B3QEP5iP4WGGEpPLtkHqA * fix(settings): make GitHub account refresh secondary * fix(github): satisfy strict casting quality checks * test(rpc): use runtime fixture for repo binding * fix(github): preserve project account for PR worktree lookups * test(rpc): avoid incomplete runtime settings fixture * fix(i18n): add GitHub account refresh label * fix(i18n): refresh runtime required catalog * fix(windows): preserve mobile patch bytes --------- Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com> Co-authored-by: Neil <neil@stably.ai>
94 lines
4.9 KiB
Plaintext
94 lines
4.9 KiB
Plaintext
# A shebang plus CRLF makes vite's SSR transform emit a literal `#!` mid-module,
|
|
# so any suite importing the script dies at load with a SyntaxError. Pin the whole
|
|
# directory rather than the scripts that happen to have a test today.
|
|
/config/scripts/**/*.mjs text eol=lf
|
|
/skill-guides/*.md text eol=lf
|
|
/skill-stubs/*.md text eol=lf
|
|
/skill-stubs/_shared/*.md text eol=lf
|
|
/skills/*/SKILL.md text eol=lf
|
|
/src/cli/bundled-skill-guides.ts text eol=lf
|
|
# Bundled plugin trees are byte-hashed; CRLF checkout would break the pinned hash.
|
|
/resources/plugins/** text eol=lf
|
|
# Relay assets are copied verbatim into the bundle and hashed byte-for-byte into
|
|
# .version, which names the immutable remote install dir. A CRLF checkout makes a
|
|
# Windows-built client disagree with a mac/Linux-built one on the same release,
|
|
# so one host ends up with two relay trees (#17886 review).
|
|
/config/relay-assets/** text eol=lf
|
|
# Pin the bytes so a patch reads and diffs identically on every host. It is NOT
|
|
# what makes the hash right: pnpm hashes a patch LF-normalized, so a CRLF checkout
|
|
# cannot change it. Believing otherwise put a hand-computed raw digest in the
|
|
# lockfile twice and broke every install (#17886).
|
|
# These files are stored LF, which is not always the encoding they were written
|
|
# against -- @vscode/windows-process-tree ships CRLF sources -- so any code that
|
|
# runs `git apply` on one must force `-c core.autocrlf=input` rather than trust
|
|
# the host's setting. See config/scripts/windows-process-tree-gyp-rebuild.mjs.
|
|
/config/patches/*.patch -text
|
|
# Same reason, and pnpm parses these too: a CRLF checkout makes the mobile
|
|
# patches unparseable, so Windows packaging dies on ERR_PNPM_INVALID_PATCH.
|
|
/mobile/patches/*.patch -text
|
|
# The xterm bundle hunks also make a diff nobody can read; review the hand-written
|
|
# source patch under xterm-src/ instead. The sibling patches stay diffable.
|
|
/config/patches/@xterm__xterm@*.patch -diff
|
|
/config/patches/xterm-src/*.patch text eol=lf
|
|
# pnpm parses these unified diffs during Windows installs; keep checkout bytes stable.
|
|
/mobile/patches/*.patch -text
|
|
# Generated wrapper fixtures: collapse them in the PR diff so they stop drowning
|
|
# the reviewable change, and pin LF because they are compared byte-for-byte.
|
|
# Not -diff: the shell diff is the review surface when a wrapper does change.
|
|
/src/main/__fixtures__/shell-wrapper-snapshots/*.txt linguist-generated=true text eol=lf
|
|
# Captured agent PTY transcripts. -text, not `text eol=lf` like the wrapper snapshots above:
|
|
# these carry real CR and CRLF bytes as the terminal emitted them, and line-ending
|
|
# normalisation on a Windows checkout would rewrite the evidence the fixture exists to be.
|
|
/src/main/runtime/__fixtures__/*.txt -text
|
|
# Generated runtime English subset: compared byte-for-byte by
|
|
# verify:localization-runtime-catalog, so a CRLF checkout would fail the gate.
|
|
/src/renderer/src/i18n/en-runtime-required.json linguist-generated=true text eol=lf
|
|
# Generated method->params catalog: compared byte-for-byte by
|
|
# verify:rpc-params-catalog, so a CRLF checkout would fail the gate.
|
|
/src/shared/rpc-contract/rpc-params-catalog.generated.ts linguist-generated=true text eol=lf
|
|
# Mobile web bundle source. Every text byte here is hashed into an asset digest and
|
|
# from there into buildId, so a CRLF checkout produces a different bundle id for the
|
|
# same commit (91af2897 vs 9d78435e). The PNG is -text because it must not be touched.
|
|
/src/mobile-web/index.html text eol=lf
|
|
/src/mobile-web/src/*.ts text eol=lf
|
|
/src/mobile-web/src/*.css text eol=lf
|
|
/src/mobile-web/src/*.png -text
|
|
# Mobile web page source. Same buildId hazard as src/mobile-web above: these bytes are
|
|
# hashed into the Phase C bundle, so a CRLF Windows checkout would ship a different
|
|
# buildId for identical source. web-entry/ does not exist yet; the pin lands ahead of it.
|
|
/mobile/src/** text eol=lf
|
|
/mobile/app/** text eol=lf
|
|
/mobile/web-entry/** text eol=lf
|
|
# The blanket pin above would mark a future binary as text; exempt the asset types an
|
|
# RN page actually carries, the same way src/mobile-web exempts its PNG.
|
|
/mobile/src/**/*.png -text
|
|
/mobile/src/**/*.jpg -text
|
|
/mobile/src/**/*.jpeg -text
|
|
/mobile/src/**/*.gif -text
|
|
/mobile/src/**/*.ico -text
|
|
/mobile/src/**/*.webp -text
|
|
/mobile/src/**/*.ttf -text
|
|
/mobile/src/**/*.otf -text
|
|
/mobile/src/**/*.woff -text
|
|
/mobile/src/**/*.woff2 -text
|
|
/mobile/app/**/*.png -text
|
|
/mobile/app/**/*.jpg -text
|
|
/mobile/app/**/*.jpeg -text
|
|
/mobile/app/**/*.gif -text
|
|
/mobile/app/**/*.ico -text
|
|
/mobile/app/**/*.webp -text
|
|
/mobile/app/**/*.ttf -text
|
|
/mobile/app/**/*.otf -text
|
|
/mobile/app/**/*.woff -text
|
|
/mobile/app/**/*.woff2 -text
|
|
/mobile/web-entry/**/*.png -text
|
|
/mobile/web-entry/**/*.jpg -text
|
|
/mobile/web-entry/**/*.jpeg -text
|
|
/mobile/web-entry/**/*.gif -text
|
|
/mobile/web-entry/**/*.ico -text
|
|
/mobile/web-entry/**/*.webp -text
|
|
/mobile/web-entry/**/*.ttf -text
|
|
/mobile/web-entry/**/*.otf -text
|
|
/mobile/web-entry/**/*.woff -text
|
|
/mobile/web-entry/**/*.woff2 -text
|