@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.
Files changed (48) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/.claude-plugin/skill-manifest.json +1 -2
  4. package/.plugin/plugin.json +1 -1
  5. package/AGENTS.md +2 -3
  6. package/CHANGELOG.md +25 -0
  7. package/README.md +14 -5
  8. package/bin/cli.js +26 -246
  9. package/bin/commands/build-desktop.js +3 -1
  10. package/bin/commands/diff.js +3 -1
  11. package/bin/commands/install.js +4 -6
  12. package/bin/commands/lint.js +3 -1
  13. package/bin/commands/search.js +1 -1
  14. package/bin/commands/watch.js +3 -1
  15. package/bin/lib/generators/claude-plugin.js +2 -1
  16. package/bin/lib/generators/shared.js +0 -31
  17. package/bin/lib/skills.js +8 -34
  18. package/bin/postinstall.js +20 -18
  19. package/package.json +1 -1
  20. package/skills/contributions/SKILL.md +1 -1
  21. package/skills/data-model-design/SKILL.md +1 -1
  22. package/skills/data-modeling/SKILL.md +1 -1
  23. package/skills/data-quality/SKILL.md +1 -1
  24. package/skills/dax/SKILL.md +1 -1
  25. package/skills/dax-doctor/SKILL.md +1 -1
  26. package/skills/dax-udf/SKILL.md +1 -1
  27. package/skills/deployment/SKILL.md +1 -1
  28. package/skills/excel-formulas/SKILL.md +1 -1
  29. package/skills/fabric-scripts/SKILL.md +1 -1
  30. package/skills/fast-standard/SKILL.md +1 -1
  31. package/skills/governance/SKILL.md +1 -1
  32. package/skills/migration-assistant/SKILL.md +1 -1
  33. package/skills/model-documenter/SKILL.md +1 -1
  34. package/skills/pbi-connect/SKILL.md +1 -1
  35. package/skills/power-query/SKILL.md +1 -1
  36. package/skills/project-kickoff/SKILL.md +1 -1
  37. package/skills/query-performance/SKILL.md +1 -1
  38. package/skills/report-design/SKILL.md +1 -1
  39. package/skills/report-layout/SKILL.md +1 -1
  40. package/skills/rls-design/SKILL.md +1 -1
  41. package/skills/semantic-model/SKILL.md +1 -1
  42. package/skills/testing-validation/SKILL.md +1 -1
  43. package/skills/theme-tweaker/SKILL.md +1 -1
  44. package/bin/lib/licensing/index.js +0 -35
  45. package/bin/lib/licensing/storage.js +0 -404
  46. package/bin/lib/licensing/storage.test.js +0 -55
  47. package/bin/lib/licensing/validator.js +0 -213
  48. 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": "1.2.2",
9
+ "version": "2.0.1",
10
10
  "repository": "https://github.com/luquimbo/bi-superpowers"
11
11
  },
12
12
  "plugins": [
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "bi-superpowers",
3
3
  "description": "Claude Code plugin for Power BI, Microsoft Fabric, and semantic model workflows powered by the official Microsoft MCP servers.",
4
- "version": "1.2.2",
4
+ "version": "2.0.1",
5
5
  "author": {
6
6
  "name": "Lucas Sanchez"
7
7
  }
@@ -1,7 +1,6 @@
1
1
  {
2
2
  "name": "bi-superpowers",
3
- "version": "1.2.2",
4
- "generatedAt": "2026-04-11T11:35:26.330Z",
3
+ "version": "2.0.1",
5
4
  "skillCount": 24,
6
5
  "skills": [
7
6
  {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "spec": "open-plugin-spec@1",
3
3
  "name": "bi-superpowers",
4
- "version": "1.2.2",
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 (premium — includes MCP, library, themes)
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
- # Activate your license
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
- * License System:
17
- * - Premium content requires activation via `bi-superpowers unlock`
18
- * - License validation happens against https://acadevor.com API
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 licensing, generators;
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 for cached premium content (skills, snippets, themes) */
92
- const CONTENT_CACHE_DIR = path.join(os.homedir(), '.bi-superpowers');
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(CONTENT_CACHE_DIR, 'library');
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, unlock, upgrade)
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 and status (hoisted functions, safe here)
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
- status Show license status
200
- about Show installation info
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
- Get your license at: https://acadevor.com/bi-superpowers
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
- Content dir: ${CONTENT_CACHE_DIR}
270
- License: ${licenseStatus}
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
- - 1code.dev (uses Claude Code SDK)
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
- contentCacheDir: CONTENT_CACHE_DIR,
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. Validates the user's license
516
- * 2. Prompts for which AI tools to configure
517
- * 3. Generates config files for each selected tool
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
- : `${SYMLINK_NAME}/library`;
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('Error: skill sources not found. Run "super unlock" first.');
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
 
@@ -222,7 +222,9 @@ function diffCommand(args, config) {
222
222
  if (fs.existsSync(localSkills)) {
223
223
  skillsDir = localSkills;
224
224
  } else {
225
- tui.error('Skills directory not found. Run "bi-superpowers unlock" first.');
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
  }
@@ -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 proteger
10
- * contenido licenciado. Un usuario podría copiarlos manualmente, pero
11
- * no se commitean al repo del proyecto por accidente.
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
- * Nota: este comando NO requiere licencia. Los skills son gratis de
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
@@ -345,7 +345,9 @@ function lintCommand(args, config) {
345
345
  if (fs.existsSync(localSkills)) {
346
346
  skillsDir = localSkills;
347
347
  } else {
348
- tui.error('Skills directory not found. Run "bi-superpowers unlock" first.');
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
  }
@@ -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. Run "bi-superpowers unlock" first.');
300
+ tui.error('Library not found. Try reinstalling: npm install -g @luquimbo/bi-superpowers');
301
301
  process.exit(1);
302
302
  }
303
303
  }
@@ -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('Skills directory not found. Run "bi-superpowers unlock" first.');
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