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
@@ -0,0 +1,325 @@
1
+ /**
2
+ * Per-account tag-directory lookup helper for the v0.3-M19 `tags`
3
+ * friendly translator. Mirrors the `userByEmail` user-directory
4
+ * pattern in `src/api/resolvers.ts:191–402` (the existing precedent —
5
+ * there is no standalone `user-directory.ts` module; the user-
6
+ * directory cache / lookup / refresh-on-miss machinery lives inside
7
+ * `resolvers.ts`).
8
+ *
9
+ * **Two surfaces.**
10
+ *
11
+ * - `loadAccountTags({client, env?, noCache?})` — full-directory
12
+ * reader. Cache-then-live: prefers a fresh on-disk
13
+ * `account_tags/index.json` cache entry; falls through to a live
14
+ * `account { tags { id name } }` query on miss / expiry / `noCache`,
15
+ * and writes the response back to the cache. Also exposes
16
+ * `complexity: Complexity | null` for the live-fetch leg, mirroring
17
+ * `BoardMetadataLoadResult` so `monday account tags --verbose` can
18
+ * report budget like other cache-backed reads.
19
+ *
20
+ * - `resolveTags({client, input, env?, noCache?})` — name-list →
21
+ * tag-id resolver. Splits the input on commas, trims, deduplicates,
22
+ * NFC + case-fold matches against the cache; on any miss, refreshes
23
+ * the directory once (live `account.tags` re-fetch) and re-checks.
24
+ * Residual misses surface as `tag_not_found` per cli-design §6.5
25
+ * with `details.tags: misses[]` in array form (Decision 1, closed
26
+ * at `4c652d5`). Returns `{ ids, misses, source, cacheAgeSeconds }`
27
+ * so the caller can populate `meta.source` + `meta.cache_age_seconds`
28
+ * per cli-design §6.1.
29
+ *
30
+ * **Cache shape.** Per-account scope (`{ kind: 'accountTags' }` cache
31
+ * key, no per-board fan-out — Monday's data model scopes tags to the
32
+ * account, not the workspace). On-disk path
33
+ * `account_tags/index.json`; mode `0600` per the cache layer's existing
34
+ * security contract.
35
+ *
36
+ * **Refresh on miss.** A `--set tags=foo` call against a cache that
37
+ * doesn't list `foo` re-fetches the account directory, upserts, and
38
+ * re-checks before surfacing `tag_not_found`. Mirrors the
39
+ * `userByEmail` cache-then-live-refresh-then-error sequence verbatim.
40
+ */
41
+ import { z } from 'zod';
42
+ import { readEntry, resolveCacheRoot, writeEntry, DEFAULT_CACHE_TTL_SECONDS, } from './cache.js';
43
+ import { ApiError } from '../utils/errors.js';
44
+ const DECIMAL_TAG_ID_PATTERN = /^\d+$/u;
45
+ const accountTagSchema = z
46
+ .object({
47
+ id: z.string().regex(DECIMAL_TAG_ID_PATTERN, {
48
+ message: 'tag id must be a decimal non-negative integer string',
49
+ }),
50
+ name: z.string(),
51
+ })
52
+ .strict();
53
+ const accountTagsSchema = z.array(accountTagSchema);
54
+ const ACCOUNT_TAGS_QUERY = `
55
+ query AccountTags {
56
+ account {
57
+ tags {
58
+ id
59
+ name
60
+ }
61
+ }
62
+ }
63
+ `;
64
+ const readDirectoryCache = async (env) => {
65
+ const root = resolveCacheRoot({ env });
66
+ try {
67
+ const hit = await readEntry(root, { kind: 'accountTags' }, (raw) => accountTagsSchema.parse(raw), { ttlSeconds: DEFAULT_CACHE_TTL_SECONDS });
68
+ if (hit === undefined)
69
+ return undefined;
70
+ return { entries: hit.data, ageSeconds: hit.ageSeconds };
71
+ }
72
+ catch {
73
+ // A corrupt or unreadable cache file is non-fatal — the caller
74
+ // will fall through to a live fetch. Same shape `userByEmail`
75
+ // uses (`resolvers.ts:264–266`).
76
+ return undefined;
77
+ }
78
+ };
79
+ const writeDirectoryCache = async (env, entries) => {
80
+ const root = resolveCacheRoot({ env });
81
+ try {
82
+ await writeEntry(root, { kind: 'accountTags' }, entries);
83
+ }
84
+ catch {
85
+ // Best-effort — cache write failures don't block the lookup
86
+ // (mirrors `userByEmail`'s `writeDirectoryCache` policy).
87
+ }
88
+ };
89
+ /**
90
+ * Loads the full per-account tag directory. Used by `monday account
91
+ * tags` (the read verb that resolves the §6.5 `tag_not_found.details
92
+ * .hint` forward-reference) and by `resolveTags`'s refresh-on-miss
93
+ * path. Cache-then-live: prefers a fresh on-disk entry; falls
94
+ * through to a live `account.tags` query on miss / expiry /
95
+ * `noCache`. Cache writes are best-effort (disk full / permission
96
+ * flips don't block the lookup).
97
+ */
98
+ export const loadAccountTags = async (inputs) => {
99
+ /* c8 ignore next — defensive fallback; tests always pass `env`. */
100
+ const env = inputs.env ?? process.env;
101
+ const noCache = inputs.noCache ?? false;
102
+ if (!noCache) {
103
+ const cached = await readDirectoryCache(env);
104
+ if (cached !== undefined) {
105
+ return {
106
+ tags: cached.entries,
107
+ source: 'cache',
108
+ cacheAgeSeconds: cached.ageSeconds,
109
+ complexity: null,
110
+ };
111
+ }
112
+ }
113
+ const response = await inputs.client.raw(ACCOUNT_TAGS_QUERY, undefined, { operationName: 'AccountTags' });
114
+ // Codex post-Commit-5 P1-1 fix: `account === null` is NOT a
115
+ // successful empty directory — it indicates auth/scope/account-
116
+ // shape problems (guest token, disabled account, schema drift).
117
+ // Collapsing it to `[]` would hide the real issue and let later
118
+ // tag writes fail as `tag_not_found` instead of surfacing the
119
+ // account-level problem. Surface as `not_found` matching
120
+ // `account info`'s shape.
121
+ if (response.data.account === null) {
122
+ throw new ApiError('not_found', 'Monday returned no account for the supplied token (guest, ' +
123
+ 'disabled, or restricted-scope token?). The per-account tag ' +
124
+ 'directory cannot be loaded without an account.', {
125
+ details: {
126
+ hint: 'verify the token is for an active account user — try ' +
127
+ '`monday account whoami` to see the resolved identity.',
128
+ },
129
+ });
130
+ }
131
+ const tagsRaw = response.data.account.tags ?? [];
132
+ // Parse-then-wrap (R17 / `validation.md` "Never bubble raw ZodError
133
+ // out of a parse boundary"). Malformed Monday responses surface as
134
+ // typed `internal_error` with `details.issues` rather than a bare
135
+ // ZodError that the runner's catch-all maps to `internal_error` but
136
+ // loses the failing field path.
137
+ const parsed = accountTagsSchema.safeParse(tagsRaw);
138
+ if (!parsed.success) {
139
+ const issues = parsed.error.issues.map((i) => ({
140
+ path: i.path.join('.'),
141
+ message: i.message,
142
+ code: i.code,
143
+ }));
144
+ throw new ApiError('internal_error', `Monday returned a malformed account.tags response — the directory ` +
145
+ `schema rejected the payload at ${issues.length.toString()} ` +
146
+ `issue${issues.length === 1 ? '' : 's'}.`, {
147
+ cause: parsed.error,
148
+ details: {
149
+ issues,
150
+ hint: "this is a data-integrity error in Monday's response (or an " +
151
+ "accountTagsSchema drift); verify the response shape and " +
152
+ "update accountTagsSchema if Monday's contract has changed.",
153
+ },
154
+ });
155
+ }
156
+ const fresh = parsed.data;
157
+ if (!noCache) {
158
+ await writeDirectoryCache(env, fresh);
159
+ }
160
+ return {
161
+ tags: fresh,
162
+ source: 'live',
163
+ cacheAgeSeconds: null,
164
+ complexity: response.complexity,
165
+ };
166
+ };
167
+ /**
168
+ * NFC + case-fold + whitespace-collapse normalisation for tag-name
169
+ * matching. Same rule as `cli-design.md` §5.3 step 2's column-token
170
+ * normalisation — agents learning one rule shouldn't have to learn a
171
+ * different one for tags vs columns vs status labels. A stray
172
+ * trailing space or a `Café` vs `Café` (NFD) variant resolves to the
173
+ * same tag.
174
+ */
175
+ const normaliseFold = (s) => s.normalize('NFC').trim().replace(/\s+/gu, ' ').toLocaleLowerCase('und');
176
+ const matchTags = (entries, inputs) => {
177
+ // Build a lookup table once per match pass. Multiple input tokens
178
+ // matching the same tag entry resolve to the same id (deduplication
179
+ // happens upstream in `resolveTags`).
180
+ const byNormalised = new Map();
181
+ for (const entry of entries) {
182
+ byNormalised.set(normaliseFold(entry.name), entry);
183
+ }
184
+ const ids = [];
185
+ const misses = [];
186
+ for (const input of inputs) {
187
+ const hit = byNormalised.get(normaliseFold(input));
188
+ if (hit === undefined) {
189
+ misses.push(input);
190
+ continue;
191
+ }
192
+ // Decimal regex on the schema gates the `Number()` conversion;
193
+ // safe-integer guard mirrors the people translator's defensive
194
+ // shape (`people.ts:300`).
195
+ const parsed = Number(hit.id);
196
+ /* c8 ignore next 7 — the schema's regex (`/^\d+$/u`) gates entries
197
+ at parse boundary; combined with Number.isSafeInteger this branch
198
+ only fires if Monday surfaces a >2^53 tag id, which exceeds the
199
+ documented cap. Defensive guard for noUncheckedIndexedAccess +
200
+ future-proofing. */
201
+ if (!Number.isSafeInteger(parsed)) {
202
+ throw new ApiError('internal_error', `Monday returned a tag id "${hit.id}" that exceeds the JavaScript ` +
203
+ `safe-integer range (2^53 - 1). Number(id) would lose precision, ` +
204
+ `corrupting the wire payload.`, {
205
+ details: {
206
+ tag_name: hit.name,
207
+ tag_id: hit.id,
208
+ hint: 'this is a data-integrity error in the account-tag ' +
209
+ 'directory; report it at the monday-cli issues tracker.',
210
+ },
211
+ });
212
+ }
213
+ ids.push(parsed);
214
+ }
215
+ return { ids, misses };
216
+ };
217
+ const dedupePreserveOrder = (tokens) => {
218
+ const seen = new Set();
219
+ const out = [];
220
+ for (const token of tokens) {
221
+ const key = normaliseFold(token);
222
+ if (seen.has(key))
223
+ continue;
224
+ seen.add(key);
225
+ out.push(token);
226
+ }
227
+ return out;
228
+ };
229
+ /**
230
+ * Resolves a comma-split tag-name list against the per-account
231
+ * directory. Returns numeric tag IDs for the matched names and
232
+ * carries the misses through so the caller can construct a
233
+ * `tag_not_found` error envelope with `details.tags: misses[]` per
234
+ * cli-design §6.5 (`4c652d5`).
235
+ *
236
+ * **Three-step lookup** mirroring `userByEmail`:
237
+ *
238
+ * 1. Read the on-disk cache (skipped on `noCache`). Match input
239
+ * tokens against cached entries with NFC + case-fold +
240
+ * whitespace-collapse.
241
+ * 2. If any input token misses against the cached set, refresh
242
+ * the directory once via a live `account.tags` query (also
243
+ * skipped on `noCache` — the live leg always runs but the
244
+ * result isn't cached).
245
+ * 3. Match input tokens against the freshly-loaded set. Any
246
+ * residual miss is surfaced as `tag_not_found` (caller's
247
+ * responsibility — this function returns the misses array
248
+ * and the caller decides whether to throw).
249
+ *
250
+ * **Empty input handled by the caller** — this function does not
251
+ * reject an empty input list; `column-values.ts`'s `tags` translator
252
+ * is the boundary that surfaces `usage_error` for `--set tags=""`
253
+ * (mirroring the dropdown / people empty-input contract).
254
+ */
255
+ export const resolveTags = async (inputs) => {
256
+ /* c8 ignore next — defensive fallback; tests always pass `env`. */
257
+ const env = inputs.env ?? process.env;
258
+ const noCache = inputs.noCache ?? false;
259
+ const tokens = inputs.input
260
+ .split(',')
261
+ .map((segment) => segment.trim())
262
+ .filter((segment) => segment.length > 0);
263
+ const dedup = dedupePreserveOrder(tokens);
264
+ // Empty after split+trim+filter+dedup: caller boundary handles. The
265
+ // resolver returns an empty result so the translator can decide
266
+ // (the friendly translator throws usage_error before reaching this
267
+ // function, but this contract stays defensive).
268
+ if (dedup.length === 0) {
269
+ return { ids: [], misses: [], source: 'cache', cacheAgeSeconds: null };
270
+ }
271
+ let cacheHitAge = null;
272
+ let cacheMatched;
273
+ if (!noCache) {
274
+ const cached = await readDirectoryCache(env);
275
+ if (cached !== undefined) {
276
+ cacheHitAge = cached.ageSeconds;
277
+ cacheMatched = matchTags(cached.entries, dedup);
278
+ if (cacheMatched.misses.length === 0) {
279
+ return {
280
+ ids: cacheMatched.ids,
281
+ misses: [],
282
+ source: 'cache',
283
+ cacheAgeSeconds: cached.ageSeconds,
284
+ };
285
+ }
286
+ }
287
+ }
288
+ // Refresh-on-miss: bypass cache and hit live directly, then upsert
289
+ // the fresh entries into the cache. Same shape as `userByEmail`'s
290
+ // `users(emails:)` fallback — the cache may be stale (Monday's UI
291
+ // created a new tag between cache write and this call), so going
292
+ // through `loadAccountTags` would just re-read the same stale
293
+ // cache. The `noCache: true` override forces the live leg.
294
+ const live = await loadAccountTags({
295
+ client: inputs.client,
296
+ env,
297
+ noCache: true,
298
+ });
299
+ // Upsert the freshly-loaded directory into the cache so the next
300
+ // call benefits from the refresh (skipped on `noCache: true` —
301
+ // the agent explicitly disabled cache writes).
302
+ if (!noCache) {
303
+ await writeDirectoryCache(env, live.tags);
304
+ }
305
+ const liveMatched = matchTags(live.tags, dedup);
306
+ // Determine source discriminant. If the cache leg matched some but
307
+ // not all, the result mixes cache + live (we re-matched the entire
308
+ // input against live, so technically the final ids come from live —
309
+ // but we still touched cache, so `mixed` is the honest signal).
310
+ // If the cache leg matched nothing OR was skipped, this is a pure
311
+ // `live` resolution.
312
+ const source = cacheMatched !== undefined && cacheMatched.ids.length > 0 ? 'mixed' : 'live';
313
+ return {
314
+ ids: liveMatched.ids,
315
+ misses: liveMatched.misses,
316
+ source,
317
+ // For `'mixed'`, surface the cache leg's age as the worst-case
318
+ // staleness the agent observed — matches the broader §6.1
319
+ // mixed-source/cache-age contract (`mergeCacheAge` keeps the
320
+ // oldest age across legs that hit cache). For `'live'` (no
321
+ // cache leg fired), null.
322
+ cacheAgeSeconds: source === 'mixed' ? cacheHitAge : null,
323
+ };
324
+ };
325
+ //# sourceMappingURL=tag-directory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tag-directory.js","sourceRoot":"","sources":["../../src/api/tag-directory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,UAAU,EACV,yBAAyB,GAC1B,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAsB9C,MAAM,sBAAsB,GAAG,QAAQ,CAAC;AAExC,MAAM,gBAAgB,GAAG,CAAC;KACvB,MAAM,CAAC;IACN,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,sBAAsB,EAAE;QAC3C,OAAO,EAAE,sDAAsD;KAChE,CAAC;IACF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;CACjB,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;AA8DpD,MAAM,kBAAkB,GAAG;;;;;;;;;CAS1B,CAAC;AAUF,MAAM,kBAAkB,GAAG,KAAK,EAC9B,GAAsB,EAItB,EAAE;IACF,MAAM,IAAI,GAAG,gBAAgB,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IACvC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,SAAS,CACzB,IAAI,EACJ,EAAE,IAAI,EAAE,aAAa,EAAE,EACvB,CAAC,GAAG,EAAE,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,EACrC,EAAE,UAAU,EAAE,yBAAyB,EAAE,CAC1C,CAAC;QACF,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QACxC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,+DAA+D;QAC/D,8DAA8D;QAC9D,iCAAiC;QACjC,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,KAAK,EAC/B,GAAsB,EACtB,OAA8B,EACf,EAAE;IACjB,MAAM,IAAI,GAAG,gBAAgB,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IACvC,IAAI,CAAC;QACH,MAAM,UAAU,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,OAAO,CAAC,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,4DAA4D;QAC5D,0DAA0D;IAC5D,CAAC;AACH,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAClC,MAA6B,EACG,EAAE;IAClC,mEAAmE;IACnE,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACtC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC;IAExC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAC7C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,OAAO;gBACL,IAAI,EAAE,MAAM,CAAC,OAAO;gBACpB,MAAM,EAAE,OAAO;gBACf,eAAe,EAAE,MAAM,CAAC,UAAU;gBAClC,UAAU,EAAE,IAAI;aACjB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,GAAG,CACtC,kBAAkB,EAClB,SAAS,EACT,EAAE,aAAa,EAAE,aAAa,EAAE,CACjC,CAAC;IACF,4DAA4D;IAC5D,gEAAgE;IAChE,gEAAgE;IAChE,gEAAgE;IAChE,8DAA8D;IAC9D,yDAAyD;IACzD,0BAA0B;IAC1B,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QACnC,MAAM,IAAI,QAAQ,CAChB,WAAW,EACX,4DAA4D;YAC1D,6DAA6D;YAC7D,gDAAgD,EAClD;YACE,OAAO,EAAE;gBACP,IAAI,EACF,uDAAuD;oBACvD,uDAAuD;aAC1D;SACF,CACF,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;IACjD,oEAAoE;IACpE,mEAAmE;IACnE,kEAAkE;IAClE,oEAAoE;IACpE,gCAAgC;IAChC,MAAM,MAAM,GAAG,iBAAiB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACpD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC7C,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;YACtB,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,IAAI,EAAE,CAAC,CAAC,IAAI;SACb,CAAC,CAAC,CAAC;QACJ,MAAM,IAAI,QAAQ,CAChB,gBAAgB,EAChB,oEAAoE;YAClE,kCAAkC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG;YAC7D,QAAQ,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,EAC3C;YACE,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,OAAO,EAAE;gBACP,MAAM;gBACN,IAAI,EACF,6DAA6D;oBAC7D,0DAA0D;oBAC1D,4DAA4D;aAC/D;SACF,CACF,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC;IAC1B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACxC,CAAC;IACD,OAAO;QACL,IAAI,EAAE,KAAK;QACX,MAAM,EAAE,MAAM;QACd,eAAe,EAAE,IAAI;QACrB,UAAU,EAAE,QAAQ,CAAC,UAAU;KAChC,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,aAAa,GAAG,CAAC,CAAS,EAAU,EAAE,CAC1C,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAO3E,MAAM,SAAS,GAAG,CAChB,OAA8B,EAC9B,MAAyB,EACZ,EAAE;IACf,kEAAkE;IAClE,oEAAoE;IACpE,sCAAsC;IACtC,MAAM,YAAY,GAAG,IAAI,GAAG,EAAsB,CAAC;IACnD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;IACrD,CAAC;IACD,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;QACnD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnB,SAAS;QACX,CAAC;QACD,+DAA+D;QAC/D,+DAA+D;QAC/D,2BAA2B;QAC3B,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC9B;;;;8BAIsB;QACtB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,QAAQ,CAChB,gBAAgB,EAChB,6BAA6B,GAAG,CAAC,EAAE,gCAAgC;gBACjE,kEAAkE;gBAClE,8BAA8B,EAChC;gBACE,OAAO,EAAE;oBACP,QAAQ,EAAE,GAAG,CAAC,IAAI;oBAClB,MAAM,EAAE,GAAG,CAAC,EAAE;oBACd,IAAI,EACF,oDAAoD;wBACpD,wDAAwD;iBAC3D;aACF,CACF,CAAC;QACJ,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnB,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,MAAyB,EAAqB,EAAE;IAC3E,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,EAC9B,MAAyB,EACG,EAAE;IAC9B,mEAAmE;IACnE,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACtC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC;IACxC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK;SACxB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;SAChC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAE1C,oEAAoE;IACpE,gEAAgE;IAChE,mEAAmE;IACnE,gDAAgD;IAChD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC;IACzE,CAAC;IAED,IAAI,WAAW,GAAkB,IAAI,CAAC;IACtC,IAAI,YAAqC,CAAC;IAC1C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAC7C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;YAChC,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAChD,IAAI,YAAY,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrC,OAAO;oBACL,GAAG,EAAE,YAAY,CAAC,GAAG;oBACrB,MAAM,EAAE,EAAE;oBACV,MAAM,EAAE,OAAO;oBACf,eAAe,EAAE,MAAM,CAAC,UAAU;iBACnC,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,mEAAmE;IACnE,kEAAkE;IAClE,kEAAkE;IAClE,iEAAiE;IACjE,8DAA8D;IAC9D,2DAA2D;IAC3D,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC;QACjC,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,GAAG;QACH,OAAO,EAAE,IAAI;KACd,CAAC,CAAC;IACH,iEAAiE;IACjE,+DAA+D;IAC/D,+CAA+C;IAC/C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;IACD,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAChD,mEAAmE;IACnE,mEAAmE;IACnE,oEAAoE;IACpE,gEAAgE;IAChE,kEAAkE;IAClE,qBAAqB;IACrB,MAAM,MAAM,GACV,YAAY,KAAK,SAAS,IAAI,YAAY,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;IAC/E,OAAO;QACL,GAAG,EAAE,WAAW,CAAC,GAAG;QACpB,MAAM,EAAE,WAAW,CAAC,MAAM;QAC1B,MAAM;QACN,+DAA+D;QAC/D,0DAA0D;QAC1D,6DAA6D;QAC7D,2DAA2D;QAC3D,0BAA0B;QAC1B,eAAe,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI;KACzD,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,165 @@
1
+ /**
2
+ * Time-tracking start/stop verb primitives for the v0.3-M20
3
+ * `monday item time-track start / stop` surface (cli-design §5.2
4
+ * carve-out 2 — verb-shaped column-type extensions surface as
5
+ * `<noun> <subnoun> <verb>`).
6
+ *
7
+ * **Documentation-only verbs at v0.3.** An empirical probe against a
8
+ * real Monday workspace on 2026-05-10 against API version `2026-01`
9
+ * confirmed that Monday's public GraphQL API exposes **no mutation
10
+ * for writing to `time_tracking` columns**:
11
+ *
12
+ * - `change_simple_column_value` rejects every candidate value
13
+ * (`"true"`, `"false"`, `"start"`, `"stop"`) with
14
+ * `CorrectedValueException`. Verbatim Monday response: *"column
15
+ * type DurationColumn is not supporting changing the column
16
+ * value with simple column value, please check our API
17
+ * documentation for the correct data structure for this
18
+ * column."* — paraphrased elsewhere for brevity.
19
+ * - `change_column_value` rejects every candidate JSON shape
20
+ * (`{running:true}`, `{running:false}`, `{started_at}`,
21
+ * `{ended_at}`, `{}`) with `InvalidColumnTypeException`.
22
+ * Verbatim Monday response: *"This column type is not supported
23
+ * yet in the API"* (`actual_type: "DurationColumn"`).
24
+ * - Full mutation-root introspection (152 mutations) found zero
25
+ * time-tracking-related mutations matching
26
+ * `/time|track|session|duration|start|stop|play|pause|timer/i`.
27
+ *
28
+ * The pre-flight contract assumed `change_simple_column_value` would
29
+ * route through; that assumption was empirically wrong. M20 ships the
30
+ * verbs **as documentation-only** so the CLI surface is stable when
31
+ * Monday eventually exposes the underlying mutation: agents can
32
+ * grep for `monday item time-track start` and see a registered verb
33
+ * that today rejects with a clear `usage_error` and a hint pointing
34
+ * at Monday's UI as the only write path.
35
+ *
36
+ * **Two surfaces.**
37
+ *
38
+ * - `startTimeTracking({client, boardId, itemId, columnId, env?})`
39
+ * — when Monday's API supports it, will flip the column from
40
+ * stopped → running. Today, rejects with `usage_error` per the
41
+ * `API_UNSUPPORTED_HINT` constant below.
42
+ * - `stopTimeTracking({client, boardId, itemId, columnId, env?})`
43
+ * — when Monday's API supports it, will flip the column from
44
+ * running → stopped. Today, rejects with the same `usage_error`.
45
+ *
46
+ * The four exported `*Inputs` / `*Result` interfaces are kept verbatim
47
+ * from the pre-flight (`a702af2`) so when Monday ships the mutation,
48
+ * the api-layer change is small: replace the rejection bodies with
49
+ * the actual wire call against the pinned input shape. The
50
+ * `commands/item/time-track/{start,stop}.ts` command files will need
51
+ * follow-up wiring at the same time — column resolution against board
52
+ * metadata, `--dry-run` branching to emit `planned_changes`, and an
53
+ * `emitMutation` call against the primitive's success result.
54
+ *
55
+ * **Decisions 4.1 / 4.2 / 4.3 (v0.3-plan §3 M20)** stay closed but
56
+ * unenforceable today — the verb rejects before any state-machine
57
+ * branch is reachable. They describe the future behavior:
58
+ *
59
+ * - **4.1 — `start` against a running column:** future
60
+ * `usage_error` with `details.running: true` (state-discriminant);
61
+ * hint will point at the stop verb.
62
+ * - **4.2 — `stop` against a non-running column:** future
63
+ * symmetric `usage_error` with `details.running: false`.
64
+ * - **4.3 — Idempotency:** future verbs will be non-idempotent
65
+ * (start opens a new session each time; stop closes the open one
66
+ * — both throw on invalid pre-state).
67
+ *
68
+ * Today, every invocation throws the same `usage_error` regardless
69
+ * of pre-state, so the discriminants don't surface yet.
70
+ *
71
+ * **No cache surface, no board-invalidation fan-out.**
72
+ * `time_tracking` columns don't cache and don't affect board
73
+ * structure; the `env` slot in the inputs is preserved for parity
74
+ * with sibling primitives (test-isolation), not for cache-key
75
+ * resolution.
76
+ */
77
+ import type { MondayClient } from './client.js';
78
+ import type { BoardId, ItemId } from '../types/ids.js';
79
+ /**
80
+ * Inputs to the `startTimeTracking` primitive. Pinned at pre-flight
81
+ * (`a702af2`); kept unchanged so M20-implementation's documentation-
82
+ * only rejection becomes a one-sided swap to a real wire call when
83
+ * Monday ships API support.
84
+ *
85
+ * `client` + `env` are unused today — the rejection is constructed
86
+ * synchronously in the body — but the contract retains them so
87
+ * future implementation has a stable signature.
88
+ */
89
+ export interface StartTimeTrackingInputs {
90
+ readonly client: MondayClient;
91
+ readonly boardId: BoardId;
92
+ readonly itemId: ItemId;
93
+ readonly columnId: string;
94
+ readonly env?: NodeJS.ProcessEnv;
95
+ }
96
+ /**
97
+ * Inputs to the `stopTimeTracking` primitive. Same shape as
98
+ * `StartTimeTrackingInputs` — the verb pair will route through the
99
+ * same `(board_id, item_id, column_id)` triple at the wire layer
100
+ * once Monday exposes the mutation.
101
+ */
102
+ export interface StopTimeTrackingInputs {
103
+ readonly client: MondayClient;
104
+ readonly boardId: BoardId;
105
+ readonly itemId: ItemId;
106
+ readonly columnId: string;
107
+ readonly env?: NodeJS.ProcessEnv;
108
+ }
109
+ /**
110
+ * Result of a `startTimeTracking` call once Monday's API supports
111
+ * time-tracking writes. **Aspirational at v0.3** — the verb rejects
112
+ * today, so this shape never materialises on the wire. Pinned so
113
+ * agents grepping the type surface see the documented future shape.
114
+ *
115
+ * `running: true` is a literal — verb-success implies the column
116
+ * state flipped to running. `startedAt` carries Monday's
117
+ * authoritative session-start timestamp.
118
+ */
119
+ export interface StartTimeTrackingResult {
120
+ readonly itemId: string;
121
+ readonly columnId: string;
122
+ readonly running: true;
123
+ readonly startedAt: string;
124
+ }
125
+ /**
126
+ * Result of a `stopTimeTracking` call once Monday's API supports
127
+ * time-tracking writes. **Aspirational at v0.3** — see
128
+ * `StartTimeTrackingResult`.
129
+ *
130
+ * `startedAt` mirrors `TimeTrackingHistoryItem.started_at` (`null`
131
+ * when Monday omits it on the just-closed session record);
132
+ * `endedAt` is the stop wall-clock; `durationSeconds` is the
133
+ * just-stopped session's duration in seconds, **`null` when
134
+ * `startedAt` is `null`** — SDK 14.0.0 exposes no per-history
135
+ * duration field, so without a `startedAt` the per-session duration
136
+ * is uncomputable.
137
+ */
138
+ export interface StopTimeTrackingResult {
139
+ readonly itemId: string;
140
+ readonly columnId: string;
141
+ readonly running: false;
142
+ readonly startedAt: string | null;
143
+ readonly endedAt: string;
144
+ readonly durationSeconds: number | null;
145
+ }
146
+ /**
147
+ * Documentation-only `start` verb. Rejects with `usage_error` on
148
+ * every invocation; the inputs are echoed in `details` so agents
149
+ * inspecting the envelope can confirm the call site they intended.
150
+ *
151
+ * When Monday ships the underlying mutation, replace the body with
152
+ * the wire call (likely `change_simple_column_value` once Monday
153
+ * extends DurationColumn's accepted-value enum, or a new dedicated
154
+ * `start_time_tracking` mutation if Monday exposes one).
155
+ */
156
+ export declare const startTimeTracking: (inputs: StartTimeTrackingInputs) => Promise<StartTimeTrackingResult>;
157
+ /**
158
+ * Documentation-only `stop` verb. Mirrors `startTimeTracking`'s
159
+ * rejection shape; differs only in the verb name in the
160
+ * envelope's `error.message` (so agents grepping the envelope
161
+ * for "time-track stop" vs "time-track start" can disambiguate
162
+ * the call site they invoked).
163
+ */
164
+ export declare const stopTimeTracking: (inputs: StopTimeTrackingInputs) => Promise<StopTimeTrackingResult>;
165
+ //# sourceMappingURL=time-tracking.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time-tracking.d.ts","sourceRoot":"","sources":["../../src/api/time-tracking.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2EG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAGvD;;;;;;;;;GASG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CAClC;AAED;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CAClC;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CACzC;AAwBD;;;;;;;;;GASG;AACH,eAAO,MAAM,iBAAiB,GAC5B,QAAQ,uBAAuB,KAC9B,OAAO,CAAC,uBAAuB,CAgB/B,CAAC;AAEJ;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,GAC3B,QAAQ,sBAAsB,KAC7B,OAAO,CAAC,sBAAsB,CAgB9B,CAAC"}
@@ -0,0 +1,135 @@
1
+ /**
2
+ * Time-tracking start/stop verb primitives for the v0.3-M20
3
+ * `monday item time-track start / stop` surface (cli-design §5.2
4
+ * carve-out 2 — verb-shaped column-type extensions surface as
5
+ * `<noun> <subnoun> <verb>`).
6
+ *
7
+ * **Documentation-only verbs at v0.3.** An empirical probe against a
8
+ * real Monday workspace on 2026-05-10 against API version `2026-01`
9
+ * confirmed that Monday's public GraphQL API exposes **no mutation
10
+ * for writing to `time_tracking` columns**:
11
+ *
12
+ * - `change_simple_column_value` rejects every candidate value
13
+ * (`"true"`, `"false"`, `"start"`, `"stop"`) with
14
+ * `CorrectedValueException`. Verbatim Monday response: *"column
15
+ * type DurationColumn is not supporting changing the column
16
+ * value with simple column value, please check our API
17
+ * documentation for the correct data structure for this
18
+ * column."* — paraphrased elsewhere for brevity.
19
+ * - `change_column_value` rejects every candidate JSON shape
20
+ * (`{running:true}`, `{running:false}`, `{started_at}`,
21
+ * `{ended_at}`, `{}`) with `InvalidColumnTypeException`.
22
+ * Verbatim Monday response: *"This column type is not supported
23
+ * yet in the API"* (`actual_type: "DurationColumn"`).
24
+ * - Full mutation-root introspection (152 mutations) found zero
25
+ * time-tracking-related mutations matching
26
+ * `/time|track|session|duration|start|stop|play|pause|timer/i`.
27
+ *
28
+ * The pre-flight contract assumed `change_simple_column_value` would
29
+ * route through; that assumption was empirically wrong. M20 ships the
30
+ * verbs **as documentation-only** so the CLI surface is stable when
31
+ * Monday eventually exposes the underlying mutation: agents can
32
+ * grep for `monday item time-track start` and see a registered verb
33
+ * that today rejects with a clear `usage_error` and a hint pointing
34
+ * at Monday's UI as the only write path.
35
+ *
36
+ * **Two surfaces.**
37
+ *
38
+ * - `startTimeTracking({client, boardId, itemId, columnId, env?})`
39
+ * — when Monday's API supports it, will flip the column from
40
+ * stopped → running. Today, rejects with `usage_error` per the
41
+ * `API_UNSUPPORTED_HINT` constant below.
42
+ * - `stopTimeTracking({client, boardId, itemId, columnId, env?})`
43
+ * — when Monday's API supports it, will flip the column from
44
+ * running → stopped. Today, rejects with the same `usage_error`.
45
+ *
46
+ * The four exported `*Inputs` / `*Result` interfaces are kept verbatim
47
+ * from the pre-flight (`a702af2`) so when Monday ships the mutation,
48
+ * the api-layer change is small: replace the rejection bodies with
49
+ * the actual wire call against the pinned input shape. The
50
+ * `commands/item/time-track/{start,stop}.ts` command files will need
51
+ * follow-up wiring at the same time — column resolution against board
52
+ * metadata, `--dry-run` branching to emit `planned_changes`, and an
53
+ * `emitMutation` call against the primitive's success result.
54
+ *
55
+ * **Decisions 4.1 / 4.2 / 4.3 (v0.3-plan §3 M20)** stay closed but
56
+ * unenforceable today — the verb rejects before any state-machine
57
+ * branch is reachable. They describe the future behavior:
58
+ *
59
+ * - **4.1 — `start` against a running column:** future
60
+ * `usage_error` with `details.running: true` (state-discriminant);
61
+ * hint will point at the stop verb.
62
+ * - **4.2 — `stop` against a non-running column:** future
63
+ * symmetric `usage_error` with `details.running: false`.
64
+ * - **4.3 — Idempotency:** future verbs will be non-idempotent
65
+ * (start opens a new session each time; stop closes the open one
66
+ * — both throw on invalid pre-state).
67
+ *
68
+ * Today, every invocation throws the same `usage_error` regardless
69
+ * of pre-state, so the discriminants don't surface yet.
70
+ *
71
+ * **No cache surface, no board-invalidation fan-out.**
72
+ * `time_tracking` columns don't cache and don't affect board
73
+ * structure; the `env` slot in the inputs is preserved for parity
74
+ * with sibling primitives (test-isolation), not for cache-key
75
+ * resolution.
76
+ */
77
+ import { ApiError } from '../utils/errors.js';
78
+ /**
79
+ * Hint string shipped on every documentation-only rejection. Names
80
+ * the empirical probe (date + API version + the exact error codes
81
+ * Monday returned for each candidate wire shape) so an agent reading
82
+ * the envelope's `details.hint` can self-verify the limitation
83
+ * without re-running the probe themselves.
84
+ */
85
+ const API_UNSUPPORTED_HINT = "Monday's public GraphQL API does not currently expose a " +
86
+ 'mutation for writing to time_tracking columns. Empirical probe ' +
87
+ '(2026-05-10, API version 2026-01): change_simple_column_value ' +
88
+ "rejects every candidate value with CorrectedValueException " +
89
+ '("DurationColumn does not support simple column value writes"); ' +
90
+ 'change_column_value rejects every candidate JSON shape with ' +
91
+ 'InvalidColumnTypeException ("This column type is not supported ' +
92
+ 'yet in the API"); the mutation root has no time-tracking-' +
93
+ 'related mutation. Use Monday\'s UI to start/stop time-tracking ' +
94
+ 'sessions until Monday ships API support — the verb is ' +
95
+ 'registered for forward-compatibility so agent scripts targeting ' +
96
+ '`monday item time-track start/stop` are stable across the ' +
97
+ 'eventual swap.';
98
+ /**
99
+ * Documentation-only `start` verb. Rejects with `usage_error` on
100
+ * every invocation; the inputs are echoed in `details` so agents
101
+ * inspecting the envelope can confirm the call site they intended.
102
+ *
103
+ * When Monday ships the underlying mutation, replace the body with
104
+ * the wire call (likely `change_simple_column_value` once Monday
105
+ * extends DurationColumn's accepted-value enum, or a new dedicated
106
+ * `start_time_tracking` mutation if Monday exposes one).
107
+ */
108
+ export const startTimeTracking = (inputs) => Promise.reject(new ApiError('usage_error', "`monday item time-track start` is registered for forward-" +
109
+ "compatibility but cannot fire today — Monday's public API " +
110
+ 'does not currently support writing to time_tracking columns.', {
111
+ details: {
112
+ board_id: inputs.boardId,
113
+ item_id: inputs.itemId,
114
+ column_id: inputs.columnId,
115
+ hint: API_UNSUPPORTED_HINT,
116
+ },
117
+ }));
118
+ /**
119
+ * Documentation-only `stop` verb. Mirrors `startTimeTracking`'s
120
+ * rejection shape; differs only in the verb name in the
121
+ * envelope's `error.message` (so agents grepping the envelope
122
+ * for "time-track stop" vs "time-track start" can disambiguate
123
+ * the call site they invoked).
124
+ */
125
+ export const stopTimeTracking = (inputs) => Promise.reject(new ApiError('usage_error', "`monday item time-track stop` is registered for forward-" +
126
+ "compatibility but cannot fire today — Monday's public API " +
127
+ 'does not currently support writing to time_tracking columns.', {
128
+ details: {
129
+ board_id: inputs.boardId,
130
+ item_id: inputs.itemId,
131
+ column_id: inputs.columnId,
132
+ hint: API_UNSUPPORTED_HINT,
133
+ },
134
+ }));
135
+ //# sourceMappingURL=time-tracking.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time-tracking.js","sourceRoot":"","sources":["../../src/api/time-tracking.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2EG;AAIH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAyE9C;;;;;;GAMG;AACH,MAAM,oBAAoB,GACxB,0DAA0D;IAC1D,iEAAiE;IACjE,gEAAgE;IAChE,6DAA6D;IAC7D,kEAAkE;IAClE,8DAA8D;IAC9D,iEAAiE;IACjE,2DAA2D;IAC3D,iEAAiE;IACjE,wDAAwD;IACxD,kEAAkE;IAClE,4DAA4D;IAC5D,gBAAgB,CAAC;AAEnB;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,MAA+B,EACG,EAAE,CACpC,OAAO,CAAC,MAAM,CACZ,IAAI,QAAQ,CACV,aAAa,EACb,2DAA2D;IACzD,4DAA4D;IAC5D,8DAA8D,EAChE;IACE,OAAO,EAAE;QACP,QAAQ,EAAE,MAAM,CAAC,OAAO;QACxB,OAAO,EAAE,MAAM,CAAC,MAAM;QACtB,SAAS,EAAE,MAAM,CAAC,QAAQ;QAC1B,IAAI,EAAE,oBAAoB;KAC3B;CACF,CACF,CACF,CAAC;AAEJ;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,MAA8B,EACG,EAAE,CACnC,OAAO,CAAC,MAAM,CACZ,IAAI,QAAQ,CACV,aAAa,EACb,0DAA0D;IACxD,4DAA4D;IAC5D,8DAA8D,EAChE;IACE,OAAO,EAAE;QACP,QAAQ,EAAE,MAAM,CAAC,OAAO;QACxB,OAAO,EAAE,MAAM,CAAC,MAAM;QACtB,SAAS,EAAE,MAAM,CAAC,QAAQ;QAC1B,IAAI,EAAE,oBAAoB;KAC3B;CACF,CACF,CACF,CAAC"}
@@ -1,4 +1,4 @@
1
- import { ApiError } from '../utils/errors.js';
1
+ import { ApiError, errorCode } from '../utils/errors.js';
2
2
  /**
3
3
  * Builds a `Transport` over `fetch`. Owns:
4
4
  * - `Authorization: <token>` (no `Bearer ` prefix per Monday's API).
@@ -119,8 +119,8 @@ const isAbortError = (err) => {
119
119
  */
120
120
  const describeFetchError = (err) => {
121
121
  if (err instanceof Error) {
122
- const code = err.code;
123
- if (typeof code === 'string') {
122
+ const code = errorCode(err);
123
+ if (code !== undefined) {
124
124
  if (code.startsWith('ENOTFOUND') || code.startsWith('EAI_')) {
125
125
  return 'fetch failed: dns lookup failed';
126
126
  }