flavor-code 1.4.0-beta.1 → 1.4.0-beta.4

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.
Files changed (159) hide show
  1. package/dist/agent/loop.d.ts +7 -2
  2. package/dist/{app-C5ZQUOKJ.js → app-UWIEIWBQ.js} +7 -7
  3. package/dist/{chunk-FOTMP4ZS.js → chunk-4RR5VVX4.js} +8 -2
  4. package/dist/{chunk-6MNOZ2TX.js → chunk-DCNUBQCH.js} +1376 -641
  5. package/dist/{chunk-ODRWR4KK.js → chunk-IQAZ42TM.js} +1 -1
  6. package/dist/{chunk-URUVFECH.js → chunk-KQMKY7C5.js} +8 -4
  7. package/dist/chunk-LKQTBL3R.js +107 -0
  8. package/dist/{chunk-3WCDZ6ZL.js → chunk-ZJCAQXA7.js} +2 -1
  9. package/dist/{claude-ink-LP32NSX5.js → claude-ink-ECZ6QF3P.js} +2 -2
  10. package/dist/cli-main.js +22 -15
  11. package/dist/cli.js +24 -5
  12. package/dist/config/schema.d.ts +4 -0
  13. package/dist/context/manager.d.ts +9 -0
  14. package/dist/desktop/main.js +1770 -949
  15. package/dist/desktop-renderer/assets/{index-CqRIr-hz.js → index-C0t1nGih.js} +2 -2
  16. package/dist/desktop-renderer/assets/{interactive-terminal-C4o7MNPO.js → interactive-terminal-BJqe96mZ.js} +1 -1
  17. package/dist/desktop-renderer/index.html +1 -1
  18. package/dist/git/service.d.ts +3 -3
  19. package/dist/git/tools.d.ts +1 -1
  20. package/dist/goal/classifier.d.ts +2 -0
  21. package/dist/goal/orchestrator.d.ts +18 -0
  22. package/dist/goal/planner.d.ts +2 -0
  23. package/dist/goal/store.d.ts +2 -0
  24. package/dist/goal/types.d.ts +8 -0
  25. package/dist/harness/journal.d.ts +2 -0
  26. package/dist/harness/local.d.ts +2 -0
  27. package/dist/init/project.d.ts +0 -6
  28. package/dist/jobs/registry.d.ts +7 -1
  29. package/dist/{load-V2UIYYQI.js → load-F4AYLCF6.js} +1 -1
  30. package/dist/loop/orchestrator.d.ts +18 -0
  31. package/dist/loop/types.d.ts +7 -0
  32. package/dist/production.d.ts +17 -0
  33. package/dist/sdk/index.js +5 -5
  34. package/dist/session/tree.d.ts +2 -0
  35. package/dist/tools/lsp.d.ts +13 -10
  36. package/dist/tools/runtime.d.ts +2 -1
  37. package/dist/tools/search.d.ts +1 -0
  38. package/dist/tools/types.d.ts +1 -1
  39. package/dist/ui/session.d.ts +9 -0
  40. package/dist/utils/abort.d.ts +4 -0
  41. package/dist/utils/execFileNoThrow.d.ts +1 -0
  42. package/dist/utils/heap.d.ts +58 -0
  43. package/dist/utils/memory-restart.d.ts +38 -3
  44. package/dist/utils/process-tree.d.ts +2 -0
  45. package/dist/utils/rotation-census.d.ts +36 -0
  46. package/package.json +2 -2
  47. package//346/212/200/346/234/257/346/226/271/346/241/210/346/212/245/345/221/212.md +7 -7
  48. package/dist/astgraph/db.mjs +0 -237
  49. package/dist/astgraph/extract.mjs +0 -239
  50. package/dist/astgraph/flavor-plugin.json +0 -25
  51. package/dist/astgraph/grammars.mjs +0 -68
  52. package/dist/astgraph/index.js +0 -301
  53. package/dist/astgraph/indexer.mjs +0 -175
  54. package/dist/astgraph/query.mjs +0 -165
  55. package/dist/astgraph/resolve.mjs +0 -93
  56. package/dist/astgraph/vendor/tree-sitter-javascript.wasm +0 -0
  57. package/dist/astgraph/vendor/tree-sitter-tsx.wasm +0 -0
  58. package/dist/astgraph/vendor/tree-sitter-typescript.wasm +0 -0
  59. package/dist/astgraph/vendor/tree-sitter.js +0 -3980
  60. package/dist/astgraph/vendor/tree-sitter.wasm +0 -0
  61. package/dist/astgraph/vendor/zod/LICENSE +0 -21
  62. package/dist/astgraph/vendor/zod/index.js +0 -4
  63. package/dist/astgraph/vendor/zod/locales/index.js +0 -1
  64. package/dist/astgraph/vendor/zod/locales/package.json +0 -7
  65. package/dist/astgraph/vendor/zod/package.json +0 -135
  66. package/dist/astgraph/vendor/zod/v4/classic/checks.js +0 -1
  67. package/dist/astgraph/vendor/zod/v4/classic/coerce.js +0 -17
  68. package/dist/astgraph/vendor/zod/v4/classic/compat.js +0 -31
  69. package/dist/astgraph/vendor/zod/v4/classic/errors.js +0 -48
  70. package/dist/astgraph/vendor/zod/v4/classic/external.js +0 -20
  71. package/dist/astgraph/vendor/zod/v4/classic/from-json-schema.js +0 -599
  72. package/dist/astgraph/vendor/zod/v4/classic/index.js +0 -4
  73. package/dist/astgraph/vendor/zod/v4/classic/iso.js +0 -30
  74. package/dist/astgraph/vendor/zod/v4/classic/package.json +0 -7
  75. package/dist/astgraph/vendor/zod/v4/classic/parse.js +0 -15
  76. package/dist/astgraph/vendor/zod/v4/classic/schemas.js +0 -1395
  77. package/dist/astgraph/vendor/zod/v4/core/api.js +0 -1087
  78. package/dist/astgraph/vendor/zod/v4/core/checks.js +0 -575
  79. package/dist/astgraph/vendor/zod/v4/core/core.js +0 -78
  80. package/dist/astgraph/vendor/zod/v4/core/doc.js +0 -35
  81. package/dist/astgraph/vendor/zod/v4/core/errors.js +0 -185
  82. package/dist/astgraph/vendor/zod/v4/core/index.js +0 -16
  83. package/dist/astgraph/vendor/zod/v4/core/json-schema-generator.js +0 -95
  84. package/dist/astgraph/vendor/zod/v4/core/json-schema-processors.js +0 -601
  85. package/dist/astgraph/vendor/zod/v4/core/json-schema.js +0 -1
  86. package/dist/astgraph/vendor/zod/v4/core/package.json +0 -7
  87. package/dist/astgraph/vendor/zod/v4/core/parse.js +0 -93
  88. package/dist/astgraph/vendor/zod/v4/core/regexes.js +0 -139
  89. package/dist/astgraph/vendor/zod/v4/core/registries.js +0 -51
  90. package/dist/astgraph/vendor/zod/v4/core/schemas.js +0 -2239
  91. package/dist/astgraph/vendor/zod/v4/core/standard-schema.js +0 -1
  92. package/dist/astgraph/vendor/zod/v4/core/to-json-schema.js +0 -448
  93. package/dist/astgraph/vendor/zod/v4/core/util.js +0 -674
  94. package/dist/astgraph/vendor/zod/v4/core/versions.js +0 -5
  95. package/dist/astgraph/vendor/zod/v4/index.js +0 -3
  96. package/dist/astgraph/vendor/zod/v4/locales/ar.js +0 -106
  97. package/dist/astgraph/vendor/zod/v4/locales/az.js +0 -105
  98. package/dist/astgraph/vendor/zod/v4/locales/be.js +0 -156
  99. package/dist/astgraph/vendor/zod/v4/locales/bg.js +0 -120
  100. package/dist/astgraph/vendor/zod/v4/locales/ca.js +0 -107
  101. package/dist/astgraph/vendor/zod/v4/locales/cs.js +0 -111
  102. package/dist/astgraph/vendor/zod/v4/locales/da.js +0 -115
  103. package/dist/astgraph/vendor/zod/v4/locales/de.js +0 -108
  104. package/dist/astgraph/vendor/zod/v4/locales/el.js +0 -109
  105. package/dist/astgraph/vendor/zod/v4/locales/en.js +0 -113
  106. package/dist/astgraph/vendor/zod/v4/locales/eo.js +0 -109
  107. package/dist/astgraph/vendor/zod/v4/locales/es.js +0 -132
  108. package/dist/astgraph/vendor/zod/v4/locales/fa.js +0 -114
  109. package/dist/astgraph/vendor/zod/v4/locales/fi.js +0 -112
  110. package/dist/astgraph/vendor/zod/v4/locales/fr-CA.js +0 -107
  111. package/dist/astgraph/vendor/zod/v4/locales/fr.js +0 -125
  112. package/dist/astgraph/vendor/zod/v4/locales/he.js +0 -214
  113. package/dist/astgraph/vendor/zod/v4/locales/hr.js +0 -122
  114. package/dist/astgraph/vendor/zod/v4/locales/hu.js +0 -108
  115. package/dist/astgraph/vendor/zod/v4/locales/hy.js +0 -147
  116. package/dist/astgraph/vendor/zod/v4/locales/id.js +0 -106
  117. package/dist/astgraph/vendor/zod/v4/locales/index.js +0 -52
  118. package/dist/astgraph/vendor/zod/v4/locales/is.js +0 -109
  119. package/dist/astgraph/vendor/zod/v4/locales/it.js +0 -108
  120. package/dist/astgraph/vendor/zod/v4/locales/ja.js +0 -107
  121. package/dist/astgraph/vendor/zod/v4/locales/ka.js +0 -112
  122. package/dist/astgraph/vendor/zod/v4/locales/kh.js +0 -5
  123. package/dist/astgraph/vendor/zod/v4/locales/km.js +0 -110
  124. package/dist/astgraph/vendor/zod/v4/locales/ko.js +0 -111
  125. package/dist/astgraph/vendor/zod/v4/locales/lt.js +0 -203
  126. package/dist/astgraph/vendor/zod/v4/locales/mk.js +0 -109
  127. package/dist/astgraph/vendor/zod/v4/locales/ms.js +0 -107
  128. package/dist/astgraph/vendor/zod/v4/locales/nl.js +0 -110
  129. package/dist/astgraph/vendor/zod/v4/locales/no.js +0 -108
  130. package/dist/astgraph/vendor/zod/v4/locales/ota.js +0 -109
  131. package/dist/astgraph/vendor/zod/v4/locales/package.json +0 -7
  132. package/dist/astgraph/vendor/zod/v4/locales/pl.js +0 -109
  133. package/dist/astgraph/vendor/zod/v4/locales/ps.js +0 -114
  134. package/dist/astgraph/vendor/zod/v4/locales/pt.js +0 -108
  135. package/dist/astgraph/vendor/zod/v4/locales/ro.js +0 -119
  136. package/dist/astgraph/vendor/zod/v4/locales/ru.js +0 -156
  137. package/dist/astgraph/vendor/zod/v4/locales/sl.js +0 -109
  138. package/dist/astgraph/vendor/zod/v4/locales/sv.js +0 -110
  139. package/dist/astgraph/vendor/zod/v4/locales/ta.js +0 -110
  140. package/dist/astgraph/vendor/zod/v4/locales/th.js +0 -110
  141. package/dist/astgraph/vendor/zod/v4/locales/tr.js +0 -105
  142. package/dist/astgraph/vendor/zod/v4/locales/ua.js +0 -5
  143. package/dist/astgraph/vendor/zod/v4/locales/uk.js +0 -108
  144. package/dist/astgraph/vendor/zod/v4/locales/ur.js +0 -110
  145. package/dist/astgraph/vendor/zod/v4/locales/uz.js +0 -110
  146. package/dist/astgraph/vendor/zod/v4/locales/vi.js +0 -108
  147. package/dist/astgraph/vendor/zod/v4/locales/yo.js +0 -107
  148. package/dist/astgraph/vendor/zod/v4/locales/zh-CN.js +0 -109
  149. package/dist/astgraph/vendor/zod/v4/locales/zh-TW.js +0 -107
  150. package/dist/astgraph/vendor/zod/v4/mini/checks.js +0 -1
  151. package/dist/astgraph/vendor/zod/v4/mini/coerce.js +0 -22
  152. package/dist/astgraph/vendor/zod/v4/mini/external.js +0 -14
  153. package/dist/astgraph/vendor/zod/v4/mini/index.js +0 -3
  154. package/dist/astgraph/vendor/zod/v4/mini/iso.js +0 -34
  155. package/dist/astgraph/vendor/zod/v4/mini/package.json +0 -7
  156. package/dist/astgraph/vendor/zod/v4/mini/parse.js +0 -1
  157. package/dist/astgraph/vendor/zod/v4/mini/schemas.js +0 -961
  158. package/dist/astgraph/vendor/zod/v4/package.json +0 -7
  159. package/dist/chunk-CIVPKHF4.js +0 -53
@@ -1,4 +1,4 @@
1
- import{i as e,n as t,r as n,t as r}from"./index-CqRIr-hz.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-C0t1nGih.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,7 +6,7 @@
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-CqRIr-hz.js"></script>
9
+ <script type="module" crossorigin src="./assets/index-C0t1nGih.js"></script>
10
10
  <link rel="stylesheet" crossorigin href="./assets/index-Bk6FYhyh.css">
11
11
  </head>
12
12
  <body>
@@ -4,8 +4,8 @@ export interface GitResult {
4
4
  stderr: string;
5
5
  code: number;
6
6
  }
7
- export declare function git(workspace: string, args: readonly string[], timeoutMs?: number): Promise<GitResult>;
8
- export declare function isGitRepository(workspace: string): Promise<boolean>;
7
+ export declare function git(workspace: string, args: readonly string[], timeoutMs?: number, signal?: AbortSignal): Promise<GitResult>;
8
+ export declare function isGitRepository(workspace: string, signal?: AbortSignal): Promise<boolean>;
9
9
  export interface GitChangeSummary {
10
10
  branch: string;
11
11
  head: string;
@@ -38,6 +38,6 @@ export interface GitHistoryEntry {
38
38
  subject: string;
39
39
  }
40
40
  /** Commit history for the repository, or for one file when a path is given. */
41
- export declare function fileHistory(workspace: string, path: string | undefined, limit: number): Promise<GitHistoryEntry[]>;
41
+ export declare function fileHistory(workspace: string, path: string | undefined, limit: number, signal?: AbortSignal): Promise<GitHistoryEntry[]>;
42
42
  /** Short branch@sha marker used to tag session checkpoints with git state. */
43
43
  export declare function gitMarker(workspace: string): Promise<string | undefined>;
@@ -2,7 +2,7 @@ import { z } from "zod";
2
2
  import type { ToolDefinition } from "../tools/types.js";
3
3
  declare const GitHistoryInput: z.ZodObject<{
4
4
  path: z.ZodOptional<z.ZodString>;
5
- limit: z.ZodOptional<z.ZodNumber>;
5
+ limit: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
6
6
  }, z.core.$strip>;
7
7
  export type GitHistoryInput = z.infer<typeof GitHistoryInput>;
8
8
  export declare function createGitHistoryTool(workspace: string): ToolDefinition<GitHistoryInput, string>;
@@ -6,6 +6,8 @@ export interface ClassifierOptions {
6
6
  skepticCount: number;
7
7
  workspace: string;
8
8
  signal?: AbortSignal;
9
+ /** Safe-point hook used by long-running hosts to rotate before OOM. */
10
+ onProgress?(): void | Promise<void>;
9
11
  }
10
12
  export declare function runClassifier(evidence: EvidencePacket, plan: Plan, options: ClassifierOptions): Promise<AggregatedOutcome>;
11
13
  export declare function computeFingerprint(gaps: Gap[]): string;
@@ -21,7 +21,17 @@ export interface GoalOrchestratorOptions {
21
21
  idFactory?(): string;
22
22
  persistence?: {
23
23
  save(state: GoalState): Promise<void>;
24
+ /** Present when the store can reload a goal for resume after heap rotation. */
25
+ load?(goalId: string): Promise<GoalState>;
24
26
  };
27
+ /**
28
+ * Called at every round boundary (state persisted). Production uses it to
29
+ * rotate onto a fresh heap between rounds so multi-day goals never die on
30
+ * a grown heap; the relaunched process resumes the goal from its state.
31
+ */
32
+ onRoundBoundary?(goalId: string): void | Promise<void>;
33
+ /** Also sampled inside planner/classifier streams and around host verification. */
34
+ onMemoryCheckpoint?(goalId: string): void | Promise<void>;
25
35
  verifyHost?(signal: AbortSignal): Promise<HostVerificationEvidence>;
26
36
  }
27
37
  export declare class GoalOrchestrator {
@@ -32,4 +42,12 @@ export declare class GoalOrchestrator {
32
42
  goal: string;
33
43
  signal: AbortSignal;
34
44
  }): AsyncIterable<GoalRuntimeEvent>;
45
+ /**
46
+ * Continue a goal whose process rotated onto a fresh heap. The persisted
47
+ * state decides where to pick up; an interrupted round simply runs again.
48
+ */
49
+ resume(request: {
50
+ goalId: string;
51
+ signal: AbortSignal;
52
+ }): AsyncIterable<GoalRuntimeEvent>;
35
53
  }
@@ -5,5 +5,7 @@ export interface PlannerOptions {
5
5
  modelId: string;
6
6
  objective: string;
7
7
  signal?: AbortSignal;
8
+ /** Safe-point hook used by long-running hosts to rotate before OOM. */
9
+ onProgress?(): void | Promise<void>;
8
10
  }
9
11
  export declare function runPlanner(options: PlannerOptions): Promise<Plan>;
@@ -6,4 +6,6 @@ export declare class GoalStore {
6
6
  maxBytes?: number;
7
7
  });
8
8
  save(input: GoalState): Promise<void>;
9
+ /** Reload a persisted goal so a rotated process can resume it. */
10
+ load(goalId: string): Promise<GoalState>;
9
11
  }
@@ -146,6 +146,10 @@ export declare const GoalStateSchema: z.ZodObject<{
146
146
  planPath: z.ZodNullable<z.ZodString>;
147
147
  verifyRounds: z.ZodNumber;
148
148
  workerRounds: z.ZodNumber;
149
+ pendingVerification: z.ZodOptional<z.ZodNullable<z.ZodObject<{
150
+ round: z.ZodNumber;
151
+ finalResponse: z.ZodString;
152
+ }, z.core.$strict>>>;
149
153
  lastGaps: z.ZodArray<z.ZodObject<{
150
154
  criterion: z.ZodString;
151
155
  description: z.ZodString;
@@ -179,6 +183,10 @@ export declare const GoalStateSchema: z.ZodObject<{
179
183
  }, z.core.$strict>;
180
184
  export type GoalState = z.infer<typeof GoalStateSchema>;
181
185
  export type GoalRuntimeEvent = {
186
+ type: "goal-resumed";
187
+ goalId: string;
188
+ round: number;
189
+ } | {
182
190
  type: "goal-plan-created";
183
191
  plan: Plan;
184
192
  planPath: string;
@@ -83,6 +83,8 @@ export declare class HarnessJournal {
83
83
  constructor(options: HarnessJournalOptions);
84
84
  get path(): string;
85
85
  get records(): readonly HarnessJournalRecord[];
86
+ /** Retained record count for the rotation census. */
87
+ get recordCount(): number;
86
88
  admitQueue<T>(kind: "steer" | "followUp", payload: T): string;
87
89
  claimQueue(id: string): void;
88
90
  ackQueue(id: string): void;
@@ -21,6 +21,8 @@ export interface LocalHarnessOptions {
21
21
  approve?: ApprovalCallback;
22
22
  maxIterationsMain?: number;
23
23
  maxIterationsSubagent?: number;
24
+ softLimitFactor?: number;
25
+ extendIterations?: number;
24
26
  hasActiveProgress?(): boolean;
25
27
  hallucinationGuard?: HallucinationGuard;
26
28
  /** When true, non-destructive tools skip the approval callback. Destructive tools still require confirmation. */
@@ -24,10 +24,4 @@ export interface InitResult {
24
24
  facts: ProjectFacts;
25
25
  }
26
26
  export declare function inspectProject(cwd: string): Promise<ProjectFacts>;
27
- /**
28
- * Copy the astgraph plugin (runtime + vendored WASM grammars + zod) into the
29
- * workspace's project plugin directory. An existing installation is never
30
- * overwritten.
31
- */
32
- export declare function copyAstgraphPlugin(cwd: string): Promise<void>;
33
27
  export declare function initializeFlavor(cwd: string): Promise<InitResult>;
@@ -42,8 +42,14 @@ export declare class JobRegistry {
42
42
  create(input: CreateJobInput): JobHandle;
43
43
  list(owner?: string): readonly JobSnapshot[];
44
44
  read(id: string, owner: string, cursor?: number): JobReadResult;
45
+ /** Retained sizes for the rotation census. */
46
+ census(): {
47
+ jobs: number;
48
+ running: number;
49
+ windowChars: number;
50
+ };
45
51
  wait(id: string, owner: string, signal?: AbortSignal): Promise<JobSnapshot>;
46
- kill(id: string, owner: string): void;
52
+ kill(id: string, owner: string): void | Promise<void>;
47
53
  subscribe(listener: (jobs: readonly JobSnapshot[]) => void): () => void;
48
54
  dispose(): Promise<void>;
49
55
  }
@@ -7,7 +7,7 @@ import {
7
7
  setProjectMcpServerDisabled,
8
8
  setProjectProviderConfig,
9
9
  setProjectSkillDisabled
10
- } from "./chunk-URUVFECH.js";
10
+ } from "./chunk-KQMKY7C5.js";
11
11
  import "./chunk-S32JRDZK.js";
12
12
  export {
13
13
  loadConfig,
@@ -8,6 +8,8 @@ export interface LoopPersistence {
8
8
  create(state: LoopState): Promise<void>;
9
9
  save(state: LoopState): Promise<void>;
10
10
  append(event: LoopEvent): Promise<void>;
11
+ /** Present when the store can reload a loop for resume after heap rotation. */
12
+ load?(loopId: string): Promise<LoopState>;
11
13
  }
12
14
  export type LoopConfirmation = "approved" | "rejected" | "unavailable";
13
15
  export type LoopRuntimeEvent = {
@@ -67,6 +69,14 @@ export interface LoopOrchestratorOptions {
67
69
  runVerifier(plan: VerificationPlan, workspace: string, signal: AbortSignal): Promise<LoopVerificationEvidence>;
68
70
  confirmBudget(state: LoopState, dimensions: readonly BudgetDimension[], signal: AbortSignal): Promise<LoopConfirmation>;
69
71
  fingerprint(workspace: string): Promise<string>;
72
+ /**
73
+ * Called at every cycle boundary (state persisted). Production uses it to
74
+ * rotate onto a fresh heap between cycles so multi-day loops never die on
75
+ * a grown heap; the relaunched process resumes the loop from its state.
76
+ */
77
+ onCycleBoundary?(loopId: string): void | Promise<void>;
78
+ /** Also sampled around verification and confidence checks. */
79
+ onMemoryCheckpoint?(loopId: string): void | Promise<void>;
70
80
  /** Optional hallucination guard for confidence checks and retry monitoring. */
71
81
  hallucinationGuard?: HallucinationGuard;
72
82
  now?(): string;
@@ -79,4 +89,12 @@ export declare class LoopOrchestrator {
79
89
  goal: string;
80
90
  signal: AbortSignal;
81
91
  }): AsyncIterable<LoopRuntimeEvent>;
92
+ /**
93
+ * Continue a loop whose process rotated onto a fresh heap. The persisted
94
+ * state decides where to pick up; an interrupted cycle simply runs again.
95
+ */
96
+ resume(request: {
97
+ loopId: string;
98
+ signal: AbortSignal;
99
+ }): AsyncIterable<LoopRuntimeEvent>;
82
100
  }
@@ -118,6 +118,13 @@ export declare const LoopStateSchema: z.ZodObject<{
118
118
  summary: z.ZodString;
119
119
  }, z.core.$strict>;
120
120
  }, z.core.$strict>>;
121
+ pendingCycle: z.ZodOptional<z.ZodNullable<z.ZodObject<{
122
+ cycle: z.ZodNumber;
123
+ startedAt: z.ZodString;
124
+ inputTokens: z.ZodNumber;
125
+ outputTokens: z.ZodNumber;
126
+ workerText: z.ZodString;
127
+ }, z.core.$strict>>>;
121
128
  terminalReason: z.ZodOptional<z.ZodString>;
122
129
  }, z.core.$strict>;
123
130
  export declare const LoopEventSchema: z.ZodObject<{
@@ -4,6 +4,9 @@ import { type McpClientFactory } from "./mcp/client.js";
4
4
  import type { PermissionProfile, PermissionRequest } from "./permissions/engine.js";
5
5
  import { type PromptEnvironment } from "./prompts/system.js";
6
6
  import type { ApprovalDecision } from "./tools/runtime.js";
7
+ import { type MemoryRestartContinuation } from "./utils/memory-restart.js";
8
+ import { type HeapReading } from "./utils/heap.js";
9
+ import { type RotationCensusHolder } from "./utils/rotation-census.js";
7
10
  import { type FileWriteProposal } from "./tools/files.js";
8
11
  import type { ToolDefinition } from "./tools/types.js";
9
12
  import { FlavorSession, type SessionOutput, type SessionServices } from "./ui/session.js";
@@ -22,6 +25,11 @@ export interface ProductionRuntimeOptions {
22
25
  home?: string;
23
26
  environment?: NodeJS.ProcessEnv;
24
27
  output(event: SessionOutput): void;
28
+ /**
29
+ * Embedder-owned restart hook. CLI callers omit it and exit with code 75;
30
+ * desktop callers dispose and recreate the runtime around the saved session.
31
+ */
32
+ onMemoryRestartRequested?(sessionId: string): void;
25
33
  onApprovalChange?(): void;
26
34
  /** Called whenever the active registerTool-managed command set changes. */
27
35
  onToolsChange?(): void;
@@ -102,4 +110,13 @@ export declare class ApprovalBridge {
102
110
  resolve(decision: ApprovalDecision): void;
103
111
  }
104
112
  export declare function createProductionRuntime(options: ProductionRuntimeOptions): Promise<ProductionRuntime>;
113
+ export interface MemoryRestartRotation {
114
+ /** Set when a /loop or /goal must be resumed by the relaunched process. */
115
+ continuation?: MemoryRestartContinuation;
116
+ /** Heap reading captured at the decision point; drives census + snapshot. */
117
+ reading?: HeapReading;
118
+ /** Retention census holders reported by the major in-memory owners. */
119
+ holders?: Record<string, RotationCensusHolder>;
120
+ }
105
121
  export declare function runGoalSession(orchestrator: GoalOrchestrator, goal: string, signal: AbortSignal): AsyncIterable<AgentEvent>;
122
+ export declare function runResumeGoalSession(orchestrator: GoalOrchestrator, goalId: string, signal: AbortSignal): AsyncIterable<AgentEvent>;
package/dist/sdk/index.js CHANGED
@@ -4,7 +4,7 @@ import {
4
4
  FlavorRpcServer,
5
5
  TraceRecordSchema,
6
6
  TraceRecorder
7
- } from "../chunk-FOTMP4ZS.js";
7
+ } from "../chunk-4RR5VVX4.js";
8
8
  import {
9
9
  AgentMessageQueue,
10
10
  DockerExecutionEnvironment,
@@ -13,10 +13,10 @@ import {
13
13
  WorkspaceCheckpointStore,
14
14
  buildDockerInvocation,
15
15
  createProductionRuntime
16
- } from "../chunk-6MNOZ2TX.js";
17
- import "../chunk-CIVPKHF4.js";
18
- import "../chunk-URUVFECH.js";
19
- import "../chunk-3WCDZ6ZL.js";
16
+ } from "../chunk-DCNUBQCH.js";
17
+ import "../chunk-LKQTBL3R.js";
18
+ import "../chunk-KQMKY7C5.js";
19
+ import "../chunk-ZJCAQXA7.js";
20
20
  import "../chunk-S32JRDZK.js";
21
21
 
22
22
  // src/trace/replay.ts
@@ -20,6 +20,8 @@ export declare class SessionHistory {
20
20
  private constructor();
21
21
  static open(options: SessionHistoryOptions): Promise<SessionHistory>;
22
22
  get leafId(): string | null;
23
+ /** Cheap retained-node count for the rotation census (no cloning). */
24
+ get nodeCount(): number;
23
25
  tree(): readonly SessionTreeNode[];
24
26
  append(input: {
25
27
  prompt: string;
@@ -14,10 +14,13 @@ interface LspLocation {
14
14
  }
15
15
  interface LspHover {
16
16
  contents: {
17
- kind: string;
17
+ kind?: string;
18
18
  language?: string;
19
19
  value: string;
20
- } | string;
20
+ } | string | Array<string | {
21
+ language: string;
22
+ value: string;
23
+ }>;
21
24
  range?: {
22
25
  start: {
23
26
  line: number;
@@ -52,10 +55,10 @@ interface LanguageServerConfig {
52
55
  rootFiles: string[];
53
56
  }
54
57
  export interface LspManager {
55
- findReferences(uri: string, line: number, character: number): Promise<LspLocation[]>;
56
- hover(uri: string, line: number, character: number): Promise<LspHover | null>;
57
- diagnostics(uri: string): Promise<LspDiagnostic[]>;
58
- dispose(): void;
58
+ findReferences(uri: string, line: number, character: number, signal?: AbortSignal): Promise<LspLocation[]>;
59
+ hover(uri: string, line: number, character: number, signal?: AbortSignal): Promise<LspHover | null>;
60
+ diagnostics(uri: string, signal?: AbortSignal): Promise<LspDiagnostic[]>;
61
+ dispose(): void | Promise<void>;
59
62
  }
60
63
  export declare class RealLspManager implements LspManager {
61
64
  #private;
@@ -64,10 +67,10 @@ export declare class RealLspManager implements LspManager {
64
67
  serverConfigs?: LanguageServerConfig[];
65
68
  onStatus?: ((message: string) => void) | undefined;
66
69
  });
67
- dispose(): void;
68
- findReferences(uri: string, line: number, character: number): Promise<LspLocation[]>;
69
- hover(uri: string, line: number, character: number): Promise<LspHover | null>;
70
- diagnostics(uri: string): Promise<LspDiagnostic[]>;
70
+ dispose(): Promise<void>;
71
+ findReferences(uri: string, line: number, character: number, signal?: AbortSignal): Promise<LspLocation[]>;
72
+ hover(uri: string, line: number, character: number, signal?: AbortSignal): Promise<LspHover | null>;
73
+ diagnostics(uri: string, signal?: AbortSignal): Promise<LspDiagnostic[]>;
71
74
  }
72
75
  export interface LspToolOptions {
73
76
  manager?: LspManager;
@@ -36,7 +36,8 @@ export interface ToolOutputOverflow {
36
36
  preview: string;
37
37
  originalChars: number;
38
38
  previewChars: number;
39
- savedTo: string;
39
+ savedTo?: string;
40
+ storageError?: string;
40
41
  }
41
42
  export declare const DEFAULT_TOOL_OUTPUT_LIMITS: Readonly<ToolOutputLimits>;
42
43
  export type ToolInputValidation = {
@@ -8,6 +8,7 @@ declare const GlobInput: z.ZodObject<{
8
8
  }, z.core.$strip>;
9
9
  declare const GrepInput: z.ZodObject<{
10
10
  pattern: z.ZodString;
11
+ fixedStrings: z.ZodOptional<z.ZodNullable<z.ZodPreprocess<z.ZodBoolean>>>;
11
12
  path: z.ZodOptional<z.ZodNullable<z.ZodString>>;
12
13
  glob: z.ZodOptional<z.ZodNullable<z.ZodString>>;
13
14
  fileType: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
@@ -77,7 +77,7 @@ export interface JobToolPresentation {
77
77
  }
78
78
  export type ToolPresentation = ChangeSetPresentation | FileChangePresentation | GenericToolPresentation | TerminalToolPresentation | WebToolPresentation | JobToolPresentation;
79
79
  export declare function withToolPresentation<T extends object>(output: T, presentation: ToolPresentation): T;
80
- export declare function getToolPresentation(output: unknown): FileChangePresentation | undefined;
80
+ export declare function getToolPresentation(output: unknown): ToolPresentation | undefined;
81
81
  export interface ToolDefinition<T, O = unknown> {
82
82
  name: string;
83
83
  description: string;
@@ -4,6 +4,7 @@ import type { PermissionMode } from "../permissions/engine.js";
4
4
  import type { SkillMetadata } from "../skills/registry.js";
5
5
  import { type McpSlashCommand, type ModelRole } from "./commands.js";
6
6
  import type { QuestionBridge } from "../tools/ask-user-question.js";
7
+ import type { MemoryRestartContinuation } from "../utils/memory-restart.js";
7
8
  import type { MemoryType } from "../memory/types.js";
8
9
  import { type AgentQueueSnapshot } from "../agent/message-queue.js";
9
10
  import type { SessionTreeNode } from "../session/tree.js";
@@ -113,6 +114,12 @@ export interface SessionServices {
113
114
  runSkill(skill: string, prompt: string, signal: AbortSignal): AsyncIterable<AgentEvent>;
114
115
  runLoop(goal: string, signal: AbortSignal): AsyncIterable<AgentEvent>;
115
116
  runGoal(goal: string, signal: AbortSignal): AsyncIterable<AgentEvent>;
117
+ /** Resume a /loop interrupted by a heap rotation, keyed by its persisted id. */
118
+ resumeLoop?(loopId: string, signal: AbortSignal): AsyncIterable<AgentEvent>;
119
+ /** Resume a /goal interrupted by a heap rotation, keyed by its persisted id. */
120
+ resumeGoal?(goalId: string, signal: AbortSignal): AsyncIterable<AgentEvent>;
121
+ /** The loop/goal a relaunched process should resume after a rotation, consumed once. */
122
+ continuation?(): MemoryRestartContinuation | undefined;
116
123
  mcp(command: McpSlashCommand, signal: AbortSignal): Promise<string>;
117
124
  ide?(): Promise<string>;
118
125
  ideContext?(): Promise<IdeEditorContext | undefined>;
@@ -186,6 +193,8 @@ export declare class FlavorSession {
186
193
  constructor(services: SessionServices);
187
194
  get active(): boolean;
188
195
  queueSnapshot(): AgentQueueSnapshot;
196
+ /** True when start() admitted a persisted /loop or /goal continuation. */
197
+ get rotationContinuationResumed(): boolean;
189
198
  clearQueue(): AgentQueueSnapshot;
190
199
  whenIdle(): Promise<void>;
191
200
  steer(input: string): void;
@@ -0,0 +1,4 @@
1
+ /** Wait without retaining an abort listener after the operation settles.
2
+ * The operation must still receive the signal when it supports cancellation.
3
+ */
4
+ export declare function waitWithSignal<T>(operation: Promise<T>, signal?: AbortSignal): Promise<T>;
@@ -4,6 +4,7 @@ export interface ExecFileNoThrowOptions {
4
4
  env?: NodeJS.ProcessEnv;
5
5
  stdin?: "ignore" | "inherit" | "pipe";
6
6
  input?: string;
7
+ signal?: AbortSignal;
7
8
  }
8
9
  export declare function execFileNoThrow(file: string, args: string[], options?: ExecFileNoThrowOptions): Promise<{
9
10
  stdout: string;
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Heap watermarks for the controlled rotation protocol.
3
+ *
4
+ * Long-running sessions (interactive turns, /loop cycles, /goal rounds) rotate
5
+ * onto a fresh heap instead of growing until V8 dies. Two watermarks:
6
+ *
7
+ * - MEMORY_PRESSURE_HEAP_RATIO: hard guard checked before every model call.
8
+ * Tripping it stops the current turn; the session is persisted first.
9
+ * - MEMORY_ROTATION_HEAP_RATIO: soft guard checked only at turn/cycle/round
10
+ * boundaries. Tripping it rotates between units of work, so multi-day runs
11
+ * keep going on a fresh heap without losing the loop or goal in flight.
12
+ *
13
+ * Both readings are GC-verified when --expose-gc is available (the launcher
14
+ * injects it): heapUsed includes uncollected garbage, and declaring pressure
15
+ * on garbage alone would rotate or stop turns for no reason. A full GC before
16
+ * judging keeps the decision about the live set only.
17
+ */
18
+ export declare const MEMORY_PRESSURE_HEAP_RATIO = 0.8;
19
+ export declare const MEMORY_ROTATION_HEAP_RATIO = 0.6;
20
+ export declare const MEMORY_PRESSURE_RSS_RATIO = 0.75;
21
+ export declare const MEMORY_ROTATION_RSS_RATIO = 0.6;
22
+ export interface HeapReading {
23
+ heapUsed: number;
24
+ heapLimit: number;
25
+ ratio: number;
26
+ /** Ratio measured after a forced full GC; undefined when gc is not exposed. */
27
+ verifiedRatio?: number;
28
+ gcVerified: boolean;
29
+ rss?: number;
30
+ memoryLimit?: number;
31
+ rssRatio?: number;
32
+ external?: number;
33
+ arrayBuffers?: number;
34
+ }
35
+ export declare function readHeap(): {
36
+ heapUsed: number;
37
+ heapLimit: number;
38
+ ratio: number;
39
+ };
40
+ /**
41
+ * Hard-guard reading. Returns undefined below the threshold; when the raw
42
+ * reading crosses it, a full GC (if exposed) decides whether the live set
43
+ * really is that large. Without --expose-gc the raw reading stands.
44
+ */
45
+ export declare function verifiedHeapPressure(threshold: number): HeapReading | undefined;
46
+ /**
47
+ * Boundary rotation decision. Cheap below the precheck ratio; above it the
48
+ * live set is measured with a full GC and compared against the soft
49
+ * watermark. Without --expose-gc only a raw reading at the hard watermark
50
+ * rotates, so an uninstrumented process degrades to the old behaviour.
51
+ */
52
+ export declare function heapRotationNeeded(): HeapReading | undefined;
53
+ /**
54
+ * Explicit opt-in only. The launcher already asks V8 for one near-limit
55
+ * snapshot; synchronously taking another in the recovery path can exhaust the
56
+ * very heap/RSS headroom needed to persist and exit cleanly.
57
+ */
58
+ export declare function heapSnapshotWarranted(_reading: HeapReading): boolean;
@@ -7,23 +7,58 @@
7
7
  * relaunches the CLI with `--resume <sessionId>`, so memory pressure restores
8
8
  * the saved session instead of ending in a fatal V8 OOM crash. The interrupted
9
9
  * turn is intentionally not replayed because it may contain non-idempotent tools.
10
+ *
11
+ * Boundary rotations (between turns, /loop cycles, /goal rounds) carry a
12
+ * `continuation` in the marker: the relaunched process picks the interrupted
13
+ * loop or goal back up from its persisted state, so multi-day autonomous runs
14
+ * survive heap rotation without losing the long-running task.
10
15
  */
11
16
  export declare const MEMORY_RESTART_EXIT_CODE = 75;
12
17
  export declare const MEMORY_RESTART_MARKER_FILE = "memory-restart.json";
13
- export declare const MEMORY_RESTART_MAX_ATTEMPTS = 3;
18
+ /**
19
+ * Rotations are seamless (the session and any loop/goal resume automatically),
20
+ * so the budget only exists to stop a pathological spin: 24 rotations inside
21
+ * one hour still covers a multi-day run rotating every few hours.
22
+ */
23
+ export declare const MEMORY_RESTART_MAX_ATTEMPTS = 24;
14
24
  export declare const MEMORY_RESTART_WINDOW_MS: number;
25
+ /** Two rotations closer together than this mean the fresh heap is born heavy; stop rotating and let the hard guard decide. */
26
+ export declare const MEMORY_RESTART_MIN_GAP_MS: number;
27
+ /** A continuation is only honoured shortly after it was written. */
28
+ export declare const MEMORY_RESTART_CONTINUATION_TTL_MS: number;
29
+ export interface MemoryRestartContinuation {
30
+ kind: "loop" | "goal";
31
+ id: string;
32
+ }
15
33
  export interface MemoryRestartMarker {
16
34
  sessionId: string;
35
+ /** Start of the fixed accounting window; unlike requestedAt this does not slide. */
36
+ windowStartedAt?: string;
17
37
  requestedAt: string;
18
38
  attempts: number;
39
+ continuation?: MemoryRestartContinuation;
19
40
  }
41
+ /** Recorded when a rotation is requested; orchestrators skip terminal bookkeeping on the way out. */
42
+ export declare function markMemoryRotation(): void;
43
+ export declare function memoryRotationActive(): boolean;
44
+ /** In-process hosts clear this only after the old runtime has been fully disposed. */
45
+ export declare function clearMemoryRotation(): void;
20
46
  export declare function memoryRestartMarkerPath(workspace: string): string;
21
47
  /**
22
- * Count restarts per session inside a rolling window. A marker for a
48
+ * Count restarts per session inside a fixed window. A marker for a
23
49
  * different session or an expired window starts counting from one again, so
24
50
  * a healthy long-lived session never exhausts the budget.
25
51
  */
26
- export declare function nextMemoryRestartMarker(previous: MemoryRestartMarker | undefined, sessionId: string, now: Date): MemoryRestartMarker;
52
+ export declare function nextMemoryRestartMarker(previous: MemoryRestartMarker | undefined, sessionId: string, now: Date, continuation?: MemoryRestartContinuation): MemoryRestartMarker;
53
+ /**
54
+ * Remove a consumed continuation without turning marker consumption into a
55
+ * second restart attempt or extending the accounting/cooldown windows.
56
+ */
57
+ export declare function consumedMemoryRestartMarker(marker: MemoryRestartMarker): MemoryRestartMarker;
58
+ /** True when the previous rotation for this session is too recent for another seamless one. */
59
+ export declare function rotationCooldownActive(marker: MemoryRestartMarker | undefined, sessionId: string, now: Date): boolean;
60
+ /** The continuation a relaunched process should pick up, if still fresh. */
61
+ export declare function pendingContinuation(marker: MemoryRestartMarker | undefined, sessionId: string, now: Date): MemoryRestartContinuation | undefined;
27
62
  export declare function shouldRelaunchForMemoryRestart(marker: MemoryRestartMarker | undefined): boolean;
28
63
  /**
29
64
  * Rebuild the CLI arguments for the relaunched process: drop any existing
@@ -0,0 +1,2 @@
1
+ /** POSIX callers must spawn the root in its own process group (detached=true). */
2
+ export declare function terminateProcessTree(pid: number | undefined): Promise<void>;