@gencode/agents 0.8.2 → 0.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -0
- package/dist/{builtin-provider-DVFQMfYl.js → builtin-provider-PIpf9WYR.js} +9 -9
- package/dist/config/index.d.ts +2 -2
- package/dist/config/index.js +1 -1
- package/dist/{config-CJ7qy-pr.js → config-DYv0xUdi.js} +1 -1
- package/dist/{goal-events-r0c27HLI.js → goal-events-Og8bMhZU.js} +1 -1
- package/dist/{goal-store-1Lewl_Xz.js → goal-store-C_Z3P5Cg.js} +1 -1
- package/dist/{index-Ci56oZD5.d.ts → index-iedOAibO.d.ts} +6 -1
- package/dist/index.d.ts +21 -20
- package/dist/index.js +115 -92
- package/dist/{session-B26JETSt.js → session-MBebUrjk.js} +2 -2
- package/dist/{session-store-Dbs4fW4O.js → session-store-DYB18J4L.js} +1 -1
- package/package.json +2 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
# @gencode/agents
|
|
2
2
|
|
|
3
|
+
## 0.9.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- f7a9b2f: 修复使用 `apiFormat: "anthropic-messages"` 连接第三方 Anthropic 兼容 API 网关时,因 SSE 事件顺序不严格(缺少 `message_start` 或 `message_delta` 先于 `message_start` 到达)导致请求失败并报 `Unexpected event order, got message_delta before "message_start"` 的问题。修复后系统会自动修正事件流顺序,无需调整 API 网关配置。
|
|
8
|
+
|
|
9
|
+
## 0.9.0
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- dd8966e: Add Anthropic Messages API format support for AIMax runs. Users can keep the existing OpenAI-compatible default or set `AIMAX_API_FORMAT=anthropic-messages` / `--api-format anthropic-messages` with an Anthropic-compatible base URL, API key, and model. Agent turns, subagents, history compaction, topic segmentation, title generation, plugin LLM access, CLI runs, CLI resume, summarize, and Console-spawned runs now inherit the selected API format.
|
|
14
|
+
|
|
15
|
+
### Patch Changes
|
|
16
|
+
|
|
17
|
+
- c2278fa: When the LLM returns a recognizable context-limit error (typically HTTP 400, including messages such as `请求上下文过大`), a single `aimax run` now automatically performs emergency history compaction and retries the current turn before exiting. Each turn allows one compaction plus one retry; each run allows up to two compactions shared by the main agent and subagents. If recovery succeeds, the run completes normally (`exit 0`) and active goals continue as before. If compaction is skipped or the retry still fails, the run exits with `exit 1` and an error message that notes emergency compaction was attempted and suggests `/compact` or reducing tool output. Non-context errors (for example invalid API keys) are not retried via this path.
|
|
18
|
+
- e84813b: add updateAagent
|
|
19
|
+
- d747bbd: Localize AIMax `/goal` user-facing guidance and status messages for Chinese-first users while keeping the `/goal`, `/goal pause`, `/goal resume`, `/goal clear`, and `--token-budget` command syntax unchanged. The empty-goal help now includes examples that show how to write both the objective and clear completion criteria together, so goal completion is guided by verifiable conditions such as test results and bug reproduction checks.
|
|
20
|
+
- 2f4d004: Topic segmentation now maintains Flash-generated conversation segments, stores segment embeddings in a session-level `topic-segments.sqlite` vector index, and uses a local `transformers.js` embedding model from the mounted `model/` directory to retrieve older relevant topics before final classification. Long IM-style sessions can now return to much older topics more reliably while still preserving the existing transcript files, fallback behavior, and CLI usage. Online Flash rerank and turn-supplement fallbacks now share an 8-second request budget; when that budget is exhausted, AIMax immediately returns the local retrieval result instead of waiting longer on remote model calls.
|
|
21
|
+
|
|
3
22
|
## 0.8.2
|
|
4
23
|
|
|
5
24
|
### Patch Changes
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import{t as e}from"./rolldown-runtime-CNxR59P3.js";import{O as t,P as n,S as r}from"./session-
|
|
1
|
+
import{t as e}from"./rolldown-runtime-CNxR59P3.js";import{O as t,P as n,S as r}from"./session-MBebUrjk.js";import{createRequire as i}from"node:module";import a from"node:fs/promises";import o,{basename as s}from"node:path";import c from"node:crypto";import l from"node:fs";function u(e){return!!(e&&typeof e==`object`&&`code`in e&&e.code===`ENOENT`)}async function d(e){let t;try{t=await a.lstat(e)}catch(e){if(u(e))return{missing:!0};throw e}if(t.isSymbolicLink()||!t.isFile())throw Error(`path required`);return{missing:!1,stat:t}}function f(e){try{l.mkdirSync(e,{recursive:!0})}catch{}return e}function p(e){return e.trim().replace(/^[./]+/,``).replace(/\\/g,`/`)}function m(e){let t=p(e);return t?t===`MEMORY.md`||t===`memory.md`?!0:t.startsWith(`memory/`):!1}async function h(e,t){let n=await a.readdir(e,{withFileTypes:!0});for(let r of n){let n=o.join(e,r.name);if(!r.isSymbolicLink()){if(r.isDirectory()){await h(n,t);continue}r.isFile()&&r.name.endsWith(`.md`)&&t.push(n)}}}async function g(e){let t=[],n=o.join(e,`MEMORY.md`),r=o.join(e,`memory.md`),i=o.join(e,`memory`),s=async e=>{try{let n=await a.lstat(e);if(n.isSymbolicLink()||!n.isFile()||!e.endsWith(`.md`))return;t.push(e)}catch{}};await s(n),await s(r);try{let e=await a.lstat(i);!e.isSymbolicLink()&&e.isDirectory()&&await h(i,t)}catch{}if(t.length<=1)return t;let c=new Set,l=[];for(let e of t){let t=e;try{t=await a.realpath(e)}catch{}c.has(t)||(c.add(t),l.push(e))}return l}function _(e){return c.createHash(`sha256`).update(e).digest(`hex`)}async function ee(e,t){let n;try{n=await a.stat(e)}catch(e){if(u(e))return null;throw e}let r;try{r=await a.readFile(e,`utf-8`)}catch(e){if(u(e))return null;throw e}let i=_(r);return{path:o.relative(t,e).replace(/\\/g,`/`),absPath:e,mtimeMs:n.mtimeMs,size:n.size,hash:i}}function v(e,t){let n=e.split(`
|
|
2
2
|
`);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(`
|
|
3
|
-
`),r=e.lineNo,i=t.lineNo;a.push({startLine:r,endLine:i,text:n,hash:_(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 te(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 y(e){try{let t=JSON.parse(e);return Array.isArray(t)?t:[]}catch{return[]}}function ne(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))}
|
|
3
|
+
`),r=e.lineNo,i=t.lineNo;a.push({startLine:r,endLine:i,text:n,hash:_(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 te(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 y(e){try{let t=JSON.parse(e);return Array.isArray(t)?t:[]}catch{return[]}}function ne(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))}async function b(e){try{let t=await import(`sqlite-vec`),n=(e.extensionPath?.trim()?e.extensionPath.trim():void 0)??t.getLoadablePath();return n?e.db.loadExtension(n):t.load(e.db),{ok:!0,extensionPath:n}}catch(e){return{ok:!1,error:e instanceof Error?e.message:String(e)}}}const x=i(import.meta.url);function S(){return globalThis.Bun!==void 0}function re(){try{return x(`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})}}var ie=class{constructor(e){this.stmt=e}all(...e){return this.stmt.all(...e)}get(...e){return this.stmt.get(...e)}run(...e){this.stmt.run(...e)}},ae=class{db;constructor(e,t){let n=x(`bun:sqlite`);this.db=new(n.Database??n.default?.Database)(e)}exec(e){this.db.run(e)}prepare(e){return new ie(this.db.prepare(e))}loadExtension(e){this.db.loadExtension(e)}close(){this.db.close()}},oe=class{stmt;constructor(e){this.stmt=e}all(...e){return this.stmt.all(...e)}get(...e){return this.stmt.get(...e)}run(...e){this.stmt.run(...e)}},se=class{db;constructor(e,t){let{DatabaseSync:n}=re();this.db=new n(e,{allowExtension:t?.allowExtension})}exec(e){this.db.exec(e)}prepare(e){return new oe(this.db.prepare(e))}loadExtension(e){this.db.loadExtension(e)}close(){this.db.close()}};function C(e,t){return S()?new ae(e,t):new se(e,t)}function ce(e){return(e.toLowerCase().match(/[\p{L}\p{N}_]+/gu)??[]).filter(Boolean)}function w(e){return c.createHash(`sha256`).update(e).digest().readUInt32BE(0)}function T(e,t=384){let n=Array(t).fill(0),r=ce(e);if(r.length===0)return n;for(let e of r){let r=w(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 E(e){let t=e?.model?.trim()||`mock-embedding-v1`,n=e?.dimensions??384;return{id:`external-mock`,model:t,embedQuery:async e=>T(e,n),embedBatch:async e=>e.map(e=>T(e,n))}}const D=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 le(e){let t=e.id?.trim()||e.pluginId;return D.register({id:t,pluginId:e.pluginId,create:e.create,config:e.config,rootDir:e.rootDir,source:e.source}),t}function O(e){let t=e.providerId?.trim(),n=e.pluginId?.trim(),r=(t?D.getById(t):void 0)??(n?D.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 ue(){D.clear()}const k={enabled:!1,lambda:.7};function A(e){let t=e.toLowerCase().match(/[a-z0-9_]+/g)??[];return new Set(t)}function de(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 fe(e,t,n){if(t.length===0)return 0;let r=0,i=n.get(e.id)??A(e.content);for(let e of t){let t=de(i,n.get(e.id)??A(e.content));t>r&&(r=t)}return r}function j(e,t,n){return n*e-(1-n)*t}function M(e,t={}){let{enabled:n=k.enabled,lambda:r=k.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,A(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=j(l(n.score),fe(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 N(e,t={}){if(e.length===0)return e;let n=new Map;return M(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 P={enabled:!1,halfLifeDays:30},F=/(?:^|\/)(?:memory)\/(\d{4})-(\d{2})-(\d{2})\.md$/;function I(e){return!Number.isFinite(e)||e<=0?0:Math.LN2/e}function L(e){let t=I(e.halfLifeDays),n=Math.max(0,e.ageInDays);return t<=0||!Number.isFinite(n)?1:Math.exp(-t*n)}function R(e){return e.score*L(e)}function z(e){let t=e.replaceAll(`\\`,`/`).replace(/^\.\//,``),n=F.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 B(e){let t=e.replaceAll(`\\`,`/`).replace(/^\.\//,``);return t===`MEMORY.md`||t===`memory.md`?!0:t.startsWith(`memory/`)?!F.test(t):!1}async function V(e){let t=z(e.filePath);if(t)return t;if(e.source===`memory`&&B(e.filePath)||!e.memoryRoot)return null;let n=o.isAbsolute(e.filePath)?e.filePath:o.resolve(e.memoryRoot,e.filePath);try{let e=await a.stat(n);return Number.isFinite(e.mtimeMs)?new Date(e.mtimeMs):null}catch{return null}}function pe(e,t){return Math.max(0,t-e.getTime())/864e5}async function me(e){let t={...P,...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=V({filePath:i.path,source:i.source,memoryRoot:e.memoryRoot}),r.set(a,o));let s=await o;if(!s)return i;let c=R({score:i.score,ageInDays:pe(s,n),halfLifeDays:t.halfLifeDays});return{...i,score:c}}))}function he(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 ge(e){return 1/(1+(Number.isFinite(e)?Math.max(0,e):999))}async function _e(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 me({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:{...P,...e.temporalDecay},memoryRoot:e.memoryRoot,nowMs:e.nowMs})).slice().sort((e,t)=>t.score-e.score),r={...k,...e.mmr};return r.enabled?N(n,r):n}function ve(e){e.db.exec(`
|
|
4
4
|
CREATE TABLE IF NOT EXISTS meta (
|
|
5
5
|
key TEXT PRIMARY KEY,
|
|
6
6
|
value TEXT NOT NULL
|
|
@@ -37,19 +37,19 @@ import{t as e}from"./rolldown-runtime-CNxR59P3.js";import{O as t,P as n,S as r}f
|
|
|
37
37
|
updated_at INTEGER NOT NULL,
|
|
38
38
|
PRIMARY KEY (provider, model, provider_key, hash)
|
|
39
39
|
);
|
|
40
|
-
`),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 H(e.db,`files`,`source`,`TEXT NOT NULL DEFAULT 'memory'`),H(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 H(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 U(e,t){return e.length<=t?e:e.slice(0,t)}const
|
|
40
|
+
`),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 H(e.db,`files`,`source`,`TEXT NOT NULL DEFAULT 'memory'`),H(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 H(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 U(e,t){return e.length<=t?e:e.slice(0,t)}const ye=e=>Buffer.from(new Float32Array(e).buffer);async function be(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,
|
|
41
41
|
c.source,
|
|
42
42
|
vec_distance_cosine(v.embedding, ?) AS dist
|
|
43
|
-
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(
|
|
43
|
+
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(ye(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:U(t.text,e.snippetMaxChars),source:t.source})):xe({db:e.db,providerModel:e.providerModel,sourceFilter:e.sourceFilterChunks}).map(t=>({chunk:t,score:ne(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:U(t.chunk.text,e.snippetMaxChars),source:t.chunk.source}))}function xe(e){return e.db.prepare(`SELECT id, path, start_line, end_line, text, embedding, source
|
|
44
44
|
FROM chunks
|
|
45
|
-
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:y(e.embedding),source:e.source}))}async function
|
|
45
|
+
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:y(e.embedding),source:e.source}))}async function Se(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:U(t.text,e.snippetMaxChars),source:t.source}})}const W={chunkTokens:400,chunkOverlap:80,maxResults:6,minScore:.2,fallback:{enabled:!0},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`};function Ce(e,n,r){let i=t(e,{storeName:r});return o.relative(i,n).replace(/\\/g,`/`)}async function we(e,n){let r=t(e,{storeName:n});try{let e=await a.readdir(r,{withFileTypes:!0}),t=[];for(let n of e){if(!n.isDirectory())continue;let e=o.join(r,n.name,`transcript.jsonl`);try{(await a.stat(e)).isFile()&&t.push(e)}catch{}}return t}catch(e){if(u(e))return[];throw e}}function Te(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 Ee(e,t,i){let s;try{s=await a.stat(t)}catch(e){if(u(e))return null;throw e}let c;try{let e=await n(t);if(e===null)return null;c=e}catch(e){if(u(e))return null;throw e}let l=[],d=[],f=c.split(`
|
|
46
46
|
`);for(let e=0;e<f.length;e+=1){let t=f[e]?.trim();if(t)try{let n=JSON.parse(t),r=n.role??`unknown`,i=Te(n.content);if(!i)continue;let a=i.split(`
|
|
47
47
|
`);for(let t of a)l.push(`[${r}] ${t}`),d.push(e+1)}catch{}}let p=l.join(`
|
|
48
48
|
`),m=_(p);return{path:o.join(r(i),Ce(e,t,i)).replace(/\\/g,`/`),absPath:t,mtimeMs:s.mtimeMs,size:s.size,hash:m,content:p,lineMap:d}}const G=`chunks_vec`,K=`chunks_fts`,q=`embedding_cache`,J=`memory_index_meta_v1`,Y=3e4;function De(e,t,n){let r=t.split(`
|
|
49
|
-
`);for(let t of r){let n=t.match(/^##\s+(.+)$/);if(n?.[1])return`${e}#${n[1].trim()}`}return`${e}#L${n}`}const X=new Map;function Z(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 Q=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;searchFallbackOnly=!1;lastRebuildSummary;sessionDeltas=new Map;static get(t,n){let i=o.join(t,`.aimax`),a=Z(W,n),s=`${i}::${r(a.store.sessionStoreName)}`,c=X.get(s);if(c)return n&&c.applyConfig(n),c;let l=new e(t,i,a);return X.set(s,l),l}constructor(e,t,n){this.dataDir=e,this.memoryRoot=t,this.storePath=o.join(t,`.index.sqlite`),this.config=Z(W,n),this.sessionStoreName=r(this.config.store.sessionStoreName),this.provider=
|
|
49
|
+
`);for(let t of r){let n=t.match(/^##\s+(.+)$/);if(n?.[1])return`${e}#${n[1].trim()}`}return`${e}#L${n}`}const X=new Map;function Z(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 Q=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;searchFallbackOnly=!1;lastRebuildSummary;sessionDeltas=new Map;static get(t,n){let i=o.join(t,`.aimax`),a=Z(W,n),s=`${i}::${r(a.store.sessionStoreName)}`,c=X.get(s);if(c)return n&&c.applyConfig(n),c;let l=new e(t,i,a);return X.set(s,l),l}constructor(e,t,n){this.dataDir=e,this.memoryRoot=t,this.storePath=o.join(t,`.index.sqlite`),this.config=Z(W,n),this.sessionStoreName=r(this.config.store.sessionStoreName),this.provider=E(),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=Z(this.config,e),this.sessionStoreName=r(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 ${q}`).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,rows:this.getFtsRowCount()},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,fallbackActive:this.searchFallbackOnly,lastRebuildSummary:this.lastRebuildSummary}}}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[];if(this.readMeta()?this.config.sync.onSearch&&(this.dirty||this.sessionsDirty)&&this.sync({reason:`search`}).catch(()=>{this.searchFallbackOnly=!0}):await this.sync({reason:`boot`}).catch(()=>{this.searchFallbackOnly=!0}),this.searchFallbackOnly)return this.decorateCitations(await this.fileScanSearch(t));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).catch(()=>[]),o=a.some(e=>e!==0)?await this.searchVector(a,r).catch(()=>[]):[],s=[];if(!n.enabled||!this.ftsAvailable)s=o.filter(e=>e.score>=this.config.minScore).slice(0,this.config.maxResults);else{let e=await _e({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}),t=e.filter(e=>e.score>=this.config.minScore);if(t.length>0||i.length===0)s=t.slice(0,this.config.maxResults);else{let t=Math.min(this.config.minScore,n.textWeight);s=e.filter(e=>e.score>=t).slice(0,this.config.maxResults)}}return s.length>0?this.decorateCitations(this.decorateEntryIds(s)):this.config.fallback.enabled?(this.searchFallbackOnly=!0,this.decorateCitations(this.decorateEntryIds(await this.fileScanSearch(t)))):[]}async readFile(e){let{absPath:t,relPath:n}=this.resolveMemoryFilePath(e.relPath);if((await d(t)).missing)return{text:``,path:n};let r;try{r=await a.readFile(t,`utf-8`)}catch(e){if(u(e))return{text:``,path:n};throw e}if(!e.from&&!e.lines)return{text:r,path:n};let i=r.split(`
|
|
50
50
|
`),o=Math.max(1,e.from??1),s=Math.max(1,e.lines??i.length);return{text:i.slice(o-1,o-1+s).join(`
|
|
51
51
|
`),path:n}}async replaceFile(e){let{absPath:t}=this.resolveMemoryFilePath(e.relPath);await a.mkdir(o.dirname(t),{recursive:!0}),await a.writeFile(t,e.content,`utf-8`),this.dirty=!0,await this.syncAndPostCheck(`replace`)}async deleteFile(e){let{absPath:t}=this.resolveMemoryFilePath(e);try{await a.unlink(t)}catch(e){if(u(e))return;throw e}this.dirty=!0,await this.syncAndPostCheck(`delete`)}async appendToMemory(e){let t=this.memoryRoot;await a.mkdir(t,{recursive:!0});let n=o.join(t,`MEMORY.md`),r=e.endsWith(`
|
|
52
|
-
`)?e:`${e}\n`;await a.appendFile(n,r,`utf-8`),this.dirty=!0,await this.syncAndPostCheck(`append`)}openDatabase(){return f(o.dirname(this.storePath)),
|
|
52
|
+
`)?e:`${e}\n`;await a.appendFile(n,r,`utf-8`),this.dirty=!0,await this.syncAndPostCheck(`append`)}openDatabase(){return f(o.dirname(this.storePath)),C(this.storePath,{allowExtension:this.vector.enabled})}ensureSchema(){let e=ve({db:this.db,embeddingCacheTable:q,ftsTable:K,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(),Y,`sqlite-vec load timed out after ${Math.round(Y/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 b({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 ${G} 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 ${G}`)}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=[o.join(this.memoryRoot,`MEMORY.md`),o.join(this.memoryRoot,`memory.md`),o.join(this.memoryRoot,`memory`)],t=()=>{this.dirty=!0,this.scheduleWatchSync()};for(let n of e)try{let e=l.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=t(this.dataDir,{storeName:this.sessionStoreName});try{let t=l.watch(e,{recursive:!0},(t,n)=>{if(!n||!n.endsWith(`transcript.jsonl`))return;let r=o.join(e,n);this.scheduleSessionDirty(r)});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 n;try{n=await a.stat(e)}catch{return null}let r=n.size,i=this.sessionDeltas.get(e);i||(i={lastSize:0,pendingBytes:0,pendingMessages:0},this.sessionDeltas.set(e,i));let o=Math.max(0,r-i.lastSize);return o===0&&r===i.lastSize?{deltaBytes:t.deltaBytes,deltaMessages:t.deltaMessages,pendingBytes:i.pendingBytes,pendingMessages:i.pendingMessages}:(r<i.lastSize?(i.lastSize=r,i.pendingBytes+=r,t.deltaMessages>0&&(t.deltaBytes<=0||i.pendingBytes<t.deltaBytes)&&(i.pendingMessages+=await this.countNewlines(e,0,r))):(i.pendingBytes+=o,t.deltaMessages>0&&(t.deltaBytes<=0||i.pendingBytes<t.deltaBytes)&&(i.pendingMessages+=await this.countNewlines(e,i.lastSize,r)),i.lastSize=r),this.sessionDeltas.set(e,i),{deltaBytes:t.deltaBytes,deltaMessages:t.deltaMessages,pendingBytes:i.pendingBytes,pendingMessages:i.pendingMessages})}async countNewlines(e,t,n){if(n<=t)return 0;let r;try{r=await a.open(e,`r`)}catch{return 0}try{let e=t,i=0,a=Buffer.alloc(64*1024);for(;e<n;){let t=Math.min(a.length,n-e),{bytesRead:o}=await r.read(a,0,t,e);if(o<=0)break;for(let e=0;e<o;e+=1)a[e]===10&&(i+=1);e+=o}return i}finally{await r.close()}}computeProviderKey(){return _(JSON.stringify({provider:this.provider.id,model:this.provider.model}))}resolveMemoryFilePath(e){let t=e.trim();if(!t)throw Error(`path required`);let n=o.isAbsolute(t)?o.resolve(t):o.resolve(this.memoryRoot,t),r=o.relative(this.memoryRoot,n).replace(/\\/g,`/`);if(!(r.length>0&&!r.startsWith(`..`)&&!o.isAbsolute(r)&&m(r))||!n.endsWith(`.md`))throw Error(`path required`);return{absPath:n,relPath:r}}applyEmbeddingProvider(){let e=this.config.embedding?.providerId?.trim();if(e){let t=O({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=E(),this.embeddingProviderId=void 0,this.providerKey=this.computeProviderKey(),this.dirty=!0)}readMeta(){let e=this.db.prepare(`SELECT value FROM meta WHERE key = ?`).get(J);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(J,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 ${q}\n WHERE provider = ? AND model = ? AND provider_key = ? AND hash IN (${a})`).all(...r,...i);for(let e of o)n.set(e.hash,y(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 ${q} (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 n=v(t.content??await a.readFile(e.absPath,`utf-8`),{tokens:this.config.chunkTokens,overlap:this.config.chunkOverlap}).filter(e=>e.text.trim().length>0);t.source===`sessions`&&te(n,t.lineMap);let r=await this.embedChunks(n),i=r.find(e=>e.length>0),o=i?await this.ensureVectorReady(i.length):!1,s=Date.now();if(o)try{this.db.prepare(`DELETE FROM ${G} 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 ${K} 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 i=0;i<n.length;i+=1){let a=n[i],c=r[i]??[],l=_(`${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)
|
|
53
53
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
54
54
|
ON CONFLICT(id) DO UPDATE SET
|
|
55
55
|
hash=excluded.hash,
|
|
@@ -61,6 +61,6 @@ import{t as e}from"./rolldown-runtime-CNxR59P3.js";import{O as t,P as n,S as r}f
|
|
|
61
61
|
source=excluded.source,
|
|
62
62
|
hash=excluded.hash,
|
|
63
63
|
mtime=excluded.mtime,
|
|
64
|
-
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
|
|
64
|
+
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 be({db:this.db,vectorTable:G,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 Se({db:this.db,ftsTable:K,providerModel:this.provider.model,query:e,limit:t,snippetMaxChars:700,sourceFilter:this.buildSourceFilter(),buildFtsQuery:e=>he(e),bm25RankToScore:ge}):[]}resetIndex(){if(this.db.exec(`DELETE FROM files`),this.db.exec(`DELETE FROM chunks`),this.ftsAvailable)try{this.db.exec(`DELETE FROM ${K}`)}catch{}this.dropVectorTable(),this.vector.dims=void 0,this.sessionsDirtyFiles.clear()}async syncAndPostCheck(e){try{await this.sync({reason:`mutation-postcheck`})}catch{this.searchFallbackOnly=!0;return}this.searchFallbackOnly=!this.indexHasSearchableData()}indexHasSearchableData(){try{if((this.db.prepare(`SELECT COUNT(*) as c FROM chunks`).get()?.c??0)>0)return!0}catch{}try{if(l.readdirSync(this.memoryRoot).filter(e=>e.endsWith(`.md`)).length>0)return!1;let e=o.join(this.memoryRoot,`memory`);return l.existsSync(e)?l.readdirSync(e).filter(e=>e.endsWith(`.md`)).length===0:!0}catch{return!1}}async fileScanSearch(e){let t=e.trim().toLowerCase();if(!t)return[];let n=await g(this.memoryRoot),r=[];for(let e of n){let n=``;try{n=await a.readFile(e,`utf-8`)}catch{continue}let i=o.relative(this.memoryRoot,e).replace(/\\/g,`/`);i.startsWith(`memory/`);let c=n.split(`
|
|
65
65
|
`);for(let n=0;n<c.length;n+=1){let a=c[n]??``,o=a.toLowerCase();if(!o.includes(t))continue;let l=o===t?1:Math.max(.2,t.length/Math.max(a.length,t.length));r.push({path:i||s(e),startLine:n+1,endLine:n+1,score:Number(l.toFixed(4)),snippet:a.slice(0,700),source:`memory`})}}return r.sort((e,t)=>t.score-e.score||e.path.localeCompare(t.path)||e.startLine-t.startLine),r.slice(0,this.config.maxResults)}getFtsRowCount(){if(this.ftsAvailable)try{return this.db.prepare(`SELECT COUNT(*) as c FROM ${K}`).get()?.c??0}catch{return}}buildRebuildSummary(e){let t=this.db.prepare(`SELECT COUNT(*) as c FROM chunks`).get();return{reason:e.reason,memoryFilesIndexed:e.memoryFilesIndexed,sessionFilesIndexed:e.sessionFilesIndexed,staleMemoryFilesRemoved:e.staleMemoryFilesRemoved,staleSessionFilesRemoved:e.staleSessionFilesRemoved,chunks:t?.c??0,ftsRows:this.getFtsRowCount(),fallbackActive:this.searchFallbackOnly,needsFullReindex:e.needsFullReindex}}async rebuild(e=`manual-rebuild`){return this.resetIndex(),this.dirty=!0,this.sessionsDirty=!0,await this.sync({reason:e,forceFullReindex:!0}),this.lastRebuildSummary??this.buildRebuildSummary({reason:e,memoryFilesIndexed:0,sessionFilesIndexed:0,staleMemoryFilesRemoved:0,staleSessionFilesRemoved:0,needsFullReindex:!0})}async sync(e){let t=this.readMeta(),n=e?.forceFullReindex||!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 g(this.memoryRoot),i=(await Promise.all(r.map(async e=>ee(e,this.memoryRoot)))).filter(e=>e!==null),a=new Set(i.map(e=>e.path)),o=0,s=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`}),o+=1)});for(let e of s)await e();let c=0,l=this.db.prepare(`SELECT path FROM files WHERE source = ?`).all(`memory`);for(let e of l)if(!a.has(e.path)){this.db.prepare(`DELETE FROM files WHERE path = ? AND source = ?`).run(e.path,`memory`),c+=1;try{this.db.prepare(`DELETE FROM ${G} 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 ${K} WHERE path = ? AND source = ? AND model = ?`).run(e.path,`memory`,this.provider.model)}catch{}}let u={indexed:0,staleRemoved:0};this.config.experimental.sessionMemory&&(n||this.sessionsDirty)&&(u=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,this.searchFallbackOnly=!this.indexHasSearchableData(),this.lastRebuildSummary=this.buildRebuildSummary({reason:e?.reason??`sync`,memoryFilesIndexed:o,sessionFilesIndexed:u.indexed,staleMemoryFilesRemoved:c,staleSessionFilesRemoved:u.staleRemoved,needsFullReindex:!!n})}async syncSessionFiles(e){let t=await we(this.dataDir,this.sessionStoreName),n=(await Promise.all(t.map(async e=>Ee(this.dataDir,e,this.sessionStoreName)))).filter(e=>e!==null),r=new Set(n.map(e=>e.path)),i=e||this.sessionsDirtyFiles.size===0,a=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}),a+=1,this.resetSessionDelta(t.absPath,t.size)}let o=0,s=this.db.prepare(`SELECT path FROM files WHERE source = ?`).all(`sessions`);for(let e of s)if(!r.has(e.path)){this.db.prepare(`DELETE FROM files WHERE path = ? AND source = ?`).run(e.path,`sessions`),o+=1;try{this.db.prepare(`DELETE FROM ${G} 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 ${K} WHERE path = ? AND source = ? AND model = ?`).run(e.path,`sessions`,this.provider.model)}catch{}}return this.sessionsDirty=!1,this.sessionsDirtyFiles.clear(),{indexed:a,staleRemoved:o}}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}})}decorateEntryIds(e){return e.map(e=>{if(e.id)return e;let t=De(e.path,e.snippet,e.startLine);return{...e,id:t}})}},Oe=e({createBuiltinMemoryProvider:()=>$});function $(e,t){let n=Q.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),r=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()=>g(r),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=>{if(e===`cli-rebuild`){await n.rebuild(e);return}await n.sync({reason:e??`provider-sync`})},noteSessionUpdate:e=>{let t=o.isAbsolute(e)?e:o.resolve(e);n.noteSessionUpdate(t)}}}export{
|
|
66
|
+
`):[]},listFiles:async()=>g(r),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=>{if(e===`cli-rebuild`){await n.rebuild(e);return}await n.sync({reason:e??`provider-sync`})},noteSessionUpdate:e=>{let t=o.isAbsolute(e)?e:o.resolve(e);n.noteSessionUpdate(t)}}}export{ue as a,b as c,le as i,_ as l,$ as n,O as o,Q as r,C as s,Oe as t,g as u};
|
package/dist/config/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export { AgentBinding, AgentConfig, AgentModelConfig, AgentsConfig, addAgent, addBinding, aimaxDir, getAgentConfig, listAgents, listBindings, loadAgentsConfig, normalizeAgentId, removeAgent, removeBindings, resolveAgentDir, resolveAgentIdByBinding, resolveAgentsConfigPath, resolveDefaultAgentId, resolveModelFallbacks, resolveModelString, saveAgentsConfig, updateAgentIdentity };
|
|
1
|
+
import { C as AgentsConfig, S as AgentModelConfig, _ as saveAgentsConfig, a as listAgents, b as AgentBinding, c as normalizeAgentId, d as resolveAgentDir, f as resolveAgentIdByBinding, g as resolveModelString, h as resolveModelFallbacks, i as getAgentConfig, l as removeAgent, m as resolveDefaultAgentId, n as addBinding, o as listBindings, p as resolveAgentsConfigPath, r as aimaxDir, s as loadAgentsConfig, t as addAgent, u as removeBindings, v as updateAgent, x as AgentConfig, y as updateAgentIdentity } from "../index-iedOAibO.js";
|
|
2
|
+
export { AgentBinding, AgentConfig, AgentModelConfig, AgentsConfig, addAgent, addBinding, aimaxDir, getAgentConfig, listAgents, listBindings, loadAgentsConfig, normalizeAgentId, removeAgent, removeBindings, resolveAgentDir, resolveAgentIdByBinding, resolveAgentsConfigPath, resolveDefaultAgentId, resolveModelFallbacks, resolveModelString, saveAgentsConfig, updateAgent, updateAgentIdentity };
|
package/dist/config/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as e,a as t,c as n,d as r,f as i,g as a,h as o,i as s,l as c,m as l,n as u,o as d,p as f,r as p,s as m,t as h,u as g,v as _}from"../config-
|
|
1
|
+
import{_ as e,a as t,c as n,d as r,f as i,g as a,h as o,i as s,l as c,m as l,n as u,o as d,p as f,r as p,s as m,t as h,u as g,v as _,y as v}from"../config-DYv0xUdi.js";export{h as addAgent,u as addBinding,p as aimaxDir,s as getAgentConfig,t as listAgents,d as listBindings,m as loadAgentsConfig,n as normalizeAgentId,c as removeAgent,g as removeBindings,r as resolveAgentDir,i as resolveAgentIdByBinding,f as resolveAgentsConfigPath,l as resolveDefaultAgentId,o as resolveModelFallbacks,a as resolveModelString,e as saveAgentsConfig,_ as updateAgent,v as updateAgentIdentity};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import e from"node:fs/promises";import t from"node:path";function n(e){return t.join(e,`.aimax`)}function r(e){return t.join(n(e),`agents.json`)}function i(e,r){return t.join(n(e),`agents`,r)}async function a(t){let n=r(t);try{let t=await e.readFile(n,`utf-8`),r=JSON.parse(t);if(!r||typeof r!=`object`)throw Error(`Invalid agents config: not an object`);return Array.isArray(r.agents)||(r.agents=[]),Array.isArray(r.bindings)||(r.bindings=[]),r}catch(e){if(e.code===`ENOENT`)return{agents:[{id:`main`,default:!0}]};throw e}}async function o(n,i){let a=r(n);await e.mkdir(t.dirname(a),{recursive:!0}),await e.writeFile(a,JSON.stringify(i,null,2),`utf-8`)}function s(e){return Array.isArray(e.agents)?e.agents.filter(e=>e&&typeof e==`object`&&typeof e.id==`string`):[]}function c(e){return s(e).find(e=>e.default===!0)?.id??`main`}function l(e){return e?e.trim().toLowerCase():`main`}function u(e,t){let n=l(t);return s(e).find(e=>l(e.id)===n)}function d(e){return Array.isArray(e.bindings)?e.bindings.filter(e=>e&&typeof e==`object`&&typeof e.agentId==`string`):[]}function f(e,t,n,r){for(let i of d(e)){let e=i.match;if(e&&e.channel===t&&!(e.accountId&&e.accountId!==n)&&!(e.userId&&e.userId!==r))return i.agentId}return c(e)}function p(e){if(e)return typeof e==`string`?e:e.primary}function m(e){if(!(!e||typeof e==`string`))return e.fallbacks}async function h(t,n){let r=await a(t);if(u(r,l(n.id)))return!1;r.agents=r.agents??[],r.agents.push(n),await o(t,r);let s=i(t,n.id);return await e.mkdir(s,{recursive:!0}),!0}async function g(e,t){let n=await a(e),r=l(t),i=n.agents?.findIndex(e=>e&&l(e.id)===r);return i===void 0||i<0||n.agents?.[i]?.default===!0?!1:(n.agents?.splice(i,1),n.bindings=n.bindings?.filter(e=>l(e.agentId)!==r),await o(e,n),!0)}async function _(e,t){let n=await a(e);n.bindings=n.bindings??[],n.bindings.push(t),await o(e,n)}async function v(e,t,n,r){let i=await a(e),s=l(t),c=i.bindings?.length??0;n===`*`?i.bindings=i.bindings?.filter(e=>l(e.agentId)!==s):i.bindings=i.bindings?.filter(e=>!!(l(e.agentId)!==s||n&&e.match?.channel!==n||r&&e.match?.accountId!==r));let u=c-(i.bindings?.length??0);return u>0&&await o(e,i),u}async function y(e,t,n){let r=await a(e),i=u(r,t);if(!i)return!1;let s={...i.identity??{}};return n.name!==void 0&&(s.name=n.name),n.theme!==void 0&&(s.theme=n.theme),n.emoji!==void 0&&(s.emoji=n.emoji),n.avatar!==void 0&&(s.avatar=n.avatar),i.identity=s,await o(e,r),!0}export{o as _,s as a,l as c,i as d,f,p as g,m as h,u as i,g as l,c as m,_ as n,d as o,r as p,n as r,a as s,h as t,v as u,y as v};
|
|
1
|
+
import e from"node:fs/promises";import t from"node:path";function n(e){return t.join(e,`.aimax`)}function r(e){return t.join(n(e),`agents.json`)}function i(e,r){return t.join(n(e),`agents`,r)}async function a(t){let n=r(t);try{let t=await e.readFile(n,`utf-8`),r=JSON.parse(t);if(!r||typeof r!=`object`)throw Error(`Invalid agents config: not an object`);return Array.isArray(r.agents)||(r.agents=[]),Array.isArray(r.bindings)||(r.bindings=[]),r}catch(e){if(e.code===`ENOENT`)return{agents:[{id:`main`,default:!0}]};throw e}}async function o(n,i){let a=r(n);await e.mkdir(t.dirname(a),{recursive:!0}),await e.writeFile(a,JSON.stringify(i,null,2),`utf-8`)}function s(e){return Array.isArray(e.agents)?e.agents.filter(e=>e&&typeof e==`object`&&typeof e.id==`string`):[]}function c(e){return s(e).find(e=>e.default===!0)?.id??`main`}function l(e){return e?e.trim().toLowerCase():`main`}function u(e,t){let n=l(t);return s(e).find(e=>l(e.id)===n)}function d(e){return Array.isArray(e.bindings)?e.bindings.filter(e=>e&&typeof e==`object`&&typeof e.agentId==`string`):[]}function f(e,t,n,r){for(let i of d(e)){let e=i.match;if(e&&e.channel===t&&!(e.accountId&&e.accountId!==n)&&!(e.userId&&e.userId!==r))return i.agentId}return c(e)}function p(e){if(e)return typeof e==`string`?e:e.primary}function m(e){if(!(!e||typeof e==`string`))return e.fallbacks}async function h(t,n){let r=await a(t);if(u(r,l(n.id)))return!1;r.agents=r.agents??[],r.agents.push(n),await o(t,r);let s=i(t,n.id);return await e.mkdir(s,{recursive:!0}),!0}async function g(e,t){let n=await a(e),r=l(t),i=n.agents?.findIndex(e=>e&&l(e.id)===r);return i===void 0||i<0||n.agents?.[i]?.default===!0?!1:(n.agents?.splice(i,1),n.bindings=n.bindings?.filter(e=>l(e.agentId)!==r),await o(e,n),!0)}async function _(e,t){let n=await a(e);n.bindings=n.bindings??[],n.bindings.push(t),await o(e,n)}async function v(e,t,n,r){let i=await a(e),s=l(t),c=i.bindings?.length??0;n===`*`?i.bindings=i.bindings?.filter(e=>l(e.agentId)!==s):i.bindings=i.bindings?.filter(e=>!!(l(e.agentId)!==s||n&&e.match?.channel!==n||r&&e.match?.accountId!==r));let u=c-(i.bindings?.length??0);return u>0&&await o(e,i),u}async function y(e,t,n){let r=await a(e),i=u(r,l(t));return i?(n.default!==void 0&&(i.default=n.default),n.name!==void 0&&(i.name=n.name),n.model!==void 0&&(i.model=n.model),n.skills!==void 0&&(i.skills=n.skills),n.identity!==void 0&&(i.identity=n.identity),n.subagents!==void 0&&(i.subagents=n.subagents),await o(e,r),!0):!1}async function b(e,t,n){let r=await a(e),i=u(r,t);if(!i)return!1;let s={...i.identity??{}};return n.name!==void 0&&(s.name=n.name),n.theme!==void 0&&(s.theme=n.theme),n.emoji!==void 0&&(s.emoji=n.emoji),n.avatar!==void 0&&(s.avatar=n.avatar),i.identity=s,await o(e,r),!0}export{o as _,s as a,l as c,i as d,f,p as g,m as h,u as i,g as l,c as m,_ as n,d as o,r as p,n as r,a as s,h as t,v as u,y as v,b as y};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./rolldown-runtime-CNxR59P3.js";import{T as t}from"./session-
|
|
1
|
+
import{t as e}from"./rolldown-runtime-CNxR59P3.js";import{T as t}from"./session-MBebUrjk.js";import n from"node:fs/promises";import r from"node:path";var i=e({appendGoalEvent:()=>o,goalEventsPath:()=>a});function a(e,n,i){return r.join(t(e,n,i),`goal-events.jsonl`)}async function o(e,t,i,o){let s={...i,sessionId:t,timestamp:new Date().toISOString()},c=a(e,t,o);await n.mkdir(r.dirname(c),{recursive:!0}),await n.appendFile(c,`${JSON.stringify(s)}\n`,`utf-8`)}export{a as n,i as r,o as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./rolldown-runtime-CNxR59P3.js";import{T as t,j as n}from"./session-
|
|
1
|
+
import{t as e}from"./rolldown-runtime-CNxR59P3.js";import{T as t,j as n}from"./session-MBebUrjk.js";import{t as r}from"./goal-events-Og8bMhZU.js";import{MAX_GOAL_OBJECTIVE_CHARS as i}from"@gencode/shared";import a from"node:fs/promises";import o from"node:path";import{randomUUID as s}from"node:crypto";var c=e({GoalObjectiveResolutionError:()=>l,deleteGoal:()=>g,goalObjectiveMdPath:()=>d,goalPath:()=>u,mirrorGoalStatusToSession:()=>_,readGoal:()=>f,resolveGoalObjective:()=>p,updateGoal:()=>h,writeGoal:()=>m}),l=class extends Error{constructor(e,t){super(e,t),this.name=`GoalObjectiveResolutionError`}};function u(e,n,r){return o.join(t(e,n,r),`goal.json`)}function d(e,n,r){return o.join(t(e,n,r),`goal-objective.md`)}async function f(e,t,n){let r=u(e,t,n);try{let e=await a.readFile(r,`utf-8`);return JSON.parse(e)}catch(e){if(e.code===`ENOENT`)return null;throw e}}async function p(e,n,r,i){if(r.objectiveRef){let s=o.join(t(e,n,i),r.objectiveRef);try{return await a.readFile(s,`utf-8`)}catch(e){throw new l(`Goal objective reference "${r.objectiveRef}" could not be read for session "${n}"`,{cause:e})}}return r.objective}async function m(e,n,o,c){let l=await f(e,n,c),m=o.objective.trim(),h=new Date().toISOString(),g={...o,objective:m,goalId:o.goalId??s(),createdAt:o.createdAt??h,updatedAt:o.updatedAt??h};l&&((await p(e,n,l,c)).trim()===m?l.pendingObjectiveUpdatedNotice&&(g.pendingObjectiveUpdatedNotice=!0):g.pendingObjectiveUpdatedNotice=!0);let v=t(e,n,c);await a.mkdir(v,{recursive:!0});let y;if(g.objective.length>i)y=g.objective,g.objective=g.objective.slice(0,200)+`...`,g.objectiveRef=`goal-objective.md`;else{delete g.objectiveRef;try{await a.unlink(d(e,n,c))}catch(e){if(e.code!==`ENOENT`)throw e}}if(y!==void 0){let t=d(e,n,c),r=t+`.tmp`;await a.writeFile(r,y,`utf-8`),await a.rename(r,t)}let b=u(e,n,c),x=b+`.tmp`;return await a.writeFile(x,JSON.stringify(g,null,2),`utf-8`),await a.rename(x,b),await _(e,n,g.status,c),await r(e,n,{goalId:g.goalId,action:l?`replaced`:`created`,status:g.status,source:c?.eventSource??`store`,detail:l?{previousGoalId:l.goalId}:void 0},c),g}async function h(e,t,n,i){let o=await f(e,t,i);if(!o)return null;if(`objective`in n||`objectiveRef`in n||`goalId`in n||`createdAt`in n)throw Error(`updateGoal only supports status, tokenBudget, tokensUsed, and timeUsedSeconds; use writeGoal() to change the objective`);let s={...o,...n,updatedAt:new Date().toISOString()},c=u(e,t,i),l=c+`.tmp`;await a.writeFile(l,JSON.stringify(s,null,2),`utf-8`),await a.rename(l,c),n.status!==void 0&&await _(e,t,s.status,i);let d=n.status===`paused`?`paused`:n.status===`active`&&o.status!==`active`?`resumed`:n.status===`budget_limited`?`budget_limited`:n.status===`complete`?`completed`:`updated`;return await r(e,t,{goalId:s.goalId,action:d,status:s.status,source:i?.eventSource??`store`,detail:{fields:Object.keys(n)}},i),s}async function g(e,t,n){let i=await f(e,t,n),o=u(e,t,n),s=!1;try{await a.unlink(o),s=!0}catch(e){if(e.code!==`ENOENT`)throw e}let c=d(e,t,n);try{await a.unlink(c)}catch{}return s&&(await _(e,t,null,n),await r(e,t,{goalId:i?.goalId??null,action:`deleted`,status:null,source:n?.eventSource??`store`},n)),s}async function _(e,t,r,i){await n(e,t,{goalStatus:r},i)}export{_ as a,h as c,c as i,m as l,d as n,f as o,u as r,p as s,g as t};
|
|
@@ -140,9 +140,14 @@ declare function addBinding(dataDir: string, binding: AgentBinding): Promise<voi
|
|
|
140
140
|
* If channel is "*", removes all bindings for the agent.
|
|
141
141
|
*/
|
|
142
142
|
declare function removeBindings(dataDir: string, agentId: string, channel?: string, accountId?: string): Promise<number>;
|
|
143
|
+
/**
|
|
144
|
+
* Updates an existing agent's configuration fields.
|
|
145
|
+
* Returns false if the agent doesn't exist.
|
|
146
|
+
*/
|
|
147
|
+
declare function updateAgent(dataDir: string, agentId: string, updates: Partial<Omit<AgentConfig, "id">>): Promise<boolean>;
|
|
143
148
|
/**
|
|
144
149
|
* Updates an agent's identity configuration.
|
|
145
150
|
*/
|
|
146
151
|
declare function updateAgentIdentity(dataDir: string, agentId: string, identity: Partial<NonNullable<AgentConfig["identity"]>>): Promise<boolean>;
|
|
147
152
|
//#endregion
|
|
148
|
-
export { AgentsConfig as S, saveAgentsConfig as _, listAgents as a,
|
|
153
|
+
export { AgentsConfig as C, AgentModelConfig as S, saveAgentsConfig as _, listAgents as a, AgentBinding as b, normalizeAgentId as c, resolveAgentDir as d, resolveAgentIdByBinding as f, resolveModelString as g, resolveModelFallbacks as h, getAgentConfig as i, removeAgent as l, resolveDefaultAgentId as m, addBinding as n, listBindings as o, resolveAgentsConfigPath as p, aimaxDir as r, loadAgentsConfig as s, addAgent as t, removeBindings as u, updateAgent as v, AgentConfig as x, updateAgentIdentity as y };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { C as AgentsConfig, S as AgentModelConfig, _ as saveAgentsConfig, a as listAgents, b as AgentBinding, c as normalizeAgentId, d as resolveAgentDir, f as resolveAgentIdByBinding, g as resolveModelString, h as resolveModelFallbacks, i as getAgentConfig, l as removeAgent, m as resolveDefaultAgentId, n as addBinding, o as listBindings, p as resolveAgentsConfigPath, s as loadAgentsConfig, t as addAgent, u as removeBindings, v as updateAgent, x as AgentConfig, y as updateAgentIdentity } from "./index-iedOAibO.js";
|
|
2
2
|
import * as _gencode_shared0 from "@gencode/shared";
|
|
3
3
|
import { AgentCustomProgressEvent, AgentDiagnosticEvent, AgentProgressEvent, AgentProgressEvent as AgentProgressEvent$1, AgentProgressEvent as AgentProgressEvent$2, AgentProgressEventBase, CallbackEventPayload, CallbackEventPayload as CallbackEventPayload$1, Channel, Channel as Channel$1, CollapseSpan, GoalStatus, HitlCheckpoint, HitlCheckpoint as HitlCheckpoint$1, HitlHistoryEntry, HitlRequest, HitlRequest as HitlRequest$1, HitlResolution, HitlResolution as HitlResolution$1, HitlStatus, HitlToolContext, HitlToolContext as HitlToolContext$1, ModelUsageCheckpoint, PausedRunState, PausedRunState as PausedRunState$1, ReadStateRecord, RunResultPayload, RunResultPayload as RunResultPayload$1, SessionContextSnapshot, SessionMemorySnapshot, SessionMetadata, SessionMetadata as SessionMetadata$1, SessionSummary, SessionSummary as SessionSummary$1, SnipRecord, ThreadGoal, ToolResultReference, UiToolExtra, UiToolOutputSchema, UiToolPausedState, UiToolRequest, UiToolResult, UiToolValidationResult } from "@gencode/shared";
|
|
4
4
|
import { Agent, AgentMessage, AgentTool } from "@mariozechner/pi-agent-core";
|
|
@@ -505,6 +505,9 @@ declare function loadSessionContextSnapshot(dataDir: string, sessionId: string,
|
|
|
505
505
|
declare function inspectSession(dataDir: string, sessionId: string, options?: SessionPathOptions): Promise<SessionInspection>;
|
|
506
506
|
declare function exportSession(dataDir: string, sessionId: string, options?: SessionPathOptions): Promise<SessionExport>;
|
|
507
507
|
//#endregion
|
|
508
|
+
//#region src/llm/api-format.d.ts
|
|
509
|
+
type LlmApiFormat = "openai-completions" | "anthropic-messages";
|
|
510
|
+
//#endregion
|
|
508
511
|
//#region src/history/topic-segmentation.d.ts
|
|
509
512
|
type TopicSegmentationConfig = {
|
|
510
513
|
enabled?: boolean;
|
|
@@ -513,6 +516,8 @@ type TopicSegmentationConfig = {
|
|
|
513
516
|
recentProtectedTurnCount?: number;
|
|
514
517
|
maxCandidates?: number;
|
|
515
518
|
maxSelectedTurns?: number;
|
|
519
|
+
maxShortlistCandidates?: number;
|
|
520
|
+
maxShortlistSegments?: number;
|
|
516
521
|
maxCandidateUserChars?: number;
|
|
517
522
|
maxCandidateAssistantChars?: number;
|
|
518
523
|
timeoutMs?: number;
|
|
@@ -667,7 +672,8 @@ type AgentRunParamsBase = {
|
|
|
667
672
|
messageId?: string; /** Channel type for this session */
|
|
668
673
|
channel: Channel$1; /** LLM provider configuration */
|
|
669
674
|
llm: {
|
|
670
|
-
/**
|
|
675
|
+
/** LLM API format; defaults to OpenAI-compatible chat completions. */apiFormat?: LlmApiFormat; /** LLM API base URL */
|
|
676
|
+
baseUrl: string;
|
|
671
677
|
apiKey: string;
|
|
672
678
|
model: string; /** Context window size; defaults to 200000 */
|
|
673
679
|
contextWindow?: number; /** Maximum number of tokens for LLM output; defaults to 32768 */
|
|
@@ -1054,12 +1060,7 @@ declare class PluginHookRegistry {
|
|
|
1054
1060
|
type GenerateTitleParams = {
|
|
1055
1061
|
message: string;
|
|
1056
1062
|
text?: string;
|
|
1057
|
-
llm:
|
|
1058
|
-
baseUrl: string;
|
|
1059
|
-
apiKey: string;
|
|
1060
|
-
model: string;
|
|
1061
|
-
flashModel?: string;
|
|
1062
|
-
};
|
|
1063
|
+
llm: Pick<AgentRunParams["llm"], "apiFormat" | "baseUrl" | "apiKey" | "model" | "flashModel">;
|
|
1063
1064
|
signal?: AbortSignal;
|
|
1064
1065
|
hooks?: PluginHookRegistry;
|
|
1065
1066
|
hookCtx?: PluginHookAgentContext;
|
|
@@ -1131,12 +1132,7 @@ type ManageLayeredHistoryParams = {
|
|
|
1131
1132
|
api: string;
|
|
1132
1133
|
};
|
|
1133
1134
|
contextWindowTokens: number;
|
|
1134
|
-
llm:
|
|
1135
|
-
baseUrl: string;
|
|
1136
|
-
apiKey: string;
|
|
1137
|
-
model: string;
|
|
1138
|
-
flashModel?: string;
|
|
1139
|
-
};
|
|
1135
|
+
llm: Pick<AgentRunParams["llm"], "apiFormat" | "baseUrl" | "apiKey" | "model" | "flashModel">;
|
|
1140
1136
|
historyLimit?: number;
|
|
1141
1137
|
compactionEnabled?: boolean;
|
|
1142
1138
|
pendingUserMessage?: string;
|
|
@@ -1496,6 +1492,14 @@ type SlashCommandList = {
|
|
|
1496
1492
|
//#region src/commands/registry.d.ts
|
|
1497
1493
|
declare function listAvailableSlashCommands(skills: Skill[]): SlashCommandList;
|
|
1498
1494
|
//#endregion
|
|
1495
|
+
//#region src/commands/goal.d.ts
|
|
1496
|
+
/** Structured multiline template shown in `/goal help`. */
|
|
1497
|
+
declare const GOAL_MULTILINE_TEMPLATE_EXAMPLE: string;
|
|
1498
|
+
/** Reply text for `/goal help` in chat sessions. */
|
|
1499
|
+
declare function buildGoalSlashHelpText(): string;
|
|
1500
|
+
/** Extra help appended to `aimax goal --help`. */
|
|
1501
|
+
declare function buildAimaxGoalCliHelpExtra(): string;
|
|
1502
|
+
//#endregion
|
|
1499
1503
|
//#region src/system-prompt/builder.d.ts
|
|
1500
1504
|
type PromptMode = "full" | "minimal" | "none";
|
|
1501
1505
|
type MemoryCitationsMode = "off" | "on";
|
|
@@ -1744,11 +1748,7 @@ type MemoryToolOptions = {
|
|
|
1744
1748
|
pluginId?: string;
|
|
1745
1749
|
sessionId?: string;
|
|
1746
1750
|
sessionStoreName?: string;
|
|
1747
|
-
llm?:
|
|
1748
|
-
baseUrl: string;
|
|
1749
|
-
apiKey: string;
|
|
1750
|
-
model: string;
|
|
1751
|
-
};
|
|
1751
|
+
llm?: Pick<AgentRunParams["llm"], "apiFormat" | "baseUrl" | "apiKey" | "model">;
|
|
1752
1752
|
onMemoryChanged?: MemoryChangedHandler;
|
|
1753
1753
|
};
|
|
1754
1754
|
declare const memorySearchSchema: TObject<{
|
|
@@ -2492,6 +2492,7 @@ type LlmChatResult = {
|
|
|
2492
2492
|
//#region src/plugins/runtime-context.d.ts
|
|
2493
2493
|
type PluginRuntimeContext = {
|
|
2494
2494
|
llm?: {
|
|
2495
|
+
apiFormat?: LlmApiFormat;
|
|
2495
2496
|
baseUrl: string;
|
|
2496
2497
|
apiKey: string;
|
|
2497
2498
|
model: string;
|
|
@@ -3077,4 +3078,4 @@ declare function formatClarifyResolution(resolution: HitlResolution): string;
|
|
|
3077
3078
|
declare function formatReviewResolution(resolution: HitlResolution): string;
|
|
3078
3079
|
declare function buildResumeNarration(resolution: HitlResolution, kind: string): string;
|
|
3079
3080
|
//#endregion
|
|
3080
|
-
export { type AccountingFlushResult, AgentBinding, AgentConfig, type AgentConfigSource, type AgentCustomProgressEvent, type AgentDefinition, type AgentDefinitionsContext, type AgentDefinitionsStats, type AgentDirectoryCandidate, AgentModelConfig, type AgentProgressEvent, type AgentRunParams, type AgentRunResult, type AgentRuntimePolicy, type AgentRuntimePolicyInput, type AgentScanOptions, type AgentVisibility, AgentsConfig, type ApplyCliGoalInput, type ApplyCliGoalResult, type ArtifactOpInput, type ArtifactOperation, type ArtifactOperationInput, type ArtifactOperationName, type ArtifactOperationType, type AutoSkillCategory, type AutoSkillIndexEntry, type AutoSkillListItem, type AutoSkillListOptions, type AutoSkillSearchOptions, type AutoSkillSearchResult, type AutoSkillStatus, type AutoSkillViewOptions, type AutoSkillViewResult, AutoSkillsLoader, type AutoSkillsLoaderOptions, 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, ContinuationState, type CronExecutionRecord, DEFAULT_SESSION_STORE_NAME, ENV_GOAL_CONTINUATION, type EmbeddingProvider, type EmbeddingProviderContext, type EmbeddingProviderFactory, type EmbeddingProviderRegistration, GoalAccounting, GoalConflictError, type GoalContinuationTurnResult, type GoalEventAction, type GoalEventRecord, type GoalEventSource, type GoalPatch, HITL_MESSAGES, type HitlPauseContext, HitlPauseSignal, type HitlToolContext, MAX_ARTIFACT_CONTENT_CHARS, 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 MemoryRebuildSummary, type MemorySearchOptions, type MemorySearchResult, type NormalizedPluginsConfig, type ObjectiveUpdatedSteeringPrep, 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 PluginHookBeforeCompactionResult, type PluginHookBeforeModelResolveEvent, type PluginHookBeforeModelResolveResult, type PluginHookBeforePromptBuildEvent, type PluginHookBeforePromptBuildResult, type PluginHookBeforeToolCallEvent, type PluginHookBeforeToolCallResult, type PluginHookDreamGateEvent, type PluginHookDreamGateResult, 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 PluginUiToolDescriptor, type PluginUiToolOptions, type PluginsConfig, type PluginsConfigValidationResult, type RegisteredPluginTool, type ResumeOptions, type ResumeValidationResult, type RunResultPayload, SYSTEM_AGENTS_DIR, type SessionContextStore, type SessionExport, type SessionInspection, type SessionMetadata, type SessionMetadataUpdate, type SessionSummary, type Skill, type SkillDirectory, type SkillViewResult, type SlashCommandList, type SubagentContext, SubagentRegistry, type SubagentRunRecord, type SubagentStatus, type SubagentToolsContext, type SystemPromptParams, type ToolLoopDetectionConfig, type TranscriptEntry, type TurnAccounting, type UiToolInputSchema, type UiToolOptions, UiToolPauseSignal, type WallClockAccounting, addAgent, addBinding, agentDirCandidates, agentVisibility, aimaxDir, appendArtifactOperation, appendCronExecutionRecord, appendGoalEvent, appendRecentToMemory, appendSessionFile, appendToMemory, appendTranscriptEntry, applyCliGoalBeforeRun, approvalSummaryFromResolution, artifactsPath, atomicWriteSessionFile, autoSkillsDir, bootstrapMountLayout, buildAgentDelegationPrompt, buildAgentTaskPrompt, buildBootstrapContextFiles, buildBudgetLimitPrompt, buildContinuationPrompt, buildGoalContextItem, buildObjectiveUpdatedPrompt, buildResumeNarration, buildSkillsPrompt, buildSubagentAnnounceMessage, buildSystemPrompt, cleanupOldSubagentRecords, clearPendingHitl, clearPendingUiTool, collapseLogPath, confirmObjectiveUpdatedSteeringConsumed, contextSnapshotPath, continuationTurnHadMeaningfulOutput, createAgentDefinitionsContext, createAgentTools, createApplyPatchTool, createAutoSkillCategoriesTool, createAutoSkillListTool, createAutoSkillSearchTool, createAutoSkillViewTool, createAutoSkillsLoader, createBashTool, createBatchSubagentSpawnTool, createBuiltinMemoryProvider, createContextManager, createEditFileTool, createExecTool, createImageTool, createListDirTool, createMemoryAppendTool, createMemoryForgetTool, createMemoryGetTool, createMemoryListTool, createMemoryLogTool, createMemorySearchTool, createMemoryUpdateTool, createMemoryWriteTool, createPendingHitl, createPendingUiTool, createPluginProgressEmitter, createPluginRuntime, createProcessTool, createReadFileTool, createSession, createSessionContextStore, createSessionSearchTool, createSkillListTool, createSkillLoadTool, createSubagentSpawnTool, createSubagentsTool, createUiTool, createWriteFileTool, cronExecutionsPath, defaultUiToolInputSchema, deleteGoal, deleteMemoryFile, discoverAIMaxPlugins, emitGoalUpdatedProgress, ensureBootstrapMountLayout, ensureSession, exportSession, filterSkillsForAgent, filterToolsForAgent, findAgentDefinition, findSkillByName, flushAccounting, formatApprovalResolution, formatClarifyResolution, formatReviewResolution, generateSessionTitle, getAgentConfig, getMemoryLines, goalEventsPath, goalObjectiveMdPath, goalPath, hasBootstrapSentinel, hitlHistoryPath, initializePluginSystem, inspectBootstrapMountLayout, inspectSession, isBootstrapMountLayoutReady, isContinuationEnabled, isGoalContext, isHitlPauseSignal, isUiToolPauseSignal, listAgents, listAvailableSlashCommands, listBindings, listMemoryFiles, listSessionSummaries, listSessions, listSubagentRunsFromDisk, loadAgentDefinitionsFromDir, loadAgentsConfig, loadArtifactOperations, loadBootstrapFiles, loadCronExecutionRecords, readPendingHitl as loadPendingHitl, readPendingHitl, readPendingUiTool as loadPendingUiTool, readPendingUiTool, loadPluginManifest, loadPluginManifestRegistry, loadPlugins, loadSessionContextSnapshot, loadSessionMetadata, loadSkillView, loadSkills, loadSkillsFromDirs, loadSkillsWithPluginDirs, loadSubagentRegistryFromDisk, loadTranscript, maybeContinueGoalIfIdle, memoryDir, metadataPath, mirrorGoalStatusToSession, normalizeAgentId, normalizePluginsConfig, normalizeSessionStoreName, parseAgentDefinition, pendingHitlPath, pendingUiToolPath, prependObjectiveUpdatedSteeringIfNeeded, primaryMemoryPath, publicAgentDefinitions, readGoal, readHitlHistory, readMemoryFile, readPrimaryMemory, readSessionFile, readSessionFileContent, registerEmbeddingProvider, registerMemoryProvider, removeAgent, removeBindings, replaceMemoryFile, resetEmbeddingProviderRegistryForTests, resetMemoryProviderRegistryForTests, resolveAgentDefinitionsContext, resolveAgentDir, resolveAgentIdByBinding, resolveAgentsConfigPath, resolveDefaultAgentId, resolveEmbeddingProvider, resolveGoalObjective, resolveHitlRequest, resolveHitlRequest as resolvePendingHitl, resolveMemoryProvider, resolveModelFallbacks, resolveModelString, resolvePendingUiTool, resolvePluginManifestPath, rewriteTranscript, runAgent, saveAgentsConfig, saveSessionMetadata, saveSubagentRegistryToDisk, scanAgentDefinitions, searchMemory, sessionDir, sessionMemoryPath, sessionsDir, shouldContinueGoal, skillsDir, toolResultsDir, transcriptPath, transitionHitlStatus, updateAgentIdentity, updateGoal, updateSessionMetadata, validatePluginsConfig, validateResume, wrapToolsWithHooks, writeGoal, writeSessionFile };
|
|
3081
|
+
export { type AccountingFlushResult, AgentBinding, AgentConfig, type AgentConfigSource, type AgentCustomProgressEvent, type AgentDefinition, type AgentDefinitionsContext, type AgentDefinitionsStats, type AgentDirectoryCandidate, AgentModelConfig, type AgentProgressEvent, type AgentRunParams, type AgentRunResult, type AgentRuntimePolicy, type AgentRuntimePolicyInput, type AgentScanOptions, type AgentVisibility, AgentsConfig, type ApplyCliGoalInput, type ApplyCliGoalResult, type ArtifactOpInput, type ArtifactOperation, type ArtifactOperationInput, type ArtifactOperationName, type ArtifactOperationType, type AutoSkillCategory, type AutoSkillIndexEntry, type AutoSkillListItem, type AutoSkillListOptions, type AutoSkillSearchOptions, type AutoSkillSearchResult, type AutoSkillStatus, type AutoSkillViewOptions, type AutoSkillViewResult, AutoSkillsLoader, type AutoSkillsLoaderOptions, 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, ContinuationState, type CronExecutionRecord, DEFAULT_SESSION_STORE_NAME, ENV_GOAL_CONTINUATION, type EmbeddingProvider, type EmbeddingProviderContext, type EmbeddingProviderFactory, type EmbeddingProviderRegistration, GOAL_MULTILINE_TEMPLATE_EXAMPLE, GoalAccounting, GoalConflictError, type GoalContinuationTurnResult, type GoalEventAction, type GoalEventRecord, type GoalEventSource, type GoalPatch, HITL_MESSAGES, type HitlPauseContext, HitlPauseSignal, type HitlToolContext, type LlmApiFormat, MAX_ARTIFACT_CONTENT_CHARS, 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 MemoryRebuildSummary, type MemorySearchOptions, type MemorySearchResult, type NormalizedPluginsConfig, type ObjectiveUpdatedSteeringPrep, 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 PluginHookBeforeCompactionResult, type PluginHookBeforeModelResolveEvent, type PluginHookBeforeModelResolveResult, type PluginHookBeforePromptBuildEvent, type PluginHookBeforePromptBuildResult, type PluginHookBeforeToolCallEvent, type PluginHookBeforeToolCallResult, type PluginHookDreamGateEvent, type PluginHookDreamGateResult, 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 PluginUiToolDescriptor, type PluginUiToolOptions, type PluginsConfig, type PluginsConfigValidationResult, type RegisteredPluginTool, type ResumeOptions, type ResumeValidationResult, type RunResultPayload, SYSTEM_AGENTS_DIR, type SessionContextStore, type SessionExport, type SessionInspection, type SessionMetadata, type SessionMetadataUpdate, type SessionSummary, type Skill, type SkillDirectory, type SkillViewResult, type SlashCommandList, type SubagentContext, SubagentRegistry, type SubagentRunRecord, type SubagentStatus, type SubagentToolsContext, type SystemPromptParams, type ToolLoopDetectionConfig, type TranscriptEntry, type TurnAccounting, type UiToolInputSchema, type UiToolOptions, UiToolPauseSignal, type WallClockAccounting, addAgent, addBinding, agentDirCandidates, agentVisibility, aimaxDir, appendArtifactOperation, appendCronExecutionRecord, appendGoalEvent, appendRecentToMemory, appendSessionFile, appendToMemory, appendTranscriptEntry, applyCliGoalBeforeRun, approvalSummaryFromResolution, artifactsPath, atomicWriteSessionFile, autoSkillsDir, bootstrapMountLayout, buildAgentDelegationPrompt, buildAgentTaskPrompt, buildAimaxGoalCliHelpExtra, buildBootstrapContextFiles, buildBudgetLimitPrompt, buildContinuationPrompt, buildGoalContextItem, buildGoalSlashHelpText, buildObjectiveUpdatedPrompt, buildResumeNarration, buildSkillsPrompt, buildSubagentAnnounceMessage, buildSystemPrompt, cleanupOldSubagentRecords, clearPendingHitl, clearPendingUiTool, collapseLogPath, confirmObjectiveUpdatedSteeringConsumed, contextSnapshotPath, continuationTurnHadMeaningfulOutput, createAgentDefinitionsContext, createAgentTools, createApplyPatchTool, createAutoSkillCategoriesTool, createAutoSkillListTool, createAutoSkillSearchTool, createAutoSkillViewTool, createAutoSkillsLoader, createBashTool, createBatchSubagentSpawnTool, createBuiltinMemoryProvider, createContextManager, createEditFileTool, createExecTool, createImageTool, createListDirTool, createMemoryAppendTool, createMemoryForgetTool, createMemoryGetTool, createMemoryListTool, createMemoryLogTool, createMemorySearchTool, createMemoryUpdateTool, createMemoryWriteTool, createPendingHitl, createPendingUiTool, createPluginProgressEmitter, createPluginRuntime, createProcessTool, createReadFileTool, createSession, createSessionContextStore, createSessionSearchTool, createSkillListTool, createSkillLoadTool, createSubagentSpawnTool, createSubagentsTool, createUiTool, createWriteFileTool, cronExecutionsPath, defaultUiToolInputSchema, deleteGoal, deleteMemoryFile, discoverAIMaxPlugins, emitGoalUpdatedProgress, ensureBootstrapMountLayout, ensureSession, exportSession, filterSkillsForAgent, filterToolsForAgent, findAgentDefinition, findSkillByName, flushAccounting, formatApprovalResolution, formatClarifyResolution, formatReviewResolution, generateSessionTitle, getAgentConfig, getMemoryLines, goalEventsPath, goalObjectiveMdPath, goalPath, hasBootstrapSentinel, hitlHistoryPath, initializePluginSystem, inspectBootstrapMountLayout, inspectSession, isBootstrapMountLayoutReady, isContinuationEnabled, isGoalContext, isHitlPauseSignal, isUiToolPauseSignal, listAgents, listAvailableSlashCommands, listBindings, listMemoryFiles, listSessionSummaries, listSessions, listSubagentRunsFromDisk, loadAgentDefinitionsFromDir, loadAgentsConfig, loadArtifactOperations, loadBootstrapFiles, loadCronExecutionRecords, readPendingHitl as loadPendingHitl, readPendingHitl, readPendingUiTool as loadPendingUiTool, readPendingUiTool, loadPluginManifest, loadPluginManifestRegistry, loadPlugins, loadSessionContextSnapshot, loadSessionMetadata, loadSkillView, loadSkills, loadSkillsFromDirs, loadSkillsWithPluginDirs, loadSubagentRegistryFromDisk, loadTranscript, maybeContinueGoalIfIdle, memoryDir, metadataPath, mirrorGoalStatusToSession, normalizeAgentId, normalizePluginsConfig, normalizeSessionStoreName, parseAgentDefinition, pendingHitlPath, pendingUiToolPath, prependObjectiveUpdatedSteeringIfNeeded, primaryMemoryPath, publicAgentDefinitions, readGoal, readHitlHistory, readMemoryFile, readPrimaryMemory, readSessionFile, readSessionFileContent, registerEmbeddingProvider, registerMemoryProvider, removeAgent, removeBindings, replaceMemoryFile, resetEmbeddingProviderRegistryForTests, resetMemoryProviderRegistryForTests, resolveAgentDefinitionsContext, resolveAgentDir, resolveAgentIdByBinding, resolveAgentsConfigPath, resolveDefaultAgentId, resolveEmbeddingProvider, resolveGoalObjective, resolveHitlRequest, resolveHitlRequest as resolvePendingHitl, resolveMemoryProvider, resolveModelFallbacks, resolveModelString, resolvePendingUiTool, resolvePluginManifestPath, rewriteTranscript, runAgent, saveAgentsConfig, saveSessionMetadata, saveSubagentRegistryToDisk, scanAgentDefinitions, searchMemory, sessionDir, sessionMemoryPath, sessionsDir, shouldContinueGoal, skillsDir, toolResultsDir, transcriptPath, transitionHitlStatus, updateAgent, updateAgentIdentity, updateGoal, updateSessionMetadata, validatePluginsConfig, validateResume, wrapToolsWithHooks, writeGoal, writeSessionFile };
|