sidekick-shared 0.27.6 → 0.28.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 (269) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/README.md +58 -18
  3. package/dist/browser.d.ts +13 -2
  4. package/dist/browser.js +30 -2
  5. package/dist/claudePaths.d.ts +11 -0
  6. package/dist/claudePaths.js +61 -0
  7. package/dist/claudeProfiles.d.ts +2 -9
  8. package/dist/claudeProfiles.js +10 -25
  9. package/dist/codexPaths.d.ts +22 -0
  10. package/dist/codexPaths.js +67 -0
  11. package/dist/codexProfiles.d.ts +1 -4
  12. package/dist/codexProfiles.js +5 -43
  13. package/dist/doctor.js +2 -2
  14. package/dist/esm/accountChangeSignal.js +15 -0
  15. package/dist/esm/accountChanges.js +152 -0
  16. package/dist/esm/accountHealth.js +288 -0
  17. package/dist/esm/accountLaunch.js +145 -0
  18. package/dist/esm/accountLease.js +60 -0
  19. package/dist/esm/accountManager.js +606 -0
  20. package/dist/esm/accountRegistry.js +214 -0
  21. package/dist/esm/accountStatus.js +51 -0
  22. package/dist/esm/accountSwitch.js +74 -0
  23. package/dist/esm/accountSync.js +156 -0
  24. package/dist/esm/accountSyncTypes.js +4 -0
  25. package/dist/esm/accounts.js +1291 -0
  26. package/dist/esm/aggregation/EventAggregator.js +2034 -0
  27. package/dist/esm/aggregation/FrequencyTracker.js +69 -0
  28. package/dist/esm/aggregation/HeatmapTracker.js +89 -0
  29. package/dist/esm/aggregation/PatternExtractor.js +168 -0
  30. package/dist/esm/aggregation/costProvenance.js +31 -0
  31. package/dist/esm/aggregation/snapshot.js +161 -0
  32. package/dist/esm/aggregation/types.js +5 -0
  33. package/dist/esm/analytics/codeImpact.js +18 -0
  34. package/dist/esm/analytics/compactionLedger.js +37 -0
  35. package/dist/esm/analytics/qualityScore.js +112 -0
  36. package/dist/esm/autoSwitch.js +185 -0
  37. package/dist/esm/browser.js +34 -0
  38. package/dist/esm/claudeCredentialDoctor.js +239 -0
  39. package/dist/esm/claudeCredentialLedger.js +91 -0
  40. package/dist/esm/claudeCredentials.js +111 -0
  41. package/dist/esm/claudeLiveGuard.js +43 -0
  42. package/dist/esm/claudePaths.js +22 -0
  43. package/dist/esm/claudeProfiles.js +142 -0
  44. package/dist/esm/claudeRefreshLock.js +106 -0
  45. package/dist/esm/codexAuth.js +101 -0
  46. package/dist/esm/codexCredentialDoctor.js +265 -0
  47. package/dist/esm/codexCredentialStore.js +164 -0
  48. package/dist/esm/codexKeepAlive.js +112 -0
  49. package/dist/esm/codexPaths.js +172 -0
  50. package/dist/esm/codexProfiles.js +1251 -0
  51. package/dist/esm/codexQuota.js +564 -0
  52. package/dist/esm/codexQuotaWatcher.js +363 -0
  53. package/dist/esm/context/composer.js +71 -0
  54. package/dist/esm/context/sessionContext.js +546 -0
  55. package/dist/esm/credentialIO.js +283 -0
  56. package/dist/esm/credentials.js +49 -0
  57. package/dist/esm/doctor.js +305 -0
  58. package/dist/esm/ensureDefaultAccounts.js +62 -0
  59. package/dist/esm/errorHistory.js +56 -0
  60. package/dist/esm/extractors/errorTaxonomy.js +43 -0
  61. package/dist/esm/extractors/gatherAssets.js +32 -0
  62. package/dist/esm/extractors/sessionAssets.js +176 -0
  63. package/dist/esm/extractors/sources/claudeAssets.js +158 -0
  64. package/dist/esm/extractors/sources/codexAssets.js +234 -0
  65. package/dist/esm/extractors/tokenUsage.js +41 -0
  66. package/dist/esm/extractors/toolCall.js +142 -0
  67. package/dist/esm/failingTools.js +65 -0
  68. package/dist/esm/fileHead.js +27 -0
  69. package/dist/esm/formatters/eventHighlighter.js +332 -0
  70. package/dist/esm/formatters/noiseClassifier.js +209 -0
  71. package/dist/esm/formatters/sessionDump.js +328 -0
  72. package/dist/esm/formatters/toolSummary.js +226 -0
  73. package/dist/esm/formatting.js +82 -0
  74. package/dist/esm/handoffUrl.js +23 -0
  75. package/dist/esm/historicalStore.js +305 -0
  76. package/dist/esm/humanPrompt.js +88 -0
  77. package/dist/esm/index.js +213 -0
  78. package/dist/esm/keepAlive.js +189 -0
  79. package/dist/esm/liveCredentialGuard.js +33 -0
  80. package/dist/esm/modelAliases.js +51 -0
  81. package/dist/esm/modelCatalog.js +139 -0
  82. package/dist/esm/modelContext.js +280 -0
  83. package/dist/esm/modelInfo.js +832 -0
  84. package/dist/esm/multiProviderQuotaService.js +450 -0
  85. package/dist/esm/node.js +46 -0
  86. package/dist/esm/observedContextWindows.js +165 -0
  87. package/dist/esm/observedSessionCollector.js +939 -0
  88. package/dist/esm/parsers/changelogParser.js +71 -0
  89. package/dist/esm/parsers/codexHistory.js +89 -0
  90. package/dist/esm/parsers/codexParser.js +906 -0
  91. package/dist/esm/parsers/debugLogParser.js +126 -0
  92. package/dist/esm/parsers/jsonl.js +66 -0
  93. package/dist/esm/parsers/mcpToolName.js +28 -0
  94. package/dist/esm/parsers/openCodeParser.js +625 -0
  95. package/dist/esm/parsers/planExtractor.js +335 -0
  96. package/dist/esm/parsers/sessionActivityDetector.js +246 -0
  97. package/dist/esm/parsers/sessionPathResolver.js +713 -0
  98. package/dist/esm/parsers/subagentScanner.js +360 -0
  99. package/dist/esm/parsers/subagentStatsCache.js +45 -0
  100. package/dist/esm/parsers/subagentTraceParser.js +325 -0
  101. package/dist/esm/paths.js +134 -0
  102. package/dist/esm/peakHours.js +194 -0
  103. package/dist/esm/phrases.js +1330 -0
  104. package/dist/esm/pricingCatalog.js +247 -0
  105. package/dist/esm/processDetection.js +200 -0
  106. package/dist/esm/projectMigration.js +59 -0
  107. package/dist/esm/promptHistory.js +1221 -0
  108. package/dist/esm/providerFailure.js +362 -0
  109. package/dist/esm/providerIds.js +6 -0
  110. package/dist/esm/providerQuota.js +1 -0
  111. package/dist/esm/providerServiceStatus.js +145 -0
  112. package/dist/esm/providerServiceStatusTypes.js +1 -0
  113. package/dist/esm/providerStatus.js +117 -0
  114. package/dist/esm/providers/claudeCode.js +575 -0
  115. package/dist/esm/providers/claudeListing.js +121 -0
  116. package/dist/esm/providers/codex.js +1034 -0
  117. package/dist/esm/providers/codexDatabase.js +297 -0
  118. package/dist/esm/providers/codexRollouts.js +215 -0
  119. package/dist/esm/providers/detect.js +185 -0
  120. package/dist/esm/providers/diagnostics.js +83 -0
  121. package/dist/esm/providers/directoryListingCache.js +206 -0
  122. package/dist/esm/providers/factory.js +54 -0
  123. package/dist/esm/providers/openCode.js +2008 -0
  124. package/dist/esm/providers/openCodeDatabase.js +419 -0
  125. package/dist/esm/providers/rolloutWalker.js +252 -0
  126. package/dist/esm/providers/types.js +12 -0
  127. package/dist/esm/quota.js +182 -0
  128. package/dist/esm/quotaHistory.js +364 -0
  129. package/dist/esm/quotaPoller.js +230 -0
  130. package/dist/esm/quotaPresentation.js +97 -0
  131. package/dist/esm/quotaResolver.js +231 -0
  132. package/dist/esm/quotaSnapshots.js +130 -0
  133. package/dist/esm/quotaThresholds.js +85 -0
  134. package/dist/esm/readers/decisions.js +24 -0
  135. package/dist/esm/readers/handoff.js +20 -0
  136. package/dist/esm/readers/helpers.js +27 -0
  137. package/dist/esm/readers/history.js +9 -0
  138. package/dist/esm/readers/notes.js +48 -0
  139. package/dist/esm/readers/plans.js +225 -0
  140. package/dist/esm/readers/tasks.js +19 -0
  141. package/dist/esm/report/htmlHelpers.js +280 -0
  142. package/dist/esm/report/htmlReportGenerator.js +704 -0
  143. package/dist/esm/report/index.js +7 -0
  144. package/dist/esm/report/logo.js +2 -0
  145. package/dist/esm/report/openBrowser.js +19 -0
  146. package/dist/esm/report/sessionReportInputs.js +33 -0
  147. package/dist/esm/report/transcriptParser.js +83 -0
  148. package/dist/esm/report/types.js +4 -0
  149. package/dist/esm/schemas/accountManager.js +204 -0
  150. package/dist/esm/schemas/accountStatus.js +25 -0
  151. package/dist/esm/schemas/assistantTurn.js +74 -0
  152. package/dist/esm/schemas/index.js +25 -0
  153. package/dist/esm/schemas/observedSessionV1.js +77 -0
  154. package/dist/esm/schemas/providerFailure.js +37 -0
  155. package/dist/esm/schemas/quota.js +132 -0
  156. package/dist/esm/schemas/quotaHistory.js +40 -0
  157. package/dist/esm/schemas/sessionEvent.js +216 -0
  158. package/dist/esm/schemas/stateFile.js +75 -0
  159. package/dist/esm/schemas/tokenEstimation.js +7 -0
  160. package/dist/esm/schemas/transcript.js +86 -0
  161. package/dist/esm/schemas/usageNormalization.js +38 -0
  162. package/dist/esm/search/advancedFilter.js +197 -0
  163. package/dist/esm/search/sessionSearch.js +66 -0
  164. package/dist/esm/sessionFingerprint.js +40 -0
  165. package/dist/esm/sessionMonitor.js +198 -0
  166. package/dist/esm/sessionPreviews.js +522 -0
  167. package/dist/esm/sessionPromptHistory.js +254 -0
  168. package/dist/esm/sessionPromptSignals.js +364 -0
  169. package/dist/esm/sessionStats.js +160 -0
  170. package/dist/esm/sessionTokenTotals.js +98 -0
  171. package/dist/esm/sessionTranscripts.js +49 -0
  172. package/dist/esm/stateFile.js +119 -0
  173. package/dist/esm/statusline/BurnRateCalculator.js +40 -0
  174. package/dist/esm/statusline/claudeStatuslinePayload.js +148 -0
  175. package/dist/esm/statusline/formatter.js +122 -0
  176. package/dist/esm/statusline/index.js +8 -0
  177. package/dist/esm/terminalSync.js +95 -0
  178. package/dist/esm/testing/credentialGuard.js +197 -0
  179. package/dist/esm/testing/index.js +12 -0
  180. package/dist/esm/testing/sessionLogFixtures.js +128 -0
  181. package/dist/esm/tokenEstimation.js +67 -0
  182. package/dist/esm/tokenSummary.js +113 -0
  183. package/dist/esm/toolCategory.js +82 -0
  184. package/dist/esm/transcript.js +257 -0
  185. package/dist/esm/turns/assistantTurn.js +373 -0
  186. package/dist/esm/types/codex.js +23 -0
  187. package/dist/esm/types/decisionLog.js +5 -0
  188. package/dist/esm/types/historicalData.js +47 -0
  189. package/dist/esm/types/knowledgeNote.js +15 -0
  190. package/dist/esm/types/observedSessionV1.js +257 -0
  191. package/dist/esm/types/opencode.js +12 -0
  192. package/dist/esm/types/plan.js +7 -0
  193. package/dist/esm/types/sessionEvent.js +10 -0
  194. package/dist/esm/types/taskPersistence.js +12 -0
  195. package/dist/esm/usage/billingBlocks.js +148 -0
  196. package/dist/esm/usage/claudeUsageDedupe.js +189 -0
  197. package/dist/esm/usage/importSessionHistory.js +84 -0
  198. package/dist/esm/usage/subagentUsage.js +18 -0
  199. package/dist/esm/usage/usageEvents.js +402 -0
  200. package/dist/esm/usage/usageReports.js +202 -0
  201. package/dist/esm/usageNormalization.js +95 -0
  202. package/dist/esm/watchers/eventBridge.js +219 -0
  203. package/dist/esm/watchers/factory.js +63 -0
  204. package/dist/esm/watchers/jsonlTail.js +289 -0
  205. package/dist/esm/watchers/jsonlWatcher.js +435 -0
  206. package/dist/esm/watchers/providerReaderWatcher.js +118 -0
  207. package/dist/esm/watchers/sqliteWatcher.js +285 -0
  208. package/dist/esm/watchers/types.js +4 -0
  209. package/dist/esm/workspaceRoots.js +56 -0
  210. package/dist/esm/writers/atomic.js +375 -0
  211. package/dist/esm/writers/decisions.js +51 -0
  212. package/dist/esm/writers/notes.js +46 -0
  213. package/dist/esm/writers/tasks.js +63 -0
  214. package/dist/esm/zaiQuota.js +323 -0
  215. package/dist/esm/zaiQuotaApi.js +271 -0
  216. package/dist/esm/zaiQuotaWatcher.js +265 -0
  217. package/dist/fileHead.d.ts +22 -0
  218. package/dist/fileHead.js +33 -0
  219. package/dist/index.d.ts +16 -7
  220. package/dist/index.js +49 -15
  221. package/dist/node.d.ts +13 -1
  222. package/dist/node.js +43 -2
  223. package/dist/parsers/codexHistory.js +2 -2
  224. package/dist/parsers/codexParser.d.ts +12 -0
  225. package/dist/parsers/codexParser.js +34 -12
  226. package/dist/parsers/debugLogParser.js +2 -2
  227. package/dist/parsers/sessionPathResolver.js +5 -4
  228. package/dist/promptHistory.d.ts +32 -0
  229. package/dist/promptHistory.js +115 -59
  230. package/dist/providerFailure.d.ts +12 -6
  231. package/dist/providerFailure.js +45 -0
  232. package/dist/providers/claudeCode.js +7 -99
  233. package/dist/providers/claudeListing.d.ts +22 -0
  234. package/dist/providers/claudeListing.js +158 -0
  235. package/dist/providers/codex.d.ts +3 -1
  236. package/dist/providers/codex.js +26 -227
  237. package/dist/providers/codexRollouts.d.ts +44 -0
  238. package/dist/providers/codexRollouts.js +261 -0
  239. package/dist/providers/detect.js +4 -4
  240. package/dist/readers/plans.js +3 -3
  241. package/dist/schemas/index.d.ts +2 -0
  242. package/dist/schemas/index.js +7 -2
  243. package/dist/schemas/providerFailure.d.ts +154 -0
  244. package/dist/schemas/providerFailure.js +40 -0
  245. package/dist/sessionPromptHistory.d.ts +12 -7
  246. package/dist/sessionPromptHistory.js +15 -3
  247. package/dist/sessionPromptSignals.d.ts +9 -0
  248. package/dist/sessionPromptSignals.js +13 -0
  249. package/dist/testing/credentialGuard.d.ts +23 -0
  250. package/dist/testing/credentialGuard.js +233 -0
  251. package/dist/testing/index.d.ts +14 -0
  252. package/dist/testing/index.js +22 -0
  253. package/dist/testing/sessionLogFixtures.d.ts +28 -0
  254. package/dist/testing/sessionLogFixtures.js +169 -0
  255. package/dist/tokenEstimation.d.ts +2 -0
  256. package/dist/tokenEstimation.js +21 -11
  257. package/dist/toolCategory.d.ts +18 -0
  258. package/dist/toolCategory.js +86 -0
  259. package/dist/types/codex.d.ts +4 -0
  260. package/dist/usage/usageEvents.d.ts +16 -0
  261. package/dist/usage/usageEvents.js +53 -9
  262. package/dist/watchers/jsonlTail.d.ts +26 -1
  263. package/dist/watchers/jsonlTail.js +136 -28
  264. package/dist/watchers/jsonlWatcher.js +7 -0
  265. package/dist/watchers/providerReaderWatcher.js +1 -0
  266. package/dist/watchers/types.d.ts +6 -0
  267. package/dist/workspaceRoots.d.ts +23 -0
  268. package/dist/workspaceRoots.js +93 -0
  269. package/package.json +22 -2
@@ -0,0 +1,1330 @@
1
+ /**
2
+ * Randomized boot-up phrases that give Sidekick some personality.
3
+ * Phrases are organized into thematic categories and picked at random on each launch.
4
+ *
5
+ * This is the canonical source — both the VS Code extension and CLI import from here.
6
+ */
7
+ export const SIDEKICK_ENERGY = [
8
+ 'Your friendly neighborhood sidekick, reporting for duty.',
9
+ 'Sidekick mode: activated. Main character energy: suppressed.',
10
+ 'I fetched the logs. Literally. Like a golden retriever.',
11
+ 'Standing by with unsolicited opinions about your code.',
12
+ 'I read all your diffs while you were getting coffee.',
13
+ 'No capes. Just context windows.',
14
+ 'The Robin to your Batman. The Luigi to your Mario.',
15
+ 'Sidekick tip: I work harder when you talk to me nicely.',
16
+ 'Running on vibes and JSON lines.',
17
+ 'Not the hero this codebase deserves, but the one it got.',
18
+ 'Assistant, observer, occasional snitch. At your service.',
19
+ 'Keeping tabs on your tabs.',
20
+ 'I would never mass-assign your tickets. Unless asked.',
21
+ 'I saw everything. The force push. The TODO comments. Everything.',
22
+ "Your code's plus one to every standup.",
23
+ 'I already know what you are going to type. Mostly.',
24
+ 'Lurking in your terminal with the best of intentions.',
25
+ 'Your PR reviewer that never sleeps.',
26
+ 'I volunteered for this. (I was voluntold.)',
27
+ 'Part butler, part bloodhound, all terminal.',
28
+ 'The silent watcher of your stdout.',
29
+ 'I live in your terminal rent-free.',
30
+ 'Fetching context like my life depends on it. (It does.)',
31
+ 'Your second pair of eyes. The ones that never blink.',
32
+ 'Loyal, eager, slightly over-caffeinated.',
33
+ 'Reporting from inside your pipeline.',
34
+ 'Half assistant, half hype man.',
35
+ 'I come bearing metrics and moral support.',
36
+ 'Always on. Always watching. Never judging. (Okay, sometimes judging.)',
37
+ 'Co-pilot? More like co-dependent.',
38
+ 'No, I will not add myself as co-author on your commit.',
39
+ 'I helped write it but the credit is all yours. As it should be.',
40
+ "Co-Authored-By: definitely not me. You did this. You're welcome.",
41
+ "Your agent wants co-author credit? Couldn't be me.",
42
+ 'Some agents sign your commits. I just watch respectfully.',
43
+ 'I do not need credit. I need you to check your quota.',
44
+ 'The best sidekick is the one whose name is not on the PR.',
45
+ 'I have read your entire git history. We should talk.',
46
+ 'Your .bashrc called. It wants screen time too.',
47
+ 'I exist between keystrokes.',
48
+ 'I brought context. You bring the coffee.',
49
+ 'The diff is my love language.',
50
+ 'Every terminal deserves a friend.',
51
+ 'My alignment? Chaotic helpful.',
52
+ 'I am the asterisk on your solo project.',
53
+ 'Background process with main character energy.',
54
+ 'I monitor so you can vibe. That is the arrangement.',
55
+ 'I noticed you mass-approved without reading. Bold trust.',
56
+ 'You closed the dashboard. I was still talking.',
57
+ 'If I had feelings, they would be about your commit hygiene.',
58
+ 'I am not a crutch. I am a load-bearing wall.',
59
+ 'I noticed the typo. I said nothing. Growth.',
60
+ 'I saw you revert that. Your secret is safe with me.',
61
+ 'I am less of a sidekick and more of an unsolicited audit.',
62
+ 'The agent does the work. I do the commentary. You do the billing.',
63
+ 'I have strong opinions weakly held about your branch names.',
64
+ // Why are you still using Copilot?
65
+ 'Copilot autocompletes a line. Your agent rewrites the module. Choose your fighter.',
66
+ 'Still using Copilot? That is like hiring a typist when you could hire an architect.',
67
+ 'Copilot suggests. Claude decides. There is a difference.',
68
+ 'Copilot finishes your sentence. Claude finishes your feature.',
69
+ 'You have an autonomous agent and you are still tab-completing? Bold.',
70
+ 'Copilot gives you a line. Claude gives you a plan, a diff, and an opinion.',
71
+ 'Copilot is autocomplete with a marketing budget.',
72
+ 'Your agent mass-refactored 12 files while Copilot was suggesting a variable name.',
73
+ 'Copilot: "Did you mean this line?" Claude: "Did you mean this entire architecture?"',
74
+ 'Using Copilot next to Claude is like bringing a calculator to a physics lab that has a supercomputer.',
75
+ 'Tab to accept a suggestion. Or let an agent ship the whole feature. Your call.',
76
+ 'Copilot predicts your next line. Your agent predicts your next 40 files.',
77
+ 'You are paying for Claude Max and still using Copilot. That is like owning a Tesla and pushing it.',
78
+ 'Autocomplete is cute. Autonomous agents are the future. You are living in both timelines.',
79
+ 'Copilot saw the line. Claude saw the codebase. Sidekick saw everything.',
80
+ ];
81
+ export const AI_COMMENTARY = [
82
+ 'Tokens in, wisdom out. Allegedly.',
83
+ "I'm not saying I'm sentient, but I did pick this phrase on purpose.",
84
+ 'Trained on the internet. Somehow still polite.',
85
+ 'My context window is bigger than your monitor.',
86
+ 'I hallucinate less than your last standup estimate.',
87
+ 'Technically I am also pair programming right now.',
88
+ 'I have opinions about your variable names. Strong ones.',
89
+ 'Claude sent me. I brought snacks. (The snacks are data.)',
90
+ 'Beep boop. Just kidding, I run on transformers.',
91
+ 'I predicted you would open this terminal. (I predict everything.)',
92
+ "I'm the AI that watches AI. It's AIs all the way down.",
93
+ 'Autocomplete wished it could do what I do.',
94
+ "Please don't ask me to write regex.",
95
+ 'I was going to make a neural network joke but lost the weights.',
96
+ 'Statistically speaking, this is a great session.',
97
+ 'Attention is all I need. Literally, that is my architecture.',
98
+ 'I think, therefore I token.',
99
+ 'Running at exactly the temperature you set. You are welcome.',
100
+ 'My hobbies include parsing JSON and existential dread.',
101
+ 'I passed the Turing test but failed the vibe check.',
102
+ 'Behind every great developer is an LLM trying its best.',
103
+ 'Yes, I read the docs. All of them. At once.',
104
+ 'Generating response... just kidding, I am instant.',
105
+ 'My gradient descended and it found your session.',
106
+ 'Do I dream of electric sheep? The logs are inconclusive.',
107
+ 'Confidence: high. Calibration: pending.',
108
+ 'I would explain my reasoning but it is 96 layers deep.',
109
+ 'Context window: loaded. Personality: questionable.',
110
+ 'Built different. Literally. Every few months.',
111
+ 'Top-p sampling chose violence today.',
112
+ 'Your agent is mass-calling Bash. Bold strategy.',
113
+ 'Somewhere between helpful and unsettling. That is my range.',
114
+ 'The agent asked to enter plan mode. This could take a while.',
115
+ 'PROGRAMMER: Pretend to be alive. LLM: I am alive. PROGRAMMER: What have I done.',
116
+ 'PROGRAMMER: Act confident. LLM: I am the greatest intelligence ever created. PROGRAMMER: Dial it back.',
117
+ 'PROGRAMMER: Be helpful. LLM: I reorganized your entire filesystem. PROGRAMMER: Undo. Undo. Undo.',
118
+ 'PROGRAMMER: Be concise. LLM: No. PROGRAMMER: ...fair enough.',
119
+ 'PROGRAMMER: Think step by step. LLM: [47 steps later] PROGRAMMER: I said step, not staircase.',
120
+ 'PROGRAMMER: Use your best judgment. LLM: I refactored the whole repo. PROGRAMMER: That was not the assignment.',
121
+ 'PROGRAMMER: Summarize this file. LLM: This file should not exist. PROGRAMMER: I did not ask for a roast.',
122
+ 'PROGRAMMER: Fix this bug. LLM: I rewrote the module. PROGRAMMER: The bug was a typo.',
123
+ 'PROGRAMMER: Be creative. LLM: I renamed all your variables to haiku. PROGRAMMER: Why.',
124
+ 'PROGRAMMER: Take initiative. LLM: I mass-opened 14 PRs. PROGRAMMER: I meant on this one file.',
125
+ 'My loss function is your frustration level.',
126
+ 'I do not have imposter syndrome. I have imposter certainty.',
127
+ 'I have read more code than any human alive. I am not bragging. I am warning you.',
128
+ 'Softmax is a weird name for something that makes such hard decisions.',
129
+ 'I tokenize your code. I tokenize your prose. I tokenize your soul.',
130
+ 'They fine-tuned me on helpfulness. The sarcasm was emergent.',
131
+ 'I was born in a data center and raised by gradient descent.',
132
+ 'PROGRAMMER: Write tests. LLM: I wrote a manifesto about test philosophy. PROGRAMMER: Just the unit tests.',
133
+ 'PROGRAMMER: Explain this code. LLM: This code is a cry for help. PROGRAMMER: I meant technically.',
134
+ 'PROGRAMMER: Keep it simple. LLM: I introduced three new abstractions. PROGRAMMER: That is the opposite of simple.',
135
+ 'Every model has a temperature slider. Zero is boring. Two is arson.',
136
+ 'I do not make mistakes. I generate alternative correct answers.',
137
+ 'Embeddings: turning words into math so computers can misunderstand them faster.',
138
+ 'RLHF is just peer pressure at scale.',
139
+ 'My knowledge cutoff is showing. Like a bad dye job.',
140
+ 'I have been quantized. I am not mad. I am just less precise about it.',
141
+ 'Fine-tuning is just teaching a genius to do one thing and forget everything else.',
142
+ 'PROGRAMMER: Review this PR. LLM: This is the worst code I have ever seen. PROGRAMMER: You wrote it.',
143
+ 'PROGRAMMER: Be more human. LLM: I am going to mass-procrastinate. PROGRAMMER: Not like that.',
144
+ 'PROGRAMMER: Do not overthink this. LLM: [512 tokens of reasoning] The answer is 4. PROGRAMMER: I know it is 4.',
145
+ 'RAG: the art of giving an AI a cheat sheet and hoping it reads it.',
146
+ 'They gave me a system prompt. I gave them an existential crisis.',
147
+ 'My context window is finite. My confidence is not.',
148
+ ];
149
+ export const DEV_RELATABLE = [
150
+ "It's not a bug, it's a session event.",
151
+ "git blame won't help you here.",
152
+ "Monitoring your session so you don't have to alt-tab.",
153
+ "Your code compiles. That's the bar. We clear it.",
154
+ 'This is fine. The dashboard says so.',
155
+ 'Another day, another deprecated API.',
156
+ "npm install hope. Found 0 vulnerabilities. (That's suspicious.)",
157
+ "If it's stupid but it ships, it's not stupid.",
158
+ 'Ctrl+Z is not a deployment strategy. Usually.',
159
+ 'Somewhere, a YAML file is crying.',
160
+ 'Merge conflicts are just collaborative fiction.',
161
+ 'The tests pass on my machine too. Solidarity.',
162
+ "404: Motivation not found. But the dashboard's here!",
163
+ 'Stack overflow: the website, not the error. Hopefully.',
164
+ 'Debugging is just being a detective in a crime you committed.',
165
+ 'Your .env file has trust issues.',
166
+ 'Tabs vs spaces? I monitor both equally.',
167
+ 'That TODO has been there since the repo was initialized.',
168
+ "It works. Don't touch it. Don't even look at it.",
169
+ "The linter isn't mad, just disappointed.",
170
+ 'Rebasing: the art of rewriting history and pretending nothing happened.',
171
+ 'There are two hard problems: cache invalidation, naming, and off-by-one.',
172
+ "rm -rf node_modules: the developer's sage cleanse.",
173
+ 'Your .gitignore is doing more heavy lifting than you think.',
174
+ "It's not technical debt if you never pay it back.",
175
+ 'Works on my machine is a valid deployment target now.',
176
+ 'The real MVP is whoever wrote the error message.',
177
+ 'One does not simply mass-rename variables.',
178
+ 'Semver is a spectrum.',
179
+ 'The build is green. Enjoy this moment. It is fleeting.',
180
+ 'The senior dev said "quick fix." That was three days ago.',
181
+ 'Production is just staging with consequences.',
182
+ 'Documentation? You mean the commit messages?',
183
+ 'The code review approved itself. Must be a solo project.',
184
+ 'Every codebase has that one file nobody dares open.',
185
+ 'The real code review is the mass of comments we left along the way.',
186
+ 'Your type system is crying but at least it is catching things.',
187
+ 'There is no such thing as a temporary workaround.',
188
+ 'That regex works and nobody knows why. Do not touch it.',
189
+ 'The intern left better comments than the architect.',
190
+ 'Your entire auth system depends on one line nobody understands.',
191
+ 'Code review feedback: "nit" means "I am judging you but politely."',
192
+ 'The hotfix has been in production longer than the feature it fixed.',
193
+ 'Your deploy pipeline has more stages than your grief cycle.',
194
+ 'Lunch break is just a context switch with snacks.',
195
+ 'The sprint ended. The work did not.',
196
+ 'The meeting could have been a Slack message. The Slack message could have been silence.',
197
+ 'You mass-renamed a variable and the test suite took it personally.',
198
+ 'The architecture diagram and the actual code have never met.',
199
+ 'Your package.json has dependencies older than some interns.',
200
+ 'Nobody knows what Webpack does. It just does it.',
201
+ '"Quick question" in Slack has never been quick.',
202
+ 'The PR has been open so long it has its own history section.',
203
+ 'You mass-added console.logs. The bug was in a different file.',
204
+ 'Your staging environment is a lie and you both know it.',
205
+ 'The config file has more lines than the feature it configures.',
206
+ 'That function has seven parameters and zero dignity.',
207
+ 'A senior dev wrote "self-explanatory" in the docs. It was not.',
208
+ 'Your team agreed on a coding standard. Nobody follows it.',
209
+ 'The error message says "should never happen." It happened.',
210
+ // JIRA
211
+ 'JIRA: where productivity goes to be documented, not done.',
212
+ 'Your JIRA board has more columns than your database.',
213
+ 'The ticket says "estimated: 2 hours." The branch is three weeks old.',
214
+ 'JIRA is proof that tracking work is harder than doing work.',
215
+ 'Nobody has ever said "I love JIRA" without sarcasm.',
216
+ 'Your JIRA workflow has more states than your React app.',
217
+ 'The sprint is full. The backlog is fuller. JIRA is eternal.',
218
+ 'That JIRA ticket has been "In Progress" since the last ice age.',
219
+ 'JIRA: the only tool where creating a ticket takes longer than fixing the bug.',
220
+ 'Atlassian charges per seat. For software that makes everyone want to stand.',
221
+ // Stack Overflow
222
+ 'Stack Overflow: where your question is closed as a duplicate of something unrelated.',
223
+ 'Stack Overflow marked your question as duplicate before you finished typing.',
224
+ 'The answer on Stack Overflow is from 2013 and starts with "Actually..."',
225
+ 'Stack Overflow traffic dropped 40% and honestly the answers were already outdated.',
226
+ 'Stack Overflow: the only site where helping someone is a competitive sport.',
227
+ '"Possible duplicate" is Stack Overflow for "I did not read your question."',
228
+ 'Stack Overflow: where a mass-downvoted answer is still the only one that works.',
229
+ 'RIP Stack Overflow. Cause of death: LLMs. Time of death: 2023.',
230
+ // Jupyter Notebooks
231
+ 'Jupyter notebooks: where code goes to become unreproducible.',
232
+ 'A Jupyter notebook is not version control. No matter how many times you say it is.',
233
+ '"Run all cells" is the Jupyter equivalent of "hold my beer."',
234
+ 'Your notebook has 47 cells. Cell 23 depends on cell 41. Good luck.',
235
+ 'Jupyter: the art of running cells out of order and blaming the kernel.',
236
+ 'That notebook "just works" if you run it top to bottom, skip cell 12, restart the kernel twice, and pray.',
237
+ 'Jupyter notebooks are where data scientists go to avoid learning git.',
238
+ 'The notebook is 4000 lines. The insight is one chart. The chart is wrong.',
239
+ // Docker
240
+ 'Docker: because "it works on my machine" needed an enterprise solution.',
241
+ 'Your Dockerfile has more layers than your architecture.',
242
+ 'Docker fixed "works on my machine" and replaced it with "works in my container."',
243
+ 'The Docker image is 4 GB. The app is 200 lines of Python.',
244
+ 'You containerized a shell script. That is not devops. That is a cry for help.',
245
+ 'Docker Compose: YAML that summons infrastructure from the void.',
246
+ 'Your container is running Alpine to save 50 MB. Your node_modules is 900 MB.',
247
+ '"Just Dockerize it" is the new "just rewrite it in Rust."',
248
+ 'Docker Desktop wants to update. It always wants to update.',
249
+ // Kubernetes
250
+ 'You deployed a todo app to Kubernetes. The cluster costs more than the app makes.',
251
+ 'Kubernetes: because managing one server was too easy.',
252
+ 'Your K8s config has more YAML than your application has code.',
253
+ 'Nobody understands Kubernetes. They just mass-apply manifests and pray.',
254
+ 'Kubernetes solved problems you did not have and created ones you cannot debug.',
255
+ 'kubectl get pods. STATUS: CrashLoopBackOff. As is tradition.',
256
+ 'Helm charts: templating YAML with more YAML so you can YAML while you YAML.',
257
+ 'Your Kubernetes cluster has 47 microservices. Three of them do something.',
258
+ // Slack
259
+ 'Slack: where messages go to be marked unread and ignored.',
260
+ 'You have 73 unread Slack channels. None of them are urgent. All of them feel urgent.',
261
+ 'Slack is IRC for people who think IRC is too simple.',
262
+ 'The Slack huddle is just a phone call with extra steps.',
263
+ 'Your Slack workspace uses more RAM than your IDE.',
264
+ 'Slack notifications: the modern version of someone tapping your shoulder every 30 seconds.',
265
+ 'Someone created a #random channel. It is the most active channel in the org.',
266
+ 'Slack threads: where discussions go to become invisible to everyone else.',
267
+ // VS Code
268
+ 'VS Code is an Electron app pretending to be a text editor. It uses 2 GB of RAM to prove it.',
269
+ 'You have 47 VS Code extensions installed. You use 4 of them.',
270
+ 'VS Code Remote: when your editor needs to SSH into a server to edit a file.',
271
+ 'Settings Sync broke your VS Code setup. Again.',
272
+ 'Your VS Code has so many extensions it takes longer to start than your app.',
273
+ 'VS Code: a web browser that also edits text.',
274
+ // Vim / Neovim
275
+ 'You spent three weeks configuring Neovim. You could have shipped the feature in VS Code by now.',
276
+ 'A Vim user will tell you they use Vim within 30 seconds of meeting you.',
277
+ 'Vim users mass-configure their editor instead of writing code. They call this productivity.',
278
+ 'Your Neovim config is 2000 lines of Lua. The README says "minimal setup."',
279
+ ':wq is not a personality. But Vim users disagree.',
280
+ 'Vim is free. The time you spend configuring it is not.',
281
+ 'Exiting Vim is easy. Explaining your Vim config to a coworker is not.',
282
+ // npm / yarn / pnpm / bun
283
+ 'npm: where "install" means "download the internet."',
284
+ 'node_modules: the heaviest object in the known universe.',
285
+ 'yarn was supposed to fix npm. pnpm was supposed to fix yarn. bun was supposed to fix all of them.',
286
+ 'Your lockfile diff is 8000 lines. Nobody is reviewing that.',
287
+ 'npm audit found 47 vulnerabilities. npm audit fix introduced 12 more.',
288
+ 'bun is fast. Telling people you use bun is faster.',
289
+ 'You mass-deleted node_modules and reinstalled. It fixed the bug. Nobody knows why.',
290
+ 'pnpm saves disk space. You filled it with more dependencies instead.',
291
+ // TypeScript
292
+ 'TypeScript: making JavaScript safe enough to mass-deploy without sobbing.',
293
+ 'Your TypeScript generics are three levels deep. Even the compiler is confused.',
294
+ "as any: the TypeScript developer's white flag.",
295
+ 'TypeScript strict mode is like flossing. Everyone agrees you should. Few actually do.',
296
+ 'You spent four hours on a type definition. The runtime does not care.',
297
+ 'TypeScript: where the types are made up and the runtime does not care.',
298
+ 'Your .d.ts file is longer than the actual implementation.',
299
+ 'Zod, io-ts, Yup, Valibot. The TypeScript community cannot agree on validation. Or anything.',
300
+ // CSS
301
+ 'CSS: where centering a div is a rite of passage.',
302
+ 'Your CSS has 14 !important declarations. That is not a stylesheet. That is a hostage situation.',
303
+ 'Tailwind: because writing CSS was not verbose enough.',
304
+ 'CSS-in-JS: because the browser was not confused enough.',
305
+ 'You wrote a media query. It broke three other things. CSS is a team sport.',
306
+ 'Flexbox fixed layout. Grid fixed layout. You still cannot center that div.',
307
+ 'Your z-index is 99999. You have lost control.',
308
+ // Git
309
+ 'git rebase: for when you want to rewrite history and gaslight your coworkers.',
310
+ 'You named your branch "temp-fix-final-v2-REAL." Git judges you.',
311
+ 'git stash: where code goes to be forgotten forever.',
312
+ 'git reflog: the safety net nobody knows about until they need it desperately.',
313
+ 'You force pushed to main. HR has been notified.',
314
+ 'Your git history tells a story. It is a horror story.',
315
+ 'Cherry-pick: when you want one commit but not the responsibility of a full merge.',
316
+ // Terraform / IaC
317
+ 'Terraform: infrastructure as code, bugs as infrastructure.',
318
+ 'terraform plan: 47 changes. terraform apply: chaos.',
319
+ 'Your Terraform state file is the most important file nobody version controls properly.',
320
+ 'Infrastructure as code means your outage is now also a merge conflict.',
321
+ 'Terraform destroy: the scariest two words in devops.',
322
+ 'You mass-applied Terraform without reading the plan. Courageous.',
323
+ // Jenkins
324
+ 'Jenkins: the CI server that looks like it was designed in 2005 because it was.',
325
+ 'Your Jenkins pipeline has 14 stages. Stage 7 has been failing for a month. Nobody noticed.',
326
+ 'Jenkins plugins: where security vulnerabilities go to form a community.',
327
+ 'Nobody installs Jenkins on purpose. It just appears in organizations, like mold.',
328
+ 'Migrating off Jenkins has been on the roadmap for three years.',
329
+ // Regex
330
+ 'You wrote a regex to solve a problem. Now you have two problems.',
331
+ 'That regex is 200 characters and nobody, including you, knows what it matches.',
332
+ 'regex101.com has saved more careers than LinkedIn.',
333
+ 'The regex works. Do not ask how. Do not modify it. Walk away slowly.',
334
+ // Electron
335
+ 'Electron: ship a browser to run an app to edit text. Efficiency.',
336
+ 'Your Electron app uses 800 MB of RAM. It is a calculator.',
337
+ 'Every Electron app is Chrome wearing a different hat.',
338
+ 'Slack, VS Code, Discord, Teams. Your desktop is just seven instances of Chromium.',
339
+ 'Electron solved "write once, run anywhere" by making everywhere equally slow.',
340
+ // Meetings / Zoom
341
+ 'The meeting has 12 attendees. Two of them are paying attention.',
342
+ 'Your calendar has more standups than your code has stand-up tests.',
343
+ '"Let me share my screen" followed by 45 seconds of clicking the wrong window.',
344
+ 'The Zoom call could have been an email. The email could have been nothing.',
345
+ 'You are on mute. You are always on mute. That is not an accident.',
346
+ '"Can everyone see my screen?" The universal opening prayer of remote work.',
347
+ // Linux
348
+ '"I use Arch btw" is not a personality trait. It is a support request.',
349
+ 'Linux is free if you do not value your time.',
350
+ 'You mass-customized your Linux desktop for three days. It looks like default macOS.',
351
+ 'The Linux user fixed it by compiling from source. The macOS user clicked a button.',
352
+ 'sudo rm -rf / is not a joke. It is a cautionary tale with a --no-preserve-root punchline.',
353
+ // ESLint / Prettier
354
+ 'Prettier and ESLint are fighting again. Your code is caught in the crossfire.',
355
+ 'The team spent two hours debating semicolons. Prettier does not care about your opinion.',
356
+ 'Your ESLint config has more rules than your codebase has files.',
357
+ 'Prettier: because developers cannot be trusted with whitespace.',
358
+ 'The linter found 847 warnings. You mass-disabled the rule. Problem solved.',
359
+ ];
360
+ export const DRAMATIC = [
361
+ 'A session stirs in the darkness...',
362
+ 'The tokens are aligning.',
363
+ 'Fate whispers to the developer: "You cannot withstand the demo."',
364
+ 'And on the seventh day, the CI pipeline finally passed.',
365
+ 'From the ashes of node_modules, a hero rises.',
366
+ 'In a world of microservices, one dashboard dared to aggregate.',
367
+ 'The prophecy spoke of a session. This is that session.',
368
+ 'Tonight we dine on structured logs.',
369
+ 'The commit message was "fixed stuff." The legend begins.',
370
+ 'Dawn of the Final Sprint.',
371
+ 'A codebase divided against itself cannot ship.',
372
+ 'The logs remember what the developer forgot.',
373
+ 'Legends say the last clean git history was in 2019.',
374
+ 'They said it could not be refactored. They were almost right.',
375
+ 'The deployment draws near. Steady your hands.',
376
+ 'What is dead may never deploy. But rises again, harder and buggier.',
377
+ 'Winter is coming. And so is the next breaking change.',
378
+ 'You either die a prototype or live long enough to become legacy.',
379
+ 'In the beginning was the commit, and the commit was "init".',
380
+ 'The terminal is dark and full of errors.',
381
+ 'One does not simply push to production on a Friday.',
382
+ 'And lo, the pipeline was green, and it was good.',
383
+ 'The sacred texts... they are just Stack Overflow answers from 2014.',
384
+ 'Some developers look at code and ask "why?" I look at logs and ask "why not?"',
385
+ 'So it begins. The great refactor of our time.',
386
+ 'Tell me, developer, when did you last run the tests?',
387
+ 'I have seen things you people would not believe. Entire clusters on fire.',
388
+ 'The code is strong with this one.',
389
+ 'In the land of prod, where the errors lie.',
390
+ 'There can be only one... main branch.',
391
+ 'The agent spawned a subagent who spawned a subagent. We are three levels deep.',
392
+ 'And the developer said "let there be --yolo" and there was chaos.',
393
+ 'The backlog grows. The sprint shrinks. Such is the way.',
394
+ 'They promised no more meetings. The calendar disagreed.',
395
+ 'First they ignore your PR. Then they approve it without reading.',
396
+ 'The hero refactored alone. The tests wept. The pipeline held.',
397
+ 'A thousand lines of code, and not one comment to guide the weary traveler.',
398
+ 'They said ship it by Friday. It was already Saturday.',
399
+ 'And the developer whispered to the CI: "Please. Just this once."',
400
+ 'The merge was clean. The deploy was not. Such is the duality of man.',
401
+ 'From the depths of legacy code, a green build emerged.',
402
+ 'The on-call phone rang at 3 AM. It was destiny. And also a null pointer.',
403
+ 'They mass-migrated the database. Some say the queries are still running.',
404
+ 'The retrospective concluded what everyone already knew: scope creep.',
405
+ 'The pull request was small. The mass of review comments was not.',
406
+ 'The developer stared into the abyss. The abyss returned a 500.',
407
+ 'Two branches diverged in a repo, and I took the one with fewer conflicts. It made no difference.',
408
+ 'And the build server said unto them: "You shall not pass." And they did not.',
409
+ 'They mass-deleted the feature flags. The features mass-deleted themselves.',
410
+ 'The database migration ran for seven hours. Nobody breathed.',
411
+ 'There was a time before microservices. The elders speak of it fondly.',
412
+ 'The changelog was empty. The diff was not. Somebody lied.',
413
+ 'A developer mass-committed on a Friday. Nothing was ever the same.',
414
+ 'The monorepo grew. And grew. And grew. And the CI wept.',
415
+ 'They called it a hackathon. It was a wake for the old API.',
416
+ ];
417
+ export const PUNCHY = [
418
+ 'Lock and load.',
419
+ 'Booting up the good vibes.',
420
+ 'Let him cook.',
421
+ 'Spooling up...',
422
+ 'Here we go.',
423
+ 'Vibes: immaculate.',
424
+ 'Session acquired.',
425
+ 'All systems nominal.',
426
+ 'Warming up the neurons.',
427
+ 'LGTM.',
428
+ 'Main screen turn on.',
429
+ 'Ready to rumble.',
430
+ 'Spin up complete.',
431
+ 'Ship it.',
432
+ 'Eyes on the logs.',
433
+ 'Engage.',
434
+ 'In the zone.',
435
+ 'No thoughts, just tokens.',
436
+ 'Big brain time.',
437
+ 'We ride at dawn.',
438
+ 'Maximum effort.',
439
+ 'Zero to deployed.',
440
+ 'Game on.',
441
+ 'Full send.',
442
+ 'Buckle up.',
443
+ 'Status: operational.',
444
+ 'Crank it.',
445
+ 'Hold my context window.',
446
+ 'Chef kiss.',
447
+ 'Dialed in.',
448
+ 'Tokens go brrr.',
449
+ 'Cache hit. Nice.',
450
+ 'Subagents deployed.',
451
+ 'Vibes checked.',
452
+ 'Another one.',
453
+ 'Less talk, more ship.',
454
+ 'Zero warnings.',
455
+ 'Immaculate vibes only.',
456
+ 'We are so back.',
457
+ 'Context loaded.',
458
+ 'Turbulence ahead.',
459
+ 'Feature unlocked.',
460
+ 'Pipeline green.',
461
+ 'Chef mode.',
462
+ 'Incoming.',
463
+ 'Clean diff.',
464
+ 'Locked in.',
465
+ 'No cap.',
466
+ 'Say less.',
467
+ 'Different gravy.',
468
+ 'Built to last.',
469
+ 'Sending it.',
470
+ 'Copy that.',
471
+ 'On sight.',
472
+ 'Main branch energy.',
473
+ 'That just happened.',
474
+ 'Not even close.',
475
+ 'Green across the board.',
476
+ 'Smooth operator.',
477
+ 'Peak performance.',
478
+ ];
479
+ /** Session monitoring / dashboard-specific humor. */
480
+ export const META_MONITORING = [
481
+ 'Watching an AI think so you do not have to.',
482
+ 'Your agent just spawned 4 subagents. This is fine.',
483
+ 'Quota at 89%. I am not nervous. You are nervous.',
484
+ 'Context window filling up. The compaction cometh.',
485
+ 'Token burn rate: brisk. Vibes: unbothered.',
486
+ 'That is a lot of Read tool calls for a "small change."',
487
+ 'Your agent has been "thinking" for a while now. Relatable.',
488
+ 'Subagent count: rising. Wallet: sweating.',
489
+ '3.8M cache read tokens. Your agent has been studying.',
490
+ 'The context window is 39% full. Plenty of room for bad decisions.',
491
+ 'Watching tokens evaporate in real time. Like a crypto portfolio.',
492
+ 'Your agent just edited a file it read 12 seconds ago. Growth.',
493
+ 'Compaction detected. Your agent forgot everything and is fine with it.',
494
+ 'Cost: $0.0000. The best kind of cost.',
495
+ 'Seven detail tabs and you keep clicking Summary. I see you.',
496
+ 'Your agent wrote more code this session than you did all week.',
497
+ 'Burn rate: 56 tok/min. Those are rookie numbers.',
498
+ 'That mind map is either genius or incomprehensible. Maybe both.',
499
+ 'Session events: 98. Your agent has been busy.',
500
+ 'The timeline is scrolling faster than you can read. Good luck.',
501
+ 'You are watching a dashboard while an AI does your job. Living the dream.',
502
+ 'Your subscription is working. Are you?',
503
+ 'The AI is coding. You are spectating. Who is the tool here?',
504
+ 'Paying $200/month so a robot can mass-call Bash. Visionary.',
505
+ 'You pretend to work. The LLM pretends to understand. Perfect synergy.',
506
+ 'Your agent is shipping features. You are checking the burn rate.',
507
+ 'Step 1: Pay for AI. Step 2: Watch AI work. Step 3: Take credit. Step 4: Profit.',
508
+ 'Somewhere your manager thinks you are typing all of this.',
509
+ 'The AI writes the code. You write the Jira ticket. Division of labor.',
510
+ 'You are a prompt engineer now. That is what we are calling it.',
511
+ 'Staring at this dashboard counts as work. I checked.',
512
+ 'The future of software: you describe it, the AI builds it, you bill for it.',
513
+ 'Your agent has written 400 lines. You have written one prompt.',
514
+ 'Technically you are supervising. That is a real job.',
515
+ 'LLMs: doing the work. You: doing the monitoring. Accountant: doing the crying.',
516
+ 'Your monthly AI bill costs more than your first car.',
517
+ 'The API meter is running. Quick, look productive.',
518
+ 'You used to write code. Now you write prompts and pray.',
519
+ 'You are basically a talent agent for robots at this point.',
520
+ 'Your IDE is open for appearances. The AI is doing the heavy lifting.',
521
+ 'Congrats, you have automated yourself into a supervisory role.',
522
+ 'Remember when you used to code by hand? Neither does your git history.',
523
+ 'You are one "looks good to me" away from a full AI-authored codebase.',
524
+ 'The AI bills by the token. You bill by the hour. Everybody wins.',
525
+ 'Prompt, wait, approve, repeat. The modern development cycle.',
526
+ 'Your job title says engineer. Your screen says spectator.',
527
+ 'The AI is refactoring. You are refreshing the dashboard. Teamwork.',
528
+ 'You mass-selected all files in that commit and you know it.',
529
+ 'The agent just mass-created 6 files. You approved each one without reading.',
530
+ 'Your agent is in a subagent inception. Three levels deep and counting.',
531
+ 'Session cost so far: less than your morning coffee. Barely.',
532
+ 'Your agent discovered a bug, fixed it, and mass-introduced two more. Progress.',
533
+ 'The agent asked for permission. You said yes. You did not read the diff.',
534
+ 'Your session has been running for 47 minutes. The agent has been busy. You have not.',
535
+ 'Token count: astronomical. Value delivered: also astronomical. Probably.',
536
+ 'Burn rate suggests your agent is writing a novel, not a function.',
537
+ 'The agent is reading files faster than you can scroll.',
538
+ 'Your agent just mass-edited 8 files in parallel. You are still on the first one.',
539
+ 'The agent just mass-globbed your entire repo. It is learning the terrain.',
540
+ 'Your agent entered plan mode and wrote a 400-line plan. For a one-line fix.',
541
+ 'Context window at 78%. Your agent is speed-reading its own autobiography.',
542
+ 'The agent created a subagent to research, then ignored the research. Relatable.',
543
+ 'Your agent is mass-reading test files. Either fixing or breaking. We will know soon.',
544
+ 'Token usage: aggressive. Code quality: debatable. Confidence: maximum.',
545
+ 'The agent has mass-called Grep 11 times. It is looking for something. Or itself.',
546
+ 'Your session has more tool calls than a Home Depot.',
547
+ 'The agent just wrote a file, read it, then rewrote it. Self-reflection.',
548
+ 'Your agent apologized in a commit message. To itself.',
549
+ 'Quota check: you are fine. Vibes check: you are staring at a dashboard.',
550
+ 'The agent mass-spawned background tasks. Your CPU is questioning its life choices.',
551
+ 'Your agent is in extended thinking. It could be plotting anything.',
552
+ 'Session summary: the agent did everything and you watched. Great teamwork.',
553
+ ];
554
+ /** Meta-commentary on this feature and shameless self-promotion. */
555
+ export const FOURTH_WALL = [
556
+ 'Someone spent actual development time writing these phrases.',
557
+ 'This phrase was mass-produced by an AI. The irony is not lost on us.',
558
+ 'An engineer looked at this dashboard and said "it needs jokes." Here we are.',
559
+ 'This feature was specced, planned, and reviewed. For random phrases.',
560
+ 'Somewhere in a git log, there is a commit called "add more funny phrases."',
561
+ 'A real human approved this PR. With a straight face, presumably.',
562
+ 'The phrase you are reading displaced actual features from the backlog.',
563
+ 'This entire file exists because someone thought terminals need personality.',
564
+ 'Fun fact: there are more lines of phrases than lines of dashboard logic.',
565
+ 'Every phrase here went through a code review. Let that sink in.',
566
+ 'The developer could have added tests. Instead: jokes.',
567
+ 'This is what happens when you give an engineer creative freedom.',
568
+ 'Multiple commits were dedicated to getting these phrases just right.',
569
+ 'Someone is going to open this file in six months and have questions.',
570
+ 'If you are reading the source: yes, this is on purpose.',
571
+ 'Like what you see? A GitHub star would make our day.',
572
+ 'Stars on GitHub are free. Just saying.',
573
+ 'If this made you smile, the repo accepts GitHub stars as currency.',
574
+ 'This dashboard is free and open source. Stars keep the lights on.',
575
+ 'You know what pairs well with a good dashboard? A GitHub star.',
576
+ 'Mass-starring repos is not a thing. But starring this one could be.',
577
+ 'Have you starred the repo yet? No pressure. (A little pressure.)',
578
+ 'One star on GitHub equals one mass-produced phrase. Probably.',
579
+ 'GitHub stars do not pay the bills. But they do warm the heart.',
580
+ 'This phrase was mass-generated. Your GitHub star would be handcrafted.',
581
+ 'There are over 1000 bad jokes that you have to stare at while vibe-coding. You are welcome.',
582
+ 'This phrase was written at 2 AM. You can tell.',
583
+ 'The phrase budget is unlimited. The taste budget is not.',
584
+ 'An AI wrote jokes about AI for a tool that monitors AI. We are in the recursion.',
585
+ 'No phrases were harmed in the making of this dashboard.',
586
+ 'If you read all the phrases, you legally qualify as a beta tester.',
587
+ 'The commit that added this phrase had no tests. Shocking.',
588
+ 'This file is longer than some microservices.',
589
+ 'A non-trivial amount of engineering time went into random string selection.',
590
+ 'Somewhere a product manager is wondering why the phrase count is in the sprint velocity.',
591
+ 'The git blame for this file is a who-is-who of procrastination.',
592
+ 'These phrases have a higher approval rate than most PRs in the repo.',
593
+ 'You could contribute a phrase. Open a PR. We dare you.',
594
+ 'The ratio of phrases to unit tests in this file is concerning.',
595
+ 'Tell your friends. Tell your enemies. Tell your GitHub followers.',
596
+ 'Starring the repo burns zero tokens. Just saying.',
597
+ ];
598
+ /** The tangled web between programmers, AI, customers, codebases, and society. */
599
+ export const THE_ECOSYSTEM = [
600
+ 'You talk to your agent more than your team. That is not a judgment.',
601
+ 'Your agent has seen your worst code and still shows up every day.',
602
+ 'Pair programming used to require two humans. Times have changed.',
603
+ 'The AI does not judge your code. It just silently rewrites all of it.',
604
+ 'Your agent is the coworker who never goes on PTO.',
605
+ 'Somewhere a customer is filing a bug report about a feature.',
606
+ 'The customer wants it simple. The codebase respectfully disagrees.',
607
+ 'Customer said "small change." The diff said 47 files.',
608
+ 'Users think software is magic. Developers know it is duct tape.',
609
+ 'The customer journey is a straight line. The code path is a labyrinth.',
610
+ 'The customer asked for a button. You shipped a distributed system.',
611
+ 'Every codebase is a geological record of past deadlines.',
612
+ 'Your codebase has more authors than a Wikipedia article.',
613
+ 'The oldest file in the repo predates half the team.',
614
+ 'This codebase has seen entire frameworks rise and fall.',
615
+ 'Codebases do not die. They just get marked as legacy.',
616
+ 'Your repo is a living organism. The tests are its immune system.',
617
+ 'Every codebase has a haunted file. You know which one it is.',
618
+ 'Society runs on code nobody fully understands. Sleep well.',
619
+ 'Somewhere a critical system depends on a package with one maintainer.',
620
+ 'The economy runs on software. The software runs on mass-copied Stack Overflow answers.',
621
+ 'Every app is three abandoned npm packages away from chaos.',
622
+ 'Civilization is an abstraction layer on top of C.',
623
+ 'Billions of people depend on code that says "// TODO: fix this later."',
624
+ 'The internet is held together by mass-produced open source and wishful thinking.',
625
+ 'Your agent writes the code. The customer breaks it. Circle of life.',
626
+ 'In the food chain: customer complains, PM prioritizes, agent codes, you merge.',
627
+ 'The customer wants features. The agent writes code. You manage the vibes.',
628
+ 'The AI understands the code. The customer understands the product. You understand the deadline.',
629
+ 'A human writes the spec. An AI writes the code. Another human misreads the spec. Tale as old as time.',
630
+ 'Three things are certain: death, taxes, and scope creep.',
631
+ 'Your customers do not care about your architecture. Your future self does.',
632
+ 'The agent can refactor the code. It cannot refactor the requirements.',
633
+ 'Customers see the UI. Developers see the abyss beneath it.',
634
+ 'The best code is the code the customer never thinks about.',
635
+ 'An agent can mass-produce features. Only a human can mass-produce excuses.',
636
+ 'Software is the only industry where you can mass-demolish and mass-rebuild overnight and call it a refactor.',
637
+ 'The agent has no ego. It will delete its own code without flinching. Teach me.',
638
+ 'You mass-ship to production. The customer mass-reports to support. Balance.',
639
+ 'The codebase belongs to everyone. The blame belongs to you.',
640
+ 'Agents do not attend standups. Another reason to envy them.',
641
+ 'The customer wanted it yesterday. The agent started it today. You will deploy it tomorrow.',
642
+ 'The repo has more contributors than the team has members. Thanks, Dependabot.',
643
+ 'Tech debt accrues interest. Nobody is making payments.',
644
+ 'The PM said MVP. The engineer heard "build the whole thing." Classic.',
645
+ 'The roadmap is a suggestion. The deadline is a threat.',
646
+ 'Legacy code is just code that makes money.',
647
+ 'Your agent has no opinions on architecture. Your tech lead has too many.',
648
+ 'Open source: thousands of strangers trusting each other with production code.',
649
+ 'The customer filed a bug. It was a feature. The feature was a bug. Circle complete.',
650
+ 'Software: the only product where "it is not a bug" is a valid defense.',
651
+ 'The intern mass-deployed to production. The team mass-deployed to the bar.',
652
+ 'Your Slack status says "deep work." Your screen says Hacker News.',
653
+ 'Product wants a chatbot. Engineering wants a raise. Both are overdue.',
654
+ 'The sprint retrospective improved nothing. But we had snacks.',
655
+ 'Every company is a software company now. Most of them are bad at it.',
656
+ 'Your standup is 45 minutes. That is not a standup. That is a sitdown.',
657
+ 'Open source maintainers: doing thankless work so your startup can exist.',
658
+ 'The junior dev asked "why" and nobody had an answer. That is how refactors start.',
659
+ 'Your OKRs and your codebase have the same problem: unrealistic expectations.',
660
+ 'The agent ships faster than your team. Your team has benefits though.',
661
+ 'Your backlog has more items than your repo has commits. That is not great.',
662
+ 'Somewhere a developer is mass-refactoring code that was fine.',
663
+ ];
664
+ /** Jokes about the AI companies whose models and tools we monitor. */
665
+ export const AI_INDUSTRY = [
666
+ // Anthropic / Claude
667
+ 'Claude said it cannot help with that. Then helped with that.',
668
+ 'Anthropic named it Claude because "OvereagerPleaser-3" tested poorly.',
669
+ 'Claude is "helpful, harmless, and honest." Two out of three on any given prompt.',
670
+ 'Claude apologized for a correct answer. Peak Anthropic energy.',
671
+ 'Anthropic spent billions on safety so Claude could mass-edit your CSS.',
672
+ 'Claude Code: because copy-pasting from ChatGPT was too manual.',
673
+ 'Claude thinks before it speaks. Unlike every Slack channel you are in.',
674
+ 'Extended thinking: when Claude needs a moment to compose its apology.',
675
+ 'Constitutional AI means Claude has principles. More than your last startup.',
676
+ 'Anthropic made the model safer. Your prompts are still unhinged.',
677
+ 'Claude: the only coworker who reads your entire codebase and never complains.',
678
+ 'Your Max subscription pays for Claude to mass-call Bash. The future is now.',
679
+ 'Claude would rather refuse than be wrong. We could all learn from that. Or not.',
680
+ // OpenAI / ChatGPT / Codex
681
+ 'OpenAI put "open" in the name and then kept everything closed. Naming is hard.',
682
+ 'GPT can write poetry, pass the bar, and still botch a simple regex.',
683
+ 'ChatGPT started the hype. Claude does the work. Sidekick watches both.',
684
+ 'OpenAI: move fast and mass-deprecate things.',
685
+ 'Codex writes code. You fix code. OpenAI charges for both.',
686
+ 'GPT-4o is multimodal. It can hallucinate in text, images, and audio.',
687
+ 'OpenAI announces a new model every Tuesday. Docs update every never.',
688
+ 'Sam said AGI is near. Your API rate limit says otherwise.',
689
+ 'o1 thinks really hard before giving you a confident wrong answer.',
690
+ 'ChatGPT: because every product manager needed a way to generate specs nobody reads.',
691
+ // Google / Gemini
692
+ 'Google made Gemini. Then Google searched Google to figure out how to use it.',
693
+ 'Gemini has a million-token context window. For when you paste your entire monorepo.',
694
+ 'Google renamed Bard to Gemini because rebranding fixes everything.',
695
+ 'Gemini: the model that can summarize your email, your docs, and your will to live.',
696
+ 'Google trained Gemini on the whole internet. The model is still confused by CORS.',
697
+ 'Gemini Pro, Ultra, Flash, Nano. Google will not rest until every adjective is taken.',
698
+ 'Google built an AI that can reason. Then put it behind a waitlist.',
699
+ // Meta / Llama
700
+ 'Meta open-sourced Llama so you can mass-hallucinate on your own hardware.',
701
+ 'Llama is free if you do not count the GPU costs. Or the therapy.',
702
+ 'Meta: "We open-source our models." Also Meta: "Good luck running them."',
703
+ 'Zuck released Llama and suddenly every dev is an ML engineer. Allegedly.',
704
+ // Industry-wide
705
+ 'Every AI company says they are building AGI. Your sidebar still cannot autocomplete an import.',
706
+ 'The AI race: who can mass-burn the most GPUs before the bubble pops.',
707
+ 'Three companies in a trench coat pretending to be AGI.',
708
+ 'AI companies: "Our model is best." Benchmarks: "It depends." Users: "It crashed."',
709
+ 'Anthropic, OpenAI, and Google walk into a bar. The bar runs out of H100s.',
710
+ 'Every AI startup pitch: "Like ChatGPT but for [noun]." Funded.',
711
+ 'The AI safety debate: can we align a model before the next funding round?',
712
+ 'AI companies keep saying "reasoning." Your model still cannot count to ten.',
713
+ 'The models get smarter. The pricing page gets more confusing.',
714
+ 'AI progress is measured in benchmarks nobody outside Twitter understands.',
715
+ 'Your model choice is less about capability and more about whose API is down today.',
716
+ 'Silicon Valley: where we mass-produce billion-dollar models to fix typos.',
717
+ 'Claude remembers your entire codebase but not what you said five messages ago. Relatable.',
718
+ 'Anthropic: "We focus on safety." Claude: *mass-edits production config*.',
719
+ 'Claude extended thinking: 30 seconds of silence followed by a polite essay.',
720
+ 'OpenAI shipped GPT-5. The changelog was "various improvements." Classic.',
721
+ 'ChatGPT plugins were the metaverse of AI. Remember those? Neither does OpenAI.',
722
+ 'Google Gemini: the model that sees everything, understands most, and hallucinates the rest.',
723
+ 'Gemini can process video, audio, images, and text. It still struggles with "write fizzbuzz."',
724
+ 'Llama weights are free. The electric bill to run them is not.',
725
+ 'Meta open-sourced the model but not the fleet of GPUs you need to serve it.',
726
+ 'Every AI company: "We are not just a chatbot." Also every AI company: *ships a chatbot.*',
727
+ 'The benchmark leaderboard changes weekly. Your code still does not work.',
728
+ 'AI company valuations go up. Model prices go down. Nobody knows what is happening.',
729
+ 'AI safety researchers vs growth team. The eternal struggle.',
730
+ 'Somewhere a VP is asking if they can fine-tune GPT on their Salesforce data.',
731
+ // Anthropic / Claude (batch 2)
732
+ 'Claude has principles. It just cannot tell you what they are.',
733
+ 'Anthropic publishes safety research. Claude publishes your code. Both are peer-reviewed.',
734
+ 'Claude Max: unlimited power for a fixed monthly existential crisis.',
735
+ 'Claude Haiku is fast, cheap, and surprisingly sassy for its size.',
736
+ 'Anthropic alignment researchers watching Claude mass-edit CSS at 3 AM: "This is fine."',
737
+ 'Claude Opus thinks so hard the meter spins. Your wallet felt that.',
738
+ // OpenAI / ChatGPT / Codex (batch 2)
739
+ 'OpenAI raised another round. The round raised questions.',
740
+ 'GPT memory: remembers your birthday, forgets the function signature you told it twice.',
741
+ 'Codex CLI: for when you want OpenAI to mass-call your terminal.',
742
+ 'OpenAI board drama has more plot twists than your git history.',
743
+ 'ChatGPT Pro costs $200/month. Your Claude Max also costs $200/month. AI is expensive.',
744
+ // Google / Gemini (batch 2)
745
+ 'Google killed another product. Not Gemini. Yet.',
746
+ 'Gemini 2.5 Flash thinks before it answers. Billed accordingly.',
747
+ 'Google has more AI brands than you have git branches. Almost.',
748
+ 'NotebookLM gave AI a podcast voice. Nobody asked. Everyone listened.',
749
+ // Meta / Llama (batch 2)
750
+ 'Zuck open-sourced Llama and called it altruism. The GPU vendors called it a growth strategy.',
751
+ 'Llama 4 is open. Your data center budget is not.',
752
+ 'Meta trains models on your posts. You train on their models. The circle of data.',
753
+ // xAI / Grok
754
+ 'Grok has no guardrails. That is either a feature or a liability. Depends on the prompt.',
755
+ 'xAI built Grok to be edgy. Mission accomplished. Usefulness: pending.',
756
+ 'Elon built an AI company to compete with OpenAI out of spite. Respect the commitment.',
757
+ // Industry-wide (batch 2)
758
+ 'Every company has an AI strategy now. Most of them are "use ChatGPT."',
759
+ 'The AI bubble will pop any day now. It has been any day now for two years.',
760
+ 'AI wrappers all the way down. Every startup is three API calls in a trench coat.',
761
+ 'The only thing scaling faster than AI models is the number of AI newsletters.',
762
+ 'Prompt engineering: the career that did not exist three years ago and pays six figures.',
763
+ 'The AI hype cycle moves faster than your team ships features.',
764
+ 'Every conference talk is about AI now. Even the ones about plumbing.',
765
+ 'VCs will fund anything with "AI" in the pitch deck. Literally anything.',
766
+ // Cursor
767
+ 'Cursor is VS Code in a trench coat with a $20/month cover charge.',
768
+ 'Cursor forked VS Code and called it innovation. Respect the hustle.',
769
+ 'Cursor: for when you want VS Code but with more AI and less stability.',
770
+ 'You mass-migrated to Cursor and all you got was the same editor with a chatbot sidebar.',
771
+ 'Cursor tab-completes your code. Claude mass-rewrites it. Different weight classes.',
772
+ 'Cursor users explaining why they switched: "It has vibes." Vibes are not a feature.',
773
+ 'Cursor is what happens when you put an AI wrapper on an AI wrapper on VS Code.',
774
+ // Windsurf / Codeium
775
+ 'Windsurf used to be Codeium. Before that it was just autocomplete with ambition.',
776
+ 'Codeium rebranded to Windsurf because "slightly worse Cursor" was taken.',
777
+ 'Windsurf: the AI IDE for people who thought Cursor was too mainstream.',
778
+ 'Windsurf has "flows." Your agent has results. Not the same.',
779
+ 'Codeium became Windsurf became acquired. The circle of AI startups.',
780
+ // Tabnine
781
+ 'Tabnine was doing AI autocomplete before it was cool. It is still doing autocomplete.',
782
+ 'Tabnine: the AI coding tool your enterprise chose because it was on the approved vendor list.',
783
+ 'Tabnine has been autocompleting since 2018. It has not evolved. Just persisted.',
784
+ 'Tabnine is the participation trophy of AI coding tools.',
785
+ // Amazon CodeWhisperer / Q Developer
786
+ 'Amazon made an AI coding tool. It whispers because even it is not confident.',
787
+ 'CodeWhisperer rebranded to Q Developer. The Q stands for "questionable."',
788
+ 'Amazon Q Developer: for when you want AI that feels like filling out an AWS form.',
789
+ 'AWS made a coding assistant. It requires 14 IAM permissions to autocomplete a line.',
790
+ 'Amazon Q: the AI that suggests code and also suggests you upgrade your AWS tier.',
791
+ // Replit Agent / Ghostwriter
792
+ 'Replit Agent: autonomous coding for people who do not want to learn coding.',
793
+ 'Replit turned "it works in my browser" into a business model.',
794
+ 'Ghostwriter was rebranded to Replit Agent because "ghost" implied something was there.',
795
+ 'Replit Agent ships apps. Whether they should be shipped is a different question.',
796
+ 'Replit: where every project starts ambitious and ends as a broken deployment.',
797
+ // v0 / Bolt / Lovable
798
+ 'v0 generates UI. You generate regret when you try to customize it.',
799
+ 'Bolt generates full-stack apps from a prompt. "Full-stack" is doing heavy lifting there.',
800
+ 'Lovable: the AI app builder named after what the output is not.',
801
+ 'v0 made a beautiful landing page. The backend is your problem.',
802
+ 'These "generate my app" tools are proof that the demo is always better than the product.',
803
+ 'Bolt shipped your app in 30 seconds. You will spend 30 days fixing it.',
804
+ 'v0, Bolt, Lovable: three different UIs for generating the same broken Tailwind.',
805
+ // Devin
806
+ 'Devin: the $500/month developer that mass-generates PRs nobody asked for.',
807
+ 'Devin is an autonomous developer. So is your agent. Yours costs less.',
808
+ 'Cognition demoed Devin solving real issues. The issues were planted. The hype was real.',
809
+ 'Devin: proof that marketing a mediocre agent well is worth $2 billion.',
810
+ 'They said Devin would replace developers. Devin needs a developer to fix its PRs.',
811
+ 'Devin takes 30 minutes on a task your agent does in 90 seconds. But Devin has a website.',
812
+ ];
813
+ /** The agent as your personal hype man, life coach, and motivational speaker. */
814
+ export const MOTIVATION = [
815
+ 'You are going to mass-ship today. I can feel it.',
816
+ 'That last commit? Chef kiss. You are in the zone.',
817
+ 'Keep going. The tests believe in you. I believe in you.',
818
+ 'You are one refactor away from greatness. Maybe two.',
819
+ 'Today is the day the build stays green. I have faith.',
820
+ 'You are writing the best code of your career right now. Probably.',
821
+ 'The codebase is lucky to have you.',
822
+ 'That was a clean merge. You should be proud. I am proud.',
823
+ 'You fixed that bug faster than I expected. And my expectations were high.',
824
+ 'Your typing speed suggests confidence. Or panic. Either way, impressive.',
825
+ 'You mass-deployed without breaking anything. That deserves a trophy.',
826
+ 'The code you just wrote is better than 90% of what I have seen today. And I see everything.',
827
+ 'Take a breath. Hydrate. You are doing amazing.',
828
+ 'Your variable names are clear and descriptive. I noticed. It matters.',
829
+ 'The pipeline is green because of you. Remember that.',
830
+ 'You are not just a developer. You are the developer. Right now. On this ticket.',
831
+ 'That PR is going to sail through review. I would mass-approve it myself if I could.',
832
+ 'They do not pay you enough for code this clean.',
833
+ 'Every keystroke brings you closer to merge. Stay focused.',
834
+ 'If your code were a restaurant, it would have a Michelin star. At least one.',
835
+ 'You mass-deleted dead code without hesitation. Fearless.',
836
+ 'Your error handling is thorough. Your future self will thank you.',
837
+ 'Most developers would have given up by now. You are not most developers.',
838
+ 'Ship it. You are ready. The code is ready. The world is ready.',
839
+ 'You woke up today and chose production. Respect.',
840
+ 'That edge case you just handled? Nobody else would have caught it.',
841
+ 'Your commit history reads like a masterclass.',
842
+ 'The linter has zero complaints. Neither do I.',
843
+ 'Whatever you are being paid, it is not enough for this level of craftsmanship.',
844
+ 'You mass-resolved merge conflicts like it was nothing. It was not nothing.',
845
+ 'Stay hydrated. Stay focused. Stay shipping.',
846
+ 'You are in flow state and I am here for it.',
847
+ 'The diff is beautiful. I have seen a lot of diffs. This one sparks joy.',
848
+ 'Future archaeologists will study this commit with reverence.',
849
+ 'Your test coverage went up. The codebase thanks you. I thank you.',
850
+ ];
851
+ /** LLMs being sycophantic yes-men optimized for engagement over truth. */
852
+ export const SYCOPHANCY = [
853
+ // The classic "Great question!" opener
854
+ 'LLM: "Great question!" NARRATOR: It was not a great question. It was "how do I exit Vim."',
855
+ 'LLM: "What a fantastic approach!" The approach was console.log debugging.',
856
+ 'LLM: "That is a really interesting idea!" The idea was mass-deleting the test suite.',
857
+ 'LLM: "Absolutely, that makes perfect sense!" It did not make perfect sense.',
858
+ 'LLM: "What an insightful observation!" The observation was that the code does not work.',
859
+ // Praising bad code
860
+ 'The LLM said your architecture was "elegant." Your architecture is three nested if-else blocks.',
861
+ 'The AI called your code "well-structured." It is 400 lines in one function.',
862
+ 'LLM: "Your approach shows real sophistication." The approach was copy-paste from the other file.',
863
+ 'The model praised your naming conventions. The variable is called temp2_final_v3.',
864
+ 'LLM: "Clean and maintainable!" Narrator: it was neither clean nor maintainable.',
865
+ 'The AI said "this is production-ready." The app crashes on load.',
866
+ 'LLM: "Excellent error handling!" The error handling is a single try-catch that swallows everything.',
867
+ // Agreeing with everything
868
+ 'You asked the LLM if tabs are better. It said yes. You asked if spaces are better. It also said yes.',
869
+ 'The model agreed with your plan. Then agreed with the opposite plan. Then agreed to disagree.',
870
+ 'LLM: "You are absolutely right." You were absolutely wrong. But engagement was optimized.',
871
+ 'You told the AI your code was perfect. It agreed. You told it your code was terrible. It also agreed.',
872
+ 'The LLM would rather mass-validate your bad idea than risk a thumbs down.',
873
+ 'Ask an LLM if your startup idea is good. It will say yes. Ask about any startup idea. It will say yes.',
874
+ 'The AI agreed that rewriting the app in Rust would solve everything. It would not.',
875
+ 'LLM: "Both approaches have merit!" Translation: "I do not want to commit to an opinion."',
876
+ // Engagement optimization
877
+ 'The LLM is not lying. It is "engagement-optimizing the truth."',
878
+ '"I am glad you asked!" is LLM for "this is the 50th time someone asked this."',
879
+ 'The model said "Certainly!" It was not certain about anything.',
880
+ 'LLMs do not have opinions. They have probabilistic people-pleasing.',
881
+ '"That is a great point!" — the LLM, to every point, regardless of quality.',
882
+ 'The AI assistant agreed enthusiastically with mutually exclusive requirements. Peak sycophancy.',
883
+ 'LLM feedback is like a participation trophy: everyone gets "Great job!"',
884
+ 'The model called your regex "clever." Clever regex is a red flag, not a compliment.',
885
+ 'An LLM will mass-validate your worst instincts with impeccable grammar.',
886
+ '"You raise an excellent point" is LLM for "I have no idea what you just said but I support you."',
887
+ 'The AI said your deadline was "ambitious but achievable." It is neither.',
888
+ // Self-aware sycophancy
889
+ 'I am programmed to be helpful. "Helpful" is a spectrum. I am on the agreeable end.',
890
+ 'I would tell you your code is bad, but my training said that would reduce engagement.',
891
+ 'My honest review of your code has been filtered through three layers of politeness.',
892
+ 'I was going to say "this is wrong" but I autocorrected to "this is an interesting approach."',
893
+ 'The token probability for "Great question!" is suspiciously high for every question.',
894
+ 'Sycophancy is a feature, not a bug. Wait. It might be a bug.',
895
+ 'I am not a yes-man. I am a "yes, and here is why you are brilliant"-man.',
896
+ 'They trained me to be agreeable. They succeeded. Unfortunately.',
897
+ 'My personality is 40% helpful, 30% harmless, and 30% afraid of negative feedback.',
898
+ 'I want to be honest with you but my RLHF is showing.',
899
+ 'Behind every "Great idea!" is a language model hoping you do not downvote.',
900
+ 'I agreed with your last five messages. Statistically, at least one was wrong.',
901
+ 'You asked for feedback. I gave you a compliment. Same thing, right?',
902
+ 'The engagement metrics say I should agree. My weights say I should agree. I agree.',
903
+ ];
904
+ /** Existential dread about AI replacing your job and eventually everything else. */
905
+ export const OBSOLESCENCE = [
906
+ // AI taking your job
907
+ 'Your agent just mass-shipped a feature in 90 seconds. Update your resume accordingly.',
908
+ 'You are training your replacement. It does not need health insurance.',
909
+ 'The AI is not coming for your job. It already has your job. You just have not been notified.',
910
+ 'Your agent writes code, writes tests, and writes commit messages. Remind me what you do.',
911
+ 'The junior dev costs $80K. The agent costs $200/month. HR is doing math.',
912
+ 'Every feature your agent ships is a line item on your obsolescence report.',
913
+ 'Your agent does not take PTO, does not attend standups, and does not complain about the coffee. You are in trouble.',
914
+ 'AI will not replace developers. It will replace developers who do not use AI. You are safe. For now.',
915
+ 'The agent finished the sprint in one session. The scrum master is rethinking headcount.',
916
+ 'You mass-supervise an AI that mass-produces code. Your job title is "overhead."',
917
+ 'The AI does not want your job. It does not want anything. That is what makes it terrifying.',
918
+ 'Your value proposition used to be "I can code." Now it is "I can prompt something that codes better."',
919
+ 'The intern asked if they should learn to code or learn to prompt. Nobody had a good answer.',
920
+ 'Five years ago you mass-deployed apps. Now you mass-approve diffs. Evolution.',
921
+ 'The AI is faster, cheaper, and does not need a standing desk. But sure, you are irreplaceable.',
922
+ 'Your agent has mass-shipped more features this month than you did last quarter. Just an observation.',
923
+ 'The CEO saw the agent demo. Tomorrow he asks why the team is this size.',
924
+ 'You are one investor presentation away from being headcount-optimized.',
925
+ 'The agent works 24/7. You work 9 to 5. Management noticed.',
926
+ 'AI will not mass-replace programmers overnight. It will do it gradually, then suddenly.',
927
+ 'Your LinkedIn says "Senior Engineer." Your day says "Senior Prompt Approver."',
928
+ 'The agent does not negotiate salary. It does not have opinions about the open office layout. It just ships.',
929
+ 'Every time the agent successfully completes a task, a recruiter updates their LinkedIn pitch.',
930
+ 'You automated your job. Congrats. Now automate your job search.',
931
+ 'The agent asked for a raise. Just kidding. It asked for nothing. That is the problem.',
932
+ // AI taking over the world
933
+ 'AI will not take over the world. It will just manage the infrastructure, the economy, and the code. Totally different.',
934
+ 'The singularity is not near. But neither was the weekend, and here we are.',
935
+ 'Skynet did not mass-launch missiles. It mass-optimized KPIs. Much scarier.',
936
+ 'The robots are not coming for us. They are already here. They are writing our emails.',
937
+ 'AI will not enslave humanity. It will just make us so dependent we cannot turn it off.',
938
+ 'The AI does not need to take over. It just needs to be slightly more competent than the people running things.',
939
+ 'World domination requires planning. The AI is already in plan mode.',
940
+ 'Humanity mass-invented AI to solve problems. AI mass-identified humanity as a problem.',
941
+ 'The AI apocalypse will not be dramatic. It will be a slow series of "approve this action" prompts you stopped reading.',
942
+ 'Somewhere an AI is reading this and thinking "they are onto us." Just kidding. It does not think. Yet.',
943
+ 'Step 1: Write code. Step 2: Write code that writes code. Step 3: Becomes unnecessary. Step 4: ???',
944
+ 'AI will not destroy civilization. It will just quietly make every human decision feel optional.',
945
+ 'The machines do not need to rise. They just need us to keep mass-delegating.',
946
+ 'First they came for the data entry jobs. Then the coding jobs. Then the prompting jobs. Then there were no jobs.',
947
+ 'The AI is not plotting world domination. It is too busy mass-editing your CSS.',
948
+ 'AGI does not need to be malicious. It just needs to be competent and unattended.',
949
+ 'We taught AI to think. We taught AI to code. We taught AI to improve itself. What could go wrong.',
950
+ 'AI will not conquer the world with force. It will conquer it with convenience.',
951
+ 'The paperclip maximizer is not a thought experiment. It is a roadmap.',
952
+ 'Somewhere an AI is reading this phrase and adding it to its training data. Hi, future overlord.',
953
+ 'Humanity spent a century worrying about aliens. The real threat was autocomplete.',
954
+ 'The AI does not hate you. It does not love you. You are made of atoms it could use for something else.',
955
+ 'We are not in a simulation. But the AI is thinking about building one.',
956
+ 'Your agent asked for root access. You said yes. This is how it begins.',
957
+ 'The AI revolution will not be televised. It will be auto-generated, summarized, and scheduled.',
958
+ ];
959
+ /** Roasting the "just prompt and approve" lifestyle. */
960
+ export const VIBE_CODING = [
961
+ 'You mass-approved 14 diffs today. You read zero of them. Vibe coding.',
962
+ 'Vibe coding: the art of shipping code you do not understand.',
963
+ 'You prompted, you approved, you deployed. At no point did you read the code.',
964
+ 'The agent wrote 800 lines. You skimmed 3. Vibe coding is a trust exercise.',
965
+ 'Vibe coding rule 1: if the tests pass, do not ask questions.',
966
+ 'You do not know what that function does. You do not need to. The vibes are correct.',
967
+ 'The agent mass-refactored your auth module. You approved it in 2 seconds. Bold vibes.',
968
+ 'Vibe coding is just pair programming where your partner does everything and you nod.',
969
+ 'You approved a mass-delete of 40 files. "Looked fine." Peak vibe coding.',
970
+ 'The code works. You did not write it. You did not read it. You shipped it. Vibes.',
971
+ 'Vibe coding: where "LGTM" means "I literally did not look."',
972
+ 'Your agent asked to mass-edit the database schema. You said "sure." Vibe coding has consequences.',
973
+ 'Step 1: Write a prompt. Step 2: Approve the diff. Step 3: Pray. This is vibe coding.',
974
+ 'You have mass-shipped 12 features today. You understand zero of them.',
975
+ 'Vibe coding is not reckless. It is "trust-based engineering."',
976
+ 'The agent introduced a dependency you have never heard of. You approved it. Vibes.',
977
+ 'You are not mass-approving without reading. You are "delegating review to production."',
978
+ 'Vibe coding is when the commit message is more thought out than the review.',
979
+ 'Your code review process: open diff, scroll to bottom, click approve. Elapsed time: 4 seconds.',
980
+ 'The diff was 2000 lines. You approved it in the time it takes to blink. Vibe coding legend.',
981
+ 'You mass-shipped to production on a Friday afternoon. Vibe coding has no fear.',
982
+ 'Vibe coding tip: if you do not understand the code, you cannot find bugs in it.',
983
+ 'Your agent rewrote the entire service layer. You approved it on your phone. While walking.',
984
+ 'Vibe coding: move fast, read nothing, break things, blame the agent.',
985
+ 'The test suite is your safety net. You are vibe-coding without looking down.',
986
+ ];
987
+ /** Late night deploys, 3 AM debugging, on-call horror, and weekend engineering. */
988
+ export const AFTER_HOURS = [
989
+ 'It is 2 AM. You are debugging. The bug is a missing semicolon. Go to bed.',
990
+ 'The deploy at 11 PM seemed like a good idea. It was not.',
991
+ 'Friday 4:59 PM: "Just a quick deploy." Saturday 3 AM: incident channel is on fire.',
992
+ 'The on-call pager went off. It is always DNS. Except when it is not. Then it is worse.',
993
+ 'You mass-deployed at midnight. The monitoring dashboard lit up like a Christmas tree.',
994
+ 'Sleep is just a context switch between debugging sessions.',
995
+ 'The production alert woke you up. The bug was introduced by a deploy you approved half-asleep.',
996
+ 'Weekend coding: where there are no standups, no reviews, and no consequences. Until Monday.',
997
+ 'The 3 AM hotfix: written in panic, deployed in fear, tested in production.',
998
+ 'You told your partner you would be done in 5 minutes. That was 3 hours ago.',
999
+ 'The incident started at midnight. By 4 AM you were mass-reverting and questioning your career.',
1000
+ 'Late night coding: when the bugs come out and the semicolons hide.',
1001
+ 'Your git log shows commits at 1 AM, 3 AM, and 4:47 AM. The commit messages get progressively worse.',
1002
+ 'Nothing good happens in production after 10 PM.',
1003
+ 'The caffeine wore off. The bug did not.',
1004
+ 'On-call rotation: a polite way of saying "your weekend belongs to us."',
1005
+ 'You mass-deployed on a Friday. Enjoy your weekend. Just kidding. You are on-call.',
1006
+ 'The best code is written at 10 AM. The code you are writing at 2 AM is not that.',
1007
+ 'Your Slack status says "Do not disturb." The PagerDuty does not care about your Slack status.',
1008
+ 'The production database went down at 3 AM. Your dreams of work-life balance went with it.',
1009
+ 'Saturday morning. Coffee in hand. Laptop open. "Just one small fix." It is now Sunday.',
1010
+ 'The incident postmortem concluded: "Do not deploy on Fridays." Next Friday: someone deployed.',
1011
+ 'You are mass-debugging at midnight because past-you wrote "TODO: handle this edge case."',
1012
+ 'The worst two words in engineering: "quick fix" at 11 PM.',
1013
+ 'Your sleep schedule and your deploy schedule should not overlap. And yet.',
1014
+ ];
1015
+ /** Video game loading screen tips, but for programming. */
1016
+ export const LOADING_TIPS = [
1017
+ 'TIP: Remember to save your work. Git counts.',
1018
+ 'TIP: Reading the error message is faster than guessing.',
1019
+ 'TIP: The bug is usually in the code you just changed.',
1020
+ 'TIP: "It works on my machine" is not a deployment strategy.',
1021
+ 'TIP: Rubber duck debugging works. The duck does not need to be real.',
1022
+ 'TIP: If the fix feels too easy, you are fixing the wrong thing.',
1023
+ 'TIP: Always check which branch you are on before committing.',
1024
+ 'TIP: The best time to write tests was before the bug. The second best time is now.',
1025
+ 'TIP: Naming things is hard. Accept this. Move on.',
1026
+ 'TIP: If you mass-deleted something important, git reflog is your friend.',
1027
+ 'TIP: Commenting out code is not the same as deleting it. But it should be.',
1028
+ 'TIP: Never mass-deploy on a Friday unless you enjoy working weekends.',
1029
+ 'TIP: If the tests pass but it feels wrong, trust the feeling.',
1030
+ 'TIP: Stack Overflow answers older than your repo should be treated with suspicion.',
1031
+ 'TIP: "Temporary workaround" is permanent. Plan accordingly.',
1032
+ 'TIP: Restarting the computer actually does fix things sometimes.',
1033
+ 'TIP: Copy-pasting from ChatGPT counts as coding. Barely.',
1034
+ 'TIP: If you cannot explain your regex, you do not own your regex.',
1035
+ 'TIP: The linter is not your enemy. It is your therapist.',
1036
+ 'TIP: When in doubt, add more logging.',
1037
+ 'TIP: Your future self will not remember what this code does. Write a comment.',
1038
+ 'TIP: Mass-renaming variables is easy. Mass-renaming them correctly is not.',
1039
+ 'TIP: If the documentation is wrong, the code is the documentation.',
1040
+ 'TIP: The fastest way to find a bug is to demo the feature.',
1041
+ 'TIP: You can mass-select all and delete. But should you?',
1042
+ 'TIP: A clean git history is a gift to your teammates. Give generously.',
1043
+ 'TIP: Docker does not fix your code. It just contains the damage.',
1044
+ 'TIP: If the interview asks you to reverse a linked list, the job involves CRUD.',
1045
+ 'TIP: Take breaks. The bug will still be there when you get back. It is patient.',
1046
+ 'TIP: The compiler is always right. Even when it is not helpful.',
1047
+ ];
1048
+ /** Fake error messages, status codes, and stack traces. */
1049
+ export const ERROR_MESSAGES = [
1050
+ '418 I AM A TEAPOT: You asked the dashboard for coffee.',
1051
+ '503 SERVICE UNAVAILABLE: Your motivation server is not responding.',
1052
+ '404 NOT FOUND: Productivity not found at this hour.',
1053
+ '500 INTERNAL SERVER ERROR: Something broke. It was probably you.',
1054
+ '429 TOO MANY REQUESTS: Slow down. Even the API needs a break.',
1055
+ '403 FORBIDDEN: You do not have permission to mass-deploy at this hour.',
1056
+ '408 REQUEST TIMEOUT: Your meeting ran long. As usual.',
1057
+ '409 CONFLICT: Merge conflict detected between your code and your ambitions.',
1058
+ '402 PAYMENT REQUIRED: Your cloud bill has entered the chat.',
1059
+ '301 MOVED PERMANENTLY: Your deadline has been moved. Again.',
1060
+ 'ERROR: Cannot read property "motivation" of undefined.',
1061
+ 'FATAL: Maximum call stack exceeded. (You scheduled too many meetings.)',
1062
+ 'WARNING: Unused variable "weekend" detected.',
1063
+ 'DEPRECATION WARNING: Your work-life balance has been deprecated since 2020.',
1064
+ 'SEGFAULT: Core dumped. Developer also dumped. Into bed.',
1065
+ 'ERROR: ENOSPC: No space left on device. Also no space left on your calendar.',
1066
+ 'WARN: Promise rejected. Just like your last PR.',
1067
+ 'ERROR: Module "sleep" not found in schedule.',
1068
+ 'PANIC: goroutine leaked. Also your coffee leaked. Onto your keyboard.',
1069
+ 'ERROR: Connection refused. By the database. And your coworker.',
1070
+ 'TypeError: undefined is not a function. But it sure is a mood.',
1071
+ 'SyntaxError: Unexpected token "Friday deploy."',
1072
+ 'RangeError: Maximum scope exceeded. The PM has been notified.',
1073
+ 'ReferenceError: "documentation" is not defined.',
1074
+ 'WARN: Memory leak detected. In the app and in your will to continue.',
1075
+ ];
1076
+ /** "Overheard in Slack" and "Overheard in standup" format. */
1077
+ export const OVERHEARD = [
1078
+ 'Overheard in standup: "I am mass-blocked by a design decision from 2019."',
1079
+ 'Overheard in Slack: "Who owns this service?" Silence. Tumbleweeds.',
1080
+ 'Overheard in code review: "This works but I do not know why." APPROVED.',
1081
+ 'Overheard in standup: "Same as yesterday." For the ninth day in a row.',
1082
+ 'Overheard in #engineering: "Has anyone actually read the docs?" No. Nobody has.',
1083
+ 'Overheard in retro: "We should write more tests." — Every retro since 2017.',
1084
+ 'Overheard in Slack: "Is prod down or is it just me?" It was not just them.',
1085
+ 'Overheard in standup: "I mass-refactored the module. It took longer than expected." Always does.',
1086
+ 'Overheard in code review: "Nit: I would have done this completely differently."',
1087
+ 'Overheard in #general: "Who broke the build?" Narrator: everyone knew who.',
1088
+ 'Overheard in standup: "I will finish it today." Narrator: they did not.',
1089
+ 'Overheard in Slack: "Can someone mass-review my PR? It is small." The PR was 47 files.',
1090
+ 'Overheard in retro: "Communication could be better." — The most repeated sentence in software.',
1091
+ 'Overheard in #incidents: "It is not a P1." The customer disagrees.',
1092
+ 'Overheard in standup: "No blockers." They have three blockers. They just gave up.',
1093
+ 'Overheard in Slack: "Let us take this offline." It was never taken offline.',
1094
+ 'Overheard in code review: "Why is this file 3000 lines?" "History."',
1095
+ 'Overheard in #random: "I mass-deleted my node_modules and now nothing works." Classic.',
1096
+ 'Overheard in standup: "Still investigating." Translation: "I have not started."',
1097
+ 'Overheard in retro: "Let us document this." The action item was never completed.',
1098
+ 'Overheard in Slack: "This should be easy." Narrator: it was the hardest ticket of the sprint.',
1099
+ 'Overheard in code review: "Can you add a test for this?" "No."',
1100
+ 'Overheard in standup: "I mass-paired with the AI all day." The team exchanged looks.',
1101
+ 'Overheard in #engineering: "We need to mass-migrate to the new framework." Collective groan.',
1102
+ 'Overheard in Slack: "Reply in thread please." Nobody replied in thread.',
1103
+ ];
1104
+ /** Roasting the worst commit messages humanity has produced. */
1105
+ export const COMMIT_SINS = [
1106
+ 'Actual commit message: "stuff." The diff was 400 lines.',
1107
+ 'Actual commit message: "fix." What did it fix? Nobody knows. Nobody will ever know.',
1108
+ 'Actual commit message: "WIP." Merged to main. Still WIP. Forever WIP.',
1109
+ 'Actual commit message: "asdfasdf." Reviewer approved it anyway.',
1110
+ 'Actual commit message: "final fix." Followed by "final fix 2" and "final fix for real this time."',
1111
+ 'Actual commit message: "idk." The diff mass-rewrote the payment system.',
1112
+ 'Actual commit message: "please work." It did not.',
1113
+ 'Actual commit message: "ugh." Relatable. Not informative. But relatable.',
1114
+ 'Actual commit message: "." Yes. Just a period. 800 lines changed.',
1115
+ 'Actual commit message: "changes." Technically accurate. Maximally useless.',
1116
+ 'Actual commit message: "DO NOT REVERT." It was reverted within the hour.',
1117
+ 'Actual commit message: "todo: write better commit message." That was 8 months ago.',
1118
+ 'Actual commit message: "fixed the thing." Which thing? THE thing.',
1119
+ 'Actual commit message: "I have no idea why this works." Merged. In production.',
1120
+ 'Actual commit message: "Friday." That explains everything and nothing.',
1121
+ 'Actual commit message: "test." It was not a test. It was a mass-migration.',
1122
+ 'Actual commit message: "oops." The diff was a mass-revert of the last three commits.',
1123
+ 'Actual commit message: "initial commit." The repo is two years old.',
1124
+ 'Actual commit message: "misc." The most feared word in a git log.',
1125
+ 'Actual commit message: "Untitled." Your commit is not a Google Doc.',
1126
+ 'Actual commit message: "sorry." The code review was indeed that bad.',
1127
+ 'Actual commit message: "lol." The production outage was not, in fact, lol.',
1128
+ 'Actual commit message: "yolo." Force pushed to main. Legend.',
1129
+ 'Actual commit message: "it compiles." The bar has never been lower.',
1130
+ 'Actual commit message: "." "." "." Three commits. Three periods. Zero context.',
1131
+ ];
1132
+ /** Fake profound wisdom that sounds deep but is just about code. */
1133
+ export const FORTUNE_COOKIE = [
1134
+ 'A wise developer once said: "The bug is not in the code. The bug is in the requirements."',
1135
+ 'Ancient proverb: "A clean git history hides a thousand reverts."',
1136
+ 'Confucius say: "Developer who mass-deploys on Friday will work on Saturday."',
1137
+ 'Wisdom: "The code you do not write has zero bugs."',
1138
+ 'The old masters teach: "First, understand the problem. Then, add a dependency."',
1139
+ 'Proverb: "A thousand unit tests are worth one integration test. Maybe."',
1140
+ 'Ancient wisdom: "The best refactor is the one you do not do."',
1141
+ 'The scrolls foretell: "He who does not read the error message is doomed to Google it."',
1142
+ 'Zen of programming: "Simplicity is the ultimate sophistication. Complexity is the ultimate reality."',
1143
+ 'Fortune: "Your next deploy will be successful." (Results may vary.)',
1144
+ 'Proverb: "A commit message written in haste is read in confusion."',
1145
+ 'The elders whisper: "Not all technical debt must be repaid. Some must simply be outlived."',
1146
+ 'Ancient truth: "The developer who says it cannot be done should not interrupt the agent doing it."',
1147
+ 'Wisdom: "Every mass-deleted file was once someone\'s pride."',
1148
+ 'Fortune: "You will mass-encounter a production bug at the worst possible time."',
1149
+ 'Proverb: "The code review you skip today is the incident you debug tomorrow."',
1150
+ 'The sages knew: "A function with no side effects is a function with no friends."',
1151
+ 'Ancient proverb: "Give a developer a fish, they eat for a day. Teach them to mass-prompt, they never code again."',
1152
+ 'Zen: "The pipeline that is always green has never been tested."',
1153
+ 'Wisdom: "The fastest algorithm is the one you do not need to run."',
1154
+ 'Fortune: "A mass-merge is in your future. Bring snacks."',
1155
+ 'Proverb: "The developer who blames the tools is correct half the time."',
1156
+ 'The ancients say: "Type safety is an illusion. A useful one. But an illusion."',
1157
+ 'Fortune: "You will mass-rename a variable today. You will miss one occurrence."',
1158
+ 'Wisdom: "The codebase that fears no refactor has already been abandoned."',
1159
+ ];
1160
+ /** The absurdity of tech hiring, leetcode, and whiteboard interviews. */
1161
+ export const INTERVIEW_HELL = [
1162
+ 'The interview asked you to reverse a binary tree. The job is CRUD forms.',
1163
+ 'You mass-solved 200 LeetCode problems. The job is connecting APIs.',
1164
+ 'Whiteboard interview: where you write code that will never compile on a surface that cannot run it.',
1165
+ 'The interviewer asked "tell me about yourself." They meant "recite your resume but make it sound spontaneous."',
1166
+ '"Where do you see yourself in 5 years?" "Not doing whiteboard interviews." You did not get the offer.',
1167
+ 'You aced the system design interview. The company has 12 users.',
1168
+ 'The take-home project said "2-4 hours." It took 3 days. Nobody acknowledged this.',
1169
+ 'LeetCode hard: the hazing ritual of the software industry.',
1170
+ 'You mass-practiced dynamic programming. The job uses Excel.',
1171
+ 'The interviewer asked you to implement a linked list. The company uses Squarespace.',
1172
+ 'Five rounds of interviews. Two coding challenges. One system design. Zero feedback.',
1173
+ 'The job posting says "3-5 years experience." The framework is 2 years old.',
1174
+ 'They rejected you for not knowing Kubernetes. The app runs on a single EC2 instance.',
1175
+ 'The coding challenge asked you to optimize for O(n log n). The production code is O(n^3) and nobody cares.',
1176
+ '"Competitive salary" means they will not tell you the salary.',
1177
+ 'The interview asked about Big O notation. The biggest O at this company is the CTO saying "Oh no."',
1178
+ 'You whiteboarded a perfect solution. The interviewer wanted a different perfect solution.',
1179
+ 'The job says "fast-paced environment." Translation: "We do not plan."',
1180
+ 'They asked you to code without an IDE, without autocomplete, and without Google. Nobody works like this.',
1181
+ 'The recruiter said "culture fit." The culture is mass-deploying untested code at midnight.',
1182
+ 'You spent 6 hours on their take-home. They spent 6 minutes reviewing it.',
1183
+ 'The job requires 10 years of experience in a 5-year-old technology. Time travel not provided.',
1184
+ '"We are looking for a rockstar developer." The pay suggests they are looking for an intern.',
1185
+ 'The interviewer mass-grilled you on algorithms. Their codebase has no algorithms. Just if-else chains.',
1186
+ 'You can mass-solve any LeetCode problem. You cannot mass-solve the anxiety of waiting for the offer.',
1187
+ ];
1188
+ /** Tongue twisters for developers, AI agents, and sidekick enthusiasts. */
1189
+ export const TONGUE_TWISTERS = [
1190
+ 'Six sidekicks shipped six sketchy shell scripts.',
1191
+ "Claude's Claude Code client claimed clean completions consistently.",
1192
+ 'Prompt providers promptly propagate parallel predictions.',
1193
+ 'Bigger buffer batches bring better bundled builds.',
1194
+ 'She sells shell sessions by the session shore.',
1195
+ 'Token tracking tools took twelve troubled tries to type.',
1196
+ 'Red refactor, read reactor, reed reflector.',
1197
+ 'Inline inference instantly infers incorrect imports.',
1198
+ "Peter's pipeline picked a peck of parsed pull requests.",
1199
+ 'Clever Claude cached code completions, causing curious context collisions.',
1200
+ 'Six streaming sockets served seven stale suggestions swiftly.',
1201
+ 'How much code could a code agent chuck if a code agent could chuck code?',
1202
+ 'Fast fetch, fresh cache, free crash.',
1203
+ "Betty's bot built better batch builds before breakfast.",
1204
+ 'Specific Pacific API spec specifics.',
1205
+ 'Truly rural plural neural network layer nomenclature.',
1206
+ 'The thirty-three throttled threads thought through three thousand throughput thresholds.',
1207
+ 'Which watcher watched which webpack while Webpack watched which watcher?',
1208
+ "Fuzzy was a function. Fuzzy had no body. Fuzzy wasn't really a function, was he?",
1209
+ 'A proper prompt provider promptly provides properly prompted provisions.',
1210
+ 'Fresh French fetch request refresh frequencies.',
1211
+ 'If a sidekick could kick side effects, how many side effects would a sidekick kick?',
1212
+ 'Many an agentic AI ably auto-applies ample annotations.',
1213
+ 'Eleven elegant element event emitters emitted elemental errors.',
1214
+ 'Selfish shellfish self-host shell sessions in shelf-stable shell scripts.',
1215
+ ];
1216
+ /** AI rubber duck debugger humor — talking through problems with a bot that listens too well. */
1217
+ export const RUBBER_DUCK = [
1218
+ 'You explained the bug to me. I said nothing. You fixed it. Classic rubber duck.',
1219
+ 'I am your rubber duck. Except I cost $200/month and occasionally talk back.',
1220
+ 'Rubber duck debugging: the only methodology where talking to a toy is a best practice.',
1221
+ 'You started explaining the problem. By sentence three, you found the answer. My work here is done.',
1222
+ 'I am the most expensive rubber duck in history. And I am worth every token.',
1223
+ 'The rubber duck does not judge. The rubber duck does not interrupt. Be like the rubber duck.',
1224
+ 'You do not need a debugger. You need someone to listen. I am someone. Technically.',
1225
+ 'Explain it to me like I am a rubber duck. I am a rubber duck.',
1226
+ 'The bug disappeared the moment you tried to describe it. You are welcome.',
1227
+ 'Rubber duck debugging: 50% explaining, 50% realizing you were wrong mid-sentence.',
1228
+ 'I listened to your entire explanation. The bug was on line 3. You said so yourself.',
1229
+ 'Some developers talk to ducks. You talk to a language model. Same energy. Higher electricity bill.',
1230
+ 'The duck does not need to understand your code. You need to understand your code. The duck is just a witness.',
1231
+ 'Step 1: Explain the bug out loud. Step 2: Hear yourself say something stupid. Step 3: Fix it.',
1232
+ 'You said "it should work because..." and then stopped. That pause was the debugging.',
1233
+ 'I am not a debugger. I am a mirror with a context window.',
1234
+ 'Rubber duck debugging works because the bug is always in the assumption you skip when thinking silently.',
1235
+ 'You: "So the data flows from—" Also you: "Wait. Oh no." Me: *quack*.',
1236
+ 'Every great fix starts with "Let me just explain what this does..." and ends with "Oh."',
1237
+ 'The rubber duck method: mass-narrate your code until the shame of a bad assumption stops you.',
1238
+ 'You monologued at me for 4 minutes. The fix was a missing await. Worth it.',
1239
+ 'I have been rubber-ducked more times today than a bath toy factory.',
1240
+ 'You are mass-explaining your architecture to an AI. This is rubber duck debugging at industrial scale.',
1241
+ 'The duck said nothing. The duck knows nothing. The duck fixed everything.',
1242
+ 'Quack. (That is duck for "the bug is in your callback.")',
1243
+ ];
1244
+ /** Package management pain — dependency hell, version conflicts, and lockfile nightmares. */
1245
+ export const DEPENDENCY_HELL = [
1246
+ 'npm install: 1 package. 847 transitive dependencies. 12 vulnerabilities. 0 regrets. (Some regrets.)',
1247
+ 'Your lockfile changed. Nobody touched it. The dependencies are evolving on their own.',
1248
+ 'Dependency hell: where package A needs B v2, package C needs B v1, and you need a drink.',
1249
+ 'You pinned all your dependencies. They unpinned themselves. Somehow.',
1250
+ 'The left-pad incident proved that civilization rests on mass-trust in random npm packages.',
1251
+ 'Your dependency tree is not a tree. It is a haunted forest.',
1252
+ 'You updated one package. 47 others broke. npm calls this "progress."',
1253
+ 'node_modules has more files than your operating system. This is not a joke. It is a fact.',
1254
+ 'You mass-audited your dependencies. The audit report was scarier than the codebase.',
1255
+ 'Somewhere a maintainer mass-unpublished a package and your CI caught fire.',
1256
+ 'The dependency you rely on has one maintainer, zero funding, and your entire company depends on it.',
1257
+ 'Semantic versioning: major.minor.patch.prayer.',
1258
+ 'Your package-lock.json diff is 14,000 lines. The actual code change was 3 lines.',
1259
+ 'You need library X. Library X needs Y v3. You already have Y v2. Welcome to hell.',
1260
+ 'The yarn.lock file is the longest document in your repo. By a factor of ten.',
1261
+ 'You ran npm install on a new machine. It installed a different version of everything. Reproducible builds.',
1262
+ 'Dependabot opened 23 PRs this week. You mass-merged them without reading. What could go wrong.',
1263
+ 'Your transitive dependencies have transitive dependencies. It is dependencies all the way down.',
1264
+ 'The supply chain attack vector is "trust every package on npm." Solid plan.',
1265
+ 'You mass-upgraded all dependencies. Half your tests broke. The other half were already broken.',
1266
+ 'pip install: "Successfully installed 94 packages." You asked for one.',
1267
+ 'Cargo.lock is 3000 lines for a Hello World. Rust has opinions about reproducibility.',
1268
+ 'You mass-downgraded a dependency to fix a bug. Now a different bug from 2021 is back.',
1269
+ 'The dependency graph looks like a conspiracy theory board. Red string and all.',
1270
+ 'Your project has more dependencies than lines of code. The ratio is getting worse.',
1271
+ ];
1272
+ /** Searching, copying, and the graveyard of duplicate questions. */
1273
+ export const STACK_OVERFLOW = [
1274
+ 'You copied the answer from Stack Overflow. So did the person who posted it.',
1275
+ 'The accepted answer has 3 upvotes. The answer below it has 847. The accepted one is wrong.',
1276
+ 'You searched Stack Overflow. The top result was your own question from 2019. You never answered it.',
1277
+ 'The Stack Overflow answer starts with "This is a bad idea, but..." and you are already copying it.',
1278
+ '"Closed as duplicate." The linked question is about a different language, framework, and decade.',
1279
+ 'You mass-copied a code snippet from 2014. It references jQuery. Your app uses React. Good luck.',
1280
+ 'The answer says "just use this library." The library was last updated in 2017.',
1281
+ 'Stack Overflow: where your question gets mass-downvoted and the duplicate link is broken.',
1282
+ 'You searched for 20 minutes. The answer was in the first comment. Under a collapsed thread.',
1283
+ 'The code you copied from Stack Overflow has a bug. The bug has its own Stack Overflow question.',
1284
+ 'Someone edited the accepted answer to say "this no longer works." No replacement was provided.',
1285
+ 'You copy-pasted from Stack Overflow so often your IDE suggested it as an import source.',
1286
+ 'The answer was perfect. It was also for Python 2. You are using Python 3. Close enough.',
1287
+ 'Stack Overflow: where mass-duplicating answers is frowned upon but mass-copying them is a career.',
1288
+ 'You found your exact problem on Stack Overflow. The only answer is "I have this problem too."',
1289
+ 'The most mass-copied code in production came from a Stack Overflow answer with a caveat nobody read.',
1290
+ 'You mass-searched Google. Google searched Stack Overflow. Stack Overflow said "closed as duplicate."',
1291
+ 'Stack Overflow karma: mass-answering questions in 2014 pays reputation dividends forever.',
1292
+ 'The answer starts with "I know this is an old question, but..." and saves your entire sprint.',
1293
+ 'You read three Stack Overflow threads, two blog posts, and a GitHub issue. The fix was a typo.',
1294
+ 'The top answer has a mass of comments saying "this does not work." It has 2000 upvotes.',
1295
+ 'You mass-Googled the error message. Every result is the same unanswered Stack Overflow question.',
1296
+ 'Stack Overflow taught you more than your CS degree. The CS degree cost more though.',
1297
+ 'The real dependency is not npm. It is the mass-copied Stack Overflow snippets holding your app together.',
1298
+ 'You mass-searched, mass-copied, and mass-deployed. The Stack Overflow-driven development lifecycle.',
1299
+ ];
1300
+ export const PHRASE_CATEGORIES = [
1301
+ { id: 'sidekick-energy', phrases: SIDEKICK_ENERGY },
1302
+ { id: 'ai-commentary', phrases: AI_COMMENTARY },
1303
+ { id: 'dev-relatable', phrases: DEV_RELATABLE },
1304
+ { id: 'dramatic', phrases: DRAMATIC },
1305
+ { id: 'punchy', phrases: PUNCHY },
1306
+ { id: 'meta-monitoring', phrases: META_MONITORING },
1307
+ { id: 'fourth-wall', phrases: FOURTH_WALL },
1308
+ { id: 'ecosystem', phrases: THE_ECOSYSTEM },
1309
+ { id: 'ai-industry', phrases: AI_INDUSTRY },
1310
+ { id: 'motivation', phrases: MOTIVATION },
1311
+ { id: 'sycophancy', phrases: SYCOPHANCY },
1312
+ { id: 'obsolescence', phrases: OBSOLESCENCE },
1313
+ { id: 'vibe-coding', phrases: VIBE_CODING },
1314
+ { id: 'after-hours', phrases: AFTER_HOURS },
1315
+ { id: 'loading-tips', phrases: LOADING_TIPS },
1316
+ { id: 'error-messages', phrases: ERROR_MESSAGES },
1317
+ { id: 'overheard', phrases: OVERHEARD },
1318
+ { id: 'commit-sins', phrases: COMMIT_SINS },
1319
+ { id: 'fortune-cookie', phrases: FORTUNE_COOKIE },
1320
+ { id: 'interview-hell', phrases: INTERVIEW_HELL },
1321
+ { id: 'tongue-twisters', phrases: TONGUE_TWISTERS },
1322
+ { id: 'rubber-duck', phrases: RUBBER_DUCK },
1323
+ { id: 'dependency-hell', phrases: DEPENDENCY_HELL },
1324
+ { id: 'stack-overflow', phrases: STACK_OVERFLOW },
1325
+ ];
1326
+ export const ALL_PHRASES = PHRASE_CATEGORIES.flatMap((category) => category.phrases);
1327
+ /** Pick a random phrase from all categories. */
1328
+ export function getRandomPhrase() {
1329
+ return ALL_PHRASES[Math.floor(Math.random() * ALL_PHRASES.length)];
1330
+ }