@gencode/agents 0.0.30 → 0.0.31
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.
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import{t as e}from"./rolldown-runtime-CNxR59P3.js";import{createRequire as t}from"node:module";import n from"node:fs/promises";import r from"node:path";import i,{randomUUID as a}from"node:crypto";import o from"node:fs";const s=`sessions`;function c(e){let t=e?.trim()||s;if(!/^[A-Za-z0-9_-]+$/.test(t))throw Error(`Invalid session store name: ${e}. Must match /^[A-Za-z0-9_-]+$/`);return t}function l(e,t){return r.join(e,`.aimax`,c(t?.storeName))}function u(e,t,n){return r.join(l(e,n),t)}function d(e,t,n){return r.join(u(e,t,n),`transcript.jsonl`)}function f(e,t,n){return r.join(u(e,t,n),`session.json`)}function p(e,t,n){return r.join(u(e,t,n),`context.json`)}function m(e,t,n){return r.join(u(e,t,n),`session-memory.json`)}function h(e,t,n){return r.join(u(e,t,n),`collapse-log.jsonl`)}function g(e,t,n){return r.join(u(e,t,n),`tool-results`)}const _={version:2,updatedAt:new Date(0).toISOString(),readStates:[],toolResults:[],compaction:{budgets:[],snips:[],collapseSpans:[],consecutiveAutocompactFailures:0}};async function ee(e,t,i){let o=a(),s=u(e,o,i);await n.mkdir(s,{recursive:!0});let c=r.join(s,`.channel`);return await n.writeFile(c,t,`utf-8`),o}async function v(e,t,r){let i=u(e,t,r);await n.mkdir(i,{recursive:!0})}async function y(e,t,r){let i=d(e,t,r),a;try{a=await n.readFile(i,`utf-8`)}catch(e){if(e.code===`ENOENT`)return[];throw e}let o=[];for(let e of a.split(`
|
|
2
|
+
`)){let t=e.trim();if(t)try{o.push(JSON.parse(t))}catch{}}return o}async function te(e,t,i,a){await v(e,t,a);let o=d(e,t,a),s=JSON.stringify(i)+`
|
|
3
|
+
`;await n.appendFile(o,s,`utf-8`);try{let{resolveMemoryProvider:t}=await import(`./provider-registry-CxtHsHdk.js`).then(e=>e.t),{createBuiltinMemoryProvider:n}=await Promise.resolve().then(()=>Q),i=r.join(e,`.aimax`),s=t({providerId:a?.providerId,pluginId:a?.pluginId,dataDir:e,memoryDir:i,sessionStoreName:a?.storeName})?.provider??n({dataDir:e,memoryDir:i,sessionStoreName:a?.storeName});s.noteSessionUpdate&&s.noteSessionUpdate(o)}catch{}a?.onMemoryChanged&&await Promise.resolve(a.onMemoryChanged({reason:`transcript-append`,files:[r.join(c(a.storeName),t,`transcript.jsonl`).replace(/\\/g,`/`)],source:`sessions`,sessionId:t,providerId:a.providerId??a.pluginId,timestamp:new Date().toISOString()})).catch(()=>{})}async function b(e,t){let r=l(e,t);try{return(await n.readdir(r,{withFileTypes:!0})).filter(e=>e.isDirectory()).map(e=>e.name).sort()}catch(e){if(e.code===`ENOENT`)return[];throw e}}async function x(e,t,r){await v(e,t.id,r);let i=f(e,t.id,r);await n.writeFile(i,JSON.stringify(t,null,2),`utf-8`)}async function ne(e,t,n){let r=await S(e,t);if(!r)return null;let i={...r,...n,id:r.id,createdAt:r.createdAt,updatedAt:new Date().toISOString()};return await x(e,i),i}async function S(e,t,i){let a=f(e,t,i);try{let o=await n.readFile(a,`utf-8`),s=JSON.parse(o);if(!s.channel){let a=r.join(u(e,t,i),`.channel`);try{s.channel=(await n.readFile(a,`utf-8`)).trim()}catch{s.channel=`WEB`}}return s}catch(e){if(e.code===`ENOENT`)return null;throw e}}async function re(e,t,n){let r=await b(e,n),i=await Promise.all(r.map(async t=>{let r=await S(e,t,n);return{id:t,title:r?.title??t,channel:r?.channel??`WEB`,createdAt:r?.createdAt??``,updatedAt:r?.updatedAt??``}}));return t?i.filter(e=>e.channel===t):i}async function C(e,t,r){let i=p(e,t,r);try{let e=await n.readFile(i,`utf-8`),t=JSON.parse(e),r=typeof t.version==`number`?t.version:void 0;return r!==1&&r!==2?_:{version:2,updatedAt:typeof t.updatedAt==`string`?t.updatedAt:_.updatedAt,readStates:Array.isArray(t.readStates)?t.readStates:[],toolResults:Array.isArray(t.toolResults)?t.toolResults:[],compaction:{sessionMemory:t.compaction?.sessionMemory,budgets:Array.isArray(t.compaction?.budgets)?t.compaction.budgets:[],snips:Array.isArray(t.compaction?.snips)?t.compaction.snips:[],collapseSpans:Array.isArray(t.compaction?.collapseSpans)?t.compaction.collapseSpans:[],consecutiveAutocompactFailures:typeof t.compaction?.consecutiveAutocompactFailures==`number`?t.compaction.consecutiveAutocompactFailures:0,lastCompactionAt:typeof t.compaction?.lastCompactionAt==`string`?t.compaction.lastCompactionAt:void 0,lastCompactionLayer:t.compaction?.lastCompactionLayer===`L1`||t.compaction?.lastCompactionLayer===`L2`||t.compaction?.lastCompactionLayer===`L3`||t.compaction?.lastCompactionLayer===`L4`||t.compaction?.lastCompactionLayer===`L5`||t.compaction?.lastCompactionLayer===`L6`?t.compaction.lastCompactionLayer:void 0}}}catch(e){if(e.code===`ENOENT`)return _;throw e}}async function w(e,t,n){let[r,i,a]=await Promise.all([S(e,t,n),y(e,t,n),C(e,t,n)]);return{id:t,metadata:r,transcriptPath:d(e,t,n),contextSnapshotPath:p(e,t,n),sessionMemoryPath:m(e,t,n),collapseLogPath:h(e,t,n),toolResultsDir:g(e,t,n),transcriptEntryCount:i.length,readStateCount:a.readStates.length,toolResultRefCount:a.toolResults.length,transcriptEntries:i,context:a}}async function ie(e,t,n){let r=await w(e,t,n);return{id:r.id,metadata:r.metadata,transcript:r.transcriptEntries,context:r.context,paths:{transcriptPath:r.transcriptPath,contextSnapshotPath:r.contextSnapshotPath,sessionMemoryPath:r.sessionMemoryPath,collapseLogPath:r.collapseLogPath,toolResultsDir:r.toolResultsDir}}}function T(e){return!!(e&&typeof e==`object`&&`code`in e&&e.code===`ENOENT`)}async function ae(e){let t;try{t=await n.lstat(e)}catch(e){if(T(e))return{missing:!0};throw e}if(t.isSymbolicLink()||!t.isFile())throw Error(`path required`);return{missing:!1,stat:t}}function oe(e){try{o.mkdirSync(e,{recursive:!0})}catch{}return e}function se(e){return e.trim().replace(/^[./]+/,``).replace(/\\/g,`/`)}function ce(e){let t=se(e);return t?t===`MEMORY.md`||t===`memory.md`?!0:t.startsWith(`memory/`):!1}async function E(e,t){let i=await n.readdir(e,{withFileTypes:!0});for(let n of i){let i=r.join(e,n.name);if(!n.isSymbolicLink()){if(n.isDirectory()){await E(i,t);continue}n.isFile()&&n.name.endsWith(`.md`)&&t.push(i)}}}async function D(e){let t=[],i=r.join(e,`MEMORY.md`),a=r.join(e,`memory.md`),o=r.join(e,`memory`),s=async e=>{try{let r=await n.lstat(e);if(r.isSymbolicLink()||!r.isFile()||!e.endsWith(`.md`))return;t.push(e)}catch{}};await s(i),await s(a);try{let e=await n.lstat(o);!e.isSymbolicLink()&&e.isDirectory()&&await E(o,t)}catch{}if(t.length<=1)return t;let c=new Set,l=[];for(let e of t){let t=e;try{t=await n.realpath(e)}catch{}c.has(t)||(c.add(t),l.push(e))}return l}function O(e){return i.createHash(`sha256`).update(e).digest(`hex`)}async function le(e,t){let i;try{i=await n.stat(e)}catch(e){if(T(e))return null;throw e}let a;try{a=await n.readFile(e,`utf-8`)}catch(e){if(T(e))return null;throw e}let o=O(a);return{path:r.relative(t,e).replace(/\\/g,`/`),absPath:e,mtimeMs:i.mtimeMs,size:i.size,hash:o}}function ue(e,t){let n=e.split(`
|
|
4
|
+
`);if(n.length===0)return[];let r=Math.max(32,t.tokens*4),i=Math.max(0,t.overlap*4),a=[],o=[],s=0,c=()=>{if(o.length===0)return;let e=o[0],t=o[o.length-1];if(!e||!t)return;let n=o.map(e=>e.line).join(`
|
|
5
|
+
`),r=e.lineNo,i=t.lineNo;a.push({startLine:r,endLine:i,text:n,hash:O(n)})},l=()=>{if(i<=0||o.length===0){o=[],s=0;return}let e=0,t=[];for(let n=o.length-1;n>=0;--n){let r=o[n];if(r&&(e+=r.line.length+1,t.unshift(r),e>=i))break}o=t,s=t.reduce((e,t)=>e+t.line.length+1,0)};for(let e=0;e<n.length;e+=1){let t=n[e]??``,i=e+1,a=[];if(t.length===0)a.push(``);else for(let e=0;e<t.length;e+=r)a.push(t.slice(e,e+r));for(let e of a){let t=e.length+1;s+t>r&&o.length>0&&(c(),l()),o.push({line:e,lineNo:i}),s+=t}}return c(),a}function de(e,t){if(!(!t||t.length===0))for(let n of e)n.startLine=t[n.startLine-1]??n.startLine,n.endLine=t[n.endLine-1]??n.endLine}function k(e){try{let t=JSON.parse(e);return Array.isArray(t)?t:[]}catch{return[]}}function fe(e,t){if(e.length===0||t.length===0)return 0;let n=Math.min(e.length,t.length),r=0,i=0,a=0;for(let o=0;o<n;o+=1){let n=e[o]??0,s=t[o]??0;r+=n*s,i+=n*n,a+=s*s}return i===0||a===0?0:r/(Math.sqrt(i)*Math.sqrt(a))}function pe(e){return(e.toLowerCase().match(/[\p{L}\p{N}_]+/gu)??[]).filter(Boolean)}function me(e){return i.createHash(`sha256`).update(e).digest().readUInt32BE(0)}function A(e,t=384){let n=Array(t).fill(0),r=pe(e);if(r.length===0)return n;for(let e of r){let r=me(e)%t;n[r]+=1}let i=Math.sqrt(n.reduce((e,t)=>e+t*t,0));if(i>0)for(let e=0;e<n.length;e+=1)n[e]=n[e]/i;return n}function j(e){let t=e?.model?.trim()||`mock-embedding-v1`,n=e?.dimensions??384;return{id:`external-mock`,model:t,embedQuery:async e=>A(e,n),embedBatch:async e=>e.map(e=>A(e,n))}}const M=new class{providers=new Map;byPluginId=new Map;register(e){this.providers.set(e.id,e),e.pluginId&&this.byPluginId.set(e.pluginId,e.id)}getById(e){return this.providers.get(e)}getByPluginId(e){let t=this.byPluginId.get(e);return t?this.providers.get(t):void 0}clear(){this.providers.clear(),this.byPluginId.clear()}};function he(e){let t=e.id?.trim()||e.pluginId;return M.register({id:t,pluginId:e.pluginId,create:e.create,config:e.config,rootDir:e.rootDir,source:e.source}),t}function N(e){let t=e.providerId?.trim(),n=e.pluginId?.trim(),r=(t?M.getById(t):void 0)??(n?M.getByPluginId(n):void 0);return r?{provider:r.create({dataDir:e.dataDir,memoryDir:e.memoryDir,pluginId:r.pluginId,config:r.config,rootDir:r.rootDir,source:r.source}),registration:r}:null}function ge(){M.clear()}const P={enabled:!1,lambda:.7};function F(e){let t=e.toLowerCase().match(/[a-z0-9_]+/g)??[];return new Set(t)}function I(e,t){if(e.size===0&&t.size===0)return 1;if(e.size===0||t.size===0)return 0;let n=0,r=e.size<=t.size?e:t,i=e.size<=t.size?t:e;for(let e of r)i.has(e)&&n++;let a=e.size+t.size-n;return a===0?0:n/a}function L(e,t,n){if(t.length===0)return 0;let r=0,i=n.get(e.id)??F(e.content);for(let e of t){let t=I(i,n.get(e.id)??F(e.content));t>r&&(r=t)}return r}function _e(e,t,n){return n*e-(1-n)*t}function ve(e,t={}){let{enabled:n=P.enabled,lambda:r=P.lambda}=t;if(!n||e.length<=1)return[...e];let i=Math.max(0,Math.min(1,r));if(i===1)return e.slice().sort((e,t)=>t.score-e.score);let a=new Map;for(let t of e)a.set(t.id,F(t.content));let o=Math.max(...e.map(e=>e.score)),s=Math.min(...e.map(e=>e.score)),c=o-s,l=e=>c===0?1:(e-s)/c,u=[],d=new Set(e);for(;d.size>0;){let e=null,t=-1/0;for(let n of d){let r=_e(l(n.score),L(n,u,a),i);(r>t||r===t&&n.score>(e?.score??-1/0))&&(t=r,e=n)}if(e)u.push(e),d.delete(e);else break}return u}function ye(e,t={}){if(e.length===0)return e;let n=new Map;return ve(e.map((e,t)=>{let r=`${e.path}:${e.startLine}:${t}`;return n.set(r,e),{id:r,score:e.score,content:e.snippet}}),t).map(e=>n.get(e.id))}const R={enabled:!1,halfLifeDays:30},z=/(?:^|\/)(?:memory)\/(\d{4})-(\d{2})-(\d{2})\.md$/;function be(e){return!Number.isFinite(e)||e<=0?0:Math.LN2/e}function xe(e){let t=be(e.halfLifeDays),n=Math.max(0,e.ageInDays);return t<=0||!Number.isFinite(n)?1:Math.exp(-t*n)}function Se(e){return e.score*xe(e)}function Ce(e){let t=e.replaceAll(`\\`,`/`).replace(/^\.\//,``),n=z.exec(t);if(!n)return null;let r=Number(n[1]),i=Number(n[2]),a=Number(n[3]);if(!Number.isInteger(r)||!Number.isInteger(i)||!Number.isInteger(a))return null;let o=Date.UTC(r,i-1,a),s=new Date(o);return s.getUTCFullYear()!==r||s.getUTCMonth()!==i-1||s.getUTCDate()!==a?null:s}function we(e){let t=e.replaceAll(`\\`,`/`).replace(/^\.\//,``);return t===`MEMORY.md`||t===`memory.md`?!0:t.startsWith(`memory/`)?!z.test(t):!1}async function B(e){let t=Ce(e.filePath);if(t)return t;if(e.source===`memory`&&we(e.filePath)||!e.memoryRoot)return null;let i=r.isAbsolute(e.filePath)?e.filePath:r.resolve(e.memoryRoot,e.filePath);try{let e=await n.stat(i);return Number.isFinite(e.mtimeMs)?new Date(e.mtimeMs):null}catch{return null}}function Te(e,t){return Math.max(0,t-e.getTime())/864e5}async function Ee(e){let t={...R,...e.temporalDecay};if(!t.enabled)return[...e.results];let n=e.nowMs??Date.now(),r=new Map;return Promise.all(e.results.map(async i=>{let a=`${i.source}:${i.path}`,o=r.get(a);o||(o=B({filePath:i.path,source:i.source,memoryRoot:e.memoryRoot}),r.set(a,o));let s=await o;if(!s)return i;let c=Se({score:i.score,ageInDays:Te(s,n),halfLifeDays:t.halfLifeDays});return{...i,score:c}}))}function De(e){let t=e.match(/[\p{L}\p{N}_]+/gu)?.map(e=>e.trim()).filter(Boolean)??[];return t.length===0?null:t.map(e=>`"${e.replaceAll(`"`,``)}"`).join(` AND `)}function Oe(e){return 1/(1+(Number.isFinite(e)?Math.max(0,e):999))}async function ke(e){let t=new Map;for(let n of e.vector)t.set(n.id,{id:n.id,path:n.path,startLine:n.startLine,endLine:n.endLine,source:n.source,snippet:n.snippet,vectorScore:n.vectorScore,textScore:0});for(let n of e.keyword){let e=t.get(n.id);e?(e.textScore=n.textScore,n.snippet&&n.snippet.length>0&&(e.snippet=n.snippet)):t.set(n.id,{id:n.id,path:n.path,startLine:n.startLine,endLine:n.endLine,source:n.source,snippet:n.snippet,vectorScore:0,textScore:n.textScore})}let n=(await Ee({results:Array.from(t.values()).map(t=>{let n=e.vectorWeight*t.vectorScore+e.textWeight*t.textScore;return{path:t.path,startLine:t.startLine,endLine:t.endLine,score:n,snippet:t.snippet,source:t.source}}),temporalDecay:{...R,...e.temporalDecay},memoryRoot:e.memoryRoot,nowMs:e.nowMs})).slice().sort((e,t)=>t.score-e.score),r={...P,...e.mmr};return r.enabled?ye(n,r):n}function Ae(e){e.db.exec(`
|
|
6
|
+
CREATE TABLE IF NOT EXISTS meta (
|
|
7
|
+
key TEXT PRIMARY KEY,
|
|
8
|
+
value TEXT NOT NULL
|
|
9
|
+
);
|
|
10
|
+
`),e.db.exec(`
|
|
11
|
+
CREATE TABLE IF NOT EXISTS files (
|
|
12
|
+
path TEXT PRIMARY KEY,
|
|
13
|
+
source TEXT NOT NULL DEFAULT 'memory',
|
|
14
|
+
hash TEXT NOT NULL,
|
|
15
|
+
mtime INTEGER NOT NULL,
|
|
16
|
+
size INTEGER NOT NULL
|
|
17
|
+
);
|
|
18
|
+
`),e.db.exec(`
|
|
19
|
+
CREATE TABLE IF NOT EXISTS chunks (
|
|
20
|
+
id TEXT PRIMARY KEY,
|
|
21
|
+
path TEXT NOT NULL,
|
|
22
|
+
source TEXT NOT NULL DEFAULT 'memory',
|
|
23
|
+
start_line INTEGER NOT NULL,
|
|
24
|
+
end_line INTEGER NOT NULL,
|
|
25
|
+
hash TEXT NOT NULL,
|
|
26
|
+
model TEXT NOT NULL,
|
|
27
|
+
text TEXT NOT NULL,
|
|
28
|
+
embedding TEXT NOT NULL,
|
|
29
|
+
updated_at INTEGER NOT NULL
|
|
30
|
+
);
|
|
31
|
+
`),e.db.exec(`
|
|
32
|
+
CREATE TABLE IF NOT EXISTS ${e.embeddingCacheTable} (
|
|
33
|
+
provider TEXT NOT NULL,
|
|
34
|
+
model TEXT NOT NULL,
|
|
35
|
+
provider_key TEXT NOT NULL,
|
|
36
|
+
hash TEXT NOT NULL,
|
|
37
|
+
embedding TEXT NOT NULL,
|
|
38
|
+
dims INTEGER,
|
|
39
|
+
updated_at INTEGER NOT NULL,
|
|
40
|
+
PRIMARY KEY (provider, model, provider_key, hash)
|
|
41
|
+
);
|
|
42
|
+
`),e.db.exec(`CREATE INDEX IF NOT EXISTS idx_embedding_cache_updated_at ON ${e.embeddingCacheTable}(updated_at);`);let t=!1,n;if(e.ftsEnabled)try{e.db.exec(`CREATE VIRTUAL TABLE IF NOT EXISTS ${e.ftsTable} USING fts5(\n text,\n id UNINDEXED,\n path UNINDEXED,\n source UNINDEXED,\n model UNINDEXED,\n start_line UNINDEXED,\n end_line UNINDEXED\n);`),t=!0}catch(e){let r=e instanceof Error?e.message:String(e);t=!1,n=r}return V(e.db,`files`,`source`,`TEXT NOT NULL DEFAULT 'memory'`),V(e.db,`chunks`,`source`,`TEXT NOT NULL DEFAULT 'memory'`),e.db.exec(`CREATE INDEX IF NOT EXISTS idx_chunks_path ON chunks(path);`),e.db.exec(`CREATE INDEX IF NOT EXISTS idx_chunks_source ON chunks(source);`),{ftsAvailable:t,...n?{ftsError:n}:{}}}function V(e,t,n,r){e.prepare(`PRAGMA table_info(${t})`).all().some(e=>e.name===n)||e.exec(`ALTER TABLE ${t} ADD COLUMN ${n} ${r}`)}function H(e,t){return e.length<=t?e:e.slice(0,t)}const je=e=>Buffer.from(new Float32Array(e).buffer);async function Me(e){return e.queryVec.length===0||e.limit<=0?[]:await e.ensureVectorReady(e.queryVec.length)?e.db.prepare(`SELECT c.id, c.path, c.start_line, c.end_line, c.text,
|
|
43
|
+
c.source,
|
|
44
|
+
vec_distance_cosine(v.embedding, ?) AS dist
|
|
45
|
+
FROM ${e.vectorTable} v\n JOIN chunks c ON c.id = v.id\n WHERE c.model = ?${e.sourceFilterVec.sql}\n ORDER BY dist ASC\n LIMIT ?`).all(je(e.queryVec),e.providerModel,...e.sourceFilterVec.params,e.limit).map(t=>({id:t.id,path:t.path,startLine:t.start_line,endLine:t.end_line,score:1-t.dist,snippet:H(t.text,e.snippetMaxChars),source:t.source})):Ne({db:e.db,providerModel:e.providerModel,sourceFilter:e.sourceFilterChunks}).map(t=>({chunk:t,score:fe(e.queryVec,t.embedding)})).filter(e=>Number.isFinite(e.score)).slice().sort((e,t)=>t.score-e.score).slice(0,e.limit).map(t=>({id:t.chunk.id,path:t.chunk.path,startLine:t.chunk.startLine,endLine:t.chunk.endLine,score:t.score,snippet:H(t.chunk.text,e.snippetMaxChars),source:t.chunk.source}))}function Ne(e){return e.db.prepare(`SELECT id, path, start_line, end_line, text, embedding, source
|
|
46
|
+
FROM chunks
|
|
47
|
+
WHERE model = ?${e.sourceFilter.sql}`).all(e.providerModel,...e.sourceFilter.params).map(e=>({id:e.id,path:e.path,startLine:e.start_line,endLine:e.end_line,text:e.text,embedding:k(e.embedding),source:e.source}))}async function Pe(e){if(e.limit<=0)return[];let t=e.buildFtsQuery(e.query);if(!t)return[];let n=e.providerModel?` AND model = ?`:``,r=e.providerModel?[e.providerModel]:[];return e.db.prepare(`SELECT id, path, source, start_line, end_line, text,\n bm25(${e.ftsTable}) AS rank\n FROM ${e.ftsTable}\n WHERE ${e.ftsTable} MATCH ?${n}${e.sourceFilter.sql}\n ORDER BY rank ASC\n LIMIT ?`).all(t,...r,...e.sourceFilter.params,e.limit).map(t=>{let n=e.bm25RankToScore(t.rank);return{id:t.id,path:t.path,startLine:t.start_line,endLine:t.end_line,score:n,textScore:n,snippet:H(t.text,e.snippetMaxChars),source:t.source}})}const Fe=t(import.meta.url);function Ie(){try{return Fe(`node:sqlite`)}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`SQLite support is unavailable in this Node runtime (missing node:sqlite). ${t}`,{cause:e})}}const U={chunkTokens:400,chunkOverlap:80,maxResults:6,minScore:.35,embedding:{},experimental:{sessionMemory:!1},sources:[`memory`],store:{sessionStoreName:void 0,vector:{enabled:!0}},hybrid:{enabled:!0,vectorWeight:.7,textWeight:.3,candidateMultiplier:4,mmr:{enabled:!1,lambda:.7},temporalDecay:{enabled:!1,halfLifeDays:30}},cache:{enabled:!0,maxEntries:5e4},sync:{onSessionStart:!0,onSearch:!0,watch:!0,watchDebounceMs:1500,sessions:{deltaBytes:1e5,deltaMessages:50}},citations:`auto`};async function Le(e){try{let t=await import(`sqlite-vec`),n=e.extensionPath?.trim()?e.extensionPath.trim():void 0,r=n??t.getLoadablePath();return e.db.enableLoadExtension(!0),n?e.db.loadExtension(r):t.load(e.db),{ok:!0,extensionPath:r}}catch(e){return{ok:!1,error:e instanceof Error?e.message:String(e)}}}function Re(e,t,n){let i=l(e,{storeName:n});return r.relative(i,t).replace(/\\/g,`/`)}async function ze(e,t){let i=l(e,{storeName:t});try{let e=await n.readdir(i,{withFileTypes:!0}),t=[];for(let a of e){if(!a.isDirectory())continue;let e=r.join(i,a.name,`transcript.jsonl`);try{(await n.stat(e)).isFile()&&t.push(e)}catch{}}return t}catch(e){if(T(e))return[];throw e}}function Be(e){return typeof e==`string`?e:Array.isArray(e)?e.map(e=>typeof e==`string`?e:e&&typeof e==`object`&&`text`in e?String(e.text??``):``).filter(Boolean).join(` `):e?String(e):``}async function Ve(e,t,i){let a;try{a=await n.stat(t)}catch(e){if(T(e))return null;throw e}let o;try{o=await n.readFile(t,`utf-8`)}catch(e){if(T(e))return null;throw e}let s=[],l=[],u=o.split(`
|
|
48
|
+
`);for(let e=0;e<u.length;e+=1){let t=u[e]?.trim();if(t)try{let n=JSON.parse(t),r=n.role??`unknown`,i=Be(n.content);if(!i)continue;let a=i.split(`
|
|
49
|
+
`);for(let t of a)s.push(`[${r}] ${t}`),l.push(e+1)}catch{}}let d=s.join(`
|
|
50
|
+
`),f=O(d);return{path:r.join(c(i),Re(e,t,i)).replace(/\\/g,`/`),absPath:t,mtimeMs:a.mtimeMs,size:a.size,hash:f,content:d,lineMap:l}}const W=`chunks_vec`,G=`chunks_fts`,K=`embedding_cache`,q=`memory_index_meta_v1`,J=3e4,Y=new Map;function X(e,t){let n={...e,...t,hybrid:{...e.hybrid,...t?.hybrid??{}},cache:{...e.cache,...t?.cache??{}},sync:{...e.sync,...t?.sync??{}},experimental:{...e.experimental,...t?.experimental??{}},sources:t?.sources??e.sources,embedding:{...e.embedding,...t?.embedding??{}},store:{...e.store,...t?.store??{},vector:{...e.store.vector,...t?.store?.vector??{}}}};return n.experimental.sessionMemory&&!n.sources.includes(`sessions`)&&(n.sources=[...n.sources,`sessions`]),n}var Z=class e{dataDir;memoryRoot;storePath;config;sessionStoreName;provider;providerKey;embeddingProviderId;db;dirty=!0;ftsAvailable=!1;ftsError;vector={enabled:!0,available:null,extensionPath:void 0,loadError:void 0,dims:void 0};vectorReady=null;watchers=[];watchTimer=null;sessionWatchTimer=null;sessionsDirty=!1;sessionsDirtyFiles=new Set;sessionPendingFiles=new Set;sessionDeltas=new Map;static get(t,n){let i=r.join(t,`.aimax`),a=X(U,n),o=`${i}::${c(a.store.sessionStoreName)}`,s=Y.get(o);if(s)return n&&s.applyConfig(n),s;let l=new e(t,i,a);return Y.set(o,l),l}constructor(e,t,n){this.dataDir=e,this.memoryRoot=t,this.storePath=r.join(t,`.index.sqlite`),this.config=X(U,n),this.sessionStoreName=c(this.config.store.sessionStoreName),this.provider=j(),this.providerKey=this.computeProviderKey(),this.applyEmbeddingProvider(),this.vector.enabled=this.config.store.vector.enabled,this.vector.extensionPath=this.config.store.vector.extensionPath,this.db=this.openDatabase(),this.ensureSchema(),this.ensureWatcher(),this.ensureSessionListener(),this.dirty=!0}applyConfig(e){this.config=X(this.config,e),this.sessionStoreName=c(this.config.store.sessionStoreName),this.applyEmbeddingProvider(),this.vector.enabled=this.config.store.vector.enabled,this.vector.extensionPath=this.config.store.vector.extensionPath,this.ensureWatcher(),this.ensureSessionListener()}warmSession(){this.config.sync.onSessionStart&&this.sync({reason:`session-start`}).catch(()=>{})}noteSessionUpdate(e){this.scheduleSessionDirty(e)}status(){let e=this.buildSourceFilter(),t=this.db.prepare(`SELECT COUNT(*) as c FROM files WHERE 1=1${e.sql}`).get(...e.params),n=this.db.prepare(`SELECT COUNT(*) as c FROM chunks WHERE 1=1${e.sql}`).get(...e.params),r=(()=>{let t=Array.from(this.config.sources);if(t.length===0)return[];let n=new Map;for(let e of t)n.set(e,{files:0,chunks:0});let r=this.db.prepare(`SELECT source, COUNT(*) as c FROM files WHERE 1=1${e.sql} GROUP BY source`).all(...e.params);for(let e of r){let t=n.get(e.source)??{files:0,chunks:0};t.files=e.c??0,n.set(e.source,t)}let i=this.db.prepare(`SELECT source, COUNT(*) as c FROM chunks WHERE 1=1${e.sql} GROUP BY source`).all(...e.params);for(let e of i){let t=n.get(e.source)??{files:0,chunks:0};t.chunks=e.c??0,n.set(e.source,t)}return t.map(e=>Object.assign({source:e},n.get(e)))})(),i=this.provider?`hybrid`:`fts-only`,a=this.config.cache.enabled?this.db.prepare(`SELECT COUNT(*) as c FROM ${K}`).get()?.c??0:void 0;return{backend:`builtin`,files:t?.c??0,chunks:n?.c??0,dirty:this.dirty||this.sessionsDirty,workspaceDir:this.memoryRoot,dbPath:this.storePath,provider:this.provider.id,model:this.provider.model,sources:Array.from(this.config.sources),sourceCounts:r,cache:this.config.cache.enabled?{enabled:!0,entries:a,maxEntries:this.config.cache.maxEntries}:{enabled:!1,maxEntries:this.config.cache.maxEntries},fts:{enabled:this.config.hybrid.enabled,available:this.ftsAvailable,error:this.ftsError},vector:{enabled:this.vector.enabled,available:this.vector.available??void 0,extensionPath:this.vector.extensionPath,loadError:this.vector.loadError,dims:this.vector.dims},custom:{searchMode:i}}}async probeEmbeddingAvailability(){try{return await this.provider.embedBatch([`ping`]),{ok:!0}}catch(e){return{ok:!1,error:e instanceof Error?e.message:String(e)}}}async probeVectorAvailability(){return this.vector.enabled?await this.ensureVectorReady():!1}async search(e){let t=e.trim();if(!t)return[];this.readMeta()?this.config.sync.onSearch&&(this.dirty||this.sessionsDirty)&&this.sync({reason:`search`}).catch(()=>{}):await this.sync({reason:`boot`});let n=this.config.hybrid,r=Math.min(200,Math.max(1,Math.floor(this.config.maxResults*n.candidateMultiplier))),i=n.enabled&&this.ftsAvailable?await this.searchKeyword(t,r).catch(()=>[]):[],a=await this.provider.embedQuery(t),o=a.some(e=>e!==0)?await this.searchVector(a,r).catch(()=>[]):[];if(!n.enabled||!this.ftsAvailable)return o.filter(e=>e.score>=this.config.minScore).slice(0,this.config.maxResults);let s=await ke({vector:o.map(e=>({id:`${e.path}:${e.startLine}:${e.endLine}:${e.source}`,path:e.path,startLine:e.startLine,endLine:e.endLine,source:e.source,snippet:e.snippet,vectorScore:e.score})),keyword:i.map(e=>({id:`${e.path}:${e.startLine}:${e.endLine}:${e.source}`,path:e.path,startLine:e.startLine,endLine:e.endLine,source:e.source,snippet:e.snippet,textScore:e.textScore})),vectorWeight:n.vectorWeight,textWeight:n.textWeight,mmr:n.mmr,temporalDecay:n.temporalDecay,memoryRoot:this.memoryRoot}),c=s.filter(e=>e.score>=this.config.minScore);if(c.length>0||i.length===0)return this.decorateCitations(c.slice(0,this.config.maxResults));let l=Math.min(this.config.minScore,n.textWeight),u=s.filter(e=>e.score>=l).slice(0,this.config.maxResults);return this.decorateCitations(u)}async readFile(e){let{absPath:t,relPath:r}=this.resolveMemoryFilePath(e.relPath);if((await ae(t)).missing)return{text:``,path:r};let i;try{i=await n.readFile(t,`utf-8`)}catch(e){if(T(e))return{text:``,path:r};throw e}if(!e.from&&!e.lines)return{text:i,path:r};let a=i.split(`
|
|
51
|
+
`),o=Math.max(1,e.from??1),s=Math.max(1,e.lines??a.length);return{text:a.slice(o-1,o-1+s).join(`
|
|
52
|
+
`),path:r}}async replaceFile(e){let{absPath:t}=this.resolveMemoryFilePath(e.relPath);await n.mkdir(r.dirname(t),{recursive:!0}),await n.writeFile(t,e.content,`utf-8`),this.dirty=!0}async deleteFile(e){let{absPath:t}=this.resolveMemoryFilePath(e);try{await n.unlink(t)}catch(e){if(T(e))return;throw e}this.dirty=!0}async appendToMemory(e){let t=this.memoryRoot;await n.mkdir(t,{recursive:!0});let i=r.join(t,`MEMORY.md`),a=e.endsWith(`
|
|
53
|
+
`)?e:`${e}\n`;await n.appendFile(i,a,`utf-8`),this.dirty=!0}openDatabase(){oe(r.dirname(this.storePath));let{DatabaseSync:e}=Ie();return new e(this.storePath,{allowExtension:this.vector.enabled})}ensureSchema(){let e=Ae({db:this.db,embeddingCacheTable:K,ftsTable:G,ftsEnabled:this.config.hybrid.enabled});this.ftsAvailable=e.ftsAvailable,e.ftsError&&(this.ftsError=e.ftsError)}async ensureVectorReady(e){if(!this.vector.enabled)return!1;this.vectorReady||=this.withTimeout(this.loadVectorExtension(),J,`sqlite-vec load timed out after ${Math.round(J/1e3)}s`);let t=!1;try{t=await this.vectorReady||!1}catch(e){let t=e instanceof Error?e.message:String(e);return this.vector.available=!1,this.vector.loadError=t,this.vectorReady=null,!1}return t&&typeof e==`number`&&e>0&&this.ensureVectorTable(e),t}async loadVectorExtension(){if(this.vector.available!==null)return this.vector.available;if(!this.vector.enabled)return this.vector.available=!1,!1;try{let e=this.vector.extensionPath?.trim()?this.vector.extensionPath.trim():void 0,t=await Le({db:this.db,extensionPath:e});if(!t.ok)throw Error(t.error??`unknown sqlite-vec load error`);return this.vector.extensionPath=t.extensionPath,this.vector.available=!0,!0}catch(e){let t=e instanceof Error?e.message:String(e);return this.vector.available=!1,this.vector.loadError=t,!1}}ensureVectorTable(e){this.vector.dims!==e&&(this.vector.dims&&this.vector.dims!==e&&this.dropVectorTable(),this.db.exec(`CREATE VIRTUAL TABLE IF NOT EXISTS ${W} USING vec0(\n id TEXT PRIMARY KEY,\n embedding FLOAT[${e}]\n)`),this.vector.dims=e)}dropVectorTable(){try{this.db.exec(`DROP TABLE IF EXISTS ${W}`)}catch{}}async withTimeout(e,t,n){if(!Number.isFinite(t)||t<=0)return await e;let r=null,i=new Promise((e,i)=>{r=setTimeout(()=>i(Error(n)),t)});try{return await Promise.race([e,i])}finally{r&&clearTimeout(r)}}ensureWatcher(){if(!this.config.sync.watch||this.watchers.length>0)return;let e=[r.join(this.memoryRoot,`MEMORY.md`),r.join(this.memoryRoot,`memory.md`),r.join(this.memoryRoot,`memory`)],t=()=>{this.dirty=!0,this.scheduleWatchSync()};for(let n of e)try{let e=o.watch(n,{recursive:!1},t);e.on(`error`,()=>{try{e.close()}catch{}}),this.watchers.push(e)}catch{}}scheduleWatchSync(){this.config.sync.watch&&(this.watchTimer&&clearTimeout(this.watchTimer),this.watchTimer=setTimeout(()=>{this.watchTimer=null,this.sync({reason:`watch`}).catch(()=>{})},this.config.sync.watchDebounceMs))}ensureSessionListener(){if(!this.config.experimental.sessionMemory)return;let e=l(this.dataDir,{storeName:this.sessionStoreName});try{let t=o.watch(e,{recursive:!0},(t,n)=>{if(!n||!n.endsWith(`transcript.jsonl`))return;let i=r.join(e,n);this.scheduleSessionDirty(i)});this.watchers.push(t)}catch{}}scheduleSessionDirty(e){this.config.experimental.sessionMemory&&(this.sessionPendingFiles.add(e),!this.sessionWatchTimer&&(this.sessionWatchTimer=setTimeout(()=>{this.sessionWatchTimer=null,this.processSessionDeltaBatch().catch(()=>{})},5e3)))}async processSessionDeltaBatch(){if(this.sessionPendingFiles.size===0)return;let e=Array.from(this.sessionPendingFiles);this.sessionPendingFiles.clear();let t=!1;for(let n of e){let e=await this.updateSessionDelta(n);if(!e)continue;let r=e.deltaBytes,i=e.deltaMessages,a=r<=0?e.pendingBytes>0:e.pendingBytes>=r,o=i<=0?e.pendingMessages>0:e.pendingMessages>=i;!a&&!o||(this.sessionsDirtyFiles.add(n),this.sessionsDirty=!0,e.pendingBytes=r>0?Math.max(0,e.pendingBytes-r):0,e.pendingMessages=i>0?Math.max(0,e.pendingMessages-i):0,t=!0)}t&&this.sync({reason:`session-delta`}).catch(()=>{})}async updateSessionDelta(e){let t=this.config.sync.sessions;if(!t)return null;let r;try{r=await n.stat(e)}catch{return null}let i=r.size,a=this.sessionDeltas.get(e);a||(a={lastSize:0,pendingBytes:0,pendingMessages:0},this.sessionDeltas.set(e,a));let o=Math.max(0,i-a.lastSize);return o===0&&i===a.lastSize?{deltaBytes:t.deltaBytes,deltaMessages:t.deltaMessages,pendingBytes:a.pendingBytes,pendingMessages:a.pendingMessages}:(i<a.lastSize?(a.lastSize=i,a.pendingBytes+=i,t.deltaMessages>0&&(t.deltaBytes<=0||a.pendingBytes<t.deltaBytes)&&(a.pendingMessages+=await this.countNewlines(e,0,i))):(a.pendingBytes+=o,t.deltaMessages>0&&(t.deltaBytes<=0||a.pendingBytes<t.deltaBytes)&&(a.pendingMessages+=await this.countNewlines(e,a.lastSize,i)),a.lastSize=i),this.sessionDeltas.set(e,a),{deltaBytes:t.deltaBytes,deltaMessages:t.deltaMessages,pendingBytes:a.pendingBytes,pendingMessages:a.pendingMessages})}async countNewlines(e,t,r){if(r<=t)return 0;let i;try{i=await n.open(e,`r`)}catch{return 0}try{let e=t,n=0,a=Buffer.alloc(64*1024);for(;e<r;){let t=Math.min(a.length,r-e),{bytesRead:o}=await i.read(a,0,t,e);if(o<=0)break;for(let e=0;e<o;e+=1)a[e]===10&&(n+=1);e+=o}return n}finally{await i.close()}}computeProviderKey(){return O(JSON.stringify({provider:this.provider.id,model:this.provider.model}))}resolveMemoryFilePath(e){let t=e.trim();if(!t)throw Error(`path required`);let n=r.isAbsolute(t)?r.resolve(t):r.resolve(this.memoryRoot,t),i=r.relative(this.memoryRoot,n).replace(/\\/g,`/`);if(!(i.length>0&&!i.startsWith(`..`)&&!r.isAbsolute(i)&&ce(i))||!n.endsWith(`.md`))throw Error(`path required`);return{absPath:n,relPath:i}}applyEmbeddingProvider(){let e=this.config.embedding?.providerId?.trim();if(e){let t=N({providerId:e,dataDir:this.dataDir,memoryDir:this.memoryRoot});if(!t)throw Error(`Embedding provider not found: ${e}`);this.provider=t.provider,this.embeddingProviderId=e,this.providerKey=this.computeProviderKey(),this.dirty=!0;return}this.embeddingProviderId&&(this.provider=j(),this.embeddingProviderId=void 0,this.providerKey=this.computeProviderKey(),this.dirty=!0)}readMeta(){let e=this.db.prepare(`SELECT value FROM meta WHERE key = ?`).get(q);if(!e?.value)return null;try{return JSON.parse(e.value)}catch{return null}}writeMeta(e){let t=JSON.stringify(e);this.db.prepare(`INSERT INTO meta (key, value) VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value=excluded.value`).run(q,t)}loadEmbeddingCache(e){if(!this.config.cache.enabled||e.length===0)return new Map;let t=Array.from(new Set(e.filter(Boolean)));if(t.length===0)return new Map;let n=new Map,r=[this.provider.id,this.provider.model,this.providerKey];for(let e=0;e<t.length;e+=400){let i=t.slice(e,e+400),a=i.map(()=>`?`).join(`, `),o=this.db.prepare(`SELECT hash, embedding FROM ${K}\n WHERE provider = ? AND model = ? AND provider_key = ? AND hash IN (${a})`).all(...r,...i);for(let e of o)n.set(e.hash,k(e.embedding))}return n}upsertEmbeddingCache(e){if(!this.config.cache.enabled||e.length===0)return;let t=Date.now(),n=this.db.prepare(`INSERT INTO ${K} (provider, model, provider_key, hash, embedding, dims, updated_at)\n VALUES (?, ?, ?, ?, ?, ?, ?)\n ON CONFLICT(provider, model, provider_key, hash) DO UPDATE SET\n embedding=excluded.embedding,\n dims=excluded.dims,\n updated_at=excluded.updated_at`);for(let r of e){let e=r.embedding??[];n.run(this.provider.id,this.provider.model,this.providerKey,r.hash,JSON.stringify(e),e.length,t)}}async embedChunks(e){if(e.length===0)return[];let t=this.loadEmbeddingCache(e.map(e=>e.hash)),n=Array.from({length:e.length},()=>[]),r=[];for(let i=0;i<e.length;i+=1){let a=e[i],o=a?.hash?t.get(a.hash):void 0;o&&o.length>0?n[i]=o:a&&r.push({index:i,chunk:a})}if(r.length===0)return n;let i=await this.provider.embedBatch(r.map(e=>e.chunk.text)),a=[];for(let e=0;e<r.length;e+=1){let t=r[e],o=i[e]??[];n[t.index]=o,a.push({hash:t.chunk.hash,embedding:o})}return this.upsertEmbeddingCache(a),n}async indexFile(e,t){let r=ue(t.content??await n.readFile(e.absPath,`utf-8`),{tokens:this.config.chunkTokens,overlap:this.config.chunkOverlap}).filter(e=>e.text.trim().length>0);t.source===`sessions`&&de(r,t.lineMap);let i=await this.embedChunks(r),a=i.find(e=>e.length>0),o=a?await this.ensureVectorReady(a.length):!1,s=Date.now();if(o)try{this.db.prepare(`DELETE FROM ${W} WHERE id IN (SELECT id FROM chunks WHERE path = ? AND source = ?)`).run(e.path,t.source)}catch{}if(this.ftsAvailable)try{this.db.prepare(`DELETE FROM ${G} WHERE path = ? AND source = ? AND model = ?`).run(e.path,t.source,this.provider.model)}catch{}this.db.prepare(`DELETE FROM chunks WHERE path = ? AND source = ?`).run(e.path,t.source);for(let n=0;n<r.length;n+=1){let a=r[n],c=i[n]??[],l=O(`${t.source}:${e.path}:${a.startLine}:${a.endLine}:${a.hash}:${this.provider.model}`);if(this.db.prepare(`INSERT INTO chunks (id, path, source, start_line, end_line, hash, model, text, embedding, updated_at)
|
|
54
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
55
|
+
ON CONFLICT(id) DO UPDATE SET
|
|
56
|
+
hash=excluded.hash,
|
|
57
|
+
model=excluded.model,
|
|
58
|
+
text=excluded.text,
|
|
59
|
+
embedding=excluded.embedding,
|
|
60
|
+
updated_at=excluded.updated_at`).run(l,e.path,t.source,a.startLine,a.endLine,a.hash,this.provider.model,a.text,JSON.stringify(c),s),o&&c.length>0){try{this.db.prepare(`DELETE FROM ${W} WHERE id = ?`).run(l)}catch{}this.db.prepare(`INSERT INTO ${W} (id, embedding) VALUES (?, ?)`).run(l,Buffer.from(new Float32Array(c).buffer))}this.ftsAvailable&&this.db.prepare(`INSERT INTO ${G} (text, id, path, source, model, start_line, end_line)\n VALUES (?, ?, ?, ?, ?, ?, ?)`).run(a.text,l,e.path,t.source,this.provider.model,a.startLine,a.endLine)}this.db.prepare(`INSERT INTO files (path, source, hash, mtime, size) VALUES (?, ?, ?, ?, ?)
|
|
61
|
+
ON CONFLICT(path) DO UPDATE SET
|
|
62
|
+
source=excluded.source,
|
|
63
|
+
hash=excluded.hash,
|
|
64
|
+
mtime=excluded.mtime,
|
|
65
|
+
size=excluded.size`).run(e.path,t.source,e.hash,e.mtimeMs,e.size)}buildSourceFilter(){let e=this.config.sources;return e.length?{sql:` AND source IN (${e.map(()=>`?`).join(`, `)})`,params:e}:{sql:``,params:[]}}async searchVector(e,t){return await Me({db:this.db,vectorTable:W,providerModel:this.provider.model,queryVec:e,limit:t,snippetMaxChars:700,ensureVectorReady:async e=>await this.ensureVectorReady(e),sourceFilterVec:this.buildSourceFilter(),sourceFilterChunks:this.buildSourceFilter()})}async searchKeyword(e,t){return this.ftsAvailable?await Pe({db:this.db,ftsTable:G,providerModel:this.provider.model,query:e,limit:t,snippetMaxChars:700,sourceFilter:this.buildSourceFilter(),buildFtsQuery:e=>De(e),bm25RankToScore:Oe}):[]}resetIndex(){if(this.db.exec(`DELETE FROM files`),this.db.exec(`DELETE FROM chunks`),this.ftsAvailable)try{this.db.exec(`DELETE FROM ${G}`)}catch{}this.dropVectorTable(),this.vector.dims=void 0,this.sessionsDirtyFiles.clear()}async sync(e){let t=this.readMeta(),n=!t||t.model!==this.provider.model||t.provider!==this.provider.id||t.providerKey!==this.providerKey||t.chunkTokens!==this.config.chunkTokens||t.chunkOverlap!==this.config.chunkOverlap||this.vector.available&&!t?.vectorDims;n&&this.resetIndex();let r=await D(this.memoryRoot),i=(await Promise.all(r.map(async e=>le(e,this.memoryRoot)))).filter(e=>e!==null),a=new Set(i.map(e=>e.path)),o=i.map(e=>async()=>{let t=this.db.prepare(`SELECT hash FROM files WHERE path = ? AND source = ?`).get(e.path,`memory`);!n&&t?.hash===e.hash||await this.indexFile(e,{source:`memory`})});for(let e of o)await e();let s=this.db.prepare(`SELECT path FROM files WHERE source = ?`).all(`memory`);for(let e of s)if(!a.has(e.path)){this.db.prepare(`DELETE FROM files WHERE path = ? AND source = ?`).run(e.path,`memory`);try{this.db.prepare(`DELETE FROM ${W} WHERE id IN (SELECT id FROM chunks WHERE path = ? AND source = ?)`).run(e.path,`memory`)}catch{}if(this.db.prepare(`DELETE FROM chunks WHERE path = ? AND source = ?`).run(e.path,`memory`),this.ftsAvailable)try{this.db.prepare(`DELETE FROM ${G} WHERE path = ? AND source = ? AND model = ?`).run(e.path,`memory`,this.provider.model)}catch{}}this.config.experimental.sessionMemory&&(n||this.sessionsDirty)&&await this.syncSessionFiles(n),this.writeMeta({model:this.provider.model,provider:this.provider.id,providerKey:this.providerKey,chunkTokens:this.config.chunkTokens,chunkOverlap:this.config.chunkOverlap,...this.vector.available&&this.vector.dims?{vectorDims:this.vector.dims}:{}}),this.dirty=!1}async syncSessionFiles(e){let t=await ze(this.dataDir,this.sessionStoreName),n=(await Promise.all(t.map(async e=>Ve(this.dataDir,e,this.sessionStoreName)))).filter(e=>e!==null),r=new Set(n.map(e=>e.path)),i=e||this.sessionsDirtyFiles.size===0;for(let t of n){if(!i&&!this.sessionsDirtyFiles.has(t.absPath))continue;let n=this.db.prepare(`SELECT hash FROM files WHERE path = ? AND source = ?`).get(t.path,`sessions`);if(!e&&n?.hash===t.hash){this.resetSessionDelta(t.absPath,t.size);continue}await this.indexFile(t,{source:`sessions`,content:t.content,lineMap:t.lineMap}),this.resetSessionDelta(t.absPath,t.size)}let a=this.db.prepare(`SELECT path FROM files WHERE source = ?`).all(`sessions`);for(let e of a)if(!r.has(e.path)){this.db.prepare(`DELETE FROM files WHERE path = ? AND source = ?`).run(e.path,`sessions`);try{this.db.prepare(`DELETE FROM ${W} WHERE id IN (SELECT id FROM chunks WHERE path = ? AND source = ?)`).run(e.path,`sessions`)}catch{}if(this.db.prepare(`DELETE FROM chunks WHERE path = ? AND source = ?`).run(e.path,`sessions`),this.ftsAvailable)try{this.db.prepare(`DELETE FROM ${G} WHERE path = ? AND source = ? AND model = ?`).run(e.path,`sessions`,this.provider.model)}catch{}}this.sessionsDirty=!1,this.sessionsDirtyFiles.clear()}resetSessionDelta(e,t){let n=this.sessionDeltas.get(e);n&&(n.lastSize=t,n.pendingBytes=0,n.pendingMessages=0)}decorateCitations(e){return this.config.citations===`off`?e:e.map(e=>{let t=`Source: ${e.path}#L${e.startLine}-L${e.endLine}`;return this.config.citations===`on`?{...e,citation:t,snippet:`${e.snippet}\n\n${t}`}:{...e,citation:t}})}},Q=e({createBuiltinMemoryProvider:()=>$});function $(e,t){let n=Z.get(e.dataDir,t?.includeSessions?{experimental:{sessionMemory:!0},sources:[`memory`,`sessions`],store:{sessionStoreName:e.sessionStoreName,vector:{enabled:!0}}}:e.sessionStoreName?{store:{sessionStoreName:e.sessionStoreName,vector:{enabled:!0}}}:void 0),i=e.memoryDir;return{id:`builtin-memory`,name:`Builtin Memory Provider`,status:()=>n.status(),search:async(e,t)=>n.search(e),getLines:async(e,t,r)=>{let i=Math.max(1,r-t+1),a=await n.readFile({relPath:e,from:t,lines:i});return a.text?a.text.split(`
|
|
66
|
+
`):[]},listFiles:async()=>D(i),append:async e=>n.appendToMemory(e),updateFile:async(e,t)=>{await n.replaceFile({relPath:e,content:t})},deleteFile:async e=>{await n.deleteFile(e)},sync:async e=>{await n.sync({reason:e??`provider-sync`})},noteSessionUpdate:e=>{let t=r.isAbsolute(e)?e:r.resolve(e);n.noteSessionUpdate(t)}}}export{x as C,g as D,l as E,d as O,c as S,m as T,b as _,ge as a,y as b,s as c,p as d,ee as f,re as g,w as h,he as i,ne as k,te as l,ie as m,$ as n,N as o,v as p,Z as r,D as s,Q as t,h as u,C as v,u as w,f as x,S as y};
|
package/dist/index.d.ts
CHANGED
|
@@ -130,7 +130,8 @@ type SubagentContext = {
|
|
|
130
130
|
parentSessionId: string;
|
|
131
131
|
};
|
|
132
132
|
type AgentRunParamsBase = {
|
|
133
|
-
/** User data directory path (e.g. /data/user1) */dataDir: string; /**
|
|
133
|
+
/** User data directory path (e.g. /data/user1) */dataDir: string; /** The .aimax child directory used to persist session state; defaults to "sessions". */
|
|
134
|
+
sessionStoreName?: string; /** Session ID to resume; if omitted, a new session is created */
|
|
134
135
|
sessionId?: string; /** Message ID for correlating events */
|
|
135
136
|
messageId?: string; /** Channel type for this session */
|
|
136
137
|
channel: Channel$1; /** LLM provider configuration */
|
|
@@ -328,6 +329,7 @@ type MemorySearchConfig = {
|
|
|
328
329
|
};
|
|
329
330
|
sources: Array<"memory" | "sessions">;
|
|
330
331
|
store: {
|
|
332
|
+
sessionStoreName?: string;
|
|
331
333
|
vector: {
|
|
332
334
|
enabled: boolean;
|
|
333
335
|
extensionPath?: string;
|
|
@@ -413,6 +415,7 @@ declare class MemoryIndexManager {
|
|
|
413
415
|
private readonly memoryRoot;
|
|
414
416
|
private readonly storePath;
|
|
415
417
|
private readonly config;
|
|
418
|
+
private sessionStoreName;
|
|
416
419
|
private provider;
|
|
417
420
|
private providerKey;
|
|
418
421
|
private embeddingProviderId?;
|
|
@@ -495,6 +498,7 @@ type MemoryProviderContext = {
|
|
|
495
498
|
dataDir: string;
|
|
496
499
|
memoryDir: string;
|
|
497
500
|
sessionId?: string;
|
|
501
|
+
sessionStoreName?: string;
|
|
498
502
|
pluginId?: string;
|
|
499
503
|
config?: Record<string, unknown>;
|
|
500
504
|
rootDir?: string;
|
|
@@ -693,6 +697,10 @@ declare function generateSessionTitle(params: GenerateTitleParams): Promise<stri
|
|
|
693
697
|
declare function runAgent(params: AgentRunParams, _registryForTesting?: SubagentRegistry): Promise<AgentRunResult>;
|
|
694
698
|
//#endregion
|
|
695
699
|
//#region src/session/session.d.ts
|
|
700
|
+
declare const DEFAULT_SESSION_STORE_NAME = "sessions";
|
|
701
|
+
type SessionPathOptions = {
|
|
702
|
+
storeName?: string;
|
|
703
|
+
};
|
|
696
704
|
type SessionMetadata = {
|
|
697
705
|
id: string;
|
|
698
706
|
title: string;
|
|
@@ -735,44 +743,46 @@ type SessionExport = {
|
|
|
735
743
|
};
|
|
736
744
|
};
|
|
737
745
|
/** Resolves the sessions directory path within a data directory */
|
|
738
|
-
declare function
|
|
746
|
+
declare function normalizeSessionStoreName(storeName?: string): string;
|
|
747
|
+
/** Resolves the sessions directory path within a data directory */
|
|
748
|
+
declare function sessionsDir(dataDir: string, options?: SessionPathOptions): string;
|
|
739
749
|
/** Resolves the directory for a specific session */
|
|
740
|
-
declare function sessionDir(dataDir: string, sessionId: string): string;
|
|
750
|
+
declare function sessionDir(dataDir: string, sessionId: string, options?: SessionPathOptions): string;
|
|
741
751
|
/** Resolves the transcript file path for a session */
|
|
742
|
-
declare function transcriptPath(dataDir: string, sessionId: string): string;
|
|
752
|
+
declare function transcriptPath(dataDir: string, sessionId: string, options?: SessionPathOptions): string;
|
|
743
753
|
/** Resolves the metadata file path for a session */
|
|
744
|
-
declare function metadataPath(dataDir: string, sessionId: string): string;
|
|
754
|
+
declare function metadataPath(dataDir: string, sessionId: string, options?: SessionPathOptions): string;
|
|
745
755
|
/** Resolves the persisted context snapshot path for a session */
|
|
746
|
-
declare function contextSnapshotPath(dataDir: string, sessionId: string): string;
|
|
747
|
-
declare function sessionMemoryPath(dataDir: string, sessionId: string): string;
|
|
748
|
-
declare function collapseLogPath(dataDir: string, sessionId: string): string;
|
|
756
|
+
declare function contextSnapshotPath(dataDir: string, sessionId: string, options?: SessionPathOptions): string;
|
|
757
|
+
declare function sessionMemoryPath(dataDir: string, sessionId: string, options?: SessionPathOptions): string;
|
|
758
|
+
declare function collapseLogPath(dataDir: string, sessionId: string, options?: SessionPathOptions): string;
|
|
749
759
|
/** Resolves the persisted tool-results directory for a session */
|
|
750
|
-
declare function toolResultsDir(dataDir: string, sessionId: string): string;
|
|
760
|
+
declare function toolResultsDir(dataDir: string, sessionId: string, options?: SessionPathOptions): string;
|
|
751
761
|
/** Creates a new session with a generated ID */
|
|
752
|
-
declare function createSession(dataDir: string, channel: Channel): Promise<string>;
|
|
762
|
+
declare function createSession(dataDir: string, channel: Channel, options?: SessionPathOptions): Promise<string>;
|
|
753
763
|
/** Ensures a session directory exists (for resuming an existing session) */
|
|
754
|
-
declare function ensureSession(dataDir: string, sessionId: string): Promise<void>;
|
|
764
|
+
declare function ensureSession(dataDir: string, sessionId: string, options?: SessionPathOptions): Promise<void>;
|
|
755
765
|
/** Loads all transcript entries from a session */
|
|
756
|
-
declare function loadTranscript(dataDir: string, sessionId: string): Promise<TranscriptEntry[]>;
|
|
766
|
+
declare function loadTranscript(dataDir: string, sessionId: string, options?: SessionPathOptions): Promise<TranscriptEntry[]>;
|
|
757
767
|
/** Appends a single entry to the transcript file */
|
|
758
|
-
declare function appendTranscriptEntry(dataDir: string, sessionId: string, entry: TranscriptEntry, options?: {
|
|
768
|
+
declare function appendTranscriptEntry(dataDir: string, sessionId: string, entry: TranscriptEntry, options?: SessionPathOptions & {
|
|
759
769
|
providerId?: string;
|
|
760
770
|
pluginId?: string;
|
|
761
771
|
onMemoryChanged?: MemoryChangedHandler;
|
|
762
772
|
}): Promise<void>;
|
|
763
773
|
/** Lists all session IDs within a data directory */
|
|
764
|
-
declare function listSessions(dataDir: string): Promise<string[]>;
|
|
774
|
+
declare function listSessions(dataDir: string, options?: SessionPathOptions): Promise<string[]>;
|
|
765
775
|
/** Saves session metadata to disk */
|
|
766
|
-
declare function saveSessionMetadata(dataDir: string, metadata: SessionMetadata): Promise<void>;
|
|
776
|
+
declare function saveSessionMetadata(dataDir: string, metadata: SessionMetadata, options?: SessionPathOptions): Promise<void>;
|
|
767
777
|
type SessionMetadataUpdate = Partial<Omit<SessionMetadata, "id" | "createdAt">>;
|
|
768
778
|
declare function updateSessionMetadata(dataDir: string, sessionId: string, updates: SessionMetadataUpdate): Promise<SessionMetadata | null>;
|
|
769
779
|
/** Loads session metadata from disk; returns null if not found */
|
|
770
|
-
declare function loadSessionMetadata(dataDir: string, sessionId: string): Promise<SessionMetadata | null>;
|
|
780
|
+
declare function loadSessionMetadata(dataDir: string, sessionId: string, options?: SessionPathOptions): Promise<SessionMetadata | null>;
|
|
771
781
|
/** Lists all sessions with their metadata summaries, optionally filtered by channel */
|
|
772
|
-
declare function listSessionSummaries(dataDir: string, channel?: Channel): Promise<SessionSummary[]>;
|
|
773
|
-
declare function loadSessionContextSnapshot(dataDir: string, sessionId: string): Promise<SessionContextSnapshot>;
|
|
774
|
-
declare function inspectSession(dataDir: string, sessionId: string): Promise<SessionInspection>;
|
|
775
|
-
declare function exportSession(dataDir: string, sessionId: string): Promise<SessionExport>;
|
|
782
|
+
declare function listSessionSummaries(dataDir: string, channel?: Channel, options?: SessionPathOptions): Promise<SessionSummary[]>;
|
|
783
|
+
declare function loadSessionContextSnapshot(dataDir: string, sessionId: string, options?: SessionPathOptions): Promise<SessionContextSnapshot>;
|
|
784
|
+
declare function inspectSession(dataDir: string, sessionId: string, options?: SessionPathOptions): Promise<SessionInspection>;
|
|
785
|
+
declare function exportSession(dataDir: string, sessionId: string, options?: SessionPathOptions): Promise<SessionExport>;
|
|
776
786
|
//#endregion
|
|
777
787
|
//#region src/context/session-context-store.d.ts
|
|
778
788
|
type PersistedToolResult = {
|
|
@@ -809,7 +819,7 @@ type SessionContextStore = {
|
|
|
809
819
|
type SessionContextStoreOptions = {
|
|
810
820
|
dataDir: string;
|
|
811
821
|
sessionId: string;
|
|
812
|
-
};
|
|
822
|
+
} & SessionPathOptions;
|
|
813
823
|
declare function createSessionContextStore(options: SessionContextStoreOptions): Promise<SessionContextStore>;
|
|
814
824
|
//#endregion
|
|
815
825
|
//#region src/context/context-manager.d.ts
|
|
@@ -872,6 +882,7 @@ type ContextManager = {
|
|
|
872
882
|
declare function createContextManager(params: {
|
|
873
883
|
dataDir: string;
|
|
874
884
|
sessionId: string;
|
|
885
|
+
sessionStoreName?: string;
|
|
875
886
|
}): Promise<ContextManager>;
|
|
876
887
|
//#endregion
|
|
877
888
|
//#region src/bootstrap/bootstrap.d.ts
|
|
@@ -1054,6 +1065,7 @@ declare function resolveMemoryProvider(params: {
|
|
|
1054
1065
|
dataDir: string;
|
|
1055
1066
|
memoryDir: string;
|
|
1056
1067
|
sessionId?: string;
|
|
1068
|
+
sessionStoreName?: string;
|
|
1057
1069
|
}): {
|
|
1058
1070
|
provider: MemoryProvider;
|
|
1059
1071
|
registration: MemoryProviderRegistration;
|
|
@@ -1577,7 +1589,7 @@ declare function buildSubagentAnnounceMessage(params: {
|
|
|
1577
1589
|
* @param loopDetection Tool-loop detection config inherited from the parent.
|
|
1578
1590
|
* @param spawnFn Function that actually runs a child agent (injected to avoid circular imports).
|
|
1579
1591
|
*/
|
|
1580
|
-
declare function createSessionsSpawnTool(registry: SubagentRegistry, parentSessionId: string, depth: number, dataDir: string, channel: AgentRunParams["channel"], llm: AgentRunParams["llm"], loopDetection: ToolLoopDetectionConfig | undefined, inheritedRunParams: Pick<AgentRunParams, "plugins" | "memory" | "messaging" | "docs" | "historyLimit" | "onProgress" | "messageId">, spawnFn: (params: AgentRunParams) => Promise<AgentRunResult>): AgentTool<typeof spawnSchema, SpawnResult>;
|
|
1592
|
+
declare function createSessionsSpawnTool(registry: SubagentRegistry, parentSessionId: string, depth: number, dataDir: string, channel: AgentRunParams["channel"], llm: AgentRunParams["llm"], loopDetection: ToolLoopDetectionConfig | undefined, inheritedRunParams: Pick<AgentRunParams, "plugins" | "memory" | "messaging" | "docs" | "historyLimit" | "onProgress" | "messageId" | "sessionStoreName">, spawnFn: (params: AgentRunParams) => Promise<AgentRunResult>): AgentTool<typeof spawnSchema, SpawnResult>;
|
|
1581
1593
|
//#endregion
|
|
1582
1594
|
//#region src/tools/subagents.d.ts
|
|
1583
1595
|
declare const ACTIONS: readonly ["list", "kill"];
|
|
@@ -1667,7 +1679,7 @@ type SubagentToolsContext = {
|
|
|
1667
1679
|
depth: number;
|
|
1668
1680
|
channel: AgentRunParams["channel"];
|
|
1669
1681
|
llm: AgentRunParams["llm"];
|
|
1670
|
-
inheritedRunParams?: Pick<AgentRunParams, "plugins" | "memory" | "messaging" | "docs" | "historyLimit" | "onProgress" | "messageId">;
|
|
1682
|
+
inheritedRunParams?: Pick<AgentRunParams, "plugins" | "memory" | "messaging" | "docs" | "historyLimit" | "onProgress" | "messageId" | "sessionStoreName">;
|
|
1671
1683
|
loopDetection?: ToolLoopDetectionConfig;
|
|
1672
1684
|
memoryOptions?: MemoryToolOptions;
|
|
1673
1685
|
contextManager?: ContextManager;
|
|
@@ -1892,7 +1904,8 @@ type HitlPauseContext = {
|
|
|
1892
1904
|
};
|
|
1893
1905
|
/** Options for resuming a paused session. */
|
|
1894
1906
|
type ResumeOptions = {
|
|
1895
|
-
/** The data directory for the user. */dataDir: string; /** The
|
|
1907
|
+
/** The data directory for the user. */dataDir: string; /** The .aimax child directory used to persist this session. */
|
|
1908
|
+
sessionStoreName?: string; /** The session to resume. */
|
|
1896
1909
|
sessionId: string; /** The request to resolve. */
|
|
1897
1910
|
requestId: string; /** The user's resolution. */
|
|
1898
1911
|
resolution: HitlResolution$1;
|
|
@@ -1936,18 +1949,18 @@ declare function isHitlPauseSignal(error: unknown): error is HitlPauseSignal;
|
|
|
1936
1949
|
//#endregion
|
|
1937
1950
|
//#region src/hitl/session-store.d.ts
|
|
1938
1951
|
/** Returns the path to `pending-hitl.json` for a session. */
|
|
1939
|
-
declare function pendingHitlPath(dataDir: string, sessionId: string): string;
|
|
1952
|
+
declare function pendingHitlPath(dataDir: string, sessionId: string, options?: SessionPathOptions): string;
|
|
1940
1953
|
/** Returns the path to `hitl-history.jsonl` for a session. */
|
|
1941
|
-
declare function hitlHistoryPath(dataDir: string, sessionId: string): string;
|
|
1954
|
+
declare function hitlHistoryPath(dataDir: string, sessionId: string, options?: SessionPathOptions): string;
|
|
1942
1955
|
/** Reads the current `pending-hitl.json`; returns `null` if none exists. */
|
|
1943
|
-
declare function readPendingHitl(dataDir: string, sessionId: string): Promise<PausedRunState | null>;
|
|
1956
|
+
declare function readPendingHitl(dataDir: string, sessionId: string, options?: SessionPathOptions): Promise<PausedRunState | null>;
|
|
1944
1957
|
/** Reads all entries from `hitl-history.jsonl`; returns `[]` if none exists. */
|
|
1945
|
-
declare function readHitlHistory(dataDir: string, sessionId: string): Promise<HitlHistoryEntry[]>;
|
|
1958
|
+
declare function readHitlHistory(dataDir: string, sessionId: string, options?: SessionPathOptions): Promise<HitlHistoryEntry[]>;
|
|
1946
1959
|
/**
|
|
1947
1960
|
* Creates and persists an initial pending HITL state from a request.
|
|
1948
1961
|
* Also appends a "requested" entry to the history log.
|
|
1949
1962
|
*/
|
|
1950
|
-
declare function createPendingHitl(dataDir: string, sessionId: string, request: HitlRequest, checkpoint: PausedRunState["checkpoint"], context: PausedRunState["context"], toolContext?: HitlToolContext$1): Promise<PausedRunState>;
|
|
1963
|
+
declare function createPendingHitl(dataDir: string, sessionId: string, request: HitlRequest, checkpoint: PausedRunState["checkpoint"], context: PausedRunState["context"], toolContext?: HitlToolContext$1, options?: SessionPathOptions): Promise<PausedRunState>;
|
|
1951
1964
|
/**
|
|
1952
1965
|
* Transitions the pending HITL to a new status and persists the update.
|
|
1953
1966
|
*
|
|
@@ -1956,12 +1969,12 @@ declare function createPendingHitl(dataDir: string, sessionId: string, request:
|
|
|
1956
1969
|
* - The request ID doesn't match
|
|
1957
1970
|
* - The current status is not "pending"
|
|
1958
1971
|
*/
|
|
1959
|
-
declare function transitionHitlStatus(dataDir: string, sessionId: string, requestId: string, newStatus: Exclude<HitlStatus, "pending">, resolution?: HitlResolution): Promise<PausedRunState | null>;
|
|
1972
|
+
declare function transitionHitlStatus(dataDir: string, sessionId: string, requestId: string, newStatus: Exclude<HitlStatus, "pending">, resolution?: HitlResolution, options?: SessionPathOptions): Promise<PausedRunState | null>;
|
|
1960
1973
|
/**
|
|
1961
1974
|
* Removes the `pending-hitl.json` file after the session has fully resumed.
|
|
1962
1975
|
* This is a cleanup step — the history log retains the full audit trail.
|
|
1963
1976
|
*/
|
|
1964
|
-
declare function clearPendingHitl(dataDir: string, sessionId: string): Promise<void>;
|
|
1977
|
+
declare function clearPendingHitl(dataDir: string, sessionId: string, options?: SessionPathOptions): Promise<void>;
|
|
1965
1978
|
//#endregion
|
|
1966
1979
|
//#region src/hitl/resume.d.ts
|
|
1967
1980
|
/**
|
|
@@ -1974,7 +1987,7 @@ declare function clearPendingHitl(dataDir: string, sessionId: string): Promise<v
|
|
|
1974
1987
|
* 4. The current status is "pending"
|
|
1975
1988
|
* 5. The request has not expired
|
|
1976
1989
|
*/
|
|
1977
|
-
declare function validateResume(dataDir: string, sessionId: string, requestId: string): Promise<ResumeValidationResult>;
|
|
1990
|
+
declare function validateResume(dataDir: string, sessionId: string, requestId: string, sessionStoreName?: string): Promise<ResumeValidationResult>;
|
|
1978
1991
|
/**
|
|
1979
1992
|
* Resolves a pending HITL request: validates, transitions to "resolved",
|
|
1980
1993
|
* and returns the updated state.
|
|
@@ -1983,4 +1996,4 @@ declare function validateResume(dataDir: string, sessionId: string, requestId: s
|
|
|
1983
1996
|
*/
|
|
1984
1997
|
declare function resolveHitlRequest(options: ResumeOptions): Promise<ResolveHitlRequestResult>;
|
|
1985
1998
|
//#endregion
|
|
1986
|
-
export { AgentBinding, AgentConfig, type AgentCustomProgressEvent, AgentModelConfig, type AgentProgressEvent, type AgentRunParams, type AgentRunResult, AgentsConfig, BOOTSTRAP_FILE_NAMES, BOOTSTRAP_MAX_CHARS, BOOTSTRAP_TOTAL_MAX_CHARS, type BootstrapContextFile, type BootstrapEnsureResult, type BootstrapFile, type BootstrapMountResult, type BootstrapMountStatus, type CallbackEventPayload, type CallbackPayload, type Channel, type ContextManager, type EmbeddingProvider, type EmbeddingProviderContext, type EmbeddingProviderFactory, type EmbeddingProviderRegistration, type HitlPauseContext, HitlPauseSignal, type HitlToolContext, MAX_CHILDREN_PER_SESSION, MAX_SUBAGENT_DEPTH, type MemoryCallOptions, type MemoryChangeSource, type MemoryChangedEvent, type MemoryChangedHandler, MemoryIndexManager, type MemoryProvider, type MemoryProviderContext, type MemoryProviderFactory, type MemoryProviderRegistration, type MemoryProviderStatus, type MemorySearchOptions, type MemorySearchResult, type NormalizedPluginsConfig, PLUGIN_MANIFEST_FILENAME, PLUGIN_MANIFEST_FILENAMES, type PersistedSubagentRunRecord, type PersistedToolResult, type PluginApi, type PluginCandidate, type PluginConfigUiHint, type PluginCustomProgressInput, type PluginDiagnostic, type PluginDiscoveryOptions, type PluginDiscoveryResult, type PluginEntryConfig, type PluginExecutionRuntime, type PluginHookAfterCompactionEvent, type PluginHookAfterPromptBuildEvent, type PluginHookAfterToolCallEvent, type PluginHookAgentContext, type PluginHookAgentEndEvent, type PluginHookAssistantMessageEndEvent, type PluginHookBeforeCompactionEvent, type PluginHookBeforeModelResolveEvent, type PluginHookBeforeModelResolveResult, type PluginHookBeforePromptBuildEvent, type PluginHookBeforePromptBuildResult, type PluginHookBeforeToolCallEvent, type PluginHookBeforeToolCallResult, type PluginHookHandlerMap, type PluginHookLlmInputEvent, type PluginHookLlmOutputEvent, type PluginHookMemoryChangedEvent, type PluginHookName, PluginHookRegistry, type PluginHookSessionEndEvent, type PluginHookSessionResetEvent, type PluginHookSessionStartEvent, type PluginKind, type PluginManifest, type PluginManifestLoadResult, type PluginManifestRegistry, type PluginOrigin, type PluginProgressEmitter, type PluginRecord, type PluginRegistry, type PluginRuntime, type PluginRuntimeContext, type PluginSystem, type PluginSystemOptions, type PluginToolOptions, PluginToolRegistry, type PluginsConfig, type PluginsConfigValidationResult, type RegisteredPluginTool, type ResumeOptions, type ResumeValidationResult, type RunResultPayload, type SessionContextStore, type SessionExport, type SessionInspection, type SessionMetadata, type SessionMetadataUpdate, type SessionSummary, type Skill, type SlashCommandList, type SubagentContext, SubagentRegistry, type SubagentRunRecord, type SubagentStatus, type SubagentToolsContext, type SystemPromptParams, type ToolLoopDetectionConfig, type TranscriptEntry, addAgent, addBinding, aimaxDir, appendToMemory, appendTranscriptEntry, bootstrapMountLayout, buildBootstrapContextFiles, buildSkillsPrompt, buildSubagentAnnounceMessage, buildSystemPrompt, cleanupOldSubagentRecords, clearPendingHitl, collapseLogPath, contextSnapshotPath, createAgentTools, createApplyPatchTool, createBashTool, createBuiltinMemoryProvider, createClarifyTool, createContextManager, createEditFileTool, createExecTool, createImageTool, createListDirTool, createMemoryAppendTool, createMemoryGetTool, createMemorySearchTool, createPendingHitl, createPluginProgressEmitter, createPluginRuntime, createProcessTool, createReadFileTool, createRequestApprovalTool, createRequestReviewTool, createSession, createSessionContextStore, createSessionsSpawnTool, createSubagentsTool, createWriteFileTool, deleteMemoryFile, discoverAIMaxPlugins, ensureBootstrapMountLayout, ensureSession, exportSession, generateSessionTitle, getAgentConfig, getMemoryLines, hasBootstrapSentinel, hitlHistoryPath, initializePluginSystem, inspectBootstrapMountLayout, inspectSession, isBootstrapMountLayoutReady, isHitlPauseSignal, listAgents, listAvailableSlashCommands, listBindings, listMemoryFiles, listSessionSummaries, listSessions, listSubagentRunsFromDisk, loadAgentsConfig, loadBootstrapFiles, readPendingHitl as loadPendingHitl, readPendingHitl, loadPluginManifest, loadPluginManifestRegistry, loadPlugins, loadSessionContextSnapshot, loadSessionMetadata, loadSkills, loadSkillsFromDirs, loadSkillsWithPluginDirs, loadSubagentRegistryFromDisk, loadTranscript, memoryDir, metadataPath, normalizeAgentId, normalizePluginsConfig, pendingHitlPath, primaryMemoryPath, readHitlHistory, readMemoryFile, readPrimaryMemory, registerEmbeddingProvider, registerMemoryProvider, removeAgent, removeBindings, replaceMemoryFile, resetEmbeddingProviderRegistryForTests, resetMemoryProviderRegistryForTests, resolveAgentDir, resolveAgentIdByBinding, resolveAgentsConfigPath, resolveDefaultAgentId, resolveEmbeddingProvider, resolveHitlRequest, resolveHitlRequest as resolvePendingHitl, resolveMemoryProvider, resolveModelFallbacks, resolveModelString, resolvePluginManifestPath, runAgent, saveAgentsConfig, saveSessionMetadata, saveSubagentRegistryToDisk, searchMemory, sessionDir, sessionMemoryPath, sessionsDir, skillsDir, toolResultsDir, transcriptPath, transitionHitlStatus, updateAgentIdentity, updateSessionMetadata, validatePluginsConfig, validateResume, wrapToolsWithHooks };
|
|
1999
|
+
export { AgentBinding, AgentConfig, type AgentCustomProgressEvent, AgentModelConfig, type AgentProgressEvent, type AgentRunParams, type AgentRunResult, AgentsConfig, BOOTSTRAP_FILE_NAMES, BOOTSTRAP_MAX_CHARS, BOOTSTRAP_TOTAL_MAX_CHARS, type BootstrapContextFile, type BootstrapEnsureResult, type BootstrapFile, type BootstrapMountResult, type BootstrapMountStatus, type CallbackEventPayload, type CallbackPayload, type Channel, type ContextManager, DEFAULT_SESSION_STORE_NAME, type EmbeddingProvider, type EmbeddingProviderContext, type EmbeddingProviderFactory, type EmbeddingProviderRegistration, type HitlPauseContext, HitlPauseSignal, type HitlToolContext, MAX_CHILDREN_PER_SESSION, MAX_SUBAGENT_DEPTH, type MemoryCallOptions, type MemoryChangeSource, type MemoryChangedEvent, type MemoryChangedHandler, MemoryIndexManager, type MemoryProvider, type MemoryProviderContext, type MemoryProviderFactory, type MemoryProviderRegistration, type MemoryProviderStatus, type MemorySearchOptions, type MemorySearchResult, type NormalizedPluginsConfig, PLUGIN_MANIFEST_FILENAME, PLUGIN_MANIFEST_FILENAMES, type PersistedSubagentRunRecord, type PersistedToolResult, type PluginApi, type PluginCandidate, type PluginConfigUiHint, type PluginCustomProgressInput, type PluginDiagnostic, type PluginDiscoveryOptions, type PluginDiscoveryResult, type PluginEntryConfig, type PluginExecutionRuntime, type PluginHookAfterCompactionEvent, type PluginHookAfterPromptBuildEvent, type PluginHookAfterToolCallEvent, type PluginHookAgentContext, type PluginHookAgentEndEvent, type PluginHookAssistantMessageEndEvent, type PluginHookBeforeCompactionEvent, type PluginHookBeforeModelResolveEvent, type PluginHookBeforeModelResolveResult, type PluginHookBeforePromptBuildEvent, type PluginHookBeforePromptBuildResult, type PluginHookBeforeToolCallEvent, type PluginHookBeforeToolCallResult, type PluginHookHandlerMap, type PluginHookLlmInputEvent, type PluginHookLlmOutputEvent, type PluginHookMemoryChangedEvent, type PluginHookName, PluginHookRegistry, type PluginHookSessionEndEvent, type PluginHookSessionResetEvent, type PluginHookSessionStartEvent, type PluginKind, type PluginManifest, type PluginManifestLoadResult, type PluginManifestRegistry, type PluginOrigin, type PluginProgressEmitter, type PluginRecord, type PluginRegistry, type PluginRuntime, type PluginRuntimeContext, type PluginSystem, type PluginSystemOptions, type PluginToolOptions, PluginToolRegistry, type PluginsConfig, type PluginsConfigValidationResult, type RegisteredPluginTool, type ResumeOptions, type ResumeValidationResult, type RunResultPayload, type SessionContextStore, type SessionExport, type SessionInspection, type SessionMetadata, type SessionMetadataUpdate, type SessionSummary, type Skill, type SlashCommandList, type SubagentContext, SubagentRegistry, type SubagentRunRecord, type SubagentStatus, type SubagentToolsContext, type SystemPromptParams, type ToolLoopDetectionConfig, type TranscriptEntry, addAgent, addBinding, aimaxDir, appendToMemory, appendTranscriptEntry, bootstrapMountLayout, buildBootstrapContextFiles, buildSkillsPrompt, buildSubagentAnnounceMessage, buildSystemPrompt, cleanupOldSubagentRecords, clearPendingHitl, collapseLogPath, contextSnapshotPath, createAgentTools, createApplyPatchTool, createBashTool, createBuiltinMemoryProvider, createClarifyTool, createContextManager, createEditFileTool, createExecTool, createImageTool, createListDirTool, createMemoryAppendTool, createMemoryGetTool, createMemorySearchTool, createPendingHitl, createPluginProgressEmitter, createPluginRuntime, createProcessTool, createReadFileTool, createRequestApprovalTool, createRequestReviewTool, createSession, createSessionContextStore, createSessionsSpawnTool, createSubagentsTool, createWriteFileTool, deleteMemoryFile, discoverAIMaxPlugins, ensureBootstrapMountLayout, ensureSession, exportSession, generateSessionTitle, getAgentConfig, getMemoryLines, hasBootstrapSentinel, hitlHistoryPath, initializePluginSystem, inspectBootstrapMountLayout, inspectSession, isBootstrapMountLayoutReady, isHitlPauseSignal, listAgents, listAvailableSlashCommands, listBindings, listMemoryFiles, listSessionSummaries, listSessions, listSubagentRunsFromDisk, loadAgentsConfig, loadBootstrapFiles, readPendingHitl as loadPendingHitl, readPendingHitl, loadPluginManifest, loadPluginManifestRegistry, loadPlugins, loadSessionContextSnapshot, loadSessionMetadata, loadSkills, loadSkillsFromDirs, loadSkillsWithPluginDirs, loadSubagentRegistryFromDisk, loadTranscript, memoryDir, metadataPath, normalizeAgentId, normalizePluginsConfig, normalizeSessionStoreName, pendingHitlPath, primaryMemoryPath, readHitlHistory, readMemoryFile, readPrimaryMemory, registerEmbeddingProvider, registerMemoryProvider, removeAgent, removeBindings, replaceMemoryFile, resetEmbeddingProviderRegistryForTests, resetMemoryProviderRegistryForTests, resolveAgentDir, resolveAgentIdByBinding, resolveAgentsConfigPath, resolveDefaultAgentId, resolveEmbeddingProvider, resolveHitlRequest, resolveHitlRequest as resolvePendingHitl, resolveMemoryProvider, resolveModelFallbacks, resolveModelString, resolvePluginManifestPath, runAgent, saveAgentsConfig, saveSessionMetadata, saveSubagentRegistryToDisk, searchMemory, sessionDir, sessionMemoryPath, sessionsDir, skillsDir, toolResultsDir, transcriptPath, transitionHitlStatus, updateAgentIdentity, updateSessionMetadata, validatePluginsConfig, validateResume, wrapToolsWithHooks };
|