claudecode-omc 5.9.1 → 5.12.0

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 (523) hide show
  1. package/.local/settings/settings.json +8 -0
  2. package/.omc-curation/governance.json +3 -0
  3. package/.omc-curation/sources.lock.json +5 -0
  4. package/README.md +10 -1
  5. package/bundled/manifest.json +4 -3
  6. package/bundled/upstream/anthropic-skills/.omc-source/bundle.json +2 -2
  7. package/bundled/upstream/anthropic-skills/.omc-source/provenance.json +394 -390
  8. package/bundled/upstream/anthropic-skills/skills/claude-api/SKILL.md +60 -29
  9. package/bundled/upstream/anthropic-skills/skills/claude-api/csharp/claude-api.md +46 -1
  10. package/bundled/upstream/anthropic-skills/skills/claude-api/curl/examples.md +2 -2
  11. package/bundled/upstream/anthropic-skills/skills/claude-api/curl/managed-agents.md +3 -1
  12. package/bundled/upstream/anthropic-skills/skills/claude-api/go/claude-api.md +23 -4
  13. package/bundled/upstream/anthropic-skills/skills/claude-api/java/claude-api.md +32 -3
  14. package/bundled/upstream/anthropic-skills/skills/claude-api/php/claude-api.md +27 -0
  15. package/bundled/upstream/anthropic-skills/skills/claude-api/python/claude-api/README.md +123 -7
  16. package/bundled/upstream/anthropic-skills/skills/claude-api/python/claude-api/batches.md +13 -0
  17. package/bundled/upstream/anthropic-skills/skills/claude-api/python/claude-api/files-api.md +7 -2
  18. package/bundled/upstream/anthropic-skills/skills/claude-api/python/claude-api/streaming.md +18 -1
  19. package/bundled/upstream/anthropic-skills/skills/claude-api/python/managed-agents/README.md +9 -7
  20. package/bundled/upstream/anthropic-skills/skills/claude-api/ruby/claude-api.md +27 -0
  21. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/agent-design.md +1 -1
  22. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/anthropic-cli.md +246 -0
  23. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/claude-platform-on-aws.md +59 -0
  24. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/error-codes.md +24 -4
  25. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/live-sources.md +8 -0
  26. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-api-reference.md +48 -4
  27. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-client-patterns.md +3 -1
  28. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-core.md +15 -1
  29. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-environments.md +10 -6
  30. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-events.md +25 -0
  31. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-onboarding.md +48 -18
  32. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-overview.md +8 -5
  33. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-scheduled-deployments.md +144 -0
  34. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-self-hosted-sandboxes.md +2 -1
  35. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-tools.md +46 -9
  36. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/model-migration.md +259 -3
  37. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/models.md +17 -9
  38. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/prompt-caching.md +55 -3
  39. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/token-counting.md +56 -0
  40. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/tool-use-concepts.md +22 -2
  41. package/bundled/upstream/anthropic-skills/skills/claude-api/typescript/claude-api/README.md +45 -6
  42. package/bundled/upstream/anthropic-skills/skills/claude-api/typescript/claude-api/streaming.md +1 -1
  43. package/bundled/upstream/anthropic-skills/skills/claude-api/typescript/managed-agents/README.md +10 -12
  44. package/bundled/upstream/anthropic-skills/skills/frontend-design/SKILL.md +39 -26
  45. package/bundled/upstream/ecc/.omc-source/bundle.json +2 -2
  46. package/bundled/upstream/ecc/.omc-source/manifests/.claude-plugin/marketplace.json +2 -2
  47. package/bundled/upstream/ecc/.omc-source/provenance.json +602 -550
  48. package/bundled/upstream/ecc/agents/agent-evaluator.md +206 -0
  49. package/bundled/upstream/ecc/agents/performance-optimizer.md +9 -9
  50. package/bundled/upstream/ecc/agents/php-reviewer.md +109 -0
  51. package/bundled/upstream/ecc/agents/spec-miner.md +217 -0
  52. package/bundled/upstream/ecc/agents/vue-reviewer.md +206 -0
  53. package/bundled/upstream/ecc/commands/cost-report.md +58 -84
  54. package/bundled/upstream/ecc/commands/epic-claim.md +26 -0
  55. package/bundled/upstream/ecc/commands/epic-decompose.md +23 -0
  56. package/bundled/upstream/ecc/commands/epic-publish.md +23 -0
  57. package/bundled/upstream/ecc/commands/epic-review.md +23 -0
  58. package/bundled/upstream/ecc/commands/epic-sync.md +23 -0
  59. package/bundled/upstream/ecc/commands/epic-unblock.md +22 -0
  60. package/bundled/upstream/ecc/commands/epic-validate.md +22 -0
  61. package/bundled/upstream/ecc/commands/instinct-status.md +8 -8
  62. package/bundled/upstream/ecc/commands/multi-backend.md +2 -0
  63. package/bundled/upstream/ecc/commands/multi-execute.md +2 -0
  64. package/bundled/upstream/ecc/commands/multi-frontend.md +2 -0
  65. package/bundled/upstream/ecc/commands/multi-plan.md +2 -0
  66. package/bundled/upstream/ecc/commands/multi-workflow.md +2 -0
  67. package/bundled/upstream/ecc/commands/orch-add-feature.md +36 -0
  68. package/bundled/upstream/ecc/commands/orch-build-mvp.md +36 -0
  69. package/bundled/upstream/ecc/commands/orch-change-feature.md +38 -0
  70. package/bundled/upstream/ecc/commands/orch-fix-defect.md +38 -0
  71. package/bundled/upstream/ecc/commands/orch-refine-code.md +39 -0
  72. package/bundled/upstream/ecc/commands/quality-gate.md +34 -16
  73. package/bundled/upstream/ecc/commands/vue-review.md +174 -0
  74. package/bundled/upstream/ecc/skills/accessibility/SKILL.md +2 -1
  75. package/bundled/upstream/ecc/skills/agent-architecture-audit/SKILL.md +2 -1
  76. package/bundled/upstream/ecc/skills/agent-eval/SKILL.md +2 -1
  77. package/bundled/upstream/ecc/skills/agent-harness-construction/SKILL.md +2 -1
  78. package/bundled/upstream/ecc/skills/agent-introspection-debugging/SKILL.md +2 -1
  79. package/bundled/upstream/ecc/skills/agent-payment-x402/SKILL.md +2 -1
  80. package/bundled/upstream/ecc/skills/agent-self-evaluation/SKILL.md +182 -0
  81. package/bundled/upstream/ecc/skills/agent-self-evaluation/examples/high-score-example.md +87 -0
  82. package/bundled/upstream/ecc/skills/agent-self-evaluation/examples/low-score-example.md +86 -0
  83. package/bundled/upstream/ecc/skills/agent-self-evaluation/references/evaluation-criteria.md +71 -0
  84. package/bundled/upstream/ecc/skills/agent-self-evaluation/references/hook-integration.md +64 -0
  85. package/bundled/upstream/ecc/skills/agent-self-evaluation/scripts/evaluate.py +408 -0
  86. package/bundled/upstream/ecc/skills/agent-self-evaluation/templates/evaluation-report.md +86 -0
  87. package/bundled/upstream/ecc/skills/agent-sort/SKILL.md +2 -1
  88. package/bundled/upstream/ecc/skills/agentic-engineering/SKILL.md +2 -1
  89. package/bundled/upstream/ecc/skills/agentic-os/SKILL.md +2 -1
  90. package/bundled/upstream/ecc/skills/ai-first-engineering/SKILL.md +2 -1
  91. package/bundled/upstream/ecc/skills/ai-regression-testing/SKILL.md +2 -1
  92. package/bundled/upstream/ecc/skills/android-clean-architecture/SKILL.md +2 -1
  93. package/bundled/upstream/ecc/skills/angular-developer/SKILL.md +2 -1
  94. package/bundled/upstream/ecc/skills/api-connector-builder/SKILL.md +2 -1
  95. package/bundled/upstream/ecc/skills/api-design/SKILL.md +2 -1
  96. package/bundled/upstream/ecc/skills/architecture-decision-records/SKILL.md +2 -1
  97. package/bundled/upstream/ecc/skills/article-writing/SKILL.md +2 -1
  98. package/bundled/upstream/ecc/skills/automation-audit-ops/SKILL.md +2 -1
  99. package/bundled/upstream/ecc/skills/autonomous-agent-harness/SKILL.md +2 -1
  100. package/bundled/upstream/ecc/skills/autonomous-loops/SKILL.md +2 -1
  101. package/bundled/upstream/ecc/skills/backend-patterns/SKILL.md +2 -1
  102. package/bundled/upstream/ecc/skills/benchmark/SKILL.md +2 -1
  103. package/bundled/upstream/ecc/skills/benchmark-methodology/SKILL.md +190 -0
  104. package/bundled/upstream/ecc/skills/benchmark-optimization-loop/SKILL.md +2 -1
  105. package/bundled/upstream/ecc/skills/blender-motion-state-inspection/SKILL.md +2 -1
  106. package/bundled/upstream/ecc/skills/blueprint/SKILL.md +2 -1
  107. package/bundled/upstream/ecc/skills/brand-discovery/SKILL.md +145 -0
  108. package/bundled/upstream/ecc/skills/brand-discovery/references/10_purpose-why.md +40 -0
  109. package/bundled/upstream/ecc/skills/brand-discovery/references/20_positioning.md +44 -0
  110. package/bundled/upstream/ecc/skills/brand-discovery/references/30_audience-niche.md +52 -0
  111. package/bundled/upstream/ecc/skills/brand-discovery/references/40_personality-archetype.md +57 -0
  112. package/bundled/upstream/ecc/skills/brand-discovery/references/50_voice-tone.md +59 -0
  113. package/bundled/upstream/ecc/skills/brand-discovery/references/60_narrative-story.md +50 -0
  114. package/bundled/upstream/ecc/skills/brand-discovery/references/70_founder-tension.md +49 -0
  115. package/bundled/upstream/ecc/skills/brand-discovery/references/90_SYNTHESIS.md +133 -0
  116. package/bundled/upstream/ecc/skills/brand-voice/SKILL.md +2 -1
  117. package/bundled/upstream/ecc/skills/browser-qa/SKILL.md +22 -4
  118. package/bundled/upstream/ecc/skills/bun-runtime/SKILL.md +2 -1
  119. package/bundled/upstream/ecc/skills/canary-watch/SKILL.md +2 -1
  120. package/bundled/upstream/ecc/skills/carrier-relationship-management/SKILL.md +1 -1
  121. package/bundled/upstream/ecc/skills/cisco-ios-patterns/SKILL.md +2 -1
  122. package/bundled/upstream/ecc/skills/ck/SKILL.md +2 -1
  123. package/bundled/upstream/ecc/skills/claude-devfleet/SKILL.md +11 -2
  124. package/bundled/upstream/ecc/skills/click-path-audit/SKILL.md +2 -1
  125. package/bundled/upstream/ecc/skills/clickhouse-io/SKILL.md +2 -1
  126. package/bundled/upstream/ecc/skills/code-tour/SKILL.md +2 -1
  127. package/bundled/upstream/ecc/skills/codebase-onboarding/SKILL.md +2 -1
  128. package/bundled/upstream/ecc/skills/codehealth-mcp/SKILL.md +167 -0
  129. package/bundled/upstream/ecc/skills/coding-standards/SKILL.md +4 -2
  130. package/bundled/upstream/ecc/skills/competitive-platform-analysis/SKILL.md +214 -0
  131. package/bundled/upstream/ecc/skills/competitive-report-structure/SKILL.md +162 -0
  132. package/bundled/upstream/ecc/skills/compose-multiplatform-patterns/SKILL.md +2 -1
  133. package/bundled/upstream/ecc/skills/config-gc/SKILL.md +120 -0
  134. package/bundled/upstream/ecc/skills/configure-ecc/SKILL.md +2 -1
  135. package/bundled/upstream/ecc/skills/connections-optimizer/SKILL.md +2 -1
  136. package/bundled/upstream/ecc/skills/content-engine/SKILL.md +2 -1
  137. package/bundled/upstream/ecc/skills/content-hash-cache-pattern/SKILL.md +2 -1
  138. package/bundled/upstream/ecc/skills/context-budget/SKILL.md +2 -1
  139. package/bundled/upstream/ecc/skills/continuous-agent-loop/SKILL.md +2 -1
  140. package/bundled/upstream/ecc/skills/continuous-learning/SKILL.md +2 -1
  141. package/bundled/upstream/ecc/skills/continuous-learning-v2/SKILL.md +2 -1
  142. package/bundled/upstream/ecc/skills/continuous-learning-v2/agents/observer-loop.sh +14 -1
  143. package/bundled/upstream/ecc/skills/continuous-learning-v2/hooks/observe.sh +31 -7
  144. package/bundled/upstream/ecc/skills/continuous-learning-v2/scripts/instinct-cli.py +90 -2
  145. package/bundled/upstream/ecc/skills/continuous-learning-v2/scripts/test_parse_instinct.py +27 -0
  146. package/bundled/upstream/ecc/skills/cost-aware-llm-pipeline/SKILL.md +2 -1
  147. package/bundled/upstream/ecc/skills/cost-tracking/SKILL.md +58 -108
  148. package/bundled/upstream/ecc/skills/council/SKILL.md +2 -1
  149. package/bundled/upstream/ecc/skills/cpp-coding-standards/SKILL.md +2 -1
  150. package/bundled/upstream/ecc/skills/cpp-testing/SKILL.md +2 -1
  151. package/bundled/upstream/ecc/skills/crosspost/SKILL.md +2 -1
  152. package/bundled/upstream/ecc/skills/csharp-testing/SKILL.md +2 -1
  153. package/bundled/upstream/ecc/skills/customer-billing-ops/SKILL.md +2 -1
  154. package/bundled/upstream/ecc/skills/customs-trade-compliance/SKILL.md +1 -1
  155. package/bundled/upstream/ecc/skills/dart-flutter-patterns/SKILL.md +2 -1
  156. package/bundled/upstream/ecc/skills/dashboard-builder/SKILL.md +2 -1
  157. package/bundled/upstream/ecc/skills/data-scraper-agent/SKILL.md +2 -1
  158. package/bundled/upstream/ecc/skills/data-throughput-accelerator/SKILL.md +2 -1
  159. package/bundled/upstream/ecc/skills/database-migrations/SKILL.md +2 -1
  160. package/bundled/upstream/ecc/skills/deep-research/SKILL.md +2 -1
  161. package/bundled/upstream/ecc/skills/defi-amm-security/SKILL.md +2 -1
  162. package/bundled/upstream/ecc/skills/deployment-patterns/SKILL.md +2 -1
  163. package/bundled/upstream/ecc/skills/design-system/SKILL.md +2 -1
  164. package/bundled/upstream/ecc/skills/django-celery/SKILL.md +3 -2
  165. package/bundled/upstream/ecc/skills/django-patterns/SKILL.md +2 -1
  166. package/bundled/upstream/ecc/skills/django-security/SKILL.md +2 -1
  167. package/bundled/upstream/ecc/skills/django-tdd/SKILL.md +2 -1
  168. package/bundled/upstream/ecc/skills/django-verification/SKILL.md +2 -1
  169. package/bundled/upstream/ecc/skills/dmux-workflows/SKILL.md +2 -1
  170. package/bundled/upstream/ecc/skills/docker-patterns/SKILL.md +2 -1
  171. package/bundled/upstream/ecc/skills/documentation-lookup/SKILL.md +2 -1
  172. package/bundled/upstream/ecc/skills/dotnet-patterns/SKILL.md +2 -1
  173. package/bundled/upstream/ecc/skills/dynamic-workflow-mode/SKILL.md +2 -1
  174. package/bundled/upstream/ecc/skills/e2e-testing/SKILL.md +2 -1
  175. package/bundled/upstream/ecc/skills/ecc-guide/SKILL.md +2 -1
  176. package/bundled/upstream/ecc/skills/ecc-tools-cost-audit/SKILL.md +2 -1
  177. package/bundled/upstream/ecc/skills/email-ops/SKILL.md +2 -1
  178. package/bundled/upstream/ecc/skills/energy-procurement/SKILL.md +1 -1
  179. package/bundled/upstream/ecc/skills/enterprise-agent-ops/SKILL.md +2 -1
  180. package/bundled/upstream/ecc/skills/error-handling/SKILL.md +2 -1
  181. package/bundled/upstream/ecc/skills/eval-harness/SKILL.md +2 -1
  182. package/bundled/upstream/ecc/skills/evm-token-decimals/SKILL.md +2 -1
  183. package/bundled/upstream/ecc/skills/exa-search/SKILL.md +2 -1
  184. package/bundled/upstream/ecc/skills/fal-ai-media/SKILL.md +2 -1
  185. package/bundled/upstream/ecc/skills/fastapi-patterns/SKILL.md +375 -188
  186. package/bundled/upstream/ecc/skills/finance-billing-ops/SKILL.md +2 -1
  187. package/bundled/upstream/ecc/skills/flox-environments/SKILL.md +3 -2
  188. package/bundled/upstream/ecc/skills/flutter-dart-code-review/SKILL.md +2 -1
  189. package/bundled/upstream/ecc/skills/frontend-a11y/SKILL.md +3 -3
  190. package/bundled/upstream/ecc/skills/frontend-design-direction/SKILL.md +2 -1
  191. package/bundled/upstream/ecc/skills/frontend-patterns/SKILL.md +23 -8
  192. package/bundled/upstream/ecc/skills/frontend-slides/SKILL.md +2 -1
  193. package/bundled/upstream/ecc/skills/frontend-slides/scripts/export-pdf.sh +1 -1
  194. package/bundled/upstream/ecc/skills/fsharp-testing/SKILL.md +2 -1
  195. package/bundled/upstream/ecc/skills/gan-style-harness/SKILL.md +2 -1
  196. package/bundled/upstream/ecc/skills/gateguard/SKILL.md +9 -1
  197. package/bundled/upstream/ecc/skills/generating-python-installer/SKILL.md +820 -0
  198. package/bundled/upstream/ecc/skills/git-workflow/SKILL.md +2 -1
  199. package/bundled/upstream/ecc/skills/github-ops/SKILL.md +2 -1
  200. package/bundled/upstream/ecc/skills/golang-patterns/SKILL.md +2 -1
  201. package/bundled/upstream/ecc/skills/golang-testing/SKILL.md +2 -1
  202. package/bundled/upstream/ecc/skills/google-workspace-ops/SKILL.md +2 -1
  203. package/bundled/upstream/ecc/skills/healthcare-cdss-patterns/SKILL.md +2 -1
  204. package/bundled/upstream/ecc/skills/healthcare-emr-patterns/SKILL.md +2 -1
  205. package/bundled/upstream/ecc/skills/healthcare-eval-harness/SKILL.md +2 -1
  206. package/bundled/upstream/ecc/skills/healthcare-phi-compliance/SKILL.md +2 -1
  207. package/bundled/upstream/ecc/skills/hermes-imports/SKILL.md +2 -1
  208. package/bundled/upstream/ecc/skills/hexagonal-architecture/SKILL.md +2 -1
  209. package/bundled/upstream/ecc/skills/hipaa-compliance/SKILL.md +2 -1
  210. package/bundled/upstream/ecc/skills/homelab-network-readiness/SKILL.md +2 -1
  211. package/bundled/upstream/ecc/skills/homelab-network-setup/SKILL.md +2 -1
  212. package/bundled/upstream/ecc/skills/homelab-pihole-dns/SKILL.md +10 -9
  213. package/bundled/upstream/ecc/skills/homelab-vlan-segmentation/SKILL.md +2 -1
  214. package/bundled/upstream/ecc/skills/homelab-wireguard-vpn/SKILL.md +4 -3
  215. package/bundled/upstream/ecc/skills/inherit-legacy-style/SKILL.md +157 -0
  216. package/bundled/upstream/ecc/skills/intent-driven-development/SKILL.md +360 -0
  217. package/bundled/upstream/ecc/skills/inventory-demand-planning/SKILL.md +1 -1
  218. package/bundled/upstream/ecc/skills/investor-materials/SKILL.md +2 -1
  219. package/bundled/upstream/ecc/skills/investor-outreach/SKILL.md +2 -1
  220. package/bundled/upstream/ecc/skills/ios-icon-gen/SKILL.md +2 -1
  221. package/bundled/upstream/ecc/skills/iterative-retrieval/SKILL.md +2 -1
  222. package/bundled/upstream/ecc/skills/ito-basket-compare/SKILL.md +2 -1
  223. package/bundled/upstream/ecc/skills/ito-data-atlas-agent/SKILL.md +2 -1
  224. package/bundled/upstream/ecc/skills/ito-market-intelligence/SKILL.md +2 -1
  225. package/bundled/upstream/ecc/skills/ito-trade-planner/SKILL.md +2 -1
  226. package/bundled/upstream/ecc/skills/java-coding-standards/SKILL.md +2 -1
  227. package/bundled/upstream/ecc/skills/jira-integration/SKILL.md +17 -7
  228. package/bundled/upstream/ecc/skills/jpa-patterns/SKILL.md +2 -1
  229. package/bundled/upstream/ecc/skills/knowledge-ops/SKILL.md +2 -1
  230. package/bundled/upstream/ecc/skills/kotlin-coroutines-flows/SKILL.md +2 -1
  231. package/bundled/upstream/ecc/skills/kotlin-exposed-patterns/SKILL.md +2 -1
  232. package/bundled/upstream/ecc/skills/kotlin-ktor-patterns/SKILL.md +2 -1
  233. package/bundled/upstream/ecc/skills/kotlin-patterns/SKILL.md +2 -1
  234. package/bundled/upstream/ecc/skills/kotlin-testing/SKILL.md +2 -1
  235. package/bundled/upstream/ecc/skills/kubernetes-patterns/SKILL.md +756 -0
  236. package/bundled/upstream/ecc/skills/laravel-patterns/SKILL.md +2 -1
  237. package/bundled/upstream/ecc/skills/laravel-plugin-discovery/SKILL.md +2 -1
  238. package/bundled/upstream/ecc/skills/laravel-security/SKILL.md +826 -163
  239. package/bundled/upstream/ecc/skills/laravel-tdd/SKILL.md +541 -149
  240. package/bundled/upstream/ecc/skills/laravel-verification/SKILL.md +2 -1
  241. package/bundled/upstream/ecc/skills/latency-critical-systems/SKILL.md +2 -1
  242. package/bundled/upstream/ecc/skills/lead-intelligence/SKILL.md +2 -1
  243. package/bundled/upstream/ecc/skills/llm-trading-agent-security/SKILL.md +2 -1
  244. package/bundled/upstream/ecc/skills/logistics-exception-management/SKILL.md +1 -1
  245. package/bundled/upstream/ecc/skills/make-interfaces-feel-better/SKILL.md +2 -1
  246. package/bundled/upstream/ecc/skills/manim-video/SKILL.md +2 -1
  247. package/bundled/upstream/ecc/skills/market-research/SKILL.md +2 -1
  248. package/bundled/upstream/ecc/skills/marketing-campaign/SKILL.md +2 -1
  249. package/bundled/upstream/ecc/skills/mcp-server-patterns/SKILL.md +2 -1
  250. package/bundled/upstream/ecc/skills/messages-ops/SKILL.md +2 -1
  251. package/bundled/upstream/ecc/skills/ml-adoption-playbook/SKILL.md +57 -0
  252. package/bundled/upstream/ecc/skills/mle-workflow/SKILL.md +2 -1
  253. package/bundled/upstream/ecc/skills/motion-patterns/SKILL.md +1 -2
  254. package/bundled/upstream/ecc/skills/motion-ui/SKILL.md +2 -1
  255. package/bundled/upstream/ecc/skills/mysql-patterns/SKILL.md +2 -1
  256. package/bundled/upstream/ecc/skills/nanoclaw-repl/SKILL.md +2 -1
  257. package/bundled/upstream/ecc/skills/nestjs-patterns/SKILL.md +2 -1
  258. package/bundled/upstream/ecc/skills/netmiko-ssh-automation/SKILL.md +2 -1
  259. package/bundled/upstream/ecc/skills/network-bgp-diagnostics/SKILL.md +2 -1
  260. package/bundled/upstream/ecc/skills/network-config-validation/SKILL.md +2 -1
  261. package/bundled/upstream/ecc/skills/network-interface-health/SKILL.md +2 -1
  262. package/bundled/upstream/ecc/skills/nextjs-turbopack/SKILL.md +2 -1
  263. package/bundled/upstream/ecc/skills/nodejs-keccak256/SKILL.md +2 -1
  264. package/bundled/upstream/ecc/skills/nutrient-document-processing/SKILL.md +2 -1
  265. package/bundled/upstream/ecc/skills/nuxt4-patterns/SKILL.md +2 -1
  266. package/bundled/upstream/ecc/skills/openclaw-persona-forge/SKILL.md +2 -1
  267. package/bundled/upstream/ecc/skills/opensource-pipeline/SKILL.md +2 -1
  268. package/bundled/upstream/ecc/skills/orch-add-feature/SKILL.md +45 -0
  269. package/bundled/upstream/ecc/skills/orch-build-mvp/SKILL.md +49 -0
  270. package/bundled/upstream/ecc/skills/orch-change-feature/SKILL.md +43 -0
  271. package/bundled/upstream/ecc/skills/orch-fix-defect/SKILL.md +43 -0
  272. package/bundled/upstream/ecc/skills/orch-pipeline/SKILL.md +121 -0
  273. package/bundled/upstream/ecc/skills/orch-refine-code/SKILL.md +44 -0
  274. package/bundled/upstream/ecc/skills/parallel-execution-optimizer/SKILL.md +2 -1
  275. package/bundled/upstream/ecc/skills/perl-patterns/SKILL.md +2 -1
  276. package/bundled/upstream/ecc/skills/perl-security/SKILL.md +2 -1
  277. package/bundled/upstream/ecc/skills/perl-testing/SKILL.md +2 -1
  278. package/bundled/upstream/ecc/skills/plan-orchestrate/SKILL.md +2 -1
  279. package/bundled/upstream/ecc/skills/plankton-code-quality/SKILL.md +2 -1
  280. package/bundled/upstream/ecc/skills/postgres-patterns/SKILL.md +2 -1
  281. package/bundled/upstream/ecc/skills/prediction-market-oracle-research/SKILL.md +2 -1
  282. package/bundled/upstream/ecc/skills/prediction-market-risk-review/SKILL.md +2 -1
  283. package/bundled/upstream/ecc/skills/prisma-patterns/SKILL.md +2 -1
  284. package/bundled/upstream/ecc/skills/product-capability/SKILL.md +2 -1
  285. package/bundled/upstream/ecc/skills/product-lens/SKILL.md +2 -1
  286. package/bundled/upstream/ecc/skills/production-audit/SKILL.md +2 -1
  287. package/bundled/upstream/ecc/skills/production-scheduling/SKILL.md +1 -1
  288. package/bundled/upstream/ecc/skills/project-flow-ops/SKILL.md +2 -1
  289. package/bundled/upstream/ecc/skills/prompt-optimizer/SKILL.md +1 -1
  290. package/bundled/upstream/ecc/skills/python-patterns/SKILL.md +4 -3
  291. package/bundled/upstream/ecc/skills/python-testing/SKILL.md +2 -1
  292. package/bundled/upstream/ecc/skills/pytorch-patterns/SKILL.md +2 -1
  293. package/bundled/upstream/ecc/skills/quality-nonconformance/SKILL.md +1 -1
  294. package/bundled/upstream/ecc/skills/quarkus-patterns/SKILL.md +51 -50
  295. package/bundled/upstream/ecc/skills/quarkus-security/SKILL.md +25 -24
  296. package/bundled/upstream/ecc/skills/quarkus-tdd/SKILL.md +73 -72
  297. package/bundled/upstream/ecc/skills/quarkus-verification/SKILL.md +8 -7
  298. package/bundled/upstream/ecc/skills/ralphinho-rfc-pipeline/SKILL.md +2 -1
  299. package/bundled/upstream/ecc/skills/react-patterns/SKILL.md +2 -1
  300. package/bundled/upstream/ecc/skills/react-performance/SKILL.md +2 -1
  301. package/bundled/upstream/ecc/skills/react-testing/SKILL.md +2 -1
  302. package/bundled/upstream/ecc/skills/recsys-pipeline-architect/SKILL.md +2 -1
  303. package/bundled/upstream/ecc/skills/recursive-decision-ledger/SKILL.md +2 -1
  304. package/bundled/upstream/ecc/skills/redis-patterns/SKILL.md +2 -1
  305. package/bundled/upstream/ecc/skills/regex-vs-llm-structured-text/SKILL.md +2 -1
  306. package/bundled/upstream/ecc/skills/repo-scan/SKILL.md +64 -63
  307. package/bundled/upstream/ecc/skills/research-ops/SKILL.md +2 -1
  308. package/bundled/upstream/ecc/skills/returns-reverse-logistics/SKILL.md +1 -1
  309. package/bundled/upstream/ecc/skills/rules-distill/SKILL.md +2 -1
  310. package/bundled/upstream/ecc/skills/rust-patterns/SKILL.md +2 -1
  311. package/bundled/upstream/ecc/skills/rust-testing/SKILL.md +2 -1
  312. package/bundled/upstream/ecc/skills/safety-guard/SKILL.md +2 -1
  313. package/bundled/upstream/ecc/skills/santa-method/SKILL.md +2 -1
  314. package/bundled/upstream/ecc/skills/scientific-db-pubmed-database/SKILL.md +2 -1
  315. package/bundled/upstream/ecc/skills/scientific-db-uspto-database/SKILL.md +2 -1
  316. package/bundled/upstream/ecc/skills/scientific-pkg-gget/SKILL.md +2 -1
  317. package/bundled/upstream/ecc/skills/scientific-thinking-literature-review/SKILL.md +2 -1
  318. package/bundled/upstream/ecc/skills/scientific-thinking-scholar-evaluation/SKILL.md +2 -1
  319. package/bundled/upstream/ecc/skills/search-first/SKILL.md +2 -1
  320. package/bundled/upstream/ecc/skills/security-bounty-hunter/SKILL.md +2 -1
  321. package/bundled/upstream/ecc/skills/security-review/SKILL.md +2 -1
  322. package/bundled/upstream/ecc/skills/security-scan/SKILL.md +2 -1
  323. package/bundled/upstream/ecc/skills/seo/SKILL.md +2 -1
  324. package/bundled/upstream/ecc/skills/skill-comply/SKILL.md +2 -1
  325. package/bundled/upstream/ecc/skills/skill-comply/scripts/runner.py +8 -0
  326. package/bundled/upstream/ecc/skills/skill-scout/SKILL.md +2 -1
  327. package/bundled/upstream/ecc/skills/skill-stocktake/SKILL.md +2 -1
  328. package/bundled/upstream/ecc/skills/social-graph-ranker/SKILL.md +2 -1
  329. package/bundled/upstream/ecc/skills/social-publisher/SKILL.md +17 -2
  330. package/bundled/upstream/ecc/skills/springboot-patterns/SKILL.md +2 -1
  331. package/bundled/upstream/ecc/skills/springboot-security/SKILL.md +2 -1
  332. package/bundled/upstream/ecc/skills/springboot-tdd/SKILL.md +2 -1
  333. package/bundled/upstream/ecc/skills/springboot-verification/SKILL.md +2 -1
  334. package/bundled/upstream/ecc/skills/strategic-compact/SKILL.md +10 -5
  335. package/bundled/upstream/ecc/skills/swift-actor-persistence/SKILL.md +2 -1
  336. package/bundled/upstream/ecc/skills/swift-protocol-di-testing/SKILL.md +2 -1
  337. package/bundled/upstream/ecc/skills/taste/SKILL.md +264 -0
  338. package/bundled/upstream/ecc/skills/taste/references/genre-taxonomy.md +87 -0
  339. package/bundled/upstream/ecc/skills/tdd-workflow/SKILL.md +64 -1
  340. package/bundled/upstream/ecc/skills/team-agent-orchestration/SKILL.md +2 -1
  341. package/bundled/upstream/ecc/skills/team-builder/SKILL.md +2 -1
  342. package/bundled/upstream/ecc/skills/terminal-ops/SKILL.md +2 -1
  343. package/bundled/upstream/ecc/skills/tinystruct-patterns/SKILL.md +77 -1
  344. package/bundled/upstream/ecc/skills/token-budget-advisor/SKILL.md +2 -1
  345. package/bundled/upstream/ecc/skills/ui-demo/SKILL.md +2 -1
  346. package/bundled/upstream/ecc/skills/ui-to-vue/SKILL.md +2 -1
  347. package/bundled/upstream/ecc/skills/uncloud/SKILL.md +2 -1
  348. package/bundled/upstream/ecc/skills/unified-notifications-ops/SKILL.md +2 -1
  349. package/bundled/upstream/ecc/skills/verification-loop/SKILL.md +2 -1
  350. package/bundled/upstream/ecc/skills/video-editing/SKILL.md +2 -1
  351. package/bundled/upstream/ecc/skills/videodb/SKILL.md +2 -1
  352. package/bundled/upstream/ecc/skills/vite-patterns/SKILL.md +2 -1
  353. package/bundled/upstream/ecc/skills/vue-patterns/SKILL.md +471 -0
  354. package/bundled/upstream/ecc/skills/windows-desktop-e2e/SKILL.md +9 -8
  355. package/bundled/upstream/ecc/skills/workspace-surface-audit/SKILL.md +2 -1
  356. package/bundled/upstream/ecc/skills/x-api/SKILL.md +2 -1
  357. package/bundled/upstream/impeccable/.omc-source/bundle.json +20 -0
  358. package/bundled/upstream/impeccable/.omc-source/provenance.json +110 -0
  359. package/bundled/upstream/impeccable/agents/impeccable-manual-edit-applier.md +97 -0
  360. package/bundled/upstream/impeccable/skills/impeccable/SKILL.md +168 -0
  361. package/bundled/upstream/impeccable/skills/impeccable/reference/adapt.md +311 -0
  362. package/bundled/upstream/impeccable/skills/impeccable/reference/animate.md +201 -0
  363. package/bundled/upstream/impeccable/skills/impeccable/reference/audit.md +133 -0
  364. package/bundled/upstream/impeccable/skills/impeccable/reference/bolder.md +113 -0
  365. package/bundled/upstream/impeccable/skills/impeccable/reference/brand.md +108 -0
  366. package/bundled/upstream/impeccable/skills/impeccable/reference/clarify.md +288 -0
  367. package/bundled/upstream/impeccable/skills/impeccable/reference/codex.md +105 -0
  368. package/bundled/upstream/impeccable/skills/impeccable/reference/colorize.md +257 -0
  369. package/bundled/upstream/impeccable/skills/impeccable/reference/craft.md +123 -0
  370. package/bundled/upstream/impeccable/skills/impeccable/reference/critique.md +767 -0
  371. package/bundled/upstream/impeccable/skills/impeccable/reference/delight.md +302 -0
  372. package/bundled/upstream/impeccable/skills/impeccable/reference/distill.md +111 -0
  373. package/bundled/upstream/impeccable/skills/impeccable/reference/document.md +429 -0
  374. package/bundled/upstream/impeccable/skills/impeccable/reference/extract.md +69 -0
  375. package/bundled/upstream/impeccable/skills/impeccable/reference/harden.md +347 -0
  376. package/bundled/upstream/impeccable/skills/impeccable/reference/hooks.md +90 -0
  377. package/bundled/upstream/impeccable/skills/impeccable/reference/init.md +172 -0
  378. package/bundled/upstream/impeccable/skills/impeccable/reference/interaction-design.md +189 -0
  379. package/bundled/upstream/impeccable/skills/impeccable/reference/layout.md +161 -0
  380. package/bundled/upstream/impeccable/skills/impeccable/reference/live.md +718 -0
  381. package/bundled/upstream/impeccable/skills/impeccable/reference/onboard.md +234 -0
  382. package/bundled/upstream/impeccable/skills/impeccable/reference/optimize.md +258 -0
  383. package/bundled/upstream/impeccable/skills/impeccable/reference/overdrive.md +130 -0
  384. package/bundled/upstream/impeccable/skills/impeccable/reference/polish.md +241 -0
  385. package/bundled/upstream/impeccable/skills/impeccable/reference/product.md +60 -0
  386. package/bundled/upstream/impeccable/skills/impeccable/reference/quieter.md +99 -0
  387. package/bundled/upstream/impeccable/skills/impeccable/reference/shape.md +165 -0
  388. package/bundled/upstream/impeccable/skills/impeccable/reference/typeset.md +279 -0
  389. package/bundled/upstream/impeccable/skills/impeccable/scripts/command-metadata.json +94 -0
  390. package/bundled/upstream/impeccable/skills/impeccable/scripts/context-signals.mjs +225 -0
  391. package/bundled/upstream/impeccable/skills/impeccable/scripts/context.mjs +961 -0
  392. package/bundled/upstream/impeccable/skills/impeccable/scripts/critique-storage.mjs +242 -0
  393. package/bundled/upstream/impeccable/skills/impeccable/scripts/detect-csp.mjs +198 -0
  394. package/bundled/upstream/impeccable/skills/impeccable/scripts/detect.mjs +21 -0
  395. package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/browser/injected/index.mjs +1937 -0
  396. package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/cli/main.mjs +290 -0
  397. package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/design-system.mjs +750 -0
  398. package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/detect-antipatterns-browser.js +5138 -0
  399. package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/detect-antipatterns.mjs +50 -0
  400. package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/engines/browser/detect-url.mjs +277 -0
  401. package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/engines/regex/detect-text.mjs +568 -0
  402. package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +1015 -0
  403. package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs +234 -0
  404. package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/engines/visual/screenshot-contrast.mjs +189 -0
  405. package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/findings.mjs +12 -0
  406. package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/node/file-system.mjs +198 -0
  407. package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/profile/profiler.mjs +166 -0
  408. package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/registry/antipatterns.mjs +448 -0
  409. package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/rules/checks.mjs +2671 -0
  410. package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/shared/color.mjs +124 -0
  411. package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/shared/constants.mjs +101 -0
  412. package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/shared/inline-ignores.mjs +148 -0
  413. package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/shared/page.mjs +7 -0
  414. package/bundled/upstream/impeccable/skills/impeccable/scripts/hook-admin.mjs +661 -0
  415. package/bundled/upstream/impeccable/skills/impeccable/scripts/hook-before-edit.mjs +476 -0
  416. package/bundled/upstream/impeccable/skills/impeccable/scripts/hook-lib.mjs +1632 -0
  417. package/bundled/upstream/impeccable/skills/impeccable/scripts/hook.mjs +61 -0
  418. package/bundled/upstream/impeccable/skills/impeccable/scripts/lib/design-parser.mjs +842 -0
  419. package/bundled/upstream/impeccable/skills/impeccable/scripts/lib/impeccable-config.mjs +638 -0
  420. package/bundled/upstream/impeccable/skills/impeccable/scripts/lib/impeccable-paths.mjs +128 -0
  421. package/bundled/upstream/impeccable/skills/impeccable/scripts/lib/is-generated.mjs +69 -0
  422. package/bundled/upstream/impeccable/skills/impeccable/scripts/lib/target-args.mjs +42 -0
  423. package/bundled/upstream/impeccable/skills/impeccable/scripts/live/browser-script-parts.mjs +49 -0
  424. package/bundled/upstream/impeccable/skills/impeccable/scripts/live/completion.mjs +19 -0
  425. package/bundled/upstream/impeccable/skills/impeccable/scripts/live/event-validation.mjs +137 -0
  426. package/bundled/upstream/impeccable/skills/impeccable/scripts/live/insert-ui.mjs +458 -0
  427. package/bundled/upstream/impeccable/skills/impeccable/scripts/live/manual-apply.mjs +939 -0
  428. package/bundled/upstream/impeccable/skills/impeccable/scripts/live/manual-edit-routes.mjs +357 -0
  429. package/bundled/upstream/impeccable/skills/impeccable/scripts/live/manual-edits-buffer.mjs +152 -0
  430. package/bundled/upstream/impeccable/skills/impeccable/scripts/live/session-store.mjs +289 -0
  431. package/bundled/upstream/impeccable/skills/impeccable/scripts/live/svelte-component.mjs +826 -0
  432. package/bundled/upstream/impeccable/skills/impeccable/scripts/live/sveltekit-adapter.mjs +274 -0
  433. package/bundled/upstream/impeccable/skills/impeccable/scripts/live/ui-core.mjs +180 -0
  434. package/bundled/upstream/impeccable/skills/impeccable/scripts/live/vocabulary.mjs +36 -0
  435. package/bundled/upstream/impeccable/skills/impeccable/scripts/live-accept.mjs +812 -0
  436. package/bundled/upstream/impeccable/skills/impeccable/scripts/live-browser-dom.js +146 -0
  437. package/bundled/upstream/impeccable/skills/impeccable/scripts/live-browser-session.js +123 -0
  438. package/bundled/upstream/impeccable/skills/impeccable/scripts/live-browser.js +11173 -0
  439. package/bundled/upstream/impeccable/skills/impeccable/scripts/live-commit-manual-edits.mjs +1241 -0
  440. package/bundled/upstream/impeccable/skills/impeccable/scripts/live-complete.mjs +75 -0
  441. package/bundled/upstream/impeccable/skills/impeccable/scripts/live-copy-edit-agent.mjs +683 -0
  442. package/bundled/upstream/impeccable/skills/impeccable/scripts/live-discard-manual-edits.mjs +51 -0
  443. package/bundled/upstream/impeccable/skills/impeccable/scripts/live-inject.mjs +583 -0
  444. package/bundled/upstream/impeccable/skills/impeccable/scripts/live-insert.mjs +272 -0
  445. package/bundled/upstream/impeccable/skills/impeccable/scripts/live-manual-edit-evidence.mjs +363 -0
  446. package/bundled/upstream/impeccable/skills/impeccable/scripts/live-poll.mjs +384 -0
  447. package/bundled/upstream/impeccable/skills/impeccable/scripts/live-resume.mjs +94 -0
  448. package/bundled/upstream/impeccable/skills/impeccable/scripts/live-server.mjs +1135 -0
  449. package/bundled/upstream/impeccable/skills/impeccable/scripts/live-status.mjs +61 -0
  450. package/bundled/upstream/impeccable/skills/impeccable/scripts/live-target.mjs +30 -0
  451. package/bundled/upstream/impeccable/skills/impeccable/scripts/live-wrap.mjs +894 -0
  452. package/bundled/upstream/impeccable/skills/impeccable/scripts/live.mjs +297 -0
  453. package/bundled/upstream/impeccable/skills/impeccable/scripts/modern-screenshot.umd.js +14 -0
  454. package/bundled/upstream/impeccable/skills/impeccable/scripts/palette.mjs +633 -0
  455. package/bundled/upstream/impeccable/skills/impeccable/scripts/pin.mjs +214 -0
  456. package/bundled/upstream/oh-my-claudecode/.omc-source/bundle.json +2 -2
  457. package/bundled/upstream/oh-my-claudecode/.omc-source/provenance.json +103 -103
  458. package/bundled/upstream/oh-my-claudecode/agents/analyst.md +6 -0
  459. package/bundled/upstream/oh-my-claudecode/agents/architect.md +6 -0
  460. package/bundled/upstream/oh-my-claudecode/agents/code-reviewer.md +6 -0
  461. package/bundled/upstream/oh-my-claudecode/agents/critic.md +6 -0
  462. package/bundled/upstream/oh-my-claudecode/agents/debugger.md +6 -0
  463. package/bundled/upstream/oh-my-claudecode/agents/security-reviewer.md +6 -0
  464. package/bundled/upstream/oh-my-claudecode/agents/tracer.md +6 -0
  465. package/bundled/upstream/oh-my-claudecode/agents/verifier.md +7 -0
  466. package/bundled/upstream/oh-my-claudecode/hooks/hooks.json +9 -2
  467. package/bundled/upstream/oh-my-claudecode/skills/ask/SKILL.md +15 -4
  468. package/bundled/upstream/oh-my-claudecode/skills/autopilot/SKILL.md +30 -1
  469. package/bundled/upstream/oh-my-claudecode/skills/cancel/SKILL.md +29 -35
  470. package/bundled/upstream/oh-my-claudecode/skills/ccg/SKILL.md +20 -9
  471. package/bundled/upstream/oh-my-claudecode/skills/configure-notifications/SKILL.md +2 -2
  472. package/bundled/upstream/oh-my-claudecode/skills/omc-reference/SKILL.md +6 -4
  473. package/bundled/upstream/oh-my-claudecode/skills/omc-setup/phases/02-configure.md +1 -1
  474. package/bundled/upstream/oh-my-claudecode/skills/omc-setup/phases/03-integrations.md +2 -1
  475. package/bundled/upstream/oh-my-claudecode/skills/omc-setup/phases/04-welcome.md +2 -2
  476. package/bundled/upstream/oh-my-claudecode/skills/omc-teams/SKILL.md +29 -18
  477. package/bundled/upstream/oh-my-claudecode/skills/team/SKILL.md +127 -165
  478. package/bundled/upstream/superpowers/.omc-source/bundle.json +2 -2
  479. package/bundled/upstream/superpowers/.omc-source/provenance.json +59 -52
  480. package/bundled/upstream/superpowers/hooks/hooks-codex.json +16 -0
  481. package/bundled/upstream/superpowers/hooks/session-start +4 -12
  482. package/bundled/upstream/superpowers/hooks/session-start-codex +26 -0
  483. package/bundled/upstream/superpowers/skills/brainstorming/SKILL.md +5 -10
  484. package/bundled/upstream/superpowers/skills/brainstorming/scripts/frame-template.html +25 -26
  485. package/bundled/upstream/superpowers/skills/brainstorming/scripts/helper.js +101 -22
  486. package/bundled/upstream/superpowers/skills/brainstorming/scripts/server.cjs +399 -30
  487. package/bundled/upstream/superpowers/skills/brainstorming/scripts/start-server.sh +70 -9
  488. package/bundled/upstream/superpowers/skills/brainstorming/scripts/stop-server.sh +66 -2
  489. package/bundled/upstream/superpowers/skills/brainstorming/spec-document-reviewer-prompt.md +1 -1
  490. package/bundled/upstream/superpowers/skills/brainstorming/visual-companion.md +33 -22
  491. package/bundled/upstream/superpowers/skills/dispatching-parallel-agents/SKILL.md +9 -6
  492. package/bundled/upstream/superpowers/skills/executing-plans/SKILL.md +2 -2
  493. package/bundled/upstream/superpowers/skills/finishing-a-development-branch/SKILL.md +2 -12
  494. package/bundled/upstream/superpowers/skills/receiving-code-review/SKILL.md +2 -2
  495. package/bundled/upstream/superpowers/skills/requesting-code-review/SKILL.md +2 -2
  496. package/bundled/upstream/superpowers/skills/requesting-code-review/code-reviewer.md +15 -11
  497. package/bundled/upstream/superpowers/skills/subagent-driven-development/SKILL.md +206 -67
  498. package/bundled/upstream/superpowers/skills/subagent-driven-development/implementer-prompt.md +30 -4
  499. package/bundled/upstream/superpowers/skills/subagent-driven-development/scripts/review-package +44 -0
  500. package/bundled/upstream/superpowers/skills/subagent-driven-development/scripts/sdd-workspace +22 -0
  501. package/bundled/upstream/superpowers/skills/subagent-driven-development/scripts/task-brief +40 -0
  502. package/bundled/upstream/superpowers/skills/subagent-driven-development/task-reviewer-prompt.md +188 -0
  503. package/bundled/upstream/superpowers/skills/systematic-debugging/SKILL.md +1 -1
  504. package/bundled/upstream/superpowers/skills/test-driven-development/SKILL.md +1 -1
  505. package/bundled/upstream/superpowers/skills/using-git-worktrees/SKILL.md +9 -22
  506. package/bundled/upstream/superpowers/skills/using-superpowers/SKILL.md +19 -15
  507. package/bundled/upstream/superpowers/skills/using-superpowers/references/antigravity-tools.md +96 -0
  508. package/bundled/upstream/superpowers/skills/using-superpowers/references/claude-code-tools.md +50 -0
  509. package/bundled/upstream/superpowers/skills/using-superpowers/references/codex-tools.md +25 -12
  510. package/bundled/upstream/superpowers/skills/using-superpowers/references/copilot-tools.md +27 -20
  511. package/bundled/upstream/superpowers/skills/using-superpowers/references/gemini-tools.md +44 -32
  512. package/bundled/upstream/superpowers/skills/using-superpowers/references/pi-tools.md +28 -0
  513. package/bundled/upstream/superpowers/skills/writing-plans/SKILL.md +22 -0
  514. package/bundled/upstream/superpowers/skills/writing-plans/plan-document-reviewer-prompt.md +1 -1
  515. package/bundled/upstream/superpowers/skills/writing-skills/SKILL.md +52 -18
  516. package/bundled/upstream/superpowers/skills/writing-skills/anthropic-best-practices.md +88 -88
  517. package/bundled/upstream/superpowers/skills/writing-skills/persuasion-principles.md +3 -3
  518. package/package.json +1 -1
  519. package/src/cli/source.js +6 -0
  520. package/src/config/sources.js +15 -0
  521. package/src/merge/content-patch.js +4 -0
  522. package/bundled/upstream/superpowers/skills/subagent-driven-development/code-quality-reviewer-prompt.md +0 -25
  523. package/bundled/upstream/superpowers/skills/subagent-driven-development/spec-reviewer-prompt.md +0 -61
@@ -0,0 +1,842 @@
1
+ // Parse a DESIGN.md (Stitch-spec format) into a structured JSON model that
2
+ // the live-mode design-system panel can render. Deterministic, dependency-free.
3
+ //
4
+ // Two-layer: YAML frontmatter (machine-readable tokens) + markdown body
5
+ // (prose with six canonical H2 sections). When frontmatter is present, it's
6
+ // exposed on `model.frontmatter` alongside the prose-scraped sections;
7
+ // consumers can prefer frontmatter values and fall back to prose.
8
+
9
+ const CANONICAL_SECTIONS = [
10
+ 'Overview',
11
+ 'Colors',
12
+ 'Typography',
13
+ 'Elevation',
14
+ 'Components',
15
+ "Do's and Don'ts",
16
+ ];
17
+
18
+ // ---------- Frontmatter (Stitch YAML subset) ----------
19
+
20
+ function parseFrontmatter(md) {
21
+ const lines = md.split(/\r?\n/);
22
+ if (lines[0]?.trim() !== '---') return { frontmatter: null, body: md };
23
+
24
+ let end = -1;
25
+ for (let i = 1; i < lines.length; i++) {
26
+ if (lines[i].trim() === '---') { end = i; break; }
27
+ }
28
+ if (end === -1) return { frontmatter: null, body: md };
29
+
30
+ const yaml = lines.slice(1, end).join('\n');
31
+ const body = lines.slice(end + 1).join('\n');
32
+ try {
33
+ return { frontmatter: parseYamlSubset(yaml), body };
34
+ } catch {
35
+ return { frontmatter: null, body: md };
36
+ }
37
+ }
38
+
39
+ // Minimal YAML reader for the Stitch frontmatter subset: scalar maps with
40
+ // one level of nested objects (typography roles, components). Indent-based,
41
+ // 2-space convention. No arrays, no anchors, no multi-line scalars — Stitch's
42
+ // schema doesn't need them and accepting them would require a real YAML
43
+ // dependency we don't want to vendor.
44
+ function parseYamlSubset(yaml) {
45
+ const lines = yaml.split(/\r?\n/);
46
+ const root = {};
47
+ const stack = [{ indent: -1, obj: root }];
48
+
49
+ for (const raw of lines) {
50
+ // Skip blanks and line-only comments. Don't strip inline comments:
51
+ // unquoted hex values start with `#` and can't be safely distinguished
52
+ // from a comment after whitespace.
53
+ if (!raw.trim() || /^\s*#/.test(raw)) continue;
54
+
55
+ const indent = raw.match(/^\s*/)[0].length;
56
+ const content = raw.slice(indent);
57
+
58
+ const colonIdx = findTopLevelColon(content);
59
+ if (colonIdx === -1) continue;
60
+
61
+ while (stack.length > 1 && stack[stack.length - 1].indent >= indent) {
62
+ stack.pop();
63
+ }
64
+
65
+ const key = unquoteYamlKey(content.slice(0, colonIdx).trim());
66
+ const rest = stripInlineYamlComment(content.slice(colonIdx + 1).trim());
67
+ const parent = stack[stack.length - 1].obj;
68
+
69
+ if (rest === '') {
70
+ const obj = {};
71
+ parent[key] = obj;
72
+ stack.push({ indent, obj });
73
+ } else {
74
+ parent[key] = parseScalar(rest);
75
+ }
76
+ }
77
+
78
+ return root;
79
+ }
80
+
81
+ function findTopLevelColon(s) {
82
+ let inQuote = null;
83
+ for (let i = 0; i < s.length; i++) {
84
+ const ch = s[i];
85
+ if (inQuote) {
86
+ if (ch === inQuote && s[i - 1] !== '\\') inQuote = null;
87
+ } else if (ch === '"' || ch === "'") {
88
+ inQuote = ch;
89
+ } else if (ch === ':') {
90
+ return i;
91
+ }
92
+ }
93
+ return -1;
94
+ }
95
+
96
+ function unquoteYamlKey(key) {
97
+ if ((key.startsWith('"') && key.endsWith('"')) || (key.startsWith("'") && key.endsWith("'"))) {
98
+ return key.slice(1, -1);
99
+ }
100
+ return key;
101
+ }
102
+
103
+ function stripInlineYamlComment(s) {
104
+ let inQuote = null;
105
+ for (let i = 0; i < s.length; i++) {
106
+ const ch = s[i];
107
+ if (inQuote) {
108
+ if (ch === inQuote && s[i - 1] !== '\\') inQuote = null;
109
+ } else if (ch === '"' || ch === "'") {
110
+ inQuote = ch;
111
+ } else if (ch === '#' && i > 0 && /\s/.test(s[i - 1])) {
112
+ return s.slice(0, i).trimEnd();
113
+ }
114
+ }
115
+ return s;
116
+ }
117
+
118
+ function parseScalar(raw) {
119
+ const s = raw.trim();
120
+ if ((s.startsWith('"') && s.endsWith('"')) || (s.startsWith("'") && s.endsWith("'"))) {
121
+ return s.slice(1, -1);
122
+ }
123
+ if (s === 'true') return true;
124
+ if (s === 'false') return false;
125
+ if (s === 'null' || s === '~') return null;
126
+ if (/^-?\d+$/.test(s)) return Number(s);
127
+ if (/^-?\d*\.\d+$/.test(s)) return Number(s);
128
+ return s;
129
+ }
130
+
131
+ const HEX_RE = /#[0-9a-fA-F]{3,8}\b/g;
132
+ const OKLCH_RE = /oklch\([^)]+\)/gi;
133
+ const RGBA_RE = /rgba?\([^)]+\)/gi;
134
+ const BOX_SHADOW_RE = /(?:box-shadow:\s*)?((?:-?\d[\w\d\s\-.,/()#%]*)+)/;
135
+ const NAMED_RULE_RE = /\*\*(The [^*]+?Rule)\.\*\*\s*(.+)/;
136
+
137
+ // ---------- Section splitting ----------
138
+
139
+ function splitSections(md) {
140
+ const lines = md.split(/\r?\n/);
141
+ let title = null;
142
+ const sections = {};
143
+ let current = null;
144
+
145
+ for (const raw of lines) {
146
+ const line = raw.trimEnd();
147
+
148
+ if (!title && line.startsWith('# ') && !line.startsWith('## ')) {
149
+ title = line.replace(/^#\s+/, '').trim();
150
+ continue;
151
+ }
152
+
153
+ const h2 = line.match(/^##\s+(?:\d+\.\s*)?([^:\n]+?)(?::\s*(.+))?$/);
154
+ if (h2) {
155
+ const rawName = normalizeApostrophes(h2[1].trim());
156
+ const subtitle = h2[2] ? h2[2].trim() : null;
157
+ const canonical = matchCanonicalSection(rawName);
158
+ if (canonical) {
159
+ current = { name: canonical, subtitle, lines: [] };
160
+ sections[canonical] = current;
161
+ continue;
162
+ }
163
+ // non-canonical H2 — ignore but stop feeding into current
164
+ current = null;
165
+ continue;
166
+ }
167
+
168
+ if (current) current.lines.push(raw);
169
+ }
170
+
171
+ return { title, sections };
172
+ }
173
+
174
+ function normalizeApostrophes(s) {
175
+ return s.replace(/[\u2018\u2019]/g, "'");
176
+ }
177
+
178
+ function matchCanonicalSection(name) {
179
+ const normalized = normalizeApostrophes(name).toLowerCase();
180
+ // Exact match first
181
+ for (const c of CANONICAL_SECTIONS) {
182
+ if (normalizeApostrophes(c).toLowerCase() === normalized) return c;
183
+ }
184
+ // Keyword-contained match: "Overview & Creative North Star" -> "Overview",
185
+ // "Elevation & Depth" -> "Elevation", etc.
186
+ for (const c of CANONICAL_SECTIONS) {
187
+ const key = normalizeApostrophes(c).toLowerCase();
188
+ const pattern = new RegExp(`\\b${key.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}\\b`);
189
+ if (pattern.test(normalized)) return c;
190
+ }
191
+ return null;
192
+ }
193
+
194
+ // ---------- Subsection splitting (inside a canonical section) ----------
195
+
196
+ function splitSubsections(lines) {
197
+ const subs = [];
198
+ let current = { name: null, lines: [] };
199
+ subs.push(current);
200
+
201
+ for (const raw of lines) {
202
+ const h3 = raw.match(/^###\s+(.+?)\s*$/);
203
+ if (h3) {
204
+ current = { name: h3[1].trim(), lines: [] };
205
+ subs.push(current);
206
+ continue;
207
+ }
208
+ current.lines.push(raw);
209
+ }
210
+
211
+ return subs;
212
+ }
213
+
214
+ // ---------- Generic helpers ----------
215
+
216
+ function collectParagraphs(lines) {
217
+ const paragraphs = [];
218
+ let buf = [];
219
+ const flush = () => {
220
+ if (buf.length) {
221
+ paragraphs.push(buf.join(' ').trim());
222
+ buf = [];
223
+ }
224
+ };
225
+ for (const raw of lines) {
226
+ const trimmed = raw.trim();
227
+ if (trimmed === '') { flush(); continue; }
228
+ // Horizontal rules (---, ***) and headings/bullets end a paragraph.
229
+ if (/^(?:-{3,}|\*{3,}|_{3,})$/.test(trimmed)) { flush(); continue; }
230
+ if (raw.startsWith('#') || raw.match(/^[-*]\s/)) { flush(); continue; }
231
+ buf.push(trimmed);
232
+ }
233
+ flush();
234
+ return paragraphs.filter(Boolean);
235
+ }
236
+
237
+ function collectBullets(lines) {
238
+ const bullets = [];
239
+ let current = null;
240
+ for (const raw of lines) {
241
+ const m = raw.match(/^\s*[-*]\s+(.+)$/);
242
+ if (m) {
243
+ if (current) bullets.push(current);
244
+ current = m[1];
245
+ continue;
246
+ }
247
+ // continuation of a bullet (indented line)
248
+ if (current && raw.match(/^\s{2,}\S/)) {
249
+ current += ' ' + raw.trim();
250
+ continue;
251
+ }
252
+ // blank line ends a bullet
253
+ if (raw.trim() === '' && current) {
254
+ bullets.push(current);
255
+ current = null;
256
+ }
257
+ }
258
+ if (current) bullets.push(current);
259
+ return bullets;
260
+ }
261
+
262
+ function stripBold(s) {
263
+ return s.replace(/\*\*(.+?)\*\*/g, '$1');
264
+ }
265
+
266
+ function extractNamedRules(lines) {
267
+ const rules = [];
268
+ const seen = new Set();
269
+
270
+ // Style A (Impeccable): "**The X Rule.** body body body" — can span lines.
271
+ const joined = lines.join('\n');
272
+ const inlineStart = /\*\*(The [^*]+?Rule)\.\*\*/g;
273
+ const inlineMatches = [];
274
+ let m;
275
+ while ((m = inlineStart.exec(joined)) !== null) {
276
+ inlineMatches.push({ name: m[1], start: m.index, end: inlineStart.lastIndex });
277
+ }
278
+ for (let i = 0; i < inlineMatches.length; i++) {
279
+ const mm = inlineMatches[i];
280
+ const bodyEnd = i + 1 < inlineMatches.length ? inlineMatches[i + 1].start : joined.length;
281
+ const body = joined
282
+ .slice(mm.end, bodyEnd)
283
+ .replace(/\n##[^\n]*$/s, '')
284
+ .replace(/\n###[^\n]*$/s, '')
285
+ .trim();
286
+ const name = stripBold(mm.name).trim();
287
+ seen.add(name.toLowerCase());
288
+ rules.push({ name, body: stripBold(body) });
289
+ }
290
+
291
+ // Style B (Stitch): `### The "X" Rule` or `### The X Fallback`, body is the
292
+ // bullets/paragraphs until the next heading. Accept Rule / Fallback / Principle.
293
+ for (let i = 0; i < lines.length; i++) {
294
+ const h3 = lines[i].match(/^###\s+(.+?)\s*$/);
295
+ if (!h3) continue;
296
+ const headerName = stripBold(h3[1]).replace(/["“”]/g, '').trim();
297
+ if (!/^The\b.*\b(Rule|Fallback|Principle)\b/i.test(headerName)) continue;
298
+ if (seen.has(headerName.toLowerCase())) continue;
299
+
300
+ const bodyLines = [];
301
+ for (let j = i + 1; j < lines.length; j++) {
302
+ if (/^##\s|^###\s/.test(lines[j])) break;
303
+ bodyLines.push(lines[j]);
304
+ }
305
+ const body = stripBold(bodyLines.join('\n').replace(/\n+/g, ' ')).trim();
306
+ if (body) {
307
+ seen.add(headerName.toLowerCase());
308
+ rules.push({ name: headerName, body });
309
+ }
310
+ }
311
+
312
+ // Style C (Stitch bullet form): "* **The Layering Principle:** body"
313
+ // Colon/period lives inside the bold, so match "**...**" then inspect.
314
+ for (const b of collectBullets(lines)) {
315
+ const mm = b.match(/^\*\*([^*]+?)\*\*\s*(.+)$/);
316
+ if (!mm) continue;
317
+ const nameRaw = mm[1].replace(/[.:]\s*$/, '').replace(/["“”]/g, '').trim();
318
+ if (!/^The\b.+\b(Rule|Fallback|Principle)$/i.test(nameRaw)) continue;
319
+ if (seen.has(nameRaw.toLowerCase())) continue;
320
+ seen.add(nameRaw.toLowerCase());
321
+ rules.push({ name: nameRaw, body: stripBold(mm[2]).trim() });
322
+ }
323
+
324
+ return rules;
325
+ }
326
+
327
+ // ---------- Per-section extractors ----------
328
+
329
+ function extractOverview(section) {
330
+ if (!section) return null;
331
+ const text = section.lines.join('\n');
332
+ const northStar = text.match(/\*\*Creative North Star:\s*"([^"]+)"\*\*/);
333
+ const keyChars = [];
334
+ const keyCharMatch = text.match(/\*\*Key Characteristics:\*\*\s*\n([\s\S]+?)(?:\n##|\n###|$)/);
335
+ if (keyCharMatch) {
336
+ for (const line of keyCharMatch[1].split('\n')) {
337
+ const m = line.match(/^\s*[-*]\s+(.+)$/);
338
+ if (m) keyChars.push(stripBold(m[1].trim()));
339
+ }
340
+ }
341
+
342
+ // Philosophy paragraphs: everything that isn't a rule header or key-char block
343
+ const paragraphs = collectParagraphs(section.lines).filter(
344
+ (p) =>
345
+ !p.startsWith('**Creative North Star') &&
346
+ !p.startsWith('**Key Characteristics')
347
+ );
348
+
349
+ return {
350
+ subtitle: section.subtitle,
351
+ creativeNorthStar: northStar ? northStar[1] : null,
352
+ philosophy: paragraphs,
353
+ keyCharacteristics: keyChars,
354
+ };
355
+ }
356
+
357
+ function extractColors(section) {
358
+ if (!section) return null;
359
+ const subs = splitSubsections(section.lines);
360
+
361
+ const description = collectParagraphs(subs[0].lines).join(' ');
362
+ const groups = [];
363
+ const ROLE_KEYWORDS = /^(primary|secondary|tertiary|neutral|accent)\b/i;
364
+
365
+ for (const sub of subs.slice(1)) {
366
+ if (!sub.name || /Named Rules?/i.test(sub.name) || /^The\s/i.test(sub.name)) continue;
367
+
368
+ const bullets = collectBullets(sub.lines);
369
+ const parsed = bullets.map((b) => parseColorBullet(b)).filter(Boolean);
370
+ if (parsed.length === 0) continue;
371
+
372
+ // If every bullet starts with a role keyword (Primary/Secondary/...), promote
373
+ // each bullet to its own group. Otherwise keep the subsection as the group.
374
+ const allRoleBullets =
375
+ parsed.length > 0 && parsed.every((p) => p.name && ROLE_KEYWORDS.test(p.name));
376
+
377
+ if (allRoleBullets) {
378
+ for (const p of parsed) {
379
+ groups.push({ role: p.name, colors: [p] });
380
+ }
381
+ } else {
382
+ groups.push({ role: sub.name, colors: parsed });
383
+ }
384
+ }
385
+
386
+ // If the Colors section has no subsections at all (unlikely), fall back to
387
+ // scanning the whole section as a flat bullet list.
388
+ if (groups.length === 0) {
389
+ const flat = collectBullets(section.lines)
390
+ .map((b) => parseColorBullet(b))
391
+ .filter(Boolean);
392
+ if (flat.length) {
393
+ for (const p of flat) {
394
+ if (p.name && ROLE_KEYWORDS.test(p.name)) {
395
+ groups.push({ role: p.name, colors: [p] });
396
+ } else {
397
+ const fallback = groups.find((g) => g.role === 'Palette');
398
+ if (fallback) fallback.colors.push(p);
399
+ else groups.push({ role: 'Palette', colors: [p] });
400
+ }
401
+ }
402
+ }
403
+ }
404
+
405
+ return {
406
+ subtitle: section.subtitle,
407
+ description: description || null,
408
+ groups,
409
+ rules: extractNamedRules(section.lines),
410
+ };
411
+ }
412
+
413
+ function parseColorBullet(bullet) {
414
+ const text = bullet.trim();
415
+
416
+ // Case 1 (Impeccable): **Name** (value-with-maybe-nested-parens): description
417
+ const bold = text.match(/^\*\*(.+?)\*\*\s*(.*)$/);
418
+ if (bold && bold[2].startsWith('(')) {
419
+ const value = extractParenGroup(bold[2]);
420
+ if (value !== null) {
421
+ const after = bold[2].slice(value.length + 2).trimStart();
422
+ if (after.startsWith(':')) {
423
+ return buildColor(bold[1], value, after.slice(1).trim());
424
+ }
425
+ }
426
+ }
427
+
428
+ // Case 2 (Stitch): **Name (values):** description — value embedded in bold.
429
+ const stitch = text.match(/^\*\*([^*]+?)\s*\(([^)]+)\):\*\*\s*(.*)$/);
430
+ if (stitch) {
431
+ return buildColor(stitch[1].trim(), stitch[2], stitch[3]);
432
+ }
433
+
434
+ // Case 3: bullet without bold, just hex/oklch inside.
435
+ const values = collectColorValues(text);
436
+ if (values.length) {
437
+ return buildColor(null, values.join(' to '), text);
438
+ }
439
+ return null;
440
+ }
441
+
442
+ function extractParenGroup(s) {
443
+ if (s[0] !== '(') return null;
444
+ let depth = 0;
445
+ for (let i = 0; i < s.length; i++) {
446
+ if (s[i] === '(') depth++;
447
+ else if (s[i] === ')') {
448
+ depth--;
449
+ if (depth === 0) return s.slice(1, i);
450
+ }
451
+ }
452
+ return null;
453
+ }
454
+
455
+ function buildColor(name, rawValue, description) {
456
+ const values = collectColorValues(rawValue);
457
+ const primary = values[0] ?? rawValue.trim();
458
+ return {
459
+ name: name ? stripBold(name).trim() : null,
460
+ value: primary,
461
+ valueRange: values.length > 1 ? values : null,
462
+ format: detectFormat(primary),
463
+ description: stripBold(description || '').trim() || null,
464
+ };
465
+ }
466
+
467
+ function collectColorValues(s) {
468
+ const out = [];
469
+ s.replace(HEX_RE, (v) => {
470
+ out.push(v);
471
+ return v;
472
+ });
473
+ s.replace(OKLCH_RE, (v) => {
474
+ out.push(v);
475
+ return v;
476
+ });
477
+ return out;
478
+ }
479
+
480
+ function detectFormat(v) {
481
+ if (!v) return 'unknown';
482
+ if (v.startsWith('#')) return 'hex';
483
+ if (/^oklch/i.test(v)) return 'oklch';
484
+ if (/^rgb/i.test(v)) return 'rgb';
485
+ return 'unknown';
486
+ }
487
+
488
+ function scanInlineColors(lines) {
489
+ const out = [];
490
+ for (const line of lines) {
491
+ if (!/^\s*[-*]\s/.test(line)) continue;
492
+ const trimmed = line.replace(/^\s*[-*]\s+/, '');
493
+ const color = parseColorBullet(trimmed);
494
+ if (color) out.push(color);
495
+ }
496
+ return out;
497
+ }
498
+
499
+ function parseStitchInlineGroups(lines) {
500
+ // Stitch writes: `* **Primary (`#00478d` to `#005eb8`):** Use for "..."`
501
+ // Each bullet IS its own role. Group them under the spoken role name.
502
+ const out = [];
503
+ for (const line of lines) {
504
+ if (!/^\s*[-*]\s/.test(line)) continue;
505
+ const trimmed = line.replace(/^\s*[-*]\s+/, '').trim();
506
+ const m = trimmed.match(
507
+ /^\*\*([A-Z][a-zA-Z]+)\s*\(([^)]+)\):\*\*\s*(.*)$/
508
+ );
509
+ if (m) {
510
+ const role = m[1];
511
+ const color = buildColor(role, m[2], m[3]);
512
+ out.push({ role, colors: [color] });
513
+ }
514
+ }
515
+ return out;
516
+ }
517
+
518
+ function extractTypography(section) {
519
+ if (!section) return null;
520
+ const text = section.lines.join('\n');
521
+
522
+ const fonts = {};
523
+ // Pattern A: **Display Font:** Family (with fallback)
524
+ const fontLineRe = /\*\*([\w\s/]+?)Font:\*\*\s*([^\n(]+?)(?:\s*\(with\s+([^)]+)\))?\s*$/gm;
525
+ let fm;
526
+ while ((fm = fontLineRe.exec(text)) !== null) {
527
+ const rawRole = fm[1].trim().toLowerCase().replace(/\s+/g, '-');
528
+ const role = normalizeFontRole(rawRole) || 'display';
529
+ fonts[role] = {
530
+ family: fm[2].trim(),
531
+ fallback: fm[3] ? fm[3].trim() : null,
532
+ };
533
+ }
534
+
535
+ // Pattern B (Stitch): * **Display & Headlines (Noto Serif):** description
536
+ if (Object.keys(fonts).length === 0) {
537
+ const stitchRe = /\*\*([\w\s&/]+?)\s*\(([^)]+)\):\*\*\s*(.+)/g;
538
+ let sm;
539
+ while ((sm = stitchRe.exec(text)) !== null) {
540
+ const rawRole = sm[1]
541
+ .trim()
542
+ .toLowerCase()
543
+ .replace(/\s*&\s*/g, '-')
544
+ .replace(/\s+/g, '-');
545
+ const role = normalizeFontRole(rawRole) || rawRole;
546
+ fonts[role] = { family: sm[2].trim(), fallback: null, purpose: sm[3].trim() };
547
+ }
548
+ }
549
+
550
+ // Character paragraph — either a **Character:** label, or fall back to the
551
+ // first free paragraph under the section header (Stitch style).
552
+ const characterMatch = text.match(/\*\*Character:\*\*\s*([^\n]+(?:\n[^\n]+)*?)(?=\n\n|\n###|\n##|$)/);
553
+ let character = characterMatch ? characterMatch[1].replace(/\n/g, ' ').trim() : null;
554
+ if (!character) {
555
+ const paragraphs = collectParagraphs(section.lines).filter(
556
+ (p) => !/^\*\*[\w\s/&]+Font/i.test(p) && !/^\*\*[\w\s/&]+\([^)]+\)/.test(p)
557
+ );
558
+ if (paragraphs.length) character = paragraphs[0];
559
+ }
560
+
561
+ // Hierarchy bullets under ### Hierarchy
562
+ const subs = splitSubsections(section.lines);
563
+ let hierarchy = [];
564
+ const hierSub = subs.find((s) => s.name && /hierarch/i.test(s.name));
565
+ if (hierSub) {
566
+ const bullets = collectBullets(hierSub.lines);
567
+ hierarchy = bullets.map(parseTypeBullet).filter(Boolean);
568
+ }
569
+
570
+ return {
571
+ subtitle: section.subtitle,
572
+ fonts,
573
+ character,
574
+ hierarchy,
575
+ rules: extractNamedRules(section.lines),
576
+ };
577
+ }
578
+
579
+ function normalizeFontRole(raw) {
580
+ // Canonical roles the panel cares about: display, body, label, mono.
581
+ // Stitch often writes compound roles like "display-&-headlines" or "ui-&-body"
582
+ // — collapse them to the first canonical role present.
583
+ const tokens = raw.split(/[-/&\s]+/).filter(Boolean);
584
+ const priority = ['display', 'headline', 'body', 'ui', 'label', 'mono'];
585
+ const canonical = { headline: 'display', ui: 'body' };
586
+ for (const p of priority) {
587
+ if (tokens.includes(p)) return canonical[p] || p;
588
+ }
589
+ return null;
590
+ }
591
+
592
+ function parseTypeBullet(bullet) {
593
+ // - **Display** (family, weight 300, italic, clamp(...), line-height 1): purpose
594
+ const m = bullet.match(/^\*\*(.+?)\*\*\s*\(([^)]+)\):\s*(.*)$/);
595
+ if (!m) return null;
596
+ const name = m[1].trim();
597
+ const specs = m[2].split(',').map((s) => s.trim());
598
+ return {
599
+ name,
600
+ specs,
601
+ purpose: stripBold(m[3] || '').trim() || null,
602
+ };
603
+ }
604
+
605
+ function extractElevation(section) {
606
+ if (!section) return null;
607
+ const subs = splitSubsections(section.lines);
608
+
609
+ const description = collectParagraphs(subs[0].lines).join(' ') || null;
610
+
611
+ const shadows = [];
612
+ const seen = new Set();
613
+ const dedupe = (entry) => {
614
+ const key = (entry.name || '') + '::' + entry.value;
615
+ if (seen.has(key)) return;
616
+ seen.add(key);
617
+ shadows.push(entry);
618
+ };
619
+
620
+ for (const b of collectBullets(section.lines)) {
621
+ const parsed = parseShadowBullet(b);
622
+ if (parsed) dedupe(parsed);
623
+ }
624
+
625
+ // Fallback: extract shadows written inline in prose. Stitch style is
626
+ // "...use an extra-diffused shadow: `box-shadow: 0 12px 40px rgba(...)`."
627
+ for (const p of collectParagraphs(section.lines)) {
628
+ for (const inline of extractInlineShadows(p)) dedupe(inline);
629
+ }
630
+ for (const b of collectBullets(section.lines)) {
631
+ for (const inline of extractInlineShadows(b)) dedupe(inline);
632
+ }
633
+
634
+ return {
635
+ subtitle: section.subtitle,
636
+ description,
637
+ shadows,
638
+ rules: extractNamedRules(section.lines),
639
+ };
640
+ }
641
+
642
+ function extractInlineShadows(text) {
643
+ // Find `box-shadow: ...` anywhere in prose and capture the value. Work on the
644
+ // raw string so it handles both backtick-fenced and unfenced variants.
645
+ const out = [];
646
+ const re = /box-shadow\s*:\s*([^`;\n]+)/gi;
647
+ let m;
648
+ while ((m = re.exec(text)) !== null) {
649
+ const value = m[1].replace(/[`.)]+$/, '').trim();
650
+ if (!value) continue;
651
+ // Name heuristic: the noun immediately before the shadow phrase.
652
+ // e.g. "an extra-diffused shadow: ..." -> "extra-diffused shadow"
653
+ const before = text.slice(0, m.index);
654
+ const nameMatch = before.match(/\b([A-Za-z][A-Za-z\- ]{2,40})\s+shadow\b[^A-Za-z0-9]*$/i);
655
+ let name = null;
656
+ if (nameMatch) {
657
+ const stripped = nameMatch[1]
658
+ .replace(/^(?:use|using|apply|applying|is|are|looks? like)\s+/i, '')
659
+ .replace(/^(?:a|an|the)\s+/i, '')
660
+ .trim();
661
+ if (stripped) {
662
+ name =
663
+ stripped.charAt(0).toUpperCase() + stripped.slice(1) + ' shadow';
664
+ }
665
+ }
666
+ out.push({
667
+ name,
668
+ value,
669
+ purpose: null,
670
+ });
671
+ }
672
+ return out;
673
+ }
674
+
675
+ function parseShadowBullet(bullet) {
676
+ // - **Name** (`box-shadow: value`): purpose
677
+ // - **Name** (`value`): purpose
678
+ // Only accept if the paren content looks like a shadow value (contains px,
679
+ // rem, rgba, or box-shadow). This filters out `**Rule Name:**` bullets.
680
+ const m = bullet.match(/^\*\*(.+?)\*\*\s*\(`?([^`]+?)`?\):\s*(.*)$/);
681
+ if (!m) return null;
682
+ const rawValue = m[2].replace(/^box-shadow:\s*/i, '').trim();
683
+ const looksLikeShadow =
684
+ /box-shadow|rgba?\(|\bpx\b|\brem\b|^-?\d+\s/i.test(rawValue) &&
685
+ /\d/.test(rawValue);
686
+ if (!looksLikeShadow) return null;
687
+ const name = stripBold(m[1]).trim();
688
+ return {
689
+ name,
690
+ value: rawValue,
691
+ purpose: stripBold(m[3] || '').trim() || null,
692
+ };
693
+ }
694
+
695
+ function extractComponents(section) {
696
+ if (!section) return null;
697
+ const subs = splitSubsections(section.lines);
698
+ const components = [];
699
+
700
+ for (const sub of subs.slice(1)) {
701
+ if (!sub.name) continue;
702
+
703
+ const bullets = collectBullets(sub.lines);
704
+ const paragraphs = collectParagraphs(sub.lines);
705
+
706
+ const variants = [];
707
+ const properties = {};
708
+
709
+ for (const b of bullets) {
710
+ // - **Key:** value
711
+ const m = b.match(/^\*\*(.+?):?\*\*:?\s*(.+)$/);
712
+ if (m) {
713
+ const key = stripBold(m[1]).trim();
714
+ const value = stripBold(m[2]).trim();
715
+ // Heuristic: "Primary", "Secondary", "Hover", "Focus" etc are variants;
716
+ // "Shape", "Background", "Padding" are properties.
717
+ if (/^(primary|secondary|tertiary|ghost|hover|focus|active|disabled|default|error|selected|unselected|state)$/i.test(key.split(/[\s/]/)[0])) {
718
+ variants.push({ name: key, description: value });
719
+ } else {
720
+ properties[key.toLowerCase()] = value;
721
+ }
722
+ }
723
+ }
724
+
725
+ components.push({
726
+ name: sub.name,
727
+ description: paragraphs.join(' ') || null,
728
+ properties,
729
+ variants,
730
+ });
731
+ }
732
+
733
+ return {
734
+ subtitle: section.subtitle,
735
+ components,
736
+ };
737
+ }
738
+
739
+ function extractDosDonts(section) {
740
+ if (!section) return null;
741
+ const subs = splitSubsections(section.lines);
742
+ const dos = [];
743
+ const donts = [];
744
+
745
+ for (const sub of subs.slice(1)) {
746
+ if (!sub.name) continue;
747
+ const subName = normalizeApostrophes(sub.name);
748
+ const bullets = collectBullets(sub.lines).map((b) => stripBold(b).trim());
749
+ if (/^do'?t?:?$/i.test(subName) || /^do:?$/i.test(subName)) {
750
+ dos.push(...bullets);
751
+ } else if (/^don'?t:?$/i.test(subName)) {
752
+ donts.push(...bullets);
753
+ }
754
+ }
755
+
756
+ // Classify by bullet prefix as a backup (catches loose bullets outside H3 wrappers)
757
+ for (const b of collectBullets(section.lines)) {
758
+ const stripped = normalizeApostrophes(stripBold(b).trim());
759
+ if (/^don'?t\b/i.test(stripped)) {
760
+ if (!donts.some((d) => normalizeApostrophes(d) === stripped)) donts.push(stripped);
761
+ } else if (/^do\b/i.test(stripped)) {
762
+ if (!dos.some((d) => normalizeApostrophes(d) === stripped)) dos.push(stripped);
763
+ }
764
+ }
765
+
766
+ return { dos, donts };
767
+ }
768
+
769
+ // ---------- Coverage assessment ----------
770
+
771
+ function assessCoverage(model) {
772
+ const report = {};
773
+
774
+ report.overview = model.overview
775
+ ? {
776
+ northStar: Boolean(model.overview.creativeNorthStar),
777
+ philosophy: model.overview.philosophy.length > 0,
778
+ keyCharacteristics: model.overview.keyCharacteristics.length,
779
+ }
780
+ : 'missing';
781
+
782
+ report.colors = model.colors
783
+ ? {
784
+ groups: model.colors.groups.length,
785
+ totalColors: model.colors.groups.reduce((n, g) => n + g.colors.length, 0),
786
+ rules: model.colors.rules.length,
787
+ }
788
+ : 'missing';
789
+
790
+ report.typography = model.typography
791
+ ? {
792
+ fonts: Object.keys(model.typography.fonts).length,
793
+ hierarchyEntries: model.typography.hierarchy.length,
794
+ character: Boolean(model.typography.character),
795
+ rules: model.typography.rules.length,
796
+ }
797
+ : 'missing';
798
+
799
+ report.elevation = model.elevation
800
+ ? {
801
+ shadows: model.elevation.shadows.length,
802
+ rules: model.elevation.rules.length,
803
+ description: Boolean(model.elevation.description),
804
+ }
805
+ : 'missing';
806
+
807
+ report.components = model.components
808
+ ? {
809
+ count: model.components.components.length,
810
+ variantTotal: model.components.components.reduce((n, c) => n + c.variants.length, 0),
811
+ }
812
+ : 'missing';
813
+
814
+ report.dosDonts = model.dosDonts
815
+ ? {
816
+ dos: model.dosDonts.dos.length,
817
+ donts: model.dosDonts.donts.length,
818
+ }
819
+ : 'missing';
820
+
821
+ return report;
822
+ }
823
+
824
+ // ---------- Main ----------
825
+
826
+ export function parseDesignMd(md) {
827
+ const { frontmatter, body } = parseFrontmatter(md);
828
+ const { title, sections } = splitSections(body);
829
+ return {
830
+ schemaVersion: 2,
831
+ title,
832
+ frontmatter,
833
+ overview: extractOverview(sections['Overview']),
834
+ colors: extractColors(sections['Colors']),
835
+ typography: extractTypography(sections['Typography']),
836
+ elevation: extractElevation(sections['Elevation']),
837
+ components: extractComponents(sections['Components']),
838
+ dosDonts: extractDosDonts(sections["Do's and Don'ts"]),
839
+ };
840
+ }
841
+
842
+ export { assessCoverage };