@luquimbo/bi-superpowers 1.2.2 → 2.0.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 -2
- package/.plugin/plugin.json +1 -1
- package/AGENTS.md +2 -3
- package/CHANGELOG.md +25 -0
- package/README.md +14 -5
- package/bin/cli.js +26 -246
- package/bin/commands/build-desktop.js +3 -1
- package/bin/commands/diff.js +3 -1
- package/bin/commands/install.js +4 -6
- package/bin/commands/lint.js +3 -1
- package/bin/commands/search.js +1 -1
- package/bin/commands/watch.js +3 -1
- package/bin/lib/generators/claude-plugin.js +2 -1
- package/bin/lib/generators/shared.js +0 -31
- package/bin/lib/skills.js +8 -34
- package/bin/postinstall.js +20 -18
- package/package.json +1 -1
- package/skills/contributions/SKILL.md +1 -1
- package/skills/data-model-design/SKILL.md +1 -1
- package/skills/data-modeling/SKILL.md +1 -1
- package/skills/data-quality/SKILL.md +1 -1
- package/skills/dax/SKILL.md +1 -1
- package/skills/dax-doctor/SKILL.md +1 -1
- package/skills/dax-udf/SKILL.md +1 -1
- package/skills/deployment/SKILL.md +1 -1
- package/skills/excel-formulas/SKILL.md +1 -1
- package/skills/fabric-scripts/SKILL.md +1 -1
- package/skills/fast-standard/SKILL.md +1 -1
- package/skills/governance/SKILL.md +1 -1
- package/skills/migration-assistant/SKILL.md +1 -1
- package/skills/model-documenter/SKILL.md +1 -1
- package/skills/pbi-connect/SKILL.md +1 -1
- package/skills/power-query/SKILL.md +1 -1
- package/skills/project-kickoff/SKILL.md +1 -1
- package/skills/query-performance/SKILL.md +1 -1
- package/skills/report-design/SKILL.md +1 -1
- package/skills/report-layout/SKILL.md +1 -1
- package/skills/rls-design/SKILL.md +1 -1
- package/skills/semantic-model/SKILL.md +1 -1
- package/skills/testing-validation/SKILL.md +1 -1
- package/skills/theme-tweaker/SKILL.md +1 -1
- package/bin/lib/licensing/index.js +0 -35
- package/bin/lib/licensing/storage.js +0 -404
- package/bin/lib/licensing/storage.test.js +0 -55
- package/bin/lib/licensing/validator.js +0 -213
- package/bin/lib/licensing/validator.test.js +0 -137
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
},
|
|
7
7
|
"metadata": {
|
|
8
8
|
"description": "AI-powered skills for Power BI, Microsoft Fabric, and Excel development. 24 skills covering DAX, Power Query, data modeling, report design, governance, and more.",
|
|
9
|
-
"version": "
|
|
9
|
+
"version": "2.0.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
|
+
"version": "2.0.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
|
@@ -102,16 +102,15 @@ Opciones:
|
|
|
102
102
|
- `--agent claude-code --agent codex` — agentes específicos
|
|
103
103
|
- Sin flags → modo interactivo (detecta agentes instalados)
|
|
104
104
|
|
|
105
|
-
### Option 2: Full CLI (
|
|
105
|
+
### Option 2: Full CLI (open source — includes MCP, library, themes)
|
|
106
106
|
|
|
107
107
|
```bash
|
|
108
108
|
npm install -g @luquimbo/bi-superpowers
|
|
109
|
-
super unlock
|
|
110
109
|
super kickoff
|
|
111
110
|
```
|
|
112
111
|
|
|
113
112
|
Incluye generación del plugin Claude Code con MCP servers, biblioteca de
|
|
114
|
-
snippets, temas de Power BI y toda la CLI `super`.
|
|
113
|
+
snippets, temas de Power BI y toda la CLI `super`. Todo gratis y open source (MIT).
|
|
115
114
|
|
|
116
115
|
### Option 3: Claude Code Plugin marketplace
|
|
117
116
|
|
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,31 @@ All notable changes to BI Agent Superpowers will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [2.0.0] — 2026-04-11
|
|
9
|
+
|
|
10
|
+
### BREAKING CHANGES
|
|
11
|
+
- **Removed the entire license system.** The plugin is now 100% open source (MIT).
|
|
12
|
+
- Removed `bin/lib/licensing/` directory (storage, validator, index)
|
|
13
|
+
- Removed commands: `super unlock`, `super status`, `super activate`
|
|
14
|
+
- Removed functions: `loadLicense`, `saveLicense`, `validateLicense`,
|
|
15
|
+
`isContentInstalled`, `downloadPremiumContent`, `requireLicense`
|
|
16
|
+
- Removed license gates on `super kickoff` and `super recharge`
|
|
17
|
+
- Removed `~/.bi-superpowers/` content cache directory
|
|
18
|
+
- Removed env vars `BIAS_API_URL` and `BIAS_DEV_MODE`
|
|
19
|
+
- Existing `~/.bi-superpowers-license` files are silently ignored
|
|
20
|
+
|
|
21
|
+
### Migration
|
|
22
|
+
- Run `npm install -g @luquimbo/bi-superpowers@latest`
|
|
23
|
+
- Remove any references to `super unlock` / `super status` from your scripts
|
|
24
|
+
- All 24 skills and the full library now ship with the npm package and are
|
|
25
|
+
immediately available after install
|
|
26
|
+
|
|
27
|
+
### Changed
|
|
28
|
+
- `bin/lib/skills.js` no longer supports a content cache fallback — it only
|
|
29
|
+
reads from the package source directory
|
|
30
|
+
- `getCommandConfig` no longer includes `contentCacheDir`
|
|
31
|
+
- Simplified postinstall message and README quick start
|
|
32
|
+
|
|
8
33
|
## [Unreleased]
|
|
9
34
|
|
|
10
35
|
### Added
|
package/README.md
CHANGED
|
@@ -20,14 +20,21 @@ AI-powered toolkit for Power BI, Microsoft Fabric & Excel development. Ships as
|
|
|
20
20
|
|
|
21
21
|
## Quick Start
|
|
22
22
|
|
|
23
|
+
### Option 1 — Install skills for your AI agents (fastest)
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
npx @luquimbo/bi-superpowers install
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Interactive installer — detects Claude Code, GitHub Copilot, Codex, Gemini CLI, Kilo Code and installs the 24 skills into the right directories.
|
|
30
|
+
|
|
31
|
+
### Option 2 — Full CLI with plugin generation
|
|
32
|
+
|
|
23
33
|
```bash
|
|
24
34
|
# Install globally
|
|
25
35
|
npm install -g @luquimbo/bi-superpowers
|
|
26
36
|
|
|
27
|
-
#
|
|
28
|
-
super unlock
|
|
29
|
-
|
|
30
|
-
# Initialize in your project
|
|
37
|
+
# Initialize the plugin in your project
|
|
31
38
|
cd your-bi-project
|
|
32
39
|
super kickoff
|
|
33
40
|
|
|
@@ -35,6 +42,8 @@ super kickoff
|
|
|
35
42
|
claude --plugin-dir .
|
|
36
43
|
```
|
|
37
44
|
|
|
45
|
+
100% open source (MIT). No license keys. All 24 skills and the full library ship with the npm package.
|
|
46
|
+
|
|
38
47
|
### Claude Desktop
|
|
39
48
|
|
|
40
49
|
```bash
|
|
@@ -118,8 +127,8 @@ your-project/
|
|
|
118
127
|
| `super recharge` | Regenerate plugin after editing source skills |
|
|
119
128
|
| `super build-desktop` | Build MCPB extension for Claude Desktop |
|
|
120
129
|
| `super mcp-setup` | Configure MCP servers |
|
|
130
|
+
| `super install` | Install skills into your AI agents' directories |
|
|
121
131
|
| `super powers` | Show available skills, snippets, and themes |
|
|
122
|
-
| `super unlock` | Activate your license key |
|
|
123
132
|
| `super upgrade` | Update to the latest version |
|
|
124
133
|
| `super xray <query>` | Search snippets and library content |
|
|
125
134
|
| `super checkup [file]` | Validate skill files |
|
package/bin/cli.js
CHANGED
|
@@ -13,10 +13,9 @@
|
|
|
13
13
|
* and generated for the Claude Code plugin.
|
|
14
14
|
* - Supports: Claude Code, 1code.dev, Claude Desktop (via MCPB).
|
|
15
15
|
*
|
|
16
|
-
*
|
|
17
|
-
* -
|
|
18
|
-
* -
|
|
19
|
-
* - Content is cached locally in ~/.bi-superpowers/
|
|
16
|
+
* Licensing:
|
|
17
|
+
* - Open source (MIT) — no license activation required
|
|
18
|
+
* - All skills and library content ship with the npm package
|
|
20
19
|
*
|
|
21
20
|
* @module cli
|
|
22
21
|
* @author Lucas Sanchez (@luquimbo)
|
|
@@ -26,14 +25,11 @@
|
|
|
26
25
|
const fs = require('fs');
|
|
27
26
|
const path = require('path');
|
|
28
27
|
const { execSync } = require('child_process');
|
|
29
|
-
const readline = require('readline');
|
|
30
|
-
const os = require('os');
|
|
31
28
|
const { loadSkills } = require('./lib/skills');
|
|
32
29
|
|
|
33
30
|
// Import lib modules (extracted from cli.js for better organization)
|
|
34
|
-
let
|
|
31
|
+
let generators;
|
|
35
32
|
try {
|
|
36
|
-
licensing = require('./lib/licensing');
|
|
37
33
|
generators = require('./lib/generators');
|
|
38
34
|
} catch (e) {
|
|
39
35
|
// Modules may not be available during npm install phase
|
|
@@ -88,22 +84,15 @@ try {
|
|
|
88
84
|
/** Directory where the npm package is installed */
|
|
89
85
|
const PACKAGE_DIR = path.dirname(__dirname);
|
|
90
86
|
|
|
91
|
-
/** Directory
|
|
92
|
-
const
|
|
93
|
-
|
|
94
|
-
// File paths - premium content is downloaded to CONTENT_CACHE_DIR
|
|
95
|
-
/** Directory containing skill definition files (.md) */
|
|
96
|
-
const SKILLS_DIR = path.join(CONTENT_CACHE_DIR, 'src', 'content', 'skills');
|
|
87
|
+
/** Directory containing skill source files (.md) */
|
|
88
|
+
const SKILLS_DIR = path.join(PACKAGE_DIR, 'src', 'content', 'skills');
|
|
97
89
|
|
|
98
90
|
/** Directory containing code snippets, templates, and themes */
|
|
99
|
-
const LIBRARY_DIR = path.join(
|
|
91
|
+
const LIBRARY_DIR = path.join(PACKAGE_DIR, 'library');
|
|
100
92
|
|
|
101
93
|
/** Project-local config file name (stores tool selections) */
|
|
102
94
|
const CONFIG_FILE = '.bi-superpowers.json';
|
|
103
95
|
|
|
104
|
-
/** Symlink name created in projects pointing to content cache */
|
|
105
|
-
const SYMLINK_NAME = '.bi-superpowers';
|
|
106
|
-
|
|
107
96
|
/** npm package name for update commands */
|
|
108
97
|
const PACKAGE_NAME = '@luquimbo/bi-superpowers';
|
|
109
98
|
const DEFAULT_TOOLS = ['claude-plugin'];
|
|
@@ -123,7 +112,7 @@ const AI_TOOLS = generators ? generators.AI_TOOLS : {};
|
|
|
123
112
|
*
|
|
124
113
|
* Command Categories:
|
|
125
114
|
* - Core: Basic info commands (help, version, about, status)
|
|
126
|
-
* - Setup: Project initialization and configuration (kickoff, recharge,
|
|
115
|
+
* - Setup: Project initialization and configuration (kickoff, recharge, upgrade)
|
|
127
116
|
* - Developer: Advanced tools for content management (xray, checkup, scan, sentinel, powers)
|
|
128
117
|
* - Legacy: Old command names maintained for backward compatibility
|
|
129
118
|
*/
|
|
@@ -134,23 +123,20 @@ const AI_TOOLS = generators ? generators.AI_TOOLS : {};
|
|
|
134
123
|
// further down in the file) are attached imperatively after that function exists.
|
|
135
124
|
// See the `commands.xray = runSearch;` block after the wrapper `const`s.
|
|
136
125
|
const commands = {
|
|
137
|
-
// Core commands - basic info
|
|
126
|
+
// Core commands - basic info (hoisted functions, safe here)
|
|
138
127
|
help: showHelp,
|
|
139
128
|
version: showVersion,
|
|
140
129
|
about: showInfo,
|
|
141
|
-
status: showLicenseStatus,
|
|
142
130
|
|
|
143
131
|
// Setup & sync - project configuration (hoisted functions, safe here)
|
|
144
132
|
kickoff: initProject,
|
|
145
133
|
recharge: syncProject,
|
|
146
|
-
unlock: activateLicense,
|
|
147
134
|
upgrade: updatePackage,
|
|
148
135
|
powers: listAgents,
|
|
149
136
|
|
|
150
137
|
// Legacy aliases (hoisted functions, safe here)
|
|
151
138
|
init: initProject,
|
|
152
139
|
sync: syncProject,
|
|
153
|
-
activate: activateLicense,
|
|
154
140
|
update: updatePackage,
|
|
155
141
|
list: listAgents,
|
|
156
142
|
info: showInfo,
|
|
@@ -185,7 +171,6 @@ Usage:
|
|
|
185
171
|
|
|
186
172
|
Commands:
|
|
187
173
|
install Install skills for your AI agents (Claude, Copilot, Codex...)
|
|
188
|
-
unlock Activate your license key
|
|
189
174
|
kickoff [path] Initialize the Claude Code plugin in your project
|
|
190
175
|
recharge [path] Regenerate the plugin from source skills
|
|
191
176
|
build-desktop Build .mcpb extension for Claude Desktop
|
|
@@ -196,9 +181,8 @@ Commands:
|
|
|
196
181
|
sentinel Watch for changes and auto-regenerate
|
|
197
182
|
mcp-setup Configure official Microsoft MCP servers
|
|
198
183
|
upgrade Update to latest version
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
help Show this help
|
|
184
|
+
about Show installation info
|
|
185
|
+
help Show this help
|
|
202
186
|
|
|
203
187
|
Repo Multi-Proyecto (v3):
|
|
204
188
|
setup Create your bi-repo for version control
|
|
@@ -220,7 +204,6 @@ Examples:
|
|
|
220
204
|
super install # Interactive multi-agent installer
|
|
221
205
|
super install -a claude-code # Install for Claude Code only
|
|
222
206
|
super install --all --yes # Install for all agents, no prompts
|
|
223
|
-
super unlock # Activate your license
|
|
224
207
|
super kickoff # Initialize plugin in current directory
|
|
225
208
|
super kickoff ./my-project # Initialize in specific directory
|
|
226
209
|
super kickoff --dry-run # Preview what would be created
|
|
@@ -241,7 +224,7 @@ Repo Multi-Proyecto:
|
|
|
241
224
|
super sync-source # Auto-detect and sync
|
|
242
225
|
super sync-profile # Save snippets to profile
|
|
243
226
|
|
|
244
|
-
|
|
227
|
+
Open source — MIT licensed
|
|
245
228
|
Documentation: https://github.com/luquimbo/bi-superpowers
|
|
246
229
|
`);
|
|
247
230
|
}
|
|
@@ -252,9 +235,6 @@ function showVersion() {
|
|
|
252
235
|
|
|
253
236
|
function showInfo() {
|
|
254
237
|
const skillCount = getSkillFiles().length;
|
|
255
|
-
const license = loadLicense();
|
|
256
|
-
const licenseStatus = license ? `Active (${license.email})` : 'Not activated';
|
|
257
|
-
const contentStatus = isContentInstalled() ? `Installed (${skillCount} skills)` : 'Not installed';
|
|
258
238
|
const aiToolsList = Object.entries(AI_TOOLS)
|
|
259
239
|
.map(([_k, v]) => ` - ${v.name}`)
|
|
260
240
|
.join('\n');
|
|
@@ -266,16 +246,18 @@ BI Agent Superpowers - Installation Info
|
|
|
266
246
|
Version: ${VERSION}
|
|
267
247
|
Author: Lucas Sanchez (@luquimbo)
|
|
268
248
|
Package dir: ${PACKAGE_DIR}
|
|
269
|
-
|
|
270
|
-
License:
|
|
271
|
-
Content: ${contentStatus}
|
|
249
|
+
Skills: ${skillCount} available
|
|
250
|
+
License: MIT (open source)
|
|
272
251
|
|
|
273
252
|
Architecture: Single Source of Truth
|
|
274
253
|
Skills defined once, generated for the Claude Code plugin
|
|
275
254
|
|
|
276
255
|
Compatible with:
|
|
277
256
|
- Claude Code (plugin)
|
|
278
|
-
-
|
|
257
|
+
- GitHub Copilot (agent skills)
|
|
258
|
+
- Codex (OpenAI)
|
|
259
|
+
- Gemini CLI
|
|
260
|
+
- Kilo Code
|
|
279
261
|
- Claude Desktop (via MCPB extension)
|
|
280
262
|
|
|
281
263
|
Plugin Generators:
|
|
@@ -285,182 +267,9 @@ GitHub: https://github.com/luquimbo/bi-superpowers
|
|
|
285
267
|
`);
|
|
286
268
|
}
|
|
287
269
|
|
|
288
|
-
/**
|
|
289
|
-
* Creates a readline interface for interactive CLI prompts
|
|
290
|
-
* @returns {readline.Interface} Readline interface
|
|
291
|
-
*/
|
|
292
|
-
function createReadline() {
|
|
293
|
-
return readline.createInterface({
|
|
294
|
-
input: process.stdin,
|
|
295
|
-
output: process.stdout,
|
|
296
|
-
});
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
/**
|
|
300
|
-
* Promisified readline question
|
|
301
|
-
* @param {readline.Interface} rl - Readline interface
|
|
302
|
-
* @param {string} question - Question to display
|
|
303
|
-
* @returns {Promise<string>} User's trimmed answer
|
|
304
|
-
*/
|
|
305
|
-
function prompt(rl, question) {
|
|
306
|
-
return new Promise((resolve) => {
|
|
307
|
-
rl.question(question, (answer) => resolve(answer.trim()));
|
|
308
|
-
});
|
|
309
|
-
}
|
|
310
|
-
|
|
311
270
|
// ============================================
|
|
312
271
|
// LICENSE MANAGEMENT
|
|
313
272
|
// ============================================
|
|
314
|
-
// These functions handle license storage, validation, and premium content downloads.
|
|
315
|
-
// Licenses are stored in ~/.bi-superpowers-license as JSON.
|
|
316
|
-
|
|
317
|
-
// License functions - delegated to lib/licensing module
|
|
318
|
-
function loadLicense() {
|
|
319
|
-
return licensing ? licensing.loadLicense() : null;
|
|
320
|
-
}
|
|
321
|
-
|
|
322
|
-
function saveLicense(data) {
|
|
323
|
-
if (licensing) licensing.saveLicense(data);
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
// HTTP/download/extract functions - delegated to lib/licensing module
|
|
327
|
-
function isContentInstalled() {
|
|
328
|
-
return licensing ? licensing.isContentInstalled() : false;
|
|
329
|
-
}
|
|
330
|
-
|
|
331
|
-
async function validateLicense(licenseKey) {
|
|
332
|
-
return licensing
|
|
333
|
-
? licensing.validateLicense(licenseKey)
|
|
334
|
-
: { valid: false, error: 'Module not loaded' };
|
|
335
|
-
}
|
|
336
|
-
|
|
337
|
-
async function downloadPremiumContent(downloadUrl) {
|
|
338
|
-
return licensing ? licensing.downloadPremiumContent(downloadUrl) : false;
|
|
339
|
-
}
|
|
340
|
-
|
|
341
|
-
/**
|
|
342
|
-
* Show license status command handler
|
|
343
|
-
*
|
|
344
|
-
* Displays current license status including:
|
|
345
|
-
* - Whether a license is activated
|
|
346
|
-
* - Email and activation date if active
|
|
347
|
-
* - Instructions for activation if not active
|
|
348
|
-
*/
|
|
349
|
-
function showLicenseStatus() {
|
|
350
|
-
const license = loadLicense();
|
|
351
|
-
|
|
352
|
-
if (!license) {
|
|
353
|
-
console.log(`
|
|
354
|
-
License Status: NOT ACTIVATED
|
|
355
|
-
|
|
356
|
-
Run 'bi-superpowers unlock' to activate your license.
|
|
357
|
-
Get your license at: https://acadevor.com/bi-superpowers
|
|
358
|
-
`);
|
|
359
|
-
return;
|
|
360
|
-
}
|
|
361
|
-
|
|
362
|
-
console.log(`
|
|
363
|
-
License Status: ACTIVE ✓
|
|
364
|
-
|
|
365
|
-
Email: ${license.email}
|
|
366
|
-
License: ${license.license.substring(0, 8)}...
|
|
367
|
-
Activated: ${license.activatedAt || 'Unknown'}
|
|
368
|
-
|
|
369
|
-
Run 'bi-superpowers unlock' to re-activate or change license.
|
|
370
|
-
`);
|
|
371
|
-
}
|
|
372
|
-
|
|
373
|
-
/**
|
|
374
|
-
* Activate license command handler (super unlock)
|
|
375
|
-
*
|
|
376
|
-
* Interactive command that:
|
|
377
|
-
* 1. Prompts user for their license key
|
|
378
|
-
* 2. Validates the key against the API
|
|
379
|
-
* 3. Downloads premium content if validation succeeds
|
|
380
|
-
* 4. Saves the license locally for future sessions
|
|
381
|
-
*
|
|
382
|
-
* This is typically the first command users run after installation.
|
|
383
|
-
*/
|
|
384
|
-
async function activateLicense() {
|
|
385
|
-
console.log(`
|
|
386
|
-
BI Agent Superpowers - License Activation
|
|
387
|
-
=========================================
|
|
388
|
-
`);
|
|
389
|
-
|
|
390
|
-
const existingLicense = loadLicense();
|
|
391
|
-
if (existingLicense) {
|
|
392
|
-
console.log(
|
|
393
|
-
`Current license: ${existingLicense.license.substring(0, 8)}... (${existingLicense.email})`
|
|
394
|
-
);
|
|
395
|
-
console.log('');
|
|
396
|
-
}
|
|
397
|
-
|
|
398
|
-
const rl = createReadline();
|
|
399
|
-
|
|
400
|
-
try {
|
|
401
|
-
const licenseKey = await prompt(rl, 'Enter your license key: ');
|
|
402
|
-
|
|
403
|
-
if (!licenseKey) {
|
|
404
|
-
console.log('\nNo license key provided.');
|
|
405
|
-
process.exit(1);
|
|
406
|
-
}
|
|
407
|
-
|
|
408
|
-
console.log('\nValidating license...');
|
|
409
|
-
|
|
410
|
-
const result = await validateLicense(licenseKey);
|
|
411
|
-
|
|
412
|
-
if (!result.valid) {
|
|
413
|
-
console.log(`\n✗ License invalid: ${result.error || 'Unknown error'}`);
|
|
414
|
-
console.log('\nGet your license at: https://acadevor.com/bi-superpowers');
|
|
415
|
-
process.exit(1);
|
|
416
|
-
}
|
|
417
|
-
|
|
418
|
-
console.log('\n✓ License validated!');
|
|
419
|
-
console.log(` Email: ${result.email}`);
|
|
420
|
-
if (result.name) {
|
|
421
|
-
console.log(` Name: ${result.name}`);
|
|
422
|
-
}
|
|
423
|
-
|
|
424
|
-
// Download premium content
|
|
425
|
-
console.log('');
|
|
426
|
-
if (result.downloadUrl) {
|
|
427
|
-
const downloaded = await downloadPremiumContent(result.downloadUrl);
|
|
428
|
-
if (!downloaded) {
|
|
429
|
-
console.log('\n⚠ Content download failed. You can retry with "bi-superpowers unlock"');
|
|
430
|
-
}
|
|
431
|
-
}
|
|
432
|
-
|
|
433
|
-
// Save license
|
|
434
|
-
saveLicense({
|
|
435
|
-
license: licenseKey,
|
|
436
|
-
email: result.email,
|
|
437
|
-
name: result.name,
|
|
438
|
-
activatedAt: new Date().toISOString(),
|
|
439
|
-
contentVersion: VERSION,
|
|
440
|
-
});
|
|
441
|
-
|
|
442
|
-
console.log(`
|
|
443
|
-
════════════════════════════════════════════════════════════
|
|
444
|
-
License activated successfully!
|
|
445
|
-
════════════════════════════════════════════════════════════
|
|
446
|
-
|
|
447
|
-
You can now run:
|
|
448
|
-
|
|
449
|
-
super kickoff # Initialize in current project
|
|
450
|
-
super powers # See available skills
|
|
451
|
-
|
|
452
|
-
════════════════════════════════════════════════════════════
|
|
453
|
-
`);
|
|
454
|
-
} finally {
|
|
455
|
-
rl.close();
|
|
456
|
-
}
|
|
457
|
-
}
|
|
458
|
-
|
|
459
|
-
// requireLicense - delegated to lib/licensing module
|
|
460
|
-
async function requireLicense() {
|
|
461
|
-
return licensing ? licensing.requireLicense(VERSION) : process.exit(1);
|
|
462
|
-
}
|
|
463
|
-
|
|
464
273
|
// ============================================
|
|
465
274
|
// SKILL FILE MANAGEMENT
|
|
466
275
|
// ============================================
|
|
@@ -483,7 +292,7 @@ async function requireLicense() {
|
|
|
483
292
|
function getSkillFiles() {
|
|
484
293
|
return loadSkills({
|
|
485
294
|
packageDir: PACKAGE_DIR,
|
|
486
|
-
|
|
295
|
+
preferLocal: true,
|
|
487
296
|
});
|
|
488
297
|
}
|
|
489
298
|
|
|
@@ -512,11 +321,9 @@ function parseSkillMetadata(content) {
|
|
|
512
321
|
* Initialize project with interactive prompts (super kickoff)
|
|
513
322
|
*
|
|
514
323
|
* This is the main setup wizard that:
|
|
515
|
-
* 1.
|
|
516
|
-
* 2.
|
|
517
|
-
* 3.
|
|
518
|
-
* 4. Creates a symlink to the content cache for easy access
|
|
519
|
-
* 5. Saves the selected tools to .bi-superpowers.json
|
|
324
|
+
* 1. Generates config files for the Claude Code plugin in the target directory
|
|
325
|
+
* 2. Saves the selected tools to .bi-superpowers.json
|
|
326
|
+
* 3. Copies a default config.json template if none exists
|
|
520
327
|
*
|
|
521
328
|
* Supports --dry-run flag to preview changes without writing files.
|
|
522
329
|
*
|
|
@@ -528,9 +335,6 @@ async function initProject(args) {
|
|
|
528
335
|
const cleanArgs = removeDryRunFlag(args);
|
|
529
336
|
const targetDir = cleanArgs[0] ? path.resolve(cleanArgs[0]) : process.cwd();
|
|
530
337
|
|
|
531
|
-
// Require valid license
|
|
532
|
-
await requireLicense();
|
|
533
|
-
|
|
534
338
|
const skills = getSkillFiles();
|
|
535
339
|
|
|
536
340
|
console.log(`
|
|
@@ -576,9 +380,6 @@ Skills available: ${skills.length}
|
|
|
576
380
|
// Ensure project-level config.json exists (used as AI preferences/context)
|
|
577
381
|
ensureProjectConfigJson(targetDir);
|
|
578
382
|
|
|
579
|
-
// Create library symlink used by generated plugin files
|
|
580
|
-
createSymlink(targetDir);
|
|
581
|
-
|
|
582
383
|
// Generate configs for selected tools
|
|
583
384
|
console.log('');
|
|
584
385
|
for (const tool of selectedTools) {
|
|
@@ -609,9 +410,6 @@ async function syncProject(args) {
|
|
|
609
410
|
const cleanArgs = removeDryRunFlag(args);
|
|
610
411
|
const targetDir = cleanArgs[0] ? path.resolve(cleanArgs[0]) : process.cwd();
|
|
611
412
|
|
|
612
|
-
// Require valid license
|
|
613
|
-
await requireLicense();
|
|
614
|
-
|
|
615
413
|
const skills = getSkillFiles();
|
|
616
414
|
|
|
617
415
|
console.log(`
|
|
@@ -689,9 +487,11 @@ function ensurePluginTool(tools = []) {
|
|
|
689
487
|
*/
|
|
690
488
|
function getGenerationOptions(targetDir) {
|
|
691
489
|
const usePluginRootLauncher = path.resolve(targetDir) === PACKAGE_DIR;
|
|
490
|
+
// If the project has a local library/ folder, use it; otherwise point to
|
|
491
|
+
// the library bundled inside the installed npm package.
|
|
692
492
|
const libraryPrefix = fs.existsSync(path.join(targetDir, 'library'))
|
|
693
493
|
? 'library'
|
|
694
|
-
:
|
|
494
|
+
: path.join(PACKAGE_DIR, 'library');
|
|
695
495
|
|
|
696
496
|
return {
|
|
697
497
|
packageDir: PACKAGE_DIR,
|
|
@@ -809,15 +609,6 @@ async function generateForTool(tool, targetDir, skills) {
|
|
|
809
609
|
}
|
|
810
610
|
}
|
|
811
611
|
|
|
812
|
-
/**
|
|
813
|
-
* Create symlink to content cache directory for easy access to library
|
|
814
|
-
*/
|
|
815
|
-
function createSymlink(targetDir) {
|
|
816
|
-
if (generators) {
|
|
817
|
-
generators.createSymlink(targetDir, CONTENT_CACHE_DIR, SYMLINK_NAME);
|
|
818
|
-
}
|
|
819
|
-
}
|
|
820
|
-
|
|
821
612
|
function showCompletionMessage(targetDir, tools, skillCount) {
|
|
822
613
|
console.log(`
|
|
823
614
|
════════════════════════════════════════════════════════════
|
|
@@ -890,22 +681,13 @@ function updatePackage() {
|
|
|
890
681
|
|
|
891
682
|
function listAgents() {
|
|
892
683
|
const skills = getSkillFiles();
|
|
893
|
-
const license = loadLicense();
|
|
894
|
-
const contentInstalled = isContentInstalled();
|
|
895
684
|
|
|
896
685
|
console.log(`
|
|
897
686
|
BI Agent Superpowers - Skills & Resources
|
|
898
687
|
=========================================
|
|
899
|
-
Single Source of Truth: ${skills.length} skills
|
|
900
|
-
License: ${license ? `Active (${license.email})` : 'Not activated'}
|
|
901
|
-
Content: ${contentInstalled ? 'Installed' : 'Not installed (run "bi-superpowers unlock")'}
|
|
688
|
+
Single Source of Truth: ${skills.length} skills (open source)
|
|
902
689
|
`);
|
|
903
690
|
|
|
904
|
-
if (!contentInstalled) {
|
|
905
|
-
console.log('⚠ Premium content not installed. Run "bi-superpowers unlock" first.\n');
|
|
906
|
-
return;
|
|
907
|
-
}
|
|
908
|
-
|
|
909
691
|
console.log('Skills (source content for the plugin and optional adapters):');
|
|
910
692
|
for (const skill of skills) {
|
|
911
693
|
const meta = parseSkillMetadata(skill.content);
|
|
@@ -963,7 +745,6 @@ function getCommandConfig() {
|
|
|
963
745
|
return {
|
|
964
746
|
skillsDir: SKILLS_DIR,
|
|
965
747
|
libraryDir: LIBRARY_DIR,
|
|
966
|
-
contentCacheDir: CONTENT_CACHE_DIR,
|
|
967
748
|
packageDir: PACKAGE_DIR,
|
|
968
749
|
version: VERSION,
|
|
969
750
|
};
|
|
@@ -1073,7 +854,6 @@ module.exports = {
|
|
|
1073
854
|
AI_TOOLS,
|
|
1074
855
|
SKILLS_DIR,
|
|
1075
856
|
LIBRARY_DIR,
|
|
1076
|
-
CONTENT_CACHE_DIR,
|
|
1077
857
|
VERSION,
|
|
1078
858
|
};
|
|
1079
859
|
|
|
@@ -51,7 +51,9 @@ BI Agent Superpowers — Build Desktop Extension
|
|
|
51
51
|
|
|
52
52
|
// Verify skills exist
|
|
53
53
|
if (!fs.existsSync(SKILLS_SOURCE_DIR)) {
|
|
54
|
-
console.error(
|
|
54
|
+
console.error(
|
|
55
|
+
'Error: skill sources not found. Try reinstalling: npm install -g @luquimbo/bi-superpowers'
|
|
56
|
+
);
|
|
55
57
|
process.exit(1);
|
|
56
58
|
}
|
|
57
59
|
|
package/bin/commands/diff.js
CHANGED
|
@@ -222,7 +222,9 @@ function diffCommand(args, config) {
|
|
|
222
222
|
if (fs.existsSync(localSkills)) {
|
|
223
223
|
skillsDir = localSkills;
|
|
224
224
|
} else {
|
|
225
|
-
tui.error(
|
|
225
|
+
tui.error(
|
|
226
|
+
'Skills directory not found. Try reinstalling: npm install -g @luquimbo/bi-superpowers'
|
|
227
|
+
);
|
|
226
228
|
process.exit(1);
|
|
227
229
|
}
|
|
228
230
|
}
|
package/bin/commands/install.js
CHANGED
|
@@ -6,13 +6,11 @@
|
|
|
6
6
|
* correctos para cada agente AI. Inspirado en el CLI `npx skills` de
|
|
7
7
|
* Vercel Labs.
|
|
8
8
|
*
|
|
9
|
-
* Los skills siempre se instalan a nivel de usuario (~/) para
|
|
10
|
-
*
|
|
11
|
-
*
|
|
9
|
+
* Los skills siempre se instalan a nivel de usuario (~/) para no
|
|
10
|
+
* contaminar el repo del proyecto. El usuario los obtiene una vez
|
|
11
|
+
* y los comparte con todos sus proyectos.
|
|
12
12
|
*
|
|
13
|
-
*
|
|
14
|
-
* instalar; la licencia controla acceso a contenido premium vía
|
|
15
|
-
* `super unlock` + `super kickoff`.
|
|
13
|
+
* Open source: todo el contenido ship gratis con el paquete npm.
|
|
16
14
|
*
|
|
17
15
|
* Uso:
|
|
18
16
|
* npx @luquimbo/bi-superpowers install
|
package/bin/commands/lint.js
CHANGED
|
@@ -345,7 +345,9 @@ function lintCommand(args, config) {
|
|
|
345
345
|
if (fs.existsSync(localSkills)) {
|
|
346
346
|
skillsDir = localSkills;
|
|
347
347
|
} else {
|
|
348
|
-
tui.error(
|
|
348
|
+
tui.error(
|
|
349
|
+
'Skills directory not found. Try reinstalling: npm install -g @luquimbo/bi-superpowers'
|
|
350
|
+
);
|
|
349
351
|
process.exit(1);
|
|
350
352
|
}
|
|
351
353
|
}
|
package/bin/commands/search.js
CHANGED
|
@@ -297,7 +297,7 @@ function searchCommand(args, config) {
|
|
|
297
297
|
if (fs.existsSync(localLibrary)) {
|
|
298
298
|
libraryDir = localLibrary;
|
|
299
299
|
} else {
|
|
300
|
-
tui.error('Library not found.
|
|
300
|
+
tui.error('Library not found. Try reinstalling: npm install -g @luquimbo/bi-superpowers');
|
|
301
301
|
process.exit(1);
|
|
302
302
|
}
|
|
303
303
|
}
|
package/bin/commands/watch.js
CHANGED
|
@@ -66,7 +66,9 @@ function watchCommand(args, config, cliModule) {
|
|
|
66
66
|
const targetDir = options.targetDir;
|
|
67
67
|
|
|
68
68
|
if (!fs.existsSync(skillsDir)) {
|
|
69
|
-
tui.error(
|
|
69
|
+
tui.error(
|
|
70
|
+
'Skills directory not found. Try reinstalling: npm install -g @luquimbo/bi-superpowers'
|
|
71
|
+
);
|
|
70
72
|
process.exit(1);
|
|
71
73
|
}
|
|
72
74
|
|