UNPKG

@earendil-works/pi-coding-agent

Version:

Coding agent CLI with read, bash, edit, write tools and session management

11 lines (9 loc) • 16.9 kB
import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url); import{__commonJS,__toESM}from"./chunk-JXWJOIH4.js";var require_options=__commonJS({"node_modules/partial-json/dist/options.js"(exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.Allow=exports.ALL=exports.COLLECTION=exports.ATOM=exports.SPECIAL=exports.INF=exports._INFINITY=exports.INFINITY=exports.NAN=exports.BOOL=exports.NULL=exports.OBJ=exports.ARR=exports.NUM=exports.STR=void 0;exports.STR=1;exports.NUM=2;exports.ARR=4;exports.OBJ=8;exports.NULL=16;exports.BOOL=32;exports.NAN=64;exports.INFINITY=128;exports._INFINITY=256;exports.INF=exports.INFINITY|exports._INFINITY;exports.SPECIAL=exports.NULL|exports.BOOL|exports.INF|exports.NAN;exports.ATOM=exports.STR|exports.NUM|exports.SPECIAL;exports.COLLECTION=exports.ARR|exports.OBJ;exports.ALL=exports.ATOM|exports.COLLECTION;exports.Allow={STR:exports.STR,NUM:exports.NUM,ARR:exports.ARR,OBJ:exports.OBJ,NULL:exports.NULL,BOOL:exports.BOOL,NAN:exports.NAN,INFINITY:exports.INFINITY,_INFINITY:exports._INFINITY,INF:exports.INF,SPECIAL:exports.SPECIAL,ATOM:exports.ATOM,COLLECTION:exports.COLLECTION,ALL:exports.ALL};exports.default=exports.Allow}});var require_dist=__commonJS({"node_modules/partial-json/dist/index.js"(exports){"use strict";var __createBinding=exports&&exports.__createBinding||(Object.create?(function(o,m,k,k2){k2===void 0&&(k2=k);var desc=Object.getOwnPropertyDescriptor(m,k);(!desc||("get"in desc?!m.__esModule:desc.writable||desc.configurable))&&(desc={enumerable:!0,get:function(){return m[k]}}),Object.defineProperty(o,k2,desc)}):(function(o,m,k,k2){k2===void 0&&(k2=k),o[k2]=m[k]})),__exportStar=exports&&exports.__exportStar||function(m,exports2){for(var p in m)p!=="default"&&!Object.prototype.hasOwnProperty.call(exports2,p)&&__createBinding(exports2,m,p)};Object.defineProperty(exports,"__esModule",{value:!0});exports.Allow=exports.MalformedJSON=exports.PartialJSON=exports.parseJSON=exports.parse=void 0;var options_1=require_options();Object.defineProperty(exports,"Allow",{enumerable:!0,get:function(){return options_1.Allow}});__exportStar(require_options(),exports);var PartialJSON=class extends Error{};exports.PartialJSON=PartialJSON;var MalformedJSON=class extends Error{};exports.MalformedJSON=MalformedJSON;function parseJSON(jsonString,allowPartial=options_1.Allow.ALL){if(typeof jsonString!="string")throw new TypeError(`expecting str, got ${typeof jsonString}`);if(!jsonString.trim())throw new Error(`${jsonString} is empty`);return _parseJSON(jsonString.trim(),allowPartial)}exports.parseJSON=parseJSON;var _parseJSON=(jsonString,allow)=>{let length=jsonString.length,index=0,markPartialJSON=msg=>{throw new PartialJSON(`${msg} at position ${index}`)},throwMalformedError=msg=>{throw new MalformedJSON(`${msg} at position ${index}`)},parseAny=()=>(skipBlank(),index>=length&&markPartialJSON("Unexpected end of input"),jsonString[index]==='"'?parseStr():jsonString[index]==="{"?parseObj():jsonString[index]==="["?parseArr():jsonString.substring(index,index+4)==="null"||options_1.Allow.NULL&allow&&length-index<4&&"null".startsWith(jsonString.substring(index))?(index+=4,null):jsonString.substring(index,index+4)==="true"||options_1.Allow.BOOL&allow&&length-index<4&&"true".startsWith(jsonString.substring(index))?(index+=4,!0):jsonString.substring(index,index+5)==="false"||options_1.Allow.BOOL&allow&&length-index<5&&"false".startsWith(jsonString.substring(index))?(index+=5,!1):jsonString.substring(index,index+8)==="Infinity"||options_1.Allow.INFINITY&allow&&length-index<8&&"Infinity".startsWith(jsonString.substring(index))?(index+=8,1/0):jsonString.substring(index,index+9)==="-Infinity"||options_1.Allow._INFINITY&allow&&1<length-index&&length-index<9&&"-Infinity".startsWith(jsonString.substring(index))?(index+=9,-1/0):jsonString.substring(index,index+3)==="NaN"||options_1.Allow.NAN&allow&&length-index<3&&"NaN".startsWith(jsonString.substring(index))?(index+=3,NaN):parseNum()),parseStr=()=>{let start=index,escape=!1;for(index++;index<length&&(jsonString[index]!=='"'||escape&&jsonString[index-1]==="\\");)escape=jsonString[index]==="\\"?!escape:!1,index++;if(jsonString.charAt(index)=='"')try{return JSON.parse(jsonString.substring(start,++index-Number(escape)))}catch(e){throwMalformedError(String(e))}else if(options_1.Allow.STR&allow)try{return JSON.parse(jsonString.substring(start,index-Number(escape))+'"')}catch{return JSON.parse(jsonString.substring(start,jsonString.lastIndexOf("\\"))+'"')}markPartialJSON("Unterminated string literal")},parseObj=()=>{index++,skipBlank();let obj={};try{for(;jsonString[index]!=="}";){if(skipBlank(),index>=length&&options_1.Allow.OBJ&allow)return obj;let key=parseStr();skipBlank(),index++;try{let value=parseAny();obj[key]=value}catch(e){if(options_1.Allow.OBJ&allow)return obj;throw e}skipBlank(),jsonString[index]===","&&index++}}catch{if(options_1.Allow.OBJ&allow)return obj;markPartialJSON("Expected '}' at end of object")}return index++,obj},parseArr=()=>{index++;let arr=[];try{for(;jsonString[index]!=="]";)arr.push(parseAny()),skipBlank(),jsonString[index]===","&&index++}catch{if(options_1.Allow.ARR&allow)return arr;markPartialJSON("Expected ']' at end of array")}return index++,arr},parseNum=()=>{if(index===0){jsonString==="-"&&throwMalformedError("Not sure what '-' is");try{return JSON.parse(jsonString)}catch(e){if(options_1.Allow.NUM&allow)try{return JSON.parse(jsonString.substring(0,jsonString.lastIndexOf("e")))}catch{}throwMalformedError(String(e))}}let start=index;for(jsonString[index]==="-"&&index++;jsonString[index]&&",]}".indexOf(jsonString[index])===-1;)index++;index==length&&!(options_1.Allow.NUM&allow)&&markPartialJSON("Unterminated number literal");try{return JSON.parse(jsonString.substring(start,index))}catch{jsonString.substring(start,index)==="-"&&markPartialJSON("Not sure what '-' is");try{return JSON.parse(jsonString.substring(start,jsonString.lastIndexOf("e")))}catch(e2){throwMalformedError(String(e2))}}},skipBlank=()=>{for(;index<length&&` \r `.includes(jsonString[index]);)index++};return parseAny()},parse=parseJSON;exports.parse=parse}});var import_partial_json=__toESM(require_dist(),1),VALID_JSON_ESCAPES=new Set(['"',"\\","/","b","f","n","r","t"]);function isControlCharacter(char){let codePoint=char.codePointAt(0);return codePoint!==void 0&&codePoint>=0&&codePoint<=31}function escapeControlCharacter(char){switch(char){case"\b":return"\\b";case"\f":return"\\f";case` `:return"\\n";case"\r":return"\\r";case" ":return"\\t";default:return`\\u${char.codePointAt(0)?.toString(16).padStart(4,"0")??"0000"}`}}function repairJson(json){let repaired="",inString=!1;for(let index=0;index<json.length;index++){let char=json[index];if(!inString){repaired+=char,char==='"'&&(inString=!0);continue}if(char==='"'){repaired+=char,inString=!1;continue}if(char==="\\"){let nextChar=json[index+1];if(nextChar===void 0){repaired+="\\\\";continue}if(nextChar==="u"){let unicodeDigits=json.slice(index+2,index+6);if(/^[0-9a-fA-F]{4}$/.test(unicodeDigits)){repaired+=`\\u${unicodeDigits}`,index+=5;continue}}if(VALID_JSON_ESCAPES.has(nextChar)){repaired+=`\\${nextChar}`,index+=1;continue}repaired+="\\\\";continue}repaired+=isControlCharacter(char)?escapeControlCharacter(char):char}return repaired}function parseJsonWithRepair(json){try{return JSON.parse(json)}catch(error){let repairedJson=repairJson(json);if(repairedJson!==json)return JSON.parse(repairedJson);throw error}}function parseToolCallArguments(json){if(!json?.trim())return{arguments:{}};try{let parsed=parseJsonWithRepair(json);if(typeof parsed!="object"||parsed===null||Array.isArray(parsed))throw new Error("Tool arguments must be a JSON object");return{arguments:parsed}}catch(error){return{arguments:{},argumentsError:`${error instanceof Error?error.message:String(error)} Received arguments: ${json}`}}}function parseStreamingJson(partialJson){if(!partialJson||partialJson.trim()==="")return{};try{return parseJsonWithRepair(partialJson)}catch{try{return(0,import_partial_json.parse)(partialJson)??{}}catch{try{return(0,import_partial_json.parse)(repairJson(partialJson))??{}}catch{return{}}}}}var MAX_REPORTED_DEPTH=32,ROOT_SLOT={kind:"root"},CREDIT_PER_APPEND=256,CREDIT_PER_CHARACTER=8,MAX_PENDING_SCALAR_LENGTH=64,NUMBER=/^-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?$/,NUMBER_WITHOUT_EXPONENT_DIGITS=/^(-?(?:0|[1-9]\d*)(?:\.\d+)?)[eE][+-]?$/,LITERALS=[["true",!0],["false",!1],["null",null]],QUOTE=34,BACKSLASH=92,StreamingJsonParser=class{#root=void 0;#done=!1;#stack=[];#string=void 0;#scalar="";#scalarSlot=void 0;#pathCost=0;#credit=0;#dirty=!1;#snapshot=void 0;#changes=[];append(text){this.#credit+=CREDIT_PER_APPEND+CREDIT_PER_CHARACTER*text.length,this.#changes=[],this.#string!==void 0&&(this.#string.change=void 0);let index=0;for(;index<text.length&&!this.#done;){let open=this.#string;open!==void 0?index=this.#readString(open,text,index):this.#scalar!==""?index=this.#readScalar(text,index):this.#structural(text[index++])}return this.#changes}snapshot(){if(!this.#dirty)return this.#snapshot;let pending=this.#pendingScalar(),cost=this.#pathCost+(pending===void 0?0:1);return cost>this.#credit?this.#snapshot:(this.#credit-=cost,this.#dirty=!1,this.#snapshot=this.#copyOpenPath(pending),this.#snapshot)}#readString(open,text,start){let runStart=start;for(let index=start;index<text.length;index++){let code=text.charCodeAt(index);if(open.escape!==""){if(this.#continueEscape(open,text[index])){runStart=index+1;continue}runStart=index}if(code===QUOTE)return index>runStart&&this.#appendString(open,text.slice(runStart,index)),this.#endString(open),index+1;code===BACKSLASH&&(index>runStart&&this.#appendString(open,text.slice(runStart,index)),open.escape="\\",runStart=index+1)}return text.length>runStart&&this.#appendString(open,text.slice(runStart)),text.length}#readScalar(text,start){let end=start;for(;end<text.length&&!isDelimiter(text[end]);)end++;return end>start&&(this.#scalar+=text.slice(start,end),this.#scalarSlot!==void 0&&(this.#dirty=!0)),end<text.length&&this.#endScalar(),end}#structural(char){switch(char){case" ":case" ":case` `:case"\r":return;case'"':this.#startString();return;case"{":case"[":this.#openContainer(char==="{"?{}:[]);return;case"}":case"]":this.#closeContainer();return;case":":{let frame=this.#stack.at(-1);frame!==void 0&&!Array.isArray(frame.container)&&frame.phase==="colon"&&(frame.phase="value");return}case",":{let frame=this.#stack.at(-1);frame!==void 0&&(frame.phase=Array.isArray(frame.container)?"value":"key");return}default:this.#scalar=char,this.#scalarSlot=this.#valueSlot(),this.#scalarSlot!==void 0&&(this.#dirty=!0)}}#valueSlot(){let frame=this.#stack.at(-1);if(frame===void 0)return this.#root===void 0?ROOT_SLOT:void 0;if(Array.isArray(frame.container))return{kind:"element",index:frame.container.length};if((frame.phase==="value"||frame.phase==="colon")&&frame.key!==void 0)return{kind:"member",key:frame.key}}#startString(){let frame=this.#stack.at(-1);if(frame!==void 0&&!Array.isArray(frame.container)&&(frame.phase==="key"||frame.phase==="comma")){this.#string={target:"key",slot:void 0,text:"",escape:"",path:void 0,change:void 0};return}let slot=this.#valueSlot(),path=this.#reportedPath(slot);this.#string={target:"value",slot,text:"",escape:"",path,change:void 0},this.#place(slot,""),path!==void 0&&(this.#string.change=this.#report({kind:"set",path,value:""}))}#reportedPath(slot){if(slot===void 0)return;if(slot.kind==="root")return[];let frame=this.#stack.at(-1);if(frame.reportsInside)return[...frame.path,slot.kind==="member"?slot.key:slot.index]}#report(change){return this.#changes.push(change),change}#continueEscape(open,char){if(open.escape==="\\"){let decoded=SIMPLE_ESCAPES[char];return decoded!==void 0?(open.escape="",this.#appendString(open,decoded),!0):char==="u"?(open.escape="\\u",!0):(open.escape="",this.#appendString(open,"\\"),!1)}if(isHexDigit(char)){if(open.escape+=char,open.escape.length<6)return!0;let decoded=String.fromCharCode(Number.parseInt(open.escape.slice(2),16));return open.escape="",this.#appendString(open,decoded),!0}let literal=open.escape;return open.escape="",this.#appendString(open,literal),!1}#appendString(open,text){if(open.text+=text,open.target!=="value"||(this.#place(open.slot,open.text),open.path===void 0))return;let change=open.change;if(change!==void 0&&this.#changes.at(-1)===change){change.kind==="set"?change.value=change.value+text:change.text+=text;return}open.change=this.#report({kind:"append",path:open.path,text})}#endString(open){this.#string=void 0;let frame=this.#stack.at(-1);if(open.target==="key"){if(frame===void 0)return;frame.key=open.text,frame.phase="colon";return}this.#valueEnded(frame)}#endScalar(){let token=this.#scalar,slot=this.#scalarSlot;this.#scalar="",this.#scalarSlot=void 0;let value=scalarValue(token);if(value!==void 0){this.#place(slot,value);let path=this.#reportedPath(slot);path!==void 0&&this.#report({kind:"set",path,value})}this.#valueEnded(this.#stack.at(-1))}#pendingScalar(){let slot=this.#scalarSlot,token=this.#scalar;if(slot===void 0||token===""||token.length>MAX_PENDING_SCALAR_LENGTH)return;let value=pendingScalarValue(token);return value===void 0?void 0:{slot,value}}#openContainer(container){let slot=this.#valueSlot(),path=this.#reportedPath(slot);this.#place(slot,container),this.#stack.push({container,slot,path,reportsInside:path!==void 0&&path.length<MAX_REPORTED_DEPTH,size:0,key:void 0,phase:Array.isArray(container)?"value":"key"}),this.#pathCost+=1,this.#dirty=!0,path!==void 0&&this.#report({kind:"set",path,value:Array.isArray(container)?[]:{}})}#closeContainer(){let frame=this.#stack.pop();frame!==void 0&&(this.#pathCost-=frame.size+1,this.#dirty=!0,frame.path!==void 0&&!frame.reportsInside&&this.#report({kind:"set",path:frame.path,value:frame.container}),this.#valueEnded(this.#stack.at(-1)))}#valueEnded(frame){if(frame===void 0){this.#root!==void 0&&(this.#done=!0);return}frame.phase="comma"}#place(slot,value){if(slot===void 0)return;if(this.#dirty=!0,slot.kind==="root"){this.#root=value;return}let frame=this.#stack.at(-1);if(slot.kind==="element"){let elements=frame.container;slot.index===elements.length&&(frame.size++,this.#pathCost++),elements[slot.index]=value;return}let members=frame.container;Object.hasOwn(members,slot.key)||(frame.size++,this.#pathCost++),setMember(members,slot.key,value)}#copyOpenPath(pending){if(this.#stack.length===0)return pending?.slot.kind==="root"?pending.value:this.#root;let child,childSlot;for(let depth=this.#stack.length-1;depth>=0;depth--){let frame=this.#stack[depth],copy=Array.isArray(frame.container)?frame.container.slice():{...frame.container};depth===this.#stack.length-1&&pending!==void 0&&setSlot(copy,pending.slot,pending.value),child!==void 0&&childSlot!==void 0&&setSlot(copy,childSlot,child),child=copy,childSlot=frame.slot}return childSlot?.kind==="root"?child:this.#root}},ToolCallArgumentsStream=class{#text="";#parser=new StreamingJsonParser;#snapshot=void 0;#arguments={};get text(){return this.#text}append(delta){return this.#text+=delta,this.#parser.append(delta),this.#partial()}replace(text){if(text.startsWith(this.#text)){let delta=text.slice(this.#text.length);return{delta,arguments:delta===""?this.#partial():this.append(delta)}}return this.#text="",this.#parser=new StreamingJsonParser,{delta:void 0,arguments:this.append(text)}}finish(){return parseToolCallArguments(this.#text)}#partial(){let snapshot=this.#parser.snapshot();return snapshot===this.#snapshot?this.#arguments:(this.#snapshot=snapshot,this.#arguments=typeof snapshot=="object"&&snapshot!==null&&!Array.isArray(snapshot)?snapshot:{},this.#arguments)}},SIMPLE_ESCAPES={'"':'"',"\\":"\\","/":"/",b:"\b",f:"\f",n:` `,r:"\r",t:" "};function isDelimiter(char){return char===" "||char===" "||char===` `||char==="\r"||char===","||char===":"||char==="{"||char==="}"||char==="["||char==="]"||char==='"'}function isHexDigit(char){return char>="0"&&char<="9"||char>="a"&&char<="f"||char>="A"&&char<="F"}function scalarValue(token){for(let[literal,value]of LITERALS)if(token===literal)return value;return NUMBER.test(token)?Number(token):void 0}function pendingScalarValue(token){for(let[literal,value]of LITERALS)if(literal.startsWith(token))return value;if(NUMBER.test(token))return Number(token);let mantissa=NUMBER_WITHOUT_EXPONENT_DIGITS.exec(token);return mantissa===null?void 0:Number(mantissa[1])}function setSlot(container,slot,value){slot.kind==="element"?container[slot.index]=value:slot.kind==="member"&&setMember(container,slot.key,value)}function setMember(members,key,value){key==="__proto__"?Object.defineProperty(members,key,{value,writable:!0,enumerable:!0,configurable:!0}):members[key]=value}export{repairJson,parseJsonWithRepair,parseToolCallArguments,parseStreamingJson,StreamingJsonParser,ToolCallArgumentsStream};