@wirecat/zoom-cli 0.56.0 → 0.58.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 (147) hide show
  1. package/README.md +1 -1
  2. package/dist/bin/zm.js +35 -5
  3. package/dist/bundle/all-profiles-RS5IWIGR.js +25 -0
  4. package/dist/bundle/answer-policy-R7VZMCGE.js +96 -0
  5. package/dist/bundle/anthropic-5QHQR4WF.js +70 -0
  6. package/dist/bundle/app-server-7LANSZGE.js +232 -0
  7. package/dist/bundle/bun-O6RL6LRQ.js +169 -0
  8. package/dist/bundle/bun-sqlite-PEJM6CS4.js +69 -0
  9. package/dist/bundle/chunk-24DLFGES.js +97 -0
  10. package/dist/bundle/chunk-27P22POE.js +1109 -0
  11. package/dist/bundle/chunk-3SCTDFNO.js +3398 -0
  12. package/dist/bundle/chunk-3SERIWJD.js +36139 -0
  13. package/dist/bundle/chunk-4AURKUDZ.js +60 -0
  14. package/dist/bundle/chunk-4NGLRHWO.js +24 -0
  15. package/dist/bundle/chunk-5D4AEUVA.js +24783 -0
  16. package/dist/bundle/chunk-5DVW77VC.js +789 -0
  17. package/dist/bundle/chunk-6CYLVFXM.js +9 -0
  18. package/dist/bundle/chunk-6FL25KC5.js +264 -0
  19. package/dist/bundle/chunk-7D2CD3E3.js +193 -0
  20. package/dist/bundle/chunk-7GVNQOV6.js +17 -0
  21. package/dist/bundle/chunk-7H3ZRDLW.js +630 -0
  22. package/dist/bundle/chunk-7Z4ANTAK.js +1095 -0
  23. package/dist/bundle/chunk-A6323R5P.js +22 -0
  24. package/dist/bundle/chunk-ADLS6FVG.js +24600 -0
  25. package/dist/bundle/chunk-AIXLOMH4.js +63 -0
  26. package/dist/bundle/chunk-AQDWGJZT.js +188 -0
  27. package/dist/bundle/chunk-B32SF7J3.js +18 -0
  28. package/dist/bundle/chunk-BAQLQIMI.js +1938 -0
  29. package/dist/bundle/chunk-BGILD4CI.js +1109 -0
  30. package/dist/bundle/chunk-BXZ6WSVF.js +100 -0
  31. package/dist/bundle/chunk-CTGI4ES2.js +138 -0
  32. package/dist/bundle/chunk-CVIKKIGE.js +76 -0
  33. package/dist/bundle/chunk-DDYR6DYL.js +78 -0
  34. package/dist/bundle/chunk-DFDN6AUB.js +21 -0
  35. package/dist/bundle/chunk-DP5DX45H.js +151 -0
  36. package/dist/bundle/chunk-DXKVEOSS.js +53 -0
  37. package/dist/bundle/chunk-DXZTLB24.js +120 -0
  38. package/dist/bundle/chunk-G27MRA24.js +82 -0
  39. package/dist/bundle/chunk-HTQTIKWP.js +928 -0
  40. package/dist/bundle/chunk-IYAGQXED.js +433 -0
  41. package/dist/bundle/chunk-K76WFW4I.js +124 -0
  42. package/dist/bundle/chunk-KVHRHBLY.js +884 -0
  43. package/dist/bundle/chunk-L2UIJDWB.js +31 -0
  44. package/dist/bundle/chunk-L3VS3H34.js +482 -0
  45. package/dist/bundle/chunk-MBT7GP7K.js +1970 -0
  46. package/dist/bundle/chunk-MFS52LTZ.js +570 -0
  47. package/dist/bundle/chunk-MMT46EN4.js +29 -0
  48. package/dist/bundle/chunk-MNUTWGSA.js +6094 -0
  49. package/dist/bundle/chunk-N7GAQ27N.js +82 -0
  50. package/dist/bundle/chunk-NDXAZB5Z.js +409 -0
  51. package/dist/bundle/chunk-NOKFJJPA.js +1028 -0
  52. package/dist/bundle/chunk-NW7IMGRR.js +6848 -0
  53. package/dist/bundle/chunk-O5EHUB2V.js +2 -0
  54. package/dist/bundle/chunk-OBZWUNO4.js +160 -0
  55. package/dist/bundle/chunk-PACC5N6T.js +240 -0
  56. package/dist/bundle/chunk-PF25S7L4.js +422 -0
  57. package/dist/bundle/chunk-PKTFZAXG.js +48 -0
  58. package/dist/bundle/chunk-PNBEREOU.js +35626 -0
  59. package/dist/bundle/chunk-POOGFSRA.js +385 -0
  60. package/dist/bundle/chunk-PP3JGQQE.js +3517 -0
  61. package/dist/bundle/chunk-Q2Z3VCM4.js +2 -0
  62. package/dist/bundle/chunk-QCFHL4ES.js +45 -0
  63. package/dist/bundle/chunk-QFGBMS67.js +492 -0
  64. package/dist/bundle/chunk-RUP467ZX.js +948 -0
  65. package/dist/bundle/chunk-RXDIG23Z.js +166 -0
  66. package/dist/bundle/chunk-SIA7HJE2.js +8192 -0
  67. package/dist/bundle/chunk-SL3SXQZ5.js +100 -0
  68. package/dist/bundle/chunk-SV5L36WK.js +19 -0
  69. package/dist/bundle/chunk-T6AAM7UT.js +846 -0
  70. package/dist/bundle/chunk-U6QW67SU.js +18673 -0
  71. package/dist/bundle/chunk-UKR7KH3H.js +288 -0
  72. package/dist/bundle/chunk-UOFOMU3T.js +836 -0
  73. package/dist/bundle/chunk-URO44C5T.js +3570 -0
  74. package/dist/bundle/chunk-UXM7I35J.js +281 -0
  75. package/dist/bundle/chunk-UYJUTZTT.js +73 -0
  76. package/dist/bundle/chunk-VOAVOK4I.js +1146 -0
  77. package/dist/bundle/chunk-VSUY7PDW.js +192 -0
  78. package/dist/bundle/chunk-VYUSEJE4.js +98 -0
  79. package/dist/bundle/chunk-XFCSPOLZ.js +25 -0
  80. package/dist/bundle/chunk-XT7XVPEM.js +538 -0
  81. package/dist/bundle/chunk-Y5E2WNWB.js +35 -0
  82. package/dist/bundle/chunk-YIFIY7ZE.js +58 -0
  83. package/dist/bundle/chunk-YIMI6O7R.js +5292 -0
  84. package/dist/bundle/chunk-YJRMMZI5.js +275 -0
  85. package/dist/bundle/chunk-YSHSCBPM.js +2315 -0
  86. package/dist/bundle/chunk-ZC5UXEIH.js +215 -0
  87. package/dist/bundle/chunk-ZHXIXDH5.js +161 -0
  88. package/dist/bundle/chunk-ZTOAAYFV.js +122 -0
  89. package/dist/bundle/chunk-ZVVMGPBJ.js +50 -0
  90. package/dist/bundle/cli-IQTASP44.js +831 -0
  91. package/dist/bundle/command-contract-WHZPF7NA.js +38 -0
  92. package/dist/bundle/config-IP5SGHKN.js +79 -0
  93. package/dist/bundle/dist-WT73DF46.js +136 -0
  94. package/dist/bundle/dist-XUFQCJXW.js +7577 -0
  95. package/dist/bundle/echarts-LD3AI55P.js +42501 -0
  96. package/dist/bundle/embed-XEMH4LNX.js +35 -0
  97. package/dist/bundle/embedder-ZCYKSKAE.js +108 -0
  98. package/dist/bundle/first-run-LGYDLIUM.js +23 -0
  99. package/dist/bundle/first-screen-LYQKPNF4.js +36 -0
  100. package/dist/bundle/folders-5ZBUQHAM.js +13 -0
  101. package/dist/bundle/instructions-RZMSW3OC.js +11 -0
  102. package/dist/bundle/main-NKY3JGXY.js +130 -0
  103. package/dist/bundle/mcp-7OXUHLTO.js +189 -0
  104. package/dist/bundle/mcp-OQBZXELQ.js +165 -0
  105. package/dist/bundle/mcp-VISEXTVC.js +92 -0
  106. package/dist/bundle/meetings-XPBHVZAU.js +215 -0
  107. package/dist/bundle/node-P4E63KXA.js +2340 -0
  108. package/dist/bundle/node-TLZSIHIJ.js +21 -0
  109. package/dist/bundle/node-ZRLYQL7J.js +176 -0
  110. package/dist/bundle/node-sqlite-BBEDYBWO.js +45 -0
  111. package/dist/bundle/oauth-UHVRGKZU.js +17 -0
  112. package/dist/bundle/open-J4FCAUAJ.js +19 -0
  113. package/dist/bundle/output-file-SXV2ANW7.js +63 -0
  114. package/dist/bundle/process-LL77573L.js +91 -0
  115. package/dist/bundle/program-EPMIJCGA.js +5845 -0
  116. package/dist/bundle/prompt-LUUMQTMY.js +12 -0
  117. package/dist/bundle/recognize-EMHQX4XF.js +190 -0
  118. package/dist/bundle/remote-ZXS6D7VB.js +26 -0
  119. package/dist/bundle/rerank-WP7RKZNB.js +49 -0
  120. package/dist/bundle/run-log-GS2L66G6.js +111 -0
  121. package/dist/bundle/serve-L6KLLXK2.js +19 -0
  122. package/dist/bundle/server-NOFYENP5.js +53 -0
  123. package/dist/bundle/server-P5TXAPBY.js +66 -0
  124. package/dist/bundle/services-SPOEWVK3.js +330 -0
  125. package/dist/bundle/speech-6OBAKMND.js +44 -0
  126. package/dist/bundle/state-HN5EJKXQ.js +33 -0
  127. package/dist/bundle/store-LEU3M6IN.js +124 -0
  128. package/dist/bundle/store-ZP2URKET.js +141 -0
  129. package/dist/bundle/store-connection-I53XZ2TS.js +76 -0
  130. package/dist/bundle/store-maintenance-command-PSCHEHHY.js +54 -0
  131. package/dist/bundle/streaming-AK6Q2ZGQ.js +15 -0
  132. package/dist/bundle/tokens-CCM3D4ZT.js +17 -0
  133. package/dist/bundle/zm.js +8 -0
  134. package/dist/contract-overrides.d.ts.map +1 -1
  135. package/dist/contract-overrides.js +29 -17
  136. package/dist/contract-overrides.js.map +1 -1
  137. package/dist/mcp-command.d.ts +3 -2
  138. package/dist/mcp-command.d.ts.map +1 -1
  139. package/dist/mcp-command.js +62 -10
  140. package/dist/mcp-command.js.map +1 -1
  141. package/dist/program-bindings.d.ts.map +1 -1
  142. package/dist/program-bindings.js +1 -0
  143. package/dist/program-bindings.js.map +1 -1
  144. package/dist/version.d.ts +1 -1
  145. package/dist/version.js +1 -1
  146. package/package.json +7 -5
  147. package/skills/zoom-cli/SKILL.md +2 -0
@@ -0,0 +1,884 @@
1
+ import { createRequire as __bundleRequire } from "node:module";
2
+ const require = __bundleRequire(import.meta.url);
3
+ import {
4
+ storePath
5
+ } from "./chunk-B32SF7J3.js";
6
+ import {
7
+ CliError,
8
+ resolvePaths,
9
+ singleLine
10
+ } from "./chunk-YIMI6O7R.js";
11
+ import {
12
+ __name
13
+ } from "./chunk-ZVVMGPBJ.js";
14
+
15
+ // node_modules/.pnpm/@wirecat+cli-core@0.473.0_@wirecat+cli-base@0.65.0_commander@15.0.0_esbuild@0.28.2_type_39633e3162553a2c86dde989a9811fcb/node_modules/@wirecat/cli-core/dist/store/shared-config.js
16
+ import { mkdirSync, readFileSync, renameSync, statSync, writeFileSync } from "node:fs";
17
+ import { dirname, join, resolve } from "node:path";
18
+
19
+ // node_modules/.pnpm/@wirecat+cli-core@0.473.0_@wirecat+cli-base@0.65.0_commander@15.0.0_esbuild@0.28.2_type_39633e3162553a2c86dde989a9811fcb/node_modules/@wirecat/cli-core/dist/domain/task-categories.js
20
+ var DEFAULT_TASK_CATEGORIES = [
21
+ {
22
+ name: "taxes",
23
+ meaning: "tax returns, the accountant, the tax office",
24
+ triggers: {
25
+ en: ["tax", "taxes", "accountant", "vat", "hmrc"],
26
+ ru: ["\u043D\u0430\u043B\u043E\u0433", "\u043D\u0430\u043B\u043E\u0433\u043E\u0432\u0430\u044F", "\u0434\u0435\u043A\u043B\u0430\u0440\u0430\u0446\u0438\u044F", "\u0431\u0443\u0445\u0433\u0430\u043B\u0442\u0435\u0440", "\u043D\u0434\u0444\u043B", "\u0438\u0444\u043D\u0441", "\u0432\u044B\u0447\u0435\u0442"],
27
+ es: ["impuesto", "impuestos", "hacienda", "iva", "irpf", "gestor", "gestor\xEDa"]
28
+ }
29
+ },
30
+ {
31
+ name: "investments",
32
+ meaning: "stocks, funds, crypto, a broker",
33
+ triggers: {
34
+ en: [
35
+ "invest",
36
+ "investment",
37
+ "investments",
38
+ "stocks",
39
+ "broker",
40
+ "brokerage",
41
+ "portfolio",
42
+ "crypto",
43
+ "etf",
44
+ "dividend",
45
+ "dividends"
46
+ ],
47
+ ru: ["\u0438\u043D\u0432\u0435\u0441\u0442\u0438\u0446\u0438\u0438", "\u0438\u043D\u0432\u0435\u0441\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C", "\u0431\u0440\u043E\u043A\u0435\u0440", "\u043E\u0431\u043B\u0438\u0433\u0430\u0446\u0438\u0438", "\u043F\u043E\u0440\u0442\u0444\u0435\u043B\u044C", "\u043A\u0440\u0438\u043F\u0442\u0430", "\u043A\u0440\u0438\u043F\u0442\u043E\u0432\u0430\u043B\u044E\u0442\u0430", "\u0434\u0438\u0432\u0438\u0434\u0435\u043D\u0434\u044B"],
48
+ es: ["inversi\xF3n", "invertir", "br\xF3ker", "dividendos", "cripto", "bolsa"]
49
+ }
50
+ },
51
+ {
52
+ name: "subscriptions",
53
+ meaning: "a service subscription to start, cancel or renew",
54
+ triggers: {
55
+ en: ["subscription", "subscriptions", "subscribe", "unsubscribe", "renewal", "membership", "trial"],
56
+ ru: ["\u043F\u043E\u0434\u043F\u0438\u0441\u043A\u0430", "\u043F\u043E\u0434\u043F\u0438\u0441\u043A\u0443", "\u0430\u0431\u043E\u043D\u0435\u043D\u0442\u0441\u043A\u0430\u044F", "\u0430\u0431\u043E\u043D\u0435\u043C\u0435\u043D\u0442", "\u043F\u0440\u043E\u0434\u043B\u0435\u043D\u0438\u0435"],
57
+ es: ["suscripci\xF3n", "suscribirse", "renovaci\xF3n", "membres\xEDa"]
58
+ }
59
+ },
60
+ {
61
+ name: "bills",
62
+ meaning: "a recurring bill: utilities, phone, internet",
63
+ triggers: {
64
+ en: ["utility", "utilities", "electricity", "heating"],
65
+ ru: ["\u043A\u043E\u043C\u043C\u0443\u043D\u0430\u043B\u043A\u0430", "\u043A\u043E\u043C\u043C\u0443\u043D\u0430\u043B\u044C\u043D\u044B\u0435", "\u044D\u043B\u0435\u043A\u0442\u0440\u0438\u0447\u0435\u0441\u0442\u0432\u043E", "\u0433\u0430\u0437", "\u043A\u0432\u0438\u0442\u0430\u043D\u0446\u0438\u044F", "\u043F\u043E\u043A\u0430\u0437\u0430\u043D\u0438\u044F"],
66
+ es: ["recibo", "recibos", "suministro", "suministros", "electricidad"]
67
+ }
68
+ },
69
+ {
70
+ name: "donations",
71
+ meaning: "a donation, a fundraiser, a charity",
72
+ triggers: {
73
+ en: ["donate", "donation", "donations", "charity", "fundraiser", "crowdfunding", "patreon"],
74
+ ru: ["\u043F\u043E\u0436\u0435\u0440\u0442\u0432\u043E\u0432\u0430\u043D\u0438\u0435", "\u043F\u043E\u0436\u0435\u0440\u0442\u0432\u043E\u0432\u0430\u0442\u044C", "\u0431\u043B\u0430\u0433\u043E\u0442\u0432\u043E\u0440\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0441\u0442\u044C", "\u0434\u043E\u043D\u0430\u0442", "\u0444\u043E\u043D\u0434"],
75
+ es: ["donaci\xF3n", "donar", "ben\xE9fico", "beneficencia", "ong"]
76
+ }
77
+ },
78
+ {
79
+ name: "insurance",
80
+ meaning: "an insurance policy or claim",
81
+ triggers: {
82
+ en: ["insurance", "insurer", "insured", "coverage"],
83
+ ru: ["\u0441\u0442\u0440\u0430\u0445\u043E\u0432\u043A\u0430", "\u0441\u0442\u0440\u0430\u0445\u043E\u0432\u0430\u044F", "\u0441\u0442\u0440\u0430\u0445\u043E\u0432\u0430\u043D\u0438\u0435", "\u043F\u043E\u043B\u0438\u0441", "\u043E\u0441\u0430\u0433\u043E", "\u043A\u0430\u0441\u043A\u043E", "\u0434\u043C\u0441"],
84
+ es: ["aseguradora", "p\xF3liza", "siniestro", "mutua"]
85
+ }
86
+ },
87
+ {
88
+ name: "bank",
89
+ meaning: "cards, bank accounts, wire transfers, a bank's request",
90
+ triggers: {
91
+ en: ["bank", "banking", "card", "iban", "swift", "wire", "overdraft"],
92
+ ru: ["\u0431\u0430\u043D\u043A", "\u043A\u0430\u0440\u0442\u0430", "\u043A\u0430\u0440\u0442\u0443", "\u0440\u0435\u043A\u0432\u0438\u0437\u0438\u0442\u044B", "\u0432\u044B\u043F\u0438\u0441\u043A\u0430", "iban", "swift"],
93
+ es: ["banco", "tarjeta", "iban", "swift"]
94
+ }
95
+ },
96
+ {
97
+ name: "civic",
98
+ meaning: "voting, a petition, a census, jury duty, the local council",
99
+ triggers: {
100
+ en: ["vote", "voting", "election", "elections", "petition", "census", "jury", "ballot"],
101
+ ru: ["\u0432\u044B\u0431\u043E\u0440\u044B", "\u0433\u043E\u043B\u043E\u0441\u043E\u0432\u0430\u043D\u0438\u0435", "\u043F\u0440\u043E\u0433\u043E\u043B\u043E\u0441\u043E\u0432\u0430\u0442\u044C", "\u043F\u0435\u0442\u0438\u0446\u0438\u044F", "\u043F\u0435\u0440\u0435\u043F\u0438\u0441\u044C", "\u0434\u0435\u043F\u0443\u0442\u0430\u0442"],
102
+ es: ["elecciones", "votar", "votaci\xF3n", "censo", "refer\xE9ndum"]
103
+ }
104
+ },
105
+ {
106
+ name: "government",
107
+ meaning: "a visa, residence, a permit, an appointment at a public office",
108
+ triggers: {
109
+ en: ["visa", "residence", "permit", "embassy", "consulate", "passport", "citizenship", "nie"],
110
+ ru: [
111
+ "\u0432\u0438\u0437\u0430",
112
+ "\u0432\u043D\u0436",
113
+ "\u0433\u0440\u0430\u0436\u0434\u0430\u043D\u0441\u0442\u0432\u043E",
114
+ "\u043F\u043E\u0441\u043E\u043B\u044C\u0441\u0442\u0432\u043E",
115
+ "\u043A\u043E\u043D\u0441\u0443\u043B\u044C\u0441\u0442\u0432\u043E",
116
+ "\u0433\u043E\u0441\u0443\u0441\u043B\u0443\u0433\u0438",
117
+ "\u043C\u0444\u0446",
118
+ "\u043F\u0430\u0441\u043F\u043E\u0440\u0442",
119
+ "\u0437\u0430\u0433\u0440\u0430\u043D\u043F\u0430\u0441\u043F\u043E\u0440\u0442",
120
+ "\u043F\u0440\u043E\u043F\u0438\u0441\u043A\u0430"
121
+ ],
122
+ es: [
123
+ "visado",
124
+ "residencia",
125
+ "extranjer\xEDa",
126
+ "empadronamiento",
127
+ "padr\xF3n",
128
+ "ayuntamiento",
129
+ "consulado",
130
+ "embajada",
131
+ "pasaporte",
132
+ "nie"
133
+ ]
134
+ }
135
+ },
136
+ {
137
+ name: "legal",
138
+ meaning: "a lawyer, a notary, a court or a dispute",
139
+ triggers: {
140
+ en: ["lawyer", "attorney", "notary", "court", "lawsuit", "dispute", "legal"],
141
+ ru: ["\u044E\u0440\u0438\u0441\u0442", "\u0430\u0434\u0432\u043E\u043A\u0430\u0442", "\u043D\u043E\u0442\u0430\u0440\u0438\u0443\u0441", "\u0438\u0441\u043A", "\u043F\u0440\u0435\u0442\u0435\u043D\u0437\u0438\u044F", "\u0434\u043E\u0432\u0435\u0440\u0435\u043D\u043D\u043E\u0441\u0442\u044C", "\u0441\u0443\u0434\u0435\u0431\u043D\u044B\u0439"],
142
+ es: ["abogado", "notario", "juzgado", "demanda", "tribunal", "litigio"]
143
+ }
144
+ },
145
+ {
146
+ name: "hiring",
147
+ meaning: "candidates, interviews, job offers",
148
+ triggers: {
149
+ en: ["candidate", "candidates", "interview", "hire", "hiring", "recruiter", "vacancy", "resume", "cv"],
150
+ ru: ["\u043A\u0430\u043D\u0434\u0438\u0434\u0430\u0442", "\u0441\u043E\u0431\u0435\u0441\u0435\u0434\u043E\u0432\u0430\u043D\u0438\u0435", "\u0432\u0430\u043A\u0430\u043D\u0441\u0438\u044F", "\u0440\u0435\u0437\u044E\u043C\u0435", "\u043E\u0444\u0444\u0435\u0440", "\u043D\u0430\u0439\u043C", "\u0440\u0435\u043A\u0440\u0443\u0442\u0435\u0440"],
151
+ es: ["candidato", "entrevista", "vacante", "curr\xEDculum", "contrataci\xF3n"]
152
+ }
153
+ },
154
+ {
155
+ name: "sales",
156
+ meaning: "leads, deals, quotes",
157
+ triggers: {
158
+ en: ["quote", "pipeline", "prospect", "crm", "sales"],
159
+ ru: ["\u043B\u0438\u0434", "\u043B\u0438\u0434\u044B", "\u0441\u0434\u0435\u043B\u043A\u0430", "\u043F\u0440\u043E\u0434\u0430\u0436\u0438", "\u043A\u043E\u043C\u043C\u0435\u0440\u0447\u0435\u0441\u043A\u043E\u0435"],
160
+ es: ["venta", "ventas", "presupuesto"]
161
+ }
162
+ },
163
+ {
164
+ name: "partners",
165
+ meaning: "a partnership or an integration with another company",
166
+ triggers: {
167
+ en: ["partner", "partners", "partnership", "integration", "affiliate", "reseller"],
168
+ ru: ["\u043F\u0430\u0440\u0442\u043D\u0451\u0440", "\u043F\u0430\u0440\u0442\u043D\u0451\u0440\u044B", "\u043F\u0430\u0440\u0442\u043D\u0451\u0440\u0441\u0442\u0432\u043E", "\u0438\u043D\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044F"],
169
+ es: ["socio", "alianza", "integraci\xF3n", "colaboraci\xF3n"]
170
+ }
171
+ },
172
+ {
173
+ name: "support",
174
+ meaning: "a user's or customer's problem to solve",
175
+ triggers: {
176
+ en: ["support", "complaint", "helpdesk", "outage"],
177
+ ru: ["\u043F\u043E\u0434\u0434\u0435\u0440\u0436\u043A\u0430", "\u0436\u0430\u043B\u043E\u0431\u0430", "\u043E\u0431\u0440\u0430\u0449\u0435\u043D\u0438\u0435", "\u0442\u0438\u043A\u0435\u0442"],
178
+ es: ["soporte", "incidencia", "queja", "reclamaci\xF3n"]
179
+ }
180
+ },
181
+ {
182
+ name: "security",
183
+ meaning: "a hacked account, a scam, 2FA, a leak or breach",
184
+ triggers: {
185
+ en: ["hacked", "hack", "scam", "phishing", "breach", "2fa", "malware", "fraud", "spam"],
186
+ ru: ["\u0432\u0437\u043B\u043E\u043C", "\u0432\u0437\u043B\u043E\u043C\u0430\u043B\u0438", "\u043C\u043E\u0448\u0435\u043D\u043D\u0438\u043A\u0438", "\u043C\u043E\u0448\u0435\u043D\u043D\u0438\u0447\u0435\u0441\u0442\u0432\u043E", "\u0444\u0438\u0448\u0438\u043D\u0433", "\u0443\u0442\u0435\u0447\u043A\u0430", "\u0441\u043F\u0430\u043C"],
187
+ es: ["hackeado", "estafa", "fraude", "phishing", "suplantaci\xF3n"]
188
+ }
189
+ },
190
+ {
191
+ name: "access",
192
+ meaning: "a login, password, key, invite or permission to give or get",
193
+ triggers: {
194
+ en: ["access", "password", "credentials", "invite", "permission", "key", "keys", "token", "vpn"],
195
+ ru: ["\u0434\u043E\u0441\u0442\u0443\u043F", "\u043F\u0430\u0440\u043E\u043B\u044C", "\u043B\u043E\u0433\u0438\u043D", "\u043A\u043B\u044E\u0447", "\u043A\u043B\u044E\u0447\u0438", "\u043F\u0440\u0438\u0433\u043B\u0430\u0448\u0435\u043D\u0438\u0435", "\u0430\u043A\u043A\u0430\u0443\u043D\u0442"],
196
+ es: ["acceso", "contrase\xF1a", "llave", "llaves", "clave", "invitaci\xF3n", "permiso"]
197
+ }
198
+ },
199
+ {
200
+ name: "tech",
201
+ meaning: "code, servers, bugs, builds, deploys",
202
+ triggers: {
203
+ en: [
204
+ "bug",
205
+ "deploy",
206
+ "deployment",
207
+ "server",
208
+ "build",
209
+ "code",
210
+ "merge",
211
+ "crash",
212
+ "flaky",
213
+ "database",
214
+ "api",
215
+ "release",
216
+ "prod"
217
+ ],
218
+ ru: ["\u0431\u0430\u0433", "\u0434\u0435\u043F\u043B\u043E\u0439", "\u0441\u0435\u0440\u0432\u0435\u0440", "\u0441\u0431\u043E\u0440\u043A\u0430", "\u043A\u043E\u0434", "\u043F\u0443\u043B\u0440\u0435\u043A\u0432\u0435\u0441\u0442", "\u043F\u0440\u043E\u0434", "\u0440\u0435\u043B\u0438\u0437"],
219
+ es: ["fallo", "servidor", "despliegue", "c\xF3digo"]
220
+ }
221
+ },
222
+ {
223
+ name: "media",
224
+ meaning: "the press, a journalist, a podcast or an interview for the media",
225
+ triggers: {
226
+ en: ["press", "journalist", "podcast", "media"],
227
+ ru: ["\u0436\u0443\u0440\u043D\u0430\u043B\u0438\u0441\u0442", "\u043F\u0440\u0435\u0441\u0441\u0430", "\u0441\u043C\u0438", "\u043F\u043E\u0434\u043A\u0430\u0441\u0442", "\u0438\u043D\u0442\u0435\u0440\u0432\u044C\u044E", "\u0440\u0435\u0434\u0430\u043A\u0446\u0438\u044F"],
228
+ es: ["prensa", "periodista", "podcast", "entrevistarte"]
229
+ }
230
+ },
231
+ {
232
+ name: "marketing",
233
+ meaning: "campaigns, ads, SEO, newsletters, social media",
234
+ triggers: {
235
+ en: ["marketing", "campaign", "ads", "advertising", "seo", "promo", "newsletter", "instagram"],
236
+ ru: ["\u043C\u0430\u0440\u043A\u0435\u0442\u0438\u043D\u0433", "\u0440\u0435\u043A\u043B\u0430\u043C\u0430", "\u0440\u0435\u043A\u043B\u0430\u043C\u0443", "\u0442\u0430\u0440\u0433\u0435\u0442", "\u043A\u0430\u043C\u043F\u0430\u043D\u0438\u044F", "\u0440\u0430\u0441\u0441\u044B\u043B\u043A\u0430", "\u043F\u0440\u043E\u0434\u0432\u0438\u0436\u0435\u043D\u0438\u0435"],
237
+ es: ["marketing", "campa\xF1a", "publicidad", "anuncio", "anuncios", "bolet\xEDn"]
238
+ }
239
+ },
240
+ {
241
+ name: "design",
242
+ meaning: "UI, mockups, a logo or a brand to design or review",
243
+ triggers: {
244
+ en: ["design", "designer", "mockup", "mockups", "logo", "brand", "branding", "figma", "wireframe", "ui", "ux"],
245
+ ru: ["\u0434\u0438\u0437\u0430\u0439\u043D", "\u0434\u0438\u0437\u0430\u0439\u043D\u0435\u0440", "\u043C\u0430\u043A\u0435\u0442", "\u043C\u0430\u043A\u0435\u0442\u044B", "\u043B\u043E\u0433\u043E\u0442\u0438\u043F", "\u0444\u0438\u0433\u043C\u0430", "\u0431\u0440\u0435\u043D\u0434\u0438\u043D\u0433"],
246
+ es: ["dise\xF1o", "dise\xF1ador", "logotipo", "maqueta", "marca"]
247
+ }
248
+ },
249
+ {
250
+ name: "research",
251
+ meaning: "research, a survey, an analysis or a benchmark",
252
+ triggers: {
253
+ en: ["research", "survey", "benchmark", "analysis", "experiment", "dataset"],
254
+ ru: ["\u0438\u0441\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u043D\u0438\u0435", "\u043E\u043F\u0440\u043E\u0441", "\u0431\u0435\u043D\u0447\u043C\u0430\u0440\u043A", "\u044D\u043A\u0441\u043F\u0435\u0440\u0438\u043C\u0435\u043D\u0442", "\u0434\u0430\u0442\u0430\u0441\u0435\u0442"],
255
+ es: ["investigaci\xF3n", "encuesta", "experimento"]
256
+ }
257
+ },
258
+ {
259
+ name: "content",
260
+ meaning: "posts, articles, videos to write, film or review",
261
+ triggers: {
262
+ en: ["article", "blog", "video", "draft", "copywriting"],
263
+ ru: ["\u043F\u043E\u0441\u0442", "\u0431\u043B\u043E\u0433", "\u0432\u0438\u0434\u0435\u043E", "\u0440\u043E\u043B\u0438\u043A", "\u0447\u0435\u0440\u043D\u043E\u0432\u0438\u043A"],
264
+ es: ["art\xEDculo", "publicaci\xF3n", "v\xEDdeo", "video", "borrador"]
265
+ }
266
+ },
267
+ {
268
+ name: "vendors",
269
+ meaning: "a supplier, contractor or agency you pay for a service",
270
+ triggers: {
271
+ en: ["vendor", "vendors", "supplier", "suppliers", "contractor", "freelancer", "agency", "outsourcing"],
272
+ ru: ["\u043F\u043E\u0441\u0442\u0430\u0432\u0449\u0438\u043A", "\u043F\u043E\u0434\u0440\u044F\u0434\u0447\u0438\u043A", "\u0444\u0440\u0438\u043B\u0430\u043D\u0441\u0435\u0440", "\u0430\u0433\u0435\u043D\u0442\u0441\u0442\u0432\u043E", "\u0438\u0441\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C"],
273
+ es: ["proveedor", "proveedores", "contratista", "agencia"]
274
+ }
275
+ },
276
+ {
277
+ name: "car",
278
+ meaning: "the car: repairs, parking, fines, inspection",
279
+ triggers: {
280
+ en: ["car", "parking", "mechanic", "garage", "tyres", "tires", "mot"],
281
+ ru: ["\u043C\u0430\u0448\u0438\u043D\u0430", "\u0430\u0432\u0442\u043E", "\u043F\u0430\u0440\u043A\u043E\u0432\u043A\u0430", "\u0448\u0442\u0440\u0430\u0444", "\u0433\u0438\u0431\u0434\u0434", "\u0448\u0438\u043D\u043E\u043C\u043E\u043D\u0442\u0430\u0436", "\u0442\u0435\u0445\u043E\u0441\u043C\u043E\u0442\u0440"],
282
+ es: ["coche", "aparcamiento", "multa", "taller", "itv", "neum\xE1ticos"]
283
+ }
284
+ },
285
+ {
286
+ name: "travel",
287
+ meaning: "flights, trains, hotels, trips",
288
+ triggers: {
289
+ en: ["flight", "flights", "hotel", "airport", "trip", "train", "airbnb", "boarding"],
290
+ ru: ["\u0440\u0435\u0439\u0441", "\u043F\u0435\u0440\u0435\u043B\u0451\u0442", "\u0441\u0430\u043C\u043E\u043B\u0451\u0442", "\u0433\u043E\u0441\u0442\u0438\u043D\u0438\u0446\u0430", "\u043E\u0442\u0435\u043B\u044C", "\u0430\u044D\u0440\u043E\u043F\u043E\u0440\u0442", "\u043F\u043E\u0435\u0437\u0434", "\u043F\u043E\u0435\u0437\u0434\u043A\u0430", "\u043A\u043E\u043C\u0430\u043D\u0434\u0438\u0440\u043E\u0432\u043A\u0430"],
291
+ es: ["vuelo", "vuelos", "hotel", "aeropuerto", "viaje", "tren"]
292
+ }
293
+ },
294
+ {
295
+ name: "pets",
296
+ meaning: "a pet: the vet, food, a sitter, walks",
297
+ triggers: {
298
+ en: ["pet", "pets", "vet", "dog", "cat", "puppy", "kitten", "grooming"],
299
+ ru: ["\u0432\u0435\u0442\u0435\u0440\u0438\u043D\u0430\u0440", "\u0432\u0435\u0442\u043A\u043B\u0438\u043D\u0438\u043A\u0430", "\u0441\u043E\u0431\u0430\u043A\u0430", "\u0441\u043E\u0431\u0430\u043A\u0443", "\u043A\u043E\u0448\u043A\u0430", "\u043A\u043E\u0442", "\u0449\u0435\u043D\u043E\u043A", "\u043A\u043E\u0442\u0451\u043D\u043E\u043A", "\u0433\u0440\u0443\u043C\u0438\u043D\u0433"],
300
+ es: ["veterinario", "perro", "gato", "mascota", "cachorro"]
301
+ }
302
+ },
303
+ {
304
+ name: "fitness",
305
+ meaning: "the gym, training, a sport",
306
+ triggers: {
307
+ en: ["gym", "workout", "trainer", "yoga", "pilates", "fitness", "marathon", "swimming"],
308
+ ru: ["\u0441\u043F\u043E\u0440\u0442\u0437\u0430\u043B", "\u0442\u0440\u0435\u043D\u0438\u0440\u043E\u0432\u043A\u0430", "\u0442\u0440\u0435\u043D\u0435\u0440", "\u0439\u043E\u0433\u0430", "\u0444\u0438\u0442\u043D\u0435\u0441", "\u0431\u0430\u0441\u0441\u0435\u0439\u043D", "\u043F\u0440\u043E\u0431\u0435\u0436\u043A\u0430"],
309
+ es: ["gimnasio", "entrenador", "entrenamiento", "yoga", "pilates", "piscina"]
310
+ }
311
+ },
312
+ {
313
+ name: "beauty",
314
+ meaning: "a haircut, nails, cosmetics, a salon",
315
+ triggers: {
316
+ en: ["haircut", "hairdresser", "barber", "salon", "manicure", "nails", "cosmetics", "spa"],
317
+ ru: ["\u043F\u0430\u0440\u0438\u043A\u043C\u0430\u0445\u0435\u0440", "\u0441\u0442\u0440\u0438\u0436\u043A\u0430", "\u043C\u0430\u043D\u0438\u043A\u044E\u0440", "\u043A\u043E\u0441\u043C\u0435\u0442\u043E\u043B\u043E\u0433", "\u0431\u0430\u0440\u0431\u0435\u0440\u0448\u043E\u043F", "\u0441\u0430\u043B\u043E\u043D", "\u043A\u043E\u0441\u043C\u0435\u0442\u0438\u043A\u0430"],
318
+ es: ["peluquer\xEDa", "peluquero", "manicura", "u\xF1as", "est\xE9tica", "cosm\xE9tica"]
319
+ }
320
+ },
321
+ {
322
+ name: "health",
323
+ meaning: "doctors, prescriptions, medicines",
324
+ triggers: {
325
+ en: ["doctor", "dentist", "clinic", "hospital", "prescription", "pharmacy", "medicine", "medicines", "vitamins"],
326
+ ru: [
327
+ "\u0432\u0440\u0430\u0447",
328
+ "\u0441\u0442\u043E\u043C\u0430\u0442\u043E\u043B\u043E\u0433",
329
+ "\u043E\u043A\u0443\u043B\u0438\u0441\u0442",
330
+ "\u043A\u0430\u0440\u0434\u0438\u043E\u043B\u043E\u0433",
331
+ "\u0431\u043E\u043B\u044C\u043D\u0438\u0446\u0430",
332
+ "\u043F\u043E\u043B\u0438\u043A\u043B\u0438\u043D\u0438\u043A\u0430",
333
+ "\u043B\u0435\u043A\u0430\u0440\u0441\u0442\u0432\u043E",
334
+ "\u043B\u0435\u043A\u0430\u0440\u0441\u0442\u0432\u0430",
335
+ "\u0440\u0435\u0446\u0435\u043F\u0442",
336
+ "\u0430\u043F\u0442\u0435\u043A\u0430",
337
+ "\u0430\u043D\u0430\u043B\u0438\u0437\u044B",
338
+ "\u0432\u0438\u0442\u0430\u043C\u0438\u043D\u044B"
339
+ ],
340
+ es: ["m\xE9dico", "dentista", "cl\xEDnica", "hospital", "receta", "farmacia", "medicamento"]
341
+ }
342
+ },
343
+ {
344
+ name: "education",
345
+ meaning: "courses, books, languages, studies at school or university",
346
+ triggers: {
347
+ en: ["course", "lesson", "tutor", "university", "exam", "homework", "study"],
348
+ ru: ["\u043A\u0443\u0440\u0441\u044B", "\u0443\u0440\u043E\u043A", "\u0440\u0435\u043F\u0435\u0442\u0438\u0442\u043E\u0440", "\u0443\u043D\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442", "\u044D\u043A\u0437\u0430\u043C\u0435\u043D", "\u0443\u0447\u0451\u0431\u0430", "\u043B\u0435\u043A\u0446\u0438\u044F", "\u043A\u043D\u0438\u0433\u0430"],
349
+ es: ["curso", "universidad", "examen", "libro", "idioma"]
350
+ }
351
+ },
352
+ {
353
+ name: "celebrations",
354
+ meaning: "a birthday, wedding, anniversary or holiday to plan or mark",
355
+ triggers: {
356
+ en: ["birthday", "anniversary", "christmas", "celebration", "celebrate"],
357
+ ru: ["\u0440\u043E\u0436\u0434\u0435\u043D\u0438\u044F", "\u0441\u0432\u0430\u0434\u044C\u0431\u0430", "\u044E\u0431\u0438\u043B\u0435\u0439", "\u0433\u043E\u0434\u043E\u0432\u0449\u0438\u043D\u0430", "\u043F\u0440\u0430\u0437\u0434\u043D\u0438\u043A", "\u043F\u0440\u0430\u0437\u0434\u043D\u043E\u0432\u0430\u0442\u044C"],
358
+ es: ["cumplea\xF1os", "boda", "aniversario", "navidad", "celebrar", "celebraci\xF3n"]
359
+ }
360
+ },
361
+ {
362
+ name: "childcare",
363
+ meaning: "a nanny, a babysitter, kindergarten, kids' clubs",
364
+ triggers: {
365
+ en: ["nanny", "babysitter", "babysitting", "kindergarten", "daycare", "nursery"],
366
+ ru: ["\u043D\u044F\u043D\u044F", "\u0441\u0430\u0434\u0438\u043A", "\u0434\u0435\u0442\u0441\u0430\u0434", "\u043A\u0440\u0443\u0436\u043E\u043A", "\u043F\u0440\u043E\u0434\u043B\u0451\u043D\u043A\u0430"],
367
+ es: ["ni\xF1era", "guarder\xEDa", "canguro", "extraescolares"]
368
+ }
369
+ },
370
+ {
371
+ name: "elder-care",
372
+ meaning: "care for an older relative: a carer, a care home",
373
+ triggers: {
374
+ en: ["carer", "caregiver", "eldercare", "elderly"],
375
+ ru: ["\u0441\u0438\u0434\u0435\u043B\u043A\u0430", "\u043F\u0430\u043D\u0441\u0438\u043E\u043D\u0430\u0442", "\u043F\u043E\u0436\u0438\u043B\u043E\u0439", "\u043F\u043E\u0436\u0438\u043B\u044B\u0445"],
376
+ es: ["cuidadora", "cuidador", "geri\xE1trico", "mayores"]
377
+ }
378
+ },
379
+ {
380
+ name: "family",
381
+ meaning: "kids, school, parents and relatives",
382
+ triggers: {
383
+ en: [
384
+ "mum",
385
+ "mom",
386
+ "dad",
387
+ "kids",
388
+ "kid",
389
+ "school",
390
+ "grandma",
391
+ "grandpa",
392
+ "wife",
393
+ "husband",
394
+ "daughter",
395
+ "parents"
396
+ ],
397
+ ru: [
398
+ "\u043C\u0430\u043C\u0430",
399
+ "\u043F\u0430\u043F\u0430",
400
+ "\u0431\u0430\u0431\u0443\u0448\u043A\u0430",
401
+ "\u0434\u0435\u0434\u0443\u0448\u043A\u0430",
402
+ "\u0434\u0435\u0442\u0438",
403
+ "\u0440\u0435\u0431\u0451\u043D\u043E\u043A",
404
+ "\u0441\u044B\u043D",
405
+ "\u0434\u043E\u0447\u044C",
406
+ "\u043C\u0443\u0436",
407
+ "\u0436\u0435\u043D\u0430",
408
+ "\u0448\u043A\u043E\u043B\u0430",
409
+ "\u0443\u0447\u0438\u0442\u0435\u043B\u044C",
410
+ "\u043A\u043B\u0430\u0441\u0441",
411
+ "\u0440\u043E\u0434\u0438\u0442\u0435\u043B\u0438",
412
+ "\u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044C\u0441\u043A\u043E\u0435",
413
+ "\u0434\u043D\u0435\u0432\u043D\u0438\u043A",
414
+ "\u0442\u0451\u0442\u044F"
415
+ ],
416
+ es: ["mam\xE1", "pap\xE1", "hijos", "hijo", "hija", "colegio", "abuela", "abuelo", "padres", "ni\xF1os"]
417
+ }
418
+ },
419
+ {
420
+ name: "real-estate",
421
+ meaning: "buying, selling or letting a property; a mortgage",
422
+ triggers: {
423
+ en: ["mortgage", "property", "realtor", "tenant", "tenants"],
424
+ ru: ["\u0438\u043F\u043E\u0442\u0435\u043A\u0430", "\u043D\u0435\u0434\u0432\u0438\u0436\u0438\u043C\u043E\u0441\u0442\u044C", "\u0440\u0438\u0435\u043B\u0442\u043E\u0440", "\u0440\u0438\u044D\u043B\u0442\u043E\u0440", "\u0430\u0440\u0435\u043D\u0434\u0430\u0442\u043E\u0440", "\u0430\u0440\u0435\u043D\u0434\u0430\u0442\u043E\u0440\u044B"],
425
+ es: ["hipoteca", "inmobiliaria", "inmueble", "compraventa", "tasaci\xF3n", "inquilino"]
426
+ }
427
+ },
428
+ {
429
+ name: "moving",
430
+ meaning: "moving house: movers, boxes, a new address",
431
+ triggers: {
432
+ en: ["movers", "relocation", "relocate", "removals"],
433
+ ru: ["\u043F\u0435\u0440\u0435\u0435\u0437\u0434", "\u043F\u0435\u0440\u0435\u0435\u0445\u0430\u0442\u044C", "\u043F\u0435\u0440\u0435\u0435\u0437\u0436\u0430\u0435\u043C", "\u0433\u0440\u0443\u0437\u0447\u0438\u043A\u0438"],
434
+ es: ["mudanza", "mudarse", "mudanzas"]
435
+ }
436
+ },
437
+ {
438
+ name: "home",
439
+ meaning: "the flat: repairs, rent, the landlord, neighbours",
440
+ triggers: {
441
+ en: [
442
+ "flat",
443
+ "apartment",
444
+ "landlord",
445
+ "rent",
446
+ "plumber",
447
+ "leak",
448
+ "electrician",
449
+ "neighbours",
450
+ "boiler",
451
+ "intercom",
452
+ "repair"
453
+ ],
454
+ ru: [
455
+ "\u043A\u0432\u0430\u0440\u0442\u0438\u0440\u0430",
456
+ "\u0430\u0440\u0435\u043D\u0434\u0430",
457
+ "\u0440\u0435\u043C\u043E\u043D\u0442",
458
+ "\u0441\u0430\u043D\u0442\u0435\u0445\u043D\u0438\u043A",
459
+ "\u043F\u0440\u043E\u0442\u0435\u0447\u043A\u0430",
460
+ "\u044D\u043B\u0435\u043A\u0442\u0440\u0438\u043A",
461
+ "\u0441\u043E\u0441\u0435\u0434\u0438",
462
+ "\u043F\u043E\u0434\u044A\u0435\u0437\u0434",
463
+ "\u0434\u043E\u043C\u043E\u0444\u043E\u043D",
464
+ "\u043F\u043E\u0434\u0432\u0430\u043B",
465
+ "\u0447\u0435\u0440\u0434\u0430\u043A",
466
+ "\u044D\u0442\u0430\u0436",
467
+ "\u043A\u043E\u0440\u0438\u0434\u043E\u0440",
468
+ "\u0436\u0438\u043B\u044C\u0446\u044B"
469
+ ],
470
+ es: ["piso", "alquiler", "casero", "fontanero", "aver\xEDa", "vecinos", "portal", "reforma", "calefacci\xF3n"]
471
+ }
472
+ },
473
+ {
474
+ name: "delivery",
475
+ meaning: "a parcel, order or courier to send, track or collect",
476
+ triggers: {
477
+ en: ["delivery", "deliver", "parcel", "package", "shipment", "ship", "courier", "tracking", "pickup", "order"],
478
+ ru: ["\u0434\u043E\u0441\u0442\u0430\u0432\u043A\u0430", "\u043F\u043E\u0441\u044B\u043B\u043A\u0430", "\u043A\u0443\u0440\u044C\u0435\u0440", "\u0442\u0440\u0435\u043A", "\u0432\u044B\u0434\u0430\u0447\u0438", "\u0441\u0434\u044D\u043A", "\u043E\u0437\u043E\u043D", "\u0437\u0430\u043A\u0430\u0437"],
479
+ es: ["entrega", "paquete", "env\xEDo", "pedido", "mensajero", "repartidor", "correos"]
480
+ }
481
+ },
482
+ {
483
+ name: "devices",
484
+ meaning: "a phone, laptop or gadget to buy, fix or set up",
485
+ triggers: {
486
+ en: ["laptop", "iphone", "smartphone", "printer", "router", "charger", "headphones", "macbook", "gadget"],
487
+ ru: ["\u043D\u043E\u0443\u0442\u0431\u0443\u043A", "\u0441\u043C\u0430\u0440\u0442\u0444\u043E\u043D", "\u0430\u0439\u0444\u043E\u043D", "\u043F\u0440\u0438\u043D\u0442\u0435\u0440", "\u0440\u043E\u0443\u0442\u0435\u0440", "\u0437\u0430\u0440\u044F\u0434\u043A\u0430", "\u043D\u0430\u0443\u0448\u043D\u0438\u043A\u0438", "\u043C\u0430\u043A\u0431\u0443\u043A", "\u0433\u0430\u0434\u0436\u0435\u0442"],
488
+ es: ["port\xE1til", "impresora", "cargador", "auriculares", "router", "smartphone"]
489
+ }
490
+ },
491
+ {
492
+ name: "food",
493
+ meaning: "groceries, cooking, a restaurant",
494
+ triggers: {
495
+ en: ["groceries", "restaurant", "cook", "cooking", "recipe", "takeaway"],
496
+ ru: ["\u043F\u0440\u043E\u0434\u0443\u043A\u0442\u044B", "\u0440\u0435\u0441\u0442\u043E\u0440\u0430\u043D", "\u0441\u0442\u043E\u043B\u0438\u043A", "\u0433\u043E\u0442\u043E\u0432\u0438\u0442\u044C", "\u043A\u0443\u043B\u0438\u043D\u0430\u0440\u0438\u044F"],
497
+ es: ["restaurante", "comida", "cocinar", "mercadona"]
498
+ }
499
+ },
500
+ {
501
+ name: "shopping",
502
+ meaning: "things to buy",
503
+ triggers: {
504
+ en: ["buy", "purchase", "shop", "shopping"],
505
+ ru: ["\u043A\u0443\u043F\u0438\u0442\u044C", "\u043F\u043E\u043A\u0443\u043F\u043A\u0430", "\u043C\u0430\u0433\u0430\u0437\u0438\u043D"],
506
+ es: ["comprar", "compra", "tienda", "supermercado"]
507
+ }
508
+ },
509
+ {
510
+ name: "hobbies",
511
+ meaning: "a hobby: music, photography, crafts, a game you play",
512
+ triggers: {
513
+ en: ["hobby", "guitar", "piano", "photography", "painting", "knitting", "fishing", "chess"],
514
+ ru: ["\u0445\u043E\u0431\u0431\u0438", "\u0433\u0438\u0442\u0430\u0440\u0430", "\u0444\u043E\u0440\u0442\u0435\u043F\u0438\u0430\u043D\u043E", "\u0440\u0438\u0441\u043E\u0432\u0430\u043D\u0438\u0435", "\u0444\u043E\u0442\u043E\u0433\u0440\u0430\u0444\u0438\u044F", "\u0440\u044B\u0431\u0430\u043B\u043A\u0430", "\u0448\u0430\u0445\u043C\u0430\u0442\u044B"],
515
+ es: ["afici\xF3n", "guitarra", "piano", "fotograf\xEDa", "pintura", "pesca", "ajedrez"]
516
+ }
517
+ },
518
+ {
519
+ name: "entertainment",
520
+ meaning: "films, series, concerts, games, shows",
521
+ triggers: {
522
+ en: ["film", "movie", "cinema", "series", "concert", "game", "theatre", "theater", "netflix"],
523
+ ru: ["\u0444\u0438\u043B\u044C\u043C", "\u0441\u0435\u0440\u0438\u0430\u043B", "\u043A\u043E\u043D\u0446\u0435\u0440\u0442", "\u0438\u0433\u0440\u0430", "\u0442\u0435\u0430\u0442\u0440", "\u0441\u043F\u0435\u043A\u0442\u0430\u043A\u043B\u044C", "\u043C\u0430\u0442\u0447", "\u043A\u0438\u043D\u043E\u0442\u0435\u0430\u0442\u0440"],
524
+ es: ["pel\xEDcula", "cine", "serie", "concierto", "juego", "teatro"]
525
+ }
526
+ },
527
+ {
528
+ name: "events",
529
+ meaning: "an event, tickets, a venue, an RSVP",
530
+ triggers: {
531
+ en: ["event", "tickets", "ticket", "rsvp", "venue", "conference", "festival", "party", "reservation"],
532
+ ru: ["\u043C\u0435\u0440\u043E\u043F\u0440\u0438\u044F\u0442\u0438\u0435", "\u0431\u0438\u043B\u0435\u0442\u044B", "\u043A\u043E\u043D\u0444\u0435\u0440\u0435\u043D\u0446\u0438\u044F", "\u0444\u0435\u0441\u0442\u0438\u0432\u0430\u043B\u044C", "\u0432\u0435\u0447\u0435\u0440\u0438\u043D\u043A\u0430"],
533
+ es: ["evento", "entradas", "fiesta", "congreso", "conferencia"]
534
+ }
535
+ },
536
+ {
537
+ name: "religion",
538
+ meaning: "church, a service, a religious holiday or rite",
539
+ triggers: {
540
+ en: ["church", "mosque", "synagogue", "temple", "prayer", "priest", "baptism"],
541
+ ru: ["\u0446\u0435\u0440\u043A\u043E\u0432\u044C", "\u0445\u0440\u0430\u043C", "\u0431\u0430\u0442\u044E\u0448\u043A\u0430", "\u043C\u043E\u043B\u0438\u0442\u0432\u0430", "\u043A\u0440\u0435\u0449\u0435\u043D\u0438\u0435", "\u043B\u0438\u0442\u0443\u0440\u0433\u0438\u044F"],
542
+ es: ["iglesia", "misa", "parroquia", "bautizo", "sacerdote"]
543
+ }
544
+ },
545
+ {
546
+ name: "community",
547
+ meaning: "a group or club you run or help: members, moderation, admin work",
548
+ triggers: {
549
+ en: ["community", "club", "members", "volunteer", "moderator"],
550
+ ru: ["\u0441\u043E\u043E\u0431\u0449\u0435\u0441\u0442\u0432\u043E", "\u043A\u043B\u0443\u0431", "\u0443\u0447\u0430\u0441\u0442\u043D\u0438\u043A\u0438", "\u043C\u043E\u0434\u0435\u0440\u0430\u0446\u0438\u044F", "\u0432\u043E\u043B\u043E\u043D\u0442\u0451\u0440"],
551
+ es: ["comunidad", "voluntario", "miembros"]
552
+ }
553
+ },
554
+ {
555
+ name: "intro",
556
+ meaning: "introduce people, or ask for an introduction",
557
+ triggers: {
558
+ en: ["intro", "introduce", "introduction", "referral"],
559
+ ru: ["\u043F\u043E\u0437\u043D\u0430\u043A\u043E\u043C\u0438\u0442\u044C", "\u043F\u043E\u0437\u043D\u0430\u043A\u043E\u043C\u044C", "\u0437\u043D\u0430\u043A\u043E\u043C\u0441\u0442\u0432\u043E"],
560
+ es: ["presentarte", "presentaros"]
561
+ }
562
+ },
563
+ {
564
+ name: "money",
565
+ meaning: "pay, invoice, refund, a price or a debt",
566
+ triggers: {
567
+ en: [
568
+ "pay",
569
+ "payment",
570
+ "invoice",
571
+ "refund",
572
+ "price",
573
+ "money",
574
+ "transfer",
575
+ "debt",
576
+ "owe",
577
+ "cost",
578
+ "reimburse",
579
+ "expenses"
580
+ ],
581
+ ru: [
582
+ "\u043E\u043F\u043B\u0430\u0442\u0430",
583
+ "\u043E\u043F\u043B\u0430\u0442\u0438\u0442\u044C",
584
+ "\u043F\u043B\u0430\u0442\u0451\u0436",
585
+ "\u0441\u0447\u0451\u0442",
586
+ "\u0434\u0435\u043D\u044C\u0433\u0438",
587
+ "\u043F\u0435\u0440\u0435\u0432\u043E\u0434",
588
+ "\u043F\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438",
589
+ "\u0434\u043E\u043B\u0433",
590
+ "\u0446\u0435\u043D\u0430",
591
+ "\u0441\u0442\u043E\u0438\u043C\u043E\u0441\u0442\u044C",
592
+ "\u0432\u043E\u0437\u0432\u0440\u0430\u0442",
593
+ "\u0432\u0435\u0440\u043D\u0443\u0442\u044C",
594
+ "\u0441\u043A\u0438\u043D\u0443\u0442\u044C\u0441\u044F"
595
+ ],
596
+ es: ["pagar", "pago", "factura", "dinero", "transferencia", "deuda", "precio", "reembolso", "cobrar"]
597
+ }
598
+ },
599
+ {
600
+ name: "documents",
601
+ meaning: "a contract, scan, form or signature to send or receive",
602
+ triggers: {
603
+ en: [
604
+ "document",
605
+ "documents",
606
+ "contract",
607
+ "scan",
608
+ "sign",
609
+ "signature",
610
+ "form",
611
+ "certificate",
612
+ "pdf",
613
+ "agreement",
614
+ "nda"
615
+ ],
616
+ ru: ["\u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442", "\u0434\u043E\u0433\u043E\u0432\u043E\u0440", "\u0441\u043A\u0430\u043D", "\u043F\u043E\u0434\u043F\u0438\u0441\u0430\u0442\u044C", "\u043F\u043E\u0434\u043F\u0438\u0441\u044C", "\u0430\u043D\u043A\u0435\u0442\u0430", "\u0441\u043F\u0440\u0430\u0432\u043A\u0430", "\u0430\u043A\u0442", "\u0441\u043E\u0433\u043B\u0430\u0441\u0438\u0435", "\u043F\u0440\u043E\u0442\u043E\u043A\u043E\u043B"],
617
+ es: ["documento", "contrato", "escaneo", "firmar", "firma", "formulario", "certificado"]
618
+ }
619
+ },
620
+ {
621
+ name: "admin",
622
+ meaning: "office admin: supplies, errands, paperwork with no closer area",
623
+ triggers: {
624
+ en: ["admin", "paperwork", "errand", "errands", "stationery", "supplies"],
625
+ ru: ["\u043A\u0430\u043D\u0446\u0435\u043B\u044F\u0440\u0438\u044F", "\u043A\u0430\u043D\u0446\u0442\u043E\u0432\u0430\u0440\u044B", "\u043F\u043E\u0440\u0443\u0447\u0435\u043D\u0438\u0435", "\u0431\u0443\u043C\u0430\u0436\u043A\u0438"],
626
+ es: ["papeleo", "recado", "recados", "gestiones"]
627
+ }
628
+ },
629
+ {
630
+ name: "meeting",
631
+ meaning: "a call, meeting or appointment to arrange or attend",
632
+ triggers: {
633
+ en: ["meeting", "meet", "call", "appointment", "schedule", "zoom", "reschedule", "agenda", "sync", "standup"],
634
+ ru: ["\u0432\u0441\u0442\u0440\u0435\u0447\u0430", "\u0432\u0441\u0442\u0440\u0435\u0442\u0438\u0442\u044C\u0441\u044F", "\u0441\u043E\u0437\u0432\u043E\u043D", "\u0441\u043E\u0437\u0432\u043E\u043D\u0438\u0442\u044C\u0441\u044F", "\u0437\u0432\u043E\u043D\u043E\u043A", "\u043F\u043E\u0437\u0432\u043E\u043D\u0438\u0442\u044C", "\u0441\u043E\u0431\u0440\u0430\u043D\u0438\u0435"],
635
+ es: ["reuni\xF3n", "reunirse", "llamada", "cita", "agenda", "videollamada"]
636
+ }
637
+ },
638
+ {
639
+ name: "clients",
640
+ meaning: "a client's request, a proposal, a client follow-up",
641
+ triggers: {
642
+ en: ["client", "clients", "customer", "proposal"],
643
+ ru: ["\u043A\u043B\u0438\u0435\u043D\u0442", "\u0437\u0430\u043A\u0430\u0437\u0447\u0438\u043A"],
644
+ es: ["cliente", "propuesta"]
645
+ }
646
+ },
647
+ {
648
+ name: "projects",
649
+ meaning: "deliverables, deadlines, launches",
650
+ triggers: {
651
+ en: ["project", "deadline", "launch", "milestone", "deliverable", "roadmap", "sprint"],
652
+ ru: ["\u043F\u0440\u043E\u0435\u043A\u0442", "\u0434\u0435\u0434\u043B\u0430\u0439\u043D", "\u0437\u0430\u043F\u0443\u0441\u043A", "\u0441\u043F\u0440\u0438\u043D\u0442"],
653
+ es: ["proyecto", "lanzamiento", "plazo"]
654
+ }
655
+ },
656
+ {
657
+ name: "team",
658
+ meaning: "colleagues, reviews, one-to-ones, time off",
659
+ triggers: {
660
+ en: ["team", "colleague", "colleagues", "vacation", "onboarding", "manager"],
661
+ ru: ["\u043A\u043E\u043C\u0430\u043D\u0434\u0430", "\u043A\u043E\u043B\u043B\u0435\u0433\u0430", "\u043A\u043E\u043B\u043B\u0435\u0433\u0438", "\u043E\u0442\u043F\u0443\u0441\u043A", "\u043E\u043D\u0431\u043E\u0440\u0434\u0438\u043D\u0433", "\u0440\u0443\u043A\u043E\u0432\u043E\u0434\u0438\u0442\u0435\u043B\u044C"],
662
+ es: ["equipo", "compa\xF1ero", "vacaciones"]
663
+ }
664
+ },
665
+ {
666
+ name: "follow-up",
667
+ meaning: "you wait for someone: chase them",
668
+ triggers: {
669
+ en: ["remind", "reminder", "chase", "nudge", "followup"],
670
+ ru: ["\u043D\u0430\u043F\u043E\u043C\u0438\u043D\u0430\u044E", "\u043D\u0430\u043F\u043E\u043C\u043D\u0438\u0442\u044C", "\u043D\u0430\u043F\u043E\u043C\u0438\u043D\u0430\u043D\u0438\u0435", "\u043F\u0438\u043D\u0433"],
671
+ es: ["recordatorio", "recordar"]
672
+ }
673
+ },
674
+ {
675
+ name: "reply",
676
+ meaning: "someone waits for your answer",
677
+ triggers: {
678
+ en: ["reply", "respond", "answer"],
679
+ ru: ["\u043E\u0442\u0432\u0435\u0442\u044C", "\u043E\u0442\u0432\u0435\u0442\u0438\u0442\u044C", "\u043E\u0442\u0432\u0435\u0442"],
680
+ es: ["responder", "respuesta", "contestar", "contesta"]
681
+ }
682
+ },
683
+ {
684
+ name: "work",
685
+ meaning: "a job task with no closer category",
686
+ triggers: {
687
+ en: ["work", "job", "office", "task"],
688
+ ru: ["\u0440\u0430\u0431\u043E\u0442\u0430", "\u043E\u0444\u0438\u0441", "\u0437\u0430\u0434\u0430\u0447\u0430", "\u043D\u0430\u0447\u0430\u043B\u044C\u043D\u0438\u043A"],
689
+ es: ["trabajo", "oficina", "tarea", "jefe"]
690
+ }
691
+ },
692
+ {
693
+ name: "personal",
694
+ meaning: "friends, gifts, favours",
695
+ triggers: {
696
+ en: ["friend", "friends", "gift", "favour", "favor"],
697
+ ru: ["\u043F\u043E\u0434\u0440\u0443\u0433\u0430", "\u043F\u043E\u0434\u0430\u0440\u043E\u043A", "\u043F\u0440\u043E\u0441\u044C\u0431\u0430", "\u0434\u0440\u0443\u0437\u044C\u044F"],
698
+ es: ["amigo", "amiga", "regalo", "favor"]
699
+ }
700
+ },
701
+ { name: "other", meaning: "none of the above", triggers: { en: [], ru: [], es: [] } }
702
+ ];
703
+ var FALLBACK_CATEGORY = "other";
704
+ var unlistedNote = /* @__PURE__ */ __name((unlisted, tool) => unlisted.map(({ name, open, total }) => `${total} task${total === 1 ? "" : "s"} (${open} open) still use ${name}, which is not in the list: ${tool} tasks list category:${name} shows them, ${tool} tasks update <id> --category <name> moves one`), "unlistedNote");
705
+ var LANGUAGES = ["en", "ru", "es"];
706
+ var NAME = /^[a-z][a-z0-9-]{0,29}$/;
707
+ var MAX_CATEGORIES = 80;
708
+ var parseTaskCategory = /* @__PURE__ */ __name((name, value) => {
709
+ const named = name.trim().toLowerCase();
710
+ if (!NAME.test(named))
711
+ throw new CliError("validation_error", `a category name is a lower-case word of letters, digits and -, up to 30 \u2014 not "${singleLine(name)}"`);
712
+ const [meaning = "", words = ""] = value.split("|", 2).map((part) => part.trim());
713
+ if (!meaning || meaning.length > 200)
714
+ throw new CliError("validation_error", 'a category takes "<meaning> | <trigger words, comma-separated>", the meaning up to 200 characters');
715
+ const triggers = { en: [], ru: [], es: [] };
716
+ for (const typed of words.split(",").map((word) => word.trim()).filter(Boolean)) {
717
+ const tagged = /^(en|ru|es):\s*(.+)$/i.exec(typed);
718
+ const word = (tagged?.[2] ?? typed).toLowerCase();
719
+ const language = tagged?.[1]?.toLowerCase() ?? (new RegExp("\\p{Script=Cyrillic}", "u").test(word) ? "ru" : "en");
720
+ if (!triggers[language].includes(word))
721
+ triggers[language].push(word.slice(0, 60));
722
+ }
723
+ if (Object.values(triggers).flat().length > 100)
724
+ throw new CliError("validation_error", "a category takes up to 100 trigger words");
725
+ return { name: named, meaning, triggers };
726
+ }, "parseTaskCategory");
727
+ var withTaskCategory = /* @__PURE__ */ __name((list, name, value) => {
728
+ const named = name.trim().toLowerCase();
729
+ if (value === void 0) {
730
+ if (named === FALLBACK_CATEGORY)
731
+ throw new CliError("validation_error", `${FALLBACK_CATEGORY} stays: a rule picks it when no trigger word matches`);
732
+ if (!list.some((one) => one.name === named))
733
+ throw new CliError("not_found", `no task category ${singleLine(named)} \u2014 tasks categories lists them`);
734
+ return list.filter((one) => one.name !== named);
735
+ }
736
+ const category = parseTaskCategory(named, value);
737
+ if (list.some((one) => one.name === named))
738
+ return list.map((one) => one.name === named ? category : one);
739
+ if (list.length >= MAX_CATEGORIES)
740
+ throw new CliError("validation_error", `the category list takes up to ${MAX_CATEGORIES} categories`);
741
+ const fallback = list.findIndex((one) => one.name === FALLBACK_CATEGORY);
742
+ return fallback < 0 ? [...list, category] : [...list.slice(0, fallback), category, ...list.slice(fallback)];
743
+ }, "withTaskCategory");
744
+ var taskCategoryValue = /* @__PURE__ */ __name(({ meaning, triggers }) => {
745
+ const words = LANGUAGES.flatMap((language) => triggers[language].map((word) => `${language}:${word}`));
746
+ return words.length === 0 ? meaning : `${meaning} | ${words.join(", ")}`;
747
+ }, "taskCategoryValue");
748
+ var wordsOf = /* @__PURE__ */ __name((words) => Array.isArray(words) ? words.map(String) : [], "wordsOf");
749
+ var storedTaskCategories = /* @__PURE__ */ __name((json) => {
750
+ try {
751
+ const parsed = JSON.parse(json);
752
+ if (!Array.isArray(parsed))
753
+ return void 0;
754
+ const list = parsed.map((one) => {
755
+ const { name, meaning, triggers } = one;
756
+ if (typeof name !== "string" || typeof meaning !== "string" || typeof triggers !== "object")
757
+ throw new Error();
758
+ return {
759
+ name,
760
+ meaning,
761
+ triggers: {
762
+ en: wordsOf(triggers.en),
763
+ ru: wordsOf(triggers.ru),
764
+ es: wordsOf(triggers.es)
765
+ }
766
+ };
767
+ });
768
+ return list.some((one) => one.name === FALLBACK_CATEGORY) ? list : void 0;
769
+ } catch {
770
+ return void 0;
771
+ }
772
+ }, "storedTaskCategories");
773
+
774
+ // node_modules/.pnpm/@wirecat+cli-core@0.473.0_@wirecat+cli-base@0.65.0_commander@15.0.0_esbuild@0.28.2_type_39633e3162553a2c86dde989a9811fcb/node_modules/@wirecat/cli-core/dist/store/shared-config.js
775
+ var SECTION = "task_categories";
776
+ var sharedConfigPath = /* @__PURE__ */ __name((store, env = process.env) => {
777
+ const paths = resolvePaths({ appName: "WireCat", prefix: "WIRECAT", env });
778
+ if (env.WIRECAT_CONFIG_DIR)
779
+ return join(paths.config, "config.json");
780
+ return resolve(store) === resolve(storePath({ ...env, MESSAGING_STORE: void 0 })) ? join(paths.config, "config.json") : join(dirname(store), "config.json");
781
+ }, "sharedConfigPath");
782
+ var readJson = /* @__PURE__ */ __name((path) => {
783
+ let text;
784
+ try {
785
+ text = readFileSync(path, "utf8");
786
+ } catch (error) {
787
+ if (error.code === "ENOENT")
788
+ return void 0;
789
+ throw error;
790
+ }
791
+ let parsed;
792
+ try {
793
+ parsed = JSON.parse(text);
794
+ } catch (error) {
795
+ throw new CliError("configuration_error", `${path} is not valid JSON: ${error.message}`);
796
+ }
797
+ if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed))
798
+ throw new CliError("configuration_error", `${path} must hold a JSON object`);
799
+ return parsed;
800
+ }, "readJson");
801
+ var readTaskCategoryEdits = /* @__PURE__ */ __name((path) => {
802
+ const section = readSharedSection(path, SECTION);
803
+ if (section === void 0)
804
+ return void 0;
805
+ if (section === null || typeof section !== "object" || Array.isArray(section))
806
+ throw new CliError("configuration_error", `${path}: ${SECTION} must be an object of "<name>": "<meaning> | <words>"`);
807
+ for (const [name, value] of Object.entries(section))
808
+ if (value !== null && typeof value !== "string")
809
+ throw new CliError("configuration_error", `${path}: ${SECTION}.${name} takes "<meaning> | <words>", or null to drop the category`);
810
+ return section;
811
+ }, "readTaskCategoryEdits");
812
+ var applyTaskCategoryEdits = /* @__PURE__ */ __name((base, edits, path) => Object.entries(edits).reduce((list, [name, value]) => {
813
+ if (value === null && !list.some((one) => one.name === name.trim().toLowerCase()))
814
+ return list;
815
+ try {
816
+ return withTaskCategory(list, name, value ?? void 0);
817
+ } catch (error) {
818
+ if (error instanceof CliError)
819
+ throw new CliError("configuration_error", `${path}: ${error.message}`);
820
+ throw error;
821
+ }
822
+ }, base), "applyTaskCategoryEdits");
823
+ var editsFrom = /* @__PURE__ */ __name((list) => {
824
+ const edits = {};
825
+ const kept = new Map(list.map((one) => [one.name, one]));
826
+ for (const one of DEFAULT_TASK_CATEGORIES)
827
+ if (!kept.has(one.name) && one.name !== FALLBACK_CATEGORY)
828
+ edits[one.name] = null;
829
+ for (const one of list) {
830
+ const value = taskCategoryValue(one);
831
+ const before = DEFAULT_TASK_CATEGORIES.find(({ name }) => name === one.name);
832
+ if (!before || taskCategoryValue(before) !== value)
833
+ edits[one.name] = value;
834
+ }
835
+ return edits;
836
+ }, "editsFrom");
837
+ var readSharedSection = /* @__PURE__ */ __name((path, section) => readJson(path)?.[section], "readSharedSection");
838
+ var writeSharedSection = /* @__PURE__ */ __name((path, section, value) => {
839
+ const file = readJson(path) ?? {};
840
+ if (value === void 0)
841
+ delete file[section];
842
+ else
843
+ file[section] = value;
844
+ mkdirSync(dirname(path), { recursive: true, mode: 448 });
845
+ const temporary = `${path}.${process.pid}.tmp`;
846
+ writeFileSync(temporary, `${JSON.stringify(file, null, 2)}
847
+ `, { mode: 384 });
848
+ renameSync(temporary, path);
849
+ }, "writeSharedSection");
850
+ var writeTaskCategoryEdits = /* @__PURE__ */ __name((path, edits) => writeSharedSection(path, SECTION, edits === void 0 || Object.keys(edits).length === 0 ? void 0 : edits), "writeTaskCategoryEdits");
851
+ var taskCategoriesReader = /* @__PURE__ */ __name((path) => {
852
+ let seen;
853
+ return (base) => {
854
+ let stamp = "none";
855
+ try {
856
+ const { mtimeMs, size } = statSync(path);
857
+ stamp = `${mtimeMs}:${size}`;
858
+ } catch {
859
+ }
860
+ if (seen?.stamp === stamp && seen.base === base)
861
+ return seen.list;
862
+ const edits = readTaskCategoryEdits(path);
863
+ const list = edits ? applyTaskCategoryEdits(base, edits, path) : base;
864
+ seen = { stamp, base, list };
865
+ return list;
866
+ };
867
+ }, "taskCategoriesReader");
868
+
869
+ export {
870
+ DEFAULT_TASK_CATEGORIES,
871
+ FALLBACK_CATEGORY,
872
+ unlistedNote,
873
+ withTaskCategory,
874
+ taskCategoryValue,
875
+ storedTaskCategories,
876
+ sharedConfigPath,
877
+ readTaskCategoryEdits,
878
+ applyTaskCategoryEdits,
879
+ editsFrom,
880
+ readSharedSection,
881
+ writeSharedSection,
882
+ writeTaskCategoryEdits,
883
+ taskCategoriesReader
884
+ };