@@ -26,9 +26,9 @@ component extends="coldbox-cli.models.BaseAICommand" {
2626 }
2727
2828 try {
29- var info = ensureInstalled ( arguments .directory );
29+ var info = ensureInstalled ( arguments .directory );
3030 var manifest = loadManifest ( arguments .directory );
31- var stats = calculateStats ( info , manifest , arguments .directory );
31+ var stats = calculateStats ( info , manifest , arguments .directory );
3232
3333 // JSON output
3434 if ( arguments .json ) {
@@ -53,41 +53,41 @@ component extends="coldbox-cli.models.BaseAICommand" {
5353 required string directory
5454 ){
5555 var stats = {
56- " guidelines" : {
57- " total" : arguments .info .guidelines .len (),
58- " core" : 0 ,
59- " module" : 0 ,
60- " custom" : 0 ,
61- " override" : 0 ,
62- " totalSize" : 0 ,
63- " avgSize" : 0
56+ " guidelines" : {
57+ " total" : arguments .info .guidelines .len (),
58+ " core" : 0 ,
59+ " module" : 0 ,
60+ " custom" : 0 ,
61+ " override" : 0 ,
62+ " totalSize" : 0 ,
63+ " avgSize" : 0
6464 },
65- " skills" : {
66- " total" : arguments .info .skills .len (),
67- " core" : 0 ,
68- " module" : 0 ,
69- " custom" : 0 ,
70- " override" : 0 ,
71- " totalSize" : 0 ,
72- " avgSize" : 0
65+ " skills" : {
66+ " total" : arguments .info .skills .len (),
67+ " core" : 0 ,
68+ " module" : 0 ,
69+ " custom" : 0 ,
70+ " override" : 0 ,
71+ " totalSize" : 0 ,
72+ " avgSize" : 0
7373 },
74- " agents" : {
75- " total" : arguments .manifest .agents .len (),
76- " configured" : arguments .manifest .agents
74+ " agents" : {
75+ " total" : arguments .manifest .agents .len (),
76+ " configured" : arguments .manifest .agents
7777 },
78- " mcpServers" : {
79- " total" : 0 ,
80- " core" : 0 ,
81- " module" : 0 ,
82- " custom" : 0
78+ " mcpServers" : {
79+ " total" : 0 ,
80+ " core" : 0 ,
81+ " module" : 0 ,
82+ " custom" : 0
8383 },
84- " language" : arguments .manifest .language ?: " unknown" ,
85- " templateType" : arguments .manifest .templateType ?: " unknown" ,
86- " lastSync" : arguments .manifest .lastSync ?: " never" ,
87- " contextEstimate" : {
88- " totalKB" : 0 ,
89- " guidelinesKB" : 0 ,
90- " skillsKB" : 0
84+ " language" : arguments .manifest .language ?: " unknown" ,
85+ " templateType" : arguments .manifest .templateType ?: " unknown" ,
86+ " lastSync" : arguments .manifest .lastSync ?: " never" ,
87+ " contextEstimate" : {
88+ " totalKB" : 0 ,
89+ " guidelinesKB" : 0 ,
90+ " skillsKB" : 0
9191 }
9292 };
9393
@@ -101,7 +101,7 @@ component extends="coldbox-cli.models.BaseAICommand" {
101101
102102 // Count skills by type
103103 arguments .info .skills .each ( ( skill ) = > {
104- var type = skill .type ?: " module" ;
104+ var type = skill .type ?: " module" ;
105105 var source = skill .source ?: " " ;
106106
107107 if ( type == " override" ) {
@@ -116,32 +116,34 @@ component extends="coldbox-cli.models.BaseAICommand" {
116116 } );
117117
118118 // Count MCP servers
119- var mcpServers = arguments .manifest .mcpServers ?: { " core" : [], " module" : [], " custom" : [] };
120- stats .mcpServers .core = mcpServers .core .len ();
119+ var mcpServers = arguments .manifest .mcpServers ?: {
120+ " core" : [],
121+ " module" : [],
122+ " custom" : []
123+ };
124+ stats .mcpServers .core = mcpServers .core .len ();
121125 stats .mcpServers .module = mcpServers .module .len ();
122126 stats .mcpServers .custom = mcpServers .custom .len ();
123- stats .mcpServers .total = stats .mcpServers .core + stats .mcpServers .module + stats .mcpServers .custom ;
127+ stats .mcpServers .total = stats .mcpServers .core + stats .mcpServers .module + stats .mcpServers .custom ;
124128
125129 // Calculate file sizes
126130 var aiDir = arguments .directory & " /.ai" ;
127131 if ( directoryExists ( aiDir ) ) {
128132 // Guidelines size
129133 var guidelinesDir = aiDir & " /guidelines" ;
130134 if ( directoryExists ( guidelinesDir ) ) {
131- var guidelineSize = calculateDirectorySize ( guidelinesDir );
132- stats .guidelines .totalSize = guidelineSize ;
133- stats .guidelines .avgSize = stats .guidelines .total > 0 ?
134- int ( guidelineSize / stats .guidelines .total ) : 0 ;
135+ var guidelineSize = calculateDirectorySize ( guidelinesDir );
136+ stats .guidelines .totalSize = guidelineSize ;
137+ stats .guidelines .avgSize = stats .guidelines .total > 0 ? int ( guidelineSize / stats .guidelines .total ) : 0 ;
135138 stats .contextEstimate .guidelinesKB = int ( guidelineSize / 1024 );
136139 }
137140
138141 // Skills size
139142 var skillsDir = aiDir & " /skills" ;
140143 if ( directoryExists ( skillsDir ) ) {
141- var skillsSize = calculateDirectorySize ( skillsDir );
142- stats .skills .totalSize = skillsSize ;
143- stats .skills .avgSize = stats .skills .total > 0 ?
144- int ( skillsSize / stats .skills .total ) : 0 ;
144+ var skillsSize = calculateDirectorySize ( skillsDir );
145+ stats .skills .totalSize = skillsSize ;
146+ stats .skills .avgSize = stats .skills .total > 0 ? int ( skillsSize / stats .skills .total ) : 0 ;
145147 stats .contextEstimate .skillsKB = int ( skillsSize / 1024 );
146148 }
147149
@@ -246,29 +248,45 @@ component extends="coldbox-cli.models.BaseAICommand" {
246248
247249 // Show usage indicator based on common AI models (using GPT-4 128K as baseline)
248250 var estimatedTokens = arguments .stats .contextEstimate .totalKB * 300 ;
249- var baselineTokens = 128000 ; // GPT-4 context window
250- var percentage = ( estimatedTokens / baselineTokens ) * 100 ;
251+ var baselineTokens = 128000 ; // GPT-4 context window
252+ var percentage = ( estimatedTokens / baselineTokens ) * 100 ;
251253
252254 print .toConsole ( " Usage: " );
253255 if ( percentage < 30 ) {
254- print .greenLine ( " ✓ Low (#numberFormat ( percentage , ' 9.1' ) #% of typical AI context)" );
256+ print .greenLine ( " ✓ Low (#numberFormat ( percentage , " 9.1" ) #% of typical AI context)" );
255257 } else if ( percentage < 60 ) {
256- print .yellowLine ( " ⚠ Moderate (#numberFormat ( percentage , ' 9.1' ) #% of typical AI context)" );
258+ print .yellowLine ( " ⚠ Moderate (#numberFormat ( percentage , " 9.1" ) #% of typical AI context)" );
257259 } else if ( percentage < 90 ) {
258- print .orangeLine ( " ⚠ High (#numberFormat ( percentage , ' 9.1' ) #% of typical AI context)" );
260+ print .orangeLine ( " ⚠ High (#numberFormat ( percentage , " 9.1" ) #% of typical AI context)" );
259261 } else {
260- print .redLine ( " ⛔ Very High (#numberFormat ( percentage , ' 9.1' ) #% of typical AI context)" );
262+ print .redLine ( " ⛔ Very High (#numberFormat ( percentage , " 9.1" ) #% of typical AI context)" );
261263 print .dim ( " Consider reducing guidelines/skills for better AI performance" );
262264 }
263265 print .line ();
264266
265267 // Context window estimates for popular AI models
266268 if ( arguments .verbose ) {
267269 print .cyanLine ( " 📈 Context Window Utilization:" );
268- printContextUtilization ( " Claude 3.5 Sonnet" , 200000 , arguments .stats .contextEstimate .totalKB );
269- printContextUtilization ( " GPT-4" , 128000 , arguments .stats .contextEstimate .totalKB );
270- printContextUtilization ( " GPT-3.5-Turbo" , 16000 , arguments .stats .contextEstimate .totalKB );
271- printContextUtilization ( " Gemini 1.5 Pro" , 1000000 , arguments .stats .contextEstimate .totalKB );
270+ printContextUtilization (
271+ " Claude 3.5 Sonnet" ,
272+ 200000 ,
273+ arguments .stats .contextEstimate .totalKB
274+ );
275+ printContextUtilization (
276+ " GPT-4" ,
277+ 128000 ,
278+ arguments .stats .contextEstimate .totalKB
279+ );
280+ printContextUtilization (
281+ " GPT-3.5-Turbo" ,
282+ 16000 ,
283+ arguments .stats .contextEstimate .totalKB
284+ );
285+ printContextUtilization (
286+ " Gemini 1.5 Pro" ,
287+ 1000000 ,
288+ arguments .stats .contextEstimate .totalKB
289+ );
272290 print .line ();
273291 }
274292
@@ -287,18 +305,18 @@ component extends="coldbox-cli.models.BaseAICommand" {
287305 ){
288306 // Rough estimate: 1KB ≈ 300 tokens
289307 var estimatedTokens = arguments .usedKB * 300 ;
290- var percentage = ( estimatedTokens / arguments .contextTokens ) * 100 ;
291- var color = percentage < 30 ? " green" : ( percentage < 60 ? " yellow" : " red" );
308+ var percentage = ( estimatedTokens / arguments .contextTokens ) * 100 ;
309+ var color = percentage < 30 ? " green" : ( percentage < 60 ? " yellow" : " red" );
292310
293311 print .line ( " #arguments .modelName #: " );
294312 print .toConsole ( " " );
295313
296314 if ( color == " green" ) {
297- print .greenText ( " #numberFormat ( percentage , ' 9.2' ) #%" );
315+ print .greenText ( " #numberFormat ( percentage , " 9.2" ) #%" );
298316 } else if ( color == " yellow" ) {
299- print .yellowText ( " #numberFormat ( percentage , ' 9.2' ) #%" );
317+ print .yellowText ( " #numberFormat ( percentage , " 9.2" ) #%" );
300318 } else {
301- print .redText ( " #numberFormat ( percentage , ' 9.2' ) #%" );
319+ print .redText ( " #numberFormat ( percentage , " 9.2" ) #%" );
302320 }
303321
304322 print .line ( " (~#numberFormat ( estimatedTokens ) # tokens of #numberFormat ( arguments .contextTokens ) #)" );
@@ -311,9 +329,9 @@ component extends="coldbox-cli.models.BaseAICommand" {
311329 if ( arguments .bytes < 1024 ) {
312330 return " #arguments .bytes # B" ;
313331 } else if ( arguments .bytes < 1048576 ) {
314- return " #numberFormat ( arguments .bytes / 1024 , ' 9.2' ) # KB" ;
332+ return " #numberFormat ( arguments .bytes / 1024 , " 9.2" ) # KB" ;
315333 } else {
316- return " #numberFormat ( arguments .bytes / 1048576 , ' 9.2' ) # MB" ;
334+ return " #numberFormat ( arguments .bytes / 1048576 , " 9.2" ) # MB" ;
317335 }
318336 }
319337
0 commit comments