monday-cli 0.7.0 → 0.8.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 (133) hide show
  1. package/CHANGELOG.md +250 -0
  2. package/README.md +87 -45
  3. package/dist/api/assets.d.ts +3 -3
  4. package/dist/api/board-metadata.d.ts +7 -4
  5. package/dist/api/board-metadata.d.ts.map +1 -1
  6. package/dist/api/board-metadata.js +21 -6
  7. package/dist/api/board-metadata.js.map +1 -1
  8. package/dist/api/column-types.d.ts +14 -7
  9. package/dist/api/column-types.d.ts.map +1 -1
  10. package/dist/api/column-types.js +14 -7
  11. package/dist/api/column-types.js.map +1 -1
  12. package/dist/api/error-decoration.d.ts +124 -0
  13. package/dist/api/error-decoration.d.ts.map +1 -0
  14. package/dist/api/error-decoration.js +161 -0
  15. package/dist/api/error-decoration.js.map +1 -0
  16. package/dist/api/fetch-transport-helpers.d.ts +97 -0
  17. package/dist/api/fetch-transport-helpers.d.ts.map +1 -0
  18. package/dist/api/fetch-transport-helpers.js +175 -0
  19. package/dist/api/fetch-transport-helpers.js.map +1 -0
  20. package/dist/api/file-column-set.d.ts +388 -82
  21. package/dist/api/file-column-set.d.ts.map +1 -1
  22. package/dist/api/file-column-set.js +466 -88
  23. package/dist/api/file-column-set.js.map +1 -1
  24. package/dist/api/multipart-transport.d.ts +95 -60
  25. package/dist/api/multipart-transport.d.ts.map +1 -1
  26. package/dist/api/multipart-transport.js +102 -120
  27. package/dist/api/multipart-transport.js.map +1 -1
  28. package/dist/api/transport.d.ts.map +1 -1
  29. package/dist/api/transport.js +2 -99
  30. package/dist/api/transport.js.map +1 -1
  31. package/dist/cli/program.js +1 -1
  32. package/dist/cli/program.js.map +1 -1
  33. package/dist/commands/auth/login.js +1 -1
  34. package/dist/commands/auth/login.js.map +1 -1
  35. package/dist/commands/auth/logout.js +1 -1
  36. package/dist/commands/auth/logout.js.map +1 -1
  37. package/dist/commands/board/column-create.d.ts +20 -2
  38. package/dist/commands/board/column-create.d.ts.map +1 -1
  39. package/dist/commands/board/column-create.js +191 -20
  40. package/dist/commands/board/column-create.js.map +1 -1
  41. package/dist/commands/board/describe.d.ts +5 -3
  42. package/dist/commands/board/describe.d.ts.map +1 -1
  43. package/dist/commands/board/describe.js +12 -4
  44. package/dist/commands/board/describe.js.map +1 -1
  45. package/dist/commands/completion.js +1 -1
  46. package/dist/commands/completion.js.map +1 -1
  47. package/dist/commands/dev/configure.js +1 -1
  48. package/dist/commands/dev/configure.js.map +1 -1
  49. package/dist/commands/dev/discover.js +1 -1
  50. package/dist/commands/dev/discover.js.map +1 -1
  51. package/dist/commands/dev/doctor.js +1 -1
  52. package/dist/commands/dev/doctor.js.map +1 -1
  53. package/dist/commands/dev/epic/items.js +2 -2
  54. package/dist/commands/dev/epic/items.js.map +1 -1
  55. package/dist/commands/dev/epic/list.js +2 -2
  56. package/dist/commands/dev/epic/list.js.map +1 -1
  57. package/dist/commands/dev/release/list.js +2 -2
  58. package/dist/commands/dev/release/list.js.map +1 -1
  59. package/dist/commands/dev/sprint/current.js +2 -2
  60. package/dist/commands/dev/sprint/current.js.map +1 -1
  61. package/dist/commands/dev/sprint/items.js +2 -2
  62. package/dist/commands/dev/sprint/items.js.map +1 -1
  63. package/dist/commands/dev/sprint/list.js +2 -2
  64. package/dist/commands/dev/sprint/list.js.map +1 -1
  65. package/dist/commands/dev/task/block.js +2 -2
  66. package/dist/commands/dev/task/block.js.map +1 -1
  67. package/dist/commands/dev/task/done.js +2 -2
  68. package/dist/commands/dev/task/done.js.map +1 -1
  69. package/dist/commands/dev/task/list.js +2 -2
  70. package/dist/commands/dev/task/list.js.map +1 -1
  71. package/dist/commands/dev/task/start.js +2 -2
  72. package/dist/commands/dev/task/start.js.map +1 -1
  73. package/dist/commands/doc/get.js +1 -1
  74. package/dist/commands/doc/get.js.map +1 -1
  75. package/dist/commands/doc/list.js +1 -1
  76. package/dist/commands/doc/list.js.map +1 -1
  77. package/dist/commands/emit.d.ts.map +1 -1
  78. package/dist/commands/emit.js +19 -16
  79. package/dist/commands/emit.js.map +1 -1
  80. package/dist/commands/item/clear.d.ts.map +1 -1
  81. package/dist/commands/item/clear.js +15 -41
  82. package/dist/commands/item/clear.js.map +1 -1
  83. package/dist/commands/item/create.d.ts +93 -1
  84. package/dist/commands/item/create.d.ts.map +1 -1
  85. package/dist/commands/item/create.js +474 -53
  86. package/dist/commands/item/create.js.map +1 -1
  87. package/dist/commands/item/search.js +7 -7
  88. package/dist/commands/item/search.js.map +1 -1
  89. package/dist/commands/item/set.d.ts +1 -0
  90. package/dist/commands/item/set.d.ts.map +1 -1
  91. package/dist/commands/item/set.js +94 -1
  92. package/dist/commands/item/set.js.map +1 -1
  93. package/dist/commands/item/time-track/start.js +2 -2
  94. package/dist/commands/item/time-track/start.js.map +1 -1
  95. package/dist/commands/item/time-track/stop.js +2 -2
  96. package/dist/commands/item/time-track/stop.js.map +1 -1
  97. package/dist/commands/item/update.d.ts +128 -11
  98. package/dist/commands/item/update.d.ts.map +1 -1
  99. package/dist/commands/item/update.js +784 -82
  100. package/dist/commands/item/update.js.map +1 -1
  101. package/dist/commands/item/upload.js +5 -5
  102. package/dist/commands/item/upload.js.map +1 -1
  103. package/dist/commands/item/watch.js +2 -2
  104. package/dist/commands/item/watch.js.map +1 -1
  105. package/dist/commands/notification/send.js +1 -1
  106. package/dist/commands/notification/send.js.map +1 -1
  107. package/dist/commands/update/upload.js +3 -3
  108. package/dist/commands/update/upload.js.map +1 -1
  109. package/dist/commands/user/team-add-members.js +1 -1
  110. package/dist/commands/user/team-add-members.js.map +1 -1
  111. package/dist/commands/user/team-create.js +1 -1
  112. package/dist/commands/user/team-create.js.map +1 -1
  113. package/dist/commands/user/team-remove-members.js +1 -1
  114. package/dist/commands/user/team-remove-members.js.map +1 -1
  115. package/dist/commands/webhook/create.js +1 -1
  116. package/dist/commands/webhook/create.js.map +1 -1
  117. package/dist/commands/webhook/delete.js +1 -1
  118. package/dist/commands/webhook/delete.js.map +1 -1
  119. package/dist/commands/webhook/list.js +1 -1
  120. package/dist/commands/webhook/list.js.map +1 -1
  121. package/dist/utils/file-source.d.ts +109 -0
  122. package/dist/utils/file-source.d.ts.map +1 -1
  123. package/dist/utils/file-source.js +123 -0
  124. package/dist/utils/file-source.js.map +1 -1
  125. package/dist/utils/output/select.d.ts +22 -0
  126. package/dist/utils/output/select.d.ts.map +1 -1
  127. package/dist/utils/output/select.js +30 -0
  128. package/dist/utils/output/select.js.map +1 -1
  129. package/dist/utils/output/table.d.ts +10 -0
  130. package/dist/utils/output/table.d.ts.map +1 -1
  131. package/dist/utils/output/table.js +40 -3
  132. package/dist/utils/output/table.js.map +1 -1
  133. package/package.json +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/webhook/list.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAsB,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EACL,YAAY,EACZ,uBAAuB,GAExB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;AAElE,MAAM,CAAC,MAAM,kBAAkB,GAG3B;IACF,IAAI,EAAE,cAAc;IACpB,OAAO,EAAE,gDAAgD;IACzD,QAAQ,EAAE;QACR,8BAA8B;QAC9B,qCAAqC;KACtC;IACD,UAAU,EAAE,IAAI;IAChB,WAAW;IACX,YAAY,EAAE,uBAAuB;IACrC,MAAM,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;QACvB,MAAM,IAAI,GAAG,gBAAgB,CAC3B,OAAO,EACP,SAAS,EACT,6FAA6F,CAC9F,CAAC;QACF,IAAI;aACD,OAAO,CAAC,gBAAgB,CAAC;aACzB,WAAW,CAAC,kBAAkB,CAAC,OAAO,CAAC;aACvC,WAAW,CACV,OAAO,EACP;YACE,EAAE;YACF,WAAW;YACX,GAAG,kBAAkB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;YACnD,EAAE;SACH,CAAC,IAAI,CAAC,IAAI,CAAC,CACb;aACA,MAAM,CAAC,KAAK,EAAE,UAAmB,EAAE,EAAE;YACpC,MAAM,MAAM,GAAG,SAAS,CAAC,kBAAkB,CAAC,WAAW,EAAE;gBACvD,OAAO,EAAE,UAAU;aACpB,CAAC,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YAClE,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC;gBAChC,MAAM;gBACN,OAAO,EAAE,MAAM,CAAC,OAAO;aACxB,CAAC,CAAC;YACH,WAAW,CAAC;gBACV,GAAG;gBACH,IAAI,EAAE,MAAM,CAAC,QAAQ;gBACrB,MAAM,EAAE,kBAAkB,CAAC,YAAY;gBACvC,WAAW,EAAE,OAAO,CAAC,IAAI,EAAE;gBAC3B,IAAI,EAAE,YAAY;gBAClB,QAAQ,EAAE,EAAE;gBACZ,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,eAAe,EAAE,MAAM,CAAC,eAAe;gBACvC,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,UAAU;aACX,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/webhook/list.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAsB,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EACL,YAAY,EACZ,uBAAuB,GAExB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;AAElE,MAAM,CAAC,MAAM,kBAAkB,GAG3B;IACF,IAAI,EAAE,cAAc;IACpB,OAAO,EAAE,gDAAgD;IACzD,QAAQ,EAAE;QACR,8BAA8B;QAC9B,qCAAqC;KACtC;IACD,UAAU,EAAE,IAAI;IAChB,WAAW;IACX,YAAY,EAAE,uBAAuB;IACrC,MAAM,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;QACvB,MAAM,IAAI,GAAG,gBAAgB,CAC3B,OAAO,EACP,SAAS,EACT,gDAAgD,CACjD,CAAC;QACF,IAAI;aACD,OAAO,CAAC,gBAAgB,CAAC;aACzB,WAAW,CAAC,kBAAkB,CAAC,OAAO,CAAC;aACvC,WAAW,CACV,OAAO,EACP;YACE,EAAE;YACF,WAAW;YACX,GAAG,kBAAkB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;YACnD,EAAE;SACH,CAAC,IAAI,CAAC,IAAI,CAAC,CACb;aACA,MAAM,CAAC,KAAK,EAAE,UAAmB,EAAE,EAAE;YACpC,MAAM,MAAM,GAAG,SAAS,CAAC,kBAAkB,CAAC,WAAW,EAAE;gBACvD,OAAO,EAAE,UAAU;aACpB,CAAC,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YAClE,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC;gBAChC,MAAM;gBACN,OAAO,EAAE,MAAM,CAAC,OAAO;aACxB,CAAC,CAAC;YACH,WAAW,CAAC;gBACV,GAAG;gBACH,IAAI,EAAE,MAAM,CAAC,QAAQ;gBACrB,MAAM,EAAE,kBAAkB,CAAC,YAAY;gBACvC,WAAW,EAAE,OAAO,CAAC,IAAI,EAAE;gBAC3B,IAAI,EAAE,YAAY;gBAClB,QAAQ,EAAE,EAAE;gBACZ,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,eAAe,EAAE,MAAM,CAAC,eAAe;gBACvC,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,UAAU;aACX,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;CACF,CAAC"}
@@ -35,6 +35,19 @@
35
35
  * 2 M31 consumers cover the pre-check error branches; this module
36
36
  * adds direct unit tests for the helper + the buildBlobFromPath
37
37
  * sibling.
38
+ *
39
+ * **v0.8-M47 stdin sibling.** The file `--set <file-col>=-` stdin
40
+ * source (D7 fold) is a SEPARATE sibling — {@link readStdinFileSource}
41
+ * below — not a retrofit into {@link precheckLocalFile} /
42
+ * {@link buildBlobFromPath}. Those two stay path-only by design: their
43
+ * fire-point ordering (pre-check BEFORE `resolveClient` so a bad path
44
+ * surfaces as `usage_error` not `config_error`; Blob build AFTER
45
+ * column-type validation) is load-bearing and doesn't transfer to a
46
+ * single non-replayable stream. The stdin source buffers stdin once
47
+ * (no `fs.stat` is possible on a stream), so it carries no pre-check
48
+ * size leg; the routing layer (`file-column-set.ts:
49
+ * routeFileColumnDispatch`) enforces stdin's single-file /
50
+ * single-target scope BEFORE this helper is reached.
38
51
  */
39
52
  /**
40
53
  * Result of a successful {@link precheckLocalFile} call. Carries the
@@ -90,4 +103,100 @@ export declare const precheckLocalFile: (rawPath: string) => Promise<LocalFilePr
90
103
  * the cap isn't exposed via the GraphQL schema.
91
104
  */
92
105
  export declare const buildBlobFromPath: (precheck: LocalFilePrecheck) => Promise<Blob>;
106
+ /**
107
+ * Sentinel value selecting stdin as the file source on a file-column
108
+ * `--set <file-col>=-` (or the `monday item set <iid> <file-col>=-`
109
+ * positional). v0.8-M47 D7 fold — closes the v0.6-M38 D7 deferral.
110
+ * A bare `-` is the conventional CLI stdin token (mirrors the
111
+ * `--body-file -` shape on `monday update create` / `update reply`).
112
+ */
113
+ export declare const STDIN_FILE_SENTINEL = "-";
114
+ /**
115
+ * Default filename used for Monday's wire `Asset.name` when a stdin
116
+ * `<file-col>=-` source is dispatched WITHOUT an explicit
117
+ * `--filename <name>`. Pinned at the v0.8-M47 pre-flight probe:
118
+ * `add_file_to_column` accepts any non-empty filename (`"blob"` /
119
+ * `"stdin"` / a real name all return `200`); only an EMPTY filename
120
+ * `500`s. `"blob"` is source-agnostic (stdin carries no intrinsic
121
+ * name) and matches the probe's tested default. Agents that want a
122
+ * meaningful `Asset.name` pass `--filename`.
123
+ */
124
+ export declare const DEFAULT_STDIN_FILENAME = "blob";
125
+ /**
126
+ * True when a file-column `--set` value selects stdin as its source
127
+ * (i.e. the agent passed the bare {@link STDIN_FILE_SENTINEL}). Pure
128
+ * predicate — the actual stdin read happens later via
129
+ * {@link readStdinFileSource}, AFTER the routing layer
130
+ * (`file-column-set.ts:routeFileColumnDispatch`) has confirmed the
131
+ * stdin source is the sole file entry on a single-target callShape.
132
+ */
133
+ export declare const isStdinFileSetSource: (value: string) => boolean;
134
+ /**
135
+ * Resolves the wire `Asset.name` for a stdin `<file-col>=-` source:
136
+ * the agent's `--filename` when present, else
137
+ * {@link DEFAULT_STDIN_FILENAME}. A non-empty `--filename` is already
138
+ * guaranteed by the command schemas (`z.string().min(1)`), so this
139
+ * never returns an empty name (which Monday `500`s). Extracted so the
140
+ * default-fallback branch is unit-tested once rather than replicated
141
+ * across the four `<file-col>=-` dispatch sites (`item set` live +
142
+ * dry-run, single-item `item update`, `item create`).
143
+ */
144
+ export declare const resolveStdinFilename: (filename: string | undefined) => string;
145
+ /**
146
+ * Result of a successful {@link readStdinFileSource} read. Mirrors the
147
+ * shape {@link buildBlobFromPath} feeds the multipart transport (a Web
148
+ * `Blob` + the resolved filename) plus the buffered byte length
149
+ * (`fs.stat` is impossible on a stream, so size is the post-read
150
+ * buffer length rather than a pre-check measurement).
151
+ */
152
+ export interface StdinFileSource {
153
+ /** The buffered stdin bytes wrapped as a Web `Blob`. */
154
+ readonly blob: Blob;
155
+ /** Resolved `Asset.name` — `--filename` or {@link DEFAULT_STDIN_FILENAME}. */
156
+ readonly filename: string;
157
+ /** Buffered byte length (post-read; `0` rejects upstream — Monday `500`s empty). */
158
+ readonly fileSizeBytes: number;
159
+ }
160
+ /**
161
+ * Reads the entire stdin stream into memory and wraps it as a Web
162
+ * `Blob` with a `Content-Type` sniffed from `filename` (so a
163
+ * `--filename report.pdf` still gets the right mime; the default
164
+ * {@link DEFAULT_STDIN_FILENAME} `"blob"` carries no extension →
165
+ * `application/octet-stream`). The Blob is the payload the multipart
166
+ * transport sends to Monday's wire `File!` scalar — same downstream
167
+ * contract as {@link buildBlobFromPath}, but sourced from a single
168
+ * non-replayable stream rather than a path.
169
+ *
170
+ * `stdin` is the runner-threaded stream (`ctx.stdin`, wired from
171
+ * `process.stdin`) rather than a global read so integration tests can
172
+ * inject a deterministic `Readable` — mirrors `readSourceContent`'s
173
+ * stdin handling for the `--body-file -` surface.
174
+ *
175
+ * Unlike {@link precheckLocalFile} there is no pre-read size/readable
176
+ * pre-check leg: a stream can't be `fs.stat`'d, and reading it to
177
+ * measure would consume the only copy. Callers therefore reach this
178
+ * helper only AFTER the routing layer has confirmed (a) exactly one
179
+ * stdin `<file-col>=-` per call, (b) it is the sole file `--set`
180
+ * entry, and (c) the callShape is single-target (`item set` /
181
+ * single-item `item update` / `item create`) — bulk fan-out can't
182
+ * replay one stream across N items. The bytes buffer fully into
183
+ * memory (same in-memory model as {@link buildBlobFromPath}).
184
+ *
185
+ * Throws {@link UsageError}:
186
+ * - `'stdin_file_empty'` — stdin produced zero bytes. Monday rejects
187
+ * empty uploads server-side (`FILE_SIZE_LIMIT_EXCEEDED`); the CLI
188
+ * surfaces the rejection with a clearer hint via this local check,
189
+ * mirroring {@link precheckLocalFile}'s `'file_empty'` discipline.
190
+ * - `'stdin_not_wired'` — `stdin` is `undefined` (the runner did not
191
+ * thread a stream). Defensive: production always wires
192
+ * `process.stdin`; reachable only via direct misuse / a bare-`run`
193
+ * test that omits the slot.
194
+ *
195
+ * No TTY guard: like the `--body-file -` sibling (`readSourceContent`)
196
+ * the helper reads the stream to EOF regardless of TTY-ness — a closed
197
+ * / empty pipe surfaces as `'stdin_file_empty'`; an interactive
198
+ * terminal blocks until EOF exactly as `--body-file -` does. The
199
+ * stdout-`isTTY` flag on `ctx` is the output-mode signal, not stdin's.
200
+ */
201
+ export declare const readStdinFileSource: (stdin: NodeJS.ReadableStream | undefined, filename: string) => Promise<StdinFileSource>;
93
202
  //# sourceMappingURL=file-source.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"file-source.d.ts","sourceRoot":"","sources":["../../src/utils/file-source.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAQH;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,8BAA8B;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,gEAAgE;IAChE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,kEAAkE;IAClE,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,iBAAiB,GAC5B,SAAS,MAAM,KACd,OAAO,CAAC,iBAAiB,CAgE3B,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,iBAAiB,GAC5B,UAAU,iBAAiB,KAC1B,OAAO,CAAC,IAAI,CAGd,CAAC"}
1
+ {"version":3,"file":"file-source.d.ts","sourceRoot":"","sources":["../../src/utils/file-source.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AAQH;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,8BAA8B;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,gEAAgE;IAChE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,kEAAkE;IAClE,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,iBAAiB,GAC5B,SAAS,MAAM,KACd,OAAO,CAAC,iBAAiB,CAgE3B,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,iBAAiB,GAC5B,UAAU,iBAAiB,KAC1B,OAAO,CAAC,IAAI,CAGd,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAEvC;;;;;;;;;GASG;AACH,eAAO,MAAM,sBAAsB,SAAS,CAAC;AAE7C;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,GAAI,OAAO,MAAM,KAAG,OACtB,CAAC;AAEhC;;;;;;;;;GASG;AACH,eAAO,MAAM,oBAAoB,GAC/B,UAAU,MAAM,GAAG,SAAS,KAC3B,MAA4C,CAAC;AAEhD;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B,wDAAwD;IACxD,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,8EAA8E;IAC9E,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,oFAAoF;IACpF,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,eAAO,MAAM,mBAAmB,GAC9B,OAAO,MAAM,CAAC,cAAc,GAAG,SAAS,EACxC,UAAU,MAAM,KACf,OAAO,CAAC,eAAe,CAoCzB,CAAC"}
@@ -35,6 +35,19 @@
35
35
  * 2 M31 consumers cover the pre-check error branches; this module
36
36
  * adds direct unit tests for the helper + the buildBlobFromPath
37
37
  * sibling.
38
+ *
39
+ * **v0.8-M47 stdin sibling.** The file `--set <file-col>=-` stdin
40
+ * source (D7 fold) is a SEPARATE sibling — {@link readStdinFileSource}
41
+ * below — not a retrofit into {@link precheckLocalFile} /
42
+ * {@link buildBlobFromPath}. Those two stay path-only by design: their
43
+ * fire-point ordering (pre-check BEFORE `resolveClient` so a bad path
44
+ * surfaces as `usage_error` not `config_error`; Blob build AFTER
45
+ * column-type validation) is load-bearing and doesn't transfer to a
46
+ * single non-replayable stream. The stdin source buffers stdin once
47
+ * (no `fs.stat` is possible on a stream), so it carries no pre-check
48
+ * size leg; the routing layer (`file-column-set.ts:
49
+ * routeFileColumnDispatch`) enforces stdin's single-file /
50
+ * single-target scope BEFORE this helper is reached.
38
51
  */
39
52
  import { stat as fsStat, access as fsAccess, readFile } from 'node:fs/promises';
40
53
  import { constants as fsConstants } from 'node:fs';
@@ -137,4 +150,114 @@ export const buildBlobFromPath = async (precheck) => {
137
150
  const bytes = await readFile(precheck.filePath);
138
151
  return new Blob([bytes], { type: sniffContentType(precheck.filename) });
139
152
  };
153
+ /**
154
+ * Sentinel value selecting stdin as the file source on a file-column
155
+ * `--set <file-col>=-` (or the `monday item set <iid> <file-col>=-`
156
+ * positional). v0.8-M47 D7 fold — closes the v0.6-M38 D7 deferral.
157
+ * A bare `-` is the conventional CLI stdin token (mirrors the
158
+ * `--body-file -` shape on `monday update create` / `update reply`).
159
+ */
160
+ export const STDIN_FILE_SENTINEL = '-';
161
+ /**
162
+ * Default filename used for Monday's wire `Asset.name` when a stdin
163
+ * `<file-col>=-` source is dispatched WITHOUT an explicit
164
+ * `--filename <name>`. Pinned at the v0.8-M47 pre-flight probe:
165
+ * `add_file_to_column` accepts any non-empty filename (`"blob"` /
166
+ * `"stdin"` / a real name all return `200`); only an EMPTY filename
167
+ * `500`s. `"blob"` is source-agnostic (stdin carries no intrinsic
168
+ * name) and matches the probe's tested default. Agents that want a
169
+ * meaningful `Asset.name` pass `--filename`.
170
+ */
171
+ export const DEFAULT_STDIN_FILENAME = 'blob';
172
+ /**
173
+ * True when a file-column `--set` value selects stdin as its source
174
+ * (i.e. the agent passed the bare {@link STDIN_FILE_SENTINEL}). Pure
175
+ * predicate — the actual stdin read happens later via
176
+ * {@link readStdinFileSource}, AFTER the routing layer
177
+ * (`file-column-set.ts:routeFileColumnDispatch`) has confirmed the
178
+ * stdin source is the sole file entry on a single-target callShape.
179
+ */
180
+ export const isStdinFileSetSource = (value) => value === STDIN_FILE_SENTINEL;
181
+ /**
182
+ * Resolves the wire `Asset.name` for a stdin `<file-col>=-` source:
183
+ * the agent's `--filename` when present, else
184
+ * {@link DEFAULT_STDIN_FILENAME}. A non-empty `--filename` is already
185
+ * guaranteed by the command schemas (`z.string().min(1)`), so this
186
+ * never returns an empty name (which Monday `500`s). Extracted so the
187
+ * default-fallback branch is unit-tested once rather than replicated
188
+ * across the four `<file-col>=-` dispatch sites (`item set` live +
189
+ * dry-run, single-item `item update`, `item create`).
190
+ */
191
+ export const resolveStdinFilename = (filename) => filename ?? DEFAULT_STDIN_FILENAME;
192
+ /**
193
+ * Reads the entire stdin stream into memory and wraps it as a Web
194
+ * `Blob` with a `Content-Type` sniffed from `filename` (so a
195
+ * `--filename report.pdf` still gets the right mime; the default
196
+ * {@link DEFAULT_STDIN_FILENAME} `"blob"` carries no extension →
197
+ * `application/octet-stream`). The Blob is the payload the multipart
198
+ * transport sends to Monday's wire `File!` scalar — same downstream
199
+ * contract as {@link buildBlobFromPath}, but sourced from a single
200
+ * non-replayable stream rather than a path.
201
+ *
202
+ * `stdin` is the runner-threaded stream (`ctx.stdin`, wired from
203
+ * `process.stdin`) rather than a global read so integration tests can
204
+ * inject a deterministic `Readable` — mirrors `readSourceContent`'s
205
+ * stdin handling for the `--body-file -` surface.
206
+ *
207
+ * Unlike {@link precheckLocalFile} there is no pre-read size/readable
208
+ * pre-check leg: a stream can't be `fs.stat`'d, and reading it to
209
+ * measure would consume the only copy. Callers therefore reach this
210
+ * helper only AFTER the routing layer has confirmed (a) exactly one
211
+ * stdin `<file-col>=-` per call, (b) it is the sole file `--set`
212
+ * entry, and (c) the callShape is single-target (`item set` /
213
+ * single-item `item update` / `item create`) — bulk fan-out can't
214
+ * replay one stream across N items. The bytes buffer fully into
215
+ * memory (same in-memory model as {@link buildBlobFromPath}).
216
+ *
217
+ * Throws {@link UsageError}:
218
+ * - `'stdin_file_empty'` — stdin produced zero bytes. Monday rejects
219
+ * empty uploads server-side (`FILE_SIZE_LIMIT_EXCEEDED`); the CLI
220
+ * surfaces the rejection with a clearer hint via this local check,
221
+ * mirroring {@link precheckLocalFile}'s `'file_empty'` discipline.
222
+ * - `'stdin_not_wired'` — `stdin` is `undefined` (the runner did not
223
+ * thread a stream). Defensive: production always wires
224
+ * `process.stdin`; reachable only via direct misuse / a bare-`run`
225
+ * test that omits the slot.
226
+ *
227
+ * No TTY guard: like the `--body-file -` sibling (`readSourceContent`)
228
+ * the helper reads the stream to EOF regardless of TTY-ness — a closed
229
+ * / empty pipe surfaces as `'stdin_file_empty'`; an interactive
230
+ * terminal blocks until EOF exactly as `--body-file -` does. The
231
+ * stdout-`isTTY` flag on `ctx` is the output-mode signal, not stdin's.
232
+ */
233
+ export const readStdinFileSource = async (stdin, filename) => {
234
+ if (stdin === undefined) {
235
+ throw new UsageError('stdin file `--set <file-col>=-` requested a stdin source, but no ' +
236
+ 'stdin stream is wired into the runner. This is a programmer ' +
237
+ 'wiring bug.', { details: { reason: 'stdin_not_wired' } });
238
+ }
239
+ const chunks = [];
240
+ for await (const chunk of stdin) {
241
+ chunks.push(Buffer.from(chunk));
242
+ }
243
+ const bytes = Buffer.concat(chunks);
244
+ if (bytes.length === 0) {
245
+ throw new UsageError('stdin produced an empty payload (0 bytes); Monday rejects empty ' +
246
+ 'uploads server-side. Pipe non-empty content into ' +
247
+ '`<file-col>=-`, or pass a non-empty file path.', {
248
+ details: {
249
+ reason: 'stdin_file_empty',
250
+ filename,
251
+ file_size_bytes: 0,
252
+ hint: 'Monday returns FILE_SIZE_LIMIT_EXCEEDED on empty uploads. ' +
253
+ 'Pipe non-empty content into `<file-col>=-` or use a file path.',
254
+ },
255
+ });
256
+ }
257
+ return {
258
+ blob: new Blob([bytes], { type: sniffContentType(filename) }),
259
+ filename,
260
+ fileSizeBytes: bytes.length,
261
+ };
262
+ };
140
263
  //# sourceMappingURL=file-source.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"file-source.js","sourceRoot":"","sources":["../../src/utils/file-source.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"file-source.js","sourceRoot":"","sources":["../../src/utils/file-source.ts"],"names":[],"mappings":"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"}
@@ -19,4 +19,26 @@ export interface SelectOutputInput {
19
19
  readonly isTTY: boolean;
20
20
  }
21
21
  export declare const selectOutput: (input: SelectOutputInput) => OutputFormat;
22
+ export interface ResolveColorInput {
23
+ /** `--no-color` flag (commander-inverted `globalFlags.noColor`). */
24
+ readonly noColor: boolean;
25
+ readonly env?: NodeJS.ProcessEnv;
26
+ readonly isTTY: boolean;
27
+ }
28
+ /**
29
+ * Decides whether presentation output (cli-table3 borders/headers,
30
+ * any future styled text) may emit ANSI colour. Unlike `selectOutput`,
31
+ * this is a hard gate the renderers must honour: cli-table3 colours its
32
+ * borders unconditionally otherwise, so a `--output table` forced
33
+ * through a pipe leaks `^[[90m`/`^[[39m` into captured output
34
+ * (`cli-design.md` §3.2 / `cli.md` "Respect NO_COLOR"). Default is the
35
+ * stdout TTY-ness so a normal pipe gets clean text without a flag.
36
+ *
37
+ * Resolution priority (first match wins):
38
+ * 1. `--no-color` → off (explicit user intent, strongest).
39
+ * 2. `FORCE_COLOR` (present, not `0`/`false`) → on, even off-TTY.
40
+ * 3. `NO_COLOR` (present, non-empty) → off.
41
+ * 4. fall back to `isTTY`.
42
+ */
43
+ export declare const resolveColorEnabled: (input: ResolveColorInput) => boolean;
22
44
  //# sourceMappingURL=select.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../../src/utils/output/select.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AACH,eAAO,MAAM,cAAc,8CAA+C,CAAC;AAC3E,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3D,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAKD,eAAO,MAAM,YAAY,GAAI,OAAO,iBAAiB,KAAG,YA6CvD,CAAC"}
1
+ {"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../../src/utils/output/select.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AACH,eAAO,MAAM,cAAc,8CAA+C,CAAC;AAC3E,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3D,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAKD,eAAO,MAAM,YAAY,GAAI,OAAO,iBAAiB,KAAG,YA6CvD,CAAC;AAEF,MAAM,WAAW,iBAAiB;IAChC,oEAAoE;IACpE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,mBAAmB,GAAI,OAAO,iBAAiB,KAAG,OAc9D,CAAC"}
@@ -44,4 +44,34 @@ export const selectOutput = (input) => {
44
44
  }
45
45
  return isTTY ? 'table' : 'json';
46
46
  };
47
+ /**
48
+ * Decides whether presentation output (cli-table3 borders/headers,
49
+ * any future styled text) may emit ANSI colour. Unlike `selectOutput`,
50
+ * this is a hard gate the renderers must honour: cli-table3 colours its
51
+ * borders unconditionally otherwise, so a `--output table` forced
52
+ * through a pipe leaks `^[[90m`/`^[[39m` into captured output
53
+ * (`cli-design.md` §3.2 / `cli.md` "Respect NO_COLOR"). Default is the
54
+ * stdout TTY-ness so a normal pipe gets clean text without a flag.
55
+ *
56
+ * Resolution priority (first match wins):
57
+ * 1. `--no-color` → off (explicit user intent, strongest).
58
+ * 2. `FORCE_COLOR` (present, not `0`/`false`) → on, even off-TTY.
59
+ * 3. `NO_COLOR` (present, non-empty) → off.
60
+ * 4. fall back to `isTTY`.
61
+ */
62
+ export const resolveColorEnabled = (input) => {
63
+ const { noColor, env, isTTY } = input;
64
+ if (noColor) {
65
+ return false;
66
+ }
67
+ const force = env?.FORCE_COLOR;
68
+ if (force !== undefined && force !== '' && force !== '0' && force !== 'false') {
69
+ return true;
70
+ }
71
+ const no = env?.NO_COLOR;
72
+ if (no !== undefined && no !== '') {
73
+ return false;
74
+ }
75
+ return isTTY;
76
+ };
47
77
  //# sourceMappingURL=select.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"select.js","sourceRoot":"","sources":["../../../src/utils/output/select.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAU,CAAC;AAW3E,MAAM,cAAc,GAAG,CAAC,KAAa,EAAyB,EAAE,CAC7D,cAAoC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAExD,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAwB,EAAgB,EAAE;IACrE,MAAM,EAAE,IAAI,GAAG,KAAK,EAAE,KAAK,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IAElE,IAAI,IAAI,IAAI,KAAK,EAAE,CAAC;QAClB,MAAM,IAAI,UAAU,CAAC,2CAA2C,CAAC,CAAC;IACpE,CAAC;IAED,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,UAAU,CAClB,2BAA2B,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,MAAM,IAAI,CACzE,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtD,MAAM,IAAI,UAAU,CAClB,kCAAkC,MAAM,yBAAyB,CAClE,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QACxD,MAAM,IAAI,UAAU,CAClB,mCAAmC,MAAM,yBAAyB,CACnE,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,EAAE,aAAa,CAAC;IACnC,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;QAC5C,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,UAAU,CAClB,gCAAgC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,OAAO,IAAI,CAC/E,CAAC;QACJ,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;AAClC,CAAC,CAAC"}
1
+ {"version":3,"file":"select.js","sourceRoot":"","sources":["../../../src/utils/output/select.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAU,CAAC;AAW3E,MAAM,cAAc,GAAG,CAAC,KAAa,EAAyB,EAAE,CAC7D,cAAoC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAExD,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAwB,EAAgB,EAAE;IACrE,MAAM,EAAE,IAAI,GAAG,KAAK,EAAE,KAAK,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IAElE,IAAI,IAAI,IAAI,KAAK,EAAE,CAAC;QAClB,MAAM,IAAI,UAAU,CAAC,2CAA2C,CAAC,CAAC;IACpE,CAAC;IAED,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,UAAU,CAClB,2BAA2B,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,MAAM,IAAI,CACzE,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtD,MAAM,IAAI,UAAU,CAClB,kCAAkC,MAAM,yBAAyB,CAClE,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QACxD,MAAM,IAAI,UAAU,CAClB,mCAAmC,MAAM,yBAAyB,CACnE,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,EAAE,aAAa,CAAC;IACnC,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;QAC5C,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,UAAU,CAClB,gCAAgC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,OAAO,IAAI,CAC/E,CAAC;QACJ,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;AAClC,CAAC,CAAC;AASF;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,KAAwB,EAAW,EAAE;IACvE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IACtC,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,KAAK,GAAG,GAAG,EAAE,WAAW,CAAC;IAC/B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;QAC9E,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,EAAE,GAAG,GAAG,EAAE,QAAQ,CAAC;IACzB,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAClC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC"}
@@ -10,6 +10,16 @@ export interface TableOptions {
10
10
  * already, and a truncated header is more useful than an error here.
11
11
  */
12
12
  readonly columns?: readonly string[];
13
+ /**
14
+ * Whether ANSI colour may be emitted — the already-resolved colour
15
+ * decision (`resolveColorEnabled`: TTY + NO_COLOR + FORCE_COLOR),
16
+ * NOT a re-detection hint. When `true`, head (red) + border (grey)
17
+ * are styled via cli-table3's defaults; when `false` (the default —
18
+ * callers opt INTO colour) both style arrays are emptied so the
19
+ * table is plain text. `renderTable` makes this decision authoritative
20
+ * over @colors/colors' own ambient detection — see `applyColorState`.
21
+ */
22
+ readonly color?: boolean;
13
23
  }
14
24
  export interface SingleResourceTableInput {
15
25
  readonly kind: 'single';
@@ -1 +1 @@
1
- {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../src/utils/output/table.ts"],"names":[],"mappings":"AAwBA,eAAO,MAAM,YAAY,KAAK,CAAC;AAI/B,MAAM,WAAW,YAAY;IAC3B,8CAA8C;IAC9C,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,iEAAiE;IACjE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACjD,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC;CACjC;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,SAAS,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;IAC5D,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC;CACjC;AAED,MAAM,MAAM,UAAU,GAAG,wBAAwB,GAAG,oBAAoB,CAAC;AAkBzE;;;;GAIG;AACH,eAAO,MAAM,QAAQ,GAAI,OAAO,MAAM,EAAE,OAAO,MAAM,KAAG,MAQvD,CAAC;AAiGF,eAAO,MAAM,WAAW,GACtB,OAAO,UAAU,EACjB,QAAQ,MAAM,CAAC,cAAc,KAC5B,IAGF,CAAC"}
1
+ {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../src/utils/output/table.ts"],"names":[],"mappings":"AAyBA,eAAO,MAAM,YAAY,KAAK,CAAC;AAI/B,MAAM,WAAW,YAAY;IAC3B,8CAA8C;IAC9C,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,iEAAiE;IACjE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC;;;;;;;;OAQG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACjD,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC;CACjC;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,SAAS,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;IAC5D,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC;CACjC;AAED,MAAM,MAAM,UAAU,GAAG,wBAAwB,GAAG,oBAAoB,CAAC;AAkBzE;;;;GAIG;AACH,eAAO,MAAM,QAAQ,GAAI,OAAO,MAAM,EAAE,OAAO,MAAM,KAAG,MAQvD,CAAC;AAwIF,eAAO,MAAM,WAAW,GACtB,OAAO,UAAU,EACjB,QAAQ,MAAM,CAAC,cAAc,KAC5B,IAIF,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import Table from 'cli-table3';
2
+ import colorSupport from '@colors/colors/safe.js';
2
3
  /**
3
4
  * Table renderer for TTY output (`cli-design.md` §3.2).
4
5
  *
@@ -86,14 +87,48 @@ const collectKeysInOrder = (rows) => {
86
87
  }
87
88
  return ordered;
88
89
  };
90
+ /**
91
+ * cli-table3 colours its `head` (red) and `border` (grey) by default.
92
+ * When colour is off we empty both style arrays so the rendered table
93
+ * is plain text. Colour defaults to OFF here — callers opt in via
94
+ * `options.color`, which the emit layer computes from
95
+ * `resolveColorEnabled`.
96
+ */
97
+ const colourStyle = (color) => color === true ? {} : { style: { head: [], border: [] } };
98
+ /**
99
+ * Make the resolved `color` decision authoritative over @colors/colors'
100
+ * own ambient detection.
101
+ *
102
+ * cli-table3 styles head/border through `@colors/colors`, whose
103
+ * `enabled` flag is cached ONCE at import from TTY/FORCE_COLOR
104
+ * detection (`lib/colors.js`). A non-TTY context (a CI worker, a piped
105
+ * test runner) caches `enabled = false`, so cli-table3 emits NO ANSI
106
+ * even when the caller explicitly opted into colour — which made the
107
+ * `color: true` render flaky in CI (it passed only when the worker that
108
+ * imported the lib happened to see colour support). The colour decision
109
+ * is already settled upstream by `resolveColorEnabled`
110
+ * (TTY + NO_COLOR + FORCE_COLOR); honour it here rather than letting the
111
+ * table lib re-decide off a stale cached probe. (`color: false` empties
112
+ * the style arrays so it stays plain regardless — we pin the flag both
113
+ * ways so the global never drifts mid-suite.)
114
+ */
115
+ const applyColorState = (color) => {
116
+ if (color === true) {
117
+ colorSupport.enable();
118
+ }
119
+ else {
120
+ colorSupport.disable();
121
+ }
122
+ };
89
123
  const renderSingle = (input) => {
90
124
  const { data, options = {} } = input;
91
- const { full = false, width = FALLBACK_WIDTH, columns } = options;
125
+ const { full = false, width = FALLBACK_WIDTH, columns, color } = options;
92
126
  const allKeys = Object.keys(data);
93
127
  const keys = filterAndOrderKeys(allKeys, columns);
94
128
  const valueColWidth = full ? Number.POSITIVE_INFINITY : computeColumnWidth(2, width);
95
129
  const table = new Table({
96
130
  head: ['field', 'value'],
131
+ ...colourStyle(color),
97
132
  });
98
133
  for (const key of keys) {
99
134
  const cell = formatCell(data[key]);
@@ -106,17 +141,18 @@ const renderSingle = (input) => {
106
141
  };
107
142
  const renderCollection = (input) => {
108
143
  const { data, options = {} } = input;
109
- const { full = false, width = FALLBACK_WIDTH, columns } = options;
144
+ const { full = false, width = FALLBACK_WIDTH, columns, color } = options;
110
145
  const allKeys = collectKeysInOrder(data);
111
146
  const keys = filterAndOrderKeys(allKeys, columns);
112
147
  if (keys.length === 0) {
113
148
  // Empty collection still emits a table-shaped sentinel; an empty
114
149
  // string would let the renderer-selection bug ride silently.
115
- return new Table({ head: [] }).toString();
150
+ return new Table({ head: [], ...colourStyle(color) }).toString();
116
151
  }
117
152
  const colWidth = full ? Number.POSITIVE_INFINITY : computeColumnWidth(keys.length, width);
118
153
  const table = new Table({
119
154
  head: full ? [...keys] : keys.map((k) => truncate(k, colWidth)),
155
+ ...colourStyle(color),
120
156
  });
121
157
  for (const row of data) {
122
158
  table.push(keys.map((key) => {
@@ -127,6 +163,7 @@ const renderCollection = (input) => {
127
163
  return table.toString();
128
164
  };
129
165
  export const renderTable = (input, stream) => {
166
+ applyColorState(input.options?.color);
130
167
  const text = input.kind === 'single' ? renderSingle(input) : renderCollection(input);
131
168
  stream.write(`${text}\n`);
132
169
  };
@@ -1 +1 @@
1
- {"version":3,"file":"table.js","sourceRoot":"","sources":["../../../src/utils/output/table.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"table.js","sourceRoot":"","sources":["../../../src/utils/output/table.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "monday-cli",
3
- "version": "0.7.0",
3
+ "version": "0.8.0",
4
4
  "description": "Agent-first CLI for Monday.com — read boards, file backlog items, transition statuses, and post comments from the terminal. Built for AI coding agents (Claude Code, Codex) with humans as a welcome second audience.",
5
5
  "type": "module",
6
6
  "engines": {
@@ -62,6 +62,7 @@
62
62
  "prepublishOnly": "npm run typecheck && npm run lint && npm run test:unit && npm run test:integration && npm run build"
63
63
  },
64
64
  "dependencies": {
65
+ "@colors/colors": "^1.5.0",
65
66
  "@mondaydotcomorg/api": "^14.0.0",
66
67
  "chalk": "^5.6.0",
67
68
  "cli-table3": "^0.6.5",