@hstm-labs/forge-cli 0.1.11
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.
- package/README.md +56 -0
- package/dist/cli.d.ts +9 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +14 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/deliver.d.ts +14 -0
- package/dist/commands/deliver.d.ts.map +1 -0
- package/dist/commands/deliver.js +92 -0
- package/dist/commands/deliver.js.map +1 -0
- package/dist/commands/generate.d.ts +14 -0
- package/dist/commands/generate.d.ts.map +1 -0
- package/dist/commands/generate.js +168 -0
- package/dist/commands/generate.js.map +1 -0
- package/dist/commands/init.d.ts +15 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +83 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/profile.d.ts +11 -0
- package/dist/commands/profile.d.ts.map +1 -0
- package/dist/commands/profile.js +35 -0
- package/dist/commands/profile.js.map +1 -0
- package/dist/commands/status.d.ts +14 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +104 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/template.d.ts +11 -0
- package/dist/commands/template.d.ts.map +1 -0
- package/dist/commands/template.js +25 -0
- package/dist/commands/template.js.map +1 -0
- package/dist/commands/verify.d.ts +15 -0
- package/dist/commands/verify.d.ts.map +1 -0
- package/dist/commands/verify.js +167 -0
- package/dist/commands/verify.js.map +1 -0
- package/dist/error-handler.d.ts +16 -0
- package/dist/error-handler.d.ts.map +1 -0
- package/dist/error-handler.js +43 -0
- package/dist/error-handler.js.map +1 -0
- package/dist/formatters/agent-mode-formatter.d.ts +167 -0
- package/dist/formatters/agent-mode-formatter.d.ts.map +1 -0
- package/dist/formatters/agent-mode-formatter.js +271 -0
- package/dist/formatters/agent-mode-formatter.js.map +1 -0
- package/dist/formatters/run-status-formatter.d.ts +53 -0
- package/dist/formatters/run-status-formatter.d.ts.map +1 -0
- package/dist/formatters/run-status-formatter.js +267 -0
- package/dist/formatters/run-status-formatter.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/output.d.ts +60 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +78 -0
- package/dist/output.js.map +1 -0
- package/dist/program.d.ts +14 -0
- package/dist/program.d.ts.map +1 -0
- package/dist/program.js +64 -0
- package/dist/program.js.map +1 -0
- package/dist/progress-bar.d.ts +18 -0
- package/dist/progress-bar.d.ts.map +1 -0
- package/dist/progress-bar.js +28 -0
- package/dist/progress-bar.js.map +1 -0
- package/dist/progress-reporter.d.ts +35 -0
- package/dist/progress-reporter.d.ts.map +1 -0
- package/dist/progress-reporter.js +236 -0
- package/dist/progress-reporter.js.map +1 -0
- package/dist/prompts/init-prompts.d.ts +22 -0
- package/dist/prompts/init-prompts.d.ts.map +1 -0
- package/dist/prompts/init-prompts.js +78 -0
- package/dist/prompts/init-prompts.js.map +1 -0
- package/dist/prompts/layout-prompts.d.ts +15 -0
- package/dist/prompts/layout-prompts.d.ts.map +1 -0
- package/dist/prompts/layout-prompts.js +26 -0
- package/dist/prompts/layout-prompts.js.map +1 -0
- package/package.json +46 -0
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent mode formatting helpers for the Forge CLI.
|
|
3
|
+
*
|
|
4
|
+
* Provides box-style and line-style formatters for agent mode workflow steps:
|
|
5
|
+
* prompt export, continue success, continue failure, and status detail.
|
|
6
|
+
* Each formatter has a human-readable and a JSON-serializable variant.
|
|
7
|
+
*/
|
|
8
|
+
import chalk from 'chalk';
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
// Helpers
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
/**
|
|
13
|
+
* Format milliseconds to a human-readable duration string.
|
|
14
|
+
*
|
|
15
|
+
* @param ms - Duration in milliseconds
|
|
16
|
+
* @returns Formatted duration (e.g., "1.2s", "345ms")
|
|
17
|
+
*/
|
|
18
|
+
function formatDuration(ms) {
|
|
19
|
+
if (ms === undefined)
|
|
20
|
+
return '-';
|
|
21
|
+
if (ms < 1000)
|
|
22
|
+
return `${String(ms)}ms`;
|
|
23
|
+
return `${(ms / 1000).toFixed(1)}s`;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Build a box with top/bottom borders and padded content lines.
|
|
27
|
+
*
|
|
28
|
+
* @param lines - Lines of content (no border characters)
|
|
29
|
+
* @param width - Inner width of the box
|
|
30
|
+
* @returns Array of bordered lines
|
|
31
|
+
*/
|
|
32
|
+
function buildBox(lines, width) {
|
|
33
|
+
const top = `┌${'─'.repeat(width + 2)}┐`;
|
|
34
|
+
const bottom = `└${'─'.repeat(width + 2)}┘`;
|
|
35
|
+
const sep = `├${'─'.repeat(width + 2)}┤`;
|
|
36
|
+
const result = [top];
|
|
37
|
+
for (const line of lines) {
|
|
38
|
+
if (line === '---') {
|
|
39
|
+
result.push(sep);
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
// Pad the line to the box width
|
|
43
|
+
const stripped = stripAnsi(line);
|
|
44
|
+
const pad = Math.max(0, width - stripped.length);
|
|
45
|
+
result.push(`│ ${line}${' '.repeat(pad)} │`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
result.push(bottom);
|
|
49
|
+
return result;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Strip ANSI escape codes from a string for length calculation.
|
|
53
|
+
*
|
|
54
|
+
* @param str - Input string possibly containing ANSI codes
|
|
55
|
+
* @returns String with ANSI codes removed
|
|
56
|
+
*/
|
|
57
|
+
function stripAnsi(str) {
|
|
58
|
+
// eslint-disable-next-line no-control-regex
|
|
59
|
+
return str.replace(/\x1B\[[0-9;]*m/g, '');
|
|
60
|
+
}
|
|
61
|
+
// ---------------------------------------------------------------------------
|
|
62
|
+
// Formatters — Human-Readable
|
|
63
|
+
// ---------------------------------------------------------------------------
|
|
64
|
+
/**
|
|
65
|
+
* Format the agent prompt export box shown after initial prompt export.
|
|
66
|
+
*
|
|
67
|
+
* @param options - Export details
|
|
68
|
+
* @returns Formatted box string
|
|
69
|
+
*/
|
|
70
|
+
export function formatAgentPromptExport(options) {
|
|
71
|
+
const width = 49;
|
|
72
|
+
const lines = [
|
|
73
|
+
chalk.bold('Forge Agent Mode — Prompt Exported'),
|
|
74
|
+
'---',
|
|
75
|
+
`Stage: ${options.stageName}`,
|
|
76
|
+
`Run: ${options.runId}`,
|
|
77
|
+
`Prompt: ${options.promptPath}`,
|
|
78
|
+
'',
|
|
79
|
+
chalk.bold('Next Steps:'),
|
|
80
|
+
'1. Open the prompt file above',
|
|
81
|
+
'2. Submit it to your IDE agent',
|
|
82
|
+
' (Cursor, Claude Code, Windsurf, etc.)',
|
|
83
|
+
'3. Wait for the agent to complete',
|
|
84
|
+
`4. Run: ${chalk.bold('forge generate --continue')}`,
|
|
85
|
+
];
|
|
86
|
+
return buildBox(lines, width).join('\n');
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Format the successful continue validation message.
|
|
90
|
+
*
|
|
91
|
+
* @param options - Continue success details
|
|
92
|
+
* @returns Formatted string
|
|
93
|
+
*/
|
|
94
|
+
export function formatAgentContinueSuccess(options) {
|
|
95
|
+
const lines = [];
|
|
96
|
+
const artifactLabel = options.artifactCount === 1 ? 'artifact' : 'artifacts';
|
|
97
|
+
lines.push(chalk.green(`✓ Agent output validated for stage '${options.stageName}'`));
|
|
98
|
+
lines.push(` Files: ${String(options.artifactCount)} ${artifactLabel} found`);
|
|
99
|
+
if (options.nextStageName !== undefined) {
|
|
100
|
+
lines.push(` Next: Proceeding to stage '${options.nextStageName}'...`);
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
lines.push('');
|
|
104
|
+
lines.push(` Pipeline completed! Run: ${chalk.bold(`forge status ${options.runId}`)}`);
|
|
105
|
+
}
|
|
106
|
+
return lines.join('\n');
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Format the failed continue validation message.
|
|
110
|
+
*
|
|
111
|
+
* @param options - Continue failure details
|
|
112
|
+
* @returns Formatted string
|
|
113
|
+
*/
|
|
114
|
+
export function formatAgentContinueFailure(options) {
|
|
115
|
+
const lines = [];
|
|
116
|
+
lines.push(chalk.red(`✗ Agent output validation failed for stage '${options.stageName}'`));
|
|
117
|
+
if (options.errors.length > 0) {
|
|
118
|
+
lines.push('');
|
|
119
|
+
lines.push(' Errors:');
|
|
120
|
+
for (const error of options.errors) {
|
|
121
|
+
lines.push(` - ${error}`);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
if (options.followUpPromptPath !== undefined) {
|
|
125
|
+
lines.push('');
|
|
126
|
+
lines.push(` Follow-up prompt: ${options.followUpPromptPath}`);
|
|
127
|
+
}
|
|
128
|
+
lines.push('');
|
|
129
|
+
lines.push(chalk.bold(' Next Steps:'));
|
|
130
|
+
lines.push(' 1. Review the validation errors above');
|
|
131
|
+
if (options.followUpPromptPath !== undefined) {
|
|
132
|
+
lines.push(' 2. Open the follow-up prompt file');
|
|
133
|
+
lines.push(' 3. Submit it to your IDE agent to fix the issues');
|
|
134
|
+
lines.push(` 4. Run: ${chalk.bold('forge generate --continue')}`);
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
lines.push(' 2. Fix the issues in the output directory');
|
|
138
|
+
lines.push(` 3. Run: ${chalk.bold('forge generate --continue')}`);
|
|
139
|
+
}
|
|
140
|
+
return lines.join('\n');
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Format the AWAITING_AGENT status detail for `forge status`.
|
|
144
|
+
*
|
|
145
|
+
* @param options - Status detail options
|
|
146
|
+
* @returns Formatted string
|
|
147
|
+
*/
|
|
148
|
+
export function formatAgentStatusDetail(options) {
|
|
149
|
+
const lines = [];
|
|
150
|
+
lines.push(`Run ${options.runId} — ${chalk.cyan('AWAITING_AGENT')}`);
|
|
151
|
+
lines.push(` Awaiting: ${options.awaitingStageName} (stage ${String(options.stageIndex)}/${String(options.totalStages)})`);
|
|
152
|
+
lines.push(` Prompt: ${options.promptPath}`);
|
|
153
|
+
lines.push(` Started: ${options.startedAt}`);
|
|
154
|
+
if (options.completedStages.length > 0) {
|
|
155
|
+
lines.push('');
|
|
156
|
+
lines.push(' Completed stages:');
|
|
157
|
+
for (const stage of options.completedStages) {
|
|
158
|
+
const duration = stage.durationMs !== undefined
|
|
159
|
+
? ` (${formatDuration(stage.durationMs)})`
|
|
160
|
+
: '';
|
|
161
|
+
lines.push(` ${chalk.green('✓')} ${stage.name}${duration}`);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
lines.push('');
|
|
165
|
+
lines.push(` To continue: ${chalk.bold('forge generate --continue')}`);
|
|
166
|
+
return lines.join('\n');
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Build a JSON-serializable object for the agent prompt export.
|
|
170
|
+
*
|
|
171
|
+
* @param options - Export details
|
|
172
|
+
* @returns JSON-serializable object
|
|
173
|
+
*/
|
|
174
|
+
export function agentPromptExportToJson(options) {
|
|
175
|
+
return {
|
|
176
|
+
type: 'agent-prompt-export',
|
|
177
|
+
stageName: options.stageName,
|
|
178
|
+
runId: options.runId,
|
|
179
|
+
promptPath: options.promptPath,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Build a JSON-serializable object for agent continue success.
|
|
184
|
+
*
|
|
185
|
+
* @param options - Continue success details
|
|
186
|
+
* @returns JSON-serializable object
|
|
187
|
+
*/
|
|
188
|
+
export function agentContinueSuccessToJson(options) {
|
|
189
|
+
return {
|
|
190
|
+
type: 'agent-continue-success',
|
|
191
|
+
stageName: options.stageName,
|
|
192
|
+
runId: options.runId,
|
|
193
|
+
artifactCount: options.artifactCount,
|
|
194
|
+
nextStageName: options.nextStageName,
|
|
195
|
+
pipelineComplete: options.nextStageName === undefined,
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Build a JSON-serializable object for agent continue failure.
|
|
200
|
+
*
|
|
201
|
+
* @param options - Continue failure details
|
|
202
|
+
* @returns JSON-serializable object
|
|
203
|
+
*/
|
|
204
|
+
export function agentContinueFailureToJson(options) {
|
|
205
|
+
return {
|
|
206
|
+
type: 'agent-continue-failure',
|
|
207
|
+
stageName: options.stageName,
|
|
208
|
+
runId: options.runId,
|
|
209
|
+
errors: options.errors,
|
|
210
|
+
followUpPromptPath: options.followUpPromptPath,
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Build a JSON-serializable object for agent status detail.
|
|
215
|
+
*
|
|
216
|
+
* @param options - Status detail options
|
|
217
|
+
* @returns JSON-serializable object
|
|
218
|
+
*/
|
|
219
|
+
export function agentStatusDetailToJson(options) {
|
|
220
|
+
return {
|
|
221
|
+
type: 'agent-status-detail',
|
|
222
|
+
runId: options.runId,
|
|
223
|
+
status: 'AWAITING_AGENT',
|
|
224
|
+
awaitingStageName: options.awaitingStageName,
|
|
225
|
+
stageIndex: options.stageIndex,
|
|
226
|
+
totalStages: options.totalStages,
|
|
227
|
+
promptPath: options.promptPath,
|
|
228
|
+
startedAt: options.startedAt,
|
|
229
|
+
completedStages: options.completedStages,
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
// ---------------------------------------------------------------------------
|
|
233
|
+
// Helpers for building options from store data
|
|
234
|
+
// ---------------------------------------------------------------------------
|
|
235
|
+
/**
|
|
236
|
+
* Build {@link AgentStatusDetailOptions} from run store data.
|
|
237
|
+
*
|
|
238
|
+
* @param runId - Run identifier
|
|
239
|
+
* @param awaitingStage - The stage record that is AWAITING_AGENT
|
|
240
|
+
* @param allStages - All stage records for the run
|
|
241
|
+
* @param totalPipelineStages - Total stages in the pipeline
|
|
242
|
+
* @param startedAt - Run start time
|
|
243
|
+
* @param forgeDir - Path to .forge directory (for prompt path construction)
|
|
244
|
+
* @returns Options for formatAgentStatusDetail
|
|
245
|
+
*/
|
|
246
|
+
export function buildAgentStatusOptions(runId, awaitingStage, allStages, totalPipelineStages, startedAt, forgeDir) {
|
|
247
|
+
const completedStages = allStages
|
|
248
|
+
.filter((s) => s.status === 'COMPLETED')
|
|
249
|
+
.map((s) => ({
|
|
250
|
+
name: s.stageName,
|
|
251
|
+
durationMs: s.durationMs,
|
|
252
|
+
}));
|
|
253
|
+
// Determine 1-based stage index from default order
|
|
254
|
+
const stageOrder = [
|
|
255
|
+
'validate', 'architect', 'services-generate', 'apps-generate',
|
|
256
|
+
'infra-generate', 'security-generate', 'seed-data', 'review',
|
|
257
|
+
'test-generate', 'verify', 'deliver', 'run-verify',
|
|
258
|
+
];
|
|
259
|
+
const orderIndex = stageOrder.indexOf(awaitingStage.stageName);
|
|
260
|
+
const stageIndex = orderIndex >= 0 ? orderIndex + 1 : 1;
|
|
261
|
+
return {
|
|
262
|
+
runId,
|
|
263
|
+
awaitingStageName: awaitingStage.stageName,
|
|
264
|
+
stageIndex,
|
|
265
|
+
totalStages: totalPipelineStages,
|
|
266
|
+
promptPath: `${forgeDir}/prompts/${runId}/${awaitingStage.stageName}.md`,
|
|
267
|
+
startedAt,
|
|
268
|
+
completedStages,
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
//# sourceMappingURL=agent-mode-formatter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-mode-formatter.js","sourceRoot":"","sources":["../../src/formatters/agent-mode-formatter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AA2D1B,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E;;;;;GAKG;AACH,SAAS,cAAc,CAAC,EAAsB;IAC5C,IAAI,EAAE,KAAK,SAAS;QAAE,OAAO,GAAG,CAAC;IACjC,IAAI,EAAE,GAAG,IAAI;QAAE,OAAO,GAAG,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC;IACxC,OAAO,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AACtC,CAAC;AAED;;;;;;GAMG;AACH,SAAS,QAAQ,CAAC,KAAe,EAAE,KAAa;IAC9C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC;IACzC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC;IAC5C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC;IACzC,MAAM,MAAM,GAAa,CAAC,GAAG,CAAC,CAAC;IAE/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;YACnB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,gCAAgC;YAChC,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;YACjC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;YACjD,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;GAKG;AACH,SAAS,SAAS,CAAC,GAAW;IAC5B,4CAA4C;IAC5C,OAAO,GAAG,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED,8EAA8E;AAC9E,8BAA8B;AAC9B,8EAA8E;AAE9E;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CACrC,OAAiC;IAEjC,MAAM,KAAK,GAAG,EAAE,CAAC;IACjB,MAAM,KAAK,GAAG;QACZ,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC;QAChD,KAAK;QACL,aAAa,OAAO,CAAC,SAAS,EAAE;QAChC,aAAa,OAAO,CAAC,KAAK,EAAE;QAC5B,aAAa,OAAO,CAAC,UAAU,EAAE;QACjC,EAAE;QACF,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC;QACzB,+BAA+B;QAC/B,gCAAgC;QAChC,0CAA0C;QAC1C,mCAAmC;QACnC,WAAW,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,EAAE;KACrD,CAAC;IAEF,OAAO,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CACxC,OAAoC;IAEpC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC;IAE7E,KAAK,CAAC,IAAI,CACR,KAAK,CAAC,KAAK,CAAC,uCAAuC,OAAO,CAAC,SAAS,GAAG,CAAC,CACzE,CAAC;IACF,KAAK,CAAC,IAAI,CACR,YAAY,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,aAAa,QAAQ,CACnE,CAAC;IAEF,IAAI,OAAO,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QACxC,KAAK,CAAC,IAAI,CACR,gCAAgC,OAAO,CAAC,aAAa,MAAM,CAC5D,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CACR,8BAA8B,KAAK,CAAC,IAAI,CAAC,gBAAgB,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,CAC5E,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CACxC,OAAoC;IAEpC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CACR,KAAK,CAAC,GAAG,CACP,+CAA+C,OAAO,CAAC,SAAS,GAAG,CACpE,CACF,CAAC;IAEF,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxB,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,kBAAkB,KAAK,SAAS,EAAE,CAAC;QAC7C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CACR,uBAAuB,OAAO,CAAC,kBAAkB,EAAE,CACpD,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;IACxC,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IACtD,IAAI,OAAO,CAAC,kBAAkB,KAAK,SAAS,EAAE,CAAC;QAC7C,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;QAClD,KAAK,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;QACjE,KAAK,CAAC,IAAI,CAAC,aAAa,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,EAAE,CAAC,CAAC;IACrE,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;QAC1D,KAAK,CAAC,IAAI,CAAC,aAAa,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CACrC,OAAiC;IAEjC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CACR,OAAO,OAAO,CAAC,KAAK,MAAM,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CACzD,CAAC;IACF,KAAK,CAAC,IAAI,CACR,eAAe,OAAO,CAAC,iBAAiB,WAAW,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAChH,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,eAAe,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAChD,KAAK,CAAC,IAAI,CAAC,eAAe,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAE/C,IAAI,OAAO,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAClC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;YAC5C,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,KAAK,SAAS;gBAC7C,CAAC,CAAC,KAAK,cAAc,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG;gBAC1C,CAAC,CAAC,EAAE,CAAC;YACP,KAAK,CAAC,IAAI,CACR,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,QAAQ,EAAE,CACnD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CACR,kBAAkB,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,EAAE,CAC5D,CAAC;IAEF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AA8CD;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CACrC,OAAiC;IAEjC,OAAO;QACL,IAAI,EAAE,qBAAqB;QAC3B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,UAAU,EAAE,OAAO,CAAC,UAAU;KAC/B,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CACxC,OAAoC;IAEpC,OAAO;QACL,IAAI,EAAE,wBAAwB;QAC9B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,gBAAgB,EAAE,OAAO,CAAC,aAAa,KAAK,SAAS;KACtD,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CACxC,OAAoC;IAEpC,OAAO;QACL,IAAI,EAAE,wBAAwB;QAC9B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;KAC/C,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CACrC,OAAiC;IAEjC,OAAO;QACL,IAAI,EAAE,qBAAqB;QAC3B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,gBAAgB;QACxB,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;QAC5C,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,eAAe,EAAE,OAAO,CAAC,eAAe;KACzC,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,+CAA+C;AAC/C,8EAA8E;AAE9E;;;;;;;;;;GAUG;AACH,MAAM,UAAU,uBAAuB,CACrC,KAAa,EACb,aAAkC,EAClC,SAAgC,EAChC,mBAA2B,EAC3B,SAAiB,EACjB,QAAgB;IAEhB,MAAM,eAAe,GAAG,SAAS;SAC9B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC;SACvC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACX,IAAI,EAAE,CAAC,CAAC,SAAS;QACjB,UAAU,EAAE,CAAC,CAAC,UAAU;KACzB,CAAC,CAAC,CAAC;IAEN,mDAAmD;IACnD,MAAM,UAAU,GAAyB;QACvC,UAAU,EAAE,WAAW,EAAE,mBAAmB,EAAE,eAAe;QAC7D,gBAAgB,EAAE,mBAAmB,EAAE,WAAW,EAAE,QAAQ;QAC5D,eAAe,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY;KACnD,CAAC;IACF,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IAC/D,MAAM,UAAU,GAAG,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAExD,OAAO;QACL,KAAK;QACL,iBAAiB,EAAE,aAAa,CAAC,SAAS;QAC1C,UAAU;QACV,WAAW,EAAE,mBAAmB;QAChC,UAAU,EAAE,GAAG,QAAQ,YAAY,KAAK,IAAI,aAAa,CAAC,SAAS,KAAK;QACxE,SAAS;QACT,eAAe;KAChB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Formatting helpers for run status display in the Forge CLI.
|
|
3
|
+
*
|
|
4
|
+
* Provides table and detail formatters for runs, stages, and benchmark data.
|
|
5
|
+
* Uses chalk for terminal styling with status-aware coloring.
|
|
6
|
+
*/
|
|
7
|
+
import type { RunStatus, StageStatus, RunSummary, GenerationRun, PipelineStageRecord, Artifact } from '@hstm-labs/forge-common';
|
|
8
|
+
import type { BenchmarkReport, BenchmarkRunSummary } from '@hstm-labs/forge-common';
|
|
9
|
+
/**
|
|
10
|
+
* Apply color to a run status string based on its value.
|
|
11
|
+
*
|
|
12
|
+
* @param status - The run status to colorize
|
|
13
|
+
* @returns Chalk-styled status string
|
|
14
|
+
*/
|
|
15
|
+
export declare function colorizeRunStatus(status: RunStatus): string;
|
|
16
|
+
/**
|
|
17
|
+
* Apply color to a stage status string based on its value.
|
|
18
|
+
*
|
|
19
|
+
* @param status - The stage status to colorize
|
|
20
|
+
* @returns Chalk-styled status string
|
|
21
|
+
*/
|
|
22
|
+
export declare function colorizeStageStatus(status: StageStatus): string;
|
|
23
|
+
/**
|
|
24
|
+
* Format a list of run summaries as a table.
|
|
25
|
+
*
|
|
26
|
+
* @param runs - Array of run summaries to display
|
|
27
|
+
* @returns Formatted table string
|
|
28
|
+
*/
|
|
29
|
+
export declare function formatRunSummaryTable(runs: RunSummary[]): string;
|
|
30
|
+
/**
|
|
31
|
+
* Format detailed run information including stages and artifacts.
|
|
32
|
+
*
|
|
33
|
+
* @param run - The generation run
|
|
34
|
+
* @param stages - Pipeline stage records for the run
|
|
35
|
+
* @param artifacts - Artifacts produced by the run
|
|
36
|
+
* @returns Formatted detail string
|
|
37
|
+
*/
|
|
38
|
+
export declare function formatRunDetail(run: GenerationRun, stages: PipelineStageRecord[], artifacts: Artifact[]): string;
|
|
39
|
+
/**
|
|
40
|
+
* Format a list of benchmark run summaries.
|
|
41
|
+
*
|
|
42
|
+
* @param runs - Array of benchmark run summaries
|
|
43
|
+
* @returns Formatted benchmark summary string
|
|
44
|
+
*/
|
|
45
|
+
export declare function formatBenchmarkSummary(runs: BenchmarkRunSummary[]): string;
|
|
46
|
+
/**
|
|
47
|
+
* Format a full benchmark report for a single run.
|
|
48
|
+
*
|
|
49
|
+
* @param report - The benchmark report
|
|
50
|
+
* @returns Formatted benchmark detail string
|
|
51
|
+
*/
|
|
52
|
+
export declare function formatBenchmarkDetail(report: BenchmarkReport): string;
|
|
53
|
+
//# sourceMappingURL=run-status-formatter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-status-formatter.d.ts","sourceRoot":"","sources":["../../src/formatters/run-status-formatter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EACV,SAAS,EACT,WAAW,EACX,UAAU,EACV,aAAa,EACb,mBAAmB,EACnB,QAAQ,EACT,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EACV,eAAe,EACf,mBAAmB,EACpB,MAAM,yBAAyB,CAAC;AAMjC;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAqB3D;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAgB/D;AA6CD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,MAAM,CAoBhE;AAMD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,aAAa,EAClB,MAAM,EAAE,mBAAmB,EAAE,EAC7B,SAAS,EAAE,QAAQ,EAAE,GACpB,MAAM,CAkFR;AAMD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,mBAAmB,EAAE,GAC1B,MAAM,CAsBR;AAMD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAsDrE"}
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Formatting helpers for run status display in the Forge CLI.
|
|
3
|
+
*
|
|
4
|
+
* Provides table and detail formatters for runs, stages, and benchmark data.
|
|
5
|
+
* Uses chalk for terminal styling with status-aware coloring.
|
|
6
|
+
*/
|
|
7
|
+
import chalk from 'chalk';
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
// Status Coloring
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
/**
|
|
12
|
+
* Apply color to a run status string based on its value.
|
|
13
|
+
*
|
|
14
|
+
* @param status - The run status to colorize
|
|
15
|
+
* @returns Chalk-styled status string
|
|
16
|
+
*/
|
|
17
|
+
export function colorizeRunStatus(status) {
|
|
18
|
+
switch (status) {
|
|
19
|
+
case 'DELIVERED':
|
|
20
|
+
case 'VERIFIED':
|
|
21
|
+
case 'GENERATED':
|
|
22
|
+
case 'VALIDATED':
|
|
23
|
+
return chalk.green(status);
|
|
24
|
+
case 'FAILED':
|
|
25
|
+
return chalk.red(status);
|
|
26
|
+
case 'VALIDATING':
|
|
27
|
+
case 'GENERATING':
|
|
28
|
+
case 'VERIFYING':
|
|
29
|
+
case 'DELIVERING':
|
|
30
|
+
return chalk.yellow(status);
|
|
31
|
+
case 'AWAITING_AGENT':
|
|
32
|
+
return chalk.cyan(status);
|
|
33
|
+
case 'INITIALIZED':
|
|
34
|
+
return chalk.dim(status);
|
|
35
|
+
default:
|
|
36
|
+
return status;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Apply color to a stage status string based on its value.
|
|
41
|
+
*
|
|
42
|
+
* @param status - The stage status to colorize
|
|
43
|
+
* @returns Chalk-styled status string
|
|
44
|
+
*/
|
|
45
|
+
export function colorizeStageStatus(status) {
|
|
46
|
+
switch (status) {
|
|
47
|
+
case 'COMPLETED':
|
|
48
|
+
return chalk.green(status);
|
|
49
|
+
case 'FAILED':
|
|
50
|
+
return chalk.red(status);
|
|
51
|
+
case 'RUNNING':
|
|
52
|
+
return chalk.yellow(status);
|
|
53
|
+
case 'AWAITING_AGENT':
|
|
54
|
+
return chalk.cyan(status);
|
|
55
|
+
case 'PENDING':
|
|
56
|
+
case 'SKIPPED':
|
|
57
|
+
return chalk.dim(status);
|
|
58
|
+
default:
|
|
59
|
+
return status;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// ---------------------------------------------------------------------------
|
|
63
|
+
// Helpers
|
|
64
|
+
// ---------------------------------------------------------------------------
|
|
65
|
+
/**
|
|
66
|
+
* Truncate a string to the specified length with ellipsis.
|
|
67
|
+
*
|
|
68
|
+
* @param str - String to truncate
|
|
69
|
+
* @param maxLen - Maximum length
|
|
70
|
+
* @returns Truncated string
|
|
71
|
+
*/
|
|
72
|
+
function truncate(str, maxLen) {
|
|
73
|
+
if (str.length <= maxLen)
|
|
74
|
+
return str;
|
|
75
|
+
return str.slice(0, maxLen) + '…';
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Format a duration in milliseconds to a human-readable string.
|
|
79
|
+
*
|
|
80
|
+
* @param ms - Duration in milliseconds
|
|
81
|
+
* @returns Formatted duration string (e.g., "1.2s", "345ms")
|
|
82
|
+
*/
|
|
83
|
+
function formatDuration(ms) {
|
|
84
|
+
if (ms === undefined)
|
|
85
|
+
return '-';
|
|
86
|
+
if (ms < 1000)
|
|
87
|
+
return `${String(ms)}ms`;
|
|
88
|
+
return `${(ms / 1000).toFixed(1)}s`;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Pad a string to the right to the given width.
|
|
92
|
+
*
|
|
93
|
+
* @param str - String to pad
|
|
94
|
+
* @param width - Target width
|
|
95
|
+
* @returns Padded string
|
|
96
|
+
*/
|
|
97
|
+
function padRight(str, width) {
|
|
98
|
+
return str + ' '.repeat(Math.max(0, width - str.length));
|
|
99
|
+
}
|
|
100
|
+
// ---------------------------------------------------------------------------
|
|
101
|
+
// Run Summary Table
|
|
102
|
+
// ---------------------------------------------------------------------------
|
|
103
|
+
/**
|
|
104
|
+
* Format a list of run summaries as a table.
|
|
105
|
+
*
|
|
106
|
+
* @param runs - Array of run summaries to display
|
|
107
|
+
* @returns Formatted table string
|
|
108
|
+
*/
|
|
109
|
+
export function formatRunSummaryTable(runs) {
|
|
110
|
+
if (runs.length === 0) {
|
|
111
|
+
return chalk.dim('No runs found.');
|
|
112
|
+
}
|
|
113
|
+
const header = `${padRight('RUN ID', 10)} ${padRight('STATUS', 16)} ${padRight('SPEC', 20)} ${padRight('PROFILE', 22)} ${padRight('STARTED', 20)} COMPLETED`;
|
|
114
|
+
const separator = chalk.dim('─'.repeat(header.length));
|
|
115
|
+
const rows = runs.map((run) => {
|
|
116
|
+
const id = truncate(run.id, 8);
|
|
117
|
+
const status = colorizeRunStatus(run.status);
|
|
118
|
+
const spec = truncate(run.specPath, 18);
|
|
119
|
+
const profile = truncate(run.profileName, 20);
|
|
120
|
+
const started = run.startedAt.slice(0, 19);
|
|
121
|
+
const completed = run.completedAt?.slice(0, 19) ?? '-';
|
|
122
|
+
return `${padRight(id, 10)} ${padRight(status, 27)} ${padRight(spec, 20)} ${padRight(profile, 22)} ${padRight(started, 20)} ${completed}`;
|
|
123
|
+
});
|
|
124
|
+
return [chalk.bold(header), separator, ...rows].join('\n');
|
|
125
|
+
}
|
|
126
|
+
// ---------------------------------------------------------------------------
|
|
127
|
+
// Run Detail
|
|
128
|
+
// ---------------------------------------------------------------------------
|
|
129
|
+
/**
|
|
130
|
+
* Format detailed run information including stages and artifacts.
|
|
131
|
+
*
|
|
132
|
+
* @param run - The generation run
|
|
133
|
+
* @param stages - Pipeline stage records for the run
|
|
134
|
+
* @param artifacts - Artifacts produced by the run
|
|
135
|
+
* @returns Formatted detail string
|
|
136
|
+
*/
|
|
137
|
+
export function formatRunDetail(run, stages, artifacts) {
|
|
138
|
+
const lines = [];
|
|
139
|
+
// Run header
|
|
140
|
+
lines.push(chalk.bold('Run Details'));
|
|
141
|
+
lines.push(chalk.dim('─'.repeat(60)));
|
|
142
|
+
lines.push(` Run ID: ${run.id}`);
|
|
143
|
+
lines.push(` Status: ${colorizeRunStatus(run.status)}`);
|
|
144
|
+
lines.push(` Spec: ${run.specPath}`);
|
|
145
|
+
lines.push(` Profile: ${run.profileName}`);
|
|
146
|
+
lines.push(` Started: ${run.startedAt}`);
|
|
147
|
+
lines.push(` Completed: ${run.completedAt ?? chalk.dim('in progress')}`);
|
|
148
|
+
if (run.benchmark) {
|
|
149
|
+
lines.push(` Benchmark: ${chalk.cyan('enabled')}`);
|
|
150
|
+
}
|
|
151
|
+
// Failed run info
|
|
152
|
+
if (run.status === 'FAILED') {
|
|
153
|
+
lines.push('');
|
|
154
|
+
lines.push(chalk.red.bold(' Failure Information'));
|
|
155
|
+
lines.push(` Failed Stage: ${chalk.red(run.failedStage ?? 'unknown')}`);
|
|
156
|
+
lines.push(` Error: ${chalk.red(run.errorMessage ?? 'unknown')}`);
|
|
157
|
+
}
|
|
158
|
+
// AWAITING_AGENT info
|
|
159
|
+
if (run.status === 'AWAITING_AGENT') {
|
|
160
|
+
const awaitingStage = stages.find((s) => s.status === 'AWAITING_AGENT');
|
|
161
|
+
lines.push('');
|
|
162
|
+
lines.push(chalk.cyan.bold(' Awaiting Agent'));
|
|
163
|
+
lines.push(` Stage: ${chalk.cyan(awaitingStage?.stageName ?? 'unknown')}`);
|
|
164
|
+
lines.push(chalk.dim(' Run: forge generate --continue'));
|
|
165
|
+
}
|
|
166
|
+
// Stages
|
|
167
|
+
if (stages.length > 0) {
|
|
168
|
+
lines.push('');
|
|
169
|
+
lines.push(chalk.bold(' Stages'));
|
|
170
|
+
lines.push(chalk.dim(` ${padRight('NAME', 18)} ${padRight('STATUS', 16)} ${padRight('DURATION', 10)} ARTIFACTS`));
|
|
171
|
+
for (const stage of stages) {
|
|
172
|
+
const name = padRight(stage.stageName, 18);
|
|
173
|
+
const status = colorizeStageStatus(stage.status);
|
|
174
|
+
const duration = padRight(formatDuration(stage.durationMs), 10);
|
|
175
|
+
const artCount = String(stage.artifactCount);
|
|
176
|
+
lines.push(` ${name} ${padRight(status, 27)} ${duration} ${artCount}`);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
// Artifacts summary
|
|
180
|
+
if (artifacts.length > 0) {
|
|
181
|
+
lines.push('');
|
|
182
|
+
lines.push(chalk.bold(` Artifacts (${String(artifacts.length)})`));
|
|
183
|
+
for (const artifact of artifacts) {
|
|
184
|
+
const size = artifact.sizeBytes < 1024
|
|
185
|
+
? `${String(artifact.sizeBytes)}B`
|
|
186
|
+
: `${(artifact.sizeBytes / 1024).toFixed(1)}KB`;
|
|
187
|
+
lines.push(chalk.dim(` ${artifact.stageName}/`) + `${artifact.filePath} ${chalk.dim(`(${size})`)}`);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
return lines.join('\n');
|
|
191
|
+
}
|
|
192
|
+
// ---------------------------------------------------------------------------
|
|
193
|
+
// Benchmark Summary
|
|
194
|
+
// ---------------------------------------------------------------------------
|
|
195
|
+
/**
|
|
196
|
+
* Format a list of benchmark run summaries.
|
|
197
|
+
*
|
|
198
|
+
* @param runs - Array of benchmark run summaries
|
|
199
|
+
* @returns Formatted benchmark summary string
|
|
200
|
+
*/
|
|
201
|
+
export function formatBenchmarkSummary(runs) {
|
|
202
|
+
if (runs.length === 0) {
|
|
203
|
+
return chalk.dim('No benchmark runs found.');
|
|
204
|
+
}
|
|
205
|
+
const header = `${padRight('RUN ID', 10)} ${padRight('STARTED', 20)} ${padRight('DURATION', 10)} ${padRight('PROVIDER', 12)} ${padRight('MODEL', 18)} ${padRight('LLM CALLS', 10)} ${padRight('TOKENS', 10)} RETRIES`;
|
|
206
|
+
const separator = chalk.dim('─'.repeat(header.length));
|
|
207
|
+
const rows = runs.map((run) => {
|
|
208
|
+
const id = truncate(run.runId, 8);
|
|
209
|
+
const started = run.startedAt.slice(0, 19);
|
|
210
|
+
const duration = formatDuration(run.totalDurationMs);
|
|
211
|
+
const provider = truncate(run.provider || '-', 10);
|
|
212
|
+
const model = truncate(run.model || '-', 16);
|
|
213
|
+
const llmCalls = String(run.totalLlmCalls);
|
|
214
|
+
const tokens = String(run.totalTokens);
|
|
215
|
+
const retries = String(run.totalRetries);
|
|
216
|
+
return `${padRight(id, 10)} ${padRight(started, 20)} ${padRight(duration, 10)} ${padRight(provider, 12)} ${padRight(model, 18)} ${padRight(llmCalls, 10)} ${padRight(tokens, 10)} ${retries}`;
|
|
217
|
+
});
|
|
218
|
+
return [chalk.bold(header), separator, ...rows].join('\n');
|
|
219
|
+
}
|
|
220
|
+
// ---------------------------------------------------------------------------
|
|
221
|
+
// Benchmark Detail
|
|
222
|
+
// ---------------------------------------------------------------------------
|
|
223
|
+
/**
|
|
224
|
+
* Format a full benchmark report for a single run.
|
|
225
|
+
*
|
|
226
|
+
* @param report - The benchmark report
|
|
227
|
+
* @returns Formatted benchmark detail string
|
|
228
|
+
*/
|
|
229
|
+
export function formatBenchmarkDetail(report) {
|
|
230
|
+
const lines = [];
|
|
231
|
+
lines.push(chalk.bold('Benchmark Report'));
|
|
232
|
+
lines.push(chalk.dim('─'.repeat(60)));
|
|
233
|
+
lines.push(` Run ID: ${report.runId}`);
|
|
234
|
+
lines.push(` Provider: ${report.provider || '-'}`);
|
|
235
|
+
lines.push(` Model: ${report.model || '-'}`);
|
|
236
|
+
lines.push(` Spec: ${report.specPath}`);
|
|
237
|
+
lines.push(` Profile: ${report.profileName}`);
|
|
238
|
+
lines.push(` Duration: ${formatDuration(report.totalDurationMs)}`);
|
|
239
|
+
lines.push(` Started: ${report.startedAt}`);
|
|
240
|
+
lines.push(` Completed: ${report.completedAt}`);
|
|
241
|
+
// Totals
|
|
242
|
+
lines.push('');
|
|
243
|
+
lines.push(chalk.bold(' Totals'));
|
|
244
|
+
lines.push(` LLM Calls: ${String(report.totals.llmCalls)}`);
|
|
245
|
+
lines.push(` LLM Latency: ${formatDuration(report.totals.llmLatencyMs)}`);
|
|
246
|
+
lines.push(` Prompt Tokens: ${String(report.totals.promptTokens)}`);
|
|
247
|
+
lines.push(` Completion Tokens: ${String(report.totals.completionTokens)}`);
|
|
248
|
+
lines.push(` Retries: ${String(report.totals.retries)}`);
|
|
249
|
+
lines.push(` Artifacts: ${String(report.totals.artifacts)}`);
|
|
250
|
+
// Stage breakdown
|
|
251
|
+
if (report.stages.length > 0) {
|
|
252
|
+
lines.push('');
|
|
253
|
+
lines.push(chalk.bold(' Stage Breakdown'));
|
|
254
|
+
lines.push(chalk.dim(` ${padRight('STAGE', 18)} ${padRight('DURATION', 10)} ${padRight('LLM CALLS', 10)} ${padRight('TOKENS', 10)} ${padRight('RETRIES', 8)} ARTIFACTS`));
|
|
255
|
+
for (const stage of report.stages) {
|
|
256
|
+
const name = padRight(stage.stageName, 18);
|
|
257
|
+
const duration = padRight(formatDuration(stage.durationMs), 10);
|
|
258
|
+
const llmCalls = padRight(String(stage.llmCalls), 10);
|
|
259
|
+
const tokens = padRight(String(stage.promptTokens + stage.completionTokens), 10);
|
|
260
|
+
const retries = padRight(String(stage.retryCount), 8);
|
|
261
|
+
const artifacts = String(stage.artifactCount);
|
|
262
|
+
lines.push(` ${name} ${duration} ${llmCalls} ${tokens} ${retries} ${artifacts}`);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
return lines.join('\n');
|
|
266
|
+
}
|
|
267
|
+
//# sourceMappingURL=run-status-formatter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-status-formatter.js","sourceRoot":"","sources":["../../src/formatters/run-status-formatter.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { createProgram } from './program.js';
|
|
2
|
+
export { formatSuccess, formatError, formatWarning, formatInfo, printJson, globalOptions, applyColorSettings, } from './output.js';
|
|
3
|
+
export type { GlobalOptions } from './output.js';
|
|
4
|
+
export { handleError } from './error-handler.js';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EACL,aAAa,EACb,WAAW,EACX,aAAa,EACb,UAAU,EACV,SAAS,EACT,aAAa,EACb,kBAAkB,GACnB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
// @hstm-labs/forge-cli public API
|
|
2
|
+
export { createProgram } from './program.js';
|
|
3
|
+
export { formatSuccess, formatError, formatWarning, formatInfo, printJson, globalOptions, applyColorSettings, } from './output.js';
|
|
4
|
+
export { handleError } from './error-handler.js';
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,kCAAkC;AAElC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EACL,aAAa,EACb,WAAW,EACX,aAAa,EACb,UAAU,EACV,SAAS,EACT,aAAa,EACb,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC"}
|