@bussolabs/closeyourit-cli 0.21.0 → 0.23.1

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 (118) hide show
  1. package/README.md +45 -3
  2. package/dist/base.d.ts +23 -0
  3. package/dist/base.js +64 -4
  4. package/dist/commands/assistant/ask.d.ts +24 -0
  5. package/dist/commands/assistant/ask.js +112 -0
  6. package/dist/commands/assistant/conversations/create.d.ts +9 -0
  7. package/dist/commands/assistant/conversations/create.js +25 -0
  8. package/dist/commands/assistant/conversations/delete.d.ts +12 -0
  9. package/dist/commands/assistant/conversations/delete.js +25 -0
  10. package/dist/commands/assistant/conversations/list.d.ts +10 -0
  11. package/dist/commands/assistant/conversations/list.js +30 -0
  12. package/dist/commands/assistant/conversations/show.d.ts +9 -0
  13. package/dist/commands/assistant/conversations/show.js +25 -0
  14. package/dist/commands/errors/assign.d.ts +14 -0
  15. package/dist/commands/errors/assign.js +52 -0
  16. package/dist/commands/errors/bulk-triage.d.ts +11 -0
  17. package/dist/commands/errors/bulk-triage.js +41 -0
  18. package/dist/commands/errors/delete.d.ts +13 -0
  19. package/dist/commands/errors/delete.js +28 -0
  20. package/dist/commands/errors/grouping-rules/create.d.ts +15 -0
  21. package/dist/commands/errors/grouping-rules/create.js +44 -0
  22. package/dist/commands/errors/grouping-rules/delete.d.ts +13 -0
  23. package/dist/commands/errors/grouping-rules/delete.js +27 -0
  24. package/dist/commands/errors/grouping-rules/list.d.ts +10 -0
  25. package/dist/commands/errors/grouping-rules/list.js +28 -0
  26. package/dist/commands/errors/grouping-rules/update.d.ts +18 -0
  27. package/dist/commands/errors/grouping-rules/update.js +43 -0
  28. package/dist/commands/errors/merge.d.ts +14 -0
  29. package/dist/commands/errors/merge.js +39 -0
  30. package/dist/commands/errors/split.d.ts +13 -0
  31. package/dist/commands/errors/split.js +34 -0
  32. package/dist/commands/invitations/create.js +9 -2
  33. package/dist/commands/invitations/resend.js +8 -2
  34. package/dist/commands/kb/attach.d.ts +12 -0
  35. package/dist/commands/kb/attach.js +49 -0
  36. package/dist/commands/kb/attachment-download.d.ts +14 -0
  37. package/dist/commands/kb/attachment-download.js +38 -0
  38. package/dist/commands/kb/attachments.d.ts +9 -0
  39. package/dist/commands/kb/attachments.js +36 -0
  40. package/dist/commands/kb/create.d.ts +4 -1
  41. package/dist/commands/kb/create.js +41 -5
  42. package/dist/commands/kb/detach.d.ts +13 -0
  43. package/dist/commands/kb/detach.js +26 -0
  44. package/dist/commands/kb/show.js +3 -0
  45. package/dist/commands/kb/update.d.ts +4 -0
  46. package/dist/commands/kb/update.js +69 -21
  47. package/dist/commands/metrics/bulk-triage.d.ts +11 -0
  48. package/dist/commands/metrics/bulk-triage.js +44 -0
  49. package/dist/commands/seo-sites/show.d.ts +15 -0
  50. package/dist/commands/seo-sites/show.js +107 -0
  51. package/dist/commands/service-accounts/show.d.ts +9 -0
  52. package/dist/commands/service-accounts/show.js +26 -0
  53. package/dist/commands/service-accounts/tokens/list.d.ts +12 -0
  54. package/dist/commands/service-accounts/tokens/list.js +40 -0
  55. package/dist/commands/service-accounts/update.d.ts +31 -0
  56. package/dist/commands/service-accounts/update.js +105 -0
  57. package/dist/commands/shared/delete.d.ts +12 -0
  58. package/dist/commands/shared/delete.js +30 -0
  59. package/dist/commands/shared/list.d.ts +6 -0
  60. package/dist/commands/shared/list.js +45 -0
  61. package/dist/commands/shared/set.d.ts +14 -0
  62. package/dist/commands/shared/set.js +41 -0
  63. package/dist/commands/tickets/ask.d.ts +13 -0
  64. package/dist/commands/tickets/ask.js +81 -0
  65. package/dist/commands/tickets/dependencies/add.d.ts +15 -0
  66. package/dist/commands/tickets/dependencies/add.js +62 -0
  67. package/dist/commands/tickets/dependencies/list.d.ts +12 -0
  68. package/dist/commands/tickets/dependencies/list.js +37 -0
  69. package/dist/commands/tickets/dependencies/remove.d.ts +14 -0
  70. package/dist/commands/tickets/dependencies/remove.js +59 -0
  71. package/dist/commands/tickets/work-context.d.ts +15 -0
  72. package/dist/commands/tickets/work-context.js +130 -0
  73. package/dist/commands/vault/requests/approve.d.ts +9 -0
  74. package/dist/commands/vault/requests/approve.js +40 -0
  75. package/dist/commands/vault/requests/list.d.ts +6 -0
  76. package/dist/commands/vault/requests/list.js +29 -0
  77. package/dist/commands/vault/requests/reject.d.ts +12 -0
  78. package/dist/commands/vault/requests/reject.js +52 -0
  79. package/dist/commands/workload/create.d.ts +15 -0
  80. package/dist/commands/workload/create.js +45 -0
  81. package/dist/commands/workload/delete.d.ts +12 -0
  82. package/dist/commands/workload/delete.js +26 -0
  83. package/dist/commands/workload/list.d.ts +9 -0
  84. package/dist/commands/workload/list.js +29 -0
  85. package/dist/commands/workload/participant/add.d.ts +10 -0
  86. package/dist/commands/workload/participant/add.js +27 -0
  87. package/dist/commands/workload/participant/remove.d.ts +10 -0
  88. package/dist/commands/workload/participant/remove.js +23 -0
  89. package/dist/commands/workload/promote.d.ts +17 -0
  90. package/dist/commands/workload/promote.js +58 -0
  91. package/dist/commands/workload/show.d.ts +9 -0
  92. package/dist/commands/workload/show.js +24 -0
  93. package/dist/commands/workload/update.d.ts +17 -0
  94. package/dist/commands/workload/update.js +45 -0
  95. package/dist/errors/error-codes.d.ts +17 -0
  96. package/dist/errors/error-codes.js +36 -0
  97. package/dist/lib/api.d.ts +7 -1
  98. package/dist/lib/api.js +8 -0
  99. package/dist/lib/assistant.d.ts +29 -0
  100. package/dist/lib/assistant.js +76 -0
  101. package/dist/lib/bulk-triage.d.ts +35 -0
  102. package/dist/lib/bulk-triage.js +55 -0
  103. package/dist/lib/grouping-rules.d.ts +28 -0
  104. package/dist/lib/grouping-rules.js +39 -0
  105. package/dist/lib/knowledge.d.ts +15 -0
  106. package/dist/lib/knowledge.js +36 -0
  107. package/dist/lib/output.js +10 -0
  108. package/dist/lib/poll.d.ts +51 -0
  109. package/dist/lib/poll.js +59 -0
  110. package/dist/lib/service-accounts.d.ts +65 -0
  111. package/dist/lib/service-accounts.js +132 -0
  112. package/dist/lib/vault-requests.d.ts +38 -0
  113. package/dist/lib/vault-requests.js +125 -0
  114. package/dist/lib/workload.d.ts +37 -0
  115. package/dist/lib/workload.js +64 -0
  116. package/oclif.manifest.json +6830 -4502
  117. package/opencli.json +2177 -547
  118. package/package.json +27 -3
package/opencli.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "opencli": "0.1",
4
4
  "info": {
5
5
  "title": "closeyourit",
6
- "version": "0.21.0",
6
+ "version": "0.23.1",
7
7
  "description": "CLI for CloseYourIt — manage org, errors, tokens and tickets with your user token",
8
8
  "license": {
9
9
  "name": "MIT",
@@ -1007,6 +1007,142 @@
1007
1007
  }
1008
1008
  ]
1009
1009
  },
1010
+ {
1011
+ "name": "assistant",
1012
+ "description": "AI assistant that reads the data you can see and answers questions about it",
1013
+ "commands": [
1014
+ {
1015
+ "name": "ask",
1016
+ "description": "Ask the assistant a question about your own data; it reads what you are allowed to see and answers (may take a while)",
1017
+ "options": [
1018
+ {
1019
+ "name": "--conversation",
1020
+ "aliases": [
1021
+ "-c"
1022
+ ],
1023
+ "description": "Ask inside an existing conversation (keeps the context of the previous questions)",
1024
+ "arguments": [
1025
+ {
1026
+ "name": "CONVERSATION",
1027
+ "required": true
1028
+ }
1029
+ ]
1030
+ },
1031
+ {
1032
+ "name": "--timeout",
1033
+ "description": "Seconds to wait for the answer before giving up",
1034
+ "arguments": [
1035
+ {
1036
+ "name": "TIMEOUT",
1037
+ "required": true
1038
+ }
1039
+ ]
1040
+ }
1041
+ ],
1042
+ "arguments": [
1043
+ {
1044
+ "name": "QUESTION",
1045
+ "description": "The question (all positional words are joined)"
1046
+ }
1047
+ ],
1048
+ "examples": [
1049
+ "closeyourit assistant ask how many open tickets does acme-api have",
1050
+ "closeyourit assistant ask \"what changed in the last release?\" --conversation <id>",
1051
+ "closeyourit assistant ask \"who is working on CYCL-43?\" --timeout 60 --json"
1052
+ ]
1053
+ },
1054
+ {
1055
+ "name": "conversations",
1056
+ "description": "Conversations with the assistant (list, open, read, delete)",
1057
+ "commands": [
1058
+ {
1059
+ "name": "create",
1060
+ "description": "Open an empty conversation with the assistant (ask questions into it with `assistant ask --conversation`)",
1061
+ "options": [
1062
+ {
1063
+ "name": "--title",
1064
+ "description": "Conversation title (defaults to the first question asked)",
1065
+ "arguments": [
1066
+ {
1067
+ "name": "TITLE",
1068
+ "required": true
1069
+ }
1070
+ ]
1071
+ }
1072
+ ],
1073
+ "examples": [
1074
+ "closeyourit assistant conversations create",
1075
+ "closeyourit assistant conversations create --title \"Stato dei rilasci\""
1076
+ ]
1077
+ },
1078
+ {
1079
+ "name": "delete",
1080
+ "description": "Delete a conversation with the assistant, questions and answers included (irreversible)",
1081
+ "options": [
1082
+ {
1083
+ "name": "--confirm",
1084
+ "description": "Required: confirm the irreversible deletion"
1085
+ }
1086
+ ],
1087
+ "arguments": [
1088
+ {
1089
+ "name": "ID",
1090
+ "required": true,
1091
+ "description": "Conversation id"
1092
+ }
1093
+ ],
1094
+ "examples": [
1095
+ "closeyourit assistant conversations delete <conversation-id> --confirm"
1096
+ ]
1097
+ },
1098
+ {
1099
+ "name": "list",
1100
+ "description": "List your conversations with the assistant (most recently active first)",
1101
+ "options": [
1102
+ {
1103
+ "name": "--per",
1104
+ "description": "Page size",
1105
+ "arguments": [
1106
+ {
1107
+ "name": "PER",
1108
+ "required": true
1109
+ }
1110
+ ]
1111
+ },
1112
+ {
1113
+ "name": "--page",
1114
+ "description": "Page number",
1115
+ "arguments": [
1116
+ {
1117
+ "name": "PAGE",
1118
+ "required": true
1119
+ }
1120
+ ]
1121
+ }
1122
+ ],
1123
+ "examples": [
1124
+ "closeyourit assistant conversations list",
1125
+ "closeyourit assistant conversations list --per 50 --json"
1126
+ ]
1127
+ },
1128
+ {
1129
+ "name": "show",
1130
+ "description": "Read one conversation with the assistant: its questions, its answers and what they were based on",
1131
+ "arguments": [
1132
+ {
1133
+ "name": "ID",
1134
+ "required": true,
1135
+ "description": "Conversation id"
1136
+ }
1137
+ ],
1138
+ "examples": [
1139
+ "closeyourit assistant conversations show <conversation-id>"
1140
+ ]
1141
+ }
1142
+ ]
1143
+ }
1144
+ ]
1145
+ },
1010
1146
  {
1011
1147
  "name": "cron-monitors",
1012
1148
  "description": "Cron/heartbeat monitors (read-only)",
@@ -1263,11 +1399,11 @@
1263
1399
  },
1264
1400
  {
1265
1401
  "name": "errors",
1266
- "description": "Error monitoring: list, show, triage",
1402
+ "description": "Error monitoring: list, show, triage, assign, merge/split, delete",
1267
1403
  "commands": [
1268
1404
  {
1269
- "name": "list",
1270
- "description": "List error groups for a project",
1405
+ "name": "assign",
1406
+ "description": "Put an error group in someone's hands, or take it out (--unassign)",
1271
1407
  "options": [
1272
1408
  {
1273
1409
  "name": "--project",
@@ -1284,48 +1420,18 @@
1284
1420
  ]
1285
1421
  },
1286
1422
  {
1287
- "name": "--page",
1288
- "description": "Page number",
1423
+ "name": "--assignee",
1424
+ "description": "Account id (UUID) or member email",
1289
1425
  "arguments": [
1290
1426
  {
1291
- "name": "PAGE",
1427
+ "name": "ASSIGNEE",
1292
1428
  "required": true
1293
1429
  }
1294
1430
  ]
1295
1431
  },
1296
1432
  {
1297
- "name": "--status",
1298
- "description": "Filter by status (e.g. unresolved, resolved, muted)",
1299
- "arguments": [
1300
- {
1301
- "name": "STATUS",
1302
- "required": true
1303
- }
1304
- ]
1305
- }
1306
- ],
1307
- "examples": [
1308
- "closeyourit errors list --project acme-api",
1309
- "closeyourit errors list -p acme-api --status unresolved --json"
1310
- ]
1311
- },
1312
- {
1313
- "name": "mute",
1314
- "description": "Mute an error group",
1315
- "options": [
1316
- {
1317
- "name": "--project",
1318
- "aliases": [
1319
- "-p"
1320
- ],
1321
- "description": "Project id (UUID) or key",
1322
- "required": true,
1323
- "arguments": [
1324
- {
1325
- "name": "PROJECT",
1326
- "required": true
1327
- }
1328
- ]
1433
+ "name": "--unassign",
1434
+ "description": "Leave the group to nobody"
1329
1435
  }
1330
1436
  ],
1331
1437
  "arguments": [
@@ -1336,12 +1442,13 @@
1336
1442
  }
1337
1443
  ],
1338
1444
  "examples": [
1339
- "closeyourit errors mute <group-id> --project acme-api"
1445
+ "closeyourit errors assign <group-id> --project acme-api --assignee alice@acme.test",
1446
+ "closeyourit errors assign <group-id> --project acme-api --unassign"
1340
1447
  ]
1341
1448
  },
1342
1449
  {
1343
- "name": "promote",
1344
- "description": "Promote an error group to a ticket",
1450
+ "name": "bulk-triage",
1451
+ "description": "Resolve, ignore or reopen several error groups in one call",
1345
1452
  "options": [
1346
1453
  {
1347
1454
  "name": "--project",
@@ -1356,82 +1463,43 @@
1356
1463
  "required": true
1357
1464
  }
1358
1465
  ]
1359
- }
1360
- ],
1361
- "arguments": [
1362
- {
1363
- "name": "ID",
1364
- "required": true,
1365
- "description": "Error group id"
1366
- }
1367
- ],
1368
- "examples": [
1369
- "closeyourit errors promote <group-id> --project acme-api"
1370
- ]
1371
- },
1372
- {
1373
- "name": "reopen",
1374
- "description": "Reopen a resolved error group",
1375
- "options": [
1466
+ },
1376
1467
  {
1377
- "name": "--project",
1378
- "aliases": [
1379
- "-p"
1380
- ],
1381
- "description": "Project id (UUID) or key",
1468
+ "name": "--action",
1469
+ "description": "What to do with them",
1382
1470
  "required": true,
1383
1471
  "arguments": [
1384
1472
  {
1385
- "name": "PROJECT",
1386
- "required": true
1473
+ "name": "ACTION",
1474
+ "required": true,
1475
+ "acceptedValues": [
1476
+ "resolve",
1477
+ "ignore",
1478
+ "reopen"
1479
+ ]
1387
1480
  }
1388
1481
  ]
1389
- }
1390
- ],
1391
- "arguments": [
1392
- {
1393
- "name": "ID",
1394
- "required": true,
1395
- "description": "Error group id"
1396
- }
1397
- ],
1398
- "examples": [
1399
- "closeyourit errors reopen <group-id> --project acme-api"
1400
- ]
1401
- },
1402
- {
1403
- "name": "resolve",
1404
- "description": "Mark an error group as resolved",
1405
- "options": [
1482
+ },
1406
1483
  {
1407
- "name": "--project",
1408
- "aliases": [
1409
- "-p"
1410
- ],
1411
- "description": "Project id (UUID) or key",
1484
+ "name": "--group",
1485
+ "description": "Error group id (repeatable)",
1412
1486
  "required": true,
1413
1487
  "arguments": [
1414
1488
  {
1415
- "name": "PROJECT",
1489
+ "name": "GROUP",
1416
1490
  "required": true
1417
1491
  }
1418
1492
  ]
1419
1493
  }
1420
1494
  ],
1421
- "arguments": [
1422
- {
1423
- "name": "ID",
1424
- "required": true,
1425
- "description": "Error group id"
1426
- }
1427
- ],
1428
1495
  "examples": [
1429
- "closeyourit errors resolve <group-id> --project acme-api"
1496
+ "closeyourit errors bulk-triage -p acme-api --action resolve --group <id-a> --group <id-b>",
1497
+ "closeyourit errors bulk-triage -p acme-api --action ignore --group <id-a> --json"
1430
1498
  ]
1431
1499
  },
1432
1500
  {
1433
- "name": "show",
1434
- "description": "Show a single error group",
1501
+ "name": "delete",
1502
+ "description": "Delete an error group and every occurrence it holds (irreversible)",
1435
1503
  "options": [
1436
1504
  {
1437
1505
  "name": "--project",
@@ -1446,6 +1514,10 @@
1446
1514
  "required": true
1447
1515
  }
1448
1516
  ]
1517
+ },
1518
+ {
1519
+ "name": "--confirm",
1520
+ "description": "Required: confirm the irreversible deletion"
1449
1521
  }
1450
1522
  ],
1451
1523
  "arguments": [
@@ -1456,45 +1528,588 @@
1456
1528
  }
1457
1529
  ],
1458
1530
  "examples": [
1459
- "closeyourit errors show <group-id> --project acme-api"
1531
+ "closeyourit errors delete <group-id> --project acme-api --confirm"
1460
1532
  ]
1461
1533
  },
1462
1534
  {
1463
- "name": "unmute",
1464
- "description": "Unmute an error group",
1465
- "options": [
1535
+ "name": "grouping-rules",
1536
+ "description": "Custom grouping rules: how a project bends the automatic error grouping",
1537
+ "commands": [
1466
1538
  {
1467
- "name": "--project",
1468
- "aliases": [
1469
- "-p"
1470
- ],
1471
- "description": "Project id (UUID) or key",
1472
- "required": true,
1473
- "arguments": [
1539
+ "name": "create",
1540
+ "description": "Add a grouping rule: occurrences that match it are grouped under one key",
1541
+ "options": [
1474
1542
  {
1475
- "name": "PROJECT",
1476
- "required": true
1477
- }
1478
- ]
1479
- }
1480
- ],
1481
- "arguments": [
1482
- {
1483
- "name": "ID",
1484
- "required": true,
1485
- "description": "Error group id"
1486
- }
1487
- ],
1488
- "examples": [
1489
- "closeyourit errors unmute <group-id> --project acme-api"
1490
- ]
1491
- }
1492
- ]
1493
- },
1494
- {
1495
- "name": "groups",
1496
- "commands": [
1497
- {
1543
+ "name": "--project",
1544
+ "aliases": [
1545
+ "-p"
1546
+ ],
1547
+ "description": "Project id (UUID) or key",
1548
+ "required": true,
1549
+ "arguments": [
1550
+ {
1551
+ "name": "PROJECT",
1552
+ "required": true
1553
+ }
1554
+ ]
1555
+ },
1556
+ {
1557
+ "name": "--field",
1558
+ "description": "Occurrence field the rule looks at",
1559
+ "required": true,
1560
+ "arguments": [
1561
+ {
1562
+ "name": "FIELD",
1563
+ "required": true,
1564
+ "acceptedValues": [
1565
+ "exception_type",
1566
+ "message",
1567
+ "culprit",
1568
+ "transaction"
1569
+ ]
1570
+ }
1571
+ ]
1572
+ },
1573
+ {
1574
+ "name": "--operator",
1575
+ "description": "How the field is compared (always case-insensitive)",
1576
+ "required": true,
1577
+ "arguments": [
1578
+ {
1579
+ "name": "OPERATOR",
1580
+ "required": true,
1581
+ "acceptedValues": [
1582
+ "contains",
1583
+ "equals",
1584
+ "starts_with"
1585
+ ]
1586
+ }
1587
+ ]
1588
+ },
1589
+ {
1590
+ "name": "--value",
1591
+ "description": "Text to compare the field against",
1592
+ "required": true,
1593
+ "arguments": [
1594
+ {
1595
+ "name": "VALUE",
1596
+ "required": true
1597
+ }
1598
+ ]
1599
+ },
1600
+ {
1601
+ "name": "--fingerprint-key",
1602
+ "description": "Grouping key: rules sharing it send their occurrences to the same group",
1603
+ "required": true,
1604
+ "arguments": [
1605
+ {
1606
+ "name": "FINGERPRINT-KEY",
1607
+ "required": true
1608
+ }
1609
+ ]
1610
+ },
1611
+ {
1612
+ "name": "--position",
1613
+ "description": "Order of application (lower runs first)",
1614
+ "arguments": [
1615
+ {
1616
+ "name": "POSITION",
1617
+ "required": true
1618
+ }
1619
+ ]
1620
+ },
1621
+ {
1622
+ "name": "--active",
1623
+ "description": "Whether the rule applies at ingest"
1624
+ }
1625
+ ],
1626
+ "examples": [
1627
+ "closeyourit errors grouping-rules create -p acme-api --field message --operator contains --value \"timeout\" --fingerprint-key net-timeout",
1628
+ "closeyourit errors grouping-rules create -p acme-api --field culprit --operator starts_with --value \"app/jobs/\" --fingerprint-key jobs --position 2"
1629
+ ]
1630
+ },
1631
+ {
1632
+ "name": "delete",
1633
+ "description": "Delete a grouping rule (the groups it already made stay where they are)",
1634
+ "options": [
1635
+ {
1636
+ "name": "--project",
1637
+ "aliases": [
1638
+ "-p"
1639
+ ],
1640
+ "description": "Project id (UUID) or key",
1641
+ "required": true,
1642
+ "arguments": [
1643
+ {
1644
+ "name": "PROJECT",
1645
+ "required": true
1646
+ }
1647
+ ]
1648
+ },
1649
+ {
1650
+ "name": "--confirm",
1651
+ "description": "Required: confirm the deletion"
1652
+ }
1653
+ ],
1654
+ "arguments": [
1655
+ {
1656
+ "name": "ID",
1657
+ "required": true,
1658
+ "description": "Grouping rule id"
1659
+ }
1660
+ ],
1661
+ "examples": [
1662
+ "closeyourit errors grouping-rules delete <rule-id> --project acme-api --confirm"
1663
+ ]
1664
+ },
1665
+ {
1666
+ "name": "list",
1667
+ "description": "List the custom grouping rules of a project, in the order they are applied",
1668
+ "options": [
1669
+ {
1670
+ "name": "--project",
1671
+ "aliases": [
1672
+ "-p"
1673
+ ],
1674
+ "description": "Project id (UUID) or key",
1675
+ "required": true,
1676
+ "arguments": [
1677
+ {
1678
+ "name": "PROJECT",
1679
+ "required": true
1680
+ }
1681
+ ]
1682
+ },
1683
+ {
1684
+ "name": "--page",
1685
+ "description": "Page number",
1686
+ "arguments": [
1687
+ {
1688
+ "name": "PAGE",
1689
+ "required": true
1690
+ }
1691
+ ]
1692
+ }
1693
+ ],
1694
+ "examples": [
1695
+ "closeyourit errors grouping-rules list --project acme-api"
1696
+ ]
1697
+ },
1698
+ {
1699
+ "name": "update",
1700
+ "description": "Change a grouping rule: what it matches, where it sends, when it runs, or turn it off",
1701
+ "options": [
1702
+ {
1703
+ "name": "--project",
1704
+ "aliases": [
1705
+ "-p"
1706
+ ],
1707
+ "description": "Project id (UUID) or key",
1708
+ "required": true,
1709
+ "arguments": [
1710
+ {
1711
+ "name": "PROJECT",
1712
+ "required": true
1713
+ }
1714
+ ]
1715
+ },
1716
+ {
1717
+ "name": "--field",
1718
+ "description": "Occurrence field the rule looks at",
1719
+ "arguments": [
1720
+ {
1721
+ "name": "FIELD",
1722
+ "required": true,
1723
+ "acceptedValues": [
1724
+ "exception_type",
1725
+ "message",
1726
+ "culprit",
1727
+ "transaction"
1728
+ ]
1729
+ }
1730
+ ]
1731
+ },
1732
+ {
1733
+ "name": "--operator",
1734
+ "description": "How the field is compared",
1735
+ "arguments": [
1736
+ {
1737
+ "name": "OPERATOR",
1738
+ "required": true,
1739
+ "acceptedValues": [
1740
+ "contains",
1741
+ "equals",
1742
+ "starts_with"
1743
+ ]
1744
+ }
1745
+ ]
1746
+ },
1747
+ {
1748
+ "name": "--value",
1749
+ "description": "Text to compare the field against",
1750
+ "arguments": [
1751
+ {
1752
+ "name": "VALUE",
1753
+ "required": true
1754
+ }
1755
+ ]
1756
+ },
1757
+ {
1758
+ "name": "--fingerprint-key",
1759
+ "description": "Grouping key the matching occurrences land on",
1760
+ "arguments": [
1761
+ {
1762
+ "name": "FINGERPRINT-KEY",
1763
+ "required": true
1764
+ }
1765
+ ]
1766
+ },
1767
+ {
1768
+ "name": "--position",
1769
+ "description": "Order of application (lower runs first)",
1770
+ "arguments": [
1771
+ {
1772
+ "name": "POSITION",
1773
+ "required": true
1774
+ }
1775
+ ]
1776
+ },
1777
+ {
1778
+ "name": "--active",
1779
+ "description": "Whether the rule applies at ingest"
1780
+ }
1781
+ ],
1782
+ "arguments": [
1783
+ {
1784
+ "name": "ID",
1785
+ "required": true,
1786
+ "description": "Grouping rule id"
1787
+ }
1788
+ ],
1789
+ "examples": [
1790
+ "closeyourit errors grouping-rules update <rule-id> -p acme-api --value \"connection reset\"",
1791
+ "closeyourit errors grouping-rules update <rule-id> -p acme-api --position 0",
1792
+ "closeyourit errors grouping-rules update <rule-id> -p acme-api --no-active"
1793
+ ]
1794
+ }
1795
+ ]
1796
+ },
1797
+ {
1798
+ "name": "list",
1799
+ "description": "List error groups for a project",
1800
+ "options": [
1801
+ {
1802
+ "name": "--project",
1803
+ "aliases": [
1804
+ "-p"
1805
+ ],
1806
+ "description": "Project id (UUID) or key",
1807
+ "required": true,
1808
+ "arguments": [
1809
+ {
1810
+ "name": "PROJECT",
1811
+ "required": true
1812
+ }
1813
+ ]
1814
+ },
1815
+ {
1816
+ "name": "--page",
1817
+ "description": "Page number",
1818
+ "arguments": [
1819
+ {
1820
+ "name": "PAGE",
1821
+ "required": true
1822
+ }
1823
+ ]
1824
+ },
1825
+ {
1826
+ "name": "--status",
1827
+ "description": "Filter by status (e.g. unresolved, resolved, muted)",
1828
+ "arguments": [
1829
+ {
1830
+ "name": "STATUS",
1831
+ "required": true
1832
+ }
1833
+ ]
1834
+ }
1835
+ ],
1836
+ "examples": [
1837
+ "closeyourit errors list --project acme-api",
1838
+ "closeyourit errors list -p acme-api --status unresolved --json"
1839
+ ]
1840
+ },
1841
+ {
1842
+ "name": "merge",
1843
+ "description": "Merge error groups into one: the occurrences move, the absorbed groups disappear (irreversible)",
1844
+ "options": [
1845
+ {
1846
+ "name": "--project",
1847
+ "aliases": [
1848
+ "-p"
1849
+ ],
1850
+ "description": "Project id (UUID) or key",
1851
+ "required": true,
1852
+ "arguments": [
1853
+ {
1854
+ "name": "PROJECT",
1855
+ "required": true
1856
+ }
1857
+ ]
1858
+ },
1859
+ {
1860
+ "name": "--group",
1861
+ "description": "Error group to absorb (repeatable)",
1862
+ "required": true,
1863
+ "arguments": [
1864
+ {
1865
+ "name": "GROUP",
1866
+ "required": true
1867
+ }
1868
+ ]
1869
+ },
1870
+ {
1871
+ "name": "--confirm",
1872
+ "description": "Required: confirm the irreversible merge"
1873
+ }
1874
+ ],
1875
+ "arguments": [
1876
+ {
1877
+ "name": "ID",
1878
+ "required": true,
1879
+ "description": "Error group that keeps everything (the primary)"
1880
+ }
1881
+ ],
1882
+ "examples": [
1883
+ "closeyourit errors merge <primary-id> --project acme-api --group <duplicate-a> --group <duplicate-b> --confirm"
1884
+ ]
1885
+ },
1886
+ {
1887
+ "name": "mute",
1888
+ "description": "Mute an error group",
1889
+ "options": [
1890
+ {
1891
+ "name": "--project",
1892
+ "aliases": [
1893
+ "-p"
1894
+ ],
1895
+ "description": "Project id (UUID) or key",
1896
+ "required": true,
1897
+ "arguments": [
1898
+ {
1899
+ "name": "PROJECT",
1900
+ "required": true
1901
+ }
1902
+ ]
1903
+ }
1904
+ ],
1905
+ "arguments": [
1906
+ {
1907
+ "name": "ID",
1908
+ "required": true,
1909
+ "description": "Error group id"
1910
+ }
1911
+ ],
1912
+ "examples": [
1913
+ "closeyourit errors mute <group-id> --project acme-api"
1914
+ ]
1915
+ },
1916
+ {
1917
+ "name": "promote",
1918
+ "description": "Promote an error group to a ticket",
1919
+ "options": [
1920
+ {
1921
+ "name": "--project",
1922
+ "aliases": [
1923
+ "-p"
1924
+ ],
1925
+ "description": "Project id (UUID) or key",
1926
+ "required": true,
1927
+ "arguments": [
1928
+ {
1929
+ "name": "PROJECT",
1930
+ "required": true
1931
+ }
1932
+ ]
1933
+ }
1934
+ ],
1935
+ "arguments": [
1936
+ {
1937
+ "name": "ID",
1938
+ "required": true,
1939
+ "description": "Error group id"
1940
+ }
1941
+ ],
1942
+ "examples": [
1943
+ "closeyourit errors promote <group-id> --project acme-api"
1944
+ ]
1945
+ },
1946
+ {
1947
+ "name": "reopen",
1948
+ "description": "Reopen a resolved error group",
1949
+ "options": [
1950
+ {
1951
+ "name": "--project",
1952
+ "aliases": [
1953
+ "-p"
1954
+ ],
1955
+ "description": "Project id (UUID) or key",
1956
+ "required": true,
1957
+ "arguments": [
1958
+ {
1959
+ "name": "PROJECT",
1960
+ "required": true
1961
+ }
1962
+ ]
1963
+ }
1964
+ ],
1965
+ "arguments": [
1966
+ {
1967
+ "name": "ID",
1968
+ "required": true,
1969
+ "description": "Error group id"
1970
+ }
1971
+ ],
1972
+ "examples": [
1973
+ "closeyourit errors reopen <group-id> --project acme-api"
1974
+ ]
1975
+ },
1976
+ {
1977
+ "name": "resolve",
1978
+ "description": "Mark an error group as resolved",
1979
+ "options": [
1980
+ {
1981
+ "name": "--project",
1982
+ "aliases": [
1983
+ "-p"
1984
+ ],
1985
+ "description": "Project id (UUID) or key",
1986
+ "required": true,
1987
+ "arguments": [
1988
+ {
1989
+ "name": "PROJECT",
1990
+ "required": true
1991
+ }
1992
+ ]
1993
+ }
1994
+ ],
1995
+ "arguments": [
1996
+ {
1997
+ "name": "ID",
1998
+ "required": true,
1999
+ "description": "Error group id"
2000
+ }
2001
+ ],
2002
+ "examples": [
2003
+ "closeyourit errors resolve <group-id> --project acme-api"
2004
+ ]
2005
+ },
2006
+ {
2007
+ "name": "show",
2008
+ "description": "Show a single error group",
2009
+ "options": [
2010
+ {
2011
+ "name": "--project",
2012
+ "aliases": [
2013
+ "-p"
2014
+ ],
2015
+ "description": "Project id (UUID) or key",
2016
+ "required": true,
2017
+ "arguments": [
2018
+ {
2019
+ "name": "PROJECT",
2020
+ "required": true
2021
+ }
2022
+ ]
2023
+ }
2024
+ ],
2025
+ "arguments": [
2026
+ {
2027
+ "name": "ID",
2028
+ "required": true,
2029
+ "description": "Error group id"
2030
+ }
2031
+ ],
2032
+ "examples": [
2033
+ "closeyourit errors show <group-id> --project acme-api"
2034
+ ]
2035
+ },
2036
+ {
2037
+ "name": "split",
2038
+ "description": "Split an error group: pull some occurrences out into a new one",
2039
+ "options": [
2040
+ {
2041
+ "name": "--project",
2042
+ "aliases": [
2043
+ "-p"
2044
+ ],
2045
+ "description": "Project id (UUID) or key",
2046
+ "required": true,
2047
+ "arguments": [
2048
+ {
2049
+ "name": "PROJECT",
2050
+ "required": true
2051
+ }
2052
+ ]
2053
+ },
2054
+ {
2055
+ "name": "--event",
2056
+ "description": "Occurrence id to pull out (repeatable)",
2057
+ "required": true,
2058
+ "arguments": [
2059
+ {
2060
+ "name": "EVENT",
2061
+ "required": true
2062
+ }
2063
+ ]
2064
+ }
2065
+ ],
2066
+ "arguments": [
2067
+ {
2068
+ "name": "ID",
2069
+ "required": true,
2070
+ "description": "Error group to split"
2071
+ }
2072
+ ],
2073
+ "examples": [
2074
+ "closeyourit errors split <group-id> --project acme-api --event <event-a> --event <event-b>"
2075
+ ]
2076
+ },
2077
+ {
2078
+ "name": "unmute",
2079
+ "description": "Unmute an error group",
2080
+ "options": [
2081
+ {
2082
+ "name": "--project",
2083
+ "aliases": [
2084
+ "-p"
2085
+ ],
2086
+ "description": "Project id (UUID) or key",
2087
+ "required": true,
2088
+ "arguments": [
2089
+ {
2090
+ "name": "PROJECT",
2091
+ "required": true
2092
+ }
2093
+ ]
2094
+ }
2095
+ ],
2096
+ "arguments": [
2097
+ {
2098
+ "name": "ID",
2099
+ "required": true,
2100
+ "description": "Error group id"
2101
+ }
2102
+ ],
2103
+ "examples": [
2104
+ "closeyourit errors unmute <group-id> --project acme-api"
2105
+ ]
2106
+ }
2107
+ ]
2108
+ },
2109
+ {
2110
+ "name": "groups",
2111
+ "commands": [
2112
+ {
1498
2113
  "name": "create",
1499
2114
  "description": "Create a group (a container of related projects, e.g. \"DriverOne\")",
1500
2115
  "options": [
@@ -2365,7 +2980,7 @@
2365
2980
  "commands": [
2366
2981
  {
2367
2982
  "name": "create",
2368
- "description": "Invite a person to the organization. Prints the acceptance link (shown only once).",
2983
+ "description": "Invite a person to the organization. Prints the acceptance link.",
2369
2984
  "options": [
2370
2985
  {
2371
2986
  "name": "--role",
@@ -2417,7 +3032,7 @@
2417
3032
  },
2418
3033
  {
2419
3034
  "name": "resend",
2420
- "description": "Resend a pending invitation. Prints the acceptance link (shown only once).",
3035
+ "description": "Resend a pending invitation. Prints the acceptance link.",
2421
3036
  "arguments": [
2422
3037
  {
2423
3038
  "name": "ID",
@@ -2463,6 +3078,91 @@
2463
3078
  "closeyourit kb ask \"what is our retry/backoff policy?\" --json"
2464
3079
  ]
2465
3080
  },
3081
+ {
3082
+ "name": "attach",
3083
+ "description": "Attach one or more local files to a knowledge page",
3084
+ "options": [
3085
+ {
3086
+ "name": "--file",
3087
+ "description": "Path to a local file to upload (repeatable)",
3088
+ "required": true,
3089
+ "arguments": [
3090
+ {
3091
+ "name": "FILE",
3092
+ "required": true
3093
+ }
3094
+ ]
3095
+ }
3096
+ ],
3097
+ "arguments": [
3098
+ {
3099
+ "name": "ID",
3100
+ "required": true,
3101
+ "description": "Knowledge page id"
3102
+ }
3103
+ ],
3104
+ "examples": [
3105
+ "closeyourit kb attach <page-id> --file ./rollback.sh",
3106
+ "closeyourit kb attach <page-id> --file ./diagram.png --file ./checklist.pdf"
3107
+ ]
3108
+ },
3109
+ {
3110
+ "name": "attachment-download",
3111
+ "description": "Download a knowledge page's attachment to disk",
3112
+ "options": [
3113
+ {
3114
+ "name": "--out",
3115
+ "description": "Output directory",
3116
+ "arguments": [
3117
+ {
3118
+ "name": "OUT",
3119
+ "required": true
3120
+ }
3121
+ ]
3122
+ },
3123
+ {
3124
+ "name": "--filename",
3125
+ "description": "Override the output filename",
3126
+ "arguments": [
3127
+ {
3128
+ "name": "FILENAME",
3129
+ "required": true
3130
+ }
3131
+ ]
3132
+ }
3133
+ ],
3134
+ "arguments": [
3135
+ {
3136
+ "name": "ID",
3137
+ "required": true,
3138
+ "description": "Knowledge page id"
3139
+ },
3140
+ {
3141
+ "name": "ATTACHMENT",
3142
+ "required": true,
3143
+ "description": "Attachment id"
3144
+ }
3145
+ ],
3146
+ "examples": [
3147
+ "closeyourit kb attachment-download <page-id> <attachment-id>",
3148
+ "closeyourit kb attachment-download <page-id> <attachment-id> --out ./downloads"
3149
+ ]
3150
+ },
3151
+ {
3152
+ "name": "attachments",
3153
+ "description": "List a knowledge page's attachments",
3154
+ "arguments": [
3155
+ {
3156
+ "name": "ID",
3157
+ "required": true,
3158
+ "description": "Knowledge page id"
3159
+ }
3160
+ ],
3161
+ "examples": [
3162
+ "closeyourit kb attachments <page-id>",
3163
+ "closeyourit kb attachments <page-id> --json"
3164
+ ]
3165
+ },
2466
3166
  {
2467
3167
  "name": "book",
2468
3168
  "description": "Knowledge books: ordered collections of pages (summary, add a page)",
@@ -2608,15 +3308,14 @@
2608
3308
  },
2609
3309
  {
2610
3310
  "name": "create",
2611
- "description": "Create a knowledge page in a project",
3311
+ "description": "Create a knowledge page in one or more projects (and groups)",
2612
3312
  "options": [
2613
3313
  {
2614
3314
  "name": "--project",
2615
3315
  "aliases": [
2616
3316
  "-p"
2617
3317
  ],
2618
- "description": "Project id (UUID) or key",
2619
- "required": true,
3318
+ "description": "Project id (UUID) or key the page belongs to (repeatable)",
2620
3319
  "arguments": [
2621
3320
  {
2622
3321
  "name": "PROJECT",
@@ -2624,6 +3323,26 @@
2624
3323
  }
2625
3324
  ]
2626
3325
  },
3326
+ {
3327
+ "name": "--group",
3328
+ "description": "Group id (UUID) or name the page belongs to (repeatable)",
3329
+ "arguments": [
3330
+ {
3331
+ "name": "GROUP",
3332
+ "required": true
3333
+ }
3334
+ ]
3335
+ },
3336
+ {
3337
+ "name": "--tag",
3338
+ "description": "Tag for the page (repeatable; the server lowercases and dedupes them)",
3339
+ "arguments": [
3340
+ {
3341
+ "name": "TAG",
3342
+ "required": true
3343
+ }
3344
+ ]
3345
+ },
2627
3346
  {
2628
3347
  "name": "--title",
2629
3348
  "description": "Page title (max 255 characters)",
@@ -2690,11 +3409,21 @@
2690
3409
  "description": "Create the page in review instead of publishing it"
2691
3410
  },
2692
3411
  {
2693
- "name": "--review-note",
2694
- "description": "One line explaining why the page is worth keeping (review queue, max 240 characters)",
3412
+ "name": "--review-note",
3413
+ "description": "One line explaining why the page is worth keeping (review queue, max 240 characters)",
3414
+ "arguments": [
3415
+ {
3416
+ "name": "REVIEW-NOTE",
3417
+ "required": true
3418
+ }
3419
+ ]
3420
+ },
3421
+ {
3422
+ "name": "--author-origin",
3423
+ "description": "Name of the assistant or skill that wrote the text (declares an automatic author)",
2695
3424
  "arguments": [
2696
3425
  {
2697
- "name": "REVIEW-NOTE",
3426
+ "name": "AUTHOR-ORIGIN",
2698
3427
  "required": true
2699
3428
  }
2700
3429
  ]
@@ -2704,7 +3433,8 @@
2704
3433
  "closeyourit kb create --project acme-api --title \"Kamal rollback\" --body \"Steps…\"",
2705
3434
  "closeyourit kb create -p acme-api --title \"ADR: queue backend\" --kind decision --body-file ./adr.md",
2706
3435
  "closeyourit kb create -p acme-api --title \"Deploy\" --body-file ./body.md --tech-spec-file ./tech.md",
2707
- "closeyourit kb create -p acme-api --title \"Worktree trap\" --body-file ./note.md --in-review --review-note \"Hit it today, not obvious from the code\""
3436
+ "closeyourit kb create -p acme-api --title \"Worktree trap\" --body-file ./note.md --in-review --review-note \"Hit it today, not obvious from the code\"",
3437
+ "closeyourit kb create -p acme-api -p billing --group Piattaforma --tag deploy --tag kamal --title \"Rollback\" --body-file ./note.md"
2708
3438
  ]
2709
3439
  },
2710
3440
  {
@@ -2727,6 +3457,37 @@
2727
3457
  "closeyourit kb delete <page-id> --confirm"
2728
3458
  ]
2729
3459
  },
3460
+ {
3461
+ "name": "detach",
3462
+ "description": "Remove an attachment from a knowledge page (irreversible)",
3463
+ "options": [
3464
+ {
3465
+ "name": "--attachment",
3466
+ "description": "Attachment id to remove",
3467
+ "required": true,
3468
+ "arguments": [
3469
+ {
3470
+ "name": "ATTACHMENT",
3471
+ "required": true
3472
+ }
3473
+ ]
3474
+ },
3475
+ {
3476
+ "name": "--confirm",
3477
+ "description": "Required: confirm the irreversible deletion"
3478
+ }
3479
+ ],
3480
+ "arguments": [
3481
+ {
3482
+ "name": "ID",
3483
+ "required": true,
3484
+ "description": "Knowledge page id"
3485
+ }
3486
+ ],
3487
+ "examples": [
3488
+ "closeyourit kb detach <page-id> --attachment <attachment-id> --confirm"
3489
+ ]
3490
+ },
2730
3491
  {
2731
3492
  "name": "list",
2732
3493
  "description": "List knowledge pages across the projects you can see",
@@ -3022,6 +3783,49 @@
3022
3783
  }
3023
3784
  ]
3024
3785
  },
3786
+ {
3787
+ "name": "--project",
3788
+ "aliases": [
3789
+ "-p"
3790
+ ],
3791
+ "description": "Replace the projects the page belongs to: id (UUID) or key (repeatable)",
3792
+ "arguments": [
3793
+ {
3794
+ "name": "PROJECT",
3795
+ "required": true
3796
+ }
3797
+ ]
3798
+ },
3799
+ {
3800
+ "name": "--group",
3801
+ "description": "Replace the groups the page belongs to: id (UUID) or name (repeatable)",
3802
+ "arguments": [
3803
+ {
3804
+ "name": "GROUP",
3805
+ "required": true
3806
+ }
3807
+ ]
3808
+ },
3809
+ {
3810
+ "name": "--tag",
3811
+ "description": "Replace the page tags (repeatable; `--tag \"\"` clears them)",
3812
+ "arguments": [
3813
+ {
3814
+ "name": "TAG",
3815
+ "required": true
3816
+ }
3817
+ ]
3818
+ },
3819
+ {
3820
+ "name": "--author-origin",
3821
+ "description": "Name of the assistant or skill that rewrote the text (only applies with a text change)",
3822
+ "arguments": [
3823
+ {
3824
+ "name": "AUTHOR-ORIGIN",
3825
+ "required": true
3826
+ }
3827
+ ]
3828
+ },
3025
3829
  {
3026
3830
  "name": "--kind",
3027
3831
  "description": "New kind: note|decision|guide",
@@ -3083,7 +3887,9 @@
3083
3887
  "examples": [
3084
3888
  "closeyourit kb update <page-id> --title \"New title\"",
3085
3889
  "closeyourit kb update <page-id> --kind decision --body-file ./adr.md",
3086
- "closeyourit kb update <page-id> --tech-spec-file ./tech.md"
3890
+ "closeyourit kb update <page-id> --tech-spec-file ./tech.md",
3891
+ "closeyourit kb update <page-id> --project acme-api --project billing --group Piattaforma",
3892
+ "closeyourit kb update <page-id> --tag deploy --tag kamal"
3087
3893
  ]
3088
3894
  }
3089
3895
  ]
@@ -3936,6 +4742,57 @@
3936
4742
  "name": "metrics",
3937
4743
  "description": "Performance metrics (slow queries/methods)",
3938
4744
  "commands": [
4745
+ {
4746
+ "name": "bulk-triage",
4747
+ "description": "Resolve, ignore or reopen several metric groups in one call",
4748
+ "options": [
4749
+ {
4750
+ "name": "--project",
4751
+ "aliases": [
4752
+ "-p"
4753
+ ],
4754
+ "description": "Project id (UUID) or key",
4755
+ "required": true,
4756
+ "arguments": [
4757
+ {
4758
+ "name": "PROJECT",
4759
+ "required": true
4760
+ }
4761
+ ]
4762
+ },
4763
+ {
4764
+ "name": "--action",
4765
+ "description": "What to do with them",
4766
+ "required": true,
4767
+ "arguments": [
4768
+ {
4769
+ "name": "ACTION",
4770
+ "required": true,
4771
+ "acceptedValues": [
4772
+ "resolve",
4773
+ "ignore",
4774
+ "reopen"
4775
+ ]
4776
+ }
4777
+ ]
4778
+ },
4779
+ {
4780
+ "name": "--group",
4781
+ "description": "Metric group id (repeatable)",
4782
+ "required": true,
4783
+ "arguments": [
4784
+ {
4785
+ "name": "GROUP",
4786
+ "required": true
4787
+ }
4788
+ ]
4789
+ }
4790
+ ],
4791
+ "examples": [
4792
+ "closeyourit metrics bulk-triage -p acme-api --action resolve --group <id-a> --group <id-b>",
4793
+ "closeyourit metrics bulk-triage -p acme-api --action ignore --group <id-a> --json"
4794
+ ]
4795
+ },
3939
4796
  {
3940
4797
  "name": "list",
3941
4798
  "description": "List performance metric groups (slow queries/methods) for a project",
@@ -7534,6 +8391,21 @@
7534
8391
  "closeyourit seo-sites list --project acme-site --json"
7535
8392
  ]
7536
8393
  },
8394
+ {
8395
+ "name": "show",
8396
+ "description": "Show one site under SEO check: how it is set up, what is open, how the last run went and how fast it is",
8397
+ "arguments": [
8398
+ {
8399
+ "name": "ID",
8400
+ "required": true,
8401
+ "description": "Site id"
8402
+ }
8403
+ ],
8404
+ "examples": [
8405
+ "closeyourit seo-sites show <site-id>",
8406
+ "closeyourit seo-sites show <site-id> --json"
8407
+ ]
8408
+ },
7537
8409
  {
7538
8410
  "name": "update",
7539
8411
  "description": "Change how a site is checked (project and environment are its identity: they never change)",
@@ -7911,113 +8783,271 @@
7911
8783
  "required": true
7912
8784
  }
7913
8785
  ]
7914
- },
7915
- {
7916
- "name": "--grant-secrets",
7917
- "description": "Grant read+write secrets on the visible projects"
7918
- },
8786
+ },
8787
+ {
8788
+ "name": "--grant-secrets",
8789
+ "description": "Grant read+write secrets on the visible projects"
8790
+ },
8791
+ {
8792
+ "name": "--secret-environment",
8793
+ "description": "Restrict secret access to these environment codes (repeatable; empty = all environments)",
8794
+ "arguments": [
8795
+ {
8796
+ "name": "SECRET-ENVIRONMENT",
8797
+ "required": true
8798
+ }
8799
+ ]
8800
+ }
8801
+ ],
8802
+ "examples": [
8803
+ "closeyourit service-accounts create --name \"Deploy bot\" --project CYI --grant-secrets --secret-environment staging"
8804
+ ]
8805
+ },
8806
+ {
8807
+ "name": "delete",
8808
+ "description": "Delete a service account (revokes its tokens + removes org access; the secrets audit trail is kept)",
8809
+ "options": [
8810
+ {
8811
+ "name": "--confirm",
8812
+ "description": "Required: confirm the deletion"
8813
+ }
8814
+ ],
8815
+ "arguments": [
8816
+ {
8817
+ "name": "ID",
8818
+ "required": true,
8819
+ "description": "Service account id"
8820
+ }
8821
+ ],
8822
+ "examples": [
8823
+ "closeyourit service-accounts delete <id> --confirm"
8824
+ ]
8825
+ },
8826
+ {
8827
+ "name": "list",
8828
+ "description": "List the service accounts (AI members, CLI-only) in your organization",
8829
+ "options": [
8830
+ {
8831
+ "name": "--page",
8832
+ "description": "Page number",
8833
+ "arguments": [
8834
+ {
8835
+ "name": "PAGE",
8836
+ "required": true
8837
+ }
8838
+ ]
8839
+ }
8840
+ ],
8841
+ "examples": [
8842
+ "closeyourit service-accounts list",
8843
+ "closeyourit service-accounts list --json"
8844
+ ]
8845
+ },
8846
+ {
8847
+ "name": "show",
8848
+ "description": "Show a service account: identity, how many tokens are active, and the environments it can read secrets in",
8849
+ "arguments": [
8850
+ {
8851
+ "name": "ID",
8852
+ "required": true,
8853
+ "description": "Service account id"
8854
+ }
8855
+ ],
8856
+ "examples": [
8857
+ "closeyourit service-accounts show <id>",
8858
+ "closeyourit service-accounts show <id> --json"
8859
+ ]
8860
+ },
8861
+ {
8862
+ "name": "tokens",
8863
+ "commands": [
8864
+ {
8865
+ "name": "create",
8866
+ "description": "Create a CLI token (cyi_u_) for a service account (the secret is shown only once)",
8867
+ "arguments": [
8868
+ {
8869
+ "name": "ACCOUNT",
8870
+ "required": true,
8871
+ "description": "Service account id"
8872
+ },
8873
+ {
8874
+ "name": "NAME",
8875
+ "required": true,
8876
+ "description": "Token name (e.g. ci-deploy)"
8877
+ }
8878
+ ],
8879
+ "examples": [
8880
+ "closeyourit service-accounts tokens create <account-id> ci-deploy"
8881
+ ]
8882
+ },
8883
+ {
8884
+ "name": "list",
8885
+ "description": "List the CLI tokens of a service account — which ones still work and which are revoked. Never the secret.",
8886
+ "options": [
8887
+ {
8888
+ "name": "--page",
8889
+ "description": "Page number",
8890
+ "arguments": [
8891
+ {
8892
+ "name": "PAGE",
8893
+ "required": true
8894
+ }
8895
+ ]
8896
+ }
8897
+ ],
8898
+ "arguments": [
8899
+ {
8900
+ "name": "ACCOUNT",
8901
+ "required": true,
8902
+ "description": "Service account id"
8903
+ }
8904
+ ],
8905
+ "examples": [
8906
+ "closeyourit service-accounts tokens list <account-id>",
8907
+ "closeyourit service-accounts tokens list <account-id> --json"
8908
+ ]
8909
+ },
8910
+ {
8911
+ "name": "revoke",
8912
+ "description": "Revoke a service account CLI token (the agent using it loses access)",
8913
+ "options": [
8914
+ {
8915
+ "name": "--confirm",
8916
+ "description": "Required: confirm the revocation"
8917
+ }
8918
+ ],
8919
+ "arguments": [
8920
+ {
8921
+ "name": "ACCOUNT",
8922
+ "required": true,
8923
+ "description": "Service account id"
8924
+ },
8925
+ {
8926
+ "name": "ID",
8927
+ "required": true,
8928
+ "description": "Token id"
8929
+ }
8930
+ ],
8931
+ "examples": [
8932
+ "closeyourit service-accounts tokens revoke <account-id> <token-id> --confirm"
8933
+ ]
8934
+ }
8935
+ ]
8936
+ },
8937
+ {
8938
+ "name": "update",
8939
+ "description": "Update a service account's secret access: the environments it may read secrets in (full replace)",
8940
+ "options": [
7919
8941
  {
7920
8942
  "name": "--secret-environment",
7921
- "description": "Restrict secret access to these environment codes (repeatable; empty = all environments)",
8943
+ "description": "Environment code the account may read secrets in (repeatable; replaces the whole list)",
7922
8944
  "arguments": [
7923
8945
  {
7924
8946
  "name": "SECRET-ENVIRONMENT",
7925
8947
  "required": true
7926
8948
  }
7927
8949
  ]
8950
+ },
8951
+ {
8952
+ "name": "--all-environments",
8953
+ "description": "Remove the restriction entirely: secrets readable in every environment"
8954
+ }
8955
+ ],
8956
+ "arguments": [
8957
+ {
8958
+ "name": "ID",
8959
+ "required": true,
8960
+ "description": "Service account id"
7928
8961
  }
7929
8962
  ],
7930
8963
  "examples": [
7931
- "closeyourit service-accounts create --name \"Deploy bot\" --project CYI --grant-secrets --secret-environment staging"
8964
+ "closeyourit service-accounts update <id> --secret-environment staging --secret-environment production",
8965
+ "closeyourit service-accounts update <id> --all-environments"
7932
8966
  ]
7933
- },
8967
+ }
8968
+ ]
8969
+ },
8970
+ {
8971
+ "name": "shared",
8972
+ "description": "Organization-level shared secret variables, delegated to projects",
8973
+ "commands": [
7934
8974
  {
7935
8975
  "name": "delete",
7936
- "description": "Delete a service account (revokes its tokens + removes org access; the secrets audit trail is kept)",
8976
+ "description": "Delete an organization shared secret from EVERY environment at once (irreversible). There is no per-environment deletion.",
7937
8977
  "options": [
7938
8978
  {
7939
8979
  "name": "--confirm",
7940
- "description": "Required: confirm the deletion"
8980
+ "description": "Required: confirm the deletion across every environment"
7941
8981
  }
7942
8982
  ],
7943
8983
  "arguments": [
7944
8984
  {
7945
- "name": "ID",
8985
+ "name": "NAME",
7946
8986
  "required": true,
7947
- "description": "Service account id"
8987
+ "description": "Shared secret name, or its id"
7948
8988
  }
7949
8989
  ],
7950
8990
  "examples": [
7951
- "closeyourit service-accounts delete <id> --confirm"
8991
+ "closeyourit shared delete API_KEY --confirm"
7952
8992
  ]
7953
8993
  },
7954
8994
  {
7955
8995
  "name": "list",
7956
- "description": "List the service accounts (AI members, CLI-only) in your organization",
8996
+ "description": "List the organization shared secret names (one row per variable, every page). Never prints values.",
8997
+ "examples": [
8998
+ "closeyourit shared list",
8999
+ "closeyourit shared list --json"
9000
+ ]
9001
+ },
9002
+ {
9003
+ "name": "set",
9004
+ "description": "Set (create or update) an organization shared secret for one environment. Projects delegated on that environment read the new value.",
7957
9005
  "options": [
7958
9006
  {
7959
- "name": "--page",
7960
- "description": "Page number",
9007
+ "name": "--environment",
9008
+ "aliases": [
9009
+ "-e"
9010
+ ],
9011
+ "description": "Environment code (e.g. production) or id",
9012
+ "required": true,
7961
9013
  "arguments": [
7962
9014
  {
7963
- "name": "PAGE",
9015
+ "name": "ENVIRONMENT",
7964
9016
  "required": true
7965
9017
  }
7966
9018
  ]
7967
- }
7968
- ],
7969
- "examples": [
7970
- "closeyourit service-accounts list",
7971
- "closeyourit service-accounts list --json"
7972
- ]
7973
- },
7974
- {
7975
- "name": "tokens",
7976
- "commands": [
9019
+ },
7977
9020
  {
7978
- "name": "create",
7979
- "description": "Create a CLI token (cyi_u_) for a service account (the secret is shown only once)",
9021
+ "name": "--value",
9022
+ "description": "Secret value (use when the arg is just NAME)",
7980
9023
  "arguments": [
7981
9024
  {
7982
- "name": "ACCOUNT",
7983
- "required": true,
7984
- "description": "Service account id"
7985
- },
7986
- {
7987
- "name": "NAME",
7988
- "required": true,
7989
- "description": "Token name (e.g. ci-deploy)"
9025
+ "name": "VALUE",
9026
+ "required": true
7990
9027
  }
7991
- ],
7992
- "examples": [
7993
- "closeyourit service-accounts tokens create <account-id> ci-deploy"
7994
9028
  ]
7995
9029
  },
7996
9030
  {
7997
- "name": "revoke",
7998
- "description": "Revoke a service account CLI token (the agent using it loses access)",
7999
- "options": [
8000
- {
8001
- "name": "--confirm",
8002
- "description": "Required: confirm the revocation"
8003
- }
8004
- ],
9031
+ "name": "--description",
9032
+ "description": "Optional description",
8005
9033
  "arguments": [
8006
9034
  {
8007
- "name": "ACCOUNT",
8008
- "required": true,
8009
- "description": "Service account id"
8010
- },
8011
- {
8012
- "name": "ID",
8013
- "required": true,
8014
- "description": "Token id"
9035
+ "name": "DESCRIPTION",
9036
+ "required": true
8015
9037
  }
8016
- ],
8017
- "examples": [
8018
- "closeyourit service-accounts tokens revoke <account-id> <token-id> --confirm"
8019
9038
  ]
8020
9039
  }
9040
+ ],
9041
+ "arguments": [
9042
+ {
9043
+ "name": "ASSIGNMENT",
9044
+ "required": true,
9045
+ "description": "NAME=VALUE, or just NAME with --value"
9046
+ }
9047
+ ],
9048
+ "examples": [
9049
+ "closeyourit shared set -e production SENTRY_DSN=https://key@sentry.io/42",
9050
+ "closeyourit shared set -e staging API_KEY --value s3cr3t --description \"Stripe key\""
8021
9051
  ]
8022
9052
  }
8023
9053
  ]
@@ -8259,7 +9289,7 @@
8259
9289
  },
8260
9290
  {
8261
9291
  "name": "tickets",
8262
- "description": "Tickets: list, show, create",
9292
+ "description": "Tickets: list, show, create, ask",
8263
9293
  "commands": [
8264
9294
  {
8265
9295
  "name": "approve",
@@ -8291,6 +9321,32 @@
8291
9321
  "closeyourit tickets approve <ticket-id> --project acme-api"
8292
9322
  ]
8293
9323
  },
9324
+ {
9325
+ "name": "ask",
9326
+ "description": "Ask a natural-language question about the tickets you can see; the AI answers and cites the tickets it used (may take a few seconds)",
9327
+ "options": [
9328
+ {
9329
+ "name": "--timeout",
9330
+ "description": "Seconds to wait for the answer before giving up",
9331
+ "arguments": [
9332
+ {
9333
+ "name": "TIMEOUT",
9334
+ "required": true
9335
+ }
9336
+ ]
9337
+ }
9338
+ ],
9339
+ "arguments": [
9340
+ {
9341
+ "name": "QUESTION",
9342
+ "description": "The question (all positional words are joined)"
9343
+ }
9344
+ ],
9345
+ "examples": [
9346
+ "closeyourit tickets ask what is left before the next release",
9347
+ "closeyourit tickets ask \"has anyone reported this crash before?\" --json"
9348
+ ]
9349
+ },
8294
9350
  {
8295
9351
  "name": "assign",
8296
9352
  "description": "Assign a ticket to an account, or unassign it (--unassign)",
@@ -8860,6 +9916,113 @@
8860
9916
  "closeyourit tickets delete <ticket-id> --project acme-api --confirm"
8861
9917
  ]
8862
9918
  },
9919
+ {
9920
+ "name": "dependencies",
9921
+ "commands": [
9922
+ {
9923
+ "name": "add",
9924
+ "description": "Add a prerequisite to a ticket: the blocker has to be finished before this ticket can start",
9925
+ "options": [
9926
+ {
9927
+ "name": "--project",
9928
+ "aliases": [
9929
+ "-p"
9930
+ ],
9931
+ "description": "Project id (UUID) or key",
9932
+ "required": true,
9933
+ "arguments": [
9934
+ {
9935
+ "name": "PROJECT",
9936
+ "required": true
9937
+ }
9938
+ ]
9939
+ }
9940
+ ],
9941
+ "arguments": [
9942
+ {
9943
+ "name": "ID",
9944
+ "required": true,
9945
+ "description": "Ticket id or code (e.g. CYRA-132)"
9946
+ },
9947
+ {
9948
+ "name": "BLOCKER",
9949
+ "required": true,
9950
+ "description": "Prerequisite ticket id or code — may live in another project"
9951
+ }
9952
+ ],
9953
+ "examples": [
9954
+ "closeyourit tickets dependencies add CYRA-132 CYAU-83 --project closeyourit-rails",
9955
+ "while read -r a b; do closeyourit tickets dependencies add \"$a\" \"$b\" -p closeyourit-rails; done < ordine.txt"
9956
+ ]
9957
+ },
9958
+ {
9959
+ "name": "list",
9960
+ "description": "List the prerequisites of a ticket: what has to be finished before this one can start",
9961
+ "options": [
9962
+ {
9963
+ "name": "--project",
9964
+ "aliases": [
9965
+ "-p"
9966
+ ],
9967
+ "description": "Project id (UUID) or key",
9968
+ "required": true,
9969
+ "arguments": [
9970
+ {
9971
+ "name": "PROJECT",
9972
+ "required": true
9973
+ }
9974
+ ]
9975
+ }
9976
+ ],
9977
+ "arguments": [
9978
+ {
9979
+ "name": "ID",
9980
+ "required": true,
9981
+ "description": "Ticket id or code (e.g. CYRA-132)"
9982
+ }
9983
+ ],
9984
+ "examples": [
9985
+ "closeyourit tickets dependencies list CYRA-132 --project closeyourit-rails",
9986
+ "closeyourit tickets dependencies list CYRA-132 -p closeyourit-rails --json"
9987
+ ]
9988
+ },
9989
+ {
9990
+ "name": "remove",
9991
+ "description": "Remove a prerequisite from a ticket",
9992
+ "options": [
9993
+ {
9994
+ "name": "--project",
9995
+ "aliases": [
9996
+ "-p"
9997
+ ],
9998
+ "description": "Project id (UUID) or key",
9999
+ "required": true,
10000
+ "arguments": [
10001
+ {
10002
+ "name": "PROJECT",
10003
+ "required": true
10004
+ }
10005
+ ]
10006
+ }
10007
+ ],
10008
+ "arguments": [
10009
+ {
10010
+ "name": "ID",
10011
+ "required": true,
10012
+ "description": "Ticket id or code (e.g. CYRA-132)"
10013
+ },
10014
+ {
10015
+ "name": "BLOCKER",
10016
+ "required": true,
10017
+ "description": "Prerequisite to remove: its ticket code (e.g. CYAU-83) or the dependency id"
10018
+ }
10019
+ ],
10020
+ "examples": [
10021
+ "closeyourit tickets dependencies remove CYRA-132 CYAU-83 --project closeyourit-rails"
10022
+ ]
10023
+ }
10024
+ ]
10025
+ },
8863
10026
  {
8864
10027
  "name": "detach",
8865
10028
  "description": "Remove an attachment from a ticket (irreversible)",
@@ -9943,8 +11106,38 @@
9943
11106
  ]
9944
11107
  },
9945
11108
  {
9946
- "name": "vote",
9947
- "description": "Upvote a ticket (idempotent)",
11109
+ "name": "vote",
11110
+ "description": "Upvote a ticket (idempotent)",
11111
+ "options": [
11112
+ {
11113
+ "name": "--project",
11114
+ "aliases": [
11115
+ "-p"
11116
+ ],
11117
+ "description": "Project id (UUID) or key",
11118
+ "required": true,
11119
+ "arguments": [
11120
+ {
11121
+ "name": "PROJECT",
11122
+ "required": true
11123
+ }
11124
+ ]
11125
+ }
11126
+ ],
11127
+ "arguments": [
11128
+ {
11129
+ "name": "ID",
11130
+ "required": true,
11131
+ "description": "Ticket id"
11132
+ }
11133
+ ],
11134
+ "examples": [
11135
+ "closeyourit tickets vote <ticket-id> --project acme-api"
11136
+ ]
11137
+ },
11138
+ {
11139
+ "name": "watch",
11140
+ "description": "Watch a ticket to receive its notifications (idempotent)",
9948
11141
  "options": [
9949
11142
  {
9950
11143
  "name": "--project",
@@ -9965,16 +11158,16 @@
9965
11158
  {
9966
11159
  "name": "ID",
9967
11160
  "required": true,
9968
- "description": "Ticket id"
11161
+ "description": "Ticket id or code (e.g. DRFL-3)"
9969
11162
  }
9970
11163
  ],
9971
11164
  "examples": [
9972
- "closeyourit tickets vote <ticket-id> --project acme-api"
11165
+ "closeyourit tickets watch <ticket-id> --project acme-api"
9973
11166
  ]
9974
11167
  },
9975
11168
  {
9976
- "name": "watch",
9977
- "description": "Watch a ticket to receive its notifications (idempotent)",
11169
+ "name": "work-context",
11170
+ "description": "Show the work context frozen when an automation host claimed the ticket: the references and procedures actually delivered back then, never the project's current guidance",
9978
11171
  "options": [
9979
11172
  {
9980
11173
  "name": "--project",
@@ -9989,6 +11182,10 @@
9989
11182
  "required": true
9990
11183
  }
9991
11184
  ]
11185
+ },
11186
+ {
11187
+ "name": "--full",
11188
+ "description": "Also print the frozen text of every reference and procedure, not just the table"
9992
11189
  }
9993
11190
  ],
9994
11191
  "arguments": [
@@ -9999,7 +11196,10 @@
9999
11196
  }
10000
11197
  ],
10001
11198
  "examples": [
10002
- "closeyourit tickets watch <ticket-id> --project acme-api"
11199
+ "closeyourit tickets work-context <ticket-id> --project acme-api",
11200
+ "closeyourit tickets work-context DRFL-3 -p driverone-flutter",
11201
+ "closeyourit tickets work-context DRFL-3 -p driverone-flutter --full",
11202
+ "closeyourit tickets work-context DRFL-3 -p driverone-flutter --json"
10003
11203
  ]
10004
11204
  }
10005
11205
  ]
@@ -10418,16 +11618,254 @@
10418
11618
  "closeyourit todos update <list-id> --name \"Sprint prep\"",
10419
11619
  "closeyourit todos update <list-id> --color rose"
10420
11620
  ]
10421
- }
10422
- ]
10423
- },
10424
- {
10425
- "name": "tokens",
10426
- "description": "Project ingest tokens (CI/SDK credentials)",
10427
- "commands": [
11621
+ }
11622
+ ]
11623
+ },
11624
+ {
11625
+ "name": "tokens",
11626
+ "description": "Project ingest tokens (CI/SDK credentials)",
11627
+ "commands": [
11628
+ {
11629
+ "name": "create",
11630
+ "description": "Create an ingest token (the secret is shown only once)",
11631
+ "options": [
11632
+ {
11633
+ "name": "--project",
11634
+ "aliases": [
11635
+ "-p"
11636
+ ],
11637
+ "description": "Project id (UUID) or key",
11638
+ "required": true,
11639
+ "arguments": [
11640
+ {
11641
+ "name": "PROJECT",
11642
+ "required": true
11643
+ }
11644
+ ]
11645
+ },
11646
+ {
11647
+ "name": "--name",
11648
+ "description": "Human-readable token name",
11649
+ "required": true,
11650
+ "arguments": [
11651
+ {
11652
+ "name": "NAME",
11653
+ "required": true
11654
+ }
11655
+ ]
11656
+ },
11657
+ {
11658
+ "name": "--environment-id",
11659
+ "description": "Environment id the token is scoped to",
11660
+ "required": true,
11661
+ "arguments": [
11662
+ {
11663
+ "name": "ENVIRONMENT-ID",
11664
+ "required": true
11665
+ }
11666
+ ]
11667
+ }
11668
+ ],
11669
+ "examples": [
11670
+ "closeyourit tokens create --project acme-api --name \"CI prod\" --environment-id <env-id>"
11671
+ ]
11672
+ },
11673
+ {
11674
+ "name": "list",
11675
+ "description": "List ingest tokens for a project",
11676
+ "options": [
11677
+ {
11678
+ "name": "--project",
11679
+ "aliases": [
11680
+ "-p"
11681
+ ],
11682
+ "description": "Project id (UUID) or key",
11683
+ "required": true,
11684
+ "arguments": [
11685
+ {
11686
+ "name": "PROJECT",
11687
+ "required": true
11688
+ }
11689
+ ]
11690
+ }
11691
+ ],
11692
+ "examples": [
11693
+ "closeyourit tokens list --project acme-api",
11694
+ "closeyourit tokens list -p acme-api --json"
11695
+ ]
11696
+ },
11697
+ {
11698
+ "name": "provision",
11699
+ "description": "Generate an ingest token and deliver it without revealing the secret",
11700
+ "options": [
11701
+ {
11702
+ "name": "--project",
11703
+ "aliases": [
11704
+ "-p"
11705
+ ],
11706
+ "description": "Project id (UUID) or key",
11707
+ "required": true,
11708
+ "arguments": [
11709
+ {
11710
+ "name": "PROJECT",
11711
+ "required": true
11712
+ }
11713
+ ]
11714
+ },
11715
+ {
11716
+ "name": "--name",
11717
+ "description": "Human-readable token name",
11718
+ "required": true,
11719
+ "arguments": [
11720
+ {
11721
+ "name": "NAME",
11722
+ "required": true
11723
+ }
11724
+ ]
11725
+ },
11726
+ {
11727
+ "name": "--environment-id",
11728
+ "description": "Source environment code or id",
11729
+ "required": true,
11730
+ "arguments": [
11731
+ {
11732
+ "name": "ENVIRONMENT-ID",
11733
+ "required": true
11734
+ }
11735
+ ]
11736
+ },
11737
+ {
11738
+ "name": "--scope",
11739
+ "description": "Token scope (repeatable)",
11740
+ "arguments": [
11741
+ {
11742
+ "name": "SCOPE",
11743
+ "required": true,
11744
+ "acceptedValues": [
11745
+ "ingest",
11746
+ "read"
11747
+ ]
11748
+ }
11749
+ ]
11750
+ },
11751
+ {
11752
+ "name": "--to-project",
11753
+ "description": "Destination project id or key",
11754
+ "required": true,
11755
+ "arguments": [
11756
+ {
11757
+ "name": "TO-PROJECT",
11758
+ "required": true
11759
+ }
11760
+ ]
11761
+ },
11762
+ {
11763
+ "name": "--to-environment-id",
11764
+ "description": "Destination environment code or id",
11765
+ "required": true,
11766
+ "arguments": [
11767
+ {
11768
+ "name": "TO-ENVIRONMENT-ID",
11769
+ "required": true
11770
+ }
11771
+ ]
11772
+ },
11773
+ {
11774
+ "name": "--secret-name",
11775
+ "description": "Destination vault variable name",
11776
+ "required": true,
11777
+ "arguments": [
11778
+ {
11779
+ "name": "SECRET-NAME",
11780
+ "required": true
11781
+ }
11782
+ ]
11783
+ },
11784
+ {
11785
+ "name": "--idempotency-key",
11786
+ "description": "Stable key for safe request retries",
11787
+ "arguments": [
11788
+ {
11789
+ "name": "IDEMPOTENCY-KEY",
11790
+ "required": true
11791
+ }
11792
+ ]
11793
+ },
11794
+ {
11795
+ "name": "--sync-github",
11796
+ "description": "Synchronize the destination vault to GitHub"
11797
+ },
11798
+ {
11799
+ "name": "--confirm-production",
11800
+ "description": "Required when source or destination is production"
11801
+ }
11802
+ ],
11803
+ "examples": [
11804
+ "closeyourit tokens provision -p CYRA --name \"Self monitoring\" --environment-id staging --to-project CYRA --to-environment-id staging --secret-name CLOSEYOURIT_TOKEN"
11805
+ ]
11806
+ },
11807
+ {
11808
+ "name": "provisions",
11809
+ "commands": [
11810
+ {
11811
+ "name": "retry",
11812
+ "description": "Retry GitHub synchronization without regenerating or revealing the token",
11813
+ "options": [
11814
+ {
11815
+ "name": "--project",
11816
+ "aliases": [
11817
+ "-p"
11818
+ ],
11819
+ "description": "Project id (UUID) or key",
11820
+ "required": true,
11821
+ "arguments": [
11822
+ {
11823
+ "name": "PROJECT",
11824
+ "required": true
11825
+ }
11826
+ ]
11827
+ }
11828
+ ],
11829
+ "arguments": [
11830
+ {
11831
+ "name": "ID",
11832
+ "required": true,
11833
+ "description": "Provision id"
11834
+ }
11835
+ ]
11836
+ },
11837
+ {
11838
+ "name": "show",
11839
+ "description": "Show secret-free token provision status",
11840
+ "options": [
11841
+ {
11842
+ "name": "--project",
11843
+ "aliases": [
11844
+ "-p"
11845
+ ],
11846
+ "description": "Project id (UUID) or key",
11847
+ "required": true,
11848
+ "arguments": [
11849
+ {
11850
+ "name": "PROJECT",
11851
+ "required": true
11852
+ }
11853
+ ]
11854
+ }
11855
+ ],
11856
+ "arguments": [
11857
+ {
11858
+ "name": "ID",
11859
+ "required": true,
11860
+ "description": "Provision id"
11861
+ }
11862
+ ]
11863
+ }
11864
+ ]
11865
+ },
10428
11866
  {
10429
- "name": "create",
10430
- "description": "Create an ingest token (the secret is shown only once)",
11867
+ "name": "revoke",
11868
+ "description": "Revoke an ingest token",
10431
11869
  "options": [
10432
11870
  {
10433
11871
  "name": "--project",
@@ -10442,37 +11880,22 @@
10442
11880
  "required": true
10443
11881
  }
10444
11882
  ]
10445
- },
10446
- {
10447
- "name": "--name",
10448
- "description": "Human-readable token name",
10449
- "required": true,
10450
- "arguments": [
10451
- {
10452
- "name": "NAME",
10453
- "required": true
10454
- }
10455
- ]
10456
- },
11883
+ }
11884
+ ],
11885
+ "arguments": [
10457
11886
  {
10458
- "name": "--environment-id",
10459
- "description": "Environment id the token is scoped to",
11887
+ "name": "ID",
10460
11888
  "required": true,
10461
- "arguments": [
10462
- {
10463
- "name": "ENVIRONMENT-ID",
10464
- "required": true
10465
- }
10466
- ]
11889
+ "description": "Token id"
10467
11890
  }
10468
11891
  ],
10469
11892
  "examples": [
10470
- "closeyourit tokens create --project acme-api --name \"CI prod\" --environment-id <env-id>"
11893
+ "closeyourit tokens revoke <token-id> --project acme-api"
10471
11894
  ]
10472
11895
  },
10473
11896
  {
10474
- "name": "list",
10475
- "description": "List ingest tokens for a project",
11897
+ "name": "rotate",
11898
+ "description": "Rotate an ingest token (the new secret is shown only once)",
10476
11899
  "options": [
10477
11900
  {
10478
11901
  "name": "--project",
@@ -10489,165 +11912,259 @@
10489
11912
  ]
10490
11913
  }
10491
11914
  ],
11915
+ "arguments": [
11916
+ {
11917
+ "name": "ID",
11918
+ "required": true,
11919
+ "description": "Token id"
11920
+ }
11921
+ ],
10492
11922
  "examples": [
10493
- "closeyourit tokens list --project acme-api",
10494
- "closeyourit tokens list -p acme-api --json"
11923
+ "closeyourit tokens rotate <token-id> --project acme-api"
10495
11924
  ]
10496
- },
11925
+ }
11926
+ ]
11927
+ },
11928
+ {
11929
+ "name": "uptime-groups",
11930
+ "description": "Uptime monitor groups (org-level) + public status page",
11931
+ "commands": [
10497
11932
  {
10498
- "name": "provision",
10499
- "description": "Generate an ingest token and deliver it without revealing the secret",
11933
+ "name": "create",
11934
+ "description": "Create an uptime monitor group (org-level container)",
10500
11935
  "options": [
10501
11936
  {
10502
- "name": "--project",
10503
- "aliases": [
10504
- "-p"
10505
- ],
10506
- "description": "Project id (UUID) or key",
11937
+ "name": "--name",
11938
+ "description": "Group name",
10507
11939
  "required": true,
10508
11940
  "arguments": [
10509
11941
  {
10510
- "name": "PROJECT",
11942
+ "name": "NAME",
10511
11943
  "required": true
10512
11944
  }
10513
11945
  ]
10514
11946
  },
10515
11947
  {
10516
- "name": "--name",
10517
- "description": "Human-readable token name",
10518
- "required": true,
11948
+ "name": "--color",
11949
+ "description": "Accent color (Tailwind palette name)",
10519
11950
  "arguments": [
10520
11951
  {
10521
- "name": "NAME",
11952
+ "name": "COLOR",
10522
11953
  "required": true
10523
11954
  }
10524
11955
  ]
10525
11956
  },
10526
11957
  {
10527
- "name": "--environment-id",
10528
- "description": "Source environment code or id",
10529
- "required": true,
11958
+ "name": "--icon",
11959
+ "description": "Icon name",
10530
11960
  "arguments": [
10531
11961
  {
10532
- "name": "ENVIRONMENT-ID",
11962
+ "name": "ICON",
10533
11963
  "required": true
10534
11964
  }
10535
11965
  ]
10536
11966
  },
10537
11967
  {
10538
- "name": "--scope",
10539
- "description": "Token scope (repeatable)",
11968
+ "name": "--description",
11969
+ "description": "Group description",
10540
11970
  "arguments": [
10541
11971
  {
10542
- "name": "SCOPE",
10543
- "required": true,
10544
- "acceptedValues": [
10545
- "ingest",
10546
- "read"
10547
- ]
11972
+ "name": "DESCRIPTION",
11973
+ "required": true
10548
11974
  }
10549
11975
  ]
10550
- },
11976
+ }
11977
+ ],
11978
+ "examples": [
11979
+ "closeyourit uptime-groups create --name \"Core services\"",
11980
+ "closeyourit uptime-groups create --name API --color sky --icon server --description \"Public API\""
11981
+ ]
11982
+ },
11983
+ {
11984
+ "name": "delete",
11985
+ "description": "Delete an uptime monitor group (irreversible)",
11986
+ "options": [
10551
11987
  {
10552
- "name": "--to-project",
10553
- "description": "Destination project id or key",
11988
+ "name": "--confirm",
11989
+ "description": "Required: confirm the irreversible deletion"
11990
+ }
11991
+ ],
11992
+ "arguments": [
11993
+ {
11994
+ "name": "ID",
10554
11995
  "required": true,
11996
+ "description": "Uptime group id"
11997
+ }
11998
+ ],
11999
+ "examples": [
12000
+ "closeyourit uptime-groups delete <group-id> --confirm"
12001
+ ]
12002
+ },
12003
+ {
12004
+ "name": "list",
12005
+ "description": "List the uptime monitor groups in your organization",
12006
+ "options": [
12007
+ {
12008
+ "name": "--page",
12009
+ "description": "Page number",
10555
12010
  "arguments": [
10556
12011
  {
10557
- "name": "TO-PROJECT",
12012
+ "name": "PAGE",
10558
12013
  "required": true
10559
12014
  }
10560
12015
  ]
10561
- },
12016
+ }
12017
+ ],
12018
+ "examples": [
12019
+ "closeyourit uptime-groups list",
12020
+ "closeyourit uptime-groups list --page 2 --json"
12021
+ ]
12022
+ },
12023
+ {
12024
+ "name": "publish",
12025
+ "description": "Publish the public status page for an uptime group",
12026
+ "arguments": [
10562
12027
  {
10563
- "name": "--to-environment-id",
10564
- "description": "Destination environment code or id",
12028
+ "name": "ID",
12029
+ "required": true,
12030
+ "description": "Uptime group id"
12031
+ }
12032
+ ],
12033
+ "examples": [
12034
+ "closeyourit uptime-groups publish <group-id>"
12035
+ ]
12036
+ },
12037
+ {
12038
+ "name": "show",
12039
+ "description": "Show an uptime monitor group",
12040
+ "arguments": [
12041
+ {
12042
+ "name": "ID",
12043
+ "required": true,
12044
+ "description": "Uptime group id"
12045
+ }
12046
+ ],
12047
+ "examples": [
12048
+ "closeyourit uptime-groups show <group-id>"
12049
+ ]
12050
+ },
12051
+ {
12052
+ "name": "unpublish",
12053
+ "description": "Unpublish (retract) the public status page for an uptime group",
12054
+ "arguments": [
12055
+ {
12056
+ "name": "ID",
10565
12057
  "required": true,
12058
+ "description": "Uptime group id"
12059
+ }
12060
+ ],
12061
+ "examples": [
12062
+ "closeyourit uptime-groups unpublish <group-id>"
12063
+ ]
12064
+ },
12065
+ {
12066
+ "name": "update",
12067
+ "description": "Update an uptime monitor group (only the provided fields)",
12068
+ "options": [
12069
+ {
12070
+ "name": "--name",
12071
+ "description": "Group name",
10566
12072
  "arguments": [
10567
12073
  {
10568
- "name": "TO-ENVIRONMENT-ID",
12074
+ "name": "NAME",
10569
12075
  "required": true
10570
12076
  }
10571
12077
  ]
10572
12078
  },
10573
12079
  {
10574
- "name": "--secret-name",
10575
- "description": "Destination vault variable name",
10576
- "required": true,
12080
+ "name": "--color",
12081
+ "description": "Accent color (Tailwind palette name)",
10577
12082
  "arguments": [
10578
12083
  {
10579
- "name": "SECRET-NAME",
12084
+ "name": "COLOR",
10580
12085
  "required": true
10581
12086
  }
10582
12087
  ]
10583
12088
  },
10584
12089
  {
10585
- "name": "--idempotency-key",
10586
- "description": "Stable key for safe request retries",
12090
+ "name": "--icon",
12091
+ "description": "Icon name",
10587
12092
  "arguments": [
10588
12093
  {
10589
- "name": "IDEMPOTENCY-KEY",
12094
+ "name": "ICON",
10590
12095
  "required": true
10591
12096
  }
10592
12097
  ]
10593
12098
  },
10594
12099
  {
10595
- "name": "--sync-github",
10596
- "description": "Synchronize the destination vault to GitHub"
10597
- },
12100
+ "name": "--description",
12101
+ "description": "Group description",
12102
+ "arguments": [
12103
+ {
12104
+ "name": "DESCRIPTION",
12105
+ "required": true
12106
+ }
12107
+ ]
12108
+ }
12109
+ ],
12110
+ "arguments": [
10598
12111
  {
10599
- "name": "--confirm-production",
10600
- "description": "Required when source or destination is production"
12112
+ "name": "ID",
12113
+ "required": true,
12114
+ "description": "Uptime group id"
10601
12115
  }
10602
12116
  ],
10603
12117
  "examples": [
10604
- "closeyourit tokens provision -p CYRA --name \"Self monitoring\" --environment-id staging --to-project CYRA --to-environment-id staging --secret-name CLOSEYOURIT_TOKEN"
12118
+ "closeyourit uptime-groups update <group-id> --name \"New name\" --color emerald"
10605
12119
  ]
10606
- },
10607
- {
10608
- "name": "provisions",
10609
- "commands": [
10610
- {
10611
- "name": "retry",
10612
- "description": "Retry GitHub synchronization without regenerating or revealing the token",
10613
- "options": [
10614
- {
10615
- "name": "--project",
10616
- "aliases": [
10617
- "-p"
10618
- ],
10619
- "description": "Project id (UUID) or key",
10620
- "required": true,
10621
- "arguments": [
10622
- {
10623
- "name": "PROJECT",
10624
- "required": true
10625
- }
10626
- ]
10627
- }
10628
- ],
12120
+ }
12121
+ ]
12122
+ },
12123
+ {
12124
+ "name": "vault",
12125
+ "description": "Vault review: the secret changes waiting for a second approval",
12126
+ "commands": [
12127
+ {
12128
+ "name": "requests",
12129
+ "description": "Secret change requests: list, approve, reject (four-eyes, decided by a person)",
12130
+ "commands": [
12131
+ {
12132
+ "name": "approve",
12133
+ "description": "Approve a pending secret change request: the change it carries is applied to the vault. Whoever asked for it cannot approve it (four-eyes), and a service account never can.",
10629
12134
  "arguments": [
10630
12135
  {
10631
12136
  "name": "ID",
10632
12137
  "required": true,
10633
- "description": "Provision id"
12138
+ "description": "Change request id (from \"vault requests list\")"
10634
12139
  }
12140
+ ],
12141
+ "examples": [
12142
+ "closeyourit vault requests approve <id>",
12143
+ "closeyourit vault requests approve <id> --json"
10635
12144
  ]
10636
12145
  },
10637
12146
  {
10638
- "name": "show",
10639
- "description": "Show secret-free token provision status",
12147
+ "name": "list",
12148
+ "description": "List the secret changes waiting for a second approval, across every visible project. Shows the name and the intent, never the proposed value.",
12149
+ "examples": [
12150
+ "closeyourit vault requests list",
12151
+ "closeyourit vault requests list --json"
12152
+ ]
12153
+ },
12154
+ {
12155
+ "name": "reject",
12156
+ "description": "Reject a pending secret change request with a reason. Nothing changes in the vault: the request freezes as rejected and the reason reaches whoever asked.",
10640
12157
  "options": [
10641
12158
  {
10642
- "name": "--project",
12159
+ "name": "--reason",
10643
12160
  "aliases": [
10644
- "-p"
12161
+ "-r"
10645
12162
  ],
10646
- "description": "Project id (UUID) or key",
12163
+ "description": "Why the change is refused — recorded for the audit and sent to whoever asked",
10647
12164
  "required": true,
10648
12165
  "arguments": [
10649
12166
  {
10650
- "name": "PROJECT",
12167
+ "name": "REASON",
10651
12168
  "required": true
10652
12169
  }
10653
12170
  ]
@@ -10657,26 +12174,34 @@
10657
12174
  {
10658
12175
  "name": "ID",
10659
12176
  "required": true,
10660
- "description": "Provision id"
12177
+ "description": "Change request id (from \"vault requests list\")"
10661
12178
  }
12179
+ ],
12180
+ "examples": [
12181
+ "closeyourit vault requests reject <id> --reason \"rotate it on staging first\"",
12182
+ "closeyourit vault requests reject <id> -r \"wrong key\" --json"
10662
12183
  ]
10663
12184
  }
10664
12185
  ]
10665
- },
12186
+ }
12187
+ ]
12188
+ },
12189
+ {
12190
+ "name": "vulnerabilities",
12191
+ "commands": [
10666
12192
  {
10667
- "name": "revoke",
10668
- "description": "Revoke an ingest token",
12193
+ "name": "ignore",
12194
+ "description": "Ignore a vulnerability: you accept living with the risk",
12195
+ "aliases": [
12196
+ "vulns:ignore"
12197
+ ],
10669
12198
  "options": [
10670
12199
  {
10671
- "name": "--project",
10672
- "aliases": [
10673
- "-p"
10674
- ],
10675
- "description": "Project id (UUID) or key",
10676
- "required": true,
12200
+ "name": "--note",
12201
+ "description": "Why you are keeping it (shown alongside the ignored row)",
10677
12202
  "arguments": [
10678
12203
  {
10679
- "name": "PROJECT",
12204
+ "name": "NOTE",
10680
12205
  "required": true
10681
12206
  }
10682
12207
  ]
@@ -10686,286 +12211,393 @@
10686
12211
  {
10687
12212
  "name": "ID",
10688
12213
  "required": true,
10689
- "description": "Token id"
12214
+ "description": "Vulnerability finding id"
10690
12215
  }
10691
12216
  ],
10692
12217
  "examples": [
10693
- "closeyourit tokens revoke <token-id> --project acme-api"
12218
+ "closeyourit vulnerabilities ignore <finding-id>",
12219
+ "closeyourit vulnerabilities ignore <finding-id> --note \"Not reachable from our code.\""
10694
12220
  ]
10695
12221
  },
10696
12222
  {
10697
- "name": "rotate",
10698
- "description": "Rotate an ingest token (the new secret is shown only once)",
12223
+ "name": "list",
12224
+ "description": "List known vulnerabilities of the project dependencies (cross-project)",
12225
+ "aliases": [
12226
+ "vulns:list"
12227
+ ],
10699
12228
  "options": [
10700
12229
  {
10701
12230
  "name": "--project",
10702
12231
  "aliases": [
10703
12232
  "-p"
10704
12233
  ],
10705
- "description": "Project id (UUID) or key",
10706
- "required": true,
12234
+ "description": "Filter by project id (UUID) or key",
10707
12235
  "arguments": [
10708
12236
  {
10709
12237
  "name": "PROJECT",
10710
12238
  "required": true
10711
12239
  }
10712
12240
  ]
10713
- }
10714
- ],
10715
- "arguments": [
10716
- {
10717
- "name": "ID",
10718
- "required": true,
10719
- "description": "Token id"
10720
- }
10721
- ],
10722
- "examples": [
10723
- "closeyourit tokens rotate <token-id> --project acme-api"
10724
- ]
10725
- }
10726
- ]
10727
- },
10728
- {
10729
- "name": "uptime-groups",
10730
- "description": "Uptime monitor groups (org-level) + public status page",
10731
- "commands": [
10732
- {
10733
- "name": "create",
10734
- "description": "Create an uptime monitor group (org-level container)",
10735
- "options": [
12241
+ },
10736
12242
  {
10737
- "name": "--name",
10738
- "description": "Group name",
10739
- "required": true,
12243
+ "name": "--severity",
12244
+ "description": "Filter by severity (critical, high, moderate, low, unknown)",
10740
12245
  "arguments": [
10741
12246
  {
10742
- "name": "NAME",
12247
+ "name": "SEVERITY",
10743
12248
  "required": true
10744
12249
  }
10745
12250
  ]
10746
12251
  },
10747
12252
  {
10748
- "name": "--color",
10749
- "description": "Accent color (Tailwind palette name)",
12253
+ "name": "--status",
12254
+ "description": "Filter by status (open, resolved, ignored)",
10750
12255
  "arguments": [
10751
12256
  {
10752
- "name": "COLOR",
12257
+ "name": "STATUS",
10753
12258
  "required": true
10754
12259
  }
10755
12260
  ]
10756
12261
  },
10757
12262
  {
10758
- "name": "--icon",
10759
- "description": "Icon name",
12263
+ "name": "--package",
12264
+ "description": "Filter by package name (partial match)",
10760
12265
  "arguments": [
10761
12266
  {
10762
- "name": "ICON",
12267
+ "name": "PACKAGE",
10763
12268
  "required": true
10764
12269
  }
10765
12270
  ]
10766
12271
  },
10767
12272
  {
10768
- "name": "--description",
10769
- "description": "Group description",
12273
+ "name": "--page",
12274
+ "description": "Page number",
10770
12275
  "arguments": [
10771
12276
  {
10772
- "name": "DESCRIPTION",
12277
+ "name": "PAGE",
10773
12278
  "required": true
10774
12279
  }
10775
12280
  ]
10776
12281
  }
10777
12282
  ],
10778
12283
  "examples": [
10779
- "closeyourit uptime-groups create --name \"Core services\"",
10780
- "closeyourit uptime-groups create --name API --color sky --icon server --description \"Public API\""
12284
+ "closeyourit vulnerabilities list",
12285
+ "closeyourit vulnerabilities list --severity critical",
12286
+ "closeyourit vulnerabilities list --project acme-api --status open",
12287
+ "closeyourit vulnerabilities list --package nokogiri --json"
10781
12288
  ]
10782
12289
  },
10783
12290
  {
10784
- "name": "delete",
10785
- "description": "Delete an uptime monitor group (irreversible)",
10786
- "options": [
12291
+ "name": "promote",
12292
+ "description": "Open a ticket from a vulnerability (automatic promotion only fires on high/critical)",
12293
+ "aliases": [
12294
+ "vulns:promote"
12295
+ ],
12296
+ "arguments": [
10787
12297
  {
10788
- "name": "--confirm",
10789
- "description": "Required: confirm the irreversible deletion"
12298
+ "name": "ID",
12299
+ "required": true,
12300
+ "description": "Vulnerability finding id"
10790
12301
  }
10791
12302
  ],
12303
+ "examples": [
12304
+ "closeyourit vulnerabilities promote <finding-id>"
12305
+ ]
12306
+ },
12307
+ {
12308
+ "name": "reopen",
12309
+ "description": "Reopen an ignored vulnerability: you changed your mind",
12310
+ "aliases": [
12311
+ "vulns:reopen"
12312
+ ],
10792
12313
  "arguments": [
10793
12314
  {
10794
12315
  "name": "ID",
10795
12316
  "required": true,
10796
- "description": "Uptime group id"
12317
+ "description": "Vulnerability finding id"
10797
12318
  }
10798
12319
  ],
10799
12320
  "examples": [
10800
- "closeyourit uptime-groups delete <group-id> --confirm"
12321
+ "closeyourit vulnerabilities reopen <finding-id>"
10801
12322
  ]
10802
12323
  },
10803
12324
  {
10804
- "name": "list",
10805
- "description": "List the uptime monitor groups in your organization",
12325
+ "name": "rescan",
12326
+ "description": "Rescan a project now, without waiting for the nightly run",
12327
+ "aliases": [
12328
+ "vulns:rescan"
12329
+ ],
10806
12330
  "options": [
10807
12331
  {
10808
- "name": "--page",
10809
- "description": "Page number",
12332
+ "name": "--project",
12333
+ "aliases": [
12334
+ "-p"
12335
+ ],
12336
+ "description": "Project id (UUID) or key",
12337
+ "required": true,
10810
12338
  "arguments": [
10811
12339
  {
10812
- "name": "PAGE",
12340
+ "name": "PROJECT",
10813
12341
  "required": true
10814
12342
  }
10815
12343
  ]
10816
12344
  }
10817
12345
  ],
10818
12346
  "examples": [
10819
- "closeyourit uptime-groups list",
10820
- "closeyourit uptime-groups list --page 2 --json"
12347
+ "closeyourit vulnerabilities rescan --project acme-api"
10821
12348
  ]
10822
12349
  },
10823
12350
  {
10824
- "name": "publish",
10825
- "description": "Publish the public status page for an uptime group",
10826
- "arguments": [
12351
+ "name": "runtimes",
12352
+ "description": "List the support state of the declared runtimes (Ruby, Node, Flutter…)",
12353
+ "aliases": [
12354
+ "vulns:runtimes"
12355
+ ],
12356
+ "options": [
10827
12357
  {
10828
- "name": "ID",
10829
- "required": true,
10830
- "description": "Uptime group id"
12358
+ "name": "--project",
12359
+ "aliases": [
12360
+ "-p"
12361
+ ],
12362
+ "description": "Filter by project id (UUID) or key",
12363
+ "arguments": [
12364
+ {
12365
+ "name": "PROJECT",
12366
+ "required": true
12367
+ }
12368
+ ]
12369
+ },
12370
+ {
12371
+ "name": "--page",
12372
+ "description": "Page number",
12373
+ "arguments": [
12374
+ {
12375
+ "name": "PAGE",
12376
+ "required": true
12377
+ }
12378
+ ]
10831
12379
  }
10832
12380
  ],
10833
12381
  "examples": [
10834
- "closeyourit uptime-groups publish <group-id>"
12382
+ "closeyourit vulnerabilities runtimes",
12383
+ "closeyourit vulnerabilities runtimes --project acme-api --json"
10835
12384
  ]
10836
12385
  },
10837
12386
  {
10838
12387
  "name": "show",
10839
- "description": "Show an uptime monitor group",
10840
- "arguments": [
10841
- {
10842
- "name": "ID",
10843
- "required": true,
10844
- "description": "Uptime group id"
10845
- }
12388
+ "description": "Show a single vulnerability: advisory, package, manifest and the fixing version",
12389
+ "aliases": [
12390
+ "vulns:show"
10846
12391
  ],
10847
- "examples": [
10848
- "closeyourit uptime-groups show <group-id>"
10849
- ]
10850
- },
10851
- {
10852
- "name": "unpublish",
10853
- "description": "Unpublish (retract) the public status page for an uptime group",
10854
12392
  "arguments": [
10855
12393
  {
10856
12394
  "name": "ID",
10857
12395
  "required": true,
10858
- "description": "Uptime group id"
12396
+ "description": "Vulnerability finding id"
10859
12397
  }
10860
12398
  ],
10861
12399
  "examples": [
10862
- "closeyourit uptime-groups unpublish <group-id>"
12400
+ "closeyourit vulnerabilities show <finding-id>"
10863
12401
  ]
10864
- },
12402
+ }
12403
+ ]
12404
+ },
12405
+ {
12406
+ "name": "whoami",
12407
+ "description": "Show the authenticated account, organization, token prefix and permissions",
12408
+ "examples": [
12409
+ "closeyourit whoami",
12410
+ "closeyourit whoami --json"
12411
+ ]
12412
+ },
12413
+ {
12414
+ "name": "workload",
12415
+ "description": "Team workload actions (non-dev activities): participants, link or generate a ticket",
12416
+ "commands": [
10865
12417
  {
10866
- "name": "update",
10867
- "description": "Update an uptime monitor group (only the provided fields)",
12418
+ "name": "create",
12419
+ "description": "Create a workload action (non-dev activity: fair, meeting, call…) on one of your teams. Add the people with `workload participant add`.",
10868
12420
  "options": [
10869
12421
  {
10870
- "name": "--name",
10871
- "description": "Group name",
12422
+ "name": "--team",
12423
+ "description": "Team id (UUID) or name — the action belongs to it and cannot be moved later",
12424
+ "required": true,
12425
+ "arguments": [
12426
+ {
12427
+ "name": "TEAM",
12428
+ "required": true
12429
+ }
12430
+ ]
12431
+ },
12432
+ {
12433
+ "name": "--title",
12434
+ "description": "What the activity is",
12435
+ "required": true,
12436
+ "arguments": [
12437
+ {
12438
+ "name": "TITLE",
12439
+ "required": true
12440
+ }
12441
+ ]
12442
+ },
12443
+ {
12444
+ "name": "--description",
12445
+ "description": "What the activity is about (free text)",
10872
12446
  "arguments": [
10873
12447
  {
10874
- "name": "NAME",
12448
+ "name": "DESCRIPTION",
10875
12449
  "required": true
10876
12450
  }
10877
12451
  ]
10878
12452
  },
10879
12453
  {
10880
- "name": "--color",
10881
- "description": "Accent color (Tailwind palette name)",
12454
+ "name": "--status",
12455
+ "description": "Status (planned, in_progress, done, cancelled)",
10882
12456
  "arguments": [
10883
12457
  {
10884
- "name": "COLOR",
12458
+ "name": "STATUS",
12459
+ "required": true,
12460
+ "acceptedValues": [
12461
+ "planned",
12462
+ "in_progress",
12463
+ "done",
12464
+ "cancelled"
12465
+ ]
12466
+ }
12467
+ ]
12468
+ },
12469
+ {
12470
+ "name": "--scheduled-at",
12471
+ "description": "When it takes place (ISO 8601)",
12472
+ "arguments": [
12473
+ {
12474
+ "name": "SCHEDULED-AT",
10885
12475
  "required": true
10886
12476
  }
10887
12477
  ]
10888
12478
  },
10889
12479
  {
10890
- "name": "--icon",
10891
- "description": "Icon name",
12480
+ "name": "--due-at",
12481
+ "description": "Deadline (ISO 8601)",
10892
12482
  "arguments": [
10893
12483
  {
10894
- "name": "ICON",
12484
+ "name": "DUE-AT",
10895
12485
  "required": true
10896
12486
  }
10897
12487
  ]
10898
12488
  },
10899
12489
  {
10900
- "name": "--description",
10901
- "description": "Group description",
12490
+ "name": "--ticket",
12491
+ "description": "Link an existing ticket by code (e.g. DRFL-3) or id — pass an empty string to unlink",
10902
12492
  "arguments": [
10903
12493
  {
10904
- "name": "DESCRIPTION",
12494
+ "name": "TICKET",
10905
12495
  "required": true
10906
12496
  }
10907
12497
  ]
10908
12498
  }
10909
12499
  ],
12500
+ "examples": [
12501
+ "closeyourit workload create --team Marketing --title \"Fiera di Rimini\"",
12502
+ "closeyourit workload create --team Marketing --title \"Riunione firma accordo\" --scheduled-at 2026-09-01T09:00:00Z --due-at 2026-09-10T18:00:00Z",
12503
+ "closeyourit workload create --team Marketing --title \"Materiale stand\" --status in_progress --ticket DRFL-3"
12504
+ ]
12505
+ },
12506
+ {
12507
+ "name": "delete",
12508
+ "description": "Delete a workload action (irreversible; a linked ticket survives and only loses the link)",
12509
+ "options": [
12510
+ {
12511
+ "name": "--confirm",
12512
+ "description": "Required: confirm the irreversible deletion"
12513
+ }
12514
+ ],
10910
12515
  "arguments": [
10911
12516
  {
10912
12517
  "name": "ID",
10913
12518
  "required": true,
10914
- "description": "Uptime group id"
12519
+ "description": "Workload action id"
10915
12520
  }
10916
12521
  ],
10917
12522
  "examples": [
10918
- "closeyourit uptime-groups update <group-id> --name \"New name\" --color emerald"
12523
+ "closeyourit workload delete <action-id> --confirm"
10919
12524
  ]
10920
- }
10921
- ]
10922
- },
10923
- {
10924
- "name": "vulnerabilities",
10925
- "commands": [
12525
+ },
10926
12526
  {
10927
- "name": "ignore",
10928
- "description": "Ignore a vulnerability: you accept living with the risk",
10929
- "aliases": [
10930
- "vulns:ignore"
10931
- ],
12527
+ "name": "list",
12528
+ "description": "List the workload actions of the teams you belong to (newest first)",
10932
12529
  "options": [
10933
12530
  {
10934
- "name": "--note",
10935
- "description": "Why you are keeping it (shown alongside the ignored row)",
12531
+ "name": "--page",
12532
+ "description": "Page number",
10936
12533
  "arguments": [
10937
12534
  {
10938
- "name": "NOTE",
12535
+ "name": "PAGE",
10939
12536
  "required": true
10940
12537
  }
10941
12538
  ]
10942
12539
  }
10943
12540
  ],
10944
- "arguments": [
12541
+ "examples": [
12542
+ "closeyourit workload list",
12543
+ "closeyourit workload list --page 2 --json"
12544
+ ]
12545
+ },
12546
+ {
12547
+ "name": "participant",
12548
+ "description": "People taking part in a workload action (members of its team)",
12549
+ "commands": [
10945
12550
  {
10946
- "name": "ID",
10947
- "required": true,
10948
- "description": "Vulnerability finding id"
12551
+ "name": "add",
12552
+ "description": "Add someone to a workload action (they must belong to the team that owns it)",
12553
+ "arguments": [
12554
+ {
12555
+ "name": "ACTION",
12556
+ "required": true,
12557
+ "description": "Workload action id"
12558
+ },
12559
+ {
12560
+ "name": "MEMBER",
12561
+ "required": true,
12562
+ "description": "Participant account id or email (must be on the action team)"
12563
+ }
12564
+ ],
12565
+ "examples": [
12566
+ "closeyourit workload participant add <action-id> ada@acme.com"
12567
+ ]
12568
+ },
12569
+ {
12570
+ "name": "remove",
12571
+ "description": "Remove someone from a workload action (idempotent: removing who is not there succeeds)",
12572
+ "arguments": [
12573
+ {
12574
+ "name": "ACTION",
12575
+ "required": true,
12576
+ "description": "Workload action id"
12577
+ },
12578
+ {
12579
+ "name": "MEMBER",
12580
+ "required": true,
12581
+ "description": "Participant account id or email"
12582
+ }
12583
+ ],
12584
+ "examples": [
12585
+ "closeyourit workload participant remove <action-id> ada@acme.com"
12586
+ ]
10949
12587
  }
10950
- ],
10951
- "examples": [
10952
- "closeyourit vulnerabilities ignore <finding-id>",
10953
- "closeyourit vulnerabilities ignore <finding-id> --note \"Not reachable from our code.\""
10954
12588
  ]
10955
12589
  },
10956
12590
  {
10957
- "name": "list",
10958
- "description": "List known vulnerabilities of the project dependencies (cross-project)",
10959
- "aliases": [
10960
- "vulns:list"
10961
- ],
12591
+ "name": "promote",
12592
+ "description": "Generate a ticket from a workload action and link it back (the action keeps existing; an already linked action is refused)",
10962
12593
  "options": [
10963
12594
  {
10964
12595
  "name": "--project",
10965
12596
  "aliases": [
10966
12597
  "-p"
10967
12598
  ],
10968
- "description": "Filter by project id (UUID) or key",
12599
+ "description": "Project id (UUID) or key",
12600
+ "required": true,
10969
12601
  "arguments": [
10970
12602
  {
10971
12603
  "name": "PROJECT",
@@ -10974,175 +12606,173 @@
10974
12606
  ]
10975
12607
  },
10976
12608
  {
10977
- "name": "--severity",
10978
- "description": "Filter by severity (critical, high, moderate, low, unknown)",
12609
+ "name": "--title",
12610
+ "description": "Ticket title (default: the action title, max 255 characters)",
10979
12611
  "arguments": [
10980
12612
  {
10981
- "name": "SEVERITY",
12613
+ "name": "TITLE",
10982
12614
  "required": true
10983
12615
  }
10984
12616
  ]
10985
12617
  },
10986
12618
  {
10987
- "name": "--status",
10988
- "description": "Filter by status (open, resolved, ignored)",
12619
+ "name": "--description",
12620
+ "description": "Ticket description (max 4000 characters)",
10989
12621
  "arguments": [
10990
12622
  {
10991
- "name": "STATUS",
12623
+ "name": "DESCRIPTION",
10992
12624
  "required": true
10993
12625
  }
10994
12626
  ]
10995
12627
  },
10996
12628
  {
10997
- "name": "--package",
10998
- "description": "Filter by package name (partial match)",
12629
+ "name": "--kind",
12630
+ "description": "Ticket kind (default: task)",
10999
12631
  "arguments": [
11000
12632
  {
11001
- "name": "PACKAGE",
12633
+ "name": "KIND",
12634
+ "required": true,
12635
+ "acceptedValues": [
12636
+ "bug",
12637
+ "story",
12638
+ "task",
12639
+ "epic"
12640
+ ]
12641
+ }
12642
+ ]
12643
+ },
12644
+ {
12645
+ "name": "--status",
12646
+ "description": "Status code, label or id (e.g. open, \"In Progress\") — default: open",
12647
+ "arguments": [
12648
+ {
12649
+ "name": "STATUS",
11002
12650
  "required": true
11003
12651
  }
11004
12652
  ]
11005
12653
  },
11006
12654
  {
11007
- "name": "--page",
11008
- "description": "Page number",
12655
+ "name": "--priority",
12656
+ "description": "Priority code, label or id (e.g. medium, High) — default: medium",
11009
12657
  "arguments": [
11010
12658
  {
11011
- "name": "PAGE",
12659
+ "name": "PRIORITY",
11012
12660
  "required": true
11013
12661
  }
11014
12662
  ]
11015
12663
  }
11016
12664
  ],
11017
- "examples": [
11018
- "closeyourit vulnerabilities list",
11019
- "closeyourit vulnerabilities list --severity critical",
11020
- "closeyourit vulnerabilities list --project acme-api --status open",
11021
- "closeyourit vulnerabilities list --package nokogiri --json"
11022
- ]
11023
- },
11024
- {
11025
- "name": "promote",
11026
- "description": "Open a ticket from a vulnerability (automatic promotion only fires on high/critical)",
11027
- "aliases": [
11028
- "vulns:promote"
11029
- ],
11030
12665
  "arguments": [
11031
12666
  {
11032
- "name": "ID",
12667
+ "name": "ACTION",
11033
12668
  "required": true,
11034
- "description": "Vulnerability finding id"
12669
+ "description": "Workload action id"
11035
12670
  }
11036
12671
  ],
11037
12672
  "examples": [
11038
- "closeyourit vulnerabilities promote <finding-id>"
12673
+ "closeyourit workload promote <action-id> --project acme-api",
12674
+ "closeyourit workload promote <action-id> -p acme-api --title \"Implement the partner API\" --description \"Agreed in the meeting\" --kind story --priority High"
11039
12675
  ]
11040
12676
  },
11041
12677
  {
11042
- "name": "reopen",
11043
- "description": "Reopen an ignored vulnerability: you changed your mind",
11044
- "aliases": [
11045
- "vulns:reopen"
11046
- ],
12678
+ "name": "show",
12679
+ "description": "Show one workload action (an action of another team answers 404, never 403)",
11047
12680
  "arguments": [
11048
12681
  {
11049
12682
  "name": "ID",
11050
12683
  "required": true,
11051
- "description": "Vulnerability finding id"
12684
+ "description": "Workload action id"
11052
12685
  }
11053
12686
  ],
11054
12687
  "examples": [
11055
- "closeyourit vulnerabilities reopen <finding-id>"
12688
+ "closeyourit workload show <action-id>"
11056
12689
  ]
11057
12690
  },
11058
12691
  {
11059
- "name": "rescan",
11060
- "description": "Rescan a project now, without waiting for the nightly run",
11061
- "aliases": [
11062
- "vulns:rescan"
11063
- ],
12692
+ "name": "update",
12693
+ "description": "Update a workload action (only the passed fields change). The team never changes: moving an action would change who can see it.",
11064
12694
  "options": [
11065
12695
  {
11066
- "name": "--project",
11067
- "aliases": [
11068
- "-p"
11069
- ],
11070
- "description": "Project id (UUID) or key",
11071
- "required": true,
12696
+ "name": "--title",
12697
+ "description": "New title",
11072
12698
  "arguments": [
11073
12699
  {
11074
- "name": "PROJECT",
12700
+ "name": "TITLE",
11075
12701
  "required": true
11076
12702
  }
11077
12703
  ]
11078
- }
11079
- ],
11080
- "examples": [
11081
- "closeyourit vulnerabilities rescan --project acme-api"
11082
- ]
11083
- },
11084
- {
11085
- "name": "runtimes",
11086
- "description": "List the support state of the declared runtimes (Ruby, Node, Flutter…)",
11087
- "aliases": [
11088
- "vulns:runtimes"
11089
- ],
11090
- "options": [
12704
+ },
11091
12705
  {
11092
- "name": "--project",
11093
- "aliases": [
11094
- "-p"
11095
- ],
11096
- "description": "Filter by project id (UUID) or key",
12706
+ "name": "--description",
12707
+ "description": "What the activity is about (free text)",
11097
12708
  "arguments": [
11098
12709
  {
11099
- "name": "PROJECT",
12710
+ "name": "DESCRIPTION",
11100
12711
  "required": true
11101
12712
  }
11102
12713
  ]
11103
12714
  },
11104
12715
  {
11105
- "name": "--page",
11106
- "description": "Page number",
12716
+ "name": "--status",
12717
+ "description": "Status (planned, in_progress, done, cancelled)",
11107
12718
  "arguments": [
11108
12719
  {
11109
- "name": "PAGE",
12720
+ "name": "STATUS",
12721
+ "required": true,
12722
+ "acceptedValues": [
12723
+ "planned",
12724
+ "in_progress",
12725
+ "done",
12726
+ "cancelled"
12727
+ ]
12728
+ }
12729
+ ]
12730
+ },
12731
+ {
12732
+ "name": "--scheduled-at",
12733
+ "description": "When it takes place (ISO 8601)",
12734
+ "arguments": [
12735
+ {
12736
+ "name": "SCHEDULED-AT",
12737
+ "required": true
12738
+ }
12739
+ ]
12740
+ },
12741
+ {
12742
+ "name": "--due-at",
12743
+ "description": "Deadline (ISO 8601)",
12744
+ "arguments": [
12745
+ {
12746
+ "name": "DUE-AT",
12747
+ "required": true
12748
+ }
12749
+ ]
12750
+ },
12751
+ {
12752
+ "name": "--ticket",
12753
+ "description": "Link an existing ticket by code (e.g. DRFL-3) or id — pass an empty string to unlink",
12754
+ "arguments": [
12755
+ {
12756
+ "name": "TICKET",
11110
12757
  "required": true
11111
12758
  }
11112
12759
  ]
11113
12760
  }
11114
12761
  ],
11115
- "examples": [
11116
- "closeyourit vulnerabilities runtimes",
11117
- "closeyourit vulnerabilities runtimes --project acme-api --json"
11118
- ]
11119
- },
11120
- {
11121
- "name": "show",
11122
- "description": "Show a single vulnerability: advisory, package, manifest and the fixing version",
11123
- "aliases": [
11124
- "vulns:show"
11125
- ],
11126
12762
  "arguments": [
11127
12763
  {
11128
12764
  "name": "ID",
11129
12765
  "required": true,
11130
- "description": "Vulnerability finding id"
12766
+ "description": "Workload action id"
11131
12767
  }
11132
12768
  ],
11133
12769
  "examples": [
11134
- "closeyourit vulnerabilities show <finding-id>"
12770
+ "closeyourit workload update <action-id> --status done",
12771
+ "closeyourit workload update <action-id> --title \"Fiera 2027\" --due-at 2027-09-10T18:00:00Z",
12772
+ "closeyourit workload update <action-id> --ticket \"\""
11135
12773
  ]
11136
12774
  }
11137
12775
  ]
11138
- },
11139
- {
11140
- "name": "whoami",
11141
- "description": "Show the authenticated account, organization, token prefix and permissions",
11142
- "examples": [
11143
- "closeyourit whoami",
11144
- "closeyourit whoami --json"
11145
- ]
11146
12776
  }
11147
12777
  ]
11148
12778
  }