@seliseblocks/cli-os 0.1.4 → 0.1.5

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 (389) hide show
  1. package/AI_USAGE_GUIDE.md +328 -58
  2. package/README.md +83 -46
  3. package/dist/commands/auth/client-credentials/delete.d.ts +1 -0
  4. package/dist/commands/auth/client-credentials/delete.js +23 -0
  5. package/dist/commands/auth/client-credentials/list.d.ts +1 -0
  6. package/dist/commands/auth/client-credentials/list.js +14 -0
  7. package/dist/commands/auth/client-credentials/save.d.ts +1 -0
  8. package/dist/commands/auth/client-credentials/save.js +41 -0
  9. package/dist/commands/auth/config/get.d.ts +1 -0
  10. package/dist/commands/auth/config/get.js +14 -0
  11. package/dist/commands/auth/config/save.d.ts +1 -0
  12. package/dist/commands/auth/config/save.js +37 -0
  13. package/dist/commands/auth/idp/create.d.ts +1 -0
  14. package/dist/commands/auth/idp/create.js +46 -0
  15. package/dist/commands/auth/idp/delete.d.ts +1 -0
  16. package/dist/commands/auth/idp/delete.js +23 -0
  17. package/dist/commands/auth/idp/get.d.ts +1 -0
  18. package/dist/commands/auth/idp/get.js +16 -0
  19. package/dist/commands/auth/idp/list.d.ts +1 -0
  20. package/dist/commands/auth/idp/list.js +14 -0
  21. package/dist/commands/auth/idp/status.d.ts +1 -0
  22. package/dist/commands/auth/idp/status.js +27 -0
  23. package/dist/commands/auth/idp/update.d.ts +7 -0
  24. package/dist/commands/auth/idp/update.js +45 -0
  25. package/dist/commands/auth/oidc-clients/delete.d.ts +1 -0
  26. package/dist/commands/auth/oidc-clients/delete.js +23 -0
  27. package/dist/commands/auth/oidc-clients/get.d.ts +1 -0
  28. package/dist/commands/auth/oidc-clients/get.js +16 -0
  29. package/dist/commands/auth/oidc-clients/list.d.ts +1 -0
  30. package/dist/commands/auth/oidc-clients/list.js +14 -0
  31. package/dist/commands/auth/oidc-clients/rotate-secret.d.ts +1 -0
  32. package/dist/commands/auth/oidc-clients/rotate-secret.js +23 -0
  33. package/dist/commands/auth/oidc-clients/save.d.ts +2 -0
  34. package/dist/commands/auth/oidc-clients/save.js +57 -0
  35. package/dist/commands/auth/refresh.js +1 -1
  36. package/dist/commands/data/config/create.d.ts +1 -0
  37. package/dist/commands/data/config/create.js +38 -0
  38. package/dist/commands/data/config/get.d.ts +1 -0
  39. package/dist/commands/data/config/get.js +14 -0
  40. package/dist/commands/data/config/update.d.ts +1 -0
  41. package/dist/commands/data/config/update.js +41 -0
  42. package/dist/commands/data/files/create-folder.d.ts +1 -0
  43. package/dist/commands/data/files/create-folder.js +34 -0
  44. package/dist/commands/data/files/delete-folder.d.ts +1 -0
  45. package/dist/commands/data/files/delete-folder.js +25 -0
  46. package/dist/commands/data/files/delete.d.ts +1 -0
  47. package/dist/commands/data/files/delete.js +28 -0
  48. package/dist/commands/data/files/dms-list.d.ts +1 -0
  49. package/dist/commands/data/files/dms-list.js +27 -0
  50. package/dist/commands/data/files/dms-upload.d.ts +6 -0
  51. package/dist/commands/data/files/dms-upload.js +41 -0
  52. package/dist/commands/data/files/get-many.d.ts +1 -0
  53. package/dist/commands/data/files/get-many.js +24 -0
  54. package/dist/commands/data/files/get.d.ts +1 -0
  55. package/dist/commands/data/files/get.js +21 -0
  56. package/dist/commands/data/files/info.d.ts +1 -0
  57. package/dist/commands/data/files/info.js +30 -0
  58. package/dist/commands/data/files/presigned-upload-url.d.ts +6 -0
  59. package/dist/commands/data/files/presigned-upload-url.js +34 -0
  60. package/dist/commands/data/files/update-additional-info.d.ts +1 -0
  61. package/dist/commands/data/files/update-additional-info.js +26 -0
  62. package/dist/commands/data/files/upload-to-local-storage.d.ts +5 -0
  63. package/dist/commands/data/files/upload-to-local-storage.js +55 -0
  64. package/dist/commands/data/files/upload-to-url.d.ts +8 -0
  65. package/dist/commands/data/files/upload-to-url.js +36 -0
  66. package/dist/commands/data/files/upload.d.ts +7 -0
  67. package/dist/commands/data/files/upload.js +145 -0
  68. package/dist/commands/data/rules/policy/delete.d.ts +1 -0
  69. package/dist/commands/data/rules/policy/delete.js +24 -0
  70. package/dist/commands/data/rules/policy/get.d.ts +1 -0
  71. package/dist/commands/data/rules/policy/get.js +17 -0
  72. package/dist/commands/data/schema/aggregation.d.ts +1 -0
  73. package/dist/commands/data/schema/aggregation.js +26 -0
  74. package/dist/commands/data/schema/change-logs.d.ts +1 -0
  75. package/dist/commands/data/schema/change-logs.js +14 -0
  76. package/dist/commands/data/schema/delete.d.ts +1 -0
  77. package/dist/commands/data/schema/delete.js +24 -0
  78. package/dist/commands/data/schema/fields.d.ts +5 -0
  79. package/dist/commands/data/schema/fields.js +39 -0
  80. package/dist/commands/data/schema/get-by-name.d.ts +1 -0
  81. package/dist/commands/data/schema/get-by-name.js +17 -0
  82. package/dist/commands/data/schema/get.d.ts +1 -0
  83. package/dist/commands/data/schema/get.js +17 -0
  84. package/dist/commands/data/schema/info/list.d.ts +1 -0
  85. package/dist/commands/data/schema/info/list.js +15 -0
  86. package/dist/commands/data/schema/info/save.d.ts +1 -0
  87. package/dist/commands/data/schema/info/save.js +34 -0
  88. package/dist/commands/data/schema/info/update.d.ts +1 -0
  89. package/dist/commands/data/schema/info/update.js +35 -0
  90. package/dist/commands/data/sync.d.ts +7 -0
  91. package/dist/commands/data/sync.js +46 -0
  92. package/dist/commands/data/validation/by-schema-field.d.ts +1 -0
  93. package/dist/commands/data/validation/by-schema-field.js +18 -0
  94. package/dist/commands/data/validation/by-schema.d.ts +1 -0
  95. package/dist/commands/data/validation/by-schema.js +17 -0
  96. package/dist/commands/data/validation/delete.d.ts +1 -0
  97. package/dist/commands/data/validation/delete.js +24 -0
  98. package/dist/commands/data/validation/get.d.ts +1 -0
  99. package/dist/commands/data/validation/get.js +17 -0
  100. package/dist/commands/data/validation/list.d.ts +1 -0
  101. package/dist/commands/data/validation/list.js +25 -0
  102. package/dist/commands/data/validation/save.d.ts +6 -0
  103. package/dist/commands/data/validation/save.js +44 -0
  104. package/dist/commands/deselect.js +1 -1
  105. package/dist/commands/iam/email/available.d.ts +1 -0
  106. package/dist/commands/iam/email/available.js +17 -0
  107. package/dist/commands/iam/organizations/config-get.d.ts +1 -0
  108. package/dist/commands/iam/organizations/config-get.js +14 -0
  109. package/dist/commands/iam/organizations/config-save.d.ts +1 -0
  110. package/dist/commands/iam/organizations/config-save.js +34 -0
  111. package/dist/commands/iam/organizations/create.d.ts +1 -0
  112. package/dist/commands/iam/organizations/create.js +37 -0
  113. package/dist/commands/iam/organizations/get.d.ts +1 -0
  114. package/dist/commands/iam/organizations/get.js +16 -0
  115. package/dist/commands/iam/organizations/list.d.ts +1 -0
  116. package/dist/commands/iam/organizations/list.js +26 -0
  117. package/dist/commands/iam/organizations/my.d.ts +1 -0
  118. package/dist/commands/iam/organizations/my.js +14 -0
  119. package/dist/commands/iam/organizations/update.d.ts +1 -0
  120. package/dist/commands/iam/organizations/update.js +39 -0
  121. package/dist/commands/iam/permissions/by-severity.d.ts +1 -0
  122. package/dist/commands/iam/permissions/by-severity.js +14 -0
  123. package/dist/commands/iam/permissions/create.d.ts +1 -0
  124. package/dist/commands/iam/permissions/create.js +39 -0
  125. package/dist/commands/iam/permissions/get.d.ts +1 -0
  126. package/dist/commands/iam/permissions/get.js +16 -0
  127. package/dist/commands/iam/permissions/list.d.ts +1 -0
  128. package/dist/commands/iam/permissions/list.js +41 -0
  129. package/dist/commands/iam/permissions/update.d.ts +1 -0
  130. package/dist/commands/iam/permissions/update.js +40 -0
  131. package/dist/commands/iam/resources/features.d.ts +1 -0
  132. package/dist/commands/iam/resources/features.js +19 -0
  133. package/dist/commands/iam/resources/groups.d.ts +1 -0
  134. package/dist/commands/iam/resources/groups.js +14 -0
  135. package/dist/commands/iam/roles/assign-permissions.d.ts +1 -0
  136. package/dist/commands/iam/roles/assign-permissions.js +33 -0
  137. package/dist/commands/iam/roles/assignable.d.ts +1 -0
  138. package/dist/commands/iam/roles/assignable.js +14 -0
  139. package/dist/commands/iam/roles/create.d.ts +1 -0
  140. package/dist/commands/iam/roles/create.js +35 -0
  141. package/dist/commands/iam/roles/get.d.ts +1 -0
  142. package/dist/commands/iam/roles/get.js +16 -0
  143. package/dist/commands/iam/roles/list.d.ts +1 -0
  144. package/dist/commands/iam/roles/list.js +34 -0
  145. package/dist/commands/iam/roles/update.d.ts +1 -0
  146. package/dist/commands/iam/roles/update.js +35 -0
  147. package/dist/commands/iam/signup-settings/get.d.ts +1 -0
  148. package/dist/commands/iam/signup-settings/get.js +14 -0
  149. package/dist/commands/iam/signup-settings/save.d.ts +1 -0
  150. package/dist/commands/iam/signup-settings/save.js +32 -0
  151. package/dist/commands/iam/users/access-grant.d.ts +1 -0
  152. package/dist/commands/iam/users/access-grant.js +32 -0
  153. package/dist/commands/iam/users/access-revoke.d.ts +1 -0
  154. package/dist/commands/iam/users/access-revoke.js +24 -0
  155. package/dist/commands/iam/users/activate.d.ts +1 -0
  156. package/dist/commands/iam/users/activate.js +24 -0
  157. package/dist/commands/iam/users/create.d.ts +1 -0
  158. package/dist/commands/iam/users/create.js +39 -0
  159. package/dist/commands/iam/users/deactivate.d.ts +1 -0
  160. package/dist/commands/iam/users/deactivate.js +24 -0
  161. package/dist/commands/iam/users/exists.d.ts +1 -0
  162. package/dist/commands/iam/users/exists.js +17 -0
  163. package/dist/commands/iam/users/get.d.ts +1 -0
  164. package/dist/commands/iam/users/get.js +17 -0
  165. package/dist/commands/iam/users/list.d.ts +1 -0
  166. package/dist/commands/iam/users/list.js +34 -0
  167. package/dist/commands/iam/users/update.d.ts +1 -0
  168. package/dist/commands/iam/users/update.js +35 -0
  169. package/dist/commands/init.js +0 -12
  170. package/dist/commands/localization/assistant/translation-suggestion.d.ts +1 -0
  171. package/dist/commands/localization/assistant/translation-suggestion.js +35 -0
  172. package/dist/commands/localization/config/get-webhook.d.ts +1 -0
  173. package/dist/commands/localization/config/get-webhook.js +14 -0
  174. package/dist/commands/localization/config/save-webhook.d.ts +1 -0
  175. package/dist/commands/localization/config/save-webhook.js +47 -0
  176. package/dist/commands/localization/glossary/delete.d.ts +1 -0
  177. package/dist/commands/localization/glossary/delete.js +24 -0
  178. package/dist/commands/localization/glossary/get.d.ts +1 -0
  179. package/dist/commands/localization/glossary/get.js +17 -0
  180. package/dist/commands/localization/glossary/list.d.ts +1 -0
  181. package/dist/commands/localization/glossary/list.js +22 -0
  182. package/dist/commands/localization/glossary/save.d.ts +1 -0
  183. package/dist/commands/localization/glossary/save.js +38 -0
  184. package/dist/commands/localization/glossary/suggested.d.ts +1 -0
  185. package/dist/commands/localization/glossary/suggested.js +20 -0
  186. package/dist/commands/localization/key/delete-keys.d.ts +1 -0
  187. package/dist/commands/localization/key/delete-keys.js +28 -0
  188. package/dist/commands/localization/key/delete.d.ts +1 -0
  189. package/dist/commands/localization/key/delete.js +24 -0
  190. package/dist/commands/localization/key/generate-uilm-file.d.ts +1 -0
  191. package/dist/commands/localization/key/generate-uilm-file.js +29 -0
  192. package/dist/commands/localization/key/get-by-names.d.ts +1 -0
  193. package/dist/commands/localization/key/get-by-names.js +24 -0
  194. package/dist/commands/localization/key/get-language-file-generation-history.d.ts +1 -0
  195. package/dist/commands/localization/key/get-language-file-generation-history.js +19 -0
  196. package/dist/commands/localization/key/get-localization-timeline.d.ts +1 -0
  197. package/dist/commands/localization/key/get-localization-timeline.js +28 -0
  198. package/dist/commands/localization/key/get-timeline-by-operation-id.d.ts +1 -0
  199. package/dist/commands/localization/key/get-timeline-by-operation-id.js +21 -0
  200. package/dist/commands/localization/key/get-timeline.d.ts +1 -0
  201. package/dist/commands/localization/key/get-timeline.js +25 -0
  202. package/dist/commands/localization/key/get-uilm-exported-files.d.ts +1 -0
  203. package/dist/commands/localization/key/get-uilm-exported-files.js +22 -0
  204. package/dist/commands/localization/key/get-uilm-file.d.ts +1 -0
  205. package/dist/commands/localization/key/get-uilm-file.js +18 -0
  206. package/dist/commands/localization/key/get.d.ts +1 -0
  207. package/dist/commands/localization/key/get.js +17 -0
  208. package/dist/commands/localization/key/list.d.ts +1 -0
  209. package/dist/commands/localization/key/list.js +39 -0
  210. package/dist/commands/localization/key/rollback.d.ts +1 -0
  211. package/dist/commands/localization/key/rollback.js +24 -0
  212. package/dist/commands/localization/key/save.d.ts +1 -0
  213. package/dist/commands/localization/key/save.js +44 -0
  214. package/dist/commands/localization/key/translate-all.d.ts +1 -0
  215. package/dist/commands/localization/key/translate-all.js +30 -0
  216. package/dist/commands/localization/key/translate-and-export.d.ts +7 -0
  217. package/dist/commands/localization/key/translate-and-export.js +132 -0
  218. package/dist/commands/localization/key/translate-key.d.ts +1 -0
  219. package/dist/commands/localization/key/translate-key.js +27 -0
  220. package/dist/commands/localization/key/translate-keys.d.ts +1 -0
  221. package/dist/commands/localization/key/translate-keys.js +31 -0
  222. package/dist/commands/localization/key/uilm-export.d.ts +1 -0
  223. package/dist/commands/localization/key/uilm-export.js +33 -0
  224. package/dist/commands/localization/key/uilm-import.d.ts +1 -0
  225. package/dist/commands/localization/key/uilm-import.js +26 -0
  226. package/dist/commands/localization/language/delete.d.ts +1 -0
  227. package/dist/commands/localization/language/delete.js +24 -0
  228. package/dist/commands/localization/language/list-for-tenant.d.ts +1 -0
  229. package/dist/commands/localization/language/list-for-tenant.js +14 -0
  230. package/dist/commands/localization/language/list.d.ts +1 -0
  231. package/dist/commands/localization/language/list.js +14 -0
  232. package/dist/commands/localization/language/save.d.ts +1 -0
  233. package/dist/commands/localization/language/save.js +36 -0
  234. package/dist/commands/localization/language/set-default.d.ts +1 -0
  235. package/dist/commands/localization/language/set-default.js +24 -0
  236. package/dist/commands/localization/module/list-for-tenant.d.ts +1 -0
  237. package/dist/commands/localization/module/list-for-tenant.js +14 -0
  238. package/dist/commands/localization/module/list.d.ts +1 -0
  239. package/dist/commands/localization/module/list.js +14 -0
  240. package/dist/commands/localization/module/save.d.ts +1 -0
  241. package/dist/commands/localization/module/save.js +32 -0
  242. package/dist/commands/localization/module/tag-glossary.d.ts +1 -0
  243. package/dist/commands/localization/module/tag-glossary.js +28 -0
  244. package/dist/commands/mail/config/delete.d.ts +1 -0
  245. package/dist/commands/mail/config/delete.js +24 -0
  246. package/dist/commands/mail/config/duplicate.d.ts +1 -0
  247. package/dist/commands/mail/config/duplicate.js +24 -0
  248. package/dist/commands/mail/config/get.d.ts +1 -0
  249. package/dist/commands/mail/config/get.js +17 -0
  250. package/dist/commands/mail/config/list.d.ts +1 -0
  251. package/dist/commands/mail/config/list.js +14 -0
  252. package/dist/commands/mail/config/save.d.ts +1 -0
  253. package/dist/commands/mail/config/save.js +44 -0
  254. package/dist/commands/mail/mailbox/get.d.ts +1 -0
  255. package/dist/commands/mail/mailbox/get.js +17 -0
  256. package/dist/commands/mail/mailbox/list.d.ts +1 -0
  257. package/dist/commands/mail/mailbox/list.js +24 -0
  258. package/dist/commands/mail/send.d.ts +1 -0
  259. package/dist/commands/mail/send.js +40 -0
  260. package/dist/commands/mail/sendtoany.d.ts +1 -0
  261. package/dist/commands/mail/sendtoany.js +41 -0
  262. package/dist/commands/mail/template/clone.d.ts +1 -0
  263. package/dist/commands/mail/template/clone.js +33 -0
  264. package/dist/commands/mail/template/delete.d.ts +1 -0
  265. package/dist/commands/mail/template/delete.js +24 -0
  266. package/dist/commands/mail/template/get.d.ts +1 -0
  267. package/dist/commands/mail/template/get.js +17 -0
  268. package/dist/commands/mail/template/list.d.ts +1 -0
  269. package/dist/commands/mail/template/list.js +24 -0
  270. package/dist/commands/mail/template/save.d.ts +1 -0
  271. package/dist/commands/mail/template/save.js +37 -0
  272. package/dist/commands/mfa/backup-codes/generate.d.ts +1 -0
  273. package/dist/commands/mfa/backup-codes/generate.js +22 -0
  274. package/dist/commands/mfa/backup-codes/list.d.ts +1 -0
  275. package/dist/commands/mfa/backup-codes/list.js +14 -0
  276. package/dist/commands/mfa/backup-codes/use.d.ts +1 -0
  277. package/dist/commands/mfa/backup-codes/use.js +18 -0
  278. package/dist/commands/mfa/config-get.d.ts +1 -0
  279. package/dist/commands/mfa/config-get.js +14 -0
  280. package/dist/commands/mfa/config-save.d.ts +1 -0
  281. package/dist/commands/mfa/config-save.js +36 -0
  282. package/dist/commands/mfa/disable.d.ts +1 -0
  283. package/dist/commands/mfa/disable.js +22 -0
  284. package/dist/commands/mfa/generate.d.ts +1 -0
  285. package/dist/commands/mfa/generate.js +22 -0
  286. package/dist/commands/mfa/method-set.d.ts +1 -0
  287. package/dist/commands/mfa/method-set.js +20 -0
  288. package/dist/commands/mfa/resend.d.ts +1 -0
  289. package/dist/commands/mfa/resend.js +20 -0
  290. package/dist/commands/mfa/totp-enable.d.ts +10 -0
  291. package/dist/commands/mfa/totp-enable.js +52 -0
  292. package/dist/commands/mfa/totp-setup.d.ts +1 -0
  293. package/dist/commands/mfa/totp-setup.js +15 -0
  294. package/dist/commands/mfa/totp-verify-setup.d.ts +1 -0
  295. package/dist/commands/mfa/totp-verify-setup.js +17 -0
  296. package/dist/commands/mfa/verify.d.ts +1 -0
  297. package/dist/commands/mfa/verify.js +26 -0
  298. package/dist/commands/new/web.js +115 -15
  299. package/dist/commands/notification/delete.d.ts +1 -0
  300. package/dist/commands/notification/delete.js +24 -0
  301. package/dist/commands/notification/get.d.ts +1 -0
  302. package/dist/commands/notification/get.js +17 -0
  303. package/dist/commands/notification/list.d.ts +1 -0
  304. package/dist/commands/notification/list.js +22 -0
  305. package/dist/commands/notification/save.d.ts +1 -0
  306. package/dist/commands/notification/save.js +34 -0
  307. package/dist/commands/notifier/list.d.ts +1 -0
  308. package/dist/commands/notifier/list.js +23 -0
  309. package/dist/commands/notifier/mark-all-read.d.ts +1 -0
  310. package/dist/commands/notifier/mark-all-read.js +23 -0
  311. package/dist/commands/notifier/mark-read.d.ts +1 -0
  312. package/dist/commands/notifier/mark-read.js +24 -0
  313. package/dist/commands/notifier/notify.d.ts +1 -0
  314. package/dist/commands/notifier/notify.js +39 -0
  315. package/dist/commands/notifier/unread.d.ts +1 -0
  316. package/dist/commands/notifier/unread.js +25 -0
  317. package/dist/commands/projects/get.js +16 -14
  318. package/dist/commands/projects/list.js +2 -7
  319. package/dist/commands/release/builds/list.js +21 -3
  320. package/dist/commands/release/deploy.js +121 -30
  321. package/dist/commands/sdk/client.d.ts +1 -0
  322. package/dist/commands/sdk/client.js +99 -0
  323. package/dist/commands/secrets/get.d.ts +1 -0
  324. package/dist/commands/secrets/get.js +21 -0
  325. package/dist/commands/secrets/save.d.ts +1 -0
  326. package/dist/commands/secrets/save.js +51 -0
  327. package/dist/commands/skill/add.d.ts +1 -0
  328. package/dist/commands/skill/add.js +19 -0
  329. package/dist/commands/skill/list.d.ts +1 -0
  330. package/dist/commands/skill/list.js +15 -0
  331. package/dist/commands/skill/show.d.ts +1 -0
  332. package/dist/commands/skill/show.js +15 -0
  333. package/dist/commands/storage/config/delete.d.ts +1 -0
  334. package/dist/commands/storage/config/delete.js +24 -0
  335. package/dist/commands/storage/config/get.d.ts +1 -0
  336. package/dist/commands/storage/config/get.js +17 -0
  337. package/dist/commands/storage/config/list.d.ts +1 -0
  338. package/dist/commands/storage/config/list.js +14 -0
  339. package/dist/commands/storage/config/save.d.ts +1 -0
  340. package/dist/commands/storage/config/save.js +49 -0
  341. package/dist/index.js +950 -152
  342. package/dist/lib/api.d.ts +1 -1
  343. package/dist/lib/api.js +39 -21
  344. package/dist/lib/args.d.ts +3 -0
  345. package/dist/lib/args.js +15 -0
  346. package/dist/lib/auth.d.ts +5 -2
  347. package/dist/lib/auth.js +23 -35
  348. package/dist/lib/config.js +7 -7
  349. package/dist/lib/json-flag.d.ts +17 -0
  350. package/dist/lib/json-flag.js +55 -0
  351. package/dist/lib/project-info.d.ts +33 -0
  352. package/dist/lib/project-info.js +39 -0
  353. package/dist/lib/prompt.d.ts +2 -0
  354. package/dist/lib/prompt.js +28 -0
  355. package/dist/lib/scaffold-web/dashboard.js +1 -1
  356. package/dist/lib/scaffold-web/root-files.js +1 -1
  357. package/dist/lib/secret-store.js +7 -7
  358. package/dist/lib/skills.d.ts +17 -0
  359. package/dist/lib/skills.js +69 -0
  360. package/dist/lib/token.d.ts +2 -0
  361. package/dist/lib/token.js +12 -0
  362. package/dist/lib/workspace.d.ts +0 -4
  363. package/dist/lib/workspace.js +1 -2
  364. package/dist/skills/blocks-data-gateway-configuration/SKILL.md +204 -0
  365. package/dist/skills/blocks-data-gateway-crud/SKILL.md +223 -0
  366. package/dist/skills/blocks-data-storage/SKILL.md +161 -0
  367. package/dist/skills/blocks-frontend-local-https/SKILL.md +100 -0
  368. package/dist/skills/blocks-iam-access-control/SKILL.md +49 -0
  369. package/dist/skills/blocks-iam-access-control/flows/feature-gating.md +38 -0
  370. package/dist/skills/blocks-iam-access-control/flows/manage-roles-permissions.md +109 -0
  371. package/dist/skills/blocks-iam-account/SKILL.md +169 -0
  372. package/dist/skills/blocks-iam-mfa/SKILL.md +124 -0
  373. package/dist/skills/blocks-iam-organizations/SKILL.md +43 -0
  374. package/dist/skills/blocks-iam-organizations/flows/admin-mutations.md +89 -0
  375. package/dist/skills/blocks-iam-organizations/flows/read-and-switch.md +57 -0
  376. package/dist/skills/blocks-iam-sso-oidc-configuration/SKILL.md +89 -0
  377. package/dist/skills/blocks-iam-sso-oidc-implementation/SKILL.md +80 -0
  378. package/dist/skills/blocks-iam-users/SKILL.md +131 -0
  379. package/dist/skills/blocks-localization-configuration/SKILL.md +149 -0
  380. package/dist/skills/blocks-localization-implementation/SKILL.md +63 -0
  381. package/dist/skills/blocks-mail/SKILL.md +95 -0
  382. package/dist/skills/blocks-notification/SKILL.md +69 -0
  383. package/dist/skills/blocks-notifier/SKILL.md +107 -0
  384. package/dist/skills/blocks-onboarding/SKILL.md +78 -0
  385. package/dist/skills/blocks-release-deployment/SKILL.md +81 -0
  386. package/dist/skills/blocks-secrets/SKILL.md +81 -0
  387. package/dist/skills/blocks-storage-configuration/SKILL.md +93 -0
  388. package/dist/skills/lint.mjs +168 -0
  389. package/package.json +4 -4
package/AI_USAGE_GUIDE.md CHANGED
@@ -1,8 +1,8 @@
1
- # Blocks OS CLI Guide for AI Agents
1
+ # Blocks CLI Guide for AI Agents
2
2
 
3
- This guide is for AI agents using the published `@seliseblocks/cli-os` npm package. The installed binary is `blocks-os`.
3
+ This guide is for AI agents using the published `@seliseblocks/cli-os` npm package. The installed binary is `blocks`.
4
4
 
5
- Use `blocks-os` as the control plane. If a capability exists in the CLI, call the CLI from the terminal instead of calling Blocks cloud APIs directly from ad hoc scripts or generated application code.
5
+ Use `blocks` as the control plane. If a capability exists in the CLI, call the CLI from the terminal instead of calling Blocks cloud APIs directly from ad hoc scripts or generated application code.
6
6
 
7
7
  ## Install
8
8
 
@@ -15,15 +15,28 @@ npm install -g @seliseblocks/cli-os
15
15
  Verify the binary:
16
16
 
17
17
  ```bash
18
- blocks-os --version
19
- blocks-os --help
18
+ blocks --version
19
+ blocks --help
20
20
  ```
21
21
 
22
- For local package development only, contributors may run `node bin/run.js ...` from the source repository. AI agents consuming the npm package should use `blocks-os ...`.
22
+ For local package development only, contributors may run `node bin/run.js ...` from the source repository. AI agents consuming the npm package should use `blocks ...`.
23
+
24
+ ## Global Options
25
+
26
+ Namespaced commands accept either spaces or colons, e.g. `blocks data schema list` and
27
+ `blocks data:schema:list` are equivalent. Global options available on every command:
28
+
29
+ - `--json` - print machine-readable JSON where supported.
30
+ - `--api-url <url>` - override the Blocks API URL for this command.
31
+ - `--account <name>` - use a named account profile; default is implicit.
32
+ - `--project <tenantId>` - use a project tenant for project-scoped commands.
33
+ - `--dry-run` / `--yes` - see Operating Rules below.
34
+
35
+ Use `blocks --help` (no subcommand) as command ground truth for what exists. Do not probe an individual subcommand with `<command> --help` to check its flags - most subcommands don't recognize `--help` as special and just run their real logic with it as a no-op argument (e.g. `login --help` performs an actual login attempt; `new web <name> --help` runs real arg validation). If you need a subcommand's full flag list, read this guide's section for it or infer from `--dry-run`/error output instead.
23
36
 
24
37
  ## Operating Rules
25
38
 
26
- - Use `blocks-os ...` for all supported Blocks OS, IAM, Data, Release, and scaffold operations.
39
+ - Use `blocks ...` for all supported Blocks OS, IAM, Data, Release, and scaffold operations.
27
40
  - Prefer `--json` for automation and parsing.
28
41
  - Use `--dry-run` before any mutating command.
29
42
  - Do not run real mutating cloud commands unless the user explicitly approved the exact action.
@@ -37,28 +50,28 @@ For local package development only, contributors may run `node bin/run.js ...` f
37
50
  Device-code login uses the packaged OS client id. It prints a verification URL and user code, opens the browser to the verification page when possible, then polls until approved:
38
51
 
39
52
  ```bash
40
- blocks-os login
53
+ blocks login
41
54
  ```
42
55
 
43
56
  Check current auth state:
44
57
 
45
58
  ```bash
46
- blocks-os auth:status --json
59
+ blocks auth status --json
47
60
  ```
48
61
 
49
62
  If local auth state is stale or corrupted (Windows profile change, machine migration, Keychain reset), clear local auth state and log in again:
50
63
 
51
64
  ```bash
52
- blocks-os auth:remove <account>
53
- blocks-os login
65
+ blocks auth remove <account>
66
+ blocks login
54
67
  ```
55
68
 
56
- Use `blocks-os logout` to revoke the current refresh token when possible and remove local session data. Use `blocks-os auth:refresh --json` to force account token refresh, and `blocks-os auth:refresh --project --json` after a project session already exists.
69
+ Use `blocks logout` to revoke the current refresh token when possible and remove local session data. Use `blocks auth refresh --json` to force account token refresh, and `blocks auth refresh --project --json` after a project session already exists.
57
70
 
58
71
  Run health checks without mutation:
59
72
 
60
73
  ```bash
61
- blocks-os doctor --json
74
+ blocks doctor --json
62
75
  ```
63
76
 
64
77
  ## Project Workflow
@@ -66,42 +79,60 @@ blocks-os doctor --json
66
79
  List projects:
67
80
 
68
81
  ```bash
69
- blocks-os projects:list --json
82
+ blocks projects list --json
70
83
  ```
71
84
 
72
- Create a project only after explicit user approval:
85
+ `projects create` is currently disabled in this build (commented out pending a product decision) - do not tell users it's available, and do not try to work around its absence with a raw API call. Projects must already exist (created from the Blocks portal) before selecting one below.
86
+
87
+ Select a project:
73
88
 
74
89
  ```bash
75
- blocks-os projects:create <projectName> --env dev --dry-run --json
76
- blocks-os projects:create <projectName> --env dev --yes --json
90
+ blocks use <projectTenantId>
77
91
  ```
78
92
 
79
- Select a project:
93
+ Read the selected project:
80
94
 
81
95
  ```bash
82
- blocks-os use <projectTenantId>
96
+ blocks projects get --json
83
97
  ```
84
98
 
85
- Read the selected project:
99
+ If an impersonated project token has expired or failed and re-running the command doesn't
100
+ recover, clear the selection and reselect to force re-impersonation:
86
101
 
87
102
  ```bash
88
- blocks-os projects:get --json
103
+ blocks deselect
104
+ blocks use <projectTenantId>
89
105
  ```
90
106
 
91
107
  ## Scaffold a Web App
92
108
 
93
- Generate a React/Vite Blocks app:
109
+ Generate a React/Vite Blocks app. All of `--x-blocks-key`, `--app-domain`, and `--client-id` are optional now - they're resolved from the selected project when omitted:
110
+
111
+ ```bash
112
+ blocks use <projectTenantId> # if not already selected
113
+ blocks new web <appName>
114
+ ```
115
+
116
+ This is interactive when a value isn't already known: if the project has more than one registered domain you're prompted to choose; the OIDC client is offered as a pick-list of the project's existing clients, plus "create a new one now" (prompts only for display name + redirect URI, defaulting to `https://<appDomain>/login/callback`) or "skip, register later." Do not fabricate a client id or domain value yourself.
117
+
118
+ **An AI agent running this non-interactively will hang on these prompts** - there's no stdin to answer "Choose 1-3:" from an automated process. Before running `new web`, gather the values yourself and pass them explicitly:
94
119
 
95
120
  ```bash
96
- blocks-os new web <appName> --x-blocks-key <projectTenantId> --app-domain <appDomainOrUrl>
121
+ blocks projects get --json # see the project's domain(s) under project.applications
122
+ blocks auth oidc-clients list --json # see existing OIDC clients, if any
97
123
  ```
98
124
 
99
- If a public browser OIDC client exists for the app, include it:
125
+ Then run with explicit flags so no prompt is reached:
100
126
 
101
127
  ```bash
102
- blocks-os new web <appName> --x-blocks-key <projectTenantId> --app-domain <appDomainOrUrl> --client-id <publicOidcClientId>
128
+ blocks new web <appName> --x-blocks-key <projectTenantId> --app-domain <appDomainOrUrl> --client-id <publicOidcClientId>
103
129
  ```
104
130
 
131
+ `new web` also accepts `--blocks-api-url <url>` and `--oidc-url <url>`, same as `sdk client`
132
+ below. `--blocks-api-url` defaults to `https://api.seliseblocks.com` if omitted - pass a
133
+ different Data/IAM/Localization/OS gateway URL explicitly only if your project uses a
134
+ non-default one. `--oidc-url` defaults to `https://iam.seliseblocks.com`.
135
+
105
136
  Validate the scaffold:
106
137
 
107
138
  ```bash
@@ -124,61 +155,166 @@ For local browser login on the real host domain:
124
155
 
125
156
  The generated cert script uses the `selfsigned` Node dependency, so it works from normal PowerShell after `npm install`; do not tell Windows users to switch to Git Bash just for OpenSSL. If hosted login or secure cookies fail locally, confirm the app is opened with the HTTPS dev URL from `VITE_BLOCKS_DEV_HOST`.
126
157
 
127
- ## IAM
158
+ ## SDK Client (read-only)
128
159
 
129
- The CLI exposes only the current user:
160
+ `sdk client` answers "I want to use the Blocks SDK - show me the client." It resolves this project's `@seliseblocks/client` config (same values `new web` scaffolds an app with) and prints a ready-to-paste `createBlocksClient(...)` snippet - **it never writes a file or mutates anything**. To scaffold a full app instead, use `new web` above.
130
161
 
131
162
  ```bash
132
- blocks-os iam:me --json
163
+ blocks sdk client --x-blocks-key <projectTenantId> --app-domain <appDomainOrUrl> --client-id <publicOidcClientId> --blocks-api-url https://api.seliseblocks.com
133
164
  ```
134
165
 
135
- Do not add IAM admin behavior outside the supported CLI commands unless the CLI package is explicitly extended and tested.
166
+ As with `new web`, `--blocks-api-url` already defaults to `https://api.seliseblocks.com`; only pass it explicitly if your project uses a different gateway URL. Passing both `--app-domain` and `--client-id` skips the project lookup entirely, so it needs no CLI login at all - useful for a quick, non-interactive check. Omit either one and it resolves from the selected project instead (auto-picks when there's exactly one match, otherwise lists the options and asks you to pass the flag explicitly - it does not prompt or create anything, since this command is read-only). Use `--json` for the resolved values instead of the snippet.
167
+
168
+ ## Skills
169
+
170
+ `skill list [--json]` / `skill show <name> [--json]` / `skill add <name> [--dir <path>]` read this package's bundled copy of `blocks-skills/*/SKILL.md` - local-only, no cloud calls. `skill add` copies a skill's **entire directory** (`SKILL.md` plus any supporting files, e.g. `flows/*.md`) into `<dir>/<name>/` (default `./blocks-skills`) in the current directory, for pulling a single skill into a project outside this monorepo. `skill list`'s human-readable output (and the "unknown skill" error from `show`/`add`) both point at the full public skill catalog, in case the locally bundled set is out of date. As with any skill file, verify command names against this guide or `blocks --help` before running them - skills are conversational context, not command ground truth.
171
+
172
+ ## IAM, MFA, and Auth Admin
173
+
174
+ `iam me` reads the CLI operator's own account identity (bootstrapping, not a project resource):
175
+
176
+ ```bash
177
+ blocks iam me --json
178
+ ```
179
+
180
+ Every other command below is project-scoped: it requires a project already selected (`blocks use <tenantId>`) and always calls IAM through an impersonated project token - never the account token, and never something you construct yourself. If no project is selected, the command fails with `project_not_selected`; run `blocks use <tenantId>` first (see Agent Failure Handling).
181
+
182
+ Command families (run `blocks --help` for the full flag reference on each):
183
+
184
+ - `iam users *`, `iam email available` - list/get/create/update/activate/deactivate, access grant/revoke, existence and email-availability checks.
185
+ - `iam roles *` - list/get/create/update, assign-permissions, assignable.
186
+ - `iam permissions *` - list/get/create/update, by-severity.
187
+ - `iam resources *` - resource groups and feature flags (read-only).
188
+ - `iam organizations *` - list/get/create/update, `my`, and organization config get/save.
189
+ - `iam signup-settings *` - get/save tenant signup policy.
190
+ - `mfa config *`, `mfa totp *`, `mfa generate`/`resend`/`verify`, `mfa method set`, `mfa disable`, `mfa backup-codes *` - tenant MFA policy plus enrollment/verification/backup-code flows.
191
+ - `mfa totp enable --mfa-type <n>` - composed TOTP enrollment: `totp setup` → prints the QR/secret → `totp verify-setup` → `method set` → `backup-codes generate`, one confirmation. Prefer this over running the individual steps. `--mfa-type` is required and not defaulted - the tenant-specific integer meaning "TOTP" isn't documented anywhere in this CLI; don't guess it, ask the user or check `mfa config get`. **Prompts interactively for the verification code unless `--code <c>` is given** - an agent running this non-interactively must supply `--code` (from wherever the user's authenticator app output is captured) or it will hang waiting on stdin. Deliberately excludes `mfa config save` (a separate tenant-wide admin policy, not part of one user's enrollment).
192
+ - `auth idp *` - identity provider (SSO/OIDC) configuration: list/get/create/update/delete/status.
193
+ - `auth config *` - AuthController tenant config (token lifetimes, lockout policy, etc.).
194
+ - `auth client-credentials *` - machine-to-machine client credentials: list/save/delete.
195
+ - `auth oidc-clients *` - OIDC client app registrations: list/get/save (upsert)/delete/rotate-secret.
196
+
197
+ Rules:
198
+
199
+ - Use `--dry-run` before any mutating command in these families, the same as Data/Localization/Release, then `--yes` only after explicit approval.
200
+ - Rich payloads (identity provider config, OIDC client config, user/role/permission create-update bodies, etc.) accept `--body '<json>'` or `--file <path.json>` on top of the documented convenience flags - use whichever is easier for the exact fields you need to set.
201
+ - `auth idp create`/`update`, `auth client-credentials save`, and `auth oidc-clients save`/`rotate-secret` can return a `client_secret` shown only once. Never print, log, commit, or otherwise persist it outside what the user explicitly asked to store; treat that response the same as any other CLI-managed secret.
202
+ - Do not add IAM/MFA/Auth admin behavior outside these supported CLI commands unless the CLI package is explicitly extended and tested.
136
203
 
137
204
  ## Data
138
205
 
206
+ Check the data-source configuration first. Most projects run on Blocks-managed storage by default, so this is usually the only `data config *` command you need:
207
+
208
+ ```bash
209
+ blocks data config get --json
210
+ ```
211
+
212
+ Only create/update a data source configuration after explicit user approval - it points the project's Data Gateway at a different (external) database, which is a deliberate, rare action:
213
+
214
+ ```bash
215
+ blocks data config create --connection-string "<cs>" --database-name "<name>" --dry-run --json
216
+ blocks data config create --connection-string "<cs>" --database-name "<name>" --yes --json
217
+ blocks data config update --item-id <id> --connection-string "<cs>" --dry-run --json
218
+ blocks data config update --item-id <id> --connection-string "<cs>" --yes --json
219
+ ```
220
+
139
221
  Validate local files:
140
222
 
141
223
  ```bash
142
- blocks-os data:validate --json
224
+ blocks data validate --json
143
225
  ```
144
226
 
145
227
  List schemas:
146
228
 
147
229
  ```bash
148
- blocks-os data:schema:list --json
230
+ blocks data schema list --json
149
231
  ```
150
232
 
151
233
  Pull schemas:
152
234
 
153
235
  ```bash
154
- blocks-os data:schema:pull --json
236
+ blocks data schema pull --json
155
237
  ```
156
238
 
157
239
  Push schemas only after dry-run and approval:
158
240
 
159
241
  ```bash
160
- blocks-os data:schema:push --dry-run --json
161
- blocks-os data:schema:push --yes --json
242
+ blocks data schema push --dry-run --json
243
+ blocks data schema push --yes --json
162
244
  ```
163
245
 
164
246
  Pull rules:
165
247
 
166
248
  ```bash
167
- blocks-os data:rules:pull --json
249
+ blocks data rules pull --json
168
250
  ```
169
251
 
170
252
  Deploy rules only after dry-run and approval:
171
253
 
172
254
  ```bash
173
- blocks-os data:rules:deploy --dry-run --json
174
- blocks-os data:rules:deploy --yes --json
255
+ blocks data rules deploy --dry-run --json
256
+ blocks data rules deploy --yes --json
175
257
  ```
176
258
 
177
259
  Reload Data schema configuration only after approval:
178
260
 
179
261
  ```bash
180
- blocks-os data:reload --dry-run --json
181
- blocks-os data:reload --yes --json
262
+ blocks data reload --dry-run --json
263
+ blocks data reload --yes --json
264
+ ```
265
+
266
+ **Prefer `data sync` over running validate/push/deploy/reload separately.** It composes all four (validate → `schema push` → `rules deploy` → `data reload`) behind one confirmation, and it's the only way to guarantee the reload actually happens - nothing else calls it automatically, so schema/rule changes pushed without a following `data reload` can sit staged without going live:
267
+
268
+ ```bash
269
+ blocks data sync --dry-run --json
270
+ blocks data sync --yes --json
271
+ ```
272
+
273
+ It validates first and hard-fails with no API calls made if schemas or the rules file don't parse/validate. It prints 3 separate step outputs (one per underlying command), not one combined JSON document - parse each block in sequence if you need machine-readable results from all three.
274
+
275
+ ### Raw Data API
276
+
277
+ `validate`/`schema list`/`schema pull`/`schema push`/`rules pull`/`rules deploy`/`reload` above cover the common file-oriented workflow. The rest of `/data/v4/*` is exposed directly, project-scoped with an impersonated project token only. Run `blocks --help` for the full flag reference on each; command families:
278
+
279
+ - `data schema get`/`get-by-name`/`aggregation`/`change-logs`/`delete` - single-schema lookup by id or collection name, access-level aggregation summary, unadapted change logs (cleared by `data reload`), and irreversible delete.
280
+ - `data schema info list`/`save`/`update` + `data schema fields` - a two-step alternative to `schema push` (create/update schema metadata, then add/update field definitions separately). Prefer the file-oriented `schema push` workflow for normal authoring; use these only for a targeted metadata or field-only change without touching the local schema JSON.
281
+ - `data rules policy get`/`delete` - read or delete one data-access policy without a full `rules pull`/edit/`rules deploy` round-trip.
282
+ - `data validation list`/`get`/`by-schema`/`by-schema-field`/`save`/`delete` - field-level validation rules. No file-oriented workflow exists for these (no local JSON file to pull/push). `save` is an upsert (omit `--item-id` to create, pass it to update) and requires a `validations` array passed via `--body`/`--file` - there's no scalar flag for it, e.g. `--body '{"validations":[{"type":1,"value":"^[0-9]+$","isActive":true}]}'`.
283
+ - `data files *` - DMS/storage: `get`/`get-many`/`info` (read), `presigned-upload-url` + `upload-to-url` (cloud storage, two calls) or `upload-to-local-storage` (one call, local storage), `update-additional-info`, `delete`, `dms-list`/`dms-upload` (folder browsing / registering an uploaded file into a folder), `create-folder`/`delete-folder`.
284
+
285
+ Same rules as everywhere else: `--dry-run` before any mutating command, then `--yes` only after explicit approval.
286
+
287
+ **`--file` means two different things depending on the command.** Everywhere else in this CLI (`--body '<json>'`/`--file <path.json>`), `--file` is a JSON payload file read by `jsonBodyFlag`. On the `data files *` upload commands (`upload-to-url`, `upload-to-local-storage`), `--file` is instead the local binary file to read and upload - there is no JSON payload involved. Don't conflate the two: passing a JSON path to `data files upload-to-local-storage --file` uploads the JSON text as the file's bytes, it does not set a request body.
288
+
289
+ **Prefer the composed `data files upload` over the manual steps below.** It runs presign → PUT → dms-upload for you (or the one-call local-storage path with `--local-storage`), so the file is both stored and visible in DMS afterward - no copy-pasting `uploadUrl`/`fileId` between commands:
290
+
291
+ ```bash
292
+ blocks data files upload --file ./invoice.pdf --access-modifier Public --dry-run --json
293
+ blocks data files upload --file ./invoice.pdf --access-modifier Public --yes --json
294
+ blocks data files upload --file ./invoice.pdf --local-storage --yes --json # local-storage-backed projects
295
+ ```
296
+
297
+ Manual cloud-storage upload, if you need the intermediate steps for some reason (two calls):
298
+
299
+ ```bash
300
+ blocks data files presigned-upload-url --name invoice.pdf --access-modifier Public --json
301
+ # take the returned uploadUrl and fileId, then:
302
+ blocks data files upload-to-url --url "<uploadUrl>" --file ./invoice.pdf --content-type application/pdf --dry-run --json
303
+ blocks data files upload-to-url --url "<uploadUrl>" --file ./invoice.pdf --content-type application/pdf --yes --json
304
+ ```
305
+
306
+ Manual local-storage upload (one call):
307
+
308
+ ```bash
309
+ blocks data files upload-to-local-storage --file ./invoice.pdf --access-modifier Public --dry-run --json
310
+ blocks data files upload-to-local-storage --file ./invoice.pdf --access-modifier Public --yes --json
311
+ ```
312
+
313
+ Either manual upload path only stores the bytes - it does not make the file appear in a DMS folder. Register it afterward if the user needs that (the composed `data files upload` above already does this step for you):
314
+
315
+ ```bash
316
+ blocks data files dms-upload --file-storage-id <fileId> --artifact-name invoice.pdf --dry-run --json
317
+ blocks data files dms-upload --file-storage-id <fileId> --artifact-name invoice.pdf --yes --json
182
318
  ```
183
319
 
184
320
  ## Localization
@@ -213,54 +349,188 @@ Nested JSON is accepted on input and flattened before validation:
213
349
  Validate first:
214
350
 
215
351
  ```bash
216
- blocks-os localization:validate --module common --language en --json
352
+ blocks localization validate --module common --language en --json
217
353
  ```
218
354
 
219
355
  Push only after dry-run and approval:
220
356
 
221
357
  ```bash
222
- blocks-os localization:push --module common --language en --dry-run --json
223
- blocks-os localization:push --module common --language en --yes --json
358
+ blocks localization push --module common --language en --dry-run --json
359
+ blocks localization push --module common --language en --yes --json
224
360
  ```
225
361
 
226
362
  Pull published cloud localization when local fallback files need to be refreshed:
227
363
 
228
364
  ```bash
229
- blocks-os localization:pull --module common --language en --json
365
+ blocks localization pull --module common --language en --json
230
366
  ```
231
367
 
232
368
  Use Localization gateway v4 paths without `/api`: `/localization/v4/Module/Gets`, `/localization/v4/Module/Save`, `/localization/v4/Key/SaveKeys`, and `/localization/v4/Key/GetCloudUilmFile`.
233
369
 
370
+ ### Raw Localization API
371
+
372
+ `validate`/`push`/`pull` above cover the common i18n file workflow. Every other `/localization/v4/*` endpoint is also exposed directly, project-scoped with an impersonated project token only (never the account token). Run `blocks --help` for the full flag reference on each; command families:
373
+
374
+ - `localization assistant translation-suggestion` - AI translation suggestion for a single string (`--source-text`, `--destination-language`, optional glossary/context flags).
375
+ - `localization config get-webhook`/`save-webhook` - tenant webhook config for localization change notifications.
376
+ - `localization glossary save`/`list`/`get`/`suggested`/`delete` - glossary term CRUD and AI-suggested glossary lookup.
377
+ - `localization key save`/`list`/`get-by-names`/`get`/`delete`/`delete-keys` - key CRUD and search beyond the bulk `push`/`pull` flow.
378
+ - `localization key get-timeline`/`get-localization-timeline`/`get-timeline-by-operation-id`/`rollback` - key/tenant change history and rollback.
379
+ - `localization key get-uilm-file`/`generate-uilm-file`/`uilm-import`/`uilm-export`/`get-uilm-exported-files`/`get-language-file-generation-history` - UILM language-file generation and import/export jobs.
380
+ - `localization key translate-all`/`translate-key`/`translate-keys` - trigger AI machine translation for a module or specific keys.
381
+ - `localization key translate-and-export --module-id <id> [--wait]` - composed: `translate-all` → `generate-uilm-file` → `uilm-export`. Prefer this over running the three by hand. `--wait` polls translation progress first via a self-generated correlation id (translation is async and has no documented "done" field, so this is a best-effort heuristic - it prints the raw response every poll); without `--wait` it just fires all three back to back like running them manually in sequence.
382
+ - `localization language save`/`list`/`list-for-tenant`/`delete`/`set-default` - tenant language catalog management.
383
+ - `localization module save`/`list`/`list-for-tenant`/`tag-glossary` - module CRUD and glossary tagging.
384
+
385
+ Same rules as everywhere else: `--dry-run` before any mutating command, then `--yes` only after explicit approval; rich payloads accept `--body '<json>'`/`--file <path.json>` on top of the documented convenience flags. `localization config save-webhook`'s `--secret` is redacted in `--dry-run` output only - treat the live response as a secret.
386
+
387
+ ## Mail
388
+
389
+ Project-scoped SMTP/inbound mail configuration, templates, and mailbox reads via `/os/v4/Mail/*`:
390
+
391
+ ```bash
392
+ blocks mail config list --json
393
+ blocks mail config get <name> --json
394
+ blocks mail config save --name <n> --host <h> --port <p> --enable-ssl \
395
+ --sender-name <n> --sender-address <addr> --account-password <p> --dry-run --json
396
+ blocks mail config save --configuration-id <id> ... --yes --json # update
397
+ blocks mail config delete <configurationId> --dry-run --json
398
+ blocks mail config duplicate <configurationId> --dry-run --json
399
+
400
+ blocks mail template list --configuration-id <id> --json
401
+ blocks mail template get <itemId> --json
402
+ blocks mail template save --configuration-id <id> --name <n> --language <l> \
403
+ --subject <s> --template-body <html> --dry-run --json
404
+ blocks mail template delete <itemId> --dry-run --json
405
+ blocks mail template clone <itemId> --name <n> --dry-run --json
406
+
407
+ blocks mail mailbox list --configuration-id <id> --json
408
+ blocks mail mailbox get <messageId> --json
409
+ ```
410
+
411
+ Treat `--account-password` as a secret; the CLI redacts it in `--dry-run` output but the live response is still yours to protect.
412
+
413
+ Sending mail is a separate surface, `/logic/v4/Mail/Send` and `/logic/v4/Mail/SendToAny` (not `/os/v4`):
414
+
415
+ ```bash
416
+ blocks mail send --to a@example.com,b@example.com --purpose welcome --language en \
417
+ --subject-data-context '{"firstName":"Ada"}' --dry-run --json
418
+ blocks mail send --to a@example.com --purpose welcome --language en --yes --json
419
+
420
+ blocks mail sendtoany --to a@example.com --purpose welcome --language en \
421
+ --is-test-mail --dry-run --json
422
+ ```
423
+
424
+ `--project-key` defaults to the selected project's tenant id; pass it explicitly only to target a different one. `--attachments`/`--subject-data-context`/`--body-data-context` take raw JSON.
425
+
426
+ ## Notification
427
+
428
+ Project-scoped notification channel configuration via `/os/v4/Notification/*`:
429
+
430
+ ```bash
431
+ blocks notification list --json
432
+ blocks notification get <itemId> --json
433
+ blocks notification save --name <n> --channel <0|1> --type <0-3> --dry-run --json
434
+ blocks notification save --name <n> --channel <0|1> --type <0-3> --update --yes --json
435
+ blocks notification delete <itemId> --dry-run --json
436
+ ```
437
+
438
+ `--channel` and `--type` are raw numeric enum values from the Blocks OS API (`NotifierTypes`, `NotificationReceiverTypes`) — the API does not publish names for them.
439
+
440
+ ## Notifier
441
+
442
+ Real-time/offline notification sends and inbox reads via `/logic/v4/Notifier/*` — distinct from
443
+ `notification` above, which manages channel *configuration*, not sending:
444
+
445
+ ```bash
446
+ blocks notifier notify --user-ids u1,u2 --response-key status --response-value ok --dry-run --json
447
+ blocks notifier notify --roles admin --denormalized-payload '{"orderId":"123"}' \
448
+ --save-denormalized-payload-as-object --yes --json
449
+ blocks notifier notify --subscription-filters '[{"context":"orders","actionName":"created","value":"*"}]' --yes --json
450
+
451
+ blocks notifier list --unread-only --page 1 --page-size 20 --json
452
+ blocks notifier unread --user-id <id> --context orders --action-name created --json
453
+ blocks notifier mark-read <notificationId> --dry-run --json
454
+ blocks notifier mark-all-read --dry-run --json
455
+ ```
456
+
457
+ Target `notify` with at least one of `--user-ids`/`--roles`/`--subscription-filters`. `notifier unread`
458
+ sends its filter as query parameters even though swagger documents that endpoint as GET with a JSON
459
+ body, which the Fetch spec forbids — the CLI and SDK both flatten it into the query string instead.
460
+
461
+ ## Secrets
462
+
463
+ Generic tenant secret storage via `/os/v4/Secrets/*` (e.g. captcha provider config):
464
+
465
+ ```bash
466
+ blocks secrets get captcha --json
467
+ blocks secrets save --secret-key captcha \
468
+ --key-value-pairs '{"isEnable":"true","provider":"recaptcha","captchaKey":"...","captchaSecret":"..."}' \
469
+ --dry-run --json
470
+ blocks secrets save --secret-key captcha --item-id <itemId> --key-value-pairs '{...}' --yes --json
471
+ ```
472
+
473
+ `--key-value-pairs` is a flat JSON object of provider-specific fields — its shape depends entirely on
474
+ `--secret-key` (there's no fixed schema across secrets). `save` is an upsert: omit `--item-id` to
475
+ create, pass it to update. Fields that look like secrets/keys are redacted in `--dry-run` output only.
476
+
477
+ ## Storage
478
+
479
+ Project-scoped storage backend configuration via `/os/v4/Storage/*`:
480
+
481
+ ```bash
482
+ blocks storage config list --json
483
+ blocks storage config get <name> --json
484
+ blocks storage config save --name <n> --strategy <s> --secret-key <k> --access-key <k> --dry-run --json
485
+ blocks storage config save --item-id <id> --update ... --yes --json # update
486
+ blocks storage config delete <name> --dry-run --json
487
+ ```
488
+
489
+ `--secret-key`, `--access-key`, `--password`, and `--connection-string` are secrets; the CLI redacts them in `--dry-run` output only.
490
+
234
491
  ## Release
235
492
 
236
- Trigger a deploy only after dry-run and approval:
493
+ `release deploy` needs no `--repo-id` - it resolves the repo linked to the selected project (`Project/GetAsset`) and that repo's connected branch (`Build/repo-details`) on its own, and refuses to deploy if the connected branch doesn't match the project's environment name. Trigger a deploy only after dry-run and approval:
237
494
 
238
495
  ```bash
239
- blocks-os release:deploy --repo-id <repoId> --dry-run --json
240
- blocks-os release:deploy --repo-id <repoId> --yes --json
496
+ blocks release deploy --dry-run --json
497
+ blocks release deploy --yes --json
498
+ blocks release deploy --domain <customDomain> --yes --json # also sets the custom deployment domain first
499
+ blocks release deploy --yes --wait --json # poll until the build finishes instead of returning the build id
241
500
  ```
242
501
 
502
+ If no repo is linked yet, the command fails with `repo_not_linked` - that requires GitHub OAuth, so it can only be done from the Blocks portal; do not attempt to link a repo from the CLI.
503
+
504
+ `--wait` polls `/release/v4/api/Build` (same data `release status` reads) every `--poll-interval` seconds (default 10) until a terminal-looking state is detected or `--timeout` elapses (default 900s). There's no documented status field/enum for this endpoint, so "terminal" is a best-effort text match (success/fail/complete/cancel/etc. anywhere in the response) - the raw JSON is printed every poll, so verify against that rather than trusting the heuristic blindly. Without `--wait`, `release deploy` returns immediately with just a build id, same as before.
505
+
243
506
  Read build status:
244
507
 
245
508
  ```bash
246
- blocks-os release:status <buildId> --json
247
- blocks-os release:builds:get <buildId> --json
509
+ blocks release status <buildId> --json
510
+ blocks release builds get <buildId> --json
248
511
  ```
249
512
 
250
- List builds for a repository:
513
+ List builds for a repository (repoId is optional now - omit it to resolve from the selected project's linked repo assets, auto-picked if there's exactly one, otherwise interactively prompted, which will hang a non-interactive agent - pass `--repo-id` explicitly if you don't already know there's exactly one):
251
514
 
252
515
  ```bash
253
- blocks-os release:builds:list --repo-id <repoId> --json
516
+ blocks release builds list --repo-id <repoId> --json
254
517
  ```
255
518
 
256
519
  ## Agent Failure Handling
257
520
 
258
- - `not_logged_in`: run `blocks-os login`.
259
- - `refresh_token_rejected`: run `blocks-os login`.
521
+ - `not_logged_in`: run `blocks login`, then `blocks projects list`, then `blocks use <tenantId>`.
522
+ - `refresh_token_rejected`: run `blocks login`.
260
523
  - `refresh_network_error`: check the network and configured OIDC URL, then retry.
261
- - `auth_repair_required`: inspect `blocks-os auth:status --json`; if local storage is unreadable or stale, run `blocks-os auth:remove <account>`, then `blocks-os auth:status --json` and `blocks-os login`.
262
- - `project_not_selected`: run `blocks-os use <projectTenantId>`.
263
- - `api_auth_failed`: run `blocks-os auth:status --json`, then login again.
524
+ - `auth_repair_required`: inspect `blocks auth status --json`; if local storage is unreadable or stale, run `blocks auth remove <account>`, then `blocks auth status --json` and `blocks login`.
525
+ - `project_not_selected`: run `blocks projects list`, then `blocks use <projectTenantId>`.
526
+ - `api_auth_failed`: run `blocks auth status --json`, then login again. If the failure is specifically a stale/expired impersonated project token rather than the account token, `blocks deselect` followed by `blocks use <tenantId>` re-impersonates without a full re-login.
527
+ - `repo_not_linked` (from `release deploy`): no repo is linked to this project. This needs GitHub OAuth - tell the user to link it from the Blocks portal, do not retry from the CLI.
528
+ - `repo_ambiguous` (from `release deploy`): multiple repos are linked and none is named for the current environment. Tell the user to check the project's repo links in the portal.
529
+ - `repo_not_found` (from `release deploy`): the linked asset's repo id doesn't exist in blocks-release. Tell the user to check the project's repo link in the portal.
530
+ - `branch_environment_mismatch` (from `release deploy`): the connected repo's branch doesn't match this environment's name. The message states the branch found and the environment required - do not retry; the repo's connected branch must be fixed first.
531
+ - `build_wait_timeout` (from `release deploy --wait`): the build didn't reach a detected terminal state within `--timeout`. The deploy itself already succeeded (this only affects the wait) - check manually with `release status <buildId>` rather than assuming failure.
532
+ - `translation_wait_timeout` (from `localization key translate-and-export --wait`): translation didn't settle within `--timeout`. Check manually with `localization key get-timeline-by-operation-id <operationId>` (the id is printed before the wait starts), then run `generate-uilm-file`/`uilm-export` yourself once ready rather than assuming translation failed.
533
+ - `no_project_domain` (from `new web`): the project has no domains registered in Blocks. Add one from the portal, or pass `--app-domain` explicitly if the user already knows the intended value.
264
534
  - HTML returned from an API command means the command endpoint path is wrong and must be fixed in the CLI.
265
535
 
266
536
  ## Local Development Checks
@@ -275,9 +545,9 @@ npm pack --dry-run
275
545
  Live smoke checks after login:
276
546
 
277
547
  ```bash
278
- blocks-os projects:list --json
279
- blocks-os iam:me --json
280
- blocks-os data:schema:list --json
548
+ blocks projects list --json
549
+ blocks iam me --json
550
+ blocks data schema list --json
281
551
  ```
282
552
 
283
553
  ## Security Boundary