@oh-my-pi/pi-coding-agent 3.24.0 → 3.30.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 (97) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/package.json +4 -4
  3. package/src/core/custom-commands/bundled/wt/index.ts +3 -0
  4. package/src/core/sdk.ts +7 -0
  5. package/src/core/tools/complete.ts +129 -0
  6. package/src/core/tools/index.test.ts +9 -1
  7. package/src/core/tools/index.ts +18 -5
  8. package/src/core/tools/jtd-to-json-schema.ts +252 -0
  9. package/src/core/tools/output.ts +125 -14
  10. package/src/core/tools/read.ts +4 -4
  11. package/src/core/tools/task/artifacts.ts +6 -9
  12. package/src/core/tools/task/executor.ts +189 -24
  13. package/src/core/tools/task/index.ts +23 -18
  14. package/src/core/tools/task/name-generator.ts +1577 -0
  15. package/src/core/tools/task/render.ts +137 -8
  16. package/src/core/tools/task/types.ts +26 -5
  17. package/src/core/tools/task/worker-protocol.ts +1 -0
  18. package/src/core/tools/task/worker.ts +136 -14
  19. package/src/core/tools/web-fetch-handlers/academic.test.ts +239 -0
  20. package/src/core/tools/web-fetch-handlers/artifacthub.ts +210 -0
  21. package/src/core/tools/web-fetch-handlers/arxiv.ts +84 -0
  22. package/src/core/tools/web-fetch-handlers/aur.ts +171 -0
  23. package/src/core/tools/web-fetch-handlers/biorxiv.ts +136 -0
  24. package/src/core/tools/web-fetch-handlers/bluesky.ts +277 -0
  25. package/src/core/tools/web-fetch-handlers/brew.ts +173 -0
  26. package/src/core/tools/web-fetch-handlers/business.test.ts +82 -0
  27. package/src/core/tools/web-fetch-handlers/cheatsh.ts +73 -0
  28. package/src/core/tools/web-fetch-handlers/chocolatey.ts +153 -0
  29. package/src/core/tools/web-fetch-handlers/coingecko.ts +179 -0
  30. package/src/core/tools/web-fetch-handlers/crates-io.ts +123 -0
  31. package/src/core/tools/web-fetch-handlers/dev-platforms.test.ts +254 -0
  32. package/src/core/tools/web-fetch-handlers/devto.ts +173 -0
  33. package/src/core/tools/web-fetch-handlers/discogs.ts +303 -0
  34. package/src/core/tools/web-fetch-handlers/dockerhub.ts +156 -0
  35. package/src/core/tools/web-fetch-handlers/documentation.test.ts +85 -0
  36. package/src/core/tools/web-fetch-handlers/finance-media.test.ts +144 -0
  37. package/src/core/tools/web-fetch-handlers/git-hosting.test.ts +272 -0
  38. package/src/core/tools/web-fetch-handlers/github-gist.ts +64 -0
  39. package/src/core/tools/web-fetch-handlers/github.ts +424 -0
  40. package/src/core/tools/web-fetch-handlers/gitlab.ts +444 -0
  41. package/src/core/tools/web-fetch-handlers/go-pkg.ts +271 -0
  42. package/src/core/tools/web-fetch-handlers/hackage.ts +89 -0
  43. package/src/core/tools/web-fetch-handlers/hackernews.ts +208 -0
  44. package/src/core/tools/web-fetch-handlers/hex.ts +121 -0
  45. package/src/core/tools/web-fetch-handlers/huggingface.ts +385 -0
  46. package/src/core/tools/web-fetch-handlers/iacr.ts +82 -0
  47. package/src/core/tools/web-fetch-handlers/index.ts +69 -0
  48. package/src/core/tools/web-fetch-handlers/lobsters.ts +186 -0
  49. package/src/core/tools/web-fetch-handlers/mastodon.ts +302 -0
  50. package/src/core/tools/web-fetch-handlers/maven.ts +147 -0
  51. package/src/core/tools/web-fetch-handlers/mdn.ts +174 -0
  52. package/src/core/tools/web-fetch-handlers/media.test.ts +138 -0
  53. package/src/core/tools/web-fetch-handlers/metacpan.ts +247 -0
  54. package/src/core/tools/web-fetch-handlers/npm.ts +107 -0
  55. package/src/core/tools/web-fetch-handlers/nuget.ts +201 -0
  56. package/src/core/tools/web-fetch-handlers/nvd.ts +238 -0
  57. package/src/core/tools/web-fetch-handlers/opencorporates.ts +273 -0
  58. package/src/core/tools/web-fetch-handlers/openlibrary.ts +313 -0
  59. package/src/core/tools/web-fetch-handlers/osv.ts +184 -0
  60. package/src/core/tools/web-fetch-handlers/package-managers-2.test.ts +199 -0
  61. package/src/core/tools/web-fetch-handlers/package-managers.test.ts +171 -0
  62. package/src/core/tools/web-fetch-handlers/package-registries.test.ts +259 -0
  63. package/src/core/tools/web-fetch-handlers/packagist.ts +170 -0
  64. package/src/core/tools/web-fetch-handlers/pub-dev.ts +185 -0
  65. package/src/core/tools/web-fetch-handlers/pubmed.ts +174 -0
  66. package/src/core/tools/web-fetch-handlers/pypi.ts +125 -0
  67. package/src/core/tools/web-fetch-handlers/readthedocs.ts +122 -0
  68. package/src/core/tools/web-fetch-handlers/reddit.ts +100 -0
  69. package/src/core/tools/web-fetch-handlers/repology.ts +257 -0
  70. package/src/core/tools/web-fetch-handlers/research.test.ts +107 -0
  71. package/src/core/tools/web-fetch-handlers/rfc.ts +205 -0
  72. package/src/core/tools/web-fetch-handlers/rubygems.ts +112 -0
  73. package/src/core/tools/web-fetch-handlers/sec-edgar.ts +269 -0
  74. package/src/core/tools/web-fetch-handlers/security.test.ts +103 -0
  75. package/src/core/tools/web-fetch-handlers/semantic-scholar.ts +190 -0
  76. package/src/core/tools/web-fetch-handlers/social-extended.test.ts +192 -0
  77. package/src/core/tools/web-fetch-handlers/social.test.ts +259 -0
  78. package/src/core/tools/web-fetch-handlers/spotify.ts +218 -0
  79. package/src/core/tools/web-fetch-handlers/stackexchange.test.ts +120 -0
  80. package/src/core/tools/web-fetch-handlers/stackoverflow.ts +123 -0
  81. package/src/core/tools/web-fetch-handlers/standards.test.ts +122 -0
  82. package/src/core/tools/web-fetch-handlers/terraform.ts +296 -0
  83. package/src/core/tools/web-fetch-handlers/tldr.ts +47 -0
  84. package/src/core/tools/web-fetch-handlers/twitter.ts +84 -0
  85. package/src/core/tools/web-fetch-handlers/types.ts +163 -0
  86. package/src/core/tools/web-fetch-handlers/utils.ts +91 -0
  87. package/src/core/tools/web-fetch-handlers/vimeo.ts +152 -0
  88. package/src/core/tools/web-fetch-handlers/wikidata.ts +349 -0
  89. package/src/core/tools/web-fetch-handlers/wikipedia.test.ts +73 -0
  90. package/src/core/tools/web-fetch-handlers/wikipedia.ts +91 -0
  91. package/src/core/tools/web-fetch-handlers/youtube.test.ts +198 -0
  92. package/src/core/tools/web-fetch-handlers/youtube.ts +319 -0
  93. package/src/core/tools/web-fetch.ts +152 -1324
  94. package/src/prompts/task.md +14 -50
  95. package/src/prompts/tools/output.md +2 -1
  96. package/src/prompts/tools/task.md +3 -1
  97. package/src/utils/tools-manager.ts +110 -8
@@ -0,0 +1,1577 @@
1
+ /**
2
+ * Generate memorable two-word task identifiers.
3
+ * Format: AdjectiveNoun (e.g., "SwiftFalcon", "CalmPanda")
4
+ *
5
+ * Dictionaries sourced from unique-names-generator (MIT license).
6
+ * 1202 adjectives × 355 animals = 426,710 combinations.
7
+ */
8
+
9
+ const ADJECTIVES = [
10
+ "able",
11
+ "above",
12
+ "absent",
13
+ "absolute",
14
+ "abstract",
15
+ "abundant",
16
+ "academic",
17
+ "acceptable",
18
+ "accepted",
19
+ "accessible",
20
+ "accurate",
21
+ "accused",
22
+ "active",
23
+ "actual",
24
+ "acute",
25
+ "added",
26
+ "additional",
27
+ "adequate",
28
+ "adjacent",
29
+ "administrative",
30
+ "adorable",
31
+ "advanced",
32
+ "adverse",
33
+ "advisory",
34
+ "aesthetic",
35
+ "afraid",
36
+ "aggregate",
37
+ "aggressive",
38
+ "agreeable",
39
+ "agreed",
40
+ "agricultural",
41
+ "alert",
42
+ "alive",
43
+ "alleged",
44
+ "allied",
45
+ "alone",
46
+ "alright",
47
+ "alternative",
48
+ "amateur",
49
+ "amazing",
50
+ "ambitious",
51
+ "amused",
52
+ "ancient",
53
+ "angry",
54
+ "annoyed",
55
+ "annual",
56
+ "anonymous",
57
+ "anxious",
58
+ "appalling",
59
+ "apparent",
60
+ "applicable",
61
+ "appropriate",
62
+ "arbitrary",
63
+ "architectural",
64
+ "armed",
65
+ "arrogant",
66
+ "artificial",
67
+ "artistic",
68
+ "ashamed",
69
+ "asleep",
70
+ "assistant",
71
+ "associated",
72
+ "atomic",
73
+ "attractive",
74
+ "automatic",
75
+ "autonomous",
76
+ "available",
77
+ "average",
78
+ "awake",
79
+ "aware",
80
+ "awful",
81
+ "awkward",
82
+ "back",
83
+ "bad",
84
+ "balanced",
85
+ "bare",
86
+ "basic",
87
+ "beautiful",
88
+ "beneficial",
89
+ "better",
90
+ "bewildered",
91
+ "big",
92
+ "binding",
93
+ "biological",
94
+ "bitter",
95
+ "bizarre",
96
+ "blank",
97
+ "blind",
98
+ "blonde",
99
+ "bloody",
100
+ "blushing",
101
+ "boiling",
102
+ "bold",
103
+ "bored",
104
+ "boring",
105
+ "bottom",
106
+ "brainy",
107
+ "brave",
108
+ "breakable",
109
+ "breezy",
110
+ "brief",
111
+ "bright",
112
+ "brilliant",
113
+ "broad",
114
+ "broken",
115
+ "bumpy",
116
+ "burning",
117
+ "busy",
118
+ "calm",
119
+ "capable",
120
+ "capitalist",
121
+ "careful",
122
+ "casual",
123
+ "causal",
124
+ "cautious",
125
+ "central",
126
+ "certain",
127
+ "changing",
128
+ "characteristic",
129
+ "charming",
130
+ "cheap",
131
+ "cheerful",
132
+ "chemical",
133
+ "chief",
134
+ "chilly",
135
+ "chosen",
136
+ "chronic",
137
+ "chubby",
138
+ "circular",
139
+ "civic",
140
+ "civil",
141
+ "civilian",
142
+ "classic",
143
+ "classical",
144
+ "clean",
145
+ "clear",
146
+ "clever",
147
+ "clinical",
148
+ "close",
149
+ "closed",
150
+ "cloudy",
151
+ "clumsy",
152
+ "coastal",
153
+ "cognitive",
154
+ "coherent",
155
+ "cold",
156
+ "collective",
157
+ "colonial",
158
+ "colorful",
159
+ "colossal",
160
+ "coloured",
161
+ "colourful",
162
+ "combative",
163
+ "combined",
164
+ "comfortable",
165
+ "coming",
166
+ "commercial",
167
+ "common",
168
+ "communist",
169
+ "compact",
170
+ "comparable",
171
+ "comparative",
172
+ "compatible",
173
+ "competent",
174
+ "competitive",
175
+ "complete",
176
+ "complex",
177
+ "complicated",
178
+ "comprehensive",
179
+ "compulsory",
180
+ "conceptual",
181
+ "concerned",
182
+ "concrete",
183
+ "condemned",
184
+ "confident",
185
+ "confidential",
186
+ "confused",
187
+ "conscious",
188
+ "conservation",
189
+ "conservative",
190
+ "considerable",
191
+ "consistent",
192
+ "constant",
193
+ "constitutional",
194
+ "contemporary",
195
+ "content",
196
+ "continental",
197
+ "continued",
198
+ "continuing",
199
+ "continuous",
200
+ "controlled",
201
+ "controversial",
202
+ "convenient",
203
+ "conventional",
204
+ "convinced",
205
+ "convincing",
206
+ "cooing",
207
+ "cool",
208
+ "cooperative",
209
+ "corporate",
210
+ "correct",
211
+ "corresponding",
212
+ "costly",
213
+ "courageous",
214
+ "crazy",
215
+ "creative",
216
+ "creepy",
217
+ "criminal",
218
+ "critical",
219
+ "crooked",
220
+ "crowded",
221
+ "crucial",
222
+ "crude",
223
+ "cruel",
224
+ "cuddly",
225
+ "cultural",
226
+ "curious",
227
+ "curly",
228
+ "current",
229
+ "curved",
230
+ "cute",
231
+ "daily",
232
+ "damaged",
233
+ "damp",
234
+ "dangerous",
235
+ "dark",
236
+ "dead",
237
+ "deaf",
238
+ "deafening",
239
+ "dear",
240
+ "decent",
241
+ "decisive",
242
+ "deep",
243
+ "defeated",
244
+ "defensive",
245
+ "defiant",
246
+ "definite",
247
+ "deliberate",
248
+ "delicate",
249
+ "delicious",
250
+ "delighted",
251
+ "delightful",
252
+ "democratic",
253
+ "dependent",
254
+ "depressed",
255
+ "desirable",
256
+ "desperate",
257
+ "detailed",
258
+ "determined",
259
+ "developed",
260
+ "developing",
261
+ "devoted",
262
+ "different",
263
+ "difficult",
264
+ "digital",
265
+ "diplomatic",
266
+ "direct",
267
+ "dirty",
268
+ "disabled",
269
+ "disappointed",
270
+ "disastrous",
271
+ "disciplinary",
272
+ "disgusted",
273
+ "distant",
274
+ "distinct",
275
+ "distinctive",
276
+ "distinguished",
277
+ "disturbed",
278
+ "disturbing",
279
+ "diverse",
280
+ "divine",
281
+ "dizzy",
282
+ "domestic",
283
+ "dominant",
284
+ "double",
285
+ "doubtful",
286
+ "drab",
287
+ "dramatic",
288
+ "dreadful",
289
+ "driving",
290
+ "drunk",
291
+ "dry",
292
+ "dual",
293
+ "due",
294
+ "dull",
295
+ "dusty",
296
+ "dying",
297
+ "dynamic",
298
+ "eager",
299
+ "early",
300
+ "eastern",
301
+ "easy",
302
+ "economic",
303
+ "educational",
304
+ "eerie",
305
+ "effective",
306
+ "efficient",
307
+ "elaborate",
308
+ "elated",
309
+ "elderly",
310
+ "eldest",
311
+ "electoral",
312
+ "electric",
313
+ "electrical",
314
+ "electronic",
315
+ "elegant",
316
+ "eligible",
317
+ "embarrassed",
318
+ "embarrassing",
319
+ "emotional",
320
+ "empirical",
321
+ "empty",
322
+ "enchanting",
323
+ "encouraging",
324
+ "endless",
325
+ "energetic",
326
+ "enormous",
327
+ "enthusiastic",
328
+ "entire",
329
+ "entitled",
330
+ "envious",
331
+ "environmental",
332
+ "equal",
333
+ "equivalent",
334
+ "essential",
335
+ "established",
336
+ "estimated",
337
+ "ethical",
338
+ "ethnic",
339
+ "eventual",
340
+ "everyday",
341
+ "evident",
342
+ "evil",
343
+ "evolutionary",
344
+ "exact",
345
+ "excellent",
346
+ "exceptional",
347
+ "excess",
348
+ "excessive",
349
+ "excited",
350
+ "exciting",
351
+ "exclusive",
352
+ "existing",
353
+ "exotic",
354
+ "expected",
355
+ "expensive",
356
+ "experienced",
357
+ "experimental",
358
+ "explicit",
359
+ "extended",
360
+ "extensive",
361
+ "external",
362
+ "extra",
363
+ "extraordinary",
364
+ "extreme",
365
+ "exuberant",
366
+ "faint",
367
+ "fair",
368
+ "faithful",
369
+ "familiar",
370
+ "famous",
371
+ "fancy",
372
+ "fantastic",
373
+ "far",
374
+ "fascinating",
375
+ "fashionable",
376
+ "fast",
377
+ "fat",
378
+ "fatal",
379
+ "favourable",
380
+ "favourite",
381
+ "federal",
382
+ "fellow",
383
+ "female",
384
+ "feminist",
385
+ "few",
386
+ "fierce",
387
+ "filthy",
388
+ "final",
389
+ "financial",
390
+ "fine",
391
+ "firm",
392
+ "fiscal",
393
+ "fit",
394
+ "fixed",
395
+ "flaky",
396
+ "flat",
397
+ "flexible",
398
+ "fluffy",
399
+ "fluttering",
400
+ "flying",
401
+ "following",
402
+ "fond",
403
+ "foolish",
404
+ "foreign",
405
+ "formal",
406
+ "formidable",
407
+ "forthcoming",
408
+ "fortunate",
409
+ "forward",
410
+ "fragile",
411
+ "frail",
412
+ "frantic",
413
+ "free",
414
+ "frequent",
415
+ "fresh",
416
+ "friendly",
417
+ "frightened",
418
+ "front",
419
+ "frozen",
420
+ "full",
421
+ "fun",
422
+ "functional",
423
+ "fundamental",
424
+ "funny",
425
+ "furious",
426
+ "future",
427
+ "fuzzy",
428
+ "gastric",
429
+ "gay",
430
+ "general",
431
+ "generous",
432
+ "genetic",
433
+ "gentle",
434
+ "genuine",
435
+ "geographical",
436
+ "giant",
437
+ "gigantic",
438
+ "given",
439
+ "glad",
440
+ "glamorous",
441
+ "gleaming",
442
+ "global",
443
+ "glorious",
444
+ "golden",
445
+ "good",
446
+ "gorgeous",
447
+ "gothic",
448
+ "governing",
449
+ "graceful",
450
+ "gradual",
451
+ "grand",
452
+ "grateful",
453
+ "greasy",
454
+ "great",
455
+ "grieving",
456
+ "grim",
457
+ "gross",
458
+ "grotesque",
459
+ "growing",
460
+ "grubby",
461
+ "grumpy",
462
+ "guilty",
463
+ "handicapped",
464
+ "handsome",
465
+ "happy",
466
+ "hard",
467
+ "harsh",
468
+ "head",
469
+ "healthy",
470
+ "heavy",
471
+ "helpful",
472
+ "helpless",
473
+ "hidden",
474
+ "high",
475
+ "hilarious",
476
+ "hissing",
477
+ "historic",
478
+ "historical",
479
+ "hollow",
480
+ "holy",
481
+ "homeless",
482
+ "homely",
483
+ "honest",
484
+ "horizontal",
485
+ "horrible",
486
+ "hostile",
487
+ "hot",
488
+ "huge",
489
+ "human",
490
+ "hungry",
491
+ "hurt",
492
+ "hushed",
493
+ "husky",
494
+ "icy",
495
+ "ideal",
496
+ "identical",
497
+ "ideological",
498
+ "ill",
499
+ "illegal",
500
+ "imaginative",
501
+ "immediate",
502
+ "immense",
503
+ "imperial",
504
+ "implicit",
505
+ "important",
506
+ "impossible",
507
+ "impressed",
508
+ "impressive",
509
+ "improved",
510
+ "inadequate",
511
+ "inappropriate",
512
+ "inclined",
513
+ "increased",
514
+ "increasing",
515
+ "incredible",
516
+ "independent",
517
+ "indirect",
518
+ "individual",
519
+ "industrial",
520
+ "inevitable",
521
+ "influential",
522
+ "informal",
523
+ "inherent",
524
+ "initial",
525
+ "injured",
526
+ "inland",
527
+ "inner",
528
+ "innocent",
529
+ "innovative",
530
+ "inquisitive",
531
+ "instant",
532
+ "institutional",
533
+ "insufficient",
534
+ "intact",
535
+ "integral",
536
+ "integrated",
537
+ "intellectual",
538
+ "intelligent",
539
+ "intense",
540
+ "intensive",
541
+ "interested",
542
+ "interesting",
543
+ "interim",
544
+ "interior",
545
+ "intermediate",
546
+ "internal",
547
+ "international",
548
+ "intimate",
549
+ "invisible",
550
+ "involved",
551
+ "irrelevant",
552
+ "isolated",
553
+ "itchy",
554
+ "jealous",
555
+ "jittery",
556
+ "joint",
557
+ "jolly",
558
+ "joyous",
559
+ "judicial",
560
+ "juicy",
561
+ "junior",
562
+ "just",
563
+ "keen",
564
+ "key",
565
+ "kind",
566
+ "known",
567
+ "labour",
568
+ "large",
569
+ "late",
570
+ "latin",
571
+ "lazy",
572
+ "leading",
573
+ "left",
574
+ "legal",
575
+ "legislative",
576
+ "legitimate",
577
+ "lengthy",
578
+ "lesser",
579
+ "level",
580
+ "lexical",
581
+ "liable",
582
+ "liberal",
583
+ "light",
584
+ "like",
585
+ "likely",
586
+ "limited",
587
+ "linear",
588
+ "linguistic",
589
+ "liquid",
590
+ "literary",
591
+ "little",
592
+ "live",
593
+ "lively",
594
+ "living",
595
+ "local",
596
+ "logical",
597
+ "lonely",
598
+ "long",
599
+ "loose",
600
+ "lost",
601
+ "loud",
602
+ "lovely",
603
+ "low",
604
+ "loyal",
605
+ "lucky",
606
+ "mad",
607
+ "magic",
608
+ "magnetic",
609
+ "magnificent",
610
+ "main",
611
+ "major",
612
+ "male",
613
+ "mammoth",
614
+ "managerial",
615
+ "managing",
616
+ "manual",
617
+ "many",
618
+ "marginal",
619
+ "marine",
620
+ "marked",
621
+ "married",
622
+ "marvellous",
623
+ "marxist",
624
+ "mass",
625
+ "massive",
626
+ "mathematical",
627
+ "mature",
628
+ "maximum",
629
+ "mean",
630
+ "meaningful",
631
+ "mechanical",
632
+ "medical",
633
+ "medieval",
634
+ "melodic",
635
+ "melted",
636
+ "mental",
637
+ "mere",
638
+ "metropolitan",
639
+ "mid",
640
+ "middle",
641
+ "mighty",
642
+ "mild",
643
+ "military",
644
+ "miniature",
645
+ "minimal",
646
+ "minimum",
647
+ "ministerial",
648
+ "minor",
649
+ "miserable",
650
+ "misleading",
651
+ "missing",
652
+ "misty",
653
+ "mixed",
654
+ "moaning",
655
+ "mobile",
656
+ "moderate",
657
+ "modern",
658
+ "modest",
659
+ "molecular",
660
+ "monetary",
661
+ "monthly",
662
+ "moral",
663
+ "motionless",
664
+ "muddy",
665
+ "multiple",
666
+ "mushy",
667
+ "musical",
668
+ "mute",
669
+ "mutual",
670
+ "mysterious",
671
+ "naked",
672
+ "narrow",
673
+ "nasty",
674
+ "national",
675
+ "native",
676
+ "natural",
677
+ "naughty",
678
+ "naval",
679
+ "near",
680
+ "nearby",
681
+ "neat",
682
+ "necessary",
683
+ "negative",
684
+ "neighbouring",
685
+ "nervous",
686
+ "net",
687
+ "neutral",
688
+ "new",
689
+ "nice",
690
+ "noble",
691
+ "noisy",
692
+ "normal",
693
+ "northern",
694
+ "nosy",
695
+ "notable",
696
+ "novel",
697
+ "nuclear",
698
+ "numerous",
699
+ "nursing",
700
+ "nutritious",
701
+ "nutty",
702
+ "obedient",
703
+ "objective",
704
+ "obliged",
705
+ "obnoxious",
706
+ "obvious",
707
+ "occasional",
708
+ "occupational",
709
+ "odd",
710
+ "official",
711
+ "old",
712
+ "olympic",
713
+ "only",
714
+ "open",
715
+ "operational",
716
+ "opposite",
717
+ "optimistic",
718
+ "oral",
719
+ "ordinary",
720
+ "organic",
721
+ "organisational",
722
+ "original",
723
+ "orthodox",
724
+ "other",
725
+ "outdoor",
726
+ "outer",
727
+ "outrageous",
728
+ "outside",
729
+ "outstanding",
730
+ "overall",
731
+ "overseas",
732
+ "overwhelming",
733
+ "painful",
734
+ "pale",
735
+ "panicky",
736
+ "parallel",
737
+ "parental",
738
+ "parliamentary",
739
+ "partial",
740
+ "particular",
741
+ "passing",
742
+ "passive",
743
+ "past",
744
+ "patient",
745
+ "payable",
746
+ "peaceful",
747
+ "peculiar",
748
+ "perfect",
749
+ "permanent",
750
+ "persistent",
751
+ "personal",
752
+ "petite",
753
+ "philosophical",
754
+ "physical",
755
+ "plain",
756
+ "planned",
757
+ "plastic",
758
+ "pleasant",
759
+ "pleased",
760
+ "poised",
761
+ "polite",
762
+ "political",
763
+ "poor",
764
+ "popular",
765
+ "positive",
766
+ "possible",
767
+ "potential",
768
+ "powerful",
769
+ "practical",
770
+ "precious",
771
+ "precise",
772
+ "preferred",
773
+ "pregnant",
774
+ "preliminary",
775
+ "premier",
776
+ "prepared",
777
+ "present",
778
+ "presidential",
779
+ "pretty",
780
+ "previous",
781
+ "prickly",
782
+ "primary",
783
+ "prime",
784
+ "primitive",
785
+ "principal",
786
+ "printed",
787
+ "prior",
788
+ "private",
789
+ "probable",
790
+ "productive",
791
+ "professional",
792
+ "profitable",
793
+ "profound",
794
+ "progressive",
795
+ "prominent",
796
+ "promising",
797
+ "proper",
798
+ "proposed",
799
+ "prospective",
800
+ "protective",
801
+ "proud",
802
+ "provincial",
803
+ "psychiatric",
804
+ "psychological",
805
+ "public",
806
+ "puny",
807
+ "pure",
808
+ "purring",
809
+ "puzzled",
810
+ "quaint",
811
+ "qualified",
812
+ "quarrelsome",
813
+ "querulous",
814
+ "quick",
815
+ "quickest",
816
+ "quiet",
817
+ "quintessential",
818
+ "quixotic",
819
+ "racial",
820
+ "radical",
821
+ "rainy",
822
+ "random",
823
+ "rapid",
824
+ "rare",
825
+ "raspy",
826
+ "rational",
827
+ "ratty",
828
+ "raw",
829
+ "ready",
830
+ "real",
831
+ "realistic",
832
+ "rear",
833
+ "reasonable",
834
+ "recent",
835
+ "reduced",
836
+ "redundant",
837
+ "regional",
838
+ "registered",
839
+ "regular",
840
+ "regulatory",
841
+ "related",
842
+ "relative",
843
+ "relaxed",
844
+ "relevant",
845
+ "reliable",
846
+ "relieved",
847
+ "religious",
848
+ "reluctant",
849
+ "remaining",
850
+ "remarkable",
851
+ "remote",
852
+ "renewed",
853
+ "representative",
854
+ "repulsive",
855
+ "required",
856
+ "resident",
857
+ "residential",
858
+ "resonant",
859
+ "respectable",
860
+ "respective",
861
+ "responsible",
862
+ "resulting",
863
+ "retail",
864
+ "retired",
865
+ "revolutionary",
866
+ "rich",
867
+ "ridiculous",
868
+ "right",
869
+ "rigid",
870
+ "ripe",
871
+ "rising",
872
+ "rival",
873
+ "roasted",
874
+ "robust",
875
+ "rolling",
876
+ "romantic",
877
+ "rotten",
878
+ "rough",
879
+ "round",
880
+ "royal",
881
+ "rubber",
882
+ "rude",
883
+ "ruling",
884
+ "running",
885
+ "rural",
886
+ "sacred",
887
+ "sad",
888
+ "safe",
889
+ "salty",
890
+ "satisfactory",
891
+ "satisfied",
892
+ "scared",
893
+ "scary",
894
+ "scattered",
895
+ "scientific",
896
+ "scornful",
897
+ "scrawny",
898
+ "screeching",
899
+ "secondary",
900
+ "secret",
901
+ "secure",
902
+ "select",
903
+ "selected",
904
+ "selective",
905
+ "selfish",
906
+ "semantic",
907
+ "senior",
908
+ "sensible",
909
+ "sensitive",
910
+ "separate",
911
+ "serious",
912
+ "severe",
913
+ "sexual",
914
+ "shaggy",
915
+ "shaky",
916
+ "shallow",
917
+ "shared",
918
+ "sharp",
919
+ "sheer",
920
+ "shiny",
921
+ "shivering",
922
+ "shocked",
923
+ "short",
924
+ "shrill",
925
+ "shy",
926
+ "sick",
927
+ "significant",
928
+ "silent",
929
+ "silky",
930
+ "silly",
931
+ "similar",
932
+ "simple",
933
+ "single",
934
+ "skilled",
935
+ "skinny",
936
+ "sleepy",
937
+ "slight",
938
+ "slim",
939
+ "slimy",
940
+ "slippery",
941
+ "slow",
942
+ "small",
943
+ "smart",
944
+ "smiling",
945
+ "smoggy",
946
+ "smooth",
947
+ "social",
948
+ "socialist",
949
+ "soft",
950
+ "solar",
951
+ "sole",
952
+ "solid",
953
+ "sophisticated",
954
+ "sore",
955
+ "sorry",
956
+ "sound",
957
+ "sour",
958
+ "southern",
959
+ "soviet",
960
+ "spare",
961
+ "sparkling",
962
+ "spatial",
963
+ "special",
964
+ "specific",
965
+ "specified",
966
+ "spectacular",
967
+ "spicy",
968
+ "spiritual",
969
+ "splendid",
970
+ "spontaneous",
971
+ "sporting",
972
+ "spotless",
973
+ "spotty",
974
+ "square",
975
+ "squealing",
976
+ "stable",
977
+ "stale",
978
+ "standard",
979
+ "static",
980
+ "statistical",
981
+ "statutory",
982
+ "steady",
983
+ "steep",
984
+ "sticky",
985
+ "stiff",
986
+ "still",
987
+ "stingy",
988
+ "stormy",
989
+ "straight",
990
+ "straightforward",
991
+ "strange",
992
+ "strategic",
993
+ "strict",
994
+ "striking",
995
+ "striped",
996
+ "strong",
997
+ "structural",
998
+ "stuck",
999
+ "stupid",
1000
+ "subjective",
1001
+ "subsequent",
1002
+ "substantial",
1003
+ "subtle",
1004
+ "successful",
1005
+ "successive",
1006
+ "sudden",
1007
+ "sufficient",
1008
+ "suitable",
1009
+ "sunny",
1010
+ "super",
1011
+ "superb",
1012
+ "superior",
1013
+ "supporting",
1014
+ "supposed",
1015
+ "supreme",
1016
+ "sure",
1017
+ "surprised",
1018
+ "surprising",
1019
+ "surrounding",
1020
+ "surviving",
1021
+ "suspicious",
1022
+ "sweet",
1023
+ "swift",
1024
+ "symbolic",
1025
+ "sympathetic",
1026
+ "systematic",
1027
+ "tall",
1028
+ "tame",
1029
+ "tart",
1030
+ "tasteless",
1031
+ "tasty",
1032
+ "technical",
1033
+ "technological",
1034
+ "teenage",
1035
+ "temporary",
1036
+ "tender",
1037
+ "tense",
1038
+ "terrible",
1039
+ "territorial",
1040
+ "testy",
1041
+ "theoretical",
1042
+ "thick",
1043
+ "thin",
1044
+ "thirsty",
1045
+ "thorough",
1046
+ "thoughtful",
1047
+ "thoughtless",
1048
+ "thundering",
1049
+ "tight",
1050
+ "tiny",
1051
+ "tired",
1052
+ "top",
1053
+ "total",
1054
+ "tough",
1055
+ "toxic",
1056
+ "traditional",
1057
+ "tragic",
1058
+ "tremendous",
1059
+ "tricky",
1060
+ "tropical",
1061
+ "troubled",
1062
+ "typical",
1063
+ "ugliest",
1064
+ "ugly",
1065
+ "ultimate",
1066
+ "unable",
1067
+ "unacceptable",
1068
+ "unaware",
1069
+ "uncertain",
1070
+ "unchanged",
1071
+ "uncomfortable",
1072
+ "unconscious",
1073
+ "underground",
1074
+ "underlying",
1075
+ "unemployed",
1076
+ "uneven",
1077
+ "unexpected",
1078
+ "unfair",
1079
+ "unfortunate",
1080
+ "unhappy",
1081
+ "uniform",
1082
+ "uninterested",
1083
+ "unique",
1084
+ "united",
1085
+ "universal",
1086
+ "unknown",
1087
+ "unlikely",
1088
+ "unnecessary",
1089
+ "unpleasant",
1090
+ "unsightly",
1091
+ "unusual",
1092
+ "unwilling",
1093
+ "upper",
1094
+ "upset",
1095
+ "uptight",
1096
+ "urban",
1097
+ "urgent",
1098
+ "used",
1099
+ "useful",
1100
+ "useless",
1101
+ "usual",
1102
+ "vague",
1103
+ "valid",
1104
+ "valuable",
1105
+ "variable",
1106
+ "varied",
1107
+ "various",
1108
+ "varying",
1109
+ "vast",
1110
+ "verbal",
1111
+ "vertical",
1112
+ "vicarious",
1113
+ "vicious",
1114
+ "victorious",
1115
+ "violent",
1116
+ "visible",
1117
+ "visiting",
1118
+ "visual",
1119
+ "vital",
1120
+ "vivacious",
1121
+ "vivid",
1122
+ "vocal",
1123
+ "vocational",
1124
+ "voiceless",
1125
+ "voluminous",
1126
+ "voluntary",
1127
+ "vulnerable",
1128
+ "wandering",
1129
+ "warm",
1130
+ "wasteful",
1131
+ "watery",
1132
+ "weak",
1133
+ "wealthy",
1134
+ "weary",
1135
+ "weekly",
1136
+ "weird",
1137
+ "welcome",
1138
+ "well",
1139
+ "western",
1140
+ "wet",
1141
+ "whispering",
1142
+ "whole",
1143
+ "wicked",
1144
+ "wide",
1145
+ "widespread",
1146
+ "wild",
1147
+ "willing",
1148
+ "willowy",
1149
+ "wily",
1150
+ "wise",
1151
+ "wispy",
1152
+ "witty",
1153
+ "wonderful",
1154
+ "wooden",
1155
+ "working",
1156
+ "worldwide",
1157
+ "worried",
1158
+ "worrying",
1159
+ "worthwhile",
1160
+ "worthy",
1161
+ "written",
1162
+ "wrong",
1163
+ "xenial",
1164
+ "xeric",
1165
+ "yawning",
1166
+ "yearning",
1167
+ "young",
1168
+ "youngest",
1169
+ "youthful",
1170
+ "zany",
1171
+ "zealous",
1172
+ "zesty",
1173
+ "zippy",
1174
+ ];
1175
+
1176
+ const NOUNS = [
1177
+ "aardvark",
1178
+ "aardwolf",
1179
+ "albatross",
1180
+ "alligator",
1181
+ "alpaca",
1182
+ "amphibian",
1183
+ "anaconda",
1184
+ "angelfish",
1185
+ "anglerfish",
1186
+ "ant",
1187
+ "anteater",
1188
+ "antelope",
1189
+ "antlion",
1190
+ "ape",
1191
+ "aphid",
1192
+ "armadillo",
1193
+ "asp",
1194
+ "baboon",
1195
+ "badger",
1196
+ "bandicoot",
1197
+ "barnacle",
1198
+ "barracuda",
1199
+ "basilisk",
1200
+ "bass",
1201
+ "bat",
1202
+ "bear",
1203
+ "beaver",
1204
+ "bedbug",
1205
+ "bee",
1206
+ "beetle",
1207
+ "bird",
1208
+ "bison",
1209
+ "blackbird",
1210
+ "boa",
1211
+ "boar",
1212
+ "bobcat",
1213
+ "bobolink",
1214
+ "bonobo",
1215
+ "booby",
1216
+ "bovid",
1217
+ "bug",
1218
+ "butterfly",
1219
+ "buzzard",
1220
+ "camel",
1221
+ "canid",
1222
+ "capybara",
1223
+ "cardinal",
1224
+ "caribou",
1225
+ "carp",
1226
+ "cat",
1227
+ "caterpillar",
1228
+ "catfish",
1229
+ "catshark",
1230
+ "cattle",
1231
+ "centipede",
1232
+ "cephalopod",
1233
+ "chameleon",
1234
+ "cheetah",
1235
+ "chickadee",
1236
+ "chicken",
1237
+ "chimpanzee",
1238
+ "chinchilla",
1239
+ "chipmunk",
1240
+ "cicada",
1241
+ "clam",
1242
+ "clownfish",
1243
+ "cobra",
1244
+ "cockroach",
1245
+ "cod",
1246
+ "condor",
1247
+ "constrictor",
1248
+ "coral",
1249
+ "cougar",
1250
+ "cow",
1251
+ "coyote",
1252
+ "crab",
1253
+ "crane",
1254
+ "crawdad",
1255
+ "crayfish",
1256
+ "cricket",
1257
+ "crocodile",
1258
+ "crow",
1259
+ "cuckoo",
1260
+ "damselfly",
1261
+ "deer",
1262
+ "dingo",
1263
+ "dinosaur",
1264
+ "dog",
1265
+ "dolphin",
1266
+ "donkey",
1267
+ "dormouse",
1268
+ "dove",
1269
+ "dragon",
1270
+ "dragonfly",
1271
+ "duck",
1272
+ "eagle",
1273
+ "earthworm",
1274
+ "earwig",
1275
+ "echidna",
1276
+ "eel",
1277
+ "egret",
1278
+ "elephant",
1279
+ "elk",
1280
+ "emu",
1281
+ "ermine",
1282
+ "falcon",
1283
+ "ferret",
1284
+ "finch",
1285
+ "firefly",
1286
+ "fish",
1287
+ "flamingo",
1288
+ "flea",
1289
+ "fly",
1290
+ "flyingfish",
1291
+ "fowl",
1292
+ "fox",
1293
+ "frog",
1294
+ "gamefowl",
1295
+ "gazelle",
1296
+ "gecko",
1297
+ "gerbil",
1298
+ "gibbon",
1299
+ "giraffe",
1300
+ "goat",
1301
+ "goldfish",
1302
+ "goose",
1303
+ "gopher",
1304
+ "gorilla",
1305
+ "grasshopper",
1306
+ "grouse",
1307
+ "guan",
1308
+ "guanaco",
1309
+ "guineafowl",
1310
+ "gull",
1311
+ "guppy",
1312
+ "haddock",
1313
+ "halibut",
1314
+ "hamster",
1315
+ "hare",
1316
+ "harrier",
1317
+ "hawk",
1318
+ "hedgehog",
1319
+ "heron",
1320
+ "herring",
1321
+ "hippopotamus",
1322
+ "hookworm",
1323
+ "hornet",
1324
+ "horse",
1325
+ "hoverfly",
1326
+ "hummingbird",
1327
+ "hyena",
1328
+ "iguana",
1329
+ "impala",
1330
+ "jackal",
1331
+ "jaguar",
1332
+ "jay",
1333
+ "jellyfish",
1334
+ "kangaroo",
1335
+ "kingfisher",
1336
+ "kite",
1337
+ "kiwi",
1338
+ "koala",
1339
+ "koi",
1340
+ "krill",
1341
+ "ladybug",
1342
+ "lamprey",
1343
+ "lark",
1344
+ "leech",
1345
+ "lemming",
1346
+ "lemur",
1347
+ "leopard",
1348
+ "leopon",
1349
+ "limpet",
1350
+ "lion",
1351
+ "lizard",
1352
+ "llama",
1353
+ "lobster",
1354
+ "locust",
1355
+ "loon",
1356
+ "louse",
1357
+ "lungfish",
1358
+ "lynx",
1359
+ "macaw",
1360
+ "mackerel",
1361
+ "magpie",
1362
+ "mammal",
1363
+ "manatee",
1364
+ "mandrill",
1365
+ "marlin",
1366
+ "marmoset",
1367
+ "marmot",
1368
+ "marsupial",
1369
+ "marten",
1370
+ "mastodon",
1371
+ "meadowlark",
1372
+ "meerkat",
1373
+ "mink",
1374
+ "minnow",
1375
+ "mite",
1376
+ "mockingbird",
1377
+ "mole",
1378
+ "mollusk",
1379
+ "mongoose",
1380
+ "monkey",
1381
+ "moose",
1382
+ "mosquito",
1383
+ "moth",
1384
+ "mouse",
1385
+ "mule",
1386
+ "muskox",
1387
+ "narwhal",
1388
+ "newt",
1389
+ "nightingale",
1390
+ "ocelot",
1391
+ "octopus",
1392
+ "opossum",
1393
+ "orangutan",
1394
+ "orca",
1395
+ "ostrich",
1396
+ "otter",
1397
+ "owl",
1398
+ "ox",
1399
+ "panda",
1400
+ "panther",
1401
+ "parakeet",
1402
+ "parrot",
1403
+ "parrotfish",
1404
+ "partridge",
1405
+ "peacock",
1406
+ "peafowl",
1407
+ "pelican",
1408
+ "penguin",
1409
+ "perch",
1410
+ "pheasant",
1411
+ "pig",
1412
+ "pigeon",
1413
+ "pike",
1414
+ "pinniped",
1415
+ "piranha",
1416
+ "planarian",
1417
+ "platypus",
1418
+ "pony",
1419
+ "porcupine",
1420
+ "porpoise",
1421
+ "possum",
1422
+ "prawn",
1423
+ "primate",
1424
+ "ptarmigan",
1425
+ "puffin",
1426
+ "puma",
1427
+ "python",
1428
+ "quail",
1429
+ "quelea",
1430
+ "quokka",
1431
+ "rabbit",
1432
+ "raccoon",
1433
+ "rat",
1434
+ "rattlesnake",
1435
+ "raven",
1436
+ "reindeer",
1437
+ "reptile",
1438
+ "rhinoceros",
1439
+ "roadrunner",
1440
+ "rodent",
1441
+ "rook",
1442
+ "rooster",
1443
+ "roundworm",
1444
+ "sailfish",
1445
+ "salamander",
1446
+ "salmon",
1447
+ "sawfish",
1448
+ "scallop",
1449
+ "scorpion",
1450
+ "seahorse",
1451
+ "shark",
1452
+ "sheep",
1453
+ "shrew",
1454
+ "shrimp",
1455
+ "silkworm",
1456
+ "silverfish",
1457
+ "skink",
1458
+ "skunk",
1459
+ "sloth",
1460
+ "slug",
1461
+ "smelt",
1462
+ "snail",
1463
+ "snake",
1464
+ "snipe",
1465
+ "sole",
1466
+ "sparrow",
1467
+ "spider",
1468
+ "spoonbill",
1469
+ "squid",
1470
+ "squirrel",
1471
+ "starfish",
1472
+ "stingray",
1473
+ "stoat",
1474
+ "stork",
1475
+ "sturgeon",
1476
+ "swallow",
1477
+ "swan",
1478
+ "swift",
1479
+ "swordfish",
1480
+ "swordtail",
1481
+ "tahr",
1482
+ "takin",
1483
+ "tapir",
1484
+ "tarantula",
1485
+ "tarsier",
1486
+ "termite",
1487
+ "tern",
1488
+ "thrush",
1489
+ "tick",
1490
+ "tiger",
1491
+ "tiglon",
1492
+ "toad",
1493
+ "tortoise",
1494
+ "toucan",
1495
+ "trout",
1496
+ "tuna",
1497
+ "turkey",
1498
+ "turtle",
1499
+ "tyrannosaurus",
1500
+ "unicorn",
1501
+ "urial",
1502
+ "vicuna",
1503
+ "viper",
1504
+ "vole",
1505
+ "vulture",
1506
+ "wallaby",
1507
+ "walrus",
1508
+ "warbler",
1509
+ "wasp",
1510
+ "weasel",
1511
+ "whale",
1512
+ "whippet",
1513
+ "whitefish",
1514
+ "wildcat",
1515
+ "wildebeest",
1516
+ "wildfowl",
1517
+ "wolf",
1518
+ "wolverine",
1519
+ "wombat",
1520
+ "woodpecker",
1521
+ "worm",
1522
+ "wren",
1523
+ "yak",
1524
+ "zebra",
1525
+ ];
1526
+
1527
+ function capitalize(s: string): string {
1528
+ return s.charAt(0).toUpperCase() + s.slice(1);
1529
+ }
1530
+
1531
+ let usedNames = new Set<string>();
1532
+
1533
+ /**
1534
+ * Generate a unique two-word identifier (e.g., "SwiftFalcon").
1535
+ * Falls back to numeric suffix if all combinations exhausted.
1536
+ */
1537
+ export function generateTaskName(): string {
1538
+ // Try random combinations first (50 attempts)
1539
+ for (let attempt = 0; attempt < 50; attempt++) {
1540
+ const adj = ADJECTIVES[Math.floor(Math.random() * ADJECTIVES.length)];
1541
+ const noun = NOUNS[Math.floor(Math.random() * NOUNS.length)];
1542
+ const name = `${capitalize(adj)}${capitalize(noun)}`;
1543
+ if (!usedNames.has(name)) {
1544
+ usedNames.add(name);
1545
+ return name;
1546
+ }
1547
+ }
1548
+
1549
+ // Exhaustive search if random fails
1550
+ for (const adj of ADJECTIVES) {
1551
+ for (const noun of NOUNS) {
1552
+ const name = `${capitalize(adj)}${capitalize(noun)}`;
1553
+ if (!usedNames.has(name)) {
1554
+ usedNames.add(name);
1555
+ return name;
1556
+ }
1557
+ }
1558
+ }
1559
+
1560
+ // All 426k combinations used, add numeric suffix
1561
+ let counter = 0;
1562
+ while (true) {
1563
+ const name = `Task${counter}`;
1564
+ if (!usedNames.has(name)) {
1565
+ usedNames.add(name);
1566
+ return name;
1567
+ }
1568
+ counter++;
1569
+ }
1570
+ }
1571
+
1572
+ /**
1573
+ * Reset name generator state (for testing).
1574
+ */
1575
+ export function resetTaskNames(): void {
1576
+ usedNames = new Set<string>();
1577
+ }