@uluops/cli 0.2.0
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/LICENSE +21 -0
- package/README.md +825 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +93 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/analytics.d.ts +6 -0
- package/dist/commands/analytics.d.ts.map +1 -0
- package/dist/commands/analytics.js +445 -0
- package/dist/commands/analytics.js.map +1 -0
- package/dist/commands/auth.d.ts +6 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +496 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/completion.d.ts +7 -0
- package/dist/commands/completion.d.ts.map +1 -0
- package/dist/commands/completion.js +188 -0
- package/dist/commands/completion.js.map +1 -0
- package/dist/commands/config.d.ts +6 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +279 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/definitions.d.ts +6 -0
- package/dist/commands/definitions.d.ts.map +1 -0
- package/dist/commands/definitions.js +229 -0
- package/dist/commands/definitions.js.map +1 -0
- package/dist/commands/deps.d.ts +6 -0
- package/dist/commands/deps.d.ts.map +1 -0
- package/dist/commands/deps.js +87 -0
- package/dist/commands/deps.js.map +1 -0
- package/dist/commands/exec.d.ts +6 -0
- package/dist/commands/exec.d.ts.map +1 -0
- package/dist/commands/exec.js +334 -0
- package/dist/commands/exec.js.map +1 -0
- package/dist/commands/executions.d.ts +6 -0
- package/dist/commands/executions.d.ts.map +1 -0
- package/dist/commands/executions.js +63 -0
- package/dist/commands/executions.js.map +1 -0
- package/dist/commands/forks.d.ts +6 -0
- package/dist/commands/forks.d.ts.map +1 -0
- package/dist/commands/forks.js +145 -0
- package/dist/commands/forks.js.map +1 -0
- package/dist/commands/issues.d.ts +6 -0
- package/dist/commands/issues.d.ts.map +1 -0
- package/dist/commands/issues.js +458 -0
- package/dist/commands/issues.js.map +1 -0
- package/dist/commands/models.d.ts +6 -0
- package/dist/commands/models.d.ts.map +1 -0
- package/dist/commands/models.js +156 -0
- package/dist/commands/models.js.map +1 -0
- package/dist/commands/projects.d.ts +6 -0
- package/dist/commands/projects.d.ts.map +1 -0
- package/dist/commands/projects.js +262 -0
- package/dist/commands/projects.js.map +1 -0
- package/dist/commands/render.d.ts +6 -0
- package/dist/commands/render.d.ts.map +1 -0
- package/dist/commands/render.js +59 -0
- package/dist/commands/render.js.map +1 -0
- package/dist/commands/runs.d.ts +6 -0
- package/dist/commands/runs.d.ts.map +1 -0
- package/dist/commands/runs.js +442 -0
- package/dist/commands/runs.js.map +1 -0
- package/dist/commands/taxonomy.d.ts +6 -0
- package/dist/commands/taxonomy.d.ts.map +1 -0
- package/dist/commands/taxonomy.js +45 -0
- package/dist/commands/taxonomy.js.map +1 -0
- package/dist/commands/translation.d.ts +6 -0
- package/dist/commands/translation.d.ts.map +1 -0
- package/dist/commands/translation.js +85 -0
- package/dist/commands/translation.js.map +1 -0
- package/dist/commands/versions.d.ts +6 -0
- package/dist/commands/versions.d.ts.map +1 -0
- package/dist/commands/versions.js +61 -0
- package/dist/commands/versions.js.map +1 -0
- package/dist/context.d.ts +85 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +386 -0
- package/dist/context.js.map +1 -0
- package/dist/formatters/core.d.ts +31 -0
- package/dist/formatters/core.d.ts.map +1 -0
- package/dist/formatters/core.js +176 -0
- package/dist/formatters/core.js.map +1 -0
- package/dist/formatters/ops.d.ts +43 -0
- package/dist/formatters/ops.d.ts.map +1 -0
- package/dist/formatters/ops.js +112 -0
- package/dist/formatters/ops.js.map +1 -0
- package/dist/formatters/registry.d.ts +41 -0
- package/dist/formatters/registry.d.ts.map +1 -0
- package/dist/formatters/registry.js +167 -0
- package/dist/formatters/registry.js.map +1 -0
- package/dist/formatters/table.d.ts +18 -0
- package/dist/formatters/table.d.ts.map +1 -0
- package/dist/formatters/table.js +76 -0
- package/dist/formatters/table.js.map +1 -0
- package/dist/utils.d.ts +99 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +201 -0
- package/dist/utils.js.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { formatTable, formatKeyValue } from './table.js';
|
|
2
|
+
import { truncate } from '../utils.js';
|
|
3
|
+
/**
|
|
4
|
+
* Format an agent execution result
|
|
5
|
+
*/
|
|
6
|
+
export function formatAgentResult(result) {
|
|
7
|
+
const lines = [];
|
|
8
|
+
// Header
|
|
9
|
+
lines.push(`Agent: ${result.name} v${result.version}`);
|
|
10
|
+
lines.push(`Decision: ${result.decision}`);
|
|
11
|
+
if (result.score !== undefined) {
|
|
12
|
+
lines.push(`Score: ${result.score}/${result.maxScore}`);
|
|
13
|
+
if (result.threshold !== undefined) {
|
|
14
|
+
lines.push(`Threshold: ${result.threshold}`);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
lines.push(`Duration: ${formatDuration(result.durationMs)}`);
|
|
18
|
+
lines.push(`Model: ${result.metrics.model}`);
|
|
19
|
+
if (result.dashboardUrl) {
|
|
20
|
+
lines.push(`Dashboard: ${result.dashboardUrl}`);
|
|
21
|
+
}
|
|
22
|
+
// Categories (validators only)
|
|
23
|
+
if (result.categories && result.categories.length > 0) {
|
|
24
|
+
lines.push('');
|
|
25
|
+
lines.push('Categories:');
|
|
26
|
+
const catColumns = [
|
|
27
|
+
{ header: 'CATEGORY', accessor: 'name', width: 30 },
|
|
28
|
+
{ header: 'SCORE', accessor: (c) => `${c.score}/${c.maxScore}`, width: 10, align: 'right' },
|
|
29
|
+
{ header: 'FINDINGS', accessor: (c) => String(c.findings), width: 10, align: 'right' },
|
|
30
|
+
];
|
|
31
|
+
const catData = result.categories.map((c) => ({
|
|
32
|
+
name: c.name,
|
|
33
|
+
score: c.score,
|
|
34
|
+
maxScore: c.maxScore,
|
|
35
|
+
findings: c.findings.length,
|
|
36
|
+
}));
|
|
37
|
+
lines.push(formatTable(catData, catColumns));
|
|
38
|
+
}
|
|
39
|
+
// Recommendations
|
|
40
|
+
if (result.recommendations.length > 0) {
|
|
41
|
+
lines.push('');
|
|
42
|
+
lines.push(formatRecommendations(result.recommendations));
|
|
43
|
+
}
|
|
44
|
+
// Token usage
|
|
45
|
+
lines.push('');
|
|
46
|
+
lines.push('Token Usage:');
|
|
47
|
+
lines.push(` Input: ${result.metrics.inputTokens.toLocaleString()}`);
|
|
48
|
+
lines.push(` Output: ${result.metrics.outputTokens.toLocaleString()}`);
|
|
49
|
+
if (result.metrics.cacheCreationTokens) {
|
|
50
|
+
lines.push(` Cache write: ${result.metrics.cacheCreationTokens.toLocaleString()}`);
|
|
51
|
+
}
|
|
52
|
+
if (result.metrics.cacheReadTokens) {
|
|
53
|
+
lines.push(` Cache read: ${result.metrics.cacheReadTokens.toLocaleString()}`);
|
|
54
|
+
}
|
|
55
|
+
lines.push(` Total effective: ${result.metrics.totalEffectiveTokens.toLocaleString()}`);
|
|
56
|
+
if (result.metrics.costUsd !== undefined) {
|
|
57
|
+
lines.push(` Estimated cost: $${result.metrics.costUsd.toFixed(4)}`);
|
|
58
|
+
}
|
|
59
|
+
return lines.join('\n');
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Format a generic execution result (commands, workflows)
|
|
63
|
+
*/
|
|
64
|
+
export function formatExecutionResult(result) {
|
|
65
|
+
const lines = [];
|
|
66
|
+
lines.push(`${capitalize(result.type)}: ${result.name} v${result.version}`);
|
|
67
|
+
lines.push(`Decision: ${result.decision}`);
|
|
68
|
+
if (result.score !== undefined) {
|
|
69
|
+
lines.push(`Score: ${result.score}/100`);
|
|
70
|
+
}
|
|
71
|
+
lines.push(`Duration: ${formatDuration(result.durationMs)}`);
|
|
72
|
+
if (result.dashboardUrl) {
|
|
73
|
+
lines.push(`Dashboard: ${result.dashboardUrl}`);
|
|
74
|
+
}
|
|
75
|
+
if (result.recommendations.length > 0) {
|
|
76
|
+
lines.push('');
|
|
77
|
+
lines.push(formatRecommendations(result.recommendations));
|
|
78
|
+
}
|
|
79
|
+
lines.push('');
|
|
80
|
+
lines.push('Token Usage:');
|
|
81
|
+
lines.push(` Input: ${result.metrics.inputTokens.toLocaleString()}`);
|
|
82
|
+
lines.push(` Output: ${result.metrics.outputTokens.toLocaleString()}`);
|
|
83
|
+
if (result.metrics.cacheCreationTokens) {
|
|
84
|
+
lines.push(` Cache write: ${result.metrics.cacheCreationTokens.toLocaleString()}`);
|
|
85
|
+
}
|
|
86
|
+
if (result.metrics.cacheReadTokens) {
|
|
87
|
+
lines.push(` Cache read: ${result.metrics.cacheReadTokens.toLocaleString()}`);
|
|
88
|
+
}
|
|
89
|
+
lines.push(` Total effective: ${result.metrics.totalEffectiveTokens.toLocaleString()}`);
|
|
90
|
+
if (result.metrics.costUsd !== undefined) {
|
|
91
|
+
lines.push(` Estimated cost: $${result.metrics.costUsd.toFixed(4)}`);
|
|
92
|
+
}
|
|
93
|
+
return lines.join('\n');
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Format recommendations grouped by priority
|
|
97
|
+
*/
|
|
98
|
+
export function formatRecommendations(recs) {
|
|
99
|
+
if (recs.length === 0)
|
|
100
|
+
return 'No recommendations.';
|
|
101
|
+
const lines = [];
|
|
102
|
+
const byPriority = groupBy(recs, (r) => r.priority);
|
|
103
|
+
for (const priority of ['critical', 'suggested', 'backlog']) {
|
|
104
|
+
const group = byPriority[priority];
|
|
105
|
+
if (!group || group.length === 0)
|
|
106
|
+
continue;
|
|
107
|
+
lines.push(`${capitalize(priority)} (${group.length}):`);
|
|
108
|
+
for (const rec of group) {
|
|
109
|
+
const location = rec.filePath
|
|
110
|
+
? rec.lineNumber
|
|
111
|
+
? ` ${rec.filePath}:${rec.lineNumber}`
|
|
112
|
+
: ` ${rec.filePath}`
|
|
113
|
+
: '';
|
|
114
|
+
lines.push(` - ${rec.title}${location}`);
|
|
115
|
+
if (rec.description) {
|
|
116
|
+
lines.push(` ${truncate(rec.description, 80)}`);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return lines.join('\n');
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Format a list of definitions as a table
|
|
124
|
+
*/
|
|
125
|
+
export function formatDefinitionList(items) {
|
|
126
|
+
if (items.length === 0)
|
|
127
|
+
return 'No definitions found.';
|
|
128
|
+
const columns = [
|
|
129
|
+
{ header: 'NAME', accessor: 'name', width: 30 },
|
|
130
|
+
{ header: 'TYPE', accessor: 'type', width: 10 },
|
|
131
|
+
{ header: 'VERSION', accessor: 'version', width: 10 },
|
|
132
|
+
{ header: 'DOMAIN', accessor: 'domain', width: 12 },
|
|
133
|
+
{ header: 'DESCRIPTION', accessor: (d) => truncate(d.description, 40), width: 42 },
|
|
134
|
+
];
|
|
135
|
+
return formatTable(items, columns);
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Format definition details from describe()
|
|
139
|
+
*/
|
|
140
|
+
export function formatDefinitionDetails(details) {
|
|
141
|
+
const lines = [];
|
|
142
|
+
lines.push(formatKeyValue({
|
|
143
|
+
Name: details.name,
|
|
144
|
+
Type: details.type,
|
|
145
|
+
Version: details.version,
|
|
146
|
+
Hash: details.hash,
|
|
147
|
+
}));
|
|
148
|
+
if (details.interface && typeof details.interface === 'object') {
|
|
149
|
+
lines.push('');
|
|
150
|
+
lines.push('Interface:');
|
|
151
|
+
lines.push(formatKeyValue(details.interface, 2));
|
|
152
|
+
}
|
|
153
|
+
return lines.join('\n');
|
|
154
|
+
}
|
|
155
|
+
// ─── Helpers ──────────────────────────────────────────────────────────────────
|
|
156
|
+
function formatDuration(ms) {
|
|
157
|
+
if (ms < 1000)
|
|
158
|
+
return `${ms}ms`;
|
|
159
|
+
if (ms < 60_000)
|
|
160
|
+
return `${(ms / 1000).toFixed(1)}s`;
|
|
161
|
+
const mins = Math.floor(ms / 60_000);
|
|
162
|
+
const secs = ((ms % 60_000) / 1000).toFixed(0);
|
|
163
|
+
return `${mins}m ${secs}s`;
|
|
164
|
+
}
|
|
165
|
+
function capitalize(s) {
|
|
166
|
+
return s.charAt(0).toUpperCase() + s.slice(1);
|
|
167
|
+
}
|
|
168
|
+
function groupBy(items, key) {
|
|
169
|
+
const groups = {};
|
|
170
|
+
for (const item of items) {
|
|
171
|
+
const k = key(item);
|
|
172
|
+
(groups[k] ??= []).push(item);
|
|
173
|
+
}
|
|
174
|
+
return groups;
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/formatters/core.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Formatters for ops-sdk types (projects, runs, issues)
|
|
3
|
+
*/
|
|
4
|
+
import type { Project, Run, Issue, PublicApiKey } from '@uluops/ops-sdk';
|
|
5
|
+
/**
|
|
6
|
+
* Format a list of projects as table
|
|
7
|
+
*/
|
|
8
|
+
export declare function formatProjects(projects: Project[]): string;
|
|
9
|
+
/**
|
|
10
|
+
* Format a single project
|
|
11
|
+
*/
|
|
12
|
+
export declare function formatProject(project: Project): string;
|
|
13
|
+
/**
|
|
14
|
+
* Format project summary
|
|
15
|
+
*/
|
|
16
|
+
export declare function formatProjectSummary(response: unknown): string;
|
|
17
|
+
/**
|
|
18
|
+
* Format a list of runs as table
|
|
19
|
+
*/
|
|
20
|
+
export declare function formatRuns(runs: Array<{
|
|
21
|
+
runNumber: number;
|
|
22
|
+
workflowType: string;
|
|
23
|
+
averageScore?: number | null;
|
|
24
|
+
allGatesPassed: boolean;
|
|
25
|
+
createdAt: string;
|
|
26
|
+
}>): string;
|
|
27
|
+
/**
|
|
28
|
+
* Format a single run
|
|
29
|
+
*/
|
|
30
|
+
export declare function formatRun(run: Run): string;
|
|
31
|
+
/**
|
|
32
|
+
* Format a list of issues as table
|
|
33
|
+
*/
|
|
34
|
+
export declare function formatIssues(issues: Issue[]): string;
|
|
35
|
+
/**
|
|
36
|
+
* Format a single issue
|
|
37
|
+
*/
|
|
38
|
+
export declare function formatIssue(issue: Issue): string;
|
|
39
|
+
/**
|
|
40
|
+
* Format a list of API keys as table
|
|
41
|
+
*/
|
|
42
|
+
export declare function formatApiKeys(keys: PublicApiKey[]): string;
|
|
43
|
+
//# sourceMappingURL=ops.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ops.d.ts","sourceRoot":"","sources":["../../src/formatters/ops.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAIzE;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CAO1D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAOtD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,CA0B9D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,cAAc,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,MAAM,CASrK;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAS1C;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CASpD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAehD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,MAAM,CAQ1D"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { formatTable, formatKeyValue } from './table.js';
|
|
2
|
+
import { formatDisplayDate, truncate } from '../utils.js';
|
|
3
|
+
/**
|
|
4
|
+
* Format a list of projects as table
|
|
5
|
+
*/
|
|
6
|
+
export function formatProjects(projects) {
|
|
7
|
+
const columns = [
|
|
8
|
+
{ header: 'NAME', accessor: 'name', width: 30 },
|
|
9
|
+
{ header: 'ID', accessor: (p) => p.id.slice(0, 8), width: 10 },
|
|
10
|
+
{ header: 'CREATED', accessor: (p) => formatDisplayDate(p.createdAt), width: 20 },
|
|
11
|
+
];
|
|
12
|
+
return formatTable(projects, columns);
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Format a single project
|
|
16
|
+
*/
|
|
17
|
+
export function formatProject(project) {
|
|
18
|
+
return formatKeyValue({
|
|
19
|
+
name: project.name,
|
|
20
|
+
id: project.id,
|
|
21
|
+
createdAt: formatDisplayDate(project.createdAt),
|
|
22
|
+
updatedAt: formatDisplayDate(project.updatedAt),
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Format project summary
|
|
27
|
+
*/
|
|
28
|
+
export function formatProjectSummary(response) {
|
|
29
|
+
const data = response;
|
|
30
|
+
const stats = (data.stats ?? data);
|
|
31
|
+
const project = data.project;
|
|
32
|
+
const lines = [];
|
|
33
|
+
if (project) {
|
|
34
|
+
lines.push(`Project: ${project.name}`, '');
|
|
35
|
+
}
|
|
36
|
+
lines.push('Issues:', ` Open: ${stats.openIssues ?? 0}`, ` Critical: ${stats.criticalIssues ?? 0}`, ` Total: ${stats.totalIssues ?? 0}`, '', 'Runs:', ` Total: ${stats.totalRuns ?? 0}`);
|
|
37
|
+
if (stats.latestRunDate) {
|
|
38
|
+
lines.push(` Latest: #${stats.latestRunNumber} on ${formatDisplayDate(stats.latestRunDate)}`);
|
|
39
|
+
}
|
|
40
|
+
return lines.join('\n');
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Format a list of runs as table
|
|
44
|
+
*/
|
|
45
|
+
export function formatRuns(runs) {
|
|
46
|
+
const columns = [
|
|
47
|
+
{ header: '#', accessor: (r) => String(r.runNumber), width: 5, align: 'right' },
|
|
48
|
+
{ header: 'WORKFLOW', accessor: 'workflowType', width: 20 },
|
|
49
|
+
{ header: 'SCORE', accessor: (r) => r.averageScore?.toFixed(1) ?? '-', width: 7, align: 'right' },
|
|
50
|
+
{ header: 'PASSED', accessor: (r) => r.allGatesPassed ? 'Yes' : 'No', width: 7 },
|
|
51
|
+
{ header: 'CREATED', accessor: (r) => formatDisplayDate(r.createdAt), width: 20 },
|
|
52
|
+
];
|
|
53
|
+
return formatTable(runs, columns);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Format a single run
|
|
57
|
+
*/
|
|
58
|
+
export function formatRun(run) {
|
|
59
|
+
return formatKeyValue({
|
|
60
|
+
runNumber: run.runNumber,
|
|
61
|
+
id: run.id,
|
|
62
|
+
workflowType: run.workflowType,
|
|
63
|
+
averageScore: run.averageScore?.toFixed(1) ?? '-',
|
|
64
|
+
allGatesPassed: run.allGatesPassed ? 'Yes' : 'No',
|
|
65
|
+
createdAt: formatDisplayDate(run.createdAt),
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Format a list of issues as table
|
|
70
|
+
*/
|
|
71
|
+
export function formatIssues(issues) {
|
|
72
|
+
const columns = [
|
|
73
|
+
{ header: 'ID', accessor: (i) => i.id.slice(0, 8), width: 10 },
|
|
74
|
+
{ header: 'TITLE', accessor: (i) => truncate(i.title, 40), width: 40 },
|
|
75
|
+
{ header: 'STATUS', accessor: 'status', width: 12 },
|
|
76
|
+
{ header: 'PRIORITY', accessor: 'priority', width: 10 },
|
|
77
|
+
{ header: 'SEVERITY', accessor: (i) => i.severity ?? '-', width: 10 },
|
|
78
|
+
];
|
|
79
|
+
return formatTable(issues, columns);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Format a single issue
|
|
83
|
+
*/
|
|
84
|
+
export function formatIssue(issue) {
|
|
85
|
+
return formatKeyValue({
|
|
86
|
+
title: issue.title,
|
|
87
|
+
id: issue.id,
|
|
88
|
+
status: issue.status,
|
|
89
|
+
priority: issue.priority,
|
|
90
|
+
severity: issue.severity,
|
|
91
|
+
agent: issue.agent,
|
|
92
|
+
filePath: issue.filePath,
|
|
93
|
+
lineNumber: issue.lineNumber,
|
|
94
|
+
failureCode: issue.failureCode,
|
|
95
|
+
category: issue.category,
|
|
96
|
+
timesSeen: issue.timesSeen,
|
|
97
|
+
createdAt: formatDisplayDate(issue.createdAt),
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Format a list of API keys as table
|
|
102
|
+
*/
|
|
103
|
+
export function formatApiKeys(keys) {
|
|
104
|
+
const columns = [
|
|
105
|
+
{ header: 'ID', accessor: (k) => k.id.slice(0, 8), width: 10 },
|
|
106
|
+
{ header: 'NAME', accessor: (k) => k.name ?? '(unnamed)', width: 20 },
|
|
107
|
+
{ header: 'LAST USED', accessor: (k) => k.lastUsedAt ? formatDisplayDate(k.lastUsedAt) : 'Never', width: 20 },
|
|
108
|
+
{ header: 'EXPIRES', accessor: (k) => k.expiresAt ? formatDisplayDate(k.expiresAt) : 'Never', width: 20 },
|
|
109
|
+
];
|
|
110
|
+
return formatTable(keys, columns);
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=ops.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ops.js","sourceRoot":"","sources":["../../src/formatters/ops.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Formatters for registry-sdk types (definitions, models)
|
|
3
|
+
*/
|
|
4
|
+
import type { Definition, DefinitionListItem, Model, ModelAlias, AliasResolution, VersionListItem, VersionDiff, VersionDiffSummary, ValidationResult } from '@uluops/registry-sdk';
|
|
5
|
+
/**
|
|
6
|
+
* Format a list of definitions as table
|
|
7
|
+
*/
|
|
8
|
+
export declare function formatDefinitions(definitions: DefinitionListItem[]): string;
|
|
9
|
+
/**
|
|
10
|
+
* Format a single definition
|
|
11
|
+
*/
|
|
12
|
+
export declare function formatDefinition(def: Definition): string;
|
|
13
|
+
/**
|
|
14
|
+
* Format a list of models as table
|
|
15
|
+
*/
|
|
16
|
+
export declare function formatModels(models: Model[]): string;
|
|
17
|
+
/**
|
|
18
|
+
* Format a single model
|
|
19
|
+
*/
|
|
20
|
+
export declare function formatModel(model: Model): string;
|
|
21
|
+
/**
|
|
22
|
+
* Format a list of model aliases as table
|
|
23
|
+
*/
|
|
24
|
+
export declare function formatAliases(aliases: ModelAlias[]): string;
|
|
25
|
+
/**
|
|
26
|
+
* Format alias resolution result
|
|
27
|
+
*/
|
|
28
|
+
export declare function formatAliasResolution(resolution: AliasResolution): string;
|
|
29
|
+
/**
|
|
30
|
+
* Format a list of versions as table
|
|
31
|
+
*/
|
|
32
|
+
export declare function formatVersions(versions: VersionListItem[]): string;
|
|
33
|
+
/**
|
|
34
|
+
* Format version diff
|
|
35
|
+
*/
|
|
36
|
+
export declare function formatVersionDiff(diff: VersionDiff | VersionDiffSummary): string;
|
|
37
|
+
/**
|
|
38
|
+
* Format validation result
|
|
39
|
+
*/
|
|
40
|
+
export declare function formatValidationResult(result: ValidationResult): string;
|
|
41
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/formatters/registry.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EACV,UAAU,EACV,kBAAkB,EAClB,KAAK,EACL,UAAU,EACV,eAAe,EACf,eAAe,EACf,WAAW,EACX,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,sBAAsB,CAAC;AAI9B;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,kBAAkB,EAAE,GAAG,MAAM,CAS3E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,CAqBxD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAQpD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAmBhD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,MAAM,CAS3D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,eAAe,GAAG,MAAM,CAezE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG,MAAM,CAUlE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,GAAG,kBAAkB,GAAG,MAAM,CA6BhF;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAcvE"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { formatTable, formatKeyValue } from './table.js';
|
|
2
|
+
import { formatDisplayDate, truncate } from '../utils.js';
|
|
3
|
+
/**
|
|
4
|
+
* Format a list of definitions as table
|
|
5
|
+
*/
|
|
6
|
+
export function formatDefinitions(definitions) {
|
|
7
|
+
const columns = [
|
|
8
|
+
{ header: 'NAME', accessor: 'name', width: 25 },
|
|
9
|
+
{ header: 'TYPE', accessor: 'type', width: 10 },
|
|
10
|
+
{ header: 'VERSION', accessor: 'version', width: 10 },
|
|
11
|
+
{ header: 'STATUS', accessor: 'status', width: 12 },
|
|
12
|
+
{ header: 'VISIBILITY', accessor: 'visibility', width: 10 },
|
|
13
|
+
];
|
|
14
|
+
return formatTable(definitions, columns);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Format a single definition
|
|
18
|
+
*/
|
|
19
|
+
export function formatDefinition(def) {
|
|
20
|
+
return formatKeyValue({
|
|
21
|
+
name: def.name,
|
|
22
|
+
type: def.type,
|
|
23
|
+
version: def.version,
|
|
24
|
+
status: def.status,
|
|
25
|
+
displayName: def.displayName,
|
|
26
|
+
description: def.description ? truncate(def.description, 60) : undefined,
|
|
27
|
+
domain: def.domain,
|
|
28
|
+
subdomain: def.subdomain,
|
|
29
|
+
agentType: def.agentType,
|
|
30
|
+
visibility: def.visibility,
|
|
31
|
+
tier: def.tier,
|
|
32
|
+
tags: def.tags?.join(', '),
|
|
33
|
+
executionCount: def.executionCount,
|
|
34
|
+
forkCount: def.forkCount,
|
|
35
|
+
starCount: def.starCount,
|
|
36
|
+
createdAt: formatDisplayDate(def.createdAt),
|
|
37
|
+
updatedAt: formatDisplayDate(def.updatedAt),
|
|
38
|
+
publishedAt: def.publishedAt ? formatDisplayDate(def.publishedAt) : undefined,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Format a list of models as table
|
|
43
|
+
*/
|
|
44
|
+
export function formatModels(models) {
|
|
45
|
+
const columns = [
|
|
46
|
+
{ header: 'PROVIDER', accessor: 'provider', width: 12 },
|
|
47
|
+
{ header: 'MODEL ID', accessor: 'modelId', width: 25 },
|
|
48
|
+
{ header: 'TIER', accessor: 'tier', width: 10 },
|
|
49
|
+
{ header: 'STATUS', accessor: 'status', width: 12 },
|
|
50
|
+
];
|
|
51
|
+
return formatTable(models, columns);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Format a single model
|
|
55
|
+
*/
|
|
56
|
+
export function formatModel(model) {
|
|
57
|
+
const capabilities = Object.entries(model.capabilities)
|
|
58
|
+
.filter(([, v]) => v)
|
|
59
|
+
.map(([k]) => k)
|
|
60
|
+
.join(', ');
|
|
61
|
+
return formatKeyValue({
|
|
62
|
+
provider: model.provider,
|
|
63
|
+
modelId: model.modelId,
|
|
64
|
+
displayName: model.displayName,
|
|
65
|
+
description: model.description ? truncate(model.description, 60) : undefined,
|
|
66
|
+
tier: model.tier,
|
|
67
|
+
status: model.status,
|
|
68
|
+
capabilities: capabilities || 'none',
|
|
69
|
+
regions: model.regions?.join(', '),
|
|
70
|
+
releaseDate: model.releaseDate,
|
|
71
|
+
deprecationDate: model.deprecationDate,
|
|
72
|
+
successor: model.successor,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Format a list of model aliases as table
|
|
77
|
+
*/
|
|
78
|
+
export function formatAliases(aliases) {
|
|
79
|
+
const columns = [
|
|
80
|
+
{ header: 'ALIAS', accessor: 'alias', width: 20 },
|
|
81
|
+
{ header: 'PROVIDER', accessor: 'provider', width: 12 },
|
|
82
|
+
{ header: 'MODEL', accessor: 'modelId', width: 25 },
|
|
83
|
+
{ header: 'SCOPE', accessor: 'scope', width: 8 },
|
|
84
|
+
{ header: 'DEPRECATED', accessor: (a) => a.deprecated ? 'Yes' : 'No', width: 10 },
|
|
85
|
+
];
|
|
86
|
+
return formatTable(aliases, columns);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Format alias resolution result
|
|
90
|
+
*/
|
|
91
|
+
export function formatAliasResolution(resolution) {
|
|
92
|
+
if (!resolution.target) {
|
|
93
|
+
return `Alias "${resolution.alias}" not found`;
|
|
94
|
+
}
|
|
95
|
+
const lines = [
|
|
96
|
+
`Alias: ${resolution.alias}`,
|
|
97
|
+
`Target: ${resolution.target}`,
|
|
98
|
+
];
|
|
99
|
+
if (resolution.model) {
|
|
100
|
+
lines.push('', 'Model Details:', formatModel(resolution.model));
|
|
101
|
+
}
|
|
102
|
+
return lines.join('\n');
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Format a list of versions as table
|
|
106
|
+
*/
|
|
107
|
+
export function formatVersions(versions) {
|
|
108
|
+
const columns = [
|
|
109
|
+
{ header: 'VERSION', accessor: 'version', width: 12 },
|
|
110
|
+
{ header: 'HASH', accessor: (v) => {
|
|
111
|
+
return v.hash ? v.hash.replace('sha256:', '').slice(0, 8) : '';
|
|
112
|
+
}, width: 10 },
|
|
113
|
+
{ header: 'CHANGE', accessor: (v) => v.changeSummary || '', width: 24 },
|
|
114
|
+
{ header: 'CREATED', accessor: (v) => formatDisplayDate(v.createdAt), width: 20 },
|
|
115
|
+
];
|
|
116
|
+
return formatTable(versions, columns);
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Format version diff
|
|
120
|
+
*/
|
|
121
|
+
export function formatVersionDiff(diff) {
|
|
122
|
+
const lines = [
|
|
123
|
+
`From: ${diff.fromVersion} -> To: ${diff.toVersion}`,
|
|
124
|
+
'',
|
|
125
|
+
];
|
|
126
|
+
if (!diff.hasChanges) {
|
|
127
|
+
lines.push('No changes');
|
|
128
|
+
return lines.join('\n');
|
|
129
|
+
}
|
|
130
|
+
// Full diff includes raw YAML
|
|
131
|
+
if ('fromYaml' in diff) {
|
|
132
|
+
const fromLines = diff.fromYaml.split('\n');
|
|
133
|
+
const toLines = diff.toYaml.split('\n');
|
|
134
|
+
const added = toLines.filter(l => !fromLines.includes(l)).length;
|
|
135
|
+
const removed = fromLines.filter(l => !toLines.includes(l)).length;
|
|
136
|
+
lines.push('YAML changes:');
|
|
137
|
+
lines.push(` + ${added} lines added`);
|
|
138
|
+
lines.push(` - ${removed} lines removed`);
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
// Summary diff — section-level changes
|
|
142
|
+
lines.push(`Lines: ${diff.fromLineCount} -> ${diff.toLineCount}`);
|
|
143
|
+
if (diff.sectionsAdded.length > 0)
|
|
144
|
+
lines.push(`Added: ${diff.sectionsAdded.join(', ')}`);
|
|
145
|
+
if (diff.sectionsRemoved.length > 0)
|
|
146
|
+
lines.push(`Removed: ${diff.sectionsRemoved.join(', ')}`);
|
|
147
|
+
if (diff.sectionsModified.length > 0)
|
|
148
|
+
lines.push(`Modified: ${diff.sectionsModified.join(', ')}`);
|
|
149
|
+
}
|
|
150
|
+
return lines.join('\n');
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Format validation result
|
|
154
|
+
*/
|
|
155
|
+
export function formatValidationResult(result) {
|
|
156
|
+
if (result.valid) {
|
|
157
|
+
return 'Valid';
|
|
158
|
+
}
|
|
159
|
+
const lines = ['Invalid YAML:', ''];
|
|
160
|
+
if (result.errors && result.errors.length > 0) {
|
|
161
|
+
for (const error of result.errors) {
|
|
162
|
+
lines.push(` ${error.path}: ${error.message}`);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return lines.join('\n');
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/formatters/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Column definition for table formatting
|
|
3
|
+
*/
|
|
4
|
+
export interface Column<T> {
|
|
5
|
+
header: string;
|
|
6
|
+
accessor: keyof T | ((row: T) => string);
|
|
7
|
+
width?: number;
|
|
8
|
+
align?: 'left' | 'right' | 'center';
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Format data as a table
|
|
12
|
+
*/
|
|
13
|
+
export declare function formatTable<T>(data: T[], columns: Column<T>[]): string;
|
|
14
|
+
/**
|
|
15
|
+
* Format a simple key-value display
|
|
16
|
+
*/
|
|
17
|
+
export declare function formatKeyValue(data: Record<string, unknown>, indent?: number): string;
|
|
18
|
+
//# sourceMappingURL=table.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../src/formatters/table.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,MAAM,CAAC,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,CAAC,CAAC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;CACrC;AAgCD;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAgCtE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,SAAI,GAAG,MAAM,CAehF"}
|