@snelusha/noto 1.3.4-beta.7 → 1.3.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.
Files changed (2) hide show
  1. package/dist/index.js +2 -2
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import{createCli as Ft}from"trpc-cli";var V="@snelusha/noto",S="1.3.4-beta.7";import wt from"node:fs/promises";import{initTRPC as bt}from"@trpc/server";import*as N from"@clack/prompts";import b from"picocolors";import le from"dedent";import Ze from"simple-git";var k=Ze(),W=async()=>{return k.checkIsRepo()},_=async()=>{try{return await k.revparse(["--show-toplevel"])}catch{return null}};var he=async(e=20,t=!1)=>{try{let a=t?{maxCount:e,"--no-merges":null}:{maxCount:e};return(await k.log(a)).all.map((r)=>r.message)}catch{return null}};var ye=async()=>{try{return k.diff(["--cached","--",":!*.lock"])}catch{return null}},F=async(e,t)=>{try{let a=t?{"--amend":null}:void 0,{summary:{changes:o}}=await k.commit(e,void 0,a);return Boolean(o)}catch{return!1}},we=async()=>{try{let e=await k.push();return e.update||e.pushed&&e.pushed.length>0}catch{return!1}},be=async()=>{try{return(await k.branch()).current}catch{return null}},ve=async(e)=>{try{let t=await k.branch();return e?t.all:Object.keys(t.branches).filter((a)=>!a.startsWith("remotes/"))}catch{return null}},re=async(e)=>{try{return await k.checkout(e,{}),!0}catch{return!1}},ie=async(e)=>{try{return await k.checkoutLocalBranch(e),!0}catch{return!1}};import*as G from"node:fs";import*as j from"node:path";import*as xe from"node:child_process";import se from"node:process";import et from"semver";var K=et.prerelease(S)!==null;async function Me(){let e=se.argv[1];if(!e)return{packageManager:"unknown",isGlobal:!1};let t=se.cwd();try{let a=G.realpathSync(e).replace(/\\/g,"/"),o=t.replace(/\\/g,"/");if(await W()&&o&&a.startsWith(o)&&!a.includes("/node_modules/"))return{packageManager:"unknown",isGlobal:!1,updateMessage:'Running from a local git clone. Please update with "git pull".'};if(a.includes("/.npm/_npx")||a.includes("/npm/_npx"))return{packageManager:"npx",isGlobal:!1,updateMessage:"Running via npx, update not applicable."};if(se.platform==="darwin")try{return xe.execSync('brew list -1 | grep -q "^noto$"',{stdio:"ignore"}),{packageManager:"homebrew",isGlobal:!0,updateMessage:'Installed via Homebrew. Please update with "brew upgrade".'}}catch{}if(a.includes("/pnpm/dlx")||a.includes("/pnpm-cache/dlx"))return{packageManager:"pnpx",isGlobal:!1,updateMessage:"Running via pnpx, update not applicable."};if(a.includes("/pnpm/global"))return{packageManager:"pnpm",isGlobal:!0,updateCommand:"pnpm add -g @snelusha/noto@latest",updateMessage:"Please run pnpm add -g @snelusha/noto@latest to update"};if(a.includes("/.yarn/global"))return{packageManager:"yarn",isGlobal:!0,updateCommand:"yarn global add @snelusha/noto@latest",updateMessage:"Please run yarn global add @snelusha/noto@latest to update"};if(a.includes("/bunx"))return{packageManager:"bunx",isGlobal:!1,updateMessage:"Running via bunx, update not applicable."};if(a.includes("/.bun/install/global"))return{packageManager:"bun",isGlobal:!0,updateCommand:"bun add -g @snelusha/noto@latest",updateMessage:"Please run bun add -g @snelusha/noto@latest to update"};if(o&&a.startsWith(`${o}/node_modules`)){let s="npm";if(G.existsSync(j.join(t,"yarn.lock")))s="yarn";else if(G.existsSync(j.join(t,"pnpm-lock.yaml")))s="pnpm";else if(G.existsSync(j.join(t,"bun.lockb"))||G.existsSync(j.join(t,"bun.lock")))s="bun";return{packageManager:s,isGlobal:!1,updateMessage:"Locally installed. Please update via your project's package.json."}}let n="npm install -g @snelusha/noto@latest";return{packageManager:"npm",isGlobal:!0,updateCommand:n,updateMessage:`Please run ${n} to update`}}catch{return{packageManager:"unknown",isGlobal:!1}}}import ot from"os";import{join as rt,resolve as it}from"path";import{z as L}from"zod";import{promises as Y}from"fs";import{dirname as tt}from"path";function H(e){let{schema:t,path:a}=e;return class{static storagePath=a;static storage={};static async load(){try{await Y.access(this.storagePath);let r=await Y.readFile(this.storagePath,"utf-8"),n=r?JSON.parse(r):{},s=t.safeParse(n);this.storage=s.success?s.data:{}}catch{this.storage={}}return this.storage}static async save(){try{let r=tt(this.storagePath);await Y.mkdir(r,{recursive:!0});let n=JSON.stringify(this.storage,null,2);await Y.writeFile(this.storagePath,n,"utf-8")}catch{}}static async update(r){try{await this.load();let n=await r(this.storage),s=t.safeParse(n);if(s.success)this.storage=s.data,await this.save()}catch{}return this.storage}static async get(){return await this.load(),JSON.parse(JSON.stringify(this.storage))}static async clear(){this.storage={},await this.save()}static get path(){return this.storagePath}static set path(r){this.storagePath=r}static get raw(){return this.storage}}}import{z as at}from"zod";var Ce=at.enum(["gemini-2.5-flash","gemini-2.5-flash-lite","gemini-2.5-pro","gemini-3-pro-preview"]);var st=L.object({llm:L.object({apiKey:L.string().optional(),model:Ce.optional().or(L.string())}).optional(),lastGeneratedMessage:L.string().optional()}),p=H({path:it(rt(ot.homedir(),".config","noto"),".notorc"),schema:st});async function ke(){try{let e=await p.get();await p.update(()=>e)}catch{}}import nt from"node:fs/promises";import U from"node:path";import{fileURLToPath as ct}from"node:url";var Pe=(e)=>e instanceof URL?ct(e):e;async function Se(e,t={}){let a=U.resolve(Pe(t.cwd??"")),{root:o}=U.parse(a);t.stopAt=U.resolve(Pe(t.stopAt??o));let r=U.isAbsolute(e);while(a){let n=r?e:U.join(a,e);try{let s=await nt.stat(n);if(t.type===void 0||t.type==="file"&&s.isFile()||t.type==="directory"&&s.isDirectory())return n}catch{}if(a===t.stopAt||a===o)break;a=U.dirname(a)}}var X=async()=>{let e=await _();return await Se(".noto/commit-prompt.md",{stopAt:e||process.cwd(),type:"file"})};import*as Ae from"@clack/prompts";import Re from"picocolors";import ht from"dedent";import w from"semver";import ne from"latest-version";import lt from"os";import{join as mt,resolve as pt}from"path";import{z as R}from"zod";var dt=R.object({commitGenerationCache:R.record(R.string(),R.string()).optional(),update:R.object({timestamp:R.number(),current:R.string(),latest:R.string()}).optional()}),A=H({path:pt(mt(lt.homedir(),".cache","noto"),"cache"),schema:dt});var ut=86400000;function gt(e,t){if(!e||!t)return e||t||null;let a=w.coerce(t)?.version,o=w.coerce(e)?.version;if(!a||!o)return e||t||null;return a===o||w.gt(o,a)?e:t}async function ce(e=!1,t=!1){let a=(await A.get()).update;if(!t&&a){if(w.valid(a.current)&&w.valid(a.latest)){let r=w.gte(a.current,a.latest),n=Date.now()-a.timestamp<ut;if(r||n)return{latest:a.latest,current:a.current,timestamp:a.timestamp}}}try{let r={latest:K?gt(...await Promise.all([ne(V,{version:"beta"}),ne(V)])):await ne(V),current:S,timestamp:Date.now()};if(e)await ft(r);return r}catch{if(a)return{latest:a.latest,current:a.current,timestamp:a.timestamp};return{latest:S,current:S,timestamp:Date.now()}}}async function ft(e){if(!e)return;await A.update((t)=>({...t,update:e&&{timestamp:e.timestamp,latest:e.latest,current:e.current}}))}async function J(e=!1,t=!1){let a=await ce(e,t);if(w.valid(a.current)&&w.valid(a.latest)){if(!w.gte(a.current,a.latest))return a}return null}async function yt(){let e=await J();if(e)Ae.log.warn(ht`A new version of noto is available: ${Re.dim(e.current)} → ${Re.green(e.latest)}
2
+ import{createCli as Ft}from"trpc-cli";var V="@snelusha/noto",S="1.3.4";import wt from"node:fs/promises";import{initTRPC as bt}from"@trpc/server";import*as N from"@clack/prompts";import b from"picocolors";import le from"dedent";import Ze from"simple-git";var k=Ze(),W=async()=>{return k.checkIsRepo()},_=async()=>{try{return await k.revparse(["--show-toplevel"])}catch{return null}};var he=async(e=20,t=!1)=>{try{let a=t?{maxCount:e,"--no-merges":null}:{maxCount:e};return(await k.log(a)).all.map((r)=>r.message)}catch{return null}};var ye=async()=>{try{return k.diff(["--cached","--",":!*.lock"])}catch{return null}},F=async(e,t)=>{try{let a=t?{"--amend":null}:void 0,{summary:{changes:o}}=await k.commit(e,void 0,a);return Boolean(o)}catch{return!1}},we=async()=>{try{let e=await k.push();return e.update||e.pushed&&e.pushed.length>0}catch{return!1}},be=async()=>{try{return(await k.branch()).current}catch{return null}},ve=async(e)=>{try{let t=await k.branch();return e?t.all:Object.keys(t.branches).filter((a)=>!a.startsWith("remotes/"))}catch{return null}},re=async(e)=>{try{return await k.checkout(e,{}),!0}catch{return!1}},ie=async(e)=>{try{return await k.checkoutLocalBranch(e),!0}catch{return!1}};import*as G from"node:fs";import*as j from"node:path";import*as xe from"node:child_process";import se from"node:process";import et from"semver";var K=et.prerelease(S)!==null;async function Me(){let e=se.argv[1];if(!e)return{packageManager:"unknown",isGlobal:!1};let t=se.cwd();try{let a=G.realpathSync(e).replace(/\\/g,"/"),o=t.replace(/\\/g,"/");if(await W()&&o&&a.startsWith(o)&&!a.includes("/node_modules/"))return{packageManager:"unknown",isGlobal:!1,updateMessage:'Running from a local git clone. Please update with "git pull".'};if(a.includes("/.npm/_npx")||a.includes("/npm/_npx"))return{packageManager:"npx",isGlobal:!1,updateMessage:"Running via npx, update not applicable."};if(se.platform==="darwin")try{return xe.execSync('brew list -1 | grep -q "^noto$"',{stdio:"ignore"}),{packageManager:"homebrew",isGlobal:!0,updateMessage:'Installed via Homebrew. Please update with "brew upgrade".'}}catch{}if(a.includes("/pnpm/dlx")||a.includes("/pnpm-cache/dlx"))return{packageManager:"pnpx",isGlobal:!1,updateMessage:"Running via pnpx, update not applicable."};if(a.includes("/pnpm/global"))return{packageManager:"pnpm",isGlobal:!0,updateCommand:"pnpm add -g @snelusha/noto@latest",updateMessage:"Please run pnpm add -g @snelusha/noto@latest to update"};if(a.includes("/.yarn/global"))return{packageManager:"yarn",isGlobal:!0,updateCommand:"yarn global add @snelusha/noto@latest",updateMessage:"Please run yarn global add @snelusha/noto@latest to update"};if(a.includes("/bunx"))return{packageManager:"bunx",isGlobal:!1,updateMessage:"Running via bunx, update not applicable."};if(a.includes("/.bun/install/global"))return{packageManager:"bun",isGlobal:!0,updateCommand:"bun add -g @snelusha/noto@latest",updateMessage:"Please run bun add -g @snelusha/noto@latest to update"};if(o&&a.startsWith(`${o}/node_modules`)){let s="npm";if(G.existsSync(j.join(t,"yarn.lock")))s="yarn";else if(G.existsSync(j.join(t,"pnpm-lock.yaml")))s="pnpm";else if(G.existsSync(j.join(t,"bun.lockb"))||G.existsSync(j.join(t,"bun.lock")))s="bun";return{packageManager:s,isGlobal:!1,updateMessage:"Locally installed. Please update via your project's package.json."}}let n="npm install -g @snelusha/noto@latest";return{packageManager:"npm",isGlobal:!0,updateCommand:n,updateMessage:`Please run ${n} to update`}}catch{return{packageManager:"unknown",isGlobal:!1}}}import ot from"os";import{join as rt,resolve as it}from"path";import{z as L}from"zod";import{promises as Y}from"fs";import{dirname as tt}from"path";function H(e){let{schema:t,path:a}=e;return class{static storagePath=a;static storage={};static async load(){try{await Y.access(this.storagePath);let r=await Y.readFile(this.storagePath,"utf-8"),n=r?JSON.parse(r):{},s=t.safeParse(n);this.storage=s.success?s.data:{}}catch{this.storage={}}return this.storage}static async save(){try{let r=tt(this.storagePath);await Y.mkdir(r,{recursive:!0});let n=JSON.stringify(this.storage,null,2);await Y.writeFile(this.storagePath,n,"utf-8")}catch{}}static async update(r){try{await this.load();let n=await r(this.storage),s=t.safeParse(n);if(s.success)this.storage=s.data,await this.save()}catch{}return this.storage}static async get(){return await this.load(),JSON.parse(JSON.stringify(this.storage))}static async clear(){this.storage={},await this.save()}static get path(){return this.storagePath}static set path(r){this.storagePath=r}static get raw(){return this.storage}}}import{z as at}from"zod";var Ce=at.enum(["gemini-2.5-flash","gemini-2.5-flash-lite","gemini-2.5-pro","gemini-3-pro-preview"]);var st=L.object({llm:L.object({apiKey:L.string().optional(),model:Ce.optional().or(L.string())}).optional(),lastGeneratedMessage:L.string().optional()}),p=H({path:it(rt(ot.homedir(),".config","noto"),".notorc"),schema:st});async function ke(){try{let e=await p.get();await p.update(()=>e)}catch{}}import nt from"node:fs/promises";import U from"node:path";import{fileURLToPath as ct}from"node:url";var Pe=(e)=>e instanceof URL?ct(e):e;async function Se(e,t={}){let a=U.resolve(Pe(t.cwd??"")),{root:o}=U.parse(a);t.stopAt=U.resolve(Pe(t.stopAt??o));let r=U.isAbsolute(e);while(a){let n=r?e:U.join(a,e);try{let s=await nt.stat(n);if(t.type===void 0||t.type==="file"&&s.isFile()||t.type==="directory"&&s.isDirectory())return n}catch{}if(a===t.stopAt||a===o)break;a=U.dirname(a)}}var X=async()=>{let e=await _();return await Se(".noto/commit-prompt.md",{stopAt:e||process.cwd(),type:"file"})};import*as Ae from"@clack/prompts";import Re from"picocolors";import ht from"dedent";import w from"semver";import ne from"latest-version";import lt from"os";import{join as mt,resolve as pt}from"path";import{z as R}from"zod";var dt=R.object({commitGenerationCache:R.record(R.string(),R.string()).optional(),update:R.object({timestamp:R.number(),current:R.string(),latest:R.string()}).optional()}),A=H({path:pt(mt(lt.homedir(),".cache","noto"),"cache"),schema:dt});var ut=86400000;function gt(e,t){if(!e||!t)return e||t||null;let a=w.coerce(t)?.version,o=w.coerce(e)?.version;if(!a||!o)return e||t||null;return a===o||w.gt(o,a)?e:t}async function ce(e=!1,t=!1){let a=(await A.get()).update;if(!t&&a){if(w.valid(a.current)&&w.valid(a.latest)){let r=w.gte(a.current,a.latest),n=Date.now()-a.timestamp<ut;if(r||n)return{latest:a.latest,current:a.current,timestamp:a.timestamp}}}try{let r={latest:K?gt(...await Promise.all([ne(V,{version:"beta"}),ne(V)])):await ne(V),current:S,timestamp:Date.now()};if(e)await ft(r);return r}catch{if(a)return{latest:a.latest,current:a.current,timestamp:a.timestamp};return{latest:S,current:S,timestamp:Date.now()}}}async function ft(e){if(!e)return;await A.update((t)=>({...t,update:e&&{timestamp:e.timestamp,latest:e.latest,current:e.current}}))}async function J(e=!1,t=!1){let a=await ce(e,t);if(w.valid(a.current)&&w.valid(a.latest)){if(!w.gte(a.current,a.latest))return a}return null}async function yt(){let e=await J();if(e)Ae.log.warn(ht`A new version of noto is available: ${Re.dim(e.current)} → ${Re.green(e.latest)}
3
3
  Please run \`noto upgrade\` to update`.trim())}var i=async(e,t=!0)=>{if(t)await yt();await new Promise((a)=>setTimeout(a,1)),console.log(),process.exit(e)};var $=bt.meta().create({defaultMeta:{intro:!0,authRequired:!0,repoRequired:!0,diffRequired:!1,promptRequired:!1}}),Ie=$.middleware(async(e)=>{let{meta:t,next:a}=e,o=await p.get(),r=process.env.NOTO_API_KEY||o.llm?.apiKey;if(t?.authRequired&&!r)return N.log.error(le`${b.red("noto api key is missing.")}
4
4
  ${b.dim(`run ${b.cyan("`noto config key`")} to set it up.`)}`),await i(1);return a()}),Ge=$.middleware(async(e)=>{let{meta:t,next:a}=e,o=await W();if(t?.repoRequired&&!o)return N.log.error(le`${b.red("no git repository found in cwd.")}
5
5
  ${b.dim(`run ${b.cyan("`git init`")} to initialize a new repository.`)}`),await i(1);let r=o&&await ye();if(t?.diffRequired&&!r)return N.log.error(le`${b.red("no staged changes found.")}
@@ -325,6 +325,6 @@ ${a}`:""}
325
325
  ${P.gray(n)}`),await i(1);if(a!==r&&!t.root){let y=await d.confirm({message:"do you want to create the prompt file in the git root?",initialValue:!0});if(d.isCancel(y))return d.log.error("aborted"),await i(1);if(!y)o=r}let h=await he(20,!0),l=t.generate;if(l){if(!h||h.length<5)return d.log.error(q`${P.red("not enough commits to generate a prompt file.")}
326
326
  ${P.gray("at least 5 commits are required.")}`),await i(1)}else if(h&&h.length>=5){let y=await d.confirm({message:"do you want to generate a prompt file based on existing commits?",initialValue:!0});if(d.isCancel(y))return d.log.error("aborted"),await i(1);l=y}let E=d.spinner();if(h&&l)E.start("generating commit message guidelines"),s=await Ve(h),E.stop(P.green("generated commit message guidelines!"));else s=Nt;try{let y=`${o}/.noto`;await We.mkdir(y,{recursive:!0});let ge=`${y}/commit-prompt.md`;return await We.writeFile(ge,s,"utf-8"),d.log.success(q`${P.green("prompt file created!")}
327
327
  ${P.gray(ge)}`),await i(0)}catch{d.log.error(P.red("failed to create the prompt file!"))}});import{z as I}from"zod";import*as m from"@clack/prompts";import v from"picocolors";import $t from"clipboardy";import{APICallError as Tt,RetryError as Et}from"ai";var Ke=Z.meta({description:"generate a commit message",default:!0,diffRequired:!0,promptRequired:!0}).input(I.object({message:I.string().or(I.boolean()).meta({description:"provide context for commit message",alias:"m"}),copy:I.boolean().meta({description:"copy the generated message to clipboard",alias:"c"}),apply:I.boolean().meta({description:"commit the generated message",alias:"a"}),push:I.boolean().meta({description:"commit and push the changes",alias:"p"}),force:I.boolean().meta({description:"bypass cache and force regeneration of commit message",alias:"f"}),manual:I.boolean().meta({description:"custom commit message"})})).mutation(async(e)=>{let{input:t,ctx:a}=e,o=m.spinner();try{if(t.manual){let l=await m.text({message:"edit the generated commit message",placeholder:"chore: init repo"});if(m.isCancel(l))return m.log.error(v.red("nothing changed!")),await i(1);if(m.log.step(v.green(l)),await p.update((y)=>({...y,lastGeneratedMessage:l})),await F(l))m.log.step(v.dim("commit successful"));else m.log.error(v.red("failed to commit changes"));return await i(0)}let n=t.message;if(typeof n==="string")n=n.trim();else if(typeof n==="boolean"&&n===!0){let l=await m.text({message:"provide context for the commit message",placeholder:"describe the changes"});if(m.isCancel(l))return m.log.error(v.red("nothing changed!")),await i(1);n=l}o.start("generating commit message");let s=null;s=await qe(a.git.diff,a.noto.prompt,typeof n==="string"?n:void 0,t.force),o.stop(v.white(s));let h=await m.text({message:"edit the generated commit message",initialValue:s,placeholder:s});if(m.isCancel(h))return m.log.error(v.red("nothing changed!")),await i(1);if(s=h,m.log.step(v.green(s)),await p.update((l)=>({...l,lastGeneratedMessage:s})),t.copy)$t.writeSync(s),m.log.step(v.dim("copied commit message to clipboard"));if(t.apply)if(await F(s))m.log.step(v.dim("commit successful"));else m.log.error(v.red("failed to commit changes"));if(t.push)if(await we())m.log.step(v.dim("push successful"));else m.log.error(v.red("failed to push changes"));return await i(0)}catch(r){let n;if(Et.isInstance(r)&&Tt.isInstance(r.lastError))n=Ut(r.lastError.responseBody);let s=n?`
328
- ${n}`:"";o.stop(v.red(`failed to generate commit message${s}`),1),await i(1)}});function Ut(e){if(typeof e!=="string")return;try{let t=JSON.parse(e);return t?.error?.message??t?.message}catch{return}}import{spawn as Ot}from"node:child_process";import*as D from"@clack/prompts";import oe from"picocolors";import Dt from"semver";var Ye=x.meta({description:"upgrade noto"}).mutation(async()=>{let e=D.spinner();e.start("fetching latest version");let t=await J(!0,!0);if(!t)return e.stop(`You're already on the latest version of noto (${oe.dim(`which is ${S}`)})`),await i(0,!1);e.stop(`noto ${oe.green(t.latest)} is out! You are on ${oe.dim(t.current)}.`);let a=await Me();if(!a.updateCommand){if(a.updateMessage)return D.log.warn(a.updateMessage),await i(0,!1);return D.log.error("unable to determine update command for your installation."),await i(1,!1)}let o=Dt.prerelease(t.latest)!==null,r=a.updateCommand.replace("@latest",o?"@beta":`@${t.latest}`),n=Ot(r,{stdio:"pipe",shell:!0});e.start("upgrading noto");try{await new Promise((s,h)=>{n.on("close",(l)=>{if(l===0)s();else h()})}),e.stop(oe.green("noto has been updated successfully!"))}catch{return D.log.error(`automatic update failed. please try updating manually by running: ${a.updateCommand}`),await i(1,!1)}return await A.update((s)=>({...s,update:void 0})),await i(0,!1)});var He={checkout:Ne,config:De,prev:je,init:_e,noto:Ke,upgrade:Ye};var Xe=$.router(He);var Je=process.argv.slice(2),Qe="1.3.4-beta.7";if(Je.includes("--version")||Je.includes("-v"))console.log(Qe),process.exit(0);ke();ce(!0);Ft({name:"noto",router:Xe,version:Qe}).run();
328
+ ${n}`:"";o.stop(v.red(`failed to generate commit message${s}`),1),await i(1)}});function Ut(e){if(typeof e!=="string")return;try{let t=JSON.parse(e);return t?.error?.message??t?.message}catch{return}}import{spawn as Ot}from"node:child_process";import*as D from"@clack/prompts";import oe from"picocolors";import Dt from"semver";var Ye=x.meta({description:"upgrade noto"}).mutation(async()=>{let e=D.spinner();e.start("fetching latest version");let t=await J(!0,!0);if(!t)return e.stop(`You're already on the latest version of noto (${oe.dim(`which is ${S}`)})`),await i(0,!1);e.stop(`noto ${oe.green(t.latest)} is out! You are on ${oe.dim(t.current)}.`);let a=await Me();if(!a.updateCommand){if(a.updateMessage)return D.log.warn(a.updateMessage),await i(0,!1);return D.log.error("unable to determine update command for your installation."),await i(1,!1)}let o=Dt.prerelease(t.latest)!==null,r=a.updateCommand.replace("@latest",o?"@beta":`@${t.latest}`),n=Ot(r,{stdio:"pipe",shell:!0});e.start("upgrading noto");try{await new Promise((s,h)=>{n.on("close",(l)=>{if(l===0)s();else h()})}),e.stop(oe.green("noto has been updated successfully!"))}catch{return D.log.error(`automatic update failed. please try updating manually by running: ${a.updateCommand}`),await i(1,!1)}return await A.update((s)=>({...s,update:void 0})),await i(0,!1)});var He={checkout:Ne,config:De,prev:je,init:_e,noto:Ke,upgrade:Ye};var Xe=$.router(He);var Je=process.argv.slice(2),Qe="1.3.4";if(Je.includes("--version")||Je.includes("-v"))console.log(Qe),process.exit(0);ke();ce(!0);Ft({name:"noto",router:Xe,version:Qe}).run();
329
329
 
330
330
  // Made by a human on earth!
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@snelusha/noto",
3
- "version": "1.3.4-beta.7",
3
+ "version": "1.3.4",
4
4
  "description": "Generate clean commit messages in a snap! ✨",
5
5
  "license": "MIT",
6
6
  "type": "module",