@kubb/cli 4.32.4 → 4.33.1

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 (133) hide show
  1. package/dist/agent-Bd1QdPVV.cjs +91 -0
  2. package/dist/agent-Bd1QdPVV.cjs.map +1 -0
  3. package/dist/agent-D83d9Pud.cjs +60 -0
  4. package/dist/agent-D83d9Pud.cjs.map +1 -0
  5. package/dist/agent-DgKQXSmR.js +57 -0
  6. package/dist/agent-DgKQXSmR.js.map +1 -0
  7. package/dist/agent-u_Ehwz6r.js +87 -0
  8. package/dist/agent-u_Ehwz6r.js.map +1 -0
  9. package/dist/constants-BTUap0zs.cjs +108 -0
  10. package/dist/constants-BTUap0zs.cjs.map +1 -0
  11. package/dist/constants-CM3dJzjK.js +67 -0
  12. package/dist/constants-CM3dJzjK.js.map +1 -0
  13. package/dist/define--M_JMcDC.js +25 -0
  14. package/dist/define--M_JMcDC.js.map +1 -0
  15. package/dist/define-D6Kfm7-Z.cjs +36 -0
  16. package/dist/define-D6Kfm7-Z.cjs.map +1 -0
  17. package/dist/errors-6mF_WKxg.js +27 -0
  18. package/dist/errors-6mF_WKxg.js.map +1 -0
  19. package/dist/errors-DBW0N9w4.cjs +44 -0
  20. package/dist/errors-DBW0N9w4.cjs.map +1 -0
  21. package/dist/generate-Bn8n4w1O.cjs +65 -0
  22. package/dist/generate-Bn8n4w1O.cjs.map +1 -0
  23. package/dist/{generate-CpWtSc45.js → generate-CAsV9wSx.js} +656 -689
  24. package/dist/generate-CAsV9wSx.js.map +1 -0
  25. package/dist/generate-D-59YK0L.js +66 -0
  26. package/dist/generate-D-59YK0L.js.map +1 -0
  27. package/dist/{generate-COj0aMS6.cjs → generate-JC65igQh.cjs} +662 -694
  28. package/dist/generate-JC65igQh.cjs.map +1 -0
  29. package/dist/index.cjs +226 -35
  30. package/dist/index.cjs.map +1 -1
  31. package/dist/index.d.ts +1 -1
  32. package/dist/index.js +226 -35
  33. package/dist/index.js.map +1 -1
  34. package/dist/init-C-InrmSY.js +302 -0
  35. package/dist/init-C-InrmSY.js.map +1 -0
  36. package/dist/init-CXP8OfMe.js +25 -0
  37. package/dist/init-CXP8OfMe.js.map +1 -0
  38. package/dist/init-CbeE-L-0.cjs +25 -0
  39. package/dist/init-CbeE-L-0.cjs.map +1 -0
  40. package/dist/init-hmolV6B4.cjs +306 -0
  41. package/dist/init-hmolV6B4.cjs.map +1 -0
  42. package/dist/jiti-Cd3S0xwr.cjs +16 -0
  43. package/dist/jiti-Cd3S0xwr.cjs.map +1 -0
  44. package/dist/jiti-e08mD2Ph.js +11 -0
  45. package/dist/jiti-e08mD2Ph.js.map +1 -0
  46. package/dist/mcp-BDxg2oJm.cjs +16 -0
  47. package/dist/mcp-BDxg2oJm.cjs.map +1 -0
  48. package/dist/mcp-ChHFPRzD.cjs +42 -0
  49. package/dist/mcp-ChHFPRzD.cjs.map +1 -0
  50. package/dist/mcp-D2SHEg_d.js +41 -0
  51. package/dist/mcp-D2SHEg_d.js.map +1 -0
  52. package/dist/mcp-MSoE4vNA.js +16 -0
  53. package/dist/mcp-MSoE4vNA.js.map +1 -0
  54. package/dist/{package-aNQWvWbS.cjs → package-CUVyeIbt.cjs} +2 -2
  55. package/dist/package-CUVyeIbt.cjs.map +1 -0
  56. package/dist/package-Cbd8OC6q.js +6 -0
  57. package/dist/package-Cbd8OC6q.js.map +1 -0
  58. package/dist/shell-7HPrTCJ5.cjs +57 -0
  59. package/dist/shell-7HPrTCJ5.cjs.map +1 -0
  60. package/dist/shell-DqqWsHCD.js +46 -0
  61. package/dist/shell-DqqWsHCD.js.map +1 -0
  62. package/dist/{telemetry-BDSSqUiG.cjs → telemetry-Cn9X1I5B.cjs} +79 -9
  63. package/dist/telemetry-Cn9X1I5B.cjs.map +1 -0
  64. package/dist/{telemetry-DYWvlxqs.js → telemetry-DxiR7clS.js} +63 -11
  65. package/dist/telemetry-DxiR7clS.js.map +1 -0
  66. package/dist/validate-BG8A3aQS.cjs +25 -0
  67. package/dist/validate-BG8A3aQS.cjs.map +1 -0
  68. package/dist/validate-BZ1UFkwA.js +25 -0
  69. package/dist/validate-BZ1UFkwA.js.map +1 -0
  70. package/dist/validate-Bbrn3Q-A.cjs +42 -0
  71. package/dist/validate-Bbrn3Q-A.cjs.map +1 -0
  72. package/dist/validate-l8vLmwKA.js +41 -0
  73. package/dist/validate-l8vLmwKA.js.map +1 -0
  74. package/package.json +6 -6
  75. package/src/commands/agent/start.ts +27 -136
  76. package/src/commands/agent.ts +6 -25
  77. package/src/commands/generate.ts +26 -158
  78. package/src/commands/init.ts +9 -360
  79. package/src/commands/mcp.ts +7 -52
  80. package/src/commands/validate.ts +9 -60
  81. package/src/constants.ts +76 -0
  82. package/src/index.ts +36 -42
  83. package/src/loggers/clackLogger.ts +65 -165
  84. package/src/loggers/fileSystemLogger.ts +2 -14
  85. package/src/loggers/githubActionsLogger.ts +58 -125
  86. package/src/loggers/plainLogger.ts +44 -92
  87. package/src/loggers/utils.ts +67 -4
  88. package/src/runners/agent.ts +100 -0
  89. package/src/runners/generate.ts +223 -102
  90. package/src/runners/init.ts +323 -0
  91. package/src/runners/mcp.ts +32 -0
  92. package/src/runners/validate.ts +35 -0
  93. package/src/utils/Writables.ts +2 -2
  94. package/src/utils/executeHooks.ts +20 -8
  95. package/src/utils/getCosmiConfig.ts +10 -11
  96. package/src/utils/getIntro.ts +1 -81
  97. package/src/utils/getSummary.ts +12 -17
  98. package/src/utils/jiti.ts +9 -0
  99. package/src/utils/packageManager.ts +4 -4
  100. package/src/utils/runHook.ts +75 -0
  101. package/src/utils/telemetry.ts +8 -26
  102. package/src/utils/watcher.ts +2 -4
  103. package/dist/agent-6COck3B9.cjs +0 -20
  104. package/dist/agent-6COck3B9.cjs.map +0 -1
  105. package/dist/agent-DMm6c5Vg.js +0 -20
  106. package/dist/agent-DMm6c5Vg.js.map +0 -1
  107. package/dist/generate-COj0aMS6.cjs.map +0 -1
  108. package/dist/generate-CpWtSc45.js.map +0 -1
  109. package/dist/init-Bdn3_qir.js +0 -304
  110. package/dist/init-Bdn3_qir.js.map +0 -1
  111. package/dist/init-CFW2kWY8.cjs +0 -308
  112. package/dist/init-CFW2kWY8.cjs.map +0 -1
  113. package/dist/mcp-DkwtARfo.cjs +0 -57
  114. package/dist/mcp-DkwtARfo.cjs.map +0 -1
  115. package/dist/mcp-DrH93Vq4.js +0 -57
  116. package/dist/mcp-DrH93Vq4.js.map +0 -1
  117. package/dist/package-BnJbGmLm.js +0 -6
  118. package/dist/package-BnJbGmLm.js.map +0 -1
  119. package/dist/package-aNQWvWbS.cjs.map +0 -1
  120. package/dist/start-CqTUu14n.js +0 -131
  121. package/dist/start-CqTUu14n.js.map +0 -1
  122. package/dist/start-D-rsIJGo.cjs +0 -134
  123. package/dist/start-D-rsIJGo.cjs.map +0 -1
  124. package/dist/telemetry-BDSSqUiG.cjs.map +0 -1
  125. package/dist/telemetry-DYWvlxqs.js.map +0 -1
  126. package/dist/validate-BlV8L8gC.js +0 -66
  127. package/dist/validate-BlV8L8gC.js.map +0 -1
  128. package/dist/validate-COhZUXF8.cjs +0 -66
  129. package/dist/validate-COhZUXF8.cjs.map +0 -1
  130. package/src/loggers/envDetection.ts +0 -28
  131. package/src/loggers/index.ts +0 -5
  132. package/src/utils/formatMsWithColor.ts +0 -22
  133. package/src/utils/randomColor.ts +0 -23
@@ -2,13 +2,13 @@ import { relative } from 'node:path'
2
2
  import process from 'node:process'
3
3
  import { styleText } from 'node:util'
4
4
  import * as clack from '@clack/prompts'
5
- import { defineLogger, LogLevel } from '@kubb/core'
6
- import { formatHrtime, formatMs } from '@kubb/core/utils'
7
- import { type NonZeroExitError, x } from 'tinyexec'
8
- import { formatMsWithColor } from '../utils/formatMsWithColor.ts'
5
+ import { formatMs, formatMsWithColor, toCause } from '@internals/utils'
6
+ import { defineLogger, logLevel as logLevelMap } from '@kubb/core'
9
7
  import { getIntro } from '../utils/getIntro.ts'
10
8
  import { getSummary } from '../utils/getSummary.ts'
9
+ import { runHook } from '../utils/runHook.ts'
11
10
  import { ClackWritable } from '../utils/Writables.ts'
11
+ import { buildProgressLine, formatCommandWithArgs, formatMessage } from './utils.ts'
12
12
 
13
13
  /**
14
14
  * Clack adapter for local TTY environments
@@ -17,7 +17,7 @@ import { ClackWritable } from '../utils/Writables.ts'
17
17
  export const clackLogger = defineLogger({
18
18
  name: 'clack',
19
19
  install(context, options) {
20
- const logLevel = options?.logLevel || LogLevel.info
20
+ const logLevel = options?.logLevel ?? logLevelMap.info
21
21
  const state = {
22
22
  totalPlugins: 0,
23
23
  completedPlugins: 0,
@@ -50,44 +50,18 @@ export const clackLogger = defineLogger({
50
50
  }
51
51
 
52
52
  function showProgressStep() {
53
- if (logLevel <= LogLevel.silent) {
53
+ if (logLevel <= logLevelMap.silent) {
54
54
  return
55
55
  }
56
56
 
57
- const parts: string[] = []
58
- const duration = formatHrtime(state.hrStart)
59
-
60
- if (state.totalPlugins > 0) {
61
- const pluginStr =
62
- state.failedPlugins > 0
63
- ? `Plugins ${styleText('green', state.completedPlugins.toString())}/${state.totalPlugins} ${styleText('red', `(${state.failedPlugins} failed)`)}`
64
- : `Plugins ${styleText('green', state.completedPlugins.toString())}/${state.totalPlugins}`
65
- parts.push(pluginStr)
66
- }
67
-
68
- if (state.totalFiles > 0) {
69
- parts.push(`Files ${styleText('green', state.processedFiles.toString())}/${state.totalFiles}`)
70
- }
71
-
72
- if (parts.length > 0) {
73
- parts.push(`${styleText('green', duration)} elapsed`)
74
- clack.log.step(getMessage(parts.join(styleText('dim', ' | '))))
57
+ const line = buildProgressLine(state)
58
+ if (line) {
59
+ clack.log.step(getMessage(line))
75
60
  }
76
61
  }
77
62
 
78
63
  function getMessage(message: string): string {
79
- if (logLevel >= LogLevel.verbose) {
80
- const timestamp = new Date().toLocaleTimeString('en-US', {
81
- hour12: false,
82
- hour: '2-digit',
83
- minute: '2-digit',
84
- second: '2-digit',
85
- })
86
-
87
- return [styleText('dim', `[${timestamp}]`), message].join(' ')
88
- }
89
-
90
- return message
64
+ return formatMessage(message, logLevel)
91
65
  }
92
66
 
93
67
  function startSpinner(text?: string) {
@@ -101,7 +75,7 @@ export const clackLogger = defineLogger({
101
75
  }
102
76
 
103
77
  context.on('info', (message, info = '') => {
104
- if (logLevel <= LogLevel.silent) {
78
+ if (logLevel <= logLevelMap.silent) {
105
79
  return
106
80
  }
107
81
 
@@ -115,11 +89,11 @@ export const clackLogger = defineLogger({
115
89
  })
116
90
 
117
91
  context.on('success', (message, info = '') => {
118
- if (logLevel <= LogLevel.silent) {
92
+ if (logLevel <= logLevelMap.silent) {
119
93
  return
120
94
  }
121
95
 
122
- const text = getMessage([styleText('blue', '✓'), message, logLevel >= LogLevel.info ? styleText('dim', info) : undefined].filter(Boolean).join(' '))
96
+ const text = getMessage([styleText('blue', '✓'), message, logLevel >= logLevelMap.info ? styleText('dim', info) : undefined].filter(Boolean).join(' '))
123
97
 
124
98
  if (state.isSpinning) {
125
99
  stopSpinner(text)
@@ -129,19 +103,19 @@ export const clackLogger = defineLogger({
129
103
  })
130
104
 
131
105
  context.on('warn', (message, info) => {
132
- if (logLevel < LogLevel.warn) {
106
+ if (logLevel < logLevelMap.warn) {
133
107
  return
134
108
  }
135
109
 
136
110
  const text = getMessage(
137
- [styleText('yellow', '⚠'), message, logLevel >= LogLevel.info && info ? styleText('dim', info) : undefined].filter(Boolean).join(' '),
111
+ [styleText('yellow', '⚠'), message, logLevel >= logLevelMap.info && info ? styleText('dim', info) : undefined].filter(Boolean).join(' '),
138
112
  )
139
113
 
140
114
  clack.log.warn(text)
141
115
  })
142
116
 
143
117
  context.on('error', (error) => {
144
- const caused = error.cause as Error | undefined
118
+ const caused = toCause(error)
145
119
 
146
120
  const text = [styleText('red', '✗'), error.message].join(' ')
147
121
 
@@ -152,7 +126,7 @@ export const clackLogger = defineLogger({
152
126
  }
153
127
 
154
128
  // Show stack trace in debug mode (first 3 frames)
155
- if (logLevel >= LogLevel.debug && error.stack) {
129
+ if (logLevel >= logLevelMap.debug && error.stack) {
156
130
  const frames = error.stack.split('\n').slice(1, 4)
157
131
  for (const frame of frames) {
158
132
  clack.log.message(getMessage(styleText('dim', frame.trim())))
@@ -170,7 +144,7 @@ export const clackLogger = defineLogger({
170
144
  })
171
145
 
172
146
  context.on('version:new', (version, latestVersion) => {
173
- if (logLevel <= LogLevel.silent) {
147
+ if (logLevel <= logLevelMap.silent) {
174
148
  return
175
149
  }
176
150
 
@@ -196,7 +170,7 @@ Run \`npm install -g @kubb/cli\` to update`,
196
170
  })
197
171
 
198
172
  context.on('config:start', () => {
199
- if (logLevel <= LogLevel.silent) {
173
+ if (logLevel <= logLevelMap.silent) {
200
174
  return
201
175
  }
202
176
 
@@ -207,7 +181,7 @@ Run \`npm install -g @kubb/cli\` to update`,
207
181
  })
208
182
 
209
183
  context.on('config:end', (_configs) => {
210
- if (logLevel <= LogLevel.silent) {
184
+ if (logLevel <= logLevelMap.silent) {
211
185
  return
212
186
  }
213
187
 
@@ -217,17 +191,18 @@ Run \`npm install -g @kubb/cli\` to update`,
217
191
  })
218
192
 
219
193
  context.on('generation:start', (config) => {
220
- // Initialize progress tracking
221
- state.totalPlugins = config.plugins?.length || 0
194
+ reset()
195
+
196
+ // Initialize progress tracking for this generation
197
+ state.totalPlugins = config.plugins?.length ?? 0
222
198
 
223
199
  const text = getMessage(['Generation started', config.name ? `for ${styleText('dim', config.name)}` : undefined].filter(Boolean).join(' '))
224
200
 
225
201
  clack.intro(text)
226
- reset()
227
202
  })
228
203
 
229
204
  context.on('plugin:start', (plugin) => {
230
- if (logLevel <= LogLevel.silent) {
205
+ if (logLevel <= logLevelMap.silent) {
231
206
  return
232
207
  }
233
208
 
@@ -253,7 +228,7 @@ Run \`npm install -g @kubb/cli\` to update`,
253
228
 
254
229
  const active = state.activeProgress.get(plugin.name)
255
230
 
256
- if (!active || logLevel === LogLevel.silent) {
231
+ if (!active || logLevel === logLevelMap.silent) {
257
232
  return
258
233
  }
259
234
 
@@ -280,7 +255,7 @@ Run \`npm install -g @kubb/cli\` to update`,
280
255
  })
281
256
 
282
257
  context.on('files:processing:start', (files) => {
283
- if (logLevel <= LogLevel.silent) {
258
+ if (logLevel <= logLevelMap.silent) {
284
259
  return
285
260
  }
286
261
 
@@ -302,7 +277,7 @@ Run \`npm install -g @kubb/cli\` to update`,
302
277
  })
303
278
 
304
279
  context.on('file:processing:update', ({ file, config }) => {
305
- if (logLevel <= LogLevel.silent) {
280
+ if (logLevel <= logLevelMap.silent) {
306
281
  return
307
282
  }
308
283
 
@@ -320,7 +295,7 @@ Run \`npm install -g @kubb/cli\` to update`,
320
295
  active.progressBar.advance(undefined, text)
321
296
  })
322
297
  context.on('files:processing:end', () => {
323
- if (logLevel <= LogLevel.silent) {
298
+ if (logLevel <= logLevelMap.silent) {
324
299
  return
325
300
  }
326
301
 
@@ -347,7 +322,7 @@ Run \`npm install -g @kubb/cli\` to update`,
347
322
  })
348
323
 
349
324
  context.on('format:start', () => {
350
- if (logLevel <= LogLevel.silent) {
325
+ if (logLevel <= logLevelMap.silent) {
351
326
  return
352
327
  }
353
328
 
@@ -357,7 +332,7 @@ Run \`npm install -g @kubb/cli\` to update`,
357
332
  })
358
333
 
359
334
  context.on('format:end', () => {
360
- if (logLevel <= LogLevel.silent) {
335
+ if (logLevel <= logLevelMap.silent) {
361
336
  return
362
337
  }
363
338
 
@@ -367,7 +342,7 @@ Run \`npm install -g @kubb/cli\` to update`,
367
342
  })
368
343
 
369
344
  context.on('lint:start', () => {
370
- if (logLevel <= LogLevel.silent) {
345
+ if (logLevel <= logLevelMap.silent) {
371
346
  return
372
347
  }
373
348
 
@@ -377,7 +352,7 @@ Run \`npm install -g @kubb/cli\` to update`,
377
352
  })
378
353
 
379
354
  context.on('lint:end', () => {
380
- if (logLevel <= LogLevel.silent) {
355
+ if (logLevel <= logLevelMap.silent) {
381
356
  return
382
357
  }
383
358
 
@@ -387,7 +362,7 @@ Run \`npm install -g @kubb/cli\` to update`,
387
362
  })
388
363
 
389
364
  context.on('hook:start', async ({ id, command, args }) => {
390
- const commandWithArgs = args?.length ? `${command} ${args.join(' ')}` : command
365
+ const commandWithArgs = formatCommandWithArgs(command, args)
391
366
  const text = getMessage(`Hook ${styleText('dim', commandWithArgs)} started`)
392
367
 
393
368
  // Skip hook execution if no id is provided (e.g., during benchmarks or tests)
@@ -395,113 +370,50 @@ Run \`npm install -g @kubb/cli\` to update`,
395
370
  return
396
371
  }
397
372
 
398
- if (logLevel <= LogLevel.silent) {
399
- try {
400
- const result = await x(command, [...(args ?? [])], {
401
- nodeOptions: { detached: true },
402
- throwOnError: true,
403
- })
404
-
405
- await context.emit('debug', {
406
- date: new Date(),
407
- logs: [result.stdout.trimEnd()],
408
- })
409
-
410
- await context.emit('hook:end', {
411
- command,
412
- args,
413
- id,
414
- success: true,
415
- error: null,
416
- })
417
- } catch (err) {
418
- const error = err as NonZeroExitError
419
- const stderr = error.output?.stderr ?? ''
420
- const stdout = error.output?.stdout ?? ''
421
-
422
- await context.emit('debug', {
423
- date: new Date(),
424
- logs: [stdout, stderr].filter(Boolean),
425
- })
426
-
427
- if (stderr) {
428
- console.error(stderr)
429
- }
430
- if (stdout) {
431
- console.log(stdout)
432
- }
433
-
434
- const errorMessage = new Error(`Hook execute failed: ${commandWithArgs}`)
435
-
436
- await context.emit('hook:end', {
437
- command,
438
- args,
439
- id,
440
- success: false,
441
- error: errorMessage,
442
- })
443
- await context.emit('error', errorMessage)
444
- }
445
-
373
+ if (logLevel <= logLevelMap.silent) {
374
+ await runHook({
375
+ id,
376
+ command,
377
+ args,
378
+ commandWithArgs,
379
+ context,
380
+ sink: {
381
+ onStderr: (s) => console.error(s),
382
+ onStdout: (s) => console.log(s),
383
+ },
384
+ })
446
385
  return
447
386
  }
448
387
 
449
388
  clack.intro(text)
450
389
 
451
390
  const logger = clack.taskLog({
452
- title: getMessage(['Executing hook', logLevel >= LogLevel.info ? styleText('dim', commandWithArgs) : undefined].filter(Boolean).join(' ')),
391
+ title: getMessage(['Executing hook', logLevel >= logLevelMap.info ? styleText('dim', commandWithArgs) : undefined].filter(Boolean).join(' ')),
453
392
  })
454
393
 
455
394
  const writable = new ClackWritable(logger)
456
395
 
457
- try {
458
- const proc = x(command, [...(args ?? [])], {
459
- nodeOptions: { detached: true },
460
- throwOnError: true,
461
- })
462
-
463
- for await (const line of proc) {
464
- writable.write(line)
465
- }
466
-
467
- const result = await proc
468
-
469
- await context.emit('debug', {
470
- date: new Date(),
471
- logs: [result.stdout.trimEnd()],
472
- })
473
-
474
- await context.emit('hook:end', { command, args, id, success: true, error: null })
475
- } catch (err) {
476
- const error = err as NonZeroExitError
477
- const stderr = error.output?.stderr ?? ''
478
- const stdout = error.output?.stdout ?? ''
479
-
480
- await context.emit('debug', {
481
- date: new Date(),
482
- logs: [stdout, stderr].filter(Boolean),
483
- })
484
-
485
- if (stderr) {
486
- logger.error(stderr)
487
- }
488
- if (stdout) {
489
- logger.message(stdout)
490
- }
491
-
492
- const errorMessage = new Error(`Hook execute failed: ${commandWithArgs}`)
493
-
494
- await context.emit('hook:end', { command, args, id, success: false, error: errorMessage })
495
- await context.emit('error', errorMessage)
496
- }
396
+ await runHook({
397
+ id,
398
+ command,
399
+ args,
400
+ commandWithArgs,
401
+ context,
402
+ stream: true,
403
+ sink: {
404
+ onLine: (line) => writable.write(line),
405
+ onStderr: (s) => logger.error(s),
406
+ onStdout: (s) => logger.message(s),
407
+ },
408
+ })
497
409
  })
498
410
 
499
411
  context.on('hook:end', ({ command, args }) => {
500
- if (logLevel <= LogLevel.silent) {
412
+ if (logLevel <= logLevelMap.silent) {
501
413
  return
502
414
  }
503
415
 
504
- const commandWithArgs = args?.length ? `${command} ${args.join(' ')}` : command
416
+ const commandWithArgs = formatCommandWithArgs(command, args)
505
417
  const text = getMessage(`Hook ${styleText('dim', commandWithArgs)} successfully executed`)
506
418
 
507
419
  clack.outro(text)
@@ -514,29 +426,17 @@ Run \`npm install -g @kubb/cli\` to update`,
514
426
  config,
515
427
  status,
516
428
  hrStart,
517
- pluginTimings: logLevel >= LogLevel.verbose ? pluginTimings : undefined,
429
+ pluginTimings: logLevel >= logLevelMap.verbose ? pluginTimings : undefined,
518
430
  })
519
431
  const title = config.name || ''
520
432
 
521
433
  summary.unshift('\n')
522
434
  summary.push('\n')
523
435
 
524
- if (status === 'success') {
525
- clack.box(summary.join('\n'), getMessage(title), {
526
- width: 'auto',
527
- formatBorder: (s: string) => styleText('green', s),
528
- rounded: true,
529
- withGuide: false,
530
- contentAlign: 'left',
531
- titleAlign: 'center',
532
- })
533
-
534
- return
535
- }
536
-
436
+ const borderColor = status === 'success' ? 'green' : 'red'
537
437
  clack.box(summary.join('\n'), getMessage(title), {
538
438
  width: 'auto',
539
- formatBorder: (s: string) => styleText('red', s),
439
+ formatBorder: (s: string) => styleText(borderColor, s),
540
440
  rounded: true,
541
441
  withGuide: false,
542
442
  contentAlign: 'left',
@@ -1,7 +1,7 @@
1
1
  import { relative, resolve } from 'node:path'
2
+ import process from 'node:process'
3
+ import { formatMs, write } from '@internals/utils'
2
4
  import { defineLogger } from '@kubb/core'
3
- import { write } from '@kubb/core/fs'
4
- import { formatMs } from '@kubb/core/utils'
5
5
 
6
6
  type CachedEvent = {
7
7
  date: Date
@@ -63,7 +63,6 @@ export const fileSystemLogger = defineLogger({
63
63
  state.cachedLogs.add({
64
64
  date: new Date(),
65
65
  logs: [`ℹ ${message} ${info}`],
66
- fileName: undefined,
67
66
  })
68
67
  })
69
68
 
@@ -71,7 +70,6 @@ export const fileSystemLogger = defineLogger({
71
70
  state.cachedLogs.add({
72
71
  date: new Date(),
73
72
  logs: [`✓ ${message} ${info}`],
74
- fileName: undefined,
75
73
  })
76
74
  })
77
75
 
@@ -79,7 +77,6 @@ export const fileSystemLogger = defineLogger({
79
77
  state.cachedLogs.add({
80
78
  date: new Date(),
81
79
  logs: [`⚠ ${message} ${info}`],
82
- fileName: undefined,
83
80
  })
84
81
  })
85
82
 
@@ -87,7 +84,6 @@ export const fileSystemLogger = defineLogger({
87
84
  state.cachedLogs.add({
88
85
  date: new Date(),
89
86
  logs: [`✗ ${error.message}`, error.stack || 'unknown stack'],
90
- fileName: undefined,
91
87
  })
92
88
  })
93
89
 
@@ -95,7 +91,6 @@ export const fileSystemLogger = defineLogger({
95
91
  state.cachedLogs.add({
96
92
  date: new Date(),
97
93
  logs: message.logs,
98
- fileName: undefined,
99
94
  })
100
95
  })
101
96
 
@@ -103,7 +98,6 @@ export const fileSystemLogger = defineLogger({
103
98
  state.cachedLogs.add({
104
99
  date: new Date(),
105
100
  logs: [`Generating ${plugin.name}`],
106
- fileName: undefined,
107
101
  })
108
102
  })
109
103
 
@@ -113,7 +107,6 @@ export const fileSystemLogger = defineLogger({
113
107
  state.cachedLogs.add({
114
108
  date: new Date(),
115
109
  logs: [success ? `${plugin.name} completed in ${durationStr}` : `${plugin.name} failed in ${durationStr}`],
116
- fileName: undefined,
117
110
  })
118
111
  })
119
112
 
@@ -121,7 +114,6 @@ export const fileSystemLogger = defineLogger({
121
114
  state.cachedLogs.add({
122
115
  date: new Date(),
123
116
  logs: [`Start ${files.length} writing:`, ...files.map((file) => file.path)],
124
- fileName: undefined,
125
117
  })
126
118
  })
127
119
 
@@ -134,10 +126,6 @@ export const fileSystemLogger = defineLogger({
134
126
  reset()
135
127
  })
136
128
 
137
- context.on('lifecycle:end', async () => {
138
- // lifecycle:end handler can be used for cleanup if needed in the future
139
- })
140
-
141
129
  // Fallback: Write logs on process exit to handle crashes
142
130
  const exitHandler = () => {
143
131
  // Synchronous write on exit - best effort