Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
788 commits
Select commit Hold shift + click to select a range
d880803
feat(runtime): configure worker inhibition with direct-routing bypass…
kthui Jul 23, 2026
7de3a04
feat: add batch API skeleton (#11707)
hhzhang16 Jul 23, 2026
071aff3
feat(frontend): pass multimodal UUIDs through to vLLM Part 3 (#11958)
Chokoyo Jul 23, 2026
f0c4516
chore: bump version 10 1.4.0 post 1.3.0 (#12040)
pvijayakrish Jul 23, 2026
e995a81
fix(mocker): preserve Mooncake hash identities (#12046)
PeaBrane Jul 23, 2026
c9e0c2a
feat(router): add provider-keyed tracking hashes (#11548)
jthomson04 Jul 23, 2026
5ab5a7f
feat(trtllm): native multimodal KV routing on rc21 (#11737)
KrishnanPrash Jul 23, 2026
fc25e79
perf(logging): warn when dynamic filters disable fast path (#11974)
jthomson04 Jul 23, 2026
215c436
feat(deploy-test): optionally mount a shared model cache on worker po…
nv-tusharma Jul 23, 2026
2a339b2
feat: experimental squeeze_evolve (multi-model evolutionary test-time…
Nietzsche2000 Jul 23, 2026
3f6141e
perf(trtllm): batch worker KV event drains (#11783)
jthomson04 Jul 23, 2026
5fec2ab
fix(llm): return 400 for max_tokens: 0 on chat completions (#11394)
AmeenP Jul 23, 2026
3d4f362
fix(mocker): bound offline replay memory growth (#12049)
tedzhouhk Jul 24, 2026
9d01867
fix(vllm): publish configured KV events from decode workers (#12084)
alec-flowers Jul 24, 2026
37e5b19
build(grove): bump dependency to v0.1.0-alpha.12-rc1 (#11994)
julienmancuso Jul 24, 2026
fe0f219
feat(operator): support Recreate strategy for managed rolling updates…
julienmancuso Jul 24, 2026
4924b09
feat(vllm): add mock gRPC server for sidecar tests (#11873)
connorcarpenter15 Jul 24, 2026
6e24e02
fix(codeowners): assign squeeze-evolve to router (#12101)
saturley-hall Jul 24, 2026
8e0fe8b
refactor(planner): decouple global planner decision logic from K8s an…
sachalmalick Jul 24, 2026
addab3f
feat(vllm): add custom encoder adapter (#11847)
furionw Jul 24, 2026
efd50a2
fix(recipes): make gpt-oss-120b disagg + perf run as shipped (#12070)
RomaA2000 Jul 24, 2026
79fbec3
feat(container/AWS): Update to EFA Installer 1.49.0 (#12010)
erezzarum Jul 24, 2026
3b63447
fix: count only generate workers in kv router bench (#12086)
oandreeva-nv Jul 24, 2026
9b45869
perf(benchmarks): restore local prefix hashing (#12104)
PeaBrane Jul 24, 2026
51b857d
feat(mocker): add selectable native G1 manager (#12033)
dreamtalen Jul 24, 2026
3195a57
ci: run dynamo_llm rust-gpu tests single-threaded to fix teardown SIG…
dmitry-tokarev-nv Jul 24, 2026
a9a7db4
chore(vllm): remove deprecated worker role flags (#12089)
alec-flowers Jul 24, 2026
0c6ec70
fix(profiler): fail closed on interpolation errors (#12118)
tedzhouhk Jul 24, 2026
83173da
fix(mocker): model SGLang KV allocation by page (#12108)
tedzhouhk Jul 24, 2026
ff9079a
fix(trtllm): preserve unset KV cache config fields (#12117)
alec-flowers Jul 24, 2026
ee514a9
feat(router): warn on missing KV event publishers (#12095)
PeaBrane Jul 24, 2026
daf44c6
feat(frontend): add image-token count metrics (#12065)
KrishnanPrash Jul 25, 2026
5ac6303
fix(snapshot): disable service-mesh sidecar injection on checkpoint J…
Ronkahn21 Jul 26, 2026
7475ea7
fix(runtime): restrict event publisher IDs to 63 bits (#12170)
jthomson04 Jul 26, 2026
68817ca
docs: update Fern CLI link (#12173)
PeaBrane Jul 26, 2026
8df48c6
docs(dynosim): clarify offline and live simulation workflows (#12172)
PeaBrane Jul 26, 2026
818501a
feat(router): add active-request decode cost (#12158)
PeaBrane Jul 26, 2026
16bcae6
build(deps): Change parser for performance dependency (#12147)
saturley-hall Jul 26, 2026
769ee07
docs: add KV router offloading support matrix and vLLM native offload…
Change72 Jul 26, 2026
b6a58f9
feat(epp): reconcile standalone worker topology with the embedded sel…
atchernych Jul 27, 2026
47222ed
fix(operator): preserve DGDSA-owned replica counts (#12087)
julienmancuso Jul 27, 2026
56cd43e
perf(tokens): remove redundant inner DashMap sharding (#12161)
jthomson04 Jul 27, 2026
be642b2
docs: restructure docs site into tab-based navigation (#10855)
Jont828 Jul 27, 2026
0fe93a1
ci(nightly): add H100 test lanes for vLLM and TensorRT-LLM (#12045)
nv-tusharma Jul 27, 2026
16ff7d2
fix(docs): deliver site CSS from CustomFooter so it survives the glob…
dagil-nvidia Jul 27, 2026
329aba5
docs: add Kimi-K3 recipe page (#12210)
BenHamm Jul 27, 2026
92ec014
recipes: publish Kimi-K3 to main (#12228)
BenHamm Jul 27, 2026
cbe1acf
fix(container): workaround for devtools repo error (404) on nsight-sy…
nv-rinig Jul 27, 2026
368c963
fix(ci): provision the model cache PVC on post-merge (#12114)
nv-tusharma Jul 27, 2026
0f68534
feat(aisimulate): move experimental Spica into Dynamo (#11923)
tedzhouhk Jul 28, 2026
a4777ae
perf(mocker): avoid cloning offline worker groups (#12240)
jthomson04 Jul 28, 2026
ad53d89
docs(mocker): document eager replay execution (#12245)
PeaBrane Jul 28, 2026
9f8ab77
perf(mocker): drive only ready offline worker groups (#12242)
jthomson04 Jul 28, 2026
11c1d7c
fix(kv-router): restore multinode SGLang KV events (#12185)
rmccorm4 Jul 28, 2026
8f5f434
feat(skills): add visual review dashboard (#11602)
sttts Jul 28, 2026
2b6819b
fix(protocols): preserve media in tool results (#12180)
michaelfeil Jul 28, 2026
d34eff3
fix: recreate allocation export handles after CUDA restore (#12216)
hhzhang16 Jul 28, 2026
16e1cf1
chore: bump trtllm to v1.3.0rc22 (#12071)
dynamo-ops Jul 28, 2026
b54a7bb
test(operator): add Kind-backed controller manifest tests (#12009)
sttts Jul 28, 2026
fcdd947
docs: fix stale references to removed unified backend (#11833)
tanmayv25 Jul 28, 2026
e7d8764
test(gms): verify fresh vLLM reconnect after GMS restore (#12264)
hhzhang16 Jul 28, 2026
a96a2a8
feat: PR 6 wire all components into the EPP for the EPP and standalon…
atchernych Jul 28, 2026
8e8ce2c
refactor(mocker): migrate online replay to LiveEngine [DIS-2478] (#12…
PeaBrane Jul 28, 2026
195c035
test(router): isolate overload rejection metric delta (#12275)
PeaBrane Jul 28, 2026
329132a
fix(ci): tolerate stale vcluster webhook readiness (#12278)
lavanyavijayk Jul 28, 2026
6125e82
feat(mocker): default G1 to native and preserve KV event order (#12222)
dreamtalen Jul 28, 2026
2091b76
perf(bindings): carry bytes through the Python Client request plane v…
michaelfeil Jul 28, 2026
972e340
fix(tool-calling): Enforce `parallel_tool_calls: false` in chat compl…
pskiran1 Jul 28, 2026
f17f544
perf(mocker): use intrusive inactive block LRU (#12244)
jthomson04 Jul 28, 2026
f62f28e
fix(responses): stream reasoning summaries (#12183)
rmccorm4 Jul 28, 2026
5f2102a
perf(mocker): flatten native G1 sequences (#12248)
jthomson04 Jul 29, 2026
7688978
refactor(backends): remove deprecated multimodal flags across engines…
Chokoyo Jul 29, 2026
8e2aa83
docs(runtime): clarify DRT instance lifecycle (#12321)
PeaBrane Jul 29, 2026
d698beb
fix(mocker): resolve G1 backend before comparison (#12336)
jthomson04 Jul 29, 2026
d2e3f2f
refactor(trtllm): single-source NIXL version from NIXL_REF (#12217)
tanmayv25 Jul 29, 2026
f3cb7eb
fix(mocker): stabilize replay KVBM ordering (#12326)
PeaBrane Jul 29, 2026
bde8bd8
feat(selection): return normalized booking facts for peer reservation…
jeffreywang88 Jul 29, 2026
26e88e9
chore(deps): vllm bump to 0.26.0 (#12202)
karen-sy Jul 29, 2026
29ef3b5
fix(operator): gate readiness on webhook server (#12255)
sttts Jul 29, 2026
a329df9
docs: follow-up cleanup and fixes to the docs refactor (#12243)
Jont828 Jul 29, 2026
3da8669
fix: Pre-deployment check fails on AKS clusters using managed GPU exp…
devivasudevan Jul 29, 2026
5b1c306
feat: Add xpu-smi and sanity checks for XPU deployments (#7702)
joshuayao Jul 29, 2026
99851d8
fix(frontend): raise soft RLIMIT_NOFILE at startup to avoid accept() …
mikekg Jul 29, 2026
5b11fb6
feat(llm): add pool-scoped KV DC Relay runtime (#12199)
Kaonael Jul 29, 2026
b4d7a82
feat(sidecar): add vLLM sidecar deploy examples (agg + disagg) (#12238)
tanmayv25 Jul 29, 2026
064ecfb
fix: pin uv to one version across all container stages (#12357)
nv-anants Jul 29, 2026
6b1ca55
docs(skill): clarify KV replay parity protocol (#12343)
PeaBrane Jul 29, 2026
9340dfe
docs(recipes): refine Inkling SGLang agg-B200 recipe (#11807)
larroy Jul 29, 2026
ce54943
refactor(replay): unify planner runtime boundary (#12334)
PeaBrane Jul 29, 2026
0e1d1d8
ci(buildkit): probe pod ordinals up to the KEDA replica ceiling (OPS-…
dmitry-tokarev-nv Jul 29, 2026
cadb625
test(operator): cover GMS discovery annotation pruning (#12220)
julienmancuso Jul 29, 2026
ee9687a
feat(kv-router): stamp request identity on selector scoring rows (#12…
nv-yna Jul 29, 2026
83e8719
fix(ci): harden Grove webhook readiness in vCluster (#12368)
lavanyavijayk Jul 29, 2026
481b34a
test(operator): strengthen GMS ResourceClaim name regression coverage…
julienmancuso Jul 29, 2026
a2cfdc9
ci(snapshot): gate DynamoCheckpoint CI on framework snapshot paths (#…
galletas1712 Jul 29, 2026
642ba9c
fix(docs): deliver landing and blog styles past the global theme (#12…
dagil-nvidia Jul 29, 2026
cde3ca9
fix(frontend): accept empty image URLs with UUIDs (#12208)
Chokoyo Jul 29, 2026
30658a9
test(sglang): cover disaggregated OTLP tracing (#11742)
knarangN Jul 29, 2026
be9dd5a
fix(ci): remove Grove mutation assertion (#12399)
lavanyavijayk Jul 29, 2026
4830f0c
ci: stage nightly kubernetes-operator and dynamo-planner containers t…
pvijayakrish Jul 29, 2026
d6859d7
revert(container): remove nsight-systems 404 workaround (#12274)
lavanyavijayk Jul 30, 2026
35c3cb7
fix(docs): repair the LandingStyles template literal (#12402)
dagil-nvidia Jul 30, 2026
d05c085
feat(backends): handle conditional disagg bypass annotation (#11719)
karen-sy Jul 30, 2026
7645809
fix(aic): adopt published AIC 0.11 dev artifacts (#11986)
jasonqinzhou Jul 30, 2026
ddf2b8e
fix(runtime): make push router direct dispatch exact (#10429)
kthui Jul 30, 2026
0915a37
fix(replay): support Dynamo traces and planner warmup (#12211)
tedzhouhk Jul 30, 2026
4bde30c
build: bump UCX to v1.21.0 for v1.4.0 (OPS-7781) (#12401)
pvijayakrish Jul 30, 2026
245be42
fix(responses): mark truncated output incomplete (#12182)
rmccorm4 Jul 30, 2026
96a583f
ci(deploy-test): align vCluster Kubernetes with host and remove readi…
sara4dev Jul 30, 2026
bde20c9
fix(trtllm): handle rc22 disaggregated request changes (#12203)
krishung5 Jul 30, 2026
cf495c8
feat(router): add decode affinity scoring (#11720)
karen-sy Jul 30, 2026
5a63808
chore(sglang): bump to 0.5.16 (#12081)
ishandhanani Jul 30, 2026
46642c4
release: set version 1.4.0
aidynamo-release-bot[bot] Jul 30, 2026
34b2043
build: pin Aiconfigurator to 0.11.0 source (#12418)
saturley-hall Jul 30, 2026
c45700e
feat: Support deployment-level thinking defaults for chat templates (…
indrajit96 Jul 30, 2026
51236f0
feat(operator): backport runtimeVersionOverride to release/1.4.0 (#12…
sttts Jul 30, 2026
80e160c
docs(kubernetes): backport vanilla vLLM GAIE on-ramp to 1.4 (#12480)
sttts Aug 1, 2026
2c262c6
chore: Update dynamo-parsers to latest 7.0.1 (#12451) (#12509)
indrajit96 Aug 1, 2026
8fb2232
chore: update Aiconfigurator release source (#12519)
saturley-hall Aug 1, 2026
a1dc6eb
fix(gms): cherry-pick support SGLang 0.5.16 memory pool API (#12445) …
galletas1712 Aug 3, 2026
ebe9e59
fix(snapshot): cherry-pick exit vLLM source without engine teardown (…
galletas1712 Aug 3, 2026
855f346
feat(vllm): cherry-pick local sidecar launchers (#12265) (#12596)
connorcarpenter15 Aug 3, 2026
5376572
feat(trtllm): cherry-pick local sidecar launcher (#12272) (#12597)
connorcarpenter15 Aug 3, 2026
edb56e8
fix(sidecar): cherry-pick SGLang delta-token fix (#12249) (#12598)
connorcarpenter15 Aug 3, 2026
b36fec6
feat(sglang): cherry-pick local sidecar launchers (#12271) (#12599)
connorcarpenter15 Aug 3, 2026
7b80e5c
feat(sidecar): cherry-pick SGLang deploy examples (#12239) (#12600)
connorcarpenter15 Aug 3, 2026
0c2d56d
feat(sidecar): cherry-pick TensorRT-LLM deploy example (#12206) (#12601)
connorcarpenter15 Aug 3, 2026
a28bc26
docs: cherry-pick experimental sidecar guides (#12414) (#12602)
connorcarpenter15 Aug 3, 2026
6853b3e
build(container): cherry-pick libprotobuf-dev dev-image fix (#12443) …
connorcarpenter15 Aug 4, 2026
fe205ec
fix(container): reuse pinned protoc in runtime image (#12535) [cherry…
dagil-nvidia Aug 4, 2026
75fab35
fix(examples): cherry-pick Triton CUDA 13 image + libdcgm copy (#1257…
dagil-nvidia Aug 4, 2026
11ba7dd
ci(checkpoint): cherry-pick mount shared model-cache PVC in DynamoChe…
galletas1712 Aug 4, 2026
71b917d
build: bump ModelExpress to 0.5.0 (OPS-7978) (#12613)
pvijayakrish Aug 4, 2026
d487199
fix(snapshot): cherry-pick enter PID namespace for GPU probe (#12227)…
galletas1712 Aug 4, 2026
afdad3f
fix(thunderagent): cherry-pick support topology-only wrapped backends…
dagil-nvidia Aug 4, 2026
9497b54
fix(operator): cherry-pick reject unresolved GMS client containers (#…
julienmancuso Aug 4, 2026
3800138
fix(sglang): cherry pick conditional disagg bypass httperror fix (#12…
karen-sy Aug 4, 2026
5f392f5
fix(container): cherry-pick SGLang UCX compatibility (#12558) (#12647)
Chokoyo Aug 4, 2026
4222e0e
docs(vllm): cherry-pick worker-role flag corrections and --kv-transfe…
dagil-nvidia Aug 4, 2026
fef7ff7
docs(dgdr): repoint moved doc links at the release tree (#12618)
dagil-nvidia Aug 4, 2026
bd9b5b3
chore: update Aiconfigurator release source (#12670)
saturley-hall Aug 4, 2026
1c819ba
fix(container): add google-crc32c to vLLM runtime for ModelExpress 0.…
pvijayakrish Aug 5, 2026
a1f5703
fix(power-agent): cherry-pick keep apiVersion off SPDX comment (#1265…
kaim-eng Aug 5, 2026
d5a67b3
fix(frontend): preserve zero top logprobs in release/1.4.0 (#12681)
rmccorm4 Aug 5, 2026
3afa54b
fix(frontend): guard tokenizer.chat_template for MistralTokenizer (#1…
krishung5 Aug 5, 2026
80c7692
fix(vllm): read omni realtime multimodal_output via the Mapping API (…
GuanLuo Aug 5, 2026
f1ba7cf
chore: update Aiconfigurator release source (#12726)
pvijayakrish Aug 5, 2026
d2028d6
fix(vllm): declare entry-stage engine_input_source in GLM-Image NIXL …
GuanLuo Aug 5, 2026
56a3b0d
docs(spica): correct kv_load_ratio support guidance (cherry-pick #127…
tedzhouhk Aug 5, 2026
31d9eed
build(container): cherry-pick media-codec cleanup + build gate + NVDE…
dmitry-tokarev-nv Aug 6, 2026
21bd8c5
chore: backport #12190 to release/1.4.0 (#12631)
VincyZhang Aug 6, 2026
3fbe067
feat(media): cherry-pick explicit media-decoder installer onto releas…
dmitry-tokarev-nv Aug 6, 2026
3a87a33
fix(planner): resolve aggregate workers by component type (cherry-pic…
dagil-nvidia Aug 6, 2026
527daad
docs(dgdr): correct the unachievable-SLA behavior (adapted cherry-pic…
dagil-nvidia Aug 7, 2026
ffbe226
docs(observability): metrics absence semantics + v1.4.0 deprecations …
dagil-nvidia Aug 7, 2026
7fa957f
fix(profiler): propagate AIC database version (cherry-pick #12771) (#…
tedzhouhk Aug 7, 2026
d8b5b1e
fix(aisimulate): send one synthetic load controller (cherry-pick #128…
tedzhouhk Aug 7, 2026
5515eb1
fix(runtime): negotiate request codec per worker (cherry-pick #12658)…
tmonty12 Aug 7, 2026
d4b92c6
fix(runtime): preserve event channel metadata compatibility (cherry-p…
tmonty12 Aug 7, 2026
54c9726
fix(llm): preserve MDC version compatibility (cherry-pick #12801) (#1…
tmonty12 Aug 7, 2026
0289953
fix(sglang): backport nvext token validation to release/1.4.0 (#12852)
rmccorm4 Aug 7, 2026
1374017
fix: backport guided JSON validation to release/1.4.0 (#12853)
rmccorm4 Aug 7, 2026
2234ade
fix(frontend): reject informational overload status codes (cherry-pic…
rmccorm4 Aug 7, 2026
b34c529
feat(media): cherry-pick actionable errors for unsupported video/audi…
dmitry-tokarev-nv Aug 10, 2026
be89c2c
fix(vllm): filter infeasible EAGLE benchmark points (cherry-pick #128…
tedzhouhk Aug 10, 2026
83d813b
fix(vllm): shut down EngineCore on decode worker exit (#12867)
furionw Aug 10, 2026
6dc991b
fix(frontend): backport protocol request validation to 1.4 (#12904)
rmccorm4 Aug 10, 2026
0b58565
docs(router): backport aggregate ISL config reference (#12949)
ishandhanani Aug 10, 2026
b572493
fix(kv-router): cherry-pick stamp request identity on decode-affinity…
nv-yna Aug 10, 2026
4a08c82
fix(frontend): backport vLLM tool-call constraints to release/1.4.0 (…
rmccorm4 Aug 10, 2026
0acec66
fix(vllm): align KVBM decode KV cache layout (cherry-pick #12821) (#1…
jthomson04 Aug 10, 2026
b05777f
fix(container): make vLLM FlashInfer cubin dirs writable (#12770) (#1…
nv-anants Aug 11, 2026
2d7d3b3
fix(router): accept relay endpoint futures [DYN-3795] (cherry-pick #1…
PeaBrane Aug 11, 2026
82904c7
feat(self-host): default self-hosted metadata to on (cherry-pick #114…
tmonty12 Aug 11, 2026
7b4085d
chore(backends): backport unified backend removal to 1.4.0 (#12862)
tanmayv25 Aug 11, 2026
c9b40d8
fix(frontend): return 4xx for backend request rejections on /v1/audio…
GuanLuo Aug 11, 2026
62dfee5
test(ci): GPU-tests speedups (OPS-8033, OPS-8113, OPS-8117) (#12964)
dmitry-tokarev-nv Aug 11, 2026
b67ab3e
ci: drop slack mention from Slack failure alert (#12728) (#12981)
nv-tusharma Aug 11, 2026
86f1e75
docs: repoint five dead links on release/1.4.0 (#12946)
dagil-nvidia Aug 11, 2026
487d522
fix(container): bump nats-server to v2.12.12 (cherry-pick #12917) (#1…
dagil-nvidia Aug 11, 2026
5682204
fix(frontend): backport SGLang chat logprobs to 1.4.0 (#12988)
jain-ria Aug 11, 2026
efeb452
fix: make vLLM runtime cache dirs writable for arbitrary UIDs (#13040…
nv-anants Aug 11, 2026
3534ffd
fix(vllm): migrate GLM-Image NIXL config to the stages deploy schema …
GuanLuo Aug 11, 2026
415b7b3
docs: sync router and planner reference pages to the shipped 1.4.0 be…
dagil-nvidia Aug 11, 2026
395beb1
fix(sglang): publish ratio-based HiCache capacity (cherry-pick #12953…
dagil-nvidia Aug 12, 2026
1132796
docs(trtllm): correct the UCX env-var note and the EFA image facts on…
dagil-nvidia Aug 12, 2026
26cea2c
fix: hide disabled batch routes from OpenAPI (#12760) (#13122)
hhzhang16 Aug 12, 2026
2716abc
fix(profiler): clamp vLLM length to model context (cherry-pick #13136…
tedzhouhk Aug 13, 2026
02da5a9
chore: Bump nixl to v1.3.2 for vllm (#12882) (#13185)
sandeep-maddipatla Aug 13, 2026
ef51e86
fix(multimodal): preserve URL client errors (#12407) (#13193)
rmccorm4 Aug 13, 2026
8083391
chore: update Aiconfigurator release source (#13205)
saturley-hall Aug 13, 2026
3fa3a92
fix(mocker): retain SGLang cache-hit observations [DYN-3700] [cherry-…
PeaBrane Aug 13, 2026
46a537d
fix: remove the --router-reset-states flags from affected recipes (#1…
yunzhoul-nv Aug 14, 2026
48c8788
fix(recipes): declare decode mode in the DeepSeek-R1 vLLM disagg reci…
dagil-nvidia Aug 14, 2026
68a25b4
fix(frontend): release resources after LoRA unload - #12743 (#13203)
biswapanda Aug 14, 2026
ff63739
fix(recipes): parameterize DeepSeek-V4 model download so H200 recipes…
yunzhoul-nv Aug 14, 2026
e921973
feat(recipes): add model-agnostic accuracy check example (cherry-pick…
dagil-nvidia Aug 14, 2026
fea32ff
fix(llm): read the FinishReason string form workers emit (cherry-pick…
dagil-nvidia Aug 14, 2026
ed51f52
build: raise aiohttp, gitpython, and jupyterlab floors to current rel…
dagil-nvidia Aug 14, 2026
65efdff
docs(observability): mark the CKF counter as registered but never inc…
dagil-nvidia Aug 14, 2026
07bbcb4
build: bring image OS packages and python floors to current patch rel…
dagil-nvidia Aug 14, 2026
67ae0ff
chore: clean up TRT-LLM runtime base-image leftovers (cherry-pick #13…
dagil-nvidia Aug 14, 2026
8b9aa08
chore(container): bump etcd and NATS versions (cherry-pick #13016) (#…
dagil-nvidia Aug 14, 2026
ada9f56
build: apply trtllm image floors to the system-site install (#13256)
dagil-nvidia Aug 14, 2026
e949111
build: use published Aiconfigurator 0.11.0 (#13280)
saturley-hall Aug 14, 2026
7694107
docs: backport main docs tree and docs CI to release/1.4.0 (#12950)
dagil-nvidia Aug 15, 2026
0301494
build: add description to kvbm-kernels/logical/physical for cargo pub…
pvijayakrish Aug 15, 2026
1e6e315
docs: repoint the xgrammar structural-tag links to the versioned docs…
dagil-nvidia Aug 15, 2026
50d8959
feat(runtime): add NATS TLS/mTLS support (v1.3.0-dev.1 backport)
walkoss Jun 22, 2026
69e57af
fix(runtime): install ring crypto provider before NATS connect and de…
walkoss Jun 22, 2026
db0c752
feat(operator): inject NATS_TLS_CA_CERT_PATH from operator config
walkoss Jun 23, 2026
1ee0ded
feat(helm): add natsTLSCAPath to operator chart for NATS TLS CA injec…
walkoss Jun 23, 2026
008f657
feat(operator): auto-inject TCP TLS env vars from operator config
walkoss Jun 23, 2026
259c845
fix(operator): use individual if blocks for TCP TLS env injection
walkoss Jun 23, 2026
8d018a0
fix: remove duplicate tokio-rustls/rustls entries from workspace Carg…
dengkliu92 Jul 23, 2026
adf4a15
fix(runtime): fix variable rename inconsistency in nats connect()
dengkliu92 Jul 23, 2026
390b4d8
fix(runtime): restore dropped NATS TLS fix from Walid's fc612b9b48
dengkliu92 Jul 28, 2026
8a0f6b1
feat(runtime): add opt-in TLS and mTLS for NATS and TCP transports
walkoss Jun 22, 2026
a9d9cef
docs: add HOTFIX.md explaining fork branching model and hotfix flow
matthieu-n Jul 28, 2026
1f3e2ff
docs: document fork branching model and hotfix flow in README
matthieu-n Jul 28, 2026
ce733e5
feat(runtime): add TLS support to TCP request plane
walkoss Jun 25, 2026
437a67d
feat(runtime): address review feedback — CLI flags, timeout, and cleanup
walkoss Jun 25, 2026
0b45dea
fix(runtime): honor --no-tcp-tls-insecure over inherited env var
walkoss Jun 25, 2026
02cd1fe
style: fix black formatting for long env var assignment
walkoss Jun 25, 2026
f2fb9ba
refactor(frontend): decouple HTTP TLS from TCP TLS
walkoss Jun 27, 2026
b66e15e
docs(kubernetes): add TCP TLS configuration guide
walkoss Jul 29, 2026
4c774f7
docs(kubernetes): clarify TCP TLS scope covers response stream path only
walkoss Jul 29, 2026
6751516
fix(runtime): use dynamo-truthy for TCP TLS boolean parsing
walkoss Aug 1, 2026
97ceff0
docs(kubernetes): fix TLS page navigation and k8s deployment example
walkoss Aug 1, 2026
acb0f66
feat(runtime): add TLS to TCP request plane (egress/ingress)
walkoss Aug 1, 2026
c071bb5
feat(runtime): add TLS support to NATS transport
walkoss Aug 1, 2026
dec21ed
feat(runtime): add TLS support to NATS transport
walkoss Aug 1, 2026
8c04722
feat(runtime): add mutual TLS (mTLS) support for TCP and NATS transports
walkoss Aug 1, 2026
1c99727
feat(operator): add TLS/mTLS auto-injection via InfrastructureConfigu…
walkoss Aug 1, 2026
2d9240f
docs(tls): generalize page title from TCP TLS to TLS
walkoss Aug 3, 2026
9f70a6d
docs(tls): split operator-level TLS config into a Kubernetes Operator…
walkoss Aug 3, 2026
bc29d3f
docs(request-plane): link to the TLS reference from TCP config options
walkoss Aug 3, 2026
bb89dd3
fix(runtime): return error instead of panicking on invalid request-pl…
walkoss Aug 4, 2026
0c31556
fix(runtime): enforce request-plane mTLS
dengkliu92 Aug 4, 2026
800a0e2
fix(runtime): complete request-plane mTLS
dengkliu92 Aug 4, 2026
786d2e9
test(runtime): cover request-plane mTLS configuration
dengkliu92 Aug 5, 2026
c5def07
fix(runtime): flush request-plane TLS writes
dengkliu92 Aug 5, 2026
8e41041
test(runtime): soften request-plane mTLS client reject assert
dengkliu92 Aug 5, 2026
40794fd
fix(runtime): reload rotated TLS identities
dengkliu92 Aug 6, 2026
f3bcaf4
fix(runtime): retry TLS identity reload after transient failures
dengkliu92 Aug 6, 2026
10c938c
Potential fix for pull request finding
dengkliu92 Aug 7, 2026
46b9023
fix(runtime): reload TLS identities from content
dengkliu92 Aug 7, 2026
678de1b
docs: add PATCH.md tracking all patches on v1.4.0 branch
walkoss Aug 17, 2026
fe0e271
Fix: Return 400 for template validation errors instead of 500
dengkliu92 Aug 19, 2026
1bc1e36
Potential fix for pull request finding
dengkliu92 Aug 19, 2026
File filter

Filter by extension

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.
10 changes: 9 additions & 1 deletion .agents/skills/debug-session/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,16 @@
---
name: debug-session
description: Start a debugging session with worklog file
description: Sets up a structured debugging session for a Dynamo bug — pull the report from a Linear ticket, GitHub issue, or pasted text, capture the environment, create a persistent worklog markdown file, and walk through rebuild, reproduction, and investigation steps. Use when starting to investigate a reported Dynamo bug or regression and the investigation should be tracked in a worklog.
license: Apache-2.0
user-invocable: true
disable-model-invocation: true
metadata:
author: NVIDIA
tags:
- dynamo
- debugging
- worklog
- dev-workflow
---

# Start Debug Session
Expand Down
10 changes: 9 additions & 1 deletion .agents/skills/dep-create/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,14 @@
---
name: dep-create
description: Create or update Dynamo Enhancement Proposals as GitHub issues, including lightweight DEPs, implementation plans, and retroactive DEPs for ai-dynamo/dynamo.
description: Creates or updates Dynamo Enhancement Proposals as GitHub issues, including lightweight DEPs, implementation plans, and retroactive DEPs for ai-dynamo/dynamo. Use when proposing a feature or architecture change, drafting an implementation plan, or filing a retroactive DEP.
license: Apache-2.0
metadata:
author: NVIDIA
tags:
- dynamo
- dep
- enhancement-proposal
- github
---

# Skill: Create a DEP as a GitHub Issue
Expand Down
10 changes: 9 additions & 1 deletion .agents/skills/dep-status/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,14 @@
---
name: dep-status
description: Check Dynamo Enhancement Proposal issue status, list DEPs by lifecycle state or area, and find related DEP issues in ai-dynamo/dynamo.
description: Checks Dynamo Enhancement Proposal issue status, lists DEPs by lifecycle state or area, and finds related DEP issues in ai-dynamo/dynamo. Use when asking where a DEP stands or which DEPs exist for an area.
license: Apache-2.0
metadata:
author: NVIDIA
tags:
- dynamo
- dep
- enhancement-proposal
- github
---

# Skill: Check DEP Status
Expand Down
11 changes: 10 additions & 1 deletion .agents/skills/dep-update/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,15 @@
---
name: dep-update
description: Update Dynamo Enhancement Proposal lifecycle state in GitHub, including triage, PIC assignment, review, approval, and status label changes.
description: Updates Dynamo Enhancement Proposal lifecycle state in GitHub, including triage, PIC assignment, review, approval, and status label changes. Use when triaging a new DEP, assigning a PIC, or moving a proposal through review and approval.
license: Apache-2.0
metadata:
author: NVIDIA
tags:
- dynamo
- dep
- enhancement-proposal
- github
- lifecycle
---

# Skill: Update DEP Lifecycle
Expand Down
85 changes: 52 additions & 33 deletions .agents/skills/dynamo-docs/SKILL.md

Large diffs are not rendered by default.

345 changes: 345 additions & 0 deletions .agents/skills/dynamo-kv-replay-parity/SKILL.md

Large diffs are not rendered by default.

7 changes: 7 additions & 0 deletions .agents/skills/dynamo-kv-replay-parity/agents/openai.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0

interface:
display_name: "Dynamo KV Replay Parity"
short_description: "Validate offline KV replay parity and performance"
default_prompt: "Use $dynamo-kv-replay-parity to compare offline KV replay correctness and performance across two revisions."
Original file line number Diff line number Diff line change
@@ -0,0 +1,153 @@
# Internal-polynomial replay golden-point seeds

<!--
SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
SPDX-License-Identifier: CC-BY-4.0
-->

Use these configurations as starting seeds for offline replay qualification, not as
universal capacities, parity results, or performance results. They were qualified against
the contiguous first 5,000 rows of the canonical Mooncake trace:

- slice rule: rows 0 through 4,999 in source arrival order;
- slice SHA-256:
`3892ae19ae480b643155f0c6b9d798591cbe2e73bec6a0fa5ae3d3bc0332fb8a`;
- model: internal polynomial mocker, without AIC profile arguments;
- routing: KV-aware;
- arrival speedup: 4;
- trace block size: 512; and
- model and decode speedups: 1.

Requalify on the pinned baseline, then run the candidate with exactly the same
configuration. Never tune the revisions separately.

## Native G1 seeds

| Engine and topology | Starting configuration | Expected pressure and nearest boundaries |
| --- | --- | --- |
| vLLM aggregated | 4 workers; engine block 64; G1 blocks 6,144; max sequences 16; batch tokens 8,192 | 1 preemption; 4,096 produced 21 and 8,192 produced 0 |
| vLLM disaggregated | 2 prefill + 2 decode; engine block 64; G1 blocks 40,964; max sequences 16; batch tokens 8,192; KV bytes/token 1; 100 GB/s full-prompt transfer | 4 preemptions; exact next integer capacity 40,965 produced 0. This is a documented nearest-feasible exception to the 1–3 target: max sequences 15 produced 9–13 near the edge and max sequences 17 produced 0 |
| SGLang aggregated | 4 workers; engine/page block 512; G1 blocks 1,536; max sequences 256; batch tokens 32,768 | 1 retraction; 1,024 produced 8 and 2,048 produced 0 |
| SGLang disaggregated | 2 prefill + 2 decode; engine/page block 512; G1 blocks 17,408; max sequences 256; batch tokens 32,768; KV bytes/token 262,144; 100 GB/s full-prompt transfer | 2 retractions; 16,384 produced 12 and 18,432 produced 0 |

The vLLM configurations rely on native/default G1 selection. An experiment-only
`--g1-backend` switch is not required to reproduce the native seeds.

### CLI templates

Set the artifact and trace paths, then reuse the common load-generation arguments:

```bash
BIN=/path/to/offline_replay_bench
TRACE_5000=/path/to/mooncake_trace_rows_000000_004999.jsonl
COMMON_ARGS=(
--router-mode kv-router
--arrival-speedup-ratio 4
--trace-block-size 512
--speedup-ratio 1
--decode-speedup-ratio 1
--iterations 1
)
```

vLLM aggregated:

```bash
"$BIN" "$TRACE_5000" \
--serving-mode aggregated \
--num-workers 4 \
--engine-type vllm \
--block-size 64 \
--num-gpu-blocks 6144 \
--max-num-seqs 16 \
--max-num-batched-tokens 8192 \
"${COMMON_ARGS[@]}"
```

vLLM disaggregated:

```bash
"$BIN" "$TRACE_5000" \
--serving-mode disagg \
--num-prefill-workers 2 \
--num-decode-workers 2 \
--engine-type vllm \
--block-size 64 \
--num-gpu-blocks 40964 \
--max-num-seqs 16 \
--max-num-batched-tokens 8192 \
--kv-bytes-per-token 1 \
--kv-transfer-bandwidth 100 \
--kv-transfer-timing-mode full-prompt \
"${COMMON_ARGS[@]}"
```

SGLang aggregated:

```bash
"$BIN" "$TRACE_5000" \
--serving-mode aggregated \
--num-workers 4 \
--engine-type sglang \
--block-size 512 \
--num-gpu-blocks 1536 \
--max-num-seqs 256 \
--max-num-batched-tokens 32768 \
"${COMMON_ARGS[@]}"
```

SGLang disaggregated:

```bash
"$BIN" "$TRACE_5000" \
--serving-mode disagg \
--num-prefill-workers 2 \
--num-decode-workers 2 \
--engine-type sglang \
--block-size 512 \
--num-gpu-blocks 17408 \
--max-num-seqs 256 \
--max-num-batched-tokens 32768 \
--kv-bytes-per-token 262144 \
--kv-transfer-bandwidth 100 \
--kv-transfer-timing-mode full-prompt \
"${COMMON_ARGS[@]}"
```

## Expected behavior

With the exact corpus and internal model above, use these observed values as drift
detectors:

| Engine and topology | Immediate / queued | Requests with reuse | Worker and handoff evidence |
| --- | --- | --- | --- |
| vLLM aggregated | 8 / 4,992 | 4,918 | decode workers 0–3 |
| vLLM disaggregated | 4 / 4,996 | 4,991 | prefill and decode workers 0–1; 5,000 complete, backend-valid handoffs |
| SGLang aggregated | 5 / 4,995 | 4,840 | decode workers 0–3 |
| SGLang disaggregated | 2 / 4,998 | 4,992 | prefill and decode workers 0–1; 5,000 complete, backend-valid handoffs |

Every row must complete all 5,000 requests with no rejected, canceled, failed, or stranded
requests. A changed counter is not automatically a product failure, but it means the seed
must be requalified and the cause recorded before freezing the row.

## Derive and sanity-check KVBM rows

Derive each vLLM KVBM row from its corresponding native seed by enabling G2 and modestly
reducing or limiting G1. Keep the topology fixed; start disaggregated qualification at
exactly 2 prefill + 2 decode workers. Tune capacity or concurrency identically for both
revisions.

Require all of the following before freezing a KVBM row:

- all 5,000 requests complete;
- one to three bounded preemptions, without repeated preempt/re-admit cycling;
- nonzero G1-to-G2 eviction completion;
- nonzero G2-to-G1 restoration hits;
- identical lifecycle counts across repeated baseline and candidate runs;
- 5,000 complete, backend-valid handoffs for disaggregated replay; and
- one canonical digest per revision, with baseline and candidate digests matching.

Do not infer offload coverage from successful completion. Do not proceed to performance
when lifecycle counters match but a revision's canonical repetitions differ; that is an
internal determinism failure. SGLang KVBM offload is unsupported by the current harness
and must be reported as `UNSUPPORTED`, not simulated by toggling an ignored G1 option.
159 changes: 159 additions & 0 deletions .agents/skills/fern-components/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,159 @@
---
name: fern-components
description: Knowledge of Fern's built-in MDX component library (accordions, callouts, cards, steps, tabs, code blocks, API-reference snippets, and more) for authoring docs pages. Use when writing or editing a Fern `.mdx` page and deciding whether a component would present content better than plain Markdown, when a user asks "what Fern components exist" or "how do I use `<X>`", or when reviewing a page for missed opportunities to use a component. Complements dynamo-docs (which owns page placement, nav, frontmatter, and the style guide).
license: Apache-2.0
metadata:
author: NVIDIA
tags:
- fern
- docs
- mdx

---

# Fern Components

<!--
SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
SPDX-License-Identifier: CC-BY-4.0
-->

Fern ships a built-in library of ~27 MDX components you can use in documentation pages without
importing anything. This skill catalogs them, says **when each is worth reaching for**, and points to
[`references/components-reference.md`](references/components-reference.md) for exact syntax, every prop,
and copy-paste examples.

This skill is **component knowledge only**. Page placement, `docs/index.yml` nav, frontmatter, SPDX
headers, links, terminology, and the style guide belong to the **dynamo-docs** skill — use both
together when authoring.

## The `.md` vs `.mdx` rule (read this first in this repo)

Fern components are JSX. They render **only in `.mdx` files**. This repo (`ai-dynamo/dynamo`) mixes two
page formats, and the boundary is a hard must-fix:

| Page type | How to write rich content |
|---|---|
| **`.mdx`** (e.g. `getting-started/introduction.mdx`, recipe pages) | Use Fern components **directly** — `<CardGroup>`, `<Steps>`, `<Accordion>`, `<Tabs>`, `<Note>`, etc. |
| **`.md`** (most docs pages) | **Do not hand-write `<Note>`/`<Tip>`/etc.** Write callouts GitHub-style (`> [!NOTE]`); `fern/convert_callouts.py` converts them at build. Other components (Cards, Steps, Tabs…) are **not** available — restructure with plain Markdown, or convert the page to `.mdx` on purpose. |

Callout conversion map (GitHub → Fern), for `.md` pages:

| `> [!NOTE]` | `> [!TIP]` | `> [!IMPORTANT]` | `> [!WARNING]` | `> [!CAUTION]` |
|---|---|---|---|---|
| `<Note>` | `<Tip>` | `<Info>` | `<Warning>` | `<Error>` |

**Before using any component below, confirm the target file is `.mdx`.** If it's `.md` and you need a
non-callout component, the decision (restructure vs. rename to `.mdx`) is a dynamo-docs / nav concern —
raise it, don't silently rename.

## When to reach for a component (and when not)

Prefer plain Markdown. A component earns its place only when it does something Markdown can't:
progressive disclosure, sequencing, branching, live API data, or interactivity. Don't decorate — an
ordered list is better than `<Steps>` for two trivial steps, and a sentence is better than a `<Card>`
whose only job is to host a link (see the dynamo-docs / Fern cross-reference guidance).

| You want to… | Component | Notes |
|---|---|---|
| Flag a note / warning / tip | **Callout** (`<Note>` `<Tip>` `<Warning>` `<Info>` `<Success>` `<Error>` `<Launch>` `<Check>`) | In `.md`, use `> [!NOTE]` syntax instead (see above). |
| Collapse FAQs / optional detail | **Accordion** / **AccordionGroup** | Content stays SEO-indexed while collapsed. |
| Sequence a tutorial / setup | **Steps** / **Step** | Auto-numbered, anchor links. Use `toc` to surface in the TOC. |
| Show the same thing per-language / per-OS | **Tabs** / **Tab** | `language=` syncs all tabs+code blocks site-wide. |
| Navigation grid / feature hub | **Card** / **CardGroup** | `cols={n}`, Font Awesome icons, images, `href` makes the whole card clickable. |
| Rich code (highlight, focus, title, embed a file) | **Code block** / `<Code>` / `<CodeBlocks>` / `<CodeGroup>` | Fenced ``` with attrs; `<Code src>` embeds local/GitHub files. |
| Multiple install commands (npm/pnpm/yarn) | **CodeGroup** with `for=` | Custom sync group independent of language. |
| Image with caption / framing | **Frame** | Wraps `<img>`/`<video>`; `background="subtle"`. |
| Long / searchable / sticky-header table | **StickyTable** / **SearchableTable** / **StickySearchableTable**, or `<table sticky searchable>` | Plain Markdown tables are fine for short data. |
| Inline status / version chip | **Badge** | For longer notes use a Callout instead. |
| Small icon inline / in headings | **Icon** | Font Awesome name or `./path.svg`. |
| Clickable button / CTA / download trigger | **Button** | `intent`, `href`, icons. |
| Downloadable asset (PDF, ZIP bundle) | **Download** | `src=` single file, `sources={[…]}` zips multiple. |
| Click-to-copy inline text | **Copy** | Show one value, copy another via `clipboard=`. |
| Hover explanation for a term or code token | **Tooltip** / `<Template>` | `<Template>` adds tooltips to code-block variables. |
| Document a param / field / config key | **ParamField** | The standard field-doc row: `path`, `type`, `required`, `default`, `deprecated`. |
| Indent nested params visually | **Indent** | Wraps any content (unlike `<Folder>`). |
| Show a project / directory tree | **Files** / **Folder** / **File** | `defaultOpen`, `href`, `highlighted`, `comment`. |
| Link to non-heading content | **Anchor** | `id=` on paragraphs, tables, code blocks. |
| Float supplementary content right | **Aside** | Sticky; good for an endpoint snippet beside prose. |
| Copyable AI prompt (open in Cursor/Claude/ChatGPT) | **Prompt** | `actions={["cursor","claude","chatgpt"]}` or custom URL. |
| Show/hide by product, version, or role | **If** | `products` / `versions` / `roles`, combinable, `not` to invert. |
| Inline versioned content with a switcher | **Versions** / **Version** | Distinct from site-wide versioning. |
| **API reference — request code sample** | **EndpointRequestSnippet** | `endpoint="POST /path"`; `languages`, `payload`, `hideTryItButton`. |
| **API reference — response sample** | **EndpointResponseSnippet** | Pulls from your API definition. |
| **API reference — endpoint schema (params/body)** | **EndpointSchemaSnippet** | `selector="request.body"` etc. |
| **API reference — any named type** | **Schema** / **SchemaSnippet** | `<Schema type="…">` fields; `<SchemaSnippet>` JSON. |
| **API reference — live "try it" request builder** | **RunnableEndpoint** | Real HTTP calls from the page. |
| **API reference — webhook payload** | **WebhookPayloadSnippet** | By `operationId`. |
| Reuse a Markdown fragment in many places | **`<Markdown src>`** (reusable snippets) | Single-source constants/warnings; supports `{{params}}`. |
| Something bespoke / interactive | **Custom React component** | `.tsx` in a components dir wired via `docs.yml`; SSR'd. |

Full syntax, every prop, variants, and examples for **all** of the above are in
[`references/components-reference.md`](references/components-reference.md). Read the relevant section
before writing a component you don't use often — props and exact names (e.g. `<Note>` vs `<Callout
intent>`, `iconSize` math, `selector` values) are easy to get wrong from memory.

## Authoring workflow

1. **Confirm the file is `.mdx`.** If `.md`, only GitHub-style callouts apply (see the rule above).
2. **Ask "does Markdown already do this?"** If yes, use Markdown. Only reach for a component when it
adds disclosure, sequencing, branching, interactivity, or live API data.
3. **Open the reference** section for the component and copy the closest example. Match prop names and
casing exactly (MDX is `className`, not `class`; attributes are `camelCase` — `autoPlay`, not
`autoplay`).
4. **Nest deliberately.** Most containers accept rich children (a `<Note>` inside a `<Step>`, a
`<CardGroup>` inside an `<Accordion>`). `<Folder>` is the exception — it takes only `<File>` /
`<Folder>`; use `<Indent>` when you need to indent anything else.
5. **Anchors:** `##`/`###` headings auto-generate anchors; `title=` props on `<Step>`, `<Tab>`,
`<Accordion>`, `<Card>` **do not**. To deep-link one, add a real heading or use `<Anchor id>`.
6. **MDX gotchas that break the build:** put a blank line after `<div …>` and before `</div>`; keep
code fences at column 0; replace bare `<https://…>` with `[text](https://…)`; escape stray `<`/`>`
and literal `$` (`\$`) outside code.

## Suggesting components during review

When reviewing or improving an existing `.mdx` page, watch for these high-value swaps:

- A wall of "first… then… next…" prose or a long ordered list of actions → **Steps**.
- Parallel per-language / per-OS / per-backend blocks repeated back to back → **Tabs** (with
`language=` when it's code, so they sync).
- A long FAQ, or optional deep-dive detail interrupting the main flow → **Accordion**.
- A cluster of "see also" links at the top or bottom of a page → **CardGroup** of **Card**s.
- Hand-maintained request/response code that duplicates the API definition → the **Endpoint*Snippet**
family (also gives AI agents structured Markdown output).
- The same constant, warning, or boilerplate copy-pasted across pages → a **reusable snippet**
(`<Markdown src>`).
- A very long reference table users scan → **StickyTable** / **SearchableTable**.

Suggest the lightest option, name the component, and point at the reference section — don't rewrite a
working page just to add components.

## Staying in sync with Fern (refresh mechanism)

This skill is a **cached snapshot** of Fern's component docs, not a live mirror — so it works offline
and loads instantly. The trade-off is that it can drift when Fern ships or changes a component.
[`scripts/refresh_components.py`](scripts/refresh_components.py) tracks that drift, and
[`manifest.json`](manifest.json) records the upstream git-blob SHA of every source page as of the last
sync (see `manifest.json`'s `fetched_at` for how old this snapshot is).

Source of truth (GitHub `fern-api/docs@main`): the component-library pages under
`fern/products/docs/pages/component-library/**` plus `customization/custom-react-components.mdx` and
`navigation/tabs.mdx`.

**On-load staleness check (do this when the skill loads):** read `manifest.json`'s `fetched_at`. If it
is more than ~3 months old — or the user asks whether the components are current, or a component
doesn't behave as the reference claims — tell the user the snapshot's age and offer to refresh. Don't
refresh unprompted: it needs internet and edits the reference, so surface it and let the user say go.
Refreshing prefers the `gh` CLI and falls back to the public GitHub API; everything else here is
offline.

```bash
# From the skill dir. --check is read-only and safe to run anytime.
python3 scripts/refresh_components.py --check # drift vs manifest? exit 2 = drift, 0 = in sync
python3 scripts/refresh_components.py --fetch --out /tmp/fern-refresh # download only changed pages
# → then update references/components-reference.md and the tables above from those pages,
python3 scripts/refresh_components.py --sync # record the new SHAs as current
```

Only `--sync` writes the manifest; `--check`/`--fetch` never mutate the skill. After editing the
reference from freshly fetched pages, run `--sync` so the next `--check` is clean.
Loading
Loading