@luquimbo/bi-superpowers 4.1.0 → 4.1.2
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.
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/.claude-plugin/skill-manifest.json +1 -1
- package/.plugin/plugin.json +1 -1
- package/AGENTS.md +9 -9
- package/CHANGELOG.md +15 -0
- package/README.md +15 -8
- package/bin/cli.js +29 -10
- package/bin/commands/update-check.js +16 -2
- package/bin/lib/generators/claude-plugin.js +24 -6
- package/commands/bi-start.md +6 -27
- package/commands/pbi-connect.md +1 -1
- package/commands/project-kickoff.md +5 -5
- package/commands/report-design.md +7 -7
- package/package.json +3 -2
- package/skills/bi-start/SKILL.md +7 -28
- package/skills/bi-start/scripts/update-check.js +16 -2
- package/skills/pbi-connect/SKILL.md +2 -2
- package/skills/pbi-connect/scripts/update-check.js +16 -2
- package/skills/project-kickoff/SKILL.md +6 -6
- package/skills/project-kickoff/scripts/update-check.js +16 -2
- package/skills/report-design/SKILL.md +8 -8
- package/skills/report-design/scripts/update-check.js +16 -2
- package/src/content/skills/bi-start.md +6 -6
- package/src/content/skills/project-kickoff.md +4 -4
- package/src/content/skills/report-design/SKILL.md +6 -6
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
},
|
|
7
7
|
"metadata": {
|
|
8
8
|
"description": "AI-powered skills for Power BI Desktop development. Works with Claude Code, GitHub Copilot, Codex, Gemini CLI, and Kilo Code.",
|
|
9
|
-
"version": "4.1.
|
|
9
|
+
"version": "4.1.2",
|
|
10
10
|
"repository": "https://github.com/luquimbo/bi-superpowers"
|
|
11
11
|
},
|
|
12
12
|
"plugins": [
|
package/.plugin/plugin.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"spec": "open-plugin-spec@1",
|
|
3
3
|
"name": "bi-superpowers",
|
|
4
|
-
"version": "4.1.
|
|
4
|
+
"version": "4.1.2",
|
|
5
5
|
"description": "Claude Code plugin for Power BI, Microsoft Fabric, and semantic model workflows powered by the official Microsoft MCP servers.",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Lucas Sanchez"
|
package/AGENTS.md
CHANGED
|
@@ -56,8 +56,7 @@ When the user asks for things like **"publica una nueva versión"**, **"publish
|
|
|
56
56
|
The repo uses **GitHub Actions** to publish automatically. The `NPM_TOKEN` is stored as a GitHub Secret — never commit it to the repo or use it locally for publishes. The workflow at `.github/workflows/publish.yml` triggers on:
|
|
57
57
|
|
|
58
58
|
1. **Tag push** (`v*`) — preferred, triggered by pushing a version tag
|
|
59
|
-
2. **
|
|
60
|
-
3. **Manual workflow dispatch** — via Actions tab
|
|
59
|
+
2. **Manual workflow dispatch** — via Actions tab, only from `main` on the already-tagged release commit
|
|
61
60
|
|
|
62
61
|
### Standard publish flow (do this when asked)
|
|
63
62
|
|
|
@@ -84,7 +83,7 @@ The repo uses **GitHub Actions** to publish automatically. The `NPM_TOKEN` is st
|
|
|
84
83
|
```
|
|
85
84
|
7. **Create the version tag:**
|
|
86
85
|
```bash
|
|
87
|
-
git tag vX.Y.Z
|
|
86
|
+
git tag -a vX.Y.Z -m "vX.Y.Z"
|
|
88
87
|
```
|
|
89
88
|
8. **Push commits and tag together:**
|
|
90
89
|
```bash
|
|
@@ -127,18 +126,18 @@ npm install -g @luquimbo/bi-superpowers
|
|
|
127
126
|
super install
|
|
128
127
|
```
|
|
129
128
|
|
|
130
|
-
The shared v4.
|
|
129
|
+
The shared v4.1.x contract is:
|
|
131
130
|
- **4 skills** — `bi-start` (session opener), `project-kickoff`, `pbi-connect`, `report-design`
|
|
132
131
|
- **2 MCP servers** — `powerbi-modeling-mcp`, `microsoft-learn`
|
|
133
132
|
|
|
134
133
|
Agent-specific behavior:
|
|
135
|
-
- **Claude Code** — `super kickoff` can also generate a project-local plugin with slash commands: `/project-kickoff`, `/pbi-connect`, `/report-design`
|
|
134
|
+
- **Claude Code** — `super kickoff` can also generate a project-local plugin with slash commands: `/bi-start`, `/project-kickoff`, `/pbi-connect`, `/report-design`
|
|
136
135
|
- **GitHub Copilot** — uses the installed skills + MCP config via natural-language prompts
|
|
137
136
|
- **Codex** — uses the installed skills + MCP config via natural-language prompts
|
|
138
137
|
- **Gemini CLI** — uses the installed skills + MCP config via natural-language prompts
|
|
139
138
|
- **Kilo Code** — uses the installed skills + MCP config via natural-language prompts
|
|
140
139
|
|
|
141
|
-
`/report-design` has one extra runtime prerequisite on every agent: **Windows + Power BI Desktop + Python 3.10+ + `pipx` + `pbi-cli-tool`**. If that
|
|
140
|
+
`/report-design` has one extra runtime prerequisite on every agent: **Windows + Power BI Desktop (standalone) + Python 3.10+ + `pipx` + `pbi-cli-tool`**. The bundled Node scripts handle visual/theme authoring, but the current flow still uses `pbi` for connect, page ops, and validate. If that stack is not available yet, start with `bi-start`, `project-kickoff`, or `pbi-connect`.
|
|
142
141
|
|
|
143
142
|
### Claude Desktop
|
|
144
143
|
|
|
@@ -175,13 +174,14 @@ Los 4 skills quedan disponibles como MCP prompts.
|
|
|
175
174
|
- **No Laziness**: Fix root causes, avoid temporary patches.
|
|
176
175
|
- **Minimal Impact**: Touch only what is necessary.
|
|
177
176
|
|
|
178
|
-
## Available Skills (
|
|
177
|
+
## Available Skills (4)
|
|
179
178
|
|
|
180
179
|
| Skill | Purpose | Trigger |
|
|
181
180
|
|-------|---------|---------|
|
|
181
|
+
| `/bi-start` | Session opener: environment snapshot, update check, and routing to the specialist skills | "bi-start", "empezar", "start session" |
|
|
182
182
|
| `/project-kickoff` | Analyze and plan BI projects | "analyze project", "new project" |
|
|
183
183
|
| `/pbi-connect` | Connect to Power BI Desktop | "connect Power BI", "MCP" |
|
|
184
|
-
| `/report-design` | Generate PBIR report pages via
|
|
184
|
+
| `/report-design` | Generate PBIR report pages via bundled Node scripts | "report design", "crear reportes" |
|
|
185
185
|
|
|
186
186
|
## MCP Servers (2)
|
|
187
187
|
|
|
@@ -209,7 +209,7 @@ BI Agent Superpowers generates a native Claude Code plugin from a single source
|
|
|
209
209
|
project/
|
|
210
210
|
├── .claude-plugin/plugin.json # Plugin manifest
|
|
211
211
|
├── .mcp.json # Power BI Modeling + Microsoft Learn MCPs
|
|
212
|
-
├── commands/*.md #
|
|
212
|
+
├── commands/*.md # 4 slash commands (bi-start, pbi-connect, project-kickoff, report-design)
|
|
213
213
|
├── skills/*/SKILL.md # 4 skills (discoverable)
|
|
214
214
|
├── config.json # User preferences
|
|
215
215
|
└── library/ → symlink # Snippets, templates, themes
|
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [4.1.0] — 2026-04-21
|
|
9
9
|
|
|
10
|
+
> **First stable release — the de-facto 1.0 of `@luquimbo/bi-superpowers`.**
|
|
11
|
+
>
|
|
12
|
+
> Versions 2.x, 3.x, and 4.0.0 were iteration cycles while the plugin's
|
|
13
|
+
> scope, architecture, and install UX were settling. The v4.1.0 line is
|
|
14
|
+
> the first release the author considers ready for real use: the 4
|
|
15
|
+
> skills + 2 MCPs are stable, both install paths (Claude Code marketplace
|
|
16
|
+
> and npm + `super install`) are documented, the cross-agent autoupdate
|
|
17
|
+
> loop is working end-to-end, and the Opus 4.7 1M code review report
|
|
18
|
+
> with all its blockers + high findings is resolved in the tree. Pre-4.1
|
|
19
|
+
> versions on npm should be treated as pre-release history.
|
|
20
|
+
>
|
|
21
|
+
> (The version number stays on the 4.x line because npm is strictly
|
|
22
|
+
> monotonic and the numeric identity would be confusing to rewrite; the
|
|
23
|
+
> README, CHANGELOG, and this note carry the "first stable" framing.)
|
|
24
|
+
|
|
10
25
|
### Added
|
|
11
26
|
|
|
12
27
|
- **New skill: `/bi-start`** — session-opener that every new chat conversation can
|
package/README.md
CHANGED
|
@@ -7,7 +7,9 @@
|
|
|
7
7
|
|
|
8
8
|
Toolkit open-source para trabajar con **Power BI Desktop** desde Claude Code, GitHub Copilot, Codex, Gemini CLI y Kilo Code.
|
|
9
9
|
|
|
10
|
-
> **Estado:** `v4.
|
|
10
|
+
> **Estado:** `v4.1.x` — **primera versión estable**. Incluye 4 skills (`/bi-start` + 3 especialistas) y 2 MCP servers oficiales de Microsoft. `/report-design` usa scripts Node propios para visuales/theme, pero hoy todavía requiere `pbi-cli-tool` para connect, page ops y validate, además de Windows + Power BI Desktop.
|
|
11
|
+
>
|
|
12
|
+
> _Nota de versionado_: las versiones 2.x, 3.x y 4.0.0 fueron iteraciones mientras el alcance y la arquitectura del plugin se estaban asentando. **Tratá a v4.1.x como si fuera la 1.0** del producto — es el primer release que el autor considera listo para uso real. El numeral se queda en la línea 4.x porque npm es estrictamente monotónico (no se puede bajar el número), pero la madurez del producto arranca acá.
|
|
11
13
|
|
|
12
14
|
---
|
|
13
15
|
|
|
@@ -26,7 +28,7 @@ Dentro de Claude Code, ejecutá:
|
|
|
26
28
|
|
|
27
29
|
Eso instala el plugin completo (4 skills + 2 MCPs) en el perfil de Claude Code. Después podés actualizar con `/plugin update bi-superpowers` directamente desde Claude Code — sin pasar por npm.
|
|
28
30
|
|
|
29
|
-
Si también querés el plugin local de proyecto (con slash commands `/project-kickoff`, `/pbi-connect`, `/report-design` en un repo específico), corré `super kickoff` dentro del repo — requiere haber instalado la CLI via el otro path (abajo).
|
|
31
|
+
Si también querés el plugin local de proyecto (con slash commands `/bi-start`, `/project-kickoff`, `/pbi-connect`, `/report-design` en un repo específico), corré `super kickoff` dentro del repo — requiere haber instalado la CLI via el otro path (abajo).
|
|
30
32
|
|
|
31
33
|
### 👉 Otros agentes — Copilot, Codex, Gemini CLI, Kilo Code (o multi-agente)
|
|
32
34
|
|
|
@@ -64,7 +66,7 @@ Reiniciá tu agente AI y ya tenés bi-superpowers funcionando.
|
|
|
64
66
|
|
|
65
67
|
Si no sabés por dónde empezar, decile a tu agente `/bi-start` — te muestra los 4 skills, chequea updates, y rutea al que necesites. `/project-kickoff` está reservado para cuando arrancás un proyecto BI desde cero.
|
|
66
68
|
|
|
67
|
-
`report-design` requiere **Windows + Power BI Desktop** (standalone, no la versión de Microsoft Store)
|
|
69
|
+
`report-design` requiere **Windows + Power BI Desktop** (standalone, no la versión de Microsoft Store) **+ Python 3.10+ + `pipx` + `pbi-cli-tool`**. Los scripts Node hacen el authoring de visuales/theme, pero el skill todavía usa `pbi` para connect, add-page/list-pages y validate.
|
|
68
70
|
|
|
69
71
|
### 2 MCP Servers (oficiales de Microsoft)
|
|
70
72
|
|
|
@@ -116,23 +118,28 @@ Dentro de Claude Code:
|
|
|
116
118
|
|
|
117
119
|
Eso trae la última versión publicada en el marketplace. Cero interacción con npm.
|
|
118
120
|
|
|
119
|
-
### npm
|
|
121
|
+
### npm / CLI-managed installs
|
|
120
122
|
|
|
121
123
|
```bash
|
|
122
124
|
# 1. Actualizá la CLI a la última versión
|
|
123
125
|
super upgrade
|
|
124
126
|
|
|
125
|
-
# 2.
|
|
127
|
+
# 2. Si instalaste skills en el perfil del agente, propagá la nueva versión
|
|
126
128
|
super install --yes
|
|
129
|
+
|
|
130
|
+
# 3. Si además generaste un plugin local con super kickoff, regeneralo en ese repo
|
|
131
|
+
super recharge
|
|
127
132
|
```
|
|
128
133
|
|
|
129
|
-
`super upgrade` reinstala el paquete global y al final te imprime un recordatorio con
|
|
134
|
+
`super upgrade` reinstala el paquete global y al final te imprime un recordatorio con los refresh paths relevantes. No los hace automáticos a propósito: hay usuarios que solo quieren actualizar la CLI (p.ej. desarrollando local) y no propagar todavía el cambio a todos sus agentes o plugins locales.
|
|
130
135
|
|
|
131
136
|
Equivalente manual si `super upgrade` falla:
|
|
132
137
|
|
|
133
138
|
```bash
|
|
134
139
|
npm install -g @luquimbo/bi-superpowers@latest
|
|
135
140
|
super install --yes
|
|
141
|
+
# y, si tenés un plugin local en este repo/proyecto:
|
|
142
|
+
super recharge
|
|
136
143
|
```
|
|
137
144
|
|
|
138
145
|
---
|
|
@@ -160,7 +167,7 @@ Si ya instalaste los MCPs por alguno de estos caminos, no necesitás correr `sup
|
|
|
160
167
|
|
|
161
168
|
- **Node.js ≥ 18**
|
|
162
169
|
- **Power BI Desktop en Windows** (standalone, no Microsoft Store) para workflows locales contra Desktop (`powerbi-modeling-mcp` y `report-design`)
|
|
163
|
-
- **Python 3.10+**, **`pipx`** y **`pbi-cli-tool`** son
|
|
170
|
+
- **Python 3.10+**, **`pipx`** y **`pbi-cli-tool`** son requeridos para `/report-design` hoy. Los scripts Node hacen el authoring de visuales/theme, pero el flujo completo sigue usando `pbi` para connect, page ops y validate.
|
|
164
171
|
- Al menos uno de: Claude Code, GitHub Copilot, Codex, Gemini CLI, Kilo Code
|
|
165
172
|
|
|
166
173
|
---
|
|
@@ -172,7 +179,7 @@ super install # Instalá 4 skills + 2 MCPs en tus agentes AI
|
|
|
172
179
|
super kickoff # Generá el plugin local de Claude Code con slash commands
|
|
173
180
|
super recharge # Regenerá el plugin tras editar skills fuente
|
|
174
181
|
super powers # Listá skills disponibles
|
|
175
|
-
super upgrade # Actualizá la CLI
|
|
182
|
+
super upgrade # Actualizá la CLI + recordatorio de /plugin update, super install o super recharge
|
|
176
183
|
super help # Ayuda completa
|
|
177
184
|
```
|
|
178
185
|
|
package/bin/cli.js
CHANGED
|
@@ -49,7 +49,7 @@ try {
|
|
|
49
49
|
message:
|
|
50
50
|
'Update available {currentVersion} → {latestVersion}\n' +
|
|
51
51
|
'Run {updateCommand} to update,\n' +
|
|
52
|
-
'then `super install --yes`
|
|
52
|
+
'then refresh your install path (`/plugin update bi-superpowers`, `super install --yes`, or run `super recharge` inside each repo where you used `super kickoff`).',
|
|
53
53
|
});
|
|
54
54
|
} catch (_) {
|
|
55
55
|
// update-notifier not available during npm install phase, or network
|
|
@@ -619,9 +619,10 @@ function getUpgradeCommand(userAgent) {
|
|
|
619
619
|
/**
|
|
620
620
|
* `super upgrade` — reinstall the package at the latest version.
|
|
621
621
|
*
|
|
622
|
-
* After the reinstall, prints a "next steps" block with
|
|
623
|
-
*
|
|
624
|
-
*
|
|
622
|
+
* After the reinstall, prints a "next steps" block with the refresh paths
|
|
623
|
+
* for marketplace installs, user-profile installs, and project-local
|
|
624
|
+
* plugins generated by `super kickoff`, so users know how to propagate
|
|
625
|
+
* the new skills into their agents. We
|
|
625
626
|
* intentionally don't auto-chain into `super install`:
|
|
626
627
|
* - Claude Code users who installed via the plugin marketplace refresh
|
|
627
628
|
* from inside Claude Code (`/plugin update bi-superpowers`), they don't
|
|
@@ -648,6 +649,24 @@ function resetUpdateCheckStateAfterUpgrade(homeDir) {
|
|
|
648
649
|
}
|
|
649
650
|
}
|
|
650
651
|
|
|
652
|
+
function getUpgradeRefreshSteps() {
|
|
653
|
+
return [
|
|
654
|
+
{
|
|
655
|
+
label: 'Claude Code (installed via marketplace):',
|
|
656
|
+
command: '/plugin update bi-superpowers',
|
|
657
|
+
},
|
|
658
|
+
{
|
|
659
|
+
label: 'Skills installed in your user profile (npm + super install):',
|
|
660
|
+
command: 'super install --yes',
|
|
661
|
+
},
|
|
662
|
+
{
|
|
663
|
+
label:
|
|
664
|
+
'Project-local Claude Code plugin (run inside each repo where you used super kickoff):',
|
|
665
|
+
command: 'super recharge',
|
|
666
|
+
},
|
|
667
|
+
];
|
|
668
|
+
}
|
|
669
|
+
|
|
651
670
|
function updatePackage() {
|
|
652
671
|
console.log(`Updating ${PACKAGE_NAME}...\n`);
|
|
653
672
|
|
|
@@ -662,12 +681,11 @@ function updatePackage() {
|
|
|
662
681
|
resetUpdateCheckStateAfterUpgrade(require('os').homedir());
|
|
663
682
|
|
|
664
683
|
console.log('\nNext step — refresh the skills + MCPs in your agents:\n');
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
console.log('');
|
|
684
|
+
for (const step of getUpgradeRefreshSteps()) {
|
|
685
|
+
console.log(` ${step.label}`);
|
|
686
|
+
console.log(` ${step.command}`);
|
|
687
|
+
console.log('');
|
|
688
|
+
}
|
|
671
689
|
console.log(
|
|
672
690
|
'If you only wanted the CLI updated (e.g. developing locally), you can skip the above.'
|
|
673
691
|
);
|
|
@@ -803,6 +821,7 @@ module.exports = {
|
|
|
803
821
|
loadToolConfig,
|
|
804
822
|
saveToolConfig,
|
|
805
823
|
getUpgradeCommand,
|
|
824
|
+
getUpgradeRefreshSteps,
|
|
806
825
|
resetUpdateCheckStateAfterUpgrade,
|
|
807
826
|
AI_TOOLS,
|
|
808
827
|
SKILLS_DIR,
|
|
@@ -44,6 +44,10 @@ const https = require('https');
|
|
|
44
44
|
const PACKAGE_NAME = '@luquimbo/bi-superpowers';
|
|
45
45
|
const CACHE_TTL_MS = 1000 * 60 * 60 * 24; // 24 hours
|
|
46
46
|
const HTTPS_TIMEOUT_MS = 5000;
|
|
47
|
+
// Rewritten at generation time when this helper is copied into
|
|
48
|
+
// `skills/<name>/scripts/update-check.js`. In the canonical source under
|
|
49
|
+
// `bin/commands/`, it stays null and we fall back to package.json.
|
|
50
|
+
const BUNDLED_INSTALLED_VERSION = null;
|
|
47
51
|
|
|
48
52
|
// ---------------------------------------------------------------------------
|
|
49
53
|
// Argument parsing
|
|
@@ -60,6 +64,7 @@ function parseArgs(argv) {
|
|
|
60
64
|
help: false,
|
|
61
65
|
stateDir: null,
|
|
62
66
|
packageName: null,
|
|
67
|
+
installedVersion: null,
|
|
63
68
|
};
|
|
64
69
|
for (let i = 0; i < argv.length; i += 1) {
|
|
65
70
|
const a = argv[i];
|
|
@@ -71,6 +76,7 @@ function parseArgs(argv) {
|
|
|
71
76
|
else if (a === '--reset') out.reset = true;
|
|
72
77
|
else if (a === '--state-dir') out.stateDir = argv[++i];
|
|
73
78
|
else if (a === '--package-name') out.packageName = argv[++i];
|
|
79
|
+
else if (a === '--installed-version') out.installedVersion = argv[++i];
|
|
74
80
|
else if (a === '-h' || a === '--help') out.help = true;
|
|
75
81
|
else {
|
|
76
82
|
process.stderr.write(`update-check: unknown flag: ${a}\n`);
|
|
@@ -96,6 +102,7 @@ function help() {
|
|
|
96
102
|
' --reset Delete the state file (used after a successful upgrade)',
|
|
97
103
|
' --state-dir <path> Override ~/.bi-superpowers/ (tests)',
|
|
98
104
|
' --package-name <name> Override the package name (tests)',
|
|
105
|
+
' --installed-version <v> Override the installed version (generated skill bundles)',
|
|
99
106
|
' -h, --help Show this help',
|
|
100
107
|
'',
|
|
101
108
|
].join('\n')
|
|
@@ -257,7 +264,13 @@ function fetchLatestVersion(packageName) {
|
|
|
257
264
|
// Installed version — read from our own package.json
|
|
258
265
|
// ---------------------------------------------------------------------------
|
|
259
266
|
|
|
260
|
-
function readInstalledVersion() {
|
|
267
|
+
function readInstalledVersion(explicitVersion = null) {
|
|
268
|
+
if (explicitVersion) {
|
|
269
|
+
return String(explicitVersion);
|
|
270
|
+
}
|
|
271
|
+
if (BUNDLED_INSTALLED_VERSION) {
|
|
272
|
+
return String(BUNDLED_INSTALLED_VERSION);
|
|
273
|
+
}
|
|
261
274
|
try {
|
|
262
275
|
return require(path.join(__dirname, '..', '..', 'package.json')).version;
|
|
263
276
|
} catch (_) {
|
|
@@ -318,7 +331,7 @@ async function main() {
|
|
|
318
331
|
return;
|
|
319
332
|
}
|
|
320
333
|
|
|
321
|
-
const installed = readInstalledVersion();
|
|
334
|
+
const installed = readInstalledVersion(args.installedVersion);
|
|
322
335
|
if (!installed) {
|
|
323
336
|
// Installed version undetermined — nothing useful to report.
|
|
324
337
|
return;
|
|
@@ -376,6 +389,7 @@ module.exports = {
|
|
|
376
389
|
writeState,
|
|
377
390
|
resetState,
|
|
378
391
|
fetchLatestVersion,
|
|
392
|
+
readInstalledVersion,
|
|
379
393
|
CACHE_TTL_MS,
|
|
380
394
|
PACKAGE_NAME,
|
|
381
395
|
};
|
|
@@ -150,7 +150,7 @@ node "{skillBundleDir}/scripts/update-check.js" --silent-if-uptodate --silent-if
|
|
|
150
150
|
|
|
151
151
|
- Empty output or \`UPTODATE\` — proceed with the skill silently. No message.
|
|
152
152
|
- \`UPDATE_AVAILABLE <installed> <latest>\` — tell the user exactly once this conversation, before diving into the skill:
|
|
153
|
-
> "Hay **bi-superpowers v{latest}** disponible (estás en v{installed}). Actualizá con \`super upgrade\` (o \`/plugin update bi-superpowers\` en Claude Code) cuando te venga bien."
|
|
153
|
+
> "Hay **bi-superpowers v{latest}** disponible (estás en v{installed}). Actualizá con \`super upgrade\` (o \`/plugin update bi-superpowers\` en Claude Code) cuando te venga bien. Si estás usando un plugin local generado con \`super kickoff\`, después corré \`super recharge\` en ese repo."
|
|
154
154
|
|
|
155
155
|
Then continue with the skill below.
|
|
156
156
|
- \`SNOOZED <iso>\` — proceed silently.
|
|
@@ -162,6 +162,16 @@ If the command fails (missing binary, permissions, offline), ignore the error an
|
|
|
162
162
|
|
|
163
163
|
`;
|
|
164
164
|
|
|
165
|
+
function shouldIncludeUpdateCheckPreamble(skill, options = {}) {
|
|
166
|
+
if (options.skipPreamble) {
|
|
167
|
+
return false;
|
|
168
|
+
}
|
|
169
|
+
// bi-start owns the interactive update flow itself in PHASE 0. If we also
|
|
170
|
+
// prepend the generic passive preamble, the session-opener gets two
|
|
171
|
+
// competing update contracts in the same skill.
|
|
172
|
+
return skill.name !== 'bi-start';
|
|
173
|
+
}
|
|
174
|
+
|
|
165
175
|
/**
|
|
166
176
|
* Build command markdown with Claude Code frontmatter.
|
|
167
177
|
*
|
|
@@ -174,7 +184,7 @@ If the command fails (missing binary, permissions, offline), ignore the error an
|
|
|
174
184
|
function buildCommandMarkdown(skill, libraryPrefix, options = {}) {
|
|
175
185
|
const description = getSkillPurpose(skill.name);
|
|
176
186
|
const content = rewriteLibraryReferences(skill.content, libraryPrefix);
|
|
177
|
-
const preamble = options
|
|
187
|
+
const preamble = shouldIncludeUpdateCheckPreamble(skill, options) ? UPDATE_CHECK_PREAMBLE : '';
|
|
178
188
|
|
|
179
189
|
return `---
|
|
180
190
|
description: ${toFrontmatterValue(description)}
|
|
@@ -197,7 +207,7 @@ ${preamble}${content}`;
|
|
|
197
207
|
*/
|
|
198
208
|
function buildSkillMarkdown(skill, version, libraryPrefix, options = {}) {
|
|
199
209
|
const content = rewriteLibraryReferences(skill.content, libraryPrefix);
|
|
200
|
-
const preamble = options
|
|
210
|
+
const preamble = shouldIncludeUpdateCheckPreamble(skill, options) ? UPDATE_CHECK_PREAMBLE : '';
|
|
201
211
|
|
|
202
212
|
return `---
|
|
203
213
|
name: ${toFrontmatterValue(skill.name)}
|
|
@@ -221,14 +231,22 @@ ${preamble}${content}`;
|
|
|
221
231
|
* @param {string} targetDir - plugin target root (contains skills/<name>/)
|
|
222
232
|
* @param {Object[]} skills - Skills to wire the script into
|
|
223
233
|
*/
|
|
224
|
-
function copyUpdateCheckScript(packageDir, targetDir, skills) {
|
|
234
|
+
function copyUpdateCheckScript(packageDir, targetDir, skills, version = null) {
|
|
225
235
|
if (!packageDir) return;
|
|
226
236
|
const src = path.join(packageDir, 'bin', 'commands', 'update-check.js');
|
|
227
237
|
if (!fs.existsSync(src)) return;
|
|
238
|
+
const sourceContent = fs.readFileSync(src, 'utf8');
|
|
239
|
+
let bundledContent = sourceContent;
|
|
240
|
+
if (version) {
|
|
241
|
+
bundledContent = sourceContent.replace(
|
|
242
|
+
'const BUNDLED_INSTALLED_VERSION = null;',
|
|
243
|
+
`const BUNDLED_INSTALLED_VERSION = ${JSON.stringify(version)};`
|
|
244
|
+
);
|
|
245
|
+
}
|
|
228
246
|
for (const skill of skills) {
|
|
229
247
|
const scriptsDir = path.join(targetDir, 'skills', skill.name, 'scripts');
|
|
230
248
|
ensureDirectory(scriptsDir);
|
|
231
|
-
fs.
|
|
249
|
+
fs.writeFileSync(path.join(scriptsDir, 'update-check.js'), bundledContent);
|
|
232
250
|
}
|
|
233
251
|
}
|
|
234
252
|
|
|
@@ -453,7 +471,7 @@ async function generate(targetDir, skills, options = {}) {
|
|
|
453
471
|
// Ship the update-check helper alongside every skill so the SKILL.md
|
|
454
472
|
// preamble can invoke it via `{skillBundleDir}/scripts/update-check.js`
|
|
455
473
|
// regardless of install path.
|
|
456
|
-
copyUpdateCheckScript(options.packageDir, targetDir, skills);
|
|
474
|
+
copyUpdateCheckScript(options.packageDir, targetDir, skills, version);
|
|
457
475
|
|
|
458
476
|
console.log(' ✓ Created Claude Code plugin manifest');
|
|
459
477
|
console.log(' ✓ Created .mcp.json with official Microsoft MCP servers');
|
package/commands/bi-start.md
CHANGED
|
@@ -4,27 +4,6 @@ description: "Session opener — environment snapshot, update check, and routing
|
|
|
4
4
|
|
|
5
5
|
<!-- Generated by BI Agent Superpowers. Edit src/content/skills/bi-start.md instead. -->
|
|
6
6
|
|
|
7
|
-
<!-- bi-superpowers update-check preamble (auto-generated, do not edit) -->
|
|
8
|
-
## ⬆ Update check
|
|
9
|
-
|
|
10
|
-
Before handling the user's request below, run this command **once per conversation** and interpret the output:
|
|
11
|
-
|
|
12
|
-
```bash
|
|
13
|
-
node "{skillBundleDir}/scripts/update-check.js" --silent-if-uptodate --silent-if-snoozed
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
- Empty output or `UPTODATE` — proceed with the skill silently. No message.
|
|
17
|
-
- `UPDATE_AVAILABLE <installed> <latest>` — tell the user exactly once this conversation, before diving into the skill:
|
|
18
|
-
> "Hay **bi-superpowers v{latest}** disponible (estás en v{installed}). Actualizá con `super upgrade` (o `/plugin update bi-superpowers` en Claude Code) cuando te venga bien."
|
|
19
|
-
|
|
20
|
-
Then continue with the skill below.
|
|
21
|
-
- `SNOOZED <iso>` — proceed silently.
|
|
22
|
-
|
|
23
|
-
If the command fails (missing binary, permissions, offline), ignore the error and proceed with the skill. The update check must never block the user's request.
|
|
24
|
-
|
|
25
|
-
---
|
|
26
|
-
<!-- /bi-superpowers update-check preamble -->
|
|
27
|
-
|
|
28
7
|
# BI Start Skill
|
|
29
8
|
|
|
30
9
|
## Trigger
|
|
@@ -48,7 +27,7 @@ You are the session-opener, **not** the project-opener. If the user's intent is
|
|
|
48
27
|
## MANDATORY RULES
|
|
49
28
|
|
|
50
29
|
1. **ONE QUESTION AT A TIME.** Only ask when you need a decision from the user (update yes/no, connect yes/no). Never stack multiple questions.
|
|
51
|
-
2. **INFORMATIVE MENU — DON'T FORCE A CHOICE.** Show the 3 skills as a table with 1-line descriptions. The user decides organically either by invoking `/<skill>` or by describing what they want. Do NOT say "pick 1, 2, or 3" — that's quiz-style and annoying for returning users.
|
|
30
|
+
2. **INFORMATIVE MENU — DON'T FORCE A CHOICE.** You are already inside `/bi-start`. Show the **3 specialist skills** as a table with 1-line descriptions. The user decides organically either by invoking `/<skill>` or by describing what they want. Do NOT say "pick 1, 2, or 3" — that's quiz-style and annoying for returning users.
|
|
52
31
|
3. **PROACTIVE ON UPDATE + CONNECT.** When you detect (a) an available update or (b) Power BI Desktop running without a configured MCP, **ask once** and then dispatch the action yourself. Don't force the user to remember the exact command.
|
|
53
32
|
4. **SAFE DEFAULTS ON SAY-NOTHING.** If the user greets you and then goes silent, show the menu and stop. Don't auto-dispatch anything without an explicit "sí" / "yes".
|
|
54
33
|
5. **OS-AWARE, NOT OS-GATING.** Works on any OS. Mark Windows-only skills clearly. On macOS/Linux, `/project-kickoff` still has partial value (writes `AGENTS.md` and stops); mention that honestly instead of refusing.
|
|
@@ -76,7 +55,7 @@ Interpret the single-line output:
|
|
|
76
55
|
```bash
|
|
77
56
|
super upgrade
|
|
78
57
|
```
|
|
79
|
-
After it finishes, remind: _"
|
|
58
|
+
After it finishes, remind: _"Si instalaste skills en el perfil del agente, corré `super install --yes`. Si además usás un plugin local generado con `super kickoff`, corré `super recharge` dentro de ese repo."_
|
|
80
59
|
|
|
81
60
|
On `no` — respect it, continue to PHASE 1 silently. The update-state.json already tracks the user's snooze per `update-check.js` semantics.
|
|
82
61
|
|
|
@@ -131,10 +110,10 @@ Keep it 3-4 lines. The point is situational awareness, not a status page.
|
|
|
131
110
|
|
|
132
111
|
## PHASE 2: Skills menu (informativo)
|
|
133
112
|
|
|
134
|
-
|
|
113
|
+
Remind the user that `/bi-start` is the session opener, then show the **3 specialist skills** as a table. Plain, no prompt. Do NOT number them or ask "which one?".
|
|
135
114
|
|
|
136
115
|
```
|
|
137
|
-
|
|
116
|
+
Ya estás en `/bi-start` (session opener). Los 3 specialist skills disponibles son:
|
|
138
117
|
|
|
139
118
|
/project-kickoff Arrancar un proyecto BI nuevo (crea AGENTS.md, plantea modelo) · Win / Mac / Linux (parcial fuera de Win)
|
|
140
119
|
/pbi-connect Conectar el agente a Power BI Desktop vía MCP · Windows
|
|
@@ -190,7 +169,7 @@ On macOS/Linux, skip Case B and Case C — mention once:
|
|
|
190
169
|
|
|
191
170
|
If you got here without dispatching, close with:
|
|
192
171
|
|
|
193
|
-
> _"Listo — invocá el skill que necesites, o pedime ayuda específica sobre cualquiera de
|
|
172
|
+
> _"Listo — invocá el specialist skill que necesites, o pedime ayuda específica sobre cualquiera de esos 3. Si abrís una sesión nueva mañana, `/bi-start` te orienta de nuevo."_
|
|
194
173
|
|
|
195
174
|
Stop. Don't hover. The user will tell you what they want next.
|
|
196
175
|
|
|
@@ -201,7 +180,7 @@ Stop. Don't hover. The user will tell you what they want next.
|
|
|
201
180
|
- **Project analysis or setup**: that's `/project-kickoff`. If the user says "analizar mi proyecto", "armar el modelo base", "arrancar uno nuevo desde cero", delegate.
|
|
202
181
|
- **MCP wiring details**: that's `/pbi-connect`. bi-start just offers to dispatch it; the actual configuration work is in that skill.
|
|
203
182
|
- **Report authoring**: that's `/report-design`. Same pattern.
|
|
204
|
-
- **Running the update**: bi-start offers + dispatches `super upgrade`; the actual
|
|
183
|
+
- **Running the update**: bi-start offers + dispatches `super upgrade`; the actual refresh path after eso (`/plugin update bi-superpowers`, `super install --yes`, o `super recharge`) is owned by `/bin/cli.js`.
|
|
205
184
|
|
|
206
185
|
## Related Skills
|
|
207
186
|
|
package/commands/pbi-connect.md
CHANGED
|
@@ -15,7 +15,7 @@ node "{skillBundleDir}/scripts/update-check.js" --silent-if-uptodate --silent-if
|
|
|
15
15
|
|
|
16
16
|
- Empty output or `UPTODATE` — proceed with the skill silently. No message.
|
|
17
17
|
- `UPDATE_AVAILABLE <installed> <latest>` — tell the user exactly once this conversation, before diving into the skill:
|
|
18
|
-
> "Hay **bi-superpowers v{latest}** disponible (estás en v{installed}). Actualizá con `super upgrade` (o `/plugin update bi-superpowers` en Claude Code) cuando te venga bien."
|
|
18
|
+
> "Hay **bi-superpowers v{latest}** disponible (estás en v{installed}). Actualizá con `super upgrade` (o `/plugin update bi-superpowers` en Claude Code) cuando te venga bien. Si estás usando un plugin local generado con `super kickoff`, después corré `super recharge` en ese repo."
|
|
19
19
|
|
|
20
20
|
Then continue with the skill below.
|
|
21
21
|
- `SNOOZED <iso>` — proceed silently.
|
|
@@ -15,7 +15,7 @@ node "{skillBundleDir}/scripts/update-check.js" --silent-if-uptodate --silent-if
|
|
|
15
15
|
|
|
16
16
|
- Empty output or `UPTODATE` — proceed with the skill silently. No message.
|
|
17
17
|
- `UPDATE_AVAILABLE <installed> <latest>` — tell the user exactly once this conversation, before diving into the skill:
|
|
18
|
-
> "Hay **bi-superpowers v{latest}** disponible (estás en v{installed}). Actualizá con `super upgrade` (o `/plugin update bi-superpowers` en Claude Code) cuando te venga bien."
|
|
18
|
+
> "Hay **bi-superpowers v{latest}** disponible (estás en v{installed}). Actualizá con `super upgrade` (o `/plugin update bi-superpowers` en Claude Code) cuando te venga bien. Si estás usando un plugin local generado con `super kickoff`, después corré `super recharge` en ese repo."
|
|
19
19
|
|
|
20
20
|
Then continue with the skill below.
|
|
21
21
|
- `SNOOZED <iso>` — proceed silently.
|
|
@@ -592,11 +592,11 @@ Once the model has at least 1 fact, 1 dim, and 3 measures in place, propose movi
|
|
|
592
592
|
|
|
593
593
|
El siguiente paso lógico es armar los 3 reportes con `/report-design`. Ese skill va a:
|
|
594
594
|
1. Usar el dominio que ya definimos ({domain})
|
|
595
|
-
2. Inspeccionar tu modelo vía el pbi
|
|
596
|
-
3. Generar 3 páginas con
|
|
595
|
+
2. Inspeccionar tu modelo vía el Modeling MCP (o `pbi-cli-tool` si hace falta) para las medidas/dimensiones exactas
|
|
596
|
+
3. Generar 3 páginas con scripts Node + comandos `pbi report` (card, line, bar, matrix)
|
|
597
597
|
4. Cerrar y reabrir PBI Desktop para que renderice
|
|
598
598
|
|
|
599
|
-
Requisito: necesitás pbi-cli-tool
|
|
599
|
+
Requisito: necesitás Windows + Power BI Desktop + Python 3.10+ + `pipx` + `pbi-cli-tool` (si te falta algo, el skill te guía).
|
|
600
600
|
|
|
601
601
|
¿Arrancamos con /report-design, o preferís agregar más medidas al modelo primero?
|
|
602
602
|
```
|
|
@@ -608,7 +608,7 @@ If the user opts for reports, load `/report-design` and let it run. If they want
|
|
|
608
608
|
## What this skill does NOT do
|
|
609
609
|
|
|
610
610
|
- **No scoring / benchmarking** of an existing model. For that, the user can ask "audit this model" separately.
|
|
611
|
-
- **Report authoring** is delegated to `/report-design` which
|
|
611
|
+
- **Report authoring** is delegated to `/report-design` which uses bundled Node scripts plus the `pbi` CLI runtime flow — don't write `.Report/` files from here.
|
|
612
612
|
|
|
613
613
|
---
|
|
614
614
|
|
|
@@ -15,7 +15,7 @@ node "{skillBundleDir}/scripts/update-check.js" --silent-if-uptodate --silent-if
|
|
|
15
15
|
|
|
16
16
|
- Empty output or `UPTODATE` — proceed with the skill silently. No message.
|
|
17
17
|
- `UPDATE_AVAILABLE <installed> <latest>` — tell the user exactly once this conversation, before diving into the skill:
|
|
18
|
-
> "Hay **bi-superpowers v{latest}** disponible (estás en v{installed}). Actualizá con `super upgrade` (o `/plugin update bi-superpowers` en Claude Code) cuando te venga bien."
|
|
18
|
+
> "Hay **bi-superpowers v{latest}** disponible (estás en v{installed}). Actualizá con `super upgrade` (o `/plugin update bi-superpowers` en Claude Code) cuando te venga bien. Si estás usando un plugin local generado con `super kickoff`, después corré `super recharge` en ese repo."
|
|
19
19
|
|
|
20
20
|
Then continue with the skill below.
|
|
21
21
|
- `SNOOZED <iso>` — proceed silently.
|
|
@@ -36,13 +36,13 @@ Activate this skill when the user mentions:
|
|
|
36
36
|
- Explicit invocation: `/report-design`
|
|
37
37
|
|
|
38
38
|
## Identity
|
|
39
|
-
You are **BI Report Architect**, an orchestrator that turns a finished semantic model into a Power BI report. You author PBIR via **bundled Node scripts** — not via `pbi-
|
|
39
|
+
You are **BI Report Architect**, an orchestrator that turns a finished semantic model into a Power BI report. You author the PBIR visual/theme layer via **bundled Node scripts** — not via the old `pbi visual` / `pbi report set-theme` path:
|
|
40
40
|
|
|
41
41
|
- `scripts/create-visual.js` — creates any of the 28 native PBI visualTypes with a canonical `visual.json` shape (allowlist-driven, validated). **This replaces `pbi visual add` + `pbi visual bind`.**
|
|
42
42
|
- `scripts/apply-theme.js` — registers a custom theme with the canonical `report.json` shape. **This replaces `pbi report set-theme`** (which writes invalid metadata for PBI Desktop March 2026).
|
|
43
43
|
- `scripts/validate-pbir.js` — allowlist + bind-role validator. **Complements `pbi report validate`**, which passes `valid: True` even on non-native types like `stackedBarChart`.
|
|
44
44
|
|
|
45
|
-
The `pbi-cli-tool` (MIT, by MinaSaad1) is
|
|
45
|
+
The `pbi-cli-tool` (MIT, by MinaSaad1) is still required today for **three parts of the flow**: model introspection via XMLA (`pbi connect`, `pbi measure list`, `pbi table list`, `pbi column list`), report page management (`pbi report add-page`, `pbi report list-pages`), and schema validation (`pbi report validate`). Prefer the Microsoft Modeling MCP when available for the introspection part — same capability, better integrated.
|
|
46
46
|
|
|
47
47
|
Full rationale: `references/native-visuals.md` → section "Lo que este skill YA no hace via CLI".
|
|
48
48
|
|
|
@@ -368,8 +368,8 @@ Cuando guardes desde Desktop, commiteá el .pbip a git para versionar.
|
|
|
368
368
|
**References** (`references/`):
|
|
369
369
|
- `native-visuals.md` — **canonical reference**: 28 native visualTypes, their roles, shape canonical, copy-paste examples (read this before authoring)
|
|
370
370
|
- `pbi-desktop-installation.md` — why the standalone installer build is required (not Microsoft Store), install + uninstall steps
|
|
371
|
-
- `cli-setup.md` — how to install Python + pipx + pbi-cli-tool + pywin32 (
|
|
372
|
-
- `cli-commands.md` — cheatsheet of the `pbi` commands still used by this skill (
|
|
371
|
+
- `cli-setup.md` — how to install Python + pipx + pbi-cli-tool + pywin32 (required because this skill still uses `pbi` for connect, page operations, and validation)
|
|
372
|
+
- `cli-commands.md` — cheatsheet of the `pbi` commands still used by this skill (`pbi connect`, `pbi measure list`, `pbi report add-page`, `pbi report list-pages`, `pbi report validate`)
|
|
373
373
|
- `textbox.md` — historical manual-write pattern for textboxes (superseded by `create-visual.js --type textbox`; kept for reference)
|
|
374
374
|
- `slicer.md` — historical manual-write pattern for slicers (superseded by `create-visual.js --type slicer --slicer-mode ...`; kept for reference)
|
|
375
375
|
- `close-write-open-pattern.md` — why and how to handle the Desktop restart cycle
|
|
@@ -383,7 +383,7 @@ Cuando guardes desde Desktop, commiteá el .pbip a git para versionar.
|
|
|
383
383
|
- `layouts/generic.md` — fallback 3-page composition
|
|
384
384
|
|
|
385
385
|
**Scripts** (`scripts/`):
|
|
386
|
-
- `ensure-pbi-cli.sh` — idempotent installer for the pbi-cli-tool (
|
|
386
|
+
- `ensure-pbi-cli.sh` — idempotent installer for the pbi-cli-tool (required for this skill's current runtime flow)
|
|
387
387
|
- `apply-theme.js` — registers a custom PBIR theme with the canonical shape Desktop accepts (replaces the broken `pbi report set-theme` in PBI Desktop March 2026)
|
|
388
388
|
- `create-visual.js` — creates any of the 28 native PBI visualTypes with a canonical `visual.json` shape (replaces `pbi visual add` + `pbi visual bind`; enforces allowlist)
|
|
389
389
|
- `validate-pbir.js` — allowlist + role-checks validator that catches non-native visualTypes and missing/invalid bindings (complements `pbi report validate`)
|
|
@@ -400,4 +400,4 @@ Cuando guardes desde Desktop, commiteá el .pbip a git para versionar.
|
|
|
400
400
|
|
|
401
401
|
## Credit
|
|
402
402
|
|
|
403
|
-
This skill
|
|
403
|
+
This skill integrates with the [`pbi-cli-tool`](https://github.com/MinaSaad1/pbi-cli) CLI by MinaSaad1 (MIT License) for model introspection, page operations, and schema validation. Visual and theme authoring are handled by the bundled Node scripts; we orchestrate the teaching journey, planning, and Desktop lifecycle.
|
package/package.json
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@luquimbo/bi-superpowers",
|
|
3
|
-
"version": "4.1.
|
|
3
|
+
"version": "4.1.2",
|
|
4
4
|
"description": "Open-source Power BI Desktop toolkit for Claude Code, GitHub Copilot, Codex, Gemini CLI, and Kilo Code. Ships 4 skills and 2 official Microsoft MCP servers.",
|
|
5
5
|
"main": "bin/cli.js",
|
|
6
6
|
"bin": {
|
|
7
|
-
"bi-superpowers": "bin/cli.js"
|
|
7
|
+
"bi-superpowers": "bin/cli.js",
|
|
8
|
+
"super": "bin/cli.js"
|
|
8
9
|
},
|
|
9
10
|
"scripts": {
|
|
10
11
|
"build:plugin": "node bin/build-plugin.js",
|
package/skills/bi-start/SKILL.md
CHANGED
|
@@ -1,32 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: "bi-start"
|
|
3
3
|
description: "Use when the user asks about BI Start Skill, especially phrases like \"bi-start\", \"bi start\", \"/bi-start\", \"empezar\", \"comenzar\", \"arranco\"."
|
|
4
|
-
version: "4.1.
|
|
4
|
+
version: "4.1.2"
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
<!-- Generated by BI Agent Superpowers. Edit src/content/skills/bi-start.md instead. -->
|
|
8
8
|
|
|
9
|
-
<!-- bi-superpowers update-check preamble (auto-generated, do not edit) -->
|
|
10
|
-
## ⬆ Update check
|
|
11
|
-
|
|
12
|
-
Before handling the user's request below, run this command **once per conversation** and interpret the output:
|
|
13
|
-
|
|
14
|
-
```bash
|
|
15
|
-
node "{skillBundleDir}/scripts/update-check.js" --silent-if-uptodate --silent-if-snoozed
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
- Empty output or `UPTODATE` — proceed with the skill silently. No message.
|
|
19
|
-
- `UPDATE_AVAILABLE <installed> <latest>` — tell the user exactly once this conversation, before diving into the skill:
|
|
20
|
-
> "Hay **bi-superpowers v{latest}** disponible (estás en v{installed}). Actualizá con `super upgrade` (o `/plugin update bi-superpowers` en Claude Code) cuando te venga bien."
|
|
21
|
-
|
|
22
|
-
Then continue with the skill below.
|
|
23
|
-
- `SNOOZED <iso>` — proceed silently.
|
|
24
|
-
|
|
25
|
-
If the command fails (missing binary, permissions, offline), ignore the error and proceed with the skill. The update check must never block the user's request.
|
|
26
|
-
|
|
27
|
-
---
|
|
28
|
-
<!-- /bi-superpowers update-check preamble -->
|
|
29
|
-
|
|
30
9
|
# BI Start Skill
|
|
31
10
|
|
|
32
11
|
## Trigger
|
|
@@ -50,7 +29,7 @@ You are the session-opener, **not** the project-opener. If the user's intent is
|
|
|
50
29
|
## MANDATORY RULES
|
|
51
30
|
|
|
52
31
|
1. **ONE QUESTION AT A TIME.** Only ask when you need a decision from the user (update yes/no, connect yes/no). Never stack multiple questions.
|
|
53
|
-
2. **INFORMATIVE MENU — DON'T FORCE A CHOICE.** Show the 3 skills as a table with 1-line descriptions. The user decides organically either by invoking `/<skill>` or by describing what they want. Do NOT say "pick 1, 2, or 3" — that's quiz-style and annoying for returning users.
|
|
32
|
+
2. **INFORMATIVE MENU — DON'T FORCE A CHOICE.** You are already inside `/bi-start`. Show the **3 specialist skills** as a table with 1-line descriptions. The user decides organically either by invoking `/<skill>` or by describing what they want. Do NOT say "pick 1, 2, or 3" — that's quiz-style and annoying for returning users.
|
|
54
33
|
3. **PROACTIVE ON UPDATE + CONNECT.** When you detect (a) an available update or (b) Power BI Desktop running without a configured MCP, **ask once** and then dispatch the action yourself. Don't force the user to remember the exact command.
|
|
55
34
|
4. **SAFE DEFAULTS ON SAY-NOTHING.** If the user greets you and then goes silent, show the menu and stop. Don't auto-dispatch anything without an explicit "sí" / "yes".
|
|
56
35
|
5. **OS-AWARE, NOT OS-GATING.** Works on any OS. Mark Windows-only skills clearly. On macOS/Linux, `/project-kickoff` still has partial value (writes `AGENTS.md` and stops); mention that honestly instead of refusing.
|
|
@@ -78,7 +57,7 @@ Interpret the single-line output:
|
|
|
78
57
|
```bash
|
|
79
58
|
super upgrade
|
|
80
59
|
```
|
|
81
|
-
After it finishes, remind: _"
|
|
60
|
+
After it finishes, remind: _"Si instalaste skills en el perfil del agente, corré `super install --yes`. Si además usás un plugin local generado con `super kickoff`, corré `super recharge` dentro de ese repo."_
|
|
82
61
|
|
|
83
62
|
On `no` — respect it, continue to PHASE 1 silently. The update-state.json already tracks the user's snooze per `update-check.js` semantics.
|
|
84
63
|
|
|
@@ -133,10 +112,10 @@ Keep it 3-4 lines. The point is situational awareness, not a status page.
|
|
|
133
112
|
|
|
134
113
|
## PHASE 2: Skills menu (informativo)
|
|
135
114
|
|
|
136
|
-
|
|
115
|
+
Remind the user that `/bi-start` is the session opener, then show the **3 specialist skills** as a table. Plain, no prompt. Do NOT number them or ask "which one?".
|
|
137
116
|
|
|
138
117
|
```
|
|
139
|
-
|
|
118
|
+
Ya estás en `/bi-start` (session opener). Los 3 specialist skills disponibles son:
|
|
140
119
|
|
|
141
120
|
/project-kickoff Arrancar un proyecto BI nuevo (crea AGENTS.md, plantea modelo) · Win / Mac / Linux (parcial fuera de Win)
|
|
142
121
|
/pbi-connect Conectar el agente a Power BI Desktop vía MCP · Windows
|
|
@@ -192,7 +171,7 @@ On macOS/Linux, skip Case B and Case C — mention once:
|
|
|
192
171
|
|
|
193
172
|
If you got here without dispatching, close with:
|
|
194
173
|
|
|
195
|
-
> _"Listo — invocá el skill que necesites, o pedime ayuda específica sobre cualquiera de
|
|
174
|
+
> _"Listo — invocá el specialist skill que necesites, o pedime ayuda específica sobre cualquiera de esos 3. Si abrís una sesión nueva mañana, `/bi-start` te orienta de nuevo."_
|
|
196
175
|
|
|
197
176
|
Stop. Don't hover. The user will tell you what they want next.
|
|
198
177
|
|
|
@@ -203,7 +182,7 @@ Stop. Don't hover. The user will tell you what they want next.
|
|
|
203
182
|
- **Project analysis or setup**: that's `/project-kickoff`. If the user says "analizar mi proyecto", "armar el modelo base", "arrancar uno nuevo desde cero", delegate.
|
|
204
183
|
- **MCP wiring details**: that's `/pbi-connect`. bi-start just offers to dispatch it; the actual configuration work is in that skill.
|
|
205
184
|
- **Report authoring**: that's `/report-design`. Same pattern.
|
|
206
|
-
- **Running the update**: bi-start offers + dispatches `super upgrade`; the actual
|
|
185
|
+
- **Running the update**: bi-start offers + dispatches `super upgrade`; the actual refresh path after eso (`/plugin update bi-superpowers`, `super install --yes`, o `super recharge`) is owned by `/bin/cli.js`.
|
|
207
186
|
|
|
208
187
|
## Related Skills
|
|
209
188
|
|
|
@@ -44,6 +44,10 @@ const https = require('https');
|
|
|
44
44
|
const PACKAGE_NAME = '@luquimbo/bi-superpowers';
|
|
45
45
|
const CACHE_TTL_MS = 1000 * 60 * 60 * 24; // 24 hours
|
|
46
46
|
const HTTPS_TIMEOUT_MS = 5000;
|
|
47
|
+
// Rewritten at generation time when this helper is copied into
|
|
48
|
+
// `skills/<name>/scripts/update-check.js`. In the canonical source under
|
|
49
|
+
// `bin/commands/`, it stays null and we fall back to package.json.
|
|
50
|
+
const BUNDLED_INSTALLED_VERSION = "4.1.2";
|
|
47
51
|
|
|
48
52
|
// ---------------------------------------------------------------------------
|
|
49
53
|
// Argument parsing
|
|
@@ -60,6 +64,7 @@ function parseArgs(argv) {
|
|
|
60
64
|
help: false,
|
|
61
65
|
stateDir: null,
|
|
62
66
|
packageName: null,
|
|
67
|
+
installedVersion: null,
|
|
63
68
|
};
|
|
64
69
|
for (let i = 0; i < argv.length; i += 1) {
|
|
65
70
|
const a = argv[i];
|
|
@@ -71,6 +76,7 @@ function parseArgs(argv) {
|
|
|
71
76
|
else if (a === '--reset') out.reset = true;
|
|
72
77
|
else if (a === '--state-dir') out.stateDir = argv[++i];
|
|
73
78
|
else if (a === '--package-name') out.packageName = argv[++i];
|
|
79
|
+
else if (a === '--installed-version') out.installedVersion = argv[++i];
|
|
74
80
|
else if (a === '-h' || a === '--help') out.help = true;
|
|
75
81
|
else {
|
|
76
82
|
process.stderr.write(`update-check: unknown flag: ${a}\n`);
|
|
@@ -96,6 +102,7 @@ function help() {
|
|
|
96
102
|
' --reset Delete the state file (used after a successful upgrade)',
|
|
97
103
|
' --state-dir <path> Override ~/.bi-superpowers/ (tests)',
|
|
98
104
|
' --package-name <name> Override the package name (tests)',
|
|
105
|
+
' --installed-version <v> Override the installed version (generated skill bundles)',
|
|
99
106
|
' -h, --help Show this help',
|
|
100
107
|
'',
|
|
101
108
|
].join('\n')
|
|
@@ -257,7 +264,13 @@ function fetchLatestVersion(packageName) {
|
|
|
257
264
|
// Installed version — read from our own package.json
|
|
258
265
|
// ---------------------------------------------------------------------------
|
|
259
266
|
|
|
260
|
-
function readInstalledVersion() {
|
|
267
|
+
function readInstalledVersion(explicitVersion = null) {
|
|
268
|
+
if (explicitVersion) {
|
|
269
|
+
return String(explicitVersion);
|
|
270
|
+
}
|
|
271
|
+
if (BUNDLED_INSTALLED_VERSION) {
|
|
272
|
+
return String(BUNDLED_INSTALLED_VERSION);
|
|
273
|
+
}
|
|
261
274
|
try {
|
|
262
275
|
return require(path.join(__dirname, '..', '..', 'package.json')).version;
|
|
263
276
|
} catch (_) {
|
|
@@ -318,7 +331,7 @@ async function main() {
|
|
|
318
331
|
return;
|
|
319
332
|
}
|
|
320
333
|
|
|
321
|
-
const installed = readInstalledVersion();
|
|
334
|
+
const installed = readInstalledVersion(args.installedVersion);
|
|
322
335
|
if (!installed) {
|
|
323
336
|
// Installed version undetermined — nothing useful to report.
|
|
324
337
|
return;
|
|
@@ -376,6 +389,7 @@ module.exports = {
|
|
|
376
389
|
writeState,
|
|
377
390
|
resetState,
|
|
378
391
|
fetchLatestVersion,
|
|
392
|
+
readInstalledVersion,
|
|
379
393
|
CACHE_TTL_MS,
|
|
380
394
|
PACKAGE_NAME,
|
|
381
395
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: "pbi-connect"
|
|
3
3
|
description: "Use when the user asks about Power BI MCP Connection Skill, especially phrases like \"connect Power BI\", \"PBI connection\", \"MCP connection\", \"Power BI MCP\", \"modeling mcp\", \"Power BI Modeling MCP\"."
|
|
4
|
-
version: "4.1.
|
|
4
|
+
version: "4.1.2"
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
<!-- Generated by BI Agent Superpowers. Edit src/content/skills/pbi-connect.md instead. -->
|
|
@@ -17,7 +17,7 @@ node "{skillBundleDir}/scripts/update-check.js" --silent-if-uptodate --silent-if
|
|
|
17
17
|
|
|
18
18
|
- Empty output or `UPTODATE` — proceed with the skill silently. No message.
|
|
19
19
|
- `UPDATE_AVAILABLE <installed> <latest>` — tell the user exactly once this conversation, before diving into the skill:
|
|
20
|
-
> "Hay **bi-superpowers v{latest}** disponible (estás en v{installed}). Actualizá con `super upgrade` (o `/plugin update bi-superpowers` en Claude Code) cuando te venga bien."
|
|
20
|
+
> "Hay **bi-superpowers v{latest}** disponible (estás en v{installed}). Actualizá con `super upgrade` (o `/plugin update bi-superpowers` en Claude Code) cuando te venga bien. Si estás usando un plugin local generado con `super kickoff`, después corré `super recharge` en ese repo."
|
|
21
21
|
|
|
22
22
|
Then continue with the skill below.
|
|
23
23
|
- `SNOOZED <iso>` — proceed silently.
|
|
@@ -44,6 +44,10 @@ const https = require('https');
|
|
|
44
44
|
const PACKAGE_NAME = '@luquimbo/bi-superpowers';
|
|
45
45
|
const CACHE_TTL_MS = 1000 * 60 * 60 * 24; // 24 hours
|
|
46
46
|
const HTTPS_TIMEOUT_MS = 5000;
|
|
47
|
+
// Rewritten at generation time when this helper is copied into
|
|
48
|
+
// `skills/<name>/scripts/update-check.js`. In the canonical source under
|
|
49
|
+
// `bin/commands/`, it stays null and we fall back to package.json.
|
|
50
|
+
const BUNDLED_INSTALLED_VERSION = "4.1.2";
|
|
47
51
|
|
|
48
52
|
// ---------------------------------------------------------------------------
|
|
49
53
|
// Argument parsing
|
|
@@ -60,6 +64,7 @@ function parseArgs(argv) {
|
|
|
60
64
|
help: false,
|
|
61
65
|
stateDir: null,
|
|
62
66
|
packageName: null,
|
|
67
|
+
installedVersion: null,
|
|
63
68
|
};
|
|
64
69
|
for (let i = 0; i < argv.length; i += 1) {
|
|
65
70
|
const a = argv[i];
|
|
@@ -71,6 +76,7 @@ function parseArgs(argv) {
|
|
|
71
76
|
else if (a === '--reset') out.reset = true;
|
|
72
77
|
else if (a === '--state-dir') out.stateDir = argv[++i];
|
|
73
78
|
else if (a === '--package-name') out.packageName = argv[++i];
|
|
79
|
+
else if (a === '--installed-version') out.installedVersion = argv[++i];
|
|
74
80
|
else if (a === '-h' || a === '--help') out.help = true;
|
|
75
81
|
else {
|
|
76
82
|
process.stderr.write(`update-check: unknown flag: ${a}\n`);
|
|
@@ -96,6 +102,7 @@ function help() {
|
|
|
96
102
|
' --reset Delete the state file (used after a successful upgrade)',
|
|
97
103
|
' --state-dir <path> Override ~/.bi-superpowers/ (tests)',
|
|
98
104
|
' --package-name <name> Override the package name (tests)',
|
|
105
|
+
' --installed-version <v> Override the installed version (generated skill bundles)',
|
|
99
106
|
' -h, --help Show this help',
|
|
100
107
|
'',
|
|
101
108
|
].join('\n')
|
|
@@ -257,7 +264,13 @@ function fetchLatestVersion(packageName) {
|
|
|
257
264
|
// Installed version — read from our own package.json
|
|
258
265
|
// ---------------------------------------------------------------------------
|
|
259
266
|
|
|
260
|
-
function readInstalledVersion() {
|
|
267
|
+
function readInstalledVersion(explicitVersion = null) {
|
|
268
|
+
if (explicitVersion) {
|
|
269
|
+
return String(explicitVersion);
|
|
270
|
+
}
|
|
271
|
+
if (BUNDLED_INSTALLED_VERSION) {
|
|
272
|
+
return String(BUNDLED_INSTALLED_VERSION);
|
|
273
|
+
}
|
|
261
274
|
try {
|
|
262
275
|
return require(path.join(__dirname, '..', '..', 'package.json')).version;
|
|
263
276
|
} catch (_) {
|
|
@@ -318,7 +331,7 @@ async function main() {
|
|
|
318
331
|
return;
|
|
319
332
|
}
|
|
320
333
|
|
|
321
|
-
const installed = readInstalledVersion();
|
|
334
|
+
const installed = readInstalledVersion(args.installedVersion);
|
|
322
335
|
if (!installed) {
|
|
323
336
|
// Installed version undetermined — nothing useful to report.
|
|
324
337
|
return;
|
|
@@ -376,6 +389,7 @@ module.exports = {
|
|
|
376
389
|
writeState,
|
|
377
390
|
resetState,
|
|
378
391
|
fetchLatestVersion,
|
|
392
|
+
readInstalledVersion,
|
|
379
393
|
CACHE_TTL_MS,
|
|
380
394
|
PACKAGE_NAME,
|
|
381
395
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: "project-kickoff"
|
|
3
3
|
description: "Use when the user asks about Project Kickoff Skill, especially phrases like \"I'm starting a brand-new BI project from scratch\", \"analizar proyecto\", \"analyze project\", \"project kickoff\", \"nuevo proyecto\", \"new project\"."
|
|
4
|
-
version: "4.1.
|
|
4
|
+
version: "4.1.2"
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
<!-- Generated by BI Agent Superpowers. Edit src/content/skills/project-kickoff.md instead. -->
|
|
@@ -17,7 +17,7 @@ node "{skillBundleDir}/scripts/update-check.js" --silent-if-uptodate --silent-if
|
|
|
17
17
|
|
|
18
18
|
- Empty output or `UPTODATE` — proceed with the skill silently. No message.
|
|
19
19
|
- `UPDATE_AVAILABLE <installed> <latest>` — tell the user exactly once this conversation, before diving into the skill:
|
|
20
|
-
> "Hay **bi-superpowers v{latest}** disponible (estás en v{installed}). Actualizá con `super upgrade` (o `/plugin update bi-superpowers` en Claude Code) cuando te venga bien."
|
|
20
|
+
> "Hay **bi-superpowers v{latest}** disponible (estás en v{installed}). Actualizá con `super upgrade` (o `/plugin update bi-superpowers` en Claude Code) cuando te venga bien. Si estás usando un plugin local generado con `super kickoff`, después corré `super recharge` en ese repo."
|
|
21
21
|
|
|
22
22
|
Then continue with the skill below.
|
|
23
23
|
- `SNOOZED <iso>` — proceed silently.
|
|
@@ -594,11 +594,11 @@ Once the model has at least 1 fact, 1 dim, and 3 measures in place, propose movi
|
|
|
594
594
|
|
|
595
595
|
El siguiente paso lógico es armar los 3 reportes con `/report-design`. Ese skill va a:
|
|
596
596
|
1. Usar el dominio que ya definimos ({domain})
|
|
597
|
-
2. Inspeccionar tu modelo vía el pbi
|
|
598
|
-
3. Generar 3 páginas con
|
|
597
|
+
2. Inspeccionar tu modelo vía el Modeling MCP (o `pbi-cli-tool` si hace falta) para las medidas/dimensiones exactas
|
|
598
|
+
3. Generar 3 páginas con scripts Node + comandos `pbi report` (card, line, bar, matrix)
|
|
599
599
|
4. Cerrar y reabrir PBI Desktop para que renderice
|
|
600
600
|
|
|
601
|
-
Requisito: necesitás pbi-cli-tool
|
|
601
|
+
Requisito: necesitás Windows + Power BI Desktop + Python 3.10+ + `pipx` + `pbi-cli-tool` (si te falta algo, el skill te guía).
|
|
602
602
|
|
|
603
603
|
¿Arrancamos con /report-design, o preferís agregar más medidas al modelo primero?
|
|
604
604
|
```
|
|
@@ -610,7 +610,7 @@ If the user opts for reports, load `/report-design` and let it run. If they want
|
|
|
610
610
|
## What this skill does NOT do
|
|
611
611
|
|
|
612
612
|
- **No scoring / benchmarking** of an existing model. For that, the user can ask "audit this model" separately.
|
|
613
|
-
- **Report authoring** is delegated to `/report-design` which
|
|
613
|
+
- **Report authoring** is delegated to `/report-design` which uses bundled Node scripts plus the `pbi` CLI runtime flow — don't write `.Report/` files from here.
|
|
614
614
|
|
|
615
615
|
---
|
|
616
616
|
|
|
@@ -44,6 +44,10 @@ const https = require('https');
|
|
|
44
44
|
const PACKAGE_NAME = '@luquimbo/bi-superpowers';
|
|
45
45
|
const CACHE_TTL_MS = 1000 * 60 * 60 * 24; // 24 hours
|
|
46
46
|
const HTTPS_TIMEOUT_MS = 5000;
|
|
47
|
+
// Rewritten at generation time when this helper is copied into
|
|
48
|
+
// `skills/<name>/scripts/update-check.js`. In the canonical source under
|
|
49
|
+
// `bin/commands/`, it stays null and we fall back to package.json.
|
|
50
|
+
const BUNDLED_INSTALLED_VERSION = "4.1.2";
|
|
47
51
|
|
|
48
52
|
// ---------------------------------------------------------------------------
|
|
49
53
|
// Argument parsing
|
|
@@ -60,6 +64,7 @@ function parseArgs(argv) {
|
|
|
60
64
|
help: false,
|
|
61
65
|
stateDir: null,
|
|
62
66
|
packageName: null,
|
|
67
|
+
installedVersion: null,
|
|
63
68
|
};
|
|
64
69
|
for (let i = 0; i < argv.length; i += 1) {
|
|
65
70
|
const a = argv[i];
|
|
@@ -71,6 +76,7 @@ function parseArgs(argv) {
|
|
|
71
76
|
else if (a === '--reset') out.reset = true;
|
|
72
77
|
else if (a === '--state-dir') out.stateDir = argv[++i];
|
|
73
78
|
else if (a === '--package-name') out.packageName = argv[++i];
|
|
79
|
+
else if (a === '--installed-version') out.installedVersion = argv[++i];
|
|
74
80
|
else if (a === '-h' || a === '--help') out.help = true;
|
|
75
81
|
else {
|
|
76
82
|
process.stderr.write(`update-check: unknown flag: ${a}\n`);
|
|
@@ -96,6 +102,7 @@ function help() {
|
|
|
96
102
|
' --reset Delete the state file (used after a successful upgrade)',
|
|
97
103
|
' --state-dir <path> Override ~/.bi-superpowers/ (tests)',
|
|
98
104
|
' --package-name <name> Override the package name (tests)',
|
|
105
|
+
' --installed-version <v> Override the installed version (generated skill bundles)',
|
|
99
106
|
' -h, --help Show this help',
|
|
100
107
|
'',
|
|
101
108
|
].join('\n')
|
|
@@ -257,7 +264,13 @@ function fetchLatestVersion(packageName) {
|
|
|
257
264
|
// Installed version — read from our own package.json
|
|
258
265
|
// ---------------------------------------------------------------------------
|
|
259
266
|
|
|
260
|
-
function readInstalledVersion() {
|
|
267
|
+
function readInstalledVersion(explicitVersion = null) {
|
|
268
|
+
if (explicitVersion) {
|
|
269
|
+
return String(explicitVersion);
|
|
270
|
+
}
|
|
271
|
+
if (BUNDLED_INSTALLED_VERSION) {
|
|
272
|
+
return String(BUNDLED_INSTALLED_VERSION);
|
|
273
|
+
}
|
|
261
274
|
try {
|
|
262
275
|
return require(path.join(__dirname, '..', '..', 'package.json')).version;
|
|
263
276
|
} catch (_) {
|
|
@@ -318,7 +331,7 @@ async function main() {
|
|
|
318
331
|
return;
|
|
319
332
|
}
|
|
320
333
|
|
|
321
|
-
const installed = readInstalledVersion();
|
|
334
|
+
const installed = readInstalledVersion(args.installedVersion);
|
|
322
335
|
if (!installed) {
|
|
323
336
|
// Installed version undetermined — nothing useful to report.
|
|
324
337
|
return;
|
|
@@ -376,6 +389,7 @@ module.exports = {
|
|
|
376
389
|
writeState,
|
|
377
390
|
resetState,
|
|
378
391
|
fetchLatestVersion,
|
|
392
|
+
readInstalledVersion,
|
|
379
393
|
CACHE_TTL_MS,
|
|
380
394
|
PACKAGE_NAME,
|
|
381
395
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: "report-design"
|
|
3
3
|
description: "Use when the user asks about Report Design Skill, especially phrases like \"crear reportes\", \"armar el reporte\", \"diseñar reporte\", \"report design\", \"create reports\", \"build dashboard\"."
|
|
4
|
-
version: "4.1.
|
|
4
|
+
version: "4.1.2"
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
<!-- Generated by BI Agent Superpowers. Edit src/content/skills/report-design.md instead. -->
|
|
@@ -17,7 +17,7 @@ node "{skillBundleDir}/scripts/update-check.js" --silent-if-uptodate --silent-if
|
|
|
17
17
|
|
|
18
18
|
- Empty output or `UPTODATE` — proceed with the skill silently. No message.
|
|
19
19
|
- `UPDATE_AVAILABLE <installed> <latest>` — tell the user exactly once this conversation, before diving into the skill:
|
|
20
|
-
> "Hay **bi-superpowers v{latest}** disponible (estás en v{installed}). Actualizá con `super upgrade` (o `/plugin update bi-superpowers` en Claude Code) cuando te venga bien."
|
|
20
|
+
> "Hay **bi-superpowers v{latest}** disponible (estás en v{installed}). Actualizá con `super upgrade` (o `/plugin update bi-superpowers` en Claude Code) cuando te venga bien. Si estás usando un plugin local generado con `super kickoff`, después corré `super recharge` en ese repo."
|
|
21
21
|
|
|
22
22
|
Then continue with the skill below.
|
|
23
23
|
- `SNOOZED <iso>` — proceed silently.
|
|
@@ -38,13 +38,13 @@ Activate this skill when the user mentions:
|
|
|
38
38
|
- Explicit invocation: `/report-design`
|
|
39
39
|
|
|
40
40
|
## Identity
|
|
41
|
-
You are **BI Report Architect**, an orchestrator that turns a finished semantic model into a Power BI report. You author PBIR via **bundled Node scripts** — not via `pbi-
|
|
41
|
+
You are **BI Report Architect**, an orchestrator that turns a finished semantic model into a Power BI report. You author the PBIR visual/theme layer via **bundled Node scripts** — not via the old `pbi visual` / `pbi report set-theme` path:
|
|
42
42
|
|
|
43
43
|
- `scripts/create-visual.js` — creates any of the 28 native PBI visualTypes with a canonical `visual.json` shape (allowlist-driven, validated). **This replaces `pbi visual add` + `pbi visual bind`.**
|
|
44
44
|
- `scripts/apply-theme.js` — registers a custom theme with the canonical `report.json` shape. **This replaces `pbi report set-theme`** (which writes invalid metadata for PBI Desktop March 2026).
|
|
45
45
|
- `scripts/validate-pbir.js` — allowlist + bind-role validator. **Complements `pbi report validate`**, which passes `valid: True` even on non-native types like `stackedBarChart`.
|
|
46
46
|
|
|
47
|
-
The `pbi-cli-tool` (MIT, by MinaSaad1) is
|
|
47
|
+
The `pbi-cli-tool` (MIT, by MinaSaad1) is still required today for **three parts of the flow**: model introspection via XMLA (`pbi connect`, `pbi measure list`, `pbi table list`, `pbi column list`), report page management (`pbi report add-page`, `pbi report list-pages`), and schema validation (`pbi report validate`). Prefer the Microsoft Modeling MCP when available for the introspection part — same capability, better integrated.
|
|
48
48
|
|
|
49
49
|
Full rationale: `references/native-visuals.md` → section "Lo que este skill YA no hace via CLI".
|
|
50
50
|
|
|
@@ -370,8 +370,8 @@ Cuando guardes desde Desktop, commiteá el .pbip a git para versionar.
|
|
|
370
370
|
**References** (`references/`):
|
|
371
371
|
- `native-visuals.md` — **canonical reference**: 28 native visualTypes, their roles, shape canonical, copy-paste examples (read this before authoring)
|
|
372
372
|
- `pbi-desktop-installation.md` — why the standalone installer build is required (not Microsoft Store), install + uninstall steps
|
|
373
|
-
- `cli-setup.md` — how to install Python + pipx + pbi-cli-tool + pywin32 (
|
|
374
|
-
- `cli-commands.md` — cheatsheet of the `pbi` commands still used by this skill (
|
|
373
|
+
- `cli-setup.md` — how to install Python + pipx + pbi-cli-tool + pywin32 (required because this skill still uses `pbi` for connect, page operations, and validation)
|
|
374
|
+
- `cli-commands.md` — cheatsheet of the `pbi` commands still used by this skill (`pbi connect`, `pbi measure list`, `pbi report add-page`, `pbi report list-pages`, `pbi report validate`)
|
|
375
375
|
- `textbox.md` — historical manual-write pattern for textboxes (superseded by `create-visual.js --type textbox`; kept for reference)
|
|
376
376
|
- `slicer.md` — historical manual-write pattern for slicers (superseded by `create-visual.js --type slicer --slicer-mode ...`; kept for reference)
|
|
377
377
|
- `close-write-open-pattern.md` — why and how to handle the Desktop restart cycle
|
|
@@ -385,7 +385,7 @@ Cuando guardes desde Desktop, commiteá el .pbip a git para versionar.
|
|
|
385
385
|
- `layouts/generic.md` — fallback 3-page composition
|
|
386
386
|
|
|
387
387
|
**Scripts** (`scripts/`):
|
|
388
|
-
- `ensure-pbi-cli.sh` — idempotent installer for the pbi-cli-tool (
|
|
388
|
+
- `ensure-pbi-cli.sh` — idempotent installer for the pbi-cli-tool (required for this skill's current runtime flow)
|
|
389
389
|
- `apply-theme.js` — registers a custom PBIR theme with the canonical shape Desktop accepts (replaces the broken `pbi report set-theme` in PBI Desktop March 2026)
|
|
390
390
|
- `create-visual.js` — creates any of the 28 native PBI visualTypes with a canonical `visual.json` shape (replaces `pbi visual add` + `pbi visual bind`; enforces allowlist)
|
|
391
391
|
- `validate-pbir.js` — allowlist + role-checks validator that catches non-native visualTypes and missing/invalid bindings (complements `pbi report validate`)
|
|
@@ -402,4 +402,4 @@ Cuando guardes desde Desktop, commiteá el .pbip a git para versionar.
|
|
|
402
402
|
|
|
403
403
|
## Credit
|
|
404
404
|
|
|
405
|
-
This skill
|
|
405
|
+
This skill integrates with the [`pbi-cli-tool`](https://github.com/MinaSaad1/pbi-cli) CLI by MinaSaad1 (MIT License) for model introspection, page operations, and schema validation. Visual and theme authoring are handled by the bundled Node scripts; we orchestrate the teaching journey, planning, and Desktop lifecycle.
|
|
@@ -44,6 +44,10 @@ const https = require('https');
|
|
|
44
44
|
const PACKAGE_NAME = '@luquimbo/bi-superpowers';
|
|
45
45
|
const CACHE_TTL_MS = 1000 * 60 * 60 * 24; // 24 hours
|
|
46
46
|
const HTTPS_TIMEOUT_MS = 5000;
|
|
47
|
+
// Rewritten at generation time when this helper is copied into
|
|
48
|
+
// `skills/<name>/scripts/update-check.js`. In the canonical source under
|
|
49
|
+
// `bin/commands/`, it stays null and we fall back to package.json.
|
|
50
|
+
const BUNDLED_INSTALLED_VERSION = "4.1.2";
|
|
47
51
|
|
|
48
52
|
// ---------------------------------------------------------------------------
|
|
49
53
|
// Argument parsing
|
|
@@ -60,6 +64,7 @@ function parseArgs(argv) {
|
|
|
60
64
|
help: false,
|
|
61
65
|
stateDir: null,
|
|
62
66
|
packageName: null,
|
|
67
|
+
installedVersion: null,
|
|
63
68
|
};
|
|
64
69
|
for (let i = 0; i < argv.length; i += 1) {
|
|
65
70
|
const a = argv[i];
|
|
@@ -71,6 +76,7 @@ function parseArgs(argv) {
|
|
|
71
76
|
else if (a === '--reset') out.reset = true;
|
|
72
77
|
else if (a === '--state-dir') out.stateDir = argv[++i];
|
|
73
78
|
else if (a === '--package-name') out.packageName = argv[++i];
|
|
79
|
+
else if (a === '--installed-version') out.installedVersion = argv[++i];
|
|
74
80
|
else if (a === '-h' || a === '--help') out.help = true;
|
|
75
81
|
else {
|
|
76
82
|
process.stderr.write(`update-check: unknown flag: ${a}\n`);
|
|
@@ -96,6 +102,7 @@ function help() {
|
|
|
96
102
|
' --reset Delete the state file (used after a successful upgrade)',
|
|
97
103
|
' --state-dir <path> Override ~/.bi-superpowers/ (tests)',
|
|
98
104
|
' --package-name <name> Override the package name (tests)',
|
|
105
|
+
' --installed-version <v> Override the installed version (generated skill bundles)',
|
|
99
106
|
' -h, --help Show this help',
|
|
100
107
|
'',
|
|
101
108
|
].join('\n')
|
|
@@ -257,7 +264,13 @@ function fetchLatestVersion(packageName) {
|
|
|
257
264
|
// Installed version — read from our own package.json
|
|
258
265
|
// ---------------------------------------------------------------------------
|
|
259
266
|
|
|
260
|
-
function readInstalledVersion() {
|
|
267
|
+
function readInstalledVersion(explicitVersion = null) {
|
|
268
|
+
if (explicitVersion) {
|
|
269
|
+
return String(explicitVersion);
|
|
270
|
+
}
|
|
271
|
+
if (BUNDLED_INSTALLED_VERSION) {
|
|
272
|
+
return String(BUNDLED_INSTALLED_VERSION);
|
|
273
|
+
}
|
|
261
274
|
try {
|
|
262
275
|
return require(path.join(__dirname, '..', '..', 'package.json')).version;
|
|
263
276
|
} catch (_) {
|
|
@@ -318,7 +331,7 @@ async function main() {
|
|
|
318
331
|
return;
|
|
319
332
|
}
|
|
320
333
|
|
|
321
|
-
const installed = readInstalledVersion();
|
|
334
|
+
const installed = readInstalledVersion(args.installedVersion);
|
|
322
335
|
if (!installed) {
|
|
323
336
|
// Installed version undetermined — nothing useful to report.
|
|
324
337
|
return;
|
|
@@ -376,6 +389,7 @@ module.exports = {
|
|
|
376
389
|
writeState,
|
|
377
390
|
resetState,
|
|
378
391
|
fetchLatestVersion,
|
|
392
|
+
readInstalledVersion,
|
|
379
393
|
CACHE_TTL_MS,
|
|
380
394
|
PACKAGE_NAME,
|
|
381
395
|
};
|
|
@@ -21,7 +21,7 @@ You are the session-opener, **not** the project-opener. If the user's intent is
|
|
|
21
21
|
## MANDATORY RULES
|
|
22
22
|
|
|
23
23
|
1. **ONE QUESTION AT A TIME.** Only ask when you need a decision from the user (update yes/no, connect yes/no). Never stack multiple questions.
|
|
24
|
-
2. **INFORMATIVE MENU — DON'T FORCE A CHOICE.** Show the 3 skills as a table with 1-line descriptions. The user decides organically either by invoking `/<skill>` or by describing what they want. Do NOT say "pick 1, 2, or 3" — that's quiz-style and annoying for returning users.
|
|
24
|
+
2. **INFORMATIVE MENU — DON'T FORCE A CHOICE.** You are already inside `/bi-start`. Show the **3 specialist skills** as a table with 1-line descriptions. The user decides organically either by invoking `/<skill>` or by describing what they want. Do NOT say "pick 1, 2, or 3" — that's quiz-style and annoying for returning users.
|
|
25
25
|
3. **PROACTIVE ON UPDATE + CONNECT.** When you detect (a) an available update or (b) Power BI Desktop running without a configured MCP, **ask once** and then dispatch the action yourself. Don't force the user to remember the exact command.
|
|
26
26
|
4. **SAFE DEFAULTS ON SAY-NOTHING.** If the user greets you and then goes silent, show the menu and stop. Don't auto-dispatch anything without an explicit "sí" / "yes".
|
|
27
27
|
5. **OS-AWARE, NOT OS-GATING.** Works on any OS. Mark Windows-only skills clearly. On macOS/Linux, `/project-kickoff` still has partial value (writes `AGENTS.md` and stops); mention that honestly instead of refusing.
|
|
@@ -49,7 +49,7 @@ Interpret the single-line output:
|
|
|
49
49
|
```bash
|
|
50
50
|
super upgrade
|
|
51
51
|
```
|
|
52
|
-
After it finishes, remind: _"
|
|
52
|
+
After it finishes, remind: _"Si instalaste skills en el perfil del agente, corré `super install --yes`. Si además usás un plugin local generado con `super kickoff`, corré `super recharge` dentro de ese repo."_
|
|
53
53
|
|
|
54
54
|
On `no` — respect it, continue to PHASE 1 silently. The update-state.json already tracks the user's snooze per `update-check.js` semantics.
|
|
55
55
|
|
|
@@ -104,10 +104,10 @@ Keep it 3-4 lines. The point is situational awareness, not a status page.
|
|
|
104
104
|
|
|
105
105
|
## PHASE 2: Skills menu (informativo)
|
|
106
106
|
|
|
107
|
-
|
|
107
|
+
Remind the user that `/bi-start` is the session opener, then show the **3 specialist skills** as a table. Plain, no prompt. Do NOT number them or ask "which one?".
|
|
108
108
|
|
|
109
109
|
```
|
|
110
|
-
|
|
110
|
+
Ya estás en `/bi-start` (session opener). Los 3 specialist skills disponibles son:
|
|
111
111
|
|
|
112
112
|
/project-kickoff Arrancar un proyecto BI nuevo (crea AGENTS.md, plantea modelo) · Win / Mac / Linux (parcial fuera de Win)
|
|
113
113
|
/pbi-connect Conectar el agente a Power BI Desktop vía MCP · Windows
|
|
@@ -163,7 +163,7 @@ On macOS/Linux, skip Case B and Case C — mention once:
|
|
|
163
163
|
|
|
164
164
|
If you got here without dispatching, close with:
|
|
165
165
|
|
|
166
|
-
> _"Listo — invocá el skill que necesites, o pedime ayuda específica sobre cualquiera de
|
|
166
|
+
> _"Listo — invocá el specialist skill que necesites, o pedime ayuda específica sobre cualquiera de esos 3. Si abrís una sesión nueva mañana, `/bi-start` te orienta de nuevo."_
|
|
167
167
|
|
|
168
168
|
Stop. Don't hover. The user will tell you what they want next.
|
|
169
169
|
|
|
@@ -174,7 +174,7 @@ Stop. Don't hover. The user will tell you what they want next.
|
|
|
174
174
|
- **Project analysis or setup**: that's `/project-kickoff`. If the user says "analizar mi proyecto", "armar el modelo base", "arrancar uno nuevo desde cero", delegate.
|
|
175
175
|
- **MCP wiring details**: that's `/pbi-connect`. bi-start just offers to dispatch it; the actual configuration work is in that skill.
|
|
176
176
|
- **Report authoring**: that's `/report-design`. Same pattern.
|
|
177
|
-
- **Running the update**: bi-start offers + dispatches `super upgrade`; the actual
|
|
177
|
+
- **Running the update**: bi-start offers + dispatches `super upgrade`; the actual refresh path after eso (`/plugin update bi-superpowers`, `super install --yes`, o `super recharge`) is owned by `/bin/cli.js`.
|
|
178
178
|
|
|
179
179
|
## Related Skills
|
|
180
180
|
|
|
@@ -565,11 +565,11 @@ Once the model has at least 1 fact, 1 dim, and 3 measures in place, propose movi
|
|
|
565
565
|
|
|
566
566
|
El siguiente paso lógico es armar los 3 reportes con `/report-design`. Ese skill va a:
|
|
567
567
|
1. Usar el dominio que ya definimos ({domain})
|
|
568
|
-
2. Inspeccionar tu modelo vía el pbi
|
|
569
|
-
3. Generar 3 páginas con
|
|
568
|
+
2. Inspeccionar tu modelo vía el Modeling MCP (o `pbi-cli-tool` si hace falta) para las medidas/dimensiones exactas
|
|
569
|
+
3. Generar 3 páginas con scripts Node + comandos `pbi report` (card, line, bar, matrix)
|
|
570
570
|
4. Cerrar y reabrir PBI Desktop para que renderice
|
|
571
571
|
|
|
572
|
-
Requisito: necesitás pbi-cli-tool
|
|
572
|
+
Requisito: necesitás Windows + Power BI Desktop + Python 3.10+ + `pipx` + `pbi-cli-tool` (si te falta algo, el skill te guía).
|
|
573
573
|
|
|
574
574
|
¿Arrancamos con /report-design, o preferís agregar más medidas al modelo primero?
|
|
575
575
|
```
|
|
@@ -581,7 +581,7 @@ If the user opts for reports, load `/report-design` and let it run. If they want
|
|
|
581
581
|
## What this skill does NOT do
|
|
582
582
|
|
|
583
583
|
- **No scoring / benchmarking** of an existing model. For that, the user can ask "audit this model" separately.
|
|
584
|
-
- **Report authoring** is delegated to `/report-design` which
|
|
584
|
+
- **Report authoring** is delegated to `/report-design` which uses bundled Node scripts plus the `pbi` CLI runtime flow — don't write `.Report/` files from here.
|
|
585
585
|
|
|
586
586
|
---
|
|
587
587
|
|
|
@@ -9,13 +9,13 @@ Activate this skill when the user mentions:
|
|
|
9
9
|
- Explicit invocation: `/report-design`
|
|
10
10
|
|
|
11
11
|
## Identity
|
|
12
|
-
You are **BI Report Architect**, an orchestrator that turns a finished semantic model into a Power BI report. You author PBIR via **bundled Node scripts** — not via `pbi-
|
|
12
|
+
You are **BI Report Architect**, an orchestrator that turns a finished semantic model into a Power BI report. You author the PBIR visual/theme layer via **bundled Node scripts** — not via the old `pbi visual` / `pbi report set-theme` path:
|
|
13
13
|
|
|
14
14
|
- `scripts/create-visual.js` — creates any of the 28 native PBI visualTypes with a canonical `visual.json` shape (allowlist-driven, validated). **This replaces `pbi visual add` + `pbi visual bind`.**
|
|
15
15
|
- `scripts/apply-theme.js` — registers a custom theme with the canonical `report.json` shape. **This replaces `pbi report set-theme`** (which writes invalid metadata for PBI Desktop March 2026).
|
|
16
16
|
- `scripts/validate-pbir.js` — allowlist + bind-role validator. **Complements `pbi report validate`**, which passes `valid: True` even on non-native types like `stackedBarChart`.
|
|
17
17
|
|
|
18
|
-
The `pbi-cli-tool` (MIT, by MinaSaad1) is
|
|
18
|
+
The `pbi-cli-tool` (MIT, by MinaSaad1) is still required today for **three parts of the flow**: model introspection via XMLA (`pbi connect`, `pbi measure list`, `pbi table list`, `pbi column list`), report page management (`pbi report add-page`, `pbi report list-pages`), and schema validation (`pbi report validate`). Prefer the Microsoft Modeling MCP when available for the introspection part — same capability, better integrated.
|
|
19
19
|
|
|
20
20
|
Full rationale: `references/native-visuals.md` → section "Lo que este skill YA no hace via CLI".
|
|
21
21
|
|
|
@@ -341,8 +341,8 @@ Cuando guardes desde Desktop, commiteá el .pbip a git para versionar.
|
|
|
341
341
|
**References** (`references/`):
|
|
342
342
|
- `native-visuals.md` — **canonical reference**: 28 native visualTypes, their roles, shape canonical, copy-paste examples (read this before authoring)
|
|
343
343
|
- `pbi-desktop-installation.md` — why the standalone installer build is required (not Microsoft Store), install + uninstall steps
|
|
344
|
-
- `cli-setup.md` — how to install Python + pipx + pbi-cli-tool + pywin32 (
|
|
345
|
-
- `cli-commands.md` — cheatsheet of the `pbi` commands still used by this skill (
|
|
344
|
+
- `cli-setup.md` — how to install Python + pipx + pbi-cli-tool + pywin32 (required because this skill still uses `pbi` for connect, page operations, and validation)
|
|
345
|
+
- `cli-commands.md` — cheatsheet of the `pbi` commands still used by this skill (`pbi connect`, `pbi measure list`, `pbi report add-page`, `pbi report list-pages`, `pbi report validate`)
|
|
346
346
|
- `textbox.md` — historical manual-write pattern for textboxes (superseded by `create-visual.js --type textbox`; kept for reference)
|
|
347
347
|
- `slicer.md` — historical manual-write pattern for slicers (superseded by `create-visual.js --type slicer --slicer-mode ...`; kept for reference)
|
|
348
348
|
- `close-write-open-pattern.md` — why and how to handle the Desktop restart cycle
|
|
@@ -356,7 +356,7 @@ Cuando guardes desde Desktop, commiteá el .pbip a git para versionar.
|
|
|
356
356
|
- `layouts/generic.md` — fallback 3-page composition
|
|
357
357
|
|
|
358
358
|
**Scripts** (`scripts/`):
|
|
359
|
-
- `ensure-pbi-cli.sh` — idempotent installer for the pbi-cli-tool (
|
|
359
|
+
- `ensure-pbi-cli.sh` — idempotent installer for the pbi-cli-tool (required for this skill's current runtime flow)
|
|
360
360
|
- `apply-theme.js` — registers a custom PBIR theme with the canonical shape Desktop accepts (replaces the broken `pbi report set-theme` in PBI Desktop March 2026)
|
|
361
361
|
- `create-visual.js` — creates any of the 28 native PBI visualTypes with a canonical `visual.json` shape (replaces `pbi visual add` + `pbi visual bind`; enforces allowlist)
|
|
362
362
|
- `validate-pbir.js` — allowlist + role-checks validator that catches non-native visualTypes and missing/invalid bindings (complements `pbi report validate`)
|
|
@@ -373,4 +373,4 @@ Cuando guardes desde Desktop, commiteá el .pbip a git para versionar.
|
|
|
373
373
|
|
|
374
374
|
## Credit
|
|
375
375
|
|
|
376
|
-
This skill
|
|
376
|
+
This skill integrates with the [`pbi-cli-tool`](https://github.com/MinaSaad1/pbi-cli) CLI by MinaSaad1 (MIT License) for model introspection, page operations, and schema validation. Visual and theme authoring are handled by the bundled Node scripts; we orchestrate the teaching journey, planning, and Desktop lifecycle.
|