monday-cli 0.2.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (479) hide show
  1. package/CHANGELOG.md +675 -2
  2. package/README.md +223 -31
  3. package/dist/api/assets.d.ts +326 -0
  4. package/dist/api/assets.d.ts.map +1 -0
  5. package/dist/api/assets.js +519 -0
  6. package/dist/api/assets.js.map +1 -0
  7. package/dist/api/board-favorites.d.ts +329 -0
  8. package/dist/api/board-favorites.d.ts.map +1 -0
  9. package/dist/api/board-favorites.js +353 -0
  10. package/dist/api/board-favorites.js.map +1 -0
  11. package/dist/api/board-mutation-result.d.ts +9 -5
  12. package/dist/api/board-mutation-result.d.ts.map +1 -1
  13. package/dist/api/board-mutation-result.js +9 -5
  14. package/dist/api/board-mutation-result.js.map +1 -1
  15. package/dist/api/board-relation-validation.d.ts +161 -0
  16. package/dist/api/board-relation-validation.d.ts.map +1 -0
  17. package/dist/api/board-relation-validation.js +317 -0
  18. package/dist/api/board-relation-validation.js.map +1 -0
  19. package/dist/api/cache.d.ts +14 -5
  20. package/dist/api/cache.d.ts.map +1 -1
  21. package/dist/api/cache.js +8 -10
  22. package/dist/api/cache.js.map +1 -1
  23. package/dist/api/column-mapping.js +2 -2
  24. package/dist/api/column-mapping.js.map +1 -1
  25. package/dist/api/column-mutation-result.d.ts +9 -5
  26. package/dist/api/column-mutation-result.d.ts.map +1 -1
  27. package/dist/api/column-mutation-result.js +9 -5
  28. package/dist/api/column-mutation-result.js.map +1 -1
  29. package/dist/api/column-types.d.ts +37 -14
  30. package/dist/api/column-types.d.ts.map +1 -1
  31. package/dist/api/column-types.js +47 -6
  32. package/dist/api/column-types.js.map +1 -1
  33. package/dist/api/column-values.d.ts +234 -31
  34. package/dist/api/column-values.d.ts.map +1 -1
  35. package/dist/api/column-values.js +560 -124
  36. package/dist/api/column-values.js.map +1 -1
  37. package/dist/api/cross-board-search.d.ts +501 -0
  38. package/dist/api/cross-board-search.d.ts.map +1 -0
  39. package/dist/api/cross-board-search.js +547 -0
  40. package/dist/api/cross-board-search.js.map +1 -0
  41. package/dist/api/dev-conventions.d.ts +1038 -0
  42. package/dist/api/dev-conventions.d.ts.map +1 -0
  43. package/dist/api/dev-conventions.js +1556 -0
  44. package/dist/api/dev-conventions.js.map +1 -0
  45. package/dist/api/documents.d.ts +519 -0
  46. package/dist/api/documents.d.ts.map +1 -0
  47. package/dist/api/documents.js +586 -0
  48. package/dist/api/documents.js.map +1 -0
  49. package/dist/api/dry-run.d.ts +32 -5
  50. package/dist/api/dry-run.d.ts.map +1 -1
  51. package/dist/api/dry-run.js +149 -32
  52. package/dist/api/dry-run.js.map +1 -1
  53. package/dist/api/errors.d.ts.map +1 -1
  54. package/dist/api/errors.js +28 -7
  55. package/dist/api/errors.js.map +1 -1
  56. package/dist/api/group-mutation-result.d.ts +9 -5
  57. package/dist/api/group-mutation-result.d.ts.map +1 -1
  58. package/dist/api/group-mutation-result.js +9 -5
  59. package/dist/api/group-mutation-result.js.map +1 -1
  60. package/dist/api/item-history-projection.d.ts +919 -0
  61. package/dist/api/item-history-projection.d.ts.map +1 -0
  62. package/dist/api/item-history-projection.js +1104 -0
  63. package/dist/api/item-history-projection.js.map +1 -0
  64. package/dist/api/item-mutation-execute.d.ts +82 -0
  65. package/dist/api/item-mutation-execute.d.ts.map +1 -0
  66. package/dist/api/item-mutation-execute.js +199 -0
  67. package/dist/api/item-mutation-execute.js.map +1 -0
  68. package/dist/api/item-watch.d.ts +263 -0
  69. package/dist/api/item-watch.d.ts.map +1 -0
  70. package/dist/api/item-watch.js +709 -0
  71. package/dist/api/item-watch.js.map +1 -0
  72. package/dist/api/multipart-transport.d.ts +223 -0
  73. package/dist/api/multipart-transport.d.ts.map +1 -0
  74. package/dist/api/multipart-transport.js +274 -0
  75. package/dist/api/multipart-transport.js.map +1 -0
  76. package/dist/api/notifications.d.ts +156 -0
  77. package/dist/api/notifications.d.ts.map +1 -0
  78. package/dist/api/notifications.js +215 -0
  79. package/dist/api/notifications.js.map +1 -0
  80. package/dist/api/oauth-test-helper.d.ts +64 -0
  81. package/dist/api/oauth-test-helper.d.ts.map +1 -0
  82. package/dist/api/oauth-test-helper.js +179 -0
  83. package/dist/api/oauth-test-helper.js.map +1 -0
  84. package/dist/api/oauth.d.ts +198 -0
  85. package/dist/api/oauth.d.ts.map +1 -0
  86. package/dist/api/oauth.js +471 -0
  87. package/dist/api/oauth.js.map +1 -0
  88. package/dist/api/parallel-dispatch.d.ts +155 -0
  89. package/dist/api/parallel-dispatch.d.ts.map +1 -0
  90. package/dist/api/parallel-dispatch.js +243 -0
  91. package/dist/api/parallel-dispatch.js.map +1 -0
  92. package/dist/api/partial-success-bulk.d.ts +480 -0
  93. package/dist/api/partial-success-bulk.d.ts.map +1 -0
  94. package/dist/api/partial-success-bulk.js +436 -0
  95. package/dist/api/partial-success-bulk.js.map +1 -0
  96. package/dist/api/partial-success-mutation.d.ts +13 -1
  97. package/dist/api/partial-success-mutation.d.ts.map +1 -1
  98. package/dist/api/partial-success-mutation.js +5 -1
  99. package/dist/api/partial-success-mutation.js.map +1 -1
  100. package/dist/api/people.d.ts +54 -1
  101. package/dist/api/people.d.ts.map +1 -1
  102. package/dist/api/people.js +27 -3
  103. package/dist/api/people.js.map +1 -1
  104. package/dist/api/probes.d.ts +487 -0
  105. package/dist/api/probes.d.ts.map +1 -0
  106. package/dist/api/probes.js +881 -0
  107. package/dist/api/probes.js.map +1 -0
  108. package/dist/api/raw-document.d.ts.map +1 -1
  109. package/dist/api/raw-document.js +2 -2
  110. package/dist/api/raw-document.js.map +1 -1
  111. package/dist/api/raw-write.d.ts +12 -4
  112. package/dist/api/raw-write.d.ts.map +1 -1
  113. package/dist/api/raw-write.js +32 -14
  114. package/dist/api/raw-write.js.map +1 -1
  115. package/dist/api/resolution-context.d.ts +23 -11
  116. package/dist/api/resolution-context.d.ts.map +1 -1
  117. package/dist/api/resolution-context.js +53 -12
  118. package/dist/api/resolution-context.js.map +1 -1
  119. package/dist/api/resolution-pass.d.ts +30 -1
  120. package/dist/api/resolution-pass.d.ts.map +1 -1
  121. package/dist/api/resolution-pass.js +36 -1
  122. package/dist/api/resolution-pass.js.map +1 -1
  123. package/dist/api/resolve-client.d.ts +22 -0
  124. package/dist/api/resolve-client.d.ts.map +1 -1
  125. package/dist/api/resolve-client.js +9 -1
  126. package/dist/api/resolve-client.js.map +1 -1
  127. package/dist/api/response-root.d.ts +92 -46
  128. package/dist/api/response-root.d.ts.map +1 -1
  129. package/dist/api/response-root.js +93 -41
  130. package/dist/api/response-root.js.map +1 -1
  131. package/dist/api/tag-directory.d.ts +154 -0
  132. package/dist/api/tag-directory.d.ts.map +1 -0
  133. package/dist/api/tag-directory.js +325 -0
  134. package/dist/api/tag-directory.js.map +1 -0
  135. package/dist/api/time-tracking.d.ts +165 -0
  136. package/dist/api/time-tracking.d.ts.map +1 -0
  137. package/dist/api/time-tracking.js +135 -0
  138. package/dist/api/time-tracking.js.map +1 -0
  139. package/dist/api/transport.js +3 -3
  140. package/dist/api/transport.js.map +1 -1
  141. package/dist/api/usage.d.ts +190 -0
  142. package/dist/api/usage.d.ts.map +1 -0
  143. package/dist/api/usage.js +194 -0
  144. package/dist/api/usage.js.map +1 -0
  145. package/dist/api/users-fan-out-mutation.d.ts.map +1 -1
  146. package/dist/api/users-fan-out-mutation.js +10 -5
  147. package/dist/api/users-fan-out-mutation.js.map +1 -1
  148. package/dist/api/webhooks.d.ts +357 -0
  149. package/dist/api/webhooks.d.ts.map +1 -0
  150. package/dist/api/webhooks.js +333 -0
  151. package/dist/api/webhooks.js.map +1 -0
  152. package/dist/cli/envelope-out.d.ts +18 -1
  153. package/dist/cli/envelope-out.d.ts.map +1 -1
  154. package/dist/cli/envelope-out.js +16 -2
  155. package/dist/cli/envelope-out.js.map +1 -1
  156. package/dist/cli/program.d.ts.map +1 -1
  157. package/dist/cli/program.js +120 -1
  158. package/dist/cli/program.js.map +1 -1
  159. package/dist/cli/run.d.ts +32 -0
  160. package/dist/cli/run.d.ts.map +1 -1
  161. package/dist/cli/run.js +3 -0
  162. package/dist/cli/run.js.map +1 -1
  163. package/dist/commands/account/tags.d.ts +37 -0
  164. package/dist/commands/account/tags.d.ts.map +1 -0
  165. package/dist/commands/account/tags.js +84 -0
  166. package/dist/commands/account/tags.js.map +1 -0
  167. package/dist/commands/auth/login.d.ts +14 -0
  168. package/dist/commands/auth/login.d.ts.map +1 -0
  169. package/dist/commands/auth/login.js +314 -0
  170. package/dist/commands/auth/login.js.map +1 -0
  171. package/dist/commands/auth/logout.d.ts +28 -0
  172. package/dist/commands/auth/logout.d.ts.map +1 -0
  173. package/dist/commands/auth/logout.js +94 -0
  174. package/dist/commands/auth/logout.js.map +1 -0
  175. package/dist/commands/board/archive.d.ts.map +1 -1
  176. package/dist/commands/board/archive.js +14 -14
  177. package/dist/commands/board/archive.js.map +1 -1
  178. package/dist/commands/board/column-create.d.ts +9 -8
  179. package/dist/commands/board/column-create.d.ts.map +1 -1
  180. package/dist/commands/board/column-create.js +61 -51
  181. package/dist/commands/board/column-create.js.map +1 -1
  182. package/dist/commands/board/column-delete.d.ts.map +1 -1
  183. package/dist/commands/board/column-delete.js +15 -16
  184. package/dist/commands/board/column-delete.js.map +1 -1
  185. package/dist/commands/board/column-update.d.ts.map +1 -1
  186. package/dist/commands/board/column-update.js +23 -22
  187. package/dist/commands/board/column-update.js.map +1 -1
  188. package/dist/commands/board/create.d.ts.map +1 -1
  189. package/dist/commands/board/create.js +14 -17
  190. package/dist/commands/board/create.js.map +1 -1
  191. package/dist/commands/board/delete.d.ts.map +1 -1
  192. package/dist/commands/board/delete.js +12 -15
  193. package/dist/commands/board/delete.js.map +1 -1
  194. package/dist/commands/board/describe.d.ts.map +1 -1
  195. package/dist/commands/board/describe.js +30 -0
  196. package/dist/commands/board/describe.js.map +1 -1
  197. package/dist/commands/board/duplicate.d.ts.map +1 -1
  198. package/dist/commands/board/duplicate.js +12 -13
  199. package/dist/commands/board/duplicate.js.map +1 -1
  200. package/dist/commands/board/favorites.d.ts +33 -0
  201. package/dist/commands/board/favorites.d.ts.map +1 -0
  202. package/dist/commands/board/favorites.js +74 -0
  203. package/dist/commands/board/favorites.js.map +1 -0
  204. package/dist/commands/board/find.d.ts +1 -1
  205. package/dist/commands/board/group-archive.d.ts.map +1 -1
  206. package/dist/commands/board/group-archive.js +12 -16
  207. package/dist/commands/board/group-archive.js.map +1 -1
  208. package/dist/commands/board/group-create.d.ts.map +1 -1
  209. package/dist/commands/board/group-create.js +9 -19
  210. package/dist/commands/board/group-create.js.map +1 -1
  211. package/dist/commands/board/group-delete.d.ts.map +1 -1
  212. package/dist/commands/board/group-delete.js +12 -16
  213. package/dist/commands/board/group-delete.js.map +1 -1
  214. package/dist/commands/board/group-duplicate.d.ts.map +1 -1
  215. package/dist/commands/board/group-duplicate.js +12 -16
  216. package/dist/commands/board/group-duplicate.js.map +1 -1
  217. package/dist/commands/board/group-update.d.ts.map +1 -1
  218. package/dist/commands/board/group-update.js +12 -11
  219. package/dist/commands/board/group-update.js.map +1 -1
  220. package/dist/commands/board/list.d.ts +1 -1
  221. package/dist/commands/board/update.d.ts.map +1 -1
  222. package/dist/commands/board/update.js +16 -11
  223. package/dist/commands/board/update.js.map +1 -1
  224. package/dist/commands/cache/list.d.ts +2 -0
  225. package/dist/commands/cache/list.d.ts.map +1 -1
  226. package/dist/commands/cache/list.js +2 -2
  227. package/dist/commands/cache/list.js.map +1 -1
  228. package/dist/commands/completion.d.ts +188 -0
  229. package/dist/commands/completion.d.ts.map +1 -0
  230. package/dist/commands/completion.js +418 -0
  231. package/dist/commands/completion.js.map +1 -0
  232. package/dist/commands/dev/_shared.d.ts +40 -0
  233. package/dist/commands/dev/_shared.d.ts.map +1 -0
  234. package/dist/commands/dev/_shared.js +104 -0
  235. package/dist/commands/dev/_shared.js.map +1 -0
  236. package/dist/commands/dev/configure.d.ts +36 -0
  237. package/dist/commands/dev/configure.d.ts.map +1 -0
  238. package/dist/commands/dev/configure.js +145 -0
  239. package/dist/commands/dev/configure.js.map +1 -0
  240. package/dist/commands/dev/discover.d.ts +34 -0
  241. package/dist/commands/dev/discover.d.ts.map +1 -0
  242. package/dist/commands/dev/discover.js +117 -0
  243. package/dist/commands/dev/discover.js.map +1 -0
  244. package/dist/commands/dev/doctor.d.ts +39 -0
  245. package/dist/commands/dev/doctor.d.ts.map +1 -0
  246. package/dist/commands/dev/doctor.js +91 -0
  247. package/dist/commands/dev/doctor.js.map +1 -0
  248. package/dist/commands/dev/epic/items.d.ts +24 -0
  249. package/dist/commands/dev/epic/items.d.ts.map +1 -0
  250. package/dist/commands/dev/epic/items.js +103 -0
  251. package/dist/commands/dev/epic/items.js.map +1 -0
  252. package/dist/commands/dev/epic/list.d.ts +36 -0
  253. package/dist/commands/dev/epic/list.d.ts.map +1 -0
  254. package/dist/commands/dev/epic/list.js +120 -0
  255. package/dist/commands/dev/epic/list.js.map +1 -0
  256. package/dist/commands/dev/release/list.d.ts +21 -0
  257. package/dist/commands/dev/release/list.d.ts.map +1 -0
  258. package/dist/commands/dev/release/list.js +73 -0
  259. package/dist/commands/dev/release/list.js.map +1 -0
  260. package/dist/commands/dev/sprint/current.d.ts +24 -0
  261. package/dist/commands/dev/sprint/current.d.ts.map +1 -0
  262. package/dist/commands/dev/sprint/current.js +90 -0
  263. package/dist/commands/dev/sprint/current.js.map +1 -0
  264. package/dist/commands/dev/sprint/items.d.ts +34 -0
  265. package/dist/commands/dev/sprint/items.d.ts.map +1 -0
  266. package/dist/commands/dev/sprint/items.js +118 -0
  267. package/dist/commands/dev/sprint/items.js.map +1 -0
  268. package/dist/commands/dev/sprint/list.d.ts +41 -0
  269. package/dist/commands/dev/sprint/list.d.ts.map +1 -0
  270. package/dist/commands/dev/sprint/list.js +104 -0
  271. package/dist/commands/dev/sprint/list.js.map +1 -0
  272. package/dist/commands/dev/task/block.d.ts +29 -0
  273. package/dist/commands/dev/task/block.d.ts.map +1 -0
  274. package/dist/commands/dev/task/block.js +106 -0
  275. package/dist/commands/dev/task/block.js.map +1 -0
  276. package/dist/commands/dev/task/done.d.ts +30 -0
  277. package/dist/commands/dev/task/done.d.ts.map +1 -0
  278. package/dist/commands/dev/task/done.js +113 -0
  279. package/dist/commands/dev/task/done.js.map +1 -0
  280. package/dist/commands/dev/task/list.d.ts +42 -0
  281. package/dist/commands/dev/task/list.d.ts.map +1 -0
  282. package/dist/commands/dev/task/list.js +227 -0
  283. package/dist/commands/dev/task/list.js.map +1 -0
  284. package/dist/commands/dev/task/start.d.ts +29 -0
  285. package/dist/commands/dev/task/start.d.ts.map +1 -0
  286. package/dist/commands/dev/task/start.js +90 -0
  287. package/dist/commands/dev/task/start.js.map +1 -0
  288. package/dist/commands/doc/get.d.ts +46 -0
  289. package/dist/commands/doc/get.d.ts.map +1 -0
  290. package/dist/commands/doc/get.js +95 -0
  291. package/dist/commands/doc/get.js.map +1 -0
  292. package/dist/commands/doc/list.d.ts +83 -0
  293. package/dist/commands/doc/list.d.ts.map +1 -0
  294. package/dist/commands/doc/list.js +248 -0
  295. package/dist/commands/doc/list.js.map +1 -0
  296. package/dist/commands/emit.d.ts.map +1 -1
  297. package/dist/commands/emit.js +5 -3
  298. package/dist/commands/emit.js.map +1 -1
  299. package/dist/commands/index.d.ts.map +1 -1
  300. package/dist/commands/index.js +141 -0
  301. package/dist/commands/index.js.map +1 -1
  302. package/dist/commands/item/archive.d.ts.map +1 -1
  303. package/dist/commands/item/archive.js +11 -0
  304. package/dist/commands/item/archive.js.map +1 -1
  305. package/dist/commands/item/clear.d.ts.map +1 -1
  306. package/dist/commands/item/clear.js +15 -0
  307. package/dist/commands/item/clear.js.map +1 -1
  308. package/dist/commands/item/create.d.ts.map +1 -1
  309. package/dist/commands/item/create.js +41 -8
  310. package/dist/commands/item/create.js.map +1 -1
  311. package/dist/commands/item/delete.d.ts.map +1 -1
  312. package/dist/commands/item/delete.js +11 -0
  313. package/dist/commands/item/delete.js.map +1 -1
  314. package/dist/commands/item/duplicate.d.ts.map +1 -1
  315. package/dist/commands/item/duplicate.js +12 -0
  316. package/dist/commands/item/duplicate.js.map +1 -1
  317. package/dist/commands/item/history.d.ts +60 -0
  318. package/dist/commands/item/history.d.ts.map +1 -0
  319. package/dist/commands/item/history.js +309 -0
  320. package/dist/commands/item/history.js.map +1 -0
  321. package/dist/commands/item/list.d.ts.map +1 -1
  322. package/dist/commands/item/list.js +16 -13
  323. package/dist/commands/item/list.js.map +1 -1
  324. package/dist/commands/item/move.d.ts.map +1 -1
  325. package/dist/commands/item/move.js +41 -7
  326. package/dist/commands/item/move.js.map +1 -1
  327. package/dist/commands/item/search.d.ts +99 -15
  328. package/dist/commands/item/search.d.ts.map +1 -1
  329. package/dist/commands/item/search.js +480 -36
  330. package/dist/commands/item/search.js.map +1 -1
  331. package/dist/commands/item/set.d.ts.map +1 -1
  332. package/dist/commands/item/set.js +52 -8
  333. package/dist/commands/item/set.js.map +1 -1
  334. package/dist/commands/item/time-track/start.d.ts +61 -0
  335. package/dist/commands/item/time-track/start.d.ts.map +1 -0
  336. package/dist/commands/item/time-track/start.js +138 -0
  337. package/dist/commands/item/time-track/start.js.map +1 -0
  338. package/dist/commands/item/time-track/stop.d.ts +32 -0
  339. package/dist/commands/item/time-track/stop.d.ts.map +1 -0
  340. package/dist/commands/item/time-track/stop.js +97 -0
  341. package/dist/commands/item/time-track/stop.js.map +1 -0
  342. package/dist/commands/item/update.d.ts +2 -0
  343. package/dist/commands/item/update.d.ts.map +1 -1
  344. package/dist/commands/item/update.js +164 -113
  345. package/dist/commands/item/update.js.map +1 -1
  346. package/dist/commands/item/upload.d.ts +108 -0
  347. package/dist/commands/item/upload.d.ts.map +1 -0
  348. package/dist/commands/item/upload.js +370 -0
  349. package/dist/commands/item/upload.js.map +1 -0
  350. package/dist/commands/item/upsert.d.ts.map +1 -1
  351. package/dist/commands/item/upsert.js +48 -1
  352. package/dist/commands/item/upsert.js.map +1 -1
  353. package/dist/commands/item/watch.d.ts +90 -0
  354. package/dist/commands/item/watch.d.ts.map +1 -0
  355. package/dist/commands/item/watch.js +342 -0
  356. package/dist/commands/item/watch.js.map +1 -0
  357. package/dist/commands/notification/send.d.ts +60 -0
  358. package/dist/commands/notification/send.d.ts.map +1 -0
  359. package/dist/commands/notification/send.js +147 -0
  360. package/dist/commands/notification/send.js.map +1 -0
  361. package/dist/commands/parse-argv.d.ts.map +1 -1
  362. package/dist/commands/parse-argv.js +14 -4
  363. package/dist/commands/parse-argv.js.map +1 -1
  364. package/dist/commands/raw/index.d.ts.map +1 -1
  365. package/dist/commands/raw/index.js +13 -15
  366. package/dist/commands/raw/index.js.map +1 -1
  367. package/dist/commands/run-by-id-lookup.d.ts.map +1 -1
  368. package/dist/commands/run-by-id-lookup.js +2 -2
  369. package/dist/commands/run-by-id-lookup.js.map +1 -1
  370. package/dist/commands/schema/index.d.ts +2 -0
  371. package/dist/commands/schema/index.d.ts.map +1 -1
  372. package/dist/commands/status.d.ts +120 -0
  373. package/dist/commands/status.d.ts.map +1 -0
  374. package/dist/commands/status.js +365 -0
  375. package/dist/commands/status.js.map +1 -0
  376. package/dist/commands/update/body-source.d.ts.map +1 -1
  377. package/dist/commands/update/body-source.js +2 -2
  378. package/dist/commands/update/body-source.js.map +1 -1
  379. package/dist/commands/update/create.d.ts +2 -3
  380. package/dist/commands/update/create.d.ts.map +1 -1
  381. package/dist/commands/update/create.js +15 -3
  382. package/dist/commands/update/create.js.map +1 -1
  383. package/dist/commands/update/delete.d.ts.map +1 -1
  384. package/dist/commands/update/delete.js +11 -0
  385. package/dist/commands/update/delete.js.map +1 -1
  386. package/dist/commands/update/edit.d.ts.map +1 -1
  387. package/dist/commands/update/edit.js +11 -0
  388. package/dist/commands/update/edit.js.map +1 -1
  389. package/dist/commands/update/list.d.ts.map +1 -1
  390. package/dist/commands/update/list.js +15 -12
  391. package/dist/commands/update/list.js.map +1 -1
  392. package/dist/commands/update/reply.d.ts.map +1 -1
  393. package/dist/commands/update/reply.js +11 -0
  394. package/dist/commands/update/reply.js.map +1 -1
  395. package/dist/commands/update/toggle.d.ts.map +1 -1
  396. package/dist/commands/update/toggle.js +13 -0
  397. package/dist/commands/update/toggle.js.map +1 -1
  398. package/dist/commands/update/upload.d.ts +69 -0
  399. package/dist/commands/update/upload.d.ts.map +1 -0
  400. package/dist/commands/update/upload.js +235 -0
  401. package/dist/commands/update/upload.js.map +1 -0
  402. package/dist/commands/usage.d.ts +58 -0
  403. package/dist/commands/usage.d.ts.map +1 -0
  404. package/dist/commands/usage.js +94 -0
  405. package/dist/commands/usage.js.map +1 -0
  406. package/dist/commands/webhook/create.d.ts +74 -0
  407. package/dist/commands/webhook/create.d.ts.map +1 -0
  408. package/dist/commands/webhook/create.js +150 -0
  409. package/dist/commands/webhook/create.js.map +1 -0
  410. package/dist/commands/webhook/delete.d.ts +46 -0
  411. package/dist/commands/webhook/delete.d.ts.map +1 -0
  412. package/dist/commands/webhook/delete.js +141 -0
  413. package/dist/commands/webhook/delete.js.map +1 -0
  414. package/dist/commands/webhook/list.d.ts +23 -0
  415. package/dist/commands/webhook/list.d.ts.map +1 -0
  416. package/dist/commands/webhook/list.js +68 -0
  417. package/dist/commands/webhook/list.js.map +1 -0
  418. package/dist/commands/workspace/create.d.ts.map +1 -1
  419. package/dist/commands/workspace/create.js +16 -0
  420. package/dist/commands/workspace/create.js.map +1 -1
  421. package/dist/commands/workspace/delete.d.ts.map +1 -1
  422. package/dist/commands/workspace/delete.js +13 -13
  423. package/dist/commands/workspace/delete.js.map +1 -1
  424. package/dist/commands/workspace/list.d.ts +1 -1
  425. package/dist/commands/workspace/update.d.ts.map +1 -1
  426. package/dist/commands/workspace/update.js +15 -15
  427. package/dist/commands/workspace/update.js.map +1 -1
  428. package/dist/config/credentials.d.ts +189 -0
  429. package/dist/config/credentials.d.ts.map +1 -0
  430. package/dist/config/credentials.js +300 -0
  431. package/dist/config/credentials.js.map +1 -0
  432. package/dist/config/profiles.d.ts +125 -0
  433. package/dist/config/profiles.d.ts.map +1 -0
  434. package/dist/config/profiles.js +227 -0
  435. package/dist/config/profiles.js.map +1 -0
  436. package/dist/types/global-flags.d.ts +1 -1
  437. package/dist/types/global-flags.d.ts.map +1 -1
  438. package/dist/types/global-flags.js +28 -16
  439. package/dist/types/global-flags.js.map +1 -1
  440. package/dist/types/ids.d.ts +4 -0
  441. package/dist/types/ids.d.ts.map +1 -1
  442. package/dist/types/ids.js +12 -3
  443. package/dist/types/ids.js.map +1 -1
  444. package/dist/utils/errors.d.ts +57 -3
  445. package/dist/utils/errors.d.ts.map +1 -1
  446. package/dist/utils/errors.js +69 -2
  447. package/dist/utils/errors.js.map +1 -1
  448. package/dist/utils/fs.d.ts +35 -0
  449. package/dist/utils/fs.d.ts.map +1 -0
  450. package/dist/utils/fs.js +36 -0
  451. package/dist/utils/fs.js.map +1 -0
  452. package/dist/utils/json.d.ts +60 -0
  453. package/dist/utils/json.d.ts.map +1 -0
  454. package/dist/utils/json.js +86 -0
  455. package/dist/utils/json.js.map +1 -0
  456. package/dist/utils/mime.d.ts +24 -0
  457. package/dist/utils/mime.d.ts.map +1 -0
  458. package/dist/utils/mime.js +64 -0
  459. package/dist/utils/mime.js.map +1 -0
  460. package/dist/utils/output/envelope.d.ts +30 -0
  461. package/dist/utils/output/envelope.d.ts.map +1 -1
  462. package/dist/utils/output/envelope.js +26 -0
  463. package/dist/utils/output/envelope.js.map +1 -1
  464. package/dist/utils/output/ndjson.d.ts +90 -3
  465. package/dist/utils/output/ndjson.d.ts.map +1 -1
  466. package/dist/utils/output/ndjson.js +33 -0
  467. package/dist/utils/output/ndjson.js.map +1 -1
  468. package/dist/utils/redact.d.ts.map +1 -1
  469. package/dist/utils/redact.js +31 -0
  470. package/dist/utils/redact.js.map +1 -1
  471. package/dist/utils/signal.d.ts +42 -0
  472. package/dist/utils/signal.d.ts.map +1 -0
  473. package/dist/utils/signal.js +45 -0
  474. package/dist/utils/signal.js.map +1 -0
  475. package/package.json +2 -1
  476. package/dist/commands/account/client-helper.d.ts +0 -37
  477. package/dist/commands/account/client-helper.d.ts.map +0 -1
  478. package/dist/commands/account/client-helper.js +0 -55
  479. package/dist/commands/account/client-helper.js.map +0 -1
package/README.md CHANGED
@@ -18,7 +18,7 @@ AI coding agents need to operate on real tickets. Monday.com has a
18
18
  GraphQL API, but each agent learning that schema from scratch is
19
19
  wasteful — and the API is sharp-edged (40+ column types, idiosyncratic
20
20
  mutation shapes, complex pagination). `monday-cli` is the abstraction:
21
- **one stable contract** (universal envelope, 27 stable error codes,
21
+ **one stable contract** (universal envelope, 29 stable error codes,
22
22
  JSON Schema introspection) that every agent can target.
23
23
 
24
24
  - **Agent-first ergonomics.** `--json` everywhere, stable
@@ -47,29 +47,76 @@ Requires **Node.js ≥ 22**.
47
47
  ```bash
48
48
  # 1. Set your Monday API token (admin or member; guests can't mint one).
49
49
  # Get one at https://<your-org>.monday.com/admin/integrations/api
50
+ #
51
+ # OAuth login (`monday auth login`) is registered but deferred in
52
+ # v0.4.0 — the verb surfaces a clear `usage_error.details.reason:
53
+ # oauth_unregistered` pointing here. Authenticate via the env var.
50
54
  export MONDAY_API_TOKEN="<your-token>"
51
55
 
52
- # 2. Smoke test
56
+ # 2. Smoke test — confirm the token works.
53
57
  monday account whoami --json
54
58
 
55
- # 3. List a board's items (replace 12345 with your board ID)
59
+ # 3. Install shell completion (v0.4-M33 bash / zsh / fish).
60
+ # The default mode emits raw script bytes on stdout (so the redirect
61
+ # works); `--json` opts INTO the §6 envelope.
62
+ monday completion bash >> ~/.bashrc # or .zshrc / config.fish
63
+
64
+ # 4. Is everything wired up? (v0.3 diagnostics cluster)
65
+ monday status --json # 7-probe DNS/TCP/TLS/auth/cache matrix
66
+ monday usage --json # remaining daily Monday API operations
67
+
68
+ # 5. List a board's items (replace 12345 with your board ID)
56
69
  monday item list --board 12345 --json
57
70
 
58
- # 4. File a new task (v0.2)
71
+ # 6. File a new task (v0.2)
59
72
  monday item create --board 12345 --name "Refactor login" \
60
73
  --set status=Backlog --set 'Due date'=+1w --json
61
74
 
62
- # 5. Find-or-create with idempotent matching (v0.2)
63
- # Re-running with the same args is safe 0/1/2+ matches route to
64
- # create / update / `ambiguous_match` (the 27th stable error code).
75
+ # 7. Long-poll for activity on an item (v0.4-M29 — NDJSON stream).
76
+ # Per-event NDJSON record + a `{"_meta": {...}}` trailer carrying
77
+ # the session counters. Use `--once` to drain backlog without
78
+ # polling further; SIGINT (Ctrl-C) drains gracefully and exits 130.
79
+ monday item watch 67890 --once # or --max-events 50 --max-duration 1h
80
+
81
+ # 8. Upload a file to a column or update (v0.4-M31 — multipart wire).
82
+ # `add_file_to_column` for item columns; `add_file_to_update` for
83
+ # comment attachments. Both surface `--dry-run` for an envelope
84
+ # preview without the multipart round-trip.
85
+ monday item upload 67890 --column 'Attachments' ./screenshot.png --json
86
+ monday update upload <update-id> ./diagram.png --json
87
+
88
+ # 9. Parallel partial-success bulk updates (v0.4-M30).
89
+ # `--concurrency <N>` (range 1..32) opts into parallel dispatch on
90
+ # the M25 partial-success path. Envelope is byte-equivalent to the
91
+ # sequential `--concurrency 1` default; input order is preserved
92
+ # in `data.results[]` regardless of completion order.
93
+ monday item update --where status=Backlog --set status='Working on it' \
94
+ --board 12345 --yes --continue-on-error --concurrency 4 --json
95
+
96
+ # 10. Browse the workdocs surface (v0.4-M32 — read-only at v0.4).
97
+ monday doc list --workspace 5 --order-by used_at --limit 10 --json
98
+ monday doc get 88001 --json # full Document with blocks
99
+
100
+ # 11. Find-or-create with idempotent matching (v0.2)
101
+ # Re-running with the same args is safe — 0/1/2+ matches route to
102
+ # create / update / `ambiguous_match` (one of the 29 stable error codes).
65
103
  monday item upsert --board 12345 --name "Refactor login" \
66
104
  --match-by name --set status='Working on it' --json
67
105
 
68
- # 6. Move a ticket forward
106
+ # 12. Move a ticket forward, then comment on it
69
107
  monday item set 67890 status=Done --json
70
-
71
- # 7. Comment on it
72
108
  monday update create 67890 --body "Shipped in PR #1234" --json
109
+
110
+ # 13. Monday Dev convention layer (v0.3 — sprint/epic/release/task)
111
+ # First-time setup auto-detects boards by Monday's stock template names.
112
+ monday dev discover --apply --json # writes ~/.monday-cli/config.toml
113
+ monday dev sprint current --json # the active sprint
114
+ monday dev task list --mine --json # my open tasks
115
+
116
+ # 14. Outbound writes (v0.3 — webhooks + notifications)
117
+ monday webhook list 12345 --json
118
+ monday notification send --user 7 --target 67890 \
119
+ --target-type item --text "PTAL" --json
73
120
  ```
74
121
 
75
122
  ## Usage
@@ -135,7 +182,7 @@ Every JSON response uses the same universal envelope:
135
182
  "meta": {
136
183
  "schema_version": "1",
137
184
  "api_version": "2026-01",
138
- "cli_version": "0.2.0",
185
+ "cli_version": "0.4.0",
139
186
  "request_id": "0e6f1a7b-...",
140
187
  "source": "live",
141
188
  "cache_age_seconds": null,
@@ -186,10 +233,12 @@ If you're an AI coding agent driving this CLI:
186
233
  inside an agent harness. `--json` is an alias for
187
234
  `--output json` and forces JSON on every command. JSON is
188
235
  never truncated; tables are.
189
- 2. **Branch on `error.code`, not `error.message`.** The 27 stable
236
+ 2. **Branch on `error.code`, not `error.message`.** The 29 stable
190
237
  codes (`not_found`, `confirmation_required`, `column_archived`,
191
238
  `unsupported_column_type`, `rate_limited`, `stale_cursor`,
192
- `ambiguous_match`, …) are part of the contract. Messages are not.
239
+ `ambiguous_match`, `tag_not_found`, `oauth_failed`, …) are
240
+ part of the contract.
241
+ Messages are not.
193
242
  3. **Read `meta.source`** to know whether the data is
194
243
  `"live"` / `"cache"` / `"mixed"` / `"none"`. `"mixed"` means
195
244
  board metadata came from cache while the rest hit live —
@@ -233,19 +282,58 @@ See [`.env.example`](./.env.example) for all supported variables
233
282
 
234
283
  ## Scope
235
284
 
236
- **v0.2.0 (published) ships:** the v0.1 read-only core +
237
- safe-mutations surface PLUS the full mutation surface (item
238
- lifecycle, update mutations, workspace lifecycle, board
239
- lifecycle, board columns + groups). Built incrementally across
240
- M8–M18; one breaking change vs v0.1 (see
285
+ **v0.4.0 (current `monday-cli@0.4.0` on npm):**
286
+ the v0.3 surface PLUS long-poll item activity streaming
287
+ (`monday item watch <iid>` — NDJSON), parallel bulk dispatch
288
+ (`monday item update --where ... --concurrency <N>`), asset uploads
289
+ (`monday item upload` / `monday update upload` — multipart wire),
290
+ Monday workdocs reads (`monday doc list` / `monday doc get` — full
291
+ workdocs CRUD mutation surface deferred to v0.5), and shell
292
+ completion (`monday completion bash|zsh|fish`). **No breaking
293
+ changes vs v0.3.0** — every v0.4 surface is additive. Built
294
+ incrementally across M29–M33. See [CHANGELOG.md](./CHANGELOG.md)
295
+ for the full per-milestone release notes.
296
+
297
+ **OAuth deferral (unchanged from v0.3.0).** `monday auth login` is
298
+ registered but the canonical Monday OAuth app is not registered in
299
+ v0.4.0; the verb surfaces a clear `usage_error.details.reason:
300
+ oauth_unregistered` pointing at `MONDAY_API_TOKEN`. Multi-profile
301
+ config + per-profile credentials cache work fully against API
302
+ tokens; OAuth registration revisits in v0.4.x / v0.5 contingent on
303
+ user demand.
304
+
305
+ **v0.3.0 (the previous release):**
306
+ the v0.2 mutating core PLUS the Monday Dev convention layer
307
+ (`monday dev` namespace — sprint / epic / release / task workflow
308
+ shortcuts on top of standard board CRUD), multi-profile auth
309
+ (`monday auth login/logout --profile <name>` + `~/.monday-cli/
310
+ config.toml`), diagnostics (`monday status` + `monday usage`),
311
+ cross-board `monday item search` + `monday board favorites`,
312
+ per-item history (`monday item history <iid>`), partial-success
313
+ bulk updates (`monday item update --where ... --continue-on-error`),
314
+ outbound writes (`monday webhook list/create/delete` +
315
+ `monday notification send`), and three new writable column types
316
+ (`tags`, `board_relation`, `dependency`) closing the v0.2
317
+ tentative-row carryover. **No breaking changes vs v0.2.0** — every
318
+ v0.3 surface is additive. Built incrementally across M19–M28.
319
+
320
+ **v0.2.0 (the prior release):**
321
+ the v0.1 read-only core + safe-mutations surface PLUS the full
322
+ mutation surface (item lifecycle, update mutations, workspace
323
+ lifecycle, board lifecycle, board columns + groups). Built
324
+ incrementally across M8–M18; one breaking change vs v0.1 (see
241
325
  [CHANGELOG.md](./CHANGELOG.md) for the full upgrade guide).
242
326
 
243
- **v0.1.0 (published) shipped:** read-only core (account, workspace,
327
+ **v0.1.0 (git tag, foundation milestone not published to npm
328
+ under the `monday-cli` name):** read-only core (account, workspace,
244
329
  board, user, update, item) + safe mutations (`item set` /
245
330
  `item clear` / `item update` single + bulk, `update create`) +
246
331
  diagnostics (`board doctor`) + GraphQL escape hatch (`raw`) +
247
332
  filter DSL (`--where` + `--filter-json`) + cursor pagination with
248
- stale-cursor fail-fast + NDJSON streaming + local cache.
333
+ stale-cursor fail-fast + NDJSON streaming + local cache. v0.1.0
334
+ shipped to `main` as the foundation milestone but the npm publish
335
+ slipped to v0.2.0; the v0.1 surface is fully present in the
336
+ published v0.2.0 tarball.
249
337
 
250
338
  **What v0.2 added:**
251
339
 
@@ -308,7 +396,8 @@ stale-cursor fail-fast + NDJSON streaming + local cache.
308
396
  **Writer allowlist** (other types return `unsupported_column_type`
309
397
  with per-category guidance):
310
398
  `status`, `text`, `long_text`, `numbers`, `dropdown`, `date`,
311
- `people`, plus M8 firm row `link`, `email`, `phone`.
399
+ `people`, plus M8 firm row `link`, `email`, `phone`, plus v0.3-M19
400
+ row `tags`, `board_relation`, `dependency`.
312
401
 
313
402
  - **M13** ships the full update mutation surface — `monday update
314
403
  reply` / `edit` / `delete` / `like` / `unlike` / `pin` / `unpin`
@@ -365,14 +454,114 @@ with per-category guidance):
365
454
  audit, README quickstart with `item create` + `item upsert`
366
455
  examples, this CHANGELOG, and the version bump to `0.2.0`.
367
456
 
368
- **Deferred to v0.3+:** `tags` / `board_relation` / `dependency`
369
- friendly translators (slipped from v0.2 tentative at M18 close
370
- per cli-design §13 + §5.3; usable today via `--set-raw`),
371
- `monday dev` workflow shortcuts, multi-level subitem creation.
372
- **v0.4:** `monday item watch`, `--concurrency`, asset uploads.
457
+ **What v0.3 added (M19–M28; full per-milestone narrative in
458
+ [CHANGELOG.md](./CHANGELOG.md)):**
459
+
460
+ - **M19** `tags`, `board_relation`, `dependency` friendly
461
+ `--set` translators (closes the v0.2 tentative-row carryover);
462
+ `monday account tags` read verb closes the `tag_not_found.
463
+ details.hint` forward-reference.
464
+ - **M20** — `monday item time-track start/stop <iid>` registered
465
+ for forward-compatibility (documentation-only; throw
466
+ `usage_error` today — empirical probe 2026-05-10 confirmed
467
+ Monday's API doesn't currently expose time-tracking writes).
468
+ - **M21 + M28** — multi-profile auth via `~/.monday-cli/
469
+ config.toml` + `--profile <name>` global flag; per-profile
470
+ credentials cache at `~/.monday-cli/credentials` (mode 0600).
471
+ `monday auth login` is registered but the canonical OAuth app
472
+ is not registered in v0.3.0 — the verb surfaces `usage_error.
473
+ details.reason: oauth_unregistered` pointing at
474
+ `MONDAY_API_TOKEN`. Multi-profile config + per-profile token
475
+ caching work fully today.
476
+ - **M22** — `monday status` (7-probe DNS/TCP/TLS/auth/cache/
477
+ redaction/env-var matrix per cli-design §11.5) + `monday usage`
478
+ (daily Monday API operation budget remaining from
479
+ `platform_api.daily_*`).
480
+ - **M23** — Cross-board `monday item search` (omit `--board`;
481
+ scope via `--workspace` / `--favorites` / `--max-boards`) +
482
+ `monday board favorites` (the current user's starred boards).
483
+ - **M24** — `monday item history <iid>` (two-source chronological
484
+ merge: `activity_logs` + `updates`; per-event typed projection
485
+ for `update_column_value`, synthesized `update_posted` /
486
+ `update_replied` from the updates source).
487
+ - **M25** — `monday item update --where ... --continue-on-error`
488
+ attempts every matched item regardless of per-item failure;
489
+ emits a partial-success envelope with `data.summary.
490
+ failed_count` + per-item `data.results[]`. Orthogonal to
491
+ `--yes`.
492
+ - **M26** — `monday dev` namespace (sprint / epic / release /
493
+ task workflow shortcuts on top of standard board CRUD). Three
494
+ setup verbs (`dev discover [--apply]` / `dev configure` /
495
+ `dev doctor`) + 10 workflow verbs. Per-profile board mapping
496
+ in `[profiles.<name>.dev]`.
497
+ - **M27** — Outbound writes: `monday webhook list/create/delete`
498
+ (live-only; webhooks land on the user's own HTTPS endpoint —
499
+ the CLI never receives) + `monday notification send`
500
+ (single-recipient at v0.3).
501
+ - **M28** — 0.3.0 release prep. Multi-level subitem creation
502
+ deferred out of v0.3 per Decision 11 (Monday's `sub_items_board`
503
+ carries no `subtasks` column at API `2026-01`).
504
+
505
+ **What v0.4 added (M29–M33; full per-milestone narrative in
506
+ [CHANGELOG.md](./CHANGELOG.md)):**
507
+
508
+ - **M29** — `monday item watch <iid>` long-polls `boards.activity_
509
+ logs(item_ids:)` for per-item event streaming. NDJSON output:
510
+ one event record per emitted activity-log row + a trailing
511
+ `{"_meta": {...}}` record carrying the seven session counters
512
+ (`events_emitted` / `polls_made` / `failed_polls` /
513
+ `last_seen_event_id` / `circuit_broken_at` / `exit_reason` /
514
+ `watch_duration_seconds`). `--once` drains backlog and exits
515
+ without polling further; `--max-events` / `--max-duration`
516
+ ceilings exit cleanly; SIGINT drains gracefully + exits 130.
517
+ Circuit-breaker trips after 5 consecutive `complexity_exceeded`
518
+ polls.
519
+ - **M30** — `monday item update --where ... --concurrency <N>`
520
+ (range 1..32; default 1) opts into bounded parallel dispatch on
521
+ the M25 partial-success path. Envelope is byte-equivalent to the
522
+ sequential default; input order is preserved in `data.results[]`
523
+ regardless of completion order. `--concurrency 1` routes through
524
+ `dispatchSequential`; `> 1` routes through `dispatchParallel`.
525
+ - **M31** — `monday item upload <iid> --column <col> <file>` +
526
+ `monday update upload <update-id> <file>` ship the first multipart
527
+ wire surface (`add_file_to_column` / `add_file_to_update`). Both
528
+ surface `--dry-run` for a planned-change envelope preview without
529
+ the multipart round-trip. Uploads are non-idempotent (each
530
+ successful call mints a fresh `Asset` ID); cache invalidation
531
+ fires single-leg on success. Read-side `item assets` / `update
532
+ assets` verbs deferred to v0.4.x per M31 Decision D6.
533
+ - **M32** — `monday doc list [--workspace <wid>,...] [--order-by
534
+ <created_at|used_at>] [--limit <n>] [--page <n>]` + `monday doc
535
+ get <did>` ship read-only access to Monday's workdocs surface
536
+ (`Query.docs(...)`). Page/limit pagination (no cursor on this
537
+ Monday surface). The full workdocs CRUD mutation surface (9
538
+ mutations: `create_doc` / `update_doc_name` / `delete_doc` /
539
+ `duplicate_doc` / `import_doc_from_html` / `add_content_to_doc_
540
+ from_markdown` / `create_doc_block` / `update_doc_block` /
541
+ `delete_doc_block`) is deferred to v0.5.
542
+ - **M33** — `monday completion <bash|zsh|fish>` ships shell
543
+ completion script generation. The default mode emits raw script
544
+ bytes on stdout regardless of TTY/pipe context (so `monday
545
+ completion bash >> ~/.bashrc` works as a sourceable file —
546
+ cli-design §3.1 #2 raw-bytes carve-out); `--json` opts INTO the
547
+ §6 envelope with `data: { shell, script }`. Hand-rolled per-shell
548
+ templates (commander 14.0.3 ships no built-in completion
549
+ machinery, verified by empirical probe at M33 pre-flight).
550
+
551
+ **v0.5 (next):** `team` writers (deferred from v0.4-M34 at the
552
+ post-v0.4-M33 candidate-selection session), Monday workdocs CRUD
553
+ mutation surface (9 mutations deferred at v0.4-M32 D8 closure),
554
+ multi-level subitems remain conditional on Monday's data model
555
+ surfacing them, cross-board `item move` value-overrides (slipped
556
+ from v0.4 at v0.4 release-prep — Monday's `ColumnMappingInput`
557
+ carries no value slot), and resumable cross-board cursor pagination
558
+ (slipped from v0.4 — per-board cursor-lifetime under aggregation
559
+ needs design work).
560
+
373
561
  See [`docs/cli-design.md`](./docs/cli-design.md) §13 for the
374
- full roadmap and [`docs/v0.2-plan.md`](./docs/v0.2-plan.md) for
375
- the v0.2 milestone history.
562
+ full roadmap, [`docs/v0.4-plan.md`](./docs/v0.4-plan.md) for the
563
+ v0.4 milestone history, [`docs/v0.3-plan.md`](./docs/v0.3-plan.md)
564
+ for v0.3, and [`docs/v0.2-plan.md`](./docs/v0.2-plan.md) for v0.2.
376
565
 
377
566
  See [CHANGELOG.md](./CHANGELOG.md) for the per-release contract.
378
567
 
@@ -380,8 +569,8 @@ See [CHANGELOG.md](./CHANGELOG.md) for the per-release contract.
380
569
 
381
570
  - **[`docs/cli-design.md`](./docs/cli-design.md)** — canonical CLI
382
571
  contract. **Start here** if you want to understand the full
383
- surface, the JSON envelope, error codes, or the v0.1 vs v0.2
384
- split.
572
+ surface, the JSON envelope, error codes, or the per-version
573
+ scope (§13).
385
574
  - [`docs/output-shapes.md`](./docs/output-shapes.md) — per-command
386
575
  output reference with concrete examples.
387
576
  - [`docs/examples.md`](./docs/examples.md) — worked agent sessions.
@@ -416,7 +605,10 @@ The full dev workflow + how to add a new command is in
416
605
  - **No `any`** (lint-enforced).
417
606
  - **Parse at every boundary** with zod.
418
607
  - **Mock at the network boundary, not internal modules.**
419
- - **Branch coverage 94%+ floor.**
608
+ - **Branch coverage 95.45% floor** for branches; 95% floor for
609
+ statements / functions / lines (v0.3-M22 ratcheted branches
610
+ from 94% via an OAuth coverage-push session — see
611
+ `vitest.config.ts`).
420
612
  - **Atomic commits, Conventional Commits.**
421
613
 
422
614
  ## Contributing
@@ -0,0 +1,326 @@
1
+ /**
2
+ * Asset upload surface for the v0.4-M31 `monday item upload` +
3
+ * `monday update upload` verbs (`cli-design.md` §2.2 + §4.3 + §6.4
4
+ * + §13 v0.4 entry; `v0.4-plan.md` §3 M31).
5
+ *
6
+ * **Wire surface (empirical probe 2026-05-13, API `2026-01`).** Two
7
+ * Monday GraphQL multipart mutations land here:
8
+ *
9
+ * - `Mutation.add_file_to_column(column_id: String!, file: File!,
10
+ * item_id: ID!) → Asset` — attaches a file to a `file`-typed
11
+ * column on a specific item. Note **`column_id` is `String!`
12
+ * not `ID!`** (the SDK's column-id surface is consistently
13
+ * `String!` because column IDs are user-defined-looking tokens
14
+ * like `'files'` / `'attachments_3'` rather than numeric).
15
+ * - `Mutation.add_file_to_update(file: File!, update_id: ID!) →
16
+ * Asset` — attaches a file to an Update (comment) record. Item
17
+ * ID is implicit (the update's parent item).
18
+ *
19
+ * Both mutations cross the wire via `multipart/form-data` per the
20
+ * standard GraphQL multipart-request specification (jaydenseric).
21
+ * The `File` scalar is Monday's own (NOT the spec-standard `Upload`);
22
+ * the multipart envelope is otherwise spec-compliant — `operations`
23
+ * + `map` JSON parts + the file part keyed by index `0`.
24
+ *
25
+ * **Asset object — 10 fields.** `id` (ID, non-null), `name` (String,
26
+ * non-null — the multipart `filename` parameter), `url` (String,
27
+ * non-null — direct download), `public_url` (String, non-null —
28
+ * sharable), `file_extension` (String, non-null), `file_size` (Int,
29
+ * non-null — bytes), `created_at` (Date, nullable), `uploaded_by`
30
+ * (User, non-null — the token's owner; projected to the slim
31
+ * `{id, name}` shape for envelope compactness), `original_geometry`
32
+ * (String, nullable — image dimensions like `'1920x1080'`),
33
+ * `url_thumbnail` (String, nullable — image thumbnails only).
34
+ *
35
+ * **R-NEW-41 3rd consumer fires here.** Asset upload is the third
36
+ * site (after M27 `Webhook.config` JSON/String asymmetry + M27
37
+ * `NotificationTargetType` collapse) where the wire-vs-CLI semantics
38
+ * carry a documented asymmetry. This module's transport choice
39
+ * (sibling multipart module, NOT extension of `transport.ts`) is
40
+ * itself the load-bearing asymmetry shape — the JSON envelope's
41
+ * `body: JSON.stringify(...)` invariant doesn't compose with
42
+ * multipart/form-data's `FormData`-driven boundary parameter, so
43
+ * the two transports live in sibling modules with parallel
44
+ * interfaces. See `docs/architecture.md` "Wire-vs-CLI semantics
45
+ * documentation conventions" for the canonical writeup.
46
+ *
47
+ * **No new ERROR_CODES (29 stays).** Asset-upload failures route
48
+ * through the existing codes:
49
+ *
50
+ * - `usage_error` — file path doesn't exist / not readable
51
+ * (`details.reason: 'file_not_readable'`); file is empty
52
+ * (`details.reason: 'file_empty'`); upload exceeded Monday's
53
+ * per-file size limit (Monday surfaces this server-side;
54
+ * `details.reason: 'file_too_large'` rewrap).
55
+ * - `unsupported_column_type` — `--column <col>` resolves to a
56
+ * non-`file` column type. Hint points back at the §5.3 writer
57
+ * surface (Monday writes files via `add_file_to_column` for
58
+ * `file` columns only; other column types route via
59
+ * `change_column_value`).
60
+ * - `not_found` — item / update / column doesn't exist or isn't
61
+ * visible to the token.
62
+ * - `validation_failed` — Monday-side rejection of the upload
63
+ * payload (malformed filename, server-side virus scan flag,
64
+ * etc.).
65
+ * - `forbidden` / `unauthorized` — token lacks asset-write scope.
66
+ *
67
+ * Monday's per-file size cap is plan-tier-dependent and NOT exposed
68
+ * via the schema (verified at M31 pre-flight probe — `Plan` +
69
+ * `Account` carry no file-quota fields). The CLI does NOT pre-check
70
+ * file size against a hardcoded ceiling; Monday's runtime rejection
71
+ * (typically `FILE_SIZE_LIMIT_EXCEEDED` or a generic 413) is rewrapped
72
+ * as `usage_error` with `details.reason: 'file_too_large'` +
73
+ * `details.file_size_bytes` (the local `fs.stat()` measurement
74
+ * captured at upload time — Monday's wire rejection may not surface
75
+ * a size field, but the CLI already has the local size from the
76
+ * read leg and threads it for a stable agent-keyed envelope).
77
+ *
78
+ * **Idempotency: NO.** Each successful upload mints a new Asset
79
+ * with a new ID — re-running `item upload` with the same args
80
+ * uploads the file a second time. Agents needing register-once
81
+ * semantics dedupe on the CLI side (e.g., read `Item.assets` first
82
+ * and skip the upload if a matching `Asset.name` exists).
83
+ *
84
+ * **Status: runtime body shipped at v0.4-M31 IMPL.** Both fetchers
85
+ * dispatch via `inputs.multipart.request(...)` wrapped in
86
+ * `withRetry(...)` per cli-design §2.5; the response-parse boundary
87
+ * uses `mapResponse` (mirroring `MondayClient.raw`'s discipline) +
88
+ * `assertResponseFieldPresent` for the schema-drift / null-payload
89
+ * distinction + `assetSchema.safeParse(...)` via `unwrapOrThrow`
90
+ * for the per-field shape. Server-side size-cap rewrap fires at
91
+ * the error-mapping layer below.
92
+ */
93
+ import { z } from 'zod';
94
+ import type { MondayClient } from './client.js';
95
+ import type { MultipartTransport } from './multipart-transport.js';
96
+ import type { Complexity } from '../utils/output/envelope.js';
97
+ /**
98
+ * Slim projection of Monday's `User` for the `Asset.uploaded_by`
99
+ * slot. Monday's full User type is ~30 fields; the envelope echoes
100
+ * only `id` + `name` (matching the M19 `User`-projection cadence
101
+ * elsewhere in the CLI — `account_tags`, `board describe`'s
102
+ * subscribers, etc.). Future verbs that need wider User detail
103
+ * (`user get <uid>`) read against the full type.
104
+ */
105
+ export declare const uploadedBySchema: z.ZodObject<{
106
+ id: z.ZodString;
107
+ name: z.ZodString;
108
+ }, z.core.$strict>;
109
+ export type UploadedBy = z.infer<typeof uploadedBySchema>;
110
+ /**
111
+ * Asset read-projection shape — surfaces Monday's full 10-field
112
+ * `Asset` object (per `scripts/probe/m31-asset-upload.ts` 2026-05-13,
113
+ * API `2026-01`). The output envelope echoes this verbatim so an
114
+ * agent reading the upload result has every field a follow-up
115
+ * `Query.assets(ids:)` read would surface, plus the inputs the CLI
116
+ * sent (echoed by the caller, not this module).
117
+ *
118
+ * `original_geometry` + `url_thumbnail` are image-only; nullable
119
+ * for non-image uploads. `created_at` is nullable in Monday's
120
+ * schema even though every successful upload sets it (the
121
+ * nullability is preserved for fidelity against the introspected
122
+ * type).
123
+ */
124
+ export declare const assetSchema: z.ZodObject<{
125
+ id: z.ZodString;
126
+ name: z.ZodString;
127
+ url: z.ZodString;
128
+ public_url: z.ZodString;
129
+ file_extension: z.ZodString;
130
+ file_size: z.ZodNumber;
131
+ created_at: z.ZodNullable<z.ZodString>;
132
+ uploaded_by: z.ZodObject<{
133
+ id: z.ZodString;
134
+ name: z.ZodString;
135
+ }, z.core.$strict>;
136
+ original_geometry: z.ZodNullable<z.ZodString>;
137
+ url_thumbnail: z.ZodNullable<z.ZodString>;
138
+ }, z.core.$strict>;
139
+ export type Asset = z.infer<typeof assetSchema>;
140
+ /**
141
+ * Output shape for `monday item upload <iid> --column <col> <file>`.
142
+ * Echoes the wire `Asset` record plus the agent-supplied inputs
143
+ * (`item_id`, `column_id`, `filename`, `file_size_bytes`) so one
144
+ * envelope read carries the full upload context.
145
+ *
146
+ * `file_size_bytes` is the CLI-measured size at upload time (from
147
+ * the local file's `fs.stat()`); `asset.file_size` is Monday's
148
+ * server-stored size (usually identical to `file_size_bytes` but
149
+ * preserved separately for asymmetric-storage-encoding fidelity).
150
+ *
151
+ * `asset` is the canonical wire record; future field additions
152
+ * land additively per the §6.1 envelope evolution rules.
153
+ */
154
+ export declare const itemUploadOutputSchema: z.ZodObject<{
155
+ operation: z.ZodLiteral<"add_file_to_column">;
156
+ item_id: z.ZodString;
157
+ column_id: z.ZodString;
158
+ filename: z.ZodString;
159
+ file_size_bytes: z.ZodNumber;
160
+ asset: z.ZodObject<{
161
+ id: z.ZodString;
162
+ name: z.ZodString;
163
+ url: z.ZodString;
164
+ public_url: z.ZodString;
165
+ file_extension: z.ZodString;
166
+ file_size: z.ZodNumber;
167
+ created_at: z.ZodNullable<z.ZodString>;
168
+ uploaded_by: z.ZodObject<{
169
+ id: z.ZodString;
170
+ name: z.ZodString;
171
+ }, z.core.$strict>;
172
+ original_geometry: z.ZodNullable<z.ZodString>;
173
+ url_thumbnail: z.ZodNullable<z.ZodString>;
174
+ }, z.core.$strict>;
175
+ }, z.core.$strict>;
176
+ export type ItemUploadOutput = z.infer<typeof itemUploadOutputSchema>;
177
+ /**
178
+ * Output shape for `monday update upload <uid> <file>`. Same general
179
+ * shape as `itemUploadOutputSchema` but carries `update_id` instead
180
+ * of `item_id` + `column_id` (an Update record is the target;
181
+ * Monday's `Update.assets` collection grows by one on success).
182
+ */
183
+ export declare const updateUploadOutputSchema: z.ZodObject<{
184
+ operation: z.ZodLiteral<"add_file_to_update">;
185
+ update_id: z.ZodString;
186
+ filename: z.ZodString;
187
+ file_size_bytes: z.ZodNumber;
188
+ asset: z.ZodObject<{
189
+ id: z.ZodString;
190
+ name: z.ZodString;
191
+ url: z.ZodString;
192
+ public_url: z.ZodString;
193
+ file_extension: z.ZodString;
194
+ file_size: z.ZodNumber;
195
+ created_at: z.ZodNullable<z.ZodString>;
196
+ uploaded_by: z.ZodObject<{
197
+ id: z.ZodString;
198
+ name: z.ZodString;
199
+ }, z.core.$strict>;
200
+ original_geometry: z.ZodNullable<z.ZodString>;
201
+ url_thumbnail: z.ZodNullable<z.ZodString>;
202
+ }, z.core.$strict>;
203
+ }, z.core.$strict>;
204
+ export type UpdateUploadOutput = z.infer<typeof updateUploadOutputSchema>;
205
+ /**
206
+ * Mutation document for `add_file_to_column`. Operation name is
207
+ * pinned literally to `AddFileToColumn` and matches the wire
208
+ * `operationName` payload (R-NEW-37 W2 audit-point — caller-
209
+ * overridable operationName slots were closed at M27 IMPL round-1
210
+ * P2-1).
211
+ *
212
+ * `$file: File!` — Monday's own scalar (NOT the spec-standard
213
+ * `Upload!`); the multipart wire dispatcher (`assets.ts`'s caller
214
+ * via `MultipartTransport`) populates this slot via the spec-
215
+ * compliant `map` JSON pointing the file part at `variables.file`.
216
+ *
217
+ * Returns the full 10-field `Asset` selection so the output
218
+ * envelope captures Monday's complete view of the upload in one
219
+ * round-trip (no follow-up `Query.assets(ids:)` re-read needed).
220
+ */
221
+ export declare const ADD_FILE_TO_COLUMN_MUTATION = "\n mutation AddFileToColumn(\n $itemId: ID!,\n $columnId: String!,\n $file: File!\n ) {\n add_file_to_column(\n item_id: $itemId,\n column_id: $columnId,\n file: $file\n ) {\n id\n name\n url\n public_url\n file_extension\n file_size\n created_at\n uploaded_by { id name }\n original_geometry\n url_thumbnail\n }\n }\n";
222
+ /**
223
+ * Mutation document for `add_file_to_update`. Operation name pinned
224
+ * to `AddFileToUpdate` (R-NEW-37 W2). No `column_id` — Updates
225
+ * carry attachments directly via `Update.assets`.
226
+ */
227
+ export declare const ADD_FILE_TO_UPDATE_MUTATION = "\n mutation AddFileToUpdate(\n $updateId: ID!,\n $file: File!\n ) {\n add_file_to_update(\n update_id: $updateId,\n file: $file\n ) {\n id\n name\n url\n public_url\n file_extension\n file_size\n created_at\n uploaded_by { id name }\n original_geometry\n url_thumbnail\n }\n }\n";
228
+ export interface AddFileToColumnInputs {
229
+ readonly client: MondayClient;
230
+ readonly multipart: MultipartTransport;
231
+ readonly itemId: string;
232
+ readonly columnId: string;
233
+ readonly file: Blob;
234
+ readonly filename: string;
235
+ /**
236
+ * **Required** AbortSignal threaded into the multipart wire
237
+ * dispatch via `MultipartTransportRequest.signal` at IMPL.
238
+ * Callers MUST pass the runner's combined signal (`ctx.signal`)
239
+ * explicitly — `MondayClient.signal` is private + multipart
240
+ * dispatch bypasses `MondayClient.raw`, so no implicit fallback
241
+ * exists. Abort propagation follows the standard
242
+ * `--timeout` / SIGINT plumbing (`src/api/transport.ts`'s
243
+ * `combineSignals` mirrors the multipart-transport's own
244
+ * combined-signal logic at IMPL).
245
+ *
246
+ * **Retry semantics pinned (cli-design §2.5).** Asset upload
247
+ * honors the global `--retry <n>` contract: the IMPL session
248
+ * wraps `multipart.request(...)` in `withRetry(...)` using the
249
+ * `retries` value threaded from `client.config`'s retry slot.
250
+ * Re-readability is safe — Web `Blob.stream()` returns a fresh
251
+ * `ReadableStream` per call, so multipart payload assembly can
252
+ * re-execute on each retry attempt without buffering.
253
+ * Retryable conditions match the JSON transport's set
254
+ * (`rate_limited` / `complexity_exceeded` /
255
+ * `concurrency_exceeded` / `ip_rate_limited` /
256
+ * `resource_locked` / `network_error`); non-retryable
257
+ * conditions (`forbidden`, `not_found`, `validation_failed`,
258
+ * `usage_error` with `file_too_large`) surface immediately.
259
+ */
260
+ readonly signal: AbortSignal;
261
+ /**
262
+ * Maximum retry count for transient failures (default
263
+ * `--retry 3`, range `[0, ...]`). Threaded through to
264
+ * `withRetry(...)` at IMPL — same retry layer the JSON
265
+ * transport uses (cli-design §2.5).
266
+ */
267
+ readonly retries: number;
268
+ }
269
+ export interface AddFileToColumnResult {
270
+ readonly asset: Asset;
271
+ readonly source: 'live';
272
+ readonly cacheAgeSeconds: null;
273
+ readonly complexity: Complexity | null;
274
+ }
275
+ export interface AddFileToUpdateInputs {
276
+ readonly client: MondayClient;
277
+ readonly multipart: MultipartTransport;
278
+ readonly updateId: string;
279
+ readonly file: Blob;
280
+ readonly filename: string;
281
+ /**
282
+ * **Required** — same semantics as
283
+ * {@link AddFileToColumnInputs.signal}. Callers MUST pass
284
+ * `ctx.signal` explicitly (no implicit fallback from
285
+ * `client`).
286
+ */
287
+ readonly signal: AbortSignal;
288
+ /**
289
+ * Same semantics as {@link AddFileToColumnInputs.retries} —
290
+ * threaded into `withRetry(...)` around the multipart
291
+ * dispatch at IMPL.
292
+ */
293
+ readonly retries: number;
294
+ }
295
+ export interface AddFileToUpdateResult {
296
+ readonly asset: Asset;
297
+ readonly source: 'live';
298
+ readonly cacheAgeSeconds: null;
299
+ readonly complexity: Complexity | null;
300
+ }
301
+ /**
302
+ * Fires Monday's `add_file_to_column` mutation via the multipart
303
+ * transport (operationName `AddFileToColumn`, pinned literally per
304
+ * R-NEW-37 W2 — NOT caller-overridable). Builds the operations
305
+ * payload with the `file: null` placeholder per the GraphQL
306
+ * multipart-request spec, dispatches through `inputs.multipart` +
307
+ * `withRetry(...)`, parses the response — null `add_file_to_column`
308
+ * → `not_found` with `details.{item_id, column_id}`; non-Asset
309
+ * shape → `internal_error` via `assetSchema.safeParse + unwrapOr
310
+ * Throw`. Server-side size rejections rewrap as `usage_error` with
311
+ * `details.reason: 'file_too_large'` + `details.file_size_bytes`
312
+ * from the caller-supplied local `fs.stat()` measurement (D3).
313
+ *
314
+ * Not idempotent — re-running mints a new `Asset` ID.
315
+ */
316
+ export declare const addFileToColumn: (inputs: AddFileToColumnInputs) => Promise<AddFileToColumnResult>;
317
+ /**
318
+ * Fires Monday's `add_file_to_update` mutation via the multipart
319
+ * transport (operationName `AddFileToUpdate`, pinned literally per
320
+ * R-NEW-37 W2). Mirrors {@link addFileToColumn}'s shape minus the
321
+ * `column_id` slot — Updates carry attachments via `Update.assets`
322
+ * directly. Same response-parse boundary, same `file_too_large`
323
+ * rewrap, same idempotency caveat (re-running mints a new Asset).
324
+ */
325
+ export declare const addFileToUpdate: (inputs: AddFileToUpdateInputs) => Promise<AddFileToUpdateResult>;
326
+ //# sourceMappingURL=assets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../../src/api/assets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2FG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE9D;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB;;;kBAKlB,CAAC;AAEZ,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;kBAab,CAAC;AAEZ,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAEhD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;kBASxB,CAAC;AAEZ,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;kBAQ1B,CAAC;AAEZ,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,2BAA2B,yZAuBvC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,yWAqBvC,CAAC;AAEF,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;CACxC;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B;;;;OAIG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;CACxC;AA4ID;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,eAAe,GAC1B,QAAQ,qBAAqB,KAC5B,OAAO,CAAC,qBAAqB,CA6F/B,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,GAC1B,QAAQ,qBAAqB,KAC5B,OAAO,CAAC,qBAAqB,CAsE/B,CAAC"}