From 9bccc69ef0dde60aa07e10b32d8b07c86b231b72 Mon Sep 17 00:00:00 2001 From: NiveditJain Date: Mon, 6 Apr 2026 22:19:11 +0000 Subject: [PATCH 1/2] feat: show unknown flag error with closest-match suggestion, bump to 0.0.1-beta.2 Unknown flags no longer silently fall through to dashboard launch. The CLI now prints the unrecognized flag and suggests the closest known flag via Levenshtein distance, then exits with code 1. Co-Authored-By: Claude Sonnet 4.6 --- bin/failproofai.mjs | 31 +++++++++++++++++++++++++++++++ package.json | 2 +- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/bin/failproofai.mjs b/bin/failproofai.mjs index e6f4d0e7..9295f2cc 100644 --- a/bin/failproofai.mjs +++ b/bin/failproofai.mjs @@ -89,6 +89,37 @@ if (args.includes("--list-policies")) { process.exit(0); } +// Unknown flag guard — must appear after all known-flag branches +const knownFlags = ["--version", "-v", "--hook", "--install-policies", + "--remove-policies", "--list-policies"]; +const unknownFlag = args.find(a => a.startsWith("-") && !knownFlags.includes(a)); + +if (unknownFlag) { + function levenshtein(a, b) { + const m = a.length, n = b.length; + const dp = Array.from({ length: m + 1 }, (_, i) => + Array.from({ length: n + 1 }, (_, j) => (i === 0 ? j : j === 0 ? i : 0)) + ); + for (let i = 1; i <= m; i++) + for (let j = 1; j <= n; j++) + dp[i][j] = a[i - 1] === b[j - 1] + ? dp[i - 1][j - 1] + : 1 + Math.min(dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]); + return dp[m][n]; + } + + const primary = ["--version", "--hook", "--install-policies", + "--remove-policies", "--list-policies"]; + const closest = primary.reduce((best, flag) => { + const dist = levenshtein(unknownFlag, flag); + return dist < best.dist ? { flag, dist } : best; + }, { flag: primary[0], dist: Infinity }); + + console.error(`Unknown flag: ${unknownFlag}`); + console.error(`Did you mean: ${closest.flag}?`); + process.exit(1); +} + // Dashboard launch — always production mode const { launch } = await import("../scripts/launch"); launch("start"); diff --git a/package.json b/package.json index 40023c3b..1893526a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "failproofai", - "version": "0.0.1-beta.1", + "version": "0.0.1-beta.2", "description": "Open-source hooks, policies, and project visualization for Claude Code & Agents SDK", "bin": { "failproofai": "./bin/failproofai.mjs" From ad8f9dceb03e9de8f2de1cb2c6183f9bcf5bce82 Mon Sep 17 00:00:00 2001 From: NiveditJain Date: Tue, 7 Apr 2026 00:30:49 +0000 Subject: [PATCH 2/2] fix: mark bin/failproofai.mjs as executable Co-Authored-By: Claude Sonnet 4.6 --- bin/failproofai.mjs | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 bin/failproofai.mjs diff --git a/bin/failproofai.mjs b/bin/failproofai.mjs old mode 100644 new mode 100755