@bussolabs/closeyourit-cli 0.22.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 (116) hide show
  1. package/README.md +44 -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/service-accounts/show.d.ts +9 -0
  50. package/dist/commands/service-accounts/show.js +26 -0
  51. package/dist/commands/service-accounts/tokens/list.d.ts +12 -0
  52. package/dist/commands/service-accounts/tokens/list.js +40 -0
  53. package/dist/commands/service-accounts/update.d.ts +31 -0
  54. package/dist/commands/service-accounts/update.js +105 -0
  55. package/dist/commands/shared/delete.d.ts +12 -0
  56. package/dist/commands/shared/delete.js +30 -0
  57. package/dist/commands/shared/list.d.ts +6 -0
  58. package/dist/commands/shared/list.js +45 -0
  59. package/dist/commands/shared/set.d.ts +14 -0
  60. package/dist/commands/shared/set.js +41 -0
  61. package/dist/commands/tickets/ask.d.ts +13 -0
  62. package/dist/commands/tickets/ask.js +81 -0
  63. package/dist/commands/tickets/dependencies/add.d.ts +15 -0
  64. package/dist/commands/tickets/dependencies/add.js +62 -0
  65. package/dist/commands/tickets/dependencies/list.d.ts +12 -0
  66. package/dist/commands/tickets/dependencies/list.js +37 -0
  67. package/dist/commands/tickets/dependencies/remove.d.ts +14 -0
  68. package/dist/commands/tickets/dependencies/remove.js +59 -0
  69. package/dist/commands/tickets/work-context.d.ts +15 -0
  70. package/dist/commands/tickets/work-context.js +130 -0
  71. package/dist/commands/vault/requests/approve.d.ts +9 -0
  72. package/dist/commands/vault/requests/approve.js +40 -0
  73. package/dist/commands/vault/requests/list.d.ts +6 -0
  74. package/dist/commands/vault/requests/list.js +29 -0
  75. package/dist/commands/vault/requests/reject.d.ts +12 -0
  76. package/dist/commands/vault/requests/reject.js +52 -0
  77. package/dist/commands/workload/create.d.ts +15 -0
  78. package/dist/commands/workload/create.js +45 -0
  79. package/dist/commands/workload/delete.d.ts +12 -0
  80. package/dist/commands/workload/delete.js +26 -0
  81. package/dist/commands/workload/list.d.ts +9 -0
  82. package/dist/commands/workload/list.js +29 -0
  83. package/dist/commands/workload/participant/add.d.ts +10 -0
  84. package/dist/commands/workload/participant/add.js +27 -0
  85. package/dist/commands/workload/participant/remove.d.ts +10 -0
  86. package/dist/commands/workload/participant/remove.js +23 -0
  87. package/dist/commands/workload/promote.d.ts +17 -0
  88. package/dist/commands/workload/promote.js +58 -0
  89. package/dist/commands/workload/show.d.ts +9 -0
  90. package/dist/commands/workload/show.js +24 -0
  91. package/dist/commands/workload/update.d.ts +17 -0
  92. package/dist/commands/workload/update.js +45 -0
  93. package/dist/errors/error-codes.d.ts +17 -0
  94. package/dist/errors/error-codes.js +36 -0
  95. package/dist/lib/api.d.ts +7 -1
  96. package/dist/lib/api.js +8 -0
  97. package/dist/lib/assistant.d.ts +29 -0
  98. package/dist/lib/assistant.js +76 -0
  99. package/dist/lib/bulk-triage.d.ts +35 -0
  100. package/dist/lib/bulk-triage.js +55 -0
  101. package/dist/lib/grouping-rules.d.ts +28 -0
  102. package/dist/lib/grouping-rules.js +39 -0
  103. package/dist/lib/knowledge.d.ts +15 -0
  104. package/dist/lib/knowledge.js +36 -0
  105. package/dist/lib/output.js +10 -0
  106. package/dist/lib/poll.d.ts +51 -0
  107. package/dist/lib/poll.js +59 -0
  108. package/dist/lib/service-accounts.d.ts +65 -0
  109. package/dist/lib/service-accounts.js +132 -0
  110. package/dist/lib/vault-requests.d.ts +38 -0
  111. package/dist/lib/vault-requests.js +125 -0
  112. package/dist/lib/workload.d.ts +37 -0
  113. package/dist/lib/workload.js +64 -0
  114. package/oclif.manifest.json +6290 -4001
  115. package/opencli.json +2164 -549
  116. 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.22.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,18 +3308,37 @@
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
- "name": "--project",
2615
- "aliases": [
2616
- "-p"
2617
- ],
2618
- "description": "Project id (UUID) or key",
2619
- "required": true,
3314
+ "name": "--project",
3315
+ "aliases": [
3316
+ "-p"
3317
+ ],
3318
+ "description": "Project id (UUID) or key the page belongs to (repeatable)",
3319
+ "arguments": [
3320
+ {
3321
+ "name": "PROJECT",
3322
+ "required": true
3323
+ }
3324
+ ]
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)",
2620
3339
  "arguments": [
2621
3340
  {
2622
- "name": "PROJECT",
3341
+ "name": "TAG",
2623
3342
  "required": true
2624
3343
  }
2625
3344
  ]
@@ -2698,13 +3417,24 @@
2698
3417
  "required": true
2699
3418
  }
2700
3419
  ]
3420
+ },
3421
+ {
3422
+ "name": "--author-origin",
3423
+ "description": "Name of the assistant or skill that wrote the text (declares an automatic author)",
3424
+ "arguments": [
3425
+ {
3426
+ "name": "AUTHOR-ORIGIN",
3427
+ "required": true
3428
+ }
3429
+ ]
2701
3430
  }
2702
3431
  ],
2703
3432
  "examples": [
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",
@@ -7926,113 +8783,271 @@
7926
8783
  "required": true
7927
8784
  }
7928
8785
  ]
7929
- },
7930
- {
7931
- "name": "--grant-secrets",
7932
- "description": "Grant read+write secrets on the visible projects"
7933
- },
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": [
7934
8941
  {
7935
8942
  "name": "--secret-environment",
7936
- "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)",
7937
8944
  "arguments": [
7938
8945
  {
7939
8946
  "name": "SECRET-ENVIRONMENT",
7940
8947
  "required": true
7941
8948
  }
7942
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"
7943
8961
  }
7944
8962
  ],
7945
8963
  "examples": [
7946
- "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"
7947
8966
  ]
7948
- },
8967
+ }
8968
+ ]
8969
+ },
8970
+ {
8971
+ "name": "shared",
8972
+ "description": "Organization-level shared secret variables, delegated to projects",
8973
+ "commands": [
7949
8974
  {
7950
8975
  "name": "delete",
7951
- "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.",
7952
8977
  "options": [
7953
8978
  {
7954
8979
  "name": "--confirm",
7955
- "description": "Required: confirm the deletion"
8980
+ "description": "Required: confirm the deletion across every environment"
7956
8981
  }
7957
8982
  ],
7958
8983
  "arguments": [
7959
8984
  {
7960
- "name": "ID",
8985
+ "name": "NAME",
7961
8986
  "required": true,
7962
- "description": "Service account id"
8987
+ "description": "Shared secret name, or its id"
7963
8988
  }
7964
8989
  ],
7965
8990
  "examples": [
7966
- "closeyourit service-accounts delete <id> --confirm"
8991
+ "closeyourit shared delete API_KEY --confirm"
7967
8992
  ]
7968
8993
  },
7969
8994
  {
7970
8995
  "name": "list",
7971
- "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.",
7972
9005
  "options": [
7973
9006
  {
7974
- "name": "--page",
7975
- "description": "Page number",
9007
+ "name": "--environment",
9008
+ "aliases": [
9009
+ "-e"
9010
+ ],
9011
+ "description": "Environment code (e.g. production) or id",
9012
+ "required": true,
7976
9013
  "arguments": [
7977
9014
  {
7978
- "name": "PAGE",
9015
+ "name": "ENVIRONMENT",
7979
9016
  "required": true
7980
9017
  }
7981
9018
  ]
7982
- }
7983
- ],
7984
- "examples": [
7985
- "closeyourit service-accounts list",
7986
- "closeyourit service-accounts list --json"
7987
- ]
7988
- },
7989
- {
7990
- "name": "tokens",
7991
- "commands": [
9019
+ },
7992
9020
  {
7993
- "name": "create",
7994
- "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)",
7995
9023
  "arguments": [
7996
9024
  {
7997
- "name": "ACCOUNT",
7998
- "required": true,
7999
- "description": "Service account id"
8000
- },
8001
- {
8002
- "name": "NAME",
8003
- "required": true,
8004
- "description": "Token name (e.g. ci-deploy)"
9025
+ "name": "VALUE",
9026
+ "required": true
8005
9027
  }
8006
- ],
8007
- "examples": [
8008
- "closeyourit service-accounts tokens create <account-id> ci-deploy"
8009
9028
  ]
8010
9029
  },
8011
9030
  {
8012
- "name": "revoke",
8013
- "description": "Revoke a service account CLI token (the agent using it loses access)",
8014
- "options": [
8015
- {
8016
- "name": "--confirm",
8017
- "description": "Required: confirm the revocation"
8018
- }
8019
- ],
9031
+ "name": "--description",
9032
+ "description": "Optional description",
8020
9033
  "arguments": [
8021
9034
  {
8022
- "name": "ACCOUNT",
8023
- "required": true,
8024
- "description": "Service account id"
8025
- },
8026
- {
8027
- "name": "ID",
8028
- "required": true,
8029
- "description": "Token id"
9035
+ "name": "DESCRIPTION",
9036
+ "required": true
8030
9037
  }
8031
- ],
8032
- "examples": [
8033
- "closeyourit service-accounts tokens revoke <account-id> <token-id> --confirm"
8034
9038
  ]
8035
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\""
8036
9051
  ]
8037
9052
  }
8038
9053
  ]
@@ -8274,7 +9289,7 @@
8274
9289
  },
8275
9290
  {
8276
9291
  "name": "tickets",
8277
- "description": "Tickets: list, show, create",
9292
+ "description": "Tickets: list, show, create, ask",
8278
9293
  "commands": [
8279
9294
  {
8280
9295
  "name": "approve",
@@ -8306,6 +9321,32 @@
8306
9321
  "closeyourit tickets approve <ticket-id> --project acme-api"
8307
9322
  ]
8308
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
+ },
8309
9350
  {
8310
9351
  "name": "assign",
8311
9352
  "description": "Assign a ticket to an account, or unassign it (--unassign)",
@@ -8875,6 +9916,113 @@
8875
9916
  "closeyourit tickets delete <ticket-id> --project acme-api --confirm"
8876
9917
  ]
8877
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
+ },
8878
10026
  {
8879
10027
  "name": "detach",
8880
10028
  "description": "Remove an attachment from a ticket (irreversible)",
@@ -9958,8 +11106,38 @@
9958
11106
  ]
9959
11107
  },
9960
11108
  {
9961
- "name": "vote",
9962
- "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)",
9963
11141
  "options": [
9964
11142
  {
9965
11143
  "name": "--project",
@@ -9980,16 +11158,16 @@
9980
11158
  {
9981
11159
  "name": "ID",
9982
11160
  "required": true,
9983
- "description": "Ticket id"
11161
+ "description": "Ticket id or code (e.g. DRFL-3)"
9984
11162
  }
9985
11163
  ],
9986
11164
  "examples": [
9987
- "closeyourit tickets vote <ticket-id> --project acme-api"
11165
+ "closeyourit tickets watch <ticket-id> --project acme-api"
9988
11166
  ]
9989
11167
  },
9990
11168
  {
9991
- "name": "watch",
9992
- "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",
9993
11171
  "options": [
9994
11172
  {
9995
11173
  "name": "--project",
@@ -10004,6 +11182,10 @@
10004
11182
  "required": true
10005
11183
  }
10006
11184
  ]
11185
+ },
11186
+ {
11187
+ "name": "--full",
11188
+ "description": "Also print the frozen text of every reference and procedure, not just the table"
10007
11189
  }
10008
11190
  ],
10009
11191
  "arguments": [
@@ -10014,7 +11196,10 @@
10014
11196
  }
10015
11197
  ],
10016
11198
  "examples": [
10017
- "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"
10018
11203
  ]
10019
11204
  }
10020
11205
  ]
@@ -10433,16 +11618,254 @@
10433
11618
  "closeyourit todos update <list-id> --name \"Sprint prep\"",
10434
11619
  "closeyourit todos update <list-id> --color rose"
10435
11620
  ]
10436
- }
10437
- ]
10438
- },
10439
- {
10440
- "name": "tokens",
10441
- "description": "Project ingest tokens (CI/SDK credentials)",
10442
- "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
+ },
10443
11866
  {
10444
- "name": "create",
10445
- "description": "Create an ingest token (the secret is shown only once)",
11867
+ "name": "revoke",
11868
+ "description": "Revoke an ingest token",
10446
11869
  "options": [
10447
11870
  {
10448
11871
  "name": "--project",
@@ -10457,37 +11880,22 @@
10457
11880
  "required": true
10458
11881
  }
10459
11882
  ]
10460
- },
10461
- {
10462
- "name": "--name",
10463
- "description": "Human-readable token name",
10464
- "required": true,
10465
- "arguments": [
10466
- {
10467
- "name": "NAME",
10468
- "required": true
10469
- }
10470
- ]
10471
- },
11883
+ }
11884
+ ],
11885
+ "arguments": [
10472
11886
  {
10473
- "name": "--environment-id",
10474
- "description": "Environment id the token is scoped to",
11887
+ "name": "ID",
10475
11888
  "required": true,
10476
- "arguments": [
10477
- {
10478
- "name": "ENVIRONMENT-ID",
10479
- "required": true
10480
- }
10481
- ]
11889
+ "description": "Token id"
10482
11890
  }
10483
11891
  ],
10484
11892
  "examples": [
10485
- "closeyourit tokens create --project acme-api --name \"CI prod\" --environment-id <env-id>"
11893
+ "closeyourit tokens revoke <token-id> --project acme-api"
10486
11894
  ]
10487
11895
  },
10488
11896
  {
10489
- "name": "list",
10490
- "description": "List ingest tokens for a project",
11897
+ "name": "rotate",
11898
+ "description": "Rotate an ingest token (the new secret is shown only once)",
10491
11899
  "options": [
10492
11900
  {
10493
11901
  "name": "--project",
@@ -10504,165 +11912,259 @@
10504
11912
  ]
10505
11913
  }
10506
11914
  ],
11915
+ "arguments": [
11916
+ {
11917
+ "name": "ID",
11918
+ "required": true,
11919
+ "description": "Token id"
11920
+ }
11921
+ ],
10507
11922
  "examples": [
10508
- "closeyourit tokens list --project acme-api",
10509
- "closeyourit tokens list -p acme-api --json"
11923
+ "closeyourit tokens rotate <token-id> --project acme-api"
10510
11924
  ]
10511
- },
11925
+ }
11926
+ ]
11927
+ },
11928
+ {
11929
+ "name": "uptime-groups",
11930
+ "description": "Uptime monitor groups (org-level) + public status page",
11931
+ "commands": [
10512
11932
  {
10513
- "name": "provision",
10514
- "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)",
10515
11935
  "options": [
10516
11936
  {
10517
- "name": "--project",
10518
- "aliases": [
10519
- "-p"
10520
- ],
10521
- "description": "Project id (UUID) or key",
11937
+ "name": "--name",
11938
+ "description": "Group name",
10522
11939
  "required": true,
10523
11940
  "arguments": [
10524
11941
  {
10525
- "name": "PROJECT",
11942
+ "name": "NAME",
10526
11943
  "required": true
10527
11944
  }
10528
11945
  ]
10529
11946
  },
10530
11947
  {
10531
- "name": "--name",
10532
- "description": "Human-readable token name",
10533
- "required": true,
11948
+ "name": "--color",
11949
+ "description": "Accent color (Tailwind palette name)",
10534
11950
  "arguments": [
10535
11951
  {
10536
- "name": "NAME",
11952
+ "name": "COLOR",
10537
11953
  "required": true
10538
11954
  }
10539
11955
  ]
10540
11956
  },
10541
11957
  {
10542
- "name": "--environment-id",
10543
- "description": "Source environment code or id",
10544
- "required": true,
11958
+ "name": "--icon",
11959
+ "description": "Icon name",
10545
11960
  "arguments": [
10546
11961
  {
10547
- "name": "ENVIRONMENT-ID",
11962
+ "name": "ICON",
10548
11963
  "required": true
10549
11964
  }
10550
11965
  ]
10551
11966
  },
10552
11967
  {
10553
- "name": "--scope",
10554
- "description": "Token scope (repeatable)",
11968
+ "name": "--description",
11969
+ "description": "Group description",
10555
11970
  "arguments": [
10556
11971
  {
10557
- "name": "SCOPE",
10558
- "required": true,
10559
- "acceptedValues": [
10560
- "ingest",
10561
- "read"
10562
- ]
11972
+ "name": "DESCRIPTION",
11973
+ "required": true
10563
11974
  }
10564
11975
  ]
10565
- },
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": [
10566
11987
  {
10567
- "name": "--to-project",
10568
- "description": "Destination project id or key",
11988
+ "name": "--confirm",
11989
+ "description": "Required: confirm the irreversible deletion"
11990
+ }
11991
+ ],
11992
+ "arguments": [
11993
+ {
11994
+ "name": "ID",
10569
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",
10570
12010
  "arguments": [
10571
12011
  {
10572
- "name": "TO-PROJECT",
12012
+ "name": "PAGE",
10573
12013
  "required": true
10574
12014
  }
10575
12015
  ]
10576
- },
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": [
10577
12027
  {
10578
- "name": "--to-environment-id",
10579
- "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",
10580
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",
10581
12072
  "arguments": [
10582
12073
  {
10583
- "name": "TO-ENVIRONMENT-ID",
12074
+ "name": "NAME",
10584
12075
  "required": true
10585
12076
  }
10586
12077
  ]
10587
12078
  },
10588
12079
  {
10589
- "name": "--secret-name",
10590
- "description": "Destination vault variable name",
10591
- "required": true,
12080
+ "name": "--color",
12081
+ "description": "Accent color (Tailwind palette name)",
10592
12082
  "arguments": [
10593
12083
  {
10594
- "name": "SECRET-NAME",
12084
+ "name": "COLOR",
10595
12085
  "required": true
10596
12086
  }
10597
12087
  ]
10598
12088
  },
10599
12089
  {
10600
- "name": "--idempotency-key",
10601
- "description": "Stable key for safe request retries",
12090
+ "name": "--icon",
12091
+ "description": "Icon name",
10602
12092
  "arguments": [
10603
12093
  {
10604
- "name": "IDEMPOTENCY-KEY",
12094
+ "name": "ICON",
10605
12095
  "required": true
10606
12096
  }
10607
12097
  ]
10608
12098
  },
10609
12099
  {
10610
- "name": "--sync-github",
10611
- "description": "Synchronize the destination vault to GitHub"
10612
- },
12100
+ "name": "--description",
12101
+ "description": "Group description",
12102
+ "arguments": [
12103
+ {
12104
+ "name": "DESCRIPTION",
12105
+ "required": true
12106
+ }
12107
+ ]
12108
+ }
12109
+ ],
12110
+ "arguments": [
10613
12111
  {
10614
- "name": "--confirm-production",
10615
- "description": "Required when source or destination is production"
12112
+ "name": "ID",
12113
+ "required": true,
12114
+ "description": "Uptime group id"
10616
12115
  }
10617
12116
  ],
10618
12117
  "examples": [
10619
- "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"
10620
12119
  ]
10621
- },
10622
- {
10623
- "name": "provisions",
10624
- "commands": [
10625
- {
10626
- "name": "retry",
10627
- "description": "Retry GitHub synchronization without regenerating or revealing the token",
10628
- "options": [
10629
- {
10630
- "name": "--project",
10631
- "aliases": [
10632
- "-p"
10633
- ],
10634
- "description": "Project id (UUID) or key",
10635
- "required": true,
10636
- "arguments": [
10637
- {
10638
- "name": "PROJECT",
10639
- "required": true
10640
- }
10641
- ]
10642
- }
10643
- ],
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.",
10644
12134
  "arguments": [
10645
12135
  {
10646
12136
  "name": "ID",
10647
12137
  "required": true,
10648
- "description": "Provision id"
12138
+ "description": "Change request id (from \"vault requests list\")"
10649
12139
  }
12140
+ ],
12141
+ "examples": [
12142
+ "closeyourit vault requests approve <id>",
12143
+ "closeyourit vault requests approve <id> --json"
10650
12144
  ]
10651
12145
  },
10652
12146
  {
10653
- "name": "show",
10654
- "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.",
10655
12157
  "options": [
10656
12158
  {
10657
- "name": "--project",
12159
+ "name": "--reason",
10658
12160
  "aliases": [
10659
- "-p"
12161
+ "-r"
10660
12162
  ],
10661
- "description": "Project id (UUID) or key",
12163
+ "description": "Why the change is refused — recorded for the audit and sent to whoever asked",
10662
12164
  "required": true,
10663
12165
  "arguments": [
10664
12166
  {
10665
- "name": "PROJECT",
12167
+ "name": "REASON",
10666
12168
  "required": true
10667
12169
  }
10668
12170
  ]
@@ -10672,26 +12174,34 @@
10672
12174
  {
10673
12175
  "name": "ID",
10674
12176
  "required": true,
10675
- "description": "Provision id"
12177
+ "description": "Change request id (from \"vault requests list\")"
10676
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"
10677
12183
  ]
10678
12184
  }
10679
12185
  ]
10680
- },
12186
+ }
12187
+ ]
12188
+ },
12189
+ {
12190
+ "name": "vulnerabilities",
12191
+ "commands": [
10681
12192
  {
10682
- "name": "revoke",
10683
- "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
+ ],
10684
12198
  "options": [
10685
12199
  {
10686
- "name": "--project",
10687
- "aliases": [
10688
- "-p"
10689
- ],
10690
- "description": "Project id (UUID) or key",
10691
- "required": true,
12200
+ "name": "--note",
12201
+ "description": "Why you are keeping it (shown alongside the ignored row)",
10692
12202
  "arguments": [
10693
12203
  {
10694
- "name": "PROJECT",
12204
+ "name": "NOTE",
10695
12205
  "required": true
10696
12206
  }
10697
12207
  ]
@@ -10701,286 +12211,393 @@
10701
12211
  {
10702
12212
  "name": "ID",
10703
12213
  "required": true,
10704
- "description": "Token id"
12214
+ "description": "Vulnerability finding id"
10705
12215
  }
10706
12216
  ],
10707
12217
  "examples": [
10708
- "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.\""
10709
12220
  ]
10710
12221
  },
10711
12222
  {
10712
- "name": "rotate",
10713
- "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
+ ],
10714
12228
  "options": [
10715
12229
  {
10716
12230
  "name": "--project",
10717
12231
  "aliases": [
10718
12232
  "-p"
10719
12233
  ],
10720
- "description": "Project id (UUID) or key",
10721
- "required": true,
12234
+ "description": "Filter by project id (UUID) or key",
10722
12235
  "arguments": [
10723
12236
  {
10724
12237
  "name": "PROJECT",
10725
12238
  "required": true
10726
12239
  }
10727
12240
  ]
10728
- }
10729
- ],
10730
- "arguments": [
10731
- {
10732
- "name": "ID",
10733
- "required": true,
10734
- "description": "Token id"
10735
- }
10736
- ],
10737
- "examples": [
10738
- "closeyourit tokens rotate <token-id> --project acme-api"
10739
- ]
10740
- }
10741
- ]
10742
- },
10743
- {
10744
- "name": "uptime-groups",
10745
- "description": "Uptime monitor groups (org-level) + public status page",
10746
- "commands": [
10747
- {
10748
- "name": "create",
10749
- "description": "Create an uptime monitor group (org-level container)",
10750
- "options": [
12241
+ },
10751
12242
  {
10752
- "name": "--name",
10753
- "description": "Group name",
10754
- "required": true,
12243
+ "name": "--severity",
12244
+ "description": "Filter by severity (critical, high, moderate, low, unknown)",
10755
12245
  "arguments": [
10756
12246
  {
10757
- "name": "NAME",
12247
+ "name": "SEVERITY",
10758
12248
  "required": true
10759
12249
  }
10760
12250
  ]
10761
12251
  },
10762
12252
  {
10763
- "name": "--color",
10764
- "description": "Accent color (Tailwind palette name)",
12253
+ "name": "--status",
12254
+ "description": "Filter by status (open, resolved, ignored)",
10765
12255
  "arguments": [
10766
12256
  {
10767
- "name": "COLOR",
12257
+ "name": "STATUS",
10768
12258
  "required": true
10769
12259
  }
10770
12260
  ]
10771
12261
  },
10772
12262
  {
10773
- "name": "--icon",
10774
- "description": "Icon name",
12263
+ "name": "--package",
12264
+ "description": "Filter by package name (partial match)",
10775
12265
  "arguments": [
10776
12266
  {
10777
- "name": "ICON",
12267
+ "name": "PACKAGE",
10778
12268
  "required": true
10779
12269
  }
10780
12270
  ]
10781
12271
  },
10782
12272
  {
10783
- "name": "--description",
10784
- "description": "Group description",
12273
+ "name": "--page",
12274
+ "description": "Page number",
10785
12275
  "arguments": [
10786
12276
  {
10787
- "name": "DESCRIPTION",
12277
+ "name": "PAGE",
10788
12278
  "required": true
10789
12279
  }
10790
12280
  ]
10791
12281
  }
10792
12282
  ],
10793
12283
  "examples": [
10794
- "closeyourit uptime-groups create --name \"Core services\"",
10795
- "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"
10796
12288
  ]
10797
12289
  },
10798
12290
  {
10799
- "name": "delete",
10800
- "description": "Delete an uptime monitor group (irreversible)",
10801
- "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": [
10802
12297
  {
10803
- "name": "--confirm",
10804
- "description": "Required: confirm the irreversible deletion"
12298
+ "name": "ID",
12299
+ "required": true,
12300
+ "description": "Vulnerability finding id"
10805
12301
  }
10806
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
+ ],
10807
12313
  "arguments": [
10808
12314
  {
10809
12315
  "name": "ID",
10810
12316
  "required": true,
10811
- "description": "Uptime group id"
12317
+ "description": "Vulnerability finding id"
10812
12318
  }
10813
12319
  ],
10814
12320
  "examples": [
10815
- "closeyourit uptime-groups delete <group-id> --confirm"
12321
+ "closeyourit vulnerabilities reopen <finding-id>"
10816
12322
  ]
10817
12323
  },
10818
12324
  {
10819
- "name": "list",
10820
- "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
+ ],
10821
12330
  "options": [
10822
12331
  {
10823
- "name": "--page",
10824
- "description": "Page number",
12332
+ "name": "--project",
12333
+ "aliases": [
12334
+ "-p"
12335
+ ],
12336
+ "description": "Project id (UUID) or key",
12337
+ "required": true,
10825
12338
  "arguments": [
10826
12339
  {
10827
- "name": "PAGE",
12340
+ "name": "PROJECT",
10828
12341
  "required": true
10829
12342
  }
10830
12343
  ]
10831
12344
  }
10832
12345
  ],
10833
12346
  "examples": [
10834
- "closeyourit uptime-groups list",
10835
- "closeyourit uptime-groups list --page 2 --json"
12347
+ "closeyourit vulnerabilities rescan --project acme-api"
10836
12348
  ]
10837
12349
  },
10838
12350
  {
10839
- "name": "publish",
10840
- "description": "Publish the public status page for an uptime group",
10841
- "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": [
10842
12357
  {
10843
- "name": "ID",
10844
- "required": true,
10845
- "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
+ ]
10846
12379
  }
10847
12380
  ],
10848
12381
  "examples": [
10849
- "closeyourit uptime-groups publish <group-id>"
12382
+ "closeyourit vulnerabilities runtimes",
12383
+ "closeyourit vulnerabilities runtimes --project acme-api --json"
10850
12384
  ]
10851
12385
  },
10852
12386
  {
10853
12387
  "name": "show",
10854
- "description": "Show an uptime monitor group",
10855
- "arguments": [
10856
- {
10857
- "name": "ID",
10858
- "required": true,
10859
- "description": "Uptime group id"
10860
- }
12388
+ "description": "Show a single vulnerability: advisory, package, manifest and the fixing version",
12389
+ "aliases": [
12390
+ "vulns:show"
10861
12391
  ],
10862
- "examples": [
10863
- "closeyourit uptime-groups show <group-id>"
10864
- ]
10865
- },
10866
- {
10867
- "name": "unpublish",
10868
- "description": "Unpublish (retract) the public status page for an uptime group",
10869
12392
  "arguments": [
10870
12393
  {
10871
12394
  "name": "ID",
10872
12395
  "required": true,
10873
- "description": "Uptime group id"
12396
+ "description": "Vulnerability finding id"
10874
12397
  }
10875
12398
  ],
10876
12399
  "examples": [
10877
- "closeyourit uptime-groups unpublish <group-id>"
12400
+ "closeyourit vulnerabilities show <finding-id>"
10878
12401
  ]
10879
- },
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": [
10880
12417
  {
10881
- "name": "update",
10882
- "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`.",
10883
12420
  "options": [
10884
12421
  {
10885
- "name": "--name",
10886
- "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)",
10887
12446
  "arguments": [
10888
12447
  {
10889
- "name": "NAME",
12448
+ "name": "DESCRIPTION",
10890
12449
  "required": true
10891
12450
  }
10892
12451
  ]
10893
12452
  },
10894
12453
  {
10895
- "name": "--color",
10896
- "description": "Accent color (Tailwind palette name)",
12454
+ "name": "--status",
12455
+ "description": "Status (planned, in_progress, done, cancelled)",
10897
12456
  "arguments": [
10898
12457
  {
10899
- "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",
10900
12475
  "required": true
10901
12476
  }
10902
12477
  ]
10903
12478
  },
10904
12479
  {
10905
- "name": "--icon",
10906
- "description": "Icon name",
12480
+ "name": "--due-at",
12481
+ "description": "Deadline (ISO 8601)",
10907
12482
  "arguments": [
10908
12483
  {
10909
- "name": "ICON",
12484
+ "name": "DUE-AT",
10910
12485
  "required": true
10911
12486
  }
10912
12487
  ]
10913
12488
  },
10914
12489
  {
10915
- "name": "--description",
10916
- "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",
10917
12492
  "arguments": [
10918
12493
  {
10919
- "name": "DESCRIPTION",
12494
+ "name": "TICKET",
10920
12495
  "required": true
10921
12496
  }
10922
12497
  ]
10923
12498
  }
10924
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
+ ],
10925
12515
  "arguments": [
10926
12516
  {
10927
12517
  "name": "ID",
10928
12518
  "required": true,
10929
- "description": "Uptime group id"
12519
+ "description": "Workload action id"
10930
12520
  }
10931
12521
  ],
10932
12522
  "examples": [
10933
- "closeyourit uptime-groups update <group-id> --name \"New name\" --color emerald"
12523
+ "closeyourit workload delete <action-id> --confirm"
10934
12524
  ]
10935
- }
10936
- ]
10937
- },
10938
- {
10939
- "name": "vulnerabilities",
10940
- "commands": [
12525
+ },
10941
12526
  {
10942
- "name": "ignore",
10943
- "description": "Ignore a vulnerability: you accept living with the risk",
10944
- "aliases": [
10945
- "vulns:ignore"
10946
- ],
12527
+ "name": "list",
12528
+ "description": "List the workload actions of the teams you belong to (newest first)",
10947
12529
  "options": [
10948
12530
  {
10949
- "name": "--note",
10950
- "description": "Why you are keeping it (shown alongside the ignored row)",
12531
+ "name": "--page",
12532
+ "description": "Page number",
10951
12533
  "arguments": [
10952
12534
  {
10953
- "name": "NOTE",
12535
+ "name": "PAGE",
10954
12536
  "required": true
10955
12537
  }
10956
12538
  ]
10957
12539
  }
10958
12540
  ],
10959
- "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": [
10960
12550
  {
10961
- "name": "ID",
10962
- "required": true,
10963
- "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
+ ]
10964
12587
  }
10965
- ],
10966
- "examples": [
10967
- "closeyourit vulnerabilities ignore <finding-id>",
10968
- "closeyourit vulnerabilities ignore <finding-id> --note \"Not reachable from our code.\""
10969
12588
  ]
10970
12589
  },
10971
12590
  {
10972
- "name": "list",
10973
- "description": "List known vulnerabilities of the project dependencies (cross-project)",
10974
- "aliases": [
10975
- "vulns:list"
10976
- ],
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)",
10977
12593
  "options": [
10978
12594
  {
10979
12595
  "name": "--project",
10980
12596
  "aliases": [
10981
12597
  "-p"
10982
12598
  ],
10983
- "description": "Filter by project id (UUID) or key",
12599
+ "description": "Project id (UUID) or key",
12600
+ "required": true,
10984
12601
  "arguments": [
10985
12602
  {
10986
12603
  "name": "PROJECT",
@@ -10989,175 +12606,173 @@
10989
12606
  ]
10990
12607
  },
10991
12608
  {
10992
- "name": "--severity",
10993
- "description": "Filter by severity (critical, high, moderate, low, unknown)",
12609
+ "name": "--title",
12610
+ "description": "Ticket title (default: the action title, max 255 characters)",
10994
12611
  "arguments": [
10995
12612
  {
10996
- "name": "SEVERITY",
12613
+ "name": "TITLE",
10997
12614
  "required": true
10998
12615
  }
10999
12616
  ]
11000
12617
  },
11001
12618
  {
11002
- "name": "--status",
11003
- "description": "Filter by status (open, resolved, ignored)",
12619
+ "name": "--description",
12620
+ "description": "Ticket description (max 4000 characters)",
11004
12621
  "arguments": [
11005
12622
  {
11006
- "name": "STATUS",
12623
+ "name": "DESCRIPTION",
11007
12624
  "required": true
11008
12625
  }
11009
12626
  ]
11010
12627
  },
11011
12628
  {
11012
- "name": "--package",
11013
- "description": "Filter by package name (partial match)",
12629
+ "name": "--kind",
12630
+ "description": "Ticket kind (default: task)",
11014
12631
  "arguments": [
11015
12632
  {
11016
- "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",
11017
12650
  "required": true
11018
12651
  }
11019
12652
  ]
11020
12653
  },
11021
12654
  {
11022
- "name": "--page",
11023
- "description": "Page number",
12655
+ "name": "--priority",
12656
+ "description": "Priority code, label or id (e.g. medium, High) — default: medium",
11024
12657
  "arguments": [
11025
12658
  {
11026
- "name": "PAGE",
12659
+ "name": "PRIORITY",
11027
12660
  "required": true
11028
12661
  }
11029
12662
  ]
11030
12663
  }
11031
12664
  ],
11032
- "examples": [
11033
- "closeyourit vulnerabilities list",
11034
- "closeyourit vulnerabilities list --severity critical",
11035
- "closeyourit vulnerabilities list --project acme-api --status open",
11036
- "closeyourit vulnerabilities list --package nokogiri --json"
11037
- ]
11038
- },
11039
- {
11040
- "name": "promote",
11041
- "description": "Open a ticket from a vulnerability (automatic promotion only fires on high/critical)",
11042
- "aliases": [
11043
- "vulns:promote"
11044
- ],
11045
12665
  "arguments": [
11046
12666
  {
11047
- "name": "ID",
12667
+ "name": "ACTION",
11048
12668
  "required": true,
11049
- "description": "Vulnerability finding id"
12669
+ "description": "Workload action id"
11050
12670
  }
11051
12671
  ],
11052
12672
  "examples": [
11053
- "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"
11054
12675
  ]
11055
12676
  },
11056
12677
  {
11057
- "name": "reopen",
11058
- "description": "Reopen an ignored vulnerability: you changed your mind",
11059
- "aliases": [
11060
- "vulns:reopen"
11061
- ],
12678
+ "name": "show",
12679
+ "description": "Show one workload action (an action of another team answers 404, never 403)",
11062
12680
  "arguments": [
11063
12681
  {
11064
12682
  "name": "ID",
11065
12683
  "required": true,
11066
- "description": "Vulnerability finding id"
12684
+ "description": "Workload action id"
11067
12685
  }
11068
12686
  ],
11069
12687
  "examples": [
11070
- "closeyourit vulnerabilities reopen <finding-id>"
12688
+ "closeyourit workload show <action-id>"
11071
12689
  ]
11072
12690
  },
11073
12691
  {
11074
- "name": "rescan",
11075
- "description": "Rescan a project now, without waiting for the nightly run",
11076
- "aliases": [
11077
- "vulns:rescan"
11078
- ],
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.",
11079
12694
  "options": [
11080
12695
  {
11081
- "name": "--project",
11082
- "aliases": [
11083
- "-p"
11084
- ],
11085
- "description": "Project id (UUID) or key",
11086
- "required": true,
12696
+ "name": "--title",
12697
+ "description": "New title",
11087
12698
  "arguments": [
11088
12699
  {
11089
- "name": "PROJECT",
12700
+ "name": "TITLE",
11090
12701
  "required": true
11091
12702
  }
11092
12703
  ]
11093
- }
11094
- ],
11095
- "examples": [
11096
- "closeyourit vulnerabilities rescan --project acme-api"
11097
- ]
11098
- },
11099
- {
11100
- "name": "runtimes",
11101
- "description": "List the support state of the declared runtimes (Ruby, Node, Flutter…)",
11102
- "aliases": [
11103
- "vulns:runtimes"
11104
- ],
11105
- "options": [
12704
+ },
11106
12705
  {
11107
- "name": "--project",
11108
- "aliases": [
11109
- "-p"
11110
- ],
11111
- "description": "Filter by project id (UUID) or key",
12706
+ "name": "--description",
12707
+ "description": "What the activity is about (free text)",
11112
12708
  "arguments": [
11113
12709
  {
11114
- "name": "PROJECT",
12710
+ "name": "DESCRIPTION",
11115
12711
  "required": true
11116
12712
  }
11117
12713
  ]
11118
12714
  },
11119
12715
  {
11120
- "name": "--page",
11121
- "description": "Page number",
12716
+ "name": "--status",
12717
+ "description": "Status (planned, in_progress, done, cancelled)",
11122
12718
  "arguments": [
11123
12719
  {
11124
- "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",
11125
12757
  "required": true
11126
12758
  }
11127
12759
  ]
11128
12760
  }
11129
12761
  ],
11130
- "examples": [
11131
- "closeyourit vulnerabilities runtimes",
11132
- "closeyourit vulnerabilities runtimes --project acme-api --json"
11133
- ]
11134
- },
11135
- {
11136
- "name": "show",
11137
- "description": "Show a single vulnerability: advisory, package, manifest and the fixing version",
11138
- "aliases": [
11139
- "vulns:show"
11140
- ],
11141
12762
  "arguments": [
11142
12763
  {
11143
12764
  "name": "ID",
11144
12765
  "required": true,
11145
- "description": "Vulnerability finding id"
12766
+ "description": "Workload action id"
11146
12767
  }
11147
12768
  ],
11148
12769
  "examples": [
11149
- "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 \"\""
11150
12773
  ]
11151
12774
  }
11152
12775
  ]
11153
- },
11154
- {
11155
- "name": "whoami",
11156
- "description": "Show the authenticated account, organization, token prefix and permissions",
11157
- "examples": [
11158
- "closeyourit whoami",
11159
- "closeyourit whoami --json"
11160
- ]
11161
12776
  }
11162
12777
  ]
11163
12778
  }