@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 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/commands/models.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { Command } from 'commander';
2
+ /**
3
+ * Register project commands
4
+ */
5
+ export declare function registerProjectCommands(program: Command): void;
6
+ //# sourceMappingURL=projects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../src/commands/projects.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqT9D"}
@@ -0,0 +1,262 @@
1
+ import { createOpsContext, handleOpsError } from '../context.js';
2
+ import { withSpinner, parseIntOption } from '../utils.js';
3
+ import { formatProjects, formatProject, formatProjectSummary, } from '../formatters/ops.js';
4
+ /**
5
+ * Register project commands
6
+ */
7
+ export function registerProjectCommands(program) {
8
+ const projects = program
9
+ .command('projects')
10
+ .description('Manage projects');
11
+ // ulu projects list
12
+ projects
13
+ .command('list')
14
+ .description('List all projects')
15
+ .action(async (_, cmd) => {
16
+ const globalOpts = cmd.optsWithGlobals();
17
+ const ctx = createOpsContext(globalOpts);
18
+ try {
19
+ const data = await withSpinner(ctx, { start: 'Fetching projects...', failure: 'Failed to fetch projects' }, () => ctx.client.projects.list());
20
+ if (ctx.json) {
21
+ console.log(JSON.stringify(data, null, 2));
22
+ }
23
+ else if (data.length === 0) {
24
+ console.log('No projects found');
25
+ }
26
+ else {
27
+ console.log(formatProjects(data));
28
+ }
29
+ }
30
+ catch (error) {
31
+ handleOpsError(error, ctx);
32
+ }
33
+ });
34
+ // ulu projects get <name>
35
+ projects
36
+ .command('get <name>')
37
+ .description('Get project details')
38
+ .action(async (name, _, cmd) => {
39
+ const globalOpts = cmd.optsWithGlobals();
40
+ const ctx = createOpsContext(globalOpts);
41
+ try {
42
+ const project = await withSpinner(ctx, { start: 'Fetching project...', failure: 'Failed to fetch project' }, () => ctx.client.projects.get(name));
43
+ if (!project || !project.id) {
44
+ console.error('Error: Project not found');
45
+ process.exit(1);
46
+ }
47
+ if (ctx.json) {
48
+ console.log(JSON.stringify(project, null, 2));
49
+ }
50
+ else {
51
+ console.log(formatProject(project));
52
+ }
53
+ }
54
+ catch (error) {
55
+ handleOpsError(error, ctx);
56
+ }
57
+ });
58
+ // ulu projects create <name>
59
+ projects
60
+ .command('create <name>')
61
+ .description('Create a new project')
62
+ .action(async (name, _, cmd) => {
63
+ const globalOpts = cmd.optsWithGlobals();
64
+ const ctx = createOpsContext(globalOpts);
65
+ try {
66
+ const project = await withSpinner(ctx, { start: 'Creating project...', success: 'Project created', failure: 'Failed to create project' }, () => ctx.client.projects.create({ name }));
67
+ if (ctx.json) {
68
+ console.log(JSON.stringify(project, null, 2));
69
+ }
70
+ else {
71
+ console.log(formatProject(project));
72
+ }
73
+ }
74
+ catch (error) {
75
+ handleOpsError(error, ctx);
76
+ }
77
+ });
78
+ // ulu projects delete <name>
79
+ projects
80
+ .command('delete <name>')
81
+ .description('Delete a project')
82
+ .option('--force', 'Hard delete (permanent, cannot be restored)')
83
+ .option('-y, --yes', 'Skip confirmation prompt')
84
+ .action(async (name, options, cmd) => {
85
+ const globalOpts = cmd.optsWithGlobals();
86
+ const ctx = createOpsContext(globalOpts);
87
+ // Confirm deletion
88
+ if (!options.yes) {
89
+ console.log(`\nThis will ${options.force ? 'permanently delete' : 'soft-delete'} project: ${name}`);
90
+ console.log('To confirm, run again with --yes flag');
91
+ process.exit(0);
92
+ }
93
+ try {
94
+ if (options.force) {
95
+ await withSpinner(ctx, { start: 'Deleting project...', success: 'Project permanently deleted', failure: 'Failed to delete project' }, () => ctx.client.projects.delete(name, { confirm: true, confirmationPhrase: name }));
96
+ }
97
+ else {
98
+ await withSpinner(ctx, { start: 'Deleting project...', success: 'Project soft-deleted', failure: 'Failed to delete project' }, () => ctx.client.projects.softDelete(name, { confirm: true, confirmationPhrase: name }));
99
+ }
100
+ if (ctx.json) {
101
+ console.log(JSON.stringify({ success: true, name, hardDelete: !!options.force }, null, 2));
102
+ }
103
+ else if (!options.force) {
104
+ console.log('Use "ulu projects restore" to recover this project');
105
+ }
106
+ }
107
+ catch (error) {
108
+ handleOpsError(error, ctx);
109
+ }
110
+ });
111
+ // ulu projects restore <name>
112
+ projects
113
+ .command('restore <name>')
114
+ .description('Restore a soft-deleted project')
115
+ .action(async (name, _, cmd) => {
116
+ const globalOpts = cmd.optsWithGlobals();
117
+ const ctx = createOpsContext(globalOpts);
118
+ try {
119
+ const project = await withSpinner(ctx, { start: 'Restoring project...', success: 'Project restored', failure: 'Failed to restore project' }, () => ctx.client.projects.restore(name));
120
+ if (ctx.json) {
121
+ console.log(JSON.stringify(project, null, 2));
122
+ }
123
+ else {
124
+ console.log(formatProject(project));
125
+ }
126
+ }
127
+ catch (error) {
128
+ handleOpsError(error, ctx);
129
+ }
130
+ });
131
+ // ulu projects summary <name>
132
+ projects
133
+ .command('summary <name>')
134
+ .description('Get project summary with issue counts and latest run')
135
+ .action(async (name, _, cmd) => {
136
+ const globalOpts = cmd.optsWithGlobals();
137
+ const ctx = createOpsContext(globalOpts);
138
+ try {
139
+ const summary = await withSpinner(ctx, { start: 'Fetching summary...', failure: 'Failed to fetch summary' }, () => ctx.client.projects.getSummary(name));
140
+ if (ctx.json) {
141
+ console.log(JSON.stringify(summary, null, 2));
142
+ }
143
+ else {
144
+ console.log(formatProjectSummary(summary));
145
+ }
146
+ }
147
+ catch (error) {
148
+ handleOpsError(error, ctx);
149
+ }
150
+ });
151
+ // ulu projects trends <name>
152
+ projects
153
+ .command('trends <name>')
154
+ .description('Get project issue trends over time')
155
+ .option('-d, --days <number>', 'Number of days to include', '30')
156
+ .action(async (name, options, cmd) => {
157
+ const globalOpts = cmd.optsWithGlobals();
158
+ const ctx = createOpsContext(globalOpts);
159
+ try {
160
+ const trends = await withSpinner(ctx, { start: 'Fetching trends...', failure: 'Failed to fetch trends' }, () => ctx.client.projects.getTrends(name, { days: parseIntOption(options.days, '--days') }));
161
+ if (ctx.json) {
162
+ console.log(JSON.stringify(trends, null, 2));
163
+ }
164
+ else if (trends.daily.length === 0) {
165
+ console.log('No trend data available');
166
+ }
167
+ else {
168
+ console.log(`Issue trends for ${name} (last ${trends.days} days):\n`);
169
+ for (const point of trends.daily.slice(-10)) {
170
+ const bar = '#'.repeat(Math.min(point.total, 50));
171
+ console.log(`${point.date}: ${bar} ${point.total} total (+${point.new} new, -${point.resolved} resolved)`);
172
+ }
173
+ if (trends.daily.length > 10) {
174
+ console.log(`\n... showing last 10 of ${trends.daily.length} data points`);
175
+ }
176
+ }
177
+ }
178
+ catch (error) {
179
+ handleOpsError(error, ctx);
180
+ }
181
+ });
182
+ // ulu projects rename <name>
183
+ projects
184
+ .command('rename <name>')
185
+ .description('Rename a project')
186
+ .requiredOption('-n, --new-name <name>', 'New project name')
187
+ .action(async (name, options, cmd) => {
188
+ const globalOpts = cmd.optsWithGlobals();
189
+ const ctx = createOpsContext(globalOpts);
190
+ try {
191
+ const project = await withSpinner(ctx, { start: 'Renaming project...', success: 'Project renamed', failure: 'Failed to rename project' }, () => ctx.client.projects.rename({ oldName: name, newName: options.newName }));
192
+ if (ctx.json) {
193
+ console.log(JSON.stringify(project, null, 2));
194
+ }
195
+ else {
196
+ console.log(`Project renamed: ${name} → ${project.name}`);
197
+ }
198
+ }
199
+ catch (error) {
200
+ handleOpsError(error, ctx);
201
+ }
202
+ });
203
+ // ulu projects bulk-update-issues <name>
204
+ projects
205
+ .command('bulk-update-issues <name>')
206
+ .description('Batch update issue statuses for a project')
207
+ .requiredOption('--ids <ids>', 'Comma-separated issue IDs')
208
+ .requiredOption('-s, --status <status>', 'New status (open, completed, deferred, wontfix)')
209
+ .option('-r, --reason <reason>', 'Reason for status change')
210
+ .action(async (name, options, cmd) => {
211
+ const globalOpts = cmd.optsWithGlobals();
212
+ const ctx = createOpsContext(globalOpts);
213
+ const issueIds = options.ids.split(',').map((id) => id.trim()).filter(Boolean);
214
+ const updates = issueIds.map((id) => ({
215
+ issueId: id,
216
+ status: options.status,
217
+ reason: options.reason,
218
+ }));
219
+ try {
220
+ const results = await withSpinner(ctx, { start: `Updating ${updates.length} issues...`, success: 'Issues updated', failure: 'Failed to update issues' }, () => ctx.client.projects.bulkUpdateIssueStatus(name, updates));
221
+ if (ctx.json) {
222
+ console.log(JSON.stringify(results, null, 2));
223
+ }
224
+ else {
225
+ console.log(`Updated ${results.updated} issues in project ${name}`);
226
+ }
227
+ }
228
+ catch (error) {
229
+ handleOpsError(error, ctx);
230
+ }
231
+ });
232
+ // ulu projects merge-issues <name>
233
+ projects
234
+ .command('merge-issues <name>')
235
+ .description('Merge duplicate issues into a target issue')
236
+ .requiredOption('-t, --target <id>', 'Target issue ID (issues merge into this)')
237
+ .requiredOption('-s, --sources <ids>', 'Comma-separated source issue IDs')
238
+ .option('--strategy <strategy>', 'Merge strategy (keep_target, keep_highest_priority)', 'keep_target')
239
+ .action(async (name, options, cmd) => {
240
+ const globalOpts = cmd.optsWithGlobals();
241
+ const ctx = createOpsContext(globalOpts);
242
+ const sourceIds = options.sources.split(',').map((id) => id.trim()).filter(Boolean);
243
+ try {
244
+ const result = await withSpinner(ctx, { start: 'Merging issues...', success: 'Issues merged', failure: 'Failed to merge issues' }, () => ctx.client.projects.mergeIssues(name, {
245
+ targetIssueId: options.target,
246
+ sourceIssueIds: sourceIds,
247
+ strategy: options.strategy,
248
+ }));
249
+ if (ctx.json) {
250
+ console.log(JSON.stringify(result, null, 2));
251
+ }
252
+ else {
253
+ console.log(`Merged ${result.mergedCount} issues into ${result.targetIssueId.slice(0, 8)}`);
254
+ console.log(`Migrated ${result.migratedOccurrences} occurrences`);
255
+ }
256
+ }
257
+ catch (error) {
258
+ handleOpsError(error, ctx);
259
+ }
260
+ });
261
+ }
262
+ //# sourceMappingURL=projects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/commands/projects.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { Command } from 'commander';
2
+ /**
3
+ * Register render commands
4
+ */
5
+ export declare function registerRenderCommands(program: Command): void;
6
+ //# sourceMappingURL=render.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/commands/render.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAK5C;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkE7D"}
@@ -0,0 +1,59 @@
1
+ import { Option } from 'commander';
2
+ import { createRegistryContext, handleRegistryError } from '../context.js';
3
+ import { withSpinner, readFileOption } from '../utils.js';
4
+ /**
5
+ * Register render commands
6
+ */
7
+ export function registerRenderCommands(program) {
8
+ const render = program
9
+ .command('render')
10
+ .description('Render definitions as markdown');
11
+ const renderProfileOption = new Option('--render-profile <profile>', 'Render profile for agent definitions').choices(['core', 'uluops-full']);
12
+ // ulu render get <type> <name> <version>
13
+ render
14
+ .command('get <type> <name> <version>')
15
+ .description('Get rendered markdown for a published definition')
16
+ .addOption(renderProfileOption)
17
+ .action(async (type, name, version, options, cmd) => {
18
+ const globalOpts = cmd.optsWithGlobals();
19
+ const ctx = createRegistryContext(globalOpts);
20
+ try {
21
+ const renderProfile = options.renderProfile;
22
+ const result = await withSpinner(ctx, { start: 'Rendering...', failure: 'Failed to render definition' }, () => ctx.client.render.get(type, name, version, renderProfile ? { renderProfile } : undefined));
23
+ if (ctx.json) {
24
+ console.log(JSON.stringify(result, null, 2));
25
+ }
26
+ else {
27
+ console.log(result.markdown);
28
+ }
29
+ }
30
+ catch (error) {
31
+ handleRegistryError(error, ctx);
32
+ }
33
+ });
34
+ // ulu render preview <type>
35
+ render
36
+ .command('preview <type>')
37
+ .description('Preview YAML as rendered markdown')
38
+ .requiredOption('-f, --file <path>', 'Path to YAML file')
39
+ .addOption(renderProfileOption)
40
+ .action(async (type, options, cmd) => {
41
+ const globalOpts = cmd.optsWithGlobals();
42
+ const ctx = createRegistryContext(globalOpts);
43
+ try {
44
+ const yaml = readFileOption(options.file);
45
+ const renderProfile = options.renderProfile;
46
+ const result = await withSpinner(ctx, { start: 'Rendering preview...', failure: 'Failed to render preview' }, () => ctx.client.render.preview(type, { yaml, ...(renderProfile && { renderProfile }) }));
47
+ if (ctx.json) {
48
+ console.log(JSON.stringify(result, null, 2));
49
+ }
50
+ else {
51
+ console.log(result.markdown);
52
+ }
53
+ }
54
+ catch (error) {
55
+ handleRegistryError(error, ctx);
56
+ }
57
+ });
58
+ }
59
+ //# sourceMappingURL=render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/commands/render.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { Command } from 'commander';
2
+ /**
3
+ * Register run commands
4
+ */
5
+ export declare function registerRunCommands(program: Command): void;
6
+ //# sourceMappingURL=runs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runs.d.ts","sourceRoot":"","sources":["../../src/commands/runs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyEpC;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6a1D"}