Files
dev-intel-v2/agent-kb.js

84 lines
2.6 KiB
JavaScript
Raw Permalink Normal View History

/**
* agent-kb.js Render V2 docs as token-efficient JSON for AI agents.
*
* Output: A single JSON file mirroring the markdown doc structure exactly, but
* stripped of markdown formatting to save context tokens during agent eval.
*/
const fs = require('fs');
const path = require('path');
/**
* Build the agent knowledge base from the exact same data used to render the markdown docs.
*/
function buildAgentKB(graph, srcRoot, helmCharts, subs, contractsResult, patterns, impactResults) {
const kb = {
_meta: {
generated: new Date().toISOString(),
format: 'dev-intel-agent-kb-v2',
description: 'Token-efficient rendering of Dev Intel V2 documentation for AI agents.',
},
reference: {
systemArchitecture: {
summary: {
subsystemCount: subs.subsystems.length,
helmChartCount: helmCharts.length,
contractCount: contractsResult.contracts.length,
crossCuttingConcerns: subs.crossCutting,
},
patterns: patterns,
},
subsystems: subs.subsystems.map(sub => {
const outgoing = Object.entries(subs.dependencyMatrix)
.filter(([k]) => k.startsWith(sub.name + '→'))
.map(([k, v]) => ({ target: k.split('→')[1], calls: v.calls, imports: v.imports }));
const incoming = Object.entries(subs.dependencyMatrix)
.filter(([k]) => k.endsWith('→' + sub.name))
.map(([k, v]) => ({ source: k.split('→')[0], calls: v.calls, imports: v.imports }));
return {
name: sub.name,
kind: sub.kind,
files: sub.files,
entities: sub.entities,
publicExports: sub.publicExports,
dependencies: {
outgoing,
incoming,
},
contracts: (contractsResult.bySubsystem[sub.name] || []).map(c => ({
name: c.name,
type: c.type,
})),
};
}),
helm: {
charts: helmCharts.map(c => ({
name: c.chart.name,
version: c.chart.version,
appVersion: c.chart.appVersion || null,
path: c.dir,
dependencies: c.chart.dependencies.map(d => d.name),
resourceCount: c.templates.resources.length,
valuesKeys: c.values.keys.map(k => k.name),
interactions: c.interactions.map(i => ({ type: i.type, target: i.target }))
})),
syncWaves: patterns.syncWaves,
},
contracts: contractsResult.contracts.map(c => ({
name: c.name,
type: c.type,
id: c.id,
})),
}
};
return kb;
}
module.exports = { buildAgentKB };