@negoziator/ai-commit 2.18.0 → 2.18.1
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/dist/{anthropic-r1ZBBJHJ.mjs → anthropic-Br4ZgF9g.mjs} +1 -1
- package/dist/{azure-openai-vh0Hf4Td.mjs → azure-openai-ZOLbXbz1.mjs} +1 -1
- package/dist/{cli-JxH3YfSO.mjs → cli-DBsfYXTI.mjs} +2 -2
- package/dist/cli.mjs +1 -1
- package/dist/{custom-CZLagliG.mjs → custom-6acXam9Q.mjs} +1 -1
- package/dist/{index-D54yBMR3.mjs → index-BcjrwV6E.mjs} +1 -1
- package/dist/{ollama-D3dd_rog.mjs → ollama-Dlmtqnnc.mjs} +1 -1
- package/dist/{openai-Bxh2RSCi.mjs → openai-DOoXNJei.mjs} +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var y=Object.defineProperty;var u=(f,t)=>y(f,"name",{value:t,configurable:!0});import l from"https";import{c as w}from"./index-
|
|
1
|
+
var y=Object.defineProperty;var u=(f,t)=>y(f,"name",{value:t,configurable:!0});import l from"https";import{c as w}from"./index-BcjrwV6E.mjs";import{L as A,g as C}from"./prompt-BMR92Sng.mjs";import{K as a}from"./cli-DBsfYXTI.mjs";import"net";import"tls";import"url";import"assert";import"tty";import"util";import"os";import"events";import"node:buffer";import"node:path";import"node:child_process";import"node:process";import"child_process";import"path";import"fs";import"node:url";import"node:os";import"node:fs";import"buffer";import"stream";import"node:util";import"node:readline";import"node:stream";import"fs/promises";const h=class h extends A{get name(){return"anthropic"}validateConfig(){const{apiKey:t}=this.config;if(!t)throw new a("Please set your Anthropic API key via `aicommit config set ANTHROPIC_KEY=<your token>`\nGet your API key from: https://console.anthropic.com/");if(!t.startsWith("sk-ant-"))throw new a('Invalid Anthropic API key: Must start with "sk-ant-"')}async generateCommitMessage(t){try{const i=C(this.config.locale,this.config.maxLength,this.config.type,t.projectConfig),o=[{role:"user",content:t.diff}],e=[];for(let s=0;s<t.completions;s++){const r=(await this.createMessage(i,o)).content[0]?.text;r&&e.push(this.sanitizeMessage(r))}return{messages:this.deduplicateMessages(e)}}catch(i){const o=i;throw o.code==="ENOTFOUND"?new a(`Error connecting to ${o.hostname} (${o.syscall}). Are you connected to the internet?`):o}}async createMessage(t,i){const o={model:this.config.model,max_tokens:this.config.maxCompletionTokens,temperature:this.config.temperature,system:t,messages:i},{response:e,data:n}=await this.httpsPost("api.anthropic.com","/v1/messages",{"x-api-key":this.config.apiKey,"anthropic-version":"2023-06-01"},o);if(!e.statusCode||e.statusCode<200||e.statusCode>299){let s=`Anthropic API Error: ${e.statusCode} - ${e.statusMessage}`;throw n&&(s+=`
|
|
2
2
|
|
|
3
3
|
${n}`),e.statusCode===500&&(s+=`
|
|
4
4
|
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var d=Object.defineProperty;var f=(u,t)=>d(u,"name",{value:t,configurable:!0});import y from"https";import{c as w}from"./index-
|
|
1
|
+
var d=Object.defineProperty;var f=(u,t)=>d(u,"name",{value:t,configurable:!0});import y from"https";import{c as w}from"./index-BcjrwV6E.mjs";import{L as C,g as A}from"./prompt-BMR92Sng.mjs";import{K as a}from"./cli-DBsfYXTI.mjs";import"net";import"tls";import"url";import"assert";import"tty";import"util";import"os";import"events";import"node:buffer";import"node:path";import"node:child_process";import"node:process";import"child_process";import"path";import"fs";import"node:url";import"node:os";import"node:fs";import"buffer";import"stream";import"node:util";import"node:readline";import"node:stream";import"fs/promises";const g=class g extends C{get name(){return"azure-openai"}validateConfig(){const{apiKey:t,endpoint:n}=this.config;if(!t)throw new a("Please set your Azure OpenAI API key via `aicommit config set AZURE_OPENAI_KEY=<your token>`");if(!n)throw new a("Please set your Azure OpenAI endpoint via `aicommit config set AZURE_ENDPOINT=<your endpoint>`")}async generateCommitMessage(t){try{const n=await this.createChatCompletion({model:this.config.model,messages:[{role:"system",content:A(this.config.locale,this.config.maxLength,this.config.type,t.projectConfig)},{role:"user",content:t.diff}],temperature:this.config.temperature,top_p:1,frequency_penalty:0,presence_penalty:0,max_tokens:this.config.maxCompletionTokens,n:t.completions});return{messages:this.deduplicateMessages(n.choices.filter(r=>r.message?.content).map(r=>this.sanitizeMessage(r.message.content)))}}catch(n){const e=n;throw e.code==="ENOTFOUND"?new a(`Error connecting to ${e.hostname} (${e.syscall}). Are you connected to the internet?`):e}}async createChatCompletion(t){const e=new URL(this.config.endpoint).hostname,m=`/openai/deployments/${this.config.deploymentName||this.config.model}/chat/completions?api-version=2024-02-01`,{response:i,data:s}=await this.httpsPost(e,m,{"api-key":this.config.apiKey},t);if(!i.statusCode||i.statusCode<200||i.statusCode>299){let o=`Azure OpenAI API Error: ${i.statusCode} - ${i.statusMessage}`;throw s&&(o+=`
|
|
2
2
|
|
|
3
3
|
${s}`),new a(o)}return JSON.parse(s)}async httpsPost(t,n,e,r){return new Promise((m,i)=>{const s=JSON.stringify(r),o=y.request({hostname:t,path:n,method:"POST",headers:{...e,"Content-Type":"application/json","Content-Length":Buffer.byteLength(s)},timeout:this.config.timeout,agent:this.config.proxy?w(this.config.proxy):void 0},p=>{const h=[];p.on("data",l=>h.push(l)),p.on("end",()=>{m({request:o,response:p,data:Buffer.concat(h).toString()})})});o.on("error",i),o.on("timeout",()=>{o.destroy(),i(new a(`Time out error: request took over ${this.config.timeout}ms. Try increasing the \`timeout\` config`))}),o.write(s),o.end()})}sanitizeMessage(t){return t.trim().replace(/[\n\r]/g,"").replace(/(\w)\.$/,"$1")}deduplicateMessages(t){return Array.from(new Set(t))}};f(g,"AzureOpenAIProvider");let c=g;export{c as default};
|
|
@@ -18,7 +18,7 @@ var ct=Object.defineProperty;var s=(u,D)=>ct(u,"name",{value:D,configurable:!0})
|
|
|
18
18
|
`:"")+(t?this.indentText({text:this.render(t),spaces:r}):"")}
|
|
19
19
|
`}table({tableData:D,tableOptions:t,tableBreakpoints:r}){return yr(D.map(n=>n.map(i=>this.render(i))),r?$r(r):t)}flagParameter(D){return D===Boolean?"":D===String?"<string>":D===Number?"<number>":Array.isArray(D)?this.flagParameter(D[0]):"<value>"}flagOperator(D){return" "}flagName(D){const{flag:t,flagFormatted:r,aliasesEnabled:n,aliasFormatted:i}=D;let e="";if(i?e+=`${i}, `:n&&(e+=" "),e+=r,"placeholder"in t&&typeof t.placeholder=="string")e+=`${this.flagOperator(D)}${t.placeholder}`;else{const a=this.flagParameter("type"in t?t.type:t);a&&(e+=`${this.flagOperator(D)}${a}`)}return e}flagDefault(D){return JSON.stringify(D)}flagDescription({flag:D}){let t="description"in D?D.description??"":"";if("default"in D){let{default:r}=D;typeof r=="function"&&(r=r()),r&&(t+=` (default: ${this.flagDefault(r)})`)}return t}render(D){if(typeof D=="string")return D;if(Array.isArray(D))return D.map(t=>this.render(t)).join(`
|
|
20
20
|
`);if("type"in D&&this[D.type]){const t=this[D.type];if(typeof t=="function")return t.call(this,D.data)}throw new Error(`Invalid node type: ${JSON.stringify(D)}`)}},s(V,"J"),V);const Ou=s(u=>u.length>0&&!u.includes(" "),"y$1"),{stringify:k}=JSON,Ur=/[|\\{}()[\]^$+*?.]/;function Iu(u){const D=[];let t,r;for(const n of u){if(r)throw new Error(`Invalid parameter: Spread parameter ${k(r)} must be last`);const i=n[0],e=n[n.length-1];let a;if(i==="<"&&e===">"&&(a=!0,t))throw new Error(`Invalid parameter: Required parameter ${k(n)} cannot come after optional parameter ${k(t)}`);if(i==="["&&e==="]"&&(a=!1,t=n),a===void 0)throw new Error(`Invalid parameter: ${k(n)}. Must be wrapped in <> (required parameter) or [] (optional parameter)`);let o=n.slice(1,-1);const c=o.slice(-3)==="...";c&&(r=n,o=o.slice(0,-3));const l=o.match(Ur);if(l)throw new Error(`Invalid parameter: ${k(n)}. Invalid character found ${k(l[0])}`);D.push({name:o,required:a,spread:c})}return D}s(Iu,"w$1");function Tu(u,D,t,r){for(let n=0;n<D.length;n+=1){const{name:i,required:e,spread:a}=D[n],o=xr(i);if(o in u)throw new Error(`Invalid parameter: ${k(i)} is used more than once.`);const c=a?t.slice(n):t[n];if(a&&(n=D.length),e&&(!c||a&&c.length===0))return console.error(`Error: Missing required parameter ${k(i)}
|
|
21
|
-
`),r(),process.exit(1);u[o]=c}}s(Tu,"b$1");function Wr(u){return u===void 0||u!==!1}s(Wr,"W$2");function VD(u,D,t,r){const n={...D.flags},i=D.version;i&&(n.version={type:Boolean,description:"Show version"});const{help:e}=D,a=Wr(e);a&&!("help"in n)&&(n.help={type:Boolean,alias:"h",description:"Show help"});const o=Kt(n,r,{ignore:D.ignoreArgv}),c=s(()=>{console.log(D.version)},"f");if(i&&o.flags.version===!0)return c(),process.exit(0);const l=new Gr,F=a&&e?.render?e.render:d=>l.render(d),C=s(d=>{const g=jr({...D,...d?{help:d}:{},flags:n});console.log(F(g,l))},"u");if(a&&o.flags.help===!0)return C(),process.exit(0);if(D.parameters){let{parameters:d}=D,g=o._;const f=d.indexOf("--"),p=d.slice(f+1),m=Object.create(null);if(f>-1&&p.length>0){d=d.slice(0,f);const A=o._["--"];g=g.slice(0,-A.length||void 0),Tu(m,Iu(d),g,C),Tu(m,Iu(p),A,C)}else Tu(m,Iu(d),g,C);Object.assign(o._,m)}const E={...o,showVersion:c,showHelp:C};return typeof t=="function"&&t(E),{command:u,...E}}s(VD,"x$1");function qr(u,D){const t=new Map;for(const r of D){const n=[r.options.name],{alias:i}=r.options;i&&(Array.isArray(i)?n.push(...i):n.push(i));for(const e of n){if(t.has(e))throw new Error(`Duplicate command name found: ${k(e)}`);t.set(e,r)}}return t.get(u)}s(qr,"z$1");function Kr(u,D,t=process.argv.slice(2)){if(!u)throw new Error("Options is required");if("name"in u&&(!u.name||!Ou(u.name)))throw new Error(`Invalid script name: ${k(u.name)}`);const r=t[0];if(u.commands&&r&&Ou(r)){const n=qr(r,u.commands);if(n)return VD(n.options.name,{...n.options,parent:u},n.callback,t.slice(1))}return VD(void 0,u,D,t)}s(Kr,"Z");function ZD(u,D){if(!u)throw new Error("Command options are required");const{name:t}=u;if(t===void 0)throw new Error("Command name is required");if(!Ou(t))throw new Error(`Invalid command name ${JSON.stringify(t)}. Command names must be one word.`);return{options:u,callback:D}}s(ZD,"G$2");var Yr="2.18.
|
|
21
|
+
`),r(),process.exit(1);u[o]=c}}s(Tu,"b$1");function Wr(u){return u===void 0||u!==!1}s(Wr,"W$2");function VD(u,D,t,r){const n={...D.flags},i=D.version;i&&(n.version={type:Boolean,description:"Show version"});const{help:e}=D,a=Wr(e);a&&!("help"in n)&&(n.help={type:Boolean,alias:"h",description:"Show help"});const o=Kt(n,r,{ignore:D.ignoreArgv}),c=s(()=>{console.log(D.version)},"f");if(i&&o.flags.version===!0)return c(),process.exit(0);const l=new Gr,F=a&&e?.render?e.render:d=>l.render(d),C=s(d=>{const g=jr({...D,...d?{help:d}:{},flags:n});console.log(F(g,l))},"u");if(a&&o.flags.help===!0)return C(),process.exit(0);if(D.parameters){let{parameters:d}=D,g=o._;const f=d.indexOf("--"),p=d.slice(f+1),m=Object.create(null);if(f>-1&&p.length>0){d=d.slice(0,f);const A=o._["--"];g=g.slice(0,-A.length||void 0),Tu(m,Iu(d),g,C),Tu(m,Iu(p),A,C)}else Tu(m,Iu(d),g,C);Object.assign(o._,m)}const E={...o,showVersion:c,showHelp:C};return typeof t=="function"&&t(E),{command:u,...E}}s(VD,"x$1");function qr(u,D){const t=new Map;for(const r of D){const n=[r.options.name],{alias:i}=r.options;i&&(Array.isArray(i)?n.push(...i):n.push(i));for(const e of n){if(t.has(e))throw new Error(`Duplicate command name found: ${k(e)}`);t.set(e,r)}}return t.get(u)}s(qr,"z$1");function Kr(u,D,t=process.argv.slice(2)){if(!u)throw new Error("Options is required");if("name"in u&&(!u.name||!Ou(u.name)))throw new Error(`Invalid script name: ${k(u.name)}`);const r=t[0];if(u.commands&&r&&Ou(r)){const n=qr(r,u.commands);if(n)return VD(n.options.name,{...n.options,parent:u},n.callback,t.slice(1))}return VD(void 0,u,D,t)}s(Kr,"Z");function ZD(u,D){if(!u)throw new Error("Command options are required");const{name:t}=u;if(t===void 0)throw new Error("Command name is required");if(!Ou(t))throw new Error(`Invalid command name ${JSON.stringify(t)}. Command names must be one word.`);return{options:u,callback:D}}s(ZD,"G$2");var Yr="2.18.1",zr="Writes your git commit messages for you with AI",Pu={version:Yr,description:zr},M=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function L(u){return u&&u.__esModule&&Object.prototype.hasOwnProperty.call(u,"default")?u.default:u}s(L,"getDefaultExportFromCjs");var G={exports:{}},Ru,JD;function Hr(){if(JD)return Ru;JD=1,Ru=r,r.sync=n;var u=bu;function D(i,e){var a=e.pathExt!==void 0?e.pathExt:process.env.PATHEXT;if(!a||(a=a.split(";"),a.indexOf("")!==-1))return!0;for(var o=0;o<a.length;o++){var c=a[o].toLowerCase();if(c&&i.substr(-c.length).toLowerCase()===c)return!0}return!1}s(D,"checkPathExt");function t(i,e,a){return!i.isSymbolicLink()&&!i.isFile()?!1:D(e,a)}s(t,"checkStat");function r(i,e,a){u.stat(i,function(o,c){a(o,o?!1:t(c,i,e))})}s(r,"isexe");function n(i,e){return t(u.statSync(i),i,e)}return s(n,"sync"),Ru}s(Hr,"requireWindows");var ku,XD;function Vr(){if(XD)return ku;XD=1,ku=D,D.sync=t;var u=bu;function D(i,e,a){u.stat(i,function(o,c){a(o,o?!1:r(c,e))})}s(D,"isexe");function t(i,e){return r(u.statSync(i),e)}s(t,"sync");function r(i,e){return i.isFile()&&n(i,e)}s(r,"checkStat");function n(i,e){var a=i.mode,o=i.uid,c=i.gid,l=e.uid!==void 0?e.uid:process.getuid&&process.getuid(),F=e.gid!==void 0?e.gid:process.getgid&&process.getgid(),C=parseInt("100",8),E=parseInt("010",8),d=parseInt("001",8),g=C|E,f=a&d||a&E&&c===F||a&C&&o===l||a&g&&l===0;return f}return s(n,"checkMode"),ku}s(Vr,"requireMode");var _u,QD;function Zr(){if(QD)return _u;QD=1;var u;process.platform==="win32"||M.TESTING_WINDOWS?u=Hr():u=Vr(),_u=D,D.sync=t;function D(r,n,i){if(typeof n=="function"&&(i=n,n={}),!i){if(typeof Promise!="function")throw new TypeError("callback not provided");return new Promise(function(e,a){D(r,n||{},function(o,c){o?a(o):e(c)})})}u(r,n||{},function(e,a){e&&(e.code==="EACCES"||n&&n.ignoreErrors)&&(e=null,a=!1),i(e,a)})}s(D,"isexe");function t(r,n){try{return u.sync(r,n||{})}catch(i){if(n&&n.ignoreErrors||i.code==="EACCES")return!1;throw i}}return s(t,"sync"),_u}s(Zr,"requireIsexe");var Nu,ue;function Jr(){if(ue)return Nu;ue=1;const u=process.platform==="win32"||process.env.OSTYPE==="cygwin"||process.env.OSTYPE==="msys",D=N,t=u?";":":",r=Zr(),n=s(o=>Object.assign(new Error(`not found: ${o}`),{code:"ENOENT"}),"getNotFoundError"),i=s((o,c)=>{const l=c.colon||t,F=o.match(/\//)||u&&o.match(/\\/)?[""]:[...u?[process.cwd()]:[],...(c.path||process.env.PATH||"").split(l)],C=u?c.pathExt||process.env.PATHEXT||".EXE;.CMD;.BAT;.COM":"",E=u?C.split(l):[""];return u&&o.indexOf(".")!==-1&&E[0]!==""&&E.unshift(""),{pathEnv:F,pathExt:E,pathExtExe:C}},"getPathInfo"),e=s((o,c,l)=>{typeof c=="function"&&(l=c,c={}),c||(c={});const{pathEnv:F,pathExt:C,pathExtExe:E}=i(o,c),d=[],g=s(p=>new Promise((m,A)=>{if(p===F.length)return c.all&&d.length?m(d):A(n(o));const h=F[p],b=/^".*"$/.test(h)?h.slice(1,-1):h,$=D.join(b,o),P=!b&&/^\.[\\\/]/.test(o)?o.slice(0,2)+$:$;m(f(P,p,0))}),"step"),f=s((p,m,A)=>new Promise((h,b)=>{if(A===C.length)return h(g(m+1));const $=C[A];r(p+$,{pathExt:E},(P,Au)=>{if(!P&&Au)if(c.all)d.push(p+$);else return h(p+$);return h(f(p,m,A+1))})}),"subStep");return l?g(0).then(p=>l(null,p),l):g(0)},"which"),a=s((o,c)=>{c=c||{};const{pathEnv:l,pathExt:F,pathExtExe:C}=i(o,c),E=[];for(let d=0;d<l.length;d++){const g=l[d],f=/^".*"$/.test(g)?g.slice(1,-1):g,p=D.join(f,o),m=!f&&/^\.[\\\/]/.test(o)?o.slice(0,2)+p:p;for(let A=0;A<F.length;A++){const h=m+F[A];try{if(r.sync(h,{pathExt:C}))if(c.all)E.push(h);else return h}catch{}}}if(c.all&&E.length)return E;if(c.nothrow)return null;throw n(o)},"whichSync");return Nu=e,e.sync=a,Nu}s(Jr,"requireWhich");var ou={exports:{}},De;function Xr(){if(De)return ou.exports;De=1;const u=s((D={})=>{const t=D.env||process.env;return(D.platform||process.platform)!=="win32"?"PATH":Object.keys(t).reverse().find(n=>n.toUpperCase()==="PATH")||"Path"},"pathKey");return ou.exports=u,ou.exports.default=u,ou.exports}s(Xr,"requirePathKey");var Mu,ee;function Qr(){if(ee)return Mu;ee=1;const u=N,D=Jr(),t=Xr();function r(i,e){const a=i.options.env||process.env,o=process.cwd(),c=i.options.cwd!=null,l=c&&process.chdir!==void 0&&!process.chdir.disabled;if(l)try{process.chdir(i.options.cwd)}catch{}let F;try{F=D.sync(i.command,{path:a[t({env:a})],pathExt:e?u.delimiter:void 0})}catch{}finally{l&&process.chdir(o)}return F&&(F=u.resolve(c?i.options.cwd:"",F)),F}s(r,"resolveCommandAttempt");function n(i){return r(i)||r(i,!0)}return s(n,"resolveCommand"),Mu=n,Mu}s(Qr,"requireResolveCommand");var su={},te;function un(){if(te)return su;te=1;const u=/([()\][%!^"`<>&|;, *?])/g;function D(r){return r=r.replace(u,"^$1"),r}s(D,"escapeCommand");function t(r,n){return r=`${r}`,r=r.replace(/(?=(\\+?)?)\1"/g,'$1$1\\"'),r=r.replace(/(?=(\\+?)?)\1$/,"$1$1"),r=`"${r}"`,r=r.replace(u,"^$1"),n&&(r=r.replace(u,"^$1")),r}return s(t,"escapeArgument"),su.command=D,su.argument=t,su}s(un,"require_escape");var ju,re;function Dn(){return re||(re=1,ju=/^#!(.*)/),ju}s(Dn,"requireShebangRegex");var Lu,ne;function en(){if(ne)return Lu;ne=1;const u=Dn();return Lu=s((D="")=>{const t=D.match(u);if(!t)return null;const[r,n]=t[0].replace(/#! ?/,"").split(" "),i=r.split("/").pop();return i==="env"?n:n?`${i} ${n}`:i},"shebangCommand"),Lu}s(en,"requireShebangCommand");var Gu,ie;function tn(){if(ie)return Gu;ie=1;const u=bu,D=en();function t(r){const i=Buffer.alloc(150);let e;try{e=u.openSync(r,"r"),u.readSync(e,i,0,150,0),u.closeSync(e)}catch{}return D(i.toString())}return s(t,"readShebang"),Gu=t,Gu}s(tn,"requireReadShebang");var Uu,oe;function rn(){if(oe)return Uu;oe=1;const u=N,D=Qr(),t=un(),r=tn(),n=process.platform==="win32",i=/\.(?:com|exe)$/i,e=/node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;function a(l){l.file=D(l);const F=l.file&&r(l.file);return F?(l.args.unshift(l.file),l.command=F,D(l)):l.file}s(a,"detectShebang");function o(l){if(!n)return l;const F=a(l),C=!i.test(F);if(l.options.forceShell||C){const E=e.test(F);l.command=u.normalize(l.command),l.command=t.command(l.command),l.args=l.args.map(g=>t.argument(g,E));const d=[l.command].concat(l.args).join(" ");l.args=["/d","/s","/c",`"${d}"`],l.command=process.env.comspec||"cmd.exe",l.options.windowsVerbatimArguments=!0}return l}s(o,"parseNonShell");function c(l,F,C){F&&!Array.isArray(F)&&(C=F,F=null),F=F?F.slice(0):[],C=Object.assign({},C);const E={command:l,args:F,options:C,file:void 0,original:{command:l,args:F}};return C.shell?E:o(E)}return s(c,"parse"),Uu=c,Uu}s(rn,"requireParse");var Wu,se;function nn(){if(se)return Wu;se=1;const u=process.platform==="win32";function D(i,e){return Object.assign(new Error(`${e} ${i.command} ENOENT`),{code:"ENOENT",errno:"ENOENT",syscall:`${e} ${i.command}`,path:i.command,spawnargs:i.args})}s(D,"notFoundError");function t(i,e){if(!u)return;const a=i.emit;i.emit=function(o,c){if(o==="exit"){const l=r(c,e);if(l)return a.call(i,"error",l)}return a.apply(i,arguments)}}s(t,"hookChildProcess");function r(i,e){return u&&i===1&&!e.file?D(e.original,"spawn"):null}s(r,"verifyENOENT");function n(i,e){return u&&i===1&&!e.file?D(e.original,"spawnSync"):null}return s(n,"verifyENOENTSync"),Wu={hookChildProcess:t,verifyENOENT:r,verifyENOENTSync:n,notFoundError:D},Wu}s(nn,"requireEnoent");var ae;function on(){if(ae)return G.exports;ae=1;const u=Et,D=rn(),t=nn();function r(i,e,a){const o=D(i,e,a),c=u.spawn(o.command,o.args,o.options);return t.hookChildProcess(c,o),c}s(r,"spawn");function n(i,e,a){const o=D(i,e,a),c=u.spawnSync(o.command,o.args,o.options);return c.error=c.error||t.verifyENOENTSync(c.status,o),c}return s(n,"spawnSync"),G.exports=r,G.exports.spawn=r,G.exports.sync=n,G.exports._parse=D,G.exports._enoent=t,G.exports}s(on,"requireCrossSpawn");var sn=on(),an=L(sn);function cn(u){const D=typeof u=="string"?`
|
|
22
22
|
`:10,t=typeof u=="string"?"\r":13;return u[u.length-1]===D&&(u=u.slice(0,-1)),u[u.length-1]===t&&(u=u.slice(0,-1)),u}s(cn,"stripFinalNewline");function ce(u={}){const{env:D=process.env,platform:t=process.platform}=u;return t!=="win32"?"PATH":Object.keys(D).reverse().find(r=>r.toUpperCase()==="PATH")||"Path"}s(ce,"pathKey");const ln=s(({cwd:u=x.cwd(),path:D=x.env[ce()],preferLocal:t=!0,execPath:r=x.execPath,addExecPath:n=!0}={})=>{const i=u instanceof URL?$D(u):u,e=K.resolve(i),a=[];return t&&Fn(a,e),n&&Cn(a,r,e),[...a,D].join(K.delimiter)},"npmRunPath"),Fn=s((u,D)=>{let t;for(;t!==D;)u.push(K.join(D,"node_modules/.bin")),t=D,D=K.resolve(D,"..")},"applyPreferLocal"),Cn=s((u,D,t)=>{const r=D instanceof URL?$D(D):D;u.push(K.resolve(t,r,".."))},"applyExecPath"),En=s(({env:u=x.env,...D}={})=>{u={...u};const t=ce({env:u});return D.path=u[t],u[t]=ln(D),u},"npmRunPathEnv"),fn=s((u,D,t,r)=>{if(t==="length"||t==="prototype"||t==="arguments"||t==="caller")return;const n=Object.getOwnPropertyDescriptor(u,t),i=Object.getOwnPropertyDescriptor(D,t);!dn(n,i)&&r||Object.defineProperty(u,t,i)},"copyProperty"),dn=s(function(u,D){return u===void 0||u.configurable||u.writable===D.writable&&u.enumerable===D.enumerable&&u.configurable===D.configurable&&(u.writable||u.value===D.value)},"canCopyProperty"),pn=s((u,D)=>{const t=Object.getPrototypeOf(D);t!==Object.getPrototypeOf(u)&&Object.setPrototypeOf(u,t)},"changePrototype"),mn=s((u,D)=>`/* Wrapped ${u}*/
|
|
23
23
|
${D}`,"wrappedToString"),hn=Object.getOwnPropertyDescriptor(Function.prototype,"toString"),gn=Object.getOwnPropertyDescriptor(Function.prototype.toString,"name"),Bn=s((u,D,t)=>{const r=t===""?"":`with ${t.trim()}() `,n=mn.bind(null,r,D.toString());Object.defineProperty(n,"name",gn),Object.defineProperty(u,"toString",{...hn,value:n})},"changeToString");function An(u,D,{ignoreNonConfigurable:t=!1}={}){const{name:r}=u;for(const n of Reflect.ownKeys(D))fn(u,D,n,t);return pn(u,D),Bn(u,D,r),u}s(An,"mimicFunction");const au=new WeakMap,le=s((u,D={})=>{if(typeof u!="function")throw new TypeError("Expected a function");let t,r=0;const n=u.displayName||u.name||"<anonymous>",i=s(function(...e){if(au.set(i,++r),r===1)t=u.apply(this,e),u=null;else if(D.throw===!0)throw new Error(`Function \`${n}\` can only be called once`);return t},"onetime2");return An(i,u),au.set(i,r),i},"onetime");le.callCount=u=>{if(!au.has(u))throw new Error(`The given function \`${u.name}\` is not wrapped by the \`onetime\` package`);return au.get(u)};const bn=s(()=>{const u=Ce-Fe+1;return Array.from({length:u},yn)},"getRealtimeSignals"),yn=s((u,D)=>({name:`SIGRT${D+1}`,number:Fe+D,action:"terminate",description:"Application-specific signal (realtime)",standard:"posix"}),"getRealtimeSignal"),Fe=34,Ce=64,wn=[{name:"SIGHUP",number:1,action:"terminate",description:"Terminal closed",standard:"posix"},{name:"SIGINT",number:2,action:"terminate",description:"User interruption with CTRL-C",standard:"ansi"},{name:"SIGQUIT",number:3,action:"core",description:"User interruption with CTRL-\\",standard:"posix"},{name:"SIGILL",number:4,action:"core",description:"Invalid machine instruction",standard:"ansi"},{name:"SIGTRAP",number:5,action:"core",description:"Debugger breakpoint",standard:"posix"},{name:"SIGABRT",number:6,action:"core",description:"Aborted",standard:"ansi"},{name:"SIGIOT",number:6,action:"core",description:"Aborted",standard:"bsd"},{name:"SIGBUS",number:7,action:"core",description:"Bus error due to misaligned, non-existing address or paging error",standard:"bsd"},{name:"SIGEMT",number:7,action:"terminate",description:"Command should be emulated but is not implemented",standard:"other"},{name:"SIGFPE",number:8,action:"core",description:"Floating point arithmetic error",standard:"ansi"},{name:"SIGKILL",number:9,action:"terminate",description:"Forced termination",standard:"posix",forced:!0},{name:"SIGUSR1",number:10,action:"terminate",description:"Application-specific signal",standard:"posix"},{name:"SIGSEGV",number:11,action:"core",description:"Segmentation fault",standard:"ansi"},{name:"SIGUSR2",number:12,action:"terminate",description:"Application-specific signal",standard:"posix"},{name:"SIGPIPE",number:13,action:"terminate",description:"Broken pipe or socket",standard:"posix"},{name:"SIGALRM",number:14,action:"terminate",description:"Timeout or timer",standard:"posix"},{name:"SIGTERM",number:15,action:"terminate",description:"Termination",standard:"ansi"},{name:"SIGSTKFLT",number:16,action:"terminate",description:"Stack is empty or overflowed",standard:"other"},{name:"SIGCHLD",number:17,action:"ignore",description:"Child process terminated, paused or unpaused",standard:"posix"},{name:"SIGCLD",number:17,action:"ignore",description:"Child process terminated, paused or unpaused",standard:"other"},{name:"SIGCONT",number:18,action:"unpause",description:"Unpaused",standard:"posix",forced:!0},{name:"SIGSTOP",number:19,action:"pause",description:"Paused",standard:"posix",forced:!0},{name:"SIGTSTP",number:20,action:"pause",description:'Paused using CTRL-Z or "suspend"',standard:"posix"},{name:"SIGTTIN",number:21,action:"pause",description:"Background process cannot read terminal input",standard:"posix"},{name:"SIGBREAK",number:21,action:"terminate",description:"User interruption with CTRL-BREAK",standard:"other"},{name:"SIGTTOU",number:22,action:"pause",description:"Background process cannot write to terminal output",standard:"posix"},{name:"SIGURG",number:23,action:"ignore",description:"Socket received out-of-band data",standard:"bsd"},{name:"SIGXCPU",number:24,action:"core",description:"Process timed out",standard:"bsd"},{name:"SIGXFSZ",number:25,action:"core",description:"File too big",standard:"bsd"},{name:"SIGVTALRM",number:26,action:"terminate",description:"Timeout or timer",standard:"bsd"},{name:"SIGPROF",number:27,action:"terminate",description:"Timeout or timer",standard:"bsd"},{name:"SIGWINCH",number:28,action:"ignore",description:"Terminal window size changed",standard:"bsd"},{name:"SIGIO",number:29,action:"terminate",description:"I/O is available",standard:"other"},{name:"SIGPOLL",number:29,action:"terminate",description:"Watched event",standard:"other"},{name:"SIGINFO",number:29,action:"ignore",description:"Request for process information",standard:"other"},{name:"SIGPWR",number:30,action:"terminate",description:"Device running out of power",standard:"systemv"},{name:"SIGSYS",number:31,action:"core",description:"Invalid system call",standard:"other"},{name:"SIGUNUSED",number:31,action:"terminate",description:"Invalid system call",standard:"other"}],Ee=s(()=>{const u=bn();return[...wn,...u].map(vn)},"getSignals"),vn=s(({name:u,number:D,description:t,action:r,forced:n=!1,standard:i})=>{const{signals:{[u]:e}}=xD,a=e!==void 0;return{name:u,number:a?e:D,description:t,supported:a,action:r,forced:n,standard:i}},"normalizeSignal"),$n=s(()=>{const u=Ee();return Object.fromEntries(u.map(xn))},"getSignalsByName"),xn=s(({name:u,number:D,description:t,supported:r,action:n,forced:i,standard:e})=>[u,{name:u,number:D,description:t,supported:r,action:n,forced:i,standard:e}],"getSignalByName"),Sn=$n(),On=s(()=>{const u=Ee(),D=Ce+1,t=Array.from({length:D},(r,n)=>In(n,u));return Object.assign({},...t)},"getSignalsByNumber"),In=s((u,D)=>{const t=Tn(u,D);if(t===void 0)return{};const{name:r,description:n,supported:i,action:e,forced:a,standard:o}=t;return{[u]:{name:r,number:u,description:n,supported:i,action:e,forced:a,standard:o}}},"getSignalByNumber"),Tn=s((u,D)=>{const t=D.find(({name:r})=>xD.signals[r]===u);return t!==void 0?t:D.find(r=>r.number===u)},"findSignalByNumber");On();const Pn=s(({timedOut:u,timeout:D,errorCode:t,signal:r,signalDescription:n,exitCode:i,isCanceled:e})=>u?`timed out after ${D} milliseconds`:e?"was canceled":t!==void 0?`failed with ${t}`:r!==void 0?`was killed with ${r} (${n})`:i!==void 0?`failed with exit code ${i}`:"failed","getErrorPrefix"),fe=s(({stdout:u,stderr:D,all:t,error:r,signal:n,exitCode:i,command:e,escapedCommand:a,timedOut:o,isCanceled:c,killed:l,parsed:{options:{timeout:F,cwd:C=x.cwd()}}})=>{i=i===null?void 0:i,n=n===null?void 0:n;const E=n===void 0?void 0:Sn[n].description,d=r&&r.code,f=`Command ${Pn({timedOut:o,timeout:F,errorCode:d,signal:n,signalDescription:E,exitCode:i,isCanceled:c})}: ${e}`,p=Object.prototype.toString.call(r)==="[object Error]",m=p?`${f}
|
|
24
24
|
${r.message}`:f,A=[m,D,u].filter(Boolean).join(`
|
|
@@ -64,7 +64,7 @@ ${FD}Please open a Bug report with the information above:`),console.error(`${FD}
|
|
|
64
64
|
`),diff:r}},"getStagedDiff"),eo=s(u=>`Detected ${u.length.toLocaleString()} staged file${u.length>1?"s":""}`,"getDetectedMessage");var fD,Je;function to(){if(Je)return fD;Je=1;const{hasOwnProperty:u}=Object.prototype,D=s((a,o={})=>{typeof o=="string"&&(o={section:o}),o.align=o.align===!0,o.newline=o.newline===!0,o.sort=o.sort===!0,o.whitespace=o.whitespace===!0||o.align===!0,o.platform=o.platform||typeof process<"u"&&process.platform,o.bracketedArray=o.bracketedArray!==!1;const c=o.platform==="win32"?`\r
|
|
65
65
|
`:`
|
|
66
66
|
`,l=o.whitespace?" = ":"=",F=[],C=o.sort?Object.keys(a).sort():Object.keys(a);let E=0;o.align&&(E=i(C.filter(f=>a[f]===null||Array.isArray(a[f])||typeof a[f]!="object").map(f=>Array.isArray(a[f])?`${f}[]`:f).concat([""]).reduce((f,p)=>i(f).length>=i(p).length?f:p)).length);let d="";const g=o.bracketedArray?"[]":"";for(const f of C){const p=a[f];if(p&&Array.isArray(p))for(const m of p)d+=i(`${f}${g}`).padEnd(E," ")+l+i(m)+c;else p&&typeof p=="object"?F.push(f):d+=i(f).padEnd(E," ")+l+i(p)+c}o.section&&d.length&&(d="["+i(o.section)+"]"+(o.newline?c+c:c)+d);for(const f of F){const p=t(f,".").join("\\."),m=(o.section?o.section+".":"")+p,A=D(a[f],{...o,section:m});d.length&&A.length&&(d+=c),d+=A}return d},"encode");function t(a,o){var c=0,l=0,F=0,C=[];do if(F=a.indexOf(o,c),F!==-1){if(c=F+o.length,F>0&&a[F-1]==="\\")continue;C.push(a.slice(l,F)),l=F+o.length}while(F!==-1);return C.push(a.slice(l)),C}s(t,"splitSections");const r=s((a,o={})=>{o.bracketedArray=o.bracketedArray!==!1;const c=Object.create(null);let l=c,F=null;const C=/^\[([^\]]*)\]\s*$|^([^=]+)(=(.*))?$/i,E=a.split(/[\r\n]+/g),d={};for(const f of E){if(!f||f.match(/^\s*[;#]/)||f.match(/^\s*$/))continue;const p=f.match(C);if(!p)continue;if(p[1]!==void 0){if(F=e(p[1]),F==="__proto__"){l=Object.create(null);continue}l=c[F]=c[F]||Object.create(null);continue}const m=e(p[2]);let A;o.bracketedArray?A=m.length>2&&m.slice(-2)==="[]":(d[m]=(d?.[m]||0)+1,A=d[m]>1);const h=A&&m.endsWith("[]")?m.slice(0,-2):m;if(h==="__proto__")continue;const b=p[3]?e(p[4]):!0,$=b==="true"||b==="false"||b==="null"?JSON.parse(b):b;A&&(u.call(l,h)?Array.isArray(l[h])||(l[h]=[l[h]]):l[h]=[]),Array.isArray(l[h])?l[h].push($):l[h]=$}const g=[];for(const f of Object.keys(c)){if(!u.call(c,f)||typeof c[f]!="object"||Array.isArray(c[f]))continue;const p=t(f,".");l=c;const m=p.pop(),A=m.replace(/\\\./g,".");for(const h of p)h!=="__proto__"&&((!u.call(l,h)||typeof l[h]!="object")&&(l[h]=Object.create(null)),l=l[h]);l===c&&A===m||(l[A]=c[f],g.push(f))}for(const f of g)delete c[f];return c},"decode"),n=s(a=>a.startsWith('"')&&a.endsWith('"')||a.startsWith("'")&&a.endsWith("'"),"isQuoted"),i=s(a=>typeof a!="string"||a.match(/[=\r\n]/)||a.match(/^\[/)||a.length>1&&n(a)||a!==a.trim()?JSON.stringify(a):a.split(";").join("\\;").split("#").join("\\#"),"safe"),e=s(a=>{if(a=(a||"").trim(),n(a)){a.charAt(0)==="'"&&(a=a.slice(1,-1));try{a=JSON.parse(a)}catch{}}else{let o=!1,c="";for(let l=0,F=a.length;l<F;l++){const C=a.charAt(l);if(o)"\\;#".indexOf(C)!==-1?c+=C:c+="\\"+C,o=!1;else{if(";#".indexOf(C)!==-1)break;C==="\\"?o=!0:c+=C}}return o&&(c+="\\"),c.trim()}return a},"unsafe");return fD={parse:r,decode:r,stringify:D,encode:D,safe:i,unsafe:e},fD}s(to,"requireIni");var ro=to(),Xe=L(ro);const hu=s(u=>O.lstat(u).then(()=>!0,()=>!1),"fileExists"),dD=s(async u=>{try{let D;try{D=u||await CD()}catch(e){if(e instanceof y&&e.message.includes("Git repository"))return;throw e}const t=N.join(D,".ai-commit.json");if(!await hu(t))return;const n=await O.readFile(t,"utf8");return JSON.parse(n)}catch(D){if(D instanceof y)throw D;return}},"getProjectConfig");function no(u){const D={},t=u.split(`
|
|
67
|
-
`);for(const r of t){const n=r.trim();if(!n||n.startsWith("#"))continue;const i=n.match(/^([A-Z_][A-Z0-9_]*)\s*=\s*(.*)$/i);if(!i)continue;const[,e,a]=i;let o=a.trim();(o.startsWith('"')&&o.endsWith('"')||o.startsWith("'")&&o.endsWith("'"))&&(o=o.slice(1,-1)),D[e]=o}return D}s(no,"parseEnvContent");async function Qe(u){const{filename:D=".env",directory:t=process.cwd(),override:r=!1}=u||{},n=N.join(t,D);if(!await hu(n))return{};try{const e=await O.readFile(n,"utf8"),a=no(e);for(const[o,c]of Object.entries(a))(r||process.env[o]===void 0)&&(process.env[o]=c);return a}catch{return{}}}s(Qe,"loadEnvFile");async function io(){process.env.NODE_ENV==="test"?await Qe({filename:".env.local"}):await Qe({filename:".env"})}s(io,"loadEnvironment");const ut=["openai","anthropic","azure-openai","ollama","custom"],oo=["","conventional"],{hasOwnProperty:so}=Object.prototype,Dt=s((u,D)=>so.call(u,D),"hasOwn"),v=s((u,D,t)=>{if(!D)throw new y(`Invalid config property ${u}: ${t}`)},"parseAssert"),gu={provider(u){return u?(v("provider",ut.includes(u),`Must be one of: ${ut.join(", ")}`),u):"openai"},OPENAI_KEY(u){if(u)return v("OPENAI_KEY",u.startsWith("sk-"),'Must start with "sk-"'),u},ANTHROPIC_KEY(u){if(u)return v("ANTHROPIC_KEY",u.startsWith("sk-ant-"),'Must start with "sk-ant-"'),u},AZURE_OPENAI_KEY(u){return u},AZURE_ENDPOINT(u){if(u)return v("AZURE_ENDPOINT",/^https?:\/\//.test(u),"Must be a valid URL"),u},OLLAMA_ENDPOINT(u){return u?(v("OLLAMA_ENDPOINT",/^https?:\/\//.test(u),"Must be a valid URL"),u):"http://localhost:11434"},CUSTOM_ENDPOINT(u){if(u)return v("CUSTOM_ENDPOINT",/^https?:\/\//.test(u),"Must be a valid URL"),u},CUSTOM_KEY(u){return u},locale(u){return u?(v("locale",u,"Cannot be empty"),v("locale",/^[a-z-]+$/i.test(u),"Must be a valid locale (letters and dashes/underscores). You can consult the list of codes in: https://wikipedia.org/wiki/List_of_ISO_639-1_codes"),u):"en"},generate(u){if(!u)return 1;v("generate",/^\d+$/.test(u),"Must be an integer");const D=Number(u);return v("generate",D>0,"Must be greater than 0"),v("generate",D<=5,"Must be less or equal to 5"),D},type(u){return u?(v("type",oo.includes(u),"Invalid commit type"),u):""},proxy(u){if(!(!u||u.length===0))return v("proxy",/^https?:\/\//.test(u),"Must be a valid URL"),u},model(u){return!u||u.length===0?"gpt-4o-mini":u},timeout(u){if(!u)return 1e4;v("timeout",/^\d+$/.test(u),"Must be an integer");const D=Number(u);return v("timeout",D>=500,"Must be greater than 500ms"),D},temperature(u){if(!u)return .2;v("temperature",/^(2|\d)(\.\d{1,2})?$/.test(u),"Must be decimal between 0 and 2");const D=Number(u);return v("temperature",D>0,"Must be greater than 0"),v("temperature",D<=2,"Must be less than or equal to 2"),D},"max-length"(u){if(!u)return 50;v("max-length",/^\d+$/.test(u),"Must be an integer");const D=Number(u);return v("max-length",D>=20,"Must be greater than 20 characters"),D},"max-completion-tokens"(u){if(!u)return 1e4;v("max-completion-tokens",/^\d+$/.test(u),"Must be an integer");const D=Number(u);return v("max-completion-tokens",D>0,"Must be greater than 0"),D},"auto-confirm"(u){return u?typeof u=="boolean"?u:(v("auto-confirm",/^(?:true|false)$/.test(u),"Must be a boolean"),u==="true"):!1},"prepend-reference"(u){return u?typeof u=="boolean"?u:(v("prepend-reference",/^(?:true|false)$/.test(u),"Must be a boolean"),u==="true"):!1}},pD=N.join(yt.homedir(),".aicommit"),et=s(async()=>{if(!await hu(pD))return Object.create(null);const D=await O.readFile(pD,"utf8");return Xe.parse(D)},"readConfigFile"),ao=s(u=>{const D=u.provider;switch(D){case"openai":if(!u.OPENAI_KEY)throw new y("Please set your OpenAI API key via `aicommit config set OPENAI_KEY=<your token>`");break;case"anthropic":if(!u.ANTHROPIC_KEY)throw new y("Please set your Anthropic API key via `aicommit config set ANTHROPIC_KEY=<your token>`\nGet your API key from: https://console.anthropic.com/");break;case"azure-openai":if(!u.AZURE_OPENAI_KEY)throw new y("Please set your Azure OpenAI API key via `aicommit config set AZURE_OPENAI_KEY=<your token>`");if(!u.AZURE_ENDPOINT)throw new y("Please set your Azure OpenAI endpoint via `aicommit config set AZURE_ENDPOINT=<your endpoint>`");break;case"ollama":break;case"custom":if(!u.CUSTOM_ENDPOINT)throw new y("Please set your custom endpoint via `aicommit config set CUSTOM_ENDPOINT=<your endpoint>`");break;default:throw new y(`Unknown provider: ${D}`)}},"validateProviderConfig"),mD=s(async(u,D)=>{await io();const t=await et(),r=await dD(),n={};for(const e of Object.keys(gu)){const a=gu[e];let o=r?.[e]??u?.[e]??process.env[e]??t[e];if(typeof o=="boolean"&&(o=o.toString()),D)try{n[e]=a(o)}catch{}else n[e]=a(o)}const i=n;return D||ao(i),i},"getConfig"),co=s(async u=>{const D=await et();for(const[t,r]of u){if(!Dt(gu,t))throw new y(`Invalid config property: ${t}`);const n=gu[t](r);D[t]=n}await O.writeFile(pD,Xe.stringify(D),"utf8")},"setConfigs"),tt={openai:s(()=>import("./openai-
|
|
67
|
+
`);for(const r of t){const n=r.trim();if(!n||n.startsWith("#"))continue;const i=n.match(/^([A-Z_][A-Z0-9_]*)\s*=\s*(.*)$/i);if(!i)continue;const[,e,a]=i;let o=a.trim();(o.startsWith('"')&&o.endsWith('"')||o.startsWith("'")&&o.endsWith("'"))&&(o=o.slice(1,-1)),D[e]=o}return D}s(no,"parseEnvContent");async function Qe(u){const{filename:D=".env",directory:t=process.cwd(),override:r=!1}=u||{},n=N.join(t,D);if(!await hu(n))return{};try{const e=await O.readFile(n,"utf8"),a=no(e);for(const[o,c]of Object.entries(a))(r||process.env[o]===void 0)&&(process.env[o]=c);return a}catch{return{}}}s(Qe,"loadEnvFile");async function io(){process.env.NODE_ENV==="test"?await Qe({filename:".env.local"}):await Qe({filename:".env"})}s(io,"loadEnvironment");const ut=["openai","anthropic","azure-openai","ollama","custom"],oo=["","conventional"],{hasOwnProperty:so}=Object.prototype,Dt=s((u,D)=>so.call(u,D),"hasOwn"),v=s((u,D,t)=>{if(!D)throw new y(`Invalid config property ${u}: ${t}`)},"parseAssert"),gu={provider(u){return u?(v("provider",ut.includes(u),`Must be one of: ${ut.join(", ")}`),u):"openai"},OPENAI_KEY(u){if(u)return v("OPENAI_KEY",u.startsWith("sk-"),'Must start with "sk-"'),u},ANTHROPIC_KEY(u){if(u)return v("ANTHROPIC_KEY",u.startsWith("sk-ant-"),'Must start with "sk-ant-"'),u},AZURE_OPENAI_KEY(u){return u},AZURE_ENDPOINT(u){if(u)return v("AZURE_ENDPOINT",/^https?:\/\//.test(u),"Must be a valid URL"),u},OLLAMA_ENDPOINT(u){return u?(v("OLLAMA_ENDPOINT",/^https?:\/\//.test(u),"Must be a valid URL"),u):"http://localhost:11434"},CUSTOM_ENDPOINT(u){if(u)return v("CUSTOM_ENDPOINT",/^https?:\/\//.test(u),"Must be a valid URL"),u},CUSTOM_KEY(u){return u},locale(u){return u?(v("locale",u,"Cannot be empty"),v("locale",/^[a-z-]+$/i.test(u),"Must be a valid locale (letters and dashes/underscores). You can consult the list of codes in: https://wikipedia.org/wiki/List_of_ISO_639-1_codes"),u):"en"},generate(u){if(!u)return 1;v("generate",/^\d+$/.test(u),"Must be an integer");const D=Number(u);return v("generate",D>0,"Must be greater than 0"),v("generate",D<=5,"Must be less or equal to 5"),D},type(u){return u?(v("type",oo.includes(u),"Invalid commit type"),u):""},proxy(u){if(!(!u||u.length===0))return v("proxy",/^https?:\/\//.test(u),"Must be a valid URL"),u},model(u){return!u||u.length===0?"gpt-4o-mini":u},timeout(u){if(!u)return 1e4;v("timeout",/^\d+$/.test(u),"Must be an integer");const D=Number(u);return v("timeout",D>=500,"Must be greater than 500ms"),D},temperature(u){if(!u)return .2;v("temperature",/^(2|\d)(\.\d{1,2})?$/.test(u),"Must be decimal between 0 and 2");const D=Number(u);return v("temperature",D>0,"Must be greater than 0"),v("temperature",D<=2,"Must be less than or equal to 2"),D},"max-length"(u){if(!u)return 50;v("max-length",/^\d+$/.test(u),"Must be an integer");const D=Number(u);return v("max-length",D>=20,"Must be greater than 20 characters"),D},"max-completion-tokens"(u){if(!u)return 1e4;v("max-completion-tokens",/^\d+$/.test(u),"Must be an integer");const D=Number(u);return v("max-completion-tokens",D>0,"Must be greater than 0"),D},"auto-confirm"(u){return u?typeof u=="boolean"?u:(v("auto-confirm",/^(?:true|false)$/.test(u),"Must be a boolean"),u==="true"):!1},"prepend-reference"(u){return u?typeof u=="boolean"?u:(v("prepend-reference",/^(?:true|false)$/.test(u),"Must be a boolean"),u==="true"):!1}},pD=N.join(yt.homedir(),".aicommit"),et=s(async()=>{if(!await hu(pD))return Object.create(null);const D=await O.readFile(pD,"utf8");return Xe.parse(D)},"readConfigFile"),ao=s(u=>{const D=u.provider;switch(D){case"openai":if(!u.OPENAI_KEY)throw new y("Please set your OpenAI API key via `aicommit config set OPENAI_KEY=<your token>`");break;case"anthropic":if(!u.ANTHROPIC_KEY)throw new y("Please set your Anthropic API key via `aicommit config set ANTHROPIC_KEY=<your token>`\nGet your API key from: https://console.anthropic.com/");break;case"azure-openai":if(!u.AZURE_OPENAI_KEY)throw new y("Please set your Azure OpenAI API key via `aicommit config set AZURE_OPENAI_KEY=<your token>`");if(!u.AZURE_ENDPOINT)throw new y("Please set your Azure OpenAI endpoint via `aicommit config set AZURE_ENDPOINT=<your endpoint>`");break;case"ollama":break;case"custom":if(!u.CUSTOM_ENDPOINT)throw new y("Please set your custom endpoint via `aicommit config set CUSTOM_ENDPOINT=<your endpoint>`");break;default:throw new y(`Unknown provider: ${D}`)}},"validateProviderConfig"),mD=s(async(u,D)=>{await io();const t=await et(),r=await dD(),n={};for(const e of Object.keys(gu)){const a=gu[e];let o=r?.[e]??u?.[e]??process.env[e]??t[e];if(typeof o=="boolean"&&(o=o.toString()),D)try{n[e]=a(o)}catch{}else n[e]=a(o)}const i=n;return D||ao(i),i},"getConfig"),co=s(async u=>{const D=await et();for(const[t,r]of u){if(!Dt(gu,t))throw new y(`Invalid config property: ${t}`);const n=gu[t](r);D[t]=n}await O.writeFile(pD,Xe.stringify(D),"utf8")},"setConfigs"),tt={openai:s(()=>import("./openai-DOoXNJei.mjs"),"openai"),anthropic:s(()=>import("./anthropic-Br4ZgF9g.mjs"),"anthropic"),"azure-openai":s(()=>import("./azure-openai-ZOLbXbz1.mjs"),"azure-openai"),ollama:s(()=>import("./ollama-Dlmtqnnc.mjs"),"ollama"),custom:s(()=>import("./custom-6acXam9Q.mjs"),"custom")};async function rt(u,D){const t=tt[u];if(!t)throw new y(`Unknown provider type: ${u}. Supported providers: ${Object.keys(tt).join(", ")}`);try{const n=(await t()).default;return new n(D)}catch(r){throw r instanceof y?r:r.code==="ERR_MODULE_NOT_FOUND"?new y(`Provider "${u}" is not yet implemented. Currently supported: openai`):new y(`Failed to initialize provider "${u}": ${r.message}`)}}s(rt,"createProvider");var lo=s(async(u,D,t,r,n)=>(async()=>{He(xe($e(" aicommit "))),await CD();const i=lD();t&&await z("git",["add","--update"]),i.start("Detecting staged files");const e=await Ze(D);if(!e)throw i.stop("Detecting staged files"),new y("No staged changes found. Stage your changes manually, or automatically stage all changes with the `--all` flag.");i.stop(`${eo(e.files)}:
|
|
68
68
|
${e.files.map(C=>` ${C}`).join(`
|
|
69
69
|
`)}`);const{env:a}=process,o=await mD({OPENAI_KEY:a.OPENAI_KEY||a.OPENAI_API_KEY,proxy:a.https_proxy||a.HTTPS_PROXY||a.http_proxy||a.HTTP_PROXY,generate:u?.toString(),type:r?.toString()}),c=lD();c.start("The AI is analyzing your changes");let l;try{const C={model:o.model,locale:o.locale,maxLength:o["max-length"],type:o.type,timeout:o.timeout,temperature:o.temperature,maxCompletionTokens:o["max-completion-tokens"],proxy:o.proxy};let E;switch(o.provider){case"openai":E={...C,apiKey:o.OPENAI_KEY};break;case"anthropic":E={...C,apiKey:o.ANTHROPIC_KEY};break;case"azure-openai":E={...C,apiKey:o.AZURE_OPENAI_KEY,endpoint:o.AZURE_ENDPOINT};break;case"ollama":E={...C,endpoint:o.OLLAMA_ENDPOINT};break;case"custom":E={...C,endpoint:o.CUSTOM_ENDPOINT,apiKey:o.CUSTOM_KEY};break;default:E={...C,apiKey:o.OPENAI_KEY}}const d=await rt(o.provider,E),g=await dD();l=(await d.generateCommitMessage({diff:e.diff,completions:o.generate,projectConfig:g})).messages}finally{c.stop("Changes analyzed")}if(l.length===0)throw new y("No commit messages were generated. Try again.");let F;if(l.length===1){[F]=l;let C;if(o["auto-confirm"]?(C=!0,q(`${uu("\u2714")} Auto confirmed commit message.
|
|
70
70
|
|
package/dist/cli.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import"./cli-
|
|
2
|
+
import"./cli-DBsfYXTI.mjs";import"tty";import"node:buffer";import"node:path";import"node:child_process";import"node:process";import"child_process";import"path";import"fs";import"node:url";import"node:os";import"assert";import"events";import"node:fs";import"buffer";import"stream";import"util";import"node:util";import"node:readline";import"node:stream";import"fs/promises";import"os";import"url";
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var M=Object.defineProperty;var d=(l,t)=>M(l,"name",{value:t,configurable:!0});import T from"http";import N from"https";import{L as O,g as P}from"./prompt-BMR92Sng.mjs";import{K as m}from"./cli-
|
|
1
|
+
var M=Object.defineProperty;var d=(l,t)=>M(l,"name",{value:t,configurable:!0});import T from"http";import N from"https";import{L as O,g as P}from"./prompt-BMR92Sng.mjs";import{K as m}from"./cli-DBsfYXTI.mjs";import"tty";import"node:buffer";import"node:path";import"node:child_process";import"node:process";import"child_process";import"path";import"fs";import"node:url";import"node:os";import"assert";import"events";import"node:fs";import"buffer";import"stream";import"util";import"node:util";import"node:readline";import"node:stream";import"fs/promises";import"os";import"url";const g=class g extends O{get name(){return"custom"}validateConfig(){const{endpoint:t}=this.config;if(!t)throw new m("Please set your custom endpoint via `aicommit config set CUSTOM_ENDPOINT=<your endpoint>`")}async generateCommitMessage(t){try{const o=[{role:"system",content:P(this.config.locale,this.config.maxLength,this.config.type,t.projectConfig)},{role:"user",content:t.diff}],s=[];for(let i=0;i<t.completions;i++){const e=await this.createChatCompletion(o);let n;e.choices&&e.choices[0]?.message?.content?n=e.choices[0].message.content:e.message?.content?n=e.message.content:e.content?n=e.content:typeof e=="string"&&(n=e),n&&s.push(this.sanitizeMessage(n))}return{messages:this.deduplicateMessages(s)}}catch(r){const o=r;throw o.code==="ECONNREFUSED"?new m(`Cannot connect to custom endpoint at ${this.config.endpoint}. Make sure your endpoint is running and accessible.`):o.code==="ENOTFOUND"?new m(`Error connecting to ${o.hostname} (${o.syscall}). Check your CUSTOM_ENDPOINT configuration.`):o}}async createChatCompletion(t){const r={model:this.config.model,messages:t,temperature:this.config.temperature,max_tokens:this.config.maxCompletionTokens},o={...this.config.headers||{}};this.config.apiKey&&(o.Authorization=`Bearer ${this.config.apiKey}`);const{response:s,data:a}=await this.httpPost(this.config.endpoint,"",o,r);if(!s.statusCode||s.statusCode<200||s.statusCode>299){let i=`Custom API Error: ${s.statusCode} - ${s.statusMessage}`;throw a&&(i+=`
|
|
2
2
|
|
|
3
3
|
${a}`),new m(i)}return JSON.parse(a)}async httpPost(t,r,o,s){return new Promise((a,i)=>{const e=new URL(t),n=e.protocol==="https:",y=n?N:T,C=e.pathname+(r||""),f=JSON.stringify(s),c=y.request({hostname:e.hostname,port:e.port||(n?443:80),path:C,method:"POST",headers:{...o,"Content-Type":"application/json","Content-Length":Buffer.byteLength(f)},timeout:this.config.timeout},p=>{const u=[];p.on("data",w=>u.push(w)),p.on("end",()=>{a({request:c,response:p,data:Buffer.concat(u).toString()})})});c.on("error",i),c.on("timeout",()=>{c.destroy(),i(new m(`Time out error: request took over ${this.config.timeout}ms. Try increasing the \`timeout\` config.`))}),c.write(f),c.end()})}sanitizeMessage(t){return t.trim().replace(/[\n\r]/g,"").replace(/(\w)\.$/,"$1")}deduplicateMessages(t){return Array.from(new Set(t))}};d(g,"CustomProvider");let h=g;export{h as default};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var ue=Object.defineProperty;var r=(g,o)=>ue(g,"name",{value:o,configurable:!0});import{g as ce}from"./cli-
|
|
1
|
+
var ue=Object.defineProperty;var r=(g,o)=>ue(g,"name",{value:o,configurable:!0});import{g as ce}from"./cli-DBsfYXTI.mjs";import ae from"net";import le from"tls";import fe from"url";import de from"assert";import G from"tty";import pe from"util";import he from"os";import Ce from"events";var P={},M={exports:{}},D={exports:{}},j,z;function me(){if(z)return j;z=1;var g=1e3,o=g*60,l=o*60,t=l*24,f=t*7,w=t*365.25;j=r(function(c,n){n=n||{};var e=typeof c;if(e==="string"&&c.length>0)return b(c);if(e==="number"&&isFinite(c))return n.long?i(c):v(c);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(c))},"ms");function b(c){if(c=String(c),!(c.length>100)){var n=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(c);if(n){var e=parseFloat(n[1]),a=(n[2]||"ms").toLowerCase();switch(a){case"years":case"year":case"yrs":case"yr":case"y":return e*w;case"weeks":case"week":case"w":return e*f;case"days":case"day":case"d":return e*t;case"hours":case"hour":case"hrs":case"hr":case"h":return e*l;case"minutes":case"minute":case"mins":case"min":case"m":return e*o;case"seconds":case"second":case"secs":case"sec":case"s":return e*g;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return e;default:return}}}}r(b,"parse");function v(c){var n=Math.abs(c);return n>=t?Math.round(c/t)+"d":n>=l?Math.round(c/l)+"h":n>=o?Math.round(c/o)+"m":n>=g?Math.round(c/g)+"s":c+"ms"}r(v,"fmtShort");function i(c){var n=Math.abs(c);return n>=t?p(c,n,t,"day"):n>=l?p(c,n,l,"hour"):n>=o?p(c,n,o,"minute"):n>=g?p(c,n,g,"second"):c+" ms"}r(i,"fmtLong");function p(c,n,e,a){var s=n>=e*1.5;return Math.round(c/e)+" "+a+(s?"s":"")}return r(p,"plural"),j}r(me,"requireMs");var B,V;function Y(){if(V)return B;V=1;function g(o){t.debug=t,t.default=t,t.coerce=p,t.disable=v,t.enable=w,t.enabled=i,t.humanize=me(),t.destroy=c,Object.keys(o).forEach(n=>{t[n]=o[n]}),t.names=[],t.skips=[],t.formatters={};function l(n){let e=0;for(let a=0;a<n.length;a++)e=(e<<5)-e+n.charCodeAt(a),e|=0;return t.colors[Math.abs(e)%t.colors.length]}r(l,"selectColor"),t.selectColor=l;function t(n){let e,a=null,s,h;function u(...m){if(!u.enabled)return;const C=u,d=Number(new Date),x=d-(e||d);C.diff=x,C.prev=e,C.curr=d,e=d,m[0]=t.coerce(m[0]),typeof m[0]!="string"&&m.unshift("%O");let F=0;m[0]=m[0].replace(/%([a-zA-Z%])/g,(E,T)=>{if(E==="%%")return"%";F++;const O=t.formatters[T];if(typeof O=="function"){const _=m[F];E=O.call(C,_),m.splice(F,1),F--}return E}),t.formatArgs.call(C,m),(C.log||t.log).apply(C,m)}return r(u,"debug"),u.namespace=n,u.useColors=t.useColors(),u.color=t.selectColor(n),u.extend=f,u.destroy=t.destroy,Object.defineProperty(u,"enabled",{enumerable:!0,configurable:!1,get:r(()=>a!==null?a:(s!==t.namespaces&&(s=t.namespaces,h=t.enabled(n)),h),"get"),set:r(m=>{a=m},"set")}),typeof t.init=="function"&&t.init(u),u}r(t,"createDebug");function f(n,e){const a=t(this.namespace+(typeof e>"u"?":":e)+n);return a.log=this.log,a}r(f,"extend");function w(n){t.save(n),t.namespaces=n,t.names=[],t.skips=[];const e=(typeof n=="string"?n:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(const a of e)a[0]==="-"?t.skips.push(a.slice(1)):t.names.push(a)}r(w,"enable");function b(n,e){let a=0,s=0,h=-1,u=0;for(;a<n.length;)if(s<e.length&&(e[s]===n[a]||e[s]==="*"))e[s]==="*"?(h=s,u=a,s++):(a++,s++);else if(h!==-1)s=h+1,u++,a=u;else return!1;for(;s<e.length&&e[s]==="*";)s++;return s===e.length}r(b,"matchesTemplate");function v(){const n=[...t.names,...t.skips.map(e=>"-"+e)].join(",");return t.enable(""),n}r(v,"disable");function i(n){for(const e of t.skips)if(b(n,e))return!1;for(const e of t.names)if(b(n,e))return!0;return!1}r(i,"enabled");function p(n){return n instanceof Error?n.stack||n.message:n}r(p,"coerce");function c(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return r(c,"destroy"),t.enable(t.load()),t}return r(g,"setup"),B=g,B}r(Y,"requireCommon");var J;function ge(){return J||(J=1,(function(g,o){o.formatArgs=t,o.save=f,o.load=w,o.useColors=l,o.storage=b(),o.destroy=(()=>{let i=!1;return()=>{i||(i=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})(),o.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function l(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let i;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&(i=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(i[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}r(l,"useColors");function t(i){if(i[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+i[0]+(this.useColors?"%c ":" ")+"+"+g.exports.humanize(this.diff),!this.useColors)return;const p="color: "+this.color;i.splice(1,0,p,"color: inherit");let c=0,n=0;i[0].replace(/%[a-zA-Z%]/g,e=>{e!=="%%"&&(c++,e==="%c"&&(n=c))}),i.splice(n,0,p)}r(t,"formatArgs"),o.log=console.debug||console.log||(()=>{});function f(i){try{i?o.storage.setItem("debug",i):o.storage.removeItem("debug")}catch{}}r(f,"save");function w(){let i;try{i=o.storage.getItem("debug")||o.storage.getItem("DEBUG")}catch{}return!i&&typeof process<"u"&&"env"in process&&(i=process.env.DEBUG),i}r(w,"load");function b(){try{return localStorage}catch{}}r(b,"localstorage"),g.exports=Y()(o);const{formatters:v}=g.exports;v.j=function(i){try{return JSON.stringify(i)}catch(p){return"[UnexpectedJSONParseError]: "+p.message}}})(D,D.exports)),D.exports}r(ge,"requireBrowser");var L={exports:{}},N,W;function ye(){return W||(W=1,N=r((g,o=process.argv)=>{const l=g.startsWith("-")?"":g.length===1?"-":"--",t=o.indexOf(l+g),f=o.indexOf("--");return t!==-1&&(f===-1||t<f)},"hasFlag")),N}r(ye,"requireHasFlag");var $,K;function be(){if(K)return $;K=1;const g=he,o=G,l=ye(),{env:t}=process;let f;l("no-color")||l("no-colors")||l("color=false")||l("color=never")?f=0:(l("color")||l("colors")||l("color=true")||l("color=always"))&&(f=1),"FORCE_COLOR"in t&&(t.FORCE_COLOR==="true"?f=1:t.FORCE_COLOR==="false"?f=0:f=t.FORCE_COLOR.length===0?1:Math.min(parseInt(t.FORCE_COLOR,10),3));function w(i){return i===0?!1:{level:i,hasBasic:!0,has256:i>=2,has16m:i>=3}}r(w,"translateLevel");function b(i,p){if(f===0)return 0;if(l("color=16m")||l("color=full")||l("color=truecolor"))return 3;if(l("color=256"))return 2;if(i&&!p&&f===void 0)return 0;const c=f||0;if(t.TERM==="dumb")return c;if(process.platform==="win32"){const n=g.release().split(".");return Number(n[0])>=10&&Number(n[2])>=10586?Number(n[2])>=14931?3:2:1}if("CI"in t)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI","GITHUB_ACTIONS","BUILDKITE"].some(n=>n in t)||t.CI_NAME==="codeship"?1:c;if("TEAMCITY_VERSION"in t)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(t.TEAMCITY_VERSION)?1:0;if(t.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in t){const n=parseInt((t.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(t.TERM_PROGRAM){case"iTerm.app":return n>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(t.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(t.TERM)||"COLORTERM"in t?1:c}r(b,"supportsColor");function v(i){const p=b(i,i&&i.isTTY);return w(p)}return r(v,"getSupportLevel"),$={supportsColor:v,stdout:w(b(!0,o.isatty(1))),stderr:w(b(!0,o.isatty(2)))},$}r(be,"requireSupportsColor");var Z;function ve(){return Z||(Z=1,(function(g,o){const l=G,t=pe;o.init=c,o.log=v,o.formatArgs=w,o.save=i,o.load=p,o.useColors=f,o.destroy=t.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."),o.colors=[6,2,3,4,5,1];try{const e=be();e&&(e.stderr||e).level>=2&&(o.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221])}catch{}o.inspectOpts=Object.keys(process.env).filter(e=>/^debug_/i.test(e)).reduce((e,a)=>{const s=a.substring(6).toLowerCase().replace(/_([a-z])/g,(u,m)=>m.toUpperCase());let h=process.env[a];return/^(yes|on|true|enabled)$/i.test(h)?h=!0:/^(no|off|false|disabled)$/i.test(h)?h=!1:h==="null"?h=null:h=Number(h),e[s]=h,e},{});function f(){return"colors"in o.inspectOpts?!!o.inspectOpts.colors:l.isatty(process.stderr.fd)}r(f,"useColors");function w(e){const{namespace:a,useColors:s}=this;if(s){const h=this.color,u="\x1B[3"+(h<8?h:"8;5;"+h),m=` ${u};1m${a} \x1B[0m`;e[0]=m+e[0].split(`
|
|
2
2
|
`).join(`
|
|
3
3
|
`+m),e.push(u+"m+"+g.exports.humanize(this.diff)+"\x1B[0m")}else e[0]=b()+a+" "+e[0]}r(w,"formatArgs");function b(){return o.inspectOpts.hideDate?"":new Date().toISOString()+" "}r(b,"getDate");function v(...e){return process.stderr.write(t.formatWithOptions(o.inspectOpts,...e)+`
|
|
4
4
|
`)}r(v,"log");function i(e){e?process.env.DEBUG=e:delete process.env.DEBUG}r(i,"save");function p(){return process.env.DEBUG}r(p,"load");function c(e){e.inspectOpts={};const a=Object.keys(o.inspectOpts);for(let s=0;s<a.length;s++)e.inspectOpts[a[s]]=o.inspectOpts[a[s]]}r(c,"init"),g.exports=Y()(o);const{formatters:n}=g.exports;n.o=function(e){return this.inspectOpts.colors=this.useColors,t.inspect(e,this.inspectOpts).split(`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var C=Object.defineProperty;var f=(d,t)=>C(d,"name",{value:t,configurable:!0});import M from"http";import O from"https";import{L as $,g as L}from"./prompt-BMR92Sng.mjs";import{K as m}from"./cli-
|
|
1
|
+
var C=Object.defineProperty;var f=(d,t)=>C(d,"name",{value:t,configurable:!0});import M from"http";import O from"https";import{L as $,g as L}from"./prompt-BMR92Sng.mjs";import{K as m}from"./cli-DBsfYXTI.mjs";import"tty";import"node:buffer";import"node:path";import"node:child_process";import"node:process";import"child_process";import"path";import"fs";import"node:url";import"node:os";import"assert";import"events";import"node:fs";import"buffer";import"stream";import"util";import"node:util";import"node:readline";import"node:stream";import"fs/promises";import"os";import"url";const g=class g extends ${get name(){return"ollama"}validateConfig(){const{endpoint:t}=this.config;if(!t)throw new m("Ollama endpoint is not configured. Using default: http://localhost:11434")}async generateCommitMessage(t){try{const e=[{role:"system",content:L(this.config.locale,this.config.maxLength,this.config.type,t.projectConfig)},{role:"user",content:t.diff}],o=[];for(let s=0;s<t.completions;s++){const a=(await this.createChatCompletion(e)).message.content;a&&o.push(this.sanitizeMessage(a))}return{messages:this.deduplicateMessages(o)}}catch(r){const e=r;throw e.code==="ECONNREFUSED"?new m(`Cannot connect to Ollama at ${this.config.endpoint}. Make sure Ollama is running. Install from: https://ollama.com`):e.code==="ENOTFOUND"?new m(`Error connecting to ${e.hostname} (${e.syscall}). Check your OLLAMA_ENDPOINT configuration.`):e}}async createChatCompletion(t){const r={model:this.config.model,messages:t,stream:!1,options:{temperature:this.config.temperature,num_predict:this.config.maxCompletionTokens}},{response:e,data:o}=await this.httpPost(this.config.endpoint,"/api/chat",{},r);if(!e.statusCode||e.statusCode<200||e.statusCode>299){let n=`Ollama API Error: ${e.statusCode} - ${e.statusMessage}`;if(o)try{const s=JSON.parse(o);s.error&&(n+=`
|
|
2
2
|
|
|
3
3
|
${s.error}`)}catch{n+=`
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var y=Object.defineProperty;var g=(u,t)=>y(u,"name",{value:t,configurable:!0});import d from"https";import{c as w}from"./index-
|
|
1
|
+
var y=Object.defineProperty;var g=(u,t)=>y(u,"name",{value:t,configurable:!0});import d from"https";import{c as w}from"./index-BcjrwV6E.mjs";import{L as C,g as A}from"./prompt-BMR92Sng.mjs";import{K as i}from"./cli-DBsfYXTI.mjs";import"net";import"tls";import"url";import"assert";import"tty";import"util";import"os";import"events";import"node:buffer";import"node:path";import"node:child_process";import"node:process";import"child_process";import"path";import"fs";import"node:url";import"node:os";import"node:fs";import"buffer";import"stream";import"node:util";import"node:readline";import"node:stream";import"fs/promises";const m=class m extends C{get name(){return"openai"}validateConfig(){const{apiKey:t}=this.config;if(!t)throw new i("Please set your OpenAI API key via `aicommit config set OPENAI_KEY=<your token>`");if(!t.startsWith("sk-"))throw new i('Invalid OpenAI API key: Must start with "sk-"')}async generateCommitMessage(t){try{const e=await this.createChatCompletion({model:this.config.model,messages:[{role:"system",content:A(this.config.locale,this.config.maxLength,this.config.type,t.projectConfig)},{role:"user",content:t.diff}],temperature:this.config.temperature,top_p:1,frequency_penalty:0,presence_penalty:0,max_completion_tokens:this.config.maxCompletionTokens,stream:!1,n:t.completions});return{messages:this.deduplicateMessages(e.choices.filter(s=>s.message?.content).map(s=>this.sanitizeMessage(s.message.content)))}}catch(e){const o=e;throw o.code==="ENOTFOUND"?new i(`Error connecting to ${o.hostname} (${o.syscall}). Are you connected to the internet?`):o}}async createChatCompletion(t){const{response:e,data:o}=await this.httpsPost("api.openai.com","/v1/chat/completions",{Authorization:`Bearer ${this.config.apiKey}`},t);if(!e.statusCode||e.statusCode<200||e.statusCode>299){let s=`OpenAI API Error: ${e.statusCode} - ${e.statusMessage}`;throw o&&(s+=`
|
|
2
2
|
|
|
3
3
|
${o}`),e.statusCode===500&&(s+=`
|
|
4
4
|
|