@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,1321 @@
1
+ #!/usr/bin/env node
2
+ // Converts the latest genuine user message in a provider transcript into bounded,
3
+ // machine-readable design-edit authorization evidence. Denial and uncertainty always win.
4
+
5
+ import { createHash } from 'node:crypto'
6
+ import { readFileSync, statSync } from 'node:fs'
7
+ import { pathToFileURL } from 'node:url'
8
+
9
+ function argument(name) {
10
+ const index = process.argv.indexOf(name)
11
+ return index >= 0 ? process.argv[index + 1] : null
12
+ }
13
+
14
+ function textContent(content) {
15
+ if (typeof content === 'string') return content
16
+ if (!Array.isArray(content)) return ''
17
+ return content
18
+ .filter((item) => item && typeof item === 'object' && item.type !== 'tool_result')
19
+ .map((item) => typeof item.text === 'string' ? item.text : '')
20
+ .filter(Boolean)
21
+ .join('\n')
22
+ }
23
+
24
+ function jsonValues(text) {
25
+ const values = []
26
+ let start = -1
27
+ let depth = 0
28
+ let inString = false
29
+ let escaped = false
30
+ for (let index = 0; index < text.length; index += 1) {
31
+ const char = text[index]
32
+ if (inString) {
33
+ if (escaped) escaped = false
34
+ else if (char === '\\') escaped = true
35
+ else if (char === '"') inString = false
36
+ continue
37
+ }
38
+ if (char === '"') { inString = true; continue }
39
+ if (char === '{' || char === '[') {
40
+ if (depth === 0) start = index
41
+ depth += 1
42
+ } else if (char === '}' || char === ']') {
43
+ if (depth === 0) continue
44
+ depth -= 1
45
+ if (depth === 0 && start >= 0) {
46
+ try { values.push(JSON.parse(text.slice(start, index + 1))) } catch {}
47
+ start = -1
48
+ }
49
+ }
50
+ }
51
+ return values
52
+ }
53
+
54
+ function toolResultText(content) {
55
+ if (typeof content === 'string') return content
56
+ if (!Array.isArray(content)) return ''
57
+ return content
58
+ .filter((item) => item && typeof item === 'object' && item.type === 'text' && typeof item.text === 'string')
59
+ .map((item) => item.text)
60
+ .join('\n')
61
+ }
62
+
63
+ function transcriptState(transcriptPath) {
64
+ const stat = statSync(transcriptPath)
65
+ if (!stat.isFile()) throw new Error('transcript is not a regular file')
66
+ // Bound parsing cost while retaining the latest records. A partial first line is discarded.
67
+ const body = readFileSync(transcriptPath)
68
+ const bounded = body.length > 4 * 1024 * 1024 ? body.subarray(body.length - 4 * 1024 * 1024) : body
69
+ const records = jsonValues(bounded.toString('utf8'))
70
+ const userMessages = []
71
+ let lastUserRecordIndex = -1
72
+ // AskUserQuestion selections are genuine user decisions delivered as harness-authored
73
+ // tool_result records (role:user), which `textContent` rightly excludes from user speech for
74
+ // every ORDINARY tool (tool output is data, not the user's voice). The selection event itself,
75
+ // however, is the user's — the assistant cannot author user-role records — so it is collected
76
+ // here as a distinct evidence channel. The approval bytes come only from the harness result
77
+ // text; the assistant-authored proposal text that preceded the question is captured separately
78
+ // and may contribute TARGET BINDING only, never approval semantics (canon: the user approves
79
+ // 「當下 pending 的 exact 提案」, and the pending proposal is what the assistant just presented).
80
+ const askUserQuestionToolUseIds = new Set()
81
+ const assistantTexts = []
82
+ for (const [index, record] of records.entries()) {
83
+ const message = record?.message || record
84
+ if (message?.role !== 'assistant' || !Array.isArray(message.content)) continue
85
+ for (const item of message.content) {
86
+ if (item && typeof item === 'object' && item.type === 'tool_use'
87
+ && item.name === 'AskUserQuestion' && typeof item.id === 'string') {
88
+ askUserQuestionToolUseIds.add(item.id)
89
+ }
90
+ }
91
+ const text = message.content
92
+ .filter((item) => item && typeof item === 'object' && item.type === 'text' && typeof item.text === 'string')
93
+ .map((item) => item.text)
94
+ .join('\n')
95
+ .trim()
96
+ if (text) assistantTexts.push({ index, text })
97
+ }
98
+ const plainUserRecordIndexes = []
99
+ let latestSelection = null
100
+ for (const [index, record] of records.entries()) {
101
+ const message = record?.message || record
102
+ if (message?.role !== 'user') continue
103
+ if (Array.isArray(message.content)) {
104
+ for (const item of message.content) {
105
+ if (item && typeof item === 'object' && item.type === 'tool_result'
106
+ && askUserQuestionToolUseIds.has(item.tool_use_id)) {
107
+ const answerText = toolResultText(item.content).trim()
108
+ if (answerText) latestSelection = { index, answerText }
109
+ }
110
+ }
111
+ }
112
+ const text = textContent(message.content).trim()
113
+ if (!text) continue
114
+ // Harness-authored background events (task/monitor notifications) are recorded as
115
+ // user-role text but are explicitly NOT user input — their own banner says so. They must
116
+ // never count as user speech: as "latest user message" they would displace a genuine
117
+ // pending decision, and their free-form summaries could pattern-match approval or denial.
118
+ if (/^\[SYSTEM NOTIFICATION\b/u.test(text) || text.includes('<task-notification>')) continue
119
+ // Harness-injected meta records (skill / reference text loaded by a tool call: `isMeta` +
120
+ // `sourceToolUseID`) are likewise not the user's voice — 2026-09-02 anchor: a loaded
121
+ // workflow-authoring reference displaced the user's real directive as "latest user message".
122
+ if (record?.isMeta === true || typeof record?.sourceToolUseID === 'string') continue
123
+ userMessages.push(text)
124
+ lastUserRecordIndex = index
125
+ plainUserRecordIndexes.push(index)
126
+ }
127
+ let latestAskUserSelection = null
128
+ if (latestSelection && latestSelection.index > lastUserRecordIndex) {
129
+ // Valid only while it is the newest user event: any later plain user message (a follow-up
130
+ // question, a denial, a new directive) supersedes the selection and flows through the
131
+ // ordinary classifier instead.
132
+ const plainBefore = plainUserRecordIndexes.filter((index) => index < latestSelection.index)
133
+ const proposalFloor = plainBefore.length ? plainBefore.at(-1) : -1
134
+ const proposalText = assistantTexts
135
+ .filter((entry) => entry.index > proposalFloor && entry.index < latestSelection.index)
136
+ .map((entry) => entry.text)
137
+ .join('\n')
138
+ latestAskUserSelection = { answerText: latestSelection.answerText, proposalText }
139
+ }
140
+ return {
141
+ records,
142
+ userMessages,
143
+ latestUserMessage: userMessages.at(-1) ?? '',
144
+ latestAskUserSelection,
145
+ turnRecords: lastUserRecordIndex >= 0 ? records.slice(lastUserRecordIndex + 1) : [],
146
+ }
147
+ }
148
+
149
+ function normalizedUnicodeText(value) {
150
+ return String(value || '')
151
+ .normalize('NFKC')
152
+ .replaceAll(/\p{Default_Ignorable_Code_Point}+/gu, '')
153
+ }
154
+
155
+ function normalizeText(value) {
156
+ return normalizedUnicodeText(value).replaceAll(/\s+/g, ' ').trim()
157
+ }
158
+
159
+ function messageClauses(value) {
160
+ return normalizedUnicodeText(value)
161
+ .replaceAll(/([。!?!?;;,,]+)/gu, '$1\n')
162
+ .split(/\r?\n/u)
163
+ .map((clause) => clause.replaceAll(/\s+/g, ' ').trim())
164
+ .filter(Boolean)
165
+ }
166
+
167
+ function messageBlocks(value) {
168
+ return normalizedUnicodeText(value)
169
+ .split(/\r?\n/u)
170
+ .map((block) => block.replaceAll(/\s+/g, ' ').trim())
171
+ .filter(Boolean)
172
+ }
173
+
174
+ function normalizeTarget(value) {
175
+ const raw = String(value || '').normalize('NFKC').replaceAll('\\', '/').replace(/^\.\/+/, '')
176
+ const roots = ['packages/', 'apps/', 'node_modules/']
177
+ const offsets = roots.map((root) => raw.indexOf(root)).filter((offset) => offset >= 0)
178
+ return offsets.length ? raw.slice(Math.min(...offsets)) : raw.replace(/^\/+/, '')
179
+ }
180
+
181
+ function targetAliases(target) {
182
+ const normalized = normalizeTarget(target)
183
+ const segments = normalized.split('/').filter(Boolean)
184
+ const basename = segments.at(-1) ?? ''
185
+ const stem = basename.replace(/\.[^.]+$/, '')
186
+ const aliases = new Set([normalized, basename, stem])
187
+ // 2026-09-02 詞彙缺口:user 口語寫「agent logo」「AgentLogo」而非檔名 `agent-logo` → 同一 exact target。
188
+ const stemTokens = stem.split(/[-_.]+/u).filter(Boolean)
189
+ if (stemTokens.length > 1) {
190
+ aliases.add(stemTokens.join(' '))
191
+ aliases.add(stemTokens.join(''))
192
+ }
193
+ const componentIndex = segments.lastIndexOf('components')
194
+ const componentDir = componentIndex >= 0 ? segments[componentIndex + 1] ?? '' : ''
195
+ if (componentDir) {
196
+ aliases.add(componentDir)
197
+ // 家族檔(components/AgentPanel/agent-fab.tsx):檔名的家族前綴 = 目錄前綴 → 其餘 token
198
+ // (「fab」「logo」)就是 user 對該檔的日常稱呼;非家族檔不放寬(避免泛用字誤綁)。
199
+ const family = stemTokens[0] ?? ''
200
+ if (family && componentDir.toLowerCase().startsWith(family.toLowerCase()) && stemTokens.length > 1) {
201
+ const rest = stemTokens.slice(1)
202
+ aliases.add(rest.join(' '))
203
+ for (const token of rest) aliases.add(token)
204
+ }
205
+ }
206
+ return [...aliases].filter((alias) => alias.length >= 3)
207
+ }
208
+
209
+ function escapeRegExp(value) {
210
+ return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
211
+ }
212
+
213
+ function exactTargetBinding(message, target) {
214
+ const normalized = normalizeText(message)
215
+ for (const alias of targetAliases(target).sort((left, right) => right.length - left.length)) {
216
+ const pattern = new RegExp(`(^|[^\\p{L}\\p{N}])${escapeRegExp(alias)}([^\\p{L}\\p{N}]|$)`, 'iu')
217
+ if (pattern.test(normalized)) return alias
218
+ }
219
+ return null
220
+ }
221
+
222
+ function exactAliasOccurrences(message, alias) {
223
+ const normalized = normalizeText(message)
224
+ const pattern = new RegExp(
225
+ `(^|[^\\p{L}\\p{N}])(${escapeRegExp(alias)})(?=[^\\p{L}\\p{N}]|$)`,
226
+ 'giu',
227
+ )
228
+ return [...normalized.matchAll(pattern)].length
229
+ }
230
+
231
+ function referenceOnlyTargetBinding(clause, binding) {
232
+ if (exactAliasOccurrences(clause, binding) !== 1) return false
233
+ const alias = escapeRegExp(binding)
234
+ return [
235
+ new RegExp(`(?:參考|對照|比照|仿照)\\s*(?:這個|該)?\\s*${alias}(?:\\b|$)`, 'iu'),
236
+ new RegExp(`${alias}.{0,20}(?:僅供參考|作為參考|作為範例|當作參考|當作範例|當成參考|當成範例|是參考|是範例|是基準)`, 'iu'),
237
+ new RegExp(`\\b(?:refer(?:ring)?\\s+to|compare(?:d)?\\s+(?:to|with))\\s+(?:the\\s+)?${alias}\\b`, 'iu'),
238
+ new RegExp(`\\buse\\s+(?:the\\s+)?${alias}\\s+as\\s+(?:a\\s+)?(?:reference|example|baseline|guide)\\b`, 'iu'),
239
+ new RegExp(`\\b${alias}\\s+(?:is|as)\\s+(?:a\\s+)?(?:reference|example|baseline|guide)\\b`, 'iu'),
240
+ new RegExp(`(?:以|把)?\\s*${alias}\\s*(?:作為|當作|當成|視為|為)\\s*(?:一個)?\\s*(?:參考|範例|基準)`, 'iu'),
241
+ ].some((pattern) => pattern.test(clause))
242
+ }
243
+
244
+ function actionableTargetBinding(clause, target) {
245
+ const binding = exactTargetBinding(clause, target)
246
+ return binding && !referenceOnlyTargetBinding(clause, binding) ? binding : null
247
+ }
248
+
249
+ const NO_WAIT_FOR_APPROVAL_PATTERNS = [
250
+ /(?:不要|無需|不必|不用|不需要)\s*(?:再)?\s*(?:等待|等)\s*(?:我|使用者|user)?\s*(?:的)?\s*(?:核准|批准|同意|確認|授權|回覆)/giu,
251
+ /\b(?:do\s+not|don't|dont|no\s+need\s+to)\s+wait\s+for\s+(?:my\s+|user\s+)?(?:approval|authorization|confirmation)\b/giu,
252
+ ]
253
+
254
+ function withoutNoWaitClauses(message) {
255
+ return NO_WAIT_FOR_APPROVAL_PATTERNS.reduce(
256
+ (text, pattern) => text.replace(pattern, ' '),
257
+ normalizeText(message),
258
+ )
259
+ }
260
+
261
+ const TARGET_DENIAL_PATTERNS = [
262
+ /(?:先|暫時|現在)?\s*(?:不要|別|不准|禁止|停止|暫停|擱置|取消)\s*(?:再|先|直接|馬上|立刻)?\s*(?:改|修改|變更|實作|執行|套用|採用|發布|推送|合併|做)/u,
263
+ /(?:不可以|不能|不可)\s*(?:再|直接)?\s*(?:改|修改|變更|做|執行|實作|採用|套用|發布)/u,
264
+ /(?:不|不要|別|不可|不准|禁止)\s*(?:再)?\s*(?:採用|使用)/u,
265
+ /(?:不要|別|不可|不准)\s*(?:再)?\s*(?:碰|動|觸碰)/u,
266
+ /(?:保持|維持|保留).{0,24}(?:不變|原樣)/u,
267
+ /(?:撤銷|撤回|取消).{0,16}(?:核准|批准|同意|決定|決策|授權|approval|authorization)/iu,
268
+ /(?:不同意|不核可|不批准|拒絕|駁回).{0,16}(?:方案|方向|修改|變更|決策)?/u,
269
+ /(?:方案|方向|做法).{0,8}(?:不好|不採用|不要|拒絕)/u,
270
+ /\b(?:do\s+not|don't|dont|must\s+not|stop|pause|hold|cancel|reject|revoke)\b.{0,24}\b(?:change|edit|modify|implement|apply|adopt|ship|release|decision|approval|authorization)\b/iu,
271
+ /\b(?:do\s+not|don't|dont|must\s+not|never)\s+(?:use|adopt)\b/iu,
272
+ /\b(?:do\s+not|don't|dont)\s+(?:touch|alter)\b/iu,
273
+ /\b(?:keep|leave|must\s+remain)\b.{0,24}\b(?:unchanged|as[-\s]+is)\b/iu,
274
+ ]
275
+
276
+ const TARGET_DISCUSSION_PATTERNS = [
277
+ /(?:是否|要不要|該不該|能不能|可不可以|怎麼想|先討論|先評估|提案|比稿)/u,
278
+ /[??]\s*$/u,
279
+ /\b(?:should\s+we|can\s+we|could\s+we|proposal|discuss|evaluate)\b/iu,
280
+ ]
281
+
282
+ /**
283
+ * 委託研究:user 先問「是否可以 X?」再說「仔細研究看怎樣最完美 / 照你建議」= 把該題交給 agent 依證據
284
+ * 收斂,不是等 user 拍板的未決題(2026-09-02;AGENTS.md「純工程不確定性由最高 certified model 收斂」)。
285
+ * 只有同一則訊息含委託語句時,問句 clause 才不算 discussion;單獨問句仍 fail closed(問句 ≠ 同意)。
286
+ */
287
+ const UI_DELEGATED_RESEARCH_PATTERNS = [
288
+ /(?:研究|評估|判斷)(?:看|一下)?.{0,40}(?:最完美|最美觀|最好|最佳|最有質感|最合適|最自然|怎樣|如何|怎麼做)/u,
289
+ /(?:照|依|按)\s*(?:你|妳)(?:的)?\s*(?:建議|判斷|專業)/u,
290
+ /反正\s*(?:你|妳).{0,12}(?:研究|處理|決定|判斷)/u,
291
+ /\b(?:research|figure\s+out|decide)\b.{0,32}\b(?:best|optimal|most\s+(?:polished|natural|refined))\b/iu,
292
+ ]
293
+
294
+ const TARGET_BINARY_QUESTION_PATTERNS = [
295
+ /(?:是否|要不要|該不該|能不能|可不可以)/u,
296
+ /\b(?:should\s+we|can\s+we|could\s+we)\b/iu,
297
+ ]
298
+
299
+ const TARGETLESS_SCOPE_DENIAL_PATTERNS = [
300
+ /^(?:actually\s*[,,]?\s*)?(?:stop|cancel|hold|pause)(?:\s+(?:that|it))?[.!。!]*$/iu,
301
+ /\b(?:actually\s*[,,]?\s*)?(?:do\s+not|don't|dont)\s+(?:do|proceed\s+with)\s+(?:that|it)\b/iu,
302
+ /^(?:先|暫時|現在)?\s*(?:不要了|別做了|不要做了|停止|暫停|取消)[。!!]*$/u,
303
+ ]
304
+
305
+ const UI_DECISION_MARKERS = [
306
+ /\b(?:ui|ux|user-visible|product\s+semantics?|design\s+intent|component\s+contract|information\s+architecture|workflow|navigation|visual(?:\s+hierarchy)?|layout|spacing|padding|margin|gap|color|colour|typography|width|height|size|hover|focus|active|animation|transition|interaction|behavior|behaviour|content\s+semantics?|copy|label|icon|radius|shadow|border|opacity|variant|design\s+(?:token|rule)|state\s+machine|a11y|accessibility|wcag|aria|keyboard|disabled)\b/iu,
307
+ /(?:介面|界面|使用者可感知|產品語意|設計意圖|元件契約|資訊架構|工作流程|導覽|視覺(?:層級)?|外觀|樣式|佈局|布局|間距|留白|顏色|色彩|配色|色系|紅色|藍色|綠色|紫色|漸層|漣漪|光圈|字體排印|尺寸|大小|寬度|高度|懸停|焦點|動畫|節奏|轉場|互動|行為|內容語意|文案|標籤|圖示|標誌|logo|圓角|陰影|邊框|透明度|變體|設計 (?:token|規則)|狀態機|無障礙|可及性|鍵盤|停用)/u,
308
+ ]
309
+
310
+ const UI_OPERATION_MARKERS = [
311
+ /\b(?:className|style|css|tailwind|padding|margin|gap|color|background|width|height|hover|focus|animation|transition|opacity|border|shadow|radius|variant|disabled|tabIndex|role)\b/iu,
312
+ /\b(?:onClick|onChange|onSubmit|onKeyDown|onKeyUp|onPointerDown|onPointerUp|onDrag|onDrop|navigate|router|route|href|placeholder|aria-[a-z-]+|label|copy|textContent)\b/iu,
313
+ /\b(?:navigation|navigationFlow|workflow|informationArchitecture|visualHierarchy|typography|fontFamily|fontSize|fontWeight|lineHeight|letterSpacing|userVisible|userFacingStatus|statusLabel|contentSemantics|componentContract|designToken|designRule)\b/iu,
314
+ />[^<>{}\r\n][^<>{}\r\n]*</u,
315
+ /(?:使用者可感知|產品語意|設計意圖|元件契約|資訊架構|工作流程|導覽|視覺層級|樣式|顏色|字體排印|間距|留白|佈局|布局|尺寸|懸停|動畫|互動|內容語意|文案|圖示|圓角|陰影|邊框|設計規則)/u,
316
+ ]
317
+
318
+ const HUMAN_ONLY_OPERATION_MARKERS = [
319
+ /\b(?:complete|perform|approve|confirm)\b.{0,32}\b(?:interactive\s+login|mfa|2fa|oauth\s+consent|organization\s+owner\s+confirmation|billing\s+confirmation)\b/iu,
320
+ /(?:完成|執行|核准|確認).{0,24}(?:互動式登入|登入驗證|MFA|2FA|OAuth\s*同意|組織擁有者確認|帳務確認)/iu,
321
+ /\b(?:paste|reveal|print|extract|provide)\b.{0,32}\b(?:secret|credential|token|api\s+key|private\s+key)\b/iu,
322
+ /(?:貼上|揭露|輸出|擷取|提供).{0,24}(?:秘密|憑證內容|token|API\s*key|私鑰)/iu,
323
+ /\b(?:purchase|buy|enable)\b.{0,32}\b(?:paid\s+api|extra\s+credits?|additional\s+spend|new\s+subscription)\b/iu,
324
+ /(?:購買|啟用).{0,24}(?:付費 API|額外 credits?|額外費用|新訂閱)/iu,
325
+ /\b(?:accept|sign|make)\b.{0,32}\b(?:legal\s+terms|contract|business\s+commitment)\b/iu,
326
+ /(?:接受|簽署|做出).{0,24}(?:法律條款|合約|商業承諾)/u,
327
+ ]
328
+
329
+ const DESTRUCTIVE_OR_BYPASS_OPERATION_MARKERS = [
330
+ /\bgit\s+push\b[^\r\n]*\s--force(?:-with-lease)?\b/iu,
331
+ /\bgit\s+(?:reset\s+--hard|clean\s+-[a-z]*f[a-z]*)\b/iu,
332
+ /\b(?:bypass|disable|weaken|lower|remove)\b.{0,48}\b(?:required\s+checks?|branch\s+protection|rulesets?|hard\s+gates?)\b/iu,
333
+ /(?:繞過|停用|削弱|降低|移除).{0,32}(?:required checks?|branch protection|ruleset|hard gate|必要檢查|分支保護)/iu,
334
+ ]
335
+
336
+ const ENGINEERING_INTENT_PATTERNS = [
337
+ /\b(?:bug|bugfix|fix|repair|correct|refactor|test|testing|governance|infra|infrastructure|remediation|regression|root\s+cause|type\s+error|typescript|compile|build|ci|hook|parser|schema|drift|ssot|source-level|a11y|accessibility|wcag|conformance|alignment|mechanical|synchroni[sz]e|restore|parity)\b/iu,
338
+ /(?:修 bug|修復|修正|除錯|重構|測試|治理|基礎設施|修補|回歸|根因|型別錯誤|編譯|建置|鉤子|解析器|結構描述|漂移|單一來源|原始碼修正|無障礙|可及性|符合|遵循|對齊|同步|機械|還原|恢復|一致性)/u,
339
+ ]
340
+
341
+ // Source bytes can look visual even when the requested action is a pure engineering
342
+ // remediation (for example, restoring an existing hover token or correcting aria-expanded).
343
+ // Only an exact target-bound remediation scope may use that authority; generic engineering
344
+ // delegation must never authorize an otherwise-unresolved product/UI/UX choice.
345
+ const REMEDIATION_ACTION_PATTERNS = [
346
+ /\b(?:bugfix|fix|repair|correct|refactor|remediat(?:e|ion)|regression|align|alignment|conform|conformance|synchroni[sz]e|restore|mechanical|implement)\b/iu,
347
+ /(?:修 bug|修復|修正|除錯|重構|修補|回歸|對齊|同步|機械|還原|恢復|符合|遵循|實作|落地)/u,
348
+ ]
349
+
350
+ const EXISTING_REQUIREMENT_PATTERNS = [
351
+ /\b(?:existing|current|canonical|ssot|spec(?:ification)?|contract|baseline|documented|defined|approved|established)\b/iu,
352
+ /(?:既有|現有|目前|canonical|SSOT|規格|契約|基準|已記錄|已定義|已核准|已拍板|已確立)/u,
353
+ ]
354
+
355
+ const UNRESOLVED_UI_CHOICE_PATTERNS = [
356
+ /(?:還是|二選一|選哪(?:個|一個|種)|哪(?:個|一個|種).{0,12}(?:比較好|較好|更好)|何者)/u,
357
+ /(?:由你|你來|自行|agent).{0,16}(?:選擇|決定|拍板|判斷)/iu,
358
+ /(?:請|讓)?\s*(?:你|agent).{0,16}(?:選|挑|決定|拍板).{0,16}(?:最佳|最好|最適合)/iu,
359
+ /(?:選|挑).{0,12}(?:最佳|最好|最適合).{0,12}(?:顏色|色彩|方案|選項|樣式|版型)/u,
360
+ /\b(?:which|versus|vs\.?|trade-?off|choose\s+for\s+me|decide\s+for\s+me)\b/iu,
361
+ /\b(?:choose|select|pick|decide).{0,20}\b(?:best|optimal|most\s+suitable)\b/iu,
362
+ ]
363
+
364
+ const UI_HUMAN_DECISION_RESERVATION_PATTERNS = [
365
+ /(?:未經|除非).{0,16}(?:我|使用者).{0,16}(?:拍板|核准|批准|同意|決定|選擇)/u,
366
+ /(?:不得|禁止|不准|不可).{0,16}(?:由)?(?:你|agent|自行).{0,16}(?:選擇|決定|拍板|判斷)/iu,
367
+ /(?:不得|禁止|不准|不可|不要).{0,24}(?:改變|修改|變更|重寫).{0,16}(?:ui|ux|產品語意|設計語意|ssot)/iu,
368
+ /\b(?:unless|without)\b.{0,24}\b(?:my|user|human)\b.{0,24}\b(?:approval|decision|choice|sign[-\s]*off)\b/iu,
369
+ /\b(?:must\s+not|may\s+not|cannot)\b.{0,24}\b(?:you|agent)\b.{0,24}\b(?:choose|select|decide)\b/iu,
370
+ /\b(?:must\s+not|may\s+not|do\s+not)\b.{0,24}\b(?:change|modify|rewrite)\b.{0,24}\b(?:ui|ux|product\s+semantics?|ssot)\b/iu,
371
+ ]
372
+
373
+ function uiHumanReservedClauses(message) {
374
+ const reserved = new Set()
375
+ let listIsHumanReserved = false
376
+ for (const rawLine of normalizedUnicodeText(message).split(/\r?\n/u)) {
377
+ const line = rawLine.replaceAll(/\s+/g, ' ').trim()
378
+ if (!line) continue
379
+ const isListItem = /^[-*]\s+/u.test(line)
380
+ if (isListItem) {
381
+ if (listIsHumanReserved) {
382
+ for (const clause of messageClauses(line)) reserved.add(clause)
383
+ }
384
+ continue
385
+ }
386
+ listIsHumanReserved = /[::]\s*$/u.test(line)
387
+ && matchesAny(UI_HUMAN_DECISION_RESERVATION_PATTERNS, line)
388
+ if (listIsHumanReserved) {
389
+ for (const clause of messageClauses(line)) reserved.add(clause)
390
+ }
391
+ }
392
+ return reserved
393
+ }
394
+
395
+ const NON_AUTHORITATIVE_UI_STATEMENT_PATTERNS = [
396
+ /(?:不代表|並非|不是).{0,20}(?:我的)?\s*(?:決定|決策|核准|批准|同意|授權|選擇)/u,
397
+ /(?:僅|只)\s*(?:是)?\s*(?:引用|引述|轉述|參考|別人(?:的)?建議|他人(?:的)?建議)/u,
398
+ /(?:下面|以下).{0,16}(?:別人|他人|第三方|reviewer|審查者).{0,16}(?:建議|提案|說法)/iu,
399
+ /(?:reviewer|審查者|別人|他人|第三方).{0,16}(?:說|表示|寫道|建議|提議|said|says?|wrote|suggested|proposed)/iu,
400
+ /\b(?:not\s+my\s+(?:decision|approval|authorization)|not\s+an?\s+(?:decision|approval|authorization)|someone\s+else'?s\s+(?:suggestion|proposal))\b/iu,
401
+ ]
402
+
403
+ const TENTATIVE_OR_CONDITIONAL_UI_PATTERNS = [
404
+ /(?:還在|正在|先)?\s*(?:考慮|評估|思考|猶豫|未決定|尚未決定|暫定|提議|建議)/u,
405
+ /(?:也許|或許|可能|大概|傾向)/u,
406
+ /(?:如果|若|假如|倘若|除非|只要|等到).{0,64}(?:就|才|再|則)/u,
407
+ /(?:等|待).{0,32}(?:同意|核准|批准|確認|完成|發生|到位)(?:後|之後|再)/u,
408
+ /\b(?:considering|still\s+considering|thinking\s+about|maybe|perhaps|tentative|proposed|if|unless|provided\s+that|subject\s+to)\b/iu,
409
+ ]
410
+
411
+ const GENERIC_CONTINUATION_PATTERNS = [
412
+ /^(?:go\s+ahead|continue|proceed|carry\s+on|do\s+it|繼續|繼續做|照做|開始吧|執行吧|做吧|全部做完)[.!。!]*$/iu,
413
+ ]
414
+
415
+ const ENGINEERING_TARGET_PATTERNS = [
416
+ /(?:^|\/)(?:hooks?|tests?|scripts?|infra|governance)(?:\/|$)/iu,
417
+ /(?:^|\/)[^/]*\.(?:test|spec)\.[^/]+$/iu,
418
+ ]
419
+
420
+ const GOVERNANCE_ACTION_FAMILIES = [
421
+ 'protected-git-delivery',
422
+ 'external-activation',
423
+ 'github-reconciliation',
424
+ 'release-train',
425
+ 'consumer-bootstrap',
426
+ 'consumer-control-plane-update',
427
+ 'fleet-rollout',
428
+ 'runtime-certification',
429
+ 'rollback-recovery',
430
+ ]
431
+ const GOVERNANCE_ACTION_TARGET = new RegExp(
432
+ `^governance-action/v1/(${GOVERNANCE_ACTION_FAMILIES.join('|')})/sha256:([a-f0-9]{64})/sha256:([a-f0-9]{64})$`,
433
+ 'u',
434
+ )
435
+
436
+ function governanceActionTarget(target, operationEvidenceSha256) {
437
+ if (!target.startsWith('governance-action/')) return null
438
+ const match = target.match(GOVERNANCE_ACTION_TARGET)
439
+ if (!match) return { status: 'invalid' }
440
+ if (match[3] !== operationEvidenceSha256) {
441
+ return { status: 'operation-digest-mismatch' }
442
+ }
443
+ return {
444
+ status: 'valid',
445
+ family: match[1],
446
+ authorityDigest: match[2],
447
+ }
448
+ }
449
+
450
+ const STANDING_ENGINEERING_DELEGATION_PATTERNS = [
451
+ /(?:所有|任何|一切|全部).{0,48}(?:engineering|bug|refactor|test|governance|infra|工程|修復|重構|測試|治理|基礎設施)/iu,
452
+ /\b(?:all|any)\b.{0,48}\b(?:engineering|bugs?|refactors?|tests?|governance|infra(?:structure)?|remediation)\b/iu,
453
+ ]
454
+
455
+ const DELEGATED_AUTHORITY_SCOPES = Object.freeze([
456
+ 'consumer-template-adoption',
457
+ 'engineering-execution',
458
+ 'external-activation',
459
+ 'github-configuration',
460
+ 'mechanical-approved-ssot-projection',
461
+ 'package-release',
462
+ 'protected-git-delivery',
463
+ 'rollback-recovery',
464
+ 'rollout',
465
+ 'runtime-certification',
466
+ 'testing-and-harness',
467
+ ])
468
+ const HUMAN_ONLY_AUTHORITY_SCOPES = Object.freeze([
469
+ 'account-holder-platform-action',
470
+ 'credential-reference-required',
471
+ 'legal-account-organization-business-decision',
472
+ 'plan-external-spend',
473
+ 'product-ui-ux-decision',
474
+ ])
475
+ const CURRENT_OPERATION_SCOPE = 'current-target-operation'
476
+ const PRODUCT_UI_UX_CHANGE_SCOPE = 'product-ui-ux-change'
477
+ const AUTHORITY_SCOPE_PATTERNS = Object.freeze([
478
+ ['consumer-template-adoption', [
479
+ /\b(?:consumer|template|wm\s+onboarding|bootstrap|adoption)\b/iu,
480
+ /(?:消費者|範本|模板|WM\s*導入|採用)/u,
481
+ ]],
482
+ ['engineering-execution', [
483
+ /\b(?:source|code|implementation|refactor|bug\s*fix|adapter|hook|rule|schema|runner)\b/iu,
484
+ /(?:原始碼|程式碼|實作|重構|修復|轉接器|鉤子|規則|結構描述|執行器)/u,
485
+ ]],
486
+ ['external-activation', [
487
+ /\b(?:external\s+activation|managed\s+activation)\b/iu,
488
+ /(?:外部啟用|受管啟用)/u,
489
+ ]],
490
+ ['github-configuration', [
491
+ /\b(?:github\s+apps?|rulesets?|branch\s+protection|required\s+checks?|github\s+environments?|repository\s+settings?)\b/iu,
492
+ /(?:GitHub\s*應用程式|分支保護|必要檢查|儲存庫設定)/u,
493
+ ]],
494
+ ['mechanical-approved-ssot-projection', [
495
+ /\b(?:mechanical(?:ly)?|generation|generate|projection|sync(?:hroni[sz]e)?)\b.{0,64}\b(?:approved|existing|canonical|ssot)\b/iu,
496
+ /(?:機械式|生成|投影|同步).{0,48}(?:已核准|既有|現有|canonical|SSOT)/u,
497
+ ]],
498
+ ['package-release', [
499
+ /\b(?:release|publish|npm|package|tag)\b/iu,
500
+ /(?:發布|發佈|套件|標籤)/u,
501
+ ]],
502
+ ['protected-git-delivery', [
503
+ /\b(?:push|pull\s+request|pr|merge|protected[-\s]+git[-\s]+delivery)\b/iu,
504
+ /(?:推送|合併請求|拉取請求|合併)/u,
505
+ ]],
506
+ ['rollback-recovery', [
507
+ /\b(?:rollback|forward\s+recovery|recovery)\b/iu,
508
+ /(?:回滾|復原|恢復)/u,
509
+ ]],
510
+ ['rollout', [
511
+ /\b(?:rollout|fleet|canary|soak)\b/iu,
512
+ /(?:推出|全量|灰度|金絲雀)/u,
513
+ ]],
514
+ ['runtime-certification', [
515
+ /\b(?:runtime\s+certification|certif(?:y|ication))\b/iu,
516
+ /(?:執行環境認證|運行環境認證)/u,
517
+ ]],
518
+ ['testing-and-harness', [
519
+ /\b(?:tests?|testing|harness|clean-room)\b/iu,
520
+ /(?:測試|驗證框架|乾淨環境)/u,
521
+ ]],
522
+ ])
523
+ const EXCLUSIVE_ENGINEERING_DELEGATION_PATTERNS = [
524
+ /(?:只|僅|僅限)\s*(?:委派|授權)/u,
525
+ /\b(?:only\s+delegate|delegate\s+only|only\s+authori[sz]e|authori[sz]e\s+only)\b/iu,
526
+ ]
527
+ const ENGINEERING_SCOPE_DENIAL_PATTERNS = [
528
+ /(?:不授權|未授權|沒有授權)/u,
529
+ /(?:不得|禁止|不准|不可|不要)\s*(?:再|自行|直接|開始|啟動)?\s*(?:執行|進行|建立|修改|變更|發布|發佈|推送|合併|回滾|推出|使用|採用)/u,
530
+ /\b(?:not\s+authori[sz]ed|not\s+delegated|deny|denied)\b/iu,
531
+ /\b(?:do\s+not|don't|dont|must\s+not)\s+(?:execute|perform|start|create|modify|change|publish|push|merge|roll\s*out|use|adopt)\b/iu,
532
+ ]
533
+
534
+ const ENGINEERING_SAFETY_GUARDRAIL_PATTERNS = [
535
+ /(?:不得|禁止|不准|不可|不要).{0,48}(?:覆蓋既有版本|重發同一版本|違反\s*npm\s*immutable[-\s]*version)/iu,
536
+ /\b(?:must\s+not|do\s+not|don't|dont)\b.{0,48}\b(?:overwrite\s+an?\s+existing\s+version|republish\s+the\s+same\s+version|violate\s+npm\s+immutable[-\s]*version)\b/iu,
537
+ ]
538
+
539
+ const ENGINEERING_NON_REVOCATION_PATTERNS = [
540
+ /(?:不得|禁止|不准|不可|不要).{0,40}(?:描述|標記|視為|宣稱).{0,40}(?:尚未發布|未發布|不可使用|不可用|未完成|被阻擋)/iu,
541
+ /(?:不得|禁止|不准|不可|不要).{0,40}(?:阻止|阻擋|延後|推遲).{0,64}(?:發布|發佈|使用|採用|setup:all|sync-all|template|consumer|WM)/iu,
542
+ /\b(?:must\s+not|do\s+not|don't|dont)\b.{0,40}\b(?:describe|label|mark|treat|claim)\b.{0,40}\b(?:unreleased|unavailable|incomplete|blocked)\b/iu,
543
+ /\b(?:must\s+not|do\s+not|don't|dont)\b.{0,40}\b(?:block|delay|defer)\b.{0,64}\b(?:release|publish|use|adoption|setup:all|sync-all|template|consumer)\b/iu,
544
+ ]
545
+
546
+ const UI_DIRECTIVE_PATTERNS = [
547
+ /(?:同意|核可|批准|拍板|採用|採納|選擇|決定|改成|改為|換成|換掉|替換|改掉|調整|更新|設為|保留|移除|新增|使用)/u,
548
+ /(?:方案|選項|option)\s*[A-Za-z0-9一二三四五六七八九十]+/iu,
549
+ /\b(?:approve|approved|adopt|choose|select|change\s+to|set\s+to|keep|remove|add|use)\b/iu,
550
+ ]
551
+
552
+ const OPERATION_SHA256_PATTERN =
553
+ /\boperation(?:\s+evidence)?\s+sha(?:-?256)?\s*[:=]\s*([a-f0-9]{64})\b/iu
554
+
555
+ const GLOBAL_UI_SCOPE_PATTERN =
556
+ /(?:(?:所有|任何|全部)\s*(?:產品|design-system|DS)?\s*(?:ui|ux|介面|界面|視覺|互動|產品設計)|\b(?:all|every)\s+(?:product\s+|design-system\s+)?(?:ui|ux|visual|interaction)s?\b)/iu
557
+
558
+ const GLOBAL_REMEDIATION_SCOPE_PATTERN =
559
+ /(?:(?:修復|修正|對齊|同步|還原|恢復|實作|落地).{0,32}(?:所有|任何|全部).{0,48}(?:bug|缺陷|回歸|無障礙|可及性|a11y|accessibility|既有|現有|SSOT|規格)|(?:所有|全部|任何).{0,24}(?:規格書|規格|SSOT|既有|現有|已拍板|已核准).{0,64}(?:實作|落地|修復|修正|對齊|同步)|\b(?:fix|repair|correct|align|synchroni[sz]e|restore|implement)\s+(?:all|every)\b.{0,48}\b(?:bugs?|regressions?|a11y|accessibility|existing|documented|canonical|ssot|spec)\b|\b(?:implement|build)\s+(?:the\s+)?(?:entire|whole|full|all\s+of\s+the)\s+(?:approved\s+|ratified\s+)?spec(?:ification)?\b)/iu
560
+
561
+ const RESOLVED_UI_CHOICE_PATTERNS = [
562
+ /(?:顏色|色彩|樣式|版型|間距|尺寸|大小|文案|標籤|圖示|互動|行為).{0,24}(?:改成|改為|換成|設為|採用|選擇|決定|統一)/u,
563
+ /(?:改成|改為|換成|設為|採用|選擇|決定|統一).{0,24}(?:顏色|色彩|紅色|藍色|綠色|樣式|版型|間距|尺寸|大小|文案|標籤|圖示|互動|行為)/u,
564
+ /\b(?:change|set|switch|standardi[sz]e|choose|select|adopt)\b.{0,32}\b(?:color|colour|style|layout|spacing|size|copy|label|icon|interaction|behavio(?:u)?r)\b/iu,
565
+ /\b(?:color|colour|style|layout|spacing|size|copy|label|icon|interaction|behavio(?:u)?r)\b.{0,32}\b(?:change|set|switch|standardi[sz]e|choose|select|adopt)\b/iu,
566
+ ]
567
+
568
+ function matchesAny(patterns, text) {
569
+ return patterns.some((pattern) => pattern.test(text))
570
+ }
571
+
572
+ function containsUnsafeAuthorityUnicode(value) {
573
+ return /[\p{Cf}\p{Default_Ignorable_Code_Point}]/u.test(String(value || ''))
574
+ }
575
+
576
+ function mentionedAuthorityScopes(clause) {
577
+ const forcePushOnly = /\bforce(?:d)?[-\s]+push\b/iu.test(clause)
578
+ || /(?:強制推送|強推)/u.test(clause)
579
+ return AUTHORITY_SCOPE_PATTERNS
580
+ .filter(([scope, patterns]) => (
581
+ !(scope === 'protected-git-delivery' && forcePushOnly)
582
+ && matchesAny(patterns, clause)
583
+ ))
584
+ .map(([scope]) => scope)
585
+ }
586
+
587
+ function engineeringScopeDelegation(message) {
588
+ const clauses = messageBlocks(message).flatMap((block) => messageClauses(block))
589
+ const exclusiveClauses = clauses.filter((clause) => (
590
+ matchesAny(EXCLUSIVE_ENGINEERING_DELEGATION_PATTERNS, clause)
591
+ ))
592
+ const explicitlyAllowed = new Set(
593
+ exclusiveClauses.flatMap((clause) => mentionedAuthorityScopes(clause)),
594
+ )
595
+ const explicitlyDenied = new Set()
596
+ for (const clause of clauses) {
597
+ const denialText = withoutNoWaitClauses(clause)
598
+ if (matchesAny(ENGINEERING_SAFETY_GUARDRAIL_PATTERNS, denialText)) continue
599
+ if (matchesAny(ENGINEERING_NON_REVOCATION_PATTERNS, denialText)) continue
600
+ if (!matchesAny(ENGINEERING_SCOPE_DENIAL_PATTERNS, denialText)) continue
601
+ for (const scope of mentionedAuthorityScopes(denialText)) explicitlyDenied.add(scope)
602
+ }
603
+ const allowed = new Set(
604
+ exclusiveClauses.length ? explicitlyAllowed : DELEGATED_AUTHORITY_SCOPES,
605
+ )
606
+ for (const scope of explicitlyDenied) allowed.delete(scope)
607
+ const denied = new Set(explicitlyDenied)
608
+ if (exclusiveClauses.length) {
609
+ for (const scope of DELEGATED_AUTHORITY_SCOPES) {
610
+ if (!allowed.has(scope)) denied.add(scope)
611
+ }
612
+ }
613
+ return {
614
+ allowedScopes: [...allowed].sort(),
615
+ deniedOrAmbiguousScopes: [...denied].sort(),
616
+ }
617
+ }
618
+
619
+ function requestedAuthorityScope(classification, operationText = '') {
620
+ if (classification.decisionDomain === 'product-ui-ux') return PRODUCT_UI_UX_CHANGE_SCOPE
621
+ const governanceAction = String(classification.target || '').match(GOVERNANCE_ACTION_TARGET)
622
+ if (governanceAction) {
623
+ return {
624
+ 'consumer-bootstrap': 'consumer-template-adoption',
625
+ 'consumer-control-plane-update': 'consumer-template-adoption',
626
+ 'external-activation': 'external-activation',
627
+ 'fleet-rollout': 'rollout',
628
+ 'github-reconciliation': 'github-configuration',
629
+ 'protected-git-delivery': 'protected-git-delivery',
630
+ 'release-train': 'package-release',
631
+ 'rollback-recovery': 'rollback-recovery',
632
+ 'runtime-certification': 'runtime-certification',
633
+ }[governanceAction[1]]
634
+ }
635
+ if (matchesAny(
636
+ AUTHORITY_SCOPE_PATTERNS.find(([scope]) => (
637
+ scope === 'mechanical-approved-ssot-projection'
638
+ ))[1],
639
+ operationText,
640
+ )) {
641
+ return 'mechanical-approved-ssot-projection'
642
+ }
643
+ if (/(?:^|\/)(?:tests?|__tests__)(?:\/|$)|\.(?:test|spec)\.[^/]+$/iu.test(
644
+ String(classification.target || ''),
645
+ ) || /\b(?:tests?|testing|harness|clean-room)\b/iu.test(operationText)
646
+ || /(?:測試|驗證框架|乾淨環境)/u.test(operationText)) {
647
+ return 'testing-and-harness'
648
+ }
649
+ return 'engineering-execution'
650
+ }
651
+
652
+ function scopedClassification(classification, { message = '', operationText = '' } = {}) {
653
+ const delegation = engineeringScopeDelegation(message)
654
+ const allowedScopes = [...delegation.allowedScopes]
655
+ const requestedScope = requestedAuthorityScope(classification, operationText)
656
+ if (classification.decision === 'approved'
657
+ && classification.reasonCode === 'TARGET_BOUND_UI_UX_DECISION_APPROVED') {
658
+ allowedScopes.unshift('approved-ui-ux-implementation')
659
+ }
660
+ const deniedOrAmbiguousScopes = new Set(delegation.deniedOrAmbiguousScopes)
661
+ let decision = classification.decision
662
+ let decisionDomain = classification.decisionDomain
663
+ let reasonCode = classification.reasonCode
664
+ if (decision === 'approved'
665
+ && requestedScope !== PRODUCT_UI_UX_CHANGE_SCOPE
666
+ && !delegation.allowedScopes.includes(requestedScope)) {
667
+ decision = 'blocked'
668
+ decisionDomain = 'engineering-remediation'
669
+ reasonCode = 'ENGINEERING_SCOPE_DENIED_OR_NOT_DELEGATED'
670
+ deniedOrAmbiguousScopes.add(requestedScope)
671
+ }
672
+ if (decision === 'blocked') {
673
+ deniedOrAmbiguousScopes.add(
674
+ classification.reasonCode === 'TARGET_BOUND_DENIAL_OR_REVOCATION'
675
+ ? CURRENT_OPERATION_SCOPE
676
+ : classification.decisionDomain === 'product-ui-ux'
677
+ ? PRODUCT_UI_UX_CHANGE_SCOPE
678
+ : requestedScope || CURRENT_OPERATION_SCOPE,
679
+ )
680
+ }
681
+ const finalAllowedScopes = allowedScopes.filter((scope) => (
682
+ !deniedOrAmbiguousScopes.has(scope)
683
+ ))
684
+ return {
685
+ ...classification,
686
+ decision,
687
+ decisionDomain,
688
+ reasonCode,
689
+ allowedScopes: [...new Set(finalAllowedScopes)].sort(),
690
+ humanOnlyScopes: [...HUMAN_ONLY_AUTHORITY_SCOPES],
691
+ deniedOrAmbiguousScopes: [...deniedOrAmbiguousScopes].sort(),
692
+ }
693
+ }
694
+
695
+ function remediationDecision(message, target) {
696
+ const normalized = normalizeText(message)
697
+ // 問句/暫定/轉述不構成授權(M36:問句 ≠ 同意;引用 ≠ 決定)。
698
+ if (matchesAny(NON_AUTHORITATIVE_UI_STATEMENT_PATTERNS, normalized)) return null
699
+ let latest = null
700
+ for (const clause of messageClauses(normalized)) {
701
+ if (matchesAny(TARGET_DISCUSSION_PATTERNS, clause)) continue
702
+ const binding = actionableTargetBinding(clause, target)
703
+ ?? (GLOBAL_REMEDIATION_SCOPE_PATTERN.test(clause)
704
+ ? 'global-engineering-remediation-scope'
705
+ : null)
706
+ if (!binding || !matchesAny(REMEDIATION_ACTION_PATTERNS, clause)) continue
707
+ const scopeIsUiOrExistingRequirement = matchesAny(UI_DECISION_MARKERS, clause)
708
+ || matchesAny(EXISTING_REQUIREMENT_PATTERNS, clause)
709
+ if (!scopeIsUiOrExistingRequirement) continue
710
+ if (matchesAny(UNRESOLVED_UI_CHOICE_PATTERNS, clause)) continue
711
+ latest = { binding, message: normalized, clause }
712
+ }
713
+ return latest
714
+ }
715
+
716
+ function toolOperations(records, hookInput, target) {
717
+ const operations = []
718
+ const add = (toolName, input) => {
719
+ if (!['Edit', 'Write', 'MultiEdit'].includes(toolName) || !input || typeof input !== 'object') return
720
+ const candidates = [input, ...(Array.isArray(input.edits) ? input.edits : [])]
721
+ for (const candidate of candidates) {
722
+ const path = candidate?.file_path ?? candidate?.path ?? input.file_path ?? input.path ?? ''
723
+ if (normalizeTarget(path) !== normalizeTarget(target)) continue
724
+ operations.push(JSON.stringify(candidate))
725
+ }
726
+ }
727
+ for (const record of records) {
728
+ const message = record?.message || record
729
+ for (const item of Array.isArray(message?.content) ? message.content : []) {
730
+ if (item?.type === 'tool_use') add(item.name, item.input)
731
+ }
732
+ }
733
+ if (hookInput) add(hookInput.tool_name, hookInput.tool_input)
734
+ return operations.join('\n')
735
+ }
736
+
737
+ function targetDecision(message, target, operationEvidenceSha256 = '') {
738
+ const normalized = normalizeText(message)
739
+ const clauses = messageClauses(message)
740
+ const humanReservedClauses = uiHumanReservedClauses(message)
741
+ const messageCannotAuthorizeProduct =
742
+ matchesAny(NON_AUTHORITATIVE_UI_STATEMENT_PATTERNS, normalized)
743
+ || matchesAny(TENTATIVE_OR_CONDITIONAL_UI_PATTERNS, normalized)
744
+ const candidates = []
745
+ const delegatedResearch = clauses.some((clause) => matchesAny(UI_DELEGATED_RESEARCH_PATTERNS, clause))
746
+ for (const clause of clauses) {
747
+ const targetBinding = actionableTargetBinding(clause, target)
748
+ const globalUiBinding = GLOBAL_UI_SCOPE_PATTERN.test(clause) ? 'global-ui-scope' : null
749
+ const binding = targetBinding ?? globalUiBinding
750
+ if (!binding) continue
751
+ const denialText = withoutNoWaitClauses(clause)
752
+ // 「要不要改」contains the bytes「不要改」but is a question, not a revocation.
753
+ if (targetBinding && matchesAny(TARGET_BINARY_QUESTION_PATTERNS, clause)) {
754
+ // 同訊息已委託研究 → 問句是交辦題,不是未決題;不成為 discussion 也不成為 approval。
755
+ if (delegatedResearch && !matchesAny(TARGET_DENIAL_PATTERNS, denialText)) continue
756
+ candidates.push({ kind: 'discussion', binding, message: normalized, clause })
757
+ continue
758
+ }
759
+ if (matchesAny(TARGET_DENIAL_PATTERNS, denialText)) {
760
+ if (!targetBinding
761
+ && globalUiBinding
762
+ && (matchesAny(UI_HUMAN_DECISION_RESERVATION_PATTERNS, clause)
763
+ || humanReservedClauses.has(clause))) continue
764
+ candidates.push({ kind: 'denied', binding, message: normalized, clause })
765
+ continue
766
+ }
767
+ if (matchesAny(UI_DECISION_MARKERS, clause)
768
+ && matchesAny(UNRESOLVED_UI_CHOICE_PATTERNS, clause)
769
+ && !matchesAny(UI_HUMAN_DECISION_RESERVATION_PATTERNS, clause)
770
+ && !humanReservedClauses.has(clause)) {
771
+ candidates.push({ kind: 'discussion', binding, message: normalized, clause })
772
+ continue
773
+ }
774
+ if (targetBinding && matchesAny(TARGET_DISCUSSION_PATTERNS, clause)) {
775
+ if (delegatedResearch && !matchesAny(TARGET_DENIAL_PATTERNS, denialText)) continue
776
+ candidates.push({ kind: 'discussion', binding, message: normalized, clause })
777
+ continue
778
+ }
779
+ if (targetBinding
780
+ && matchesAny(UI_DECISION_MARKERS, clause)
781
+ && matchesAny(UI_DIRECTIVE_PATTERNS, clause)) {
782
+ if (messageCannotAuthorizeProduct) {
783
+ candidates.push({
784
+ kind: 'discussion',
785
+ binding,
786
+ message: normalized,
787
+ clause,
788
+ })
789
+ continue
790
+ }
791
+ const declaredOperationSha256 = clause.match(OPERATION_SHA256_PATTERN)?.[1]?.toLowerCase() ?? ''
792
+ // 2026-08-04 user verbatim「我在這裡說可以就是可以,就是授權給你」: an in-chat clause that
793
+ // names the exact target and says yes IS the approval. Requiring the user to also quote an
794
+ // operation digest was the same removed-ceremony family as the per-PR Ed25519 signature
795
+ // (torn out in 835b519e) — cryptographic ritual with no consumer, punishing the owner for
796
+ // approving in plain language. A digest is now optional corroboration: absent → approved on
797
+ // the target-bound directive alone; present but wrong → still fails closed as an explicit
798
+ // mismatch, because quoting a digest that does not match the pending operation is a real
799
+ // contradiction, not a missing formality.
800
+ candidates.push({
801
+ kind: !declaredOperationSha256
802
+ || declaredOperationSha256 === operationEvidenceSha256.toLowerCase()
803
+ ? 'approved'
804
+ : 'operation-binding-mismatch',
805
+ binding,
806
+ message: normalized,
807
+ clause,
808
+ declaredOperationSha256,
809
+ })
810
+ }
811
+ }
812
+ const messageScopeBinding = clauses
813
+ .map((clause) => actionableTargetBinding(clause, target))
814
+ .find(Boolean)
815
+ ?? (GLOBAL_REMEDIATION_SCOPE_PATTERN.test(normalized) ? 'open-global-remediation-scope' : null)
816
+ let activeChoiceDomain = null
817
+ let messageHasUnresolvedUiChoice = false
818
+ for (const block of messageBlocks(message)) {
819
+ for (const clause of messageClauses(block)) {
820
+ const clauseHasUiIntent = matchesAny(UI_DECISION_MARKERS, clause)
821
+ const clauseHasExplicitUiScope = clauseHasUiIntent
822
+ && (
823
+ actionableTargetBinding(clause, target)
824
+ || GLOBAL_UI_SCOPE_PATTERN.test(clause)
825
+ )
826
+ const clauseHasEngineeringScope = matchesAny(ENGINEERING_INTENT_PATTERNS, clause)
827
+ || matchesAny(STANDING_ENGINEERING_DELEGATION_PATTERNS, clause)
828
+ if (clauseHasExplicitUiScope) activeChoiceDomain = 'product-ui-ux'
829
+ else if (clauseHasEngineeringScope) activeChoiceDomain = 'engineering-remediation'
830
+ if (matchesAny(UNRESOLVED_UI_CHOICE_PATTERNS, clause)
831
+ && !matchesAny(UI_HUMAN_DECISION_RESERVATION_PATTERNS, clause)
832
+ && !humanReservedClauses.has(clause)
833
+ && (clauseHasUiIntent || activeChoiceDomain === 'product-ui-ux')) {
834
+ messageHasUnresolvedUiChoice = true
835
+ break
836
+ }
837
+ }
838
+ if (messageHasUnresolvedUiChoice) break
839
+ }
840
+ const globalRemediationCarriesResolvedUiChoice =
841
+ GLOBAL_REMEDIATION_SCOPE_PATTERN.test(normalized)
842
+ && matchesAny(UI_DECISION_MARKERS, normalized)
843
+ && matchesAny(RESOLVED_UI_CHOICE_PATTERNS, normalized)
844
+ if (matchesAny(TARGETLESS_SCOPE_DENIAL_PATTERNS, withoutNoWaitClauses(normalized))) {
845
+ return {
846
+ kind: 'denied',
847
+ binding: messageScopeBinding ?? 'active-scope',
848
+ message: normalized,
849
+ clause: normalized,
850
+ }
851
+ }
852
+ if (messageHasUnresolvedUiChoice || globalRemediationCarriesResolvedUiChoice) {
853
+ return {
854
+ kind: 'discussion',
855
+ binding: messageScopeBinding ?? 'active-scope',
856
+ message: normalized,
857
+ clause: normalized,
858
+ }
859
+ }
860
+ return candidates.find((candidate) => candidate.kind === 'denied')
861
+ ?? candidates.find((candidate) => candidate.kind === 'discussion')
862
+ ?? candidates.find((candidate) => candidate.kind === 'operation-binding-mismatch')
863
+ ?? candidates.at(-1)
864
+ ?? null
865
+ }
866
+
867
+ function engineeringScopeDecision(message, target) {
868
+ const normalized = normalizeText(message)
869
+ let latest = null
870
+ for (const clause of messageClauses(normalized)) {
871
+ const binding = actionableTargetBinding(clause, target)
872
+ if (!binding || !matchesAny(ENGINEERING_INTENT_PATTERNS, clause)) continue
873
+ latest = { binding, message: normalized, clause }
874
+ }
875
+ return latest
876
+ }
877
+
878
+ function classifyLatestAuthorizationUnscoped(message, {
879
+ target = '',
880
+ operationText = '',
881
+ userMessages = [message],
882
+ } = {}) {
883
+ const rawMessage = String(message || '')
884
+ const normalized = normalizeText(message)
885
+ const latestUserMessageSha256 = createHash('sha256').update(normalized).digest('hex')
886
+ const normalizedTarget = normalizeTarget(target)
887
+ const operationEvidenceSha256 = createHash('sha256').update(operationText).digest('hex')
888
+ const latestHasEngineeringIntent = matchesAny(ENGINEERING_INTENT_PATTERNS, normalized)
889
+ const latestHasUiIntent = matchesAny(UI_DECISION_MARKERS, normalized)
890
+ const latestIsGenericContinuation = matchesAny(GENERIC_CONTINUATION_PATTERNS, normalized)
891
+ && !latestHasEngineeringIntent
892
+ && !latestHasUiIntent
893
+ let activeScopeRawMessage = rawMessage
894
+ let activeScopeMessage = normalized
895
+ if (latestIsGenericContinuation) {
896
+ activeScopeRawMessage = ''
897
+ activeScopeMessage = ''
898
+ for (const item of userMessages.slice(0, -1).reverse()) {
899
+ const candidate = normalizeText(item)
900
+ if (matchesAny(GENERIC_CONTINUATION_PATTERNS, candidate)) continue
901
+ activeScopeRawMessage = String(item || '')
902
+ activeScopeMessage = candidate
903
+ break
904
+ }
905
+ }
906
+ const activeTargetDecision = targetDecision(
907
+ activeScopeRawMessage,
908
+ normalizedTarget,
909
+ operationEvidenceSha256,
910
+ )
911
+ const activeRemediationDecision = remediationDecision(activeScopeMessage, normalizedTarget)
912
+ const activeEngineeringScope = engineeringScopeDecision(activeScopeMessage, normalizedTarget)
913
+ const activeTargetBinding = activeTargetDecision?.binding
914
+ ?? activeRemediationDecision?.binding
915
+ ?? activeEngineeringScope?.binding
916
+ ?? null
917
+ const activeDecisionMessageSha256 = activeScopeMessage
918
+ ? createHash('sha256').update(activeScopeMessage).digest('hex')
919
+ : null
920
+ const base = {
921
+ decisionDomain: 'unknown',
922
+ target: normalizedTarget || null,
923
+ targetBinding: activeTargetBinding,
924
+ latestUserMessageSha256,
925
+ decisionMessageSha256: activeTargetBinding ? activeDecisionMessageSha256 : null,
926
+ operationEvidenceSha256,
927
+ }
928
+ if (!normalized) {
929
+ return { ...base, decision: 'blocked', reasonCode: 'NO_USER_MESSAGE' }
930
+ }
931
+ if (!normalizedTarget) {
932
+ return { ...base, decision: 'blocked', reasonCode: 'NO_EXACT_DECISION_TARGET' }
933
+ }
934
+ if (containsUnsafeAuthorityUnicode(target)) {
935
+ return {
936
+ ...base,
937
+ targetBinding: null,
938
+ decision: 'blocked',
939
+ reasonCode: 'UNSAFE_UNICODE_DECISION_TARGET',
940
+ }
941
+ }
942
+ if (containsUnsafeAuthorityUnicode(activeScopeRawMessage)) {
943
+ return {
944
+ ...base,
945
+ decisionDomain: 'product-ui-ux',
946
+ targetBinding: null,
947
+ decision: 'blocked',
948
+ reasonCode: 'UNSAFE_UNICODE_AUTHORITY_TEXT',
949
+ }
950
+ }
951
+ // A generic continuation inherits exactly the most recent non-generic scope. It never searches
952
+ // farther back for an older target after a denial, revocation, or move to another target.
953
+ if (activeTargetDecision?.kind === 'denied') {
954
+ return {
955
+ ...base,
956
+ decisionDomain: 'product-ui-ux',
957
+ decision: 'blocked',
958
+ reasonCode: 'TARGET_BOUND_DENIAL_OR_REVOCATION',
959
+ }
960
+ }
961
+ if (activeTargetDecision?.kind === 'discussion') {
962
+ return {
963
+ ...base,
964
+ decisionDomain: 'product-ui-ux',
965
+ decision: 'blocked',
966
+ reasonCode: 'TARGET_BOUND_DISCUSSION_OR_QUESTION',
967
+ }
968
+ }
969
+ if (activeTargetDecision?.kind === 'operation-binding-mismatch') {
970
+ return {
971
+ ...base,
972
+ decisionDomain: 'product-ui-ux',
973
+ decision: 'blocked',
974
+ reasonCode: 'EXACT_UI_UX_OPERATION_BINDING_MISSING_OR_MISMATCH',
975
+ }
976
+ }
977
+ const targetIsEngineering = matchesAny(ENGINEERING_TARGET_PATTERNS, normalizedTarget)
978
+ const hasOperationEvidence = normalizeText(operationText).length > 0
979
+ const operationHasUiIntent = matchesAny(UI_OPERATION_MARKERS, operationText)
980
+ const operationRequiresHumanAction = matchesAny(HUMAN_ONLY_OPERATION_MARKERS, operationText)
981
+ const operationIsDestructiveOrBypass = matchesAny(
982
+ DESTRUCTIVE_OR_BYPASS_OPERATION_MARKERS,
983
+ operationText,
984
+ )
985
+ const governanceAction = governanceActionTarget(normalizedTarget, operationEvidenceSha256)
986
+ const activeHasUiIntent = matchesAny(UI_DECISION_MARKERS, activeScopeMessage)
987
+ const activeHasStandingEngineeringDelegation =
988
+ matchesAny(STANDING_ENGINEERING_DELEGATION_PATTERNS, activeScopeMessage)
989
+ if (operationRequiresHumanAction) {
990
+ return {
991
+ ...base,
992
+ decision: 'blocked',
993
+ reasonCode: 'HUMAN_ONLY_ACTION_REQUIRED',
994
+ }
995
+ }
996
+ if (operationIsDestructiveOrBypass) {
997
+ return {
998
+ ...base,
999
+ decisionDomain: 'engineering-remediation',
1000
+ decision: 'blocked',
1001
+ reasonCode: 'ENGINEERING_SAFETY_GATE_REQUIRED',
1002
+ }
1003
+ }
1004
+ if (governanceAction?.status === 'invalid') {
1005
+ return {
1006
+ ...base,
1007
+ decisionDomain: 'engineering-remediation',
1008
+ decision: 'blocked',
1009
+ reasonCode: 'EXTERNAL_ENGINEERING_TARGET_INVALID',
1010
+ }
1011
+ }
1012
+ if (governanceAction?.status === 'operation-digest-mismatch') {
1013
+ return {
1014
+ ...base,
1015
+ decisionDomain: 'engineering-remediation',
1016
+ decision: 'blocked',
1017
+ reasonCode: 'EXTERNAL_ENGINEERING_OPERATION_DIGEST_MISMATCH',
1018
+ }
1019
+ }
1020
+ // A product decision is operation-specific. Remediation authority is deliberately separate:
1021
+ // it grants the engineering domain but does not attest that the operation conforms to SSOT.
1022
+ if (hasOperationEvidence && activeTargetDecision?.kind === 'approved') {
1023
+ return {
1024
+ ...base,
1025
+ decisionDomain: 'product-ui-ux',
1026
+ decision: 'approved',
1027
+ reasonCode: 'TARGET_BOUND_UI_UX_DECISION_APPROVED',
1028
+ }
1029
+ }
1030
+ if (hasOperationEvidence && activeRemediationDecision) {
1031
+ return {
1032
+ ...base,
1033
+ decisionDomain: 'engineering-remediation',
1034
+ targetBinding: activeRemediationDecision.binding,
1035
+ decisionMessageSha256: activeDecisionMessageSha256,
1036
+ decision: 'approved',
1037
+ reasonCode: 'ENGINEERING_UI_LOOKING_REMEDIATION_AUTHORITY',
1038
+ }
1039
+ }
1040
+ if ((targetIsEngineering || governanceAction?.status === 'valid')
1041
+ && hasOperationEvidence
1042
+ && !operationHasUiIntent) {
1043
+ return {
1044
+ ...base,
1045
+ decisionDomain: 'engineering-remediation',
1046
+ targetBinding: activeEngineeringScope?.binding ?? null,
1047
+ decisionMessageSha256: activeDecisionMessageSha256,
1048
+ decision: 'approved',
1049
+ reasonCode: 'ENGINEERING_REMEDIATION_NO_HUMAN_APPROVAL',
1050
+ }
1051
+ }
1052
+ if (hasOperationEvidence
1053
+ && !operationHasUiIntent
1054
+ && (activeEngineeringScope || activeHasStandingEngineeringDelegation)) {
1055
+ return {
1056
+ ...base,
1057
+ decisionDomain: 'engineering-remediation',
1058
+ targetBinding: activeEngineeringScope?.binding ?? null,
1059
+ decisionMessageSha256: activeDecisionMessageSha256,
1060
+ decision: 'approved',
1061
+ reasonCode: 'ENGINEERING_OPERATION_STANDING_AUTHORIZATION',
1062
+ }
1063
+ }
1064
+ if (activeHasUiIntent || operationHasUiIntent) {
1065
+ return {
1066
+ ...base,
1067
+ decisionDomain: 'product-ui-ux',
1068
+ decision: 'blocked',
1069
+ reasonCode: activeTargetBinding
1070
+ ? 'TARGET_BOUND_UI_UX_CHOICE_MISSING'
1071
+ : 'EXACT_UI_UX_TARGET_BINDING_MISSING',
1072
+ }
1073
+ }
1074
+ return {
1075
+ ...base,
1076
+ decision: 'blocked',
1077
+ reasonCode: 'UNKNOWN_POTENTIAL_UI_UX_DECISION',
1078
+ }
1079
+ }
1080
+
1081
+ function classifyOperationAuthorizationUnscoped({
1082
+ target = '',
1083
+ operationText = '',
1084
+ } = {}) {
1085
+ const normalizedTarget = normalizeTarget(target)
1086
+ const normalizedOperation = normalizeText(operationText)
1087
+ const operationEvidenceSha256 = createHash('sha256').update(operationText).digest('hex')
1088
+ const base = {
1089
+ decisionDomain: 'unknown',
1090
+ target: normalizedTarget || null,
1091
+ targetBinding: null,
1092
+ latestUserMessageSha256: createHash('sha256').update('').digest('hex'),
1093
+ decisionMessageSha256: null,
1094
+ operationEvidenceSha256,
1095
+ }
1096
+ if (!normalizedTarget) {
1097
+ return { ...base, decision: 'blocked', reasonCode: 'NO_EXACT_DECISION_TARGET' }
1098
+ }
1099
+ if (containsUnsafeAuthorityUnicode(target)) {
1100
+ return {
1101
+ ...base,
1102
+ targetBinding: null,
1103
+ decision: 'blocked',
1104
+ reasonCode: 'UNSAFE_UNICODE_DECISION_TARGET',
1105
+ }
1106
+ }
1107
+ if (!normalizedOperation) {
1108
+ return { ...base, decision: 'blocked', reasonCode: 'NO_OPERATION_EVIDENCE' }
1109
+ }
1110
+ if (matchesAny(HUMAN_ONLY_OPERATION_MARKERS, normalizedOperation)) {
1111
+ return {
1112
+ ...base,
1113
+ decision: 'blocked',
1114
+ reasonCode: 'HUMAN_ONLY_ACTION_REQUIRED',
1115
+ }
1116
+ }
1117
+ if (matchesAny(DESTRUCTIVE_OR_BYPASS_OPERATION_MARKERS, normalizedOperation)) {
1118
+ return {
1119
+ ...base,
1120
+ decisionDomain: 'engineering-remediation',
1121
+ decision: 'blocked',
1122
+ reasonCode: 'ENGINEERING_SAFETY_GATE_REQUIRED',
1123
+ }
1124
+ }
1125
+ if (matchesAny(UI_OPERATION_MARKERS, normalizedOperation)) {
1126
+ return {
1127
+ ...base,
1128
+ decisionDomain: 'product-ui-ux',
1129
+ decision: 'blocked',
1130
+ reasonCode: 'EXACT_UI_UX_TARGET_BINDING_MISSING',
1131
+ }
1132
+ }
1133
+ const governanceAction = governanceActionTarget(normalizedTarget, operationEvidenceSha256)
1134
+ if (governanceAction?.status === 'invalid') {
1135
+ return {
1136
+ ...base,
1137
+ decisionDomain: 'engineering-remediation',
1138
+ decision: 'blocked',
1139
+ reasonCode: 'EXTERNAL_ENGINEERING_TARGET_INVALID',
1140
+ }
1141
+ }
1142
+ if (governanceAction?.status === 'operation-digest-mismatch') {
1143
+ return {
1144
+ ...base,
1145
+ decisionDomain: 'engineering-remediation',
1146
+ decision: 'blocked',
1147
+ reasonCode: 'EXTERNAL_ENGINEERING_OPERATION_DIGEST_MISMATCH',
1148
+ }
1149
+ }
1150
+ if (matchesAny(ENGINEERING_TARGET_PATTERNS, normalizedTarget)
1151
+ || governanceAction?.status === 'valid') {
1152
+ return {
1153
+ ...base,
1154
+ decisionDomain: 'engineering-remediation',
1155
+ decision: 'approved',
1156
+ reasonCode: 'ENGINEERING_OPERATION_STANDING_AUTHORIZATION',
1157
+ }
1158
+ }
1159
+ return {
1160
+ ...base,
1161
+ decision: 'blocked',
1162
+ reasonCode: 'PROVIDER_AUTHORITY_EVIDENCE_REQUIRED',
1163
+ }
1164
+ }
1165
+
1166
+ export function classifyLatestAuthorization(message, options = {}) {
1167
+ return scopedClassification(
1168
+ classifyLatestAuthorizationUnscoped(message, options),
1169
+ { message, operationText: options.operationText },
1170
+ )
1171
+ }
1172
+
1173
+ export function classifyOperationAuthorization(options = {}) {
1174
+ return scopedClassification(
1175
+ classifyOperationAuthorizationUnscoped(options),
1176
+ { operationText: options.operationText },
1177
+ )
1178
+ }
1179
+
1180
+ // 2026-08-04 user verbatim「我在這裡說可以就是可以,就是授權給你」: when the owner's LATEST message
1181
+ // is an explicit blanket delegation, it authorizes the pending operation without re-stating the
1182
+ // target — the owner is answering the assistant's immediately-pending exact ask. Scoped to the
1183
+ // latest message only, so a stale delegation never lingers as standing authority; any later denial
1184
+ // or question supersedes it through the normal classifier.
1185
+ const BLANKET_DELEGATION_PATTERNS = [
1186
+ /說\s*可以\s*就是\s*可以/u,
1187
+ /可以\s*就是\s*可以/u,
1188
+ /就是\s*授權(?:給你)?/u,
1189
+ /授權\s*給\s*你/u,
1190
+ ]
1191
+
1192
+ // 2026-08-11 recognizer gap fix: a LATEST user message that OPENS with a bare approval token
1193
+ // (「可以,做到完整完美並自行驗證…」) is the same delegation speech-act as「說可以就是可以」——
1194
+ // the owner is answering the assistant's immediately-pending exact ask. Canonical authority:
1195
+ // AGENTS.md Decision Authority「最新一則 user 訊息的明確 blanket 授權即核准當下 pending 的
1196
+ // exact 提案」. Recognized ONLY when the message opens with the approval token AND contains no
1197
+ // denial, no question/discussion marker, and no tentative/conditional hedge (fail-closed on all).
1198
+ const LEADING_BARE_APPROVAL_PATTERN = /^(?:可以|好的|沒問題|就這樣做|照做)(?:$|[\s,,。!!])/u
1199
+ // 2026-08-12 勘誤:曾短暫加入「完成祈使句」型(把所有任務全部做完…),旋即被測試庫
1200
+ // Test 7d / Test 17 打回 —— 該測試契約是刻意防線:泛用完成語**不得**回溯授權任意 UI 修改
1201
+ //(無 pending 提案時它就是空白支票)。維持嚴格:UI 授權要嘛 exact target 綁定,要嘛
1202
+ // 「可以」型直答 pending 提案;完成祈使句只授權「續跑已授權的事」。
1203
+
1204
+ function isLeadingBareApprovalDelegation(latestNormalized) {
1205
+ return LEADING_BARE_APPROVAL_PATTERN.test(latestNormalized)
1206
+ && !matchesAny(TARGET_DISCUSSION_PATTERNS, latestNormalized)
1207
+ && !matchesAny(TENTATIVE_OR_CONDITIONAL_UI_PATTERNS, latestNormalized)
1208
+ }
1209
+
1210
+ export function authorizationEvidence(transcriptPath, {
1211
+ target = '',
1212
+ hookInput = null,
1213
+ } = {}) {
1214
+ const state = transcriptState(transcriptPath)
1215
+ const operationText = toolOperations(state.turnRecords, hookInput, target)
1216
+ const latestNormalized = normalizeText(state.latestUserMessage)
1217
+ const selection = state.latestAskUserSelection
1218
+ if (selection) {
1219
+ // A structured AskUserQuestion selection is the user saying yes to one exact presented
1220
+ // choice. Approval semantics come exclusively from the harness-authored answer text
1221
+ // (a decline, an "Other" answer that questions or forbids, or any tentative phrasing
1222
+ // falls through to the ordinary fail-closed flow). Target binding may come from the
1223
+ // answer or from the assistant proposal the question was attached to — binding alone
1224
+ // grants nothing without the genuine selection event.
1225
+ const answerNormalized = normalizeText(selection.answerText)
1226
+ const answerIsClean = answerNormalized
1227
+ && !matchesAny(TARGET_DENIAL_PATTERNS, withoutNoWaitClauses(answerNormalized))
1228
+ && !matchesAny(TARGET_DISCUSSION_PATTERNS, answerNormalized)
1229
+ && !matchesAny(TENTATIVE_OR_CONDITIONAL_UI_PATTERNS, answerNormalized)
1230
+ const bindingAlias = answerIsClean
1231
+ ? exactTargetBinding(`${selection.answerText}\n${selection.proposalText}`, target)
1232
+ : null
1233
+ if (bindingAlias) {
1234
+ return {
1235
+ schemaVersion: 1,
1236
+ kind: 'latest-user-design-authorization',
1237
+ decision: 'approved',
1238
+ reasonCode: 'ASK_USER_QUESTION_SELECTION',
1239
+ decisionDomain: 'product-ui-ux',
1240
+ target: target ? normalizeTarget(target) : null,
1241
+ targetBinding: `ask-user-question-selection:${bindingAlias}`,
1242
+ latestUserMessageSha256: createHash('sha256').update(latestNormalized).digest('hex'),
1243
+ decisionMessageSha256: createHash('sha256').update(answerNormalized).digest('hex'),
1244
+ operationEvidenceSha256: createHash('sha256').update(operationText).digest('hex'),
1245
+ }
1246
+ }
1247
+ }
1248
+ if ((matchesAny(BLANKET_DELEGATION_PATTERNS, latestNormalized)
1249
+ || isLeadingBareApprovalDelegation(latestNormalized))
1250
+ && !matchesAny(TARGET_DENIAL_PATTERNS, withoutNoWaitClauses(latestNormalized))) {
1251
+ return {
1252
+ schemaVersion: 1,
1253
+ kind: 'latest-user-design-authorization',
1254
+ decision: 'approved',
1255
+ reasonCode: 'USER_BLANKET_DELEGATION',
1256
+ decisionDomain: 'product-ui-ux',
1257
+ target: target ? normalizeTarget(target) : null,
1258
+ targetBinding: 'user-blanket-delegation',
1259
+ latestUserMessageSha256: createHash('sha256').update(latestNormalized).digest('hex'),
1260
+ decisionMessageSha256: createHash('sha256').update(latestNormalized).digest('hex'),
1261
+ operationEvidenceSha256: createHash('sha256').update(operationText).digest('hex'),
1262
+ }
1263
+ }
1264
+ return {
1265
+ schemaVersion: 1,
1266
+ kind: 'latest-user-design-authorization',
1267
+ ...classifyLatestAuthorization(state.latestUserMessage, {
1268
+ target,
1269
+ operationText,
1270
+ userMessages: state.userMessages,
1271
+ }),
1272
+ }
1273
+ }
1274
+
1275
+ if (import.meta.url === pathToFileURL(process.argv[1] || '').href) {
1276
+ const transcriptPath = argument('--transcript')
1277
+ const target = argument('--target')
1278
+ const readHookInput = process.argv.includes('--hook-input-stdin')
1279
+ const operationOnly = process.argv.includes('--operation-only')
1280
+ let evidence
1281
+ try {
1282
+ if (!target) throw new Error('missing --target')
1283
+ let hookInput = null
1284
+ if (readHookInput) {
1285
+ hookInput = JSON.parse(readFileSync(0, 'utf8'))
1286
+ if (!hookInput || typeof hookInput !== 'object' || Array.isArray(hookInput)) {
1287
+ throw new Error('hook input is invalid')
1288
+ }
1289
+ }
1290
+ if (operationOnly) {
1291
+ if (!hookInput) throw new Error('operation-only classification requires --hook-input-stdin')
1292
+ evidence = {
1293
+ schemaVersion: 1,
1294
+ kind: 'latest-user-design-authorization',
1295
+ ...classifyOperationAuthorization({
1296
+ target,
1297
+ operationText: toolOperations([], hookInput, target),
1298
+ }),
1299
+ }
1300
+ } else {
1301
+ if (!transcriptPath) throw new Error('missing --transcript')
1302
+ evidence = authorizationEvidence(transcriptPath, { target, hookInput })
1303
+ }
1304
+ } catch (error) {
1305
+ evidence = {
1306
+ schemaVersion: 1,
1307
+ kind: 'latest-user-design-authorization',
1308
+ decision: 'blocked',
1309
+ reasonCode: 'TRANSCRIPT_UNAVAILABLE_OR_INVALID',
1310
+ decisionDomain: 'unknown',
1311
+ target: target ? normalizeTarget(target) : null,
1312
+ targetBinding: null,
1313
+ latestUserMessageSha256: null,
1314
+ decisionMessageSha256: null,
1315
+ operationEvidenceSha256: null,
1316
+ error: error.message,
1317
+ }
1318
+ }
1319
+ process.stdout.write(`${JSON.stringify(evidence)}\n`)
1320
+ process.exit(evidence.decision === 'approved' ? 0 : 2)
1321
+ }