@gencode/agents 0.6.1 → 0.6.2
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/CHANGELOG.md +6 -0
- package/dist/index.js +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
package/dist/index.js
CHANGED
|
@@ -112,7 +112,7 @@ Preview:
|
|
|
112
112
|
|
|
113
113
|
`)}`}function af(e){if(!e)return null;let t=(typeof e==`string`?e:e.toString(`utf-8`)).replace(/\\/g,`/`).replace(/^\.\//,``).trim();return t.length>0?t:null}function of(e){let t=af(e.filename);if(e.kind===`memory-file`)return[`MEMORY.md`];if(e.kind===`memory-file-lower`)return[`memory.md`];if(e.kind===`memory-dir`){if(!t)return[`memory`];let e=U.basename(t).replace(/\\/g,`/`);return e.endsWith(`.md`)?[`memory/${e}`]:[]}return t?t===`MEMORY.md`||t===`memory.md`?[t]:t===`memory`?[`memory`]:t.startsWith(`memory/`)?t.endsWith(`.md`)?[t]:[`memory`]:[]:[`MEMORY.md`,`memory`]}function sf(e){let t=e.watchFactory??((e,t,n)=>W.watch(e,t,n)),n=U.join(e.dataDir,`.aimax`),r=[{target:U.join(n,`MEMORY.md`),kind:`memory-file`},{target:U.join(n,`memory.md`),kind:`memory-file-lower`},{target:U.join(n,`memory`),kind:`memory-dir`},{target:n,kind:`memory-root`}],i=[],a=new Set,o=null,s=Number.isFinite(e.debounceMs)&&(e.debounceMs??0)>0?Math.floor(e.debounceMs):1500,c=async()=>{let t=Array.from(a);if(a.clear(),t.length===0)return;let n={reason:`external-watch`,files:t,source:`memory`,sessionId:e.sessionId,providerId:e.providerId,timestamp:new Date().toISOString()};e.provider?.sync&&await e.provider.sync(`external-watch`).catch(()=>{}),e.provider?.onMemoryChanged&&await Promise.resolve(e.provider.onMemoryChanged(n)).catch(()=>{}),e.onMemoryChanged&&await Promise.resolve(e.onMemoryChanged(n)).catch(()=>{})},l=()=>{o&&clearTimeout(o),o=setTimeout(()=>{o=null,c()},s)};for(let e of r)try{let n=t(e.target,{recursive:!1},(t,n)=>{let r=of({kind:e.kind,filename:n});if(r.length!==0){for(let e of r)a.add(e);l()}});n.on?.(`error`,()=>{try{n.close()}catch{}}),i.push(n)}catch{}return()=>{o&&=(clearTimeout(o),null);for(let e of i)try{e.close()}catch{}}}async function cf(e){let{runParams:t,eventDispatcher:n,hookRegistry:r}=e,{sessionId:i,hookContext:a,memoryProviderId:o,memoryPluginId:s}=e,c=U.join(t.dataDir,`workspace`),l=new Map,u=new Map,d=!1,f=async e=>{let t=Date.now(),c=df(e.files);if(c.length===0)return;let d=e.reason===`external-watch`&&e.source===`memory`?c.filter(e=>t-(l.get(e.toLowerCase())??0)>3e3):c;if(d.length===0)return;if(e.reason!==`external-watch`&&e.source===`memory`)for(let e of d)l.set(e.toLowerCase(),t);let f=`${e.reason}|${e.source}|${d.map(e=>e.toLowerCase()).sort().join(`|`)}`;if(t-(u.get(f)??0)<1e3)return;u.set(f,t);let p={...e,files:d};if(p.reason===`appendRecent_route`||p.reason===`appendRecent_fallback`){let t=p.files.join(`, `),r=p.reason===`appendRecent_fallback`;await n.dispatchDiagnostic(e.sessionId??i,{level:r?`warn`:`info`,scope:`memory`,phase:p.reason,message:r?`memory_log fallback: wrote MEMORY.md instead of daily log (provider=${p.providerId??h.id})`:`memory_log routed to ${t} (provider=${p.providerId??h.id})`,details:{providerId:p.providerId??h.id,resolvedProviderId:m?.registration.id??h.id,requestedProviderId:o,requestedPluginId:s,target:t,supportsAppendRecent:typeof h.appendRecent==`function`}}).catch(()=>{})}await n.dispatchProgress(e.sessionId??i,{type:`memory_changed`,reason:p.reason,files:p.files,source:p.source,providerId:p.providerId,timestamp:p.timestamp}).catch(()=>{}),await r.dispatch(`memory_changed`,p,{...a,sessionId:p.sessionId??a.sessionId},{eventDispatcher:n}).catch(()=>{})},p=U.join(t.dataDir,`.aimax`),m=B({providerId:o,pluginId:s,dataDir:t.dataDir,memoryDir:p,sessionId:i,sessionStoreName:t.sessionStoreName}),h=m?.provider??A({dataDir:t.dataDir,memoryDir:p,sessionId:i,sessionStoreName:t.sessionStoreName}),g=m?.registration.id??h.id,_=m?.registration.pluginId;await n.dispatchDiagnostic(i,{level:`info`,scope:`memory`,phase:`memory_provider_resolved`,message:`memory provider resolved for run`,details:{providerId:g,pluginId:_,providerSource:m?`plugin`:`builtin`,requestedProviderId:o,requestedPluginId:s,fallbackToBuiltin:!m}}).catch(()=>{});let v=sf({dataDir:t.dataDir,sessionId:i,providerId:o??s??g,provider:h,onMemoryChanged:f});h.sync&&h.sync(`session-start`).catch(()=>{});let y=async e=>{await C(t.dataDir,i,e,uf({sessionOptions:Z(t),providerId:o,pluginId:s,onMemoryChanged:f}))};return{workspaceDir:c,memoryProviderId:o,memoryPluginId:s,appendTranscriptEntry:y,persistInitialUserEntry:async e=>d?!1:(await y({role:`user`,content:e,timestamp:new Date().toISOString()}),d=!0,!0),stop:()=>{v()}}}function lf(e){let t=new Date().toISOString();return{id:e.sessionId,title:e.title,channel:e.channel,createdAt:t,updatedAt:t}}function uf(e){return e.sessionOptions.storeName||e.sessionOptions.subagent||e.providerId||e.pluginId?{...e.sessionOptions,providerId:e.providerId,pluginId:e.pluginId,onMemoryChanged:e.onMemoryChanged}:{onMemoryChanged:e.onMemoryChanged}}function df(e){let t=[],n=new Set;for(let r of e){let e=r.replace(/\\/g,`/`).replace(/^\.\//,``).trim();if(!e)continue;let i=e.toLowerCase()===`memory.md`?`MEMORY.md`:e,a=i.toLowerCase();n.has(a)||(n.add(a),t.push(i))}return t}function ff(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function pf(e){return Array.isArray(e)?e.map(e=>typeof e==`string`?e.trim():``).filter(Boolean):[]}function mf(){let e=qe.homedir();if(typeof e!=`string`)return;let t=e.trim();return t.length>0?t:void 0}function hf(e){let t=e.trim(),n=mf();return t===`~`?n:t.startsWith(`~/`)||t.startsWith(`~\\`)?n?U.join(n,t.slice(2)):void 0:U.resolve(t)}const gf=new Xe({allErrors:!0,strict:!1}),_f=new Map;function vf(e,t){let n=_f.get(t);if(n)return n;let r=gf.compile(e);return _f.set(t,r),r}function yf(e){let t=e.cacheKey??JSON.stringify(e.schema),n=vf(e.schema,t);return n(e.value)?{ok:!0}:{ok:!1,errors:(n.errors??[]).map(e=>({path:e.instancePath||`/`,message:e.message??`invalid`}))}}function bf(e){let t=pf(e?.allow),n=pf(e?.deny),r=pf(e?.load?.paths),i=e?.entries??{},a=e?.slots??{};return{enabled:e?.enabled??!0,allow:Array.from(new Set(t)),deny:Array.from(new Set(n)),loadPaths:Array.from(new Set(r)),entries:i,slots:a}}function xf(e){let t=[],{config:n,registry:r}=e,i=new Set(r.manifests.keys()),a=(e,n)=>i.has(e)?!0:(t.push({level:`error`,message:`unknown plugin id in ${n}: ${e}`,pluginId:e}),!1);for(let e of n.allow)a(e,`plugins.allow`);for(let e of n.deny)a(e,`plugins.deny`);for(let e of Object.keys(n.entries))a(e,`plugins.entries`);let o=n.slots??{};for(let[e,n]of Object.entries(o)){if(!n||n===`none`||!a(n,`plugins.slots.${e}`))continue;let i=r.manifests.get(n);i?.manifest.kind?i.manifest.kind!==e&&t.push({level:`error`,message:`plugin ${n} does not declare kind ${e}`,pluginId:n}):t.push({level:`error`,message:`plugin ${n} does not declare kind ${e}`,pluginId:n})}for(let[e,i]of Object.entries(n.entries)){let n=r.manifests.get(e);if(!n)continue;let a=n.manifest.configSchema,o=yf({schema:a,cacheKey:`${e}:${n.manifestPath}`,value:i?.config??{}});if(!o.ok)for(let n of o.errors)t.push({level:`error`,message:`plugin config invalid (${e}) at ${n.path}: ${n.message}`,pluginId:e});i?.enabled===!1&&i?.config&&t.push({level:`warn`,message:`plugin config set while disabled: ${e}`,pluginId:e})}return{ok:t.every(e=>e.level!==`error`),diagnostics:t}}function Sf(e){try{return W.realpathSync(e)}catch{return null}}function Cf(e){try{return W.statSync(e)}catch{return null}}function wf(e,t){let n=U.relative(e,t);return n===``?!0:n.startsWith(`..`)?!1:!U.isAbsolute(n)}function Tf(e){return`0o${e.toString(8).padStart(3,`0`)}`}const Ef=new Set([`.ts`,`.js`,`.mts`,`.cts`,`.mjs`,`.cjs`]),Df=[`index.ts`,`index.js`,`index.mts`,`index.cts`,`index.mjs`,`index.cjs`];function Of(e){let t=U.join(e,`package.json`);if(W.existsSync(t))try{let e=JSON.parse(W.readFileSync(t,`utf-8`));return ff(e)?e:void 0}catch{return}}function kf(e){let t=e?.aimax?.extensions;if(!Array.isArray(t))return{status:`missing`,entries:[]};let n=t.map(e=>typeof e==`string`?e.trim():``).filter(Boolean);return n.length===0?{status:`empty`,entries:[]}:{status:`ok`,entries:n}}function Af(e){return e===void 0?process.platform===`win32`||typeof process.getuid!=`function`?null:process.getuid():e}function jf(e){let t=Sf(e.source),n=Sf(e.rootDir);return!t||!n||wf(n,t)?null:{reason:`source_escapes_root`,sourcePath:e.source,rootPath:e.rootDir,targetPath:e.source,sourceRealPath:t,rootRealPath:n}}function Mf(e){if(process.platform===`win32`)return null;let t=[e.rootDir,e.source],n=new Set;for(let r of t){let t=U.resolve(r);if(n.has(t))continue;n.add(t);let i=Cf(r);if(!i)return{reason:`path_stat_failed`,sourcePath:e.source,rootPath:e.rootDir,targetPath:r};let a=i.mode&511;if(a&2)return{reason:`path_world_writable`,sourcePath:e.source,rootPath:e.rootDir,targetPath:r,modeBits:a};if(e.origin!==`bundled`&&e.uid!==null&&typeof i.uid==`number`&&i.uid!==e.uid&&i.uid!==0)return{reason:`path_suspicious_ownership`,sourcePath:e.source,rootPath:e.rootDir,targetPath:r,foundUid:i.uid,expectedUid:e.uid}}return null}function Nf(e){return jf({source:e.source,rootDir:e.rootDir})||Mf({source:e.source,rootDir:e.rootDir,origin:e.origin,uid:Af(e.ownershipUid)})}function Pf(e){return e.reason===`source_escapes_root`?`blocked plugin candidate: source escapes plugin root (${e.sourcePath} -> ${e.sourceRealPath}; root=${e.rootRealPath})`:e.reason===`path_stat_failed`?`blocked plugin candidate: cannot stat path (${e.targetPath})`:e.reason===`path_world_writable`?`blocked plugin candidate: world-writable path (${e.targetPath}, mode=${Tf(e.modeBits??0)})`:`blocked plugin candidate: suspicious ownership (${e.targetPath}, uid=${e.foundUid}, expected uid=${e.expectedUid} or root)`}function Ff(e){let t=Nf({source:e.source,rootDir:e.rootDir,origin:e.origin,ownershipUid:e.ownershipUid});return t?(e.diagnostics.push({level:`warn`,message:Pf(t),source:e.source}),!0):!1}function If(e){return U.basename(e,U.extname(e))}function Lf(e){return{idHint:e.idHint,source:e.source,rootDir:e.rootDir,origin:e.origin,workspaceDir:e.workspaceDir,packageName:e.packageName,packageVersion:e.packageVersion,packageDescription:e.packageDescription,packageDir:e.packageDir,packageManifest:e.packageManifest}}function Rf(e){for(let t of Df){let n=U.join(e,t);if(W.existsSync(n))return n}return null}function zf(e){let t;try{t=W.readdirSync(e.rootDir,{withFileTypes:!0})}catch{return}for(let n of t){let t=U.join(e.rootDir,n.name);if(n.isFile()){if(!Ef.has(U.extname(n.name)))continue;let r=U.dirname(t);if(Ff({source:t,rootDir:r,origin:e.origin,diagnostics:e.diagnostics,ownershipUid:e.ownershipUid}))continue;e.candidates.push(Lf({idHint:If(t),source:t,rootDir:r,origin:e.origin,workspaceDir:e.workspaceDir}));continue}if(!n.isDirectory())continue;let r=Of(t),i=kf(r);if(i.status===`ok`){for(let n of i.entries){let i=U.resolve(t,n);if(!wf(t,i)){e.diagnostics.push({level:`warn`,message:`blocked plugin candidate: package entry escapes package root (${n})`,source:i});continue}if(!W.existsSync(i)){e.diagnostics.push({level:`warn`,message:`plugin entry missing: ${i}`,source:i});continue}if(!Ef.has(U.extname(i))){e.diagnostics.push({level:`warn`,message:`plugin entry not a supported extension: ${i}`,source:i});continue}if(Ff({source:i,rootDir:t,origin:e.origin,diagnostics:e.diagnostics,ownershipUid:e.ownershipUid}))continue;let a=r?.name?.trim(),o=a?`${a}/${If(i)}`:If(i);e.candidates.push(Lf({idHint:o,source:i,rootDir:t,origin:e.origin,workspaceDir:e.workspaceDir,packageName:r?.name,packageVersion:r?.version,packageDescription:r?.description,packageDir:t,packageManifest:r?.aimax}))}continue}let a=Rf(t);a&&(Ff({source:a,rootDir:t,origin:e.origin,diagnostics:e.diagnostics,ownershipUid:e.ownershipUid})||e.candidates.push(Lf({idHint:U.basename(t),source:a,rootDir:t,origin:e.origin,workspaceDir:e.workspaceDir})))}}function Bf(e){return e?e.map(hf).filter(e=>typeof e==`string`&&e.length>0):[]}function Vf(){let e=mf();if(e)return U.join(e,`.aimax`,`extensions`)}function Hf(e){return U.join(e,`.aimax`,`extensions`)}function Uf(e){return U.join(e,`.aimax`,`extensions`)}function Wf(e={}){let t=[],n=[],r=Bf(e.extraPaths);for(let i of r){if(!W.existsSync(i)){n.push({level:`warn`,message:`plugin path not found: ${i}`,source:i});continue}let r=Cf(i);if(!r){n.push({level:`warn`,message:`plugin path not readable: ${i}`,source:i});continue}if(r.isFile()){if(!Ef.has(U.extname(i))){n.push({level:`warn`,message:`plugin file has unsupported extension: ${i}`,source:i});continue}let r=U.dirname(i);if(Ff({source:i,rootDir:r,origin:`config`,diagnostics:n,ownershipUid:e.ownershipUid}))continue;t.push(Lf({idHint:If(i),source:i,rootDir:r,origin:`config`,workspaceDir:e.workspaceDir}));continue}r.isDirectory()&&zf({rootDir:i,origin:`config`,workspaceDir:e.workspaceDir,diagnostics:n,candidates:t,ownershipUid:e.ownershipUid})}e.dataDir?zf({rootDir:Hf(e.dataDir),origin:`workspace`,workspaceDir:e.workspaceDir,diagnostics:n,candidates:t,ownershipUid:e.ownershipUid}):e.workspaceDir&&zf({rootDir:Uf(e.workspaceDir),origin:`workspace`,workspaceDir:e.workspaceDir,diagnostics:n,candidates:t,ownershipUid:e.ownershipUid});let i=Vf();return i?zf({rootDir:i,origin:`global`,workspaceDir:e.workspaceDir,diagnostics:n,candidates:t,ownershipUid:e.ownershipUid}):n.push({level:`warn`,message:`skipping global plugin discovery: home directory is unavailable`}),e.bundledDir&&zf({rootDir:e.bundledDir,origin:`bundled`,workspaceDir:e.workspaceDir,diagnostics:n,candidates:t,ownershipUid:e.ownershipUid}),{candidates:t,diagnostics:n}}function Gf(e){let t=e.rejectHardlinks??!0,n=Sf(e.rootPath),r=Sf(e.absolutePath);if(!n||!r)return{ok:!1,reason:`path`};if(!wf(n,r))return{ok:!1,reason:`unsafe`};let i;try{i=W.lstatSync(r)}catch{return{ok:!1,reason:`stat`}}if(t&&typeof i.nlink==`number`&&i.nlink>1)return{ok:!1,reason:`hardlink`};try{return{ok:!0,fd:W.openSync(r,`r`)}}catch{return{ok:!1,reason:`path`}}}const Kf=`aimax.plugin.json`,qf=[Kf];function Jf(e){for(let t of qf){let n=U.join(e,t);if(W.existsSync(n))return n}return U.join(e,Kf)}function Yf(e,t=!0){let n=Jf(e),r=Gf({absolutePath:n,rootPath:e,rejectHardlinks:t});if(!r.ok){let e=r.reason;return e===`path`?{ok:!1,error:`plugin manifest not found: ${n}`,manifestPath:n}:{ok:!1,error:`unsafe plugin manifest path: ${n} (${e})`,manifestPath:n}}let i;try{i=JSON.parse(W.readFileSync(r.fd,`utf-8`))}catch(e){return{ok:!1,error:`failed to parse plugin manifest: ${String(e)}`,manifestPath:n}}finally{W.closeSync(r.fd)}if(!ff(i))return{ok:!1,error:`plugin manifest must be an object`,manifestPath:n};let a=typeof i.id==`string`?i.id.trim():``;if(!a)return{ok:!1,error:`plugin manifest requires id`,manifestPath:n};let o=ff(i.configSchema)?i.configSchema:null;if(!o)return{ok:!1,error:`plugin manifest requires configSchema`,manifestPath:n};let s=typeof i.kind==`string`?i.kind:void 0,c=typeof i.name==`string`?i.name.trim():void 0,l=typeof i.description==`string`?i.description.trim():void 0,u=typeof i.version==`string`?i.version.trim():void 0,d=pf(i.skills),f;return ff(i.uiHints)&&(f=i.uiHints),{ok:!0,manifest:{id:a,configSchema:o,kind:s,name:c,description:l,version:u,skills:d,uiHints:f},manifestPath:n}}function Xf(e){let t=new Map,n=[];for(let r of e){let e=Yf(r.rootDir);if(!e.ok){n.push({level:`error`,message:e.error,source:r.source,pluginId:r.idHint});continue}let i=e.manifest.id;if(t.has(i)){n.push({level:`warn`,message:`duplicate plugin id ignored: ${i}`,source:r.source,pluginId:i});continue}t.set(i,{id:i,rootDir:r.rootDir,source:r.source,origin:r.origin,manifestPath:e.manifestPath,manifest:e.manifest})}return{manifests:t,diagnostics:n}}let Zf=function(e){return e.INFO=`INFO`,e.WARN=`WARN`,e.ERROR=`ERROR`,e}({});function Qf(e,t,n,r){let i=`[plugin:${t}][logger:${n}] ${r}`;if(e===Zf.ERROR){Y.error(i);return}if(e===Zf.WARN){Y.warn(i);return}Y.info(i)}function $f(e){return{version:`0.1.0`,logging:{getLogger:t=>({info:n=>Qf(Zf.INFO,e.pluginId,t,n),warn:n=>Qf(Zf.WARN,e.pluginId,t,n),error:n=>Qf(Zf.ERROR,e.pluginId,t,n)})}}}function ep(e){if(!e.config.enabled)return!1;let t=e.config.entries[e.pluginId];if(t?.enabled===!1||e.config.deny.includes(e.pluginId)||e.config.allow.length>0&&!e.config.allow.includes(e.pluginId)||e.origin===`bundled`&&t?.enabled!==!0)return!1;if(e.kind&&e.config.slots?.[e.kind]){let t=e.config.slots[e.kind];if(t&&t!==`none`&&t!==e.pluginId)return!1}return!0}function tp(e){return{id:e.id,source:e.source,origin:e.origin,enabled:e.enabled,status:e.enabled?`loaded`:`disabled`,toolCount:0,hookCount:0,skills:e.skills,configSchema:e.configSchema}}function np(e){let t=[...e.registry.diagnostics],n=new Dd,r=new fr,i=[],a=[],o=e.runtime?.llm?mr({baseUrl:e.runtime.llm.baseUrl,apiKey:e.runtime.llm.apiKey,defaultModel:e.runtime.llm.model,hooks:r,hookCtx:e.runtime.hookCtx}):void 0,s=rp(e.runtime?.llmAllowlist),c=Ze(import.meta.url,{interopDefault:!0,requireCache:!1});for(let l of e.registry.manifests.values()){let u=ep({config:e.plugins,pluginId:l.id,origin:l.origin,kind:l.manifest.kind}),d=tp({id:l.id,source:l.source,origin:l.origin,enabled:u,configSchema:!0,skills:l.manifest.skills??[]});if(!u){a.push(d);continue}let f;try{f=c(l.source)}catch(e){d.status=`error`,d.error=String(e),t.push({level:`error`,message:`failed to load plugin ${l.id}: ${String(e)}`,pluginId:l.id,source:l.source}),a.push(d);continue}let p=f&&typeof f==`object`&&`default`in f?f.default:f,m=typeof p==`function`?p:p&&typeof p==`object`&&typeof p.register==`function`?p.register:void 0;if(!m){d.status=`error`,d.error=`plugin module does not export a register function`,t.push({level:`error`,message:`plugin ${l.id} has no register function`,pluginId:l.id,source:l.source}),a.push(d);continue}let h=$f({pluginId:l.id}),g=e.plugins.entries[l.id]?.config,_={id:l.id,source:l.source,rootDir:l.rootDir,config:g,runtime:h,llm:{chat:async e=>{if(!o)throw Error(`LLM client is not configured`);if(!ip(l.id,n,s))throw Error(`Plugin ${l.id} is not allowed to use LLM`);return o.chat(e)}},registerTool:(e,t)=>{n.register(l.id,e,t),d.toolCount+=1},registerUiTool:(e,t)=>{n.registerUiTool(l.id,e,t),d.toolCount+=1},registerEmbeddingProvider:e=>{if(l.manifest.kind!==`memory`)throw Error(`Plugin ${l.id} is not allowed to register embedding providers`);E({pluginId:l.id,id:e.id,create:e.create,config:g,rootDir:l.rootDir,source:l.source})},registerMemoryProvider:e=>{if(l.manifest.kind!==`memory`)throw Error(`Plugin ${l.id} is not allowed to register memory providers`);ne({pluginId:l.id,id:e.id,create:e.create,config:g,rootDir:l.rootDir,source:l.source})},registerHook:(e,t,n)=>{r.register({pluginId:l.id,hookName:e,handler:t,priority:n?.priority,source:l.source}),d.hookCount+=1},registerSkillDir:e=>{let t=U.isAbsolute(e)?e:U.resolve(l.rootDir,e);i.push(t)},createProgressEmitter:()=>dr(l.id)};try{m(_)}catch(e){d.status=`error`,d.error=String(e),t.push({level:`error`,message:`plugin ${l.id} registration failed: ${String(e)}`,pluginId:l.id,source:l.source})}if(l.manifest.skills&&l.manifest.skills.length>0)for(let e of l.manifest.skills){let t=U.isAbsolute(e)?e:U.resolve(l.rootDir,e);i.push(t)}a.push(d)}return{plugins:a,diagnostics:t,tools:n,hooks:r,skills:i}}function rp(e){return(e??[]).map(e=>e.trim()).filter(Boolean)}function ip(e,t,n){return n.length===0?!1:n.includes(e)?!0:t.namesForPlugin(e).some(e=>n.includes(e))}function ap(e={}){let t=bf(e.config),n=Wf({dataDir:e.dataDir,workspaceDir:e.workspaceDir,extraPaths:t.loadPaths,bundledDir:e.bundledDir,ownershipUid:e.ownershipUid}),r=Xf(n.candidates),i=xf({config:t,registry:r}),a=np({registry:r,plugins:t,workspaceDir:e.workspaceDir,runtime:e.runtime});return{registry:a,diagnostics:[...n.diagnostics,...r.diagnostics,...i.diagnostics,...a.diagnostics],normalizedConfig:t}}function op(e){let{runParams:t,hookContext:n,sessionId:r,eventDispatcher:i}=e,a=e=>{i.dispatchDiagnostic(r,e).catch(()=>void 0)},o=t.plugins?ap({...t.plugins,runtime:{llm:t.llm,hookCtx:n,llmAllowlist:t.plugins.llmAllowlist}}):void 0;if(!o)a({level:`info`,scope:`plugin`,phase:`plugin_system_disabled`,message:`plugin system disabled for this run`});else{a({level:o.diagnostics.some(e=>e.level===`error`)?`warn`:`info`,scope:`plugin`,phase:`plugin_system_initialized`,message:`plugin system initialized`,details:{pluginCount:o.registry.plugins.length,enabledPluginCount:o.registry.plugins.filter(e=>e.status===`loaded`).length,disabledPluginCount:o.registry.plugins.filter(e=>e.status===`disabled`).length,errorPluginCount:o.registry.plugins.filter(e=>e.status===`error`).length,diagnosticCount:o.diagnostics.length}});for(let e of o.registry.plugins)a({level:e.status===`error`?`error`:e.status===`disabled`?`warn`:`info`,scope:`plugin`,phase:`plugin_${e.status}`,message:e.status===`error`?`plugin failed to initialize`:e.status===`disabled`?`plugin disabled`:`plugin enabled`,details:{pluginId:e.id,origin:e.origin,toolCount:e.toolCount,hookCount:e.hookCount,skillCount:e.skills.length,source:e.source,errorMessage:e.error}});for(let e of o.diagnostics)a({level:e.level===`error`?`error`:`warn`,scope:`plugin`,phase:`plugin_diagnostic`,message:e.message,details:{pluginId:e.pluginId,source:e.source}})}return{hookRegistry:o?.registry.hooks??new fr,pluginSkillDirs:o?.registry.skills??[],pluginTools:[...o?.registry.tools.resolveEnabled(t.plugins?.toolAllowlist)??[],...o?.registry.tools.resolveUiTools(r,t.uiToolResume,t.plugins?.toolAllowlist)??[]],memoryPluginId:t.memory?.pluginId??o?.normalizedConfig.slots?.memory}}async function sp(e){let{runParams:t,requestedSessionId:n,eventDispatcher:r}=e,i=U.join(t.dataDir,`workspace`),a=n,o=!a,s=Z(t);a?(await u(t.dataDir,a,s)||(o=!0),await F(t.dataDir,a,s)):a=await w(t.dataDir,t.channel,{...s});let c={sessionId:a,workspaceDir:i,channel:t.channel},l=op({runParams:t,hookContext:c,sessionId:a,eventDispatcher:r}),d=l.hookRegistry,f=await cf({runParams:t,sessionId:a,hookContext:c,memoryProviderId:t.memory?.providerId,memoryPluginId:l.memoryPluginId,eventDispatcher:r,hookRegistry:d});return{sessionId:a,isNewSession:o,workspaceDir:i,hookContext:c,hookRegistry:d,pluginContext:l,runContext:f,start:e=>ns({sessionId:a,runParams:t,hookRegistry:d,hookContext:c,eventDispatcher:r,...e})}}function cp(e){return e===null||typeof e==`string`||typeof e==`number`||typeof e==`boolean`?e:JSON.stringify(e)??String(e)}function lp(e){if(!(e instanceof Error))return{errorValue:cp(e)};let t={errorName:e.name,errorMessage:e.message};e.stack&&(t.stack=e.stack);let n=e;for(let e of[`code`,`statusCode`,`statusText`,`providerMessage`,`retryable`,`cause`])n[e]!==void 0&&(t[e]=cp(n[e]));return t}async function up(e){await e.dispatcher.dispatchDiagnostic(e.sessionId,{level:`error`,scope:e.scope,phase:e.phase,message:e.message,details:{...e.details,...lp(e.error)}})}function dp(e,t,n){return U.join(l(e,t,n),`pending-hitl.json`)}function fp(e,t,n){return U.join(l(e,t,n),`hitl-history.jsonl`)}async function pp(e,t,n,r){let i=l(e,t,r);await H.mkdir(i,{recursive:!0});let a=dp(e,t,r),o=r?.encryptSessions??!1;await g(a,JSON.stringify(n,null,2),o)}async function mp(e,t,n,r){let i=l(e,t,r);await H.mkdir(i,{recursive:!0}),await z(fp(e,t,r),JSON.stringify(n)+`
|
|
114
114
|
`,r?.encryptSessions??!1)}async function hp(e,t,n){let r=await _(dp(e,t,n));if(r===null)return null;try{return JSON.parse(r)}catch{return null}}async function gp(e,t,n){let r=await _(fp(e,t,n));if(r===null)return[];let i=[];for(let e of r.split(`
|
|
115
|
-
`)){let t=e.trim();if(t)try{i.push(JSON.parse(t))}catch{}}return i}async function _p(e,t,n,r,i,a,o){let s=new Date().toISOString(),c={version:1,sessionId:t,request:n,status:`pending`,checkpoint:r,context:i,toolContext:a,createdAt:s,updatedAt:s};return await pp(e,t,c,o),await mp(e,t,{requestId:n.requestId,sessionId:t,action:`requested`,payload:n,timestamp:s},o),c}async function vp(e,t,n,r,i,a){let o=await hp(e,t,a);if(!o||o.request.requestId!==n||o.status!==`pending`)return null;let s=new Date().toISOString(),c={...o,status:r,resolution:i,updatedAt:s};await pp(e,t,c,a);let l={resolved:`resolved`,expired:`expired`,cancelled:`cancelled`}[r];return await mp(e,t,{requestId:n,sessionId:t,action:l,payload:i??o.request,timestamp:s},a),c}async function yp(e,t,n,r){let i=await hp(e,t,r);return!i||i.request.requestId!==n?null:i.status===`resolved`?i:null}async function bp(e,t,n){let r=dp(e,t,n);try{await H.unlink(r)}catch(e){if(e.code===`ENOENT`)return;throw e}}function xp(e,t,n){return U.join(l(e,t,n),`pending-ui-tool.json`)}async function Sp(e,t,n,r){let i=l(e,t,r);await H.mkdir(i,{recursive:!0}),await g(xp(e,t,r),JSON.stringify(n,null,2),r?.encryptSessions)}async function Cp(e,t,n){let r=await _(xp(e,t,n));return r===null?null:JSON.parse(r)}async function wp(e,t,n,r){let i=new Date().toISOString(),a={version:1,sessionId:t,request:n,status:`pending`,createdAt:i,updatedAt:i};return await Sp(e,t,a,r),a}async function Tp(e,t,n,r,i){let a=await Cp(e,t,i);if(!a||a.request.requestId!==n||a.status!==`pending`)return null;let o={...a,status:`resolved`,result:r,updatedAt:new Date().toISOString()};return await Sp(e,t,o,i),o}async function Ep(e,t,n){try{await H.unlink(xp(e,t,n))}catch(e){if(e.code===`ENOENT`)return;throw e}}const Dp=`crons`;function Op(e){return`messages`in e?{inputMode:`messages`,messagesCount:e.messages.length}:{inputMode:`text`,messageLength:e.message.length,messagePreview:si(e.message)}}function Vn(e,t,n,r){let i={"Client-Code":`AIMax`,"X-Session-Id":t};return n&&(i[`X-Message-Id`]=n),r&&(i[`X-Channel`]=r),{id:e.model,name:e.model,api:`openai-completions`,provider:`openai`,baseUrl:e.baseUrl,reasoning:!1,input:[`text`],cost:{input:0,output:0,cacheRead:0,cacheWrite:0},contextWindow:e.contextWindow??2e5,maxTokens:e.maxTokens??32768,headers:i,compat:{supportsStore:!1,supportsDeveloperRole:!1,supportsReasoningEffort:!1,supportsUsageInStreaming:!0}}}function kp(e){let t=e.hitlResume?.toolContext?.toolName;return!!(e.hitlResume&&e.hitlResume.checkpoint.phase===`before_tool`&&e.hitlResume.toolContext&&t&&!Se(t))}async function Ap(e){let t=e.params.hitlResume,n=t?.toolContext;if(!t||!n)throw Error(`before-tool HITL resume requires toolContext`);if(!(t.resolution.action===`submit`&&(t.resolution.values?.selectedChoiceIds?.includes(`approve`)??!1))){let t=`HITL approval denied; tool execution skipped.`;return await e.appendEntry({role:`assistant`,content:``,toolCalls:[{id:n.toolCallId,name:n.toolName,arguments:n.toolArgs}],timestamp:new Date().toISOString()}),await e.appendEntry({role:`tool_result`,toolCallId:n.toolCallId,toolName:n.toolName,content:t,isError:!0,timestamp:new Date().toISOString()}),{text:t,error:t}}let r=(Array.isArray(e.agent.state.tools)?e.agent.state.tools:[]).find(e=>e&&typeof e==`object`&&e.name===n.toolName&&typeof e.execute==`function`);if(!r)throw Error(`Cannot resume HITL tool call: tool not found: ${n.toolName}`);await e.appendEntry({role:`assistant`,content:``,toolCalls:[{id:n.toolCallId,name:n.toolName,arguments:n.toolArgs}],timestamp:new Date().toISOString()}),await e.eventDispatcher.dispatchProgress(e.sessionId,{type:`tool_start`,toolCallId:n.toolCallId,name:n.toolName,input:n.toolArgs});let i,a=!1;try{let t=kr();if(i=await Ar(t,async()=>await r.execute(n.toolCallId,n.toolArgs,e.abortSignal)),t.signal)throw t.signal;a=!!i?.isError}catch(e){if(Tr(e))throw e;a=!0,i={content:[{type:`text`,text:e instanceof Error?e.message:String(e)}],details:{}}}let o=jp(i),s=i&&typeof i==`object`?i.details:void 0,c=s&&typeof s==`object`?s.toolResultRef:void 0;return await e.eventDispatcher.dispatchProgress(e.sessionId,{type:`tool_end`,toolCallId:n.toolCallId,name:n.toolName,input:n.toolArgs,output:o,isError:a}),await e.appendEntry({role:`tool_result`,toolCallId:n.toolCallId,toolName:n.toolName,content:o,isError:a,...c?{toolResultRef:c}:{},timestamp:new Date().toISOString()}),{text:o,error:a?o:void 0}}function jp(e){if(typeof e==`string`)return e;if(!e||typeof e!=`object`)return JSON.stringify(e);let t=e.content;return Array.isArray(t)?t.filter(e=>e&&typeof e==`object`&&e.type===`text`).map(e=>e.text??``).join(``):JSON.stringify(e)}async function Mp(e,t){oi(e.dataDir),Zo();let n=Date.now(),i=new pr(e),a=Hs(e);Y.info(`agent invocation prepared`,{requestedSessionId:a.requestedSessionId,previousSessionId:a.previousSessionId,inputMode:a.inputMode,hasSlashCommand:!!a.slashCommandSource,resetAction:a.resetCommand?.action,resetShortCircuit:a.resetShortCircuit,transcriptLength:a.transcriptMessage.length,messageForRunLength:a.messageForRun?.length,depth:e.subagentContext?.depth,parentSessionId:e.subagentContext?.parentSessionId});let o=a.transcriptMessage,s=!1,c=a.previousSessionId,l=await sp({runParams:e,requestedSessionId:a.requestedSessionId,eventDispatcher:i}),u=l.sessionId,d=l.isNewSession,f=l.workspaceDir,p=l.hookContext,m=l.hookRegistry,h=l.pluginContext,g=l.runContext,_=(await r(e.dataDir,u,{storeName:e.sessionStoreName})).length;Y.info(`agent run started`,{sessionId:u,requestedSessionId:a.requestedSessionId,previousSessionId:c,channel:e.channel,messageId:e.messageId,sessionStoreName:e.sessionStoreName,isNewSession:d,hasPlugins:!!e.plugins,hasMemory:!!e.memory,depth:e.subagentContext?.depth,parentSessionId:e.subagentContext?.parentSessionId}),await i.dispatchDiagnostic(u,{level:`info`,scope:`runner`,phase:`run_started`,message:`agent run started`,details:{channel:e.channel,isNewSession:d,hasMessageId:!!e.messageId,hasPlugins:!!e.plugins,hasMemory:!!e.memory}}),Y.info(d?`session created`:`session resumed`,{sessionId:u,requestedSessionId:a.requestedSessionId,previousSessionId:c,workspaceDir:f}),await i.dispatchDiagnostic(u,{level:`info`,scope:`session`,phase:d?`session_created`:`session_resumed`,message:d?`session created`:`session resumed`,details:{requestedSessionId:a.requestedSessionId,previousSessionId:c,workspaceDir:f}}),d&&await D(e.dataDir,lf({sessionId:u,title:ts(o),channel:e.channel}),Z(e)),a.resetCommand&&!e.hitlResume&&!e.uiToolResume&&(s=await g.persistInitialUserEntry(o)),await l.start({resetCommand:a.resetCommand,previousSessionId:c,resetMessage:a.slashCommandSource,startMessage:typeof a.promptInput==`string`?a.promptInput:o});let v=new AbortController;e.abortSignal?.aborted?v.abort():e.abortSignal?.addEventListener(`abort`,()=>v.abort());let y=await nt(e.dataDir),b=[],x=at(y,{warn:e=>b.push(e)}),S=await ct();await i.dispatchDiagnostic(u,{level:b.length>0?`warn`:`info`,scope:`runner`,phase:`bootstrap_loaded`,message:`bootstrap context loaded`,details:{bootstrapFileCount:y.length,contextFileCount:x.length,warningCount:b.length}}),Y.info(`bootstrap context loaded`,{sessionId:u,bootstrapFileCount:y.length,contextFileCount:x.length,warningCount:b.length});let C=e.skillsLoadPaths??[],w=await mt(e.dataDir,h.pluginSkillDirs,C),T=await Jn({dataDir:e.dataDir,projectDir:e.projectDir,systemAgentsDir:e.systemAgentsDir,agentPolicy:e.agentPolicy}),E=T.stats(),O=e.agentPolicy?.activeAgent??T.findPublic(e.agentPolicy?.requestedAgentName);if(e.agentPolicy?.requestedAgentName&&!O)throw Error(`Unknown custom agent: ${e.agentPolicy.requestedAgentName}`);let k={...T,...O?{activeAgent:O}:{},...e.agentPolicy?.requestedAgentName?{requestedAgentName:e.agentPolicy.requestedAgentName}:{}},ee={...e,agentPolicy:k};await i.dispatchDiagnostic(u,{level:`info`,scope:`skill`,phase:`skills_loaded`,message:`skills loaded`,details:{skillCount:w.length,pluginSkillDirCount:h.pluginSkillDirs.length,skillsLoadPathCount:C.length,skills:w.map(e=>({name:e.name,description:e.description,location:e.location}))}}),Y.info(`skills loaded`,{sessionId:u,skillCount:w.length,pluginSkillDirCount:h.pluginSkillDirs.length,skillsLoadPathCount:C.length}),await i.dispatchDiagnostic(u,{level:`info`,scope:`runner`,phase:`agents_loaded`,message:`custom agents loaded`,details:{agentCount:E.public,allAgentCount:E.total,internalAgentCount:E.internal,activeAgent:k.activeAgent?.name,agents:T.availableAgents.map(e=>({name:e.name,description:e.description,source:e.source,sourcePath:e.sourcePath}))}}),Y.info(`custom agents loaded`,{sessionId:u,agentCount:E.public,allAgentCount:E.total,internalAgentCount:E.internal,activeAgent:k.activeAgent?.name,requestedAgentName:k.requestedAgentName});let A=await Np({dataDir:e.dataDir,sessionId:u,eventDispatcher:i,enabled:e.autoSkills?.load?.enabled===!0}),j=e=>g.appendTranscriptEntry(e),M=await Ws({invocation:a,skills:w,sessionId:u,isNewSession:d,initialUserEntryPersisted:s,runParams:e,hookRegistry:m,hookContext:p,startTime:n,eventDispatcher:i});if(M.kind===`completed`)return Y.info(`agent run short-circuited`,{sessionId:u,durationMs:Date.now()-n,hasError:!!M.result.error,paused:!!M.result.paused,uiToolPending:!!M.result.uiToolPending,textLength:M.result.text.length}),M.result;let N=M.effectivePrompt;o=M.transcriptMessage;let te=typeof N==`string`?N:o;await i.dispatchDiagnostic(u,{level:`info`,scope:`runner`,phase:`invocation_resolved`,message:`invocation resolved`,details:{promptType:typeof N==`string`?`string`:`messages`,transcriptLength:o.length}}),Y.info(`invocation resolved`,{sessionId:u,promptType:typeof N==`string`?`string`:`messages`,transcriptLength:o.length});let P=await Qd({session:{runParams:ee,sessionId:u,hookRegistry:m,hookContext:p,runContext:g,eventDispatcher:i},runtimeInputs:{contextFiles:x,bootstrapWarnings:b,skills:w,autoSkillCategories:A,effectivePromptText:te,pluginTools:h.pluginTools,pluginSkillDirs:h.pluginSkillDirs,skillsLoadPaths:C,presetSystemPrompt:S.presetSystemPrompt},dependencies:{registry:t,spawnFn:e=>Mp(e,new Do),createModel:Vn,abortSignal:v.signal}}),F=P.agent,I=P.resolvedModelId;await i.dispatchDiagnostic(u,{level:`info`,scope:`runner`,phase:`runtime_created`,message:`agent runtime created`,details:{modelId:I,historyMessageCount:P.historyMessages.length,pluginToolCount:h.pluginTools.length}}),Y.info(`agent runtime created`,{sessionId:u,modelId:I,historyMessageCount:P.historyMessages.length,pluginToolCount:h.pluginTools.length}),v.signal.addEventListener(`abort`,()=>F.abort());let L=0,R=0,z=``,B,ne=!1;try{if(kp(e)){let t=await Ap({params:e,agent:F,sessionId:u,eventDispatcher:i,appendEntry:j,abortSignal:v.signal});return z=t.text,as({sessionId:u,isNewSession:d,transcriptMessage:o,runParams:e,hookRegistry:m,hookContext:p,startTime:n,eventDispatcher:i,text:z,usage:{input:0,output:0,total:0},error:t.error})}if(!e.hitlResume&&!e.uiToolResume){let e=await g.persistInitialUserEntry(o);ne=e,s=e||s}await i.dispatchDiagnostic(u,{level:`info`,scope:`runner`,phase:`first_turn_started`,message:`first agent turn started`}),Y.info(`first agent turn started`,{sessionId:u,modelId:I});let r=await ci({agent:F,message:N,continueFromHistory:!!e.uiToolResume,sessionId:u,modelId:I,historyMessages:P.historyMessages,eventDispatcher:i,hooks:m,hookCtx:p,abortSignal:v.signal,retry:e.llmRetry,onTurnRecordProduced:async(e,t)=>{e&&await j(e);for(let e of t)await j(e)}});z=r.text,L+=r.inputTokens,R+=r.outputTokens,r.error&&(B=r.error),await i.dispatchDiagnostic(u,{level:r.error?`warn`:`info`,scope:`runner`,phase:`first_turn_completed`,message:`first agent turn completed`,details:{hasError:!!r.error,error:r.error,inputTokens:r.inputTokens,outputTokens:r.outputTokens}});let a={sessionId:u,hasError:!!r.error,error:r.error,inputTokens:r.inputTokens,outputTokens:r.outputTokens};r.error?Y.warn(`first agent turn completed with error`,a):Y.info(`first agent turn completed`,a),await i.dispatchDiagnostic(u,{level:`info`,scope:`runner`,phase:`announce_loop_started`,message:`announce loop started`}),Y.info(`announce loop started`,{sessionId:u});let c=await nf({agent:F,registry:t,sessionId:u,resolvedModelId:I,eventDispatcher:i,hookRegistry:m,hookContext:p,abortSignal:v.signal,retry:e.llmRetry,appendEntry:j});c.text&&(z=c.text),L+=c.inputTokens,R+=c.outputTokens,c.error&&!B&&(B=c.error),await i.dispatchDiagnostic(u,{level:c.error?`warn`:`info`,scope:`runner`,phase:`announce_loop_completed`,message:`announce loop completed`,details:{hasError:!!c.error,error:c.error,inputTokens:c.inputTokens,outputTokens:c.outputTokens}});let l={sessionId:u,hasError:!!c.error,error:c.error,inputTokens:c.inputTokens,outputTokens:c.outputTokens};c.error?Y.warn(`announce loop completed with error`,l):Y.info(`announce loop completed`,l)}catch(t){if(Tr(t)){let r=t,a=e.subagentContext?.parentSessionId??u,s=a===r.request.sessionId?r.request:{...r.request,sessionId:a};await _p(e.dataDir,a,s,r.checkpoint,{agentId:e.subagentContext?`subagent-depth-${e.subagentContext.depth}`:void 0,channel:e.channel,parentSessionId:e.subagentContext?.parentSessionId,depth:e.subagentContext?.depth},r.toolContext),await i.dispatchProgress(a,{type:`hitl_requested`,request:s}),await i.dispatchDiagnostic(u,{level:`info`,scope:`runner`,phase:`hitl_paused`,message:`agent paused for HITL: ${r.request.kind} — ${r.request.title}`,details:{requestId:s.requestId,kind:s.kind,checkpointPhase:r.checkpoint.phase,bubbledToParent:!!e.subagentContext?.parentSessionId}}),Y.info(`agent paused for HITL`,{sessionId:u,requestId:s.requestId,kind:s.kind,checkpointPhase:r.checkpoint.phase,bubbledToParent:!!e.subagentContext?.parentSessionId});let c={input:L,output:R,total:L+R};return await Pp({runtime:P,resolvedModelId:I,usage:c,currentUserEntryCoveredByUsage:ne}),as({sessionId:u,isNewSession:d,transcriptMessage:o,runParams:e,hookRegistry:m,hookContext:p,startTime:n,eventDispatcher:i,text:z||`[HITL paused] ${r.request.title}: ${r.request.prompt}`,usage:c,error:void 0,paused:{requestId:s.requestId,kind:s.kind,title:s.title}})}if(Dr(t)){let r=t,a=r.request.outputSchema.properties??{};await wp(e.dataDir,u,r.request,Z(e)),await i.dispatchProgress(u,{type:`ui_tool_request`,request:r.request}),await i.dispatchDiagnostic(u,{level:`info`,scope:`tool`,phase:`ui_tool_paused`,message:`agent paused for UI tool input: ${r.request.toolName}`,details:{requestId:r.request.requestId,toolName:r.request.toolName,toolCallId:r.request.toolCallId,outputSchemaTitle:r.request.outputSchema.title,propertyCount:Object.keys(a).length}}),Y.info(`agent paused for UI tool input`,{sessionId:u,requestId:r.request.requestId,toolName:r.request.toolName,toolCallId:r.request.toolCallId,outputSchemaTitle:r.request.outputSchema.title,propertyCount:Object.keys(a).length});let s={input:L,output:R,total:L+R};return await Pp({runtime:P,resolvedModelId:I,usage:s,currentUserEntryCoveredByUsage:ne}),as({sessionId:u,isNewSession:d,transcriptMessage:o,runParams:e,hookRegistry:m,hookContext:p,startTime:n,eventDispatcher:i,text:z||``,usage:s,error:void 0,uiToolPending:{requestId:r.request.requestId,toolName:r.request.toolName,toolCallId:r.request.toolCallId,outputSchema:r.request.outputSchema,extra:r.request.extra}})}throw await up({dispatcher:i,sessionId:u,scope:`runner`,phase:`run_failed`,message:`agent run failed`,error:t,details:{channel:e.channel,isNewSession:d}}),Y.error(`agent run failed`,{sessionId:u,channel:e.channel,isNewSession:d,error:t instanceof Error?t.message:String(t)}),t}finally{Ao(u),g.stop()}let V={input:L,output:R,total:L+R};await i.dispatchDiagnostic(u,{level:B?`warn`:`info`,scope:`runner`,phase:`run_completed`,message:`agent run completed`,details:{durationMs:Date.now()-n,inputTokens:V.input,outputTokens:V.output,totalTokens:V.total,hasError:!!B,error:B}});let re={sessionId:u,durationMs:Date.now()-n,inputTokens:V.input,outputTokens:V.output,totalTokens:V.total,hasError:!!B,error:B};return B?Y.warn(`agent run completed with error`,re):Y.info(`agent run completed`,re),await Pp({runtime:P,resolvedModelId:I,usage:V,currentUserEntryCoveredByUsage:ne}),await ao({sessionId:u,runParams:ee,eventDispatcher:i,transcriptStartIndex:_,result:{text:z,usage:V,durationMs:Date.now()-n,error:B}}),as({sessionId:u,isNewSession:d,transcriptMessage:o,runParams:e,hookRegistry:m,hookContext:p,startTime:n,eventDispatcher:i,text:z,usage:V,error:B})}async function Np(e){if(!e.enabled)return[];try{let t=await new q({dataDir:e.dataDir}).autoSkillCategories();return t.length===0?[]:(await e.eventDispatcher.dispatchDiagnostic(e.sessionId,{level:`info`,scope:`skill`,phase:`auto_skills_loaded`,message:`auto-skill categories loaded`,details:{categoryCount:t.length,categories:t.map(e=>({path:e.path,description:e.description}))}}),t)}catch(t){return await e.eventDispatcher.dispatchDiagnostic(e.sessionId,{level:`warn`,scope:`skill`,phase:`auto_skills_load_failed`,message:`auto-skill categories failed to load`,details:{error:t instanceof Error?t.message:String(t)}}),[]}}async function Pp(e){let{runtime:t,resolvedModelId:n,usage:r,currentUserEntryCoveredByUsage:i}=e;r.input<=0&&r.total<=0||await t.contextManager.recordModelUsage({model:n,inputTokens:r.input,outputTokens:r.output,totalTokens:r.total,coveredTranscriptEntryCount:t.usageBaselineTranscriptEntryCount+(i?1:0)})}async function Fp(t){oi(t.dataDir);let n=Date.now(),r=new pr(t),i=Hs(t),a=i.transcriptMessage.trim()||`CRON task`,o=t.sessionStoreName;Y.info(`cron run started`,{requestedSessionId:i.requestedSessionId,channel:t.channel,sessionStoreName:o,...Op(t)});let c=i.requestedSessionId,l=!c;c?(await u(t.dataDir,c,{storeName:o})||(l=!0),await F(t.dataDir,c,{storeName:o})):c=await w(t.dataDir,t.channel,{storeName:o}),l&&await D(t.dataDir,lf({sessionId:c,title:ts(a),channel:t.channel}),{storeName:o});let d=await w(t.dataDir,t.channel,{storeName:Dp});await r.dispatchProgress(c,{type:`subagent_spawn`,childSessionId:d,task:a}),Y.info(`cron child subagent spawned`,{parentSessionId:c,childSessionId:d,taskLength:a.length,taskPreview:si(a)});let f={...t,sessionId:d,sessionStoreName:Dp,subagentContext:{depth:1,parentSessionId:c}},m,h=`done`;try{m=await Mp(f,new Do),m.error&&(h=`error`)}catch(e){let r=e instanceof Error?e.message:String(e);m={sessionId:d,text:``,usage:{input:0,output:0,total:0},durationMs:Date.now()-n,error:r,context:{snapshotPath:T(t.dataDir,d,{storeName:Dp}),toolResultsDir:s(t.dataDir,d,{storeName:Dp})}},h=`error`,Y.error(`cron child run failed`,{parentSessionId:c,childSessionId:d,error:r})}await r.dispatchProgress(c,{type:`subagent_complete`,childSessionId:d,task:a,status:h}),Y.info(`cron child subagent completed`,{parentSessionId:c,childSessionId:d,status:h,durationMs:Date.now()-n,hasError:!!m.error});let g=Hu({task:a,status:h,result:m.text,error:m.error}),_=new Date().toISOString();await C(t.dataDir,c,{role:`assistant`,content:g,timestamp:_,source:`cron`},{storeName:o});let v={task:a,status:h,content:g,childSessionId:d,createdAt:_};return await S(t.dataDir,c,v,{storeName:o}),await e(t.dataDir,c,e=>Ip(e,8),{storeName:o}),await p(t.dataDir,c,{},{storeName:o}),{...m,sessionId:c,context:{snapshotPath:T(t.dataDir,c,{storeName:o}),toolResultsDir:s(t.dataDir,c,{storeName:o})}}}function Ip(e,t){if(t<=0)return e.filter(e=>!Lp(e));let n=e.reduce((e,t,n)=>(Lp(t)&&e.push(n),e),[]);if(n.length<=t)return e;let r=new Set(n.slice(-t));return e.filter((e,t)=>!Lp(e)||r.has(t))}function Lp(e){return`source`in e&&e.source===`cron`}async function Rp(e,t){if(oi(e.dataDir),Y.info(`agent request received`,{dataDir:e.dataDir,projectDir:e.projectDir,sessionId:e.sessionId,messageId:e.messageId,channel:e.channel,sessionStoreName:e.sessionStoreName,hasHitlResume:!!e.hitlResume,hasUiToolResume:!!e.uiToolResume,isSubagent:!!e.subagentContext,depth:e.subagentContext?.depth,parentSessionId:e.subagentContext?.parentSessionId,hasPlugins:!!e.plugins,hasMemory:!!e.memory,...Op(e)}),e.channel===`CRON`&&!e.subagentContext)return Fp(e);let n=t??new Do;try{return await Mp(e,n)}catch(t){throw e.onProgress&&await e.onProgress({type:`diagnostic`,level:`error`,scope:`runner`,phase:`run_crashed`,message:`agent run crashed before completion`,details:lp(t)}),Y.error(`agent run crashed before completion`,{sessionId:e.sessionId,channel:e.channel,messageId:e.messageId,error:t instanceof Error?t.message:String(t)}),t}}const zp={"AGENTS.md":`---
|
|
115
|
+
`)){let t=e.trim();if(t)try{i.push(JSON.parse(t))}catch{}}return i}async function _p(e,t,n,r,i,a,o){let s=new Date().toISOString(),c={version:1,sessionId:t,request:n,status:`pending`,checkpoint:r,context:i,toolContext:a,createdAt:s,updatedAt:s};return await pp(e,t,c,o),await mp(e,t,{requestId:n.requestId,sessionId:t,action:`requested`,payload:n,timestamp:s},o),c}async function vp(e,t,n,r,i,a){let o=await hp(e,t,a);if(!o||o.request.requestId!==n||o.status!==`pending`)return null;let s=new Date().toISOString(),c={...o,status:r,resolution:i,updatedAt:s};await pp(e,t,c,a);let l={resolved:`resolved`,expired:`expired`,cancelled:`cancelled`}[r];return await mp(e,t,{requestId:n,sessionId:t,action:l,payload:i??o.request,timestamp:s},a),c}async function yp(e,t,n,r){let i=await hp(e,t,r);return!i||i.request.requestId!==n?null:i.status===`resolved`?i:null}async function bp(e,t,n){let r=dp(e,t,n);try{await H.unlink(r)}catch(e){if(e.code===`ENOENT`)return;throw e}}function xp(e,t,n){return U.join(l(e,t,n),`pending-ui-tool.json`)}async function Sp(e,t,n,r){let i=l(e,t,r);await H.mkdir(i,{recursive:!0}),await g(xp(e,t,r),JSON.stringify(n,null,2),r?.encryptSessions)}async function Cp(e,t,n){let r=await _(xp(e,t,n));return r===null?null:JSON.parse(r)}async function wp(e,t,n,r){let i=new Date().toISOString(),a={version:1,sessionId:t,request:n,status:`pending`,createdAt:i,updatedAt:i};return await Sp(e,t,a,r),a}async function Tp(e,t,n,r,i){let a=await Cp(e,t,i);if(!a||a.request.requestId!==n||a.status!==`pending`)return null;let o={...a,status:`resolved`,result:r,updatedAt:new Date().toISOString()};return await Sp(e,t,o,i),o}async function Ep(e,t,n){try{await H.unlink(xp(e,t,n))}catch(e){if(e.code===`ENOENT`)return;throw e}}const Dp=`crons`;function Op(e){return`messages`in e?{inputMode:`messages`,messagesCount:e.messages.length}:{inputMode:`text`,messageLength:e.message.length,messagePreview:si(e.message)}}function kp(e){let t=e.hitlResume?.toolContext?.toolName;return!!(e.hitlResume&&e.hitlResume.checkpoint.phase===`before_tool`&&e.hitlResume.toolContext&&t&&!Se(t))}async function Ap(e){let t=e.params.hitlResume,n=t?.toolContext;if(!t||!n)throw Error(`before-tool HITL resume requires toolContext`);if(!(t.resolution.action===`submit`&&(t.resolution.values?.selectedChoiceIds?.includes(`approve`)??!1))){let t=`HITL approval denied; tool execution skipped.`;return await e.appendEntry({role:`assistant`,content:``,toolCalls:[{id:n.toolCallId,name:n.toolName,arguments:n.toolArgs}],timestamp:new Date().toISOString()}),await e.appendEntry({role:`tool_result`,toolCallId:n.toolCallId,toolName:n.toolName,content:t,isError:!0,timestamp:new Date().toISOString()}),{text:t,error:t}}let r=(Array.isArray(e.agent.state.tools)?e.agent.state.tools:[]).find(e=>e&&typeof e==`object`&&e.name===n.toolName&&typeof e.execute==`function`);if(!r)throw Error(`Cannot resume HITL tool call: tool not found: ${n.toolName}`);await e.appendEntry({role:`assistant`,content:``,toolCalls:[{id:n.toolCallId,name:n.toolName,arguments:n.toolArgs}],timestamp:new Date().toISOString()}),await e.eventDispatcher.dispatchProgress(e.sessionId,{type:`tool_start`,toolCallId:n.toolCallId,name:n.toolName,input:n.toolArgs});let i,a=!1;try{let t=kr();if(i=await Ar(t,async()=>await r.execute(n.toolCallId,n.toolArgs,e.abortSignal)),t.signal)throw t.signal;a=!!i?.isError}catch(e){if(Tr(e))throw e;a=!0,i={content:[{type:`text`,text:e instanceof Error?e.message:String(e)}],details:{}}}let o=jp(i),s=i&&typeof i==`object`?i.details:void 0,c=s&&typeof s==`object`?s.toolResultRef:void 0;return await e.eventDispatcher.dispatchProgress(e.sessionId,{type:`tool_end`,toolCallId:n.toolCallId,name:n.toolName,input:n.toolArgs,output:o,isError:a}),await e.appendEntry({role:`tool_result`,toolCallId:n.toolCallId,toolName:n.toolName,content:o,isError:a,...c?{toolResultRef:c}:{},timestamp:new Date().toISOString()}),{text:o,error:a?o:void 0}}function jp(e){if(typeof e==`string`)return e;if(!e||typeof e!=`object`)return JSON.stringify(e);let t=e.content;return Array.isArray(t)?t.filter(e=>e&&typeof e==`object`&&e.type===`text`).map(e=>e.text??``).join(``):JSON.stringify(e)}async function Mp(e,t){oi(e.dataDir),Zo();let n=Date.now(),i=new pr(e),a=Hs(e);Y.info(`agent invocation prepared`,{requestedSessionId:a.requestedSessionId,previousSessionId:a.previousSessionId,inputMode:a.inputMode,hasSlashCommand:!!a.slashCommandSource,resetAction:a.resetCommand?.action,resetShortCircuit:a.resetShortCircuit,transcriptLength:a.transcriptMessage.length,messageForRunLength:a.messageForRun?.length,depth:e.subagentContext?.depth,parentSessionId:e.subagentContext?.parentSessionId});let o=a.transcriptMessage,s=!1,c=a.previousSessionId,l=await sp({runParams:e,requestedSessionId:a.requestedSessionId,eventDispatcher:i}),u=l.sessionId,d=l.isNewSession,f=l.workspaceDir,p=l.hookContext,m=l.hookRegistry,h=l.pluginContext,g=l.runContext,_=(await r(e.dataDir,u,{storeName:e.sessionStoreName})).length;Y.info(`agent run started`,{sessionId:u,requestedSessionId:a.requestedSessionId,previousSessionId:c,channel:e.channel,messageId:e.messageId,sessionStoreName:e.sessionStoreName,isNewSession:d,hasPlugins:!!e.plugins,hasMemory:!!e.memory,depth:e.subagentContext?.depth,parentSessionId:e.subagentContext?.parentSessionId}),await i.dispatchDiagnostic(u,{level:`info`,scope:`runner`,phase:`run_started`,message:`agent run started`,details:{channel:e.channel,isNewSession:d,hasMessageId:!!e.messageId,hasPlugins:!!e.plugins,hasMemory:!!e.memory}}),Y.info(d?`session created`:`session resumed`,{sessionId:u,requestedSessionId:a.requestedSessionId,previousSessionId:c,workspaceDir:f}),await i.dispatchDiagnostic(u,{level:`info`,scope:`session`,phase:d?`session_created`:`session_resumed`,message:d?`session created`:`session resumed`,details:{requestedSessionId:a.requestedSessionId,previousSessionId:c,workspaceDir:f}}),d&&await D(e.dataDir,lf({sessionId:u,title:ts(o),channel:e.channel}),Z(e)),a.resetCommand&&!e.hitlResume&&!e.uiToolResume&&(s=await g.persistInitialUserEntry(o)),await l.start({resetCommand:a.resetCommand,previousSessionId:c,resetMessage:a.slashCommandSource,startMessage:typeof a.promptInput==`string`?a.promptInput:o});let v=new AbortController;e.abortSignal?.aborted?v.abort():e.abortSignal?.addEventListener(`abort`,()=>v.abort());let y=await nt(e.dataDir),b=[],x=at(y,{warn:e=>b.push(e)}),S=await ct();await i.dispatchDiagnostic(u,{level:b.length>0?`warn`:`info`,scope:`runner`,phase:`bootstrap_loaded`,message:`bootstrap context loaded`,details:{bootstrapFileCount:y.length,contextFileCount:x.length,warningCount:b.length}}),Y.info(`bootstrap context loaded`,{sessionId:u,bootstrapFileCount:y.length,contextFileCount:x.length,warningCount:b.length});let C=e.skillsLoadPaths??[],w=await mt(e.dataDir,h.pluginSkillDirs,C),T=await Jn({dataDir:e.dataDir,projectDir:e.projectDir,systemAgentsDir:e.systemAgentsDir,agentPolicy:e.agentPolicy}),E=T.stats(),O=e.agentPolicy?.activeAgent??T.findPublic(e.agentPolicy?.requestedAgentName);if(e.agentPolicy?.requestedAgentName&&!O)throw Error(`Unknown custom agent: ${e.agentPolicy.requestedAgentName}`);let k={...T,...O?{activeAgent:O}:{},...e.agentPolicy?.requestedAgentName?{requestedAgentName:e.agentPolicy.requestedAgentName}:{}},ee={...e,agentPolicy:k};await i.dispatchDiagnostic(u,{level:`info`,scope:`skill`,phase:`skills_loaded`,message:`skills loaded`,details:{skillCount:w.length,pluginSkillDirCount:h.pluginSkillDirs.length,skillsLoadPathCount:C.length,skills:w.map(e=>({name:e.name,description:e.description,location:e.location}))}}),Y.info(`skills loaded`,{sessionId:u,skillCount:w.length,pluginSkillDirCount:h.pluginSkillDirs.length,skillsLoadPathCount:C.length}),await i.dispatchDiagnostic(u,{level:`info`,scope:`runner`,phase:`agents_loaded`,message:`custom agents loaded`,details:{agentCount:E.public,allAgentCount:E.total,internalAgentCount:E.internal,activeAgent:k.activeAgent?.name,agents:T.availableAgents.map(e=>({name:e.name,description:e.description,source:e.source,sourcePath:e.sourcePath}))}}),Y.info(`custom agents loaded`,{sessionId:u,agentCount:E.public,allAgentCount:E.total,internalAgentCount:E.internal,activeAgent:k.activeAgent?.name,requestedAgentName:k.requestedAgentName});let A=await Np({dataDir:e.dataDir,sessionId:u,eventDispatcher:i,enabled:e.autoSkills?.load?.enabled===!0}),j=e=>g.appendTranscriptEntry(e),M=await Ws({invocation:a,skills:w,sessionId:u,isNewSession:d,initialUserEntryPersisted:s,runParams:e,hookRegistry:m,hookContext:p,startTime:n,eventDispatcher:i});if(M.kind===`completed`)return Y.info(`agent run short-circuited`,{sessionId:u,durationMs:Date.now()-n,hasError:!!M.result.error,paused:!!M.result.paused,uiToolPending:!!M.result.uiToolPending,textLength:M.result.text.length}),M.result;let N=M.effectivePrompt;o=M.transcriptMessage;let te=typeof N==`string`?N:o;await i.dispatchDiagnostic(u,{level:`info`,scope:`runner`,phase:`invocation_resolved`,message:`invocation resolved`,details:{promptType:typeof N==`string`?`string`:`messages`,transcriptLength:o.length}}),Y.info(`invocation resolved`,{sessionId:u,promptType:typeof N==`string`?`string`:`messages`,transcriptLength:o.length});let P=await Qd({session:{runParams:ee,sessionId:u,hookRegistry:m,hookContext:p,runContext:g,eventDispatcher:i},runtimeInputs:{contextFiles:x,bootstrapWarnings:b,skills:w,autoSkillCategories:A,effectivePromptText:te,pluginTools:h.pluginTools,pluginSkillDirs:h.pluginSkillDirs,skillsLoadPaths:C,presetSystemPrompt:S.presetSystemPrompt},dependencies:{registry:t,spawnFn:e=>Mp(e,new Do),createModel:Vn,abortSignal:v.signal}}),F=P.agent,I=P.resolvedModelId;await i.dispatchDiagnostic(u,{level:`info`,scope:`runner`,phase:`runtime_created`,message:`agent runtime created`,details:{modelId:I,historyMessageCount:P.historyMessages.length,pluginToolCount:h.pluginTools.length}}),Y.info(`agent runtime created`,{sessionId:u,modelId:I,historyMessageCount:P.historyMessages.length,pluginToolCount:h.pluginTools.length}),v.signal.addEventListener(`abort`,()=>F.abort());let L=0,R=0,z=``,B,ne=!1;try{if(kp(e)){let t=await Ap({params:e,agent:F,sessionId:u,eventDispatcher:i,appendEntry:j,abortSignal:v.signal});return z=t.text,as({sessionId:u,isNewSession:d,transcriptMessage:o,runParams:e,hookRegistry:m,hookContext:p,startTime:n,eventDispatcher:i,text:z,usage:{input:0,output:0,total:0},error:t.error})}if(!e.hitlResume&&!e.uiToolResume){let e=await g.persistInitialUserEntry(o);ne=e,s=e||s}await i.dispatchDiagnostic(u,{level:`info`,scope:`runner`,phase:`first_turn_started`,message:`first agent turn started`}),Y.info(`first agent turn started`,{sessionId:u,modelId:I});let r=await ci({agent:F,message:N,continueFromHistory:!!e.uiToolResume,sessionId:u,modelId:I,historyMessages:P.historyMessages,eventDispatcher:i,hooks:m,hookCtx:p,abortSignal:v.signal,retry:e.llmRetry,onTurnRecordProduced:async(e,t)=>{e&&await j(e);for(let e of t)await j(e)}});z=r.text,L+=r.inputTokens,R+=r.outputTokens,r.error&&(B=r.error),await i.dispatchDiagnostic(u,{level:r.error?`warn`:`info`,scope:`runner`,phase:`first_turn_completed`,message:`first agent turn completed`,details:{hasError:!!r.error,error:r.error,inputTokens:r.inputTokens,outputTokens:r.outputTokens}});let a={sessionId:u,hasError:!!r.error,error:r.error,inputTokens:r.inputTokens,outputTokens:r.outputTokens};r.error?Y.warn(`first agent turn completed with error`,a):Y.info(`first agent turn completed`,a),await i.dispatchDiagnostic(u,{level:`info`,scope:`runner`,phase:`announce_loop_started`,message:`announce loop started`}),Y.info(`announce loop started`,{sessionId:u});let c=await nf({agent:F,registry:t,sessionId:u,resolvedModelId:I,eventDispatcher:i,hookRegistry:m,hookContext:p,abortSignal:v.signal,retry:e.llmRetry,appendEntry:j});c.text&&(z=c.text),L+=c.inputTokens,R+=c.outputTokens,c.error&&!B&&(B=c.error),await i.dispatchDiagnostic(u,{level:c.error?`warn`:`info`,scope:`runner`,phase:`announce_loop_completed`,message:`announce loop completed`,details:{hasError:!!c.error,error:c.error,inputTokens:c.inputTokens,outputTokens:c.outputTokens}});let l={sessionId:u,hasError:!!c.error,error:c.error,inputTokens:c.inputTokens,outputTokens:c.outputTokens};c.error?Y.warn(`announce loop completed with error`,l):Y.info(`announce loop completed`,l)}catch(t){if(Tr(t)){let r=t,a=e.subagentContext?.parentSessionId??u,s=a===r.request.sessionId?r.request:{...r.request,sessionId:a};await _p(e.dataDir,a,s,r.checkpoint,{agentId:e.subagentContext?`subagent-depth-${e.subagentContext.depth}`:void 0,channel:e.channel,parentSessionId:e.subagentContext?.parentSessionId,depth:e.subagentContext?.depth},r.toolContext),await i.dispatchProgress(a,{type:`hitl_requested`,request:s}),await i.dispatchDiagnostic(u,{level:`info`,scope:`runner`,phase:`hitl_paused`,message:`agent paused for HITL: ${r.request.kind} — ${r.request.title}`,details:{requestId:s.requestId,kind:s.kind,checkpointPhase:r.checkpoint.phase,bubbledToParent:!!e.subagentContext?.parentSessionId}}),Y.info(`agent paused for HITL`,{sessionId:u,requestId:s.requestId,kind:s.kind,checkpointPhase:r.checkpoint.phase,bubbledToParent:!!e.subagentContext?.parentSessionId});let c={input:L,output:R,total:L+R};return await Pp({runtime:P,resolvedModelId:I,usage:c,currentUserEntryCoveredByUsage:ne}),as({sessionId:u,isNewSession:d,transcriptMessage:o,runParams:e,hookRegistry:m,hookContext:p,startTime:n,eventDispatcher:i,text:z||`[HITL paused] ${r.request.title}: ${r.request.prompt}`,usage:c,error:void 0,paused:{requestId:s.requestId,kind:s.kind,title:s.title}})}if(Dr(t)){let r=t,a=r.request.outputSchema.properties??{};await wp(e.dataDir,u,r.request,Z(e)),await i.dispatchProgress(u,{type:`ui_tool_request`,request:r.request}),await i.dispatchDiagnostic(u,{level:`info`,scope:`tool`,phase:`ui_tool_paused`,message:`agent paused for UI tool input: ${r.request.toolName}`,details:{requestId:r.request.requestId,toolName:r.request.toolName,toolCallId:r.request.toolCallId,outputSchemaTitle:r.request.outputSchema.title,propertyCount:Object.keys(a).length}}),Y.info(`agent paused for UI tool input`,{sessionId:u,requestId:r.request.requestId,toolName:r.request.toolName,toolCallId:r.request.toolCallId,outputSchemaTitle:r.request.outputSchema.title,propertyCount:Object.keys(a).length});let s={input:L,output:R,total:L+R};return await Pp({runtime:P,resolvedModelId:I,usage:s,currentUserEntryCoveredByUsage:ne}),as({sessionId:u,isNewSession:d,transcriptMessage:o,runParams:e,hookRegistry:m,hookContext:p,startTime:n,eventDispatcher:i,text:z||``,usage:s,error:void 0,uiToolPending:{requestId:r.request.requestId,toolName:r.request.toolName,toolCallId:r.request.toolCallId,outputSchema:r.request.outputSchema,extra:r.request.extra}})}throw await up({dispatcher:i,sessionId:u,scope:`runner`,phase:`run_failed`,message:`agent run failed`,error:t,details:{channel:e.channel,isNewSession:d}}),Y.error(`agent run failed`,{sessionId:u,channel:e.channel,isNewSession:d,error:t instanceof Error?t.message:String(t)}),t}finally{Ao(u),g.stop()}let V={input:L,output:R,total:L+R};await i.dispatchDiagnostic(u,{level:B?`warn`:`info`,scope:`runner`,phase:`run_completed`,message:`agent run completed`,details:{durationMs:Date.now()-n,inputTokens:V.input,outputTokens:V.output,totalTokens:V.total,hasError:!!B,error:B}});let re={sessionId:u,durationMs:Date.now()-n,inputTokens:V.input,outputTokens:V.output,totalTokens:V.total,hasError:!!B,error:B};return B?Y.warn(`agent run completed with error`,re):Y.info(`agent run completed`,re),await Pp({runtime:P,resolvedModelId:I,usage:V,currentUserEntryCoveredByUsage:ne}),await ao({sessionId:u,runParams:ee,eventDispatcher:i,transcriptStartIndex:_,result:{text:z,usage:V,durationMs:Date.now()-n,error:B}}),as({sessionId:u,isNewSession:d,transcriptMessage:o,runParams:e,hookRegistry:m,hookContext:p,startTime:n,eventDispatcher:i,text:z,usage:V,error:B})}async function Np(e){if(!e.enabled)return[];try{let t=await new q({dataDir:e.dataDir}).autoSkillCategories();return t.length===0?[]:(await e.eventDispatcher.dispatchDiagnostic(e.sessionId,{level:`info`,scope:`skill`,phase:`auto_skills_loaded`,message:`auto-skill categories loaded`,details:{categoryCount:t.length,categories:t.map(e=>({path:e.path,description:e.description}))}}),t)}catch(t){return await e.eventDispatcher.dispatchDiagnostic(e.sessionId,{level:`warn`,scope:`skill`,phase:`auto_skills_load_failed`,message:`auto-skill categories failed to load`,details:{error:t instanceof Error?t.message:String(t)}}),[]}}async function Pp(e){let{runtime:t,resolvedModelId:n,usage:r,currentUserEntryCoveredByUsage:i}=e;r.input<=0&&r.total<=0||await t.contextManager.recordModelUsage({model:n,inputTokens:r.input,outputTokens:r.output,totalTokens:r.total,coveredTranscriptEntryCount:t.usageBaselineTranscriptEntryCount+(i?1:0)})}async function Fp(t){oi(t.dataDir);let n=Date.now(),r=new pr(t),i=Hs(t),a=i.transcriptMessage.trim()||`CRON task`,o=t.sessionStoreName;Y.info(`cron run started`,{requestedSessionId:i.requestedSessionId,channel:t.channel,sessionStoreName:o,...Op(t)});let c=i.requestedSessionId,l=!c;c?(await u(t.dataDir,c,{storeName:o})||(l=!0),await F(t.dataDir,c,{storeName:o})):c=await w(t.dataDir,t.channel,{storeName:o}),l&&await D(t.dataDir,lf({sessionId:c,title:ts(a),channel:t.channel}),{storeName:o});let d=await w(t.dataDir,t.channel,{storeName:Dp});await r.dispatchProgress(c,{type:`subagent_spawn`,childSessionId:d,task:a}),Y.info(`cron child subagent spawned`,{parentSessionId:c,childSessionId:d,taskLength:a.length,taskPreview:si(a)});let f={...t,sessionId:d,sessionStoreName:Dp,subagentContext:{depth:1,parentSessionId:c}},m,h=`done`;try{m=await Mp(f,new Do),m.error&&(h=`error`)}catch(e){let r=e instanceof Error?e.message:String(e);m={sessionId:d,text:``,usage:{input:0,output:0,total:0},durationMs:Date.now()-n,error:r,context:{snapshotPath:T(t.dataDir,d,{storeName:Dp}),toolResultsDir:s(t.dataDir,d,{storeName:Dp})}},h=`error`,Y.error(`cron child run failed`,{parentSessionId:c,childSessionId:d,error:r})}await r.dispatchProgress(c,{type:`subagent_complete`,childSessionId:d,task:a,status:h}),Y.info(`cron child subagent completed`,{parentSessionId:c,childSessionId:d,status:h,durationMs:Date.now()-n,hasError:!!m.error});let g=Hu({task:a,status:h,result:m.text,error:m.error}),_=new Date().toISOString();await C(t.dataDir,c,{role:`assistant`,content:g,timestamp:_,source:`cron`},{storeName:o});let v={task:a,status:h,content:g,childSessionId:d,createdAt:_};return await S(t.dataDir,c,v,{storeName:o}),await e(t.dataDir,c,e=>Ip(e,8),{storeName:o}),await p(t.dataDir,c,{},{storeName:o}),{...m,sessionId:c,context:{snapshotPath:T(t.dataDir,c,{storeName:o}),toolResultsDir:s(t.dataDir,c,{storeName:o})}}}function Ip(e,t){if(t<=0)return e.filter(e=>!Lp(e));let n=e.reduce((e,t,n)=>(Lp(t)&&e.push(n),e),[]);if(n.length<=t)return e;let r=new Set(n.slice(-t));return e.filter((e,t)=>!Lp(e)||r.has(t))}function Lp(e){return`source`in e&&e.source===`cron`}async function Rp(e,t){if(oi(e.dataDir),Y.info(`agent request received`,{dataDir:e.dataDir,projectDir:e.projectDir,sessionId:e.sessionId,messageId:e.messageId,channel:e.channel,sessionStoreName:e.sessionStoreName,hasHitlResume:!!e.hitlResume,hasUiToolResume:!!e.uiToolResume,isSubagent:!!e.subagentContext,depth:e.subagentContext?.depth,parentSessionId:e.subagentContext?.parentSessionId,hasPlugins:!!e.plugins,hasMemory:!!e.memory,...Op(e)}),e.channel===`CRON`&&!e.subagentContext)return Fp(e);let n=t??new Do;try{return await Mp(e,n)}catch(t){throw e.onProgress&&await e.onProgress({type:`diagnostic`,level:`error`,scope:`runner`,phase:`run_crashed`,message:`agent run crashed before completion`,details:lp(t)}),Y.error(`agent run crashed before completion`,{sessionId:e.sessionId,channel:e.channel,messageId:e.messageId,error:t instanceof Error?t.message:String(t)}),t}}const zp={"AGENTS.md":`---
|
|
116
116
|
title: "AGENTS.md Template"
|
|
117
117
|
summary: ".aimax template for AGENTS.md"
|
|
118
118
|
read_when:
|