@vpxa/aikit 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/README.md +8 -8
  2. package/package.json +1 -1
  3. package/packages/aikit-client/dist/types.d.ts +3 -3
  4. package/packages/cli/dist/aikit-init.d.ts +1 -1
  5. package/packages/cli/dist/aikit-init.js +1 -1
  6. package/packages/cli/dist/commands/context-cmds.js +1 -1
  7. package/packages/cli/dist/commands/environment.js +1 -1
  8. package/packages/cli/dist/commands/init/config.d.ts +1 -1
  9. package/packages/cli/dist/commands/init/config.js +2 -2
  10. package/packages/cli/dist/commands/init/constants.d.ts +3 -3
  11. package/packages/cli/dist/commands/init/index.d.ts +4 -4
  12. package/packages/cli/dist/commands/init/index.js +4 -4
  13. package/packages/cli/dist/commands/init/templates.js +12 -12
  14. package/packages/cli/dist/commands/init/user.d.ts +3 -3
  15. package/packages/cli/dist/commands/init/user.js +2 -2
  16. package/packages/cli/dist/commands/search.js +1 -1
  17. package/packages/cli/dist/commands/system.js +4 -4
  18. package/packages/cli/dist/commands/upgrade.js +1 -1
  19. package/packages/cli/dist/commands/workspace.js +1 -1
  20. package/packages/cli/dist/helpers.js +1 -1
  21. package/packages/cli/dist/index.d.ts +1 -1
  22. package/packages/core/dist/constants.d.ts +3 -3
  23. package/packages/core/dist/global-registry.d.ts +7 -1
  24. package/packages/core/dist/global-registry.js +1 -1
  25. package/packages/core/dist/index.d.ts +2 -2
  26. package/packages/core/dist/index.js +1 -1
  27. package/packages/core/dist/types.d.ts +4 -2
  28. package/packages/dashboard/dist/assets/{index-BjA4YODs.js → index-CO2S9BKY.js} +2 -2
  29. package/packages/dashboard/dist/assets/index-CO2S9BKY.js.map +1 -0
  30. package/packages/dashboard/dist/index.html +2 -2
  31. package/packages/enterprise-bridge/dist/er-client.d.ts +1 -1
  32. package/packages/indexer/dist/incremental-indexer.js +1 -1
  33. package/packages/kb-client/dist/__tests__/direct-client.test.d.ts +1 -0
  34. package/packages/kb-client/dist/__tests__/mcp-client.test.d.ts +1 -0
  35. package/packages/kb-client/dist/__tests__/parsers.test.d.ts +1 -0
  36. package/packages/kb-client/dist/direct-client.d.ts +38 -0
  37. package/packages/kb-client/dist/direct-client.js +1 -0
  38. package/packages/kb-client/dist/index.d.ts +4 -0
  39. package/packages/kb-client/dist/index.js +1 -0
  40. package/packages/kb-client/dist/mcp-client.d.ts +19 -0
  41. package/packages/kb-client/dist/mcp-client.js +4 -0
  42. package/packages/kb-client/dist/parsers.d.ts +32 -0
  43. package/packages/kb-client/dist/parsers.js +2 -0
  44. package/packages/kb-client/dist/types.d.ts +59 -0
  45. package/packages/kb-client/dist/types.js +1 -0
  46. package/packages/present/dist/index.html +3 -3
  47. package/packages/server/dist/background-task.d.ts +47 -0
  48. package/packages/server/dist/background-task.js +1 -0
  49. package/packages/server/dist/config.js +1 -1
  50. package/packages/server/dist/idle-timer.d.ts +29 -0
  51. package/packages/server/dist/idle-timer.js +1 -0
  52. package/packages/server/dist/index.js +1 -1
  53. package/packages/server/dist/memory-monitor.d.ts +37 -0
  54. package/packages/server/dist/memory-monitor.js +1 -0
  55. package/packages/server/dist/prompts.js +5 -5
  56. package/packages/server/dist/resource-links.d.ts +1 -1
  57. package/packages/server/dist/resource-links.js +1 -1
  58. package/packages/server/dist/resources/curated-resources.d.ts +2 -2
  59. package/packages/server/dist/resources/curated-resources.js +2 -2
  60. package/packages/server/dist/resources/resource-notifier.d.ts +1 -1
  61. package/packages/server/dist/resources/resource-notifier.js +1 -1
  62. package/packages/server/dist/resources/resources.js +1 -1
  63. package/packages/server/dist/server.d.ts +3 -1
  64. package/packages/server/dist/server.js +3 -3
  65. package/packages/server/dist/tool-metadata.d.ts +1 -1
  66. package/packages/server/dist/tool-metadata.js +1 -1
  67. package/packages/server/dist/tool-timeout.d.ts +27 -0
  68. package/packages/server/dist/tool-timeout.js +1 -0
  69. package/packages/server/dist/tools/bridge.tools.d.ts +1 -1
  70. package/packages/server/dist/tools/bridge.tools.js +3 -3
  71. package/packages/server/dist/tools/evolution.tools.js +1 -1
  72. package/packages/server/dist/tools/infra.tools.js +1 -1
  73. package/packages/server/dist/tools/onboard.tool.js +1 -1
  74. package/packages/server/dist/tools/present/browser.js +4 -4
  75. package/packages/server/dist/tools/present/tool.js +1 -1
  76. package/packages/server/dist/tools/reindex.tool.js +1 -1
  77. package/packages/server/dist/tools/search.tool.js +1 -1
  78. package/packages/server/dist/tools/status.tool.d.ts +1 -1
  79. package/packages/server/dist/tools/status.tool.js +2 -2
  80. package/packages/tools/dist/checkpoint.js +1 -1
  81. package/packages/tools/dist/config-extractor.js +1 -1
  82. package/packages/tools/dist/evidence-map.js +2 -2
  83. package/packages/tools/dist/find.d.ts +1 -1
  84. package/packages/tools/dist/forge-ground.d.ts +1 -1
  85. package/packages/tools/dist/guide.js +1 -1
  86. package/packages/tools/dist/lane.js +1 -1
  87. package/packages/tools/dist/onboard.d.ts +2 -2
  88. package/packages/tools/dist/onboard.js +2 -2
  89. package/packages/tools/dist/queue.js +1 -1
  90. package/packages/tools/dist/replay.js +1 -1
  91. package/packages/tools/dist/response-envelope.d.ts +1 -1
  92. package/packages/tools/dist/snippet.js +1 -1
  93. package/packages/tools/dist/stash.js +1 -1
  94. package/packages/tools/dist/synthesis-engine.js +2 -2
  95. package/packages/tools/dist/workset.js +1 -1
  96. package/packages/tui/dist/{App-DU2KEylW.js → App-B2-KJPt4.js} +1 -1
  97. package/packages/tui/dist/App.d.ts +1 -1
  98. package/packages/tui/dist/App.js +1 -1
  99. package/packages/tui/dist/LogPanel-E_1Do4-j.js +3 -0
  100. package/packages/tui/dist/hooks/useKBClient.d.ts +1 -1
  101. package/packages/tui/dist/{index-BXafekwr.d.ts → index-MXJeXmCf.d.ts} +3 -3
  102. package/packages/tui/dist/index.d.ts +1 -1
  103. package/packages/tui/dist/index.js +1 -1
  104. package/packages/tui/dist/panels/LogPanel.js +1 -1
  105. package/scaffold/README.md +192 -192
  106. package/scaffold/definitions/bodies.mjs +16 -16
  107. package/scaffold/definitions/plugins.mjs +1 -1
  108. package/scaffold/definitions/prompts.mjs +6 -6
  109. package/scaffold/definitions/protocols.mjs +12 -12
  110. package/scaffold/definitions/tools.mjs +1 -1
  111. package/scaffold/flows/aikit-advanced/skills/execute/SKILL.md +124 -124
  112. package/scaffold/flows/aikit-advanced/skills/plan/SKILL.md +100 -100
  113. package/scaffold/flows/aikit-advanced/skills/spec/SKILL.md +100 -100
  114. package/scaffold/flows/aikit-advanced/skills/task/SKILL.md +99 -99
  115. package/scaffold/flows/aikit-advanced/skills/verify/SKILL.md +122 -122
  116. package/scaffold/flows/aikit-basic/skills/assess/SKILL.md +82 -82
  117. package/scaffold/flows/aikit-basic/skills/implement/SKILL.md +105 -105
  118. package/scaffold/flows/aikit-basic/skills/verify/SKILL.md +96 -96
  119. package/scaffold/general/agents/Debugger.agent.md +2 -2
  120. package/scaffold/general/agents/Documenter.agent.md +2 -2
  121. package/scaffold/general/agents/Explorer.agent.md +2 -2
  122. package/scaffold/general/agents/Frontend.agent.md +1 -1
  123. package/scaffold/general/agents/Implementer.agent.md +2 -2
  124. package/scaffold/general/agents/Orchestrator.agent.md +1 -1
  125. package/scaffold/general/agents/Planner.agent.md +2 -2
  126. package/scaffold/general/agents/Refactor.agent.md +2 -2
  127. package/scaffold/general/agents/Security.agent.md +2 -2
  128. package/scaffold/general/agents/_shared/architect-reviewer-base.md +1 -1
  129. package/scaffold/general/agents/_shared/code-agent-base.md +6 -6
  130. package/scaffold/general/agents/_shared/code-reviewer-base.md +1 -1
  131. package/scaffold/general/agents/_shared/forge-protocol.md +1 -1
  132. package/scaffold/general/agents/_shared/researcher-base.md +3 -3
  133. package/scaffold/general/prompts/ask.prompt.md +4 -4
  134. package/scaffold/general/prompts/debug.prompt.md +1 -1
  135. package/scaffold/general/prompts/plan.prompt.md +1 -1
  136. package/scaffold/general/skills/aikit/SKILL.md +5 -5
  137. package/scaffold/general/skills/multi-agents-development/SKILL.md +2 -2
  138. package/scaffold/general/skills/present/SKILL.md +1 -1
  139. package/packages/dashboard/dist/assets/index-BjA4YODs.js.map +0 -1
  140. package/packages/tui/dist/LogPanel-Bo8a8QXB.js +0 -3
@@ -11,7 +11,7 @@ type OnboardMode = 'memory' | 'generate';
11
11
  interface OnboardOptions {
12
12
  /** Root path to analyze */
13
13
  path: string;
14
- /** Output mode: 'memory' (KB only) or 'generate' (write to .ai/kb/) */
14
+ /** Output mode: 'memory' (AI Kit only) or 'generate' (write to .ai/kb/) */
15
15
  mode?: OnboardMode;
16
16
  /** Output directory for generate mode (default: '<path>/.ai/kb') */
17
17
  outDir?: string;
@@ -34,7 +34,7 @@ interface OnboardResult {
34
34
  outDir?: string;
35
35
  /** Total duration in ms */
36
36
  totalDurationMs: number;
37
- /** Auto-generated knowledge entries for curated store persistence */
37
+ /** Auto-generated AI Kit entries for curated store persistence */
38
38
  autoRemember?: Array<{
39
39
  title: string;
40
40
  content: string;
@@ -1,4 +1,4 @@
1
- import{extractConfigValues as e}from"./config-extractor.js";import{buildDiagrams as t}from"./diagram-builder.js";import{buildCodeMap as n,buildSynthesisGuide as r}from"./synthesis-engine.js";import{DependencyAnalyzer as i,DiagramGenerator as a,EntryPointAnalyzer as o,PatternAnalyzer as ee,StructureAnalyzer as s,SymbolAnalyzer as c,extractRegexCallGraph as l,extractTsCallGraph as u}from"../../analyzers/dist/index.js";import{basename as d,join as f,resolve as p}from"node:path";import{existsSync as m,mkdirSync as h,readdirSync as g,rmSync as _,writeFileSync as v}from"node:fs";import{AIKIT_PATHS as y}from"../../core/dist/index.js";const b={structure:`Project Structure`,dependencies:`Dependencies`,"entry-points":`Entry Points`,symbols:`Symbols`,patterns:`Patterns`,diagram:`C4 Container Diagram`,"code-map":`Code Map (Module Graph)`,"config-values":`Configuration Values`,"synthesis-guide":`Synthesis Guide`,"api-surface":`API Surface`,"type-inventory":`Type Inventory`};function x(e){let t=e.get(`symbols`);if(!t?.symbols?.length)return`# API Surface
1
+ import{extractConfigValues as e}from"./config-extractor.js";import{buildDiagrams as t}from"./diagram-builder.js";import{buildCodeMap as n,buildSynthesisGuide as r}from"./synthesis-engine.js";import{DependencyAnalyzer as i,DiagramGenerator as a,EntryPointAnalyzer as o,PatternAnalyzer as ee,StructureAnalyzer as s,SymbolAnalyzer as c,extractRegexCallGraph as l,extractTsCallGraph as u}from"../../analyzers/dist/index.js";import{mkdir as d,readdir as f,rm as p,writeFile as m}from"node:fs/promises";import{basename as h,join as g,resolve as _}from"node:path";import{existsSync as v}from"node:fs";import{AIKIT_PATHS as y}from"../../core/dist/index.js";const b={structure:`Project Structure`,dependencies:`Dependencies`,"entry-points":`Entry Points`,symbols:`Symbols`,patterns:`Patterns`,diagram:`C4 Container Diagram`,"code-map":`Code Map (Module Graph)`,"config-values":`Configuration Values`,"synthesis-guide":`Synthesis Guide`,"api-surface":`API Surface`,"type-inventory":`Type Inventory`};function x(e){let t=e.get(`symbols`);if(!t?.symbols?.length)return`# API Surface
2
2
 
3
3
  *No symbol data available.*
4
4
  `;let n=t.symbols.filter(e=>e.exported);if(n.length===0)return`# API Surface
@@ -14,5 +14,5 @@ import{extractConfigValues as e}from"./config-extractor.js";import{buildDiagrams
14
14
  *No exported types/interfaces found.*
15
15
  `;let r=new Map;for(let e of n){let t=r.get(e.filePath)??[];t.push(e),r.set(e.filePath,t)}let i=[`# Type Inventory
16
16
  `];for(let[e,t]of[...r.entries()].sort(([e],[t])=>e.localeCompare(t))){i.push(`## ${e}\n`);for(let e of t){let t=e.typeBody??`*body not available*`;e.jsdoc&&i.push(`> ${e.jsdoc}`),i.push(`### ${e.kind} \`${e.name}\``),i.push("```"),i.push(t),i.push("```\n")}}let a=i.join(`
17
- `);return a.length>1e5?`${a.slice(0,1e5)}\n\n*[truncated]*`:a}async function C(C){let w=Date.now(),T=p(C.path),E=d(T),D=C.mode??`generate`,O=C.outDir??f(T,y.aiKb),k=new s,A=new i,j=new c,M=new ee,N=new o,P=new a,F=[{name:`structure`,fn:()=>k.analyze(T,{format:`markdown`,maxDepth:3,sourceOnly:!0})},{name:`dependencies`,fn:()=>A.analyze(T,{format:`markdown`})},{name:`entry-points`,fn:()=>N.analyze(T)},{name:`symbols`,fn:()=>j.analyze(T,{format:`markdown`})},{name:`patterns`,fn:()=>M.analyze(T)},{name:`diagram`,fn:()=>P.analyze(T,{diagramType:`architecture`})}],I=await Promise.allSettled(F.map(async e=>{let t=Date.now(),n=await e.fn();return{name:e.name,result:n,durationMs:Date.now()-t}})),L=[],R=new Map,z=new Map;for(let e of I)if(e.status===`fulfilled`){let{name:t,result:n,durationMs:r}=e.value,i=n;L.push({name:t,status:`success`,output:i.output,durationMs:r}),R.set(t,i.output),z.set(t,i.data)}else{let t=e.reason,n=F[I.indexOf(e)].name;L.push({name:n,status:`failed`,output:``,durationMs:0,error:t.message})}let B=Date.now(),V=null;try{let e=await u(T);if((!e||e.edges.length===0)&&(e=await l(T)),e&&e.edges.length>0){V=new Map;for(let t of e.edges){let e=V.get(t.from);e||(e=new Map,V.set(t.from,e));let n=e.get(t.to);if(n)for(let e of t.symbols)n.includes(e)||n.push(e);else e.set(t.to,[...t.symbols])}}}catch{}let H=Date.now()-B,U=Date.now(),W=n(z,E,V),G=Date.now()-U+H;if(L.push({name:`code-map`,status:`success`,output:W,durationMs:G}),R.set(`code-map`,W),V&&V.size>0){let e=t(V,z,E),n=L.find(e=>e.name===`diagram`);n&&(n.output=e,R.set(`diagram`,e))}let K=Date.now(),q=await e(T,E),J=Date.now()-K;L.push({name:`config-values`,status:`success`,output:q,durationMs:J}),R.set(`config-values`,q);let Y=r(L,D,E,z);L.push({name:`synthesis-guide`,status:`success`,output:Y,durationMs:0}),R.set(`synthesis-guide`,Y);let X=x(z);L.push({name:`api-surface`,status:`success`,output:X,durationMs:0}),R.set(`api-surface`,X);let Z=S(z);if(L.push({name:`type-inventory`,status:`success`,output:Z,durationMs:0}),R.set(`type-inventory`,Z),D===`generate`){if(m(O))for(let e of g(O))(e.endsWith(`.md`)||e.endsWith(`.json`))&&_(f(O,e),{force:!0});h(O,{recursive:!0});let e=new Date().toISOString();for(let[t,n]of R){let r=f(O,`${t}.md`),i=n.replaceAll(T,E);v(r,`<!-- Generated: ${e} -->\n<!-- Project: ${E} -->\n<!-- Source: ${T} -->\n\n`+i,`utf-8`)}let t=[`<!-- Generated: ${e} -->`,`<!-- Project: ${E} -->`,`<!-- Source: ${T} -->`,``,`# ${E} — Codebase Knowledge`,``,`## Contents`,``];for(let e of L){let n=`${e.name}.md`,r=b[e.name]??e.name,i=e.status===`success`?`✓`:`✗`,a=e.durationMs>0?` (${e.durationMs}ms)`:``;t.push(`- ${i} [${r}](./${n})${a}`)}t.push(``),v(f(O,`README.md`),t.join(`
17
+ `);return a.length>1e5?`${a.slice(0,1e5)}\n\n*[truncated]*`:a}async function C(C){let w=Date.now(),T=_(C.path),E=h(T),D=C.mode??`generate`,O=C.outDir??g(T,y.aiKb),k=new s,A=new i,j=new c,M=new ee,N=new o,P=new a,F=[{name:`structure`,fn:()=>k.analyze(T,{format:`markdown`,maxDepth:3,sourceOnly:!0})},{name:`dependencies`,fn:()=>A.analyze(T,{format:`markdown`})},{name:`entry-points`,fn:()=>N.analyze(T)},{name:`symbols`,fn:()=>j.analyze(T,{format:`markdown`})},{name:`patterns`,fn:()=>M.analyze(T)},{name:`diagram`,fn:()=>P.analyze(T,{diagramType:`architecture`})}],I=await Promise.allSettled(F.map(async e=>{let t=Date.now(),n=await e.fn();return{name:e.name,result:n,durationMs:Date.now()-t}})),L=[],R=new Map,z=new Map;for(let e of I)if(e.status===`fulfilled`){let{name:t,result:n,durationMs:r}=e.value,i=n;L.push({name:t,status:`success`,output:i.output,durationMs:r}),R.set(t,i.output),z.set(t,i.data)}else{let t=e.reason,n=F[I.indexOf(e)].name;L.push({name:n,status:`failed`,output:``,durationMs:0,error:t.message})}let B=Date.now(),V=null;try{let e=await u(T);if((!e||e.edges.length===0)&&(e=await l(T)),e&&e.edges.length>0){V=new Map;for(let t of e.edges){let e=V.get(t.from);e||(e=new Map,V.set(t.from,e));let n=e.get(t.to);if(n)for(let e of t.symbols)n.includes(e)||n.push(e);else e.set(t.to,[...t.symbols])}}}catch{}let H=Date.now()-B,U=Date.now(),W=n(z,E,V),G=Date.now()-U+H;if(L.push({name:`code-map`,status:`success`,output:W,durationMs:G}),R.set(`code-map`,W),V&&V.size>0){let e=t(V,z,E),n=L.find(e=>e.name===`diagram`);n&&(n.output=e,R.set(`diagram`,e))}let K=Date.now(),q=await e(T,E),J=Date.now()-K;L.push({name:`config-values`,status:`success`,output:q,durationMs:J}),R.set(`config-values`,q);let Y=r(L,D,E,z);L.push({name:`synthesis-guide`,status:`success`,output:Y,durationMs:0}),R.set(`synthesis-guide`,Y);let X=x(z);L.push({name:`api-surface`,status:`success`,output:X,durationMs:0}),R.set(`api-surface`,X);let Z=S(z);if(L.push({name:`type-inventory`,status:`success`,output:Z,durationMs:0}),R.set(`type-inventory`,Z),D===`generate`){if(v(O))for(let e of await f(O))(e.endsWith(`.md`)||e.endsWith(`.json`))&&await p(g(O,e),{force:!0});await d(O,{recursive:!0});let e=new Date().toISOString();for(let[t,n]of R){let r=g(O,`${t}.md`),i=n.replaceAll(T,E);await m(r,`<!-- Generated: ${e} -->\n<!-- Project: ${E} -->\n<!-- Source: ${T} -->\n\n`+i,`utf-8`)}let t=[`<!-- Generated: ${e} -->`,`<!-- Project: ${E} -->`,`<!-- Source: ${T} -->`,``,`# ${E} — Codebase Knowledge`,``,`## Contents`,``];for(let e of L){let n=`${e.name}.md`,r=b[e.name]??e.name,i=e.status===`success`?`✓`:`✗`,a=e.durationMs>0?` (${e.durationMs}ms)`:``;t.push(`- ${i} [${r}](./${n})${a}`)}t.push(``),await m(g(O,`README.md`),t.join(`
18
18
  `),`utf-8`)}let Q=[];Q.push({title:`Onboard: ${E} project overview`,content:Y.slice(0,2e3),category:`conventions`,tags:[`onboard`,`project-overview`,E]});let $=L.find(e=>e.name===`patterns`);return $?.status===`success`&&$.output&&Q.push({title:`Onboard: ${E} detected patterns`,content:$.output.slice(0,1500),category:`patterns`,tags:[`onboard`,`patterns`,E]}),q&&Q.push({title:`Onboard: ${E} config and commands`,content:q.slice(0,1500),category:`conventions`,tags:[`onboard`,`config`,`commands`,E]}),{path:T,mode:D,steps:L,outDir:D===`generate`?O:void 0,totalDurationMs:Date.now()-w,autoRemember:Q}}export{C as onboard};
@@ -1 +1 @@
1
- import{dirname as e,resolve as t}from"node:path";import{existsSync as n,mkdirSync as r,readFileSync as i,writeFileSync as a}from"node:fs";import{AIKIT_PATHS as o}from"../../core/dist/index.js";const s=o.state;function c(e){return t(e??process.cwd(),s,`queue.json`)}function l(e){let t=c(e);if(!n(t))return{};try{return JSON.parse(i(t,`utf-8`))}catch{return{}}}function u(t,i){let o=c(i),s=e(o);n(s)||r(s,{recursive:!0}),a(o,`${JSON.stringify(t,null,2)}\n`,`utf-8`)}function d(){return`q_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,6)}`}function f(e,t){let n=l(t);if(n[e])throw Error(`Queue "${e}" already exists`);let r={name:e,items:[]};return n[e]=r,u(n,t),r}function p(e,t,n,r){let i=l(r);i[e]||(i[e]={name:e,items:[]});let a=new Date().toISOString(),o={id:d(),title:t,status:`pending`,data:n,createdAt:a,updatedAt:a};if(i[e].items.length>=500)throw Error(`Queue "${e}" has reached the maximum of 500 items. Clear completed items with queue({ action: "clear" }) before adding more.`);return i[e].items.push(o),u(i,r),o}function m(e,t){let n=l(t),r=n[e];if(!r)throw Error(`Queue "${e}" does not exist`);let i=r.items.find(e=>e.status===`pending`);return i?(i.status=`in-progress`,i.updatedAt=new Date().toISOString(),u(n,t),i):null}function h(e,t,n){let r=l(n),i=r[e];if(!i)throw Error(`Queue "${e}" does not exist`);let a=i.items.find(e=>e.id===t);if(!a)throw Error(`Item "${t}" not found in queue "${e}"`);return a.status=`done`,a.updatedAt=new Date().toISOString(),u(r,n),a}function g(e,t,n,r){let i=l(r),a=i[e];if(!a)throw Error(`Queue "${e}" does not exist`);let o=a.items.find(e=>e.id===t);if(!o)throw Error(`Item "${t}" not found in queue "${e}"`);return o.status=`failed`,o.error=n,o.updatedAt=new Date().toISOString(),u(i,r),o}function _(e,t){return l(t)[e]??null}function v(e){let t=l(e);return Object.values(t).map(e=>({name:e.name,pending:e.items.filter(e=>e.status===`pending`).length,done:e.items.filter(e=>e.status===`done`).length,failed:e.items.filter(e=>e.status===`failed`).length,total:e.items.length}))}function y(e,t){let n=l(t),r=n[e];if(!r)throw Error(`Queue "${e}" does not exist`);let i=r.items.length;r.items=r.items.filter(e=>e.status===`pending`||e.status===`in-progress`);let a=i-r.items.length;return u(n,t),a}function b(e,t){let n=l(t);return n[e]?(delete n[e],u(n,t),!0):!1}export{y as queueClear,f as queueCreate,b as queueDelete,h as queueDone,g as queueFail,_ as queueGet,v as queueList,m as queueNext,p as queuePush};
1
+ import{dirname as e,resolve as t}from"node:path";import{existsSync as n,mkdirSync as r,readFileSync as i,writeFileSync as a}from"node:fs";import{resolveStateDir as o}from"../../core/dist/index.js";function s(e){return t(o(e??process.cwd()),`queue.json`)}function c(e){let t=s(e);if(!n(t))return{};try{return JSON.parse(i(t,`utf-8`))}catch{return{}}}function l(t,i){let o=s(i),c=e(o);n(c)||r(c,{recursive:!0}),a(o,`${JSON.stringify(t,null,2)}\n`,`utf-8`)}function u(){return`q_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,6)}`}function d(e,t){let n=c(t);if(n[e])throw Error(`Queue "${e}" already exists`);let r={name:e,items:[]};return n[e]=r,l(n,t),r}function f(e,t,n,r){let i=c(r);i[e]||(i[e]={name:e,items:[]});let a=new Date().toISOString(),o={id:u(),title:t,status:`pending`,data:n,createdAt:a,updatedAt:a};if(i[e].items.length>=500)throw Error(`Queue "${e}" has reached the maximum of 500 items. Clear completed items with queue({ action: "clear" }) before adding more.`);return i[e].items.push(o),l(i,r),o}function p(e,t){let n=c(t),r=n[e];if(!r)throw Error(`Queue "${e}" does not exist`);let i=r.items.find(e=>e.status===`pending`);return i?(i.status=`in-progress`,i.updatedAt=new Date().toISOString(),l(n,t),i):null}function m(e,t,n){let r=c(n),i=r[e];if(!i)throw Error(`Queue "${e}" does not exist`);let a=i.items.find(e=>e.id===t);if(!a)throw Error(`Item "${t}" not found in queue "${e}"`);return a.status=`done`,a.updatedAt=new Date().toISOString(),l(r,n),a}function h(e,t,n,r){let i=c(r),a=i[e];if(!a)throw Error(`Queue "${e}" does not exist`);let o=a.items.find(e=>e.id===t);if(!o)throw Error(`Item "${t}" not found in queue "${e}"`);return o.status=`failed`,o.error=n,o.updatedAt=new Date().toISOString(),l(i,r),o}function g(e,t){return c(t)[e]??null}function _(e){let t=c(e);return Object.values(t).map(e=>({name:e.name,pending:e.items.filter(e=>e.status===`pending`).length,done:e.items.filter(e=>e.status===`done`).length,failed:e.items.filter(e=>e.status===`failed`).length,total:e.items.length}))}function v(e,t){let n=c(t),r=n[e];if(!r)throw Error(`Queue "${e}" does not exist`);let i=r.items.length;r.items=r.items.filter(e=>e.status===`pending`||e.status===`in-progress`);let a=i-r.items.length;return l(n,t),a}function y(e,t){let n=c(t);return n[e]?(delete n[e],l(n,t),!0):!1}export{v as queueClear,d as queueCreate,y as queueDelete,m as queueDone,h as queueFail,g as queueGet,_ as queueList,p as queueNext,f as queuePush};
@@ -1,4 +1,4 @@
1
- import{readFile as e,writeFile as t}from"node:fs/promises";import{dirname as n,resolve as r}from"node:path";import{appendFileSync as i,mkdirSync as a,readFileSync as o,writeFileSync as s}from"node:fs";import{AIKIT_PATHS as c}from"../../core/dist/index.js";const l=5e3;let u=0;function d(){return r(process.cwd(),c.state,`replay.jsonl`)}function f(e,t){return e.length<=t?e:`${e.slice(0,t-1)}…`}function p(e){let t=d();a(n(t),{recursive:!0});let r={...e,input:f(e.input,200),output:f(e.output,200)};i(t,`${JSON.stringify(r)}\n`,`utf-8`),u++,u>=100&&(u=0,h().catch(()=>{}))}function m(e={}){let t=d(),n;try{n=o(t,`utf-8`)}catch{return[]}let r=n.trim().split(`
1
+ import{readFile as e,writeFile as t}from"node:fs/promises";import{dirname as n,resolve as r}from"node:path";import{appendFileSync as i,mkdirSync as a,readFileSync as o,writeFileSync as s}from"node:fs";import{resolveStateDir as c}from"../../core/dist/index.js";const l=5e3;let u=0;function d(){return r(c(process.cwd()),`replay.jsonl`)}function f(e,t){return e.length<=t?e:`${e.slice(0,t-1)}…`}function p(e){let t=d();a(n(t),{recursive:!0});let r={...e,input:f(e.input,200),output:f(e.output,200)};i(t,`${JSON.stringify(r)}\n`,`utf-8`),u++,u>=100&&(u=0,h().catch(()=>{}))}function m(e={}){let t=d(),n;try{n=o(t,`utf-8`)}catch{return[]}let r=n.trim().split(`
2
2
  `).filter(Boolean),i=[];for(let e of r)try{i.push(JSON.parse(e))}catch{}if(e.tool&&(i=i.filter(t=>t.tool===e.tool)),e.source&&(i=i.filter(t=>t.source===e.source)),e.since){let t=e.since;i=i.filter(e=>e.ts>=t)}let a=e.last??20;return i.slice(-a)}async function h(){let n=d(),r;try{r=await e(n,`utf-8`)}catch{return 0}let i=r.trim().split(`
3
3
  `).filter(Boolean);if(i.length<=l)return 0;let a=i.length-l;return await t(n,`${i.slice(-l).join(`
4
4
  `)}\n`,`utf-8`),a}function g(){let e=d();try{s(e,``,`utf-8`)}catch{}}function _(e,t,n,r){let i=Date.now();return r().then(r=>(p({ts:new Date().toISOString(),source:e,tool:t,input:typeof n==`string`?n:JSON.stringify(n),durationMs:Date.now()-i,status:`ok`,output:typeof r==`string`?r:JSON.stringify(r??``)}),r)).catch(r=>{throw p({ts:new Date().toISOString(),source:e,tool:t,input:typeof n==`string`?n:JSON.stringify(n),durationMs:Date.now()-i,status:`error`,output:r instanceof Error?r.message:String(r)}),r})}export{p as replayAppend,_ as replayCapture,g as replayClear,m as replayList,h as replayTrim};
@@ -1,6 +1,6 @@
1
1
  //#region packages/tools/src/response-envelope.d.ts
2
2
  /**
3
- * Standardized response envelope for KB tools (E-009).
3
+ * Standardized response envelope for AI Kit tools (E-009).
4
4
  * New tools should return KBResponse<T>. Existing tools can adopt gradually.
5
5
  */
6
6
  interface KBNextHint {
@@ -1 +1 @@
1
- import{join as e}from"node:path";import{existsSync as t,mkdirSync as n,readFileSync as r,readdirSync as i,unlinkSync as a,writeFileSync as o}from"node:fs";import{AIKIT_PATHS as s}from"../../core/dist/index.js";const c=()=>e(process.cwd(),s.state,`snippets`);function l(){let e=c();return t(e)||n(e,{recursive:!0}),e}function u(e){let t=e.replace(/[^a-zA-Z0-9_-]/g,`_`);if(!t)throw Error(`Invalid snippet name`);return t}function d(n){switch(n.action){case`save`:{if(!n.name||!n.code)throw Error(`name and code required for save`);let i=e(l(),`${u(n.name)}.json`),a=null;if(t(i))try{a=JSON.parse(r(i,`utf8`))}catch{a=null}let s=new Date().toISOString(),c={name:n.name,language:n.language??`text`,code:n.code,tags:n.tags??[],created:a?.created??s,updated:s};return o(i,JSON.stringify(c,null,2)),c}case`get`:{if(!n.name)throw Error(`name required for get`);let i=e(c(),`${u(n.name)}.json`);if(!t(i))throw Error(`Snippet not found: ${n.name}`);try{return JSON.parse(r(i,`utf8`))}catch{throw Error(`Snippet corrupted: ${n.name}`)}}case`list`:{let t=l();return{snippets:i(t).filter(e=>e.endsWith(`.json`)).flatMap(n=>{try{let i=JSON.parse(r(e(t,n),`utf8`));return[{name:i.name,language:i.language,tags:i.tags,updated:i.updated}]}catch{return[]}})}}case`search`:{if(!n.query)throw Error(`query required for search`);let t=n.query.toLowerCase(),a=l();return{snippets:i(a).filter(e=>e.endsWith(`.json`)).flatMap(t=>{try{return[JSON.parse(r(e(a,t),`utf8`))]}catch{return[]}}).filter(e=>e.name.toLowerCase().includes(t)||e.tags.some(e=>e.toLowerCase().includes(t))||e.language.toLowerCase().includes(t)||e.code.toLowerCase().includes(t)).map(e=>({name:e.name,language:e.language,tags:e.tags,updated:e.updated}))}}case`delete`:{if(!n.name)throw Error(`name required for delete`);let r=e(c(),`${u(n.name)}.json`);return t(r)?(a(r),{deleted:!0}):{deleted:!1}}default:throw Error(`Unknown action: ${n.action}`)}}export{d as snippet};
1
+ import{join as e}from"node:path";import{existsSync as t,mkdirSync as n,readFileSync as r,readdirSync as i,unlinkSync as a,writeFileSync as o}from"node:fs";import{resolveStateDir as s}from"../../core/dist/index.js";const c=()=>e(s(process.cwd()),`snippets`);function l(){let e=c();return t(e)||n(e,{recursive:!0}),e}function u(e){let t=e.replace(/[^a-zA-Z0-9_-]/g,`_`);if(!t)throw Error(`Invalid snippet name`);return t}function d(n){switch(n.action){case`save`:{if(!n.name||!n.code)throw Error(`name and code required for save`);let i=e(l(),`${u(n.name)}.json`),a=null;if(t(i))try{a=JSON.parse(r(i,`utf8`))}catch{a=null}let s=new Date().toISOString(),c={name:n.name,language:n.language??`text`,code:n.code,tags:n.tags??[],created:a?.created??s,updated:s};return o(i,JSON.stringify(c,null,2)),c}case`get`:{if(!n.name)throw Error(`name required for get`);let i=e(c(),`${u(n.name)}.json`);if(!t(i))throw Error(`Snippet not found: ${n.name}`);try{return JSON.parse(r(i,`utf8`))}catch{throw Error(`Snippet corrupted: ${n.name}`)}}case`list`:{let t=l();return{snippets:i(t).filter(e=>e.endsWith(`.json`)).flatMap(n=>{try{let i=JSON.parse(r(e(t,n),`utf8`));return[{name:i.name,language:i.language,tags:i.tags,updated:i.updated}]}catch{return[]}})}}case`search`:{if(!n.query)throw Error(`query required for search`);let t=n.query.toLowerCase(),a=l();return{snippets:i(a).filter(e=>e.endsWith(`.json`)).flatMap(t=>{try{return[JSON.parse(r(e(a,t),`utf8`))]}catch{return[]}}).filter(e=>e.name.toLowerCase().includes(t)||e.tags.some(e=>e.toLowerCase().includes(t))||e.language.toLowerCase().includes(t)||e.code.toLowerCase().includes(t)).map(e=>({name:e.name,language:e.language,tags:e.tags,updated:e.updated}))}}case`delete`:{if(!n.name)throw Error(`name required for delete`);let r=e(c(),`${u(n.name)}.json`);return t(r)?(a(r),{deleted:!0}):{deleted:!1}}default:throw Error(`Unknown action: ${n.action}`)}}export{d as snippet};
@@ -1 +1 @@
1
- import{dirname as e,resolve as t}from"node:path";import{existsSync as n,mkdirSync as r,readFileSync as i,writeFileSync as a}from"node:fs";import{AIKIT_PATHS as o}from"../../core/dist/index.js";const s=o.state;function c(e){return t(e??process.cwd(),s,`stash.json`)}function l(e){let t=c(e);if(!n(t))return{};try{let e=i(t,`utf-8`);return JSON.parse(e)}catch{return{}}}function u(t,i){let o=c(i),s=e(o);n(s)||r(s,{recursive:!0}),a(o,`${JSON.stringify(t,null,2)}\n`,`utf-8`)}function d(e,t,n){let r=l(n),i={key:e,value:t,type:typeof t,storedAt:new Date().toISOString()};return r[e]=i,u(r,n),i}function f(e,t){return l(t)[e]}function p(e){return Object.values(l(e))}function m(e,t){let n=l(t);return e in n?(delete n[e],u(n,t),!0):!1}function h(e){let t=l(e),n=Object.keys(t).length;return u({},e),n}export{h as stashClear,m as stashDelete,f as stashGet,p as stashList,d as stashSet};
1
+ import{dirname as e,resolve as t}from"node:path";import{existsSync as n,mkdirSync as r,readFileSync as i,writeFileSync as a}from"node:fs";import{resolveStateDir as o}from"../../core/dist/index.js";function s(e){return t(o(e??process.cwd()),`stash.json`)}function c(e){let t=s(e);if(!n(t))return{};try{let e=i(t,`utf-8`);return JSON.parse(e)}catch{return{}}}function l(t,i){let o=s(i),c=e(o);n(c)||r(c,{recursive:!0}),a(o,`${JSON.stringify(t,null,2)}\n`,`utf-8`)}function u(e,t,n){let r=c(n),i={key:e,value:t,type:typeof t,storedAt:new Date().toISOString()};return r[e]=i,l(r,n),i}function d(e,t){return c(t)[e]}function f(e){return Object.values(c(e))}function p(e,t){let n=c(t);return e in n?(delete n[e],l(n,t),!0):!1}function m(e){let t=c(e),n=Object.keys(t).length;return l({},e),n}export{m as stashClear,p as stashDelete,d as stashGet,f as stashList,u as stashSet};
@@ -1,5 +1,5 @@
1
- import{getPackageKey as e,isTestPath as t,resolveExtensionlessPath as n}from"./onboard-utils.js";const r={structure:`Project Structure`,dependencies:`Dependencies`,"entry-points":`Entry Points`,symbols:`Symbols`,patterns:`Patterns`,diagram:`C4 Container Diagram`,"code-map":`Code Map (Module Graph)`,"config-values":`Configuration Values`,"synthesis-guide":`Synthesis Guide`};function i(e,t,n,i){let a=[`Analysis baselines for **${n}** have been generated.`];t===`generate`?a.push("Individual results are in the sibling `.md` and `.json` files in this directory.",``):a.push(`Results are stored in the KB vector store.`,``);let o=i.get(`symbols`),s=i.get(`dependencies`),c=i.get(`patterns`),l=i.get(`entry-points`),u=o?.totalCount??0,d=o?.exportedCount??0,f=s?.totalImports??0,p=l?.total??0,m=(c?.patterns??[]).map(e=>e.pattern),h=m.some(e=>e.startsWith(`Spring`)),g=m.includes(`AWS CDK`)||m.includes(`CDK IaC`),_=m.includes(`Maven`),v=m.includes(`Serverless`)||p>3,y=s?.external?Object.keys(s.external):[],b=y.some(e=>[`express`,`fastify`,`next`,`react`,`vitest`,`jest`].includes(e))||f>0,x=y.some(e=>[`turbo`,`lerna`,`nx`].includes(e))||m.includes(`Monorepo`);if(a.push(`### Project Profile`,``),a.push(`- **${u} symbols** (${d} exported), **${f} imports**, **${p} entry ${p===1?`point`:`points`}**`),m.length>0&&a.push(`- **Detected**: ${m.slice(0,8).join(`, `)}`),a.push(``),u===0&&f===0&&p===0)return a.push(`> **Note:** This project appears to be empty or contains no analyzable source code.`,`> Run onboard again after adding source files.`),a.join(`
2
- `);let S=e.filter(e=>e.status===`success`),C=e.filter(e=>e.status===`failed`);a.push(`### Completed Analyses`,``);for(let e of S){let n=r[e.name]??e.name,i=e.output.length>1e3?`${Math.round(e.output.length/1024)}KB`:`${e.output.length}B`;t===`generate`?a.push(`- ✓ [${n}](./${e.name}.md) (${i})`):a.push(`- ✓ ${n} (${i})`)}if(C.length>0){a.push(``,`### Failed Analyses`,``);for(let e of C)a.push(`- ✗ ${e.name}: ${e.error}`)}a.push(``,`### Recommended Reading Order`,``,"1. **Start with** `synthesis-guide.md` (this file) → `entry-points.md` → `patterns.md`","2. **Module graph** via `code-map.md` — cross-package call edges with function names","3. **Architecture** via `diagram.md` (C4 Container) → `dependencies.md`","4. **Browse structure** via `structure.md` for file layout","5. **API surface** via `symbols.md` — file paths + exported symbols (capped at 80KB)","6. **Reference**: `config-values.md` (config reference)",``,`> **Size guidance:** Total output is ~`);let w=S.reduce((e,t)=>e+t.output.length,0)/1024;return a[a.length-1]+=`${Math.round(w)}KB. Focus on code-map.md + entry-points.md + diagram.md (~${Math.round((S.find(e=>e.name===`code-map`)?.output.length??0)/1024+(S.find(e=>e.name===`entry-points`)?.output.length??0)/1024+(S.find(e=>e.name===`diagram`)?.output.length??0)/1024)}KB) for maximum signal-to-token ratio.`,a.push(``,`### Synthesize Knowledge`,``,"Produce the following `aikit_remember` entries:",``),a.push("1. **Architecture Summary** (category: `architecture`)"),x?(a.push(` - Package boundaries, dependency graph between packages`),a.push(` - Shared vs service-specific code`)):v?(a.push(` - Lambda functions, triggers, event flow`),a.push(` - Infrastructure patterns (queues, tables, APIs)`)):h?(a.push(` - Controller → Service → Repository layers`),a.push(` - Spring configuration and profiles`)):(a.push(` - Layer structure, dependency flow`),a.push(` - Key design decisions`)),a.push(``),a.push("2. **Domain Model** (category: `architecture`)"),a.push(` - Key entities/types and their relationships`),a.push(` - Data flow from entry points through processing`),a.push(``),a.push("3. **Conventions** (category: `conventions`)"),a.push(` - Naming patterns, file organization, testing approach`),g&&a.push(` - CDK construct patterns and stack organization`),b&&a.push(` - Build tooling, package manager, module system`),_&&a.push(` - Maven module structure, dependency management`),a.push(``,`### Using KB Tools`,``,`This project has a KB MCP server with tools for search, analysis, memory, and more.`,"`aikit init` has already created `.github/copilot-instructions.md` and `AGENTS.md` with the complete tool reference.","If not, run `npx @vpxa/aikit init` to generate them.",``,`**Workflow pattern — use on every task:**`,``,"```",`aikit_search({ query: "your task keywords" }) # Recall prior decisions`,`aikit_scope_map({ task: "what you are doing" }) # Get a reading plan`,`# ... do the work ...`,`aikit_check({}) # Typecheck + lint`,`aikit_test_run({}) # Run tests`,`aikit_remember({ title: "What I learned", category: "decisions" }) # Persist`,"```"),a.join(`
1
+ import{getPackageKey as e,isTestPath as t,resolveExtensionlessPath as n}from"./onboard-utils.js";const r={structure:`Project Structure`,dependencies:`Dependencies`,"entry-points":`Entry Points`,symbols:`Symbols`,patterns:`Patterns`,diagram:`C4 Container Diagram`,"code-map":`Code Map (Module Graph)`,"config-values":`Configuration Values`,"synthesis-guide":`Synthesis Guide`};function i(e,t,n,i){let a=[`Analysis baselines for **${n}** have been generated.`];t===`generate`?a.push("Individual results are in the sibling `.md` and `.json` files in this directory.",``):a.push(`Results are stored in the AI Kit vector store.`,``);let o=i.get(`symbols`),s=i.get(`dependencies`),c=i.get(`patterns`),l=i.get(`entry-points`),u=o?.totalCount??0,d=o?.exportedCount??0,f=s?.totalImports??0,p=l?.total??0,m=(c?.patterns??[]).map(e=>e.pattern),h=m.some(e=>e.startsWith(`Spring`)),g=m.includes(`AWS CDK`)||m.includes(`CDK IaC`),_=m.includes(`Maven`),v=m.includes(`Serverless`)||p>3,y=s?.external?Object.keys(s.external):[],b=y.some(e=>[`express`,`fastify`,`next`,`react`,`vitest`,`jest`].includes(e))||f>0,x=y.some(e=>[`turbo`,`lerna`,`nx`].includes(e))||m.includes(`Monorepo`);if(a.push(`### Project Profile`,``),a.push(`- **${u} symbols** (${d} exported), **${f} imports**, **${p} entry ${p===1?`point`:`points`}**`),m.length>0&&a.push(`- **Detected**: ${m.slice(0,8).join(`, `)}`),a.push(``),u===0&&f===0&&p===0)return a.push(`> **Note:** This project appears to be empty or contains no analyzable source code.`,`> Run onboard again after adding source files.`),a.join(`
2
+ `);let S=e.filter(e=>e.status===`success`),C=e.filter(e=>e.status===`failed`);a.push(`### Completed Analyses`,``);for(let e of S){let n=r[e.name]??e.name,i=e.output.length>1e3?`${Math.round(e.output.length/1024)}KB`:`${e.output.length}B`;t===`generate`?a.push(`- ✓ [${n}](./${e.name}.md) (${i})`):a.push(`- ✓ ${n} (${i})`)}if(C.length>0){a.push(``,`### Failed Analyses`,``);for(let e of C)a.push(`- ✗ ${e.name}: ${e.error}`)}a.push(``,`### Recommended Reading Order`,``,"1. **Start with** `synthesis-guide.md` (this file) → `entry-points.md` → `patterns.md`","2. **Module graph** via `code-map.md` — cross-package call edges with function names","3. **Architecture** via `diagram.md` (C4 Container) → `dependencies.md`","4. **Browse structure** via `structure.md` for file layout","5. **API surface** via `symbols.md` — file paths + exported symbols (capped at 80KB)","6. **Reference**: `config-values.md` (config reference)",``,`> **Size guidance:** Total output is ~`);let w=S.reduce((e,t)=>e+t.output.length,0)/1024;return a[a.length-1]+=`${Math.round(w)}KB. Focus on code-map.md + entry-points.md + diagram.md (~${Math.round((S.find(e=>e.name===`code-map`)?.output.length??0)/1024+(S.find(e=>e.name===`entry-points`)?.output.length??0)/1024+(S.find(e=>e.name===`diagram`)?.output.length??0)/1024)}KB) for maximum signal-to-token ratio.`,a.push(``,`### Synthesize Knowledge`,``,"Produce the following `aikit_remember` entries:",``),a.push("1. **Architecture Summary** (category: `architecture`)"),x?(a.push(` - Package boundaries, dependency graph between packages`),a.push(` - Shared vs service-specific code`)):v?(a.push(` - Lambda functions, triggers, event flow`),a.push(` - Infrastructure patterns (queues, tables, APIs)`)):h?(a.push(` - Controller → Service → Repository layers`),a.push(` - Spring configuration and profiles`)):(a.push(` - Layer structure, dependency flow`),a.push(` - Key design decisions`)),a.push(``),a.push("2. **Domain Model** (category: `architecture`)"),a.push(` - Key entities/types and their relationships`),a.push(` - Data flow from entry points through processing`),a.push(``),a.push("3. **Conventions** (category: `conventions`)"),a.push(` - Naming patterns, file organization, testing approach`),g&&a.push(` - CDK construct patterns and stack organization`),b&&a.push(` - Build tooling, package manager, module system`),_&&a.push(` - Maven module structure, dependency management`),a.push(``,`### Using AI Kit Tools`,``,`This project has an AI Kit MCP server with tools for search, analysis, memory, and more.`,"`aikit init` has already created `.github/copilot-instructions.md` and `AGENTS.md` with the complete tool reference.","If not, run `npx @vpxa/aikit init` to generate them.",``,`**Workflow pattern — use on every task:**`,``,"```",`aikit_search({ query: "your task keywords" }) # Recall prior decisions`,`aikit_scope_map({ task: "what you are doing" }) # Get a reading plan`,`# ... do the work ...`,`aikit_check({}) # Typecheck + lint`,`aikit_test_run({}) # Run tests`,`aikit_remember({ title: "What I learned", category: "decisions" }) # Persist`,"```"),a.join(`
3
3
  `)}function a(r,i,a){let o=r.get(`dependencies`),s=r.get(`symbols`),c=r.get(`entry-points`),l=[`## Code Map: ${i}\n`];if(!o&&!s)return l.push(`No dependency or symbol data available.`),l.join(`
4
4
  `);let u=o?.reverseGraph??{},d=s?.symbols??[],f=c?.entryPoints??[],p=new Map;for(let e of d){if(!e.exported)continue;let n=e.filePath.replace(/\\/g,`/`);if(t(n))continue;let r=p.get(n);r?r.push({name:e.name,kind:e.kind}):p.set(n,[{name:e.name,kind:e.kind}])}let m=new Map;for(let[e,r]of Object.entries(u)){let i=n(e.replace(/\\/g,`/`),p),a=r.map(e=>e.replace(/\\/g,`/`)).filter(e=>!t(e));if(a.length===0)continue;let o=m.get(i);if(o)for(let e of a)o.add(e);else m.set(i,new Set(a))}let h=new Map;for(let e of f)h.set(e.filePath.replace(/\\/g,`/`),{name:e.name,trigger:e.trigger});let g=new Map,_=new Map;if(a)for(let[n,r]of a){if(t(n))continue;let i=e(n);for(let[a,o]of r){if(t(a)||i===e(a))continue;let r=g.get(n);r||(r=new Map,g.set(n,r)),r.set(a,o);let s=_.get(a),c={file:n,symbols:o};s?s.push(c):_.set(a,[c])}}let v=new Set;for(let e of h.keys())v.add(e);for(let e of g.keys())v.add(e);for(let e of _.keys())v.add(e);if(!a)for(let e of p.keys()){let t=m.get(e);t&&t.size>=3&&v.add(e)}let y=new Map;for(let t of v){let n=e(t),r=y.get(n);r?r.push(t):y.set(n,[t])}let b=[...y.entries()].sort((e,t)=>e[0].localeCompare(t[0])),x=a?`AST call graph`:`import analysis`,S=a?`, ${g.size} cross-package callers`:``;l.push(`**${v.size} key modules** (${x}${S})\n`),l.push(`**Legend:** ⚡ Entry point | 📤 Exports | → Calls (outgoing) | ← Called by (incoming) | ➡ Used by (import)
5
5
  `);for(let[e,n]of b){n.sort(),l.push(`### ${e}/\n`);for(let r of n){let n=p.get(r),i=h.get(r),o=g.get(r),s=_.get(r),c=m.get(r),u=r.startsWith(`${e}/`)?r.slice(e.length+1):r;if(l.push(`**${u}**`),i&&l.push(` ⚡ Entry: \`${i.name}\`${i.trigger?` (${i.trigger})`:``}`),n&&n.length>0){let e=n.slice(0,8).map(e=>`${e.name}`).join(`, `),t=n.length>8?` (+${n.length-8})`:``;l.push(` 📤 ${e}${t}`)}if(o&&o.size>0){let t=[...o.entries()].sort((e,t)=>t[1].length-e[1].length);for(let[n,r]of t.slice(0,4)){let t=n.startsWith(`${e}/`)?n.slice(e.length+1):n;l.push(` → ${t}: ${r.slice(0,5).join(`, `)}${r.length>5?`…`:``}`)}t.length>4&&l.push(` → +${t.length-4} more targets`)}if(s&&s.length>0){for(let t of s.slice(0,4)){let n=t.file.startsWith(`${e}/`)?t.file.slice(e.length+1):t.file;l.push(` ← ${n}: ${t.symbols.slice(0,4).join(`, `)}${t.symbols.length>4?`…`:``}`)}s.length>4&&l.push(` ← +${s.length-4} more callers`)}else if(!a&&c&&c.size>0){let e=[...c].filter(e=>!t(e));e.length<=3?l.push(` ➡ Used by: ${e.join(`, `)}`):l.push(` ➡ Used by: ${e.slice(0,3).join(`, `)} (+${e.length-3} more)`)}l.push(``)}}return l.join(`
@@ -1 +1 @@
1
- import{dirname as e,resolve as t}from"node:path";import{existsSync as n,mkdirSync as r,readFileSync as i,writeFileSync as a}from"node:fs";import{AIKIT_PATHS as o}from"../../core/dist/index.js";const s=o.state;function c(e){return t(e??process.cwd(),s,`worksets.json`)}function l(e){let t=c(e);if(!n(t))return{worksets:{}};try{let e=i(t,`utf-8`);return JSON.parse(e)}catch{return{worksets:{}}}}function u(t,i){let o=c(i),s=e(o);n(s)||r(s,{recursive:!0}),a(o,`${JSON.stringify(t,null,2)}\n`,`utf-8`)}function d(e,t,n){let r=l(n?.cwd),i=new Date().toISOString(),a=r.worksets[e],o={name:e,files:t,created:a?.created??i,updated:i,description:n?.description??a?.description};return r.worksets[e]=o,u(r,n?.cwd),o}function f(e,t){return l(t).worksets[e]??null}function p(e){let t=l(e);return Object.values(t.worksets).sort((e,t)=>new Date(t.updated).getTime()-new Date(e.updated).getTime())}function m(e,t){let n=l(t);return n.worksets[e]?(delete n.worksets[e],u(n,t),!0):!1}function h(e,t,n){let r=l(n).worksets[e]?.files??[];return d(e,[...new Set([...r,...t])],{cwd:n})}function g(e,t,n){let r=l(n).worksets[e];if(!r)return null;let i=new Set(t);return d(e,r.files.filter(e=>!i.has(e)),{cwd:n})}export{h as addToWorkset,m as deleteWorkset,f as getWorkset,p as listWorksets,g as removeFromWorkset,d as saveWorkset};
1
+ import{dirname as e,resolve as t}from"node:path";import{existsSync as n,mkdirSync as r,readFileSync as i,writeFileSync as a}from"node:fs";import{resolveStateDir as o}from"../../core/dist/index.js";function s(e){return t(o(e??process.cwd()),`worksets.json`)}function c(e){let t=s(e);if(!n(t))return{worksets:{}};try{let e=i(t,`utf-8`);return JSON.parse(e)}catch{return{worksets:{}}}}function l(t,i){let o=s(i),c=e(o);n(c)||r(c,{recursive:!0}),a(o,`${JSON.stringify(t,null,2)}\n`,`utf-8`)}function u(e,t,n){let r=c(n?.cwd),i=new Date().toISOString(),a=r.worksets[e],o={name:e,files:t,created:a?.created??i,updated:i,description:n?.description??a?.description};return r.worksets[e]=o,l(r,n?.cwd),o}function d(e,t){return c(t).worksets[e]??null}function f(e){let t=c(e);return Object.values(t.worksets).sort((e,t)=>new Date(t.updated).getTime()-new Date(e.updated).getTime())}function p(e,t){let n=c(t);return n.worksets[e]?(delete n.worksets[e],l(n,t),!0):!1}function m(e,t,n){let r=c(n).worksets[e]?.files??[];return u(e,[...new Set([...r,...t])],{cwd:n})}function h(e,t,n){let r=c(n).worksets[e];if(!r)return null;let i=new Set(t);return u(e,r.files.filter(e=>!i.has(e)),{cwd:n})}export{m as addToWorkset,p as deleteWorkset,d as getWorkset,f as listWorksets,h as removeFromWorkset,u as saveWorkset};
@@ -1,2 +1,2 @@
1
1
  import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
2
- import{r as e}from"./chunk-D6axbAb-.js";import{t}from"./react-D__J1GQe.js";import{a as n,i as r,n as i,t as a}from"./jsx-runtime-y6Gdq5PZ.js";import{t as o}from"./useKBClient-C35iA4uG.js";import{t as s}from"./StatusPanel-BAbUxyqQ.js";import{t as c}from"./SearchPanel-CpJGczAc.js";import{t as l}from"./CuratedPanel-BIamXLNy.js";import{t as u}from"./LogPanel-Bo8a8QXB.js";var d=e(t()),f=a();const p=[`status`,`search`,`curated`,`log`];function m({client:e}){let[t,a]=(0,d.useState)(`status`);return i((e,n)=>{n.tab&&a(p[(p.indexOf(t)+1)%p.length]),e===`1`&&a(`status`),e===`2`&&a(`search`),e===`3`&&a(`curated`),e===`4`&&a(`log`)}),(0,f.jsx)(o,{value:e,children:(0,f.jsxs)(n,{flexDirection:`column`,width:`100%`,children:[(0,f.jsxs)(n,{borderStyle:`single`,paddingX:1,children:[(0,f.jsx)(r,{bold:!0,color:`cyan`,children:`KB Dashboard`}),(0,f.jsx)(r,{children:` │ `}),p.map(e=>(0,f.jsxs)(d.Fragment,{children:[(0,f.jsxs)(r,{color:e===t?`green`:`gray`,bold:e===t,children:[`[`,p.indexOf(e)+1,`] `,e]}),(0,f.jsx)(r,{children:` `})]},e)),(0,f.jsx)(r,{color:`gray`,children:` │ Tab: switch │ Ctrl+C: quit`})]}),(0,f.jsxs)(n,{flexGrow:1,minHeight:10,children:[t===`status`&&(0,f.jsx)(s,{}),t===`search`&&(0,f.jsx)(c,{}),t===`curated`&&(0,f.jsx)(l,{}),t===`log`&&(0,f.jsx)(u,{})]})]})})}export{m as t};
2
+ import{r as e}from"./chunk-D6axbAb-.js";import{t}from"./react-D__J1GQe.js";import{a as n,i as r,n as i,t as a}from"./jsx-runtime-y6Gdq5PZ.js";import{t as o}from"./useKBClient-C35iA4uG.js";import{t as s}from"./StatusPanel-BAbUxyqQ.js";import{t as c}from"./SearchPanel-CpJGczAc.js";import{t as l}from"./CuratedPanel-BIamXLNy.js";import{t as u}from"./LogPanel-E_1Do4-j.js";var d=e(t()),f=a();const p=[`status`,`search`,`curated`,`log`];function m({client:e}){let[t,a]=(0,d.useState)(`status`);return i((e,n)=>{n.tab&&a(p[(p.indexOf(t)+1)%p.length]),e===`1`&&a(`status`),e===`2`&&a(`search`),e===`3`&&a(`curated`),e===`4`&&a(`log`)}),(0,f.jsx)(o,{value:e,children:(0,f.jsxs)(n,{flexDirection:`column`,width:`100%`,children:[(0,f.jsxs)(n,{borderStyle:`single`,paddingX:1,children:[(0,f.jsx)(r,{bold:!0,color:`cyan`,children:`AI Kit Dashboard`}),(0,f.jsx)(r,{children:` │ `}),p.map(e=>(0,f.jsxs)(d.Fragment,{children:[(0,f.jsxs)(r,{color:e===t?`green`:`gray`,bold:e===t,children:[`[`,p.indexOf(e)+1,`] `,e]}),(0,f.jsx)(r,{children:` `})]},e)),(0,f.jsx)(r,{color:`gray`,children:` │ Tab: switch │ Ctrl+C: quit`})]}),(0,f.jsxs)(n,{flexGrow:1,minHeight:10,children:[t===`status`&&(0,f.jsx)(s,{}),t===`search`&&(0,f.jsx)(c,{}),t===`curated`&&(0,f.jsx)(l,{}),t===`log`&&(0,f.jsx)(u,{})]})]})})}export{m as t};
@@ -1,5 +1,5 @@
1
1
  import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
2
- import { t as IKBClient } from "./index-BXafekwr.js";
2
+ import { t as IKBClient } from "./index-MXJeXmCf.js";
3
3
  import React from "react";
4
4
 
5
5
  //#region packages/tui/src/App.d.ts
@@ -1,2 +1,2 @@
1
1
  import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
2
- import{t as e}from"./App-DU2KEylW.js";export{e as App};
2
+ import{t as e}from"./App-B2-KJPt4.js";export{e as App};
@@ -0,0 +1,3 @@
1
+ import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
2
+ import{r as e}from"./chunk-D6axbAb-.js";import{t}from"./react-D__J1GQe.js";import{a as n,i as r,t as i}from"./jsx-runtime-y6Gdq5PZ.js";import{homedir as a}from"node:os";import{exec as o,execFile as s}from"node:child_process";import{appendFileSync as c,closeSync as l,constants as u,existsSync as d,mkdirSync as f,openSync as p,readFileSync as m,readdirSync as h,renameSync as g,statSync as _,unlinkSync as v,writeFileSync as y}from"node:fs";import{basename as ee,dirname as b,join as x,resolve as S}from"node:path";import{promisify as C}from"node:util";import{fileURLToPath as w}from"node:url";import{createHash as T}from"node:crypto";import"turndown";C(o),x(b(w(import.meta.url)),`..`,`..`,`wasm`),new Set(Object.keys({".ts":`tree-sitter-typescript.wasm`,".tsx":`tree-sitter-typescript.wasm`,".mts":`tree-sitter-typescript.wasm`,".cts":`tree-sitter-typescript.wasm`,".js":`tree-sitter-javascript.wasm`,".jsx":`tree-sitter-javascript.wasm`,".mjs":`tree-sitter-javascript.wasm`,".cjs":`tree-sitter-javascript.wasm`,".py":`tree-sitter-python.wasm`,".go":`tree-sitter-go.wasm`,".rs":`tree-sitter-rust.wasm`,".java":`tree-sitter-java.wasm`,".kt":`tree-sitter-kotlin.wasm`,".kts":`tree-sitter-kotlin.wasm`,".scala":`tree-sitter-scala.wasm`,".sc":`tree-sitter-scala.wasm`,".c":`tree-sitter-c.wasm`,".h":`tree-sitter-c.wasm`,".cpp":`tree-sitter-cpp.wasm`,".cc":`tree-sitter-cpp.wasm`,".cxx":`tree-sitter-cpp.wasm`,".hpp":`tree-sitter-cpp.wasm`,".hxx":`tree-sitter-cpp.wasm`,".cs":`tree-sitter-c_sharp.wasm`,".swift":`tree-sitter-swift.wasm`,".rb":`tree-sitter-ruby.wasm`,".php":`tree-sitter-php.wasm`}));const E={ai:`.ai`,aiKb:`.ai/kb`,aiCurated:`.ai/curated`,restorePoints:`.ai/restore-points`,data:`.aikit-data`,state:`.aikit-state`,logs:`.aikit-state/logs`,brainstorm:`.brainstorm`,handoffs:`.handoffs`},D={root:`.aikit-data`,registry:`registry.json`};E.data;function O(){return process.env.AIKIT_GLOBAL_DATA_DIR??S(a(),D.root)}function k(e){let t=S(e);return`${ee(t).toLowerCase().replace(/[^a-z0-9-]/g,`-`)||`workspace`}-${T(`sha256`).update(t).digest(`hex`).slice(0,8)}`}function te(){let e=S(O(),D.registry);if(!d(e))return{version:1,workspaces:{}};let t=m(e,`utf-8`);return JSON.parse(t)}function ne(e,t=5e3){let n=`${e}.lock`,r=Date.now()+t,i=10;for(;Date.now()<r;)try{let e=p(n,u.O_CREAT|u.O_EXCL|u.O_WRONLY);return y(e,`${process.pid}\n`),l(e),n}catch(e){if(e.code!==`EEXIST`)throw e;try{let{mtimeMs:e}=_(n);if(Date.now()-e>3e4){v(n);continue}}catch{}let t=new SharedArrayBuffer(4);Atomics.wait(new Int32Array(t),0,0,i),i=Math.min(i*2,200)}throw Error(`Failed to acquire registry lock after ${t}ms`)}function re(e){try{v(e)}catch{}}function ie(e){let t=O();f(t,{recursive:!0});let n=S(t,D.registry),r=ne(n);try{let t=`${n}.tmp`;y(t,JSON.stringify(e,null,2),`utf-8`),g(t,n)}finally{re(r)}}function ae(e){let t=te(),n=k(e),r=new Date().toISOString();return t.workspaces[n]?t.workspaces[n].lastAccessedAt=r:t.workspaces[n]={partition:n,workspacePath:S(e),registeredAt:r,lastAccessedAt:r},f(A(n),{recursive:!0}),ie(t),t.workspaces[n]}function A(e){return S(O(),e)}function j(){return d(S(O(),D.registry))}function M(e){return j()?S(A(ae(e).partition),`state`):S(e,E.state)}const N={debug:0,info:1,warn:2,error:3},P=[];let F=process.env.AIKIT_LOG_LEVEL??`info`,I=process.env.AIKIT_LOG_FILE_SINK===`true`||process.env.AIKIT_LOG_FILE_SINK!==`false`&&!process.env.VITEST&&process.env.NODE_ENV!==`test`;function L(){return I?process.env.VITEST||process.env.NODE_ENV===`test`?process.env.AIKIT_LOG_FILE_SINK===`true`:!0:!1}let R;function z(){return R||=S(process.cwd(),E.logs),R}function B(e){let t=e.toISOString().slice(0,10);return x(z(),`${t}.jsonl`)}let V=0;function H(){let e=Date.now();if(!(e-V<36e5)){V=e;try{let t=z(),n=new Date(e-30*864e5).toISOString().slice(0,10);for(let e of h(t))if(e.endsWith(`.jsonl`)&&e.slice(0,10)<n)try{v(x(t,e))}catch{}}catch{}}}function U(e,t){try{f(z(),{recursive:!0}),c(B(t),`${e}\n`),H()}catch{}}function W(e){function t(t,n,r){if(N[t]<N[F])return;let i=new Date,a={ts:i.toISOString(),level:t,component:e,msg:n,...r},o=JSON.stringify(a);console.error(o);for(let i of P)try{i({level:t,component:e,message:n,data:r})}catch{}L()&&(t===`warn`||t===`error`)&&U(o,i)}return{debug:(e,n)=>t(`debug`,e,n),info:(e,n)=>t(`info`,e,n),warn:(e,n)=>t(`warn`,e,n),error:(e,n)=>t(`error`,e,n)}}const G=W(`query-executor`),K=b(w(import.meta.url));function q(){let e=x(K,`..`,`queries`);if(d(e))return e;let t=x(K,`..`,`..`,`src`,`queries`);return d(t)?t:e}const J=q(),oe={".ts":`typescript`,".tsx":`typescript`,".mts":`typescript`,".cts":`typescript`,".js":`javascript`,".jsx":`javascript`,".mjs":`javascript`,".cjs":`javascript`,".py":`python`,".go":`go`,".rs":`rust`,".java":`java`};var Y=class{queryCache=new Map;scmCache=new Map;execute(e,t,n,r){let i=this.getOrCompile(t,n,r);return i?i.matches(e).map(e=>X(e)):[]}executeCaptures(e,t,n,r){let i=this.getOrCompile(t,n,r);return i?i.captures(e).map(e=>Z(e)):[]}executeRaw(e,t,n){return t.query(n).matches(e).map(e=>X(e))}getOrCompile(e,t,n){let r=oe[t];if(!r)return null;let i=`${r}:${n}`,a=this.queryCache.get(i);if(a)return a;let o=this.loadScm(r,n);if(!o)return null;try{let t=e.query(o);return this.queryCache.set(i,t),t}catch(e){throw G.warn(`Failed to compile query`,{langDir:r,queryType:n,error:String(e)}),Error(`Failed to compile ${r}/${n}.scm: ${String(e)}`)}}loadScm(e,t){let n=`${e}:${t}`,r=this.scmCache.get(n);if(r!==void 0)return r;let i=x(J,e,`${t}.scm`);try{let e=m(i,`utf-8`);return this.scmCache.set(n,e),e}catch{return G.info(`Query file not found (graceful skip)`,{langDir:e,queryType:t}),null}}dispose(){this.queryCache.clear(),this.scmCache.clear()}static resolveQueryDir(e){return x(J,e)}};function X(e){let t=new Map;for(let n of e.captures)t.set(n.name,Z(n));return{pattern:e.pattern,captures:t}}function Z(e){let{node:t}=e;return{name:e.name,text:t.text,nodeType:t.type,startLine:t.startPosition.row,endLine:t.endPosition.row,startColumn:t.startPosition.column,endColumn:t.endPosition.column,node:t}}new Y,new Y,new Y,new Y,new Y,new Set(`.ts,.tsx,.js,.jsx,.mjs,.cjs,.java,.kt,.kts,.scala,.py,.go,.rs,.rb,.php,.swift,.cs,.c,.cpp,.h,.hpp,.sh,.bash,.ps1,.sql,.graphql,.gql,.proto,.json,.yaml,.yml,.toml,.env,.ini,.cfg,.xml,.pom,.gradle,.tf,.hcl,.lock,.mjs`.split(`,`)),E.restorePoints,new Set([`node_modules`,`.git`,`dist`,`build`,`coverage`,`.turbo`,`.cache`,`cdk.out`,E.state]),new Set([`.git`,E.data,E.state,`.turbo`,`.yarn`,`build`,`coverage`,`dist`,`node_modules`]),C(s),new Set(`if_statement.for_statement.for_in_statement.while_statement.do_statement.switch_case.catch_clause.ternary_expression.if_statement.for_statement.while_statement.except_clause.list_comprehension.if_statement.for_statement.enhanced_for_statement.while_statement.catch_clause.ternary_expression.if_statement.for_statement.select_statement.if_expression.for_expression.while_expression.match_arm`.split(`.`));function se(){return S(M(process.cwd()),`replay.jsonl`)}function ce(e={}){let t=se(),n;try{n=m(t,`utf-8`)}catch{return[]}let r=n.trim().split(`
3
+ `).filter(Boolean),i=[];for(let e of r)try{i.push(JSON.parse(e))}catch{}if(e.tool&&(i=i.filter(t=>t.tool===e.tool)),e.source&&(i=i.filter(t=>t.source===e.source)),e.since){let t=e.since;i=i.filter(e=>e.ts>=t)}let a=e.last??20;return i.slice(-a)}C(o),E.data,`script,style,noscript,iframe,svg,nav,footer,header,aside,form,button,input,select,textarea,[role="navigation"],[role="banner"],[role="contentinfo"],[aria-hidden="true"],.sidebar,.nav,.menu,.footer,.header,.ad,.advertisement,.cookie-banner,.popup,.modal`.split(`,`);var Q=e(t()),$=i();function le(){let[e,t]=(0,Q.useState)([]);return(0,Q.useEffect)(()=>{let e=()=>{t(ce({last:30}))};e();let n=setInterval(e,2e3);return()=>clearInterval(n)},[]),(0,$.jsxs)(n,{flexDirection:`column`,borderStyle:`round`,paddingX:1,children:[(0,$.jsx)(r,{bold:!0,color:`cyan`,children:`Activity Log`}),(0,$.jsx)(r,{children:` `}),e.length===0&&(0,$.jsx)(r,{color:`gray`,children:`No activity recorded yet`}),e.slice().reverse().map((e,t)=>{let n=e.ts.split(`T`)[1]?.split(`.`)[0]??e.ts,i=e.status===`ok`?`green`:`red`;return(0,$.jsxs)(r,{children:[(0,$.jsx)(r,{color:`gray`,children:n}),` `,(0,$.jsx)(r,{color:i,children:e.status===`ok`?`✓`:`✗`}),` `,(0,$.jsx)(r,{bold:!0,children:e.tool}),` `,(0,$.jsxs)(r,{color:`gray`,children:[`(`,e.durationMs,`ms)`]})]},`${e.ts}-${t}`)}),(0,$.jsx)(r,{children:` `}),(0,$.jsx)(r,{color:`gray`,children:`Refreshes every 2s │ Showing last 30`})]})}export{le as t};
@@ -1,5 +1,5 @@
1
1
  import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
2
- import { t as IKBClient } from "../index-BXafekwr.js";
2
+ import { t as IKBClient } from "../index-MXJeXmCf.js";
3
3
  import * as _$react from "react";
4
4
 
5
5
  //#region packages/tui/src/hooks/useKBClient.d.ts
@@ -2,7 +2,7 @@ import { createRequire as __createRequire } from 'node:module'; const require =
2
2
  //#region packages/aikit-client/dist/types.d.ts
3
3
  //#region packages/aikit-client/src/types.d.ts
4
4
  /**
5
- * IKBClient — Unified data access interface for KB consumers.
5
+ * IKBClient — Unified data access interface for AI Kit consumers.
6
6
  *
7
7
  * Implemented by:
8
8
  * - DirectKBClient (in-process, used by TUI)
@@ -44,9 +44,9 @@ interface KBGraphData {
44
44
  }>;
45
45
  }
46
46
  interface IKBClient {
47
- /** Get KB status. */
47
+ /** Get AI Kit status. */
48
48
  getStatus(): Promise<KBStatus>;
49
- /** Search the knowledge base. */
49
+ /** Search AI Kit. */
50
50
  search(query: string, options?: {
51
51
  limit?: number;
52
52
  mode?: 'hybrid' | 'semantic' | 'keyword';
@@ -1,5 +1,5 @@
1
1
  import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
2
- import { t as IKBClient } from "./index-BXafekwr.js";
2
+ import { t as IKBClient } from "./index-MXJeXmCf.js";
3
3
 
4
4
  //#region packages/tui/src/index.d.ts
5
5
  declare function launch(client: IKBClient): void;
@@ -1,2 +1,2 @@
1
1
  import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
2
- import{r as e}from"./chunk-D6axbAb-.js";import{t}from"./react-D__J1GQe.js";import{r as n}from"./jsx-runtime-y6Gdq5PZ.js";import{t as r}from"./App-DU2KEylW.js";var i=e(t());function a(e){n(i.createElement(r,{client:e}))}export{a as launch};
2
+ import{r as e}from"./chunk-D6axbAb-.js";import{t}from"./react-D__J1GQe.js";import{r as n}from"./jsx-runtime-y6Gdq5PZ.js";import{t as r}from"./App-B2-KJPt4.js";var i=e(t());function a(e){n(i.createElement(r,{client:e}))}export{a as launch};
@@ -1,2 +1,2 @@
1
1
  import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
2
- import{t as e}from"../LogPanel-Bo8a8QXB.js";export{e as LogPanel};
2
+ import{t as e}from"../LogPanel-E_1Do4-j.js";export{e as LogPanel};