@qijenchen/design-system 0.1.0-beta.13 → 0.1.0-beta.131

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1751) hide show
  1. package/AGENTS.md +8 -0
  2. package/CLAUDE.md +3 -199
  3. package/README.md +6 -4
  4. package/cli-init.mjs +30 -2
  5. package/dist/components/Accordion/accordion.d.ts +3 -3
  6. package/dist/components/Accordion/accordion.d.ts.map +1 -1
  7. package/dist/components/Accordion/accordion.js +6 -3
  8. package/dist/components/Accordion/accordion.js.map +1 -1
  9. package/dist/components/Accordion/index.d.ts +2 -0
  10. package/dist/components/Accordion/index.d.ts.map +1 -0
  11. package/dist/components/Accordion/index.js +9 -0
  12. package/dist/components/Accordion/index.js.map +1 -0
  13. package/dist/components/AccountMenu/account-menu.d.ts +93 -0
  14. package/dist/components/AccountMenu/account-menu.d.ts.map +1 -0
  15. package/dist/components/AccountMenu/account-menu.js +73 -0
  16. package/dist/components/AccountMenu/account-menu.js.map +1 -0
  17. package/dist/components/AccountMenu/index.d.ts +2 -0
  18. package/dist/components/AccountMenu/index.d.ts.map +1 -0
  19. package/dist/components/AccountMenu/index.js +6 -0
  20. package/dist/components/AccountMenu/index.js.map +1 -0
  21. package/dist/components/AgentPanel/agent-fab.d.ts +24 -0
  22. package/dist/components/AgentPanel/agent-fab.d.ts.map +1 -0
  23. package/dist/components/AgentPanel/agent-logo.d.ts +75 -0
  24. package/dist/components/AgentPanel/agent-logo.d.ts.map +1 -0
  25. package/dist/components/AgentPanel/agent-logo.js +371 -0
  26. package/dist/components/AgentPanel/agent-logo.js.map +1 -0
  27. package/dist/components/AgentPanel/agent-panel.d.ts +183 -0
  28. package/dist/components/AgentPanel/agent-panel.d.ts.map +1 -0
  29. package/dist/components/AgentPanel/agent-panel.js +900 -0
  30. package/dist/components/AgentPanel/agent-panel.js.map +1 -0
  31. package/dist/components/AgentPanel/index.d.ts +2 -0
  32. package/dist/components/AgentPanel/index.d.ts.map +1 -0
  33. package/dist/components/AgentPanel/index.js +16 -0
  34. package/dist/components/AgentPanel/index.js.map +1 -0
  35. package/dist/components/Alert/alert.d.ts +7 -2
  36. package/dist/components/Alert/alert.d.ts.map +1 -1
  37. package/dist/components/Alert/alert.js +12 -8
  38. package/dist/components/Alert/alert.js.map +1 -1
  39. package/dist/components/Alert/index.d.ts +2 -0
  40. package/dist/components/Alert/index.d.ts.map +1 -0
  41. package/dist/components/Alert/index.js +7 -0
  42. package/dist/components/Alert/index.js.map +1 -0
  43. package/dist/components/AppShell/_demo-helpers.d.ts +3 -1
  44. package/dist/components/AppShell/_demo-helpers.d.ts.map +1 -1
  45. package/dist/components/AppShell/app-shell.d.ts +19 -4
  46. package/dist/components/AppShell/app-shell.d.ts.map +1 -1
  47. package/dist/components/AppShell/app-shell.js +48 -11
  48. package/dist/components/AppShell/app-shell.js.map +1 -1
  49. package/dist/components/AppShell/index.d.ts +2 -0
  50. package/dist/components/AppShell/index.d.ts.map +1 -0
  51. package/dist/components/AppShell/index.js +8 -0
  52. package/dist/components/AppShell/index.js.map +1 -0
  53. package/dist/components/AspectRatio/aspect-ratio.d.ts +3 -2
  54. package/dist/components/AspectRatio/aspect-ratio.d.ts.map +1 -1
  55. package/dist/components/AspectRatio/aspect-ratio.js +4 -2
  56. package/dist/components/AspectRatio/aspect-ratio.js.map +1 -1
  57. package/dist/components/AspectRatio/index.d.ts +2 -0
  58. package/dist/components/AspectRatio/index.d.ts.map +1 -0
  59. package/dist/components/AspectRatio/index.js +6 -0
  60. package/dist/components/AspectRatio/index.js.map +1 -0
  61. package/dist/components/Avatar/avatar.d.ts +14 -7
  62. package/dist/components/Avatar/avatar.d.ts.map +1 -1
  63. package/dist/components/Avatar/avatar.js +24 -30
  64. package/dist/components/Avatar/avatar.js.map +1 -1
  65. package/dist/components/Avatar/index.d.ts +2 -0
  66. package/dist/components/Avatar/index.d.ts.map +1 -0
  67. package/dist/components/Avatar/index.js +6 -0
  68. package/dist/components/Avatar/index.js.map +1 -0
  69. package/dist/components/Badge/badge.d.ts +21 -9
  70. package/dist/components/Badge/badge.d.ts.map +1 -1
  71. package/dist/components/Badge/badge.js +9 -6
  72. package/dist/components/Badge/badge.js.map +1 -1
  73. package/dist/components/Badge/index.d.ts +2 -0
  74. package/dist/components/Badge/index.d.ts.map +1 -0
  75. package/dist/components/Badge/index.js +7 -0
  76. package/dist/components/Badge/index.js.map +1 -0
  77. package/dist/components/Breadcrumb/breadcrumb.d.ts +16 -3
  78. package/dist/components/Breadcrumb/breadcrumb.d.ts.map +1 -1
  79. package/dist/components/Breadcrumb/breadcrumb.js +21 -53
  80. package/dist/components/Breadcrumb/breadcrumb.js.map +1 -1
  81. package/dist/components/Breadcrumb/index.d.ts +2 -0
  82. package/dist/components/Breadcrumb/index.d.ts.map +1 -0
  83. package/dist/components/Breadcrumb/index.js +12 -0
  84. package/dist/components/Breadcrumb/index.js.map +1 -0
  85. package/dist/components/BulkActionBar/bulk-action-bar.d.ts +7 -4
  86. package/dist/components/BulkActionBar/bulk-action-bar.d.ts.map +1 -1
  87. package/dist/components/BulkActionBar/bulk-action-bar.js +8 -8
  88. package/dist/components/BulkActionBar/bulk-action-bar.js.map +1 -1
  89. package/dist/components/BulkActionBar/index.d.ts +2 -0
  90. package/dist/components/BulkActionBar/index.d.ts.map +1 -0
  91. package/dist/components/BulkActionBar/index.js +7 -0
  92. package/dist/components/BulkActionBar/index.js.map +1 -0
  93. package/dist/components/Button/button-group.d.ts +31 -5
  94. package/dist/components/Button/button-group.d.ts.map +1 -1
  95. package/dist/components/Button/button-group.js +31 -14
  96. package/dist/components/Button/button-group.js.map +1 -1
  97. package/dist/components/Button/button.d.ts +15 -14
  98. package/dist/components/Button/button.d.ts.map +1 -1
  99. package/dist/components/Button/button.js +94 -52
  100. package/dist/components/Button/button.js.map +1 -1
  101. package/dist/components/Button/index.d.ts +3 -0
  102. package/dist/components/Button/index.d.ts.map +1 -0
  103. package/dist/components/Button/index.js +11 -0
  104. package/dist/components/Button/index.js.map +1 -0
  105. package/dist/components/Calendar/calendar.d.ts +22 -19
  106. package/dist/components/Calendar/calendar.d.ts.map +1 -1
  107. package/dist/components/Calendar/calendar.js +180 -135
  108. package/dist/components/Calendar/calendar.js.map +1 -1
  109. package/dist/components/Calendar/index.d.ts +2 -0
  110. package/dist/components/Calendar/index.d.ts.map +1 -0
  111. package/dist/components/Calendar/index.js +6 -0
  112. package/dist/components/Calendar/index.js.map +1 -0
  113. package/dist/components/Carousel/carousel.d.ts +15 -9
  114. package/dist/components/Carousel/carousel.d.ts.map +1 -1
  115. package/dist/components/Carousel/carousel.js +91 -50
  116. package/dist/components/Carousel/carousel.js.map +1 -1
  117. package/dist/components/Carousel/index.d.ts +2 -0
  118. package/dist/components/Carousel/index.d.ts.map +1 -0
  119. package/dist/components/Carousel/index.js +11 -0
  120. package/dist/components/Carousel/index.js.map +1 -0
  121. package/dist/components/Chart/chart.d.ts +2 -2
  122. package/dist/components/Chart/chart.d.ts.map +1 -1
  123. package/dist/components/Chart/chart.js +5 -2
  124. package/dist/components/Chart/chart.js.map +1 -1
  125. package/dist/components/Chart/index.d.ts +2 -0
  126. package/dist/components/Chart/index.d.ts.map +1 -0
  127. package/dist/components/Chart/index.js +11 -0
  128. package/dist/components/Chart/index.js.map +1 -0
  129. package/dist/components/Checkbox/checkbox-group.d.ts +2 -1
  130. package/dist/components/Checkbox/checkbox-group.d.ts.map +1 -1
  131. package/dist/components/Checkbox/checkbox-group.js +21 -14
  132. package/dist/components/Checkbox/checkbox-group.js.map +1 -1
  133. package/dist/components/Checkbox/checkbox.d.ts +20 -11
  134. package/dist/components/Checkbox/checkbox.d.ts.map +1 -1
  135. package/dist/components/Checkbox/checkbox.js +117 -18
  136. package/dist/components/Checkbox/checkbox.js.map +1 -1
  137. package/dist/components/Checkbox/index.d.ts +3 -0
  138. package/dist/components/Checkbox/index.d.ts.map +1 -0
  139. package/dist/components/Checkbox/index.js +10 -0
  140. package/dist/components/Checkbox/index.js.map +1 -0
  141. package/dist/components/Chip/chip.d.ts +30 -11
  142. package/dist/components/Chip/chip.d.ts.map +1 -1
  143. package/dist/components/Chip/chip.js +83 -33
  144. package/dist/components/Chip/chip.js.map +1 -1
  145. package/dist/components/Chip/index.d.ts +2 -0
  146. package/dist/components/Chip/index.d.ts.map +1 -0
  147. package/dist/components/Chip/index.js +8 -0
  148. package/dist/components/Chip/index.js.map +1 -0
  149. package/dist/components/CircularProgress/circular-progress.d.ts +2 -3
  150. package/dist/components/CircularProgress/circular-progress.d.ts.map +1 -1
  151. package/dist/components/CircularProgress/circular-progress.js +5 -4
  152. package/dist/components/CircularProgress/circular-progress.js.map +1 -1
  153. package/dist/components/CircularProgress/index.d.ts +2 -0
  154. package/dist/components/CircularProgress/index.d.ts.map +1 -0
  155. package/dist/components/CircularProgress/index.js +6 -0
  156. package/dist/components/CircularProgress/index.js.map +1 -0
  157. package/dist/components/Coachmark/coachmark-story-helpers.d.ts +22 -0
  158. package/dist/components/Coachmark/coachmark-story-helpers.d.ts.map +1 -0
  159. package/dist/components/Coachmark/coachmark.d.ts +15 -6
  160. package/dist/components/Coachmark/coachmark.d.ts.map +1 -1
  161. package/dist/components/Coachmark/coachmark.js +12 -4
  162. package/dist/components/Coachmark/coachmark.js.map +1 -1
  163. package/dist/components/Coachmark/index.d.ts +2 -0
  164. package/dist/components/Coachmark/index.d.ts.map +1 -0
  165. package/dist/components/Coachmark/index.js +6 -0
  166. package/dist/components/Coachmark/index.js.map +1 -0
  167. package/dist/components/Combobox/combobox.d.ts +39 -15
  168. package/dist/components/Combobox/combobox.d.ts.map +1 -1
  169. package/dist/components/Combobox/combobox.js +169 -65
  170. package/dist/components/Combobox/combobox.js.map +1 -1
  171. package/dist/components/Combobox/index.d.ts +2 -0
  172. package/dist/components/Combobox/index.d.ts.map +1 -0
  173. package/dist/components/Combobox/index.js +6 -0
  174. package/dist/components/Combobox/index.js.map +1 -0
  175. package/dist/components/Command/command.d.ts +7 -3
  176. package/dist/components/Command/command.d.ts.map +1 -1
  177. package/dist/components/Command/command.js +23 -10
  178. package/dist/components/Command/command.js.map +1 -1
  179. package/dist/components/Command/index.d.ts +2 -0
  180. package/dist/components/Command/index.d.ts.map +1 -0
  181. package/dist/components/Command/index.js +14 -0
  182. package/dist/components/Command/index.js.map +1 -0
  183. package/dist/components/DataTable/active-editor-controller.d.ts +4 -3
  184. package/dist/components/DataTable/active-editor-controller.d.ts.map +1 -1
  185. package/dist/components/DataTable/cell-registry.d.ts +5 -5
  186. package/dist/components/DataTable/cell-registry.d.ts.map +1 -1
  187. package/dist/components/DataTable/cell-registry.js +89 -95
  188. package/dist/components/DataTable/cell-registry.js.map +1 -1
  189. package/dist/components/DataTable/column-types.d.ts +11 -21
  190. package/dist/components/DataTable/column-types.d.ts.map +1 -1
  191. package/dist/components/DataTable/column-types.js.map +1 -1
  192. package/dist/components/DataTable/data-table-column-visibility-panel.d.ts +4 -3
  193. package/dist/components/DataTable/data-table-column-visibility-panel.d.ts.map +1 -1
  194. package/dist/components/DataTable/data-table-column-visibility-panel.js +193 -0
  195. package/dist/components/DataTable/data-table-column-visibility-panel.js.map +1 -0
  196. package/dist/components/DataTable/data-table-filter-group.d.ts +51 -0
  197. package/dist/components/DataTable/data-table-filter-group.d.ts.map +1 -0
  198. package/dist/components/DataTable/data-table-filter-group.js +159 -0
  199. package/dist/components/DataTable/data-table-filter-group.js.map +1 -0
  200. package/dist/components/DataTable/data-table-filter-labels.d.ts +44 -0
  201. package/dist/components/DataTable/data-table-filter-labels.d.ts.map +1 -0
  202. package/dist/components/DataTable/data-table-filter-labels.js +55 -0
  203. package/dist/components/DataTable/data-table-filter-labels.js.map +1 -0
  204. package/dist/components/DataTable/data-table-filter-panel.d.ts +12 -3
  205. package/dist/components/DataTable/data-table-filter-panel.d.ts.map +1 -1
  206. package/dist/components/DataTable/data-table-filter-panel.js +316 -0
  207. package/dist/components/DataTable/data-table-filter-panel.js.map +1 -0
  208. package/dist/components/DataTable/data-table-filter-value-picker.d.ts +32 -0
  209. package/dist/components/DataTable/data-table-filter-value-picker.d.ts.map +1 -0
  210. package/dist/components/DataTable/data-table-filter-value-picker.js +205 -0
  211. package/dist/components/DataTable/data-table-filter-value-picker.js.map +1 -0
  212. package/dist/components/DataTable/data-table-interaction-layer.d.ts +17 -20
  213. package/dist/components/DataTable/data-table-interaction-layer.d.ts.map +1 -1
  214. package/dist/components/DataTable/data-table-interaction-layer.js +1 -3
  215. package/dist/components/DataTable/data-table-interaction-layer.js.map +1 -1
  216. package/dist/components/DataTable/data-table-sort-manager.d.ts +5 -5
  217. package/dist/components/DataTable/data-table-sort-manager.d.ts.map +1 -1
  218. package/dist/components/DataTable/data-table-sort-manager.js +150 -0
  219. package/dist/components/DataTable/data-table-sort-manager.js.map +1 -0
  220. package/dist/components/DataTable/data-table.d.ts +66 -15
  221. package/dist/components/DataTable/data-table.d.ts.map +1 -1
  222. package/dist/components/DataTable/data-table.js +367 -185
  223. package/dist/components/DataTable/data-table.js.map +1 -1
  224. package/dist/components/DataTable/filter-operators.d.ts +1 -1
  225. package/dist/components/DataTable/filter-operators.js +140 -0
  226. package/dist/components/DataTable/filter-operators.js.map +1 -0
  227. package/dist/components/DataTable/filter-tree.d.ts +6 -1
  228. package/dist/components/DataTable/filter-tree.d.ts.map +1 -1
  229. package/dist/components/DataTable/filter-tree.js +318 -0
  230. package/dist/components/DataTable/filter-tree.js.map +1 -0
  231. package/dist/components/DataTable/index.d.ts +5 -0
  232. package/dist/components/DataTable/index.d.ts.map +1 -0
  233. package/dist/components/DataTable/index.js +21 -0
  234. package/dist/components/DataTable/index.js.map +1 -0
  235. package/dist/components/DataTable/lib/column-meta.js +25 -0
  236. package/dist/components/DataTable/lib/column-meta.js.map +1 -0
  237. package/dist/components/DateGrid/date-grid.d.ts +23 -19
  238. package/dist/components/DateGrid/date-grid.d.ts.map +1 -1
  239. package/dist/components/DateGrid/date-grid.js +60 -12
  240. package/dist/components/DateGrid/date-grid.js.map +1 -1
  241. package/dist/components/DateGrid/index.d.ts +2 -0
  242. package/dist/components/DateGrid/index.d.ts.map +1 -0
  243. package/dist/components/DateGrid/index.js +6 -0
  244. package/dist/components/DateGrid/index.js.map +1 -0
  245. package/dist/components/DatePicker/date-picker.d.ts +12 -12
  246. package/dist/components/DatePicker/date-picker.d.ts.map +1 -1
  247. package/dist/components/DatePicker/date-picker.js +418 -309
  248. package/dist/components/DatePicker/date-picker.js.map +1 -1
  249. package/dist/components/DatePicker/index.d.ts +2 -0
  250. package/dist/components/DatePicker/index.d.ts.map +1 -0
  251. package/dist/components/DatePicker/index.js +8 -0
  252. package/dist/components/DatePicker/index.js.map +1 -0
  253. package/dist/components/DescriptionList/description-list.d.ts +6 -6
  254. package/dist/components/DescriptionList/description-list.d.ts.map +1 -1
  255. package/dist/components/DescriptionList/description-list.js +11 -10
  256. package/dist/components/DescriptionList/description-list.js.map +1 -1
  257. package/dist/components/DescriptionList/index.d.ts +2 -0
  258. package/dist/components/DescriptionList/index.d.ts.map +1 -0
  259. package/dist/components/DescriptionList/index.js +7 -0
  260. package/dist/components/DescriptionList/index.js.map +1 -0
  261. package/dist/components/Dialog/dialog.d.ts +22 -5
  262. package/dist/components/Dialog/dialog.d.ts.map +1 -1
  263. package/dist/components/Dialog/dialog.js +44 -23
  264. package/dist/components/Dialog/dialog.js.map +1 -1
  265. package/dist/components/Dialog/index.d.ts +2 -0
  266. package/dist/components/Dialog/index.d.ts.map +1 -0
  267. package/dist/components/Dialog/index.js +16 -0
  268. package/dist/components/Dialog/index.js.map +1 -0
  269. package/dist/components/DropdownMenu/dropdown-menu.d.ts +19 -10
  270. package/dist/components/DropdownMenu/dropdown-menu.d.ts.map +1 -1
  271. package/dist/components/DropdownMenu/dropdown-menu.js +79 -28
  272. package/dist/components/DropdownMenu/dropdown-menu.js.map +1 -1
  273. package/dist/components/DropdownMenu/index.d.ts +2 -0
  274. package/dist/components/DropdownMenu/index.d.ts.map +1 -0
  275. package/dist/components/DropdownMenu/index.js +21 -0
  276. package/dist/components/DropdownMenu/index.js.map +1 -0
  277. package/dist/components/Empty/empty.d.ts +14 -6
  278. package/dist/components/Empty/empty.d.ts.map +1 -1
  279. package/dist/components/Empty/empty.js +7 -7
  280. package/dist/components/Empty/empty.js.map +1 -1
  281. package/dist/components/Empty/index.d.ts +2 -0
  282. package/dist/components/Empty/index.d.ts.map +1 -0
  283. package/dist/components/Empty/index.js +6 -0
  284. package/dist/components/Empty/index.js.map +1 -0
  285. package/dist/components/Field/field-context.d.ts +111 -4
  286. package/dist/components/Field/field-context.d.ts.map +1 -1
  287. package/dist/components/Field/field-context.js +70 -0
  288. package/dist/components/Field/field-context.js.map +1 -1
  289. package/dist/components/Field/field-edit-keys.d.ts +21 -0
  290. package/dist/components/Field/field-edit-keys.d.ts.map +1 -0
  291. package/dist/components/Field/field-edit-keys.js +19 -0
  292. package/dist/components/Field/field-edit-keys.js.map +1 -0
  293. package/dist/components/Field/field-types.d.ts +22 -3
  294. package/dist/components/Field/field-types.d.ts.map +1 -1
  295. package/dist/components/Field/field-types.js.map +1 -1
  296. package/dist/components/Field/field-wrapper.d.ts +24 -6
  297. package/dist/components/Field/field-wrapper.d.ts.map +1 -1
  298. package/dist/components/Field/field-wrapper.js +98 -74
  299. package/dist/components/Field/field-wrapper.js.map +1 -1
  300. package/dist/components/Field/field.d.ts +7 -4
  301. package/dist/components/Field/field.d.ts.map +1 -1
  302. package/dist/components/Field/field.js +39 -6
  303. package/dist/components/Field/field.js.map +1 -1
  304. package/dist/components/Field/index.d.ts +3 -0
  305. package/dist/components/Field/index.d.ts.map +1 -0
  306. package/dist/components/Field/index.js +14 -0
  307. package/dist/components/Field/index.js.map +1 -0
  308. package/dist/components/Field/use-form-validation.d.ts +92 -0
  309. package/dist/components/Field/use-form-validation.d.ts.map +1 -0
  310. package/dist/components/Field/use-form-validation.js +137 -0
  311. package/dist/components/Field/use-form-validation.js.map +1 -0
  312. package/dist/components/FieldControlGroup/field-control-group.d.ts +8 -11
  313. package/dist/components/FieldControlGroup/field-control-group.d.ts.map +1 -1
  314. package/dist/components/FieldControlGroup/field-control-group.js +2 -2
  315. package/dist/components/FieldControlGroup/field-control-group.js.map +1 -1
  316. package/dist/components/FieldControlGroup/index.d.ts +2 -0
  317. package/dist/components/FieldControlGroup/index.d.ts.map +1 -0
  318. package/dist/components/FieldControlGroup/index.js +6 -0
  319. package/dist/components/FieldControlGroup/index.js.map +1 -0
  320. package/dist/components/FileItem/file-item.d.ts +14 -2
  321. package/dist/components/FileItem/file-item.d.ts.map +1 -1
  322. package/dist/components/FileItem/file-item.js +45 -16
  323. package/dist/components/FileItem/file-item.js.map +1 -1
  324. package/dist/components/FileItem/index.d.ts +2 -0
  325. package/dist/components/FileItem/index.d.ts.map +1 -0
  326. package/dist/components/FileItem/index.js +6 -0
  327. package/dist/components/FileItem/index.js.map +1 -0
  328. package/dist/components/FileUpload/file-upload.d.ts +39 -19
  329. package/dist/components/FileUpload/file-upload.d.ts.map +1 -1
  330. package/dist/components/FileUpload/file-upload.js +102 -32
  331. package/dist/components/FileUpload/file-upload.js.map +1 -1
  332. package/dist/components/FileUpload/index.d.ts +2 -0
  333. package/dist/components/FileUpload/index.d.ts.map +1 -0
  334. package/dist/components/FileUpload/index.js +6 -0
  335. package/dist/components/FileUpload/index.js.map +1 -0
  336. package/dist/components/FileViewer/can-render-image.d.ts +6 -0
  337. package/dist/components/FileViewer/can-render-image.d.ts.map +1 -0
  338. package/dist/components/FileViewer/can-render-image.js +11 -0
  339. package/dist/components/FileViewer/can-render-image.js.map +1 -0
  340. package/dist/components/FileViewer/file-viewer.d.ts +4 -4
  341. package/dist/components/FileViewer/file-viewer.d.ts.map +1 -1
  342. package/dist/components/FileViewer/file-viewer.js +88 -50
  343. package/dist/components/FileViewer/file-viewer.js.map +1 -1
  344. package/dist/components/FileViewer/image-renderer.d.ts +0 -5
  345. package/dist/components/FileViewer/image-renderer.d.ts.map +1 -1
  346. package/dist/components/FileViewer/image-renderer.js +23 -10
  347. package/dist/components/FileViewer/image-renderer.js.map +1 -1
  348. package/dist/components/FileViewer/index.d.ts +2 -0
  349. package/dist/components/FileViewer/index.d.ts.map +1 -0
  350. package/dist/components/FileViewer/index.js +7 -0
  351. package/dist/components/FileViewer/index.js.map +1 -0
  352. package/dist/components/HoverCard/hover-card.d.ts +9 -5
  353. package/dist/components/HoverCard/hover-card.d.ts.map +1 -1
  354. package/dist/components/HoverCard/hover-card.js +12 -5
  355. package/dist/components/HoverCard/hover-card.js.map +1 -1
  356. package/dist/components/HoverCard/index.d.ts +2 -0
  357. package/dist/components/HoverCard/index.d.ts.map +1 -0
  358. package/dist/components/HoverCard/index.js +8 -0
  359. package/dist/components/HoverCard/index.js.map +1 -0
  360. package/dist/components/InlineEdit/index.d.ts +2 -0
  361. package/dist/components/InlineEdit/index.d.ts.map +1 -0
  362. package/dist/components/InlineEdit/index.js +6 -0
  363. package/dist/components/InlineEdit/index.js.map +1 -0
  364. package/dist/components/InlineEdit/inline-edit.d.ts +86 -0
  365. package/dist/components/InlineEdit/inline-edit.d.ts.map +1 -0
  366. package/dist/components/InlineEdit/inline-edit.js +254 -0
  367. package/dist/components/InlineEdit/inline-edit.js.map +1 -0
  368. package/dist/components/Input/index.d.ts +2 -0
  369. package/dist/components/Input/index.d.ts.map +1 -0
  370. package/dist/components/Input/index.js +6 -0
  371. package/dist/components/Input/index.js.map +1 -0
  372. package/dist/components/Input/input.d.ts +31 -10
  373. package/dist/components/Input/input.d.ts.map +1 -1
  374. package/dist/components/Input/input.js +67 -30
  375. package/dist/components/Input/input.js.map +1 -1
  376. package/dist/components/LinkInput/index.d.ts +2 -0
  377. package/dist/components/LinkInput/index.d.ts.map +1 -0
  378. package/dist/components/LinkInput/index.js +6 -0
  379. package/dist/components/LinkInput/index.js.map +1 -0
  380. package/dist/components/LinkInput/link-input.d.ts +9 -9
  381. package/dist/components/LinkInput/link-input.d.ts.map +1 -1
  382. package/dist/components/LinkInput/link-input.js +40 -37
  383. package/dist/components/LinkInput/link-input.js.map +1 -1
  384. package/dist/components/Menu/index.d.ts +2 -0
  385. package/dist/components/Menu/index.d.ts.map +1 -0
  386. package/dist/components/Menu/index.js +9 -0
  387. package/dist/components/Menu/index.js.map +1 -0
  388. package/dist/components/Menu/menu-item.d.ts +20 -4
  389. package/dist/components/Menu/menu-item.d.ts.map +1 -1
  390. package/dist/components/Menu/menu-item.js +37 -9
  391. package/dist/components/Menu/menu-item.js.map +1 -1
  392. package/dist/components/Notice/index.d.ts +2 -0
  393. package/dist/components/Notice/index.d.ts.map +1 -0
  394. package/dist/components/Notice/index.js +8 -0
  395. package/dist/components/Notice/index.js.map +1 -0
  396. package/dist/components/Notice/notice.d.ts +35 -7
  397. package/dist/components/Notice/notice.d.ts.map +1 -1
  398. package/dist/components/Notice/notice.js +34 -10
  399. package/dist/components/Notice/notice.js.map +1 -1
  400. package/dist/components/NumberInput/index.d.ts +2 -0
  401. package/dist/components/NumberInput/index.d.ts.map +1 -0
  402. package/dist/components/NumberInput/index.js +7 -0
  403. package/dist/components/NumberInput/index.js.map +1 -0
  404. package/dist/components/NumberInput/number-input.d.ts +5 -5
  405. package/dist/components/NumberInput/number-input.d.ts.map +1 -1
  406. package/dist/components/NumberInput/number-input.js +40 -18
  407. package/dist/components/NumberInput/number-input.js.map +1 -1
  408. package/dist/components/OverflowIndicator/index.d.ts +2 -0
  409. package/dist/components/OverflowIndicator/index.d.ts.map +1 -0
  410. package/dist/components/OverflowIndicator/index.js +6 -0
  411. package/dist/components/OverflowIndicator/index.js.map +1 -0
  412. package/dist/components/OverflowIndicator/overflow-indicator.d.ts +6 -2
  413. package/dist/components/OverflowIndicator/overflow-indicator.d.ts.map +1 -1
  414. package/dist/components/OverflowIndicator/overflow-indicator.js +11 -7
  415. package/dist/components/OverflowIndicator/overflow-indicator.js.map +1 -1
  416. package/dist/components/Pagination/index.d.ts +2 -0
  417. package/dist/components/Pagination/index.d.ts.map +1 -0
  418. package/dist/components/Pagination/index.js +6 -0
  419. package/dist/components/Pagination/index.js.map +1 -0
  420. package/dist/components/Pagination/pagination.d.ts +49 -0
  421. package/dist/components/Pagination/pagination.d.ts.map +1 -0
  422. package/dist/components/Pagination/pagination.js +182 -0
  423. package/dist/components/Pagination/pagination.js.map +1 -0
  424. package/dist/components/PeoplePicker/avatar-stack-overflow.d.ts +1 -1
  425. package/dist/components/PeoplePicker/avatar-stack-overflow.js.map +1 -1
  426. package/dist/components/PeoplePicker/index.d.ts +2 -0
  427. package/dist/components/PeoplePicker/index.d.ts.map +1 -0
  428. package/dist/components/PeoplePicker/index.js +15 -0
  429. package/dist/components/PeoplePicker/index.js.map +1 -0
  430. package/dist/components/PeoplePicker/people-picker-helpers.d.ts.map +1 -1
  431. package/dist/components/PeoplePicker/people-picker-helpers.js +2 -2
  432. package/dist/components/PeoplePicker/people-picker-helpers.js.map +1 -1
  433. package/dist/components/PeoplePicker/people-picker.d.ts +26 -10
  434. package/dist/components/PeoplePicker/people-picker.d.ts.map +1 -1
  435. package/dist/components/PeoplePicker/people-picker.js +97 -65
  436. package/dist/components/PeoplePicker/people-picker.js.map +1 -1
  437. package/dist/components/PeoplePicker/person-display.d.ts +19 -11
  438. package/dist/components/PeoplePicker/person-display.d.ts.map +1 -1
  439. package/dist/components/PeoplePicker/person-display.js +39 -23
  440. package/dist/components/PeoplePicker/person-display.js.map +1 -1
  441. package/dist/components/Popover/index.d.ts +2 -0
  442. package/dist/components/Popover/index.d.ts.map +1 -0
  443. package/dist/components/Popover/index.js +14 -0
  444. package/dist/components/Popover/index.js.map +1 -0
  445. package/dist/components/Popover/popover.d.ts +2 -2
  446. package/dist/components/Popover/popover.d.ts.map +1 -1
  447. package/dist/components/Popover/popover.js +72 -42
  448. package/dist/components/Popover/popover.js.map +1 -1
  449. package/dist/components/ProfileCard/index.d.ts +2 -0
  450. package/dist/components/ProfileCard/index.d.ts.map +1 -0
  451. package/dist/components/ProfileCard/index.js +8 -0
  452. package/dist/components/ProfileCard/index.js.map +1 -0
  453. package/dist/components/{NameCard/name-card.d.ts → ProfileCard/profile-card.d.ts} +34 -20
  454. package/dist/components/ProfileCard/profile-card.d.ts.map +1 -0
  455. package/dist/components/{NameCard/name-card.js → ProfileCard/profile-card.js} +27 -16
  456. package/dist/components/ProfileCard/profile-card.js.map +1 -0
  457. package/dist/components/ProgressBar/index.d.ts +2 -0
  458. package/dist/components/ProgressBar/index.d.ts.map +1 -0
  459. package/dist/components/ProgressBar/index.js +6 -0
  460. package/dist/components/ProgressBar/index.js.map +1 -0
  461. package/dist/components/ProgressBar/progress-bar.d.ts +2 -14
  462. package/dist/components/ProgressBar/progress-bar.d.ts.map +1 -1
  463. package/dist/components/ProgressBar/progress-bar.js +5 -9
  464. package/dist/components/ProgressBar/progress-bar.js.map +1 -1
  465. package/dist/components/RadioGroup/index.d.ts +2 -0
  466. package/dist/components/RadioGroup/index.d.ts.map +1 -0
  467. package/dist/components/RadioGroup/index.js +8 -0
  468. package/dist/components/RadioGroup/index.js.map +1 -0
  469. package/dist/components/RadioGroup/radio-group.d.ts +18 -12
  470. package/dist/components/RadioGroup/radio-group.d.ts.map +1 -1
  471. package/dist/components/RadioGroup/radio-group.js +131 -40
  472. package/dist/components/RadioGroup/radio-group.js.map +1 -1
  473. package/dist/components/Rating/index.d.ts +2 -0
  474. package/dist/components/Rating/index.d.ts.map +1 -0
  475. package/dist/components/Rating/index.js +6 -0
  476. package/dist/components/Rating/index.js.map +1 -0
  477. package/dist/components/Rating/rating.d.ts +6 -2
  478. package/dist/components/Rating/rating.d.ts.map +1 -1
  479. package/dist/components/Rating/rating.js +17 -10
  480. package/dist/components/Rating/rating.js.map +1 -1
  481. package/dist/components/ScrollArea/index.d.ts +2 -0
  482. package/dist/components/ScrollArea/index.d.ts.map +1 -0
  483. package/dist/components/ScrollArea/index.js +7 -0
  484. package/dist/components/ScrollArea/index.js.map +1 -0
  485. package/dist/components/ScrollArea/scroll-area.d.ts +16 -4
  486. package/dist/components/ScrollArea/scroll-area.d.ts.map +1 -1
  487. package/dist/components/ScrollArea/scroll-area.js +9 -6
  488. package/dist/components/ScrollArea/scroll-area.js.map +1 -1
  489. package/dist/components/SegmentedControl/index.d.ts +2 -0
  490. package/dist/components/SegmentedControl/index.d.ts.map +1 -0
  491. package/dist/components/SegmentedControl/index.js +9 -0
  492. package/dist/components/SegmentedControl/index.js.map +1 -0
  493. package/dist/components/SegmentedControl/segmented-control.d.ts +8 -7
  494. package/dist/components/SegmentedControl/segmented-control.d.ts.map +1 -1
  495. package/dist/components/SegmentedControl/segmented-control.js +31 -20
  496. package/dist/components/SegmentedControl/segmented-control.js.map +1 -1
  497. package/dist/components/Select/index.d.ts +2 -0
  498. package/dist/components/Select/index.d.ts.map +1 -0
  499. package/dist/components/Select/index.js +6 -0
  500. package/dist/components/Select/index.js.map +1 -0
  501. package/dist/components/Select/select.d.ts +70 -13
  502. package/dist/components/Select/select.d.ts.map +1 -1
  503. package/dist/components/Select/select.js +271 -83
  504. package/dist/components/Select/select.js.map +1 -1
  505. package/dist/components/SelectMenu/index.d.ts +2 -0
  506. package/dist/components/SelectMenu/index.d.ts.map +1 -0
  507. package/dist/components/SelectMenu/index.js +8 -0
  508. package/dist/components/SelectMenu/index.js.map +1 -0
  509. package/dist/components/SelectMenu/select-menu.d.ts +61 -10
  510. package/dist/components/SelectMenu/select-menu.d.ts.map +1 -1
  511. package/dist/components/SelectMenu/select-menu.js +216 -93
  512. package/dist/components/SelectMenu/select-menu.js.map +1 -1
  513. package/dist/components/SelectionControl/boolean-value.d.ts +11 -0
  514. package/dist/components/SelectionControl/boolean-value.d.ts.map +1 -0
  515. package/dist/components/SelectionControl/boolean-value.js +23 -0
  516. package/dist/components/SelectionControl/boolean-value.js.map +1 -0
  517. package/dist/components/SelectionControl/index.d.ts +3 -0
  518. package/dist/components/SelectionControl/index.d.ts.map +1 -0
  519. package/dist/components/SelectionControl/index.js +9 -0
  520. package/dist/components/SelectionControl/index.js.map +1 -0
  521. package/dist/components/SelectionControl/selection-item.d.ts +5 -1
  522. package/dist/components/SelectionControl/selection-item.d.ts.map +1 -1
  523. package/dist/components/SelectionControl/selection-item.js +3 -1
  524. package/dist/components/SelectionControl/selection-item.js.map +1 -1
  525. package/dist/components/Separator/index.d.ts +2 -0
  526. package/dist/components/Separator/index.d.ts.map +1 -0
  527. package/dist/components/Separator/index.js +6 -0
  528. package/dist/components/Separator/index.js.map +1 -0
  529. package/dist/components/Separator/separator.d.ts +2 -2
  530. package/dist/components/Separator/separator.js +4 -3
  531. package/dist/components/Separator/separator.js.map +1 -1
  532. package/dist/components/Sheet/index.d.ts +2 -0
  533. package/dist/components/Sheet/index.d.ts.map +1 -0
  534. package/dist/components/Sheet/index.js +18 -0
  535. package/dist/components/Sheet/index.js.map +1 -0
  536. package/dist/components/Sheet/sheet.d.ts +15 -8
  537. package/dist/components/Sheet/sheet.d.ts.map +1 -1
  538. package/dist/components/Sheet/sheet.js +9 -5
  539. package/dist/components/Sheet/sheet.js.map +1 -1
  540. package/dist/components/Sidebar/index.d.ts +2 -0
  541. package/dist/components/Sidebar/index.d.ts.map +1 -0
  542. package/dist/components/Sidebar/index.js +24 -0
  543. package/dist/components/Sidebar/index.js.map +1 -0
  544. package/dist/components/Sidebar/sidebar.d.ts +17 -11
  545. package/dist/components/Sidebar/sidebar.d.ts.map +1 -1
  546. package/dist/components/Sidebar/sidebar.js +78 -35
  547. package/dist/components/Sidebar/sidebar.js.map +1 -1
  548. package/dist/components/Skeleton/index.d.ts +2 -0
  549. package/dist/components/Skeleton/index.d.ts.map +1 -0
  550. package/dist/components/Skeleton/index.js +6 -0
  551. package/dist/components/Skeleton/index.js.map +1 -0
  552. package/dist/components/Skeleton/skeleton.d.ts +2 -2
  553. package/dist/components/Skeleton/skeleton.js +4 -3
  554. package/dist/components/Skeleton/skeleton.js.map +1 -1
  555. package/dist/components/Slider/index.d.ts +2 -0
  556. package/dist/components/Slider/index.d.ts.map +1 -0
  557. package/dist/components/Slider/index.js +7 -0
  558. package/dist/components/Slider/index.js.map +1 -0
  559. package/dist/components/Slider/slider.d.ts +7 -7
  560. package/dist/components/Slider/slider.d.ts.map +1 -1
  561. package/dist/components/Slider/slider.js +39 -17
  562. package/dist/components/Slider/slider.js.map +1 -1
  563. package/dist/components/Steps/index.d.ts +2 -0
  564. package/dist/components/Steps/index.d.ts.map +1 -0
  565. package/dist/components/Steps/index.js +12 -0
  566. package/dist/components/Steps/index.js.map +1 -0
  567. package/dist/components/Steps/steps.d.ts +8 -6
  568. package/dist/components/Steps/steps.d.ts.map +1 -1
  569. package/dist/components/Steps/steps.js +74 -32
  570. package/dist/components/Steps/steps.js.map +1 -1
  571. package/dist/components/Switch/index.d.ts +2 -0
  572. package/dist/components/Switch/index.d.ts.map +1 -0
  573. package/dist/components/Switch/index.js +7 -0
  574. package/dist/components/Switch/index.js.map +1 -0
  575. package/dist/components/Switch/switch.d.ts +20 -18
  576. package/dist/components/Switch/switch.d.ts.map +1 -1
  577. package/dist/components/Switch/switch.js +133 -26
  578. package/dist/components/Switch/switch.js.map +1 -1
  579. package/dist/components/Tabs/index.d.ts +2 -0
  580. package/dist/components/Tabs/index.d.ts.map +1 -0
  581. package/dist/components/Tabs/index.js +10 -0
  582. package/dist/components/Tabs/index.js.map +1 -0
  583. package/dist/components/Tabs/tabs-inline-action-geometry.d.ts +31 -0
  584. package/dist/components/Tabs/tabs-inline-action-geometry.d.ts.map +1 -0
  585. package/dist/components/Tabs/tabs-inline-action-geometry.js +43 -0
  586. package/dist/components/Tabs/tabs-inline-action-geometry.js.map +1 -0
  587. package/dist/components/Tabs/tabs.d.ts +14 -11
  588. package/dist/components/Tabs/tabs.d.ts.map +1 -1
  589. package/dist/components/Tabs/tabs.js +184 -69
  590. package/dist/components/Tabs/tabs.js.map +1 -1
  591. package/dist/components/Tag/index.d.ts +2 -0
  592. package/dist/components/Tag/index.d.ts.map +1 -0
  593. package/dist/components/Tag/index.js +7 -0
  594. package/dist/components/Tag/index.js.map +1 -0
  595. package/dist/components/Tag/tag.d.ts +39 -23
  596. package/dist/components/Tag/tag.d.ts.map +1 -1
  597. package/dist/components/Tag/tag.js +71 -63
  598. package/dist/components/Tag/tag.js.map +1 -1
  599. package/dist/components/Textarea/index.d.ts +2 -0
  600. package/dist/components/Textarea/index.d.ts.map +1 -0
  601. package/dist/components/Textarea/index.js +7 -0
  602. package/dist/components/Textarea/index.js.map +1 -0
  603. package/dist/components/Textarea/textarea.d.ts +24 -17
  604. package/dist/components/Textarea/textarea.d.ts.map +1 -1
  605. package/dist/components/Textarea/textarea.js +110 -72
  606. package/dist/components/Textarea/textarea.js.map +1 -1
  607. package/dist/components/TimePicker/index.d.ts +2 -0
  608. package/dist/components/TimePicker/index.d.ts.map +1 -0
  609. package/dist/components/TimePicker/index.js +6 -0
  610. package/dist/components/TimePicker/index.js.map +1 -0
  611. package/dist/components/TimePicker/time-columns.d.ts.map +1 -1
  612. package/dist/components/TimePicker/time-columns.js +44 -36
  613. package/dist/components/TimePicker/time-columns.js.map +1 -1
  614. package/dist/components/TimePicker/time-picker.d.ts +8 -7
  615. package/dist/components/TimePicker/time-picker.d.ts.map +1 -1
  616. package/dist/components/TimePicker/time-picker.js +71 -53
  617. package/dist/components/TimePicker/time-picker.js.map +1 -1
  618. package/dist/components/Toast/index.d.ts +2 -0
  619. package/dist/components/Toast/index.d.ts.map +1 -0
  620. package/dist/components/Toast/index.js +7 -0
  621. package/dist/components/Toast/index.js.map +1 -0
  622. package/dist/components/Toast/toast.d.ts +2 -2
  623. package/dist/components/Toast/toast.d.ts.map +1 -1
  624. package/dist/components/Toast/toast.js +82 -20
  625. package/dist/components/Toast/toast.js.map +1 -1
  626. package/dist/components/Tooltip/index.d.ts +2 -0
  627. package/dist/components/Tooltip/index.d.ts.map +1 -0
  628. package/dist/components/Tooltip/index.js +9 -0
  629. package/dist/components/Tooltip/index.js.map +1 -0
  630. package/dist/components/Tooltip/tooltip.d.ts +2 -2
  631. package/dist/components/Tooltip/tooltip.d.ts.map +1 -1
  632. package/dist/components/Tooltip/tooltip.js +57 -25
  633. package/dist/components/Tooltip/tooltip.js.map +1 -1
  634. package/dist/components/TreeView/index.d.ts +2 -0
  635. package/dist/components/TreeView/index.d.ts.map +1 -0
  636. package/dist/components/TreeView/index.js +8 -0
  637. package/dist/components/TreeView/index.js.map +1 -0
  638. package/dist/components/TreeView/tree-view.d.ts +71 -14
  639. package/dist/components/TreeView/tree-view.d.ts.map +1 -1
  640. package/dist/components/TreeView/tree-view.js +313 -34
  641. package/dist/components/TreeView/tree-view.js.map +1 -1
  642. package/dist/hooks/use-controllable.d.ts.map +1 -1
  643. package/dist/hooks/use-controllable.js +4 -2
  644. package/dist/hooks/use-controllable.js.map +1 -1
  645. package/dist/hooks/use-is-touch-device.d.ts.map +1 -1
  646. package/dist/hooks/use-is-touch-device.js +3 -1
  647. package/dist/hooks/use-is-touch-device.js.map +1 -1
  648. package/dist/hooks/use-overflow-items.d.ts +10 -6
  649. package/dist/hooks/use-overflow-items.d.ts.map +1 -1
  650. package/dist/hooks/use-overflow-items.js.map +1 -1
  651. package/dist/hooks/use-truncated.d.ts +27 -0
  652. package/dist/hooks/use-truncated.d.ts.map +1 -0
  653. package/dist/hooks/use-truncated.js +57 -0
  654. package/dist/hooks/use-truncated.js.map +1 -0
  655. package/dist/{react-day-picker.css → index.css} +59 -0
  656. package/dist/index.d.ts +121 -67
  657. package/dist/index.d.ts.map +1 -1
  658. package/dist/index.js +143 -160
  659. package/dist/index.js.map +1 -1
  660. package/dist/lib/drag-visual.d.ts +2 -2
  661. package/dist/lib/drag-visual.js.map +1 -1
  662. package/dist/lib/utils.d.ts +1 -0
  663. package/dist/lib/utils.d.ts.map +1 -1
  664. package/dist/lib/utils.js +24 -2
  665. package/dist/lib/utils.js.map +1 -1
  666. package/dist/patterns/element-anatomy/index.d.ts +3 -0
  667. package/dist/patterns/element-anatomy/index.d.ts.map +1 -0
  668. package/dist/patterns/element-anatomy/index.js +22 -0
  669. package/dist/patterns/element-anatomy/index.js.map +1 -0
  670. package/dist/patterns/element-anatomy/item-anatomy.d.ts +32 -16
  671. package/dist/patterns/element-anatomy/item-anatomy.d.ts.map +1 -1
  672. package/dist/patterns/element-anatomy/item-anatomy.js +83 -35
  673. package/dist/patterns/element-anatomy/item-anatomy.js.map +1 -1
  674. package/dist/patterns/element-anatomy/truncated-text.d.ts +27 -0
  675. package/dist/patterns/element-anatomy/truncated-text.d.ts.map +1 -0
  676. package/dist/patterns/element-anatomy/truncated-text.js +16 -0
  677. package/dist/patterns/element-anatomy/truncated-text.js.map +1 -0
  678. package/dist/patterns/header-canonical/chrome-header.d.ts +20 -4
  679. package/dist/patterns/header-canonical/chrome-header.d.ts.map +1 -1
  680. package/dist/patterns/header-canonical/chrome-header.js +4 -2
  681. package/dist/patterns/header-canonical/chrome-header.js.map +1 -1
  682. package/dist/patterns/header-canonical/index.d.ts +2 -0
  683. package/dist/patterns/header-canonical/index.d.ts.map +1 -0
  684. package/dist/patterns/header-canonical/index.js +6 -0
  685. package/dist/patterns/header-canonical/index.js.map +1 -0
  686. package/dist/patterns/horizontal-overflow/horizontal-overflow.d.ts +1 -1
  687. package/dist/patterns/horizontal-overflow/horizontal-overflow.js.map +1 -1
  688. package/dist/patterns/horizontal-overflow/index.d.ts +2 -0
  689. package/dist/patterns/horizontal-overflow/index.d.ts.map +1 -0
  690. package/dist/patterns/horizontal-overflow/index.js +14 -0
  691. package/dist/patterns/horizontal-overflow/index.js.map +1 -0
  692. package/dist/patterns/overlay-surface/index.d.ts +2 -0
  693. package/dist/patterns/overlay-surface/index.d.ts.map +1 -0
  694. package/dist/patterns/overlay-surface/index.js +8 -0
  695. package/dist/patterns/overlay-surface/index.js.map +1 -0
  696. package/dist/patterns/overlay-surface/overlay-surface.d.ts +12 -2
  697. package/dist/patterns/overlay-surface/overlay-surface.d.ts.map +1 -1
  698. package/dist/patterns/overlay-surface/overlay-surface.js +6 -2
  699. package/dist/patterns/overlay-surface/overlay-surface.js.map +1 -1
  700. package/dist/patterns/resize-handle/index.d.ts +2 -0
  701. package/dist/patterns/resize-handle/index.d.ts.map +1 -0
  702. package/dist/patterns/resize-handle/index.js +5 -0
  703. package/dist/patterns/resize-handle/index.js.map +1 -0
  704. package/dist/patterns/resize-handle/resize-handle.d.ts +9 -11
  705. package/dist/patterns/resize-handle/resize-handle.d.ts.map +1 -1
  706. package/dist/patterns/resize-handle/resize-handle.js +3 -6
  707. package/dist/patterns/resize-handle/resize-handle.js.map +1 -1
  708. package/dist/story-governance/category-matrix.d.ts +35 -0
  709. package/dist/story-governance/category-matrix.d.ts.map +1 -0
  710. package/dist/tokens/categorical-color.d.ts +60 -0
  711. package/dist/tokens/categorical-color.d.ts.map +1 -0
  712. package/dist/tokens/categorical-color.js +125 -0
  713. package/dist/tokens/categorical-color.js.map +1 -0
  714. package/dist/tokens/motion/motion.d.ts +8 -7
  715. package/dist/tokens/motion/motion.d.ts.map +1 -1
  716. package/dist/tokens/motion/motion.js +6 -6
  717. package/dist/tokens/motion/motion.js.map +1 -1
  718. package/dist/tokens/motion/overlay-motion.d.ts +19 -0
  719. package/dist/tokens/motion/overlay-motion.d.ts.map +1 -0
  720. package/dist/tokens/motion/overlay-motion.js +9 -0
  721. package/dist/tokens/motion/overlay-motion.js.map +1 -0
  722. package/dist/tokens/uiSize/icon-size.d.ts +3 -4
  723. package/dist/tokens/uiSize/icon-size.d.ts.map +1 -1
  724. package/dist/tokens/uiSize/icon-size.js +5 -0
  725. package/dist/tokens/uiSize/icon-size.js.map +1 -0
  726. package/ds-canonical/adapters/claude/agents/README.md +58 -0
  727. package/ds-canonical/adapters/claude/agents/canonical-reviewer.md +14 -0
  728. package/ds-canonical/adapters/claude-root-instructions.md +24 -0
  729. package/ds-canonical/adapters/claude-settings-base.json +169 -0
  730. package/ds-canonical/commands/README.md +9 -14
  731. package/ds-canonical/fork/AGENTS.md +110 -0
  732. package/ds-canonical/fork/CLAUDE.md +54 -0
  733. package/ds-canonical/fork/codex/agents/skills/bug-fix-rhythm/SKILL.md +207 -0
  734. package/ds-canonical/fork/codex/agents/skills/code-quality-audit/SKILL.md +71 -0
  735. package/ds-canonical/fork/codex/agents/skills/delivery-handoff/SKILL.md +244 -0
  736. package/ds-canonical/fork/codex/agents/skills/delivery-handoff/references/flow-diagram.md +180 -0
  737. package/ds-canonical/fork/codex/agents/skills/delivery-handoff/references/handoff-template.md +177 -0
  738. package/ds-canonical/fork/codex/agents/skills/delivery-handoff/references/inventory-checklist.md +196 -0
  739. package/ds-canonical/fork/codex/agents/skills/independent-review/SKILL.md +43 -0
  740. package/ds-canonical/fork/codex/agents/skills/independent-review/agents/openai.yaml +4 -0
  741. package/ds-canonical/fork/codex/agents/skills/independent-review/references/evidence-contract.md +23 -0
  742. package/ds-canonical/fork/codex/agents/skills/performance-audit/SKILL.md +114 -0
  743. package/ds-canonical/fork/codex/agents/skills/product-ui-audit/SKILL.md +252 -0
  744. package/ds-canonical/fork/codex/agents/skills/product-ui-audit/references/audit-checks.md +250 -0
  745. package/ds-canonical/fork/codex/agents/skills/product-ui-audit/references/common-misuses.md +329 -0
  746. package/ds-canonical/fork/codex/agents/skills/product-ui-audit/references/report-template.md +163 -0
  747. package/ds-canonical/fork/codex/agents/skills/propose-options/SKILL.md +190 -0
  748. package/ds-canonical/fork/codex/agents/skills/prototype/SKILL.md +246 -0
  749. package/ds-canonical/fork/codex/agents/skills/prototype/references/audit-checks.md +39 -0
  750. package/ds-canonical/fork/codex/agents/skills/prototype/references/benchmark-sources.md +94 -0
  751. package/ds-canonical/fork/codex/agents/skills/prototype/references/checkpoints.md +200 -0
  752. package/ds-canonical/fork/codex/agents/skills/prototype/references/evaluation-matrix.md +142 -0
  753. package/ds-canonical/fork/codex/agents/skills/prototype/references/ooux-template.md +198 -0
  754. package/ds-canonical/fork/codex/agents/skills/prototype/references/proposal-template.md +230 -0
  755. package/ds-canonical/fork/codex/agents/skills/scan-similar-bugs/SKILL.md +203 -0
  756. package/ds-canonical/fork/codex/agents/skills/ux-audit/SKILL.md +135 -0
  757. package/ds-canonical/fork/codex/agents/skills/visual-audit/SKILL.md +258 -0
  758. package/ds-canonical/fork/codex/agents/skills/visual-audit/output/.gitkeep +0 -0
  759. package/ds-canonical/fork/codex/agents/skills/visual-audit/references/audit-architecture.md +101 -0
  760. package/ds-canonical/fork/codex/agents/skills/visual-audit/references/visual-checklist.md +297 -0
  761. package/ds-canonical/fork/codex/agents/skills/visual-audit/references/world-class-benchmarks.md +198 -0
  762. package/ds-canonical/fork/codex/hooks.json +57 -0
  763. package/ds-canonical/fork/common/closed-tool-execution.mjs +1005 -0
  764. package/ds-canonical/fork/common/instruction.md +110 -0
  765. package/ds-canonical/fork/consumer/governance-check.mjs +3163 -0
  766. package/ds-canonical/fork/consumer/lib/closed-tool-execution.mjs +1005 -0
  767. package/ds-canonical/fork/consumer/lock.json +189 -0
  768. package/ds-canonical/fork/consumer/lock.schema.json +338 -0
  769. package/ds-canonical/fork/consumer/managed-files/0235cf6b3fd402a3717881dc205b5bf77aed7632e7d7d6f1811a40e3033bd816.blob +145 -0
  770. package/ds-canonical/fork/consumer/managed-files/145aab4b4fc470fc9ba7679b4a1d87d4f6a6d604940bd40f8d675c8af696498f.blob +53 -0
  771. package/ds-canonical/fork/consumer/managed-files/189e551431181e4a88783c02130d2787b801ef731c86e35bcde89a7313aa020e.blob +149 -0
  772. package/ds-canonical/fork/consumer/managed-files/24ad71c8613ddcf6fd23818cb3bb477a1fb6d83af4550b0bad43099813088686.blob +28 -0
  773. package/ds-canonical/fork/consumer/managed-files/2d1ef5617a5ce3c39ad9aae1c42af7d199f9270c0a0ccb490b63d62dbc6913db.blob +1005 -0
  774. package/ds-canonical/fork/consumer/managed-files/3625e02235cf166a50649a4d704cfb68fead69d0e168c481df013ebae9f6be25.blob +1412 -0
  775. package/ds-canonical/fork/consumer/managed-files/3ddedc67b464bdfe3dde9803a2d917920c96d633678b802eee638a44cd47366a.blob +8 -0
  776. package/ds-canonical/fork/consumer/managed-files/423729840acdd43c812f17c245b871716c6b60f76e4d3e94864d0e34a815bf8d.blob +348 -0
  777. package/ds-canonical/fork/consumer/managed-files/46f10bc55cdfdf834d0749eebff42ea0bb8576f361b36d2b6ba1851354c50150.blob +549 -0
  778. package/ds-canonical/fork/consumer/managed-files/475fba657eaeb8abd88f60635f3eadab27a9d0d3114ba4fffc65f43a2a0fe6e2.blob +124 -0
  779. package/ds-canonical/fork/consumer/managed-files/5aeda1df235815f40dd755951f2b868d4e02035653d4536a8dde209cdc75b493.blob +268 -0
  780. package/ds-canonical/fork/consumer/managed-files/61c6aca6d7f04bedbf556eaa9d3043681fe48cbe0e93a8ccb1d69a7c5e23fdcf.blob +113 -0
  781. package/ds-canonical/fork/consumer/managed-files/63061e05969667005020166ea2ae7df3c96663f7a928e7dd3eebc1471022df56.blob +2454 -0
  782. package/ds-canonical/fork/consumer/managed-files/65410b66e8799a560e07b71779c186fed2a0ef50575ac44745df7a0938a9c2b4.blob +321 -0
  783. package/ds-canonical/fork/consumer/managed-files/6b746628ac11fcccbe277ef6fea94cc2a7b90ea2822e83536eae80d5ee4b3fa5.blob +167 -0
  784. package/ds-canonical/fork/consumer/managed-files/76d485470d30ff014afacf7ce643763de9f4f956d9fc8128dbc1814774cf2e63.blob +671 -0
  785. package/ds-canonical/fork/consumer/managed-files/7937321877e5c34c27dae36c0d507d21cd42fa3f46a8f11a284b8b4a52b6faa4.blob +84 -0
  786. package/ds-canonical/fork/consumer/managed-files/794bb911ba8ebef58ab0d44a55b9968a19d2c62bcfb310b1ee3a84166f087f21.blob +924 -0
  787. package/ds-canonical/fork/consumer/managed-files/7ab15a8aeca39485d7b9b57234bbc4a69e0b9e70b4a851dfe10f6447127cee78.blob +51 -0
  788. package/ds-canonical/fork/consumer/managed-files/7b17835d0ceb17cdcdcaf930540a3e5d0943a34a747ac43c12ca8cd485c11581.blob +44 -0
  789. package/ds-canonical/fork/consumer/managed-files/7eb6cc60abfdabaf6617c336058fad1454ccde08889295767bfd9b7fd153cc6e.blob +900 -0
  790. package/ds-canonical/fork/consumer/managed-files/81037efa5b3b9f4a875704005fb268acdc9233bb901f44902e4e37e1da92b8e3.blob +46 -0
  791. package/ds-canonical/fork/consumer/managed-files/884721550b56308812b20917adac7a12f36fdb4ecda6b02460a7f5a219c0c966.blob +82 -0
  792. package/ds-canonical/fork/consumer/managed-files/91f414b9462ddc1e4be1d4c6ca4ac7a7340a6eec9e98ee109cbc049d3b354b6a.blob +36 -0
  793. package/ds-canonical/fork/consumer/managed-files/92e4828cdcb96ff0d01daa16f6885f24045a8e72820665650f2a1890dc3a446c.blob +121 -0
  794. package/ds-canonical/fork/consumer/managed-files/93a89f16f6717d1e4e4e27ec20ef916e3355c7aa890ca74cd9b12db30d8a899f.blob +36 -0
  795. package/ds-canonical/fork/consumer/managed-files/974521d6b8fe796ea4c58b3c78b0c2b8a1be262b97100d77aaf4cc9c7724bcab.blob +45 -0
  796. package/ds-canonical/fork/consumer/managed-files/9791c85388d2e2e2bd564e2550fadc3351c4c960a47ce838098afcba7544eb90.blob +973 -0
  797. package/ds-canonical/fork/consumer/managed-files/a448d2222133335c30e6fda5116e26a40db3283a19d62ccc0663c30d272262a7.blob +174 -0
  798. package/ds-canonical/fork/consumer/managed-files/ab072e7f2eca51f0e18a5e18c4b333260ee5d219a12cc6df5bb2d683f0b2734d.blob +2639 -0
  799. package/ds-canonical/fork/consumer/managed-files/bc44cabad181f766611dab6a8f52d81100afadd50ac59799015e8ba7bf46d9eb.blob +620 -0
  800. package/ds-canonical/fork/consumer/managed-files/c4aa767f11714467de0038a2149cf78074baddc17fc6a9e074b6aed7544c6f3c.blob +80 -0
  801. package/ds-canonical/fork/consumer/managed-files/c893e9b734b162f4c631fef871128c16a9ab565f796a0e76d7f320f821f220f5.blob +41 -0
  802. package/ds-canonical/fork/consumer/managed-files/cd9c61f8ff24fb9bcc3663e346e2cfa419cfb84e02aae18d3dc66dd192681696.blob +9 -0
  803. package/ds-canonical/fork/consumer/managed-files/da2ad2737315d25a5300905ddefd62f1695056a8a1af155c5b34170ad9923bce.blob +38 -0
  804. package/ds-canonical/fork/consumer/managed-files/e26057408661597aac4a57cdf7e30e2f9d0afb1b9a2dbbb692c3805cd9028ca5.blob +250 -0
  805. package/ds-canonical/fork/consumer/managed-files/e68ae1915965d8e17d4b2441c00c2b97fe062ea308ae8535c9eebb2fc16fa245.blob +20 -0
  806. package/ds-canonical/fork/consumer/managed-files/e71c65f45c6af7ce12b6b3c0d8028f185da5b719e2050c9b2a6b243d41ae4878.blob +182 -0
  807. package/ds-canonical/fork/consumer/managed-files/e813096d69c49812e40e00be9ac8fa14d77f0ec1f97ab4c45cb096b3bedd35de.blob +3 -0
  808. package/ds-canonical/fork/consumer/managed-files/e930ebca6fd8eeb30802aac0930efae7bcc44cc0996f24de07c11ca6a081fedf.blob +277 -0
  809. package/ds-canonical/fork/consumer/managed-files/ea94e914d5c8acb84ad7660e5bda0f01b6ccc8cf96b0f6b1ce048f8938d0f5b5.blob +47 -0
  810. package/ds-canonical/fork/consumer/managed-files/f4db6e616d5229aa7e700c6a3ace022cb9d90baae74e38ca65fce617f18e0d9b.blob +110 -0
  811. package/ds-canonical/fork/consumer/managed-files/faa128c26102415dc5345e68698efbbd28a395c35ee278dceae044cf430692b2.blob +11 -0
  812. package/ds-canonical/fork/governance.lock +1696 -0
  813. package/ds-canonical/fork/hooks/_log-fire.sh +143 -0
  814. package/ds-canonical/fork/hooks/block_prototype_imports.py +241 -0
  815. package/ds-canonical/fork/hooks/check_chrome_header_avatar_canonical.sh +106 -0
  816. package/ds-canonical/fork/hooks/check_consumer_app_invariants.sh +731 -0
  817. package/ds-canonical/fork/hooks/check_consumer_code_quality.sh +173 -0
  818. package/ds-canonical/fork/hooks/check_ds_anchor_preflight.sh +219 -0
  819. package/ds-canonical/fork/hooks/check_dynamic_tailwind_class.sh +57 -0
  820. package/ds-canonical/fork/hooks/check_escape_marker_abuse.sh +213 -0
  821. package/ds-canonical/fork/hooks/check_field_family_invariants.sh +376 -0
  822. package/ds-canonical/fork/hooks/check_fork_product_quality.sh +38 -0
  823. package/ds-canonical/fork/hooks/check_item_list_gap.sh +56 -0
  824. package/ds-canonical/fork/hooks/check_layout_space_magic_numbers.sh +160 -0
  825. package/ds-canonical/fork/hooks/check_opacity_token_usage.sh +319 -0
  826. package/ds-canonical/fork/hooks/check_pattern_invariants.sh +339 -0
  827. package/ds-canonical/fork/hooks/check_sidebar_menu_button_implicit_wrap.sh +99 -0
  828. package/ds-canonical/fork/hooks/check_story_determinism.sh +39 -0
  829. package/ds-canonical/fork/hooks/check_story_invariants.sh +400 -0
  830. package/ds-canonical/fork/hooks/check_tabs_content_chrome_body_double_gap.sh +241 -0
  831. package/ds-canonical/fork/hooks/check_tailwind_wildcard_in_docs.sh +86 -0
  832. package/ds-canonical/fork/hooks/inject_deploy_url_after_push.sh +333 -0
  833. package/ds-canonical/fork/hooks/lib/_hook_integrity.sh +158 -0
  834. package/ds-canonical/fork/hooks/lib/_micro_geometry.sh +291 -0
  835. package/ds-canonical/fork/hooks/lib/_provider_paths.sh +162 -0
  836. package/ds-canonical/fork/launchers/approval-evidence.mjs +1321 -0
  837. package/ds-canonical/fork/launchers/authority-decision-evidence.mjs +413 -0
  838. package/ds-canonical/fork/launchers/canonical-order.mjs +8 -0
  839. package/ds-canonical/fork/launchers/fork-governance-dispatcher.sh +154 -0
  840. package/ds-canonical/fork/launchers/format-provider-hook-output.mjs +25 -0
  841. package/ds-canonical/fork/launchers/independent-review.mjs +490 -0
  842. package/ds-canonical/fork/launchers/inject_fork_governance_preamble.sh +99 -0
  843. package/ds-canonical/fork/launchers/normalize-provider-event.mjs +355 -0
  844. package/ds-canonical/fork/launchers/product-hook-dispatch-runtime.mjs +1067 -0
  845. package/ds-canonical/fork/launchers/provider-hook-normalization.mjs +1640 -0
  846. package/ds-canonical/fork/launchers/provider-hook-output-transport.mjs +540 -0
  847. package/ds-canonical/fork/launchers/settings-hooks.json +35 -0
  848. package/ds-canonical/fork/manifest.json +1984 -0
  849. package/ds-canonical/fork/providers/claude/hook-config.json +327 -0
  850. package/ds-canonical/fork/providers/claude/instruction.md +54 -0
  851. package/ds-canonical/fork/providers/claude/skills/bug-fix-rhythm/SKILL.md +207 -0
  852. package/ds-canonical/fork/providers/claude/skills/code-quality-audit/SKILL.md +71 -0
  853. package/ds-canonical/fork/providers/claude/skills/delivery-handoff/SKILL.md +244 -0
  854. package/ds-canonical/fork/providers/claude/skills/delivery-handoff/references/flow-diagram.md +180 -0
  855. package/ds-canonical/fork/providers/claude/skills/delivery-handoff/references/handoff-template.md +177 -0
  856. package/ds-canonical/fork/providers/claude/skills/delivery-handoff/references/inventory-checklist.md +196 -0
  857. package/ds-canonical/fork/providers/claude/skills/independent-review/SKILL.md +43 -0
  858. package/ds-canonical/fork/providers/claude/skills/independent-review/agents/openai.yaml +4 -0
  859. package/ds-canonical/fork/providers/claude/skills/independent-review/references/evidence-contract.md +23 -0
  860. package/ds-canonical/fork/providers/claude/skills/performance-audit/SKILL.md +114 -0
  861. package/ds-canonical/fork/providers/claude/skills/product-ui-audit/SKILL.md +252 -0
  862. package/ds-canonical/fork/providers/claude/skills/product-ui-audit/references/audit-checks.md +250 -0
  863. package/ds-canonical/fork/providers/claude/skills/product-ui-audit/references/common-misuses.md +329 -0
  864. package/ds-canonical/fork/providers/claude/skills/product-ui-audit/references/report-template.md +163 -0
  865. package/ds-canonical/fork/providers/claude/skills/propose-options/SKILL.md +190 -0
  866. package/ds-canonical/fork/providers/claude/skills/prototype/SKILL.md +246 -0
  867. package/ds-canonical/fork/providers/claude/skills/prototype/references/audit-checks.md +39 -0
  868. package/ds-canonical/fork/providers/claude/skills/prototype/references/benchmark-sources.md +94 -0
  869. package/ds-canonical/fork/providers/claude/skills/prototype/references/checkpoints.md +200 -0
  870. package/ds-canonical/fork/providers/claude/skills/prototype/references/evaluation-matrix.md +142 -0
  871. package/ds-canonical/fork/providers/claude/skills/prototype/references/ooux-template.md +198 -0
  872. package/ds-canonical/fork/providers/claude/skills/prototype/references/proposal-template.md +230 -0
  873. package/ds-canonical/fork/providers/claude/skills/scan-similar-bugs/SKILL.md +203 -0
  874. package/ds-canonical/fork/providers/claude/skills/ux-audit/SKILL.md +135 -0
  875. package/ds-canonical/fork/providers/claude/skills/visual-audit/SKILL.md +258 -0
  876. package/ds-canonical/fork/providers/claude/skills/visual-audit/output/.gitkeep +0 -0
  877. package/ds-canonical/fork/providers/claude/skills/visual-audit/references/audit-architecture.md +101 -0
  878. package/ds-canonical/fork/providers/claude/skills/visual-audit/references/visual-checklist.md +297 -0
  879. package/ds-canonical/fork/providers/claude/skills/visual-audit/references/world-class-benchmarks.md +198 -0
  880. package/ds-canonical/fork/providers/codex/hook-config.json +57 -0
  881. package/ds-canonical/fork/providers/codex/skills/bug-fix-rhythm/SKILL.md +207 -0
  882. package/ds-canonical/fork/providers/codex/skills/code-quality-audit/SKILL.md +71 -0
  883. package/ds-canonical/fork/providers/codex/skills/delivery-handoff/SKILL.md +244 -0
  884. package/ds-canonical/fork/providers/codex/skills/delivery-handoff/references/flow-diagram.md +180 -0
  885. package/ds-canonical/fork/providers/codex/skills/delivery-handoff/references/handoff-template.md +177 -0
  886. package/ds-canonical/fork/providers/codex/skills/delivery-handoff/references/inventory-checklist.md +196 -0
  887. package/ds-canonical/fork/providers/codex/skills/independent-review/SKILL.md +43 -0
  888. package/ds-canonical/fork/providers/codex/skills/independent-review/agents/openai.yaml +4 -0
  889. package/ds-canonical/fork/providers/codex/skills/independent-review/references/evidence-contract.md +23 -0
  890. package/ds-canonical/fork/providers/codex/skills/performance-audit/SKILL.md +114 -0
  891. package/ds-canonical/fork/providers/codex/skills/product-ui-audit/SKILL.md +252 -0
  892. package/ds-canonical/fork/providers/codex/skills/product-ui-audit/references/audit-checks.md +250 -0
  893. package/ds-canonical/fork/providers/codex/skills/product-ui-audit/references/common-misuses.md +329 -0
  894. package/ds-canonical/fork/providers/codex/skills/product-ui-audit/references/report-template.md +163 -0
  895. package/ds-canonical/fork/providers/codex/skills/propose-options/SKILL.md +190 -0
  896. package/ds-canonical/fork/providers/codex/skills/prototype/SKILL.md +246 -0
  897. package/ds-canonical/fork/providers/codex/skills/prototype/references/audit-checks.md +39 -0
  898. package/ds-canonical/fork/providers/codex/skills/prototype/references/benchmark-sources.md +94 -0
  899. package/ds-canonical/fork/providers/codex/skills/prototype/references/checkpoints.md +200 -0
  900. package/ds-canonical/fork/providers/codex/skills/prototype/references/evaluation-matrix.md +142 -0
  901. package/ds-canonical/fork/providers/codex/skills/prototype/references/ooux-template.md +198 -0
  902. package/ds-canonical/fork/providers/codex/skills/prototype/references/proposal-template.md +230 -0
  903. package/ds-canonical/fork/providers/codex/skills/scan-similar-bugs/SKILL.md +203 -0
  904. package/ds-canonical/fork/providers/codex/skills/ux-audit/SKILL.md +135 -0
  905. package/ds-canonical/fork/providers/codex/skills/visual-audit/SKILL.md +258 -0
  906. package/ds-canonical/fork/providers/codex/skills/visual-audit/output/.gitkeep +0 -0
  907. package/ds-canonical/fork/providers/codex/skills/visual-audit/references/audit-architecture.md +101 -0
  908. package/ds-canonical/fork/providers/codex/skills/visual-audit/references/visual-checklist.md +297 -0
  909. package/ds-canonical/fork/providers/codex/skills/visual-audit/references/world-class-benchmarks.md +198 -0
  910. package/ds-canonical/fork/references/story-baseline-registry.json +123 -0
  911. package/ds-canonical/fork/references/story-baseline-registry.schema.json +145 -0
  912. package/ds-canonical/fork/references/utility-registry.json +426 -0
  913. package/ds-canonical/fork/references/utility-registry.schema.json +409 -0
  914. package/ds-canonical/fork/review/canonical-order.mjs +8 -0
  915. package/ds-canonical/fork/review/provider-review-binding.mjs +2377 -0
  916. package/ds-canonical/fork/skills/bug-fix-rhythm/SKILL.md +196 -0
  917. package/ds-canonical/fork/skills/code-quality-audit/SKILL.md +69 -0
  918. package/ds-canonical/fork/skills/delivery-handoff/SKILL.md +242 -0
  919. package/ds-canonical/fork/skills/delivery-handoff/references/flow-diagram.md +180 -0
  920. package/ds-canonical/fork/skills/delivery-handoff/references/handoff-template.md +177 -0
  921. package/ds-canonical/fork/skills/delivery-handoff/references/inventory-checklist.md +196 -0
  922. package/ds-canonical/fork/skills/independent-review/SKILL.md +37 -0
  923. package/ds-canonical/fork/skills/independent-review/agents/openai.yaml +4 -0
  924. package/ds-canonical/fork/skills/independent-review/references/evidence-contract.md +23 -0
  925. package/ds-canonical/fork/skills/performance-audit/SKILL.md +112 -0
  926. package/ds-canonical/fork/skills/product-ui-audit/SKILL.md +250 -0
  927. package/ds-canonical/fork/skills/product-ui-audit/references/audit-checks.md +250 -0
  928. package/ds-canonical/fork/skills/product-ui-audit/references/common-misuses.md +329 -0
  929. package/ds-canonical/fork/skills/product-ui-audit/references/report-template.md +163 -0
  930. package/ds-canonical/fork/skills/propose-options/SKILL.md +179 -0
  931. package/ds-canonical/fork/skills/prototype/SKILL.md +244 -0
  932. package/ds-canonical/fork/skills/prototype/references/audit-checks.md +39 -0
  933. package/ds-canonical/fork/skills/prototype/references/benchmark-sources.md +94 -0
  934. package/ds-canonical/fork/skills/prototype/references/checkpoints.md +200 -0
  935. package/ds-canonical/fork/skills/prototype/references/evaluation-matrix.md +142 -0
  936. package/ds-canonical/fork/skills/prototype/references/ooux-template.md +198 -0
  937. package/ds-canonical/fork/skills/prototype/references/proposal-template.md +230 -0
  938. package/ds-canonical/fork/skills/scan-similar-bugs/SKILL.md +201 -0
  939. package/ds-canonical/fork/skills/ux-audit/SKILL.md +133 -0
  940. package/ds-canonical/fork/skills/visual-audit/SKILL.md +248 -0
  941. package/ds-canonical/fork/skills/visual-audit/output/.gitkeep +0 -0
  942. package/ds-canonical/fork/skills/visual-audit/references/audit-architecture.md +101 -0
  943. package/ds-canonical/fork/skills/visual-audit/references/visual-checklist.md +297 -0
  944. package/ds-canonical/fork/skills/visual-audit/references/world-class-benchmarks.md +198 -0
  945. package/ds-canonical/hooks/README.md +39 -25
  946. package/ds-canonical/hooks/_log-fire.sh +111 -12
  947. package/ds-canonical/hooks/auto_regen_ds_barrel.sh +90 -0
  948. package/ds-canonical/hooks/block_prototype_imports.py +156 -26
  949. package/ds-canonical/hooks/check_audit_post_report_validator.sh +328 -32
  950. package/ds-canonical/hooks/check_audit_sample_escape.sh +10 -7
  951. package/ds-canonical/hooks/check_benchmark_citation.sh +41 -8
  952. package/ds-canonical/hooks/check_canonical_propagation.sh +85 -24
  953. package/ds-canonical/hooks/check_chrome_header_avatar_canonical.sh +106 -0
  954. package/ds-canonical/hooks/check_codex_brief_invariants.sh +138 -29
  955. package/ds-canonical/hooks/check_codex_collab_5step.sh +31 -25
  956. package/ds-canonical/hooks/check_consumer_app_invariants.sh +731 -0
  957. package/ds-canonical/hooks/check_consumer_code_quality.sh +173 -0
  958. package/ds-canonical/hooks/check_datatable_invariants.sh +173 -29
  959. package/ds-canonical/hooks/check_dim_count_drift.sh +8 -7
  960. package/ds-canonical/hooks/check_ds_anchor_preflight.sh +219 -0
  961. package/ds-canonical/hooks/check_dynamic_tailwind_class.sh +57 -0
  962. package/ds-canonical/hooks/check_escape_marker_abuse.sh +213 -0
  963. package/ds-canonical/hooks/check_field_controls_contracts.sh +37 -8
  964. package/ds-canonical/hooks/check_field_family_invariants.sh +195 -24
  965. package/ds-canonical/hooks/check_file_size_budget.sh +32 -14
  966. package/ds-canonical/hooks/check_full_story_visual_interaction_sweep.sh +111 -0
  967. package/ds-canonical/hooks/check_item_list_gap.sh +56 -0
  968. package/ds-canonical/hooks/check_layout_space_magic_numbers.sh +160 -0
  969. package/ds-canonical/hooks/check_main_branch_workbench.sh +27 -68
  970. package/ds-canonical/hooks/check_naming_and_abstraction.sh +21 -10
  971. package/ds-canonical/hooks/check_opacity_token_usage.sh +238 -68
  972. package/ds-canonical/hooks/check_orphan_ds_css.sh +96 -0
  973. package/ds-canonical/hooks/check_overlay_open_focus_escape_probe.sh +110 -0
  974. package/ds-canonical/hooks/check_pattern_invariants.sh +160 -15
  975. package/ds-canonical/hooks/check_peoplepicker_ssot_drift.sh +4 -4
  976. package/ds-canonical/hooks/check_pixel_quantified_audit.sh +6 -4
  977. package/ds-canonical/hooks/check_plugin_fork_health.sh +282 -0
  978. package/ds-canonical/hooks/check_propose_discipline.sh +255 -0
  979. package/ds-canonical/hooks/check_propose_pre_grep_verify.sh +6 -4
  980. package/ds-canonical/hooks/check_propose_without_benchmark.sh +71 -0
  981. package/ds-canonical/hooks/check_select_all_canonical.sh +1 -1
  982. package/ds-canonical/hooks/check_sidebar_menu_button_implicit_wrap.sh +99 -0
  983. package/ds-canonical/hooks/check_solo_workflow.sh +62 -168
  984. package/ds-canonical/hooks/check_spec_class_drift.sh +33 -19
  985. package/ds-canonical/hooks/check_ssot_header_declaration.sh +56 -0
  986. package/ds-canonical/hooks/check_story_determinism.sh +39 -0
  987. package/ds-canonical/hooks/check_story_invariants.sh +722 -222
  988. package/ds-canonical/hooks/check_storybook_addon_packaging.sh +201 -0
  989. package/ds-canonical/hooks/check_substantive_edit_approval_preflight.sh +143 -64
  990. package/ds-canonical/hooks/check_tabs_content_chrome_body_double_gap.sh +241 -0
  991. package/ds-canonical/hooks/check_tailwind_wildcard_in_docs.sh +86 -0
  992. package/ds-canonical/hooks/check_wrapper_primitive_schema_drift.sh +15 -12
  993. package/ds-canonical/hooks/chrome_header_dispatcher.sh +105 -0
  994. package/ds-canonical/hooks/enforce_home_charter.sh +31 -10
  995. package/ds-canonical/hooks/governance_control_plane.sh +15 -0
  996. package/ds-canonical/hooks/inject_deploy_url_after_push.sh +333 -0
  997. package/ds-canonical/hooks/inject_pending_self_audit.sh +68 -21
  998. package/ds-canonical/hooks/lib/_app_shell_primary_header_consistency.sh +148 -0
  999. package/ds-canonical/hooks/lib/_chrome_header_handcraft.sh +121 -0
  1000. package/ds-canonical/hooks/lib/_code_quality.sh +9 -9
  1001. package/ds-canonical/hooks/lib/_cva_default_sync.sh +11 -13
  1002. package/ds-canonical/hooks/lib/_governance_coverage_check.sh +48 -21
  1003. package/ds-canonical/hooks/lib/_hardcoded_strings.sh +18 -10
  1004. package/ds-canonical/hooks/lib/_header_with_tabs_border.sh +107 -0
  1005. package/ds-canonical/hooks/lib/_hook_integrity.sh +158 -0
  1006. package/ds-canonical/hooks/lib/_layout_space_canonical.sh +5 -5
  1007. package/ds-canonical/hooks/lib/_micro_geometry.sh +291 -0
  1008. package/ds-canonical/hooks/lib/_overlay_handcraft.sh +42 -23
  1009. package/ds-canonical/hooks/lib/_person_data_richness.sh +5 -5
  1010. package/ds-canonical/hooks/lib/_provider_paths.sh +162 -0
  1011. package/ds-canonical/hooks/lib/_story_compile_drift.sh +5 -5
  1012. package/ds-canonical/hooks/lib/_tab_lg_chrome_header_equal.sh +290 -0
  1013. package/ds-canonical/hooks/lib/_token_hygiene.sh +55 -20
  1014. package/ds-canonical/hooks/lib/approval-evidence.mjs +1321 -0
  1015. package/ds-canonical/hooks/lib/audit-report-validator.mjs +122 -0
  1016. package/ds-canonical/hooks/lib/provider-marker-regex.mjs +23 -0
  1017. package/ds-canonical/hooks/lib/tsx-governance-analysis.mjs +410 -0
  1018. package/ds-canonical/hooks/log_governance_fires.sh +45 -13
  1019. package/ds-canonical/hooks/log_skill_invokes.sh +8 -7
  1020. package/ds-canonical/hooks/post_edit_dispatcher.sh +106 -28
  1021. package/ds-canonical/hooks/registrations.json +488 -0
  1022. package/ds-canonical/hooks/registrations.schema.json +58 -0
  1023. package/ds-canonical/hooks/retired/2026-06-11-prune-merge/check_addon_subdir_ship.sh +76 -0
  1024. package/ds-canonical/hooks/retired/2026-06-11-prune-merge/check_consumer_app_story_title.sh +81 -0
  1025. package/ds-canonical/hooks/retired/2026-06-11-prune-merge/check_consumer_ds_primitive_misuse.sh +120 -0
  1026. package/ds-canonical/hooks/retired/2026-06-11-prune-merge/check_consumer_no_ds_catalog.sh +101 -0
  1027. package/ds-canonical/hooks/retired/2026-06-11-prune-merge/check_consumer_story_baseline.sh +76 -0
  1028. package/ds-canonical/hooks/retired/2026-06-11-prune-merge/check_data_table_size_num_to_meta_width.sh +68 -0
  1029. package/ds-canonical/hooks/retired/2026-06-11-prune-merge/check_fork_user_plugin_install.sh +79 -0
  1030. package/ds-canonical/hooks/retired/2026-06-11-prune-merge/check_plugin_freshness.sh +68 -0
  1031. package/ds-canonical/hooks/retired/2026-06-11-prune-merge/check_propose_cite_required.sh +88 -0
  1032. package/ds-canonical/hooks/{check_propose_plain_chinese.sh → retired/2026-06-11-prune-merge/check_propose_plain_chinese.sh} +2 -2
  1033. package/ds-canonical/hooks/retired/2026-06-11-prune-merge/check_storybook_addon_preset_cjs.sh +87 -0
  1034. package/ds-canonical/hooks/{lib/_approval_re.sh → retired/_approval_re.sh.retired-2026-08-18} +6 -7
  1035. package/ds-canonical/hooks/retired/check_container_breathing.sh +1 -1
  1036. package/ds-canonical/hooks/retired/check_governance_compliance.sh +1 -1
  1037. package/ds-canonical/hooks/session_start_governance_check.sh +157 -69
  1038. package/ds-canonical/hooks/stop_audit_content_quality.sh +20 -0
  1039. package/ds-canonical/hooks/stop_extract_canonical_rules.sh +20 -0
  1040. package/ds-canonical/hooks/stop_passive_logging.sh +133 -59
  1041. package/ds-canonical/hooks/stop_self_audit.sh +472 -178
  1042. package/ds-canonical/hooks/tests/fixtures/transcripts/claude-transcript-jsonl-v1.jsonl +3 -0
  1043. package/ds-canonical/hooks/tests/fixtures/transcripts/claude-transcript-jsonl-v2.jsonl +3 -0
  1044. package/ds-canonical/hooks/tests/registration-output-contracts.mjs +151 -0
  1045. package/ds-canonical/hooks/tests/run-all.sh +35 -5
  1046. package/ds-canonical/hooks/tests/test_auto_regen_ds_barrel.sh +224 -0
  1047. package/ds-canonical/hooks/tests/test_block_prototype_imports.sh +181 -9
  1048. package/ds-canonical/hooks/tests/test_check_addon_subdir_ship.sh +171 -0
  1049. package/ds-canonical/hooks/tests/test_check_app_shell_primary_header_consistency.sh +275 -81
  1050. package/ds-canonical/hooks/tests/test_check_audit_post_report_validator.sh +292 -14
  1051. package/ds-canonical/hooks/tests/test_check_audit_sample_escape.sh +0 -0
  1052. package/ds-canonical/hooks/tests/test_check_benchmark_citation.sh +41 -9
  1053. package/ds-canonical/hooks/tests/test_check_canonical_propagation.sh +56 -5
  1054. package/ds-canonical/hooks/tests/test_check_chrome_header_avatar_canonical.sh +198 -0
  1055. package/ds-canonical/hooks/tests/test_check_chrome_header_handcraft.sh +197 -81
  1056. package/ds-canonical/hooks/tests/test_check_codex_brief_invariants.sh +375 -0
  1057. package/ds-canonical/hooks/tests/test_check_codex_collab_5step.sh +49 -5
  1058. package/ds-canonical/hooks/tests/test_check_consumer_app_invariants.sh +140 -0
  1059. package/ds-canonical/hooks/tests/test_check_consumer_app_story_title.sh +164 -0
  1060. package/ds-canonical/hooks/tests/test_check_consumer_code_quality.sh +86 -0
  1061. package/ds-canonical/hooks/tests/test_check_consumer_ds_primitive_misuse.sh +417 -0
  1062. package/ds-canonical/hooks/tests/test_check_consumer_no_ds_catalog.sh +214 -0
  1063. package/ds-canonical/hooks/tests/test_check_consumer_story_baseline.sh +209 -0
  1064. package/ds-canonical/hooks/tests/test_check_data_table_size_num_to_meta_width.sh +71 -0
  1065. package/ds-canonical/hooks/tests/test_check_datatable_invariants.sh +126 -12
  1066. package/ds-canonical/hooks/tests/test_check_dim_count_drift.sh +13 -8
  1067. package/ds-canonical/hooks/tests/test_check_ds_anchor_preflight.sh +150 -0
  1068. package/ds-canonical/hooks/tests/test_check_dynamic_tailwind_class.sh +76 -0
  1069. package/ds-canonical/hooks/tests/test_check_escape_marker_abuse.sh +278 -0
  1070. package/ds-canonical/hooks/tests/test_check_field_family_invariants.sh +108 -18
  1071. package/ds-canonical/hooks/tests/test_check_file_size_budget.sh +67 -5
  1072. package/ds-canonical/hooks/tests/test_check_fork_user_plugin_install.sh +151 -0
  1073. package/ds-canonical/hooks/tests/test_check_full_story_visual_interaction_sweep.sh +200 -0
  1074. package/ds-canonical/hooks/tests/test_check_header_with_tabs_border.sh +178 -68
  1075. package/ds-canonical/hooks/tests/test_check_item_list_gap.sh +44 -0
  1076. package/ds-canonical/hooks/tests/test_check_layout_space_magic_numbers.sh +264 -0
  1077. package/ds-canonical/hooks/tests/test_check_main_branch_workbench.sh +45 -110
  1078. package/ds-canonical/hooks/tests/test_check_naming_and_abstraction.sh +19 -2
  1079. package/ds-canonical/hooks/tests/test_check_opacity_token_usage.sh +151 -6
  1080. package/ds-canonical/hooks/tests/test_check_orphan_ds_css.sh +228 -0
  1081. package/ds-canonical/hooks/tests/test_check_overlay_open_focus_escape_probe.sh +191 -0
  1082. package/ds-canonical/hooks/tests/test_check_pattern_invariants.sh +103 -7
  1083. package/ds-canonical/hooks/tests/test_check_plugin_fork_health.sh +132 -0
  1084. package/ds-canonical/hooks/tests/test_check_propose_cite_required.sh +181 -0
  1085. package/ds-canonical/hooks/tests/test_check_propose_discipline.sh +69 -0
  1086. package/ds-canonical/hooks/tests/test_check_propose_plain_chinese.sh +10 -7
  1087. package/ds-canonical/hooks/tests/test_check_propose_pre_grep_verify.sh +5 -5
  1088. package/ds-canonical/hooks/tests/test_check_propose_without_benchmark.sh +100 -0
  1089. package/ds-canonical/hooks/tests/test_check_sidebar_menu_button_implicit_wrap.sh +224 -0
  1090. package/ds-canonical/hooks/tests/test_check_solo_workflow.sh +86 -105
  1091. package/ds-canonical/hooks/tests/test_check_spec_class_drift.sh +35 -7
  1092. package/ds-canonical/hooks/tests/test_check_ssot_header_declaration.sh +72 -0
  1093. package/ds-canonical/hooks/tests/{test_check_story_anatomy.sh.broken → test_check_story_anatomy.sh} +73 -4
  1094. package/ds-canonical/hooks/tests/test_check_story_category.sh +411 -0
  1095. package/ds-canonical/hooks/tests/test_check_story_determinism.sh +39 -0
  1096. package/ds-canonical/hooks/tests/test_check_story_invariants.sh +734 -43
  1097. package/ds-canonical/hooks/tests/{test_check_story_name_jargon.sh.broken → test_check_story_name_jargon.sh} +22 -1
  1098. package/ds-canonical/hooks/tests/test_check_storybook_addon_packaging.sh +89 -0
  1099. package/ds-canonical/hooks/tests/test_check_storybook_addon_preset_cjs.sh +200 -0
  1100. package/ds-canonical/hooks/tests/test_check_substantive_edit_approval_preflight.sh +672 -28
  1101. package/ds-canonical/hooks/tests/test_check_tab_lg_chrome_header_equal.sh +182 -97
  1102. package/ds-canonical/hooks/tests/test_check_tabs_content_chrome_body_double_gap.sh +76 -0
  1103. package/ds-canonical/hooks/tests/test_check_tailwind_wildcard_in_docs.sh +182 -0
  1104. package/ds-canonical/hooks/tests/test_check_token_hygiene.sh +63 -15
  1105. package/ds-canonical/hooks/tests/test_check_wrapper_primitive_schema_drift.sh +12 -6
  1106. package/ds-canonical/hooks/tests/test_chrome_header_dispatcher.sh +125 -0
  1107. package/ds-canonical/hooks/tests/test_enforce_home_charter.sh +58 -4
  1108. package/ds-canonical/hooks/tests/test_governance_control_plane.sh +66 -0
  1109. package/ds-canonical/hooks/tests/test_governance_coverage_check.sh +88 -0
  1110. package/ds-canonical/hooks/tests/test_hook_integrity_classification.sh +217 -0
  1111. package/ds-canonical/hooks/tests/test_inject_deploy_url_after_push.sh +276 -0
  1112. package/ds-canonical/hooks/tests/test_inject_pending_self_audit.sh +116 -11
  1113. package/ds-canonical/hooks/tests/test_log_governance_fires.sh +117 -1
  1114. package/ds-canonical/hooks/tests/test_log_skill_invokes.sh +74 -5
  1115. package/ds-canonical/hooks/tests/test_post_edit_dispatcher.sh +234 -77
  1116. package/ds-canonical/hooks/tests/test_provider_peer_symmetry.sh +76 -0
  1117. package/ds-canonical/hooks/tests/test_registration_output_contracts.sh +20 -0
  1118. package/ds-canonical/hooks/tests/test_session_start_governance_check.sh +145 -22
  1119. package/ds-canonical/hooks/tests/test_stop_audit_content_quality.sh +75 -0
  1120. package/ds-canonical/hooks/tests/test_stop_capture_metrics.sh +101 -23
  1121. package/ds-canonical/hooks/tests/test_stop_extract_canonical_rules.sh +75 -0
  1122. package/ds-canonical/hooks/tests/{test_stop_governance_drift_check.sh.broken → test_stop_governance_drift_check.sh} +22 -12
  1123. package/ds-canonical/hooks/tests/test_stop_passive_logging.sh +102 -1
  1124. package/ds-canonical/hooks/tests/test_stop_repository_command_context.sh +38 -0
  1125. package/ds-canonical/hooks/tests/test_stop_self_audit.sh +427 -13
  1126. package/ds-canonical/references/README.md +19 -11
  1127. package/ds-canonical/references/build-ui-canonicals.md +23 -6
  1128. package/ds-canonical/references/certified-surfaces.md +46 -0
  1129. package/ds-canonical/references/composition-fidelity.md +47 -0
  1130. package/ds-canonical/references/cva-patterns.md +2 -2
  1131. package/ds-canonical/references/drag-canonical.md +67 -311
  1132. package/ds-canonical/references/failure-class-registry.json +160 -0
  1133. package/ds-canonical/references/governance-audit-coverage.md +34 -0
  1134. package/ds-canonical/references/item-anatomy-recipe.md +3 -3
  1135. package/ds-canonical/references/naming-conventions.md +2 -1
  1136. package/ds-canonical/references/principle-dim-map.json +136 -9
  1137. package/ds-canonical/references/props-naming.md +18 -3
  1138. package/ds-canonical/references/repository-hygiene-policy.json +143 -0
  1139. package/ds-canonical/references/repository-hygiene.md +106 -0
  1140. package/ds-canonical/references/runtime-evidence-retention.md +88 -0
  1141. package/ds-canonical/references/scenario-definition.md +146 -0
  1142. package/ds-canonical/references/spec-rules.md +1 -1
  1143. package/ds-canonical/references/ssot-consultation.md +5 -5
  1144. package/ds-canonical/references/ssot-index.md +11 -10
  1145. package/ds-canonical/references/story-baseline-registry.json +55 -11
  1146. package/ds-canonical/references/story-baseline-registry.schema.json +145 -0
  1147. package/ds-canonical/references/structural-token-retention.md +7 -10
  1148. package/ds-canonical/references/tailwind-gotchas.md +4 -4
  1149. package/ds-canonical/references/ui-dev-rules.md +22 -1
  1150. package/ds-canonical/rules/README.md +15 -10
  1151. package/ds-canonical/rules/meta-patterns.md +30 -30
  1152. package/ds-canonical/rules/self-verify.md +22 -12
  1153. package/ds-canonical/rules/spec-rules.md +2 -2
  1154. package/ds-canonical/rules/story-rules.md +36 -9
  1155. package/ds-canonical/rules/ui-development.md +23 -15
  1156. package/ds-canonical/skills/README.md +29 -17
  1157. package/ds-canonical/skills/bug-fix-rhythm/SKILL.md +26 -13
  1158. package/ds-canonical/skills/canonical-reviewer/SKILL.md +29 -0
  1159. package/ds-canonical/skills/code-quality-audit/SKILL.md +15 -11
  1160. package/ds-canonical/skills/codex-collab/SKILL.md +22 -235
  1161. package/ds-canonical/skills/codex-collab/references/brief-template.md +37 -43
  1162. package/ds-canonical/skills/codex-collab/references/transport.md +38 -57
  1163. package/ds-canonical/skills/codify-corrections/SKILL.md +37 -36
  1164. package/ds-canonical/skills/codify-principle/SKILL.md +35 -34
  1165. package/ds-canonical/skills/component-quality-gate/SKILL.md +17 -17
  1166. package/ds-canonical/skills/component-quality-gate/references/checklist.md +8 -8
  1167. package/ds-canonical/skills/deep-audit-cross-codex/SKILL.md +47 -224
  1168. package/ds-canonical/skills/deep-audit-cross-codex/references/phase-a-workflow.md +36 -102
  1169. package/ds-canonical/skills/deep-audit-cross-codex/references/phase-b-codex-brief.md +33 -147
  1170. package/ds-canonical/skills/deep-audit-cross-codex/references/skill-relationships-antipatterns-benchmarks.md +28 -0
  1171. package/ds-canonical/skills/deep-audit-cross-codex/references/triage-rubric.md +15 -80
  1172. package/ds-canonical/skills/deep-audit-cross-codex/references/upstream-directives-r-mapping.md +34 -0
  1173. package/ds-canonical/skills/delivery-handoff/SKILL.md +19 -8
  1174. package/ds-canonical/skills/design-system-audit/SKILL.md +130 -76
  1175. package/ds-canonical/skills/design-system-audit/references/audit-prompts.md +207 -105
  1176. package/ds-canonical/skills/design-system-audit/references/checkpoints.md +59 -50
  1177. package/ds-canonical/skills/design-system-audit/references/historical-bugs.md +33 -9
  1178. package/ds-canonical/skills/design-system-audit/references/principle-audit-protocol.md +51 -32
  1179. package/ds-canonical/skills/design-system-audit/references/rule-placement.md +57 -53
  1180. package/ds-canonical/skills/ensure-canonical/SKILL.md +37 -35
  1181. package/ds-canonical/skills/governance-health/SKILL.md +31 -25
  1182. package/ds-canonical/skills/governance-status/SKILL.md +30 -0
  1183. package/ds-canonical/skills/independent-review/SKILL.md +37 -0
  1184. package/ds-canonical/skills/independent-review/agents/openai.yaml +4 -0
  1185. package/ds-canonical/skills/independent-review/references/evidence-contract.md +23 -0
  1186. package/ds-canonical/skills/knowledge-prune/SKILL.md +57 -114
  1187. package/ds-canonical/skills/knowledge-prune/references/phase-z-cross-repo-ssot-propagation.md +15 -0
  1188. package/ds-canonical/skills/knowledge-prune/references/prune-dimensions-d5-d10.md +57 -0
  1189. package/ds-canonical/skills/knowledge-prune/references/world-class-prune-alignment.md +7 -0
  1190. package/ds-canonical/skills/new-component/SKILL.md +33 -25
  1191. package/ds-canonical/skills/new-component/references/new-component-checklist.md +12 -11
  1192. package/ds-canonical/skills/performance-audit/SKILL.md +15 -12
  1193. package/ds-canonical/skills/product-ui-audit/SKILL.md +52 -34
  1194. package/ds-canonical/skills/product-ui-audit/references/audit-checks.md +10 -7
  1195. package/ds-canonical/skills/product-ui-audit/references/report-template.md +30 -26
  1196. package/ds-canonical/skills/propose-options/SKILL.md +23 -23
  1197. package/ds-canonical/skills/prototype/SKILL.md +19 -21
  1198. package/ds-canonical/skills/prototype/references/audit-checks.md +6 -5
  1199. package/ds-canonical/skills/prototype/references/checkpoints.md +26 -17
  1200. package/ds-canonical/skills/prototype/references/evaluation-matrix.md +2 -2
  1201. package/ds-canonical/skills/prototype/references/ooux-template.md +1 -1
  1202. package/ds-canonical/skills/prototype/references/proposal-template.md +5 -5
  1203. package/ds-canonical/skills/scan-similar-bugs/SKILL.md +29 -28
  1204. package/ds-canonical/skills/story-auto-compile-migrate/SKILL.md +26 -25
  1205. package/ds-canonical/skills/story-writing/SKILL.md +25 -14
  1206. package/ds-canonical/skills/story-writing/references/anatomy-standard.md +2 -2
  1207. package/ds-canonical/skills/story-writing/references/category-templates.md +15 -15
  1208. package/ds-canonical/skills/ux-audit/SKILL.md +13 -10
  1209. package/ds-canonical/skills/visual-audit/SKILL.md +47 -46
  1210. package/ds-canonical/skills/visual-audit/references/audit-architecture.md +7 -7
  1211. package/ds-canonical/skills/visual-audit/references/visual-checklist.md +14 -14
  1212. package/ds-canonical/skills/visual-audit/references/world-class-benchmarks.md +3 -3
  1213. package/ds-canonical/templates/_README.md +22 -0
  1214. package/ds-canonical/templates/consumer-governance.md +82 -0
  1215. package/ds-canonical/templates/dashboard-app.tsx +186 -0
  1216. package/ds-canonical/templates/product-launchers/fork-governance-dispatcher.sh +154 -0
  1217. package/ds-canonical/templates/product-launchers/format-provider-hook-output.mjs +25 -0
  1218. package/ds-canonical/templates/product-launchers/independent-review.mjs +490 -0
  1219. package/ds-canonical/templates/product-launchers/inject_fork_governance_preamble.sh +99 -0
  1220. package/ds-canonical/templates/product-launchers/normalize-provider-event.mjs +355 -0
  1221. package/ds-canonical/templates/product-launchers/product-hook-dispatch-runtime.mjs +1067 -0
  1222. package/ds-canonical/templates/product-provider-wiring.json +82 -0
  1223. package/ds-canonical/templates/product-provider-wiring.schema.json +153 -0
  1224. package/ds-story-manifest.json +1791 -0
  1225. package/llms-full.txt +450 -0
  1226. package/llms.txt +74 -0
  1227. package/package.json +43 -10
  1228. package/src/README.md +1 -1
  1229. package/src/components/Accordion/accordion.anatomy.stories.tsx +496 -0
  1230. package/src/components/Accordion/accordion.principles.stories.tsx +365 -0
  1231. package/src/components/Accordion/accordion.spec.md +31 -5
  1232. package/src/components/Accordion/accordion.stories.tsx +192 -0
  1233. package/src/components/Accordion/accordion.tsx +13 -5
  1234. package/src/components/Accordion/index.ts +5 -0
  1235. package/src/components/AccountMenu/account-menu.anatomy.stories.tsx +117 -0
  1236. package/src/components/AccountMenu/account-menu.principles.stories.tsx +99 -0
  1237. package/src/components/AccountMenu/account-menu.spec.md +127 -0
  1238. package/src/components/AccountMenu/account-menu.stories.tsx +65 -0
  1239. package/src/components/AccountMenu/account-menu.tsx +194 -0
  1240. package/src/components/AccountMenu/index.ts +5 -0
  1241. package/src/components/AgentPanel/agent-fab.tsx +126 -0
  1242. package/src/components/AgentPanel/agent-logo.tsx +491 -0
  1243. package/src/components/AgentPanel/agent-panel.anatomy.stories.tsx +127 -0
  1244. package/src/components/AgentPanel/agent-panel.css +59 -0
  1245. package/src/components/AgentPanel/agent-panel.principles.stories.tsx +57 -0
  1246. package/src/components/AgentPanel/agent-panel.spec.md +319 -0
  1247. package/src/components/AgentPanel/agent-panel.stories.tsx +360 -0
  1248. package/src/components/AgentPanel/agent-panel.tsx +1241 -0
  1249. package/src/components/AgentPanel/index.ts +5 -0
  1250. package/src/components/Alert/alert.anatomy.stories.tsx +241 -0
  1251. package/src/components/Alert/alert.principles.stories.tsx +214 -0
  1252. package/src/components/Alert/alert.spec.md +28 -26
  1253. package/src/components/Alert/alert.stories.tsx +136 -0
  1254. package/src/components/Alert/alert.tsx +19 -8
  1255. package/src/components/Alert/index.ts +5 -0
  1256. package/src/components/AppShell/_demo-helpers.tsx +107 -28
  1257. package/src/components/AppShell/app-shell.anatomy.stories.tsx +185 -0
  1258. package/src/components/AppShell/app-shell.principles.stories.tsx +140 -0
  1259. package/src/components/AppShell/app-shell.spec.md +84 -48
  1260. package/src/components/AppShell/app-shell.stories.tsx +445 -0
  1261. package/src/components/AppShell/app-shell.tsx +77 -24
  1262. package/src/components/AppShell/index.ts +5 -0
  1263. package/src/components/AspectRatio/aspect-ratio.anatomy.stories.tsx +208 -0
  1264. package/src/components/AspectRatio/aspect-ratio.principles.stories.tsx +303 -0
  1265. package/src/components/AspectRatio/aspect-ratio.spec.md +24 -12
  1266. package/src/components/AspectRatio/aspect-ratio.stories.tsx +91 -0
  1267. package/src/components/AspectRatio/aspect-ratio.tsx +6 -3
  1268. package/src/components/AspectRatio/index.ts +5 -0
  1269. package/src/components/Avatar/avatar.anatomy.stories.tsx +705 -0
  1270. package/src/components/Avatar/avatar.principles.stories.tsx +249 -0
  1271. package/src/components/Avatar/avatar.spec.md +66 -103
  1272. package/src/components/Avatar/avatar.stories.tsx +156 -0
  1273. package/src/components/Avatar/avatar.tsx +85 -64
  1274. package/src/components/Avatar/index.ts +5 -0
  1275. package/src/components/Badge/badge.anatomy.stories.tsx +591 -0
  1276. package/src/components/Badge/badge.principles.stories.tsx +391 -0
  1277. package/src/components/Badge/badge.spec.md +43 -23
  1278. package/src/components/Badge/badge.stories.tsx +82 -0
  1279. package/src/components/Badge/badge.tsx +38 -14
  1280. package/src/components/Badge/index.ts +5 -0
  1281. package/src/components/Breadcrumb/breadcrumb.anatomy.stories.tsx +462 -0
  1282. package/src/components/Breadcrumb/breadcrumb.principles.stories.tsx +353 -0
  1283. package/src/components/Breadcrumb/breadcrumb.spec.md +55 -43
  1284. package/src/components/Breadcrumb/breadcrumb.stories.tsx +381 -0
  1285. package/src/components/Breadcrumb/breadcrumb.tsx +43 -86
  1286. package/src/components/Breadcrumb/index.ts +5 -0
  1287. package/src/components/BulkActionBar/bulk-action-bar.anatomy.stories.tsx +225 -0
  1288. package/src/components/BulkActionBar/bulk-action-bar.principles.stories.tsx +255 -0
  1289. package/src/components/BulkActionBar/bulk-action-bar.spec.md +64 -36
  1290. package/src/components/BulkActionBar/bulk-action-bar.stories.tsx +124 -0
  1291. package/src/components/BulkActionBar/bulk-action-bar.tsx +26 -18
  1292. package/src/components/BulkActionBar/index.ts +5 -0
  1293. package/src/components/Button/button-group.tsx +64 -21
  1294. package/src/components/Button/button.anatomy.stories.tsx +729 -0
  1295. package/src/components/Button/button.principles.stories.tsx +369 -0
  1296. package/src/components/Button/button.spec.md +42 -39
  1297. package/src/components/Button/button.stories.tsx +368 -0
  1298. package/src/components/Button/button.tsx +109 -55
  1299. package/src/components/Button/index.ts +6 -0
  1300. package/src/components/Calendar/calendar.anatomy.stories.tsx +237 -0
  1301. package/src/components/Calendar/calendar.principles.stories.tsx +152 -0
  1302. package/src/components/Calendar/calendar.spec.md +80 -55
  1303. package/src/components/Calendar/calendar.stories.tsx +108 -0
  1304. package/src/components/Calendar/calendar.tsx +200 -134
  1305. package/src/components/Calendar/index.ts +5 -0
  1306. package/src/components/Carousel/carousel.anatomy.stories.tsx +517 -0
  1307. package/src/components/Carousel/carousel.principles.stories.tsx +334 -0
  1308. package/src/components/Carousel/carousel.spec.md +51 -15
  1309. package/src/components/Carousel/carousel.stories.tsx +125 -0
  1310. package/src/components/Carousel/carousel.tsx +139 -56
  1311. package/src/components/Carousel/index.ts +5 -0
  1312. package/src/components/Chart/chart.anatomy.stories.tsx +310 -0
  1313. package/src/components/Chart/chart.principles.stories.tsx +437 -0
  1314. package/src/components/Chart/chart.spec.md +24 -5
  1315. package/src/components/Chart/chart.stories.tsx +263 -0
  1316. package/src/components/Chart/chart.tsx +10 -3
  1317. package/src/components/Chart/index.ts +5 -0
  1318. package/src/components/Checkbox/checkbox-group.tsx +28 -16
  1319. package/src/components/Checkbox/checkbox.anatomy.stories.tsx +614 -0
  1320. package/src/components/Checkbox/checkbox.principles.stories.tsx +216 -0
  1321. package/src/components/Checkbox/checkbox.spec.md +65 -42
  1322. package/src/components/Checkbox/checkbox.stories.tsx +119 -0
  1323. package/src/components/Checkbox/checkbox.tsx +189 -32
  1324. package/src/components/Checkbox/index.ts +6 -0
  1325. package/src/components/Chip/chip.anatomy.stories.tsx +442 -0
  1326. package/src/components/Chip/chip.principles.stories.tsx +228 -0
  1327. package/src/components/Chip/chip.spec.md +52 -40
  1328. package/src/components/Chip/chip.stories.tsx +111 -0
  1329. package/src/components/Chip/chip.tsx +130 -45
  1330. package/src/components/Chip/index.ts +5 -0
  1331. package/src/components/CircularProgress/circular-progress.anatomy.stories.tsx +177 -0
  1332. package/src/components/CircularProgress/circular-progress.principles.stories.tsx +265 -0
  1333. package/src/components/CircularProgress/circular-progress.spec.md +32 -32
  1334. package/src/components/CircularProgress/circular-progress.stories.tsx +149 -0
  1335. package/src/components/CircularProgress/circular-progress.tsx +5 -6
  1336. package/src/components/CircularProgress/index.ts +5 -0
  1337. package/src/components/Coachmark/coachmark-story-helpers.tsx +39 -0
  1338. package/src/components/Coachmark/coachmark.anatomy.stories.tsx +356 -0
  1339. package/src/components/Coachmark/coachmark.principles.stories.tsx +356 -0
  1340. package/src/components/Coachmark/coachmark.spec.md +36 -29
  1341. package/src/components/Coachmark/coachmark.stories.tsx +220 -0
  1342. package/src/components/Coachmark/coachmark.tsx +36 -10
  1343. package/src/components/Coachmark/index.ts +5 -0
  1344. package/src/components/Combobox/combobox.anatomy.stories.tsx +926 -0
  1345. package/src/components/Combobox/combobox.principles.stories.tsx +238 -0
  1346. package/src/components/Combobox/combobox.spec.md +45 -16
  1347. package/src/components/Combobox/combobox.stories.tsx +194 -0
  1348. package/src/components/Combobox/combobox.tsx +278 -97
  1349. package/src/components/Combobox/index.ts +5 -0
  1350. package/src/components/Command/command.anatomy.stories.tsx +107 -0
  1351. package/src/components/Command/command.principles.stories.tsx +86 -0
  1352. package/src/components/Command/command.spec.md +33 -23
  1353. package/src/components/Command/command.stories.tsx +312 -0
  1354. package/src/components/Command/command.tsx +28 -12
  1355. package/src/components/Command/index.ts +5 -0
  1356. package/src/components/DataTable/active-editor-controller.ts +4 -3
  1357. package/src/components/DataTable/cell-registry.tsx +161 -120
  1358. package/src/components/DataTable/column-types.ts +14 -18
  1359. package/src/components/DataTable/data-table-column-visibility-panel.tsx +28 -12
  1360. package/src/components/DataTable/data-table-filter-group.tsx +248 -0
  1361. package/src/components/DataTable/data-table-filter-labels.ts +100 -0
  1362. package/src/components/DataTable/data-table-filter-panel.tsx +85 -448
  1363. package/src/components/DataTable/data-table-filter-value-picker.tsx +254 -0
  1364. package/src/components/DataTable/data-table-interaction-layer.tsx +26 -29
  1365. package/src/components/DataTable/data-table-sort-manager.tsx +19 -11
  1366. package/src/components/DataTable/data-table.anatomy.stories.tsx +522 -0
  1367. package/src/components/DataTable/data-table.css +34 -8
  1368. package/src/components/DataTable/data-table.principles.stories.tsx +270 -0
  1369. package/src/components/DataTable/data-table.spec.md +186 -172
  1370. package/src/components/DataTable/data-table.stories.tsx +2311 -0
  1371. package/src/components/DataTable/data-table.tsx +678 -278
  1372. package/src/components/DataTable/filter-operators.spec.md +269 -0
  1373. package/src/components/DataTable/filter-operators.ts +1 -1
  1374. package/src/components/DataTable/filter-tree.ts +194 -44
  1375. package/src/components/DataTable/index.ts +8 -0
  1376. package/src/components/DateGrid/date-grid.anatomy.stories.tsx +587 -0
  1377. package/src/components/DateGrid/date-grid.principles.stories.tsx +344 -0
  1378. package/src/components/DateGrid/date-grid.spec.md +46 -41
  1379. package/src/components/DateGrid/date-grid.stories.tsx +204 -0
  1380. package/src/components/DateGrid/date-grid.tsx +89 -28
  1381. package/src/components/DateGrid/index.ts +5 -0
  1382. package/src/components/DatePicker/date-picker.anatomy.stories.tsx +946 -0
  1383. package/src/components/DatePicker/date-picker.principles.stories.tsx +205 -0
  1384. package/src/components/DatePicker/date-picker.spec.md +61 -57
  1385. package/src/components/DatePicker/date-picker.stories.tsx +364 -0
  1386. package/src/components/DatePicker/date-picker.tsx +382 -198
  1387. package/src/components/DatePicker/index.ts +5 -0
  1388. package/src/components/DescriptionList/description-list.anatomy.stories.tsx +254 -0
  1389. package/src/components/DescriptionList/description-list.principles.stories.tsx +309 -0
  1390. package/src/components/DescriptionList/description-list.spec.md +35 -30
  1391. package/src/components/DescriptionList/description-list.stories.tsx +113 -0
  1392. package/src/components/DescriptionList/description-list.tsx +16 -14
  1393. package/src/components/DescriptionList/index.ts +5 -0
  1394. package/src/components/Dialog/dialog.anatomy.stories.tsx +485 -0
  1395. package/src/components/Dialog/dialog.principles.stories.tsx +261 -0
  1396. package/src/components/Dialog/dialog.spec.md +58 -32
  1397. package/src/components/Dialog/dialog.stories.tsx +548 -0
  1398. package/src/components/Dialog/dialog.tsx +81 -36
  1399. package/src/components/Dialog/index.ts +5 -0
  1400. package/src/components/DropdownMenu/dropdown-menu.anatomy.stories.tsx +971 -0
  1401. package/src/components/DropdownMenu/dropdown-menu.principles.stories.tsx +341 -0
  1402. package/src/components/DropdownMenu/dropdown-menu.spec.md +40 -22
  1403. package/src/components/DropdownMenu/dropdown-menu.stories.tsx +276 -0
  1404. package/src/components/DropdownMenu/dropdown-menu.tsx +153 -40
  1405. package/src/components/DropdownMenu/index.ts +5 -0
  1406. package/src/components/Empty/empty.anatomy.stories.tsx +275 -0
  1407. package/src/components/Empty/empty.principles.stories.tsx +314 -0
  1408. package/src/components/Empty/empty.spec.md +42 -42
  1409. package/src/components/Empty/empty.stories.tsx +69 -0
  1410. package/src/components/Empty/empty.tsx +23 -11
  1411. package/src/components/Empty/index.ts +5 -0
  1412. package/src/components/Field/field-context.ts +196 -4
  1413. package/src/components/Field/field-controls.spec.md +161 -54
  1414. package/src/components/Field/field-edit-keys.ts +66 -0
  1415. package/src/components/Field/field-types.ts +71 -20
  1416. package/src/components/Field/field-wrapper.tsx +139 -89
  1417. package/src/components/Field/field.anatomy.stories.tsx +547 -0
  1418. package/src/components/Field/field.principles.stories.tsx +255 -0
  1419. package/src/components/Field/field.spec.md +76 -34
  1420. package/src/components/Field/field.stories.tsx +751 -0
  1421. package/src/components/Field/field.tsx +65 -12
  1422. package/src/components/Field/form-validation.spec.md +60 -34
  1423. package/src/components/Field/index.ts +6 -0
  1424. package/src/components/Field/use-form-validation.ts +270 -0
  1425. package/src/components/FieldControlGroup/field-control-group.anatomy.stories.tsx +119 -0
  1426. package/src/components/FieldControlGroup/field-control-group.principles.stories.tsx +121 -0
  1427. package/src/components/FieldControlGroup/field-control-group.spec.md +41 -19
  1428. package/src/components/FieldControlGroup/field-control-group.stories.tsx +162 -0
  1429. package/src/components/FieldControlGroup/field-control-group.tsx +13 -15
  1430. package/src/components/FieldControlGroup/index.ts +5 -0
  1431. package/src/components/FileItem/file-item.anatomy.stories.tsx +346 -0
  1432. package/src/components/FileItem/file-item.principles.stories.tsx +245 -0
  1433. package/src/components/FileItem/file-item.spec.md +133 -104
  1434. package/src/components/FileItem/file-item.stories.tsx +289 -0
  1435. package/src/components/FileItem/file-item.tsx +85 -39
  1436. package/src/components/FileItem/index.ts +5 -0
  1437. package/src/components/FileUpload/file-upload.anatomy.stories.tsx +446 -0
  1438. package/src/components/FileUpload/file-upload.principles.stories.tsx +312 -0
  1439. package/src/components/FileUpload/file-upload.spec.md +66 -24
  1440. package/src/components/FileUpload/file-upload.stories.tsx +219 -0
  1441. package/src/components/FileUpload/file-upload.tsx +138 -43
  1442. package/src/components/FileUpload/index.ts +5 -0
  1443. package/src/components/FileViewer/can-render-image.ts +15 -0
  1444. package/src/components/FileViewer/file-viewer.anatomy.stories.tsx +1130 -0
  1445. package/src/components/FileViewer/file-viewer.principles.stories.tsx +636 -0
  1446. package/src/components/FileViewer/file-viewer.spec.md +70 -58
  1447. package/src/components/FileViewer/file-viewer.stories.tsx +417 -0
  1448. package/src/components/FileViewer/file-viewer.tsx +157 -72
  1449. package/src/components/FileViewer/image-renderer.tsx +38 -15
  1450. package/src/components/FileViewer/index.ts +5 -0
  1451. package/src/components/HoverCard/hover-card.anatomy.stories.tsx +151 -0
  1452. package/src/components/HoverCard/hover-card.principles.stories.tsx +211 -0
  1453. package/src/components/HoverCard/hover-card.spec.md +38 -28
  1454. package/src/components/HoverCard/hover-card.stories.tsx +304 -0
  1455. package/src/components/HoverCard/hover-card.tsx +23 -6
  1456. package/src/components/HoverCard/index.ts +5 -0
  1457. package/src/components/InlineEdit/index.ts +5 -0
  1458. package/src/components/InlineEdit/inline-edit.anatomy.stories.tsx +250 -0
  1459. package/src/components/InlineEdit/inline-edit.principles.stories.tsx +142 -0
  1460. package/src/components/InlineEdit/inline-edit.spec.md +186 -0
  1461. package/src/components/InlineEdit/inline-edit.stories.tsx +261 -0
  1462. package/src/components/InlineEdit/inline-edit.tsx +455 -0
  1463. package/src/components/Input/index.ts +5 -0
  1464. package/src/components/Input/input.anatomy.stories.tsx +780 -0
  1465. package/src/components/Input/input.principles.stories.tsx +260 -0
  1466. package/src/components/Input/input.spec.md +34 -26
  1467. package/src/components/Input/input.stories.tsx +150 -0
  1468. package/src/components/Input/input.tsx +102 -45
  1469. package/src/components/LinkInput/index.ts +5 -0
  1470. package/src/components/LinkInput/link-input.anatomy.stories.tsx +748 -0
  1471. package/src/components/LinkInput/link-input.principles.stories.tsx +182 -0
  1472. package/src/components/LinkInput/link-input.spec.md +25 -7
  1473. package/src/components/LinkInput/link-input.stories.tsx +133 -0
  1474. package/src/components/LinkInput/link-input.tsx +89 -66
  1475. package/src/components/Menu/index.ts +5 -0
  1476. package/src/components/Menu/menu-item.anatomy.stories.tsx +780 -0
  1477. package/src/components/Menu/menu-item.principles.stories.tsx +81 -0
  1478. package/src/components/Menu/menu-item.spec.md +55 -32
  1479. package/src/components/Menu/menu-item.stories.tsx +242 -0
  1480. package/src/components/Menu/menu-item.tsx +71 -12
  1481. package/src/components/Notice/index.ts +5 -0
  1482. package/src/components/Notice/notice.anatomy.stories.tsx +614 -0
  1483. package/src/components/Notice/notice.principles.stories.tsx +102 -0
  1484. package/src/components/Notice/notice.spec.md +39 -18
  1485. package/src/components/Notice/notice.stories.tsx +257 -0
  1486. package/src/components/Notice/notice.tsx +62 -16
  1487. package/src/components/NumberInput/index.ts +5 -0
  1488. package/src/components/NumberInput/number-input.anatomy.stories.tsx +822 -0
  1489. package/src/components/NumberInput/number-input.principles.stories.tsx +206 -0
  1490. package/src/components/NumberInput/number-input.spec.md +35 -16
  1491. package/src/components/NumberInput/number-input.stories.tsx +167 -0
  1492. package/src/components/NumberInput/number-input.tsx +65 -31
  1493. package/src/components/OverflowIndicator/index.ts +5 -0
  1494. package/src/components/OverflowIndicator/overflow-indicator.anatomy.stories.tsx +550 -0
  1495. package/src/components/OverflowIndicator/overflow-indicator.principles.stories.tsx +76 -0
  1496. package/src/components/OverflowIndicator/overflow-indicator.spec.md +36 -26
  1497. package/src/components/OverflowIndicator/overflow-indicator.stories.tsx +222 -0
  1498. package/src/components/OverflowIndicator/overflow-indicator.tsx +22 -7
  1499. package/src/components/Pagination/index.ts +5 -0
  1500. package/src/components/Pagination/pagination.anatomy.stories.tsx +144 -0
  1501. package/src/components/Pagination/pagination.principles.stories.tsx +81 -0
  1502. package/src/components/Pagination/pagination.spec.md +150 -0
  1503. package/src/components/Pagination/pagination.stories.tsx +97 -0
  1504. package/src/components/Pagination/pagination.tsx +263 -0
  1505. package/src/components/PeoplePicker/avatar-stack-overflow.ts +1 -1
  1506. package/src/components/PeoplePicker/index.ts +5 -0
  1507. package/src/components/PeoplePicker/people-picker-helpers.ts +5 -5
  1508. package/src/components/PeoplePicker/people-picker.anatomy.stories.tsx +437 -0
  1509. package/src/components/PeoplePicker/people-picker.principles.stories.tsx +196 -0
  1510. package/src/components/PeoplePicker/people-picker.spec.md +97 -40
  1511. package/src/components/PeoplePicker/people-picker.stories.tsx +245 -0
  1512. package/src/components/PeoplePicker/people-picker.tsx +225 -108
  1513. package/src/components/PeoplePicker/person-display.tsx +83 -47
  1514. package/src/components/Popover/index.ts +5 -0
  1515. package/src/components/Popover/popover.anatomy.stories.tsx +282 -0
  1516. package/src/components/Popover/popover.principles.stories.tsx +316 -0
  1517. package/src/components/Popover/popover.spec.md +41 -31
  1518. package/src/components/Popover/popover.stories.tsx +120 -0
  1519. package/src/components/Popover/popover.tsx +106 -47
  1520. package/src/components/ProfileCard/index.ts +5 -0
  1521. package/src/components/ProfileCard/profile-card.anatomy.stories.tsx +493 -0
  1522. package/src/components/ProfileCard/profile-card.principles.stories.tsx +225 -0
  1523. package/src/components/ProfileCard/profile-card.spec.md +189 -0
  1524. package/src/components/ProfileCard/profile-card.stories.tsx +57 -0
  1525. package/src/components/{NameCard/name-card.tsx → ProfileCard/profile-card.tsx} +66 -39
  1526. package/src/components/ProgressBar/index.ts +5 -0
  1527. package/src/components/ProgressBar/progress-bar.anatomy.stories.tsx +441 -0
  1528. package/src/components/ProgressBar/progress-bar.principles.stories.tsx +326 -0
  1529. package/src/components/ProgressBar/progress-bar.spec.md +25 -21
  1530. package/src/components/ProgressBar/progress-bar.stories.tsx +133 -0
  1531. package/src/components/ProgressBar/progress-bar.tsx +6 -23
  1532. package/src/components/README.md +5 -4
  1533. package/src/components/RadioGroup/index.ts +5 -0
  1534. package/src/components/RadioGroup/radio-group.anatomy.stories.tsx +672 -0
  1535. package/src/components/RadioGroup/radio-group.principles.stories.tsx +163 -0
  1536. package/src/components/RadioGroup/radio-group.spec.md +15 -9
  1537. package/src/components/RadioGroup/radio-group.stories.tsx +204 -0
  1538. package/src/components/RadioGroup/radio-group.tsx +219 -67
  1539. package/src/components/Rating/index.ts +5 -0
  1540. package/src/components/Rating/rating.anatomy.stories.tsx +498 -0
  1541. package/src/components/Rating/rating.principles.stories.tsx +296 -0
  1542. package/src/components/Rating/rating.spec.md +41 -29
  1543. package/src/components/Rating/rating.stories.tsx +119 -0
  1544. package/src/components/Rating/rating.tsx +37 -18
  1545. package/src/components/ScrollArea/index.ts +5 -0
  1546. package/src/components/ScrollArea/scroll-area.anatomy.stories.tsx +451 -0
  1547. package/src/components/ScrollArea/scroll-area.principles.stories.tsx +331 -0
  1548. package/src/components/ScrollArea/scroll-area.spec.md +24 -22
  1549. package/src/components/ScrollArea/scroll-area.stories.tsx +247 -0
  1550. package/src/components/ScrollArea/scroll-area.tsx +24 -7
  1551. package/src/components/SegmentedControl/index.ts +5 -0
  1552. package/src/components/SegmentedControl/segmented-control.anatomy.stories.tsx +295 -0
  1553. package/src/components/SegmentedControl/segmented-control.principles.stories.tsx +284 -0
  1554. package/src/components/SegmentedControl/segmented-control.spec.md +38 -39
  1555. package/src/components/SegmentedControl/segmented-control.stories.tsx +37 -0
  1556. package/src/components/SegmentedControl/segmented-control.tsx +44 -24
  1557. package/src/components/Select/index.ts +5 -0
  1558. package/src/components/Select/select.anatomy.stories.tsx +834 -0
  1559. package/src/components/Select/select.principles.stories.tsx +312 -0
  1560. package/src/components/Select/select.spec.md +99 -39
  1561. package/src/components/Select/select.stories.tsx +273 -0
  1562. package/src/components/Select/select.tsx +389 -97
  1563. package/src/components/SelectMenu/index.ts +5 -0
  1564. package/src/components/SelectMenu/select-menu.anatomy.stories.tsx +830 -0
  1565. package/src/components/SelectMenu/select-menu.principles.stories.tsx +106 -0
  1566. package/src/components/SelectMenu/select-menu.spec.md +51 -32
  1567. package/src/components/SelectMenu/select-menu.stories.tsx +143 -0
  1568. package/src/components/SelectMenu/select-menu.tsx +276 -33
  1569. package/src/components/SelectionControl/boolean-value.tsx +39 -0
  1570. package/src/components/SelectionControl/index.ts +6 -0
  1571. package/src/components/SelectionControl/selection-item.anatomy.stories.tsx +580 -0
  1572. package/src/components/SelectionControl/selection-item.principles.stories.tsx +77 -0
  1573. package/src/components/SelectionControl/selection-item.spec.md +30 -16
  1574. package/src/components/SelectionControl/selection-item.stories.tsx +137 -0
  1575. package/src/components/SelectionControl/selection-item.tsx +8 -2
  1576. package/src/components/Separator/index.ts +5 -0
  1577. package/src/components/Separator/separator.anatomy.stories.tsx +125 -0
  1578. package/src/components/Separator/separator.principles.stories.tsx +141 -0
  1579. package/src/components/Separator/separator.spec.md +15 -9
  1580. package/src/components/Separator/separator.stories.tsx +106 -0
  1581. package/src/components/Separator/separator.tsx +2 -2
  1582. package/src/components/Sheet/index.ts +5 -0
  1583. package/src/components/Sheet/sheet.anatomy.stories.tsx +269 -0
  1584. package/src/components/Sheet/sheet.principles.stories.tsx +353 -0
  1585. package/src/components/Sheet/sheet.spec.md +16 -17
  1586. package/src/components/Sheet/sheet.stories.tsx +172 -0
  1587. package/src/components/Sheet/sheet.tsx +24 -14
  1588. package/src/components/Sidebar/index.ts +5 -0
  1589. package/src/components/Sidebar/sidebar.anatomy.stories.tsx +776 -0
  1590. package/src/components/Sidebar/sidebar.principles.stories.tsx +507 -0
  1591. package/src/components/Sidebar/sidebar.spec.md +65 -62
  1592. package/src/components/Sidebar/sidebar.stories.tsx +535 -0
  1593. package/src/components/Sidebar/sidebar.tsx +134 -57
  1594. package/src/components/Skeleton/index.ts +5 -0
  1595. package/src/components/Skeleton/skeleton.anatomy.stories.tsx +145 -0
  1596. package/src/components/Skeleton/skeleton.principles.stories.tsx +234 -0
  1597. package/src/components/Skeleton/skeleton.spec.md +15 -14
  1598. package/src/components/Skeleton/skeleton.stories.tsx +134 -0
  1599. package/src/components/Skeleton/skeleton.tsx +2 -2
  1600. package/src/components/Slider/index.ts +5 -0
  1601. package/src/components/Slider/slider.anatomy.stories.tsx +237 -0
  1602. package/src/components/Slider/slider.principles.stories.tsx +250 -0
  1603. package/src/components/Slider/slider.spec.md +66 -118
  1604. package/src/components/Slider/slider.stories.tsx +115 -0
  1605. package/src/components/Slider/slider.tsx +83 -26
  1606. package/src/components/Steps/index.ts +5 -0
  1607. package/src/components/Steps/steps.anatomy.stories.tsx +448 -0
  1608. package/src/components/Steps/steps.principles.stories.tsx +300 -0
  1609. package/src/components/Steps/steps.spec.md +91 -74
  1610. package/src/components/Steps/steps.stories.tsx +306 -0
  1611. package/src/components/Steps/steps.tsx +99 -37
  1612. package/src/components/Switch/index.ts +5 -0
  1613. package/src/components/Switch/switch.anatomy.stories.tsx +227 -0
  1614. package/src/components/Switch/switch.principles.stories.tsx +177 -0
  1615. package/src/components/Switch/switch.spec.md +53 -24
  1616. package/src/components/Switch/switch.stories.tsx +95 -0
  1617. package/src/components/Switch/switch.tsx +176 -43
  1618. package/src/components/Tabs/index.ts +5 -0
  1619. package/src/components/Tabs/tabs-inline-action-geometry.ts +94 -0
  1620. package/src/components/Tabs/tabs.anatomy.stories.tsx +424 -0
  1621. package/src/components/Tabs/tabs.principles.stories.tsx +291 -0
  1622. package/src/components/Tabs/tabs.spec.md +58 -69
  1623. package/src/components/Tabs/tabs.stories.tsx +257 -0
  1624. package/src/components/Tabs/tabs.tsx +262 -82
  1625. package/src/components/Tag/index.ts +5 -0
  1626. package/src/components/Tag/tag.anatomy.stories.tsx +667 -0
  1627. package/src/components/Tag/tag.principles.stories.tsx +270 -0
  1628. package/src/components/Tag/tag.spec.md +112 -100
  1629. package/src/components/Tag/tag.stories.tsx +88 -0
  1630. package/src/components/Tag/tag.tsx +120 -80
  1631. package/src/components/Textarea/index.ts +5 -0
  1632. package/src/components/Textarea/textarea.anatomy.stories.tsx +310 -0
  1633. package/src/components/Textarea/textarea.principles.stories.tsx +192 -0
  1634. package/src/components/Textarea/textarea.spec.md +35 -16
  1635. package/src/components/Textarea/textarea.stories.tsx +57 -0
  1636. package/src/components/Textarea/textarea.tsx +154 -83
  1637. package/src/components/TimePicker/index.ts +5 -0
  1638. package/src/components/TimePicker/time-columns.tsx +15 -3
  1639. package/src/components/TimePicker/time-picker.anatomy.stories.tsx +283 -0
  1640. package/src/components/TimePicker/time-picker.principles.stories.tsx +133 -0
  1641. package/src/components/TimePicker/time-picker.spec.md +58 -52
  1642. package/src/components/TimePicker/time-picker.stories.tsx +193 -0
  1643. package/src/components/TimePicker/time-picker.tsx +119 -60
  1644. package/src/components/Toast/index.ts +5 -0
  1645. package/src/components/Toast/toast.anatomy.stories.tsx +328 -0
  1646. package/src/components/Toast/toast.principles.stories.tsx +216 -0
  1647. package/src/components/Toast/toast.spec.md +26 -16
  1648. package/src/components/Toast/toast.stories.tsx +241 -0
  1649. package/src/components/Toast/toast.tsx +101 -23
  1650. package/src/components/Tooltip/index.ts +5 -0
  1651. package/src/components/Tooltip/tooltip.anatomy.stories.tsx +422 -0
  1652. package/src/components/Tooltip/tooltip.principles.stories.tsx +204 -0
  1653. package/src/components/Tooltip/tooltip.spec.md +37 -23
  1654. package/src/components/Tooltip/tooltip.stories.tsx +82 -0
  1655. package/src/components/Tooltip/tooltip.tsx +58 -12
  1656. package/src/components/TreeView/index.ts +5 -0
  1657. package/src/components/TreeView/tree-view.anatomy.stories.tsx +436 -0
  1658. package/src/components/TreeView/tree-view.principles.stories.tsx +223 -0
  1659. package/src/components/TreeView/tree-view.spec.md +103 -54
  1660. package/src/components/TreeView/tree-view.stories.tsx +365 -0
  1661. package/src/components/TreeView/tree-view.tsx +501 -58
  1662. package/src/hooks/use-controllable.ts +7 -2
  1663. package/src/hooks/use-is-touch-device.ts +8 -1
  1664. package/src/hooks/use-overflow-items.ts +10 -6
  1665. package/src/hooks/use-truncated.ts +111 -0
  1666. package/src/index.ts +651 -71
  1667. package/src/lib/drag-visual.ts +2 -2
  1668. package/src/lib/utils.ts +21 -1
  1669. package/src/patterns/README.md +20 -16
  1670. package/src/patterns/action-bar/action-bar.spec.md +63 -45
  1671. package/src/patterns/action-bar/action-bar.stories.tsx +619 -0
  1672. package/src/patterns/element-anatomy/element-anatomy.spec.md +17 -13
  1673. package/src/patterns/element-anatomy/index.ts +6 -0
  1674. package/src/patterns/element-anatomy/inline-action.spec.md +33 -22
  1675. package/src/patterns/element-anatomy/item-anatomy.spec.md +108 -79
  1676. package/src/patterns/element-anatomy/item-anatomy.stories.tsx +1648 -0
  1677. package/src/patterns/element-anatomy/item-anatomy.tsx +147 -56
  1678. package/src/patterns/element-anatomy/truncated-text.spec.md +68 -0
  1679. package/src/patterns/element-anatomy/truncated-text.tsx +61 -0
  1680. package/src/patterns/header-canonical/chrome-header.tsx +26 -6
  1681. package/src/patterns/header-canonical/header-canonical.css +3 -4
  1682. package/src/patterns/header-canonical/header-canonical.spec.md +96 -42
  1683. package/src/patterns/header-canonical/header-canonical.stories.tsx +257 -0
  1684. package/src/patterns/header-canonical/index.ts +5 -0
  1685. package/src/patterns/horizontal-overflow/horizontal-overflow.spec.md +36 -15
  1686. package/src/patterns/horizontal-overflow/horizontal-overflow.stories.tsx +139 -0
  1687. package/src/patterns/horizontal-overflow/horizontal-overflow.tsx +1 -1
  1688. package/src/patterns/horizontal-overflow/index.ts +5 -0
  1689. package/src/patterns/overlay-surface/index.ts +5 -0
  1690. package/src/patterns/overlay-surface/overlay-surface.spec.md +94 -58
  1691. package/src/patterns/overlay-surface/overlay-surface.stories.tsx +132 -0
  1692. package/src/patterns/overlay-surface/overlay-surface.tsx +37 -18
  1693. package/src/patterns/resize-handle/index.ts +5 -0
  1694. package/src/patterns/resize-handle/resize-handle.spec.md +22 -13
  1695. package/src/patterns/resize-handle/resize-handle.stories.tsx +73 -0
  1696. package/src/patterns/resize-handle/resize-handle.tsx +13 -18
  1697. package/src/story-governance/category-matrix.json +132 -0
  1698. package/src/story-governance/category-matrix.ts +55 -0
  1699. package/src/styles/base.css +99 -0
  1700. package/src/styles/tokens.css +14 -0
  1701. package/src/tokens/README.md +10 -5
  1702. package/src/tokens/categorical-color.ts +164 -0
  1703. package/src/tokens/color/color.spec.md +95 -72
  1704. package/src/tokens/color/color.stories.tsx +403 -0
  1705. package/src/tokens/color/primitives.css +23 -7
  1706. package/src/tokens/color/semantic.css +75 -21
  1707. package/src/tokens/density/density.spec.md +33 -30
  1708. package/src/tokens/density/density.stories.tsx +254 -0
  1709. package/src/tokens/elevation/elevation.spec.md +11 -14
  1710. package/src/tokens/elevation/elevation.stories.tsx +99 -0
  1711. package/src/tokens/layoutSpace/layoutSpace.css +1 -1
  1712. package/src/tokens/layoutSpace/layoutSpace.spec.md +44 -31
  1713. package/src/tokens/layoutSpace/layoutSpace.stories.tsx +76 -0
  1714. package/src/tokens/motion/motion.css +49 -20
  1715. package/src/tokens/motion/motion.spec.md +45 -21
  1716. package/src/tokens/motion/motion.stories.tsx +196 -0
  1717. package/src/tokens/motion/motion.ts +8 -7
  1718. package/src/tokens/motion/overlay-motion.ts +26 -0
  1719. package/src/tokens/opacity/opacity.spec.md +15 -20
  1720. package/src/tokens/opacity/opacity.stories.tsx +66 -0
  1721. package/src/tokens/orphan-tokens.spec.md +22 -11
  1722. package/src/tokens/radius/radius.spec.md +14 -11
  1723. package/src/tokens/radius/radius.stories.tsx +87 -0
  1724. package/src/tokens/token-system.spec.md +241 -0
  1725. package/src/tokens/typography/typography.css +1 -1
  1726. package/src/tokens/typography/typography.spec.md +12 -8
  1727. package/src/tokens/typography/typography.stories.tsx +134 -0
  1728. package/src/tokens/uiSize/icon-size.ts +3 -4
  1729. package/src/tokens/uiSize/uiSize.css +60 -1
  1730. package/src/tokens/uiSize/uiSize.spec.md +61 -32
  1731. package/src/tokens/uiSize/uiSize.stories.tsx +106 -0
  1732. package/src/tokens/utility-registry.json +426 -0
  1733. package/src/tokens/utility-registry.schema.json +409 -0
  1734. package/tools/README.md +9 -0
  1735. package/tools/codemods/cli.mjs +93 -0
  1736. package/tools/codemods/index.mjs +582 -0
  1737. package/tools/shared/safe-filesystem.mjs +371 -0
  1738. package/tools/visual-baseline/cli.mjs +97 -0
  1739. package/tools/visual-baseline/index.mjs +522 -0
  1740. package/dist/components/NameCard/name-card.d.ts.map +0 -1
  1741. package/dist/components/NameCard/name-card.js.map +0 -1
  1742. package/ds-canonical/commands/gov-status.md +0 -79
  1743. package/ds-canonical/hooks/check_app_shell_primary_header_consistency.sh +0 -68
  1744. package/ds-canonical/hooks/check_chrome_header_handcraft.sh +0 -70
  1745. package/ds-canonical/hooks/check_header_with_tabs_border.sh +0 -87
  1746. package/ds-canonical/hooks/check_tab_lg_chrome_header_equal.sh +0 -66
  1747. package/ds-canonical/hooks/tests/KNOWN-BROKEN.md +0 -15
  1748. package/ds-canonical/hooks/tests/test_check_story_category.sh.broken +0 -187
  1749. package/ds-canonical/references/audit-coverage-vs-24-checklist.md +0 -74
  1750. package/ds-canonical/skills/design-system-audit/references/spec-template.md +0 -66
  1751. package/src/components/NameCard/name-card.spec.md +0 -171
@@ -0,0 +1,1412 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { createHash, randomBytes } from 'node:crypto'
4
+ import { spawnSync } from 'node:child_process'
5
+ import {
6
+ chmodSync,
7
+ closeSync,
8
+ constants as fsConstants,
9
+ fstatSync,
10
+ fsyncSync,
11
+ lstatSync,
12
+ mkdirSync,
13
+ mkdtempSync,
14
+ openSync,
15
+ readFileSync,
16
+ readdirSync,
17
+ realpathSync,
18
+ renameSync,
19
+ rmSync,
20
+ unlinkSync,
21
+ writeFileSync,
22
+ } from 'node:fs'
23
+ import { dirname, isAbsolute, join, relative, resolve, sep } from 'node:path'
24
+ import { fileURLToPath } from 'node:url'
25
+ import { gunzipSync } from 'node:zlib'
26
+ import {
27
+ createIsolatedGovernanceNpmEnvironment,
28
+ GOVERNANCE_DEPENDENCY_EXACT_NPM_VERSION,
29
+ GOVERNANCE_DEPENDENCY_REGISTRY,
30
+ runClosedBootstrapStep,
31
+ } from './lib/governance-dependency-bootstrap.mjs'
32
+ import {
33
+ assertVerifiedExactNpmRuntimeCapability,
34
+ prepareVerifiedExactNpmRuntime,
35
+ resolveExactNpmRuntimeContract,
36
+ } from './lib/verified-exact-npm-runtime.mjs'
37
+ import {
38
+ assertGitVisibleWorktreeUnchanged,
39
+ captureGitVisibleWorktree,
40
+ } from './lib/worktree-fingerprint.mjs'
41
+
42
+ const ROOT = resolve(dirname(fileURLToPath(import.meta.url)), '..')
43
+ const ERROR_PREFIX = 'GOV-PROVIDER-CLI-TOOLCHAIN-001'
44
+ const AUTHORITY_MANIFEST_PATH = 'infra/governance/providers/provider-cli-toolchain.json'
45
+ const CONSUMER_MANIFEST_PATH = 'governance/provider-cli-toolchain.json'
46
+ const INSTALL_TIMEOUT_MS = 20 * 60 * 1_000
47
+ const AUDIT_TIMEOUT_MS = 10 * 60 * 1_000
48
+ const VERSION_TIMEOUT_MS = 30 * 1_000
49
+ const PACKAGE_CONTENT_PROTOCOL = 'npm-ustar-package-tree-v1'
50
+ const PACKAGE_CONTENT_MODE_POLICY = 'excluded-portable-content-only'
51
+ const PACKAGE_CONTENT_DIGEST_DOMAIN = 'qijenchen-provider-cli-package-content-v1'
52
+ const ACTIVE_PACKAGE_CONTENT_BINDING_DOMAIN = 'qijenchen-provider-cli-active-package-content-v1'
53
+ const RUNTIME_CONTENT_TARGET_PROTOCOL = 'content-v2'
54
+ const MAX_PROVIDER_PACKAGE_COMPRESSED_BYTES = 512 * 1024 * 1024
55
+ const MAX_PROVIDER_PACKAGE_EXPANDED_BYTES = 1024 * 1024 * 1024
56
+ const MAX_PROVIDER_PACKAGE_FILE_BYTES = 512 * 1024 * 1024
57
+ const MAX_PROVIDER_PACKAGE_FILE_COUNT = 100_000
58
+ const MAX_PROVIDER_PACKAGE_ENTRY_COUNT = 100_000
59
+ const MAX_PROVIDER_PACKAGE_PATH_BYTES = 4096
60
+ const MAX_PROVIDER_PACKAGE_PATH_DEPTH = 64
61
+ const MAX_PROVIDER_PACKAGE_SEGMENT_BYTES = 255
62
+ const SHA256 = /^[a-f0-9]{64}$/
63
+ const SHA512_INTEGRITY = /^sha512-([A-Za-z0-9+/]+={0,2})$/
64
+ const EXACT_VERSION = /^\d+\.\d+\.\d+(?:-[0-9A-Za-z][0-9A-Za-z.-]*)?$/
65
+ const EXACT_ALIAS = /^npm:(@[a-z0-9-]+\/[a-z0-9-]+)@(\d+\.\d+\.\d+(?:-[0-9A-Za-z][0-9A-Za-z.-]*)?)$/
66
+ const SUPPORTED_PROVIDER_CLI_PLATFORMS = Object.freeze(['darwin-arm64', 'darwin-x64', 'linux-arm64', 'linux-x64'])
67
+
68
+ export const PROVIDER_CLI_PACKAGE_CONTENT_CONTRACT = Object.freeze({
69
+ digestDomain: PACKAGE_CONTENT_DIGEST_DOMAIN,
70
+ maxCompressedBytes: MAX_PROVIDER_PACKAGE_COMPRESSED_BYTES,
71
+ maxExpandedBytes: MAX_PROVIDER_PACKAGE_EXPANDED_BYTES,
72
+ maxEntryCount: MAX_PROVIDER_PACKAGE_ENTRY_COUNT,
73
+ maxFileBytes: MAX_PROVIDER_PACKAGE_FILE_BYTES,
74
+ maxFileCount: MAX_PROVIDER_PACKAGE_FILE_COUNT,
75
+ maxPathBytes: MAX_PROVIDER_PACKAGE_PATH_BYTES,
76
+ maxPathDepth: MAX_PROVIDER_PACKAGE_PATH_DEPTH,
77
+ maxSegmentBytes: MAX_PROVIDER_PACKAGE_SEGMENT_BYTES,
78
+ modePolicy: PACKAGE_CONTENT_MODE_POLICY,
79
+ protocol: PACKAGE_CONTENT_PROTOCOL,
80
+ supportedPlatforms: SUPPORTED_PROVIDER_CLI_PLATFORMS,
81
+ })
82
+
83
+ export class ProviderCliControlPlaneUpdateRequiredError extends Error {
84
+ constructor(message) {
85
+ super(`${ERROR_PREFIX}:${message}`)
86
+ this.name = 'ProviderCliControlPlaneUpdateRequiredError'
87
+ this.code = 'GOV-PROVIDER-CLI-CONTROL-PLANE-UPDATE-REQUIRED'
88
+ }
89
+ }
90
+
91
+ function invariant(condition, message) {
92
+ if (!condition) throw new Error(`${ERROR_PREFIX}:${message}`)
93
+ }
94
+
95
+ function controlPlaneInvariant(condition, message) {
96
+ if (!condition) throw new ProviderCliControlPlaneUpdateRequiredError(message)
97
+ }
98
+
99
+ function sha256(bytes) {
100
+ return createHash('sha256').update(bytes).digest('hex')
101
+ }
102
+
103
+ function sha512Integrity(bytes) {
104
+ return `sha512-${createHash('sha512').update(bytes).digest('base64')}`
105
+ }
106
+
107
+ function exactKeys(value, expected, label) {
108
+ invariant(value && typeof value === 'object' && !Array.isArray(value), `${label} must be an object`)
109
+ invariant(
110
+ JSON.stringify(Object.keys(value).sort()) === JSON.stringify([...expected].sort()),
111
+ `${label} has an invalid or open shape`,
112
+ )
113
+ }
114
+
115
+ function portableRepoPath(value, label) {
116
+ invariant(
117
+ typeof value === 'string'
118
+ && value.length > 0
119
+ && !isAbsolute(value)
120
+ && !value.includes('\\')
121
+ && !/[\0\n\r]/.test(value)
122
+ && value.split('/').every(part => part && part !== '.' && part !== '..'),
123
+ `${label} must be a portable repository-relative path`,
124
+ )
125
+ return value
126
+ }
127
+
128
+ function resolveContained(root, repoPath, label) {
129
+ portableRepoPath(repoPath, label)
130
+ const absolute = resolve(root, repoPath)
131
+ const rel = relative(root, absolute)
132
+ invariant(rel !== '..' && !rel.startsWith(`..${sep}`) && !isAbsolute(rel), `${label} escapes the repository`)
133
+ return absolute
134
+ }
135
+
136
+ export function validateProviderCliFilesystemAuthority(metadata, {
137
+ currentUid = typeof process.getuid === 'function' ? process.getuid() : null,
138
+ label = 'provider CLI filesystem entry',
139
+ } = {}) {
140
+ invariant(Number.isInteger(currentUid) && currentUid >= 0, `${label} requires one POSIX process uid`)
141
+ const bigint = typeof metadata?.uid === 'bigint' || typeof metadata?.mode === 'bigint'
142
+ const uid = bigint ? BigInt(metadata?.uid) : metadata?.uid
143
+ const mode = bigint ? BigInt(metadata?.mode) : metadata?.mode
144
+ const processUid = bigint ? BigInt(currentUid) : currentUid
145
+ const rootUid = bigint ? 0n : 0
146
+ const zero = bigint ? 0n : 0
147
+ const writeMask = bigint ? 0o022n : 0o022
148
+ const fileTypeMask = bigint ? 0o170000n : 0o170000
149
+ const directoryType = bigint ? 0o040000n : 0o040000
150
+ const stickyBit = bigint ? 0o1000n : 0o1000
151
+ invariant(uid === processUid || uid === rootUid, `${label} must be owned by the current uid or root`)
152
+ const writableByGroupOrOther = (mode & writeMask) !== zero
153
+ const rootOwnedStickyDirectory = uid === rootUid
154
+ && (mode & fileTypeMask) === directoryType
155
+ && (mode & stickyBit) === stickyBit
156
+ invariant(
157
+ !writableByGroupOrOther || rootOwnedStickyDirectory,
158
+ `${label} must not be writable by group or other users`,
159
+ )
160
+ // macOS CloudStorage providers commonly attach deny-only ACL entries (for example,
161
+ // "everyone deny delete"). ACL presence is not itself replacement authority, so this
162
+ // local POSIX gate intentionally evaluates owner/mode instead of rejecting an ACL marker.
163
+ return true
164
+ }
165
+
166
+ function assertTrustedPathAuthority(path, label, { includeEntry = true } = {}) {
167
+ let current = includeEntry ? resolve(path) : dirname(resolve(path))
168
+ for (;;) {
169
+ const info = lstatSync(current, { bigint: true })
170
+ invariant(!info.isSymbolicLink(), `${label} authority chain must not contain a symbolic link:${current}`)
171
+ invariant(realpathSync(current) === current, `${label} authority chain must not traverse a symbolic-link alias:${current}`)
172
+ validateProviderCliFilesystemAuthority(info, { label: `${label} authority ${current}` })
173
+ const parent = dirname(current)
174
+ if (parent === current) break
175
+ current = parent
176
+ }
177
+ return path
178
+ }
179
+
180
+ function readRegularBytes(path, label, { optional = false } = {}) {
181
+ let info
182
+ try {
183
+ info = lstatSync(path)
184
+ } catch (error) {
185
+ if (optional && error?.code === 'ENOENT') return null
186
+ throw error
187
+ }
188
+ invariant(info.isFile() && !info.isSymbolicLink() && info.nlink === 1, `${label} must be one regular no-link file`)
189
+ invariant(realpathSync(path) === path, `${label} must not traverse a symbolic-link alias`)
190
+ assertTrustedPathAuthority(path, label)
191
+ return readFileSync(path)
192
+ }
193
+
194
+ function parseJson(bytes, label) {
195
+ try {
196
+ return JSON.parse(bytes.toString('utf8'))
197
+ } catch (error) {
198
+ throw new Error(`${ERROR_PREFIX}:${label} is invalid JSON:${error.message}`, { cause: error })
199
+ }
200
+ }
201
+
202
+ function packageNameFromLockPath(lockPath) {
203
+ const prefix = 'node_modules/'
204
+ invariant(lockPath.startsWith(prefix), `package-lock entry is not below node_modules:${lockPath}`)
205
+ const parts = lockPath.slice(prefix.length).split('/')
206
+ if (parts[0].startsWith('@')) {
207
+ invariant(parts.length === 2 && /^@[a-z0-9-]+$/.test(parts[0]) && /^[a-z0-9-]+$/.test(parts[1]), `package-lock path is not one flat scoped package:${lockPath}`)
208
+ return `${parts[0]}/${parts[1]}`
209
+ }
210
+ invariant(parts.length === 1 && /^[a-z0-9-]+$/.test(parts[0]), `package-lock path is not one flat package:${lockPath}`)
211
+ return parts[0]
212
+ }
213
+
214
+ function canonicalRegistryTarball(packageName, version) {
215
+ const unscoped = packageName.split('/').at(-1)
216
+ return `${GOVERNANCE_DEPENDENCY_REGISTRY}${packageName}/-/${unscoped}-${version}.tgz`
217
+ }
218
+
219
+ function validateIntegrity(value, label) {
220
+ const match = String(value || '').match(SHA512_INTEGRITY)
221
+ invariant(match, `${label} lacks canonical SHA-512 integrity`)
222
+ const bytes = Buffer.from(match[1], 'base64')
223
+ invariant(bytes.length === 64 && bytes.toString('base64') === match[1], `${label} SHA-512 integrity is not canonical base64`)
224
+ }
225
+
226
+ function validateDependencySpec(spec, label) {
227
+ invariant(typeof spec === 'string' && spec.length > 0, `${label} dependency spec is invalid`)
228
+ invariant(!/^(?:file:|link:|git(?:\+[^:]+)?:|github:|https?:)/i.test(spec), `${label} may not use file, link, git, GitHub, or URL dependencies`)
229
+ invariant(EXACT_VERSION.test(spec) || EXACT_ALIAS.test(spec), `${label} must be one exact version or exact npm alias`)
230
+ }
231
+
232
+ function dependencySpecMatchesLockEntry(dependencyName, spec, entry) {
233
+ const alias = spec.match(EXACT_ALIAS)
234
+ const expectedName = alias ? alias[1] : dependencyName
235
+ const expectedVersion = alias ? alias[2] : spec
236
+ return (entry.name ?? dependencyName) === expectedName && entry.version === expectedVersion
237
+ }
238
+
239
+ function platformPackageName(tool, platform) {
240
+ invariant(tool.platformPackage && typeof tool.platformPackage === 'object', `provider CLI tool ${tool.providerId} has no platform package contract`)
241
+ const template = tool.platformPackage.nameTemplate
242
+ invariant(typeof template === 'string' && (template.match(/\{platform\}/g) ?? []).length === 1, `provider CLI tool ${tool.providerId} platform package template is invalid`)
243
+ const packageName = template.replace('{platform}', platform)
244
+ invariant(/^@[a-z0-9-]+\/[a-z0-9-]+$/.test(packageName), `provider CLI tool ${tool.providerId} platform package name is invalid:${packageName}`)
245
+ return packageName
246
+ }
247
+
248
+ function validateToolchainManifest(manifest, { requirePackageContent = true } = {}) {
249
+ invariant(manifest && typeof manifest === 'object' && !Array.isArray(manifest), 'provider CLI toolchain manifest must be an object')
250
+ controlPlaneInvariant(manifest.$schema === '../schemas/provider-cli-toolchain.schema.json', 'provider CLI toolchain schema binding requires a reviewed control-plane update')
251
+ controlPlaneInvariant(manifest.schemaVersion === 2 && manifest.kind === 'provider-cli-toolchain', 'provider CLI toolchain schema version or kind requires a reviewed control-plane update')
252
+ const hasPackageContent = Object.hasOwn(manifest ?? {}, 'packageContent')
253
+ invariant(hasPackageContent || !requirePackageContent, 'provider CLI package-content authority is required')
254
+ exactKeys(
255
+ manifest,
256
+ ['$schema', 'schemaVersion', 'kind', 'registry', 'packageLock', ...(hasPackageContent ? ['packageContent'] : []), 'installPolicy', 'providerBindings', 'tools'],
257
+ 'provider CLI toolchain manifest',
258
+ )
259
+ invariant(manifest.registry === GOVERNANCE_DEPENDENCY_REGISTRY, 'provider CLI registry is not canonical')
260
+
261
+ exactKeys(manifest.packageLock, ['path', 'consumerPath', 'sha256', 'lockfileVersion', 'rootName', 'rootVersion', 'packageCount'], 'provider CLI package-lock binding')
262
+ invariant(manifest.packageLock.path === 'infra/governance/providers/provider-cli-toolchain.package-lock.json', 'authority provider CLI lock path is invalid')
263
+ invariant(manifest.packageLock.consumerPath === 'governance/provider-cli-toolchain.package-lock.json', 'consumer provider CLI lock path is invalid')
264
+ invariant(SHA256.test(manifest.packageLock.sha256), 'provider CLI package-lock digest is invalid')
265
+ invariant(manifest.packageLock.lockfileVersion === 3, 'provider CLI package-lock version must be 3')
266
+ invariant(manifest.packageLock.rootName === '@qijenchen/provider-cli-toolchain' && manifest.packageLock.rootVersion === '0.0.0', 'provider CLI package-lock root identity is invalid')
267
+ invariant(Number.isInteger(manifest.packageLock.packageCount) && manifest.packageLock.packageCount >= 0, 'provider CLI package count is invalid')
268
+
269
+ exactKeys(manifest.installPolicy, ['ignoreScripts', 'signatureAudit', 'auditLevel', 'runtimeDirectory', 'shimDirectory', 'supportedPlatforms'], 'provider CLI install policy')
270
+ invariant(manifest.installPolicy.ignoreScripts === true && manifest.installPolicy.signatureAudit === true && manifest.installPolicy.auditLevel === 'high', 'provider CLI install policy diluted its hard gates')
271
+ invariant(manifest.installPolicy.runtimeDirectory === 'node_modules/.provider-cli-toolchain', 'provider CLI runtime directory is invalid')
272
+ invariant(manifest.installPolicy.shimDirectory === 'node_modules/.bin', 'provider CLI shim directory is invalid')
273
+ invariant(
274
+ JSON.stringify(manifest.installPolicy.supportedPlatforms) === JSON.stringify(SUPPORTED_PROVIDER_CLI_PLATFORMS),
275
+ 'provider CLI supported platform matrix is invalid',
276
+ )
277
+
278
+ if (hasPackageContent) {
279
+ invariant(manifest.packageContent && typeof manifest.packageContent === 'object' && !Array.isArray(manifest.packageContent), 'provider CLI package-content authority must be an object')
280
+ controlPlaneInvariant(manifest.packageContent.protocol === PACKAGE_CONTENT_PROTOCOL, 'provider CLI package-content protocol requires a reviewed control-plane update')
281
+ controlPlaneInvariant(manifest.packageContent.modePolicy === PACKAGE_CONTENT_MODE_POLICY, 'provider CLI package-content mode policy requires a reviewed control-plane update')
282
+ exactKeys(manifest.packageContent, ['protocol', 'modePolicy', 'packages'], 'provider CLI package-content authority')
283
+ invariant(Array.isArray(manifest.packageContent.packages) && manifest.packageContent.packages.length > 0, 'provider CLI package-content authority is empty')
284
+ const contentLockPaths = new Set()
285
+ for (const [index, record] of manifest.packageContent.packages.entries()) {
286
+ exactKeys(record, ['lockPath', 'platforms', 'treeSha256', 'fileCount', 'totalBytes'], `provider CLI package-content record ${index}`)
287
+ portableRepoPath(record.lockPath, `provider CLI package-content record ${index} lockPath`)
288
+ invariant(record.lockPath.startsWith('node_modules/'), `provider CLI package-content record ${index} must target node_modules`)
289
+ packageNameFromLockPath(record.lockPath)
290
+ invariant(!contentLockPaths.has(record.lockPath), `provider CLI package-content lockPath is duplicated:${record.lockPath}`)
291
+ invariant(
292
+ Array.isArray(record.platforms)
293
+ && record.platforms.length > 0
294
+ && record.platforms.every(platform => manifest.installPolicy.supportedPlatforms.includes(platform))
295
+ && JSON.stringify([...new Set(record.platforms)].sort()) === JSON.stringify(record.platforms),
296
+ `provider CLI package-content platforms are invalid:${record.lockPath}`,
297
+ )
298
+ invariant(SHA256.test(record.treeSha256), `provider CLI package-content digest is invalid:${record.lockPath}`)
299
+ invariant(Number.isSafeInteger(record.fileCount) && record.fileCount >= 1 && record.fileCount <= MAX_PROVIDER_PACKAGE_FILE_COUNT, `provider CLI package-content file count is invalid:${record.lockPath}`)
300
+ invariant(Number.isSafeInteger(record.totalBytes) && record.totalBytes >= 1 && record.totalBytes <= MAX_PROVIDER_PACKAGE_EXPANDED_BYTES, `provider CLI package-content total bytes are invalid:${record.lockPath}`)
301
+ contentLockPaths.add(record.lockPath)
302
+ }
303
+ invariant(
304
+ JSON.stringify([...contentLockPaths]) === JSON.stringify([...contentLockPaths].sort()),
305
+ 'provider CLI package-content records must be sorted by lockPath',
306
+ )
307
+ }
308
+
309
+ invariant(Array.isArray(manifest.providerBindings) && manifest.providerBindings.length > 0, 'provider CLI provider bindings are missing')
310
+ const bindingIds = new Set()
311
+ const provisionedToolIds = new Set()
312
+ for (const [index, binding] of manifest.providerBindings.entries()) {
313
+ exactKeys(binding, ['providerId', 'provisioning', 'toolProviderId'], `provider CLI provider binding ${index}`)
314
+ invariant(typeof binding.providerId === 'string' && /^[a-z][a-z0-9-]+$/.test(binding.providerId) && !bindingIds.has(binding.providerId), `provider CLI provider binding id is invalid or duplicated:${String(binding.providerId)}`)
315
+ invariant(['repo-provisioned-cli', 'external-runtime'].includes(binding.provisioning), `provider CLI provider binding ${binding.providerId} provisioning is invalid`)
316
+ if (binding.provisioning === 'repo-provisioned-cli') {
317
+ invariant(typeof binding.toolProviderId === 'string' && /^[a-z][a-z0-9-]+$/.test(binding.toolProviderId), `provider CLI provider binding ${binding.providerId} lacks a tool id`)
318
+ invariant(!provisionedToolIds.has(binding.toolProviderId), `provider CLI tool binding is duplicated:${binding.toolProviderId}`)
319
+ provisionedToolIds.add(binding.toolProviderId)
320
+ } else invariant(binding.toolProviderId === null, `external provider ${binding.providerId} may not claim a repo-provisioned CLI`)
321
+ bindingIds.add(binding.providerId)
322
+ }
323
+
324
+ invariant(Array.isArray(manifest.tools), 'provider CLI tools must be an array')
325
+ const toolIds = new Set()
326
+ const packageNames = new Set()
327
+ const executables = new Set()
328
+ for (let index = 0; index < manifest.tools.length; index += 1) {
329
+ const tool = manifest.tools[index]
330
+ exactKeys(tool, ['providerId', 'packageName', 'version', 'executable', 'binKind', 'packageBin', 'platformPackage', 'versionProbe'], `provider CLI tool ${index}`)
331
+ invariant(typeof tool.providerId === 'string' && /^[a-z][a-z0-9-]+$/.test(tool.providerId) && !toolIds.has(tool.providerId), `provider CLI tool providerId is invalid or duplicated:${String(tool.providerId)}`)
332
+ invariant(typeof tool.packageName === 'string' && /^@[a-z0-9-]+\/[a-z0-9-]+$/.test(tool.packageName) && !packageNames.has(tool.packageName), `provider CLI tool ${tool.providerId} packageName is invalid or duplicated`)
333
+ invariant(typeof tool.executable === 'string' && /^[a-z][a-z0-9-]+$/.test(tool.executable) && !executables.has(tool.executable), `provider CLI tool ${tool.providerId} executable is invalid or duplicated`)
334
+ invariant(['platform-native', 'node-entrypoint'].includes(tool.binKind), `provider CLI tool ${tool.providerId} bin kind is invalid`)
335
+ portableRepoPath(tool.packageBin, `provider CLI tool ${tool.providerId} package bin`)
336
+ invariant(EXACT_VERSION.test(tool.version), `provider CLI tool ${tool.providerId} version must be exact stable semver`)
337
+ invariant(tool.versionProbe === 'exact-semver-token', `provider CLI tool ${tool.providerId} version probe is invalid`)
338
+ invariant(tool.platformPackage === null || (tool.platformPackage && typeof tool.platformPackage === 'object' && !Array.isArray(tool.platformPackage)), `provider CLI tool ${tool.providerId} platform package contract is invalid`)
339
+ if (tool.platformPackage !== null) {
340
+ exactKeys(tool.platformPackage, ['nameTemplate', 'executablePath'], `provider CLI tool ${tool.providerId} platform package`)
341
+ for (const supported of manifest.installPolicy.supportedPlatforms) platformPackageName(tool, supported)
342
+ if (tool.platformPackage.executablePath !== null) portableRepoPath(tool.platformPackage.executablePath, `provider CLI tool ${tool.providerId} platform executable`)
343
+ }
344
+ invariant(tool.binKind !== 'platform-native' || typeof tool.platformPackage?.executablePath === 'string', `provider CLI tool ${tool.providerId} platform-native launcher lacks an executable path`)
345
+ toolIds.add(tool.providerId)
346
+ packageNames.add(tool.packageName)
347
+ executables.add(tool.executable)
348
+ }
349
+ invariant(JSON.stringify([...toolIds].sort()) === JSON.stringify([...provisionedToolIds].sort()), 'provider CLI tools differ from the closed repo-provisioned provider bindings')
350
+ return manifest
351
+ }
352
+
353
+ export function deriveActivePackageContentPlan(manifest, lock) {
354
+ const requested = new Map()
355
+ for (const tool of manifest.tools) {
356
+ requested.set(`node_modules/${tool.packageName}`, [...manifest.installPolicy.supportedPlatforms])
357
+ if (tool.platformPackage !== null) {
358
+ for (const platform of manifest.installPolicy.supportedPlatforms) {
359
+ requested.set(`node_modules/${platformPackageName(tool, platform)}`, [platform])
360
+ }
361
+ }
362
+ }
363
+ return Object.freeze([...requested.entries()]
364
+ .sort(([left], [right]) => left < right ? -1 : left > right ? 1 : 0)
365
+ .map(([lockPath, platforms]) => {
366
+ const entry = lock.packages[lockPath]
367
+ invariant(entry, `provider CLI active package plan is absent from the lock:${lockPath}`)
368
+ return Object.freeze({
369
+ integrity: entry.integrity,
370
+ lockPath,
371
+ platforms: Object.freeze([...platforms]),
372
+ resolved: entry.resolved,
373
+ })
374
+ }))
375
+ }
376
+
377
+ function validateToolchainLock(lock, manifest, { requirePackageContent = true } = {}) {
378
+ exactKeys(lock, ['name', 'version', 'lockfileVersion', 'requires', 'packages'], 'provider CLI package-lock')
379
+ invariant(lock.name === manifest.packageLock.rootName && lock.version === manifest.packageLock.rootVersion, 'provider CLI package-lock top-level identity drifted')
380
+ invariant(lock.lockfileVersion === manifest.packageLock.lockfileVersion && lock.requires === true, 'provider CLI package-lock format is invalid')
381
+ invariant(lock.packages && typeof lock.packages === 'object' && !Array.isArray(lock.packages), 'provider CLI package-lock package inventory is missing')
382
+ const rows = Object.entries(lock.packages)
383
+ invariant(rows.length - 1 === manifest.packageLock.packageCount, 'provider CLI package count differs from the manifest')
384
+ const root = lock.packages['']
385
+ exactKeys(root, ['name', 'version', 'dependencies'], 'provider CLI package-lock root')
386
+ invariant(root.name === manifest.packageLock.rootName && root.version === manifest.packageLock.rootVersion, 'provider CLI package-lock root record drifted')
387
+ const expectedDependencies = Object.fromEntries(manifest.tools.map(tool => [tool.packageName, tool.version]))
388
+ invariant(JSON.stringify(root.dependencies) === JSON.stringify(expectedDependencies), 'provider CLI package-lock root dependencies differ from the manifest')
389
+
390
+ for (const [lockPath, entry] of rows) {
391
+ if (lockPath === '') continue
392
+ invariant(entry && typeof entry === 'object' && !Array.isArray(entry), `provider CLI package-lock entry is invalid:${lockPath}`)
393
+ invariant(!Object.hasOwn(entry, 'link'), `provider CLI package-lock may not contain link entries:${lockPath}`)
394
+ const pathName = packageNameFromLockPath(lockPath)
395
+ const packageName = entry.name ?? pathName
396
+ invariant(/^@[a-z0-9-]+\/[a-z0-9-]+$/.test(packageName), `provider CLI package name is invalid:${lockPath}`)
397
+ invariant(EXACT_VERSION.test(entry.version), `provider CLI package version is not exact:${lockPath}`)
398
+ invariant(entry.resolved === canonicalRegistryTarball(packageName, entry.version), `provider CLI package artifact is not the canonical registry tarball:${lockPath}`)
399
+ validateIntegrity(entry.integrity, `provider CLI package ${lockPath}`)
400
+ for (const field of ['dependencies', 'optionalDependencies']) {
401
+ if (entry[field] === undefined) continue
402
+ invariant(entry[field] && typeof entry[field] === 'object' && !Array.isArray(entry[field]), `provider CLI ${lockPath} ${field} is invalid`)
403
+ for (const [dependency, spec] of Object.entries(entry[field])) validateDependencySpec(spec, `${lockPath} ${field}.${dependency}`)
404
+ }
405
+ }
406
+
407
+ for (const tool of manifest.tools) {
408
+ const entry = lock.packages[`node_modules/${tool.packageName}`]
409
+ invariant(entry?.version === tool.version, `provider CLI lock lost ${tool.packageName}@${tool.version}`)
410
+ invariant(entry.bin?.[tool.executable] === tool.packageBin, `provider CLI lock bin mapping drifted:${tool.providerId}`)
411
+ if (tool.platformPackage !== null) {
412
+ for (const platform of manifest.installPolicy.supportedPlatforms) {
413
+ const packageName = platformPackageName(tool, platform)
414
+ const platformEntry = lock.packages[`node_modules/${packageName}`]
415
+ invariant(platformEntry && platformEntry.optional === true, `provider CLI lock lost optional platform package ${packageName}`)
416
+ const [os, cpu] = platform.split('-')
417
+ invariant(JSON.stringify(platformEntry.os) === JSON.stringify([os]) && JSON.stringify(platformEntry.cpu) === JSON.stringify([cpu]), `provider CLI platform package axes drifted:${packageName}`)
418
+ invariant(Object.hasOwn(entry.optionalDependencies ?? {}, packageName), `provider CLI main package lost platform dependency ${packageName}`)
419
+ const platformSpec = entry.optionalDependencies[packageName]
420
+ validateDependencySpec(platformSpec, `${tool.packageName} optionalDependencies.${packageName}`)
421
+ invariant(
422
+ dependencySpecMatchesLockEntry(packageName, platformSpec, platformEntry),
423
+ `provider CLI platform dependency does not bind its exact locked package:${packageName}`,
424
+ )
425
+ }
426
+ }
427
+ }
428
+
429
+ const activePlan = deriveActivePackageContentPlan(manifest, lock)
430
+ const activeLockPaths = new Set(activePlan.map(record => record.lockPath))
431
+ for (const record of activePlan) {
432
+ const entry = lock.packages[record.lockPath]
433
+ for (const [dependencyName, spec] of Object.entries(entry.dependencies ?? {})) {
434
+ invariant(/^@[a-z0-9-]+\/[a-z0-9-]+$/.test(dependencyName), `provider CLI required dependency name is invalid:${record.lockPath}:${dependencyName}`)
435
+ const dependencyLockPath = `node_modules/${dependencyName}`
436
+ invariant(
437
+ activeLockPaths.has(dependencyLockPath),
438
+ `provider CLI required dependency escapes the content-authorized active closure:${record.lockPath}:${dependencyName}`,
439
+ )
440
+ const dependencyEntry = lock.packages[dependencyLockPath]
441
+ invariant(
442
+ dependencyEntry && dependencySpecMatchesLockEntry(dependencyName, spec, dependencyEntry),
443
+ `provider CLI required dependency does not bind its exact locked package:${record.lockPath}:${dependencyName}`,
444
+ )
445
+ }
446
+ }
447
+ if (Object.hasOwn(manifest, 'packageContent')) {
448
+ const expectedContent = new Map(activePlan.map(record => [record.lockPath, record.platforms]))
449
+ invariant(
450
+ manifest.packageContent.packages.length === expectedContent.size,
451
+ 'provider CLI package-content authority differs from the active main/platform package closure',
452
+ )
453
+ for (const record of manifest.packageContent.packages) {
454
+ const expectedPlatforms = expectedContent.get(record.lockPath)
455
+ invariant(expectedPlatforms, `provider CLI package-content authority contains an inactive package:${record.lockPath}`)
456
+ invariant(
457
+ JSON.stringify(record.platforms) === JSON.stringify(expectedPlatforms),
458
+ `provider CLI package-content platform binding differs from the tool closure:${record.lockPath}`,
459
+ )
460
+ invariant(lock.packages[record.lockPath], `provider CLI package-content authority is absent from the lock:${record.lockPath}`)
461
+ }
462
+ } else {
463
+ invariant(!requirePackageContent, 'provider CLI package-content authority is required')
464
+ }
465
+ return lock
466
+ }
467
+
468
+ function existingManifestCandidates(root) {
469
+ return [AUTHORITY_MANIFEST_PATH, CONSUMER_MANIFEST_PATH]
470
+ .map(path => ({ path, absolute: resolveContained(root, path, 'provider CLI manifest path') }))
471
+ .map(candidate => ({ ...candidate, bytes: readRegularBytes(candidate.absolute, `provider CLI manifest ${candidate.path}`, { optional: true }) }))
472
+ .filter(candidate => candidate.bytes !== null)
473
+ }
474
+
475
+ function resolveProviderCliToolchainAuthorityInternal(rootPath, { requirePackageContent }) {
476
+ const root = realpathSync(resolve(rootPath))
477
+ const manifests = existingManifestCandidates(root)
478
+ invariant(manifests.length > 0, `provider CLI manifest is missing; expected ${AUTHORITY_MANIFEST_PATH} or ${CONSUMER_MANIFEST_PATH}`)
479
+ if (manifests.length === 2) invariant(manifests[0].bytes.equals(manifests[1].bytes), 'authority and consumer provider CLI manifests differ')
480
+ const selectedManifest = manifests.find(candidate => candidate.path === AUTHORITY_MANIFEST_PATH) ?? manifests[0]
481
+ const manifest = validateToolchainManifest(
482
+ parseJson(selectedManifest.bytes, 'provider CLI toolchain manifest'),
483
+ { requirePackageContent },
484
+ )
485
+
486
+ const lockCandidates = [manifest.packageLock.path, manifest.packageLock.consumerPath]
487
+ .map(path => ({ path, absolute: resolveContained(root, path, 'provider CLI package-lock path') }))
488
+ .map(candidate => ({ ...candidate, bytes: readRegularBytes(candidate.absolute, `provider CLI package-lock ${candidate.path}`, { optional: true }) }))
489
+ .filter(candidate => candidate.bytes !== null)
490
+ invariant(lockCandidates.length > 0, 'provider CLI authority/consumer package-lock pair is missing')
491
+ const requiredLockPath = selectedManifest.path === AUTHORITY_MANIFEST_PATH ? manifest.packageLock.path : manifest.packageLock.consumerPath
492
+ invariant(lockCandidates.some(candidate => candidate.path === requiredLockPath), `provider CLI ${selectedManifest.path === AUTHORITY_MANIFEST_PATH ? 'authority' : 'consumer'} lock is missing:${requiredLockPath}`)
493
+ if (lockCandidates.length === 2) invariant(lockCandidates[0].bytes.equals(lockCandidates[1].bytes), 'authority and consumer provider CLI package-lock bytes differ')
494
+ const lockBytes = lockCandidates.find(candidate => candidate.path === requiredLockPath).bytes
495
+ invariant(sha256(lockBytes) === manifest.packageLock.sha256, 'provider CLI package-lock digest differs from the manifest')
496
+ const lock = validateToolchainLock(
497
+ parseJson(lockBytes, 'provider CLI package-lock'),
498
+ manifest,
499
+ { requirePackageContent },
500
+ )
501
+ return Object.freeze({
502
+ authorityDigest: sha256(selectedManifest.bytes),
503
+ lockDigest: sha256(lockBytes),
504
+ manifest,
505
+ manifestBytes: Buffer.from(selectedManifest.bytes),
506
+ manifestPath: selectedManifest.path,
507
+ lock,
508
+ lockBytes: Buffer.from(lockBytes),
509
+ lockPath: requiredLockPath,
510
+ role: selectedManifest.path === AUTHORITY_MANIFEST_PATH ? 'authority' : 'consumer',
511
+ root,
512
+ })
513
+ }
514
+
515
+ export function resolveProviderCliToolchainAuthority(rootPath = ROOT) {
516
+ return resolveProviderCliToolchainAuthorityInternal(rootPath, { requirePackageContent: true })
517
+ }
518
+
519
+ export function resolveProviderCliToolchainCandidateAuthority(
520
+ rootPath = ROOT,
521
+ { requirePackageContent = false } = {},
522
+ ) {
523
+ invariant(typeof requirePackageContent === 'boolean', 'candidate package-content requirement must be boolean')
524
+ return resolveProviderCliToolchainAuthorityInternal(rootPath, { requirePackageContent })
525
+ }
526
+
527
+ function ensureRealDirectory(path, label, { create = false } = {}) {
528
+ if (create) mkdirSync(path, { recursive: true, mode: 0o755 })
529
+ const info = lstatSync(path)
530
+ invariant(info.isDirectory() && !info.isSymbolicLink(), `${label} must be a real directory`)
531
+ invariant(realpathSync(path) === path, `${label} must not traverse a symbolic-link alias`)
532
+ assertTrustedPathAuthority(path, label)
533
+ return path
534
+ }
535
+
536
+ function installedPackage(root, lock, lockPath, label) {
537
+ const expected = lock.packages[lockPath]
538
+ invariant(expected, `${label} is absent from the canonical lock`)
539
+ const directory = resolve(root, lockPath)
540
+ ensureRealDirectory(directory, `${label} directory`)
541
+ const manifestPath = join(directory, 'package.json')
542
+ const manifest = parseJson(readRegularBytes(manifestPath, `${label} package.json`), `${label} package.json`)
543
+ const expectedName = expected.name ?? packageNameFromLockPath(lockPath)
544
+ invariant(manifest.name === expectedName && manifest.version === expected.version, `${label} installed identity differs from the canonical lock`)
545
+ return { directory, expected, manifest }
546
+ }
547
+
548
+ function installedExecutable(path, label, { executable = false } = {}) {
549
+ const info = lstatSync(path)
550
+ invariant(info.isFile() && !info.isSymbolicLink() && info.nlink === 1, `${label} must be one regular no-link file`)
551
+ invariant(realpathSync(path) === path, `${label} must not traverse a symbolic-link alias`)
552
+ assertTrustedPathAuthority(path, label)
553
+ if (executable) invariant((info.mode & 0o111) !== 0, `${label} is not executable`)
554
+ return path
555
+ }
556
+
557
+ function readStableRegularBytes(path, label, { executable = false } = {}) {
558
+ const before = lstatSync(path, { bigint: true })
559
+ invariant(before.isFile() && !before.isSymbolicLink() && before.nlink === 1n, `${label} must be one regular no-link file`)
560
+ invariant(realpathSync(path) === path, `${label} must not traverse a symbolic-link alias`)
561
+ assertTrustedPathAuthority(path, label)
562
+ if (executable) invariant((before.mode & 0o111n) !== 0n, `${label} is not executable`)
563
+ let descriptor = null
564
+ let opened
565
+ let openedAfter
566
+ let bytes
567
+ try {
568
+ const noFollow = typeof fsConstants.O_NOFOLLOW === 'number' ? fsConstants.O_NOFOLLOW : 0
569
+ descriptor = openSync(path, fsConstants.O_RDONLY | noFollow)
570
+ opened = fstatSync(descriptor, { bigint: true })
571
+ invariant(
572
+ opened.isFile()
573
+ && opened.nlink === 1n
574
+ && opened.dev === before.dev
575
+ && opened.ino === before.ino
576
+ && opened.mode === before.mode
577
+ && opened.size === before.size,
578
+ `${label} changed before read`,
579
+ )
580
+ bytes = readFileSync(descriptor)
581
+ openedAfter = fstatSync(descriptor, { bigint: true })
582
+ } finally {
583
+ if (descriptor !== null) closeSync(descriptor)
584
+ }
585
+ const after = lstatSync(path, { bigint: true })
586
+ invariant(
587
+ BigInt(bytes.length) === before.size
588
+ && openedAfter.isFile()
589
+ && openedAfter.nlink === 1n
590
+ && openedAfter.dev === opened.dev
591
+ && openedAfter.ino === opened.ino
592
+ && openedAfter.mode === opened.mode
593
+ && openedAfter.size === opened.size
594
+ && openedAfter.mtimeNs === opened.mtimeNs
595
+ && openedAfter.ctimeNs === opened.ctimeNs
596
+ && after.isFile()
597
+ && !after.isSymbolicLink()
598
+ && after.nlink === 1n
599
+ && after.dev === before.dev
600
+ && after.ino === before.ino
601
+ && after.mode === before.mode
602
+ && after.size === before.size
603
+ && after.mtimeNs === before.mtimeNs
604
+ && after.ctimeNs === before.ctimeNs,
605
+ `${label} changed while reading`,
606
+ )
607
+ return bytes
608
+ }
609
+
610
+ function portablePackagePath(path, label) {
611
+ portableRepoPath(path, label)
612
+ invariant(Buffer.byteLength(path, 'utf8') === path.length && /^[\x20-\x7e]+$/.test(path), `${label} must contain ASCII only`)
613
+ invariant(path === path.normalize('NFC'), `${label} must be NFC`)
614
+ const parts = path.split('/')
615
+ invariant(path.length <= MAX_PROVIDER_PACKAGE_PATH_BYTES, `${label} exceeds ${MAX_PROVIDER_PACKAGE_PATH_BYTES} bytes`)
616
+ invariant(parts.length <= MAX_PROVIDER_PACKAGE_PATH_DEPTH, `${label} exceeds depth ${MAX_PROVIDER_PACKAGE_PATH_DEPTH}`)
617
+ invariant(parts.every(part => part.length <= MAX_PROVIDER_PACKAGE_SEGMENT_BYTES), `${label} has a segment exceeding ${MAX_PROVIDER_PACKAGE_SEGMENT_BYTES} bytes`)
618
+ return path
619
+ }
620
+
621
+ function recordPortablePackagePath(path, aliases, label) {
622
+ portablePackagePath(path, label)
623
+ const key = path.toLowerCase()
624
+ invariant(!aliases.has(key), `${label} collides with portable alias:${aliases.get(key) ?? path}:${path}`)
625
+ aliases.set(key, path)
626
+ invariant(aliases.size <= MAX_PROVIDER_PACKAGE_ENTRY_COUNT, `${label} exceeds ${MAX_PROVIDER_PACKAGE_ENTRY_COUNT} entries`)
627
+ }
628
+
629
+ function canonicalPackageContent(lockPath, entries) {
630
+ portableRepoPath(lockPath, 'provider CLI package-content lockPath')
631
+ invariant(entries.length <= MAX_PROVIDER_PACKAGE_ENTRY_COUNT, `provider CLI package entries exceed ${MAX_PROVIDER_PACKAGE_ENTRY_COUNT}:${lockPath}`)
632
+ entries.sort((left, right) => left.path < right.path ? -1 : left.path > right.path ? 1 : 0)
633
+ let fileCount = 0
634
+ let totalBytes = 0
635
+ for (const entry of entries) {
636
+ if (entry.type !== 'file') continue
637
+ fileCount += 1
638
+ totalBytes += entry.size
639
+ invariant(fileCount <= MAX_PROVIDER_PACKAGE_FILE_COUNT, `provider CLI package file count exceeds ${MAX_PROVIDER_PACKAGE_FILE_COUNT}:${lockPath}`)
640
+ invariant(Number.isSafeInteger(totalBytes) && totalBytes <= MAX_PROVIDER_PACKAGE_EXPANDED_BYTES, `provider CLI package bytes exceed ${MAX_PROVIDER_PACKAGE_EXPANDED_BYTES}:${lockPath}`)
641
+ }
642
+ invariant(fileCount > 0 && totalBytes > 0, `provider CLI package content is empty:${lockPath}`)
643
+ const binding = {
644
+ entries,
645
+ lockPath,
646
+ modePolicy: PACKAGE_CONTENT_MODE_POLICY,
647
+ protocol: PACKAGE_CONTENT_PROTOCOL,
648
+ }
649
+ return Object.freeze({
650
+ fileCount,
651
+ lockPath,
652
+ totalBytes,
653
+ treeSha256: sha256(Buffer.from(`${PACKAGE_CONTENT_DIGEST_DOMAIN}\0${JSON.stringify(binding)}`, 'utf8')),
654
+ })
655
+ }
656
+
657
+ function tarAsciiField(header, offset, length, label) {
658
+ const field = header.subarray(offset, offset + length)
659
+ const zero = field.indexOf(0)
660
+ const used = zero < 0 ? field : field.subarray(0, zero)
661
+ if (zero >= 0) invariant(field.subarray(zero).every(byte => byte === 0), `${label} has nonzero bytes after NUL`)
662
+ invariant(used.every(byte => byte >= 0x20 && byte <= 0x7e), `${label} must contain ASCII only`)
663
+ return used.toString('ascii')
664
+ }
665
+
666
+ function tarOctalField(header, offset, length, label) {
667
+ const field = header.subarray(offset, offset + length)
668
+ invariant((field[0] & 0x80) === 0, `${label} may not use base-256 encoding`)
669
+ const text = field.toString('ascii').replace(/[\0 ]+$/g, '').replace(/^ +/g, '')
670
+ invariant(/^[0-7]+$/.test(text), `${label} is not canonical octal`)
671
+ const value = Number.parseInt(text, 8)
672
+ invariant(Number.isSafeInteger(value) && value >= 0, `${label} exceeds the safe integer range`)
673
+ return value
674
+ }
675
+
676
+ function assertTarChecksum(header, index) {
677
+ const expected = tarOctalField(header, 148, 8, `provider CLI tar header ${index} checksum`)
678
+ let actual = 0
679
+ for (let offset = 0; offset < header.length; offset += 1) {
680
+ actual += offset >= 148 && offset < 156 ? 0x20 : header[offset]
681
+ }
682
+ invariant(actual === expected, `provider CLI tar header ${index} checksum differs`)
683
+ }
684
+
685
+ function tarPackagePath(header, index) {
686
+ const name = tarAsciiField(header, 0, 100, `provider CLI tar header ${index} name`)
687
+ const prefix = tarAsciiField(header, 345, 155, `provider CLI tar header ${index} prefix`)
688
+ const archivePath = prefix ? `${prefix}/${name}` : name
689
+ invariant(archivePath === 'package' || archivePath.startsWith('package/'), `provider CLI tar entry is outside package/:${archivePath}`)
690
+ const path = archivePath === 'package' ? '' : archivePath.slice('package/'.length).replace(/\/+$/g, '')
691
+ if (path) portablePackagePath(path, `provider CLI tar entry ${index}`)
692
+ return path
693
+ }
694
+
695
+ export function deriveLockedPackageContentFromTarball(tarballBytes, lockRecord) {
696
+ invariant(Buffer.isBuffer(tarballBytes) || tarballBytes instanceof Uint8Array, 'provider CLI package tarball must be bytes')
697
+ invariant(lockRecord && typeof lockRecord === 'object' && !Array.isArray(lockRecord), 'provider CLI package tarball lock record is invalid')
698
+ const bytes = Buffer.from(tarballBytes)
699
+ const lockPath = portableRepoPath(lockRecord.lockPath, 'provider CLI package tarball lockPath')
700
+ invariant(lockPath.startsWith('node_modules/'), 'provider CLI package tarball lockPath must target node_modules')
701
+ validateIntegrity(lockRecord.integrity, `provider CLI package tarball ${lockPath}`)
702
+ invariant(bytes.length > 0 && bytes.length <= MAX_PROVIDER_PACKAGE_COMPRESSED_BYTES, `provider CLI package tarball compressed bytes exceed ${MAX_PROVIDER_PACKAGE_COMPRESSED_BYTES}:${lockPath}`)
703
+ invariant(sha512Integrity(bytes) === lockRecord.integrity, `provider CLI package tarball SHA-512 differs from the exact lock:${lockPath}`)
704
+
705
+ let archive
706
+ try {
707
+ archive = gunzipSync(bytes, { maxOutputLength: MAX_PROVIDER_PACKAGE_EXPANDED_BYTES })
708
+ } catch (error) {
709
+ throw new Error(`${ERROR_PREFIX}:provider CLI package tarball gzip is invalid or exceeds ${MAX_PROVIDER_PACKAGE_EXPANDED_BYTES}:${lockPath}:${error.message}`, { cause: error })
710
+ }
711
+ invariant(archive.length > 0 && archive.length % 512 === 0, `provider CLI package tar archive has an invalid block length:${lockPath}`)
712
+
713
+ const aliases = new Map()
714
+ const entriesByPath = new Map()
715
+ const explicitPaths = new Set()
716
+ const addDirectory = (path) => {
717
+ if (!path) return
718
+ const existing = entriesByPath.get(path)
719
+ invariant(!existing || existing.type === 'directory', `provider CLI tar file/directory collision:${lockPath}:${path}`)
720
+ if (!existing) {
721
+ recordPortablePackagePath(path, aliases, `provider CLI tar path ${lockPath}`)
722
+ entriesByPath.set(path, { path, type: 'directory' })
723
+ }
724
+ }
725
+ const addParents = (path) => {
726
+ const parts = path.split('/')
727
+ for (let index = 1; index < parts.length; index += 1) addDirectory(parts.slice(0, index).join('/'))
728
+ }
729
+
730
+ let offset = 0
731
+ let headerIndex = 0
732
+ let endMarkers = 0
733
+ while (offset < archive.length) {
734
+ const header = archive.subarray(offset, offset + 512)
735
+ if (header.every(byte => byte === 0)) {
736
+ endMarkers += 1
737
+ offset += 512
738
+ if (endMarkers >= 2) {
739
+ invariant(archive.subarray(offset).every(byte => byte === 0), `provider CLI tar has a concatenated or nonzero tail:${lockPath}`)
740
+ offset = archive.length
741
+ }
742
+ continue
743
+ }
744
+ invariant(endMarkers === 0, `provider CLI tar has data after an end marker:${lockPath}`)
745
+ headerIndex += 1
746
+ invariant(headerIndex <= MAX_PROVIDER_PACKAGE_ENTRY_COUNT, `provider CLI tar entries exceed ${MAX_PROVIDER_PACKAGE_ENTRY_COUNT}:${lockPath}`)
747
+ assertTarChecksum(header, headerIndex)
748
+ invariant(header.subarray(257, 263).equals(Buffer.from('ustar\0')) && header.subarray(263, 265).equals(Buffer.from('00')), `provider CLI tar header is not strict ustar:${lockPath}:${headerIndex}`)
749
+ const typeByte = header[156]
750
+ const type = typeByte === 0 || typeByte === 0x30 ? 'file' : typeByte === 0x35 ? 'directory' : 'unsupported'
751
+ invariant(type !== 'unsupported', `provider CLI tar contains a link, special, PAX, or extension entry:${lockPath}:${headerIndex}:${String.fromCharCode(typeByte || 0)}`)
752
+ const path = tarPackagePath(header, headerIndex)
753
+ const size = tarOctalField(header, 124, 12, `provider CLI tar header ${headerIndex} size`)
754
+ invariant(size <= MAX_PROVIDER_PACKAGE_FILE_BYTES, `provider CLI tar entry exceeds ${MAX_PROVIDER_PACKAGE_FILE_BYTES}:${lockPath}:${path}`)
755
+ invariant(type !== 'directory' || size === 0, `provider CLI tar directory has content bytes:${lockPath}:${path}`)
756
+ invariant(!explicitPaths.has(path), `provider CLI tar contains a duplicate path:${lockPath}:${path || '.'}`)
757
+ explicitPaths.add(path)
758
+ if (!path) invariant(type === 'directory' && size === 0, `provider CLI tar package root entry must be an empty directory:${lockPath}`)
759
+ if (path) {
760
+ addParents(path)
761
+ if (type === 'directory') addDirectory(path)
762
+ else {
763
+ invariant(!entriesByPath.has(path), `provider CLI tar file/directory collision:${lockPath}:${path}`)
764
+ recordPortablePackagePath(path, aliases, `provider CLI tar path ${lockPath}`)
765
+ const bodyStart = offset + 512
766
+ const bodyEnd = bodyStart + size
767
+ invariant(bodyEnd <= archive.length, `provider CLI tar entry exceeds archive bounds:${lockPath}:${path}`)
768
+ const body = archive.subarray(bodyStart, bodyEnd)
769
+ entriesByPath.set(path, { path, sha256: sha256(body), size, type: 'file' })
770
+ }
771
+ }
772
+ const paddedSize = Math.ceil(size / 512) * 512
773
+ const padding = archive.subarray(offset + 512 + size, offset + 512 + paddedSize)
774
+ invariant(padding.every(byte => byte === 0), `provider CLI tar entry padding is nonzero:${lockPath}:${path}`)
775
+ offset += 512 + paddedSize
776
+ }
777
+ invariant(endMarkers >= 2, `provider CLI tar lacks two end markers:${lockPath}`)
778
+ return canonicalPackageContent(lockPath, [...entriesByPath.values()])
779
+ }
780
+
781
+ function deriveInstalledPackageContent(directory, lockPath) {
782
+ const root = realpathSync(resolve(directory))
783
+ invariant(root === resolve(directory), `provider CLI installed package root traverses a symbolic-link alias:${lockPath}`)
784
+ const rootInfo = lstatSync(root, { bigint: true })
785
+ invariant(rootInfo.isDirectory() && !rootInfo.isSymbolicLink(), `provider CLI installed package root is not one real directory:${lockPath}`)
786
+ assertTrustedPathAuthority(root, `provider CLI installed package root ${lockPath}`)
787
+ const aliases = new Map()
788
+ const entries = []
789
+
790
+ const visit = (current) => {
791
+ const before = lstatSync(current, { bigint: true })
792
+ invariant(before.isDirectory() && !before.isSymbolicLink() && realpathSync(current) === current, `provider CLI package directory is unsafe:${lockPath}:${relative(root, current) || '.'}`)
793
+ validateProviderCliFilesystemAuthority(before, {
794
+ label: `provider CLI package directory authority:${lockPath}:${relative(root, current) || '.'}`,
795
+ })
796
+ const names = readdirSync(current).sort()
797
+ for (const name of names) {
798
+ const absolute = join(current, name)
799
+ const path = relative(root, absolute).split(sep).join('/')
800
+ recordPortablePackagePath(path, aliases, `provider CLI installed package path ${lockPath}`)
801
+ const entryBefore = lstatSync(absolute, { bigint: true })
802
+ if (entryBefore.isDirectory() && !entryBefore.isSymbolicLink()) {
803
+ validateProviderCliFilesystemAuthority(entryBefore, {
804
+ label: `provider CLI package directory authority:${lockPath}:${path}`,
805
+ })
806
+ invariant(realpathSync(absolute) === absolute, `provider CLI package directory traverses a symbolic-link alias:${lockPath}:${path}`)
807
+ entries.push({ path, type: 'directory' })
808
+ visit(absolute)
809
+ continue
810
+ }
811
+ invariant(entryBefore.isFile() && !entryBefore.isSymbolicLink(), `provider CLI package contains a link or unsupported filesystem entry:${lockPath}:${path}`)
812
+ validateProviderCliFilesystemAuthority(entryBefore, {
813
+ label: `provider CLI package file authority:${lockPath}:${path}`,
814
+ })
815
+ invariant(entryBefore.nlink === 1n, `provider CLI package file must have exactly one link:${lockPath}:${path}`)
816
+ invariant(entryBefore.size <= BigInt(MAX_PROVIDER_PACKAGE_FILE_BYTES), `provider CLI package file exceeds ${MAX_PROVIDER_PACKAGE_FILE_BYTES}:${lockPath}:${path}`)
817
+ invariant(realpathSync(absolute) === absolute, `provider CLI package file traverses a symbolic-link alias:${lockPath}:${path}`)
818
+ let descriptor = null
819
+ let opened
820
+ let openedAfter
821
+ let bytes
822
+ try {
823
+ const noFollow = typeof fsConstants.O_NOFOLLOW === 'number' ? fsConstants.O_NOFOLLOW : 0
824
+ descriptor = openSync(absolute, fsConstants.O_RDONLY | noFollow)
825
+ opened = fstatSync(descriptor, { bigint: true })
826
+ invariant(opened.isFile() && opened.nlink === 1n && opened.dev === entryBefore.dev && opened.ino === entryBefore.ino && opened.size === entryBefore.size, `provider CLI package file changed before read:${lockPath}:${path}`)
827
+ bytes = readFileSync(descriptor)
828
+ openedAfter = fstatSync(descriptor, { bigint: true })
829
+ } finally {
830
+ if (descriptor !== null) closeSync(descriptor)
831
+ }
832
+ const entryAfter = lstatSync(absolute, { bigint: true })
833
+ invariant(
834
+ bytes.length === Number(entryBefore.size)
835
+ && openedAfter.isFile()
836
+ && openedAfter.nlink === 1n
837
+ && openedAfter.dev === opened.dev
838
+ && openedAfter.ino === opened.ino
839
+ && openedAfter.mode === opened.mode
840
+ && openedAfter.size === opened.size
841
+ && openedAfter.mtimeNs === opened.mtimeNs
842
+ && openedAfter.ctimeNs === opened.ctimeNs
843
+ && entryAfter.isFile()
844
+ && !entryAfter.isSymbolicLink()
845
+ && entryAfter.nlink === 1n
846
+ && entryAfter.dev === entryBefore.dev
847
+ && entryAfter.ino === entryBefore.ino
848
+ && entryAfter.mode === entryBefore.mode
849
+ && entryAfter.size === entryBefore.size
850
+ && entryAfter.mtimeNs === entryBefore.mtimeNs
851
+ && entryAfter.ctimeNs === entryBefore.ctimeNs,
852
+ `provider CLI package file changed while hashing:${lockPath}:${path}`,
853
+ )
854
+ entries.push({ path, sha256: sha256(bytes), size: bytes.length, type: 'file' })
855
+ }
856
+ const namesAfter = readdirSync(current).sort()
857
+ const after = lstatSync(current, { bigint: true })
858
+ invariant(
859
+ after.isDirectory()
860
+ && !after.isSymbolicLink()
861
+ && after.dev === before.dev
862
+ && after.ino === before.ino
863
+ && after.mode === before.mode
864
+ && after.mtimeNs === before.mtimeNs
865
+ && after.ctimeNs === before.ctimeNs
866
+ && JSON.stringify(namesAfter) === JSON.stringify(names),
867
+ `provider CLI package directory changed while hashing:${lockPath}:${relative(root, current).split(sep).join('/') || '.'}`,
868
+ )
869
+ }
870
+ visit(root)
871
+ return canonicalPackageContent(lockPath, entries)
872
+ }
873
+
874
+ function platformKey(platform, arch) {
875
+ invariant(['darwin', 'linux'].includes(platform), `unsupported provider CLI platform:${String(platform)}`)
876
+ invariant(['arm64', 'x64'].includes(arch), `unsupported provider CLI architecture:${String(arch)}`)
877
+ return `${platform}-${arch}`
878
+ }
879
+
880
+ function detectLinuxLibc() {
881
+ const value = process.report?.getReport?.()?.header?.glibcVersionRuntime
882
+ return typeof value === 'string' && value.length > 0 ? 'glibc' : 'musl-or-unknown'
883
+ }
884
+
885
+ function activePackageContentRecords(authority, platformId) {
886
+ const records = authority.manifest.packageContent.packages
887
+ .filter(record => record.platforms.includes(platformId))
888
+ const expectedCount = authority.manifest.tools.reduce(
889
+ (count, tool) => count + (tool.platformPackage === null ? 1 : 2),
890
+ 0,
891
+ )
892
+ invariant(records.length === expectedCount, `provider CLI active package-content closure is incomplete:${platformId}`)
893
+ return records
894
+ }
895
+
896
+ function activePackageContentDigest(authority, platformId) {
897
+ const binding = {
898
+ packages: activePackageContentRecords(authority, platformId).map(record => ({
899
+ fileCount: record.fileCount,
900
+ lockPath: record.lockPath,
901
+ totalBytes: record.totalBytes,
902
+ treeSha256: record.treeSha256,
903
+ })),
904
+ platform: platformId,
905
+ protocol: authority.manifest.packageContent.protocol,
906
+ }
907
+ return sha256(Buffer.from(`${ACTIVE_PACKAGE_CONTENT_BINDING_DOMAIN}\0${JSON.stringify(binding)}`, 'utf8'))
908
+ }
909
+
910
+ function stagingProjectManifest(authority) {
911
+ const root = authority.lock.packages['']
912
+ return {
913
+ name: root.name,
914
+ version: root.version,
915
+ private: true,
916
+ dependencies: root.dependencies,
917
+ }
918
+ }
919
+
920
+ function assertRuntimeScaffold(target, authority) {
921
+ const expectedNames = ['.npmrc', 'node_modules', 'package-lock.json', 'package.json']
922
+ const names = readdirSync(target).sort()
923
+ invariant(JSON.stringify(names) === JSON.stringify(expectedNames), 'provider CLI runtime root inventory is not closed')
924
+ const packageBytes = Buffer.from(`${JSON.stringify(stagingProjectManifest(authority), null, 2)}\n`, 'utf8')
925
+ invariant(readRegularBytes(join(target, 'package.json'), 'installed provider CLI root package.json').equals(packageBytes), 'installed provider CLI root package.json differs from authority')
926
+ invariant(readRegularBytes(join(target, '.npmrc'), 'installed provider CLI root .npmrc').equals(Buffer.from('ignore-scripts=true\nstrict-ssl=true\nalways-auth=false\n')), 'installed provider CLI root .npmrc differs from authority')
927
+ }
928
+
929
+ function assertClosedInstalledPackageInventory(target, records) {
930
+ const modules = join(target, 'node_modules')
931
+ ensureRealDirectory(modules, 'provider CLI installed node_modules')
932
+ const expected = records.map(record => record.lockPath).sort()
933
+ const actual = []
934
+ const aliases = new Map()
935
+ for (const scope of readdirSync(modules).sort()) {
936
+ recordPortablePackagePath(scope, aliases, 'provider CLI installed package scope')
937
+ invariant(scope.startsWith('@'), `provider CLI installed node_modules contains unsupported metadata or package:${scope}`)
938
+ const scopeRoot = join(modules, scope)
939
+ ensureRealDirectory(scopeRoot, `provider CLI installed package scope ${scope}`)
940
+ for (const name of readdirSync(scopeRoot).sort()) {
941
+ const lockPath = `node_modules/${scope}/${name}`
942
+ recordPortablePackagePath(`${scope}/${name}`, aliases, 'provider CLI installed package inventory')
943
+ ensureRealDirectory(join(scopeRoot, name), `provider CLI installed package ${lockPath}`)
944
+ actual.push(lockPath)
945
+ }
946
+ }
947
+ actual.sort()
948
+ invariant(
949
+ JSON.stringify(actual) === JSON.stringify(expected),
950
+ `provider CLI installed package inventory differs from authority:${actual.join(',')}`,
951
+ )
952
+ }
953
+
954
+ function assertInstalledPackageContent(target, records) {
955
+ for (const expected of records) {
956
+ const actual = deriveInstalledPackageContent(join(target, expected.lockPath), expected.lockPath)
957
+ invariant(
958
+ actual.treeSha256 === expected.treeSha256
959
+ && actual.fileCount === expected.fileCount
960
+ && actual.totalBytes === expected.totalBytes,
961
+ `provider CLI installed package content differs from authority:${expected.lockPath}`,
962
+ )
963
+ }
964
+ }
965
+
966
+ function inspectInstalledRuntime(target, authority, { platform, arch, libc }) {
967
+ ensureRealDirectory(target, 'provider CLI runtime')
968
+ assertRuntimeScaffold(target, authority)
969
+ const installedLock = readRegularBytes(join(target, 'package-lock.json'), 'installed provider CLI package-lock')
970
+ invariant(installedLock.equals(authority.lockBytes), 'installed provider CLI package-lock differs from canonical authority')
971
+ const key = platformKey(platform, arch)
972
+ invariant(authority.manifest.installPolicy.supportedPlatforms.includes(key), `provider CLI platform is not registered:${key}`)
973
+ if (platform === 'linux') invariant(libc === 'glibc', `provider CLI Linux runtime requires glibc; received ${String(libc)}`)
974
+ const activeRecords = activePackageContentRecords(authority, key)
975
+ assertClosedInstalledPackageInventory(target, activeRecords)
976
+ assertInstalledPackageContent(target, activeRecords)
977
+
978
+ const runtime = {}
979
+ for (const tool of authority.manifest.tools) {
980
+ const main = installedPackage(target, authority.lock, `node_modules/${tool.packageName}`, `${tool.providerId} main package`)
981
+ let platformPackage = null
982
+ if (tool.platformPackage !== null) {
983
+ const packageName = platformPackageName(tool, key)
984
+ platformPackage = installedPackage(target, authority.lock, `node_modules/${packageName}`, `${tool.providerId} platform package`)
985
+ }
986
+ const targetPath = tool.binKind === 'platform-native'
987
+ ? join(platformPackage.directory, ...tool.platformPackage.executablePath.split('/'))
988
+ : join(main.directory, ...tool.packageBin.split('/'))
989
+ const executable = installedExecutable(targetPath, `${tool.providerId} locked executable`, { executable: true })
990
+ runtime[tool.executable] = Object.freeze({
991
+ command: tool.binKind === 'node-entrypoint' ? process.execPath : executable,
992
+ argsPrefix: tool.binKind === 'node-entrypoint' ? [executable] : [],
993
+ target: executable,
994
+ tool,
995
+ })
996
+ }
997
+ return Object.freeze(runtime)
998
+ }
999
+
1000
+ function runVersionProbe(command, args, { root, environment, runner, label, expectedVersion }) {
1001
+ const result = runner(command, args, {
1002
+ cwd: root,
1003
+ env: environment,
1004
+ shell: false,
1005
+ encoding: 'utf8',
1006
+ stdio: ['ignore', 'pipe', 'pipe'],
1007
+ timeout: VERSION_TIMEOUT_MS,
1008
+ windowsHide: true,
1009
+ })
1010
+ if (result?.error) throw result.error
1011
+ invariant(result?.status === 0, `${label} --version failed with exit ${String(result?.status)}`)
1012
+ const output = `${String(result.stdout || '')}\n${String(result.stderr || '')}`
1013
+ const escaped = expectedVersion.replaceAll('.', '\\.')
1014
+ invariant(new RegExp(`(^|[^0-9A-Za-z])${escaped}(?=$|[^0-9A-Za-z.-])`).test(output), `${label} --version did not report exact token ${expectedVersion}`)
1015
+ return output.trim()
1016
+ }
1017
+
1018
+ function probeDirectRuntime(runtime, { root, environment, runner }) {
1019
+ const versions = {}
1020
+ for (const [name, capability] of Object.entries(runtime)) {
1021
+ versions[name] = runVersionProbe(
1022
+ capability.command,
1023
+ [...capability.argsPrefix, '--version'],
1024
+ { root, environment, runner, label: capability.tool.providerId, expectedVersion: capability.tool.version },
1025
+ )
1026
+ }
1027
+ return versions
1028
+ }
1029
+
1030
+ function shimSource(executable, relativeTarget) {
1031
+ // Dynamic imports keep the generated program valid in both CommonJS and ESM package scopes,
1032
+ // without trusting the consumer's package.json `type`. The verifier rehashes the
1033
+ // authority-selected package trees on every invocation before any provider byte executes.
1034
+ return `#!/usr/bin/env node
1035
+ Promise.all([import('node:child_process'), import('node:path'), import('node:url')]).then(async ([child, path, url]) => {
1036
+ const modules = path.resolve(path.dirname(process.argv[1]), '..')
1037
+ const root = path.resolve(modules, '..')
1038
+ const expectedExecutable = path.resolve(modules, ${JSON.stringify(relativeTarget)})
1039
+ const verifierUrl = url.pathToFileURL(path.join(root, 'scripts/setup-provider-cli-toolchain.mjs')).href
1040
+ const verifier = await import(verifierUrl)
1041
+ const capability = verifier.verifyProviderCliRuntimeForShim({
1042
+ executable: ${JSON.stringify(executable)},
1043
+ expectedExecutable,
1044
+ rootPath: root,
1045
+ })
1046
+ const result = child.spawnSync(capability.command, [...capability.argsPrefix, ...process.argv.slice(2)], { cwd: process.cwd(), env: process.env, shell: false, stdio: 'inherit', windowsHide: true })
1047
+ if (result.error) throw result.error
1048
+ if (result.signal) process.kill(process.pid, result.signal)
1049
+ process.exit(Number.isInteger(result.status) ? result.status : 1)
1050
+ }).catch(error => { console.error(error.message); process.exit(1) })
1051
+ `
1052
+ }
1053
+
1054
+ function expectedShimBytes(authority, runtime) {
1055
+ const modulesRoot = resolve(authority.root, 'node_modules')
1056
+ const values = {}
1057
+ for (const [name, capability] of Object.entries(runtime)) {
1058
+ const relativeTarget = relative(modulesRoot, capability.target).split(sep).join('/')
1059
+ invariant(relativeTarget && !relativeTarget.startsWith('../') && !isAbsolute(relativeTarget), `provider CLI ${name} shim target escapes node_modules`)
1060
+ values[name] = Buffer.from(shimSource(name, relativeTarget), 'utf8')
1061
+ }
1062
+ return values
1063
+ }
1064
+
1065
+ function atomicRegularExecutable(path, bytes) {
1066
+ assertTrustedPathAuthority(path, 'provider CLI shim replacement ancestor', { includeEntry: false })
1067
+ let currentInfo = null
1068
+ try {
1069
+ currentInfo = lstatSync(path)
1070
+ } catch (error) {
1071
+ if (error?.code !== 'ENOENT') throw error
1072
+ }
1073
+ if (currentInfo?.isFile() && !currentInfo.isSymbolicLink() && currentInfo.nlink === 1) {
1074
+ invariant(realpathSync(path) === path, `provider CLI shim must not traverse a symbolic-link alias:${path}`)
1075
+ validateProviderCliFilesystemAuthority(currentInfo, { label: `provider CLI shim authority ${path}` })
1076
+ const current = readFileSync(path)
1077
+ if (current.equals(bytes)) {
1078
+ invariant((currentInfo.mode & 0o111) !== 0, `provider CLI shim is not executable:${path}`)
1079
+ return false
1080
+ }
1081
+ }
1082
+ invariant(
1083
+ currentInfo === null || currentInfo.isFile() || currentInfo.isSymbolicLink(),
1084
+ `provider CLI shim target must be absent, a regular file, or a symbolic link:${path}`,
1085
+ )
1086
+ const temporary = `${path}.tmp-${process.pid}-${randomBytes(8).toString('hex')}`
1087
+ let descriptor = null
1088
+ try {
1089
+ descriptor = openSync(temporary, 'wx', 0o755)
1090
+ writeFileSync(descriptor, bytes)
1091
+ fsyncSync(descriptor)
1092
+ closeSync(descriptor)
1093
+ descriptor = null
1094
+ chmodSync(temporary, 0o755)
1095
+ renameSync(temporary, path)
1096
+ const installed = readRegularBytes(path, `provider CLI shim ${path}`)
1097
+ invariant(installed.equals(bytes), `provider CLI shim atomic readback failed:${path}`)
1098
+ invariant((lstatSync(path).mode & 0o111) !== 0, `provider CLI shim readback is not executable:${path}`)
1099
+ return true
1100
+ } finally {
1101
+ if (descriptor !== null) closeSync(descriptor)
1102
+ try { unlinkSync(temporary) } catch (error) { if (error?.code !== 'ENOENT') throw error }
1103
+ }
1104
+ }
1105
+
1106
+ function installOrCheckShims(authority, target, runtime, { check }) {
1107
+ const shimDirectory = resolveContained(authority.root, authority.manifest.installPolicy.shimDirectory, 'provider CLI shim directory')
1108
+ ensureRealDirectory(shimDirectory, 'provider CLI shim directory', { create: !check })
1109
+ const expected = expectedShimBytes(authority, runtime)
1110
+ const paths = {}
1111
+ for (const tool of authority.manifest.tools) {
1112
+ const path = join(shimDirectory, tool.executable)
1113
+ const bytes = expected[tool.executable]
1114
+ if (check) {
1115
+ const actual = readStableRegularBytes(path, `provider CLI ${tool.executable} shim`, { executable: true })
1116
+ invariant(actual.equals(bytes), `provider CLI ${tool.executable} shim differs from authority`)
1117
+ } else atomicRegularExecutable(path, bytes)
1118
+ paths[tool.executable] = path
1119
+ }
1120
+ return paths
1121
+ }
1122
+
1123
+ function probeShims(authority, shimPaths, { environment, runner }) {
1124
+ const versions = {}
1125
+ for (const tool of authority.manifest.tools) {
1126
+ versions[tool.executable] = runVersionProbe(
1127
+ process.execPath,
1128
+ [shimPaths[tool.executable], '--version'],
1129
+ { root: authority.root, environment, runner, label: `${tool.providerId} controlled shim`, expectedVersion: tool.version },
1130
+ )
1131
+ }
1132
+ return versions
1133
+ }
1134
+
1135
+ function writeStagingProject(staging, authority) {
1136
+ const manifest = stagingProjectManifest(authority)
1137
+ writeFileSync(join(staging, 'package.json'), `${JSON.stringify(manifest, null, 2)}\n`, { flag: 'wx', mode: 0o600 })
1138
+ writeFileSync(join(staging, 'package-lock.json'), authority.lockBytes, { flag: 'wx', mode: 0o600 })
1139
+ writeFileSync(join(staging, '.npmrc'), 'ignore-scripts=true\nstrict-ssl=true\nalways-auth=false\n', { flag: 'wx', mode: 0o600 })
1140
+ }
1141
+
1142
+ function removeNpmGeneratedRuntimeMetadata(staging) {
1143
+ rmSync(join(staging, 'node_modules/.bin'), { recursive: true, force: true })
1144
+ try {
1145
+ unlinkSync(join(staging, 'node_modules/.package-lock.json'))
1146
+ } catch (error) {
1147
+ if (error?.code !== 'ENOENT') throw error
1148
+ }
1149
+ }
1150
+
1151
+ function targetPath(authority, platformId) {
1152
+ invariant(/^(?:darwin|linux)-(?:arm64|x64)$/.test(platformId), `provider CLI runtime address platform is invalid:${platformId}`)
1153
+ invariant(SHA256.test(authority.authorityDigest), 'provider CLI runtime address authority digest is invalid')
1154
+ const base = resolveContained(authority.root, authority.manifest.installPolicy.runtimeDirectory, 'provider CLI runtime directory')
1155
+ const protocolBase = join(base, RUNTIME_CONTENT_TARGET_PROTOCOL)
1156
+ const platformBase = join(protocolBase, platformId)
1157
+ return {
1158
+ base,
1159
+ platformBase,
1160
+ protocolBase,
1161
+ target: join(platformBase, authority.authorityDigest),
1162
+ }
1163
+ }
1164
+
1165
+ export function verifyProviderCliRuntimeForShim({
1166
+ rootPath = ROOT,
1167
+ executable,
1168
+ expectedExecutable,
1169
+ platform = process.platform,
1170
+ arch = process.arch,
1171
+ libc = platform === 'linux' ? detectLinuxLibc() : null,
1172
+ } = {}) {
1173
+ invariant(typeof executable === 'string' && /^[a-z][a-z0-9-]+$/.test(executable), 'provider CLI shim executable identity is invalid')
1174
+ invariant(typeof expectedExecutable === 'string' && isAbsolute(expectedExecutable), 'provider CLI shim expected executable path is invalid')
1175
+ const authority = resolveProviderCliToolchainAuthority(rootPath)
1176
+ const platformId = platformKey(platform, arch)
1177
+ invariant(authority.manifest.installPolicy.supportedPlatforms.includes(platformId), `provider CLI shim platform is not supported:${platformId}`)
1178
+ if (platform === 'linux') invariant(libc === 'glibc', `provider CLI Linux runtime requires glibc; received ${String(libc)}`)
1179
+ const { target } = targetPath(authority, platformId)
1180
+ invariant(existingRuntime(target), `provider CLI toolchain is not installed:${target}`)
1181
+ const runtime = inspectInstalledRuntime(target, authority, { platform, arch, libc })
1182
+ const capability = runtime[executable]
1183
+ invariant(capability, `provider CLI shim executable is not registered:${executable}`)
1184
+ invariant(capability.target === resolve(expectedExecutable), `provider CLI shim target differs from authority:${executable}`)
1185
+ // A non-cooperative process with the same uid can race any pathname-based check. That hostile-host
1186
+ // condition is outside repository authority; protected hooks-off CI never treats provider CLI or
1187
+ // model output as its hard gate. This verifier closes persisted accidental/stale mutation.
1188
+ return Object.freeze({
1189
+ argsPrefix: Object.freeze([...capability.argsPrefix]),
1190
+ command: capability.command,
1191
+ target: capability.target,
1192
+ })
1193
+ }
1194
+
1195
+ export function verifyProviderCliRuntimeForCertification({
1196
+ rootPath = ROOT,
1197
+ executable,
1198
+ platform = process.platform,
1199
+ arch = process.arch,
1200
+ libc = platform === 'linux' ? detectLinuxLibc() : null,
1201
+ ...unsupported
1202
+ } = {}) {
1203
+ invariant(Object.keys(unsupported).length === 0, `provider CLI certification options are unsupported:${Object.keys(unsupported).sort().join(',')}`)
1204
+ invariant(typeof executable === 'string' && /^[a-z][a-z0-9-]+$/.test(executable), 'provider CLI certification executable identity is invalid')
1205
+ const authority = resolveProviderCliToolchainAuthority(rootPath)
1206
+ const { platformId, target, runtime } = verifyStaticResolvedAuthority(authority, { platform, arch, libc })
1207
+ const capability = runtime[executable]
1208
+ invariant(capability, `provider CLI certification executable is not registered:${executable}`)
1209
+
1210
+ const expectedShim = expectedShimBytes(authority, runtime)[executable]
1211
+ const shimDirectory = resolveContained(authority.root, authority.manifest.installPolicy.shimDirectory, 'provider CLI certification shim directory')
1212
+ ensureRealDirectory(shimDirectory, 'provider CLI certification shim directory')
1213
+ const shimPath = join(shimDirectory, executable)
1214
+ const actualShim = readStableRegularBytes(shimPath, `provider CLI certification shim ${executable}`, { executable: true })
1215
+ invariant(actualShim.equals(expectedShim), `provider CLI certification shim differs from authority:${executable}`)
1216
+ const targetBytes = readStableRegularBytes(capability.target, `provider CLI certification target ${executable}`, { executable: true })
1217
+ const shimRelative = relative(authority.root, shimPath).split(sep).join('/')
1218
+ const targetRelative = relative(authority.root, capability.target).split(sep).join('/')
1219
+ portableRepoPath(shimRelative, `provider CLI certification shim path ${executable}`)
1220
+ portableRepoPath(targetRelative, `provider CLI certification target path ${executable}`)
1221
+
1222
+ const binding = Object.freeze({
1223
+ activePackageContentDigest: activePackageContentDigest(authority, platformId),
1224
+ authorityDigest: authority.authorityDigest,
1225
+ executable,
1226
+ lockDigest: authority.lockDigest,
1227
+ packageContentProtocol: authority.manifest.packageContent.protocol,
1228
+ platform: platformId,
1229
+ shimPath: shimRelative,
1230
+ shimSha256: sha256(actualShim),
1231
+ targetPath: targetRelative,
1232
+ targetSha256: sha256(targetBytes),
1233
+ })
1234
+ return Object.freeze({
1235
+ argsPrefix: Object.freeze([shimPath]),
1236
+ binding,
1237
+ command: process.execPath,
1238
+ target: capability.target,
1239
+ })
1240
+ }
1241
+
1242
+ function existingRuntime(target) {
1243
+ try {
1244
+ const info = lstatSync(target)
1245
+ invariant(info.isDirectory() && !info.isSymbolicLink() && realpathSync(target) === target, 'provider CLI digest target is not one real directory')
1246
+ return true
1247
+ } catch (error) {
1248
+ if (error?.code === 'ENOENT') return false
1249
+ throw error
1250
+ }
1251
+ }
1252
+
1253
+ function staticVerificationResult(authority, target, runtime, platformId) {
1254
+ installOrCheckShims(authority, target, runtime, { check: true })
1255
+ return Object.freeze({
1256
+ authorityDigest: authority.authorityDigest,
1257
+ executablesProbed: false,
1258
+ lockDigest: authority.lockDigest,
1259
+ platform: platformId,
1260
+ role: authority.role,
1261
+ staticVerified: true,
1262
+ status: 'static-verified',
1263
+ target,
1264
+ versions: null,
1265
+ })
1266
+ }
1267
+
1268
+ function verifyStaticResolvedAuthority(authority, { platform, arch, libc }) {
1269
+ const platformId = platformKey(platform, arch)
1270
+ invariant(authority.manifest.installPolicy.supportedPlatforms.includes(platformId), `provider CLI static verification platform is not supported:${platformId}`)
1271
+ if (platform === 'linux') invariant(libc === 'glibc', `provider CLI Linux runtime requires glibc; received ${String(libc)}`)
1272
+ const { target } = targetPath(authority, platformId)
1273
+ invariant(existingRuntime(target), `provider CLI toolchain is not installed:${target}`)
1274
+ const runtime = inspectInstalledRuntime(target, authority, { platform, arch, libc })
1275
+ const result = staticVerificationResult(authority, target, runtime, platformId)
1276
+ return { platformId, result, runtime, target }
1277
+ }
1278
+
1279
+ export function verifyProviderCliToolchainStatic({
1280
+ root: rootPath = ROOT,
1281
+ platform = process.platform,
1282
+ arch = process.arch,
1283
+ libc = platform === 'linux' ? detectLinuxLibc() : null,
1284
+ ...unsupported
1285
+ } = {}) {
1286
+ invariant(Object.keys(unsupported).length === 0, `provider CLI static verification options are unsupported:${Object.keys(unsupported).sort().join(',')}`)
1287
+ const authority = resolveProviderCliToolchainAuthority(rootPath)
1288
+ return verifyStaticResolvedAuthority(authority, { platform, arch, libc }).result
1289
+ }
1290
+
1291
+ export async function setupProviderCliToolchain({
1292
+ root: rootPath = ROOT,
1293
+ check = false,
1294
+ probeExecutables = true,
1295
+ platform = process.platform,
1296
+ arch = process.arch,
1297
+ libc = platform === 'linux' ? detectLinuxLibc() : null,
1298
+ baseEnvironment = process.env,
1299
+ runner = spawnSync,
1300
+ runtimeFactory = prepareVerifiedExactNpmRuntime,
1301
+ } = {}) {
1302
+ invariant(typeof check === 'boolean', 'provider CLI check option must be boolean')
1303
+ invariant(typeof probeExecutables === 'boolean', 'provider CLI executable-probe option must be boolean')
1304
+ const authority = resolveProviderCliToolchainAuthority(rootPath)
1305
+ const platformId = platformKey(platform, arch)
1306
+ invariant(authority.manifest.installPolicy.supportedPlatforms.includes(platformId), `provider CLI platform is not supported:${platformId}`)
1307
+ if (platform === 'linux') invariant(libc === 'glibc', `provider CLI Linux runtime requires glibc; received ${String(libc)}`)
1308
+ const callerWorktree = captureGitVisibleWorktree(authority.root)
1309
+ const expectedNpm = resolveExactNpmRuntimeContract(authority.root)
1310
+ invariant(expectedNpm.version === GOVERNANCE_DEPENDENCY_EXACT_NPM_VERSION, `caller lock must bind npm ${GOVERNANCE_DEPENDENCY_EXACT_NPM_VERSION}`)
1311
+ const isolated = createIsolatedGovernanceNpmEnvironment(baseEnvironment, { errorPrefix: ERROR_PREFIX })
1312
+ const { base, platformBase, protocolBase, target } = targetPath(authority, platformId)
1313
+ let staging = null
1314
+ let npmRuntime = null
1315
+ try {
1316
+ const environment = isolated.env
1317
+ if (existingRuntime(target)) {
1318
+ const runtime = inspectInstalledRuntime(target, authority, { platform, arch, libc })
1319
+ const shimPaths = installOrCheckShims(authority, target, runtime, { check })
1320
+ const versions = probeExecutables ? probeShims(authority, shimPaths, { environment, runner }) : null
1321
+ const staticResult = staticVerificationResult(authority, target, runtime, platformId)
1322
+ assertGitVisibleWorktreeUnchanged(authority.root, callerWorktree, { label: 'provider CLI idempotent readback' })
1323
+ return Object.freeze({
1324
+ ...staticResult,
1325
+ executablesProbed: probeExecutables,
1326
+ status: 'ready',
1327
+ versions,
1328
+ })
1329
+ }
1330
+ invariant(!check, `provider CLI toolchain is not installed:${target}`)
1331
+
1332
+ const modules = resolve(authority.root, 'node_modules')
1333
+ ensureRealDirectory(modules, 'caller node_modules', { create: true })
1334
+ ensureRealDirectory(base, 'provider CLI runtime base', { create: true })
1335
+ ensureRealDirectory(protocolBase, 'provider CLI runtime protocol base', { create: true })
1336
+ ensureRealDirectory(platformBase, 'provider CLI runtime platform base', { create: true })
1337
+ staging = mkdtempSync(join(platformBase, '.stage-'))
1338
+ ensureRealDirectory(staging, 'provider CLI staging directory')
1339
+ writeStagingProject(staging, authority)
1340
+
1341
+ npmRuntime = await runtimeFactory({ repositoryRoot: authority.root, env: environment, runner })
1342
+ assertVerifiedExactNpmRuntimeCapability(npmRuntime, expectedNpm)
1343
+ assertGitVisibleWorktreeUnchanged(authority.root, callerWorktree, { label: 'provider CLI exact npm materialization' })
1344
+ const npmSteps = [
1345
+ { args: ['ci', '--ignore-scripts', '--no-bin-links', '--legacy-peer-deps', `--registry=${GOVERNANCE_DEPENDENCY_REGISTRY}`], timeoutMs: INSTALL_TIMEOUT_MS },
1346
+ { args: ['audit', 'signatures', `--registry=${GOVERNANCE_DEPENDENCY_REGISTRY}`], timeoutMs: AUDIT_TIMEOUT_MS },
1347
+ { args: ['audit', '--audit-level=high', `--registry=${GOVERNANCE_DEPENDENCY_REGISTRY}`], timeoutMs: AUDIT_TIMEOUT_MS },
1348
+ ]
1349
+ for (const [index, step] of npmSteps.entries()) {
1350
+ runClosedBootstrapStep(process.execPath, [npmRuntime.cli, ...step.args], {
1351
+ root: staging,
1352
+ environment,
1353
+ runner,
1354
+ errorPrefix: ERROR_PREFIX,
1355
+ timeoutMs: step.timeoutMs,
1356
+ })
1357
+ invariant(readRegularBytes(join(staging, 'package-lock.json'), 'staged provider CLI package-lock').equals(authority.lockBytes), 'provider CLI npm stage mutated the canonical lock copy')
1358
+ assertGitVisibleWorktreeUnchanged(authority.root, callerWorktree, { label: `provider CLI npm stage ${index + 1}` })
1359
+ }
1360
+
1361
+ removeNpmGeneratedRuntimeMetadata(staging)
1362
+ const stagedRuntime = inspectInstalledRuntime(staging, authority, { platform, arch, libc })
1363
+ if (probeExecutables) probeDirectRuntime(stagedRuntime, { root: staging, environment, runner })
1364
+ assertGitVisibleWorktreeUnchanged(authority.root, callerWorktree, {
1365
+ label: probeExecutables ? 'provider CLI staged version readback' : 'provider CLI staged static verification',
1366
+ })
1367
+ try {
1368
+ renameSync(staging, target)
1369
+ staging = null
1370
+ } catch (error) {
1371
+ if (!['EEXIST', 'ENOTEMPTY'].includes(error?.code) || !existingRuntime(target)) throw error
1372
+ }
1373
+ const runtime = inspectInstalledRuntime(target, authority, { platform, arch, libc })
1374
+ const shimPaths = installOrCheckShims(authority, target, runtime, { check: false })
1375
+ const versions = probeExecutables ? probeShims(authority, shimPaths, { environment, runner }) : null
1376
+ const staticResult = staticVerificationResult(authority, target, runtime, platformId)
1377
+ assertGitVisibleWorktreeUnchanged(authority.root, callerWorktree, { label: 'provider CLI atomic installation' })
1378
+ return Object.freeze({
1379
+ ...staticResult,
1380
+ executablesProbed: probeExecutables,
1381
+ status: 'installed',
1382
+ versions,
1383
+ })
1384
+ } finally {
1385
+ try { npmRuntime?.cleanup?.() } finally {
1386
+ try { isolated.cleanup() } finally {
1387
+ if (staging !== null) rmSync(staging, { recursive: true, force: true })
1388
+ }
1389
+ }
1390
+ }
1391
+ }
1392
+
1393
+ function isMain() {
1394
+ try { return Boolean(process.argv[1]) && realpathSync(process.argv[1]) === realpathSync(fileURLToPath(import.meta.url)) }
1395
+ catch { return false }
1396
+ }
1397
+
1398
+ if (isMain()) {
1399
+ const args = process.argv.slice(2)
1400
+ if (!(args.length === 0 || (args.length === 1 && args[0] === '--check'))) {
1401
+ console.error('Usage: node scripts/setup-provider-cli-toolchain.mjs [--check]')
1402
+ process.exitCode = 2
1403
+ } else {
1404
+ try {
1405
+ const result = await setupProviderCliToolchain({ check: args[0] === '--check' })
1406
+ console.log(`✅ provider CLI toolchain ${result.status}:${result.platform}:sha256:${result.authorityDigest}`)
1407
+ } catch (error) {
1408
+ console.error(`❌ provider CLI toolchain failed:${error.message}`)
1409
+ process.exitCode = 1
1410
+ }
1411
+ }
1412
+ }