@spfunctions/cli 1.7.25 → 1.7.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/174.index.js +1 -1
- package/dist/582.index.js +1 -1
- package/package.json +1 -1
package/dist/174.index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
exports.id=174,exports.ids=[174],exports.modules={84005:e=>{function r(e){return Promise.resolve().then(()=>{var r=new Error("Cannot find module '"+e+"'");throw r.code="MODULE_NOT_FOUND",r})}r.keys=()=>[],r.resolve=r,r.id=84005,e.exports=r},70162:e=>{function r(e){return Promise.resolve().then(()=>{var r=new Error("Cannot find module '"+e+"'");throw r.code="MODULE_NOT_FOUND",r})}r.keys=()=>[],r.resolve=r,r.id=70162,e.exports=r}};
|
|
1
|
+
exports.id=174,exports.ids=[174],exports.modules={84005:e=>{function r(e){try{return Promise.resolve(require(e))}catch(r){return Promise.resolve().then(()=>{var r=new Error("Cannot find module '"+e+"'");throw r.code="MODULE_NOT_FOUND",r})}}r.keys=()=>[],r.resolve=r,r.id=84005,e.exports=r},70162:e=>{function r(e){try{return Promise.resolve(require(e))}catch(r){return Promise.resolve().then(()=>{var r=new Error("Cannot find module '"+e+"'");throw r.code="MODULE_NOT_FOUND",r})}}r.keys=()=>[],r.resolve=r,r.id=70162,e.exports=r}};
|
package/dist/582.index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
exports.id=582,exports.ids=[582,174],exports.modules={84005:e=>{function t(e){return Promise.resolve().then(()=>{var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t})}t.keys=()=>[],t.resolve=t,t.id=84005,e.exports=t},70162:e=>{function t(e){return Promise.resolve().then(()=>{var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t})}t.keys=()=>[],t.resolve=t,t.id=70162,e.exports=t},65653:(e,t,s)=>{"use strict";s.r(t),s.d(t,{Agent:()=>c,agentLoop:()=>o,agentLoopContinue:()=>r,streamProxy:()=>d});var n=s(99641);function o(e,t,s,n,o){const r=a();return(async()=>{const a=[...e],l={...t,messages:[...t.messages,...e]};r.push({type:"agent_start"}),r.push({type:"turn_start"});for(const t of e)r.push({type:"message_start",message:t}),r.push({type:"message_end",message:t});await i(l,a,s,n,r,o)})(),r}function r(e,t,s,n){if(0===e.messages.length)throw new Error("Cannot continue: no messages in context");if("assistant"===e.messages[e.messages.length-1].role)throw new Error("Cannot continue from message role: assistant");const o=a();return(async()=>{const r={...e};o.push({type:"agent_start"}),o.push({type:"turn_start"}),await i(r,[],t,s,o,n)})(),o}function a(){return new n.EventStream(e=>"agent_end"===e.type,e=>"agent_end"===e.type?e.messages:[])}async function i(e,t,s,n,o,r){let a=!0,i=await(s.getSteeringMessages?.())||[];for(;;){let u=!0,p=null;for(;u||i.length>0;){if(a?a=!1:o.push({type:"turn_start"}),i.length>0){for(const s of i)o.push({type:"message_start",message:s}),o.push({type:"message_end",message:s}),e.messages.push(s),t.push(s);i=[]}const c=await l(e,s,n,o,r);if(t.push(c),"error"===c.stopReason||"aborted"===c.stopReason)return o.push({type:"turn_end",message:c,toolResults:[]}),o.push({type:"agent_end",messages:t}),void o.end(t);u=c.content.filter(e=>"toolCall"===e.type).length>0;const h=[];if(u){const r=await g(e.tools,c,n,o,s.getSteeringMessages);h.push(...r.toolResults),p=r.steeringMessages??null;for(const s of h)e.messages.push(s),t.push(s)}o.push({type:"turn_end",message:c,toolResults:h}),p&&p.length>0?(i=p,p=null):i=await(s.getSteeringMessages?.())||[]}const c=await(s.getFollowUpMessages?.())||[];if(!(c.length>0))break;i=c}o.push({type:"agent_end",messages:t}),o.end(t)}async function l(e,t,s,o,r){let a=e.messages;t.transformContext&&(a=await t.transformContext(a,s));const i=await t.convertToLlm(a),l={systemPrompt:e.systemPrompt,messages:i,tools:e.tools},g=r||n.streamSimple,u=(t.getApiKey?await t.getApiKey(t.model.provider):void 0)||t.apiKey,p=await g(t.model,l,{...t,apiKey:u,signal:s});let c=null,h=!1;for await(const t of p)switch(t.type){case"start":c=t.partial,e.messages.push(c),h=!0,o.push({type:"message_start",message:{...c}});break;case"text_start":case"text_delta":case"text_end":case"thinking_start":case"thinking_delta":case"thinking_end":case"toolcall_start":case"toolcall_delta":case"toolcall_end":c&&(c=t.partial,e.messages[e.messages.length-1]=c,o.push({type:"message_update",assistantMessageEvent:t,message:{...c}}));break;case"done":case"error":{const t=await p.result();return h?e.messages[e.messages.length-1]=t:e.messages.push(t),h||o.push({type:"message_start",message:{...t}}),o.push({type:"message_end",message:t}),t}}return await p.result()}async function g(e,t,s,o,r){const a=t.content.filter(e=>"toolCall"===e.type),i=[];let l;for(let t=0;t<a.length;t++){const g=a[t],p=e?.find(e=>e.name===g.name);let c;o.push({type:"tool_execution_start",toolCallId:g.id,toolName:g.name,args:g.arguments});let h=!1;try{if(!p)throw new Error(`Tool ${g.name} not found`);const e=(0,n.validateToolArguments)(p,g);c=await p.execute(g.id,e,s,e=>{o.push({type:"tool_execution_update",toolCallId:g.id,toolName:g.name,args:g.arguments,partialResult:e})})}catch(e){c={content:[{type:"text",text:e instanceof Error?e.message:String(e)}],details:{}},h=!0}o.push({type:"tool_execution_end",toolCallId:g.id,toolName:g.name,result:c,isError:h});const d={role:"toolResult",toolCallId:g.id,toolName:g.name,content:c.content,details:c.details,isError:h,timestamp:Date.now()};if(i.push(d),o.push({type:"message_start",message:d}),o.push({type:"message_end",message:d}),r){const e=await r();if(e.length>0){l=e;const s=a.slice(t+1);for(const e of s)i.push(u(e,o));break}}}return{toolResults:i,steeringMessages:l}}function u(e,t){const s={content:[{type:"text",text:"Skipped due to queued user message."}],details:{}};t.push({type:"tool_execution_start",toolCallId:e.id,toolName:e.name,args:e.arguments}),t.push({type:"tool_execution_end",toolCallId:e.id,toolName:e.name,result:s,isError:!0});const n={role:"toolResult",toolCallId:e.id,toolName:e.name,content:s.content,details:{},isError:!0,timestamp:Date.now()};return t.push({type:"message_start",message:n}),t.push({type:"message_end",message:n}),n}function p(e){return e.filter(e=>"user"===e.role||"assistant"===e.role||"toolResult"===e.role)}class c{_state={systemPrompt:"",model:(0,n.getModel)("google","gemini-2.5-flash-lite-preview-06-17"),thinkingLevel:"off",tools:[],messages:[],isStreaming:!1,streamMessage:null,pendingToolCalls:new Set,error:void 0};listeners=new Set;abortController;convertToLlm;transformContext;steeringQueue=[];followUpQueue=[];steeringMode;followUpMode;streamFn;_sessionId;getApiKey;_onPayload;runningPrompt;resolveRunningPrompt;_thinkingBudgets;_transport;_maxRetryDelayMs;constructor(e={}){this._state={...this._state,...e.initialState},this.convertToLlm=e.convertToLlm||p,this.transformContext=e.transformContext,this.steeringMode=e.steeringMode||"one-at-a-time",this.followUpMode=e.followUpMode||"one-at-a-time",this.streamFn=e.streamFn||n.streamSimple,this._sessionId=e.sessionId,this.getApiKey=e.getApiKey,this._onPayload=e.onPayload,this._thinkingBudgets=e.thinkingBudgets,this._transport=e.transport??"sse",this._maxRetryDelayMs=e.maxRetryDelayMs}get sessionId(){return this._sessionId}set sessionId(e){this._sessionId=e}get thinkingBudgets(){return this._thinkingBudgets}set thinkingBudgets(e){this._thinkingBudgets=e}get transport(){return this._transport}setTransport(e){this._transport=e}get maxRetryDelayMs(){return this._maxRetryDelayMs}set maxRetryDelayMs(e){this._maxRetryDelayMs=e}get state(){return this._state}subscribe(e){return this.listeners.add(e),()=>this.listeners.delete(e)}setSystemPrompt(e){this._state.systemPrompt=e}setModel(e){this._state.model=e}setThinkingLevel(e){this._state.thinkingLevel=e}setSteeringMode(e){this.steeringMode=e}getSteeringMode(){return this.steeringMode}setFollowUpMode(e){this.followUpMode=e}getFollowUpMode(){return this.followUpMode}setTools(e){this._state.tools=e}replaceMessages(e){this._state.messages=e.slice()}appendMessage(e){this._state.messages=[...this._state.messages,e]}steer(e){this.steeringQueue.push(e)}followUp(e){this.followUpQueue.push(e)}clearSteeringQueue(){this.steeringQueue=[]}clearFollowUpQueue(){this.followUpQueue=[]}clearAllQueues(){this.steeringQueue=[],this.followUpQueue=[]}hasQueuedMessages(){return this.steeringQueue.length>0||this.followUpQueue.length>0}dequeueSteeringMessages(){if("one-at-a-time"===this.steeringMode){if(this.steeringQueue.length>0){const e=this.steeringQueue[0];return this.steeringQueue=this.steeringQueue.slice(1),[e]}return[]}const e=this.steeringQueue.slice();return this.steeringQueue=[],e}dequeueFollowUpMessages(){if("one-at-a-time"===this.followUpMode){if(this.followUpQueue.length>0){const e=this.followUpQueue[0];return this.followUpQueue=this.followUpQueue.slice(1),[e]}return[]}const e=this.followUpQueue.slice();return this.followUpQueue=[],e}clearMessages(){this._state.messages=[]}abort(){this.abortController?.abort()}waitForIdle(){return this.runningPrompt??Promise.resolve()}reset(){this._state.messages=[],this._state.isStreaming=!1,this._state.streamMessage=null,this._state.pendingToolCalls=new Set,this._state.error=void 0,this.steeringQueue=[],this.followUpQueue=[]}async prompt(e,t){if(this._state.isStreaming)throw new Error("Agent is already processing a prompt. Use steer() or followUp() to queue messages, or wait for completion.");if(!this._state.model)throw new Error("No model configured");let s;if(Array.isArray(e))s=e;else if("string"==typeof e){const n=[{type:"text",text:e}];t&&t.length>0&&n.push(...t),s=[{role:"user",content:n,timestamp:Date.now()}]}else s=[e];await this._runLoop(s)}async continue(){if(this._state.isStreaming)throw new Error("Agent is already processing. Wait for completion before continuing.");const e=this._state.messages;if(0===e.length)throw new Error("No messages to continue from");if("assistant"===e[e.length-1].role){const e=this.dequeueSteeringMessages();if(e.length>0)return void await this._runLoop(e,{skipInitialSteeringPoll:!0});const t=this.dequeueFollowUpMessages();if(t.length>0)return void await this._runLoop(t);throw new Error("Cannot continue from message role: assistant")}await this._runLoop(void 0)}async _runLoop(e,t){const s=this._state.model;if(!s)throw new Error("No model configured");this.runningPrompt=new Promise(e=>{this.resolveRunningPrompt=e}),this.abortController=new AbortController,this._state.isStreaming=!0,this._state.streamMessage=null,this._state.error=void 0;const n="off"===this._state.thinkingLevel?void 0:this._state.thinkingLevel,a={systemPrompt:this._state.systemPrompt,messages:this._state.messages.slice(),tools:this._state.tools};let i=!0===t?.skipInitialSteeringPoll;const l={model:s,reasoning:n,sessionId:this._sessionId,onPayload:this._onPayload,transport:this._transport,thinkingBudgets:this._thinkingBudgets,maxRetryDelayMs:this._maxRetryDelayMs,convertToLlm:this.convertToLlm,transformContext:this.transformContext,getApiKey:this.getApiKey,getSteeringMessages:async()=>i?(i=!1,[]):this.dequeueSteeringMessages(),getFollowUpMessages:async()=>this.dequeueFollowUpMessages()};let g=null;try{const t=e?o(e,a,l,this.abortController.signal,this.streamFn):r(a,l,this.abortController.signal,this.streamFn);for await(const e of t){switch(e.type){case"message_start":case"message_update":g=e.message,this._state.streamMessage=e.message;break;case"message_end":g=null,this._state.streamMessage=null,this.appendMessage(e.message);break;case"tool_execution_start":{const t=new Set(this._state.pendingToolCalls);t.add(e.toolCallId),this._state.pendingToolCalls=t;break}case"tool_execution_end":{const t=new Set(this._state.pendingToolCalls);t.delete(e.toolCallId),this._state.pendingToolCalls=t;break}case"turn_end":"assistant"===e.message.role&&e.message.errorMessage&&(this._state.error=e.message.errorMessage);break;case"agent_end":this._state.isStreaming=!1,this._state.streamMessage=null}this.emit(e)}if(g&&"assistant"===g.role&&g.content.length>0){if(!g.content.some(e=>"thinking"===e.type&&e.thinking.trim().length>0||"text"===e.type&&e.text.trim().length>0||"toolCall"===e.type&&e.name.trim().length>0)){if(this.abortController?.signal.aborted)throw new Error("Request was aborted")}else this.appendMessage(g)}}catch(e){const t={role:"assistant",content:[{type:"text",text:""}],api:s.api,provider:s.provider,model:s.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:this.abortController?.signal.aborted?"aborted":"error",errorMessage:e?.message||String(e),timestamp:Date.now()};this.appendMessage(t),this._state.error=e?.message||String(e),this.emit({type:"agent_end",messages:[t]})}finally{this._state.isStreaming=!1,this._state.streamMessage=null,this._state.pendingToolCalls=new Set,this.abortController=void 0,this.resolveRunningPrompt?.(),this.runningPrompt=void 0,this.resolveRunningPrompt=void 0}}emit(e){for(const t of this.listeners)t(e)}}class h extends n.EventStream{constructor(){super(e=>"done"===e.type||"error"===e.type,e=>{if("done"===e.type)return e.message;if("error"===e.type)return e.error;throw new Error("Unexpected event type")})}}function d(e,t,s){const n=new h;return(async()=>{const o={role:"assistant",stopReason:"stop",content:[],api:e.api,provider:e.provider,model:e.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},timestamp:Date.now()};let r;const a=()=>{r&&r.cancel("Request aborted by user").catch(()=>{})};s.signal&&s.signal.addEventListener("abort",a);try{const a=await fetch(`${s.proxyUrl}/api/stream`,{method:"POST",headers:{Authorization:`Bearer ${s.authToken}`,"Content-Type":"application/json"},body:JSON.stringify({model:e,context:t,options:{temperature:s.temperature,maxTokens:s.maxTokens,reasoning:s.reasoning}}),signal:s.signal});if(!a.ok){let e=`Proxy error: ${a.status} ${a.statusText}`;try{const t=await a.json();t.error&&(e=`Proxy error: ${t.error}`)}catch{}throw new Error(e)}r=a.body.getReader();const i=new TextDecoder;let l="";for(;;){const{done:e,value:t}=await r.read();if(e)break;if(s.signal?.aborted)throw new Error("Request aborted by user");l+=i.decode(t,{stream:!0});const a=l.split("\n");l=a.pop()||"";for(const e of a)if(e.startsWith("data: ")){const t=e.slice(6).trim();if(t){const e=m(JSON.parse(t),o);e&&n.push(e)}}}if(s.signal?.aborted)throw new Error("Request aborted by user");n.end()}catch(e){const t=e instanceof Error?e.message:String(e),r=s.signal?.aborted?"aborted":"error";o.stopReason=r,o.errorMessage=t,n.push({type:"error",reason:r,error:o}),n.end()}finally{s.signal&&s.signal.removeEventListener("abort",a)}})(),n}function m(e,t){switch(e.type){case"start":return{type:"start",partial:t};case"text_start":return t.content[e.contentIndex]={type:"text",text:""},{type:"text_start",contentIndex:e.contentIndex,partial:t};case"text_delta":{const s=t.content[e.contentIndex];if("text"===s?.type)return s.text+=e.delta,{type:"text_delta",contentIndex:e.contentIndex,delta:e.delta,partial:t};throw new Error("Received text_delta for non-text content")}case"text_end":{const s=t.content[e.contentIndex];if("text"===s?.type)return s.textSignature=e.contentSignature,{type:"text_end",contentIndex:e.contentIndex,content:s.text,partial:t};throw new Error("Received text_end for non-text content")}case"thinking_start":return t.content[e.contentIndex]={type:"thinking",thinking:""},{type:"thinking_start",contentIndex:e.contentIndex,partial:t};case"thinking_delta":{const s=t.content[e.contentIndex];if("thinking"===s?.type)return s.thinking+=e.delta,{type:"thinking_delta",contentIndex:e.contentIndex,delta:e.delta,partial:t};throw new Error("Received thinking_delta for non-thinking content")}case"thinking_end":{const s=t.content[e.contentIndex];if("thinking"===s?.type)return s.thinkingSignature=e.contentSignature,{type:"thinking_end",contentIndex:e.contentIndex,content:s.thinking,partial:t};throw new Error("Received thinking_end for non-thinking content")}case"toolcall_start":return t.content[e.contentIndex]={type:"toolCall",id:e.id,name:e.toolName,arguments:{},partialJson:""},{type:"toolcall_start",contentIndex:e.contentIndex,partial:t};case"toolcall_delta":{const s=t.content[e.contentIndex];if("toolCall"===s?.type)return s.partialJson+=e.delta,s.arguments=(0,n.parseStreamingJson)(s.partialJson)||{},t.content[e.contentIndex]={...s},{type:"toolcall_delta",contentIndex:e.contentIndex,delta:e.delta,partial:t};throw new Error("Received toolcall_delta for non-toolCall content")}case"toolcall_end":{const s=t.content[e.contentIndex];return"toolCall"===s?.type?(delete s.partialJson,{type:"toolcall_end",contentIndex:e.contentIndex,toolCall:s,partial:t}):void 0}case"done":return t.stopReason=e.reason,t.usage=e.usage,{type:"done",reason:e.reason,message:t};case"error":return t.stopReason=e.reason,t.errorMessage=e.errorMessage,t.usage=e.usage,{type:"error",reason:e.reason,error:t};default:return void console.warn(`Unhandled proxy event type: ${e.type}`)}}}};
|
|
1
|
+
exports.id=582,exports.ids=[582,174],exports.modules={84005:e=>{function t(e){try{return Promise.resolve(require(e))}catch(t){return Promise.resolve().then(()=>{var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t})}}t.keys=()=>[],t.resolve=t,t.id=84005,e.exports=t},70162:e=>{function t(e){try{return Promise.resolve(require(e))}catch(t){return Promise.resolve().then(()=>{var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t})}}t.keys=()=>[],t.resolve=t,t.id=70162,e.exports=t},65653:(e,t,s)=>{"use strict";s.r(t),s.d(t,{Agent:()=>p,agentLoop:()=>o,agentLoopContinue:()=>r,streamProxy:()=>d});var n=s(99641);function o(e,t,s,n,o){const r=a();return(async()=>{const a=[...e],l={...t,messages:[...t.messages,...e]};r.push({type:"agent_start"}),r.push({type:"turn_start"});for(const t of e)r.push({type:"message_start",message:t}),r.push({type:"message_end",message:t});await i(l,a,s,n,r,o)})(),r}function r(e,t,s,n){if(0===e.messages.length)throw new Error("Cannot continue: no messages in context");if("assistant"===e.messages[e.messages.length-1].role)throw new Error("Cannot continue from message role: assistant");const o=a();return(async()=>{const r={...e};o.push({type:"agent_start"}),o.push({type:"turn_start"}),await i(r,[],t,s,o,n)})(),o}function a(){return new n.EventStream(e=>"agent_end"===e.type,e=>"agent_end"===e.type?e.messages:[])}async function i(e,t,s,n,o,r){let a=!0,i=await(s.getSteeringMessages?.())||[];for(;;){let u=!0,c=null;for(;u||i.length>0;){if(a?a=!1:o.push({type:"turn_start"}),i.length>0){for(const s of i)o.push({type:"message_start",message:s}),o.push({type:"message_end",message:s}),e.messages.push(s),t.push(s);i=[]}const p=await l(e,s,n,o,r);if(t.push(p),"error"===p.stopReason||"aborted"===p.stopReason)return o.push({type:"turn_end",message:p,toolResults:[]}),o.push({type:"agent_end",messages:t}),void o.end(t);u=p.content.filter(e=>"toolCall"===e.type).length>0;const h=[];if(u){const r=await g(e.tools,p,n,o,s.getSteeringMessages);h.push(...r.toolResults),c=r.steeringMessages??null;for(const s of h)e.messages.push(s),t.push(s)}o.push({type:"turn_end",message:p,toolResults:h}),c&&c.length>0?(i=c,c=null):i=await(s.getSteeringMessages?.())||[]}const p=await(s.getFollowUpMessages?.())||[];if(!(p.length>0))break;i=p}o.push({type:"agent_end",messages:t}),o.end(t)}async function l(e,t,s,o,r){let a=e.messages;t.transformContext&&(a=await t.transformContext(a,s));const i=await t.convertToLlm(a),l={systemPrompt:e.systemPrompt,messages:i,tools:e.tools},g=r||n.streamSimple,u=(t.getApiKey?await t.getApiKey(t.model.provider):void 0)||t.apiKey,c=await g(t.model,l,{...t,apiKey:u,signal:s});let p=null,h=!1;for await(const t of c)switch(t.type){case"start":p=t.partial,e.messages.push(p),h=!0,o.push({type:"message_start",message:{...p}});break;case"text_start":case"text_delta":case"text_end":case"thinking_start":case"thinking_delta":case"thinking_end":case"toolcall_start":case"toolcall_delta":case"toolcall_end":p&&(p=t.partial,e.messages[e.messages.length-1]=p,o.push({type:"message_update",assistantMessageEvent:t,message:{...p}}));break;case"done":case"error":{const t=await c.result();return h?e.messages[e.messages.length-1]=t:e.messages.push(t),h||o.push({type:"message_start",message:{...t}}),o.push({type:"message_end",message:t}),t}}return await c.result()}async function g(e,t,s,o,r){const a=t.content.filter(e=>"toolCall"===e.type),i=[];let l;for(let t=0;t<a.length;t++){const g=a[t],c=e?.find(e=>e.name===g.name);let p;o.push({type:"tool_execution_start",toolCallId:g.id,toolName:g.name,args:g.arguments});let h=!1;try{if(!c)throw new Error(`Tool ${g.name} not found`);const e=(0,n.validateToolArguments)(c,g);p=await c.execute(g.id,e,s,e=>{o.push({type:"tool_execution_update",toolCallId:g.id,toolName:g.name,args:g.arguments,partialResult:e})})}catch(e){p={content:[{type:"text",text:e instanceof Error?e.message:String(e)}],details:{}},h=!0}o.push({type:"tool_execution_end",toolCallId:g.id,toolName:g.name,result:p,isError:h});const d={role:"toolResult",toolCallId:g.id,toolName:g.name,content:p.content,details:p.details,isError:h,timestamp:Date.now()};if(i.push(d),o.push({type:"message_start",message:d}),o.push({type:"message_end",message:d}),r){const e=await r();if(e.length>0){l=e;const s=a.slice(t+1);for(const e of s)i.push(u(e,o));break}}}return{toolResults:i,steeringMessages:l}}function u(e,t){const s={content:[{type:"text",text:"Skipped due to queued user message."}],details:{}};t.push({type:"tool_execution_start",toolCallId:e.id,toolName:e.name,args:e.arguments}),t.push({type:"tool_execution_end",toolCallId:e.id,toolName:e.name,result:s,isError:!0});const n={role:"toolResult",toolCallId:e.id,toolName:e.name,content:s.content,details:{},isError:!0,timestamp:Date.now()};return t.push({type:"message_start",message:n}),t.push({type:"message_end",message:n}),n}function c(e){return e.filter(e=>"user"===e.role||"assistant"===e.role||"toolResult"===e.role)}class p{_state={systemPrompt:"",model:(0,n.getModel)("google","gemini-2.5-flash-lite-preview-06-17"),thinkingLevel:"off",tools:[],messages:[],isStreaming:!1,streamMessage:null,pendingToolCalls:new Set,error:void 0};listeners=new Set;abortController;convertToLlm;transformContext;steeringQueue=[];followUpQueue=[];steeringMode;followUpMode;streamFn;_sessionId;getApiKey;_onPayload;runningPrompt;resolveRunningPrompt;_thinkingBudgets;_transport;_maxRetryDelayMs;constructor(e={}){this._state={...this._state,...e.initialState},this.convertToLlm=e.convertToLlm||c,this.transformContext=e.transformContext,this.steeringMode=e.steeringMode||"one-at-a-time",this.followUpMode=e.followUpMode||"one-at-a-time",this.streamFn=e.streamFn||n.streamSimple,this._sessionId=e.sessionId,this.getApiKey=e.getApiKey,this._onPayload=e.onPayload,this._thinkingBudgets=e.thinkingBudgets,this._transport=e.transport??"sse",this._maxRetryDelayMs=e.maxRetryDelayMs}get sessionId(){return this._sessionId}set sessionId(e){this._sessionId=e}get thinkingBudgets(){return this._thinkingBudgets}set thinkingBudgets(e){this._thinkingBudgets=e}get transport(){return this._transport}setTransport(e){this._transport=e}get maxRetryDelayMs(){return this._maxRetryDelayMs}set maxRetryDelayMs(e){this._maxRetryDelayMs=e}get state(){return this._state}subscribe(e){return this.listeners.add(e),()=>this.listeners.delete(e)}setSystemPrompt(e){this._state.systemPrompt=e}setModel(e){this._state.model=e}setThinkingLevel(e){this._state.thinkingLevel=e}setSteeringMode(e){this.steeringMode=e}getSteeringMode(){return this.steeringMode}setFollowUpMode(e){this.followUpMode=e}getFollowUpMode(){return this.followUpMode}setTools(e){this._state.tools=e}replaceMessages(e){this._state.messages=e.slice()}appendMessage(e){this._state.messages=[...this._state.messages,e]}steer(e){this.steeringQueue.push(e)}followUp(e){this.followUpQueue.push(e)}clearSteeringQueue(){this.steeringQueue=[]}clearFollowUpQueue(){this.followUpQueue=[]}clearAllQueues(){this.steeringQueue=[],this.followUpQueue=[]}hasQueuedMessages(){return this.steeringQueue.length>0||this.followUpQueue.length>0}dequeueSteeringMessages(){if("one-at-a-time"===this.steeringMode){if(this.steeringQueue.length>0){const e=this.steeringQueue[0];return this.steeringQueue=this.steeringQueue.slice(1),[e]}return[]}const e=this.steeringQueue.slice();return this.steeringQueue=[],e}dequeueFollowUpMessages(){if("one-at-a-time"===this.followUpMode){if(this.followUpQueue.length>0){const e=this.followUpQueue[0];return this.followUpQueue=this.followUpQueue.slice(1),[e]}return[]}const e=this.followUpQueue.slice();return this.followUpQueue=[],e}clearMessages(){this._state.messages=[]}abort(){this.abortController?.abort()}waitForIdle(){return this.runningPrompt??Promise.resolve()}reset(){this._state.messages=[],this._state.isStreaming=!1,this._state.streamMessage=null,this._state.pendingToolCalls=new Set,this._state.error=void 0,this.steeringQueue=[],this.followUpQueue=[]}async prompt(e,t){if(this._state.isStreaming)throw new Error("Agent is already processing a prompt. Use steer() or followUp() to queue messages, or wait for completion.");if(!this._state.model)throw new Error("No model configured");let s;if(Array.isArray(e))s=e;else if("string"==typeof e){const n=[{type:"text",text:e}];t&&t.length>0&&n.push(...t),s=[{role:"user",content:n,timestamp:Date.now()}]}else s=[e];await this._runLoop(s)}async continue(){if(this._state.isStreaming)throw new Error("Agent is already processing. Wait for completion before continuing.");const e=this._state.messages;if(0===e.length)throw new Error("No messages to continue from");if("assistant"===e[e.length-1].role){const e=this.dequeueSteeringMessages();if(e.length>0)return void await this._runLoop(e,{skipInitialSteeringPoll:!0});const t=this.dequeueFollowUpMessages();if(t.length>0)return void await this._runLoop(t);throw new Error("Cannot continue from message role: assistant")}await this._runLoop(void 0)}async _runLoop(e,t){const s=this._state.model;if(!s)throw new Error("No model configured");this.runningPrompt=new Promise(e=>{this.resolveRunningPrompt=e}),this.abortController=new AbortController,this._state.isStreaming=!0,this._state.streamMessage=null,this._state.error=void 0;const n="off"===this._state.thinkingLevel?void 0:this._state.thinkingLevel,a={systemPrompt:this._state.systemPrompt,messages:this._state.messages.slice(),tools:this._state.tools};let i=!0===t?.skipInitialSteeringPoll;const l={model:s,reasoning:n,sessionId:this._sessionId,onPayload:this._onPayload,transport:this._transport,thinkingBudgets:this._thinkingBudgets,maxRetryDelayMs:this._maxRetryDelayMs,convertToLlm:this.convertToLlm,transformContext:this.transformContext,getApiKey:this.getApiKey,getSteeringMessages:async()=>i?(i=!1,[]):this.dequeueSteeringMessages(),getFollowUpMessages:async()=>this.dequeueFollowUpMessages()};let g=null;try{const t=e?o(e,a,l,this.abortController.signal,this.streamFn):r(a,l,this.abortController.signal,this.streamFn);for await(const e of t){switch(e.type){case"message_start":case"message_update":g=e.message,this._state.streamMessage=e.message;break;case"message_end":g=null,this._state.streamMessage=null,this.appendMessage(e.message);break;case"tool_execution_start":{const t=new Set(this._state.pendingToolCalls);t.add(e.toolCallId),this._state.pendingToolCalls=t;break}case"tool_execution_end":{const t=new Set(this._state.pendingToolCalls);t.delete(e.toolCallId),this._state.pendingToolCalls=t;break}case"turn_end":"assistant"===e.message.role&&e.message.errorMessage&&(this._state.error=e.message.errorMessage);break;case"agent_end":this._state.isStreaming=!1,this._state.streamMessage=null}this.emit(e)}if(g&&"assistant"===g.role&&g.content.length>0){if(!g.content.some(e=>"thinking"===e.type&&e.thinking.trim().length>0||"text"===e.type&&e.text.trim().length>0||"toolCall"===e.type&&e.name.trim().length>0)){if(this.abortController?.signal.aborted)throw new Error("Request was aborted")}else this.appendMessage(g)}}catch(e){const t={role:"assistant",content:[{type:"text",text:""}],api:s.api,provider:s.provider,model:s.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:this.abortController?.signal.aborted?"aborted":"error",errorMessage:e?.message||String(e),timestamp:Date.now()};this.appendMessage(t),this._state.error=e?.message||String(e),this.emit({type:"agent_end",messages:[t]})}finally{this._state.isStreaming=!1,this._state.streamMessage=null,this._state.pendingToolCalls=new Set,this.abortController=void 0,this.resolveRunningPrompt?.(),this.runningPrompt=void 0,this.resolveRunningPrompt=void 0}}emit(e){for(const t of this.listeners)t(e)}}class h extends n.EventStream{constructor(){super(e=>"done"===e.type||"error"===e.type,e=>{if("done"===e.type)return e.message;if("error"===e.type)return e.error;throw new Error("Unexpected event type")})}}function d(e,t,s){const n=new h;return(async()=>{const o={role:"assistant",stopReason:"stop",content:[],api:e.api,provider:e.provider,model:e.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},timestamp:Date.now()};let r;const a=()=>{r&&r.cancel("Request aborted by user").catch(()=>{})};s.signal&&s.signal.addEventListener("abort",a);try{const a=await fetch(`${s.proxyUrl}/api/stream`,{method:"POST",headers:{Authorization:`Bearer ${s.authToken}`,"Content-Type":"application/json"},body:JSON.stringify({model:e,context:t,options:{temperature:s.temperature,maxTokens:s.maxTokens,reasoning:s.reasoning}}),signal:s.signal});if(!a.ok){let e=`Proxy error: ${a.status} ${a.statusText}`;try{const t=await a.json();t.error&&(e=`Proxy error: ${t.error}`)}catch{}throw new Error(e)}r=a.body.getReader();const i=new TextDecoder;let l="";for(;;){const{done:e,value:t}=await r.read();if(e)break;if(s.signal?.aborted)throw new Error("Request aborted by user");l+=i.decode(t,{stream:!0});const a=l.split("\n");l=a.pop()||"";for(const e of a)if(e.startsWith("data: ")){const t=e.slice(6).trim();if(t){const e=m(JSON.parse(t),o);e&&n.push(e)}}}if(s.signal?.aborted)throw new Error("Request aborted by user");n.end()}catch(e){const t=e instanceof Error?e.message:String(e),r=s.signal?.aborted?"aborted":"error";o.stopReason=r,o.errorMessage=t,n.push({type:"error",reason:r,error:o}),n.end()}finally{s.signal&&s.signal.removeEventListener("abort",a)}})(),n}function m(e,t){switch(e.type){case"start":return{type:"start",partial:t};case"text_start":return t.content[e.contentIndex]={type:"text",text:""},{type:"text_start",contentIndex:e.contentIndex,partial:t};case"text_delta":{const s=t.content[e.contentIndex];if("text"===s?.type)return s.text+=e.delta,{type:"text_delta",contentIndex:e.contentIndex,delta:e.delta,partial:t};throw new Error("Received text_delta for non-text content")}case"text_end":{const s=t.content[e.contentIndex];if("text"===s?.type)return s.textSignature=e.contentSignature,{type:"text_end",contentIndex:e.contentIndex,content:s.text,partial:t};throw new Error("Received text_end for non-text content")}case"thinking_start":return t.content[e.contentIndex]={type:"thinking",thinking:""},{type:"thinking_start",contentIndex:e.contentIndex,partial:t};case"thinking_delta":{const s=t.content[e.contentIndex];if("thinking"===s?.type)return s.thinking+=e.delta,{type:"thinking_delta",contentIndex:e.contentIndex,delta:e.delta,partial:t};throw new Error("Received thinking_delta for non-thinking content")}case"thinking_end":{const s=t.content[e.contentIndex];if("thinking"===s?.type)return s.thinkingSignature=e.contentSignature,{type:"thinking_end",contentIndex:e.contentIndex,content:s.thinking,partial:t};throw new Error("Received thinking_end for non-thinking content")}case"toolcall_start":return t.content[e.contentIndex]={type:"toolCall",id:e.id,name:e.toolName,arguments:{},partialJson:""},{type:"toolcall_start",contentIndex:e.contentIndex,partial:t};case"toolcall_delta":{const s=t.content[e.contentIndex];if("toolCall"===s?.type)return s.partialJson+=e.delta,s.arguments=(0,n.parseStreamingJson)(s.partialJson)||{},t.content[e.contentIndex]={...s},{type:"toolcall_delta",contentIndex:e.contentIndex,delta:e.delta,partial:t};throw new Error("Received toolcall_delta for non-toolCall content")}case"toolcall_end":{const s=t.content[e.contentIndex];return"toolCall"===s?.type?(delete s.partialJson,{type:"toolcall_end",contentIndex:e.contentIndex,toolCall:s,partial:t}):void 0}case"done":return t.stopReason=e.reason,t.usage=e.usage,{type:"done",reason:e.reason,message:t};case"error":return t.stopReason=e.reason,t.errorMessage=e.errorMessage,t.usage=e.usage,{type:"error",reason:e.reason,error:t};default:return void console.warn(`Unhandled proxy event type: ${e.type}`)}}}};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@spfunctions/cli",
|
|
3
|
-
"version": "1.7.
|
|
3
|
+
"version": "1.7.27",
|
|
4
4
|
"mcpName": "io.github.spfunctions/simplefunctions",
|
|
5
5
|
"description": "Prediction market intelligence CLI. Causal thesis model, 24/7 Kalshi/Polymarket scan, live orderbook, edge detection. Interactive agent mode with tool calling.",
|
|
6
6
|
"bin": {
|