monacopilot 0.19.14 → 0.19.16
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/build/index.d.mts +2 -0
- package/build/index.d.ts +2 -0
- package/build/index.js +17 -32
- package/build/index.mjs +17 -32
- package/package.json +2 -2
package/build/index.d.mts
CHANGED
|
@@ -81,6 +81,8 @@ interface RegisterCompletionOptions {
|
|
|
81
81
|
* The maximum number of lines of code to include in the completion request.
|
|
82
82
|
* This limits the request size to the model to prevent `429 Too Many Requests` errors
|
|
83
83
|
* and reduce costs for long code.
|
|
84
|
+
*
|
|
85
|
+
* @default 100
|
|
84
86
|
*/
|
|
85
87
|
maxContextLines?: number;
|
|
86
88
|
/**
|
package/build/index.d.ts
CHANGED
|
@@ -81,6 +81,8 @@ interface RegisterCompletionOptions {
|
|
|
81
81
|
* The maximum number of lines of code to include in the completion request.
|
|
82
82
|
* This limits the request size to the model to prevent `429 Too Many Requests` errors
|
|
83
83
|
* and reduce costs for long code.
|
|
84
|
+
*
|
|
85
|
+
* @default 100
|
|
84
86
|
*/
|
|
85
87
|
maxContextLines?: number;
|
|
86
88
|
/**
|
package/build/index.js
CHANGED
|
@@ -1,42 +1,27 @@
|
|
|
1
|
-
'use strict';var core=require('@monacopilot/core');var
|
|
2
|
-
`),r=
|
|
1
|
+
'use strict';var core=require('@monacopilot/core');var _=o=>!o||o.length===0?"":o.length===1?o[0]:`${o.slice(0,-1).join(", ")} and ${o.slice(-1)}`;var w=(o,e,n={})=>{if(e<=0)return "";let t=o.split(`
|
|
2
|
+
`),r=t.length;if(e>=r)return o;if(n.truncateDirection==="keepEnd"){let s=t.slice(-e);return s.every(a=>a==="")?`
|
|
3
3
|
`.repeat(e):s.join(`
|
|
4
|
-
`)}let i=
|
|
4
|
+
`)}let i=t.slice(0,e);return i.every(s=>s==="")?`
|
|
5
5
|
`.repeat(e):i.join(`
|
|
6
|
-
`)};var
|
|
7
|
-
|
|
8
|
-
\`\`\`
|
|
9
|
-
${o}
|
|
10
|
-
\`\`\``.trim()).join(`
|
|
6
|
+
`)};var j="<|user_cursor_is_here|>",ne={insert:{noun:"insertion",verb:"Insert"},complete:{noun:"completion",verb:"Complete"},continue:{noun:"continuation",verb:"Continue"}},K=o=>{let{technologies:e=[],filename:n,relatedFiles:t,language:r,textBeforeCursor:i="",textAfterCursor:s="",editorState:{completionMode:a}}=o,{noun:p,verb:m}=ne[a],C=_([r,...e].filter(d=>typeof d=="string"&&!!d)),c=!t||t.length===0?"":t.map(({path:d,content:g})=>`### ${d}
|
|
7
|
+
${g}`).join(`
|
|
11
8
|
|
|
12
|
-
`),
|
|
13
|
-
You are an EXCELLENT code completion assistant.
|
|
9
|
+
`),u=`You are an expert code ${p} assistant. ${m} code naturally as if you were the developer, following their patterns and style. Use ${C||"appropriate"} best practices. Focus on writing concise, accurate code that matches the context perfectly. Do not include explanations or comments.`,l=`${c}
|
|
14
10
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
Language: ${r||"Undetermined"}
|
|
18
|
-
Mode: ${l}
|
|
19
|
-
Stack: ${p||"None"}`,u=`
|
|
20
|
-
**Related Files:**
|
|
21
|
-
${J(n)}
|
|
11
|
+
File: ${n||"unknown"}
|
|
12
|
+
Mode: ${a}
|
|
22
13
|
|
|
23
|
-
|
|
14
|
+
Here is the code context. The ${j} indicates where you should ${p.toLowerCase()}:
|
|
24
15
|
\`\`\`
|
|
25
|
-
${i}
|
|
16
|
+
${i}${j}${s}
|
|
26
17
|
\`\`\`
|
|
27
18
|
|
|
28
|
-
${
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
Output ONLY the raw code to be inserted at the cursor location without any additional text, comments, or code block syntax.`;return {system:c,user:u}};var M=class extends core.Copilot{async complete(e){let{body:o,options:n}=e,{customPrompt:r,headers:i}=n??{},{completionMetadata:s}=o,{text:l,raw:p,error:c}=await this.makeAIRequest(s,{customPrompt:r,customHeaders:i});return {completion:l,raw:p,error:c}}getDefaultPrompt(e){return V(e)}};var H=(t,e)=>e.getLineContent(t.lineNumber)[t.column-1];var $=(t,e)=>e.getLineContent(t.lineNumber).slice(0,t.column-1),y=(t,e)=>e.getValueInRange({startLineNumber:1,startColumn:1,endLineNumber:t.lineNumber,endColumn:t.column}),k=(t,e)=>e.getValueInRange({startLineNumber:t.lineNumber,startColumn:t.column,endLineNumber:e.getLineCount(),endColumn:e.getLineMaxColumn(e.getLineCount())});var P=class{constructor(e){this.capacity=e;this.head=0;this.tail=0;this.size=0;this.buffer=new Array(e);}enqueue(e){let o;return this.size===this.capacity&&(o=this.dequeue()),this.buffer[this.tail]=e,this.tail=(this.tail+1)%this.capacity,this.size++,o}dequeue(){if(this.size===0)return;let e=this.buffer[this.head];return this.buffer[this.head]=void 0,this.head=(this.head+1)%this.capacity,this.size--,e}getAll(){return this.buffer.filter(e=>e!==void 0)}clear(){this.buffer=new Array(this.capacity),this.head=0,this.tail=0,this.size=0;}getSize(){return this.size}isEmpty(){return this.size===0}isFull(){return this.size===this.capacity}};var I=class I{constructor(){this.cache=new P(I.MAX_CACHE_SIZE);}get(e,o){return this.cache.getAll().filter(n=>this.isValidCacheItem(n,e,o))}add(e){e.completion.trim()&&this.cache.enqueue(e);}clear(){this.cache.clear();}isValidCacheItem(e,o,n){let r=n.getValueInRange(e.range);return !y(o,n).includes(e.textBeforeCursor)||!this.isPartialMatch(r,e.completion)?false:this.isPositionValid(e,o)}isPartialMatch(e,o){return o.startsWith(e)||e.startsWith(o)}isPositionValid(e,o){let{range:n}=e,{startLineNumber:r,startColumn:i,endLineNumber:s,endColumn:l}=n,{lineNumber:p,column:c}=o;return p>=r&&p<=s?p===r&&p===s?c>=i-1&&c<=l+1:p===r?c>=i-1:p===s?c<=l+1:true:false}};I.MAX_CACHE_SIZE=20;var T=I;var S=class{constructor(e,o,n){this.formattedCompletion="";this.currentColumn=0;this.textBeforeCursorInLine="";this.formattedCompletion=e,this.currentColumn=o,this.textBeforeCursorInLine=n;}setCompletion(e){return this.formattedCompletion=e,this}removeInvalidLineBreaks(){return this.formattedCompletion=this.formattedCompletion.trimEnd(),this}removeMarkdownCodeSyntax(){return this.formattedCompletion=this.removeMarkdownCodeBlocks(this.formattedCompletion),this}indentByColumn(){let e=this.formattedCompletion.split(`
|
|
35
|
-
`);if(e.length<=1||this.textBeforeCursorInLine.trim()!=="")return this;let o=" ".repeat(this.currentColumn-1);return this.formattedCompletion=e[0]+`
|
|
36
|
-
`+e.slice(1).map(n=>o+n).join(`
|
|
37
|
-
`),this}removeMarkdownCodeBlocks(e){let o=e.split(`
|
|
38
|
-
`),n=[],r=false;for(let i=0;i<o.length;i++){let s=o[i],l=s.trim().startsWith("```");if(l&&!r){r=true;continue}if(l&&r){r=false;continue}n.push(s);}return n.join(`
|
|
19
|
+
${m} the code at the cursor position. Provide only the exact code that should be inserted, without any additional text, explanation, or syntax highlighting. Your response will be directly inserted into the code.`;return {system:u,user:l}};var v=class extends core.Copilot{async complete(e){let{body:n,options:t}=e,{customPrompt:r,headers:i}=t??{},{completionMetadata:s}=n,{text:a,raw:p,error:m}=await this.makeAIRequest(s,{customPrompt:r,customHeaders:i});return {completion:a,raw:p,error:m}}getDefaultPrompt(e){return K(e)}};var q=(o,e)=>e.getLineContent(o.lineNumber)[o.column-1];var V=(o,e)=>e.getLineContent(o.lineNumber).slice(0,o.column-1),f=(o,e)=>e.getValueInRange({startLineNumber:1,startColumn:1,endLineNumber:o.lineNumber,endColumn:o.column}),F=(o,e)=>e.getValueInRange({startLineNumber:o.lineNumber,startColumn:o.column,endLineNumber:e.getLineCount(),endColumn:e.getLineMaxColumn(e.getLineCount())});var T=class{constructor(e){this.capacity=e;this.head=0;this.tail=0;this.size=0;this.buffer=new Array(e);}enqueue(e){let n;return this.size===this.capacity&&(n=this.dequeue()),this.buffer[this.tail]=e,this.tail=(this.tail+1)%this.capacity,this.size++,n}dequeue(){if(this.size===0)return;let e=this.buffer[this.head];return this.buffer[this.head]=void 0,this.head=(this.head+1)%this.capacity,this.size--,e}getAll(){return this.buffer.filter(e=>e!==void 0)}clear(){this.buffer=new Array(this.capacity),this.head=0,this.tail=0,this.size=0;}getSize(){return this.size}isEmpty(){return this.size===0}isFull(){return this.size===this.capacity}};var P=class P{constructor(){this.cache=new T(P.MAX_CACHE_SIZE);}get(e,n){return this.cache.getAll().filter(t=>this.isValidCacheItem(t,e,n))}add(e){e.completion.trim()&&this.cache.enqueue(e);}clear(){this.cache.clear();}isValidCacheItem(e,n,t){let r=t.getValueInRange(e.range);return !f(n,t).includes(e.textBeforeCursor)||!this.isPartialMatch(r,e.completion)?false:this.isPositionValid(e,n)}isPartialMatch(e,n){return n.startsWith(e)||e.startsWith(n)}isPositionValid(e,n){let{range:t}=e,{startLineNumber:r,startColumn:i,endLineNumber:s,endColumn:a}=t,{lineNumber:p,column:m}=n;return p>=r&&p<=s?p===r&&p===s?m>=i-1&&m<=a+1:p===r?m>=i-1:p===s?m<=a+1:true:false}};P.MAX_CACHE_SIZE=20;var M=P;var I=class{constructor(e,n,t){this.formattedCompletion="";this.currentColumn=0;this.textBeforeCursorInLine="";this.formattedCompletion=e,this.currentColumn=n,this.textBeforeCursorInLine=t;}setCompletion(e){return this.formattedCompletion=e,this}removeInvalidLineBreaks(){return this.formattedCompletion=this.formattedCompletion.trimEnd(),this}removeMarkdownCodeSyntax(){return this.formattedCompletion=this.removeMarkdownCodeBlocks(this.formattedCompletion),this}indentByColumn(){let e=this.formattedCompletion.split(`
|
|
20
|
+
`);if(e.length<=1||this.textBeforeCursorInLine.trim()!=="")return this;let n=" ".repeat(this.currentColumn-1);return this.formattedCompletion=e[0]+`
|
|
21
|
+
`+e.slice(1).map(t=>n+t).join(`
|
|
22
|
+
`),this}removeMarkdownCodeBlocks(e){let n=e.split(`
|
|
23
|
+
`),t=[],r=false;for(let i=0;i<n.length;i++){let s=n[i],a=s.trim().startsWith("```");if(a&&!r){r=true;continue}if(a&&r){r=false;continue}t.push(s);}return t.join(`
|
|
39
24
|
`)}removeExcessiveNewlines(){return this.formattedCompletion=this.formattedCompletion.replace(/\n{3,}/g,`
|
|
40
25
|
|
|
41
|
-
`),this}build(){return this.formattedCompletion}};var A=class{findOverlaps(e,
|
|
42
|
-
`),s=i.length-1,
|
|
26
|
+
`),this}build(){return this.formattedCompletion}};var A=class{findOverlaps(e,n,t){if(!e)return {startOverlapLength:0,maxOverlapLength:0};let r=e.length,i=n.length,s=t.length,a=0,p=0,m=0,C=Math.min(r,i);for(let l=1;l<=C;l++){let d=e.substring(0,l),g=n.slice(-l);d===g&&(m=l);}let c=Math.min(r,s);for(let l=0;l<c&&e[l]===t[l];l++)a++;for(let l=1;l<=c;l++)e.slice(-l)===t.slice(0,l)&&(p=l);let u=Math.max(a,p);if(u===0){for(let l=1;l<r;l++)if(t.startsWith(e.substring(l))){u=r-l;break}}return {startOverlapLength:m,maxOverlapLength:u}}};var L=class{constructor(e){this.monaco=e;this.textOverlapCalculator=new A;}computeInsertionRange(e,n,t){if(!n)return this.createEmptyRange(e);let r=t.getOffsetAt(e),i=t.getValue().substring(0,r),s=t.getValue().substring(r);if(r>=t.getValue().length)return this.createEmptyRange(e);if(s.length===0)return this.createEmptyRange(e);let{startOverlapLength:a,maxOverlapLength:p}=this.textOverlapCalculator.findOverlaps(n,i,s),m=a>0?t.getPositionAt(r-a):e,C=r+p,c=t.getPositionAt(C);return new this.monaco.Range(m.lineNumber,m.column,c.lineNumber,c.column)}computeCacheRange(e,n){let t=e.lineNumber,r=e.column,i=n.split(`
|
|
27
|
+
`),s=i.length-1,a=t+s,p=s===0?r+i[0].length:i[s].length+1;return new this.monaco.Range(t,r,a,p)}createEmptyRange(e){return new this.monaco.Range(e.lineNumber,e.column,e.lineNumber,e.column)}};var H=100,z=true,U="onIdle";var G=async o=>{let{endpoint:e,body:n}=o,t=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)});if(!t.ok)throw new Error("Error while fetching completion item");let{completion:r,error:i}=await t.json();if(i)throw new Error(i);return {completion:r}},W=({pos:o,mdl:e,options:n})=>{let{filename:t,language:r,technologies:i,relatedFiles:s,maxContextLines:a=H}=n,p=ie(o,e),C=s&&s.length>0?3:2,c=a?Math.floor(a/C):void 0,u=(y,E,O)=>{let R=y(o,e);return E?w(R,E,O):R},l=(y,E)=>!y||!E?y:y.map(({content:O,...R})=>({...R,content:w(O,E)})),d=u(f,c,{truncateDirection:"keepEnd"}),g=u(F,c,{truncateDirection:"keepStart"}),oe=l(s,c);return {filename:t,language:r,technologies:i,relatedFiles:oe,textBeforeCursor:d,textAfterCursor:g,cursorPosition:o,editorState:{completionMode:p}}},ie=(o,e)=>{let n=q(o,e),t=F(o,e);return n?"insert":t.trim()?"complete":"continue"};var X=(o,e=600,n=200)=>{let t=null,r=0,i=null,s=null,a=false,p=(...m)=>{if(a)return Promise.resolve(void 0);i=m;let C=Date.now(),c=C-r;r=C,t&&(clearTimeout(t),t=null);let u=c<n?e:n;return s=new Promise((l,d)=>{t=setTimeout(async()=>{a=true;try{if(i){let g=await o(...i);l(g);}else l(void 0);}catch(g){d(g);}finally{a=false,t=null,i=null;}},u);}),s};return p.cancel=()=>{t&&(clearTimeout(t),t=null),i=null;},p};var Y=o=>typeof o=="string"?o==="Cancelled"||o==="AbortError":o instanceof Error?o.message==="Cancelled"||o.name==="AbortError":false;var h=o=>({items:o.map(e=>({completeBracketPairs:true,...e}))});var S=new M,Z=async({monaco:o,mdl:e,pos:n,token:t,isCompletionAccepted:r,options:i})=>{let{trigger:s=U,endpoint:a,enableCaching:p=z,onError:m,requestHandler:C}=i;if(p){let c=S.get(n,e).map(u=>({insertText:u.completion,range:u.range}));if(c.length>0)return h(c)}if(t.isCancellationRequested||r)return h([]);try{let c=X(C??G,...{onTyping:[500,100],onIdle:[600,400],onDemand:[0,0]}[s]);t.onCancellationRequested(()=>{c.cancel();});let u=W({pos:n,mdl:e,options:i}),{completion:l}=await c({endpoint:a,body:{completionMetadata:u}});if(l){let d=new I(l,n.column,V(n,e)).removeMarkdownCodeSyntax().removeExcessiveNewlines().removeInvalidLineBreaks().indentByColumn().build(),g=new L(o);return p&&S.add({completion:d,range:g.computeCacheRange(n,d),textBeforeCursor:f(n,e)}),h([{insertText:d,range:g.computeInsertionRange(n,d,e)}])}}catch(c){if(Y(c))return h([]);m?m(c):core.logger.warn("Cannot provide completion",c);}return h([])};var D=new WeakMap,x=o=>D.get(o),J=(o,e)=>{D.set(o,e);},k=o=>{D.delete(o);},Q=()=>({isCompletionAccepted:false,isCompletionVisible:false,isExplicitlyTriggered:false,hasRejectedCurrentCompletion:false});var ee=(o,e,n)=>{let t=x(e);return t?o.languages.registerInlineCompletionsProvider(n.language,{provideInlineCompletions:(r,i,s,a)=>{if(!(n.trigger==="onDemand"&&!t.isExplicitlyTriggered))return Z({monaco:o,mdl:r,pos:i,token:a,isCompletionAccepted:t.isCompletionAccepted,options:n})},handleItemDidShow:(r,i,s)=>{t.isExplicitlyTriggered=false,t.hasRejectedCurrentCompletion=false,!t.isCompletionAccepted&&(t.isCompletionVisible=true,n.onCompletionShown?.(s,i.range));},freeInlineCompletions:()=>{}}):null};var ae={TAB:(o,e)=>e.keyCode===o.KeyCode.Tab,CMD_RIGHT_ARROW:(o,e)=>e.keyCode===o.KeyCode.RightArrow&&e.metaKey},B=class{constructor(e,n,t){this.monaco=e;this.state=n;this.options=t;}handleKeyEvent(e){let n={monaco:this.monaco,event:e,state:this.state,options:this.options};this.handleCompletionAcceptance(n),this.handleCompletionRejection(n);}handleCompletionAcceptance(e){return e.state.isCompletionVisible&&this.isAcceptanceKey(e.event)?(e.options.onCompletionAccepted?.(),e.state.isCompletionAccepted=true,e.state.isCompletionVisible=false,true):(e.state.isCompletionAccepted=false,false)}handleCompletionRejection(e){return this.shouldRejectCompletion(e)?(e.options.onCompletionRejected?.(),e.state.hasRejectedCurrentCompletion=true,true):false}shouldRejectCompletion(e){return e.state.isCompletionVisible&&!e.state.hasRejectedCurrentCompletion&&!e.state.isCompletionAccepted&&!this.isAcceptanceKey(e.event)}isAcceptanceKey(e){return Object.values(ae).some(n=>n(this.monaco,e))}},te=(o,e,n,t)=>{let r=new B(o,n,t);return e.onKeyDown(i=>r.handleKeyEvent(i))};var b=null,le=(o,e,n)=>{b&&b.deregister();let t=[];J(e,Q()),e.updateOptions({inlineSuggest:{enabled:true,mode:"subwordSmart"}});try{let r=x(e);if(!r)return core.logger.warn("Completion is not registered properly. State not found."),ce();let i=ee(o,e,n);i&&t.push(i);let s=te(o,e,r,n);t.push(s);let a={deregister:()=>{t.forEach(p=>p.dispose()),S.clear(),k(e),b=null;},trigger:()=>pe(e)};return b=a,a}catch(r){return n.onError?n.onError(r):core.logger.report(r),{deregister:()=>{t.forEach(i=>i.dispose()),k(e),b=null;},trigger:()=>{}}}},pe=o=>{let e=x(o);if(!e){core.logger.warn("Completion is not registered. Use `registerCompletion` to register completion first.");return}e.isExplicitlyTriggered=true,o.trigger("keyboard","editor.action.inlineSuggest.trigger",{});},ce=()=>({deregister:()=>{},trigger:()=>{}});var ut=v;exports.CompletionCopilot=v;exports.Copilot=ut;exports.registerCompletion=le;
|
package/build/index.mjs
CHANGED
|
@@ -1,42 +1,27 @@
|
|
|
1
|
-
import {Copilot,logger
|
|
2
|
-
`),r=
|
|
1
|
+
import {Copilot,logger}from'@monacopilot/core';var _=o=>!o||o.length===0?"":o.length===1?o[0]:`${o.slice(0,-1).join(", ")} and ${o.slice(-1)}`;var w=(o,e,n={})=>{if(e<=0)return "";let t=o.split(`
|
|
2
|
+
`),r=t.length;if(e>=r)return o;if(n.truncateDirection==="keepEnd"){let s=t.slice(-e);return s.every(a=>a==="")?`
|
|
3
3
|
`.repeat(e):s.join(`
|
|
4
|
-
`)}let i=
|
|
4
|
+
`)}let i=t.slice(0,e);return i.every(s=>s==="")?`
|
|
5
5
|
`.repeat(e):i.join(`
|
|
6
|
-
`)};var
|
|
7
|
-
|
|
8
|
-
\`\`\`
|
|
9
|
-
${o}
|
|
10
|
-
\`\`\``.trim()).join(`
|
|
6
|
+
`)};var j="<|user_cursor_is_here|>",ne={insert:{noun:"insertion",verb:"Insert"},complete:{noun:"completion",verb:"Complete"},continue:{noun:"continuation",verb:"Continue"}},K=o=>{let{technologies:e=[],filename:n,relatedFiles:t,language:r,textBeforeCursor:i="",textAfterCursor:s="",editorState:{completionMode:a}}=o,{noun:p,verb:m}=ne[a],C=_([r,...e].filter(d=>typeof d=="string"&&!!d)),c=!t||t.length===0?"":t.map(({path:d,content:g})=>`### ${d}
|
|
7
|
+
${g}`).join(`
|
|
11
8
|
|
|
12
|
-
`),
|
|
13
|
-
You are an EXCELLENT code completion assistant.
|
|
9
|
+
`),u=`You are an expert code ${p} assistant. ${m} code naturally as if you were the developer, following their patterns and style. Use ${C||"appropriate"} best practices. Focus on writing concise, accurate code that matches the context perfectly. Do not include explanations or comments.`,l=`${c}
|
|
14
10
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
Language: ${r||"Undetermined"}
|
|
18
|
-
Mode: ${l}
|
|
19
|
-
Stack: ${p||"None"}`,u=`
|
|
20
|
-
**Related Files:**
|
|
21
|
-
${J(n)}
|
|
11
|
+
File: ${n||"unknown"}
|
|
12
|
+
Mode: ${a}
|
|
22
13
|
|
|
23
|
-
|
|
14
|
+
Here is the code context. The ${j} indicates where you should ${p.toLowerCase()}:
|
|
24
15
|
\`\`\`
|
|
25
|
-
${i}
|
|
16
|
+
${i}${j}${s}
|
|
26
17
|
\`\`\`
|
|
27
18
|
|
|
28
|
-
${
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
Output ONLY the raw code to be inserted at the cursor location without any additional text, comments, or code block syntax.`;return {system:c,user:u}};var M=class extends Copilot{async complete(e){let{body:o,options:n}=e,{customPrompt:r,headers:i}=n??{},{completionMetadata:s}=o,{text:l,raw:p,error:c}=await this.makeAIRequest(s,{customPrompt:r,customHeaders:i});return {completion:l,raw:p,error:c}}getDefaultPrompt(e){return V(e)}};var H=(t,e)=>e.getLineContent(t.lineNumber)[t.column-1];var $=(t,e)=>e.getLineContent(t.lineNumber).slice(0,t.column-1),y=(t,e)=>e.getValueInRange({startLineNumber:1,startColumn:1,endLineNumber:t.lineNumber,endColumn:t.column}),k=(t,e)=>e.getValueInRange({startLineNumber:t.lineNumber,startColumn:t.column,endLineNumber:e.getLineCount(),endColumn:e.getLineMaxColumn(e.getLineCount())});var P=class{constructor(e){this.capacity=e;this.head=0;this.tail=0;this.size=0;this.buffer=new Array(e);}enqueue(e){let o;return this.size===this.capacity&&(o=this.dequeue()),this.buffer[this.tail]=e,this.tail=(this.tail+1)%this.capacity,this.size++,o}dequeue(){if(this.size===0)return;let e=this.buffer[this.head];return this.buffer[this.head]=void 0,this.head=(this.head+1)%this.capacity,this.size--,e}getAll(){return this.buffer.filter(e=>e!==void 0)}clear(){this.buffer=new Array(this.capacity),this.head=0,this.tail=0,this.size=0;}getSize(){return this.size}isEmpty(){return this.size===0}isFull(){return this.size===this.capacity}};var I=class I{constructor(){this.cache=new P(I.MAX_CACHE_SIZE);}get(e,o){return this.cache.getAll().filter(n=>this.isValidCacheItem(n,e,o))}add(e){e.completion.trim()&&this.cache.enqueue(e);}clear(){this.cache.clear();}isValidCacheItem(e,o,n){let r=n.getValueInRange(e.range);return !y(o,n).includes(e.textBeforeCursor)||!this.isPartialMatch(r,e.completion)?false:this.isPositionValid(e,o)}isPartialMatch(e,o){return o.startsWith(e)||e.startsWith(o)}isPositionValid(e,o){let{range:n}=e,{startLineNumber:r,startColumn:i,endLineNumber:s,endColumn:l}=n,{lineNumber:p,column:c}=o;return p>=r&&p<=s?p===r&&p===s?c>=i-1&&c<=l+1:p===r?c>=i-1:p===s?c<=l+1:true:false}};I.MAX_CACHE_SIZE=20;var T=I;var S=class{constructor(e,o,n){this.formattedCompletion="";this.currentColumn=0;this.textBeforeCursorInLine="";this.formattedCompletion=e,this.currentColumn=o,this.textBeforeCursorInLine=n;}setCompletion(e){return this.formattedCompletion=e,this}removeInvalidLineBreaks(){return this.formattedCompletion=this.formattedCompletion.trimEnd(),this}removeMarkdownCodeSyntax(){return this.formattedCompletion=this.removeMarkdownCodeBlocks(this.formattedCompletion),this}indentByColumn(){let e=this.formattedCompletion.split(`
|
|
35
|
-
`);if(e.length<=1||this.textBeforeCursorInLine.trim()!=="")return this;let o=" ".repeat(this.currentColumn-1);return this.formattedCompletion=e[0]+`
|
|
36
|
-
`+e.slice(1).map(n=>o+n).join(`
|
|
37
|
-
`),this}removeMarkdownCodeBlocks(e){let o=e.split(`
|
|
38
|
-
`),n=[],r=false;for(let i=0;i<o.length;i++){let s=o[i],l=s.trim().startsWith("```");if(l&&!r){r=true;continue}if(l&&r){r=false;continue}n.push(s);}return n.join(`
|
|
19
|
+
${m} the code at the cursor position. Provide only the exact code that should be inserted, without any additional text, explanation, or syntax highlighting. Your response will be directly inserted into the code.`;return {system:u,user:l}};var v=class extends Copilot{async complete(e){let{body:n,options:t}=e,{customPrompt:r,headers:i}=t??{},{completionMetadata:s}=n,{text:a,raw:p,error:m}=await this.makeAIRequest(s,{customPrompt:r,customHeaders:i});return {completion:a,raw:p,error:m}}getDefaultPrompt(e){return K(e)}};var q=(o,e)=>e.getLineContent(o.lineNumber)[o.column-1];var V=(o,e)=>e.getLineContent(o.lineNumber).slice(0,o.column-1),f=(o,e)=>e.getValueInRange({startLineNumber:1,startColumn:1,endLineNumber:o.lineNumber,endColumn:o.column}),F=(o,e)=>e.getValueInRange({startLineNumber:o.lineNumber,startColumn:o.column,endLineNumber:e.getLineCount(),endColumn:e.getLineMaxColumn(e.getLineCount())});var T=class{constructor(e){this.capacity=e;this.head=0;this.tail=0;this.size=0;this.buffer=new Array(e);}enqueue(e){let n;return this.size===this.capacity&&(n=this.dequeue()),this.buffer[this.tail]=e,this.tail=(this.tail+1)%this.capacity,this.size++,n}dequeue(){if(this.size===0)return;let e=this.buffer[this.head];return this.buffer[this.head]=void 0,this.head=(this.head+1)%this.capacity,this.size--,e}getAll(){return this.buffer.filter(e=>e!==void 0)}clear(){this.buffer=new Array(this.capacity),this.head=0,this.tail=0,this.size=0;}getSize(){return this.size}isEmpty(){return this.size===0}isFull(){return this.size===this.capacity}};var P=class P{constructor(){this.cache=new T(P.MAX_CACHE_SIZE);}get(e,n){return this.cache.getAll().filter(t=>this.isValidCacheItem(t,e,n))}add(e){e.completion.trim()&&this.cache.enqueue(e);}clear(){this.cache.clear();}isValidCacheItem(e,n,t){let r=t.getValueInRange(e.range);return !f(n,t).includes(e.textBeforeCursor)||!this.isPartialMatch(r,e.completion)?false:this.isPositionValid(e,n)}isPartialMatch(e,n){return n.startsWith(e)||e.startsWith(n)}isPositionValid(e,n){let{range:t}=e,{startLineNumber:r,startColumn:i,endLineNumber:s,endColumn:a}=t,{lineNumber:p,column:m}=n;return p>=r&&p<=s?p===r&&p===s?m>=i-1&&m<=a+1:p===r?m>=i-1:p===s?m<=a+1:true:false}};P.MAX_CACHE_SIZE=20;var M=P;var I=class{constructor(e,n,t){this.formattedCompletion="";this.currentColumn=0;this.textBeforeCursorInLine="";this.formattedCompletion=e,this.currentColumn=n,this.textBeforeCursorInLine=t;}setCompletion(e){return this.formattedCompletion=e,this}removeInvalidLineBreaks(){return this.formattedCompletion=this.formattedCompletion.trimEnd(),this}removeMarkdownCodeSyntax(){return this.formattedCompletion=this.removeMarkdownCodeBlocks(this.formattedCompletion),this}indentByColumn(){let e=this.formattedCompletion.split(`
|
|
20
|
+
`);if(e.length<=1||this.textBeforeCursorInLine.trim()!=="")return this;let n=" ".repeat(this.currentColumn-1);return this.formattedCompletion=e[0]+`
|
|
21
|
+
`+e.slice(1).map(t=>n+t).join(`
|
|
22
|
+
`),this}removeMarkdownCodeBlocks(e){let n=e.split(`
|
|
23
|
+
`),t=[],r=false;for(let i=0;i<n.length;i++){let s=n[i],a=s.trim().startsWith("```");if(a&&!r){r=true;continue}if(a&&r){r=false;continue}t.push(s);}return t.join(`
|
|
39
24
|
`)}removeExcessiveNewlines(){return this.formattedCompletion=this.formattedCompletion.replace(/\n{3,}/g,`
|
|
40
25
|
|
|
41
|
-
`),this}build(){return this.formattedCompletion}};var A=class{findOverlaps(e,
|
|
42
|
-
`),s=i.length-1,
|
|
26
|
+
`),this}build(){return this.formattedCompletion}};var A=class{findOverlaps(e,n,t){if(!e)return {startOverlapLength:0,maxOverlapLength:0};let r=e.length,i=n.length,s=t.length,a=0,p=0,m=0,C=Math.min(r,i);for(let l=1;l<=C;l++){let d=e.substring(0,l),g=n.slice(-l);d===g&&(m=l);}let c=Math.min(r,s);for(let l=0;l<c&&e[l]===t[l];l++)a++;for(let l=1;l<=c;l++)e.slice(-l)===t.slice(0,l)&&(p=l);let u=Math.max(a,p);if(u===0){for(let l=1;l<r;l++)if(t.startsWith(e.substring(l))){u=r-l;break}}return {startOverlapLength:m,maxOverlapLength:u}}};var L=class{constructor(e){this.monaco=e;this.textOverlapCalculator=new A;}computeInsertionRange(e,n,t){if(!n)return this.createEmptyRange(e);let r=t.getOffsetAt(e),i=t.getValue().substring(0,r),s=t.getValue().substring(r);if(r>=t.getValue().length)return this.createEmptyRange(e);if(s.length===0)return this.createEmptyRange(e);let{startOverlapLength:a,maxOverlapLength:p}=this.textOverlapCalculator.findOverlaps(n,i,s),m=a>0?t.getPositionAt(r-a):e,C=r+p,c=t.getPositionAt(C);return new this.monaco.Range(m.lineNumber,m.column,c.lineNumber,c.column)}computeCacheRange(e,n){let t=e.lineNumber,r=e.column,i=n.split(`
|
|
27
|
+
`),s=i.length-1,a=t+s,p=s===0?r+i[0].length:i[s].length+1;return new this.monaco.Range(t,r,a,p)}createEmptyRange(e){return new this.monaco.Range(e.lineNumber,e.column,e.lineNumber,e.column)}};var H=100,z=true,U="onIdle";var G=async o=>{let{endpoint:e,body:n}=o,t=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)});if(!t.ok)throw new Error("Error while fetching completion item");let{completion:r,error:i}=await t.json();if(i)throw new Error(i);return {completion:r}},W=({pos:o,mdl:e,options:n})=>{let{filename:t,language:r,technologies:i,relatedFiles:s,maxContextLines:a=H}=n,p=ie(o,e),C=s&&s.length>0?3:2,c=a?Math.floor(a/C):void 0,u=(y,E,O)=>{let R=y(o,e);return E?w(R,E,O):R},l=(y,E)=>!y||!E?y:y.map(({content:O,...R})=>({...R,content:w(O,E)})),d=u(f,c,{truncateDirection:"keepEnd"}),g=u(F,c,{truncateDirection:"keepStart"}),oe=l(s,c);return {filename:t,language:r,technologies:i,relatedFiles:oe,textBeforeCursor:d,textAfterCursor:g,cursorPosition:o,editorState:{completionMode:p}}},ie=(o,e)=>{let n=q(o,e),t=F(o,e);return n?"insert":t.trim()?"complete":"continue"};var X=(o,e=600,n=200)=>{let t=null,r=0,i=null,s=null,a=false,p=(...m)=>{if(a)return Promise.resolve(void 0);i=m;let C=Date.now(),c=C-r;r=C,t&&(clearTimeout(t),t=null);let u=c<n?e:n;return s=new Promise((l,d)=>{t=setTimeout(async()=>{a=true;try{if(i){let g=await o(...i);l(g);}else l(void 0);}catch(g){d(g);}finally{a=false,t=null,i=null;}},u);}),s};return p.cancel=()=>{t&&(clearTimeout(t),t=null),i=null;},p};var Y=o=>typeof o=="string"?o==="Cancelled"||o==="AbortError":o instanceof Error?o.message==="Cancelled"||o.name==="AbortError":false;var h=o=>({items:o.map(e=>({completeBracketPairs:true,...e}))});var S=new M,Z=async({monaco:o,mdl:e,pos:n,token:t,isCompletionAccepted:r,options:i})=>{let{trigger:s=U,endpoint:a,enableCaching:p=z,onError:m,requestHandler:C}=i;if(p){let c=S.get(n,e).map(u=>({insertText:u.completion,range:u.range}));if(c.length>0)return h(c)}if(t.isCancellationRequested||r)return h([]);try{let c=X(C??G,...{onTyping:[500,100],onIdle:[600,400],onDemand:[0,0]}[s]);t.onCancellationRequested(()=>{c.cancel();});let u=W({pos:n,mdl:e,options:i}),{completion:l}=await c({endpoint:a,body:{completionMetadata:u}});if(l){let d=new I(l,n.column,V(n,e)).removeMarkdownCodeSyntax().removeExcessiveNewlines().removeInvalidLineBreaks().indentByColumn().build(),g=new L(o);return p&&S.add({completion:d,range:g.computeCacheRange(n,d),textBeforeCursor:f(n,e)}),h([{insertText:d,range:g.computeInsertionRange(n,d,e)}])}}catch(c){if(Y(c))return h([]);m?m(c):logger.warn("Cannot provide completion",c);}return h([])};var D=new WeakMap,x=o=>D.get(o),J=(o,e)=>{D.set(o,e);},k=o=>{D.delete(o);},Q=()=>({isCompletionAccepted:false,isCompletionVisible:false,isExplicitlyTriggered:false,hasRejectedCurrentCompletion:false});var ee=(o,e,n)=>{let t=x(e);return t?o.languages.registerInlineCompletionsProvider(n.language,{provideInlineCompletions:(r,i,s,a)=>{if(!(n.trigger==="onDemand"&&!t.isExplicitlyTriggered))return Z({monaco:o,mdl:r,pos:i,token:a,isCompletionAccepted:t.isCompletionAccepted,options:n})},handleItemDidShow:(r,i,s)=>{t.isExplicitlyTriggered=false,t.hasRejectedCurrentCompletion=false,!t.isCompletionAccepted&&(t.isCompletionVisible=true,n.onCompletionShown?.(s,i.range));},freeInlineCompletions:()=>{}}):null};var ae={TAB:(o,e)=>e.keyCode===o.KeyCode.Tab,CMD_RIGHT_ARROW:(o,e)=>e.keyCode===o.KeyCode.RightArrow&&e.metaKey},B=class{constructor(e,n,t){this.monaco=e;this.state=n;this.options=t;}handleKeyEvent(e){let n={monaco:this.monaco,event:e,state:this.state,options:this.options};this.handleCompletionAcceptance(n),this.handleCompletionRejection(n);}handleCompletionAcceptance(e){return e.state.isCompletionVisible&&this.isAcceptanceKey(e.event)?(e.options.onCompletionAccepted?.(),e.state.isCompletionAccepted=true,e.state.isCompletionVisible=false,true):(e.state.isCompletionAccepted=false,false)}handleCompletionRejection(e){return this.shouldRejectCompletion(e)?(e.options.onCompletionRejected?.(),e.state.hasRejectedCurrentCompletion=true,true):false}shouldRejectCompletion(e){return e.state.isCompletionVisible&&!e.state.hasRejectedCurrentCompletion&&!e.state.isCompletionAccepted&&!this.isAcceptanceKey(e.event)}isAcceptanceKey(e){return Object.values(ae).some(n=>n(this.monaco,e))}},te=(o,e,n,t)=>{let r=new B(o,n,t);return e.onKeyDown(i=>r.handleKeyEvent(i))};var b=null,le=(o,e,n)=>{b&&b.deregister();let t=[];J(e,Q()),e.updateOptions({inlineSuggest:{enabled:true,mode:"subwordSmart"}});try{let r=x(e);if(!r)return logger.warn("Completion is not registered properly. State not found."),ce();let i=ee(o,e,n);i&&t.push(i);let s=te(o,e,r,n);t.push(s);let a={deregister:()=>{t.forEach(p=>p.dispose()),S.clear(),k(e),b=null;},trigger:()=>pe(e)};return b=a,a}catch(r){return n.onError?n.onError(r):logger.report(r),{deregister:()=>{t.forEach(i=>i.dispose()),k(e),b=null;},trigger:()=>{}}}},pe=o=>{let e=x(o);if(!e){logger.warn("Completion is not registered. Use `registerCompletion` to register completion first.");return}e.isExplicitlyTriggered=true,o.trigger("keyboard","editor.action.inlineSuggest.trigger",{});},ce=()=>({deregister:()=>{},trigger:()=>{}});var ut=v;export{v as CompletionCopilot,ut as Copilot,le as registerCompletion};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "monacopilot",
|
|
3
|
-
"version": "0.19.
|
|
3
|
+
"version": "0.19.16",
|
|
4
4
|
"description": "AI auto-completion plugin for Monaco Editor",
|
|
5
5
|
"main": "./build/index.js",
|
|
6
6
|
"module": "./build/index.mjs",
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"license": "MIT",
|
|
38
38
|
"author": "Arshad Yaseen <m@arshadyaseen.com> (https://arshadyaseen.com)",
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@monacopilot/core": "0.19.
|
|
40
|
+
"@monacopilot/core": "0.19.16"
|
|
41
41
|
},
|
|
42
42
|
"peerDependencies": {
|
|
43
43
|
"monaco-editor": ">=0.41.0"
|