kpress 0.1.0__tar.gz

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 (265) hide show
  1. kpress-0.1.0/.agents/skills/flowmark/SKILL.md +61 -0
  2. kpress-0.1.0/.agents/skills/pprose-common-edit/SKILL.md +44 -0
  3. kpress-0.1.0/.agents/skills/pprose-compare/SKILL.md +50 -0
  4. kpress-0.1.0/.agents/skills/pprose-copy-edit/SKILL.md +44 -0
  5. kpress-0.1.0/.agents/skills/pprose-eval/SKILL.md +64 -0
  6. kpress-0.1.0/.agents/skills/pprose-full-edit/SKILL.md +43 -0
  7. kpress-0.1.0/.agents/skills/pprose-review/SKILL.md +48 -0
  8. kpress-0.1.0/.agents/skills/repren/SKILL.md +47 -0
  9. kpress-0.1.0/.agents/skills/tbd/SKILL.md +293 -0
  10. kpress-0.1.0/.agents/skills/using-kpress/SKILL.md +76 -0
  11. kpress-0.1.0/.claude/.gitignore +2 -0
  12. kpress-0.1.0/.claude/hooks/tbd-closing-reminder.sh +15 -0
  13. kpress-0.1.0/.claude/scripts/ensure-gh-cli.sh +123 -0
  14. kpress-0.1.0/.claude/scripts/tbd-session.sh +27 -0
  15. kpress-0.1.0/.claude/settings.json +47 -0
  16. kpress-0.1.0/.claude/skills/flowmark/SKILL.md +61 -0
  17. kpress-0.1.0/.claude/skills/pprose-common-edit/SKILL.md +44 -0
  18. kpress-0.1.0/.claude/skills/pprose-compare/SKILL.md +50 -0
  19. kpress-0.1.0/.claude/skills/pprose-copy-edit/SKILL.md +44 -0
  20. kpress-0.1.0/.claude/skills/pprose-eval/SKILL.md +64 -0
  21. kpress-0.1.0/.claude/skills/pprose-full-edit/SKILL.md +43 -0
  22. kpress-0.1.0/.claude/skills/pprose-review/SKILL.md +48 -0
  23. kpress-0.1.0/.claude/skills/repren/SKILL.md +47 -0
  24. kpress-0.1.0/.claude/skills/tbd/SKILL.md +293 -0
  25. kpress-0.1.0/.claude/skills/using-kpress/SKILL.md +76 -0
  26. kpress-0.1.0/.codex/ensure-gh-cli.sh +123 -0
  27. kpress-0.1.0/.codex/hooks.json +47 -0
  28. kpress-0.1.0/.codex/tbd-closing-reminder.sh +15 -0
  29. kpress-0.1.0/.codex/tbd-session.sh +27 -0
  30. kpress-0.1.0/.copier-answers.yml +9 -0
  31. kpress-0.1.0/.flowmarkignore +23 -0
  32. kpress-0.1.0/.github/workflows/ci.yml +146 -0
  33. kpress-0.1.0/.github/workflows/publish.yml +71 -0
  34. kpress-0.1.0/.gitignore +185 -0
  35. kpress-0.1.0/.npmrc +8 -0
  36. kpress-0.1.0/.tbd/.gitattributes +2 -0
  37. kpress-0.1.0/.tbd/.gitignore +21 -0
  38. kpress-0.1.0/.tbd/config.yml +103 -0
  39. kpress-0.1.0/AGENTS.md +101 -0
  40. kpress-0.1.0/CONTRIBUTING.md +34 -0
  41. kpress-0.1.0/LICENSE +235 -0
  42. kpress-0.1.0/Makefile +77 -0
  43. kpress-0.1.0/NOTICE.md +36 -0
  44. kpress-0.1.0/PKG-INFO +177 -0
  45. kpress-0.1.0/README.md +134 -0
  46. kpress-0.1.0/SECURITY.md +42 -0
  47. kpress-0.1.0/SUPPLY-CHAIN-SECURITY.md +86 -0
  48. kpress-0.1.0/TODO.md +108 -0
  49. kpress-0.1.0/biome.json +35 -0
  50. kpress-0.1.0/devtools/biome.py +23 -0
  51. kpress-0.1.0/devtools/css_to_oklch.py +211 -0
  52. kpress-0.1.0/devtools/js_dom_tests.py +18 -0
  53. kpress-0.1.0/devtools/lint.py +97 -0
  54. kpress-0.1.0/devtools/npm_tools.py +23 -0
  55. kpress-0.1.0/devtools/public_hygiene.py +150 -0
  56. kpress-0.1.0/devtools/tsc_check.py +18 -0
  57. kpress-0.1.0/docs/README.md +45 -0
  58. kpress-0.1.0/docs/development.md +109 -0
  59. kpress-0.1.0/docs/installation.md +30 -0
  60. kpress-0.1.0/docs/kpress-design.md +2082 -0
  61. kpress-0.1.0/docs/kpress-e2e-testing.runbook.md +236 -0
  62. kpress-0.1.0/docs/kpress-icons.md +11 -0
  63. kpress-0.1.0/docs/kpress-static-publish.runbook.md +102 -0
  64. kpress-0.1.0/docs/kpress-validation.runbook.md +551 -0
  65. kpress-0.1.0/docs/publishing.md +67 -0
  66. kpress-0.1.0/docs/releases/0.1.0.md +37 -0
  67. kpress-0.1.0/examples/.gitignore +3 -0
  68. kpress-0.1.0/examples/README.md +132 -0
  69. kpress-0.1.0/examples/_runner.py +47 -0
  70. kpress-0.1.0/examples/single-doc/build.py +96 -0
  71. kpress-0.1.0/examples/single-doc/doc.md +22 -0
  72. kpress-0.1.0/examples/static-site/build.py +97 -0
  73. kpress-0.1.0/examples/static-site/content/demo/extensions.css +22 -0
  74. kpress-0.1.0/examples/static-site/content/demo/extensions.js +84 -0
  75. kpress-0.1.0/examples/static-site/content/extensions.md +53 -0
  76. kpress-0.1.0/examples/static-site/content/guides/getting-started.md +42 -0
  77. kpress-0.1.0/examples/static-site/content/guides/markdown-features.md +50 -0
  78. kpress-0.1.0/examples/static-site/content/index.md +29 -0
  79. kpress-0.1.0/examples/static-site/content/reference/api.md +33 -0
  80. kpress-0.1.0/examples/static-site/kpress.yml +48 -0
  81. kpress-0.1.0/examples/wrapped-site/build.py +276 -0
  82. kpress-0.1.0/examples/wrapped-site/content/blog/announcing.md +14 -0
  83. kpress-0.1.0/examples/wrapped-site/content/docs/configuration.md +20 -0
  84. kpress-0.1.0/examples/wrapped-site/content/docs/installation.md +20 -0
  85. kpress-0.1.0/examples/wrapped-site/content/index.md +14 -0
  86. kpress-0.1.0/examples/wrapped-site/sitemap.py +27 -0
  87. kpress-0.1.0/examples/wrapped-site/templates/layout.html +62 -0
  88. kpress-0.1.0/lefthook.yml +61 -0
  89. kpress-0.1.0/package-lock.json +1707 -0
  90. kpress-0.1.0/package.json +16 -0
  91. kpress-0.1.0/pyproject.toml +206 -0
  92. kpress-0.1.0/src/kpress/__init__.py +55 -0
  93. kpress-0.1.0/src/kpress/_version.py +14 -0
  94. kpress-0.1.0/src/kpress/cli.py +371 -0
  95. kpress-0.1.0/src/kpress/contract.py +396 -0
  96. kpress-0.1.0/src/kpress/errors.py +27 -0
  97. kpress-0.1.0/src/kpress/format/__init__.py +56 -0
  98. kpress-0.1.0/src/kpress/format/assets.py +301 -0
  99. kpress-0.1.0/src/kpress/format/markdown.py +993 -0
  100. kpress-0.1.0/src/kpress/format/model.py +267 -0
  101. kpress-0.1.0/src/kpress/format/pdf.py +152 -0
  102. kpress-0.1.0/src/kpress/format/render.py +614 -0
  103. kpress-0.1.0/src/kpress/format/sanitize.py +509 -0
  104. kpress-0.1.0/src/kpress/format/static/css/components.css +1840 -0
  105. kpress-0.1.0/src/kpress/format/static/css/document.css +459 -0
  106. kpress-0.1.0/src/kpress/format/static/css/page-reset.css +12 -0
  107. kpress-0.1.0/src/kpress/format/static/css/print.css +351 -0
  108. kpress-0.1.0/src/kpress/format/static/css/style-tokens.css +454 -0
  109. kpress-0.1.0/src/kpress/format/static/css/syntax.css +263 -0
  110. kpress-0.1.0/src/kpress/format/static/css/theme-dark.css +11 -0
  111. kpress-0.1.0/src/kpress/format/static/css/theme-light.css +14 -0
  112. kpress-0.1.0/src/kpress/format/static/fonts/pt-serif-latin-400-italic.woff2 +0 -0
  113. kpress-0.1.0/src/kpress/format/static/fonts/pt-serif-latin-400-normal.woff2 +0 -0
  114. kpress-0.1.0/src/kpress/format/static/fonts/pt-serif-latin-700-italic.woff2 +0 -0
  115. kpress-0.1.0/src/kpress/format/static/fonts/pt-serif-latin-700-normal.woff2 +0 -0
  116. kpress-0.1.0/src/kpress/format/static/fonts/source-sans-3-latin-wght-italic.woff2 +0 -0
  117. kpress-0.1.0/src/kpress/format/static/fonts/source-sans-3-latin-wght-normal.woff2 +0 -0
  118. kpress-0.1.0/src/kpress/format/static/icons/icons.svg +63 -0
  119. kpress-0.1.0/src/kpress/format/static/js/code-copy.js +60 -0
  120. kpress-0.1.0/src/kpress/format/static/js/diagrams.js +109 -0
  121. kpress-0.1.0/src/kpress/format/static/js/host.js +246 -0
  122. kpress-0.1.0/src/kpress/format/static/js/icons.js +15 -0
  123. kpress-0.1.0/src/kpress/format/static/js/menu.js +73 -0
  124. kpress-0.1.0/src/kpress/format/static/js/overlay.js +165 -0
  125. kpress-0.1.0/src/kpress/format/static/js/runtime.js +505 -0
  126. kpress-0.1.0/src/kpress/format/static/js/settings-widget.js +184 -0
  127. kpress-0.1.0/src/kpress/format/static/js/tables.js +45 -0
  128. kpress-0.1.0/src/kpress/format/static/js/tabs.js +175 -0
  129. kpress-0.1.0/src/kpress/format/static/js/theme-bootstrap.js +43 -0
  130. kpress-0.1.0/src/kpress/format/static/js/theme.js +148 -0
  131. kpress-0.1.0/src/kpress/format/static/js/toc.js +310 -0
  132. kpress-0.1.0/src/kpress/format/static/js/tooltips.js +795 -0
  133. kpress-0.1.0/src/kpress/format/static/js/video-popover.js +116 -0
  134. kpress-0.1.0/src/kpress/format/static/js/viewport.js +163 -0
  135. kpress-0.1.0/src/kpress/format/static/katex/VERSION +1 -0
  136. kpress-0.1.0/src/kpress/format/static/katex/auto-render.min.js +1 -0
  137. kpress-0.1.0/src/kpress/format/static/katex/fonts/KaTeX_AMS-Regular.woff2 +0 -0
  138. kpress-0.1.0/src/kpress/format/static/katex/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
  139. kpress-0.1.0/src/kpress/format/static/katex/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
  140. kpress-0.1.0/src/kpress/format/static/katex/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
  141. kpress-0.1.0/src/kpress/format/static/katex/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
  142. kpress-0.1.0/src/kpress/format/static/katex/fonts/KaTeX_Main-Bold.woff2 +0 -0
  143. kpress-0.1.0/src/kpress/format/static/katex/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
  144. kpress-0.1.0/src/kpress/format/static/katex/fonts/KaTeX_Main-Italic.woff2 +0 -0
  145. kpress-0.1.0/src/kpress/format/static/katex/fonts/KaTeX_Main-Regular.woff2 +0 -0
  146. kpress-0.1.0/src/kpress/format/static/katex/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
  147. kpress-0.1.0/src/kpress/format/static/katex/fonts/KaTeX_Math-Italic.woff2 +0 -0
  148. kpress-0.1.0/src/kpress/format/static/katex/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
  149. kpress-0.1.0/src/kpress/format/static/katex/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
  150. kpress-0.1.0/src/kpress/format/static/katex/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
  151. kpress-0.1.0/src/kpress/format/static/katex/fonts/KaTeX_Script-Regular.woff2 +0 -0
  152. kpress-0.1.0/src/kpress/format/static/katex/fonts/KaTeX_Size1-Regular.woff2 +0 -0
  153. kpress-0.1.0/src/kpress/format/static/katex/fonts/KaTeX_Size2-Regular.woff2 +0 -0
  154. kpress-0.1.0/src/kpress/format/static/katex/fonts/KaTeX_Size3-Regular.woff2 +0 -0
  155. kpress-0.1.0/src/kpress/format/static/katex/fonts/KaTeX_Size4-Regular.woff2 +0 -0
  156. kpress-0.1.0/src/kpress/format/static/katex/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
  157. kpress-0.1.0/src/kpress/format/static/katex/katex-init.js +44 -0
  158. kpress-0.1.0/src/kpress/format/static/katex/katex.min.css +1 -0
  159. kpress-0.1.0/src/kpress/format/static/katex/katex.min.js +1 -0
  160. kpress-0.1.0/src/kpress/format/templates/page.html.jinja +33 -0
  161. kpress-0.1.0/src/kpress/format/templating.py +47 -0
  162. kpress-0.1.0/src/kpress/format/theme.py +49 -0
  163. kpress-0.1.0/src/kpress/format/validate.py +22 -0
  164. kpress-0.1.0/src/kpress/licenses/katex.txt +21 -0
  165. kpress-0.1.0/src/kpress/licenses/lucide.txt +59 -0
  166. kpress-0.1.0/src/kpress/licenses/pt-serif.txt +93 -0
  167. kpress-0.1.0/src/kpress/licenses/source-sans-3.txt +94 -0
  168. kpress-0.1.0/src/kpress/models.py +82 -0
  169. kpress-0.1.0/src/kpress/output.py +31 -0
  170. kpress-0.1.0/src/kpress/publish/__init__.py +43 -0
  171. kpress-0.1.0/src/kpress/publish/assets/__init__.py +20 -0
  172. kpress-0.1.0/src/kpress/publish/assets/copy.py +164 -0
  173. kpress-0.1.0/src/kpress/publish/build.py +758 -0
  174. kpress-0.1.0/src/kpress/publish/cache.py +77 -0
  175. kpress-0.1.0/src/kpress/publish/capability.py +189 -0
  176. kpress-0.1.0/src/kpress/publish/config.py +591 -0
  177. kpress-0.1.0/src/kpress/publish/discover.py +89 -0
  178. kpress-0.1.0/src/kpress/publish/frontmatter.py +108 -0
  179. kpress-0.1.0/src/kpress/publish/manifest.py +135 -0
  180. kpress-0.1.0/src/kpress/publish/optimize.py +466 -0
  181. kpress-0.1.0/src/kpress/publish/optimizer_tool/package-lock.json +650 -0
  182. kpress-0.1.0/src/kpress/publish/optimizer_tool/package.json +8 -0
  183. kpress-0.1.0/src/kpress/publish/routes.py +190 -0
  184. kpress-0.1.0/src/kpress/publish/site_files.py +72 -0
  185. kpress-0.1.0/src/kpress/py.typed +1 -0
  186. kpress-0.1.0/src/kpress/runtime.py +443 -0
  187. kpress-0.1.0/src/kpress/workflow/__init__.py +18 -0
  188. kpress-0.1.0/src/kpress/workflow/convert.py +66 -0
  189. kpress-0.1.0/src/kpress/workflow/export.py +37 -0
  190. kpress-0.1.0/src/kpress/workflow/format.py +49 -0
  191. kpress-0.1.0/src/kpress/workflow/paste.py +25 -0
  192. kpress-0.1.0/src/kpress/workflow/workspace.py +40 -0
  193. kpress-0.1.0/tests/__init__.py +1 -0
  194. kpress-0.1.0/tests/e2e/docs/airspeed-velocity.md +1139 -0
  195. kpress-0.1.0/tests/e2e/docs/assets/showcase-figure.svg +7 -0
  196. kpress-0.1.0/tests/e2e/docs/index.md +251 -0
  197. kpress-0.1.0/tests/e2e/docs/reference.md +34 -0
  198. kpress-0.1.0/tests/e2e/kpress.yml +16 -0
  199. kpress-0.1.0/tests/equivalence_helpers.py +583 -0
  200. kpress-0.1.0/tests/fixtures/baselines/no-pipeline-main.sha256 +1 -0
  201. kpress-0.1.0/tests/fixtures/documents/minimal.md +3 -0
  202. kpress-0.1.0/tests/fixtures/documents/rich-components.md +50 -0
  203. kpress-0.1.0/tests/fixtures/documents/semantic-components.md +80 -0
  204. kpress-0.1.0/tests/fixtures/sites/basic/docs/about.md +3 -0
  205. kpress-0.1.0/tests/fixtures/sites/basic/docs/assets/logo.svg +1 -0
  206. kpress-0.1.0/tests/fixtures/sites/basic/docs/index.md +5 -0
  207. kpress-0.1.0/tests/fixtures/sites/basic/kpress.yml +11 -0
  208. kpress-0.1.0/tests/golden/README.md +39 -0
  209. kpress-0.1.0/tests/golden/accepted/minimal-doc/page.html +169 -0
  210. kpress-0.1.0/tests/golden/accepted/readable-vs-hashed/trees.yaml +1894 -0
  211. kpress-0.1.0/tests/golden/accepted/rich-components/page.html +219 -0
  212. kpress-0.1.0/tests/golden/accepted/semantic-components/page.html +231 -0
  213. kpress-0.1.0/tests/golden/accepted/static-site-basic/tree.yaml +1020 -0
  214. kpress-0.1.0/tests/golden/scenarios/minimal-doc.yaml +4 -0
  215. kpress-0.1.0/tests/golden/scenarios/rich-components.yaml +5 -0
  216. kpress-0.1.0/tests/golden/scenarios/semantic-components.yaml +5 -0
  217. kpress-0.1.0/tests/golden_helpers.py +118 -0
  218. kpress-0.1.0/tests/js/behaviors.test.js +177 -0
  219. kpress-0.1.0/tests/js/kpress-dom.test.js +1002 -0
  220. kpress-0.1.0/tests/js/lifecycle.test.js +241 -0
  221. kpress-0.1.0/tests/js/menu.test.js +83 -0
  222. kpress-0.1.0/tests/js/overlay.test.js +303 -0
  223. kpress-0.1.0/tests/js/runtime.test.js +457 -0
  224. kpress-0.1.0/tests/js/settings-widget.test.js +222 -0
  225. kpress-0.1.0/tests/js/theme-engine.test.js +167 -0
  226. kpress-0.1.0/tests/js/tooltips-phase1.test.js +209 -0
  227. kpress-0.1.0/tests/js/vitest.config.mjs +8 -0
  228. kpress-0.1.0/tests/test_asset_contract.py +482 -0
  229. kpress-0.1.0/tests/test_asset_manifest.py +62 -0
  230. kpress-0.1.0/tests/test_capability_probe.py +256 -0
  231. kpress-0.1.0/tests/test_clean_room_wheel.py +147 -0
  232. kpress-0.1.0/tests/test_content_card.py +81 -0
  233. kpress-0.1.0/tests/test_doctor.py +99 -0
  234. kpress-0.1.0/tests/test_document_contract.py +47 -0
  235. kpress-0.1.0/tests/test_equivalence.py +113 -0
  236. kpress-0.1.0/tests/test_examples.py +236 -0
  237. kpress-0.1.0/tests/test_font_mode.py +75 -0
  238. kpress-0.1.0/tests/test_format_render.py +526 -0
  239. kpress-0.1.0/tests/test_golden_publish.py +41 -0
  240. kpress-0.1.0/tests/test_golden_readable_vs_hashed.py +84 -0
  241. kpress-0.1.0/tests/test_golden_render.py +21 -0
  242. kpress-0.1.0/tests/test_icons.py +55 -0
  243. kpress-0.1.0/tests/test_kpress_cli.py +352 -0
  244. kpress-0.1.0/tests/test_offline_mathml.py +147 -0
  245. kpress-0.1.0/tests/test_optimize.py +271 -0
  246. kpress-0.1.0/tests/test_optimize_locked_deps.py +281 -0
  247. kpress-0.1.0/tests/test_optimized_build_assets.py +100 -0
  248. kpress-0.1.0/tests/test_output.py +34 -0
  249. kpress-0.1.0/tests/test_pdf_contract.py +130 -0
  250. kpress-0.1.0/tests/test_pipeline.py +132 -0
  251. kpress-0.1.0/tests/test_playwright_tooltips.py +63 -0
  252. kpress-0.1.0/tests/test_public_contract.py +311 -0
  253. kpress-0.1.0/tests/test_public_hygiene.py +59 -0
  254. kpress-0.1.0/tests/test_publish_cache_invalidation.py +192 -0
  255. kpress-0.1.0/tests/test_publish_discovery.py +61 -0
  256. kpress-0.1.0/tests/test_publish_frontmatter_routes.py +302 -0
  257. kpress-0.1.0/tests/test_publish_routes.py +265 -0
  258. kpress-0.1.0/tests/test_publish_workflow.py +1274 -0
  259. kpress-0.1.0/tests/test_reader_markdown_parity.py +791 -0
  260. kpress-0.1.0/tests/test_release_workflow.py +22 -0
  261. kpress-0.1.0/tests/test_runtime.py +383 -0
  262. kpress-0.1.0/tests/test_sanitize.py +171 -0
  263. kpress-0.1.0/tests/test_workflow_units.py +159 -0
  264. kpress-0.1.0/tsconfig.json +14 -0
  265. kpress-0.1.0/uv.lock +573 -0
@@ -0,0 +1,61 @@
1
+ ---
2
+ name: flowmark
3
+ description: Fast, consistent Markdown auto-formatter for typographic cleanup (smart quotes, ellipses), normalized formatting, and optional clean line wrapping for small, readable git diffs. Use when creating, editing, or normalizing Markdown (.md) files, cleaning up LLM-generated Markdown, or when the user mentions flowmark or formatting Markdown.
4
+ allowed-tools: Bash(flowmark:*), Bash(uvx:*), Read, Write
5
+ ---
6
+ <!-- DO NOT EDIT: `flowmark --install-skill` (format=f02 surface=skill-md) -->
7
+
8
+ # Flowmark - Markdown Auto-Formatter
9
+
10
+ Fast, consistent Markdown auto-formatter.
11
+ Run it on Markdown you generate or edit so committed diffs stay small and readable.
12
+ It is conservative and safe to run on every file: it never modifies code blocks or
13
+ inline code.
14
+
15
+ ## Default Usage
16
+
17
+ Format in place with all auto-formatting (typography, cleanups, semantic line breaks):
18
+
19
+ ```bash
20
+ flowmark --auto FILE # one file
21
+ flowmark --auto . # whole tree (respects .gitignore and .flowmarkignore)
22
+ ```
23
+
24
+ Omit `--auto` to preview to stdout; pipe stdin with `-` (e.g. `cat FILE | flowmark -`).
25
+
26
+ Flowmark ships as two packages with identical formatting and the same `flowmark`
27
+ command: the fast native Rust port [`flowmark-rs`](https://github.com/jlevy/flowmark-rs)
28
+ (recommended) and the Python reference [`flowmark`](https://github.com/jlevy/flowmark).
29
+ Prefer flowmark-rs; reach for the Python build only when you need its library API or the
30
+ very latest patch release not yet ported to Rust.
31
+ If `flowmark` is not on `PATH`, run it with a version-pinned runner (never `@latest`):
32
+
33
+ ```bash
34
+ # Recommended: fast native Rust port
35
+ uvx --from flowmark-rs==0.3.1 flowmark --auto FILE
36
+ # Python reference (library API or newest patch releases)
37
+ uvx --from flowmark==0.7.2 flowmark --auto FILE
38
+ ```
39
+
40
+ ## When to Use It
41
+
42
+ - Auto-format Markdown you create or edit, before committing.
43
+ - Normalize and clean up LLM-generated Markdown.
44
+ - Typographic cleanup (smart quotes, ellipses) and consistent formatting.
45
+ - Optional semantic (sentence-based) line breaks for cleaner git diffs (`--semantic`).
46
+
47
+ ## Full Documentation
48
+
49
+ Flowmark documents itself.
50
+ Use the CLI rather than reproducing details here:
51
+
52
+ - `flowmark --help` — every flag: `--semantic`, `--smartquotes`, `--ellipses`,
53
+ `--width`, `--check`, list spacing, and file discovery
54
+ (`--extend-include`/`--extend-exclude`).
55
+ - `flowmark --docs` — the full guide: editor on-save setup (VS Code/Cursor), project
56
+ wiring (pre-commit/CI, `.flowmarkignore`), config files, the Python library API, and
57
+ installing this skill for other agents (`flowmark --install-skill`).
58
+
59
+ <!-- This document follows common-doc-guidelines.md.
60
+ See github.com/jlevy/practical-prose and review guidelines before editing.
61
+ -->
@@ -0,0 +1,44 @@
1
+ ---
2
+ name: pprose-common-edit
3
+ description: Apply the common Markdown documentation guidelines to any document; modifies the doc. The basic, universal edit tier. Use when asked to tidy, clean up, conform, fix formatting/structure, or add the footer.
4
+ ---
5
+ <!-- DO NOT EDIT: generated by `pprose install` (format=f01) -->
6
+
7
+ > Run pprose as `pprose <command>` if on PATH, else `uvx pprose@0.1.0 <command>`
8
+ > (zero-install via uv).
9
+ > Run `pprose --help` for every command, `pprose skill --list` for the other Practical
10
+ > Prose skills, and `pprose shortcut --list` / `pprose guidelines --list` /
11
+ > `pprose runbook --list` for on-demand playbooks, style guides, and procedures.
12
+
13
+ # Common Edit
14
+
15
+ This is the basic, universal edit tier (an apply skill: it may modify the target
16
+ document). It applies only the common documentation guidelines (read them with
17
+ `pprose guidelines common-doc-guidelines`) — organization, structure, writing style,
18
+ Markdown formatting, links, headings, lists, frontmatter, and footer — so it is safe for
19
+ almost any Markdown document, workflow, or repo, whether or not it is a Practical Prose
20
+ artifact.
21
+
22
+ For a deeper language-and-formatting pass (the Expression and Form dimensions) use
23
+ `pprose-copy-edit`; for a full all-dimension editorial pass use `pprose-full-edit`. Each
24
+ tier is a superset of the one before.
25
+
26
+ ## Inputs
27
+
28
+ - Path to one Markdown document.
29
+ - Optional scope note from the user, such as “format only” or “make all obvious fixes.”
30
+
31
+ ## Steps
32
+
33
+ 1. Run `pprose guidelines common-doc-guidelines` and read it.
34
+ 2. Inspect the target against organization, structure, writing style, Markdown
35
+ formatting, links, headings, lists, frontmatter, and footer rules.
36
+ 3. Apply fixes directly to the document while preserving its intended content and voice.
37
+ 4. Ensure the required guideline footer is present when the document is part of this
38
+ repo’s durable documentation.
39
+ 5. Re-read the diff and check that no edit changed factual meaning.
40
+
41
+ ## Output
42
+
43
+ Report the changed file, the main issue classes fixed, and any rule you intentionally
44
+ left alone.
@@ -0,0 +1,50 @@
1
+ ---
2
+ name: pprose-compare
3
+ description: Compare evaluated document versions or variants; read-only on source docs. Use when asked to compare drafts, A/B versions, quality-diff docs, or pick the best.
4
+ ---
5
+ <!-- DO NOT EDIT: generated by `pprose install` (format=f01) -->
6
+
7
+ > Run pprose as `pprose <command>` if on PATH, else `uvx pprose@0.1.0 <command>`
8
+ > (zero-install via uv).
9
+ > Run `pprose --help` for every command, `pprose skill --list` for the other Practical
10
+ > Prose skills, and `pprose shortcut --list` / `pprose guidelines --list` /
11
+ > `pprose runbook --list` for on-demand playbooks, style guides, and procedures.
12
+
13
+ # Compare Practical Prose Evaluations
14
+
15
+ This is read-only on source documents.
16
+ It writes or prints comparison reports.
17
+
18
+ Use it after each input document already has a validated Practical Prose eval report.
19
+
20
+ ## Inputs
21
+
22
+ - Paths to two or more validated `*.eval.md` reports.
23
+ - Optional labels or pair specs for deltas, such as `old=new`.
24
+
25
+ ## Steps
26
+
27
+ 1. Run `pprose runbook practical-prose-eval-compare` for the full procedure.
28
+
29
+ 2. Validate each input:
30
+
31
+ ```bash
32
+ pprose report validate path/to/artifact.eval.md --complete
33
+ ```
34
+
35
+ 3. Generate the comparison:
36
+
37
+ ```bash
38
+ pprose compare a.eval.md b.eval.md --format unified --pairs 'a=b' > comparison.md
39
+ ```
40
+
41
+ Add `--table-styles` only when generating a report for a browser that supports the
42
+ optional table-style microformat.
43
+
44
+ 4. Add human analytical prose only when the user asks for a full report, and ground it
45
+ in specific table cells.
46
+
47
+ ## Output
48
+
49
+ Return the comparison path or table, validation status for each input, and any alignment
50
+ or rubric-version warnings.
@@ -0,0 +1,44 @@
1
+ ---
2
+ name: pprose-copy-edit
3
+ description: Copy-edit a Markdown document for language and formatting (the Expression and Form dimensions); modifies the doc. A superset of pprose-common-edit. Use when asked to copy edit, proofread, polish, tighten, rewrite, or line edit.
4
+ ---
5
+ <!-- DO NOT EDIT: generated by `pprose install` (format=f01) -->
6
+
7
+ > Run pprose as `pprose <command>` if on PATH, else `uvx pprose@0.1.0 <command>`
8
+ > (zero-install via uv).
9
+ > Run `pprose --help` for every command, `pprose skill --list` for the other Practical
10
+ > Prose skills, and `pprose shortcut --list` / `pprose guidelines --list` /
11
+ > `pprose runbook --list` for on-demand playbooks, style guides, and procedures.
12
+
13
+ # Copy Edit
14
+
15
+ This is an apply skill: it may modify the target document.
16
+ It is a **superset of `pprose-common-edit`**: it applies the common documentation
17
+ substrate *and* the Expression and Form dimensions (E1–E3 and F1–F3: clarity, coherence,
18
+ concision, organization, consistency, formatting) of the Practical Prose guidelines.
19
+ It stops short of the substantive dimensions — for a full all-dimension editorial pass
20
+ that also writes an editorial review, use `pprose-full-edit`.
21
+
22
+ ## Inputs
23
+
24
+ - Path to one Markdown document.
25
+ - Optional edit brief, audience, and tolerance for heavier rewrites.
26
+
27
+ ## Steps
28
+
29
+ 1. Run `pprose shortcut shortcut-copy-edit` and follow it.
30
+ 2. Apply the common substrate: `pprose guidelines common-doc-guidelines`.
31
+ 3. Apply the Expression and Form dimensions (E1–E3, F1–F3) from
32
+ `pprose guidelines practical-prose-guidelines` (§Expression Dimensions, §Form
33
+ Dimensions).
34
+ 4. Audit the document, track issues (project issue/bead tooling when available, else the
35
+ agent’s to-do/checklist), and apply edits directly.
36
+ 5. Preserve factual meaning, claim strength, citations, and intentional voice.
37
+ Do not edit the substantive dimensions (Purpose, Reasoning, Grounding, Judgment); if
38
+ those need work, note it and recommend `pprose-full-edit`.
39
+ 6. Re-scan the diff for regressions before reporting.
40
+
41
+ ## Output
42
+
43
+ Report the changed file, the Expression issue classes fixed, and any substantive
44
+ (Purpose / Reasoning / Grounding / Judgment) issues you noticed but did not edit.
@@ -0,0 +1,64 @@
1
+ ---
2
+ name: pprose-eval
3
+ description: Score one practical document with metrics and rubric grading; read-only on source. Use when asked to score, evaluate, grade, rubric-check, or measure quality.
4
+ ---
5
+ <!-- DO NOT EDIT: generated by `pprose install` (format=f01) -->
6
+
7
+ > Run pprose as `pprose <command>` if on PATH, else `uvx pprose@0.1.0 <command>`
8
+ > (zero-install via uv).
9
+ > Run `pprose --help` for every command, `pprose skill --list` for the other Practical
10
+ > Prose skills, and `pprose shortcut --list` / `pprose guidelines --list` /
11
+ > `pprose runbook --list` for on-demand playbooks, style guides, and procedures.
12
+
13
+ # Evaluate One Practical Prose Document
14
+
15
+ This is read-only on the source document.
16
+ It writes eval report files.
17
+
18
+ Use it when the user wants a formal Practical Prose evaluation of one document.
19
+
20
+ For the repo’s baseline batch evals, run `pprose runbook practical-prose-baseline-evals`
21
+ and default to running all third-party and self-eval artifacts unless the user asks for
22
+ a subset.
23
+
24
+ ## Inputs
25
+
26
+ - Path to one Markdown artifact.
27
+ - Artifact label.
28
+ - Scope class: `status`, `memo`, `brief`, `deep_research`, or `design_doc`.
29
+ - `ANTHROPIC_API_KEY` for model scoring, unless the user asks for dry-run or manual
30
+ scoring only.
31
+
32
+ ## Steps
33
+
34
+ 1. Run `pprose runbook practical-prose-eval-single` for the full procedure.
35
+
36
+ 2. Generate the eval stub:
37
+
38
+ ```bash
39
+ pprose report from-metrics path/to/artifact.md --label NAME --scope-class brief --out artifact.eval.md
40
+ ```
41
+
42
+ 3. Inspect deterministic metrics:
43
+
44
+ ```bash
45
+ pprose metrics path/to/artifact.md --format yaml
46
+ ```
47
+
48
+ 4. Score the qualitative dimensions (`--model` is required; run
49
+ `pprose score --list-models` for choices, or pass `--dry-run` to skip the API call):
50
+
51
+ ```bash
52
+ pprose score artifact.eval.md --model opus
53
+ ```
54
+
55
+ 5. Validate the result:
56
+
57
+ ```bash
58
+ pprose report validate artifact.eval.md --complete
59
+ ```
60
+
61
+ ## Output
62
+
63
+ Return the eval report path, validation result, and any scoring or alignment issues that
64
+ need human review.
@@ -0,0 +1,43 @@
1
+ ---
2
+ name: pprose-full-edit
3
+ description: Full editorial pass over a practical document across all 20 Practical Prose dimensions; modifies the doc AND writes an editorial-review side document. A superset of pprose-copy-edit. Use when asked for a deep or full edit, an editorial review, a substantive edit, or a strengths-and-weaknesses review with suggested fixes.
4
+ ---
5
+ <!-- DO NOT EDIT: generated by `pprose install` (format=f01) -->
6
+
7
+ > Run pprose as `pprose <command>` if on PATH, else `uvx pprose@0.1.0 <command>`
8
+ > (zero-install via uv).
9
+ > Run `pprose --help` for every command, `pprose skill --list` for the other Practical
10
+ > Prose skills, and `pprose shortcut --list` / `pprose guidelines --list` /
11
+ > `pprose runbook --list` for on-demand playbooks, style guides, and procedures.
12
+
13
+ # Full Edit
14
+
15
+ This is the deepest edit tier (an apply skill: it may modify the target document) and a
16
+ **superset of `pprose-copy-edit`**. It works the document across all six groups and 20
17
+ dimensions of the Practical Prose guidelines (Purpose, Expression, Form, Reasoning,
18
+ Grounding, Judgment), and it writes an **editorial-review side document** with
19
+ strengths, weaknesses, and suggested fixes for the author or other editors.
20
+
21
+ Apply-vs-flag: auto-apply the safe Expression and formatting fixes; **flag** substantive
22
+ Purpose / Reasoning / Grounding / Judgment issues in the review rather than silently
23
+ rewriting — never change factual meaning, claim strength, scope, or citations.
24
+
25
+ ## Inputs
26
+
27
+ - Path to one practical-prose document.
28
+ - Optional: edit brief, audience, risk level, and an output path for the review.
29
+ - Optional “audit only” instruction: produce the review and findings, make no edits.
30
+
31
+ ## Steps
32
+
33
+ 1. Run `pprose shortcut shortcut-full-edit` — the playbook, including the
34
+ editorial-review structure.
35
+ 2. Follow it: per-group passes against `pprose guidelines practical-prose-guidelines`,
36
+ apply the safe fixes, flag the substantive ones, and write the editorial review.
37
+
38
+ ## Output
39
+
40
+ - The edited document (unless run audit-only).
41
+ - The editorial-review side document (default `<source-basename>.review.md` beside the
42
+ source): scope, strengths, weaknesses by dimension, suggested fixes for
43
+ authors/editors, and a summary of the edits applied.
@@ -0,0 +1,48 @@
1
+ ---
2
+ name: pprose-review
3
+ description: Review one practical document and report tiered editorial feedback — what a common edit, a copy edit, and a full substantive pass would each change — without modifying the document and without numeric scores. Read-only. Use when asked to review, critique, give feedback, or get an edit plan, and you do not want edits applied, a scored eval, or a version comparison.
4
+ ---
5
+ <!-- DO NOT EDIT: generated by `pprose install` (format=f01) -->
6
+
7
+ > Run pprose as `pprose <command>` if on PATH, else `uvx pprose@0.1.0 <command>`
8
+ > (zero-install via uv).
9
+ > Run `pprose --help` for every command, `pprose skill --list` for the other Practical
10
+ > Prose skills, and `pprose shortcut --list` / `pprose guidelines --list` /
11
+ > `pprose runbook --list` for on-demand playbooks, style guides, and procedures.
12
+
13
+ # Review
14
+
15
+ This is a **read-only** skill: it never modifies the target document and assigns no
16
+ scores. It produces a single **tiered editorial review** side document that sorts every
17
+ finding into three layers of edit depth:
18
+
19
+ - **Tier 1 — Common edit:** formatting and structure fixes a `pprose-common-edit` pass
20
+ would apply (the common documentation substrate).
21
+ - **Tier 2 — Copy edit:** Expression and Form fixes (E1-E3, F1-F3) a `pprose-copy-edit`
22
+ pass would apply — language and formatting, no change of meaning.
23
+ - **Tier 3 — Full feedback:** the substantive Purpose, Reasoning, Grounding, and
24
+ Judgment issues that need author judgment — flagged, never silently rewritten.
25
+
26
+ Use it when the user wants feedback or an edit plan **without** touching the document.
27
+ For other intents, route elsewhere: to actually apply the edits use `pprose-copy-edit`
28
+ (Tiers 1-2) or `pprose-full-edit` (all tiers); for a scored 1-5 rubric use
29
+ `pprose-eval`; to compare document versions use `pprose-compare`.
30
+
31
+ ## Inputs
32
+
33
+ - Path to one Markdown document.
34
+ - Optional: audience, risk level, and a review brief.
35
+ - Optional output path for the review (default `<source-basename>.review.md`).
36
+
37
+ ## Steps
38
+
39
+ 1. Run `pprose shortcut shortcut-review` and follow it: run the audit passes, change
40
+ nothing, and sort each finding into Tier 1, Tier 2, or Tier 3.
41
+ 2. Write the tiered review to the output path; make no edits to the source and assign no
42
+ scores.
43
+
44
+ ## Output
45
+
46
+ Return the review path, the count of findings per tier, and the recommended next action
47
+ (run `pprose-copy-edit` to apply Tiers 1-2 automatically; Tier 3 is for author
48
+ judgment).
@@ -0,0 +1,47 @@
1
+ ---
2
+ name: repren
3
+ description: The preferred tool for large-scale or multi-file renames and search-and-replace. Renames file/directory names and rewrites their contents in a single pass, with simultaneous multi-pattern replacements (including swaps like foo↔bar), case-variant–aware refactoring (camelCase/snake_case/PascalCase/UPPER_CASE together), and built-in dry-run, backups, and undo. Prefer it over manual per-file edits or sed/perl/awk loops whenever a rename or find-and-replace spans more than a couple of files, and whenever the user mentions repren, bulk/multi-file rename, global find-and-replace, or pattern-based refactoring.
4
+ allowed-tools: Bash(repren:*), Bash(uvx repren@latest:*), Read, Write
5
+ ---
6
+ # repren: multi-pattern rename and search-and-replace
7
+
8
+ repren does in one safe, previewable pass what hand edits and `sed`/`perl`/`awk` loops do
9
+ awkwardly: combined content and file/directory renames, simultaneous multi-pattern
10
+ replacement (including swaps), case-variant-aware refactoring, and atomic writes with
11
+ backups and undo.
12
+
13
+ > **If you are going to use repren, read its docs first:** run `repren --docs` for the
14
+ > full flags, pattern-file format, examples, and edge cases. This skill only tells you
15
+ > *when* to reach for repren and *which* command; `repren --docs` and `repren --help`
16
+ > carry the *how*.
17
+ >
18
+ > **Invocation:** use `repren` if it is on `PATH`, otherwise `uvx repren@latest` (no
19
+ > install needed, zero runtime dependencies). Always preview with `--dry-run` first.
20
+
21
+ ## When to use repren
22
+
23
+ Prefer repren over the Edit tool or shell loops whenever a rename or replacement spans
24
+ more than a file or two. Reach for it when the task is to:
25
+
26
+ - **Rename a symbol across many files** — `repren --from=Old --to=New --word-breaks --full DIR`
27
+ - **Rename a symbol and the files/directories named after it, together** — `--full` rewrites contents and renames paths in one pass
28
+ - **Apply many replacements at once, or swap names (`foo`↔`bar`)** — `repren --patterns=FILE --full DIR`
29
+ - **Refactor an identifier across all case variants** (camelCase/snake_case/PascalCase/UPPER_CASE) — add `--preserve-case`
30
+ - **Replace with a regex and capture groups across files** — `repren --from='figure ([0-9]+)' --to='Figure \1' DIR`
31
+ - **Make a bulk change you must preview, back up, and be able to reverse** — `--dry-run`, then run, then `--undo` or `--clean-backups`
32
+
33
+ For the exact flags, pattern-file syntax, scoping (`--include`/`--exclude`, `--literal`,
34
+ `--at-once`), and JSON output, read `repren --docs`.
35
+
36
+ ## When not to use repren
37
+
38
+ - A single-file or one-off edit — use the Edit tool.
39
+ - Language-aware or semantic refactors — use an AST tool such as ast-grep.
40
+ - Anything needing precise line-by-line control — use the Edit tool.
41
+
42
+ ## Good to know
43
+
44
+ - Always `--dry-run` first. repren writes atomically and leaves `.orig` backups; `--undo`
45
+ restores them, `--clean-backups` removes them.
46
+ - repren does **not** read `.gitignore`. It skips dotfiles (including `.git/`) by default;
47
+ scope everything else explicitly with `--include`/`--exclude`. See `repren --docs`.