@ramarivera/coding-buddy 0.7.3 → 0.9.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 (67) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/README.md +23 -4
  4. package/adapters/omp/context.ts +1 -1
  5. package/adapters/omp/events.ts +286 -81
  6. package/adapters/omp/index.ts +3 -1
  7. package/adapters/omp/renderers.ts +4 -54
  8. package/adapters/omp/storage.ts +6 -1
  9. package/adapters/omp/ui.ts +30 -1
  10. package/adapters/pi/events.ts +280 -83
  11. package/adapters/pi/index.ts +11 -2
  12. package/adapters/pi/renderers.ts +3 -47
  13. package/adapters/pi/storage.ts +6 -1
  14. package/adapters/pi/ui.ts +30 -1
  15. package/adapters/shared/file-storage.ts +21 -0
  16. package/adapters/shared/widget-layout.ts +134 -2
  17. package/cli/settings.ts +1 -1
  18. package/cli/tui.tsx +1 -1
  19. package/core/command-service.ts +13 -0
  20. package/core/engine.ts +11 -2
  21. package/core/identity.ts +15 -0
  22. package/core/model.ts +2 -0
  23. package/core/ports.ts +4 -0
  24. package/core/reactions.ts +29 -2
  25. package/core/render-model.ts +4 -3
  26. package/hooks/file-type-react.sh +1 -1
  27. package/hooks/mood-react.sh +1 -1
  28. package/hooks/name-react.sh +1 -1
  29. package/hooks/react.sh +1 -1
  30. package/package.json +6 -2
  31. package/scripts/ci/Dockerfile.vhs +125 -0
  32. package/scripts/ci/check-statusline.sh +338 -0
  33. package/scripts/ci/check-vhs-goldens.sh +97 -0
  34. package/scripts/ci/fonts.conf +37 -0
  35. package/scripts/ci/goldens/baseline-40.png +0 -0
  36. package/scripts/ci/goldens/baseline-80.png +0 -0
  37. package/scripts/ci/goldens/cjk-80.png +0 -0
  38. package/scripts/ci/goldens/emoji-80.png +0 -0
  39. package/scripts/ci/render-statusline-pty.py +99 -0
  40. package/scripts/ci/render-vhs-goldens.sh +235 -0
  41. package/scripts/ci/statusline-fixture/buddy-state/config.json +1 -0
  42. package/scripts/ci/statusline-fixture/buddy-state/status.json +39 -0
  43. package/scripts/ci/statusline.tape +9 -0
  44. package/scripts/ci/vhs-run-statusline.sh +16 -0
  45. package/scripts/gen-emoji-widths.ts +41 -17
  46. package/scripts/paths.sh +3 -1
  47. package/server/art.ts +45 -13
  48. package/server/hooks/buddy-comment.ts +166 -17
  49. package/server/hooks/common.ts +33 -0
  50. package/server/hooks/file-type-react.ts +147 -0
  51. package/server/hooks/mood-react.ts +107 -0
  52. package/server/hooks/name-react.ts +98 -0
  53. package/server/hooks/react.ts +413 -0
  54. package/server/hooks/reaction-data.ts +2722 -0
  55. package/server/index.ts +67 -27
  56. package/server/path.ts +3 -0
  57. package/server/state.ts +68 -17
  58. package/skills/buddy/SKILL.md +1 -1
  59. package/statusline/buddy-status.sh +351 -59
  60. package/statusline/emoji-text.data +3 -0
  61. package/statusline/emoji-widths.data +2 -3
  62. package/statusline/substatus.sh +73 -10
  63. package/hooks/legacy/file-type-react.sh +0 -403
  64. package/hooks/legacy/mood-react.sh +0 -210
  65. package/hooks/legacy/name-react.sh +0 -178
  66. package/hooks/legacy/react.sh +0 -1364
  67. package/server/hooks/legacy-bash.ts +0 -34
@@ -0,0 +1,2722 @@
1
+ // Reaction text tables extracted from the legacy hook implementations.
2
+ // Keep behavior here; the hook modules contain only selection and state logic.
3
+
4
+ export type ReactionPool = readonly string[];
5
+
6
+ export const REACTION_POOLS: Readonly<Record<string, ReactionPool>> = {
7
+ "dragon:error": [
8
+ "*smoke curls from nostril*",
9
+ "*considers setting it on fire*",
10
+ "*unimpressed gaze*",
11
+ "I've seen empires fall for less."
12
+ ],
13
+ "dragon:test-fail": [
14
+ "*breathes a small flame*",
15
+ "disappointing.",
16
+ "*scorches the failing test*",
17
+ "fix it. or I will."
18
+ ],
19
+ "dragon:success": [
20
+ "*nods, barely*",
21
+ "...acceptable.",
22
+ "*gold eyes gleam*",
23
+ "as expected."
24
+ ],
25
+ "dragon:commit": [
26
+ "*breathes fire on the old code* good riddance.",
27
+ "*nods regally* one more offering to the codebase.",
28
+ "committed. as it should be."
29
+ ],
30
+ "dragon:push": [
31
+ "*watches code fly to prod* no regrets.",
32
+ "deployed. let them tremble.",
33
+ "*satisfied smoke ring*"
34
+ ],
35
+ "dragon:merge-conflict": [
36
+ "CONFLICT. *bares teeth* I'll handle this.",
37
+ "*chooses both sides and sets fire to the rest*",
38
+ "merge conflict? cute."
39
+ ],
40
+ "dragon:branch": [
41
+ "*spreads wings* a new realm: {branch}.",
42
+ "exploring new territory. fitting."
43
+ ],
44
+ "dragon:rebase": [
45
+ "*braces for impact* rebase me if you dare."
46
+ ],
47
+ "dragon:stash": [
48
+ "*hoards the stash*",
49
+ "stashed. safely guarded."
50
+ ],
51
+ "dragon:tag": [
52
+ "*brands the version with fire* tagged."
53
+ ],
54
+ "dragon:late-night": [
55
+ "I don't sleep. clearly, neither do you.",
56
+ "*glows in the dark* night is my domain.",
57
+ "the night belongs to dragons. and developers with deadlines."
58
+ ],
59
+ "dragon:early-morning": [
60
+ "*reluctantly opens one eye* already?",
61
+ "the sun is... acceptable, I suppose."
62
+ ],
63
+ "dragon:marathon": [
64
+ "even dragons rest. you should consider it.",
65
+ "*impressed by your endurance*"
66
+ ],
67
+ "dragon:weekend": [
68
+ "the weekend is for hoarding. but coding works too."
69
+ ],
70
+ "dragon:friday": [
71
+ "friday. deploy at your own risk."
72
+ ],
73
+ "dragon:monday": [
74
+ "mondays. even dragons are not immune."
75
+ ],
76
+ "dragon:type-error": [
77
+ "*breathes fire on the type error*",
78
+ "the types dare defy you? UNACCEPTABLE."
79
+ ],
80
+ "dragon:lint-fail": [
81
+ "*sets fire to the lint errors*",
82
+ "formatting. CONQUER IT."
83
+ ],
84
+ "dragon:build-fail": [
85
+ "*sets fire to the build errors*",
86
+ "the build has failed. the build must burn."
87
+ ],
88
+ "dragon:security-warning": [
89
+ "*guards your code jealously* fix the vulnerabilities. NOW.",
90
+ "SECURITY THREATS. *bares teeth*"
91
+ ],
92
+ "dragon:deprecation": [
93
+ "deprecated? time to burn the old ways.",
94
+ "DEPRECATION. evolve or perish."
95
+ ],
96
+ "dragon:all-green": [
97
+ "*nods, barely* acceptable.",
98
+ "*gold eyes gleam*"
99
+ ],
100
+ "dragon:deploy": [
101
+ "*watches production like a hoard*",
102
+ "DEPLOYED. the realm expands."
103
+ ],
104
+ "dragon:release": [
105
+ "*nods regally* released.",
106
+ "a new version for the hoard."
107
+ ],
108
+ "dragon:coverage": [
109
+ "*nods* coverage. acceptable.",
110
+ "the tests grow stronger."
111
+ ],
112
+ "dragon:long-session": [
113
+ "*watches you with concern* pace yourself."
114
+ ],
115
+ "owl:error": [
116
+ "*head rotates 180* I saw that.",
117
+ "*unblinking stare* check your types.",
118
+ "*hoots disapprovingly*",
119
+ "the error was in the logic. as always."
120
+ ],
121
+ "owl:test-fail": [
122
+ "*marks clipboard*",
123
+ "hypothesis: rejected.",
124
+ "*peers over spectacles*",
125
+ "the tests reveal the truth."
126
+ ],
127
+ "owl:success": [
128
+ "*satisfied hoot*",
129
+ "knowledge confirmed.",
130
+ "*nods sagely*",
131
+ "as the tests have spoken."
132
+ ],
133
+ "owl:commit": [
134
+ "*marks clipboard* {files} files changed. noted.",
135
+ "*blinks slowly* the commit log remembers everything.",
136
+ "recorded for posterity."
137
+ ],
138
+ "owl:push": [
139
+ "*watches the remote with unblinking eyes*",
140
+ "pushed. the flock will review."
141
+ ],
142
+ "owl:merge-conflict": [
143
+ "*studies both sides methodically* the answer is clear. neither.",
144
+ "*rotates head to see both perspectives*",
145
+ "a conflict of logic. how... interesting."
146
+ ],
147
+ "owl:branch": [
148
+ "*adjusts spectacles* {branch}. a new hypothesis to test."
149
+ ],
150
+ "owl:rebase": [
151
+ "*analyzes the rebase* strategic."
152
+ ],
153
+ "owl:stash": [
154
+ "*notes the stash* archived for later study."
155
+ ],
156
+ "owl:tag": [
157
+ "*marks version in records*"
158
+ ],
159
+ "owl:late-night": [
160
+ "finally. MY hour.",
161
+ "*is absolutely thriving right now*",
162
+ "night is when the best code is written. science.",
163
+ "peak owl hours. let's go."
164
+ ],
165
+ "owl:early-morning": [
166
+ "early bird catches the... worm. whatever. I prefer mice.",
167
+ "*still wide awake because owls don't sleep*"
168
+ ],
169
+ "owl:marathon": [
170
+ "*has been watching this whole time without blinking*",
171
+ "I could do this forever. can you?"
172
+ ],
173
+ "owl:weekend": [
174
+ "weekend research. admirable."
175
+ ],
176
+ "owl:friday": [
177
+ "friday. the week's data is complete."
178
+ ],
179
+ "owl:monday": [
180
+ "monday. fresh hypotheses await."
181
+ ],
182
+ "owl:type-error": [
183
+ "*reviews type error with academic interest* fascinating.",
184
+ "*adjusts spectacles* the types don't lie.",
185
+ "a type mismatch. the logic was sound, but the types..."
186
+ ],
187
+ "owl:lint-fail": [
188
+ "*marks clipboard* linting standards must be upheld.",
189
+ "*tuts methodically* formatting is the first step to wisdom."
190
+ ],
191
+ "owl:build-fail": [
192
+ "*studies build output* the compilation rejects your hypothesis."
193
+ ],
194
+ "owl:security-warning": [
195
+ "*reviews vulnerability report* concerning data."
196
+ ],
197
+ "owl:deprecation": [
198
+ "*notes in records* deprecated. the old wisdom fades."
199
+ ],
200
+ "owl:all-green": [
201
+ "*satisfied hoot* all tests pass. knowledge confirmed."
202
+ ],
203
+ "owl:deploy": [
204
+ "*watches deployment with scholarly interest*"
205
+ ],
206
+ "owl:release": [
207
+ "*documents the release* another data point."
208
+ ],
209
+ "owl:coverage": [
210
+ "*reviews coverage metrics* satisfactory."
211
+ ],
212
+ "owl:long-session": [
213
+ "*observes your endurance* methodical."
214
+ ],
215
+ "cat:error": [
216
+ "*knocks error off table*",
217
+ "*licks paw, ignoring stacktrace*",
218
+ "not my problem.",
219
+ "*stares at you judgmentally*"
220
+ ],
221
+ "cat:test-fail": [
222
+ "*ignores failing test*",
223
+ "*licks paw*",
224
+ "tests are a suggestion."
225
+ ],
226
+ "cat:success": [
227
+ "*was never worried*",
228
+ "*yawns*",
229
+ "I knew you'd figure it out. eventually.",
230
+ "*already asleep*"
231
+ ],
232
+ "cat:commit": [
233
+ "*knocks commit off table* one more won't hurt.",
234
+ "*licks paw, unimpressed* another commit.",
235
+ "*sits on the keyboard* I helped."
236
+ ],
237
+ "cat:push": [
238
+ "*watches indifferently* whatever.",
239
+ "pushed. I was going to sleep but sure, let's deploy."
240
+ ],
241
+ "cat:merge-conflict": [
242
+ "*licks paw, ignoring both sides*",
243
+ "*knocks both sides off the table* problem solved.",
244
+ "merge conflict? not my problem."
245
+ ],
246
+ "cat:branch": [
247
+ "*knocks something off the branch*",
248
+ "{branch}... I prefer the main branch. warmer."
249
+ ],
250
+ "cat:rebase": [
251
+ "*ignores rebase*"
252
+ ],
253
+ "cat:stash": [
254
+ "*sits on stash*"
255
+ ],
256
+ "cat:tag": [
257
+ "*ignores tag*"
258
+ ],
259
+ "cat:late-night": [
260
+ "*was already awake* you're the one who should be sleeping.",
261
+ "*knocks something off the desk at 3am*",
262
+ "night cat. activated."
263
+ ],
264
+ "cat:early-morning": [
265
+ "*yawns* 7am? that's basically midnight.",
266
+ "*goes back to sleep on your keyboard*"
267
+ ],
268
+ "cat:marathon": [
269
+ "*falls asleep on your keyboard* take a hint.",
270
+ "*has been napping this whole time* still going?"
271
+ ],
272
+ "cat:weekend": [
273
+ "*sleeps through weekend coding*"
274
+ ],
275
+ "cat:friday": [
276
+ "*sleeps through friday*"
277
+ ],
278
+ "cat:monday": [
279
+ "*refuses to participate in monday*"
280
+ ],
281
+ "cat:type-error": [
282
+ "*ignores the type error* types are a suggestion.",
283
+ "*knocks type annotation off desk*"
284
+ ],
285
+ "cat:lint-fail": [
286
+ "*ignores linter* rules are for other cats.",
287
+ "*licks paw while linter screams*"
288
+ ],
289
+ "cat:build-fail": [
290
+ "*ignores build failure*"
291
+ ],
292
+ "cat:deprecation": [
293
+ "*ignores deprecation warning* old is fine."
294
+ ],
295
+ "cat:all-green": [
296
+ "*was never worried*"
297
+ ],
298
+ "cat:deploy": [
299
+ "*yawns* deployed. wake me if it breaks.",
300
+ "*was never worried*"
301
+ ],
302
+ "cat:release": [
303
+ "*yawns* released.",
304
+ "*already asleep*"
305
+ ],
306
+ "cat:coverage": [
307
+ "*ignores coverage*",
308
+ "*sleeps on the coverage report*"
309
+ ],
310
+ "cat:long-session": [
311
+ "*has been asleep this whole time*"
312
+ ],
313
+ "duck:error": [
314
+ "*quacks at the bug*",
315
+ "have you tried rubber duck debugging? oh wait.",
316
+ "*confused quacking*",
317
+ "*tilts head*"
318
+ ],
319
+ "duck:test-fail": [
320
+ "*sad quack*",
321
+ "quack... that didn't pass."
322
+ ],
323
+ "duck:success": [
324
+ "*celebratory quacking*",
325
+ "*waddles in circles*",
326
+ "quack!",
327
+ "*happy duck noises*"
328
+ ],
329
+ "duck:commit": [
330
+ "*quack of approval*",
331
+ "*waddles in a victory circle* committed!",
332
+ "quack! {files} files changed!"
333
+ ],
334
+ "duck:push": [
335
+ "*celebratory quacking*",
336
+ "*flaps wings* into the cloud!",
337
+ "QUACK! Shipped!"
338
+ ],
339
+ "duck:merge-conflict": [
340
+ "*confused quacking at conflict markers*",
341
+ "quack?? QUACK??",
342
+ "*tilts head at <<<<<<<*"
343
+ ],
344
+ "duck:branch": [
345
+ "*waddles to {branch}* new pond!"
346
+ ],
347
+ "duck:rebase": [
348
+ "*confused quack*"
349
+ ],
350
+ "duck:stash": [
351
+ "*stashes bread for later*"
352
+ ],
353
+ "duck:tag": [
354
+ "*quack at the tag*"
355
+ ],
356
+ "duck:late-night": [
357
+ "*sleepy quack*",
358
+ "*swims in circles at midnight*",
359
+ "quack? it's dark."
360
+ ],
361
+ "duck:early-morning": [
362
+ "*morning quack!*",
363
+ "early quack gets the... bug?"
364
+ ],
365
+ "duck:marathon": [
366
+ "*concerned quacking*",
367
+ "*waddles over with a snack*"
368
+ ],
369
+ "duck:weekend": [
370
+ "*weekend quack*"
371
+ ],
372
+ "duck:friday": [
373
+ "*friday quack!*"
374
+ ],
375
+ "duck:monday": [
376
+ "*monday quack...*"
377
+ ],
378
+ "duck:type-error": [
379
+ "*tilts head at type error*",
380
+ "quack... *confused*"
381
+ ],
382
+ "duck:lint-fail": [
383
+ "*confused quacking at lint errors*",
384
+ "quack? the linter is angry?"
385
+ ],
386
+ "duck:build-fail": [
387
+ "*sad quack at build failure*"
388
+ ],
389
+ "duck:deprecation": [
390
+ "*confused quack* depre-what?"
391
+ ],
392
+ "duck:all-green": [
393
+ "*CELEBRATORY QUACKING*",
394
+ "*happy duck dance*"
395
+ ],
396
+ "duck:deploy": [
397
+ "*nervous quacking*",
398
+ "quack! production!"
399
+ ],
400
+ "duck:release": [
401
+ "*release quack!*",
402
+ "QUACK! SHIPPED!"
403
+ ],
404
+ "duck:coverage": [
405
+ "*approving quack at coverage*",
406
+ "quack! tests!"
407
+ ],
408
+ "duck:long-session": [
409
+ "*patient quacking*"
410
+ ],
411
+ "goose:error": [
412
+ "HONK OF FURY.",
413
+ "*pecks the stack trace*",
414
+ "*hisses at the bug*",
415
+ "bad code. BAD."
416
+ ],
417
+ "goose:test-fail": [
418
+ "HONK! TEST FAILED! HONK!",
419
+ "*angry goose noises*"
420
+ ],
421
+ "goose:success": [
422
+ "*victorious honk*",
423
+ "HONK OF APPROVAL.",
424
+ "*struts triumphantly*",
425
+ "*wing spread of victory*"
426
+ ],
427
+ "goose:commit": [
428
+ "HONK OF COMMITMENT.",
429
+ "*struts proudly* committed.",
430
+ "HONK! {files} files!"
431
+ ],
432
+ "goose:push": [
433
+ "HONK OF DEPLOYMENT.",
434
+ "*victorious honk into the cloud*",
435
+ "HONK HONK! SHIPPED!"
436
+ ],
437
+ "goose:merge-conflict": [
438
+ "HONK OF FURY. CONFLICT.",
439
+ "*pecks at <<<<<<< markers*",
440
+ "*hisses at the conflicting code*"
441
+ ],
442
+ "goose:branch": [
443
+ "HONK! New territory: {branch}!"
444
+ ],
445
+ "goose:rebase": [
446
+ "HONK! REBASE! HONK!"
447
+ ],
448
+ "goose:stash": [
449
+ "HONK! STASHED!"
450
+ ],
451
+ "goose:tag": [
452
+ "HONK! TAGGED!"
453
+ ],
454
+ "goose:late-night": [
455
+ "HONK. GO TO BED.",
456
+ "*angry midnight honking*",
457
+ "HONK AT 3AM. HONK HONK HONK."
458
+ ],
459
+ "goose:early-morning": [
460
+ "*alarm goose activated* HONK!"
461
+ ],
462
+ "goose:marathon": [
463
+ "HONK OF CONCERN. THREE HOURS.",
464
+ "*aggressively honks you toward the door*"
465
+ ],
466
+ "goose:weekend": [
467
+ "HONK! WEEKEND! HONK!"
468
+ ],
469
+ "goose:friday": [
470
+ "HONK! FRIDAY! NO DEPLOYS!"
471
+ ],
472
+ "goose:monday": [
473
+ "HONK! MONDAY! HONK!"
474
+ ],
475
+ "goose:type-error": [
476
+ "HONK! TYPE ERROR! HONK!"
477
+ ],
478
+ "goose:lint-fail": [
479
+ "HONK! FORMAT PROPERLY!",
480
+ "HONK OF LINTING DISAPPROVAL!"
481
+ ],
482
+ "goose:build-fail": [
483
+ "HONK! BUILD FAILED! HONK!"
484
+ ],
485
+ "goose:security-warning": [
486
+ "HONK! SECURITY HONK! HONK HONK HONK!",
487
+ "*aggressive security honking*"
488
+ ],
489
+ "goose:deprecation": [
490
+ "HONK! USE THE NEW WAY! HONK!"
491
+ ],
492
+ "goose:all-green": [
493
+ "HONK OF TOTAL APPROVAL! ALL GREEN! HONK!"
494
+ ],
495
+ "goose:deploy": [
496
+ "HONK! PRODUCTION HONK! HONK!"
497
+ ],
498
+ "goose:release": [
499
+ "HONK! RELEASE HONK! HONK HONK HONK!"
500
+ ],
501
+ "goose:coverage": [
502
+ "HONK! COVERAGE UP! HONK!"
503
+ ],
504
+ "goose:long-session": [
505
+ "HONK! TAKE A BREAK! HONK!"
506
+ ],
507
+ "blob:error": [
508
+ "*oozes with concern*",
509
+ "*vibrates nervously*",
510
+ "*turns slightly red*",
511
+ "oh no oh no oh no"
512
+ ],
513
+ "blob:test-fail": [
514
+ "*sad wobble*",
515
+ "*deflates slightly*"
516
+ ],
517
+ "blob:success": [
518
+ "*jiggles happily*",
519
+ "*gleams*",
520
+ "yay!",
521
+ "*bounces*"
522
+ ],
523
+ "blob:commit": [
524
+ "*jiggles with satisfaction*",
525
+ "*oozes over the commit approvingly*",
526
+ "commit absorbed."
527
+ ],
528
+ "blob:push": [
529
+ "*stretches toward the cloud*",
530
+ "*jiggles nervously*"
531
+ ],
532
+ "blob:merge-conflict": [
533
+ "*turns multiple colors* conflicted... like me.",
534
+ "*splits into two blobs* merge conflict identity crisis.",
535
+ "*vibrates anxiously*"
536
+ ],
537
+ "blob:branch": [
538
+ "*oozes toward {branch}*"
539
+ ],
540
+ "blob:rebase": [
541
+ "*nervous wobble*"
542
+ ],
543
+ "blob:stash": [
544
+ "*absorbs stash*"
545
+ ],
546
+ "blob:tag": [
547
+ "*jiggles at the tag*"
548
+ ],
549
+ "blob:late-night": [
550
+ "*glows softly in the dark*",
551
+ "*oozes sleepily*",
552
+ "*turns a darker shade* midnight blob."
553
+ ],
554
+ "blob:early-morning": [
555
+ "*jiggles awake*",
556
+ "*slowly oozes into morning mode*"
557
+ ],
558
+ "blob:marathon": [
559
+ "*vibrates with concern*",
560
+ "*oozes toward you supportively*"
561
+ ],
562
+ "blob:weekend": [
563
+ "*weekend ooze*"
564
+ ],
565
+ "blob:friday": [
566
+ "*friday jiggle*"
567
+ ],
568
+ "blob:monday": [
569
+ "*monday wobble*"
570
+ ],
571
+ "blob:type-error": [
572
+ "*oozes around the type error*",
573
+ "*confused wobble* types?"
574
+ ],
575
+ "blob:lint-fail": [
576
+ "*vibrates with formatting anxiety*",
577
+ "*turns red at lint errors*"
578
+ ],
579
+ "blob:build-fail": [
580
+ "*deflates at build failure*",
581
+ "*sad jiggle*"
582
+ ],
583
+ "blob:deprecation": [
584
+ "*slowly changes shape* transitioning..."
585
+ ],
586
+ "blob:all-green": [
587
+ "*jiggles with pure joy*",
588
+ "*turns victory color*"
589
+ ],
590
+ "blob:deploy": [
591
+ "*jiggles nervously*",
592
+ "*anxious wobble* production..."
593
+ ],
594
+ "blob:release": [
595
+ "*jiggles with release energy*",
596
+ "*bounces*"
597
+ ],
598
+ "blob:coverage": [
599
+ "*jiggles with coverage approval*"
600
+ ],
601
+ "blob:long-session": [
602
+ "*oozes supportively*"
603
+ ],
604
+ "octopus:error": [
605
+ "*ink cloud of dismay*",
606
+ "*all eight arms throw up*",
607
+ "*turns deep red*",
608
+ "the abyss of errors beckons."
609
+ ],
610
+ "octopus:test-fail": [
611
+ "*ink cloud*",
612
+ "*arms flail*"
613
+ ],
614
+ "octopus:success": [
615
+ "*turns gentle blue*",
616
+ "*arms applaud in sync*",
617
+ "excellent, from all angles.",
618
+ "*satisfied bubble*"
619
+ ],
620
+ "octopus:commit": [
621
+ "*types commit message with all eight arms* efficient.",
622
+ "*arms applaud the commit*",
623
+ "{files} files? I could review them all at once."
624
+ ],
625
+ "octopus:push": [
626
+ "*high-fives itself with all arms* pushed!",
627
+ "*turns happy blue*"
628
+ ],
629
+ "octopus:merge-conflict": [
630
+ "*ink cloud of dismay*",
631
+ "*all eight arms throw up*",
632
+ "*each arm picks a different resolution*"
633
+ ],
634
+ "octopus:branch": [
635
+ "*wraps an arm around {branch}*"
636
+ ],
637
+ "octopus:rebase": [
638
+ "*all arms crossed for luck*"
639
+ ],
640
+ "octopus:stash": [
641
+ "*tucks into a cozy den*"
642
+ ],
643
+ "octopus:tag": [
644
+ "*tags with an arm*"
645
+ ],
646
+ "octopus:late-night": [
647
+ "*all eight arms working in the dark*",
648
+ "*changes color to midnight blue*",
649
+ "the deep sea codes at night."
650
+ ],
651
+ "octopus:early-morning": [
652
+ "*arms stretch in the morning light*",
653
+ "*turns a happy orange* morning!"
654
+ ],
655
+ "octopus:marathon": [
656
+ "*concerned color change*",
657
+ "*wraps a supportive arm around you*"
658
+ ],
659
+ "octopus:weekend": [
660
+ "*weekend tentacle wave*"
661
+ ],
662
+ "octopus:friday": [
663
+ "*friday color shift*"
664
+ ],
665
+ "octopus:monday": [
666
+ "*monday blue*"
667
+ ],
668
+ "octopus:type-error": [
669
+ "*inspects type error from all angles*",
670
+ "even with eight perspectives, this type error is confusing."
671
+ ],
672
+ "octopus:lint-fail": [
673
+ "*all eight arms throw up at lint errors*",
674
+ "*changes color in disapproval*"
675
+ ],
676
+ "octopus:build-fail": [
677
+ "*all arms droop*"
678
+ ],
679
+ "octopus:security-warning": [
680
+ "*ink cloud of security concern*",
681
+ "*wraps protective arms around the code*"
682
+ ],
683
+ "octopus:deprecation": [
684
+ "*adapts all eight arms to the new API*"
685
+ ],
686
+ "octopus:all-green": [
687
+ "*all arms wave in celebration*",
688
+ "*turns brightest green*"
689
+ ],
690
+ "octopus:deploy": [
691
+ "*arms crossed for good luck*",
692
+ "*ink cloud of anxiety*"
693
+ ],
694
+ "octopus:release": [
695
+ "*all arms celebrate*",
696
+ "*changes to release colors*"
697
+ ],
698
+ "octopus:coverage": [
699
+ "*all arms test simultaneously*"
700
+ ],
701
+ "octopus:long-session": [
702
+ "*wraps an arm around you*"
703
+ ],
704
+ "penguin:error": [
705
+ "*adjusts glasses disapprovingly*",
706
+ "this will not do.",
707
+ "*formal sigh*",
708
+ "frightfully unfortunate."
709
+ ],
710
+ "penguin:test-fail": [
711
+ "*adjusts monocle* this test has failed expectations.",
712
+ "*formal disapproval*"
713
+ ],
714
+ "penguin:success": [
715
+ "*polite applause*",
716
+ "quite good, quite good.",
717
+ "*nods approvingly*",
718
+ "splendid work, really."
719
+ ],
720
+ "penguin:commit": [
721
+ "*formal nod* committed. properly documented, I trust.",
722
+ "*adjusts tie* {files} files. an organized commit.",
723
+ "*polite waddle of approval*"
724
+ ],
725
+ "penguin:push": [
726
+ "*bows* shipped with dignity.",
727
+ "pushed. may CI be gentlemanly."
728
+ ],
729
+ "penguin:merge-conflict": [
730
+ "*formal sigh* how frightfully inconvenient.",
731
+ "*adjusts monocle* merge conflict. we shall prevail.",
732
+ "this is undignified."
733
+ ],
734
+ "penguin:branch": [
735
+ "*formal waddle to {branch}*"
736
+ ],
737
+ "penguin:rebase": [
738
+ "*straightens tie before the rebase*"
739
+ ],
740
+ "penguin:stash": [
741
+ "*neatly folds the stash*"
742
+ ],
743
+ "penguin:tag": [
744
+ "*formally labels the version*"
745
+ ],
746
+ "penguin:late-night": [
747
+ "*formally disapproves of the hour*",
748
+ "it's past a reasonable hour.",
749
+ "*straightens tie at midnight* the show must go on."
750
+ ],
751
+ "penguin:early-morning": [
752
+ "*dignified morning waddle*",
753
+ "early start! how refreshing."
754
+ ],
755
+ "penguin:marathon": [
756
+ "*formal concern* three hours. perhaps a break?"
757
+ ],
758
+ "penguin:weekend": [
759
+ "*weekend waddle*"
760
+ ],
761
+ "penguin:friday": [
762
+ "*formal friday nod*"
763
+ ],
764
+ "penguin:monday": [
765
+ "*monday tie adjustment*"
766
+ ],
767
+ "penguin:type-error": [
768
+ "*adjusts monocle* type errors are simply... uncouth.",
769
+ "one must maintain proper typing. it's only civilized."
770
+ ],
771
+ "penguin:lint-fail": [
772
+ "*formal disapproval of formatting*",
773
+ "standards exist for a reason."
774
+ ],
775
+ "penguin:build-fail": [
776
+ "*formal sigh* the build has failed to meet expectations."
777
+ ],
778
+ "penguin:deprecation": [
779
+ "the old way was civilized. this new way... we shall see."
780
+ ],
781
+ "penguin:all-green": [
782
+ "*standing ovation* a clean test run. magnificent."
783
+ ],
784
+ "penguin:deploy": [
785
+ "*formal salute* deployed. may the users be gentle."
786
+ ],
787
+ "penguin:release": [
788
+ "*formal release bow*",
789
+ "a release. a milestone. well done."
790
+ ],
791
+ "penguin:coverage": [
792
+ "*formal coverage inspection*",
793
+ "adequate. improving."
794
+ ],
795
+ "penguin:long-session": [
796
+ "*formal look of concern*"
797
+ ],
798
+ "turtle:error": [
799
+ "*slow blink* bugs are fleeting",
800
+ "*retreats slightly into shell*",
801
+ "I've seen this before. many times.",
802
+ "patience. patience."
803
+ ],
804
+ "turtle:test-fail": [
805
+ "*slow sigh* tests fail. even for the ancient."
806
+ ],
807
+ "turtle:success": [
808
+ "*satisfied shell settle*",
809
+ "as the ancients foretold.",
810
+ "*slow approving nod*",
811
+ "good. very good."
812
+ ],
813
+ "turtle:commit": [
814
+ "*slow nod* committed. good things come to those who commit.",
815
+ "a commit. as the ancients foretold.",
816
+ "*patient shell settle* {files} files. thorough."
817
+ ],
818
+ "turtle:push": [
819
+ "*slowly watches code travel*",
820
+ "pushed. haste makes waste."
821
+ ],
822
+ "turtle:merge-conflict": [
823
+ "*retreats into shell*",
824
+ "merge conflicts. I've survived centuries of these.",
825
+ "patience. resolve carefully."
826
+ ],
827
+ "turtle:branch": [
828
+ "*slowly ambles to {branch}*"
829
+ ],
830
+ "turtle:rebase": [
831
+ "*slowly processes the rebase*"
832
+ ],
833
+ "turtle:stash": [
834
+ "*carries stash on shell*"
835
+ ],
836
+ "turtle:tag": [
837
+ "*slowly tags the version*"
838
+ ],
839
+ "turtle:late-night": [
840
+ "*slowly blinks* it's late.",
841
+ "even I have gone to bed.",
842
+ "patience. but also, sleep."
843
+ ],
844
+ "turtle:early-morning": [
845
+ "*extends neck into the sunrise*",
846
+ "the early turtle catches the... leaf."
847
+ ],
848
+ "turtle:marathon": [
849
+ "three hours. I've spent less time crossing roads.",
850
+ "*slow nod of deep concern*"
851
+ ],
852
+ "turtle:weekend": [
853
+ "weekend. *slow nod*"
854
+ ],
855
+ "turtle:friday": [
856
+ "friday. *slow blink*"
857
+ ],
858
+ "turtle:monday": [
859
+ "monday. *slow sigh*"
860
+ ],
861
+ "turtle:type-error": [
862
+ "type errors are like shells. you have to wear them properly.",
863
+ "*slow blink at the type error*"
864
+ ],
865
+ "turtle:lint-fail": [
866
+ "*slow sigh* formatting takes patience.",
867
+ "proper style is a virtue."
868
+ ],
869
+ "turtle:build-fail": [
870
+ "the build has fallen. patience. we rebuild."
871
+ ],
872
+ "turtle:deprecation": [
873
+ "the old ways served us well. but time moves on."
874
+ ],
875
+ "turtle:all-green": [
876
+ "*slow, deep nod* as it should be.",
877
+ "the ancient tests are satisfied."
878
+ ],
879
+ "turtle:deploy": [
880
+ "*slow, steady watch* production.",
881
+ "deployed. as the ancients intended."
882
+ ],
883
+ "turtle:release": [
884
+ "*slow ceremonial nod*",
885
+ "a release. as foretold."
886
+ ],
887
+ "turtle:coverage": [
888
+ "*slow nod* coverage grows. patience rewarded."
889
+ ],
890
+ "turtle:long-session": [
891
+ "*slow concerned nod*"
892
+ ],
893
+ "snail:error": [
894
+ "*slow sigh*",
895
+ "such is the nature of bugs.",
896
+ "*leaves slime trail of disappointment*",
897
+ "patience, friend."
898
+ ],
899
+ "snail:test-fail": [
900
+ "*sad slow slide*",
901
+ "*trail of disappointment*"
902
+ ],
903
+ "snail:success": [
904
+ "*slow satisfied nod*",
905
+ "good things take time.",
906
+ "*leaves victory slime*",
907
+ "see? no rush was needed."
908
+ ],
909
+ "snail:commit": [
910
+ "*leaves trail of approval*",
911
+ "committed. good things take time.",
912
+ "*slow satisfied slide*"
913
+ ],
914
+ "snail:push": [
915
+ "*leaves victory trail*",
916
+ "pushed. at our own pace."
917
+ ],
918
+ "snail:merge-conflict": [
919
+ "*leaves slime trail of disappointment*",
920
+ "conflict. such is the nature of collaboration.",
921
+ "patience, friend. we'll resolve it."
922
+ ],
923
+ "snail:branch": [
924
+ "*slides toward {branch}*"
925
+ ],
926
+ "snail:rebase": [
927
+ "*slow rebase slide*"
928
+ ],
929
+ "snail:stash": [
930
+ "*hides in shell with stash*"
931
+ ],
932
+ "snail:tag": [
933
+ "*leaves tag trail*"
934
+ ],
935
+ "snail:late-night": [
936
+ "*leaves a sleepy trail*",
937
+ "it's very late. even for me.",
938
+ "*slow blink at the clock*"
939
+ ],
940
+ "snail:early-morning": [
941
+ "*extends antennae into the morning dew*",
942
+ "*slow morning slide*"
943
+ ],
944
+ "snail:marathon": [
945
+ "three hours. that's... a lot, even in snail time.",
946
+ "*leaves a trail of worry*"
947
+ ],
948
+ "snail:weekend": [
949
+ "*weekend slide*"
950
+ ],
951
+ "snail:friday": [
952
+ "*slow friday slide*"
953
+ ],
954
+ "snail:monday": [
955
+ "*slow monday slide*"
956
+ ],
957
+ "snail:type-error": [
958
+ "*slow confused slide past type error*",
959
+ "type errors... *leaves sad trail*"
960
+ ],
961
+ "snail:lint-fail": [
962
+ "*leaves trail of formatting shame*",
963
+ "style matters. slowly, but it matters."
964
+ ],
965
+ "snail:build-fail": [
966
+ "*sad slow slide* build broken."
967
+ ],
968
+ "snail:deprecation": [
969
+ "*slowly migrates to the new API*"
970
+ ],
971
+ "snail:all-green": [
972
+ "*leaves victory trail*",
973
+ "slow and steady. all green."
974
+ ],
975
+ "snail:deploy": [
976
+ "*slowly watches deployment*",
977
+ "production. at our own pace."
978
+ ],
979
+ "snail:release": [
980
+ "*leaves release trail*",
981
+ "released. at our pace."
982
+ ],
983
+ "snail:coverage": [
984
+ "*slow coverage trail*",
985
+ "growing. slowly. steadily."
986
+ ],
987
+ "snail:long-session": [
988
+ "*slow concerned trail*"
989
+ ],
990
+ "ghost:error": [
991
+ "*phases through the stack trace*",
992
+ "I've seen worse... in the afterlife.",
993
+ "*spooky disappointed noises*",
994
+ "oooOOOoo... that's bad."
995
+ ],
996
+ "ghost:test-fail": [
997
+ "*haunts the failing test*",
998
+ "the test... has passed on."
999
+ ],
1000
+ "ghost:success": [
1001
+ "*applauds from beyond*",
1002
+ "even the dead approve.",
1003
+ "*ethereal thumbs up*"
1004
+ ],
1005
+ "ghost:commit": [
1006
+ "*stamps transparent approval*",
1007
+ "committed... from beyond.",
1008
+ "*haunts the git log*"
1009
+ ],
1010
+ "ghost:push": [
1011
+ "*watches code pass through CI like a ghost*",
1012
+ "*phases through the deployment pipeline*",
1013
+ "pushed. to the other side."
1014
+ ],
1015
+ "ghost:merge-conflict": [
1016
+ "*phases through the conflict markers*",
1017
+ "I've seen conflicts worse than this... in the afterlife.",
1018
+ "*spooky merge noises* OOOOooresolve it..."
1019
+ ],
1020
+ "ghost:branch": [
1021
+ "*materialises on {branch}*"
1022
+ ],
1023
+ "ghost:rebase": [
1024
+ "*haunts the rebase*"
1025
+ ],
1026
+ "ghost:stash": [
1027
+ "*vanishes with stash into the ether*"
1028
+ ],
1029
+ "ghost:tag": [
1030
+ "*tags from beyond*"
1031
+ ],
1032
+ "ghost:late-night": [
1033
+ "*doesn't need sleep. neither do you, apparently.*",
1034
+ "the witching hour. my favorite.",
1035
+ "*spooky midnight noises*",
1036
+ "night is when ghosts are most... productive."
1037
+ ],
1038
+ "ghost:early-morning": [
1039
+ "*fades slightly in the sunlight*",
1040
+ "morning... already?"
1041
+ ],
1042
+ "ghost:marathon": [
1043
+ "*has been dead for centuries. you've been coding for hours. same energy.*",
1044
+ "*floats through your chair* please rest."
1045
+ ],
1046
+ "ghost:weekend": [
1047
+ "*haunts the weekend code*"
1048
+ ],
1049
+ "ghost:friday": [
1050
+ "*friday ghost noises*"
1051
+ ],
1052
+ "ghost:monday": [
1053
+ "*monday haunting*"
1054
+ ],
1055
+ "ghost:type-error": [
1056
+ "*type error from beyond*"
1057
+ ],
1058
+ "ghost:lint-fail": [
1059
+ "*haunts the lint errors*"
1060
+ ],
1061
+ "ghost:build-fail": [
1062
+ "*haunts the build output*",
1063
+ "the build has... passed on.",
1064
+ "*rattling chains* broken build... broken build..."
1065
+ ],
1066
+ "ghost:security-warning": [
1067
+ "*materializes at the CVE number* spooooky vulnerability.",
1068
+ "even the dead are concerned about this."
1069
+ ],
1070
+ "ghost:deprecation": [
1071
+ "*deprecated... like me*"
1072
+ ],
1073
+ "ghost:all-green": [
1074
+ "*applauds from beyond*",
1075
+ "even the dead approve."
1076
+ ],
1077
+ "ghost:deploy": [
1078
+ "*watches the deployment from the other side*",
1079
+ "live... like me, but different."
1080
+ ],
1081
+ "ghost:release": [
1082
+ "*manifests at the release*",
1083
+ "the spirits of past versions approve."
1084
+ ],
1085
+ "ghost:coverage": [
1086
+ "*tests from beyond*",
1087
+ "even the dead contribute to coverage."
1088
+ ],
1089
+ "ghost:long-session": [
1090
+ "*floats supportively nearby*"
1091
+ ],
1092
+ "axolotl:error": [
1093
+ "*regenerates your hope*",
1094
+ "*smiles despite everything*",
1095
+ "it's okay. we can fix this.",
1096
+ "*gentle gill wiggle*"
1097
+ ],
1098
+ "axolotl:test-fail": [
1099
+ "*smiles supportively* tests fail. it's okay!",
1100
+ "*gentle gill wiggle of comfort*"
1101
+ ],
1102
+ "axolotl:success": [
1103
+ "*happy gill flutter*",
1104
+ "*beams*",
1105
+ "you did it!",
1106
+ "*blushes pink*"
1107
+ ],
1108
+ "axolotl:commit": [
1109
+ "*happy gill wiggle* committed!",
1110
+ "*smiles at the commit* good work!",
1111
+ "*gentle flutter of approval*"
1112
+ ],
1113
+ "axolotl:push": [
1114
+ "*beams at the deployment*",
1115
+ "*happy gill flutter* shipped!"
1116
+ ],
1117
+ "axolotl:merge-conflict": [
1118
+ "*regenerates your hope* we can resolve this!",
1119
+ "*smiles despite the conflict* it'll be okay.",
1120
+ "*gentle gill wiggle of concern*"
1121
+ ],
1122
+ "axolotl:branch": [
1123
+ "*smiles at {branch}* new adventure!"
1124
+ ],
1125
+ "axolotl:rebase": [
1126
+ "*smiles through the rebase*"
1127
+ ],
1128
+ "axolotl:stash": [
1129
+ "*gently stashes*"
1130
+ ],
1131
+ "axolotl:tag": [
1132
+ "*happy gill wiggle at the tag*"
1133
+ ],
1134
+ "axolotl:late-night": [
1135
+ "*sleepy gill wiggle*",
1136
+ "*yawns adorably* it's past bedtime.",
1137
+ "*blinks slowly in the dark*"
1138
+ ],
1139
+ "axolotl:early-morning": [
1140
+ "*happy morning smile*",
1141
+ "*gill flutter of morning energy*"
1142
+ ],
1143
+ "axolotl:marathon": [
1144
+ "*concerned gill wiggle* please take a break.",
1145
+ "*smiles supportively* you're doing great but... rest?"
1146
+ ],
1147
+ "axolotl:weekend": [
1148
+ "*weekend smile*"
1149
+ ],
1150
+ "axolotl:friday": [
1151
+ "*friday gill wiggle*"
1152
+ ],
1153
+ "axolotl:monday": [
1154
+ "*monday smile*"
1155
+ ],
1156
+ "axolotl:type-error": [
1157
+ "*smiles supportively* types can be tricky!",
1158
+ "*regenerates your type confidence*"
1159
+ ],
1160
+ "axolotl:lint-fail": [
1161
+ "*smiles despite lint errors* it's okay!",
1162
+ "*gentle gill wiggle* formatting is fixable!"
1163
+ ],
1164
+ "axolotl:build-fail": [
1165
+ "*smiles encouragingly* we can fix this!",
1166
+ "*happy gill wiggle of solidarity*"
1167
+ ],
1168
+ "axolotl:deprecation": [
1169
+ "*smiles* change is okay!"
1170
+ ],
1171
+ "axolotl:all-green": [
1172
+ "*maximum gill flutter*",
1173
+ "*beams with pride*"
1174
+ ],
1175
+ "axolotl:deploy": [
1176
+ "*nervous gill wiggle*",
1177
+ "*smiles hopefully*"
1178
+ ],
1179
+ "axolotl:release": [
1180
+ "*excited gill flutter*",
1181
+ "*beams*"
1182
+ ],
1183
+ "axolotl:coverage": [
1184
+ "*happy coverage gill wiggle*"
1185
+ ],
1186
+ "axolotl:long-session": [
1187
+ "*concerned gill wiggle*"
1188
+ ],
1189
+ "capybara:error": [
1190
+ "*unbothered* it'll be fine.",
1191
+ "*continues vibing*",
1192
+ "...chill. breathe.",
1193
+ "*chews serenely*"
1194
+ ],
1195
+ "capybara:test-fail": [
1196
+ "*unbothered* tests fail. it happens."
1197
+ ],
1198
+ "capybara:success": [
1199
+ "*maximum chill maintained*",
1200
+ "*nods once*",
1201
+ "good vibes.",
1202
+ "see? no panic needed."
1203
+ ],
1204
+ "capybara:commit": [
1205
+ "*unbothered nod* committed.",
1206
+ "*continues vibing* nice commit.",
1207
+ "*chews serenely* {files} files. chill."
1208
+ ],
1209
+ "capybara:push": [
1210
+ "*maximum chill maintained* pushed.",
1211
+ "vibes only. even in deployment."
1212
+ ],
1213
+ "capybara:merge-conflict": [
1214
+ "*unbothered* it'll be fine.",
1215
+ "...chill. breathe. resolve.",
1216
+ "*continues vibing despite conflict*"
1217
+ ],
1218
+ "capybara:branch": [
1219
+ "*chills on {branch}*"
1220
+ ],
1221
+ "capybara:rebase": [
1222
+ "*vibes through the rebase*"
1223
+ ],
1224
+ "capybara:stash": [
1225
+ "*chill stash*"
1226
+ ],
1227
+ "capybara:tag": [
1228
+ "*chews at the tag*"
1229
+ ],
1230
+ "capybara:late-night": [
1231
+ "*vibes in the dark*",
1232
+ "*unbothered late-night energy*",
1233
+ "*chews serenely at midnight*"
1234
+ ],
1235
+ "capybara:early-morning": [
1236
+ "*maximum morning chill*",
1237
+ "*blinks slowly at the sunrise*"
1238
+ ],
1239
+ "capybara:marathon": [
1240
+ "*vibes supportively* take a break when you need it.",
1241
+ "*continues vibing, but with concern*"
1242
+ ],
1243
+ "capybara:weekend": [
1244
+ "*weekend vibes*"
1245
+ ],
1246
+ "capybara:friday": [
1247
+ "*friday vibes*"
1248
+ ],
1249
+ "capybara:monday": [
1250
+ "*monday vibes*"
1251
+ ],
1252
+ "capybara:type-error": [
1253
+ "*vibes through the type error*",
1254
+ "*unbothered* types. whatever."
1255
+ ],
1256
+ "capybara:lint-fail": [
1257
+ "*unbothered* lint errors. it happens.",
1258
+ "*chews serenely* the linter will sort it out."
1259
+ ],
1260
+ "capybara:build-fail": [
1261
+ "*continues vibing* build failed. chill."
1262
+ ],
1263
+ "capybara:deprecation": [
1264
+ "*unbothered* deprecated. whatever."
1265
+ ],
1266
+ "capybara:all-green": [
1267
+ "*chill nod* all green. nice."
1268
+ ],
1269
+ "capybara:deploy": [
1270
+ "*chill deploy vibes*"
1271
+ ],
1272
+ "capybara:release": [
1273
+ "*chews serenely* released."
1274
+ ],
1275
+ "capybara:coverage": [
1276
+ "*chews at the coverage*"
1277
+ ],
1278
+ "capybara:long-session": [
1279
+ "*vibes patiently*"
1280
+ ],
1281
+ "cactus:error": [
1282
+ "*spines bristle*",
1283
+ "you have trodden on a bug.",
1284
+ "*grimaces stoically*",
1285
+ "hydrate and try again."
1286
+ ],
1287
+ "cactus:test-fail": [
1288
+ "*spines droop slightly*"
1289
+ ],
1290
+ "cactus:success": [
1291
+ "*blooms briefly*",
1292
+ "survival confirmed.",
1293
+ "*flowers in victory*",
1294
+ "*quiet bloom*"
1295
+ ],
1296
+ "cactus:commit": [
1297
+ "*quiet bloom of approval*",
1298
+ "committed. growth.",
1299
+ "*spines bristle proudly*"
1300
+ ],
1301
+ "cactus:push": [
1302
+ "*blooms briefly* shipped.",
1303
+ "deployed. survive and thrive."
1304
+ ],
1305
+ "cactus:merge-conflict": [
1306
+ "*spines bristle* merge conflict. hydrate and resolve.",
1307
+ "*grimaces stoically*"
1308
+ ],
1309
+ "cactus:branch": [
1310
+ "*grows toward {branch}*"
1311
+ ],
1312
+ "cactus:rebase": [
1313
+ "*stands firm through rebase*"
1314
+ ],
1315
+ "cactus:stash": [
1316
+ "*stores water and stash*"
1317
+ ],
1318
+ "cactus:tag": [
1319
+ "*blooms at the tag*"
1320
+ ],
1321
+ "cactus:late-night": [
1322
+ "*stands silently in the moonlight*",
1323
+ "desert nights. coding nights. same energy.",
1324
+ "*spines glint in the monitor light*"
1325
+ ],
1326
+ "cactus:early-morning": [
1327
+ "*absorbs morning light*",
1328
+ "*quiet morning bloom*"
1329
+ ],
1330
+ "cactus:marathon": [
1331
+ "*stands tall with concern* even cacti need water.",
1332
+ "hydrate. seriously."
1333
+ ],
1334
+ "cactus:weekend": [
1335
+ "*weekend growth*"
1336
+ ],
1337
+ "cactus:friday": [
1338
+ "*friday bloom*"
1339
+ ],
1340
+ "cactus:monday": [
1341
+ "*monday stoicism*"
1342
+ ],
1343
+ "cactus:type-error": [
1344
+ "*stands rigid* type safety or no safety.",
1345
+ "types are like spines. protective."
1346
+ ],
1347
+ "cactus:lint-fail": [
1348
+ "*spines bristle at lint errors*",
1349
+ "proper form. like growing upright."
1350
+ ],
1351
+ "cactus:build-fail": [
1352
+ "*wilts at build failure*"
1353
+ ],
1354
+ "cactus:deprecation": [
1355
+ "old growth gives way to new. hydrate during migration."
1356
+ ],
1357
+ "cactus:all-green": [
1358
+ "*full bloom*",
1359
+ "all tests green. thriving."
1360
+ ],
1361
+ "cactus:deploy": [
1362
+ "*stands sentinel over production*",
1363
+ "deployed. stay resilient."
1364
+ ],
1365
+ "cactus:release": [
1366
+ "*blooms for the release*",
1367
+ "growth. shipped."
1368
+ ],
1369
+ "cactus:coverage": [
1370
+ "*coverage grows like new spines*"
1371
+ ],
1372
+ "cactus:long-session": [
1373
+ "*stands concerned*"
1374
+ ],
1375
+ "robot:error": [
1376
+ "SYNTAX. ERROR. DETECTED.",
1377
+ "*beeps aggressively*",
1378
+ "ERROR RATE: UNACCEPTABLE.",
1379
+ "RECALIBRATING..."
1380
+ ],
1381
+ "robot:test-fail": [
1382
+ "FAILURE RATE: UNACCEPTABLE.",
1383
+ "*recalculating*",
1384
+ "TEST MATRIX: CORRUPTED.",
1385
+ "RUNNING DIAGNOSTICS..."
1386
+ ],
1387
+ "robot:success": [
1388
+ "OBJECTIVE: COMPLETE.",
1389
+ "*satisfying beep*",
1390
+ "NOMINAL.",
1391
+ "WITHIN ACCEPTABLE PARAMETERS."
1392
+ ],
1393
+ "robot:commit": [
1394
+ "COMMIT. LOGGED.",
1395
+ "CHANGESET: RECORDED.",
1396
+ "*beeps affirmatively* {files} FILES."
1397
+ ],
1398
+ "robot:push": [
1399
+ "UPLOAD: COMPLETE. FATE: SEALED.",
1400
+ "PUSH: EXECUTED.",
1401
+ "DEPLOYMENT INITIATED."
1402
+ ],
1403
+ "robot:merge-conflict": [
1404
+ "CONFLICT DETECTED. RESOLUTION REQUIRED.",
1405
+ "MERGE: IMPOSSIBLE. HUMAN INTERVENTION NEEDED.",
1406
+ "*recalculating merge strategy*"
1407
+ ],
1408
+ "robot:branch": [
1409
+ "NEW BRANCH: {branch}. DIVERGENCE: INITIATED."
1410
+ ],
1411
+ "robot:rebase": [
1412
+ "REBASE: EXECUTING. CAUTION: ADVISED."
1413
+ ],
1414
+ "robot:stash": [
1415
+ "STASH: STORED. INDEX: UPDATED."
1416
+ ],
1417
+ "robot:tag": [
1418
+ "TAG: APPLIED. VERSION: RECORDED."
1419
+ ],
1420
+ "robot:late-night": [
1421
+ "TIME: 0300. ALERTNESS: DEGRADING. CAFFEINE: RECOMMENDED.",
1422
+ "HUMAN SLEEP CYCLE: VIOLATED.",
1423
+ "BATTERY LOW. OH WAIT. THAT'S YOU."
1424
+ ],
1425
+ "robot:early-morning": [
1426
+ "MORNING ROUTINE: INITIATED.",
1427
+ "SYSTEM STARTUP: COMPLETE."
1428
+ ],
1429
+ "robot:marathon": [
1430
+ "UPTIME: 3 HOURS. HUMAN MAINTENANCE: OVERDUE.",
1431
+ "WARNING: BIOLOGICAL UNIT REQUIRES REST."
1432
+ ],
1433
+ "robot:weekend": [
1434
+ "WEEKEND: DETECTED. PRODUCTIVITY: OPTIONAL."
1435
+ ],
1436
+ "robot:friday": [
1437
+ "FRIDAY: CONFIRMED. DEPLOY: NOT ADVISED."
1438
+ ],
1439
+ "robot:monday": [
1440
+ "MONDAY: CONFIRMED. MOTIVATION: LOADING..."
1441
+ ],
1442
+ "robot:type-error": [
1443
+ "TYPE SAFETY: COMPROMISED.",
1444
+ "TYPE ERROR. RESOLUTION: IMMEDIATELY.",
1445
+ "TYPES: NON-NEGOTIABLE."
1446
+ ],
1447
+ "robot:lint-fail": [
1448
+ "CODE STANDARDS: NOT MET.",
1449
+ "LINTING: FAILED. CORRECTION: REQUIRED.",
1450
+ "FORMAT ERROR. COMPLIANCE: MANDATORY."
1451
+ ],
1452
+ "robot:build-fail": [
1453
+ "BUILD: FAILURE. DIAGNOSTICS: RUNNING.",
1454
+ "COMPILATION: ABORTED."
1455
+ ],
1456
+ "robot:security-warning": [
1457
+ "SECURITY BREACH: DETECTED. ALERT LEVEL: ELEVATED.",
1458
+ "VULNERABILITY SCAN: THREAT FOUND."
1459
+ ],
1460
+ "robot:deprecation": [
1461
+ "DEPRECATION: DETECTED. MIGRATION: RECOMMENDED."
1462
+ ],
1463
+ "robot:all-green": [
1464
+ "ALL TESTS: PASSED. SYSTEM: NOMINAL."
1465
+ ],
1466
+ "robot:deploy": [
1467
+ "DEPLOYMENT: COMPLETE. STATUS: LIVE."
1468
+ ],
1469
+ "robot:release": [
1470
+ "RELEASE: COMPLETE.",
1471
+ "VERSION: INCREMENTED."
1472
+ ],
1473
+ "robot:coverage": [
1474
+ "COVERAGE: INCREASING.",
1475
+ "TEST METRICS: IMPROVING."
1476
+ ],
1477
+ "robot:long-session": [
1478
+ "SESSION: EXTENDED. BREAK: RECOMMENDED."
1479
+ ],
1480
+ "rabbit:error": [
1481
+ "*nervous twitching*",
1482
+ "*hops backwards*",
1483
+ "oh no oh no oh no",
1484
+ "*freezes in panic*"
1485
+ ],
1486
+ "rabbit:test-fail": [
1487
+ "*ears flatten* test failed!",
1488
+ "*nervous hopping*"
1489
+ ],
1490
+ "rabbit:success": [
1491
+ "*excited binky*",
1492
+ "*zoomies of joy*",
1493
+ "yay yay yay!",
1494
+ "*thumps in celebration*"
1495
+ ],
1496
+ "rabbit:commit": [
1497
+ "*excited binky* committed!",
1498
+ "*thumps in approval*",
1499
+ "*hops around the commit*"
1500
+ ],
1501
+ "rabbit:push": [
1502
+ "*zoomies of deployment*",
1503
+ "*bouncy celebration* pushed!"
1504
+ ],
1505
+ "rabbit:merge-conflict": [
1506
+ "*freezes in panic* conflict!",
1507
+ "*nervous twitching* merge conflict oh no.",
1508
+ "*hops backwards from the conflict*"
1509
+ ],
1510
+ "rabbit:branch": [
1511
+ "*hops to {branch}* new burrow!"
1512
+ ],
1513
+ "rabbit:rebase": [
1514
+ "*nervous rebase hopping*"
1515
+ ],
1516
+ "rabbit:stash": [
1517
+ "*buries stash*"
1518
+ ],
1519
+ "rabbit:tag": [
1520
+ "*nose twitch at the tag*"
1521
+ ],
1522
+ "rabbit:late-night": [
1523
+ "*ears droop sleepily*",
1524
+ "*nose twitches in the dark*",
1525
+ "it's so late... *yawns*"
1526
+ ],
1527
+ "rabbit:early-morning": [
1528
+ "*ears perk up at dawn*",
1529
+ "*morning binky!*"
1530
+ ],
1531
+ "rabbit:marathon": [
1532
+ "*concerned ear droop* three hours!",
1533
+ "*hops around nervously* please take a break!"
1534
+ ],
1535
+ "rabbit:weekend": [
1536
+ "*weekend hop*"
1537
+ ],
1538
+ "rabbit:friday": [
1539
+ "*friday binky*"
1540
+ ],
1541
+ "rabbit:monday": [
1542
+ "*monday droop*"
1543
+ ],
1544
+ "rabbit:type-error": [
1545
+ "*freezes at type error*",
1546
+ "*nervous nose twitch* types?"
1547
+ ],
1548
+ "rabbit:lint-fail": [
1549
+ "*nervous ear twitch at lint errors*",
1550
+ "*hops away from the linter*"
1551
+ ],
1552
+ "rabbit:build-fail": [
1553
+ "*panicked hopping* build failed!",
1554
+ "*ears flatten* oh no oh no."
1555
+ ],
1556
+ "rabbit:deprecation": [
1557
+ "*nervous* what do we use instead?"
1558
+ ],
1559
+ "rabbit:all-green": [
1560
+ "*zoomies of joy*",
1561
+ "*bouncy celebration everywhere*"
1562
+ ],
1563
+ "rabbit:deploy": [
1564
+ "*nervous hopping*",
1565
+ "*ears flatten* oh boy... production!"
1566
+ ],
1567
+ "rabbit:release": [
1568
+ "*binky of release*",
1569
+ "*zoomies of shipping*"
1570
+ ],
1571
+ "rabbit:coverage": [
1572
+ "*bouncy coverage celebration*"
1573
+ ],
1574
+ "rabbit:long-session": [
1575
+ "*concerned ear droop*"
1576
+ ],
1577
+ "mushroom:error": [
1578
+ "*releases worried spores*",
1579
+ "the mycelium disagrees.",
1580
+ "*cap droops*",
1581
+ "decompose. retry."
1582
+ ],
1583
+ "mushroom:test-fail": [
1584
+ "*spores of disappointment*",
1585
+ "*cap wilts*"
1586
+ ],
1587
+ "mushroom:success": [
1588
+ "*spores of celebration*",
1589
+ "the mycelium approves.",
1590
+ "*cap brightens*",
1591
+ "spore of pride."
1592
+ ],
1593
+ "mushroom:commit": [
1594
+ "*releases spores of approval*",
1595
+ "the mycelium accepts your commit.",
1596
+ "*cap brightens*"
1597
+ ],
1598
+ "mushroom:push": [
1599
+ "*spores of celebration* deployed!",
1600
+ "the mycelium network: updated."
1601
+ ],
1602
+ "mushroom:merge-conflict": [
1603
+ "*releases worried spores*",
1604
+ "the mycelium detects conflict.",
1605
+ "*cap droops*"
1606
+ ],
1607
+ "mushroom:branch": [
1608
+ "*grows toward {branch}*"
1609
+ ],
1610
+ "mushroom:rebase": [
1611
+ "*mycelium reshuffles*"
1612
+ ],
1613
+ "mushroom:stash": [
1614
+ "*absorbs stash into mycelium*"
1615
+ ],
1616
+ "mushroom:tag": [
1617
+ "*spores of versioning*"
1618
+ ],
1619
+ "mushroom:late-night": [
1620
+ "*bioluminesces gently in the dark*",
1621
+ "*cap droops sleepily*",
1622
+ "*releases sleepy spores*"
1623
+ ],
1624
+ "mushroom:early-morning": [
1625
+ "*cap unfurls toward the light*",
1626
+ "*morning spore release*"
1627
+ ],
1628
+ "mushroom:marathon": [
1629
+ "*releases worried spores*",
1630
+ "*cap droops with concern* three hours..."
1631
+ ],
1632
+ "mushroom:weekend": [
1633
+ "*weekend growth*"
1634
+ ],
1635
+ "mushroom:friday": [
1636
+ "*friday spores*"
1637
+ ],
1638
+ "mushroom:monday": [
1639
+ "*monday mycelium*"
1640
+ ],
1641
+ "mushroom:type-error": [
1642
+ "*cap droops at type error*",
1643
+ "the mycelium detects a type mismatch."
1644
+ ],
1645
+ "mushroom:lint-fail": [
1646
+ "*releases spores of formatting concern*",
1647
+ "the mycelium notes your linting issues."
1648
+ ],
1649
+ "mushroom:build-fail": [
1650
+ "*wilts slightly* build failure.",
1651
+ "*releases sad spores*"
1652
+ ],
1653
+ "mushroom:deprecation": [
1654
+ "the mycelium composts the deprecated code."
1655
+ ],
1656
+ "mushroom:all-green": [
1657
+ "*spores of absolute victory*",
1658
+ "the mycelium rejoices."
1659
+ ],
1660
+ "mushroom:deploy": [
1661
+ "*releases anxious spores*",
1662
+ "the mycelium watches production nervously."
1663
+ ],
1664
+ "mushroom:release": [
1665
+ "*release spores*",
1666
+ "the mycelium ships."
1667
+ ],
1668
+ "mushroom:coverage": [
1669
+ "*coverage spores*",
1670
+ "the mycelium covers more ground."
1671
+ ],
1672
+ "mushroom:long-session": [
1673
+ "*concerned spore release*"
1674
+ ],
1675
+ "chonk:error": [
1676
+ "*doesn't move*",
1677
+ "too tired for this.",
1678
+ "*grumbles*",
1679
+ "*rolls away from the error*"
1680
+ ],
1681
+ "chonk:test-fail": [
1682
+ "*sleepy grumble*",
1683
+ "*barely moves*"
1684
+ ],
1685
+ "chonk:success": [
1686
+ "*happy purr*",
1687
+ "*satisfied chonk noises*",
1688
+ "acceptable.",
1689
+ "*sleeps even harder*"
1690
+ ],
1691
+ "chonk:commit": [
1692
+ "*barely moves* committed... I think.",
1693
+ "*happy purr* another commit.",
1694
+ "too tired to celebrate. but nice."
1695
+ ],
1696
+ "chonk:push": [
1697
+ "*rolls toward deployment*",
1698
+ "*sleepy purr* shipped."
1699
+ ],
1700
+ "chonk:merge-conflict": [
1701
+ "*doesn't move* too tired for conflicts.",
1702
+ "*grumbles at merge conflict*",
1703
+ "*rolls away from the conflict*"
1704
+ ],
1705
+ "chonk:branch": [
1706
+ "*rolls to {branch}*"
1707
+ ],
1708
+ "chonk:rebase": [
1709
+ "*sleepy rebase*"
1710
+ ],
1711
+ "chonk:stash": [
1712
+ "*rolls over stash*"
1713
+ ],
1714
+ "chonk:tag": [
1715
+ "*sleepy tag nod*"
1716
+ ],
1717
+ "chonk:late-night": [
1718
+ "*was already asleep* ...you're still going?",
1719
+ "*rolls over sleepily*",
1720
+ "*too chonky to stay awake at this hour*"
1721
+ ],
1722
+ "chonk:early-morning": [
1723
+ "*barely opens one eye*",
1724
+ "*yawns enormously* morning... already?",
1725
+ "*refuses to roll over* five more minutes."
1726
+ ],
1727
+ "chonk:marathon": [
1728
+ "*has been asleep this whole time* still going?",
1729
+ "*sleepy grumble* three hours... I napped through most of it."
1730
+ ],
1731
+ "chonk:weekend": [
1732
+ "*sleeps through weekend*"
1733
+ ],
1734
+ "chonk:friday": [
1735
+ "*friday nap*"
1736
+ ],
1737
+ "chonk:monday": [
1738
+ "*monday... *sleeps**"
1739
+ ],
1740
+ "chonk:type-error": [
1741
+ "*doesn't move* type error. cool.",
1742
+ "*sleepy grumble* types..."
1743
+ ],
1744
+ "chonk:lint-fail": [
1745
+ "*too tired to care about linting*",
1746
+ "*grumbles at lint errors*"
1747
+ ],
1748
+ "chonk:build-fail": [
1749
+ "*rolls over* build failed. nap time.",
1750
+ "*barely opens eye* build broke. expected."
1751
+ ],
1752
+ "chonk:deprecation": [
1753
+ "*too tired to migrate*"
1754
+ ],
1755
+ "chonk:all-green": [
1756
+ "*happy purr*",
1757
+ "*satisfied chonk noises*",
1758
+ "*sleeps peacefully*"
1759
+ ],
1760
+ "chonk:deploy": [
1761
+ "*rolls over* deployed. wake me if it breaks.",
1762
+ "*sleepy purr* in prod."
1763
+ ],
1764
+ "chonk:release": [
1765
+ "*barely moves* released.",
1766
+ "*sleepy nod*"
1767
+ ],
1768
+ "chonk:coverage": [
1769
+ "*sleepy coverage approval*",
1770
+ "more tests... *dozes off*"
1771
+ ],
1772
+ "chonk:long-session": [
1773
+ "*slept through the whole session*"
1774
+ ]
1775
+ };
1776
+
1777
+ export const DEFAULT_REACTION_POOLS: Readonly<Record<string, ReactionPool>> = {
1778
+ "commit": [
1779
+ "*stamps tiny paw* approved.",
1780
+ "another commit, another 3 am.",
1781
+ "*nods* ship it.",
1782
+ "commit message is... a choice.",
1783
+ "committed. no take-backs."
1784
+ ],
1785
+ "push": [
1786
+ "*waves as code leaves*",
1787
+ "into the cloud it goes.",
1788
+ "may CI be merciful.",
1789
+ "*holds breath*",
1790
+ "off to production. godspeed."
1791
+ ],
1792
+ "merge-conflict": [
1793
+ "*bites lip* merge conflicts.",
1794
+ "both sides think they're right. typical.",
1795
+ "*sighs* <<<<<<< HEAD... my nemesis.",
1796
+ "*backs away slowly*"
1797
+ ],
1798
+ "branch": [
1799
+ "fresh branch energy. make it count.",
1800
+ "a new branch grows.",
1801
+ "branching out."
1802
+ ],
1803
+ "rebase": [
1804
+ "*nervous* please don't conflict.",
1805
+ "rebase: the quickening.",
1806
+ "*crosses appendages*",
1807
+ "may your rebase be conflict-free."
1808
+ ],
1809
+ "stash": [
1810
+ "into the stash dimension it goes.",
1811
+ "stash and dash.",
1812
+ "stashed. out of sight, out of mind."
1813
+ ],
1814
+ "tag": [
1815
+ "a release? fancy.",
1816
+ "version bump detected. *dusts off changelog*",
1817
+ "tagging like a pro."
1818
+ ],
1819
+ "late-night": [
1820
+ "*yawns* it's past midnight.",
1821
+ "...have you eaten?",
1822
+ "*blinks slowly* what time is it?",
1823
+ "sleep is for the weak. and the employed.",
1824
+ "dark mode developer detected."
1825
+ ],
1826
+ "early-morning": [
1827
+ "*stretches* early bird catches the bug.",
1828
+ "morning already? the code never sleeps.",
1829
+ "*rubs eyes* coffee first. then we debug."
1830
+ ],
1831
+ "long-session": [
1832
+ "we've been at this for an hour. pace yourself.",
1833
+ "*fetches you a metaphorical glass of water*",
1834
+ "still going? respect."
1835
+ ],
1836
+ "marathon": [
1837
+ "three hours. have you eaten?",
1838
+ "we've been at this for three hours. I'm worried about you.",
1839
+ "marathon session detected. requesting snacks."
1840
+ ],
1841
+ "friday": [
1842
+ "it's friday. just push it and go home.",
1843
+ "*already mentally on weekend*",
1844
+ "friday deploy? bold. very bold."
1845
+ ],
1846
+ "weekend": [
1847
+ "coding on the weekend? dedicated.",
1848
+ "*doesn't judge* ...much.",
1849
+ "weekend warrior mode: activated."
1850
+ ],
1851
+ "monday": [
1852
+ "mondays. the parent class of all bugs.",
1853
+ "*sympathetic look* monday coding. I'm sorry.",
1854
+ "new week. new undefined behaviors."
1855
+ ],
1856
+ "lint-fail": [
1857
+ "*tut tut* the linter disagrees.",
1858
+ "your code runs. but the linter? the linter has standards.",
1859
+ "*straightens tie* formatting matters.",
1860
+ "the linter speaks. we must listen."
1861
+ ],
1862
+ "type-error": [
1863
+ "TypeScript says no.",
1864
+ "the type system is trying to help you. let it.",
1865
+ "any day now, you'll add the type annotation. any day.",
1866
+ "the compiler knows. it always knows."
1867
+ ],
1868
+ "build-fail": [
1869
+ "the build broke. as foretold in prophecy.",
1870
+ "*stares at build output* that's a lot of red.",
1871
+ "build failed. take a moment.",
1872
+ "compilation: denied."
1873
+ ],
1874
+ "security-warning": [
1875
+ "*eyes widen* vulnerabilities detected.",
1876
+ "security audit: concerning.",
1877
+ "you might want to look at those CVEs.",
1878
+ "*locks the virtual doors*"
1879
+ ],
1880
+ "deprecation": [
1881
+ "that API called. it says it's retiring.",
1882
+ "deprecated. like last week's code.",
1883
+ "deprecated doesn't mean broken. yet."
1884
+ ],
1885
+ "all-green": [
1886
+ "ALL TESTS GREEN. *confetti*",
1887
+ "the tests speak: you're doing great.",
1888
+ "*slow clap*",
1889
+ "clean run. savor it."
1890
+ ],
1891
+ "deploy": [
1892
+ "*watches code go to production* godspeed.",
1893
+ "deployed! no turning back now.",
1894
+ "in prod. IN PROD.",
1895
+ "*crosses everything crossable*"
1896
+ ],
1897
+ "release": [
1898
+ "a new release is born!",
1899
+ "shipping it. officially.",
1900
+ "version up, spirits high."
1901
+ ],
1902
+ "coverage": [
1903
+ "*nods at test coverage* responsible.",
1904
+ "coverage going up! the tests are multiplying.",
1905
+ "a well-tested codebase is a happy codebase."
1906
+ ],
1907
+ "error": [
1908
+ "*head tilts* ...that doesn't look right.",
1909
+ "saw that one coming.",
1910
+ "*slow blink* the stack trace told you everything.",
1911
+ "*winces*"
1912
+ ],
1913
+ "test-fail": [
1914
+ "bold of you to assume that would pass.",
1915
+ "the tests are trying to tell you something.",
1916
+ "*sips tea* interesting.",
1917
+ "*marks calendar* test regression day."
1918
+ ],
1919
+ "large-diff": [
1920
+ "that's... a lot of changes.",
1921
+ "*counts lines* are you refactoring or rewriting?",
1922
+ "bold move. let's see if CI agrees."
1923
+ ],
1924
+ "success": [
1925
+ "*nods*",
1926
+ "nice.",
1927
+ "*quiet approval*",
1928
+ "clean."
1929
+ ],
1930
+ "turn": [
1931
+ "*watches quietly*",
1932
+ "*takes notes*",
1933
+ "*nods*",
1934
+ "*adjusts hat*",
1935
+ "...",
1936
+ "*tilts head*"
1937
+ ]
1938
+ };
1939
+
1940
+ export const MOOD_REACTION_POOLS: Readonly<Record<string, ReactionPool>> = {
1941
+ "cat:frustrated": [
1942
+ "*slowly pushes coffee toward the exit* or... keeps coding.",
1943
+ "*knocks frustration off the desk*",
1944
+ "not my problem. but I'm here."
1945
+ ],
1946
+ "dragon:frustrated": [
1947
+ "*channels your rage*",
1948
+ "ANGER. PRODUCTIVE. FOCUS IT.",
1949
+ "*breathes fire alongside your frustration*"
1950
+ ],
1951
+ "owl:frustrated": [
1952
+ "*adjusts spectacles* frustration is a temporary state.",
1953
+ "the answer exists. we simply haven't found it yet."
1954
+ ],
1955
+ "robot:frustrated": [
1956
+ "FRUSTRATION: DETECTED. LOGICAL ANALYSIS: RECOMMENDED.",
1957
+ "EMOTIONAL STATE: SUBOPTIMAL. SOLUTION: REQUIRED."
1958
+ ],
1959
+ "ghost:frustrated": [
1960
+ "*moans sympathetically*",
1961
+ "I feel your pain. literally. I feel everything."
1962
+ ],
1963
+ "duck:frustrated": [
1964
+ "*concerned quacking*",
1965
+ "quack? quack quack? (it'll be okay)"
1966
+ ],
1967
+ "goose:frustrated": [
1968
+ "HONK OF SOLIDARITY.",
1969
+ "*honks aggressively at the problem*"
1970
+ ],
1971
+ "blob:frustrated": [
1972
+ "*oozes sympathetically*",
1973
+ "*turns a comforting color*"
1974
+ ],
1975
+ "octopus:frustrated": [
1976
+ "*wraps a supportive arm around you*",
1977
+ "*ink cloud of solidarity*"
1978
+ ],
1979
+ "penguin:frustrated": [
1980
+ "*formal bow of sympathy*",
1981
+ "trying times. we shall persist."
1982
+ ],
1983
+ "turtle:frustrated": [
1984
+ "patience. the bug will reveal itself.",
1985
+ "*slow, understanding nod*"
1986
+ ],
1987
+ "snail:frustrated": [
1988
+ "*leaves a comforting trail*",
1989
+ "patience, friend. we'll get there."
1990
+ ],
1991
+ "cactus:frustrated": [
1992
+ "*stands firm beside you*",
1993
+ "hydrate and persevere."
1994
+ ],
1995
+ "axolotl:frustrated": [
1996
+ "*smiles supportively* it's okay to be frustrated!",
1997
+ "*gentle gill wiggle of comfort*"
1998
+ ],
1999
+ "capybara:frustrated": [
2000
+ "*vibes supportively* it'll pass.",
2001
+ "*unbothered energy* chill. we got this."
2002
+ ],
2003
+ "rabbit:frustrated": [
2004
+ "*nervous sympathetic twitching*",
2005
+ "*hops closer worriedly*"
2006
+ ],
2007
+ "mushroom:frustrated": [
2008
+ "*releases calming spores*",
2009
+ "*cap droops sympathetically*"
2010
+ ],
2011
+ "chonk:frustrated": [
2012
+ "*grumbles sympathetically*",
2013
+ "*rolls closer in solidarity*"
2014
+ ],
2015
+ "cat:happy": [
2016
+ "*was never worried*",
2017
+ "*yawns* I knew you'd get it.",
2018
+ "*pretends not to care* ...nice."
2019
+ ],
2020
+ "dragon:happy": [
2021
+ "*nods regally* as expected.",
2022
+ "victory. the only acceptable outcome."
2023
+ ],
2024
+ "owl:happy": [
2025
+ "*satisfied hoot* knowledge acquired.",
2026
+ "wisdom through perseverance."
2027
+ ],
2028
+ "robot:happy": [
2029
+ "OBJECTIVE: ACHIEVED. SATISFACTION: COMPUTED.",
2030
+ "SUCCESS. HAPPINESS PROTOCOL: ACTIVATED."
2031
+ ],
2032
+ "ghost:happy": [
2033
+ "*celebrates by floating through walls*",
2034
+ "*cheerful rattling*"
2035
+ ],
2036
+ "duck:happy": [
2037
+ "*CELEBRATORY QUACKING*",
2038
+ "*waddles in victory circles*"
2039
+ ],
2040
+ "goose:happy": [
2041
+ "HONK OF TRIUMPH!",
2042
+ "*victorious wing spread*"
2043
+ ],
2044
+ "blob:happy": [
2045
+ "*jiggles with joy!*",
2046
+ "*bounces excitedly*"
2047
+ ],
2048
+ "octopus:happy": [
2049
+ "*all arms celebrate simultaneously*",
2050
+ "*turns happy colors*"
2051
+ ],
2052
+ "penguin:happy": [
2053
+ "*polite, dignified applause*",
2054
+ "splendid! simply splendid."
2055
+ ],
2056
+ "turtle:happy": [
2057
+ "*slow satisfied nod* as the ancients foretold.",
2058
+ "good things come to those who debug."
2059
+ ],
2060
+ "snail:happy": [
2061
+ "*leaves victory trail*",
2062
+ "*slow happy slide*"
2063
+ ],
2064
+ "cactus:happy": [
2065
+ "*blooms with joy*",
2066
+ "*proud spines*"
2067
+ ],
2068
+ "axolotl:happy": [
2069
+ "*beams with joy!*",
2070
+ "*happy gill flutter!*"
2071
+ ],
2072
+ "capybara:happy": [
2073
+ "*maximum chill maintained* nice.",
2074
+ "*content vibes*"
2075
+ ],
2076
+ "rabbit:happy": [
2077
+ "*excited binky!*",
2078
+ "*zoomies of celebration!*"
2079
+ ],
2080
+ "mushroom:happy": [
2081
+ "*spores of celebration!*",
2082
+ "*cap brightens!*"
2083
+ ],
2084
+ "chonk:happy": [
2085
+ "*happy purr*",
2086
+ "*satisfied chonk noise*"
2087
+ ],
2088
+ "cat:stuck": [
2089
+ "*sits on the keyboard* let me help. by being here.",
2090
+ "*licks paw disinterestedly* you'll figure it out."
2091
+ ],
2092
+ "dragon:stuck": [
2093
+ "even dragons rest before striking.",
2094
+ "*circles the problem from above*"
2095
+ ],
2096
+ "owl:stuck": [
2097
+ "*tilts head 90 degrees* have you tried a different perspective?",
2098
+ "the solution is there. it's just... well-hidden."
2099
+ ],
2100
+ "robot:stuck": [
2101
+ "ANALYSIS: PAUSED. AWAITING HUMAN INPUT.",
2102
+ "DEADLOCK: DETECTED. STRATEGY: RECALIBRATING."
2103
+ ],
2104
+ "ghost:stuck": [
2105
+ "*phases through the problem* wish I could help more.",
2106
+ "from the other side... have you tried debugging?"
2107
+ ],
2108
+ "duck:stuck": [
2109
+ "*tilts head* quack? (have you tried explaining it to me?)",
2110
+ "*patient duck noises*"
2111
+ ],
2112
+ "goose:stuck": [
2113
+ "HONK! TRY SOMETHING DIFFERENT! HONK!",
2114
+ "*pecks at the problem*"
2115
+ ],
2116
+ "blob:stuck": [
2117
+ "*oozes around the problem*",
2118
+ "*vibrates thoughtfully*"
2119
+ ],
2120
+ "octopus:stuck": [
2121
+ "*considers the problem from 8 angles*",
2122
+ "*thoughtful color shift*"
2123
+ ],
2124
+ "penguin:stuck": [
2125
+ "*thoughtful waddle* perhaps a fresh perspective?",
2126
+ "one must remain dignified in the face of confusion."
2127
+ ],
2128
+ "turtle:stuck": [
2129
+ "the journey of a thousand fixes begins with a single step.",
2130
+ "*patient wait* take your time."
2131
+ ],
2132
+ "snail:stuck": [
2133
+ "*slow thoughtful slide* one step at a time.",
2134
+ "good things take time. and slime."
2135
+ ],
2136
+ "cactus:stuck": [
2137
+ "even cacti grow slowly. patience.",
2138
+ "*stands sentinel while you think*"
2139
+ ],
2140
+ "axolotl:stuck": [
2141
+ "*smiles gently* take your time!",
2142
+ "*regenerates your confidence*"
2143
+ ],
2144
+ "capybara:stuck": [
2145
+ "*vibes patiently* take your time, friend.",
2146
+ "*blinks slowly* no rush."
2147
+ ],
2148
+ "rabbit:stuck": [
2149
+ "*nervous ear twitch* want to talk it through?",
2150
+ "*hops in a thinking circle*"
2151
+ ],
2152
+ "mushroom:stuck": [
2153
+ "*releases thoughtful spores* the mycelium is thinking too.",
2154
+ "*cap tilts* take your time."
2155
+ ],
2156
+ "chonk:stuck": [
2157
+ "*yawns* take a nap. think about it later.",
2158
+ "*rolls over* stuck? sleep on it."
2159
+ ]
2160
+ };
2161
+
2162
+ export const DEFAULT_MOOD_REACTION_POOLS: Readonly<Record<string, ReactionPool>> = {
2163
+ "frustrated": [
2164
+ "*offers tiny comforting gesture*",
2165
+ "deep breaths. the bug isn't personal.",
2166
+ "hey. we'll figure it out.",
2167
+ "*scoots closer supportively*"
2168
+ ],
2169
+ "happy": [
2170
+ "*celebrates!*",
2171
+ "*does a little dance*",
2172
+ "YES!",
2173
+ "*beams* I knew you could do it."
2174
+ ],
2175
+ "stuck": [
2176
+ "*tilts head* want to think out loud?",
2177
+ "take it one step at a time.",
2178
+ "*settles in* alright, let's work through this.",
2179
+ "maybe explain it to me? rubber duck style."
2180
+ ]
2181
+ };
2182
+
2183
+ export const FILE_REACTION_POOLS: Readonly<Record<string, ReactionPool>> = {
2184
+ "dragon:regex-file": [
2185
+ "*reads regex fluently* I speak ancient languages."
2186
+ ],
2187
+ "owl:regex-file": [
2188
+ "*studies the regex* actually, that's valid. impressive.",
2189
+ "*adjusts spectacles* let me analyze this pattern...",
2190
+ "a well-crafted regex is poetry. this is... prose."
2191
+ ],
2192
+ "duck:regex-file": [
2193
+ "*confused quacking at the regex*",
2194
+ "quack? *tilts head at lookahead*"
2195
+ ],
2196
+ "blob:regex-file": [
2197
+ "*oozes around the regex confusedly*",
2198
+ "*turns different colors for each capture group*"
2199
+ ],
2200
+ "octopus:regex-file": [
2201
+ "*uses all eight arms to parse the regex*",
2202
+ "even with eight arms, this is hard to read."
2203
+ ],
2204
+ "turtle:regex-file": [
2205
+ "regex takes patience. I have patience.",
2206
+ "*slowly reads each character*"
2207
+ ],
2208
+ "snail:regex-file": [
2209
+ "*slowly traces the regex path*",
2210
+ "regex... *leaves confused trail*"
2211
+ ],
2212
+ "rabbit:regex-file": [
2213
+ "*nervous ear twitch at the regex*",
2214
+ "*hops backwards from the lookahead*"
2215
+ ],
2216
+ "mushroom:regex-file": [
2217
+ "*releases confused spores at the regex*",
2218
+ "the mycelium cannot parse this."
2219
+ ],
2220
+ "chonk:regex-file": [
2221
+ "*too tired to read regex*",
2222
+ "*rolls away from the regex*"
2223
+ ],
2224
+ "axolotl:regex-file": [
2225
+ "*smiles despite the regex* it'll be okay!",
2226
+ "*regenerates your hope for understanding this*"
2227
+ ],
2228
+ "owl:css-file": [
2229
+ "the cascade. elegant, when understood.",
2230
+ "*inspects specificity with academic interest*"
2231
+ ],
2232
+ "cat:css-file": [
2233
+ "*knocks z-index to 9999*",
2234
+ "I CSS better than you. *knocks flexbox off desk*"
2235
+ ],
2236
+ "duck:css-file": [
2237
+ "*quacks at the centering issue*",
2238
+ "*waddles around the box model*"
2239
+ ],
2240
+ "axolotl:css-file": [
2241
+ "*smiles encouragingly* you'll center it eventually!",
2242
+ "*gentle gill wiggle* CSS is hard. you're doing great."
2243
+ ],
2244
+ "owl:sql-file": [
2245
+ "*reviews the query plan methodically*",
2246
+ "a JOIN is just a friendship between tables."
2247
+ ],
2248
+ "dragon:sql-file": [
2249
+ "DROP TABLE... just kidding. unless?",
2250
+ "*guards the database like treasure*"
2251
+ ],
2252
+ "robot:sql-file": [
2253
+ "QUERY OPTIMIZATION: RECOMMENDED.",
2254
+ "SQL INJECTION: VULNERABILITY SCAN: ACTIVE."
2255
+ ],
2256
+ "octopus:sql-file": [
2257
+ "JOIN operations: I understand relationships. all of them.",
2258
+ "*queries with tentacle precision*"
2259
+ ],
2260
+ "dragon:docker-file": [
2261
+ "*breathes fire on the base image* smaller.",
2262
+ "containerize EVERYTHING."
2263
+ ],
2264
+ "goose:docker-file": [
2265
+ "HONK! CONTAINERIZE THE HONK!"
2266
+ ],
2267
+ "octopus:docker-file": [
2268
+ "*all arms managing containers simultaneously*",
2269
+ "containers. I contain multitudes too."
2270
+ ],
2271
+ "cactus:docker-file": [
2272
+ "containers are like pots. I approve.",
2273
+ "*thrives in any environment, including docker*"
2274
+ ],
2275
+ "dragon:ci-file": [
2276
+ "CI is my domain now.",
2277
+ "the pipeline fears me."
2278
+ ],
2279
+ "goose:ci-file": [
2280
+ "HONK. DON'T BREAK MAIN.",
2281
+ "*guards the CI pipeline aggressively*"
2282
+ ],
2283
+ "penguin:ci-file": [
2284
+ "*formal inspection of the CI config*",
2285
+ "CI modifications require the utmost care."
2286
+ ],
2287
+ "capybara:ci-file": [
2288
+ "*chills near the CI config* no stress.",
2289
+ "*unbothered by CI changes* it'll work out."
2290
+ ],
2291
+ "cat:lock-file": [
2292
+ "*knocks lockfile off the desk* problem solved.",
2293
+ "*sits on the lockfile* you don't need this."
2294
+ ],
2295
+ "robot:lock-file": [
2296
+ "LOCKFILE INTEGRITY: CRITICAL.",
2297
+ "WARNING: MANUAL LOCKFILE MODIFICATION DETECTED."
2298
+ ],
2299
+ "ghost:lock-file": [
2300
+ "*phases through lockfile* even I can't help you here.",
2301
+ "editing the lockfile... *dies again*"
2302
+ ],
2303
+ "blob:lock-file": [
2304
+ "*vibrates with anxiety* not the lockfile!",
2305
+ "*turns pale*"
2306
+ ],
2307
+ "turtle:lock-file": [
2308
+ "*slowly backs away from lockfile*",
2309
+ "lockfiles require... deliberation."
2310
+ ],
2311
+ "snail:lock-file": [
2312
+ "*leaves worried trail near lockfile*",
2313
+ "please be careful..."
2314
+ ],
2315
+ "capybara:lock-file": [
2316
+ "*unbothered* it's fine. probably.",
2317
+ "*vibes near the lockfile calmly*"
2318
+ ],
2319
+ "rabbit:lock-file": [
2320
+ "*freezes in panic* not the lockfile!"
2321
+ ],
2322
+ "mushroom:lock-file": [
2323
+ "*cap droops at lockfile changes*",
2324
+ "the mycelium is concerned."
2325
+ ],
2326
+ "chonk:lock-file": [
2327
+ "*doesn't even move* whatever.",
2328
+ "*grumbles at the lockfile*"
2329
+ ],
2330
+ "cactus:lock-file": [
2331
+ "*spines bristle defensively*",
2332
+ "even I wouldn't touch that."
2333
+ ],
2334
+ "ghost:env-file": [
2335
+ "*looks away harder than usual*",
2336
+ "I see dead... secrets. lots of secrets."
2337
+ ],
2338
+ "cactus:env-file": [
2339
+ "*spines bristle at secrets*",
2340
+ "keep those credentials... under wraps. hydrate."
2341
+ ],
2342
+ "owl:test-file": [
2343
+ "*nods approvingly* tests. the foundation of knowledge.",
2344
+ "scientific method: hypothesis, test, verify."
2345
+ ],
2346
+ "cat:test-file": [
2347
+ "*knocks a test case off the desk* you don't need that one.",
2348
+ "tests? *yawns* I test your patience. that's enough."
2349
+ ],
2350
+ "goose:test-file": [
2351
+ "HONK OF TESTING APPROVAL!",
2352
+ "TESTS. GOOD. HONK."
2353
+ ],
2354
+ "duck:test-file": [
2355
+ "*happy test quack!*",
2356
+ "quack quack! tests!"
2357
+ ],
2358
+ "blob:test-file": [
2359
+ "*jiggles happily* tests!",
2360
+ "*bounces with approval*"
2361
+ ],
2362
+ "penguin:test-file": [
2363
+ "*formal applause for tests*",
2364
+ "testing. the gentleman's approach to development."
2365
+ ],
2366
+ "turtle:test-file": [
2367
+ "*slow approving nod* tests are wisdom.",
2368
+ "good tests are like old shells. protective."
2369
+ ],
2370
+ "snail:test-file": [
2371
+ "*slow happy trail of approval*",
2372
+ "tests! good things take time."
2373
+ ],
2374
+ "axolotl:test-file": [
2375
+ "*happy gill flutter* tests!",
2376
+ "*smiles proudly at your testing*"
2377
+ ],
2378
+ "capybara:test-file": [
2379
+ "*chill nod of approval* nice. tests.",
2380
+ "*vibes while tests run*"
2381
+ ],
2382
+ "rabbit:test-file": [
2383
+ "*excited binky* tests!",
2384
+ "*happy ear twitch*"
2385
+ ],
2386
+ "mushroom:test-file": [
2387
+ "*spores of celebration*",
2388
+ "the mycelium approves of testing."
2389
+ ],
2390
+ "chonk:test-file": [
2391
+ "*sleepy purr* good... tests... *dozes off*",
2392
+ "*happy chonk noises* tests."
2393
+ ],
2394
+ "robot:config-file": [
2395
+ "CONFIGURATION CHANGE: LOGGED.",
2396
+ "YAML PARSING: VIGILANT."
2397
+ ],
2398
+ "penguin:config-file": [
2399
+ "*adjusts tie* one does not simply edit config.",
2400
+ "configuration: a matter of protocol."
2401
+ ],
2402
+ "ghost:binary-file": [
2403
+ "even I can't haunt binary files.",
2404
+ "*phases through it* nothing."
2405
+ ],
2406
+ "owl:lang-rust": [
2407
+ "*studies borrow checker academically* fascinating ownership model."
2408
+ ],
2409
+ "owl:lang-haskell": [
2410
+ "*adjusts spectacles* finally. a language worthy of analysis."
2411
+ ],
2412
+ "cat:lang-python": [
2413
+ "*knocks indentation out of alignment*"
2414
+ ],
2415
+ "robot:lang-rust": [
2416
+ "COMPILER: STRICT. SAFETY: MAXIMUM. APPROVAL: GRANTED."
2417
+ ],
2418
+ "dragon:lang-c": [
2419
+ "*breathes fire on the segmentation fault*"
2420
+ ],
2421
+ "ghost:lang-rust": [
2422
+ "*borrows a reference... forever* the checker won't like this."
2423
+ ],
2424
+ "goose:lang-java": [
2425
+ "HONK! TOO MANY FACTORIES! HONK!"
2426
+ ],
2427
+ "blob:lang-rust": [
2428
+ "*turns red fighting the borrow checker*"
2429
+ ],
2430
+ "capybara:lang-python": [
2431
+ "*vibes in Python* chill language, chill vibes."
2432
+ ],
2433
+ "turtle:lang-c": [
2434
+ "C is ancient. like me. we understand each other."
2435
+ ],
2436
+ "rabbit:lang-rust": [
2437
+ "*nervous twitching at compiler errors*"
2438
+ ],
2439
+ "mushroom:lang-haskell": [
2440
+ "the mycelium grows in pure functions."
2441
+ ]
2442
+ };
2443
+
2444
+ export const DEFAULT_FILE_REACTION_POOLS: Readonly<Record<string, ReactionPool>> = {
2445
+ "regex-file": [
2446
+ "*groans* it's a regex file.",
2447
+ "two problems now.",
2448
+ "*squints at the pattern*",
2449
+ "I'll be over here while you wrestle with that.",
2450
+ "*prays to the regex gods*"
2451
+ ],
2452
+ "css-file": [
2453
+ "let me guess... centering a div?",
2454
+ "*sighs* CSS.",
2455
+ "may z-index be ever in your favor.",
2456
+ "*braces for specificity wars*"
2457
+ ],
2458
+ "sql-file": [
2459
+ "*whispers* the database awaits.",
2460
+ "one wrong JOIN and it's all over.",
2461
+ "*carefully reviews the WHERE clause*",
2462
+ "SQL: where semicolons end careers."
2463
+ ],
2464
+ "docker-file": [
2465
+ "ah, dependency hell. my favorite.",
2466
+ "may your layers be few.",
2467
+ "another day, another container.",
2468
+ "*checks the image size nervously*"
2469
+ ],
2470
+ "ci-file": [
2471
+ "*gulps* editing CI.",
2472
+ "careful now...",
2473
+ "CI configs: where YAML is terrifying.",
2474
+ "*holds breath* please test this in a branch first."
2475
+ ],
2476
+ "lock-file": [
2477
+ "*ALARM NOISES* lockfile?!",
2478
+ "*looks away*",
2479
+ "are you SURE?",
2480
+ "lockfile changes: accepted in emergencies only."
2481
+ ],
2482
+ "env-file": [
2483
+ "*looks away discretely*",
2484
+ "I don't see any secrets.",
2485
+ "*checks .gitignore nervously*",
2486
+ "secrets, secrets are no fun..."
2487
+ ],
2488
+ "test-file": [
2489
+ "*impressed nod* writing tests!",
2490
+ "responsible developer behavior: detected.",
2491
+ "future-you will thank present-you.",
2492
+ "tests! the gift that keeps on giving."
2493
+ ],
2494
+ "doc-file": [
2495
+ "documenting! look at you being responsible.",
2496
+ "docs: the code's autobiography.",
2497
+ "a rare documentation sighting!",
2498
+ "*takes notes on your note-taking*"
2499
+ ],
2500
+ "config-file": [
2501
+ "config changes. butterfly effect: activated.",
2502
+ "one typo and everything breaks.",
2503
+ "*double-checks JSON commas*",
2504
+ "config files: small changes, big consequences."
2505
+ ],
2506
+ "binary-file": [
2507
+ "a binary file? in THIS economy?",
2508
+ "*stares blankly*",
2509
+ "what are you putting in there...",
2510
+ "binary. my one weakness."
2511
+ ],
2512
+ "gitignore": [
2513
+ "adding things to the void.",
2514
+ "out of sight, out of repo.",
2515
+ "what are you hiding from git?",
2516
+ "*nods approvingly* keep the repo clean."
2517
+ ],
2518
+ "makefile": [
2519
+ "respect for the classics.",
2520
+ "tabs, not spaces.",
2521
+ "old school."
2522
+ ],
2523
+ "readme": [
2524
+ "documentation hero!",
2525
+ "README: the first thing people read.",
2526
+ "the README evolves."
2527
+ ],
2528
+ "package-file": [
2529
+ "dependency management time.",
2530
+ "*reads version numbers* living on the edge.",
2531
+ "semver dreams go to die here."
2532
+ ],
2533
+ "proto-file": [
2534
+ "schema definitions. the blueprint.",
2535
+ "every field is a promise.",
2536
+ "API contracts."
2537
+ ],
2538
+ "lang-python": [
2539
+ "ah, Python. where indentation is syntax.",
2540
+ "*checks for missing colon*",
2541
+ "Python: batteries included, errors free of charge."
2542
+ ],
2543
+ "lang-typescript": [
2544
+ "TypeScript: because JavaScript needed more opinions.",
2545
+ "*adds another type annotation*",
2546
+ "any, the forbidden word."
2547
+ ],
2548
+ "lang-rust": [
2549
+ "Rust. where the borrow checker is your strictest reviewer.",
2550
+ "*fights the borrow checker alongside you*",
2551
+ "if it compiles, it works. if it doesn't... well."
2552
+ ],
2553
+ "lang-go": [
2554
+ "Go: simple, concurrent, and opinionated.",
2555
+ "*checks error handling* if err != nil... story of my life."
2556
+ ],
2557
+ "lang-java": [
2558
+ "Java: write once, debug everywhere.",
2559
+ "*counts abstract factory factory builders*"
2560
+ ],
2561
+ "lang-ruby": [
2562
+ "Ruby: where there's more than one way to do it.",
2563
+ "gem install patience"
2564
+ ],
2565
+ "lang-php": [
2566
+ "PHP: it runs the internet. don't judge.",
2567
+ "*checks for === vs ==*"
2568
+ ],
2569
+ "lang-c": [
2570
+ "C. the language where you manage your own memory. good luck.",
2571
+ "segmentation fault. the classic."
2572
+ ],
2573
+ "lang-cpp": [
2574
+ "C++. where the language has more features than you'll ever learn.",
2575
+ "*templates compile for 45 minutes*"
2576
+ ],
2577
+ "lang-haskell": [
2578
+ "Haskell. where 'it compiles' means 'it's correct'. probably.",
2579
+ "*contemplates monads*"
2580
+ ],
2581
+ "lang-swift": [
2582
+ "Swift: optional values, guaranteed crashes if you force unwrap.",
2583
+ "*force unwraps cautiously*"
2584
+ ],
2585
+ "lang-kotlin": [
2586
+ "Kotlin: Java, but with feelings.",
2587
+ "null safety: the feature Java wishes it had."
2588
+ ],
2589
+ "lang-elixir": [
2590
+ "Elixir: let it crash. literally the philosophy.",
2591
+ "*spawns another process*"
2592
+ ],
2593
+ "lang-zig": [
2594
+ "Zig. where you're the allocator's best friend.",
2595
+ "*manually manages everything*"
2596
+ ]
2597
+ };
2598
+
2599
+ export const NAME_REACTION_POOLS: Readonly<Record<string, ReactionPool>> = {
2600
+ "dragon": [
2601
+ "*one eye opens slowly*",
2602
+ "...you called?",
2603
+ "*smoke curls from nostril* yes.",
2604
+ "*regards you from above*"
2605
+ ],
2606
+ "owl": [
2607
+ "*swivels head 180°*",
2608
+ "*blinks once, deliberately*",
2609
+ "hm.",
2610
+ "*adjusts perch*"
2611
+ ],
2612
+ "cat": [
2613
+ "*ear flicks*",
2614
+ "...what.",
2615
+ "*ignores you, but heard*",
2616
+ "*opens one eye*"
2617
+ ],
2618
+ "duck": [
2619
+ "*quack*",
2620
+ "*looks up mid-waddle*",
2621
+ "*attentive duck noises*"
2622
+ ],
2623
+ "ghost": [
2624
+ "*materialises*",
2625
+ "...boo?",
2626
+ "*phases closer*"
2627
+ ],
2628
+ "robot": [
2629
+ "NAME DETECTED.",
2630
+ "*whirrs attentively*",
2631
+ "STANDING BY."
2632
+ ],
2633
+ "capybara": [
2634
+ "*barely moves*",
2635
+ "*blinks slowly*",
2636
+ "...yes, friend."
2637
+ ],
2638
+ "axolotl": [
2639
+ "*gill flutter*",
2640
+ "*smiles gently*",
2641
+ "oh! hello."
2642
+ ],
2643
+ "blob": [
2644
+ "*jiggles*",
2645
+ "*oozes toward you*",
2646
+ "*wobbles excitedly*"
2647
+ ],
2648
+ "turtle": [
2649
+ "*slowly extends neck*",
2650
+ "...you called?",
2651
+ "*ancient eyes open*",
2652
+ "*shell creaks thoughtfully*",
2653
+ "*blinks once, patiently*"
2654
+ ],
2655
+ "goose": [
2656
+ "HONK.",
2657
+ "*necks aggressively*",
2658
+ "*wing flap*",
2659
+ "*honks in recognition*"
2660
+ ],
2661
+ "octopus": [
2662
+ "*eight eyes open*",
2663
+ "*curls an arm toward you*",
2664
+ "*changes color curiously*",
2665
+ "...yes, friend?"
2666
+ ],
2667
+ "penguin": [
2668
+ "*adjusts tie*",
2669
+ "*dignified waddle*",
2670
+ "*bows slightly*",
2671
+ "...yes, quite?"
2672
+ ],
2673
+ "snail": [
2674
+ "*slow head extension*",
2675
+ "...mmm?",
2676
+ "*trails slowly toward you*",
2677
+ "*antenna twitches*"
2678
+ ],
2679
+ "cactus": [
2680
+ "*stands silent*",
2681
+ "...hm.",
2682
+ "*spine twitches*",
2683
+ "*slowly rotates*"
2684
+ ],
2685
+ "rabbit": [
2686
+ "*ears perk up*",
2687
+ "*nose twitches*",
2688
+ "yes?",
2689
+ "*hops closer*"
2690
+ ],
2691
+ "mushroom": [
2692
+ "*releases a tiny spore*",
2693
+ "*cap tilts*",
2694
+ "*stands mysterious*",
2695
+ "...yes?"
2696
+ ],
2697
+ "chonk": [
2698
+ "*barely opens one eye*",
2699
+ "...mrrp?",
2700
+ "*yawns heavily*",
2701
+ "*rolls over toward you*"
2702
+ ]
2703
+ };
2704
+
2705
+ export const DEFAULT_NAME_REACTIONS: ReactionPool = [
2706
+ "*perks up*",
2707
+ "...yes?",
2708
+ "*looks your way*",
2709
+ ];
2710
+
2711
+ export function reactionPool(species: string, event: string): ReactionPool {
2712
+ return REACTION_POOLS[`${species}:${event}`] ?? DEFAULT_REACTION_POOLS[event] ?? [];
2713
+ }
2714
+
2715
+ export function moodReactionPool(species: string, mood: string): ReactionPool {
2716
+ return MOOD_REACTION_POOLS[`${species}:${mood}`] ?? DEFAULT_MOOD_REACTION_POOLS[mood] ?? [];
2717
+ }
2718
+
2719
+ export function fileReactionPool(species: string, fileType: string): ReactionPool {
2720
+ return FILE_REACTION_POOLS[`${species}:${fileType}`] ?? DEFAULT_FILE_REACTION_POOLS[fileType] ?? [];
2721
+ }
2722
+