Skip to content

Commit bf2cbe4

Browse files
committed
fixed stats
1 parent c55726b commit bf2cbe4

File tree

2 files changed

+81
-26
lines changed

2 files changed

+81
-26
lines changed

commands/coldbox/ai/stats.cfc

Lines changed: 63 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@
99
*/
1010
component extends="coldbox-cli.models.BaseAICommand" {
1111

12+
// DI
13+
property name="agentRegistry" inject="AgentRegistry@coldbox-cli";
14+
1215
/**
1316
* Run the command
1417
*
@@ -53,17 +56,29 @@ component extends="coldbox-cli.models.BaseAICommand" {
5356

5457
// Overview
5558
print.boldCyanLine( "📊 Overview" )
56-
print.line( " Language: #arguments.stats.language#" )
57-
print.line( " Template: #arguments.stats.templateType#" )
58-
print.line( " Last Sync: #arguments.stats.lastSync#" )
59+
var overviewData = [
60+
[ "Language", arguments.stats.language ],
61+
[ "Template", arguments.stats.templateType ],
62+
[ "Last Sync", arguments.stats.lastSync ]
63+
]
64+
print.table(
65+
headerNames = [ "Property", "Value" ],
66+
data = overviewData
67+
)
5968
print.line()
6069

6170
// Guidelines
6271
print.boldGreenLine( "📚 Guidelines (#arguments.stats.guidelines.total#)" )
63-
print.line( " Core: #arguments.stats.guidelines.core#" )
64-
print.line( " Module: #arguments.stats.guidelines.module#" )
65-
print.line( " Custom: #arguments.stats.guidelines.custom#" )
66-
print.line( " Override: #arguments.stats.guidelines.override#" )
72+
var guidelinesData = [
73+
[ "Core", arguments.stats.guidelines.core ],
74+
[ "Module", arguments.stats.guidelines.module ],
75+
[ "Custom", arguments.stats.guidelines.custom ],
76+
[ "Override", arguments.stats.guidelines.override ]
77+
]
78+
print.table(
79+
headerNames = [ "Type", "Count" ],
80+
data = guidelinesData
81+
)
6782

6883
if ( arguments.verbose && arguments.stats.guidelines.totalSize > 0 ) {
6984
print.dim( " Total Size: #variables.utility.formatBytes( arguments.stats.guidelines.totalSize )#" )
@@ -74,10 +89,16 @@ component extends="coldbox-cli.models.BaseAICommand" {
7489

7590
// Skills
7691
print.boldYellowLine( "🎯 Skills (#arguments.stats.skills.total#)" )
77-
print.line( " Core: #arguments.stats.skills.core#" )
78-
print.line( " Module: #arguments.stats.skills.module#" )
79-
print.line( " Custom: #arguments.stats.skills.custom#" )
80-
print.line( " Override: #arguments.stats.skills.override#" )
92+
var skillsData = [
93+
[ "Core", arguments.stats.skills.core ],
94+
[ "Module", arguments.stats.skills.module ],
95+
[ "Custom", arguments.stats.skills.custom ],
96+
[ "Override", arguments.stats.skills.override ]
97+
]
98+
print.table(
99+
headerNames = [ "Type", "Count" ],
100+
data = skillsData
101+
)
81102

82103
if ( arguments.verbose && arguments.stats.skills.totalSize > 0 ) {
83104
print.dim( " Total Size: #variables.utility.formatBytes( arguments.stats.skills.totalSize )#" )
@@ -88,9 +109,16 @@ component extends="coldbox-cli.models.BaseAICommand" {
88109
// Agents
89110
print.boldMagentaLine( "🤖 Agents (#arguments.stats.agents.total#)" )
90111
if ( arguments.stats.agents.total > 0 ) {
112+
var agentFiles = variables.agentRegistry.getAgentConfigPaths()
113+
var agentsData = []
91114
arguments.stats.agents.configured.each( ( agent ) => {
92-
print.line( " • #agent#" )
115+
var configFile = agentFiles[ agent ] ?: "Unknown"
116+
agentsData.append( [ agent, configFile ] )
93117
} )
118+
print.table(
119+
headerNames = [ "Agent", "Config File" ],
120+
data = agentsData
121+
)
94122
} else {
95123
print.dimLine( " (none configured)" )
96124
}
@@ -99,16 +127,29 @@ component extends="coldbox-cli.models.BaseAICommand" {
99127

100128
// MCP Servers
101129
print.boldCyanLine( "🌐 MCP Servers (#arguments.stats.mcpServers.total#)" )
102-
print.line( " Core: #arguments.stats.mcpServers.core#" )
103-
print.line( " Module: #arguments.stats.mcpServers.module#" )
104-
print.line( " Custom: #arguments.stats.mcpServers.custom#" )
130+
var mcpData = [
131+
[ "Core", arguments.stats.mcpServers.core ],
132+
[ "Module", arguments.stats.mcpServers.module ],
133+
[ "Custom", arguments.stats.mcpServers.custom ]
134+
]
135+
print.table(
136+
headerNames = [ "Type", "Count" ],
137+
data = mcpData
138+
)
105139
print.line()
106140

107141
// Context Estimate
108142
print.boldWhiteLine( "💾 Estimated AI Context Usage" )
109-
print.line( " Guidelines: ~#arguments.stats.contextEstimate.guidelinesKB# KB" )
110-
print.line( " Skills: ~#arguments.stats.contextEstimate.skillsKB# KB" )
111-
print.boldLine( " Total: ~#arguments.stats.contextEstimate.totalKB# KB" )
143+
var contextData = [
144+
[ "Guidelines", "~#arguments.stats.contextEstimate.guidelinesKB# KB" ],
145+
[ "Skills", "~#arguments.stats.contextEstimate.skillsKB# KB" ],
146+
[ "Total", "~#arguments.stats.contextEstimate.totalKB# KB" ]
147+
]
148+
print.table(
149+
headerNames = [ "Component", "Size" ],
150+
data = contextData
151+
)
152+
print.line()
112153

113154
// Show usage indicator based on common AI models (using GPT-4 128K as baseline)
114155
var estimatedTokens = arguments.stats.contextEstimate.totalKB * 300
@@ -171,7 +212,10 @@ component extends="coldbox-cli.models.BaseAICommand" {
171212

172213
// Tips
173214
printTip( "Run 'coldbox ai tree' to see the structure" )
174-
printTip( "Run 'coldbox ai stats --verbose' for detailed breakdown" )
215+
216+
if( !arguments.verbose ){
217+
printTip( "Run 'coldbox ai stats --verbose' for detailed breakdown" )
218+
}
175219
}
176220

177221
}

models/AIService.cfc

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -92,21 +92,23 @@ component singleton {
9292
manifest.mcpServers.module = mcpServers.module;
9393
result.mcpServers.core = mcpServers.core;
9494
result.mcpServers.module = mcpServers.module;
95-
// Configure agents
96-
result.agents = variables.agentRegistry.configureAgents(
97-
arguments.directory,
98-
arguments.agents,
99-
arguments.language
100-
);
10195

10296
// If only 1 agent is configured, automatically set it as active
10397
var agentsList = listToArray( arguments.agents )
10498
if ( agentsList.len() == 1 ) {
10599
manifest.activeAgent = agentsList.first()
106100
}
107101

108-
// Save manifest
102+
// Save manifest BEFORE configuring agents so they can read MCP servers
109103
saveManifest( arguments.directory, manifest );
104+
105+
// Configure agents (reads manifest for MCP servers)
106+
result.agents = variables.agentRegistry.configureAgents(
107+
arguments.directory,
108+
arguments.agents,
109+
arguments.language
110+
);
111+
110112
result.manifest = manifest;
111113

112114
// Update box.json with AI configuration
@@ -215,6 +217,15 @@ component singleton {
215217
// Save updated manifest
216218
saveManifest( arguments.directory, manifest );
217219

220+
// Regenerate agent configuration files with updated content
221+
// This ensures MCP servers and other changes are reflected in agent instruction files
222+
if ( structKeyExists( manifest, "agents" ) && manifest.agents.len() ) {
223+
var language = manifest.language ?: "boxlang";
224+
manifest.agents.each( ( agent ) => {
225+
variables.agentRegistry.configureAgent( directory, agent, language );
226+
} );
227+
}
228+
218229
result.message = "AI integration refreshed successfully!";
219230
return result;
220231
}

0 commit comments

Comments
 (0)