@vpxa/aikit 0.1.237 → 0.1.239
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/package.json +1 -1
- package/packages/chunker/dist/index.js +1 -1
- package/packages/dashboard/dist/assets/index-CrO8_g2c.js +20 -0
- package/packages/dashboard/dist/assets/index-DtxX27Jz.css +1 -0
- package/packages/dashboard/dist/index.html +2 -2
- package/packages/indexer/dist/index.js +1 -1
- package/packages/present/dist/index.html +1 -1
- package/packages/server/dist/bin.js +2 -2
- package/packages/server/dist/{config-Ymr8iMyI.js → config-CANyB8R8.js} +1 -1
- package/packages/server/dist/{config-DzZLgNQT.js → config-DuoTKizy.js} +1 -1
- package/packages/server/dist/{curated-manager-BpxV59aR.js → curated-manager-xTfPLFMR.js} +1 -1
- package/packages/server/dist/index.js +1 -1
- package/packages/server/dist/{promotion-BUn2DHpt.js → promotion-PdKQQktE.js} +1 -1
- package/packages/server/dist/{server-DUwue6o8.js → server-0vfYDUrr.js} +3 -3
- package/packages/server/dist/{server-SG2YaDsH.js → server-D07JBa-I.js} +4 -4
- package/packages/settings-ui/dist/assets/{index-DLcLvASh.js → index-BSvuHWLA.js} +2 -2
- package/packages/settings-ui/dist/index.html +1 -1
- package/packages/store/dist/index.js +1 -1
- package/scaffold/dist/definitions/skills/c4-architecture.mjs +1 -1
- package/scaffold/dist/definitions/skills/docs.mjs +1 -1
- package/packages/dashboard/dist/assets/index-4HQiq-qo.js +0 -20
- package/packages/dashboard/dist/assets/index-CHpVij2M.css +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{r as e,t}from"./curated-manager-
|
|
1
|
+
import{r as e,t}from"./curated-manager-xTfPLFMR.js";import{a as n,i as r,n as i,o as a,r as o,s}from"./retention-B4ITAs7F.js";import{a as c,c as l,d as u,f as d,h as f,i as p,l as m,m as h,n as g,o as _,p as v,r as y,s as b,u as x}from"./supersession-CWEne3av.js";import{n as S,r as C}from"./resolve-sibling-1oDoO-Re.js";import{n as w,r as T}from"./evolution-BX_zTSdj.js";import{a as E,i as D,n as O,r as ee,s as te,t as ne}from"./promotion-PdKQQktE.js";import{autoUpgradeScaffold as re,getCurrentVersion as ie,getUpgradeState as ae}from"./version-check-BgHzxxCW.js";import{createRequire as oe}from"node:module";import{createHash as k,randomBytes as se,randomUUID as ce,timingSafeEqual as le}from"node:crypto";import{existsSync as A,mkdirSync as j,readFileSync as M,readdirSync as ue,renameSync as de,rmSync as fe,statSync as pe,unlinkSync as me,writeFileSync as he}from"node:fs";import{basename as ge,dirname as _e,isAbsolute as ve,join as N,relative as ye,resolve as P,sep as be}from"node:path";import{fileURLToPath as xe}from"node:url";import{AIKIT_PATHS as Se,CONTENT_TYPES as Ce,CircuitBreaker as we,EMBEDDING_DEFAULTS as Te,HealthBus as Ee,KNOWLEDGE_ORIGINS as De,SOURCE_TYPES as Oe,TOKEN_BUDGETS as ke,addLogListener as Ae,computePartitionKey as je,createLogger as F,getGlobalDataDir as Me,getPartitionDir as Ne,isUserInstalled as Pe,listWorkspaces as Fe,serializeError as I}from"../../core/dist/index.js";import{FileCache as Ie,acquireLease as Le,addToWorkset as Re,audit as ze,bookendReorder as Be,changelog as Ve,check as He,checkpointDiff as Ue,checkpointGC as We,checkpointHistory as Ge,checkpointLatest as Ke,checkpointList as qe,checkpointLoad as Je,checkpointSave as Ye,codemod as Xe,compact as Ze,compressTerminalOutput as Qe,createRestorePoint as $e,createSearchSuccessResponse as et,dataTransform as tt,delegate as nt,delegateListModels as rt,deleteWorkset as it,diffParse as at,digest as ot,encode as st,ensureLegacyStashImported as ct,envInfo as lt,evaluate as ut,evidenceMap as dt,fileSummary as ft,find as pt,findDeadSymbols as mt,findExamples as ht,forgeClassify as gt,forgeGround as _t,getWorkset as vt,gitContext as yt,graphAugmentSearch as bt,graphQuery as xt,guide as St,health as Ct,httpRequest as wt,laneCreate as Tt,laneDiff as Et,laneDiscard as Dt,laneList as Ot,laneMerge as kt,laneStatus as At,listActiveLeases as jt,listRestorePoints as Mt,listWorksets as Nt,measure as Pt,onboard as Ft,parseOutput as It,processList as Lt,processLogs as Rt,processStart as zt,processStatus as Bt,processStop as Vt,queueClear as Ht,queueCreate as Ut,queueDag as Wt,queueDelete as Gt,queueDone as Kt,queueFail as qt,queueGet as Jt,queueList as Yt,queueNext as Xt,queuePush as Zt,regexTest as Qt,releaseLease as $t,removeFromWorkset as en,rename as tn,replayAppend as nn,replayClear as rn,replayList as an,replayTrim as on,restoreFromPoint as sn,saveWorkset as cn,schemaValidate as ln,scopeMap as un,scoreCompliance as dn,sessionDigest as fn,sessionDigestSampling as pn,stashClear as mn,stashDelete as hn,stashGet as gn,stashList as _n,stashSet as vn,stratumCard as yn,summarizeCheckResult as bn,symbol as xn,testRun as Sn,timeUtils as Cn,trace as wn,truncateToTokenBudget as L,watchList as Tn,watchStart as En,watchStop as Dn,webFetch as On,webSearch as kn}from"../../tools/dist/index.js";import{mkdir as An,readFile as jn,readdir as Mn,rm as Nn,stat as Pn,unlink as Fn,writeFile as In}from"node:fs/promises";import{execFile as Ln,execSync as Rn}from"node:child_process";import{homedir as zn,tmpdir as Bn}from"node:os";import{McpServer as Vn,ResourceTemplate as Hn}from"@modelcontextprotocol/sdk/server/mcp.js";import{buildFormSchema as Un,field as Wn,normalizeResponse as Gn}from"../../elicitation/dist/index.js";import{completable as Kn}from"@modelcontextprotocol/sdk/server/completable.js";import{z as R}from"zod";import{getEngine as qn,registerBrowserTools as Jn}from"../../browser/dist/index.js";import{BlastRadiusAnalyzer as Yn,DependencyAnalyzer as Xn,DiagramGenerator as Zn,EntryPointAnalyzer as Qn,KnowledgeProducer as $n,PatternAnalyzer as er,StructureAnalyzer as tr,SymbolAnalyzer as nr}from"../../analyzers/dist/index.js";import{WasmDiagnostics as rr,WasmRuntime as ir,initializeWasm as ar}from"../../chunker/dist/index.js";import{ERCache as or,ERClient as sr,EvolutionCollector as cr,PolicyStore as lr,PushAdapter as ur,mergeResults as dr}from"../../enterprise-bridge/dist/index.js";import{RESOURCE_MIME_TYPE as fr,registerAppResource as pr,registerAppTool as mr}from"@modelcontextprotocol/ext-apps/server";import{SqliteGraphStore as hr,allMigrations as gr,createSqliteAdapter as _r,createStateStore as vr,createStore as yr,runMigrations as br}from"../../store/dist/index.js";import{TemplateRegistry as xr,buildShell as Sr,dashboardTemplateDefinition as Cr,defaultRegistry as wr,flameGraphTemplateDefinition as Tr,isError as Er,isResult as Dr,kanbanTemplateDefinition as Or,listSortTemplateDefinition as kr,renderSurface as Ar}from"../../blocks-core/dist/index.mjs";import{createServer as jr}from"node:http";import{EmbedderProxy as Mr}from"../../embeddings/dist/index.js";import{FileHashCache as Nr,IncrementalIndexer as Pr}from"../../indexer/dist/index.js";function Fr(e){function t(){return!!e.server?.getClientCapabilities?.()?.elicitation}async function n(n,r){if(t())try{let t=await e.server.elicitInput({message:n,requestedSchema:r});return Gn(t?{action:t.action,content:t.content}:void 0)}catch{return}}return{get available(){return t()},async ask(e){return await n(e.message,e.schema)||{action:`decline`}},async confirm(e){let t=await n(e,Un({confirmed:Wn.confirm(e)}));return t?.action===`accept`&&t.content?.confirmed===!0},async selectOne(e,t){let r=await n(e,Un({selection:Wn.select(`Choose one`,t)}));if(r?.action!==`accept`)return null;let i=r.content?.selection;return typeof i==`string`?i:null},async selectMany(e,t){let r=await n(e,Un({selections:Wn.multi(`Choose one or more`,t)}));if(r?.action!==`accept`)return[];let i=r.content?.selections;return Array.isArray(i)?i:[]},async promptText(e,t){let r=await n(e,Un({text:Wn.text(e,{description:t})}));if(r?.action!==`accept`)return null;let i=r.content?.text;return typeof i==`string`?i:null}}}const Ir={debug:`debug`,info:`info`,warn:`warning`,error:`error`};function Lr(e){return Ae(({level:t,component:n,message:r,data:i})=>{try{Promise.resolve(e.sendLoggingMessage({level:Ir[t],logger:n,data:i?{message:r,...i}:r})).catch(()=>{})}catch{}})}const Rr=3e4,zr=new Map;function Br(e,t,n){let r=zr.get(e);if(r&&Date.now()<r.expires)return Promise.resolve(r.data);let i=n();return Promise.resolve(i).then(n=>(zr.set(e,{data:n,expires:Date.now()+t}),n))}function Vr(){zr.clear()}function Hr(e,t){return Br(`curated-paths`,Rr,async()=>(await e.list()).map(e=>e.path)).then(e=>e.filter(e=>e.toLowerCase().includes(t.toLowerCase())).slice(0,20))}function Ur(e,t){return Br(`file-paths`,Rr,()=>e.listSourcePaths()).then(e=>e.filter(e=>e.toLowerCase().includes(t.toLowerCase())).slice(0,20))}function Wr(e,t){return Br(`symbol-names`,Rr,async()=>(await e.findNodes({type:`symbol`,limit:500})).map(e=>e.name)).then(e=>e.filter(e=>e.toLowerCase().includes(t.toLowerCase())).slice(0,20))}function Gr(e,t){return t?_n(t).map(e=>e.key).filter(t=>t.toLowerCase().includes(e.toLowerCase())).slice(0,20):[]}function Kr(e){return Nt().map(e=>e.name).filter(t=>t.toLowerCase().includes(e.toLowerCase())).slice(0,20)}function qr(e,t){return t?qe(t).map(e=>e.label).filter(t=>t.toLowerCase().includes(e.toLowerCase())).slice(0,20):[]}function Jr(e,t,n){if(e.registerPrompt(`ready`,{title:`AI Kit Ready`,description:`AI Kit is ready — quick-start guide for search, onboard, and workflows`},async()=>({messages:[{role:`user`,content:{type:`text`,text:[`AI Kit is ready. Quick start:`,``,'• **New project?** → `onboard({ path: "." })` for full codebase analysis','• **Returning?** → `status({})` then `search({ query: "SESSION CHECKPOINT", origin: "curated" })`','• **Exploring?** → `guide({ goal: "your task" })` for workflow recommendations','• **Quick lookup?** → `search({ query: "your question" })`'].join(`
|
|
2
2
|
`)}}]})),e.registerPrompt(`onboard`,{title:`Onboard Codebase`,description:`Analyze the codebase for first-time onboarding — runs all analyzers and produces a knowledge summary`,argsSchema:{path:R.string().optional().describe(`Path to analyze (default: workspace root)`)}},async({path:e})=>({messages:[{role:`user`,content:{type:`text`,text:[`Run the full onboarding workflow for "${e??`.`}"`,``,`1. \`onboard({ path: "${e??`.`}" })\` — full codebase analysis`,`2. \`produce_knowledge({ path: "${e??`.`}" })\` — generate synthesis`,'3. `knowledge({ action: "remember", ... })` for key curated entries',"4. `status` to verify index health"].join(`
|
|
3
3
|
`)}}]})),e.registerPrompt(`sessionStart`,{title:`Start AI Kit Session`,description:`Initialize an AI Kit session — check status, list knowledge, and resume from last checkpoint`},async()=>({messages:[{role:`user`,content:{type:`text`,text:[`Run the session start protocol:`,``,"1. `status({})` — check AI Kit health and onboard state",'2. `knowledge({ action: "list" })` — see stored knowledge entries','3. `search({ query: "SESSION CHECKPOINT", origin: "curated" })` — resume prior work'].join(`
|
|
4
4
|
`)}}]})),e.registerPrompt(`sessionEnd`,{title:`End AI Kit Session`,description:`Persist decisions and create a session checkpoint before ending`,argsSchema:{summary:R.string().describe(`Brief summary of decisions made, blockers encountered, and next steps`)}},async({summary:e})=>({messages:[{role:`user`,content:{type:`text`,text:[`Run the session end protocol:`,``,'1. `knowledge({ action: "remember", title: "Session checkpoint: '+e.slice(0,60)+`...", content: "`+e.replace(/"/g,`\\"`)+'", category: "conventions" })` — persist findings',n===`smart`?`2. Smart indexing is active — index refreshes automatically`:"2. `reindex({})` — refresh search index if files changed",`3. Confirm session data saved`].join(`
|
|
@@ -3012,12 +3012,12 @@ Use \`status({})\` to check smart indexing queue status.`}]};let l=kc(c).createT
|
|
|
3012
3012
|
Data matches the schema.`}]};let r=[`## Validation: FAILED`,``,`**${n.errors.length} error(s):**`,``];for(let e of n.errors){let t=e.expected?` (expected: ${e.expected}, got: ${e.received})`:``;r.push(`- \`${e.path}\`: ${e.message}${t}`)}return{content:[{type:`text`,text:r.join(`
|
|
3013
3013
|
`)}]}}catch(e){return yg.error(`Schema validation failed`,I(e)),K(`INTERNAL`,`Schema validation failed: ${e instanceof Error?e.message:String(e)}`)}}))}function Dg(e){let t=U(`env`);e.registerTool(`env`,{title:t.title,description:`Get system and runtime environment info. Sensitive env vars are redacted by default.`,outputSchema:Cs,inputSchema:{include_env:R.boolean().default(!1).describe(`Include environment variables`),filter_env:R.string().optional().describe(`Filter env vars by name substring`),show_sensitive:R.boolean().default(!1).describe(`Show sensitive values (keys, tokens, etc.) — redacted by default`)},annotations:t.annotations},q(`env`,async({include_env:e,filter_env:t,show_sensitive:n})=>{let r=lt({includeEnv:e,filterEnv:t,showSensitive:n}),i=[`## Environment`,``,`**Platform:** ${r.system.platform} ${r.system.arch}`,`**OS:** ${r.system.type} ${r.system.release}`,`**Host:** ${r.system.hostname}`,`**CPUs:** ${r.system.cpus}`,`**Memory:** ${r.system.memoryFreeGb}GB free / ${r.system.memoryTotalGb}GB total`,``,`**Node:** ${r.runtime.node}`,`**V8:** ${r.runtime.v8}`,`**CWD:** ${r.cwd}`];if(r.env){i.push(``,`### Environment Variables`,``);for(let[e,t]of Object.entries(r.env))i.push(`- \`${e}\`: ${t}`)}let a={platform:r.system.platform,arch:r.system.arch,nodeVersion:r.runtime.node,cwd:r.cwd,cpus:r.system.cpus,memoryFreeGb:r.system.memoryFreeGb,memoryTotalGb:r.system.memoryTotalGb};return{content:[{type:`text`,text:i.join(`
|
|
3014
3014
|
`)}],structuredContent:a}}))}function Og(e){let t=U(`time`);e.registerTool(`time`,{title:t.title,description:`Parse dates, convert timezones, calculate durations, add time. Supports ISO 8601, unix timestamps, and human-readable formats.`,outputSchema:ws,inputSchema:{operation:R.enum([`now`,`parse`,`convert`,`diff`,`add`]).describe(`now: current time | parse: parse a date string | convert: timezone conversion | diff: duration between two dates | add: add duration to date`),input:R.string().optional().describe(`Date input (ISO, unix timestamp, or parseable string). For diff: two comma-separated dates`),timezone:R.string().optional().describe(`Target timezone (e.g., "America/New_York", "Asia/Tokyo")`),duration:R.string().optional().describe(`Duration to add (e.g., "2h30m", "1d", "30s") — for add operation`)},annotations:t.annotations},q(`time`,async({operation:e,input:t,timezone:n,duration:r})=>{try{let i=Cn({operation:e,input:t,timezone:n,duration:r}),a=[`**${i.output}**`,``,`ISO: ${i.iso}`,`Unix: ${i.unix}`];i.details&&a.push(``,"```json",JSON.stringify(i.details),"```");let o={iso:i.iso,unix:i.unix,timezone:n??Intl.DateTimeFormat().resolvedOptions().timeZone,formatted:i.output};return{content:[{type:`text`,text:a.join(`
|
|
3015
|
-
`)}],structuredContent:o}}catch(e){return yg.error(`Time failed`,I(e)),K(`INTERNAL`,`Time failed: ${e instanceof Error?e.message:String(e)}`)}}))}function kg(e){try{let t=N(e,`.flows`);if(!A(t))return null;let n=ue(t,{withFileTypes:!0});for(let e of n){if(!e.isDirectory())continue;let n=N(t,e.name,`meta.json`);if(A(n)&&JSON.parse(M(n,`utf-8`)).status===`active`)return e.name}}catch{return null}return null}function Ag(e,t,n,r,i,a,o,s,c,l){let u=new co,d=n.sources[0]?.path??process.cwd(),f={activeSlug:null};f.activeSlug=kg(d);let p=new Oa(N(n.stateDir??``,`flow-context`),()=>f.activeSlug),m=new ya;m.register(Ti()),m.register(ga),m.register(Fi),m.register(aa),m.register(Mi),m.register(Ei),m.register(Di),m.register(pa),m.register(ki),m.register(va),m.register(ia(()=>f.activeSlug?{active:!0,slug:f.activeSlug}:null));let h=new wa(m,t.curated,{},p),g=l??hs(n,[...Bo,...Po],Yo,Io(n)),_=e=>g.has(e),v=new Set([...g].filter(e=>!Xf.includes(e)&&!Ja.has(e))),y=new Qa;u.use(Sa(h),{order:5,name:`auto-knowledge`}),u.use(Eo(),{order:10,name:`replay`}),u.use(to(y,{stateStore:t.stateStore,curatedStore:t.curated},{trackedTools:v}),{order:94,name:`procedural-memory`}),u.use(Wa(new Ha(t.stateStore,t.curated)),{order:95,name:`observation-capture`}),u.use(Ho(),{order:1,name:`structured-content-guard`}),u.use(Da(Ea(n.tokenBudget)),{order:90,name:`compression`}),es(e,u,n.toolPrefix??``);let b=[...g].filter(e=>Fo.has(e)?No.includes(e)?!!t.bridge:e===`er_update_policy`?!!t.policyStore:e===`er_evolve_review`?!!t.evolutionCollector:!1:!0);_(`search`)&&Ih(e,t.embedder,t.store,t.graphStore,t.bridge,t.evolutionCollector,a,t.stateStore,n.memory?.retention,n.memory?.consolidation);let x={store:t.store,graphStore:t.graphStore,embedder:t.embedder},S=c?e=>{c()?.prioritize(e)}:void 0;_(`lookup`)&&zf(e,t.store,x);let C={onboardComplete:t.onboardComplete,onboardTimestamp:t.onboardTimestamp};_(`status`)&&vg(e,t.store,t.graphStore,t.curated,C,n,o,s,t.stateStore),_(`config`)&&ol(e,n),_(`reindex`)&&gh(e,t.indexer,n,t.curated,t.store,i,o),_(`knowledge`)&&Lf(e,t.curated,t.policyStore,t.evolutionCollector,i,p,t.stateStore,n.memory?.retention,n.memory?.supersession,n.memory?.consolidation,n.memory?.lessons,x),_(`analyze`)&&Tc(e,t.store,t.embedder,x),_(`blast_radius`)&&Ec(e,t.store,t.embedder,t.graphStore,x),_(`produce_knowledge`)&&mh(e,n),_(`onboard`)&&np(e,t.store,t.embedder,n,C,x),_(`graph`)&&Wu(e,t.graphStore,x),_(`audit`)&&jc(e,t.store,t.embedder,n.tokenBudget),_(`compact`)&&yl(e,t.embedder,t.fileCache,d,n.allRoots,x,S),_(`scope_map`)&&bl(e,t.embedder,t.store,x),_(`find`)&&xl(e,t.embedder,t.store,d,x),_(`parse_output`)&&Fl(e),_(`workset`)&&ip(e),_(`check`)&&Ml(e,x,n.tokenBudget),_(`symbol`)&&Sl(e,t.embedder,t.store,t.graphStore,x),_(`eval`)&&Nl(e),_(`test_run`)&&Pl(e,x),_(`stash`)&&ap(e,t.stateStore),_(`signal`)&&tg(e,t.stateStore),_(`git_context`)&&Uf(e),_(`diff_parse`)&&Wf(e),_(`rename`)&&Gf(e,n),_(`codemod`)&&Kf(e,n),_(`restore`)&&bh(e),_(`file_summary`)&&Cl(e,t.fileCache,d,n.allRoots,x,S),_(`checkpoint`)&&op(e,t.stateStore),_(`data_transform`)&&qf(e),_(`trace`)&&wl(e,t.embedder,t.store,t.graphStore,x),_(`process`)&&Ku(e),_(`watch`)&&qu(e),_(`dead_symbols`)&&Tl(e,t.embedder,t.store,d,n.allRoots,x),_(`delegate`)&&Il(e,a),_(`health`)&&Ju(e),_(`lane`)&&sp(e),_(`queue`)&&cp(e),_(`web_fetch`)&&Yu(e),_(`guide`)&&Xu(e,o),Xf.some(e=>_(e))&&Zf(e,n,b),_(`evidence_map`)&&Iu(e),_(`digest`)&&Lu(e,t.embedder),_(`forge_classify`)&&Ru(e,x),_(`stratum_card`)&&zu(e,t.embedder,t.fileCache),_(`forge_ground`)&&Bu(e,t.embedder,t.store),_(`present`)&&fh(e,r),_(`browser`)&&Jn(e,n),_(`web_search`)&&bg(e),_(`http`)&&xg(e),_(`regex_test`)&&Sg(e),_(`encode`)&&Cg(e),_(`measure`)&&wg(e),_(`changelog`)&&Tg(e),_(`schema_validate`)&&Eg(e),_(`env`)&&Dg(e),_(`time`)&&Og(e),_(`flow`)&&Pu(e,n,{store:t.store?{search:async(e,n)=>(await t.store.ftsSearch(e,n)).map(e=>({content:e.record.content}))}:null,graphStore:t.graphStore,embedder:t.embedder},e=>{f.activeSlug=e}),t.bridge&&No.some(e=>_(e))&&(Fc(e,t.bridge,t.evolutionCollector),Ic(e,t.bridge),Lc(e,t.bridge)),t.policyStore&&_(`er_update_policy`)&&mp(e,t.policyStore),t.evolutionCollector&&_(`er_evolve_review`)&&Al(e,t.evolutionCollector),Mo(e,t.store,t.curated),_(`compliance_score`)&&Bc(e),_(`replay`)&&vh(e),_(`session_digest`)&&Rh(e,t.stateStore,a)}function jg(e,t,n){let r=e=>!n||n.has(e);r(`check`)&&Ml(e,void 0,t.tokenBudget),r(`eval`)&&Nl(e),r(`test_run`)&&Pl(e),r(`parse_output`)&&Fl(e),r(`delegate`)&&Il(e),r(`git_context`)&&Uf(e),r(`diff_parse`)&&Wf(e),r(`rename`)&&Gf(e,t),r(`codemod`)&&Kf(e,t),r(`data_transform`)&&qf(e),r(`workset`)&&ip(e),r(`restore`)&&bh(e),r(`lane`)&&sp(e),r(`queue`)&&cp(e),r(`session_digest`)&&Rh(e),r(`health`)&&Ju(e),r(`process`)&&Ku(e),r(`watch`)&&qu(e),r(`web_fetch`)&&Yu(e),r(`guide`)&&Xu(e),Xf.some(e=>r(e))&&Zf(e,t,[...n??new Set(Bo)]),r(`evidence_map`)&&Iu(e),r(`forge_classify`)&&Ru(e),r(`present`)&&fh(e),r(`browser`)&&Jn(e,t),r(`produce_knowledge`)&&mh(e),r(`compliance_score`)&&Bc(e),r(`replay`)&&vh(e),r(`status`)&&_g(e),r(`flow`)&&Pu(e,t),r(`web_search`)&&bg(e),r(`http`)&&xg(e),r(`regex_test`)&&Sg(e),r(`encode`)&&Cg(e),r(`measure`)&&wg(e),r(`changelog`)&&Tg(e),r(`schema_validate`)&&Eg(e),r(`env`)&&Dg(e),r(`time`)&&Og(e)}const Mg=F(`resource-notifier`);var Ng=class{mcpServer;constructor(e){this.mcpServer=e}async notifyStatusChanged(){await this.sendUpdate(`aikit://status`)}async notifyFileTreeChanged(){await this.sendUpdate(`aikit://file-tree`)}async notifyCuratedIndexChanged(){await this.sendUpdate(`aikit://curated`)}async notifyCuratedEntryChanged(e){await this.sendUpdate(`aikit://curated/${e}`)}async notifyResourceListChanged(){try{await this.mcpServer.server.sendResourceListChanged()}catch(e){Mg.debug(`sendResourceListChanged failed`,{error:String(e)})}}async notifyAfterReindex(){await Promise.allSettled([this.notifyStatusChanged(),this.notifyFileTreeChanged()])}async notifyAfterCuratedWrite(e){let t=[this.notifyStatusChanged(),this.notifyCuratedIndexChanged()];e&&t.push(this.notifyCuratedEntryChanged(e)),await Promise.allSettled(t)}async sendUpdate(e){try{await this.mcpServer.server.sendResourceUpdated({uri:e})}catch(t){Mg.debug(`sendResourceUpdated failed`,{uri:e,error:String(t)})}}};const Q=F(`server`);function Pg(e){let t=e?.trim().toLowerCase();return t===`1`||t===`true`||t===`yes`||t===`on`}async function Fg(n){Q.info(`Initializing AI Kit components`);let r=n.store.backend,i=n.store.path,a=Pg(process.env.AIKIT_SPLIT_STATE),o=N(i,`aikit.db`),s={splitEnabled:a,contentDbPath:o,controlDbPath:a?N(i,`aikit-control.db`):o},c=null;if(r===`sqlite-vec`){let e=s.contentDbPath;A(i)||j(i,{recursive:!0}),c=await _r(e),Q.
|
|
3015
|
+
`)}],structuredContent:o}}catch(e){return yg.error(`Time failed`,I(e)),K(`INTERNAL`,`Time failed: ${e instanceof Error?e.message:String(e)}`)}}))}function kg(e){try{let t=N(e,`.flows`);if(!A(t))return null;let n=ue(t,{withFileTypes:!0});for(let e of n){if(!e.isDirectory())continue;let n=N(t,e.name,`meta.json`);if(A(n)&&JSON.parse(M(n,`utf-8`)).status===`active`)return e.name}}catch{return null}return null}function Ag(e,t,n,r,i,a,o,s,c,l){let u=new co,d=n.sources[0]?.path??process.cwd(),f={activeSlug:null};f.activeSlug=kg(d);let p=new Oa(N(n.stateDir??``,`flow-context`),()=>f.activeSlug),m=new ya;m.register(Ti()),m.register(ga),m.register(Fi),m.register(aa),m.register(Mi),m.register(Ei),m.register(Di),m.register(pa),m.register(ki),m.register(va),m.register(ia(()=>f.activeSlug?{active:!0,slug:f.activeSlug}:null));let h=new wa(m,t.curated,{},p),g=l??hs(n,[...Bo,...Po],Yo,Io(n)),_=e=>g.has(e),v=new Set([...g].filter(e=>!Xf.includes(e)&&!Ja.has(e))),y=new Qa;u.use(Sa(h),{order:5,name:`auto-knowledge`}),u.use(Eo(),{order:10,name:`replay`}),u.use(to(y,{stateStore:t.stateStore,curatedStore:t.curated},{trackedTools:v}),{order:94,name:`procedural-memory`}),u.use(Wa(new Ha(t.stateStore,t.curated)),{order:95,name:`observation-capture`}),u.use(Ho(),{order:1,name:`structured-content-guard`}),u.use(Da(Ea(n.tokenBudget)),{order:90,name:`compression`}),es(e,u,n.toolPrefix??``);let b=[...g].filter(e=>Fo.has(e)?No.includes(e)?!!t.bridge:e===`er_update_policy`?!!t.policyStore:e===`er_evolve_review`?!!t.evolutionCollector:!1:!0);_(`search`)&&Ih(e,t.embedder,t.store,t.graphStore,t.bridge,t.evolutionCollector,a,t.stateStore,n.memory?.retention,n.memory?.consolidation);let x={store:t.store,graphStore:t.graphStore,embedder:t.embedder},S=c?e=>{c()?.prioritize(e)}:void 0;_(`lookup`)&&zf(e,t.store,x);let C={onboardComplete:t.onboardComplete,onboardTimestamp:t.onboardTimestamp};_(`status`)&&vg(e,t.store,t.graphStore,t.curated,C,n,o,s,t.stateStore),_(`config`)&&ol(e,n),_(`reindex`)&&gh(e,t.indexer,n,t.curated,t.store,i,o),_(`knowledge`)&&Lf(e,t.curated,t.policyStore,t.evolutionCollector,i,p,t.stateStore,n.memory?.retention,n.memory?.supersession,n.memory?.consolidation,n.memory?.lessons,x),_(`analyze`)&&Tc(e,t.store,t.embedder,x),_(`blast_radius`)&&Ec(e,t.store,t.embedder,t.graphStore,x),_(`produce_knowledge`)&&mh(e,n),_(`onboard`)&&np(e,t.store,t.embedder,n,C,x),_(`graph`)&&Wu(e,t.graphStore,x),_(`audit`)&&jc(e,t.store,t.embedder,n.tokenBudget),_(`compact`)&&yl(e,t.embedder,t.fileCache,d,n.allRoots,x,S),_(`scope_map`)&&bl(e,t.embedder,t.store,x),_(`find`)&&xl(e,t.embedder,t.store,d,x),_(`parse_output`)&&Fl(e),_(`workset`)&&ip(e),_(`check`)&&Ml(e,x,n.tokenBudget),_(`symbol`)&&Sl(e,t.embedder,t.store,t.graphStore,x),_(`eval`)&&Nl(e),_(`test_run`)&&Pl(e,x),_(`stash`)&&ap(e,t.stateStore),_(`signal`)&&tg(e,t.stateStore),_(`git_context`)&&Uf(e),_(`diff_parse`)&&Wf(e),_(`rename`)&&Gf(e,n),_(`codemod`)&&Kf(e,n),_(`restore`)&&bh(e),_(`file_summary`)&&Cl(e,t.fileCache,d,n.allRoots,x,S),_(`checkpoint`)&&op(e,t.stateStore),_(`data_transform`)&&qf(e),_(`trace`)&&wl(e,t.embedder,t.store,t.graphStore,x),_(`process`)&&Ku(e),_(`watch`)&&qu(e),_(`dead_symbols`)&&Tl(e,t.embedder,t.store,d,n.allRoots,x),_(`delegate`)&&Il(e,a),_(`health`)&&Ju(e),_(`lane`)&&sp(e),_(`queue`)&&cp(e),_(`web_fetch`)&&Yu(e),_(`guide`)&&Xu(e,o),Xf.some(e=>_(e))&&Zf(e,n,b),_(`evidence_map`)&&Iu(e),_(`digest`)&&Lu(e,t.embedder),_(`forge_classify`)&&Ru(e,x),_(`stratum_card`)&&zu(e,t.embedder,t.fileCache),_(`forge_ground`)&&Bu(e,t.embedder,t.store),_(`present`)&&fh(e,r),_(`browser`)&&Jn(e,n),_(`web_search`)&&bg(e),_(`http`)&&xg(e),_(`regex_test`)&&Sg(e),_(`encode`)&&Cg(e),_(`measure`)&&wg(e),_(`changelog`)&&Tg(e),_(`schema_validate`)&&Eg(e),_(`env`)&&Dg(e),_(`time`)&&Og(e),_(`flow`)&&Pu(e,n,{store:t.store?{search:async(e,n)=>(await t.store.ftsSearch(e,n)).map(e=>({content:e.record.content}))}:null,graphStore:t.graphStore,embedder:t.embedder},e=>{f.activeSlug=e}),t.bridge&&No.some(e=>_(e))&&(Fc(e,t.bridge,t.evolutionCollector),Ic(e,t.bridge),Lc(e,t.bridge)),t.policyStore&&_(`er_update_policy`)&&mp(e,t.policyStore),t.evolutionCollector&&_(`er_evolve_review`)&&Al(e,t.evolutionCollector),Mo(e,t.store,t.curated),_(`compliance_score`)&&Bc(e),_(`replay`)&&vh(e),_(`session_digest`)&&Rh(e,t.stateStore,a)}function jg(e,t,n){let r=e=>!n||n.has(e);r(`check`)&&Ml(e,void 0,t.tokenBudget),r(`eval`)&&Nl(e),r(`test_run`)&&Pl(e),r(`parse_output`)&&Fl(e),r(`delegate`)&&Il(e),r(`git_context`)&&Uf(e),r(`diff_parse`)&&Wf(e),r(`rename`)&&Gf(e,t),r(`codemod`)&&Kf(e,t),r(`data_transform`)&&qf(e),r(`workset`)&&ip(e),r(`restore`)&&bh(e),r(`lane`)&&sp(e),r(`queue`)&&cp(e),r(`session_digest`)&&Rh(e),r(`health`)&&Ju(e),r(`process`)&&Ku(e),r(`watch`)&&qu(e),r(`web_fetch`)&&Yu(e),r(`guide`)&&Xu(e),Xf.some(e=>r(e))&&Zf(e,t,[...n??new Set(Bo)]),r(`evidence_map`)&&Iu(e),r(`forge_classify`)&&Ru(e),r(`present`)&&fh(e),r(`browser`)&&Jn(e,t),r(`produce_knowledge`)&&mh(e),r(`compliance_score`)&&Bc(e),r(`replay`)&&vh(e),r(`status`)&&_g(e),r(`flow`)&&Pu(e,t),r(`web_search`)&&bg(e),r(`http`)&&xg(e),r(`regex_test`)&&Sg(e),r(`encode`)&&Cg(e),r(`measure`)&&wg(e),r(`changelog`)&&Tg(e),r(`schema_validate`)&&Eg(e),r(`env`)&&Dg(e),r(`time`)&&Og(e)}const Mg=F(`resource-notifier`);var Ng=class{mcpServer;constructor(e){this.mcpServer=e}async notifyStatusChanged(){await this.sendUpdate(`aikit://status`)}async notifyFileTreeChanged(){await this.sendUpdate(`aikit://file-tree`)}async notifyCuratedIndexChanged(){await this.sendUpdate(`aikit://curated`)}async notifyCuratedEntryChanged(e){await this.sendUpdate(`aikit://curated/${e}`)}async notifyResourceListChanged(){try{await this.mcpServer.server.sendResourceListChanged()}catch(e){Mg.debug(`sendResourceListChanged failed`,{error:String(e)})}}async notifyAfterReindex(){await Promise.allSettled([this.notifyStatusChanged(),this.notifyFileTreeChanged()])}async notifyAfterCuratedWrite(e){let t=[this.notifyStatusChanged(),this.notifyCuratedIndexChanged()];e&&t.push(this.notifyCuratedEntryChanged(e)),await Promise.allSettled(t)}async sendUpdate(e){try{await this.mcpServer.server.sendResourceUpdated({uri:e})}catch(t){Mg.debug(`sendResourceUpdated failed`,{uri:e,error:String(t)})}}};const Q=F(`server`);function Pg(e){let t=e?.trim().toLowerCase();return t===`1`||t===`true`||t===`yes`||t===`on`}async function Fg(n){Q.info(`Initializing AI Kit components`);let r=n.store.backend,i=n.store.path,a=Pg(process.env.AIKIT_SPLIT_STATE),o=N(i,`aikit.db`),s={splitEnabled:a,contentDbPath:o,controlDbPath:a?N(i,`aikit-control.db`):o},c=null;if(r===`sqlite-vec`){let e=s.contentDbPath;A(i)||j(i,{recursive:!0}),c=await _r(e),Q.debug(`SQLite adapter ready`,{type:c.type,vectorCapable:c.vectorCapable,dbPath:e}),c.vectorCapable||Q.warn(`┌──────────────────────────────────────────────────────────────────┐
|
|
3016
3016
|
│ ⚠ SQLite vector extension unavailable — DEGRADED MODE │
|
|
3017
3017
|
│ Vector search is disabled. Hybrid search returns FTS only. │
|
|
3018
3018
|
│ To enable: install/rebuild better-sqlite3 (native module). │
|
|
3019
|
-
└──────────────────────────────────────────────────────────────────┘`);let t=N(i,`lance`);A(t)&&Q.info(`Old LanceDB data found at ${t} — ignored. Safe to delete after verifying sqlite-vec works.`)}let l;if(c)if(s.splitEnabled&&s.controlDbPath!==s.contentDbPath){let{migrateToSplitState:e}=await import(`../../store/dist/index.js`);await e(s),l=await _r(s.controlDbPath),br(l,gr),Q.info(`State store adapter ready`,{type:l.type,dbPath:s.controlDbPath,splitEnabled:!0})}else l=c;else{let e=N(i,`aikit-state.db`);A(i)||j(i,{recursive:!0}),l=await _r(e),br(l,gr),Q.info(`State store adapter ready`,{type:l.type,dbPath:e})}let[u,d,f,p]=await Promise.all([(async()=>{if(n.embedding.childProcess!==!1){let e=new Mr({model:n.embedding.model,dimensions:n.embedding.dimensions,interOpNumThreads:n.embedding.interOpNumThreads,intraOpNumThreads:n.embedding.intraOpNumThreads,idleTimeoutMs:n.embedding.idleTimeoutMs});return await e.initialize(),Q.info(`Embedder loaded (child process)`,{modelId:e.modelId,dimensions:e.dimensions}),e}let{OnnxEmbedder:e}=await import(`../../embeddings/dist/index.js`),t=new e({model:n.embedding.model,dimensions:n.embedding.dimensions,interOpNumThreads:n.embedding.interOpNumThreads,intraOpNumThreads:n.embedding.intraOpNumThreads});return await t.initialize(),Q.info(`Embedder loaded (in-process)`,{modelId:t.modelId,dimensions:t.dimensions}),t})(),(async()=>{let e=await yr({backend:r,path:i,adapter:c??void 0,embeddingDim:n.embedding.dimensions,partition:r===`sqlite-vec`?s:void 0});return await e.initialize(),Q.
|
|
3020
|
-
`)}const Lg=F(`background-task`);var Rg=class{queue=[];running=null;get isRunning(){return this.running!==null}get currentTask(){return this.running}get pendingCount(){return this.queue.length}schedule(e){return new Promise((t,n)=>{this.queue.push({...e,resolve:t,reject:n}),this.running||this.processQueue()})}async processQueue(){for(;this.queue.length>0;){let e=this.queue.shift();if(!e)break;this.running=e.name,Lg.info(`Background task started`,{task:e.name,pending:this.queue.length});let t=Date.now();try{await e.fn();let n=Date.now()-t;Lg.info(`Background task completed`,{task:e.name,durationMs:n}),e.resolve()}catch(n){let r=Date.now()-t;Lg.error(`Background task failed`,{task:e.name,durationMs:r,err:n}),e.reject(n instanceof Error?n:Error(String(n)))}}this.running=null}};const zg=F(`idle-timer`);var Bg=class{timer=null;cleanupFns=[];idleMs;disposed=!1;sessionActive=!1;_busy=!1;constructor(e){this.idleMs=e?.idleMs??3e5}setBusy(e){this._busy=e,e?this.cancel():this.touch()}onIdle(e){this.cleanupFns.push(e)}markSessionActive(){this.sessionActive=!0}touch(){this.disposed||this._busy||(this.cancel(),this.timer=setTimeout(()=>{this.runCleanup()},this.idleMs),this.timer.unref&&this.timer.unref())}cancel(){this.timer&&=(clearTimeout(this.timer),null)}dispose(){this.cancel(),this.cleanupFns.length=0,this.disposed=!0}async runCleanup(){if(!this.sessionActive){zg.info(`Idle timeout reached with no active session — skipping cleanup (waiting for first tool call)`);return}if(this._busy){zg.info(`Skipping idle cleanup — background work in progress`);return}zg.info(`Idle for ${this.idleMs/1e3}s — running cleanup`);let e=await Promise.allSettled(this.cleanupFns.map(e=>e()));for(let t of e)t.status===`rejected`&&zg.warn(`Idle cleanup callback failed`,{error:String(t.reason)})}};const Vg=F(`memory-monitor`);var Hg=class{timer=null;warningBytes;criticalBytes;intervalMs;pressureFns=[];memoryPressureFns=[];lastLevel=`normal`;constructor(e){this.warningBytes=e?.warningBytes??4294967296,this.criticalBytes=e?.criticalBytes??8589934592,this.intervalMs=e?.intervalMs??6e4}onPressure(e){this.pressureFns.push(e)}registerMemoryPressureCallback(e){this.memoryPressureFns.push(e)}start(){this.timer||(this.timer=setInterval(()=>this.check(),this.intervalMs),this.timer.unref&&this.timer.unref(),Vg.
|
|
3019
|
+
└──────────────────────────────────────────────────────────────────┘`);let t=N(i,`lance`);A(t)&&Q.info(`Old LanceDB data found at ${t} — ignored. Safe to delete after verifying sqlite-vec works.`)}let l;if(c)if(s.splitEnabled&&s.controlDbPath!==s.contentDbPath){let{migrateToSplitState:e}=await import(`../../store/dist/index.js`);await e(s),l=await _r(s.controlDbPath),br(l,gr),Q.info(`State store adapter ready`,{type:l.type,dbPath:s.controlDbPath,splitEnabled:!0})}else l=c;else{let e=N(i,`aikit-state.db`);A(i)||j(i,{recursive:!0}),l=await _r(e),br(l,gr),Q.info(`State store adapter ready`,{type:l.type,dbPath:e})}let[u,d,f,p]=await Promise.all([(async()=>{if(n.embedding.childProcess!==!1){let e=new Mr({model:n.embedding.model,dimensions:n.embedding.dimensions,interOpNumThreads:n.embedding.interOpNumThreads,intraOpNumThreads:n.embedding.intraOpNumThreads,idleTimeoutMs:n.embedding.idleTimeoutMs});return await e.initialize(),Q.info(`Embedder loaded (child process)`,{modelId:e.modelId,dimensions:e.dimensions}),e}let{OnnxEmbedder:e}=await import(`../../embeddings/dist/index.js`),t=new e({model:n.embedding.model,dimensions:n.embedding.dimensions,interOpNumThreads:n.embedding.interOpNumThreads,intraOpNumThreads:n.embedding.intraOpNumThreads});return await t.initialize(),Q.info(`Embedder loaded (in-process)`,{modelId:t.modelId,dimensions:t.dimensions}),t})(),(async()=>{let e=await yr({backend:r,path:i,adapter:c??void 0,embeddingDim:n.embedding.dimensions,partition:r===`sqlite-vec`?s:void 0});return await e.initialize(),Q.debug(`Store initialized`,{backend:r}),e})(),(async()=>{let e=c?new hr({adapter:c}):new hr({path:i});return await e.initialize(),Q.debug(`Graph store initialized`,{shared:!!c}),e})(),(async()=>{let e=await ar();if(e){let e=rr.get();Q.debug(`WASM tree-sitter enabled`,{grammars:e.grammarCount,dir:e.wasmDir})}else{let e=rr.get();Q.warn(`WASM tree-sitter not available; analyzers will use regex fallback`,{reason:e.reason,os:e.os,arch:e.arch,healAttempted:e.healAttempted,healSuccess:e.healSuccess,healError:e.healError,pathsChecked:e.pathsChecked.map(e=>`${e.path} (${e.exists?`found`:`missing`})`)})}return e})()]),m=new Pr(u,d),h=vr(l),g=new Nr(n.store.path);g.load(),m.setHashCache(g);let _=n.curated.path,v=new e(_);await v.initialize();let y=new t(_,d,u,v);m.setGraphStore(f);let b=Pc(n.er),x=b?new lr(n.curated.path):void 0;x&&Q.info(`Policy store initialized`,{ruleCount:x.getRules().length});let S=b?new cr:void 0,C=P(n.sources[0]?.path??process.cwd(),Se.aiContext),w=A(C),T=n.onboardDir?A(n.onboardDir):!1,E=w||T,D,O=w?C:n.onboardDir;if(E&&O)try{D=pe(O).mtime.toISOString()}catch{}return Q.debug(`Onboard state detected`,{onboardComplete:E,onboardTimestamp:D,aiKbExists:w,onboardDirExists:T}),{embedder:u,store:d,stateStore:h,closeStateStore:l===c?void 0:async()=>l.close(),indexer:m,curated:y,graphStore:f,fileCache:new Ie,bridge:b,policyStore:x,evolutionCollector:S,onboardComplete:E,onboardTimestamp:D}}function Ig(e,t,n){if(e.serverInstructions)return e.serverInstructions;let r=new Set;for(let e of t){let t=n[e];if(t?.category)for(let e of t.category)r.add(e)}let i=[`This server provides ${t.size} tools across ${r.size} categories: ${[...r].sort().join(`, `)}.`,`TOOL ROUTING:`,`- Understand a file -> file_summary (structure) or compact (extract section)`,`- Find code/symbols -> search (hybrid) or symbol (definition + refs)`,`- Validate changes -> check (typecheck+lint) or test_run (tests)`,`- Read file for editing -> read_file (only for exact lines before edits)`,`FORBIDDEN: DO NOT USE native equivalents when AI Kit provides same:`,`- grep/find -> search or find tool`,`- cat/read_file (for understanding) -> file_summary or compact`,`- terminal tsc/lint -> check tool`,`- terminal test -> test_run tool`];return e.readOnly&&i.push(`Server is in read-only mode. Mutating operations are disabled.`),e.features?.length&&i.push(`Active feature groups: ${e.features.join(`, `)}.`),i.join(`
|
|
3020
|
+
`)}const Lg=F(`background-task`);var Rg=class{queue=[];running=null;get isRunning(){return this.running!==null}get currentTask(){return this.running}get pendingCount(){return this.queue.length}schedule(e){return new Promise((t,n)=>{this.queue.push({...e,resolve:t,reject:n}),this.running||this.processQueue()})}async processQueue(){for(;this.queue.length>0;){let e=this.queue.shift();if(!e)break;this.running=e.name,Lg.info(`Background task started`,{task:e.name,pending:this.queue.length});let t=Date.now();try{await e.fn();let n=Date.now()-t;Lg.info(`Background task completed`,{task:e.name,durationMs:n}),e.resolve()}catch(n){let r=Date.now()-t;Lg.error(`Background task failed`,{task:e.name,durationMs:r,err:n}),e.reject(n instanceof Error?n:Error(String(n)))}}this.running=null}};const zg=F(`idle-timer`);var Bg=class{timer=null;cleanupFns=[];idleMs;disposed=!1;sessionActive=!1;_busy=!1;constructor(e){this.idleMs=e?.idleMs??3e5}setBusy(e){this._busy=e,e?this.cancel():this.touch()}onIdle(e){this.cleanupFns.push(e)}markSessionActive(){this.sessionActive=!0}touch(){this.disposed||this._busy||(this.cancel(),this.timer=setTimeout(()=>{this.runCleanup()},this.idleMs),this.timer.unref&&this.timer.unref())}cancel(){this.timer&&=(clearTimeout(this.timer),null)}dispose(){this.cancel(),this.cleanupFns.length=0,this.disposed=!0}async runCleanup(){if(!this.sessionActive){zg.info(`Idle timeout reached with no active session — skipping cleanup (waiting for first tool call)`);return}if(this._busy){zg.info(`Skipping idle cleanup — background work in progress`);return}zg.info(`Idle for ${this.idleMs/1e3}s — running cleanup`);let e=await Promise.allSettled(this.cleanupFns.map(e=>e()));for(let t of e)t.status===`rejected`&&zg.warn(`Idle cleanup callback failed`,{error:String(t.reason)})}};const Vg=F(`memory-monitor`);var Hg=class{timer=null;warningBytes;criticalBytes;intervalMs;pressureFns=[];memoryPressureFns=[];lastLevel=`normal`;constructor(e){this.warningBytes=e?.warningBytes??4294967296,this.criticalBytes=e?.criticalBytes??8589934592,this.intervalMs=e?.intervalMs??6e4}onPressure(e){this.pressureFns.push(e)}registerMemoryPressureCallback(e){this.memoryPressureFns.push(e)}start(){this.timer||(this.timer=setInterval(()=>this.check(),this.intervalMs),this.timer.unref&&this.timer.unref(),Vg.debug(`Memory monitor started`,{warningMB:Math.round(this.warningBytes/1024/1024),criticalMB:Math.round(this.criticalBytes/1024/1024),intervalSec:Math.round(this.intervalMs/1e3)}))}stop(){this.timer&&=(clearInterval(this.timer),null)}getRssBytes(){return process.memoryUsage.rss()}check(){let e=this.getRssBytes(),t=`normal`;if(e>=this.criticalBytes?t=`critical`:e>=this.warningBytes&&(t=`warning`),t!==this.lastLevel||t===`critical`){let n=Math.round(e/1024/1024);t===`critical`?Vg.warn(`Memory CRITICAL: ${n}MB RSS — consider restarting the server`):t===`warning`?Vg.warn(`Memory WARNING: ${n}MB RSS`):this.lastLevel!==`normal`&&Vg.info(`Memory returned to normal: ${n}MB RSS`),this.lastLevel=t}if(t!==`normal`)for(let n of this.pressureFns)try{n(t,e)}catch{}if(t===`critical`)for(let e of this.memoryPressureFns)try{let t=e();t&&typeof t.catch==`function`&&t.catch(()=>{})}catch{}return t===`critical`&&typeof globalThis.gc==`function`&&globalThis.gc(),t}};const Ug=F(`tool-timeout`),Wg=new Set([`onboard`,`reindex`,`produce_knowledge`,`analyze`,`codemod`,`audit`]);var Gg=class extends Error{toolName;timeoutMs;constructor(e,t){super(`Tool "${e}" timed out after ${t}ms`),this.toolName=e,this.timeoutMs=t,this.name=`ToolTimeoutError`}};function Kg(e){return Wg.has(e)?6e5:12e4}function qg(e,t,n){return new Promise((r,i)=>{let a=!1,o=setTimeout(()=>{if(!a){a=!0;let e=new Gg(n,t);Ug.warn(e.message),i(e)}},t);o.unref&&o.unref(),e().then(e=>{a||(a=!0,clearTimeout(o),r(e))},e=>{a||(a=!0,clearTimeout(o),i(e))})})}const $=F(`server`),Jg=new Set([`status`,`list_tools`,`describe_tool`,`config`,`env`]);function Yg(e,t=28){let n=e.replace(/\s+/g,` `).trim();return n.length<=t?n:`${n.slice(0,t-3)}...`}function Xg(e){let t=[`query`,`path`,`task`,`name`,`start`,`symbol`,`file`,`pattern`],n=[];for(let r of t){let t=e[r];typeof t==`string`&&t.length>0&&t.length<200&&n.push(t)}return n.join(` `).slice(0,200)}async function Zg(e,t,n){let r=[];try{t.statePath&&ct(e.stateStore,{stateDir:t.statePath});let i=e.stateStore.stashList().map(e=>e.key);if(i.length>0){let e=n.toLowerCase().split(/\s+/).filter(e=>e.length>2);if(e.length===0)r.push(`stash: ${i.length} entries available`);else{let t=i.filter(t=>e.some(e=>t.toLowerCase().includes(e))).slice(0,3);t.length>0?r.push(`stash: ${t.map(e=>`"${Yg(e)}"`).join(`, `)}${i.length>t.length?` (${i.length} total)`:``}`):r.push(`stash: ${i.length} entries available`)}}}catch{}try{if(n){let t=await Promise.race([e.store.ftsSearch(n,{limit:3}),new Promise(e=>setTimeout(()=>e(null),50))]);if(Array.isArray(t)&&t.length>0){let e=t.filter(e=>e&&typeof e==`object`&&`record`in e&&(e.record.origin===`produced`||e.record.origin===`curated`));if(e.length>0){let t=e.slice(0,2).map(e=>{let t=e.record;return`"${Yg(t.headingPath||t.sourcePath||`knowledge`)}"`});r.push(`knowledge: ${t.join(`, `)}`)}}}}catch{}return r.length===0?null:`\n---\nContext available: ${r.join(` | `)}\nPull with: stash({action:'get', key:'...'}) or search({query:'...', origin:'produced'})\n---`}function Qg(e,t,n){let r=3;for(let[i,a]of Object.entries(e)){let e=a.handler;a.handler=async(...a)=>{let o=await e(...a);if(!o||typeof o!=`object`||r<=0||o.isError||Jg.has(i))return o;try{r--;let e=a[0],i=await Zg(t,n,Xg(e&&typeof e==`object`?e:{}));i&&(o.content=Array.isArray(o.content)?o.content:[],o.content.push({type:`text`,text:i}))}catch{}return o}}}function $g(e){let t=e.toLowerCase();return[`protobuf`,`invalid model`,`invalid onnx`,`unexpected end`,`unexpected token`,`failed to load`,`failed to initialize embedding`,`checksum`,`corrupt`,`malformed`,`could not load`,`onnx`,`database disk image is malformed`,`file is not a database`,`lance`,`cannot find module`,`module not found`].some(e=>t.includes(e))}async function e_(e,t){let n=t.toLowerCase(),r;try{({rm:r}=await import(`node:fs/promises`))}catch{return}if(n.includes(`transformers.node.mjs`)&&n.includes(`cannot find module`)){let e=t.match(/Cannot find module '([^']+transformers\.node\.mjs)'/);if(e){let t=e[1],n=t.replace(/\.mjs$/,`.cjs`);try{let{existsSync:e,writeFileSync:r}=await import(`node:fs`);e(n)&&!e(t)&&(r(t,[`// Auto-generated ESM shim — published package missing this file`,`import { createRequire } from 'node:module';`,`const require = createRequire(import.meta.url);`,`const mod = require('./transformers.node.cjs');`,`export default mod;`,``].join(`
|
|
3021
3021
|
`),`utf8`),$.info(`Auto-heal: created ESM shim for @huggingface/transformers (.mjs wrapper → .cjs)`,{path:t}))}catch(e){$.warn(`Auto-heal: failed to create ESM shim`,{error:e instanceof Error?e.message:String(e),path:t})}}}if(n.includes(`embedding`)||n.includes(`onnx`)||n.includes(`protobuf`)||n.includes(`model`)){let t=e.embedding?.model??Te.model,n=N(zn(),`.cache`,`huggingface`,`transformers-js`,t);try{await r(n,{recursive:!0,force:!0}),$.info(`Auto-heal: cleared embedding model cache`,{path:n})}catch{}}if(n.includes(`lance`)||n.includes(`database`)||n.includes(`store`)){let t=N(e.store.path,`lance`);try{await r(t,{recursive:!0,force:!0}),$.info(`Auto-heal: cleared LanceDB store`,{path:t})}catch{}}if(n.includes(`sqlite`)||n.includes(`database disk image`)||n.includes(`graph`)){let t=N(e.store.path,`graph.db`);try{await r(t,{force:!0}),$.info(`Auto-heal: cleared graph database`,{path:t})}catch{}let n=N(e.store.path,`aikit.db`);try{await r(n,{force:!0}),await r(`${n}-wal`,{force:!0}).catch(()=>{}),await r(`${n}-shm`,{force:!0}).catch(()=>{}),$.info(`Auto-heal: cleared corrupted aikit database`,{path:n})}catch{}}n.includes(`cannot find module`)&&!n.includes(`huggingface`)&&!n.includes(`.cache`)&&$.warn(`Auto-heal: missing module detected during initialization cleanup`,{hint:`Run: npm cache clean --force && npx -y @vpxa/aikit@latest serve`})}function t_(e,t){let n=hs(e,Bo,Yo,Io(e)),r=Ig(e,n,Yo),i=new Vn({name:e.serverName??`aikit`,version:ie()},{capabilities:{logging:{},completions:{},prompts:{}},instructions:r}),a=`initializing`,o=``,s=!1,c=null,l=null,u=null;function d(e){if(!e||typeof e!=`object`)return[];let t=e,n=[];for(let e of[`path`,`file`,`source_path`,`sourcePath`,`filePath`]){let r=t[e];typeof r==`string`&&r&&n.push(r)}for(let e of[`changed_files`,`paths`,`files`]){let r=t[e];if(Array.isArray(r))for(let e of r){if(typeof e==`string`){n.push(e);continue}e&&typeof e==`object`&&typeof e.path==`string`&&n.push(e.path)}}if(Array.isArray(t.sources))for(let e of t.sources)e&&typeof e==`object`&&typeof e.path==`string`&&n.push(e.path);return n}let f=()=>a===`failed`?[`❌ AI Kit initialization failed — this tool is unavailable.`,``,o?`Error: ${o}`:``,``,`**${zo.size} tools are still available** and fully functional:`,`check, eval, test_run, git_context, health, measure, web_fetch, web_search,`,`flow, regex_test, encode,`,`stash, checkpoint, lane, process, time, env, and more.`,``,`To fix embedding errors, try deleting the cached model:`,` rm -rf ~/.cache/huggingface/transformers-js/mixedbread-ai/`,`Then restart the server to re-download a fresh copy.`,``,`Try restarting the MCP server to retry initialization.`].filter(Boolean).join(`
|
|
3022
3022
|
`):[`AI Kit is still initializing (loading embeddings model & store).`,``,`**${zo.size} tools are already available** while initialization completes — including:`,`check, eval, test_run, git_context, health, measure, web_fetch, web_search,`,`flow, regex_test, encode,`,`stash, checkpoint, lane, process, time, env, and more.`,``,`This tool requires the AI Kit index. Please retry in a few seconds,`,`or use one of the available tools above in the meantime.`].join(`
|
|
3023
3023
|
`);Lr(i);let p=new co;p.use(Ho(),{order:1,name:`structured-content-guard`}),es(i,p,e.toolPrefix??``);let m=i.sendToolListChanged.bind(i);i.sendToolListChanged=()=>{};let h=[];for(let e of Bo){if(!n.has(e))continue;let t=U(e),r=i.registerTool(e,{title:t.title,description:`${t.title} — initializing, available shortly`,inputSchema:{},annotations:t.annotations},async()=>({content:[{type:`text`,text:f()}]}));zo.has(e)?r.remove():h.push(r)}jg(i,e,n),i.sendToolListChanged=m;let g=i.registerResource(`aikit-status`,`aikit://status`,{description:`AI Kit status (initializing...)`,mimeType:`text/plain`},async()=>({contents:[{uri:`aikit://status`,text:`AI Kit is initializing...`,mimeType:`text/plain`}]})),_=i.registerPrompt(`_init`,{description:`Initializing AI Kit…`,argsSchema:{_dummy:Kn(R.string(),()=>[])}},async()=>({messages:[]})),v,y,b=new Promise((e,t)=>{v=e,y=t}),x,S=new Promise(e=>{x=e}),C=()=>x?.(),w=(async()=>{await S;try{let{createRequire:e}=await import(`node:module`),{readFileSync:t,existsSync:n}=await import(`node:fs`),{fileURLToPath:r}=await import(`node:url`),{resolve:i,dirname:a}=await import(`node:path`),o=e(import.meta.url),s=a(r(import.meta.url)),c=i(s,`..`,`package.json`),l=i(s,`..`,`..`),u=JSON.parse(t(c,`utf8`)),d=Object.keys(u.dependencies??{}),f=[`@mixmark-io/domino`],p=[...d,...f.filter(e=>!d.includes(e))],m=p.filter(e=>!e.startsWith(`@aikit/`)),h=p.filter(e=>e.startsWith(`@aikit/`)),g=[];for(let e of m)try{o.resolve(e)}catch{try{o.resolve(`${e}/package.json`)}catch{g.push(e)}}g.length>0&&$.warn(`Dependencies not resolvable — server may operate in degraded mode`,{missing:g,hint:`Run: npm cache clean --force && npx -y @vpxa/aikit@latest serve`});let _=[];if(h.length>0){for(let e of h)n(i(l,e.slice(7),`dist`))||_.push(e);_.length>0&&$.warn(`Workspace sibling packages missing dist — server may have degraded features`,{missing:_,hint:`Reinstall: npm cache clean --force && npx -y @vpxa/aikit@latest serve`})}}catch{}let n;try{n=await Fg(e)}catch(t){let r=t instanceof Error?t.message:String(t);if($g(r)){$.warn(`AI Kit initialization failed with recoverable error — attempting auto-heal retry`,{error:r}),await e_(e,r);try{n=await Fg(e),$.info(`AI Kit auto-heal successful — initialization recovered after retry`)}catch(e){a=`failed`,o=e instanceof Error?e.message:String(e),$.error(`AI Kit initialization failed after auto-heal attempt — server continuing with zero-dep tools only`,{error:o,originalError:r}),y?.(e instanceof Error?e:Error(o));return}}else{a=`failed`,o=r,$.error(`AI Kit initialization failed — server continuing with zero-dep tools only`,{error:o}),y?.(t instanceof Error?t:Error(o));return}}let r=i.sendToolListChanged.bind(i);i.sendToolListChanged=()=>{};let f=i.sendPromptListChanged.bind(i);i.sendPromptListChanged=()=>{};let p=i.sendResourceListChanged.bind(i);i.sendResourceListChanged=()=>{};for(let e of h)e.remove();g.remove(),_.remove();let m=i._registeredTools??{};for(let e of zo)m[e]?.remove();let b=new Ng(i),x=Vl(i);Ag(i,n,e,Fr(i),b,x,t,t===`smart`?(()=>{let e=u;return e?.getState?e.getState():null}):null,t===`smart`?()=>{let e=u;return e?{prioritize:e.prioritize.bind(e)}:null}:null),Jr(i,{curated:n.curated,store:n.store,graphStore:n.graphStore,stateStore:n.stateStore},t),i.sendToolListChanged=r,i.sendPromptListChanged=f,i.sendResourceListChanged=p,Promise.resolve(i.sendToolListChanged()).catch(()=>{}),Promise.resolve(i.sendPromptListChanged()).catch(()=>{}),Promise.resolve(i.sendResourceListChanged()).catch(()=>{});let C=i._registeredTools??{};for(let[e,t]of Object.entries(C)){if(Lo.has(e))continue;let r=t.handler;t.handler=async(...i)=>{if(!n.indexer.isIndexing)return r(...i);let a=s?`re-indexing`:`running initial index`,o=new Promise(n=>setTimeout(()=>n({content:[{type:`text`,text:`⏳ AI Kit is ${a}. The tool "${e}" timed out waiting for index data (${Ro/1e3}s).\n\nThe existing index may be temporarily locked. Please retry shortly — indexing will complete automatically.`}],...t.config?.outputSchema?{structuredContent:Jo(t.config.outputSchema)}:{}}),Ro));return Promise.race([r(...i),o])}}for(let[e,t]of Object.entries(C)){let n=t.handler,r=Kg(e);t.handler=async(...i)=>{try{return await qg(()=>n(...i),r,e)}catch(n){if(n instanceof Gg)return{content:[{type:`text`,text:`⏳ Tool "${e}" timed out after ${r/1e3}s. This may indicate a long-running operation. Please retry or break the task into smaller steps.`}],...t.config?.outputSchema?{structuredContent:Jo(t.config.outputSchema)}:{}};throw n}}}let w=Object.keys(C).length;w<Bo.length&&$.warn(`ALL_TOOL_NAMES count mismatch`,{expectedToolCount:Bo.length,registeredToolCount:w}),$.info(`MCP server configured`,{toolCount:Bo.length,resourceCount:4});let T=new Hg;T.onPressure((e,t)=>{e===`warning`&&Vr(),e===`critical`&&($.warn(`Memory pressure critical — consider restarting`,{rssMB:Math.round(t/1024/1024)}),Vr())}),T.registerMemoryPressureCallback(()=>n.embedder.shutdown?.()),T.start();let D=new Bg;l=D,D.onIdle(async()=>{if(E.isRunning||n.indexer.isIndexing){$.info(`Idle cleanup deferred — background tasks still running`),D.touch();return}$.info(`Idle cleanup: releasing cached memory (connections stay open)`);try{n.store.releaseMemory?.(),n.graphStore.releaseMemory?.()}catch{}}),D.touch();let O=!1;for(let e of Object.values(C)){let t=e.handler;e.handler=async(...e)=>{if(O||(O=!0,D.markSessionActive()),D.touch(),u){let t=d(e[0]);t.length>0&&u.prioritize(...t)}return t(...e)}}Qg(C,n,{statePath:e.stateDir??``});for(let[,e]of Object.entries(C)){let t=e.config?.outputSchema;if(!t)continue;let n=e.handler;e.handler=async(...e)=>{let r=await n(...e);if(!r||typeof r!=`object`)return r;let i=r;return!(`content`in i)||i.isError||i.structuredContent!=null&&typeof i.structuredContent==`object`?r:(i.structuredContent=Jo(t),i.structuredContent??={},r)}}process.stdin.on(`end`,()=>($.info(`stdin closed — MCP client disconnected. Shutting down.`),process.exit(0))),process.stdin.on(`error`,()=>($.info(`stdin error — MCP client disconnected. Shutting down.`),process.exit(0))),c=n,v?.(n)})(),T=async()=>{let t;try{t=await b}catch{$.warn(`Skipping initial index — AI Kit initialization failed`);return}l?.setBusy(!0);try{let n=e.sources.map(e=>e.path).join(`, `);$.info(`Running initial index`,{sourcePaths:n});let r=await t.indexer.index(e,e=>{e.phase===`crawling`||e.phase===`done`||(e.phase===`chunking`&&e.currentFile&&$.debug(`Indexing file`,{current:e.filesProcessed+1,total:e.filesTotal,file:e.currentFile}),e.phase===`cleanup`&&$.debug(`Index cleanup`,{staleEntries:e.filesTotal-e.filesProcessed}))});s=!0,$.info(`Initial index complete`,{filesProcessed:r.filesProcessed,filesSkipped:r.filesSkipped,chunksCreated:r.chunksCreated,durationMs:r.durationMs});try{await t.store.createFtsIndex()}catch(e){$.warn(`FTS index creation failed`,I(e))}try{let e=await t.curated.reindexAll();$.info(`Curated re-index complete`,{indexed:e.indexed})}catch(e){$.error(`Curated re-index failed`,I(e))}}catch(e){$.error(`Initial index failed; will retry on aikit_reindex`,I(e))}finally{l?.setBusy(!1)}},E=new Rg,D=()=>E.schedule({name:`initial-index`,fn:T}),O=process.ppid,ee=setInterval(()=>{try{process.kill(O,0)}catch{$.info(`Parent process died; shutting down`,{parentPid:O}),clearInterval(ee),u?.stop&&u.stop(),import(`../../tools/dist/index.js`).then(({processStopAll:e})=>e()).catch(()=>{}),b.then(async e=>{await Promise.all([e.embedder.shutdown?.().catch(()=>{})??Promise.resolve(),e.graphStore.close().catch(()=>{}),e.closeStateStore?.().catch(()=>{})??Promise.resolve(),e.store.close().catch(()=>{})])}).catch(()=>{}).finally(()=>process.exit(0))}},5e3);return ee.unref(),{server:i,startInit:C,ready:w,runInitialIndex:D,get aikit(){return c},scheduler:E,setSmartScheduler(e){u=e}}}const n_=F(`server`);function r_(e,t){let n=hs(t,[...Bo,...Po],Yo,Io(t)),r=Ig(t,n,Yo),i=new Vn({name:t.serverName??`aikit`,version:ie()},{capabilities:{logging:{},completions:{},prompts:{}},instructions:r});return Lr(i),Ag(i,e,t,Fr(i),new Ng(i),Vl(i),void 0,null,null,n),Jr(i,{curated:e.curated,store:e.store,graphStore:e.graphStore,stateStore:e.stateStore},t.indexMode),i}async function i_(e){let t=await Fg(e),n=r_(t,e);n_.info(`MCP server configured`,{toolCount:Bo.length,resourceCount:2});let r=async()=>{try{let n=e.sources.map(e=>e.path).join(`, `);n_.info(`Running initial index`,{sourcePaths:n});let r=await t.indexer.index(e,e=>{e.phase===`crawling`||e.phase===`done`||(e.phase===`chunking`&&e.currentFile&&n_.debug(`Indexing file`,{current:e.filesProcessed+1,total:e.filesTotal,file:e.currentFile}),e.phase===`cleanup`&&n_.debug(`Index cleanup`,{staleEntries:e.filesTotal-e.filesProcessed}))});n_.info(`Initial index complete`,{filesProcessed:r.filesProcessed,filesSkipped:r.filesSkipped,chunksCreated:r.chunksCreated,durationMs:r.durationMs});try{await t.store.createFtsIndex()}catch(e){n_.warn(`FTS index creation failed`,I(e))}try{let e=await t.curated.reindexAll();n_.info(`Curated re-index complete`,{indexed:e.indexed})}catch(e){n_.error(`Curated re-index failed`,I(e))}}catch(e){n_.error(`Initial index failed; will retry on aikit_reindex`,I(e))}},i=async()=>{n_.info(`Shutting down`),await Promise.all([t.embedder.shutdown?.().catch(()=>{})??Promise.resolve(),t.graphStore.close().catch(()=>{}),t.closeStateStore?.().catch(()=>{})??Promise.resolve(),t.store.close().catch(()=>{})]),process.exit(0)};process.on(`SIGINT`,i),process.on(`SIGTERM`,i);let a=process.ppid,o=setInterval(()=>{try{process.kill(a,0)}catch{n_.info(`Parent process died; shutting down`,{parentPid:a}),clearInterval(o),i()}},5e3);return o.unref(),{server:n,runInitialIndex:r,shutdown:i}}export{Bo as ALL_TOOL_NAMES,t_ as createLazyServer,r_ as createMcpServer,i_ as createServer,Fg as initializeAikit,Ag as registerMcpTools};
|