@snelusha/noto 1.0.4 → 1.0.6

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/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  <h1 align="center">noto ✨</h1>
2
2
  <p align="center"><sup>(/nōto/, <em>notebook</em> in Japanese)</sup></p>
3
- <img src="https://github.com/snelusha/static/blob/main/noto/banner.png?raw=true" align="center"></img>
3
+ <img src="https://github.com/snelusha/static/blob/main/noto/banner-sharp.png?raw=true" align="center"></img>
4
4
 
5
5
  ## Features
6
6
 
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  // src/index.ts
2
2
  import * as p6 from "@clack/prompts";
3
- import color6 from "picocolors";
3
+ import color7 from "picocolors";
4
4
 
5
5
  // src/utils/parser.ts
6
6
  import arg from "arg";
@@ -64,7 +64,8 @@ var AvailableModelsSchema = z.enum([
64
64
  "gemini-1.5-pro-latest",
65
65
  "gemini-2.0-flash-lite-preview-02-05",
66
66
  "gemini-2.0-flash-exp",
67
- "gemini-2.0-pro-exp-02-05"
67
+ "gemini-2.0-pro-exp-02-05",
68
+ "gemini-2.5-pro-exp-03-25"
68
69
  ]);
69
70
 
70
71
  // src/utils/storage.ts
@@ -153,10 +154,26 @@ import dedent2 from "dedent";
153
154
 
154
155
  // src/utils/git.ts
155
156
  import simpleGit from "simple-git";
157
+ var INIT_COMMIT_MESSAGE = "chore: init repo";
156
158
  var git = simpleGit();
157
159
  var isGitRepository = async () => {
158
160
  return git.checkIsRepo();
159
161
  };
162
+ var getCommitCount = async () => {
163
+ try {
164
+ const count = await git.raw(["rev-list", "--all", "--count"]);
165
+ return parseInt(count);
166
+ } catch (error) {
167
+ const message = error.message;
168
+ const regex = /(ambiguous argument.*HEAD|unknown revision or path.*HEAD)/;
169
+ if (regex.test(message)) return 0;
170
+ throw error;
171
+ }
172
+ };
173
+ var isFirstCommit = async () => {
174
+ const count = await getCommitCount();
175
+ return count === 0;
176
+ };
160
177
  var getStagedDiff = async () => {
161
178
  try {
162
179
  return git.diff(["--cached"]);
@@ -234,7 +251,8 @@ var models = {
234
251
  "gemini-2.0-flash-lite-preview-02-05"
235
252
  ),
236
253
  "gemini-2.0-flash-exp": google("gemini-2.0-flash-exp"),
237
- "gemini-2.0-pro-exp-02-05": google("gemini-2.0-pro-exp-02-05")
254
+ "gemini-2.0-pro-exp-02-05": google("gemini-2.0-pro-exp-02-05"),
255
+ "gemini-2.5-pro-exp-03-25": google("gemini-2.5-pro-exp-03-25")
238
256
  };
239
257
  var availableModels = Object.keys(models);
240
258
  var getModel = async () => {
@@ -362,7 +380,12 @@ var command = {
362
380
  options.type = type;
363
381
  }
364
382
  spin.start("generating commit message");
365
- let message = await generateCommitMessage(diff, options.type);
383
+ let message = null;
384
+ if (!await isFirstCommit()) {
385
+ message = await generateCommitMessage(diff, options.type);
386
+ } else {
387
+ message = INIT_COMMIT_MESSAGE;
388
+ }
366
389
  spin.stop(isEditMode ? color3.white(message) : color3.green(message));
367
390
  if (isEditMode) {
368
391
  const editedMessage = await p3.text({
@@ -553,6 +576,15 @@ var model = {
553
576
  p5.log.error(color5.red("nothing changed!"));
554
577
  return await exit(1);
555
578
  }
579
+ if (model2 === "gemini-2.5-pro-exp-03-25") {
580
+ const confirm2 = await p5.confirm({
581
+ message: "this model has a rate limit of 5 RPM (requests per minute) 50 requests per day, do you want to continue?"
582
+ });
583
+ if (p5.isCancel(confirm2) || !confirm2) {
584
+ p5.log.error(color5.red("nothing changed!"));
585
+ return await exit(1);
586
+ }
587
+ }
556
588
  await StorageManager.update((current) => ({
557
589
  ...current,
558
590
  llm: {
@@ -609,14 +641,51 @@ var command3 = {
609
641
  };
610
642
  var config_default = command3;
611
643
 
644
+ // src/commands/help.ts
645
+ import color6 from "picocolors";
646
+ var help = {
647
+ name: "help",
648
+ description: "show help",
649
+ usage: "noto help [command]",
650
+ execute: async (options) => {
651
+ const command4 = getCommand(options._[0]);
652
+ if (command4) {
653
+ console.log();
654
+ console.log(color6.bold("Usage"));
655
+ console.log(` ${command4.usage}`);
656
+ console.log();
657
+ console.log(color6.bold("Description"));
658
+ console.log(` ${command4.description}`);
659
+ console.log();
660
+ } else {
661
+ const commands2 = listCommand();
662
+ console.log();
663
+ console.log(color6.bold("Usage"));
664
+ console.log(` noto [command] [options]`);
665
+ console.log();
666
+ console.log(color6.bold("Commands"));
667
+ commands2.forEach((command5) => {
668
+ console.log(
669
+ ` ${color6.bold(command5.name)} ${color6.dim(command5.description)}`
670
+ );
671
+ });
672
+ console.log();
673
+ }
674
+ }
675
+ };
676
+ var help_default = help;
677
+
612
678
  // src/commands/index.ts
613
- var commands = [noto_default, prev_default, config_default];
679
+ var commands = [noto_default, prev_default, config_default, help_default];
614
680
  var getCommand = (name, cmds = commands) => {
615
681
  return cmds.find((cmd) => cmd.name === name);
616
682
  };
683
+ var listCommand = () => {
684
+ return commands;
685
+ };
617
686
 
618
687
  // package.json
619
- var version = "1.0.4";
688
+ var version = "1.0.6";
620
689
 
621
690
  // src/index.ts
622
691
  var globalSpec = {
@@ -629,8 +698,12 @@ function main() {
629
698
  const args = process.argv.slice(2);
630
699
  const { command: command4, options: globalOptions } = parse(globalSpec, args);
631
700
  console.log();
632
- p6.intro(`${color6.bgCyan(color6.black(" @snelusha/noto "))}`);
701
+ p6.intro(`${color7.bgCyan(color7.black(" @snelusha/noto "))}`);
633
702
  if (globalOptions["--version"]) return p6.outro(version);
703
+ if (globalOptions["--help"]) {
704
+ getCommand("help")?.execute(globalOptions);
705
+ return;
706
+ }
634
707
  const cmd = getCommand(command4) ?? getCommand("noto");
635
708
  if (!cmd) return getCommand("noto")?.execute(globalOptions);
636
709
  let commandArgs = args;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@snelusha/noto",
3
- "version": "1.0.4",
3
+ "version": "1.0.6",
4
4
  "description": "Generate clean commit messages in a snap! ✨",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -9,10 +9,11 @@
9
9
  "email": "hello@snelusha.dev",
10
10
  "url": "https://snelusha.dev"
11
11
  },
12
- "homepage": "https://github.com/snelusha/noto",
12
+ "homepage": "https://noto.snelusha.dev",
13
13
  "repository": {
14
14
  "type": "git",
15
- "url": "git+https://github.com/snelusha/noto.git"
15
+ "url": "git+https://github.com/snelusha/noto.git",
16
+ "directory": "packages/cli"
16
17
  },
17
18
  "bugs": {
18
19
  "url": "https://github.com/snelusha/noto/issues"
@@ -41,21 +42,21 @@
41
42
  "cli"
42
43
  ],
43
44
  "devDependencies": {
44
- "@types/node": "^22.13.10",
45
+ "@types/node": "^22.13.13",
45
46
  "tsup": "^8.4.0",
46
47
  "typescript": "^5.8.2"
47
48
  },
48
49
  "dependencies": {
49
- "@ai-sdk/google": "^1.1.25",
50
+ "@ai-sdk/google": "^1.2.3",
50
51
  "@clack/prompts": "^0.10.0",
51
- "ai": "^4.1.61",
52
+ "ai": "^4.2.5",
52
53
  "arg": "^5.0.2",
53
54
  "clipboardy": "^4.0.0",
54
55
  "dedent": "^1.5.3",
55
56
  "picocolors": "^1.1.1",
56
57
  "simple-git": "^3.27.0",
57
58
  "tinyexec": "^0.3.2",
58
- "vitest": "^3.0.8",
59
+ "vitest": "^3.0.9",
59
60
  "zod": "^3.24.2"
60
61
  }
61
62
  }