@robota-sdk/agent-framework 3.0.0-beta.99 → 3.0.1

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,2 +1,2 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../interactive-CyPYYFZe.cjs");let t=require("node:path"),n=require("@robota-sdk/agent-executor"),r=require("@robota-sdk/agent-session"),i=require("node:fs"),a=require("node:os"),o=require("@robota-sdk/agent-core/testing");function s(e){return{turnSource:`peer`,driverId:`peer:${e}`}}function c(e){return(0,t.join)(e,`.agent`,`logs`)}function l(e,n){return(0,t.join)(c(e),`${n}.jsonl`)}function u(e,t){let n=l(e,t);return(0,i.existsSync)(n)?(0,i.readFileSync)(n,`utf8`):``}function d(e,t){return u(e,t).split(`
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../interactive-D5RQkohO.cjs");let t=require("node:path"),n=require("@robota-sdk/agent-executor"),r=require("@robota-sdk/agent-session"),i=require("node:fs"),a=require("node:os"),o=require("@robota-sdk/agent-core/testing");function s(e){return{turnSource:`peer`,driverId:`peer:${e}`}}function c(e){return(0,t.join)(e,`.agent`,`logs`)}function l(e,n){return(0,t.join)(c(e),`${n}.jsonl`)}function u(e,t){let n=l(e,t);return(0,i.existsSync)(n)?(0,i.readFileSync)(n,`utf8`):``}function d(e,t){return u(e,t).split(`
2
2
  `).filter(e=>e.trim().length>0).map(e=>JSON.parse(e))}function f(e,n){return(0,i.readFileSync)((0,t.join)(e,n),`utf8`)}function p(e,n){return(0,i.existsSync)((0,t.join)(e,n))}function m(e){let n=[],r=a=>{for(let o of(0,i.readdirSync)(a,{withFileTypes:!0})){if(o.name===`.agent`)continue;let i=(0,t.join)(a,o.name);o.isDirectory()?r(i):n.push((0,t.relative)(e,i).split(t.sep).join(`/`))}};return r(e),n.sort()}const h=[`text_delta`,`tool_start`,`tool_end`,`thinking`,`thinking_delta`,`complete`,`interrupted`,`error`,`context_update`,`goal_event`,`turn_source`,`user_message`,`background_task_event`];var g=class{cwd;session;requests;events=new Map;completions=[];sessionStore;ownsWorkspace;disposed=!1;constructor(s){if(this.ownsWorkspace=s.cwd===void 0,this.cwd=s.cwd??(0,i.realpathSync)((0,i.mkdtempSync)((0,t.join)((0,a.tmpdir)(),`agent-fxn-`))),this.ownsWorkspace)for(let[e,n]of Object.entries(s.files??{})){let r=(0,t.join)(this.cwd,e);(0,i.mkdirSync)((0,t.dirname)(r),{recursive:!0}),(0,i.writeFileSync)(r,n,`utf8`)}if([s.turns,s.cassette,s.record].filter(e=>e!==void 0).length!==1)throw Error("scriptedSession requires exactly one of `turns`, `cassette`, or `record`.");let c;c=s.cassette?(0,o.createReplayProvider)({cassettePath:s.cassette,scrub:[this.cwd],rewriteCwd:this.cwd}):s.record?(0,o.createRecordingProvider)({provider:s.record.provider,cassettePath:s.record.toCassette,recordCwd:this.cwd}):(0,o.createScriptedProvider)(this.substituteWorkspacePath(s.turns??[])).provider,this.requests=[];let l={...c,chat:async(e,t)=>(this.requests.push([...e]),await s.beforeProviderCall?.(),c.chat(e,t))},u=(0,t.join)(this.cwd,`.agent`,`sessions`);this.sessionStore=s.persistence?new r.NodeSessionStore(u):void 0;let d;if(s.permissions!==void 0||s.hooks!==void 0){d=(0,t.join)(this.cwd,`.agent-test-user-settings.json`);let e={...s.permissions===void 0?{}:{permissions:s.permissions},...s.hooks===void 0?{}:{hooks:s.hooks}};(0,i.writeFileSync)(d,JSON.stringify(e),`utf8`)}this.session=new e.k({cwd:this.cwd,provider:l,...d===void 0?{}:{userSettingsSources:[e.ai(`user`,d)]},...s.projectAccess?{projectAccess:s.projectAccess}:{},...s.sandboxClient?{sandboxClient:s.sandboxClient}:{},...s.contributionSources===void 0?{}:{contributionSources:s.contributionSources},...s.skillRoots===void 0?{}:{skillRoots:s.skillRoots},...s.resolveDefaultLoopPrompt?{resolveDefaultLoopPrompt:s.resolveDefaultLoopPrompt}:{},...s.agentDefinitionRoots===void 0?{}:{agentDefinitionRoots:s.agentDefinitionRoots},bare:s.bare??!0,permissionMode:s.permissionMode??`bypassPermissions`,...s.allowedTools?{allowedTools:s.allowedTools}:{},...s.deniedTools?{deniedTools:s.deniedTools}:{},...this.sessionStore?{sessionStore:this.sessionStore}:{},sessionLogSink:new r.NodeSessionLogSink((0,t.join)(this.cwd,`.agent`,`logs`)),...s.resumeSessionId?{resumeSessionId:s.resumeSessionId}:{},...s.forkSession?{forkSession:s.forkSession}:{},...s.workspaceMovedFrom===void 0?{}:{workspaceMovedFrom:s.workspaceMovedFrom},...s.commandModules?{commandModules:s.commandModules}:{},...s.backgroundTasks?{backgroundTaskRunners:(0,n.createDefaultBackgroundTaskRunners)()}:{},...s.maxTurns===void 0?{}:{maxTurns:s.maxTurns},...s.model===void 0?{}:{model:s.model},...s.terminalHandoff?{terminalHandoff:s.terminalHandoff}:{},...s.additionalTools?{additionalTools:s.additionalTools}:{},...s.backgroundTaskRunners?{backgroundTaskRunners:s.backgroundTaskRunners}:{},...s.toolCallHandoff?{toolCallHandoff:s.toolCallHandoff}:{}});for(let e of h)this.session.on(e,((...t)=>{this.record(e,t),(e===`complete`||e===`interrupted`)&&this.completions.push(t[0])}));if(s.askHandler){let e=s.askHandler;this.session.on(`ask_request`,({id:t,request:n})=>{Promise.resolve(e(n)).then(e=>this.session.resolveAsk(t,e)).catch(()=>this.session.resolveAsk(t,{type:`cancelled`}))})}}substituteWorkspacePath(e){return e.map(e=>`toolCalls`in e?{...e,toolCalls:e.toolCalls.map(e=>({name:e.name,args:JSON.parse(JSON.stringify(e.args).split(`{{cwd}}`).join(this.cwd))}))}:e)}record(e,t){let n=this.events.get(e)??[];n.push(t),this.events.set(e,n)}async submit(e){let t=this.nextSettledTurn();return await this.session.submit(e),t}async runGoal(e,t={}){let n=new Promise((e,t)=>{let n=t=>{t.type===`goal_stopped`&&(i(),e(t.goal))},r=e=>{i(),t(e)},i=()=>{this.session.off(`goal_event`,n),this.session.off(`error`,r)};this.session.on(`goal_event`,n),this.session.on(`error`,r)});return await this.session.setGoal(e,t.maxIterations?{maxIterations:t.maxIterations}:{}),n}command(e,t=``){return this.session.executeCommand(e,t)}async wake(e,t){return this.session.requestWakeup(e,t)?this.nextSettledTurn():null}async submitPeer(e,t){let n=this.nextSettledTurn();return await this.session.submit(e,void 0,void 0,s(t)),n}awaitEvent(e,t){return new Promise(n=>{let r=((...i)=>{let a=i;t&&!t(...a)||(this.session.off(e,r),n(a))});this.session.on(e,r)})}nextSettledTurn(){return new Promise((e,t)=>{let n=t=>{i(),e(t)},r=e=>{i(),t(e)},i=()=>{this.session.off(`complete`,n),this.session.off(`interrupted`,n),this.session.off(`error`,r)};this.session.on(`complete`,n),this.session.on(`interrupted`,n),this.session.on(`error`,r)})}history(){return this.session.getMessages()}sessionRecord(){if(!this.sessionStore)return;let e=this.sessionStore.load(this.session.getSession().getSessionId());return e.status===`valid`?e.record:void 0}sessionLog(){return{id:this.session.getSession().getSessionId(),history:this.session.getFullHistory()}}logsDir(){return c(this.cwd)}transcriptPath(){return l(this.cwd,this.session.getSession().getSessionId())}transcript(){return u(this.cwd,this.session.getSession().getSessionId())}logEntries(){return d(this.cwd,this.session.getSession().getSessionId())}toolCalls(){return this.completions.flatMap(e=>e.toolSummaries)}emittedEvents(e){return this.events.get(e)??[]}readFile(e){return f(this.cwd,e)}exists(e){return p(this.cwd,e)}files(){return m(this.cwd)}async dispose(){this.disposed||(this.disposed=!0,await this.session.shutdown({reason:`other`,message:`functional test complete`}),this.ownsWorkspace&&(0,i.rmSync)(this.cwd,{recursive:!0,force:!0,maxRetries:5,retryDelay:20}))}};function _(e){return new g(e)}const v=`1970-01-01T00:00:00.000Z`,y=`/agent-test-command-host`;function b(e,t){let n={...e};for(let[e,r]of Object.entries(t??{}))r!==void 0&&(n[e]=r);return n}const x={id:`test-agent-job`,type:`general-purpose`,label:`test`,parentSessionId:`test-command-host`,status:`running`,mode:`background`,depth:1,cwd:y,promptPreview:``,updatedAt:v},S={id:`test-group`,parentSessionId:`test-command-host`,waitPolicy:`wait_all`,taskIds:[],status:`running`,createdAt:v,updatedAt:v,results:[]},C={id:`test-background-task`,kind:`agent`,label:`test`,status:`running`,mode:`background`,parentSessionId:`test-command-host`,depth:1,cwd:y,updatedAt:v,unread:!1};function w(e){return b({listAgentDefinitions:()=>[],getDefaultAgentType:()=>`general-purpose`,setDefaultAgentType:()=>{},listAgentJobs:()=>[],spawnAgentJob:()=>Promise.resolve(x),sendAgentJob:()=>Promise.resolve(),cancelAgentJob:()=>Promise.resolve(),closeAgentJob:()=>Promise.resolve(),createBackgroundJobGroup:()=>S,waitBackgroundJobGroup:()=>Promise.resolve(S),spawnScheduledWake:()=>Promise.resolve(C),listSchedules:()=>[],pauseSchedule:()=>Promise.resolve(),resumeSchedule:()=>Promise.resolve(),editSchedule:()=>Promise.resolve(),spawnMonitorWake:()=>Promise.resolve(C),readBackgroundTaskLog:e=>Promise.resolve({taskId:e,lines:[]})},e)}const T={target:{id:`test-checkpoint`,sessionId:`test-command-host`,sequence:0,prompt:``,createdAt:v,fileCount:0},restoredCheckpointCount:0,restoredFileCount:0,removedCheckpointCount:0},E={maxTokens:0,usedTokens:0,usedPercentage:0,remainingPercentage:100},D={id:`test-goal`,objective:``,status:`stopped`,iterations:0,maxIterations:0,startedAt:v,progress:[]},O={id:`test-plan`,objective:``,steps:[],phase:`planning`,createdAt:v},k={},A={loadStartupMemory:()=>Promise.resolve({content:``,path:``,lineCount:0,truncated:!1}),list:()=>Promise.resolve({indexPath:``,topicsPath:``,topics:[]}),readTopic:()=>Promise.resolve(``),append:e=>Promise.resolve({indexPath:``,topicPath:``,topic:e.topic,deduplicated:!1}),recall:()=>Promise.resolve({content:``,references:[],truncated:!1}),getPending:()=>Promise.resolve(void 0),listPending:()=>Promise.resolve([]),markPending:(e,t,n)=>Promise.resolve({id:e,type:`project`,topic:``,text:``,sourceMessageIds:[],confidence:0,createdAt:v,reason:n,status:t,updatedAt:v}),upsertPending:()=>Promise.resolve()};let j=0;function M(e){let t=[];return b({getSessionId:()=>`test-command-host-${j}`,getHistory:()=>[],getFullHistory:()=>[],getMessageCount:()=>0,clearHistory:()=>{},compact:()=>Promise.resolve(),getContextState:()=>E,getPermissionMode:()=>`default`,setPermissionMode:()=>{},getSessionAllowedTools:()=>[],getPermissionRules:()=>({allow:[],deny:[],ask:[]}),getRecentPermissionDenials:()=>[],retryPermissionDenial:()=>void 0,applyPresetToolLists:e=>{t.push(e)},getAutoCompactThreshold:()=>!1,setAutoCompactThreshold:()=>{},getSessionTokenUsage:()=>void 0,getModelId:()=>void 0,getModelEffort:()=>`high`,getOfferedToolSchemas:()=>[],addTools:async()=>[],applyModelOptions:()=>{},applyAgentName:()=>{},getActivePresetId:()=>`default`,setActivePresetId:()=>{},setParallelSubagentsEnabled:()=>{}},e)}function N(e={}){j+=1;let t=e.cwd??`/agent-test-command-host-${j}`,n=M(e.session);return b({getSession:()=>n,validateCurrentSessionReplayLog:()=>({logFile:`${t}/session.jsonl`,entryCount:0,validation:{ok:!0,issues:[]}}),getCwd:()=>t,getCommandInvocationSource:()=>`user`,clearConversationHistory:()=>{},getSessionUsage:()=>[],forkSession:e=>Promise.resolve({sessionId:`test-command-host-${j}-fork`,name:e?.name??`test-command-host-${j} (fork)`}),getUserInteraction:()=>void 0,getActiveOutputStyleId:()=>`default`,applyPersona:()=>{},applySelfVerification:()=>{},applyResponseLanguage:()=>{},applyOutputStyle:()=>{},applyPresetSystemPrompt:()=>{},applyCommandModuleSelection:()=>[],getAutoCompactThresholdSource:()=>`session`,setAutoCompactThreshold:()=>{},listCheckpointBranches:()=>[],forkCheckpointBranch:()=>Promise.resolve(T),switchCheckpointBranch:()=>{},setGoal:()=>Promise.resolve(D),getGoalState:()=>null,cancelGoal:()=>null,setPlan:()=>Promise.resolve(O),getPlanState:()=>null,approvePlan:()=>O,revertPlan:()=>O,getMemoryStore:()=>A,runWithTerminal:e=>e(),getContextState:()=>E,getAutoCompactThreshold:()=>!1,compactContext:()=>Promise.resolve(),listCommands:()=>[],listSkills:()=>[],executeSkillCommandByName:()=>Promise.resolve(null),listContextReferences:()=>[],addContextReference:()=>Promise.resolve({evicted:[],diagnostics:[]}),removeContextReference:()=>({}),clearContextReferences:()=>({removed:[]}),listEditCheckpoints:()=>[],inspectEditCheckpoint:()=>({target:T.target,capturedFiles:[],restoreToCheckpoint:{checkpointIds:[],fileCount:0},rollbackThroughCheckpoint:{checkpointIds:[],fileCount:0}}),restoreEditCheckpoint:()=>Promise.resolve(T),rollbackEditCheckpoint:()=>Promise.resolve(T),getUsedMemoryReferences:()=>[],recordMemoryEvent:()=>{},listBackgroundTasks:()=>[],readBackgroundTaskLog:e=>Promise.resolve({taskId:e,lines:[]}),cancelBackgroundTask:()=>Promise.resolve(),closeBackgroundTask:()=>Promise.resolve(),getCommandHostAdapters:()=>k,canHandoffTerminal:()=>!1,getAgentJobCapability:()=>w()},e.overrides)}function P(t,n){return e.g(t,()=>n)}exports.ScriptedSessionHarness=g,exports.createInteractiveRuntimeForTesting=P,exports.createTestAgentJobHost=w,exports.createTestCommandHost=N,exports.createTestSessionRuntime=M,exports.scriptedSession=_;
@@ -1,4 +1,4 @@
1
- import { Mn as IContributionSource, Mt as IToolCallHandoffPolicy, Qa as ICommandModule, Yc as TWorkspaceProjectAccess, i as IInteractiveRuntime, m as IInteractiveSession$1, n as IInteractiveRuntimeTestOptions, p as InteractiveSession, ul as ICommandSessionRuntime, uo as ICommandHostContext, wn as ISkillRootDescriptor, xl as IAgentJobHostContext } from "../createInteractiveRuntime-20Gv8UI1.cjs";
1
+ import { Dn as ISkillRootDescriptor, Fn as IContributionSource, Ft as IToolCallHandoffPolicy, Qc as TWorkspaceProjectAccess, i as IInteractiveRuntime, m as IInteractiveSession$1, n as IInteractiveRuntimeTestOptions, p as InteractiveSession, pl as ICommandSessionRuntime, po as ICommandHostContext, to as ICommandModule, wl as IAgentJobHostContext } from "../createInteractiveRuntime-CpJLlJRl.cjs";
2
2
  import { IAIProvider, IToolWithEventService, IUserInteraction, THooksConfig, TPermissionMode, TUniversalMessage } from "@robota-sdk/agent-core";
3
3
  import { IExecutionResult, IGoalState, IInteractiveSessionEvents, IInteractiveSessionRecord, ITerminalHandoff, IToolSummary, TInteractiveEventName } from "@robota-sdk/agent-interface-session";
4
4
  import { ICommandResult } from "@robota-sdk/agent-interface-command";
@@ -1,4 +1,4 @@
1
- import { Mn as IContributionSource, Mt as IToolCallHandoffPolicy, Qa as ICommandModule, Yc as TWorkspaceProjectAccess, i as IInteractiveRuntime, m as IInteractiveSession$1, n as IInteractiveRuntimeTestOptions, p as InteractiveSession, ul as ICommandSessionRuntime, uo as ICommandHostContext, wn as ISkillRootDescriptor, xl as IAgentJobHostContext } from "../createInteractiveRuntime-vsCT07qt.js";
1
+ import { Dn as ISkillRootDescriptor, Fn as IContributionSource, Ft as IToolCallHandoffPolicy, Qc as TWorkspaceProjectAccess, i as IInteractiveRuntime, m as IInteractiveSession$1, n as IInteractiveRuntimeTestOptions, p as InteractiveSession, pl as ICommandSessionRuntime, po as ICommandHostContext, to as ICommandModule, wl as IAgentJobHostContext } from "../createInteractiveRuntime-B4laJ8IC.js";
2
2
  import { IAIProvider, IToolWithEventService, IUserInteraction, THooksConfig, TPermissionMode, TUniversalMessage } from "@robota-sdk/agent-core";
3
3
  import { IExecutionResult, IGoalState, IInteractiveSessionEvents, IInteractiveSessionRecord, ITerminalHandoff, IToolSummary, TInteractiveEventName } from "@robota-sdk/agent-interface-session";
4
4
  import { IBackgroundTaskRunner } from "@robota-sdk/agent-executor";
@@ -1,3 +1,3 @@
1
- import{ai as e,g as t,k as n}from"../interactive-JZVRVsIt.js";import{dirname as r,join as i,relative as a,sep as o}from"node:path";import{createDefaultBackgroundTaskRunners as s}from"@robota-sdk/agent-executor";import{NodeSessionLogSink as c,NodeSessionStore as l}from"@robota-sdk/agent-session";import{existsSync as u,mkdirSync as d,mkdtempSync as f,readFileSync as p,readdirSync as m,realpathSync as h,rmSync as g,writeFileSync as _}from"node:fs";import{tmpdir as v}from"node:os";import{createRecordingProvider as y,createReplayProvider as b,createScriptedProvider as x}from"@robota-sdk/agent-core/testing";function S(e){return{turnSource:`peer`,driverId:`peer:${e}`}}function C(e){return i(e,`.agent`,`logs`)}function w(e,t){return i(C(e),`${t}.jsonl`)}function T(e,t){let n=w(e,t);return u(n)?p(n,`utf8`):``}function E(e,t){return T(e,t).split(`
1
+ import{ai as e,g as t,k as n}from"../interactive-DommsJxu.js";import{dirname as r,join as i,relative as a,sep as o}from"node:path";import{createDefaultBackgroundTaskRunners as s}from"@robota-sdk/agent-executor";import{NodeSessionLogSink as c,NodeSessionStore as l}from"@robota-sdk/agent-session";import{existsSync as u,mkdirSync as d,mkdtempSync as f,readFileSync as p,readdirSync as m,realpathSync as h,rmSync as g,writeFileSync as _}from"node:fs";import{tmpdir as v}from"node:os";import{createRecordingProvider as y,createReplayProvider as b,createScriptedProvider as x}from"@robota-sdk/agent-core/testing";function S(e){return{turnSource:`peer`,driverId:`peer:${e}`}}function C(e){return i(e,`.agent`,`logs`)}function w(e,t){return i(C(e),`${t}.jsonl`)}function T(e,t){let n=w(e,t);return u(n)?p(n,`utf8`):``}function E(e,t){return T(e,t).split(`
2
2
  `).filter(e=>e.trim().length>0).map(e=>JSON.parse(e))}function D(e,t){return p(i(e,t),`utf8`)}function O(e,t){return u(i(e,t))}function k(e){let t=[],n=r=>{for(let s of m(r,{withFileTypes:!0})){if(s.name===`.agent`)continue;let c=i(r,s.name);s.isDirectory()?n(c):t.push(a(e,c).split(o).join(`/`))}};return n(e),t.sort()}const A=[`text_delta`,`tool_start`,`tool_end`,`thinking`,`thinking_delta`,`complete`,`interrupted`,`error`,`context_update`,`goal_event`,`turn_source`,`user_message`,`background_task_event`];var j=class{cwd;session;requests;events=new Map;completions=[];sessionStore;ownsWorkspace;disposed=!1;constructor(t){if(this.ownsWorkspace=t.cwd===void 0,this.cwd=t.cwd??h(f(i(v(),`agent-fxn-`))),this.ownsWorkspace)for(let[e,n]of Object.entries(t.files??{})){let t=i(this.cwd,e);d(r(t),{recursive:!0}),_(t,n,`utf8`)}if([t.turns,t.cassette,t.record].filter(e=>e!==void 0).length!==1)throw Error("scriptedSession requires exactly one of `turns`, `cassette`, or `record`.");let a;a=t.cassette?b({cassettePath:t.cassette,scrub:[this.cwd],rewriteCwd:this.cwd}):t.record?y({provider:t.record.provider,cassettePath:t.record.toCassette,recordCwd:this.cwd}):x(this.substituteWorkspacePath(t.turns??[])).provider,this.requests=[];let o={...a,chat:async(e,n)=>(this.requests.push([...e]),await t.beforeProviderCall?.(),a.chat(e,n))},u=i(this.cwd,`.agent`,`sessions`);this.sessionStore=t.persistence?new l(u):void 0;let p;if(t.permissions!==void 0||t.hooks!==void 0){p=i(this.cwd,`.agent-test-user-settings.json`);let e={...t.permissions===void 0?{}:{permissions:t.permissions},...t.hooks===void 0?{}:{hooks:t.hooks}};_(p,JSON.stringify(e),`utf8`)}this.session=new n({cwd:this.cwd,provider:o,...p===void 0?{}:{userSettingsSources:[e(`user`,p)]},...t.projectAccess?{projectAccess:t.projectAccess}:{},...t.sandboxClient?{sandboxClient:t.sandboxClient}:{},...t.contributionSources===void 0?{}:{contributionSources:t.contributionSources},...t.skillRoots===void 0?{}:{skillRoots:t.skillRoots},...t.resolveDefaultLoopPrompt?{resolveDefaultLoopPrompt:t.resolveDefaultLoopPrompt}:{},...t.agentDefinitionRoots===void 0?{}:{agentDefinitionRoots:t.agentDefinitionRoots},bare:t.bare??!0,permissionMode:t.permissionMode??`bypassPermissions`,...t.allowedTools?{allowedTools:t.allowedTools}:{},...t.deniedTools?{deniedTools:t.deniedTools}:{},...this.sessionStore?{sessionStore:this.sessionStore}:{},sessionLogSink:new c(i(this.cwd,`.agent`,`logs`)),...t.resumeSessionId?{resumeSessionId:t.resumeSessionId}:{},...t.forkSession?{forkSession:t.forkSession}:{},...t.workspaceMovedFrom===void 0?{}:{workspaceMovedFrom:t.workspaceMovedFrom},...t.commandModules?{commandModules:t.commandModules}:{},...t.backgroundTasks?{backgroundTaskRunners:s()}:{},...t.maxTurns===void 0?{}:{maxTurns:t.maxTurns},...t.model===void 0?{}:{model:t.model},...t.terminalHandoff?{terminalHandoff:t.terminalHandoff}:{},...t.additionalTools?{additionalTools:t.additionalTools}:{},...t.backgroundTaskRunners?{backgroundTaskRunners:t.backgroundTaskRunners}:{},...t.toolCallHandoff?{toolCallHandoff:t.toolCallHandoff}:{}});for(let e of A)this.session.on(e,((...t)=>{this.record(e,t),(e===`complete`||e===`interrupted`)&&this.completions.push(t[0])}));if(t.askHandler){let e=t.askHandler;this.session.on(`ask_request`,({id:t,request:n})=>{Promise.resolve(e(n)).then(e=>this.session.resolveAsk(t,e)).catch(()=>this.session.resolveAsk(t,{type:`cancelled`}))})}}substituteWorkspacePath(e){return e.map(e=>`toolCalls`in e?{...e,toolCalls:e.toolCalls.map(e=>({name:e.name,args:JSON.parse(JSON.stringify(e.args).split(`{{cwd}}`).join(this.cwd))}))}:e)}record(e,t){let n=this.events.get(e)??[];n.push(t),this.events.set(e,n)}async submit(e){let t=this.nextSettledTurn();return await this.session.submit(e),t}async runGoal(e,t={}){let n=new Promise((e,t)=>{let n=t=>{t.type===`goal_stopped`&&(i(),e(t.goal))},r=e=>{i(),t(e)},i=()=>{this.session.off(`goal_event`,n),this.session.off(`error`,r)};this.session.on(`goal_event`,n),this.session.on(`error`,r)});return await this.session.setGoal(e,t.maxIterations?{maxIterations:t.maxIterations}:{}),n}command(e,t=``){return this.session.executeCommand(e,t)}async wake(e,t){return this.session.requestWakeup(e,t)?this.nextSettledTurn():null}async submitPeer(e,t){let n=this.nextSettledTurn();return await this.session.submit(e,void 0,void 0,S(t)),n}awaitEvent(e,t){return new Promise(n=>{let r=((...i)=>{let a=i;t&&!t(...a)||(this.session.off(e,r),n(a))});this.session.on(e,r)})}nextSettledTurn(){return new Promise((e,t)=>{let n=t=>{i(),e(t)},r=e=>{i(),t(e)},i=()=>{this.session.off(`complete`,n),this.session.off(`interrupted`,n),this.session.off(`error`,r)};this.session.on(`complete`,n),this.session.on(`interrupted`,n),this.session.on(`error`,r)})}history(){return this.session.getMessages()}sessionRecord(){if(!this.sessionStore)return;let e=this.sessionStore.load(this.session.getSession().getSessionId());return e.status===`valid`?e.record:void 0}sessionLog(){return{id:this.session.getSession().getSessionId(),history:this.session.getFullHistory()}}logsDir(){return C(this.cwd)}transcriptPath(){return w(this.cwd,this.session.getSession().getSessionId())}transcript(){return T(this.cwd,this.session.getSession().getSessionId())}logEntries(){return E(this.cwd,this.session.getSession().getSessionId())}toolCalls(){return this.completions.flatMap(e=>e.toolSummaries)}emittedEvents(e){return this.events.get(e)??[]}readFile(e){return D(this.cwd,e)}exists(e){return O(this.cwd,e)}files(){return k(this.cwd)}async dispose(){this.disposed||(this.disposed=!0,await this.session.shutdown({reason:`other`,message:`functional test complete`}),this.ownsWorkspace&&g(this.cwd,{recursive:!0,force:!0,maxRetries:5,retryDelay:20}))}};function M(e){return new j(e)}const N=`1970-01-01T00:00:00.000Z`,P=`/agent-test-command-host`;function F(e,t){let n={...e};for(let[e,r]of Object.entries(t??{}))r!==void 0&&(n[e]=r);return n}const I={id:`test-agent-job`,type:`general-purpose`,label:`test`,parentSessionId:`test-command-host`,status:`running`,mode:`background`,depth:1,cwd:P,promptPreview:``,updatedAt:N},L={id:`test-group`,parentSessionId:`test-command-host`,waitPolicy:`wait_all`,taskIds:[],status:`running`,createdAt:N,updatedAt:N,results:[]},R={id:`test-background-task`,kind:`agent`,label:`test`,status:`running`,mode:`background`,parentSessionId:`test-command-host`,depth:1,cwd:P,updatedAt:N,unread:!1};function z(e){return F({listAgentDefinitions:()=>[],getDefaultAgentType:()=>`general-purpose`,setDefaultAgentType:()=>{},listAgentJobs:()=>[],spawnAgentJob:()=>Promise.resolve(I),sendAgentJob:()=>Promise.resolve(),cancelAgentJob:()=>Promise.resolve(),closeAgentJob:()=>Promise.resolve(),createBackgroundJobGroup:()=>L,waitBackgroundJobGroup:()=>Promise.resolve(L),spawnScheduledWake:()=>Promise.resolve(R),listSchedules:()=>[],pauseSchedule:()=>Promise.resolve(),resumeSchedule:()=>Promise.resolve(),editSchedule:()=>Promise.resolve(),spawnMonitorWake:()=>Promise.resolve(R),readBackgroundTaskLog:e=>Promise.resolve({taskId:e,lines:[]})},e)}const B={target:{id:`test-checkpoint`,sessionId:`test-command-host`,sequence:0,prompt:``,createdAt:N,fileCount:0},restoredCheckpointCount:0,restoredFileCount:0,removedCheckpointCount:0},V={maxTokens:0,usedTokens:0,usedPercentage:0,remainingPercentage:100},H={id:`test-goal`,objective:``,status:`stopped`,iterations:0,maxIterations:0,startedAt:N,progress:[]},U={id:`test-plan`,objective:``,steps:[],phase:`planning`,createdAt:N},W={},G={loadStartupMemory:()=>Promise.resolve({content:``,path:``,lineCount:0,truncated:!1}),list:()=>Promise.resolve({indexPath:``,topicsPath:``,topics:[]}),readTopic:()=>Promise.resolve(``),append:e=>Promise.resolve({indexPath:``,topicPath:``,topic:e.topic,deduplicated:!1}),recall:()=>Promise.resolve({content:``,references:[],truncated:!1}),getPending:()=>Promise.resolve(void 0),listPending:()=>Promise.resolve([]),markPending:(e,t,n)=>Promise.resolve({id:e,type:`project`,topic:``,text:``,sourceMessageIds:[],confidence:0,createdAt:N,reason:n,status:t,updatedAt:N}),upsertPending:()=>Promise.resolve()};let K=0;function q(e){let t=[];return F({getSessionId:()=>`test-command-host-${K}`,getHistory:()=>[],getFullHistory:()=>[],getMessageCount:()=>0,clearHistory:()=>{},compact:()=>Promise.resolve(),getContextState:()=>V,getPermissionMode:()=>`default`,setPermissionMode:()=>{},getSessionAllowedTools:()=>[],getPermissionRules:()=>({allow:[],deny:[],ask:[]}),getRecentPermissionDenials:()=>[],retryPermissionDenial:()=>void 0,applyPresetToolLists:e=>{t.push(e)},getAutoCompactThreshold:()=>!1,setAutoCompactThreshold:()=>{},getSessionTokenUsage:()=>void 0,getModelId:()=>void 0,getModelEffort:()=>`high`,getOfferedToolSchemas:()=>[],addTools:async()=>[],applyModelOptions:()=>{},applyAgentName:()=>{},getActivePresetId:()=>`default`,setActivePresetId:()=>{},setParallelSubagentsEnabled:()=>{}},e)}function J(e={}){K+=1;let t=e.cwd??`/agent-test-command-host-${K}`,n=q(e.session);return F({getSession:()=>n,validateCurrentSessionReplayLog:()=>({logFile:`${t}/session.jsonl`,entryCount:0,validation:{ok:!0,issues:[]}}),getCwd:()=>t,getCommandInvocationSource:()=>`user`,clearConversationHistory:()=>{},getSessionUsage:()=>[],forkSession:e=>Promise.resolve({sessionId:`test-command-host-${K}-fork`,name:e?.name??`test-command-host-${K} (fork)`}),getUserInteraction:()=>void 0,getActiveOutputStyleId:()=>`default`,applyPersona:()=>{},applySelfVerification:()=>{},applyResponseLanguage:()=>{},applyOutputStyle:()=>{},applyPresetSystemPrompt:()=>{},applyCommandModuleSelection:()=>[],getAutoCompactThresholdSource:()=>`session`,setAutoCompactThreshold:()=>{},listCheckpointBranches:()=>[],forkCheckpointBranch:()=>Promise.resolve(B),switchCheckpointBranch:()=>{},setGoal:()=>Promise.resolve(H),getGoalState:()=>null,cancelGoal:()=>null,setPlan:()=>Promise.resolve(U),getPlanState:()=>null,approvePlan:()=>U,revertPlan:()=>U,getMemoryStore:()=>G,runWithTerminal:e=>e(),getContextState:()=>V,getAutoCompactThreshold:()=>!1,compactContext:()=>Promise.resolve(),listCommands:()=>[],listSkills:()=>[],executeSkillCommandByName:()=>Promise.resolve(null),listContextReferences:()=>[],addContextReference:()=>Promise.resolve({evicted:[],diagnostics:[]}),removeContextReference:()=>({}),clearContextReferences:()=>({removed:[]}),listEditCheckpoints:()=>[],inspectEditCheckpoint:()=>({target:B.target,capturedFiles:[],restoreToCheckpoint:{checkpointIds:[],fileCount:0},rollbackThroughCheckpoint:{checkpointIds:[],fileCount:0}}),restoreEditCheckpoint:()=>Promise.resolve(B),rollbackEditCheckpoint:()=>Promise.resolve(B),getUsedMemoryReferences:()=>[],recordMemoryEvent:()=>{},listBackgroundTasks:()=>[],readBackgroundTaskLog:e=>Promise.resolve({taskId:e,lines:[]}),cancelBackgroundTask:()=>Promise.resolve(),closeBackgroundTask:()=>Promise.resolve(),getCommandHostAdapters:()=>W,canHandoffTerminal:()=>!1,getAgentJobCapability:()=>z()},e.overrides)}function Y(e,n){return t(e,()=>n)}export{j as ScriptedSessionHarness,Y as createInteractiveRuntimeForTesting,z as createTestAgentJobHost,J as createTestCommandHost,q as createTestSessionRuntime,M as scriptedSession};
3
3
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@robota-sdk/agent-framework",
3
- "version": "3.0.0-beta.99",
3
+ "version": "3.0.1",
4
4
  "description": "Programmatic SDK for building AI agents with Robota — provides InteractiveSession, createQuery(), command APIs, permissions, hooks, and context loading",
5
5
  "type": "module",
6
6
  "main": "dist/node/index.js",
@@ -63,32 +63,32 @@
63
63
  ],
64
64
  "dependencies": {
65
65
  "yaml": "^2.9.0",
66
- "zod": "^3.25.76",
67
- "@robota-sdk/agent-core": "3.0.0-beta.99",
68
- "@robota-sdk/agent-executor": "3.0.0-beta.99",
69
- "@robota-sdk/agent-file-authority": "3.0.0-beta.99",
70
- "@robota-sdk/agent-interface-analytics": "3.0.0-beta.99",
71
- "@robota-sdk/agent-interface-command": "3.0.0-beta.99",
72
- "@robota-sdk/agent-interface-execution": "3.0.0-beta.99",
73
- "@robota-sdk/agent-interface-session": "3.0.0-beta.99",
74
- "@robota-sdk/agent-interface-session-mobility": "3.0.0-beta.99",
75
- "@robota-sdk/agent-interface-transport": "3.0.0-beta.99",
76
- "@robota-sdk/agent-roundtable": "3.0.0-beta.99",
77
- "@robota-sdk/agent-session": "3.0.0-beta.99",
78
- "@robota-sdk/agent-tool-defaults": "3.0.0-beta.99",
79
- "@robota-sdk/agent-tools": "3.0.0-beta.99"
66
+ "zod": "^4.6.7",
67
+ "@robota-sdk/agent-core": "3.0.1",
68
+ "@robota-sdk/agent-interface-analytics": "3.0.1",
69
+ "@robota-sdk/agent-file-authority": "3.0.1",
70
+ "@robota-sdk/agent-interface-command": "3.0.1",
71
+ "@robota-sdk/agent-executor": "3.0.1",
72
+ "@robota-sdk/agent-interface-execution": "3.0.1",
73
+ "@robota-sdk/agent-interface-session": "3.0.1",
74
+ "@robota-sdk/agent-interface-session-mobility": "3.0.1",
75
+ "@robota-sdk/agent-interface-transport": "3.0.1",
76
+ "@robota-sdk/agent-roundtable": "3.0.1",
77
+ "@robota-sdk/agent-session": "3.0.1",
78
+ "@robota-sdk/agent-tool-defaults": "3.0.1",
79
+ "@robota-sdk/agent-tools": "3.0.1"
80
80
  },
81
81
  "devDependencies": {
82
- "@modelcontextprotocol/client": "^2.0.0",
82
+ "@modelcontextprotocol/client": "^2.3.0",
83
83
  "rimraf": "^5.0.10",
84
84
  "tsdown": "^0.22.14",
85
85
  "tsx": "^4.23.1",
86
86
  "typescript": "^6.0.3",
87
87
  "vitest": "^3.2.6",
88
- "@robota-sdk/agent-provider-openai-compatible": "3.0.0-beta.99",
89
- "@robota-sdk/agent-provider-replay": "3.0.0-beta.99",
90
- "@robota-sdk/agent-session-analytics": "3.0.0-beta.99",
91
- "@robota-sdk/agent-transport-mcp": "3.0.0-beta.99"
88
+ "@robota-sdk/agent-provider-openai-compatible": "3.0.1",
89
+ "@robota-sdk/agent-provider-replay": "3.0.1",
90
+ "@robota-sdk/agent-transport-mcp": "3.0.1",
91
+ "@robota-sdk/agent-session-analytics": "3.0.1"
92
92
  },
93
93
  "keywords": [
94
94
  "ai",