@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.
Files changed (99) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +825 -0
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +93 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/analytics.d.ts +6 -0
  8. package/dist/commands/analytics.d.ts.map +1 -0
  9. package/dist/commands/analytics.js +445 -0
  10. package/dist/commands/analytics.js.map +1 -0
  11. package/dist/commands/auth.d.ts +6 -0
  12. package/dist/commands/auth.d.ts.map +1 -0
  13. package/dist/commands/auth.js +496 -0
  14. package/dist/commands/auth.js.map +1 -0
  15. package/dist/commands/completion.d.ts +7 -0
  16. package/dist/commands/completion.d.ts.map +1 -0
  17. package/dist/commands/completion.js +188 -0
  18. package/dist/commands/completion.js.map +1 -0
  19. package/dist/commands/config.d.ts +6 -0
  20. package/dist/commands/config.d.ts.map +1 -0
  21. package/dist/commands/config.js +279 -0
  22. package/dist/commands/config.js.map +1 -0
  23. package/dist/commands/definitions.d.ts +6 -0
  24. package/dist/commands/definitions.d.ts.map +1 -0
  25. package/dist/commands/definitions.js +229 -0
  26. package/dist/commands/definitions.js.map +1 -0
  27. package/dist/commands/deps.d.ts +6 -0
  28. package/dist/commands/deps.d.ts.map +1 -0
  29. package/dist/commands/deps.js +87 -0
  30. package/dist/commands/deps.js.map +1 -0
  31. package/dist/commands/exec.d.ts +6 -0
  32. package/dist/commands/exec.d.ts.map +1 -0
  33. package/dist/commands/exec.js +334 -0
  34. package/dist/commands/exec.js.map +1 -0
  35. package/dist/commands/executions.d.ts +6 -0
  36. package/dist/commands/executions.d.ts.map +1 -0
  37. package/dist/commands/executions.js +63 -0
  38. package/dist/commands/executions.js.map +1 -0
  39. package/dist/commands/forks.d.ts +6 -0
  40. package/dist/commands/forks.d.ts.map +1 -0
  41. package/dist/commands/forks.js +145 -0
  42. package/dist/commands/forks.js.map +1 -0
  43. package/dist/commands/issues.d.ts +6 -0
  44. package/dist/commands/issues.d.ts.map +1 -0
  45. package/dist/commands/issues.js +458 -0
  46. package/dist/commands/issues.js.map +1 -0
  47. package/dist/commands/models.d.ts +6 -0
  48. package/dist/commands/models.d.ts.map +1 -0
  49. package/dist/commands/models.js +156 -0
  50. package/dist/commands/models.js.map +1 -0
  51. package/dist/commands/projects.d.ts +6 -0
  52. package/dist/commands/projects.d.ts.map +1 -0
  53. package/dist/commands/projects.js +262 -0
  54. package/dist/commands/projects.js.map +1 -0
  55. package/dist/commands/render.d.ts +6 -0
  56. package/dist/commands/render.d.ts.map +1 -0
  57. package/dist/commands/render.js +59 -0
  58. package/dist/commands/render.js.map +1 -0
  59. package/dist/commands/runs.d.ts +6 -0
  60. package/dist/commands/runs.d.ts.map +1 -0
  61. package/dist/commands/runs.js +442 -0
  62. package/dist/commands/runs.js.map +1 -0
  63. package/dist/commands/taxonomy.d.ts +6 -0
  64. package/dist/commands/taxonomy.d.ts.map +1 -0
  65. package/dist/commands/taxonomy.js +45 -0
  66. package/dist/commands/taxonomy.js.map +1 -0
  67. package/dist/commands/translation.d.ts +6 -0
  68. package/dist/commands/translation.d.ts.map +1 -0
  69. package/dist/commands/translation.js +85 -0
  70. package/dist/commands/translation.js.map +1 -0
  71. package/dist/commands/versions.d.ts +6 -0
  72. package/dist/commands/versions.d.ts.map +1 -0
  73. package/dist/commands/versions.js +61 -0
  74. package/dist/commands/versions.js.map +1 -0
  75. package/dist/context.d.ts +85 -0
  76. package/dist/context.d.ts.map +1 -0
  77. package/dist/context.js +386 -0
  78. package/dist/context.js.map +1 -0
  79. package/dist/formatters/core.d.ts +31 -0
  80. package/dist/formatters/core.d.ts.map +1 -0
  81. package/dist/formatters/core.js +176 -0
  82. package/dist/formatters/core.js.map +1 -0
  83. package/dist/formatters/ops.d.ts +43 -0
  84. package/dist/formatters/ops.d.ts.map +1 -0
  85. package/dist/formatters/ops.js +112 -0
  86. package/dist/formatters/ops.js.map +1 -0
  87. package/dist/formatters/registry.d.ts +41 -0
  88. package/dist/formatters/registry.d.ts.map +1 -0
  89. package/dist/formatters/registry.js +167 -0
  90. package/dist/formatters/registry.js.map +1 -0
  91. package/dist/formatters/table.d.ts +18 -0
  92. package/dist/formatters/table.d.ts.map +1 -0
  93. package/dist/formatters/table.js +76 -0
  94. package/dist/formatters/table.js.map +1 -0
  95. package/dist/utils.d.ts +99 -0
  96. package/dist/utils.d.ts.map +1 -0
  97. package/dist/utils.js +201 -0
  98. package/dist/utils.js.map +1 -0
  99. 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"}