flamerjs 1.1.2 → 1.1.4

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
@@ -4,6 +4,22 @@ All notable changes to flamer are recorded here. The format follows
4
4
  [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and this project
5
5
  adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [1.1.4] - 2026-10-24
8
+
9
+ ### Added
10
+
11
+ - Added `--verbose` output with the CLI version, repository name, selected
12
+ backend, scan path, file and line counts, duration, and native fallback
13
+ details.
14
+
15
+ ## [1.1.3] - 2026-10-24
16
+
17
+ ### Fixed
18
+
19
+ - Standalone native installation now installs the CLI and both Rust/C++ workers.
20
+ - Native workers are discovered automatically from the platform cache.
21
+ - Added Windows PowerShell installation and checksum verification.
22
+
7
23
  ## [1.0.0] - 2026-10-24
8
24
 
9
25
  ### Added
@@ -139,7 +155,8 @@ Measured on a 3.0 GB monorepo of 98,161 files, 71,150 of them source:
139
155
  - `poison` is a separate project. Flamer does not import it, and the handoff is
140
156
  a runtime capability check in `SKILL.md` rather than a code dependency.
141
157
 
142
- [Unreleased]: https://github.com/dummy3ye/flamer/compare/v1.1.2...HEAD
158
+ [Unreleased]: https://github.com/dummy3ye/flamer/compare/v1.1.3...HEAD
159
+ [1.1.3]: https://github.com/dummy3ye/flamer/releases/tag/v1.1.3
143
160
  [1.1.2]: https://github.com/dummy3ye/flamer/releases/tag/v1.1.2
144
161
  [1.1.1]: https://github.com/dummy3ye/flamer/releases/tag/v1.1.1
145
162
  [1.1.0]: https://github.com/dummy3ye/flamer/releases/tag/v1.1.0
package/README.md CHANGED
@@ -4,11 +4,10 @@
4
4
 
5
5
  [![CI](https://img.shields.io/github/actions/workflow/status/dummy3ye/flamer/ci.yml?branch=master&style=for-the-badge&label=CI&labelColor=101418&color=9ccbfb)](https://github.com/dummy3ye/flamer/actions/workflows/ci.yml)
6
6
  [![Coverage](https://img.shields.io/codecov/c/github/dummy3ye/flamer?style=for-the-badge&label=coverage&labelColor=101418&color=b9c8da)](https://codecov.io/gh/dummy3ye/flamer)
7
- [![npm](https://img.shields.io/npm/v/flamerjs?style=for-the-badge&labelColor=101418&color=d3bfe6)](https://www.npmjs.com/package/flamerjs)<br>
7
+ [![GitHub repo size](https://img.shields.io/github/repo-size/dummy3ye/flamer?style=for-the-badge&labelColor=101418&color=d3bfe6)](https://github.com/dummy3ye/flamer)<br>
8
8
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?style=for-the-badge&labelColor=101418&color=d3bfe6)](LICENSE)
9
9
  [![GitHub last commit](https://img.shields.io/github/last-commit/dummy3ye/flamer?style=for-the-badge&labelColor=101418&color=9ccbfb)](https://github.com/dummy3ye/flamer/commits/master)
10
- [![GitHub Repo stars](https://img.shields.io/github/stars/dummy3ye/flamer?style=for-the-badge&labelColor=101418&color=b9c8da)](https://github.com/dummy3ye/flamer/stargazers)
11
- [![GitHub repo size](https://img.shields.io/github/repo-size/dummy3ye/flamer?style=for-the-badge&labelColor=101418&color=d3bfe6)](https://github.com/dummy3ye/flamer)
10
+ [![npm](https://img.shields.io/npm/v/flamerjs?style=for-the-badge&labelColor=101418&color=d3bfe6)](https://www.npmjs.com/package/flamerjs)
12
11
 
13
12
  Flamer scans a repository for the common mistakes that appear when software is
14
13
  assembled quickly with AI or other “vibe coding” workflows: unfinished
@@ -124,6 +123,7 @@ flamerjs [path] [options]
124
123
  | `--no-lockfile-warning` | Suppress the missing-lockfile suggestion |
125
124
  | `--ignore-dir <name>` | Ignore an additional directory name; repeatable |
126
125
  | `--quiet` | Suppress the human summary |
126
+ | `--verbose` | Show CLI version, runtime backend, and scan details |
127
127
  | `--color` | Force ANSI colors |
128
128
  | `--no-color` | Disable ANSI colors |
129
129
  | `--engine <all\|typescript\|rust\|cpp>` | Run all engines (default) or select one engine |
@@ -215,11 +215,20 @@ For the source installation path:
215
215
  curl -fsSL https://raw.githubusercontent.com/dummy3ye/flamer/master/scripts/install.sh | sh
216
216
  ```
217
217
 
218
- Platform-specific native release binaries are not bundled in the current npm
219
- package yet. The npm package uses optional native packages when they are
220
- published for the current platform; if npm skips them, TypeScript fallback is
221
- automatic. The installer's `native` path is reserved for standalone releases
222
- that attach those assets.
218
+ The npm package uses optional native packages when they are published for the
219
+ current platform; if npm skips them, TypeScript fallback is automatic. To
220
+ install the CLI plus standalone Rust and C++ release workers on Unix-like
221
+ systems:
222
+
223
+ ```bash
224
+ FLAMER_VERSION=1.1.3 \
225
+ sh -c 'curl -fsSL https://raw.githubusercontent.com/dummy3ye/flamer/master/scripts/install.sh | sh -s -- native'
226
+ flamer .
227
+ ```
228
+
229
+ On Windows, run `scripts/install.ps1` from the repository or download it from
230
+ the tagged source tree. Both installers verify SHA-256 checksums and place the
231
+ two workers in the Flamer native cache.
223
232
 
224
233
  ## How it works
225
234
 
package/dist/cli.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  // src/cli.ts
4
- import { writeFileSync, existsSync as existsSync4 } from "fs";
4
+ import { writeFileSync, existsSync as existsSync4, readFileSync as readFileSync2 } from "fs";
5
5
  import { resolve, basename } from "path";
6
6
 
7
7
  // src/util/fs.ts
@@ -2907,6 +2907,7 @@ import { spawn } from "child_process";
2907
2907
  import { existsSync as existsSync3 } from "fs";
2908
2908
  import { join as join6 } from "path";
2909
2909
  import { createRequire } from "module";
2910
+ import { homedir } from "os";
2910
2911
  var require2 = createRequire(import.meta.url);
2911
2912
  function nativePackageName() {
2912
2913
  const platform = `${process.platform}-${process.arch}`;
@@ -2929,12 +2930,27 @@ function packagedWorkerPath(worker) {
2929
2930
  return null;
2930
2931
  }
2931
2932
  }
2933
+ function downloadedWorkerPath(worker) {
2934
+ const directory = process.env.FLAMER_NATIVE_DIR || join6(
2935
+ process.env.XDG_CACHE_HOME || (process.platform === "win32" ? process.env.LOCALAPPDATA || join6(homedir(), "AppData", "Local") : join6(homedir(), ".cache")),
2936
+ "flamer",
2937
+ "bin"
2938
+ );
2939
+ const extension = process.platform === "win32" ? ".exe" : "";
2940
+ const platform = `${process.platform}-${process.arch}`;
2941
+ return join6(
2942
+ directory,
2943
+ worker === "rust" ? `flamer-core-rust-${platform}${extension}` : `flamer-core-cpp-${platform}${extension}`
2944
+ );
2945
+ }
2932
2946
  function nativeWorkerPath(root, worker) {
2933
2947
  const configured = worker === "rust" ? process.env.FLAMER_RUST_CORE : process.env.FLAMER_CPP_CORE;
2934
2948
  if (configured) return configured;
2935
2949
  if (process.env.FLAMER_CORE && worker === "rust") return process.env.FLAMER_CORE;
2936
2950
  const packaged = packagedWorkerPath(worker);
2937
2951
  if (packaged) return packaged;
2952
+ const downloaded = downloadedWorkerPath(worker);
2953
+ if (existsSync3(downloaded)) return downloaded;
2938
2954
  return worker === "rust" ? join6(root, "native", "core", "rust", "target", "release", "flamer-core") : join6(root, "native", "core", "cpp", "build", "flamer-core-cpp");
2939
2955
  }
2940
2956
  function runNativeWorker(root, files, worker, operation = "file_metrics") {
@@ -2987,6 +3003,7 @@ function runNativeWorker(root, files, worker, operation = "file_metrics") {
2987
3003
 
2988
3004
  // src/cli.ts
2989
3005
  var SPEC_VERSION = 1;
3006
+ var CLI_VERSION = JSON.parse(readFileSync2(new URL("../package.json", import.meta.url), "utf8")).version;
2990
3007
  function parseArgs(argv) {
2991
3008
  const opts = {
2992
3009
  root: process.cwd(),
@@ -2998,6 +3015,7 @@ function parseArgs(argv) {
2998
3015
  noGit: false,
2999
3016
  noLockfileWarning: false,
3000
3017
  quiet: false,
3018
+ verbose: false,
3001
3019
  scope: null,
3002
3020
  listLanguages: false,
3003
3021
  help: false,
@@ -3042,6 +3060,9 @@ function parseArgs(argv) {
3042
3060
  case "--quiet":
3043
3061
  opts.quiet = true;
3044
3062
  break;
3063
+ case "--verbose":
3064
+ opts.verbose = true;
3065
+ break;
3045
3066
  case "--color":
3046
3067
  opts.color = true;
3047
3068
  break;
@@ -3095,6 +3116,7 @@ Options:
3095
3116
  --no-lockfile-warning skip the "no lockfile" suggestion
3096
3117
  --ignore-dir <name> also skip this directory name (repeatable)
3097
3118
  --quiet suppress the human summary
3119
+ --verbose show runtime engine and scan details
3098
3120
  --color force ANSI colors
3099
3121
  --no-color disable ANSI colors
3100
3122
  --engine <all|typescript|rust|cpp>
@@ -3363,13 +3385,50 @@ function severityColor(severity) {
3363
3385
  function severityIcon(severity) {
3364
3386
  return severity === "LOW" ? "\xB7" : severity === "INFO" ? "i" : "!";
3365
3387
  }
3366
- function printSummary(report, forceColor) {
3388
+ function printVerbose(report, forceColor) {
3389
+ const enabled = colorEnabled(forceColor);
3390
+ const native = report.metadata.native;
3391
+ let backend = "typescript";
3392
+ let backendDetail = "TypeScript analyzers";
3393
+ if (native?.fallback) {
3394
+ backendDetail = "TypeScript fallback";
3395
+ } else if (native?.engine === "all") {
3396
+ backend = "rust + cpp";
3397
+ backendDetail = "Rust and C++ workers";
3398
+ } else if (native?.engine === "rust") {
3399
+ backend = "rust";
3400
+ backendDetail = "Rust worker";
3401
+ } else if (native?.engine === "cpp") {
3402
+ backend = "cpp";
3403
+ backendDetail = "C++ worker";
3404
+ }
3405
+ const p = report.project;
3406
+ const lines = [
3407
+ "",
3408
+ ` ${paint(`flamer.js v${CLI_VERSION}`, ANSI.bold + ANSI.cyan, enabled)} ${paint(p.name, ANSI.bold, enabled)}`,
3409
+ ` ${paint("cli", ANSI.dim, enabled)} : typescript`,
3410
+ ` ${paint("backend", ANSI.dim, enabled)} : ${backend}`,
3411
+ ` ${paint("details", ANSI.dim, enabled)} : ${backendDetail}`,
3412
+ ` ${paint("path", ANSI.dim, enabled)} : ${p.root || p.name}`,
3413
+ ` ${paint("files", ANSI.dim, enabled)} : ${(p.totalFiles || 0).toLocaleString()}`,
3414
+ ` ${paint("lines", ANSI.dim, enabled)} : ${(p.totalLines || 0).toLocaleString()}`,
3415
+ ` ${paint("duration", ANSI.dim, enabled)} : ${report.metadata.durationSeconds.toFixed(2)}s`
3416
+ ];
3417
+ if (native?.fallback) {
3418
+ lines.push(
3419
+ ` ${paint("fallback", ANSI.dim, enabled)} : ${[...new Set(native.fallback)].join("; ")}`
3420
+ );
3421
+ }
3422
+ process.stdout.write(lines.join("\n") + "\n");
3423
+ }
3424
+ function printSummary(report, forceColor, verbose = false) {
3367
3425
  const enabled = colorEnabled(forceColor);
3368
3426
  const p = report.project;
3369
3427
  const out = [];
3370
3428
  const width = 62;
3371
3429
  const duration = report.metadata.durationSeconds;
3372
3430
  out.push("");
3431
+ if (verbose) printVerbose(report, forceColor);
3373
3432
  out.push(
3374
3433
  ` ${paint("FLAMER", ANSI.bold + ANSI.cyan, enabled)} ${paint(p.name, ANSI.bold, enabled)}`
3375
3434
  );
@@ -3442,7 +3501,7 @@ async function main() {
3442
3501
  }
3443
3502
  }
3444
3503
  if (opts.format === "summary") {
3445
- if (!opts.quiet) printSummary(report, opts.color);
3504
+ if (!opts.quiet) printSummary(report, opts.color, opts.verbose);
3446
3505
  } else {
3447
3506
  process.stdout.write(json + "\n");
3448
3507
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "flamerjs",
3
- "version": "1.1.2",
3
+ "version": "1.1.4",
4
4
  "description": "Language-agnostic code health auditor that walks a repository once and reports what is wrong with it",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -27,12 +27,12 @@
27
27
  "docs/ARCHITECTURE.md"
28
28
  ],
29
29
  "optionalDependencies": {
30
- "@dummy3ye/flamer-native-darwin-arm64": "1.1.1",
31
- "@dummy3ye/flamer-native-darwin-x64": "1.1.1",
32
- "@dummy3ye/flamer-native-linux-arm64": "1.1.1",
33
- "@dummy3ye/flamer-native-linux-x64": "1.1.1",
34
- "@dummy3ye/flamer-native-win32-arm64": "1.1.1",
35
- "@dummy3ye/flamer-native-win32-x64": "1.1.1"
30
+ "@dummy3ye/flamer-native-darwin-arm64": "1.1.3",
31
+ "@dummy3ye/flamer-native-darwin-x64": "1.1.3",
32
+ "@dummy3ye/flamer-native-linux-arm64": "1.1.3",
33
+ "@dummy3ye/flamer-native-linux-x64": "1.1.3",
34
+ "@dummy3ye/flamer-native-win32-arm64": "1.1.3",
35
+ "@dummy3ye/flamer-native-win32-x64": "1.1.3"
36
36
  },
37
37
  "scripts": {
38
38
  "build": "tsup",