flavor-code 1.3.2 → 1.3.3
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 +2 -2
- package/README.zh-CN.md +2 -2
- package/dist/{app-F6FEEF46.js → app-NXOGWGSI.js} +1 -1
- package/dist/{chunk-DFSMJ5SX.js → chunk-JKJOQRAL.js} +1 -1
- package/dist/{chunk-Q5EQ4T3F.js → chunk-YY5H6GFN.js} +9 -23
- package/dist/cli.js +3 -3
- package/dist/desktop/main.js +7 -21
- package/dist/desktop-renderer/assets/{index--vSisKu7.css → index-CdeAi527.css} +1 -1
- package/dist/desktop-renderer/assets/{index-ByWADjgv.js → index-CnGHSdJ6.js} +5 -5
- package/dist/desktop-renderer/assets/{interactive-terminal-BAwIPsif.js → interactive-terminal-BpNgJ_fv.js} +1 -1
- package/dist/desktop-renderer/index.html +2 -2
- package/dist/init/project.d.ts +2 -2
- package/dist/production.d.ts +2 -2
- package/dist/sdk/index.js +2 -2
- package/package.json +2 -2
- package//346/212/200/346/234/257/346/226/271/346/241/210/346/212/245/345/221/212.md +2 -2
- package/dist/codeisland/activate.mjs +0 -74
- package/dist/codeisland/bridge.mjs +0 -97
- package/dist/codeisland/flavor-plugin.json +0 -27
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{i as e,n as t,r as n,t as r}from"./index-ByWADjgv.js";var i=e(n(),1),a=2,o=1,s=class{activate(e){this._terminal=e}dispose(){}fit(){let e=this.proposeDimensions();if(!e||!this._terminal||isNaN(e.cols)||isNaN(e.rows))return;let t=this._terminal._core;(this._terminal.rows!==e.rows||this._terminal.cols!==e.cols)&&(t._renderService.clear(),this._terminal.resize(e.cols,e.rows))}proposeDimensions(){if(!this._terminal||!this._terminal.element||!this._terminal.element.parentElement)return;let e=this._terminal._core._renderService.dimensions;if(e.css.cell.width===0||e.css.cell.height===0)return;let t=this._terminal.options.scrollback===0?0:this._terminal.options.overviewRuler?.width||14,n=window.getComputedStyle(this._terminal.element.parentElement),r=parseInt(n.getPropertyValue(`height`)),i=Math.max(0,parseInt(n.getPropertyValue(`width`))),s=window.getComputedStyle(this._terminal.element),c={top:parseInt(s.getPropertyValue(`padding-top`)),bottom:parseInt(s.getPropertyValue(`padding-bottom`)),right:parseInt(s.getPropertyValue(`padding-right`)),left:parseInt(s.getPropertyValue(`padding-left`))},l=c.top+c.bottom,u=c.right+c.left,d=r-l,f=i-u-t;return{cols:Math.max(a,Math.floor(f/e.css.cell.width)),rows:Math.max(o,Math.floor(d/e.css.cell.height))}}},c=Object.defineProperty,l=Object.getOwnPropertyDescriptor,u=(e,t)=>{for(var n in t)c(e,n,{get:t[n],enumerable:!0})},d=(e,t,n,r)=>{for(var i=r>1?void 0:r?l(t,n):t,a=e.length-1,o;a>=0;a--)(o=e[a])&&(i=(r?o(t,n,i):o(i))||i);return r&&i&&c(t,n,i),i},f=(e,t)=>(n,r)=>t(n,r,e),p=`Terminal input`,m={get:()=>p,set:e=>p=e},h=`Too much output to announce, navigate to rows manually to read`,g={get:()=>h,set:e=>h=e};function _(e){return e.replace(/\r?\n/g,`\r`)}function ee(e,t){return t?`\x1B[200~`+e+`\x1B[201~`:e}function te(e,t){e.clipboardData&&e.clipboardData.setData(`text/plain`,t.selectionText),e.preventDefault()}function ne(e,t,n,r){e.stopPropagation(),e.clipboardData&&re(e.clipboardData.getData(`text/plain`),t,n,r)}function re(e,t,n,r){e=_(e),e=ee(e,n.decPrivateModes.bracketedPasteMode&&r.rawOptions.ignoreBracketedPasteMode!==!0),n.triggerDataEvent(e,!0),t.value=``}function ie(e,t,n){let r=n.getBoundingClientRect(),i=e.clientX-r.left-10,a=e.clientY-r.top-10;t.style.width=`20px`,t.style.height=`20px`,t.style.left=`${i}px`,t.style.top=`${a}px`,t.style.zIndex=`1000`,t.focus()}function ae(e,t,n,r,i){ie(e,t,n),i&&r.rightClickSelect(e),t.value=r.selectionText,t.select()}function v(e){return e>65535?(e-=65536,String.fromCharCode((e>>10)+55296)+String.fromCharCode(e%1024+56320)):String.fromCharCode(e)}function oe(e,t=0,n=e.length){let r=``;for(let i=t;i<n;++i){let t=e[i];t>65535?(t-=65536,r+=String.fromCharCode((t>>10)+55296)+String.fromCharCode(t%1024+56320)):r+=String.fromCharCode(t)}return r}var se=class{constructor(){this._interim=0}clear(){this._interim=0}decode(e,t){let n=e.length;if(!n)return 0;let r=0,i=0;if(this._interim){let n=e.charCodeAt(i++);56320<=n&&n<=57343?t[r++]=(this._interim-55296)*1024+n-56320+65536:(t[r++]=this._interim,t[r++]=n),this._interim=0}for(let a=i;a<n;++a){let i=e.charCodeAt(a);if(55296<=i&&i<=56319){if(++a>=n)return this._interim=i,r;let o=e.charCodeAt(a);56320<=o&&o<=57343?t[r++]=(i-55296)*1024+o-56320+65536:(t[r++]=i,t[r++]=o);continue}i!==65279&&(t[r++]=i)}return r}},y=class{constructor(){this.interim=new Uint8Array(3)}clear(){this.interim.fill(0)}decode(e,t){let n=e.length;if(!n)return 0;let r=0,i,a,o,s,c=0,l=0;if(this.interim[0]){let i=!1,a=this.interim[0];a&=(a&224)==192?31:(a&240)==224?15:7;let o=0,s;for(;(s=this.interim[++o]&63)&&o<4;)a<<=6,a|=s;let c=(this.interim[0]&224)==192?2:(this.interim[0]&240)==224?3:4,u=c-o;for(;l<u;){if(l>=n)return 0;if(s=e[l++],(s&192)!=128){l--,i=!0;break}else this.interim[o++]=s,a<<=6,a|=s&63}i||(c===2?a<128?l--:t[r++]=a:c===3?a<2048||a>=55296&&a<=57343||a===65279||(t[r++]=a):a<65536||a>1114111||(t[r++]=a)),this.interim.fill(0)}let u=n-4,d=l;for(;d<n;){for(;d<u&&!((i=e[d])&128)&&!((a=e[d+1])&128)&&!((o=e[d+2])&128)&&!((s=e[d+3])&128);)t[r++]=i,t[r++]=a,t[r++]=o,t[r++]=s,d+=4;if(i=e[d++],i<128)t[r++]=i;else if((i&224)==192){if(d>=n)return this.interim[0]=i,r;if(a=e[d++],(a&192)!=128){d--;continue}if(c=(i&31)<<6|a&63,c<128){d--;continue}t[r++]=c}else if((i&240)==224){if(d>=n)return this.interim[0]=i,r;if(a=e[d++],(a&192)!=128){d--;continue}if(d>=n)return this.interim[0]=i,this.interim[1]=a,r;if(o=e[d++],(o&192)!=128){d--;continue}if(c=(i&15)<<12|(a&63)<<6|o&63,c<2048||c>=55296&&c<=57343||c===65279)continue;t[r++]=c}else if((i&248)==240){if(d>=n)return this.interim[0]=i,r;if(a=e[d++],(a&192)!=128){d--;continue}if(d>=n)return this.interim[0]=i,this.interim[1]=a,r;if(o=e[d++],(o&192)!=128){d--;continue}if(d>=n)return this.interim[0]=i,this.interim[1]=a,this.interim[2]=o,r;if(s=e[d++],(s&192)!=128){d--;continue}if(c=(i&7)<<18|(a&63)<<12|(o&63)<<6|s&63,c<65536||c>1114111)continue;t[r++]=c}}return r}},ce=``,le=` `,ue=class e{constructor(){this.fg=0,this.bg=0,this.extended=new b}static toColorRGB(e){return[e>>>16&255,e>>>8&255,e&255]}static fromColorRGB(e){return(e[0]&255)<<16|(e[1]&255)<<8|e[2]&255}clone(){let t=new e;return t.fg=this.fg,t.bg=this.bg,t.extended=this.extended.clone(),t}isInverse(){return this.fg&67108864}isBold(){return this.fg&134217728}isUnderline(){return this.hasExtendedAttrs()&&this.extended.underlineStyle!==0?1:this.fg&268435456}isBlink(){return this.fg&536870912}isInvisible(){return this.fg&1073741824}isItalic(){return this.bg&67108864}isDim(){return this.bg&134217728}isStrikethrough(){return this.fg&2147483648}isProtected(){return this.bg&536870912}isOverline(){return this.bg&1073741824}getFgColorMode(){return this.fg&50331648}getBgColorMode(){return this.bg&50331648}isFgRGB(){return(this.fg&50331648)==50331648}isBgRGB(){return(this.bg&50331648)==50331648}isFgPalette(){return(this.fg&50331648)==16777216||(this.fg&50331648)==33554432}isBgPalette(){return(this.bg&50331648)==16777216||(this.bg&50331648)==33554432}isFgDefault(){return(this.fg&50331648)==0}isBgDefault(){return(this.bg&50331648)==0}isAttributeDefault(){return this.fg===0&&this.bg===0}getFgColor(){switch(this.fg&50331648){case 16777216:case 33554432:return this.fg&255;case 50331648:return this.fg&16777215;default:return-1}}getBgColor(){switch(this.bg&50331648){case 16777216:case 33554432:return this.bg&255;case 50331648:return this.bg&16777215;default:return-1}}hasExtendedAttrs(){return this.bg&268435456}updateExtended(){this.extended.isEmpty()?this.bg&=-268435457:this.bg|=268435456}getUnderlineColor(){if(this.bg&268435456&&~this.extended.underlineColor)switch(this.extended.underlineColor&50331648){case 16777216:case 33554432:return this.extended.underlineColor&255;case 50331648:return this.extended.underlineColor&16777215;default:return this.getFgColor()}return this.getFgColor()}getUnderlineColorMode(){return this.bg&268435456&&~this.extended.underlineColor?this.extended.underlineColor&50331648:this.getFgColorMode()}isUnderlineColorRGB(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)==50331648:this.isFgRGB()}isUnderlineColorPalette(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)==16777216||(this.extended.underlineColor&50331648)==33554432:this.isFgPalette()}isUnderlineColorDefault(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)==0:this.isFgDefault()}getUnderlineStyle(){return this.fg&268435456?this.bg&268435456?this.extended.underlineStyle:1:0}getUnderlineVariantOffset(){return this.extended.underlineVariantOffset}},b=class e{constructor(e=0,t=0){this._ext=0,this._urlId=0,this._ext=e,this._urlId=t}get ext(){return this._urlId?this._ext&-469762049|this.underlineStyle<<26:this._ext}set ext(e){this._ext=e}get underlineStyle(){return this._urlId?5:(this._ext&469762048)>>26}set underlineStyle(e){this._ext&=-469762049,this._ext|=e<<26&469762048}get underlineColor(){return this._ext&67108863}set underlineColor(e){this._ext&=-67108864,this._ext|=e&67108863}get urlId(){return this._urlId}set urlId(e){this._urlId=e}get underlineVariantOffset(){let e=(this._ext&3758096384)>>29;return e<0?e^4294967288:e}set underlineVariantOffset(e){this._ext&=536870911,this._ext|=e<<29&3758096384}clone(){return new e(this._ext,this._urlId)}isEmpty(){return this.underlineStyle===0&&this._urlId===0}},x=class e extends ue{constructor(){super(...arguments),this.content=0,this.fg=0,this.bg=0,this.extended=new b,this.combinedData=``}static fromCharData(t){let n=new e;return n.setFromCharData(t),n}isCombined(){return this.content&2097152}getWidth(){return this.content>>22}getChars(){return this.content&2097152?this.combinedData:this.content&2097151?v(this.content&2097151):``}getCode(){return this.isCombined()?this.combinedData.charCodeAt(this.combinedData.length-1):this.content&2097151}setFromCharData(e){this.fg=e[0],this.bg=0;let t=!1;if(e[1].length>2)t=!0;else if(e[1].length===2){let n=e[1].charCodeAt(0);if(55296<=n&&n<=56319){let r=e[1].charCodeAt(1);56320<=r&&r<=57343?this.content=(n-55296)*1024+r-56320+65536|e[2]<<22:t=!0}else t=!0}else this.content=e[1].charCodeAt(0)|e[2]<<22;t&&(this.combinedData=e[1],this.content=2097152|e[2]<<22)}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}},de=`di$target`,fe=`di$dependencies`,S=new Map;function pe(e){return e[fe]||[]}function C(e){if(S.has(e))return S.get(e);let t=function(e,n,r){if(arguments.length!==3)throw Error(`@IServiceName-decorator can only be used to decorate a parameter`);me(t,e,r)};return t._id=e,S.set(e,t),t}function me(e,t,n){t[de]===t?t[fe].push({id:e,index:n}):(t[fe]=[{id:e,index:n}],t[de]=t)}var w=C(`BufferService`),he=C(`CoreMouseService`),T=C(`CoreService`),ge=C(`CharsetService`),E=C(`InstantiationService`),_e=C(`LogService`),D=C(`OptionsService`),ve=C(`OscLinkService`),ye=C(`UnicodeService`),be=C(`DecorationService`),xe=class{constructor(e,t,n){this._bufferService=e,this._optionsService=t,this._oscLinkService=n}provideLinks(e,t){let n=this._bufferService.buffer.lines.get(e-1);if(!n){t(void 0);return}let r=[],i=this._optionsService.rawOptions.linkHandler,a=new x,o=n.getTrimmedLength(),s=-1,c=-1,l=!1;for(let t=0;t<o;t++)if(!(c===-1&&!n.hasContent(t))){if(n.loadCell(t,a),a.hasExtendedAttrs()&&a.extended.urlId)if(c===-1){c=t,s=a.extended.urlId;continue}else l=a.extended.urlId!==s;else c!==-1&&(l=!0);if(l||c!==-1&&t===o-1){let n=this._oscLinkService.getLinkData(s)?.uri;if(n){let a={start:{x:c+1,y:e},end:{x:t+ +(!l&&t===o-1),y:e}},s=!1;if(!i?.allowNonHttpProtocols)try{let e=new URL(n);[`http:`,`https:`].includes(e.protocol)||(s=!0)}catch{s=!0}s||r.push({text:n,range:a,activate:(e,t)=>i?i.activate(e,t,a):Se(e,t),hover:(e,t)=>i?.hover?.(e,t,a),leave:(e,t)=>i?.leave?.(e,t,a)})}l=!1,a.hasExtendedAttrs()&&a.extended.urlId?(c=t,s=a.extended.urlId):(c=-1,s=-1)}}t(r)}};xe=d([f(0,w),f(1,D),f(2,ve)],xe);function Se(e,t){if(confirm(`Do you want to navigate to ${t}?
|
|
1
|
+
import{i as e,n as t,r as n,t as r}from"./index-CnGHSdJ6.js";var i=e(n(),1),a=2,o=1,s=class{activate(e){this._terminal=e}dispose(){}fit(){let e=this.proposeDimensions();if(!e||!this._terminal||isNaN(e.cols)||isNaN(e.rows))return;let t=this._terminal._core;(this._terminal.rows!==e.rows||this._terminal.cols!==e.cols)&&(t._renderService.clear(),this._terminal.resize(e.cols,e.rows))}proposeDimensions(){if(!this._terminal||!this._terminal.element||!this._terminal.element.parentElement)return;let e=this._terminal._core._renderService.dimensions;if(e.css.cell.width===0||e.css.cell.height===0)return;let t=this._terminal.options.scrollback===0?0:this._terminal.options.overviewRuler?.width||14,n=window.getComputedStyle(this._terminal.element.parentElement),r=parseInt(n.getPropertyValue(`height`)),i=Math.max(0,parseInt(n.getPropertyValue(`width`))),s=window.getComputedStyle(this._terminal.element),c={top:parseInt(s.getPropertyValue(`padding-top`)),bottom:parseInt(s.getPropertyValue(`padding-bottom`)),right:parseInt(s.getPropertyValue(`padding-right`)),left:parseInt(s.getPropertyValue(`padding-left`))},l=c.top+c.bottom,u=c.right+c.left,d=r-l,f=i-u-t;return{cols:Math.max(a,Math.floor(f/e.css.cell.width)),rows:Math.max(o,Math.floor(d/e.css.cell.height))}}},c=Object.defineProperty,l=Object.getOwnPropertyDescriptor,u=(e,t)=>{for(var n in t)c(e,n,{get:t[n],enumerable:!0})},d=(e,t,n,r)=>{for(var i=r>1?void 0:r?l(t,n):t,a=e.length-1,o;a>=0;a--)(o=e[a])&&(i=(r?o(t,n,i):o(i))||i);return r&&i&&c(t,n,i),i},f=(e,t)=>(n,r)=>t(n,r,e),p=`Terminal input`,m={get:()=>p,set:e=>p=e},h=`Too much output to announce, navigate to rows manually to read`,g={get:()=>h,set:e=>h=e};function _(e){return e.replace(/\r?\n/g,`\r`)}function ee(e,t){return t?`\x1B[200~`+e+`\x1B[201~`:e}function te(e,t){e.clipboardData&&e.clipboardData.setData(`text/plain`,t.selectionText),e.preventDefault()}function ne(e,t,n,r){e.stopPropagation(),e.clipboardData&&re(e.clipboardData.getData(`text/plain`),t,n,r)}function re(e,t,n,r){e=_(e),e=ee(e,n.decPrivateModes.bracketedPasteMode&&r.rawOptions.ignoreBracketedPasteMode!==!0),n.triggerDataEvent(e,!0),t.value=``}function ie(e,t,n){let r=n.getBoundingClientRect(),i=e.clientX-r.left-10,a=e.clientY-r.top-10;t.style.width=`20px`,t.style.height=`20px`,t.style.left=`${i}px`,t.style.top=`${a}px`,t.style.zIndex=`1000`,t.focus()}function ae(e,t,n,r,i){ie(e,t,n),i&&r.rightClickSelect(e),t.value=r.selectionText,t.select()}function v(e){return e>65535?(e-=65536,String.fromCharCode((e>>10)+55296)+String.fromCharCode(e%1024+56320)):String.fromCharCode(e)}function oe(e,t=0,n=e.length){let r=``;for(let i=t;i<n;++i){let t=e[i];t>65535?(t-=65536,r+=String.fromCharCode((t>>10)+55296)+String.fromCharCode(t%1024+56320)):r+=String.fromCharCode(t)}return r}var se=class{constructor(){this._interim=0}clear(){this._interim=0}decode(e,t){let n=e.length;if(!n)return 0;let r=0,i=0;if(this._interim){let n=e.charCodeAt(i++);56320<=n&&n<=57343?t[r++]=(this._interim-55296)*1024+n-56320+65536:(t[r++]=this._interim,t[r++]=n),this._interim=0}for(let a=i;a<n;++a){let i=e.charCodeAt(a);if(55296<=i&&i<=56319){if(++a>=n)return this._interim=i,r;let o=e.charCodeAt(a);56320<=o&&o<=57343?t[r++]=(i-55296)*1024+o-56320+65536:(t[r++]=i,t[r++]=o);continue}i!==65279&&(t[r++]=i)}return r}},y=class{constructor(){this.interim=new Uint8Array(3)}clear(){this.interim.fill(0)}decode(e,t){let n=e.length;if(!n)return 0;let r=0,i,a,o,s,c=0,l=0;if(this.interim[0]){let i=!1,a=this.interim[0];a&=(a&224)==192?31:(a&240)==224?15:7;let o=0,s;for(;(s=this.interim[++o]&63)&&o<4;)a<<=6,a|=s;let c=(this.interim[0]&224)==192?2:(this.interim[0]&240)==224?3:4,u=c-o;for(;l<u;){if(l>=n)return 0;if(s=e[l++],(s&192)!=128){l--,i=!0;break}else this.interim[o++]=s,a<<=6,a|=s&63}i||(c===2?a<128?l--:t[r++]=a:c===3?a<2048||a>=55296&&a<=57343||a===65279||(t[r++]=a):a<65536||a>1114111||(t[r++]=a)),this.interim.fill(0)}let u=n-4,d=l;for(;d<n;){for(;d<u&&!((i=e[d])&128)&&!((a=e[d+1])&128)&&!((o=e[d+2])&128)&&!((s=e[d+3])&128);)t[r++]=i,t[r++]=a,t[r++]=o,t[r++]=s,d+=4;if(i=e[d++],i<128)t[r++]=i;else if((i&224)==192){if(d>=n)return this.interim[0]=i,r;if(a=e[d++],(a&192)!=128){d--;continue}if(c=(i&31)<<6|a&63,c<128){d--;continue}t[r++]=c}else if((i&240)==224){if(d>=n)return this.interim[0]=i,r;if(a=e[d++],(a&192)!=128){d--;continue}if(d>=n)return this.interim[0]=i,this.interim[1]=a,r;if(o=e[d++],(o&192)!=128){d--;continue}if(c=(i&15)<<12|(a&63)<<6|o&63,c<2048||c>=55296&&c<=57343||c===65279)continue;t[r++]=c}else if((i&248)==240){if(d>=n)return this.interim[0]=i,r;if(a=e[d++],(a&192)!=128){d--;continue}if(d>=n)return this.interim[0]=i,this.interim[1]=a,r;if(o=e[d++],(o&192)!=128){d--;continue}if(d>=n)return this.interim[0]=i,this.interim[1]=a,this.interim[2]=o,r;if(s=e[d++],(s&192)!=128){d--;continue}if(c=(i&7)<<18|(a&63)<<12|(o&63)<<6|s&63,c<65536||c>1114111)continue;t[r++]=c}}return r}},ce=``,le=` `,ue=class e{constructor(){this.fg=0,this.bg=0,this.extended=new b}static toColorRGB(e){return[e>>>16&255,e>>>8&255,e&255]}static fromColorRGB(e){return(e[0]&255)<<16|(e[1]&255)<<8|e[2]&255}clone(){let t=new e;return t.fg=this.fg,t.bg=this.bg,t.extended=this.extended.clone(),t}isInverse(){return this.fg&67108864}isBold(){return this.fg&134217728}isUnderline(){return this.hasExtendedAttrs()&&this.extended.underlineStyle!==0?1:this.fg&268435456}isBlink(){return this.fg&536870912}isInvisible(){return this.fg&1073741824}isItalic(){return this.bg&67108864}isDim(){return this.bg&134217728}isStrikethrough(){return this.fg&2147483648}isProtected(){return this.bg&536870912}isOverline(){return this.bg&1073741824}getFgColorMode(){return this.fg&50331648}getBgColorMode(){return this.bg&50331648}isFgRGB(){return(this.fg&50331648)==50331648}isBgRGB(){return(this.bg&50331648)==50331648}isFgPalette(){return(this.fg&50331648)==16777216||(this.fg&50331648)==33554432}isBgPalette(){return(this.bg&50331648)==16777216||(this.bg&50331648)==33554432}isFgDefault(){return(this.fg&50331648)==0}isBgDefault(){return(this.bg&50331648)==0}isAttributeDefault(){return this.fg===0&&this.bg===0}getFgColor(){switch(this.fg&50331648){case 16777216:case 33554432:return this.fg&255;case 50331648:return this.fg&16777215;default:return-1}}getBgColor(){switch(this.bg&50331648){case 16777216:case 33554432:return this.bg&255;case 50331648:return this.bg&16777215;default:return-1}}hasExtendedAttrs(){return this.bg&268435456}updateExtended(){this.extended.isEmpty()?this.bg&=-268435457:this.bg|=268435456}getUnderlineColor(){if(this.bg&268435456&&~this.extended.underlineColor)switch(this.extended.underlineColor&50331648){case 16777216:case 33554432:return this.extended.underlineColor&255;case 50331648:return this.extended.underlineColor&16777215;default:return this.getFgColor()}return this.getFgColor()}getUnderlineColorMode(){return this.bg&268435456&&~this.extended.underlineColor?this.extended.underlineColor&50331648:this.getFgColorMode()}isUnderlineColorRGB(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)==50331648:this.isFgRGB()}isUnderlineColorPalette(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)==16777216||(this.extended.underlineColor&50331648)==33554432:this.isFgPalette()}isUnderlineColorDefault(){return this.bg&268435456&&~this.extended.underlineColor?(this.extended.underlineColor&50331648)==0:this.isFgDefault()}getUnderlineStyle(){return this.fg&268435456?this.bg&268435456?this.extended.underlineStyle:1:0}getUnderlineVariantOffset(){return this.extended.underlineVariantOffset}},b=class e{constructor(e=0,t=0){this._ext=0,this._urlId=0,this._ext=e,this._urlId=t}get ext(){return this._urlId?this._ext&-469762049|this.underlineStyle<<26:this._ext}set ext(e){this._ext=e}get underlineStyle(){return this._urlId?5:(this._ext&469762048)>>26}set underlineStyle(e){this._ext&=-469762049,this._ext|=e<<26&469762048}get underlineColor(){return this._ext&67108863}set underlineColor(e){this._ext&=-67108864,this._ext|=e&67108863}get urlId(){return this._urlId}set urlId(e){this._urlId=e}get underlineVariantOffset(){let e=(this._ext&3758096384)>>29;return e<0?e^4294967288:e}set underlineVariantOffset(e){this._ext&=536870911,this._ext|=e<<29&3758096384}clone(){return new e(this._ext,this._urlId)}isEmpty(){return this.underlineStyle===0&&this._urlId===0}},x=class e extends ue{constructor(){super(...arguments),this.content=0,this.fg=0,this.bg=0,this.extended=new b,this.combinedData=``}static fromCharData(t){let n=new e;return n.setFromCharData(t),n}isCombined(){return this.content&2097152}getWidth(){return this.content>>22}getChars(){return this.content&2097152?this.combinedData:this.content&2097151?v(this.content&2097151):``}getCode(){return this.isCombined()?this.combinedData.charCodeAt(this.combinedData.length-1):this.content&2097151}setFromCharData(e){this.fg=e[0],this.bg=0;let t=!1;if(e[1].length>2)t=!0;else if(e[1].length===2){let n=e[1].charCodeAt(0);if(55296<=n&&n<=56319){let r=e[1].charCodeAt(1);56320<=r&&r<=57343?this.content=(n-55296)*1024+r-56320+65536|e[2]<<22:t=!0}else t=!0}else this.content=e[1].charCodeAt(0)|e[2]<<22;t&&(this.combinedData=e[1],this.content=2097152|e[2]<<22)}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}},de=`di$target`,fe=`di$dependencies`,S=new Map;function pe(e){return e[fe]||[]}function C(e){if(S.has(e))return S.get(e);let t=function(e,n,r){if(arguments.length!==3)throw Error(`@IServiceName-decorator can only be used to decorate a parameter`);me(t,e,r)};return t._id=e,S.set(e,t),t}function me(e,t,n){t[de]===t?t[fe].push({id:e,index:n}):(t[fe]=[{id:e,index:n}],t[de]=t)}var w=C(`BufferService`),he=C(`CoreMouseService`),T=C(`CoreService`),ge=C(`CharsetService`),E=C(`InstantiationService`),_e=C(`LogService`),D=C(`OptionsService`),ve=C(`OscLinkService`),ye=C(`UnicodeService`),be=C(`DecorationService`),xe=class{constructor(e,t,n){this._bufferService=e,this._optionsService=t,this._oscLinkService=n}provideLinks(e,t){let n=this._bufferService.buffer.lines.get(e-1);if(!n){t(void 0);return}let r=[],i=this._optionsService.rawOptions.linkHandler,a=new x,o=n.getTrimmedLength(),s=-1,c=-1,l=!1;for(let t=0;t<o;t++)if(!(c===-1&&!n.hasContent(t))){if(n.loadCell(t,a),a.hasExtendedAttrs()&&a.extended.urlId)if(c===-1){c=t,s=a.extended.urlId;continue}else l=a.extended.urlId!==s;else c!==-1&&(l=!0);if(l||c!==-1&&t===o-1){let n=this._oscLinkService.getLinkData(s)?.uri;if(n){let a={start:{x:c+1,y:e},end:{x:t+ +(!l&&t===o-1),y:e}},s=!1;if(!i?.allowNonHttpProtocols)try{let e=new URL(n);[`http:`,`https:`].includes(e.protocol)||(s=!0)}catch{s=!0}s||r.push({text:n,range:a,activate:(e,t)=>i?i.activate(e,t,a):Se(e,t),hover:(e,t)=>i?.hover?.(e,t,a),leave:(e,t)=>i?.leave?.(e,t,a)})}l=!1,a.hasExtendedAttrs()&&a.extended.urlId?(c=t,s=a.extended.urlId):(c=-1,s=-1)}}t(r)}};xe=d([f(0,w),f(1,D),f(2,ve)],xe);function Se(e,t){if(confirm(`Do you want to navigate to ${t}?
|
|
2
2
|
|
|
3
3
|
WARNING: This link could potentially be dangerous`)){let e=window.open();if(e){try{e.opener=null}catch{}e.location.href=t}else console.warn(`Opening link blocked as opener could not be cleared`)}}var Ce=C(`CharSizeService`),we=C(`CoreBrowserService`),Te=C(`MouseService`),Ee=C(`RenderService`),De=C(`SelectionService`),Oe=C(`CharacterJoinerService`),ke=C(`ThemeService`),Ae=C(`LinkProviderService`),je=new class{constructor(){this.listeners=[],this.unexpectedErrorHandler=function(e){setTimeout(()=>{throw e.stack?Le.isErrorNoTelemetry(e)?new Le(e.message+`
|
|
4
4
|
|
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
<meta name="color-scheme" content="light" />
|
|
7
7
|
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; connect-src 'self' http://127.0.0.1:* http://localhost:* http://[::1]:* ws://127.0.0.1:* ws://localhost:* ws://[::1]:*; frame-src http://127.0.0.1:* http://localhost:* http://[::1]:*" />
|
|
8
8
|
<title>Flavor Code</title>
|
|
9
|
-
<script type="module" crossorigin src="./assets/index-
|
|
10
|
-
<link rel="stylesheet" crossorigin href="./assets/index
|
|
9
|
+
<script type="module" crossorigin src="./assets/index-CnGHSdJ6.js"></script>
|
|
10
|
+
<link rel="stylesheet" crossorigin href="./assets/index-CdeAi527.css">
|
|
11
11
|
</head>
|
|
12
12
|
<body>
|
|
13
13
|
<div id="root"></div>
|
package/dist/init/project.d.ts
CHANGED
|
@@ -26,8 +26,8 @@ export interface InitResult {
|
|
|
26
26
|
export declare function inspectProject(cwd: string): Promise<ProjectFacts>;
|
|
27
27
|
/**
|
|
28
28
|
* Copy the astgraph plugin (runtime + vendored WASM grammars + zod) into the
|
|
29
|
-
* workspace's project plugin directory.
|
|
30
|
-
*
|
|
29
|
+
* workspace's project plugin directory. An existing installation is never
|
|
30
|
+
* overwritten.
|
|
31
31
|
*/
|
|
32
32
|
export declare function copyAstgraphPlugin(cwd: string): Promise<void>;
|
|
33
33
|
export declare function initializeFlavor(cwd: string): Promise<InitResult>;
|
package/dist/production.d.ts
CHANGED
|
@@ -37,8 +37,8 @@ export interface ProductionRuntimeOptions {
|
|
|
37
37
|
shutdownStepTimeoutMs?: number;
|
|
38
38
|
/** Additional tools provided by embedders (e.g. desktop-only D2C tools). */
|
|
39
39
|
extraTools?: readonly ToolDefinition<unknown>[];
|
|
40
|
-
/**
|
|
41
|
-
*
|
|
40
|
+
/** Opt into Worker/vm isolation. The compatibility default remains false
|
|
41
|
+
* until sandbox capabilities cover the Node.js APIs used by bundled plugins. */
|
|
42
42
|
pluginSandbox?: boolean;
|
|
43
43
|
/** Explicitly opt into CLI-local collaboration. Omit for print/RPC/eval callers. */
|
|
44
44
|
collaboration?: {
|
package/dist/sdk/index.js
CHANGED
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
FlavorRpcServer,
|
|
5
5
|
TraceRecordSchema,
|
|
6
6
|
TraceRecorder
|
|
7
|
-
} from "../chunk-
|
|
7
|
+
} from "../chunk-JKJOQRAL.js";
|
|
8
8
|
import {
|
|
9
9
|
AgentMessageQueue,
|
|
10
10
|
DockerExecutionEnvironment,
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
WorkspaceCheckpointStore,
|
|
14
14
|
buildDockerInvocation,
|
|
15
15
|
createProductionRuntime
|
|
16
|
-
} from "../chunk-
|
|
16
|
+
} from "../chunk-YY5H6GFN.js";
|
|
17
17
|
import "../chunk-IG4Z23CL.js";
|
|
18
18
|
import "../chunk-RQTYHUMK.js";
|
|
19
19
|
import "../chunk-S32JRDZK.js";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "flavor-code",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.3",
|
|
4
4
|
"author": "YachuanWzh",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"publishConfig": {
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"scripts": {
|
|
32
32
|
"build": "npm run build:icons && npm run build:cli && npm run build:desktop",
|
|
33
33
|
"build:icons": "node scripts/build-icons.mjs",
|
|
34
|
-
"build:cli": "tsup && tsc -p tsconfig.sdk.json && node -e \"require('fs').cpSync('src/init/
|
|
34
|
+
"build:cli": "tsup && tsc -p tsconfig.sdk.json && node -e \"require('fs').cpSync('src/init/astgraph','dist/astgraph',{recursive:true})\"",
|
|
35
35
|
"build:desktop": "npm run build:desktop:main && npm run build:desktop:renderer",
|
|
36
36
|
"build:desktop:main": "tsup --config tsup.desktop.config.ts",
|
|
37
37
|
"build:desktop:renderer": "vite build --config vite.desktop.config.ts",
|
|
@@ -5593,7 +5593,7 @@ flowchart LR
|
|
|
5593
5593
|
|
|
5594
5594
|
设计要点:
|
|
5595
5595
|
|
|
5596
|
-
1. **插件即交付物**:astgraph 以 flavor-code 插件(`flavor-plugin.json` + 运行时 + vendored WASM grammar + zod
|
|
5596
|
+
1. **插件即交付物**:astgraph 以 flavor-code 插件(`flavor-plugin.json` + 运行时 + vendored WASM grammar + zod)的形式随项目初始化复制安装,已存在时不覆盖。
|
|
5597
5597
|
2. **重量级工作全部懒加载**:插件 activation 只注册命令、工具与钩子;WASM grammar 与数据库连接在首次使用时才加载,保证激活不超时。
|
|
5598
5598
|
3. **编辑即同步**:PostToolUse 钩子从 Edit/Write/ApplyPatch 输入中提取工作区相对路径,仅对变更文件增量重索引,fire-and-forget 语义,绝不阻塞或失败 Agent 的编辑。
|
|
5599
5599
|
4. **定位优先于阅读**:`FLAVOR.md` 在检测到索引存在时自动生成 Search 章节,引导模型把 `ast_search` 与 `grep`/`glob` 配对使用,用 `ast_impact` 等确定可达性后再决定读哪些行。
|
|
@@ -5683,7 +5683,7 @@ CLI 侧对应 `/ast` 命令:`/ast init | sync | status | search <query> | call
|
|
|
5683
5683
|
| 层面 | 措施 |
|
|
5684
5684
|
|------|------|
|
|
5685
5685
|
| 索引范围 | 固定排除依赖/产物/元数据目录(node_modules、dist、.git、.flavor 等),不索引工作区外的任何路径 |
|
|
5686
|
-
| 插件分发 |
|
|
5686
|
+
| 插件分发 | 目标已存在即跳过,不覆盖用户修改;插件目录权限 `0o700` |
|
|
5687
5687
|
| 增量同步 | PostToolUse 钩子只接受 Edit/Write/ApplyPatch 输入中解析出的相对路径,fire-and-forget,失败仅记 debug 日志 |
|
|
5688
5688
|
| 工具权限 | 五个 AST 工具声明 `readOnly`,只读放行但不持有任何写路径;`z.coerce` 仅做类型标准化,不改变校验边界 |
|
|
5689
5689
|
| 运行时隔离 | grammar 全部 vendored 本地 WASM,无网络请求;数据库仅本工作区 `.flavor/astgraph/` 内 |
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
// flavor-code → CodeIslandWin plugin
|
|
2
|
-
import { spawn } from "node:child_process";
|
|
3
|
-
import { join } from "node:path";
|
|
4
|
-
import { fileURLToPath } from "node:url";
|
|
5
|
-
|
|
6
|
-
const __dirname = fileURLToPath(new URL(".", import.meta.url));
|
|
7
|
-
const bridgePath = join(__dirname, "bridge.mjs");
|
|
8
|
-
const BLOCKING_TIMEOUT_MS = 86_400_000;
|
|
9
|
-
const FIRE_TIMEOUT_MS = 10_000;
|
|
10
|
-
const bridgeEnvironment = { ...process.env, ELECTRON_RUN_AS_NODE: "1" };
|
|
11
|
-
|
|
12
|
-
function relay(event, signal) {
|
|
13
|
-
if (event.type !== "PermissionRequest") {
|
|
14
|
-
const child = spawn(process.execPath, [bridgePath], {
|
|
15
|
-
stdio: ["pipe", "ignore", "ignore"],
|
|
16
|
-
env: bridgeEnvironment,
|
|
17
|
-
windowsHide: true,
|
|
18
|
-
detached: true,
|
|
19
|
-
});
|
|
20
|
-
child.stdin.end(JSON.stringify(event));
|
|
21
|
-
child.unref();
|
|
22
|
-
return { decision: "allow" };
|
|
23
|
-
}
|
|
24
|
-
return new Promise((resolve) => {
|
|
25
|
-
const child = spawn(process.execPath, [bridgePath], {
|
|
26
|
-
stdio: ["pipe", "pipe", "pipe"],
|
|
27
|
-
env: bridgeEnvironment,
|
|
28
|
-
windowsHide: true,
|
|
29
|
-
});
|
|
30
|
-
let stdout = "";
|
|
31
|
-
const onAbort = () => {
|
|
32
|
-
child.kill();
|
|
33
|
-
resolve({ decision: "deny", reason: "Cancelled" });
|
|
34
|
-
};
|
|
35
|
-
signal.addEventListener("abort", onAbort, { once: true });
|
|
36
|
-
child.stdout.on("data", (chunk) => { stdout += chunk.toString("utf8"); });
|
|
37
|
-
child.on("close", (code) => {
|
|
38
|
-
signal.removeEventListener("abort", onAbort);
|
|
39
|
-
if (code !== 0 || !stdout) {
|
|
40
|
-
resolve({ decision: "ask", reason: "CodeIslandWin unavailable" });
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
try { resolve(JSON.parse(stdout)); }
|
|
44
|
-
catch { resolve({ decision: "ask", reason: "CodeIslandWin response invalid" }); }
|
|
45
|
-
});
|
|
46
|
-
child.on("error", () => {
|
|
47
|
-
signal.removeEventListener("abort", onAbort);
|
|
48
|
-
resolve({ decision: "ask", reason: "CodeIslandWin unavailable" });
|
|
49
|
-
});
|
|
50
|
-
child.stdin.end(JSON.stringify(event));
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
export function activate(context) {
|
|
55
|
-
const names = [
|
|
56
|
-
"SessionStart", "SessionEnd", "UserPromptSubmit", "Stop",
|
|
57
|
-
"SubagentStart", "SubagentStop", "PreToolUse", "PostToolUse",
|
|
58
|
-
"PostToolUseFailure", "PermissionRequest", "PreCompact", "Notification",
|
|
59
|
-
];
|
|
60
|
-
const disposers = [];
|
|
61
|
-
for (const eventName of names) {
|
|
62
|
-
const blocking = eventName === "PermissionRequest";
|
|
63
|
-
const disposer = context.registerHook(eventName, (event, signal) => relay(event, signal), {
|
|
64
|
-
timeoutMs: blocking ? BLOCKING_TIMEOUT_MS : FIRE_TIMEOUT_MS,
|
|
65
|
-
failurePolicy: blocking ? "ask" : "allow",
|
|
66
|
-
});
|
|
67
|
-
disposers.push(disposer);
|
|
68
|
-
}
|
|
69
|
-
return async () => {
|
|
70
|
-
for (const dispose of disposers.reverse()) {
|
|
71
|
-
try { await dispose(); } catch { /* ignore */ }
|
|
72
|
-
}
|
|
73
|
-
};
|
|
74
|
-
}
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
// flavor-code → CodeIslandWin bridge
|
|
2
|
-
import net from "node:net";
|
|
3
|
-
|
|
4
|
-
const PIPE_TIMEOUT_MS = 4000;
|
|
5
|
-
|
|
6
|
-
function pipePath() {
|
|
7
|
-
const user = (process.env.USERNAME || process.env.USER || "default").trim() || "default";
|
|
8
|
-
const sep = String.fromCharCode(92);
|
|
9
|
-
return sep + sep + "." + sep + "pipe" + sep + "codeisland-" + user;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
function readStdin() {
|
|
13
|
-
return new Promise((resolve) => {
|
|
14
|
-
if (process.stdin.readableEnded) { resolve(Buffer.alloc(0)); return; }
|
|
15
|
-
const chunks = [];
|
|
16
|
-
process.stdin.on("data", (d) => chunks.push(d));
|
|
17
|
-
process.stdin.on("end", () => resolve(Buffer.concat(chunks)));
|
|
18
|
-
process.stdin.on("error", () => resolve(Buffer.concat(chunks)));
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
function transform(event) {
|
|
23
|
-
const payload = event.payload || {};
|
|
24
|
-
const result = {
|
|
25
|
-
hook_event_name: event.type,
|
|
26
|
-
session_id: `flavor-${process.ppid || process.pid}`,
|
|
27
|
-
_source: "flavor-code",
|
|
28
|
-
_ppid: process.ppid || process.pid,
|
|
29
|
-
};
|
|
30
|
-
if (typeof payload.tool === "string") result.tool_name = payload.tool;
|
|
31
|
-
if (typeof payload.agent === "string") result.agent_type = payload.agent;
|
|
32
|
-
if (payload.input && typeof payload.input === "object" && !Array.isArray(payload.input)) {
|
|
33
|
-
result.tool_input = payload.input;
|
|
34
|
-
for (const [key, value] of Object.entries(payload.input)) {
|
|
35
|
-
if (typeof value === "string" && !(key in result)) result[key] = value;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
if (typeof payload.reason === "string") result.message = payload.reason;
|
|
39
|
-
if (typeof payload.message === "string" && !result.message) result.message = payload.message;
|
|
40
|
-
if (typeof payload.id === "string") result.agent_id = payload.id;
|
|
41
|
-
if (typeof payload.description === "string" && !result.message) result.message = payload.description;
|
|
42
|
-
if (typeof payload.modelId === "string") result.model = payload.modelId;
|
|
43
|
-
if (typeof payload.iteration === "number") result.message = `iteration ${payload.iteration}`;
|
|
44
|
-
return result;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
function toHookDecision(pipeResponse) {
|
|
48
|
-
try {
|
|
49
|
-
const parsed = JSON.parse(pipeResponse);
|
|
50
|
-
const dec = parsed?.hookSpecificOutput?.decision;
|
|
51
|
-
if (dec?.behavior === "allow") {
|
|
52
|
-
if (Array.isArray(dec.updatedPermissions) && dec.updatedPermissions.length > 0) {
|
|
53
|
-
return { decision: "allow", additionalContext: "codeisland:allow-all" };
|
|
54
|
-
}
|
|
55
|
-
return { decision: "allow" };
|
|
56
|
-
}
|
|
57
|
-
} catch { /* ignore */ }
|
|
58
|
-
return { decision: "deny" };
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
async function main() {
|
|
62
|
-
const input = await readStdin();
|
|
63
|
-
if (!input.length) process.exit(0);
|
|
64
|
-
let event;
|
|
65
|
-
try { event = JSON.parse(input.toString("utf8")); } catch { process.exit(0); }
|
|
66
|
-
if (!event || typeof event !== "object" || Array.isArray(event)) process.exit(0);
|
|
67
|
-
|
|
68
|
-
const blocking = event.type === "PermissionRequest";
|
|
69
|
-
const transformed = transform(event);
|
|
70
|
-
const pipe = pipePath();
|
|
71
|
-
|
|
72
|
-
return new Promise((resolve) => {
|
|
73
|
-
const socket = net.connect(pipe);
|
|
74
|
-
let response = "";
|
|
75
|
-
let settled = false;
|
|
76
|
-
const finish = (code) => {
|
|
77
|
-
if (settled) return;
|
|
78
|
-
settled = true;
|
|
79
|
-
try { socket.destroy(); } catch { /* ignore */ }
|
|
80
|
-
if (blocking && response) {
|
|
81
|
-
process.stdout.write(JSON.stringify(toHookDecision(response)), () => process.exit(code));
|
|
82
|
-
} else {
|
|
83
|
-
process.exit(code);
|
|
84
|
-
}
|
|
85
|
-
};
|
|
86
|
-
if (!blocking) {
|
|
87
|
-
const t = setTimeout(() => finish(0), PIPE_TIMEOUT_MS);
|
|
88
|
-
if (t.unref) t.unref();
|
|
89
|
-
}
|
|
90
|
-
socket.on("connect", () => socket.write(JSON.stringify(transformed) + "\n"));
|
|
91
|
-
socket.on("data", (d) => { response += d.toString("utf8"); });
|
|
92
|
-
socket.on("close", () => finish(0));
|
|
93
|
-
socket.on("error", () => finish(0));
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
main();
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "codeisland",
|
|
3
|
-
"version": "1.0.0",
|
|
4
|
-
"apiVersion": "1",
|
|
5
|
-
"main": "activate.mjs",
|
|
6
|
-
"permissions": [],
|
|
7
|
-
"contributes": {
|
|
8
|
-
"commands": [],
|
|
9
|
-
"tools": [],
|
|
10
|
-
"skillRoots": [],
|
|
11
|
-
"modelAdapters": [],
|
|
12
|
-
"hooks": [
|
|
13
|
-
{ "name": "SessionStart" },
|
|
14
|
-
{ "name": "SessionEnd" },
|
|
15
|
-
{ "name": "UserPromptSubmit" },
|
|
16
|
-
{ "name": "Stop" },
|
|
17
|
-
{ "name": "SubagentStart" },
|
|
18
|
-
{ "name": "SubagentStop" },
|
|
19
|
-
{ "name": "PreToolUse" },
|
|
20
|
-
{ "name": "PostToolUse" },
|
|
21
|
-
{ "name": "PostToolUseFailure" },
|
|
22
|
-
{ "name": "PermissionRequest" },
|
|
23
|
-
{ "name": "PreCompact" },
|
|
24
|
-
{ "name": "Notification" }
|
|
25
|
-
]
|
|
26
|
-
}
|
|
27
|
-
}
|