monacopilot 0.9.24 → 0.9.26
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 +10 -12
- package/build/index.d.mts +1 -1
- package/build/index.d.ts +1 -1
- package/build/index.js +8 -8
- package/build/index.mjs +7 -7
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
- [Usage](#usage)
|
|
12
12
|
- [Copilot Options](#copilot-options)
|
|
13
13
|
- [Changing the Provider and Model](#changing-the-provider-and-model)
|
|
14
|
-
- [
|
|
14
|
+
- [Completion Request Options](#completion-request-options)
|
|
15
15
|
- [Custom Headers](#custom-headers)
|
|
16
16
|
- [Custom Prompt](#custom-prompt)
|
|
17
17
|
- [Configuration Options](#configuration-options)
|
|
@@ -120,17 +120,15 @@ const copilot = new Copilot(process.env.OPENAI_API_KEY, {
|
|
|
120
120
|
|
|
121
121
|
The default provider is `groq` and the default model is `llama-3-70b`.
|
|
122
122
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
|
126
|
-
|
|
|
127
|
-
|
|
|
128
|
-
|
|
|
129
|
-
| Anthropic | Claude-3-Opus
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
## Copilot Completion Request Options
|
|
123
|
+
There are other providers and models available. Here is a list:
|
|
124
|
+
|
|
125
|
+
| Provider | Models |
|
|
126
|
+
| --------- | ------------------------------------------------------------------------- |
|
|
127
|
+
| Groq | `llama-3-70b` |
|
|
128
|
+
| OpenAI | `gpt-4o`, `gpt-4o-mini`, `o1-preview`, `o1-mini` |
|
|
129
|
+
| Anthropic | `Claude-3.5-Sonnet`, `Claude-3-Opus`, `Claude-3-Sonnet`, `Claude-3-Haiku` |
|
|
130
|
+
|
|
131
|
+
## Completion Request Options
|
|
134
132
|
|
|
135
133
|
### Custom Headers
|
|
136
134
|
|
package/build/index.d.mts
CHANGED
|
@@ -77,7 +77,7 @@ interface CopilotRegistration {
|
|
|
77
77
|
deregister: () => void;
|
|
78
78
|
}
|
|
79
79
|
|
|
80
|
-
type OpenAIModel = 'gpt-4o' | 'gpt-4o-mini';
|
|
80
|
+
type OpenAIModel = 'gpt-4o' | 'gpt-4o-mini' | 'o1-preview' | 'o1-mini';
|
|
81
81
|
type GroqModel = 'llama-3-70b';
|
|
82
82
|
type AnthropicModel = 'claude-3.5-sonnet' | 'claude-3-opus' | 'claude-3-haiku' | 'claude-3-sonnet';
|
|
83
83
|
type CompletionModel = OpenAIModel | GroqModel | AnthropicModel;
|
package/build/index.d.ts
CHANGED
|
@@ -77,7 +77,7 @@ interface CopilotRegistration {
|
|
|
77
77
|
deregister: () => void;
|
|
78
78
|
}
|
|
79
79
|
|
|
80
|
-
type OpenAIModel = 'gpt-4o' | 'gpt-4o-mini';
|
|
80
|
+
type OpenAIModel = 'gpt-4o' | 'gpt-4o-mini' | 'o1-preview' | 'o1-mini';
|
|
81
81
|
type GroqModel = 'llama-3-70b';
|
|
82
82
|
type AnthropicModel = 'claude-3.5-sonnet' | 'claude-3-opus' | 'claude-3-haiku' | 'claude-3-sonnet';
|
|
83
83
|
type CompletionModel = OpenAIModel | GroqModel | AnthropicModel;
|
package/build/index.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
"use strict";var S=Object.defineProperty;var Ce=Object.getOwnPropertyDescriptor;var ge=Object.getOwnPropertyNames;var he=Object.prototype.hasOwnProperty;var fe=(o,e)=>{for(var t in e)S(o,t,{get:e[t],enumerable:!0})},Ee=(o,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of ge(e))!he.call(o,n)&&n!==t&&S(o,n,{get:()=>e[n],enumerable:!(r=Ce(e,n))||r.enumerable});return o};var Pe=o=>Ee(S({},"__esModule",{value:!0}),o);var De={};fe(De,{Copilot:()=>O,registerCopilot:()=>me});module.exports=Pe(De);var V={"llama-3-70b":"llama3-70b-8192","gpt-4o":"gpt-4o-2024-08-06","gpt-4o-mini":"gpt-4o-mini","claude-3.5-sonnet":"claude-3.5-sonnet-20240620","claude-3-opus":"claude-3-opus-20240229","claude-3-sonnet":"claude-3-sonnet-20240229","claude-3-haiku":"claude-3-haiku-20240307"},D={groq:["llama-3-70b"],openai:["gpt-4o","gpt-4o-mini"],anthropic:["claude-3.5-sonnet","claude-3-opus","claude-3-haiku","claude-3-sonnet"]},k="llama-3-70b",T="groq",j={groq:"https://api.groq.com/openai/v1/chat/completions",openai:"https://api.openai.com/v1/chat/completions",anthropic:"https://api.anthropic.com/v1/messages"},W=.3;var G=new Set(['"',"'","`","{","}","[","]","(",")",","," ",":","."]);var x=class o{constructor(){}static getInstance(){return o.instance||(o.instance=new o),o.instance}error(e,t){console.error(this.styleMessage(t.message,e,"error")),t.stack&&console.error(this.styleStackTrace(t.stack))}warn(e,t){console.warn(this.styleMessage(t,e,"warning"))}styleMessage(e,t,r){let n=this.getTimestamp(),i="Please create an issue on GitHub if the issue persists.",
|
|
1
|
+
"use strict";var S=Object.defineProperty;var Ce=Object.getOwnPropertyDescriptor;var ge=Object.getOwnPropertyNames;var he=Object.prototype.hasOwnProperty;var fe=(o,e)=>{for(var t in e)S(o,t,{get:e[t],enumerable:!0})},Ee=(o,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of ge(e))!he.call(o,n)&&n!==t&&S(o,n,{get:()=>e[n],enumerable:!(r=Ce(e,n))||r.enumerable});return o};var Pe=o=>Ee(S({},"__esModule",{value:!0}),o);var De={};fe(De,{Copilot:()=>O,registerCopilot:()=>me});module.exports=Pe(De);var V={"llama-3-70b":"llama3-70b-8192","gpt-4o":"gpt-4o-2024-08-06","gpt-4o-mini":"gpt-4o-mini","claude-3.5-sonnet":"claude-3.5-sonnet-20240620","claude-3-opus":"claude-3-opus-20240229","claude-3-sonnet":"claude-3-sonnet-20240229","claude-3-haiku":"claude-3-haiku-20240307","o1-preview":"o1-preview","o1-mini":"o1-mini"},D={groq:["llama-3-70b"],openai:["gpt-4o","gpt-4o-mini","o1-preview","o1-mini"],anthropic:["claude-3.5-sonnet","claude-3-opus","claude-3-haiku","claude-3-sonnet"]},k="llama-3-70b",T="groq",j={groq:"https://api.groq.com/openai/v1/chat/completions",openai:"https://api.openai.com/v1/chat/completions",anthropic:"https://api.anthropic.com/v1/messages"},W=.3;var G=new Set(['"',"'","`","{","}","[","]","(",")",","," ",":","."]);var x=class o{constructor(){}static getInstance(){return o.instance||(o.instance=new o),o.instance}error(e,t){console.error(this.styleMessage(t.message,e,"error")),t.stack&&console.error(this.styleStackTrace(t.stack))}warn(e,t){console.warn(this.styleMessage(t,e,"warning"))}styleMessage(e,t,r){let n=this.getTimestamp(),i="Please create an issue on GitHub if the issue persists.",a=100,s="\u2500".repeat(a-2),l=`\u250C${s}\u2510`,c=`\u2514${s}\u2518`,m=((w,de)=>{let ue=w.split(" "),_=[],C="";return ue.forEach(U=>{(C+U).length>de&&(_.push(C.trim()),C=""),C+=U+" "}),C.trim()&&_.push(C.trim()),_})(e,a-4),P=[l,...m.map(w=>`\u2502 ${w.padEnd(a-4)} \u2502`),c].join(`
|
|
2
2
|
`);return`
|
|
3
3
|
\x1B[1m\x1B[37m[${n}]\x1B[0m${r==="error"?"\x1B[31m":"\x1B[33m"} [${t}]\x1B[0m \x1B[2m${i}\x1B[0m
|
|
4
4
|
${P}
|
|
5
5
|
`}styleStackTrace(e){return e.split(`
|
|
6
6
|
`).map((n,i)=>i===0?`\x1B[31m${n}\x1B[0m`:`\x1B[2m${n}\x1B[0m`).join(`
|
|
7
|
-
`)}getTimestamp(){return new Date().toISOString()}};var h=class h{constructor(){this.logger=x.getInstance()}static getInstance(){return h.instance}handleError(e,t){let r=this.getErrorDetails(e);return this.logger.error(t,r),r}getErrorDetails(e){return e instanceof Error?{message:e.message,name:e.name,stack:e.stack,context:e.context}:{message:String(e),name:"UnknownError"}}};h.instance=new h;var B=h;var d=(o,e)=>B.getInstance().handleError(o,e);var Y={"claude-3.5-sonnet":8192,"claude-3-opus":4096,"claude-3-haiku":4096,"claude-3-sonnet":4096};var K=(o,e)=>{let t=null,r=null,n=(...i)=>new Promise((
|
|
8
|
-
`);return e[e.length-1].length+1};var $=(o,e)=>e.getValueInRange({startLineNumber:1,startColumn:1,endLineNumber:o.lineNumber,endColumn:o.column}),H=(o,e)=>e.getValueInRange({startLineNumber:o.lineNumber,startColumn:o.column,endLineNumber:e.getLineCount(),endColumn:e.getLineMaxColumn(e.getLineCount())});var J=async(o,e,t={})=>{let r={"Content-Type":"application/json",...t.headers},n=e==="POST"&&t.body?JSON.stringify(t.body):void 0,i=await fetch(o,{method:e,headers:r,body:n,signal:t.signal});if(!i.ok)throw new Error(`${t.error||"Network error"}: ${i.statusText}`);return i.json()},Te=(o,e)=>J(o,"GET",e),xe=(o,e,t)=>J(o,"POST",{...t,body:e}),R={GET:Te,POST:xe};var Z=(o,e)=>{let t=
|
|
7
|
+
`)}getTimestamp(){return new Date().toISOString()}};var h=class h{constructor(){this.logger=x.getInstance()}static getInstance(){return h.instance}handleError(e,t){let r=this.getErrorDetails(e);return this.logger.error(t,r),r}getErrorDetails(e){return e instanceof Error?{message:e.message,name:e.name,stack:e.stack,context:e.context}:{message:String(e),name:"UnknownError"}}};h.instance=new h;var B=h;var d=(o,e)=>B.getInstance().handleError(o,e);var Y={"claude-3.5-sonnet":8192,"claude-3-opus":4096,"claude-3-haiku":4096,"claude-3-sonnet":4096};var K=(o,e)=>{let t=null,r=null,n=(...i)=>new Promise((a,s)=>{t&&(clearTimeout(t),r&&r("Cancelled")),r=s,t=setTimeout(()=>{a(o(...i)),r=null},e)});return n.cancel=()=>{t&&(clearTimeout(t),r&&r("Cancelled"),t=null,r=null)},n},M=o=>!o||o.length===0?"":o.length===1?o[0]:`${o.slice(0,-1).join(", ")} and ${o.slice(-1)}`;var y=(o,e)=>e.getLineContent(o.lineNumber)[o.column-1],X=(o,e)=>e.getLineContent(o.lineNumber).slice(o.column-1),g=(o,e)=>e.getLineContent(o.lineNumber).slice(0,o.column-1),z=o=>{let e=o.split(`
|
|
8
|
+
`);return e[e.length-1].length+1};var $=(o,e)=>e.getValueInRange({startLineNumber:1,startColumn:1,endLineNumber:o.lineNumber,endColumn:o.column}),H=(o,e)=>e.getValueInRange({startLineNumber:o.lineNumber,startColumn:o.column,endLineNumber:e.getLineCount(),endColumn:e.getLineMaxColumn(e.getLineCount())});var J=async(o,e,t={})=>{let r={"Content-Type":"application/json",...t.headers},n=e==="POST"&&t.body?JSON.stringify(t.body):void 0,i=await fetch(o,{method:e,headers:r,body:n,signal:t.signal});if(!i.ok)throw new Error(`${t.error||"Network error"}: ${i.statusText}`);return i.json()},Te=(o,e)=>J(o,"GET",e),xe=(o,e,t)=>J(o,"POST",{...t,body:e}),R={GET:Te,POST:xe};var Z=(o,e)=>{let t=y(o,e);return!!t&&!G.has(t)},Q=(o,e)=>{let t=X(o,e).trim(),r=g(o,e).trim();return o.column<=3&&(t!==""||r!=="")};var I="<<CURSOR>>",ee=o=>o==="javascript"?"latest JavaScript":o,oe=o=>{switch(o){case"fill-in-the-middle":return"filling in the middle of the code";case"completion":return"completing the code"}},Me=o=>{let e=ee(o.language),t=oe(o.editorState.completionMode),r=e?` ${e}`:"";return`You are an advanced AI coding assistant with expertise in ${t} for${r} programming. Your goal is to provide accurate, efficient, and context-aware code completions. Remember, your role is to act as an extension of the developer's thought process, providing intelligent and contextually appropriate code completions.`},ye=(o,e)=>{if(!o?.length&&!e)return"";let t=o?` using ${M(o)}`:"",r=ee(e);return`The code is written${r?` in ${r}`:""}${t}.`},Re=o=>{let{filename:e,language:t,technologies:r,editorState:{completionMode:n},textBeforeCursor:i,textAfterCursor:a,externalContext:s}=o,l=oe(n),c=e?`the file named "${e}"`:"a larger project",p=`You are tasked with ${l} for a code snippet. The code is part of ${c}.
|
|
9
9
|
|
|
10
|
-
`;return p+=
|
|
10
|
+
`;return p+=ye(r,t),p+=`
|
|
11
11
|
|
|
12
12
|
Here are the details about how the completion should be generated:
|
|
13
13
|
- The cursor position is marked with '${I}'.
|
|
@@ -23,7 +23,7 @@ Here are the details about how the completion should be generated:
|
|
|
23
23
|
Here's the code snippet for completion:
|
|
24
24
|
|
|
25
25
|
<code>
|
|
26
|
-
${i}${I}${
|
|
26
|
+
${i}${I}${a}
|
|
27
27
|
</code>`,s&&s.length>0&&(p+=`
|
|
28
28
|
|
|
29
29
|
Additional context from related files:
|
|
@@ -31,8 +31,8 @@ Additional context from related files:
|
|
|
31
31
|
`,p+=s.map(m=>`// Path: ${m.path}
|
|
32
32
|
${m.content}
|
|
33
33
|
`).join(`
|
|
34
|
-
`)),p.endsWith(".")?p:`${p}.`};function q(o){return{system:
|
|
34
|
+
`)),p.endsWith(".")?p:`${p}.`};function q(o){return{system:Me(o),user:Re(o)}}var te=(o,e,t,r)=>{let{system:n,user:i}={...q(o),...r?.(o)},a={model:ve(e),temperature:W},l=e==="o1-preview"||e==="o1-mini"?[{role:"user",content:i}]:[{role:"system",content:n},{role:"user",content:i}],c={openai:{messages:l},groq:{messages:l},anthropic:{system:n,messages:[{role:"user",content:i}],max_tokens:Le(e)}};return{...a,...c[t]}},re=(o,e)=>{let t={"Content-Type":"application/json"},r={openai:{Authorization:`Bearer ${o}`},groq:{Authorization:`Bearer ${o}`},anthropic:{"x-api-key":o,"anthropic-version":"2023-06-01"}};return{...t,...r[e]}},ne=(o,e)=>{let r={openai:Ie,groq:Oe,anthropic:be}[e];if(!r)throw new Error(`Unsupported provider: ${e}`);return r(o)},Ie=o=>o.choices?.length?{completion:o.choices[0].message.content}:{completion:null,error:"No completion found in the openai response"},Oe=o=>o.choices?.length?{completion:o.choices[0].message.content}:{completion:null,error:"No completion found in the groq response"},be=o=>o.content?typeof o.content!="string"?{completion:null,error:"Completion content is not a string"}:{completion:o.content}:{completion:null,error:"No completion found in the anthropic response"},ve=o=>V[o],ie=o=>j[o],Le=o=>Y[o]||4096;var O=class{constructor(e,t={}){this.validateInputs(e,t),this.apiKey=e,this.provider=t.provider??T,this.model=t.model??k}async complete({body:e,options:t}){let{completionMetadata:r}=e,{headers:n={},customPrompt:i}=t??{};try{let a=te(r,this.model,this.provider,i),s=ie(this.provider),l=re(this.apiKey,this.provider),c={...n,...l},p=await R.POST(s,a,{headers:c});return ne(p,this.provider)}catch(a){return{error:d(a,"COPILOT_COMPLETION_FETCH_ERROR").message,completion:null}}}validateInputs(e,t){if(!e)throw new Error(`Please provide ${this.provider??T} API key.`);let{provider:r,model:n}=t;if(r&&!n||!r&&n)throw new Error("Both provider and model must be specified together");let i=r??T,a=n??k;if(!D[i].includes(a)){let s=M(D[i]);throw new Error(`Model ${a} is not supported by ${i} provider. Supported models: ${s}`)}}};var b=class o{constructor(e){this.formattedCompletion="";this.formattedCompletion=e}static create(e){return new o(e)}setCompletion(e){return this.formattedCompletion=e,this}removeInvalidLineBreaks(){return this.formattedCompletion=this.formattedCompletion.trimEnd(),this}removeMarkdownCodeSyntax(){return this.formattedCompletion=this.removeMarkdownCodeBlocks(this.formattedCompletion),this}removeMarkdownCodeBlocks(e){let t=/```[\s\S]*?```/g,r=e,n;for(;(n=t.exec(e))!==null;){let i=n[0],a=i.split(`
|
|
35
35
|
`).slice(1,-1).join(`
|
|
36
|
-
`);r=r.replace(i,
|
|
36
|
+
`);r=r.replace(i,a)}return r.trim()}removeExcessiveNewlines(){return this.formattedCompletion=this.formattedCompletion.replace(/\n{3,}/g,`
|
|
37
37
|
|
|
38
|
-
`),this}build(){return this.formattedCompletion}};var v=class{constructor(e,t){this.cursorPosition=e,this.model=t}shouldProvideCompletions(){return!Z(this.cursorPosition,this.model)&&!Q(this.cursorPosition,this.model)}};var A=class A{constructor(){this.cache=[]}getCompletionCache(e,t){return this.cache.filter(r=>this.isCacheItemValid(r,e,t))}addCompletionCache(e){this.cache=[...this.cache.slice(-(A.MAX_CACHE_SIZE-1)),e]}clearCompletionCache(){this.cache=[]}isCacheItemValid(e,t,r){let n=r.getValueInRange(e.range);return g(t,r).startsWith(e.textBeforeCursorInLine)&&this.isPositionValid(e,t,n)}isPositionValid(e,t,r){return e.range.startLineNumber===t.lineNumber&&t.column===e.range.startColumn||e.completion.startsWith(r)&&e.range.startLineNumber===t.lineNumber&&t.column>=e.range.startColumn-r.length&&t.column<=e.range.endColumn}};A.MAX_CACHE_SIZE=10;var L=A;var Ae="application/json",se=async({filename:o,endpoint:e,language:t,technologies:r,externalContext:n,model:i,position:
|
|
38
|
+
`),this}build(){return this.formattedCompletion}};var v=class{constructor(e,t){this.cursorPosition=e,this.model=t}shouldProvideCompletions(){return!Z(this.cursorPosition,this.model)&&!Q(this.cursorPosition,this.model)}};var A=class A{constructor(){this.cache=[]}getCompletionCache(e,t){return this.cache.filter(r=>this.isCacheItemValid(r,e,t))}addCompletionCache(e){this.cache=[...this.cache.slice(-(A.MAX_CACHE_SIZE-1)),e]}clearCompletionCache(){this.cache=[]}isCacheItemValid(e,t,r){let n=r.getValueInRange(e.range);return g(t,r).startsWith(e.textBeforeCursorInLine)&&this.isPositionValid(e,t,n)}isPositionValid(e,t,r){return e.range.startLineNumber===t.lineNumber&&t.column===e.range.startColumn||e.completion.startsWith(r)&&e.range.startLineNumber===t.lineNumber&&t.column>=e.range.startColumn-r.length&&t.column<=e.range.endColumn}};A.MAX_CACHE_SIZE=10;var L=A;var Ae="application/json",se=async({filename:o,endpoint:e,language:t,technologies:r,externalContext:n,model:i,position:a})=>{try{let{completion:s}=await R.POST(e,{completionMetadata:Ne({filename:o,position:a,model:i,language:t,technologies:r,externalContext:n})},{headers:{"Content-Type":Ae},error:"Error while fetching completion item"});return s}catch(s){return d(s,"FETCH_COMPLETION_ITEM_ERROR"),null}},Ne=({filename:o,position:e,model:t,language:r,technologies:n,externalContext:i})=>{let a=we(e,t),s=$(e,t),l=H(e,t);return{filename:o,language:r,technologies:n,externalContext:i,textBeforeCursor:s,textAfterCursor:l,cursorPosition:e,editorState:{completionMode:a}}},we=(o,e)=>{let t=$(o,e),r=H(o,e);return t&&r?"fill-in-the-middle":"completion"};var le=(o,e,t,r)=>{let n=(o.match(/\n/g)||[]).length,i=z(o),a=y(t,r);return{startLineNumber:t.lineNumber,startColumn:t.column,endLineNumber:t.lineNumber+n,endColumn:o.includes(a)?t.lineNumber===e.startLineNumber&&n===0?t.column+(i-1):i:t.column}};function ae(o){return b.create(o).removeMarkdownCodeSyntax().removeExcessiveNewlines().removeInvalidLineBreaks().build()}var u=o=>({items:o,enableForwardStability:!0});var _e=300,pe=K(se,_e),N=new L,Se=async({monaco:o,model:e,position:t,token:r,isCompletionAccepted:n,onShowCompletion:i,options:a})=>{if(!new v(t,e).shouldProvideCompletions())return u([]);let s=N.getCompletionCache(t,e).map(l=>({insertText:l.completion,range:l.range}));if(s.length)return i(),u(s);if(r.isCancellationRequested||n)return u([]);try{let l=pe({...a,text:e.getValue(),model:e,position:t});r.onCancellationRequested(()=>{pe.cancel()});let c=await l;if(c){let p=ae(c),m=new o.Range(t.lineNumber,t.column,t.lineNumber,t.column),P=le(p,m,t,e);return N.addCompletionCache({completion:p,range:P,textBeforeCursorInLine:g(t,e)}),i(),u([{insertText:p,range:P}])}}catch(l){if(typeof l=="string"&&(l==="Cancelled"||l==="AbortError")||l instanceof Error&&(l.message==="Cancelled"||l.name==="AbortError"))return u([]);d(l,"FETCH_COMPLETION_ITEM_ERROR")}return u([])},ce=Se;var f=new WeakMap,E=null,me=(o,e,t)=>{E&&E.deregister();let r=[];f.set(e,{isCompletionAccepted:!1,isCompletionVisible:!1});try{let n=o.languages.registerInlineCompletionsProvider(t.language,{provideInlineCompletions:(s,l,c,p)=>{let m=f.get(e);if(m)return ce({monaco:o,model:s,position:l,token:p,isCompletionAccepted:m.isCompletionAccepted,onShowCompletion:()=>{m.isCompletionVisible=!0},options:t})},freeInlineCompletions:()=>{}});r.push(n);let i=e.onKeyDown(s=>{let l=f.get(e);if(!l)return;let c=s.keyCode===o.KeyCode.Tab||s.keyCode===o.KeyCode.RightArrow&&s.metaKey;l.isCompletionVisible&&c?(l.isCompletionAccepted=!0,l.isCompletionVisible=!1):l.isCompletionAccepted=!1});r.push(i);let a={deregister:()=>{r.forEach(s=>s.dispose()),N.clearCompletionCache(),f.delete(e),E=null}};return E=a,a}catch(n){return d(n,"REGISTER_COPILOT_ERROR"),{deregister:()=>{r.forEach(i=>i.dispose()),f.delete(e),E=null}}}};0&&(module.exports={Copilot,registerCopilot});
|
package/build/index.mjs
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
var U={"llama-3-70b":"llama3-70b-8192","gpt-4o":"gpt-4o-2024-08-06","gpt-4o-mini":"gpt-4o-mini","claude-3.5-sonnet":"claude-3.5-sonnet-20240620","claude-3-opus":"claude-3-opus-20240229","claude-3-sonnet":"claude-3-sonnet-20240229","claude-3-haiku":"claude-3-haiku-20240307"},_={groq:["llama-3-70b"],openai:["gpt-4o","gpt-4o-mini"],anthropic:["claude-3.5-sonnet","claude-3-opus","claude-3-haiku","claude-3-sonnet"]},S="llama-3-70b",T="groq",V={groq:"https://api.groq.com/openai/v1/chat/completions",openai:"https://api.openai.com/v1/chat/completions",anthropic:"https://api.anthropic.com/v1/messages"},j=.3;var W=new Set(['"',"'","`","{","}","[","]","(",")",","," ",":","."]);var x=class o{constructor(){}static getInstance(){return o.instance||(o.instance=new o),o.instance}error(e,t){console.error(this.styleMessage(t.message,e,"error")),t.stack&&console.error(this.styleStackTrace(t.stack))}warn(e,t){console.warn(this.styleMessage(t,e,"warning"))}styleMessage(e,t,r){let n=this.getTimestamp(),i="Please create an issue on GitHub if the issue persists.",
|
|
1
|
+
var U={"llama-3-70b":"llama3-70b-8192","gpt-4o":"gpt-4o-2024-08-06","gpt-4o-mini":"gpt-4o-mini","claude-3.5-sonnet":"claude-3.5-sonnet-20240620","claude-3-opus":"claude-3-opus-20240229","claude-3-sonnet":"claude-3-sonnet-20240229","claude-3-haiku":"claude-3-haiku-20240307","o1-preview":"o1-preview","o1-mini":"o1-mini"},_={groq:["llama-3-70b"],openai:["gpt-4o","gpt-4o-mini","o1-preview","o1-mini"],anthropic:["claude-3.5-sonnet","claude-3-opus","claude-3-haiku","claude-3-sonnet"]},S="llama-3-70b",T="groq",V={groq:"https://api.groq.com/openai/v1/chat/completions",openai:"https://api.openai.com/v1/chat/completions",anthropic:"https://api.anthropic.com/v1/messages"},j=.3;var W=new Set(['"',"'","`","{","}","[","]","(",")",","," ",":","."]);var x=class o{constructor(){}static getInstance(){return o.instance||(o.instance=new o),o.instance}error(e,t){console.error(this.styleMessage(t.message,e,"error")),t.stack&&console.error(this.styleStackTrace(t.stack))}warn(e,t){console.warn(this.styleMessage(t,e,"warning"))}styleMessage(e,t,r){let n=this.getTimestamp(),i="Please create an issue on GitHub if the issue persists.",a=100,s="\u2500".repeat(a-2),l=`\u250C${s}\u2510`,c=`\u2514${s}\u2518`,m=((N,ce)=>{let me=N.split(" "),w=[],C="";return me.forEach(F=>{(C+F).length>ce&&(w.push(C.trim()),C=""),C+=F+" "}),C.trim()&&w.push(C.trim()),w})(e,a-4),P=[l,...m.map(N=>`\u2502 ${N.padEnd(a-4)} \u2502`),c].join(`
|
|
2
2
|
`);return`
|
|
3
3
|
\x1B[1m\x1B[37m[${n}]\x1B[0m${r==="error"?"\x1B[31m":"\x1B[33m"} [${t}]\x1B[0m \x1B[2m${i}\x1B[0m
|
|
4
4
|
${P}
|
|
5
5
|
`}styleStackTrace(e){return e.split(`
|
|
6
6
|
`).map((n,i)=>i===0?`\x1B[31m${n}\x1B[0m`:`\x1B[2m${n}\x1B[0m`).join(`
|
|
7
|
-
`)}getTimestamp(){return new Date().toISOString()}};var h=class h{constructor(){this.logger=x.getInstance()}static getInstance(){return h.instance}handleError(e,t){let r=this.getErrorDetails(e);return this.logger.error(t,r),r}getErrorDetails(e){return e instanceof Error?{message:e.message,name:e.name,stack:e.stack,context:e.context}:{message:String(e),name:"UnknownError"}}};h.instance=new h;var D=h;var d=(o,e)=>D.getInstance().handleError(o,e);var G={"claude-3.5-sonnet":8192,"claude-3-opus":4096,"claude-3-haiku":4096,"claude-3-sonnet":4096};var Y=(o,e)=>{let t=null,r=null,n=(...i)=>new Promise((
|
|
8
|
-
`);return e[e.length-1].length+1};var k=(o,e)=>e.getValueInRange({startLineNumber:1,startColumn:1,endLineNumber:o.lineNumber,endColumn:o.column}),B=(o,e)=>e.getValueInRange({startLineNumber:o.lineNumber,startColumn:o.column,endLineNumber:e.getLineCount(),endColumn:e.getLineMaxColumn(e.getLineCount())});var z=async(o,e,t={})=>{let r={"Content-Type":"application/json",...t.headers},n=e==="POST"&&t.body?JSON.stringify(t.body):void 0,i=await fetch(o,{method:e,headers:r,body:n,signal:t.signal});if(!i.ok)throw new Error(`${t.error||"Network error"}: ${i.statusText}`);return i.json()},de=(o,e)=>z(o,"GET",e),ue=(o,e,t)=>z(o,"POST",{...t,body:e}),R={GET:de,POST:ue};var J=(o,e)=>{let t=
|
|
7
|
+
`)}getTimestamp(){return new Date().toISOString()}};var h=class h{constructor(){this.logger=x.getInstance()}static getInstance(){return h.instance}handleError(e,t){let r=this.getErrorDetails(e);return this.logger.error(t,r),r}getErrorDetails(e){return e instanceof Error?{message:e.message,name:e.name,stack:e.stack,context:e.context}:{message:String(e),name:"UnknownError"}}};h.instance=new h;var D=h;var d=(o,e)=>D.getInstance().handleError(o,e);var G={"claude-3.5-sonnet":8192,"claude-3-opus":4096,"claude-3-haiku":4096,"claude-3-sonnet":4096};var Y=(o,e)=>{let t=null,r=null,n=(...i)=>new Promise((a,s)=>{t&&(clearTimeout(t),r&&r("Cancelled")),r=s,t=setTimeout(()=>{a(o(...i)),r=null},e)});return n.cancel=()=>{t&&(clearTimeout(t),r&&r("Cancelled"),t=null,r=null)},n},M=o=>!o||o.length===0?"":o.length===1?o[0]:`${o.slice(0,-1).join(", ")} and ${o.slice(-1)}`;var y=(o,e)=>e.getLineContent(o.lineNumber)[o.column-1],K=(o,e)=>e.getLineContent(o.lineNumber).slice(o.column-1),g=(o,e)=>e.getLineContent(o.lineNumber).slice(0,o.column-1),X=o=>{let e=o.split(`
|
|
8
|
+
`);return e[e.length-1].length+1};var k=(o,e)=>e.getValueInRange({startLineNumber:1,startColumn:1,endLineNumber:o.lineNumber,endColumn:o.column}),B=(o,e)=>e.getValueInRange({startLineNumber:o.lineNumber,startColumn:o.column,endLineNumber:e.getLineCount(),endColumn:e.getLineMaxColumn(e.getLineCount())});var z=async(o,e,t={})=>{let r={"Content-Type":"application/json",...t.headers},n=e==="POST"&&t.body?JSON.stringify(t.body):void 0,i=await fetch(o,{method:e,headers:r,body:n,signal:t.signal});if(!i.ok)throw new Error(`${t.error||"Network error"}: ${i.statusText}`);return i.json()},de=(o,e)=>z(o,"GET",e),ue=(o,e,t)=>z(o,"POST",{...t,body:e}),R={GET:de,POST:ue};var J=(o,e)=>{let t=y(o,e);return!!t&&!W.has(t)},Z=(o,e)=>{let t=K(o,e).trim(),r=g(o,e).trim();return o.column<=3&&(t!==""||r!=="")};var I="<<CURSOR>>",Q=o=>o==="javascript"?"latest JavaScript":o,ee=o=>{switch(o){case"fill-in-the-middle":return"filling in the middle of the code";case"completion":return"completing the code"}},Ce=o=>{let e=Q(o.language),t=ee(o.editorState.completionMode),r=e?` ${e}`:"";return`You are an advanced AI coding assistant with expertise in ${t} for${r} programming. Your goal is to provide accurate, efficient, and context-aware code completions. Remember, your role is to act as an extension of the developer's thought process, providing intelligent and contextually appropriate code completions.`},ge=(o,e)=>{if(!o?.length&&!e)return"";let t=o?` using ${M(o)}`:"",r=Q(e);return`The code is written${r?` in ${r}`:""}${t}.`},he=o=>{let{filename:e,language:t,technologies:r,editorState:{completionMode:n},textBeforeCursor:i,textAfterCursor:a,externalContext:s}=o,l=ee(n),c=e?`the file named "${e}"`:"a larger project",p=`You are tasked with ${l} for a code snippet. The code is part of ${c}.
|
|
9
9
|
|
|
10
10
|
`;return p+=ge(r,t),p+=`
|
|
11
11
|
|
|
@@ -23,7 +23,7 @@ Here are the details about how the completion should be generated:
|
|
|
23
23
|
Here's the code snippet for completion:
|
|
24
24
|
|
|
25
25
|
<code>
|
|
26
|
-
${i}${I}${
|
|
26
|
+
${i}${I}${a}
|
|
27
27
|
</code>`,s&&s.length>0&&(p+=`
|
|
28
28
|
|
|
29
29
|
Additional context from related files:
|
|
@@ -31,8 +31,8 @@ Additional context from related files:
|
|
|
31
31
|
`,p+=s.map(m=>`// Path: ${m.path}
|
|
32
32
|
${m.content}
|
|
33
33
|
`).join(`
|
|
34
|
-
`)),p.endsWith(".")?p:`${p}.`};function $(o){return{system:Ce(o),user:he(o)}}var oe=(o,e,t,r)=>{let
|
|
34
|
+
`)),p.endsWith(".")?p:`${p}.`};function $(o){return{system:Ce(o),user:he(o)}}var oe=(o,e,t,r)=>{let{system:n,user:i}={...$(o),...r?.(o)},a={model:Te(e),temperature:j},l=e==="o1-preview"||e==="o1-mini"?[{role:"user",content:i}]:[{role:"system",content:n},{role:"user",content:i}],c={openai:{messages:l},groq:{messages:l},anthropic:{system:n,messages:[{role:"user",content:i}],max_tokens:xe(e)}};return{...a,...c[t]}},te=(o,e)=>{let t={"Content-Type":"application/json"},r={openai:{Authorization:`Bearer ${o}`},groq:{Authorization:`Bearer ${o}`},anthropic:{"x-api-key":o,"anthropic-version":"2023-06-01"}};return{...t,...r[e]}},re=(o,e)=>{let r={openai:fe,groq:Ee,anthropic:Pe}[e];if(!r)throw new Error(`Unsupported provider: ${e}`);return r(o)},fe=o=>o.choices?.length?{completion:o.choices[0].message.content}:{completion:null,error:"No completion found in the openai response"},Ee=o=>o.choices?.length?{completion:o.choices[0].message.content}:{completion:null,error:"No completion found in the groq response"},Pe=o=>o.content?typeof o.content!="string"?{completion:null,error:"Completion content is not a string"}:{completion:o.content}:{completion:null,error:"No completion found in the anthropic response"},Te=o=>U[o],ne=o=>V[o],xe=o=>G[o]||4096;var H=class{constructor(e,t={}){this.validateInputs(e,t),this.apiKey=e,this.provider=t.provider??T,this.model=t.model??S}async complete({body:e,options:t}){let{completionMetadata:r}=e,{headers:n={},customPrompt:i}=t??{};try{let a=oe(r,this.model,this.provider,i),s=ne(this.provider),l=te(this.apiKey,this.provider),c={...n,...l},p=await R.POST(s,a,{headers:c});return re(p,this.provider)}catch(a){return{error:d(a,"COPILOT_COMPLETION_FETCH_ERROR").message,completion:null}}}validateInputs(e,t){if(!e)throw new Error(`Please provide ${this.provider??T} API key.`);let{provider:r,model:n}=t;if(r&&!n||!r&&n)throw new Error("Both provider and model must be specified together");let i=r??T,a=n??S;if(!_[i].includes(a)){let s=M(_[i]);throw new Error(`Model ${a} is not supported by ${i} provider. Supported models: ${s}`)}}};var O=class o{constructor(e){this.formattedCompletion="";this.formattedCompletion=e}static create(e){return new o(e)}setCompletion(e){return this.formattedCompletion=e,this}removeInvalidLineBreaks(){return this.formattedCompletion=this.formattedCompletion.trimEnd(),this}removeMarkdownCodeSyntax(){return this.formattedCompletion=this.removeMarkdownCodeBlocks(this.formattedCompletion),this}removeMarkdownCodeBlocks(e){let t=/```[\s\S]*?```/g,r=e,n;for(;(n=t.exec(e))!==null;){let i=n[0],a=i.split(`
|
|
35
35
|
`).slice(1,-1).join(`
|
|
36
|
-
`);r=r.replace(i,
|
|
36
|
+
`);r=r.replace(i,a)}return r.trim()}removeExcessiveNewlines(){return this.formattedCompletion=this.formattedCompletion.replace(/\n{3,}/g,`
|
|
37
37
|
|
|
38
|
-
`),this}build(){return this.formattedCompletion}};var b=class{constructor(e,t){this.cursorPosition=e,this.model=t}shouldProvideCompletions(){return!J(this.cursorPosition,this.model)&&!Z(this.cursorPosition,this.model)}};var L=class L{constructor(){this.cache=[]}getCompletionCache(e,t){return this.cache.filter(r=>this.isCacheItemValid(r,e,t))}addCompletionCache(e){this.cache=[...this.cache.slice(-(L.MAX_CACHE_SIZE-1)),e]}clearCompletionCache(){this.cache=[]}isCacheItemValid(e,t,r){let n=r.getValueInRange(e.range);return g(t,r).startsWith(e.textBeforeCursorInLine)&&this.isPositionValid(e,t,n)}isPositionValid(e,t,r){return e.range.startLineNumber===t.lineNumber&&t.column===e.range.startColumn||e.completion.startsWith(r)&&e.range.startLineNumber===t.lineNumber&&t.column>=e.range.startColumn-r.length&&t.column<=e.range.endColumn}};L.MAX_CACHE_SIZE=10;var v=L;var
|
|
38
|
+
`),this}build(){return this.formattedCompletion}};var b=class{constructor(e,t){this.cursorPosition=e,this.model=t}shouldProvideCompletions(){return!J(this.cursorPosition,this.model)&&!Z(this.cursorPosition,this.model)}};var L=class L{constructor(){this.cache=[]}getCompletionCache(e,t){return this.cache.filter(r=>this.isCacheItemValid(r,e,t))}addCompletionCache(e){this.cache=[...this.cache.slice(-(L.MAX_CACHE_SIZE-1)),e]}clearCompletionCache(){this.cache=[]}isCacheItemValid(e,t,r){let n=r.getValueInRange(e.range);return g(t,r).startsWith(e.textBeforeCursorInLine)&&this.isPositionValid(e,t,n)}isPositionValid(e,t,r){return e.range.startLineNumber===t.lineNumber&&t.column===e.range.startColumn||e.completion.startsWith(r)&&e.range.startLineNumber===t.lineNumber&&t.column>=e.range.startColumn-r.length&&t.column<=e.range.endColumn}};L.MAX_CACHE_SIZE=10;var v=L;var Me="application/json",ie=async({filename:o,endpoint:e,language:t,technologies:r,externalContext:n,model:i,position:a})=>{try{let{completion:s}=await R.POST(e,{completionMetadata:ye({filename:o,position:a,model:i,language:t,technologies:r,externalContext:n})},{headers:{"Content-Type":Me},error:"Error while fetching completion item"});return s}catch(s){return d(s,"FETCH_COMPLETION_ITEM_ERROR"),null}},ye=({filename:o,position:e,model:t,language:r,technologies:n,externalContext:i})=>{let a=Re(e,t),s=k(e,t),l=B(e,t);return{filename:o,language:r,technologies:n,externalContext:i,textBeforeCursor:s,textAfterCursor:l,cursorPosition:e,editorState:{completionMode:a}}},Re=(o,e)=>{let t=k(o,e),r=B(o,e);return t&&r?"fill-in-the-middle":"completion"};var se=(o,e,t,r)=>{let n=(o.match(/\n/g)||[]).length,i=X(o),a=y(t,r);return{startLineNumber:t.lineNumber,startColumn:t.column,endLineNumber:t.lineNumber+n,endColumn:o.includes(a)?t.lineNumber===e.startLineNumber&&n===0?t.column+(i-1):i:t.column}};function le(o){return O.create(o).removeMarkdownCodeSyntax().removeExcessiveNewlines().removeInvalidLineBreaks().build()}var u=o=>({items:o,enableForwardStability:!0});var Ie=300,ae=Y(ie,Ie),A=new v,Oe=async({monaco:o,model:e,position:t,token:r,isCompletionAccepted:n,onShowCompletion:i,options:a})=>{if(!new b(t,e).shouldProvideCompletions())return u([]);let s=A.getCompletionCache(t,e).map(l=>({insertText:l.completion,range:l.range}));if(s.length)return i(),u(s);if(r.isCancellationRequested||n)return u([]);try{let l=ae({...a,text:e.getValue(),model:e,position:t});r.onCancellationRequested(()=>{ae.cancel()});let c=await l;if(c){let p=le(c),m=new o.Range(t.lineNumber,t.column,t.lineNumber,t.column),P=se(p,m,t,e);return A.addCompletionCache({completion:p,range:P,textBeforeCursorInLine:g(t,e)}),i(),u([{insertText:p,range:P}])}}catch(l){if(typeof l=="string"&&(l==="Cancelled"||l==="AbortError")||l instanceof Error&&(l.message==="Cancelled"||l.name==="AbortError"))return u([]);d(l,"FETCH_COMPLETION_ITEM_ERROR")}return u([])},pe=Oe;var f=new WeakMap,E=null,be=(o,e,t)=>{E&&E.deregister();let r=[];f.set(e,{isCompletionAccepted:!1,isCompletionVisible:!1});try{let n=o.languages.registerInlineCompletionsProvider(t.language,{provideInlineCompletions:(s,l,c,p)=>{let m=f.get(e);if(m)return pe({monaco:o,model:s,position:l,token:p,isCompletionAccepted:m.isCompletionAccepted,onShowCompletion:()=>{m.isCompletionVisible=!0},options:t})},freeInlineCompletions:()=>{}});r.push(n);let i=e.onKeyDown(s=>{let l=f.get(e);if(!l)return;let c=s.keyCode===o.KeyCode.Tab||s.keyCode===o.KeyCode.RightArrow&&s.metaKey;l.isCompletionVisible&&c?(l.isCompletionAccepted=!0,l.isCompletionVisible=!1):l.isCompletionAccepted=!1});r.push(i);let a={deregister:()=>{r.forEach(s=>s.dispose()),A.clearCompletionCache(),f.delete(e),E=null}};return E=a,a}catch(n){return d(n,"REGISTER_COPILOT_ERROR"),{deregister:()=>{r.forEach(i=>i.dispose()),f.delete(e),E=null}}}};export{H as Copilot,be as registerCopilot};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "monacopilot",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.26",
|
|
4
4
|
"description": "AI auto-completion plugin for Monaco Editor",
|
|
5
5
|
"main": "./build/index.js",
|
|
6
6
|
"module": "./build/index.mjs",
|
|
@@ -21,13 +21,13 @@
|
|
|
21
21
|
"release": "release-it"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
|
-
"@anthropic-ai/sdk": "^0.27.
|
|
24
|
+
"@anthropic-ai/sdk": "^0.27.3",
|
|
25
25
|
"@ianvs/prettier-plugin-sort-imports": "^4.2.1",
|
|
26
26
|
"@typescript-eslint/eslint-plugin": "^7.3.1",
|
|
27
27
|
"eslint": "^8.57.0",
|
|
28
28
|
"groq-sdk": "^0.3.2",
|
|
29
29
|
"monaco-editor": "^0.50.0",
|
|
30
|
-
"openai": "^4.
|
|
30
|
+
"openai": "^4.60.1",
|
|
31
31
|
"prettier": "^3.2.5",
|
|
32
32
|
"release-it": "^17.2.1",
|
|
33
33
|
"tsup": "^8.0.2",
|