monacopilot 0.19.14 → 0.19.15

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.js CHANGED
@@ -1,22 +1,28 @@
1
- 'use strict';var core=require('@monacopilot/core');var K=t=>!t||t.length===0?"":t.length===1?t[0]:`${t.slice(0,-1).join(", ")} and ${t.slice(-1)}`,j=t=>t.charAt(0).toUpperCase()+t.slice(1),B=(t,e,o={})=>{if(e<=0)return "";let n=t.split(`
1
+ 'use strict';var core=require('@monacopilot/core');var j=t=>!t||t.length===0?"":t.length===1?t[0]:`${t.slice(0,-1).join(", ")} and ${t.slice(-1)}`;var O=(t,e,o={})=>{if(e<=0)return "";let n=t.split(`
2
2
  `),r=n.length;if(e>=r)return t;if(o.from==="end"){let s=n.slice(-e);return s.every(l=>l==="")?`
3
3
  `.repeat(e):s.join(`
4
4
  `)}let i=n.slice(0,e);return i.every(s=>s==="")?`
5
5
  `.repeat(e):i.join(`
6
6
  `)};var J=t=>!t||t.length===0?"":t.map(({path:e,content:o})=>`
7
7
  ### Path: ${e}
8
- \`\`\`
9
- ${o}
10
- \`\`\``.trim()).join(`
8
+ ${o}`.trim()).join(`
9
+
10
+ `),q=t=>{let{technologies:e=[],filename:o,relatedFiles:n,language:r,textBeforeCursor:i="",textAfterCursor:s="",editorState:{completionMode:l}}=t,p=j([r,...e].filter(m=>typeof m=="string"&&!!m)),c=`
11
+ You are an EXCELLENT predictive code completion assistant.
12
+
13
+ Your goal is to predict and complete the next logical code segment that the developer would write, making their coding experience more efficient and enjoyable.
11
14
 
12
- `),V=t=>{let{technologies:e=[],filename:o,relatedFiles:n,language:r,textBeforeCursor:i="",textAfterCursor:s="",editorState:{completionMode:l}}=t,p=K([r,...e].filter(m=>typeof m=="string"&&!!m)),c=`
13
- You are an EXCELLENT code completion assistant.
15
+ You should:
16
+ 1. Provide complete, functional code segments with full implementation details
17
+ 2. Complete entire functions or logical blocks when appropriate
18
+ 3. Consider common patterns and best practices
19
+ 4. Ensure the output is immediately useful and runnable
14
20
 
15
21
  **Context:**
16
22
  File: ${o||"Untitled"}
17
23
  Language: ${r||"Undetermined"}
18
24
  Mode: ${l}
19
- Stack: ${p||"None"}`,u=`
25
+ Stack: ${p||"None"}`,d=`
20
26
  **Related Files:**
21
27
  ${J(n)}
22
28
 
@@ -25,18 +31,21 @@ ${J(n)}
25
31
  ${i}<cursor>${s}
26
32
  \`\`\`
27
33
 
28
- ${j(l)} the code at <cursor>.
34
+ Complete the code at <cursor> position.
29
35
 
30
- **Completion Constraints (MUST)**
31
- 1. MUST start after: "${i.slice(-3)}"
32
- 2. MUST end before: "${s.slice(0,3)}"
36
+ Guidelines:
37
+ 1. Start after: "${i.slice(-5)}"
38
+ 2. End before: "${s.slice(0,5)}"
39
+ 3. Provide complete, working implementations
40
+ 4. Follow established patterns
41
+ 5. Ensure code is production-ready
33
42
 
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(`
43
+ Output ONLY the implementation without additional text or syntax.`;return {system:c,user:d}};var v=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 q(e)}};var D=(t,e)=>e.getLineContent(t.lineNumber)[t.column-1];var K=(t,e)=>e.getLineContent(t.lineNumber).slice(0,t.column-1),f=(t,e)=>e.getValueInRange({startLineNumber:1,startColumn:1,endLineNumber:t.lineNumber,endColumn:t.column}),F=(t,e)=>e.getValueInRange({startLineNumber:t.lineNumber,startColumn:t.column,endLineNumber:e.getLineCount(),endColumn:e.getLineMaxColumn(e.getLineCount())});var M=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 T=class T{constructor(){this.cache=new M(T.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 !f(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}};T.MAX_CACHE_SIZE=20;var P=T;var I=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
44
  `);if(e.length<=1||this.textBeforeCursorInLine.trim()!=="")return this;let o=" ".repeat(this.currentColumn-1);return this.formattedCompletion=e[0]+`
36
45
  `+e.slice(1).map(n=>o+n).join(`
37
46
  `),this}removeMarkdownCodeBlocks(e){let o=e.split(`
38
47
  `),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(`
39
48
  `)}removeExcessiveNewlines(){return this.formattedCompletion=this.formattedCompletion.replace(/\n{3,}/g,`
40
49
 
41
- `),this}build(){return this.formattedCompletion}};var A=class{findOverlaps(e,o,n){if(!e)return {startOverlapLength:0,maxOverlapLength:0};let r=e.length,i=o.length,s=n.length,l=0,p=0,c=0,u=Math.min(r,i);for(let a=1;a<=u;a++){let g=e.substring(0,a),C=o.slice(-a);g===C&&(c=a);}let m=Math.min(r,s);for(let a=0;a<m&&e[a]===n[a];a++)l++;for(let a=1;a<=m;a++)e.slice(-a)===n.slice(0,a)&&(p=a);let d=Math.max(l,p);if(d===0){for(let a=1;a<r;a++)if(n.startsWith(e.substring(a))){d=r-a;break}}return {startOverlapLength:c,maxOverlapLength:d}}};var L=class{constructor(e){this.monaco=e;this.textOverlapCalculator=new A;}computeInsertionRange(e,o,n){if(!o)return this.createEmptyRange(e);let r=n.getOffsetAt(e),i=n.getValue().substring(0,r),s=n.getValue().substring(r);if(r>=n.getValue().length)return this.createEmptyRange(e);if(s.length===0)return this.createEmptyRange(e);let{startOverlapLength:l,maxOverlapLength:p}=this.textOverlapCalculator.findOverlaps(o,i,s),c=l>0?n.getPositionAt(r-l):e,u=r+p,m=n.getPositionAt(u);return new this.monaco.Range(c.lineNumber,c.column,m.lineNumber,m.column)}computeCacheRange(e,o){let n=e.lineNumber,r=e.column,i=o.split(`
42
- `),s=i.length-1,l=n+s,p=s===0?r+i[0].length:i[s].length+1;return new this.monaco.Range(n,r,l,p)}createEmptyRange(e){return new this.monaco.Range(e.lineNumber,e.column,e.lineNumber,e.column)}};var z=async t=>{let{endpoint:e,body:o}=t,{completion:n,error:r}=await core.HTTP.post(e,o,{headers:{"Content-Type":"application/json"},fallbackError:"Error while fetching completion item"});if(r)throw new Error(r);return {completion:n}},W=({pos:t,mdl:e,options:o})=>{let{filename:n,language:r,technologies:i,relatedFiles:s,maxContextLines:l}=o,p=oe(t,e),u=!!s?.length?3:2,m=l?Math.floor(l/u):void 0,d=(f,h,F)=>{let v=f(t,e);return h?B(v,h,F):v},a=(f,h)=>!f||!h?f:f.map(({content:F,...v})=>({...v,content:B(F,h)})),g=d(y,m,{from:"end"}),C=d(k,m),x=a(s,m);return {filename:n,language:r,technologies:i,relatedFiles:x,textBeforeCursor:g,textAfterCursor:C,cursorPosition:t,editorState:{completionMode:p}}},oe=(t,e)=>{let o=H(t,e),n=k(t,e);return o?"insert":n.trim()?"complete":"continue"};var O=(t,e=600,o=200)=>{let n=null,r=0,i=null,s=null,l=false,p=(...c)=>{if(l)return Promise.resolve(void 0);i=c;let u=Date.now(),m=u-r;r=u,n&&(clearTimeout(n),n=null);let d=m<o?e:o;return s=new Promise((a,g)=>{n=setTimeout(async()=>{l=true;try{if(i){let C=await t(...i);a(C);}else a(void 0);}catch(C){g(C);}finally{l=false,n=null,i=null;}},d);}),s};return p.cancel=()=>{n&&(clearTimeout(n),n=null),i=null;},p};var R=t=>({items:t,enableForwardStability:true});var ie=t=>({onTyping:O(t,600,200),onIdle:O(t,600,400),onDemand:O(t,0,0)}),w=new T,U=async({monaco:t,mdl:e,pos:o,token:n,isCompletionAccepted:r,options:i})=>{let{trigger:s="onIdle",endpoint:l,enableCaching:p=true,onError:c,requestHandler:u}=i;if(p){let m=w.get(o,e).map(d=>({insertText:d.completion,range:d.range}));if(m.length>0)return R(m)}if(n.isCancellationRequested||r)return R([]);try{let d=ie(u??z)[s];n.onCancellationRequested(()=>{d.cancel();});let a=W({pos:o,mdl:e,options:i}),{completion:g}=await d({endpoint:l,body:{completionMetadata:a}});if(g){let C=new S(g,o.column,$(o,e)).removeMarkdownCodeSyntax().removeExcessiveNewlines().removeInvalidLineBreaks().indentByColumn().build(),x=new L(t),f=x.computeInsertionRange(o,C,e),h=x.computeCacheRange(o,C);return p&&w.add({completion:C,range:h,textBeforeCursor:y(o,e)}),R([{insertText:C,range:f}])}}catch(m){if(se(m))return R([]);c?c(m):core.logger.warn("Cannot provide completion",m);}return R([])},se=t=>typeof t=="string"?t==="Cancelled"||t==="AbortError":t instanceof Error?t.message==="Cancelled"||t.name==="AbortError":false;var N=new WeakMap,E=t=>N.get(t),_=(t,e)=>{N.set(t,e);},D=t=>{N.delete(t);},G=()=>({isCompletionAccepted:false,isCompletionVisible:false,isExplicitlyTriggered:false,hasRejectedCurrentCompletion:false});var X=(t,e,o)=>{let n=E(e);return n?t.languages.registerInlineCompletionsProvider(o.language,{provideInlineCompletions:(r,i,s,l)=>{if(!(o.trigger==="onDemand"&&!n.isExplicitlyTriggered))return U({monaco:t,mdl:r,pos:i,token:l,isCompletionAccepted:n.isCompletionAccepted,options:o})},handleItemDidShow:(r,i,s)=>{n.isExplicitlyTriggered=false,n.hasRejectedCurrentCompletion=false,!n.isCompletionAccepted&&(n.isCompletionVisible=true,o.onCompletionShown?.(s,i.range));},freeInlineCompletions:()=>{}}):null},Y=t=>{let e=E(t);if(!e){core.logger.warn("Completion is not registered. Use `registerCompletion` to register completion first.");return}e.isExplicitlyTriggered=true,t.trigger("keyboard","editor.action.inlineSuggest.trigger",{});};var ae={TAB:(t,e)=>e.keyCode===t.KeyCode.Tab,CMD_RIGHT_ARROW:(t,e)=>e.keyCode===t.KeyCode.RightArrow&&e.metaKey},q=class{constructor(e,o,n){this.monaco=e;this.state=o;this.options=n;}handleKeyEvent(e){let o={monaco:this.monaco,event:e,state:this.state,options:this.options};this.handleCompletionAcceptance(o),this.handleCompletionRejection(o);}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(o=>o(this.monaco,e))}},Z=(t,e,o,n)=>{let r=new q(t,o,n);return e.onKeyDown(i=>r.handleKeyEvent(i))};var b=null,pe=(t,e,o)=>{b&&b.deregister();let n=[];_(e,G()),e.updateOptions({inlineSuggest:{enabled:true,mode:"subwordSmart"}});try{let r=E(e);if(!r)return core.logger.warn("Completion is not registered properly. State not found."),me();let i=X(t,e,o);i&&n.push(i);let s=Z(t,e,r,o);n.push(s);let l={deregister:()=>{n.forEach(p=>p.dispose()),w.clear(),D(e),b=null;},trigger:()=>Y(e)};return b=l,l}catch(r){return o.onError?o.onError(r):core.logger.report(r),{deregister:()=>{n.forEach(i=>i.dispose()),D(e),b=null;},trigger:()=>{}}}},me=()=>({deregister:()=>{},trigger:()=>{}});var lt=M;exports.CompletionCopilot=M;exports.Copilot=lt;exports.registerCompletion=pe;
50
+ `),this}build(){return this.formattedCompletion}};var S=class{findOverlaps(e,o,n){if(!e)return {startOverlapLength:0,maxOverlapLength:0};let r=e.length,i=o.length,s=n.length,l=0,p=0,c=0,d=Math.min(r,i);for(let a=1;a<=d;a++){let C=e.substring(0,a),g=o.slice(-a);C===g&&(c=a);}let m=Math.min(r,s);for(let a=0;a<m&&e[a]===n[a];a++)l++;for(let a=1;a<=m;a++)e.slice(-a)===n.slice(0,a)&&(p=a);let u=Math.max(l,p);if(u===0){for(let a=1;a<r;a++)if(n.startsWith(e.substring(a))){u=r-a;break}}return {startOverlapLength:c,maxOverlapLength:u}}};var A=class{constructor(e){this.monaco=e;this.textOverlapCalculator=new S;}computeInsertionRange(e,o,n){if(!o)return this.createEmptyRange(e);let r=n.getOffsetAt(e),i=n.getValue().substring(0,r),s=n.getValue().substring(r);if(r>=n.getValue().length)return this.createEmptyRange(e);if(s.length===0)return this.createEmptyRange(e);let{startOverlapLength:l,maxOverlapLength:p}=this.textOverlapCalculator.findOverlaps(o,i,s),c=l>0?n.getPositionAt(r-l):e,d=r+p,m=n.getPositionAt(d);return new this.monaco.Range(c.lineNumber,c.column,m.lineNumber,m.column)}computeCacheRange(e,o){let n=e.lineNumber,r=e.column,i=o.split(`
51
+ `),s=i.length-1,l=n+s,p=s===0?r+i[0].length:i[s].length+1;return new this.monaco.Range(n,r,l,p)}createEmptyRange(e){return new this.monaco.Range(e.lineNumber,e.column,e.lineNumber,e.column)}};var V=async t=>{let{endpoint:e,body:o}=t,{completion:n,error:r}=await core.HTTP.post(e,o,{headers:{"Content-Type":"application/json"},fallbackError:"Error while fetching completion item"});if(r)throw new Error(r);return {completion:n}},$=({pos:t,mdl:e,options:o})=>{let{filename:n,language:r,technologies:i,relatedFiles:s,maxContextLines:l}=o,p=oe(t,e),d=!!s?.length?3:2,m=l?Math.floor(l/d):void 0,u=(y,E,L)=>{let x=y(t,e);return E?O(x,E,L):x},a=(y,E)=>!y||!E?y:y.map(({content:L,...x})=>({...x,content:O(L,E)})),C=u(f,m,{from:"end"}),g=u(F,m),Q=a(s,m);return {filename:n,language:r,technologies:i,relatedFiles:Q,textBeforeCursor:C,textAfterCursor:g,cursorPosition:t,editorState:{completionMode:p}}},oe=(t,e)=>{let o=D(t,e),n=F(t,e);return o?"insert":n.trim()?"complete":"continue"},H=t=>typeof t=="string"?t==="Cancelled"||t==="AbortError":t instanceof Error?t.message==="Cancelled"||t.name==="AbortError":false;var z=(t,e=600,o=200)=>{let n=null,r=0,i=null,s=null,l=false,p=(...c)=>{if(l)return Promise.resolve(void 0);i=c;let d=Date.now(),m=d-r;r=d,n&&(clearTimeout(n),n=null);let u=m<o?e:o;return s=new Promise((a,C)=>{n=setTimeout(async()=>{l=true;try{if(i){let g=await t(...i);a(g);}else a(void 0);}catch(g){C(g);}finally{l=false,n=null,i=null;}},u);}),s};return p.cancel=()=>{n&&(clearTimeout(n),n=null),i=null;},p};var h=t=>({items:t,enableForwardStability:true});var w=new P,W=async({monaco:t,mdl:e,pos:o,token:n,isCompletionAccepted:r,options:i})=>{let{trigger:s="onIdle",endpoint:l,enableCaching:p=true,onError:c,requestHandler:d}=i;if(p){let m=w.get(o,e).map(u=>({insertText:u.completion,range:u.range}));if(m.length>0)return h(m)}if(n.isCancellationRequested||r)return h([]);try{let m=z(d??V,...{onTyping:[500,100],onIdle:[600,400],onDemand:[0,0]}[s]);n.onCancellationRequested(()=>{m.cancel();});let u=$({pos:o,mdl:e,options:i}),{completion:a}=await m({endpoint:l,body:{completionMetadata:u}});if(a){let C=new I(a,o.column,K(o,e)).removeMarkdownCodeSyntax().removeExcessiveNewlines().removeInvalidLineBreaks().indentByColumn().build(),g=new A(t);return p&&w.add({completion:C,range:g.computeCacheRange(o,C),textBeforeCursor:f(o,e)}),h([{insertText:C,range:g.computeInsertionRange(o,C,e)}])}}catch(m){if(H(m))return h([]);c?c(m):core.logger.warn("Cannot provide completion",m);}return h([])};var B=new WeakMap,R=t=>B.get(t),_=(t,e)=>{B.set(t,e);},k=t=>{B.delete(t);},Y=()=>({isCompletionAccepted:false,isCompletionVisible:false,isExplicitlyTriggered:false,hasRejectedCurrentCompletion:false});var G=(t,e,o)=>{let n=R(e);return n?t.languages.registerInlineCompletionsProvider(o.language,{provideInlineCompletions:(r,i,s,l)=>{if(!(o.trigger==="onDemand"&&!n.isExplicitlyTriggered))return W({monaco:t,mdl:r,pos:i,token:l,isCompletionAccepted:n.isCompletionAccepted,options:o})},handleItemDidShow:(r,i,s)=>{n.isExplicitlyTriggered=false,n.hasRejectedCurrentCompletion=false,!n.isCompletionAccepted&&(n.isCompletionVisible=true,o.onCompletionShown?.(s,i.range));},freeInlineCompletions:()=>{}}):null},U=t=>{let e=R(t);if(!e){core.logger.warn("Completion is not registered. Use `registerCompletion` to register completion first.");return}e.isExplicitlyTriggered=true,t.trigger("keyboard","editor.action.inlineSuggest.trigger",{});};var se={TAB:(t,e)=>e.keyCode===t.KeyCode.Tab,CMD_RIGHT_ARROW:(t,e)=>e.keyCode===t.KeyCode.RightArrow&&e.metaKey},N=class{constructor(e,o,n){this.monaco=e;this.state=o;this.options=n;}handleKeyEvent(e){let o={monaco:this.monaco,event:e,state:this.state,options:this.options};this.handleCompletionAcceptance(o),this.handleCompletionRejection(o);}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(se).some(o=>o(this.monaco,e))}},X=(t,e,o,n)=>{let r=new N(t,o,n);return e.onKeyDown(i=>r.handleKeyEvent(i))};var b=null,le=(t,e,o)=>{b&&b.deregister();let n=[];_(e,Y()),e.updateOptions({inlineSuggest:{enabled:true,mode:"subwordSmart"}});try{let r=R(e);if(!r)return core.logger.warn("Completion is not registered properly. State not found."),ae();let i=G(t,e,o);i&&n.push(i);let s=X(t,e,r,o);n.push(s);let l={deregister:()=>{n.forEach(p=>p.dispose()),w.clear(),k(e),b=null;},trigger:()=>U(e)};return b=l,l}catch(r){return o.onError?o.onError(r):core.logger.report(r),{deregister:()=>{n.forEach(i=>i.dispose()),k(e),b=null;},trigger:()=>{}}}},ae=()=>({deregister:()=>{},trigger:()=>{}});var it=v;exports.CompletionCopilot=v;exports.Copilot=it;exports.registerCompletion=le;
package/build/index.mjs CHANGED
@@ -1,22 +1,28 @@
1
- import {Copilot,logger,HTTP}from'@monacopilot/core';var K=t=>!t||t.length===0?"":t.length===1?t[0]:`${t.slice(0,-1).join(", ")} and ${t.slice(-1)}`,j=t=>t.charAt(0).toUpperCase()+t.slice(1),B=(t,e,o={})=>{if(e<=0)return "";let n=t.split(`
1
+ import {Copilot,logger,HTTP}from'@monacopilot/core';var j=t=>!t||t.length===0?"":t.length===1?t[0]:`${t.slice(0,-1).join(", ")} and ${t.slice(-1)}`;var O=(t,e,o={})=>{if(e<=0)return "";let n=t.split(`
2
2
  `),r=n.length;if(e>=r)return t;if(o.from==="end"){let s=n.slice(-e);return s.every(l=>l==="")?`
3
3
  `.repeat(e):s.join(`
4
4
  `)}let i=n.slice(0,e);return i.every(s=>s==="")?`
5
5
  `.repeat(e):i.join(`
6
6
  `)};var J=t=>!t||t.length===0?"":t.map(({path:e,content:o})=>`
7
7
  ### Path: ${e}
8
- \`\`\`
9
- ${o}
10
- \`\`\``.trim()).join(`
8
+ ${o}`.trim()).join(`
9
+
10
+ `),q=t=>{let{technologies:e=[],filename:o,relatedFiles:n,language:r,textBeforeCursor:i="",textAfterCursor:s="",editorState:{completionMode:l}}=t,p=j([r,...e].filter(m=>typeof m=="string"&&!!m)),c=`
11
+ You are an EXCELLENT predictive code completion assistant.
12
+
13
+ Your goal is to predict and complete the next logical code segment that the developer would write, making their coding experience more efficient and enjoyable.
11
14
 
12
- `),V=t=>{let{technologies:e=[],filename:o,relatedFiles:n,language:r,textBeforeCursor:i="",textAfterCursor:s="",editorState:{completionMode:l}}=t,p=K([r,...e].filter(m=>typeof m=="string"&&!!m)),c=`
13
- You are an EXCELLENT code completion assistant.
15
+ You should:
16
+ 1. Provide complete, functional code segments with full implementation details
17
+ 2. Complete entire functions or logical blocks when appropriate
18
+ 3. Consider common patterns and best practices
19
+ 4. Ensure the output is immediately useful and runnable
14
20
 
15
21
  **Context:**
16
22
  File: ${o||"Untitled"}
17
23
  Language: ${r||"Undetermined"}
18
24
  Mode: ${l}
19
- Stack: ${p||"None"}`,u=`
25
+ Stack: ${p||"None"}`,d=`
20
26
  **Related Files:**
21
27
  ${J(n)}
22
28
 
@@ -25,18 +31,21 @@ ${J(n)}
25
31
  ${i}<cursor>${s}
26
32
  \`\`\`
27
33
 
28
- ${j(l)} the code at <cursor>.
34
+ Complete the code at <cursor> position.
29
35
 
30
- **Completion Constraints (MUST)**
31
- 1. MUST start after: "${i.slice(-3)}"
32
- 2. MUST end before: "${s.slice(0,3)}"
36
+ Guidelines:
37
+ 1. Start after: "${i.slice(-5)}"
38
+ 2. End before: "${s.slice(0,5)}"
39
+ 3. Provide complete, working implementations
40
+ 4. Follow established patterns
41
+ 5. Ensure code is production-ready
33
42
 
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(`
43
+ Output ONLY the implementation without additional text or syntax.`;return {system:c,user:d}};var v=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 q(e)}};var D=(t,e)=>e.getLineContent(t.lineNumber)[t.column-1];var K=(t,e)=>e.getLineContent(t.lineNumber).slice(0,t.column-1),f=(t,e)=>e.getValueInRange({startLineNumber:1,startColumn:1,endLineNumber:t.lineNumber,endColumn:t.column}),F=(t,e)=>e.getValueInRange({startLineNumber:t.lineNumber,startColumn:t.column,endLineNumber:e.getLineCount(),endColumn:e.getLineMaxColumn(e.getLineCount())});var M=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 T=class T{constructor(){this.cache=new M(T.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 !f(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}};T.MAX_CACHE_SIZE=20;var P=T;var I=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
44
  `);if(e.length<=1||this.textBeforeCursorInLine.trim()!=="")return this;let o=" ".repeat(this.currentColumn-1);return this.formattedCompletion=e[0]+`
36
45
  `+e.slice(1).map(n=>o+n).join(`
37
46
  `),this}removeMarkdownCodeBlocks(e){let o=e.split(`
38
47
  `),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(`
39
48
  `)}removeExcessiveNewlines(){return this.formattedCompletion=this.formattedCompletion.replace(/\n{3,}/g,`
40
49
 
41
- `),this}build(){return this.formattedCompletion}};var A=class{findOverlaps(e,o,n){if(!e)return {startOverlapLength:0,maxOverlapLength:0};let r=e.length,i=o.length,s=n.length,l=0,p=0,c=0,u=Math.min(r,i);for(let a=1;a<=u;a++){let g=e.substring(0,a),C=o.slice(-a);g===C&&(c=a);}let m=Math.min(r,s);for(let a=0;a<m&&e[a]===n[a];a++)l++;for(let a=1;a<=m;a++)e.slice(-a)===n.slice(0,a)&&(p=a);let d=Math.max(l,p);if(d===0){for(let a=1;a<r;a++)if(n.startsWith(e.substring(a))){d=r-a;break}}return {startOverlapLength:c,maxOverlapLength:d}}};var L=class{constructor(e){this.monaco=e;this.textOverlapCalculator=new A;}computeInsertionRange(e,o,n){if(!o)return this.createEmptyRange(e);let r=n.getOffsetAt(e),i=n.getValue().substring(0,r),s=n.getValue().substring(r);if(r>=n.getValue().length)return this.createEmptyRange(e);if(s.length===0)return this.createEmptyRange(e);let{startOverlapLength:l,maxOverlapLength:p}=this.textOverlapCalculator.findOverlaps(o,i,s),c=l>0?n.getPositionAt(r-l):e,u=r+p,m=n.getPositionAt(u);return new this.monaco.Range(c.lineNumber,c.column,m.lineNumber,m.column)}computeCacheRange(e,o){let n=e.lineNumber,r=e.column,i=o.split(`
42
- `),s=i.length-1,l=n+s,p=s===0?r+i[0].length:i[s].length+1;return new this.monaco.Range(n,r,l,p)}createEmptyRange(e){return new this.monaco.Range(e.lineNumber,e.column,e.lineNumber,e.column)}};var z=async t=>{let{endpoint:e,body:o}=t,{completion:n,error:r}=await HTTP.post(e,o,{headers:{"Content-Type":"application/json"},fallbackError:"Error while fetching completion item"});if(r)throw new Error(r);return {completion:n}},W=({pos:t,mdl:e,options:o})=>{let{filename:n,language:r,technologies:i,relatedFiles:s,maxContextLines:l}=o,p=oe(t,e),u=!!s?.length?3:2,m=l?Math.floor(l/u):void 0,d=(f,h,F)=>{let v=f(t,e);return h?B(v,h,F):v},a=(f,h)=>!f||!h?f:f.map(({content:F,...v})=>({...v,content:B(F,h)})),g=d(y,m,{from:"end"}),C=d(k,m),x=a(s,m);return {filename:n,language:r,technologies:i,relatedFiles:x,textBeforeCursor:g,textAfterCursor:C,cursorPosition:t,editorState:{completionMode:p}}},oe=(t,e)=>{let o=H(t,e),n=k(t,e);return o?"insert":n.trim()?"complete":"continue"};var O=(t,e=600,o=200)=>{let n=null,r=0,i=null,s=null,l=false,p=(...c)=>{if(l)return Promise.resolve(void 0);i=c;let u=Date.now(),m=u-r;r=u,n&&(clearTimeout(n),n=null);let d=m<o?e:o;return s=new Promise((a,g)=>{n=setTimeout(async()=>{l=true;try{if(i){let C=await t(...i);a(C);}else a(void 0);}catch(C){g(C);}finally{l=false,n=null,i=null;}},d);}),s};return p.cancel=()=>{n&&(clearTimeout(n),n=null),i=null;},p};var R=t=>({items:t,enableForwardStability:true});var ie=t=>({onTyping:O(t,600,200),onIdle:O(t,600,400),onDemand:O(t,0,0)}),w=new T,U=async({monaco:t,mdl:e,pos:o,token:n,isCompletionAccepted:r,options:i})=>{let{trigger:s="onIdle",endpoint:l,enableCaching:p=true,onError:c,requestHandler:u}=i;if(p){let m=w.get(o,e).map(d=>({insertText:d.completion,range:d.range}));if(m.length>0)return R(m)}if(n.isCancellationRequested||r)return R([]);try{let d=ie(u??z)[s];n.onCancellationRequested(()=>{d.cancel();});let a=W({pos:o,mdl:e,options:i}),{completion:g}=await d({endpoint:l,body:{completionMetadata:a}});if(g){let C=new S(g,o.column,$(o,e)).removeMarkdownCodeSyntax().removeExcessiveNewlines().removeInvalidLineBreaks().indentByColumn().build(),x=new L(t),f=x.computeInsertionRange(o,C,e),h=x.computeCacheRange(o,C);return p&&w.add({completion:C,range:h,textBeforeCursor:y(o,e)}),R([{insertText:C,range:f}])}}catch(m){if(se(m))return R([]);c?c(m):logger.warn("Cannot provide completion",m);}return R([])},se=t=>typeof t=="string"?t==="Cancelled"||t==="AbortError":t instanceof Error?t.message==="Cancelled"||t.name==="AbortError":false;var N=new WeakMap,E=t=>N.get(t),_=(t,e)=>{N.set(t,e);},D=t=>{N.delete(t);},G=()=>({isCompletionAccepted:false,isCompletionVisible:false,isExplicitlyTriggered:false,hasRejectedCurrentCompletion:false});var X=(t,e,o)=>{let n=E(e);return n?t.languages.registerInlineCompletionsProvider(o.language,{provideInlineCompletions:(r,i,s,l)=>{if(!(o.trigger==="onDemand"&&!n.isExplicitlyTriggered))return U({monaco:t,mdl:r,pos:i,token:l,isCompletionAccepted:n.isCompletionAccepted,options:o})},handleItemDidShow:(r,i,s)=>{n.isExplicitlyTriggered=false,n.hasRejectedCurrentCompletion=false,!n.isCompletionAccepted&&(n.isCompletionVisible=true,o.onCompletionShown?.(s,i.range));},freeInlineCompletions:()=>{}}):null},Y=t=>{let e=E(t);if(!e){logger.warn("Completion is not registered. Use `registerCompletion` to register completion first.");return}e.isExplicitlyTriggered=true,t.trigger("keyboard","editor.action.inlineSuggest.trigger",{});};var ae={TAB:(t,e)=>e.keyCode===t.KeyCode.Tab,CMD_RIGHT_ARROW:(t,e)=>e.keyCode===t.KeyCode.RightArrow&&e.metaKey},q=class{constructor(e,o,n){this.monaco=e;this.state=o;this.options=n;}handleKeyEvent(e){let o={monaco:this.monaco,event:e,state:this.state,options:this.options};this.handleCompletionAcceptance(o),this.handleCompletionRejection(o);}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(o=>o(this.monaco,e))}},Z=(t,e,o,n)=>{let r=new q(t,o,n);return e.onKeyDown(i=>r.handleKeyEvent(i))};var b=null,pe=(t,e,o)=>{b&&b.deregister();let n=[];_(e,G()),e.updateOptions({inlineSuggest:{enabled:true,mode:"subwordSmart"}});try{let r=E(e);if(!r)return logger.warn("Completion is not registered properly. State not found."),me();let i=X(t,e,o);i&&n.push(i);let s=Z(t,e,r,o);n.push(s);let l={deregister:()=>{n.forEach(p=>p.dispose()),w.clear(),D(e),b=null;},trigger:()=>Y(e)};return b=l,l}catch(r){return o.onError?o.onError(r):logger.report(r),{deregister:()=>{n.forEach(i=>i.dispose()),D(e),b=null;},trigger:()=>{}}}},me=()=>({deregister:()=>{},trigger:()=>{}});var lt=M;export{M as CompletionCopilot,lt as Copilot,pe as registerCompletion};
50
+ `),this}build(){return this.formattedCompletion}};var S=class{findOverlaps(e,o,n){if(!e)return {startOverlapLength:0,maxOverlapLength:0};let r=e.length,i=o.length,s=n.length,l=0,p=0,c=0,d=Math.min(r,i);for(let a=1;a<=d;a++){let C=e.substring(0,a),g=o.slice(-a);C===g&&(c=a);}let m=Math.min(r,s);for(let a=0;a<m&&e[a]===n[a];a++)l++;for(let a=1;a<=m;a++)e.slice(-a)===n.slice(0,a)&&(p=a);let u=Math.max(l,p);if(u===0){for(let a=1;a<r;a++)if(n.startsWith(e.substring(a))){u=r-a;break}}return {startOverlapLength:c,maxOverlapLength:u}}};var A=class{constructor(e){this.monaco=e;this.textOverlapCalculator=new S;}computeInsertionRange(e,o,n){if(!o)return this.createEmptyRange(e);let r=n.getOffsetAt(e),i=n.getValue().substring(0,r),s=n.getValue().substring(r);if(r>=n.getValue().length)return this.createEmptyRange(e);if(s.length===0)return this.createEmptyRange(e);let{startOverlapLength:l,maxOverlapLength:p}=this.textOverlapCalculator.findOverlaps(o,i,s),c=l>0?n.getPositionAt(r-l):e,d=r+p,m=n.getPositionAt(d);return new this.monaco.Range(c.lineNumber,c.column,m.lineNumber,m.column)}computeCacheRange(e,o){let n=e.lineNumber,r=e.column,i=o.split(`
51
+ `),s=i.length-1,l=n+s,p=s===0?r+i[0].length:i[s].length+1;return new this.monaco.Range(n,r,l,p)}createEmptyRange(e){return new this.monaco.Range(e.lineNumber,e.column,e.lineNumber,e.column)}};var V=async t=>{let{endpoint:e,body:o}=t,{completion:n,error:r}=await HTTP.post(e,o,{headers:{"Content-Type":"application/json"},fallbackError:"Error while fetching completion item"});if(r)throw new Error(r);return {completion:n}},$=({pos:t,mdl:e,options:o})=>{let{filename:n,language:r,technologies:i,relatedFiles:s,maxContextLines:l}=o,p=oe(t,e),d=!!s?.length?3:2,m=l?Math.floor(l/d):void 0,u=(y,E,L)=>{let x=y(t,e);return E?O(x,E,L):x},a=(y,E)=>!y||!E?y:y.map(({content:L,...x})=>({...x,content:O(L,E)})),C=u(f,m,{from:"end"}),g=u(F,m),Q=a(s,m);return {filename:n,language:r,technologies:i,relatedFiles:Q,textBeforeCursor:C,textAfterCursor:g,cursorPosition:t,editorState:{completionMode:p}}},oe=(t,e)=>{let o=D(t,e),n=F(t,e);return o?"insert":n.trim()?"complete":"continue"},H=t=>typeof t=="string"?t==="Cancelled"||t==="AbortError":t instanceof Error?t.message==="Cancelled"||t.name==="AbortError":false;var z=(t,e=600,o=200)=>{let n=null,r=0,i=null,s=null,l=false,p=(...c)=>{if(l)return Promise.resolve(void 0);i=c;let d=Date.now(),m=d-r;r=d,n&&(clearTimeout(n),n=null);let u=m<o?e:o;return s=new Promise((a,C)=>{n=setTimeout(async()=>{l=true;try{if(i){let g=await t(...i);a(g);}else a(void 0);}catch(g){C(g);}finally{l=false,n=null,i=null;}},u);}),s};return p.cancel=()=>{n&&(clearTimeout(n),n=null),i=null;},p};var h=t=>({items:t,enableForwardStability:true});var w=new P,W=async({monaco:t,mdl:e,pos:o,token:n,isCompletionAccepted:r,options:i})=>{let{trigger:s="onIdle",endpoint:l,enableCaching:p=true,onError:c,requestHandler:d}=i;if(p){let m=w.get(o,e).map(u=>({insertText:u.completion,range:u.range}));if(m.length>0)return h(m)}if(n.isCancellationRequested||r)return h([]);try{let m=z(d??V,...{onTyping:[500,100],onIdle:[600,400],onDemand:[0,0]}[s]);n.onCancellationRequested(()=>{m.cancel();});let u=$({pos:o,mdl:e,options:i}),{completion:a}=await m({endpoint:l,body:{completionMetadata:u}});if(a){let C=new I(a,o.column,K(o,e)).removeMarkdownCodeSyntax().removeExcessiveNewlines().removeInvalidLineBreaks().indentByColumn().build(),g=new A(t);return p&&w.add({completion:C,range:g.computeCacheRange(o,C),textBeforeCursor:f(o,e)}),h([{insertText:C,range:g.computeInsertionRange(o,C,e)}])}}catch(m){if(H(m))return h([]);c?c(m):logger.warn("Cannot provide completion",m);}return h([])};var B=new WeakMap,R=t=>B.get(t),_=(t,e)=>{B.set(t,e);},k=t=>{B.delete(t);},Y=()=>({isCompletionAccepted:false,isCompletionVisible:false,isExplicitlyTriggered:false,hasRejectedCurrentCompletion:false});var G=(t,e,o)=>{let n=R(e);return n?t.languages.registerInlineCompletionsProvider(o.language,{provideInlineCompletions:(r,i,s,l)=>{if(!(o.trigger==="onDemand"&&!n.isExplicitlyTriggered))return W({monaco:t,mdl:r,pos:i,token:l,isCompletionAccepted:n.isCompletionAccepted,options:o})},handleItemDidShow:(r,i,s)=>{n.isExplicitlyTriggered=false,n.hasRejectedCurrentCompletion=false,!n.isCompletionAccepted&&(n.isCompletionVisible=true,o.onCompletionShown?.(s,i.range));},freeInlineCompletions:()=>{}}):null},U=t=>{let e=R(t);if(!e){logger.warn("Completion is not registered. Use `registerCompletion` to register completion first.");return}e.isExplicitlyTriggered=true,t.trigger("keyboard","editor.action.inlineSuggest.trigger",{});};var se={TAB:(t,e)=>e.keyCode===t.KeyCode.Tab,CMD_RIGHT_ARROW:(t,e)=>e.keyCode===t.KeyCode.RightArrow&&e.metaKey},N=class{constructor(e,o,n){this.monaco=e;this.state=o;this.options=n;}handleKeyEvent(e){let o={monaco:this.monaco,event:e,state:this.state,options:this.options};this.handleCompletionAcceptance(o),this.handleCompletionRejection(o);}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(se).some(o=>o(this.monaco,e))}},X=(t,e,o,n)=>{let r=new N(t,o,n);return e.onKeyDown(i=>r.handleKeyEvent(i))};var b=null,le=(t,e,o)=>{b&&b.deregister();let n=[];_(e,Y()),e.updateOptions({inlineSuggest:{enabled:true,mode:"subwordSmart"}});try{let r=R(e);if(!r)return logger.warn("Completion is not registered properly. State not found."),ae();let i=G(t,e,o);i&&n.push(i);let s=X(t,e,r,o);n.push(s);let l={deregister:()=>{n.forEach(p=>p.dispose()),w.clear(),k(e),b=null;},trigger:()=>U(e)};return b=l,l}catch(r){return o.onError?o.onError(r):logger.report(r),{deregister:()=>{n.forEach(i=>i.dispose()),k(e),b=null;},trigger:()=>{}}}},ae=()=>({deregister:()=>{},trigger:()=>{}});var it=v;export{v as CompletionCopilot,it as Copilot,le as registerCompletion};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "monacopilot",
3
- "version": "0.19.14",
3
+ "version": "0.19.15",
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.14"
40
+ "@monacopilot/core": "0.19.15"
41
41
  },
42
42
  "peerDependencies": {
43
43
  "monaco-editor": ">=0.41.0"