@chappibunny/repolens 1.2.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,20 @@
2
2
 
3
3
  All notable changes to RepoLens will be documented in this file.
4
4
 
5
+ ## 1.3.0
6
+
7
+ ### ✨ New Feature: `repolens demo`
8
+
9
+ - **Zero-config local preview**: New `demo` command generates documentation locally without any API keys or publisher configuration. Works on any repository, even without a `.repolens.yml` — uses sensible default scan patterns.
10
+ - **Instant onboarding**: Run `npx @chappibunny/repolens demo` on any repo to see what RepoLens generates. Output written to `.repolens/` directory.
11
+ - **Config-aware**: If a `.repolens.yml` exists, demo uses it. Otherwise, defaults to scanning common source patterns (`js`, `ts`, `py`, `go`, `rs`, `java`, etc.) with standard ignore paths.
12
+
13
+ ### 📝 Documentation
14
+
15
+ - Added demo command to all documentation: README, STABILITY, ROADMAP, copilot-instructions
16
+ - Added "Quick Preview" section to README usage guide
17
+ - Updated all version references to 1.3.0
18
+
5
19
  ## 1.2.0
6
20
 
7
21
  ### ✨ Config Migration
package/README.md CHANGED
@@ -16,7 +16,7 @@
16
16
 
17
17
  AI-assisted documentation intelligence system that generates architecture docs for engineers AND readable system docs for stakeholders
18
18
 
19
- **Current Status**: v1.2.0 — Stable Release
19
+ **Current Status**: v1.3.0 — Stable Release
20
20
 
21
21
  RepoLens automatically generates and maintains living architecture documentation by analyzing your repository structure, extracting meaningful insights from your package.json, and creating visual dependency graphs. Run it once, or let it auto-update on every push.
22
22
 
@@ -230,7 +230,7 @@ npm link
230
230
  Install from a specific version:
231
231
 
232
232
  ```bash
233
- npm install https://github.com/CHAPIBUNNY/repolens/releases/download/v1.2.0/chappibunny-repolens-1.2.0.tgz
233
+ npm install https://github.com/CHAPIBUNNY/repolens/releases/download/v1.3.0/chappibunny-repolens-1.3.0.tgz
234
234
  ```
235
235
  </details>
236
236
 
@@ -656,6 +656,15 @@ Error: Process completed with exit code 1.
656
656
 
657
657
  See [MIGRATION.md](MIGRATION.md) for detailed upgrade guide.
658
658
 
659
+ ### Quick Preview (No API Keys)
660
+
661
+ Generate local documentation instantly — no Notion, Confluence, or GitHub tokens needed:
662
+ ```bash
663
+ npx @chappibunny/repolens demo
664
+ ```
665
+
666
+ Works on any repo, even without a `.repolens.yml`. Output is written to `.repolens/`.
667
+
659
668
  ### Get Help
660
669
 
661
670
  ```bash
@@ -1106,7 +1115,7 @@ Simulates the full user installation experience:
1106
1115
  npm pack
1107
1116
 
1108
1117
  # Install globally from tarball
1109
- npm install -g chappibunny-repolens-1.2.0.tgz
1118
+ npm install -g chappibunny-repolens-1.3.0.tgz
1110
1119
 
1111
1120
  # Verify
1112
1121
  repolens --version
@@ -1230,11 +1239,11 @@ See [RELEASE.md](./RELEASE.md) for detailed workflow.
1230
1239
 
1231
1240
  ## 🗺️ Roadmap
1232
1241
 
1233
- **Current Status:** v1.2.0 — Stable Release
1242
+ **Current Status:** v1.3.0 — Stable Release
1234
1243
 
1235
1244
  ### v1.0 — Complete ✅
1236
1245
 
1237
- - [x] CLI commands: `init`, `doctor`, `publish`, `migrate`, `watch`, `feedback`, `version`, `help`
1246
+ - [x] CLI commands: `init`, `doctor`, `publish`, `demo`, `migrate`, `watch`, `feedback`, `version`, `help`
1238
1247
  - [x] Config schema v1 with validation (frozen)
1239
1248
  - [x] Auto-discovery of `.repolens.yml`
1240
1249
  - [x] Publishers: Notion + Confluence + GitHub Wiki + Markdown
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chappibunny/repolens",
3
- "version": "1.2.0",
3
+ "version": "1.3.0",
4
4
  "description": "AI-assisted documentation intelligence system for technical and non-technical audiences",
5
5
  "license": "MIT",
6
6
  "type": "module",
package/src/cli.js CHANGED
@@ -143,6 +143,7 @@ Commands:
143
143
  doctor Validate your RepoLens setup
144
144
  migrate Upgrade workflow files to current format
145
145
  publish Scan, render, and publish documentation
146
+ demo Generate local docs without API keys (quick preview)
146
147
  watch Watch for file changes and regenerate docs
147
148
  feedback Send feedback to the RepoLens team
148
149
  version Print the current RepoLens version
@@ -166,6 +167,7 @@ Examples:
166
167
  repolens migrate --dry-run # Preview changes without applying
167
168
  repolens publish # Auto-discovers .repolens.yml
168
169
  repolens publish --config /path/.repolens.yml # Explicit config path
170
+ repolens demo # Quick local preview (no API keys)
169
171
  repolens watch # Watch mode (Markdown only)
170
172
  repolens --version
171
173
  `);
@@ -424,6 +426,95 @@ async function main() {
424
426
  return;
425
427
  }
426
428
 
429
+ if (command === "demo") {
430
+ await printBanner();
431
+ info("Demo mode — generating local documentation (no API keys required)...");
432
+
433
+ const commandTimer = startTimer("demo");
434
+ const targetDir = getArg("--target") || process.cwd();
435
+
436
+ // Try to load existing config, otherwise use sensible defaults
437
+ let cfg;
438
+ try {
439
+ const configPath = getArg("--config") || await findConfig();
440
+ info(`Using config: ${configPath}`);
441
+ cfg = await loadConfig(configPath);
442
+ } catch {
443
+ info("No .repolens.yml found — using default scan patterns");
444
+ cfg = {
445
+ configVersion: 1,
446
+ project: { name: path.basename(targetDir) },
447
+ publishers: ["markdown"],
448
+ scan: {
449
+ include: ["**/*.{js,ts,jsx,tsx,mjs,cjs,py,go,rs,java,rb,php,cs,swift,kt}"],
450
+ ignore: ["**/node_modules/**", "**/dist/**", "**/build/**", "**/.git/**", "**/vendor/**", "**/target/**", "**/__pycache__/**"],
451
+ },
452
+ module_roots: ["src", "lib", "app", "packages"],
453
+ outputs: {
454
+ pages: [
455
+ { key: "system_overview", title: "System Overview" },
456
+ { key: "module_catalog", title: "Module Catalog" },
457
+ { key: "api_surface", title: "API Surface" },
458
+ { key: "route_map", title: "Route Map" },
459
+ { key: "system_map", title: "System Map" },
460
+ { key: "executive_summary", title: "Executive Summary" },
461
+ { key: "business_domains", title: "Business Domains" },
462
+ { key: "architecture_overview", title: "Architecture Overview" },
463
+ { key: "data_flows", title: "Data Flows" },
464
+ { key: "developer_onboarding", title: "Developer Onboarding" },
465
+ ],
466
+ },
467
+ __repoRoot: targetDir,
468
+ __configPath: path.join(targetDir, ".repolens.yml"),
469
+ };
470
+ }
471
+
472
+ try {
473
+ info("Scanning repository...");
474
+ const scanTimer = startTimer("scan");
475
+ const scan = await scanRepo(cfg);
476
+ stopTimer(scanTimer);
477
+ info(`Detected ${scan.modules?.length || 0} modules, ${scan.filesCount || 0} files`);
478
+
479
+ const rawDiff = getGitDiff("origin/main");
480
+
481
+ info("Generating documentation set...");
482
+ const renderTimer = startTimer("render");
483
+ const docSet = await generateDocumentSet(scan, cfg, rawDiff);
484
+ stopTimer(renderTimer);
485
+
486
+ info("Writing documentation to disk...");
487
+ const writeResult = await writeDocumentSet(docSet, targetDir);
488
+
489
+ const totalDuration = stopTimer(commandTimer);
490
+
491
+ info(`\n✓ Generated ${writeResult.documentCount} documents in ${writeResult.outputDir}`);
492
+ info("Browse your docs: open the .repolens/ directory");
493
+ info("\nTo publish to Notion, Confluence, or GitHub Wiki, run: repolens publish");
494
+
495
+ printPerformanceSummary();
496
+
497
+ trackUsage("demo", "success", {
498
+ duration: totalDuration,
499
+ fileCount: scan.filesCount || 0,
500
+ moduleCount: scan.modules?.length || 0,
501
+ documentCount: writeResult.documentCount,
502
+ usedConfig: Boolean(cfg.__configPath && cfg.__configPath !== path.join(targetDir, ".repolens.yml")),
503
+ });
504
+ } catch (err) {
505
+ stopTimer(commandTimer);
506
+ captureError(err, { command: "demo", targetDir });
507
+ trackUsage("demo", "failure");
508
+ error("Demo failed:");
509
+ error(err.message);
510
+ await closeTelemetry();
511
+ process.exit(EXIT_ERROR);
512
+ }
513
+
514
+ await closeTelemetry();
515
+ return;
516
+ }
517
+
427
518
  if (command === "feedback") {
428
519
  await printBanner();
429
520
  info("Send feedback to the RepoLens team");
@@ -470,7 +561,7 @@ async function main() {
470
561
  }
471
562
 
472
563
  error(`Unknown command: ${command}`);
473
- error("Available commands: init, doctor, migrate, publish, watch, feedback, version, help");
564
+ error("Available commands: init, doctor, migrate, publish, demo, watch, feedback, version, help");
474
565
  process.exit(EXIT_ERROR);
475
566
  }
476
567