@bussolabs/closeyourit-cli 0.18.0 → 0.20.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 (75) hide show
  1. package/README.md +29 -5
  2. package/dist/base.d.ts +11 -0
  3. package/dist/base.js +31 -0
  4. package/dist/commands/alerts/notifications/read-all.js +3 -0
  5. package/dist/commands/alerts/preferences/show.js +2 -0
  6. package/dist/commands/ideas/convert.d.ts +2 -2
  7. package/dist/commands/ideas/convert.js +25 -8
  8. package/dist/commands/kb/create.js +29 -6
  9. package/dist/commands/kb/update.js +26 -5
  10. package/dist/commands/logout.js +3 -0
  11. package/dist/commands/org/show.js +2 -0
  12. package/dist/commands/personal/import.js +2 -2
  13. package/dist/commands/personal/run.js +1 -1
  14. package/dist/commands/run.js +1 -1
  15. package/dist/commands/secrets/import.js +2 -2
  16. package/dist/commands/seo/ignore.d.ts +12 -0
  17. package/dist/commands/seo/ignore.js +27 -0
  18. package/dist/commands/seo/list.d.ts +13 -0
  19. package/dist/commands/seo/list.js +52 -0
  20. package/dist/commands/seo/pages.d.ts +11 -0
  21. package/dist/commands/seo/pages.js +44 -0
  22. package/dist/commands/seo/promote.d.ts +9 -0
  23. package/dist/commands/seo/promote.js +22 -0
  24. package/dist/commands/seo/reopen.d.ts +9 -0
  25. package/dist/commands/seo/reopen.js +21 -0
  26. package/dist/commands/seo/rescan.d.ts +9 -0
  27. package/dist/commands/seo/rescan.js +21 -0
  28. package/dist/commands/seo/show.d.ts +9 -0
  29. package/dist/commands/seo/show.js +35 -0
  30. package/dist/commands/seo-sites/create.d.ts +14 -0
  31. package/dist/commands/seo-sites/create.js +43 -0
  32. package/dist/commands/seo-sites/delete.d.ts +9 -0
  33. package/dist/commands/seo-sites/delete.js +21 -0
  34. package/dist/commands/seo-sites/list.d.ts +10 -0
  35. package/dist/commands/seo-sites/list.js +38 -0
  36. package/dist/commands/seo-sites/update.d.ts +17 -0
  37. package/dist/commands/seo-sites/update.js +45 -0
  38. package/dist/commands/servers/ignored-containers.d.ts +15 -0
  39. package/dist/commands/servers/ignored-containers.js +51 -0
  40. package/dist/commands/tickets/comment.d.ts +14 -3
  41. package/dist/commands/tickets/comment.js +29 -1
  42. package/dist/commands/tickets/create.d.ts +6 -6
  43. package/dist/commands/tickets/create.js +21 -2
  44. package/dist/commands/tickets/report-show.d.ts +20 -0
  45. package/dist/commands/tickets/report-show.js +38 -0
  46. package/dist/commands/tickets/report-versions.d.ts +19 -0
  47. package/dist/commands/tickets/report-versions.js +40 -0
  48. package/dist/commands/tickets/report.d.ts +24 -0
  49. package/dist/commands/tickets/report.js +69 -0
  50. package/dist/commands/tickets/status.d.ts +1 -1
  51. package/dist/commands/tickets/status.js +14 -4
  52. package/dist/commands/tickets/update.d.ts +25 -6
  53. package/dist/commands/tickets/update.js +144 -9
  54. package/dist/commands/whoami.js +3 -0
  55. package/dist/errors/error-codes.d.ts +9 -0
  56. package/dist/errors/error-codes.js +14 -0
  57. package/dist/errors/input-error.d.ts +16 -0
  58. package/dist/errors/input-error.js +42 -0
  59. package/dist/lib/alert-events.d.ts +8 -1
  60. package/dist/lib/alert-events.js +37 -1
  61. package/dist/lib/limits.d.ts +59 -0
  62. package/dist/lib/limits.js +92 -0
  63. package/dist/lib/stdin.d.ts +1 -2
  64. package/dist/lib/stdin.js +1 -2
  65. package/dist/lib/subprocess.d.ts +1 -1
  66. package/dist/lib/subprocess.js +1 -1
  67. package/dist/lib/ticket-body.d.ts +22 -6
  68. package/dist/lib/ticket-body.js +71 -9
  69. package/dist/lib/ticket-lookup.d.ts +53 -0
  70. package/dist/lib/ticket-lookup.js +78 -0
  71. package/dist/lib/ticket-report.d.ts +7 -0
  72. package/dist/lib/ticket-report.js +14 -0
  73. package/oclif.manifest.json +3596 -2674
  74. package/opencli.json +698 -54
  75. package/package.json +8 -8
package/opencli.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "opencli": "0.1",
4
4
  "info": {
5
5
  "title": "closeyourit",
6
- "version": "0.18.0",
6
+ "version": "0.20.0",
7
7
  "description": "CLI for CloseYourIt — manage org, errors, tokens and tickets with your user token",
8
8
  "license": {
9
9
  "name": "MIT",
@@ -264,7 +264,36 @@
264
264
  "server_disk",
265
265
  "server_temp",
266
266
  "server_service_failed",
267
- "server_smart_failing"
267
+ "server_smart_failing",
268
+ "error_spike",
269
+ "log_alert",
270
+ "server_db_down",
271
+ "server_db_connections",
272
+ "server_replication_lag",
273
+ "agents_stalled",
274
+ "server_container_down",
275
+ "agents_host_failing",
276
+ "uptime_slow",
277
+ "analytics_traffic_drop",
278
+ "analytics_traffic_spike",
279
+ "idea_created",
280
+ "idea_commented",
281
+ "workload_due_soon",
282
+ "dataset_training_completed",
283
+ "dataset_training_failed",
284
+ "agents_host_stale",
285
+ "vulnerability_new",
286
+ "runtime_eol",
287
+ "embedding_down",
288
+ "server_container_up",
289
+ "server_db_connection_usage",
290
+ "server_data_volume_disk",
291
+ "server_inode",
292
+ "server_replication_down",
293
+ "server_replication_up",
294
+ "server_container_restart_loop",
295
+ "server_container_stable",
296
+ "seo_issue_new"
268
297
  ]
269
298
  }
270
299
  ]
@@ -606,7 +635,36 @@
606
635
  "server_disk",
607
636
  "server_temp",
608
637
  "server_service_failed",
609
- "server_smart_failing"
638
+ "server_smart_failing",
639
+ "error_spike",
640
+ "log_alert",
641
+ "server_db_down",
642
+ "server_db_connections",
643
+ "server_replication_lag",
644
+ "agents_stalled",
645
+ "server_container_down",
646
+ "agents_host_failing",
647
+ "uptime_slow",
648
+ "analytics_traffic_drop",
649
+ "analytics_traffic_spike",
650
+ "idea_created",
651
+ "idea_commented",
652
+ "workload_due_soon",
653
+ "dataset_training_completed",
654
+ "dataset_training_failed",
655
+ "agents_host_stale",
656
+ "vulnerability_new",
657
+ "runtime_eol",
658
+ "embedding_down",
659
+ "server_container_up",
660
+ "server_db_connection_usage",
661
+ "server_data_volume_disk",
662
+ "server_inode",
663
+ "server_replication_down",
664
+ "server_replication_up",
665
+ "server_container_restart_loop",
666
+ "server_container_stable",
667
+ "seo_issue_new"
610
668
  ]
611
669
  }
612
670
  ]
@@ -1890,7 +1948,7 @@
1890
1948
  },
1891
1949
  {
1892
1950
  "name": "--title",
1893
- "description": "Ticket title (skips AI when set together with --description)",
1951
+ "description": "Ticket title (skips AI when set together with --description, max 255 characters)",
1894
1952
  "arguments": [
1895
1953
  {
1896
1954
  "name": "TITLE",
@@ -1900,7 +1958,7 @@
1900
1958
  },
1901
1959
  {
1902
1960
  "name": "--description",
1903
- "description": "Ticket description (skips AI when set together with --title)",
1961
+ "description": "Ticket description (skips AI when set together with --title, max 4000 characters)",
1904
1962
  "arguments": [
1905
1963
  {
1906
1964
  "name": "DESCRIPTION",
@@ -1925,21 +1983,21 @@
1925
1983
  ]
1926
1984
  },
1927
1985
  {
1928
- "name": "--status-id",
1929
- "description": "Status lookup id (default: open)",
1986
+ "name": "--status",
1987
+ "description": "Status code, label or id (e.g. open, \"In Progress\") — default: open",
1930
1988
  "arguments": [
1931
1989
  {
1932
- "name": "STATUS-ID",
1990
+ "name": "STATUS",
1933
1991
  "required": true
1934
1992
  }
1935
1993
  ]
1936
1994
  },
1937
1995
  {
1938
- "name": "--priority-id",
1939
- "description": "Priority lookup id (default: medium)",
1996
+ "name": "--priority",
1997
+ "description": "Priority code, label or id (e.g. medium, High) — default: medium",
1940
1998
  "arguments": [
1941
1999
  {
1942
- "name": "PRIORITY-ID",
2000
+ "name": "PRIORITY",
1943
2001
  "required": true
1944
2002
  }
1945
2003
  ]
@@ -2453,7 +2511,7 @@
2453
2511
  },
2454
2512
  {
2455
2513
  "name": "--title",
2456
- "description": "Page title",
2514
+ "description": "Page title (max 255 characters)",
2457
2515
  "required": true,
2458
2516
  "arguments": [
2459
2517
  {
@@ -2474,7 +2532,7 @@
2474
2532
  },
2475
2533
  {
2476
2534
  "name": "--body",
2477
- "description": "Page body (markdown)",
2535
+ "description": "Page body (markdown, max 4000 characters)",
2478
2536
  "arguments": [
2479
2537
  {
2480
2538
  "name": "BODY",
@@ -2484,7 +2542,7 @@
2484
2542
  },
2485
2543
  {
2486
2544
  "name": "--body-file",
2487
- "description": "Read the body (markdown) from a local file",
2545
+ "description": "Read the body (markdown, max 4000 characters) from a local file",
2488
2546
  "arguments": [
2489
2547
  {
2490
2548
  "name": "BODY-FILE",
@@ -2494,7 +2552,7 @@
2494
2552
  },
2495
2553
  {
2496
2554
  "name": "--tech-spec",
2497
- "description": "Technical section, kept separate from the simple body",
2555
+ "description": "Technical section, kept separate from the simple body (max 1500 characters)",
2498
2556
  "arguments": [
2499
2557
  {
2500
2558
  "name": "TECH-SPEC",
@@ -2504,7 +2562,7 @@
2504
2562
  },
2505
2563
  {
2506
2564
  "name": "--tech-spec-file",
2507
- "description": "Read the technical section from a local file",
2565
+ "description": "Read the technical section (max 1500 characters) from a local file",
2508
2566
  "arguments": [
2509
2567
  {
2510
2568
  "name": "TECH-SPEC-FILE",
@@ -2518,7 +2576,7 @@
2518
2576
  },
2519
2577
  {
2520
2578
  "name": "--review-note",
2521
- "description": "One line explaining why the page is worth keeping (review queue)",
2579
+ "description": "One line explaining why the page is worth keeping (review queue, max 240 characters)",
2522
2580
  "arguments": [
2523
2581
  {
2524
2582
  "name": "REVIEW-NOTE",
@@ -2765,7 +2823,7 @@
2765
2823
  "options": [
2766
2824
  {
2767
2825
  "name": "--title",
2768
- "description": "New title",
2826
+ "description": "New title (max 255 characters)",
2769
2827
  "arguments": [
2770
2828
  {
2771
2829
  "name": "TITLE",
@@ -2785,7 +2843,7 @@
2785
2843
  },
2786
2844
  {
2787
2845
  "name": "--body",
2788
- "description": "New body (markdown)",
2846
+ "description": "New body (markdown, max 4000 characters)",
2789
2847
  "arguments": [
2790
2848
  {
2791
2849
  "name": "BODY",
@@ -2795,7 +2853,7 @@
2795
2853
  },
2796
2854
  {
2797
2855
  "name": "--body-file",
2798
- "description": "Read the new body (markdown) from a local file",
2856
+ "description": "Read the new body (markdown, max 4000 characters) from a local file",
2799
2857
  "arguments": [
2800
2858
  {
2801
2859
  "name": "BODY-FILE",
@@ -2805,7 +2863,7 @@
2805
2863
  },
2806
2864
  {
2807
2865
  "name": "--tech-spec",
2808
- "description": "New technical section, kept separate from the simple body",
2866
+ "description": "New technical section, kept separate from the simple body (max 1500 characters)",
2809
2867
  "arguments": [
2810
2868
  {
2811
2869
  "name": "TECH-SPEC",
@@ -2815,7 +2873,7 @@
2815
2873
  },
2816
2874
  {
2817
2875
  "name": "--tech-spec-file",
2818
- "description": "Read the new technical section from a local file",
2876
+ "description": "Read the new technical section (max 1500 characters) from a local file",
2819
2877
  "arguments": [
2820
2878
  {
2821
2879
  "name": "TECH-SPEC-FILE",
@@ -5082,7 +5140,7 @@
5082
5140
  "examples": [
5083
5141
  "closeyourit personal import --from-file .env",
5084
5142
  "closeyourit personal import --format json --from-file secrets.json",
5085
- "doppler secrets download --no-file --format json | closeyourit personal import --format json"
5143
+ "printf '{\"API_KEY\":\"value\"}' | closeyourit personal import --format json"
5086
5144
  ]
5087
5145
  },
5088
5146
  {
@@ -5095,7 +5153,7 @@
5095
5153
  },
5096
5154
  {
5097
5155
  "name": "run",
5098
- "description": "Run a command with your personal secrets injected as env vars (like `doppler run`). Secrets never touch disk.",
5156
+ "description": "Run a command with your personal secrets injected as env vars. Secrets never touch disk.",
5099
5157
  "examples": [
5100
5158
  "closeyourit personal run -- bundle exec rails server",
5101
5159
  "closeyourit personal run -- printenv OPENAI_API_KEY"
@@ -6192,7 +6250,7 @@
6192
6250
  },
6193
6251
  {
6194
6252
  "name": "run",
6195
- "description": "Run a command with the project/environment secrets injected as env vars (like `doppler run`). Secrets never touch disk.",
6253
+ "description": "Run a command with project/environment secrets injected as env vars. Secrets never touch disk.",
6196
6254
  "options": [
6197
6255
  {
6198
6256
  "name": "--project",
@@ -6820,7 +6878,7 @@
6820
6878
  "examples": [
6821
6879
  "closeyourit secrets import -p acme-api -e production --from-file .env",
6822
6880
  "closeyourit secrets import -p acme-api -e production --format json --from-file secrets.json",
6823
- "doppler secrets download --config production --no-file --format json | closeyourit secrets import -p acme-api -e production --format json"
6881
+ "printf '{\"API_KEY\":\"value\"}' | closeyourit secrets import -p acme-api -e development --format json"
6824
6882
  ]
6825
6883
  },
6826
6884
  {
@@ -6958,6 +7016,398 @@
6958
7016
  }
6959
7017
  ]
6960
7018
  },
7019
+ {
7020
+ "name": "seo",
7021
+ "commands": [
7022
+ {
7023
+ "name": "ignore",
7024
+ "description": "Ignore an SEO finding: you accept living with it",
7025
+ "options": [
7026
+ {
7027
+ "name": "--note",
7028
+ "description": "Why you are keeping it (shown alongside the ignored row)",
7029
+ "arguments": [
7030
+ {
7031
+ "name": "NOTE",
7032
+ "required": true
7033
+ }
7034
+ ]
7035
+ }
7036
+ ],
7037
+ "arguments": [
7038
+ {
7039
+ "name": "ID",
7040
+ "required": true,
7041
+ "description": "SEO finding id"
7042
+ }
7043
+ ],
7044
+ "examples": [
7045
+ "closeyourit seo ignore <issue-id>",
7046
+ "closeyourit seo ignore <issue-id> --note \"Service page, not meant to be found.\""
7047
+ ]
7048
+ },
7049
+ {
7050
+ "name": "list",
7051
+ "description": "List the SEO findings of your sites (cross-project)",
7052
+ "options": [
7053
+ {
7054
+ "name": "--project",
7055
+ "aliases": [
7056
+ "-p"
7057
+ ],
7058
+ "description": "Filter by project id (UUID) or key",
7059
+ "arguments": [
7060
+ {
7061
+ "name": "PROJECT",
7062
+ "required": true
7063
+ }
7064
+ ]
7065
+ },
7066
+ {
7067
+ "name": "--severity",
7068
+ "description": "Filter by severity (critical, high, medium, low)",
7069
+ "arguments": [
7070
+ {
7071
+ "name": "SEVERITY",
7072
+ "required": true
7073
+ }
7074
+ ]
7075
+ },
7076
+ {
7077
+ "name": "--status",
7078
+ "description": "Filter by status (open, resolved, ignored)",
7079
+ "arguments": [
7080
+ {
7081
+ "name": "STATUS",
7082
+ "required": true
7083
+ }
7084
+ ]
7085
+ },
7086
+ {
7087
+ "name": "--area",
7088
+ "description": "Filter by area (indexability, structure, content, i18n, performance)",
7089
+ "arguments": [
7090
+ {
7091
+ "name": "AREA",
7092
+ "required": true
7093
+ }
7094
+ ]
7095
+ },
7096
+ {
7097
+ "name": "--page",
7098
+ "description": "Page number",
7099
+ "arguments": [
7100
+ {
7101
+ "name": "PAGE",
7102
+ "required": true
7103
+ }
7104
+ ]
7105
+ }
7106
+ ],
7107
+ "examples": [
7108
+ "closeyourit seo list",
7109
+ "closeyourit seo list --severity critical",
7110
+ "closeyourit seo list --project acme-site --status open",
7111
+ "closeyourit seo list --area indexability --json"
7112
+ ]
7113
+ },
7114
+ {
7115
+ "name": "pages",
7116
+ "description": "List the pages the SEO check has visited, with their state",
7117
+ "options": [
7118
+ {
7119
+ "name": "--project",
7120
+ "aliases": [
7121
+ "-p"
7122
+ ],
7123
+ "description": "Filter by project id (UUID) or key",
7124
+ "arguments": [
7125
+ {
7126
+ "name": "PROJECT",
7127
+ "required": true
7128
+ }
7129
+ ]
7130
+ },
7131
+ {
7132
+ "name": "--url",
7133
+ "description": "Filter by URL (partial match)",
7134
+ "arguments": [
7135
+ {
7136
+ "name": "URL",
7137
+ "required": true
7138
+ }
7139
+ ]
7140
+ },
7141
+ {
7142
+ "name": "--page",
7143
+ "description": "Page number",
7144
+ "arguments": [
7145
+ {
7146
+ "name": "PAGE",
7147
+ "required": true
7148
+ }
7149
+ ]
7150
+ }
7151
+ ],
7152
+ "examples": [
7153
+ "closeyourit seo pages",
7154
+ "closeyourit seo pages --project acme-site",
7155
+ "closeyourit seo pages --url /prezzi --json"
7156
+ ]
7157
+ },
7158
+ {
7159
+ "name": "promote",
7160
+ "description": "Open a ticket from an SEO finding, evidence included",
7161
+ "arguments": [
7162
+ {
7163
+ "name": "ID",
7164
+ "required": true,
7165
+ "description": "SEO finding id"
7166
+ }
7167
+ ],
7168
+ "examples": [
7169
+ "closeyourit seo promote <issue-id>"
7170
+ ]
7171
+ },
7172
+ {
7173
+ "name": "reopen",
7174
+ "description": "Reopen an ignored SEO finding: you changed your mind",
7175
+ "arguments": [
7176
+ {
7177
+ "name": "ID",
7178
+ "required": true,
7179
+ "description": "SEO finding id"
7180
+ }
7181
+ ],
7182
+ "examples": [
7183
+ "closeyourit seo reopen <issue-id>"
7184
+ ]
7185
+ },
7186
+ {
7187
+ "name": "rescan",
7188
+ "description": "Check a site now, without waiting for the next scheduled run",
7189
+ "options": [
7190
+ {
7191
+ "name": "--site",
7192
+ "description": "Site id (from `seo-sites list`)",
7193
+ "required": true,
7194
+ "arguments": [
7195
+ {
7196
+ "name": "SITE",
7197
+ "required": true
7198
+ }
7199
+ ]
7200
+ }
7201
+ ],
7202
+ "examples": [
7203
+ "closeyourit seo rescan --site <site-id>"
7204
+ ]
7205
+ },
7206
+ {
7207
+ "name": "show",
7208
+ "description": "Show a single SEO finding, with the evidence behind it",
7209
+ "arguments": [
7210
+ {
7211
+ "name": "ID",
7212
+ "required": true,
7213
+ "description": "SEO finding id"
7214
+ }
7215
+ ],
7216
+ "examples": [
7217
+ "closeyourit seo show <issue-id>"
7218
+ ]
7219
+ }
7220
+ ]
7221
+ },
7222
+ {
7223
+ "name": "seo-sites",
7224
+ "commands": [
7225
+ {
7226
+ "name": "create",
7227
+ "description": "Declare a site to keep an eye on (one per project and environment)",
7228
+ "options": [
7229
+ {
7230
+ "name": "--project",
7231
+ "aliases": [
7232
+ "-p"
7233
+ ],
7234
+ "description": "Project id (UUID) or key",
7235
+ "required": true,
7236
+ "arguments": [
7237
+ {
7238
+ "name": "PROJECT",
7239
+ "required": true
7240
+ }
7241
+ ]
7242
+ },
7243
+ {
7244
+ "name": "--url",
7245
+ "description": "Public address the visit starts from",
7246
+ "required": true,
7247
+ "arguments": [
7248
+ {
7249
+ "name": "URL",
7250
+ "required": true
7251
+ }
7252
+ ]
7253
+ },
7254
+ {
7255
+ "name": "--environment",
7256
+ "description": "Environment id (must be declared by the project)",
7257
+ "required": true,
7258
+ "arguments": [
7259
+ {
7260
+ "name": "ENVIRONMENT",
7261
+ "required": true
7262
+ }
7263
+ ]
7264
+ },
7265
+ {
7266
+ "name": "--frequency",
7267
+ "description": "How often to check it: daily (default) or weekly",
7268
+ "arguments": [
7269
+ {
7270
+ "name": "FREQUENCY",
7271
+ "required": true,
7272
+ "acceptedValues": [
7273
+ "daily",
7274
+ "weekly"
7275
+ ]
7276
+ }
7277
+ ]
7278
+ },
7279
+ {
7280
+ "name": "--max-pages",
7281
+ "description": "How many pages to visit at most each run",
7282
+ "arguments": [
7283
+ {
7284
+ "name": "MAX-PAGES",
7285
+ "required": true
7286
+ }
7287
+ ]
7288
+ },
7289
+ {
7290
+ "name": "--no-sitemap",
7291
+ "description": "Don't read the sitemap: start from the home page and follow links only"
7292
+ }
7293
+ ],
7294
+ "examples": [
7295
+ "closeyourit seo-sites create --project acme-site --url https://www.acme.example --environment <env-id>",
7296
+ "closeyourit seo-sites create -p acme-site --url https://www.acme.example --environment <env-id> --frequency weekly --max-pages 50"
7297
+ ]
7298
+ },
7299
+ {
7300
+ "name": "delete",
7301
+ "description": "Stop watching a site and remove its pages and findings",
7302
+ "arguments": [
7303
+ {
7304
+ "name": "ID",
7305
+ "required": true,
7306
+ "description": "Site id"
7307
+ }
7308
+ ],
7309
+ "examples": [
7310
+ "closeyourit seo-sites delete <site-id>"
7311
+ ]
7312
+ },
7313
+ {
7314
+ "name": "list",
7315
+ "description": "List the sites under SEO check",
7316
+ "options": [
7317
+ {
7318
+ "name": "--project",
7319
+ "aliases": [
7320
+ "-p"
7321
+ ],
7322
+ "description": "Filter by project id (UUID) or key",
7323
+ "arguments": [
7324
+ {
7325
+ "name": "PROJECT",
7326
+ "required": true
7327
+ }
7328
+ ]
7329
+ },
7330
+ {
7331
+ "name": "--page",
7332
+ "description": "Page number",
7333
+ "arguments": [
7334
+ {
7335
+ "name": "PAGE",
7336
+ "required": true
7337
+ }
7338
+ ]
7339
+ }
7340
+ ],
7341
+ "examples": [
7342
+ "closeyourit seo-sites list",
7343
+ "closeyourit seo-sites list --project acme-site --json"
7344
+ ]
7345
+ },
7346
+ {
7347
+ "name": "update",
7348
+ "description": "Change how a site is checked (project and environment are its identity: they never change)",
7349
+ "options": [
7350
+ {
7351
+ "name": "--url",
7352
+ "description": "Public address the visit starts from",
7353
+ "arguments": [
7354
+ {
7355
+ "name": "URL",
7356
+ "required": true
7357
+ }
7358
+ ]
7359
+ },
7360
+ {
7361
+ "name": "--frequency",
7362
+ "description": "How often to check it: daily or weekly",
7363
+ "arguments": [
7364
+ {
7365
+ "name": "FREQUENCY",
7366
+ "required": true,
7367
+ "acceptedValues": [
7368
+ "daily",
7369
+ "weekly"
7370
+ ]
7371
+ }
7372
+ ]
7373
+ },
7374
+ {
7375
+ "name": "--max-pages",
7376
+ "description": "How many pages to visit at most each run",
7377
+ "arguments": [
7378
+ {
7379
+ "name": "MAX-PAGES",
7380
+ "required": true
7381
+ }
7382
+ ]
7383
+ },
7384
+ {
7385
+ "name": "--sitemap",
7386
+ "description": "Read the sitemap"
7387
+ },
7388
+ {
7389
+ "name": "--enable",
7390
+ "description": "Resume the checks"
7391
+ },
7392
+ {
7393
+ "name": "--disable",
7394
+ "description": "Pause the checks (the site and its findings stay)"
7395
+ }
7396
+ ],
7397
+ "arguments": [
7398
+ {
7399
+ "name": "ID",
7400
+ "required": true,
7401
+ "description": "Site id"
7402
+ }
7403
+ ],
7404
+ "examples": [
7405
+ "closeyourit seo-sites update <site-id> --frequency weekly",
7406
+ "closeyourit seo-sites update <site-id> --max-pages 200 --disable"
7407
+ ]
7408
+ }
7409
+ ]
7410
+ },
6961
7411
  {
6962
7412
  "name": "servers",
6963
7413
  "description": "Server monitoring fleet (agents, enrollment tokens)",
@@ -6982,6 +7432,38 @@
6982
7432
  "closeyourit servers delete <server-id> --confirm"
6983
7433
  ]
6984
7434
  },
7435
+ {
7436
+ "name": "ignored-containers",
7437
+ "description": "Read or set the container names this server does not treat as services",
7438
+ "options": [
7439
+ {
7440
+ "name": "--clear",
7441
+ "description": "Remove every ignored container name"
7442
+ },
7443
+ {
7444
+ "name": "--set",
7445
+ "description": "Comma-separated names to ignore (replaces the list)",
7446
+ "arguments": [
7447
+ {
7448
+ "name": "SET",
7449
+ "required": true
7450
+ }
7451
+ ]
7452
+ }
7453
+ ],
7454
+ "arguments": [
7455
+ {
7456
+ "name": "ID",
7457
+ "required": true,
7458
+ "description": "Server id"
7459
+ }
7460
+ ],
7461
+ "examples": [
7462
+ "closeyourit servers ignored-containers <server-id>",
7463
+ "closeyourit servers ignored-containers <server-id> --set buildkit,runner",
7464
+ "closeyourit servers ignored-containers <server-id> --clear"
7465
+ ]
7466
+ },
6985
7467
  {
6986
7468
  "name": "list",
6987
7469
  "description": "List the monitored servers in your organization (fleet snapshot)",
@@ -7843,7 +8325,7 @@
7843
8325
  },
7844
8326
  {
7845
8327
  "name": "--body",
7846
- "description": "Comment body",
8328
+ "description": "Comment body (max 240 characters — longer text goes in the work report)",
7847
8329
  "required": true,
7848
8330
  "arguments": [
7849
8331
  {
@@ -7942,7 +8424,7 @@
7942
8424
  },
7943
8425
  {
7944
8426
  "name": "create",
7945
- "description": "Create a ticket",
8427
+ "description": "Create a ticket (status defaults to open, priority to medium; both take a code or a label)",
7946
8428
  "options": [
7947
8429
  {
7948
8430
  "name": "--project",
@@ -7960,7 +8442,7 @@
7960
8442
  },
7961
8443
  {
7962
8444
  "name": "--title",
7963
- "description": "Ticket title",
8445
+ "description": "Ticket title (max 255 characters)",
7964
8446
  "required": true,
7965
8447
  "arguments": [
7966
8448
  {
@@ -7987,7 +8469,7 @@
7987
8469
  },
7988
8470
  {
7989
8471
  "name": "--description",
7990
- "description": "Free-form description (human-simple summary)",
8472
+ "description": "Free-form description (human-simple summary, max 4000 characters)",
7991
8473
  "arguments": [
7992
8474
  {
7993
8475
  "name": "DESCRIPTION",
@@ -7997,7 +8479,7 @@
7997
8479
  },
7998
8480
  {
7999
8481
  "name": "--technical-analysis",
8000
- "description": "Technical analysis (stack, cause) — kept out of the human-simple body",
8482
+ "description": "Technical analysis (stack, cause) — kept out of the human-simple body (max 1500 characters)",
8001
8483
  "arguments": [
8002
8484
  {
8003
8485
  "name": "TECHNICAL-ANALYSIS",
@@ -8086,21 +8568,21 @@
8086
8568
  ]
8087
8569
  },
8088
8570
  {
8089
- "name": "--status-id",
8090
- "description": "Status lookup id",
8571
+ "name": "--status",
8572
+ "description": "Status code, label or id (e.g. open, \"In Progress\") — default: open",
8091
8573
  "arguments": [
8092
8574
  {
8093
- "name": "STATUS-ID",
8575
+ "name": "STATUS",
8094
8576
  "required": true
8095
8577
  }
8096
8578
  ]
8097
8579
  },
8098
8580
  {
8099
- "name": "--priority-id",
8100
- "description": "Priority lookup id",
8581
+ "name": "--priority",
8582
+ "description": "Priority code, label or id (e.g. medium, High) — default: medium",
8101
8583
  "arguments": [
8102
8584
  {
8103
- "name": "PRIORITY-ID",
8585
+ "name": "PRIORITY",
8104
8586
  "required": true
8105
8587
  }
8106
8588
  ]
@@ -8149,7 +8631,8 @@
8149
8631
  "examples": [
8150
8632
  "closeyourit tickets create --project acme-api --title \"Checkout fails\"",
8151
8633
  "closeyourit tickets create -p acme-api --title \"Login bug\" --kind bug --step-given \"logged out\" --step-when \"I submit\" --step-then \"it 500s\"",
8152
- "closeyourit tickets create -p acme-api --title \"Checkout\" --scenarios '[{\"title\":\"Happy\",\"step_given\":\"logged in\",\"step_when\":\"I pay\",\"step_then\":\"order created\"}]' --condition \"confirmation email is sent\""
8634
+ "closeyourit tickets create -p acme-api --title \"Checkout\" --scenarios '[{\"title\":\"Happy\",\"step_given\":\"logged in\",\"step_when\":\"I pay\",\"step_then\":\"order created\"}]' --condition \"confirmation email is sent\"",
8635
+ "closeyourit tickets create -p acme-api --title \"Payment retry\" --status in_progress --priority High"
8153
8636
  ]
8154
8637
  },
8155
8638
  {
@@ -8639,6 +9122,139 @@
8639
9122
  "closeyourit tickets reject <ticket-id> --project acme-api --reason \"Edge case not covered\""
8640
9123
  ]
8641
9124
  },
9125
+ {
9126
+ "name": "report",
9127
+ "description": "Write the work report of a ticket — the long text a comment cannot hold. Each write adds a version, it never overwrites the previous one",
9128
+ "options": [
9129
+ {
9130
+ "name": "--project",
9131
+ "aliases": [
9132
+ "-p"
9133
+ ],
9134
+ "description": "Project id (UUID) or key",
9135
+ "required": true,
9136
+ "arguments": [
9137
+ {
9138
+ "name": "PROJECT",
9139
+ "required": true
9140
+ }
9141
+ ]
9142
+ },
9143
+ {
9144
+ "name": "--body",
9145
+ "description": "Report body (markdown, max 20000 characters)",
9146
+ "arguments": [
9147
+ {
9148
+ "name": "BODY",
9149
+ "required": true
9150
+ }
9151
+ ]
9152
+ },
9153
+ {
9154
+ "name": "--body-file",
9155
+ "description": "Read the report body (max 20000 characters) from a local file",
9156
+ "arguments": [
9157
+ {
9158
+ "name": "BODY-FILE",
9159
+ "required": true
9160
+ }
9161
+ ]
9162
+ }
9163
+ ],
9164
+ "arguments": [
9165
+ {
9166
+ "name": "ID",
9167
+ "required": true,
9168
+ "description": "Ticket id or code (e.g. DRFL-3)"
9169
+ }
9170
+ ],
9171
+ "examples": [
9172
+ "closeyourit tickets report <ticket-id> --project acme-api --body \"Cosa ho fatto, come si verifica\"",
9173
+ "closeyourit tickets report DRFL-3 -p acme-api --body-file ./report.md"
9174
+ ]
9175
+ },
9176
+ {
9177
+ "name": "report-show",
9178
+ "description": "Show the current work report of a ticket, or a past version with --version",
9179
+ "options": [
9180
+ {
9181
+ "name": "--project",
9182
+ "aliases": [
9183
+ "-p"
9184
+ ],
9185
+ "description": "Project id (UUID) or key",
9186
+ "required": true,
9187
+ "arguments": [
9188
+ {
9189
+ "name": "PROJECT",
9190
+ "required": true
9191
+ }
9192
+ ]
9193
+ },
9194
+ {
9195
+ "name": "--version",
9196
+ "description": "Version number to read instead of the current one",
9197
+ "arguments": [
9198
+ {
9199
+ "name": "VERSION",
9200
+ "required": true
9201
+ }
9202
+ ]
9203
+ }
9204
+ ],
9205
+ "arguments": [
9206
+ {
9207
+ "name": "ID",
9208
+ "required": true,
9209
+ "description": "Ticket id or code (e.g. DRFL-3)"
9210
+ }
9211
+ ],
9212
+ "examples": [
9213
+ "closeyourit tickets report-show <ticket-id> --project acme-api",
9214
+ "closeyourit tickets report-show DRFL-3 -p acme-api --version 2"
9215
+ ]
9216
+ },
9217
+ {
9218
+ "name": "report-versions",
9219
+ "description": "List the versions of the work report of a ticket (newest first)",
9220
+ "options": [
9221
+ {
9222
+ "name": "--project",
9223
+ "aliases": [
9224
+ "-p"
9225
+ ],
9226
+ "description": "Project id (UUID) or key",
9227
+ "required": true,
9228
+ "arguments": [
9229
+ {
9230
+ "name": "PROJECT",
9231
+ "required": true
9232
+ }
9233
+ ]
9234
+ },
9235
+ {
9236
+ "name": "--page",
9237
+ "description": "Page number",
9238
+ "arguments": [
9239
+ {
9240
+ "name": "PAGE",
9241
+ "required": true
9242
+ }
9243
+ ]
9244
+ }
9245
+ ],
9246
+ "arguments": [
9247
+ {
9248
+ "name": "ID",
9249
+ "required": true,
9250
+ "description": "Ticket id or code (e.g. DRFL-3)"
9251
+ }
9252
+ ],
9253
+ "examples": [
9254
+ "closeyourit tickets report-versions <ticket-id> --project acme-api",
9255
+ "closeyourit tickets report-versions DRFL-3 -p acme-api --page 2 --json"
9256
+ ]
9257
+ },
8642
9258
  {
8643
9259
  "name": "reviewer",
8644
9260
  "description": "Set the reviewer of a ticket (requires tickets.assign)",
@@ -8714,7 +9330,7 @@
8714
9330
  },
8715
9331
  {
8716
9332
  "name": "status",
8717
- "description": "Change a ticket status",
9333
+ "description": "Change a ticket status (by code, label or id)",
8718
9334
  "options": [
8719
9335
  {
8720
9336
  "name": "--project",
@@ -8731,12 +9347,12 @@
8731
9347
  ]
8732
9348
  },
8733
9349
  {
8734
- "name": "--status-id",
8735
- "description": "Target status lookup id",
9350
+ "name": "--status",
9351
+ "description": "Target status code, label or id (e.g. in_review, \"In Review\")",
8736
9352
  "required": true,
8737
9353
  "arguments": [
8738
9354
  {
8739
- "name": "STATUS-ID",
9355
+ "name": "STATUS",
8740
9356
  "required": true
8741
9357
  }
8742
9358
  ]
@@ -8750,7 +9366,8 @@
8750
9366
  }
8751
9367
  ],
8752
9368
  "examples": [
8753
- "closeyourit tickets status <ticket-id> --project acme-api --status-id <status-id>"
9369
+ "closeyourit tickets status <ticket-id> --project acme-api --status in_review",
9370
+ "closeyourit tickets status <ticket-id> --project acme-api --status <status-id>"
8754
9371
  ]
8755
9372
  },
8756
9373
  {
@@ -8892,7 +9509,7 @@
8892
9509
  },
8893
9510
  {
8894
9511
  "name": "update",
8895
- "description": "Update a ticket (full replace fields you omit are cleared server-side)",
9512
+ "description": "Update a ticket, changing only the fields you pass (the others keep their current value; use --clear to empty one, --replace for the raw full replace)",
8896
9513
  "options": [
8897
9514
  {
8898
9515
  "name": "--project",
@@ -8910,7 +9527,7 @@
8910
9527
  },
8911
9528
  {
8912
9529
  "name": "--title",
8913
- "description": "Ticket title",
9530
+ "description": "Ticket title (max 255 characters)",
8914
9531
  "arguments": [
8915
9532
  {
8916
9533
  "name": "TITLE",
@@ -8936,7 +9553,7 @@
8936
9553
  },
8937
9554
  {
8938
9555
  "name": "--description",
8939
- "description": "Free-form description (human-simple summary)",
9556
+ "description": "Free-form description (human-simple summary, max 4000 characters)",
8940
9557
  "arguments": [
8941
9558
  {
8942
9559
  "name": "DESCRIPTION",
@@ -8946,7 +9563,7 @@
8946
9563
  },
8947
9564
  {
8948
9565
  "name": "--technical-analysis",
8949
- "description": "Technical analysis (stack, cause) — kept out of the human-simple body",
9566
+ "description": "Technical analysis (stack, cause) — kept out of the human-simple body (max 1500 characters)",
8950
9567
  "arguments": [
8951
9568
  {
8952
9569
  "name": "TECHNICAL-ANALYSIS",
@@ -9035,21 +9652,21 @@
9035
9652
  ]
9036
9653
  },
9037
9654
  {
9038
- "name": "--status-id",
9039
- "description": "Status lookup id",
9655
+ "name": "--status",
9656
+ "description": "Status code, label or id (e.g. open, \"In Progress\") — unchanged when omitted",
9040
9657
  "arguments": [
9041
9658
  {
9042
- "name": "STATUS-ID",
9659
+ "name": "STATUS",
9043
9660
  "required": true
9044
9661
  }
9045
9662
  ]
9046
9663
  },
9047
9664
  {
9048
- "name": "--priority-id",
9049
- "description": "Priority lookup id",
9665
+ "name": "--priority",
9666
+ "description": "Priority code, label or id (e.g. medium, High) — unchanged when omitted",
9050
9667
  "arguments": [
9051
9668
  {
9052
- "name": "PRIORITY-ID",
9669
+ "name": "PRIORITY",
9053
9670
  "required": true
9054
9671
  }
9055
9672
  ]
@@ -9093,6 +9710,30 @@
9093
9710
  "required": true
9094
9711
  }
9095
9712
  ]
9713
+ },
9714
+ {
9715
+ "name": "--clear",
9716
+ "description": "Empty a field on purpose (repeatable): description, technical-analysis, weight, due-at, assignee, milestone, parent, platforms",
9717
+ "arguments": [
9718
+ {
9719
+ "name": "CLEAR",
9720
+ "required": true,
9721
+ "acceptedValues": [
9722
+ "description",
9723
+ "technical-analysis",
9724
+ "weight",
9725
+ "due-at",
9726
+ "assignee",
9727
+ "milestone",
9728
+ "parent",
9729
+ "platforms"
9730
+ ]
9731
+ }
9732
+ ]
9733
+ },
9734
+ {
9735
+ "name": "--replace",
9736
+ "description": "Send only the flags you passed (full replace — every field you omit is cleared server-side)"
9096
9737
  }
9097
9738
  ],
9098
9739
  "arguments": [
@@ -9104,7 +9745,10 @@
9104
9745
  ],
9105
9746
  "examples": [
9106
9747
  "closeyourit tickets update <ticket-id> --project acme-api --title \"New title\"",
9107
- "closeyourit tickets update <ticket-id> -p acme-api --title \"Login bug\" --scenarios '[{\"step_given\":\"logged out\",\"step_when\":\"I submit\",\"step_then\":\"it 500s\",\"step_expected\":\"dashboard loads\"}]' --condition \"login works\""
9748
+ "closeyourit tickets update <ticket-id> -p acme-api --clear assignee --clear due-at",
9749
+ "closeyourit tickets update <ticket-id> -p acme-api --title \"Login bug\" --scenarios '[{\"step_given\":\"logged out\",\"step_when\":\"I submit\",\"step_then\":\"it 500s\",\"step_expected\":\"dashboard loads\"}]' --condition \"login works\"",
9750
+ "closeyourit tickets update <ticket-id> -p acme-api --status in_review --priority High",
9751
+ "closeyourit tickets update <ticket-id> -p acme-api --replace --title \"Only this\" --status open --priority medium"
9108
9752
  ]
9109
9753
  },
9110
9754
  {