@litfamily/lithermes 1.0.8 → 1.0.9

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 (652) hide show
  1. package/README.md +299 -13
  2. package/README_Ko-KR.md +300 -14
  3. package/assets/lithermes-plugin/README.md +17 -6
  4. package/assets/lithermes-plugin/__init__.py +96 -21
  5. package/assets/lithermes-plugin/core.py +15 -6
  6. package/assets/lithermes-plugin/core_commands.py +140 -28
  7. package/assets/lithermes-plugin/core_contexts.py +88 -15
  8. package/assets/lithermes-plugin/core_contract.py +118 -9
  9. package/assets/lithermes-plugin/core_routing.py +197 -8
  10. package/assets/lithermes-plugin/deliverable_hedge_guard.py +378 -357
  11. package/assets/lithermes-plugin/diagnostics.py +53 -2
  12. package/assets/lithermes-plugin/humanizer_detector.py +348 -0
  13. package/assets/lithermes-plugin/humanizer_ko_metrics.py +108 -0
  14. package/assets/lithermes-plugin/humanizer_office.py +18 -0
  15. package/assets/lithermes-plugin/lit_mark.py +1 -1
  16. package/assets/lithermes-plugin/motion_receipts.py +80 -0
  17. package/assets/lithermes-plugin/payload-version.json +2240 -64
  18. package/assets/lithermes-plugin/plugin.yaml +1 -1
  19. package/assets/lithermes-plugin/rules/bundled-rules/lit-humanizer.md +14 -0
  20. package/assets/lithermes-plugin/skills/autoconference/assets/report_template.md +2 -1
  21. package/assets/lithermes-plugin/skills/autoconference/modes/ship/SKILL.md +11 -8
  22. package/assets/lithermes-plugin/skills/autoresearch/modes/ship/type-checklists.md +2 -2
  23. package/assets/lithermes-plugin/skills/browser-drive/ORIGIN.json +17 -0
  24. package/assets/lithermes-plugin/skills/browser-drive/SKILL.md +41 -16
  25. package/assets/lithermes-plugin/skills/browser-drive/scripts/capability_probe.py +122 -10
  26. package/assets/lithermes-plugin/skills/frontend-ui-ux/SKILL.md +45 -13
  27. package/assets/lithermes-plugin/skills/frontend-ui-ux/examples/phase-3-readme-ab/README.md +51 -0
  28. package/assets/lithermes-plugin/skills/frontend-ui-ux/references/README.md +44 -0
  29. package/assets/lithermes-plugin/skills/frontend-ui-ux/references/adaptive-layout.md +34 -62
  30. package/assets/lithermes-plugin/skills/frontend-ui-ux/references/brand-and-imagery.md +22 -70
  31. package/assets/lithermes-plugin/skills/frontend-ui-ux/references/complete-contract.md +18 -4
  32. package/assets/lithermes-plugin/skills/frontend-ui-ux/references/composition.md +27 -78
  33. package/assets/lithermes-plugin/skills/frontend-ui-ux/references/craft-floor.md +74 -0
  34. package/assets/lithermes-plugin/skills/frontend-ui-ux/references/creative-directions.md +25 -69
  35. package/assets/lithermes-plugin/skills/frontend-ui-ux/references/evidence-review.md +18 -97
  36. package/assets/lithermes-plugin/skills/frontend-ui-ux/references/implementation-platforms.md +23 -83
  37. package/assets/lithermes-plugin/skills/frontend-ui-ux/references/inclusive-interface.md +22 -70
  38. package/assets/lithermes-plugin/skills/frontend-ui-ux/references/interaction-motion.md +34 -68
  39. package/assets/lithermes-plugin/skills/frontend-ui-ux/references/motion-guide.md +62 -0
  40. package/assets/lithermes-plugin/skills/frontend-ui-ux/references/operating-lanes.md +14 -78
  41. package/assets/lithermes-plugin/skills/frontend-ui-ux/references/performance-delivery.md +22 -71
  42. package/assets/lithermes-plugin/skills/frontend-ui-ux/references/product-direction.md +17 -70
  43. package/assets/lithermes-plugin/skills/frontend-ui-ux/references/production.md +19 -7
  44. package/assets/lithermes-plugin/skills/frontend-ui-ux/references/redesign-playbook.md +23 -76
  45. package/assets/lithermes-plugin/skills/frontend-ui-ux/references/slop-register.md +69 -0
  46. package/assets/lithermes-plugin/skills/frontend-ui-ux/references/system-foundations.md +22 -67
  47. package/assets/lithermes-plugin/skills/frontend-ui-ux/references/visual-language.md +16 -72
  48. package/assets/lithermes-plugin/skills/frontend-ui-ux/references/visual-reconstruction.md +16 -81
  49. package/assets/lithermes-plugin/skills/frontend-ui-ux/resources/THIRD-PARTY-NOTICE.txt +15 -0
  50. package/assets/lithermes-plugin/skills/frontend-ui-ux/scripts/probe-page.js +311 -0
  51. package/assets/lithermes-plugin/skills/frontend-ui-ux/scripts/probe-rules.json +46 -0
  52. package/assets/lithermes-plugin/skills/frontend-ui-ux/scripts/probe.mjs +231 -0
  53. package/assets/lithermes-plugin/skills/lit-comprehend/SKILL.md +36 -25
  54. package/assets/lithermes-plugin/skills/lit-comprehend/references/artifact-template.md +45 -87
  55. package/assets/lithermes-plugin/skills/lit-comprehend/scripts/verify-explainer.py +3 -27
  56. package/assets/lithermes-plugin/skills/lit-diagram-drawer/NOTICE +33 -0
  57. package/assets/lithermes-plugin/skills/lit-diagram-drawer/SKILL.md +308 -0
  58. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-architecture-dark.html +1 -0
  59. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-architecture-full.html +1 -0
  60. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-architecture-light.html +1 -0
  61. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-bar-dark.html +1 -0
  62. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-bar-full.html +1 -0
  63. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-bar-light.html +1 -0
  64. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-beeswarm-dark.html +1 -0
  65. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-beeswarm-full.html +1 -0
  66. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-beeswarm-light.html +1 -0
  67. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-bubble-dark.html +1 -0
  68. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-bubble-full.html +1 -0
  69. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-bubble-light.html +1 -0
  70. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-bump-dark.html +1 -0
  71. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-bump-full.html +1 -0
  72. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-bump-light.html +1 -0
  73. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-data-flow-dark.html +1 -0
  74. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-data-flow-full.html +1 -0
  75. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-data-flow-light.html +1 -0
  76. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-datalake-dark.html +1 -0
  77. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-datalake-full.html +1 -0
  78. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-datalake-light.html +1 -0
  79. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-db-schema-dark.html +1 -0
  80. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-db-schema-full.html +1 -0
  81. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-db-schema-light.html +1 -0
  82. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-dependency-dark.html +1 -0
  83. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-dependency-full.html +1 -0
  84. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-dependency-light.html +1 -0
  85. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-deployment-dark.html +1 -0
  86. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-deployment-full.html +1 -0
  87. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-deployment-light.html +1 -0
  88. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-dp-integration-dark.html +1 -0
  89. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-dp-integration-full.html +1 -0
  90. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-dp-integration-light.html +1 -0
  91. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-dp-security-matrix-dark.html +1 -0
  92. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-dp-security-matrix-full.html +1 -0
  93. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-dp-security-matrix-light.html +1 -0
  94. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-er-dark.html +1 -0
  95. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-er-full.html +1 -0
  96. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-er-light.html +1 -0
  97. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-fishbone-dark.html +1 -0
  98. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-fishbone-full.html +1 -0
  99. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-fishbone-light.html +1 -0
  100. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-flowchart-dark.html +1 -0
  101. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-flowchart-full.html +1 -0
  102. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-flowchart-light.html +1 -0
  103. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-gantt-dark.html +1 -0
  104. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-gantt-full.html +1 -0
  105. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-gantt-light.html +1 -0
  106. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-heatmap-dark.html +1 -0
  107. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-heatmap-full.html +1 -0
  108. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-heatmap-light.html +1 -0
  109. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-high-level-dark.html +1 -0
  110. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-high-level-full.html +1 -0
  111. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-high-level-light.html +1 -0
  112. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-high-level-vertical-dark.html +1 -0
  113. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-high-level-vertical-full.html +1 -0
  114. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-high-level-vertical-light.html +1 -0
  115. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-import-drawio-dark.html +1 -0
  116. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-import-drawio-full.html +1 -0
  117. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-import-drawio-light.html +1 -0
  118. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-import-excalidraw-dark.html +1 -0
  119. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-import-excalidraw-full.html +1 -0
  120. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-import-excalidraw-light.html +1 -0
  121. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-import-mermaid-dark.html +1 -0
  122. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-import-mermaid-full.html +1 -0
  123. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-import-mermaid-light.html +1 -0
  124. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-it-state-dark.html +1 -0
  125. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-it-state-full.html +1 -0
  126. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-it-state-light.html +1 -0
  127. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-journey-dark.html +1 -0
  128. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-journey-full.html +1 -0
  129. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-journey-light.html +1 -0
  130. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-kanban-dark.html +1 -0
  131. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-kanban-full.html +1 -0
  132. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-kanban-light.html +1 -0
  133. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-layers-dark.html +1 -0
  134. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-layers-full.html +1 -0
  135. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-layers-light.html +1 -0
  136. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-line-dark.html +1 -0
  137. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-line-full.html +1 -0
  138. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-line-light.html +1 -0
  139. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-loop-dark.html +1 -0
  140. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-loop-full.html +1 -0
  141. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-loop-light.html +1 -0
  142. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-loop-terminal-dark.html +1 -0
  143. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-loop-terminal-full.html +1 -0
  144. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-loop-terminal-light.html +1 -0
  145. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-marimekko-dark.html +1 -0
  146. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-marimekko-full.html +1 -0
  147. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-marimekko-light.html +1 -0
  148. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-medallion-dark.html +1 -0
  149. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-medallion-full.html +1 -0
  150. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-medallion-light.html +1 -0
  151. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-nested-dark.html +1 -0
  152. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-nested-full.html +1 -0
  153. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-nested-light.html +1 -0
  154. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-org-chart-dark.html +1 -0
  155. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-org-chart-full.html +1 -0
  156. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-org-chart-light.html +1 -0
  157. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-paved-road-animated-dark.html +1 -0
  158. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-paved-road-animated-full.html +1 -0
  159. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-paved-road-animated-light.html +1 -0
  160. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-polar-dark.html +1 -0
  161. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-polar-full.html +1 -0
  162. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-polar-light.html +1 -0
  163. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-policy-trace-animated-dark.html +1 -0
  164. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-policy-trace-animated-full.html +1 -0
  165. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-policy-trace-animated-light.html +1 -0
  166. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-process-dark.html +1 -0
  167. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-process-full.html +1 -0
  168. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-process-light.html +1 -0
  169. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-pyramid-dark.html +1 -0
  170. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-pyramid-full.html +1 -0
  171. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-pyramid-light.html +1 -0
  172. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-quadrant-consultant-dark.html +1 -0
  173. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-quadrant-consultant-full.html +1 -0
  174. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-quadrant-consultant-light.html +1 -0
  175. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-quadrant-dark.html +1 -0
  176. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-quadrant-full.html +1 -0
  177. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-quadrant-light.html +1 -0
  178. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-queue-animated-dark.html +1 -0
  179. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-queue-animated-full.html +1 -0
  180. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-queue-animated-light.html +1 -0
  181. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-radar-dark.html +1 -0
  182. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-radar-full.html +1 -0
  183. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-radar-light.html +1 -0
  184. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-ridgeline-dark.html +1 -0
  185. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-ridgeline-full.html +1 -0
  186. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-ridgeline-light.html +1 -0
  187. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-sankey-dark.html +1 -0
  188. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-sankey-full.html +1 -0
  189. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-sankey-light.html +1 -0
  190. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-scatter-dark.html +1 -0
  191. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-scatter-full.html +1 -0
  192. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-scatter-light.html +1 -0
  193. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-sequence-dark.html +1 -0
  194. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-sequence-full.html +1 -0
  195. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-sequence-light.html +1 -0
  196. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-sequence-oauth-dark.html +1 -0
  197. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-sequence-oauth-full.html +1 -0
  198. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-sequence-oauth-light.html +1 -0
  199. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-slopegraph-dark.html +1 -0
  200. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-slopegraph-full.html +1 -0
  201. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-slopegraph-light.html +1 -0
  202. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-state-dark.html +1 -0
  203. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-state-full.html +1 -0
  204. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-state-lifecycle-dark.html +1 -0
  205. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-state-lifecycle-full.html +1 -0
  206. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-state-lifecycle-light.html +1 -0
  207. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-state-light.html +1 -0
  208. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-story-map-dark.html +1 -0
  209. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-story-map-full.html +1 -0
  210. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-story-map-light.html +1 -0
  211. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-streamgraph-dark.html +1 -0
  212. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-streamgraph-full.html +1 -0
  213. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-streamgraph-light.html +1 -0
  214. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-swimlane-dark.html +1 -0
  215. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-swimlane-full.html +1 -0
  216. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-swimlane-light.html +1 -0
  217. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-timeline-dark.html +1 -0
  218. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-timeline-full.html +1 -0
  219. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-timeline-light.html +1 -0
  220. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-tree-block-decomposition-dark.html +1 -0
  221. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-tree-block-decomposition-full.html +1 -0
  222. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-tree-block-decomposition-light.html +1 -0
  223. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-tree-dark.html +1 -0
  224. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-tree-full.html +1 -0
  225. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-tree-light.html +1 -0
  226. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-treemap-dark.html +1 -0
  227. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-treemap-full.html +1 -0
  228. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-treemap-light.html +1 -0
  229. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-uml-class-dark.html +1 -0
  230. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-uml-class-full.html +1 -0
  231. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-uml-class-light.html +1 -0
  232. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-venn-dark.html +1 -0
  233. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-venn-full.html +1 -0
  234. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-venn-light.html +1 -0
  235. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-wardley-dark.html +1 -0
  236. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-wardley-full.html +1 -0
  237. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-wardley-light.html +1 -0
  238. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-waterfall-dark.html +1 -0
  239. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-waterfall-full.html +1 -0
  240. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-waterfall-light.html +1 -0
  241. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/fonts/OFL.txt +94 -0
  242. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/fonts/PretendardVariable.woff2 +0 -0
  243. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/fonts/provenance.json +22 -0
  244. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/icons.html +231 -0
  245. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/index.html +1 -0
  246. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/licenses/devicon-MIT.txt +20 -0
  247. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/licenses/diagram-design-MIT.txt +21 -0
  248. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/licenses/log-z-MIT.txt +21 -0
  249. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/licenses/simple-icons-CC0.md +30 -0
  250. package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/licenses/tabler-MIT.txt +21 -0
  251. package/assets/lithermes-plugin/skills/lit-diagram-drawer/examples/01-service-architecture/after.html +1 -0
  252. package/assets/lithermes-plugin/skills/lit-diagram-drawer/examples/01-service-architecture/brief.md +33 -0
  253. package/assets/lithermes-plugin/skills/lit-diagram-drawer/examples/02-release-decision/after.html +1 -0
  254. package/assets/lithermes-plugin/skills/lit-diagram-drawer/examples/02-release-decision/brief.md +18 -0
  255. package/assets/lithermes-plugin/skills/lit-diagram-drawer/examples/03-data-retention/after.html +1 -0
  256. package/assets/lithermes-plugin/skills/lit-diagram-drawer/examples/03-data-retention/brief.md +19 -0
  257. package/assets/lithermes-plugin/skills/lit-diagram-drawer/examples/04-oauth-sequence/after.html +1 -0
  258. package/assets/lithermes-plugin/skills/lit-diagram-drawer/examples/04-oauth-sequence/brief.md +17 -0
  259. package/assets/lithermes-plugin/skills/lit-diagram-drawer/examples/05-review-lanes/after.html +1 -0
  260. package/assets/lithermes-plugin/skills/lit-diagram-drawer/examples/05-review-lanes/brief.md +17 -0
  261. package/assets/lithermes-plugin/skills/lit-diagram-drawer/examples/06-rollout-gates/after.html +1 -0
  262. package/assets/lithermes-plugin/skills/lit-diagram-drawer/examples/06-rollout-gates/brief.md +17 -0
  263. package/assets/lithermes-plugin/skills/lit-diagram-drawer/examples/07-deployment-boundary/after.html +1 -0
  264. package/assets/lithermes-plugin/skills/lit-diagram-drawer/examples/07-deployment-boundary/brief.md +19 -0
  265. package/assets/lithermes-plugin/skills/lit-diagram-drawer/examples/08-policy-traces/after.html +1 -0
  266. package/assets/lithermes-plugin/skills/lit-diagram-drawer/examples/08-policy-traces/brief.md +20 -0
  267. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/accessibility.md +37 -0
  268. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/export.md +29 -0
  269. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/import-drawio.md +21 -0
  270. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/import-excalidraw.md +14 -0
  271. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/import-mermaid.md +18 -0
  272. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/import-schema.md +28 -0
  273. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/korean-typography.md +34 -0
  274. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/motion.md +29 -0
  275. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/office-pptx-docx.md +40 -0
  276. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/output-spec.md +48 -0
  277. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/primitive-annotation.md +12 -0
  278. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/primitive-icons.md +21 -0
  279. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/primitive-sketchy.md +11 -0
  280. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/primitive-terminal.md +11 -0
  281. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/profiles.md +24 -0
  282. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/semantic-patterns.md +27 -0
  283. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/style-guide.md +67 -0
  284. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-architecture.md +51 -0
  285. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-bar.md +51 -0
  286. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-beeswarm.md +49 -0
  287. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-bubble.md +49 -0
  288. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-bump.md +49 -0
  289. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-catalog.json +1433 -0
  290. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-data-flow.md +51 -0
  291. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-datalake.md +49 -0
  292. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-db-schema.md +49 -0
  293. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-dependency.md +49 -0
  294. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-deployment.md +49 -0
  295. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-dp-integration.md +49 -0
  296. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-dp-security-matrix.md +49 -0
  297. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-er.md +49 -0
  298. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-fishbone.md +49 -0
  299. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-flowchart.md +49 -0
  300. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-gantt.md +49 -0
  301. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-heatmap.md +53 -0
  302. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-high-level-vertical.md +53 -0
  303. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-high-level.md +53 -0
  304. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-import-drawio.md +53 -0
  305. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-import-excalidraw.md +53 -0
  306. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-import-mermaid.md +53 -0
  307. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-it-state.md +54 -0
  308. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-journey.md +54 -0
  309. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-kanban.md +54 -0
  310. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-layers.md +54 -0
  311. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-line.md +54 -0
  312. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-loop-terminal.md +53 -0
  313. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-loop.md +54 -0
  314. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-marimekko.md +54 -0
  315. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-medallion.md +54 -0
  316. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-nested.md +59 -0
  317. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-org-chart.md +58 -0
  318. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-paved-road-animated.md +72 -0
  319. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-polar.md +67 -0
  320. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-policy-trace-animated.md +69 -0
  321. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-process.md +58 -0
  322. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-pyramid.md +59 -0
  323. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-quadrant-consultant.md +60 -0
  324. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-quadrant.md +57 -0
  325. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-queue-animated.md +63 -0
  326. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-radar.md +57 -0
  327. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-ridgeline.md +63 -0
  328. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-sankey.md +68 -0
  329. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-scatter.md +60 -0
  330. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-sequence-oauth.md +66 -0
  331. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-sequence.md +63 -0
  332. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-slopegraph.md +65 -0
  333. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-state-lifecycle.md +53 -0
  334. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-state.md +59 -0
  335. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-story-map.md +52 -0
  336. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-streamgraph.md +53 -0
  337. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-swimlane.md +52 -0
  338. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-timeline.md +52 -0
  339. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-tree-block-decomposition.md +57 -0
  340. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-tree.md +54 -0
  341. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-treemap.md +54 -0
  342. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-uml-class.md +52 -0
  343. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-venn.md +51 -0
  344. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-wardley.md +52 -0
  345. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-waterfall.md +54 -0
  346. package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/verifier-guide.md +31 -0
  347. package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/block-registry.mjs +43 -0
  348. package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/browser-version.mjs +12 -0
  349. package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/check-visible-text.py +12 -0
  350. package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/diagram_brief.py +192 -0
  351. package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/diagram_catalog.py +135 -0
  352. package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/diagram_checks.py +123 -0
  353. package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/diagram_cli.py +94 -0
  354. package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/diagram_geometry.py +130 -0
  355. package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/diagram_metrics.py +166 -0
  356. package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/diagram_quality.py +293 -0
  357. package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/diagram_quality_geometry.py +200 -0
  358. package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/diagram_records.py +205 -0
  359. package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/diagram_sequence.py +55 -0
  360. package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/doctor.mjs +24 -0
  361. package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/drawio_extract.py +209 -0
  362. package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/drawio_source.py +188 -0
  363. package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/excalidraw_extract.py +233 -0
  364. package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/excalidraw_support.py +64 -0
  365. package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/export.mjs +125 -0
  366. package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/mermaid_extract.py +240 -0
  367. package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/mermaid_source.py +39 -0
  368. package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/office-safety.mjs +54 -0
  369. package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/verify-all.py +12 -0
  370. package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/verify-brief.py +12 -0
  371. package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/verify-diagram.py +12 -0
  372. package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/verify-motion.py +12 -0
  373. package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/verify-type.py +12 -0
  374. package/assets/lithermes-plugin/skills/lit-docx/NOTICE +1 -0
  375. package/assets/lithermes-plugin/skills/lit-docx/SKILL.md +97 -0
  376. package/assets/lithermes-plugin/skills/lit-docx/references/frontmatter_schema.md +42 -0
  377. package/assets/lithermes-plugin/skills/lit-docx/references/journal_style_spec.md +17 -0
  378. package/assets/lithermes-plugin/skills/lit-docx/references/markdown_quality_checklist.md +37 -0
  379. package/assets/lithermes-plugin/skills/lit-docx/references/slop_phrase_list.yaml +58 -0
  380. package/assets/lithermes-plugin/skills/lit-docx/references/slop_rules.md +35 -0
  381. package/assets/lithermes-plugin/skills/lit-docx/scripts/clean_markdown.py +95 -0
  382. package/assets/lithermes-plugin/skills/lit-docx/scripts/convert_md_to_docx.py +1041 -0
  383. package/assets/lithermes-plugin/skills/lit-docx/scripts/convert_md_to_pdf.py +281 -0
  384. package/assets/lithermes-plugin/skills/lit-docx/scripts/convert_pdf.py +130 -0
  385. package/assets/lithermes-plugin/skills/lit-docx/scripts/edit_docx.py +297 -0
  386. package/assets/lithermes-plugin/skills/lit-docx/scripts/embed_images.py +78 -0
  387. package/assets/lithermes-plugin/skills/lit-docx/scripts/generate_docx_templates.py +491 -0
  388. package/assets/lithermes-plugin/skills/lit-docx/scripts/slop_lint.py +536 -0
  389. package/assets/lithermes-plugin/skills/lit-docx/scripts/visual_audit.py +41 -0
  390. package/assets/lithermes-plugin/skills/lit-docx/templates/docx/acs.docx +0 -0
  391. package/assets/lithermes-plugin/skills/lit-docx/templates/docx/elsevier.docx +0 -0
  392. package/assets/lithermes-plugin/skills/lit-docx/templates/docx/ieee.docx +0 -0
  393. package/assets/lithermes-plugin/skills/lit-docx/templates/docx/korean-generic.docx +0 -0
  394. package/assets/lithermes-plugin/skills/lit-docx/templates/docx/nature.docx +0 -0
  395. package/assets/lithermes-plugin/skills/lit-docx/templates/latex/acs/README.md +5 -0
  396. package/assets/lithermes-plugin/skills/lit-docx/templates/latex/acs/template.tex +37 -0
  397. package/assets/lithermes-plugin/skills/lit-docx/templates/latex/elsevier/README.md +5 -0
  398. package/assets/lithermes-plugin/skills/lit-docx/templates/latex/elsevier/template.tex +38 -0
  399. package/assets/lithermes-plugin/skills/lit-docx/templates/latex/ieee/README.md +5 -0
  400. package/assets/lithermes-plugin/skills/lit-docx/templates/latex/ieee/template.tex +37 -0
  401. package/assets/lithermes-plugin/skills/lit-docx/templates/latex/korean-generic/README.md +5 -0
  402. package/assets/lithermes-plugin/skills/lit-docx/templates/latex/korean-generic/template.tex +37 -0
  403. package/assets/lithermes-plugin/skills/lit-docx/templates/latex/nature/README.md +5 -0
  404. package/assets/lithermes-plugin/skills/lit-docx/templates/latex/nature/template.tex +37 -0
  405. package/assets/lithermes-plugin/skills/lit-docx/templates/registry.yaml +1366 -0
  406. package/assets/lithermes-plugin/skills/lit-humanizer/NOTICE +170 -0
  407. package/assets/lithermes-plugin/skills/lit-humanizer/SKILL.md +125 -0
  408. package/assets/lithermes-plugin/skills/lit-humanizer/assets/report-skeleton.md +26 -0
  409. package/assets/lithermes-plugin/skills/lit-humanizer/assets/slide-text-skeleton.md +30 -0
  410. package/assets/lithermes-plugin/skills/lit-humanizer/examples/accessibility-note/after.md +7 -0
  411. package/assets/lithermes-plugin/skills/lit-humanizer/examples/accessibility-note/before.md +7 -0
  412. package/assets/lithermes-plugin/skills/lit-humanizer/examples/api-reference/after.md +9 -0
  413. package/assets/lithermes-plugin/skills/lit-humanizer/examples/api-reference/before.md +15 -0
  414. package/assets/lithermes-plugin/skills/lit-humanizer/examples/changelog/after.md +5 -0
  415. package/assets/lithermes-plugin/skills/lit-humanizer/examples/changelog/before.md +12 -0
  416. package/assets/lithermes-plugin/skills/lit-humanizer/examples/code-comments/after.md +10 -0
  417. package/assets/lithermes-plugin/skills/lit-humanizer/examples/code-comments/before.md +19 -0
  418. package/assets/lithermes-plugin/skills/lit-humanizer/examples/commit/after.md +5 -0
  419. package/assets/lithermes-plugin/skills/lit-humanizer/examples/commit/before.md +7 -0
  420. package/assets/lithermes-plugin/skills/lit-humanizer/examples/data-release/after.md +7 -0
  421. package/assets/lithermes-plugin/skills/lit-humanizer/examples/data-release/before.md +9 -0
  422. package/assets/lithermes-plugin/skills/lit-humanizer/examples/detector-validation/ko-metrics-golden.json +49 -0
  423. package/assets/lithermes-plugin/skills/lit-humanizer/examples/detector-validation/pos-real.txt +26 -0
  424. package/assets/lithermes-plugin/skills/lit-humanizer/examples/detector-validation/rule-cases.json +306 -0
  425. package/assets/lithermes-plugin/skills/lit-humanizer/examples/english-essay/after.md +5 -0
  426. package/assets/lithermes-plugin/skills/lit-humanizer/examples/english-essay/before.md +5 -0
  427. package/assets/lithermes-plugin/skills/lit-humanizer/examples/incident-update/after.md +7 -0
  428. package/assets/lithermes-plugin/skills/lit-humanizer/examples/incident-update/before.md +7 -0
  429. package/assets/lithermes-plugin/skills/lit-humanizer/examples/ko-essay/after.md +7 -0
  430. package/assets/lithermes-plugin/skills/lit-humanizer/examples/ko-essay/before.md +9 -0
  431. package/assets/lithermes-plugin/skills/lit-humanizer/examples/ko-report/after.md +9 -0
  432. package/assets/lithermes-plugin/skills/lit-humanizer/examples/ko-report/before.md +13 -0
  433. package/assets/lithermes-plugin/skills/lit-humanizer/examples/ko-slide/after.md +19 -0
  434. package/assets/lithermes-plugin/skills/lit-humanizer/examples/ko-slide/before.md +21 -0
  435. package/assets/lithermes-plugin/skills/lit-humanizer/examples/meeting-brief/after.md +9 -0
  436. package/assets/lithermes-plugin/skills/lit-humanizer/examples/meeting-brief/before.md +11 -0
  437. package/assets/lithermes-plugin/skills/lit-humanizer/examples/policy-faq/after.md +9 -0
  438. package/assets/lithermes-plugin/skills/lit-humanizer/examples/policy-faq/before.md +9 -0
  439. package/assets/lithermes-plugin/skills/lit-humanizer/examples/pr/after.md +15 -0
  440. package/assets/lithermes-plugin/skills/lit-humanizer/examples/pr/before.md +17 -0
  441. package/assets/lithermes-plugin/skills/lit-humanizer/examples/project-update/after.md +7 -0
  442. package/assets/lithermes-plugin/skills/lit-humanizer/examples/project-update/before.md +9 -0
  443. package/assets/lithermes-plugin/skills/lit-humanizer/examples/readme/after.md +12 -0
  444. package/assets/lithermes-plugin/skills/lit-humanizer/examples/readme/before.md +14 -0
  445. package/assets/lithermes-plugin/skills/lit-humanizer/examples/report/after.md +13 -0
  446. package/assets/lithermes-plugin/skills/lit-humanizer/examples/report/before.md +11 -0
  447. package/assets/lithermes-plugin/skills/lit-humanizer/examples/research-abstract/after.md +5 -0
  448. package/assets/lithermes-plugin/skills/lit-humanizer/examples/research-abstract/before.md +5 -0
  449. package/assets/lithermes-plugin/skills/lit-humanizer/examples/slides/after.md +19 -0
  450. package/assets/lithermes-plugin/skills/lit-humanizer/examples/slides/before.md +19 -0
  451. package/assets/lithermes-plugin/skills/lit-humanizer/examples/troubleshooting/after.md +11 -0
  452. package/assets/lithermes-plugin/skills/lit-humanizer/examples/troubleshooting/before.md +11 -0
  453. package/assets/lithermes-plugin/skills/lit-humanizer/references/README.md +16 -0
  454. package/assets/lithermes-plugin/skills/lit-humanizer/references/always-on-rule.md +9 -0
  455. package/assets/lithermes-plugin/skills/lit-humanizer/references/code-patterns.md +468 -0
  456. package/assets/lithermes-plugin/skills/lit-humanizer/references/deliverable-channels.md +111 -0
  457. package/assets/lithermes-plugin/skills/lit-humanizer/references/en-patterns-checklist.md +43 -0
  458. package/assets/lithermes-plugin/skills/lit-humanizer/references/en-patterns-content.md +243 -0
  459. package/assets/lithermes-plugin/skills/lit-humanizer/references/en-patterns-structure.md +375 -0
  460. package/assets/lithermes-plugin/skills/lit-humanizer/references/en-patterns.md +57 -0
  461. package/assets/lithermes-plugin/skills/lit-humanizer/references/ko-metrics.md +33 -0
  462. package/assets/lithermes-plugin/skills/lit-humanizer/references/ko-patterns-a-d.md +659 -0
  463. package/assets/lithermes-plugin/skills/lit-humanizer/references/ko-patterns-e-j.md +387 -0
  464. package/assets/lithermes-plugin/skills/lit-humanizer/references/ko-patterns.md +31 -0
  465. package/assets/lithermes-plugin/skills/lit-humanizer/references/rewrite-playbook.md +54 -0
  466. package/assets/lithermes-plugin/skills/lit-humanizer/references/taxonomy.md +153 -0
  467. package/assets/lithermes-plugin/skills/lit-humanizer/rules.json +884 -0
  468. package/assets/lithermes-plugin/skills/lit-humanizer/scripts/detect.py +17 -0
  469. package/assets/lithermes-plugin/skills/lit-humanizer/scripts/extract_office_text.py +114 -0
  470. package/assets/lithermes-plugin/skills/lit-humanizer/scripts/ko_metrics.py +35 -0
  471. package/assets/lithermes-plugin/skills/lit-pptx/NOTICE +1 -0
  472. package/assets/lithermes-plugin/skills/lit-pptx/SKILL.md +109 -0
  473. package/assets/lithermes-plugin/skills/lit-pptx/agents/analyst.md +49 -0
  474. package/assets/lithermes-plugin/skills/lit-pptx/agents/antithesis.md +65 -0
  475. package/assets/lithermes-plugin/skills/lit-pptx/agents/architect.md +44 -0
  476. package/assets/lithermes-plugin/skills/lit-pptx/agents/critic.md +42 -0
  477. package/assets/lithermes-plugin/skills/lit-pptx/agents/synthesizer.md +47 -0
  478. package/assets/lithermes-plugin/skills/lit-pptx/agents/thesis.md +33 -0
  479. package/assets/lithermes-plugin/skills/lit-pptx/assets/azure/circle-lg.png +0 -0
  480. package/assets/lithermes-plugin/skills/lit-pptx/assets/azure/circle-md.png +0 -0
  481. package/assets/lithermes-plugin/skills/lit-pptx/assets/azure/circle-sm.png +0 -0
  482. package/assets/lithermes-plugin/skills/lit-pptx/bin/office.mjs +77 -0
  483. package/assets/lithermes-plugin/skills/lit-pptx/fonts/PRETENDARD-OFL.txt +94 -0
  484. package/assets/lithermes-plugin/skills/lit-pptx/fonts/a2z-font/A2Z-Black.otf +0 -0
  485. package/assets/lithermes-plugin/skills/lit-pptx/fonts/a2z-font/A2Z-Bold.otf +0 -0
  486. package/assets/lithermes-plugin/skills/lit-pptx/fonts/a2z-font/A2Z-ExtraBold.otf +0 -0
  487. package/assets/lithermes-plugin/skills/lit-pptx/fonts/a2z-font/A2Z-ExtraLight.otf +0 -0
  488. package/assets/lithermes-plugin/skills/lit-pptx/fonts/a2z-font/A2Z-Light.otf +0 -0
  489. package/assets/lithermes-plugin/skills/lit-pptx/fonts/a2z-font/A2Z-Medium.otf +0 -0
  490. package/assets/lithermes-plugin/skills/lit-pptx/fonts/a2z-font/A2Z-Regular.otf +0 -0
  491. package/assets/lithermes-plugin/skills/lit-pptx/fonts/a2z-font/A2Z-SemiBold.otf +0 -0
  492. package/assets/lithermes-plugin/skills/lit-pptx/fonts/a2z-font/A2Z-Thin.otf +0 -0
  493. package/assets/lithermes-plugin/skills/lit-pptx/fonts/a2z-font/OFL.txt +94 -0
  494. package/assets/lithermes-plugin/skills/lit-pptx/fonts/a2z-font/SOURCE.md +29 -0
  495. package/assets/lithermes-plugin/skills/lit-pptx/pretendard-font/public/static/PretendardGOV-Bold.otf +0 -0
  496. package/assets/lithermes-plugin/skills/lit-pptx/pretendard-font/public/static/PretendardGOV-Regular.otf +0 -0
  497. package/assets/lithermes-plugin/skills/lit-pptx/references/anti-slop-checklist.md +71 -0
  498. package/assets/lithermes-plugin/skills/lit-pptx/references/authoring-guide.md +139 -0
  499. package/assets/lithermes-plugin/skills/lit-pptx/references/consensus-protocol.md +125 -0
  500. package/assets/lithermes-plugin/skills/lit-pptx/references/data-display-cookbook.md +45 -0
  501. package/assets/lithermes-plugin/skills/lit-pptx/references/design-system-azure.md +58 -0
  502. package/assets/lithermes-plugin/skills/lit-pptx/runtime/package-lock.json +750 -0
  503. package/assets/lithermes-plugin/skills/lit-pptx/runtime/package.json +15 -0
  504. package/assets/lithermes-plugin/skills/lit-pptx/runtime/requirements.in +7 -0
  505. package/assets/lithermes-plugin/skills/lit-pptx/runtime/requirements.lock +391 -0
  506. package/assets/lithermes-plugin/skills/lit-pptx/scripts/compile-deck.js +447 -0
  507. package/assets/lithermes-plugin/skills/lit-pptx/scripts/craft_extras.py +215 -0
  508. package/assets/lithermes-plugin/skills/lit-pptx/scripts/embed_fonts.py +199 -0
  509. package/assets/lithermes-plugin/skills/lit-pptx/scripts/integrity.py +60 -0
  510. package/assets/lithermes-plugin/skills/lit-pptx/scripts/inventory.py +64 -0
  511. package/assets/lithermes-plugin/skills/lit-pptx/scripts/learn_template.py +433 -0
  512. package/assets/lithermes-plugin/skills/lit-pptx/scripts/lib/derive-palette.js +176 -0
  513. package/assets/lithermes-plugin/skills/lit-pptx/scripts/lib/directive-parser.js +244 -0
  514. package/assets/lithermes-plugin/skills/lit-pptx/scripts/lib/font-map.js +79 -0
  515. package/assets/lithermes-plugin/skills/lit-pptx/scripts/lib/gen-bg.js +85 -0
  516. package/assets/lithermes-plugin/skills/lit-pptx/scripts/lib/gen-gradient-assets.js +36 -0
  517. package/assets/lithermes-plugin/skills/lit-pptx/scripts/lib/layout-resolver.js +736 -0
  518. package/assets/lithermes-plugin/skills/lit-pptx/scripts/lib/markdown-loader.js +136 -0
  519. package/assets/lithermes-plugin/skills/lit-pptx/scripts/lib/render-adapter-html.js +357 -0
  520. package/assets/lithermes-plugin/skills/lit-pptx/scripts/lib/render-adapter-pptx.js +1864 -0
  521. package/assets/lithermes-plugin/skills/lit-pptx/scripts/lib/slide-ast.js +539 -0
  522. package/assets/lithermes-plugin/skills/lit-pptx/scripts/lib/spec-validator.js +94 -0
  523. package/assets/lithermes-plugin/skills/lit-pptx/scripts/lib/template-registry.js +355 -0
  524. package/assets/lithermes-plugin/skills/lit-pptx/scripts/qa_deck.py +791 -0
  525. package/assets/lithermes-plugin/skills/lit-pptx/scripts/validate_pptx.py +206 -0
  526. package/assets/lithermes-plugin/skills/lit-pptx/slide-formats/markdown-slide-spec-v1.md +251 -0
  527. package/assets/lithermes-plugin/skills/lit-pptx/slide-formats/markdown-slide-spec-v2.md +221 -0
  528. package/assets/lithermes-plugin/skills/lit-pptx/slide-formats/slide-ast-v1.schema.json +229 -0
  529. package/assets/lithermes-plugin/skills/lit-pptx/slide-formats/slide-ast-v2.schema.json +144 -0
  530. package/assets/lithermes-plugin/skills/lit-pptx/slide-formats/template-enrollment-contract.md +228 -0
  531. package/assets/lithermes-plugin/skills/lit-pptx/templates/enrolled/AZURE-A2Z/capabilities.yaml +146 -0
  532. package/assets/lithermes-plugin/skills/lit-pptx/templates/enrolled/AZURE-A2Z/layout-mapping.yaml +384 -0
  533. package/assets/lithermes-plugin/skills/lit-pptx/templates/enrolled/AZURE-A2Z/template.yaml +37 -0
  534. package/assets/lithermes-plugin/skills/lit-pptx/templates/enrolled/AZURE-PRO/capabilities.yaml +154 -0
  535. package/assets/lithermes-plugin/skills/lit-pptx/templates/enrolled/AZURE-PRO/layout-mapping.yaml +405 -0
  536. package/assets/lithermes-plugin/skills/lit-pptx/templates/enrolled/AZURE-PRO/template.yaml +37 -0
  537. package/assets/lithermes-plugin/skills/lit-pptx/templates/enrolled/BOILERPLATE-A2Z/capabilities.yaml +179 -0
  538. package/assets/lithermes-plugin/skills/lit-pptx/templates/enrolled/BOILERPLATE-A2Z/layout-mapping.yaml +299 -0
  539. package/assets/lithermes-plugin/skills/lit-pptx/templates/enrolled/BOILERPLATE-A2Z/template.yaml +45 -0
  540. package/assets/lithermes-plugin/skills/lit-pptx/templates/enrolled/BOILERPLATE-PRETENDARD/capabilities.yaml +181 -0
  541. package/assets/lithermes-plugin/skills/lit-pptx/templates/enrolled/BOILERPLATE-PRETENDARD/layout-mapping.yaml +299 -0
  542. package/assets/lithermes-plugin/skills/lit-pptx/templates/enrolled/BOILERPLATE-PRETENDARD/template.yaml +44 -0
  543. package/assets/lithermes-plugin/skills/lit-scientific-visualization/SKILL.md +2 -0
  544. package/assets/lithermes-plugin/skills/lit-typographic-motion/SKILL.md +71 -0
  545. package/assets/lithermes-plugin/skills/lit-typographic-motion/bin/audio.py +45 -0
  546. package/assets/lithermes-plugin/skills/lit-typographic-motion/bin/motion.mjs +690 -0
  547. package/assets/lithermes-plugin/skills/lit-typographic-motion/bin/runtime.mjs +299 -0
  548. package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/NOTICE +23 -0
  549. package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/THIRD_PARTY_NOTICES +55 -0
  550. package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/browser.mjs +169 -0
  551. package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/completion.mjs +52 -0
  552. package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/constants.mjs +162 -0
  553. package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/director.mjs +33 -0
  554. package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/encode.mjs +191 -0
  555. package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/flash.mjs +163 -0
  556. package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/frame.mjs +428 -0
  557. package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/gate.mjs +483 -0
  558. package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/look.mjs +223 -0
  559. package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/page.js +622 -0
  560. package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/presets.mjs +170 -0
  561. package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/scenes.mjs +242 -0
  562. package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/sound.mjs +382 -0
  563. package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/stage-gate.mjs +97 -0
  564. package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/stage-init.js +186 -0
  565. package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/stage-kit.js +389 -0
  566. package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/stage-qa.mjs +358 -0
  567. package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/stage-worker.mjs +33 -0
  568. package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/stage.mjs +691 -0
  569. package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/stills.mjs +71 -0
  570. package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/stroke.mjs +231 -0
  571. package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/timeline.mjs +177 -0
  572. package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/treatment.mjs +244 -0
  573. package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/type.mjs +183 -0
  574. package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/util.mjs +152 -0
  575. package/assets/lithermes-plugin/skills/lit-typographic-motion/references/craft-loop.md +175 -0
  576. package/assets/lithermes-plugin/skills/lit-typographic-motion/references/engine-contract.md +166 -0
  577. package/assets/lithermes-plugin/skills/lit-typographic-motion/references/runtime.md +122 -0
  578. package/assets/lithermes-plugin/skills/lit-typographic-motion/references/stage.md +261 -0
  579. package/assets/lithermes-plugin/skills/lit-typographic-motion/references/style-bibles.md +122 -0
  580. package/assets/lithermes-plugin/skills/lit-typographic-motion/references/treatment.md +164 -0
  581. package/assets/lithermes-plugin/skills/lit-typographic-motion/references/type-craft.md +92 -0
  582. package/assets/lithermes-plugin/skills/lit-typographic-motion/runtime/fonts.json +154 -0
  583. package/assets/lithermes-plugin/skills/lit-typographic-motion/runtime/licenses/CREDITS +20 -0
  584. package/assets/lithermes-plugin/skills/lit-typographic-motion/runtime/licenses/EMS-OFL.txt +91 -0
  585. package/assets/lithermes-plugin/skills/lit-typographic-motion/runtime/package-lock.json +88 -0
  586. package/assets/lithermes-plugin/skills/lit-typographic-motion/runtime/package.json +12 -0
  587. package/assets/lithermes-plugin/skills/lit-typographic-motion/runtime/requirements.in +1 -0
  588. package/assets/lithermes-plugin/skills/lit-typographic-motion/runtime/requirements.lock +727 -0
  589. package/assets/lithermes-plugin/skills/lit-typographic-motion/runtime/word-timing.json +9 -0
  590. package/assets/lithermes-plugin/skills/litresearch/SKILL.md +19 -18
  591. package/assets/lithermes-plugin/skills/litwork/SKILL.md +28 -0
  592. package/assets/lithermes-plugin/skills/visual-qa/references/complete-contract.md +3 -3
  593. package/package.json +1 -1
  594. package/readme-assets/ab-simple/s11-ui-baseline-desktop.webp +0 -0
  595. package/readme-assets/ab-simple/s11-ui-lithermes-desktop.webp +0 -0
  596. package/readme-assets/ab-simple/s3-ui-baseline-desktop.webp +0 -0
  597. package/readme-assets/ab-simple/s3-ui-lithermes-desktop.webp +0 -0
  598. package/readme-assets/ab-simple/s4-ui-baseline-desktop.webp +0 -0
  599. package/readme-assets/ab-simple/s4-ui-lithermes-desktop.webp +0 -0
  600. package/readme-assets/ab-simple/s5-office-baseline-slides.webp +0 -0
  601. package/readme-assets/ab-simple/s5-office-lithermes-slides.webp +0 -0
  602. package/readme-assets/ab-simple/s7-lithermes-diagram.webp +0 -0
  603. package/readme-assets/ab-simple/s8-office-baseline-slides.webp +0 -0
  604. package/readme-assets/ab-simple/s8-office-lithermes-slides.webp +0 -0
  605. package/readme-assets/ab-simple/s9-office-lithermes-pages.webp +0 -0
  606. package/readme-assets/badge-version.svg +1 -1
  607. package/readme-assets/cover-motion-still.webp +0 -0
  608. package/readme-assets/cover-motion.webp +0 -0
  609. package/readme-assets/skills/autoconference.webp +0 -0
  610. package/readme-assets/skills/autoresearch.webp +0 -0
  611. package/readme-assets/skills/browser-drive.webp +0 -0
  612. package/readme-assets/skills/comment-checker.webp +0 -0
  613. package/readme-assets/skills/debugging.webp +0 -0
  614. package/readme-assets/skills/deep-interview.webp +0 -0
  615. package/readme-assets/skills/frontend-ui-ux.webp +0 -0
  616. package/readme-assets/skills/lit-burnoff-file.webp +0 -0
  617. package/readme-assets/skills/lit-burnoff.webp +0 -0
  618. package/readme-assets/skills/lit-code.webp +0 -0
  619. package/readme-assets/skills/lit-commit.webp +0 -0
  620. package/readme-assets/skills/lit-comprehend.webp +0 -0
  621. package/readme-assets/skills/lit-crucible.webp +0 -0
  622. package/readme-assets/skills/lit-diagram-drawer.webp +0 -0
  623. package/readme-assets/skills/lit-docx.webp +0 -0
  624. package/readme-assets/skills/lit-handoff.webp +0 -0
  625. package/readme-assets/skills/lit-humanizer.webp +0 -0
  626. package/readme-assets/skills/lit-init.webp +0 -0
  627. package/readme-assets/skills/lit-plan.webp +0 -0
  628. package/readme-assets/skills/lit-pptx.webp +0 -0
  629. package/readme-assets/skills/lit-recap.webp +0 -0
  630. package/readme-assets/skills/lit-scientific-visualization.webp +0 -0
  631. package/readme-assets/skills/lit-typographic-motion.webp +0 -0
  632. package/readme-assets/skills/litgoal.webp +0 -0
  633. package/readme-assets/skills/litresearch.webp +0 -0
  634. package/readme-assets/skills/litwork.webp +0 -0
  635. package/readme-assets/skills/lsp-setup.webp +0 -0
  636. package/readme-assets/skills/lsp.webp +0 -0
  637. package/readme-assets/skills/readme-studio.webp +0 -0
  638. package/readme-assets/skills/refactor.webp +0 -0
  639. package/readme-assets/skills/review-work.webp +0 -0
  640. package/readme-assets/skills/rules.webp +0 -0
  641. package/readme-assets/skills/start-work.webp +0 -0
  642. package/readme-assets/skills/structural-search.webp +0 -0
  643. package/readme-assets/skills/visual-qa.webp +0 -0
  644. package/readme-assets/skills/wikify.webp +0 -0
  645. package/src/cli.js +40 -1
  646. package/src/lib/check.js +21 -0
  647. package/src/lib/install.js +262 -7
  648. package/src/lib/skillPayload.js +3 -3
  649. package/assets/lithermes-plugin/skills/lit-korean/SKILL.md +0 -237
  650. package/assets/lithermes-plugin/skills/lit-korean/references/quick-rules.md +0 -24
  651. package/assets/lithermes-plugin/skills/lit-korean/references/safety-checklist.md +0 -23
  652. package/readme-assets/cover.webp +0 -0
@@ -0,0 +1,622 @@
1
+ /* LitHermes typographic-motion renderer, browser half.
2
+ * Raw WebGL2 re-expression of mexicat/pdoom-video's gl.ts (fullscreen passes,
3
+ * half-float targets, Canvas2D layers as textures), lines.ts (instanced capsule
4
+ * hairlines), post.ts (bloom pyramid, halation, CA, shoulder, grain, vignette,
5
+ * flash, shake/zoom) and glsl/common.ts (hashes, simplex/fbm, curl, sRGB), MIT,
6
+ * see NOTICE. The six look passes are original GLSL. Every uniform write goes
7
+ * through setPass(), which records the per-pass uniforms and draw count that
8
+ * the render log needs (MO-SH-00a). Nothing here reads a clock for pixels.
9
+ */
10
+ (() => {
11
+ const COMMON = `
12
+ #define PI 3.14159265359
13
+ float sat(float x) { return clamp(x, 0.0, 1.0); }
14
+ vec3 sat(vec3 x) { return clamp(x, 0.0, 1.0); }
15
+ float luma(vec3 c) { return dot(c, vec3(0.2126, 0.7152, 0.0722)); }
16
+ float hash12(vec2 p) { vec3 p3 = fract(vec3(p.xyx) * .1031); p3 += dot(p3, p3.yzx + 33.33); return fract((p3.x + p3.y) * p3.z); }
17
+ vec2 hash22(vec2 p) { vec3 p3 = fract(vec3(p.xyx) * vec3(.1031, .1030, .0973)); p3 += dot(p3, p3.yzx + 33.33); return fract((p3.xx + p3.yz) * p3.zy); }
18
+ vec2 seedOffset(uint s) { return vec2(float(s & 0xFFFFu), float((s >> 16) & 0xFFFFu)) / 65535.0; }
19
+ vec3 _m289(vec3 x) { return x - floor(x * (1.0 / 289.0)) * 289.0; }
20
+ vec4 _m289(vec4 x) { return x - floor(x * (1.0 / 289.0)) * 289.0; }
21
+ vec4 _perm(vec4 x) { return _m289(((x * 34.0) + 10.0) * x); }
22
+ float snoise(vec3 v) {
23
+ const vec2 C = vec2(1.0 / 6.0, 1.0 / 3.0); const vec4 D = vec4(0.0, 0.5, 1.0, 2.0);
24
+ vec3 i = floor(v + dot(v, C.yyy)); vec3 x0 = v - i + dot(i, C.xxx);
25
+ vec3 g = step(x0.yzx, x0.xyz); vec3 l = 1.0 - g; vec3 i1 = min(g.xyz, l.zxy); vec3 i2 = max(g.xyz, l.zxy);
26
+ vec3 x1 = x0 - i1 + C.xxx; vec3 x2 = x0 - i2 + C.yyy; vec3 x3 = x0 - D.yyy;
27
+ i = _m289(i);
28
+ vec4 p = _perm(_perm(_perm(i.z + vec4(0.0, i1.z, i2.z, 1.0)) + i.y + vec4(0.0, i1.y, i2.y, 1.0)) + i.x + vec4(0.0, i1.x, i2.x, 1.0));
29
+ float n_ = 0.142857142857; vec3 ns = n_ * D.wyz - D.xzx;
30
+ vec4 j = p - 49.0 * floor(p * ns.z * ns.z); vec4 x_ = floor(j * ns.z); vec4 y_ = floor(j - 7.0 * x_);
31
+ vec4 x = x_ * ns.x + ns.yyyy; vec4 y = y_ * ns.x + ns.yyyy; vec4 h = 1.0 - abs(x) - abs(y);
32
+ vec4 b0 = vec4(x.xy, y.xy); vec4 b1 = vec4(x.zw, y.zw);
33
+ vec4 s0 = floor(b0) * 2.0 + 1.0; vec4 s1 = floor(b1) * 2.0 + 1.0; vec4 sh = -step(h, vec4(0.0));
34
+ vec4 a0 = b0.xzyw + s0.xzyw * sh.xxyy; vec4 a1 = b1.xzyw + s1.xzyw * sh.zzww;
35
+ vec3 p0 = vec3(a0.xy, h.x); vec3 p1 = vec3(a0.zw, h.y); vec3 p2 = vec3(a1.xy, h.z); vec3 p3 = vec3(a1.zw, h.w);
36
+ vec4 norm = 1.79284291400159 - 0.85373472095314 * vec4(dot(p0, p0), dot(p1, p1), dot(p2, p2), dot(p3, p3));
37
+ p0 *= norm.x; p1 *= norm.y; p2 *= norm.z; p3 *= norm.w;
38
+ vec4 m = max(0.5 - vec4(dot(x0, x0), dot(x1, x1), dot(x2, x2), dot(x3, x3)), 0.0); m = m * m;
39
+ return 105.0 * dot(m * m, vec4(dot(p0, x0), dot(p1, x1), dot(p2, x2), dot(p3, x3)));
40
+ }
41
+ vec3 toSRGB(vec3 c) { return mix(12.92 * c, 1.055 * pow(max(c, 0.0), vec3(1.0 / 2.4)) - 0.055, step(0.0031308, c)); }
42
+ vec3 toLinear(vec3 c) { return mix(c / 12.92, pow((c + 0.055) / 1.055, vec3(2.4)), step(0.04045, c)); }
43
+ `;
44
+
45
+ const VERT = `#version 300 es
46
+ in vec2 a_pos; out vec2 vUv;
47
+ void main() { vUv = a_pos * 0.5 + 0.5; gl_Position = vec4(a_pos, 0.0, 1.0); }`;
48
+
49
+ const FRAG = {
50
+ // Background fill in linear light.
51
+ clear: `uniform vec3 u_color; void main() { fragColor = vec4(u_color, 0.0); }`,
52
+ // tidal-gradient (MO-SH-06): domain-warped simplex flow between 2-3 stops,
53
+ // seeded origin per shot, surge envelope computed on the CPU (attack/decay >= 0.1 s).
54
+ tidal: `uniform float u_time; uniform uint u_seed; uniform vec3 u_stopA; uniform vec3 u_stopB; uniform vec3 u_base;
55
+ uniform float u_flowSpeed, u_warpAmount, u_curlStrength, u_surge, u_ditherAmount; uniform int u_octaves; uniform vec2 u_res;
56
+ float fbm3(vec3 p) { float s = 0.0, a = 0.5; for (int i = 0; i < 6; i++) { if (i >= u_octaves) break; s += a * snoise(p); p = p * 2.03 + 11.7; a *= 0.5; } return s; }
57
+ void main() {
58
+ vec2 uv = vUv * vec2(u_res.x / u_res.y, 1.0) * 1.4 + seedOffset(u_seed) * 40.0;
59
+ float tt = u_time * u_flowSpeed;
60
+ vec2 w = vec2(fbm3(vec3(uv, tt)), fbm3(vec3(uv + 5.2, tt + 1.3)));
61
+ vec2 c = vec2(snoise(vec3(uv * 0.7, tt + 9.1)), snoise(vec3(uv * 0.7 + 3.3, tt + 4.7))) * u_curlStrength;
62
+ float n = fbm3(vec3(uv + w * u_warpAmount * 2.0 + c, tt * 0.5));
63
+ float k = smoothstep(-0.55, 0.55, n);
64
+ vec3 col = mix(u_stopA, u_stopB, k);
65
+ col = mix(u_base, col, 0.55 + 0.45 * smoothstep(-0.8, 0.8, w.x));
66
+ col *= 1.0 + u_surge * 0.35;
67
+ col += (hash12(gl_FragCoord.xy + seedOffset(u_seed) * 977.0) - 0.5) * u_ditherAmount * 0.02;
68
+ fragColor = vec4(max(col, 0.0), 0.0);
69
+ }`,
70
+ // Canvas2D layer (straight alpha, sRGB) over the target in linear light.
71
+ layer: `uniform sampler2D u_tex;
72
+ void main() { vec4 c = texture(u_tex, vUv); fragColor = vec4(toLinear(c.rgb) * c.a, c.a); }`,
73
+ // Average N sub-samples; only sample floor(N/2) contributes the glyph mask.
74
+ accumulate: `uniform sampler2D u_tex; uniform float u_weight; uniform float u_maskWeight;
75
+ void main() { vec4 c = texture(u_tex, vUv); fragColor = vec4(c.rgb * u_weight, c.a * u_maskWeight); }`,
76
+ // crt (MO-SH-07): barrel curvature, scanlines, seeded triad grain, capped flicker, vignette,
77
+ // phosphor persistence from the two previous composites of the same shot.
78
+ crt: `uniform sampler2D u_tex; uniform sampler2D u_prev1; uniform sampler2D u_prev2; uniform float u_time; uniform uint u_seed;
79
+ uniform float u_scanlineFreqPerFrame, u_scanlineDepth, u_phosphorPersistence, u_curvature, u_vignette, u_triadMaskAmount, u_flickerAmp, u_flickerFreqHz;
80
+ uniform float u_prevCount; uniform vec2 u_res;
81
+ void main() {
82
+ vec2 dc = vUv - 0.5; float r2 = dot(dc, dc);
83
+ vec2 uv = 0.5 + dc * (1.0 - u_curvature * r2);
84
+ vec4 c = texture(u_tex, uv);
85
+ vec3 col = c.rgb;
86
+ if (u_prevCount > 0.5) col = max(col, texture(u_prev1, uv).rgb * u_phosphorPersistence);
87
+ if (u_prevCount > 1.5) col = max(col, texture(u_prev2, uv).rgb * u_phosphorPersistence * u_phosphorPersistence);
88
+ float yLogical = (1.0 - uv.y) * 1080.0;
89
+ float scan = 1.0 - u_scanlineDepth * (0.5 + 0.5 * cos(yLogical * PI * 2.0 * u_scanlineFreqPerFrame / 1080.0));
90
+ col *= scan;
91
+ float stripe = mod(floor(gl_FragCoord.x + seedOffset(u_seed).x * 3.0), 3.0);
92
+ vec3 triad = vec3(stripe == 0.0 ? 1.0 : 0.82, stripe == 1.0 ? 1.0 : 0.82, stripe == 2.0 ? 1.0 : 0.82);
93
+ col *= mix(vec3(1.0), triad, u_triadMaskAmount);
94
+ col *= 1.0 + 0.5 * u_flickerAmp * sin(2.0 * PI * u_flickerFreqHz * u_time);
95
+ float v = smoothstep(0.85, 0.3, length(dc * vec2(1.0, 0.85)));
96
+ col *= mix(1.0, v, u_vignette);
97
+ if (uv.x < 0.0 || uv.x > 1.0 || uv.y < 0.0 || uv.y > 1.0) col = vec3(0.0);
98
+ fragColor = vec4(col, c.a);
99
+ }`,
100
+ // dither (MO-SH-08): ordered Bayer quantisation in display space, locked to screen
101
+ // pixels; the seed is used only by the blue-noise mode, once per shot.
102
+ dither: `uniform sampler2D u_tex; uniform int u_ditherMode; uniform int u_paletteSize; uniform int u_pixelScale; uniform float u_ditherStrength; uniform uint u_seed; uniform float u_pxScale;
103
+ float bayer(ivec2 p, int n) {
104
+ int b = 0; int size = n;
105
+ for (int bit = 0; bit < 3; bit++) {
106
+ if ((1 << bit) >= size) break;
107
+ int x = (p.x >> bit) & 1, y = (p.y >> bit) & 1;
108
+ b = (b << 2) | ((x ^ y) << 1) | y;
109
+ }
110
+ int bits = size == 2 ? 1 : size == 4 ? 2 : 3;
111
+ int r = 0; for (int i = 0; i < 6; i++) { if (i >= bits * 2) break; r = (r << 1) | ((b >> i) & 1); }
112
+ return (float(r) + 0.5) / float(size * size);
113
+ }
114
+ void main() {
115
+ vec4 c = texture(u_tex, vUv);
116
+ ivec2 cell = ivec2(floor(gl_FragCoord.xy / (float(u_pixelScale) * u_pxScale)));
117
+ float threshold;
118
+ if (u_ditherMode == 3) threshold = hash12(vec2(cell) + seedOffset(u_seed) * 4096.0);
119
+ else threshold = bayer(cell & 7, u_ditherMode == 0 ? 2 : u_ditherMode == 1 ? 4 : 8);
120
+ float levels = float(max(u_paletteSize, 2) - 1);
121
+ vec3 s = pow(max(c.rgb, 0.0), vec3(1.0 / 2.2));
122
+ vec3 q = floor(s * levels + threshold) / levels;
123
+ vec3 outc = mix(s, q, u_ditherStrength);
124
+ fragColor = vec4(pow(max(outc, 0.0), vec3(2.2)), c.a);
125
+ }`,
126
+ // glitch (MO-SH-05): a scheduled hit displaces horizontal slices (offset + RGB split);
127
+ // one hit = one displace, held u_holdFrames, then restore. No luminance inversion.
128
+ glitch: `uniform sampler2D u_tex; uniform int u_active; uniform int u_count; uniform vec3 u_slices[8]; uniform float u_rgbSplitPx; uniform float u_intensity; uniform uint u_seed; uniform vec2 u_res;
129
+ void main() {
130
+ vec2 uv = vUv;
131
+ float y = (1.0 - vUv.y) * 1080.0;
132
+ float dx = 0.0;
133
+ if (u_active == 1) for (int i = 0; i < 8; i++) {
134
+ if (i >= u_count) break;
135
+ vec3 s = u_slices[i];
136
+ if (y >= s.x && y < s.x + s.y) dx = s.z * (0.5 + u_intensity);
137
+ }
138
+ vec2 off = vec2(dx / 1920.0, 0.0);
139
+ vec4 c = texture(u_tex, uv - off);
140
+ if (dx != 0.0) {
141
+ vec2 split = vec2(u_rgbSplitPx / 1920.0, 0.0);
142
+ c.r = texture(u_tex, uv - off - split).r;
143
+ c.b = texture(u_tex, uv - off + split).b;
144
+ }
145
+ fragColor = c;
146
+ }`,
147
+ // Post (MO-A-29, §A7 order): bloom prefilter and pyramid, then one final pass.
148
+ prefilter: `uniform sampler2D u_tex; uniform vec2 u_texel; uniform float u_threshold, u_knee;
149
+ void main() {
150
+ vec3 c = texture(u_tex, vUv + u_texel * vec2(-1, -1)).rgb + texture(u_tex, vUv + u_texel * vec2(1, -1)).rgb
151
+ + texture(u_tex, vUv + u_texel * vec2(-1, 1)).rgb + texture(u_tex, vUv + u_texel * vec2(1, 1)).rgb;
152
+ c = min(c * 0.25, vec3(40.0));
153
+ float l = max(c.r, max(c.g, c.b));
154
+ float knee = max(u_knee, 1e-4);
155
+ float rq = clamp(l - u_threshold + knee, 0.0, 2.0 * knee); rq = rq * rq / (4.0 * knee + 1e-5);
156
+ fragColor = vec4(c * max(rq, l - u_threshold) / max(l, 1e-5), 1.0);
157
+ }`,
158
+ down: `uniform sampler2D u_tex; uniform vec2 u_texel;
159
+ void main() {
160
+ vec3 a = texture(u_tex, vUv + u_texel * vec2(-2, -2)).rgb, b = texture(u_tex, vUv + u_texel * vec2(0, -2)).rgb, c = texture(u_tex, vUv + u_texel * vec2(2, -2)).rgb;
161
+ vec3 d = texture(u_tex, vUv + u_texel * vec2(-1, -1)).rgb, e = texture(u_tex, vUv + u_texel * vec2(1, -1)).rgb;
162
+ vec3 f = texture(u_tex, vUv + u_texel * vec2(-2, 0)).rgb, g = texture(u_tex, vUv).rgb, h = texture(u_tex, vUv + u_texel * vec2(2, 0)).rgb;
163
+ vec3 i = texture(u_tex, vUv + u_texel * vec2(-1, 1)).rgb, j = texture(u_tex, vUv + u_texel * vec2(1, 1)).rgb;
164
+ vec3 k = texture(u_tex, vUv + u_texel * vec2(-2, 2)).rgb, l = texture(u_tex, vUv + u_texel * vec2(0, 2)).rgb, m = texture(u_tex, vUv + u_texel * vec2(2, 2)).rgb;
165
+ fragColor = vec4((d + e + i + j) * 0.125 + (a + b + g + f) * 0.03125 + (b + c + h + g) * 0.03125 + (f + g + l + k) * 0.03125 + (g + h + m + l) * 0.03125, 1.0);
166
+ }`,
167
+ up: `uniform sampler2D u_tex; uniform sampler2D u_prev; uniform vec2 u_texel; uniform float u_radius;
168
+ void main() {
169
+ vec2 o = u_texel * u_radius;
170
+ vec3 s = texture(u_tex, vUv - o).rgb + 2.0 * texture(u_tex, vUv + vec2(0, -o.y)).rgb + texture(u_tex, vUv + vec2(o.x, -o.y)).rgb
171
+ + 2.0 * texture(u_tex, vUv + vec2(-o.x, 0)).rgb + 4.0 * texture(u_tex, vUv).rgb + 2.0 * texture(u_tex, vUv + vec2(o.x, 0)).rgb
172
+ + texture(u_tex, vUv + vec2(-o.x, o.y)).rgb + 2.0 * texture(u_tex, vUv + vec2(0, o.y)).rgb + texture(u_tex, vUv + o).rgb;
173
+ fragColor = vec4(texture(u_prev, vUv).rgb + s / 16.0, 1.0);
174
+ }`,
175
+ final: `uniform sampler2D u_tex; uniform sampler2D u_bloom; uniform sampler2D u_halo;
176
+ uniform float u_exposure, u_bloomAmt, u_halation, u_ca, u_grain, u_vignette, u_fade, u_flash, u_zoom, u_invert, u_grainSeed;
177
+ uniform vec2 u_shake; uniform vec2 u_res; uniform vec3 u_flashColor;
178
+ vec3 shoulder(vec3 x) {
179
+ const float k = 0.72;
180
+ vec3 y = mix(x, k + (1.0 - k) * (1.0 - exp(-(x - k) / (1.0 - k))), step(k, x));
181
+ float over = max(max(x.r, x.g), x.b);
182
+ return mix(y, vec3(1.0), smoothstep(2.0, 12.0, over) * 0.85);
183
+ }
184
+ void main() {
185
+ vec2 img = vec2(vUv.x, 1.0 - vUv.y);
186
+ vec2 uv = (img - 0.5) / u_zoom + 0.5 - u_shake / u_res * vec2(1.0, -1.0);
187
+ vec2 dc = uv - 0.5;
188
+ float r2 = dot(dc * vec2(u_res.x / u_res.y, 1.0), dc * vec2(u_res.x / u_res.y, 1.0));
189
+ vec2 off = dc * r2 * u_ca / u_res.x * 4.0;
190
+ vec4 base = texture(u_tex, uv);
191
+ vec3 col = vec3(texture(u_tex, uv + off).r, base.g, texture(u_tex, uv - off).b);
192
+ col += texture(u_bloom, uv).rgb * u_bloomAmt;
193
+ col += vec3(1.0, 0.18, 0.04) * luma(texture(u_halo, uv).rgb) * u_halation;
194
+ col *= u_exposure;
195
+ col = shoulder(col);
196
+ col += u_flashColor * u_flash;
197
+ float v = smoothstep(0.95, 0.25, length(dc * vec2(1.0, 0.8)));
198
+ col *= mix(1.0, v, u_vignette);
199
+ col *= u_fade;
200
+ if (u_invert > 0.5) col = vec3(0.8515) - col * 0.84;
201
+ vec3 s = toSRGB(sat(col));
202
+ if (u_grain > 0.0) {
203
+ vec2 gp = gl_FragCoord.xy + vec2(u_grainSeed * 37.0, u_grainSeed * 71.0);
204
+ float g1 = hash12(gp) - 0.5, g2 = hash12(floor(gl_FragCoord.xy / 2.0) + vec2(u_grainSeed * 13.0, u_grainSeed * 29.0)) - 0.5;
205
+ float lm = luma(s);
206
+ s += (g1 * 0.6 + g2 * 0.4) * u_grain * (0.55 + 1.2 * lm * (1.0 - lm));
207
+ s += (hash12(gl_FragCoord.xy * 1.37 + u_grainSeed) - 0.5) / 255.0;
208
+ }
209
+ float inside = step(0.0, uv.x) * step(uv.x, 1.0) * step(0.0, uv.y) * step(uv.y, 1.0);
210
+ fragColor = vec4(sat(s), base.a * inside);
211
+ }`,
212
+ };
213
+
214
+ // Instanced anti-aliased capsule segments (swiss-grid hairlines), after lines.ts.
215
+ const LINE_VERT = `#version 300 es
216
+ in vec2 a_pos; in vec2 i_a; in vec2 i_b; in vec4 i_color; in float i_width;
217
+ uniform vec2 u_res; uniform float u_px;
218
+ out vec2 vLocal; out float vLen; out float vHalf; out vec4 vColor;
219
+ void main() {
220
+ vec2 sa = i_a * u_px, sb = i_b * u_px;
221
+ float w = i_width * u_px; float hw = max(w * 0.5, 0.35) + 1.0;
222
+ vec2 d = sb - sa; float len = length(d); vec2 dir = len > 1e-4 ? d / len : vec2(1.0, 0.0); vec2 nrm = vec2(-dir.y, dir.x);
223
+ float along = mix(-hw, len + hw, a_pos.x);
224
+ vec2 p = sa + dir * along + nrm * a_pos.y * hw;
225
+ vec2 res = u_res * u_px;
226
+ gl_Position = vec4(p.x / res.x * 2.0 - 1.0, 1.0 - p.y / res.y * 2.0, 0.0, 1.0);
227
+ vLocal = vec2(along, a_pos.y * hw); vLen = len; vHalf = max(w * 0.5, 0.35);
228
+ vColor = i_color * vec4(1.0, 1.0, 1.0, min(1.0, w / 0.7));
229
+ }`;
230
+ const LINE_FRAG = `#version 300 es
231
+ precision highp float;
232
+ in vec2 vLocal; in float vLen; in float vHalf; in vec4 vColor; out vec4 fragColor;
233
+ void main() {
234
+ float x = clamp(vLocal.x, 0.0, vLen);
235
+ float d = length(vec2(vLocal.x - x, vLocal.y)) - vHalf;
236
+ float a = clamp(0.5 - d, 0.0, 1.0) * vColor.a;
237
+ if (a <= 0.0) discard;
238
+ fragColor = vec4(vColor.rgb * a, a);
239
+ }`;
240
+
241
+ let gl, S, W, H, PW, PH, programs, quad, lineProg, lineVao, lineBuf, rt, textures, canvases, pbo, frameLog;
242
+ const paths = new Map();
243
+
244
+ const srgbToLinear = (v) => { const s = v / 255; return s <= 0.04045 ? s / 12.92 : ((s + 0.055) / 1.055) ** 2.4; };
245
+ const hexLinear = (hex) => { const n = parseInt(hex.slice(1), 16); return [(n >> 16) & 255, (n >> 8) & 255, n & 255].map(srgbToLinear); };
246
+
247
+ function compile(type, source) {
248
+ const shader = gl.createShader(type);
249
+ gl.shaderSource(shader, source);
250
+ gl.compileShader(shader);
251
+ if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) throw new Error(gl.getShaderInfoLog(shader) || 'shader compile failed');
252
+ return shader;
253
+ }
254
+ function program(vs, fs) {
255
+ const p = gl.createProgram();
256
+ gl.attachShader(p, compile(gl.VERTEX_SHADER, vs));
257
+ gl.attachShader(p, compile(gl.FRAGMENT_SHADER, fs));
258
+ gl.linkProgram(p);
259
+ if (!gl.getProgramParameter(p, gl.LINK_STATUS)) throw new Error(gl.getProgramInfoLog(p) || 'link failed');
260
+ const uniforms = new Map();
261
+ const n = gl.getProgramParameter(p, gl.ACTIVE_UNIFORMS);
262
+ for (let i = 0; i < n; i++) {
263
+ const info = gl.getActiveUniform(p, i);
264
+ uniforms.set(info.name.replace(/\[0\]$/, ''), { loc: gl.getUniformLocation(p, info.name), type: info.type, size: info.size });
265
+ }
266
+ return { p, uniforms };
267
+ }
268
+ const fs = (body) => `#version 300 es\nprecision highp float;\nprecision highp int;\nin vec2 vUv;\nout vec4 fragColor;\n${COMMON}\n${body}`;
269
+
270
+ function target(w, h, format = 'rgba16f') {
271
+ const tex = gl.createTexture();
272
+ gl.bindTexture(gl.TEXTURE_2D, tex);
273
+ if (format === 'rgba8') gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA8, w, h, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);
274
+ else gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA16F, w, h, 0, gl.RGBA, gl.HALF_FLOAT, null);
275
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
276
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
277
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
278
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
279
+ const fb = gl.createFramebuffer();
280
+ gl.bindFramebuffer(gl.FRAMEBUFFER, fb);
281
+ gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, tex, 0);
282
+ if (gl.checkFramebufferStatus(gl.FRAMEBUFFER) !== gl.FRAMEBUFFER_COMPLETE) throw new Error(`framebuffer ${format} incomplete`);
283
+ return { tex, fb, w, h };
284
+ }
285
+
286
+ // The one uniform-setter wrapper (MO-SH-00a): records what each pass set.
287
+ function setPass(name, prog, uniforms, logAs, record = true) {
288
+ gl.useProgram(prog.p);
289
+ let unit = 0;
290
+ for (const [key, value] of Object.entries(uniforms)) {
291
+ const u = prog.uniforms.get(key);
292
+ if (!u) continue;
293
+ if (value && value.tex) { gl.activeTexture(gl.TEXTURE0 + unit); gl.bindTexture(gl.TEXTURE_2D, value.tex); gl.uniform1i(u.loc, unit); unit++; continue; }
294
+ switch (u.type) {
295
+ case gl.FLOAT: gl.uniform1f(u.loc, value); break;
296
+ case gl.INT: case gl.BOOL: gl.uniform1i(u.loc, Number(value)); break;
297
+ case gl.UNSIGNED_INT: gl.uniform1ui(u.loc, value >>> 0); break;
298
+ case gl.FLOAT_VEC2: gl.uniform2fv(u.loc, value); break;
299
+ case gl.FLOAT_VEC3: gl.uniform3fv(u.loc, u.size > 1 ? new Float32Array(value.flat().concat(Array(Math.max(0, u.size * 3 - value.flat().length)).fill(0))) : value); break;
300
+ default: break;
301
+ }
302
+ }
303
+ if (logAs) {
304
+ const entry = frameLog.passes[logAs] || (frameLog.passes[logAs] = { draws: 0, uniforms: {} });
305
+ if (record) for (const [key, value] of Object.entries(uniforms)) if (!(value && value.tex)) entry.uniforms[key] = value;
306
+ }
307
+ }
308
+ function drawQuad(dest, logAs) {
309
+ gl.bindFramebuffer(gl.FRAMEBUFFER, dest ? dest.fb : null);
310
+ gl.viewport(0, 0, dest ? dest.w : PW, dest ? dest.h : PH);
311
+ gl.bindVertexArray(quad);
312
+ gl.drawArrays(gl.TRIANGLES, 0, 3);
313
+ if (logAs) frameLog.passes[logAs].draws++;
314
+ }
315
+
316
+ window.motionSetup = async (config) => {
317
+ S = config.scale || 1; W = config.width; H = config.height; PW = W * S; PH = H * S;
318
+ const canvas = document.createElement('canvas');
319
+ canvas.width = PW; canvas.height = PH;
320
+ gl = canvas.getContext('webgl2', { antialias: false, alpha: false, depth: false, stencil: false, preserveDrawingBuffer: false, premultipliedAlpha: false, powerPreference: 'high-performance' });
321
+ if (!gl) return { webgl2: false, error: 'canvas.getContext("webgl2") returned null' };
322
+ const ext = gl.getExtension('WEBGL_debug_renderer_info');
323
+ const renderer = ext ? gl.getParameter(ext.UNMASKED_RENDERER_WEBGL) : 'unknown (debug-info extension unavailable)';
324
+ if (!gl.getExtension('EXT_color_buffer_float') && !gl.getExtension('EXT_color_buffer_half_float')) {
325
+ return { webgl2: true, renderer, error: 'half-float render targets unavailable (EXT_color_buffer_float)' };
326
+ }
327
+ programs = Object.fromEntries(Object.entries(FRAG).map(([k, body]) => [k, program(VERT, fs(body))]));
328
+ quad = gl.createVertexArray();
329
+ gl.bindVertexArray(quad);
330
+ const qb = gl.createBuffer();
331
+ gl.bindBuffer(gl.ARRAY_BUFFER, qb);
332
+ gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([-1, -1, 3, -1, -1, 3]), gl.STATIC_DRAW);
333
+ for (const prog of Object.values(programs)) {
334
+ const loc = gl.getAttribLocation(prog.p, 'a_pos');
335
+ if (loc >= 0) { gl.enableVertexAttribArray(loc); gl.vertexAttribPointer(loc, 2, gl.FLOAT, false, 0, 0); }
336
+ }
337
+ lineProg = program(LINE_VERT, LINE_FRAG);
338
+ lineVao = gl.createVertexArray();
339
+ gl.bindVertexArray(lineVao);
340
+ const corner = gl.createBuffer();
341
+ gl.bindBuffer(gl.ARRAY_BUFFER, corner);
342
+ gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([0, -1, 1, -1, 0, 1, 1, -1, 1, 1, 0, 1]), gl.STATIC_DRAW);
343
+ const posLoc = gl.getAttribLocation(lineProg.p, 'a_pos');
344
+ gl.enableVertexAttribArray(posLoc); gl.vertexAttribPointer(posLoc, 2, gl.FLOAT, false, 0, 0);
345
+ lineBuf = gl.createBuffer();
346
+ gl.bindBuffer(gl.ARRAY_BUFFER, lineBuf);
347
+ const stride = 9 * 4;
348
+ for (const [name, size, offset] of [['i_a', 2, 0], ['i_b', 2, 2], ['i_color', 4, 4], ['i_width', 1, 8]]) {
349
+ const loc = gl.getAttribLocation(lineProg.p, name);
350
+ gl.enableVertexAttribArray(loc); gl.vertexAttribPointer(loc, size, gl.FLOAT, false, stride, offset * 4); gl.vertexAttribDivisor(loc, 1);
351
+ }
352
+ gl.bindVertexArray(null);
353
+ rt = { scene: target(PW, PH), acc: target(PW, PH), a: target(PW, PH), b: target(PW, PH), ring: [target(PW, PH), target(PW, PH)], final: target(PW, PH, 'rgba8'), mips: [], ups: [] };
354
+ let w = W >> 1, h = H >> 1;
355
+ for (let i = 0; i < 7; i++) { rt.mips.push(target(Math.max(2, w), Math.max(2, h))); rt.ups.push(target(Math.max(2, w), Math.max(2, h))); w >>= 1; h >>= 1; }
356
+ rt.ringFrames = [];
357
+ canvases = {};
358
+ textures = {};
359
+ for (const name of ['type', 'flat']) {
360
+ const c = document.createElement('canvas');
361
+ c.width = PW; c.height = PH;
362
+ canvases[name] = c.getContext('2d', { alpha: true, willReadFrequently: false });
363
+ textures[name] = gl.createTexture();
364
+ gl.bindTexture(gl.TEXTURE_2D, textures[name]);
365
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
366
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
367
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
368
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
369
+ }
370
+ pbo = gl.createBuffer();
371
+ gl.bindBuffer(gl.PIXEL_PACK_BUFFER, pbo);
372
+ gl.bufferData(gl.PIXEL_PACK_BUFFER, PW * PH * 4, gl.STREAM_READ);
373
+ gl.bindBuffer(gl.PIXEL_PACK_BUFFER, null);
374
+ const probe = gl.getError();
375
+ return { webgl2: true, renderer, glError: probe };
376
+ };
377
+
378
+ window.motionConnect = (port) => new Promise((resolve, reject) => {
379
+ const socket = new WebSocket(`ws://127.0.0.1:${port}`);
380
+ socket.binaryType = 'arraybuffer';
381
+ socket.onopen = () => { window.__motionSocket = socket; resolve(true); };
382
+ socket.onerror = () => reject(new Error('frame WebSocket could not connect'));
383
+ });
384
+
385
+ function upload(name) {
386
+ gl.bindTexture(gl.TEXTURE_2D, textures[name]);
387
+ gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);
388
+ gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);
389
+ gl.pixelStorei(gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, gl.NONE);
390
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, canvases[name].canvas);
391
+ gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);
392
+ }
393
+
394
+ function drawType(sample) {
395
+ const c = canvases.type;
396
+ c.setTransform(1, 0, 0, 1, 0, 0);
397
+ c.clearRect(0, 0, PW, PH);
398
+ for (const [key, x, y, s, fill, alpha] of sample.glyphs) {
399
+ const path = paths.get(key);
400
+ if (!path) throw new Error(`glyph outline ${key} was never defined`);
401
+ c.globalAlpha = alpha;
402
+ c.fillStyle = fill;
403
+ c.setTransform(s * S, 0, 0, s * S, x * S, y * S);
404
+ c.fill(path);
405
+ }
406
+ c.setTransform(S, 0, 0, S, 0, 0);
407
+ c.lineCap = 'round'; c.lineJoin = 'round';
408
+ for (const st of sample.strokes || []) {
409
+ c.globalAlpha = st.alpha; c.strokeStyle = st.fill; c.lineWidth = st.width;
410
+ c.beginPath();
411
+ for (const flat of st.polylines) {
412
+ c.moveTo(flat[0], flat[1]);
413
+ for (let i = 2; i < flat.length; i += 2) c.lineTo(flat[i], flat[i + 1]);
414
+ if (flat.length === 2) c.lineTo(flat[0] + 0.01, flat[1]);
415
+ }
416
+ c.stroke();
417
+ }
418
+ c.globalAlpha = 1;
419
+ return sample.glyphs.length + (sample.strokes || []).length;
420
+ }
421
+
422
+ function drawFlat(sample) {
423
+ const c = canvases.flat;
424
+ c.setTransform(1, 0, 0, 1, 0, 0);
425
+ c.clearRect(0, 0, PW, PH);
426
+ c.setTransform(S, 0, 0, S, 0, 0);
427
+ const items = [...(sample.terminal || []), ...(sample.rects || [])];
428
+ for (const r of items) { c.globalAlpha = r.alpha; c.fillStyle = r.fill; c.fillRect(r.x, r.y, r.w, r.h); }
429
+ c.globalAlpha = 1;
430
+ return items.length;
431
+ }
432
+
433
+ function drawRules(sample, uniforms) {
434
+ const rules = sample.rules || [];
435
+ if (!rules.length) return 0;
436
+ const data = new Float32Array(rules.length * 9);
437
+ rules.forEach((r, i) => {
438
+ const [lr, lg, lb] = hexLinear(r.fill);
439
+ data.set([r.x0, r.y0, r.x1, r.y1, lr, lg, lb, r.alpha, r.width], i * 9);
440
+ });
441
+ gl.useProgram(lineProg.p);
442
+ gl.uniform2f(lineProg.uniforms.get('u_res').loc, W, H);
443
+ gl.uniform1f(lineProg.uniforms.get('u_px').loc, S);
444
+ gl.bindVertexArray(lineVao);
445
+ gl.bindBuffer(gl.ARRAY_BUFFER, lineBuf);
446
+ gl.bufferData(gl.ARRAY_BUFFER, data, gl.STREAM_DRAW);
447
+ gl.bindFramebuffer(gl.FRAMEBUFFER, rt.scene.fb);
448
+ gl.viewport(0, 0, PW, PH);
449
+ gl.enable(gl.BLEND);
450
+ gl.blendFuncSeparate(gl.ONE, gl.ONE_MINUS_SRC_ALPHA, gl.ZERO, gl.ONE);
451
+ gl.drawArraysInstanced(gl.TRIANGLES, 0, 6, rules.length);
452
+ gl.disable(gl.BLEND);
453
+ gl.bindVertexArray(null);
454
+ const entry = frameLog.passes['swiss-grid'] || (frameLog.passes['swiss-grid'] = { draws: 0, uniforms: {} });
455
+ Object.assign(entry.uniforms, uniforms);
456
+ entry.draws++;
457
+ return rules.length;
458
+ }
459
+
460
+ function renderSample(spec, sample, index, count) {
461
+ setPass('clear', programs.clear, { u_color: hexLinear(sample.background) });
462
+ drawQuad(rt.scene);
463
+ if (sample.tidal) {
464
+ const tidal = sample.tidal;
465
+ setPass('tidal-gradient', programs.tidal, {
466
+ u_time: tidal.u_time, u_seed: tidal.u_seed, u_stopA: hexLinear(tidal.u_paletteStops[0]), u_stopB: hexLinear(tidal.u_paletteStops[1]),
467
+ u_base: hexLinear(sample.background), u_flowSpeed: tidal.u_flowSpeed, u_warpAmount: tidal.u_warpAmount, u_curlStrength: tidal.u_curlStrength,
468
+ u_surge: tidal.u_surge, u_ditherAmount: tidal.u_ditherAmount, u_octaves: tidal.u_octaves, u_res: [W, H],
469
+ }, 'tidal-gradient', index === spec.mid);
470
+ drawQuad(rt.scene, 'tidal-gradient');
471
+ }
472
+ const flatCount = drawFlat(sample);
473
+ if (flatCount) {
474
+ upload('flat');
475
+ const logAs = spec.passes.terminalUi && sample.terminal ? 'terminal-ui' : null;
476
+ setPass('layer', programs.layer, { u_tex: { tex: textures.flat }, ...(logAs ? spec.passes.terminalUi : {}) }, logAs, index === spec.mid);
477
+ gl.enable(gl.BLEND);
478
+ gl.blendFuncSeparate(gl.ONE, gl.ONE_MINUS_SRC_ALPHA, gl.ZERO, gl.ONE);
479
+ drawQuad(rt.scene, logAs);
480
+ gl.disable(gl.BLEND);
481
+ }
482
+ if (spec.passes.swissGrid) drawRules(sample, spec.passes.swissGrid);
483
+ else if ((sample.rules || []).length) drawRules(sample, {});
484
+ const typeCount = drawType(sample);
485
+ if (typeCount) {
486
+ upload('type');
487
+ setPass('layer', programs.layer, { u_tex: { tex: textures.type } });
488
+ gl.enable(gl.BLEND);
489
+ gl.blendFuncSeparate(gl.ONE, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
490
+ drawQuad(rt.scene);
491
+ gl.disable(gl.BLEND);
492
+ }
493
+ setPass('accumulate', programs.accumulate, { u_tex: { tex: rt.scene.tex }, u_weight: 1 / count, u_maskWeight: index === spec.mid ? 1 : 0 });
494
+ gl.enable(gl.BLEND);
495
+ gl.blendFunc(gl.ONE, gl.ONE);
496
+ drawQuad(rt.acc);
497
+ gl.disable(gl.BLEND);
498
+ }
499
+
500
+ function copy(src, dst) {
501
+ gl.bindFramebuffer(gl.READ_FRAMEBUFFER, src.fb);
502
+ gl.bindFramebuffer(gl.DRAW_FRAMEBUFFER, dst.fb);
503
+ gl.blitFramebuffer(0, 0, src.w, src.h, 0, 0, dst.w, dst.h, gl.COLOR_BUFFER_BIT, gl.NEAREST);
504
+ gl.bindFramebuffer(gl.READ_FRAMEBUFFER, null);
505
+ gl.bindFramebuffer(gl.DRAW_FRAMEBUFFER, null);
506
+ }
507
+
508
+ function filters(spec, order) {
509
+ let src = rt.acc;
510
+ const next = () => (src === rt.a ? rt.b : rt.a);
511
+ for (const pass of order) {
512
+ if (pass === 'crt' && spec.passes.crt) {
513
+ const u = spec.passes.crt;
514
+ if (!u.persistenceEnabled || rt.ringShot !== u.shotKey || spec.resetRing) { rt.ringFrames = []; rt.ringShot = u.shotKey; }
515
+ const prev = rt.ringFrames.filter((f) => f.frame < spec.frame && f.frame >= spec.frame - 2).sort((a, b) => b.frame - a.frame);
516
+ const dst = next();
517
+ setPass('crt', programs.crt, {
518
+ u_tex: { tex: src.tex }, u_prev1: { tex: (prev[0] || { rt: rt.ring[0] }).rt.tex }, u_prev2: { tex: (prev[1] || { rt: rt.ring[1] }).rt.tex },
519
+ u_prevCount: u.persistenceEnabled ? prev.length : 0, u_res: [W, H],
520
+ u_time: u.u_time, u_seed: u.u_seed, u_scanlineFreqPerFrame: u.u_scanlineFreqPerFrame, u_scanlineDepth: u.u_scanlineDepth,
521
+ u_phosphorPersistence: u.u_phosphorPersistence, u_curvature: u.u_curvature, u_vignette: u.u_vignette,
522
+ u_triadMaskAmount: u.u_triadMaskAmount, u_flickerAmp: u.u_flickerAmp, u_flickerFreqHz: u.u_flickerFreqHz,
523
+ }, 'crt');
524
+ drawQuad(dst, 'crt');
525
+ if (u.persistenceEnabled) {
526
+ const slot = rt.ringFrames.length < 2 ? rt.ring[rt.ringFrames.length] : rt.ringFrames.sort((a, b) => a.frame - b.frame)[0].rt;
527
+ rt.ringFrames = rt.ringFrames.filter((f) => f.rt !== slot);
528
+ copy(src, slot);
529
+ rt.ringFrames.push({ frame: spec.frame, rt: slot });
530
+ }
531
+ src = dst;
532
+ }
533
+ if (pass === 'dither' && spec.passes.dither) {
534
+ const u = spec.passes.dither;
535
+ const dst = next();
536
+ setPass('dither', programs.dither, { u_tex: { tex: src.tex }, u_ditherMode: u.u_ditherMode, u_paletteSize: u.u_paletteSize, u_pixelScale: u.u_pixelScale, u_ditherStrength: u.u_ditherStrength, u_seed: u.u_seed, u_pxScale: S }, 'dither');
537
+ drawQuad(dst, 'dither');
538
+ src = dst;
539
+ }
540
+ if (pass === 'glitch' && spec.passes.glitch) {
541
+ const u = spec.passes.glitch;
542
+ const dst = next();
543
+ setPass('glitch', programs.glitch, { u_tex: { tex: src.tex }, u_active: u.u_active, u_count: u.u_slices.length, u_slices: u.u_slices, u_rgbSplitPx: u.u_rgbSplitPx, u_intensity: u.u_intensity, u_seed: u.u_seed, u_res: [W, H] }, 'glitch');
544
+ drawQuad(dst, 'glitch');
545
+ src = dst;
546
+ }
547
+ }
548
+ return src;
549
+ }
550
+
551
+ function post(src, p) {
552
+ setPass('prefilter', programs.prefilter, { u_tex: { tex: src.tex }, u_texel: [1 / PW, 1 / PH], u_threshold: p.bloomThreshold, u_knee: p.bloomKnee });
553
+ drawQuad(rt.mips[0]);
554
+ for (let i = 1; i < rt.mips.length; i++) {
555
+ const s = rt.mips[i - 1];
556
+ setPass('down', programs.down, { u_tex: { tex: s.tex }, u_texel: [1 / s.w, 1 / s.h] });
557
+ drawQuad(rt.mips[i]);
558
+ }
559
+ let prevTex = rt.mips[rt.mips.length - 1].tex;
560
+ for (let i = rt.mips.length - 2; i >= 0; i--) {
561
+ const small = i === rt.mips.length - 2 ? rt.mips[rt.mips.length - 1] : rt.ups[i + 1];
562
+ setPass('up', programs.up, { u_tex: { tex: prevTex }, u_prev: { tex: rt.mips[i].tex }, u_texel: [1 / small.w, 1 / small.h], u_radius: 0.5 + p.bloomRadius });
563
+ drawQuad(rt.ups[i]);
564
+ prevTex = rt.ups[i].tex;
565
+ }
566
+ setPass('final', programs.final, {
567
+ u_tex: { tex: src.tex }, u_bloom: { tex: rt.ups[0].tex }, u_halo: { tex: rt.ups[3].tex },
568
+ u_exposure: p.exposure, u_bloomAmt: p.bloom / 3, u_halation: p.halation, u_ca: p.ca, u_grain: p.grain, u_vignette: p.vignette,
569
+ u_fade: p.fade, u_flash: p.flash, u_zoom: p.zoom, u_invert: p.invert ? 1 : 0, u_grainSeed: p.grainSeed % 4096,
570
+ u_shake: p.shake, u_res: [W, H], u_flashColor: [0.82, 0.82, 0.8],
571
+ });
572
+ drawQuad(rt.final);
573
+ }
574
+
575
+ async function readback() {
576
+ const out = new Uint8Array(PW * PH * 4);
577
+ gl.bindFramebuffer(gl.READ_FRAMEBUFFER, rt.final.fb);
578
+ gl.bindBuffer(gl.PIXEL_PACK_BUFFER, pbo);
579
+ gl.readPixels(0, 0, PW, PH, gl.RGBA, gl.UNSIGNED_BYTE, 0);
580
+ const sync = gl.fenceSync(gl.SYNC_GPU_COMMANDS_COMPLETE, 0);
581
+ gl.flush();
582
+ for (let i = 0; ; i++) {
583
+ const status = gl.clientWaitSync(sync, 0, 0);
584
+ if (status === gl.ALREADY_SIGNALED || status === gl.CONDITION_SATISFIED) break;
585
+ if (status === gl.WAIT_FAILED) throw new Error('GPU fence wait failed');
586
+ if (i > 200000) throw new Error('GPU fence timed out');
587
+ await new Promise((resolve) => setTimeout(resolve, 0));
588
+ }
589
+ gl.deleteSync(sync);
590
+ gl.getBufferSubData(gl.PIXEL_PACK_BUFFER, 0, out);
591
+ gl.bindBuffer(gl.PIXEL_PACK_BUFFER, null);
592
+ gl.bindFramebuffer(gl.READ_FRAMEBUFFER, null);
593
+ return out;
594
+ }
595
+
596
+ // One output frame. `order` is the preset's filter order after the background passes.
597
+ window.motionFrame = async (spec) => {
598
+ const began = performance.now();
599
+ frameLog = { passes: {} };
600
+ for (const [key, def] of Object.entries(spec.defs || {})) paths.set(key, new Path2D(def.path));
601
+ gl.bindFramebuffer(gl.FRAMEBUFFER, rt.acc.fb);
602
+ gl.viewport(0, 0, PW, PH);
603
+ gl.clearColor(0, 0, 0, 0);
604
+ gl.clear(gl.COLOR_BUFFER_BIT);
605
+ spec.samples.forEach((sample, i) => renderSample(spec, sample, i, spec.samples.length));
606
+ const filtered = filters(spec, spec.order || []);
607
+ post(filtered, spec.post);
608
+ if (spec.prime) return { primed: true };
609
+ const bytes = await readback();
610
+ const renderMs = performance.now() - began;
611
+ const err = gl.getError();
612
+ if (err !== gl.NO_ERROR) throw new Error(`WebGL error 0x${err.toString(16)} on frame ${spec.frame}`);
613
+ const passes = Object.fromEntries(Object.entries(frameLog.passes).map(([k, v]) => [k, { draws: v.draws, uniforms: v.uniforms }]));
614
+ if (spec.egress === 'websocket') {
615
+ window.__motionSocket.send(bytes.buffer);
616
+ return { passes, renderMs };
617
+ }
618
+ let binary = '';
619
+ for (let i = 0; i < bytes.length; i += 0x8000) binary += String.fromCharCode.apply(null, bytes.subarray(i, i + 0x8000));
620
+ return { passes, renderMs, rgbaBase64: btoa(binary) };
621
+ };
622
+ })();