@typescape-ai/cli 1.3.0 → 1.4.0

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 (2) hide show
  1. package/dist/cli.js +2 -2
  2. package/package.json +1 -1
package/dist/cli.js CHANGED
@@ -287,7 +287,7 @@ ${t.comment}`:t.comment}this.doc.range[2]=t.offset;break}default:this.errors.pus
287
287
  `)+1;while(t!==0)this.onNewLine(this.offset+t),t=this.source.indexOf(`
288
288
  `,t)+1}yield*this.pop();break;default:yield*this.pop(),yield*this.step()}}*blockMap(e){let t=e.items[e.items.length-1];switch(this.type){case"newline":if(this.onKeyLine=!1,t.value){let n="end"in t.value?t.value.end:void 0;if((Array.isArray(n)?n[n.length-1]:void 0)?.type==="comment")n?.push(this.sourceToken);else e.items.push({start:[this.sourceToken]})}else if(t.sep)t.sep.push(this.sourceToken);else t.start.push(this.sourceToken);return;case"space":case"comment":if(t.value)e.items.push({start:[this.sourceToken]});else if(t.sep)t.sep.push(this.sourceToken);else{if(this.atIndentedComment(t.start,e.indent)){let a=e.items[e.items.length-2]?.value?.end;if(Array.isArray(a)){Array.prototype.push.apply(a,t.start),a.push(this.sourceToken),e.items.pop();return}}t.start.push(this.sourceToken)}return}if(this.indent>=e.indent){let n=!this.onKeyLine&&this.indent===e.indent,a=n&&(t.sep||t.explicitKey)&&this.type!=="seq-item-ind",r=[];if(a&&t.sep&&!t.value){let i=[];for(let o=0;o<t.sep.length;++o){let s=t.sep[o];switch(s.type){case"newline":i.push(o);break;case"space":break;case"comment":if(s.indent>e.indent)i.length=0;break;default:i.length=0}}if(i.length>=2)r=t.sep.splice(i[1])}switch(this.type){case"anchor":case"tag":if(a||t.value)r.push(this.sourceToken),e.items.push({start:r}),this.onKeyLine=!0;else if(t.sep)t.sep.push(this.sourceToken);else t.start.push(this.sourceToken);return;case"explicit-key-ind":if(!t.sep&&!t.explicitKey)t.start.push(this.sourceToken),t.explicitKey=!0;else if(a||t.value)r.push(this.sourceToken),e.items.push({start:r,explicitKey:!0});else this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken],explicitKey:!0}]});this.onKeyLine=!0;return;case"map-value-ind":if(t.explicitKey)if(!t.sep)if(wo(t.start,"newline"))Object.assign(t,{key:null,sep:[this.sourceToken]});else{let i=sc(t.start);this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:i,key:null,sep:[this.sourceToken]}]})}else if(t.value)e.items.push({start:[],key:null,sep:[this.sourceToken]});else if(wo(t.sep,"map-value-ind"))this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:r,key:null,sep:[this.sourceToken]}]});else if(DZ(t.key)&&!wo(t.sep,"newline")){let i=sc(t.start),o=t.key,s=t.sep;s.push(this.sourceToken),delete t.key,delete t.sep,this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:i,key:o,sep:s}]})}else if(r.length>0)t.sep=t.sep.concat(r,this.sourceToken);else t.sep.push(this.sourceToken);else if(!t.sep)Object.assign(t,{key:null,sep:[this.sourceToken]});else if(t.value||a)e.items.push({start:r,key:null,sep:[this.sourceToken]});else if(wo(t.sep,"map-value-ind"))this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[],key:null,sep:[this.sourceToken]}]});else t.sep.push(this.sourceToken);this.onKeyLine=!0;return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{let i=this.flowScalar(this.type);if(a||t.value)e.items.push({start:r,key:i,sep:[]}),this.onKeyLine=!0;else if(t.sep)this.stack.push(i);else Object.assign(t,{key:i,sep:[]}),this.onKeyLine=!0;return}default:{let i=this.startBlockValue(e);if(i){if(n&&i.type!=="block-seq")e.items.push({start:r});this.stack.push(i);return}}}}yield*this.pop(),yield*this.step()}*blockSequence(e){let t=e.items[e.items.length-1];switch(this.type){case"newline":if(t.value){let n="end"in t.value?t.value.end:void 0;if((Array.isArray(n)?n[n.length-1]:void 0)?.type==="comment")n?.push(this.sourceToken);else e.items.push({start:[this.sourceToken]})}else t.start.push(this.sourceToken);return;case"space":case"comment":if(t.value)e.items.push({start:[this.sourceToken]});else{if(this.atIndentedComment(t.start,e.indent)){let a=e.items[e.items.length-2]?.value?.end;if(Array.isArray(a)){Array.prototype.push.apply(a,t.start),a.push(this.sourceToken),e.items.pop();return}}t.start.push(this.sourceToken)}return;case"anchor":case"tag":if(t.value||this.indent<=e.indent)break;t.start.push(this.sourceToken);return;case"seq-item-ind":if(this.indent!==e.indent)break;if(t.value||wo(t.start,"seq-item-ind"))e.items.push({start:[this.sourceToken]});else t.start.push(this.sourceToken);return}if(this.indent>e.indent){let n=this.startBlockValue(e);if(n){this.stack.push(n);return}}yield*this.pop(),yield*this.step()}*flowCollection(e){let t=e.items[e.items.length-1];if(this.type==="flow-error-end"){let n;do yield*this.pop(),n=this.peek(1);while(n&&n.type==="flow-collection")}else if(e.end.length===0){switch(this.type){case"comma":case"explicit-key-ind":if(!t||t.sep)e.items.push({start:[this.sourceToken]});else t.start.push(this.sourceToken);return;case"map-value-ind":if(!t||t.value)e.items.push({start:[],key:null,sep:[this.sourceToken]});else if(t.sep)t.sep.push(this.sourceToken);else Object.assign(t,{key:null,sep:[this.sourceToken]});return;case"space":case"comment":case"newline":case"anchor":case"tag":if(!t||t.value)e.items.push({start:[this.sourceToken]});else if(t.sep)t.sep.push(this.sourceToken);else t.start.push(this.sourceToken);return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{let a=this.flowScalar(this.type);if(!t||t.value)e.items.push({start:[],key:a,sep:[]});else if(t.sep)this.stack.push(a);else Object.assign(t,{key:a,sep:[]});return}case"flow-map-end":case"flow-seq-end":e.end.push(this.sourceToken);return}let n=this.startBlockValue(e);if(n)this.stack.push(n);else yield*this.pop(),yield*this.step()}else{let n=this.peek(2);if(n.type==="block-map"&&(this.type==="map-value-ind"&&n.indent===e.indent||this.type==="newline"&&!n.items[n.items.length-1].sep))yield*this.pop(),yield*this.step();else if(this.type==="map-value-ind"&&n.type!=="flow-collection"){let a=Eb(n),r=sc(a);IZ(e);let i=e.end.splice(1,e.end.length);i.push(this.sourceToken);let o={type:"block-map",offset:e.offset,indent:e.indent,items:[{start:r,key:e,sep:i}]};this.onKeyLine=!0,this.stack[this.stack.length-1]=o}else yield*this.lineEnd(e)}}flowScalar(e){if(this.onNewLine){let t=this.source.indexOf(`
289
289
  `)+1;while(t!==0)this.onNewLine(this.offset+t),t=this.source.indexOf(`
290
- `,t)+1}return{type:e,offset:this.offset,indent:this.indent,source:this.source}}startBlockValue(e){switch(this.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return this.flowScalar(this.type);case"block-scalar-header":return{type:"block-scalar",offset:this.offset,indent:this.indent,props:[this.sourceToken],source:""};case"flow-map-start":case"flow-seq-start":return{type:"flow-collection",offset:this.offset,indent:this.indent,start:this.sourceToken,items:[],end:[]};case"seq-item-ind":return{type:"block-seq",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken]}]};case"explicit-key-ind":{this.onKeyLine=!0;let t=Eb(e),n=sc(t);return n.push(this.sourceToken),{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:n,explicitKey:!0}]}}case"map-value-ind":{this.onKeyLine=!0;let t=Eb(e),n=sc(t);return{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:n,key:null,sep:[this.sourceToken]}]}}}return null}atIndentedComment(e,t){if(this.type!=="comment")return!1;if(this.indent<=t)return!1;return e.every((n)=>n.type==="newline"||n.type==="space")}*documentEnd(e){if(this.type!=="doc-mode"){if(e.end)e.end.push(this.sourceToken);else e.end=[this.sourceToken];if(this.type==="newline")yield*this.pop()}}*lineEnd(e){switch(this.type){case"comma":case"doc-start":case"doc-end":case"flow-seq-end":case"flow-map-end":case"map-value-ind":yield*this.pop(),yield*this.step();break;case"newline":this.onKeyLine=!1;case"space":case"comment":default:if(e.end)e.end.push(this.sourceToken);else e.end=[this.sourceToken];if(this.type==="newline")yield*this.pop()}}}Vqe.Parser=FZ});var qZ=S((sNe)=>{var $Z=ex(),eNe=Vl(),rd=Xl(),tNe=lQ(),nNe=ze(),aNe=lx(),SZ=dx();function LZ(e){let t=e.prettyErrors!==!1;return{lineCounter:e.lineCounter||t&&new aNe.LineCounter||null,prettyErrors:t}}function rNe(e,t={}){let{lineCounter:n,prettyErrors:a}=LZ(t),r=new SZ.Parser(n?.addNewLine),i=new $Z.Composer(t),o=Array.from(i.compose(r.parse(e)));if(a&&n)for(let s of o)s.errors.forEach(rd.prettifyError(e,n)),s.warnings.forEach(rd.prettifyError(e,n));if(o.length>0)return o;return Object.assign([],{empty:!0},i.streamInfo())}function jZ(e,t={}){let{lineCounter:n,prettyErrors:a}=LZ(t),r=new SZ.Parser(n?.addNewLine),i=new $Z.Composer(t),o=null;for(let s of i.compose(r.parse(e),!0,e.length))if(!o)o=s;else if(o.options.logLevel!=="silent"){o.errors.push(new rd.YAMLParseError(s.range.slice(0,2),"MULTIPLE_DOCS","Source contains multiple documents; please use YAML.parseAllDocuments()"));break}if(a&&n)o.errors.forEach(rd.prettifyError(e,n)),o.warnings.forEach(rd.prettifyError(e,n));return o}function iNe(e,t,n){let a=void 0;if(typeof t==="function")a=t;else if(n===void 0&&t&&typeof t==="object")n=t;let r=jZ(e,n);if(!r)return null;if(r.warnings.forEach((i)=>tNe.warn(r.options.logLevel,i)),r.errors.length>0)if(r.options.logLevel!=="silent")throw r.errors[0];else r.errors=[];return r.toJS(Object.assign({reviver:a},n))}function oNe(e,t,n){let a=null;if(typeof t==="function"||Array.isArray(t))a=t;else if(n===void 0&&t)n=t;if(typeof n==="string")n=n.length;if(typeof n==="number"){let r=Math.round(n);n=r<1?void 0:r>8?{indent:8}:{indent:r}}if(e===void 0){let{keepUndefined:r}=n??t??{};if(!r)return}if(nNe.isDocument(e)&&!a)return e.toString(n);return new eNe.Document(e,a,n).toString(n)}sNe.parse=iNe;sNe.parseAllDocuments=rNe;sNe.parseDocument=jZ;sNe.stringify=oNe});var cY=S((dut,NMe)=>{NMe.exports={name:"@typescape-ai/cli",version:"1.3.0",description:"Typescape CLI - Create review sessions, export feedback, and integrate with AI workflows",type:"module",bin:{typescape:"./dist/cli.js"},files:["dist","README.md"],exports:{".":"./dist/cli.js"},publishConfig:{access:"public"},scripts:{build:"bun build src/index.ts --outfile=dist/cli.js --target=bun --bundle --minify",dev:"bun run --watch src/index.ts",test:"bun test",typecheck:"tsc -p tsconfig.typecheck.json --noEmit",lint:"eslint src",prepublishOnly:"bun run build"},dependencies:{},devDependencies:{"@types/bun":"1.1.14","@typescape/integrity":"workspace:*","@typescape/schemas":"workspace:*",ajv:"8.17.1","ajv-formats":"3.0.1",yaml:"2.8.2",zod:"4.3.0"},engines:{bun:">=1.0.0"},keywords:["typescape","cli","review","documentation","ai","feedback","bun"],repository:{type:"git",url:"https://github.com/voidserf/typescape-docs.git",directory:"apps/cli"},license:"MIT"}});var K=0,ba=1,T=2,Pt=3,za=4,Ib=5;function kx(e){if(e>=500)return 4;if(e===401||e===403)return 3;if(e>=400&&e<500)return 2;return 0}function $t(e,t){if(t==="json")console.log(JSON.stringify(e,null,2));else if(typeof e==="string")console.log(e);else if(typeof e==="object"&&e!==null)for(let[n,a]of Object.entries(e))console.log(`${n}: ${a}`);else console.log(String(e))}function U(e,t){console.error(JSON.stringify({error:e},null,2)),process.exit(t)}function Bx(e){console.error(e)}import{existsSync as Oae,readFileSync as Zae}from"fs";import{resolve as UD}from"path";var Tne=If(),One=Sc(),Zne=pf(),Pf=Lc(),Yne=hc(),Qr=Ge(),Kne=Br(),Wne=kt(),Jne=_r(),Vne=Er(),URe=Ud(),Xne=Mf(),eae=Gf(),tae=Rf(),Od=ID(),DD=bc();var nae=Tne.Composer,aae=One.Document,rae=Zne.Schema,iae=Pf.YAMLError,oae=Pf.YAMLParseError,sae=Pf.YAMLWarning,cae=Yne.Alias,Aae=Qr.isAlias,lae=Qr.isCollection,dae=Qr.isDocument,uae=Qr.isMap,pae=Qr.isNode,mae=Qr.isPair,gae=Qr.isScalar,bae=Qr.isSeq,fae=Kne.Pair,hae=Wne.Scalar,yae=Jne.YAMLMap,wae=Vne.YAMLSeq;var kae=Xne.Lexer,Bae=eae.LineCounter,Cae=tae.Parser,Ci=Od.parse,_ae=Od.parseAllDocuments,Eae=Od.parseDocument,vae=Od.stringify,Qae=DD.visit,xae=DD.visitAsync;import{existsSync as Kd,readFileSync as Hf,writeFileSync as qD,mkdirSync as Nae,unlinkSync as Mae}from"fs";import{join as ND}from"path";import{createInterface as Gae}from"readline";import{homedir as MD,hostname as Rae}from"os";import{existsSync as zf,mkdirSync as Iae,writeFileSync as FD}from"fs";import{join as $D,basename as Dae,resolve as Fae}from"path";import{createInterface as $ae}from"readline";async function xr(e){if(!e||typeof e==="number")return"";return new Response(e).text()}async function Zd(){return Bun.stdin.text()}var Yd="https://prod.typescape.ai";function Sae(e){let t={yes:!1,force:!1,format:"text"},n=0;while(n<e.length){let a=e[n];if(a==="--yes"||a==="-y")t.yes=!0,n++;else if(a==="--force"||a==="-f")t.force=!0,n++;else if(a==="--base-url")t.baseUrl=e[n+1],n+=2;else if(a.startsWith("--base-url="))t.baseUrl=a.slice(11),n++;else if(a==="--format"){let r=e[n+1];if(r==="json"||r==="text")t.format=r;n+=2}else if(a.startsWith("--format=")){let r=a.slice(9);if(r==="json"||r==="text")t.format=r;n++}else n++}return t}async function Lae(){try{let e=Bun.spawn(["git","remote","get-url","origin"],{stdout:"pipe",stderr:"pipe"}),t=await xr(e.stdout);if(await e.exited===0&&t.trim()){let r=t.trim().match(/\/([^/]+?)(?:\.git)?$/);if(r)return r[1]}}catch{}return Dae(process.cwd())}async function jae(e,t,n){if(n.yes)return t;if(!process.stdin.isTTY)return t;let a=$ae({input:process.stdin,output:process.stdout});return new Promise((r)=>{a.question(`${e} [${t}]: `,(i)=>{a.close(),r(i.trim()||t)})})}function qae(e,t){return`version: 1
290
+ `,t)+1}return{type:e,offset:this.offset,indent:this.indent,source:this.source}}startBlockValue(e){switch(this.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return this.flowScalar(this.type);case"block-scalar-header":return{type:"block-scalar",offset:this.offset,indent:this.indent,props:[this.sourceToken],source:""};case"flow-map-start":case"flow-seq-start":return{type:"flow-collection",offset:this.offset,indent:this.indent,start:this.sourceToken,items:[],end:[]};case"seq-item-ind":return{type:"block-seq",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken]}]};case"explicit-key-ind":{this.onKeyLine=!0;let t=Eb(e),n=sc(t);return n.push(this.sourceToken),{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:n,explicitKey:!0}]}}case"map-value-ind":{this.onKeyLine=!0;let t=Eb(e),n=sc(t);return{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:n,key:null,sep:[this.sourceToken]}]}}}return null}atIndentedComment(e,t){if(this.type!=="comment")return!1;if(this.indent<=t)return!1;return e.every((n)=>n.type==="newline"||n.type==="space")}*documentEnd(e){if(this.type!=="doc-mode"){if(e.end)e.end.push(this.sourceToken);else e.end=[this.sourceToken];if(this.type==="newline")yield*this.pop()}}*lineEnd(e){switch(this.type){case"comma":case"doc-start":case"doc-end":case"flow-seq-end":case"flow-map-end":case"map-value-ind":yield*this.pop(),yield*this.step();break;case"newline":this.onKeyLine=!1;case"space":case"comment":default:if(e.end)e.end.push(this.sourceToken);else e.end=[this.sourceToken];if(this.type==="newline")yield*this.pop()}}}Vqe.Parser=FZ});var qZ=S((sNe)=>{var $Z=ex(),eNe=Vl(),rd=Xl(),tNe=lQ(),nNe=ze(),aNe=lx(),SZ=dx();function LZ(e){let t=e.prettyErrors!==!1;return{lineCounter:e.lineCounter||t&&new aNe.LineCounter||null,prettyErrors:t}}function rNe(e,t={}){let{lineCounter:n,prettyErrors:a}=LZ(t),r=new SZ.Parser(n?.addNewLine),i=new $Z.Composer(t),o=Array.from(i.compose(r.parse(e)));if(a&&n)for(let s of o)s.errors.forEach(rd.prettifyError(e,n)),s.warnings.forEach(rd.prettifyError(e,n));if(o.length>0)return o;return Object.assign([],{empty:!0},i.streamInfo())}function jZ(e,t={}){let{lineCounter:n,prettyErrors:a}=LZ(t),r=new SZ.Parser(n?.addNewLine),i=new $Z.Composer(t),o=null;for(let s of i.compose(r.parse(e),!0,e.length))if(!o)o=s;else if(o.options.logLevel!=="silent"){o.errors.push(new rd.YAMLParseError(s.range.slice(0,2),"MULTIPLE_DOCS","Source contains multiple documents; please use YAML.parseAllDocuments()"));break}if(a&&n)o.errors.forEach(rd.prettifyError(e,n)),o.warnings.forEach(rd.prettifyError(e,n));return o}function iNe(e,t,n){let a=void 0;if(typeof t==="function")a=t;else if(n===void 0&&t&&typeof t==="object")n=t;let r=jZ(e,n);if(!r)return null;if(r.warnings.forEach((i)=>tNe.warn(r.options.logLevel,i)),r.errors.length>0)if(r.options.logLevel!=="silent")throw r.errors[0];else r.errors=[];return r.toJS(Object.assign({reviver:a},n))}function oNe(e,t,n){let a=null;if(typeof t==="function"||Array.isArray(t))a=t;else if(n===void 0&&t)n=t;if(typeof n==="string")n=n.length;if(typeof n==="number"){let r=Math.round(n);n=r<1?void 0:r>8?{indent:8}:{indent:r}}if(e===void 0){let{keepUndefined:r}=n??t??{};if(!r)return}if(nNe.isDocument(e)&&!a)return e.toString(n);return new eNe.Document(e,a,n).toString(n)}sNe.parse=iNe;sNe.parseAllDocuments=rNe;sNe.parseDocument=jZ;sNe.stringify=oNe});var cY=S((dut,NMe)=>{NMe.exports={name:"@typescape-ai/cli",version:"1.4.0",description:"Typescape CLI - Create review sessions, export feedback, and integrate with AI workflows",type:"module",bin:{typescape:"./dist/cli.js"},files:["dist","README.md"],exports:{".":"./dist/cli.js"},publishConfig:{access:"public"},scripts:{build:"bun build src/index.ts --outfile=dist/cli.js --target=bun --bundle --minify",dev:"bun run --watch src/index.ts",test:"bun test",typecheck:"tsc -p tsconfig.typecheck.json --noEmit",lint:"eslint src",prepublishOnly:"bun run build"},dependencies:{},devDependencies:{"@types/bun":"1.1.14","@typescape/integrity":"workspace:*","@typescape/schemas":"workspace:*",ajv:"8.17.1","ajv-formats":"3.0.1",yaml:"2.8.2",zod:"4.3.0"},engines:{bun:">=1.0.0"},keywords:["typescape","cli","review","documentation","ai","feedback","bun"],repository:{type:"git",url:"https://github.com/voidserf/typescape-docs.git",directory:"apps/cli"},license:"MIT"}});var K=0,ba=1,T=2,Pt=3,za=4,Ib=5;function kx(e){if(e>=500)return 4;if(e===401||e===403)return 3;if(e>=400&&e<500)return 2;return 0}function $t(e,t){if(t==="json")console.log(JSON.stringify(e,null,2));else if(typeof e==="string")console.log(e);else if(typeof e==="object"&&e!==null)for(let[n,a]of Object.entries(e))console.log(`${n}: ${a}`);else console.log(String(e))}function U(e,t){console.error(JSON.stringify({error:e},null,2)),process.exit(t)}function Bx(e){console.error(e)}import{existsSync as Oae,readFileSync as Zae}from"fs";import{resolve as UD}from"path";var Tne=If(),One=Sc(),Zne=pf(),Pf=Lc(),Yne=hc(),Qr=Ge(),Kne=Br(),Wne=kt(),Jne=_r(),Vne=Er(),URe=Ud(),Xne=Mf(),eae=Gf(),tae=Rf(),Od=ID(),DD=bc();var nae=Tne.Composer,aae=One.Document,rae=Zne.Schema,iae=Pf.YAMLError,oae=Pf.YAMLParseError,sae=Pf.YAMLWarning,cae=Yne.Alias,Aae=Qr.isAlias,lae=Qr.isCollection,dae=Qr.isDocument,uae=Qr.isMap,pae=Qr.isNode,mae=Qr.isPair,gae=Qr.isScalar,bae=Qr.isSeq,fae=Kne.Pair,hae=Wne.Scalar,yae=Jne.YAMLMap,wae=Vne.YAMLSeq;var kae=Xne.Lexer,Bae=eae.LineCounter,Cae=tae.Parser,Ci=Od.parse,_ae=Od.parseAllDocuments,Eae=Od.parseDocument,vae=Od.stringify,Qae=DD.visit,xae=DD.visitAsync;import{existsSync as Kd,readFileSync as Hf,writeFileSync as qD,mkdirSync as Nae,unlinkSync as Mae}from"fs";import{join as ND}from"path";import{createInterface as Gae}from"readline";import{homedir as MD,hostname as Rae}from"os";import{existsSync as zf,mkdirSync as Iae,writeFileSync as FD}from"fs";import{join as $D,basename as Dae,resolve as Fae}from"path";import{createInterface as $ae}from"readline";async function xr(e){if(!e||typeof e==="number")return"";return new Response(e).text()}async function Zd(){return Bun.stdin.text()}var Yd="https://prod.typescape.ai";function Sae(e){let t={yes:!1,force:!1,format:"text"},n=0;while(n<e.length){let a=e[n];if(a==="--yes"||a==="-y")t.yes=!0,n++;else if(a==="--force"||a==="-f")t.force=!0,n++;else if(a==="--base-url")t.baseUrl=e[n+1],n+=2;else if(a.startsWith("--base-url="))t.baseUrl=a.slice(11),n++;else if(a==="--format"){let r=e[n+1];if(r==="json"||r==="text")t.format=r;n+=2}else if(a.startsWith("--format=")){let r=a.slice(9);if(r==="json"||r==="text")t.format=r;n++}else n++}return t}async function Lae(){try{let e=Bun.spawn(["git","remote","get-url","origin"],{stdout:"pipe",stderr:"pipe"}),t=await xr(e.stdout);if(await e.exited===0&&t.trim()){let r=t.trim().match(/\/([^/]+?)(?:\.git)?$/);if(r)return r[1]}}catch{}return Dae(process.cwd())}async function jae(e,t,n){if(n.yes)return t;if(!process.stdin.isTTY)return t;let a=$ae({input:process.stdin,output:process.stdout});return new Promise((r)=>{a.question(`${e} [${t}]: `,(i)=>{a.close(),r(i.trim()||t)})})}function qae(e,t){return`version: 1
291
291
 
292
292
  deployment:
293
293
  profile: "standard"
@@ -319,7 +319,7 @@ Next steps:`),console.log("1. Log in: typescape auth login"),console.log("2. Co
319
319
  `,{encoding:"utf-8",mode:384});return!0}function LD(e){let t=Gae({input:process.stdin,output:process.stderr});return new Promise((n)=>{t.question(e,(a)=>{t.close(),n(a.trim())})})}function Uae(e){let t={baseUrl:Yd,format:"text"},n=0;while(n<e.length){let a=e[n];if(a==="--email")t.email=e[n+1],n+=2;else if(a.startsWith("--email="))t.email=a.slice(8),n++;else if(a==="--otp")t.otp=e[n+1],n+=2;else if(a.startsWith("--otp="))t.otp=a.slice(6),n++;else if(a==="--base-url")t.baseUrl=e[n+1],n+=2;else if(a.startsWith("--base-url="))t.baseUrl=a.slice(11),n++;else if(a==="--key-name")t.keyName=e[n+1],n+=2;else if(a.startsWith("--key-name="))t.keyName=a.slice(11),n++;else if(a==="--format"){let r=e[n+1];if(r==="json"||r==="text")t.format=r;n+=2}else if(a.startsWith("--format=")){let r=a.slice(9);if(r==="json"||r==="text")t.format=r;n++}else n++}return t}function GD(e){let t={baseUrl:Yd,format:"text"},n=0;while(n<e.length){let a=e[n];if(a==="--base-url")t.baseUrl=e[n+1],n+=2;else if(a.startsWith("--base-url="))t.baseUrl=a.slice(11),n++;else if(a==="--format"){let r=e[n+1];if(r==="json"||r==="text")t.format=r;n+=2}else if(a.startsWith("--format=")){let r=a.slice(9);if(r==="json"||r==="text")t.format=r;n++}else n++}return t}async function Uf(e,t,n={}){let a;try{a=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json",...n},body:JSON.stringify(t),redirect:"manual"})}catch(s){let c=s instanceof Error?s.message:String(s);U({code:"network_error",message:`Network error: ${c}`},Pt)}let r=a.headers.get("Set-Cookie"),i=a.headers.get("Content-Type")||"",o;if(i.includes("application/json"))try{o=await a.json()}catch{o={}}else o={};return{status:a.status,body:o,setCookie:r}}function jD(e){if(!e)return null;let t=e.match(/(?:__Host-typescape_console|typescape_console)=([^;]+)/);return t?t[1]:null}function Hae(e,t){return`${t.startsWith("https://")?"__Host-typescape_console":"typescape_console"}=${e}`}async function RD(e){let t=Uae(e),n=t.baseUrl.replace(/\/$/,""),a=t.otp||process.env.TYPESCAPE_OTP,r=t.email;if(!r){if(!process.stdin.isTTY)U({code:"missing_email",message:"Email is required. Use --email <email> in non-interactive mode."},T);if(r=await LD("Email: "),!r)U({code:"missing_email",message:"Email is required."},T)}let i=Wd(n);if(i&&i.email===r&&!a){if(t.format==="json")$t({status:"already_authenticated",email:i.email,base_url:n,credentials_path:Jn(),created_at:i.created_at},t.format);else console.log(`Already authenticated as ${i.email}`),console.log(`Credentials stored at ${Jn()}`),console.log(`
320
320
  To re-authenticate, run: typescape auth logout && typescape auth login`);process.exit(K)}if(t.format==="text")console.error(`Sending OTP to ${r}...`);let o=await Uf(`${n}/v1/auth/console/login`,{email:r});if(o.status!==200){let u=o.body;U({code:u?.error?.code||"login_failed",message:u?.error?.message||`Login request failed with status ${o.status}`},o.status>=500?4:T)}let s=o.body,c;if(s.status==="authenticated"){if(c=jD(o.setCookie),!c)U({code:"auth_failed",message:"Server returned authenticated status but no session cookie"},Pt)}else{let u=a;if(!u){if(!process.stdin.isTTY){if(t.format==="json")$t({status:"otp_sent",email:r,message:`OTP sent to ${r}. Re-run with --otp <code> to complete authentication.`,expires_in:300},t.format);else console.log(`OTP sent to ${r}`),console.log("Re-run with --otp <code> to complete authentication.");process.exit(K)}u=await LD("Enter the 6-digit code sent to your email: ")}if(!/^\d{6}$/.test(u))U({code:"invalid_otp",message:"OTP code must be exactly 6 digits."},T);let p=await Uf(`${n}/v1/auth/console/verify`,{email:r,code:u});if(p.status!==200){let g=p.body;U({code:g?.error?.code||"verify_failed",message:g?.error?.message||`OTP verification failed with status ${p.status}`},p.status>=500?4:T)}if(c=jD(p.setCookie),!c)U({code:"auth_failed",message:"Verification succeeded but no session cookie was returned"},Pt)}let A=t.keyName||`CLI (${Rae()})`;if(t.format==="text")console.error("Creating API key...");let l=await Uf(`${n}/v1/api-tokens`,{name:A,scope:{scope_level:"tenant",allowed_operations:["create_session","get_session","export","get_status","run_checks","create_links","manage_webhooks","admin"]}},{Cookie:Hae(c,n),"X-Typescape-Request":"1"});if(l.status!==201&&l.status!==200){let u=l.body;U({code:u?.error?.code||"token_create_failed",message:u?.error?.message||`Failed to create API key (status ${l.status})`},l.status>=500?4:Pt)}let d=l.body;if(!d.raw_token)U({code:"token_create_failed",message:"Server did not return a raw token."},Pt);if(Pae(n,{api_key:d.raw_token,email:r,created_at:new Date().toISOString()}),t.format==="json")$t({status:"authenticated",email:r,base_url:n,token_id:d.token_id,credentials_path:Jn()},t.format);else console.log(`
321
321
  Authenticated as ${r}`),console.log(`API key saved to ${Jn()}`),console.log(`
322
- You can now use Typescape CLI commands without setting TYPESCAPE_API_KEY.`);process.exit(K)}function Tae(e){return GD(e)}async function PD(e){let t=Tae(e),n=t.baseUrl.replace(/\/$/,""),a=Wd(n);if(!a){if(t.format==="json")$t({authenticated:!1,base_url:n,credentials_path:Jn()},t.format);else console.log(`Not authenticated for ${n}`),console.log("Run 'typescape auth login' to authenticate.");process.exit(K)}if(t.format==="json")$t({authenticated:!0,email:a.email,base_url:n,key_prefix:a.api_key.slice(0,8)+"...",created_at:a.created_at,credentials_path:Jn()},t.format);else console.log(`Authenticated as ${a.email}`),console.log(`Server: ${n}`),console.log(`Key: ${a.api_key.slice(0,8)}...`),console.log(`Created: ${a.created_at}`),console.log(`Stored at: ${Jn()}`);process.exit(K)}async function zD(e){let t=GD(e),n=t.baseUrl.replace(/\/$/,""),a=zae(n);if(t.format==="json")$t({status:a?"logged_out":"not_logged_in",base_url:n},t.format);else if(a)console.log(`Logged out from ${n}`),console.log(`Credentials removed from ${Jn()}`);else console.log(`No stored credentials for ${n}`);process.exit(K)}var Tf=".typescape/config.yaml",Yae="TYPESCAPE_API_KEY",HD="TYPESCAPE_BASE_URL",Rc=1;function Kae(e){if(e)return UD(e);return UD(Tf)}function Vn(e){let t=Kae(e);if(!Oae(t))U({code:"config_not_found",message:`Configuration file not found: ${t}. Create a .typescape/config.yaml file or use --config to specify a path.`},T);let n;try{let A=Zae(t,"utf-8");n=Ci(A)}catch(A){let l=A instanceof Error?A.message:String(A);U({code:"config_parse_error",message:`Failed to parse config file: ${l}`},T)}if(n.version!==void 0&&n.version!==Rc)U({code:"unsupported_config_version",message:`Unsupported config version: ${n.version}. Only version ${Rc} is supported.`},T);let a=process.env[HD],r=n.server?.base_url,i=a||r;if(!i)U({code:"missing_base_url",message:`Missing server.base_url in config file. Set server.base_url in ${t} or set the ${HD} environment variable.`},T);let o=i.trim().replace(/\/+$/,"");if(!/^https?:\/\//i.test(o))o=`https://${o}`;let s=n.server?.api_key_env||Yae,c=process.env[s];if(!c){let A=Wd(o);if(A)c=A.api_key}if(!c)U({code:"missing_api_key",message:`Environment variable ${s} is not set. Run 'typescape auth login' or set the env var to your API key.`},Pt);return{baseUrl:o,apiKey:c,repoId:n.repo?.id,configPath:t}}function Wae(e){if(e===void 0)return null;try{let t=JSON.stringify(e);if(!t)return null;if(t.length<=400)return t;return`${t.slice(0,397)}...`}catch{return null}}function Xn(e){let t=e.baseUrl.replace(/\/$/,""),n="/v1";async function a(r,i,o={}){let s=`${t}/v1${i}`;if(o.query&&Object.keys(o.query).length>0){let g=new URLSearchParams(o.query);s+=`?${g.toString()}`}let c={Authorization:`Bearer ${e.apiKey}`,Accept:"application/json",...o.headers};if(o.body!==void 0)c["Content-Type"]="application/json";let A;try{A=await fetch(s,{method:r,headers:c,body:o.body!==void 0?JSON.stringify(o.body):void 0})}catch(g){let b=g instanceof Error?g.message:String(g);U({code:"network_error",message:`Network error: ${b}`},Pt)}let l,d=null;if((A.headers.get("Content-Type")||"").includes("application/json"))try{l=await A.json()}catch{l={}}else{try{d=(await A.text()).trim()||null}catch{d=null}l={}}let p=l?.request_id||A.headers.get("X-Request-Id")||"unknown";if(!A.ok){let g=l,b=g.error?.code||(d?"unexpected_response":"api_error"),y=g.error?.message||`API request failed with status ${A.status}`;if(!g.error?.message&&d){let D=d.length<=300?d:`${d.slice(0,297)}...`;y=`${y}: ${D}`}let w=[];if(g.error?.fix_hint)w.push(`fix_hint: ${g.error.fix_hint}`);let E=Wae(g.error?.details);if(E)w.push(`details: ${E}`);if(w.length>0)y=`${y} (${w.join("; ")})`;let C=kx(A.status);U({code:b,message:`${y} (request_id: ${p})`},C)}return{status:A.status,body:l,requestId:p}}return{async get(r,i){return a("GET",r,i)},async post(r,i){return a("POST",r,i)},async put(r,i){return a("PUT",r,i)},async patch(r,i){return a("PATCH",r,i)},async delete(r,i){return a("DELETE",r,i)},request:a}}var{spawn:Jae}=globalThis.Bun;import{existsSync as Zf,readFileSync as YD}from"fs";import{resolve as Yf,basename as Of}from"path";class Sn extends Error{code;constructor(e,t){super(t);this.code=e;this.name="ReviewersFromConfigError"}}function Vae(e){let t={file:"",reviewers:[],approvers:[],stdin:!1,format:"json"},n=0;while(n<e.length){let a=e[n];if(a==="--file")t.file=e[n+1]||"",n+=2;else if(a.startsWith("--file="))t.file=a.slice(7),n++;else if(a==="--repo")t.repo=e[n+1],n+=2;else if(a.startsWith("--repo="))t.repo=a.slice(7),n++;else if(a==="--sha")t.sha=e[n+1],n+=2;else if(a.startsWith("--sha="))t.sha=a.slice(6),n++;else if(a==="--title")t.title=e[n+1],n+=2;else if(a.startsWith("--title="))t.title=a.slice(8),n++;else if(a==="--reviewer")t.reviewers.push(e[n+1]||""),n+=2;else if(a.startsWith("--reviewer="))t.reviewers.push(a.slice(11)),n++;else if(a==="--reviewers"){let r=e[n+1]||"";t.reviewers.push(...Jd(r)),n+=2}else if(a.startsWith("--reviewers=")){let r=a.slice(12);t.reviewers.push(...Jd(r)),n++}else if(a==="--participants"){let r=e[n+1]||"";t.reviewers.push(...Jd(r)),n+=2}else if(a.startsWith("--participants=")){let r=a.slice(15);t.reviewers.push(...Jd(r)),n++}else if(a==="--approver")t.approvers.push(e[n+1]||""),n+=2;else if(a.startsWith("--approver="))t.approvers.push(a.slice(11)),n++;else if(a==="--reviewers-from")t.reviewersFrom=e[n+1],n+=2;else if(a.startsWith("--reviewers-from="))t.reviewersFrom=a.slice(17),n++;else if(a==="--idempotency-key")t.idempotencyKey=e[n+1],n+=2;else if(a.startsWith("--idempotency-key="))t.idempotencyKey=a.slice(18),n++;else if(a==="--content-body")t.contentBody=e[n+1]||"",n+=2;else if(a.startsWith("--content-body="))t.contentBody=a.slice(15),n++;else if(a==="--stdin")t.stdin=!0,n++;else if(a==="--supersedes-session"||a==="--supersedes")t.supersedesSessionId=e[n+1]||"",n+=2;else if(a.startsWith("--supersedes-session=")||a.startsWith("--supersedes="))t.supersedesSessionId=a.slice(a.indexOf("=")+1),n++;else if(a==="--format")t.format=e[n+1]||"json",n+=2;else if(a.startsWith("--format="))t.format=a.slice(9),n++;else n++}return t}function Jd(e){return e.split(",").map((t)=>t.trim()).filter((t)=>t.length>0)}function TD(e){if(!Array.isArray(e))throw new Sn("reviewers_file_invalid","reviewers.yaml fields must be string arrays.");return e.map((n)=>{if(typeof n!=="string")throw new Sn("reviewers_file_invalid","reviewers.yaml fields must only contain email strings.");return n.trim()}).filter((n)=>n.length>0)}function OD(e){if(e===void 0)return{};if(!e||typeof e!=="object"||Array.isArray(e))throw new Sn("reviewers_file_invalid","reviewers.yaml role sections must be objects.");let t=e;for(let n of Object.keys(t))if(n!=="reviewers"&&n!=="approvers")throw new Sn("reviewers_file_invalid",`Unknown key in reviewers.yaml role section: ${n}`);return{reviewers:t.reviewers===void 0?void 0:TD(t.reviewers),approvers:t.approvers===void 0?void 0:TD(t.approvers)}}function Xae(e){let t;try{t=Ci(e)}catch(r){let i=r instanceof Error?r.message:String(r);throw new Sn("reviewers_file_parse_error",`Failed to parse reviewers file: ${i}`)}if(!t||typeof t!=="object"||Array.isArray(t))throw new Sn("reviewers_file_invalid","reviewers.yaml must be a YAML object.");let n=t;for(let r of Object.keys(n))if(r!=="default"&&r!=="overrides")throw new Sn("reviewers_file_invalid",`Unknown key in reviewers.yaml: ${r}`);let a={default:OD(n.default)};if(n.overrides!==void 0){if(!n.overrides||typeof n.overrides!=="object"||Array.isArray(n.overrides))throw new Sn("reviewers_file_invalid","reviewers.yaml overrides must be an object keyed by glob pattern.");let r=n.overrides,i={};for(let[o,s]of Object.entries(r))i[o]=OD(s);a.overrides=i}return a}function ere(e){return e==="."||e==="+"||e==="^"||e==="$"||e==="{"||e==="}"||e==="("||e===")"||e==="|"||e==="["||e==="]"||e==="\\"}function tre(e,t){let n="",a=0;while(a<t.length){let r=t[a];if(r==="*")if(t[a+1]==="*"){if(n+=".*",a+=2,t[a]==="/")a++}else n+="[^/]*",a++;else if(r==="?")n+="[^/]",a++;else if(ere(r))n+=`\\${r}`,a++;else n+=r,a++}return new RegExp(`^${n}$`).test(e)}function nre(e,t){if(e.length!==t.length)return t.length-e.length;return e.localeCompare(t)}function are(e,t){let n=e.default?.reviewers??[],a=e.default?.approvers??[],i=Object.keys(e.overrides??{}).filter((s)=>tre(t,s)).sort(nre)[0];if(!i)return{reviewers:[...n],approvers:[...a]};let o=e.overrides?.[i]??{};return{reviewers:o.reviewers===void 0?[...n]:[...o.reviewers],approvers:o.approvers===void 0?[...a]:[...o.approvers],matchedOverride:i}}function rre(e,t){let n=Yf(e);if(!Zf(n))throw new Sn("reviewers_file_not_found",`reviewers file not found: ${n}`);let a=YD(n,"utf-8"),r=Xae(a);return are(r,t)}async function ire(){try{let e=Jae({cmd:["git","rev-parse","HEAD"],stdout:"pipe",stderr:"pipe"}),t=await xr(e.stdout);if(await e.exited!==0)U({code:"git_resolve_failed",message:"Could not resolve HEAD. Use --sha to provide a commit SHA explicitly."},T);let a=t.trim();if(!/^[a-f0-9]{40}$/i.test(a))U({code:"git_resolve_failed",message:`Invalid SHA format: ${a}. Use --sha to provide a commit SHA explicitly.`},T);return a.toLowerCase()}catch(e){U({code:"git_resolve_failed",message:"Could not resolve HEAD. Use --sha to provide a commit SHA explicitly."},T)}}function KD(e){let t=[...e.reviewers],n=[...e.approvers];if(e.reviewersFrom){let r=rre(e.reviewersFrom,e.file);if(t.length===0)t=r.reviewers;if(n.length===0)n=r.approvers}let a=[];for(let r of t)if(r.trim())a.push({email:r.trim(),role:"reviewer",scopes:["read","comment"]});for(let r of n)if(r.trim())a.push({email:r.trim(),role:"approver",scopes:["read","comment","approve"]});return a}function ore(e,t){if(e.contentBody!==void 0||e.stdin)return"upload";if(e.repo||e.sha)return"git";if(t.repoId)return"git";if(e.file&&Zf(Yf(e.file)))return"upload";return"git"}var ZD=1048576;async function sre(e){if(e.contentBody!==void 0)return e.contentBody;if(e.stdin)return Zd();let t=Yf(e.file);if(!Zf(t))U({code:"file_not_found",message:`File not found: ${t}`},T);return YD(t,"utf-8")}function cre(e){let t=Of(e,".md"),a=Of(t,".markdown").replace(/[-_]/g," ");return a.charAt(0).toUpperCase()+a.slice(1)}async function WD(e,t,n){let a=Vae(e);if(!a.file&&a.contentBody===void 0&&!a.stdin)U({code:"missing_required_flag",message:"Missing required flag: --file, --content-body, or --stdin"},T);if(ore(a,t)==="upload")return lre(a,n);return Are(a,t,n)}async function Are(e,t,n){if(!e.file)U({code:"missing_required_flag",message:"Missing required flag: --file"},T);let a=e.repo;if(!a||a===".")a=t.repoId;if(!a)U({code:"repo_id_missing",message:"Could not determine repo_id. Set repo.id in .typescape/config.yaml or use --repo."},T);let r=e.sha;if(!r)r=await ire();else{if(!/^[a-f0-9]{40}$/i.test(r))U({code:"invalid_sha_format",message:`Invalid SHA format: ${r}. Must be a 40-character hex string.`},T);r=r.toLowerCase()}let i=[];try{i=KD(e)}catch(A){if(A instanceof Sn)U({code:A.code,message:A.message},T);throw A}if(i.length===0&&!e.reviewersFrom)U({code:"missing_participants",message:"At least one participant is required. Use --reviewer <email>, --reviewers <email1,email2>, --participants <email1,email2>, or --approver <email>."},T);if(i.length>0&&!e.title)U({code:"missing_title",message:"The --title flag is required when participants are specified. Provide a human-readable title for the review session."},T);if(i.length===0&&e.reviewersFrom)console.error(`Warning: no participants resolved from --reviewers-from (${e.reviewersFrom}) for file ${e.file}; proceeding with no explicit participants.`);let o={repo_id:a,git_sha:r,file_path:e.file};if(e.title)o.title=e.title;if(o.participants=i,e.idempotencyKey)o.idempotency_key=e.idempotencyKey;if(e.supersedesSessionId)o.supersedes_session_id=e.supersedesSessionId;let s={};if(e.idempotencyKey)s["Idempotency-Key"]=e.idempotencyKey;let c=await n.post("/sessions",{body:o,headers:s});JD(c.body,e,i),process.exit(K)}async function lre(e,t){let n=await sre(e);if(!n||n.length===0)U({code:"empty_content",message:"Content body is empty. Provide non-empty Markdown content."},T);let a=new TextEncoder().encode(n).length;if(a>ZD)U({code:"content_too_large",message:`Content is ${a} bytes, exceeding the 1 MB limit (${ZD} bytes).`},T);let r=e.file;if(r&&!e.contentBody&&!e.stdin)r=Of(r);if(!r)r="document.md";let i=e.title||cre(r),o=[];try{o=KD(e)}catch(l){if(l instanceof Sn)U({code:l.code,message:l.message},T);throw l}let s={content_body:n,file_path:r,title:i};if(o.length>0)s.participants=o;if(e.idempotencyKey)s.idempotency_key=e.idempotencyKey;if(e.supersedesSessionId)s.supersedes_session_id=e.supersedesSessionId;let c={};if(e.idempotencyKey)c["Idempotency-Key"]=e.idempotencyKey;let A=await t.post("/sessions",{body:s,headers:c});JD(A.body,e,o),process.exit(K)}function JD(e,t,n){if(t.format==="json")$t({...e,resolved_participants:n},"json");else{let a=e.session?.id||"unknown",r=e.invitations?.[0]?.review_url||"";if(console.log(`Session created: ${a}`),r)console.log(`Review URL: ${r}`)}}import{writeFileSync as dre}from"fs";function ure(e){let t={session:"",schema:"v1",format:"json"},n=0;while(n<e.length){let a=e[n];if(a==="--session")t.session=e[n+1]||"",n+=2;else if(a.startsWith("--session="))t.session=a.slice(10),n++;else if(a==="--out")t.out=e[n+1],n+=2;else if(a.startsWith("--out="))t.out=a.slice(6),n++;else if(a==="--schema")t.schema=e[n+1]||"v1",n+=2;else if(a.startsWith("--schema="))t.schema=a.slice(9),n++;else if(a==="--view")t.view=e[n+1]||"",n+=2;else if(a.startsWith("--view="))t.view=a.slice(7),n++;else if(a==="--format")t.format=e[n+1]||"json",n+=2;else if(a.startsWith("--format="))t.format=a.slice(9),n++;else n++}return t}async function VD(e,t,n){let a=ure(e);if(!a.session)U({code:"missing_required_flag",message:"Missing required flag: --session"},T);if(a.schema!=="v1")U({code:"unsupported_schema_version",message:`Unsupported schema version: ${a.schema}. Only v1 is supported.`},T);let r={schema:a.schema};if(a.view)r.view=a.view;let i=await n.get(`/sessions/${encodeURIComponent(a.session)}/export`,{query:r}),o=JSON.stringify(i.body,null,2);if(a.out)dre(a.out,o,"utf-8"),console.error(`Export written to ${a.out}`);else if(a.format==="json")console.log(o);else{let s=i.body.session,c=i.body.threads?.length??0,A=i.body.approvals?.length??0;console.log(`Session ID: ${s?.id??"unknown"}`),console.log(`File Path: ${s?.file_path??"unknown"}`),console.log(`Source Type: ${s?.source_type??"unknown"}`),console.log(`Git SHA: ${s?.git_sha??"N/A"}`),console.log(`Schema Version: ${i.body.schema_version}`),console.log(`Threads: ${c}`),console.log(`Approvals: ${A}`),console.log(`Request ID: ${i.body.request_id}`)}process.exit(K)}function pre(e){let t={session:"",simulate:!1,format:"text"},n=0;while(n<e.length){let a=e[n];if(a==="--session")t.session=e[n+1]||"",n+=2;else if(a.startsWith("--session="))t.session=a.slice(10),n++;else if(a==="--wait"){let r=parseInt(e[n+1]||"",10);if(Number.isNaN(r)||r<0)U({code:"invalid_wait_value",message:`Invalid --wait value: ${e[n+1]}. Must be a non-negative integer (seconds).`},T);t.wait=r,n+=2}else if(a.startsWith("--wait=")){let r=a.slice(7),i=parseInt(r,10);if(Number.isNaN(i)||i<0)U({code:"invalid_wait_value",message:`Invalid --wait value: ${r}. Must be a non-negative integer (seconds).`},T);t.wait=i,n++}else if(a==="--simulate")t.simulate=!0,n++;else if(a==="--format")t.format=e[n+1]||"text",n+=2;else if(a.startsWith("--format="))t.format=a.slice(9),n++;else n++}return t}function mre(e){let t=[];if(e.details)for(let[n,a]of Object.entries(e.details))t.push(`${n}=${a}`);if(e.thread_ids&&e.thread_ids.length>0)t.push(`threads=[${e.thread_ids.join(",")}]`);if(e.approval_ids&&e.approval_ids.length>0)t.push(`approval_ids=[${e.approval_ids.join(",")}]`);return t.join(" ")}async function XD(e,t,n){let a=pre(e);if(!a.session)U({code:"missing_required_flag",message:"Missing required flag: --session"},T);let r={};if(a.simulate)r.simulate="true";if(a.wait!==void 0)r.wait=String(a.wait);let i=await n.get(`/sessions/${encodeURIComponent(a.session)}/status`,{query:r}),{verdict:o,reasons:s}=i.body;if(a.format==="json")console.log(JSON.stringify(i.body,null,2));else if(console.log(`Session: ${a.session}`),console.log(`Verdict: ${o}`),s.length>0){console.log("Reasons:");for(let c of s){let A=mre(c);console.log(` ${c.code}${A?" "+A:""}`)}}if(o==="pass")process.exit(K);else process.exit(ba)}import{existsSync as gre,readFileSync as bre}from"fs";import{resolve as fre,basename as hre}from"path";function yre(e){let t={session:"",newSha:"",stdin:!1,reviewers:[],approvers:[],format:"text"},n=0;while(n<e.length){let a=e[n];if(a==="--session")t.session=e[n+1]||"",n+=2;else if(a.startsWith("--session="))t.session=a.slice(10),n++;else if(a==="--new-sha")t.newSha=e[n+1]||"",n+=2;else if(a.startsWith("--new-sha="))t.newSha=a.slice(10),n++;else if(a==="--title")t.title=e[n+1],n+=2;else if(a.startsWith("--title="))t.title=a.slice(8),n++;else if(a==="--reviewer")t.reviewers.push(e[n+1]||""),n+=2;else if(a.startsWith("--reviewer="))t.reviewers.push(a.slice(11)),n++;else if(a==="--reviewers"){let r=e[n+1]||"";t.reviewers.push(...r.split(",").map((i)=>i.trim()).filter((i)=>i.length>0)),n+=2}else if(a.startsWith("--reviewers=")){let r=a.slice(12);t.reviewers.push(...r.split(",").map((i)=>i.trim()).filter((i)=>i.length>0)),n++}else if(a==="--file")t.file=e[n+1]||"",n+=2;else if(a.startsWith("--file="))t.file=a.slice(7),n++;else if(a==="--stdin")t.stdin=!0,n++;else if(a==="--approver")t.approvers.push(e[n+1]||""),n+=2;else if(a.startsWith("--approver="))t.approvers.push(a.slice(11)),n++;else if(a==="--format")t.format=e[n+1]||"text",n+=2;else if(a.startsWith("--format="))t.format=a.slice(9),n++;else if(a?.startsWith("--"))if(console.error(`Warning: unknown flag '${a}' ignored`),n+1<e.length&&!e[n+1]?.startsWith("--"))n+=2;else n++;else n++}return t}var e1=1048576;function t1(e){let t=[];for(let n of e.reviewers)if(n.trim())t.push({email:n.trim(),role:"reviewer",roles:["reviewer"]});for(let n of e.approvers)if(n.trim())t.push({email:n.trim(),role:"approver",roles:["approver"]});return t}function n1(e,t,n){if(n==="json")console.log(JSON.stringify(e,null,2));else{let{session:a,carry_forward:r,invitations:i}=e;console.log(`New session: ${a.id}`),console.log(`Supersedes: ${t}`);let o=r?.carried_count??0,s=r?.orphaned_count??0;if(console.log(`Carry-forward: ${o} threads carried, ${s} orphaned`),i&&i.length>0){console.log(`Invitations: ${i.length} reviewer(s)`);for(let c of i)console.log(` ${c.email} \u2192 ${c.review_url}`)}}}async function a1(e,t,n){let a=yre(e);if(!a.session){U({code:"missing_required_flag",message:"Missing required flag: --session"},T);return}let r=!!a.newSha,i=!!a.file,o=a.stdin,s=i||o;if(r&&s){U({code:"conflicting_flags",message:"--new-sha and --file/--stdin are mutually exclusive. Use --new-sha for git sessions or --file/--stdin for upload sessions."},T);return}if(i&&o){U({code:"conflicting_flags",message:"--file and --stdin are mutually exclusive."},T);return}if(!r&&!s){U({code:"missing_required_flag",message:"One of --new-sha, --file, or --stdin is required to specify the updated content."},T);return}if(s)await kre(a,n);else await wre(a,n)}async function wre(e,t){if(!/^[a-f0-9]{40}$/i.test(e.newSha)){U({code:"invalid_sha_format",message:`Invalid SHA format: ${e.newSha}. Must be a 40-character hex string.`},T);return}let n={git_sha:e.newSha.toLowerCase()};if(e.title)n.title=e.title;let a=t1(e);if(a.length>0)n.participants=a;let r=await t.post(`/sessions/${encodeURIComponent(e.session)}/supersede`,{body:n});n1(r.body,e.session,e.format),process.exit(K)}async function kre(e,t){let n,a;if(e.stdin)n=await Zd(),a="document.md";else{let c=fre(e.file);if(!gre(c)){U({code:"file_not_found",message:`File not found: ${c}`},T);return}n=bre(c,"utf-8"),a=hre(e.file)}if(!n||n.length===0){U({code:"empty_content",message:"Content body is empty. Provide non-empty Markdown content."},T);return}let r=new TextEncoder().encode(n).length;if(r>e1){U({code:"content_too_large",message:`Content is ${r} bytes, exceeding the 1 MB limit (${e1} bytes).`},T);return}let i={content_body:n,file_path:a,supersedes_session_id:e.session};if(e.title)i.title=e.title;let o=t1(e);if(o.length>0)i.participants=o;let s=await t.post("/sessions",{body:i});n1(s.body,e.session,e.format),process.exit(K)}function Bre(e){let t={session:"",format:"text"},n=0;while(n<e.length){let a=e[n];if(a==="--session")t.session=e[n+1]||"",n+=2;else if(a.startsWith("--session="))t.session=a.slice(10),n++;else if(a==="--reason")t.reason=e[n+1]||"",n+=2;else if(a.startsWith("--reason="))t.reason=a.slice(9),n++;else if(a==="--format")t.format=e[n+1]||"text",n+=2;else if(a.startsWith("--format="))t.format=a.slice(9),n++;else n++}return t}async function r1(e,t,n){let a=Bre(e);if(!a.session)U({code:"missing_required_flag",message:"Missing required flag: --session"},T);let r={};if(a.reason)r.reason=a.reason;let i=await n.post(`/sessions/${encodeURIComponent(a.session)}/close`,{body:r});if(a.format==="json")console.log(JSON.stringify(i.body,null,2));else{let o=i.body;if(o.transitioned)console.log(`Session closed: ${o.session_id}`),console.log(`State: ${o.state}`);else console.log(`Session already closed: ${o.session_id}`),console.log(`State: ${o.state}`)}process.exit(K)}function Cre(e){if(!e||typeof e!=="object")return!1;return e.features?.checks===!0}async function _re(e){let n=`${e.baseUrl.replace(/\/$/,"")}/v1/me/capabilities`,a;try{a=await fetch(n,{method:"GET",headers:{Authorization:`Bearer ${e.apiKey}`,Accept:"application/json"}})}catch(o){let s=o instanceof Error?o.message:String(o);U({code:"capabilities_fetch_failed",message:`Failed to load capabilities: ${s}`},Pt)}let r={};if((a.headers.get("Content-Type")||"").includes("application/json"))try{r=await a.json()}catch{r={}}if(!a.ok){let o={};if(r&&typeof r==="object")o=r;let s=o.error?.code||"capabilities_fetch_failed",c=o.error?.message||`Failed to load capabilities (status ${a.status})`,A=o.request_id?` (request_id: ${o.request_id})`:"";U({code:s,message:`${c}${A}`},Pt)}if(Cre(r))return;U({code:"feature_disabled",message:"Feature checks is not enabled for this deployment"},T)}function Ere(e){let t={session:"",wait:!0,timeout:300,format:"text"},n=0;while(n<e.length){let a=e[n];if(a==="--session")t.session=e[n+1]||"",n+=2;else if(a.startsWith("--session="))t.session=a.slice(10),n++;else if(a==="--wait")t.wait=!0,n++;else if(a==="--no-wait")t.wait=!1,n++;else if(a==="--timeout"){let r=parseInt(e[n+1]||"",10);if(Number.isNaN(r)||r<=0)U({code:"invalid_timeout_value",message:`Invalid --timeout value: ${e[n+1]}. Must be a positive integer (seconds).`},T);t.timeout=r,n+=2}else if(a.startsWith("--timeout=")){let r=a.slice(10),i=parseInt(r,10);if(Number.isNaN(i)||i<=0)U({code:"invalid_timeout_value",message:`Invalid --timeout value: ${r}. Must be a positive integer (seconds).`},T);t.timeout=i,n++}else if(a==="--format")t.format=e[n+1]||"text",n+=2;else if(a.startsWith("--format="))t.format=a.slice(9),n++;else n++}return t}function vre(e){return new Promise((t)=>setTimeout(t,e))}async function Qre(e,t,n,a){let r=Date.now()+a*1000,i=2000;while(Date.now()<r){let o=await e.get(`/sessions/${encodeURIComponent(t)}/checks/${encodeURIComponent(n)}`);if(o.body.status==="completed"||o.body.status==="failed")return o.body;await vre(2000)}U({code:"check_run_timeout",message:`Check run did not complete within ${a}s. Run ID: ${n}`},za)}async function i1(e,t,n){let a=Ere(e);if(!a.session)U({code:"missing_required_flag",message:"Missing required flag: --session"},T);await _re(t);let r=await n.post(`/sessions/${encodeURIComponent(a.session)}/run-checks`),{check_run_id:i}=r.body;if(!a.wait){if(a.format==="json")console.log(JSON.stringify(r.body,null,2));else console.log(`Check run enqueued: ${i}`);process.exit(K)}if(a.format==="text")console.log(`Check run: ${i} (running)`);let o=Date.now(),s=await Qre(n,a.session,i,a.timeout);if(s.status==="failed"){if(a.format==="json")console.log(JSON.stringify(s,null,2));else if(console.log(`
322
+ You can now use Typescape CLI commands without setting TYPESCAPE_API_KEY.`);process.exit(K)}function Tae(e){return GD(e)}async function PD(e){let t=Tae(e),n=t.baseUrl.replace(/\/$/,""),a=Wd(n);if(!a){if(t.format==="json")$t({authenticated:!1,base_url:n,credentials_path:Jn()},t.format);else console.log(`Not authenticated for ${n}`),console.log("Run 'typescape auth login' to authenticate.");process.exit(K)}if(t.format==="json")$t({authenticated:!0,email:a.email,base_url:n,key_prefix:a.api_key.slice(0,8)+"...",created_at:a.created_at,credentials_path:Jn()},t.format);else console.log(`Authenticated as ${a.email}`),console.log(`Server: ${n}`),console.log(`Key: ${a.api_key.slice(0,8)}...`),console.log(`Created: ${a.created_at}`),console.log(`Stored at: ${Jn()}`);process.exit(K)}async function zD(e){let t=GD(e),n=t.baseUrl.replace(/\/$/,""),a=zae(n);if(t.format==="json")$t({status:a?"logged_out":"not_logged_in",base_url:n},t.format);else if(a)console.log(`Logged out from ${n}`),console.log(`Credentials removed from ${Jn()}`);else console.log(`No stored credentials for ${n}`);process.exit(K)}var Tf=".typescape/config.yaml",Yae="TYPESCAPE_API_KEY",HD="TYPESCAPE_BASE_URL",Rc=1;function Kae(e){if(e)return UD(e);return UD(Tf)}function Vn(e){let t=Kae(e);if(!Oae(t))U({code:"config_not_found",message:`Configuration file not found: ${t}. Create a .typescape/config.yaml file or use --config to specify a path.`},T);let n;try{let A=Zae(t,"utf-8");n=Ci(A)}catch(A){let l=A instanceof Error?A.message:String(A);U({code:"config_parse_error",message:`Failed to parse config file: ${l}`},T)}if(n.version!==void 0&&n.version!==Rc)U({code:"unsupported_config_version",message:`Unsupported config version: ${n.version}. Only version ${Rc} is supported.`},T);let a=process.env[HD],r=n.server?.base_url,i=a||r;if(!i)U({code:"missing_base_url",message:`Missing server.base_url in config file. Set server.base_url in ${t} or set the ${HD} environment variable.`},T);let o=i.trim().replace(/\/+$/,"");if(!/^https?:\/\//i.test(o))o=`https://${o}`;let s=n.server?.api_key_env||Yae,c=process.env[s];if(!c){let A=Wd(o);if(A)c=A.api_key}if(!c)U({code:"missing_api_key",message:`Environment variable ${s} is not set. Run 'typescape auth login' or set the env var to your API key.`},Pt);return{baseUrl:o,apiKey:c,repoId:n.repo?.id,configPath:t}}function Wae(e){if(e===void 0)return null;try{let t=JSON.stringify(e);if(!t)return null;if(t.length<=400)return t;return`${t.slice(0,397)}...`}catch{return null}}function Xn(e){let t=e.baseUrl.replace(/\/$/,""),n="/v1";async function a(r,i,o={}){let s=`${t}/v1${i}`;if(o.query&&Object.keys(o.query).length>0){let g=new URLSearchParams(o.query);s+=`?${g.toString()}`}let c={Authorization:`Bearer ${e.apiKey}`,Accept:"application/json",...o.headers};if(o.body!==void 0)c["Content-Type"]="application/json";let A;try{A=await fetch(s,{method:r,headers:c,body:o.body!==void 0?JSON.stringify(o.body):void 0})}catch(g){let b=g instanceof Error?g.message:String(g);U({code:"network_error",message:`Network error: ${b}`},Pt)}let l,d=null;if((A.headers.get("Content-Type")||"").includes("application/json"))try{l=await A.json()}catch{l={}}else{try{d=(await A.text()).trim()||null}catch{d=null}l={}}let p=l?.request_id||A.headers.get("X-Request-Id")||"unknown";if(!A.ok){let g=l,b=g.error?.code||(d?"unexpected_response":"api_error"),y=g.error?.message||`API request failed with status ${A.status}`;if(!g.error?.message&&d){let D=d.length<=300?d:`${d.slice(0,297)}...`;y=`${y}: ${D}`}let w=[];if(g.error?.fix_hint)w.push(`fix_hint: ${g.error.fix_hint}`);let E=Wae(g.error?.details);if(E)w.push(`details: ${E}`);if(w.length>0)y=`${y} (${w.join("; ")})`;let C=kx(A.status);U({code:b,message:`${y} (request_id: ${p})`},C)}return{status:A.status,body:l,requestId:p}}return{async get(r,i){return a("GET",r,i)},async post(r,i){return a("POST",r,i)},async put(r,i){return a("PUT",r,i)},async patch(r,i){return a("PATCH",r,i)},async delete(r,i){return a("DELETE",r,i)},request:a}}var{spawn:Jae}=globalThis.Bun;import{existsSync as Zf,readFileSync as YD}from"fs";import{resolve as Yf,basename as Of}from"path";class Sn extends Error{code;constructor(e,t){super(t);this.code=e;this.name="ReviewersFromConfigError"}}function Vae(e){let t={file:"",reviewers:[],approvers:[],stdin:!1,format:"json"},n=0;while(n<e.length){let a=e[n];if(a==="--file")t.file=e[n+1]||"",n+=2;else if(a.startsWith("--file="))t.file=a.slice(7),n++;else if(a==="--repo")t.repo=e[n+1],n+=2;else if(a.startsWith("--repo="))t.repo=a.slice(7),n++;else if(a==="--sha")t.sha=e[n+1],n+=2;else if(a.startsWith("--sha="))t.sha=a.slice(6),n++;else if(a==="--title")t.title=e[n+1],n+=2;else if(a.startsWith("--title="))t.title=a.slice(8),n++;else if(a==="--reviewer")t.reviewers.push(e[n+1]||""),n+=2;else if(a.startsWith("--reviewer="))t.reviewers.push(a.slice(11)),n++;else if(a==="--reviewers"){let r=e[n+1]||"";t.reviewers.push(...Jd(r)),n+=2}else if(a.startsWith("--reviewers=")){let r=a.slice(12);t.reviewers.push(...Jd(r)),n++}else if(a==="--participants"){let r=e[n+1]||"";t.reviewers.push(...Jd(r)),n+=2}else if(a.startsWith("--participants=")){let r=a.slice(15);t.reviewers.push(...Jd(r)),n++}else if(a==="--approver")t.approvers.push(e[n+1]||""),n+=2;else if(a.startsWith("--approver="))t.approvers.push(a.slice(11)),n++;else if(a==="--reviewers-from")t.reviewersFrom=e[n+1],n+=2;else if(a.startsWith("--reviewers-from="))t.reviewersFrom=a.slice(17),n++;else if(a==="--idempotency-key")t.idempotencyKey=e[n+1],n+=2;else if(a.startsWith("--idempotency-key="))t.idempotencyKey=a.slice(18),n++;else if(a==="--content-body")t.contentBody=e[n+1]||"",n+=2;else if(a.startsWith("--content-body="))t.contentBody=a.slice(15),n++;else if(a==="--stdin")t.stdin=!0,n++;else if(a==="--supersedes-session"||a==="--supersedes")t.supersedesSessionId=e[n+1]||"",n+=2;else if(a.startsWith("--supersedes-session=")||a.startsWith("--supersedes="))t.supersedesSessionId=a.slice(a.indexOf("=")+1),n++;else if(a==="--identity-restriction")t.identityRestriction=e[n+1],n+=2;else if(a.startsWith("--identity-restriction="))t.identityRestriction=a.slice(23),n++;else if(a==="--allowed-email-domains"){let r=e[n+1]||"";t.allowedEmailDomains=r.split(",").map((i)=>i.trim()).filter((i)=>i.length>0),n+=2}else if(a.startsWith("--allowed-email-domains=")){let r=a.slice(24);t.allowedEmailDomains=r.split(",").map((i)=>i.trim()).filter((i)=>i.length>0),n++}else if(a==="--format")t.format=e[n+1]||"json",n+=2;else if(a.startsWith("--format="))t.format=a.slice(9),n++;else n++}return t}function Jd(e){return e.split(",").map((t)=>t.trim()).filter((t)=>t.length>0)}function TD(e){if(!Array.isArray(e))throw new Sn("reviewers_file_invalid","reviewers.yaml fields must be string arrays.");return e.map((n)=>{if(typeof n!=="string")throw new Sn("reviewers_file_invalid","reviewers.yaml fields must only contain email strings.");return n.trim()}).filter((n)=>n.length>0)}function OD(e){if(e===void 0)return{};if(!e||typeof e!=="object"||Array.isArray(e))throw new Sn("reviewers_file_invalid","reviewers.yaml role sections must be objects.");let t=e;for(let n of Object.keys(t))if(n!=="reviewers"&&n!=="approvers")throw new Sn("reviewers_file_invalid",`Unknown key in reviewers.yaml role section: ${n}`);return{reviewers:t.reviewers===void 0?void 0:TD(t.reviewers),approvers:t.approvers===void 0?void 0:TD(t.approvers)}}function Xae(e){let t;try{t=Ci(e)}catch(r){let i=r instanceof Error?r.message:String(r);throw new Sn("reviewers_file_parse_error",`Failed to parse reviewers file: ${i}`)}if(!t||typeof t!=="object"||Array.isArray(t))throw new Sn("reviewers_file_invalid","reviewers.yaml must be a YAML object.");let n=t;for(let r of Object.keys(n))if(r!=="default"&&r!=="overrides")throw new Sn("reviewers_file_invalid",`Unknown key in reviewers.yaml: ${r}`);let a={default:OD(n.default)};if(n.overrides!==void 0){if(!n.overrides||typeof n.overrides!=="object"||Array.isArray(n.overrides))throw new Sn("reviewers_file_invalid","reviewers.yaml overrides must be an object keyed by glob pattern.");let r=n.overrides,i={};for(let[o,s]of Object.entries(r))i[o]=OD(s);a.overrides=i}return a}function ere(e){return e==="."||e==="+"||e==="^"||e==="$"||e==="{"||e==="}"||e==="("||e===")"||e==="|"||e==="["||e==="]"||e==="\\"}function tre(e,t){let n="",a=0;while(a<t.length){let r=t[a];if(r==="*")if(t[a+1]==="*"){if(n+=".*",a+=2,t[a]==="/")a++}else n+="[^/]*",a++;else if(r==="?")n+="[^/]",a++;else if(ere(r))n+=`\\${r}`,a++;else n+=r,a++}return new RegExp(`^${n}$`).test(e)}function nre(e,t){if(e.length!==t.length)return t.length-e.length;return e.localeCompare(t)}function are(e,t){let n=e.default?.reviewers??[],a=e.default?.approvers??[],i=Object.keys(e.overrides??{}).filter((s)=>tre(t,s)).sort(nre)[0];if(!i)return{reviewers:[...n],approvers:[...a]};let o=e.overrides?.[i]??{};return{reviewers:o.reviewers===void 0?[...n]:[...o.reviewers],approvers:o.approvers===void 0?[...a]:[...o.approvers],matchedOverride:i}}function rre(e,t){let n=Yf(e);if(!Zf(n))throw new Sn("reviewers_file_not_found",`reviewers file not found: ${n}`);let a=YD(n,"utf-8"),r=Xae(a);return are(r,t)}async function ire(){try{let e=Jae({cmd:["git","rev-parse","HEAD"],stdout:"pipe",stderr:"pipe"}),t=await xr(e.stdout);if(await e.exited!==0)U({code:"git_resolve_failed",message:"Could not resolve HEAD. Use --sha to provide a commit SHA explicitly."},T);let a=t.trim();if(!/^[a-f0-9]{40}$/i.test(a))U({code:"git_resolve_failed",message:`Invalid SHA format: ${a}. Use --sha to provide a commit SHA explicitly.`},T);return a.toLowerCase()}catch(e){U({code:"git_resolve_failed",message:"Could not resolve HEAD. Use --sha to provide a commit SHA explicitly."},T)}}function KD(e){let t=[...e.reviewers],n=[...e.approvers];if(e.reviewersFrom){let r=rre(e.reviewersFrom,e.file);if(t.length===0)t=r.reviewers;if(n.length===0)n=r.approvers}let a=[];for(let r of t)if(r.trim())a.push({email:r.trim(),role:"reviewer",scopes:["read","comment"]});for(let r of n)if(r.trim())a.push({email:r.trim(),role:"approver",scopes:["read","comment","approve"]});return a}function ore(e,t){if(e.contentBody!==void 0||e.stdin)return"upload";if(e.repo||e.sha)return"git";if(t.repoId)return"git";if(e.file&&Zf(Yf(e.file)))return"upload";return"git"}var ZD=1048576;async function sre(e){if(e.contentBody!==void 0)return e.contentBody;if(e.stdin)return Zd();let t=Yf(e.file);if(!Zf(t))U({code:"file_not_found",message:`File not found: ${t}`},T);return YD(t,"utf-8")}function cre(e){let t=Of(e,".md"),a=Of(t,".markdown").replace(/[-_]/g," ");return a.charAt(0).toUpperCase()+a.slice(1)}async function WD(e,t,n){let a=Vae(e);if(!a.file&&a.contentBody===void 0&&!a.stdin)U({code:"missing_required_flag",message:"Missing required flag: --file, --content-body, or --stdin"},T);if(a.identityRestriction&&!["open","participants_only","domain"].includes(a.identityRestriction))U({code:"invalid_identity_restriction",message:`Invalid --identity-restriction value: ${a.identityRestriction}. Must be one of: open, participants_only, domain.`},T);if(a.identityRestriction==="domain"&&(!a.allowedEmailDomains||a.allowedEmailDomains.length===0))U({code:"missing_allowed_domains",message:'--allowed-email-domains is required when --identity-restriction is "domain".'},T);if(ore(a,t)==="upload")return lre(a,n);return Are(a,t,n)}async function Are(e,t,n){if(!e.file)U({code:"missing_required_flag",message:"Missing required flag: --file"},T);let a=e.repo;if(!a||a===".")a=t.repoId;if(!a)U({code:"repo_id_missing",message:"Could not determine repo_id. Set repo.id in .typescape/config.yaml or use --repo."},T);let r=e.sha;if(!r)r=await ire();else{if(!/^[a-f0-9]{40}$/i.test(r))U({code:"invalid_sha_format",message:`Invalid SHA format: ${r}. Must be a 40-character hex string.`},T);r=r.toLowerCase()}let i=[];try{i=KD(e)}catch(A){if(A instanceof Sn)U({code:A.code,message:A.message},T);throw A}if(i.length===0&&!e.reviewersFrom)U({code:"missing_participants",message:"At least one participant is required. Use --reviewer <email>, --reviewers <email1,email2>, --participants <email1,email2>, or --approver <email>."},T);if(i.length>0&&!e.title)U({code:"missing_title",message:"The --title flag is required when participants are specified. Provide a human-readable title for the review session."},T);if(i.length===0&&e.reviewersFrom)console.error(`Warning: no participants resolved from --reviewers-from (${e.reviewersFrom}) for file ${e.file}; proceeding with no explicit participants.`);let o={repo_id:a,git_sha:r,file_path:e.file};if(e.title)o.title=e.title;if(o.participants=i,e.idempotencyKey)o.idempotency_key=e.idempotencyKey;if(e.supersedesSessionId)o.supersedes_session_id=e.supersedesSessionId;if(e.identityRestriction)o.identity_restriction=e.identityRestriction;if(e.allowedEmailDomains&&e.allowedEmailDomains.length>0)o.allowed_email_domains=e.allowedEmailDomains;let s={};if(e.idempotencyKey)s["Idempotency-Key"]=e.idempotencyKey;let c=await n.post("/sessions",{body:o,headers:s});JD(c.body,e,i),process.exit(K)}async function lre(e,t){let n=await sre(e);if(!n||n.length===0)U({code:"empty_content",message:"Content body is empty. Provide non-empty Markdown content."},T);let a=new TextEncoder().encode(n).length;if(a>ZD)U({code:"content_too_large",message:`Content is ${a} bytes, exceeding the 1 MB limit (${ZD} bytes).`},T);let r=e.file;if(r&&!e.contentBody&&!e.stdin)r=Of(r);if(!r)r="document.md";let i=e.title||cre(r),o=[];try{o=KD(e)}catch(l){if(l instanceof Sn)U({code:l.code,message:l.message},T);throw l}let s={content_body:n,file_path:r,title:i};if(o.length>0)s.participants=o;if(e.idempotencyKey)s.idempotency_key=e.idempotencyKey;if(e.supersedesSessionId)s.supersedes_session_id=e.supersedesSessionId;if(e.identityRestriction)s.identity_restriction=e.identityRestriction;if(e.allowedEmailDomains&&e.allowedEmailDomains.length>0)s.allowed_email_domains=e.allowedEmailDomains;let c={};if(e.idempotencyKey)c["Idempotency-Key"]=e.idempotencyKey;let A=await t.post("/sessions",{body:s,headers:c});JD(A.body,e,o),process.exit(K)}function JD(e,t,n){if(t.format==="json")$t({...e,resolved_participants:n},"json");else{let a=e.session?.id||"unknown",r=e.invitations?.[0]?.review_url||"";if(console.log(`Session created: ${a}`),r)console.log(`Review URL: ${r}`)}}import{writeFileSync as dre}from"fs";function ure(e){let t={session:"",schema:"v1",format:"json"},n=0;while(n<e.length){let a=e[n];if(a==="--session")t.session=e[n+1]||"",n+=2;else if(a.startsWith("--session="))t.session=a.slice(10),n++;else if(a==="--out")t.out=e[n+1],n+=2;else if(a.startsWith("--out="))t.out=a.slice(6),n++;else if(a==="--schema")t.schema=e[n+1]||"v1",n+=2;else if(a.startsWith("--schema="))t.schema=a.slice(9),n++;else if(a==="--view")t.view=e[n+1]||"",n+=2;else if(a.startsWith("--view="))t.view=a.slice(7),n++;else if(a==="--format")t.format=e[n+1]||"json",n+=2;else if(a.startsWith("--format="))t.format=a.slice(9),n++;else n++}return t}async function VD(e,t,n){let a=ure(e);if(!a.session)U({code:"missing_required_flag",message:"Missing required flag: --session"},T);if(a.schema!=="v1")U({code:"unsupported_schema_version",message:`Unsupported schema version: ${a.schema}. Only v1 is supported.`},T);let r={schema:a.schema};if(a.view)r.view=a.view;let i=await n.get(`/sessions/${encodeURIComponent(a.session)}/export`,{query:r}),o=JSON.stringify(i.body,null,2);if(a.out)dre(a.out,o,"utf-8"),console.error(`Export written to ${a.out}`);else if(a.format==="json")console.log(o);else{let s=i.body.session,c=i.body.threads?.length??0,A=i.body.approvals?.length??0;console.log(`Session ID: ${s?.id??"unknown"}`),console.log(`File Path: ${s?.file_path??"unknown"}`),console.log(`Source Type: ${s?.source_type??"unknown"}`),console.log(`Git SHA: ${s?.git_sha??"N/A"}`),console.log(`Schema Version: ${i.body.schema_version}`),console.log(`Threads: ${c}`),console.log(`Approvals: ${A}`),console.log(`Request ID: ${i.body.request_id}`)}process.exit(K)}function pre(e){let t={session:"",simulate:!1,format:"text"},n=0;while(n<e.length){let a=e[n];if(a==="--session")t.session=e[n+1]||"",n+=2;else if(a.startsWith("--session="))t.session=a.slice(10),n++;else if(a==="--wait"){let r=parseInt(e[n+1]||"",10);if(Number.isNaN(r)||r<0)U({code:"invalid_wait_value",message:`Invalid --wait value: ${e[n+1]}. Must be a non-negative integer (seconds).`},T);t.wait=r,n+=2}else if(a.startsWith("--wait=")){let r=a.slice(7),i=parseInt(r,10);if(Number.isNaN(i)||i<0)U({code:"invalid_wait_value",message:`Invalid --wait value: ${r}. Must be a non-negative integer (seconds).`},T);t.wait=i,n++}else if(a==="--simulate")t.simulate=!0,n++;else if(a==="--format")t.format=e[n+1]||"text",n+=2;else if(a.startsWith("--format="))t.format=a.slice(9),n++;else n++}return t}function mre(e){let t=[];if(e.details)for(let[n,a]of Object.entries(e.details))t.push(`${n}=${a}`);if(e.thread_ids&&e.thread_ids.length>0)t.push(`threads=[${e.thread_ids.join(",")}]`);if(e.approval_ids&&e.approval_ids.length>0)t.push(`approval_ids=[${e.approval_ids.join(",")}]`);return t.join(" ")}async function XD(e,t,n){let a=pre(e);if(!a.session)U({code:"missing_required_flag",message:"Missing required flag: --session"},T);let r={};if(a.simulate)r.simulate="true";if(a.wait!==void 0)r.wait=String(a.wait);let i=await n.get(`/sessions/${encodeURIComponent(a.session)}/status`,{query:r}),{verdict:o,reasons:s}=i.body;if(a.format==="json")console.log(JSON.stringify(i.body,null,2));else if(console.log(`Session: ${a.session}`),console.log(`Verdict: ${o}`),s.length>0){console.log("Reasons:");for(let c of s){let A=mre(c);console.log(` ${c.code}${A?" "+A:""}`)}}if(o==="pass")process.exit(K);else process.exit(ba)}import{existsSync as gre,readFileSync as bre}from"fs";import{resolve as fre,basename as hre}from"path";function yre(e){let t={session:"",newSha:"",stdin:!1,reviewers:[],approvers:[],format:"text"},n=0;while(n<e.length){let a=e[n];if(a==="--session")t.session=e[n+1]||"",n+=2;else if(a.startsWith("--session="))t.session=a.slice(10),n++;else if(a==="--new-sha")t.newSha=e[n+1]||"",n+=2;else if(a.startsWith("--new-sha="))t.newSha=a.slice(10),n++;else if(a==="--title")t.title=e[n+1],n+=2;else if(a.startsWith("--title="))t.title=a.slice(8),n++;else if(a==="--reviewer")t.reviewers.push(e[n+1]||""),n+=2;else if(a.startsWith("--reviewer="))t.reviewers.push(a.slice(11)),n++;else if(a==="--reviewers"){let r=e[n+1]||"";t.reviewers.push(...r.split(",").map((i)=>i.trim()).filter((i)=>i.length>0)),n+=2}else if(a.startsWith("--reviewers=")){let r=a.slice(12);t.reviewers.push(...r.split(",").map((i)=>i.trim()).filter((i)=>i.length>0)),n++}else if(a==="--file")t.file=e[n+1]||"",n+=2;else if(a.startsWith("--file="))t.file=a.slice(7),n++;else if(a==="--stdin")t.stdin=!0,n++;else if(a==="--approver")t.approvers.push(e[n+1]||""),n+=2;else if(a.startsWith("--approver="))t.approvers.push(a.slice(11)),n++;else if(a==="--format")t.format=e[n+1]||"text",n+=2;else if(a.startsWith("--format="))t.format=a.slice(9),n++;else if(a?.startsWith("--"))if(console.error(`Warning: unknown flag '${a}' ignored`),n+1<e.length&&!e[n+1]?.startsWith("--"))n+=2;else n++;else n++}return t}var e1=1048576;function t1(e){let t=[];for(let n of e.reviewers)if(n.trim())t.push({email:n.trim(),role:"reviewer",roles:["reviewer"]});for(let n of e.approvers)if(n.trim())t.push({email:n.trim(),role:"approver",roles:["approver"]});return t}function n1(e,t,n){if(n==="json")console.log(JSON.stringify(e,null,2));else{let{session:a,carry_forward:r,invitations:i}=e;console.log(`New session: ${a.id}`),console.log(`Supersedes: ${t}`);let o=r?.carried_count??0,s=r?.orphaned_count??0;if(console.log(`Carry-forward: ${o} threads carried, ${s} orphaned`),i&&i.length>0){console.log(`Invitations: ${i.length} reviewer(s)`);for(let c of i)console.log(` ${c.email} \u2192 ${c.review_url}`)}}}async function a1(e,t,n){let a=yre(e);if(!a.session){U({code:"missing_required_flag",message:"Missing required flag: --session"},T);return}let r=!!a.newSha,i=!!a.file,o=a.stdin,s=i||o;if(r&&s){U({code:"conflicting_flags",message:"--new-sha and --file/--stdin are mutually exclusive. Use --new-sha for git sessions or --file/--stdin for upload sessions."},T);return}if(i&&o){U({code:"conflicting_flags",message:"--file and --stdin are mutually exclusive."},T);return}if(!r&&!s){U({code:"missing_required_flag",message:"One of --new-sha, --file, or --stdin is required to specify the updated content."},T);return}if(s)await kre(a,n);else await wre(a,n)}async function wre(e,t){if(!/^[a-f0-9]{40}$/i.test(e.newSha)){U({code:"invalid_sha_format",message:`Invalid SHA format: ${e.newSha}. Must be a 40-character hex string.`},T);return}let n={git_sha:e.newSha.toLowerCase()};if(e.title)n.title=e.title;let a=t1(e);if(a.length>0)n.participants=a;let r=await t.post(`/sessions/${encodeURIComponent(e.session)}/supersede`,{body:n});n1(r.body,e.session,e.format),process.exit(K)}async function kre(e,t){let n,a;if(e.stdin)n=await Zd(),a="document.md";else{let c=fre(e.file);if(!gre(c)){U({code:"file_not_found",message:`File not found: ${c}`},T);return}n=bre(c,"utf-8"),a=hre(e.file)}if(!n||n.length===0){U({code:"empty_content",message:"Content body is empty. Provide non-empty Markdown content."},T);return}let r=new TextEncoder().encode(n).length;if(r>e1){U({code:"content_too_large",message:`Content is ${r} bytes, exceeding the 1 MB limit (${e1} bytes).`},T);return}let i={content_body:n,file_path:a,supersedes_session_id:e.session};if(e.title)i.title=e.title;let o=t1(e);if(o.length>0)i.participants=o;let s=await t.post("/sessions",{body:i});n1(s.body,e.session,e.format),process.exit(K)}function Bre(e){let t={session:"",format:"text"},n=0;while(n<e.length){let a=e[n];if(a==="--session")t.session=e[n+1]||"",n+=2;else if(a.startsWith("--session="))t.session=a.slice(10),n++;else if(a==="--reason")t.reason=e[n+1]||"",n+=2;else if(a.startsWith("--reason="))t.reason=a.slice(9),n++;else if(a==="--format")t.format=e[n+1]||"text",n+=2;else if(a.startsWith("--format="))t.format=a.slice(9),n++;else n++}return t}async function r1(e,t,n){let a=Bre(e);if(!a.session)U({code:"missing_required_flag",message:"Missing required flag: --session"},T);let r={};if(a.reason)r.reason=a.reason;let i=await n.post(`/sessions/${encodeURIComponent(a.session)}/close`,{body:r});if(a.format==="json")console.log(JSON.stringify(i.body,null,2));else{let o=i.body;if(o.transitioned)console.log(`Session closed: ${o.session_id}`),console.log(`State: ${o.state}`);else console.log(`Session already closed: ${o.session_id}`),console.log(`State: ${o.state}`)}process.exit(K)}function Cre(e){if(!e||typeof e!=="object")return!1;return e.features?.checks===!0}async function _re(e){let n=`${e.baseUrl.replace(/\/$/,"")}/v1/me/capabilities`,a;try{a=await fetch(n,{method:"GET",headers:{Authorization:`Bearer ${e.apiKey}`,Accept:"application/json"}})}catch(o){let s=o instanceof Error?o.message:String(o);U({code:"capabilities_fetch_failed",message:`Failed to load capabilities: ${s}`},Pt)}let r={};if((a.headers.get("Content-Type")||"").includes("application/json"))try{r=await a.json()}catch{r={}}if(!a.ok){let o={};if(r&&typeof r==="object")o=r;let s=o.error?.code||"capabilities_fetch_failed",c=o.error?.message||`Failed to load capabilities (status ${a.status})`,A=o.request_id?` (request_id: ${o.request_id})`:"";U({code:s,message:`${c}${A}`},Pt)}if(Cre(r))return;U({code:"feature_disabled",message:"Feature checks is not enabled for this deployment"},T)}function Ere(e){let t={session:"",wait:!0,timeout:300,format:"text"},n=0;while(n<e.length){let a=e[n];if(a==="--session")t.session=e[n+1]||"",n+=2;else if(a.startsWith("--session="))t.session=a.slice(10),n++;else if(a==="--wait")t.wait=!0,n++;else if(a==="--no-wait")t.wait=!1,n++;else if(a==="--timeout"){let r=parseInt(e[n+1]||"",10);if(Number.isNaN(r)||r<=0)U({code:"invalid_timeout_value",message:`Invalid --timeout value: ${e[n+1]}. Must be a positive integer (seconds).`},T);t.timeout=r,n+=2}else if(a.startsWith("--timeout=")){let r=a.slice(10),i=parseInt(r,10);if(Number.isNaN(i)||i<=0)U({code:"invalid_timeout_value",message:`Invalid --timeout value: ${r}. Must be a positive integer (seconds).`},T);t.timeout=i,n++}else if(a==="--format")t.format=e[n+1]||"text",n+=2;else if(a.startsWith("--format="))t.format=a.slice(9),n++;else n++}return t}function vre(e){return new Promise((t)=>setTimeout(t,e))}async function Qre(e,t,n,a){let r=Date.now()+a*1000,i=2000;while(Date.now()<r){let o=await e.get(`/sessions/${encodeURIComponent(t)}/checks/${encodeURIComponent(n)}`);if(o.body.status==="completed"||o.body.status==="failed")return o.body;await vre(2000)}U({code:"check_run_timeout",message:`Check run did not complete within ${a}s. Run ID: ${n}`},za)}async function i1(e,t,n){let a=Ere(e);if(!a.session)U({code:"missing_required_flag",message:"Missing required flag: --session"},T);await _re(t);let r=await n.post(`/sessions/${encodeURIComponent(a.session)}/run-checks`),{check_run_id:i}=r.body;if(!a.wait){if(a.format==="json")console.log(JSON.stringify(r.body,null,2));else console.log(`Check run enqueued: ${i}`);process.exit(K)}if(a.format==="text")console.log(`Check run: ${i} (running)`);let o=Date.now(),s=await Qre(n,a.session,i,a.timeout);if(s.status==="failed"){if(a.format==="json")console.log(JSON.stringify(s,null,2));else if(console.log(`
323
323
  Check run failed.`),s.error_json)console.log(`Error: ${JSON.stringify(s.error_json,null,2)}`);process.exit(za)}if(a.format==="json")console.log(JSON.stringify(s,null,2));else{let A=((Date.now()-o)/1000).toFixed(1);if(console.log(`Runner: checks@${s.runner_version} | Config: ${s.config_hash.slice(0,12)}`),console.log(`
324
324
  Completed in ${A}s`),s.truncated)Bx("Warning: Results truncated \u2014 findings exceeded maximum per run.");let l=s.findings||[];if(l.length>0){console.log("");for(let p of l){let g=p.finding_gate==="gates"?"blocking":p.finding_gate==="informational"?"suggestion":p.finding_gate,b=p.block_id?`Block ${p.block_id}`:"Session-level",y=p.title||p.rule_id;if(console.log(` [${g}] ${y} (rule: ${p.rule_id})`),p.body_md)console.log(` ${b} -> ${JSON.stringify(p.body_md)}`);else console.log(` ${b}`)}}let d=l.filter((p)=>p.finding_gate==="gates").length,u=l.length-d;console.log(`
325
325
  Result: ${l.length} findings (${d} blocking, ${u} other)`)}if((s.findings||[]).some((A)=>A.finding_gate==="gates"))process.exit(ba);else process.exit(K)}import{createHash as xre}from"crypto";import{readFileSync as Ire,writeFileSync as Dre}from"fs";var{spawn:Fre}=globalThis.Bun;function $re(e){let t={session:"",threads:[],mode:"accepted_suggestions_only",format:"text"},n=0;while(n<e.length){let a=e[n];if(a==="--session")t.session=e[n+1]||"",n+=2;else if(a.startsWith("--session="))t.session=a.slice(10),n++;else if(a==="--threads"){let r=e[n+1]||"";t.threads=r.split(",").map((i)=>i.trim()).filter(Boolean),n+=2}else if(a.startsWith("--threads=")){let r=a.slice(10);t.threads=r.split(",").map((i)=>i.trim()).filter(Boolean),n++}else if(a==="--mode")t.mode=e[n+1]||"accepted_suggestions_only",n+=2;else if(a.startsWith("--mode="))t.mode=a.slice(7),n++;else if(a==="--format")t.format=e[n+1]||"text",n+=2;else if(a.startsWith("--format="))t.format=a.slice(9),n++;else if(a==="--out")t.out=e[n+1],n+=2;else if(a.startsWith("--out="))t.out=a.slice(6),n++;else n++}return t}async function o1(e,t,n){let a=$re(e);if(!a.session)U({code:"missing_required_flag",message:"Missing required flag: --session"},T);let r={mode:a.mode};if(a.threads.length>0)r.thread_ids=a.threads;let o=(await n.post(`/sessions/${encodeURIComponent(a.session)}/proposed-changes`,{body:r})).body;if(a.out)Dre(a.out,o.patch,"utf-8"),console.error(`Patch written to ${a.out}`);if(a.format==="json")console.log(JSON.stringify(o,null,2));else{let s=o.target.git_sha?`${o.target.repo_id??"?"} @ ${o.target.git_sha}`:o.target.source_type;console.log(`Proposed Change: ${o.proposed_change_id}`),console.log(`Target: ${s} / ${o.target.file_path}`),console.log(`Expected SHA256: ${o.expected_source_content_sha256}`),console.log(`Patch SHA256: ${o.patch_sha256}`),console.log(`State: ${o.state}`),console.log("---"),console.log(o.patch)}process.exit(K)}function Sre(e){let t={session:"",change:"",checkOnly:!1,format:"text"},n=0;while(n<e.length){let a=e[n];if(a==="--session")t.session=e[n+1]||"",n+=2;else if(a.startsWith("--session="))t.session=a.slice(10),n++;else if(a==="--change")t.change=e[n+1]||"",n+=2;else if(a.startsWith("--change="))t.change=a.slice(9),n++;else if(a==="--check-only")t.checkOnly=!0,n++;else if(a==="--format")t.format=e[n+1]||"text",n+=2;else if(a.startsWith("--format="))t.format=a.slice(9),n++;else n++}return t}async function s1(e,t,n){let a=Sre(e);if(!a.session)U({code:"missing_required_flag",message:"Missing required flag: --session"},T);if(!a.change)U({code:"missing_required_flag",message:"Missing required flag: --change"},T);let i=(await n.get(`/sessions/${encodeURIComponent(a.session)}/proposed-changes/${encodeURIComponent(a.change)}`)).body,o=i.target.file_path,s;try{s=Buffer.from(Ire(o))}catch{U({code:"file_not_found",message:`Local file not found: ${o}`},T)}let c=`sha256:${xre("sha256").update(new Uint8Array(s)).digest("hex")}`;if(c!==i.expected_source_content_sha256)U({code:"content_hash_mismatch",message:`Local file hash mismatch. Expected: ${i.expected_source_content_sha256}. Got: ${c}. The file has changed since session creation.`},T);let A=a.checkOnly?["git","apply","--check","-"]:["git","apply","-"],l=Fre({cmd:A,stdin:"pipe",stdout:"pipe",stderr:"pipe"});l.stdin.write(i.patch),l.stdin.end();let d=await xr(l.stderr);if(await l.exited!==0)U({code:"git_apply_failed",message:`git apply failed: ${d.trim()||"patch could not be applied"}`},za);if(a.format==="json")console.log(JSON.stringify({proposed_change_id:i.proposed_change_id,file_path:o,check_only:a.checkOnly,applied:!a.checkOnly},null,2));else if(a.checkOnly)console.log(`Patch check passed for ${o}`);else console.log(`Patch applied to ${o}`);process.exit(K)}function Lre(e){let t={session:"",change:"",commit:"",format:"text"},n=0;while(n<e.length){let a=e[n];if(a==="--session")t.session=e[n+1]||"",n+=2;else if(a.startsWith("--session="))t.session=a.slice(10),n++;else if(a==="--change")t.change=e[n+1]||"",n+=2;else if(a.startsWith("--change="))t.change=a.slice(9),n++;else if(a==="--commit")t.commit=e[n+1]||"",n+=2;else if(a.startsWith("--commit="))t.commit=a.slice(9),n++;else if(a==="--pr")t.pr=e[n+1],n+=2;else if(a.startsWith("--pr="))t.pr=a.slice(5),n++;else if(a==="--format")t.format=e[n+1]||"text",n+=2;else if(a.startsWith("--format="))t.format=a.slice(9),n++;else n++}return t}async function c1(e,t,n){let a=Lre(e);if(!a.session)U({code:"missing_required_flag",message:"Missing required flag: --session"},T);if(!a.change)U({code:"missing_required_flag",message:"Missing required flag: --change"},T);if(!a.commit)U({code:"missing_required_flag",message:"Missing required flag: --commit"},T);let i={patch_sha256:(await n.get(`/sessions/${encodeURIComponent(a.session)}/proposed-changes/${encodeURIComponent(a.change)}`)).body.patch_sha256,result_commit_sha:a.commit};if(a.pr)i.result_pr_url=a.pr;let o=await n.post(`/sessions/${encodeURIComponent(a.session)}/proposed-changes/${encodeURIComponent(a.change)}/applied`,{body:i});if(a.format==="json")console.log(JSON.stringify(o.body,null,2));else if(console.log(`Evidence recorded for ${a.change}`),console.log(` Commit: ${a.commit}`),a.pr)console.log(` PR: ${a.pr}`);process.exit(K)}import{readFileSync as fG,writeFileSync as bBe}from"fs";import{createHash as jre}from"crypto";var Kf=new Uint8Array([239,187,191]);function qre(e){return e.length>=3&&e[0]===Kf[0]&&e[1]===Kf[1]&&e[2]===Kf[2]}function Wf(e){let t=e.length,n=!1,a=e;if(qre(a))a=a.slice(3),n=!0;let r=new TextDecoder("utf-8",{fatal:!0}),i;try{i=r.decode(a)}catch{throw Error("Invalid UTF-8 encoding")}let o=i;i=i.replace(/\r\n/g,`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@typescape-ai/cli",
3
- "version": "1.3.0",
3
+ "version": "1.4.0",
4
4
  "description": "Typescape CLI - Create review sessions, export feedback, and integrate with AI workflows",
5
5
  "type": "module",
6
6
  "bin": {