bi-superpowers 1.0.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 (276) hide show
  1. package/.claude-plugin/marketplace.json +31 -0
  2. package/.claude-plugin/plugin.json +34 -0
  3. package/.claude-plugin/skill-manifest.json +79 -0
  4. package/.mcp.json +13 -0
  5. package/.plugin/plugin.json +14 -0
  6. package/LICENSE +21 -0
  7. package/README.md +849 -0
  8. package/bin/build-plugin.js +97 -0
  9. package/bin/cli.js +891 -0
  10. package/bin/commands/autoupdate.js +128 -0
  11. package/bin/commands/build-desktop.js +368 -0
  12. package/bin/commands/create-from-template.js +165 -0
  13. package/bin/commands/diff.js +435 -0
  14. package/bin/commands/install.js +542 -0
  15. package/bin/commands/lint.js +441 -0
  16. package/bin/commands/mcp-setup.js +255 -0
  17. package/bin/commands/session-update.js +204 -0
  18. package/bin/commands/smoke-test.js +20 -0
  19. package/bin/commands/uninstall.js +611 -0
  20. package/bin/commands/update-check.js +427 -0
  21. package/bin/commands/validate-cases.js +264 -0
  22. package/bin/commands/validate-projects.js +426 -0
  23. package/bin/commands/watch.js +251 -0
  24. package/bin/lib/agents.js +62 -0
  25. package/bin/lib/base-template-smoke.js +299 -0
  26. package/bin/lib/claude-hooks.js +160 -0
  27. package/bin/lib/generators/claude-plugin.js +529 -0
  28. package/bin/lib/generators/index.js +116 -0
  29. package/bin/lib/generators/shared.js +257 -0
  30. package/bin/lib/mcp-config.js +835 -0
  31. package/bin/lib/microsoft-mcp.js +206 -0
  32. package/bin/lib/powerbi-mcp-session.js +140 -0
  33. package/bin/lib/skills.js +164 -0
  34. package/bin/lib/template-scaffold.js +366 -0
  35. package/bin/mcp/powerbi-modeling-launcher.js +42 -0
  36. package/bin/postinstall.js +50 -0
  37. package/bin/utils/mcp-detect.js +346 -0
  38. package/bin/utils/tui.js +314 -0
  39. package/commands/bi-connect.md +520 -0
  40. package/commands/bi-dax.md +464 -0
  41. package/commands/bi-kickoff.md +550 -0
  42. package/commands/bi-modeling.md +485 -0
  43. package/commands/bi-performance.md +521 -0
  44. package/commands/bi-powerquery.md +229 -0
  45. package/commands/bi-refactor.md +249 -0
  46. package/commands/bi-scorecard.md +268 -0
  47. package/commands/bi-start.md +272 -0
  48. package/config.example.json +23 -0
  49. package/config.json +23 -0
  50. package/desktop-extension/manifest.json +30 -0
  51. package/desktop-extension/package.json +10 -0
  52. package/desktop-extension/server.js +137 -0
  53. package/package.json +94 -0
  54. package/skills/bi-connect/SKILL.md +522 -0
  55. package/skills/bi-connect/scripts/update-check.js +427 -0
  56. package/skills/bi-dax/SKILL.md +466 -0
  57. package/skills/bi-dax/scripts/update-check.js +427 -0
  58. package/skills/bi-kickoff/SKILL.md +552 -0
  59. package/skills/bi-kickoff/references/flow.html +78 -0
  60. package/skills/bi-kickoff/references/flow.md +62 -0
  61. package/skills/bi-kickoff/scripts/update-check.js +427 -0
  62. package/skills/bi-modeling/SKILL.md +487 -0
  63. package/skills/bi-modeling/scripts/update-check.js +427 -0
  64. package/skills/bi-performance/SKILL.md +523 -0
  65. package/skills/bi-performance/scripts/install-tabular-editor.ps1 +159 -0
  66. package/skills/bi-performance/scripts/run-bpa.ps1 +265 -0
  67. package/skills/bi-performance/scripts/update-check.js +427 -0
  68. package/skills/bi-powerquery/SKILL.md +231 -0
  69. package/skills/bi-powerquery/references/base-template-data-contract.md +323 -0
  70. package/skills/bi-powerquery/references/power-query-standards.md +74 -0
  71. package/skills/bi-powerquery/scripts/new-powerquery-staging.ps1 +371 -0
  72. package/skills/bi-powerquery/scripts/test-powerquery-contract.ps1 +225 -0
  73. package/skills/bi-powerquery/scripts/update-check.js +427 -0
  74. package/skills/bi-refactor/SKILL.md +251 -0
  75. package/skills/bi-refactor/references/flow.md +27 -0
  76. package/skills/bi-refactor/scripts/update-check.js +427 -0
  77. package/skills/bi-scorecard/SKILL.md +270 -0
  78. package/skills/bi-scorecard/examples/base-template-scorecard-overlay.json +82 -0
  79. package/skills/bi-scorecard/scripts/new-scorecard-blueprint-from-base-template.ps1 +124 -0
  80. package/skills/bi-scorecard/scripts/powerbi-goal-status-rules-api.ps1 +39 -0
  81. package/skills/bi-scorecard/scripts/powerbi-goal-values-api.ps1 +48 -0
  82. package/skills/bi-scorecard/scripts/powerbi-goals-api.ps1 +68 -0
  83. package/skills/bi-scorecard/scripts/powerbi-rest-common.ps1 +197 -0
  84. package/skills/bi-scorecard/scripts/powerbi-scorecards-api.ps1 +53 -0
  85. package/skills/bi-scorecard/scripts/update-check.js +427 -0
  86. package/skills/bi-start/SKILL.md +274 -0
  87. package/skills/bi-start/scripts/update-check.js +427 -0
  88. package/src/content/base.md +197 -0
  89. package/src/content/mcp-requirements.json +57 -0
  90. package/src/content/routing.md +201 -0
  91. package/src/content/skills/bi-connect.md +493 -0
  92. package/src/content/skills/bi-dax.md +437 -0
  93. package/src/content/skills/bi-kickoff/SKILL.md +523 -0
  94. package/src/content/skills/bi-kickoff/references/flow.html +78 -0
  95. package/src/content/skills/bi-kickoff/references/flow.md +62 -0
  96. package/src/content/skills/bi-modeling.md +458 -0
  97. package/src/content/skills/bi-performance/SKILL.md +494 -0
  98. package/src/content/skills/bi-performance/scripts/install-tabular-editor.ps1 +159 -0
  99. package/src/content/skills/bi-performance/scripts/run-bpa.ps1 +265 -0
  100. package/src/content/skills/bi-powerquery/SKILL.md +202 -0
  101. package/src/content/skills/bi-powerquery/references/base-template-data-contract.md +323 -0
  102. package/src/content/skills/bi-powerquery/references/power-query-standards.md +74 -0
  103. package/src/content/skills/bi-powerquery/scripts/new-powerquery-staging.ps1 +371 -0
  104. package/src/content/skills/bi-powerquery/scripts/test-powerquery-contract.ps1 +225 -0
  105. package/src/content/skills/bi-refactor/SKILL.md +222 -0
  106. package/src/content/skills/bi-refactor/references/flow.md +27 -0
  107. package/src/content/skills/bi-scorecard/SKILL.md +241 -0
  108. package/src/content/skills/bi-scorecard/examples/base-template-scorecard-blueprint.expected.json +105 -0
  109. package/src/content/skills/bi-scorecard/examples/base-template-scorecard-overlay.json +82 -0
  110. package/src/content/skills/bi-scorecard/scripts/new-scorecard-blueprint-from-base-template.ps1 +124 -0
  111. package/src/content/skills/bi-scorecard/scripts/powerbi-goal-status-rules-api.ps1 +39 -0
  112. package/src/content/skills/bi-scorecard/scripts/powerbi-goal-values-api.ps1 +48 -0
  113. package/src/content/skills/bi-scorecard/scripts/powerbi-goals-api.ps1 +68 -0
  114. package/src/content/skills/bi-scorecard/scripts/powerbi-rest-common.ps1 +197 -0
  115. package/src/content/skills/bi-scorecard/scripts/powerbi-scorecards-api.ps1 +53 -0
  116. package/src/content/skills/bi-start.md +266 -0
  117. package/templates/base-template/AGENTS.md +33 -0
  118. package/templates/base-template/base-template.Report/.platform +11 -0
  119. package/templates/base-template/base-template.Report/StaticResources/RegisteredResources/BISuperpowers.json +3888 -0
  120. package/templates/base-template/base-template.Report/StaticResources/SharedResources/BaseThemes/CY18SU07.json +177 -0
  121. package/templates/base-template/base-template.Report/StaticResources/SharedResources/BaseThemes/Fluent2-CY26SU03.json +4104 -0
  122. package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/AccessibleCityPark.json +26 -0
  123. package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/AccessibleDefault.json +26 -0
  124. package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/AccessibleNeutral.json +26 -0
  125. package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/AccessibleOrchid.json +26 -0
  126. package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/AccessibleTidal.json +26 -0
  127. package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/Bloom.json +139 -0
  128. package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/CityPark.json +40 -0
  129. package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/Classroom.json +40 -0
  130. package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/ColorblindSafe.json +48 -0
  131. package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/CopilotDefault.json +1861 -0
  132. package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/Divergent.json +127 -0
  133. package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/Electric.json +48 -0
  134. package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/Frontier.json +136 -0
  135. package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/HighContrast.json +40 -0
  136. package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/Highrise.json +41 -0
  137. package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/Innovate.json +227 -0
  138. package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/NewExecutive.json +41 -0
  139. package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/Solar.json +33 -0
  140. package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/Storm.json +25 -0
  141. package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/Sunset.json +48 -0
  142. package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/Temperature.json +33 -0
  143. package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/Tidal.json +100 -0
  144. package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/Twilight.json +40 -0
  145. package/templates/base-template/base-template.Report/definition/bookmarks/1d40d43c7ade66e8603c.bookmark.json +2297 -0
  146. package/templates/base-template/base-template.Report/definition/bookmarks/af068ff51c0ca3089ea7.bookmark.json +2300 -0
  147. package/templates/base-template/base-template.Report/definition/bookmarks/bookmarks.json +11 -0
  148. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/page.json +130 -0
  149. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/0352fd80d074693a65db/mobile.json +11 -0
  150. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/0352fd80d074693a65db/visual.json +669 -0
  151. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/1c5a14bf493697344b68/mobile.json +11 -0
  152. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/1c5a14bf493697344b68/visual.json +723 -0
  153. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/3486cf7624c5b109b4e5/mobile.json +11 -0
  154. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/3486cf7624c5b109b4e5/visual.json +333 -0
  155. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/4d8b989008edc0db28d1/mobile.json +11 -0
  156. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/4d8b989008edc0db28d1/visual.json +109 -0
  157. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/55e10ac7d76a1954f94f/mobile.json +31 -0
  158. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/55e10ac7d76a1954f94f/visual.json +378 -0
  159. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/57f52ecf4490f70e4da1/mobile.json +11 -0
  160. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/57f52ecf4490f70e4da1/visual.json +175 -0
  161. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/5f4d76bbc870118e9840/mobile.json +11 -0
  162. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/5f4d76bbc870118e9840/visual.json +468 -0
  163. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/73629e1abebb7a444b59/mobile.json +11 -0
  164. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/73629e1abebb7a444b59/visual.json +359 -0
  165. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/749cb1388c7e0a88161c/mobile.json +11 -0
  166. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/749cb1388c7e0a88161c/visual.json +690 -0
  167. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/90677f13cea5d1275990/visual.json +17 -0
  168. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/92cf92e3da10493adb78/mobile.json +11 -0
  169. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/92cf92e3da10493adb78/visual.json +468 -0
  170. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/9fe17b1971f68443fc15/mobile.json +10 -0
  171. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/9fe17b1971f68443fc15/visual.json +328 -0
  172. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/a30bd0950630ed94e8a3/mobile.json +11 -0
  173. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/a30bd0950630ed94e8a3/visual.json +578 -0
  174. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/a56e91d9400a835e4814/mobile.json +11 -0
  175. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/a56e91d9400a835e4814/visual.json +432 -0
  176. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/aded24cd205c0b528642/mobile.json +11 -0
  177. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/aded24cd205c0b528642/visual.json +801 -0
  178. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/af34b26f14a8a724c9a9/mobile.json +37 -0
  179. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/af34b26f14a8a724c9a9/visual.json +1318 -0
  180. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/b529688fe5a226643322/visual.json +209 -0
  181. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/c4c6f332d05e72e2eb06/mobile.json +11 -0
  182. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/c4c6f332d05e72e2eb06/visual.json +174 -0
  183. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/fa81f184e2cb0e8b087c/mobile.json +29 -0
  184. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/fa81f184e2cb0e8b087c/visual.json +241 -0
  185. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/page.json +130 -0
  186. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/07e9c4302e29029c5462/mobile.json +11 -0
  187. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/07e9c4302e29029c5462/visual.json +690 -0
  188. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/109ceede4bc015b0c006/mobile.json +11 -0
  189. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/109ceede4bc015b0c006/visual.json +468 -0
  190. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/118257e006d472277e10/mobile.json +11 -0
  191. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/118257e006d472277e10/visual.json +359 -0
  192. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/2caf02e0137c4a1280cc/mobile.json +11 -0
  193. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/2caf02e0137c4a1280cc/visual.json +669 -0
  194. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/311e76fe3c9edad68204/mobile.json +11 -0
  195. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/311e76fe3c9edad68204/visual.json +109 -0
  196. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/31c21f8cbeb3b208940a/visual.json +209 -0
  197. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/3ab72c25062437149b03/visual.json +17 -0
  198. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/5959867442abcb0ce2b3/mobile.json +11 -0
  199. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/5959867442abcb0ce2b3/visual.json +788 -0
  200. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/5b96e0f88d192b044a13/mobile.json +11 -0
  201. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/5b96e0f88d192b044a13/visual.json +592 -0
  202. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/64e749a63d0786000e22/mobile.json +11 -0
  203. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/64e749a63d0786000e22/visual.json +468 -0
  204. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/7ae1ca604edac6586ad0/mobile.json +11 -0
  205. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/7ae1ca604edac6586ad0/visual.json +1310 -0
  206. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/840300733885141a6603/mobile.json +11 -0
  207. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/840300733885141a6603/visual.json +175 -0
  208. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/a38448cdb203279273d2/mobile.json +11 -0
  209. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/a38448cdb203279273d2/visual.json +516 -0
  210. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/d1e86f213a3841d12e20/visual.json +328 -0
  211. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/d4a484c1bcc8ee3075e2/mobile.json +11 -0
  212. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/d4a484c1bcc8ee3075e2/visual.json +432 -0
  213. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/d87cb5cf06acca19bbb5/mobile.json +11 -0
  214. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/d87cb5cf06acca19bbb5/visual.json +241 -0
  215. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/e243da2677209ed69408/mobile.json +11 -0
  216. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/e243da2677209ed69408/visual.json +174 -0
  217. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/f3aaf24f5b22b67573b0/mobile.json +11 -0
  218. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/f3aaf24f5b22b67573b0/visual.json +333 -0
  219. package/templates/base-template/base-template.Report/definition/pages/pages.json +8 -0
  220. package/templates/base-template/base-template.Report/definition/report.json +89 -0
  221. package/templates/base-template/base-template.Report/definition/version.json +4 -0
  222. package/templates/base-template/base-template.Report/definition.pbir +9 -0
  223. package/templates/base-template/base-template.SemanticModel/.platform +11 -0
  224. package/templates/base-template/base-template.SemanticModel/definition/cultures/es-AR.tmdl +11185 -0
  225. package/templates/base-template/base-template.SemanticModel/definition/database.tmdl +3 -0
  226. package/templates/base-template/base-template.SemanticModel/definition/expressions.tmdl +234 -0
  227. package/templates/base-template/base-template.SemanticModel/definition/functions.tmdl +637 -0
  228. package/templates/base-template/base-template.SemanticModel/definition/model.tmdl +82 -0
  229. package/templates/base-template/base-template.SemanticModel/definition/relationships.tmdl +271 -0
  230. package/templates/base-template/base-template.SemanticModel/definition/tables/Calendario.tmdl +200 -0
  231. package/templates/base-template/base-template.SemanticModel/definition/tables/Campa/303/261as.tmdl +75 -0
  232. package/templates/base-template/base-template.SemanticModel/definition/tables/Canales.tmdl +84 -0
  233. package/templates/base-template/base-template.SemanticModel/definition/tables/Clientes.tmdl +143 -0
  234. package/templates/base-template/base-template.SemanticModel/definition/tables/Devoluciones.tmdl +95 -0
  235. package/templates/base-template/base-template.SemanticModel/definition/tables/Ejecuci/303/263n proyectos.tmdl" +130 -0
  236. package/templates/base-template/base-template.SemanticModel/definition/tables/Entregas.tmdl +122 -0
  237. package/templates/base-template/base-template.SemanticModel/definition/tables/Equipos m/303/251tricas.tmdl" +40 -0
  238. package/templates/base-template/base-template.SemanticModel/definition/tables/Equipos.tmdl +73 -0
  239. package/templates/base-template/base-template.SemanticModel/definition/tables/Horas.tmdl +122 -0
  240. package/templates/base-template/base-template.SemanticModel/definition/tables/Interacciones clientes.tmdl +146 -0
  241. package/templates/base-template/base-template.SemanticModel/definition/tables/Leads.tmdl +119 -0
  242. package/templates/base-template/base-template.SemanticModel/definition/tables/Monedas.tmdl +44 -0
  243. package/templates/base-template/base-template.SemanticModel/definition/tables/Movimientos financieros.tmdl +145 -0
  244. package/templates/base-template/base-template.SemanticModel/definition/tables/M/303/251tricas.tmdl +1294 -0
  245. package/templates/base-template/base-template.SemanticModel/definition/tables/N/303/263mina.tmdl +110 -0
  246. package/templates/base-template/base-template.SemanticModel/definition/tables/Oportunidades.tmdl +135 -0
  247. package/templates/base-template/base-template.SemanticModel/definition/tables/Presupuesto.tmdl +125 -0
  248. package/templates/base-template/base-template.SemanticModel/definition/tables/Productos.tmdl +98 -0
  249. package/templates/base-template/base-template.SemanticModel/definition/tables/Proyectos.tmdl +77 -0
  250. package/templates/base-template/base-template.SemanticModel/definition/tables/Servicios.tmdl +75 -0
  251. package/templates/base-template/base-template.SemanticModel/definition/tables/Tareas proyecto.tmdl +102 -0
  252. package/templates/base-template/base-template.SemanticModel/definition/tables/Tipo de cambio.tmdl +67 -0
  253. package/templates/base-template/base-template.SemanticModel/definition/tables/Ventas.tmdl +180 -0
  254. package/templates/base-template/base-template.SemanticModel/definition/tables/_Aux An/303/241lisis dimensiones.tmdl" +38 -0
  255. package/templates/base-template/base-template.SemanticModel/definition/tables/_Aux Comparaciones.tmdl +227 -0
  256. package/templates/base-template/base-template.SemanticModel/definition/tables/_Aux Compatibilidad m/303/251trica-dimensi/303/263n.tmdl" +68 -0
  257. package/templates/base-template/base-template.SemanticModel/definition/tables/_Aux Modelo configuraci/303/263n.tmdl" +44 -0
  258. package/templates/base-template/base-template.SemanticModel/definition/tables/_Aux Modo fechas.tmdl +36 -0
  259. package/templates/base-template/base-template.SemanticModel/definition/tables/_Aux M/303/251trica-Equipo.tmdl" +102 -0
  260. package/templates/base-template/base-template.SemanticModel/definition/tables/_Aux Overrides m/303/251trica-dimensi/303/263n.tmdl" +54 -0
  261. package/templates/base-template/base-template.SemanticModel/definition/tables/_Aux Per/303/255odos.tmdl" +182 -0
  262. package/templates/base-template/base-template.SemanticModel/definition/tables/_Aux Rango fechas modo.tmdl +36 -0
  263. package/templates/base-template/base-template.SemanticModel/definition/tables/_Aux Rango fechas.tmdl +27 -0
  264. package/templates/base-template/base-template.SemanticModel/definition/tables/_Aux Vista de calendario.tmdl +30 -0
  265. package/templates/base-template/base-template.SemanticModel/definition/tables/_GC C/303/241lculo.tmdl" +70 -0
  266. package/templates/base-template/base-template.SemanticModel/definition/tables/_GC Eje X.tmdl +63 -0
  267. package/templates/base-template/base-template.SemanticModel/definition/tables/_GC M/303/251trica.tmdl" +374 -0
  268. package/templates/base-template/base-template.SemanticModel/definition/tables/_GC Tipo c/303/241lculo.tmdl" +223 -0
  269. package/templates/base-template/base-template.SemanticModel/definition/tables/_PC Dimensi/303/263n.tmdl" +98 -0
  270. package/templates/base-template/base-template.SemanticModel/definition/tables/_PC Eje X.tmdl +68 -0
  271. package/templates/base-template/base-template.SemanticModel/definition/tables//303/223rdenes servicio.tmdl" +151 -0
  272. package/templates/base-template/base-template.SemanticModel/definition.pbism +5 -0
  273. package/templates/base-template/base-template.SemanticModel/diagramLayout.json +568 -0
  274. package/templates/base-template/base-template.pbip +14 -0
  275. package/templates/base-template/template.manifest.json +41 -0
  276. package/theme/BISuperpowers.json +3888 -0
@@ -0,0 +1,206 @@
1
+ /**
2
+ * Official Microsoft MCP Configuration Helpers
3
+ * ============================================
4
+ *
5
+ * Single source of truth for the MCP servers that bi-superpowers ships.
6
+ * Currently ships 2 servers, both from Microsoft:
7
+ *
8
+ * - powerbi-modeling-mcp: local stdio launcher that talks to Power BI Desktop
9
+ * via XMLA on localhost. Requires Power BI Desktop running with a model open.
10
+ * - microsoft-learn: HTTP MCP that pipes Microsoft Learn docs into the agent.
11
+ *
12
+ * @module lib/microsoft-mcp
13
+ */
14
+
15
+ const path = require('path');
16
+
17
+ const MICROSOFT_LEARN_URL = 'https://learn.microsoft.com/api/mcp';
18
+ const MODELING_SERVER_NAME = 'powerbi-modeling-mcp';
19
+ const LEARN_SERVER_NAME = 'microsoft-learn';
20
+ const ABSOLUTE_LAUNCHER_MODE = 'absolute';
21
+ const PLUGIN_ROOT_LAUNCHER_MODE = 'plugin-root';
22
+
23
+ /**
24
+ * Resolve the launcher script path used to start the official Modeling MCP.
25
+ *
26
+ * @param {Object} options - Path resolution options
27
+ * @param {string} [options.packageDir] - Installed package directory
28
+ * @param {string} [options.launcherMode] - `absolute` or `plugin-root`
29
+ * @returns {string} Launcher path expression
30
+ */
31
+ function resolveModelingLauncherPath(options = {}) {
32
+ const { packageDir, launcherMode = ABSOLUTE_LAUNCHER_MODE } = options;
33
+
34
+ if (launcherMode === PLUGIN_ROOT_LAUNCHER_MODE) {
35
+ return '${CLAUDE_PLUGIN_ROOT}/bin/mcp/powerbi-modeling-launcher.js';
36
+ }
37
+
38
+ return path.join(packageDir || process.cwd(), 'bin', 'mcp', 'powerbi-modeling-launcher.js');
39
+ }
40
+
41
+ /**
42
+ * Create the canonical flat MCP config used by Claude Code plugins.
43
+ *
44
+ * @param {Object} options - Generation options
45
+ * @param {string} [options.packageDir] - Installed package directory
46
+ * @param {string} [options.launcherMode] - `absolute` or `plugin-root`
47
+ * @returns {Object} Flat MCP server object
48
+ */
49
+ function createPluginMcpConfig(options = {}) {
50
+ const launcherPath = resolveModelingLauncherPath(options);
51
+
52
+ return {
53
+ [MODELING_SERVER_NAME]: {
54
+ type: 'stdio',
55
+ command: 'node',
56
+ args: [launcherPath],
57
+ },
58
+ [LEARN_SERVER_NAME]: {
59
+ type: 'http',
60
+ url: MICROSOFT_LEARN_URL,
61
+ },
62
+ };
63
+ }
64
+
65
+ /**
66
+ * Convert the canonical flat config to the target client format.
67
+ *
68
+ * @param {string} format - Target format identifier
69
+ * @param {Object} options - Generation options
70
+ * @returns {Object} Config object in the target format
71
+ */
72
+ function createMcpConfigForFormat(format, options = {}) {
73
+ const flatConfig = createPluginMcpConfig(options);
74
+
75
+ switch (format) {
76
+ case 'plugin':
77
+ case 'cursor':
78
+ return flatConfig;
79
+
80
+ case 'claude':
81
+ case 'vscode':
82
+ return { mcpServers: flatConfig };
83
+
84
+ case 'kilo':
85
+ return {
86
+ mcp: Object.fromEntries(
87
+ Object.entries(flatConfig).map(([name, config]) => {
88
+ if (config.type === 'http') {
89
+ return [
90
+ name,
91
+ {
92
+ type: 'remote',
93
+ url: config.url,
94
+ enabled: true,
95
+ timeout: 15000,
96
+ },
97
+ ];
98
+ }
99
+
100
+ return [
101
+ name,
102
+ {
103
+ type: 'local',
104
+ command: [config.command, ...(config.args || [])],
105
+ enabled: true,
106
+ timeout: 10000,
107
+ },
108
+ ];
109
+ })
110
+ ),
111
+ };
112
+
113
+ case 'opencode':
114
+ return {
115
+ mcp: Object.fromEntries(
116
+ Object.entries(flatConfig).map(([name, config]) => {
117
+ if (config.type === 'http') {
118
+ return [name, config];
119
+ }
120
+
121
+ const quotedArgs = (config.args || []).map((arg) =>
122
+ /\s/.test(arg) ? JSON.stringify(arg) : arg
123
+ );
124
+
125
+ return [
126
+ name,
127
+ {
128
+ type: 'local',
129
+ command: [config.command, ...quotedArgs].join(' '),
130
+ },
131
+ ];
132
+ })
133
+ ),
134
+ };
135
+
136
+ default:
137
+ return { mcpServers: flatConfig };
138
+ }
139
+ }
140
+
141
+ /**
142
+ * Merge a generated MCP config into an existing config object.
143
+ *
144
+ * @param {Object} existingConfig - Existing parsed config
145
+ * @param {Object} newConfig - Generated MCP config
146
+ * @param {string} format - Target format identifier
147
+ * @returns {Object} Merged config
148
+ */
149
+ function mergeMcpConfig(existingConfig, newConfig, format) {
150
+ const existing = existingConfig || {};
151
+
152
+ switch (format) {
153
+ case 'plugin':
154
+ case 'cursor':
155
+ return {
156
+ ...existing,
157
+ ...newConfig,
158
+ };
159
+
160
+ case 'claude':
161
+ case 'vscode':
162
+ return {
163
+ ...existing,
164
+ mcpServers: {
165
+ ...(existing.mcpServers || {}),
166
+ ...(newConfig.mcpServers || {}),
167
+ },
168
+ };
169
+
170
+ case 'kilo':
171
+ return {
172
+ ...existing,
173
+ mcp: {
174
+ ...(existing.mcp || {}),
175
+ ...(newConfig.mcp || {}),
176
+ },
177
+ };
178
+
179
+ case 'opencode':
180
+ return {
181
+ ...existing,
182
+ mcp: {
183
+ ...(existing.mcp || {}),
184
+ ...(newConfig.mcp || {}),
185
+ },
186
+ };
187
+
188
+ default:
189
+ return {
190
+ ...existing,
191
+ ...newConfig,
192
+ };
193
+ }
194
+ }
195
+
196
+ module.exports = {
197
+ ABSOLUTE_LAUNCHER_MODE,
198
+ PLUGIN_ROOT_LAUNCHER_MODE,
199
+ MICROSOFT_LEARN_URL,
200
+ MODELING_SERVER_NAME,
201
+ LEARN_SERVER_NAME,
202
+ resolveModelingLauncherPath,
203
+ createPluginMcpConfig,
204
+ createMcpConfigForFormat,
205
+ mergeMcpConfig,
206
+ };
@@ -0,0 +1,140 @@
1
+ /**
2
+ * Power BI Modeling MCP Session
3
+ * =============================
4
+ *
5
+ * Tiny JSON-RPC client for the official Microsoft Power BI Modeling MCP
6
+ * executable. The session is stdio-based and speaks newline-delimited JSON.
7
+ *
8
+ * @module lib/powerbi-mcp-session
9
+ */
10
+
11
+ const { spawn } = require('child_process');
12
+
13
+ const PROTOCOL_VERSION = '2024-11-05';
14
+
15
+ function createPowerBiMcpSession(exePath, spawnFn = spawn) {
16
+ if (!exePath) {
17
+ throw new Error('A Power BI Modeling MCP executable path is required.');
18
+ }
19
+
20
+ const child = spawnFn(exePath, ['--readwrite', '--skip-confirmation'], {
21
+ stdio: ['pipe', 'pipe', 'pipe'],
22
+ });
23
+
24
+ const pending = new Map();
25
+ let nextId = 1;
26
+ let closed = false;
27
+ let stdoutBuffer = '';
28
+
29
+ function rejectPending(error) {
30
+ for (const { reject } of pending.values()) {
31
+ reject(error);
32
+ }
33
+ pending.clear();
34
+ }
35
+
36
+ function send(method, params) {
37
+ if (closed) {
38
+ return Promise.reject(new Error('MCP session is closed.'));
39
+ }
40
+
41
+ const id = nextId++;
42
+ const payload = JSON.stringify({ jsonrpc: '2.0', id, method, params });
43
+
44
+ return new Promise((resolve, reject) => {
45
+ pending.set(id, { resolve, reject });
46
+ child.stdin.write(`${payload}\n`, (error) => {
47
+ if (error) {
48
+ pending.delete(id);
49
+ reject(error);
50
+ }
51
+ });
52
+ });
53
+ }
54
+
55
+ child.stdout.on('data', (chunk) => {
56
+ stdoutBuffer += chunk.toString('utf8');
57
+
58
+ let newlineIndex;
59
+ while ((newlineIndex = stdoutBuffer.indexOf('\n')) >= 0) {
60
+ const rawLine = stdoutBuffer.slice(0, newlineIndex).trim();
61
+ stdoutBuffer = stdoutBuffer.slice(newlineIndex + 1);
62
+
63
+ if (!rawLine || !rawLine.startsWith('{')) {
64
+ continue;
65
+ }
66
+
67
+ let message;
68
+ try {
69
+ message = JSON.parse(rawLine);
70
+ } catch (_) {
71
+ continue;
72
+ }
73
+
74
+ if (Object.prototype.hasOwnProperty.call(message, 'id') && pending.has(message.id)) {
75
+ const request = pending.get(message.id);
76
+ pending.delete(message.id);
77
+
78
+ if (message.error) {
79
+ request.reject(new Error(JSON.stringify(message.error)));
80
+ } else {
81
+ request.resolve(message.result);
82
+ }
83
+ }
84
+ }
85
+ });
86
+
87
+ child.stderr.on('data', (chunk) => {
88
+ process.stderr.write(chunk);
89
+ });
90
+
91
+ child.on('error', (error) => {
92
+ rejectPending(error);
93
+ });
94
+
95
+ child.on('close', (code, signal) => {
96
+ closed = true;
97
+ if (pending.size > 0) {
98
+ rejectPending(
99
+ new Error(
100
+ `Power BI Modeling MCP session ended unexpectedly (${code ?? 'unknown'}${signal ? `, ${signal}` : ''}).`
101
+ )
102
+ );
103
+ }
104
+ });
105
+
106
+ return {
107
+ async initialize(clientInfo = { name: 'codex', version: '1.0.0' }) {
108
+ await send('initialize', {
109
+ protocolVersion: PROTOCOL_VERSION,
110
+ clientInfo,
111
+ capabilities: {},
112
+ });
113
+
114
+ child.stdin.write(
115
+ JSON.stringify({ jsonrpc: '2.0', method: 'notifications/initialized', params: {} }) + '\n'
116
+ );
117
+ },
118
+ callTool(name, request) {
119
+ return send('tools/call', {
120
+ name,
121
+ arguments: request,
122
+ });
123
+ },
124
+ listTools() {
125
+ return send('tools/list', {});
126
+ },
127
+ close() {
128
+ if (closed) {
129
+ return;
130
+ }
131
+
132
+ closed = true;
133
+ child.kill();
134
+ },
135
+ };
136
+ }
137
+
138
+ module.exports = {
139
+ createPowerBiMcpSession,
140
+ };
@@ -0,0 +1,164 @@
1
+ /**
2
+ * Skill Loading Utilities
3
+ * =======================
4
+ *
5
+ * Centralizes how BI Agent Superpowers loads skill source files from
6
+ * the installed npm package. Everything ships with the package.
7
+ *
8
+ * Two skill layouts are supported:
9
+ *
10
+ * 1. Flat markdown: src/content/skills/{name}.md
11
+ * Simple skills that fit in a single file. No references/scripts.
12
+ *
13
+ * 2. Folder-based: src/content/skills/{name}/SKILL.md
14
+ * src/content/skills/{name}/references/*.md
15
+ * src/content/skills/{name}/scripts/*
16
+ * Follows Anthropic's skills convention — SKILL.md is the thin
17
+ * entrypoint, `references/` holds on-demand detail that the agent
18
+ * can load when it needs more schema/examples, and `scripts/` holds
19
+ * deterministic helpers the agent can shell out to.
20
+ *
21
+ * @module lib/skills
22
+ */
23
+
24
+ const fs = require('fs');
25
+ const path = require('path');
26
+
27
+ /**
28
+ * Load a single flat markdown skill file.
29
+ * @param {string} filePath - Absolute path to the .md file
30
+ * @returns {{name: string, path: string, content: string, bundleDir: null}|null}
31
+ */
32
+ function loadFlatSkill(filePath) {
33
+ try {
34
+ return {
35
+ name: path.basename(filePath).replace(/\.md$/, ''),
36
+ path: filePath,
37
+ content: fs.readFileSync(filePath, 'utf8'),
38
+ bundleDir: null,
39
+ };
40
+ } catch (err) {
41
+ console.warn(`⚠ Could not read skill ${filePath}: ${err.message}`);
42
+ return null;
43
+ }
44
+ }
45
+
46
+ /**
47
+ * Load a folder-based skill. Expects `{folder}/SKILL.md` to exist.
48
+ * Returns null if the folder does not contain a SKILL.md.
49
+ *
50
+ * @param {string} folderPath - Absolute path to the skill folder
51
+ * @returns {{name: string, path: string, content: string, bundleDir: string}|null}
52
+ */
53
+ function loadFolderSkill(folderPath) {
54
+ const skillMd = path.join(folderPath, 'SKILL.md');
55
+ if (!fs.existsSync(skillMd)) {
56
+ return null;
57
+ }
58
+ try {
59
+ return {
60
+ name: path.basename(folderPath),
61
+ path: skillMd,
62
+ content: fs.readFileSync(skillMd, 'utf8'),
63
+ bundleDir: folderPath,
64
+ };
65
+ } catch (err) {
66
+ console.warn(`⚠ Could not read skill ${skillMd}: ${err.message}`);
67
+ return null;
68
+ }
69
+ }
70
+
71
+ /**
72
+ * Read all skills from a directory. Each entry can be either a flat
73
+ * .md file OR a subfolder containing a SKILL.md.
74
+ *
75
+ * Robust against filesystem failures:
76
+ * - Non-existent directory → []
77
+ * - Unreadable directory → warning + []
78
+ * - Individual unreadable entry → warning + skip
79
+ *
80
+ * @param {string} directory - Directory containing skill sources
81
+ * @returns {Array<{name: string, path: string, content: string, bundleDir: string|null}>}
82
+ */
83
+ function readSkillDirectory(directory) {
84
+ if (!directory || !fs.existsSync(directory)) {
85
+ return [];
86
+ }
87
+
88
+ let entries;
89
+ try {
90
+ entries = fs.readdirSync(directory, { withFileTypes: true });
91
+ } catch (err) {
92
+ console.warn(`⚠ Could not read skills directory ${directory}: ${err.message}`);
93
+ return [];
94
+ }
95
+
96
+ const skills = [];
97
+
98
+ // Sort by name for deterministic output across platforms.
99
+ entries.sort((a, b) => a.name.localeCompare(b.name));
100
+
101
+ for (const entry of entries) {
102
+ const entryPath = path.join(directory, entry.name);
103
+
104
+ if (entry.isFile() && entry.name.endsWith('.md')) {
105
+ const skill = loadFlatSkill(entryPath);
106
+ if (skill) skills.push(skill);
107
+ continue;
108
+ }
109
+
110
+ if (entry.isDirectory()) {
111
+ const skill = loadFolderSkill(entryPath);
112
+ if (skill) skills.push(skill);
113
+ continue;
114
+ }
115
+
116
+ // Ignore other entry types (symlinks to nowhere, non-md files).
117
+ }
118
+
119
+ return skills;
120
+ }
121
+
122
+ /**
123
+ * Load skills from the package source directory.
124
+ *
125
+ * @param {Object} options - Resolution options
126
+ * @param {string} options.packageDir - Package installation directory
127
+ * @returns {Array<{name: string, path: string, content: string, bundleDir: string|null}>}
128
+ */
129
+ function loadSkills(options = {}) {
130
+ const { packageDir } = options;
131
+ if (!packageDir) {
132
+ return [];
133
+ }
134
+ const skillsDir = path.join(packageDir, 'src', 'content', 'skills');
135
+ return readSkillDirectory(skillsDir);
136
+ }
137
+
138
+ /**
139
+ * Normalize any user-facing skill identifier into its canonical name.
140
+ *
141
+ * Accepts `dax`, `dax.md`, `folder-skill`, `folder-skill/SKILL.md`,
142
+ * or `folder-skill\SKILL.md` (Windows separator) and returns the
143
+ * canonical skill name used as the key in readSkillDirectory's
144
+ * output map (`dax`, `folder-skill`).
145
+ *
146
+ * Uses a single alternation regex so the longer suffix `/SKILL.md`
147
+ * is tried BEFORE the bare `.md`. Earlier callers chained two
148
+ * `.replace()` calls and stripped `.md` first, which meant the
149
+ * `/SKILL.md` alternative never matched — `folder-skill/SKILL.md`
150
+ * came out as `folder-skill/SKILL` and the lookup failed.
151
+ *
152
+ * @param {string} input - User-supplied skill identifier
153
+ * @returns {string} Canonical skill name
154
+ */
155
+ function normalizeSkillName(input) {
156
+ if (typeof input !== 'string') return input;
157
+ return input.replace(/([/\\]SKILL\.md|\.md)$/, '');
158
+ }
159
+
160
+ module.exports = {
161
+ readSkillDirectory,
162
+ loadSkills,
163
+ normalizeSkillName,
164
+ };