@cakemail-org/cakemail-cli 1.5.0 → 2.0.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 (234) hide show
  1. package/.claude/settings.local.json +12 -0
  2. package/.env.example +40 -0
  3. package/.env.test.example +45 -0
  4. package/CHANGELOG.md +1031 -0
  5. package/README.md +319 -15
  6. package/audit-formats.js +128 -0
  7. package/cakemail.rb +20 -0
  8. package/dist/cli.js +27 -10
  9. package/dist/cli.js.map +1 -1
  10. package/dist/client.d.ts +2 -0
  11. package/dist/client.d.ts.map +1 -1
  12. package/dist/client.js +16 -6
  13. package/dist/client.js.map +1 -1
  14. package/dist/commands/account.js +1 -1
  15. package/dist/commands/account.js.map +1 -1
  16. package/dist/commands/attributes.js +1 -1
  17. package/dist/commands/attributes.js.map +1 -1
  18. package/dist/commands/campaigns.d.ts.map +1 -1
  19. package/dist/commands/campaigns.js +103 -8
  20. package/dist/commands/campaigns.js.map +1 -1
  21. package/dist/commands/config.d.ts.map +1 -1
  22. package/dist/commands/config.js +63 -4
  23. package/dist/commands/config.js.map +1 -1
  24. package/dist/commands/contacts.d.ts.map +1 -1
  25. package/dist/commands/contacts.js +91 -12
  26. package/dist/commands/contacts.js.map +1 -1
  27. package/dist/commands/emails.js +1 -1
  28. package/dist/commands/emails.js.map +1 -1
  29. package/dist/commands/interests.d.ts +5 -0
  30. package/dist/commands/interests.d.ts.map +1 -0
  31. package/dist/commands/interests.js +172 -0
  32. package/dist/commands/interests.js.map +1 -0
  33. package/dist/commands/lists.d.ts.map +1 -1
  34. package/dist/commands/lists.js +6 -8
  35. package/dist/commands/lists.js.map +1 -1
  36. package/dist/commands/logs.d.ts +5 -0
  37. package/dist/commands/logs.d.ts.map +1 -0
  38. package/dist/commands/logs.js +237 -0
  39. package/dist/commands/logs.js.map +1 -0
  40. package/dist/commands/reports.js +1 -1
  41. package/dist/commands/reports.js.map +1 -1
  42. package/dist/commands/segments.js +1 -1
  43. package/dist/commands/segments.js.map +1 -1
  44. package/dist/commands/senders.d.ts.map +1 -1
  45. package/dist/commands/senders.js +11 -8
  46. package/dist/commands/senders.js.map +1 -1
  47. package/dist/commands/suppressed.js +1 -1
  48. package/dist/commands/suppressed.js.map +1 -1
  49. package/dist/commands/tags.d.ts +5 -0
  50. package/dist/commands/tags.d.ts.map +1 -0
  51. package/dist/commands/tags.js +124 -0
  52. package/dist/commands/tags.js.map +1 -0
  53. package/dist/commands/templates.js +1 -1
  54. package/dist/commands/templates.js.map +1 -1
  55. package/dist/commands/transactional-templates.d.ts +5 -0
  56. package/dist/commands/transactional-templates.d.ts.map +1 -0
  57. package/dist/commands/transactional-templates.js +354 -0
  58. package/dist/commands/transactional-templates.js.map +1 -0
  59. package/dist/commands/webhooks.js +1 -1
  60. package/dist/commands/webhooks.js.map +1 -1
  61. package/dist/utils/auth.d.ts +8 -1
  62. package/dist/utils/auth.d.ts.map +1 -1
  63. package/dist/utils/auth.js +39 -11
  64. package/dist/utils/auth.js.map +1 -1
  65. package/dist/utils/config-file.d.ts +7 -0
  66. package/dist/utils/config-file.d.ts.map +1 -1
  67. package/dist/utils/config-file.js +15 -0
  68. package/dist/utils/config-file.js.map +1 -1
  69. package/dist/utils/config.d.ts +2 -0
  70. package/dist/utils/config.d.ts.map +1 -1
  71. package/dist/utils/config.js +12 -4
  72. package/dist/utils/config.js.map +1 -1
  73. package/dist/utils/errors.js +1 -1
  74. package/dist/utils/errors.js.map +1 -1
  75. package/dist/utils/list-defaults.d.ts +33 -0
  76. package/dist/utils/list-defaults.d.ts.map +1 -0
  77. package/dist/utils/list-defaults.js +52 -0
  78. package/dist/utils/list-defaults.js.map +1 -0
  79. package/dist/utils/output.d.ts.map +1 -1
  80. package/dist/utils/output.js +36 -13
  81. package/dist/utils/output.js.map +1 -1
  82. package/dist/utils/progress.d.ts.map +1 -1
  83. package/dist/utils/progress.js +32 -4
  84. package/dist/utils/progress.js.map +1 -1
  85. package/dist/utils/spinner.d.ts +17 -0
  86. package/dist/utils/spinner.d.ts.map +1 -0
  87. package/dist/utils/spinner.js +43 -0
  88. package/dist/utils/spinner.js.map +1 -0
  89. package/docs/DOCUMENTATION-STANDARD.md +1068 -0
  90. package/docs/README.md +161 -0
  91. package/docs/developer/ARCHITECTURE.md +516 -0
  92. package/docs/developer/AUTH.md +204 -0
  93. package/docs/developer/CONTRIBUTING.md +227 -0
  94. package/docs/developer/DOCUMENTATION_SUMMARY.md +346 -0
  95. package/docs/developer/PROJECT_INDEX.md +365 -0
  96. package/docs/planning/API_COVERAGE.md +1045 -0
  97. package/docs/planning/BACKLOG.md +1159 -0
  98. package/docs/planning/PROFILE_SYSTEM_TASKS.md +287 -0
  99. package/docs/planning/UX_IMPLEMENTATION_PLAN.md +691 -0
  100. package/docs/planning/archive/RELEASE_CHECKLIST_v1.3.0.md +332 -0
  101. package/docs/planning/archive/RELEASE_v1.3.0.md +428 -0
  102. package/docs/planning/archive/cakemail-cli-ux-improvements.md +438 -0
  103. package/docs/planning/cakemail-profile-system-plan.md +1121 -0
  104. package/docs/testing/AI_USER_SIMULATION_DESIGN.md +1342 -0
  105. package/docs/testing/KENOGAMI_BIDIRECTIONAL_FLOW.md +1517 -0
  106. package/docs/testing/KENOGAMI_TRUTH_RECONCILIATION_SYSTEM.md +1369 -0
  107. package/docs/user-manual/.obsidian/app.json +1 -0
  108. package/docs/user-manual/.obsidian/appearance.json +1 -0
  109. package/docs/user-manual/.obsidian/core-plugins.json +33 -0
  110. package/docs/user-manual/.obsidian/workspace.json +167 -0
  111. package/docs/user-manual/01-getting-started/01-installation.md +214 -0
  112. package/docs/user-manual/01-getting-started/02-quick-start.md +432 -0
  113. package/docs/user-manual/01-getting-started/03-authentication.md +448 -0
  114. package/docs/user-manual/01-getting-started/04-configuration.md +430 -0
  115. package/docs/user-manual/01-getting-started/05-output-formats.md +447 -0
  116. package/docs/user-manual/02-core-concepts/01-accounts.md +514 -0
  117. package/docs/user-manual/02-core-concepts/02-profile-system.md +771 -0
  118. package/docs/user-manual/02-core-concepts/03-smart-defaults.md +485 -0
  119. package/docs/user-manual/02-core-concepts/04-authentication-methods.md +435 -0
  120. package/docs/user-manual/02-core-concepts/05-pagination-filtering.md +600 -0
  121. package/docs/user-manual/02-core-concepts/06-error-handling.md +718 -0
  122. package/docs/user-manual/02-core-concepts/07-api-coverage.md +483 -0
  123. package/docs/user-manual/03-email-operations/01-senders.md +490 -0
  124. package/docs/user-manual/03-email-operations/02-templates.md +444 -0
  125. package/docs/user-manual/03-email-operations/03-transactional-emails.md +706 -0
  126. package/docs/user-manual/03-email-operations/04-email-tracking.md +407 -0
  127. package/docs/user-manual/04-campaign-management/01-campaigns-basics.md +394 -0
  128. package/docs/user-manual/04-campaign-management/02-campaign-scheduling.md +630 -0
  129. package/docs/user-manual/04-campaign-management/03-campaign-testing.md +997 -0
  130. package/docs/user-manual/04-campaign-management/04-campaign-lifecycle.md +709 -0
  131. package/docs/user-manual/04-campaign-management/05-campaign-links.md +934 -0
  132. package/docs/user-manual/05-contact-management/01-lists.md +836 -0
  133. package/docs/user-manual/05-contact-management/02-contacts.md +1035 -0
  134. package/docs/user-manual/05-contact-management/03-custom-attributes.md +788 -0
  135. package/docs/user-manual/05-contact-management/04-segments.md +1028 -0
  136. package/docs/user-manual/05-contact-management/05-contact-import-export.md +1031 -0
  137. package/docs/user-manual/06-analytics-reporting/01-campaign-analytics.md +867 -0
  138. package/docs/user-manual/06-analytics-reporting/02-account-reports.md +227 -0
  139. package/docs/user-manual/07-integrations/01-webhooks-integration.md +259 -0
  140. package/docs/user-manual/07-integrations/02-automation.md +326 -0
  141. package/docs/user-manual/08-advanced-usage/01-scripting-patterns.md +672 -0
  142. package/docs/user-manual/08-advanced-usage/02-bulk-operations.md +932 -0
  143. package/docs/user-manual/08-advanced-usage/03-ci-cd-integration.md +892 -0
  144. package/docs/user-manual/08-advanced-usage/04-performance-optimization.md +766 -0
  145. package/docs/user-manual/09-command-reference/01-config.md +776 -0
  146. package/docs/user-manual/09-command-reference/02-account.md +652 -0
  147. package/docs/user-manual/09-command-reference/03-lists.md +958 -0
  148. package/docs/user-manual/09-command-reference/04-contacts.md +1408 -0
  149. package/docs/user-manual/09-command-reference/05-attributes.md +617 -0
  150. package/docs/user-manual/09-command-reference/06-segments.md +894 -0
  151. package/docs/user-manual/09-command-reference/07-senders.md +803 -0
  152. package/docs/user-manual/09-command-reference/08-templates.md +818 -0
  153. package/docs/user-manual/09-command-reference/09-campaigns.md +1250 -0
  154. package/docs/user-manual/09-command-reference/10-emails.md +807 -0
  155. package/docs/user-manual/09-command-reference/11-reports.md +1135 -0
  156. package/docs/user-manual/09-command-reference/12-webhooks.md +773 -0
  157. package/docs/user-manual/09-command-reference/13-suppressed.md +797 -0
  158. package/docs/user-manual/09-command-reference/14-interests.md +630 -0
  159. package/docs/user-manual/09-command-reference/15-tags.md +584 -0
  160. package/docs/user-manual/09-command-reference/16-logs.md +656 -0
  161. package/docs/user-manual/09-command-reference/17-transactional-templates.md +850 -0
  162. package/docs/user-manual/10-troubleshooting/01-common-errors.md +457 -0
  163. package/docs/user-manual/10-troubleshooting/02-authentication-issues.md +558 -0
  164. package/docs/user-manual/10-troubleshooting/03-connection-problems.md +634 -0
  165. package/docs/user-manual/10-troubleshooting/04-debugging.md +725 -0
  166. package/docs/user-manual/11-appendix/04-faq.md +484 -0
  167. package/docs/user-manual/11-appendix/05-glossary.md +250 -0
  168. package/docs/user-manual/README.md +0 -0
  169. package/package.json +13 -47
  170. package/src/cli.ts +125 -0
  171. package/src/client.ts +16 -0
  172. package/src/commands/account.ts +267 -0
  173. package/src/commands/accounts.ts +78 -0
  174. package/src/commands/actions.ts +249 -0
  175. package/src/commands/attributes.ts +139 -0
  176. package/src/commands/campaign-blueprints.ts +106 -0
  177. package/src/commands/campaigns.ts +469 -0
  178. package/src/commands/config.ts +77 -0
  179. package/src/commands/contacts.ts +612 -0
  180. package/src/commands/custom-attributes.ts +127 -0
  181. package/src/commands/dkims.ts +117 -0
  182. package/src/commands/domains.ts +82 -0
  183. package/src/commands/email-apis.ts +569 -0
  184. package/src/commands/emails.ts +197 -0
  185. package/src/commands/forms.ts +283 -0
  186. package/src/commands/interests.ts +155 -0
  187. package/src/commands/links.ts +38 -0
  188. package/src/commands/lists.ts +406 -0
  189. package/src/commands/logos.ts +71 -0
  190. package/src/commands/logs.ts +386 -0
  191. package/src/commands/reports.ts +306 -0
  192. package/src/commands/segments.ts +158 -0
  193. package/src/commands/senders.ts +204 -0
  194. package/src/commands/sub-accounts.ts +271 -0
  195. package/src/commands/suppressed-emails.ts +234 -0
  196. package/src/commands/suppressed.ts +198 -0
  197. package/src/commands/system-emails.ts +85 -0
  198. package/src/commands/tags.ts +146 -0
  199. package/src/commands/tasks.ts +116 -0
  200. package/src/commands/templates.ts +189 -0
  201. package/src/commands/tokens.ts +83 -0
  202. package/src/commands/transactional-emails.ts +374 -0
  203. package/src/commands/transactional-templates.ts +385 -0
  204. package/src/commands/users.ts +506 -0
  205. package/src/commands/webhooks.ts +172 -0
  206. package/src/commands/workflow-blueprints.ts +123 -0
  207. package/src/commands/workflows.ts +265 -0
  208. package/src/types/profile.ts +93 -0
  209. package/src/utils/auth.ts +272 -0
  210. package/src/utils/config-file.ts +96 -0
  211. package/src/utils/config.ts +134 -0
  212. package/src/utils/confirm.ts +32 -0
  213. package/src/utils/defaults.ts +99 -0
  214. package/src/utils/errors.ts +116 -0
  215. package/src/utils/interactive.ts +91 -0
  216. package/src/utils/list-defaults.ts +74 -0
  217. package/src/utils/output.ts +190 -0
  218. package/src/utils/progress.ts +320 -0
  219. package/src/utils/spinner.ts +22 -0
  220. package/tests/IMPLEMENTATION_STATUS.md +258 -0
  221. package/tests/PTY_SETUP.md +118 -0
  222. package/tests/PTY_TESTING_GUIDE.md +507 -0
  223. package/tests/README.md +244 -0
  224. package/tests/fixtures/api-responses/campaigns.json +34 -0
  225. package/tests/fixtures/test-config.json +13 -0
  226. package/tests/helpers/cli-runner.ts +128 -0
  227. package/tests/helpers/mock-server.ts +301 -0
  228. package/tests/helpers/pty-runner.ts +181 -0
  229. package/tests/integration/campaigns-real-api.test.ts +196 -0
  230. package/tests/integration/setup-integration.ts +50 -0
  231. package/tests/pty/campaigns.test.ts +241 -0
  232. package/tests/setup.ts +34 -0
  233. package/tsconfig.json +15 -0
  234. package/vitest.config.ts +28 -0
@@ -0,0 +1,447 @@
1
+ # Output Formats
2
+
3
+ The Cakemail CLI supports three output formats: JSON, Table, and Compact. Choose the format that best suits your needs.
4
+
5
+ ## Overview
6
+
7
+ Different output formats are useful for different scenarios:
8
+
9
+ - **JSON**: Machine-readable, full data, perfect for scripting
10
+ - **Table**: Human-readable, structured, great for interactive use
11
+ - **Compact**: Concise summaries, quick scanning, best for lists
12
+
13
+ ## Choosing a Format
14
+
15
+ You can set the output format in three ways:
16
+
17
+ 1. **Per-command flag** (highest priority)
18
+ ```bash
19
+ cakemail -f table campaigns list
20
+ ```
21
+
22
+ 2. **Environment variable**
23
+ ```bash
24
+ export CAKEMAIL_OUTPUT_FORMAT=compact
25
+ ```
26
+
27
+ 3. **`.env` file**
28
+ ```bash
29
+ # .env
30
+ CAKEMAIL_OUTPUT_FORMAT=compact
31
+ ```
32
+
33
+ **Priority**: Command flag > Environment variable > `.env` file > Default (JSON)
34
+
35
+ ---
36
+
37
+ ## JSON Format
38
+
39
+ ### Overview
40
+
41
+ JSON is the default output format. It provides complete, structured data that's easy to parse programmatically.
42
+
43
+ ### When to Use
44
+
45
+ - Scripting and automation
46
+ - Processing output with `jq` or other tools
47
+ - Saving output to files for later processing
48
+ - CI/CD pipelines
49
+ - Need full data structure
50
+
51
+ ### Example
52
+
53
+ ```bash
54
+ cakemail -f json campaigns list --limit 2
55
+ ```
56
+
57
+ **Output:**
58
+ ```json
59
+ {
60
+ "data": [
61
+ {
62
+ "id": 12345,
63
+ "name": "Summer Sale Newsletter",
64
+ "status": "delivered",
65
+ "list_id": 789,
66
+ "sender_id": 456,
67
+ "template_id": 123,
68
+ "subject": "Summer Sale - Up to 50% Off!",
69
+ "scheduled_for": "2024-06-15T10:00:00Z",
70
+ "created_on": "2024-06-10T14:30:00Z",
71
+ "updated_on": "2024-06-15T10:05:00Z"
72
+ },
73
+ {
74
+ "id": 12346,
75
+ "name": "Product Update",
76
+ "status": "scheduled",
77
+ "list_id": 789,
78
+ "sender_id": 456,
79
+ "template_id": 124,
80
+ "subject": "New Features Released",
81
+ "scheduled_for": "2024-06-20T15:00:00Z",
82
+ "created_on": "2024-06-18T09:00:00Z",
83
+ "updated_on": "2024-06-18T09:15:00Z"
84
+ }
85
+ ],
86
+ "count": 2,
87
+ "total": 47,
88
+ "page": 1,
89
+ "per_page": 2
90
+ }
91
+ ```
92
+
93
+ ### Processing JSON Output
94
+
95
+ Use `jq` to extract specific fields:
96
+
97
+ ```bash
98
+ # Get just campaign names
99
+ cakemail -f json campaigns list | jq -r '.data[].name'
100
+
101
+ # Filter by status
102
+ cakemail -f json campaigns list | jq '.data[] | select(.status=="delivered")'
103
+
104
+ # Count total campaigns
105
+ cakemail -f json campaigns list | jq '.total'
106
+
107
+ # Get IDs and names as CSV
108
+ cakemail -f json campaigns list | jq -r '.data[] | "\(.id),\(.name)"'
109
+ ```
110
+
111
+ ---
112
+
113
+ ## Table Format
114
+
115
+ ### Overview
116
+
117
+ Table format displays data in a structured, human-readable table with columns and rows.
118
+
119
+ ### When to Use
120
+
121
+ - Interactive terminal use
122
+ - Reading detailed information
123
+ - Comparing multiple items side-by-side
124
+ - Presenting data to humans
125
+ - Visual clarity is important
126
+
127
+ ### Example
128
+
129
+ ```bash
130
+ cakemail -f table campaigns list --limit 3
131
+ ```
132
+
133
+ **Output:**
134
+ ```
135
+ ┌─────────┬──────────────────────────┬───────────┬──────────────────────────────┬────────────────────┐
136
+ │ ID │ Name │ Status │ Subject │ Scheduled For │
137
+ ├─────────┼──────────────────────────┼───────────┼──────────────────────────────┼────────────────────┤
138
+ │ 12345 │ Summer Sale Newsletter │ delivered │ Summer Sale - Up to 50% Off! │ 2024-06-15 10:00 │
139
+ │ 12346 │ Product Update │ scheduled │ New Features Released │ 2024-06-20 15:00 │
140
+ │ 12347 │ Monthly Newsletter │ draft │ June 2024 Newsletter │ - │
141
+ └─────────┴──────────────────────────┴───────────┴──────────────────────────────┴────────────────────┘
142
+
143
+ Total: 47 campaigns
144
+ ```
145
+
146
+ ### Table Format Features
147
+
148
+ - **Headers**: Column names clearly labeled
149
+ - **Alignment**: Proper column alignment for readability
150
+ - **Unicode borders**: Clean, professional appearance
151
+ - **Pagination info**: Shows total count below table
152
+ - **Truncation**: Long values are truncated with `...` to fit
153
+
154
+ ### Customizing Display
155
+
156
+ Tables automatically select the most relevant columns for each resource:
157
+
158
+ ```bash
159
+ # Campaigns: ID, Name, Status, Subject, Scheduled
160
+ cakemail -f table campaigns list
161
+
162
+ # Lists: ID, Name, Language, Active Contacts, Created
163
+ cakemail -f table lists list
164
+
165
+ # Contacts: ID, Email, Status, Name, Subscribed On
166
+ cakemail -f table contacts list 123
167
+
168
+ # Templates: ID, Name, Subject, Tags, Created
169
+ cakemail -f table templates list
170
+ ```
171
+
172
+ ---
173
+
174
+ ## Compact Format
175
+
176
+ ### Overview
177
+
178
+ Compact format displays each item as a single line with key information, perfect for quick scanning.
179
+
180
+ ### When to Use
181
+
182
+ - Quick overview of many items
183
+ - Terminal with limited space
184
+ - Need to see item count at a glance
185
+ - Focused on specific fields
186
+ - Log-like output
187
+
188
+ ### Example
189
+
190
+ ```bash
191
+ cakemail -f compact campaigns list --limit 5
192
+ ```
193
+
194
+ **Output:**
195
+ ```
196
+ [12345] Summer Sale Newsletter (delivered) - Summer Sale - Up to 50% Off!
197
+ [12346] Product Update (scheduled) - New Features Released
198
+ [12347] Monthly Newsletter (draft) - June 2024 Newsletter
199
+ [12348] Welcome Series (delivered) - Welcome to Our Community
200
+ [12349] Abandoned Cart (suspended) - Complete Your Purchase
201
+
202
+ Total: 47 campaigns
203
+ ```
204
+
205
+ ### Compact Format Patterns
206
+
207
+ Each resource type has a specific compact format:
208
+
209
+ **Campaigns:**
210
+ ```
211
+ [ID] Name (status) - Subject
212
+ ```
213
+
214
+ **Lists:**
215
+ ```
216
+ [ID] Name - 1,234 contacts (language)
217
+ ```
218
+
219
+ **Contacts:**
220
+ ```
221
+ [ID] email@example.com (status) - First Last
222
+ ```
223
+
224
+ **Templates:**
225
+ ```
226
+ [ID] Name - Subject
227
+ ```
228
+
229
+ **Senders:**
230
+ ```
231
+ [ID] name <email> (confirmed/unconfirmed)
232
+ ```
233
+
234
+ ### Benefits
235
+
236
+ - **Fast scanning**: Quickly find items by ID or name
237
+ - **Space efficient**: Many items visible at once
238
+ - **Key info only**: No extraneous details
239
+ - **Grep-friendly**: Easy to filter with standard tools
240
+
241
+ ```bash
242
+ # Find campaigns with "newsletter" in the name
243
+ cakemail -f compact campaigns list | grep -i newsletter
244
+
245
+ # Count delivered campaigns
246
+ cakemail -f compact campaigns list | grep delivered | wc -l
247
+ ```
248
+
249
+ ---
250
+
251
+ ## Format Comparison
252
+
253
+ ### Visual Comparison
254
+
255
+ **JSON:**
256
+ ```json
257
+ {"id": 12345, "name": "Summer Sale", "status": "delivered", "subject": "Big Sale!"}
258
+ ```
259
+
260
+ **Table:**
261
+ ```
262
+ ┌───────┬─────────────┬───────────┬───────────┐
263
+ │ ID │ Name │ Status │ Subject │
264
+ ├───────┼─────────────┼───────────┼───────────┤
265
+ │ 12345 │ Summer Sale │ delivered │ Big Sale! │
266
+ └───────┴─────────────┴───────────┴───────────┘
267
+ ```
268
+
269
+ **Compact:**
270
+ ```
271
+ [12345] Summer Sale (delivered) - Big Sale!
272
+ ```
273
+
274
+ ### Decision Matrix
275
+
276
+ | Scenario | Recommended Format | Why |
277
+ |----------|-------------------|-----|
278
+ | Scripting/automation | JSON | Machine-readable, complete data |
279
+ | Interactive browsing | Table | Visual clarity, structured |
280
+ | Quick scanning | Compact | Concise, space-efficient |
281
+ | Piping to `jq` | JSON | JSON processing |
282
+ | Piping to `grep` | Compact | Line-based filtering |
283
+ | CI/CD logs | JSON | Parseable, complete |
284
+ | Terminal exploration | Table or Compact | Human-readable |
285
+ | Saving to file | JSON | Structured data storage |
286
+ | Presenting to users | Table | Professional appearance |
287
+
288
+ ---
289
+
290
+ ## Setting Default Format
291
+
292
+ ### Project-Level Default
293
+
294
+ Create a `.env` file in your project:
295
+
296
+ ```bash
297
+ # .env
298
+ CAKEMAIL_OUTPUT_FORMAT=compact
299
+ ```
300
+
301
+ Now all commands use compact format:
302
+ ```bash
303
+ cakemail campaigns list # Uses compact
304
+ cakemail lists list # Uses compact
305
+ ```
306
+
307
+ ### Global Default
308
+
309
+ Set a user-wide default:
310
+
311
+ ```bash
312
+ # ~/.cakemail/.env
313
+ CAKEMAIL_OUTPUT_FORMAT=table
314
+ ```
315
+
316
+ ### Shell Environment
317
+
318
+ Add to your shell profile:
319
+
320
+ ```bash
321
+ echo 'export CAKEMAIL_OUTPUT_FORMAT=compact' >> ~/.zshrc
322
+ source ~/.zshrc
323
+ ```
324
+
325
+ ---
326
+
327
+ ## Per-Command Override
328
+
329
+ Override the default for a single command:
330
+
331
+ ```bash
332
+ # Default is compact, but use JSON for this command
333
+ export CAKEMAIL_OUTPUT_FORMAT=compact
334
+ cakemail -f json campaigns list
335
+
336
+ # Default is JSON, but use table for this command
337
+ cakemail -f table campaigns get 12345
338
+ ```
339
+
340
+ ---
341
+
342
+ ## Format-Specific Tips
343
+
344
+ ### JSON Tips
345
+
346
+ 1. **Pretty print with jq:**
347
+ ```bash
348
+ cakemail -f json campaigns list | jq .
349
+ ```
350
+
351
+ 2. **Save to file:**
352
+ ```bash
353
+ cakemail -f json campaigns list > campaigns.json
354
+ ```
355
+
356
+ 3. **Extract specific fields:**
357
+ ```bash
358
+ cakemail -f json campaigns list | jq '.data[].name'
359
+ ```
360
+
361
+ 4. **Filter results:**
362
+ ```bash
363
+ cakemail -f json campaigns list | jq '.data[] | select(.status=="delivered")'
364
+ ```
365
+
366
+ ### Table Tips
367
+
368
+ 1. **Best with pagination:**
369
+ ```bash
370
+ cakemail -f table campaigns list --limit 20
371
+ ```
372
+
373
+ 2. **Redirect to file (preserves formatting):**
374
+ ```bash
375
+ cakemail -f table campaigns list > campaigns.txt
376
+ ```
377
+
378
+ 3. **Combine with less for scrolling:**
379
+ ```bash
380
+ cakemail -f table campaigns list | less
381
+ ```
382
+
383
+ ### Compact Tips
384
+
385
+ 1. **Grep for specific items:**
386
+ ```bash
387
+ cakemail -f compact campaigns list | grep "Newsletter"
388
+ ```
389
+
390
+ 2. **Count items:**
391
+ ```bash
392
+ cakemail -f compact campaigns list | grep delivered | wc -l
393
+ ```
394
+
395
+ 3. **Extract IDs:**
396
+ ```bash
397
+ cakemail -f compact campaigns list | grep -oE '\[([0-9]+)\]' | tr -d '[]'
398
+ ```
399
+
400
+ ---
401
+
402
+ ## Examples by Use Case
403
+
404
+ ### Daily Interactive Use
405
+
406
+ ```bash
407
+ # Set default to table or compact
408
+ export CAKEMAIL_OUTPUT_FORMAT=table
409
+
410
+ # Browse campaigns
411
+ cakemail campaigns list
412
+
413
+ # Check specific campaign
414
+ cakemail campaigns get 12345
415
+ ```
416
+
417
+ ### Automation Script
418
+
419
+ ```bash
420
+ #!/bin/bash
421
+ # Always use JSON in scripts
422
+ export CAKEMAIL_OUTPUT_FORMAT=json
423
+
424
+ # Get campaign count
425
+ total=$(cakemail campaigns list | jq '.total')
426
+
427
+ # Process each campaign
428
+ cakemail campaigns list | jq -r '.data[].id' | while read id; do
429
+ echo "Processing campaign $id"
430
+ done
431
+ ```
432
+
433
+ ### Quick Terminal Checks
434
+
435
+ ```bash
436
+ # Use compact for quick scans
437
+ export CAKEMAIL_OUTPUT_FORMAT=compact
438
+
439
+ # Quick list
440
+ cakemail campaigns list
441
+
442
+ # Find specific campaign
443
+ cakemail campaigns list | grep "Summer"
444
+ ```
445
+
446
+ ---
447
+