@averyyy/pi-coding-agent 0.85.1-piclient.6 → 0.85.1-piclient.7
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.
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url);
|
|
2
2
|
import*as zlib from"node:zlib";function encodeVarint(value){let bytes2=[],v=BigInt(value);if(v<0n)throw new RangeError(`encodeVarint: negative input (${value})`);for(;v>127n;)bytes2.push(Number(v&0x7fn)|128),v>>=7n;return bytes2.push(Number(v)),Buffer.from(bytes2)}function encodeTag(fieldNum,wire){return encodeVarint(fieldNum<<3|wire)}function encodeString(fieldNum,s){let buf=Buffer.from(s,"utf8");return Buffer.concat([encodeTag(fieldNum,2),encodeVarint(buf.length),buf])}function encodeMessage(fieldNum,body){return Buffer.concat([encodeTag(fieldNum,2),encodeVarint(body.length),body])}function encodeVarintField(fieldNum,v){return Buffer.concat([encodeTag(fieldNum,0),encodeVarint(v)])}function encodeFixed64Field(fieldNum,v){let b=Buffer.alloc(8);return b.writeDoubleLE(v,0),Buffer.concat([encodeTag(fieldNum,1),b])}function encodeTimestampBody(){let now=Date.now(),seconds=Math.floor(now/1e3),nanos=now%1e3*1e6;return Buffer.concat([encodeVarintField(1,seconds),nanos>0?encodeVarintField(2,nanos):Buffer.alloc(0)])}function decodeVarint(buf,offset){let res=0n,shift=0n,i=offset;for(;i<buf.length;){let b=buf[i++];if(res|=BigInt(b&127)<<shift,!(b&128))return[res,i];if(shift+=7n,shift>=70n)throw new Error("Oversized protobuf varint")}throw new Error("truncated varint")}function*iterFields(buf){let i=0;for(;i<buf.length;){let[tagBig,next]=decodeVarint(buf,i);i=next;let tag=Number(tagBig),num=tag>>3;if(num<=0)throw new Error("Invalid protobuf field number");let wire=tag&7;if(wire===0){let[v,after]=decodeVarint(buf,i);i=after,yield{num,wire,value:v}}else if(wire===1){if(i+8>buf.length)throw new Error("Truncated protobuf fixed64");yield{num,wire,value:buf.subarray(i,i+8)},i+=8}else if(wire===2){let[n,after]=decodeVarint(buf,i);i=after;let len=Number(n);if(!Number.isSafeInteger(len)||len<0||i+len>buf.length)throw new Error("Truncated protobuf message");yield{num,wire,value:buf.subarray(i,i+len)},i+=len}else if(wire===5){if(i+4>buf.length)throw new Error("Truncated protobuf fixed32");yield{num,wire,value:buf.subarray(i,i+4)},i+=4}else throw new Error(`Unsupported protobuf wire type ${wire}`)}}function frameConnectStream(body,compress=!0){let payload=body,flags=0;compress&&(payload=zlib.gzipSync(body),flags|=1);let header=Buffer.alloc(5);return header[0]=flags,header.writeUInt32BE(payload.length,1),Buffer.concat([header,payload])}var DEVIN_BASE_URL="https://server.codeium.com";function buildMetadata(input){let name=input.discovery?"chisel":"devin-cli",version=input.discovery?"0.0.0-dev":"3000.6.2",token=input.apiKey.startsWith("devin-session-token$")?input.apiKey:`devin-session-token$${input.apiKey}`;return Buffer.concat([encodeString(1,name),encodeString(2,version),encodeString(3,token),encodeString(4,"en"),encodeString(5,process.platform==="win32"?"windows":process.platform),encodeString(7,version),encodeVarintField(9,input.requestId),encodeString(10,input.sessionId),encodeString(12,"chisel"),encodeMessage(16,encodeTimestampBody()),...input.userJwt?[encodeString(21,input.userJwt)]:[],encodeString(25,input.triggerId),encodeString(28,"chisel"),...[3,4,6,7,8].map(value=>encodeVarintField(30,value))])}function bytes(fields,number){let value=fields.find(field=>field.num===number)?.value;return Buffer.isBuffer(value)?value:Buffer.alloc(0)}function integer(fields,number){let value=fields.find(field=>field.num===number)?.value;return typeof value=="bigint"?Number(value):0}function decodeDevinCatalog(payload){let models=[],seen=new Set;for(let field of iterFields(payload)){if(field.num!==1||!Buffer.isBuffer(field.value))continue;let config=[...iterFields(field.value)];if(integer(config,4))continue;let info=[...iterFields(bytes(config,23))];if(integer(info,2)||integer(info,25)||[3,4,6].includes(integer(info,22)))continue;let id=bytes(config,22).toString("utf8"),contextWindow=integer(config,18),maxTokens=integer(info,13),features=[...iterFields(bytes(info,6))];if(!id||!contextWindow||!maxTokens||!features.length)throw new Error("Devin returned an incomplete model definition");if(seen.has(id))throw new Error(`Devin returned duplicate model ${id}`);seen.add(id);let thinkingLevelMap={off:null,minimal:null,low:null,medium:null,high:null,xhigh:null,max:null},family=[...iterFields(bytes(config,30))];for(let entry of family.filter(value=>value.num===2)){if(!Buffer.isBuffer(entry.value))continue;let parts=[...iterFields(entry.value)],key=bytes(parts,1).toString("utf8").toLowerCase();if(key!=="effort"&&key!=="reasoning effort")continue;let value=[...iterFields(bytes(parts,2))],label=bytes(value,2).toString("utf8").toLowerCase(),level=label==="none"||label==="no thinking"?"off":label;Object.hasOwn(thinkingLevelMap,level)&&(thinkingLevelMap[level]=id)}let cost={input:0,output:0,cacheRead:0,cacheWrite:0};for(let dimension of config.filter(value=>value.num===32)){if(!Buffer.isBuffer(dimension.value))continue;let values=[...iterFields(dimension.value)];if(![1,2].includes(integer(values,6)))continue;let label=bytes(values,1).toString("utf8"),rate=bytes(values,2);if(bytes(values,3).toString("utf8")!=="1M tokens"||rate.length!==4)throw new Error(`Unsupported Devin pricing dimension for ${id}`);let value=Math.round(rate.readFloatLE()*1e6)/1e6;if(!Number.isFinite(value)||value<0)throw new Error("Invalid Devin model price");label==="Input"?cost.input=value:label==="Output"?cost.output=value:label==="Cached input"&&(cost.cacheRead=value)}models.push({id,name:bytes(config,1).toString("utf8"),provider:"devin",api:"devin",baseUrl:DEVIN_BASE_URL,reasoning:!!integer(features,15),thinkingLevelMap,input:integer(features,11)?["text","image"]:["text"],contextWindow,maxTokens,cost})}if(!models.length)throw new Error("Devin returned no usable models; check the account and protocol version");return models.sort((a,b)=>a.id.localeCompare(b.id))}async function discoverDevinModels(apiKey,signal){let response=await fetch(`${DEVIN_BASE_URL}/exa.api_server_pb.ApiServerService/GetCliModelConfigs`,{method:"POST",headers:{"content-type":"application/proto","connect-protocol-version":"1"},body:new Uint8Array(encodeMessage(1,buildMetadata({apiKey,discovery:!0,sessionId:crypto.randomUUID(),requestId:BigInt(Date.now()),triggerId:crypto.randomUUID()}))),signal:AbortSignal.any([signal,AbortSignal.timeout(3e4)])});if(!response.ok)throw new Error(`Devin model discovery failed (HTTP ${response.status})`);return decodeDevinCatalog(Buffer.from(await response.arrayBuffer()))}import{randomUUID}from"node:crypto";import*as zlib2 from"node:zlib";var EventStream=class{queue=[];waiting=[];done=!1;finalResultPromise;resolveFinalResult;isComplete;extractResult;constructor(isComplete,extractResult){this.isComplete=isComplete,this.extractResult=extractResult,this.finalResultPromise=new Promise(resolve=>{this.resolveFinalResult=resolve})}push(event){if(this.done)return;this.isComplete(event)&&(this.done=!0,this.resolveFinalResult(this.extractResult(event)));let waiter=this.waiting.shift();waiter?waiter({value:event,done:!1}):this.queue.push(event)}end(result){for(this.done=!0,result!==void 0&&this.resolveFinalResult(result);this.waiting.length>0;)this.waiting.shift()({value:void 0,done:!0})}async*[Symbol.asyncIterator](){for(;;)if(this.queue.length>0)yield this.queue.shift();else{if(this.done)return;{let result=await new Promise(resolve=>this.waiting.push(resolve));if(result.done)return;yield result.value}}}result(){return this.finalResultPromise}},AssistantMessageEventStream=class extends EventStream{constructor(){super(event=>event.type==="done"||event.type==="error",event=>{if(event.type==="done")return event.message;if(event.type==="error")return event.error;throw new Error("Unexpected event type for final result")})}};function createAssistantMessageEventStream(){return new AssistantMessageEventStream}function packThinkingSignature(signature,signatureType){return JSON.stringify({version:1,signature,signatureType})}function unpackThinkingSignature(value){if(!value)return{};let parsed=JSON.parse(value);if(!parsed||typeof parsed!="object"||!("version"in parsed)||parsed.version!==1||!("signature"in parsed)||typeof parsed.signature!="string")throw new Error("Invalid Devin thinking signature envelope");let signatureType="signatureType"in parsed?parsed.signatureType:void 0;if(signatureType!==void 0&&typeof signatureType!="string")throw new Error("Invalid Devin thinking signature type");return{signature:parsed.signature,signatureType}}function userContent(content){if(typeof content=="string")return content;if(!Array.isArray(content))return"";let parts=[];for(let part of content)!part||typeof part!="object"||(part.type==="text"&&parts.push({type:"text",text:part.text}),part.type==="image"&&parts.push({type:"image",mimeType:part.mimeType,base64Data:part.data}));return parts}function mapContextToChat(context,modelId){let messages=[];for(let message of context.messages){if(message.role==="user"){messages.push({role:"user",content:userContent(message.content)});continue}if(message.role==="assistant"){let texts=[],toolCalls=[],thinking;for(let part of message.content)if(part.type==="text"&&texts.push(part.text),part.type==="toolCall"&&toolCalls.push({id:part.id,name:part.name,arguments:JSON.stringify(part.arguments??{})}),part.type==="thinking"&&message.provider==="devin"&&message.api==="devin"&&(!modelId||message.model===modelId)){let decoded=unpackThinkingSignature(part.thinkingSignature);decoded.signature&&(thinking={text:part.thinking,signature:decoded.signature,signatureType:decoded.signatureType,redacted:part.redacted})}messages.push({role:"assistant",content:texts.join(`
|
|
3
3
|
`),tool_calls:toolCalls.length>0?toolCalls:void 0,thinking});continue}message.role==="toolResult"&&messages.push({role:"tool",content:userContent(message.content),tool_call_id:message.toolCallId})}let tools=(context.tools??[]).map(tool=>({name:tool.name,description:tool.description,parameters:tool.parameters}));return{systemPrompt:context.systemPrompt||void 0,messages,tools}}async function mintUserJwt(apiKey,host,signal,fetchImpl=fetch){let response=await fetchImpl(`${host}/exa.auth_pb.AuthService/GetUserJwt`,{method:"POST",headers:{"content-type":"application/proto","connect-protocol-version":"1"},body:new Uint8Array(encodeMessage(1,buildMetadata({apiKey,sessionId:crypto.randomUUID(),requestId:BigInt(Date.now()),triggerId:crypto.randomUUID()}))),signal});if(!response.ok)throw new Error(`Devin authentication failed (HTTP ${response.status}); run /login devin if the session was revoked`);for(let field of iterFields(Buffer.from(await response.arrayBuffer())))if(field.num===1&&Buffer.isBuffer(field.value)&&field.value.length)return field.value.toString("utf8");throw new Error("Devin authentication returned no user JWT")}var SOURCE_BY_ROLE={user:1,assistant:2,tool:4};function normalizeContent(content){return typeof content=="string"?[{type:"text",text:content}]:content}function encodeImageData(img){return Buffer.concat([encodeString(1,img.base64Data??""),encodeString(2,img.mimeType??"image/png")])}function encodeChatToolCall(tc){return Buffer.concat([encodeString(1,tc.id),encodeString(2,tc.name),encodeString(3,tc.arguments)])}function encodeChatMessagePrompt(content,source,opts){let text=content.filter(part=>part.type==="text").map(part=>part.text??"").join(`
|
|
4
|
-
`),parts=[encodeVarintField(2,source),encodeString(3,text),encodeVarintField(5,1)];opts?.toolCallId&&parts.push(encodeString(7,opts.toolCallId));for(let tc of opts?.toolCalls??[])parts.push(encodeMessage(6,encodeChatToolCall(tc)));for(let img of content.filter(part=>part.type==="image"))parts.push(encodeMessage(10,encodeImageData(img)));return opts?.thinking&&(parts.push(encodeString(11,opts.thinking.text)),parts.push(encodeString(12,opts.thinking.signature)),opts.thinking.redacted&&parts.push(encodeVarintField(13,1)),opts.thinking.signatureType&&parts.push(encodeString(18,opts.thinking.signatureType))),Buffer.concat(parts)}function encodeCompletionConfiguration(maxOutputTokens,temperature){return Buffer.concat([encodeVarintField(1,1),encodeVarintField(2,maxOutputTokens??128e3),encodeVarintField(3,400),encodeFixed64Field(5,temperature??1),encodeVarintField(7,40),encodeFixed64Field(8,.95)])}function encodeTrajectoryReference(trajectoryId){return Buffer.concat([encodeString(1,trajectoryId),encodeVarintField(3,4),encodeVarintField(4,14)])}function encodeToolDef(tool){let description=tool.description;return Buffer.concat([encodeString(1,tool.name),encodeString(2,description),encodeString(3,JSON.stringify(tool.parameters??{}))])}function buildGetChatMessageRequest(args){let metadata=buildMetadata({apiKey:args.apiKey,userJwt:args.userJwt,sessionId:args.sessionId,requestId:args.requestId,triggerId:args.triggerId}),prompts=args.messages.map(message=>encodeMessage(3,encodeChatMessagePrompt(normalizeContent(message.content),SOURCE_BY_ROLE[message.role],{toolCallId:message.role==="tool"?message.tool_call_id:void 0,toolCalls:message.role==="assistant"?message.tool_calls:void 0,thinking:message.role==="assistant"?message.thinking:void 0})));return Buffer.concat([encodeMessage(1,metadata),...args.systemPrompt?[encodeString(2,args.systemPrompt)]:[],...prompts,encodeVarintField(7,5),encodeMessage(8,encodeCompletionConfiguration(args.maxOutputTokens,args.temperature)),...(args.tools??[]).map(tool=>encodeMessage(10,encodeToolDef(tool))),encodeMessage(15,encodeTrajectoryReference(args.trajectoryId)),encodeString(16,args.cascadeId),encodeVarintField(20,1),encodeString(21,args.modelUid)])}function*decodeChatFrame(proto){let signature,signatureType;for(let field of iterFields(proto))if(field.num===3&&field.wire===2&&Buffer.isBuffer(field.value)){let text=field.value.toString("utf8");text&&(yield{kind:"text",text})}else if(field.num===9&&field.wire===2&&Buffer.isBuffer(field.value)){let text=field.value.toString("utf8");text&&(yield{kind:"reasoning",text})}else if(field.num===11&&field.wire===0)Number(field.value)!==0&&(yield{kind:"reasoning_redacted"});else if(field.num===10&&field.wire===2&&Buffer.isBuffer(field.value)){let text=field.value.toString("utf8");text&&(signature=text)}else if(field.num===21&&field.wire===2&&Buffer.isBuffer(field.value)){let text=field.value.toString("utf8");text&&(signatureType=text)}else if(field.num===6&&field.wire===2&&Buffer.isBuffer(field.value)){let id,name,argsDelta;for(let inner of iterFields(field.value))if(inner.wire===2&&Buffer.isBuffer(inner.value)){let text=inner.value.toString("utf8");inner.num===1?id=text:inner.num===2?name=text:inner.num===3&&(argsDelta=text)}id!==void 0&&name!==void 0&&(yield{kind:"tool_call_start",id,name}),argsDelta!==void 0&&(yield{kind:"tool_call_args",argsDelta,...id?{id}:{}})}else if(field.num===5&&field.wire===0){let value=Number(field.value),reason="stop";if(value===10)reason="tool_calls";else if(value===11)reason="content_filter";else if([1,3,5,9].includes(value))reason="length";else if(![0,2,4,6,8,12].includes(value))throw new Error(`Devin returned failure stop reason ${value}`);yield{kind:"finish",reason}}else if(field.num===28&&field.wire===2&&Buffer.isBuffer(field.value)){let usage=decodeUsage(field.value);usage&&(yield usage)}(signature!==void 0||signatureType!==void 0)&&(yield{kind:"reasoning_signature",signature:signature??"",signatureType})}function decodeUsage(buf){let promptTokens,completionTokens,cachedInputTokens,cacheCreationInputTokens;for(let field of iterFields(buf)){if(field.num!==2||field.wire!==2||!Buffer.isBuffer(field.value))continue;let metric,value;for(let inner of iterFields(field.value))if(inner.num===5&&inner.wire===2&&Buffer.isBuffer(inner.value))metric=inner.value.toString("utf8");else if(inner.num===4&&inner.wire===2&&Buffer.isBuffer(inner.value))for(let dim of iterFields(inner.value))dim.num===2&&dim.wire===5&&Buffer.isBuffer(dim.value)&&(value=dim.value.readFloatLE(0));if(!metric||value===void 0||!Number.isFinite(value))continue;let n=Math.round(value);metric==="input_tokens"?promptTokens=n:metric==="output_tokens"?completionTokens=n:metric==="cache_read_input_tokens"?cachedInputTokens=n:metric==="cache_creation_input_tokens"&&(cacheCreationInputTokens=n)}return promptTokens===void 0&&completionTokens===void 0?null:{kind:"usage",promptTokens,completionTokens,totalTokens:(promptTokens??0)+(completionTokens??0),cachedInputTokens,cacheCreationInputTokens}}async function*streamChatEvents(args){let host=args.host.replace(/\/$/,""),userJwt=await mintUserJwt(args.apiKey,host,args.signal,args.fetchImpl),sessionId=args.sessionId??randomUUID(),ids={sessionId,cascadeId:sessionId,trajectoryId:sessionId},proto=buildGetChatMessageRequest({apiKey:args.apiKey,userJwt,modelUid:args.modelUid,systemPrompt:args.systemPrompt,messages:args.messages,tools:args.tools,cascadeId:ids.cascadeId,trajectoryId:ids.trajectoryId,sessionId:ids.sessionId,requestId:BigInt(Date.now()),triggerId:randomUUID(),maxOutputTokens:args.maxOutputTokens,temperature:args.temperature}),resp=await args.fetchImpl(`${host}/exa.api_server_pb.ApiServerService/GetChatMessage`,{method:"POST",headers:{"Content-Type":"application/connect+proto","Connect-Protocol-Version":"1","Connect-Content-Encoding":"gzip","Connect-Accept-Encoding":"gzip"},body:new Uint8Array(frameConnectStream(proto,!0)),signal:args.signal});if(!resp.ok)throw new Error(`Devin GetChatMessage failed (HTTP ${resp.status})`);if(!resp.body)throw new Error("GetChatMessage returned an empty body");let reader=resp.body.getReader();reader.closed.catch(()=>{});let queue=[],queued=0,sawEos=!1,trailerError=null,peek=n=>{if(queued<n)return null;if(queue.length===1&&queue[0].length>=n)return queue[0].subarray(0,n);let parts=[],remaining=n;for(let chunk of queue){if(remaining<=0)break;chunk.length<=remaining?(parts.push(chunk),remaining-=chunk.length):(parts.push(chunk.subarray(0,remaining)),remaining=0)}return Buffer.concat(parts,n)},drop=n=>{queued-=n;let remaining=n;for(;remaining>0&&queue.length>0;){let head=queue[0];head.length<=remaining?(queue.shift(),remaining-=head.length):(queue[0]=head.subarray(remaining),remaining=0)}};try{for(;;){let{value,done}=await reader.read();if(done)break;for(value&&(queue.push(Buffer.from(value)),queued+=value.length);queued>=5;){let header=peek(5);if(!header)break;let flags=header[0],len=header.readUInt32BE(1);if(flags&-4)throw new Error("Invalid Devin Connect frame flags");if(len>16*1024*1024)throw new Error("Devin Connect frame exceeds 16 MiB");if(queued<5+len)break;drop(5);let raw=peek(len)??Buffer.alloc(0);drop(len);let payload=raw;if(flags&1&&(payload=zlib2.gunzipSync(raw,{maxOutputLength:16*1024*1024})),sawEos)throw new Error("Devin returned data after its EOS trailer");if(flags&2){sawEos=!0;let parsed=JSON.parse(payload.toString("utf8"));if(parsed.error){let detail=typeof parsed.error.message=="string"?parsed.error.message.replaceAll(args.apiKey,"[redacted]").replaceAll(userJwt,"[redacted]").slice(0,500):"";trailerError=`Devin stream failed (${parsed.error.code??"unknown"})${detail?`: ${detail}`:""}`}continue}yield*decodeChatFrame(payload)}}}finally{try{reader.releaseLock()}catch{}try{await resp.body?.cancel()}catch{}}if(trailerError)throw new Error(trailerError);if(queued)throw new Error("Truncated Devin Connect frame");if(!sawEos)throw new Error("Devin stream ended without an EOS trailer")}function streamDevin(model,context,options){let stream=createAssistantMessageEventStream();return(async()=>{let output={role:"assistant",content:[],api:model.api,provider:model.provider,model:model.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:"stop",timestamp:Date.now()},textOpen=!1,thinkingOpen=!1,thinkingIndex=-1,toolId="",toolStates=new Map,closeText=()=>{if(!textOpen)return;let idx=output.content.length-1,block=output.content[idx];block.type==="text"&&stream.push({type:"text_end",contentIndex:idx,content:block.text,partial:output}),textOpen=!1},closeThinking=()=>{if(!thinkingOpen)return;let idx=output.content.length-1,block=output.content[idx];block.type==="thinking"&&stream.push({type:"thinking_end",contentIndex:idx,content:block.thinking,partial:output}),thinkingOpen=!1},closeTool=()=>{for(let state of toolStates.values()){let block=output.content[state.index];if(block.type==="toolCall"){let parsed=JSON.parse(state.json);if(!parsed||typeof parsed!="object"||Array.isArray(parsed))throw new Error("Invalid Devin tool arguments");block.arguments=parsed,stream.push({type:"toolcall_end",contentIndex:state.index,toolCall:block,partial:output})}}toolStates.clear()};try{let apiKey=options?.apiKey;if(process.env.PI_SERVER_MODE==="true")throw new Error("Devin inference must use pi-server in PI_SERVER_MODE");if(!apiKey)throw new Error("No Devin credentials. Run /login devin.");let host=model.baseUrl.replace(/\/$/,"");if(options?.reasoning&&model.thinkingLevelMap&&model.thinkingLevelMap[options.reasoning]!==model.id)throw new Error("Select the Devin model variant for the requested reasoning effort");if(options?.onPayload)throw new Error("Devin does not support onPayload overrides");let modelUid=model.id,mapped=mapContextToChat(context,model.id);stream.push({type:"start",partial:output});for await(let event of streamChatEvents({apiKey,host,modelUid,systemPrompt:mapped.systemPrompt,messages:mapped.messages,tools:mapped.tools.length>0?mapped.tools:void 0,maxOutputTokens:options?.maxTokens??model.maxTokens,signal:options?.signal?AbortSignal.any([options.signal,AbortSignal.timeout(options.timeoutMs??6e5)]):AbortSignal.timeout(options?.timeoutMs??6e5),sessionId:options?.sessionId,fetchImpl:options?.fetch??fetch,temperature:options?.temperature}))if(event.kind==="text"){closeThinking(),textOpen||(output.content.push({type:"text",text:""}),stream.push({type:"text_start",contentIndex:output.content.length-1,partial:output}),textOpen=!0);let idx=output.content.length-1,block=output.content[idx];block.type==="text"&&(block.text+=event.text,stream.push({type:"text_delta",contentIndex:idx,delta:event.text,partial:output}))}else if(event.kind==="reasoning"){closeText(),thinkingOpen||(output.content.push({type:"thinking",thinking:""}),thinkingIndex=output.content.length-1,stream.push({type:"thinking_start",contentIndex:output.content.length-1,partial:output}),thinkingOpen=!0);let idx=output.content.length-1,block=output.content[idx];block.type==="thinking"&&(block.thinking+=event.text,stream.push({type:"thinking_delta",contentIndex:idx,delta:event.text,partial:output}))}else if(event.kind==="reasoning_signature"){thinkingIndex<0&&(closeText(),output.content.push({type:"thinking",thinking:""}),thinkingIndex=output.content.length-1,thinkingOpen=!0,stream.push({type:"thinking_start",contentIndex:thinkingIndex,partial:output}));let block=output.content[thinkingIndex];if(block?.type==="thinking"){let previous=unpackThinkingSignature(block.thinkingSignature);block.thinkingSignature=packThinkingSignature((previous.signature??"")+event.signature,event.signatureType??previous.signatureType)}}else if(event.kind==="reasoning_redacted"){thinkingIndex<0&&(closeText(),output.content.push({type:"thinking",thinking:""}),thinkingIndex=output.content.length-1,thinkingOpen=!0,stream.push({type:"thinking_start",contentIndex:thinkingIndex,partial:output}));let block=thinkingIndex>=0?output.content[thinkingIndex]:void 0;block?.type==="thinking"&&(block.redacted=!0)}else if(event.kind==="tool_call_start"){closeText(),closeThinking(),toolId=event.id;let existing=toolStates.get(toolId);if(existing){let block=output.content[existing.index];if(block.type!=="toolCall"||block.name!==event.name)throw new Error("Devin changed a tool call's name");continue}if(!toolId||!event.name)throw new Error("Devin returned an empty tool identity");output.content.push({type:"toolCall",id:event.id,name:event.name,arguments:{}});let toolIndex=output.content.length-1;toolStates.set(toolId,{index:toolIndex,json:""}),stream.push({type:"toolcall_start",contentIndex:toolIndex,partial:output})}else if(event.kind==="tool_call_args"){let state=toolStates.get(event.id??toolId);if(!state)throw new Error("Devin tool argument delta has no matching call");state.json+=event.argsDelta;let block=output.content[state.index];if(block.type==="toolCall")try{block.arguments=JSON.parse(state.json)}catch{}stream.push({type:"toolcall_delta",contentIndex:state.index,delta:event.argsDelta,partial:output})}else if(event.kind==="finish"){if(event.reason==="content_filter")throw new Error("Devin response was blocked by content filtering");closeText(),closeThinking(),output.stopReason=event.reason==="tool_calls"?"toolUse":event.reason==="length"?"length":"stop"}else event.kind==="usage"&&(output.usage.input=event.promptTokens??0,output.usage.output=event.completionTokens??0,output.usage.cacheRead=event.cachedInputTokens??0,output.usage.cacheWrite=event.cacheCreationInputTokens??0,output.usage.totalTokens=event.totalTokens??output.usage.input+output.usage.output);if(closeText(),closeThinking(),closeTool(),options?.signal?.throwIfAborted(),!output.content.length)throw new Error("Devin returned an empty completion");for(let key of["input","output","cacheRead","cacheWrite"])output.usage.cost[key]=output.usage[key]*model.cost[key]/1e6;output.usage.cost.total=output.usage.cost.input+output.usage.cost.output+output.usage.cost.cacheRead+output.usage.cost.cacheWrite,stream.push({type:"done",reason:output.stopReason,message:output}),stream.end()}catch(error){output.stopReason=options?.signal?.aborted?"aborted":"error",output.errorMessage=error instanceof Error?error.message:String(error),stream.push({type:"error",reason:output.stopReason,error:output}),stream.end()}})(),stream}export{discoverDevinModels,streamDevin as stream,streamDevin as streamSimple};
|
|
4
|
+
`),parts=[encodeVarintField(2,source),encodeString(3,text),encodeVarintField(5,1)];opts?.toolCallId&&parts.push(encodeString(7,opts.toolCallId));for(let tc of opts?.toolCalls??[])parts.push(encodeMessage(6,encodeChatToolCall(tc)));for(let img of content.filter(part=>part.type==="image"))parts.push(encodeMessage(10,encodeImageData(img)));return opts?.thinking&&(parts.push(encodeString(11,opts.thinking.text)),parts.push(encodeString(12,opts.thinking.signature)),opts.thinking.redacted&&parts.push(encodeVarintField(13,1)),opts.thinking.signatureType&&parts.push(encodeString(18,opts.thinking.signatureType))),Buffer.concat(parts)}function encodeCompletionConfiguration(maxOutputTokens,temperature){return Buffer.concat([encodeVarintField(1,1),encodeVarintField(2,maxOutputTokens??128e3),encodeVarintField(3,400),encodeFixed64Field(5,temperature??1),encodeVarintField(7,40),encodeFixed64Field(8,.95)])}function encodeTrajectoryReference(trajectoryId){return Buffer.concat([encodeString(1,trajectoryId),encodeVarintField(3,4),encodeVarintField(4,14)])}function encodeToolDef(tool){let description=tool.description;return Buffer.concat([encodeString(1,tool.name),encodeString(2,description),encodeString(3,JSON.stringify(tool.parameters??{}))])}function buildGetChatMessageRequest(args){let metadata=buildMetadata({apiKey:args.apiKey,userJwt:args.userJwt,sessionId:args.sessionId,requestId:args.requestId,triggerId:args.triggerId}),prompts=args.messages.map(message=>encodeMessage(3,encodeChatMessagePrompt(normalizeContent(message.content),SOURCE_BY_ROLE[message.role],{toolCallId:message.role==="tool"?message.tool_call_id:void 0,toolCalls:message.role==="assistant"?message.tool_calls:void 0,thinking:message.role==="assistant"?message.thinking:void 0})));return Buffer.concat([encodeMessage(1,metadata),...args.systemPrompt?[encodeString(2,args.systemPrompt)]:[],...prompts,encodeVarintField(7,5),encodeMessage(8,encodeCompletionConfiguration(args.maxOutputTokens,args.temperature)),...(args.tools??[]).map(tool=>encodeMessage(10,encodeToolDef(tool))),encodeMessage(15,encodeTrajectoryReference(args.trajectoryId)),encodeString(16,args.cascadeId),encodeVarintField(20,1),encodeString(21,args.modelUid)])}function*decodeChatFrame(proto){let signature,signatureType;for(let field of iterFields(proto))if(field.num===3&&field.wire===2&&Buffer.isBuffer(field.value)){let text=field.value.toString("utf8");text&&(yield{kind:"text",text})}else if(field.num===9&&field.wire===2&&Buffer.isBuffer(field.value)){let text=field.value.toString("utf8");text&&(yield{kind:"reasoning",text})}else if(field.num===11&&field.wire===0)Number(field.value)!==0&&(yield{kind:"reasoning_redacted"});else if(field.num===10&&field.wire===2&&Buffer.isBuffer(field.value)){let text=field.value.toString("utf8");text&&(signature=text)}else if(field.num===21&&field.wire===2&&Buffer.isBuffer(field.value)){let text=field.value.toString("utf8");text&&(signatureType=text)}else if(field.num===6&&field.wire===2&&Buffer.isBuffer(field.value)){let id,name,argsDelta;for(let inner of iterFields(field.value))if(inner.wire===2&&Buffer.isBuffer(inner.value)){let text=inner.value.toString("utf8");inner.num===1?id=text:inner.num===2?name=text:inner.num===3&&(argsDelta=text)}id!==void 0&&name!==void 0&&(yield{kind:"tool_call_start",id,name}),argsDelta!==void 0&&(yield{kind:"tool_call_args",argsDelta,...id?{id}:{}})}else if(field.num===5&&field.wire===0){let value=Number(field.value),reason="stop";if(value===10)reason="tool_calls";else if(value===11)reason="content_filter";else if([1,3,5,9].includes(value))reason="length";else if(![0,2,4,6,8,12].includes(value))throw new Error(`Devin returned failure stop reason ${value}`);yield{kind:"finish",reason}}else if(field.num===28&&field.wire===2&&Buffer.isBuffer(field.value)){let usage=decodeUsage(field.value);usage&&(yield usage)}(signature!==void 0||signatureType!==void 0)&&(yield{kind:"reasoning_signature",signature:signature??"",signatureType})}function decodeUsage(buf){let promptTokens,completionTokens,cachedInputTokens,cacheCreationInputTokens;for(let field of iterFields(buf)){if(field.num!==2||field.wire!==2||!Buffer.isBuffer(field.value))continue;let metric,value;for(let inner of iterFields(field.value))if(inner.num===5&&inner.wire===2&&Buffer.isBuffer(inner.value))metric=inner.value.toString("utf8");else if(inner.num===4&&inner.wire===2&&Buffer.isBuffer(inner.value))for(let dim of iterFields(inner.value))dim.num===2&&dim.wire===5&&Buffer.isBuffer(dim.value)&&(value=dim.value.readFloatLE(0));if(!metric||value===void 0||!Number.isFinite(value))continue;let n=Math.round(value);metric==="input_tokens"?promptTokens=n:metric==="output_tokens"?completionTokens=n:metric==="cache_read_input_tokens"?cachedInputTokens=n:metric==="cache_creation_input_tokens"&&(cacheCreationInputTokens=n)}return promptTokens===void 0&&completionTokens===void 0?null:{kind:"usage",promptTokens,completionTokens,totalTokens:(promptTokens??0)+(completionTokens??0)+(cachedInputTokens??0)+(cacheCreationInputTokens??0),cachedInputTokens,cacheCreationInputTokens}}async function*streamChatEvents(args){let host=args.host.replace(/\/$/,""),userJwt=await mintUserJwt(args.apiKey,host,args.signal,args.fetchImpl),sessionId=args.sessionId??randomUUID(),ids={sessionId,cascadeId:sessionId,trajectoryId:sessionId},proto=buildGetChatMessageRequest({apiKey:args.apiKey,userJwt,modelUid:args.modelUid,systemPrompt:args.systemPrompt,messages:args.messages,tools:args.tools,cascadeId:ids.cascadeId,trajectoryId:ids.trajectoryId,sessionId:ids.sessionId,requestId:BigInt(Date.now()),triggerId:randomUUID(),maxOutputTokens:args.maxOutputTokens,temperature:args.temperature}),resp=await args.fetchImpl(`${host}/exa.api_server_pb.ApiServerService/GetChatMessage`,{method:"POST",headers:{"Content-Type":"application/connect+proto","Connect-Protocol-Version":"1","Connect-Content-Encoding":"gzip","Connect-Accept-Encoding":"gzip"},body:new Uint8Array(frameConnectStream(proto,!0)),signal:args.signal});if(!resp.ok)throw new Error(`Devin GetChatMessage failed (HTTP ${resp.status})`);if(!resp.body)throw new Error("GetChatMessage returned an empty body");let reader=resp.body.getReader();reader.closed.catch(()=>{});let queue=[],queued=0,sawEos=!1,trailerError=null,peek=n=>{if(queued<n)return null;if(queue.length===1&&queue[0].length>=n)return queue[0].subarray(0,n);let parts=[],remaining=n;for(let chunk of queue){if(remaining<=0)break;chunk.length<=remaining?(parts.push(chunk),remaining-=chunk.length):(parts.push(chunk.subarray(0,remaining)),remaining=0)}return Buffer.concat(parts,n)},drop=n=>{queued-=n;let remaining=n;for(;remaining>0&&queue.length>0;){let head=queue[0];head.length<=remaining?(queue.shift(),remaining-=head.length):(queue[0]=head.subarray(remaining),remaining=0)}};try{for(;;){let{value,done}=await reader.read();if(done)break;for(value&&(queue.push(Buffer.from(value)),queued+=value.length);queued>=5;){let header=peek(5);if(!header)break;let flags=header[0],len=header.readUInt32BE(1);if(flags&-4)throw new Error("Invalid Devin Connect frame flags");if(len>16*1024*1024)throw new Error("Devin Connect frame exceeds 16 MiB");if(queued<5+len)break;drop(5);let raw=peek(len)??Buffer.alloc(0);drop(len);let payload=raw;if(flags&1&&(payload=zlib2.gunzipSync(raw,{maxOutputLength:16*1024*1024})),sawEos)throw new Error("Devin returned data after its EOS trailer");if(flags&2){sawEos=!0;let parsed=JSON.parse(payload.toString("utf8"));if(parsed.error){let detail=typeof parsed.error.message=="string"?parsed.error.message.replaceAll(args.apiKey,"[redacted]").replaceAll(userJwt,"[redacted]").slice(0,500):"";trailerError=`Devin stream failed (${parsed.error.code??"unknown"})${detail?`: ${detail}`:""}`}continue}yield*decodeChatFrame(payload)}}}finally{try{reader.releaseLock()}catch{}try{await resp.body?.cancel()}catch{}}if(trailerError)throw new Error(trailerError);if(queued)throw new Error("Truncated Devin Connect frame");if(!sawEos)throw new Error("Devin stream ended without an EOS trailer")}function streamDevin(model,context,options){let stream=createAssistantMessageEventStream();return(async()=>{let output={role:"assistant",content:[],api:model.api,provider:model.provider,model:model.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:"stop",timestamp:Date.now()},textOpen=!1,thinkingOpen=!1,thinkingIndex=-1,toolId="",toolStates=new Map,closeText=()=>{if(!textOpen)return;let idx=output.content.length-1,block=output.content[idx];block.type==="text"&&stream.push({type:"text_end",contentIndex:idx,content:block.text,partial:output}),textOpen=!1},closeThinking=()=>{if(!thinkingOpen)return;let idx=output.content.length-1,block=output.content[idx];block.type==="thinking"&&stream.push({type:"thinking_end",contentIndex:idx,content:block.thinking,partial:output}),thinkingOpen=!1},closeTool=()=>{for(let state of toolStates.values()){let block=output.content[state.index];if(block.type==="toolCall"){let parsed=JSON.parse(state.json);if(!parsed||typeof parsed!="object"||Array.isArray(parsed))throw new Error("Invalid Devin tool arguments");block.arguments=parsed,stream.push({type:"toolcall_end",contentIndex:state.index,toolCall:block,partial:output})}}toolStates.clear()};try{let apiKey=options?.apiKey;if(process.env.PI_SERVER_MODE==="true")throw new Error("Devin inference must use pi-server in PI_SERVER_MODE");if(!apiKey)throw new Error("No Devin credentials. Run /login devin.");let host=model.baseUrl.replace(/\/$/,"");if(options?.reasoning&&model.thinkingLevelMap&&model.thinkingLevelMap[options.reasoning]!==model.id)throw new Error("Select the Devin model variant for the requested reasoning effort");if(options?.onPayload)throw new Error("Devin does not support onPayload overrides");let modelUid=model.id,mapped=mapContextToChat(context,model.id);stream.push({type:"start",partial:output});for await(let event of streamChatEvents({apiKey,host,modelUid,systemPrompt:mapped.systemPrompt,messages:mapped.messages,tools:mapped.tools.length>0?mapped.tools:void 0,maxOutputTokens:options?.maxTokens??model.maxTokens,signal:options?.signal?AbortSignal.any([options.signal,AbortSignal.timeout(options.timeoutMs??6e5)]):AbortSignal.timeout(options?.timeoutMs??6e5),sessionId:options?.sessionId,fetchImpl:options?.fetch??fetch,temperature:options?.temperature}))if(event.kind==="text"){closeThinking(),textOpen||(output.content.push({type:"text",text:""}),stream.push({type:"text_start",contentIndex:output.content.length-1,partial:output}),textOpen=!0);let idx=output.content.length-1,block=output.content[idx];block.type==="text"&&(block.text+=event.text,stream.push({type:"text_delta",contentIndex:idx,delta:event.text,partial:output}))}else if(event.kind==="reasoning"){closeText(),thinkingOpen||(output.content.push({type:"thinking",thinking:""}),thinkingIndex=output.content.length-1,stream.push({type:"thinking_start",contentIndex:output.content.length-1,partial:output}),thinkingOpen=!0);let idx=output.content.length-1,block=output.content[idx];block.type==="thinking"&&(block.thinking+=event.text,stream.push({type:"thinking_delta",contentIndex:idx,delta:event.text,partial:output}))}else if(event.kind==="reasoning_signature"){thinkingIndex<0&&(closeText(),output.content.push({type:"thinking",thinking:""}),thinkingIndex=output.content.length-1,thinkingOpen=!0,stream.push({type:"thinking_start",contentIndex:thinkingIndex,partial:output}));let block=output.content[thinkingIndex];if(block?.type==="thinking"){let previous=unpackThinkingSignature(block.thinkingSignature);block.thinkingSignature=packThinkingSignature((previous.signature??"")+event.signature,event.signatureType??previous.signatureType)}}else if(event.kind==="reasoning_redacted"){thinkingIndex<0&&(closeText(),output.content.push({type:"thinking",thinking:""}),thinkingIndex=output.content.length-1,thinkingOpen=!0,stream.push({type:"thinking_start",contentIndex:thinkingIndex,partial:output}));let block=thinkingIndex>=0?output.content[thinkingIndex]:void 0;block?.type==="thinking"&&(block.redacted=!0)}else if(event.kind==="tool_call_start"){closeText(),closeThinking(),toolId=event.id;let existing=toolStates.get(toolId);if(existing){let block=output.content[existing.index];if(block.type!=="toolCall"||block.name!==event.name)throw new Error("Devin changed a tool call's name");continue}if(!toolId||!event.name)throw new Error("Devin returned an empty tool identity");output.content.push({type:"toolCall",id:event.id,name:event.name,arguments:{}});let toolIndex=output.content.length-1;toolStates.set(toolId,{index:toolIndex,json:""}),stream.push({type:"toolcall_start",contentIndex:toolIndex,partial:output})}else if(event.kind==="tool_call_args"){let state=toolStates.get(event.id??toolId);if(!state)throw new Error("Devin tool argument delta has no matching call");state.json+=event.argsDelta;let block=output.content[state.index];if(block.type==="toolCall")try{block.arguments=JSON.parse(state.json)}catch{}stream.push({type:"toolcall_delta",contentIndex:state.index,delta:event.argsDelta,partial:output})}else if(event.kind==="finish"){if(event.reason==="content_filter")throw new Error("Devin response was blocked by content filtering");closeText(),closeThinking(),output.stopReason=event.reason==="tool_calls"?"toolUse":event.reason==="length"?"length":"stop"}else event.kind==="usage"&&(output.usage.input=event.promptTokens??0,output.usage.output=event.completionTokens??0,output.usage.cacheRead=event.cachedInputTokens??0,output.usage.cacheWrite=event.cacheCreationInputTokens??0,output.usage.totalTokens=event.totalTokens??output.usage.input+output.usage.output+output.usage.cacheRead+output.usage.cacheWrite);if(closeText(),closeThinking(),closeTool(),options?.signal?.throwIfAborted(),!output.content.length)throw new Error("Devin returned an empty completion");for(let key of["input","output","cacheRead","cacheWrite"])output.usage.cost[key]=output.usage[key]*model.cost[key]/1e6;output.usage.cost.total=output.usage.cost.input+output.usage.cost.output+output.usage.cost.cacheRead+output.usage.cost.cacheWrite,stream.push({type:"done",reason:output.stopReason,message:output}),stream.end()}catch(error){output.stopReason=options?.signal?.aborted?"aborted":"error",output.errorMessage=error instanceof Error?error.message:String(error),stream.push({type:"error",reason:output.stopReason,error:output}),stream.end()}})(),stream}export{discoverDevinModels,streamDevin as stream,streamDevin as streamSimple};
|
package/dist/bundle/cli.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url);
|
|
3
|
-
import{APP_NAME,configureHttpDispatcher,main}from"./chunks/chunk-
|
|
3
|
+
import{APP_NAME,configureHttpDispatcher,main}from"./chunks/chunk-QRO6MMZB.js";import"./chunks/chunk-XDUWOHPL.js";import"./chunks/chunk-USJZMAIR.js";import"./chunks/chunk-DRQDKNXA.js";import"./chunks/chunk-TRDNDS6A.js";import"./chunks/chunk-IDDQWTHI.js";import"./chunks/chunk-UAQELI3K.js";import"./chunks/chunk-4L3WN2XY.js";function setupCli(){process.title=APP_NAME,process.env.PI_CODING_AGENT="true",process.env.AI_AGENT="pi",process.emitWarning=(()=>{}),configureHttpDispatcher()}setupCli();main(process.argv.slice(2));
|
package/dist/bundle/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url);
|
|
2
|
-
import{AgentSession,AgentSessionRuntime,ArminComponent,AssistantMessageComponent,BashExecutionComponent,BorderedLoader,BranchSummaryMessageComponent,CONFIG_DIR_NAME,CURRENT_SESSION_VERSION,CompactionSummaryMessageComponent,CredentialSynchronizationError,CustomEditor,CustomMessageComponent,DEFAULT_COMPACTION_SETTINGS,DEFAULT_MAX_BYTES,DEFAULT_MAX_LINES,DefaultPackageManager,DefaultResourceLoader,DynamicBorder,ExtensionEditorComponent,ExtensionInputComponent,ExtensionRunner,ExtensionSelectorComponent,FooterComponent,InteractiveMode,LoginDialogComponent,ModelRegistry,ModelRuntime,ModelSelectorComponent,OAuthSelectorComponent,ProjectTrustStore,RpcClient,SessionManager,SessionSelectorComponent,SettingsManager,SettingsSelectorComponent,ShowImagesSelectorComponent,SkillInvocationMessageComponent,Theme,ThemeSelectorComponent,ThinkingSelectorComponent,ToolExecutionComponent,TreeSelectorComponent,UserMessageComponent,UserMessageSelectorComponent,VERSION,buildContextEntries,buildSessionContext,calculateContextTokens,collectEntriesForBranchSummary,compact,convertToLlm,convertToPng,copyToClipboard,createAgentSession,createAgentSessionFromServices,createAgentSessionRuntime,createAgentSessionServices,createBashTool,createBashToolDefinition,createCodingToolDefinitions,createCodingTools,createEditTool,createEditToolDefinition,createEventBus,createExtensionRuntime,createFindTool,createFindToolDefinition,createGrepTool,createGrepToolDefinition,createLocalBashOperations,createLsTool,createLsToolDefinition,createReadOnlyToolDefinitions,createReadOnlyTools,createReadTool,createReadToolDefinition,createSyntheticSourceInfo,createWriteTool,createWriteToolDefinition,defineTool,detectSupportedImageMimeTypeFromFile,discoverAndLoadExtensions,estimateTokens,findCutPoint,findTurnStartIndex,formatDimensionNote,formatSize,formatSkillsForPrompt,generateBranchSummary,generateDiffString,generateSummary,generateSummaryWithUsage,generateUnifiedPatch,getAgentDir,getDocsPath,getExamplesPath,getLanguageFromPath,getLastAssistantUsage,getLatestCompactionEntry,getMarkdownTheme,getPackageDir,getReadmePath,getSelectListTheme,getSettingsListTheme,getShellConfig,hasTrustRequiringProjectResources,highlightCode,initTheme,isBashToolResult,isEditToolResult,isFindToolResult,isGrepToolResult,isLsToolResult,isReadToolResult,isToolCallEventType,isWriteToolResult,keyHint,keyText,loadProjectContextFiles,loadSkills,loadSkillsFromDir,main,migrateSessionEntries,parseArgs,parseFrontmatter,parseSessionEntries,parseSkillBlock,prepareBranchEntries,rawKeyHint,readStoredCredential,renderDiff,resizeImage,resolveCliModel,resolveModelScopeWithDiagnostics,runPrintMode,runRpcMode,serializeConversation,sessionEntryToContextMessages,shouldCompact,stripFrontmatter,truncateHead,truncateLine,truncateTail,truncateToVisualLines,withFileMutationQueue,wrapRegisteredTool,wrapRegisteredTools}from"./chunks/chunk-
|
|
2
|
+
import{AgentSession,AgentSessionRuntime,ArminComponent,AssistantMessageComponent,BashExecutionComponent,BorderedLoader,BranchSummaryMessageComponent,CONFIG_DIR_NAME,CURRENT_SESSION_VERSION,CompactionSummaryMessageComponent,CredentialSynchronizationError,CustomEditor,CustomMessageComponent,DEFAULT_COMPACTION_SETTINGS,DEFAULT_MAX_BYTES,DEFAULT_MAX_LINES,DefaultPackageManager,DefaultResourceLoader,DynamicBorder,ExtensionEditorComponent,ExtensionInputComponent,ExtensionRunner,ExtensionSelectorComponent,FooterComponent,InteractiveMode,LoginDialogComponent,ModelRegistry,ModelRuntime,ModelSelectorComponent,OAuthSelectorComponent,ProjectTrustStore,RpcClient,SessionManager,SessionSelectorComponent,SettingsManager,SettingsSelectorComponent,ShowImagesSelectorComponent,SkillInvocationMessageComponent,Theme,ThemeSelectorComponent,ThinkingSelectorComponent,ToolExecutionComponent,TreeSelectorComponent,UserMessageComponent,UserMessageSelectorComponent,VERSION,buildContextEntries,buildSessionContext,calculateContextTokens,collectEntriesForBranchSummary,compact,convertToLlm,convertToPng,copyToClipboard,createAgentSession,createAgentSessionFromServices,createAgentSessionRuntime,createAgentSessionServices,createBashTool,createBashToolDefinition,createCodingToolDefinitions,createCodingTools,createEditTool,createEditToolDefinition,createEventBus,createExtensionRuntime,createFindTool,createFindToolDefinition,createGrepTool,createGrepToolDefinition,createLocalBashOperations,createLsTool,createLsToolDefinition,createReadOnlyToolDefinitions,createReadOnlyTools,createReadTool,createReadToolDefinition,createSyntheticSourceInfo,createWriteTool,createWriteToolDefinition,defineTool,detectSupportedImageMimeTypeFromFile,discoverAndLoadExtensions,estimateTokens,findCutPoint,findTurnStartIndex,formatDimensionNote,formatSize,formatSkillsForPrompt,generateBranchSummary,generateDiffString,generateSummary,generateSummaryWithUsage,generateUnifiedPatch,getAgentDir,getDocsPath,getExamplesPath,getLanguageFromPath,getLastAssistantUsage,getLatestCompactionEntry,getMarkdownTheme,getPackageDir,getReadmePath,getSelectListTheme,getSettingsListTheme,getShellConfig,hasTrustRequiringProjectResources,highlightCode,initTheme,isBashToolResult,isEditToolResult,isFindToolResult,isGrepToolResult,isLsToolResult,isReadToolResult,isToolCallEventType,isWriteToolResult,keyHint,keyText,loadProjectContextFiles,loadSkills,loadSkillsFromDir,main,migrateSessionEntries,parseArgs,parseFrontmatter,parseSessionEntries,parseSkillBlock,prepareBranchEntries,rawKeyHint,readStoredCredential,renderDiff,resizeImage,resolveCliModel,resolveModelScopeWithDiagnostics,runPrintMode,runRpcMode,serializeConversation,sessionEntryToContextMessages,shouldCompact,stripFrontmatter,truncateHead,truncateLine,truncateTail,truncateToVisualLines,withFileMutationQueue,wrapRegisteredTool,wrapRegisteredTools}from"./chunks/chunk-QRO6MMZB.js";import"./chunks/chunk-XDUWOHPL.js";import"./chunks/chunk-USJZMAIR.js";import"./chunks/chunk-DRQDKNXA.js";import"./chunks/chunk-TRDNDS6A.js";import"./chunks/chunk-IDDQWTHI.js";import"./chunks/chunk-UAQELI3K.js";import"./chunks/chunk-4L3WN2XY.js";export{AgentSession,AgentSessionRuntime,ArminComponent,AssistantMessageComponent,BashExecutionComponent,BorderedLoader,BranchSummaryMessageComponent,CONFIG_DIR_NAME,CURRENT_SESSION_VERSION,CompactionSummaryMessageComponent,CredentialSynchronizationError,CustomEditor,CustomMessageComponent,DEFAULT_COMPACTION_SETTINGS,DEFAULT_MAX_BYTES,DEFAULT_MAX_LINES,DefaultPackageManager,DefaultResourceLoader,DynamicBorder,ExtensionEditorComponent,ExtensionInputComponent,ExtensionRunner,ExtensionSelectorComponent,FooterComponent,InteractiveMode,LoginDialogComponent,ModelRegistry,ModelRuntime,ModelSelectorComponent,OAuthSelectorComponent,ProjectTrustStore,RpcClient,SessionManager,SessionSelectorComponent,SettingsManager,SettingsSelectorComponent,ShowImagesSelectorComponent,SkillInvocationMessageComponent,Theme,ThemeSelectorComponent,ThinkingSelectorComponent,ToolExecutionComponent,TreeSelectorComponent,UserMessageComponent,UserMessageSelectorComponent,VERSION,buildContextEntries,buildSessionContext,calculateContextTokens,collectEntriesForBranchSummary,compact,convertToLlm,convertToPng,copyToClipboard,createAgentSession,createAgentSessionFromServices,createAgentSessionRuntime,createAgentSessionServices,createBashTool,createBashToolDefinition,createCodingToolDefinitions,createCodingTools,createEditTool,createEditToolDefinition,createEventBus,createExtensionRuntime,createFindTool,createFindToolDefinition,createGrepTool,createGrepToolDefinition,createLocalBashOperations,createLsTool,createLsToolDefinition,createReadOnlyToolDefinitions,createReadOnlyTools,createReadTool,createReadToolDefinition,createSyntheticSourceInfo,createWriteTool,createWriteToolDefinition,defineTool,detectSupportedImageMimeTypeFromFile,discoverAndLoadExtensions,estimateTokens,findCutPoint,findTurnStartIndex,formatDimensionNote,formatSize,formatSkillsForPrompt,generateBranchSummary,generateDiffString,generateSummary,generateSummaryWithUsage,generateUnifiedPatch,getAgentDir,getDocsPath,getExamplesPath,getLanguageFromPath,getLastAssistantUsage,getLatestCompactionEntry,getMarkdownTheme,getPackageDir,getReadmePath,getSelectListTheme,getSettingsListTheme,getShellConfig,hasTrustRequiringProjectResources,highlightCode,initTheme,isBashToolResult,isEditToolResult,isFindToolResult,isGrepToolResult,isLsToolResult,isReadToolResult,isToolCallEventType,isWriteToolResult,keyHint,keyText,loadProjectContextFiles,loadSkills,loadSkillsFromDir,main,migrateSessionEntries,parseArgs,parseFrontmatter,parseSessionEntries,parseSkillBlock,prepareBranchEntries,rawKeyHint,readStoredCredential,renderDiff,resizeImage,resolveCliModel,resolveModelScopeWithDiagnostics,runPrintMode,runRpcMode,serializeConversation,sessionEntryToContextMessages,shouldCompact,stripFrontmatter,truncateHead,truncateLine,truncateTail,truncateToVisualLines,withFileMutationQueue,wrapRegisteredTool,wrapRegisteredTools};
|
package/dist/bundle/rpc-entry.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url);
|
|
3
|
-
import{APP_NAME,configureHttpDispatcher,main}from"./chunks/chunk-
|
|
3
|
+
import{APP_NAME,configureHttpDispatcher,main}from"./chunks/chunk-QRO6MMZB.js";import"./chunks/chunk-XDUWOHPL.js";import"./chunks/chunk-USJZMAIR.js";import"./chunks/chunk-DRQDKNXA.js";import"./chunks/chunk-TRDNDS6A.js";import"./chunks/chunk-IDDQWTHI.js";import"./chunks/chunk-UAQELI3K.js";import"./chunks/chunk-4L3WN2XY.js";process.title=`${APP_NAME}-rpc`;process.env.PI_CODING_AGENT="true";process.env.AI_AGENT="pi";process.emitWarning=(()=>{});configureHttpDispatcher();main(["--mode","rpc",...process.argv.slice(2)]);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@averyyy/pi-coding-agent",
|
|
3
|
-
"version": "0.85.1-piclient.
|
|
3
|
+
"version": "0.85.1-piclient.7",
|
|
4
4
|
"description": "Coding agent CLI with read, bash, edit, write tools and session management",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"piConfig": {
|
|
@@ -57,9 +57,9 @@
|
|
|
57
57
|
},
|
|
58
58
|
"dependencies": {
|
|
59
59
|
"@earendil-works/chord": "^0.85.1",
|
|
60
|
-
"@earendil-works/pi-agent-core": "npm:@averyyy/pi-agent-core@0.85.1-piclient.
|
|
61
|
-
"@earendil-works/pi-ai": "npm:@averyyy/pi-ai@0.85.1-piclient.
|
|
62
|
-
"@earendil-works/pi-tui": "npm:@averyyy/pi-tui@0.85.1-piclient.
|
|
60
|
+
"@earendil-works/pi-agent-core": "npm:@averyyy/pi-agent-core@0.85.1-piclient.7",
|
|
61
|
+
"@earendil-works/pi-ai": "npm:@averyyy/pi-ai@0.85.1-piclient.7",
|
|
62
|
+
"@earendil-works/pi-tui": "npm:@averyyy/pi-tui@0.85.1-piclient.7",
|
|
63
63
|
"@silvia-odwyer/photon-node": "0.3.4",
|
|
64
64
|
"chalk": "5.6.2",
|
|
65
65
|
"cross-spawn": "7.0.6",
|