@bussolabs/closeyourit-cli 0.0.16 → 0.0.18

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 (176) hide show
  1. package/README.md +81 -2
  2. package/dist/commands/agents/assign.d.ts +13 -0
  3. package/dist/commands/agents/assign.js +25 -0
  4. package/dist/commands/agents/create.d.ts +22 -0
  5. package/dist/commands/agents/create.js +58 -0
  6. package/dist/commands/agents/delete.d.ts +12 -0
  7. package/dist/commands/agents/delete.js +25 -0
  8. package/dist/commands/agents/list.d.ts +10 -0
  9. package/dist/commands/agents/list.js +34 -0
  10. package/dist/commands/agents/runs/list.d.ts +12 -0
  11. package/dist/commands/agents/runs/list.js +32 -0
  12. package/dist/commands/agents/runs/show.d.ts +10 -0
  13. package/dist/commands/agents/runs/show.js +21 -0
  14. package/dist/commands/agents/show.d.ts +9 -0
  15. package/dist/commands/agents/show.js +20 -0
  16. package/dist/commands/agents/update.d.ts +23 -0
  17. package/dist/commands/agents/update.js +59 -0
  18. package/dist/commands/alerts/notifications/delete.d.ts +12 -0
  19. package/dist/commands/alerts/notifications/delete.js +25 -0
  20. package/dist/commands/alerts/notifications/list.d.ts +9 -0
  21. package/dist/commands/alerts/notifications/list.js +29 -0
  22. package/dist/commands/alerts/notifications/read-all.d.ts +6 -0
  23. package/dist/commands/alerts/notifications/read-all.js +15 -0
  24. package/dist/commands/alerts/notifications/read.d.ts +9 -0
  25. package/dist/commands/alerts/notifications/read.js +22 -0
  26. package/dist/commands/alerts/preferences/show.d.ts +6 -0
  27. package/dist/commands/alerts/preferences/show.js +16 -0
  28. package/dist/commands/alerts/preferences/update.d.ts +20 -0
  29. package/dist/commands/alerts/preferences/update.js +63 -0
  30. package/dist/commands/analytics/goals/create.d.ts +13 -0
  31. package/dist/commands/analytics/goals/create.js +35 -0
  32. package/dist/commands/analytics/goals/delete.d.ts +13 -0
  33. package/dist/commands/analytics/goals/delete.js +27 -0
  34. package/dist/commands/analytics/goals/list.d.ts +9 -0
  35. package/dist/commands/analytics/goals/list.js +25 -0
  36. package/dist/commands/analytics/share.d.ts +10 -0
  37. package/dist/commands/analytics/share.js +30 -0
  38. package/dist/commands/analytics/show.d.ts +11 -0
  39. package/dist/commands/analytics/show.js +32 -0
  40. package/dist/commands/analytics/unshare.d.ts +10 -0
  41. package/dist/commands/analytics/unshare.js +24 -0
  42. package/dist/commands/cron-monitors/list.d.ts +11 -0
  43. package/dist/commands/cron-monitors/list.js +38 -0
  44. package/dist/commands/cron-monitors/show.d.ts +9 -0
  45. package/dist/commands/cron-monitors/show.js +20 -0
  46. package/dist/commands/groups/create.d.ts +1 -0
  47. package/dist/commands/groups/create.js +7 -0
  48. package/dist/commands/groups/update.d.ts +1 -0
  49. package/dist/commands/groups/update.js +8 -1
  50. package/dist/commands/ideas/archive.d.ts +12 -0
  51. package/dist/commands/ideas/archive.js +24 -0
  52. package/dist/commands/ideas/case-delete.d.ts +14 -0
  53. package/dist/commands/ideas/case-delete.js +30 -0
  54. package/dist/commands/ideas/case-update.d.ts +15 -0
  55. package/dist/commands/ideas/case-update.js +41 -0
  56. package/dist/commands/ideas/delete.d.ts +13 -0
  57. package/dist/commands/ideas/delete.js +27 -0
  58. package/dist/commands/ideas/unarchive.d.ts +12 -0
  59. package/dist/commands/ideas/unarchive.js +24 -0
  60. package/dist/commands/logs/link.d.ts +12 -0
  61. package/dist/commands/logs/link.js +33 -0
  62. package/dist/commands/logs/show.d.ts +9 -0
  63. package/dist/commands/logs/show.js +21 -0
  64. package/dist/commands/logs/unlink.d.ts +13 -0
  65. package/dist/commands/logs/unlink.js +26 -0
  66. package/dist/commands/members/remove.d.ts +12 -0
  67. package/dist/commands/members/remove.js +27 -0
  68. package/dist/commands/members/set-access.d.ts +4 -0
  69. package/dist/commands/members/set-access.js +38 -4
  70. package/dist/commands/members/update.d.ts +14 -0
  71. package/dist/commands/members/update.js +40 -0
  72. package/dist/commands/monitors/announcements/clear.d.ts +13 -0
  73. package/dist/commands/monitors/announcements/clear.js +27 -0
  74. package/dist/commands/monitors/announcements/set.d.ts +17 -0
  75. package/dist/commands/monitors/announcements/set.js +45 -0
  76. package/dist/commands/monitors/announcements/show.d.ts +12 -0
  77. package/dist/commands/monitors/announcements/show.js +24 -0
  78. package/dist/commands/monitors/create.d.ts +1 -0
  79. package/dist/commands/monitors/create.js +3 -0
  80. package/dist/commands/monitors/incidents/delete.d.ts +14 -0
  81. package/dist/commands/monitors/incidents/delete.js +28 -0
  82. package/dist/commands/monitors/incidents/group.d.ts +15 -0
  83. package/dist/commands/monitors/incidents/group.js +38 -0
  84. package/dist/commands/monitors/incidents/ungroup.d.ts +14 -0
  85. package/dist/commands/monitors/incidents/ungroup.js +31 -0
  86. package/dist/commands/monitors/incidents/update-add.d.ts +15 -0
  87. package/dist/commands/monitors/incidents/update-add.js +38 -0
  88. package/dist/commands/monitors/incidents/update-delete.d.ts +15 -0
  89. package/dist/commands/monitors/incidents/update-delete.js +31 -0
  90. package/dist/commands/monitors/publish.d.ts +12 -0
  91. package/dist/commands/monitors/publish.js +21 -0
  92. package/dist/commands/monitors/unpublish.d.ts +12 -0
  93. package/dist/commands/monitors/unpublish.js +21 -0
  94. package/dist/commands/monitors/update.d.ts +1 -0
  95. package/dist/commands/monitors/update.js +3 -0
  96. package/dist/commands/org/update.d.ts +2 -0
  97. package/dist/commands/org/update.js +10 -0
  98. package/dist/commands/platforms/create.d.ts +1 -0
  99. package/dist/commands/platforms/create.js +7 -0
  100. package/dist/commands/platforms/update.d.ts +1 -0
  101. package/dist/commands/platforms/update.js +8 -1
  102. package/dist/commands/projects/create.d.ts +2 -0
  103. package/dist/commands/projects/create.js +13 -0
  104. package/dist/commands/projects/link-server.d.ts +11 -0
  105. package/dist/commands/projects/link-server.js +33 -0
  106. package/dist/commands/projects/settings/show.d.ts +9 -0
  107. package/dist/commands/projects/settings/show.js +23 -0
  108. package/dist/commands/projects/settings/update.d.ts +14 -0
  109. package/dist/commands/projects/settings/update.js +50 -0
  110. package/dist/commands/projects/unlink-server.d.ts +13 -0
  111. package/dist/commands/projects/unlink-server.js +29 -0
  112. package/dist/commands/projects/update.d.ts +2 -0
  113. package/dist/commands/projects/update.js +14 -1
  114. package/dist/commands/releases/list.d.ts +10 -0
  115. package/dist/commands/releases/list.js +29 -0
  116. package/dist/commands/tickets/links.d.ts +12 -0
  117. package/dist/commands/tickets/links.js +33 -0
  118. package/dist/commands/tickets/reviewer.d.ts +13 -0
  119. package/dist/commands/tickets/reviewer.js +29 -0
  120. package/dist/commands/tickets/unlink.d.ts +14 -0
  121. package/dist/commands/tickets/unlink.js +29 -0
  122. package/dist/commands/tickets/unreviewer.d.ts +12 -0
  123. package/dist/commands/tickets/unreviewer.js +25 -0
  124. package/dist/commands/tickets/unwatch.d.ts +12 -0
  125. package/dist/commands/tickets/unwatch.js +25 -0
  126. package/dist/commands/tickets/watch.d.ts +12 -0
  127. package/dist/commands/tickets/watch.js +26 -0
  128. package/dist/commands/todos/complete.d.ts +10 -0
  129. package/dist/commands/todos/complete.js +23 -0
  130. package/dist/commands/todos/create.d.ts +10 -0
  131. package/dist/commands/todos/create.js +29 -0
  132. package/dist/commands/todos/delete.d.ts +12 -0
  133. package/dist/commands/todos/delete.js +25 -0
  134. package/dist/commands/todos/items/add.d.ts +14 -0
  135. package/dist/commands/todos/items/add.js +35 -0
  136. package/dist/commands/todos/items/delete.d.ts +13 -0
  137. package/dist/commands/todos/items/delete.js +26 -0
  138. package/dist/commands/todos/items/list.d.ts +12 -0
  139. package/dist/commands/todos/items/list.js +28 -0
  140. package/dist/commands/todos/items/update.d.ts +15 -0
  141. package/dist/commands/todos/items/update.js +38 -0
  142. package/dist/commands/todos/list.d.ts +9 -0
  143. package/dist/commands/todos/list.js +24 -0
  144. package/dist/commands/todos/reorder.d.ts +9 -0
  145. package/dist/commands/todos/reorder.js +19 -0
  146. package/dist/commands/todos/share.d.ts +12 -0
  147. package/dist/commands/todos/share.js +33 -0
  148. package/dist/commands/todos/shared-show.d.ts +9 -0
  149. package/dist/commands/todos/shared-show.js +20 -0
  150. package/dist/commands/todos/shared.d.ts +9 -0
  151. package/dist/commands/todos/shared.js +25 -0
  152. package/dist/commands/todos/shares.d.ts +9 -0
  153. package/dist/commands/todos/shares.js +26 -0
  154. package/dist/commands/todos/show.d.ts +9 -0
  155. package/dist/commands/todos/show.js +20 -0
  156. package/dist/commands/todos/uncomplete.d.ts +10 -0
  157. package/dist/commands/todos/uncomplete.js +23 -0
  158. package/dist/commands/todos/update.d.ts +13 -0
  159. package/dist/commands/todos/update.js +34 -0
  160. package/dist/commands/uptime-groups/create.d.ts +12 -0
  161. package/dist/commands/uptime-groups/create.js +35 -0
  162. package/dist/commands/uptime-groups/delete.d.ts +12 -0
  163. package/dist/commands/uptime-groups/delete.js +25 -0
  164. package/dist/commands/uptime-groups/list.d.ts +9 -0
  165. package/dist/commands/uptime-groups/list.js +24 -0
  166. package/dist/commands/uptime-groups/publish.d.ts +9 -0
  167. package/dist/commands/uptime-groups/publish.js +22 -0
  168. package/dist/commands/uptime-groups/show.d.ts +9 -0
  169. package/dist/commands/uptime-groups/show.js +20 -0
  170. package/dist/commands/uptime-groups/unpublish.d.ts +9 -0
  171. package/dist/commands/uptime-groups/unpublish.js +22 -0
  172. package/dist/commands/uptime-groups/update.d.ts +15 -0
  173. package/dist/commands/uptime-groups/update.js +37 -0
  174. package/oclif.manifest.json +6389 -2226
  175. package/opencli.json +3003 -83
  176. package/package.json +16 -1
@@ -0,0 +1,14 @@
1
+ import { BaseCommand } from '../../../base';
2
+ export default class ProjectsSettingsUpdate extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ 'logs-retention-days': import("@oclif/core/lib/interfaces").OptionFlag<number | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
7
+ 'analytics-retention-days': import("@oclif/core/lib/interfaces").OptionFlag<number | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
8
+ 'roadmap-enabled': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
9
+ 'quick-bug-report-enabled': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
10
+ 'analytics-enabled': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
11
+ project: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
12
+ };
13
+ run(): Promise<unknown>;
14
+ }
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@oclif/core");
4
+ const base_1 = require("../../../base");
5
+ const output_1 = require("../../../lib/output");
6
+ class ProjectsSettingsUpdate extends base_1.BaseCommand {
7
+ static description = 'Update a project settings (log/analytics retention + feature flags); only the passed fields change';
8
+ static examples = [
9
+ '<%= config.bin %> projects settings update --project LBRA --logs-retention-days 30',
10
+ '<%= config.bin %> projects settings update -p LBRA --analytics-retention-days 365 --analytics-enabled',
11
+ '<%= config.bin %> projects settings update -p LBRA --roadmap-enabled --no-quick-bug-report-enabled',
12
+ ];
13
+ static flags = {
14
+ ...base_1.projectFlag,
15
+ 'logs-retention-days': core_1.Flags.integer({ description: 'Log retention in days (blank inherits the org/global default)' }),
16
+ 'analytics-retention-days': core_1.Flags.integer({
17
+ description: 'Analytics retention in days (blank inherits the org/global default)',
18
+ }),
19
+ 'roadmap-enabled': core_1.Flags.boolean({ allowNo: true, description: 'Enable/disable the project roadmap' }),
20
+ 'quick-bug-report-enabled': core_1.Flags.boolean({
21
+ allowNo: true,
22
+ description: 'Enable/disable the AI-assisted quick bug report',
23
+ }),
24
+ 'analytics-enabled': core_1.Flags.boolean({ allowNo: true, description: 'Enable/disable web analytics ingestion' }),
25
+ };
26
+ async run() {
27
+ const { flags } = await this.parse(ProjectsSettingsUpdate);
28
+ const projectId = await this.resolveProjectId(flags.project);
29
+ const body = {};
30
+ if (flags['logs-retention-days'] !== undefined)
31
+ body.logs_retention_days = flags['logs-retention-days'];
32
+ if (flags['analytics-retention-days'] !== undefined)
33
+ body.analytics_retention_days = flags['analytics-retention-days'];
34
+ if (flags['roadmap-enabled'] !== undefined)
35
+ body.roadmap_enabled = flags['roadmap-enabled'];
36
+ if (flags['quick-bug-report-enabled'] !== undefined)
37
+ body.quick_bug_report_enabled = flags['quick-bug-report-enabled'];
38
+ if (flags['analytics-enabled'] !== undefined)
39
+ body.analytics_enabled = flags['analytics-enabled'];
40
+ // The settings action responds to both PATCH and PUT (Rails singleton `resource` update); the CLI
41
+ // transport speaks PUT — the backend applies only the keys present in the body either way.
42
+ const res = await this.api.put(`/cli/v1/projects/${projectId}/settings`, body);
43
+ if (!this.jsonEnabled()) {
44
+ this.log('Project settings updated:');
45
+ this.log((0, output_1.renderRecord)(res.data ?? {}));
46
+ }
47
+ return res;
48
+ }
49
+ }
50
+ exports.default = ProjectsSettingsUpdate;
@@ -0,0 +1,13 @@
1
+ import { BaseCommand } from '../../base';
2
+ export default class ProjectsUnlinkServer extends BaseCommand {
3
+ static args: {
4
+ id: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
5
+ };
6
+ static description: string;
7
+ static examples: string[];
8
+ static flags: {
9
+ confirm: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
10
+ project: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
11
+ };
12
+ run(): Promise<unknown>;
13
+ }
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@oclif/core");
4
+ const base_1 = require("../../base");
5
+ class ProjectsUnlinkServer extends base_1.BaseCommand {
6
+ static args = {
7
+ id: core_1.Args.string({ description: 'Server link id (from projects link-server / project servers list)', required: true }),
8
+ };
9
+ static description = 'Unlink a server host from the project (removes the host↔environment link)';
10
+ static examples = [
11
+ '<%= config.bin %> projects unlink-server <link-id> --project LBRA --confirm',
12
+ ];
13
+ static flags = {
14
+ ...base_1.projectFlag,
15
+ confirm: core_1.Flags.boolean({ description: 'Required: confirm the irreversible unlink' }),
16
+ };
17
+ async run() {
18
+ const { args, flags } = await this.parse(ProjectsUnlinkServer);
19
+ if (!flags.confirm) {
20
+ this.error('Refusing to unlink without --confirm (the action is irreversible).', { exit: 2 });
21
+ }
22
+ const projectId = await this.resolveProjectId(flags.project);
23
+ await this.api.delete(`/cli/v1/projects/${projectId}/servers/${encodeURIComponent(args.id)}`);
24
+ if (!this.jsonEnabled())
25
+ this.log(`Unlinked server ${args.id}`);
26
+ return { unlinked: args.id };
27
+ }
28
+ }
29
+ exports.default = ProjectsUnlinkServer;
@@ -8,6 +8,8 @@ export default class ProjectsUpdate extends BaseCommand {
8
8
  color: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
9
9
  description: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
10
10
  group: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
11
+ 'roadmap-enabled': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
12
+ 'quick-bug-report-enabled': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
11
13
  project: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
12
14
  };
13
15
  run(): Promise<unknown>;
@@ -3,10 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const core_1 = require("@oclif/core");
4
4
  const base_1 = require("../../base");
5
5
  class ProjectsUpdate extends base_1.BaseCommand {
6
- static description = 'Update a project (name, key, color, description, group)';
6
+ static description = 'Update a project (name, key, color, description, group, feature flags)';
7
7
  static examples = [
8
8
  '<%= config.bin %> projects update --project LBRA --name "New name"',
9
9
  '<%= config.bin %> projects update -p LBRA --group Backend',
10
+ '<%= config.bin %> projects update -p LBRA --roadmap-enabled --no-quick-bug-report-enabled',
10
11
  ];
11
12
  static flags = {
12
13
  ...base_1.projectFlag,
@@ -15,6 +16,14 @@ class ProjectsUpdate extends base_1.BaseCommand {
15
16
  color: core_1.Flags.string({ description: 'Color label' }),
16
17
  description: core_1.Flags.string({ description: 'Free-form description' }),
17
18
  group: core_1.Flags.string({ description: 'Group id (UUID) or name to move the project into' }),
19
+ 'roadmap-enabled': core_1.Flags.boolean({
20
+ allowNo: true,
21
+ description: 'Enable/disable the roadmap (feature/improvement tickets + milestones) for this project',
22
+ }),
23
+ 'quick-bug-report-enabled': core_1.Flags.boolean({
24
+ allowNo: true,
25
+ description: 'Enable/disable the AI-assisted quick bug report on this project',
26
+ }),
18
27
  };
19
28
  async run() {
20
29
  const { flags } = await this.parse(ProjectsUpdate);
@@ -26,6 +35,10 @@ class ProjectsUpdate extends base_1.BaseCommand {
26
35
  }
27
36
  if (flags.group !== undefined)
28
37
  body.group_id = await this.resolveGroupId(flags.group);
38
+ if (flags['roadmap-enabled'] !== undefined)
39
+ body.roadmap_enabled = flags['roadmap-enabled'];
40
+ if (flags['quick-bug-report-enabled'] !== undefined)
41
+ body.quick_bug_report_enabled = flags['quick-bug-report-enabled'];
29
42
  const res = await this.api.put(`/cli/v1/projects/${projectId}`, body);
30
43
  if (!this.jsonEnabled()) {
31
44
  const p = res.data ?? {};
@@ -0,0 +1,10 @@
1
+ import { BaseCommand } from '../../base';
2
+ export default class ReleasesList extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ page: import("@oclif/core/lib/interfaces").OptionFlag<number, import("@oclif/core/lib/interfaces").CustomOptions>;
7
+ project: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
8
+ };
9
+ run(): Promise<unknown>;
10
+ }
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const base_1 = require("../../base");
4
+ const output_1 = require("../../lib/output");
5
+ class ReleasesList extends base_1.BaseCommand {
6
+ static description = 'List the releases of a project (tracked from CI)';
7
+ static examples = [
8
+ '<%= config.bin %> releases list --project acme-api',
9
+ '<%= config.bin %> releases list -p acme-api --page 2 --json',
10
+ ];
11
+ static flags = { ...base_1.projectFlag, ...base_1.pageFlag };
12
+ async run() {
13
+ const { flags } = await this.parse(ReleasesList);
14
+ const projectId = await this.resolveProjectId(flags.project);
15
+ const res = await this.api.get(`/cli/v1/projects/${projectId}/releases?page=${flags.page}`);
16
+ const releases = res.data ?? [];
17
+ if (!this.jsonEnabled()) {
18
+ this.log((0, output_1.renderTable)(['VERSION', 'ENVIRONMENT', 'SHA', 'EVENTS', 'ID'], releases.map((release) => [
19
+ String(release.version ?? ''),
20
+ String(release.environment ?? ''),
21
+ String(release.sha ?? ''),
22
+ String(release.events_count ?? '0'),
23
+ String(release.id ?? ''),
24
+ ])));
25
+ }
26
+ return res;
27
+ }
28
+ }
29
+ exports.default = ReleasesList;
@@ -0,0 +1,12 @@
1
+ import { BaseCommand } from '../../base';
2
+ export default class TicketsLinks extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ id: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
7
+ };
8
+ static flags: {
9
+ project: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
10
+ };
11
+ run(): Promise<unknown>;
12
+ }
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@oclif/core");
4
+ const base_1 = require("../../base");
5
+ const output_1 = require("../../lib/output");
6
+ class TicketsLinks extends base_1.BaseCommand {
7
+ // List the ticket↔ticket links (duplicate/related) involving a ticket. Creation lives only in the web
8
+ // dedup flow → not exposed on the CLI; here it's read-only, and `tickets unlink` removes a link.
9
+ static description = 'List the ticket-to-ticket links involving a ticket (duplicate/related)';
10
+ static examples = [
11
+ '<%= config.bin %> tickets links <ticket-id> --project acme-api',
12
+ '<%= config.bin %> tickets links <ticket-id> -p acme-api --json',
13
+ ];
14
+ static args = {
15
+ id: core_1.Args.string({ description: 'Ticket id or code (e.g. DRFL-3)', required: true }),
16
+ };
17
+ static flags = { ...base_1.projectFlag };
18
+ async run() {
19
+ const { args, flags } = await this.parse(TicketsLinks);
20
+ const projectId = await this.resolveProjectId(flags.project);
21
+ const res = await this.api.get(`/cli/v1/projects/${projectId}/tickets/${args.id}/links`);
22
+ const links = res.data ?? [];
23
+ if (!this.jsonEnabled()) {
24
+ this.log((0, output_1.renderTable)(['ID', 'KIND', 'OTHER_TICKET'], links.map((link) => [
25
+ String(link.id ?? ''),
26
+ String(link.kind ?? ''),
27
+ String(link.other_ticket_code ?? ''),
28
+ ])));
29
+ }
30
+ return res;
31
+ }
32
+ }
33
+ exports.default = TicketsLinks;
@@ -0,0 +1,13 @@
1
+ import { BaseCommand } from '../../base';
2
+ export default class TicketsReviewer extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ id: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
7
+ };
8
+ static flags: {
9
+ 'reviewer-id': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
10
+ project: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
11
+ };
12
+ run(): Promise<unknown>;
13
+ }
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@oclif/core");
4
+ const base_1 = require("../../base");
5
+ const output_1 = require("../../lib/output");
6
+ class TicketsReviewer extends base_1.BaseCommand {
7
+ // Set the reviewer of a ticket (the backend gates `tickets.assign`). The reviewer is pinged only when
8
+ // the ticket enters a review-gate status (backend). To remove the reviewer: tickets unreviewer.
9
+ static description = 'Set the reviewer of a ticket (requires tickets.assign)';
10
+ static examples = ['<%= config.bin %> tickets reviewer <ticket-id> --project acme-api --reviewer-id <account-id>'];
11
+ static args = {
12
+ id: core_1.Args.string({ description: 'Ticket id or code (e.g. DRFL-3)', required: true }),
13
+ };
14
+ static flags = {
15
+ ...base_1.projectFlag,
16
+ 'reviewer-id': core_1.Flags.string({ description: 'Account id to set as reviewer', required: true }),
17
+ };
18
+ async run() {
19
+ const { args, flags } = await this.parse(TicketsReviewer);
20
+ const projectId = await this.resolveProjectId(flags.project);
21
+ const res = await this.api.put(`/cli/v1/projects/${projectId}/tickets/${args.id}/reviewer`, { reviewer_id: flags['reviewer-id'] });
22
+ if (!this.jsonEnabled()) {
23
+ this.log(`Ticket ${args.id} reviewer set:`);
24
+ this.log((0, output_1.renderRecord)(res.data ?? {}));
25
+ }
26
+ return res;
27
+ }
28
+ }
29
+ exports.default = TicketsReviewer;
@@ -0,0 +1,14 @@
1
+ import { BaseCommand } from '../../base';
2
+ export default class TicketsUnlink extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ id: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
7
+ linkId: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
8
+ };
9
+ static flags: {
10
+ confirm: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
11
+ project: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
12
+ };
13
+ run(): Promise<unknown>;
14
+ }
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@oclif/core");
4
+ const base_1 = require("../../base");
5
+ class TicketsUnlink extends base_1.BaseCommand {
6
+ // Remove a ticket↔ticket link (the backend gates `tickets.edit`). Irreversible → requires --confirm.
7
+ static description = 'Remove a ticket-to-ticket link (irreversible; requires tickets.edit)';
8
+ static examples = ['<%= config.bin %> tickets unlink <ticket-id> <link-id> --project acme-api --confirm'];
9
+ static args = {
10
+ id: core_1.Args.string({ description: 'Ticket id or code (e.g. DRFL-3)', required: true }),
11
+ linkId: core_1.Args.string({ description: 'Link id to remove', required: true }),
12
+ };
13
+ static flags = {
14
+ ...base_1.projectFlag,
15
+ confirm: core_1.Flags.boolean({ description: 'Required: confirm the irreversible removal' }),
16
+ };
17
+ async run() {
18
+ const { args, flags } = await this.parse(TicketsUnlink);
19
+ if (!flags.confirm) {
20
+ this.error('Refusing to remove without --confirm (the action is irreversible).', { exit: 2 });
21
+ }
22
+ const projectId = await this.resolveProjectId(flags.project);
23
+ await this.api.delete(`/cli/v1/projects/${projectId}/tickets/${args.id}/links/${args.linkId}`);
24
+ if (!this.jsonEnabled())
25
+ this.log(`Removed link ${args.linkId} from ticket ${args.id}`);
26
+ return { removed: args.linkId };
27
+ }
28
+ }
29
+ exports.default = TicketsUnlink;
@@ -0,0 +1,12 @@
1
+ import { BaseCommand } from '../../base';
2
+ export default class TicketsUnreviewer extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ id: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
7
+ };
8
+ static flags: {
9
+ project: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
10
+ };
11
+ run(): Promise<unknown>;
12
+ }
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@oclif/core");
4
+ const base_1 = require("../../base");
5
+ const output_1 = require("../../lib/output");
6
+ class TicketsUnreviewer extends base_1.BaseCommand {
7
+ // Remove the reviewer of a ticket (the backend gates `tickets.assign`; idempotent).
8
+ static description = 'Remove the reviewer of a ticket (requires tickets.assign)';
9
+ static examples = ['<%= config.bin %> tickets unreviewer <ticket-id> --project acme-api'];
10
+ static args = {
11
+ id: core_1.Args.string({ description: 'Ticket id or code (e.g. DRFL-3)', required: true }),
12
+ };
13
+ static flags = { ...base_1.projectFlag };
14
+ async run() {
15
+ const { args, flags } = await this.parse(TicketsUnreviewer);
16
+ const projectId = await this.resolveProjectId(flags.project);
17
+ const res = await this.api.delete(`/cli/v1/projects/${projectId}/tickets/${args.id}/reviewer`);
18
+ if (!this.jsonEnabled()) {
19
+ this.log(`Ticket ${args.id} reviewer removed:`);
20
+ this.log((0, output_1.renderRecord)(res.data ?? {}));
21
+ }
22
+ return res;
23
+ }
24
+ }
25
+ exports.default = TicketsUnreviewer;
@@ -0,0 +1,12 @@
1
+ import { BaseCommand } from '../../base';
2
+ export default class TicketsUnwatch extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ id: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
7
+ };
8
+ static flags: {
9
+ project: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
10
+ };
11
+ run(): Promise<unknown>;
12
+ }
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@oclif/core");
4
+ const base_1 = require("../../base");
5
+ const output_1 = require("../../lib/output");
6
+ class TicketsUnwatch extends base_1.BaseCommand {
7
+ // Stop watching a ticket (idempotent).
8
+ static description = 'Stop watching a ticket (idempotent)';
9
+ static examples = ['<%= config.bin %> tickets unwatch <ticket-id> --project acme-api'];
10
+ static args = {
11
+ id: core_1.Args.string({ description: 'Ticket id or code (e.g. DRFL-3)', required: true }),
12
+ };
13
+ static flags = { ...base_1.projectFlag };
14
+ async run() {
15
+ const { args, flags } = await this.parse(TicketsUnwatch);
16
+ const projectId = await this.resolveProjectId(flags.project);
17
+ const res = await this.api.delete(`/cli/v1/projects/${projectId}/tickets/${args.id}/watch`);
18
+ if (!this.jsonEnabled()) {
19
+ this.log(`Stopped watching ticket ${args.id}:`);
20
+ this.log((0, output_1.renderRecord)(res.data ?? {}));
21
+ }
22
+ return res;
23
+ }
24
+ }
25
+ exports.default = TicketsUnwatch;
@@ -0,0 +1,12 @@
1
+ import { BaseCommand } from '../../base';
2
+ export default class TicketsWatch extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ id: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
7
+ };
8
+ static flags: {
9
+ project: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
10
+ };
11
+ run(): Promise<unknown>;
12
+ }
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@oclif/core");
4
+ const base_1 = require("../../base");
5
+ const output_1 = require("../../lib/output");
6
+ class TicketsWatch extends base_1.BaseCommand {
7
+ // Watch a ticket to receive its notifications (idempotent). Anyone who can see the ticket may watch it:
8
+ // participation IS the gate, no permission key. To stop: tickets unwatch.
9
+ static description = 'Watch a ticket to receive its notifications (idempotent)';
10
+ static examples = ['<%= config.bin %> tickets watch <ticket-id> --project acme-api'];
11
+ static args = {
12
+ id: core_1.Args.string({ description: 'Ticket id or code (e.g. DRFL-3)', required: true }),
13
+ };
14
+ static flags = { ...base_1.projectFlag };
15
+ async run() {
16
+ const { args, flags } = await this.parse(TicketsWatch);
17
+ const projectId = await this.resolveProjectId(flags.project);
18
+ const res = await this.api.put(`/cli/v1/projects/${projectId}/tickets/${args.id}/watch`);
19
+ if (!this.jsonEnabled()) {
20
+ this.log(`Watching ticket ${args.id}:`);
21
+ this.log((0, output_1.renderRecord)(res.data ?? {}));
22
+ }
23
+ return res;
24
+ }
25
+ }
26
+ exports.default = TicketsWatch;
@@ -0,0 +1,10 @@
1
+ import { BaseCommand } from '../../base';
2
+ export default class TodosComplete extends BaseCommand {
3
+ static args: {
4
+ listId: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
5
+ itemId: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
6
+ };
7
+ static description: string;
8
+ static examples: string[];
9
+ run(): Promise<unknown>;
10
+ }
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@oclif/core");
4
+ const base_1 = require("../../base");
5
+ const output_1 = require("../../lib/output");
6
+ class TodosComplete extends base_1.BaseCommand {
7
+ static args = {
8
+ listId: core_1.Args.string({ description: 'Todo list id', required: true }),
9
+ itemId: core_1.Args.string({ description: 'Todo item id', required: true }),
10
+ };
11
+ static description = 'Mark a todo item as done';
12
+ static examples = ['<%= config.bin %> todos complete <list-id> <item-id>'];
13
+ async run() {
14
+ const { args } = await this.parse(TodosComplete);
15
+ const res = await this.api.put(`/cli/v1/todo_lists/${args.listId}/items/${args.itemId}/completion`);
16
+ if (!this.jsonEnabled()) {
17
+ this.log('Todo item completed:');
18
+ this.log((0, output_1.renderRecord)(res.data ?? {}));
19
+ }
20
+ return res;
21
+ }
22
+ }
23
+ exports.default = TodosComplete;
@@ -0,0 +1,10 @@
1
+ import { BaseCommand } from '../../base';
2
+ export default class TodosCreate extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ name: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
7
+ color: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
8
+ };
9
+ run(): Promise<unknown>;
10
+ }
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@oclif/core");
4
+ const base_1 = require("../../base");
5
+ const output_1 = require("../../lib/output");
6
+ class TodosCreate extends base_1.BaseCommand {
7
+ static description = 'Create a todo list';
8
+ static examples = [
9
+ '<%= config.bin %> todos create --name "Sprint prep"',
10
+ '<%= config.bin %> todos create --name "Sprint prep" --color indigo',
11
+ ];
12
+ static flags = {
13
+ name: core_1.Flags.string({ description: 'List name', required: true }),
14
+ color: core_1.Flags.string({ description: 'Color label' }),
15
+ };
16
+ async run() {
17
+ const { flags } = await this.parse(TodosCreate);
18
+ const body = { name: flags.name };
19
+ if (flags.color !== undefined)
20
+ body.color = flags.color;
21
+ const res = await this.api.post('/cli/v1/todo_lists', body);
22
+ if (!this.jsonEnabled()) {
23
+ this.log('Todo list created:');
24
+ this.log((0, output_1.renderRecord)(res.data ?? {}));
25
+ }
26
+ return res;
27
+ }
28
+ }
29
+ exports.default = TodosCreate;
@@ -0,0 +1,12 @@
1
+ import { BaseCommand } from '../../base';
2
+ export default class TodosDelete extends BaseCommand {
3
+ static args: {
4
+ id: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
5
+ };
6
+ static description: string;
7
+ static examples: string[];
8
+ static flags: {
9
+ confirm: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
10
+ };
11
+ run(): Promise<unknown>;
12
+ }
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@oclif/core");
4
+ const base_1 = require("../../base");
5
+ class TodosDelete extends base_1.BaseCommand {
6
+ static args = {
7
+ id: core_1.Args.string({ description: 'Todo list id', required: true }),
8
+ };
9
+ static description = 'Delete a todo list (irreversible)';
10
+ static examples = ['<%= config.bin %> todos delete <list-id> --confirm'];
11
+ static flags = {
12
+ confirm: core_1.Flags.boolean({ description: 'Required: confirm the irreversible deletion' }),
13
+ };
14
+ async run() {
15
+ const { args, flags } = await this.parse(TodosDelete);
16
+ if (!flags.confirm) {
17
+ this.error('Refusing to delete without --confirm (the action is irreversible).', { exit: 2 });
18
+ }
19
+ await this.api.delete(`/cli/v1/todo_lists/${args.id}`);
20
+ if (!this.jsonEnabled())
21
+ this.log(`Deleted todo list ${args.id}`);
22
+ return { deleted: args.id };
23
+ }
24
+ }
25
+ exports.default = TodosDelete;
@@ -0,0 +1,14 @@
1
+ import { BaseCommand } from '../../../base';
2
+ export default class TodosItemsAdd extends BaseCommand {
3
+ static args: {
4
+ listId: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
5
+ };
6
+ static description: string;
7
+ static examples: string[];
8
+ static flags: {
9
+ title: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
10
+ ticket: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
11
+ position: import("@oclif/core/lib/interfaces").OptionFlag<number | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
12
+ };
13
+ run(): Promise<unknown>;
14
+ }
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@oclif/core");
4
+ const base_1 = require("../../../base");
5
+ const output_1 = require("../../../lib/output");
6
+ class TodosItemsAdd extends base_1.BaseCommand {
7
+ static args = {
8
+ listId: core_1.Args.string({ description: 'Todo list id', required: true }),
9
+ };
10
+ static description = 'Add an item to a todo list';
11
+ static examples = [
12
+ '<%= config.bin %> todos items add <list-id> --title "Write the changelog"',
13
+ '<%= config.bin %> todos items add <list-id> --title "Fix login" --ticket <ticket-id>',
14
+ ];
15
+ static flags = {
16
+ title: core_1.Flags.string({ description: 'Item title', required: true }),
17
+ ticket: core_1.Flags.string({ description: 'Link the item to a ticket id' }),
18
+ position: core_1.Flags.integer({ description: 'Position in the list' }),
19
+ };
20
+ async run() {
21
+ const { args, flags } = await this.parse(TodosItemsAdd);
22
+ const body = { title: flags.title };
23
+ if (flags.ticket !== undefined)
24
+ body.ticket_id = flags.ticket;
25
+ if (flags.position !== undefined)
26
+ body.position = flags.position;
27
+ const res = await this.api.post(`/cli/v1/todo_lists/${args.listId}/items`, body);
28
+ if (!this.jsonEnabled()) {
29
+ this.log('Todo item added:');
30
+ this.log((0, output_1.renderRecord)(res.data ?? {}));
31
+ }
32
+ return res;
33
+ }
34
+ }
35
+ exports.default = TodosItemsAdd;