@observeone/cli 1.15.1 → 1.16.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 (37) hide show
  1. package/README.md +38 -0
  2. package/dist/README.md +38 -0
  3. package/dist/commands/api-key.d.ts +6 -0
  4. package/dist/commands/api-key.d.ts.map +1 -0
  5. package/dist/commands/api-key.js +146 -0
  6. package/dist/commands/api-key.js.map +1 -0
  7. package/dist/commands/incident.d.ts.map +1 -1
  8. package/dist/commands/incident.js +101 -1
  9. package/dist/commands/incident.js.map +1 -1
  10. package/dist/commands/suite/heal.d.ts +6 -0
  11. package/dist/commands/suite/heal.d.ts.map +1 -0
  12. package/dist/commands/suite/heal.js +38 -0
  13. package/dist/commands/suite/heal.js.map +1 -0
  14. package/dist/commands/suite/index.d.ts.map +1 -1
  15. package/dist/commands/suite/index.js +4 -0
  16. package/dist/commands/suite/index.js.map +1 -1
  17. package/dist/commands/suite/toggle-public.d.ts +6 -0
  18. package/dist/commands/suite/toggle-public.d.ts.map +1 -0
  19. package/dist/commands/suite/toggle-public.js +33 -0
  20. package/dist/commands/suite/toggle-public.js.map +1 -0
  21. package/dist/commands/team.d.ts +6 -0
  22. package/dist/commands/team.d.ts.map +1 -0
  23. package/dist/commands/team.js +167 -0
  24. package/dist/commands/team.js.map +1 -0
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +4 -0
  27. package/dist/index.js.map +1 -1
  28. package/dist/interfaces/api-client.interface.d.ts +29 -1
  29. package/dist/interfaces/api-client.interface.d.ts.map +1 -1
  30. package/dist/package.json +1 -1
  31. package/dist/services/api-client.service.d.ts +29 -1
  32. package/dist/services/api-client.service.d.ts.map +1 -1
  33. package/dist/services/api-client.service.js +69 -1
  34. package/dist/services/api-client.service.js.map +1 -1
  35. package/dist/types/index.d.ts +29 -0
  36. package/dist/types/index.d.ts.map +1 -1
  37. package/package.json +1 -1
package/README.md CHANGED
@@ -160,6 +160,7 @@ obs monitor update <id> --description "Updated copy" --alert-channel-id 47
160
160
  obs monitor runs <id> --limit 10 # recent executions
161
161
  obs monitor run <id> # trigger a manual run
162
162
  obs monitor toggle <id>
163
+ obs monitor toggle-muted <id>
163
164
  obs monitor delete <id> -y
164
165
  ```
165
166
 
@@ -183,6 +184,7 @@ obs check update <id> --description "Signup v2" --header "X-Trace=ci-v2"
183
184
  obs check runs <id> --limit 10 # recent executions
184
185
  obs check run <id> # trigger a manual run
185
186
  obs check toggle <id>
187
+ obs check toggle-muted <id>
186
188
  obs check delete <id> -y
187
189
  ```
188
190
 
@@ -202,6 +204,8 @@ obs heartbeat list --search "Backup" --status late --limit 5 --json
202
204
  obs heartbeat update <id> --period 43200
203
205
  obs heartbeat runs <id> --limit 10 # recent pings
204
206
  obs heartbeat toggle <id>
207
+ obs heartbeat toggle-muted <id>
208
+ obs heartbeat reset <id> # acknowledge missed pings and restart grace window
205
209
  obs heartbeat delete <id> -y
206
210
  ```
207
211
 
@@ -230,6 +234,10 @@ obs status-page list
230
234
  obs status-page get <id>
231
235
  obs status-page update <id> --description "Updated"
232
236
  obs status-page delete <id> -y
237
+
238
+ # Attach / detach monitors from a status page
239
+ obs status-page add-monitor <sp-id> <resource-id> --type url-monitor --name "API" --order 1
240
+ obs status-page remove-monitor <sp-id> <resource-id>
233
241
  ```
234
242
 
235
243
  ### Incidents
@@ -239,6 +247,30 @@ obs incident list
239
247
  obs incident get <id>
240
248
  obs incident update <id> --description "Resolved"
241
249
  obs incident delete <id> -y
250
+
251
+ # Comment on an incident
252
+ obs incident comment <id> --message "Investigating upstream provider issue"
253
+
254
+ # Assign / unassign
255
+ obs incident assign <id> --user <user-id>
256
+ obs incident unassign <id>
257
+ ```
258
+
259
+ ### API Keys
260
+ ```bash
261
+ obs api-key list
262
+ obs api-key create --name "CI Bot"
263
+ obs api-key revoke <id>
264
+ obs api-key toggle <id>
265
+ ```
266
+
267
+ ### Teams
268
+ ```bash
269
+ obs team list
270
+ obs team members <team-id>
271
+ obs team invite <team-id> # regenerate invite code
272
+ obs team remove-member <team-id> <user-id>
273
+ obs team update-role <team-id> <user-id> --role member
242
274
  ```
243
275
 
244
276
  ---
@@ -302,6 +334,12 @@ obs suite schedule <id> --cron "*/30 * * * *"
302
334
  obs suite secrets <id> --var USERNAME=admin --var PASSWORD=secret
303
335
  obs suite secrets <id> --var-file .env.test
304
336
 
337
+ # Toggle public visibility of a suite
338
+ obs suite toggle-public <id>
339
+
340
+ # Trigger self-heal on a suite's failing tests
341
+ obs suite heal <id>
342
+
305
343
  # Delete a suite
306
344
  obs suite delete <id>
307
345
  ```
package/dist/README.md CHANGED
@@ -160,6 +160,7 @@ obs monitor update <id> --description "Updated copy" --alert-channel-id 47
160
160
  obs monitor runs <id> --limit 10 # recent executions
161
161
  obs monitor run <id> # trigger a manual run
162
162
  obs monitor toggle <id>
163
+ obs monitor toggle-muted <id>
163
164
  obs monitor delete <id> -y
164
165
  ```
165
166
 
@@ -183,6 +184,7 @@ obs check update <id> --description "Signup v2" --header "X-Trace=ci-v2"
183
184
  obs check runs <id> --limit 10 # recent executions
184
185
  obs check run <id> # trigger a manual run
185
186
  obs check toggle <id>
187
+ obs check toggle-muted <id>
186
188
  obs check delete <id> -y
187
189
  ```
188
190
 
@@ -202,6 +204,8 @@ obs heartbeat list --search "Backup" --status late --limit 5 --json
202
204
  obs heartbeat update <id> --period 43200
203
205
  obs heartbeat runs <id> --limit 10 # recent pings
204
206
  obs heartbeat toggle <id>
207
+ obs heartbeat toggle-muted <id>
208
+ obs heartbeat reset <id> # acknowledge missed pings and restart grace window
205
209
  obs heartbeat delete <id> -y
206
210
  ```
207
211
 
@@ -230,6 +234,10 @@ obs status-page list
230
234
  obs status-page get <id>
231
235
  obs status-page update <id> --description "Updated"
232
236
  obs status-page delete <id> -y
237
+
238
+ # Attach / detach monitors from a status page
239
+ obs status-page add-monitor <sp-id> <resource-id> --type url-monitor --name "API" --order 1
240
+ obs status-page remove-monitor <sp-id> <resource-id>
233
241
  ```
234
242
 
235
243
  ### Incidents
@@ -239,6 +247,30 @@ obs incident list
239
247
  obs incident get <id>
240
248
  obs incident update <id> --description "Resolved"
241
249
  obs incident delete <id> -y
250
+
251
+ # Comment on an incident
252
+ obs incident comment <id> --message "Investigating upstream provider issue"
253
+
254
+ # Assign / unassign
255
+ obs incident assign <id> --user <user-id>
256
+ obs incident unassign <id>
257
+ ```
258
+
259
+ ### API Keys
260
+ ```bash
261
+ obs api-key list
262
+ obs api-key create --name "CI Bot"
263
+ obs api-key revoke <id>
264
+ obs api-key toggle <id>
265
+ ```
266
+
267
+ ### Teams
268
+ ```bash
269
+ obs team list
270
+ obs team members <team-id>
271
+ obs team invite <team-id> # regenerate invite code
272
+ obs team remove-member <team-id> <user-id>
273
+ obs team update-role <team-id> <user-id> --role member
242
274
  ```
243
275
 
244
276
  ---
@@ -302,6 +334,12 @@ obs suite schedule <id> --cron "*/30 * * * *"
302
334
  obs suite secrets <id> --var USERNAME=admin --var PASSWORD=secret
303
335
  obs suite secrets <id> --var-file .env.test
304
336
 
337
+ # Toggle public visibility of a suite
338
+ obs suite toggle-public <id>
339
+
340
+ # Trigger self-heal on a suite's failing tests
341
+ obs suite heal <id>
342
+
305
343
  # Delete a suite
306
344
  obs suite delete <id>
307
345
  ```
@@ -0,0 +1,6 @@
1
+ import { Command } from 'commander';
2
+ import { IConfigService } from '../interfaces/config.interface.js';
3
+ import { IApiClient } from '../interfaces/api-client.interface.js';
4
+ import { IOutputService } from '../interfaces/output.interface.js';
5
+ export declare function createApiKeyCommand(_configService: IConfigService, apiClient: IApiClient, outputService: IOutputService): Command;
6
+ //# sourceMappingURL=api-key.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-key.d.ts","sourceRoot":"","sources":["../../src/commands/api-key.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAEnE,wBAAgB,mBAAmB,CACjC,cAAc,EAAE,cAAc,EAC9B,SAAS,EAAE,UAAU,EACrB,aAAa,EAAE,cAAc,GAC5B,OAAO,CA0IT"}
@@ -0,0 +1,146 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import inquirer from 'inquirer';
4
+ export function createApiKeyCommand(_configService, apiClient, outputService) {
5
+ const cmd = new Command('api-key').description('Manage API keys');
6
+ // obs api-key list [--json]
7
+ cmd
8
+ .command('list')
9
+ .description('List all API keys')
10
+ .action(async () => {
11
+ const isJson = process.env.OBS_JSON_OUTPUT === 'true';
12
+ try {
13
+ const apiKeys = await apiClient.getApiKeys();
14
+ if (isJson) {
15
+ outputService.formatJsonOutput({ apiKeys });
16
+ return;
17
+ }
18
+ if (apiKeys.length === 0) {
19
+ console.log(chalk.gray('\n No API keys found.\n'));
20
+ return;
21
+ }
22
+ console.log(chalk.bold('\n API Keys\n'));
23
+ for (const key of apiKeys) {
24
+ const status = key.is_active ? chalk.green('active') : chalk.gray('inactive');
25
+ console.log(chalk.white(` ${key.name}`) + chalk.gray(` [${key.id}]`) + ` — ${status}`);
26
+ }
27
+ console.log('');
28
+ }
29
+ catch (err) {
30
+ const msg = err.message || 'Failed to list API keys';
31
+ if (isJson) {
32
+ outputService.formatJsonOutput({ status: 'ERROR', error: { message: msg } });
33
+ }
34
+ else {
35
+ console.error(chalk.red(`\n❌ ${msg}\n`));
36
+ }
37
+ process.exit(1);
38
+ }
39
+ });
40
+ // obs api-key create --name <name> [--json]
41
+ cmd
42
+ .command('create')
43
+ .description('Create a new API key')
44
+ .option('-n, --name <name>', 'API key name')
45
+ .action(async (options) => {
46
+ const isJson = process.env.OBS_JSON_OUTPUT === 'true';
47
+ try {
48
+ let name = options.name;
49
+ if (!name) {
50
+ const answers = await inquirer.prompt([
51
+ {
52
+ type: 'input',
53
+ name: 'name',
54
+ message: 'API key name:',
55
+ validate: (val) => (val.trim() ? true : 'Name is required'),
56
+ },
57
+ ]);
58
+ name = answers.name;
59
+ }
60
+ const apiKey = await apiClient.createApiKey(name);
61
+ if (isJson) {
62
+ outputService.formatJsonOutput({ apiKey });
63
+ return;
64
+ }
65
+ console.log(chalk.green(`\n✓ API key created: ${apiKey.name} [${apiKey.id}]\n`));
66
+ }
67
+ catch (err) {
68
+ const msg = err.message || 'Failed to create API key';
69
+ if (isJson) {
70
+ outputService.formatJsonOutput({ status: 'ERROR', error: { message: msg } });
71
+ }
72
+ else {
73
+ console.error(chalk.red(`\n❌ ${msg}\n`));
74
+ }
75
+ process.exit(1);
76
+ }
77
+ });
78
+ // obs api-key revoke <id> [-y] [--json]
79
+ cmd
80
+ .command('revoke <id>')
81
+ .description('Revoke (delete) an API key')
82
+ .option('-y, --yes', 'Skip confirmation prompt')
83
+ .action(async (id, options) => {
84
+ const isJson = process.env.OBS_JSON_OUTPUT === 'true';
85
+ try {
86
+ if (!options.yes) {
87
+ const { confirm } = await inquirer.prompt([
88
+ {
89
+ type: 'confirm',
90
+ name: 'confirm',
91
+ message: `Are you sure you want to revoke API key ${id}?`,
92
+ default: false,
93
+ },
94
+ ]);
95
+ if (!confirm) {
96
+ console.log(chalk.gray(' Revoke cancelled.'));
97
+ return;
98
+ }
99
+ }
100
+ const result = await apiClient.deleteApiKey(id);
101
+ if (isJson) {
102
+ outputService.formatJsonOutput(result);
103
+ return;
104
+ }
105
+ console.log(chalk.green(`\n✓ ${result.message || `API key ${id} revoked.`}\n`));
106
+ }
107
+ catch (err) {
108
+ const msg = err.message || 'Failed to revoke API key';
109
+ if (isJson) {
110
+ outputService.formatJsonOutput({ status: 'ERROR', error: { message: msg } });
111
+ }
112
+ else {
113
+ console.error(chalk.red(`\n❌ ${msg}\n`));
114
+ }
115
+ process.exit(1);
116
+ }
117
+ });
118
+ // obs api-key toggle <id> [--json]
119
+ cmd
120
+ .command('toggle <id>')
121
+ .description('Toggle an API key active/inactive')
122
+ .action(async (id) => {
123
+ const isJson = process.env.OBS_JSON_OUTPUT === 'true';
124
+ try {
125
+ const result = await apiClient.toggleApiKey(id);
126
+ if (isJson) {
127
+ outputService.formatJsonOutput(result);
128
+ return;
129
+ }
130
+ const status = result.apiKey?.is_active ? chalk.green('active') : chalk.gray('inactive');
131
+ console.log(chalk.bold(`\n✓ ${result.message || 'Toggled.'} Status: ${status}\n`));
132
+ }
133
+ catch (err) {
134
+ const msg = err.message || 'Failed to toggle API key';
135
+ if (isJson) {
136
+ outputService.formatJsonOutput({ status: 'ERROR', error: { message: msg } });
137
+ }
138
+ else {
139
+ console.error(chalk.red(`\n❌ ${msg}\n`));
140
+ }
141
+ process.exit(1);
142
+ }
143
+ });
144
+ return cmd;
145
+ }
146
+ //# sourceMappingURL=api-key.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-key.js","sourceRoot":"","sources":["../../src/commands/api-key.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"incident.d.ts","sourceRoot":"","sources":["../../src/commands/incident.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAYnE,wBAAgB,qBAAqB,CACnC,aAAa,EAAE,cAAc,EAC7B,SAAS,EAAE,UAAU,EACrB,aAAa,EAAE,cAAc,GAC5B,OAAO,CA6GT"}
1
+ {"version":3,"file":"incident.d.ts","sourceRoot":"","sources":["../../src/commands/incident.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAYnE,wBAAgB,qBAAqB,CACnC,aAAa,EAAE,cAAc,EAC7B,SAAS,EAAE,UAAU,EACrB,aAAa,EAAE,cAAc,GAC5B,OAAO,CA+MT"}
@@ -1,3 +1,4 @@
1
+ import chalk from 'chalk';
1
2
  import inquirer from 'inquirer';
2
3
  import { createResourceCommand } from './resource-command.factory.js';
3
4
  const priorities = ['CRITICAL', 'HIGH', 'MEDIUM', 'LOW'];
@@ -8,7 +9,7 @@ function normalizePriority(priority) {
8
9
  return priorities.includes(normalized) ? normalized : undefined;
9
10
  }
10
11
  export function createIncidentCommand(configService, apiClient, outputService) {
11
- return createResourceCommand(configService, apiClient, outputService, {
12
+ const cmd = createResourceCommand(configService, apiClient, outputService, {
12
13
  resourceName: 'incident',
13
14
  pluralName: 'incidents',
14
15
  description: 'Manage incidents',
@@ -103,5 +104,104 @@ export function createIncidentCommand(configService, apiClient, outputService) {
103
104
  return payload;
104
105
  },
105
106
  });
107
+ // obs incident comment <id> --message <msg> [--json]
108
+ cmd
109
+ .command('comment <id>')
110
+ .description('Add a comment to an incident')
111
+ .option('-m, --message <message>', 'Comment message')
112
+ .action(async (id, options) => {
113
+ const isJson = process.env.OBS_JSON_OUTPUT === 'true';
114
+ try {
115
+ const incidentId = parseInt(id);
116
+ if (isNaN(incidentId))
117
+ throw new Error('Invalid incident ID');
118
+ let message = options.message;
119
+ if (!message) {
120
+ const answers = await inquirer.prompt([
121
+ {
122
+ type: 'input',
123
+ name: 'message',
124
+ message: 'Comment message:',
125
+ validate: (val) => (val.trim() ? true : 'Message is required'),
126
+ },
127
+ ]);
128
+ message = answers.message;
129
+ }
130
+ const event = await apiClient.addIncidentComment(incidentId, message);
131
+ if (isJson) {
132
+ outputService.formatJsonOutput({ event });
133
+ return;
134
+ }
135
+ console.log(chalk.green(`\n✓ Comment added to incident ${incidentId}.\n`));
136
+ }
137
+ catch (err) {
138
+ const msg = err.message || 'Failed to add comment';
139
+ if (isJson) {
140
+ outputService.formatJsonOutput({ status: 'ERROR', error: { message: msg } });
141
+ }
142
+ else {
143
+ console.error(chalk.red(`\n❌ ${msg}\n`));
144
+ }
145
+ process.exit(1);
146
+ }
147
+ });
148
+ // obs incident assign <id> --user <user-id> [--json]
149
+ cmd
150
+ .command('assign <id>')
151
+ .description('Assign an incident to a user')
152
+ .requiredOption('--user <user-id>', 'User ID to assign the incident to')
153
+ .action(async (id, options) => {
154
+ const isJson = process.env.OBS_JSON_OUTPUT === 'true';
155
+ try {
156
+ const incidentId = parseInt(id);
157
+ if (isNaN(incidentId))
158
+ throw new Error('Invalid incident ID');
159
+ const incident = await apiClient.assignIncident(incidentId, options.user);
160
+ if (isJson) {
161
+ outputService.formatJsonOutput({ incident });
162
+ return;
163
+ }
164
+ console.log(chalk.green(`\n✓ Incident ${incidentId} assigned to user ${options.user}.\n`));
165
+ }
166
+ catch (err) {
167
+ const msg = err.message || 'Failed to assign incident';
168
+ if (isJson) {
169
+ outputService.formatJsonOutput({ status: 'ERROR', error: { message: msg } });
170
+ }
171
+ else {
172
+ console.error(chalk.red(`\n❌ ${msg}\n`));
173
+ }
174
+ process.exit(1);
175
+ }
176
+ });
177
+ // obs incident unassign <id> [--json]
178
+ cmd
179
+ .command('unassign <id>')
180
+ .description('Unassign an incident')
181
+ .action(async (id) => {
182
+ const isJson = process.env.OBS_JSON_OUTPUT === 'true';
183
+ try {
184
+ const incidentId = parseInt(id);
185
+ if (isNaN(incidentId))
186
+ throw new Error('Invalid incident ID');
187
+ const incident = await apiClient.assignIncident(incidentId, null);
188
+ if (isJson) {
189
+ outputService.formatJsonOutput({ incident });
190
+ return;
191
+ }
192
+ console.log(chalk.green(`\n✓ Incident ${incidentId} unassigned.\n`));
193
+ }
194
+ catch (err) {
195
+ const msg = err.message || 'Failed to unassign incident';
196
+ if (isJson) {
197
+ outputService.formatJsonOutput({ status: 'ERROR', error: { message: msg } });
198
+ }
199
+ else {
200
+ console.error(chalk.red(`\n❌ ${msg}\n`));
201
+ }
202
+ process.exit(1);
203
+ }
204
+ });
205
+ return cmd;
106
206
  }
107
207
  //# sourceMappingURL=incident.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"incident.js","sourceRoot":"","sources":["../../src/commands/incident.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"incident.js","sourceRoot":"","sources":["../../src/commands/incident.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { Command } from 'commander';
2
+ import { ApiClient } from '../../services/api-client.service.js';
3
+ import { IConfigService } from '../../interfaces/config.interface.js';
4
+ import { IOutputService } from '../../interfaces/output.interface.js';
5
+ export declare function createSuiteHealCommand(_configService: IConfigService, apiClient: ApiClient, outputService: IOutputService): Command;
6
+ //# sourceMappingURL=heal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heal.d.ts","sourceRoot":"","sources":["../../../src/commands/suite/heal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAEtE,wBAAgB,sBAAsB,CACpC,cAAc,EAAE,cAAc,EAC9B,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,cAAc,GAC5B,OAAO,CA+BT"}
@@ -0,0 +1,38 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ export function createSuiteHealCommand(_configService, apiClient, outputService) {
4
+ return new Command('heal')
5
+ .description('Trigger a heal for a suite')
6
+ .argument('<id>', 'Suite ID')
7
+ .action(async (id) => {
8
+ const isJson = process.env.OBS_JSON_OUTPUT === 'true';
9
+ try {
10
+ const result = await apiClient.healSuite(id);
11
+ if (isJson) {
12
+ outputService.formatJsonOutput(result);
13
+ return;
14
+ }
15
+ console.log(chalk.bold(`\n✓ Heal triggered for suite ${id}`));
16
+ if (result.heals && result.heals.length > 0) {
17
+ for (const heal of result.heals) {
18
+ console.log(chalk.gray(` Test ${heal.testId} → heal ${heal.healId}`));
19
+ }
20
+ }
21
+ else {
22
+ console.log(chalk.gray(' No heals generated.'));
23
+ }
24
+ console.log('');
25
+ }
26
+ catch (err) {
27
+ const msg = err.message || 'Failed to heal suite';
28
+ if (isJson) {
29
+ outputService.formatJsonOutput({ status: 'ERROR', error: { message: msg } });
30
+ }
31
+ else {
32
+ console.error(chalk.red(`\n❌ ${msg}\n`));
33
+ }
34
+ process.exit(1);
35
+ }
36
+ });
37
+ }
38
+ //# sourceMappingURL=heal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heal.js","sourceRoot":"","sources":["../../../src/commands/suite/heal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,MAAM,UAAU,sBAAsB,CACpC,cAA8B,EAC9B,SAAoB,EACpB,aAA6B;IAE7B,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;SACvB,WAAW,CAAC,4BAA4B,CAAC;SACzC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;SAC5B,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,EAAE;QAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,MAAM,CAAC;QACtD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YAC7C,IAAI,MAAM,EAAE,CAAC;gBACX,aAAa,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;gBACvC,OAAO;YACT,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gCAAgC,EAAE,EAAE,CAAC,CAAC,CAAC;YAC9D,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5C,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;oBAChC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,MAAM,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;gBAC1E,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;YACpD,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,GAAG,GAAI,GAAa,CAAC,OAAO,IAAI,sBAAsB,CAAC;YAC7D,IAAI,MAAM,EAAE,CAAC;gBACX,aAAa,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;YAC/E,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC;YAC3C,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/suite/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AActE,wBAAgB,kBAAkB,CAChC,aAAa,EAAE,cAAc,EAC7B,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,cAAc,GAC5B,OAAO,CAiBT"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/suite/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAgBtE,wBAAgB,kBAAkB,CAChC,aAAa,EAAE,cAAc,EAC7B,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,cAAc,GAC5B,OAAO,CAmBT"}
@@ -11,6 +11,8 @@ import { createSuiteSecretsCommand } from './secrets.js';
11
11
  import { createSuiteUpdateCommand } from './update.js';
12
12
  import { createSuitePullCommand } from './pull.js';
13
13
  import { createSuitePushCommand } from './push.js';
14
+ import { createSuiteTogglePublicCommand } from './toggle-public.js';
15
+ import { createSuiteHealCommand } from './heal.js';
14
16
  export function createSuiteCommand(configService, apiClient, outputService) {
15
17
  const suite = new Command('suite').description('Manage Playwright Autopilot suites');
16
18
  suite.addCommand(createSuiteUpdateCommand(configService, apiClient, outputService));
@@ -25,6 +27,8 @@ export function createSuiteCommand(configService, apiClient, outputService) {
25
27
  suite.addCommand(createSuiteSecretsCommand(configService, apiClient, outputService));
26
28
  suite.addCommand(createSuitePullCommand(configService, apiClient, outputService));
27
29
  suite.addCommand(createSuitePushCommand(configService, apiClient, outputService));
30
+ suite.addCommand(createSuiteTogglePublicCommand(configService, apiClient, outputService));
31
+ suite.addCommand(createSuiteHealCommand(configService, apiClient, outputService));
28
32
  return suite;
29
33
  }
30
34
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/suite/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAEnD,MAAM,UAAU,kBAAkB,CAChC,aAA6B,EAC7B,SAAoB,EACpB,aAA6B;IAE7B,MAAM,KAAK,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,oCAAoC,CAAC,CAAC;IAErF,KAAK,CAAC,UAAU,CAAC,wBAAwB,CAAC,aAAa,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;IACpF,KAAK,CAAC,UAAU,CAAC,sBAAsB,CAAC,aAAa,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;IAClF,KAAK,CAAC,UAAU,CAAC,qBAAqB,CAAC,aAAa,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;IACjF,KAAK,CAAC,UAAU,CAAC,0BAA0B,CAAC,aAAa,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;IACtF,KAAK,CAAC,UAAU,CAAC,qBAAqB,CAAC,aAAa,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;IACjF,KAAK,CAAC,UAAU,CAAC,wBAAwB,CAAC,aAAa,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;IACpF,KAAK,CAAC,UAAU,CAAC,sBAAsB,CAAC,aAAa,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;IAClF,KAAK,CAAC,UAAU,CAAC,wBAAwB,CAAC,aAAa,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;IACpF,KAAK,CAAC,UAAU,CAAC,0BAA0B,CAAC,aAAa,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;IACtF,KAAK,CAAC,UAAU,CAAC,yBAAyB,CAAC,aAAa,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;IACrF,KAAK,CAAC,UAAU,CAAC,sBAAsB,CAAC,aAAa,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;IAClF,KAAK,CAAC,UAAU,CAAC,sBAAsB,CAAC,aAAa,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;IAElF,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/suite/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAEnD,MAAM,UAAU,kBAAkB,CAChC,aAA6B,EAC7B,SAAoB,EACpB,aAA6B;IAE7B,MAAM,KAAK,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,oCAAoC,CAAC,CAAC;IAErF,KAAK,CAAC,UAAU,CAAC,wBAAwB,CAAC,aAAa,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;IACpF,KAAK,CAAC,UAAU,CAAC,sBAAsB,CAAC,aAAa,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;IAClF,KAAK,CAAC,UAAU,CAAC,qBAAqB,CAAC,aAAa,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;IACjF,KAAK,CAAC,UAAU,CAAC,0BAA0B,CAAC,aAAa,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;IACtF,KAAK,CAAC,UAAU,CAAC,qBAAqB,CAAC,aAAa,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;IACjF,KAAK,CAAC,UAAU,CAAC,wBAAwB,CAAC,aAAa,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;IACpF,KAAK,CAAC,UAAU,CAAC,sBAAsB,CAAC,aAAa,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;IAClF,KAAK,CAAC,UAAU,CAAC,wBAAwB,CAAC,aAAa,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;IACpF,KAAK,CAAC,UAAU,CAAC,0BAA0B,CAAC,aAAa,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;IACtF,KAAK,CAAC,UAAU,CAAC,yBAAyB,CAAC,aAAa,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;IACrF,KAAK,CAAC,UAAU,CAAC,sBAAsB,CAAC,aAAa,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;IAClF,KAAK,CAAC,UAAU,CAAC,sBAAsB,CAAC,aAAa,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;IAClF,KAAK,CAAC,UAAU,CAAC,8BAA8B,CAAC,aAAa,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;IAC1F,KAAK,CAAC,UAAU,CAAC,sBAAsB,CAAC,aAAa,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;IAElF,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { Command } from 'commander';
2
+ import { ApiClient } from '../../services/api-client.service.js';
3
+ import { IConfigService } from '../../interfaces/config.interface.js';
4
+ import { IOutputService } from '../../interfaces/output.interface.js';
5
+ export declare function createSuiteTogglePublicCommand(_configService: IConfigService, apiClient: ApiClient, outputService: IOutputService): Command;
6
+ //# sourceMappingURL=toggle-public.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toggle-public.d.ts","sourceRoot":"","sources":["../../../src/commands/suite/toggle-public.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAEtE,wBAAgB,8BAA8B,CAC5C,cAAc,EAAE,cAAc,EAC9B,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,cAAc,GAC5B,OAAO,CA2BT"}
@@ -0,0 +1,33 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ export function createSuiteTogglePublicCommand(_configService, apiClient, outputService) {
4
+ return new Command('toggle-public')
5
+ .description('Toggle public visibility of a suite')
6
+ .argument('<id>', 'Suite ID')
7
+ .action(async (id) => {
8
+ const isJson = process.env.OBS_JSON_OUTPUT === 'true';
9
+ try {
10
+ // Fetch current state to toggle
11
+ const suite = await apiClient.getSuite(id);
12
+ const newPublic = !suite.is_public;
13
+ const result = await apiClient.toggleSuitePublic(id, newPublic);
14
+ if (isJson) {
15
+ outputService.formatJsonOutput({ suite: result });
16
+ return;
17
+ }
18
+ const status = newPublic ? chalk.green('public') : chalk.gray('private');
19
+ console.log(chalk.bold(`\n✓ Suite ${id} is now ${status}.\n`));
20
+ }
21
+ catch (err) {
22
+ const msg = err.message || 'Failed to toggle suite visibility';
23
+ if (isJson) {
24
+ outputService.formatJsonOutput({ status: 'ERROR', error: { message: msg } });
25
+ }
26
+ else {
27
+ console.error(chalk.red(`\n❌ ${msg}\n`));
28
+ }
29
+ process.exit(1);
30
+ }
31
+ });
32
+ }
33
+ //# sourceMappingURL=toggle-public.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toggle-public.js","sourceRoot":"","sources":["../../../src/commands/suite/toggle-public.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,MAAM,UAAU,8BAA8B,CAC5C,cAA8B,EAC9B,SAAoB,EACpB,aAA6B;IAE7B,OAAO,IAAI,OAAO,CAAC,eAAe,CAAC;SAChC,WAAW,CAAC,qCAAqC,CAAC;SAClD,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;SAC5B,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,EAAE;QAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,MAAM,CAAC;QACtD,IAAI,CAAC;YACH,gCAAgC;YAChC,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC3C,MAAM,SAAS,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC;YACnC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,iBAAiB,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;YAChE,IAAI,MAAM,EAAE,CAAC;gBACX,aAAa,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;gBAClD,OAAO;YACT,CAAC;YACD,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACzE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,MAAM,KAAK,CAAC,CAAC,CAAC;QACjE,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,GAAG,GAAI,GAAa,CAAC,OAAO,IAAI,mCAAmC,CAAC;YAC1E,IAAI,MAAM,EAAE,CAAC;gBACX,aAAa,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;YAC/E,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC;YAC3C,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { Command } from 'commander';
2
+ import { IConfigService } from '../interfaces/config.interface.js';
3
+ import { IApiClient } from '../interfaces/api-client.interface.js';
4
+ import { IOutputService } from '../interfaces/output.interface.js';
5
+ export declare function createTeamCommand(_configService: IConfigService, apiClient: IApiClient, outputService: IOutputService): Command;
6
+ //# sourceMappingURL=team.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"team.d.ts","sourceRoot":"","sources":["../../src/commands/team.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAEnE,wBAAgB,iBAAiB,CAC/B,cAAc,EAAE,cAAc,EAC9B,SAAS,EAAE,UAAU,EACrB,aAAa,EAAE,cAAc,GAC5B,OAAO,CAgKT"}