[{"data":1,"prerenderedAt":7590},["ShallowReactive",2],{"page:\u002Fdocs\u002F5.x\u002Fchangelog":3},{"id":4,"title":5,"body":6,"description":7575,"extension":7576,"frontmatter":7577,"heading":5,"meta":7581,"navigation":7582,"order":7583,"path":7584,"seo":7585,"sitemap":7586,"source":7587,"stem":7588,"__hash__":7589,"hasPopups":7579},"docs\u002Fdocs\u002F5.x\u002Fchangelog.md","Changelog",{"type":7,"value":8,"toc":6911},"minimark",[9,14,19,24,49,53,57,78,81,84,100,104,108,114,118,122,125,149,152,154,158,162,166,169,205,208,211,240,243,246,283,286,288,292,296,299,302,325,328,330,334,338,341,344,353,356,358,362,366,369,372,391,394,396,400,404,407,410,426,429,431,435,439,442,445,467,470,472,478,482,486,489,515,518,520,524,528,531,534,564,567,570,594,597,599,603,607,611,614,626,629,632,645,648,651,691,694,696,700,704,707,710,735,738,740,744,748,751,754,778,781,809,812,815,839,842,845,869,872,874,880,884,887,890,906,910,913,952,955,957,963,967,970,973,998,1001,1003,1007,1011,1014,1017,1056,1059,1062,1073,1076,1079,1111,1114,1117,1127,1130,1133,1152,1156,1159,1172,1176,1179,1193,1195,1198,1222,1225,1227,1231,1235,1238,1241,1255,1258,1260,1264,1268,1271,1274,1291,1294,1296,1300,1304,1307,1310,1327,1330,1333,1358,1361,1364,1375,1378,1381,1436,1439,1442,1454,1457,1460,1490,1493,1495,1501,1505,1508,1511,1540,1543,1546,1584,1587,1589,1593,1597,1600,1603,1620,1623,1625,1629,1633,1636,1639,1660,1663,1665,1669,1673,1676,1679,1815,1818,1820,1824,1828,1831,1834,1849,1852,1855,1894,1897,1917,1921,1924,1946,1949,1951,1955,1959,1962,1965,1986,1989,2005,2008,2010,2014,2018,2021,2024,2085,2088,2090,2094,2098,2101,2104,2126,2129,2132,2141,2144,2147,2159,2162,2164,2168,2172,2175,2178,2200,2203,2205,2209,2213,2216,2219,2238,2241,2244,2280,2283,2286,2307,2310,2312,2316,2320,2323,2326,2344,2347,2350,2456,2459,2462,2548,2551,2554,2638,2641,2749,2752,2755,2788,2791,2794,2812,2815,2818,2856,2859,2862,2889,2892,2895,2931,2934,2937,2958,2961,2980,2983,2986,3009,3012,3014,3018,3022,3025,3028,3089,3092,3095,3116,3119,3121,3129,3133,3136,3139,3245,3248,3250,3254,3258,3261,3264,3290,3293,3296,3347,3350,3353,3387,3390,3393,3423,3426,3428,3432,3436,3439,3442,3477,3480,3482,3486,3490,3493,3496,3522,3525,3527,3531,3535,3538,3541,3556,3559,3561,3565,3569,3572,3575,3608,3611,3613,3619,3623,3626,3629,3692,3695,3698,3717,3720,3722,3730,3734,3737,3740,3763,3766,3768,3772,3776,3779,3782,3824,3827,3829,3833,3837,3840,3843,3861,3864,3867,3882,3885,3887,3891,3895,3898,3901,3934,3937,3939,3943,3947,3950,3953,3987,3990,3992,3996,4000,4003,4006,4066,4069,4071,4075,4079,4082,4085,4168,4171,4173,4177,4181,4184,4187,4202,4205,4207,4211,4215,4218,4221,4249,4252,4254,4258,4262,4265,4268,4300,4303,4305,4309,4313,4316,4319,4359,4362,4365,4383,4386,4388,4392,4396,4399,4402,4458,4461,4463,4467,4471,4474,4477,4530,4533,4535,4539,4543,4546,4549,4568,4571,4573,4577,4581,4584,4587,4608,4611,4613,4617,4621,4624,4627,4642,4645,4648,4659,4662,4665,4684,4687,4689,4693,4697,4700,4703,4740,4743,4745,4749,4753,4756,4759,4795,4798,4800,4804,4808,4811,4814,4857,4860,4862,4866,4870,4873,4876,5085,5088,5090,5094,5098,5101,5104,5145,5148,5150,5154,5158,5161,5164,5250,5253,5255,5259,5263,5266,5269,5395,5398,5401,5480,5483,5485,5489,5493,5496,5499,5514,5517,5519,5523,5527,5530,5533,5548,5551,5553,5557,5561,5564,5567,5662,5665,5667,5671,5675,5678,5681,5692,5695,5698,5721,5724,5726,5730,5734,5737,5740,5751,5754,5756,5760,5764,5767,5770,5814,5817,5819,5823,5827,5830,5833,5863,5866,5868,5872,5876,5879,5882,5903,5906,5909,5924,5927,5929,5937,5941,5944,5947,5980,5983,5985,5989,5993,5996,5999,6019,6022,6025,6047,6050,6053,6156,6159,6161,6169,6173,6176,6179,6198,6201,6204,6219,6222,6225,6270,6273,6276,6298,6301,6304,6319,6322,6324,6328,6332,6335,6338,6440,6443,6469,6472,6474,6478,6482,6485,6488,6512,6515,6517,6521,6525,6528,6531,6546,6550,6553,6556,6590,6593,6595,6599,6603,6606,6609,6627,6630,6632,6636,6640,6643,6646,6700,6703,6705,6709,6713,6716,6719,6787,6790,6793,6816,6819,6822,6870,6873,6875,6879,6883,6891,6904],[10,11,13],"h2",{"id":12},"v5120--oct-21-2026","v5.12.0 — Oct 21, 2026",[15,16,18],"h3",{"id":17},"kubbcore","@kubb\u002Fcore",[20,21,23],"h4",{"id":22},"features","Features",[25,26,27],"ul",{},[28,29,30,34,35,38,39,42,43,48],"li",{},[31,32,33],"code",{},"input"," reads a spec from a git repository with ",[31,36,37],{},"git+\u003Crepo>#\u003Cref>:\u003Cpath>",". Private repositories use your git credentials and ",[31,40,41],{},"kubb validate"," accepts the same form. (",[44,45,47],"a",{"href":46},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4375","#4375",")",[15,50,52],{"id":51},"kubbparser-ts","@kubb\u002Fparser-ts",[20,54,56],{"id":55},"bug-fixes","Bug Fixes",[25,58,59],{},[28,60,61,62,65,66,69,70,73,74,48],{},"Load the compiler API from ",[31,63,64],{},"@typescript\u002Ftypescript6",", so ",[31,67,68],{},"print"," keeps working next to TypeScript 7. Custom printers import ",[31,71,72],{},"ts"," from that package too. (",[44,75,77],{"href":76},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4370","#4370",[15,79,80],{"id":80},"kubb",[20,82,56],{"id":83},"bug-fixes-1",[25,85,86],{},[28,87,88,91,92,95,96,48],{},[31,89,90],{},"defineConfig"," reports unknown config keys, such as a misspelled ",[31,93,94],{},"output.clean",". (",[44,97,99],{"href":98},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4376","#4376",[15,101,103],{"id":102},"contributors","Contributors",[105,106,107],"p",{},"Thanks to everyone who contributed to this release:",[105,109,110],{},[44,111,113],{"href":112},"https:\u002F\u002Fgithub.com\u002Fstijnvanhulle","@stijnvanhulle",[10,115,117],{"id":116},"v5116--oct-20-2026","v5.11.6 — Oct 20, 2026",[15,119,121],{"id":120},"kubbstudio","@kubb\u002Fstudio",[20,123,56],{"id":124},"bug-fixes-2",[25,126,127],{},[28,128,129,130,133,134,137,138,141,142,95,145,48],{},"Report every entry of a ",[31,131,132],{},"defineConfig([...])"," array to Studio and generate from the entry Studio names. ",[31,135,136],{},"loadConfig"," on ",[31,139,140],{},"connectAgent"," is now ",[31,143,144],{},"loadConfigs",[44,146,148],{"href":147},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4368","#4368",[15,150,103],{"id":151},"contributors-1",[105,153,107],{},[105,155,156],{},[44,157,113],{"href":112},[10,159,161],{"id":160},"v5115--oct-20-2026","v5.11.5 — Oct 20, 2026",[15,163,165],{"id":164},"kubbcli","@kubb\u002Fcli",[20,167,56],{"id":168},"bug-fixes-3",[25,170,171],{},[28,172,173,174,177,178,181,182,185,186,189,190,193,194,197,198,95,201,48],{},"Rework the terminal output of every command: live progress for ",[31,175,176],{},"kubb generate",", previews for ",[31,179,180],{},"kubb add",", ",[31,183,184],{},"kubb update"," and ",[31,187,188],{},"kubb init",", and one-line job logs for ",[31,191,192],{},"kubb studio",". ",[31,195,196],{},"kubb update --dry-run"," replaces ",[31,199,200],{},"--check",[44,202,204],{"href":203},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4355","#4355",[15,206,18],{"id":207},"kubbcore-1",[20,209,56],{"id":210},"bug-fixes-4",[25,212,213,223],{},[28,214,215,216,95,219,48],{},"Kubb Studio generates the same code from editor drafts as from the saved ",[31,217,218],{},"kubb.config.ts",[44,220,222],{"href":221},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4364","#4364",[28,224,225,226,229,230,233,234,237,238,48],{},"Hooks report node counts, each written file and unchanged paths, and ",[31,227,228],{},"Report"," gains ",[31,231,232],{},"filesUnchanged",". Diagnostics carry a ",[31,235,236],{},"file:line:column"," position. (",[44,239,204],{"href":203},[15,241,121],{"id":242},"kubbstudio-1",[20,244,56],{"id":245},"bug-fixes-5",[25,247,248,265],{},[28,249,250,251,137,254,185,257,260,261,48],{},"Accept ",[31,252,253],{},"requestedBy",[31,255,256],{},"startGeneration",[31,258,259],{},"saveConfig"," and name that Studio user in the agent log. (",[44,262,264],{"href":263},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4362","#4362",[28,266,267,268,271,272,229,275,185,278,95,281,48],{},"Export ",[31,269,270],{},"applyConfigEdits",", and ",[31,273,274],{},"PublishedSnapshot",[31,276,277],{},"number",[31,279,280],{},"webUrl",[44,282,204],{"href":203},[15,284,103],{"id":285},"contributors-2",[105,287,107],{},[105,289,290],{},[44,291,113],{"href":112},[10,293,295],{"id":294},"v5114--oct-20-2026","v5.11.4 — Oct 20, 2026",[15,297,121],{"id":298},"kubbstudio-2",[20,300,56],{"id":301},"bug-fixes-6",[25,303,304],{},[28,305,306,307,310,311,181,314,185,317,320,321,48],{},"Keep Studio output on disk and make existing output available for review before generating. Read files with ",[31,308,309],{},"{ jobId, paths }","; ",[31,312,313],{},"jobType",[31,315,316],{},"source",[31,318,319],{},"FileSource"," are removed. Upgrade Studio and its agents together. (",[44,322,324],{"href":323},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4360","#4360",[15,326,103],{"id":327},"contributors-3",[105,329,107],{},[105,331,332],{},[44,333,113],{"href":112},[10,335,337],{"id":336},"v5113--oct-19-2026","v5.11.3 — Oct 19, 2026",[15,339,121],{"id":340},"kubbstudio-3",[20,342,56],{"id":343},"bug-fixes-7",[25,345,346],{},[28,347,348,349,48],{},"List existing output files when connecting an agent with read permission and read their contents on demand. (",[44,350,352],{"href":351},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4358","#4358",[15,354,103],{"id":355},"contributors-4",[105,357,107],{},[105,359,360],{},[44,361,113],{"href":112},[10,363,365],{"id":364},"v5112--oct-19-2026","v5.11.2 — Oct 19, 2026",[15,367,121],{"id":368},"kubbstudio-4",[20,370,56],{"id":371},"bug-fixes-8",[25,373,374,381],{},[28,375,376,377,48],{},"Include existing output files when connecting an agent with read permission. (",[44,378,380],{"href":379},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4356","#4356",[28,382,383,384,95,387,48],{},"Refuse a Studio output path that resolves outside the config's output folder with ",[31,385,386],{},"KUBB_PATH_TRAVERSAL",[44,388,390],{"href":389},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4353","#4353",[15,392,103],{"id":393},"contributors-5",[105,395,107],{},[105,397,398],{},[44,399,113],{"href":112},[10,401,403],{"id":402},"v5111--oct-18-2026","v5.11.1 — Oct 18, 2026",[15,405,165],{"id":406},"kubbcli-1",[20,408,56],{"id":409},"bug-fixes-9",[25,411,412],{},[28,413,414,415,417,418,421,422,48],{},"Open ",[31,416,176],{}," with the Kubb mascot in fixed 256-color codes. CI, AI agents and narrow terminals keep the plain ",[31,419,420],{},"Kubb CLI vX"," line. (",[44,423,425],{"href":424},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4350","#4350",[15,427,103],{"id":428},"contributors-6",[105,430,107],{},[105,432,433],{},[44,434,113],{"href":112},[10,436,438],{"id":437},"v5110--oct-16-2026","v5.11.0 — Oct 16, 2026",[15,440,18],{"id":441},"kubbcore-2",[20,443,23],{"id":444},"features-1",[25,446,447],{},[28,448,449,450,181,453,185,456,459,460,95,463,48],{},"Filter operations by vendor extension: ",[31,451,452],{},"include",[31,454,455],{},"exclude",[31,457,458],{},"override"," accept ",[31,461,462],{},"{ type: 'extension', key: 'x-…', value? }",[44,464,466],{"href":465},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4316","#4316",[15,468,103],{"id":469},"contributors-7",[105,471,107],{},[105,473,474],{},[44,475,477],{"href":476},"https:\u002F\u002Fgithub.com\u002Fmohammad-naji7","@mohammad-naji7",[10,479,481],{"id":480},"v5104--oct-15-2026","v5.10.4 — Oct 15, 2026",[15,483,485],{"id":484},"all-packages","All packages",[20,487,56],{"id":488},"bug-fixes-10",[25,490,491,498],{},[28,492,493,494,48],{},"Keep function and class names in the CommonJS build. (",[44,495,497],{"href":496},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4340","#4340",[28,499,500,501,504,505,507,508,95,511,48],{},"Require Node.js 22.12 or higher. ",[31,502,503],{},"unplugin-kubb",", the bundler integrations in ",[31,506,80],{}," and the test helpers ship as ES modules only; from CommonJS read the plugin from ",[31,509,510],{},".default",[44,512,514],{"href":513},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4343","#4343",[15,516,103],{"id":517},"contributors-8",[105,519,107],{},[105,521,522],{},[44,523,113],{"href":112},[10,525,527],{"id":526},"v5103--oct-15-2026","v5.10.3 — Oct 15, 2026",[15,529,485],{"id":530},"all-packages-1",[20,532,56],{"id":533},"bug-fixes-11",[25,535,536],{},[28,537,538,539,542,543,185,546,193,549,552,553,181,555,185,558,95,560,48],{},"Ship separate CommonJS type declarations, so ",[31,540,541],{},"require"," consumers get correct types under ",[31,544,545],{},"moduleResolution: node16",[31,547,548],{},"nodenext",[31,550,551],{},"vitest"," is an optional peer of ",[31,554,18],{},[31,556,557],{},"@kubb\u002Fkit",[31,559,80],{},[44,561,563],{"href":562},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4337","#4337",[15,565,121],{"id":566},"kubbstudio-5",[20,568,56],{"id":569},"bug-fixes-12",[25,571,572,587],{},[28,573,574,575,578,579,582,583,48],{},"Diff large generated files in under a second; ",[31,576,577],{},"readDiff"," pages include ",[31,580,581],{},"stats"," and end on hunk boundaries. (",[44,584,586],{"href":585},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4336","#4336",[28,588,589,590,48],{},"Send generation events to Studio while the run is in progress. (",[44,591,593],{"href":592},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4338","#4338",[15,595,103],{"id":596},"contributors-9",[105,598,107],{},[105,600,601],{},[44,602,113],{"href":112},[10,604,606],{"id":605},"v5102--oct-15-2026","v5.10.2 — Oct 15, 2026",[15,608,610],{"id":609},"kubbadapter-oas","@kubb\u002Fadapter-oas",[20,612,56],{"id":613},"bug-fixes-13",[25,615,616],{},[28,617,618,619,621,622,48],{},"Declare ",[31,620,18],{}," as a dependency, so the published types resolve under pnpm and other strict installers. (",[44,623,625],{"href":624},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4332","#4332",[15,627,18],{"id":628},"kubbcore-3",[20,630,56],{"id":631},"bug-fixes-14",[25,633,634],{},[28,635,636,637,640,641,48],{},"Diagnostics say why a build failed and how to fix it. A plugin listed twice in ",[31,638,639],{},"plugins"," now fails. (",[44,642,644],{"href":643},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4329","#4329",[15,646,121],{"id":647},"kubbstudio-6",[20,649,56],{"id":650},"bug-fixes-15",[25,652,653,668],{},[28,654,655,656,659,660,663,664,48],{},"Report the editable parts of an object option that also holds code, so Studio can edit ",[31,657,658],{},"output.path"," and keep ",[31,661,662],{},"banner"," as it is. (",[44,665,667],{"href":666},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4330","#4330",[28,669,670,671,673,674,677,678,181,681,185,683,686,687,48],{},"Add ",[31,672,577],{}," to the agent, so Studio shows the diff of a large generated file page by page. ",[31,675,676],{},"@kubb\u002Fstudio\u002Fprotocol"," exports ",[31,679,680],{},"AgentMessage",[31,682,319],{},[31,684,685],{},"AgentPermission"," const enums instead of loose constants. (",[44,688,690],{"href":689},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4333","#4333",[15,692,103],{"id":693},"contributors-10",[105,695,107],{},[105,697,698],{},[44,699,113],{"href":112},[10,701,703],{"id":702},"v5101--oct-15-2026","v5.10.1 — Oct 15, 2026",[15,705,165],{"id":706},"kubbcli-2",[20,708,56],{"id":709},"bug-fixes-16",[25,711,712],{},[28,713,714,715,718,719,722,723,726,727,730,731,48],{},"Telemetry reports ",[31,716,717],{},"kubb.tty"," and, for ",[31,720,721],{},"kubb mcp",", the name of the connected MCP client. ",[31,724,725],{},"startServer"," in ",[31,728,729],{},"@kubb\u002Fmcp"," returns the server. (",[44,732,734],{"href":733},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4325","#4325",[15,736,103],{"id":737},"contributors-11",[105,739,107],{},[105,741,742],{},[44,743,113],{"href":112},[10,745,747],{"id":746},"v5100--oct-15-2026","v5.10.0 — Oct 15, 2026",[15,749,610],{"id":750},"kubbadapter-oas-1",[20,752,23],{"id":753},"features-2",[25,755,756],{},[28,757,758,759,193,762,765,766,769,770,773,774,48],{},"Keep server variables on ",[31,760,761],{},"InputMeta.servers",[31,763,764],{},"InputServer"," gains an optional ",[31,767,768],{},"variables"," field with the source URL template's variables, copied as-is next to the resolved ",[31,771,772],{},"url",", so a consumer can tell a templated server from a literal one. It is absent when the server declares no variables. (",[44,775,777],{"href":776},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4315","#4315",[20,779,56],{"id":780},"bug-fixes-17",[25,782,783],{},[28,784,785,786,185,789,792,793,796,797,800,801,804,805,48],{},"Carry vendor extensions on the AST. ",[31,787,788],{},"OperationNode",[31,790,791],{},"InputMeta"," gain an optional ",[31,794,795],{},"extensions"," bag with every ",[31,798,799],{},"x-*"," key copied as-is, set only when the source has one. The OAS adapter fills it from the operation object and the document root, so plugins can read keys like ",[31,802,803],{},"x-org-ignore"," without walking the raw document. Path-level extensions are not copied. (",[44,806,808],{"href":807},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4311","#4311",[15,810,165],{"id":811},"kubbcli-3",[20,813,56],{"id":814},"bug-fixes-18",[25,816,817],{},[28,818,819,820,823,824,826,827,830,831,834,835,48],{},"Remove ",[31,821,822],{},"KUBB_AGENT_TOKEN"," from ",[31,825,192],{},". The CLI now connects only through a paired machine, and in CI you run ",[31,828,829],{},"kubb studio snapshot"," with ",[31,832,833],{},"KUBB_TOKEN"," instead. (",[44,836,838],{"href":837},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4317","#4317",[15,840,121],{"id":841},"kubbstudio-7",[20,843,23],{"id":844},"features-3",[25,846,847],{},[28,848,849,850,853,854,857,858,861,862,864,865,48],{},"Add a separate ",[31,851,852],{},"allowReadAst"," permission (",[31,855,856],{},"--allow-read-ast",") for reading the parsed spec. ",[31,859,860],{},"allowRead"," now covers only generated files, so projects that granted ",[31,863,860],{}," before are asked once more about the spec. (",[44,866,868],{"href":867},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4320","#4320",[15,870,103],{"id":871},"contributors-12",[105,873,107],{},[105,875,876,181,878],{},[44,877,477],{"href":476},[44,879,113],{"href":112},[10,881,883],{"id":882},"v596--oct-15-2026","v5.9.6 — Oct 15, 2026",[15,885,610],{"id":886},"kubbadapter-oas-2",[20,888,56],{"id":889},"bug-fixes-19",[25,891,892],{},[28,893,894,895,898,899,95,902,48],{},"Keep ",[31,896,897],{},"allowReserved"," on parameters as ",[31,900,901],{},"ParameterNode.allowReserved",[44,903,905],{"href":904},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4304","#4304",[15,907,909],{"id":908},"kubbast","@kubb\u002Fast",[20,911,56],{"id":912},"bug-fixes-20",[25,914,915,929],{},[28,916,917,918,921,922,924,925,48],{},"Keep the JSON Schema ",[31,919,920],{},"not"," keyword as a ",[31,923,920],{}," schema node instead of dropping it. TypeScript output does not change. (",[44,926,928],{"href":927},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4308","#4308",[28,930,931,932,181,935,181,938,181,941,185,944,947,948,48],{},"Keep every ",[31,933,934],{},"Heading",[31,936,937],{},"Paragraph",[31,939,940],{},"List",[31,942,943],{},"Callout",[31,945,946],{},"Frontmatter"," in a markdown file instead of only the first of each kind. (",[44,949,951],{"href":950},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4302","#4302",[15,953,103],{"id":954},"contributors-13",[105,956,107],{},[105,958,959,181,961],{},[44,960,477],{"href":476},[44,962,113],{"href":112},[10,964,966],{"id":965},"v595--oct-15-2026","v5.9.5 — Oct 15, 2026",[15,968,121],{"id":969},"kubbstudio-8",[20,971,56],{"id":972},"bug-fixes-21",[25,974,975],{},[28,976,977,978,981,982,985,986,229,988,185,991,95,994,48],{},"Agents with ",[31,979,980],{},"--allow-read"," return the Kubb AST through ",[31,983,984],{},"readInput",", so Kubb Studio can describe your API. ",[31,987,791],{},[31,989,990],{},"servers",[31,992,993],{},"securitySchemes",[44,995,997],{"href":996},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4300","#4300",[15,999,103],{"id":1000},"contributors-14",[105,1002,107],{},[105,1004,1005],{},[44,1006,113],{"href":112},[10,1008,1010],{"id":1009},"v594--oct-14-2026","v5.9.4 — Oct 14, 2026",[15,1012,909],{"id":1013},"kubbast-1",[20,1015,56],{"id":1016},"bug-fixes-22",[25,1018,1019],{},[28,1020,819,1021,181,1024,181,1027,181,1030,1033,1034,1037,1038,185,1041,1044,1045,1048,1049,95,1052,48],{},[31,1022,1023],{},"OutputNode",[31,1025,1026],{},"createOutput",[31,1028,1029],{},"ast.factory.update",[31,1031,1032],{},"InferSchemaNode"," and the ",[31,1035,1036],{},"@kubb\u002Fast\u002Ftypes"," subpath. ",[31,1039,1040],{},"Ipv4SchemaNode",[31,1042,1043],{},"Ipv6SchemaNode"," become ",[31,1046,1047],{},"'ipv4' | 'ipv6'"," scalars. Add ",[31,1050,1051],{},"ast.refName(ref)",[44,1053,1055],{"href":1054},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4293","#4293",[15,1057,165],{"id":1058},"kubbcli-4",[20,1060,56],{"id":1061},"bug-fixes-23",[25,1063,1064],{},[28,1065,1066,1067,1070,1071,48],{},"Load the config with one loader and drop the ",[31,1068,1069],{},"unconfig"," dependency. Config discovery is unchanged. (",[44,1072,1055],{"href":1054},[15,1074,18],{"id":1075},"kubbcore-4",[20,1077,56],{"id":1078},"bug-fixes-24",[25,1080,1081],{},[28,1082,1083,181,1086,185,1089,1092,1093,1096,1097,181,1100,181,1103,185,1106,95,1109,48],{},[31,1084,1085],{},"createAdapter",[31,1087,1088],{},"defineParser",[31,1090,1091],{},"definePlugin"," accept only the definition object; use ",[31,1094,1095],{},"defineExtension",". Remove ",[31,1098,1099],{},"Storage.existsItem",[31,1101,1102],{},"FileManagerHooks",[31,1104,1105],{},"FileManager#hooks",[31,1107,1108],{},"applyConfigDefaults",[44,1110,1055],{"href":1054},[15,1112,557],{"id":1113},"kubbkit",[20,1115,56],{"id":1116},"bug-fixes-25",[25,1118,1119],{},[28,1120,1121,1124,1125,48],{},[31,1122,1123],{},"Url.toGroupedTemplateString"," uses dot access for path parameters named like reserved words. (",[44,1126,1055],{"href":1054},[15,1128,729],{"id":1129},"kubbmcp",[20,1131,56],{"id":1132},"bug-fixes-26",[25,1134,1135],{},[28,1136,1137,1140,1141,1143,1144,1147,1148,95,1150,48],{},[31,1138,1139],{},"generate"," finds the config the way ",[31,1142,176],{}," does, and ",[31,1145,1146],{},"init"," hands plugin installs to ",[31,1149,180],{},[44,1151,1055],{"href":1054},[15,1153,1155],{"id":1154},"kubbparser-md","@kubb\u002Fparser-md",[20,1157,56],{"id":1158},"bug-fixes-27",[25,1160,1161],{},[28,1162,1163,1166,1167,95,1170,48],{},[31,1164,1165],{},"parserMd().print"," takes markdown strings and reads frontmatter from ",[31,1168,1169],{},"file.meta.frontmatter",[44,1171,1055],{"href":1054},[15,1173,1175],{"id":1174},"kubbrenderer-jsx","@kubb\u002Frenderer-jsx",[20,1177,56],{"id":1178},"bug-fixes-28",[25,1180,1181],{},[28,1182,1183,1184,1187,1188,1190,1191,48],{},"Remove the ",[31,1185,1186],{},"@kubb\u002Frenderer-jsx\u002Ftypes"," subpath; import types from the root. Component props are the matching ",[31,1189,909],{}," node fields. (",[44,1192,1055],{"href":1054},[15,1194,503],{"id":503},[20,1196,56],{"id":1197},"bug-fixes-29",[25,1199,1200],{},[28,1201,1202,1203,1205,1206,1208,1209,185,1212,1215,1216,1219,1220,48],{},"Print the ",[31,1204,176],{}," summary after a build and apply the ",[31,1207,90],{}," defaults. Remove the ",[31,1210,1211],{},"unplugin-kubb\u002Ftypes",[31,1213,1214],{},"unplugin-kubb\u002FunpluginFactory"," subpaths and the ",[31,1217,1218],{},"BarrelType"," re-export. (",[44,1221,1055],{"href":1054},[15,1223,103],{"id":1224},"contributors-15",[105,1226,107],{},[105,1228,1229],{},[44,1230,113],{"href":112},[10,1232,1234],{"id":1233},"v593--oct-14-2026","v5.9.3 — Oct 14, 2026",[15,1236,165],{"id":1237},"kubbcli-5",[20,1239,56],{"id":1240},"bug-fixes-30",[25,1242,1243],{},[28,1244,1245,1247,1248,1250,1251,48],{},[31,1246,180],{}," without an id asks which extension to add from the registry, and ",[31,1249,184],{}," asks which updates to install. (",[44,1252,1254],{"href":1253},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4291","#4291",[15,1256,103],{"id":1257},"contributors-16",[105,1259,107],{},[105,1261,1262],{},[44,1263,113],{"href":112},[10,1265,1267],{"id":1266},"v592--oct-13-2026","v5.9.2 — Oct 13, 2026",[15,1269,18],{"id":1270},"kubbcore-5",[20,1272,56],{"id":1273},"bug-fixes-31",[25,1275,1276],{},[28,1277,1278,1279,1282,1283,1286,1287,48],{},"Fix ",[31,1280,1281],{},"readInstalledPackages"," throwing when ",[31,1284,1285],{},"root"," is a relative path, which made CI snapshots fail. (",[44,1288,1290],{"href":1289},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4288","#4288",[15,1292,103],{"id":1293},"contributors-17",[105,1295,107],{},[105,1297,1298],{},[44,1299,113],{"href":112},[10,1301,1303],{"id":1302},"v591--oct-13-2026","v5.9.1 — Oct 13, 2026",[15,1305,610],{"id":1306},"kubbadapter-oas-3",[20,1308,56],{"id":1309},"bug-fixes-32",[25,1311,1312],{},[28,1313,1314,1315,1318,1319,1322,1323,48],{},"Parse OpenAPI 3.2 ",[31,1316,1317],{},"query"," operations (HTTP ",[31,1320,1321],{},"QUERY",") instead of dropping them. (",[44,1324,1326],{"href":1325},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4285","#4285",[15,1328,909],{"id":1329},"kubbast-2",[20,1331,56],{"id":1332},"bug-fixes-33",[25,1334,1335],{},[28,1336,819,1337,181,1340,181,1343,1033,1346,1349,1350,1353,1354,48],{},[31,1338,1339],{},"defineNode",[31,1341,1342],{},"NodeDef",[31,1344,1345],{},"nodeDefs",[31,1347,1348],{},"*Def"," objects. ",[31,1351,1352],{},"StatusCode"," accepts any three-digit status string. (",[44,1355,1357],{"href":1356},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4278","#4278",[15,1359,165],{"id":1360},"kubbcli-6",[20,1362,56],{"id":1363},"bug-fixes-34",[25,1365,1366],{},[28,1367,1368,1370,1371,48],{},[31,1369,188],{}," takes its plugins from the Kubb registry and stops before installing when a plugin's dependencies are missing. (",[44,1372,1374],{"href":1373},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4275","#4275",[15,1376,18],{"id":1377},"kubbcore-6",[20,1379,56],{"id":1380},"bug-fixes-35",[25,1382,1383,1404,1422],{},[28,1384,1385,1386,181,1389,1392,1393,1396,1397,95,1400,48],{},"Report extension crashes as ",[31,1387,1388],{},"KUBB_PLUGIN_FAILED",[31,1390,1391],{},"KUBB_ADAPTER_FAILED"," or ",[31,1394,1395],{},"KUBB_PARSER_FAILED"," with a link to the extension's issue tracker from ",[31,1398,1399],{},"meta.issues",[44,1401,1403],{"href":1402},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4279","#4279",[28,1405,1406,1407,1410,1411,1096,1414,185,1417,95,1420,48],{},"Rename ",[31,1408,1409],{},"PluginFactoryOptions"," to ",[31,1412,1413],{},"PluginType",[31,1415,1416],{},"KubbDriver.dispatch",[31,1418,1419],{},"KubbDriver.hasHookGenerators",[44,1421,1357],{"href":1356},[28,1423,670,1424,1410,1427,1430,1431,95,1434,48],{},[31,1425,1426],{},"optionalDependencies",[31,1428,1429],{},"kubb-extension.json"," and reject an unknown ",[31,1432,1433],{},"role",[44,1435,1374],{"href":1373},[15,1437,557],{"id":1438},"kubbkit-1",[20,1440,56],{"id":1441},"bug-fixes-36",[25,1443,1444],{},[28,1445,819,1446,185,1449,95,1452,48],{},[31,1447,1448],{},"Url.toTemplateString",[31,1450,1451],{},"Url.toObject",[44,1453,1357],{"href":1356},[15,1455,121],{"id":1456},"kubbstudio-9",[20,1458,56],{"id":1459},"bug-fixes-37",[25,1461,1462,1478],{},[28,1463,1464,1465,1468,1469,1473,1474,48],{},"Config edits and ",[31,1466,1467],{},"readConfig"," cover the adapter and parsers, so Studio can edit and save their options. (",[44,1470,1472],{"href":1471},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4282","#4282","), (",[44,1475,1477],{"href":1476},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4276","#4276",[28,1479,1480,1481,1484,1485,1487,1488,48],{},"A ",[31,1482,1483],{},"null"," option value from Studio unsets the value from ",[31,1486,218],{}," for that generate. (",[44,1489,1357],{"href":1356},[15,1491,103],{"id":1492},"contributors-18",[105,1494,107],{},[105,1496,1497,181,1499],{},[44,1498,477],{"href":476},[44,1500,113],{"href":112},[10,1502,1504],{"id":1503},"v590--oct-13-2026","v5.9.0 — Oct 13, 2026",[15,1506,165],{"id":1507},"kubbcli-7",[20,1509,23],{"id":1510},"features-4",[25,1512,1513],{},[28,1514,1515,1516,1520,1521,1526,1527,1532,1533,1539],{},"The ",[44,1517,1519],{"href":1518},"\u002Fdocs\u002F5.x\u002Freference\u002Fregistry","Kubb registry"," is stable. ",[44,1522,1524],{"href":1523},"\u002Fdocs\u002F5.x\u002Freference\u002Fcommands\u002Fadd",[31,1525,180],{}," installs a reviewed plugin, adapter, or parser at the version the registry pins, ",[44,1528,1530],{"href":1529},"\u002Fdocs\u002F5.x\u002Freference\u002Fcommands\u002Fupdate",[31,1531,184],{}," moves installed extensions to that version, and ",[44,1534,1536],{"href":1535},"\u002Fdocs\u002F5.x\u002Freference\u002Fcommands\u002Flist",[31,1537,1538],{},"kubb list"," shows what is installed. Registry support landed across 5.8.1 to 5.8.4.",[15,1541,503],{"id":1542},"unplugin-kubb-1",[20,1544,56],{"id":1545},"bug-fixes-38",[25,1547,1548,1558,1571],{},[28,1549,1550,1551,1553,1554,48],{},"Generate once per build in every bundler. webpack and Rspack no longer rebuild forever in watch mode with ",[31,1552,94],{},", and Astro no longer generates twice. (",[44,1555,1557],{"href":1556},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4266","#4266",[28,1559,1560,1561,1564,1565,1568,1569,48],{},"Register the Nuxt module with the Rspack builder too, and generate only in the client build of ",[31,1562,1563],{},"nuxt build",". The module now needs ",[31,1566,1567],{},"@nuxt\u002Fkit"," 3.14 or later. (",[44,1570,1557],{"href":1556},[28,1572,1573,1574,1577,1578,1581,1582,48],{},"Fail the build when ",[31,1575,1576],{},"config"," is missing, and log ",[31,1579,1580],{},"✗ Generation failed"," when generation fails. (",[44,1583,1557],{"href":1556},[15,1585,103],{"id":1586},"contributors-19",[105,1588,107],{},[105,1590,1591],{},[44,1592,113],{"href":112},[10,1594,1596],{"id":1595},"v584--oct-13-2026","v5.8.4 — Oct 13, 2026",[15,1598,18],{"id":1599},"kubbcore-7",[20,1601,23],{"id":1602},"features-5",[25,1604,1605],{},[28,1606,1607,1608,185,1610,1612,1613,95,1616,48],{},"Registry entries can pin a GitHub release. ",[31,1609,180],{},[31,1611,184],{}," install it as ",[31,1614,1615],{},"github:\u003Cowner>\u002F\u003Crepo>#\u003Ccommit>",[44,1617,1619],{"href":1618},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4264","#4264",[15,1621,103],{"id":1622},"contributors-20",[105,1624,107],{},[105,1626,1627],{},[44,1628,113],{"href":112},[10,1630,1632],{"id":1631},"v583--oct-13-2026","v5.8.3 — Oct 13, 2026",[15,1634,18],{"id":1635},"kubbcore-8",[20,1637,23],{"id":1638},"features-6",[25,1640,1641],{},[28,1642,670,1643,185,1646,1410,1649,1651,1652,1655,1656,48],{},[31,1644,1645],{},"maintainers",[31,1647,1648],{},"dependencies",[31,1650,1429],{},". Each package now ships its overview, options page, and guides in a ",[31,1653,1654],{},"docs\u002F"," folder. (",[44,1657,1659],{"href":1658},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4260","#4260",[15,1661,103],{"id":1662},"contributors-21",[105,1664,107],{},[105,1666,1667],{},[44,1668,113],{"href":112},[10,1670,1672],{"id":1671},"v582--oct-13-2026","v5.8.2 — Oct 13, 2026",[15,1674,18],{"id":1675},"kubbcore-9",[20,1677,23],{"id":1678},"features-7",[25,1680,1681],{},[28,1682,1683,1702],{},[105,1684,670,1685,1690,1691,181,1693,271,1695,1697,1698,48],{},[44,1686,1688],{"href":1687},"\u002Fdocs\u002F5.x\u002Freference\u002Fkit\u002Fextensions",[31,1689,1095],{}," to define a plugin, an adapter, or a parser. ",[31,1692,1091],{},[31,1694,1088],{},[31,1696,1085],{}," still work but are deprecated. (",[44,1699,1701],{"href":1700},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4258","#4258",[1703,1704,1707],"pre",{"language":72,"code":1705,"class":1706},"export const pluginZod = defineExtension\u003CPluginZod>({\n  kind: 'plugin',\n  meta: { name: 'plugin-zod' },\n  setup(options, kubb) {\n    kubb.addGenerator(zodGenerator)\n    return options\n  },\n})","shiki shiki-themes github-light github-dark dark:github-dark",[31,1708,1710,1743,1744,1743,1756,1743,1767,1743,1786,1743,1797,1743,1805,1743,1810],{"class":1709},"language-ts",[1711,1712,1715,1719,1722,1726,1729,1733,1737,1740],"span",{"class":1713,"style":1714},"line","display: inline",[1711,1716,1718],{"style":1717},"color:#D73A49;--shiki-dark:#F97583","export",[1711,1720,1721],{"style":1717}," const",[1711,1723,1725],{"style":1724},"color:#005CC5;--shiki-dark:#79B8FF"," pluginZod",[1711,1727,1728],{"style":1717}," =",[1711,1730,1732],{"style":1731},"color:#6F42C1;--shiki-dark:#B392F0"," defineExtension",[1711,1734,1736],{"style":1735},"color:#24292E;--shiki-dark:#E1E4E8","\u003C",[1711,1738,1739],{"style":1731},"PluginZod",[1711,1741,1742],{"style":1735},">({","\n",[1711,1745,1746,1749,1753],{"class":1713,"style":1714},[1711,1747,1748],{"style":1735},"  kind: ",[1711,1750,1752],{"style":1751},"color:#032F62;--shiki-dark:#9ECBFF","'plugin'",[1711,1754,1755],{"style":1735},",",[1711,1757,1758,1761,1764],{"class":1713,"style":1714},[1711,1759,1760],{"style":1735},"  meta: { name: ",[1711,1762,1763],{"style":1751},"'plugin-zod'",[1711,1765,1766],{"style":1735}," },",[1711,1768,1769,1772,1775,1779,1781,1783],{"class":1713,"style":1714},[1711,1770,1771],{"style":1731},"  setup",[1711,1773,1774],{"style":1735},"(",[1711,1776,1778],{"style":1777},"color:#E36209;--shiki-dark:#FFAB70","options",[1711,1780,181],{"style":1735},[1711,1782,80],{"style":1777},[1711,1784,1785],{"style":1735},") {",[1711,1787,1788,1791,1794],{"class":1713,"style":1714},[1711,1789,1790],{"style":1735},"    kubb.",[1711,1792,1793],{"style":1731},"addGenerator",[1711,1795,1796],{"style":1735},"(zodGenerator)",[1711,1798,1799,1802],{"class":1713,"style":1714},[1711,1800,1801],{"style":1717},"    return",[1711,1803,1804],{"style":1735}," options",[1711,1806,1807],{"class":1713,"style":1714},[1711,1808,1809],{"style":1735},"  },",[1711,1811,1812],{"class":1713,"style":1714},[1711,1813,1814],{"style":1735},"})",[15,1816,103],{"id":1817},"contributors-22",[105,1819,107],{},[105,1821,1822],{},[44,1823,113],{"href":112},[10,1825,1827],{"id":1826},"v581--oct-13-2026","v5.8.1 — Oct 13, 2026",[15,1829,165],{"id":1830},"kubbcli-8",[20,1832,23],{"id":1833},"features-8",[25,1835,1836],{},[28,1837,670,1838,181,1840,271,1842,1844,1845,48],{},[31,1839,180],{},[31,1841,184],{},[31,1843,1538],{}," to install and update extensions from the Kubb registry. (",[44,1846,1848],{"href":1847},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4253","#4253",[15,1850,18],{"id":1851},"kubbcore-10",[20,1853,23],{"id":1854},"features-9",[25,1856,1857,1865],{},[28,1858,1859,1860,1862,1863,48],{},"Add the ",[31,1861,1429],{}," manifest. Studio runs installed third-party plugins that ship one. (",[44,1864,1848],{"href":1847},[28,1866,1867,1869,1870,181,1873,271,1876,1879,1880,193,1882,1884,1885,1887,1888,95,1890,48],{},[31,1868,1085],{}," takes an object with ",[31,1871,1872],{},"meta",[31,1874,1875],{},"setup",[31,1877,1878],{},"build",", like ",[31,1881,1091],{},[31,1883,1088],{}," takes ",[31,1886,1878],{}," instead of ",[31,1889,1875],{},[44,1891,1893],{"href":1892},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4249","#4249",[20,1895,56],{"id":1896},"bug-fixes-39",[25,1898,1899],{},[28,1900,1901,1902,823,1905,185,1907,1910,1911,95,1913,48],{},"Remove the options ",[31,1903,1904],{},"schema",[31,1906,1091],{},[31,1908,1909],{},"@kubb\u002Fkit\u002Foptions",", both added in 5.8.0. Type plugin options with TypeScript and apply their defaults in ",[31,1912,1875],{},[44,1914,1916],{"href":1915},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4252","#4252",[15,1918,1920],{"id":1919},"kubbplugin-barrel","@kubb\u002Fplugin-barrel",[20,1922,56],{"id":1923},"bug-fixes-40",[25,1925,1926,1936],{},[28,1927,1480,1928,1931,1932,48],{},[31,1929,1930],{},"barrel: false"," plugin that writes to the output root no longer removes the other plugins' barrels. (",[44,1933,1935],{"href":1934},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4254","#4254",[28,1937,1938,1939,1941,1942,48],{},"A plugin without ",[31,1940,658],{}," no longer takes over the other plugins' barrels. (",[44,1943,1945],{"href":1944},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4255","#4255",[15,1947,103],{"id":1948},"contributors-23",[105,1950,107],{},[105,1952,1953],{},[44,1954,113],{"href":112},[10,1956,1958],{"id":1957},"v580--oct-12-2026","v5.8.0 — Oct 12, 2026",[15,1960,18],{"id":1961},"kubbcore-11",[20,1963,23],{"id":1964},"features-10",[25,1966,1967],{},[28,1968,1969,1970,1410,1972,1974,1975,1977,1978,181,1982,48],{},"Add an options ",[31,1971,1904],{},[31,1973,1091],{},", and shared Zod schemas in ",[31,1976,1909],{},". 5.8.1 removed both. (",[44,1979,1981],{"href":1980},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4244","#4244",[44,1983,1985],{"href":1984},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4245","#4245",[20,1987,56],{"id":1988},"bug-fixes-41",[25,1990,1991],{},[28,1992,1993,1994,1997,1998,95,2001,48],{},"Composables such as ",[31,1995,1996],{},"setResolver()"," work in plugins that a CommonJS config loads, instead of failing with ",[31,1999,2000],{},"KUBB_NO_CONTEXT",[44,2002,2004],{"href":2003},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4246","#4246",[15,2006,103],{"id":2007},"contributors-24",[105,2009,107],{},[105,2011,2012],{},[44,2013,113],{"href":112},[10,2015,2017],{"id":2016},"v570--oct-12-2026","v5.7.0 — Oct 12, 2026",[15,2019,18],{"id":2020},"kubbcore-12",[20,2022,23],{"id":2023},"features-11",[25,2025,2026,2061],{},[28,2027,2028,185,2030,2032,2033,181,2035,271,2037,2040,2041,1392,2044,2046,2047,181,2050,2053,2054,95,2057,48],{},[31,2029,1091],{},[31,2031,1088],{}," accept an object with ",[31,2034,1872],{},[31,2036,1648],{},[31,2038,2039],{},"setup(options, kubb)",". The factory form is deprecated. A mismatch in ",[31,2042,2043],{},"meta.compatibility",[31,2045,1648],{}," fails the run with ",[31,2048,2049],{},"KUBB_INCOMPATIBLE_EXTENSION",[31,2051,2052],{},"KUBB_MISSING_DEPENDENCY",", or ",[31,2055,2056],{},"KUBB_INCOMPATIBLE_DEPENDENCY",[44,2058,2060],{"href":2059},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4241","#4241",[28,2062,2063,2064,2067,2068,181,2071,271,2073,2076,2077,2080,2081,48],{},"Add composables to ",[31,2065,2066],{},"kubb\u002Fkit",", such as ",[31,2069,2070],{},"addGenerator()",[31,2072,1996],{},[31,2074,2075],{},"useOptions()",", so a plugin can call setup helpers without passing ",[31,2078,2079],{},"ctx"," around. (",[44,2082,2084],{"href":2083},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4240","#4240",[15,2086,103],{"id":2087},"contributors-25",[105,2089,107],{},[105,2091,2092],{},[44,2093,113],{"href":112},[10,2095,2097],{"id":2096},"v563--oct-12-2026","v5.6.3 — Oct 12, 2026",[15,2099,18],{"id":2100},"kubbcore-13",[20,2102,56],{"id":2103},"bug-fixes-42",[25,2105,2106],{},[28,2107,670,2108,185,2111,2114,2115,726,2118,2121,2122,48],{},[31,2109,2110],{},"ctx.requirePlugin(name)",[31,2112,2113],{},"assertPluginOption()"," for plugin setup checks, and ",[31,2116,2117],{},"createMockedSetupContext()",[31,2119,2120],{},"@kubb\u002Fkit\u002Ftesting"," for unit tests. (",[44,2123,2125],{"href":2124},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4238","#4238",[15,2127,729],{"id":2128},"kubbmcp-1",[20,2130,56],{"id":2131},"bug-fixes-43",[25,2133,2134],{},[28,2135,2136,2137,48],{},"Validate MCP tool arguments with Zod Mini instead of valibot. Invalid arguments now return Zod's error messages. (",[44,2138,2140],{"href":2139},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4234","#4234",[15,2142,121],{"id":2143},"kubbstudio-10",[20,2145,56],{"id":2146},"bug-fixes-44",[25,2148,2149],{},[28,2150,2151,2152,2154,2155,48],{},"Harden the ",[31,2153,192],{}," agent's config edits and sandbox input, and reload JavaScript configs on every generation. (",[44,2156,2158],{"href":2157},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4233","#4233",[15,2160,103],{"id":2161},"contributors-26",[105,2163,107],{},[105,2165,2166],{},[44,2167,113],{"href":112},[10,2169,2171],{"id":2170},"v562--oct-11-2026","v5.6.2 — Oct 11, 2026",[15,2173,121],{"id":2174},"kubbstudio-11",[20,2176,56],{"id":2177},"bug-fixes-45",[25,2179,2180],{},[28,2181,2182,2184,2185,2187,2188,2191,2192,181,2196,48],{},[31,2183,829],{}," works when ",[31,2186,218],{}," does not set ",[31,2189,2190],{},"storage",", and no longer leaves a temp folder behind. (",[44,2193,2195],{"href":2194},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4231","#4231",[44,2197,2199],{"href":2198},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4229","#4229",[15,2201,103],{"id":2202},"contributors-27",[105,2204,107],{},[105,2206,2207],{},[44,2208,113],{"href":112},[10,2210,2212],{"id":2211},"v561--oct-11-2026","v5.6.1 — Oct 11, 2026",[15,2214,165],{"id":2215},"kubbcli-9",[20,2217,56],{"id":2218},"bug-fixes-46",[25,2220,2221],{},[28,2222,2223,2224,2227,2228,181,2232,48],{},"Rebuild once per editor save in ",[31,2225,2226],{},"kubb generate --watch",". An atomic save (write a temp file, then rename it) could trigger two rebuilds, because the 100 ms debounce matched chokidar's 100 ms atomic-save window. The debounce is now 250 ms. (",[44,2229,2231],{"href":2230},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4227","#4227",[44,2233,2235],{"href":2234},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F4ba64cf431201531556e41efd7b7ca2ea386d1a9",[31,2236,2237],{},"4ba64cf",[15,2239,18],{"id":2240},"kubbcore-14",[20,2242,56],{"id":2243},"bug-fixes-47",[25,2245,2246],{},[28,2247,670,2248,185,2251,2254,2255,2258,2259,2262,2263,185,2266,2269,2270,181,2274,48],{},[31,2249,2250],{},"kubbStorage",[31,2252,2253],{},"resolveKubbDir"," for the files Kubb keeps for itself under ",[31,2256,2257],{},"~\u002F.kubb"," (or ",[31,2260,2261],{},"KUBB_HOME","). The ",[31,2264,2265],{},"file",[31,2267,2268],{},"html"," reporters write through it. (",[44,2271,2273],{"href":2272},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4225","#4225",[44,2275,2277],{"href":2276},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F30f9f4d1bd4bf190564d54b953e8b6e27a558c3a",[31,2278,2279],{},"30f9f4d",[15,2281,121],{"id":2282},"kubbstudio-12",[20,2284,56],{"id":2285},"bug-fixes-48",[25,2287,2288],{},[28,2289,2290,2291,2293,2294,1033,2297,2300,2301,181,2303,48],{},"Connect to Kubb Studio over one WebSocket, and publish CI snapshots in one request. Needs a Kubb Studio release that accepts Kubb 5.6.1 agents. ",[31,2292,829],{}," drops ",[31,2295,2296],{},"--timeout",[31,2298,2299],{},"--allow-*"," flags. (",[44,2302,2273],{"href":2272},[44,2304,2305],{"href":2276},[31,2306,2279],{},[15,2308,103],{"id":2309},"contributors-28",[105,2311,107],{},[105,2313,2314],{},[44,2315,113],{"href":112},[10,2317,2319],{"id":2318},"v560--oct-10-2026","v5.6.0 — Oct 10, 2026",[15,2321,610],{"id":2322},"kubbadapter-oas-4",[20,2324,56],{"id":2325},"bug-fixes-49",[25,2327,2328],{},[28,2329,2330,2331,2333,2334,181,2338,48],{},"Internal cleanup of ",[31,2332,610],{}," with no change to generated output. (",[44,2335,2337],{"href":2336},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4216","#4216",[44,2339,2341],{"href":2340},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F8708135eb00a2b7d17c29a17b4c2cc89ea6c4da7",[31,2342,2343],{},"8708135",[15,2345,909],{"id":2346},"kubbast-3",[20,2348,56],{"id":2349},"bug-fixes-50",[25,2351,2352,2380,2395],{},[28,2353,2354,2355,2358,2359,2361,2362,2365,2366,2369,2370,181,2374,48],{},"Type a ",[31,2356,2357],{},"format: 'date-time'"," schema as a plain string node in ",[31,2360,1032],{}," when ",[31,2363,2364],{},"dateType"," is ",[31,2367,2368],{},"false",", matching what the adapter produces. (",[44,2371,2373],{"href":2372},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4217","#4217",[44,2375,2377],{"href":2376},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F396dde2496ef1504fdceb32b88f9135140a27d6d",[31,2378,2379],{},"396dde2",[28,2381,2330,2382,2384,2385,181,2389,48],{},[31,2383,909],{}," with no change in behavior. (",[44,2386,2388],{"href":2387},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4204","#4204",[44,2390,2392],{"href":2391},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002Fb87f7e42e43ddb296ce4fb504ddcf422696f57c2",[31,2393,2394],{},"b87f7e4",[28,2396,2397,2408],{},[105,2398,2399,2400,2403,2404,2407],{},"Visit schemas inside a tuple's ",[31,2401,2402],{},"rest"," and inside ",[31,2405,2406],{},"patternProperties",", so refs there are collected, transformed by macros, and imported in generated files.",[25,2409,2410,2431],{},[28,2411,2412,181,2415,185,2418,2421,2422,185,2424,2426,2427,2430],{},[31,2413,2414],{},"transform",[31,2416,2417],{},"collect",[31,2419,2420],{},"collectImportedRefNames"," now reach ",[31,2423,2402],{},[31,2425,2406],{}," on a ",[31,2428,2429],{},"SchemaNode",".",[28,2432,2433,2436,2437,181,2440,185,2443,2445,2446,181,2450,48],{},[31,2434,2435],{},"createInput()"," gives every node its own ",[31,2438,2439],{},"schemas",[31,2441,2442],{},"operations",[31,2444,1872],{}," objects instead of sharing one default. (",[44,2447,2449],{"href":2448},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4188","#4188",[44,2451,2453],{"href":2452},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F62485c55cd6b6ce5e66f97449d5baeb15f99cc48",[31,2454,2455],{},"62485c5",[15,2457,165],{"id":2458},"kubbcli-10",[20,2460,56],{"id":2461},"bug-fixes-51",[25,2463,2464,2490,2503,2525],{},[28,2465,2466,2467,181,2470,185,2473,2476,2477,2479,2480,181,2484,48],{},"Run ",[31,2468,2469],{},"output.format",[31,2471,2472],{},"output.lint",[31,2474,2475],{},"output.postGenerate"," through ",[31,2478,18],{}," instead of the CLI's own copies, so every host runs the same passes. (",[44,2481,2483],{"href":2482},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4215","#4215",[44,2485,2487],{"href":2486},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002Fecf2b25c9b254cdc2b46decd725fdb7c4467dbe7",[31,2488,2489],{},"ecf2b25",[28,2491,2492,2493,181,2497,48],{},"Reorganize the CLI internals: config discovery moves to its own module, the logger helpers fold into the loggers that use them, and every command loads its runner the same way. Every command, flag and printed line stays the same. (",[44,2494,2496],{"href":2495},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4211","#4211",[44,2498,2500],{"href":2499},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002Fa2c9cd7267620c60b5855d16e6e4374a18611522",[31,2501,2502],{},"a2c9cd7",[28,2504,2505,2507,2508,1392,2511,2514,2515,181,2519,48],{},[31,2506,192],{}," accepts a flag value after a space, such as ",[31,2509,2510],{},"kubb studio --open --url http:\u002F\u002Flocalhost:3000",[31,2512,2513],{},"--config .\u002Fkubb.config.ts",", instead of failing with \"Command not found\". (",[44,2516,2518],{"href":2517},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4221","#4221",[44,2520,2522],{"href":2521},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F8dc93fc76e63f8c49172cdc04568cb00695c5d33",[31,2523,2524],{},"8dc93fc",[28,2526,2527,2528,2530,2531,2533,2534,2537,2538,181,2542,48],{},"Keep stdout clean for the MCP stdio transport: the telemetry notice and the ",[31,2529,721],{}," startup banner print on stderr, so the JSON-RPC stream no longer starts with a stray line. ",[31,2532,729],{}," also declares ",[31,2535,2536],{},"jiti"," as a dependency instead of bundling its own copy. (",[44,2539,2541],{"href":2540},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4189","#4189",[44,2543,2545],{"href":2544},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F10c1f3b6de887e2cc9deedd8d2d25c596dddef92",[31,2546,2547],{},"10c1f3b",[15,2549,18],{"id":2550},"kubbcore-15",[20,2552,23],{"id":2553},"features-12",[25,2555,2556],{},[28,2557,2558,2570],{},[105,2559,2466,2560,181,2562,185,2564,823,2566,2569],{},[31,2561,2469],{},[31,2563,2472],{},[31,2565,2475],{},[31,2567,2568],{},"Kubb.generate()"," by default, so every host gets the same passes.",[25,2571,2572,2602,2614],{},[28,2573,2574,2575,185,2578,2581,2582,2584,2585,2588,2589,2591,2592,181,2595,185,2598,2601],{},"Adds ",[31,2576,2577],{},"runOutputPasses",[31,2579,2580],{},"runHook",", the one implementation of the format, lint and post-generate steps. ",[31,2583,2580],{}," spawns the command with ",[31,2586,2587],{},"node:child_process",", in the config ",[31,2590,1285],{},", and emits ",[31,2593,2594],{},"kubb:hook:start",[31,2596,2597],{},"kubb:hook:line",[31,2599,2600],{},"kubb:hook:end"," itself.",[28,2603,2604,2607,2608,185,2611,2430],{},[31,2605,2606],{},"generate({ processOutput })"," still replaces the passes when a host needs to; its context now also carries ",[31,2609,2610],{},"hooks",[31,2612,2613],{},"signal",[28,2615,2616,185,2618,2620,2621,181,2623,185,2625,2627,2628,181,2632,48],{},[31,2617,503],{},[31,2619,721],{}," start honoring ",[31,2622,2469],{},[31,2624,2472],{},[31,2626,2475],{},", which they ignored before. (",[44,2629,2631],{"href":2630},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4196","#4196",[44,2633,2635],{"href":2634},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F50617ddbe0c5a1b0ae78ffab3b8efb0a90bd5295",[31,2636,2637],{},"50617dd",[20,2639,56],{"id":2640},"bug-fixes-52",[25,2642,2643,2656,2698,2711,2724],{},[28,2644,2645,2646,181,2650,48],{},"Import types from the modules that define them instead of internal re-export barrels. The public exports are unchanged. (",[44,2647,2649],{"href":2648},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4222","#4222",[44,2651,2653],{"href":2652},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F2667074a89d1753e5fb8a63643de6eb0cc1874b0",[31,2654,2655],{},"2667074",[28,2657,2658,2674],{},[105,2659,2466,2660,181,2662,185,2664,2666,2667,2670,2671,2430],{},[31,2661,2469],{},[31,2663,2472],{},[31,2665,2475],{}," commands through ",[31,2668,2669],{},"tinyexec",", which resolves Windows command shims and the project's ",[31,2672,2673],{},"node_modules\u002F.bin",[105,2675,2676,2677,2680,2681,2683,2684,2687,2688,181,2692,48],{},"Formatter and linter detection for ",[31,2678,2679],{},"'auto'"," also finds a tool installed only in ",[31,2682,2673],{}," under ",[31,2685,2686],{},"config.root",", the folder the tool then runs from. (",[44,2689,2691],{"href":2690},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4218","#4218",[44,2693,2695],{"href":2694},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F0fb79d56b52c32d621875857135877b26b001ab0",[31,2696,2697],{},"0fb79d5",[28,2699,2700,2701,181,2705,48],{},"Fold single-use helpers and duplicated types in the core driver, resolver, storage and diagnostics. Generated output and the plugin API do not change. (",[44,2702,2704],{"href":2703},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4203","#4203",[44,2706,2708],{"href":2707},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002Fd1b5a6a717fde727c0a9c0bfb3ab72aa8e60e844",[31,2709,2710],{},"d1b5a6a",[28,2712,2713,2714,181,2718,48],{},"Keep a failing hook listener's error message to the hook name. The message no longer serializes the hook arguments, which could be a whole config or AST subtree. (",[44,2715,2717],{"href":2716},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4193","#4193",[44,2719,2721],{"href":2720},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002Fee09318741f86c00512f3c862e9d0e05aadd6f95",[31,2722,2723],{},"ee09318",[28,2725,2726,2727,2730,2731,2734,2735,2738,2739,181,2743,48],{},"Correct doc comments so they match what the code does: ",[31,2728,2729],{},"group.name"," keeps the first path segment as written for ",[31,2732,2733],{},"path"," groups, and the ",[31,2736,2737],{},"defaultBanner"," example shows the banner Kubb writes. (",[44,2740,2742],{"href":2741},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4186","#4186",[44,2744,2746],{"href":2745},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F425998fb04946afc1493f22ee859eadb1f3b8d8c",[31,2747,2748],{},"425998f",[15,2750,557],{"id":2751},"kubbkit-2",[20,2753,56],{"id":2754},"bug-fixes-53",[25,2756,2757],{},[28,2758,2759,2761,2762,2765,2766,677,2768,2771,2772,2774,2775,2777,2778,181,2782,48],{},[31,2760,557],{}," now exports the ",[31,2763,2764],{},"Diagnostic"," type. ",[31,2767,909],{},[31,2769,2770],{},"collectSchemaRefs",", the set of schema names a node references. ",[31,2773,610],{}," depends on ",[31,2776,557],{}," only, with no change to generated output. (",[44,2779,2781],{"href":2780},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4210","#4210",[44,2783,2785],{"href":2784},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F76d1ec8048ba3d8decaf07d354d7132d7cbc8790",[31,2786,2787],{},"76d1ec8",[15,2789,729],{"id":2790},"kubbmcp-2",[20,2792,56],{"id":2793},"bug-fixes-54",[25,2795,2796],{},[28,2797,1515,2798,2801,2802,181,2806,48],{},[31,2799,2800],{},"validate"," tool no longer prints the unreachable 'install @kubb\u002Fadapter-oas' hint. (",[44,2803,2805],{"href":2804},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4197","#4197",[44,2807,2809],{"href":2808},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F465e2205fd1d90b1f3bb40f11a2030f0cb0f0042",[31,2810,2811],{},"465e220",[15,2813,52],{"id":2814},"kubbparser-ts-1",[20,2816,56],{"id":2817},"bug-fixes-55",[25,2819,2820,2839],{},[28,2821,2822,2823,1392,2825,2828,2829,181,2833,48],{},"Load TypeScript only on the first ",[31,2824,68],{},[31,2826,2827],{},"copy"," call, so a run that only parses files starts faster. (",[44,2830,2832],{"href":2831},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4205","#4205",[44,2834,2836],{"href":2835},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F12428cc4898029beda20d35fb8f34fcf402d66e4",[31,2837,2838],{},"12428cc",[28,2840,2841,2842,2845,2846,181,2850,48],{},"Resolve a relative import path from the importing file's directory instead of dropping the first ",[31,2843,2844],{},"..\u002F",", which produced a wrong path when the target sat outside that directory. (",[44,2847,2849],{"href":2848},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4190","#4190",[44,2851,2853],{"href":2852},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F2dbb0cdc3611ef0449979f9195dfe792900d068d",[31,2854,2855],{},"2dbb0cd",[15,2857,1920],{"id":2858},"kubbplugin-barrel-1",[20,2860,56],{"id":2861},"bug-fixes-56",[25,2863,2864],{},[28,2865,1515,2866,2868,2869,2871,2872,2875,2876,2878,2879,181,2883,48],{},[31,2867,18],{}," peer dependency warning is gone. A plugin ",[31,2870,658],{}," that resolves outside ",[31,2873,2874],{},"config.output.path"," is now reported as a ",[31,2877,386],{}," diagnostic. Generated barrels are unchanged. (",[44,2880,2882],{"href":2881},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4202","#4202",[44,2884,2886],{"href":2885},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002Fe87217657f9bd7c2ac96ff4cf65354a1307ab8f0",[31,2887,2888],{},"e872176",[15,2890,1175],{"id":2891},"kubbrenderer-jsx-1",[20,2893,56],{"id":2894},"bug-fixes-57",[25,2896,2897,2918],{},[28,2898,2899,2900,2903,2904,2907,2908,181,2912,48],{},"Type JSX children as an array instead of any iterable, which the renderer never walked, so a ",[31,2901,2902],{},"Set"," or generator passed as children is now a type error instead of silently rendering nothing. The element type also carries its ",[31,2905,2906],{},"$typeof"," brand, and the renderer only walks elements the Kubb JSX runtime created. (",[44,2909,2911],{"href":2910},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4192","#4192",[44,2913,2915],{"href":2914},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F068f4a9ec2f193b4f29f8492d741819bb75155b0",[31,2916,2917],{},"068f4a9",[28,2919,2920,2921,2924,2925,181,2927,48],{},"Internal rewrite of the JSX renderer with no change to the rendered ",[31,2922,2923],{},"FileNode"," output. (",[44,2926,2882],{"href":2881},[44,2928,2929],{"href":2885},[31,2930,2888],{},[15,2932,121],{"id":2933},"kubbstudio-13",[20,2935,23],{"id":2936},"features-13",[25,2938,2939],{},[28,2940,2941,2942,2944,2945,2947,2948,181,2952,48],{},"Studio runs a generation through ",[31,2943,18],{},", so the format, lint, and ",[31,2946,2475],{}," passes run there too. (",[44,2949,2951],{"href":2950},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4214","#4214",[44,2953,2955],{"href":2954},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F56a24f23d7acf8bb13ee279d9f7f0f59e812b1da",[31,2956,2957],{},"56a24f2",[20,2959,56],{"id":2960},"bug-fixes-58",[25,2962,2963],{},[28,2964,2330,2965,2967,2968,181,2972,181,2976,48],{},[31,2966,121],{},", including the agent connection and the snapshot upload. (",[44,2969,2971],{"href":2970},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4208","#4208",[44,2973,2975],{"href":2974},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4212","#4212",[44,2977,2979],{"href":2978},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4191","#4191",[15,2981,503],{"id":2982},"unplugin-kubb-2",[20,2984,56],{"id":2985},"bug-fixes-59",[25,2987,2988],{},[28,2989,2990,2992,2993,2995,2996,2998,2999,181,3003,48],{},[31,2991,503],{}," declares ",[31,2994,18],{}," as a dependency only, so the peer dependency warning is gone. ",[31,2997,1155],{}," has no behavior change. (",[44,3000,3002],{"href":3001},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4201","#4201",[44,3004,3006],{"href":3005},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F719f6bdbb927ce82c7bf4bb791d659de4ee2cecd",[31,3007,3008],{},"719f6bd",[15,3010,103],{"id":3011},"contributors-29",[105,3013,107],{},[105,3015,3016],{},[44,3017,113],{"href":112},[10,3019,3021],{"id":3020},"v556--oct-8-2026","v5.5.6 — Oct 8, 2026",[15,3023,610],{"id":3024},"kubbadapter-oas-5",[20,3026,56],{"id":3027},"bug-fixes-60",[25,3029,3030,3069],{},[28,3031,3032,3033,181,3036,181,3039,181,3042,181,3045,181,3048,3051,3052,3055,3056,95,3059,181,3063,48],{},"Preserve metadata (",[31,3034,3035],{},"deprecated",[31,3037,3038],{},"nullable",[31,3040,3041],{},"readOnly",[31,3043,3044],{},"writeOnly",[31,3046,3047],{},"default",[31,3049,3050],{},"examples",") on schemas without explicit ",[31,3053,3054],{},"type"," when falling back to ",[31,3057,3058],{},"emptySchemaType",[44,3060,3062],{"href":3061},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4179","#4179",[44,3064,3066],{"href":3065},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F66a20f101ad1efaac2e53ab07ca47b4e67158526",[31,3067,3068],{},"66a20f1",[28,3070,3071,3072,185,3075,3078,3079,181,3083,48],{},"Resolve required-only ",[31,3073,3074],{},"oneOf",[31,3076,3077],{},"anyOf"," union branches against sibling schemas and properties. (",[44,3080,3082],{"href":3081},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4180","#4180",[44,3084,3086],{"href":3085},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F7e2c4c2d38958d6fcddc5ce9c997adf9b6241b97",[31,3087,3088],{},"7e2c4c2",[15,3090,165],{"id":3091},"kubbcli-11",[20,3093,56],{"id":3094},"bug-fixes-61",[25,3096,3097],{},[28,3098,3099,3100,3102,3103,95,3106,181,3110,48],{},"Report ",[31,3101,80],{}," as the telemetry service name instead of ",[31,3104,3105],{},"kubb-core",[44,3107,3109],{"href":3108},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4177","#4177",[44,3111,3113],{"href":3112},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F04e7b501cf27bf1fb56b53e8f5e72bf77ebee250",[31,3114,3115],{},"04e7b50",[15,3117,103],{"id":3118},"contributors-30",[105,3120,107],{},[105,3122,3123,181,3125],{},[44,3124,113],{"href":112},[44,3126,3128],{"href":3127},"https:\u002F\u002Fgithub.com\u002Fxeoneux","@xeoneux",[10,3130,3132],{"id":3131},"v555--oct-7-2026","v5.5.5 — Oct 7, 2026",[15,3134,610],{"id":3135},"kubbadapter-oas-6",[20,3137,56],{"id":3138},"bug-fixes-62",[25,3140,3141],{},[28,3142,3143,3146],{},[105,3144,3145],{},"Fix a batch of small bugs:",[25,3147,3148,3177,3185,3207,3220],{},[28,3149,3150,3152,3153,3156,3157,3160,3161,3164,3165,3168,3169,3172,3173,3176],{},[31,3151,610],{},": resolve local ",[31,3154,3155],{},"$ref"," pointers per RFC 6901, so ",[31,3158,3159],{},"#\u002Fpaths\u002F~1pets\u002Fget"," and keys with ",[31,3162,3163],{},"~"," or an encoded ",[31,3166,3167],{},"\u002F"," resolve. On Windows, an absolute input such as ",[31,3170,3171],{},"C:\\specs\\api.yaml"," no longer counts as a URL, so a missing file now reports ",[31,3174,3175],{},"KUBB_INPUT_NOT_FOUND"," instead of failing later.",[28,3178,3179,3181,3182,3184],{},[31,3180,729],{},": reload ",[31,3183,218],{}," on every tool call. The server cached the first load, so edits only showed up after a restart.",[28,3186,3187,3189,3190,185,3193,3196,3197,3199,3200,3203,3204,2430],{},[31,3188,165],{},": ",[31,3191,3192],{},"CI=false",[31,3194,3195],{},"CI=0"," no longer count as running in CI, and ",[31,3198,188],{}," detects Bun from ",[31,3201,3202],{},"bun.lock"," as well as ",[31,3205,3206],{},"bun.lockb",[28,3208,3209,3211,3212,3215,3216,3219],{},[31,3210,121],{},": a failing format, lint or ",[31,3213,3214],{},"postGenerate"," command reports one ",[31,3217,3218],{},"kubb:error"," instead of two.",[28,3221,3222,3224,3225,3227,3228,3231,3232,3234,3235,181,3239,48],{},[31,3223,1175],{},": fix the ",[31,3226,1872],{}," prop type on ",[31,3229,3230],{},"\u003Ckubb-file>",", which referenced ",[31,3233,2923],{}," without importing it. (",[44,3236,3238],{"href":3237},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4175","#4175",[44,3240,3242],{"href":3241},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F11cd291dec1fc7f72e922db82d0d1bb16df4fd61",[31,3243,3244],{},"11cd291",[15,3246,103],{"id":3247},"contributors-31",[105,3249,107],{},[105,3251,3252],{},[44,3253,113],{"href":112},[10,3255,3257],{"id":3256},"v554--oct-7-2026","v5.5.4 — Oct 7, 2026",[15,3259,610],{"id":3260},"kubbadapter-oas-7",[20,3262,56],{"id":3263},"bug-fixes-63",[25,3265,3266],{},[28,3267,3268,3269,3272,3273,3275,3276,3279,3280,181,3284,48],{},"Report spec validation problems as ",[31,3270,3271],{},"KUBB_INVALID_SPEC"," warnings during ",[31,3274,176],{},". The adapter validated the spec by default but discarded the result, so an invalid spec generated silently. Each problem is now listed and generation continues. Set ",[31,3277,3278],{},"validate: false"," on the adapter to skip the check, which on a large spec saves about 20% of the run. (",[44,3281,3283],{"href":3282},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4172","#4172",[44,3285,3287],{"href":3286},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F75b2c475a2928c5f6571cd9e1c5ab23efbf80010",[31,3288,3289],{},"75b2c47",[15,3291,165],{"id":3292},"kubbcli-12",[20,3294,56],{"id":3295},"bug-fixes-64",[25,3297,3298,3323],{},[28,3299,3300,3301,3303,3304,3306,3307,65,3310,3312,3313,181,3317,48],{},"Print output and errors for a ",[31,3302,218],{}," that does not use ",[31,3305,90],{},". Such a config has no ",[31,3308,3309],{},"reporters",[31,3311,176],{}," attached no logger and exited with code 1 without saying why. It now falls back to the built-in reporters. (",[44,3314,3316],{"href":3315},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4170","#4170",[44,3318,3320],{"href":3319},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002Fdd2a72899e1fe18110fe01b930f2f858eb324c07",[31,3321,3322],{},"dd2a728",[28,3324,3325,3326,3329,3330,3332,3333,3336,3337,181,3341,48],{},"Print one ",[31,3327,3328],{},"✗"," before an error instead of two. The error handler added its own ",[31,3331,3328],{},", and the spinner it stopped added another, so a failing plugin setup printed ",[31,3334,3335],{},"✗ ✗ No client plugin is registered."," (",[44,3338,3340],{"href":3339},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4173","#4173",[44,3342,3344],{"href":3343},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F464523a88194b2734589aaecc423028438e052b6",[31,3345,3346],{},"464523a",[15,3348,52],{"id":3349},"kubbparser-ts-2",[20,3351,56],{"id":3352},"bug-fixes-65",[25,3354,3355],{},[28,3356,3357,3358,830,3361,1887,3363,3366,3367,185,3370,3373,3374,3376,3377,181,3381,48],{},"Load ",[31,3359,3360],{},"typescript",[31,3362,541],{},[31,3364,3365],{},"import",". When ESM code imports a CommonJS package, Node keeps a second copy of its source, and for TypeScript that copy is about 9 MB. With ",[31,3368,3369],{},"plugin-ts",[31,3371,3372],{},"plugin-zod"," loaded, heap drops by about 9 MB and RSS by about 25 MB, which matters most for the long-running ",[31,3375,192],{}," agent. (",[44,3378,3380],{"href":3379},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4169","#4169",[44,3382,3384],{"href":3383},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F34b95e89840b327ad24f9448043a02da0b3b8950",[31,3385,3386],{},"34b95e8",[15,3388,121],{"id":3389},"kubbstudio-14",[20,3391,56],{"id":3392},"bug-fixes-66",[25,3394,3395],{},[28,3396,3397,3398,3400,3401,185,3404,3407,3408,3410,3411,3414,3415,181,3417,48],{},"Lower the memory the ",[31,3399,192],{}," agent uses while idle. ",[31,3402,3403],{},"tsdown",[31,3405,3406],{},"magicast"," now load only when Studio packs a snapshot or reads or edits ",[31,3409,218],{},". The agent also drops its reference to a finished generation's output, which held every generated file in memory when ",[31,3412,3413],{},"allowWrite"," was off. (",[44,3416,3380],{"href":3379},[44,3418,3420],{"href":3419},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002Fc705ba7931f7562ceff80a6cf5d2509afba386f1",[31,3421,3422],{},"c705ba7",[15,3424,103],{"id":3425},"contributors-32",[105,3427,107],{},[105,3429,3430],{},[44,3431,113],{"href":112},[10,3433,3435],{"id":3434},"v553--oct-6-2026","v5.5.3 — Oct 6, 2026",[15,3437,165],{"id":3438},"kubbcli-13",[20,3440,56],{"id":3441},"bug-fixes-67",[25,3443,3444,3453],{},[28,3445,3446,3447,48],{},"Restore the telemetry source header so CLI usage events reach the existing ingestion source. (",[44,3448,3450],{"href":3449},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002Facff58884dedafcfd41e25ef6294005b2f12b192",[31,3451,3452],{},"acff588",[28,3454,3455,3456,3459,3460,3463,3464,95,3467,181,3471,48],{},"Make plugin usage easier to filter in telemetry. Send plugin names in ",[31,3457,3458],{},"kubb.plugins"," and boolean usage flags in ",[31,3461,3462],{},"kubb.plugin.\u003Cname>",". Preserve detailed options under ",[31,3465,3466],{},"kubb.plugin_options",[44,3468,3470],{"href":3469},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4167","#4167",[44,3472,3474],{"href":3473},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F4766cf9802306b01202c48cc92896baa820c4b04",[31,3475,3476],{},"4766cf9",[15,3478,103],{"id":3479},"contributors-33",[105,3481,107],{},[105,3483,3484],{},[44,3485,113],{"href":112},[10,3487,3489],{"id":3488},"v552--oct-5-2026","v5.5.2 — Oct 5, 2026",[15,3491,121],{"id":3492},"kubbstudio-15",[20,3494,56],{"id":3495},"bug-fixes-68",[25,3497,3498],{},[28,3499,3500,3501,3503,3504,3507,3508,3511,3512,181,3516,48],{},"Keep plugin and adapter options from ",[31,3502,218],{}," that can't be sent as JSON, such as ",[31,3505,3506],{},"macros",", resolver functions, and ",[31,3509,3510],{},"RegExp"," patterns, when merging Studio's options for a generate. Before, Studio's lossy copy replaced them, so custom macros stopped running. (",[44,3513,3515],{"href":3514},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4162","#4162",[44,3517,3519],{"href":3518},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002Fd798e0a39712fb104254322cf55c61c7293797ff",[31,3520,3521],{},"d798e0a",[15,3523,103],{"id":3524},"contributors-34",[105,3526,107],{},[105,3528,3529],{},[44,3530,113],{"href":112},[10,3532,3534],{"id":3533},"v551--oct-5-2026","v5.5.1 — Oct 5, 2026",[15,3536,18],{"id":3537},"kubbcore-16",[20,3539,56],{"id":3540},"bug-fixes-69",[25,3542,3543],{},[28,3544,3545,3546,181,3550,48],{},"Point diagnostic documentation links to the matching sections in the consolidated diagnostic reference. (",[44,3547,3549],{"href":3548},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4156","#4156",[44,3551,3553],{"href":3552},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002Fd3711adc4ac817897a22c6d13f8c5fbc2ff8e7fa",[31,3554,3555],{},"d3711ad",[15,3557,103],{"id":3558},"contributors-35",[105,3560,107],{},[105,3562,3563],{},[44,3564,113],{"href":112},[10,3566,3568],{"id":3567},"v550--oct-5-2026","v5.5.0 — Oct 5, 2026",[15,3570,610],{"id":3571},"kubbadapter-oas-8",[20,3573,23],{"id":3574},"features-14",[25,3576,3577],{},[28,3578,3579,3580,3167,3582,3584,3585,3588,3589,830,3592,185,3595,95,3598,181,3602,48],{},"Automatically recognize OpenAPI 3.1 ",[31,3581,3074],{},[31,3583,3077],{}," const unions as named enums when their members have distinct, non-empty titles and distinct string or number values. Member titles and descriptions are retained alongside their original wire values, without an additional adapter option. Recognition runs after Kubb's existing upgrade to OpenAPI 3.1. Ordinary enum unions and incomplete, ambiguous or additionally constrained unions retain their existing representation. Recognition can change generated enum exports, such as a literal-union ",[31,3586,3587],{},"Status"," type becoming an enum-backed ",[31,3590,3591],{},"StatusKey",[31,3593,3594],{},"@kubb\u002Fplugin-ts",[31,3596,3597],{},"enum.type: 'asConst'",[44,3599,3601],{"href":3600},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4155","#4155",[44,3603,3605],{"href":3604},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F0d3468fcaa2218cdfecdd3a6813386f5691b0df1",[31,3606,3607],{},"0d3468f",[15,3609,103],{"id":3610},"contributors-36",[105,3612,107],{},[105,3614,3615],{},[44,3616,3618],{"href":3617},"https:\u002F\u002Fgithub.com\u002Fpkasarda","@pkasarda",[10,3620,3622],{"id":3621},"v545--oct-3-2026","v5.4.5 — Oct 3, 2026",[15,3624,610],{"id":3625},"kubbadapter-oas-9",[20,3627,56],{"id":3628},"bug-fixes-70",[25,3630,3631],{},[28,3632,3633,3634,3637,3638,181,3641,1392,3644,3647,3648,181,3651,181,3654,181,3657,185,3660,3663,3664,3667,3668,3671,3672,185,3675,3678,3679,3681,3682,181,3686,48],{},"Numbers with a ",[31,3635,3636],{},"format"," such as ",[31,3639,3640],{},"double",[31,3642,3643],{},"float",[31,3645,3646],{},"int32"," keep their ",[31,3649,3650],{},"minimum",[31,3652,3653],{},"maximum",[31,3655,3656],{},"exclusiveMinimum",[31,3658,3659],{},"exclusiveMaximum",[31,3661,3662],{},"multipleOf"," constraints, so ",[31,3665,3666],{},"{ type: 'number', format: 'double', minimum: -90, maximum: 90 }"," generates ",[31,3669,3670],{},"z.number().min(-90).max(90)"," again. ",[31,3673,3674],{},"int64",[31,3676,3677],{},"uint64"," now keep ",[31,3680,3662],{}," as well. (",[44,3683,3685],{"href":3684},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4149","#4149",[44,3687,3689],{"href":3688},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F8ff2b1e74cf741965447ad58a33c5d3a1ba12a23",[31,3690,3691],{},"8ff2b1e",[15,3693,52],{"id":3694},"kubbparser-ts-3",[20,3696,56],{"id":3697},"bug-fixes-71",[25,3699,3700],{},[28,3701,3702,3703,3706,3707,181,3711,48],{},"Keep package import and export specifiers unchanged when applying the ",[31,3704,3705],{},"extension"," option. (",[44,3708,3710],{"href":3709},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4147","#4147",[44,3712,3714],{"href":3713},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F31ad673781d6c62410c69ed8c5dbf5c5489ab994",[31,3715,3716],{},"31ad673",[15,3718,103],{"id":3719},"contributors-37",[105,3721,107],{},[105,3723,3724,181,3728],{},[44,3725,3727],{"href":3726},"https:\u002F\u002Fgithub.com\u002Fmheob","@mheob",[44,3729,113],{"href":112},[10,3731,3733],{"id":3732},"v544--oct-3-2026","v5.4.4 — Oct 3, 2026",[15,3735,165],{"id":3736},"kubbcli-14",[20,3738,56],{"id":3739},"bug-fixes-72",[25,3741,3742],{},[28,3743,3744,3745,3748,3749,3752,3753,181,3757,48],{},"The background worker started by ",[31,3746,3747],{},"kubb studio start"," now shows up as ",[31,3750,3751],{},"Kubb"," in process lists, like the main CLI. (",[44,3754,3756],{"href":3755},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4145","#4145",[44,3758,3760],{"href":3759},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F81aa07992b3a06a426165219ad2c387088ee7f56",[31,3761,3762],{},"81aa079",[15,3764,103],{"id":3765},"contributors-38",[105,3767,107],{},[105,3769,3770],{},[44,3771,113],{"href":112},[10,3773,3775],{"id":3774},"v543--oct-2-2026","v5.4.3 — Oct 2, 2026",[15,3777,121],{"id":3778},"kubbstudio-16",[20,3780,56],{"id":3781},"bug-fixes-73",[25,3783,3784],{},[28,3785,3786,3787,185,3790,1410,3793,3796,3797,3800,3801,3336,3804,3806,3807,3810,3811,3813,3814,181,3818,48],{},"Add an optional ",[31,3788,3789],{},"cursor",[31,3791,3792],{},"limit",[31,3794,3795],{},"readFiles",", so a caller can page through a large generated file. The reply carries only that page's lines plus ",[31,3798,3799],{},"pages[path]"," with the ",[31,3802,3803],{},"nextCursor",[31,3805,1483],{}," after the last page) and the file's ",[31,3808,3809],{},"totalLines",". Reads without a ",[31,3812,3792],{}," behave as before. (",[44,3815,3817],{"href":3816},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4140","#4140",[44,3819,3821],{"href":3820},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F3bb9df67383285d2719f98bc30df59368a7ac3e0",[31,3822,3823],{},"3bb9df6",[15,3825,103],{"id":3826},"contributors-39",[105,3828,107],{},[105,3830,3831],{},[44,3832,113],{"href":112},[10,3834,3836],{"id":3835},"v542--oct-1-2026","v5.4.2 — Oct 1, 2026",[15,3838,165],{"id":3839},"kubbcli-15",[20,3841,56],{"id":3842},"bug-fixes-74",[25,3844,3845],{},[28,3846,3847,3848,95,3851,181,3855,48],{},"Log Studio commands, warnings and each generation run in the background worker log, so it no longer stops at ",[31,3849,3850],{},"connected",[44,3852,3854],{"href":3853},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4135","#4135",[44,3856,3858],{"href":3857},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F9e33c7e8b52a24cc3a1ca387f89628bd6aa0562f",[31,3859,3860],{},"9e33c7e",[15,3862,80],{"id":3863},"kubb-1",[20,3865,56],{"id":3866},"bug-fixes-75",[25,3868,3869],{},[28,3870,3871,3872,181,3876,48],{},"Describe Kubb as a way to turn your API spec into type-safe code in the package description, README and CLI intro. (",[44,3873,3875],{"href":3874},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4137","#4137",[44,3877,3879],{"href":3878},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002Fb25ce0d0ca4e5024a59b6ca7e3dbe3e1ac5c79bc",[31,3880,3881],{},"b25ce0d",[15,3883,103],{"id":3884},"contributors-40",[105,3886,107],{},[105,3888,3889],{},[44,3890,113],{"href":112},[10,3892,3894],{"id":3893},"v541--sep-29-2026","v5.4.1 — Sep 29, 2026",[15,3896,165],{"id":3897},"kubbcli-16",[20,3899,56],{"id":3900},"bug-fixes-76",[25,3902,3903],{},[28,3904,3905,3921],{},[105,3906,670,3907,185,3909,3912,3913,3916,3917,3920],{},[31,3908,3747],{},[31,3910,3911],{},"stop"," for a background connection per project. ",[31,3914,3915],{},"status"," reports its connection state and log path, and ",[31,3918,3919],{},"logout"," stops it before removing credentials. Rejected tokens stop the worker until you log in again.",[105,3922,3923,3924,181,3928,48],{},"Use one shared connection loop for the CLI and Docker agent. Abort pending registration on shutdown and wait for canceled generation cleanup before reconnecting. (",[44,3925,3927],{"href":3926},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4128","#4128",[44,3929,3931],{"href":3930},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F5d9151c4c74e6c93e215ac24dfff0f270c64e771",[31,3932,3933],{},"5d9151c",[15,3935,103],{"id":3936},"contributors-41",[105,3938,107],{},[105,3940,3941],{},[44,3942,113],{"href":112},[10,3944,3946],{"id":3945},"v540--sep-29-2026","v5.4.0 — Sep 29, 2026",[15,3948,18],{"id":3949},"kubbcore-17",[20,3951,23],{"id":3952},"features-15",[25,3954,3955],{},[28,3956,670,3957,3960,3961,3964,3965,3968,3969,3972,3973,3976,3977,181,3981,48],{},[31,3958,3959],{},"this.import(...)"," to printer handlers and ",[31,3962,3963],{},"printer.drainImports()",", so a ",[31,3966,3967],{},"printer.nodes"," handler can declare the import its output needs. Allow ",[31,3970,3971],{},"resolver.imports"," to be overridden through ",[31,3974,3975],{},"ResolverPatch"," without a cast. (",[44,3978,3980],{"href":3979},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4130","#4130",[44,3982,3984],{"href":3983},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F0d737e227e8c21a37a2554aa7129434843bef811",[31,3985,3986],{},"0d737e2",[15,3988,103],{"id":3989},"contributors-42",[105,3991,107],{},[105,3993,3994],{},[44,3995,113],{"href":112},[10,3997,3999],{"id":3998},"v5319--sep-26-2026","v5.3.19 — Sep 26, 2026",[15,4001,121],{"id":4002},"kubbstudio-17",[20,4004,56],{"id":4005},"bug-fixes-77",[25,4007,4008,4041],{},[28,4009,1278,4010,4012,4013,4016,4017,4020,4021,4024,4025,4027,4028,4030,4031,181,4035,48],{},[31,4011,829],{}," saying \"No snapshot of ",[31,4014,4015],{},"main"," to compare with\" even when a CI agent for the base branch already exists and simply has no snapshot of this package yet, such as a package newly added in the pull request. ",[31,4018,4019],{},"branchChanges"," now carries ",[31,4022,4023],{},"baseFound",", and the summary line tells the two cases apart: \"No snapshot of ",[31,4026,4015],{}," to compare with\" (no agent has run there) versus \"No snapshot of ",[31,4029,4015],{}," for this package yet\" (the agent exists, this package is new to it). (",[44,4032,4034],{"href":4033},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4123","#4123",[44,4036,4038],{"href":4037},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F3561e1977c36056a0727566175c3b40edf8c097d",[31,4039,4040],{},"3561e19",[28,4042,819,4043,823,4046,1033,4049,3167,4052,4055,4056,181,4060,48],{},[31,4044,4045],{},"allowInput",[31,4047,4048],{},"AgentPermissions",[31,4050,4051],{},"--allow-input",[31,4053,4054],{},"KUBB_AGENT_ALLOW_INPUT"," flag. Only a sandbox agent can generate from an OpenAPI spec sent by Studio; every other agent always reads its spec from disk, so this was never actually a permission a host could opt into. (",[44,4057,4059],{"href":4058},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4124","#4124",[44,4061,4063],{"href":4062},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F292350e28f01c65e277cf32288724fb8bc0ca4d8",[31,4064,4065],{},"292350e",[15,4067,103],{"id":4068},"contributors-43",[105,4070,107],{},[105,4072,4073],{},[44,4074,113],{"href":112},[10,4076,4078],{"id":4077},"v5318--sep-25-2026","v5.3.18 — Sep 25, 2026",[15,4080,121],{"id":4081},"kubbstudio-18",[20,4083,56],{"id":4084},"bug-fixes-78",[25,4086,4087,4100,4142],{},[28,4088,4089,4090,181,4094,48],{},"Organize the Studio runtime into protocol, operations, and runtime layers. (",[44,4091,4093],{"href":4092},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4121","#4121",[44,4095,4097],{"href":4096},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F63f951a6efbdd27208df4e792cded4ea7e22973a",[31,4098,4099],{},"63f951a",[28,4101,4102,4107],{},[105,4103,4104,4106],{},[31,4105,829],{}," runs its snapshot job on the agent process it connected, so two overlapping pipelines of the same CI agent never build each other's checkout.",[25,4108,4109,4123],{},[28,4110,4111,4114,4115,4118,4119,4122],{},[31,4112,4113],{},"createJob"," accepts ",[31,4116,4117],{},"instanceId",", and sends it on ",[31,4120,4121],{},"POST \u002Fapi\u002Fjobs",". A Studio that does not know the field ignores it.",[28,4124,4125,4128,4129,4131,4132,181,4136,48],{},[31,4126,4127],{},"createClient"," accepts an ",[31,4130,4117],{},", so a host that queues its own jobs can name its process. Without one, each client still gets a random id. (",[44,4133,4135],{"href":4134},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4119","#4119",[44,4137,4139],{"href":4138},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F955b6b557135d18b173aa237bd0876dac388abef",[31,4140,4141],{},"955b6b5",[28,4143,819,4144,823,4147,4150,4151,4154,4155,95,4158,181,4162,48],{},[31,4145,4146],{},"memoryBudgetMb",[31,4148,4149],{},"AgentCapacity",", along with the ",[31,4152,4153],{},"KUBB_AGENT_MEMORY_BUDGET_MB"," environment variable. An agent no longer refuses a job for memory, and its heartbeat always reports ",[31,4156,4157],{},"accepting: true",[44,4159,4161],{"href":4160},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4117","#4117",[44,4163,4165],{"href":4164},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002Fd3996ef6ead14995ade6378963ee0e45b9bbd5f5",[31,4166,4167],{},"d3996ef",[15,4169,103],{"id":4170},"contributors-44",[105,4172,107],{},[105,4174,4175],{},[44,4176,113],{"href":112},[10,4178,4180],{"id":4179},"v5317--sep-25-2026","v5.3.17 — Sep 25, 2026",[15,4182,121],{"id":4183},"kubbstudio-19",[20,4185,56],{"id":4186},"bug-fixes-79",[25,4188,4189],{},[28,4190,4191,4192,181,4196,48],{},"Improve Studio agent connections, job isolation, retries, capacity reporting, and close handling. Add GitHub\u002FGitLab branch snapshots and fail-fast token rejection handling to the CLI. (",[44,4193,4195],{"href":4194},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4110","#4110",[44,4197,4199],{"href":4198},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F327bfe9d2a38caacfc0707345a5f532f264b2754",[31,4200,4201],{},"327bfe9",[15,4203,103],{"id":4204},"contributors-45",[105,4206,107],{},[105,4208,4209],{},[44,4210,113],{"href":112},[10,4212,4214],{"id":4213},"v5316--sep-24-2026","v5.3.16 — Sep 24, 2026",[15,4216,121],{"id":4217},"kubbstudio-20",[20,4219,56],{"id":4220},"bug-fixes-80",[25,4222,4223],{},[28,4224,4225,4226,4228,4229,4231,4232,4234,4235,4238,4239,181,4243,48],{},"Align how ",[31,4227,192],{},", the Docker agent, and ",[31,4230,829],{}," pair, connect, and log. The runtime no longer prints or knows its host, pairing takes a ",[31,4233,3054],{}," through the new ",[31,4236,4237],{},"pairAgent",", and snapshots report the files changed since the previous one. (",[44,4240,4242],{"href":4241},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4098","#4098",[44,4244,4246],{"href":4245},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F555e057827aed831b755035ffab2a3e84a120629",[31,4247,4248],{},"555e057",[15,4250,103],{"id":4251},"contributors-46",[105,4253,107],{},[105,4255,4256],{},[44,4257,113],{"href":112},[10,4259,4261],{"id":4260},"v5315--sep-24-2026","v5.3.15 — Sep 24, 2026",[15,4263,18],{"id":4264},"kubbcore-18",[20,4266,56],{"id":4267},"bug-fixes-81",[25,4269,4270],{},[28,4271,4272,4273,4275,4276,4278,4279,4282,4283,3167,4286,4289,4290,181,4294,48],{},"Files emitted with ",[31,4274,2827],{}," now follow the parser's ",[31,4277,3705],{}," option. Parsers can implement the new ",[31,4280,4281],{},"copy(file, source)"," hook to turn a copied file into nodes, and ",[31,4284,4285],{},"parserTs",[31,4287,4288],{},"parserTsx"," use it to lift a template's imports and exports into import and export nodes. (",[44,4291,4293],{"href":4292},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4096","#4096",[44,4295,4297],{"href":4296},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F050f6f98d4150a2bd9b26d1937a56c1b0a89fd72",[31,4298,4299],{},"050f6f9",[15,4301,103],{"id":4302},"contributors-47",[105,4304,107],{},[105,4306,4307],{},[44,4308,113],{"href":112},[10,4310,4312],{"id":4311},"v5314--sep-24-2026","v5.3.14 — Sep 24, 2026",[15,4314,610],{"id":4315},"kubbadapter-oas-10",[20,4317,56],{"id":4318},"bug-fixes-82",[25,4320,4321],{},[28,4322,4323,4324,181,4327,4330,4331,4334,4335,4338,4339,4342,4343,4345,4346,4348,4349,181,4353,48],{},"Keep a binary response or request body typed as a blob for any non-JSON media type (",[31,4325,4326],{},"application\u002Fpdf",[31,4328,4329],{},"image\u002Fpng",", ...), not just ",[31,4332,4333],{},"application\u002Foctet-stream",". A newer ",[31,4336,4337],{},"@scalar\u002Fopenapi-upgrader"," release started emptying ",[31,4340,4341],{},"format: 'binary'"," schemas for every media type on the OAS 3.1 upgrade, not just ",[31,4344,4333],{},", so those bodies fell back to ",[31,4347,3058],{}," instead of resolving to a blob. (",[44,4350,4352],{"href":4351},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4094","#4094",[44,4354,4356],{"href":4355},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002Fcfcb497977f246d02dac9cc8f88a2a230ab8734e",[31,4357,4358],{},"cfcb497",[15,4360,909],{"id":4361},"kubbast-4",[20,4363,56],{"id":4364},"bug-fixes-83",[25,4366,4367],{},[28,4368,670,4369,4372,4373,181,4377,48],{},[31,4370,4371],{},"isBareRef"," for detecting unmodified schema references. (",[44,4374,4376],{"href":4375},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4093","#4093",[44,4378,4380],{"href":4379},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002Fc7a91570a9f9ad176fb4580094476406ac5b9997",[31,4381,4382],{},"c7a9157",[15,4384,103],{"id":4385},"contributors-48",[105,4387,107],{},[105,4389,4390],{},[44,4391,113],{"href":112},[10,4393,4395],{"id":4394},"v5313--sep-23-2026","v5.3.13 — Sep 23, 2026",[15,4397,121],{"id":4398},"kubbstudio-21",[20,4400,56],{"id":4401},"bug-fixes-84",[25,4403,4404],{},[28,4405,4406,4407,4410,4411,4414,4415,4418,4419,4422,4423,4425,4426,4429,4430,271,4432,4435,4436,185,4439,193,4442,4444,4445,95,4448,181,4452,48],{},"Keep recent generations by job id and snapshot the output directory before each run, so Studio can diff a run against an earlier one or against the files on disk. Agents with a project keep them in ",[31,4408,4409],{},"node_modules\u002F.cache\u002Fkubb",", so they survive a restart, and sandboxes keep them in memory. ",[31,4412,4413],{},"KUBB_AGENT_MAX_GENERATIONS"," (default 8), ",[31,4416,4417],{},"KUBB_AGENT_MAX_GENERATIONS_MB"," (default 100) and ",[31,4420,4421],{},"KUBB_AGENT_MAX_SNAPSHOT_MB"," (default 50) set the limits. Breaking for the Studio connection: ",[31,4424,3795],{}," now takes a ",[31,4427,4428],{},"jobId"," and a ",[31,4431,316],{},[31,4433,4434],{},"GenerateResult.changes"," is replaced by ",[31,4437,4438],{},"hashes",[31,4440,4441],{},"disk.hashes",[31,4443,18],{}," now exports ",[31,4446,4447],{},"cacheStorage",[44,4449,4451],{"href":4450},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4090","#4090",[44,4453,4455],{"href":4454},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F7b517b80d2d80a90878e7854528345e3836ebcac",[31,4456,4457],{},"7b517b8",[15,4459,103],{"id":4460},"contributors-49",[105,4462,107],{},[105,4464,4465],{},[44,4466,113],{"href":112},[10,4468,4470],{"id":4469},"v5312--sep-23-2026","v5.3.12 — Sep 23, 2026",[15,4472,121],{"id":4473},"kubbstudio-22",[20,4475,56],{"id":4476},"bug-fixes-85",[25,4478,4479],{},[28,4480,4481,4484],{},[105,4482,4483],{},"Report which files a Studio run added, changed, or removed, and serve the previous run's contents so Studio can show a diff.",[25,4485,4486,4501,4509,4512],{},[28,4487,4488,4490,4491,181,4494,2053,4497,4500],{},[31,4489,4434],{}," maps each path that differs from the session's previous successful run to ",[31,4492,4493],{},"added",[31,4495,4496],{},"changed",[31,4498,4499],{},"removed",". Unchanged files are left out, and the field is absent on a session's first run.",[28,4502,4503,1884,4505,4508],{},[31,4504,3795],{},[31,4506,4507],{},"revision: 'previous'"," to read the run before the latest one, including files the latest run removed. The previous run is read into memory before the next run starts, so a session that writes to disk can still be diffed after its files are overwritten.",[28,4510,4511],{},"A failed run leaves the last successful run as the one to compare against.",[28,4513,4514,4517,4518,95,4520,181,4524,48],{},[31,4515,4516],{},"FileChange"," is exported from ",[31,4519,121],{},[44,4521,4523],{"href":4522},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4086","#4086",[44,4525,4527],{"href":4526},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F300186d94395921012334877c291e8065dd591ef",[31,4528,4529],{},"300186d",[15,4531,103],{"id":4532},"contributors-50",[105,4534,107],{},[105,4536,4537],{},[44,4538,113],{"href":112},[10,4540,4542],{"id":4541},"v5311--sep-21-2026","v5.3.11 — Sep 21, 2026",[15,4544,610],{"id":4545},"kubbadapter-oas-11",[20,4547,56],{"id":4548},"bug-fixes-86",[25,4550,4551],{},[28,4552,4553,4554,4557,4558,181,4562,48],{},"Generate ",[31,4555,4556],{},"Blob"," for multipart binary properties after upgrading an OpenAPI 3.0 document to 3.1. (",[44,4559,4561],{"href":4560},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4083","#4083",[44,4563,4565],{"href":4564},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F95d93a70c8021bc6aa912be412a3e21b37890bf0",[31,4566,4567],{},"95d93a7",[15,4569,103],{"id":4570},"contributors-51",[105,4572,107],{},[105,4574,4575],{},[44,4576,113],{"href":112},[10,4578,4580],{"id":4579},"v5310--sep-19-2026","v5.3.10 — Sep 19, 2026",[15,4582,165],{"id":4583},"kubbcli-17",[20,4585,56],{"id":4586},"bug-fixes-87",[25,4588,4589],{},[28,4590,4591,4592,4594,4595,4597,4598,181,4602,48],{},"Show sponsor tips again for successful ",[31,4593,176],{}," runs and when starting a ",[31,4596,192],{}," session. (",[44,4599,4601],{"href":4600},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4077","#4077",[44,4603,4605],{"href":4604},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F15c644e427dc7bc522bbf473eba4818bc4ac767c",[31,4606,4607],{},"15c644e",[15,4609,103],{"id":4610},"contributors-52",[105,4612,107],{},[105,4614,4615],{},[44,4616,113],{"href":112},[10,4618,4620],{"id":4619},"v539--sep-19-2026","v5.3.9 — Sep 19, 2026",[15,4622,610],{"id":4623},"kubbadapter-oas-12",[20,4625,56],{"id":4626},"bug-fixes-88",[25,4628,4629],{},[28,4630,4631,4632,181,4636,48],{},"Update the OpenAPI parser, upgrader, and unplugin dependencies. (",[44,4633,4635],{"href":4634},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4068","#4068",[44,4637,4639],{"href":4638},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002Fd88ab1989b222f8b1012ed046f10bf105139e3e9",[31,4640,4641],{},"d88ab19",[15,4643,165],{"id":4644},"kubbcli-18",[20,4646,56],{"id":4647},"bug-fixes-89",[25,4649,4650],{},[28,4651,4652,4653,181,4655,48],{},"Scope Kubb Studio help by subcommand and reject flags passed to the wrong Studio command. (",[44,4654,4635],{"href":4634},[44,4656,4657],{"href":4638},[31,4658,4641],{},[15,4660,80],{"id":4661},"kubb-2",[20,4663,56],{"id":4664},"bug-fixes-90",[25,4666,4667],{},[28,4668,4669,4670,4673,4674,181,4678,48],{},"Apply the same adapter, parser, and plugin defaults to programmatic ",[31,4671,4672],{},"createKubb"," builds as the CLI configuration. (",[44,4675,4677],{"href":4676},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4072","#4072",[44,4679,4681],{"href":4680},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F4afe194a5d88e4ac59813564485e7542d633518c",[31,4682,4683],{},"4afe194",[15,4685,103],{"id":4686},"contributors-53",[105,4688,107],{},[105,4690,4691],{},[44,4692,113],{"href":112},[10,4694,4696],{"id":4695},"v538--sep-18-2026","v5.3.8 — Sep 18, 2026",[15,4698,121],{"id":4699},"kubbstudio-23",[20,4701,56],{"id":4702},"bug-fixes-91",[25,4704,4705],{},[28,4706,4707,4710],{},[105,4708,4709],{},"Carry an agent's organization slug through pairing and connecting, so a host can log and trace it\nalongside the agent's own slug.",[105,4711,4712,1033,4715,4718,4719,4722,4723,4725,4726,4729,4730,181,4734,48],{},[31,4713,4714],{},"PairingResult.agent",[31,4716,4717],{},"studio:connected"," hook context gain an optional\n",[31,4720,4721],{},"organizationSlug",", absent for a sandbox or global agent, which has none. ",[31,4724,4717],{}," also\ngains ",[31,4727,4728],{},"agentSlug",", refreshed on every connect so a rename in Studio shows up without a re-pair.\nBoth fields are additive: a host built against an older type just ignores them. (",[44,4731,4733],{"href":4732},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4066","#4066",[44,4735,4737],{"href":4736},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002Feb5fa50fedf52a06349813fae039f562225ae240",[31,4738,4739],{},"eb5fa50",[15,4741,103],{"id":4742},"contributors-54",[105,4744,107],{},[105,4746,4747],{},[44,4748,113],{"href":112},[10,4750,4752],{"id":4751},"v537--sep-18-2026","v5.3.7 — Sep 18, 2026",[15,4754,121],{"id":4755},"kubbstudio-24",[20,4757,56],{"id":4758},"bug-fixes-92",[25,4760,4761],{},[28,4762,4763,4764,4767,4768,3167,4770,3167,4773,4776,4777,4780,4781,4784,4785,181,4789,48],{},"Fix a snapshot package's ",[31,4765,4766],{},"package.json"," pointing ",[31,4769,4015],{},[31,4771,4772],{},"module",[31,4774,4775],{},"exports['.']"," at\n",[31,4778,4779],{},"dist\u002Findex.*"," even when the generation had no top-level barrel, and add a wildcard\n",[31,4782,4783],{},"exports['.\u002F*']"," so individual generated files stay importable by path. (",[44,4786,4788],{"href":4787},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4064","#4064",[44,4790,4792],{"href":4791},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002Fd2ce0c4af275d7bf89535e64fc0c6bdbfcfaecd1",[31,4793,4794],{},"d2ce0c4",[15,4796,103],{"id":4797},"contributors-55",[105,4799,107],{},[105,4801,4802],{},[44,4803,113],{"href":112},[10,4805,4807],{"id":4806},"v536--sep-17-2026","v5.3.6 — Sep 17, 2026",[15,4809,121],{"id":4810},"kubbstudio-25",[20,4812,56],{"id":4813},"bug-fixes-93",[25,4815,4816,4829],{},[28,4817,4818,4819,181,4823,48],{},"Replace the agent WebSocket command protocol with typed Cap'n Web RPC and remove the legacy JSON envelopes. Agents and Studio must upgrade together; mismatched versions cannot communicate. (",[44,4820,4822],{"href":4821},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4061","#4061",[44,4824,4826],{"href":4825},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002Ff880342c1dc80611cd4094ced72c7d53e7d46cb5",[31,4827,4828],{},"f880342",[28,4830,4831,4834],{},[105,4832,4833],{},"Fix generation and heartbeat lifecycle bugs left over from the Cap'n Web RPC cutover:",[25,4835,4836,4839,4845,4848],{},[28,4837,4838],{},"A dropped Studio connection now cancels the in-flight generation instead of letting it finish\nunwatched.",[28,4840,4841,4842,4844],{},"Two ",[31,4843,256],{}," calls arriving in the same tick can no longer both start a run.",[28,4846,4847],{},"A heartbeat ping that never settles (a half-open socket) now closes the session instead of\nhanging it indefinitely.",[28,4849,4850,4851,181,4853,48],{},"Removed an unreachable error path left over from the old JSON transport. (",[44,4852,4822],{"href":4821},[44,4854,4855],{"href":4825},[31,4856,4828],{},[15,4858,103],{"id":4859},"contributors-56",[105,4861,107],{},[105,4863,4864],{},[44,4865,113],{"href":112},[10,4867,4869],{"id":4868},"v535--sep-17-2026","v5.3.5 — Sep 17, 2026",[15,4871,121],{"id":4872},"kubbstudio-26",[20,4874,56],{"id":4875},"bug-fixes-94",[25,4877,4878,4921],{},[28,4879,4880,4883,4896],{},[105,4881,4882],{},"Stop holding a whole generation's output in memory for the life of a Studio session.",[105,4884,4885,185,4888,4891,4892,4895],{},[31,4886,4887],{},"studio:files",[31,4889,4890],{},"studio:snapshot"," used to read every generated file into one ",[31,4893,4894],{},"Record\u003Cstring, string>"," the moment a run finished, and kept that map alive until the next generation. A run\nproducing gigabytes of source meant the agent process held gigabytes in RAM, whether or not anyone\never opened a file or took a snapshot.",[105,4897,4898,4899,4902,4903,4905,4906,1392,4908,4910,4911,181,4915,48],{},"The agent now keeps the live ",[31,4900,4901],{},"Storage"," a run wrote through, plus the list of paths it produced, and\nreads a file's content back from ",[31,4904,4901],{}," only when ",[31,4907,4887],{},[31,4909,4890],{}," actually\nasks for it. A path outside that list is refused before it reaches storage, so this changes nothing\nabout what a session can read, only when the read happens. (",[44,4912,4914],{"href":4913},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4059","#4059",[44,4916,4918],{"href":4917},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F351e3c9f9822cfb7ffc5ac7d07517394a449f58e",[31,4919,4920],{},"351e3c9",[28,4922,4923,4932,4959,4964,5015,5020,5041,5053],{},[105,4924,4925,4926,2258,4928,4931],{},"Stop streaming generated source over the agent WebSocket by default. Reading it now needs\n",[31,4927,980],{},[31,4929,4930],{},"KUBB_AGENT_ALLOW_READ=true","), matching the other four Studio permissions.",[105,4933,4934,4935,4937,4938,4941,4942,4944,4945,181,4948,271,4950,4953,4954,4958],{},"Every ",[31,4936,192],{}," session used to send the full text of every generated file on\n",[31,4939,4940],{},"kubb:generation:end",", whether or not anyone in the browser opened one. A spec producing hundreds\nof files could put megabytes of source on the wire per run, and nothing gated it: ",[31,4943,3413],{},",\n",[31,4946,4947],{},"allowConfigEdit",[31,4949,4045],{},[31,4951,4952],{},"allowExec"," all cover what Studio may do ",[4955,4956,4957],"em",{},"to"," a project, but\nreading generated output back was never one of the four.",[105,4960,4961,4963],{},[31,4962,4940],{}," now carries nothing. Everything it used to carry moved somewhere better:",[25,4965,4966,4973,4983,4996],{},[28,4967,4968,4969,4972],{},"The list of generated files is on ",[31,4970,4971],{},"kubb:build:end",", which already carried every path and fires\nearlier in a run. Its paths are now relative to the agent's root, matching every other path on\nthe wire, where they used to be absolute.",[28,4974,4975,4976,4979,4980,4982],{},"The file count is on ",[31,4977,4978],{},"kubb:generation:summary",", which already had it and was always the accurate\nnumber (",[31,4981,4940],{},"'s old count went to 0 for a CI connection).",[28,4984,4985,4986,4988,4989,4992,4993,4995],{},"File contents are fetched on demand with a new ",[31,4987,4887],{}," command, which the browser sends\nwhen someone opens a file. The agent replies with ",[31,4990,4991],{},"agent:files",", refusing unless ",[31,4994,860],{}," was\ngranted.",[28,4997,4998,4999,5001,5002,5005,5006,1884,5008,5011,5012,2430],{},"Peer dependency metadata, previously sent on every generation and round-tripped straight back\ninto ",[31,5000,4890],{},", now travels with the ",[31,5003,5004],{},"agent:snapshot"," reply instead, since the CI\nsnapshot flow is its only consumer. ",[31,5007,4890],{},[31,5009,5010],{},"bundledDependencies"," in place of\n",[31,5013,5014],{},"peerDependencies",[105,5016,5017,5019],{},[31,5018,980],{}," is off by default everywhere, like every other permission. A sandbox or global\nagent is always granted it, since its output is the only thing it has:",[1703,5021,5024],{"language":5022,"code":5023,"class":1706},"shell","kubb studio --allow-read   # show generated files in the browser",[31,5025,5027],{"class":5026},"language-shell",[1711,5028,5029,5031,5034,5037],{"class":1713,"style":1714},[1711,5030,80],{"style":1731},[1711,5032,5033],{"style":1751}," studio",[1711,5035,5036],{"style":1724}," --allow-read",[1711,5038,5040],{"style":5039},"color:#6A737D;--shiki-dark:#6A737D","   # show generated files in the browser",[105,5042,5043,5044,185,5046,5048,5049,5052],{},"An older Studio instance talking to this version of the agent (or the reverse) can fail: a snapshot\nbuild errors because ",[31,5045,5010],{},[31,5047,5014],{}," no longer line up between the two\nends, and a plain session shows an empty editor with no file contents. Point ",[31,5050,5051],{},"--url"," at a Studio\nbuild that matches this version.",[105,5054,5055,5056,5058,5059,5062,5063,181,5065,181,5067,4944,5070,181,5072,271,5075,5078,5079,181,5081,48],{},"The in-process ",[31,5057,4940],{}," hook (",[31,5060,5061],{},"kubb.hooks.hook('kubb:generation:end', ...)",", or a\nplugin's own listener) is unaffected. It still carries ",[31,5064,1576],{},[31,5066,2190],{},[31,5068,5069],{},"diagnostics",[31,5071,3915],{},[31,5073,5074],{},"hrStart",[31,5076,5077],{},"filesCreated",", exactly as before. Only the payload this event sends over\nthe Studio WebSocket changed. (",[44,5080,4914],{"href":4913},[44,5082,5083],{"href":4917},[31,5084,4920],{},[15,5086,103],{"id":5087},"contributors-57",[105,5089,107],{},[105,5091,5092],{},[44,5093,113],{"href":112},[10,5095,5097],{"id":5096},"v534--sep-16-2026","v5.3.4 — Sep 16, 2026",[15,5099,121],{"id":5100},"kubbstudio-27",[20,5102,56],{"id":5103},"bug-fixes-95",[25,5105,5106],{},[28,5107,5108,5111,5124],{},[105,5109,5110],{},"Back off while polling a Studio job, so a long snapshot stops exhausting the API key rate limit.",[105,5112,5113,5116,5117,5120,5121,5123],{},[31,5114,5115],{},"waitForJob"," polled ",[31,5118,5119],{},"GET \u002Fapi\u002Fjobs\u002F{id}"," every second, starting the instant the job was queued. The\nCLI's ",[31,5122,829],{}," waits up to 10 minutes by default, which is up to 600 requests against\na budget of 100 per window. The window only resets after a whole window with no request, so a\none-second poll could never escape the limit once it hit it, and every later call failed until the\nrun gave up. The budget belongs to the organization key, so concurrent CI runs share it.",[105,5125,5126,5127,5130,5131,5134,5135,181,5139,48],{},"The first poll now waits two seconds, since a job runs a generation and packs a tarball before it\ncan possibly finish. From there the interval doubles to a 30 second ceiling, bringing a 10 minute\nwait down from 600 requests to 22. A 429 pushes the next poll out by the ",[31,5128,5129],{},"tryAgainIn"," Studio\nreturns and never pulls it back in, and ",[31,5132,5133],{},"retry: false"," stops ofetch retrying a 429 with no delay. (",[44,5136,5138],{"href":5137},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4057","#4057",[44,5140,5142],{"href":5141},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F52637b617207bd7e51e7f9d5c2220df9de0c4704",[31,5143,5144],{},"52637b6",[15,5146,103],{"id":5147},"contributors-58",[105,5149,107],{},[105,5151,5152],{},[44,5153,113],{"href":112},[10,5155,5157],{"id":5156},"v533--sep-16-2026","v5.3.3 — Sep 16, 2026",[15,5159,121],{"id":5160},"kubbstudio-28",[20,5162,56],{"id":5163},"bug-fixes-96",[25,5165,5166,5193],{},[28,5167,5168,5174],{},[105,5169,5170,5171,5173],{},"The agent runtime now packs snapshot tarballs itself. A new ",[31,5172,4890],{}," command builds the\nnpm-installable tarball from the session's most recent generation and uploads it to a Studio\nendpoint, instead of Studio building the tarball on its own server. A snapshot request with no\nprior generation is refused.",[105,5175,5176,5177,5179,5180,5182,5183,181,5187,48],{},"A CI connection also keeps generated files off every ",[31,5178,4940],{}," reply, since it has no\nUI to render them in. ",[31,5181,829],{}," and the Studio UI's \"Create snapshot\" button keep\nworking as before, now backed by this protocol message. (",[44,5184,5186],{"href":5185},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4052","#4052",[44,5188,5190],{"href":5189},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F19e9c2c70687f6440cd2d3e74d153edb64491d8d",[31,5191,5192],{},"19e9c2c",[28,5194,5195,5233],{},[105,5196,5197,5198,5201,5202,5205,5206,3167,5209,5212,5213,5216,5217,5220,5221,5224,5225,5228,5229,5232],{},"The background reconnect loop's \"Retrying connection\" and \"Reconnect attempt failed\" lines, and\nthe teardown notice ",[31,5199,5200],{},"disconnect()"," prints on the way out, now go through ",[31,5203,5204],{},"console.error"," instead\nof ",[31,5207,5208],{},"console.info",[31,5210,5211],{},"console.log",", and only print when a host passes a ",[31,5214,5215],{},"logLevel"," above ",[31,5218,5219],{},"silent"," to\n",[31,5222,5223],{},"StudioSession",". Previously they always printed unconditionally, which a CI runner that only\nstreams a child process's stderr live (such as ",[31,5226,5227],{},"kubb-labs\u002Faction",") never surfaces, and which\ncontradicted ",[31,5230,5231],{},"installLogger","'s own \"prints nothing when left out\" default.",[105,5234,5235,185,5237,5239,5240,5243,5244,181,5246,48],{},[31,5236,192],{},[31,5238,829],{}," now pass their ",[31,5241,5242],{},"--log-level"," flag through, so these lines\nrespect the same flag as the rest of the command's output. (",[44,5245,5186],{"href":5185},[44,5247,5248],{"href":5189},[31,5249,5192],{},[15,5251,103],{"id":5252},"contributors-59",[105,5254,107],{},[105,5256,5257],{},[44,5258,113],{"href":112},[10,5260,5262],{"id":5261},"v532--sep-16-2026","v5.3.2 — Sep 16, 2026",[15,5264,165],{"id":5265},"kubbcli-19",[20,5267,56],{"id":5268},"bug-fixes-97",[25,5270,5271],{},[28,5272,5273,5276,5326,5329],{},[105,5274,5275],{},"CLI flags are now kebab-case, matching the convention used by most command-line tools.",[25,5277,5278,5293,5319],{},[28,5279,5280,185,5283,5286,5287,185,5290,2430],{},[31,5281,5282],{},"kubb generate --log-level",[31,5284,5285],{},"kubb generate --dry-run"," replace ",[31,5288,5289],{},"--logLevel",[31,5291,5292],{},"--dryRun",[28,5294,5295,181,5298,181,5301,271,5303,5306,5307,181,5310,181,5313,271,5316,2430],{},[31,5296,5297],{},"kubb studio --allow-write",[31,5299,5300],{},"--allow-config-edit",[31,5302,4051],{},[31,5304,5305],{},"--allow-exec"," replace\n",[31,5308,5309],{},"--allowWrite",[31,5311,5312],{},"--allowConfigEdit",[31,5314,5315],{},"--allowInput",[31,5317,5318],{},"--allowExec",[28,5320,5321,197,5324,2430],{},[31,5322,5323],{},"kubb init --dry-run",[31,5325,5292],{},[105,5327,5328],{},"To upgrade, replace any camelCase flag in a script or CI job with its kebab-case name. The CLI\nnow rejects an unrecognized flag with an error instead of silently ignoring it.",[1703,5330,5333],{"language":5331,"code":5332,"class":1706},"bash","# Before\nkubb studio --allowWrite --allowExec\n\n# After\nkubb studio --allow-write --allow-exec\n``` ([#4046](https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4046), [`e5ecdda`](https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002Fe5ecdda06acbd3b99c2716384b2a8ac56eedfad8))\n",[31,5334,5336,1743,5341,1743,5353,1743,5355,1743,5360,1743,5372,1743,5393],{"class":5335},"language-bash",[1711,5337,5338],{"class":1713,"style":1714},[1711,5339,5340],{"style":5039},"# Before",[1711,5342,5343,5345,5347,5350],{"class":1713,"style":1714},[1711,5344,80],{"style":1731},[1711,5346,5033],{"style":1751},[1711,5348,5349],{"style":1724}," --allowWrite",[1711,5351,5352],{"style":1724}," --allowExec",[1711,5354],{"class":1713,"style":1714},[1711,5356,5357],{"class":1713,"style":1714},[1711,5358,5359],{"style":5039},"# After",[1711,5361,5362,5364,5366,5369],{"class":1713,"style":1714},[1711,5363,80],{"style":1731},[1711,5365,5033],{"style":1751},[1711,5367,5368],{"style":1724}," --allow-write",[1711,5370,5371],{"style":1724}," --allow-exec",[1711,5373,5374,5377,5380,5382,5384,5387,5390],{"class":1713,"style":1714},[1711,5375,5376],{"style":1751},"``` ([#4046](",[1711,5378,5379],{"style":1731},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4046",[1711,5381,48],{"style":1751},[1711,5383,1755],{"style":1731},[1711,5385,5386],{"style":1751}," [`",[1711,5388,5389],{"style":1731},"e5ecdda",[1711,5391,5392],{"style":1751},"`](https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002Fe5ecdda06acbd3b99c2716384b2a8ac56eedfad8))",[1711,5394],{"class":1713,"style":1714},[15,5396,121],{"id":5397},"kubbstudio-29",[20,5399,56],{"id":5400},"bug-fixes-98",[25,5402,5403],{},[28,5404,5405,5436],{},[105,5406,5407,5408,5411,5412,5415,5416,5419,5420,141,5423,4944,5426,141,5429,5432,5433,5435],{},"Renamed the ",[31,5409,5410],{},"studio:ping"," heartbeat reply to ",[31,5413,5414],{},"studio:pong",", matching the ping\u002Fpong pattern\n",[31,5417,5418],{},"agent:ping"," already implies (",[31,5421,5422],{},"StudioPingMessage",[31,5424,5425],{},"StudioPongMessage",[31,5427,5428],{},"isStudioPingMessage",[31,5430,5431],{},"isStudioPongMessage","). This is a wire-protocol change: an agent\nrunning an older ",[31,5434,121],{}," and a Studio running the new one won't recognize each other's\nheartbeat reply. Update both sides together.",[105,5437,5438,5439,3167,5442,5445,5446,5449,5450,5453,5454,5457,5458,3167,5461,5463,5464,3167,5467,5469,5470,181,5474,48],{},"Also documented the full ",[31,5440,5441],{},"studio:",[31,5443,5444],{},"agent:"," message table in ",[31,5447,5448],{},"packages\u002Fstudio\u002Fsrc\u002Fprotocol\u002Findex.ts",",\nincluding why ",[31,5451,5452],{},"studio:generate"," has no dedicated ",[31,5455,5456],{},"agent:generate"," reply (its result rides the\n",[31,5459,5460],{},"agent:data",[31,5462,4940],{}," event stream instead, unlike ",[31,5465,5466],{},"studio:save",[31,5468,4890],{},",\nwhich reply directly). (",[44,5471,5473],{"href":5472},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4053","#4053",[44,5475,5477],{"href":5476},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F76dd283169ac312c269c398bee64944eee6f5b05",[31,5478,5479],{},"76dd283",[15,5481,103],{"id":5482},"contributors-60",[105,5484,107],{},[105,5486,5487],{},[44,5488,113],{"href":112},[10,5490,5492],{"id":5491},"v531--sep-15-2026","v5.3.1 — Sep 15, 2026",[15,5494,18],{"id":5495},"kubbcore-19",[20,5497,56],{"id":5498},"bug-fixes-99",[25,5500,5501],{},[28,5502,5503,5504,181,5508,48],{},"Report duplicate barrel exports instead of emitting an invalid barrel. (",[44,5505,5507],{"href":5506},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4043","#4043",[44,5509,5511],{"href":5510},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F2aad826b4f70cd7a82c30c8d6323c4fc7664848c",[31,5512,5513],{},"2aad826",[15,5515,103],{"id":5516},"contributors-61",[105,5518,107],{},[105,5520,5521],{},[44,5522,113],{"href":112},[10,5524,5526],{"id":5525},"v530--sep-15-2026","v5.3.0 — Sep 15, 2026",[15,5528,18],{"id":5529},"kubbcore-20",[20,5531,23],{"id":5532},"features-16",[25,5534,5535],{},[28,5536,5537,5538,181,5542,48],{},"Add an opt-in HTML report with generated files, plugin timings, and diagnostics. (",[44,5539,5541],{"href":5540},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4041","#4041",[44,5543,5545],{"href":5544},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002Fbe705de4279b0fa691e1b1d5ef001ad515b4bafc",[31,5546,5547],{},"be705de",[15,5549,103],{"id":5550},"contributors-62",[105,5552,107],{},[105,5554,5555],{},[44,5556,113],{"href":112},[10,5558,5560],{"id":5559},"v528--sep-15-2026","v5.2.8 — Sep 15, 2026",[15,5562,165],{"id":5563},"kubbcli-20",[20,5565,56],{"id":5566},"bug-fixes-100",[25,5568,5569],{},[28,5570,5571,5576,5615],{},[105,5572,670,5573,5575],{},[31,5574,829],{}," to generate and publish a Kubb Studio snapshot from any CI, not only GitHub Actions.",[25,5577,5578,5581,5589,5596,5603],{},[28,5579,5580],{},"Registers or reuses a CI agent, connects it, queues a snapshot job, and polls until the tarball is ready.",[28,5582,5583,5584,1392,5587,2430],{},"Reads the organization CI API key from ",[31,5585,5586],{},"--token",[31,5588,833],{},[28,5590,5591,5592,5595],{},"Detects the calling CI (GitHub Actions, GitLab CI, Bitbucket Pipelines, CircleCI) to reuse one agent per pull or merge request, or takes an explicit ",[31,5593,5594],{},"--id"," on any other CI.",[28,5597,5598,5599,5602],{},"Prints a summary, or one JSON object with ",[31,5600,5601],{},"--json"," for a script to read.",[28,5604,5605,5607,5608,185,5611,5614],{},[31,5606,121],{}," now also exports ",[31,5609,5610],{},"createAgent",[31,5612,5613],{},"machineTokenFrom",", so a host can register a CI agent without hand-rolling the request.",[1703,5616,5618],{"language":5022,"code":5617,"class":1706},"KUBB_TOKEN=$KUBB_TOKEN kubb studio snapshot --json\n``` ([#4038](https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4038), [`4cd9f5e`](https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F4cd9f5e311e5dc6edb14287c13db0a5466b4e892))\n",[31,5619,5620,1743,5640,1743,5660],{"class":5026},[1711,5621,5622,5624,5627,5630,5632,5634,5637],{"class":1713,"style":1714},[1711,5623,833],{"style":1735},[1711,5625,5626],{"style":1717},"=",[1711,5628,5629],{"style":1735},"$KUBB_TOKEN ",[1711,5631,80],{"style":1731},[1711,5633,5033],{"style":1751},[1711,5635,5636],{"style":1751}," snapshot",[1711,5638,5639],{"style":1724}," --json",[1711,5641,5642,5645,5648,5650,5652,5654,5657],{"class":1713,"style":1714},[1711,5643,5644],{"style":1751},"``` ([#4038](",[1711,5646,5647],{"style":1731},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4038",[1711,5649,48],{"style":1751},[1711,5651,1755],{"style":1731},[1711,5653,5386],{"style":1751},[1711,5655,5656],{"style":1731},"4cd9f5e",[1711,5658,5659],{"style":1751},"`](https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F4cd9f5e311e5dc6edb14287c13db0a5466b4e892))",[1711,5661],{"class":1713,"style":1714},[15,5663,103],{"id":5664},"contributors-63",[105,5666,107],{},[105,5668,5669],{},[44,5670,113],{"href":112},[10,5672,5674],{"id":5673},"v527--sep-15-2026","v5.2.7 — Sep 15, 2026",[15,5676,165],{"id":5677},"kubbcli-21",[20,5679,56],{"id":5680},"bug-fixes-101",[25,5682,5683],{},[28,5684,5685,5686,48],{},"Create a separate Kubb Studio agent connection for each project directory while reusing the same agent within that directory. (",[44,5687,5689],{"href":5688},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002Faf87dbcc8bd77daabfa1ceb57f17366c83aab9d1",[31,5690,5691],{},"af87dbc",[15,5693,121],{"id":5694},"kubbstudio-30",[20,5696,56],{"id":5697},"bug-fixes-102",[25,5699,5700],{},[28,5701,670,5702,185,5704,5706,5707,5710,5711,181,5715,48],{},[31,5703,4113],{},[31,5705,5115],{}," for Studio's async ",[31,5708,5709],{},"\u002Fapi\u002Fjobs"," endpoints. (",[44,5712,5714],{"href":5713},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4035","#4035",[44,5716,5718],{"href":5717},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F5382ff06d685beb03f805e1a5dce4bba37aecb7d",[31,5719,5720],{},"5382ff0",[15,5722,103],{"id":5723},"contributors-64",[105,5725,107],{},[105,5727,5728],{},[44,5729,113],{"href":112},[10,5731,5733],{"id":5732},"v526--sep-14-2026","v5.2.6 — Sep 14, 2026",[15,5735,121],{"id":5736},"kubbstudio-31",[20,5738,56],{"id":5739},"bug-fixes-103",[25,5741,5742],{},[28,5743,5744,5745,48],{},"Add job ID correlation to Studio commands and streamed agent events. (",[44,5746,5748],{"href":5747},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F0a1e5537c5d1425af22081a04e51462e78baa947",[31,5749,5750],{},"0a1e553",[15,5752,103],{"id":5753},"contributors-65",[105,5755,107],{},[105,5757,5758],{},[44,5759,113],{"href":112},[10,5761,5763],{"id":5762},"v525--sep-14-2026","v5.2.5 — Sep 14, 2026",[15,5765,121],{"id":5766},"kubbstudio-32",[20,5768,56],{"id":5769},"bug-fixes-104",[25,5771,5772],{},[28,5773,5774,5781],{},[105,5775,5776,5777,5780],{},"Add a ",[31,5778,5779],{},"studio:ready"," acknowledgement so a host can tell \"the socket is open\" apart from \"Studio has registered this connection and will dispatch jobs to it\".",[105,5782,5783,5784,5787,5788,5790,5791,5793,5794,5796,5797,5799,5800,5803,5804,181,5808,48],{},"A connected socket announces itself with ",[31,5785,5786],{},"agent:connect"," but never waited for a reply, so a job could arrive at Studio moments before the agent was actually registered. ",[31,5789,5223],{}," now waits up to 10 seconds for ",[31,5792,5779],{}," after sending that handshake and fires a new ",[31,5795,5779],{}," hook once it lands, warning instead of failing if an older Studio never sends one. ",[31,5798,192],{}," prints ",[31,5801,5802],{},"✓ Ready to receive jobs"," once it does. (",[44,5805,5807],{"href":5806},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4028","#4028",[44,5809,5811],{"href":5810},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002Fb93eb640264f2905cf9b47e73c5f3c957938240e",[31,5812,5813],{},"b93eb64",[15,5815,103],{"id":5816},"contributors-66",[105,5818,107],{},[105,5820,5821],{},[44,5822,113],{"href":112},[10,5824,5826],{"id":5825},"v524--sep-14-2026","v5.2.4 — Sep 14, 2026",[15,5828,121],{"id":5829},"kubbstudio-33",[20,5831,56],{"id":5832},"bug-fixes-105",[25,5834,5835],{},[28,5836,5837,5846],{},[105,5838,5839,5840,5842,5843,5845],{},"Report the package a plugin ships from, so ",[31,5841,3369],{}," reaches Studio as ",[31,5844,3594],{}," while a third-party plugin keeps its own name.",[105,5847,5848,5849,5852,5853,181,5857,48],{},"The connect payload scoped every plugin name under ",[31,5850,5851],{},"@kubb\u002F",", which claimed a third-party plugin as one of Kubb's. It now follows the same rule the dependency check already used. (",[44,5854,5856],{"href":5855},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4026","#4026",[44,5858,5860],{"href":5859},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F628c98b012cb9b1f91201c7c071fb66c4283f511",[31,5861,5862],{},"628c98b",[15,5864,103],{"id":5865},"contributors-67",[105,5867,107],{},[105,5869,5870],{},[44,5871,113],{"href":112},[10,5873,5875],{"id":5874},"v523--sep-13-2026","v5.2.3 — Sep 13, 2026",[15,5877,165],{"id":5878},"kubbcli-22",[20,5880,56],{"id":5881},"bug-fixes-106",[25,5883,5884],{},[28,5885,5886,5888,5889,5892,5893,181,5897,48],{},[31,5887,2226],{}," now works with URL inputs. A remote document emits no filesystem events, so watch mode polls the URL (every 2 seconds) and regenerates when the response body changes. Each poll request times out after 10 seconds, so a hung server never stalls the watcher. An unreachable server is reported once per outage and polling continues. After recovery, a rebuild only happens when the document actually changed, unless the server was already down at startup, in which case the first successful poll regenerates so the output catches up. Previously ",[31,5890,5891],{},"--watch"," was silently ignored for URL inputs and the CLI exited after a single build. (",[44,5894,5896],{"href":5895},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4022","#4022",[44,5898,5900],{"href":5899},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F5f4fd2006e828838d221e46588440aaf6705bd38",[31,5901,5902],{},"5f4fd20",[15,5904,121],{"id":5905},"kubbstudio-34",[20,5907,56],{"id":5908},"bug-fixes-107",[25,5910,5911],{},[28,5912,5913,5914,181,5918,48],{},"Report installed peer dependency versions and missing dependencies with each generation result. (",[44,5915,5917],{"href":5916},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4021","#4021",[44,5919,5921],{"href":5920},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F6187109c97bd00d4cf17234b7383a43e84d4b71e",[31,5922,5923],{},"6187109",[15,5925,103],{"id":5926},"contributors-68",[105,5928,107],{},[105,5930,5931,181,5933],{},[44,5932,113],{"href":112},[44,5934,5936],{"href":5935},"https:\u002F\u002Fgithub.com\u002Ftachirodriguez","@tachirodriguez",[10,5938,5940],{"id":5939},"v522--sep-11-2026","v5.2.2 — Sep 11, 2026",[15,5942,610],{"id":5943},"kubbadapter-oas-13",[20,5945,56],{"id":5946},"bug-fixes-108",[25,5948,5949],{},[28,5950,1480,5951,3167,5953,5955,5956,5959,5960,5963,5964,181,5966,5969,5970,181,5974,48],{},[31,5952,3074],{},[31,5954,3077],{}," without a declared OpenAPI ",[31,5957,5958],{},"discriminator"," now infers one when a property\ncarries a distinct single literal value on every branch. ",[31,5961,5962],{},"UnionSchemaNode.discriminatorPropertyName","\nis set from that inference, so every printer that narrows on it (",[31,5965,3372],{},[31,5967,5968],{},"plugin-faker",")\npicks it up without reimplementing the same scan. (",[44,5971,5973],{"href":5972},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4019","#4019",[44,5975,5977],{"href":5976},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002Fc89f215e942a8b21294f7f35d83040cf10db951c",[31,5978,5979],{},"c89f215",[15,5981,103],{"id":5982},"contributors-69",[105,5984,107],{},[105,5986,5987],{},[44,5988,113],{"href":112},[10,5990,5992],{"id":5991},"v521--sep-10-2026","v5.2.1 — Sep 10, 2026",[15,5994,610],{"id":5995},"kubbadapter-oas-14",[20,5997,56],{"id":5998},"bug-fixes-109",[25,6000,6001],{},[28,6002,6003,6004,6006,6007,95,6009,181,6013,48],{},"Keep a binary response body under ",[31,6005,4333],{}," typed as a blob instead of falling\nback to ",[31,6008,3058],{},[44,6010,6012],{"href":6011},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4013","#4013",[44,6014,6016],{"href":6015},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002Fdd9a902b310b14be77560c79b131f2f08e182727",[31,6017,6018],{},"dd9a902",[15,6020,18],{"id":6021},"kubbcore-21",[20,6023,56],{"id":6024},"bug-fixes-110",[25,6026,6027],{},[28,6028,5776,6029,6032,6033,6036,6037,181,6041,48],{},[31,6030,6031],{},"kubb.dev\u002Fsponsors"," entry to each published package's ",[31,6034,6035],{},"funding"," field, alongside the\nexisting GitHub Sponsors and Open Collective links. (",[44,6038,6040],{"href":6039},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4007","#4007",[44,6042,6044],{"href":6043},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002Fb06373881532b71c9316600eaf40f096484fdb51",[31,6045,6046],{},"b063738",[15,6048,121],{"id":6049},"kubbstudio-35",[20,6051,56],{"id":6052},"bug-fixes-111",[25,6054,6055],{},[28,6056,6057,6066,6136],{},[105,6058,6059,6060,6062,6063,6065],{},"Trim ",[31,6061,121],{},"'s public API to what the ",[31,6064,192],{}," CLI command and the Docker agent\nactually use.",[25,6067,6068,6118],{},[28,6069,6070,6071,181,6074,4944,6077,181,6080,181,6083,6086,6087,6090,6091,6094,6095,181,6098,181,6101,4944,6104,181,6107,271,6110,6113,6114,6117],{},"Removed the unused hook context types ",[31,6072,6073],{},"StudioCommandStartContext",[31,6075,6076],{},"StudioCommandEndContext",[31,6078,6079],{},"StudioConnectingContext",[31,6081,6082],{},"StudioDisconnectedContext",[31,6084,6085],{},"StudioErrorContext",", and\n",[31,6088,6089],{},"StudioWarnContext"," from the package's root export. ",[31,6092,6093],{},"StudioConnectedContext"," stays exported.\nHook payloads for ",[31,6096,6097],{},"studio:connecting",[31,6099,6100],{},"studio:command:start",[31,6102,6103],{},"studio:command:end",[31,6105,6106],{},"studio:disconnected",[31,6108,6109],{},"studio:warn",[31,6111,6112],{},"studio:error"," still type-check through\n",[31,6115,6116],{},"Hookable\u003CKubbHooks>['hook']",", since the underlying types are still declared, just no longer\nimportable by name.",[28,6119,6120,6121,185,6124,6127,6128,6131,6132,6135],{},"Removed ",[31,6122,6123],{},"ConnectionOutcome",[31,6125,6126],{},"TokenRejection"," from the root export. Both stay inferable from\n",[31,6129,6130],{},"runConnection","'s return value and ",[31,6133,6134],{},"onTokenRejected"," callback.",[105,6137,6138,6139,6141,6142,6145,6146,181,6150,48],{},"Neither the CLI nor the Docker agent imports any of these by name, so this does not change their\nbehavior. A consumer that did import one of them by name gets the same type through inference at\nthe call site instead, such as ",[31,6140,6130],{},"'s return value or a ",[31,6143,6144],{},"hooks.hook('studio:warn', ...)","\ncallback's parameter. (",[44,6147,6149],{"href":6148},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F4012","#4012",[44,6151,6153],{"href":6152},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F109abe8a05d43cca35e93571456de882acff61e6",[31,6154,6155],{},"109abe8",[15,6157,103],{"id":6158},"contributors-70",[105,6160,107],{},[105,6162,6163,181,6167],{},[44,6164,6166],{"href":6165},"https:\u002F\u002Fgithub.com\u002FghettoDdOS","@ghettoDdOS",[44,6168,113],{"href":112},[10,6170,6172],{"id":6171},"v520--sep-9-2026","v5.2.0 — Sep 9, 2026",[15,6174,610],{"id":6175},"kubbadapter-oas-15",[20,6177,56],{"id":6178},"bug-fixes-112",[25,6180,6181],{},[28,6182,6183,6189,6190,6193,6194,48],{},[44,6184,6186],{"href":6185},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F5ccc52cad88cc7aa6943c96105f0ec6d6b2d4106",[31,6187,6188],{},"5ccc52c"," - Bump ",[31,6191,6192],{},"@readme\u002Fopenapi-parser"," to v8. Spec validation behavior is unchanged. (",[44,6195,6196],{"href":6185},[31,6197,6188],{},[15,6199,909],{"id":6200},"kubbast-5",[20,6202,23],{"id":6203},"features-17",[25,6205,6206],{},[28,6207,6208,6209,181,6213,48],{},"Add utilities for resolving object properties through references and intersections and for reading\nliteral values from enum schemas. Plugin authors can use these utilities to handle discriminated\nunions without implementing their own schema traversal. (",[44,6210,6212],{"href":6211},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F3989","#3989",[44,6214,6216],{"href":6215},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002Fa2b59246e2d26b04da4e0152f92423994f37623c",[31,6217,6218],{},"a2b5924",[15,6220,165],{"id":6221},"kubbcli-23",[20,6223,56],{"id":6224},"bug-fixes-113",[25,6226,6227,6244],{},[28,6228,6229,185,6231,6233,6234,181,6238,48],{},[31,6230,188],{},[31,6232,2226],{}," now print plain lines when the terminal cannot carry\nclack's gutter, such as a piped run or CI. They wrote box-drawing and cursor escapes into the\noutput before. Spinner steps print as lines there instead of disappearing with the animation. (",[44,6235,6237],{"href":6236},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F3983","#3983",[44,6239,6241],{"href":6240},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002Fd1b123e68c62cd7aac146aaa2079badfd1c4a234",[31,6242,6243],{},"d1b123e",[28,6245,6246,185,6248,6250,6251,185,6253,6255,6256,6259,6260,181,6264,48],{},[31,6247,721],{},[31,6249,41],{}," now load ",[31,6252,729],{},[31,6254,610],{}," only when their\ncommands run. Every other command, including ",[31,6257,6258],{},"kubb --help",", no longer touches either optional peer. (",[44,6261,6263],{"href":6262},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F3968","#3968",[44,6265,6267],{"href":6266},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F0e4dc4073c10ae53d98b5619cd2b4fa9e2622d9f",[31,6268,6269],{},"0e4dc40",[15,6271,18],{"id":6272},"kubbcore-22",[20,6274,56],{"id":6275},"bug-fixes-114",[25,6277,6278],{},[28,6279,6280,6281,6284,6285,181,6287,181,6289,6291,6292,181,6294,48],{},"Moved shared-utility logic used by only one package out of ",[31,6282,6283],{},"@internals\u002Futils"," and into that\npackage (",[31,6286,18],{},[31,6288,165],{},[31,6290,557],{},"). No public API or behavior changed. (",[44,6293,6263],{"href":6262},[44,6295,6296],{"href":6266},[31,6297,6269],{},[15,6299,121],{"id":6300},"kubbstudio-36",[20,6302,23],{"id":6303},"features-18",[25,6305,6306],{},[28,6307,6308,6309,181,6313,48],{},"Add the Kubb Studio CLI for connecting a local Kubb project to Kubb Studio. (",[44,6310,6312],{"href":6311},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F3972","#3972",[44,6314,6316],{"href":6315},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F0cd4c7b5033833f9a0db2935fc25a575daecf058",[31,6317,6318],{},"0cd4c7b",[15,6320,103],{"id":6321},"contributors-71",[105,6323,107],{},[105,6325,6326],{},[44,6327,113],{"href":112},[10,6329,6331],{"id":6330},"v510--sep-3-2026","v5.1.0 — Sep 3, 2026",[15,6333,610],{"id":6334},"kubbadapter-oas-16",[20,6336,23],{"id":6337},"features-19",[25,6339,6340],{},[28,6341,6342,6358,6368,6423],{},[105,6343,6344,6345,6347,6348,181,6351,271,6354,6357],{},"Let ",[31,6346,2364],{}," set ",[31,6349,6350],{},"date-time",[31,6352,6353],{},"date",[31,6355,6356],{},"time"," independently, instead of one value driving all three",[105,6359,6360,6361,6364,6365,6367],{},"Pass an object to represent timestamps as a JS ",[31,6362,6363],{},"Date"," while keeping date-only and time-only fields as strings, since ",[31,6366,6363],{}," cannot round-trip those without inventing a timezone.",[1703,6369,6371],{"language":72,"code":6370,"class":1706},"adapterOas({\n  dateType: {\n    dateTime: 'date',\n    date: 'string',\n    time: 'string',\n  },\n})",[31,6372,6373,1743,6381,1743,6386,1743,6396,1743,6406,1743,6415,1743,6419],{"class":1709},[1711,6374,6375,6378],{"class":1713,"style":1714},[1711,6376,6377],{"style":1731},"adapterOas",[1711,6379,6380],{"style":1735},"({",[1711,6382,6383],{"class":1713,"style":1714},[1711,6384,6385],{"style":1735},"  dateType: {",[1711,6387,6388,6391,6394],{"class":1713,"style":1714},[1711,6389,6390],{"style":1735},"    dateTime: ",[1711,6392,6393],{"style":1751},"'date'",[1711,6395,1755],{"style":1735},[1711,6397,6398,6401,6404],{"class":1713,"style":1714},[1711,6399,6400],{"style":1735},"    date: ",[1711,6402,6403],{"style":1751},"'string'",[1711,6405,1755],{"style":1735},[1711,6407,6408,6411,6413],{"class":1713,"style":1714},[1711,6409,6410],{"style":1735},"    time: ",[1711,6412,6403],{"style":1751},[1711,6414,1755],{"style":1735},[1711,6416,6417],{"class":1713,"style":1714},[1711,6418,1809],{"style":1735},[1711,6420,6421],{"class":1713,"style":1714},[1711,6422,1814],{"style":1735},[105,6424,6425,6426,6429,6430,181,6434,48],{},"The scalar form (",[31,6427,6428],{},"dateType: 'date'",") still applies one value to all three formats. (",[44,6431,6433],{"href":6432},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F3957","#3957",[44,6435,6437],{"href":6436},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F9fca8e9ba16f05f29c852123c8696f7b6036c4a9",[31,6438,6439],{},"9fca8e9",[20,6441,56],{"id":6442},"bug-fixes-115",[25,6444,6445],{},[28,6446,6447,6448,6451,6452,6455,6456,3336,6459,181,6463,48],{},"Explicit ",[31,6449,6450],{},"types"," fields for each package.json ",[31,6453,6454],{},"exports"," entry, so that it works with tsconfig.json ",[31,6457,6458],{},"moduleResolution: 'bundler'",[44,6460,6462],{"href":6461},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F3964","#3964",[44,6464,6466],{"href":6465},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002Fbe4cd1770a34f547d1f1f60bd165c4228fef5053",[31,6467,6468],{},"be4cd17",[15,6470,103],{"id":6471},"contributors-72",[105,6473,107],{},[105,6475,6476],{},[44,6477,113],{"href":112},[10,6479,6481],{"id":6480},"v506--sep-2-2026","v5.0.6 — Sep 2, 2026",[15,6483,165],{"id":6484},"kubbcli-24",[20,6486,56],{"id":6487},"bug-fixes-116",[25,6489,6490],{},[28,6491,2574,6492,1410,6494,185,6496,6498,6499,6501,6502,181,6506,48],{},[31,6493,5292],{},[31,6495,1139],{},[31,6497,1146],{}," to preview a run without writing files, installing packages, formatting, linting, or running post-generate commands. When an AI coding agent runs the CLI, ",[31,6500,1139],{}," now uses the plain logger instead of the interactive one, and anonymous telemetry records the agent's name. (",[44,6503,6505],{"href":6504},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F3951","#3951",[44,6507,6509],{"href":6508},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F9849de3387ccfdb4e29c92e42e1e0429f3325c83",[31,6510,6511],{},"9849de3",[15,6513,103],{"id":6514},"contributors-73",[105,6516,107],{},[105,6518,6519],{},[44,6520,113],{"href":112},[10,6522,6524],{"id":6523},"v505--aug-31-2026","v5.0.5 — Aug 31, 2026",[15,6526,18],{"id":6527},"kubbcore-23",[20,6529,56],{"id":6530},"bug-fixes-117",[25,6532,6533],{},[28,6534,6535,6541,6542,48],{},[44,6536,6538],{"href":6537},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F2869e6d390265835436e9bd5702852f7c8bb8209",[31,6539,6540],{},"2869e6d"," - Avoids duplicate filesystem reads during generated file writes and uses native Node.js promise timers in asynchronous tests. (",[44,6543,6544],{"href":6537},[31,6545,6540],{},[10,6547,6549],{"id":6548},"v504--aug-28-2026","v5.0.4 — Aug 28, 2026",[15,6551,503],{"id":6552},"unplugin-kubb-3",[20,6554,56],{"id":6555},"bug-fixes-118",[25,6557,6558],{},[28,6559,6560,6566],{},[105,6561,6562,6563,6565],{},"Move ",[31,6564,503],{}," past its squatted npm version range.",[105,6567,6568,6569,6571,6572,6574,6575,185,6577,95,6580,181,6584,48],{},"Versions 5.0.1 through 5.0.30 were already published on npm from ",[31,6570,503],{},"'s\npre-monorepo history and depend on kubb v4, so the package's version was set directly to\n5.0.31 to clear that range. This changeset picks up from that 5.0.31 baseline and puts\n",[31,6573,503],{}," back through the normal release process, independent of ",[31,6576,80],{},[31,6578,6579],{},"@kubb\u002F*",[44,6581,6583],{"href":6582},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F3940","#3940",[44,6585,6587],{"href":6586},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002Fb45071e996d6607c62eaa31c88cc47ab2b5243c5",[31,6588,6589],{},"b45071e",[15,6591,103],{"id":6592},"contributors-74",[105,6594,107],{},[105,6596,6597],{},[44,6598,113],{"href":112},[10,6600,6602],{"id":6601},"v503--aug-27-2026","v5.0.3 — Aug 27, 2026",[15,6604,610],{"id":6605},"kubbadapter-oas-17",[20,6607,56],{"id":6608},"bug-fixes-119",[25,6610,6611],{},[28,6612,6613,6614,3336,6617,181,6621,48],{},"Keep every discriminator mapping key that targets the same schema, and apply the discriminant to children declared with ",[31,6615,6616],{},"allOf",[44,6618,6620],{"href":6619},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F3929","#3929",[44,6622,6624],{"href":6623},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F58d96255713042eadefe352103aa517661025297",[31,6625,6626],{},"58d9625",[15,6628,103],{"id":6629},"contributors-75",[105,6631,107],{},[105,6633,6634],{},[44,6635,3128],{"href":3127},[10,6637,6639],{"id":6638},"v502--aug-24-2026","v5.0.2 — Aug 24, 2026",[15,6641,557],{"id":6642},"kubbkit-3",[20,6644,56],{"id":6645},"bug-fixes-120",[25,6647,6648],{},[28,6649,6650,6660],{},[105,6651,1278,6652,6655,6656,6659],{},[31,6653,6654],{},"Url.toPath"," producing route masks that ",[31,6657,6658],{},"path-to-regexp"," (used by MSW\u002FExpress) rejects or misparses:",[25,6661,6662,6673],{},[28,6663,6664,6665,6668,6669,6672],{},"A parameter name starting with a character outside ",[31,6666,6667],{},"[A-Za-z0-9_]"," (e.g. ",[31,6670,6671],{},"{$id}",") now sanitizes to a safe capture name instead of keeping the disallowed character.",[28,6674,6675,6676,185,6679,6682,6683,181,6686,6689,6690,181,6694,48],{},"Distinct parameter names that normalize to the same identifier (e.g. ",[31,6677,6678],{},"{group-id}",[31,6680,6681],{},"{group.id}",") are now deduplicated with an incrementing suffix (",[31,6684,6685],{},"groupId",[31,6687,6688],{},"groupId2",") instead of producing two identically named captures. (",[44,6691,6693],{"href":6692},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F3922","#3922",[44,6695,6697],{"href":6696},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F56a072c036e2b5d44fb8ac278ebd0800c583975a",[31,6698,6699],{},"56a072c",[15,6701,103],{"id":6702},"contributors-76",[105,6704,107],{},[105,6706,6707],{},[44,6708,113],{"href":112},[10,6710,6712],{"id":6711},"v501--aug-21-2026","v5.0.1 — Aug 21, 2026",[15,6714,610],{"id":6715},"kubbadapter-oas-18",[20,6717,56],{"id":6718},"bug-fixes-121",[25,6720,6721,6751],{},[28,6722,6723,6724,193,6726,6729,6730,6733,6734,6737,6738,6740,6741,181,6745,48],{},"Fix an OpenAPI 3.1 multi-type array collapsing to one type when paired with ",[31,6725,3636],{},[31,6727,6728],{},"type: [\"null\", \"integer\", \"string\"], format: \"int32\""," generated ",[31,6731,6732],{},"integer | null",", dropping ",[31,6735,6736],{},"string",". The multi-type rule now runs before ",[31,6739,3636],{},", so each type parses on its own. (",[44,6742,6744],{"href":6743},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F3916","#3916",[44,6746,6748],{"href":6747},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F3d0098c51be704557f735ec09d50a43218f808dc",[31,6749,6750],{},"3d0098c",[28,6752,6753,6754,6756,6757,6729,6760,1887,6762,6765,6766,6769,6770,6772,6773,6776,6777,181,6781,48],{},"Fix an OpenAPI 3.1 multi-type array dropping its other types when ",[31,6755,1483],{}," came first. ",[31,6758,6759],{},"type: [\"null\", \"string\"]",[31,6761,1483],{},[31,6763,6764],{},"string | null",", while ",[31,6767,6768],{},"type: [\"string\", \"null\"]"," generated the right type, so the output depended on the order the types happened to be written in. The normalized type now takes the first non-",[31,6771,1483],{}," entry, and ",[31,6774,6775],{},"type: [\"null\"]"," stays a null schema. (",[44,6778,6780],{"href":6779},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F3912","#3912",[44,6782,6784],{"href":6783},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F331558ef615cdd1b6a4701c3c67176ed46370771",[31,6785,6786],{},"331558e",[15,6788,165],{"id":6789},"kubbcli-25",[20,6791,56],{"id":6792},"bug-fixes-122",[25,6794,6795],{},[28,6796,6797,6798,6801,6802,6805,6806,181,6810,48],{},"Bump ",[31,6799,6800],{},"verkit"," to 0.4.0 and ",[31,6803,6804],{},"@tmcp\u002Ftransport-stdio"," to 0.5.0. (",[44,6807,6809],{"href":6808},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F3909","#3909",[44,6811,6813],{"href":6812},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002F77e95a7ca0ee8c2e9bec5be474205e97bce0a54b",[31,6814,6815],{},"77e95a7",[15,6817,557],{"id":6818},"kubbkit-4",[20,6820,56],{"id":6821},"bug-fixes-123",[25,6823,6824],{},[28,6825,1278,6826,6828,6829,6832,6833,6836,6837,6839,6840,6843,6844,6847,6848,6850,6851,6853,6854,6856,6857,95,6860,181,6864,48],{},[31,6827,6654],{}," producing an invalid Express-style route for a hyphenated path parameter (e.g. ",[31,6830,6831],{},"{point-id}"," became ",[31,6834,6835],{},":point-id","). ",[31,6838,6658],{}," treats a hyphen as ending the parameter name, so the generated MSW handler matched ",[31,6841,6842],{},":point"," followed by a literal ",[31,6845,6846],{},"-id"," and rejected valid values. ",[31,6849,6654],{}," now camelCases the parameter name the same way ",[31,6852,1448],{}," already does, so ",[31,6855,6831],{}," becomes ",[31,6858,6859],{},":pointId",[44,6861,6863],{"href":6862},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fpull\u002F3895","#3895",[44,6865,6867],{"href":6866},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Fcommit\u002Fbf9bdc823a2fe06225d2a01b93caa618372e6c6b",[31,6868,6869],{},"bf9bdc8",[15,6871,103],{"id":6872},"contributors-77",[105,6874,107],{},[105,6876,6877],{},[44,6878,113],{"href":112},[10,6880,6882],{"id":6881},"v500","v5.0.0",[105,6884,6885,6886,6890],{},"Kubb v5 rebuilds code generation around adapters, a universal AST, parsers, and storage, and generates code up to 5.4x faster than v4. Config gets shorter, generated client calls change shape, and plugins move to their own repo (",[44,6887,6889],{"href":6888},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fplugins","kubb-labs\u002Fplugins",").",[105,6892,6893,6894,6898,6899,6903],{},"Read the ",[44,6895,6897],{"href":6896},"https:\u002F\u002Fkubb.dev\u002Fblog\u002Fv5","release blog post"," for the highlights, and the ",[44,6900,6902],{"href":6901},"https:\u002F\u002Fkubb.dev\u002Fdocs\u002F5.x\u002Fhow-to\u002Fmigration","migration guide"," for the full, per-package breaking-change list and upgrade steps.",[105,6905,6906,6907,2430],{},"For prior releases, see ",[44,6908,6910],{"href":6909},"https:\u002F\u002Fgithub.com\u002Fkubb-labs\u002Fkubb\u002Freleases","GitHub Releases",{"title":6912,"searchDepth":6913,"depth":6913,"links":6914},"",5,[6915,6930,6936,6948,6954,6960,6966,6972,6978,6984,6993,7005,7011,7024,7033,7039,7066,7072,7078,7099,7108,7114,7120,7126,7139,7146,7152,7164,7170,7182,7220,7229,7235,7250,7256,7262,7268,7274,7283,7289,7295,7304,7310,7316,7322,7328,7334,7340,7346,7355,7361,7367,7373,7379,7391,7397,7403,7409,7415,7421,7427,7436,7442,7448,7454,7463,7469,7475,7481,7490,7496,7508,7526,7533,7539,7544,7550,7556,7562,7574],{"id":12,"depth":6916,"text":13,"children":6917},2,[6918,6923,6926,6929],{"id":17,"depth":6919,"text":18,"children":6920},3,[6921],{"id":22,"depth":6922,"text":23},4,{"id":51,"depth":6919,"text":52,"children":6924},[6925],{"id":55,"depth":6922,"text":56},{"id":80,"depth":6919,"text":80,"children":6927},[6928],{"id":83,"depth":6922,"text":56},{"id":102,"depth":6919,"text":103},{"id":116,"depth":6916,"text":117,"children":6931},[6932,6935],{"id":120,"depth":6919,"text":121,"children":6933},[6934],{"id":124,"depth":6922,"text":56},{"id":151,"depth":6919,"text":103},{"id":160,"depth":6916,"text":161,"children":6937},[6938,6941,6944,6947],{"id":164,"depth":6919,"text":165,"children":6939},[6940],{"id":168,"depth":6922,"text":56},{"id":207,"depth":6919,"text":18,"children":6942},[6943],{"id":210,"depth":6922,"text":56},{"id":242,"depth":6919,"text":121,"children":6945},[6946],{"id":245,"depth":6922,"text":56},{"id":285,"depth":6919,"text":103},{"id":294,"depth":6916,"text":295,"children":6949},[6950,6953],{"id":298,"depth":6919,"text":121,"children":6951},[6952],{"id":301,"depth":6922,"text":56},{"id":327,"depth":6919,"text":103},{"id":336,"depth":6916,"text":337,"children":6955},[6956,6959],{"id":340,"depth":6919,"text":121,"children":6957},[6958],{"id":343,"depth":6922,"text":56},{"id":355,"depth":6919,"text":103},{"id":364,"depth":6916,"text":365,"children":6961},[6962,6965],{"id":368,"depth":6919,"text":121,"children":6963},[6964],{"id":371,"depth":6922,"text":56},{"id":393,"depth":6919,"text":103},{"id":402,"depth":6916,"text":403,"children":6967},[6968,6971],{"id":406,"depth":6919,"text":165,"children":6969},[6970],{"id":409,"depth":6922,"text":56},{"id":428,"depth":6919,"text":103},{"id":437,"depth":6916,"text":438,"children":6973},[6974,6977],{"id":441,"depth":6919,"text":18,"children":6975},[6976],{"id":444,"depth":6922,"text":23},{"id":469,"depth":6919,"text":103},{"id":480,"depth":6916,"text":481,"children":6979},[6980,6983],{"id":484,"depth":6919,"text":485,"children":6981},[6982],{"id":488,"depth":6922,"text":56},{"id":517,"depth":6919,"text":103},{"id":526,"depth":6916,"text":527,"children":6985},[6986,6989,6992],{"id":530,"depth":6919,"text":485,"children":6987},[6988],{"id":533,"depth":6922,"text":56},{"id":566,"depth":6919,"text":121,"children":6990},[6991],{"id":569,"depth":6922,"text":56},{"id":596,"depth":6919,"text":103},{"id":605,"depth":6916,"text":606,"children":6994},[6995,6998,7001,7004],{"id":609,"depth":6919,"text":610,"children":6996},[6997],{"id":613,"depth":6922,"text":56},{"id":628,"depth":6919,"text":18,"children":6999},[7000],{"id":631,"depth":6922,"text":56},{"id":647,"depth":6919,"text":121,"children":7002},[7003],{"id":650,"depth":6922,"text":56},{"id":693,"depth":6919,"text":103},{"id":702,"depth":6916,"text":703,"children":7006},[7007,7010],{"id":706,"depth":6919,"text":165,"children":7008},[7009],{"id":709,"depth":6922,"text":56},{"id":737,"depth":6919,"text":103},{"id":746,"depth":6916,"text":747,"children":7012},[7013,7017,7020,7023],{"id":750,"depth":6919,"text":610,"children":7014},[7015,7016],{"id":753,"depth":6922,"text":23},{"id":780,"depth":6922,"text":56},{"id":811,"depth":6919,"text":165,"children":7018},[7019],{"id":814,"depth":6922,"text":56},{"id":841,"depth":6919,"text":121,"children":7021},[7022],{"id":844,"depth":6922,"text":23},{"id":871,"depth":6919,"text":103},{"id":882,"depth":6916,"text":883,"children":7025},[7026,7029,7032],{"id":886,"depth":6919,"text":610,"children":7027},[7028],{"id":889,"depth":6922,"text":56},{"id":908,"depth":6919,"text":909,"children":7030},[7031],{"id":912,"depth":6922,"text":56},{"id":954,"depth":6919,"text":103},{"id":965,"depth":6916,"text":966,"children":7034},[7035,7038],{"id":969,"depth":6919,"text":121,"children":7036},[7037],{"id":972,"depth":6922,"text":56},{"id":1000,"depth":6919,"text":103},{"id":1009,"depth":6916,"text":1010,"children":7040},[7041,7044,7047,7050,7053,7056,7059,7062,7065],{"id":1013,"depth":6919,"text":909,"children":7042},[7043],{"id":1016,"depth":6922,"text":56},{"id":1058,"depth":6919,"text":165,"children":7045},[7046],{"id":1061,"depth":6922,"text":56},{"id":1075,"depth":6919,"text":18,"children":7048},[7049],{"id":1078,"depth":6922,"text":56},{"id":1113,"depth":6919,"text":557,"children":7051},[7052],{"id":1116,"depth":6922,"text":56},{"id":1129,"depth":6919,"text":729,"children":7054},[7055],{"id":1132,"depth":6922,"text":56},{"id":1154,"depth":6919,"text":1155,"children":7057},[7058],{"id":1158,"depth":6922,"text":56},{"id":1174,"depth":6919,"text":1175,"children":7060},[7061],{"id":1178,"depth":6922,"text":56},{"id":503,"depth":6919,"text":503,"children":7063},[7064],{"id":1197,"depth":6922,"text":56},{"id":1224,"depth":6919,"text":103},{"id":1233,"depth":6916,"text":1234,"children":7067},[7068,7071],{"id":1237,"depth":6919,"text":165,"children":7069},[7070],{"id":1240,"depth":6922,"text":56},{"id":1257,"depth":6919,"text":103},{"id":1266,"depth":6916,"text":1267,"children":7073},[7074,7077],{"id":1270,"depth":6919,"text":18,"children":7075},[7076],{"id":1273,"depth":6922,"text":56},{"id":1293,"depth":6919,"text":103},{"id":1302,"depth":6916,"text":1303,"children":7079},[7080,7083,7086,7089,7092,7095,7098],{"id":1306,"depth":6919,"text":610,"children":7081},[7082],{"id":1309,"depth":6922,"text":56},{"id":1329,"depth":6919,"text":909,"children":7084},[7085],{"id":1332,"depth":6922,"text":56},{"id":1360,"depth":6919,"text":165,"children":7087},[7088],{"id":1363,"depth":6922,"text":56},{"id":1377,"depth":6919,"text":18,"children":7090},[7091],{"id":1380,"depth":6922,"text":56},{"id":1438,"depth":6919,"text":557,"children":7093},[7094],{"id":1441,"depth":6922,"text":56},{"id":1456,"depth":6919,"text":121,"children":7096},[7097],{"id":1459,"depth":6922,"text":56},{"id":1492,"depth":6919,"text":103},{"id":1503,"depth":6916,"text":1504,"children":7100},[7101,7104,7107],{"id":1507,"depth":6919,"text":165,"children":7102},[7103],{"id":1510,"depth":6922,"text":23},{"id":1542,"depth":6919,"text":503,"children":7105},[7106],{"id":1545,"depth":6922,"text":56},{"id":1586,"depth":6919,"text":103},{"id":1595,"depth":6916,"text":1596,"children":7109},[7110,7113],{"id":1599,"depth":6919,"text":18,"children":7111},[7112],{"id":1602,"depth":6922,"text":23},{"id":1622,"depth":6919,"text":103},{"id":1631,"depth":6916,"text":1632,"children":7115},[7116,7119],{"id":1635,"depth":6919,"text":18,"children":7117},[7118],{"id":1638,"depth":6922,"text":23},{"id":1662,"depth":6919,"text":103},{"id":1671,"depth":6916,"text":1672,"children":7121},[7122,7125],{"id":1675,"depth":6919,"text":18,"children":7123},[7124],{"id":1678,"depth":6922,"text":23},{"id":1817,"depth":6919,"text":103},{"id":1826,"depth":6916,"text":1827,"children":7127},[7128,7131,7135,7138],{"id":1830,"depth":6919,"text":165,"children":7129},[7130],{"id":1833,"depth":6922,"text":23},{"id":1851,"depth":6919,"text":18,"children":7132},[7133,7134],{"id":1854,"depth":6922,"text":23},{"id":1896,"depth":6922,"text":56},{"id":1919,"depth":6919,"text":1920,"children":7136},[7137],{"id":1923,"depth":6922,"text":56},{"id":1948,"depth":6919,"text":103},{"id":1957,"depth":6916,"text":1958,"children":7140},[7141,7145],{"id":1961,"depth":6919,"text":18,"children":7142},[7143,7144],{"id":1964,"depth":6922,"text":23},{"id":1988,"depth":6922,"text":56},{"id":2007,"depth":6919,"text":103},{"id":2016,"depth":6916,"text":2017,"children":7147},[7148,7151],{"id":2020,"depth":6919,"text":18,"children":7149},[7150],{"id":2023,"depth":6922,"text":23},{"id":2087,"depth":6919,"text":103},{"id":2096,"depth":6916,"text":2097,"children":7153},[7154,7157,7160,7163],{"id":2100,"depth":6919,"text":18,"children":7155},[7156],{"id":2103,"depth":6922,"text":56},{"id":2128,"depth":6919,"text":729,"children":7158},[7159],{"id":2131,"depth":6922,"text":56},{"id":2143,"depth":6919,"text":121,"children":7161},[7162],{"id":2146,"depth":6922,"text":56},{"id":2161,"depth":6919,"text":103},{"id":2170,"depth":6916,"text":2171,"children":7165},[7166,7169],{"id":2174,"depth":6919,"text":121,"children":7167},[7168],{"id":2177,"depth":6922,"text":56},{"id":2202,"depth":6919,"text":103},{"id":2211,"depth":6916,"text":2212,"children":7171},[7172,7175,7178,7181],{"id":2215,"depth":6919,"text":165,"children":7173},[7174],{"id":2218,"depth":6922,"text":56},{"id":2240,"depth":6919,"text":18,"children":7176},[7177],{"id":2243,"depth":6922,"text":56},{"id":2282,"depth":6919,"text":121,"children":7179},[7180],{"id":2285,"depth":6922,"text":56},{"id":2309,"depth":6919,"text":103},{"id":2318,"depth":6916,"text":2319,"children":7183},[7184,7187,7190,7193,7197,7200,7203,7206,7209,7212,7216,7219],{"id":2322,"depth":6919,"text":610,"children":7185},[7186],{"id":2325,"depth":6922,"text":56},{"id":2346,"depth":6919,"text":909,"children":7188},[7189],{"id":2349,"depth":6922,"text":56},{"id":2458,"depth":6919,"text":165,"children":7191},[7192],{"id":2461,"depth":6922,"text":56},{"id":2550,"depth":6919,"text":18,"children":7194},[7195,7196],{"id":2553,"depth":6922,"text":23},{"id":2640,"depth":6922,"text":56},{"id":2751,"depth":6919,"text":557,"children":7198},[7199],{"id":2754,"depth":6922,"text":56},{"id":2790,"depth":6919,"text":729,"children":7201},[7202],{"id":2793,"depth":6922,"text":56},{"id":2814,"depth":6919,"text":52,"children":7204},[7205],{"id":2817,"depth":6922,"text":56},{"id":2858,"depth":6919,"text":1920,"children":7207},[7208],{"id":2861,"depth":6922,"text":56},{"id":2891,"depth":6919,"text":1175,"children":7210},[7211],{"id":2894,"depth":6922,"text":56},{"id":2933,"depth":6919,"text":121,"children":7213},[7214,7215],{"id":2936,"depth":6922,"text":23},{"id":2960,"depth":6922,"text":56},{"id":2982,"depth":6919,"text":503,"children":7217},[7218],{"id":2985,"depth":6922,"text":56},{"id":3011,"depth":6919,"text":103},{"id":3020,"depth":6916,"text":3021,"children":7221},[7222,7225,7228],{"id":3024,"depth":6919,"text":610,"children":7223},[7224],{"id":3027,"depth":6922,"text":56},{"id":3091,"depth":6919,"text":165,"children":7226},[7227],{"id":3094,"depth":6922,"text":56},{"id":3118,"depth":6919,"text":103},{"id":3131,"depth":6916,"text":3132,"children":7230},[7231,7234],{"id":3135,"depth":6919,"text":610,"children":7232},[7233],{"id":3138,"depth":6922,"text":56},{"id":3247,"depth":6919,"text":103},{"id":3256,"depth":6916,"text":3257,"children":7236},[7237,7240,7243,7246,7249],{"id":3260,"depth":6919,"text":610,"children":7238},[7239],{"id":3263,"depth":6922,"text":56},{"id":3292,"depth":6919,"text":165,"children":7241},[7242],{"id":3295,"depth":6922,"text":56},{"id":3349,"depth":6919,"text":52,"children":7244},[7245],{"id":3352,"depth":6922,"text":56},{"id":3389,"depth":6919,"text":121,"children":7247},[7248],{"id":3392,"depth":6922,"text":56},{"id":3425,"depth":6919,"text":103},{"id":3434,"depth":6916,"text":3435,"children":7251},[7252,7255],{"id":3438,"depth":6919,"text":165,"children":7253},[7254],{"id":3441,"depth":6922,"text":56},{"id":3479,"depth":6919,"text":103},{"id":3488,"depth":6916,"text":3489,"children":7257},[7258,7261],{"id":3492,"depth":6919,"text":121,"children":7259},[7260],{"id":3495,"depth":6922,"text":56},{"id":3524,"depth":6919,"text":103},{"id":3533,"depth":6916,"text":3534,"children":7263},[7264,7267],{"id":3537,"depth":6919,"text":18,"children":7265},[7266],{"id":3540,"depth":6922,"text":56},{"id":3558,"depth":6919,"text":103},{"id":3567,"depth":6916,"text":3568,"children":7269},[7270,7273],{"id":3571,"depth":6919,"text":610,"children":7271},[7272],{"id":3574,"depth":6922,"text":23},{"id":3610,"depth":6919,"text":103},{"id":3621,"depth":6916,"text":3622,"children":7275},[7276,7279,7282],{"id":3625,"depth":6919,"text":610,"children":7277},[7278],{"id":3628,"depth":6922,"text":56},{"id":3694,"depth":6919,"text":52,"children":7280},[7281],{"id":3697,"depth":6922,"text":56},{"id":3719,"depth":6919,"text":103},{"id":3732,"depth":6916,"text":3733,"children":7284},[7285,7288],{"id":3736,"depth":6919,"text":165,"children":7286},[7287],{"id":3739,"depth":6922,"text":56},{"id":3765,"depth":6919,"text":103},{"id":3774,"depth":6916,"text":3775,"children":7290},[7291,7294],{"id":3778,"depth":6919,"text":121,"children":7292},[7293],{"id":3781,"depth":6922,"text":56},{"id":3826,"depth":6919,"text":103},{"id":3835,"depth":6916,"text":3836,"children":7296},[7297,7300,7303],{"id":3839,"depth":6919,"text":165,"children":7298},[7299],{"id":3842,"depth":6922,"text":56},{"id":3863,"depth":6919,"text":80,"children":7301},[7302],{"id":3866,"depth":6922,"text":56},{"id":3884,"depth":6919,"text":103},{"id":3893,"depth":6916,"text":3894,"children":7305},[7306,7309],{"id":3897,"depth":6919,"text":165,"children":7307},[7308],{"id":3900,"depth":6922,"text":56},{"id":3936,"depth":6919,"text":103},{"id":3945,"depth":6916,"text":3946,"children":7311},[7312,7315],{"id":3949,"depth":6919,"text":18,"children":7313},[7314],{"id":3952,"depth":6922,"text":23},{"id":3989,"depth":6919,"text":103},{"id":3998,"depth":6916,"text":3999,"children":7317},[7318,7321],{"id":4002,"depth":6919,"text":121,"children":7319},[7320],{"id":4005,"depth":6922,"text":56},{"id":4068,"depth":6919,"text":103},{"id":4077,"depth":6916,"text":4078,"children":7323},[7324,7327],{"id":4081,"depth":6919,"text":121,"children":7325},[7326],{"id":4084,"depth":6922,"text":56},{"id":4170,"depth":6919,"text":103},{"id":4179,"depth":6916,"text":4180,"children":7329},[7330,7333],{"id":4183,"depth":6919,"text":121,"children":7331},[7332],{"id":4186,"depth":6922,"text":56},{"id":4204,"depth":6919,"text":103},{"id":4213,"depth":6916,"text":4214,"children":7335},[7336,7339],{"id":4217,"depth":6919,"text":121,"children":7337},[7338],{"id":4220,"depth":6922,"text":56},{"id":4251,"depth":6919,"text":103},{"id":4260,"depth":6916,"text":4261,"children":7341},[7342,7345],{"id":4264,"depth":6919,"text":18,"children":7343},[7344],{"id":4267,"depth":6922,"text":56},{"id":4302,"depth":6919,"text":103},{"id":4311,"depth":6916,"text":4312,"children":7347},[7348,7351,7354],{"id":4315,"depth":6919,"text":610,"children":7349},[7350],{"id":4318,"depth":6922,"text":56},{"id":4361,"depth":6919,"text":909,"children":7352},[7353],{"id":4364,"depth":6922,"text":56},{"id":4385,"depth":6919,"text":103},{"id":4394,"depth":6916,"text":4395,"children":7356},[7357,7360],{"id":4398,"depth":6919,"text":121,"children":7358},[7359],{"id":4401,"depth":6922,"text":56},{"id":4460,"depth":6919,"text":103},{"id":4469,"depth":6916,"text":4470,"children":7362},[7363,7366],{"id":4473,"depth":6919,"text":121,"children":7364},[7365],{"id":4476,"depth":6922,"text":56},{"id":4532,"depth":6919,"text":103},{"id":4541,"depth":6916,"text":4542,"children":7368},[7369,7372],{"id":4545,"depth":6919,"text":610,"children":7370},[7371],{"id":4548,"depth":6922,"text":56},{"id":4570,"depth":6919,"text":103},{"id":4579,"depth":6916,"text":4580,"children":7374},[7375,7378],{"id":4583,"depth":6919,"text":165,"children":7376},[7377],{"id":4586,"depth":6922,"text":56},{"id":4610,"depth":6919,"text":103},{"id":4619,"depth":6916,"text":4620,"children":7380},[7381,7384,7387,7390],{"id":4623,"depth":6919,"text":610,"children":7382},[7383],{"id":4626,"depth":6922,"text":56},{"id":4644,"depth":6919,"text":165,"children":7385},[7386],{"id":4647,"depth":6922,"text":56},{"id":4661,"depth":6919,"text":80,"children":7388},[7389],{"id":4664,"depth":6922,"text":56},{"id":4686,"depth":6919,"text":103},{"id":4695,"depth":6916,"text":4696,"children":7392},[7393,7396],{"id":4699,"depth":6919,"text":121,"children":7394},[7395],{"id":4702,"depth":6922,"text":56},{"id":4742,"depth":6919,"text":103},{"id":4751,"depth":6916,"text":4752,"children":7398},[7399,7402],{"id":4755,"depth":6919,"text":121,"children":7400},[7401],{"id":4758,"depth":6922,"text":56},{"id":4797,"depth":6919,"text":103},{"id":4806,"depth":6916,"text":4807,"children":7404},[7405,7408],{"id":4810,"depth":6919,"text":121,"children":7406},[7407],{"id":4813,"depth":6922,"text":56},{"id":4859,"depth":6919,"text":103},{"id":4868,"depth":6916,"text":4869,"children":7410},[7411,7414],{"id":4872,"depth":6919,"text":121,"children":7412},[7413],{"id":4875,"depth":6922,"text":56},{"id":5087,"depth":6919,"text":103},{"id":5096,"depth":6916,"text":5097,"children":7416},[7417,7420],{"id":5100,"depth":6919,"text":121,"children":7418},[7419],{"id":5103,"depth":6922,"text":56},{"id":5147,"depth":6919,"text":103},{"id":5156,"depth":6916,"text":5157,"children":7422},[7423,7426],{"id":5160,"depth":6919,"text":121,"children":7424},[7425],{"id":5163,"depth":6922,"text":56},{"id":5252,"depth":6919,"text":103},{"id":5261,"depth":6916,"text":5262,"children":7428},[7429,7432,7435],{"id":5265,"depth":6919,"text":165,"children":7430},[7431],{"id":5268,"depth":6922,"text":56},{"id":5397,"depth":6919,"text":121,"children":7433},[7434],{"id":5400,"depth":6922,"text":56},{"id":5482,"depth":6919,"text":103},{"id":5491,"depth":6916,"text":5492,"children":7437},[7438,7441],{"id":5495,"depth":6919,"text":18,"children":7439},[7440],{"id":5498,"depth":6922,"text":56},{"id":5516,"depth":6919,"text":103},{"id":5525,"depth":6916,"text":5526,"children":7443},[7444,7447],{"id":5529,"depth":6919,"text":18,"children":7445},[7446],{"id":5532,"depth":6922,"text":23},{"id":5550,"depth":6919,"text":103},{"id":5559,"depth":6916,"text":5560,"children":7449},[7450,7453],{"id":5563,"depth":6919,"text":165,"children":7451},[7452],{"id":5566,"depth":6922,"text":56},{"id":5664,"depth":6919,"text":103},{"id":5673,"depth":6916,"text":5674,"children":7455},[7456,7459,7462],{"id":5677,"depth":6919,"text":165,"children":7457},[7458],{"id":5680,"depth":6922,"text":56},{"id":5694,"depth":6919,"text":121,"children":7460},[7461],{"id":5697,"depth":6922,"text":56},{"id":5723,"depth":6919,"text":103},{"id":5732,"depth":6916,"text":5733,"children":7464},[7465,7468],{"id":5736,"depth":6919,"text":121,"children":7466},[7467],{"id":5739,"depth":6922,"text":56},{"id":5753,"depth":6919,"text":103},{"id":5762,"depth":6916,"text":5763,"children":7470},[7471,7474],{"id":5766,"depth":6919,"text":121,"children":7472},[7473],{"id":5769,"depth":6922,"text":56},{"id":5816,"depth":6919,"text":103},{"id":5825,"depth":6916,"text":5826,"children":7476},[7477,7480],{"id":5829,"depth":6919,"text":121,"children":7478},[7479],{"id":5832,"depth":6922,"text":56},{"id":5865,"depth":6919,"text":103},{"id":5874,"depth":6916,"text":5875,"children":7482},[7483,7486,7489],{"id":5878,"depth":6919,"text":165,"children":7484},[7485],{"id":5881,"depth":6922,"text":56},{"id":5905,"depth":6919,"text":121,"children":7487},[7488],{"id":5908,"depth":6922,"text":56},{"id":5926,"depth":6919,"text":103},{"id":5939,"depth":6916,"text":5940,"children":7491},[7492,7495],{"id":5943,"depth":6919,"text":610,"children":7493},[7494],{"id":5946,"depth":6922,"text":56},{"id":5982,"depth":6919,"text":103},{"id":5991,"depth":6916,"text":5992,"children":7497},[7498,7501,7504,7507],{"id":5995,"depth":6919,"text":610,"children":7499},[7500],{"id":5998,"depth":6922,"text":56},{"id":6021,"depth":6919,"text":18,"children":7502},[7503],{"id":6024,"depth":6922,"text":56},{"id":6049,"depth":6919,"text":121,"children":7505},[7506],{"id":6052,"depth":6922,"text":56},{"id":6158,"depth":6919,"text":103},{"id":6171,"depth":6916,"text":6172,"children":7509},[7510,7513,7516,7519,7522,7525],{"id":6175,"depth":6919,"text":610,"children":7511},[7512],{"id":6178,"depth":6922,"text":56},{"id":6200,"depth":6919,"text":909,"children":7514},[7515],{"id":6203,"depth":6922,"text":23},{"id":6221,"depth":6919,"text":165,"children":7517},[7518],{"id":6224,"depth":6922,"text":56},{"id":6272,"depth":6919,"text":18,"children":7520},[7521],{"id":6275,"depth":6922,"text":56},{"id":6300,"depth":6919,"text":121,"children":7523},[7524],{"id":6303,"depth":6922,"text":23},{"id":6321,"depth":6919,"text":103},{"id":6330,"depth":6916,"text":6331,"children":7527},[7528,7532],{"id":6334,"depth":6919,"text":610,"children":7529},[7530,7531],{"id":6337,"depth":6922,"text":23},{"id":6442,"depth":6922,"text":56},{"id":6471,"depth":6919,"text":103},{"id":6480,"depth":6916,"text":6481,"children":7534},[7535,7538],{"id":6484,"depth":6919,"text":165,"children":7536},[7537],{"id":6487,"depth":6922,"text":56},{"id":6514,"depth":6919,"text":103},{"id":6523,"depth":6916,"text":6524,"children":7540},[7541],{"id":6527,"depth":6919,"text":18,"children":7542},[7543],{"id":6530,"depth":6922,"text":56},{"id":6548,"depth":6916,"text":6549,"children":7545},[7546,7549],{"id":6552,"depth":6919,"text":503,"children":7547},[7548],{"id":6555,"depth":6922,"text":56},{"id":6592,"depth":6919,"text":103},{"id":6601,"depth":6916,"text":6602,"children":7551},[7552,7555],{"id":6605,"depth":6919,"text":610,"children":7553},[7554],{"id":6608,"depth":6922,"text":56},{"id":6629,"depth":6919,"text":103},{"id":6638,"depth":6916,"text":6639,"children":7557},[7558,7561],{"id":6642,"depth":6919,"text":557,"children":7559},[7560],{"id":6645,"depth":6922,"text":56},{"id":6702,"depth":6919,"text":103},{"id":6711,"depth":6916,"text":6712,"children":7563},[7564,7567,7570,7573],{"id":6715,"depth":6919,"text":610,"children":7565},[7566],{"id":6718,"depth":6922,"text":56},{"id":6789,"depth":6919,"text":165,"children":7568},[7569],{"id":6792,"depth":6922,"text":56},{"id":6818,"depth":6919,"text":557,"children":7571},[7572],{"id":6821,"depth":6922,"text":56},{"id":6872,"depth":6919,"text":103},{"id":6881,"depth":6916,"text":6882},"Track all updates, features, and improvements to Kubb","md",{"title":5,"description":7575,"layout":7578,"sidebar":7579,"pageClass":7580,"outline":6916},"doc",false,"changelog",{"layout":7578,"sidebar":7579,"pageClass":7580,"outline":6916},true,null,"\u002Fdocs\u002F5.x\u002Fchangelog",{"title":5,"description":7575},{"loc":7584},"kubb-labs\u002Fkubb\u002Fdocs\u002F5.x\u002Fchangelog.md","docs\u002F5.x\u002Fchangelog","1Zd8NdtRyBIcw1cJ8f3z0y2yOe8vm8LTsw5D2O0moU4",1792782243444]