84 lines
2.6 KiB
JavaScript
84 lines
2.6 KiB
JavaScript
|
|
/**
|
||
|
|
* 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 };
|