monday-cli 0.2.0 → 0.3.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 (418) hide show
  1. package/CHANGELOG.md +324 -2
  2. package/README.md +128 -30
  3. package/dist/api/board-favorites.d.ts +329 -0
  4. package/dist/api/board-favorites.d.ts.map +1 -0
  5. package/dist/api/board-favorites.js +353 -0
  6. package/dist/api/board-favorites.js.map +1 -0
  7. package/dist/api/board-mutation-result.d.ts +9 -5
  8. package/dist/api/board-mutation-result.d.ts.map +1 -1
  9. package/dist/api/board-mutation-result.js +9 -5
  10. package/dist/api/board-mutation-result.js.map +1 -1
  11. package/dist/api/board-relation-validation.d.ts +161 -0
  12. package/dist/api/board-relation-validation.d.ts.map +1 -0
  13. package/dist/api/board-relation-validation.js +317 -0
  14. package/dist/api/board-relation-validation.js.map +1 -0
  15. package/dist/api/cache.d.ts +14 -5
  16. package/dist/api/cache.d.ts.map +1 -1
  17. package/dist/api/cache.js +8 -10
  18. package/dist/api/cache.js.map +1 -1
  19. package/dist/api/column-mapping.js +2 -2
  20. package/dist/api/column-mapping.js.map +1 -1
  21. package/dist/api/column-mutation-result.d.ts +9 -5
  22. package/dist/api/column-mutation-result.d.ts.map +1 -1
  23. package/dist/api/column-mutation-result.js +9 -5
  24. package/dist/api/column-mutation-result.js.map +1 -1
  25. package/dist/api/column-types.d.ts +26 -7
  26. package/dist/api/column-types.d.ts.map +1 -1
  27. package/dist/api/column-types.js +42 -3
  28. package/dist/api/column-types.js.map +1 -1
  29. package/dist/api/column-values.d.ts +228 -31
  30. package/dist/api/column-values.d.ts.map +1 -1
  31. package/dist/api/column-values.js +551 -124
  32. package/dist/api/column-values.js.map +1 -1
  33. package/dist/api/cross-board-search.d.ts +501 -0
  34. package/dist/api/cross-board-search.d.ts.map +1 -0
  35. package/dist/api/cross-board-search.js +547 -0
  36. package/dist/api/cross-board-search.js.map +1 -0
  37. package/dist/api/dev-conventions.d.ts +1038 -0
  38. package/dist/api/dev-conventions.d.ts.map +1 -0
  39. package/dist/api/dev-conventions.js +1556 -0
  40. package/dist/api/dev-conventions.js.map +1 -0
  41. package/dist/api/dry-run.d.ts +32 -5
  42. package/dist/api/dry-run.d.ts.map +1 -1
  43. package/dist/api/dry-run.js +149 -32
  44. package/dist/api/dry-run.js.map +1 -1
  45. package/dist/api/errors.d.ts.map +1 -1
  46. package/dist/api/errors.js +28 -7
  47. package/dist/api/errors.js.map +1 -1
  48. package/dist/api/group-mutation-result.d.ts +9 -5
  49. package/dist/api/group-mutation-result.d.ts.map +1 -1
  50. package/dist/api/group-mutation-result.js +9 -5
  51. package/dist/api/group-mutation-result.js.map +1 -1
  52. package/dist/api/item-history-projection.d.ts +919 -0
  53. package/dist/api/item-history-projection.d.ts.map +1 -0
  54. package/dist/api/item-history-projection.js +1104 -0
  55. package/dist/api/item-history-projection.js.map +1 -0
  56. package/dist/api/item-mutation-execute.d.ts +82 -0
  57. package/dist/api/item-mutation-execute.d.ts.map +1 -0
  58. package/dist/api/item-mutation-execute.js +199 -0
  59. package/dist/api/item-mutation-execute.js.map +1 -0
  60. package/dist/api/notifications.d.ts +156 -0
  61. package/dist/api/notifications.d.ts.map +1 -0
  62. package/dist/api/notifications.js +215 -0
  63. package/dist/api/notifications.js.map +1 -0
  64. package/dist/api/oauth-test-helper.d.ts +64 -0
  65. package/dist/api/oauth-test-helper.d.ts.map +1 -0
  66. package/dist/api/oauth-test-helper.js +179 -0
  67. package/dist/api/oauth-test-helper.js.map +1 -0
  68. package/dist/api/oauth.d.ts +198 -0
  69. package/dist/api/oauth.d.ts.map +1 -0
  70. package/dist/api/oauth.js +471 -0
  71. package/dist/api/oauth.js.map +1 -0
  72. package/dist/api/partial-success-bulk.d.ts +422 -0
  73. package/dist/api/partial-success-bulk.d.ts.map +1 -0
  74. package/dist/api/partial-success-bulk.js +378 -0
  75. package/dist/api/partial-success-bulk.js.map +1 -0
  76. package/dist/api/people.d.ts +54 -1
  77. package/dist/api/people.d.ts.map +1 -1
  78. package/dist/api/people.js +27 -3
  79. package/dist/api/people.js.map +1 -1
  80. package/dist/api/probes.d.ts +487 -0
  81. package/dist/api/probes.d.ts.map +1 -0
  82. package/dist/api/probes.js +881 -0
  83. package/dist/api/probes.js.map +1 -0
  84. package/dist/api/raw-document.d.ts.map +1 -1
  85. package/dist/api/raw-document.js +2 -2
  86. package/dist/api/raw-document.js.map +1 -1
  87. package/dist/api/raw-write.d.ts.map +1 -1
  88. package/dist/api/raw-write.js +11 -3
  89. package/dist/api/raw-write.js.map +1 -1
  90. package/dist/api/resolution-context.d.ts +23 -11
  91. package/dist/api/resolution-context.d.ts.map +1 -1
  92. package/dist/api/resolution-context.js +53 -12
  93. package/dist/api/resolution-context.js.map +1 -1
  94. package/dist/api/resolution-pass.d.ts +30 -1
  95. package/dist/api/resolution-pass.d.ts.map +1 -1
  96. package/dist/api/resolution-pass.js +36 -1
  97. package/dist/api/resolution-pass.js.map +1 -1
  98. package/dist/api/resolve-client.d.ts +11 -0
  99. package/dist/api/resolve-client.d.ts.map +1 -1
  100. package/dist/api/resolve-client.js +1 -1
  101. package/dist/api/resolve-client.js.map +1 -1
  102. package/dist/api/response-root.d.ts +92 -46
  103. package/dist/api/response-root.d.ts.map +1 -1
  104. package/dist/api/response-root.js +93 -41
  105. package/dist/api/response-root.js.map +1 -1
  106. package/dist/api/tag-directory.d.ts +154 -0
  107. package/dist/api/tag-directory.d.ts.map +1 -0
  108. package/dist/api/tag-directory.js +325 -0
  109. package/dist/api/tag-directory.js.map +1 -0
  110. package/dist/api/time-tracking.d.ts +165 -0
  111. package/dist/api/time-tracking.d.ts.map +1 -0
  112. package/dist/api/time-tracking.js +135 -0
  113. package/dist/api/time-tracking.js.map +1 -0
  114. package/dist/api/transport.js +3 -3
  115. package/dist/api/transport.js.map +1 -1
  116. package/dist/api/usage.d.ts +190 -0
  117. package/dist/api/usage.d.ts.map +1 -0
  118. package/dist/api/usage.js +194 -0
  119. package/dist/api/usage.js.map +1 -0
  120. package/dist/api/users-fan-out-mutation.d.ts.map +1 -1
  121. package/dist/api/users-fan-out-mutation.js +10 -5
  122. package/dist/api/users-fan-out-mutation.js.map +1 -1
  123. package/dist/api/webhooks.d.ts +357 -0
  124. package/dist/api/webhooks.d.ts.map +1 -0
  125. package/dist/api/webhooks.js +333 -0
  126. package/dist/api/webhooks.js.map +1 -0
  127. package/dist/cli/envelope-out.d.ts +18 -1
  128. package/dist/cli/envelope-out.d.ts.map +1 -1
  129. package/dist/cli/envelope-out.js +16 -2
  130. package/dist/cli/envelope-out.js.map +1 -1
  131. package/dist/cli/program.d.ts.map +1 -1
  132. package/dist/cli/program.js +120 -1
  133. package/dist/cli/program.js.map +1 -1
  134. package/dist/cli/run.d.ts +12 -0
  135. package/dist/cli/run.d.ts.map +1 -1
  136. package/dist/cli/run.js +2 -0
  137. package/dist/cli/run.js.map +1 -1
  138. package/dist/commands/account/tags.d.ts +37 -0
  139. package/dist/commands/account/tags.d.ts.map +1 -0
  140. package/dist/commands/account/tags.js +84 -0
  141. package/dist/commands/account/tags.js.map +1 -0
  142. package/dist/commands/auth/login.d.ts +14 -0
  143. package/dist/commands/auth/login.d.ts.map +1 -0
  144. package/dist/commands/auth/login.js +314 -0
  145. package/dist/commands/auth/login.js.map +1 -0
  146. package/dist/commands/auth/logout.d.ts +28 -0
  147. package/dist/commands/auth/logout.d.ts.map +1 -0
  148. package/dist/commands/auth/logout.js +94 -0
  149. package/dist/commands/auth/logout.js.map +1 -0
  150. package/dist/commands/board/archive.d.ts.map +1 -1
  151. package/dist/commands/board/archive.js +14 -14
  152. package/dist/commands/board/archive.js.map +1 -1
  153. package/dist/commands/board/column-create.d.ts +3 -3
  154. package/dist/commands/board/column-create.d.ts.map +1 -1
  155. package/dist/commands/board/column-create.js +52 -45
  156. package/dist/commands/board/column-create.js.map +1 -1
  157. package/dist/commands/board/column-delete.d.ts.map +1 -1
  158. package/dist/commands/board/column-delete.js +15 -16
  159. package/dist/commands/board/column-delete.js.map +1 -1
  160. package/dist/commands/board/column-update.d.ts.map +1 -1
  161. package/dist/commands/board/column-update.js +23 -22
  162. package/dist/commands/board/column-update.js.map +1 -1
  163. package/dist/commands/board/create.d.ts.map +1 -1
  164. package/dist/commands/board/create.js +14 -17
  165. package/dist/commands/board/create.js.map +1 -1
  166. package/dist/commands/board/delete.d.ts.map +1 -1
  167. package/dist/commands/board/delete.js +12 -15
  168. package/dist/commands/board/delete.js.map +1 -1
  169. package/dist/commands/board/describe.d.ts.map +1 -1
  170. package/dist/commands/board/describe.js +30 -0
  171. package/dist/commands/board/describe.js.map +1 -1
  172. package/dist/commands/board/duplicate.d.ts.map +1 -1
  173. package/dist/commands/board/duplicate.js +12 -13
  174. package/dist/commands/board/duplicate.js.map +1 -1
  175. package/dist/commands/board/favorites.d.ts +33 -0
  176. package/dist/commands/board/favorites.d.ts.map +1 -0
  177. package/dist/commands/board/favorites.js +74 -0
  178. package/dist/commands/board/favorites.js.map +1 -0
  179. package/dist/commands/board/find.d.ts +1 -1
  180. package/dist/commands/board/group-archive.d.ts.map +1 -1
  181. package/dist/commands/board/group-archive.js +12 -16
  182. package/dist/commands/board/group-archive.js.map +1 -1
  183. package/dist/commands/board/group-create.d.ts.map +1 -1
  184. package/dist/commands/board/group-create.js +9 -19
  185. package/dist/commands/board/group-create.js.map +1 -1
  186. package/dist/commands/board/group-delete.d.ts.map +1 -1
  187. package/dist/commands/board/group-delete.js +12 -16
  188. package/dist/commands/board/group-delete.js.map +1 -1
  189. package/dist/commands/board/group-duplicate.d.ts.map +1 -1
  190. package/dist/commands/board/group-duplicate.js +12 -16
  191. package/dist/commands/board/group-duplicate.js.map +1 -1
  192. package/dist/commands/board/group-update.d.ts.map +1 -1
  193. package/dist/commands/board/group-update.js +12 -11
  194. package/dist/commands/board/group-update.js.map +1 -1
  195. package/dist/commands/board/list.d.ts +1 -1
  196. package/dist/commands/board/update.d.ts.map +1 -1
  197. package/dist/commands/board/update.js +16 -11
  198. package/dist/commands/board/update.js.map +1 -1
  199. package/dist/commands/cache/list.d.ts +2 -0
  200. package/dist/commands/cache/list.d.ts.map +1 -1
  201. package/dist/commands/cache/list.js +2 -2
  202. package/dist/commands/cache/list.js.map +1 -1
  203. package/dist/commands/dev/_shared.d.ts +40 -0
  204. package/dist/commands/dev/_shared.d.ts.map +1 -0
  205. package/dist/commands/dev/_shared.js +104 -0
  206. package/dist/commands/dev/_shared.js.map +1 -0
  207. package/dist/commands/dev/configure.d.ts +36 -0
  208. package/dist/commands/dev/configure.d.ts.map +1 -0
  209. package/dist/commands/dev/configure.js +145 -0
  210. package/dist/commands/dev/configure.js.map +1 -0
  211. package/dist/commands/dev/discover.d.ts +34 -0
  212. package/dist/commands/dev/discover.d.ts.map +1 -0
  213. package/dist/commands/dev/discover.js +117 -0
  214. package/dist/commands/dev/discover.js.map +1 -0
  215. package/dist/commands/dev/doctor.d.ts +39 -0
  216. package/dist/commands/dev/doctor.d.ts.map +1 -0
  217. package/dist/commands/dev/doctor.js +91 -0
  218. package/dist/commands/dev/doctor.js.map +1 -0
  219. package/dist/commands/dev/epic/items.d.ts +24 -0
  220. package/dist/commands/dev/epic/items.d.ts.map +1 -0
  221. package/dist/commands/dev/epic/items.js +103 -0
  222. package/dist/commands/dev/epic/items.js.map +1 -0
  223. package/dist/commands/dev/epic/list.d.ts +36 -0
  224. package/dist/commands/dev/epic/list.d.ts.map +1 -0
  225. package/dist/commands/dev/epic/list.js +120 -0
  226. package/dist/commands/dev/epic/list.js.map +1 -0
  227. package/dist/commands/dev/release/list.d.ts +21 -0
  228. package/dist/commands/dev/release/list.d.ts.map +1 -0
  229. package/dist/commands/dev/release/list.js +73 -0
  230. package/dist/commands/dev/release/list.js.map +1 -0
  231. package/dist/commands/dev/sprint/current.d.ts +24 -0
  232. package/dist/commands/dev/sprint/current.d.ts.map +1 -0
  233. package/dist/commands/dev/sprint/current.js +90 -0
  234. package/dist/commands/dev/sprint/current.js.map +1 -0
  235. package/dist/commands/dev/sprint/items.d.ts +34 -0
  236. package/dist/commands/dev/sprint/items.d.ts.map +1 -0
  237. package/dist/commands/dev/sprint/items.js +118 -0
  238. package/dist/commands/dev/sprint/items.js.map +1 -0
  239. package/dist/commands/dev/sprint/list.d.ts +41 -0
  240. package/dist/commands/dev/sprint/list.d.ts.map +1 -0
  241. package/dist/commands/dev/sprint/list.js +104 -0
  242. package/dist/commands/dev/sprint/list.js.map +1 -0
  243. package/dist/commands/dev/task/block.d.ts +29 -0
  244. package/dist/commands/dev/task/block.d.ts.map +1 -0
  245. package/dist/commands/dev/task/block.js +106 -0
  246. package/dist/commands/dev/task/block.js.map +1 -0
  247. package/dist/commands/dev/task/done.d.ts +30 -0
  248. package/dist/commands/dev/task/done.d.ts.map +1 -0
  249. package/dist/commands/dev/task/done.js +113 -0
  250. package/dist/commands/dev/task/done.js.map +1 -0
  251. package/dist/commands/dev/task/list.d.ts +42 -0
  252. package/dist/commands/dev/task/list.d.ts.map +1 -0
  253. package/dist/commands/dev/task/list.js +227 -0
  254. package/dist/commands/dev/task/list.js.map +1 -0
  255. package/dist/commands/dev/task/start.d.ts +29 -0
  256. package/dist/commands/dev/task/start.d.ts.map +1 -0
  257. package/dist/commands/dev/task/start.js +90 -0
  258. package/dist/commands/dev/task/start.js.map +1 -0
  259. package/dist/commands/emit.d.ts.map +1 -1
  260. package/dist/commands/emit.js +5 -3
  261. package/dist/commands/emit.js.map +1 -1
  262. package/dist/commands/index.d.ts.map +1 -1
  263. package/dist/commands/index.js +95 -0
  264. package/dist/commands/index.js.map +1 -1
  265. package/dist/commands/item/archive.d.ts.map +1 -1
  266. package/dist/commands/item/archive.js +11 -0
  267. package/dist/commands/item/archive.js.map +1 -1
  268. package/dist/commands/item/clear.d.ts.map +1 -1
  269. package/dist/commands/item/clear.js +15 -0
  270. package/dist/commands/item/clear.js.map +1 -1
  271. package/dist/commands/item/create.d.ts.map +1 -1
  272. package/dist/commands/item/create.js +41 -8
  273. package/dist/commands/item/create.js.map +1 -1
  274. package/dist/commands/item/delete.d.ts.map +1 -1
  275. package/dist/commands/item/delete.js +11 -0
  276. package/dist/commands/item/delete.js.map +1 -1
  277. package/dist/commands/item/duplicate.d.ts.map +1 -1
  278. package/dist/commands/item/duplicate.js +12 -0
  279. package/dist/commands/item/duplicate.js.map +1 -1
  280. package/dist/commands/item/history.d.ts +60 -0
  281. package/dist/commands/item/history.d.ts.map +1 -0
  282. package/dist/commands/item/history.js +309 -0
  283. package/dist/commands/item/history.js.map +1 -0
  284. package/dist/commands/item/list.d.ts.map +1 -1
  285. package/dist/commands/item/list.js +16 -13
  286. package/dist/commands/item/list.js.map +1 -1
  287. package/dist/commands/item/move.d.ts.map +1 -1
  288. package/dist/commands/item/move.js +41 -7
  289. package/dist/commands/item/move.js.map +1 -1
  290. package/dist/commands/item/search.d.ts +99 -15
  291. package/dist/commands/item/search.d.ts.map +1 -1
  292. package/dist/commands/item/search.js +480 -36
  293. package/dist/commands/item/search.js.map +1 -1
  294. package/dist/commands/item/set.d.ts.map +1 -1
  295. package/dist/commands/item/set.js +52 -8
  296. package/dist/commands/item/set.js.map +1 -1
  297. package/dist/commands/item/time-track/start.d.ts +61 -0
  298. package/dist/commands/item/time-track/start.d.ts.map +1 -0
  299. package/dist/commands/item/time-track/start.js +138 -0
  300. package/dist/commands/item/time-track/start.js.map +1 -0
  301. package/dist/commands/item/time-track/stop.d.ts +32 -0
  302. package/dist/commands/item/time-track/stop.d.ts.map +1 -0
  303. package/dist/commands/item/time-track/stop.js +97 -0
  304. package/dist/commands/item/time-track/stop.js.map +1 -0
  305. package/dist/commands/item/update.d.ts +1 -0
  306. package/dist/commands/item/update.d.ts.map +1 -1
  307. package/dist/commands/item/update.js +103 -113
  308. package/dist/commands/item/update.js.map +1 -1
  309. package/dist/commands/item/upsert.d.ts.map +1 -1
  310. package/dist/commands/item/upsert.js +48 -1
  311. package/dist/commands/item/upsert.js.map +1 -1
  312. package/dist/commands/notification/send.d.ts +60 -0
  313. package/dist/commands/notification/send.d.ts.map +1 -0
  314. package/dist/commands/notification/send.js +147 -0
  315. package/dist/commands/notification/send.js.map +1 -0
  316. package/dist/commands/parse-argv.d.ts.map +1 -1
  317. package/dist/commands/parse-argv.js +14 -4
  318. package/dist/commands/parse-argv.js.map +1 -1
  319. package/dist/commands/raw/index.d.ts.map +1 -1
  320. package/dist/commands/raw/index.js +13 -15
  321. package/dist/commands/raw/index.js.map +1 -1
  322. package/dist/commands/run-by-id-lookup.d.ts.map +1 -1
  323. package/dist/commands/run-by-id-lookup.js +2 -2
  324. package/dist/commands/run-by-id-lookup.js.map +1 -1
  325. package/dist/commands/schema/index.d.ts +2 -0
  326. package/dist/commands/schema/index.d.ts.map +1 -1
  327. package/dist/commands/status.d.ts +120 -0
  328. package/dist/commands/status.d.ts.map +1 -0
  329. package/dist/commands/status.js +365 -0
  330. package/dist/commands/status.js.map +1 -0
  331. package/dist/commands/update/body-source.d.ts.map +1 -1
  332. package/dist/commands/update/body-source.js +2 -2
  333. package/dist/commands/update/body-source.js.map +1 -1
  334. package/dist/commands/update/create.d.ts +2 -3
  335. package/dist/commands/update/create.d.ts.map +1 -1
  336. package/dist/commands/update/create.js +15 -3
  337. package/dist/commands/update/create.js.map +1 -1
  338. package/dist/commands/update/delete.d.ts.map +1 -1
  339. package/dist/commands/update/delete.js +11 -0
  340. package/dist/commands/update/delete.js.map +1 -1
  341. package/dist/commands/update/edit.d.ts.map +1 -1
  342. package/dist/commands/update/edit.js +11 -0
  343. package/dist/commands/update/edit.js.map +1 -1
  344. package/dist/commands/update/list.d.ts.map +1 -1
  345. package/dist/commands/update/list.js +15 -12
  346. package/dist/commands/update/list.js.map +1 -1
  347. package/dist/commands/update/reply.d.ts.map +1 -1
  348. package/dist/commands/update/reply.js +11 -0
  349. package/dist/commands/update/reply.js.map +1 -1
  350. package/dist/commands/update/toggle.d.ts.map +1 -1
  351. package/dist/commands/update/toggle.js +13 -0
  352. package/dist/commands/update/toggle.js.map +1 -1
  353. package/dist/commands/usage.d.ts +58 -0
  354. package/dist/commands/usage.d.ts.map +1 -0
  355. package/dist/commands/usage.js +94 -0
  356. package/dist/commands/usage.js.map +1 -0
  357. package/dist/commands/webhook/create.d.ts +74 -0
  358. package/dist/commands/webhook/create.d.ts.map +1 -0
  359. package/dist/commands/webhook/create.js +150 -0
  360. package/dist/commands/webhook/create.js.map +1 -0
  361. package/dist/commands/webhook/delete.d.ts +46 -0
  362. package/dist/commands/webhook/delete.d.ts.map +1 -0
  363. package/dist/commands/webhook/delete.js +141 -0
  364. package/dist/commands/webhook/delete.js.map +1 -0
  365. package/dist/commands/webhook/list.d.ts +23 -0
  366. package/dist/commands/webhook/list.d.ts.map +1 -0
  367. package/dist/commands/webhook/list.js +68 -0
  368. package/dist/commands/webhook/list.js.map +1 -0
  369. package/dist/commands/workspace/create.d.ts.map +1 -1
  370. package/dist/commands/workspace/create.js +16 -0
  371. package/dist/commands/workspace/create.js.map +1 -1
  372. package/dist/commands/workspace/delete.d.ts.map +1 -1
  373. package/dist/commands/workspace/delete.js +13 -13
  374. package/dist/commands/workspace/delete.js.map +1 -1
  375. package/dist/commands/workspace/list.d.ts +1 -1
  376. package/dist/commands/workspace/update.d.ts.map +1 -1
  377. package/dist/commands/workspace/update.js +15 -15
  378. package/dist/commands/workspace/update.js.map +1 -1
  379. package/dist/config/credentials.d.ts +189 -0
  380. package/dist/config/credentials.d.ts.map +1 -0
  381. package/dist/config/credentials.js +300 -0
  382. package/dist/config/credentials.js.map +1 -0
  383. package/dist/config/profiles.d.ts +125 -0
  384. package/dist/config/profiles.d.ts.map +1 -0
  385. package/dist/config/profiles.js +227 -0
  386. package/dist/config/profiles.js.map +1 -0
  387. package/dist/types/global-flags.d.ts +1 -1
  388. package/dist/types/global-flags.d.ts.map +1 -1
  389. package/dist/types/global-flags.js +28 -16
  390. package/dist/types/global-flags.js.map +1 -1
  391. package/dist/types/ids.d.ts +2 -0
  392. package/dist/types/ids.d.ts.map +1 -1
  393. package/dist/types/ids.js +5 -3
  394. package/dist/types/ids.js.map +1 -1
  395. package/dist/utils/errors.d.ts +57 -3
  396. package/dist/utils/errors.d.ts.map +1 -1
  397. package/dist/utils/errors.js +69 -2
  398. package/dist/utils/errors.js.map +1 -1
  399. package/dist/utils/fs.d.ts +35 -0
  400. package/dist/utils/fs.d.ts.map +1 -0
  401. package/dist/utils/fs.js +36 -0
  402. package/dist/utils/fs.js.map +1 -0
  403. package/dist/utils/json.d.ts +60 -0
  404. package/dist/utils/json.d.ts.map +1 -0
  405. package/dist/utils/json.js +86 -0
  406. package/dist/utils/json.js.map +1 -0
  407. package/dist/utils/output/ndjson.d.ts +65 -3
  408. package/dist/utils/output/ndjson.d.ts.map +1 -1
  409. package/dist/utils/output/ndjson.js +21 -0
  410. package/dist/utils/output/ndjson.js.map +1 -1
  411. package/dist/utils/redact.d.ts.map +1 -1
  412. package/dist/utils/redact.js +31 -0
  413. package/dist/utils/redact.js.map +1 -1
  414. package/package.json +2 -1
  415. package/dist/commands/account/client-helper.d.ts +0 -37
  416. package/dist/commands/account/client-helper.d.ts.map +0 -1
  417. package/dist/commands/account/client-helper.js +0 -55
  418. package/dist/commands/account/client-helper.js.map +0 -1
@@ -0,0 +1,1038 @@
1
+ /**
2
+ * Monday Dev convention helpers for the v0.3-M26 `monday dev …`
3
+ * namespace (`cli-design.md` §2.7 + §5.9 + §11.3 + §13 v0.3 entry;
4
+ * `v0.3-plan.md` §3 M26).
5
+ *
6
+ * **Monday Dev is convention, not API (cli-design §2.7).** No
7
+ * dedicated GraphQL surface — `dev sprint current`, `dev task done`,
8
+ * etc. are *workflow shortcuts* that resolve to standard board /
9
+ * item CRUD operations against per-profile-configured board IDs.
10
+ * This module owns the convention-to-board-ID resolution, the
11
+ * per-profile `[profiles.<name>.dev]` reader / writer, and the
12
+ * board-name-based discovery heuristic that seeds the config from
13
+ * a Monday Dev template-shaped workspace.
14
+ *
15
+ * **What this module owns.**
16
+ *
17
+ * 1. The {@link DevMapping} alias over `profiles.ts:profileDevBlockSchema`
18
+ * — single source of truth for the per-profile board mapping
19
+ * shape. Re-exported here for namespace-clarity at the
20
+ * `dev`-command call sites; the schema itself lives next to
21
+ * the profile-file reader so v0.3-M21's multi-profile config
22
+ * shape stays single-source-of-truth.
23
+ * 2. The {@link DevDiscoverOutput} + {@link DevConfigureOutput} +
24
+ * {@link DevDoctorOutput} output projections — pinned at this
25
+ * pre-flight so `monday schema` reads consistent shapes across
26
+ * the three setup verbs.
27
+ * 3. Pure helpers: {@link matchBoardByConvention} (name-based
28
+ * heuristic — exact-match-then-substring against the
29
+ * Monday Dev template's stock board names) +
30
+ * {@link buildDiscoverMappingFromMatches} (collapses the
31
+ * heuristic's per-noun matches into a {@link DevMapping}).
32
+ * Real implementations — the heuristic is content-addressed
33
+ * against board names so it shipped testable at pre-flight
34
+ * alongside the runtime fetchers (M26a IMPL `19755e3` landed
35
+ * the `boards(state: all, workspace_ids:)` walker with the
36
+ * `Board.type === 'board'` filter + per-board metadata
37
+ * hydration).
38
+ * 4. Runtime fetchers: {@link discoverDevBoards} (walks accessible
39
+ * boards + applies the heuristic) + {@link runDevDoctor}
40
+ * (validates the active profile's mapping against current board
41
+ * shape) + {@link loadDevMapping} (reads
42
+ * `[profiles.<name>.dev]`) + {@link saveDevMapping} (writes
43
+ * `[profiles.<name>.dev]` via atomic TOML round-trip). The
44
+ * pre-flight `c8 ignore start/stop` wraps dropped at M26a IMPL
45
+ * (`19755e3`) alongside the per-fetcher wire bodies.
46
+ *
47
+ * **Empirical-probe findings pinned at M26a IMPL (2026-05-11, against
48
+ * `api.monday.com`, API version `2026-01`) — `scripts/probe/m26-
49
+ * dev-discover.ts` + `scripts/probe/m26-board-kind.ts` +
50
+ * `scripts/probe/m26-board-type.ts`:**
51
+ *
52
+ * - **Stock template names unchanged.** Live Monday Dev workspace
53
+ * surfaces `Tasks` / `Epics` / `Bugs Queue` matching the pinned
54
+ * {@link DEV_NOUN_PATTERNS} (substring tolerance handles the
55
+ * `Queue` suffix on bugs). Decision 1 closure stands; no
56
+ * `DEV_NOUN_PATTERNS` amendment needed.
57
+ * - **`Board.type === 'board'` filter required.** Monday's
58
+ * `boards()` walker returns `sub_items_board` virtual entries
59
+ * (auto-generated `Subitems of <BoardName>` boards) that pollute
60
+ * the substring heuristic — `Subitems of Tasks` matches the
61
+ * `tasks` pattern, creating an ambiguous match that prevents
62
+ * auto-mapping. The walker filters to `type === 'board'`,
63
+ * silently dropping `sub_items_board` / `custom_object` /
64
+ * `document` entries. Behavior-equivalent refinement, NOT a
65
+ * contract amendment — {@link DiscoverBoardCandidate} schema
66
+ * unchanged.
67
+ * - **`state: all` walker filter.** Per the M26 IMPL handoff
68
+ * guidance (don't filter by board state at the walker), the
69
+ * walker passes `state: all` so the heuristic sees archived /
70
+ * deleted boards too; the action body surfaces them on
71
+ * {@link DevDiscoverOutput.matches} for agent-side review.
72
+ * - **`board_kind`-`public`/`private`/`share` only.** Does NOT
73
+ * discriminate subitem boards — `Subitems of Tasks` reports
74
+ * `board_kind: 'public'`, identical to the parent `Tasks`
75
+ * board. Hence the `Board.type` filter rather than a
76
+ * `board_kind` filter.
77
+ *
78
+ * **What this module does NOT own.**
79
+ *
80
+ * - The base profile-config schema + read path. Lives in
81
+ * `src/config/profiles.ts` per v0.3-M21 (`loadProfilesConfig`,
82
+ * `profilesConfigSchema`, `profileDevBlockSchema`). This module
83
+ * re-exports the dev-block schema as `devMappingSchema` for
84
+ * namespace clarity + owns the dev-block WRITE-back path
85
+ * (`saveDevMapping`); the parent profile shape stays under
86
+ * `src/config/profiles.ts`.
87
+ * - Per-workflow-verb wire calls (sprint/epic/release/task
88
+ * reads + writes). Those route through existing api/* modules
89
+ * (`items-page-walker`, `item-mutation-execute`, etc.) — the
90
+ * dev namespace contributes the *resolver* that maps `current
91
+ * sprint` to the right item-search input, not new wire
92
+ * primitives.
93
+ * - Convention-name overrides for non-template workspaces. The
94
+ * heuristic looks for Monday Dev template's stock English
95
+ * names; localised workspaces (Spanish "Tareas" etc.) fall
96
+ * through to `dev configure` + an explicit per-board override.
97
+ * A v0.4+ extension may add `--name-aliases` to discover.
98
+ *
99
+ * **Failure-mode routing (no new ERROR_CODES; 29 stays).** Per
100
+ * cli-design §5.9, the two `dev_*` codes pre-registered in
101
+ * `src/utils/errors.ts:ERROR_CODES` cover the namespace's failure
102
+ * modes:
103
+ *
104
+ * - `dev_not_configured` — active profile has no `[profiles.
105
+ * <name>.dev]` block AND no overrides via env vars / flags.
106
+ * Surface points at `monday dev configure` + `monday dev
107
+ * discover`.
108
+ * - `dev_board_misconfigured` — mapped board exists but doesn't
109
+ * expose the expected column (no status column on the tasks
110
+ * board, etc.). Surface points at `monday dev doctor` for
111
+ * diagnostics + `monday board describe <bid>` to inspect.
112
+ *
113
+ * Other failures (board deleted / access revoked / column-token
114
+ * collision / etc.) route through the existing 29-code registry
115
+ * (`not_found`, `column_not_found`, `unauthorized`, etc.) without
116
+ * widening.
117
+ */
118
+ import { z } from 'zod';
119
+ import type { Complexity } from '../utils/output/envelope.js';
120
+ import { type ProfilesRootOptions, type ProfileDevBlock } from '../config/profiles.js';
121
+ import type { MondayClient } from './client.js';
122
+ import { type ProjectedItem } from './item-projection.js';
123
+ /**
124
+ * The per-profile Monday Dev board mapping. Alias over the
125
+ * `profileDevBlockSchema` defined in `src/config/profiles.ts:49-57`
126
+ * so the dev-namespace verbs read the same shape v0.3-M21 pinned
127
+ * for the multi-profile TOML config.
128
+ *
129
+ * Field names use snake_case to match the TOML config; the CLI
130
+ * flag layer (`monday dev configure --tasks-board <bid>`) maps
131
+ * camelCase argv to snake_case at the parse boundary.
132
+ */
133
+ export declare const devMappingSchema: z.ZodObject<{
134
+ tasks_board: z.ZodOptional<z.ZodString>;
135
+ sprints_board: z.ZodOptional<z.ZodString>;
136
+ epics_board: z.ZodOptional<z.ZodString>;
137
+ bugs_board: z.ZodOptional<z.ZodString>;
138
+ releases_board: z.ZodOptional<z.ZodString>;
139
+ }, z.core.$strict>;
140
+ export type DevMapping = ProfileDevBlock;
141
+ /**
142
+ * The Monday Dev template's stock noun → board-name patterns.
143
+ * The discovery heuristic uses these as the matcher seed; a
144
+ * workspace whose board names match one of these patterns (case-
145
+ * insensitive, Unicode NFC) gets auto-mapped to the corresponding
146
+ * dev-noun slot.
147
+ *
148
+ * Pinned in the order the heuristic considers them. Order matters
149
+ * only for tie-breaking when a single board matches multiple
150
+ * patterns (rare; e.g. a board named "Tasks & Bugs" matches both
151
+ * `tasks` and `bugs` — the heuristic surfaces such ambiguity on
152
+ * the success envelope's `matches[]` array via
153
+ * `matched.length > 1` rather than auto-mapping).
154
+ *
155
+ * Localised workspaces (Spanish "Tareas", French "Sprints" — same
156
+ * spelling but different language) round-trip the English form
157
+ * since the heuristic is forward-compat-extensible at v0.4 via a
158
+ * `--name-aliases` flag on `dev discover`. Today's heuristic ships
159
+ * English-only by design — Monday Dev templates default to English
160
+ * board names on new workspaces regardless of UI locale.
161
+ */
162
+ export declare const DEV_NOUN_PATTERNS: readonly {
163
+ readonly noun: keyof DevMapping;
164
+ readonly patterns: readonly string[];
165
+ }[];
166
+ /**
167
+ * One board candidate the discovery heuristic considers. Carries
168
+ * the minimum the matcher needs: ID for the mapping, name for the
169
+ * heuristic itself, optional workspace_id so `dev discover
170
+ * --workspace <wid>` can scope the search.
171
+ */
172
+ export interface DiscoverBoardCandidate {
173
+ readonly id: string;
174
+ readonly name: string;
175
+ readonly workspace_id: string | null;
176
+ }
177
+ export declare const discoverBoardCandidateSchema: z.ZodObject<{
178
+ id: z.ZodString;
179
+ name: z.ZodString;
180
+ workspace_id: z.ZodNullable<z.ZodString>;
181
+ }, z.core.$strict>;
182
+ /**
183
+ * One per-noun match result from the heuristic. The `matched`
184
+ * array carries every board that matched the noun's patterns; the
185
+ * `dev discover` action layer surfaces ambiguity (`matched.length
186
+ * > 1`) and zero-match (`matched.length === 0`) cases via the
187
+ * success envelope's `matches[]` array rather than auto-resolving
188
+ * silently or emitting a warning code.
189
+ */
190
+ export interface DevNounMatchResult {
191
+ readonly noun: keyof DevMapping;
192
+ readonly matched: readonly DiscoverBoardCandidate[];
193
+ }
194
+ export declare const devNounMatchResultSchema: z.ZodObject<{
195
+ noun: z.ZodEnum<{
196
+ tasks_board: "tasks_board";
197
+ sprints_board: "sprints_board";
198
+ epics_board: "epics_board";
199
+ bugs_board: "bugs_board";
200
+ releases_board: "releases_board";
201
+ }>;
202
+ matched: z.ZodArray<z.ZodObject<{
203
+ id: z.ZodString;
204
+ name: z.ZodString;
205
+ workspace_id: z.ZodNullable<z.ZodString>;
206
+ }, z.core.$strict>>;
207
+ }, z.core.$strict>;
208
+ /**
209
+ * Returns true when `candidate.name` matches any of `patterns`.
210
+ * Exact-match wins over substring-match; the matcher returns true
211
+ * on either form so the caller can rank candidates afterwards if
212
+ * needed. Pure helper — real implementation at pre-flight so the
213
+ * Codex review can verify the heuristic shape inline.
214
+ */
215
+ export declare const matchBoardByConvention: (candidate: DiscoverBoardCandidate, patterns: readonly string[]) => boolean;
216
+ /**
217
+ * Runs the heuristic across `candidates` and groups by dev-noun.
218
+ * Returns one {@link DevNounMatchResult} per noun in
219
+ * {@link DEV_NOUN_PATTERNS} order; nouns with zero matches surface
220
+ * with empty `matched` arrays (the caller surfaces these on the
221
+ * `dev discover` success envelope's `matches[]` array via
222
+ * `matched.length === 0` — no warning code registered at M26
223
+ * pre-flight). Pure helper — real implementation at pre-flight.
224
+ */
225
+ export declare const groupCandidatesByDevNoun: (candidates: readonly DiscoverBoardCandidate[]) => readonly DevNounMatchResult[];
226
+ /**
227
+ * Collapses the per-noun match results into a {@link DevMapping}.
228
+ * Nouns with exactly one match populate the mapping slot;
229
+ * zero-match or ambiguous (>1 match) nouns are omitted from the
230
+ * mapping. The caller — `dev discover` — surfaces both modes
231
+ * via the same `matches[]` array on the success envelope
232
+ * (`matched.length === 0` = unmapped; `matched.length > 1` =
233
+ * ambiguous); no separate warning code is registered at M26
234
+ * pre-flight (round-1 Codex P2-3 clarification — warning-code
235
+ * registration is per cli-design §6.1 + the `dev discover`
236
+ * surface intentionally uses data-shape rather than warnings
237
+ * for the heuristic's per-noun outcomes). Pure helper — real
238
+ * implementation at pre-flight.
239
+ */
240
+ export declare const buildDiscoverMappingFromMatches: (matches: readonly DevNounMatchResult[]) => DevMapping;
241
+ /**
242
+ * Output shape for `monday dev discover` (cli-design §11.3 +
243
+ * §4.3 `dev discover [--apply]` row). Surfaces the heuristic's
244
+ * findings + the would-be-written mapping. Per-noun outcomes
245
+ * (matched / unmapped / ambiguous) are surfaced via the
246
+ * `matches[]` array's per-entry `matched.length` rather than
247
+ * via a separate warning surface.
248
+ */
249
+ export interface DevDiscoverOutput {
250
+ readonly profile: string;
251
+ readonly mapping: DevMapping;
252
+ readonly matches: readonly DevNounMatchResult[];
253
+ readonly applied: boolean;
254
+ }
255
+ export declare const devDiscoverOutputSchema: z.ZodObject<{
256
+ profile: z.ZodString;
257
+ mapping: z.ZodObject<{
258
+ tasks_board: z.ZodOptional<z.ZodString>;
259
+ sprints_board: z.ZodOptional<z.ZodString>;
260
+ epics_board: z.ZodOptional<z.ZodString>;
261
+ bugs_board: z.ZodOptional<z.ZodString>;
262
+ releases_board: z.ZodOptional<z.ZodString>;
263
+ }, z.core.$strict>;
264
+ matches: z.ZodArray<z.ZodObject<{
265
+ noun: z.ZodEnum<{
266
+ tasks_board: "tasks_board";
267
+ sprints_board: "sprints_board";
268
+ epics_board: "epics_board";
269
+ bugs_board: "bugs_board";
270
+ releases_board: "releases_board";
271
+ }>;
272
+ matched: z.ZodArray<z.ZodObject<{
273
+ id: z.ZodString;
274
+ name: z.ZodString;
275
+ workspace_id: z.ZodNullable<z.ZodString>;
276
+ }, z.core.$strict>>;
277
+ }, z.core.$strict>>;
278
+ applied: z.ZodBoolean;
279
+ }, z.core.$strict>;
280
+ /**
281
+ * Output shape for `monday dev configure` (cli-design §4.3 +
282
+ * §5.9). The verb writes the now-stored mapping to the active
283
+ * profile's `[profiles.<name>.dev]` block and returns the
284
+ * canonical mapping (post-write read-back) so an agent can verify
285
+ * the value landed.
286
+ */
287
+ export interface DevConfigureOutput {
288
+ readonly profile: string;
289
+ readonly mapping: DevMapping;
290
+ }
291
+ export declare const devConfigureOutputSchema: z.ZodObject<{
292
+ profile: z.ZodString;
293
+ mapping: z.ZodObject<{
294
+ tasks_board: z.ZodOptional<z.ZodString>;
295
+ sprints_board: z.ZodOptional<z.ZodString>;
296
+ epics_board: z.ZodOptional<z.ZodString>;
297
+ bugs_board: z.ZodOptional<z.ZodString>;
298
+ releases_board: z.ZodOptional<z.ZodString>;
299
+ }, z.core.$strict>;
300
+ }, z.core.$strict>;
301
+ /**
302
+ * Pinned check-name vocabulary for `dev doctor` (Decision 2
303
+ * closure at M26 pre-flight). The runtime body iterates this list
304
+ * in order and emits one {@link DevDoctorCheckResult} per name.
305
+ * Names are stable contract surface — agents key off them (an
306
+ * agent self-correcting after a `dev task` failure can grep the
307
+ * doctor output for `tasks_status_column_present.status === 'fail'`).
308
+ *
309
+ * Adding a check is non-breaking (additive); removing or renaming
310
+ * is a major bump.
311
+ *
312
+ * **Round-1 Codex fix (P1-1).** `sprints_state_column_present`
313
+ * was the round-0 name but every sprint verb's runtime semantics
314
+ * are date-range-derived (cli-design §5.9 + the sprint-list verb's
315
+ * `--state active|past|future` filter), not status-column-derived.
316
+ * Renamed to `sprints_date_columns_present` to match what the
317
+ * runtime body will actually inspect — start_date + end_date
318
+ * columns on the configured sprints board.
319
+ *
320
+ * **Round-1 Codex fix (P2-2).** Added `bugs_board_exists` so the
321
+ * `bugs_board` mapping slot is diagnosed by the doctor like every
322
+ * other dev-noun slot.
323
+ *
324
+ * **Round-2 Codex fix (P2-3).** Replaced `epics_to_releases_relation`
325
+ * with `tasks_to_epics_relation` — the round-1 list had a relation
326
+ * check for an epic↔release wiring that no M26 verb consumes
327
+ * (there's no `dev release items` verb at v0.3), while the
328
+ * actually-consumed epic↔task relation (`dev epic items <eid>`
329
+ * walks tasks linked to a given epic) was missing. The release-
330
+ * to-epic relation can rejoin in a v0.3.x / v0.4 follow-up when /
331
+ * if a `dev release items` verb lands. Total check count holds at
332
+ * 10.
333
+ */
334
+ export declare const DEV_DOCTOR_CHECK_NAMES: readonly ["tasks_board_exists", "tasks_status_column_present", "tasks_status_labels_canonical", "sprints_board_exists", "sprints_date_columns_present", "epics_board_exists", "releases_board_exists", "bugs_board_exists", "tasks_to_sprints_relation", "tasks_to_epics_relation"];
335
+ export type DevDoctorCheckName = (typeof DEV_DOCTOR_CHECK_NAMES)[number];
336
+ /**
337
+ * One diagnostic check `dev doctor` ran against the active
338
+ * profile's mapping. `status: 'ok'` = passed; `'warn'` = the
339
+ * check raised a non-fatal concern (e.g. status column has
340
+ * non-standard labels); `'fail'` = the check found drift that
341
+ * blocks the corresponding `dev` verb (e.g. tasks board has no
342
+ * status column at all — `dev task start` would fail).
343
+ *
344
+ * Per-status `details` shape is now STRUCTURALLY pinned at M26a
345
+ * IMPL round-2 P2-1 via the {@link okCheckDetailsSchema} /
346
+ * {@link warnCheckDetailsSchema} / {@link failCheckDetailsSchema}
347
+ * discriminated union below — `monday schema dev.doctor` surfaces
348
+ * the closed {@link DEV_DOCTOR_REASONS} enum via JSON Schema
349
+ * export, and `failResult` enforces a required `reason` at
350
+ * compile time. Extra `details` keys beyond `reason` stay open
351
+ * per-status (open-ended `Record<string, unknown>` extension via
352
+ * `.loose()`) so each check emits its own context fields
353
+ * (`board_id`, `column_id`, etc.) without per-check schema
354
+ * widening.
355
+ *
356
+ * **M26 pre-flight round-1 Codex fix (P2-1).** `name` is typed
357
+ * as {@link DevDoctorCheckName} (the enum literal union) so
358
+ * `monday schema` exposes the stable vocabulary + implementation
359
+ * typos fail output-schema validation rather than silently
360
+ * passing through.
361
+ */
362
+ /**
363
+ * Pinned `details.reason` enum vocabulary surfaced by per-check
364
+ * failure paths. Closes the Decision 2 deferral (per-check
365
+ * discriminated-union pinning) at M26a IMPL — `details.reason`
366
+ * is the agent-keyable discriminator on `status: 'fail'` (and on
367
+ * `status: 'warn'` when a warn carries a structured reason, e.g.
368
+ * `settings_unparseable`).
369
+ *
370
+ * Codex M26a IMPL round-1 P2-1 fix: previously the schema accepted
371
+ * any `details: Record<string, unknown>` shape, so `monday schema`
372
+ * couldn't expose the reason vocabulary + tests couldn't catch
373
+ * typos. Pinning the enum + the "fail requires reason" refinement
374
+ * gives agents a stable branchpoint.
375
+ *
376
+ * Adding a reason is non-breaking; removing or renaming is major.
377
+ */
378
+ export declare const DEV_DOCTOR_REASONS: readonly ["not_in_mapping", "not_accessible", "board_deleted", "no_tasks_board", "no_sprints_board", "no_status_column", "no_date_columns", "no_relation_column", "no_matching_relation", "no_target_board", "settings_unparseable"];
379
+ export type DevDoctorReason = (typeof DEV_DOCTOR_REASONS)[number];
380
+ export declare const devDoctorReasonSchema: z.ZodEnum<{
381
+ not_in_mapping: "not_in_mapping";
382
+ not_accessible: "not_accessible";
383
+ board_deleted: "board_deleted";
384
+ no_tasks_board: "no_tasks_board";
385
+ no_sprints_board: "no_sprints_board";
386
+ no_status_column: "no_status_column";
387
+ no_date_columns: "no_date_columns";
388
+ no_relation_column: "no_relation_column";
389
+ no_matching_relation: "no_matching_relation";
390
+ no_target_board: "no_target_board";
391
+ settings_unparseable: "settings_unparseable";
392
+ }>;
393
+ /**
394
+ * Per-status `details` shape. Codex M26a IMPL round-2 P2-1 + P2-2
395
+ * fix: the round-1 superRefine ran the `reason`-enum check
396
+ * runtime-only — `monday schema` (which calls `z.toJSONSchema(outputSchema)`)
397
+ * couldn't surface the enum vocabulary, and ok-status details were
398
+ * incidentally blocked when an ok carried any non-enum `reason`.
399
+ * Refactored into a structural discriminated union on `status`:
400
+ *
401
+ * - `ok`: open `details` object (or null) — no `reason` constraint.
402
+ * - `warn`: optional `reason: DEV_DOCTOR_REASONS` enum + open
403
+ * extras; supports both unstructured warnings (archived board)
404
+ * and structured ones (settings_unparseable).
405
+ * - `fail`: REQUIRED `reason: DEV_DOCTOR_REASONS` enum + open
406
+ * extras; `details` is non-nullable on fail (every failure
407
+ * surfaces a structured reason).
408
+ *
409
+ * Open-ended extra keys per-status mirror Monday's per-call payload
410
+ * variability — every check emits its own context fields
411
+ * (`board_id`, `column_id`, etc.) under the same status family.
412
+ */
413
+ export declare const okCheckDetailsSchema: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
414
+ export declare const warnCheckDetailsSchema: z.ZodNullable<z.ZodObject<{
415
+ reason: z.ZodOptional<z.ZodEnum<{
416
+ not_in_mapping: "not_in_mapping";
417
+ not_accessible: "not_accessible";
418
+ board_deleted: "board_deleted";
419
+ no_tasks_board: "no_tasks_board";
420
+ no_sprints_board: "no_sprints_board";
421
+ no_status_column: "no_status_column";
422
+ no_date_columns: "no_date_columns";
423
+ no_relation_column: "no_relation_column";
424
+ no_matching_relation: "no_matching_relation";
425
+ no_target_board: "no_target_board";
426
+ settings_unparseable: "settings_unparseable";
427
+ }>>;
428
+ }, z.core.$loose>>;
429
+ export declare const failCheckDetailsSchema: z.ZodObject<{
430
+ reason: z.ZodEnum<{
431
+ not_in_mapping: "not_in_mapping";
432
+ not_accessible: "not_accessible";
433
+ board_deleted: "board_deleted";
434
+ no_tasks_board: "no_tasks_board";
435
+ no_sprints_board: "no_sprints_board";
436
+ no_status_column: "no_status_column";
437
+ no_date_columns: "no_date_columns";
438
+ no_relation_column: "no_relation_column";
439
+ no_matching_relation: "no_matching_relation";
440
+ no_target_board: "no_target_board";
441
+ settings_unparseable: "settings_unparseable";
442
+ }>;
443
+ }, z.core.$loose>;
444
+ export declare const devDoctorCheckResultOkSchema: z.ZodObject<{
445
+ name: z.ZodEnum<{
446
+ tasks_board_exists: "tasks_board_exists";
447
+ tasks_status_column_present: "tasks_status_column_present";
448
+ tasks_status_labels_canonical: "tasks_status_labels_canonical";
449
+ sprints_board_exists: "sprints_board_exists";
450
+ sprints_date_columns_present: "sprints_date_columns_present";
451
+ epics_board_exists: "epics_board_exists";
452
+ releases_board_exists: "releases_board_exists";
453
+ bugs_board_exists: "bugs_board_exists";
454
+ tasks_to_sprints_relation: "tasks_to_sprints_relation";
455
+ tasks_to_epics_relation: "tasks_to_epics_relation";
456
+ }>;
457
+ status: z.ZodLiteral<"ok">;
458
+ message: z.ZodString;
459
+ details: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
460
+ }, z.core.$strict>;
461
+ export declare const devDoctorCheckResultWarnSchema: z.ZodObject<{
462
+ name: z.ZodEnum<{
463
+ tasks_board_exists: "tasks_board_exists";
464
+ tasks_status_column_present: "tasks_status_column_present";
465
+ tasks_status_labels_canonical: "tasks_status_labels_canonical";
466
+ sprints_board_exists: "sprints_board_exists";
467
+ sprints_date_columns_present: "sprints_date_columns_present";
468
+ epics_board_exists: "epics_board_exists";
469
+ releases_board_exists: "releases_board_exists";
470
+ bugs_board_exists: "bugs_board_exists";
471
+ tasks_to_sprints_relation: "tasks_to_sprints_relation";
472
+ tasks_to_epics_relation: "tasks_to_epics_relation";
473
+ }>;
474
+ status: z.ZodLiteral<"warn">;
475
+ message: z.ZodString;
476
+ details: z.ZodNullable<z.ZodObject<{
477
+ reason: z.ZodOptional<z.ZodEnum<{
478
+ not_in_mapping: "not_in_mapping";
479
+ not_accessible: "not_accessible";
480
+ board_deleted: "board_deleted";
481
+ no_tasks_board: "no_tasks_board";
482
+ no_sprints_board: "no_sprints_board";
483
+ no_status_column: "no_status_column";
484
+ no_date_columns: "no_date_columns";
485
+ no_relation_column: "no_relation_column";
486
+ no_matching_relation: "no_matching_relation";
487
+ no_target_board: "no_target_board";
488
+ settings_unparseable: "settings_unparseable";
489
+ }>>;
490
+ }, z.core.$loose>>;
491
+ }, z.core.$strict>;
492
+ export declare const devDoctorCheckResultFailSchema: z.ZodObject<{
493
+ name: z.ZodEnum<{
494
+ tasks_board_exists: "tasks_board_exists";
495
+ tasks_status_column_present: "tasks_status_column_present";
496
+ tasks_status_labels_canonical: "tasks_status_labels_canonical";
497
+ sprints_board_exists: "sprints_board_exists";
498
+ sprints_date_columns_present: "sprints_date_columns_present";
499
+ epics_board_exists: "epics_board_exists";
500
+ releases_board_exists: "releases_board_exists";
501
+ bugs_board_exists: "bugs_board_exists";
502
+ tasks_to_sprints_relation: "tasks_to_sprints_relation";
503
+ tasks_to_epics_relation: "tasks_to_epics_relation";
504
+ }>;
505
+ status: z.ZodLiteral<"fail">;
506
+ message: z.ZodString;
507
+ details: z.ZodObject<{
508
+ reason: z.ZodEnum<{
509
+ not_in_mapping: "not_in_mapping";
510
+ not_accessible: "not_accessible";
511
+ board_deleted: "board_deleted";
512
+ no_tasks_board: "no_tasks_board";
513
+ no_sprints_board: "no_sprints_board";
514
+ no_status_column: "no_status_column";
515
+ no_date_columns: "no_date_columns";
516
+ no_relation_column: "no_relation_column";
517
+ no_matching_relation: "no_matching_relation";
518
+ no_target_board: "no_target_board";
519
+ settings_unparseable: "settings_unparseable";
520
+ }>;
521
+ }, z.core.$loose>;
522
+ }, z.core.$strict>;
523
+ export declare const devDoctorCheckResultSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
524
+ name: z.ZodEnum<{
525
+ tasks_board_exists: "tasks_board_exists";
526
+ tasks_status_column_present: "tasks_status_column_present";
527
+ tasks_status_labels_canonical: "tasks_status_labels_canonical";
528
+ sprints_board_exists: "sprints_board_exists";
529
+ sprints_date_columns_present: "sprints_date_columns_present";
530
+ epics_board_exists: "epics_board_exists";
531
+ releases_board_exists: "releases_board_exists";
532
+ bugs_board_exists: "bugs_board_exists";
533
+ tasks_to_sprints_relation: "tasks_to_sprints_relation";
534
+ tasks_to_epics_relation: "tasks_to_epics_relation";
535
+ }>;
536
+ status: z.ZodLiteral<"ok">;
537
+ message: z.ZodString;
538
+ details: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
539
+ }, z.core.$strict>, z.ZodObject<{
540
+ name: z.ZodEnum<{
541
+ tasks_board_exists: "tasks_board_exists";
542
+ tasks_status_column_present: "tasks_status_column_present";
543
+ tasks_status_labels_canonical: "tasks_status_labels_canonical";
544
+ sprints_board_exists: "sprints_board_exists";
545
+ sprints_date_columns_present: "sprints_date_columns_present";
546
+ epics_board_exists: "epics_board_exists";
547
+ releases_board_exists: "releases_board_exists";
548
+ bugs_board_exists: "bugs_board_exists";
549
+ tasks_to_sprints_relation: "tasks_to_sprints_relation";
550
+ tasks_to_epics_relation: "tasks_to_epics_relation";
551
+ }>;
552
+ status: z.ZodLiteral<"warn">;
553
+ message: z.ZodString;
554
+ details: z.ZodNullable<z.ZodObject<{
555
+ reason: z.ZodOptional<z.ZodEnum<{
556
+ not_in_mapping: "not_in_mapping";
557
+ not_accessible: "not_accessible";
558
+ board_deleted: "board_deleted";
559
+ no_tasks_board: "no_tasks_board";
560
+ no_sprints_board: "no_sprints_board";
561
+ no_status_column: "no_status_column";
562
+ no_date_columns: "no_date_columns";
563
+ no_relation_column: "no_relation_column";
564
+ no_matching_relation: "no_matching_relation";
565
+ no_target_board: "no_target_board";
566
+ settings_unparseable: "settings_unparseable";
567
+ }>>;
568
+ }, z.core.$loose>>;
569
+ }, z.core.$strict>, z.ZodObject<{
570
+ name: z.ZodEnum<{
571
+ tasks_board_exists: "tasks_board_exists";
572
+ tasks_status_column_present: "tasks_status_column_present";
573
+ tasks_status_labels_canonical: "tasks_status_labels_canonical";
574
+ sprints_board_exists: "sprints_board_exists";
575
+ sprints_date_columns_present: "sprints_date_columns_present";
576
+ epics_board_exists: "epics_board_exists";
577
+ releases_board_exists: "releases_board_exists";
578
+ bugs_board_exists: "bugs_board_exists";
579
+ tasks_to_sprints_relation: "tasks_to_sprints_relation";
580
+ tasks_to_epics_relation: "tasks_to_epics_relation";
581
+ }>;
582
+ status: z.ZodLiteral<"fail">;
583
+ message: z.ZodString;
584
+ details: z.ZodObject<{
585
+ reason: z.ZodEnum<{
586
+ not_in_mapping: "not_in_mapping";
587
+ not_accessible: "not_accessible";
588
+ board_deleted: "board_deleted";
589
+ no_tasks_board: "no_tasks_board";
590
+ no_sprints_board: "no_sprints_board";
591
+ no_status_column: "no_status_column";
592
+ no_date_columns: "no_date_columns";
593
+ no_relation_column: "no_relation_column";
594
+ no_matching_relation: "no_matching_relation";
595
+ no_target_board: "no_target_board";
596
+ settings_unparseable: "settings_unparseable";
597
+ }>;
598
+ }, z.core.$loose>;
599
+ }, z.core.$strict>], "status">;
600
+ export type DevDoctorCheckResult = z.infer<typeof devDoctorCheckResultSchema>;
601
+ /**
602
+ * Output shape for `monday dev doctor` (cli-design §11.3). The
603
+ * verb runs every check against the active profile's mapping +
604
+ * surfaces both the per-check results and the active mapping
605
+ * (so an agent diagnosing a misconfiguration sees both in one
606
+ * envelope).
607
+ *
608
+ * **Decision 2 closure (M26 pre-flight + M26a IMPL).** The
609
+ * pinned check names: see {@link DEV_DOCTOR_CHECK_NAMES} above
610
+ * (10 entries post-round-1; round-0 had 9 entries before P1-1
611
+ * / P2-2 fix-ups). Mirror cli-design §11.3 "runs `board doctor`
612
+ * against each configured dev board plus checks the cross-board
613
+ * `board_relation` wiring". Per-check `details` shape was
614
+ * deferred to IMPL at pre-flight + landed at M26a IMPL round-2
615
+ * P2-1 as a structural `z.discriminatedUnion('status', [...])`
616
+ * over {@link okCheckDetailsSchema} / {@link warnCheckDetailsSchema}
617
+ * / {@link failCheckDetailsSchema} (the `reason` enum from
618
+ * {@link DEV_DOCTOR_REASONS} is required on fail + optional on
619
+ * warn; extra keys per check stay open).
620
+ */
621
+ export interface DevDoctorOutput {
622
+ readonly profile: string;
623
+ readonly mapping: DevMapping;
624
+ readonly checks: readonly DevDoctorCheckResult[];
625
+ readonly summary: {
626
+ readonly ok_count: number;
627
+ readonly warn_count: number;
628
+ readonly fail_count: number;
629
+ };
630
+ }
631
+ export declare const devDoctorOutputSchema: z.ZodObject<{
632
+ profile: z.ZodString;
633
+ mapping: z.ZodObject<{
634
+ tasks_board: z.ZodOptional<z.ZodString>;
635
+ sprints_board: z.ZodOptional<z.ZodString>;
636
+ epics_board: z.ZodOptional<z.ZodString>;
637
+ bugs_board: z.ZodOptional<z.ZodString>;
638
+ releases_board: z.ZodOptional<z.ZodString>;
639
+ }, z.core.$strict>;
640
+ checks: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
641
+ name: z.ZodEnum<{
642
+ tasks_board_exists: "tasks_board_exists";
643
+ tasks_status_column_present: "tasks_status_column_present";
644
+ tasks_status_labels_canonical: "tasks_status_labels_canonical";
645
+ sprints_board_exists: "sprints_board_exists";
646
+ sprints_date_columns_present: "sprints_date_columns_present";
647
+ epics_board_exists: "epics_board_exists";
648
+ releases_board_exists: "releases_board_exists";
649
+ bugs_board_exists: "bugs_board_exists";
650
+ tasks_to_sprints_relation: "tasks_to_sprints_relation";
651
+ tasks_to_epics_relation: "tasks_to_epics_relation";
652
+ }>;
653
+ status: z.ZodLiteral<"ok">;
654
+ message: z.ZodString;
655
+ details: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
656
+ }, z.core.$strict>, z.ZodObject<{
657
+ name: z.ZodEnum<{
658
+ tasks_board_exists: "tasks_board_exists";
659
+ tasks_status_column_present: "tasks_status_column_present";
660
+ tasks_status_labels_canonical: "tasks_status_labels_canonical";
661
+ sprints_board_exists: "sprints_board_exists";
662
+ sprints_date_columns_present: "sprints_date_columns_present";
663
+ epics_board_exists: "epics_board_exists";
664
+ releases_board_exists: "releases_board_exists";
665
+ bugs_board_exists: "bugs_board_exists";
666
+ tasks_to_sprints_relation: "tasks_to_sprints_relation";
667
+ tasks_to_epics_relation: "tasks_to_epics_relation";
668
+ }>;
669
+ status: z.ZodLiteral<"warn">;
670
+ message: z.ZodString;
671
+ details: z.ZodNullable<z.ZodObject<{
672
+ reason: z.ZodOptional<z.ZodEnum<{
673
+ not_in_mapping: "not_in_mapping";
674
+ not_accessible: "not_accessible";
675
+ board_deleted: "board_deleted";
676
+ no_tasks_board: "no_tasks_board";
677
+ no_sprints_board: "no_sprints_board";
678
+ no_status_column: "no_status_column";
679
+ no_date_columns: "no_date_columns";
680
+ no_relation_column: "no_relation_column";
681
+ no_matching_relation: "no_matching_relation";
682
+ no_target_board: "no_target_board";
683
+ settings_unparseable: "settings_unparseable";
684
+ }>>;
685
+ }, z.core.$loose>>;
686
+ }, z.core.$strict>, z.ZodObject<{
687
+ name: z.ZodEnum<{
688
+ tasks_board_exists: "tasks_board_exists";
689
+ tasks_status_column_present: "tasks_status_column_present";
690
+ tasks_status_labels_canonical: "tasks_status_labels_canonical";
691
+ sprints_board_exists: "sprints_board_exists";
692
+ sprints_date_columns_present: "sprints_date_columns_present";
693
+ epics_board_exists: "epics_board_exists";
694
+ releases_board_exists: "releases_board_exists";
695
+ bugs_board_exists: "bugs_board_exists";
696
+ tasks_to_sprints_relation: "tasks_to_sprints_relation";
697
+ tasks_to_epics_relation: "tasks_to_epics_relation";
698
+ }>;
699
+ status: z.ZodLiteral<"fail">;
700
+ message: z.ZodString;
701
+ details: z.ZodObject<{
702
+ reason: z.ZodEnum<{
703
+ not_in_mapping: "not_in_mapping";
704
+ not_accessible: "not_accessible";
705
+ board_deleted: "board_deleted";
706
+ no_tasks_board: "no_tasks_board";
707
+ no_sprints_board: "no_sprints_board";
708
+ no_status_column: "no_status_column";
709
+ no_date_columns: "no_date_columns";
710
+ no_relation_column: "no_relation_column";
711
+ no_matching_relation: "no_matching_relation";
712
+ no_target_board: "no_target_board";
713
+ settings_unparseable: "settings_unparseable";
714
+ }>;
715
+ }, z.core.$loose>;
716
+ }, z.core.$strict>], "status">>;
717
+ summary: z.ZodObject<{
718
+ ok_count: z.ZodNumber;
719
+ warn_count: z.ZodNumber;
720
+ fail_count: z.ZodNumber;
721
+ }, z.core.$strict>;
722
+ }, z.core.$strict>;
723
+ /**
724
+ * Inputs to {@link discoverDevBoards}.
725
+ *
726
+ * `workspaceId` is optional — when set, the discovery walker scopes
727
+ * to that workspace via Monday's `boards(workspace_ids: [...])`
728
+ * arg; when unset, it walks every board the user has access to.
729
+ * M26a IMPL pinned the walker cadence at `DISCOVER_PAGE_LIMIT` 200
730
+ * entries per page with a hard `DISCOVER_PAGE_CAP` of 50 pages
731
+ * (10000 boards max — comfortably above any realistic dev
732
+ * workspace).
733
+ */
734
+ export interface DiscoverDevBoardsInputs {
735
+ readonly client: MondayClient;
736
+ readonly workspaceId?: string;
737
+ }
738
+ /**
739
+ * Result of {@link discoverDevBoards}. Carries the candidate list
740
+ * + the grouped per-noun match results so the `dev discover`
741
+ * action can emit the {@link DevDiscoverOutput} envelope after
742
+ * deciding whether `--apply` writes the mapping to the active
743
+ * profile.
744
+ *
745
+ * `source` / `cacheAgeSeconds` / `complexity` mirror the M23
746
+ * {@link FetchBoardFavoritesResult} envelope-meta pin — discover
747
+ * is a pure live read with no per-call cache; `complexity` is the
748
+ * LAST page's complexity slot (under `--verbose`).
749
+ */
750
+ export interface DiscoverDevBoardsResult {
751
+ readonly candidates: readonly DiscoverBoardCandidate[];
752
+ readonly matches: readonly DevNounMatchResult[];
753
+ readonly source: 'live';
754
+ readonly cacheAgeSeconds: null;
755
+ readonly complexity: Complexity | null;
756
+ }
757
+ /**
758
+ * Walks the user's accessible boards (optionally scoped to
759
+ * `workspaceId`) and groups them by dev-noun via the heuristic.
760
+ *
761
+ * **Walker contract.** Pages through `boards(limit:, page:, state:
762
+ * all[, workspace_ids:])` until a short page indicates the end of
763
+ * results OR the page cap is reached. Per the M26a IMPL handoff,
764
+ * `state: all` is passed so archived / deleted boards surface to the
765
+ * heuristic too — the action body surfaces them on
766
+ * {@link DevDiscoverOutput.matches} for agent-side review. The
767
+ * walker silently drops `Board.type !== 'board'` rows
768
+ * (`sub_items_board` virtual boards, `custom_object` entries,
769
+ * `document` entries) since those aren't valid dev-noun mapping
770
+ * targets — see the module docstring for the empirical-probe
771
+ * rationale.
772
+ */
773
+ export declare const discoverDevBoards: (inputs: DiscoverDevBoardsInputs) => Promise<DiscoverDevBoardsResult>;
774
+ /**
775
+ * Inputs to {@link runDevDoctor}.
776
+ */
777
+ export interface RunDevDoctorInputs {
778
+ readonly client: MondayClient;
779
+ readonly profile: string;
780
+ readonly mapping: DevMapping;
781
+ }
782
+ /**
783
+ * Result of {@link runDevDoctor}. Mirrors the {@link DevDoctorOutput}
784
+ * envelope minus the action-owned `profile` + `mapping` echo (the
785
+ * action body re-echoes these from its own inputs so the doctor
786
+ * resolver stays narrow). `source` / `cacheAgeSeconds` /
787
+ * `complexity` mirror the M23 envelope-meta pin.
788
+ */
789
+ export interface RunDevDoctorResult {
790
+ readonly checks: readonly DevDoctorCheckResult[];
791
+ readonly summary: DevDoctorOutput['summary'];
792
+ readonly source: 'live';
793
+ readonly cacheAgeSeconds: null;
794
+ readonly complexity: Complexity | null;
795
+ }
796
+ /**
797
+ * Internal wire-row shape for the doctor's per-board hydration call.
798
+ * Carries the columns + state needed for the 10 pinned checks.
799
+ */
800
+ declare const rawDoctorColumnSchema: z.ZodObject<{
801
+ id: z.ZodString;
802
+ title: z.ZodString;
803
+ type: z.ZodString;
804
+ settings_str: z.ZodNullable<z.ZodString>;
805
+ }, z.core.$loose>;
806
+ type RawDoctorColumn = z.infer<typeof rawDoctorColumnSchema>;
807
+ /**
808
+ * Runs every {@link DEV_DOCTOR_CHECK_NAMES} check against the
809
+ * `inputs.mapping`. Returns a per-check result list + a summary
810
+ * count. One `boards(ids:)` call hydrates every configured board's
811
+ * metadata; the 10 checks operate over the hydrated data.
812
+ *
813
+ * The verb's exit code stays 0 regardless of per-check `fail`
814
+ * counts — `dev doctor`'s success is "diagnostics completed";
815
+ * agents inspect `data.summary.fail_count` for drift.
816
+ * `dev_board_misconfigured` is reserved for the case where the
817
+ * doctor itself can't complete (no boards hydrated at all, etc.) —
818
+ * not surfaced here at this milestone (no configured boards = empty
819
+ * mapping = every `<noun>_board_exists` check fails, which is the
820
+ * correct diagnostic signal).
821
+ */
822
+ export declare const runDevDoctor: (inputs: RunDevDoctorInputs) => Promise<RunDevDoctorResult>;
823
+ /**
824
+ * Reads the active profile's `[profiles.<name>.dev]` block. Throws
825
+ * `dev_not_configured` when:
826
+ * - no `config.toml` exists at all (`details.reason:
827
+ * "no_config_file"`),
828
+ * - the named profile is absent from the config
829
+ * (`details.reason: "profile_absent"`), OR
830
+ * - the named profile exists but has no `dev` sub-block
831
+ * (`details.reason: "no_dev_block"`).
832
+ *
833
+ * Each surface points the agent at `monday dev configure` /
834
+ * `monday dev discover --apply` via `details.hint`.
835
+ */
836
+ export declare const loadDevMapping: (profile: string, options?: ProfilesRootOptions) => Promise<DevMapping>;
837
+ /**
838
+ * Atomically writes the supplied `mapping` into
839
+ * `profiles[profile].dev` in `~/.monday-cli/config.toml`. Creates
840
+ * the file (and the named profile entry) if absent.
841
+ *
842
+ * **TOML round-trip behavior.** `smol-toml`'s `stringify` produces
843
+ * canonical TOML output — comments and bespoke formatting from the
844
+ * original file are NOT preserved. This is a contract correction
845
+ * vs the M26 pre-flight docstring claim (to be flagged in the
846
+ * M26a close-docs sweep's post-mortem). Mitigation: most config.toml
847
+ * files are CLI-managed (`monday auth login` populates the
848
+ * credentials side; this helper populates the dev side), so the
849
+ * comment-preservation concern is narrow. A future v0.4 string-
850
+ * surgery write path could preserve comments outside the dev block
851
+ * if user demand surfaces.
852
+ *
853
+ * **Disk discipline (mirrors `src/config/credentials.ts`):**
854
+ * 1. `mkdir({ recursive: true, mode: 0o700 })` + explicit `chmod
855
+ * 0o700` on the parent dir.
856
+ * 2. `writeFile(tmpPath, payload, { mode: 0o600 })`.
857
+ * 3. `chmod(tmpPath, 0o600)` (re-applied since `writeFile`'s
858
+ * `mode` is advisory under umask).
859
+ * 4. `rename(tmpPath, finalPath)` (atomic on the same filesystem).
860
+ *
861
+ * **Idempotent:** re-writing the same mapping produces the same
862
+ * bytes (modulo formatting). When `mapping` carries every existing
863
+ * slot at the same value, the write is functionally a no-op.
864
+ */
865
+ export declare const saveDevMapping: (profile: string, mapping: DevMapping, options?: ProfilesRootOptions) => Promise<void>;
866
+ /**
867
+ * Sprint date-range state literal — `active` (today within range),
868
+ * `past` (range ended before today), `future` (range starts after
869
+ * today). Surfaced as the argv shape for `dev sprint list --state`
870
+ * + the classification output of {@link classifySprint}.
871
+ *
872
+ * R-NEW-38 lift (post-M26b drift sweep): hoisted from
873
+ * `commands/dev/sprint/list.ts:_internals` after the 3-consumer
874
+ * threshold fired across `sprint/list.ts` + `sprint/current.ts` +
875
+ * `task/list.ts` (the verb-file-to-verb-file cross-import via
876
+ * `_internals` was the anti-pattern that surfaced the lift).
877
+ */
878
+ export declare const SPRINT_STATE_LITERALS: readonly ["active", "past", "future"];
879
+ export type SprintState = (typeof SPRINT_STATE_LITERALS)[number];
880
+ /**
881
+ * Parses a YYYY-MM-DD string into an epoch-ms day boundary (UTC).
882
+ * NaN-guards per the M24 round-2 P3-1 precedent (`4c83860`) —
883
+ * returns `null` on an unparseable / malformed date so the caller
884
+ * falls through to the `past` default rather than emitting NaN-
885
+ * shaped state buckets.
886
+ */
887
+ export declare const dayEpoch: (raw: string | null | undefined) => number | null;
888
+ export interface SprintDateRange {
889
+ readonly start: number;
890
+ readonly end: number;
891
+ }
892
+ /**
893
+ * Extracts a sprint's date range from its projected columns. Prefers
894
+ * a `timeline` column (parses `value.from` / `value.to`); falls back
895
+ * to the first two `date` columns sorted by id (single date column
896
+ * = single-day range; reversed start/end auto-normalised by epoch).
897
+ * Returns `null` when no usable date columns are present.
898
+ */
899
+ export declare const extractDateRange: (item: ProjectedItem) => SprintDateRange | null;
900
+ /**
901
+ * Classifies a sprint's state from its date range + the current
902
+ * day's epoch. Sprints without a resolvable date range default to
903
+ * `past` so a `--state past` filter catches misconfigured rows
904
+ * (the structural drift is diagnosed via `dev doctor`'s
905
+ * `sprints_date_columns_present` check; no warning code).
906
+ */
907
+ export declare const classifySprint: (range: SprintDateRange | null, todayEpoch: number) => SprintState;
908
+ /**
909
+ * Walks every page of `items_page` on the supplied board and projects
910
+ * the rows through the M4 {@link projectItem} contract. Used by the
911
+ * read-side dev workflow verbs (`dev sprint list/items/current`,
912
+ * `dev epic list/items`, `dev release list`, `dev task list`).
913
+ *
914
+ * Skips board-metadata cache loading — dev verbs don't expose
915
+ * `--columns` selection, and the items_page rows include
916
+ * `column { title }` per the {@link ITEM_FIELDS_FRAGMENT}, so the
917
+ * fallback title path on {@link projectItem} is sufficient. Returns
918
+ * the `complexity` from the *last* response so the verb's success
919
+ * envelope reflects the freshest budget snapshot per `cli-design.md`
920
+ * §6.1 — mirrors the {@link paginate} walker's idiom.
921
+ */
922
+ export declare const walkDevBoardItems: (inputs: {
923
+ readonly client: MondayClient;
924
+ readonly boardId: string;
925
+ readonly operationName: string;
926
+ readonly queryParams?: Readonly<Record<string, unknown>>;
927
+ readonly now: () => Date;
928
+ }) => Promise<{
929
+ readonly items: readonly ProjectedItem[];
930
+ readonly complexity: Complexity | null;
931
+ }>;
932
+ /**
933
+ * Hydrates one board's `columns { id title type settings_str }` slot
934
+ * via a single `boards(ids:)` call. Used by mutation verbs
935
+ * (`dev task start/done/block`) to resolve the status column ID +
936
+ * label vocabulary, and by the relation-filter verbs
937
+ * (`dev sprint items`, `dev epic items`) to find the board_relation
938
+ * column linking the tasks board to a target.
939
+ */
940
+ export declare const hydrateDevBoardColumns: (client: MondayClient, boardId: string, operationName: string) => Promise<{
941
+ readonly columns: readonly RawDoctorColumn[];
942
+ readonly complexity: Complexity | null;
943
+ }>;
944
+ /**
945
+ * Walks `columns` looking for a `board_relation` column whose
946
+ * `settings_str.boardIds` (or `board_ids`) array includes
947
+ * `targetBoardId`. Returns the first match or `undefined`.
948
+ *
949
+ * Same `settings_str` parse as the doctor's
950
+ * `checkBoardRelation` — pinned at M26a IMPL. Lifted here for
951
+ * reuse by `dev sprint items` and `dev epic items`.
952
+ */
953
+ export declare const findRelationColumnIdToBoard: (columns: readonly {
954
+ readonly id: string;
955
+ readonly type: string;
956
+ readonly settings_str: string | null;
957
+ }[], targetBoardId: string) => string | undefined;
958
+ /**
959
+ * Extracts linked item IDs (as decimal strings) from a board_relation
960
+ * column's parsed `value` JSON. Monday's wire shape is one of:
961
+ * - `{linkedPulseIds: [{linkedPulseId: 123 | "123"}, ...]}`
962
+ * - `{item_ids: [123 | "123", ...]}` (newer 2026-01 shape)
963
+ * Returns an empty array on null / malformed / unrecognised shape.
964
+ */
965
+ export declare const extractLinkedItemIds: (value: unknown) => readonly string[];
966
+ /**
967
+ * Finds the status (or color) column on a board. Returns the column
968
+ * + the parsed labels (id → label text). Throws
969
+ * `dev_board_misconfigured` with `reason: 'no_status_column'` when
970
+ * no status column is present (mirrors the doctor's
971
+ * `tasks_status_column_present` fail surface; if doctor passes, this
972
+ * lookup also passes).
973
+ */
974
+ export declare const resolveStatusColumn: (boardId: string, columns: readonly RawDoctorColumn[]) => {
975
+ readonly columnId: string;
976
+ readonly labels: ReadonlyMap<string, string>;
977
+ };
978
+ /**
979
+ * Canonical status labels Monday Dev's stock Tasks template surfaces.
980
+ * The three task mutation verbs (`dev task start/done/block`) flip
981
+ * the status column to one of these. Exported for the
982
+ * {@link flipTaskStatus} helper + the verbs that import the literal
983
+ * union for argv shapes.
984
+ */
985
+ export type DevTaskCanonicalLabel = 'Working on it' | 'Done' | 'Stuck';
986
+ /**
987
+ * Resolves a canonical Monday Dev status label ("Working on it" /
988
+ * "Done" / "Stuck") to the actual label text written on the
989
+ * configured status column — case-insensitive match. Returns the
990
+ * exact stored form so the subsequent
991
+ * `change_simple_column_value` flips against bytes Monday accepts
992
+ * (the wire is case-sensitive on the value).
993
+ *
994
+ * Throws `dev_board_misconfigured` with
995
+ * `reason: 'no_status_column'` when the canonical label isn't
996
+ * present on the column — points at `monday dev doctor` for
997
+ * diagnostics. (Mirrors the doctor's
998
+ * `tasks_status_labels_canonical` warn surface; the doctor's warn
999
+ * doesn't block a workflow verb at the doctor layer, but the
1000
+ * workflow verb itself can't proceed without a matching label.)
1001
+ */
1002
+ export declare const resolveCanonicalLabel: (boardId: string, columnId: string, labels: ReadonlyMap<string, string>, canonical: DevTaskCanonicalLabel) => string;
1003
+ export interface DevCreateUpdateResult {
1004
+ readonly updateId: string;
1005
+ readonly complexity: Complexity | null;
1006
+ }
1007
+ /**
1008
+ * Fires the `create_update` mutation for a dev task side-effect
1009
+ * (`task done --message` / `task block --reason`) and returns the
1010
+ * created update's ID + the wire complexity. Shared by both verbs
1011
+ * (3-consumer threshold not yet reached, but the parse-boundary
1012
+ * discipline matters at every site).
1013
+ *
1014
+ * Throws `internal_error` when Monday's response carries
1015
+ * `create_update: null` (the documented null-payload escape hatch
1016
+ * for failed update creation; mirrors M5b's `internal_error` shape
1017
+ * per `item-mutation-result.ts`'s `caller_handles` semantics).
1018
+ */
1019
+ export declare const fireDevCreateUpdate: (inputs: {
1020
+ readonly client: MondayClient;
1021
+ readonly itemId: string;
1022
+ readonly body: string;
1023
+ readonly operationName: string;
1024
+ }) => Promise<DevCreateUpdateResult>;
1025
+ export declare const flipTaskStatus: (inputs: {
1026
+ readonly client: MondayClient;
1027
+ readonly tasksBoard: string;
1028
+ readonly itemId: string;
1029
+ readonly canonical: DevTaskCanonicalLabel;
1030
+ readonly hydrateOperation: string;
1031
+ }) => Promise<{
1032
+ readonly projected: ProjectedItem;
1033
+ readonly columnId: string;
1034
+ readonly label: string;
1035
+ readonly complexity: Complexity | null;
1036
+ }>;
1037
+ export {};
1038
+ //# sourceMappingURL=dev-conventions.d.ts.map