@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/README.md CHANGED
@@ -1,9 +1,9 @@
1
- # Blocks OS CLI
1
+ # Blocks CLI
2
2
 
3
3
  CLI for SELISE Blocks Cloud.
4
4
 
5
5
  - Package: `@seliseblocks/cli-os`
6
- - Binary: `blocks-os`
6
+ - Binary: `blocks`
7
7
 
8
8
  ## Setup
9
9
 
@@ -11,7 +11,7 @@ Install the npm package where you want to operate the CLI:
11
11
 
12
12
  ```bash
13
13
  npm install -g @seliseblocks/cli-os
14
- blocks-os --version
14
+ blocks --version
15
15
  ```
16
16
 
17
17
  Then log in (device-code flow - prints a verification URL and code, opens
@@ -19,7 +19,7 @@ your browser to the verification page when possible so you only need to
19
19
  click approve, then polls until approved):
20
20
 
21
21
  ```bash
22
- blocks-os login
22
+ blocks login
23
23
  ```
24
24
 
25
25
  For source development in this repository:
@@ -32,35 +32,72 @@ node bin/run.js --version
32
32
 
33
33
  ## Commands
34
34
 
35
+ Namespaced commands accept either spaces or colons, e.g. `blocks data schema list` and
36
+ `blocks data:schema:list` are equivalent.
37
+
38
+ Global options available on every command:
39
+
40
+ | Option | Description |
41
+ |---|---|
42
+ | `--version` | Print CLI version. |
43
+ | `--json` | Print machine-readable JSON where supported. |
44
+ | `--api-url <url>` | Override the Blocks API URL for this command. |
45
+ | `--account <name>` | Use a named account profile; default is implicit. |
46
+ | `--project <tenantId>` | Use a project tenant for project-scoped commands. |
47
+ | `--dry-run` | Show planned mutation without calling the API. |
48
+ | `--yes` | Skip mutation confirmation after explicit approval. |
49
+
35
50
  | Command | Description |
36
51
  |---|---|
37
- | `blocks-os init` | Create local Blocks workspace files: `blocks.json`, data schema/rules folders, release deploy config, and `.env.example`. |
38
- | `blocks-os doctor [--json]` | Check Node.js, OIDC config, token cache, selected project, and config file locations. Does not mutate cloud resources. |
39
- | `blocks-os login` | Device-code login. Prints a verification URL and user code, opens the browser to the verification page when possible so you only need to click approve, then polls until the device is authorized; stores account tokens and auto-refreshes later. |
40
- | `blocks-os auth:status [--json]` | Show only whether account/project access and refresh tokens are missing, valid, expired, or available. Does not print account config values. |
41
- | `blocks-os auth:refresh [--project] [--json]` | Force account token refresh, or project token refresh with `--project`. |
42
- | `blocks-os auth:remove <account>` | Clear cached tokens and stored local credentials for that account. The packaged default OS account is restored from package defaults. |
43
- | `blocks-os logout` | Revoke the current refresh token when possible and remove local session data. |
44
- | `blocks-os projects:list [--json]` | List accessible Blocks projects via `/os/v4/Project/Gets` using the account token. Read-only. |
45
- | `blocks-os projects:get [tenantId] [--json]` | Read one project from `Project/Gets`. Uses selected project when `tenantId` is omitted. Read-only. |
46
- | `blocks-os projects:create <name> [--env dev] [--yes] [--dry-run] [--json]` | Create a Blocks project/environment via `/os/v4/Project/Create` using the account token. Mutating; supports dry-run and confirmation. |
47
- | `blocks-os use <tenantId>` | Save the selected project tenant globally and in `blocks.json` when present. Does not call cloud APIs. |
48
- | `blocks-os iam:me [--json]` | Read the current user from IAM using the account token. This is the only IAM admin surface exposed in the MVP. |
49
- | `blocks-os data:validate [--json]` | Validate local `blocks/data/schemas/*.json` and `blocks/data/rules.json` before pushing. Local-only. |
50
- | `blocks-os data:schema:list [--json]` | List project schemas via `/data/v4/schemas` using an impersonated project token. Read-only. |
51
- | `blocks-os data:schema:pull [--json]` | Download project schemas into `blocks/data/schemas/*.json`. Writes local files only. |
52
- | `blocks-os data:schema:push [--dry-run] [--yes] [--json]` | Create or update project schemas via `/data/v4/schemas/define`. Mutating; uses POST for create and PUT for update. |
53
- | `blocks-os data:rules:pull [--json]` | Download data-access policies into `blocks/data/rules.json`. Writes local files only. |
54
- | `blocks-os data:rules:deploy [--dry-run] [--yes] [--json]` | Apply schema security and data-access policies. Mutating; supports dry-run and confirmation. |
55
- | `blocks-os data:reload [--dry-run] [--yes] [--json]` | Reload Data schema configuration so staged schema/rule changes become live. Mutating; calls POST `/data/v4/schema-configurations/reload`. |
56
- | `blocks-os localization:validate --module <name> --language <culture> [--file <path>] [--json]` | Validate a local i18n JSON dictionary. Supports nested JSON input and checks the flattened key/value set locally. |
57
- | `blocks-os localization:push --module <name> --language <culture> [--file <path>] [--route <route>] [--context <text>] [--dry-run] [--yes] [--json]` | Create or update Localization keys from local i18n JSON via `/localization/v4/Key/SaveKeys`. Creates the module first through `/localization/v4/Module/Save` when missing. |
58
- | `blocks-os localization:pull --module <name> --language <culture> [--out <path>] [--json]` | Download published cloud localization via `/localization/v4/Key/GetCloudUilmFile` and write a local JSON dictionary. |
59
- | `blocks-os release:deploy --repo-id <repoId> [--dry-run] [--yes] [--json]` | Trigger a manual Release build/deploy for a configured repository. Mutating; no artifact upload is performed by this CLI. |
60
- | `blocks-os release:status <buildId> [--json]` | Read Release build status by build id. Read-only. |
61
- | `blocks-os release:builds:list --repo-id <repoId> [--json]` | List Release build details for a repository. Read-only. |
62
- | `blocks-os release:builds:get <buildId> [--json]` | Alias for `release:status`. Read-only. |
63
- | `blocks-os new web <name> --x-blocks-key <tenantId> --app-domain <domain-or-url> [--client-id <oidcClientId>]` | Create a Vite React starter app that talks to Blocks exclusively through `@seliseblocks/client` (a single `createBlocksClient()` instance) using the SDK hosted IdP flow: `blocksClient.auth.idp.redirectToProvider()` on login click and `blocksClient.auth.idp.callback()` on `/login/callback`. Includes route guards, auto-refresh through `auth.oidc.refreshToken()`, live `auth`/`iam`/`data`/`localization` SDK examples, environment config, and safe `.gitignore` defaults. Register a **public** OIDC client with redirect URIs for both your local HTTPS dev origin and `--app-domain`, then pass its id as `--client-id` (or set `VITE_BLOCKS_OIDC_CLIENT_ID` in `.env` afterwards). |
52
+ | `blocks init` | Create local Blocks workspace files: `blocks.json`, data schema/rules folders, and `.env.example`. |
53
+ | `blocks doctor [--json]` | Check Node.js, OIDC config, token cache, selected project, and config file locations. Does not mutate cloud resources. |
54
+ | `blocks login` | Device-code login. Prints a verification URL and user code, opens the browser to the verification page when possible so you only need to click approve, then polls until the device is authorized; stores account tokens and auto-refreshes later. |
55
+ | `blocks auth status [--json]` | Show only whether account/project access and refresh tokens are missing, valid, expired, or available. Does not print account config values. |
56
+ | `blocks auth refresh [--project] [--json]` | Force account token refresh, or project token refresh with `--project`. |
57
+ | `blocks auth remove <account>` | Clear cached tokens and stored local credentials for that account. The packaged default OS account is restored from package defaults. |
58
+ | `blocks logout` | Revoke the current refresh token when possible and remove local session data. |
59
+ | `blocks projects list [--json]` | List accessible Blocks projects via `/os/v4/Project/Gets` using the account token. Read-only. |
60
+ | `blocks projects get [tenantId] [--deployment] [--json]` | Read one project from `Project/Gets`. Uses selected project when `tenantId` is omitted. Pass `--deployment` to also include the environment, tenantGroupId, and linked repo assets that `release deploy` resolves internally. Read-only. |
61
+ | `blocks projects create` | **Currently disabled** (commented out, not deleted) - the dispatch entry, import, and help text were removed pending a product decision. Do not tell users this command is available. |
62
+ | `blocks use <tenantId>` | Save the selected project tenant globally and in `blocks.json` when present. Does not call cloud APIs. |
63
+ | `blocks deselect` | Clear the selected project tenant (globally and in `blocks.json`) and drop its cached impersonation token. Use this to recover when an impersonated project token has expired or failed, then run `blocks use <tenantId>` again to reselect and re-impersonate. |
64
+ | `blocks iam me [--json]` | Read the current user from IAM using the account token (CLI operator identity, not a project resource). |
65
+ | `blocks iam users *`, `iam email available`, `iam roles *`, `iam permissions *`, `iam resources *`, `iam organizations *`, `iam signup-settings *` | Full IAM admin surface for the selected project (users, roles, permissions, resource metadata, organizations and their config, signup settings). Project-scoped: requires a selected project and always uses an impersonated project token, never the account token. Mutating commands support `--dry-run`/`--yes`; rich payloads accept `--body '<json>'`/`--file <path>` on top of common convenience flags. Run `blocks --help` for the full command/flag list. |
66
+ | `blocks mfa config *`, `mfa totp *`, `mfa generate`, `mfa resend`, `mfa verify`, `mfa method set`, `mfa disable`, `mfa backup-codes *` | Project-scoped MFA admin and self-service surface (tenant MFA policy, TOTP enrollment, OTP challenge/verify, method switch, backup codes). Same project-selection and impersonation-only rules as IAM above. |
67
+ | `blocks mfa totp enable --mfa-type <n> [--code <c>]` | Composed TOTP enrollment: `totp setup` prints the QR/secret prompts for the code (or `--code` to skip the prompt) → `totp verify-setup` → `method set` → `backup-codes generate`, one confirmation. `--mfa-type` is required and not defaulted - the tenant-specific integer meaning "TOTP" isn't documented anywhere in this CLI. Deliberately excludes `mfa config save` (a separate, tenant-wide admin policy, not part of one user's enrollment). |
68
+ | `blocks auth idp *`, `auth config *`, `auth client-credentials *`, `auth oidc-clients *` | Auth admin surface: identity providers, AuthController tenant config, machine-to-machine client credentials, and OIDC client app registrations. Project-scoped, impersonated project token only. `idp delete`, `client-credentials save`/`delete`, and `oidc-clients save`/`delete`/`rotate-secret` return or handle secrets shown only once - treat CLI output as sensitive and never log it. |
69
+ | `blocks mail config *`, `mail template *`, `mail mailbox *` | Project-scoped mail admin surface via `/os/v4/Mail/*`: SMTP/inbound configuration upsert/delete/duplicate, mail template CRUD/clone, and mailbox message reads. Impersonated project token only. `mail config save`'s `--account-password` is redacted in `--dry-run` output only. |
70
+ | `blocks mail send [--to a,b] [--purpose <p>] [--language <c>] ...` / `mail sendtoany [same, plus --is-test-mail]` | Send an email via `/logic/v4/Mail/Send` / `/logic/v4/Mail/SendToAny`. Impersonated project token only; `--project-key` defaults to the selected project. |
71
+ | `blocks notification *` | Project-scoped notification channel configuration via `/os/v4/Notification/*` (list/get/save/delete). Impersonated project token only. `--channel`/`--type` are raw numeric enum values from the API. |
72
+ | `blocks notifier notify`, `notifier list`, `notifier unread`, `notifier mark-read`, `notifier mark-all-read` | Real-time/offline notification sends and inbox reads via `/logic/v4/Notifier/*` - distinct from `notification` above, which manages channel configuration, not sending. Impersonated project token only. `notify` targets `--user-ids`/`--roles`/`--subscription-filters`; `unread` sends its filter as query parameters even though swagger documents that endpoint as GET with a JSON body, which the Fetch spec forbids. |
73
+ | `blocks secrets get <secretKey>` / `secrets save --secret-key <key> --key-value-pairs '<json>'` | Generic tenant secret storage via `/os/v4/Secrets/*` (e.g. captcha provider config). Impersonated project token only. `save` is an upsert - omit `--item-id` to create, pass it to update. |
74
+ | `blocks storage config *` | Project-scoped storage backend configuration via `/os/v4/Storage/*` (list/get/save/delete). Impersonated project token only. `--secret-key`/`--access-key`/`--password`/`--connection-string` are redacted in `--dry-run` output only. |
75
+ | `blocks data validate [--json]` | Validate local `blocks/data/schemas/*.json` and `blocks/data/rules.json` before pushing. Local-only. |
76
+ | `blocks data schema list [--json]` | List project schemas via `/data/v4/schemas` using an impersonated project token. Read-only. |
77
+ | `blocks data schema pull [--json]` | Download project schemas into `blocks/data/schemas/*.json`. Writes local files only. |
78
+ | `blocks data schema push [--dry-run] [--yes] [--json]` | Create or update project schemas via `/data/v4/schemas/define`. Mutating; uses POST for create and PUT for update. |
79
+ | `blocks data rules pull [--json]` | Download data-access policies into `blocks/data/rules.json`. Writes local files only. |
80
+ | `blocks data rules deploy [--dry-run] [--yes] [--json]` | Apply schema security and data-access policies. Mutating; supports dry-run and confirmation. |
81
+ | `blocks data reload [--dry-run] [--yes] [--json]` | Reload Data schema configuration so staged schema/rule changes become live. Mutating; calls POST `/data/v4/schema-configurations/reload`. |
82
+ | `blocks data sync [--dry-run] [--yes] [--json]` | Composed flow: validate local schemas/rules → `data schema push` → `data rules deploy` → `data reload`, one confirmation. Use this instead of running the three separately - nothing else calls `data reload` automatically, so pushed changes can otherwise sit staged without going live. Prints 3 separate step outputs, not one combined document. |
83
+ | `blocks data config get/create/update` | Tenant data-source configuration via `/data/v4/configurations` - check `get` first, it defaults to Blocks-managed storage; `create`/`update` point the gateway at an external database. Impersonated project token only. |
84
+ | `blocks data schema get/get-by-name/aggregation/change-logs/delete/fields/info *` | Raw `/data/v4/schemas*` API beyond the file-oriented `list/pull/push` above: single-schema/by-name lookups, access-level aggregation, unadapted change logs, delete, and a metadata-first (`info *`) plus field-only (`fields`) alternative to `push`. Run `blocks --help` for the full flag reference. |
85
+ | `blocks data rules policy get/delete` | Single data-access policy read/delete via `/data/v4/data-access/policy/*`, alongside the bulk file-oriented `rules pull/deploy` above. |
86
+ | `blocks data validation list/get/by-schema/by-schema-field/save/delete` | Field-level validation rules via `/data/v4/data-validations*`. No file-oriented workflow exists for this yet; `save` is an upsert (omit `--item-id` to create) and requires a `validations` array via `--body`/`--file`. |
87
+ | `blocks data files upload --file <path> [--local-storage]` | Composed upload: presigned-upload-url → PUT the file → dms-upload, threading the returned `uploadUrl`/`fileId` automatically (content-type inferred from the file extension if omitted). Pass `--local-storage` for the one-call `upload-to-local-storage` path instead. Prefer this over the individual steps below. |
88
+ | `blocks data files *` | Full DMS/storage surface via `/data/v4/Files/*`: `get`/`get-many`/`info` (read), `presigned-upload-url` + `upload-to-url` (cloud storage, two steps) or `upload-to-local-storage` (one step, local storage), `update-additional-info`, `delete`, `dms-list`/`dms-upload` (folder browsing/file registration), `create-folder`/`delete-folder`. Here `--file <path>` is the local binary to upload/read, not a JSON payload file - see [AI_USAGE_GUIDE.md](AI_USAGE_GUIDE.md) for the distinction. |
89
+ | `blocks localization validate --module <name> --language <culture> [--file <path>] [--json]` | Validate a local i18n JSON dictionary. Supports nested JSON input and checks the flattened key/value set locally. |
90
+ | `blocks localization push --module <name> --language <culture> [--file <path>] [--route <route>] [--context <text>] [--dry-run] [--yes] [--json]` | Create or update Localization keys from local i18n JSON via `/localization/v4/Key/SaveKeys`. Creates the module first through `/localization/v4/Module/Save` when missing. |
91
+ | `blocks localization pull --module <name> --language <culture> [--out <path>] [--json]` | Download published cloud localization via `/localization/v4/Key/GetCloudUilmFile` and write a local JSON dictionary. |
92
+ | `blocks localization key translate-and-export --module-id <id> [--wait]` | Composed flow: `translate-all` → `generate-uilm-file` → `uilm-export`. With `--wait`, polls translation progress (via a self-generated correlation id) before generating/exporting, since translation runs asynchronously; without it, fires all 3 back to back. Prints one output block per step. |
93
+ | `blocks localization assistant translation-suggestion`, `localization config *`, `localization glossary *`, `localization key *`, `localization language *`, `localization module *` | Full raw `/localization/v4/*` API surface (AI translation suggestions, tenant webhook config, glossary CRUD, key CRUD/search/timeline/translate/UILM import-export/rollback, language CRUD, module CRUD/glossary tagging) alongside the file-oriented validate/push/pull commands above. Project-scoped, impersonated project token only. Run `blocks --help` for the full command/flag list. |
94
+ | `blocks release deploy [--domain <customDomain>] [--wait] [--poll-interval <s>] [--timeout <s>] [--dry-run] [--yes] [--json]` | Deploy the selected project's environment. No `--repo-id` needed - resolves the linked repo via `Project/GetAsset` and its connected branch via `Build/repo-details`, and aborts if that branch doesn't match the environment name. Pass `--domain` to also set the custom deployment domain first. Pass `--wait` to poll `release status` on the resulting build until it reaches a terminal state instead of returning immediately with just a build id. Mutating; no artifact upload is performed by this CLI. |
95
+ | `blocks release status <buildId> [--json]` | Read Release build status by build id. Read-only. |
96
+ | `blocks release builds list [repoId] [--repo-id <repoId>] [--json]` | List Release build details for a repository. When `repoId` is omitted, resolves it from the selected project's linked repo assets - auto-picked if there's exactly one, otherwise you're prompted to choose. Read-only. |
97
+ | `blocks release builds get <buildId> [--json]` | Alias for `release status`. Read-only. |
98
+ | `blocks new web <name> [--app-domain <domain>] [--client-id <oidcClientId>] [--x-blocks-key <tenantId>] [--blocks-api-url <url>] [--oidc-url <url>]` | Create a Vite React starter app that talks to Blocks exclusively through `@seliseblocks/client` (a single `createBlocksClient()` instance) using the SDK hosted IdP flow: `blocksClient.auth.idp.redirectToProvider()` on login click and `blocksClient.auth.idp.callback()` on `/login/callback`. Includes route guards, auto-refresh through `auth.oidc.refreshToken()`, live `auth`/`iam`/`data`/`localization` SDK examples, environment config, and safe `.gitignore` defaults. Uses the selected project (see `use`) unless `--x-blocks-key` overrides it. `--app-domain` and `--client-id` are resolved from the project record when omitted: the domain auto-picks if the project has exactly one, otherwise you're prompted to choose; the OIDC client is picked from the project's existing clients, or you can create a minimal one (display name + redirect URI) on the spot, or skip and register one later from the portal or `auth oidc-clients save`. `--blocks-api-url` defaults to `https://api.seliseblocks.com` if omitted - pass a different Data/IAM/Localization/OS gateway URL explicitly only if your project uses a non-default one. `--oidc-url` defaults to `https://iam.seliseblocks.com`. |
99
+ | `blocks skill list [--json]` / `skill show <name> [--json]` / `skill add <name> [--dir <path>]` | Local-only, no cloud calls: list/print the bundled `blocks-skills/*/SKILL.md` agent context docs, or copy a skill's entire directory (`SKILL.md` plus any supporting files) into `<dir>/<name>/` (default `./blocks-skills`) for use in a project outside this monorepo. `list`'s output and `show`/`add`'s "unknown skill" error both point at the full public skill catalog in case the bundled set is out of date. |
100
+ | `blocks sdk client [--app-domain <domain>] [--client-id <oidcClientId>] [--x-blocks-key <tenantId>] [--blocks-api-url <url>] [--oidc-url <url>] [--json]` | Read-only: resolves this project's `@seliseblocks/client` config (same values `new web` scaffolds with) and prints a ready-to-paste `createBlocksClient(...)` snippet. Passing both `--app-domain` and `--client-id` skips the project lookup entirely (no login required). Writes nothing - use `new web` to scaffold a full app. |
64
101
 
65
102
  Use `--json` on commands when AI or automation needs machine-readable output. Use `--dry-run` before mutations and `--yes` only after approval.
66
103
 
@@ -68,7 +105,7 @@ For agent-specific operating rules and command sequences, see [AI_USAGE_GUIDE.md
68
105
 
69
106
  ### Scaffolded Web App Local HTTPS
70
107
 
71
- For `blocks-os new web`, `--app-domain` should be the app's real Blocks domain/origin, for example `https://dbpdba.seliseblocks.com`. The generated app keeps that full value as `VITE_BLOCKS_APP_DOMAIN` and derives the local dev host without a scheme as `VITE_BLOCKS_DEV_HOST=dbpdba.seliseblocks.com`.
108
+ For `blocks new web`, `--app-domain` should be the app's real Blocks domain/origin, for example `https://dbpdba.seliseblocks.com`. The generated app keeps that full value as `VITE_BLOCKS_APP_DOMAIN` and derives the local dev host without a scheme as `VITE_BLOCKS_DEV_HOST=dbpdba.seliseblocks.com`.
72
109
 
73
110
  Browser login uses the hosted Blocks IAM IdP flow and secure cookies, so local testing on the project domain must run over HTTPS:
74
111
 
@@ -94,22 +131,22 @@ OAuth tokens use an OS-aware credential backend:
94
131
  | OS | Credential backend |
95
132
  |---|---|
96
133
  | Windows | DPAPI-encrypted value in the CLI secret metadata file, scoped to the current Windows user. |
97
- | macOS | Keychain generic password for the `seliseblocks-cli-os` service. |
134
+ | macOS | Keychain generic password for the `seliseblocks-cli` service. |
98
135
  | Linux | Secret Service through `secret-tool` when available. |
99
- | Fallback | `0600` file storage in the CLI config directory. Set `BLOCKS_OS_SECRET_STORE=file` to force this mode for CI or minimal containers. |
136
+ | Fallback | `0600` file storage in the CLI config directory. Set `BLOCKS_SECRET_STORE=file` to force this mode for CI or minimal containers. |
100
137
 
101
- Use `blocks-os doctor` or `blocks-os auth:status` to see which backend is active. Tokens are never printed by CLI status commands.
138
+ Use `blocks doctor` or `blocks auth status` to see which backend is active. Tokens are never printed by CLI status commands.
102
139
 
103
140
  If the active OS credential backend cannot decrypt old local auth state after a Windows profile change, machine migration, Keychain reset, or corrupted token cache, clear local auth state and log in again:
104
141
 
105
142
  ```bash
106
- blocks-os auth:remove <account>
107
- blocks-os login
143
+ blocks auth remove <account>
144
+ blocks login
108
145
  ```
109
146
 
110
147
  ## Workspace
111
148
 
112
- `blocks-os init` creates:
149
+ `blocks init` creates:
113
150
 
114
151
  ```text
115
152
  blocks.json
@@ -117,20 +154,20 @@ blocks/
117
154
  data/
118
155
  schemas/
119
156
  rules.json
120
- localization/
121
- release/
122
- deploy.json
123
157
  .env.example
124
158
  ```
125
159
 
126
- Localization dictionaries default to `blocks/localization/<module>.<language>.json`, for example `blocks/localization/common.en.json`. AI agents can generate or update that file, run `blocks-os localization:validate`, then push it to the Localization service with `blocks-os localization:push --dry-run` followed by `--yes` after approval. Gateway v4 routes do not include an `/api` segment.
160
+ Localization dictionaries are not created by `init` - the default path is `blocks/localization/<module>.<language>.json`, for example `blocks/localization/common.en.json`, and the `blocks/localization/` folder is created lazily the first time `blocks localization pull` writes to it. AI agents can create or update that file directly (before `push`, which only reads it), run `blocks localization validate`, then push it to the Localization service with `blocks localization push --dry-run` followed by `--yes` after approval. Gateway v4 routes do not include an `/api` segment.
161
+
162
+ `blocks use <tenantId>` updates the selected project in global CLI state and `blocks.json` when present.
127
163
 
128
- `blocks-os use <tenantId>` updates the selected project in global CLI state and `blocks.json` when present.
164
+ `blocks release deploy` has no local config file - it needs a repo already linked to the project. Linking a repo requires GitHub OAuth, which only the Blocks portal can do; if none is linked, the command tells you so and stops.
129
165
 
130
166
  ## Boundaries
131
167
 
132
- - IAM is limited to `iam:me` for now.
133
- - Data covers schema/rules/reload/validate only.
134
- - Localization covers dictionary validate/pull/push through the Localization service.
168
+ - `iam me` reads the CLI operator's own account identity; every other `iam *`, `mfa *`, `auth idp *`/`auth config *`/`auth client-credentials *`/`auth oidc-clients *`, `mail *`, `notification *`, `notifier *`, `secrets *`, and `storage config *` command is project-scoped and requires a selected project (`blocks use <tenantId>`) plus an impersonated project token - none of them ever run against the account token.
169
+ - Data covers the tenant data-source configuration, schema/rules/reload/validate, field-level validation rules, and the DMS/storage (`data files *`) surface. Prefer the composed `data sync` and `data files upload` over their individual steps.
170
+ - Localization covers dictionary validate/pull/push plus the full raw `/localization/v4/*` API surface (assistant, config, glossary, key, language, module). Prefer `localization key translate-and-export` over running translate/generate/export by hand.
135
171
  - Release covers deploy trigger and build status/read commands only.
136
172
  - No direct artifact upload unless Blocks Release adds a confirmed artifact upload API.
173
+ - `projects create` is currently disabled in this build (commented out pending a product decision) - don't reference it as available.
@@ -0,0 +1 @@
1
+ export declare function authClientCredentialsDelete(argv: string[]): Promise<void>;
@@ -0,0 +1,23 @@
1
+ import { booleanFlag, stringFlag } from "../../../lib/args.js";
2
+ import { blocksRequest } from "../../../lib/api.js";
3
+ import { confirmMutation } from "../../../lib/confirm.js";
4
+ import { writeOutput } from "../../../lib/output.js";
5
+ import { requestContext } from "../../../lib/request-context.js";
6
+ import { parseCommand, selectedProject } from "../../../lib/workspace.js";
7
+ export async function authClientCredentialsDelete(argv) {
8
+ const { args, flags } = parseCommand(argv);
9
+ const id = args[0] || stringFlag(flags, "id", { required: true });
10
+ if (booleanFlag(flags, "dry-run")) {
11
+ writeOutput({ dryRun: true, endpoint: `/iam/v4/auth/client-credentials/${id}` }, flags);
12
+ return;
13
+ }
14
+ await confirmMutation(flags, `Delete client credential '${id}'.`);
15
+ const projectKey = await selectedProject(flags);
16
+ const result = await blocksRequest(`/iam/v4/auth/client-credentials/${encodeURIComponent(id)}`, {
17
+ impersonatedProjectAuth: true,
18
+ method: "DELETE",
19
+ ...requestContext(flags),
20
+ projectTenantId: projectKey
21
+ });
22
+ writeOutput(result, flags);
23
+ }
@@ -0,0 +1 @@
1
+ export declare function authClientCredentialsList(argv: string[]): Promise<void>;
@@ -0,0 +1,14 @@
1
+ import { blocksRequest } from "../../../lib/api.js";
2
+ import { writeOutput } from "../../../lib/output.js";
3
+ import { requestContext } from "../../../lib/request-context.js";
4
+ import { parseCommand, selectedProject } from "../../../lib/workspace.js";
5
+ export async function authClientCredentialsList(argv) {
6
+ const { flags } = parseCommand(argv);
7
+ const projectKey = await selectedProject(flags);
8
+ const result = await blocksRequest("/iam/v4/auth/client-credentials", {
9
+ impersonatedProjectAuth: true,
10
+ ...requestContext(flags),
11
+ projectTenantId: projectKey
12
+ });
13
+ writeOutput(result, flags);
14
+ }
@@ -0,0 +1 @@
1
+ export declare function authClientCredentialsSave(argv: string[]): Promise<void>;
@@ -0,0 +1,41 @@
1
+ import { booleanFlag, optionalBooleanFlag, optionalIntegerFlag, stringFlag } from "../../../lib/args.js";
2
+ import { blocksRequest } from "../../../lib/api.js";
3
+ import { confirmMutation } from "../../../lib/confirm.js";
4
+ import { compact, jsonBodyFlag, listFlag } from "../../../lib/json-flag.js";
5
+ import { writeOutput } from "../../../lib/output.js";
6
+ import { requestContext } from "../../../lib/request-context.js";
7
+ import { parseCommand, selectedProject } from "../../../lib/workspace.js";
8
+ export async function authClientCredentialsSave(argv) {
9
+ const { flags } = parseCommand(argv);
10
+ const body = {
11
+ ...(await jsonBodyFlag(flags)),
12
+ ...compact({
13
+ accessTokenValidForNumberMinutes: optionalIntegerFlag(flags, "access-token-valid-minutes"),
14
+ isActive: optionalBooleanFlag(flags, "active"),
15
+ itemId: stringFlag(flags, "item-id") || undefined,
16
+ name: stringFlag(flags, "name") || undefined,
17
+ permissions: listFlag(flags, "permissions"),
18
+ roles: listFlag(flags, "roles")
19
+ })
20
+ };
21
+ if (!body.name && !body.itemId)
22
+ throw new Error("Provide --name (create) or --item-id (update), or set them in --body/--file.");
23
+ if (booleanFlag(flags, "dry-run")) {
24
+ writeOutput({ dryRun: true, endpoint: "/iam/v4/auth/client-credentials", request: redactSecret(body) }, flags);
25
+ return;
26
+ }
27
+ await confirmMutation(flags, `Save client credential '${body.name ?? body.itemId}'. The response's clientSecret is shown once.`);
28
+ const projectKey = await selectedProject(flags);
29
+ const result = await blocksRequest("/iam/v4/auth/client-credentials", {
30
+ body,
31
+ impersonatedProjectAuth: true,
32
+ ...requestContext(flags),
33
+ projectTenantId: projectKey
34
+ });
35
+ writeOutput(result, flags);
36
+ }
37
+ function redactSecret(body) {
38
+ if (!body.clientSecret)
39
+ return body;
40
+ return { ...body, clientSecret: "***" };
41
+ }
@@ -0,0 +1 @@
1
+ export declare function authConfigGet(argv: string[]): Promise<void>;
@@ -0,0 +1,14 @@
1
+ import { blocksRequest } from "../../../lib/api.js";
2
+ import { writeOutput } from "../../../lib/output.js";
3
+ import { requestContext } from "../../../lib/request-context.js";
4
+ import { parseCommand, selectedProject } from "../../../lib/workspace.js";
5
+ export async function authConfigGet(argv) {
6
+ const { flags } = parseCommand(argv);
7
+ const projectKey = await selectedProject(flags);
8
+ const result = await blocksRequest("/iam/v4/auth/config", {
9
+ impersonatedProjectAuth: true,
10
+ ...requestContext(flags),
11
+ projectTenantId: projectKey
12
+ });
13
+ writeOutput(result, flags);
14
+ }
@@ -0,0 +1 @@
1
+ export declare function authConfigSave(argv: string[]): Promise<void>;
@@ -0,0 +1,37 @@
1
+ import { booleanFlag, optionalIntegerFlag, stringFlag } from "../../../lib/args.js";
2
+ import { blocksRequest } from "../../../lib/api.js";
3
+ import { confirmMutation } from "../../../lib/confirm.js";
4
+ import { compact, jsonBodyFlag } from "../../../lib/json-flag.js";
5
+ import { writeOutput } from "../../../lib/output.js";
6
+ import { requestContext } from "../../../lib/request-context.js";
7
+ import { parseCommand, selectedProject } from "../../../lib/workspace.js";
8
+ export async function authConfigSave(argv) {
9
+ const { flags } = parseCommand(argv);
10
+ const body = {
11
+ ...(await jsonBodyFlag(flags)),
12
+ ...compact({
13
+ absoluteRefreshTokenValidForNumberMinutes: optionalIntegerFlag(flags, "absolute-refresh-token-minutes"),
14
+ accessTokenValidForNumberMinutes: optionalIntegerFlag(flags, "access-token-minutes"),
15
+ accountLockDurationInMinutes: optionalIntegerFlag(flags, "account-lock-duration-minutes"),
16
+ getNumberOfWrongAttemptsToLockTheAccount: optionalIntegerFlag(flags, "wrong-attempts-to-lock"),
17
+ isOidcEnabled: booleanFlag(flags, "oidc-enabled") || undefined,
18
+ logoutOnPasswordChange: booleanFlag(flags, "logout-on-password-change") || undefined,
19
+ passwordStrengthCheckerRegex: stringFlag(flags, "password-strength-regex") || undefined,
20
+ refreshTokenValidForNumberMinutes: optionalIntegerFlag(flags, "refresh-token-minutes"),
21
+ rememberMeRefreshTokenValidForNumberMinutes: optionalIntegerFlag(flags, "remember-me-refresh-token-minutes")
22
+ })
23
+ };
24
+ if (booleanFlag(flags, "dry-run")) {
25
+ writeOutput({ dryRun: true, endpoint: "/iam/v4/auth/config", request: body }, flags);
26
+ return;
27
+ }
28
+ await confirmMutation(flags, "Save AuthController configuration for the selected project.");
29
+ const projectKey = await selectedProject(flags);
30
+ const result = await blocksRequest("/iam/v4/auth/config", {
31
+ body,
32
+ impersonatedProjectAuth: true,
33
+ ...requestContext(flags),
34
+ projectTenantId: projectKey
35
+ });
36
+ writeOutput(result, flags);
37
+ }
@@ -0,0 +1 @@
1
+ export declare function authIdpCreate(argv: string[]): Promise<void>;
@@ -0,0 +1,46 @@
1
+ import { booleanFlag, stringFlag } from "../../../lib/args.js";
2
+ import { blocksRequest } from "../../../lib/api.js";
3
+ import { confirmMutation } from "../../../lib/confirm.js";
4
+ import { compact, jsonBodyFlag, listFlag } from "../../../lib/json-flag.js";
5
+ import { writeOutput } from "../../../lib/output.js";
6
+ import { requestContext } from "../../../lib/request-context.js";
7
+ import { parseCommand, selectedProject } from "../../../lib/workspace.js";
8
+ export async function authIdpCreate(argv) {
9
+ const { flags } = parseCommand(argv);
10
+ const body = {
11
+ ...(await jsonBodyFlag(flags)),
12
+ ...compact({
13
+ clientId: stringFlag(flags, "client-id") || undefined,
14
+ clientSecret: stringFlag(flags, "client-secret") || undefined,
15
+ displayName: stringFlag(flags, "display-name") || undefined,
16
+ isActive: booleanFlag(flags, "active") || undefined,
17
+ issuer: stringFlag(flags, "issuer") || undefined,
18
+ protocol: stringFlag(flags, "protocol") || undefined,
19
+ provider: stringFlag(flags, "provider") || undefined,
20
+ providerType: stringFlag(flags, "provider-type") || undefined,
21
+ redirectUris: listFlag(flags, "redirect-uris"),
22
+ scope: stringFlag(flags, "scope") || undefined
23
+ })
24
+ };
25
+ if (!body.provider || !body.providerType || !body.protocol || !body.clientId) {
26
+ throw new Error("Provide --provider, --provider-type, --protocol and --client-id (or set them in --body/--file).");
27
+ }
28
+ if (booleanFlag(flags, "dry-run")) {
29
+ writeOutput({ dryRun: true, endpoint: "/iam/v4/auth/identity-providers", request: redactSecret(body) }, flags);
30
+ return;
31
+ }
32
+ await confirmMutation(flags, `Create identity provider '${body.provider}' (${body.providerType}).`);
33
+ const projectKey = await selectedProject(flags);
34
+ const result = await blocksRequest("/iam/v4/auth/identity-providers", {
35
+ body,
36
+ impersonatedProjectAuth: true,
37
+ ...requestContext(flags),
38
+ projectTenantId: projectKey
39
+ });
40
+ writeOutput(result, flags);
41
+ }
42
+ function redactSecret(body) {
43
+ if (!body.clientSecret)
44
+ return body;
45
+ return { ...body, clientSecret: "***" };
46
+ }
@@ -0,0 +1 @@
1
+ export declare function authIdpDelete(argv: string[]): Promise<void>;
@@ -0,0 +1,23 @@
1
+ import { booleanFlag, stringFlag } from "../../../lib/args.js";
2
+ import { blocksRequest } from "../../../lib/api.js";
3
+ import { confirmMutation } from "../../../lib/confirm.js";
4
+ import { writeOutput } from "../../../lib/output.js";
5
+ import { requestContext } from "../../../lib/request-context.js";
6
+ import { parseCommand, selectedProject } from "../../../lib/workspace.js";
7
+ export async function authIdpDelete(argv) {
8
+ const { args, flags } = parseCommand(argv);
9
+ const id = args[0] || stringFlag(flags, "id", { required: true });
10
+ if (booleanFlag(flags, "dry-run")) {
11
+ writeOutput({ dryRun: true, endpoint: `/iam/v4/auth/identity-providers/${id}` }, flags);
12
+ return;
13
+ }
14
+ await confirmMutation(flags, `Delete identity provider '${id}'. This also removes its OIDC client and is irreversible.`);
15
+ const projectKey = await selectedProject(flags);
16
+ const result = await blocksRequest(`/iam/v4/auth/identity-providers/${encodeURIComponent(id)}`, {
17
+ impersonatedProjectAuth: true,
18
+ method: "DELETE",
19
+ ...requestContext(flags),
20
+ projectTenantId: projectKey
21
+ });
22
+ writeOutput(result, flags);
23
+ }
@@ -0,0 +1 @@
1
+ export declare function authIdpGet(argv: string[]): Promise<void>;
@@ -0,0 +1,16 @@
1
+ import { stringFlag } from "../../../lib/args.js";
2
+ import { blocksRequest } from "../../../lib/api.js";
3
+ import { writeOutput } from "../../../lib/output.js";
4
+ import { requestContext } from "../../../lib/request-context.js";
5
+ import { parseCommand, selectedProject } from "../../../lib/workspace.js";
6
+ export async function authIdpGet(argv) {
7
+ const { args, flags } = parseCommand(argv);
8
+ const id = args[0] || stringFlag(flags, "id", { required: true });
9
+ const projectKey = await selectedProject(flags);
10
+ const result = await blocksRequest(`/iam/v4/auth/identity-providers/${encodeURIComponent(id)}`, {
11
+ impersonatedProjectAuth: true,
12
+ ...requestContext(flags),
13
+ projectTenantId: projectKey
14
+ });
15
+ writeOutput(result, flags);
16
+ }
@@ -0,0 +1 @@
1
+ export declare function authIdpList(argv: string[]): Promise<void>;
@@ -0,0 +1,14 @@
1
+ import { blocksRequest } from "../../../lib/api.js";
2
+ import { writeOutput } from "../../../lib/output.js";
3
+ import { requestContext } from "../../../lib/request-context.js";
4
+ import { parseCommand, selectedProject } from "../../../lib/workspace.js";
5
+ export async function authIdpList(argv) {
6
+ const { flags } = parseCommand(argv);
7
+ const projectKey = await selectedProject(flags);
8
+ const result = await blocksRequest("/iam/v4/auth/identity-providers", {
9
+ impersonatedProjectAuth: true,
10
+ ...requestContext(flags),
11
+ projectTenantId: projectKey
12
+ });
13
+ writeOutput(result, flags);
14
+ }
@@ -0,0 +1 @@
1
+ export declare function authIdpStatus(argv: string[]): Promise<void>;
@@ -0,0 +1,27 @@
1
+ import { booleanFlag, stringFlag } from "../../../lib/args.js";
2
+ import { blocksRequest } from "../../../lib/api.js";
3
+ import { confirmMutation } from "../../../lib/confirm.js";
4
+ import { writeOutput } from "../../../lib/output.js";
5
+ import { requestContext } from "../../../lib/request-context.js";
6
+ import { parseCommand, selectedProject } from "../../../lib/workspace.js";
7
+ export async function authIdpStatus(argv) {
8
+ const { args, flags } = parseCommand(argv);
9
+ const id = args[0] || stringFlag(flags, "id", { required: true });
10
+ if (!("active" in flags))
11
+ throw new Error("Provide --active or --active=false.");
12
+ const isActive = booleanFlag(flags, "active");
13
+ if (booleanFlag(flags, "dry-run")) {
14
+ writeOutput({ dryRun: true, endpoint: `/iam/v4/auth/identity-providers/${id}/status`, request: { isActive } }, flags);
15
+ return;
16
+ }
17
+ await confirmMutation(flags, `${isActive ? "Enable" : "Disable"} identity provider '${id}'.`);
18
+ const projectKey = await selectedProject(flags);
19
+ const result = await blocksRequest(`/iam/v4/auth/identity-providers/${encodeURIComponent(id)}/status`, {
20
+ body: { isActive },
21
+ impersonatedProjectAuth: true,
22
+ method: "PATCH",
23
+ ...requestContext(flags),
24
+ projectTenantId: projectKey
25
+ });
26
+ writeOutput(result, flags);
27
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Provider, providerType, protocol and clientId are immutable on this endpoint --
3
+ * IAM requires them to echo the existing value when supplied, so only pass them
4
+ * via --provider/--provider-type/--protocol/--client-id if you're re-sending the
5
+ * current configuration alongside other field changes.
6
+ */
7
+ export declare function authIdpUpdate(argv: string[]): Promise<void>;
@@ -0,0 +1,45 @@
1
+ import { booleanFlag, stringFlag } from "../../../lib/args.js";
2
+ import { blocksRequest } from "../../../lib/api.js";
3
+ import { confirmMutation } from "../../../lib/confirm.js";
4
+ import { compact, jsonBodyFlag, listFlag } from "../../../lib/json-flag.js";
5
+ import { writeOutput } from "../../../lib/output.js";
6
+ import { requestContext } from "../../../lib/request-context.js";
7
+ import { parseCommand, selectedProject } from "../../../lib/workspace.js";
8
+ /**
9
+ * Provider, providerType, protocol and clientId are immutable on this endpoint --
10
+ * IAM requires them to echo the existing value when supplied, so only pass them
11
+ * via --provider/--provider-type/--protocol/--client-id if you're re-sending the
12
+ * current configuration alongside other field changes.
13
+ */
14
+ export async function authIdpUpdate(argv) {
15
+ const { args, flags } = parseCommand(argv);
16
+ const id = args[0] || stringFlag(flags, "id", { required: true });
17
+ const body = {
18
+ ...(await jsonBodyFlag(flags)),
19
+ ...compact({
20
+ clientId: stringFlag(flags, "client-id") || undefined,
21
+ displayName: stringFlag(flags, "display-name") || undefined,
22
+ isActive: booleanFlag(flags, "active") || undefined,
23
+ issuer: stringFlag(flags, "issuer") || undefined,
24
+ protocol: stringFlag(flags, "protocol") || undefined,
25
+ provider: stringFlag(flags, "provider") || undefined,
26
+ providerType: stringFlag(flags, "provider-type") || undefined,
27
+ redirectUris: listFlag(flags, "redirect-uris"),
28
+ scope: stringFlag(flags, "scope") || undefined
29
+ })
30
+ };
31
+ if (booleanFlag(flags, "dry-run")) {
32
+ writeOutput({ dryRun: true, endpoint: `/iam/v4/auth/identity-providers/${id}`, request: body }, flags);
33
+ return;
34
+ }
35
+ await confirmMutation(flags, `Update identity provider '${id}'.`);
36
+ const projectKey = await selectedProject(flags);
37
+ const result = await blocksRequest(`/iam/v4/auth/identity-providers/${encodeURIComponent(id)}`, {
38
+ body,
39
+ impersonatedProjectAuth: true,
40
+ method: "PUT",
41
+ ...requestContext(flags),
42
+ projectTenantId: projectKey
43
+ });
44
+ writeOutput(result, flags);
45
+ }
@@ -0,0 +1 @@
1
+ export declare function authOidcClientsDelete(argv: string[]): Promise<void>;