commit-whisper 1.0.3 → 1.0.5

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 (3) hide show
  1. package/README.md +7 -0
  2. package/dist/index.js +18 -14
  3. package/package.json +4 -1
package/README.md CHANGED
@@ -8,6 +8,8 @@
8
8
  [![License](https://img.shields.io/github/license/georgiosnikitas/commit-whisper)](LICENSE)
9
9
  [![Buy Me a Coffee](https://img.shields.io/badge/Buy%20Me%20a%20Coffee-ffdd00?style=flat&logo=buy-me-a-coffee&logoColor=black)](https://buymeacoffee.com/georgiosnikitas)
10
10
 
11
+ > 🕵️ **I know what you did last commit.**
12
+
11
13
  Deterministic git history analysis with a grounded, bring-your-own-key AI narrative — a
12
14
  terminal-native CLI.
13
15
 
@@ -31,10 +33,15 @@ Report JSON.
31
33
  ### 🍺 Homebrew (macOS)
32
34
 
33
35
  ```bash
36
+ brew trust georgiosnikitas/commit-whisper
34
37
  brew tap georgiosnikitas/commit-whisper
35
38
  brew install commit-whisper
36
39
  ```
37
40
 
41
+ > The `brew trust` line is only required when your Homebrew enforces tap trust
42
+ > (`HOMEBREW_REQUIRE_TAP_TRUST`, available in Homebrew 6+). On a default setup you can skip
43
+ > it and run just the `brew tap` + `brew install` steps.
44
+
38
45
  ### 📦 From npm
39
46
 
40
47
  ```bash
package/dist/index.js CHANGED
@@ -1033,7 +1033,7 @@ function messageForError(err) {
1033
1033
 
1034
1034
  // src/cli/interactive.ts
1035
1035
  import { isCancel, multiselect as clackMultiselect, select as clackSelect, text as clackText } from "@clack/prompts";
1036
- var LAUNCHPAD_TAGLINE = "commit-whisper \xB7 I know what you did last commit";
1036
+ var LAUNCHPAD_TAGLINE = "commit-whisper \xB7 \u{1F575}\uFE0F I know what you did last commit";
1037
1037
  var FLAGS_CHEATSHEET = [
1038
1038
  "Common commands:",
1039
1039
  " commit-whisper . analyze the current repository",
@@ -1116,38 +1116,42 @@ function buildLaunchpadOptions(state) {
1116
1116
  options.push({ value: "quit", label: "Quit", hint: "esc" });
1117
1117
  return options;
1118
1118
  }
1119
+ var STATUS_LABEL_WIDTH = 12;
1120
+ function statusLabel(text) {
1121
+ return text.padEnd(STATUS_LABEL_WIDTH);
1122
+ }
1119
1123
  function reachabilityLine(reachability) {
1120
1124
  switch (reachability.kind) {
1121
1125
  case "reachable":
1122
- return " status \u2713 reachable";
1126
+ return `${statusLabel(" status")}\u2713 reachable`;
1123
1127
  case "unreachable":
1124
- return ` status \u26A0 unreachable \u2014 ${reachability.reason}`;
1128
+ return `${statusLabel(" status")}\u26A0 unreachable \u2014 ${reachability.reason}`;
1125
1129
  default:
1126
- return " status \u26A0 not configured";
1130
+ return `${statusLabel(" status")}\u26A0 not configured`;
1127
1131
  }
1128
1132
  }
1129
1133
  function aiBlock(state, reachability) {
1130
- return [`AI ${aiSegment(state)}`, reachabilityLine(reachability)];
1134
+ return [`${statusLabel("AI")}${aiSegment(state)}`, reachabilityLine(reachability)];
1131
1135
  }
1132
1136
  function environmentBlock(envVars) {
1133
- const lines = ["Environment"];
1134
- for (const v of envVars) {
1135
- const mark = v.set ? "\u2713" : "\u2717";
1137
+ const prefixes = envVars.map((v) => ` ${v.set ? "\u2713" : "\u2717"} ${v.name}`);
1138
+ const stateColumn = Math.max(0, ...prefixes.map((p) => p.length)) + 2;
1139
+ const rows = envVars.map((v, i) => {
1136
1140
  const state = v.set ? "set" : "missing";
1137
1141
  const note = v.note === void 0 ? "" : ` (${v.note})`;
1138
- lines.push(` ${mark} ${v.name} ${state}${note}`);
1139
- }
1140
- return lines;
1142
+ return `${prefixes[i].padEnd(stateColumn)}${state}${note}`;
1143
+ });
1144
+ return ["Environment", ...rows];
1141
1145
  }
1142
1146
  function repositoryLine(state) {
1143
- return state.isRepo ? `Repository \u2713 ${cwdSegment(state)}` : "Repository \u2014 not a git repo";
1147
+ return state.isRepo ? `${statusLabel("Repository")}\u2713 ${cwdSegment(state)}` : `${statusLabel("Repository")}\u2014 not a git repo`;
1144
1148
  }
1145
1149
  function formatStatusReport(state, envVars, reachability) {
1146
1150
  const capNote = state.tier === "free" ? " 100-commit cap" : "";
1147
1151
  const lines = [
1148
1152
  "Status / doctor",
1149
1153
  "",
1150
- `License ${TIER_LABEL[state.tier]}${capNote}`,
1154
+ `${statusLabel("License")}${TIER_LABEL[state.tier]}${capNote}`,
1151
1155
  ...aiBlock(state, reachability),
1152
1156
  ...environmentBlock(envVars),
1153
1157
  repositoryLine(state)
@@ -5233,7 +5237,7 @@ function formatShowConfig(config, secrets) {
5233
5237
  }
5234
5238
 
5235
5239
  // src/cli/version.ts
5236
- var VERSION = "1.0.3";
5240
+ var VERSION = "1.0.5";
5237
5241
 
5238
5242
  // src/cli/cli.ts
5239
5243
  var PROVIDERS3 = ["ollama", "openai", "gemini", "anthropic", "openai-compatible"];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "commit-whisper",
3
- "version": "1.0.3",
3
+ "version": "1.0.5",
4
4
  "description": "Deterministic git history analysis with a grounded, BYOK AI narrative — terminal-native CLI.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -63,5 +63,8 @@
63
63
  "typescript": "6.0.3",
64
64
  "typescript-eslint": "8.61.0",
65
65
  "vitest": "4.1.8"
66
+ },
67
+ "overrides": {
68
+ "esbuild": "^0.28.1"
66
69
  }
67
70
  }