forked from NousResearch/hermes-agent
-
Notifications
You must be signed in to change notification settings - Fork 0
fix: publish issue #401 Iteration 12 assured successor #11
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
Closed
Closed
Changes from all commits
Commits
Show all changes
5425 commits
Select commit
Hold shift + click to select a range
f07f47f
fix(lazy-deps): skip the install ladder on package-manager installs
liuhao1024 a3257cb
fix(anthropic): drop whitespace-only text blocks reaching the Message…
pooyan6 633bd35
refactor: dedup _convert_user_message to call _fix_blank_text_blocks_…
kshitijk4poor 5b5a29f
fix: exclude DeepSeek from OpenCode caching path to prevent HTTP 400
JonthanaHanh 815d2e2
chore: add contributor email mapping for baau
kshitijk4poor 636d4e6
Merge pull request #77515 from kshitijk4poor/chore-baau-email
kshitijk4poor ad49679
Merge commit 'f07f47fe7dfdc87c73dcbfdee24a35dae3f29c2f' into repair/4…
135a294
feat(mcp): add fingerprint-keyed on-disk MCP tool-schema cache
Vansh5632 1d5ecad
feat(mcp): lazy server startup from schema cache (design from #56832)
kshitijk4poor ebf967f
polish(mcp): simplify-pass folds on the lazy-startup salvage
kshitijk4poor fe6330d
fix(stt): thread confidence thresholds into faster-whisper's own gate…
PRATHAMESH75 32686bb
chore: add contributor email mapping for wangyunyou
kshitijk4poor c062fde
Merge pull request #77560 from kshitijk4poor/chore-wyy-email
kshitijk4poor 0a2a69d
fix(credential_pool): check copilot suppression before token exchange
77404ce
perf(credential_pool): skip gh subprocess when all copilot sources su…
536ed6a
fix(credential_pool): classify copilot sources by exact match
kshitijk4poor 9c20f7f
chore: add contributor email mapping for szzhoujiarui
kshitijk4poor 7997c9c
Merge pull request #77565 from kshitijk4poor/chore-szz-email
kshitijk4poor 5bbfe63
chore: map rodboev and MaartenDMT contributor emails
kshitijk4poor a1b3ce6
Merge pull request #77574 from kshitijk4poor/chore/attrib-rodboev-maa…
kshitijk4poor 16bd5d2
fix(tools): reuse subscription features for toolset listing
szzhoujiarui b45d886
fix(api-server): reuse toolset feature snapshot
szzhoujiarui 9aab062
chore: add EndeavorYen to AUTHOR_MAP
kshitijk4poor 4e698cd
Merge pull request #77586 from kshitijk4poor/chore/attrib-endeavoryen
kshitijk4poor 425c54b
fix(platforms/line): fix broken import of non-existent config functions
ErnestHysa abe7f78
chore(contributors): map tbsonline@protonmail.com -> jasoisjaso (#77600)
kshitijk4poor ec10cfd
chore: add light-merlin-dark to AUTHOR_MAP
kshitijk4poor 844411d
Merge pull request #77601 from kshitijk4poor/chore/attrib-light-merli…
kshitijk4poor a278db1
fix(agent): jittered, interrupt-aware backoff for empty-response retries
arimu1 b953a5a
test: fake clock for the backoff-status test (was busy-spinning 7.5s)
kshitijk4poor d0be609
perf(providers): cache provider list snapshots
yyzquwu 51743f4
test: pin the hit-path copy guard on the provider snapshot cache
kshitijk4poor ad345a9
feat(gateway): add opt-in 'latency' runtime footer field
Kyzcreig f4fb23f
perf(transport): gate prompt cache keys by provider capability
rungmc357 78e2987
feat(transport): imply prompt_cache_key capability for api.openai.com
kshitijk4poor c8df422
perf(gateway): reuse loaded turn config for timestamp check
MaartenDMT bdcdde9
perf(cli): add --prefer-offline to npm install during update (#39267)
rodboev 0422479
perf(cron): skip config load on idle scheduler ticks (idea from #33612)
kshitijk4poor b51c4e6
fix(feishu): defer the lark_oapi import off the startup path
baauzi f84e368
test: bind lark SDK globals session-wide, not per-file
kshitijk4poor e80b7ae
fix(feishu): test SDK globals by None-ness, not globals() membership
kshitijk4poor 6cedec1
chore: add contributor email mapping for WojtekMR3
kshitijk4poor 23021f4
Merge pull request #77632 from kshitijk4poor/chore-woj-email
kshitijk4poor be3be06
perf: replace COUNT(*) with LIMIT-based existence checks
Skywind5487 14b6e0d
fix(state): take the connection lock in session_count_ge + document a…
kshitijk4poor 034eadb
perf(state): index assistant tool-call rows for Insights queries
PRATHAMESH75 7f1d84f
perf(insights): pin partial index on assistant tool-call queries
PRATHAMESH75 401e054
fix(insights): fall back to unpinned queries when the partial index i…
kshitijk4poor 5017deb
refactor(insights): strip INDEXED BY pins via an attribute loop
kshitijk4poor adcdf9d
perf(state): batch compression-tip row fetch in list_sessions_rich
b2e1d57
test(state): guard compact_rows threading through batched tip-row fetch
kshitijk4poor 7db2827
refactor(state): chunk the batched tip-row IN clause at 900 ids
kshitijk4poor b651121
fix(yuanbao): clear _processing_msg_ids/_processing_msg_texts after e…
AhmetArif0 81c8645
fix(yuanbao): evict stale entries from _member_cache on TTL expiry
AhmetArif0 f3add02
fix(yuanbao): pop tracking entries only for truthy matching msg_id + …
kshitijk4poor 4cf2fb5
chore: add frizikk to AUTHOR_MAP
kshitijk4poor 2b0d58e
Merge pull request #77636 from kshitijk4poor/chore/attrib-frizikk
kshitijk4poor 9891f4b
perf(zai): parallelize endpoint detection probes
light-merlin-dark 9e99a33
test(zai): cover parallel-probe contracts + restore candidate-model loop
kshitijk4poor 0e4daad
perf(zai): early-exit when the highest-priority endpoint wins (simpli…
kshitijk4poor 94ef36a
Bound MiniMax OAuth error responses
ooiuuii 219bb35
fix(minimax-oauth): read streamed error bodies inside the client cont…
kshitijk4poor a762625
chore: map xaydinoktay@gmail.com to aydnOktay
kshitijk4poor ebda995
Merge pull request #77640 from kshitijk4poor/chore/attrib-aydnoktay
kshitijk4poor f327c89
chore(contributors): map four B2 salvage author emails (#77641)
kshitijk4poor ffb5430
perf(session-search): project fields before enrichment
frizikk f795d54
test(session-search): guard projected enrichment
frizikk 2f14c3e
fix: skip memory prefetch on trivial user prompts (greetings)
ayushere 46073d7
chore: add ayushere to AUTHOR_MAP
ayushere c093492
refactor(memory): single shared trivial-prompt classifier + gate tests
kshitijk4poor 34d6095
refactor(honcho): delegate _is_trivial_prompt wholly to the shared cl…
kshitijk4poor b9b0505
fix(desktop): measure adaptive stream flush through the deferred comm…
Adolanium 3060bee
fix(desktop): dedupe optimistic user turns for all wire references, n…
pnascimento9596 fed10fa
test(desktop): cover wire reference normalization edges
pnascimento9596 2ebe175
fix(desktop): sort reference-kinds import per lint gate
pnascimento9596 ed66ff1
fix(desktop): full-jitter backoff on gateway WS reconnect loops
5ffbea8
fix(desktop): escalate gateway reconnect on elapsed time, not attempt…
kshitijk4poor 94fac06
chore(contributors): map vittoria3103.123@gmail.com -> VittoriaLanzo …
kshitijk4poor 1306ac0
fix(desktop): un-break the .btn-arc rule — '*/' inside a CSS comment …
rerdi92 82fd574
perf(desktop): stop idle chat re-renders — memo ChatView, stable tile…
hdd69 bc3fa54
perf(curator): trim dead tool-schema from the LLM review fork
VittoriaLanzo b6f15f5
fix(desktop): keep a mid-turn reply on screen when its session is reo…
OutThisLife 34f0427
fix(desktop): stop a finished reply rendering twice after history cat…
OutThisLife cb11a7e
chore(contributors): map two B3 salvage author emails (#77685)
kshitijk4poor 1f692a8
refactor(desktop): hoist the reference-line matcher; drop dead textWi…
kshitijk4poor 53398ff
fix(desktop): do not sandwich structured mid-turn rows with inflight …
686f6c61 2ecc1db
fix(desktop): scope inflight dump suppression to the live turn tail
686f6c61 dbefd27
fix(desktop): require structure-bearing row for live-tail same-turn c…
686f6c61 7a4d047
refactor(desktop): one live-tail vocabulary for transcript reconcilia…
OutThisLife 0de8c32
fix(dashboard): cache plugins hub payload and avoid auth probes
ahmadashfq 9fa17c1
test(dashboard): cover install-hook invalidation of plugins hub cache
kshitijk4poor 1f1acc0
fix(dashboard): warm cold check_fn verdicts with a background probe
kshitijk4poor c4ac62a
fix(desktop): cancel the pending commit-cost measurement rAF
kshitijk4poor c163932
perf(dashboard): skip full InsightsEngine on /api/analytics/usage (#1…
rodboev e3ce092
perf(dashboard): keep tools in focused analytics usage (#18511)
rodboev 773d690
refactor(insights): drop consumer-less get_skill_breakdown alias (sim…
kshitijk4poor b536f06
Merge pull request #77644 from NousResearch/bb/review-75967
OutThisLife 105aba6
fix(web): clamp dashboard pagination and analytics-days params (#3920…
aydnOktay 2000278
fix(clamps): raise profile fan-out limit to le=500 (simplify-pass fin…
kshitijk4poor 9645ea8
fix(web): avoid blocking provider validation
youzi-1122 050b953
perf(plugins): seed plugin routes from sessionStorage cache for insta…
AllardQuek 057939c
fix(plugins): validate cached manifests are an array
AllardQuek 41bba3c
test(plugins): export cache helpers and add focused fallback/refresh …
AllardQuek c0c45ab
fix(plugins): keep loading gate when cached manifests include a /chat…
kshitijk4poor decf12e
perf(dashboard): serve hashed /assets bundles with immutable cache he…
kshitijk4poor 6611d87
feat: reset-aware primary restore — stay on fallback until the rate-l…
WojtekMR3 4c2d473
fix(credential_pool): run next_available_at under the pool lock
kshitijk4poor 9cd605f
fix(credential_pool): defer single-use-token refresh outside threadin…
necoweb3 687dd63
fix(credential_pool): serialize deferred-refresh pool mutations
kshitijk4poor 2f32092
`hermes sessions optimize-storage` aborts with
Kyzcreig c2c95f5
Merge pull request #77713 from NousResearch/bb/review-76744-fold
OutThisLife 48e12a0
perf(tools): shrink lazy tool catalog overhead
carbongotfound 13172fc
refactor(tool-search): drop dead fallback ladder in _available_source…
kshitijk4poor 82019e7
fix(credential_pool): unpack the tuple in next_available_at's gate
kshitijk4poor 8167b9f
chore: map copii.list@gmail.com to stremtec
kshitijk4poor 4a99ba1
Merge pull request #77760 from kshitijk4poor/chore/attrib-stremtec
kshitijk4poor dae5df2
chore(contributors): map marzukia@users.noreply.github.com -> marzuki…
kshitijk4poor f1133c9
chore: map bot@bkstock.dev to BKStock
kshitijk4poor 7e47a0f
Merge pull request #77779 from kshitijk4poor/chore/attrib-bkstock
kshitijk4poor eaf4d51
perf(session): route SQLite PRAGMAs through central apply_database_pr…
crayfish-ai 3ac7168
fix(pr): remove remnant local PRAGMAs from PR branch
crayfish-ai 7026177
test(session): guard config-gated performance PRAGMAs across all conn…
kshitijk4poor 416b56b
fix(desktop): flush queued deltas on window focus
unixwzrd 7700597
perf(desktop): stop scroll and status loops in busy sessions
myk0la-b 52fb96d
perf(desktop): pause hidden-pane timers in agents view, cron sidebar,…
hariNEzuMI928 e2a2149
style(desktop): restore alphabetical import order in agents/index.tsx
kshitijk4poor aece98c
refactor(desktop): shared pulse beat + fully-gated cron peek (simplif…
kshitijk4poor 9d76d48
fix(lint): import sort + eslint-disable for timer-handle ref clear in…
kshitijk4poor dab7c88
fix(state): narrow FTS UPDATE triggers with AFTER UPDATE OF + migration
a5ce909
fix(state): fail closed on CJK trigger migration
yuzilongleif-collab b66111f
fix(state): quarantine CJK when ensure soft-fails after OF migration
ae17163
refactor(state): drop unreachable regex guard in trigger migration
kshitijk4poor c7fd21a
fix(security): reject always-blocked OpenViking endpoints
zapabob 65bcca6
fix(openviking): fail closed on blocked endpoints
zapabob a3f6953
fix(openviking): don't spawn a second server onto a live port
jeff-mettel 9014aa0
fix(openviking): drop stale "disabled for this Hermes run" warnings
f0cb219
fix(openviking): re-arm the commit guard after in-place compression
jeff-mettel f94914f
test(openviking): cover the compression lifecycle, not a hand-set latch
jeff-mettel 5396dd8
fix(memory): read non-secret provider config from config.yaml for Ope…
PRATHAMESH75 4ebe990
fix(openviking): read recall settings from config.yaml first, env var…
justemu 4b57943
test(openviking): cover config.yaml recall settings with temp-HERMES_…
justemu e43bc0b
fix(openviking): integrate reliability and configuration hardening
ehz0ah 8fb9c3b
chore(contributors): map OpenViking source authors
ehz0ah e443d32
test(retaindb): guard scoped secret config resolution
ehz0ah a49a9e5
fix(openviking): verify servers before sending credentials
ehz0ah 41cc4a1
fix(openviking): catch endpoint errors in setup validation functions
kshitijk4poor 7d066c3
fix(state): deduplicate session system prompts
embwl0x 26133b5
chore: map cicav legacy noreply email
kshitijk4poor 5828687
fix(tui): avoid writable Kanban opens on empty polls
joncaldwell90 fe4cf36
Merge pull request #77796 from kshitijk4poor/chore/attrib-cicav
kshitijk4poor 5bbd0db
fix(context): dedupe subdirectory hints by content digest and skip ba…
06ae5b6
perf(state): batch the turn flush into one SQLite transaction
b58b3ad
perf(tui-gateway): batch branch-seed history copies (whole-bug-class)
kshitijk4poor 84146fb
test(run-agent): update flush-path fakes and assertions for batched w…
kshitijk4poor da6d960
refactor(state): fold simplify findings — reuse _insert_message_rows,…
kshitijk4poor 5bff398
fix(tests): update two more append_message.call_args assertions to ap…
kshitijk4poor 128ca2e
perf(tui): memoize useSessionLifecycle return (idea from #38491)
stremtec 1770028
ci: retry uv python install
ethernet8023 67d4bbb
fix(state): route session-resume reads through the WAL read-only conn…
pierrenode d48a78a
chore: add contributor email mapping for ArcherQAQ
kshitijk4poor d5584a3
Merge pull request #77821 from kshitijk4poor/chore-archer-email
kshitijk4poor fc32a38
fix(model_metadata): rewrite localhost->IPv4 for the remaining local …
pierrenode 733e7d2
fix(model_metadata): guard _localhost_to_ipv4 against non-string urls
kshitijk4poor 25a9c2c
perf(cold-start): mitigate ~14s GIL stall during backend init (#60800)
jinglun010-cpu 0bb1462
test: harden cold-start regression tests + debug-log the env-var skip
kshitijk4poor 003b4c8
perf(gateway): per-platform skip_context_files to cut agent build lat…
ArcherQAQ 2f09df5
fix(relay): route Discord tool-progress into the auto-thread, not the…
benbarclay 1f8acb3
fix(agent): stop re-probing endpoints that blackhole TCP connects
rlaope 3c27eb6
chore: release v0.20.0 (2026.8.3)
teknium1 3763706
chore: add contributor email mapping for Ahmett101
kshitijk4poor f03eb25
Merge pull request #77867 from kshitijk4poor/chore-ahmett-email
kshitijk4poor d1c6c6b
perf(moa): cache resolved preset + per-slot runtime to cut cold-start…
e6f1d61
fix(discord): leave voice channels before cancelling the bot task
BrinShadewater c0b0cc3
feat(image): parallelize image_generate batches
EndeavorYen 952d86b
fix(file-sync): serialize concurrent sync cycles
EndeavorYen a7ad713
fix(tool-executor): unpack 5-tuple runnable_calls in _max_workers_for…
kshitijk4poor 9267c78
fix: exponential backoff for rate-limit fallback cooldown
df9dbba
fix(backoff): keep 60s first-hit cooldown, escalate only on consecuti…
kshitijk4poor 861ca18
fix(catalog): wire api_key auth headers for http MCP servers
JonthanaHanh f8f4755
perf(compressor): release allocator pages after successful compaction
kshitijk4poor 00475e1
fix(catalog): validate http+api_key manifests declare the header's en…
kshitijk4poor 23f8ae3
fix(agent): cap auxiliary LLM concurrency per task
konsisumer ddae511
fix: thread extra_headers through the call_llm split
kshitijk4poor 7eefb09
fix(nix): tie devShell's HERMES_PYTHON to the venv actually on PATH
ethernet8023 9b9cbdd
fix(system_prompt): move skills index to the volatile band
marzukia 9555525
docs(system_prompt): fix stale reconstruct_static_prefix docstring ex…
kshitijk4poor efbfe08
fix(prompt_size): search volatile tier for skills block after the sta…
kshitijk4poor 164c3d6
chore: add contributor email mapping for zabih-sudo
kshitijk4poor d92a28d
Merge pull request #77902 from kshitijk4poor/chore-zabih-email
kshitijk4poor f40d63d
chore: add contributor email mapping for HAOWANG116
kshitijk4poor 53cc628
Merge pull request #77912 from kshitijk4poor/chore-haowang-email
kshitijk4poor aad8f74
fix(backup): serialize and atomically publish snapshots
827bb0d
chore: add contributor email mapping for ElSnacko
kshitijk4poor 0845232
fix: prefer explicit anthropic api key
kshitijk4poor a991dfc
docs: document /personality none|default|neutral reset across persona…
teknium1 4d29ad8
fix(runtime): stabilize broad CI under contention
923a43c
test(stt): stabilize idle-timeout output preservation
dac4bbe
fix comment about relay workaround
jquesnelle 3c3ae74
feat(models): add qwen3.8-max to Nous portal + OpenRouter catalogs, r…
teknium1 91937a6
test: swap context-switch-guard fixture off qwen3.8-max-preview
teknium1 85f0686
fix(runtime): reap interrupted local subprocess wrappers
66f145a
fix(runtime): reap fallback-killed local subprocess wrappers
70db671
Merge pull request #76643 from NousResearch/fix/termux-nemo-relay
jquesnelle f205354
test(runtime): stabilize loaded concurrency checks
d218496
Merge pull request #77924 from kshitijk4poor/chore/author-map-elsnacko
kshitijk4poor 3a0a295
fix(agent): keep context_length pin for named custom providers
xxxigm 942ff91
test(gateway): cover named-custom context pin on session-info banner
xxxigm 60c721a
fix(model_metadata): read llama.cpp context from meta.n_ctx + accept …
ElSnacko f66d625
chore: add contributor email mapping for johnrazmus
kshitijk4poor e4888a9
Merge pull request #78226 from kshitijk4poor/chore-razmus-email
kshitijk4poor 3b0bb3b
fix(gateway): keep event loop alive during /compress and Relay drain
Dannyzen 9c88625
fix(gateway): bound go_dormant ws.close with teardown timeout
kshitijk4poor e623432
fix: close the Codex app-server session on agent teardown
johnrazmus ba9068c
fix(agent): discard bare tool-call marker before fallback/persistence…
JoaoMarcos44 70d7e4c
fix(agent): repair sessions already contaminated with stale tool-call…
JoaoMarcos44 e1a2739
feat(cli): add sessions clean-markers to permanently purge stale tool…
JoaoMarcos44 e18c040
fix(cli): back up state.db before clean-markers writes by default
JoaoMarcos44 15d51bb
refactor: dedup stale-marker regex — use compiled _STALE_MARKER_RE in…
kshitijk4poor 9938d20
fix(conversation_loop): compress messages on output-cap retry path (#…
Rafa-Ross 04098e2
fix(conversation_loop): prune dead vision-strip fallback; harden outp…
BobClawblaw 78c8bcd
chore: drop CHANGELOG.md and docs/reports/ — not shipped with salvage…
kshitijk4poor 9fc8926
perf: reuse request_input_estimate instead of recomputing estimate_re…
kshitijk4poor 743dc94
chore: AUTHOR_MAP — add BobClawblaw for PR #77870 salvage
kshitijk4poor 2efd376
fix(desktop): accept detached pinned install stamps
bdc82e3
perf(gateway): prewarm /model picker cache on TUI startup
ZachariahChu 5c078b9
test(tui): pin picker-cache prewarm wiring in entry.main()
kshitijk4poor dbafb59
perf(cli): check local auth.json/config before slow provider registry…
frohsinnllc 8f52040
test(cli): regression tests pinning auth-first ordering skips registr…
kshitijk4poor 9a20d7f
perf(desktop): keep spinner frames out of React commits
myk0la-b be54f28
test(desktop): cover minimized/hidden window-state + visibilitychange…
kshitijk4poor 9076ada
fmt(js): `npm run fix` on merge (#78271)
hermes-seaeye[bot] 7098862
perf(gateway): replace SSE poll loop with call_soon_threadsafe-fed as…
zabih-sudo 7a1f2e3
refactor(gateway): extract _sse_frame() helper, dedup 5 inline SSE en…
zabih-sudo 1a09b07
refactor(gateway): route all three SSE writers through _sse_frame()
zabih-sudo 221afc0
refactor(gateway): route session event stream through _sse_frame (ens…
zabih-sudo fc8e393
test: add cross-thread put_threadsafe + long-reasoning tail tests
zabih-sudo 98165da
fix: reconstruct fused test after conflict resolution
kshitijk4poor 64882bc
perf(tui): bound reasoning-clean input to the displayed tail
zabih-sudo 7e344dc
test: exercise the production _loop_ref path in put_threadsafe tests
kshitijk4poor fb4e17b
fix(test): feed the SSE writers an asyncio queue, not queue.Queue
kshitijk4poor db0bd42
fix(credential-pool): re-select in acquire_lease after a deferred ref…
kshitijk4poor 4075c8f
fix(credential-pool): lock the quarantine read-modify-write of _entries
kshitijk4poor fb6d396
merge: integrate pinned upstream runtime fixes
fed8864
fix(backup): secure partial archive creation
4d20b65
fix(backup): pin validated archive publication
efdb056
fix(backup): clean up failed staging setup
90b43a9
fix(backup): secure staging setup cleanup
cab8a67
test(installer): stub warning logger in launcher harness
2e77717
fix(desktop): shorten POSIX SSH control path
2a401d3
fix(desktop): validate SSH mux control directory
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,69 @@ | ||
| name: Get GitHub App Token | ||
| description: >- | ||
| Mint a short-lived (1-hour) installation access token from the repo's | ||
| GitHub App, replacing the long-lived AUTOFIX_BOT_PAT. App tokens get | ||
| 5,000 req/hr per installation (vs 1,000 for the default GITHUB_TOKEN) | ||
| and are scoped to the App's installation permissions, not a user account. | ||
|
|
||
| Callers must source App credentials from a protected, main-only environment. | ||
| Never pass an App private key to a pull_request job, a local action, or a | ||
| reusable workflow resolved from an untrusted PR ref. The fallback keeps a | ||
| trusted caller functional when its protected environment is misconfigured. | ||
|
|
||
| Composite actions cannot access contexts directly, so callers pass the | ||
| public vars.APP_CLIENT_ID and protected secrets.APP_PRIVATE_KEY as inputs. | ||
| When the private key is empty, the fallback fires. | ||
|
|
||
| inputs: | ||
| client-id: | ||
| description: GitHub App Client ID. Pass vars.APP_CLIENT_ID from the calling workflow. | ||
| required: false | ||
| default: '' | ||
| private-key: | ||
| description: GitHub App private key PEM. Pass secrets.APP_PRIVATE_KEY from the calling workflow. | ||
| required: false | ||
| default: '' | ||
| owner: | ||
| description: GitHub App installation owner. Empty scopes the token to the current repository. | ||
| required: false | ||
| default: '' | ||
| repositories: | ||
| description: Comma- or newline-separated repositories to scope within the installation owner. | ||
| required: false | ||
| default: '' | ||
|
|
||
| outputs: | ||
| token: | ||
| description: A GitHub App installation access token (1-hour TTL), or GITHUB_TOKEN on forks. | ||
| value: ${{ steps.app-token.outputs.token || steps.fallback.outputs.token }} | ||
|
|
||
| runs: | ||
| using: composite | ||
| steps: | ||
| - name: Check if App credentials exist | ||
| id: check | ||
| shell: bash | ||
| env: | ||
| CLIENT_ID: ${{ inputs.client-id }} | ||
| run: | | ||
| if [ -n "$CLIENT_ID" ]; then | ||
| echo "has_app=true" >> "$GITHUB_OUTPUT" | ||
| else | ||
| echo "has_app=false" >> "$GITHUB_OUTPUT" | ||
| fi | ||
|
|
||
| - name: Create GitHub App token | ||
| id: app-token | ||
| if: steps.check.outputs.has_app == 'true' | ||
| uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0 | ||
| with: | ||
| client-id: ${{ inputs.client-id }} | ||
| private-key: ${{ inputs.private-key }} | ||
| owner: ${{ inputs.owner }} | ||
| repositories: ${{ inputs.repositories }} | ||
|
|
||
| - name: Fall back to GITHUB_TOKEN | ||
| id: fallback | ||
| if: steps.check.outputs.has_app != 'true' | ||
| shell: bash | ||
| run: echo "token=${{ github.token }}" >> "$GITHUB_OUTPUT" | ||
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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
When
APP_CLIENT_IDis configured butAPP_PRIVATE_KEYis empty or unavailable in the protected environment, this check still emitshas_app=true, so the fallback is skipped andactions/create-github-app-tokenruns with a blank private key. That turns the action's intended misconfiguration fallback into a hard failure for callers such as js-autofix and skills-index; include the private-key input in the credential check before choosing the App-token branch.Useful? React with 👍 / 👎.