@luquimbo/bi-superpowers 4.1.0 → 4.1.1
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 +7 -6
- package/CHANGELOG.md +15 -0
- package/README.md +3 -1
- package/bin/commands/update-check.js +16 -2
- package/bin/lib/generators/claude-plugin.js +23 -5
- package/commands/bi-start.md +4 -25
- package/package.json +1 -1
- package/skills/bi-start/SKILL.md +5 -26
- package/skills/bi-start/scripts/update-check.js +16 -2
- package/skills/pbi-connect/SKILL.md +1 -1
- package/skills/pbi-connect/scripts/update-check.js +16 -2
- package/skills/project-kickoff/SKILL.md +1 -1
- package/skills/project-kickoff/scripts/update-check.js +16 -2
- package/skills/report-design/SKILL.md +1 -1
- package/skills/report-design/scripts/update-check.js +16 -2
- package/src/content/skills/bi-start.md +4 -4
|
@@ -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.1",
|
|
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.1",
|
|
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
|
@@ -127,18 +127,18 @@ npm install -g @luquimbo/bi-superpowers
|
|
|
127
127
|
super install
|
|
128
128
|
```
|
|
129
129
|
|
|
130
|
-
The shared v4.
|
|
130
|
+
The shared v4.1.0 contract is:
|
|
131
131
|
- **4 skills** — `bi-start` (session opener), `project-kickoff`, `pbi-connect`, `report-design`
|
|
132
132
|
- **2 MCP servers** — `powerbi-modeling-mcp`, `microsoft-learn`
|
|
133
133
|
|
|
134
134
|
Agent-specific behavior:
|
|
135
|
-
- **Claude Code** — `super kickoff` can also generate a project-local plugin with slash commands: `/project-kickoff`, `/pbi-connect`, `/report-design`
|
|
135
|
+
- **Claude Code** — `super kickoff` can also generate a project-local plugin with slash commands: `/bi-start`, `/project-kickoff`, `/pbi-connect`, `/report-design`
|
|
136
136
|
- **GitHub Copilot** — uses the installed skills + MCP config via natural-language prompts
|
|
137
137
|
- **Codex** — uses the installed skills + MCP config via natural-language prompts
|
|
138
138
|
- **Gemini CLI** — uses the installed skills + MCP config via natural-language prompts
|
|
139
139
|
- **Kilo Code** — uses the installed skills + MCP config via natural-language prompts
|
|
140
140
|
|
|
141
|
-
`/report-design` has one extra runtime prerequisite on every agent: **Windows + Power BI Desktop
|
|
141
|
+
`/report-design` has one extra runtime prerequisite on every agent: **Windows + Power BI Desktop**. `pbi-cli-tool` is optional for model introspection only; the PBIR authoring flow is driven by the bundled Node scripts. If that Desktop stack is not available yet, start with `bi-start`, `project-kickoff`, or `pbi-connect`.
|
|
142
142
|
|
|
143
143
|
### Claude Desktop
|
|
144
144
|
|
|
@@ -175,13 +175,14 @@ Los 4 skills quedan disponibles como MCP prompts.
|
|
|
175
175
|
- **No Laziness**: Fix root causes, avoid temporary patches.
|
|
176
176
|
- **Minimal Impact**: Touch only what is necessary.
|
|
177
177
|
|
|
178
|
-
## Available Skills (
|
|
178
|
+
## Available Skills (4)
|
|
179
179
|
|
|
180
180
|
| Skill | Purpose | Trigger |
|
|
181
181
|
|-------|---------|---------|
|
|
182
|
+
| `/bi-start` | Session opener: environment snapshot, update check, and routing to the specialist skills | "bi-start", "empezar", "start session" |
|
|
182
183
|
| `/project-kickoff` | Analyze and plan BI projects | "analyze project", "new project" |
|
|
183
184
|
| `/pbi-connect` | Connect to Power BI Desktop | "connect Power BI", "MCP" |
|
|
184
|
-
| `/report-design` | Generate PBIR report pages via
|
|
185
|
+
| `/report-design` | Generate PBIR report pages via bundled Node scripts | "report design", "crear reportes" |
|
|
185
186
|
|
|
186
187
|
## MCP Servers (2)
|
|
187
188
|
|
|
@@ -209,7 +210,7 @@ BI Agent Superpowers generates a native Claude Code plugin from a single source
|
|
|
209
210
|
project/
|
|
210
211
|
├── .claude-plugin/plugin.json # Plugin manifest
|
|
211
212
|
├── .mcp.json # Power BI Modeling + Microsoft Learn MCPs
|
|
212
|
-
├── commands/*.md #
|
|
213
|
+
├── commands/*.md # 4 slash commands (bi-start, pbi-connect, project-kickoff, report-design)
|
|
213
214
|
├── skills/*/SKILL.md # 4 skills (discoverable)
|
|
214
215
|
├── config.json # User preferences
|
|
215
216
|
└── 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.0
|
|
10
|
+
> **Estado:** `v4.1.0` — **primera versión estable**. Incluye 4 skills (`/bi-start` + 3 especialistas) y 2 MCP servers oficiales de Microsoft. `/report-design` genera PBIR via scripts Node propios (no depende de `pbi-cli-tool` para authoring — Windows + Power BI Desktop sí sigue siendo requisito runtime).
|
|
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
|
|
|
@@ -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
|
};
|
|
@@ -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.
|
|
@@ -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
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@luquimbo/bi-superpowers",
|
|
3
|
-
"version": "4.1.
|
|
3
|
+
"version": "4.1.1",
|
|
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": {
|
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.1"
|
|
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.
|
|
@@ -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
|
|
|
@@ -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.1";
|
|
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.1"
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
<!-- Generated by BI Agent Superpowers. Edit src/content/skills/pbi-connect.md instead. -->
|
|
@@ -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.1";
|
|
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.1"
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
<!-- Generated by BI Agent Superpowers. Edit src/content/skills/project-kickoff.md instead. -->
|
|
@@ -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.1";
|
|
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.1"
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
<!-- Generated by BI Agent Superpowers. Edit src/content/skills/report-design.md instead. -->
|
|
@@ -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.1";
|
|
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.
|
|
@@ -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
|
|